die();
}
+nocache_headers();
+
if ( is_object( $wp_object_cache ) )
$wp_object_cache->cache_enabled = false;
wp_enqueue_script( 'underscore' );
-$title = __( 'About' );
+/* translators: Page title of the About WordPress page in the admin. */
+$title = _x( 'About', 'page title' );
list( $display_version ) = explode( '-', get_bloginfo( 'version' ) );
<a href="about.php" class="nav-tab nav-tab-active"><?php _e( 'What’s New' ); ?></a>
<a href="credits.php" class="nav-tab"><?php _e( 'Credits' ); ?></a>
<a href="freedoms.php" class="nav-tab"><?php _e( 'Freedoms' ); ?></a>
- <a href="privacy.php" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
+ <a href="freedoms.php?privacy-notice" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
</h2>
<div class="changelog point-releases">
<h3><?php _e( 'Maintenance and Security Releases' ); ?></h3>
+ <p>
+ <?php
+ printf(
+ /* translators: 1: WordPress version number, 2: plural number of bugs. */
+ _n(
+ '<strong>Version %1$s</strong> addressed %2$s bug.',
+ '<strong>Version %1$s</strong> addressed %2$s bugs.',
+ 46
+ ),
+ '4.9.8',
+ number_format_i18n( 46 )
+ );
+
+ printf(
+ /* translators: %s: Codex URL */
+ __( 'For more information, see <a href="%s">the release notes</a>.' ),
+ 'https://codex.wordpress.org/Version_4.9.8'
+ );
+ ?>
+ </p>
+ <p>
+ <?php
+ printf(
+ /* translators: 1: WordPress version number, 2: plural number of bugs. */
+ _n(
+ '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bug.',
+ '<strong>Version %1$s</strong> addressed some security issues and fixed %2$s bugs.',
+ 17
+ ),
+ '4.9.7',
+ number_format_i18n( 17 )
+ );
+ ?>
+ <?php
+ /* translators: %s: Codex URL */
+ printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.9.7' );
+ ?>
+ </p>
+ <p>
+ <?php
+ printf(
+ /* translators: 1: WordPress version number, 2: plural number of bugs. */
+ _n(
+ '<strong>Version %1$s</strong> addressed %2$s bug.',
+ '<strong>Version %1$s</strong> addressed %2$s bugs.',
+ 18
+ ),
+ '4.9.6',
+ number_format_i18n( 18 )
+ );
+ ?>
+ <?php
+ /* translators: %s: Codex URL */
+ printf( __( 'For more information, see <a href="%s">the release notes</a>.' ), 'https://codex.wordpress.org/Version_4.9.6' );
+ ?>
+ </p>
<p>
<?php
printf(
'generate-password', 'save-wporg-username', 'delete-plugin', 'search-plugins',
'search-install-plugins', 'activate-plugin', 'update-theme', 'delete-theme', 'install-theme',
'get-post-thumbnail-html', 'get-community-events', 'edit-theme-plugin-file',
+ 'wp-privacy-export-personal-data',
+ 'wp-privacy-erase-personal-data',
+ 'update-try-gutenberg-panel',
);
// Deprecated
<a href="about.php" class="nav-tab"><?php _e( 'What’s New' ); ?></a>
<a href="credits.php" class="nav-tab nav-tab-active"><?php _e( 'Credits' ); ?></a>
<a href="freedoms.php" class="nav-tab"><?php _e( 'Freedoms' ); ?></a>
- <a href="privacy.php" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
+ <a href="freedoms.php?privacy-notice" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
</h2>
<div class="about-wrap-content">
echo '<p class="about-description">' . __( 'WordPress is created by a worldwide team of passionate individuals.' ) . "</p>\n";
+echo '<p>' . sprintf(
+ /* translators: %s: https://make.wordpress.org/ */
+ __( 'Want to see your name in lights on this page? <a href="%s">Get involved in WordPress</a>.' ),
+ __( 'https://make.wordpress.org/' )
+) . '</p>';
+
foreach ( $credits['groups'] as $group_slug => $group_data ) {
if ( $group_data['name'] ) {
if ( 'Translators' == $group_data['name'] ) {
}
?>
-<p class="clear"><?php
- /* translators: %s: https://make.wordpress.org/ */
- printf( __( 'Want to see your name in lights on this page? <a href="%s">Get involved in WordPress</a>.' ),
- __( 'https://make.wordpress.org/' )
- );
-?></p>
-
</div>
</div>
<?php
/* @todo can we combine these into a class or use an existing dashicon one? */
.welcome-panel .welcome-panel-close:before,
+.try-gutenberg-panel .try-gutenberg-panel-close:before,
.tagchecklist .ntdelbutton .remove-tag-icon:before,
#bulk-titles div a:before,
.notice-dismiss:before {
/* Metabox collapse arrow indicators */
.sidebar-name .toggle-indicator:before,
.js .meta-box-sortables .postbox .toggle-indicator:before,
-.bulk-action-notice .toggle-indicator:before {
+.bulk-action-notice .toggle-indicator:before,
+.privacy-text-box .toggle-indicator:before {
content: "\f142";
display: inline-block;
font: normal 20px/1 dashicons;
.js .widgets-holder-wrap.closed .toggle-indicator:before,
.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,
-.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before {
+.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,
+.privacy-text-box.closed .toggle-indicator:before {
content: "\f140";
}
/*! This file is auto-generated */
-.button.updated-message,a{transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading,.spinner,.wp-header-end{visibility:hidden}.filter-group,.postbox-container .meta-box-sortables,.wp-filter,html.wp-toolbar{box-sizing:border-box}#docs-list,#plugin-information .section,#template textarea,.code,.ltr,code{direction:ltr}#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%;padding-right:20px}#wpcontent,#wpfooter{margin-right:160px}.folded #wpcontent,.folded #wpfooter{margin-right:36px}#wpbody-content{padding-bottom:65px;float:right;width:100%;overflow:visible!important}.inner-sidebar{float:left;clear:left;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-left:auto;width:286px;display:block}.columns-2 .inner-sidebar #side-sortables,.inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:right;clear:right;width:100%;margin-left:-2000px}.has-right-sidebar #post-body-content{margin-left:300px;float:none;width:auto}#col-left{float:right;width:35%}#col-right{float:left;width:65%}#col-left .col-wrap{padding:0 0 0 6px}#col-right .col-wrap{padding:0 6px 0 0}.alignleft{float:right}.alignright{float:left}#publishing-action .spinner,#save-post,.subsubsub{float:right}.textleft{text-align:right}.textright{text-align:left}.clear{clear:both}.wp-clearfix:after{content:"";display:table;clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#templateside,.misc-pub-filename,.pre,.widefat *{word-wrap:break-word}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{right:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#0073aa;z-index:100000;line-height:normal;box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.js .wp-core-ui .hide-if-js,.js.wp-core-ui .hide-if-js,.no-js .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js,.no-js.wp-core-ui .hide-if-no-js{display:none}#menu-management .menu-edit,#menu-settings-column .accordion-container,.comment-ays,.feature-filter,.imgedit-group,.manage-menus,.menu-item-handle,.popular-tags,.stuffbox,.widget-inside,.widget-top,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.comment-ays,.feature-filter,.imgedit-group,.popular-tags,.stuffbox,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{background:#fff}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.modal-open{overflow:hidden}body.mobile.modal-open #wpwrap{overflow:hidden;position:fixed;height:100%}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0073aa}a,div{outline:0}a:active,a:hover{color:#00a0d2}.wp-person a:focus .gravatar,a:focus,a:focus .media-icon img{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}h1,h2,h3{color:#23282d}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus,.screen-reader-text:focus{box-shadow:none;outline:0}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}p{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}dd,li{margin-bottom:6px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2,h3{font-size:1.3em;margin:1em 0}.update-core-php h2{margin-top:2em}.update-messages h2,.update-php h2,h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}ol,ul{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-right:2em}ul.ul-disc{list-style:disc}ul.ul-square{list-style:square}ol.ol-decimal{list-style:decimal}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-right:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.code,code{font-family:Consolas,Monaco,monospace;unicode-bidi:embed}code,kbd{padding:3px 5px 2px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#555d66;font-weight:400}.subsubsub a.current{font-weight:600;border:none}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat a,.widefat button.button-link{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead td,.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot td,.widefat tfoot th{border-top:1px solid #e1e1e1;border-bottom:none}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat tfoot td,.widefat th,.widefat thead td{text-align:right;line-height:1.3em;font-size:14px}.updates-table td input,.widefat tfoot td input,.widefat th input,.widefat thead td input{margin:0 8px 0 0;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:6px 0 25px;vertical-align:top}.updates-table tbody td.check-column,.widefat tbody th.check-column,.widefat tfoot td.check-column,.widefat thead td.check-column{padding:11px 3px 0 0}.widefat tfoot td.check-column,.widefat thead td.check-column{padding-top:4px;vertical-align:middle}.update-php div.error,.update-php div.updated{margin-right:0}.no-js .widefat tfoot .check-column input,.no-js .widefat thead .check-column input{display:none}.column-comments,.column-links,.column-posts,.widefat .num{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 2px 0 20px}.postbox .inside h2,.wrap [class$=icon32]+h2,.wrap h1,.wrap>h2:first-child{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px;line-height:29px}.wrap h1.wp-heading-inline{display:inline-block;margin-left:5px}.wp-header-end{margin:-2px 0 0}.subtitle{margin:0;padding-right:25px;color:#555d66;font-size:14px;font-weight:400;line-height:1}.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{margin-right:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:none;border:1px solid #ccc;border-radius:2px;background:#f7f7f7;text-shadow:none;font-weight:600;font-size:13px;line-height:normal;color:#0073aa;cursor:pointer;outline:0}.wrap .wp-heading-inline+.page-title-action{margin-right:0}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{border-color:#008EC2;background:#00a0d2;color:#fff}.page-title-action:focus{color:#124964}.ac_match,.highlight,.subsubsub a.current{color:#000}.wrap .page-title-action:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.wrap h1.long-header{padding-left:0}.wp-dialog{background-color:#fff}#available-widgets .widget-top:hover,#widgets-left .widget-in-question .widget-top,#widgets-left .widget-top:hover,.widgets-chooser ul,div#widgets-right .widget-top:hover{border-color:#999;box-shadow:0 1px 2px rgba(0,0,0,.1)}.sorthelper{background-color:#ccf3fa}.alternate,.striped>tbody>:nth-child(odd),ul.striped>:nth-child(odd){background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-left-color:#99d}.highlight{background-color:#e4f2fd}.wp-ui-primary{color:#fff;background-color:#32373c}.wp-ui-text-primary{color:#32373c}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#d54e21}.wp-ui-text-notification{color:#d54e21}.wp-ui-text-icon{color:#82878c}img.emoji{display:inline!important;border:none!important;height:1em!important;width:1em!important;margin:0 .07em!important;vertical-align:-.1em!important;background:0 0!important;padding:0!important;box-shadow:none!important}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox .hndle,.side-info,.sidebar-name,.stuffbox .hndle,.widefat tfoot td,.widefat tfoot th,.widefat thead td,.widefat thead th,.widget .widget-top{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#23282d}.postbox .hndle,.stuffbox .hndle{border-bottom:1px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,.notice-dismiss:before,.tagchecklist .ntdelbutton .remove-tag-icon:before,.welcome-panel .welcome-panel-close:before{background:0 0;color:#72777c;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.welcome-panel .welcome-panel-close:before{margin:0}#bulk-titles div a:before{margin:1px 0}.tagchecklist .ntdelbutton .remove-tag-icon:before{margin-right:2px;border-radius:50%;color:#0073aa;line-height:1.28}.tagchecklist .ntdelbutton:focus{outline:0}#bulk-titles div a:focus:before,#bulk-titles div a:hover:before,.tagchecklist .ntdelbutton:focus .remove-tag-icon:before,.tagchecklist .ntdelbutton:hover .remove-tag-icon:before,.welcome-panel .welcome-panel-close:focus:before,.welcome-panel .welcome-panel-close:hover:before{color:#c00}.tagchecklist .ntdelbutton:focus .remove-tag-icon:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap}#namediv td.first,.nav-tab,.no-break,.star-rating{white-space:nowrap}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#delete-link a.delete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete,#search-plugins-table .plugins a.delete,.plugins a.delete,.row-actions span.delete a,.row-actions span.spam a,.row-actions span.trash a,.submitbox .submitdelete{color:#a00}#all-plugins-table .plugins a.delete:hover,#delete-link a.delete:hover,#media-items a.delete-permanently:hover,#media-items a.delete:hover,#nav-menu-footer .menu-delete:hover,#search-plugins-table .plugins a.delete:hover,.file-error,.plugins a.delete:hover,.row-actions .delete a:hover,.row-actions .spam a:hover,.row-actions .trash a:hover,.submitbox .submitdelete:hover,abbr.required,span.required{color:#dc3232;border:none}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{float:right;line-height:28px}#delete-link{line-height:28px;vertical-align:middle;text-align:right;margin-right:8px}#delete-link a{text-decoration:none}#publishing-action{text-align:left;float:left;line-height:23px}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:left}.preview{float:left}#sticky-span{margin-right:18px}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:left}#misc-publishing-actions .notice{margin-right:10px;margin-left:10px}.wp-filter{display:inline-block;position:relative;margin:12px 0 25px;padding:0 10px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #e5e5e5;background:#fff;color:#555;font-size:13px}.wp-filter a{text-decoration:none}.filter-count{display:inline-block;vertical-align:middle;min-width:4em}.filter-count .count,.title-count{display:inline-block;position:relative;top:-1px;padding:4px 10px;border-radius:30px;background:#72777c;color:#fff;font-size:14px;font-weight:600}.title-count{display:inline;top:-3px;margin-right:5px;margin-left:20px}.filter-links li>a,.wp-filter .search-form.search-plugins{display:inline-block}.filter-items{float:right}.filter-links,.filter-links li{display:inline-block;margin:0}.filter-links li>a{margin:0 10px;padding:15px 0;border-bottom:4px solid #fff;color:#666;cursor:pointer}.filter-links .current{box-shadow:none;border-bottom:4px solid #666;color:#23282d}.filter-links li>a:focus,.filter-links li>a:hover,.show-filters .filter-links a.current:focus,.show-filters .filter-links a.current:hover{color:#00a0d2}.wp-filter .search-form{float:left;margin:10px 0}.wp-filter .search-form input[type=search]{margin:0;padding:3px 5px;width:280px;max-width:100%;font-size:16px;font-weight:300;line-height:1.5}.wp-filter .search-form select{margin:0;height:32px;vertical-align:top}.wp-filter .button.drawer-toggle{margin:10px 9px 0;padding:0 6px 0 10px;border-color:transparent;background-color:transparent;color:#666;vertical-align:baseline;box-shadow:none}.wp-filter .drawer-toggle:before{content:"\f111";margin:0 0 0 5px;color:#72777c;font:400 16px/1 dashicons;vertical-align:text-bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-filter .button.drawer-toggle:focus,.wp-filter .button.drawer-toggle:hover,.wp-filter .drawer-toggle:focus:before,.wp-filter .drawer-toggle:hover:before{background-color:transparent;color:#00a0d2}.wp-filter .button.drawer-toggle:focus:active,.wp-filter .button.drawer-toggle:hover{border-color:transparent}.wp-filter .button.drawer-toggle:focus{border-color:#5b9dd9}.wp-filter .button.drawer-toggle:active{background:0 0;box-shadow:none;-webkit-transform:none;transform:none}.wp-filter .drawer-toggle.current:before{color:#fff}.filter-drawer,.wp-filter .favorites-form{display:none;margin:0 -20px 0 -10px;padding:20px;border-top:1px solid #eee;background:#fafafa;overflow:hidden}.show-favorites-form .favorites-form,.show-filters .filter-drawer{display:block}.show-filters .filter-links a.current{border-bottom:none}.show-filters .wp-filter .button.drawer-toggle{border-radius:2px;background:#72777c;color:#fff}.filter-group,.filtered-by .tag{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.show-filters .wp-filter .drawer-toggle:focus,.show-filters .wp-filter .drawer-toggle:hover{background:#2ea2cc}.show-filters .wp-filter .drawer-toggle:before{color:#fff}.filter-group{position:relative;float:right;margin:0 0 0 1%;padding:20px 10px 10px;width:24%;background:#fff}.filter-group legend{position:absolute;top:10px;display:block;margin:0;padding:0;font-size:1em;font-weight:600}.filter-drawer .filter-group-feature{margin:28px 0 0;list-style-type:none;font-size:12px}.filter-drawer .filter-group-feature input,.filter-drawer .filter-group-feature label{line-height:16px}.filter-drawer .filter-group-feature input{position:absolute;margin:0}.filter-group .filter-group-feature label{display:block;margin:14px 23px 14px 0}.filter-drawer .buttons{clear:both;margin-bottom:20px}.filter-drawer .filter-group+.buttons{margin-bottom:0;padding-top:20px}.filter-drawer .buttons .button span{display:inline-block;opacity:.8;font-size:12px;text-indent:10px}.wp-filter .button.clear-filters{display:none;margin-right:10px}.wp-filter .button-link.edit-filters{padding:0 5px;line-height:28px}.filtered-by{display:none;margin:0}.filtered-by>span{font-weight:600}.filtered-by a{margin-right:10px}.filtered-by .tags{display:inline}.filtered-by .tag{margin:0 5px;padding:4px 8px;background:#fff;font-size:11px}.filters-applied .filter-drawer .buttons,.filters-applied .filter-drawer br,.filters-applied .filter-group{display:none!important}.filters-applied .filtered-by{display:block}.filters-applied .filter-drawer{padding:20px}.error .content-filterable,.loading-content .content-filterable,.show-filters .content-filterable,.show-filters .favorites-form,.show-filters.filters-applied.loading-content .content-filterable{display:none}.show-filters.filters-applied .content-filterable{display:block}.loading-content .spinner{display:block;margin:40px auto 0;float:none}@media only screen and (max-width:1120px){.filter-drawer{border-bottom:1px solid #eee}.filter-group{margin-bottom:0;margin-top:5px;width:100%}.filter-group li{margin:10px 0}}@media only screen and (max-width:1000px){.filter-items{float:none}.wp-filter .media-toolbar-primary,.wp-filter .media-toolbar-secondary,.wp-filter .search-form{float:none;position:relative;max-width:100%}}@media only screen and (max-width:782px){.filter-group li{padding:0;width:50%}}@media only screen and (max-width:320px){.filter-count{display:none}.wp-filter .drawer-toggle{margin:10px 0}.filter-group li,.wp-filter .search-form input[type=search]{width:100%}}.notice,div.error,div.updated{background:#fff;border-right:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 15px 2px;padding:1px 12px}div[class=update-message]{padding:.5em 0 .5em 12px}.form-table td .notice p,.notice p,.notice-title,div.error p,div.updated p{margin:.5em 0;padding:2px}.error a{text-decoration:underline}.updated a{padding-bottom:2px}.notice-alt{box-shadow:none}.notice-large{padding:10px 20px}.notice-title{display:inline-block;color:#23282d;font-size:18px}.wp-core-ui .notice.is-dismissible{padding-left:38px;position:relative}.notice-dismiss{position:absolute;top:0;left:1px;border:none;margin:0;padding:9px;background:0 0;color:#72777c;cursor:pointer}.notice-dismiss:active:before,.notice-dismiss:focus:before,.notice-dismiss:hover:before{color:#c00}.notice-dismiss:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .notice-dismiss:focus{outline:#5b9dd9 solid 1px}.notice-success,div.updated{border-right-color:#46b450}.notice-success.notice-alt{background-color:#ecf7ed}.notice-warning{border-right-color:#ffb900}.notice-warning.notice-alt{background-color:#fff8e5}.notice-error,div.error{border-right-color:#dc3232}.notice-error.notice-alt{background-color:#fbeaea}.notice-info{border-right-color:#00a0d2}.notice-info.notice-alt{background-color:#e5f5fa}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updated-message p:before,.updating-message p:before{display:inline-block;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.media-upload-form .notice,.media-upload-form div.error,.wrap .notice,.wrap div.error,.wrap div.updated{margin:5px 0 15px}.wrap #templateside .notice{display:block;margin:0;padding:5px 8px;font-weight:600;text-decoration:none}.wrap #templateside span.notice{margin-right:-12px}#templateside li.notice a{padding:0}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updating-message p:before{color:#f56e28;content:"\f463"}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.updating-message p:before{-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.button.updated-message:before,.installed p:before,.updated-message p:before{color:#79ba49;content:'\f147'}.update-message.notice-error p:before{color:#dc3232;content:"\f534"}.import-php .updating-message:before,.wrap .notice p:before{margin-left:6px;vertical-align:bottom}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:right;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#screen-meta,ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em}.update-php .spinner{float:none;margin:-4px 0}#ajax-response.alignleft{margin-right:2em}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before{margin:3px -2px 0 5px}.button-primary.updating-message:before{color:#fff}.button-primary.updated-message:before{color:#66c6e4}@media aural{.button.installed:before,.button.installing:before,.update-message p:before,.wrap .notice p:before{speak:none}}#adminmenu a,#catlist a,#taglist a{text-decoration:none}#contextual-help-wrap,#screen-options-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-right:0!important}#screen-meta-links{margin:0 0 0 20px}#screen-meta{margin:0 0 -1px 20px;position:relative;background-color:#fff;border:1px solid #ddd;border-top:none;box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-link-wrap,#screen-options-link-wrap{float:left;height:28px;margin:0 6px 0 0;border:1px solid #ddd;border-top:none;background:#fff;box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links .show-settings{border:0;background:0 0;border-radius:0;color:#72777c;line-height:1.7;padding:3px 16px 3px 6px}#screen-meta-links .show-settings:active,#screen-meta-links .show-settings:focus,#screen-meta-links .show-settings:hover{color:#32373c}#screen-meta-links .show-settings:active{box-shadow:none;-webkit-transform:none;transform:none}#screen-meta-links .show-settings:after{left:0;content:"\f140";font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 5px;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#72777c}#templateside ul li a,.contextual-help-tabs a,.nav-tab{text-decoration:none}#screen-meta-links .screen-meta-active:after{content:"\f142"}.toggle-arrow{background-repeat:no-repeat;background-position:top right;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom right}#contextual-help-wrap h5,#screen-options-wrap h5,#screen-options-wrap legend{margin:0;padding:8px 0;font-size:13px;font-weight:600}.hndle a,.widefat tfoot td,.widefat th,.widefat thead td{font-weight:400}.ie8 #screen-options-wrap legend{color:inherit}.metabox-prefs label{display:inline-block;padding-left:15px;line-height:30px}#number-of-columns{display:inline-block;vertical-align:middle;line-height:30px}.metabox-prefs input[type=checkbox]{margin-top:0;margin-left:6px}.metabox-prefs label input,.metabox-prefs label input[type=checkbox]{margin:-4px 0 0 5px}.metabox-prefs .columns-prefs label input{margin:-1px 0 0 2px}.metabox-prefs label a{display:none}.metabox-prefs .screen-options input,.metabox-prefs .screen-options label{margin-top:0;margin-bottom:0;vertical-align:middle}.metabox-prefs .screen-options .screen-per-page{margin-left:15px}.metabox-prefs .screen-options label{line-height:28px;padding-left:0}.screen-options+.screen-options{margin-top:10px}.metabox-prefs .submit{margin-top:1em;padding:0}#contextual-help-wrap{padding:0}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;right:150px;left:170px;border:1px solid #e1e1e1;border-top:none;border-bottom:none;background:#f6fbfd}#contextual-help-wrap.no-sidebar #contextual-help-back{left:0;border-left-width:0;border-bottom-left-radius:2px}.contextual-help-tabs{float:right;width:150px;margin:0}.contextual-help-tabs ul{margin:1em 0}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:0 2px 0 0;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 12px 5px 5px;line-height:18px;border:1px solid transparent;border-left:none;border-right:none}.contextual-help-tabs a:hover{color:#32373c}.contextual-help-tabs .active{padding:0;margin:0 0 0 -1px;border-right:2px solid #00a0d2;background:#f6fbfd;box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active a{border-color:#e1e1e1;color:#32373c}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 0 12px 22px;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content ul li{list-style-type:disc;margin-right:18px}.contextual-help-sidebar{width:150px;float:left;padding:0 12px 0 8px;overflow:auto}html.wp-toolbar{padding-top:32px}.widefat td,.widefat th{color:#555}.widefat ol,.widefat p,.widefat tfoot tr td,.widefat tfoot tr th,.widefat thead tr td,.widefat thead tr th,.widefat ul{color:#32373c}.widefat td p{margin:2px 0 .8em}.widefat .column-comment p{margin:.6em 0}.widefat .column-comment ul{list-style:outside;margin-right:2em}.postbox-container{float:right}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #b4b9be;height:250px;position:relative}.metabox-holder .postbox-container .empty-container:after{content:attr(data-emptystring);margin:auto;position:absolute;top:0;right:0;bottom:0;left:0;height:1em;width:200px;text-align:center;color:#ccc;font-size:18px;display:none}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:right}#post-body.columns-2 #postbox-container-1{float:left;margin-left:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content .metabox-holder .postbox-container .empty-container{border:0;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{cursor:move}.hndle a{font-size:11px}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.nav-tab,.plugins .name{font-weight:600}.postbox .handlediv{display:none;float:left;width:36px;height:36px;margin:0;padding:0;border:0;background:0 0;cursor:pointer}.js .postbox .handlediv{display:block}.sortable-placeholder{border:1px dashed #b4b9be;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 0 0 10px}#wpfooter{position:absolute;bottom:0;right:0;left:0;padding:10px 20px;color:#555d66}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}.nav-tab{float:right;border:1px solid #ccc;border-bottom:none;margin-right:.5em;padding:5px 10px;font-size:14px;line-height:24px;background:#e5e5e5;color:#555}.nav-tab-small .nav-tab,h3 .nav-tab{padding:5px 14px;font-size:12px;line-height:16px}.nav-tab:focus,.nav-tab:hover{background-color:#fff;color:#444}.nav-tab-active,.nav-tab:focus:active{box-shadow:none}.nav-tab-active{margin-bottom:-1px;color:#444}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:1px solid #ccc;margin:0;padding-top:9px;padding-bottom:0;line-height:inherit}.nav-tab-wrapper:not(.wp-clearfix):after{content:"";display:table;clear:both}.ie8 .nav-tab-wrapper{display:inline-block;width:100%;vertical-align:top}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:inline-block;float:left;vertical-align:middle;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:4px 10px 0}.loading-content .spinner,.spinner.is-active{visibility:visible}#template>div{margin-left:16em}#template .notice{margin-top:1em;margin-left:3%}#template .notice p{width:auto}#template .submit .spinner{float:none}.metabox-holder .postbox>h3,.metabox-holder .stuffbox>h3,.metabox-holder h2.hndle,.metabox-holder h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}.nav-menus-php .metabox-holder h3{padding:10px 14px 11px 10px;line-height:21px}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:right}.attention,.error-message{color:#dc3232;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}#howto,.importer-action,.importer-desc,.importer-title{display:block}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}.media-icon{width:62px;text-align:center}.media-icon img{border:1px solid #e5e5e5;border:1px solid rgba(0,0,0,.07)}#howto{font-size:11px;margin:0 5px}.importers{font-size:16px;width:auto}.importers td{padding-left:14px;line-height:1.5em}.importers .import-system{max-width:250px}.importers td.desc{max-width:500px}.post-categories,.post-categories li{display:inline}.importer-title{color:#000;font-size:14px;font-weight:400;margin-bottom:.2em}.importer-action{line-height:20px;color:#555;margin-bottom:1em}#post-body #post-body-content #namediv h2,#post-body #post-body-content #namediv h3{margin-top:0}.edit-comment-author{font-size:14px;line-height:1.4;font-weight:600;color:#222;margin:2px 9px 0 0}#namediv h2 label,#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.checkbox,.post-categories,.zerosize,fieldset{margin:0;padding:0}.zerosize{height:0;width:0;border:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:none}fieldset{border:0}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) bottom left repeat-x}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) top left repeat-x;height:17px;float:right}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;transition:color .1s ease-in 0;text-align:center;color:#ffb900}.star-rating .star-full:before{content:"\f155"}.star-rating .star-half:before{content:"\f459"}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:"\f154"}div.action-links{font-weight:400;margin:6px 0 0}#plugin-information{background:#fff;position:fixed;top:0;left:0;bottom:0;right:0;height:100%;padding:0}#plugin-information-scrollable{overflow:auto;-webkit-overflow-scrolling:touch;height:100%}#plugin-information-title{padding:0 26px;background:#f5f5f5;font-size:22px;font-weight:600;line-height:56px;position:relative;height:56px}#plugin-information-title.with-banner{margin-left:0;height:250px;background-size:cover}#plugin-information-title h2{font-size:1em;font-weight:600;padding:0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner h2{position:relative;font-family:"Helvetica Neue",sans-serif;display:inline-block;font-size:30px;line-height:50px;box-sizing:border-box;max-width:100%;padding:0 15px;margin-top:174px;color:#fff;background:rgba(30,30,30,.9);text-shadow:0 1px 3px rgba(0,0,0,.4);box-shadow:0 0 30px rgba(255,255,255,.1);border-radius:8px}#plugin-information-title div.vignette{display:none}#plugin-information-title.with-banner div.vignette{position:absolute;display:block;top:0;right:0;height:250px;width:100%;background:0 0;box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1)}#plugin-information-tabs{padding:0 16px;position:relative;left:0;right:0;min-height:36px;font-size:0;z-index:1;border-bottom:1px solid #ddd;background:#f3f3f3}#plugin-information-tabs a{position:relative;display:inline-block;padding:9px 10px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;transition:none}#plugin-information-tabs a.current{margin:0 -1px -1px;background:#fff;border:1px solid #ddd;border-bottom-color:#fff;padding-top:8px;color:#32373c}#plugin-information-tabs.with-banner a.current{border-top:none;padding-top:9px}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{overflow:hidden;background:#fff;position:relative;top:0;left:0;right:0;min-height:100%;min-height:calc(100% - 152px)}#plugin-information-content.with-banner{min-height:calc(100% - 346px)}#section-holder{position:relative;top:0;left:250px;bottom:0;right:0;margin-left:250px;padding:10px 26px 99999px;margin-bottom:-99939px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{float:left;position:relative;top:0;left:0;padding:16px 16px 99999px;margin-bottom:-99939px;width:217px;border-right:1px solid #ddd;background:#f3f3f3;color:#666}#plugin-information .fyi strong{color:#444}#plugin-information .fyi h3{font-weight:600;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-left:0}#plugin-information .fyi ul{padding:0;margin:0;list-style:none}#plugin-information .fyi li{margin:0 0 10px}#plugin-information .fyi-description{margin-top:0}#plugin-information .counter-container{margin:3px 0}#plugin-information .counter-label{float:right;margin-left:5px;min-width:55px}#plugin-information .counter-back{height:17px;width:92px;background-color:#e5e5e5;float:right}#plugin-information .counter-bar{height:17px;background-color:#ffc733;float:right}#plugin-information .counter-count{margin-right:5px}#plugin-information .fyi ul.contributors{margin-top:10px}#plugin-information .fyi ul.contributors li{display:inline-block;margin-left:8px;vertical-align:middle}#plugin-information .fyi ul.contributors li img{vertical-align:middle;margin-left:4px}#plugin-information-footer{padding:13px 16px;position:absolute;left:0;bottom:0;right:0;height:33px;border-top:1px solid #ddd;background:#f3f3f3}#plugin-information .section ol,#plugin-information .section ul{list-style-type:disc;margin-left:24px}#plugin-information .section,#plugin-information .section p{font-size:14px;line-height:1.7}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;margin-top:16px;max-width:100%;width:auto;height:auto;box-shadow:0 1px 2px rgba(0,0,0,.3)}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px}#plugin-information pre{padding:7px;overflow:auto;border:1px solid #ccc}#plugin-information blockquote{border-right:2px solid #ddd;color:#666;font-style:italic;margin:1em 0;padding:0 1em 0 0}#plugin-information .review{overflow:hidden;width:100%;margin-bottom:20px;border-bottom:1px solid #e5e5e5}#plugin-information .review-title-section{overflow:hidden}#plugin-information .review-title-section h4{display:inline-block;float:left;margin:0 6px 0 0}#plugin-information .reviewer-info p{clear:both;margin:0;padding-top:2px}#plugin-information .reviewer-info .avatar{float:left;margin:4px 6px 0 0}#plugin-information .reviewer-info .star-rating{float:left}#plugin-information .review-meta{float:left;margin-left:.75em}#plugin-information .review-body{float:left;width:100%}.plugin-version-author-uri{font-size:13px}.update-php .button.button-primary{margin-left:1em}@media screen and (max-width:771px){#plugin-information-title.with-banner,#plugin-information-title.with-banner div.vignette{height:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:40px;max-width:85%}#plugin-information-tabs{overflow:hidden;padding:0;height:auto}#plugin-information-tabs a.current{margin-bottom:0;border-bottom:none}#plugin-information .fyi{float:none;border:1px solid #ddd;position:static;width:auto;margin:26px 26px 0;padding-bottom:0}#section-holder{position:static;margin:0;padding-bottom:70px}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}#TB_window.plugin-details-modal{background:#fcfcfc}#TB_window.plugin-details-modal.thickbox-loading:before{content:"";display:block;width:20px;height:20px;position:absolute;right:50%;top:50%;z-index:-1;margin:-10px -10px 0 0;background:url(../images/spinner.gif) center no-repeat #fcfcfc;background-size:20px 20px;-webkit-transform:translateZ(0);transform:translateZ(0)}.plugin-details-modal #TB_ajaxWindowTitle,.plugin-details-modal .tb-close-icon{display:none}.tree-folder,[role=treeitem] li{position:relative}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#TB_window.plugin-details-modal.thickbox-loading:before{background-image:url(../images/spinner-2x.gif)}}.plugin-details-modal #TB_title{float:right;height:1px}.plugin-details-modal #TB_closeWindowButton{right:auto;left:-30px;color:#eee}.plugin-details-modal #TB_closeWindowButton:focus,.plugin-details-modal #TB_closeWindowButton:hover{color:#00a0d2;outline:0;box-shadow:none}.plugin-details-modal #TB_closeWindowButton:after{content:"\f335";font:400 32px/29px dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media screen and (max-width:830px){.plugin-details-modal #TB_closeWindowButton{left:0;top:-30px}}img{border:none}.bulk-action-notice .toggle-indicator:before,.js .meta-box-sortables .postbox .toggle-indicator:before,.sidebar-name .toggle-indicator:before{content:"\f142";display:inline-block;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,.js .widgets-holder-wrap.closed .toggle-indicator:before{content:"\f140"}.js .postbox .handlediv .toggle-indicator:before{margin-top:4px;width:20px;border-radius:50%;text-indent:-1px}#template .CodeMirror,#template textarea,#templateside>ul{box-sizing:border-box;min-height:60vh;height:calc(100vh - 295px);border:1px solid #ddd}.rtl.js .postbox .handlediv .toggle-indicator:before{text-indent:1px}.bulk-action-notice .toggle-indicator:before{line-height:16px;vertical-align:top;color:#72777c}.js .postbox .handlediv:focus{box-shadow:none;outline:0}.js .postbox .handlediv:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#photo-add-url-div input[type=text]{width:300px}.alignleft h2{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;background:#f9f9f9;-moz-tab-size:4;-o-tab-size:4;tab-size:4}#template .CodeMirror,#template textarea{width:100%}#templateside>h2{padding-top:6px;padding-bottom:7px;margin:0}#templateside ol,#templateside ul{margin:0;padding:0}#templateside>ul{margin-top:0;overflow:auto;padding:0;background-color:#f7f7f7;border-right:none}#templateside ul ul{padding-right:12px}#templateside>ul>li>ul[role=group]{padding-right:0}[role=treeitem][aria-expanded=false]>ul{display:none}[role=treeitem] span[aria-hidden]{display:inline;font-family:dashicons;font-size:20px;position:absolute;pointer-events:none}[role=treeitem][aria-expanded=false]>.folder-label .icon:after{content:"\f141"}[role=treeitem][aria-expanded=true]>.folder-label .icon:after{content:"\f140"}[role=treeitem] .folder-label{display:block;padding:3px 12px 3px 3px;cursor:pointer}[role=treeitem]{outline:0}[role=treeitem] .folder-label.focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}[role=treeitem] .folder-label.hover,[role=treeitem].hover{background-color:#eaeaea}.tree-folder{margin:0}.tree-folder .tree-folder::after{content:' ';display:block;position:absolute;right:2px;border-right:1px solid #ccc;top:-13px;bottom:10px}.tree-folder>li::before{content:' ';position:absolute;display:block;border-right:1px solid #ccc;right:2px;top:-5px;height:18px;width:7px;border-bottom:1px solid #ccc}.tree-folder>li::after{content:' ';position:absolute;display:block;border-right:1px solid #ccc;right:2px;bottom:-7px;top:0}#templateside .current-file{margin:-4px 0 -2px}.tree-folder>.current-file::before{right:4px;height:15px;width:0;border-right:none;top:3px}.tree-folder>.current-file::after{bottom:-4px;height:7px;right:2px;top:auto}.tree-folder li:last-child>.tree-folder::after,.tree-folder>li:last-child::after{display:none}#theme-plugin-editor-label{display:inline-block;margin-bottom:1em;font-weight:600}.fileedit-sub #plugin,.fileedit-sub #theme{max-width:40%}.fileedit-sub .alignright{text-align:left}#template p{width:97%}#file-editor-linting-error{margin-top:1em;margin-bottom:1em}#file-editor-linting-error>.notice{margin:0;display:inline-block}#file-editor-linting-error>.notice>p{width:auto}#template .submit{margin-top:1em;padding:0}#template .submit input[type=submit][disabled]{cursor:not-allowed}#templateside{float:left;width:16em}#postcustomstuff p.submit{margin:0}#templateside h4{margin:1em 0 0}#templateside li{margin:4px 0}#templateside li:not(.howto) a,.theme-editor-php .highlight{display:block;padding:3px 12px 3px 0;text-decoration:none}#templateside li:not(.howto)>a:first-of-type{padding-top:0}#templateside li.howto{padding:6px 12px 12px}.theme-editor-php .highlight{margin:-3px -12px -3px 3px}#templateside .highlight{border:none;font-weight:600}.nonessential{color:#666;font-size:11px;font-style:italic;padding-right:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}#file-editor-warning .file-editor-warning-content{margin:25px}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top .widget-action .toggle-indicator:before{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.widget-top .widget-action .toggle-indicator:before{padding:1px 0 1px 2px;border-radius:50%}.accordion-section-title:after,.handlediv,.item-edit,.postbox .handlediv.button-link,.toggle-indicator{color:#72777c}.widget-action{color:#555d66}.accordion-section-title:hover:after,.handlediv:focus,.handlediv:hover,.item-edit:focus,.item-edit:hover,.postbox .handlediv.button-link:focus,.postbox .handlediv.button-link:hover,.sidebar-name:hover .toggle-indicator,.widget-action:focus,.widget-top:hover .widget-action{color:#23282d}.widget-top .widget-action:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.accordion-section-title:after,.control-section .accordion-section-title:after{float:left;left:20px;top:-2px}#customize-info.open .accordion-section-title:after,.control-section.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before,.widget.open .widget-top .widget-action .toggle-indicator:before{content:"\f142"}/*!
+.button.updated-message,a{transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading,.spinner,.wp-header-end{visibility:hidden}.filter-group,.postbox-container .meta-box-sortables,.wp-filter,html.wp-toolbar{box-sizing:border-box}#docs-list,#plugin-information .section,#template textarea,.code,.ltr,code{direction:ltr}#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%;padding-right:20px}#wpcontent,#wpfooter{margin-right:160px}.folded #wpcontent,.folded #wpfooter{margin-right:36px}#wpbody-content{padding-bottom:65px;float:right;width:100%;overflow:visible!important}.inner-sidebar{float:left;clear:left;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-left:auto;width:286px;display:block}.columns-2 .inner-sidebar #side-sortables,.inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:right;clear:right;width:100%;margin-left:-2000px}.has-right-sidebar #post-body-content{margin-left:300px;float:none;width:auto}#col-left{float:right;width:35%}#col-right{float:left;width:65%}#col-left .col-wrap{padding:0 0 0 6px}#col-right .col-wrap{padding:0 6px 0 0}.alignleft{float:right}.alignright{float:left}#publishing-action .spinner,#save-post,.subsubsub{float:right}.textleft{text-align:right}.textright{text-align:left}.clear{clear:both}.wp-clearfix:after{content:"";display:table;clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#templateside,.misc-pub-filename,.pre,.widefat *{word-wrap:break-word}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{right:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#0073aa;z-index:100000;line-height:normal;box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.js .wp-core-ui .hide-if-js,.js.wp-core-ui .hide-if-js,.no-js .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js,.no-js.wp-core-ui .hide-if-no-js{display:none}#menu-management .menu-edit,#menu-settings-column .accordion-container,.comment-ays,.feature-filter,.imgedit-group,.manage-menus,.menu-item-handle,.popular-tags,.stuffbox,.widget-inside,.widget-top,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.comment-ays,.feature-filter,.imgedit-group,.popular-tags,.stuffbox,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{background:#fff}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.modal-open{overflow:hidden}body.mobile.modal-open #wpwrap{overflow:hidden;position:fixed;height:100%}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0073aa}a,div{outline:0}a:active,a:hover{color:#00a0d2}.wp-person a:focus .gravatar,a:focus,a:focus .media-icon img{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}h1,h2,h3{color:#23282d}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus,.screen-reader-text:focus{box-shadow:none;outline:0}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}p{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}dd,li{margin-bottom:6px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2,h3{font-size:1.3em;margin:1em 0}.update-core-php h2{margin-top:2em}.update-messages h2,.update-php h2,h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}ol,ul{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-right:2em}ul.ul-disc{list-style:disc}ul.ul-square{list-style:square}ol.ol-decimal{list-style:decimal}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-right:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.code,code{font-family:Consolas,Monaco,monospace;unicode-bidi:embed}code,kbd{padding:3px 5px 2px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#555d66;font-weight:400}.subsubsub a.current{font-weight:600;border:none}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat a,.widefat button.button-link{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead td,.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot td,.widefat tfoot th{border-top:1px solid #e1e1e1;border-bottom:none}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat tfoot td,.widefat th,.widefat thead td{text-align:right;line-height:1.3em;font-size:14px}.updates-table td input,.widefat tfoot td input,.widefat th input,.widefat thead td input{margin:0 8px 0 0;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:6px 0 25px;vertical-align:top}.updates-table tbody td.check-column,.widefat tbody th.check-column,.widefat tfoot td.check-column,.widefat thead td.check-column{padding:11px 3px 0 0}.widefat tfoot td.check-column,.widefat thead td.check-column{padding-top:4px;vertical-align:middle}.update-php div.error,.update-php div.updated{margin-right:0}.no-js .widefat tfoot .check-column input,.no-js .widefat thead .check-column input{display:none}.column-comments,.column-links,.column-posts,.widefat .num{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 2px 0 20px}.postbox .inside h2,.wrap [class$=icon32]+h2,.wrap h1,.wrap>h2:first-child{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px;line-height:29px}.wrap h1.wp-heading-inline{display:inline-block;margin-left:5px}.wp-header-end{margin:-2px 0 0}.subtitle{margin:0;padding-right:25px;color:#555d66;font-size:14px;font-weight:400;line-height:1}.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{margin-right:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:none;border:1px solid #ccc;border-radius:2px;background:#f7f7f7;text-shadow:none;font-weight:600;font-size:13px;line-height:normal;color:#0073aa;cursor:pointer;outline:0}.wrap .wp-heading-inline+.page-title-action{margin-right:0}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{border-color:#008EC2;background:#00a0d2;color:#fff}.page-title-action:focus{color:#124964}.ac_match,.highlight,.subsubsub a.current{color:#000}.wrap .page-title-action:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.wrap h1.long-header{padding-left:0}.wp-dialog{background-color:#fff}#available-widgets .widget-top:hover,#widgets-left .widget-in-question .widget-top,#widgets-left .widget-top:hover,.widgets-chooser ul,div#widgets-right .widget-top:hover{border-color:#999;box-shadow:0 1px 2px rgba(0,0,0,.1)}.sorthelper{background-color:#ccf3fa}.alternate,.striped>tbody>:nth-child(odd),ul.striped>:nth-child(odd){background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-left-color:#99d}.highlight{background-color:#e4f2fd}.wp-ui-primary{color:#fff;background-color:#32373c}.wp-ui-text-primary{color:#32373c}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#d54e21}.wp-ui-text-notification{color:#d54e21}.wp-ui-text-icon{color:#82878c}img.emoji{display:inline!important;border:none!important;height:1em!important;width:1em!important;margin:0 .07em!important;vertical-align:-.1em!important;background:0 0!important;padding:0!important;box-shadow:none!important}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox .hndle,.side-info,.sidebar-name,.stuffbox .hndle,.widefat tfoot td,.widefat tfoot th,.widefat thead td,.widefat thead th,.widget .widget-top{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#23282d}.postbox .hndle,.stuffbox .hndle{border-bottom:1px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,.notice-dismiss:before,.tagchecklist .ntdelbutton .remove-tag-icon:before,.try-gutenberg-panel .try-gutenberg-panel-close:before,.welcome-panel .welcome-panel-close:before{background:0 0;color:#72777c;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.welcome-panel .welcome-panel-close:before{margin:0}#bulk-titles div a:before{margin:1px 0}.tagchecklist .ntdelbutton .remove-tag-icon:before{margin-right:2px;border-radius:50%;color:#0073aa;line-height:1.28}.tagchecklist .ntdelbutton:focus{outline:0}#bulk-titles div a:focus:before,#bulk-titles div a:hover:before,.tagchecklist .ntdelbutton:focus .remove-tag-icon:before,.tagchecklist .ntdelbutton:hover .remove-tag-icon:before,.welcome-panel .welcome-panel-close:focus:before,.welcome-panel .welcome-panel-close:hover:before{color:#c00}.tagchecklist .ntdelbutton:focus .remove-tag-icon:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap}#namediv td.first,.nav-tab,.no-break,.star-rating{white-space:nowrap}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#delete-link a.delete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete,#search-plugins-table .plugins a.delete,.plugins a.delete,.row-actions span.delete a,.row-actions span.spam a,.row-actions span.trash a,.submitbox .submitdelete{color:#a00}#all-plugins-table .plugins a.delete:hover,#delete-link a.delete:hover,#media-items a.delete-permanently:hover,#media-items a.delete:hover,#nav-menu-footer .menu-delete:hover,#search-plugins-table .plugins a.delete:hover,.file-error,.plugins a.delete:hover,.row-actions .delete a:hover,.row-actions .spam a:hover,.row-actions .trash a:hover,.submitbox .submitdelete:hover,abbr.required,span.required{color:#dc3232;border:none}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{float:right;line-height:28px}#delete-link{line-height:28px;vertical-align:middle;text-align:right;margin-right:8px}#delete-link a{text-decoration:none}#publishing-action{text-align:left;float:left;line-height:23px}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:left}.preview{float:left}#sticky-span{margin-right:18px}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:left}#misc-publishing-actions .notice{margin-right:10px;margin-left:10px}.wp-filter{display:inline-block;position:relative;margin:12px 0 25px;padding:0 10px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #e5e5e5;background:#fff;color:#555;font-size:13px}.wp-filter a{text-decoration:none}.filter-count{display:inline-block;vertical-align:middle;min-width:4em}.filter-count .count,.title-count{display:inline-block;position:relative;top:-1px;padding:4px 10px;border-radius:30px;background:#72777c;color:#fff;font-size:14px;font-weight:600}.title-count{display:inline;top:-3px;margin-right:5px;margin-left:20px}.filter-links li>a,.wp-filter .search-form.search-plugins{display:inline-block}.filter-items{float:right}.filter-links,.filter-links li{display:inline-block;margin:0}.filter-links li>a{margin:0 10px;padding:15px 0;border-bottom:4px solid #fff;color:#666;cursor:pointer}.filter-links .current{box-shadow:none;border-bottom:4px solid #666;color:#23282d}.filter-links li>a:focus,.filter-links li>a:hover,.show-filters .filter-links a.current:focus,.show-filters .filter-links a.current:hover{color:#00a0d2}.wp-filter .search-form{float:left;margin:10px 0}.wp-filter .search-form input[type=search]{margin:0;padding:3px 5px;width:280px;max-width:100%;font-size:16px;font-weight:300;line-height:1.5}.wp-filter .search-form select{margin:0;height:32px;vertical-align:top}.wp-filter .button.drawer-toggle{margin:10px 9px 0;padding:0 6px 0 10px;border-color:transparent;background-color:transparent;color:#666;vertical-align:baseline;box-shadow:none}.wp-filter .drawer-toggle:before{content:"\f111";margin:0 0 0 5px;color:#72777c;font:400 16px/1 dashicons;vertical-align:text-bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-filter .button.drawer-toggle:focus,.wp-filter .button.drawer-toggle:hover,.wp-filter .drawer-toggle:focus:before,.wp-filter .drawer-toggle:hover:before{background-color:transparent;color:#00a0d2}.wp-filter .button.drawer-toggle:focus:active,.wp-filter .button.drawer-toggle:hover{border-color:transparent}.wp-filter .button.drawer-toggle:focus{border-color:#5b9dd9}.wp-filter .button.drawer-toggle:active{background:0 0;box-shadow:none;-webkit-transform:none;transform:none}.wp-filter .drawer-toggle.current:before{color:#fff}.filter-drawer,.wp-filter .favorites-form{display:none;margin:0 -20px 0 -10px;padding:20px;border-top:1px solid #eee;background:#fafafa;overflow:hidden}.show-favorites-form .favorites-form,.show-filters .filter-drawer{display:block}.show-filters .filter-links a.current{border-bottom:none}.show-filters .wp-filter .button.drawer-toggle{border-radius:2px;background:#72777c;color:#fff}.filter-group,.filtered-by .tag{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.show-filters .wp-filter .drawer-toggle:focus,.show-filters .wp-filter .drawer-toggle:hover{background:#2ea2cc}.show-filters .wp-filter .drawer-toggle:before{color:#fff}.filter-group{position:relative;float:right;margin:0 0 0 1%;padding:20px 10px 10px;width:24%;background:#fff}.filter-group legend{position:absolute;top:10px;display:block;margin:0;padding:0;font-size:1em;font-weight:600}.filter-drawer .filter-group-feature{margin:28px 0 0;list-style-type:none;font-size:12px}.filter-drawer .filter-group-feature input,.filter-drawer .filter-group-feature label{line-height:16px}.filter-drawer .filter-group-feature input{position:absolute;margin:0}.filter-group .filter-group-feature label{display:block;margin:14px 23px 14px 0}.filter-drawer .buttons{clear:both;margin-bottom:20px}.filter-drawer .filter-group+.buttons{margin-bottom:0;padding-top:20px}.filter-drawer .buttons .button span{display:inline-block;opacity:.8;font-size:12px;text-indent:10px}.wp-filter .button.clear-filters{display:none;margin-right:10px}.wp-filter .button-link.edit-filters{padding:0 5px;line-height:28px}.filtered-by{display:none;margin:0}.filtered-by>span{font-weight:600}.filtered-by a{margin-right:10px}.filtered-by .tags{display:inline}.filtered-by .tag{margin:0 5px;padding:4px 8px;background:#fff;font-size:11px}.filters-applied .filter-drawer .buttons,.filters-applied .filter-drawer br,.filters-applied .filter-group{display:none!important}.filters-applied .filtered-by{display:block}.filters-applied .filter-drawer{padding:20px}.error .content-filterable,.loading-content .content-filterable,.show-filters .content-filterable,.show-filters .favorites-form,.show-filters.filters-applied.loading-content .content-filterable{display:none}.show-filters.filters-applied .content-filterable{display:block}.loading-content .spinner{display:block;margin:40px auto 0;float:none}@media only screen and (max-width:1120px){.filter-drawer{border-bottom:1px solid #eee}.filter-group{margin-bottom:0;margin-top:5px;width:100%}.filter-group li{margin:10px 0}}@media only screen and (max-width:1000px){.filter-items{float:none}.wp-filter .media-toolbar-primary,.wp-filter .media-toolbar-secondary,.wp-filter .search-form{float:none;position:relative;max-width:100%}}@media only screen and (max-width:782px){.filter-group li{padding:0;width:50%}}@media only screen and (max-width:320px){.filter-count{display:none}.wp-filter .drawer-toggle{margin:10px 0}.filter-group li,.wp-filter .search-form input[type=search]{width:100%}}.notice,div.error,div.updated{background:#fff;border-right:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 15px 2px;padding:1px 12px}div[class=update-message]{padding:.5em 0 .5em 12px}.form-table td .notice p,.notice p,.notice-title,div.error p,div.updated p{margin:.5em 0;padding:2px}.error a{text-decoration:underline}.updated a{padding-bottom:2px}.notice-alt{box-shadow:none}.notice-large{padding:10px 20px}.notice-title{display:inline-block;color:#23282d;font-size:18px}.wp-core-ui .notice.is-dismissible{padding-left:38px;position:relative}.notice-dismiss{position:absolute;top:0;left:1px;border:none;margin:0;padding:9px;background:0 0;color:#72777c;cursor:pointer}.notice-dismiss:active:before,.notice-dismiss:focus:before,.notice-dismiss:hover:before{color:#c00}.notice-dismiss:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .notice-dismiss:focus{outline:#5b9dd9 solid 1px}.notice-success,div.updated{border-right-color:#46b450}.notice-success.notice-alt{background-color:#ecf7ed}.notice-warning{border-right-color:#ffb900}.notice-warning.notice-alt{background-color:#fff8e5}.notice-error,div.error{border-right-color:#dc3232}.notice-error.notice-alt{background-color:#fbeaea}.notice-info{border-right-color:#00a0d2}.notice-info.notice-alt{background-color:#e5f5fa}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updated-message p:before,.updating-message p:before{display:inline-block;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.media-upload-form .notice,.media-upload-form div.error,.wrap .notice,.wrap div.error,.wrap div.updated{margin:5px 0 15px}.wrap #templateside .notice{display:block;margin:0;padding:5px 8px;font-weight:600;text-decoration:none}.wrap #templateside span.notice{margin-right:-12px}#templateside li.notice a{padding:0}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updating-message p:before{color:#f56e28;content:"\f463"}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.updating-message p:before{-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.button.updated-message:before,.installed p:before,.updated-message p:before{color:#79ba49;content:'\f147'}.update-message.notice-error p:before{color:#dc3232;content:"\f534"}.import-php .updating-message:before,.wrap .notice p:before{margin-left:6px;vertical-align:bottom}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:right;margin:25px 2px 0 20px;background-color:#fff;border-right:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#screen-meta,ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em}.update-php .spinner{float:none;margin:-4px 0}#ajax-response.alignleft{margin-right:2em}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before{margin:3px -2px 0 5px}.button-primary.updating-message:before{color:#fff}.button-primary.updated-message:before{color:#66c6e4}@media aural{.button.installed:before,.button.installing:before,.update-message p:before,.wrap .notice p:before{speak:none}}#adminmenu a,#catlist a,#taglist a{text-decoration:none}#contextual-help-wrap,#screen-options-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-right:0!important}#screen-meta-links{margin:0 0 0 20px}#screen-meta{margin:0 0 -1px 20px;position:relative;background-color:#fff;border:1px solid #ddd;border-top:none;box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-link-wrap,#screen-options-link-wrap{float:left;height:28px;margin:0 6px 0 0;border:1px solid #ddd;border-top:none;background:#fff;box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links .show-settings{border:0;background:0 0;border-radius:0;color:#72777c;line-height:1.7;padding:3px 16px 3px 6px}#screen-meta-links .show-settings:active,#screen-meta-links .show-settings:focus,#screen-meta-links .show-settings:hover{color:#32373c}#screen-meta-links .show-settings:active{box-shadow:none;-webkit-transform:none;transform:none}#screen-meta-links .show-settings:after{left:0;content:"\f140";font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 5px;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#72777c}#templateside ul li a,.contextual-help-tabs a,.nav-tab{text-decoration:none}#screen-meta-links .screen-meta-active:after{content:"\f142"}.toggle-arrow{background-repeat:no-repeat;background-position:top right;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom right}#contextual-help-wrap h5,#screen-options-wrap h5,#screen-options-wrap legend{margin:0;padding:8px 0;font-size:13px;font-weight:600}.hndle a,.widefat tfoot td,.widefat th,.widefat thead td{font-weight:400}.ie8 #screen-options-wrap legend{color:inherit}.metabox-prefs label{display:inline-block;padding-left:15px;line-height:30px}#number-of-columns{display:inline-block;vertical-align:middle;line-height:30px}.metabox-prefs input[type=checkbox]{margin-top:0;margin-left:6px}.metabox-prefs label input,.metabox-prefs label input[type=checkbox]{margin:-4px 0 0 5px}.metabox-prefs .columns-prefs label input{margin:-1px 0 0 2px}.metabox-prefs label a{display:none}.metabox-prefs .screen-options input,.metabox-prefs .screen-options label{margin-top:0;margin-bottom:0;vertical-align:middle}.metabox-prefs .screen-options .screen-per-page{margin-left:15px}.metabox-prefs .screen-options label{line-height:28px;padding-left:0}.screen-options+.screen-options{margin-top:10px}.metabox-prefs .submit{margin-top:1em;padding:0}#contextual-help-wrap{padding:0}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;right:150px;left:170px;border:1px solid #e1e1e1;border-top:none;border-bottom:none;background:#f6fbfd}#contextual-help-wrap.no-sidebar #contextual-help-back{left:0;border-left-width:0;border-bottom-left-radius:2px}.contextual-help-tabs{float:right;width:150px;margin:0}.contextual-help-tabs ul{margin:1em 0}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:0 2px 0 0;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 12px 5px 5px;line-height:18px;border:1px solid transparent;border-left:none;border-right:none}.contextual-help-tabs a:hover{color:#32373c}.contextual-help-tabs .active{padding:0;margin:0 0 0 -1px;border-right:2px solid #00a0d2;background:#f6fbfd;box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active a{border-color:#e1e1e1;color:#32373c}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 0 12px 22px;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content ul li{list-style-type:disc;margin-right:18px}.contextual-help-sidebar{width:150px;float:left;padding:0 12px 0 8px;overflow:auto}html.wp-toolbar{padding-top:32px}.widefat td,.widefat th{color:#555}.widefat ol,.widefat p,.widefat tfoot tr td,.widefat tfoot tr th,.widefat thead tr td,.widefat thead tr th,.widefat ul{color:#32373c}.widefat td p{margin:2px 0 .8em}.widefat .column-comment p{margin:.6em 0}.widefat .column-comment ul{list-style:outside;margin-right:2em}.postbox-container{float:right}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #b4b9be;height:250px;position:relative}.metabox-holder .postbox-container .empty-container:after{content:attr(data-emptystring);margin:auto;position:absolute;top:0;right:0;bottom:0;left:0;height:1em;width:200px;text-align:center;color:#ccc;font-size:18px;display:none}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:right}#post-body.columns-2 #postbox-container-1{float:left;margin-left:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content .metabox-holder .postbox-container .empty-container{border:0;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{cursor:move}.hndle a{font-size:11px}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.nav-tab,.plugins .name{font-weight:600}.postbox .handlediv{display:none;float:left;width:36px;height:36px;margin:0;padding:0;border:0;background:0 0;cursor:pointer}.js .postbox .handlediv{display:block}.sortable-placeholder{border:1px dashed #b4b9be;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 0 0 10px}#wpfooter{position:absolute;bottom:0;right:0;left:0;padding:10px 20px;color:#555d66}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}.nav-tab{float:right;border:1px solid #ccc;border-bottom:none;margin-right:.5em;padding:5px 10px;font-size:14px;line-height:24px;background:#e5e5e5;color:#555}.nav-tab-small .nav-tab,h3 .nav-tab{padding:5px 14px;font-size:12px;line-height:16px}.nav-tab:focus,.nav-tab:hover{background-color:#fff;color:#444}.nav-tab-active,.nav-tab:focus:active{box-shadow:none}.nav-tab-active{margin-bottom:-1px;color:#444}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:1px solid #ccc;margin:0;padding-top:9px;padding-bottom:0;line-height:inherit}.nav-tab-wrapper:not(.wp-clearfix):after{content:"";display:table;clear:both}.ie8 .nav-tab-wrapper{display:inline-block;width:100%;vertical-align:top}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:inline-block;float:left;vertical-align:middle;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:4px 10px 0}.loading-content .spinner,.spinner.is-active{visibility:visible}#template>div{margin-left:16em}#template .notice{margin-top:1em;margin-left:3%}#template .notice p{width:auto}#template .submit .spinner{float:none}.metabox-holder .postbox>h3,.metabox-holder .stuffbox>h3,.metabox-holder h2.hndle,.metabox-holder h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}.nav-menus-php .metabox-holder h3{padding:10px 14px 11px 10px;line-height:21px}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:right}.attention,.error-message{color:#dc3232;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}#howto,.importer-action,.importer-desc,.importer-title{display:block}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}.media-icon{width:62px;text-align:center}.media-icon img{border:1px solid #e5e5e5;border:1px solid rgba(0,0,0,.07)}#howto{font-size:11px;margin:0 5px}.importers{font-size:16px;width:auto}.importers td{padding-left:14px;line-height:1.5em}.importers .import-system{max-width:250px}.importers td.desc{max-width:500px}.post-categories,.post-categories li{display:inline}.importer-title{color:#000;font-size:14px;font-weight:400;margin-bottom:.2em}.importer-action{line-height:20px;color:#555;margin-bottom:1em}#post-body #post-body-content #namediv h2,#post-body #post-body-content #namediv h3{margin-top:0}.edit-comment-author{font-size:14px;line-height:1.4;font-weight:600;color:#222;margin:2px 9px 0 0}#namediv h2 label,#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.checkbox,.post-categories,.zerosize,fieldset{margin:0;padding:0}.zerosize{height:0;width:0;border:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:none}fieldset{border:0}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) bottom left repeat-x}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) top left repeat-x;height:17px;float:right}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;transition:color .1s ease-in 0;text-align:center;color:#ffb900}.star-rating .star-full:before{content:"\f155"}.star-rating .star-half:before{content:"\f459"}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:"\f154"}div.action-links{font-weight:400;margin:6px 0 0}#plugin-information{background:#fff;position:fixed;top:0;left:0;bottom:0;right:0;height:100%;padding:0}#plugin-information-scrollable{overflow:auto;-webkit-overflow-scrolling:touch;height:100%}#plugin-information-title{padding:0 26px;background:#f5f5f5;font-size:22px;font-weight:600;line-height:56px;position:relative;height:56px}#plugin-information-title.with-banner{margin-left:0;height:250px;background-size:cover}#plugin-information-title h2{font-size:1em;font-weight:600;padding:0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner h2{position:relative;font-family:"Helvetica Neue",sans-serif;display:inline-block;font-size:30px;line-height:50px;box-sizing:border-box;max-width:100%;padding:0 15px;margin-top:174px;color:#fff;background:rgba(30,30,30,.9);text-shadow:0 1px 3px rgba(0,0,0,.4);box-shadow:0 0 30px rgba(255,255,255,.1);border-radius:8px}#plugin-information-title div.vignette{display:none}#plugin-information-title.with-banner div.vignette{position:absolute;display:block;top:0;right:0;height:250px;width:100%;background:0 0;box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1)}#plugin-information-tabs{padding:0 16px;position:relative;left:0;right:0;min-height:36px;font-size:0;z-index:1;border-bottom:1px solid #ddd;background:#f3f3f3}#plugin-information-tabs a{position:relative;display:inline-block;padding:9px 10px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;transition:none}#plugin-information-tabs a.current{margin:0 -1px -1px;background:#fff;border:1px solid #ddd;border-bottom-color:#fff;padding-top:8px;color:#32373c}#plugin-information-tabs.with-banner a.current{border-top:none;padding-top:9px}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{overflow:hidden;background:#fff;position:relative;top:0;left:0;right:0;min-height:100%;min-height:calc(100% - 152px)}#plugin-information-content.with-banner{min-height:calc(100% - 346px)}#section-holder{position:relative;top:0;left:250px;bottom:0;right:0;margin-left:250px;padding:10px 26px 99999px;margin-bottom:-99939px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{float:left;position:relative;top:0;left:0;padding:16px 16px 99999px;margin-bottom:-99939px;width:217px;border-right:1px solid #ddd;background:#f3f3f3;color:#666}#plugin-information .fyi strong{color:#444}#plugin-information .fyi h3{font-weight:600;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-left:0}#plugin-information .fyi ul{padding:0;margin:0;list-style:none}#plugin-information .fyi li{margin:0 0 10px}#plugin-information .fyi-description{margin-top:0}#plugin-information .counter-container{margin:3px 0}#plugin-information .counter-label{float:right;margin-left:5px;min-width:55px}#plugin-information .counter-back{height:17px;width:92px;background-color:#e5e5e5;float:right}#plugin-information .counter-bar{height:17px;background-color:#ffc733;float:right}#plugin-information .counter-count{margin-right:5px}#plugin-information .fyi ul.contributors{margin-top:10px}#plugin-information .fyi ul.contributors li{display:inline-block;margin-left:8px;vertical-align:middle}#plugin-information .fyi ul.contributors li img{vertical-align:middle;margin-left:4px}#plugin-information-footer{padding:13px 16px;position:absolute;left:0;bottom:0;right:0;height:33px;border-top:1px solid #ddd;background:#f3f3f3}#plugin-information .section ol,#plugin-information .section ul{list-style-type:disc;margin-left:24px}#plugin-information .section,#plugin-information .section p{font-size:14px;line-height:1.7}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;margin-top:16px;max-width:100%;width:auto;height:auto;box-shadow:0 1px 2px rgba(0,0,0,.3)}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px}#plugin-information pre{padding:7px;overflow:auto;border:1px solid #ccc}#plugin-information blockquote{border-right:2px solid #ddd;color:#666;font-style:italic;margin:1em 0;padding:0 1em 0 0}#plugin-information .review{overflow:hidden;width:100%;margin-bottom:20px;border-bottom:1px solid #e5e5e5}#plugin-information .review-title-section{overflow:hidden}#plugin-information .review-title-section h4{display:inline-block;float:left;margin:0 6px 0 0}#plugin-information .reviewer-info p{clear:both;margin:0;padding-top:2px}#plugin-information .reviewer-info .avatar{float:left;margin:4px 6px 0 0}#plugin-information .reviewer-info .star-rating{float:left}#plugin-information .review-meta{float:left;margin-left:.75em}#plugin-information .review-body{float:left;width:100%}.plugin-version-author-uri{font-size:13px}.update-php .button.button-primary{margin-left:1em}@media screen and (max-width:771px){#plugin-information-title.with-banner,#plugin-information-title.with-banner div.vignette{height:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:40px;max-width:85%}#plugin-information-tabs{overflow:hidden;padding:0;height:auto}#plugin-information-tabs a.current{margin-bottom:0;border-bottom:none}#plugin-information .fyi{float:none;border:1px solid #ddd;position:static;width:auto;margin:26px 26px 0;padding-bottom:0}#section-holder{position:static;margin:0;padding-bottom:70px}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}#TB_window.plugin-details-modal{background:#fcfcfc}#TB_window.plugin-details-modal.thickbox-loading:before{content:"";display:block;width:20px;height:20px;position:absolute;right:50%;top:50%;z-index:-1;margin:-10px -10px 0 0;background:url(../images/spinner.gif) center no-repeat #fcfcfc;background-size:20px 20px;-webkit-transform:translateZ(0);transform:translateZ(0)}.plugin-details-modal #TB_ajaxWindowTitle,.plugin-details-modal .tb-close-icon{display:none}.tree-folder,[role=treeitem] li{position:relative}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#TB_window.plugin-details-modal.thickbox-loading:before{background-image:url(../images/spinner-2x.gif)}}.plugin-details-modal #TB_title{float:right;height:1px}.plugin-details-modal #TB_closeWindowButton{right:auto;left:-30px;color:#eee}.plugin-details-modal #TB_closeWindowButton:focus,.plugin-details-modal #TB_closeWindowButton:hover{color:#00a0d2;outline:0;box-shadow:none}.plugin-details-modal #TB_closeWindowButton:after{content:"\f335";font:400 32px/29px dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media screen and (max-width:830px){.plugin-details-modal #TB_closeWindowButton{left:0;top:-30px}}img{border:none}.bulk-action-notice .toggle-indicator:before,.js .meta-box-sortables .postbox .toggle-indicator:before,.privacy-text-box .toggle-indicator:before,.sidebar-name .toggle-indicator:before{content:"\f142";display:inline-block;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,.js .widgets-holder-wrap.closed .toggle-indicator:before,.privacy-text-box.closed .toggle-indicator:before{content:"\f140"}.js .postbox .handlediv .toggle-indicator:before{margin-top:4px;width:20px;border-radius:50%;text-indent:-1px}#template .CodeMirror,#template textarea,#templateside>ul{box-sizing:border-box;min-height:60vh;height:calc(100vh - 295px);border:1px solid #ddd}.rtl.js .postbox .handlediv .toggle-indicator:before{text-indent:1px}.bulk-action-notice .toggle-indicator:before{line-height:16px;vertical-align:top;color:#72777c}.js .postbox .handlediv:focus{box-shadow:none;outline:0}.js .postbox .handlediv:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#photo-add-url-div input[type=text]{width:300px}.alignleft h2{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;background:#f9f9f9;-moz-tab-size:4;-o-tab-size:4;tab-size:4}#template .CodeMirror,#template textarea{width:100%}#templateside>h2{padding-top:6px;padding-bottom:7px;margin:0}#templateside ol,#templateside ul{margin:0;padding:0}#templateside>ul{margin-top:0;overflow:auto;padding:0;background-color:#f7f7f7;border-right:none}#templateside ul ul{padding-right:12px}#templateside>ul>li>ul[role=group]{padding-right:0}[role=treeitem][aria-expanded=false]>ul{display:none}[role=treeitem] span[aria-hidden]{display:inline;font-family:dashicons;font-size:20px;position:absolute;pointer-events:none}[role=treeitem][aria-expanded=false]>.folder-label .icon:after{content:"\f141"}[role=treeitem][aria-expanded=true]>.folder-label .icon:after{content:"\f140"}[role=treeitem] .folder-label{display:block;padding:3px 12px 3px 3px;cursor:pointer}[role=treeitem]{outline:0}[role=treeitem] .folder-label.focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}[role=treeitem] .folder-label.hover,[role=treeitem].hover{background-color:#eaeaea}.tree-folder{margin:0}.tree-folder .tree-folder::after{content:' ';display:block;position:absolute;right:2px;border-right:1px solid #ccc;top:-13px;bottom:10px}.tree-folder>li::before{content:' ';position:absolute;display:block;border-right:1px solid #ccc;right:2px;top:-5px;height:18px;width:7px;border-bottom:1px solid #ccc}.tree-folder>li::after{content:' ';position:absolute;display:block;border-right:1px solid #ccc;right:2px;bottom:-7px;top:0}#templateside .current-file{margin:-4px 0 -2px}.tree-folder>.current-file::before{right:4px;height:15px;width:0;border-right:none;top:3px}.tree-folder>.current-file::after{bottom:-4px;height:7px;right:2px;top:auto}.tree-folder li:last-child>.tree-folder::after,.tree-folder>li:last-child::after{display:none}#theme-plugin-editor-label{display:inline-block;margin-bottom:1em;font-weight:600}.fileedit-sub #plugin,.fileedit-sub #theme{max-width:40%}.fileedit-sub .alignright{text-align:left}#template p{width:97%}#file-editor-linting-error{margin-top:1em;margin-bottom:1em}#file-editor-linting-error>.notice{margin:0;display:inline-block}#file-editor-linting-error>.notice>p{width:auto}#template .submit{margin-top:1em;padding:0}#template .submit input[type=submit][disabled]{cursor:not-allowed}#templateside{float:left;width:16em}#postcustomstuff p.submit{margin:0}#templateside h4{margin:1em 0 0}#templateside li{margin:4px 0}#templateside li:not(.howto) a,.theme-editor-php .highlight{display:block;padding:3px 12px 3px 0;text-decoration:none}#templateside li:not(.howto)>a:first-of-type{padding-top:0}#templateside li.howto{padding:6px 12px 12px}.theme-editor-php .highlight{margin:-3px -12px -3px 3px}#templateside .highlight{border:none;font-weight:600}.nonessential{color:#666;font-size:11px;font-style:italic;padding-right:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}#file-editor-warning .file-editor-warning-content{margin:25px}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top .widget-action .toggle-indicator:before{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.widget-top .widget-action .toggle-indicator:before{padding:1px 0 1px 2px;border-radius:50%}.accordion-section-title:after,.handlediv,.item-edit,.postbox .handlediv.button-link,.toggle-indicator{color:#72777c}.widget-action{color:#555d66}.accordion-section-title:hover:after,.handlediv:focus,.handlediv:hover,.item-edit:focus,.item-edit:hover,.postbox .handlediv.button-link:focus,.postbox .handlediv.button-link:hover,.sidebar-name:hover .toggle-indicator,.widget-action:focus,.widget-top:hover .widget-action{color:#23282d}.widget-top .widget-action:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.accordion-section-title:after,.control-section .accordion-section-title:after{float:left;left:20px;top:-2px}#customize-info.open .accordion-section-title:after,.control-section.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before,.widget.open .widget-top .widget-action .toggle-indicator:before{content:"\f142"}/*!
* jQuery UI Draggable/Sortable 1.11.4
* http://jqueryui.com
*
/* @todo can we combine these into a class or use an existing dashicon one? */
.welcome-panel .welcome-panel-close:before,
+.try-gutenberg-panel .try-gutenberg-panel-close:before,
.tagchecklist .ntdelbutton .remove-tag-icon:before,
#bulk-titles div a:before,
.notice-dismiss:before {
/* Metabox collapse arrow indicators */
.sidebar-name .toggle-indicator:before,
.js .meta-box-sortables .postbox .toggle-indicator:before,
-.bulk-action-notice .toggle-indicator:before {
+.bulk-action-notice .toggle-indicator:before,
+.privacy-text-box .toggle-indicator:before {
content: "\f142";
display: inline-block;
font: normal 20px/1 dashicons;
.js .widgets-holder-wrap.closed .toggle-indicator:before,
.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,
-.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before {
+.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,
+.privacy-text-box.closed .toggle-indicator:before {
content: "\f140";
}
/*! This file is auto-generated */
-.button.updated-message,a{transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading,.spinner,.wp-header-end{visibility:hidden}.filter-group,.postbox-container .meta-box-sortables,.wp-filter,html.wp-toolbar{box-sizing:border-box}#docs-list,#plugin-information .section,#template textarea,.code,.ltr,code{direction:ltr}#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%;padding-left:20px}#wpcontent,#wpfooter{margin-left:160px}.folded #wpcontent,.folded #wpfooter{margin-left:36px}#wpbody-content{padding-bottom:65px;float:left;width:100%;overflow:visible!important}.inner-sidebar{float:right;clear:right;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-right:auto;width:286px;display:block}.columns-2 .inner-sidebar #side-sortables,.inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:left;clear:left;width:100%;margin-right:-2000px}.has-right-sidebar #post-body-content{margin-right:300px;float:none;width:auto}#col-left{float:left;width:35%}#col-right{float:right;width:65%}#col-left .col-wrap{padding:0 6px 0 0}#col-right .col-wrap{padding:0 0 0 6px}.alignleft{float:left}.alignright{float:right}#publishing-action .spinner,#save-post,.subsubsub{float:left}.textleft{text-align:left}.textright{text-align:right}.clear{clear:both}.wp-clearfix:after{content:"";display:table;clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#templateside,.misc-pub-filename,.pre,.widefat *{word-wrap:break-word}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{left:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#0073aa;z-index:100000;line-height:normal;box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.js .wp-core-ui .hide-if-js,.js.wp-core-ui .hide-if-js,.no-js .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js,.no-js.wp-core-ui .hide-if-no-js{display:none}#menu-management .menu-edit,#menu-settings-column .accordion-container,.comment-ays,.feature-filter,.imgedit-group,.manage-menus,.menu-item-handle,.popular-tags,.stuffbox,.widget-inside,.widget-top,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.comment-ays,.feature-filter,.imgedit-group,.popular-tags,.stuffbox,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{background:#fff}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.modal-open{overflow:hidden}body.mobile.modal-open #wpwrap{overflow:hidden;position:fixed;height:100%}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0073aa}a,div{outline:0}a:active,a:hover{color:#00a0d2}.wp-person a:focus .gravatar,a:focus,a:focus .media-icon img{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}h1,h2,h3{color:#23282d}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus,.screen-reader-text:focus{box-shadow:none;outline:0}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}p{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}dd,li{margin-bottom:6px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2,h3{font-size:1.3em;margin:1em 0}.update-core-php h2{margin-top:2em}.update-messages h2,.update-php h2,h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}ol,ul{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-left:2em}ul.ul-disc{list-style:disc}ul.ul-square{list-style:square}ol.ol-decimal{list-style:decimal}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-left:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.code,code{font-family:Consolas,Monaco,monospace;unicode-bidi:embed}code,kbd{padding:3px 5px 2px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#555d66;font-weight:400}.subsubsub a.current{font-weight:600;border:none}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat a,.widefat button.button-link{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead td,.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot td,.widefat tfoot th{border-top:1px solid #e1e1e1;border-bottom:none}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat tfoot td,.widefat th,.widefat thead td{text-align:left;line-height:1.3em;font-size:14px}.updates-table td input,.widefat tfoot td input,.widefat th input,.widefat thead td input{margin:0 0 0 8px;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:6px 0 25px;vertical-align:top}.updates-table tbody td.check-column,.widefat tbody th.check-column,.widefat tfoot td.check-column,.widefat thead td.check-column{padding:11px 0 0 3px}.widefat tfoot td.check-column,.widefat thead td.check-column{padding-top:4px;vertical-align:middle}.update-php div.error,.update-php div.updated{margin-left:0}.no-js .widefat tfoot .check-column input,.no-js .widefat thead .check-column input{display:none}.column-comments,.column-links,.column-posts,.widefat .num{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 20px 0 2px}.postbox .inside h2,.wrap [class$=icon32]+h2,.wrap h1,.wrap>h2:first-child{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px;line-height:29px}.wrap h1.wp-heading-inline{display:inline-block;margin-right:5px}.wp-header-end{margin:-2px 0 0}.subtitle{margin:0;padding-left:25px;color:#555d66;font-size:14px;font-weight:400;line-height:1}.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{margin-left:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:none;border:1px solid #ccc;border-radius:2px;background:#f7f7f7;text-shadow:none;font-weight:600;font-size:13px;line-height:normal;color:#0073aa;cursor:pointer;outline:0}.wrap .wp-heading-inline+.page-title-action{margin-left:0}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{border-color:#008EC2;background:#00a0d2;color:#fff}.page-title-action:focus{color:#124964}.ac_match,.highlight,.subsubsub a.current{color:#000}.wrap .page-title-action:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.wrap h1.long-header{padding-right:0}.wp-dialog{background-color:#fff}#available-widgets .widget-top:hover,#widgets-left .widget-in-question .widget-top,#widgets-left .widget-top:hover,.widgets-chooser ul,div#widgets-right .widget-top:hover{border-color:#999;box-shadow:0 1px 2px rgba(0,0,0,.1)}.sorthelper{background-color:#ccf3fa}.alternate,.striped>tbody>:nth-child(odd),ul.striped>:nth-child(odd){background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-right-color:#99d}.highlight{background-color:#e4f2fd}.wp-ui-primary{color:#fff;background-color:#32373c}.wp-ui-text-primary{color:#32373c}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#d54e21}.wp-ui-text-notification{color:#d54e21}.wp-ui-text-icon{color:#82878c}img.emoji{display:inline!important;border:none!important;height:1em!important;width:1em!important;margin:0 .07em!important;vertical-align:-.1em!important;background:0 0!important;padding:0!important;box-shadow:none!important}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox .hndle,.side-info,.sidebar-name,.stuffbox .hndle,.widefat tfoot td,.widefat tfoot th,.widefat thead td,.widefat thead th,.widget .widget-top{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#23282d}.postbox .hndle,.stuffbox .hndle{border-bottom:1px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,.notice-dismiss:before,.tagchecklist .ntdelbutton .remove-tag-icon:before,.welcome-panel .welcome-panel-close:before{background:0 0;color:#72777c;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.welcome-panel .welcome-panel-close:before{margin:0}#bulk-titles div a:before{margin:1px 0}.tagchecklist .ntdelbutton .remove-tag-icon:before{margin-left:2px;border-radius:50%;color:#0073aa;line-height:1.28}.tagchecklist .ntdelbutton:focus{outline:0}#bulk-titles div a:focus:before,#bulk-titles div a:hover:before,.tagchecklist .ntdelbutton:focus .remove-tag-icon:before,.tagchecklist .ntdelbutton:hover .remove-tag-icon:before,.welcome-panel .welcome-panel-close:focus:before,.welcome-panel .welcome-panel-close:hover:before{color:#c00}.tagchecklist .ntdelbutton:focus .remove-tag-icon:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap}#namediv td.first,.nav-tab,.no-break,.star-rating{white-space:nowrap}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#delete-link a.delete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete,#search-plugins-table .plugins a.delete,.plugins a.delete,.row-actions span.delete a,.row-actions span.spam a,.row-actions span.trash a,.submitbox .submitdelete{color:#a00}#all-plugins-table .plugins a.delete:hover,#delete-link a.delete:hover,#media-items a.delete-permanently:hover,#media-items a.delete:hover,#nav-menu-footer .menu-delete:hover,#search-plugins-table .plugins a.delete:hover,.file-error,.plugins a.delete:hover,.row-actions .delete a:hover,.row-actions .spam a:hover,.row-actions .trash a:hover,.submitbox .submitdelete:hover,abbr.required,span.required{color:#dc3232;border:none}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{float:left;line-height:28px}#delete-link{line-height:28px;vertical-align:middle;text-align:left;margin-left:8px}#delete-link a{text-decoration:none}#publishing-action{text-align:right;float:right;line-height:23px}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:right}.preview{float:right}#sticky-span{margin-left:18px}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:right}#misc-publishing-actions .notice{margin-left:10px;margin-right:10px}.wp-filter{display:inline-block;position:relative;margin:12px 0 25px;padding:0 10px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #e5e5e5;background:#fff;color:#555;font-size:13px}.wp-filter a{text-decoration:none}.filter-count{display:inline-block;vertical-align:middle;min-width:4em}.filter-count .count,.title-count{display:inline-block;position:relative;top:-1px;padding:4px 10px;border-radius:30px;background:#72777c;color:#fff;font-size:14px;font-weight:600}.title-count{display:inline;top:-3px;margin-left:5px;margin-right:20px}.filter-links li>a,.wp-filter .search-form.search-plugins{display:inline-block}.filter-items{float:left}.filter-links,.filter-links li{display:inline-block;margin:0}.filter-links li>a{margin:0 10px;padding:15px 0;border-bottom:4px solid #fff;color:#666;cursor:pointer}.filter-links .current{box-shadow:none;border-bottom:4px solid #666;color:#23282d}.filter-links li>a:focus,.filter-links li>a:hover,.show-filters .filter-links a.current:focus,.show-filters .filter-links a.current:hover{color:#00a0d2}.wp-filter .search-form{float:right;margin:10px 0}.wp-filter .search-form input[type=search]{margin:0;padding:3px 5px;width:280px;max-width:100%;font-size:16px;font-weight:300;line-height:1.5}.wp-filter .search-form select{margin:0;height:32px;vertical-align:top}.wp-filter .button.drawer-toggle{margin:10px 9px 0;padding:0 10px 0 6px;border-color:transparent;background-color:transparent;color:#666;vertical-align:baseline;box-shadow:none}.wp-filter .drawer-toggle:before{content:"\f111";margin:0 5px 0 0;color:#72777c;font:400 16px/1 dashicons;vertical-align:text-bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-filter .button.drawer-toggle:focus,.wp-filter .button.drawer-toggle:hover,.wp-filter .drawer-toggle:focus:before,.wp-filter .drawer-toggle:hover:before{background-color:transparent;color:#00a0d2}.wp-filter .button.drawer-toggle:focus:active,.wp-filter .button.drawer-toggle:hover{border-color:transparent}.wp-filter .button.drawer-toggle:focus{border-color:#5b9dd9}.wp-filter .button.drawer-toggle:active{background:0 0;box-shadow:none;-webkit-transform:none;transform:none}.wp-filter .drawer-toggle.current:before{color:#fff}.filter-drawer,.wp-filter .favorites-form{display:none;margin:0 -10px 0 -20px;padding:20px;border-top:1px solid #eee;background:#fafafa;overflow:hidden}.show-favorites-form .favorites-form,.show-filters .filter-drawer{display:block}.show-filters .filter-links a.current{border-bottom:none}.show-filters .wp-filter .button.drawer-toggle{border-radius:2px;background:#72777c;color:#fff}.filter-group,.filtered-by .tag{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.show-filters .wp-filter .drawer-toggle:focus,.show-filters .wp-filter .drawer-toggle:hover{background:#2ea2cc}.show-filters .wp-filter .drawer-toggle:before{color:#fff}.filter-group{position:relative;float:left;margin:0 1% 0 0;padding:20px 10px 10px;width:24%;background:#fff}.filter-group legend{position:absolute;top:10px;display:block;margin:0;padding:0;font-size:1em;font-weight:600}.filter-drawer .filter-group-feature{margin:28px 0 0;list-style-type:none;font-size:12px}.filter-drawer .filter-group-feature input,.filter-drawer .filter-group-feature label{line-height:16px}.filter-drawer .filter-group-feature input{position:absolute;margin:0}.filter-group .filter-group-feature label{display:block;margin:14px 0 14px 23px}.filter-drawer .buttons{clear:both;margin-bottom:20px}.filter-drawer .filter-group+.buttons{margin-bottom:0;padding-top:20px}.filter-drawer .buttons .button span{display:inline-block;opacity:.8;font-size:12px;text-indent:10px}.wp-filter .button.clear-filters{display:none;margin-left:10px}.wp-filter .button-link.edit-filters{padding:0 5px;line-height:28px}.filtered-by{display:none;margin:0}.filtered-by>span{font-weight:600}.filtered-by a{margin-left:10px}.filtered-by .tags{display:inline}.filtered-by .tag{margin:0 5px;padding:4px 8px;background:#fff;font-size:11px}.filters-applied .filter-drawer .buttons,.filters-applied .filter-drawer br,.filters-applied .filter-group{display:none!important}.filters-applied .filtered-by{display:block}.filters-applied .filter-drawer{padding:20px}.error .content-filterable,.loading-content .content-filterable,.show-filters .content-filterable,.show-filters .favorites-form,.show-filters.filters-applied.loading-content .content-filterable{display:none}.show-filters.filters-applied .content-filterable{display:block}.loading-content .spinner{display:block;margin:40px auto 0;float:none}@media only screen and (max-width:1120px){.filter-drawer{border-bottom:1px solid #eee}.filter-group{margin-bottom:0;margin-top:5px;width:100%}.filter-group li{margin:10px 0}}@media only screen and (max-width:1000px){.filter-items{float:none}.wp-filter .media-toolbar-primary,.wp-filter .media-toolbar-secondary,.wp-filter .search-form{float:none;position:relative;max-width:100%}}@media only screen and (max-width:782px){.filter-group li{padding:0;width:50%}}@media only screen and (max-width:320px){.filter-count{display:none}.wp-filter .drawer-toggle{margin:10px 0}.filter-group li,.wp-filter .search-form input[type=search]{width:100%}}.notice,div.error,div.updated{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 15px 2px;padding:1px 12px}div[class=update-message]{padding:.5em 12px .5em 0}.form-table td .notice p,.notice p,.notice-title,div.error p,div.updated p{margin:.5em 0;padding:2px}.error a{text-decoration:underline}.updated a{padding-bottom:2px}.notice-alt{box-shadow:none}.notice-large{padding:10px 20px}.notice-title{display:inline-block;color:#23282d;font-size:18px}.wp-core-ui .notice.is-dismissible{padding-right:38px;position:relative}.notice-dismiss{position:absolute;top:0;right:1px;border:none;margin:0;padding:9px;background:0 0;color:#72777c;cursor:pointer}.notice-dismiss:active:before,.notice-dismiss:focus:before,.notice-dismiss:hover:before{color:#c00}.notice-dismiss:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .notice-dismiss:focus{outline:#5b9dd9 solid 1px}.notice-success,div.updated{border-left-color:#46b450}.notice-success.notice-alt{background-color:#ecf7ed}.notice-warning{border-left-color:#ffb900}.notice-warning.notice-alt{background-color:#fff8e5}.notice-error,div.error{border-left-color:#dc3232}.notice-error.notice-alt{background-color:#fbeaea}.notice-info{border-left-color:#00a0d2}.notice-info.notice-alt{background-color:#e5f5fa}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updated-message p:before,.updating-message p:before{display:inline-block;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.media-upload-form .notice,.media-upload-form div.error,.wrap .notice,.wrap div.error,.wrap div.updated{margin:5px 0 15px}.wrap #templateside .notice{display:block;margin:0;padding:5px 8px;font-weight:600;text-decoration:none}.wrap #templateside span.notice{margin-left:-12px}#templateside li.notice a{padding:0}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updating-message p:before{color:#f56e28;content:"\f463"}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.updating-message p:before{-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.button.updated-message:before,.installed p:before,.updated-message p:before{color:#79ba49;content:'\f147'}.update-message.notice-error p:before{color:#dc3232;content:"\f534"}.import-php .updating-message:before,.wrap .notice p:before{margin-right:6px;vertical-align:bottom}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:left;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#screen-meta,ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em}.update-php .spinner{float:none;margin:-4px 0}#ajax-response.alignleft{margin-left:2em}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before{margin:3px 5px 0 -2px}.button-primary.updating-message:before{color:#fff}.button-primary.updated-message:before{color:#66c6e4}@media aural{.button.installed:before,.button.installing:before,.update-message p:before,.wrap .notice p:before{speak:none}}#adminmenu a,#catlist a,#taglist a{text-decoration:none}#contextual-help-wrap,#screen-options-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-left:0!important}#screen-meta-links{margin:0 20px 0 0}#screen-meta{margin:0 20px -1px 0;position:relative;background-color:#fff;border:1px solid #ddd;border-top:none;box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-link-wrap,#screen-options-link-wrap{float:right;height:28px;margin:0 0 0 6px;border:1px solid #ddd;border-top:none;background:#fff;box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links .show-settings{border:0;background:0 0;border-radius:0;color:#72777c;line-height:1.7;padding:3px 6px 3px 16px}#screen-meta-links .show-settings:active,#screen-meta-links .show-settings:focus,#screen-meta-links .show-settings:hover{color:#32373c}#screen-meta-links .show-settings:active{box-shadow:none;-webkit-transform:none;transform:none}#screen-meta-links .show-settings:after{right:0;content:"\f140";font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 5px 0 0;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#72777c}#templateside ul li a,.contextual-help-tabs a,.nav-tab{text-decoration:none}#screen-meta-links .screen-meta-active:after{content:"\f142"}.toggle-arrow{background-repeat:no-repeat;background-position:top left;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom left}#contextual-help-wrap h5,#screen-options-wrap h5,#screen-options-wrap legend{margin:0;padding:8px 0;font-size:13px;font-weight:600}.hndle a,.widefat tfoot td,.widefat th,.widefat thead td{font-weight:400}.ie8 #screen-options-wrap legend{color:inherit}.metabox-prefs label{display:inline-block;padding-right:15px;line-height:30px}#number-of-columns{display:inline-block;vertical-align:middle;line-height:30px}.metabox-prefs input[type=checkbox]{margin-top:0;margin-right:6px}.metabox-prefs label input,.metabox-prefs label input[type=checkbox]{margin:-4px 5px 0 0}.metabox-prefs .columns-prefs label input{margin:-1px 2px 0 0}.metabox-prefs label a{display:none}.metabox-prefs .screen-options input,.metabox-prefs .screen-options label{margin-top:0;margin-bottom:0;vertical-align:middle}.metabox-prefs .screen-options .screen-per-page{margin-right:15px}.metabox-prefs .screen-options label{line-height:28px;padding-right:0}.screen-options+.screen-options{margin-top:10px}.metabox-prefs .submit{margin-top:1em;padding:0}#contextual-help-wrap{padding:0}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;left:150px;right:170px;border:1px solid #e1e1e1;border-top:none;border-bottom:none;background:#f6fbfd}#contextual-help-wrap.no-sidebar #contextual-help-back{right:0;border-right-width:0;border-bottom-right-radius:2px}.contextual-help-tabs{float:left;width:150px;margin:0}.contextual-help-tabs ul{margin:1em 0}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:0 0 0 2px;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 5px 5px 12px;line-height:18px;border:1px solid transparent;border-right:none;border-left:none}.contextual-help-tabs a:hover{color:#32373c}.contextual-help-tabs .active{padding:0;margin:0 -1px 0 0;border-left:2px solid #00a0d2;background:#f6fbfd;box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active a{border-color:#e1e1e1;color:#32373c}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 22px 12px 0;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content ul li{list-style-type:disc;margin-left:18px}.contextual-help-sidebar{width:150px;float:right;padding:0 8px 0 12px;overflow:auto}html.wp-toolbar{padding-top:32px}.widefat td,.widefat th{color:#555}.widefat ol,.widefat p,.widefat tfoot tr td,.widefat tfoot tr th,.widefat thead tr td,.widefat thead tr th,.widefat ul{color:#32373c}.widefat td p{margin:2px 0 .8em}.widefat .column-comment p{margin:.6em 0}.widefat .column-comment ul{list-style:outside;margin-left:2em}.postbox-container{float:left}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #b4b9be;height:250px;position:relative}.metabox-holder .postbox-container .empty-container:after{content:attr(data-emptystring);margin:auto;position:absolute;top:0;left:0;bottom:0;right:0;height:1em;width:200px;text-align:center;color:#ccc;font-size:18px;display:none}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:left}#post-body.columns-2 #postbox-container-1{float:right;margin-right:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content .metabox-holder .postbox-container .empty-container{border:0;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{cursor:move}.hndle a{font-size:11px}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.nav-tab,.plugins .name{font-weight:600}.postbox .handlediv{display:none;float:right;width:36px;height:36px;margin:0;padding:0;border:0;background:0 0;cursor:pointer}.js .postbox .handlediv{display:block}.sortable-placeholder{border:1px dashed #b4b9be;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 10px 0 0}#wpfooter{position:absolute;bottom:0;left:0;right:0;padding:10px 20px;color:#555d66}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}.nav-tab{float:left;border:1px solid #ccc;border-bottom:none;margin-left:.5em;padding:5px 10px;font-size:14px;line-height:24px;background:#e5e5e5;color:#555}.nav-tab-small .nav-tab,h3 .nav-tab{padding:5px 14px;font-size:12px;line-height:16px}.nav-tab:focus,.nav-tab:hover{background-color:#fff;color:#444}.nav-tab-active,.nav-tab:focus:active{box-shadow:none}.nav-tab-active{margin-bottom:-1px;color:#444}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:1px solid #ccc;margin:0;padding-top:9px;padding-bottom:0;line-height:inherit}.nav-tab-wrapper:not(.wp-clearfix):after{content:"";display:table;clear:both}.ie8 .nav-tab-wrapper{display:inline-block;width:100%;vertical-align:top}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:inline-block;float:right;vertical-align:middle;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:4px 10px 0}.loading-content .spinner,.spinner.is-active{visibility:visible}#template>div{margin-right:16em}#template .notice{margin-top:1em;margin-right:3%}#template .notice p{width:auto}#template .submit .spinner{float:none}.metabox-holder .postbox>h3,.metabox-holder .stuffbox>h3,.metabox-holder h2.hndle,.metabox-holder h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}.nav-menus-php .metabox-holder h3{padding:10px 10px 11px 14px;line-height:21px}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:left}.attention,.error-message{color:#dc3232;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}#howto,.importer-action,.importer-desc,.importer-title{display:block}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}.media-icon{width:62px;text-align:center}.media-icon img{border:1px solid #e5e5e5;border:1px solid rgba(0,0,0,.07)}#howto{font-size:11px;margin:0 5px}.importers{font-size:16px;width:auto}.importers td{padding-right:14px;line-height:1.5em}.importers .import-system{max-width:250px}.importers td.desc{max-width:500px}.post-categories,.post-categories li{display:inline}.importer-title{color:#000;font-size:14px;font-weight:400;margin-bottom:.2em}.importer-action{line-height:20px;color:#555;margin-bottom:1em}#post-body #post-body-content #namediv h2,#post-body #post-body-content #namediv h3{margin-top:0}.edit-comment-author{font-size:14px;line-height:1.4;font-weight:600;color:#222;margin:2px 0 0 9px}#namediv h2 label,#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.checkbox,.post-categories,.zerosize,fieldset{margin:0;padding:0}.zerosize{height:0;width:0;border:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:none}fieldset{border:0}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) bottom left repeat-x}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) top left repeat-x;height:17px;float:left}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;transition:color .1s ease-in 0;text-align:center;color:#ffb900}.star-rating .star-full:before{content:"\f155"}.star-rating .star-half:before{content:"\f459"}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:"\f154"}div.action-links{font-weight:400;margin:6px 0 0}#plugin-information{background:#fff;position:fixed;top:0;right:0;bottom:0;left:0;height:100%;padding:0}#plugin-information-scrollable{overflow:auto;-webkit-overflow-scrolling:touch;height:100%}#plugin-information-title{padding:0 26px;background:#f5f5f5;font-size:22px;font-weight:600;line-height:56px;position:relative;height:56px}#plugin-information-title.with-banner{margin-right:0;height:250px;background-size:cover}#plugin-information-title h2{font-size:1em;font-weight:600;padding:0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner h2{position:relative;font-family:"Helvetica Neue",sans-serif;display:inline-block;font-size:30px;line-height:50px;box-sizing:border-box;max-width:100%;padding:0 15px;margin-top:174px;color:#fff;background:rgba(30,30,30,.9);text-shadow:0 1px 3px rgba(0,0,0,.4);box-shadow:0 0 30px rgba(255,255,255,.1);border-radius:8px}#plugin-information-title div.vignette{display:none}#plugin-information-title.with-banner div.vignette{position:absolute;display:block;top:0;left:0;height:250px;width:100%;background:0 0;box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1)}#plugin-information-tabs{padding:0 16px;position:relative;right:0;left:0;min-height:36px;font-size:0;z-index:1;border-bottom:1px solid #ddd;background:#f3f3f3}#plugin-information-tabs a{position:relative;display:inline-block;padding:9px 10px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;transition:none}#plugin-information-tabs a.current{margin:0 -1px -1px;background:#fff;border:1px solid #ddd;border-bottom-color:#fff;padding-top:8px;color:#32373c}#plugin-information-tabs.with-banner a.current{border-top:none;padding-top:9px}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{overflow:hidden;background:#fff;position:relative;top:0;right:0;left:0;min-height:100%;min-height:calc(100% - 152px)}#plugin-information-content.with-banner{min-height:calc(100% - 346px)}#section-holder{position:relative;top:0;right:250px;bottom:0;left:0;margin-right:250px;padding:10px 26px 99999px;margin-bottom:-99939px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{float:right;position:relative;top:0;right:0;padding:16px 16px 99999px;margin-bottom:-99939px;width:217px;border-left:1px solid #ddd;background:#f3f3f3;color:#666}#plugin-information .fyi strong{color:#444}#plugin-information .fyi h3{font-weight:600;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-right:0}#plugin-information .fyi ul{padding:0;margin:0;list-style:none}#plugin-information .fyi li{margin:0 0 10px}#plugin-information .fyi-description{margin-top:0}#plugin-information .counter-container{margin:3px 0}#plugin-information .counter-label{float:left;margin-right:5px;min-width:55px}#plugin-information .counter-back{height:17px;width:92px;background-color:#e5e5e5;float:left}#plugin-information .counter-bar{height:17px;background-color:#ffc733;float:left}#plugin-information .counter-count{margin-left:5px}#plugin-information .fyi ul.contributors{margin-top:10px}#plugin-information .fyi ul.contributors li{display:inline-block;margin-right:8px;vertical-align:middle}#plugin-information .fyi ul.contributors li img{vertical-align:middle;margin-right:4px}#plugin-information-footer{padding:13px 16px;position:absolute;right:0;bottom:0;left:0;height:33px;border-top:1px solid #ddd;background:#f3f3f3}#plugin-information .section ol,#plugin-information .section ul{list-style-type:disc;margin-left:24px}#plugin-information .section,#plugin-information .section p{font-size:14px;line-height:1.7}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;margin-top:16px;max-width:100%;width:auto;height:auto;box-shadow:0 1px 2px rgba(0,0,0,.3)}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px}#plugin-information pre{padding:7px;overflow:auto;border:1px solid #ccc}#plugin-information blockquote{border-left:2px solid #ddd;color:#666;font-style:italic;margin:1em 0;padding:0 0 0 1em}#plugin-information .review{overflow:hidden;width:100%;margin-bottom:20px;border-bottom:1px solid #e5e5e5}#plugin-information .review-title-section{overflow:hidden}#plugin-information .review-title-section h4{display:inline-block;float:left;margin:0 6px 0 0}#plugin-information .reviewer-info p{clear:both;margin:0;padding-top:2px}#plugin-information .reviewer-info .avatar{float:left;margin:4px 6px 0 0}#plugin-information .reviewer-info .star-rating{float:left}#plugin-information .review-meta{float:left;margin-left:.75em}#plugin-information .review-body{float:left;width:100%}.plugin-version-author-uri{font-size:13px}.update-php .button.button-primary{margin-right:1em}@media screen and (max-width:771px){#plugin-information-title.with-banner,#plugin-information-title.with-banner div.vignette{height:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:40px;max-width:85%}#plugin-information-tabs{overflow:hidden;padding:0;height:auto}#plugin-information-tabs a.current{margin-bottom:0;border-bottom:none}#plugin-information .fyi{float:none;border:1px solid #ddd;position:static;width:auto;margin:26px 26px 0;padding-bottom:0}#section-holder{position:static;margin:0;padding-bottom:70px}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}#TB_window.plugin-details-modal{background:#fcfcfc}#TB_window.plugin-details-modal.thickbox-loading:before{content:"";display:block;width:20px;height:20px;position:absolute;left:50%;top:50%;z-index:-1;margin:-10px 0 0 -10px;background:url(../images/spinner.gif) center no-repeat #fcfcfc;background-size:20px 20px;-webkit-transform:translateZ(0);transform:translateZ(0)}.plugin-details-modal #TB_ajaxWindowTitle,.plugin-details-modal .tb-close-icon{display:none}.tree-folder,[role=treeitem] li{position:relative}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#TB_window.plugin-details-modal.thickbox-loading:before{background-image:url(../images/spinner-2x.gif)}}.plugin-details-modal #TB_title{float:left;height:1px}.plugin-details-modal #TB_closeWindowButton{left:auto;right:-30px;color:#eee}.plugin-details-modal #TB_closeWindowButton:focus,.plugin-details-modal #TB_closeWindowButton:hover{color:#00a0d2;outline:0;box-shadow:none}.plugin-details-modal #TB_closeWindowButton:after{content:"\f335";font:400 32px/29px dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media screen and (max-width:830px){.plugin-details-modal #TB_closeWindowButton{right:0;top:-30px}}img{border:none}.bulk-action-notice .toggle-indicator:before,.js .meta-box-sortables .postbox .toggle-indicator:before,.sidebar-name .toggle-indicator:before{content:"\f142";display:inline-block;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,.js .widgets-holder-wrap.closed .toggle-indicator:before{content:"\f140"}.js .postbox .handlediv .toggle-indicator:before{margin-top:4px;width:20px;border-radius:50%;text-indent:-1px}#template .CodeMirror,#template textarea,#templateside>ul{box-sizing:border-box;min-height:60vh;height:calc(100vh - 295px);border:1px solid #ddd}.rtl.js .postbox .handlediv .toggle-indicator:before{text-indent:1px}.bulk-action-notice .toggle-indicator:before{line-height:16px;vertical-align:top;color:#72777c}.js .postbox .handlediv:focus{box-shadow:none;outline:0}.js .postbox .handlediv:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#photo-add-url-div input[type=text]{width:300px}.alignleft h2{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;background:#f9f9f9;-moz-tab-size:4;-o-tab-size:4;tab-size:4}#template .CodeMirror,#template textarea{width:100%}#templateside>h2{padding-top:6px;padding-bottom:7px;margin:0}#templateside ol,#templateside ul{margin:0;padding:0}#templateside>ul{margin-top:0;overflow:auto;padding:0;background-color:#f7f7f7;border-left:none}#templateside ul ul{padding-left:12px}#templateside>ul>li>ul[role=group]{padding-left:0}[role=treeitem][aria-expanded=false]>ul{display:none}[role=treeitem] span[aria-hidden]{display:inline;font-family:dashicons;font-size:20px;position:absolute;pointer-events:none}[role=treeitem][aria-expanded=false]>.folder-label .icon:after{content:"\f139"}[role=treeitem][aria-expanded=true]>.folder-label .icon:after{content:"\f140"}[role=treeitem] .folder-label{display:block;padding:3px 3px 3px 12px;cursor:pointer}[role=treeitem]{outline:0}[role=treeitem] .folder-label.focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}[role=treeitem] .folder-label.hover,[role=treeitem].hover{background-color:#eaeaea}.tree-folder{margin:0}.tree-folder .tree-folder::after{content:' ';display:block;position:absolute;left:2px;border-left:1px solid #ccc;top:-13px;bottom:10px}.tree-folder>li::before{content:' ';position:absolute;display:block;border-left:1px solid #ccc;left:2px;top:-5px;height:18px;width:7px;border-bottom:1px solid #ccc}.tree-folder>li::after{content:' ';position:absolute;display:block;border-left:1px solid #ccc;left:2px;bottom:-7px;top:0}#templateside .current-file{margin:-4px 0 -2px}.tree-folder>.current-file::before{left:4px;height:15px;width:0;border-left:none;top:3px}.tree-folder>.current-file::after{bottom:-4px;height:7px;left:2px;top:auto}.tree-folder li:last-child>.tree-folder::after,.tree-folder>li:last-child::after{display:none}#theme-plugin-editor-label{display:inline-block;margin-bottom:1em;font-weight:600}.fileedit-sub #plugin,.fileedit-sub #theme{max-width:40%}.fileedit-sub .alignright{text-align:right}#template p{width:97%}#file-editor-linting-error{margin-top:1em;margin-bottom:1em}#file-editor-linting-error>.notice{margin:0;display:inline-block}#file-editor-linting-error>.notice>p{width:auto}#template .submit{margin-top:1em;padding:0}#template .submit input[type=submit][disabled]{cursor:not-allowed}#templateside{float:right;width:16em}#postcustomstuff p.submit{margin:0}#templateside h4{margin:1em 0 0}#templateside li{margin:4px 0}#templateside li:not(.howto) a,.theme-editor-php .highlight{display:block;padding:3px 0 3px 12px;text-decoration:none}#templateside li:not(.howto)>a:first-of-type{padding-top:0}#templateside li.howto{padding:6px 12px 12px}.theme-editor-php .highlight{margin:-3px 3px -3px -12px}#templateside .highlight{border:none;font-weight:600}.nonessential{color:#666;font-size:11px;font-style:italic;padding-left:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}#file-editor-warning .file-editor-warning-content{margin:25px}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top .widget-action .toggle-indicator:before{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.widget-top .widget-action .toggle-indicator:before{padding:1px 2px 1px 0;border-radius:50%}.accordion-section-title:after,.handlediv,.item-edit,.postbox .handlediv.button-link,.toggle-indicator{color:#72777c}.widget-action{color:#555d66}.accordion-section-title:hover:after,.handlediv:focus,.handlediv:hover,.item-edit:focus,.item-edit:hover,.postbox .handlediv.button-link:focus,.postbox .handlediv.button-link:hover,.sidebar-name:hover .toggle-indicator,.widget-action:focus,.widget-top:hover .widget-action{color:#23282d}.widget-top .widget-action:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.accordion-section-title:after,.control-section .accordion-section-title:after{float:right;right:20px;top:-2px}#customize-info.open .accordion-section-title:after,.control-section.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before,.widget.open .widget-top .widget-action .toggle-indicator:before{content:"\f142"}/*!
+.button.updated-message,a{transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out}#ajax-loading,.ajax-feedback,.ajax-loading,.imgedit-wait-spin,.list-ajax-loading,.spinner,.wp-header-end{visibility:hidden}.filter-group,.postbox-container .meta-box-sortables,.wp-filter,html.wp-toolbar{box-sizing:border-box}#docs-list,#plugin-information .section,#template textarea,.code,.ltr,code{direction:ltr}#wpwrap{height:auto;min-height:100%;width:100%;position:relative;-webkit-font-smoothing:subpixel-antialiased}#wpcontent{height:100%;padding-left:20px}#wpcontent,#wpfooter{margin-left:160px}.folded #wpcontent,.folded #wpfooter{margin-left:36px}#wpbody-content{padding-bottom:65px;float:left;width:100%;overflow:visible!important}.inner-sidebar{float:right;clear:right;display:none;width:281px;position:relative}.columns-2 .inner-sidebar{margin-right:auto;width:286px;display:block}.columns-2 .inner-sidebar #side-sortables,.inner-sidebar #side-sortables{min-height:300px;width:280px;padding:0}.has-right-sidebar .inner-sidebar{display:block}.has-right-sidebar #post-body{float:left;clear:left;width:100%;margin-right:-2000px}.has-right-sidebar #post-body-content{margin-right:300px;float:none;width:auto}#col-left{float:left;width:35%}#col-right{float:right;width:65%}#col-left .col-wrap{padding:0 6px 0 0}#col-right .col-wrap{padding:0 0 0 6px}.alignleft{float:left}.alignright{float:right}#publishing-action .spinner,#save-post,.subsubsub{float:left}.textleft{text-align:left}.textright{text-align:right}.clear{clear:both}.wp-clearfix:after{content:"";display:table;clear:both}.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}#templateside,.misc-pub-filename,.pre,.widefat *{word-wrap:break-word}.screen-reader-shortcut{position:absolute;top:-1000em}.screen-reader-shortcut:focus{left:6px;top:-25px;height:auto;width:auto;display:block;font-size:14px;font-weight:600;padding:15px 23px 14px;background:#f1f1f1;color:#0073aa;z-index:100000;line-height:normal;box-shadow:0 0 2px 2px rgba(0,0,0,.6);text-decoration:none;outline:0}.hidden,.js .closed .inside,.js .hide-if-js,.js .wp-core-ui .hide-if-js,.js.wp-core-ui .hide-if-js,.no-js .hide-if-no-js,.no-js .wp-core-ui .hide-if-no-js,.no-js.wp-core-ui .hide-if-no-js{display:none}#menu-management .menu-edit,#menu-settings-column .accordion-container,.comment-ays,.feature-filter,.imgedit-group,.manage-menus,.menu-item-handle,.popular-tags,.stuffbox,.widget-inside,.widget-top,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.comment-ays,.feature-filter,.imgedit-group,.popular-tags,.stuffbox,.widgets-holder-wrap,.wp-editor-container,p.popular-tags,table.widefat{background:#fff}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em;min-width:600px}body.iframe{min-width:0;padding-top:1px}body.modal-open{overflow:hidden}body.mobile.modal-open #wpwrap{overflow:hidden;position:fixed;height:100%}iframe,img{border:0}td{font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}a{color:#0073aa}a,div{outline:0}a:active,a:hover{color:#00a0d2}.wp-person a:focus .gravatar,a:focus,a:focus .media-icon img{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}h1,h2,h3{color:#23282d}.ie8 a:focus{outline:#5b9dd9 solid 1px}#adminmenu a:focus,.screen-reader-text:focus{box-shadow:none;outline:0}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}p{font-size:13px;line-height:1.5;margin:1em 0}blockquote{margin:1em}dd,li{margin-bottom:6px}h1,h2,h3,h4,h5,h6{display:block;font-weight:600}h1{font-size:2em;margin:.67em 0}h2,h3{font-size:1.3em;margin:1em 0}.update-core-php h2{margin-top:2em}.update-messages h2,.update-php h2,h4{font-size:1em;margin:1.33em 0}h5{font-size:.83em;margin:1.67em 0}h6{font-size:.67em;margin:2.33em 0}ol,ul{padding:0}ul{list-style:none}ol{list-style-type:decimal;margin-left:2em}ul.ul-disc{list-style:disc}ul.ul-square{list-style:square}ol.ol-decimal{list-style:decimal}ol.ol-decimal,ul.ul-disc,ul.ul-square{margin-left:1.8em}ol.ol-decimal>li,ul.ul-disc>li,ul.ul-square>li{margin:0 0 .5em}.code,code{font-family:Consolas,Monaco,monospace;unicode-bidi:embed}code,kbd{padding:3px 5px 2px;margin:0 1px;background:#eaeaea;background:rgba(0,0,0,.07);font-size:13px}.subsubsub{list-style:none;margin:8px 0 0;padding:0;font-size:13px;color:#666}.subsubsub a{line-height:2;padding:.2em;text-decoration:none}.subsubsub a .count,.subsubsub a.current .count{color:#555d66;font-weight:400}.subsubsub a.current{font-weight:600;border:none}.subsubsub li{display:inline-block;margin:0;padding:0;white-space:nowrap}.widefat{border-spacing:0;width:100%;clear:both;margin:0}.widefat a,.widefat button.button-link{text-decoration:none}.widefat td,.widefat th{padding:8px 10px}.widefat thead td,.widefat thead th{border-bottom:1px solid #e1e1e1}.widefat tfoot td,.widefat tfoot th{border-top:1px solid #e1e1e1;border-bottom:none}.widefat .no-items td{border-bottom-width:0}.widefat td{vertical-align:top}.widefat td,.widefat td ol,.widefat td p,.widefat td ul{font-size:13px;line-height:1.5em}.widefat tfoot td,.widefat th,.widefat thead td{text-align:left;line-height:1.3em;font-size:14px}.updates-table td input,.widefat tfoot td input,.widefat th input,.widefat thead td input{margin:0 0 0 8px;padding:0;vertical-align:text-top}.widefat .check-column{width:2.2em;padding:6px 0 25px;vertical-align:top}.updates-table tbody td.check-column,.widefat tbody th.check-column,.widefat tfoot td.check-column,.widefat thead td.check-column{padding:11px 0 0 3px}.widefat tfoot td.check-column,.widefat thead td.check-column{padding-top:4px;vertical-align:middle}.update-php div.error,.update-php div.updated{margin-left:0}.no-js .widefat tfoot .check-column input,.no-js .widefat thead .check-column input{display:none}.column-comments,.column-links,.column-posts,.widefat .num{text-align:center}.widefat th#comments{vertical-align:middle}.wrap{margin:10px 20px 0 2px}.postbox .inside h2,.wrap [class$=icon32]+h2,.wrap h1,.wrap>h2:first-child{font-size:23px;font-weight:400;margin:0;padding:9px 0 4px;line-height:29px}.wrap h1.wp-heading-inline{display:inline-block;margin-right:5px}.wp-header-end{margin:-2px 0 0}.subtitle{margin:0;padding-left:25px;color:#555d66;font-size:14px;font-weight:400;line-height:1}.wrap .add-new-h2,.wrap .add-new-h2:active,.wrap .page-title-action,.wrap .page-title-action:active{margin-left:4px;padding:4px 8px;position:relative;top:-3px;text-decoration:none;border:none;border:1px solid #ccc;border-radius:2px;background:#f7f7f7;text-shadow:none;font-weight:600;font-size:13px;line-height:normal;color:#0073aa;cursor:pointer;outline:0}.wrap .wp-heading-inline+.page-title-action{margin-left:0}.wrap .add-new-h2:hover,.wrap .page-title-action:hover{border-color:#008EC2;background:#00a0d2;color:#fff}.page-title-action:focus{color:#124964}.ac_match,.highlight,.subsubsub a.current{color:#000}.wrap .page-title-action:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.wrap h1.long-header{padding-right:0}.wp-dialog{background-color:#fff}#available-widgets .widget-top:hover,#widgets-left .widget-in-question .widget-top,#widgets-left .widget-top:hover,.widgets-chooser ul,div#widgets-right .widget-top:hover{border-color:#999;box-shadow:0 1px 2px rgba(0,0,0,.1)}.sorthelper{background-color:#ccf3fa}.alternate,.striped>tbody>:nth-child(odd),ul.striped>:nth-child(odd){background-color:#f9f9f9}.bar{background-color:#e8e8e8;border-right-color:#99d}.highlight{background-color:#e4f2fd}.wp-ui-primary{color:#fff;background-color:#32373c}.wp-ui-text-primary{color:#32373c}.wp-ui-highlight{color:#fff;background-color:#1e8cbe}.wp-ui-text-highlight{color:#1e8cbe}.wp-ui-notification{color:#fff;background-color:#d54e21}.wp-ui-text-notification{color:#d54e21}.wp-ui-text-icon{color:#82878c}img.emoji{display:inline!important;border:none!important;height:1em!important;width:1em!important;margin:0 .07em!important;vertical-align:-.1em!important;background:0 0!important;padding:0!important;box-shadow:none!important}#nav-menu-footer,#nav-menu-header,#your-profile #rich_editing,.checkbox,.control-section .accordion-section-title,.menu-item-handle,.postbox .hndle,.side-info,.sidebar-name,.stuffbox .hndle,.widefat tfoot td,.widefat tfoot th,.widefat thead td,.widefat thead th,.widget .widget-top{line-height:1.4em}.menu-item-handle,.widget .widget-top{background:#fafafa;color:#23282d}.postbox .hndle,.stuffbox .hndle{border-bottom:1px solid #eee;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.quicktags,.search{background-color:#ccc;color:#000;font-size:12px}.icon32{display:none}#bulk-titles div a:before,.notice-dismiss:before,.tagchecklist .ntdelbutton .remove-tag-icon:before,.try-gutenberg-panel .try-gutenberg-panel-close:before,.welcome-panel .welcome-panel-close:before{background:0 0;color:#72777c;content:"\f153";display:block;font:400 16px/20px dashicons;speak:none;height:20px;text-align:center;width:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.welcome-panel .welcome-panel-close:before{margin:0}#bulk-titles div a:before{margin:1px 0}.tagchecklist .ntdelbutton .remove-tag-icon:before{margin-left:2px;border-radius:50%;color:#0073aa;line-height:1.28}.tagchecklist .ntdelbutton:focus{outline:0}#bulk-titles div a:focus:before,#bulk-titles div a:hover:before,.tagchecklist .ntdelbutton:focus .remove-tag-icon:before,.tagchecklist .ntdelbutton:hover .remove-tag-icon:before,.welcome-panel .welcome-panel-close:focus:before,.welcome-panel .welcome-panel-close:hover:before{color:#c00}.tagchecklist .ntdelbutton:focus .remove-tag-icon:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.key-labels label{line-height:24px}b,strong{font-weight:600}.pre{white-space:pre-wrap}#namediv td.first,.nav-tab,.no-break,.star-rating{white-space:nowrap}.howto{color:#666;font-style:italic;display:block}p.install-help{margin:8px 0;font-style:italic}hr{border:0;border-top:1px solid #ddd;border-bottom:1px solid #fafafa}#all-plugins-table .plugins a.delete,#delete-link a.delete,#media-items a.delete,#media-items a.delete-permanently,#nav-menu-footer .menu-delete,#search-plugins-table .plugins a.delete,.plugins a.delete,.row-actions span.delete a,.row-actions span.spam a,.row-actions span.trash a,.submitbox .submitdelete{color:#a00}#all-plugins-table .plugins a.delete:hover,#delete-link a.delete:hover,#media-items a.delete-permanently:hover,#media-items a.delete:hover,#nav-menu-footer .menu-delete:hover,#search-plugins-table .plugins a.delete:hover,.file-error,.plugins a.delete:hover,.row-actions .delete a:hover,.row-actions .spam a:hover,.row-actions .trash a:hover,.submitbox .submitdelete:hover,abbr.required,span.required{color:#dc3232;border:none}#major-publishing-actions{padding:10px;clear:both;border-top:1px solid #ddd;background:#f5f5f5}#delete-action{float:left;line-height:28px}#delete-link{line-height:28px;vertical-align:middle;text-align:left;margin-left:8px}#delete-link a{text-decoration:none}#publishing-action{text-align:right;float:right;line-height:23px}#misc-publishing-actions{padding:6px 0 0}.misc-pub-section{padding:6px 10px 8px}#minor-publishing-actions{padding:10px 10px 0;text-align:right}.preview{float:right}#sticky-span{margin-left:18px}.approve,.unapproved .unapprove{display:none}.spam .approve,.trash .approve,.unapproved .approve{display:inline}td.action-links,th.action-links{text-align:right}#misc-publishing-actions .notice{margin-left:10px;margin-right:10px}.wp-filter{display:inline-block;position:relative;margin:12px 0 25px;padding:0 10px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,.04);border:1px solid #e5e5e5;background:#fff;color:#555;font-size:13px}.wp-filter a{text-decoration:none}.filter-count{display:inline-block;vertical-align:middle;min-width:4em}.filter-count .count,.title-count{display:inline-block;position:relative;top:-1px;padding:4px 10px;border-radius:30px;background:#72777c;color:#fff;font-size:14px;font-weight:600}.title-count{display:inline;top:-3px;margin-left:5px;margin-right:20px}.filter-links li>a,.wp-filter .search-form.search-plugins{display:inline-block}.filter-items{float:left}.filter-links,.filter-links li{display:inline-block;margin:0}.filter-links li>a{margin:0 10px;padding:15px 0;border-bottom:4px solid #fff;color:#666;cursor:pointer}.filter-links .current{box-shadow:none;border-bottom:4px solid #666;color:#23282d}.filter-links li>a:focus,.filter-links li>a:hover,.show-filters .filter-links a.current:focus,.show-filters .filter-links a.current:hover{color:#00a0d2}.wp-filter .search-form{float:right;margin:10px 0}.wp-filter .search-form input[type=search]{margin:0;padding:3px 5px;width:280px;max-width:100%;font-size:16px;font-weight:300;line-height:1.5}.wp-filter .search-form select{margin:0;height:32px;vertical-align:top}.wp-filter .button.drawer-toggle{margin:10px 9px 0;padding:0 10px 0 6px;border-color:transparent;background-color:transparent;color:#666;vertical-align:baseline;box-shadow:none}.wp-filter .drawer-toggle:before{content:"\f111";margin:0 5px 0 0;color:#72777c;font:400 16px/1 dashicons;vertical-align:text-bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-filter .button.drawer-toggle:focus,.wp-filter .button.drawer-toggle:hover,.wp-filter .drawer-toggle:focus:before,.wp-filter .drawer-toggle:hover:before{background-color:transparent;color:#00a0d2}.wp-filter .button.drawer-toggle:focus:active,.wp-filter .button.drawer-toggle:hover{border-color:transparent}.wp-filter .button.drawer-toggle:focus{border-color:#5b9dd9}.wp-filter .button.drawer-toggle:active{background:0 0;box-shadow:none;-webkit-transform:none;transform:none}.wp-filter .drawer-toggle.current:before{color:#fff}.filter-drawer,.wp-filter .favorites-form{display:none;margin:0 -10px 0 -20px;padding:20px;border-top:1px solid #eee;background:#fafafa;overflow:hidden}.show-favorites-form .favorites-form,.show-filters .filter-drawer{display:block}.show-filters .filter-links a.current{border-bottom:none}.show-filters .wp-filter .button.drawer-toggle{border-radius:2px;background:#72777c;color:#fff}.filter-group,.filtered-by .tag{border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.show-filters .wp-filter .drawer-toggle:focus,.show-filters .wp-filter .drawer-toggle:hover{background:#2ea2cc}.show-filters .wp-filter .drawer-toggle:before{color:#fff}.filter-group{position:relative;float:left;margin:0 1% 0 0;padding:20px 10px 10px;width:24%;background:#fff}.filter-group legend{position:absolute;top:10px;display:block;margin:0;padding:0;font-size:1em;font-weight:600}.filter-drawer .filter-group-feature{margin:28px 0 0;list-style-type:none;font-size:12px}.filter-drawer .filter-group-feature input,.filter-drawer .filter-group-feature label{line-height:16px}.filter-drawer .filter-group-feature input{position:absolute;margin:0}.filter-group .filter-group-feature label{display:block;margin:14px 0 14px 23px}.filter-drawer .buttons{clear:both;margin-bottom:20px}.filter-drawer .filter-group+.buttons{margin-bottom:0;padding-top:20px}.filter-drawer .buttons .button span{display:inline-block;opacity:.8;font-size:12px;text-indent:10px}.wp-filter .button.clear-filters{display:none;margin-left:10px}.wp-filter .button-link.edit-filters{padding:0 5px;line-height:28px}.filtered-by{display:none;margin:0}.filtered-by>span{font-weight:600}.filtered-by a{margin-left:10px}.filtered-by .tags{display:inline}.filtered-by .tag{margin:0 5px;padding:4px 8px;background:#fff;font-size:11px}.filters-applied .filter-drawer .buttons,.filters-applied .filter-drawer br,.filters-applied .filter-group{display:none!important}.filters-applied .filtered-by{display:block}.filters-applied .filter-drawer{padding:20px}.error .content-filterable,.loading-content .content-filterable,.show-filters .content-filterable,.show-filters .favorites-form,.show-filters.filters-applied.loading-content .content-filterable{display:none}.show-filters.filters-applied .content-filterable{display:block}.loading-content .spinner{display:block;margin:40px auto 0;float:none}@media only screen and (max-width:1120px){.filter-drawer{border-bottom:1px solid #eee}.filter-group{margin-bottom:0;margin-top:5px;width:100%}.filter-group li{margin:10px 0}}@media only screen and (max-width:1000px){.filter-items{float:none}.wp-filter .media-toolbar-primary,.wp-filter .media-toolbar-secondary,.wp-filter .search-form{float:none;position:relative;max-width:100%}}@media only screen and (max-width:782px){.filter-group li{padding:0;width:50%}}@media only screen and (max-width:320px){.filter-count{display:none}.wp-filter .drawer-toggle{margin:10px 0}.filter-group li,.wp-filter .search-form input[type=search]{width:100%}}.notice,div.error,div.updated{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:5px 15px 2px;padding:1px 12px}div[class=update-message]{padding:.5em 12px .5em 0}.form-table td .notice p,.notice p,.notice-title,div.error p,div.updated p{margin:.5em 0;padding:2px}.error a{text-decoration:underline}.updated a{padding-bottom:2px}.notice-alt{box-shadow:none}.notice-large{padding:10px 20px}.notice-title{display:inline-block;color:#23282d;font-size:18px}.wp-core-ui .notice.is-dismissible{padding-right:38px;position:relative}.notice-dismiss{position:absolute;top:0;right:1px;border:none;margin:0;padding:9px;background:0 0;color:#72777c;cursor:pointer}.notice-dismiss:active:before,.notice-dismiss:focus:before,.notice-dismiss:hover:before{color:#c00}.notice-dismiss:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 .notice-dismiss:focus{outline:#5b9dd9 solid 1px}.notice-success,div.updated{border-left-color:#46b450}.notice-success.notice-alt{background-color:#ecf7ed}.notice-warning{border-left-color:#ffb900}.notice-warning.notice-alt{background-color:#fff8e5}.notice-error,div.error{border-left-color:#dc3232}.notice-error.notice-alt{background-color:#fbeaea}.notice-info{border-left-color:#00a0d2}.notice-info.notice-alt{background-color:#e5f5fa}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updated-message p:before,.updating-message p:before{display:inline-block;font:400 20px/1 dashicons;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.media-upload-form .notice,.media-upload-form div.error,.wrap .notice,.wrap div.error,.wrap div.updated{margin:5px 0 15px}.wrap #templateside .notice{display:block;margin:0;padding:5px 8px;font-weight:600;text-decoration:none}.wrap #templateside span.notice{margin-left:-12px}#templateside li.notice a{padding:0}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.update-message p:before,.updating-message p:before{color:#f56e28;content:"\f463"}.button.installing:before,.button.updating-message:before,.import-php .updating-message:before,.updating-message p:before{-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.button.updated-message:before,.installed p:before,.updated-message p:before{color:#79ba49;content:'\f147'}.update-message.notice-error p:before{color:#dc3232;content:"\f534"}.import-php .updating-message:before,.wrap .notice p:before{margin-right:6px;vertical-align:bottom}#update-nag,.update-nag{display:inline-block;line-height:19px;padding:11px 15px;font-size:14px;text-align:left;margin:25px 20px 0 2px;background-color:#fff;border-left:4px solid #ffba00;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}#screen-meta,ul#dismissed-updates{display:none}form.upgrade{margin-top:8px}form.upgrade .hint{font-style:italic;font-size:85%;margin:-.5em 0 2em}.update-php .spinner{float:none;margin:-4px 0}#ajax-response.alignleft{margin-left:2em}.button.installed:before,.button.installing:before,.button.updated-message:before,.button.updating-message:before{margin:3px 5px 0 -2px}.button-primary.updating-message:before{color:#fff}.button-primary.updated-message:before{color:#66c6e4}@media aural{.button.installed:before,.button.installing:before,.update-message p:before,.wrap .notice p:before{speak:none}}#adminmenu a,#catlist a,#taglist a{text-decoration:none}#contextual-help-wrap,#screen-options-wrap{margin:0;padding:8px 20px 12px;position:relative}#contextual-help-wrap{overflow:auto;margin-left:0!important}#screen-meta-links{margin:0 20px 0 0}#screen-meta{margin:0 20px -1px 0;position:relative;background-color:#fff;border:1px solid #ddd;border-top:none;box-shadow:0 1px 0 rgba(0,0,0,.025)}#contextual-help-link-wrap,#screen-options-link-wrap{float:right;height:28px;margin:0 0 0 6px;border:1px solid #ddd;border-top:none;background:#fff;box-shadow:0 1px 1px -1px rgba(0,0,0,.1)}#screen-meta-links .screen-meta-toggle{position:relative;top:0}#screen-meta-links .show-settings{border:0;background:0 0;border-radius:0;color:#72777c;line-height:1.7;padding:3px 6px 3px 16px}#screen-meta-links .show-settings:active,#screen-meta-links .show-settings:focus,#screen-meta-links .show-settings:hover{color:#32373c}#screen-meta-links .show-settings:active{box-shadow:none;-webkit-transform:none;transform:none}#screen-meta-links .show-settings:after{right:0;content:"\f140";font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 5px 0 0;bottom:2px;position:relative;vertical-align:bottom;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;color:#72777c}#templateside ul li a,.contextual-help-tabs a,.nav-tab{text-decoration:none}#screen-meta-links .screen-meta-active:after{content:"\f142"}.toggle-arrow{background-repeat:no-repeat;background-position:top left;background-color:transparent;height:22px;line-height:22px;display:block}.toggle-arrow-active{background-position:bottom left}#contextual-help-wrap h5,#screen-options-wrap h5,#screen-options-wrap legend{margin:0;padding:8px 0;font-size:13px;font-weight:600}.hndle a,.widefat tfoot td,.widefat th,.widefat thead td{font-weight:400}.ie8 #screen-options-wrap legend{color:inherit}.metabox-prefs label{display:inline-block;padding-right:15px;line-height:30px}#number-of-columns{display:inline-block;vertical-align:middle;line-height:30px}.metabox-prefs input[type=checkbox]{margin-top:0;margin-right:6px}.metabox-prefs label input,.metabox-prefs label input[type=checkbox]{margin:-4px 5px 0 0}.metabox-prefs .columns-prefs label input{margin:-1px 2px 0 0}.metabox-prefs label a{display:none}.metabox-prefs .screen-options input,.metabox-prefs .screen-options label{margin-top:0;margin-bottom:0;vertical-align:middle}.metabox-prefs .screen-options .screen-per-page{margin-right:15px}.metabox-prefs .screen-options label{line-height:28px;padding-right:0}.screen-options+.screen-options{margin-top:10px}.metabox-prefs .submit{margin-top:1em;padding:0}#contextual-help-wrap{padding:0}#contextual-help-columns{position:relative}#contextual-help-back{position:absolute;top:0;bottom:0;left:150px;right:170px;border:1px solid #e1e1e1;border-top:none;border-bottom:none;background:#f6fbfd}#contextual-help-wrap.no-sidebar #contextual-help-back{right:0;border-right-width:0;border-bottom-right-radius:2px}.contextual-help-tabs{float:left;width:150px;margin:0}.contextual-help-tabs ul{margin:1em 0}.contextual-help-tabs li{margin-bottom:0;list-style-type:none;border-style:solid;border-width:0 0 0 2px;border-color:transparent}.contextual-help-tabs a{display:block;padding:5px 5px 5px 12px;line-height:18px;border:1px solid transparent;border-right:none;border-left:none}.contextual-help-tabs a:hover{color:#32373c}.contextual-help-tabs .active{padding:0;margin:0 -1px 0 0;border-left:2px solid #00a0d2;background:#f6fbfd;box-shadow:0 2px 0 rgba(0,0,0,.02),0 1px 0 rgba(0,0,0,.02)}.contextual-help-tabs .active a{border-color:#e1e1e1;color:#32373c}.contextual-help-tabs-wrap{padding:0 20px;overflow:auto}.help-tab-content{display:none;margin:0 22px 12px 0;line-height:1.6em}.help-tab-content.active{display:block}.help-tab-content ul li{list-style-type:disc;margin-left:18px}.contextual-help-sidebar{width:150px;float:right;padding:0 8px 0 12px;overflow:auto}html.wp-toolbar{padding-top:32px}.widefat td,.widefat th{color:#555}.widefat ol,.widefat p,.widefat tfoot tr td,.widefat tfoot tr th,.widefat thead tr td,.widefat thead tr th,.widefat ul{color:#32373c}.widefat td p{margin:2px 0 .8em}.widefat .column-comment p{margin:.6em 0}.widefat .column-comment ul{list-style:outside;margin-left:2em}.postbox-container{float:left}#wpbody-content .metabox-holder{padding-top:10px}.metabox-holder .postbox-container .empty-container{border:3px dashed #b4b9be;height:250px;position:relative}.metabox-holder .postbox-container .empty-container:after{content:attr(data-emptystring);margin:auto;position:absolute;top:0;left:0;bottom:0;right:0;height:1em;width:200px;text-align:center;color:#ccc;font-size:18px;display:none}.columns-2 #postbox-container-3 .empty-container,.columns-2 #postbox-container-4 .empty-container,.columns-3 #postbox-container-4 .empty-container,.metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#post-body-content{width:100%;min-width:463px;float:left}#post-body.columns-2 #postbox-container-1{float:right;margin-right:-300px;width:280px}#post-body.columns-2 #side-sortables{min-height:250px}@media only screen and (max-width:799px){#wpbody-content .metabox-holder .postbox-container .empty-container{border:0;height:0;min-height:0}}.js .postbox .hndle,.js .widget .widget-top{cursor:move}.hndle a{font-size:11px}#adminmenu .wp-submenu li.current,#adminmenu .wp-submenu li.current a,#adminmenu .wp-submenu li.current a:hover,#dashboard_right_now .versions .b,#ed_reply_toolbar #ed_reply_strong,#pass-strength-result.short,#pass-strength-result.strong,#post-status-display,#post-visibility-display,.feature-filter .feature-name,.item-controls .item-order a,.media-item .percent,.nav-tab,.plugins .name{font-weight:600}.postbox .handlediv{display:none;float:right;width:36px;height:36px;margin:0;padding:0;border:0;background:0 0;cursor:pointer}.js .postbox .handlediv{display:block}.sortable-placeholder{border:1px dashed #b4b9be;margin-bottom:20px}.postbox,.stuffbox{margin-bottom:20px;padding:0;line-height:1}.postbox .inside,.stuffbox .inside{padding:0 12px 12px;line-height:1.4em;font-size:13px}.postbox .inside{margin:11px 0;position:relative}.postbox .inside>p:last-child,.rss-widget ul li:last-child{margin-bottom:1px!important}.postbox.closed h3{border:none;box-shadow:none}.postbox table.form-table{margin-bottom:0}.postbox table.widefat{box-shadow:none}.temp-border{border:1px dotted #ccc}.columns-prefs label{padding:0 10px 0 0}#wpfooter{position:absolute;bottom:0;left:0;right:0;padding:10px 20px;color:#555d66}#wpfooter p{font-size:13px;margin:0;line-height:20px}#footer-thankyou{font-style:italic}.nav-tab{float:left;border:1px solid #ccc;border-bottom:none;margin-left:.5em;padding:5px 10px;font-size:14px;line-height:24px;background:#e5e5e5;color:#555}.nav-tab-small .nav-tab,h3 .nav-tab{padding:5px 14px;font-size:12px;line-height:16px}.nav-tab:focus,.nav-tab:hover{background-color:#fff;color:#444}.nav-tab-active,.nav-tab:focus:active{box-shadow:none}.nav-tab-active{margin-bottom:-1px;color:#444}.nav-tab-active,.nav-tab-active:focus,.nav-tab-active:focus:active,.nav-tab-active:hover{border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.nav-tab-wrapper,.wrap h2.nav-tab-wrapper,h1.nav-tab-wrapper{border-bottom:1px solid #ccc;margin:0;padding-top:9px;padding-bottom:0;line-height:inherit}.nav-tab-wrapper:not(.wp-clearfix):after{content:"";display:table;clear:both}.ie8 .nav-tab-wrapper{display:inline-block;width:100%;vertical-align:top}.spinner{background:url(../images/spinner.gif) no-repeat;background-size:20px 20px;display:inline-block;float:right;vertical-align:middle;opacity:.7;filter:alpha(opacity=70);width:20px;height:20px;margin:4px 10px 0}.loading-content .spinner,.spinner.is-active{visibility:visible}#template>div{margin-right:16em}#template .notice{margin-top:1em;margin-right:3%}#template .notice p{width:auto}#template .submit .spinner{float:none}.metabox-holder .postbox>h3,.metabox-holder .stuffbox>h3,.metabox-holder h2.hndle,.metabox-holder h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}.nav-menus-php .metabox-holder h3{padding:10px 10px 11px 14px;line-height:21px}.plugin-install #description,.plugin-install-network #description{width:60%}table .column-rating,table .column-visible,table .vers{text-align:left}.attention,.error-message{color:#dc3232;font-weight:600}body.iframe{height:98%}.lp-show-latest p{display:none}#howto,.importer-action,.importer-desc,.importer-title{display:block}.lp-show-latest .lp-error p,.lp-show-latest p:last-child{display:block}.media-icon{width:62px;text-align:center}.media-icon img{border:1px solid #e5e5e5;border:1px solid rgba(0,0,0,.07)}#howto{font-size:11px;margin:0 5px}.importers{font-size:16px;width:auto}.importers td{padding-right:14px;line-height:1.5em}.importers .import-system{max-width:250px}.importers td.desc{max-width:500px}.post-categories,.post-categories li{display:inline}.importer-title{color:#000;font-size:14px;font-weight:400;margin-bottom:.2em}.importer-action{line-height:20px;color:#555;margin-bottom:1em}#post-body #post-body-content #namediv h2,#post-body #post-body-content #namediv h3{margin-top:0}.edit-comment-author{font-size:14px;line-height:1.4;font-weight:600;color:#222;margin:2px 0 0 9px}#namediv h2 label,#namediv h3 label{vertical-align:baseline}#namediv table{width:100%}#namediv td.first{width:10px}#namediv input{width:98%}#namediv p{margin:10px 0}#submitdiv h3{margin-bottom:0!important}.checkbox,.post-categories,.zerosize,fieldset{margin:0;padding:0}.zerosize{height:0;width:0;border:0;overflow:hidden;position:absolute}br.clear{height:2px;line-height:2px}.checkbox{border:none}fieldset{border:0}div.star-holder{position:relative;height:17px;width:100px;background:url(../images/stars.png?ver=20121108) bottom left repeat-x}div.star-holder .star-rating{background:url(../images/stars.png?ver=20121108) top left repeat-x;height:17px;float:left}.star-rating .star{display:inline-block;width:20px;height:20px;-webkit-font-smoothing:antialiased;font-size:20px;line-height:1;font-family:dashicons;text-decoration:inherit;font-weight:400;font-style:normal;vertical-align:top;transition:color .1s ease-in 0;text-align:center;color:#ffb900}.star-rating .star-full:before{content:"\f155"}.star-rating .star-half:before{content:"\f459"}.rtl .star-rating .star-half{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.star-rating .star-empty:before{content:"\f154"}div.action-links{font-weight:400;margin:6px 0 0}#plugin-information{background:#fff;position:fixed;top:0;right:0;bottom:0;left:0;height:100%;padding:0}#plugin-information-scrollable{overflow:auto;-webkit-overflow-scrolling:touch;height:100%}#plugin-information-title{padding:0 26px;background:#f5f5f5;font-size:22px;font-weight:600;line-height:56px;position:relative;height:56px}#plugin-information-title.with-banner{margin-right:0;height:250px;background-size:cover}#plugin-information-title h2{font-size:1em;font-weight:600;padding:0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#plugin-information-title.with-banner h2{position:relative;font-family:"Helvetica Neue",sans-serif;display:inline-block;font-size:30px;line-height:50px;box-sizing:border-box;max-width:100%;padding:0 15px;margin-top:174px;color:#fff;background:rgba(30,30,30,.9);text-shadow:0 1px 3px rgba(0,0,0,.4);box-shadow:0 0 30px rgba(255,255,255,.1);border-radius:8px}#plugin-information-title div.vignette{display:none}#plugin-information-title.with-banner div.vignette{position:absolute;display:block;top:0;left:0;height:250px;width:100%;background:0 0;box-shadow:inset 0 0 50px 4px rgba(0,0,0,.2),inset 0 -1px 0 rgba(0,0,0,.1)}#plugin-information-tabs{padding:0 16px;position:relative;right:0;left:0;min-height:36px;font-size:0;z-index:1;border-bottom:1px solid #ddd;background:#f3f3f3}#plugin-information-tabs a{position:relative;display:inline-block;padding:9px 10px;margin:0;height:18px;line-height:18px;font-size:14px;text-decoration:none;transition:none}#plugin-information-tabs a.current{margin:0 -1px -1px;background:#fff;border:1px solid #ddd;border-bottom-color:#fff;padding-top:8px;color:#32373c}#plugin-information-tabs.with-banner a.current{border-top:none;padding-top:9px}#plugin-information-tabs a:active,#plugin-information-tabs a:focus{outline:0}#plugin-information-content{overflow:hidden;background:#fff;position:relative;top:0;right:0;left:0;min-height:100%;min-height:calc(100% - 152px)}#plugin-information-content.with-banner{min-height:calc(100% - 346px)}#section-holder{position:relative;top:0;right:250px;bottom:0;left:0;margin-right:250px;padding:10px 26px 99999px;margin-bottom:-99939px}#section-holder .updated{margin:16px 0}#plugin-information .fyi{float:right;position:relative;top:0;right:0;padding:16px 16px 99999px;margin-bottom:-99939px;width:217px;border-left:1px solid #ddd;background:#f3f3f3;color:#666}#plugin-information .fyi strong{color:#444}#plugin-information .fyi h3{font-weight:600;text-transform:uppercase;font-size:12px;color:#666;margin:24px 0 8px}#plugin-information .fyi h2{font-size:.9em;margin-bottom:0;margin-right:0}#plugin-information .fyi ul{padding:0;margin:0;list-style:none}#plugin-information .fyi li{margin:0 0 10px}#plugin-information .fyi-description{margin-top:0}#plugin-information .counter-container{margin:3px 0}#plugin-information .counter-label{float:left;margin-right:5px;min-width:55px}#plugin-information .counter-back{height:17px;width:92px;background-color:#e5e5e5;float:left}#plugin-information .counter-bar{height:17px;background-color:#ffc733;float:left}#plugin-information .counter-count{margin-left:5px}#plugin-information .fyi ul.contributors{margin-top:10px}#plugin-information .fyi ul.contributors li{display:inline-block;margin-right:8px;vertical-align:middle}#plugin-information .fyi ul.contributors li img{vertical-align:middle;margin-right:4px}#plugin-information-footer{padding:13px 16px;position:absolute;right:0;bottom:0;left:0;height:33px;border-top:1px solid #ddd;background:#f3f3f3}#plugin-information .section ol,#plugin-information .section ul{list-style-type:disc;margin-left:24px}#plugin-information .section,#plugin-information .section p{font-size:14px;line-height:1.7}#plugin-information #section-screenshots ol{list-style:none;margin:0}#plugin-information #section-screenshots li img{vertical-align:text-top;margin-top:16px;max-width:100%;width:auto;height:auto;box-shadow:0 1px 2px rgba(0,0,0,.3)}#plugin-information #section-screenshots li p{font-style:italic;padding-left:20px}#plugin-information pre{padding:7px;overflow:auto;border:1px solid #ccc}#plugin-information blockquote{border-left:2px solid #ddd;color:#666;font-style:italic;margin:1em 0;padding:0 0 0 1em}#plugin-information .review{overflow:hidden;width:100%;margin-bottom:20px;border-bottom:1px solid #e5e5e5}#plugin-information .review-title-section{overflow:hidden}#plugin-information .review-title-section h4{display:inline-block;float:left;margin:0 6px 0 0}#plugin-information .reviewer-info p{clear:both;margin:0;padding-top:2px}#plugin-information .reviewer-info .avatar{float:left;margin:4px 6px 0 0}#plugin-information .reviewer-info .star-rating{float:left}#plugin-information .review-meta{float:left;margin-left:.75em}#plugin-information .review-body{float:left;width:100%}.plugin-version-author-uri{font-size:13px}.update-php .button.button-primary{margin-right:1em}@media screen and (max-width:771px){#plugin-information-title.with-banner,#plugin-information-title.with-banner div.vignette{height:100px}#plugin-information-title.with-banner h2{margin-top:30px;font-size:20px;line-height:40px;max-width:85%}#plugin-information-tabs{overflow:hidden;padding:0;height:auto}#plugin-information-tabs a.current{margin-bottom:0;border-bottom:none}#plugin-information .fyi{float:none;border:1px solid #ddd;position:static;width:auto;margin:26px 26px 0;padding-bottom:0}#section-holder{position:static;margin:0;padding-bottom:70px}#plugin-information .fyi h3,#plugin-information .fyi small{display:none}#plugin-information-footer{padding:12px 16px 0;height:46px}}#TB_window.plugin-details-modal{background:#fcfcfc}#TB_window.plugin-details-modal.thickbox-loading:before{content:"";display:block;width:20px;height:20px;position:absolute;left:50%;top:50%;z-index:-1;margin:-10px 0 0 -10px;background:url(../images/spinner.gif) center no-repeat #fcfcfc;background-size:20px 20px;-webkit-transform:translateZ(0);transform:translateZ(0)}.plugin-details-modal #TB_ajaxWindowTitle,.plugin-details-modal .tb-close-icon{display:none}.tree-folder,[role=treeitem] li{position:relative}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#TB_window.plugin-details-modal.thickbox-loading:before{background-image:url(../images/spinner-2x.gif)}}.plugin-details-modal #TB_title{float:left;height:1px}.plugin-details-modal #TB_closeWindowButton{left:auto;right:-30px;color:#eee}.plugin-details-modal #TB_closeWindowButton:focus,.plugin-details-modal #TB_closeWindowButton:hover{color:#00a0d2;outline:0;box-shadow:none}.plugin-details-modal #TB_closeWindowButton:after{content:"\f335";font:400 32px/29px dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media screen and (max-width:830px){.plugin-details-modal #TB_closeWindowButton{right:0;top:-30px}}img{border:none}.bulk-action-notice .toggle-indicator:before,.js .meta-box-sortables .postbox .toggle-indicator:before,.privacy-text-box .toggle-indicator:before,.sidebar-name .toggle-indicator:before{content:"\f142";display:inline-block;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.bulk-action-notice .bulk-action-errors-collapsed .toggle-indicator:before,.js .meta-box-sortables .postbox.closed .handlediv .toggle-indicator:before,.js .widgets-holder-wrap.closed .toggle-indicator:before,.privacy-text-box.closed .toggle-indicator:before{content:"\f140"}.js .postbox .handlediv .toggle-indicator:before{margin-top:4px;width:20px;border-radius:50%;text-indent:-1px}#template .CodeMirror,#template textarea,#templateside>ul{box-sizing:border-box;min-height:60vh;height:calc(100vh - 295px);border:1px solid #ddd}.rtl.js .postbox .handlediv .toggle-indicator:before{text-indent:1px}.bulk-action-notice .toggle-indicator:before{line-height:16px;vertical-align:top;color:#72777c}.js .postbox .handlediv:focus{box-shadow:none;outline:0}.js .postbox .handlediv:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#photo-add-url-div input[type=text]{width:300px}.alignleft h2{margin:0}#template textarea{font-family:Consolas,Monaco,monospace;font-size:13px;background:#f9f9f9;-moz-tab-size:4;-o-tab-size:4;tab-size:4}#template .CodeMirror,#template textarea{width:100%}#templateside>h2{padding-top:6px;padding-bottom:7px;margin:0}#templateside ol,#templateside ul{margin:0;padding:0}#templateside>ul{margin-top:0;overflow:auto;padding:0;background-color:#f7f7f7;border-left:none}#templateside ul ul{padding-left:12px}#templateside>ul>li>ul[role=group]{padding-left:0}[role=treeitem][aria-expanded=false]>ul{display:none}[role=treeitem] span[aria-hidden]{display:inline;font-family:dashicons;font-size:20px;position:absolute;pointer-events:none}[role=treeitem][aria-expanded=false]>.folder-label .icon:after{content:"\f139"}[role=treeitem][aria-expanded=true]>.folder-label .icon:after{content:"\f140"}[role=treeitem] .folder-label{display:block;padding:3px 3px 3px 12px;cursor:pointer}[role=treeitem]{outline:0}[role=treeitem] .folder-label.focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}[role=treeitem] .folder-label.hover,[role=treeitem].hover{background-color:#eaeaea}.tree-folder{margin:0}.tree-folder .tree-folder::after{content:' ';display:block;position:absolute;left:2px;border-left:1px solid #ccc;top:-13px;bottom:10px}.tree-folder>li::before{content:' ';position:absolute;display:block;border-left:1px solid #ccc;left:2px;top:-5px;height:18px;width:7px;border-bottom:1px solid #ccc}.tree-folder>li::after{content:' ';position:absolute;display:block;border-left:1px solid #ccc;left:2px;bottom:-7px;top:0}#templateside .current-file{margin:-4px 0 -2px}.tree-folder>.current-file::before{left:4px;height:15px;width:0;border-left:none;top:3px}.tree-folder>.current-file::after{bottom:-4px;height:7px;left:2px;top:auto}.tree-folder li:last-child>.tree-folder::after,.tree-folder>li:last-child::after{display:none}#theme-plugin-editor-label{display:inline-block;margin-bottom:1em;font-weight:600}.fileedit-sub #plugin,.fileedit-sub #theme{max-width:40%}.fileedit-sub .alignright{text-align:right}#template p{width:97%}#file-editor-linting-error{margin-top:1em;margin-bottom:1em}#file-editor-linting-error>.notice{margin:0;display:inline-block}#file-editor-linting-error>.notice>p{width:auto}#template .submit{margin-top:1em;padding:0}#template .submit input[type=submit][disabled]{cursor:not-allowed}#templateside{float:right;width:16em}#postcustomstuff p.submit{margin:0}#templateside h4{margin:1em 0 0}#templateside li{margin:4px 0}#templateside li:not(.howto) a,.theme-editor-php .highlight{display:block;padding:3px 0 3px 12px;text-decoration:none}#templateside li:not(.howto)>a:first-of-type{padding-top:0}#templateside li.howto{padding:6px 12px 12px}.theme-editor-php .highlight{margin:-3px 3px -3px -12px}#templateside .highlight{border:none;font-weight:600}.nonessential{color:#666;font-size:11px;font-style:italic;padding-left:12px}#documentation{margin-top:10px}#documentation label{line-height:22px;vertical-align:baseline;font-weight:600}.fileedit-sub{padding:10px 0 8px;line-height:180%}#file-editor-warning .file-editor-warning-content{margin:25px}.accordion-section-title:after,.control-section .accordion-section-title:after,.nav-menus-php .item-edit:before,.widget-top .widget-action .toggle-indicator:before{content:"\f140";font:400 20px/1 dashicons;speak:none;display:block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.widget-top .widget-action .toggle-indicator:before{padding:1px 2px 1px 0;border-radius:50%}.accordion-section-title:after,.handlediv,.item-edit,.postbox .handlediv.button-link,.toggle-indicator{color:#72777c}.widget-action{color:#555d66}.accordion-section-title:hover:after,.handlediv:focus,.handlediv:hover,.item-edit:focus,.item-edit:hover,.postbox .handlediv.button-link:focus,.postbox .handlediv.button-link:hover,.sidebar-name:hover .toggle-indicator,.widget-action:focus,.widget-top:hover .widget-action{color:#23282d}.widget-top .widget-action:focus .toggle-indicator:before{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.accordion-section-title:after,.control-section .accordion-section-title:after{float:right;right:20px;top:-2px}#customize-info.open .accordion-section-title:after,.control-section.open .accordion-section-title:after,.nav-menus-php .menu-item-edit-active .item-edit:before,.widget.open .widget-top .widget-action .toggle-indicator:before{content:"\f142"}/*!
* jQuery UI Draggable/Sortable 1.11.4
* http://jqueryui.com
*
}
/* Welcome Panel */
-.welcome-panel {
+.welcome-panel,
+.try-gutenberg-panel {
position: relative;
overflow: auto;
margin: 16px 0;
line-height: 2.1em;
}
-.welcome-panel h2 {
+.welcome-panel h2,
+.try-gutenberg-panel h2 {
margin: 0;
font-size: 21px;
font-weight: 400;
font-size: 16px;
}
-.welcome-panel li {
+.try-gutenberg-panel h3 {
+ margin: 17px 0 0;
+ font-size: 16px;
+ line-height: 1.4;
+}
+
+.welcome-panel li,
+.try-gutenberg-panel li {
font-size: 14px;
}
-.welcome-panel p {
+.welcome-panel p,
+.try-gutenberg-panel p {
color: #72777c;
}
-.welcome-panel a {
+.welcome-panel a,
+.try-gutenberg-action a {
text-decoration: none;
}
-.welcome-panel .about-description {
+.welcome-panel .about-description,
+.try-gutenberg-panel .about-description {
font-size: 16px;
margin: 0;
}
-.welcome-panel .welcome-panel-close {
+.try-gutenberg-panel-content hr {
+ margin: 20px -23px 0 -23px;
+ border-top: 1px solid #f3f4f5;
+ border-bottom: none;
+}
+
+.welcome-panel .welcome-panel-close,
+.try-gutenberg-panel .try-gutenberg-panel-close {
position: absolute;
+ z-index: 10;
top: 10px;
left: 10px;
padding: 10px 21px 10px 15px;
text-decoration: none;
}
-.welcome-panel .welcome-panel-close:before {
+.welcome-panel .welcome-panel-close:before,
+.try-gutenberg-panel .try-gutenberg-panel-close:before {
position: absolute;
top: 8px;
right: 0;
white-space: normal;
}
-.welcome-panel-content {
- margin-right: 13px;
+.welcome-panel-content,
+.try-gutenberg-panel-content {
+ margin: 0 13px;
max-width: 1500px;
}
+.try-gutenberg-panel img {
+ margin-top: 23px;
+ width: calc( 100% - 40px );
+ border: 1px solid #f3f4f5;
+}
+
+.try-gutenberg-panel .install-now.updating-message:before,
+.try-gutenberg-panel .install-now.updated-message:before {
+ margin-top: 11px;
+}
+
.welcome-panel .welcome-panel-column-container {
clear: both;
position: relative;
float: right;
}
+.try-gutenberg-panel .try-gutenberg-panel-column > * {
+ padding-left: 40px;
+}
+
.ie8 .welcome-panel .welcome-panel-column {
min-width: 230px;
}
width: 36%;
}
+.try-gutenberg-panel .try-gutenberg-panel-column-container {
+ display: -ms-grid;
+ display: grid;
+ -ms-grid-columns: 36% 32% 32%;
+ grid-template-columns: 36% 32% 32%;
+ margin-bottom: 13px;
+}
+
+.try-gutenberg-panel .try-gutenberg-panel-column:not(.try-gutenberg-panel-image-column) {
+ display: -ms-grid;
+ display: grid;
+ -ms-grid-rows: auto 100px;
+ grid-template-rows: auto 100px;
+}
+
.welcome-panel-column p.hide-if-no-customize {
margin-top: 10px;
}
-.welcome-panel-column p {
+.welcome-panel-column p,
+.try-gutenberg-panel-column p {
margin-top: 7px;
color: #444;
}
}
.welcome-panel .welcome-panel-column ul {
- margin: 0.8em 0 1em 1em;
+ margin: 0.8em 0 1em 1em;
}
.welcome-panel .welcome-panel-column li {
}
}
+@media screen and (max-width: 1024px) {
+ .try-gutenberg-panel .try-gutenberg-panel-column-container {
+ -ms-grid-columns: 50% 50%;
+ grid-template-columns: 50% 50%;
+ }
+
+ .try-gutenberg-panel .try-gutenberg-panel-image-column {
+ display: none;
+ }
+}
+
@media screen and (max-width: 870px) {
.welcome-panel .welcome-panel-column,
.welcome-panel .welcome-panel-column:first-child {
width: 100%;
}
+ .try-gutenberg-panel .try-gutenberg-panel-column-container {
+ -ms-grid-columns: 100%;
+ grid-template-columns: 100%;
+ }
+
.welcome-panel .welcome-panel-column li {
display: inline-block;
margin-left: 13px;
.welcome-panel .welcome-panel-column ul {
margin: 0.4em 0 0;
}
-
}
@media screen and ( max-width: 782px ) {
/* Smartphone */
@media screen and (max-width: 600px) {
/* Keep the close icon from overlapping the Welcome text. */
- .welcome-panel .welcome-panel-close {
+ .welcome-panel .welcome-panel-close,
+ .try-gutenberg-panel .try-gutenberg-panel-close {
overflow: hidden;
text-indent: 40px;
white-space: nowrap;
}
/* Make the close icon larger for tappability. */
- .welcome-panel .welcome-panel-close:before {
+ .welcome-panel .welcome-panel-close:before,
+ .try-gutenberg-panel .try-gutenberg-panel-close:before {
font-size: 20px;
top: 5px;
right: -35px;
/*! This file is auto-generated */
-#dashboard_quick_press .draft-title,#the-comment-list td.comment,.dashboard-comment-wrap{word-wrap:break-word}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:left;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:left}#dashboard-widgets .postbox-container,#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:none!important}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets-wrap{overflow:hidden;margin:0 -8px}#dashboard-widgets .postbox .inside{margin-bottom:0}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}#the-comment-list td.comment p.comment-author{margin-top:0;margin-right:0}#the-comment-list p.comment-author img{float:right;margin-left:8px}#the-comment-list p.comment-author strong a{border:none}#the-comment-list td{vertical-align:top}#the-comment-list td.comment img{max-width:100%}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}#dashboard_right_now .sub,.community-events li:first-child,.community-events li~li,.community-events-footer{border-top:1px solid #eee}.welcome-panel h2{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h3{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel p{color:#72777c}.welcome-panel a{text-decoration:none}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:10px;left:10px;padding:10px 21px 10px 15px;font-size:13px;line-height:1.23076923;text-decoration:none}.welcome-panel .welcome-panel-close:before{position:absolute;top:8px;right:0;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 0 3px 13px;padding:12px 36px;height:auto;line-height:1.4285714;white-space:normal}.welcome-panel-content{margin-right:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:right}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.welcome-panel-column p{margin-top:7px;color:#444}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 0 1em 1em}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none;padding:0 0 8px}.welcome-panel .welcome-icon{background:0 0!important}#dashboard_right_now li a:before,#dashboard_right_now li span:before,.welcome-panel .welcome-icon:before{color:#82878c;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 10px;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-edit-page:before,.welcome-panel .welcome-write-blog:before{content:"\f119";top:-3px}.welcome-panel .welcome-add-page:before{content:"\f132";top:-1px}.welcome-panel .welcome-view-site:before{content:"\f115";top:-2px}.welcome-panel .welcome-widgets-menus:before{content:"\f116";top:-2px}.welcome-panel .welcome-comments:before{content:"\f117";top:-1px}.welcome-panel .welcome-learn-more:before{content:"\f118";top:-1px}#dashboard_right_now li a:before,#dashboard_right_now li>span:before{content:"\f159";padding:0 0 0 5px}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:"\f105"}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:"\f109"}#dashboard_right_now .comment-count a:before{content:"\f101"}#dashboard_right_now .comment-mod-count a:before{content:"\f125"}#dashboard_right_now .storage-count a:before{content:"\f104"}#dashboard_right_now .storage-count.warning a:before{content:"\f153"}.community-events-errors{margin:0}.community-events-loading{padding:10px 12px 8px}.community-events{margin-bottom:6px;padding:0 12px}.community-events .spinner{float:none;margin:5px 2px 0;vertical-align:top}.community-events [aria-hidden=true],.community-events-errors [aria-hidden=true],.community-events-errors[aria-hidden=true],.community-events-loading[aria-hidden=true],.community-events[aria-hidden=true]{display:none}.community-events .activity-block:first-child,.community-events h2{padding-top:12px;padding-bottom:10px}.community-events-form{margin:15px 0 5px}.community-events-form .regular-text{width:40%;height:29px;margin:0;vertical-align:top}.community-events li.event-none{border-right:4px solid #00a0d2}.community-events-form label{display:inline-block;vertical-align:top;line-height:28px;height:28px}.community-events .activity-block>p{margin-bottom:0;display:inline}.community-events-toggle-location{vertical-align:middle}#community-events-submit{margin-right:3px;margin-left:3px}#dashboard-widgets .community-events-cancel.button-link{vertical-align:top;line-height:26px;height:28px;text-decoration:underline}.community-events ul{background-color:#fafafa;padding-right:0;padding-left:0;padding-bottom:0}.community-events li{margin:0;padding:8px 12px;color:#72777c}.community-events .activity-block.last{border-bottom:1px solid #eee;padding-top:0;margin-top:-1px}.community-events .event-info{display:block}.event-icon{height:18px;padding-left:10px;width:18px;display:none}.event-icon:before{color:#82878C;font-size:18px}.event-meetup .event-icon:before{content:"\f484"}.event-wordcamp .event-icon:before{content:"\f486"}.community-events .event-title{font-weight:600;display:block}.community-events .event-date,.community-events .event-time{display:block}.community-events-footer{margin-top:0;margin-bottom:0;padding:12px;color:#ddd}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date,.rssSummary{color:#72777c}.community-events-footer .screen-reader-text{height:inherit;white-space:nowrap}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .widget-loading{padding:12px 12px 0;margin-bottom:1em!important}#dashboard_primary .inside .notice,body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form p{margin-top:0}.rssSummary{margin-top:4px}#dashboard_primary .rss-widget{font-size:13px;padding:0 12px}#dashboard_primary .rss-widget:last-child{border-bottom:none;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span.rss-date{margin-right:12px}#dashboard_primary .rss-widget ul li{padding:4px 0;margin:0}#dashboard_right_now ul{margin:0;display:inline-block;width:100%}#dashboard_right_now li{width:50%;float:right;margin-bottom:10px}#dashboard_right_now .inside{padding:0}#dashboard_right_now .main{padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{float:left;position:relative;top:-5px;margin-right:5px}.mu-storage{overflow:hidden}#dashboard-widgets h3.mu-storage{margin:0 0 10px;padding:0;font-size:14px;font-weight:400}#dashboard_right_now .sub{color:#555d66;background:#f5f5f5;padding:10px 12px 6px}#dashboard_right_now .sub h3{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_quick_press .drafts li time,#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#72777c}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 0 1px 1px}#dashboard_quick_press form{margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:right}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:none}#dashboard_quick_press .drafts .view-all{float:left;margin:0 0 0 12px}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{margin:0 0 0 5px}#dashboard-widgets h3,#dashboard-widgets h4,#dashboard_quick_press .drafts h2{margin:0 12px 8px;padding:0;font-size:14px;font-weight:400;color:#23282d}#dashboard_quick_press .drafts h2{line-height:inherit}#dashboard-widgets .inside h3,#dashboard-widgets .inside h4{margin-right:0;margin-left:0}#dashboard_activity .comment-meta span.approve:before{content:"\f227";font:20px/.5 dashicons;margin-right:5px;vertical-align:middle;position:relative;top:-1px;margin-left:2px}#dashboard_activity .inside{margin:0;padding-bottom:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 0 12px;text-align:center}#dashboard_activity .no-activity p{color:#72777c;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:"\f328";font:400 120px/1 dashicons;speak:none;display:block;margin:0 0 0 5px;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}#dashboard_activity .subsubsub a .count,#dashboard_activity .subsubsub a.current .count{color:#72777c}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{margin-bottom:8px}#future-posts ul span,#published-posts ul span{display:inline-block;margin-left:5px;min-width:150px;color:#72777c}.activity-block{border-bottom:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}.activity-block:last-child{border-bottom:none}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list div.undo,#activity-widget #the-comment-list tr.undo{background:0 0;padding:6px 0;margin-right:12px}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list .avatar{position:absolute;top:12px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-right:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved{background-color:#fef7f1}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;right:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.postbox .button-link .edit-box{display:none}.edit-box{opacity:0}.edit-box:focus,.hndle:hover .edit-box{opacity:1}#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:none}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets .button-link,#dashboard-widgets a{text-decoration:none}#dashboard-widgets h2 a,#dashboard_browser_nag a{text-decoration:underline}#dashboard-widgets .hndle .postbox-title-action{float:left;line-height:1.2}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative;margin:0 -12px}#activity-widget #the-comment-list .comment,#activity-widget #the-comment-list .pingback{box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}#activity-widget #latest-comments #the-comment-list .comment-item{min-height:50px;margin:0;padding:12px}#latest-comments #the-comment-list .pingback{padding-right:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:none}#latest-comments #the-comment-list .comment-meta{line-height:1.5em;margin:0;color:#666}#latest-comments #the-comment-list .comment-meta cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#description-wrap label,#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:13px;font-weight:600;line-height:1.4em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#72777c;font-size:13px;margin-right:3px}.rss-widget cite{display:block;text-align:left;margin:0 0 1em;padding:0}.rss-widget cite:before{content:"\2014"}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-left:125px}#dashboard_browser_nag .browser-icon{margin-top:-35px}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;color:#fff;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h2{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h2{border-bottom-color:#f6e2ac;background:0 0;color:#fff;box-shadow:none}#dashboard_browser_nag h2.hndle{border:none;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container,#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container:after,#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}.index-php .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left}#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-left:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}@media screen and (max-width:782px){#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 0 5px 10px}.community-events-toggle-location{height:38px;vertical-align:baseline}.community-events-form .regular-text{height:32px}#community-events-submit{margin-bottom:0;vertical-align:top}#dashboard-widgets .community-events-cancel.button-link,.community-events-form label{font-size:14px;line-height:normal;height:auto;padding:6px 0;border:1px solid transparent}.community-events .spinner{margin-top:7px}}@media screen and (max-width:600px){.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:40px;white-space:nowrap;width:20px;height:20px;padding:5px;top:5px;left:5px}.welcome-panel .welcome-panel-close:before{font-size:20px;top:5px;right:-35px}}@media screen and (min-width:355px){.community-events .event-info{display:table-row;float:right;max-width:59%}.event-icon,.event-icon[aria-hidden=true],.event-info-inner{display:table-cell}.community-events .event-date-time{float:left;max-width:39%}.community-events .event-date,.community-events .event-time{text-align:left}}
\ No newline at end of file
+#dashboard_quick_press .draft-title,#the-comment-list td.comment,.dashboard-comment-wrap{word-wrap:break-word}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:left;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:left}#dashboard-widgets .postbox-container,#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:none!important}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets-wrap{overflow:hidden;margin:0 -8px}#dashboard-widgets .postbox .inside{margin-bottom:0}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}#the-comment-list td.comment p.comment-author{margin-top:0;margin-right:0}#the-comment-list p.comment-author img{float:right;margin-left:8px}#the-comment-list p.comment-author strong a{border:none}#the-comment-list td{vertical-align:top}#the-comment-list td.comment img{max-width:100%}.try-gutenberg-panel,.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}.try-gutenberg-panel h2,.welcome-panel h2{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h3{margin:1.33em 0 0;font-size:16px}.try-gutenberg-panel h3{margin:17px 0 0;font-size:16px;line-height:1.4}.try-gutenberg-panel li,.welcome-panel li{font-size:14px}.try-gutenberg-panel p,.welcome-panel p{color:#72777c}.try-gutenberg-action a,.welcome-panel a{text-decoration:none}.try-gutenberg-panel .about-description,.welcome-panel .about-description{font-size:16px;margin:0}.try-gutenberg-panel-content hr{margin:20px -23px 0;border-top:1px solid #f3f4f5;border-bottom:none}.try-gutenberg-panel .try-gutenberg-panel-close,.welcome-panel .welcome-panel-close{position:absolute;z-index:10;top:10px;left:10px;padding:10px 21px 10px 15px;font-size:13px;line-height:1.23076923;text-decoration:none}.try-gutenberg-panel .try-gutenberg-panel-close:before,.welcome-panel .welcome-panel-close:before{position:absolute;top:8px;right:0;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 0 3px 13px;padding:12px 36px;height:auto;line-height:1.4285714;white-space:normal}.try-gutenberg-panel-content,.welcome-panel-content{margin:0 13px;max-width:1500px}.try-gutenberg-panel img{margin-top:23px;width:calc(100% - 40px);border:1px solid #f3f4f5}#dashboard_right_now .sub,.community-events li:first-child,.community-events li~li,.community-events-footer{border-top:1px solid #eee}.try-gutenberg-panel .install-now.updated-message:before,.try-gutenberg-panel .install-now.updating-message:before{margin-top:11px}.welcome-panel .welcome-panel-column-container{clear:both;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:right}.try-gutenberg-panel .try-gutenberg-panel-column>*{padding-left:40px}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.try-gutenberg-panel .try-gutenberg-panel-column-container{display:-ms-grid;display:grid;-ms-grid-columns:36% 32% 32%;grid-template-columns:36% 32% 32%;margin-bottom:13px}.try-gutenberg-panel .try-gutenberg-panel-column:not(.try-gutenberg-panel-image-column){display:-ms-grid;display:grid;-ms-grid-rows:auto 100px;grid-template-rows:auto 100px}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.try-gutenberg-panel-column p,.welcome-panel-column p{margin-top:7px;color:#444}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 0 1em 1em}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none;padding:0 0 8px}.welcome-panel .welcome-icon{background:0 0!important}#dashboard_right_now li a:before,#dashboard_right_now li span:before,.welcome-panel .welcome-icon:before{color:#82878c;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 0 0 10px;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-edit-page:before,.welcome-panel .welcome-write-blog:before{content:"\f119";top:-3px}.welcome-panel .welcome-add-page:before{content:"\f132";top:-1px}.welcome-panel .welcome-view-site:before{content:"\f115";top:-2px}.welcome-panel .welcome-widgets-menus:before{content:"\f116";top:-2px}.welcome-panel .welcome-comments:before{content:"\f117";top:-1px}.welcome-panel .welcome-learn-more:before{content:"\f118";top:-1px}#dashboard_right_now li a:before,#dashboard_right_now li>span:before{content:"\f159";padding:0 0 0 5px}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:"\f105"}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:"\f109"}#dashboard_right_now .comment-count a:before{content:"\f101"}#dashboard_right_now .comment-mod-count a:before{content:"\f125"}#dashboard_right_now .storage-count a:before{content:"\f104"}#dashboard_right_now .storage-count.warning a:before{content:"\f153"}.community-events-errors{margin:0}.community-events-loading{padding:10px 12px 8px}.community-events{margin-bottom:6px;padding:0 12px}.community-events .spinner{float:none;margin:5px 2px 0;vertical-align:top}.community-events [aria-hidden=true],.community-events-errors [aria-hidden=true],.community-events-errors[aria-hidden=true],.community-events-loading[aria-hidden=true],.community-events[aria-hidden=true]{display:none}.community-events .activity-block:first-child,.community-events h2{padding-top:12px;padding-bottom:10px}.community-events-form{margin:15px 0 5px}.community-events-form .regular-text{width:40%;height:29px;margin:0;vertical-align:top}.community-events li.event-none{border-right:4px solid #00a0d2}.community-events-form label{display:inline-block;vertical-align:top;line-height:28px;height:28px}.community-events .activity-block>p{margin-bottom:0;display:inline}.community-events-toggle-location{vertical-align:middle}#community-events-submit{margin-right:3px;margin-left:3px}#dashboard-widgets .community-events-cancel.button-link{vertical-align:top;line-height:26px;height:28px;text-decoration:underline}.community-events ul{background-color:#fafafa;padding-right:0;padding-left:0;padding-bottom:0}.community-events li{margin:0;padding:8px 12px;color:#72777c}.community-events .activity-block.last{border-bottom:1px solid #eee;padding-top:0;margin-top:-1px}.community-events .event-info{display:block}.event-icon{height:18px;padding-left:10px;width:18px;display:none}.event-icon:before{color:#82878C;font-size:18px}.event-meetup .event-icon:before{content:"\f484"}.event-wordcamp .event-icon:before{content:"\f486"}.community-events .event-title{font-weight:600;display:block}.community-events .event-date,.community-events .event-time{display:block}.community-events-footer{margin-top:0;margin-bottom:0;padding:12px;color:#ddd}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date,.rssSummary{color:#72777c}.community-events-footer .screen-reader-text{height:inherit;white-space:nowrap}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .widget-loading{padding:12px 12px 0;margin-bottom:1em!important}#dashboard_primary .inside .notice,body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form p{margin-top:0}.rssSummary{margin-top:4px}#dashboard_primary .rss-widget{font-size:13px;padding:0 12px}#dashboard_primary .rss-widget:last-child{border-bottom:none;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span.rss-date{margin-right:12px}#dashboard_primary .rss-widget ul li{padding:4px 0;margin:0}#dashboard_right_now ul{margin:0;display:inline-block;width:100%}#dashboard_right_now li{width:50%;float:right;margin-bottom:10px}#dashboard_right_now .inside{padding:0}#dashboard_right_now .main{padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{float:left;position:relative;top:-5px;margin-right:5px}.mu-storage{overflow:hidden}#dashboard-widgets h3.mu-storage{margin:0 0 10px;padding:0;font-size:14px;font-weight:400}#dashboard_right_now .sub{color:#555d66;background:#f5f5f5;padding:10px 12px 6px}#dashboard_right_now .sub h3{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_quick_press .drafts li time,#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#72777c}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 0 1px 1px}#dashboard_quick_press form{margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:right}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:none}#dashboard_quick_press .drafts .view-all{float:left;margin:0 0 0 12px}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{margin:0 0 0 5px}#dashboard-widgets h3,#dashboard-widgets h4,#dashboard_quick_press .drafts h2{margin:0 12px 8px;padding:0;font-size:14px;font-weight:400;color:#23282d}#dashboard_quick_press .drafts h2{line-height:inherit}#dashboard-widgets .inside h3,#dashboard-widgets .inside h4{margin-right:0;margin-left:0}#dashboard_activity .comment-meta span.approve:before{content:"\f227";font:20px/.5 dashicons;margin-right:5px;vertical-align:middle;position:relative;top:-1px;margin-left:2px}#dashboard_activity .inside{margin:0;padding-bottom:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 0 12px;text-align:center}#dashboard_activity .no-activity p{color:#72777c;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:"\f328";font:400 120px/1 dashicons;speak:none;display:block;margin:0 0 0 5px;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}#dashboard_activity .subsubsub a .count,#dashboard_activity .subsubsub a.current .count{color:#72777c}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{margin-bottom:8px}#future-posts ul span,#published-posts ul span{display:inline-block;margin-left:5px;min-width:150px;color:#72777c}.activity-block{border-bottom:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}.activity-block:last-child{border-bottom:none}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list div.undo,#activity-widget #the-comment-list tr.undo{background:0 0;padding:6px 0;margin-right:12px}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list .avatar{position:absolute;top:12px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-right:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved{background-color:#fef7f1}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;right:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.postbox .button-link .edit-box{display:none}.edit-box{opacity:0}.edit-box:focus,.hndle:hover .edit-box{opacity:1}#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:none}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets .button-link,#dashboard-widgets a{text-decoration:none}#dashboard-widgets h2 a,#dashboard_browser_nag a{text-decoration:underline}#dashboard-widgets .hndle .postbox-title-action{float:left;line-height:1.2}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative;margin:0 -12px}#activity-widget #the-comment-list .comment,#activity-widget #the-comment-list .pingback{box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}#activity-widget #latest-comments #the-comment-list .comment-item{min-height:50px;margin:0;padding:12px}#latest-comments #the-comment-list .pingback{padding-right:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:none}#latest-comments #the-comment-list .comment-meta{line-height:1.5em;margin:0;color:#666}#latest-comments #the-comment-list .comment-meta cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#description-wrap label,#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:13px;font-weight:600;line-height:1.4em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#72777c;font-size:13px;margin-right:3px}.rss-widget cite{display:block;text-align:left;margin:0 0 1em;padding:0}.rss-widget cite:before{content:"\2014"}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-left:125px}#dashboard_browser_nag .browser-icon{margin-top:-35px}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;color:#fff;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h2{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h2{border-bottom-color:#f6e2ac;background:0 0;color:#fff;box-shadow:none}#dashboard_browser_nag h2.hndle{border:none;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container,#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container:after,#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}.index-php .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:left}#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@media screen and (max-width:1024px){.try-gutenberg-panel .try-gutenberg-panel-column-container{-ms-grid-columns:50% 50%;grid-template-columns:50% 50%}.try-gutenberg-panel .try-gutenberg-panel-image-column{display:none}}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.try-gutenberg-panel .try-gutenberg-panel-column-container{-ms-grid-columns:100%;grid-template-columns:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-left:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}@media screen and (max-width:782px){#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 0 5px 10px}.community-events-toggle-location{height:38px;vertical-align:baseline}.community-events-form .regular-text{height:32px}#community-events-submit{margin-bottom:0;vertical-align:top}#dashboard-widgets .community-events-cancel.button-link,.community-events-form label{font-size:14px;line-height:normal;height:auto;padding:6px 0;border:1px solid transparent}.community-events .spinner{margin-top:7px}}@media screen and (max-width:600px){.try-gutenberg-panel .try-gutenberg-panel-close,.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:40px;white-space:nowrap;width:20px;height:20px;padding:5px;top:5px;left:5px}.try-gutenberg-panel .try-gutenberg-panel-close:before,.welcome-panel .welcome-panel-close:before{font-size:20px;top:5px;right:-35px}}@media screen and (min-width:355px){.community-events .event-info{display:table-row;float:right;max-width:59%}.event-icon,.event-icon[aria-hidden=true],.event-info-inner{display:table-cell}.community-events .event-date-time{float:left;max-width:39%}.community-events .event-date,.community-events .event-time{text-align:left}}
\ No newline at end of file
}
/* Welcome Panel */
-.welcome-panel {
+.welcome-panel,
+.try-gutenberg-panel {
position: relative;
overflow: auto;
margin: 16px 0;
line-height: 2.1em;
}
-.welcome-panel h2 {
+.welcome-panel h2,
+.try-gutenberg-panel h2 {
margin: 0;
font-size: 21px;
font-weight: 400;
font-size: 16px;
}
-.welcome-panel li {
+.try-gutenberg-panel h3 {
+ margin: 17px 0 0;
+ font-size: 16px;
+ line-height: 1.4;
+}
+
+.welcome-panel li,
+.try-gutenberg-panel li {
font-size: 14px;
}
-.welcome-panel p {
+.welcome-panel p,
+.try-gutenberg-panel p {
color: #72777c;
}
-.welcome-panel a {
+.welcome-panel a,
+.try-gutenberg-action a {
text-decoration: none;
}
-.welcome-panel .about-description {
+.welcome-panel .about-description,
+.try-gutenberg-panel .about-description {
font-size: 16px;
margin: 0;
}
-.welcome-panel .welcome-panel-close {
+.try-gutenberg-panel-content hr {
+ margin: 20px -23px 0 -23px;
+ border-top: 1px solid #f3f4f5;
+ border-bottom: none;
+}
+
+.welcome-panel .welcome-panel-close,
+.try-gutenberg-panel .try-gutenberg-panel-close {
position: absolute;
+ z-index: 10;
top: 10px;
right: 10px;
padding: 10px 15px 10px 21px;
text-decoration: none;
}
-.welcome-panel .welcome-panel-close:before {
+.welcome-panel .welcome-panel-close:before,
+.try-gutenberg-panel .try-gutenberg-panel-close:before {
position: absolute;
top: 8px;
left: 0;
white-space: normal;
}
-.welcome-panel-content {
- margin-left: 13px;
+.welcome-panel-content,
+.try-gutenberg-panel-content {
+ margin: 0 13px;
max-width: 1500px;
}
+.try-gutenberg-panel img {
+ margin-top: 23px;
+ width: calc( 100% - 40px );
+ border: 1px solid #f3f4f5;
+}
+
+.try-gutenberg-panel .install-now.updating-message:before,
+.try-gutenberg-panel .install-now.updated-message:before {
+ margin-top: 11px;
+}
+
.welcome-panel .welcome-panel-column-container {
clear: both;
position: relative;
float: left;
}
+.try-gutenberg-panel .try-gutenberg-panel-column > * {
+ padding-right: 40px;
+}
+
.ie8 .welcome-panel .welcome-panel-column {
min-width: 230px;
}
width: 36%;
}
+.try-gutenberg-panel .try-gutenberg-panel-column-container {
+ display: -ms-grid;
+ display: grid;
+ -ms-grid-columns: 36% 32% 32%;
+ grid-template-columns: 36% 32% 32%;
+ margin-bottom: 13px;
+}
+
+.try-gutenberg-panel .try-gutenberg-panel-column:not(.try-gutenberg-panel-image-column) {
+ display: -ms-grid;
+ display: grid;
+ -ms-grid-rows: auto 100px;
+ grid-template-rows: auto 100px;
+}
+
.welcome-panel-column p.hide-if-no-customize {
margin-top: 10px;
}
-.welcome-panel-column p {
+.welcome-panel-column p,
+.try-gutenberg-panel-column p {
margin-top: 7px;
color: #444;
}
}
.welcome-panel .welcome-panel-column ul {
- margin: 0.8em 1em 1em 0;
+ margin: 0.8em 1em 1em 0;
}
.welcome-panel .welcome-panel-column li {
}
}
+@media screen and (max-width: 1024px) {
+ .try-gutenberg-panel .try-gutenberg-panel-column-container {
+ -ms-grid-columns: 50% 50%;
+ grid-template-columns: 50% 50%;
+ }
+
+ .try-gutenberg-panel .try-gutenberg-panel-image-column {
+ display: none;
+ }
+}
+
@media screen and (max-width: 870px) {
.welcome-panel .welcome-panel-column,
.welcome-panel .welcome-panel-column:first-child {
width: 100%;
}
+ .try-gutenberg-panel .try-gutenberg-panel-column-container {
+ -ms-grid-columns: 100%;
+ grid-template-columns: 100%;
+ }
+
.welcome-panel .welcome-panel-column li {
display: inline-block;
margin-right: 13px;
.welcome-panel .welcome-panel-column ul {
margin: 0.4em 0 0;
}
-
}
@media screen and ( max-width: 782px ) {
/* Smartphone */
@media screen and (max-width: 600px) {
/* Keep the close icon from overlapping the Welcome text. */
- .welcome-panel .welcome-panel-close {
+ .welcome-panel .welcome-panel-close,
+ .try-gutenberg-panel .try-gutenberg-panel-close {
overflow: hidden;
text-indent: 40px;
white-space: nowrap;
}
/* Make the close icon larger for tappability. */
- .welcome-panel .welcome-panel-close:before {
+ .welcome-panel .welcome-panel-close:before,
+ .try-gutenberg-panel .try-gutenberg-panel-close:before {
font-size: 20px;
top: 5px;
left: -35px;
/*! This file is auto-generated */
-#dashboard_quick_press .draft-title,#the-comment-list td.comment,.dashboard-comment-wrap{word-wrap:break-word}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:right;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:right}#dashboard-widgets .postbox-container,#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:none!important}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets-wrap{overflow:hidden;margin:0 -8px}#dashboard-widgets .postbox .inside{margin-bottom:0}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}#the-comment-list td.comment p.comment-author{margin-top:0;margin-left:0}#the-comment-list p.comment-author img{float:left;margin-right:8px}#the-comment-list p.comment-author strong a{border:none}#the-comment-list td{vertical-align:top}#the-comment-list td.comment img{max-width:100%}.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}#dashboard_right_now .sub,.community-events li:first-child,.community-events li~li,.community-events-footer{border-top:1px solid #eee}.welcome-panel h2{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h3{margin:1.33em 0 0;font-size:16px}.welcome-panel li{font-size:14px}.welcome-panel p{color:#72777c}.welcome-panel a{text-decoration:none}.welcome-panel .about-description{font-size:16px;margin:0}.welcome-panel .welcome-panel-close{position:absolute;top:10px;right:10px;padding:10px 15px 10px 21px;font-size:13px;line-height:1.23076923;text-decoration:none}.welcome-panel .welcome-panel-close:before{position:absolute;top:8px;left:0;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 13px 3px 0;padding:12px 36px;height:auto;line-height:1.4285714;white-space:normal}.welcome-panel-content{margin-left:13px;max-width:1500px}.welcome-panel .welcome-panel-column-container{clear:both;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:left}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.welcome-panel-column p{margin-top:7px;color:#444}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 1em 1em 0}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none;padding:0 0 8px}.welcome-panel .welcome-icon{background:0 0!important}#dashboard_right_now li a:before,#dashboard_right_now li span:before,.welcome-panel .welcome-icon:before{color:#82878c;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 10px 0 0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-edit-page:before,.welcome-panel .welcome-write-blog:before{content:"\f119";top:-3px}.welcome-panel .welcome-add-page:before{content:"\f132";top:-1px}.welcome-panel .welcome-view-site:before{content:"\f115";top:-2px}.welcome-panel .welcome-widgets-menus:before{content:"\f116";top:-2px}.welcome-panel .welcome-comments:before{content:"\f117";top:-1px}.welcome-panel .welcome-learn-more:before{content:"\f118";top:-1px}#dashboard_right_now li a:before,#dashboard_right_now li>span:before{content:"\f159";padding:0 5px 0 0}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:"\f105"}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:"\f109"}#dashboard_right_now .comment-count a:before{content:"\f101"}#dashboard_right_now .comment-mod-count a:before{content:"\f125"}#dashboard_right_now .storage-count a:before{content:"\f104"}#dashboard_right_now .storage-count.warning a:before{content:"\f153"}.community-events-errors{margin:0}.community-events-loading{padding:10px 12px 8px}.community-events{margin-bottom:6px;padding:0 12px}.community-events .spinner{float:none;margin:5px 2px 0;vertical-align:top}.community-events [aria-hidden=true],.community-events-errors [aria-hidden=true],.community-events-errors[aria-hidden=true],.community-events-loading[aria-hidden=true],.community-events[aria-hidden=true]{display:none}.community-events .activity-block:first-child,.community-events h2{padding-top:12px;padding-bottom:10px}.community-events-form{margin:15px 0 5px}.community-events-form .regular-text{width:40%;height:29px;margin:0;vertical-align:top}.community-events li.event-none{border-left:4px solid #00a0d2}.community-events-form label{display:inline-block;vertical-align:top;line-height:28px;height:28px}.community-events .activity-block>p{margin-bottom:0;display:inline}.community-events-toggle-location{vertical-align:middle}#community-events-submit{margin-left:3px;margin-right:3px}#dashboard-widgets .community-events-cancel.button-link{vertical-align:top;line-height:26px;height:28px;text-decoration:underline}.community-events ul{background-color:#fafafa;padding-left:0;padding-right:0;padding-bottom:0}.community-events li{margin:0;padding:8px 12px;color:#72777c}.community-events .activity-block.last{border-bottom:1px solid #eee;padding-top:0;margin-top:-1px}.community-events .event-info{display:block}.event-icon{height:18px;padding-right:10px;width:18px;display:none}.event-icon:before{color:#82878C;font-size:18px}.event-meetup .event-icon:before{content:"\f484"}.event-wordcamp .event-icon:before{content:"\f486"}.community-events .event-title{font-weight:600;display:block}.community-events .event-date,.community-events .event-time{display:block}.community-events-footer{margin-top:0;margin-bottom:0;padding:12px;color:#ddd}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date,.rssSummary{color:#72777c}.community-events-footer .screen-reader-text{height:inherit;white-space:nowrap}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .widget-loading{padding:12px 12px 0;margin-bottom:1em!important}#dashboard_primary .inside .notice,body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form p{margin-top:0}.rssSummary{margin-top:4px}#dashboard_primary .rss-widget{font-size:13px;padding:0 12px}#dashboard_primary .rss-widget:last-child{border-bottom:none;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span.rss-date{margin-left:12px}#dashboard_primary .rss-widget ul li{padding:4px 0;margin:0}#dashboard_right_now ul{margin:0;display:inline-block;width:100%}#dashboard_right_now li{width:50%;float:left;margin-bottom:10px}#dashboard_right_now .inside{padding:0}#dashboard_right_now .main{padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{float:right;position:relative;top:-5px;margin-left:5px}.mu-storage{overflow:hidden}#dashboard-widgets h3.mu-storage{margin:0 0 10px;padding:0;font-size:14px;font-weight:400}#dashboard_right_now .sub{color:#555d66;background:#f5f5f5;padding:10px 12px 6px}#dashboard_right_now .sub h3{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_quick_press .drafts li time,#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#72777c}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 1px 1px 0}#dashboard_quick_press form{margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:left}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:none}#dashboard_quick_press .drafts .view-all{float:right;margin:0 12px 0 0}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{margin:0 5px 0 0}#dashboard-widgets h3,#dashboard-widgets h4,#dashboard_quick_press .drafts h2{margin:0 12px 8px;padding:0;font-size:14px;font-weight:400;color:#23282d}#dashboard_quick_press .drafts h2{line-height:inherit}#dashboard-widgets .inside h3,#dashboard-widgets .inside h4{margin-left:0;margin-right:0}#dashboard_activity .comment-meta span.approve:before{content:"\f227";font:20px/.5 dashicons;margin-left:5px;vertical-align:middle;position:relative;top:-1px;margin-right:2px}#dashboard_activity .inside{margin:0;padding-bottom:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 0 12px;text-align:center}#dashboard_activity .no-activity p{color:#72777c;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:"\f328";font:400 120px/1 dashicons;speak:none;display:block;margin:0 5px 0 0;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}#dashboard_activity .subsubsub a .count,#dashboard_activity .subsubsub a.current .count{color:#72777c}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{margin-bottom:8px}#future-posts ul span,#published-posts ul span{display:inline-block;margin-right:5px;min-width:150px;color:#72777c}.activity-block{border-bottom:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}.activity-block:last-child{border-bottom:none}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list div.undo,#activity-widget #the-comment-list tr.undo{background:0 0;padding:6px 0;margin-left:12px}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list .avatar{position:absolute;top:12px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-left:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved{background-color:#fef7f1}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;left:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.postbox .button-link .edit-box{display:none}.edit-box{opacity:0}.edit-box:focus,.hndle:hover .edit-box{opacity:1}#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:none}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets .button-link,#dashboard-widgets a{text-decoration:none}#dashboard-widgets h2 a,#dashboard_browser_nag a{text-decoration:underline}#dashboard-widgets .hndle .postbox-title-action{float:right;line-height:1.2}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative;margin:0 -12px}#activity-widget #the-comment-list .comment,#activity-widget #the-comment-list .pingback{box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}#activity-widget #latest-comments #the-comment-list .comment-item{min-height:50px;margin:0;padding:12px}#latest-comments #the-comment-list .pingback{padding-left:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:none}#latest-comments #the-comment-list .comment-meta{line-height:1.5em;margin:0;color:#666}#latest-comments #the-comment-list .comment-meta cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#description-wrap label,#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:13px;font-weight:600;line-height:1.4em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#72777c;font-size:13px;margin-left:3px}.rss-widget cite{display:block;text-align:right;margin:0 0 1em;padding:0}.rss-widget cite:before{content:"\2014"}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-right:125px}#dashboard_browser_nag .browser-icon{margin-top:-35px}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;color:#fff;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h2{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h2{border-bottom-color:#f6e2ac;background:0 0;color:#fff;box-shadow:none}#dashboard_browser_nag h2.hndle{border:none;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container,#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container:after,#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}.index-php .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right}#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-right:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}@media screen and (max-width:782px){#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 10px 5px 0}.community-events-toggle-location{height:38px;vertical-align:baseline}.community-events-form .regular-text{height:32px}#community-events-submit{margin-bottom:0;vertical-align:top}#dashboard-widgets .community-events-cancel.button-link,.community-events-form label{font-size:14px;line-height:normal;height:auto;padding:6px 0;border:1px solid transparent}.community-events .spinner{margin-top:7px}}@media screen and (max-width:600px){.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:40px;white-space:nowrap;width:20px;height:20px;padding:5px;top:5px;right:5px}.welcome-panel .welcome-panel-close:before{font-size:20px;top:5px;left:-35px}}@media screen and (min-width:355px){.community-events .event-info{display:table-row;float:left;max-width:59%}.event-icon,.event-icon[aria-hidden=true],.event-info-inner{display:table-cell}.community-events .event-date-time{float:right;max-width:39%}.community-events .event-date,.community-events .event-time{text-align:right}}
\ No newline at end of file
+#dashboard_quick_press .draft-title,#the-comment-list td.comment,.dashboard-comment-wrap{word-wrap:break-word}#wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}#wpbody-content #dashboard-widgets.columns-2 .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets.columns-2 #postbox-container-2,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-2 #postbox-container-4{float:right;width:50.5%}#wpbody-content #dashboard-widgets.columns-3 .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets.columns-3 #postbox-container-3,#wpbody-content #dashboard-widgets.columns-3 #postbox-container-4{float:right}#dashboard-widgets .postbox-container,#wpbody-content #dashboard-widgets.columns-4 .postbox-container{width:25%}#dashboard-widgets-wrap .columns-3 #postbox-container-4 .empty-container{border:none!important}.ie8 #wpbody-content #dashboard-widgets .postbox-container{width:49.5%}.ie8 #wpbody-content #dashboard-widgets #postbox-container-2,.ie8 #wpbody-content #dashboard-widgets #postbox-container-3,.ie8 #wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}.ie8 #dashboard-widgets #postbox-container-3 .empty-container,.ie8 #dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets-wrap{overflow:hidden;margin:0 -8px}#dashboard-widgets .postbox .inside{margin-bottom:0}#dashboard-widgets .meta-box-sortables{margin:0 8px;min-height:100px}#the-comment-list td.comment p.comment-author{margin-top:0;margin-left:0}#the-comment-list p.comment-author img{float:left;margin-right:8px}#the-comment-list p.comment-author strong a{border:none}#the-comment-list td{vertical-align:top}#the-comment-list td.comment img{max-width:100%}.try-gutenberg-panel,.welcome-panel{position:relative;overflow:auto;margin:16px 0;padding:23px 10px 0;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff;font-size:13px;line-height:2.1em}.try-gutenberg-panel h2,.welcome-panel h2{margin:0;font-size:21px;font-weight:400;line-height:1.2}.welcome-panel h3{margin:1.33em 0 0;font-size:16px}.try-gutenberg-panel h3{margin:17px 0 0;font-size:16px;line-height:1.4}.try-gutenberg-panel li,.welcome-panel li{font-size:14px}.try-gutenberg-panel p,.welcome-panel p{color:#72777c}.try-gutenberg-action a,.welcome-panel a{text-decoration:none}.try-gutenberg-panel .about-description,.welcome-panel .about-description{font-size:16px;margin:0}.try-gutenberg-panel-content hr{margin:20px -23px 0;border-top:1px solid #f3f4f5;border-bottom:none}.try-gutenberg-panel .try-gutenberg-panel-close,.welcome-panel .welcome-panel-close{position:absolute;z-index:10;top:10px;right:10px;padding:10px 15px 10px 21px;font-size:13px;line-height:1.23076923;text-decoration:none}.try-gutenberg-panel .try-gutenberg-panel-close:before,.welcome-panel .welcome-panel-close:before{position:absolute;top:8px;left:0;transition:all .1s ease-in-out}.wp-core-ui .welcome-panel .button.button-hero{margin:15px 13px 3px 0;padding:12px 36px;height:auto;line-height:1.4285714;white-space:normal}.try-gutenberg-panel-content,.welcome-panel-content{margin:0 13px;max-width:1500px}.try-gutenberg-panel img{margin-top:23px;width:calc(100% - 40px);border:1px solid #f3f4f5}#dashboard_right_now .sub,.community-events li:first-child,.community-events li~li,.community-events-footer{border-top:1px solid #eee}.try-gutenberg-panel .install-now.updated-message:before,.try-gutenberg-panel .install-now.updating-message:before{margin-top:11px}.welcome-panel .welcome-panel-column-container{clear:both;position:relative}.welcome-panel .welcome-panel-column{width:32%;min-width:200px;float:left}.try-gutenberg-panel .try-gutenberg-panel-column>*{padding-right:40px}.ie8 .welcome-panel .welcome-panel-column{min-width:230px}.welcome-panel .welcome-panel-column:first-child{width:36%}.try-gutenberg-panel .try-gutenberg-panel-column-container{display:-ms-grid;display:grid;-ms-grid-columns:36% 32% 32%;grid-template-columns:36% 32% 32%;margin-bottom:13px}.try-gutenberg-panel .try-gutenberg-panel-column:not(.try-gutenberg-panel-image-column){display:-ms-grid;display:grid;-ms-grid-rows:auto 100px;grid-template-rows:auto 100px}.welcome-panel-column p.hide-if-no-customize{margin-top:10px}.try-gutenberg-panel-column p,.welcome-panel-column p{margin-top:7px;color:#444}.welcome-panel .welcome-widgets-menus{line-height:16px}.welcome-panel .welcome-panel-column ul{margin:.8em 1em 1em 0}.welcome-panel .welcome-panel-column li{line-height:16px;list-style-type:none;padding:0 0 8px}.welcome-panel .welcome-icon{background:0 0!important}#dashboard_right_now li a:before,#dashboard_right_now li span:before,.welcome-panel .welcome-icon:before{color:#82878c;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:0 10px 0 0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important;vertical-align:top}.welcome-panel .welcome-edit-page:before,.welcome-panel .welcome-write-blog:before{content:"\f119";top:-3px}.welcome-panel .welcome-add-page:before{content:"\f132";top:-1px}.welcome-panel .welcome-view-site:before{content:"\f115";top:-2px}.welcome-panel .welcome-widgets-menus:before{content:"\f116";top:-2px}.welcome-panel .welcome-comments:before{content:"\f117";top:-1px}.welcome-panel .welcome-learn-more:before{content:"\f118";top:-1px}#dashboard_right_now li a:before,#dashboard_right_now li>span:before{content:"\f159";padding:0 5px 0 0}#dashboard_right_now .page-count a:before,#dashboard_right_now .page-count span:before{content:"\f105"}#dashboard_right_now .post-count a:before,#dashboard_right_now .post-count span:before{content:"\f109"}#dashboard_right_now .comment-count a:before{content:"\f101"}#dashboard_right_now .comment-mod-count a:before{content:"\f125"}#dashboard_right_now .storage-count a:before{content:"\f104"}#dashboard_right_now .storage-count.warning a:before{content:"\f153"}.community-events-errors{margin:0}.community-events-loading{padding:10px 12px 8px}.community-events{margin-bottom:6px;padding:0 12px}.community-events .spinner{float:none;margin:5px 2px 0;vertical-align:top}.community-events [aria-hidden=true],.community-events-errors [aria-hidden=true],.community-events-errors[aria-hidden=true],.community-events-loading[aria-hidden=true],.community-events[aria-hidden=true]{display:none}.community-events .activity-block:first-child,.community-events h2{padding-top:12px;padding-bottom:10px}.community-events-form{margin:15px 0 5px}.community-events-form .regular-text{width:40%;height:29px;margin:0;vertical-align:top}.community-events li.event-none{border-left:4px solid #00a0d2}.community-events-form label{display:inline-block;vertical-align:top;line-height:28px;height:28px}.community-events .activity-block>p{margin-bottom:0;display:inline}.community-events-toggle-location{vertical-align:middle}#community-events-submit{margin-left:3px;margin-right:3px}#dashboard-widgets .community-events-cancel.button-link{vertical-align:top;line-height:26px;height:28px;text-decoration:underline}.community-events ul{background-color:#fafafa;padding-left:0;padding-right:0;padding-bottom:0}.community-events li{margin:0;padding:8px 12px;color:#72777c}.community-events .activity-block.last{border-bottom:1px solid #eee;padding-top:0;margin-top:-1px}.community-events .event-info{display:block}.event-icon{height:18px;padding-right:10px;width:18px;display:none}.event-icon:before{color:#82878C;font-size:18px}.event-meetup .event-icon:before{content:"\f484"}.event-wordcamp .event-icon:before{content:"\f486"}.community-events .event-title{font-weight:600;display:block}.community-events .event-date,.community-events .event-time{display:block}.community-events-footer{margin-top:0;margin-bottom:0;padding:12px;color:#ddd}#dashboard_primary .rss-widget span,#dashboard_primary .rss-widget span.rss-date,.rssSummary{color:#72777c}.community-events-footer .screen-reader-text{height:inherit;white-space:nowrap}#dashboard_primary .inside{margin:0;padding:0}#dashboard_primary .widget-loading{padding:12px 12px 0;margin-bottom:1em!important}#dashboard_primary .inside .notice,body #dashboard-widgets .postbox form .submit{margin:0}.dashboard-widget-control-form p{margin-top:0}.rssSummary{margin-top:4px}#dashboard_primary .rss-widget{font-size:13px;padding:0 12px}#dashboard_primary .rss-widget:last-child{border-bottom:none;padding-bottom:8px}#dashboard_primary .rss-widget a{font-weight:400}#dashboard_primary .rss-widget span.rss-date{margin-left:12px}#dashboard_primary .rss-widget ul li{padding:4px 0;margin:0}#dashboard_right_now ul{margin:0;display:inline-block;width:100%}#dashboard_right_now li{width:50%;float:left;margin-bottom:10px}#dashboard_right_now .inside{padding:0}#dashboard_right_now .main{padding:0 12px 11px}#dashboard_right_now .main p{margin:0}#dashboard_right_now #wp-version-message .button{float:right;position:relative;top:-5px;margin-left:5px}.mu-storage{overflow:hidden}#dashboard-widgets h3.mu-storage{margin:0 0 10px;padding:0;font-size:14px;font-weight:400}#dashboard_right_now .sub{color:#555d66;background:#f5f5f5;padding:10px 12px 6px}#dashboard_right_now .sub h3{color:#555}#dashboard_right_now .sub p{margin:0 0 1em}#dashboard_right_now .warning a:before,#dashboard_right_now .warning span:before{color:#d54e21}#dashboard_quick_press .drafts li time,#title-wrap #title-prompt-text,.textarea-wrap #content-prompt-text{color:#72777c}#dashboard_quick_press .inside{margin:0;padding:0}#dashboard_quick_press div.updated{margin-bottom:10px;border:1px solid #eee;border-width:1px 1px 1px 0}#dashboard_quick_press form{margin:12px}#dashboard_quick_press .drafts,#dashboard_quick_press .easy-blogging{padding:10px 0 0}input#save-post{float:left}form.initial-form.quickpress-open label.prompt{font-style:normal}form.initial-form.quickpress-open input#title{height:auto}#dashboard_quick_press input,#dashboard_quick_press textarea{box-sizing:border-box;margin:0}#dashboard_quick_press textarea{resize:vertical}#description-wrap{margin-top:12px}.input-text-wrap,.textarea-wrap{position:relative}.input-text-wrap .prompt,.textarea-wrap .prompt{position:absolute}.textarea-wrap #content-prompt-text{font-size:1.1em;padding:7px 8px}.textarea-wrap textarea#content{margin:0 0 8px;padding:6px 7px}#quick-press textarea#content{min-height:90px;max-height:1300px;resize:none}.js #dashboard_quick_press .drafts{border-top:1px solid #eee}#dashboard_quick_press .drafts abbr{border:none}#dashboard_quick_press .drafts .view-all{float:right;margin:0 12px 0 0}#dashboard_primary a.rsswidget{font-weight:400}#dashboard_quick_press .drafts ul{margin:0 12px}#dashboard_quick_press .drafts li{margin-bottom:1em}#dashboard_quick_press .drafts p{margin:0;word-wrap:break-word}#dashboard_quick_press .draft-title a,#dashboard_quick_press .draft-title time{margin:0 5px 0 0}#dashboard-widgets h3,#dashboard-widgets h4,#dashboard_quick_press .drafts h2{margin:0 12px 8px;padding:0;font-size:14px;font-weight:400;color:#23282d}#dashboard_quick_press .drafts h2{line-height:inherit}#dashboard-widgets .inside h3,#dashboard-widgets .inside h4{margin-left:0;margin-right:0}#dashboard_activity .comment-meta span.approve:before{content:"\f227";font:20px/.5 dashicons;margin-left:5px;vertical-align:middle;position:relative;top:-1px;margin-right:2px}#dashboard_activity .inside{margin:0;padding-bottom:0}#dashboard_activity .no-activity{overflow:hidden;padding:0 0 12px;text-align:center}#dashboard_activity .no-activity p{color:#72777c;font-size:16px}#dashboard_activity .no-activity .smiley{margin-top:0}#dashboard_activity .no-activity .smiley:before{content:"\f328";font:400 120px/1 dashicons;speak:none;display:block;margin:0 5px 0 0;padding:0;text-indent:0;text-align:center;position:relative;-webkit-font-smoothing:antialiased;text-decoration:none!important}#dashboard_activity .subsubsub{float:none;border-top:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}#dashboard_activity .subsubsub a .count,#dashboard_activity .subsubsub a.current .count{color:#72777c}#future-posts ul,#published-posts ul{clear:both;margin-bottom:0}#future-posts li,#published-posts li{margin-bottom:8px}#future-posts ul span,#published-posts ul span{display:inline-block;margin-right:5px;min-width:150px;color:#72777c}.activity-block{border-bottom:1px solid #eee;margin:0 -12px;padding:8px 12px 4px}.activity-block:last-child{border-bottom:none}.activity-block .subsubsub li{color:#ddd}#activity-widget #the-comment-list div.undo,#activity-widget #the-comment-list tr.undo{background:0 0;padding:6px 0;margin-left:12px}#activity-widget #the-comment-list .comment-item{background:#fafafa;padding:12px;position:relative}#activity-widget #the-comment-list .avatar{position:absolute;top:12px}#activity-widget #the-comment-list .dashboard-comment-wrap{padding-left:63px}#activity-widget #the-comment-list .dashboard-comment-wrap blockquote{margin:1em 0}#activity-widget #the-comment-list .comment-item p.row-actions{margin:4px 0 0}#activity-widget #the-comment-list .comment-item:first-child{border-top:1px solid #eee}#activity-widget #the-comment-list .unapproved{background-color:#fef7f1}#activity-widget #the-comment-list .unapproved:before{content:"";display:block;position:absolute;left:0;top:0;bottom:0;background:#d54e21;width:4px}#activity-widget #the-comment-list .spam-undo-inside .avatar,#activity-widget #the-comment-list .trash-undo-inside .avatar{position:relative;top:0}#dashboard-widgets #dashboard_browser_nag.postbox .inside{margin:10px}.postbox .button-link .edit-box{display:none}.edit-box{opacity:0}.edit-box:focus,.hndle:hover .edit-box{opacity:1}#dashboard-widgets form .input-text-wrap input,#dashboard-widgets form .textarea-wrap textarea{width:100%}#dashboard-widgets .postbox form .submit{float:none;margin:.5em 0 0;padding:0;border:none}#dashboard-widgets-wrap #dashboard-widgets .postbox form .submit #publish{min-width:0}#dashboard-widgets .button-link,#dashboard-widgets a{text-decoration:none}#dashboard-widgets h2 a,#dashboard_browser_nag a{text-decoration:underline}#dashboard-widgets .hndle .postbox-title-action{float:right;line-height:1.2}#dashboard_plugins h5{font-size:14px}#latest-comments #the-comment-list{position:relative;margin:0 -12px}#activity-widget #the-comment-list .comment,#activity-widget #the-comment-list .pingback{box-shadow:inset 0 1px 0 rgba(0,0,0,.06)}#activity-widget .comments #the-comment-list .alt{background-color:transparent}#activity-widget #latest-comments #the-comment-list .comment-item{min-height:50px;margin:0;padding:12px}#latest-comments #the-comment-list .pingback{padding-left:12px!important}#latest-comments #the-comment-list .comment-item:first-child{border-top:none}#latest-comments #the-comment-list .comment-meta{line-height:1.5em;margin:0;color:#666}#latest-comments #the-comment-list .comment-meta cite{font-style:normal;font-weight:400}#latest-comments #the-comment-list .comment-item blockquote,#latest-comments #the-comment-list .comment-item blockquote p{margin:0;padding:0;display:inline}#latest-comments #the-comment-list .comment-item p.row-actions{margin:3px 0 0;padding:0;font-size:13px}#description-wrap label,#title-wrap label{cursor:text}#title-wrap #title{padding:2px 6px;font-size:1.3em;outline:0}#title-wrap #title-prompt-text{font-size:1.1em;padding:5px 8px}.rss-widget ul{margin:0;padding:0;list-style:none}a.rsswidget{font-size:13px;font-weight:600;line-height:1.4em}.rss-widget ul li{line-height:1.5em;margin-bottom:12px}.rss-widget span.rss-date{color:#72777c;font-size:13px;margin-left:3px}.rss-widget cite{display:block;text-align:right;margin:0 0 1em;padding:0}.rss-widget cite:before{content:"\2014"}#dashboard_browser_nag a.update-browser-link{font-size:1.2em;font-weight:600}#dashboard_browser_nag a{color:#fff}#dashboard_browser_nag p.browser-update-nag.has-browser-icon{padding-right:125px}#dashboard_browser_nag .browser-icon{margin-top:-35px}#dashboard_browser_nag.postbox.browser-insecure{background-color:#ac1b1b;border-color:#ac1b1b}#dashboard_browser_nag.postbox{background-color:#e29808;background-image:none;border-color:#edc048;color:#fff;box-shadow:none}#dashboard_browser_nag.postbox.browser-insecure h2{border-bottom-color:#cd5a5a;color:#fff}#dashboard_browser_nag.postbox h2{border-bottom-color:#f6e2ac;background:0 0;color:#fff;box-shadow:none}#dashboard_browser_nag h2.hndle{border:none;font-weight:600;font-size:20px;padding-top:10px}.postbox#dashboard_browser_nag p a.dismiss{font-size:14px}.postbox#dashboard_browser_nag a,.postbox#dashboard_browser_nag p,.postbox#dashboard_browser_nag p.browser-update-nag{font-size:16px}@media only screen and (max-width:799px){#wpbody-content #dashboard-widgets .postbox-container{width:100%}}@media only screen and (min-width:800px) and (max-width:1499px){#dashboard-widgets #postbox-container-3 .empty-container,#dashboard-widgets #postbox-container-4 .empty-container,#wpbody #wpbody-content .metabox-holder.columns-1 .postbox-container .empty-container{border:0;height:0;min-height:0}#wpbody-content #dashboard-widgets .postbox-container{width:49.5%}#wpbody-content #dashboard-widgets #postbox-container-2,#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right;width:50.5%}#dashboard-widgets #postbox-container-3 .empty-container:after,#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}#wpbody #wpbody-content #dashboard-widgets.columns-1 .postbox-container{width:100%}.index-php .columns-prefs,.index-php .screen-layout{display:block}.columns-prefs .columns-prefs-3,.columns-prefs .columns-prefs-4{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@media only screen and (min-width:1500px) and (max-width:1800px){#wpbody-content #dashboard-widgets .postbox-container{width:33.5%}#wpbody-content #dashboard-widgets #postbox-container-1{width:33%}#wpbody-content #dashboard-widgets #postbox-container-3,#wpbody-content #dashboard-widgets #postbox-container-4{float:right}#dashboard-widgets #postbox-container-4 .empty-container{border:0;height:0;min-height:0}#dashboard-widgets #postbox-container-4 .empty-container:after{display:none}.metabox-holder .postbox-container .empty-container:after{display:block}}@media screen and (max-width:1024px){.try-gutenberg-panel .try-gutenberg-panel-column-container{-ms-grid-columns:50% 50%;grid-template-columns:50% 50%}.try-gutenberg-panel .try-gutenberg-panel-image-column{display:none}}@media screen and (max-width:870px){.welcome-panel .welcome-panel-column,.welcome-panel .welcome-panel-column:first-child{display:block;float:none;width:100%}.try-gutenberg-panel .try-gutenberg-panel-column-container{-ms-grid-columns:100%;grid-template-columns:100%}.welcome-panel .welcome-panel-column li{display:inline-block;margin-right:13px}.welcome-panel .welcome-panel-column ul{margin:.4em 0 0}}@media screen and (max-width:782px){#dashboard_recent_comments #the-comment-list .comment-item .avatar{height:30px;width:30px;margin:4px 10px 5px 0}.community-events-toggle-location{height:38px;vertical-align:baseline}.community-events-form .regular-text{height:32px}#community-events-submit{margin-bottom:0;vertical-align:top}#dashboard-widgets .community-events-cancel.button-link,.community-events-form label{font-size:14px;line-height:normal;height:auto;padding:6px 0;border:1px solid transparent}.community-events .spinner{margin-top:7px}}@media screen and (max-width:600px){.try-gutenberg-panel .try-gutenberg-panel-close,.welcome-panel .welcome-panel-close{overflow:hidden;text-indent:40px;white-space:nowrap;width:20px;height:20px;padding:5px;top:5px;right:5px}.try-gutenberg-panel .try-gutenberg-panel-close:before,.welcome-panel .welcome-panel-close:before{font-size:20px;top:5px;left:-35px}}@media screen and (min-width:355px){.community-events .event-info{display:table-row;float:left;max-width:59%}.event-icon,.event-icon[aria-hidden=true],.event-info-inner{display:table-cell}.community-events .event-date-time{float:right;max-width:39%}.community-events .event-date,.community-events .event-time{text-align:right}}
\ No newline at end of file
margin-bottom: 20px;
}
+/* Suggested text for privacy policy */
+.wp-privacy-policy-guide {
+ max-width: 1000px;
+}
+
+.privacy-text-box {
+ width: calc(100% - 260px);
+}
+
+.privacy-text-box-toc {
+ float: left;
+ width: 250px;
+ background-color: #fff;
+}
+
+.privacy-text-box-toc p {
+ margin: 0;
+ padding: 0.7em 1em;
+ border-bottom: 1px solid #eee;
+}
+
+.privacy-text-box-toc ol {
+ margin-right: 2em;
+}
+
+.wp-privacy-policy-guide h3 {
+ font-size: 1.2em;
+ margin: 1em 0 0.5em;
+}
+
+.privacy-text-section .privacy-text-copy {
+ float: left;
+}
+
+.privacy-text-section {
+ position: relative;
+ border-top: 1px solid #e3e3e3;
+}
+
+.privacy-text-box-head,
+.privacy-text-section.text-removed {
+ padding-bottom: 12px;
+}
+
+.text-removed .policy-text {
+ font-style: italic;
+ color: #666;
+ font-weight: 600;
+}
+
+.privacy-text-actions {
+ height: 32px;
+ line-height: 32px;
+ padding-bottom: 6px;
+}
+
+.wp-privacy-policy-guide .policy-text h2 {
+ margin: 1.2em 0 1em;
+ padding: 0;
+}
+
+.suggested-policy-content {
+ font-style: italic;
+}
+
+.privacy-text-section a.return-to-top {
+ float: left;
+ margin-left: -250px;
+ margin-top: 6px;
+}
+
+.hide-privacy-policy-tutorial .privacy-policy-tutorial {
+ visibility: hidden;
+}
+
+.wp-suggested-text p {
+ font-style: italic;
+}
+
+.wp-suggested-text p.privacy-policy-tutorial {
+ font-style: normal;
+}
+
+.notice.wp-pp-notice {
+ margin: 15px 0 3px;
+}
+
/*------------------------------------------------------------------------------
11.1 - Custom Fields
------------------------------------------------------------------------------*/
.links-table td {
padding: 10px 0;
}
+
+ .privacy-text-box {
+ width: auto;
+ }
+
+ .privacy-text-box-toc {
+ float: none;
+ width: auto;
+ height: 100%;
+ }
+
+ .privacy-text-section a.return-to-top {
+ float: none;
+ margin: 0;
+ }
}
/*! This file is auto-generated */
-#pending,#poststuff #titlewrap{border:0;padding:0}#pending,#poststuff #post-body{padding:0}#editable-post-name-full,body.post-new-php .submitbox .submitdelete{display:none}#post-status-info,.postbox{box-shadow:0 1px 1px rgba(0,0,0,.04)}#titlediv,#wp-content-editor-container,.postbox,form#tags-filter{position:relative}#poststuff{padding-top:10px;min-width:763px}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-left:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments a{float:right}#show-comments .spinner{float:none;margin-top:0}#lost-connection-notice .spinner{visibility:visible;float:right;margin:0 0 0 5px}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0 0 3px;background-color:#fff}#titlediv #title-prompt-text{color:#72777c;position:absolute;font-size:1.7em;padding:11px 10px}input#link_description,input#link_url{width:98%}#pending{background:100% none;font-size:11px;margin-top:-1px}#comment-link-box,#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-left:10px;padding:0;font-size:11px}#comment-link-box{margin:5px 0;padding:0 5px}#editable-post-name{font-weight:600}#editable-post-name input{font-size:13px;font-weight:400;height:24px;margin:0;width:16em}.postarea h3 label{float:right}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-left:4px;padding:6px}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{min-width:255px;border:1px solid #e5e5e5;background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:0 0;border:0;float:left;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#32373c}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:0}.taxonomy-add-new{display:inline-block;margin:10px 0;font-weight:600}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:5px 7px 10px;overflow:hidden}#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border:0}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:1px solid transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #ddd;border-bottom-color:#fdfdfd;background-color:#fdfdfd}ul.add-menu-item-tabs li,ul.category-tabs li,ul.wp-tab-bar li{padding:3px 5px 6px}#set-post-thumbnail{display:inline-block;max-width:100%}.ui-tabs-hide,.wp-editor-expand #content-resize-handle,.wp-hidden-children .wp-hidden-child{display:none}#postimagediv .inside img{max-width:100%;height:auto;width:auto;vertical-align:top;background-image:linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:100% 0,10px 10px;background-size:20px 20px}#post-body .tagsdiv #newtag{margin-left:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:none;background-color:#f7f7f7;z-index:999}#post-status-info td{font-size:12px}.autosave-info{padding:2px 10px;text-align:left}#editorcontent #post-status-info{border:none}#content-resize-handle{background:url(../images/resize.gif) left bottom no-repeat;width:12px;cursor:row-resize}.rtl #content-resize-handle{background-image:url(../images/resize-rtl.gif);background-position:left bottom}#postdivrich #content{resize:none}#wp-word-count{display:block;padding:2px 10px}.wp-editor-expand #wp-content-editor-tools{z-index:1000;border-bottom:1px solid #e5e5e5}.wp-editor-expand #wp-content-editor-container{box-shadow:none;margin-top:-1px;border-bottom:0 none}.wp-editor-expand div.mce-statusbar{z-index:1}.wp-editor-expand #post-status-info{border-top:1px solid #e5e5e5}.wp-editor-expand div.mce-toolbar-grp{z-index:999}.mce-fullscreen #wp-content-wrap .mce-edit-area,.mce-fullscreen #wp-content-wrap .mce-menubar,.mce-fullscreen #wp-content-wrap .mce-statusbar,.mce-fullscreen #wp-content-wrap .mce-toolbar-grp{position:static!important;width:auto!important;padding:0!important}.mce-fullscreen #wp-content-wrap .mce-statusbar{visibility:visible!important}.mce-fullscreen #wp-content-wrap .mce-tinymce .mce-wp-dfw,.mce-fullscreen #wp-content-wrap .mce-wp-dfw,.post-php.mce-fullscreen #wpadminbar{display:none}#wp-content-editor-tools{background-color:#f1f1f1;padding-top:20px}#poststuff #post-body.columns-2 #side-sortables{width:280px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#hh,#jj,#mn{padding:1px;font-size:12px}#hh,#jj,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#82878c}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;margin-right:-1px;padding-left:3px;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#post-body .misc-pub-post-status:before{content:"\f173"}#post-body #visibility:before{content:"\f177"}.curtime #timestamp:before{content:"\f145";position:relative;top:-1px}#post-body .misc-pub-revisions:before{content:"\f321"}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;max-height:70%;right:50%;width:450px;margin-right:-225px;background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005;overflow-y:auto}.notification-dialog-background{position:fixed;top:0;right:0;left:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#file-editor-warning .button,#post-lock-dialog .post-locked-message a.button{margin-left:10px}#post-lock-dialog .post-locked-avatar{float:right;margin:0 0 20px 20px}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:right;margin-left:3px}#post-lock-dialog.saved .locked-saved,#post-lock-dialog.saving .locked-saving{display:inline}#excerpt{display:block;margin:12px 0 0;height:4em;width:100%}.tagchecklist{margin-right:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-right:-8px;position:absolute}.tagchecklist>li{float:right;margin-left:25px;font-size:13px;line-height:1.8em;cursor:default;max-width:100%;overflow:hidden;text-overflow:ellipsis}.tagchecklist .ntdelbutton{position:absolute;width:24px;height:24px;border:none;margin:0 -19px 0 0;padding:0;background:0 0;cursor:pointer;text-indent:0}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #page_template,#poststuff .inside #parent_id{max-width:100%}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}.post-attributes-label-wrapper{margin-bottom:.5em}.post-attributes-label{vertical-align:baseline;font-weight:600}#post-visibility-select{line-height:1.5em;margin-top:3px}#linksubmitdiv .inside,#poststuff #submitdiv .inside{margin:0;padding:0}#post-body-content,.edit-form-section{margin-bottom:20px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border:1px solid #ddd;border-spacing:0;background-color:#f9f9f9}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff td.left,#postcustomstuff th.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-left:10px}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:right;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-left:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon:before,.post-state-format:before{color:#ddd;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#00a0d2}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-right:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-left:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon.post-format-standard:before,.post-state-format.post-format-standard:before,a.post-state-format.format-standard:before{content:"\f109"}.post-format-icon.post-format-image:before,.post-state-format.post-format-image:before,a.post-state-format.format-image:before{content:"\f128"}.post-format-icon.post-format-gallery:before,.post-state-format.post-format-gallery:before,a.post-state-format.format-gallery:before{content:"\f161"}.post-format-icon.post-format-audio:before,.post-state-format.post-format-audio:before,a.post-state-format.format-audio:before{content:"\f127"}.post-format-icon.post-format-video:before,.post-state-format.post-format-video:before,a.post-state-format.format-video:before{content:"\f126"}.post-format-icon.post-format-chat:before,.post-state-format.post-format-chat:before,a.post-state-format.format-chat:before{content:"\f125"}.post-format-icon.post-format-status:before,.post-state-format.post-format-status:before,a.post-state-format.format-status:before{content:"\f130"}.post-format-icon.post-format-aside:before,.post-state-format.post-format-aside:before,a.post-state-format.format-aside:before{content:"\f123"}.post-format-icon.post-format-quote:before,.post-state-format.post-format-quote:before,a.post-state-format.format-quote:before{content:"\f122"}.post-format-icon.post-format-link:before,.post-state-format.post-format-link:before,a.post-state-format.format-link:before{content:"\f103"}.category-adder{margin-right:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:1px solid #ddd;background-color:#fdfdfd}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.inline-editor ul.cat-checklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,ul.export-filters{margin-right:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap label{display:block;padding:2px 0}.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field input[type=number],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=url],.form-field textarea{border-style:solid;border-width:1px;width:95%}.form-wrap p,p.description{margin:2px 0 5px;color:#666}.form-wrap p,p.description,p.help,span.description{font-size:13px;font-style:italic}.form-wrap .form-field{margin:1em 0;padding:0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h2{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.edit-term-notes{margin-top:2em}#poststuff .tagsdiv .howto{margin:0 0 6px}.ajaxtag .newtag{position:relative}.tagsdiv .newtag{width:180px}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px}#post-body-content .tagsdiv .the-tags{margin:0 5px}p.popular-tags{border:none;line-height:2em;padding:8px 12px 12px;text-align:justify}p.popular-tags a{padding:0 3px}.tagcloud{width:97%;margin:0 0 40px;text-align:justify}.tagcloud h2{margin:2px 0 12px}.the-tagcloud ul{margin:0}.the-tagcloud ul li{display:inline-block}.ac_results{display:none;margin:-1px 0 0;padding:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{margin:0;padding:5px 10px;white-space:nowrap;text-align:right}.ac_over .ac_match,.ac_results .ac_over{background-color:#0073aa;color:#fff;cursor:pointer}.ac_match{text-decoration:underline}#edittag{max-width:800px}.edit-tag-actions{margin-top:20px;overflow:hidden;padding:10px;margin-left:10px}.comment-php .wp-editor-area{height:200px}.comment-ays td,.comment-ays th{padding:10px 15px}.comment-ays .comment-content ul{list-style:outside;margin-right:2em}.comment-ays .comment-content a[href]:after{content:'(' attr(href) ')';display:inline-block;padding:0 4px;color:#72777C;font-size:13px;word-break:break-all}.comment-ays .comment-content p.edit-comment{margin-top:10px}.comment-ays .comment-content p.edit-comment a[href]:after{content:'';padding:0}#comment-status-radio label,.links-table td,.links-table th{padding:5px 0}.comment-ays-submit .button-cancel{margin-right:1em}.spam-undo-inside,.trash-undo-inside{margin:1px 0 1px 8px;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-left:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 0 5px 3px;vertical-align:middle}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:right;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td label{margin-left:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw,#wp-content-wrap .mce-wp-dfw{display:none}.wp-editor-expand #qt_content_dfw,.wp-editor-expand #wp-content-wrap .mce-wp-dfw{display:inline-block}.focus-on #screen-meta,.focus-on #screen-meta-links,.focus-on #wp-toolbar,.focus-on #wpfooter,.focus-on .page-title-action,.focus-on .postbox-container>*,.focus-on .update-nag,.focus-on .wrap>h1,.focus-on div.error,.focus-on div.notice,.focus-on div.updated{opacity:0;transition-duration:.6s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-on #wp-toolbar{opacity:.3}.focus-off #screen-meta,.focus-off #screen-meta-links,.focus-off #wp-toolbar,.focus-off #wpfooter,.focus-off .page-title-action,.focus-off .postbox-container>*,.focus-off .update-nag,.focus-off .wrap>h1,.focus-off div.error,.focus-off div.notice,.focus-off div.updated{opacity:1;transition-duration:.2s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-off #wp-toolbar{-webkit-transform:translate(0,0)}.focus-on #adminmenuback,.focus-on #adminmenuwrap{transition-duration:.6s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out;-webkit-transform:translateX(100%);transform:translateX(100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{-webkit-transform:translateX(0);transform:translateX(0);transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-2x.gif) left bottom no-repeat;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background-image:url(../images/resize-rtl-2x.gif);background-position:left bottom}}@media only screen and (max-width:850px){#poststuff{min-width:0}#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-left:0;width:100%}#poststuff #postbox-container-1 #side-sortables:empty,#poststuff #postbox-container-1 .empty-container{border:0;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0;width:auto}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){.wp-core-ui .edit-tag-actions .button-primary{margin-bottom:0}#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{padding:12px}.post-format-options{padding-left:0}.post-format-options a{margin-left:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-left:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}.tagsdiv .newtag,ul.categorychecklist li{margin-bottom:15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto}.tagchecklist{margin:25px 10px}.tagchecklist>li{font-size:16px;line-height:1.4}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar td,.mceToolbar tr{float:right!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-right:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding:6px 6px 6px 3px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}button.wp-switch-editor{font-size:16px;line-height:1em;margin:7px 7px 0 0;padding:8px 12px}#wp-content-media-buttons a{font-size:14px;padding:6px 10px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-right:-2px!important}.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before,.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:left;font-size:16px}#delete-action,#publishing-action{line-height:47px}#publishing-action .spinner{float:none;margin-top:-2px}.comment-ays td,.comment-ays th{padding-bottom:0}.comment-ays td{padding-top:6px}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}}
\ No newline at end of file
+#pending,#poststuff #titlewrap{border:0;padding:0}#pending,#poststuff #post-body{padding:0}#editable-post-name-full,body.post-new-php .submitbox .submitdelete{display:none}#post-status-info,.postbox{box-shadow:0 1px 1px rgba(0,0,0,.04)}#titlediv,#wp-content-editor-container,.postbox,form#tags-filter{position:relative}#poststuff{padding-top:10px;min-width:763px}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-left:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments a{float:right}#show-comments .spinner{float:none;margin-top:0}#lost-connection-notice .spinner{visibility:visible;float:right;margin:0 0 0 5px}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0 0 3px;background-color:#fff}#titlediv #title-prompt-text{color:#72777c;position:absolute;font-size:1.7em;padding:11px 10px}input#link_description,input#link_url{width:98%}#pending{background:100% none;font-size:11px;margin-top:-1px}#comment-link-box,#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-left:10px;padding:0;font-size:11px}#comment-link-box{margin:5px 0;padding:0 5px}#editable-post-name{font-weight:600}#editable-post-name input{font-size:13px;font-weight:400;height:24px;margin:0;width:16em}.postarea h3 label{float:right}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-left:4px;padding:6px}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{min-width:255px;border:1px solid #e5e5e5;background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:0 0;border:0;float:left;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#32373c}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:0}.taxonomy-add-new{display:inline-block;margin:10px 0;font-weight:600}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:5px 7px 10px;overflow:hidden}#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border:0}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:1px solid transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #ddd;border-bottom-color:#fdfdfd;background-color:#fdfdfd}ul.add-menu-item-tabs li,ul.category-tabs li,ul.wp-tab-bar li{padding:3px 5px 6px}#set-post-thumbnail{display:inline-block;max-width:100%}.ui-tabs-hide,.wp-editor-expand #content-resize-handle,.wp-hidden-children .wp-hidden-child{display:none}#postimagediv .inside img{max-width:100%;height:auto;width:auto;vertical-align:top;background-image:linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(-45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:100% 0,10px 10px;background-size:20px 20px}#post-body .tagsdiv #newtag{margin-left:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:none;background-color:#f7f7f7;z-index:999}#post-status-info td{font-size:12px}.autosave-info{padding:2px 10px;text-align:left}#editorcontent #post-status-info{border:none}#content-resize-handle{background:url(../images/resize.gif) left bottom no-repeat;width:12px;cursor:row-resize}.rtl #content-resize-handle{background-image:url(../images/resize-rtl.gif);background-position:left bottom}#postdivrich #content{resize:none}#wp-word-count{display:block;padding:2px 10px}.wp-editor-expand #wp-content-editor-tools{z-index:1000;border-bottom:1px solid #e5e5e5}.wp-editor-expand #wp-content-editor-container{box-shadow:none;margin-top:-1px;border-bottom:0 none}.wp-editor-expand div.mce-statusbar{z-index:1}.wp-editor-expand #post-status-info{border-top:1px solid #e5e5e5}.wp-editor-expand div.mce-toolbar-grp{z-index:999}.mce-fullscreen #wp-content-wrap .mce-edit-area,.mce-fullscreen #wp-content-wrap .mce-menubar,.mce-fullscreen #wp-content-wrap .mce-statusbar,.mce-fullscreen #wp-content-wrap .mce-toolbar-grp{position:static!important;width:auto!important;padding:0!important}.mce-fullscreen #wp-content-wrap .mce-statusbar{visibility:visible!important}.mce-fullscreen #wp-content-wrap .mce-tinymce .mce-wp-dfw,.mce-fullscreen #wp-content-wrap .mce-wp-dfw,.post-php.mce-fullscreen #wpadminbar{display:none}#wp-content-editor-tools{background-color:#f1f1f1;padding-top:20px}#poststuff #post-body.columns-2 #side-sortables{width:280px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#hh,#jj,#mn{padding:1px;font-size:12px}#hh,#jj,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#82878c}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;margin-right:-1px;padding-left:3px;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.suggested-policy-content,.wp-suggested-text p{font-style:italic}#post-body .misc-pub-post-status:before{content:"\f173"}#post-body #visibility:before{content:"\f177"}.curtime #timestamp:before{content:"\f145";position:relative;top:-1px}#post-body .misc-pub-revisions:before{content:"\f321"}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;max-height:70%;right:50%;width:450px;margin-right:-225px;background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005;overflow-y:auto}.notification-dialog-background{position:fixed;top:0;right:0;left:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#file-editor-warning .button,#post-lock-dialog .post-locked-message a.button{margin-left:10px}#post-lock-dialog .post-locked-avatar{float:right;margin:0 0 20px 20px}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:right;margin-left:3px}#post-lock-dialog.saved .locked-saved,#post-lock-dialog.saving .locked-saving{display:inline}#excerpt{display:block;margin:12px 0 0;height:4em;width:100%}.tagchecklist{margin-right:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-right:-8px;position:absolute}.tagchecklist>li{float:right;margin-left:25px;font-size:13px;line-height:1.8em;cursor:default;max-width:100%;overflow:hidden;text-overflow:ellipsis}.tagchecklist .ntdelbutton{position:absolute;width:24px;height:24px;border:none;margin:0 -19px 0 0;padding:0;background:0 0;cursor:pointer;text-indent:0}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #page_template,#poststuff .inside #parent_id{max-width:100%}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}.post-attributes-label-wrapper{margin-bottom:.5em}.post-attributes-label{vertical-align:baseline;font-weight:600}#post-visibility-select{line-height:1.5em;margin-top:3px}#linksubmitdiv .inside,#poststuff #submitdiv .inside{margin:0;padding:0}#post-body-content,.edit-form-section{margin-bottom:20px}.wp-privacy-policy-guide{max-width:1000px}.privacy-text-box{width:calc(100% - 260px)}.privacy-text-box-toc{float:left;width:250px;background-color:#fff}.privacy-text-box-toc p{margin:0;padding:.7em 1em;border-bottom:1px solid #eee}.privacy-text-box-toc ol{margin-right:2em}.wp-privacy-policy-guide h3{font-size:1.2em;margin:1em 0 .5em}.privacy-text-section .privacy-text-copy{float:left}.privacy-text-section{position:relative;border-top:1px solid #e3e3e3}.privacy-text-box-head,.privacy-text-section.text-removed{padding-bottom:12px}.text-removed .policy-text{font-style:italic;color:#666;font-weight:600}.privacy-text-actions{height:32px;line-height:32px;padding-bottom:6px}.wp-privacy-policy-guide .policy-text h2{margin:1.2em 0 1em;padding:0}.privacy-text-section a.return-to-top{float:left;margin-left:-250px;margin-top:6px}.hide-privacy-policy-tutorial .privacy-policy-tutorial{visibility:hidden}.wp-suggested-text p.privacy-policy-tutorial{font-style:normal}.notice.wp-pp-notice{margin:15px 0 3px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border:1px solid #ddd;border-spacing:0;background-color:#f9f9f9}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff td.left,#postcustomstuff th.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-left:10px}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:right;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-left:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon:before,.post-state-format:before{color:#ddd;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#00a0d2}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-right:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-left:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon.post-format-standard:before,.post-state-format.post-format-standard:before,a.post-state-format.format-standard:before{content:"\f109"}.post-format-icon.post-format-image:before,.post-state-format.post-format-image:before,a.post-state-format.format-image:before{content:"\f128"}.post-format-icon.post-format-gallery:before,.post-state-format.post-format-gallery:before,a.post-state-format.format-gallery:before{content:"\f161"}.post-format-icon.post-format-audio:before,.post-state-format.post-format-audio:before,a.post-state-format.format-audio:before{content:"\f127"}.post-format-icon.post-format-video:before,.post-state-format.post-format-video:before,a.post-state-format.format-video:before{content:"\f126"}.post-format-icon.post-format-chat:before,.post-state-format.post-format-chat:before,a.post-state-format.format-chat:before{content:"\f125"}.post-format-icon.post-format-status:before,.post-state-format.post-format-status:before,a.post-state-format.format-status:before{content:"\f130"}.post-format-icon.post-format-aside:before,.post-state-format.post-format-aside:before,a.post-state-format.format-aside:before{content:"\f123"}.post-format-icon.post-format-quote:before,.post-state-format.post-format-quote:before,a.post-state-format.format-quote:before{content:"\f122"}.post-format-icon.post-format-link:before,.post-state-format.post-format-link:before,a.post-state-format.format-link:before{content:"\f103"}.category-adder{margin-right:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:1px solid #ddd;background-color:#fdfdfd}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.inline-editor ul.cat-checklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,ul.export-filters{margin-right:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap label{display:block;padding:2px 0}.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field input[type=number],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=url],.form-field textarea{border-style:solid;border-width:1px;width:95%}.form-wrap p,p.description{margin:2px 0 5px;color:#666}.form-wrap p,p.description,p.help,span.description{font-size:13px;font-style:italic}.form-wrap .form-field{margin:1em 0;padding:0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h2{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.edit-term-notes{margin-top:2em}#poststuff .tagsdiv .howto{margin:0 0 6px}.ajaxtag .newtag{position:relative}.tagsdiv .newtag{width:180px}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px}#post-body-content .tagsdiv .the-tags{margin:0 5px}p.popular-tags{border:none;line-height:2em;padding:8px 12px 12px;text-align:justify}p.popular-tags a{padding:0 3px}.tagcloud{width:97%;margin:0 0 40px;text-align:justify}.tagcloud h2{margin:2px 0 12px}.the-tagcloud ul{margin:0}.the-tagcloud ul li{display:inline-block}.ac_results{display:none;margin:-1px 0 0;padding:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{margin:0;padding:5px 10px;white-space:nowrap;text-align:right}.ac_over .ac_match,.ac_results .ac_over{background-color:#0073aa;color:#fff;cursor:pointer}.ac_match{text-decoration:underline}#edittag{max-width:800px}.edit-tag-actions{margin-top:20px;overflow:hidden;padding:10px;margin-left:10px}.comment-php .wp-editor-area{height:200px}.comment-ays td,.comment-ays th{padding:10px 15px}.comment-ays .comment-content ul{list-style:outside;margin-right:2em}.comment-ays .comment-content a[href]:after{content:'(' attr(href) ')';display:inline-block;padding:0 4px;color:#72777C;font-size:13px;word-break:break-all}.comment-ays .comment-content p.edit-comment{margin-top:10px}.comment-ays .comment-content p.edit-comment a[href]:after{content:'';padding:0}#comment-status-radio label,.links-table td,.links-table th{padding:5px 0}.comment-ays-submit .button-cancel{margin-right:1em}.spam-undo-inside,.trash-undo-inside{margin:1px 0 1px 8px;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-left:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 0 5px 3px;vertical-align:middle}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:right;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td label{margin-left:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw,#wp-content-wrap .mce-wp-dfw{display:none}.wp-editor-expand #qt_content_dfw,.wp-editor-expand #wp-content-wrap .mce-wp-dfw{display:inline-block}.focus-on #screen-meta,.focus-on #screen-meta-links,.focus-on #wp-toolbar,.focus-on #wpfooter,.focus-on .page-title-action,.focus-on .postbox-container>*,.focus-on .update-nag,.focus-on .wrap>h1,.focus-on div.error,.focus-on div.notice,.focus-on div.updated{opacity:0;transition-duration:.6s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-on #wp-toolbar{opacity:.3}.focus-off #screen-meta,.focus-off #screen-meta-links,.focus-off #wp-toolbar,.focus-off #wpfooter,.focus-off .page-title-action,.focus-off .postbox-container>*,.focus-off .update-nag,.focus-off .wrap>h1,.focus-off div.error,.focus-off div.notice,.focus-off div.updated{opacity:1;transition-duration:.2s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-off #wp-toolbar{-webkit-transform:translate(0,0)}.focus-on #adminmenuback,.focus-on #adminmenuwrap{transition-duration:.6s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out;-webkit-transform:translateX(100%);transform:translateX(100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{-webkit-transform:translateX(0);transform:translateX(0);transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-2x.gif) left bottom no-repeat;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background-image:url(../images/resize-rtl-2x.gif);background-position:left bottom}}@media only screen and (max-width:850px){#poststuff{min-width:0}#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-left:0;width:100%}#poststuff #postbox-container-1 #side-sortables:empty,#poststuff #postbox-container-1 .empty-container{border:0;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0;width:auto}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){.wp-core-ui .edit-tag-actions .button-primary{margin-bottom:0}#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{padding:12px}.post-format-options{padding-left:0}.post-format-options a{margin-left:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-left:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}.tagsdiv .newtag,ul.categorychecklist li{margin-bottom:15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto}.tagchecklist{margin:25px 10px}.tagchecklist>li{font-size:16px;line-height:1.4}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar td,.mceToolbar tr{float:right!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-right:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding:6px 6px 6px 3px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}button.wp-switch-editor{font-size:16px;line-height:1em;margin:7px 7px 0 0;padding:8px 12px}#wp-content-media-buttons a{font-size:14px;padding:6px 10px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-right:-2px!important}.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before,.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:left;font-size:16px}#delete-action,#publishing-action{line-height:47px}#publishing-action .spinner{float:none;margin-top:-2px}.comment-ays td,.comment-ays th{padding-bottom:0}.comment-ays td{padding-top:6px}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}.privacy-text-box{width:auto}.privacy-text-box-toc{float:none;width:auto;height:100%}.privacy-text-section a.return-to-top{float:none;margin:0}}
\ No newline at end of file
margin-bottom: 20px;
}
+/* Suggested text for privacy policy */
+.wp-privacy-policy-guide {
+ max-width: 1000px;
+}
+
+.privacy-text-box {
+ width: calc(100% - 260px);
+}
+
+.privacy-text-box-toc {
+ float: right;
+ width: 250px;
+ background-color: #fff;
+}
+
+.privacy-text-box-toc p {
+ margin: 0;
+ padding: 0.7em 1em;
+ border-bottom: 1px solid #eee;
+}
+
+.privacy-text-box-toc ol {
+ margin-left: 2em;
+}
+
+.wp-privacy-policy-guide h3 {
+ font-size: 1.2em;
+ margin: 1em 0 0.5em;
+}
+
+.privacy-text-section .privacy-text-copy {
+ float: right;
+}
+
+.privacy-text-section {
+ position: relative;
+ border-top: 1px solid #e3e3e3;
+}
+
+.privacy-text-box-head,
+.privacy-text-section.text-removed {
+ padding-bottom: 12px;
+}
+
+.text-removed .policy-text {
+ font-style: italic;
+ color: #666;
+ font-weight: 600;
+}
+
+.privacy-text-actions {
+ height: 32px;
+ line-height: 32px;
+ padding-bottom: 6px;
+}
+
+.wp-privacy-policy-guide .policy-text h2 {
+ margin: 1.2em 0 1em;
+ padding: 0;
+}
+
+.suggested-policy-content {
+ font-style: italic;
+}
+
+.privacy-text-section a.return-to-top {
+ float: right;
+ margin-right: -250px;
+ margin-top: 6px;
+}
+
+.hide-privacy-policy-tutorial .privacy-policy-tutorial {
+ visibility: hidden;
+}
+
+.wp-suggested-text p {
+ font-style: italic;
+}
+
+.wp-suggested-text p.privacy-policy-tutorial {
+ font-style: normal;
+}
+
+.notice.wp-pp-notice {
+ margin: 15px 0 3px;
+}
+
/*------------------------------------------------------------------------------
11.1 - Custom Fields
------------------------------------------------------------------------------*/
.links-table td {
padding: 10px 0;
}
+
+ .privacy-text-box {
+ width: auto;
+ }
+
+ .privacy-text-box-toc {
+ float: none;
+ width: auto;
+ height: 100%;
+ }
+
+ .privacy-text-section a.return-to-top {
+ float: none;
+ margin: 0;
+ }
}
/*! This file is auto-generated */
-#pending,#poststuff #titlewrap{border:0;padding:0}#pending,#poststuff #post-body{padding:0}#editable-post-name-full,body.post-new-php .submitbox .submitdelete{display:none}#post-status-info,.postbox{box-shadow:0 1px 1px rgba(0,0,0,.04)}#titlediv,#wp-content-editor-container,.postbox,form#tags-filter{position:relative}#poststuff{padding-top:10px;min-width:763px}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-right:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments a{float:left}#show-comments .spinner{float:none;margin-top:0}#lost-connection-notice .spinner{visibility:visible;float:left;margin:0 5px 0 0}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0 0 3px;background-color:#fff}#titlediv #title-prompt-text{color:#72777c;position:absolute;font-size:1.7em;padding:11px 10px}input#link_description,input#link_url{width:98%}#pending{background:0 none;font-size:11px;margin-top:-1px}#comment-link-box,#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-right:10px;padding:0;font-size:11px}#comment-link-box{margin:5px 0;padding:0 5px}#editable-post-name{font-weight:600}#editable-post-name input{font-size:13px;font-weight:400;height:24px;margin:0;width:16em}.postarea h3 label{float:left}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-right:4px;padding:6px}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{min-width:255px;border:1px solid #e5e5e5;background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:0 0;border:0;float:right;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#32373c}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:0}.taxonomy-add-new{display:inline-block;margin:10px 0;font-weight:600}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:5px 7px 10px;overflow:hidden}#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border:0}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:1px solid transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #ddd;border-bottom-color:#fdfdfd;background-color:#fdfdfd}ul.add-menu-item-tabs li,ul.category-tabs li,ul.wp-tab-bar li{padding:3px 5px 6px}#set-post-thumbnail{display:inline-block;max-width:100%}.ui-tabs-hide,.wp-editor-expand #content-resize-handle,.wp-hidden-children .wp-hidden-child{display:none}#postimagediv .inside img{max-width:100%;height:auto;width:auto;vertical-align:top;background-image:linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:0 0,10px 10px;background-size:20px 20px}#post-body .tagsdiv #newtag{margin-right:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:none;background-color:#f7f7f7;z-index:999}#post-status-info td{font-size:12px}.autosave-info{padding:2px 10px;text-align:right}#editorcontent #post-status-info{border:none}#content-resize-handle{background:url(../images/resize.gif) right bottom no-repeat;width:12px;cursor:row-resize}.rtl #content-resize-handle{background-image:url(../images/resize-rtl.gif);background-position:left bottom}#postdivrich #content{resize:none}#wp-word-count{display:block;padding:2px 10px}.wp-editor-expand #wp-content-editor-tools{z-index:1000;border-bottom:1px solid #e5e5e5}.wp-editor-expand #wp-content-editor-container{box-shadow:none;margin-top:-1px;border-bottom:0 none}.wp-editor-expand div.mce-statusbar{z-index:1}.wp-editor-expand #post-status-info{border-top:1px solid #e5e5e5}.wp-editor-expand div.mce-toolbar-grp{z-index:999}.mce-fullscreen #wp-content-wrap .mce-edit-area,.mce-fullscreen #wp-content-wrap .mce-menubar,.mce-fullscreen #wp-content-wrap .mce-statusbar,.mce-fullscreen #wp-content-wrap .mce-toolbar-grp{position:static!important;width:auto!important;padding:0!important}.mce-fullscreen #wp-content-wrap .mce-statusbar{visibility:visible!important}.mce-fullscreen #wp-content-wrap .mce-tinymce .mce-wp-dfw,.mce-fullscreen #wp-content-wrap .mce-wp-dfw,.post-php.mce-fullscreen #wpadminbar{display:none}#wp-content-editor-tools{background-color:#f1f1f1;padding-top:20px}#poststuff #post-body.columns-2 #side-sortables{width:280px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#hh,#jj,#mn{padding:1px;font-size:12px}#hh,#jj,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#82878c}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;margin-left:-1px;padding-right:3px;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#post-body .misc-pub-post-status:before{content:"\f173"}#post-body #visibility:before{content:"\f177"}.curtime #timestamp:before{content:"\f145";position:relative;top:-1px}#post-body .misc-pub-revisions:before{content:"\f321"}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;max-height:70%;left:50%;width:450px;margin-left:-225px;background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005;overflow-y:auto}.notification-dialog-background{position:fixed;top:0;left:0;right:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#file-editor-warning .button,#post-lock-dialog .post-locked-message a.button{margin-right:10px}#post-lock-dialog .post-locked-avatar{float:left;margin:0 20px 20px 0}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:left;margin-right:3px}#post-lock-dialog.saved .locked-saved,#post-lock-dialog.saving .locked-saving{display:inline}#excerpt{display:block;margin:12px 0 0;height:4em;width:100%}.tagchecklist{margin-left:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-left:-8px;position:absolute}.tagchecklist>li{float:left;margin-right:25px;font-size:13px;line-height:1.8em;cursor:default;max-width:100%;overflow:hidden;text-overflow:ellipsis}.tagchecklist .ntdelbutton{position:absolute;width:24px;height:24px;border:none;margin:0 0 0 -19px;padding:0;background:0 0;cursor:pointer;text-indent:0}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #page_template,#poststuff .inside #parent_id{max-width:100%}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}.post-attributes-label-wrapper{margin-bottom:.5em}.post-attributes-label{vertical-align:baseline;font-weight:600}#post-visibility-select{line-height:1.5em;margin-top:3px}#linksubmitdiv .inside,#poststuff #submitdiv .inside{margin:0;padding:0}#post-body-content,.edit-form-section{margin-bottom:20px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border:1px solid #ddd;border-spacing:0;background-color:#f9f9f9}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff td.left,#postcustomstuff th.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-right:10px}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:left;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-right:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon:before,.post-state-format:before{color:#ddd;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#00a0d2}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-left:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-right:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon.post-format-standard:before,.post-state-format.post-format-standard:before,a.post-state-format.format-standard:before{content:"\f109"}.post-format-icon.post-format-image:before,.post-state-format.post-format-image:before,a.post-state-format.format-image:before{content:"\f128"}.post-format-icon.post-format-gallery:before,.post-state-format.post-format-gallery:before,a.post-state-format.format-gallery:before{content:"\f161"}.post-format-icon.post-format-audio:before,.post-state-format.post-format-audio:before,a.post-state-format.format-audio:before{content:"\f127"}.post-format-icon.post-format-video:before,.post-state-format.post-format-video:before,a.post-state-format.format-video:before{content:"\f126"}.post-format-icon.post-format-chat:before,.post-state-format.post-format-chat:before,a.post-state-format.format-chat:before{content:"\f125"}.post-format-icon.post-format-status:before,.post-state-format.post-format-status:before,a.post-state-format.format-status:before{content:"\f130"}.post-format-icon.post-format-aside:before,.post-state-format.post-format-aside:before,a.post-state-format.format-aside:before{content:"\f123"}.post-format-icon.post-format-quote:before,.post-state-format.post-format-quote:before,a.post-state-format.format-quote:before{content:"\f122"}.post-format-icon.post-format-link:before,.post-state-format.post-format-link:before,a.post-state-format.format-link:before{content:"\f103"}.category-adder{margin-left:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:1px solid #ddd;background-color:#fdfdfd}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.inline-editor ul.cat-checklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,ul.export-filters{margin-left:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap label{display:block;padding:2px 0}.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field input[type=number],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=url],.form-field textarea{border-style:solid;border-width:1px;width:95%}.form-wrap p,p.description{margin:2px 0 5px;color:#666}.form-wrap p,p.description,p.help,span.description{font-size:13px;font-style:italic}.form-wrap .form-field{margin:1em 0;padding:0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h2{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.edit-term-notes{margin-top:2em}#poststuff .tagsdiv .howto{margin:0 0 6px}.ajaxtag .newtag{position:relative}.tagsdiv .newtag{width:180px}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px}#post-body-content .tagsdiv .the-tags{margin:0 5px}p.popular-tags{border:none;line-height:2em;padding:8px 12px 12px;text-align:justify}p.popular-tags a{padding:0 3px}.tagcloud{width:97%;margin:0 0 40px;text-align:justify}.tagcloud h2{margin:2px 0 12px}.the-tagcloud ul{margin:0}.the-tagcloud ul li{display:inline-block}.ac_results{display:none;margin:-1px 0 0;padding:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{margin:0;padding:5px 10px;white-space:nowrap;text-align:left}.ac_over .ac_match,.ac_results .ac_over{background-color:#0073aa;color:#fff;cursor:pointer}.ac_match{text-decoration:underline}#edittag{max-width:800px}.edit-tag-actions{margin-top:20px;overflow:hidden;padding:10px;margin-right:10px}.comment-php .wp-editor-area{height:200px}.comment-ays td,.comment-ays th{padding:10px 15px}.comment-ays .comment-content ul{list-style:outside;margin-left:2em}.comment-ays .comment-content a[href]:after{content:'(' attr(href) ')';display:inline-block;padding:0 4px;color:#72777C;font-size:13px;word-break:break-all}.comment-ays .comment-content p.edit-comment{margin-top:10px}.comment-ays .comment-content p.edit-comment a[href]:after{content:'';padding:0}#comment-status-radio label,.links-table td,.links-table th{padding:5px 0}.comment-ays-submit .button-cancel{margin-left:1em}.spam-undo-inside,.trash-undo-inside{margin:1px 8px 1px 0;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-right:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 3px 5px 0;vertical-align:middle}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:left;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td label{margin-right:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw,#wp-content-wrap .mce-wp-dfw{display:none}.wp-editor-expand #qt_content_dfw,.wp-editor-expand #wp-content-wrap .mce-wp-dfw{display:inline-block}.focus-on #screen-meta,.focus-on #screen-meta-links,.focus-on #wp-toolbar,.focus-on #wpfooter,.focus-on .page-title-action,.focus-on .postbox-container>*,.focus-on .update-nag,.focus-on .wrap>h1,.focus-on div.error,.focus-on div.notice,.focus-on div.updated{opacity:0;transition-duration:.6s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-on #wp-toolbar{opacity:.3}.focus-off #screen-meta,.focus-off #screen-meta-links,.focus-off #wp-toolbar,.focus-off #wpfooter,.focus-off .page-title-action,.focus-off .postbox-container>*,.focus-off .update-nag,.focus-off .wrap>h1,.focus-off div.error,.focus-off div.notice,.focus-off div.updated{opacity:1;transition-duration:.2s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-off #wp-toolbar{-webkit-transform:translate(0,0)}.focus-on #adminmenuback,.focus-on #adminmenuwrap{transition-duration:.6s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{-webkit-transform:translateX(0);transform:translateX(0);transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-2x.gif) right bottom no-repeat;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background-image:url(../images/resize-rtl-2x.gif);background-position:left bottom}}@media only screen and (max-width:850px){#poststuff{min-width:0}#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-right:0;width:100%}#poststuff #postbox-container-1 #side-sortables:empty,#poststuff #postbox-container-1 .empty-container{border:0;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0;width:auto}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){.wp-core-ui .edit-tag-actions .button-primary{margin-bottom:0}#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{padding:12px}.post-format-options{padding-right:0}.post-format-options a{margin-right:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-right:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}.tagsdiv .newtag,ul.categorychecklist li{margin-bottom:15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto}.tagchecklist{margin:25px 10px}.tagchecklist>li{font-size:16px;line-height:1.4}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar td,.mceToolbar tr{float:left!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-left:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding:6px 3px 6px 6px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}button.wp-switch-editor{font-size:16px;line-height:1em;margin:7px 0 0 7px;padding:8px 12px}#wp-content-media-buttons a{font-size:14px;padding:6px 10px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-left:-2px!important}.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before,.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:right;font-size:16px}#delete-action,#publishing-action{line-height:47px}#publishing-action .spinner{float:none;margin-top:-2px}.comment-ays td,.comment-ays th{padding-bottom:0}.comment-ays td{padding-top:6px}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}}
\ No newline at end of file
+#pending,#poststuff #titlewrap{border:0;padding:0}#pending,#poststuff #post-body{padding:0}#editable-post-name-full,body.post-new-php .submitbox .submitdelete{display:none}#post-status-info,.postbox{box-shadow:0 1px 1px rgba(0,0,0,.04)}#titlediv,#wp-content-editor-container,.postbox,form#tags-filter{position:relative}#poststuff{padding-top:10px;min-width:763px}#poststuff .postbox-container{width:100%}#poststuff #post-body.columns-2{margin-right:300px}#show-comments{overflow:hidden}#save-action .spinner,#show-comments a{float:left}#show-comments .spinner{float:none;margin-top:0}#lost-connection-notice .spinner{visibility:visible;float:left;margin:0 5px 0 0}#titlediv label{cursor:text}#titlediv div.inside{margin:0}#titlediv #title{padding:3px 8px;font-size:1.7em;line-height:100%;height:1.7em;width:100%;outline:0;margin:0 0 3px;background-color:#fff}#titlediv #title-prompt-text{color:#72777c;position:absolute;font-size:1.7em;padding:11px 10px}input#link_description,input#link_url{width:98%}#pending{background:0 none;font-size:11px;margin-top:-1px}#comment-link-box,#edit-slug-box{line-height:24px;min-height:25px;margin-top:5px;padding:0 10px;color:#666}#edit-slug-box .cancel{margin-right:10px;padding:0;font-size:11px}#comment-link-box{margin:5px 0;padding:0 5px}#editable-post-name{font-weight:600}#editable-post-name input{font-size:13px;font-weight:400;height:24px;margin:0;width:16em}.postarea h3 label{float:left}.submitbox .submit a:hover{text-decoration:underline}.submitbox .submit input{margin-bottom:8px;margin-right:4px;padding:6px}#post-status-select{margin-top:3px}#post-body #normal-sortables{min-height:50px}.postbox{min-width:255px;border:1px solid #e5e5e5;background:#fff}#trackback_url{width:99%}#normal-sortables .postbox .submit{background:0 0;border:0;float:right;padding:0 12px;margin:0}.category-add input[type=text],.category-add select{width:100%;max-width:260px;vertical-align:baseline}#side-sortables .category-add input[type=text],#side-sortables .category-add select{margin:0 0 1em}#side-sortables .add-menu-item-tabs li,.wp-tab-bar li,ul.category-tabs li{display:inline;line-height:1.35em}.no-js .category-tabs li.hide-if-no-js{display:none}#side-sortables .add-menu-item-tabs a,.category-tabs a,.wp-tab-bar a{text-decoration:none}#post-body ul.add-menu-item-tabs li.tabs a,#post-body ul.category-tabs li.tabs a,#side-sortables .add-menu-item-tabs .tabs a,#side-sortables .category-tabs .tabs a,.wp-tab-bar .wp-tab-active a{color:#32373c}.category-tabs{margin:8px 0 5px}#category-adder h4{margin:0}.taxonomy-add-new{display:inline-block;margin:10px 0;font-weight:600}#side-sortables .add-menu-item-tabs,.wp-tab-bar{margin-bottom:3px}#normal-sortables .postbox #replyrow .submit{float:none;margin:0;padding:5px 7px 10px;overflow:hidden}#side-sortables .submitbox .submit .preview,#side-sortables .submitbox .submit a.preview:hover,#side-sortables .submitbox .submit input{border:0}ul.add-menu-item-tabs,ul.category-tabs,ul.wp-tab-bar{margin-top:12px}ul.add-menu-item-tabs li,ul.category-tabs li{border:1px solid transparent;position:relative}.wp-tab-active,ul.add-menu-item-tabs li.tabs,ul.category-tabs li.tabs{border:1px solid #ddd;border-bottom-color:#fdfdfd;background-color:#fdfdfd}ul.add-menu-item-tabs li,ul.category-tabs li,ul.wp-tab-bar li{padding:3px 5px 6px}#set-post-thumbnail{display:inline-block;max-width:100%}.ui-tabs-hide,.wp-editor-expand #content-resize-handle,.wp-hidden-children .wp-hidden-child{display:none}#postimagediv .inside img{max-width:100%;height:auto;width:auto;vertical-align:top;background-image:linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4),linear-gradient(45deg,#c4c4c4 25%,transparent 25%,transparent 75%,#c4c4c4 75%,#c4c4c4);background-position:0 0,10px 10px;background-size:20px 20px}#post-body .tagsdiv #newtag{margin-right:5px;width:16em}#side-sortables input#post_password{width:94%}#side-sortables .tagsdiv #newtag{width:68%}#post-status-info{width:100%;border-spacing:0;border:1px solid #e5e5e5;border-top:none;background-color:#f7f7f7;z-index:999}#post-status-info td{font-size:12px}.autosave-info{padding:2px 10px;text-align:right}#editorcontent #post-status-info{border:none}#content-resize-handle{background:url(../images/resize.gif) right bottom no-repeat;width:12px;cursor:row-resize}.rtl #content-resize-handle{background-image:url(../images/resize-rtl.gif);background-position:left bottom}#postdivrich #content{resize:none}#wp-word-count{display:block;padding:2px 10px}.wp-editor-expand #wp-content-editor-tools{z-index:1000;border-bottom:1px solid #e5e5e5}.wp-editor-expand #wp-content-editor-container{box-shadow:none;margin-top:-1px;border-bottom:0 none}.wp-editor-expand div.mce-statusbar{z-index:1}.wp-editor-expand #post-status-info{border-top:1px solid #e5e5e5}.wp-editor-expand div.mce-toolbar-grp{z-index:999}.mce-fullscreen #wp-content-wrap .mce-edit-area,.mce-fullscreen #wp-content-wrap .mce-menubar,.mce-fullscreen #wp-content-wrap .mce-statusbar,.mce-fullscreen #wp-content-wrap .mce-toolbar-grp{position:static!important;width:auto!important;padding:0!important}.mce-fullscreen #wp-content-wrap .mce-statusbar{visibility:visible!important}.mce-fullscreen #wp-content-wrap .mce-tinymce .mce-wp-dfw,.mce-fullscreen #wp-content-wrap .mce-wp-dfw,.post-php.mce-fullscreen #wpadminbar{display:none}#wp-content-editor-tools{background-color:#f1f1f1;padding-top:20px}#poststuff #post-body.columns-2 #side-sortables{width:280px}#timestampdiv select{height:21px;line-height:14px;padding:0;vertical-align:top;font-size:12px}#aa,#hh,#jj,#mn{padding:1px;font-size:12px}#hh,#jj,#mn{width:2em}#aa{width:3.4em}.curtime #timestamp{padding:2px 0 1px;display:inline!important;height:auto!important}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before,span.wp-media-buttons-icon:before{color:#82878c}#post-body #visibility:before,#post-body .misc-pub-post-status:before,#post-body .misc-pub-revisions:before,.curtime #timestamp:before{font:400 20px/1 dashicons;speak:none;display:inline-block;margin-left:-1px;padding-right:3px;vertical-align:top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.suggested-policy-content,.wp-suggested-text p{font-style:italic}#post-body .misc-pub-post-status:before{content:"\f173"}#post-body #visibility:before{content:"\f177"}.curtime #timestamp:before{content:"\f145";position:relative;top:-1px}#post-body .misc-pub-revisions:before{content:"\f321"}#timestampdiv{padding-top:5px;line-height:23px}#timestampdiv p{margin:8px 0 6px}#timestampdiv input{border-width:1px;border-style:solid}.notification-dialog{position:fixed;top:30%;max-height:70%;left:50%;width:450px;margin-left:-225px;background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.3);line-height:1.5;z-index:1000005;overflow-y:auto}.notification-dialog-background{position:fixed;top:0;left:0;right:0;bottom:0;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:1000000}#post-lock-dialog .post-locked-message,#post-lock-dialog .post-taken-over{margin:25px}#file-editor-warning .button,#post-lock-dialog .post-locked-message a.button{margin-right:10px}#post-lock-dialog .post-locked-avatar{float:left;margin:0 20px 20px 0}#post-lock-dialog .wp-tab-first{outline:0}#post-lock-dialog .locked-saving img{float:left;margin-right:3px}#post-lock-dialog.saved .locked-saved,#post-lock-dialog.saving .locked-saving{display:inline}#excerpt{display:block;margin:12px 0 0;height:4em;width:100%}.tagchecklist{margin-left:14px;font-size:12px;overflow:auto}.tagchecklist br{display:none}.tagchecklist strong{margin-left:-8px;position:absolute}.tagchecklist>li{float:left;margin-right:25px;font-size:13px;line-height:1.8em;cursor:default;max-width:100%;overflow:hidden;text-overflow:ellipsis}.tagchecklist .ntdelbutton{position:absolute;width:24px;height:24px;border:none;margin:0 0 0 -19px;padding:0;background:0 0;cursor:pointer;text-indent:0}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{font-size:14px;padding:8px 12px;margin:0;line-height:1.4}#poststuff .inside{margin:6px 0 0}#poststuff .inside #page_template,#poststuff .inside #parent_id{max-width:100%}.ie8 #poststuff .inside #page_template,.ie8 #poststuff .inside #parent_id{width:250px}.post-attributes-label-wrapper{margin-bottom:.5em}.post-attributes-label{vertical-align:baseline;font-weight:600}#post-visibility-select{line-height:1.5em;margin-top:3px}#linksubmitdiv .inside,#poststuff #submitdiv .inside{margin:0;padding:0}#post-body-content,.edit-form-section{margin-bottom:20px}.wp-privacy-policy-guide{max-width:1000px}.privacy-text-box{width:calc(100% - 260px)}.privacy-text-box-toc{float:right;width:250px;background-color:#fff}.privacy-text-box-toc p{margin:0;padding:.7em 1em;border-bottom:1px solid #eee}.privacy-text-box-toc ol{margin-left:2em}.wp-privacy-policy-guide h3{font-size:1.2em;margin:1em 0 .5em}.privacy-text-section .privacy-text-copy{float:right}.privacy-text-section{position:relative;border-top:1px solid #e3e3e3}.privacy-text-box-head,.privacy-text-section.text-removed{padding-bottom:12px}.text-removed .policy-text{font-style:italic;color:#666;font-weight:600}.privacy-text-actions{height:32px;line-height:32px;padding-bottom:6px}.wp-privacy-policy-guide .policy-text h2{margin:1.2em 0 1em;padding:0}.privacy-text-section a.return-to-top{float:right;margin-right:-250px;margin-top:6px}.hide-privacy-policy-tutorial .privacy-policy-tutorial{visibility:hidden}.wp-suggested-text p.privacy-policy-tutorial{font-style:normal}.notice.wp-pp-notice{margin:15px 0 3px}#postcustomstuff thead th{padding:5px 8px 8px;background-color:#f1f1f1}#postcustom #postcustomstuff .submit{border:0;float:none;padding:0 8px 8px}#side-sortables #postcustom #postcustomstuff .submit{margin:0;padding:0}#side-sortables #postcustom #postcustomstuff #the-list textarea{height:85px}#side-sortables #postcustom #postcustomstuff td.left input,#side-sortables #postcustom #postcustomstuff td.left select,#side-sortables #postcustomstuff #newmetaleft a{margin:3px 3px 0}#postcustomstuff table{margin:0;width:100%;border:1px solid #ddd;border-spacing:0;background-color:#f9f9f9}#postcustomstuff tr{vertical-align:top}#postcustomstuff table input,#postcustomstuff table select,#postcustomstuff table textarea{width:96%;margin:8px}#side-sortables #postcustomstuff table input,#side-sortables #postcustomstuff table select,#side-sortables #postcustomstuff table textarea{margin:3px}#postcustomstuff td.left,#postcustomstuff th.left{width:38%}#postcustomstuff .submit input{margin:0;width:auto}#postcustomstuff #newmetaleft a{display:inline-block;margin:0 8px 8px;text-decoration:none}.no-js #postcustomstuff #enternew{display:none}#post-body-content .compat-attachment-fields{margin-bottom:20px}.compat-attachment-fields th{padding-top:5px;padding-right:10px}#select-featured-image{padding:4px 0;overflow:hidden}#select-featured-image img{max-width:100%;height:auto;margin-bottom:10px}#select-featured-image a{float:left;clear:both}#select-featured-image .remove{display:none;margin-top:10px}.js #select-featured-image.has-featured-image .remove{display:inline-block}.no-js #select-featured-image .choose{display:none}.post-state-format{overflow:hidden;display:inline-block;vertical-align:middle;height:20px;width:20px;margin-right:5px;margin-top:-4px}.post-state-format:before{display:block;height:20px;width:20px;font:400 20px/1 dashicons!important;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon:before,.post-state-format:before{color:#ddd;transition:all .1s ease-in-out}a.post-format-icon:hover:before,a.post-state-format:hover:before{color:#00a0d2}#post-formats-select{line-height:2em}#post-formats-select .post-format-icon:before{top:5px}input.post-format{margin-top:1px}label.post-format-icon{margin-left:0;padding:2px 0}.post-format-icon:before{position:relative;display:inline-block;margin-right:7px;font:400 20px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.post-format-icon.post-format-standard:before,.post-state-format.post-format-standard:before,a.post-state-format.format-standard:before{content:"\f109"}.post-format-icon.post-format-image:before,.post-state-format.post-format-image:before,a.post-state-format.format-image:before{content:"\f128"}.post-format-icon.post-format-gallery:before,.post-state-format.post-format-gallery:before,a.post-state-format.format-gallery:before{content:"\f161"}.post-format-icon.post-format-audio:before,.post-state-format.post-format-audio:before,a.post-state-format.format-audio:before{content:"\f127"}.post-format-icon.post-format-video:before,.post-state-format.post-format-video:before,a.post-state-format.format-video:before{content:"\f126"}.post-format-icon.post-format-chat:before,.post-state-format.post-format-chat:before,a.post-state-format.format-chat:before{content:"\f125"}.post-format-icon.post-format-status:before,.post-state-format.post-format-status:before,a.post-state-format.format-status:before{content:"\f130"}.post-format-icon.post-format-aside:before,.post-state-format.post-format-aside:before,a.post-state-format.format-aside:before{content:"\f123"}.post-format-icon.post-format-quote:before,.post-state-format.post-format-quote:before,a.post-state-format.format-quote:before{content:"\f122"}.post-format-icon.post-format-link:before,.post-state-format.post-format-link:before,a.post-state-format.format-link:before{content:"\f103"}.category-adder{margin-left:120px;padding:4px 0}.category-adder h4{margin:0 0 8px}#side-sortables .category-adder{margin:0}.categorydiv div.tabs-panel,.customlinkdiv div.tabs-panel,.posttypediv div.tabs-panel,.taxonomydiv div.tabs-panel,.wp-tab-panel{min-height:42px;max-height:200px;overflow:auto;padding:0 .9em;border:1px solid #ddd;background-color:#fdfdfd}div.tabs-panel-active{display:block}div.tabs-panel-inactive{display:none}#front-page-warning,#front-static-pages ul,.categorydiv ul.categorychecklist ul,.customlinkdiv ul.categorychecklist ul,.inline-editor ul.cat-checklist ul,.posttypediv ul.categorychecklist ul,.taxonomydiv ul.categorychecklist ul,ul.export-filters{margin-left:18px}ul.categorychecklist li{margin:0;padding:0;line-height:22px;word-wrap:break-word}.categorydiv .tabs-panel,.customlinkdiv .tabs-panel,.posttypediv .tabs-panel,.taxonomydiv .tabs-panel{border-width:3px;border-style:solid}.form-wrap label{display:block;padding:2px 0}.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field input[type=number],.form-field input[type=search],.form-field input[type=tel],.form-field input[type=url],.form-field textarea{border-style:solid;border-width:1px;width:95%}.form-wrap p,p.description{margin:2px 0 5px;color:#666}.form-wrap p,p.description,p.help,span.description{font-size:13px;font-style:italic}.form-wrap .form-field{margin:1em 0;padding:0}.form-wrap .form-field #parent{max-width:100%}.col-wrap h2{margin:12px 0;font-size:1.1em}.col-wrap p.submit{margin-top:-10px}.edit-term-notes{margin-top:2em}#poststuff .tagsdiv .howto{margin:0 0 6px}.ajaxtag .newtag{position:relative}.tagsdiv .newtag{width:180px}.tagsdiv .the-tags{display:block;height:60px;margin:0 auto;overflow:auto;width:260px}#post-body-content .tagsdiv .the-tags{margin:0 5px}p.popular-tags{border:none;line-height:2em;padding:8px 12px 12px;text-align:justify}p.popular-tags a{padding:0 3px}.tagcloud{width:97%;margin:0 0 40px;text-align:justify}.tagcloud h2{margin:2px 0 12px}.the-tagcloud ul{margin:0}.the-tagcloud ul li{display:inline-block}.ac_results{display:none;margin:-1px 0 0;padding:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;background-color:#fff}.wp-customizer .ac_results{z-index:500000}.ac_results li{margin:0;padding:5px 10px;white-space:nowrap;text-align:left}.ac_over .ac_match,.ac_results .ac_over{background-color:#0073aa;color:#fff;cursor:pointer}.ac_match{text-decoration:underline}#edittag{max-width:800px}.edit-tag-actions{margin-top:20px;overflow:hidden;padding:10px;margin-right:10px}.comment-php .wp-editor-area{height:200px}.comment-ays td,.comment-ays th{padding:10px 15px}.comment-ays .comment-content ul{list-style:outside;margin-left:2em}.comment-ays .comment-content a[href]:after{content:'(' attr(href) ')';display:inline-block;padding:0 4px;color:#72777C;font-size:13px;word-break:break-all}.comment-ays .comment-content p.edit-comment{margin-top:10px}.comment-ays .comment-content p.edit-comment a[href]:after{content:'';padding:0}#comment-status-radio label,.links-table td,.links-table th{padding:5px 0}.comment-ays-submit .button-cancel{margin-left:1em}.spam-undo-inside,.trash-undo-inside{margin:1px 8px 1px 0;line-height:16px}.spam-undo-inside .avatar,.trash-undo-inside .avatar{height:20px;width:20px;margin-right:8px;vertical-align:middle}.stuffbox .editcomment{clear:none}#comment-status-radio p{margin:3px 0 5px}#comment-status-radio input{margin:2px 3px 5px 0;vertical-align:middle}table.links-table{width:100%;border-spacing:0}.links-table th{font-weight:400;text-align:left;vertical-align:top;min-width:80px;width:20%;word-wrap:break-word}.links-table td label{margin-right:8px}.links-table td input[type=text],.links-table td textarea{width:100%}.links-table #link_rel{max-width:280px}#qt_content_dfw,#wp-content-wrap .mce-wp-dfw{display:none}.wp-editor-expand #qt_content_dfw,.wp-editor-expand #wp-content-wrap .mce-wp-dfw{display:inline-block}.focus-on #screen-meta,.focus-on #screen-meta-links,.focus-on #wp-toolbar,.focus-on #wpfooter,.focus-on .page-title-action,.focus-on .postbox-container>*,.focus-on .update-nag,.focus-on .wrap>h1,.focus-on div.error,.focus-on div.notice,.focus-on div.updated{opacity:0;transition-duration:.6s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-on #wp-toolbar{opacity:.3}.focus-off #screen-meta,.focus-off #screen-meta-links,.focus-off #wp-toolbar,.focus-off #wpfooter,.focus-off .page-title-action,.focus-off .postbox-container>*,.focus-off .update-nag,.focus-off .wrap>h1,.focus-off div.error,.focus-off div.notice,.focus-off div.updated{opacity:1;transition-duration:.2s;transition-property:opacity;transition-timing-function:ease-in-out}.focus-off #wp-toolbar{-webkit-transform:translate(0,0)}.focus-on #adminmenuback,.focus-on #adminmenuwrap{transition-duration:.6s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.focus-off #adminmenuback,.focus-off #adminmenuwrap{-webkit-transform:translateX(0);transform:translateX(0);transition-duration:.2s;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:ease-in-out}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){#content-resize-handle,#post-body .wp_themeSkin .mceStatusbar a.mceResize{background:url(../images/resize-2x.gif) right bottom no-repeat;background-size:11px 11px}.rtl #content-resize-handle,.rtl #post-body .wp_themeSkin .mceStatusbar a.mceResize{background-image:url(../images/resize-rtl-2x.gif);background-position:left bottom}}@media only screen and (max-width:850px){#poststuff{min-width:0}#wpbody-content #poststuff #post-body{margin:0}#wpbody-content #post-body.columns-2 #postbox-container-1{margin-right:0;width:100%}#poststuff #postbox-container-1 #side-sortables:empty,#poststuff #postbox-container-1 .empty-container{border:0;height:0;min-height:0}#poststuff #post-body.columns-2 #side-sortables{min-height:0;width:auto}.columns-prefs,.screen-layout{display:none}}@media screen and (max-width:782px){.wp-core-ui .edit-tag-actions .button-primary{margin-bottom:0}#post-body-content{min-width:0}#titlediv #title-prompt-text{padding:10px}#poststuff .stuffbox>h3,#poststuff h2,#poststuff h3.hndle{padding:12px}.post-format-options{padding-right:0}.post-format-options a{margin-right:5px;margin-bottom:5px;min-width:52px}.post-format-options .post-format-title{font-size:11px}.post-format-options a div{height:28px;width:28px}.post-format-options a div:before{font-size:26px!important}#post-visibility-select{line-height:280%}.wp-core-ui .save-post-visibility,.wp-core-ui .save-timestamp{vertical-align:middle;margin-right:15px}.timestamp-wrap select#mm{display:block;width:100%;margin-bottom:10px}.timestamp-wrap #aa,.timestamp-wrap #hh,.timestamp-wrap #jj,.timestamp-wrap #mn{padding:12px 3px;font-size:14px;margin-bottom:5px;width:auto;text-align:center}ul.category-tabs{margin:30px 0 15px}.tagsdiv .newtag,ul.categorychecklist li{margin-bottom:15px}ul.category-tabs li.tabs{padding:15px}ul.categorychecklist ul{margin-top:15px}.category-add input[type=text],.category-add select{max-width:none;margin-bottom:15px}.tagsdiv .newtag{width:100%;height:auto}.tagchecklist{margin:25px 10px}.tagchecklist>li{font-size:16px;line-height:1.4}#commentstatusdiv p{line-height:2.8}.mceToolbar *{white-space:normal!important}.mceToolbar td,.mceToolbar tr{float:left!important}.wp_themeSkin a.mceButton{width:30px;height:30px}.wp_themeSkin .mceButton .mceIcon{margin-top:5px;margin-left:5px}.wp_themeSkin .mceSplitButton{margin-top:1px}.wp_themeSkin .mceSplitButton td a.mceAction{padding:6px 3px 6px 6px}.wp_themeSkin .mceSplitButton td a.mceOpen,.wp_themeSkin .mceSplitButtonEnabled:hover td a.mceOpen{padding-top:6px;padding-bottom:6px;background-position:1px 6px}.wp_themeSkin table.mceListBox{margin:5px}div.quicktags-toolbar input{padding:10px 20px}button.wp-switch-editor{font-size:16px;line-height:1em;margin:7px 0 0 7px;padding:8px 12px}#wp-content-media-buttons a{font-size:14px;padding:6px 10px}.wp-media-buttons span.jetpack-contact-form-icon,.wp-media-buttons span.wp-media-buttons-icon{width:22px!important;margin-left:-2px!important}.wp-media-buttons #insert-jetpack-contact-form span.jetpack-contact-form-icon:before,.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font-size:20px!important}#content_wp_fullscreen{display:none}.misc-pub-section{padding:20px 10px}.misc-pub-section>a{float:right;font-size:16px}#delete-action,#publishing-action{line-height:47px}#publishing-action .spinner{float:none;margin-top:-2px}.comment-ays td,.comment-ays th{padding-bottom:0}.comment-ays td{padding-top:6px}.links-table #link_rel{max-width:none}.links-table td,.links-table th{padding:10px 0}.privacy-text-box{width:auto}.privacy-text-box-toc{float:none;width:auto;height:100%}.privacy-text-section a.return-to-top{float:none;margin:0}}
\ No newline at end of file
clear: both;
}
+/*------------------------------------------------------------------------------
+ Privacy Policy settings screen
+------------------------------------------------------------------------------*/
+.tools-privacy-policy-page form {
+ margin-bottom: 1.3em;
+}
+
+.tools-privacy-policy-page input.button,
+.tools-privacy-policy-page select {
+ margin-right: 6px;
+}
+
+.tools-privacy-edit {
+ margin: 1.5em 0;
+}
+
+.tools-privacy-policy-page span {
+ line-height: 2em;
+}
+
+.privacy_requests .column-email {
+ width: 40%;
+}
+
+.privacy_requests .column-type {
+ text-align: center;
+}
+
+.privacy_requests thead td:first-child,
+.privacy_requests tfoot td:first-child {
+ border-right: 4px solid #fff;
+}
+
+.privacy_requests tbody th {
+ border-right: 4px solid #fff;
+ background: #fff;
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+}
+
+.privacy_requests tbody .has-request-results th {
+ box-shadow: none;
+}
+
+.privacy_requests tbody .request-results th .notice {
+ margin: 0 0 5px;
+}
+
+.privacy_requests tbody td {
+ background: #fff;
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+}
+
+.privacy_requests tbody .has-request-results td {
+ box-shadow: none;
+}
+
+.privacy_requests .next_steps .button {
+ height: auto;
+ line-height: 1.5;
+ padding: 4px 10px;
+ word-break: break-all;
+ white-space: unset;
+}
+
+.privacy_requests .status-request-confirmed th,
+.privacy_requests .status-request-confirmed td {
+ background-color: #f7fcfe;
+ border-right-color: #00a0d2;
+}
+
+.privacy_requests .status-request-failed th,
+.privacy_requests .status-request-failed td {
+ background-color: #fef7f1;
+ border-right-color: #d64d21;
+}
+
+.privacy_requests .export_personal_data_failed a {
+ vertical-align: baseline;
+}
+
+.status-label {
+ font-weight: bold;
+}
+
+.status-label.status-request-pending {
+ font-weight: normal;
+ font-style: italic;
+ color: #6c7781;
+}
+
+.status-label.status-request-failed {
+ color: #aa0000;
+ font-weight: bold;
+}
+
+.wp-privacy-request-form {
+ clear: both;
+}
+
+.wp-privacy-request-form-field {
+ margin: 1.5em 0;
+}
+
+.wp-privacy-request-form label {
+ font-weight: bold;
+ line-height: 1.5;
+ padding-bottom: .5em;
+ display: block;
+}
+
+.wp-privacy-request-form input {
+ line-height: 1.5;
+ margin: 0;
+}
+
+.email-personal-data::before {
+ display: inline-block;
+ font: normal 20px/1 dashicons;
+ margin: 3px -2px 0 5px;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ vertical-align: top;
+}
+
+.email-personal-data--sending::before {
+ color: #f56e28;
+ content: "\f463";
+ -webkit-animation: rotation 2s infinite linear;
+ animation: rotation 2s infinite linear;
+}
+
+.email-personal-data--sent::before {
+ color: #79ba49;
+ content: "\f147";
+}
+
/* =Media Queries
-------------------------------------------------------------- */
max-width: 6.25em;
margin: 0;
}
+
+ /* Privacy Policy settings screen */
+ .tools-privacy-policy-page form.wp-create-privacy-page {
+ margin-bottom: 1em;
+ }
+
+ .tools-privacy-policy-page input#set-page,
+ .tools-privacy-policy-page select {
+ margin: 10px 0 0;
+ }
+
+ .tools-privacy-policy-page .wp-create-privacy-page span {
+ display: block;
+ margin-bottom: 1em;
+ }
+
+ .tools-privacy-policy-page .wp-create-privacy-page .button {
+ margin-right: 0;
+ }
+
+ .wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column) {
+ display: table-cell;
+ }
+
+ .wp-list-table.privacy_requests.widefat th input,
+ .wp-list-table.privacy_requests.widefat thead td input {
+ margin-right: 5px;
+ }
}
@media only screen and (max-width: 768px) {
margin-left: 0.5em;
}
}
+
+@-webkit-keyframes rotation {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(-359deg);
+ transform: rotate(-359deg);
+ }
+}
+
+@keyframes rotation {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(-359deg);
+ transform: rotate(-359deg);
+ }
+}
/*! This file is auto-generated */
-#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 0 0 4px;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-left:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]:checked:before{float:right;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px -4px 0 0;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-right:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 -29px 0 6px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border:none}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:right;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:left}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:right;margin-left:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-right:1em}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 1px 5px 5px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:left center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:right;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#23282d;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:right;padding:20px 0 20px 10px;width:200px;line-height:1.3;font-weight:600}.form-table .td-full,.form-table th.th-full{width:auto;padding:20px 0 20px 10px;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-left:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-left:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:0 0;-webkit-transform:skew(-20deg) rotate(-6deg);transform:skew(-20deg) rotate(-6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(-20deg) rotate(-9deg);transform:skew(-20deg) rotate(-9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-right:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 7px 6px 8px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:right;margin-left:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:left}.request-filesystem-credentials-dialog label[for=ftp]{margin-left:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-left:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-left:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=text],.form-table td input[type=password],.form-table td input[type=email],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:left;margin:-30px 0 0 3px}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-right:0}.form-table.permalink-structure td code{margin-right:32px}.form-table.permalink-structure td input[type=text]{margin-right:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-left:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;left:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;right:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-left:.5em}}
\ No newline at end of file
+#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 0 0 4px;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-left:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]:checked:before{float:right;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px -4px 0 0;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-right:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 -29px 0 6px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border:none}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:right;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:left}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:right;margin-left:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-right:1em}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 1px 5px 5px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:left center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:right;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#23282d;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:right;padding:20px 0 20px 10px;width:200px;line-height:1.3;font-weight:600}.form-table .td-full,.form-table th.th-full{width:auto;padding:20px 0 20px 10px;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-left:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-left:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.privacy_requests tbody th,.privacy_requests tfoot td:first-child,.privacy_requests thead td:first-child{border-right:4px solid #fff}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:0 0;-webkit-transform:skew(-20deg) rotate(-6deg);transform:skew(-20deg) rotate(-6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(-20deg) rotate(-9deg);transform:skew(-20deg) rotate(-9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-right:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 7px 6px 8px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:right;margin-left:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:left}.request-filesystem-credentials-dialog label[for=ftp]{margin-left:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-left:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}.tools-privacy-policy-page form{margin-bottom:1.3em}.tools-privacy-policy-page input.button,.tools-privacy-policy-page select{margin-right:6px}.tools-privacy-edit{margin:1.5em 0}.tools-privacy-policy-page span{line-height:2em}.privacy_requests .column-email{width:40%}.privacy_requests .column-type{text-align:center}.privacy_requests tbody th{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results th{box-shadow:none}.privacy_requests tbody .request-results th .notice{margin:0 0 5px}.privacy_requests tbody td{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results td{box-shadow:none}.privacy_requests .next_steps .button{height:auto;line-height:1.5;padding:4px 10px;word-break:break-all;white-space:unset}.privacy_requests .status-request-confirmed td,.privacy_requests .status-request-confirmed th{background-color:#f7fcfe;border-right-color:#00a0d2}.privacy_requests .status-request-failed td,.privacy_requests .status-request-failed th{background-color:#fef7f1;border-right-color:#d64d21}.privacy_requests .export_personal_data_failed a{vertical-align:baseline}.status-label{font-weight:700}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:700}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:700;line-height:1.5;padding-bottom:.5em;display:block}.wp-privacy-request-form input{line-height:1.5;margin:0}.email-personal-data::before{display:inline-block;font:400 20px/1 dashicons;margin:3px -2px 0 5px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.email-personal-data--sending::before{color:#f56e28;content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-left:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=text],.form-table td input[type=password],.form-table td input[type=email],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:left;margin:-30px 0 0 3px}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-right:0}.form-table.permalink-structure td code{margin-right:32px}.form-table.permalink-structure td input[type=text]{margin-right:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-left:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;left:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}.tools-privacy-policy-page form.wp-create-privacy-page{margin-bottom:1em}.tools-privacy-policy-page input#set-page,.tools-privacy-policy-page select{margin:10px 0 0}.tools-privacy-policy-page .wp-create-privacy-page span{display:block;margin-bottom:1em}.tools-privacy-policy-page .wp-create-privacy-page .button{margin-right:0}.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column){display:table-cell}.wp-list-table.privacy_requests.widefat th input,.wp-list-table.privacy_requests.widefat thead td input{margin-right:5px}}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;right:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-left:.5em}}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}
\ No newline at end of file
clear: both;
}
+/*------------------------------------------------------------------------------
+ Privacy Policy settings screen
+------------------------------------------------------------------------------*/
+.tools-privacy-policy-page form {
+ margin-bottom: 1.3em;
+}
+
+.tools-privacy-policy-page input.button,
+.tools-privacy-policy-page select {
+ margin-left: 6px;
+}
+
+.tools-privacy-edit {
+ margin: 1.5em 0;
+}
+
+.tools-privacy-policy-page span {
+ line-height: 2em;
+}
+
+.privacy_requests .column-email {
+ width: 40%;
+}
+
+.privacy_requests .column-type {
+ text-align: center;
+}
+
+.privacy_requests thead td:first-child,
+.privacy_requests tfoot td:first-child {
+ border-left: 4px solid #fff;
+}
+
+.privacy_requests tbody th {
+ border-left: 4px solid #fff;
+ background: #fff;
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+}
+
+.privacy_requests tbody .has-request-results th {
+ box-shadow: none;
+}
+
+.privacy_requests tbody .request-results th .notice {
+ margin: 0 0 5px;
+}
+
+.privacy_requests tbody td {
+ background: #fff;
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.1);
+}
+
+.privacy_requests tbody .has-request-results td {
+ box-shadow: none;
+}
+
+.privacy_requests .next_steps .button {
+ height: auto;
+ line-height: 1.5;
+ padding: 4px 10px;
+ word-break: break-all;
+ white-space: unset;
+}
+
+.privacy_requests .status-request-confirmed th,
+.privacy_requests .status-request-confirmed td {
+ background-color: #f7fcfe;
+ border-left-color: #00a0d2;
+}
+
+.privacy_requests .status-request-failed th,
+.privacy_requests .status-request-failed td {
+ background-color: #fef7f1;
+ border-left-color: #d64d21;
+}
+
+.privacy_requests .export_personal_data_failed a {
+ vertical-align: baseline;
+}
+
+.status-label {
+ font-weight: bold;
+}
+
+.status-label.status-request-pending {
+ font-weight: normal;
+ font-style: italic;
+ color: #6c7781;
+}
+
+.status-label.status-request-failed {
+ color: #aa0000;
+ font-weight: bold;
+}
+
+.wp-privacy-request-form {
+ clear: both;
+}
+
+.wp-privacy-request-form-field {
+ margin: 1.5em 0;
+}
+
+.wp-privacy-request-form label {
+ font-weight: bold;
+ line-height: 1.5;
+ padding-bottom: .5em;
+ display: block;
+}
+
+.wp-privacy-request-form input {
+ line-height: 1.5;
+ margin: 0;
+}
+
+.email-personal-data::before {
+ display: inline-block;
+ font: normal 20px/1 dashicons;
+ margin: 3px 5px 0 -2px;
+ speak: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ vertical-align: top;
+}
+
+.email-personal-data--sending::before {
+ color: #f56e28;
+ content: "\f463";
+ -webkit-animation: rotation 2s infinite linear;
+ animation: rotation 2s infinite linear;
+}
+
+.email-personal-data--sent::before {
+ color: #79ba49;
+ content: "\f147";
+}
+
/* =Media Queries
-------------------------------------------------------------- */
max-width: 6.25em;
margin: 0;
}
+
+ /* Privacy Policy settings screen */
+ .tools-privacy-policy-page form.wp-create-privacy-page {
+ margin-bottom: 1em;
+ }
+
+ .tools-privacy-policy-page input#set-page,
+ .tools-privacy-policy-page select {
+ margin: 10px 0 0;
+ }
+
+ .tools-privacy-policy-page .wp-create-privacy-page span {
+ display: block;
+ margin-bottom: 1em;
+ }
+
+ .tools-privacy-policy-page .wp-create-privacy-page .button {
+ margin-left: 0;
+ }
+
+ .wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column) {
+ display: table-cell;
+ }
+
+ .wp-list-table.privacy_requests.widefat th input,
+ .wp-list-table.privacy_requests.widefat thead td input {
+ margin-left: 5px;
+ }
}
@media only screen and (max-width: 768px) {
margin-right: 0.5em;
}
}
+
+@-webkit-keyframes rotation {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+@keyframes rotation {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
/*! This file is auto-generated */
-#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-right:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-left:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 6px 0 -29px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border:none}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:right}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 5px 5px 1px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 0}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:right center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:left;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#23282d;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table .td-full,.form-table th.th-full{width:auto;padding:20px 10px 20px 0;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-right:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-left:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 8px 6px 7px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:left;margin-right:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:right}.request-filesystem-credentials-dialog label[for=ftp]{margin-right:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-right:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=text],.form-table td input[type=password],.form-table td input[type=email],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:right;margin:-30px 3px 0 0}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-left:0}.form-table.permalink-structure td code{margin-left:32px}.form-table.permalink-structure td input[type=text]{margin-left:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-right:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;right:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;left:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-right:.5em}}
\ No newline at end of file
+#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-right:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-left:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 6px 0 -29px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border:none}form p.submit a.cancel:hover{text-decoration:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:right}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 5px 5px 1px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 0}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:right center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:left;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#23282d;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table .td-full,.form-table th.th-full{width:auto;padding:20px 10px 20px 0;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-right:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.privacy_requests tbody th,.privacy_requests tfoot td:first-child,.privacy_requests thead td:first-child{border-left:4px solid #fff}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-left:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 8px 6px 7px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:left;margin-right:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:right}.request-filesystem-credentials-dialog label[for=ftp]{margin-right:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-right:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}.tools-privacy-policy-page form{margin-bottom:1.3em}.tools-privacy-policy-page input.button,.tools-privacy-policy-page select{margin-left:6px}.tools-privacy-edit{margin:1.5em 0}.tools-privacy-policy-page span{line-height:2em}.privacy_requests .column-email{width:40%}.privacy_requests .column-type{text-align:center}.privacy_requests tbody th{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results th{box-shadow:none}.privacy_requests tbody .request-results th .notice{margin:0 0 5px}.privacy_requests tbody td{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results td{box-shadow:none}.privacy_requests .next_steps .button{height:auto;line-height:1.5;padding:4px 10px;word-break:break-all;white-space:unset}.privacy_requests .status-request-confirmed td,.privacy_requests .status-request-confirmed th{background-color:#f7fcfe;border-left-color:#00a0d2}.privacy_requests .status-request-failed td,.privacy_requests .status-request-failed th{background-color:#fef7f1;border-left-color:#d64d21}.privacy_requests .export_personal_data_failed a{vertical-align:baseline}.status-label{font-weight:700}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:700}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:700;line-height:1.5;padding-bottom:.5em;display:block}.wp-privacy-request-form input{line-height:1.5;margin:0}.email-personal-data::before{display:inline-block;font:400 20px/1 dashicons;margin:3px 5px 0 -2px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.email-personal-data--sending::before{color:#f56e28;content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=text],.form-table td input[type=password],.form-table td input[type=email],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:right;margin:-30px 3px 0 0}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-left:0}.form-table.permalink-structure td code{margin-left:32px}.form-table.permalink-structure td input[type=text]{margin-left:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-right:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;right:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}.tools-privacy-policy-page form.wp-create-privacy-page{margin-bottom:1em}.tools-privacy-policy-page input#set-page,.tools-privacy-policy-page select{margin:10px 0 0}.tools-privacy-policy-page .wp-create-privacy-page span{display:block;margin-bottom:1em}.tools-privacy-policy-page .wp-create-privacy-page .button{margin-left:0}.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column){display:table-cell}.wp-list-table.privacy_requests.widefat th input,.wp-list-table.privacy_requests.widefat thead td input{margin-left:5px}}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;left:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-right:.5em}}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}
\ No newline at end of file
}
.login .message,
+.login .success,
.login #login_error {
border-right: 4px solid #00a0d2;
padding: 12px;
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
}
+.login .success {
+ border-right-color: #46b450;
+}
+
.login #login_error {
border-right-color: #dc3232;
}
color: #124964;
}
+.login .privacy-policy-page-link {
+ text-align: center;
+ width: 100%;
+ margin: 5em 0 2em;
+}
+
.login form .input,
.login input[type="text"] {
font-size: 24px;
/*! This file is auto-generated */
-#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}.login h1 a,form p.submit a.cancel:hover{text-decoration:none}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 0 0 4px;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-left:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]:checked:before{float:right;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px -4px 0 0;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-right:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 -29px 0 6px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border:none}p.submit{text-align:right;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:left}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:right;margin-left:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-right:1em}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 1px 5px 5px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:left center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:right;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#23282d;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:right;padding:20px 0 20px 10px;width:200px;line-height:1.3;font-weight:600}.form-table .td-full,.form-table th.th-full{width:auto;padding:20px 0 20px 10px;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-left:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-left:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.login form,.login h1 a{overflow:hidden;font-weight:400}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:0 0;-webkit-transform:skew(-20deg) rotate(-6deg);transform:skew(-20deg) rotate(-6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(-20deg) rotate(-9deg);transform:skew(-20deg) rotate(-9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-right:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 7px 6px 8px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:right;margin-left:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:left}.request-filesystem-credentials-dialog label[for=ftp]{margin-left:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-left:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-left:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=text],.form-table td input[type=password],.form-table td input[type=email],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:left;margin:-30px 0 0 3px}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-right:0}.form-table.permalink-structure td code{margin-right:32px}.form-table.permalink-structure td input[type=text]{margin-right:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-left:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;left:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}}.locale-he-il em,.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}.locale-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button,.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;right:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-left:.5em}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6{font-family:Arial,sans-serif;font-weight:600}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-weight:600}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .spinner,.locale-de-de-formal #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru #adminmenu{width:inherit}.locale-ru-ru #adminmenu,.locale-ru-ru #wpbody{margin-right:0}.locale-ru-ru .inline-edit-row fieldset label span.title,.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-left:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}@media screen and (max-width:782px){.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap,.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:0}}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;min-width:0;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em}a{color:#0073aa;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}p{line-height:1.5}.login #login_error,.login .message{border-right:4px solid #00a0d2;padding:12px;margin-right:0;margin-bottom:20px;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login #login_error{border-right-color:#dc3232}#loginform p.submit,.login-action-lostpassword p.submit{border:none;margin:-10px 0 20px}.login *{margin:0;padding:0}.login .password-input-wrapper{display:table}.login .input.password-input{display:table-cell;margin:0}.login .pw-weak{margin-bottom:15px}.login .button.button-secondary{display:table-cell;border-radius:0;vertical-align:middle}.login form{margin-top:20px;margin-right:0;padding:26px 24px 46px;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.13)}.login form .forgetmenot{font-weight:400;float:right;margin-bottom:0}.login .button-primary{float:left}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#72777c;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1{text-align:center}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:84px;background-position:center top;background-repeat:no-repeat;color:#444;height:84px;font-size:20px;line-height:1.3em;margin:0 auto 25px;padding:0;width:84px;text-indent:-9999px;outline:0;display:block}#login{width:320px;padding:8% 0 0;margin:auto}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#555d66}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#00a0d2}.login #backtoblog a:focus,.login #nav a:focus,.login h1 a:focus{color:#124964}.login form .input,.login input[type=text]{font-size:24px;width:100%;padding:3px;margin:2px 0 16px 6px}.login form .input,.login form input[type=checkbox],.login input[type=text]{background:#fbfbfb}.ie7 .login form .input,.ie8 .login form .input{font-family:sans-serif}.login-action-rp input[type=text]{box-shadow:none;margin:0}.login #pass-strength-result{font-weight:600;margin:-1px 0 16px 5px;padding:6px 5px;text-align:center;width:100%}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}@-ms-viewport{width:device-width}@media screen and (max-height:550px){#login{padding:20px 0}}@media screen and (max-width:782px){.interim-login input[type=checkbox]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px -4px 0 0}}
\ No newline at end of file
+#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}.login h1 a,form p.submit a.cancel:hover{text-decoration:none}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 0 0 4px;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-left:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]:checked:before{float:right;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px -4px 0 0;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-right:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 -29px 0 6px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border:none}p.submit{text-align:right;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:left}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 0 0 8px}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:right;margin-left:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-right:1em}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 1px 5px 5px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:left;margin:0}.network-admin.themes-php p.search-box{clear:right}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:right;height:28px;margin:0 0 0 4px}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:left center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 14px 0 0}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:right;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#23282d;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:right;padding:20px 0 20px 10px;width:200px;line-height:1.3;font-weight:600}.form-table .td-full,.form-table th.th-full{width:auto;padding:20px 0 20px 10px;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-left:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-left:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.login form,.login h1 a{overflow:hidden;font-weight:400}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.privacy_requests tbody th,.privacy_requests tfoot td:first-child,.privacy_requests thead td:first-child{border-right:4px solid #fff}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;left:10px;bottom:9px;background:0 0;-webkit-transform:skew(-20deg) rotate(-6deg);transform:skew(-20deg) rotate(-6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(-20deg) rotate(-9deg);transform:skew(-20deg) rotate(-9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 9px 8px 12px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-left:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-right:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 7px 6px 8px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:right;margin-left:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:left}.login #pass-strength-result,.login h1,.privacy_requests .column-type{text-align:center}.request-filesystem-credentials-dialog label[for=ftp]{margin-left:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-left:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}.tools-privacy-policy-page form{margin-bottom:1.3em}.tools-privacy-policy-page input.button,.tools-privacy-policy-page select{margin-right:6px}.tools-privacy-edit{margin:1.5em 0}.tools-privacy-policy-page span{line-height:2em}.privacy_requests .column-email{width:40%}.privacy_requests tbody th{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results th{box-shadow:none}.privacy_requests tbody .request-results th .notice{margin:0 0 5px}.privacy_requests tbody td{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results td{box-shadow:none}.privacy_requests .next_steps .button{height:auto;line-height:1.5;padding:4px 10px;word-break:break-all;white-space:unset}.privacy_requests .status-request-confirmed td,.privacy_requests .status-request-confirmed th{background-color:#f7fcfe;border-right-color:#00a0d2}.privacy_requests .status-request-failed td,.privacy_requests .status-request-failed th{background-color:#fef7f1;border-right-color:#d64d21}.privacy_requests .export_personal_data_failed a{vertical-align:baseline}.status-label{font-weight:700}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:700}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:700;line-height:1.5;padding-bottom:.5em;display:block}.wp-privacy-request-form input{line-height:1.5;margin:0}.email-personal-data::before{display:inline-block;font:400 20px/1 dashicons;margin:3px -2px 0 5px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.email-personal-data--sending::before{color:#f56e28;content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-left:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=text],.form-table td input[type=password],.form-table td input[type=email],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:left;margin:-30px 0 0 3px}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-right:0}.form-table.permalink-structure td code{margin-right:32px}.form-table.permalink-structure td input[type=text]{margin-right:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-left:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;left:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}.tools-privacy-policy-page form.wp-create-privacy-page{margin-bottom:1em}.tools-privacy-policy-page input#set-page,.tools-privacy-policy-page select{margin:10px 0 0}.tools-privacy-policy-page .wp-create-privacy-page span{display:block;margin-bottom:1em}.tools-privacy-policy-page .wp-create-privacy-page .button{margin-right:0}.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column){display:table-cell}.wp-list-table.privacy_requests.widefat th input,.wp-list-table.privacy_requests.widefat thead td input{margin-right:5px}}.locale-he-il em,.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}.locale-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button,.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;right:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-left:.5em}}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6{font-family:Arial,sans-serif;font-weight:600}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-weight:600}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .spinner,.locale-de-de-formal #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru #adminmenu{width:inherit}.locale-ru-ru #adminmenu,.locale-ru-ru #wpbody{margin-right:0}.locale-ru-ru .inline-edit-row fieldset label span.title,.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-left:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-right:8em}@media screen and (max-width:782px){.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap,.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-right:0}}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;min-width:0;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em}a{color:#0073aa;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}p{line-height:1.5}.login #login_error,.login .message,.login .success{border-right:4px solid #00a0d2;padding:12px;margin-right:0;margin-bottom:20px;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login .success{border-right-color:#46b450}.login #login_error{border-right-color:#dc3232}#loginform p.submit,.login-action-lostpassword p.submit{border:none;margin:-10px 0 20px}.login *{margin:0;padding:0}.login .password-input-wrapper{display:table}.login .input.password-input{display:table-cell;margin:0}.login .pw-weak{margin-bottom:15px}.login .button.button-secondary{display:table-cell;border-radius:0;vertical-align:middle}.login form{margin-top:20px;margin-right:0;padding:26px 24px 46px;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.13)}.login form .forgetmenot{font-weight:400;float:right;margin-bottom:0}.login .button-primary{float:left}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#72777c;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:84px;background-position:center top;background-repeat:no-repeat;color:#444;height:84px;font-size:20px;line-height:1.3em;margin:0 auto 25px;padding:0;width:84px;text-indent:-9999px;outline:0;display:block}#login{width:320px;padding:8% 0 0;margin:auto}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#555d66}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#00a0d2}.login #backtoblog a:focus,.login #nav a:focus,.login h1 a:focus{color:#124964}.login .privacy-policy-page-link{text-align:center;width:100%;margin:5em 0 2em}.login form .input,.login input[type=text]{font-size:24px;width:100%;padding:3px;margin:2px 0 16px 6px}.login form .input,.login form input[type=checkbox],.login input[type=text]{background:#fbfbfb}.ie7 .login form .input,.ie8 .login form .input{font-family:sans-serif}.login-action-rp input[type=text]{box-shadow:none;margin:0}.login #pass-strength-result{font-weight:600;margin:-1px 0 16px 5px;padding:6px 5px;width:100%}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}@-ms-viewport{width:device-width}@media screen and (max-height:550px){#login{padding:20px 0}}@media screen and (max-width:782px){.interim-login input[type=checkbox]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px -4px 0 0}}
\ No newline at end of file
}
.login .message,
+.login .success,
.login #login_error {
border-left: 4px solid #00a0d2;
padding: 12px;
box-shadow: 0 1px 1px 0 rgba(0,0,0,0.1);
}
+.login .success {
+ border-left-color: #46b450;
+}
+
.login #login_error {
border-left-color: #dc3232;
}
color: #124964;
}
+.login .privacy-policy-page-link {
+ text-align: center;
+ width: 100%;
+ margin: 5em 0 2em;
+}
+
.login form .input,
.login input[type="text"] {
font-size: 24px;
/*! This file is auto-generated */
-#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}.login h1 a,form p.submit a.cancel:hover{text-decoration:none}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-right:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-left:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 6px 0 -29px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:right}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 5px 5px 1px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 0}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:right center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:left;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#23282d;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table .td-full,.form-table th.th-full{width:auto;padding:20px 10px 20px 0;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-right:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.login form,.login h1 a{overflow:hidden;font-weight:400}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-left:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 8px 6px 7px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:left;margin-right:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:right}.request-filesystem-credentials-dialog label[for=ftp]{margin-right:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-right:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=text],.form-table td input[type=password],.form-table td input[type=email],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:right;margin:-30px 3px 0 0}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-left:0}.form-table.permalink-structure td code{margin-left:32px}.form-table.permalink-structure td input[type=text]{margin-left:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-right:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;right:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}}.locale-he-il em,.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}.locale-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button,.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;left:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-right:.5em}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6{font-family:Arial,sans-serif;font-weight:600}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-weight:600}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .spinner,.locale-de-de-formal #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru #adminmenu{width:inherit}.locale-ru-ru #adminmenu,.locale-ru-ru #wpbody{margin-left:0}.locale-ru-ru .inline-edit-row fieldset label span.title,.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-right:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}@media screen and (max-width:782px){.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap,.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:0}}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;min-width:0;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em}a{color:#0073aa;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}p{line-height:1.5}.login #login_error,.login .message{border-left:4px solid #00a0d2;padding:12px;margin-left:0;margin-bottom:20px;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login #login_error{border-left-color:#dc3232}#loginform p.submit,.login-action-lostpassword p.submit{border:none;margin:-10px 0 20px}.login *{margin:0;padding:0}.login .password-input-wrapper{display:table}.login .input.password-input{display:table-cell;margin:0}.login .pw-weak{margin-bottom:15px}.login .button.button-secondary{display:table-cell;border-radius:0;vertical-align:middle}.login form{margin-top:20px;margin-left:0;padding:26px 24px 46px;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.13)}.login form .forgetmenot{font-weight:400;float:left;margin-bottom:0}.login .button-primary{float:right}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#72777c;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1{text-align:center}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:84px;background-position:center top;background-repeat:no-repeat;color:#444;height:84px;font-size:20px;line-height:1.3em;margin:0 auto 25px;padding:0;width:84px;text-indent:-9999px;outline:0;display:block}#login{width:320px;padding:8% 0 0;margin:auto}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#555d66}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#00a0d2}.login #backtoblog a:focus,.login #nav a:focus,.login h1 a:focus{color:#124964}.login form .input,.login input[type=text]{font-size:24px;width:100%;padding:3px;margin:2px 6px 16px 0}.login form .input,.login form input[type=checkbox],.login input[type=text]{background:#fbfbfb}.ie7 .login form .input,.ie8 .login form .input{font-family:sans-serif}.login-action-rp input[type=text]{box-shadow:none;margin:0}.login #pass-strength-result{font-weight:600;margin:-1px 5px 16px 0;padding:6px 5px;text-align:center;width:100%}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}@-ms-viewport{width:device-width}@media screen and (max-height:550px){#login{padding:20px 0}}@media screen and (max-width:782px){.interim-login input[type=checkbox]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px 0 0 -4px}}
\ No newline at end of file
+#your-profile label+a,.wp-admin select,fieldset label,label{vertical-align:middle}#pass-strength-result,.color-option,input,textarea{box-sizing:border-box}#pressthis-code-wrap,textarea{overflow:auto}.login h1 a,form p.submit a.cancel:hover{text-decoration:none}input[type=text],input[type=search],input[type=radio],input[type=tel],input[type=time],input[type=url],input[type=week],input[type=password],input[type=checkbox],input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],select,textarea{border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);background-color:#fff;color:#32373c;outline:0;transition:50ms border-color ease-in-out}input[type=text]:focus,input[type=search]:focus,input[type=radio]:focus,input[type=tel]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,input[type=password]:focus,input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=url],input[type=email]{direction:ltr}input[type=number]{height:28px;line-height:1}input[type=radio],input[type=checkbox]{border:1px solid #b4b9be;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;padding:0!important;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-appearance:none;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);transition:.05s border-color ease-in-out}input[type=radio]:checked+label:before{color:#82878c}.wp-core-ui input[type=reset]:active,.wp-core-ui input[type=reset]:hover{color:#00a0d2}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox],td>input[type=checkbox]{margin-top:0}.wp-admin p label input[type=checkbox]{margin-top:-4px}.wp-admin p label input[type=radio]{margin-top:-2px}input[type=radio]{border-radius:50%;margin-right:4px;line-height:10px}input[type=radio]:checked:before,input[type=checkbox]:checked:before{float:left;display:inline-block;vertical-align:middle;width:16px;font:400 21px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#pass1-text,.pw-weak,.show-password #pass1{display:none}input[type=checkbox]:checked:before{content:"\f147";margin:-3px 0 0 -4px;color:#1e8cbe}input[type=radio]:checked:before{content:"\2022";text-indent:-9999px;border-radius:50px;font-size:24px;width:6px;height:6px;margin:4px;line-height:16px;background-color:#1e8cbe}@-moz-document url-prefix(){.form-table input.tog,input[type=radio],input[type=checkbox]{margin-bottom:-1px}}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}.ie8 input[type=password]{font-family:sans-serif}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{font-size:14px;border-radius:0}textarea{padding:2px 6px;line-height:1.4;resize:vertical}.wp-admin input[type=file]{padding:3px 0;cursor:pointer}label{cursor:pointer}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}textarea.code{line-height:1.4;padding:4px 6px 1px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}::-webkit-input-placeholder{color:#72777c}::-moz-placeholder{color:#72777c;opacity:1}:-ms-input-placeholder{color:#72777c}.form-invalid input,.form-invalid input:focus,.form-invalid select,.form-invalid select:focus{border-color:#dc3232!important;box-shadow:0 0 2px rgba(204,0,0,.8)}.form-table .form-required.form-invalid td:after{content:"\f534";font:400 20px/1 dashicons;color:#dc3232;margin-left:-25px;vertical-align:middle}.form-table .form-required.user-pass1-wrap.form-invalid td:after{content:''}.form-table .form-required.user-pass1-wrap.form-invalid .password-input-wrapper:after{content:'\f534';font:400 20px/1 dashicons;color:#dc3232;margin:0 6px 0 -29px;vertical-align:middle}.form-input-tip{color:#666}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:rgba(255,255,255,.5);border-color:rgba(222,222,222,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:0 0;box-shadow:none;cursor:default}input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before,input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before{opacity:.7}.wp-admin select{padding:2px;line-height:28px;height:28px}.wp-admin .button-cancel{padding:0 5px;line-height:2}.meta-box-sortables select{max-width:100%}.wp-admin select[multiple]{height:auto}.submit{padding:1.5em 0;margin:5px 0;border-bottom-left-radius:3px;border-bottom-right-radius:3px;border:none}p.submit{text-align:left;max-width:100%;margin-top:20px;padding-top:10px}.textright p.submit{border:none;text-align:right}table.form-table+input+input+p.submit,table.form-table+input+p.submit,table.form-table+p.submit{border-top:none;padding-top:0}#major-publishing-actions input,#minor-publishing-actions .preview,#minor-publishing-actions input{text-align:center}input.all-options,textarea.all-options{width:250px}input.large-text,textarea.large-text{width:99%}.regular-text{width:25em}input.small-text{width:50px;padding:1px 6px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}#doaction,#doaction2,#post-query-submit{margin:1px 8px 0 0}.tablenav #changeit,.tablenav #clear-recent-list,.tablenav #delete_all,.wp-filter #delete_all{margin-top:1px}.tablenav .actions select{float:left;margin-right:6px;max-width:200px}.ie8 .tablenav .actions select{width:155px}.ie8 .tablenav .actions select#cat{width:200px}#timezone_string option{margin-left:1em}button.wp-hide-pw>.dashicons{position:relative;top:3px}.options-media-php [for*="_size_"]{min-width:10em;vertical-align:baseline}.options-media-php .small-text[name*="_size_"]{margin:0 0 1em}#misc-publishing-actions label{vertical-align:baseline}#pass-strength-result{background-color:#eee;border:1px solid #ddd;color:#23282d;margin:-2px 5px 5px 1px;padding:3px 5px;text-align:center;width:25em;opacity:0}#pass-strength-result.short{background-color:#f1adad;border-color:#e35b5b;opacity:1}#pass-strength-result.bad{background-color:#fbc5a9;border-color:#f78b53;opacity:1}#pass-strength-result.good{background-color:#ffe399;border-color:#ffc733;opacity:1}#pass-strength-result.strong{background-color:#c1e1b9;border-color:#83c373;opacity:1}#pass1-text.short,#pass1.short{border-color:#e35b5b}#pass1-text.bad,#pass1.bad{border-color:#f78b53}#pass1-text.good,#pass1.good{border-color:#ffc733}#pass1-text.strong,#pass1.strong{border-color:#83c373}.indicator-hint{padding-top:8px}.show-password #pass1-text{display:inline-block}.form-table span.description.important{font-size:12px}p.search-box{float:right;margin:0}.network-admin.themes-php p.search-box{clear:left}.search-box input[name="s"],.tablenav .search-plugins input[name="s"],.tagsdiv .newtag{float:left;height:28px;margin:0 4px 0 0}.js.plugins-php .search-box .wp-filter-search{margin:0;width:280px;font-size:16px;font-weight:300;line-height:1.5;padding:3px 5px;height:32px}input[type=text].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading{background-image:url(../images/loading.gif);background-repeat:no-repeat;background-position:right center;visibility:visible}input.ui-autocomplete-input.open{border-bottom-color:transparent}ul#add-to-blog-users{margin:0 0 0 14px}.ui-autocomplete{padding:0;margin:0;list-style:none;position:absolute;z-index:10000;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete li{margin-bottom:0;padding:4px 10px;white-space:nowrap;text-align:left;cursor:pointer}.ui-autocomplete .ui-state-focus{background-color:#ddd}.wp-tags-autocomplete .ui-state-focus{background-color:#0073aa;color:#fff}.form-table{border-collapse:collapse;margin-top:.5em;width:100%;clear:both}.form-table,.form-table td,.form-table td p,.form-table th{font-size:14px}.form-table td{margin-bottom:9px;padding:15px 10px;line-height:1.3;vertical-align:middle}.form-table th,.form-wrap label{color:#23282d;font-weight:400;text-shadow:none;vertical-align:baseline}.form-table th{vertical-align:top;text-align:left;padding:20px 10px 20px 0;width:200px;line-height:1.3;font-weight:600}.form-table .td-full,.form-table th.th-full{width:auto;padding:20px 10px 20px 0;font-weight:400}.form-table td p{margin-top:4px;margin-bottom:0}.form-table .date-time-doc{margin-top:1em}.form-table p.timezone-info{margin:1em 0}.form-table td fieldset label{margin:.25em 0 .5em!important;display:inline-block}.form-table td fieldset label,.form-table td fieldset li,.form-table td fieldset p{line-height:1.4em}.form-table input.tog,.form-table input[type=radio]{margin-top:-4px;margin-right:4px;float:none}.form-table .pre{padding:8px;margin:0}table.form-table td .updated{font-size:13px}table.form-table td .updated p{font-size:13px;margin:.3em 0}#profile-page .form-table textarea{width:500px;margin-bottom:6px}#profile-page .form-table #rich_editing{margin-right:5px}#your-profile legend{font-size:22px}#display_name{width:15em}#adduser .form-field input,#createuser .form-field input{width:25em}.color-option{display:inline-block;width:24%;padding:5px 15px 15px;margin-bottom:3px;cursor:pointer}.color-option.selected,.color-option:hover{background:#ddd}.color-palette{width:100%;border-spacing:0;border-collapse:collapse}.color-palette td{height:20px;padding:0;border:none}.tool-box .title{margin:8px 0;font-size:18px;font-weight:400;line-height:24px}.label-responsive{vertical-align:middle}#export-filters p{margin:0 0 1em}#export-filters p.submit{margin:7px 0 5px}.card{position:relative;margin-top:20px;padding:.7em 2em 1em;min-width:255px;max-width:520px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fff}.pressthis h4{margin:2em 0 1em}.pressthis textarea{width:100%;font-size:1em}.login form,.login h1 a{overflow:hidden;font-weight:400}.pressthis-bookmarklet-wrapper{margin:20px 0 8px;vertical-align:top;position:relative;z-index:1}.pressthis-bookmarklet,.pressthis-bookmarklet:active,.pressthis-bookmarklet:focus,.pressthis-bookmarklet:hover{display:inline-block;position:relative;cursor:move;color:#32373c;background:#e5e5e5;border-radius:5px;border:1px solid #b4b9be;font-style:normal;line-height:16px;font-size:14px;text-decoration:none}.privacy_requests tbody th,.privacy_requests tfoot td:first-child,.privacy_requests thead td:first-child{border-left:4px solid #fff}.pressthis-bookmarklet:active{outline:0}.pressthis-bookmarklet:after{content:"";width:70%;height:55%;z-index:-1;position:absolute;right:10px;bottom:9px;background:0 0;-webkit-transform:skew(20deg) rotate(6deg);transform:skew(20deg) rotate(6deg);box-shadow:0 10px 8px rgba(0,0,0,.6)}.pressthis-bookmarklet:hover:after{-webkit-transform:skew(20deg) rotate(9deg);transform:skew(20deg) rotate(9deg);box-shadow:0 10px 8px rgba(0,0,0,.7)}.pressthis-bookmarklet span{display:inline-block;margin:0;padding:0 12px 8px 9px}.pressthis-bookmarklet span:before{color:#72777c;font:400 20px/1 dashicons;content:"\f157";position:relative;display:inline-block;top:4px;margin-right:4px}.pressthis-js-toggle,.pressthis-js-toggle.button.button{margin-left:10px;padding:0;height:auto;vertical-align:top}.pressthis-js-toggle .dashicons{margin:5px 8px 6px 7px;color:#555d66}.timezone-info code{white-space:nowrap}.defaultavatarpicker .avatar{margin:2px 0;vertical-align:middle}.options-general-php .date-time-text{display:inline-block;min-width:10em}.options-general-php input.small-text{width:56px}.options-general-php .spinner{float:none;margin:-3px 3px 0}.options-general-php .language-install-spinner,.settings-php .language-install-spinner{display:inline-block;float:none;margin:-3px 5px 0;vertical-align:middle}.form-table.permalink-structure .available-structure-tags li{float:left;margin-right:5px}.setup-php textarea{max-width:100%}.form-field #site-address{max-width:25em}.form-field #domain{max-width:22em}.form-field #admin-email,.form-field #blog_last_updated,.form-field #blog_registered,.form-field #path,.form-field #site-title{max-width:25em}.form-field #path{margin-bottom:5px}#search-sites,#search-users{max-width:100%}.request-filesystem-credentials-dialog{display:none;visibility:visible}.request-filesystem-credentials-dialog .notification-dialog{top:10%;max-height:85%}.request-filesystem-credentials-dialog-content{margin:25px}#request-filesystem-credentials-title{font-size:1.3em;margin:1em 0}.request-filesystem-credentials-form legend{font-size:1em;padding:1.33em 0 0;font-weight:600}.request-filesystem-credentials-form input[type=text],.request-filesystem-credentials-form input[type=password]{display:block}.request-filesystem-credentials-dialog input[type=text],.request-filesystem-credentials-dialog input[type=password]{width:100%}.request-filesystem-credentials-form .field-title{font-weight:600}.request-filesystem-credentials-dialog label[for=hostname],.request-filesystem-credentials-dialog label[for=public_key],.request-filesystem-credentials-dialog label[for=private_key]{display:block;margin-bottom:1em}.request-filesystem-credentials-dialog .request-filesystem-credentials-action-buttons{text-align:right}.login #pass-strength-result,.login h1,.privacy_requests .column-type{text-align:center}.request-filesystem-credentials-dialog label[for=ftp]{margin-right:10px}.request-filesystem-credentials-dialog #auth-keys-desc{margin-bottom:0}#request-filesystem-credentials-dialog .button:not(:last-child){margin-right:10px}#request-filesystem-credentials-form .cancel-button{display:none}#request-filesystem-credentials-dialog .cancel-button{display:inline}.request-filesystem-credentials-dialog .ftp-password,.request-filesystem-credentials-dialog .ftp-username{float:none;width:auto}.request-filesystem-credentials-dialog .ftp-username{margin-bottom:1em}.request-filesystem-credentials-dialog .ftp-password{margin:0}.request-filesystem-credentials-dialog .ftp-password em{color:#888}.request-filesystem-credentials-dialog label{display:block;line-height:1.5;margin-bottom:1em}.request-filesystem-credentials-form #ssh-keys legend{font-size:1.3em}.request-filesystem-credentials-form .notice{margin:0 0 20px;clear:both}.tools-privacy-policy-page form{margin-bottom:1.3em}.tools-privacy-policy-page input.button,.tools-privacy-policy-page select{margin-left:6px}.tools-privacy-edit{margin:1.5em 0}.tools-privacy-policy-page span{line-height:2em}.privacy_requests .column-email{width:40%}.privacy_requests tbody th{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results th{box-shadow:none}.privacy_requests tbody .request-results th .notice{margin:0 0 5px}.privacy_requests tbody td{background:#fff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.1)}.privacy_requests tbody .has-request-results td{box-shadow:none}.privacy_requests .next_steps .button{height:auto;line-height:1.5;padding:4px 10px;word-break:break-all;white-space:unset}.privacy_requests .status-request-confirmed td,.privacy_requests .status-request-confirmed th{background-color:#f7fcfe;border-left-color:#00a0d2}.privacy_requests .status-request-failed td,.privacy_requests .status-request-failed th{background-color:#fef7f1;border-left-color:#d64d21}.privacy_requests .export_personal_data_failed a{vertical-align:baseline}.status-label{font-weight:700}.status-label.status-request-pending{font-weight:400;font-style:italic;color:#6c7781}.status-label.status-request-failed{color:#a00;font-weight:700}.wp-privacy-request-form{clear:both}.wp-privacy-request-form-field{margin:1.5em 0}.wp-privacy-request-form label{font-weight:700;line-height:1.5;padding-bottom:.5em;display:block}.wp-privacy-request-form input{line-height:1.5;margin:0}.email-personal-data::before{display:inline-block;font:400 20px/1 dashicons;margin:3px 5px 0 -2px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top}.email-personal-data--sending::before{color:#f56e28;content:"\f463";-webkit-animation:rotation 2s infinite linear;animation:rotation 2s infinite linear}.email-personal-data--sent::before{color:#79ba49;content:"\f147"}@media screen and (max-width:782px){#pass-strength-result,.form-table{box-sizing:border-box}textarea{-webkit-appearance:none}input[type=text],input[type=search],input[type=password],input[type=email],input[type=number]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox],input[type=checkbox]{-webkit-appearance:none;padding:10px}.widefat tfoot td input[type=checkbox],.widefat th input[type=checkbox],.widefat thead td input[type=checkbox]{margin-bottom:8px}.widefat tfoot td input[type=checkbox]:before,.widefat th input[type=checkbox]:before,.widefat thead td input[type=checkbox]:before,input[type=checkbox]:checked:before{font:400 30px/1 dashicons;margin:-3px -5px}input[type=radio],input[type=checkbox]{height:25px;width:25px}.wp-admin p input[type=radio],.wp-admin p input[type=checkbox]{margin-top:-3px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}.wp-upload-form input[type=submit]{margin-top:10px}#wpbody select{height:36px;font-size:16px}.wp-admin .button-cancel{padding:0;font-size:14px}#adduser .form-field input,#createuser .form-field input{width:100%}.form-table td,.form-table th,.label-responsive{display:block;width:auto;vertical-align:middle}.label-responsive{margin:.5em 0}.export-filters li{margin-bottom:0}.form-table .color-palette td{display:table-cell;width:15px}.form-table table.color-palette{margin-right:10px}input,textarea{font-size:16px}#profile-page .form-table textarea,.form-table span.description,.form-table td input[type=text],.form-table td input[type=password],.form-table td input[type=email],.form-table td select,.form-table td textarea{width:100%;font-size:16px;line-height:1.5;padding:7px 10px;display:block;max-width:none;box-sizing:border-box}.form-table .form-required.form-invalid td:after{float:right;margin:-30px 3px 0 0}#wpbody .form-table td select{height:40px}.form-table input[type=text].small-text,input[type=text].small-text,input[type=search].small-text,input[type=password].small-text,input[type=number].small-text{width:auto;max-width:4.375em;display:inline;padding:3px 6px;margin:0 3px}#pass-strength-result{width:100%;padding:8px}p.search-box{float:none;position:absolute;bottom:0;width:98%;height:90px;margin-bottom:20px}p.search-box input[name="s"]{height:auto;float:none;width:100%;margin-bottom:10px;vertical-align:middle;-webkit-appearance:none}p.search-box input[type=submit]{margin-bottom:10px}.form-table span.description{display:inline;padding:4px 0 0;line-height:1.4em;font-size:14px}.form-table th{padding-top:10px;padding-bottom:0;border-bottom:0}.form-table td{margin-bottom:0;padding-bottom:6px;padding-top:4px;padding-left:0}.form-table.permalink-structure td code{margin-left:32px}.form-table.permalink-structure td input[type=text]{margin-left:32px;margin-top:4px;width:96%}.form-table input.regular-text{width:100%}.form-table label{font-size:14px}.form-table fieldset label{display:block}#local-time,#utc-time{display:block;float:none;margin-top:.5em}.form-field #domain{max-width:none}.wp-pwd{position:relative}.wp-pwd [type=text],.wp-pwd [type=password]{padding-right:40px}.wp-pwd button.button{background:0 0;border:none;box-shadow:none;line-height:2;margin:0;padding:5px 10px;position:absolute;right:0;top:0}.wp-pwd button.button:active,.wp-pwd button.button:focus,.wp-pwd button.button:hover{background:0 0}.wp-pwd .button .text{display:none}.options-general-php input[type=text].small-text{max-width:6.25em;margin:0}.tools-privacy-policy-page form.wp-create-privacy-page{margin-bottom:1em}.tools-privacy-policy-page input#set-page,.tools-privacy-policy-page select{margin:10px 0 0}.tools-privacy-policy-page .wp-create-privacy-page span{display:block;margin-bottom:1em}.tools-privacy-policy-page .wp-create-privacy-page .button{margin-left:0}.wp-list-table.privacy_requests tr:not(.inline-edit-row):not(.no-items) td.column-primary:not(.check-column){display:table-cell}.wp-list-table.privacy_requests.widefat th input,.wp-list-table.privacy_requests.widefat thead td input{margin-left:5px}}.locale-he-il em,.locale-zh-cn #local-time,.locale-zh-cn #utc-time,.locale-zh-cn .form-wrap p,.locale-zh-cn .howto,.locale-zh-cn .inline-edit-row fieldset span.checkbox-title,.locale-zh-cn .inline-edit-row fieldset span.title,.locale-zh-cn .js .input-with-default-title,.locale-zh-cn .link-to-original,.locale-zh-cn .tablenav .displaying-num,.locale-zh-cn p.description,.locale-zh-cn p.help,.locale-zh-cn p.install-help,.locale-zh-cn span.description{font-style:normal}@media only screen and (max-width:768px){.form-field input[type=text],.form-field input[type=password],.form-field input[type=email],.form-field select,.form-field textarea{width:99%}.form-wrap .form-field{padding:0}#profile-page .form-table textarea{max-width:400px;width:auto}}.locale-de-de #customize-header-actions .button,.locale-de-de-formal #customize-header-actions .button,.locale-ru-ru #customize-header-actions .button{padding:0 5px 1px}@media only screen and (max-height:480px),screen and (max-width:450px){.file-editor-warning .notification-dialog,.request-filesystem-credentials-dialog .notification-dialog{width:100%;height:100%;max-height:100%;position:fixed;top:0;margin:0;left:0}}@media screen and (max-width:600px){.color-option{width:49%}}@media only screen and (max-width:320px){.options-general-php .date-time-text.date-time-custom-text{min-width:0;margin-right:.5em}}@-webkit-keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes rotation{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}body.rtl,body.rtl .press-this a.wp-switch-editor{font-family:Tahoma,Arial,sans-serif}.rtl h1,.rtl h2,.rtl h3,.rtl h4,.rtl h5,.rtl h6{font-family:Arial,sans-serif;font-weight:600}body.locale-he-il,body.locale-he-il .press-this a.wp-switch-editor{font-family:Arial,sans-serif}.locale-he-il em{font-weight:600}.locale-zh-cn .hdnle a{font-size:12px}.locale-zh-cn form.upgrade .hint{font-style:normal;font-size:100%}.locale-zh-cn #sort-buttons{font-size:1em!important}.locale-de-de #customize-header-actions .spinner,.locale-de-de-formal #customize-header-actions .spinner{margin:16px 3px 0}.locale-ru-ru #adminmenu{width:inherit}.locale-ru-ru #adminmenu,.locale-ru-ru #wpbody{margin-left:0}.locale-ru-ru .inline-edit-row fieldset label span.title,.locale-ru-ru .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}.locale-ru-ru.post-new-php .tagsdiv .newtag,.locale-ru-ru.post-php .tagsdiv .newtag{width:165px}.locale-ru-ru.press-this .posting{margin-right:277px}.locale-ru-ru .press-this-sidebar{width:265px}.locale-ru-ru #customize-header-actions .spinner{margin:16px 3px 0}.locale-lt-lt .inline-edit-row fieldset label span.title,.locale-lt-lt .inline-edit-row fieldset.inline-edit-date legend{width:8em}.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap{margin-left:8em}@media screen and (max-width:782px){.locale-lt-lt .inline-edit-row fieldset .timestamp-wrap,.locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap,.locale-ru-ru .inline-edit-row fieldset .timestamp-wrap,.locale-ru-ru .inline-edit-row fieldset label span.input-text-wrap{margin-left:0}}body,html{height:100%;margin:0;padding:0}body{background:#f1f1f1;min-width:0;color:#444;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:13px;line-height:1.4em}a{color:#0073aa;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;outline:0}a:active,a:hover{color:#00a0d2}a:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.ie8 a:focus{outline:#5b9dd9 solid 1px}p{line-height:1.5}.login #login_error,.login .message,.login .success{border-left:4px solid #00a0d2;padding:12px;margin-left:0;margin-bottom:20px;background-color:#fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1)}.login .success{border-left-color:#46b450}.login #login_error{border-left-color:#dc3232}#loginform p.submit,.login-action-lostpassword p.submit{border:none;margin:-10px 0 20px}.login *{margin:0;padding:0}.login .password-input-wrapper{display:table}.login .input.password-input{display:table-cell;margin:0}.login .pw-weak{margin-bottom:15px}.login .button.button-secondary{display:table-cell;border-radius:0;vertical-align:middle}.login form{margin-top:20px;margin-left:0;padding:26px 24px 46px;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.13)}.login form .forgetmenot{font-weight:400;float:left;margin-bottom:0}.login .button-primary{float:right}#login form p{margin-bottom:0}#login form p.submit{margin:0;padding:0}.login label{color:#72777c;font-size:14px}.login form .forgetmenot label{font-size:12px;line-height:19px}.login h1 a{background-image:url(../images/w-logo-blue.png?ver=20131202);background-image:none,url(../images/wordpress-logo.svg?ver=20131107);background-size:84px;background-position:center top;background-repeat:no-repeat;color:#444;height:84px;font-size:20px;line-height:1.3em;margin:0 auto 25px;padding:0;width:84px;text-indent:-9999px;outline:0;display:block}#login{width:320px;padding:8% 0 0;margin:auto}.login #backtoblog,.login #nav{font-size:13px;padding:0 24px}.login #nav{margin:24px 0 0}#backtoblog{margin:16px 0}.login #backtoblog a,.login #nav a{text-decoration:none;color:#555d66}.login #backtoblog a:hover,.login #nav a:hover,.login h1 a:hover{color:#00a0d2}.login #backtoblog a:focus,.login #nav a:focus,.login h1 a:focus{color:#124964}.login .privacy-policy-page-link{text-align:center;width:100%;margin:5em 0 2em}.login form .input,.login input[type=text]{font-size:24px;width:100%;padding:3px;margin:2px 6px 16px 0}.login form .input,.login form input[type=checkbox],.login input[type=text]{background:#fbfbfb}.ie7 .login form .input,.ie8 .login form .input{font-family:sans-serif}.login-action-rp input[type=text]{box-shadow:none;margin:0}.login #pass-strength-result{font-weight:600;margin:-1px 5px 16px 0;padding:6px 5px;width:100%}body.interim-login{height:auto}.interim-login #login{padding:0;margin:5px auto 20px}.interim-login.login h1 a{width:auto}.interim-login #login_error,.interim-login.login .message{margin:0 0 16px}.interim-login.login form{margin:0}@-ms-viewport{width:device-width}@media screen and (max-height:550px){#login{padding:20px 0}}@media screen and (max-width:782px){.interim-login input[type=checkbox]{height:16px;width:16px}.interim-login input[type=checkbox]:checked:before{width:16px;font:400 21px/1 dashicons;margin:-3px 0 0 -4px}}
\ No newline at end of file
<div class="inside">
<div id="comment-link-box">
<strong><?php _ex( 'Permalink:', 'comment' ); ?></strong>
- <span id="sample-permalink"><a href="<?php echo $comment_link; ?>"><?php echo $comment_link; ?></a></span>
+ <span id="sample-permalink">
+ <a href="<?php echo esc_url( $comment_link ); ?>">
+ <?php echo esc_html( $comment_link ); ?>
+ </a>
+ </span>
</div>
</div>
<?php endif; ?>
list( $display_version ) = explode( '-', get_bloginfo( 'version' ) );
include( ABSPATH . 'wp-admin/admin-header.php' );
+
+$is_privacy_notice = isset( $_GET['privacy-notice'] );
+
?>
<div class="wrap about-wrap full-width-layout">
<h2 class="nav-tab-wrapper wp-clearfix">
<a href="about.php" class="nav-tab"><?php _e( 'What’s New' ); ?></a>
<a href="credits.php" class="nav-tab"><?php _e( 'Credits' ); ?></a>
- <a href="freedoms.php" class="nav-tab nav-tab-active"><?php _e( 'Freedoms' ); ?></a>
- <a href="privacy.php" class="nav-tab"><?php _e( 'Privacy' ); ?></a>
+ <a href="freedoms.php" class="nav-tab<?php if ( ! $is_privacy_notice ) { echo ' nav-tab-active'; } ?>"><?php _e( 'Freedoms' ); ?></a>
+ <a href="freedoms.php?privacy-notice" class="nav-tab<?php if ( $is_privacy_notice ) { echo ' nav-tab-active'; } ?>"><?php _e( 'Privacy' ); ?></a>
</h2>
+<?php if ( $is_privacy_notice ) : ?>
+
+<div class="about-wrap-content">
+ <p class="about-description"><?php _e( 'From time to time, your WordPress site may send data to WordPress.org — including, but not limited to — the version of WordPress you are using, and a list of installed plugins and themes.' ); ?></p>
+
+ <p><?php printf( __( 'This data is used to provide general enhancements to WordPress, which includes helping to protect your site by finding and automatically installing new updates. It is also used to calculate statistics, such as those shown on the <a href="%s">WordPress.org stats page</a>.' ), 'https://wordpress.org/about/stats/' ); ?></p>
+
+ <p><?php printf( __( 'We take privacy and transparency very seriously. To learn more about what data we collect, and how we use it, please visit <a href="%s">WordPress.org/about/privacy</a>.' ), 'https://wordpress.org/about/privacy/' ); ?></p>
+</div>
+
+<?php else : ?>
<div class="about-wrap-content">
<p class="about-description"><?php printf( __( 'WordPress is Free and open source software, built by a distributed community of mostly volunteer developers from around the world. WordPress comes with some awesome, worldview-changing rights courtesy of its <a href="%s">license</a>, the GPL.' ), 'https://wordpress.org/about/license/' ); ?></p>
<p><?php _e( 'Don’t you wish all software came with these freedoms? So do we! For more information, check out the <a href="https://www.fsf.org/">Free Software Foundation</a>.' ); ?></p>
</div>
+<?php endif; ?>
</div>
<?php include( ABSPATH . 'wp-admin/admin-footer.php' ); ?>
add_action( 'admin_head', 'wp_site_icon' );
add_action( 'admin_head', '_ipad_meta' );
+// Privacy tools
+add_action( 'admin_menu', '_wp_privacy_hook_requests_page' );
+add_action( 'load-tools_page_export_personal_data', '_wp_privacy_requests_screen_options' );
+add_action( 'load-tools_page_remove_personal_data', '_wp_privacy_requests_screen_options' );
+
// Prerendering.
if ( ! is_customize_preview() ) {
add_filter( 'admin_print_styles', 'wp_resource_hints', 1 );
add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 );
add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 );
add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 );
+
+// Privacy hooks
+add_filter( 'wp_privacy_personal_data_erasure_page', 'wp_privacy_process_personal_data_erasure_page', 10, 5 );
+add_filter( 'wp_privacy_personal_data_export_page', 'wp_privacy_process_personal_data_export_page', 10, 7 );
+add_action( 'wp_privacy_personal_data_export_file', 'wp_privacy_generate_personal_data_export_file', 10 );
+add_action( 'wp_privacy_personal_data_erased', '_wp_privacy_send_erasure_fulfillment_notification', 10 );
+
+// Privacy policy text changes check.
+add_action( 'admin_init', array( 'WP_Privacy_Policy_Content', 'text_change_check' ), 100 );
+
+// Show a "postbox" with the text suggestions for a privacy policy.
+add_action( 'edit_form_after_title', array( 'WP_Privacy_Policy_Content', 'notice' ) );
+
+// Add the suggested policy text from WordPress.
+add_action( 'admin_init', array( 'WP_Privacy_Policy_Content', 'add_suggested_content' ), 1 );
+
+// Update the cached policy info when the policy page is updated.
+add_action( 'post_updated', array( 'WP_Privacy_Policy_Content', '_policy_page_updated' ) );
+
+// Append '(Draft)' to draft page titles in the privacy page dropdown.
+add_filter( 'list_pages', '_wp_privacy_settings_filter_draft_page_titles', 10, 2 );
wp_die( 1 );
}
+/**
+ * Ajax handler for updating whether to display the Try Gutenberg panel.
+ *
+ * @since 4.9.8
+ */
+function wp_ajax_update_try_gutenberg_panel() {
+ check_ajax_referer( 'try-gutenberg-panel-nonce', 'trygutenbergpanelnonce' );
+
+ update_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', empty( $_POST['visible'] ) ? 0 : 1 );
+
+ wp_die( 1 );
+}
+
/**
* Ajax handler for retrieving menu meta boxes.
*
$query = isset( $_REQUEST['query'] ) ? (array) $_REQUEST['query'] : array();
$keys = array(
's', 'order', 'orderby', 'posts_per_page', 'paged', 'post_mime_type',
- 'post_parent', 'post__in', 'post__not_in', 'year', 'monthnum'
+ 'post_parent', 'author', 'post__in', 'post__not_in', 'year', 'monthnum'
);
foreach ( get_taxonomies_for_attachments( 'objects' ) as $t ) {
if ( $t->query_var && isset( $query[ $t->query_var ] ) ) {
) );
}
}
+
+/**
+ * Ajax handler for exporting a user's personal data.
+ *
+ * @since 4.9.6
+ */
+function wp_ajax_wp_privacy_export_personal_data() {
+
+ if ( empty( $_POST['id'] ) ) {
+ wp_send_json_error( __( 'Missing request ID.' ) );
+ }
+ $request_id = (int) $_POST['id'];
+
+ if ( $request_id < 1 ) {
+ wp_send_json_error( __( 'Invalid request ID.' ) );
+ }
+
+ if ( ! current_user_can( 'export_others_personal_data' ) ) {
+ wp_send_json_error( __( 'Invalid request.' ) );
+ }
+
+ check_ajax_referer( 'wp-privacy-export-personal-data-' . $request_id, 'security' );
+
+ // Get the request data.
+ $request = wp_get_user_request_data( $request_id );
+
+ if ( ! $request || 'export_personal_data' !== $request->action_name ) {
+ wp_send_json_error( __( 'Invalid request type.' ) );
+ }
+
+ $email_address = $request->email;
+ if ( ! is_email( $email_address ) ) {
+ wp_send_json_error( __( 'A valid email address must be given.' ) );
+ }
+
+ if ( ! isset( $_POST['exporter'] ) ) {
+ wp_send_json_error( __( 'Missing exporter index.' ) );
+ }
+ $exporter_index = (int) $_POST['exporter'];
+
+ if ( ! isset( $_POST['page'] ) ) {
+ wp_send_json_error( __( 'Missing page index.' ) );
+ }
+ $page = (int) $_POST['page'];
+
+ $send_as_email = isset( $_POST['sendAsEmail'] ) ? ( 'true' === $_POST['sendAsEmail'] ) : false;
+
+ /**
+ * Filters the array of exporter callbacks.
+ *
+ * @since 4.9.6
+ *
+ * @param array $args {
+ * An array of callable exporters of personal data. Default empty array.
+ *
+ * @type array {
+ * Array of personal data exporters.
+ *
+ * @type string $callback Callable exporter function that accepts an
+ * email address and a page and returns an array
+ * of name => value pairs of personal data.
+ * @type string $exporter_friendly_name Translated user facing friendly name for the
+ * exporter.
+ * }
+ * }
+ */
+ $exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() );
+
+ if ( ! is_array( $exporters ) ) {
+ wp_send_json_error( __( 'An exporter has improperly used the registration filter.' ) );
+ }
+
+ // Do we have any registered exporters?
+ if ( 0 < count( $exporters ) ) {
+ if ( $exporter_index < 1 ) {
+ wp_send_json_error( __( 'Exporter index cannot be negative.' ) );
+ }
+
+ if ( $exporter_index > count( $exporters ) ) {
+ wp_send_json_error( __( 'Exporter index out of range.' ) );
+ }
+
+ if ( $page < 1 ) {
+ wp_send_json_error( __( 'Page index cannot be less than one.' ) );
+ }
+
+ $exporter_keys = array_keys( $exporters );
+ $exporter_key = $exporter_keys[ $exporter_index - 1 ];
+ $exporter = $exporters[ $exporter_key ];
+
+ if ( ! is_array( $exporter ) ) {
+ wp_send_json_error(
+ /* translators: %s: array index */
+ sprintf( __( 'Expected an array describing the exporter at index %s.' ), $exporter_key )
+ );
+ }
+ if ( ! array_key_exists( 'exporter_friendly_name', $exporter ) ) {
+ wp_send_json_error(
+ /* translators: %s: array index */
+ sprintf( __( 'Exporter array at index %s does not include a friendly name.' ), $exporter_key )
+ );
+ }
+ if ( ! array_key_exists( 'callback', $exporter ) ) {
+ wp_send_json_error(
+ /* translators: %s: exporter friendly name */
+ sprintf( __( 'Exporter does not include a callback: %s.' ), esc_html( $exporter['exporter_friendly_name'] ) )
+ );
+ }
+ if ( ! is_callable( $exporter['callback'] ) ) {
+ wp_send_json_error(
+ /* translators: %s: exporter friendly name */
+ sprintf( __( 'Exporter callback is not a valid callback: %s.' ), esc_html( $exporter['exporter_friendly_name'] ) )
+ );
+ }
+
+ $callback = $exporter['callback'];
+ $exporter_friendly_name = $exporter['exporter_friendly_name'];
+
+ $response = call_user_func( $callback, $email_address, $page );
+ if ( is_wp_error( $response ) ) {
+ wp_send_json_error( $response );
+ }
+
+ if ( ! is_array( $response ) ) {
+ wp_send_json_error(
+ /* translators: %s: exporter friendly name */
+ sprintf( __( 'Expected response as an array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
+ );
+ }
+ if ( ! array_key_exists( 'data', $response ) ) {
+ wp_send_json_error(
+ /* translators: %s: exporter friendly name */
+ sprintf( __( 'Expected data in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
+ );
+ }
+ if ( ! is_array( $response['data'] ) ) {
+ wp_send_json_error(
+ /* translators: %s: exporter friendly name */
+ sprintf( __( 'Expected data array in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
+ );
+ }
+ if ( ! array_key_exists( 'done', $response ) ) {
+ wp_send_json_error(
+ /* translators: %s: exporter friendly name */
+ sprintf( __( 'Expected done (boolean) in response array from exporter: %s.' ), esc_html( $exporter_friendly_name ) )
+ );
+ }
+ } else {
+ // No exporters, so we're done.
+ $exporter_key = '';
+
+ $response = array(
+ 'data' => array(),
+ 'done' => true,
+ );
+ }
+
+ /**
+ * Filters a page of personal data exporter data. Used to build the export report.
+ *
+ * Allows the export response to be consumed by destinations in addition to Ajax.
+ *
+ * @since 4.9.6
+ *
+ * @param array $response The personal data for the given exporter and page.
+ * @param int $exporter_index The index of the exporter that provided this data.
+ * @param string $email_address The email address associated with this personal data.
+ * @param int $page The page for this response.
+ * @param int $request_id The privacy request post ID associated with this request.
+ * @param bool $send_as_email Whether the final results of the export should be emailed to the user.
+ * @param string $exporter_key The key (slug) of the exporter that provided this data.
+ */
+ $response = apply_filters( 'wp_privacy_personal_data_export_page', $response, $exporter_index, $email_address, $page, $request_id, $send_as_email, $exporter_key );
+
+ if ( is_wp_error( $response ) ) {
+ wp_send_json_error( $response );
+ }
+
+ wp_send_json_success( $response );
+}
+
+/**
+ * Ajax handler for erasing personal data.
+ *
+ * @since 4.9.6
+ */
+function wp_ajax_wp_privacy_erase_personal_data() {
+
+ if ( empty( $_POST['id'] ) ) {
+ wp_send_json_error( __( 'Missing request ID.' ) );
+ }
+
+ $request_id = (int) $_POST['id'];
+
+ if ( $request_id < 1 ) {
+ wp_send_json_error( __( 'Invalid request ID.' ) );
+ }
+
+ // Both capabilities are required to avoid confusion, see `_wp_personal_data_removal_page()`.
+ if ( ! current_user_can( 'erase_others_personal_data' ) || ! current_user_can( 'delete_users' ) ) {
+ wp_send_json_error( __( 'Invalid request.' ) );
+ }
+
+ check_ajax_referer( 'wp-privacy-erase-personal-data-' . $request_id, 'security' );
+
+ // Get the request data.
+ $request = wp_get_user_request_data( $request_id );
+
+ if ( ! $request || 'remove_personal_data' !== $request->action_name ) {
+ wp_send_json_error( __( 'Invalid request ID.' ) );
+ }
+
+ $email_address = $request->email;
+
+ if ( ! is_email( $email_address ) ) {
+ wp_send_json_error( __( 'Invalid email address in request.' ) );
+ }
+
+ if ( ! isset( $_POST['eraser'] ) ) {
+ wp_send_json_error( __( 'Missing eraser index.' ) );
+ }
+
+ $eraser_index = (int) $_POST['eraser'];
+
+ if ( ! isset( $_POST['page'] ) ) {
+ wp_send_json_error( __( 'Missing page index.' ) );
+ }
+
+ $page = (int) $_POST['page'];
+
+ /**
+ * Filters the array of personal data eraser callbacks.
+ *
+ * @since 4.9.6
+ *
+ * @param array $args {
+ * An array of callable erasers of personal data. Default empty array.
+ *
+ * @type array {
+ * Array of personal data exporters.
+ *
+ * @type string $callback Callable eraser that accepts an email address and
+ * a page and returns an array with boolean values for
+ * whether items were removed or retained and any messages
+ * from the eraser, as well as if additional pages are
+ * available.
+ * @type string $exporter_friendly_name Translated user facing friendly name for the eraser.
+ * }
+ * }
+ */
+ $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() );
+
+ // Do we have any registered erasers?
+ if ( 0 < count( $erasers ) ) {
+
+ if ( $eraser_index < 1 ) {
+ wp_send_json_error( __( 'Eraser index cannot be less than one.' ) );
+ }
+
+ if ( $eraser_index > count( $erasers ) ) {
+ wp_send_json_error( __( 'Eraser index is out of range.' ) );
+ }
+
+ if ( $page < 1 ) {
+ wp_send_json_error( __( 'Page index cannot be less than one.' ) );
+ }
+
+ $eraser_keys = array_keys( $erasers );
+ $eraser_key = $eraser_keys[ $eraser_index - 1 ];
+ $eraser = $erasers[ $eraser_key ];
+
+ if ( ! is_array( $eraser ) ) {
+ /* translators: %d: array index */
+ wp_send_json_error( sprintf( __( 'Expected an array describing the eraser at index %d.' ), $eraser_index ) );
+ }
+
+ if ( ! array_key_exists( 'callback', $eraser ) ) {
+ /* translators: %d: array index */
+ wp_send_json_error( sprintf( __( 'Eraser array at index %d does not include a callback.' ), $eraser_index ) );
+ }
+
+ if ( ! is_callable( $eraser['callback'] ) ) {
+ /* translators: %d: array index */
+ wp_send_json_error( sprintf( __( 'Eraser callback at index %d is not a valid callback.' ), $eraser_index ) );
+ }
+
+ if ( ! array_key_exists( 'eraser_friendly_name', $eraser ) ) {
+ /* translators: %d: array index */
+ wp_send_json_error( sprintf( __( 'Eraser array at index %d does not include a friendly name.' ), $eraser_index ) );
+ }
+
+ $callback = $eraser['callback'];
+ $eraser_friendly_name = $eraser['eraser_friendly_name'];
+
+ $response = call_user_func( $callback, $email_address, $page );
+
+ if ( is_wp_error( $response ) ) {
+ wp_send_json_error( $response );
+ }
+
+ if ( ! is_array( $response ) ) {
+ wp_send_json_error(
+ sprintf(
+ /* translators: 1: eraser friendly name, 2: array index */
+ __( 'Did not receive array from %1$s eraser (index %2$d).' ),
+ esc_html( $eraser_friendly_name ),
+ $eraser_index
+ )
+ );
+ }
+
+ if ( ! array_key_exists( 'items_removed', $response ) ) {
+ wp_send_json_error(
+ sprintf(
+ /* translators: 1: eraser friendly name, 2: array index */
+ __( 'Expected items_removed key in response array from %1$s eraser (index %2$d).' ),
+ esc_html( $eraser_friendly_name ),
+ $eraser_index
+ )
+ );
+ }
+
+ if ( ! array_key_exists( 'items_retained', $response ) ) {
+ wp_send_json_error(
+ sprintf(
+ /* translators: 1: eraser friendly name, 2: array index */
+ __( 'Expected items_retained key in response array from %1$s eraser (index %2$d).' ),
+ esc_html( $eraser_friendly_name ),
+ $eraser_index
+ )
+ );
+ }
+
+ if ( ! array_key_exists( 'messages', $response ) ) {
+ wp_send_json_error(
+ sprintf(
+ /* translators: 1: eraser friendly name, 2: array index */
+ __( 'Expected messages key in response array from %1$s eraser (index %2$d).' ),
+ esc_html( $eraser_friendly_name ),
+ $eraser_index
+ )
+ );
+ }
+
+ if ( ! is_array( $response['messages'] ) ) {
+ wp_send_json_error(
+ sprintf(
+ /* translators: 1: eraser friendly name, 2: array index */
+ __( 'Expected messages key to reference an array in response array from %1$s eraser (index %2$d).' ),
+ esc_html( $eraser_friendly_name ),
+ $eraser_index
+ )
+ );
+ }
+
+ if ( ! array_key_exists( 'done', $response ) ) {
+ wp_send_json_error(
+ sprintf(
+ /* translators: 1: eraser friendly name, 2: array index */
+ __( 'Expected done flag in response array from %1$s eraser (index %2$d).' ),
+ esc_html( $eraser_friendly_name ),
+ $eraser_index
+ )
+ );
+ }
+ } else {
+ // No erasers, so we're done.
+ $eraser_key = '';
+
+ $response = array(
+ 'items_removed' => false,
+ 'items_retained' => false,
+ 'messages' => array(),
+ 'done' => true,
+ );
+ }
+
+ /**
+ * Filters a page of personal data eraser data.
+ *
+ * Allows the erasure response to be consumed by destinations in addition to Ajax.
+ *
+ * @since 4.9.6
+ *
+ * @param array $response The personal data for the given exporter and page.
+ * @param int $eraser_index The index of the eraser that provided this data.
+ * @param string $email_address The email address associated with this personal data.
+ * @param int $page The page for this response.
+ * @param int $request_id The privacy request post ID associated with this request.
+ * @param string $eraser_key The key (slug) of the eraser that provided this data.
+ */
+ $response = apply_filters( 'wp_privacy_personal_data_erasure_page', $response, $eraser_index, $email_address, $page, $request_id, $eraser_key );
+
+ if ( is_wp_error( $response ) ) {
+ wp_send_json_error( $response );
+ }
+
+ wp_send_json_success( $response );
+}
*/
public static function get_unsafe_client_ip() {
$client_ip = $netmask = false;
- $ip_prefix = '';
// In order of preference, with the best ones for this purpose first.
$address_headers = array(
return false;
}
- // Detect what kind of IP address this is.
- $is_ipv6 = substr_count( $client_ip, ':' ) > 1;
- $is_ipv4 = ( 3 === substr_count( $client_ip, '.' ) );
+ $anon_ip = wp_privacy_anonymize_ip( $client_ip, true );
- if ( $is_ipv6 && $is_ipv4 ) {
- // IPv6 compatibility mode, temporarily strip the IPv6 part, and treat it like IPv4.
- $ip_prefix = '::ffff:';
- $client_ip = preg_replace( '/^\[?[0-9a-f:]*:/i', '', $client_ip );
- $client_ip = str_replace( ']', '', $client_ip );
- $is_ipv6 = false;
- }
-
- if ( $is_ipv6 ) {
- // IPv6 addresses will always be enclosed in [] if there's a port.
- $ip_start = 1;
- $ip_end = (int) strpos( $client_ip, ']' ) - 1;
- $netmask = 'ffff:ffff:ffff:ffff:0000:0000:0000:0000';
-
- // Strip the port (and [] from IPv6 addresses), if they exist.
- if ( $ip_end > 0 ) {
- $client_ip = substr( $client_ip, $ip_start, $ip_end );
- }
-
- // Partially anonymize the IP by reducing it to the corresponding network ID.
- if ( function_exists( 'inet_pton' ) && function_exists( 'inet_ntop' ) ) {
- $client_ip = inet_ntop( inet_pton( $client_ip ) & inet_pton( $netmask ) );
- }
- } elseif ( $is_ipv4 ) {
- // Strip any port and partially anonymize the IP.
- $last_octet_position = strrpos( $client_ip, '.' );
- $client_ip = substr( $client_ip, 0, $last_octet_position ) . '.0';
- } else {
+ if ( '0.0.0.0' === $anon_ip || '::' === $anon_ip ) {
return false;
}
- // Restore the IPv6 prefix to compatibility mode addresses.
- return $ip_prefix . $client_ip;
+ return $anon_ip;
}
/**
}
/**
- * Discards expired events, and reduces the remaining list.
+ * Prepares the event list for presentation.
+ *
+ * Discards expired events, and makes WordCamps "sticky." Attendees need more
+ * advanced notice about WordCamps than they do for meetups, so camps should
+ * appear in the list sooner. If a WordCamp is coming up, the API will "stick"
+ * it in the response, even if it wouldn't otherwise appear. When that happens,
+ * the event will be at the end of the list, and will need to be moved into a
+ * higher position, so that it doesn't get trimmed off.
*
* @since 4.8.0
+ * @since 4.9.7 Stick a WordCamp to the final list.
*
* @param array $response_body The response body which contains the events.
* @return array The response body with events trimmed.
*/
protected function trim_events( $response_body ) {
if ( isset( $response_body['events'] ) ) {
+ $wordcamps = array();
$current_timestamp = current_time( 'timestamp' );
foreach ( $response_body['events'] as $key => $event ) {
- // Skip WordCamps, because they might be multi-day events.
- if ( 'meetup' !== $event['type'] ) {
+ /*
+ * Skip WordCamps, because they might be multi-day events.
+ * Save a copy so they can be pinned later.
+ */
+ if ( 'wordcamp' === $event['type'] ) {
+ $wordcamps[] = $event;
continue;
}
}
$response_body['events'] = array_slice( $response_body['events'], 0, 3 );
+ $trimmed_event_types = wp_list_pluck( $response_body['events'], 'type' );
+
+ // Make sure the soonest upcoming WordCamps is pinned in the list.
+ if ( ! in_array( 'wordcamp', $trimmed_event_types ) && $wordcamps ) {
+ array_pop( $response_body['events'] );
+ array_push( $response_body['events'], $wordcamps[0] );
+ }
}
return $response_body;
* )
*/
$registered_pointers = array(
- // None currently
+ 'index.php' => 'wp496_privacy',
);
// Check if screen related pointer is registered
* )
*/
$caps_required = array(
- // None currently
+ 'wp496_privacy' => array(
+ 'manage_privacy_options',
+ 'export_others_personal_data',
+ 'erase_others_personal_data',
+ ),
);
// Get dismissed pointers
public static function pointer_wp390_widgets() {}
public static function pointer_wp410_dfw() {}
+ /**
+ * Display a pointer for the new privacy tools.
+ *
+ * @since 4.9.6
+ */
+ public static function pointer_wp496_privacy() {
+ $content = '<h3>' . __( 'Personal Data and Privacy' ) . '</h3>';
+ $content .= '<h4>' . __( 'Personal Data Export and Erasure' ) . '</h4>';
+ $content .= '<p>' . __( 'New <strong>Tools</strong> have been added to help you with personal data export and erasure requests.' ) . '</p>';
+ $content .= '<h4>' . __( 'Privacy Policy' ) . '</h4>';
+ $content .= '<p>' . __( 'Create or select your site’s privacy policy page under <strong>Settings > Privacy</strong> to keep your users informed and aware.' ) . '</p>';
+
+ if ( is_rtl() ) {
+ $position = array(
+ 'edge' => 'right',
+ 'align' => 'bottom',
+ );
+ } else {
+ $position = array(
+ 'edge' => 'left',
+ 'align' => 'bottom',
+ );
+ }
+
+ $js_args = array(
+ 'content' => $content,
+ 'position' => $position,
+ 'pointerClass' => 'wp-pointer arrow-bottom',
+ 'pointerWidth' => 420,
+ );
+ self::print_js( 'wp496_privacy', '#menu-tools', $js_args );
+ }
+
/**
* Prevents new users from seeing existing 'new feature' pointers.
*
* @param int $user_id User ID.
*/
public static function dismiss_pointers_for_new_users( $user_id ) {
- add_user_meta( $user_id, 'dismissed_wp_pointers', '' );
+ add_user_meta( $user_id, 'dismissed_wp_pointers', 'wp496_privacy' );
}
}
$label[0]
);
}
+
$type_links['detached'] = '<option value="detached"' . ( $this->detached ? ' selected="selected"' : '' ) . '>' . __( 'Unattached' ) . '</option>';
+ $type_links['mine'] = sprintf(
+ '<option value="mine"%s>%s</option>',
+ selected( 'mine' === $filter, true, false ),
+ _x( 'Mine', 'media items' )
+ );
+
if ( $this->is_trash || ( defined( 'MEDIA_TRASH') && MEDIA_TRASH ) ) {
$type_links['trash'] = sprintf(
'<option value="trash"%s>%s</option>',
_x( 'Trash', 'attachment filter' )
);
}
+
return $type_links;
}
update_user_meta( get_current_user_id(), 'show_welcome_panel', $welcome_checked );
} else {
$welcome_checked = get_user_meta( get_current_user_id(), 'show_welcome_panel', true );
- if ( 2 == $welcome_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) {
+ if ( '' === $welcome_checked ) {
+ $welcome_checked = '1';
+ }
+ if ( '2' === $welcome_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) {
$welcome_checked = false;
}
}
echo '<input type="checkbox" id="wp_welcome_panel-hide"' . checked( (bool) $welcome_checked, true, false ) . ' />';
echo _x( 'Welcome', 'Welcome panel' ) . "</label>\n";
}
+
+ if ( 'dashboard' === $this->id && has_action( 'try_gutenberg_panel' ) ) {
+ if ( isset( $_GET['try_gutenberg'] ) ) {
+ $try_gutenberg_checked = empty( $_GET['try_gutenberg'] ) ? 0 : 1;
+ update_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', $try_gutenberg_checked );
+ } else {
+ $try_gutenberg_checked = get_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', true );
+ if ( '' === $try_gutenberg_checked ) {
+ $try_gutenberg_checked = '1';
+ }
+ if ( '2' === $try_gutenberg_checked && wp_get_current_user()->user_email != get_option( 'admin_email' ) ) {
+ $try_gutenberg_checked = false;
+ }
+ }
+ echo '<label for="wp_try_gutenberg_panel-hide">';
+ echo '<input type="checkbox" id="wp_try_gutenberg_panel-hide"' . checked( (bool) $try_gutenberg_checked, true, false ) . ' />';
+ echo __( 'New Editor' ) . "</label>\n";
+ }
?>
</fieldset>
<?php
__('Porto Acre', 'continents-cities');
__('Porto Velho', 'continents-cities');
__('Puerto Rico', 'continents-cities');
+__('Punta Arenas', 'continents-cities');
__('Rainy River', 'continents-cities');
__('Rankin Inlet', 'continents-cities');
__('Recife', 'continents-cities');
__('Aqtobe', 'continents-cities');
__('Ashgabat', 'continents-cities');
__('Ashkhabad', 'continents-cities');
+__('Atyrau', 'continents-cities');
__('Baghdad', 'continents-cities');
__('Bahrain', 'continents-cities');
__('Baku', 'continents-cities');
__('Dili', 'continents-cities');
__('Dubai', 'continents-cities');
__('Dushanbe', 'continents-cities');
+__('Famagusta', 'continents-cities');
__('Gaza', 'continents-cities');
__('Harbin', 'continents-cities');
__('Hebron', 'continents-cities');
__('Vientiane', 'continents-cities');
__('Vladivostok', 'continents-cities');
__('Yakutsk', 'continents-cities');
+__('Yangon', 'continents-cities');
__('Yekaterinburg', 'continents-cities');
__('Yerevan', 'continents-cities');
__('Samara', 'continents-cities');
__('San Marino', 'continents-cities');
__('Sarajevo', 'continents-cities');
+__('Saratov', 'continents-cities');
__('Simferopol', 'continents-cities');
__('Skopje', 'continents-cities');
__('Sofia', 'continents-cities');
/* Register Widgets and Controls */
+ // Try Gutenberg
+
+ // If Gutenberg isn't activated, only show the panel to users who can install and activate it.
+ $plugins = get_plugins();
+ if ( is_plugin_inactive( 'gutenberg/gutenberg.php' ) && ! current_user_can( 'install_plugins' ) ) {
+ remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
+ }
+ // If Gutenberg is activated, only show it to users who can use it.
+ if ( is_plugin_active( 'gutenberg/gutenberg.php' ) && ! current_user_can( 'edit_posts' ) ) {
+ remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
+ }
+
$response = wp_check_browser_version();
if ( $response && $response['upgrade'] ) {
</div>
<?php
}
+
+/**
+ * Displays a Try Gutenberg Panel, to introduce people to Gutenberg
+ *
+ * @since 4.9.8
+ */
+function wp_try_gutenberg_panel() {
+ $plugins = get_plugins();
+ $action = $url = $classes = '';
+ $classic_action = $classic_url = $classic_classes = '';
+
+ if ( current_user_can( 'install_plugins' ) ) {
+ if ( empty( $plugins['gutenberg/gutenberg.php'] ) ) {
+ if ( get_filesystem_method( array(), WP_PLUGIN_DIR ) === 'direct' ) {
+ $action = __( 'Install Gutenberg' );
+ $url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=gutenberg' ), 'install-plugin_gutenberg' );
+ $classes = ' install-now';
+ }
+ } else if ( is_plugin_inactive( 'gutenberg/gutenberg.php' ) ) {
+ $action = __( 'Activate Gutenberg' );
+ $url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=gutenberg/gutenberg.php&from=try-gutenberg' ), 'activate-plugin_gutenberg/gutenberg.php' );
+ $classes = ' activate-now';
+ }
+
+ if ( empty( $plugins['classic-editor/classic-editor.php'] ) ) {
+ if ( get_filesystem_method( array(), WP_PLUGIN_DIR ) === 'direct' ) {
+ $classic_action = __( 'Install the Classic Editor' );
+ $classic_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=classic-editor' ), 'install-plugin_classic-editor' );
+ $classic_classes = ' install-now';
+ }
+ } else if ( is_plugin_inactive( 'classic-editor/classic-editor.php' ) ) {
+ $classic_action = __( 'Activate the Classic Editor' );
+ $classic_url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=classic-editor/classic-editor.php&from=try-gutenberg' ), 'activate-plugin_classic-editor/classic-editor.php' );
+ $classic_classes = ' activate-now';
+ } else {
+ $classic_action = __( 'The Classic Editor is activated' );
+ $classic_url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=classic-editor/classic-editor.php&from=try-gutenberg' ), 'activate-plugin_classic-editor/classic-editor.php' );;
+ $classic_classes = ' button-disabled install-now updated-message';
+ }
+ }
+
+ if ( current_user_can( 'edit_posts' ) && is_plugin_active( 'gutenberg/gutenberg.php' ) ) {
+ $action = __( 'Try Gutenberg' );
+ $url = admin_url( 'admin.php?page=gutenberg' );
+ }
+
+ ?>
+ <div class="try-gutenberg-panel-content">
+ <h2><?php _e( 'A new, modern publishing experience is coming soon.' ); ?></h2>
+
+ <p class="about-description"><?php _e( "Take your words, media, and layout in new directions with Gutenberg, the WordPress editor we're currently building." ); ?></p>
+
+ <hr />
+
+ <div class="try-gutenberg-panel-column-container">
+ <div class="try-gutenberg-panel-column try-gutenberg-panel-image-column">
+ <picture>
+ <source srcset="about:blank" media="(max-width: 1024px)">
+ <img src="https://s.w.org/images/core/gutenberg-screenshot.png?<?php echo date( 'Ymd' ); ?>" alt="<?php esc_attr_e( 'Screenshot from the Gutenberg interface' ); ?>" />
+ </picture>
+ </div>
+ <div class="try-gutenberg-panel-column plugin-card-gutenberg">
+
+ <div>
+ <h3><?php _e( 'Test the new editor today.' ); ?></h3>
+
+ <p>
+ <?php _e( "You can take Gutenberg for a spin (and share your feedback, if you’d like) before we officially release it, by installing it as a plugin." ); ?>
+ <?php
+ printf(
+ /* translators: 1: Gutenberg call for testing handbook link, 2: Gutenberg GitHub repository issues link, 3: Gutenberg GitHub repository CONTRIBUTING.md link */
+ __( 'You can help by <a href="%1$s">testing</a>, <a href="%2$s">filing bugs</a>, or contributing on the <a href="%3$s">GitHub repository</a>.' ),
+ 'https://make.wordpress.org/test/handbook/call-for-testing/gutenberg-testing/',
+ 'https://github.com/WordPress/gutenberg/issues',
+ 'https://github.com/WordPress/gutenberg/blob/master/CONTRIBUTING.md'
+ );
+ ?>
+ </p>
+ </div>
+
+ <div class="try-gutenberg-action">
+ <?php if ( $action ) { ?>
+ <p><a class="button button-primary button-hero<?php echo $classes; ?>" href="<?php echo esc_url( $url ); ?>" data-name="<?php esc_attr_e( 'Gutenberg' ); ?>" data-slug="gutenberg"><?php echo $action; ?></a></p>
+ <?php } ?>
+
+ <p>
+ <?php
+ $learnmore = sprintf(
+ /* translators: Link to https://wordpress.org/gutenberg/ */
+ __( '<a href="%s">Learn more about Gutenberg</a>' ),
+ __( 'https://wordpress.org/gutenberg/' )
+ );
+
+ /**
+ * Filters the "Learn more" link in the Try Gutenberg panel.
+ *
+ * It allows hosts or site owners to change the link, to provide extra
+ * information about Gutenberg, specific to their service.
+ *
+ * WARNING: This filter will only exist in the 4.9.x series, it will not be
+ * added to WordPress 5.0 and later.
+ *
+ * @since 4.9.8
+ */
+ echo apply_filters( 'try_gutenberg_learn_more_link', $learnmore );
+ ?>
+ </p>
+ </div>
+ </div>
+
+ <div class="try-gutenberg-panel-column plugin-card-classic-editor">
+
+ <div>
+ <h3><?php _e( 'Not quite ready?' ); ?></h3>
+
+ <p>
+ <?php _e( 'The new editor will be enabled by default in the next major release of WordPress. If you’re not sure how compatible your current themes and plugins are, we’ve got you covered.' ); ?>
+ <?php
+ printf(
+ /* translators: Link to the Classic Editor plugin page */
+ __( 'Install the <a href="%s">Classic Editor plugin</a> to keep using the current editor until you’re ready to make the switch.' ),
+ __( 'https://wordpress.org/plugins/classic-editor' )
+ );
+ ?>
+ </p>
+ </div>
+
+ <?php if ( $classic_action ) { ?>
+ <div class="try-gutenberg-action">
+ <p><a class="button button-secondary button-hero<?php echo $classic_classes; ?>" href="<?php echo esc_url( $classic_url ); ?>" data-name="<?php esc_attr_e( 'Classic Editor' ); ?>" data-slug="classic-editor"><?php echo $classic_action; ?></a></p>
+ </div>
+ <?php } ?>
+ </div>
+ </div>
+ </div>
+ <?php
+}
</div>
<?php
}
+
+/**
+ * Generate a single group for the personal data export report.
+ *
+ * @since 4.9.6
+ *
+ * @param array $group_data {
+ * The group data to render.
+ *
+ * @type string $group_label The user-facing heading for the group, e.g. 'Comments'.
+ * @type array $items {
+ * An array of group items.
+ *
+ * @type array $group_item_data {
+ * An array of name-value pairs for the item.
+ *
+ * @type string $name The user-facing name of an item name-value pair, e.g. 'IP Address'.
+ * @type string $value The user-facing value of an item data pair, e.g. '50.60.70.0'.
+ * }
+ * }
+ * }
+ * @return string The HTML for this group and its items.
+ */
+function wp_privacy_generate_personal_data_export_group_html( $group_data ) {
+ $allowed_tags = array(
+ 'a' => array(
+ 'href' => array(),
+ 'target' => array()
+ ),
+ 'br' => array()
+ );
+ $allowed_protocols = array( 'http', 'https' );
+ $group_html = '';
+
+ $group_html .= '<h2>' . esc_html( $group_data['group_label'] ) . '</h2>';
+ $group_html .= '<div>';
+
+ foreach ( (array) $group_data['items'] as $group_item_id => $group_item_data ) {
+ $group_html .= '<table>';
+ $group_html .= '<tbody>';
+
+ foreach ( (array) $group_item_data as $group_item_datum ) {
+ $value = $group_item_datum['value'];
+ // If it looks like a link, make it a link
+ if ( false === strpos( $value, ' ' ) && ( 0 === strpos( $value, 'http://' ) || 0 === strpos( $value, 'https://' ) ) ) {
+ $value = '<a href="' . esc_url( $value ) . '">' . esc_html( $value ) . '</a>';
+ }
+
+ $group_html .= '<tr>';
+ $group_html .= '<th>' . esc_html( $group_item_datum['name'] ) . '</th>';
+ $group_html .= '<td>' . wp_kses( $value, $allowed_tags, $allowed_protocols ) . '</td>';
+ $group_html .= '</tr>';
+ }
+
+ $group_html .= '</tbody>';
+ $group_html .= '</table>';
+ }
+
+ $group_html .= '</div>';
+
+ return $group_html;
+}
+
+/**
+ * Generate the personal data export file.
+ *
+ * @since 4.9.6
+ *
+ * @param int $request_id The export request ID.
+ */
+function wp_privacy_generate_personal_data_export_file( $request_id ) {
+ if ( ! class_exists( 'ZipArchive' ) ) {
+ wp_send_json_error( __( 'Unable to generate export file. ZipArchive not available.' ) );
+ }
+
+ // Get the request data.
+ $request = wp_get_user_request_data( $request_id );
+
+ if ( ! $request || 'export_personal_data' !== $request->action_name ) {
+ wp_send_json_error( __( 'Invalid request ID when generating export file.' ) );
+ }
+
+ $email_address = $request->email;
+
+ if ( ! is_email( $email_address ) ) {
+ wp_send_json_error( __( 'Invalid email address when generating export file.' ) );
+ }
+
+ // Create the exports folder if needed.
+ $exports_dir = wp_privacy_exports_dir();
+ $exports_url = wp_privacy_exports_url();
+
+ if ( ! wp_mkdir_p( $exports_dir ) ) {
+ wp_send_json_error( __( 'Unable to create export folder.' ) );
+ }
+
+ // Protect export folder from browsing.
+ $index_pathname = $exports_dir . 'index.html';
+ if ( ! file_exists( $index_pathname ) ) {
+ $file = fopen( $index_pathname, 'w' );
+ if ( false === $file ) {
+ wp_send_json_error( __( 'Unable to protect export folder from browsing.' ) );
+ }
+ fwrite( $file, '<!-- Silence is golden. -->' );
+ fclose( $file );
+ }
+
+ $stripped_email = str_replace( '@', '-at-', $email_address );
+ $stripped_email = sanitize_title( $stripped_email ); // slugify the email address
+ $obscura = wp_generate_password( 32, false, false );
+ $file_basename = 'wp-personal-data-file-' . $stripped_email . '-' . $obscura;
+ $html_report_filename = $file_basename . '.html';
+ $html_report_pathname = wp_normalize_path( $exports_dir . $html_report_filename );
+ $file = fopen( $html_report_pathname, 'w' );
+ if ( false === $file ) {
+ wp_send_json_error( __( 'Unable to open export file (HTML report) for writing.' ) );
+ }
+
+ $title = sprintf(
+ /* translators: %s: user's e-mail address */
+ __( 'Personal Data Export for %s' ),
+ $email_address
+ );
+
+ // Open HTML.
+ fwrite( $file, "<!DOCTYPE html>\n" );
+ fwrite( $file, "<html>\n" );
+
+ // Head.
+ fwrite( $file, "<head>\n" );
+ fwrite( $file, "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />\n" );
+ fwrite( $file, "<style type='text/css'>" );
+ fwrite( $file, "body { color: black; font-family: Arial, sans-serif; font-size: 11pt; margin: 15px auto; width: 860px; }" );
+ fwrite( $file, "table { background: #f0f0f0; border: 1px solid #ddd; margin-bottom: 20px; width: 100%; }" );
+ fwrite( $file, "th { padding: 5px; text-align: left; width: 20%; }" );
+ fwrite( $file, "td { padding: 5px; }" );
+ fwrite( $file, "tr:nth-child(odd) { background-color: #fafafa; }" );
+ fwrite( $file, "</style>" );
+ fwrite( $file, "<title>" );
+ fwrite( $file, esc_html( $title ) );
+ fwrite( $file, "</title>" );
+ fwrite( $file, "</head>\n" );
+
+ // Body.
+ fwrite( $file, "<body>\n" );
+
+ // Heading.
+ fwrite( $file, "<h1>" . esc_html__( 'Personal Data Export' ) . "</h1>" );
+
+ // And now, all the Groups.
+ $groups = get_post_meta( $request_id, '_export_data_grouped', true );
+
+ // First, build an "About" group on the fly for this report.
+ $about_group = array(
+ /* translators: Header for the About section in a personal data export. */
+ 'group_label' => _x( 'About', 'personal data group label' ),
+ 'items' => array(
+ 'about-1' => array(
+ array(
+ 'name' => _x( 'Report generated for', 'email address' ),
+ 'value' => $email_address,
+ ),
+ array(
+ 'name' => _x( 'For site', 'website name' ),
+ 'value' => get_bloginfo( 'name' ),
+ ),
+ array(
+ 'name' => _x( 'At URL', 'website URL' ),
+ 'value' => get_bloginfo( 'url' ),
+ ),
+ array(
+ 'name' => _x( 'On', 'date/time' ),
+ 'value' => current_time( 'mysql' ),
+ ),
+ ),
+ ),
+ );
+
+ // Merge in the special about group.
+ $groups = array_merge( array( 'about' => $about_group ), $groups );
+
+ // Now, iterate over every group in $groups and have the formatter render it in HTML.
+ foreach ( (array) $groups as $group_id => $group_data ) {
+ fwrite( $file, wp_privacy_generate_personal_data_export_group_html( $group_data ) );
+ }
+
+ fwrite( $file, "</body>\n" );
+
+ // Close HTML.
+ fwrite( $file, "</html>\n" );
+ fclose( $file );
+
+ /*
+ * Now, generate the ZIP.
+ *
+ * If an archive has already been generated, then remove it and reuse the
+ * filename, to avoid breaking any URLs that may have been previously sent
+ * via email.
+ */
+ $error = false;
+ $archive_url = get_post_meta( $request_id, '_export_file_url', true );
+ $archive_pathname = get_post_meta( $request_id, '_export_file_path', true );
+
+ if ( empty( $archive_pathname ) || empty( $archive_url ) ) {
+ $archive_filename = $file_basename . '.zip';
+ $archive_pathname = $exports_dir . $archive_filename;
+ $archive_url = $exports_url . $archive_filename;
+
+ update_post_meta( $request_id, '_export_file_url', $archive_url );
+ update_post_meta( $request_id, '_export_file_path', wp_normalize_path( $archive_pathname ) );
+ }
+
+ if ( ! empty( $archive_pathname ) && file_exists( $archive_pathname ) ) {
+ wp_delete_file( $archive_pathname );
+ }
+
+ $zip = new ZipArchive;
+ if ( true === $zip->open( $archive_pathname, ZipArchive::CREATE ) ) {
+ if ( ! $zip->addFile( $html_report_pathname, 'index.html' ) ) {
+ $error = __( 'Unable to add data to export file.' );
+ }
+
+ $zip->close();
+
+ if ( ! $error ) {
+ /**
+ * Fires right after all personal data has been written to the export file.
+ *
+ * @since 4.9.6
+ *
+ * @param string $archive_pathname The full path to the export file on the filesystem.
+ * @param string $archive_url The URL of the archive file.
+ * @param string $html_report_pathname The full path to the personal data report on the filesystem.
+ * @param int $request_id The export request ID.
+ */
+ do_action( 'wp_privacy_personal_data_export_file_created', $archive_pathname, $archive_url, $html_report_pathname, $request_id );
+ }
+ } else {
+ $error = __( 'Unable to open export file (archive) for writing.' );
+ }
+
+ // And remove the HTML file.
+ unlink( $html_report_pathname );
+
+ if ( $error ) {
+ wp_send_json_error( $error );
+ }
+}
+
+/**
+ * Send an email to the user with a link to the personal data export file
+ *
+ * @since 4.9.6
+ *
+ * @param int $request_id The request ID for this personal data export.
+ * @return true|WP_Error True on success or `WP_Error` on failure.
+ */
+function wp_privacy_send_personal_data_export_email( $request_id ) {
+ // Get the request data.
+ $request = wp_get_user_request_data( $request_id );
+
+ if ( ! $request || 'export_personal_data' !== $request->action_name ) {
+ return new WP_Error( 'invalid', __( 'Invalid request ID when sending personal data export email.' ) );
+ }
+
+ /** This filter is documented in wp-includes/functions.php */
+ $expiration = apply_filters( 'wp_privacy_export_expiration', 3 * DAY_IN_SECONDS );
+ $expiration_date = date_i18n( get_option( 'date_format' ), time() + $expiration );
+
+/* translators: Do not translate EXPIRATION, LINK, SITENAME, SITEURL: those are placeholders. */
+$email_text = __(
+'Howdy,
+
+Your request for an export of personal data has been completed. You may
+download your personal data by clicking on the link below. For privacy
+and security, we will automatically delete the file on ###EXPIRATION###,
+so please download it before then.
+
+###LINK###
+
+Regards,
+All at ###SITENAME###
+###SITEURL###'
+);
+
+ /**
+ * Filters the text of the email sent with a personal data export file.
+ *
+ * The following strings have a special meaning and will get replaced dynamically:
+ * ###EXPIRATION### The date when the URL will be automatically deleted.
+ * ###LINK### URL of the personal data export file for the user.
+ * ###SITENAME### The name of the site.
+ * ###SITEURL### The URL to the site.
+ *
+ * @since 4.9.6
+ *
+ * @param string $email_text Text in the email.
+ * @param int $request_id The request ID for this personal data export.
+ */
+ $content = apply_filters( 'wp_privacy_personal_data_email_content', $email_text, $request_id );
+
+ $email_address = $request->email;
+ $export_file_url = get_post_meta( $request_id, '_export_file_url', true );
+ $site_name = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
+ $site_url = home_url();
+
+ $content = str_replace( '###EXPIRATION###', $expiration_date, $content );
+ $content = str_replace( '###LINK###', esc_url_raw( $export_file_url ), $content );
+ $content = str_replace( '###EMAIL###', $email_address, $content );
+ $content = str_replace( '###SITENAME###', $site_name, $content );
+ $content = str_replace( '###SITEURL###', esc_url_raw( $site_url ), $content );
+
+ $mail_success = wp_mail(
+ $email_address,
+ sprintf(
+ __( '[%s] Personal Data Export' ),
+ $site_name
+ ),
+ $content
+ );
+
+ if ( ! $mail_success ) {
+ return new WP_Error( 'error', __( 'Unable to send personal data export email.' ) );
+ }
+
+ return true;
+}
+
+/**
+ * Intercept personal data exporter page ajax responses in order to assemble the personal data export file.
+ * @see wp_privacy_personal_data_export_page
+ * @since 4.9.6
+ *
+ * @param array $response The response from the personal data exporter for the given page.
+ * @param int $exporter_index The index of the personal data exporter. Begins at 1.
+ * @param string $email_address The email address of the user whose personal data this is.
+ * @param int $page The page of personal data for this exporter. Begins at 1.
+ * @param int $request_id The request ID for this personal data export.
+ * @param bool $send_as_email Whether the final results of the export should be emailed to the user.
+ * @param string $exporter_key The slug (key) of the exporter.
+ * @return array The filtered response.
+ */
+function wp_privacy_process_personal_data_export_page( $response, $exporter_index, $email_address, $page, $request_id, $send_as_email, $exporter_key ) {
+ /* Do some simple checks on the shape of the response from the exporter.
+ * If the exporter response is malformed, don't attempt to consume it - let it
+ * pass through to generate a warning to the user by default ajax processing.
+ */
+ if ( ! is_array( $response ) ) {
+ return $response;
+ }
+
+ if ( ! array_key_exists( 'done', $response ) ) {
+ return $response;
+ }
+
+ if ( ! array_key_exists( 'data', $response ) ) {
+ return $response;
+ }
+
+ if ( ! is_array( $response['data'] ) ) {
+ return $response;
+ }
+
+ // Get the request data.
+ $request = wp_get_user_request_data( $request_id );
+
+ if ( ! $request || 'export_personal_data' !== $request->action_name ) {
+ wp_send_json_error( __( 'Invalid request ID when merging exporter data.' ) );
+ }
+
+ $export_data = array();
+
+ // First exporter, first page? Reset the report data accumulation array.
+ if ( 1 === $exporter_index && 1 === $page ) {
+ update_post_meta( $request_id, '_export_data_raw', $export_data );
+ } else {
+ $export_data = get_post_meta( $request_id, '_export_data_raw', true );
+ }
+
+ // Now, merge the data from the exporter response into the data we have accumulated already.
+ $export_data = array_merge( $export_data, $response['data'] );
+ update_post_meta( $request_id, '_export_data_raw', $export_data );
+
+ // If we are not yet on the last page of the last exporter, return now.
+ /** This filter is documented in wp-admin/includes/ajax-actions.php */
+ $exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() );
+ $is_last_exporter = $exporter_index === count( $exporters );
+ $exporter_done = $response['done'];
+ if ( ! $is_last_exporter || ! $exporter_done ) {
+ return $response;
+ }
+
+ // Last exporter, last page - let's prepare the export file.
+
+ // First we need to re-organize the raw data hierarchically in groups and items.
+ $groups = array();
+ foreach ( (array) $export_data as $export_datum ) {
+ $group_id = $export_datum['group_id'];
+ $group_label = $export_datum['group_label'];
+ if ( ! array_key_exists( $group_id, $groups ) ) {
+ $groups[ $group_id ] = array(
+ 'group_label' => $group_label,
+ 'items' => array(),
+ );
+ }
+
+ $item_id = $export_datum['item_id'];
+ if ( ! array_key_exists( $item_id, $groups[ $group_id ]['items'] ) ) {
+ $groups[ $group_id ]['items'][ $item_id ] = array();
+ }
+
+ $old_item_data = $groups[ $group_id ]['items'][ $item_id ];
+ $merged_item_data = array_merge( $export_datum['data'], $old_item_data );
+ $groups[ $group_id ]['items'][ $item_id ] = $merged_item_data;
+ }
+
+ // Then save the grouped data into the request.
+ delete_post_meta( $request_id, '_export_data_raw' );
+ update_post_meta( $request_id, '_export_data_grouped', $groups );
+
+ /**
+ * Generate the export file from the collected, grouped personal data.
+ *
+ * @since 4.9.6
+ *
+ * @param int $request_id The export request ID.
+ */
+ do_action( 'wp_privacy_personal_data_export_file', $request_id );
+
+ // Clear the grouped data now that it is no longer needed.
+ delete_post_meta( $request_id, '_export_data_grouped' );
+
+ // If the destination is email, send it now.
+ if ( $send_as_email ) {
+ $mail_success = wp_privacy_send_personal_data_export_email( $request_id );
+ if ( is_wp_error( $mail_success ) ) {
+ wp_send_json_error( $mail_success->get_error_message() );
+ }
+ } else {
+ // Modify the response to include the URL of the export file so the browser can fetch it.
+ $export_file_url = get_post_meta( $request_id, '_export_file_url', true );
+ if ( ! empty( $export_file_url ) ) {
+ $response['url'] = $export_file_url;
+ }
+ }
+
+ // Update the request to completed state.
+ _wp_privacy_completed_request( $request_id );
+
+ return $response;
+}
* @since 1.5.0
*
* @global WP_Rewrite $wp_rewrite
+ *
+ * @return bool|null True on write success, false on failure. Null in multisite.
*/
function save_mod_rewrite_rules() {
if ( is_multisite() )
global $wp_rewrite;
- $home_path = get_home_path();
- $htaccess_file = $home_path.'.htaccess';
+ // Ensure get_home_path() is declared.
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
+
+ $home_path = get_home_path();
+ $htaccess_file = $home_path . '.htaccess';
/*
* If the file doesn't already exist check for write access to the directory
*
* @global WP_Rewrite $wp_rewrite
*
- * @return bool True if web.config was updated successfully
+ * @return bool|null True on write success, false on failure. Null in multisite.
*/
function iis7_save_url_rewrite_rules(){
if ( is_multisite() )
global $wp_rewrite;
- $home_path = get_home_path();
+ // Ensure get_home_path() is declared.
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
+
+ $home_path = get_home_path();
$web_config_file = $home_path . 'web.config';
// Using win_is_writable() instead of is_writable() because of a bug in Windows PHP
case 'upload_per_page':
case 'edit_tags_per_page':
case 'plugins_per_page':
+ case 'export_personal_data_requests_per_page':
+ case 'remove_personal_data_requests_per_page':
// Network admin
case 'sites_network_per_page':
case 'users_network_per_page':
return;
}
- $hash = md5( $value . time() . mt_rand() );
+ $hash = md5( $value . time() . wp_rand() );
$new_admin_email = array(
'hash' => $hash,
'newemail' => $value,
restore_previous_locale();
}
}
+
+/**
+ * Appends '(Draft)' to draft page titles in the privacy page dropdown
+ * so that unpublished content is obvious.
+ *
+ * @since 4.9.8
+ * @access private
+ *
+ * @param string $title Page title.
+ * @param WP_Post $page Page data object.
+ *
+ * @return string Page title.
+ */
+function _wp_privacy_settings_filter_draft_page_titles( $title, $page ) {
+ if ( 'draft' === $page->post_status && 'privacy' === get_current_screen()->id ) {
+ /* translators: %s: Page Title */
+ $title = sprintf( __( '%s (Draft)' ), $title );
+ }
+
+ return $title;
+}
+
+/**
+ * WP_Privacy_Policy_Content class.
+ * TODO: move this to a new file.
+ *
+ * @since 4.9.6
+ */
+final class WP_Privacy_Policy_Content {
+
+ private static $policy_content = array();
+
+ /**
+ * Constructor
+ *
+ * @since 4.9.6
+ */
+ private function __construct() {}
+
+ /**
+ * Add content to the postbox shown when editing the privacy policy.
+ *
+ * Plugins and themes should suggest text for inclusion in the site's privacy policy.
+ * The suggested text should contain information about any functionality that affects user privacy,
+ * and will be shown in the Suggested Privacy Policy Content postbox.
+ *
+ * Intended for use from `wp_add_privacy_policy_content()`.
+ *
+ * $since 4.9.6
+ *
+ * @param string $plugin_name The name of the plugin or theme that is suggesting content for the site's privacy policy.
+ * @param string $policy_text The suggested content for inclusion in the policy.
+ */
+ public static function add( $plugin_name, $policy_text ) {
+ if ( empty( $plugin_name ) || empty( $policy_text ) ) {
+ return;
+ }
+
+ $data = array(
+ 'plugin_name' => $plugin_name,
+ 'policy_text' => $policy_text,
+ );
+
+ if ( ! in_array( $data, self::$policy_content, true ) ) {
+ self::$policy_content[] = $data;
+ }
+ }
+
+ /**
+ * Quick check if any privacy info has changed.
+ *
+ * @since 4.9.6
+ */
+ public static function text_change_check() {
+
+ $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
+
+ // The site doesn't have a privacy policy.
+ if ( empty( $policy_page_id ) ) {
+ return false;
+ }
+
+ if ( ! current_user_can( 'edit_post', $policy_page_id ) ) {
+ return false;
+ }
+
+ $old = (array) get_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
+
+ // Updates are not relevant if the user has not reviewed any suggestions yet.
+ if ( empty( $old ) ) {
+ return false;
+ }
+
+ $cached = get_option( '_wp_suggested_policy_text_has_changed' );
+
+ /*
+ * When this function is called before `admin_init`, `self::$policy_content`
+ * has not been populated yet, so use the cached result from the last
+ * execution instead.
+ */
+ if ( ! did_action( 'admin_init' ) ) {
+ return 'changed' === $cached;
+ }
+
+ $new = self::$policy_content;
+
+ // Remove the extra values added to the meta.
+ foreach ( $old as $key => $data ) {
+ if ( ! empty( $data['removed'] ) ) {
+ unset( $old[ $key ] );
+ continue;
+ }
+
+ $old[ $key ] = array(
+ 'plugin_name' => $data['plugin_name'],
+ 'policy_text' => $data['policy_text'],
+ );
+ }
+
+ // Normalize the order of texts, to facilitate comparison.
+ sort( $old );
+ sort( $new );
+
+ // The == operator (equal, not identical) was used intentionally.
+ // See http://php.net/manual/en/language.operators.array.php
+ if ( $new != $old ) {
+ // A plugin was activated or deactivated, or some policy text has changed.
+ // Show a notice on the relevant screens to inform the admin.
+ add_action( 'admin_notices', array( 'WP_Privacy_Policy_Content', 'policy_text_changed_notice' ) );
+ $state = 'changed';
+ } else {
+ $state = 'not-changed';
+ }
+
+ // Cache the result for use before `admin_init` (see above).
+ if ( $cached !== $state ) {
+ update_option( '_wp_suggested_policy_text_has_changed', $state );
+ }
+
+ return 'changed' === $state;
+ }
+
+ /**
+ * Output a warning when some privacy info has changed.
+ *
+ * @since 4.9.6
+ */
+ public static function policy_text_changed_notice() {
+ global $post;
+
+ $screen = get_current_screen()->id;
+
+ if ( 'privacy' !== $screen ) {
+ return;
+ }
+
+ ?>
+ <div class="policy-text-updated notice notice-warning is-dismissible">
+ <p><?php
+ printf(
+ /* translators: %s: Privacy Policy Guide URL */
+ __( 'The suggested privacy policy text has changed. Please <a href="%s">review the guide</a> and update your privacy policy.' ),
+ esc_url( admin_url( 'tools.php?wp-privacy-policy-guide=1' ) )
+ );
+ ?></p>
+ </div>
+ <?php
+ }
+
+ /**
+ * Update the cached policy info when the policy page is updated.
+ *
+ * @since 4.9.6
+ * @access private
+ */
+ public static function _policy_page_updated( $post_id ) {
+ $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
+
+ if ( ! $policy_page_id || $policy_page_id !== (int) $post_id ) {
+ return;
+ }
+
+ // Remove updated|removed status.
+ $old = (array) get_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
+ $done = array();
+ $update_cache = false;
+
+ foreach ( $old as $old_key => $old_data ) {
+ if ( ! empty( $old_data['removed'] ) ) {
+ // Remove the old policy text.
+ $update_cache = true;
+ continue;
+ }
+
+ if ( ! empty( $old_data['updated'] ) ) {
+ // 'updated' is now 'added'.
+ $done[] = array(
+ 'plugin_name' => $old_data['plugin_name'],
+ 'policy_text' => $old_data['policy_text'],
+ 'added' => $old_data['updated'],
+ );
+ $update_cache = true;
+ } else {
+ $done[] = $old_data;
+ }
+ }
+
+ if ( $update_cache ) {
+ delete_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
+ // Update the cache.
+ foreach ( $done as $data ) {
+ add_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content', $data );
+ }
+ }
+ }
+
+ /**
+ * Check for updated, added or removed privacy policy information from plugins.
+ *
+ * Caches the current info in post_meta of the policy page.
+ *
+ * @since 4.9.6
+ *
+ * @return array The privacy policy text/informtion added by core and plugins.
+ */
+ public static function get_suggested_policy_text() {
+ $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
+ $checked = array();
+ $time = time();
+ $update_cache = false;
+ $new = self::$policy_content;
+ $old = array();
+
+ if ( $policy_page_id ) {
+ $old = (array) get_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
+ }
+
+ // Check for no-changes and updates.
+ foreach ( $new as $new_key => $new_data ) {
+ foreach ( $old as $old_key => $old_data ) {
+ $found = false;
+
+ if ( $new_data['policy_text'] === $old_data['policy_text'] ) {
+ // Use the new plugin name in case it was changed, translated, etc.
+ if ( $old_data['plugin_name'] !== $new_data['plugin_name'] ) {
+ $old_data['plugin_name'] = $new_data['plugin_name'];
+ $update_cache = true;
+ }
+
+ // A plugin was re-activated.
+ if ( ! empty( $old_data['removed'] ) ) {
+ unset( $old_data['removed'] );
+ $old_data['added'] = $time;
+ $update_cache = true;
+ }
+
+ $checked[] = $old_data;
+ $found = true;
+ } elseif ( $new_data['plugin_name'] === $old_data['plugin_name'] ) {
+ // The info for the policy was updated.
+ $checked[] = array(
+ 'plugin_name' => $new_data['plugin_name'],
+ 'policy_text' => $new_data['policy_text'],
+ 'updated' => $time,
+ );
+ $found = $update_cache = true;
+ }
+
+ if ( $found ) {
+ unset( $new[ $new_key ], $old[ $old_key ] );
+ continue 2;
+ }
+ }
+ }
+
+ if ( ! empty( $new ) ) {
+ // A plugin was activated.
+ foreach ( $new as $new_data ) {
+ if ( ! empty( $new_data['plugin_name'] ) && ! empty( $new_data['policy_text'] ) ) {
+ $new_data['added'] = $time;
+ $checked[] = $new_data;
+ }
+ }
+ $update_cache = true;
+ }
+
+ if ( ! empty( $old ) ) {
+ // A plugin was deactivated.
+ foreach ( $old as $old_data ) {
+ if ( ! empty( $old_data['plugin_name'] ) && ! empty( $old_data['policy_text'] ) ) {
+ $data = array(
+ 'plugin_name' => $old_data['plugin_name'],
+ 'policy_text' => $old_data['policy_text'],
+ 'removed' => $time,
+ );
+
+ $checked[] = $data;
+ }
+ }
+ $update_cache = true;
+ }
+
+ if ( $update_cache && $policy_page_id ) {
+ delete_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content' );
+ // Update the cache.
+ foreach ( $checked as $data ) {
+ add_post_meta( $policy_page_id, '_wp_suggested_privacy_policy_content', $data );
+ }
+ }
+
+ return $checked;
+ }
+
+ /**
+ * Add a notice with a link to the guide when editing the privacy policy page.
+ *
+ * @since 4.9.6
+ *
+ * @param $post WP_Post The currently edited post.
+ */
+ public static function notice( $post ) {
+ if ( ! ( $post instanceof WP_Post ) ) {
+ return;
+ }
+
+ if ( ! current_user_can( 'manage_privacy_options' ) ) {
+ return;
+ }
+
+ $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
+
+ if ( ! $policy_page_id || $policy_page_id != $post->ID ) {
+ return;
+ }
+
+ ?>
+ <div class="notice notice-warning inline wp-pp-notice">
+ <p>
+ <?php
+ /* translators: 1: Privacy Policy guide URL, 2: additional link attributes, 3: accessibility text */
+ printf(
+ __( 'Need help putting together your new Privacy Policy page? <a href="%1$s" %2$s>Check out our guide%3$s</a> for recommendations on what content to include, along with policies suggested by your plugins and theme.' ),
+ admin_url( 'tools.php?wp-privacy-policy-guide=1' ),
+ 'target="_blank"',
+ sprintf(
+ '<span class="screen-reader-text"> %s</span>',
+ /* translators: accessibility text */
+ __( '(opens in a new tab)' )
+ )
+ );
+ ?>
+ </p>
+ </div>
+ <?php
+
+ }
+
+ /**
+ * Output the privacy policy guide together with content from the theme and plugins.
+ *
+ * @since 4.9.6
+ */
+ public static function privacy_policy_guide() {
+
+ $content_array = self::get_suggested_policy_text();
+
+ $content = '';
+ $toc = array( '<li><a href="#wp-privacy-policy-guide-introduction">' . __( 'Introduction' ) . '</a></li>' );
+ $date_format = __( 'F j, Y' );
+ $copy = __( 'Copy' );
+ $return_to_top = '<a href="#" class="return-to-top">' . __( '↑ Return to Top' ) . '</a>';
+
+ foreach ( $content_array as $section ) {
+ $class = $meta = $removed = '';
+
+ if ( ! empty( $section['removed'] ) ) {
+ $class = ' text-removed';
+ $date = date_i18n( $date_format, $section['removed'] );
+ $meta = sprintf( __( 'Removed %s.' ), $date );
+
+ $removed = __( 'You deactivated this plugin on %s and may no longer need this policy.' );
+ $removed = '<div class="error inline"><p>' . sprintf( $removed, $date ) . '</p></div>';
+ } elseif ( ! empty( $section['updated'] ) ) {
+ $class = ' text-updated';
+ $date = date_i18n( $date_format, $section['updated'] );
+ $meta = sprintf( __( 'Updated %s.' ), $date );
+ }
+
+ if ( $meta ) {
+ $meta = '<br><span class="privacy-text-meta">' . $meta . '</span>';
+ }
+
+ $plugin_name = esc_html( $section['plugin_name'] );
+ $toc_id = 'wp-privacy-policy-guide-' . sanitize_title( $plugin_name );
+ $toc[] = sprintf( '<li><a href="#%1$s">%2$s</a>' . $meta . '</li>', $toc_id, $plugin_name );
+
+ $content .= '<div class="privacy-text-section' . $class . '">';
+ $content .= '<a id="' . $toc_id . '"> </a>';
+ /* translators: %s: plugin name */
+ $content .= '<h2>' . sprintf( __( 'Source: %s' ), $plugin_name ) . '</h2>';
+ $content .= $removed;
+
+ $content .= '<div class="policy-text">' . $section['policy_text'] . '</div>';
+ $content .= $return_to_top;
+
+ if ( empty( $section['removed'] ) ) {
+ $content .= '<div class="privacy-text-actions">';
+ $content .= '<button type="button" class="privacy-text-copy button">';
+ $content .= $copy;
+ $content .= '<span class="screen-reader-text">' . sprintf( __( 'Copy suggested policy text from %s.' ), $plugin_name ) . '</span>';
+ $content .= '</button>';
+ $content .= '</div>';
+ }
+
+ $content .= "</div>\n"; // End of .privacy-text-section.
+ }
+
+ if ( count( $toc ) > 2 ) {
+ ?>
+ <div class="privacy-text-box-toc">
+ <p><?php _e( 'Table of Contents' ); ?></p>
+ <ol>
+ <?php echo implode( "\n", $toc ); ?>
+ </ol>
+ </div>
+ <?php
+ }
+
+ ?>
+ <div class="privacy-text-box">
+ <div class="privacy-text-box-head">
+ <a id="wp-privacy-policy-guide-introduction"> </a>
+ <h2><?php _e( 'Introduction' ); ?></h2>
+ <p><?php _e( 'Hello,' ); ?></p>
+ <p><?php _e( 'This text template will help you to create your web site’s privacy policy.' ); ?></p>
+ <p><?php _e( 'We have suggested the sections you will need. Under each section heading you will find a short summary of what information you should provide, which will help you to get started. Some sections include suggested policy content, others will have to be completed with information from your theme and plugins.' ); ?></p>
+ <p><?php _e( 'Please edit your privacy policy content, making sure to delete the summaries, and adding any information from your theme and plugins. Once you publish your policy page, remember to add it to your navigation menu.' ); ?></p>
+ <p><?php _e( 'It is your responsibility to write a comprehensive privacy policy, to make sure it reflects all national and international legal requirements on privacy, and to keep your policy current and accurate.' ); ?></p>
+ </div>
+
+ <div class="privacy-text-box-body">
+ <?php echo $content; ?>
+ </div>
+ </div>
+ <?php
+ }
+
+ /**
+ * Return the default suggested privacy policy content.
+ *
+ * @since 4.9.6
+ *
+ * @param bool $descr Whether to include the descriptions under the section headings. Default false.
+ * @return string The default policy content.
+ */
+ public static function get_default_content( $descr = false ) {
+ $suggested_text = $descr ? '<strong class="privacy-policy-tutorial">' . __( 'Suggested text:' ) . ' </strong>' : '';
+ $content = '';
+
+ // Start of the suggested privacy policy text.
+ $descr && $content .=
+ '<div class="wp-suggested-text">';
+ $content .=
+ '<h2>' . __( 'Who we are' ) . '</h2>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this section you should note your site URL, as well as the name of the company, organization, or individual behind it, and some accurate contact information.' ) . '</p>' .
+ '<p class="privacy-policy-tutorial">' . __( 'The amount of information you may be required to show will vary depending on your local or national business regulations. You may, for example, be required to display a physical address, a registered address, or your company registration number.' ) . '</p>';
+ $content .=
+ /* translators: %s Site URL */
+ '<p>' . $suggested_text . sprintf( __( 'Our website address is: %s.' ), get_bloginfo( 'url', 'display' ) ) . '</p>' .
+
+ '<h2>' . __( 'What personal data we collect and why we collect it' ) . '</h2>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this section you should note what personal data you collect from users and site visitors. This may include personal data, such as name, email address, personal account preferences; transactional data, such as purchase information; and technical data, such as information about cookies.' ) . '</p>' .
+ '<p class="privacy-policy-tutorial">' . __( 'You should also note any collection and retention of sensitive personal data, such as data concerning health.' ) . '</p>' .
+ '<p class="privacy-policy-tutorial">' . __( 'In addition to listing what personal data you collect, you need to note why you collect it. These explanations must note either the legal basis for your data collection and retention or the active consent the user has given.' ) . '</p>' .
+ '<p class="privacy-policy-tutorial">' . __( 'Personal data is not just created by a user’s interactions with your site. Personal data is also generated from technical processes such as contact forms, comments, cookies, analytics, and third party embeds.' ) . '</p>' .
+ '<p class="privacy-policy-tutorial">' . __( 'By default WordPress does not collect any personal data about visitors, and only collects the data shown on the User Profile screen from registered users. However some of your plugins may collect personal data. You should add the relevant information below.' ) . '</p>';
+
+ $content .=
+ '<h3>' . __( 'Comments' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should note what information is captured through comments. We have noted the data which WordPress collects by default.' ) . '</p>';
+ $content .=
+ '<p>' . $suggested_text . __( 'When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.' ) . '</p>' .
+ '<p>' . __( 'An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.' ) . '</p>' .
+
+ '<h3>' . __( 'Media' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should note what information may be disclosed by users who can upload media files. All uploaded files are usually publicly accessible.' ) . '</p>';
+ $content .=
+ '<p>' . $suggested_text . __( 'If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.' ) . '</p>' .
+
+ '<h3>' . __( 'Contact forms' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'By default, WordPress does not include a contact form. If you use a contact form plugin, use this subsection to note what personal data is captured when someone submits a contact form, and how long you keep it. For example, you may note that you keep contact form submissions for a certain period for customer service purposes, but you do not use the information submitted through them for marketing purposes.' ) . '</p>';
+
+ $content .=
+ '<h3>' . __( 'Cookies' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should list the cookies your web site uses, including those set by your plugins, social media, and analytics. We have provided the cookies which WordPress installs by default.' ) . '</p>';
+ $content .=
+ '<p>' . $suggested_text . __( 'If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.' ) . '</p>' .
+ '<p>' . __( 'If you have an account and you log in to this site, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.' ) . '</p>' .
+ '<p>' . __( 'When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed.' ) . '</p>' .
+ '<p>' . __( 'If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.' ) . '</p>' .
+
+ '<h3>' . __( 'Embedded content from other websites' ) . '</h3>' .
+ '<p>' . $suggested_text . __( 'Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.' ) . '</p>' .
+ '<p>' . __( 'These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.' ) . '</p>' .
+
+ '<h3>' . __( 'Analytics' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this subsection you should note what analytics package you use, how users can opt out of analytics tracking, and a link to your analytics provider’s privacy policy, if any.' ) . '</p>' .
+ '<p class="privacy-policy-tutorial">' . __( 'By default WordPress does not collect any analytics data. However, many web hosting accounts collect some anonymous analytics data. You may also have installed a WordPress plugin that provides analytics services. In that case, add information from that plugin here.' ) . '</p>';
+
+ $content .=
+ '<h2>' . __( 'Who we share your data with' ) . '</h2>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this section you should name and list all third party providers with whom you share site data, including partners, cloud-based services, payment processors, and third party service providers, and note what data you share with them and why. Link to their own privacy policies if possible.' ) . '</p>' .
+ '<p class="privacy-policy-tutorial">' . __( 'By default WordPress does not share any personal data with anyone.' ) . '</p>';
+
+ $content .=
+ '<h2>' . __( 'How long we retain your data' ) . '</h2>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this section you should explain how long you retain personal data collected or processed by the web site. While it is your responsibility to come up with the schedule of how long you keep each dataset for and why you keep it, that information does need to be listed here. For example, you may want to say that you keep contact form entries for six months, analytics records for a year, and customer purchase records for ten years.' ) . '</p>';
+ $content .=
+ '<p>' . $suggested_text . __( 'If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.' ) . '</p>' .
+ '<p>' . __( 'For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.' ) . '</p>' .
+
+ '<h2>' . __( 'What rights you have over your data' ) . '</h2>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this section you should explain what rights your users have over their data and how they can invoke those rights.' ) . '</p>';
+ $content .=
+ '<p>' . $suggested_text . __( 'If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.' ) . '</p>' .
+
+ '<h2>' . __( 'Where we send your data' ) . '</h2>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this section you should list all transfers of your site data outside the European Union and describe the means by which that data is safeguarded to European data protection standards. This could include your web hosting, cloud storage, or other third party services.' ) . '</p>' .
+ '<p class="privacy-policy-tutorial">' . __( 'European data protection law requires data about European residents which is transferred outside the European Union to be safeguarded to the same standards as if the data was in Europe. So in addition to listing where data goes, you should describe how you ensure that these standards are met either by yourself or by your third party providers, whether that is through an agreement such as Privacy Shield, model clauses in your contracts, or binding corporate rules.' ) . '</p>';
+ $content .=
+ '<p>' . $suggested_text . __( 'Visitor comments may be checked through an automated spam detection service.' ) . '</p>' .
+
+ '<h2>' . __( 'Your contact information' ) . '</h2>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this section you should provide a contact method for privacy-specific concerns. If you are required to have a Data Protection Officer, list their name and full contact details here as well.' ) . '</p>';
+
+ $content .=
+ '<h2>' . __( 'Additional information' ) . '</h2>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'If you use your site for commercial purposes and you engage in more complex collection or processing of personal data, you should note the following information in your privacy policy in addition to the information we have already discussed.' ) . '</p>';
+
+ $content .=
+ '<h3>' . __( 'How we protect your data' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this section you should explain what measures you have taken to protect your users’ data. This could include technical measures such as encryption; security measures such as two factor authentication; and measures such as staff training in data protection. If you have carried out a Privacy Impact Assessment, you can mention it here too.' ) . '</p>';
+
+ $content .=
+ '<h3>' . __( 'What data breach procedures we have in place' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'In this section you should explain what procedures you have in place to deal with data breaches, either potential or real, such as internal reporting systems, contact mechanisms, or bug bounties.' ) . '</p>';
+
+ $content .=
+ '<h3>' . __( 'What third parties we receive data from' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'If your web site receives data about users from third parties, including advertisers, this information must be included within the section of your privacy policy dealing with third party data.' ) . '</p>';
+
+ $content .=
+ '<h3>' . __( 'What automated decision making and/or profiling we do with user data' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'If your web site provides a service which includes automated decision making - for example, allowing customers to apply for credit, or aggregating their data into an advertising profile - you must note that this is taking place, and include information about how that information is used, what decisions are made with that aggregated data, and what rights users have over decisions made without human intervention.' ) . '</p>';
+
+ $content .=
+ '<h3>' . __( 'Industry regulatory disclosure requirements' ) . '</h3>';
+ $descr && $content .=
+ '<p class="privacy-policy-tutorial">' . __( 'If you are a member of a regulated industry, or if you are subject to additional privacy laws, you may be required to disclose that information here.' ) . '</p>' .
+ '</div>';
+ // End of the suggested privacy policy text.
+
+ /**
+ * Filters the default content suggested for inclusion in a privacy policy.
+ *
+ * @since 4.9.6
+ *
+ * @param $content string The default policy content.
+ */
+ return apply_filters( 'wp_get_default_privacy_policy_content', $content );
+ }
+
+ /**
+ * Add the suggested privacy policy text to the policy postbox.
+ *
+ * @since 4.9.6
+ */
+ public static function add_suggested_content() {
+ $content = self::get_default_content( true );
+ wp_add_privacy_policy_content( __( 'WordPress' ), $content );
+ }
+}
<li>
<strong><?php _e( 'Requires WordPress Version:' ); ?></strong>
<?php
- /* translators: %s: WordPress version */
+ /* translators: %s: version number */
printf( __( '%s or higher' ), $api->requires );
?>
</li>
<?php } if ( ! empty( $api->tested ) ) { ?>
<li><strong><?php _e( 'Compatible up to:' ); ?></strong> <?php echo $api->tested; ?></li>
+ <?php } if ( ! empty( $api->requires_php ) ) { ?>
+ <li>
+ <strong><?php _e( 'Requires PHP Version:' ); ?></strong>
+ <?php
+ /* translators: %s: version number */
+ printf( __( '%s or higher' ), $api->requires_php );
+ ?>
+ </li>
<?php } if ( isset( $api->active_installs ) ) { ?>
<li><strong><?php _e( 'Active Installations:' ); ?></strong> <?php
if ( $api->active_installs >= 1000000 ) {
wp_register_plugin_realpath( WP_PLUGIN_DIR . '/' . $plugin );
include( WP_PLUGIN_DIR . '/' . $plugin );
}
+
+/**
+ * Helper function for adding content to the Privacy Policy Guide.
+ *
+ * Plugins and themes should suggest text for inclusion in the site's privacy policy.
+ * The suggested text should contain information about any functionality that affects user privacy,
+ * and will be shown on the Privacy Policy Guide screen.
+ *
+ * A plugin or theme can use this function multiple times as long as it will help to better present
+ * the suggested policy content. For example modular plugins such as WooCommerse or Jetpack
+ * can add or remove suggested content depending on the modules/extensions that are enabled.
+ * For more information see the Plugin Handbook:
+ * https://developer.wordpress.org/plugins/privacy/suggesting-text-for-the-site-privacy-policy/.
+ *
+ * Intended for use with the `'admin_init'` action.
+ *
+ * @since 4.9.6
+ *
+ * @param string $plugin_name The name of the plugin or theme that is suggesting content for the site's privacy policy.
+ * @param string $policy_text The suggested content for inclusion in the policy.
+ */
+function wp_add_privacy_policy_content( $plugin_name, $policy_text ) {
+ if ( ! is_admin() ) {
+ _doing_it_wrong(
+ __FUNCTION__,
+ sprintf(
+ /* translators: %s: admin_init */
+ __( 'The suggested privacy policy content should be added only in wp-admin by using the %s (or later) action.' ),
+ '<code>admin_init</code>'
+ ),
+ '4.9.7'
+ );
+ return;
+ } elseif ( ! doing_action( 'admin_init' ) && ! did_action( 'admin_init' ) ) {
+ _doing_it_wrong(
+ __FUNCTION__,
+ sprintf(
+ /* translators: %s: admin_init */
+ __( 'The suggested privacy policy content should be added by using the %s (or later) action. Please see the inline documentation.' ),
+ '<code>admin_init</code>'
+ ),
+ '4.9.7'
+ );
+ return;
+ }
+
+ if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) {
+ require_once( ABSPATH . 'wp-admin/includes/misc.php' );
+ }
+
+ WP_Privacy_Policy_Content::add( $plugin_name, $policy_text );
+}
$q['post_parent'] = 0;
}
+ if ( isset( $q['mine'] ) || ( isset( $q['attachment-filter'] ) && 'mine' == $q['attachment-filter'] ) ) {
+ $q['author'] = get_current_user_id();
+ }
+
// Filter query clauses to include filenames.
if ( isset( $q['s'] ) ) {
add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
// 4.4.0
'medium_large_size_w' => 768,
'medium_large_size_h' => 0,
+
+ // 4.9.6
+ 'wp_page_for_privacy_policy' => 0,
+
+ // 4.9.8
+ 'show_comments_cookies_opt_in' => 0,
);
// 3.3
if ( post_type_supports( $post->post_type, 'post-formats' ) )
echo '<div class="post_format">' . esc_html( get_post_format( $post->ID ) ) . '</div>';
+ /**
+ * Fires after outputting the fields for the inline editor for posts and pages.
+ *
+ * @since 4.9.8
+ *
+ * @param WP_Post $post The current post object.
+ * @param WP_Post_Type $post_type_object The current post's post type object.
+ */
+ do_action( 'add_inline_data', $post, $post_type_object );
+
echo '</div>';
}
$hidden = get_hidden_meta_boxes( $screen );
- printf('<div id="%s-sortables" class="meta-box-sortables">', htmlspecialchars($context));
+ printf( '<div id="%s-sortables" class="meta-box-sortables">', esc_attr( $context ) );
// Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose
if ( ! $already_sorted && $sorted = get_user_option( "meta-box-order_$page" ) ) {
}
}
+ if ( intval( get_option( 'wp_page_for_privacy_policy' ) ) === $post->ID ) {
+ $post_states['page_for_privacy_policy'] = __( 'Privacy Policy Page' );
+ }
+
/**
* Filters the default post display states used in the posts list table.
*
));
$wpdb->insert( $wpdb->postmeta, array( 'post_id' => 2, 'meta_key' => '_wp_page_template', 'meta_value' => 'default' ) );
+ // Privacy Policy page
+ if ( is_multisite() ) {
+ // Disable by default unless the suggested content is provided.
+ $privacy_policy_content = get_site_option( 'default_privacy_policy_content' );
+ } else {
+ if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) {
+ include_once( ABSPATH . 'wp-admin/includes/misc.php' );
+ }
+
+ $privacy_policy_content = WP_Privacy_Policy_Content::get_default_content();
+ }
+
+ if ( ! empty( $privacy_policy_content ) ) {
+ $privacy_policy_guid = get_option( 'home' ) . '/?page_id=3';
+
+ $wpdb->insert(
+ $wpdb->posts, array(
+ 'post_author' => $user_id,
+ 'post_date' => $now,
+ 'post_date_gmt' => $now_gmt,
+ 'post_content' => $privacy_policy_content,
+ 'post_excerpt' => '',
+ 'comment_status' => 'closed',
+ 'post_title' => __( 'Privacy Policy' ),
+ /* translators: Privacy Policy page slug */
+ 'post_name' => __( 'privacy-policy' ),
+ 'post_modified' => $now,
+ 'post_modified_gmt' => $now_gmt,
+ 'guid' => $privacy_policy_guid,
+ 'post_type' => 'page',
+ 'post_status' => 'draft',
+ 'to_ping' => '',
+ 'pinged' => '',
+ 'post_content_filtered' => '',
+ )
+ );
+ $wpdb->insert(
+ $wpdb->postmeta, array(
+ 'post_id' => 3,
+ 'meta_key' => '_wp_page_template',
+ 'meta_value' => 'default',
+ )
+ );
+ update_option( 'wp_page_for_privacy_policy', 3 );
+ }
+
// Set up default widgets for default theme.
update_option( 'widget_search', array ( 2 => array ( 'title' => '' ), '_multiwidget' => 1 ) );
update_option( 'widget_recent-posts', array ( 2 => array ( 'title' => '', 'number' => 5 ), '_multiwidget' => 1 ) );
Please click the following link to activate your user account:
%%s' ), wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ), home_url(), wp_specialchars_decode( translate_user_role( $role['name'] ) ) );
}
+
+/**
+ * Resend an existing request and return the result.
+ *
+ * @since 4.9.6
+ * @access private
+ *
+ * @param int $request_id Request ID.
+ * @return bool|WP_Error Returns true/false based on the success of sending the email, or a WP_Error object.
+ */
+function _wp_privacy_resend_request( $request_id ) {
+ $request_id = absint( $request_id );
+ $request = get_post( $request_id );
+
+ if ( ! $request || 'user_request' !== $request->post_type ) {
+ return new WP_Error( 'privacy_request_error', __( 'Invalid request.' ) );
+ }
+
+ $result = wp_send_user_request( $request_id );
+
+ if ( is_wp_error( $result ) ) {
+ return $result;
+ } elseif ( ! $result ) {
+ return new WP_Error( 'privacy_request_error', __( 'Unable to initiate confirmation request.' ) );
+ }
+
+ return true;
+}
+
+/**
+ * Marks a request as completed by the admin and logs the current timestamp.
+ *
+ * @since 4.9.6
+ * @access private
+ *
+ * @param int $request_id Request ID.
+ * @return int|WP_Error $request Request ID on success or WP_Error.
+ */
+function _wp_privacy_completed_request( $request_id ) {
+ $request_id = absint( $request_id );
+ $request_data = wp_get_user_request_data( $request_id );
+
+ if ( ! $request_data ) {
+ return new WP_Error( 'privacy_request_error', __( 'Invalid request.' ) );
+ }
+
+ update_post_meta( $request_id, '_wp_user_request_completed_timestamp', time() );
+
+ $request = wp_update_post( array(
+ 'ID' => $request_id,
+ 'post_status' => 'request-completed',
+ ) );
+
+ return $request;
+}
+
+/**
+ * Handle list table actions.
+ *
+ * @since 4.9.6
+ * @access private
+ */
+function _wp_personal_data_handle_actions() {
+ if ( isset( $_POST['privacy_action_email_retry'] ) ) {
+ check_admin_referer( 'bulk-privacy_requests' );
+
+ $request_id = absint( current( array_keys( (array) wp_unslash( $_POST['privacy_action_email_retry'] ) ) ) );
+ $result = _wp_privacy_resend_request( $request_id );
+
+ if ( is_wp_error( $result ) ) {
+ add_settings_error(
+ 'privacy_action_email_retry',
+ 'privacy_action_email_retry',
+ $result->get_error_message(),
+ 'error'
+ );
+ } else {
+ add_settings_error(
+ 'privacy_action_email_retry',
+ 'privacy_action_email_retry',
+ __( 'Confirmation request sent again successfully.' ),
+ 'updated'
+ );
+ }
+ } elseif ( isset( $_POST['action'] ) ) {
+ $action = isset( $_POST['action'] ) ? sanitize_key( wp_unslash( $_POST['action'] ) ) : '';
+
+ switch ( $action ) {
+ case 'add_export_personal_data_request':
+ case 'add_remove_personal_data_request':
+ check_admin_referer( 'personal-data-request' );
+
+ if ( ! isset( $_POST['type_of_action'], $_POST['username_or_email_for_privacy_request'] ) ) {
+ add_settings_error(
+ 'action_type',
+ 'action_type',
+ __( 'Invalid action.' ),
+ 'error'
+ );
+ }
+ $action_type = sanitize_text_field( wp_unslash( $_POST['type_of_action'] ) );
+ $username_or_email_address = sanitize_text_field( wp_unslash( $_POST['username_or_email_for_privacy_request'] ) );
+ $email_address = '';
+
+ if ( ! in_array( $action_type, _wp_privacy_action_request_types(), true ) ) {
+ add_settings_error(
+ 'action_type',
+ 'action_type',
+ __( 'Invalid action.' ),
+ 'error'
+ );
+ }
+
+ if ( ! is_email( $username_or_email_address ) ) {
+ $user = get_user_by( 'login', $username_or_email_address );
+ if ( ! $user instanceof WP_User ) {
+ add_settings_error(
+ 'username_or_email_for_privacy_request',
+ 'username_or_email_for_privacy_request',
+ __( 'Unable to add this request. A valid email address or username must be supplied.' ),
+ 'error'
+ );
+ } else {
+ $email_address = $user->user_email;
+ }
+ } else {
+ $email_address = $username_or_email_address;
+ }
+
+ if ( empty( $email_address ) ) {
+ break;
+ }
+
+ $request_id = wp_create_user_request( $email_address, $action_type );
+
+ if ( is_wp_error( $request_id ) ) {
+ add_settings_error(
+ 'username_or_email_for_privacy_request',
+ 'username_or_email_for_privacy_request',
+ $request_id->get_error_message(),
+ 'error'
+ );
+ break;
+ } elseif ( ! $request_id ) {
+ add_settings_error(
+ 'username_or_email_for_privacy_request',
+ 'username_or_email_for_privacy_request',
+ __( 'Unable to initiate confirmation request.' ),
+ 'error'
+ );
+ break;
+ }
+
+ wp_send_user_request( $request_id );
+
+ add_settings_error(
+ 'username_or_email_for_privacy_request',
+ 'username_or_email_for_privacy_request',
+ __( 'Confirmation request initiated successfully.' ),
+ 'updated'
+ );
+ break;
+ }
+ }
+}
+
+/**
+ * Cleans up failed and expired requests before displaying the list table.
+ *
+ * @since 4.9.6
+ * @access private
+ */
+function _wp_personal_data_cleanup_requests() {
+ /** This filter is documented in wp-includes/user.php */
+ $expires = (int) apply_filters( 'user_request_key_expiration', DAY_IN_SECONDS );
+
+ $requests_query = new WP_Query( array(
+ 'post_type' => 'user_request',
+ 'posts_per_page' => -1,
+ 'post_status' => 'request-pending',
+ 'fields' => 'ids',
+ 'date_query' => array(
+ array(
+ 'column' => 'post_modified_gmt',
+ 'before' => $expires . ' seconds ago',
+ ),
+ ),
+ ) );
+
+ $request_ids = $requests_query->posts;
+
+ foreach ( $request_ids as $request_id ) {
+ wp_update_post( array(
+ 'ID' => $request_id,
+ 'post_status' => 'request-failed',
+ 'post_password' => '',
+ ) );
+ }
+}
+
+/**
+ * Personal data export.
+ *
+ * @since 4.9.6
+ * @access private
+ */
+function _wp_personal_data_export_page() {
+ if ( ! current_user_can( 'export_others_personal_data' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to export personal data on this site.' ) );
+ }
+
+ _wp_personal_data_handle_actions();
+ _wp_personal_data_cleanup_requests();
+
+ // "Borrow" xfn.js for now so we don't have to create new files.
+ wp_enqueue_script( 'xfn' );
+
+ $requests_table = new WP_Privacy_Data_Export_Requests_Table( array(
+ 'plural' => 'privacy_requests',
+ 'singular' => 'privacy_request',
+ ) );
+ $requests_table->process_bulk_action();
+ $requests_table->prepare_items();
+ ?>
+ <div class="wrap nosubsub">
+ <h1><?php esc_html_e( 'Export Personal Data' ); ?></h1>
+ <hr class="wp-header-end" />
+
+ <?php settings_errors(); ?>
+
+ <form method="post" class="wp-privacy-request-form">
+ <h2><?php esc_html_e( 'Add Data Export Request' ); ?></h2>
+ <p><?php esc_html_e( 'An email will be sent to the user at this email address asking them to verify the request.' ); ?></p>
+
+ <div class="wp-privacy-request-form-field">
+ <label for="username_or_email_for_privacy_request"><?php esc_html_e( 'Username or email address' ); ?></label>
+ <input type="text" required class="regular-text" id="username_or_email_for_privacy_request" name="username_or_email_for_privacy_request" />
+ <?php submit_button( __( 'Send Request' ), 'secondary', 'submit', false ); ?>
+ </div>
+ <?php wp_nonce_field( 'personal-data-request' ); ?>
+ <input type="hidden" name="action" value="add_export_personal_data_request" />
+ <input type="hidden" name="type_of_action" value="export_personal_data" />
+ </form>
+ <hr />
+
+ <?php $requests_table->views(); ?>
+
+ <form class="search-form wp-clearfix">
+ <?php $requests_table->search_box( __( 'Search Requests' ), 'requests' ); ?>
+ <input type="hidden" name="page" value="export_personal_data" />
+ <input type="hidden" name="filter-status" value="<?php echo isset( $_REQUEST['filter-status'] ) ? esc_attr( sanitize_text_field( $_REQUEST['filter-status'] ) ) : ''; ?>" />
+ <input type="hidden" name="orderby" value="<?php echo isset( $_REQUEST['orderby'] ) ? esc_attr( sanitize_text_field( $_REQUEST['orderby'] ) ) : ''; ?>" />
+ <input type="hidden" name="order" value="<?php echo isset( $_REQUEST['order'] ) ? esc_attr( sanitize_text_field( $_REQUEST['order'] ) ) : ''; ?>" />
+ </form>
+
+ <form method="post">
+ <?php
+ $requests_table->display();
+ $requests_table->embed_scripts();
+ ?>
+ </form>
+ </div>
+ <?php
+}
+
+/**
+ * Personal data anonymization.
+ *
+ * @since 4.9.6
+ * @access private
+ */
+function _wp_personal_data_removal_page() {
+ /*
+ * Require both caps in order to make it explicitly clear that delegating
+ * erasure from network admins to single-site admins will give them the
+ * ability to affect global users, rather than being limited to the site
+ * that they administer.
+ */
+ if ( ! current_user_can( 'erase_others_personal_data' ) || ! current_user_can( 'delete_users' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to erase data on this site.' ) );
+ }
+
+ _wp_personal_data_handle_actions();
+ _wp_personal_data_cleanup_requests();
+
+ // "Borrow" xfn.js for now so we don't have to create new files.
+ wp_enqueue_script( 'xfn' );
+
+ $requests_table = new WP_Privacy_Data_Removal_Requests_Table( array(
+ 'plural' => 'privacy_requests',
+ 'singular' => 'privacy_request',
+ ) );
+
+ $requests_table->process_bulk_action();
+ $requests_table->prepare_items();
+
+ ?>
+ <div class="wrap nosubsub">
+ <h1><?php esc_html_e( 'Erase Personal Data' ); ?></h1>
+ <hr class="wp-header-end" />
+
+ <?php settings_errors(); ?>
+
+ <form method="post" class="wp-privacy-request-form">
+ <h2><?php esc_html_e( 'Add Data Erasure Request' ); ?></h2>
+ <p><?php esc_html_e( 'An email will be sent to the user at this email address asking them to verify the request.' ); ?></p>
+
+ <div class="wp-privacy-request-form-field">
+ <label for="username_or_email_for_privacy_request"><?php esc_html_e( 'Username or email address' ); ?></label>
+ <input type="text" required class="regular-text" id="username_or_email_for_privacy_request" name="username_or_email_for_privacy_request" />
+ <?php submit_button( __( 'Send Request' ), 'secondary', 'submit', false ); ?>
+ </div>
+ <?php wp_nonce_field( 'personal-data-request' ); ?>
+ <input type="hidden" name="action" value="add_remove_personal_data_request" />
+ <input type="hidden" name="type_of_action" value="remove_personal_data" />
+ </form>
+ <hr />
+
+ <?php $requests_table->views(); ?>
+
+ <form class="search-form wp-clearfix">
+ <?php $requests_table->search_box( __( 'Search Requests' ), 'requests' ); ?>
+ <input type="hidden" name="page" value="remove_personal_data" />
+ <input type="hidden" name="filter-status" value="<?php echo isset( $_REQUEST['filter-status'] ) ? esc_attr( sanitize_text_field( $_REQUEST['filter-status'] ) ) : ''; ?>" />
+ <input type="hidden" name="orderby" value="<?php echo isset( $_REQUEST['orderby'] ) ? esc_attr( sanitize_text_field( $_REQUEST['orderby'] ) ) : ''; ?>" />
+ <input type="hidden" name="order" value="<?php echo isset( $_REQUEST['order'] ) ? esc_attr( sanitize_text_field( $_REQUEST['order'] ) ) : ''; ?>" />
+ </form>
+
+ <form method="post">
+ <?php
+ $requests_table->display();
+ $requests_table->embed_scripts();
+ ?>
+ </form>
+ </div>
+ <?php
+}
+
+/**
+ * Mark erasure requests as completed after processing is finished.
+ *
+ * This intercepts the Ajax responses to personal data eraser page requests, and
+ * monitors the status of a request. Once all of the processing has finished, the
+ * request is marked as completed.
+ *
+ * @since 4.9.6
+ *
+ * @see wp_privacy_personal_data_erasure_page
+ *
+ * @param array $response The response from the personal data eraser for
+ * the given page.
+ * @param int $eraser_index The index of the personal data eraser. Begins
+ * at 1.
+ * @param string $email_address The email address of the user whose personal
+ * data this is.
+ * @param int $page The page of personal data for this eraser.
+ * Begins at 1.
+ * @param int $request_id The request ID for this personal data erasure.
+ * @return array The filtered response.
+ */
+function wp_privacy_process_personal_data_erasure_page( $response, $eraser_index, $email_address, $page, $request_id ) {
+ /*
+ * If the eraser response is malformed, don't attempt to consume it; let it
+ * pass through, so that the default Ajax processing will generate a warning
+ * to the user.
+ */
+ if ( ! is_array( $response ) ) {
+ return $response;
+ }
+
+ if ( ! array_key_exists( 'done', $response ) ) {
+ return $response;
+ }
+
+ if ( ! array_key_exists( 'items_removed', $response ) ) {
+ return $response;
+ }
+
+ if ( ! array_key_exists( 'items_retained', $response ) ) {
+ return $response;
+ }
+
+ if ( ! array_key_exists( 'messages', $response ) ) {
+ return $response;
+ }
+
+ $request = wp_get_user_request_data( $request_id );
+
+ if ( ! $request || 'remove_personal_data' !== $request->action_name ) {
+ wp_send_json_error( __( 'Invalid request ID when processing eraser data.' ) );
+ }
+
+ /** This filter is documented in wp-admin/includes/ajax-actions.php */
+ $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() );
+ $is_last_eraser = count( $erasers ) === $eraser_index;
+ $eraser_done = $response['done'];
+
+ if ( ! $is_last_eraser || ! $eraser_done ) {
+ return $response;
+ }
+
+ _wp_privacy_completed_request( $request_id );
+
+ /**
+ * Fires immediately after a personal data erasure request has been marked completed.
+ *
+ * @since 4.9.6
+ *
+ * @param int $request_id The privacy request post ID associated with this request.
+ */
+ do_action( 'wp_privacy_personal_data_erased', $request_id );
+
+ return $response;
+}
+
+/**
+ * Add requests pages.
+ *
+ * @since 4.9.6
+ * @access private
+ */
+function _wp_privacy_hook_requests_page() {
+ add_submenu_page( 'tools.php', __( 'Export Personal Data' ), __( 'Export Personal Data' ), 'export_others_personal_data', 'export_personal_data', '_wp_personal_data_export_page' );
+ add_submenu_page( 'tools.php', __( 'Erase Personal Data' ), __( 'Erase Personal Data' ), 'erase_others_personal_data', 'remove_personal_data', '_wp_personal_data_removal_page' );
+}
+
+/**
+ * Add options for the privacy requests screens.
+ *
+ * @since 4.9.8
+ * @access private
+ */
+function _wp_privacy_requests_screen_options() {
+ $args = array(
+ 'option' => str_replace( 'tools_page_', '', get_current_screen()->id ) . '_requests_per_page',
+ );
+ add_screen_option( 'per_page', $args );
+}
+
+// TODO: move the following classes in new files.
+if ( ! class_exists( 'WP_List_Table' ) ) {
+ require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
+}
+
+/**
+ * WP_Privacy_Requests_Table class.
+ *
+ * @since 4.9.6
+ */
+abstract class WP_Privacy_Requests_Table extends WP_List_Table {
+
+ /**
+ * Action name for the requests this table will work with. Classes
+ * which inherit from WP_Privacy_Requests_Table should define this.
+ *
+ * Example: 'export_personal_data'.
+ *
+ * @since 4.9.6
+ *
+ * @var string $request_type Name of action.
+ */
+ protected $request_type = 'INVALID';
+
+ /**
+ * Post type to be used.
+ *
+ * @since 4.9.6
+ *
+ * @var string $post_type The post type.
+ */
+ protected $post_type = 'INVALID';
+
+ /**
+ * Get columns to show in the list table.
+ *
+ * @since 4.9.6
+ *
+ * @return array Array of columns.
+ */
+ public function get_columns() {
+ $columns = array(
+ 'cb' => '<input type="checkbox" />',
+ 'email' => __( 'Requester' ),
+ 'status' => __( 'Status' ),
+ 'created_timestamp' => __( 'Requested' ),
+ 'next_steps' => __( 'Next Steps' ),
+ );
+ return $columns;
+ }
+
+ /**
+ * Get a list of sortable columns.
+ *
+ * @since 4.9.6
+ *
+ * @return array Default sortable columns.
+ */
+ protected function get_sortable_columns() {
+ return array();
+ }
+
+ /**
+ * Default primary column.
+ *
+ * @since 4.9.6
+ *
+ * @return string Default primary column name.
+ */
+ protected function get_default_primary_column_name() {
+ return 'email';
+ }
+
+ /**
+ * Count number of requests for each status.
+ *
+ * @since 4.9.6
+ *
+ * @return object Number of posts for each status.
+ */
+ protected function get_request_counts() {
+ global $wpdb;
+
+ $cache_key = $this->post_type . '-' . $this->request_type;
+ $counts = wp_cache_get( $cache_key, 'counts' );
+
+ if ( false !== $counts ) {
+ return $counts;
+ }
+
+ $query = "
+ SELECT post_status, COUNT( * ) AS num_posts
+ FROM {$wpdb->posts}
+ WHERE post_type = %s
+ AND post_name = %s
+ GROUP BY post_status";
+
+ $results = (array) $wpdb->get_results( $wpdb->prepare( $query, $this->post_type, $this->request_type ), ARRAY_A );
+ $counts = array_fill_keys( get_post_stati(), 0 );
+
+ foreach ( $results as $row ) {
+ $counts[ $row['post_status'] ] = $row['num_posts'];
+ }
+
+ $counts = (object) $counts;
+ wp_cache_set( $cache_key, $counts, 'counts' );
+
+ return $counts;
+ }
+
+ /**
+ * Get an associative array ( id => link ) with the list of views available on this table.
+ *
+ * @since 4.9.6
+ *
+ * @return array Associative array of views in the format of $view_name => $view_markup.
+ */
+ protected function get_views() {
+ $current_status = isset( $_REQUEST['filter-status'] ) ? sanitize_text_field( $_REQUEST['filter-status'] ) : '';
+ $statuses = _wp_privacy_statuses();
+ $views = array();
+ $admin_url = admin_url( 'tools.php?page=' . $this->request_type );
+ $counts = $this->get_request_counts();
+
+ $current_link_attributes = empty( $current_status ) ? ' class="current" aria-current="page"' : '';
+ $views['all'] = '<a href="' . esc_url( $admin_url ) . "\" $current_link_attributes>" . esc_html__( 'All' ) . ' (' . absint( array_sum( (array) $counts ) ) . ')</a>';
+
+ foreach ( $statuses as $status => $label ) {
+ $current_link_attributes = $status === $current_status ? ' class="current" aria-current="page"' : '';
+ $views[ $status ] = '<a href="' . esc_url( add_query_arg( 'filter-status', $status, $admin_url ) ) . "\" $current_link_attributes>" . esc_html( $label ) . ' (' . absint( $counts->$status ) . ')</a>';
+ }
+
+ return $views;
+ }
+
+ /**
+ * Get bulk actions.
+ *
+ * @since 4.9.6
+ *
+ * @return array List of bulk actions.
+ */
+ protected function get_bulk_actions() {
+ return array(
+ 'delete' => __( 'Remove' ),
+ 'resend' => __( 'Resend email' ),
+ );
+ }
+
+ /**
+ * Process bulk actions.
+ *
+ * @since 4.9.6
+ */
+ public function process_bulk_action() {
+ $action = $this->current_action();
+ $request_ids = isset( $_REQUEST['request_id'] ) ? wp_parse_id_list( wp_unslash( $_REQUEST['request_id'] ) ) : array();
+
+ $count = 0;
+
+ if ( $request_ids ) {
+ check_admin_referer( 'bulk-privacy_requests' );
+ }
+
+ switch ( $action ) {
+ case 'delete':
+ foreach ( $request_ids as $request_id ) {
+ if ( wp_delete_post( $request_id, true ) ) {
+ $count ++;
+ }
+ }
+
+ add_settings_error(
+ 'bulk_action',
+ 'bulk_action',
+ /* translators: %d: number of requests */
+ sprintf( _n( 'Deleted %d request', 'Deleted %d requests', $count ), $count ),
+ 'updated'
+ );
+ break;
+ case 'resend':
+ foreach ( $request_ids as $request_id ) {
+ $resend = _wp_privacy_resend_request( $request_id );
+
+ if ( $resend && ! is_wp_error( $resend ) ) {
+ $count++;
+ }
+ }
+
+ add_settings_error(
+ 'bulk_action',
+ 'bulk_action',
+ /* translators: %d: number of requests */
+ sprintf( _n( 'Re-sent %d request', 'Re-sent %d requests', $count ), $count ),
+ 'updated'
+ );
+ break;
+ }
+ }
+
+ /**
+ * Prepare items to output.
+ *
+ * @since 4.9.6
+ */
+ public function prepare_items() {
+ global $wpdb;
+
+ $primary = $this->get_primary_column_name();
+ $this->_column_headers = array(
+ $this->get_columns(),
+ array(),
+ $this->get_sortable_columns(),
+ $primary,
+ );
+
+ $this->items = array();
+ $posts_per_page = $this->get_items_per_page( $this->request_type . '_requests_per_page' );
+ $args = array(
+ 'post_type' => $this->post_type,
+ 'post_name__in' => array( $this->request_type ),
+ 'posts_per_page' => $posts_per_page,
+ 'offset' => isset( $_REQUEST['paged'] ) ? max( 0, absint( $_REQUEST['paged'] ) - 1 ) * $posts_per_page : 0,
+ 'post_status' => 'any',
+ 's' => isset( $_REQUEST['s'] ) ? sanitize_text_field( $_REQUEST['s'] ) : '',
+ );
+
+ if ( ! empty( $_REQUEST['filter-status'] ) ) {
+ $filter_status = isset( $_REQUEST['filter-status'] ) ? sanitize_text_field( $_REQUEST['filter-status'] ) : '';
+ $args['post_status'] = $filter_status;
+ }
+
+ $requests_query = new WP_Query( $args );
+ $requests = $requests_query->posts;
+
+ foreach ( $requests as $request ) {
+ $this->items[] = wp_get_user_request_data( $request->ID );
+ }
+
+ $this->items = array_filter( $this->items );
+
+ $this->set_pagination_args(
+ array(
+ 'total_items' => $requests_query->found_posts,
+ 'per_page' => $posts_per_page,
+ )
+ );
+ }
+
+ /**
+ * Checkbox column.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item Item being shown.
+ * @return string Checkbox column markup.
+ */
+ public function column_cb( $item ) {
+ return sprintf( '<input type="checkbox" name="request_id[]" value="%1$s" /><span class="spinner"></span>', esc_attr( $item->ID ) );
+ }
+
+ /**
+ * Status column.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item Item being shown.
+ * @return string Status column markup.
+ */
+ public function column_status( $item ) {
+ $status = get_post_status( $item->ID );
+ $status_object = get_post_status_object( $status );
+
+ if ( ! $status_object || empty( $status_object->label ) ) {
+ return '-';
+ }
+
+ $timestamp = false;
+
+ switch ( $status ) {
+ case 'request-confirmed':
+ $timestamp = $item->confirmed_timestamp;
+ break;
+ case 'request-completed':
+ $timestamp = $item->completed_timestamp;
+ break;
+ }
+
+ echo '<span class="status-label status-' . esc_attr( $status ) . '">';
+ echo esc_html( $status_object->label );
+
+ if ( $timestamp ) {
+ echo ' (' . $this->get_timestamp_as_date( $timestamp ) . ')';
+ }
+
+ echo '</span>';
+ }
+
+ /**
+ * Convert timestamp for display.
+ *
+ * @since 4.9.6
+ *
+ * @param int $timestamp Event timestamp.
+ * @return string Human readable date.
+ */
+ protected function get_timestamp_as_date( $timestamp ) {
+ if ( empty( $timestamp ) ) {
+ return '';
+ }
+
+ $time_diff = current_time( 'timestamp', true ) - $timestamp;
+
+ if ( $time_diff >= 0 && $time_diff < DAY_IN_SECONDS ) {
+ /* translators: human readable timestamp */
+ return sprintf( __( '%s ago' ), human_time_diff( $timestamp ) );
+ }
+
+ return date_i18n( get_option( 'date_format' ), $timestamp );
+ }
+
+ /**
+ * Default column handler.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item Item being shown.
+ * @param string $column_name Name of column being shown.
+ * @return string Default column output.
+ */
+ public function column_default( $item, $column_name ) {
+ $cell_value = $item->$column_name;
+
+ if ( in_array( $column_name, array( 'created_timestamp' ), true ) ) {
+ return $this->get_timestamp_as_date( $cell_value );
+ }
+
+ return $cell_value;
+ }
+
+ /**
+ * Actions column. Overridden by children.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item Item being shown.
+ * @return string Email column markup.
+ */
+ public function column_email( $item ) {
+ return sprintf( '<a href="%1$s">%2$s</a> %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( array() ) );
+ }
+
+ /**
+ * Next steps column. Overridden by children.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item Item being shown.
+ */
+ public function column_next_steps( $item ) {}
+
+ /**
+ * Generates content for a single row of the table,
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item The current item.
+ */
+ public function single_row( $item ) {
+ $status = $item->status;
+
+ echo '<tr id="request-' . esc_attr( $item->ID ) . '" class="status-' . esc_attr( $status ) . '">';
+ $this->single_row_columns( $item );
+ echo '</tr>';
+ }
+
+ /**
+ * Embed scripts used to perform actions. Overridden by children.
+ *
+ * @since 4.9.6
+ */
+ public function embed_scripts() {}
+}
+
+/**
+ * WP_Privacy_Data_Export_Requests_Table class.
+ *
+ * @since 4.9.6
+ */
+class WP_Privacy_Data_Export_Requests_Table extends WP_Privacy_Requests_Table {
+ /**
+ * Action name for the requests this table will work with.
+ *
+ * @since 4.9.6
+ *
+ * @var string $request_type Name of action.
+ */
+ protected $request_type = 'export_personal_data';
+
+ /**
+ * Post type for the requests.
+ *
+ * @since 4.9.6
+ *
+ * @var string $post_type The post type.
+ */
+ protected $post_type = 'user_request';
+
+ /**
+ * Actions column.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item Item being shown.
+ * @return string Email column markup.
+ */
+ public function column_email( $item ) {
+ /** This filter is documented in wp-admin/includes/ajax-actions.php */
+ $exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() );
+ $exporters_count = count( $exporters );
+ $request_id = $item->ID;
+ $nonce = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
+
+ $download_data_markup = '<div class="export-personal-data" ' .
+ 'data-exporters-count="' . esc_attr( $exporters_count ) . '" ' .
+ 'data-request-id="' . esc_attr( $request_id ) . '" ' .
+ 'data-nonce="' . esc_attr( $nonce ) .
+ '">';
+
+ $download_data_markup .= '<span class="export-personal-data-idle"><button type="button" class="button-link export-personal-data-handle">' . __( 'Download Personal Data' ) . '</button></span>' .
+ '<span style="display:none" class="export-personal-data-processing" >' . __( 'Downloading Data...' ) . '</span>' .
+ '<span style="display:none" class="export-personal-data-success"><button type="button" class="button-link export-personal-data-handle">' . __( 'Download Personal Data Again' ) . '</button></span>' .
+ '<span style="display:none" class="export-personal-data-failed">' . __( 'Download has failed.' ) . ' <button type="button" class="button-link">' . __( 'Retry' ) . '</button></span>';
+
+ $download_data_markup .= '</div>';
+
+ $row_actions = array(
+ 'download-data' => $download_data_markup,
+ );
+
+ return sprintf( '<a href="%1$s">%2$s</a> %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) );
+ }
+
+ /**
+ * Displays the next steps column.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item Item being shown.
+ */
+ public function column_next_steps( $item ) {
+ $status = $item->status;
+
+ switch ( $status ) {
+ case 'request-pending':
+ esc_html_e( 'Waiting for confirmation' );
+ break;
+ case 'request-confirmed':
+ /** This filter is documented in wp-admin/includes/ajax-actions.php */
+ $exporters = apply_filters( 'wp_privacy_personal_data_exporters', array() );
+ $exporters_count = count( $exporters );
+ $request_id = $item->ID;
+ $nonce = wp_create_nonce( 'wp-privacy-export-personal-data-' . $request_id );
+
+ echo '<div class="export-personal-data" ' .
+ 'data-send-as-email="1" ' .
+ 'data-exporters-count="' . esc_attr( $exporters_count ) . '" ' .
+ 'data-request-id="' . esc_attr( $request_id ) . '" ' .
+ 'data-nonce="' . esc_attr( $nonce ) .
+ '">';
+
+ ?>
+ <span class="export-personal-data-idle"><button type="button" class="button export-personal-data-handle"><?php _e( 'Email Data' ); ?></button></span>
+ <span style="display:none" class="export-personal-data-processing button updating-message" ><?php _e( 'Sending Email...' ); ?></span>
+ <span style="display:none" class="export-personal-data-success success-message" ><?php _e( 'Email sent.' ); ?></span>
+ <span style="display:none" class="export-personal-data-failed"><?php _e( 'Email could not be sent.' ); ?> <button type="button" class="button export-personal-data-handle"><?php _e( 'Retry' ); ?></button></span>
+ <?php
+
+ echo '</div>';
+ break;
+ case 'request-failed':
+ submit_button( __( 'Retry' ), 'secondary', 'privacy_action_email_retry[' . $item->ID . ']', false );
+ break;
+ case 'request-completed':
+ echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
+ 'action' => 'delete',
+ 'request_id' => array( $item->ID ),
+ ), admin_url( 'tools.php?page=export_personal_data' ) ), 'bulk-privacy_requests' ) ) . '" class="button">' . esc_html__( 'Remove request' ) . '</a>';
+ break;
+ }
+ }
+}
+
+/**
+ * WP_Privacy_Data_Removal_Requests_Table class.
+ *
+ * @since 4.9.6
+ */
+class WP_Privacy_Data_Removal_Requests_Table extends WP_Privacy_Requests_Table {
+ /**
+ * Action name for the requests this table will work with.
+ *
+ * @since 4.9.6
+ *
+ * @var string $request_type Name of action.
+ */
+ protected $request_type = 'remove_personal_data';
+
+ /**
+ * Post type for the requests.
+ *
+ * @since 4.9.6
+ *
+ * @var string $post_type The post type.
+ */
+ protected $post_type = 'user_request';
+
+ /**
+ * Actions column.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item Item being shown.
+ * @return string Email column markup.
+ */
+ public function column_email( $item ) {
+ $row_actions = array();
+
+ // Allow the administrator to "force remove" the personal data even if confirmation has not yet been received.
+ $status = $item->status;
+ if ( 'request-confirmed' !== $status ) {
+ /** This filter is documented in wp-admin/includes/ajax-actions.php */
+ $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() );
+ $erasers_count = count( $erasers );
+ $request_id = $item->ID;
+ $nonce = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
+
+ $remove_data_markup = '<div class="remove-personal-data force-remove-personal-data" ' .
+ 'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
+ 'data-request-id="' . esc_attr( $request_id ) . '" ' .
+ 'data-nonce="' . esc_attr( $nonce ) .
+ '">';
+
+ $remove_data_markup .= '<span class="remove-personal-data-idle"><button type="button" class="button-link remove-personal-data-handle">' . __( 'Force Erase Personal Data' ) . '</button></span>' .
+ '<span style="display:none" class="remove-personal-data-processing" >' . __( 'Erasing Data...' ) . '</span>' .
+ '<span style="display:none" class="remove-personal-data-failed">' . __( 'Force Erase has failed.' ) . ' <button type="button" class="button-link remove-personal-data-handle">' . __( 'Retry' ) . '</button></span>';
+
+ $remove_data_markup .= '</div>';
+
+ $row_actions = array(
+ 'remove-data' => $remove_data_markup,
+ );
+ }
+
+ return sprintf( '<a href="%1$s">%2$s</a> %3$s', esc_url( 'mailto:' . $item->email ), $item->email, $this->row_actions( $row_actions ) );
+ }
+
+ /**
+ * Next steps column.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_User_Request $item Item being shown.
+ */
+ public function column_next_steps( $item ) {
+ $status = $item->status;
+
+ switch ( $status ) {
+ case 'request-pending':
+ esc_html_e( 'Waiting for confirmation' );
+ break;
+ case 'request-confirmed':
+ /** This filter is documented in wp-admin/includes/ajax-actions.php */
+ $erasers = apply_filters( 'wp_privacy_personal_data_erasers', array() );
+ $erasers_count = count( $erasers );
+ $request_id = $item->ID;
+ $nonce = wp_create_nonce( 'wp-privacy-erase-personal-data-' . $request_id );
+
+ echo '<div class="remove-personal-data" ' .
+ 'data-force-erase="1" ' .
+ 'data-erasers-count="' . esc_attr( $erasers_count ) . '" ' .
+ 'data-request-id="' . esc_attr( $request_id ) . '" ' .
+ 'data-nonce="' . esc_attr( $nonce ) .
+ '">';
+
+ ?>
+ <span class="remove-personal-data-idle"><button type="button" class="button remove-personal-data-handle"><?php _e( 'Erase Personal Data' ); ?></button></span>
+ <span style="display:none" class="remove-personal-data-processing button updating-message" ><?php _e( 'Erasing Data...' ); ?></span>
+ <span style="display:none" class="remove-personal-data-failed"><?php _e( 'Erasing Data has failed.' ); ?> <button type="button" class="button remove-personal-data-handle"><?php _e( 'Retry' ); ?></button></span>
+ <?php
+
+ echo '</div>';
+
+ break;
+ case 'request-failed':
+ submit_button( __( 'Retry' ), 'secondary', 'privacy_action_email_retry[' . $item->ID . ']', false );
+ break;
+ case 'request-completed':
+ echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array(
+ 'action' => 'delete',
+ 'request_id' => array( $item->ID ),
+ ), admin_url( 'tools.php?page=remove_personal_data' ) ), 'bulk-privacy_requests' ) ) . '" class="button">' . esc_html__( 'Remove request' ) . '</a>';
+ break;
+ }
+ }
+
+}
<div class="wrap">
<h1><?php echo esc_html( $title ); ?></h1>
+<?php if ( has_action( 'try_gutenberg_panel' ) ) :
+ $classes = 'try-gutenberg-panel';
+
+ $option = get_user_meta( get_current_user_id(), 'show_try_gutenberg_panel', true );
+ // 0 = hide, 1 = toggled to show or single site creator, 2 = multisite site owner
+ $hide = '0' === $option || ( '2' === $option && wp_get_current_user()->user_email !== get_option( 'admin_email' ) );
+ if ( $hide )
+ $classes .= ' hidden'; ?>
+
+ <div id="try-gutenberg-panel" class="<?php echo esc_attr( $classes ); ?>">
+ <?php wp_nonce_field( 'try-gutenberg-panel-nonce', 'trygutenbergpanelnonce', false ); ?>
+ <a class="try-gutenberg-panel-close" href="<?php echo esc_url( admin_url( '?try_gutenberg=0' ) ); ?>" aria-label="<?php esc_attr_e( 'Dismiss the Try Gutenberg panel' ); ?>"><?php _e( 'Dismiss' ); ?></a>
+ <?php
+ /**
+ * Add content to the Try Gutenberg panel on the admin dashboard.
+ *
+ * To remove the Try Gutenberg panel, use remove_action():
+ *
+ * remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
+ *
+ * @since 4.9.8
+ */
+ do_action( 'try_gutenberg_panel' );
+ ?>
+ </div>
+<?php endif; ?>
<?php if ( has_action( 'welcome_panel' ) && current_user_can( 'edit_theme_options' ) ) :
$classes = 'welcome-panel';
$option = get_user_meta( get_current_user_id(), 'show_welcome_panel', true );
// 0 = hide, 1 = toggled to show or single site creator, 2 = multisite site owner
- $hide = 0 == $option || ( 2 == $option && wp_get_current_user()->user_email != get_option( 'admin_email' ) );
+ $hide = '0' === $option || ( '2' === $option && wp_get_current_user()->user_email != get_option( 'admin_email' ) );
if ( $hide )
$classes .= ' hidden'; ?>
api.bind( 'change', startAutosaving );
// Make sure TinyMCE dialogs appear above Customizer UI.
- $( document ).one( 'wp-before-tinymce-init', function() {
- if ( ! window.tinymce.ui.FloatPanel.zIndex || window.tinymce.ui.FloatPanel.zIndex < 500001 ) {
+ $( document ).one( 'tinymce-editor-setup', function() {
+ if ( window.tinymce.ui.FloatPanel && ( ! window.tinymce.ui.FloatPanel.zIndex || window.tinymce.ui.FloatPanel.zIndex < 500001 ) ) {
window.tinymce.ui.FloatPanel.zIndex = 500001;
}
} );
!function(a,b){var c,d,e,f=wp.customize;f.OverlayNotification=f.Notification.extend({loading:!1,initialize:function(a,b){var c=this;f.Notification.prototype.initialize.call(c,a,b),c.containerClasses+=" notification-overlay",c.loading&&(c.containerClasses+=" notification-loading")},render:function(){var a=f.Notification.prototype.render.call(this);return a.on("keydown",_.bind(this.handleEscape,this)),a},handleEscape:function(a){var b=this;27===a.which&&(a.stopPropagation(),b.dismissible&&b.parent&&b.parent.remove(b.code))}}),f.Notifications=f.Values.extend({alt:!1,defaultConstructor:f.Notification,initialize:function(a){var b=this;f.Values.prototype.initialize.call(b,a),_.bindAll(b,"constrainFocus"),b._addedIncrement=0,b._addedOrder={},b.bind("add",function(a){b.trigger("change",a)}),b.bind("removed",function(a){b.trigger("change",a)})},count:function(){return _.size(this._value)},add:function(a,b){var c,d,e=this;return"string"==typeof a?(c=a,d=b):(c=a.code,d=a),e.has(c)||(e._addedIncrement+=1,e._addedOrder[c]=e._addedIncrement),f.Values.prototype.add.call(e,c,d)},remove:function(a){var b=this;return delete b._addedOrder[a],f.Values.prototype.remove.call(this,a)},get:function(a){var b,c,d,e=this;return b=_.values(e._value),d=_.extend({sort:!1},a),d.sort&&(c={error:4,warning:3,success:2,info:1},b.sort(function(a,b){var d=0,f=0;return _.isUndefined(c[a.type])||(d=c[a.type]),_.isUndefined(c[b.type])||(f=c[b.type]),d!==f?f-d:e._addedOrder[b.code]-e._addedOrder[a.code]})),b},render:function(){var a,c,d,e,g=this,h=!1,i=[],j={};g.container&&g.container.length&&(a=g.get({sort:!0}),g.container.toggle(0!==a.length),g.container.is(g.previousContainer)&&_.isEqual(a,g.previousNotifications)||(d=g.container.children("ul").first(),d.length||(d=b("<ul></ul>"),g.container.append(d)),d.find("> [data-code]").remove(),_.each(g.previousNotifications,function(a){j[a.code]=a}),_.each(a,function(a){var c;!wp.a11y||j[a.code]&&_.isEqual(a.message,j[a.code].message)||wp.a11y.speak(a.message,"assertive"),c=b(a.render()),a.container=c,d.append(c),a.extended(f.OverlayNotification)&&i.push(a)}),c=Boolean(i.length),g.previousNotifications&&(h=Boolean(_.find(g.previousNotifications,function(a){return a.extended(f.OverlayNotification)}))),c!==h&&(b(document.body).toggleClass("customize-loading",c),g.container.toggleClass("has-overlay-notifications",c),c?(g.previousActiveElement=document.activeElement,b(document).on("keydown",g.constrainFocus)):b(document).off("keydown",g.constrainFocus)),c?(g.focusContainer=i[i.length-1].container,g.focusContainer.prop("tabIndex",-1),e=g.focusContainer.find(":focusable"),e.length?e.first().focus():g.focusContainer.focus()):g.previousActiveElement&&(b(g.previousActiveElement).focus(),g.previousActiveElement=null),g.previousNotifications=a,g.previousContainer=g.container,g.trigger("rendered")))},constrainFocus:function(a){var c,d=this;a.stopPropagation(),9===a.which&&(c=d.focusContainer.find(":focusable"),0===c.length&&(c=d.focusContainer),b.contains(d.focusContainer[0],a.target)&&b.contains(d.focusContainer[0],document.activeElement)?c.last().is(a.target)&&!a.shiftKey?(a.preventDefault(),c.first().focus()):c.first().is(a.target)&&a.shiftKey&&(a.preventDefault(),c.last().focus()):(a.preventDefault(),c.first().focus()))}}),f.Setting=f.Value.extend({defaults:{transport:"refresh",dirty:!1},initialize:function(a,b,c){var d,e=this;d=_.extend({previewer:f.previewer},e.defaults,c||{}),f.Value.prototype.initialize.call(e,b,d),e.id=a,e._dirty=d.dirty,e.notifications=new f.Notifications,e.bind(e.preview)},preview:function(){var a,b=this;a=b.transport,"postMessage"!==a||f.state("previewerAlive").get()||(a="refresh"),"postMessage"===a?b.previewer.send("setting",[b.id,b()]):"refresh"===a&&b.previewer.refresh()},findControls:function(){var a=this,b=[];return f.control.each(function(c){_.each(c.settings,function(d){d.id===a.id&&b.push(c)})}),b}}),f._latestRevision=0,f._lastSavedRevision=0,f._latestSettingRevisions={},f.bind("change",function(a){f._latestRevision+=1,f._latestSettingRevisions[a.id]=f._latestRevision}),f.bind("ready",function(){f.bind("add",function(a){a._dirty&&(f._latestRevision+=1,f._latestSettingRevisions[a.id]=f._latestRevision)})}),f.dirtyValues=function(a){var b={};return f.each(function(c){var d;c._dirty&&(d=f._latestSettingRevisions[c.id],f.state("changesetStatus").get()&&a&&a.unsaved&&(_.isUndefined(d)||d<=f._lastSavedRevision)||(b[c.id]=c.get()))}),b},f.requestChangesetUpdate=function(a,c){var d,e,g,h,i={};return d=new b.Deferred,0!==f.state("processing").get()?(d.reject("already_processing"),d.promise()):(h=_.extend({title:null,date:null,autosave:!1,force:!1},c),a&&_.extend(i,a),_.each(f.dirtyValues({unsaved:!0}),function(b,c){a&&null===a[c]||(i[c]=_.extend({},i[c]||{},{value:b}))}),f.trigger("changeset-save",i,h),!h.force&&_.isEmpty(i)&&null===h.title&&null===h.date?(d.resolve({}),d.promise()):h.status?d.reject({code:"illegal_status_in_changeset_update"}).promise():h.date&&h.autosave?d.reject({code:"illegal_autosave_with_date_gmt"}).promise():(f.state("processing").set(f.state("processing").get()+1),d.always(function(){f.state("processing").set(f.state("processing").get()-1)}),g=f.previewer.query({excludeCustomizedSaved:!0}),delete g.customized,_.extend(g,{nonce:f.settings.nonce.save,customize_theme:f.settings.theme.stylesheet,customize_changeset_data:JSON.stringify(i)}),null!==h.title&&(g.customize_changeset_title=h.title),null!==h.date&&(g.customize_changeset_date=h.date),!1!==h.autosave&&(g.customize_changeset_autosave="true"),f.trigger("save-request-params",g),e=wp.ajax.post("customize_save",g),e.done(function(a){var b={};f._lastSavedRevision=Math.max(f._latestRevision,f._lastSavedRevision),f.state("changesetStatus").set(a.changeset_status),a.changeset_date&&f.state("changesetDate").set(a.changeset_date),d.resolve(a),f.trigger("changeset-saved",a),a.setting_validities&&_.each(a.setting_validities,function(a,c){!0===a&&_.isObject(i[c])&&!_.isUndefined(i[c].value)&&(b[c]=i[c].value)}),f.previewer.send("changeset-saved",_.extend({},a,{saved_changeset_values:b}))}),e.fail(function(a){d.reject(a),f.trigger("changeset-error",a)}),e.always(function(a){a.setting_validities&&f._handleSettingValidities({settingValidities:a.setting_validities})}),d.promise()))},f.utils.bubbleChildValueChanges=function(a,c){b.each(c,function(b,c){a[c].bind(function(b,c){a.parent&&b!==c&&a.parent.trigger("change",a)})})},d=function(a){var b,c,d,e;b=this,a=a||{},d=function(){var a;a=(b.extended(f.Panel)||b.extended(f.Section))&&b.expanded&&b.expanded()?b.contentContainer:b.container,e=a.find(".control-focus:first"),0===e.length&&(e=a.find("input, select, textarea, button, object, a[href], [tabindex]").filter(":visible").first()),e.focus()},a.completeCallback?(c=a.completeCallback,a.completeCallback=function(){d(),c()}):a.completeCallback=d,f.state("paneVisible").set(!0),b.expand?b.expand(a):a.completeCallback()},f.utils.prioritySort=function(a,b){return a.priority()===b.priority()&&"number"==typeof a.params.instanceNumber&&"number"==typeof b.params.instanceNumber?a.params.instanceNumber-b.params.instanceNumber:a.priority()-b.priority()},f.utils.isKeydownButNotEnterEvent=function(a){return"keydown"===a.type&&13!==a.which},f.utils.areElementListsEqual=function(a,c){var d=a.length===c.length&&-1===_.indexOf(_.map(_.zip(a,c),function(a){return b(a[0]).is(a[1])}),!1);return d},f.utils.highlightButton=function(a,b){function c(){f=!0}var d,e="button-see-me",f=!1;return d=_.extend({delay:0,focusTarget:a},b),d.focusTarget.on("focusin",c),setTimeout(function(){d.focusTarget.off("focusin",c),f||(a.addClass(e),a.one("animationend",function(){a.removeClass(e)}))},d.delay),c},f.utils.getCurrentTimestamp=function(){var a,b,c;return b=_.now(),a=new Date(f.settings.initialServerDate.replace(/-/g,"/")),c=b-f.settings.initialClientTimestamp,c+=f.settings.initialClientTimestamp-f.settings.initialServerTimestamp,a.setTime(a.getTime()+c),a.getTime()},f.utils.getRemainingTime=function(a){var b,c,d=1e3;return c=a instanceof Date?a.getTime():"string"==typeof a?new Date(a.replace(/-/g,"/")).getTime():a,b=c-f.utils.getCurrentTimestamp(),b=Math.ceil(b/d)},e=function(){var a,b,c;return a=document.createElement("div"),b={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"},c=_.find(_.keys(b),function(b){return!_.isUndefined(a.style[b])}),c?b[c]:null}(),c=f.Class.extend({defaultActiveArguments:{duration:"fast",completeCallback:b.noop},defaultExpandedArguments:{duration:"fast",completeCallback:b.noop},containerType:"container",defaults:{title:"",description:"",priority:100,type:"default",content:null,active:!0,instanceNumber:null},initialize:function(a,d){var e=this;e.id=a,c.instanceCounter||(c.instanceCounter=0),c.instanceCounter++,b.extend(e,{params:_.defaults(d.params||d,e.defaults)}),e.params.instanceNumber||(e.params.instanceNumber=c.instanceCounter),e.notifications=new f.Notifications,e.templateSelector=e.params.templateId||"customize-"+e.containerType+"-"+e.params.type,e.container=b(e.params.content),0===e.container.length&&(e.container=b(e.getContainer())),e.headContainer=e.container,e.contentContainer=e.getContent(),e.container=e.container.add(e.contentContainer),e.deferred={embedded:new b.Deferred},e.priority=new f.Value,e.active=new f.Value,e.activeArgumentsQueue=[],e.expanded=new f.Value,e.expandedArgumentsQueue=[],e.active.bind(function(a){var c=e.activeArgumentsQueue.shift();c=b.extend({},e.defaultActiveArguments,c),a=a&&e.isContextuallyActive(),e.onChangeActive(a,c)}),e.expanded.bind(function(a){var c=e.expandedArgumentsQueue.shift();c=b.extend({},e.defaultExpandedArguments,c),e.onChangeExpanded(a,c)}),e.deferred.embedded.done(function(){e.setupNotifications(),e.attachEvents()}),f.utils.bubbleChildValueChanges(e,["priority","active"]),e.priority.set(e.params.priority),e.active.set(e.params.active),e.expanded.set(!1)},getNotificationsContainerElement:function(){var a=this;return a.contentContainer.find(".customize-control-notifications-container:first")},setupNotifications:function(){var a,b=this;b.notifications.container=b.getNotificationsContainerElement(),a=function(){b.expanded.get()&&b.notifications.render()},b.expanded.bind(a),a(),b.notifications.bind("change",_.debounce(a))},ready:function(){},_children:function(a,b){var c=this,d=[];return f[b].each(function(b){b[a].get()===c.id&&d.push(b)}),d.sort(f.utils.prioritySort),d},isContextuallyActive:function(){throw new Error("Container.isContextuallyActive() must be overridden in a subclass.")},onChangeActive:function(a,c){var d,e,g=this,h=g.headContainer;return c.unchanged?void(c.completeCallback&&c.completeCallback()):(d="resolved"===f.previewer.deferred.active.state()?c.duration:0,g.extended(f.Panel)&&(f.panel.each(function(a){a!==g&&a.expanded()&&(e=a,d=0)}),a||_.each(g.sections(),function(a){a.collapse({duration:0})})),void(b.contains(document,h.get(0))?a?h.slideDown(d,c.completeCallback):g.expanded()?g.collapse({duration:d,completeCallback:function(){h.slideUp(d,c.completeCallback)}}):h.slideUp(d,c.completeCallback):(h.toggle(a),c.completeCallback&&c.completeCallback())))},_toggleActive:function(a,b){var c=this;return b=b||{},a&&this.active.get()||!a&&!this.active.get()?(b.unchanged=!0,c.onChangeActive(c.active.get(),b),!1):(b.unchanged=!1,this.activeArgumentsQueue.push(b),this.active.set(a),!0)},activate:function(a){return this._toggleActive(!0,a)},deactivate:function(a){return this._toggleActive(!1,a)},onChangeExpanded:function(){throw new Error("Must override with subclass.")},_toggleExpanded:function(a,b){var c,d=this;return b=b||{},c=b.completeCallback,!(a&&!d.active())&&(f.state("paneVisible").set(!0),b.completeCallback=function(){c&&c.apply(d,arguments),a?d.container.trigger("expanded"):d.container.trigger("collapsed")},a&&d.expanded.get()||!a&&!d.expanded.get()?(b.unchanged=!0,d.onChangeExpanded(d.expanded.get(),b),!1):(b.unchanged=!1,d.expandedArgumentsQueue.push(b),d.expanded.set(a),!0))},expand:function(a){return this._toggleExpanded(!0,a)},collapse:function(a){return this._toggleExpanded(!1,a)},_animateChangeExpanded:function(a){if(!e)return void(a&&a());var c,d,g,h=this,i=h.contentContainer,j=i.closest(".wp-full-overlay");c=j.add(i),g=!h.panel||""===h.panel()||!!f.panel(h.panel()).contentContainer.hasClass("skip-transition"),g&&(c=c.add("#customize-info, .customize-pane-parent")),d=function(f){2===f.eventPhase&&b(f.target).is(i)&&(i.off(e,d),c.removeClass("busy"),a&&a())},i.on(e,d),c.addClass("busy"),_.defer(function(){var a=i.closest(".wp-full-overlay-sidebar-content"),b=a.scrollTop(),c=i.data("previous-scrollTop")||0,d=h.expanded();d&&0<b?(i.css("top",b+"px"),i.data("previous-scrollTop",b)):!d&&0<b+c&&(i.css("top",c-b+"px"),a.scrollTop(c))})},focus:d,getContainer:function(){var a,c=this;return a=0!==b("#tmpl-"+c.templateSelector).length?wp.template(c.templateSelector):wp.template("customize-"+c.containerType+"-default"),a&&c.container?b.trim(a(_.extend({id:c.id},c.params))):"<li></li>"},getContent:function(){var a=this,b=a.container,c=b.find(".accordion-section-content, .control-panel-content").first(),d="sub-"+b.attr("id"),e=d,f=b.attr("aria-owns");return f&&(e=e+" "+f),b.attr("aria-owns",e),c.detach().attr({id:d,"class":"customize-pane-child "+c.attr("class")+" "+b.attr("class")})}}),f.Section=c.extend({containerType:"section",containerParent:"#customize-theme-controls",containerPaneParent:".customize-pane-parent",defaults:{title:"",description:"",priority:100,type:"default",content:null,active:!0,instanceNumber:null,panel:null,customizeAction:""},initialize:function(a,d){var e,g=this;e=d.params||d,e.type||_.find(f.sectionConstructor,function(a,b){return a===g.constructor&&(e.type=b,!0)}),c.prototype.initialize.call(g,a,e),g.id=a,g.panel=new f.Value,g.panel.bind(function(a){b(g.headContainer).toggleClass("control-subsection",!!a)}),g.panel.set(g.params.panel||""),f.utils.bubbleChildValueChanges(g,["panel"]),g.embed(),g.deferred.embedded.done(function(){g.ready()})},embed:function(){var a,b=this;b.containerParent=f.ensure(b.containerParent),a=function(a){var c;a?f.panel(a,function(a){a.deferred.embedded.done(function(){c=a.contentContainer,b.headContainer.parent().is(c)||c.append(b.headContainer),b.contentContainer.parent().is(b.headContainer)||b.containerParent.append(b.contentContainer),b.deferred.embedded.resolve()})}):(c=f.ensure(b.containerPaneParent),b.headContainer.parent().is(c)||c.append(b.headContainer),b.contentContainer.parent().is(b.headContainer)||b.containerParent.append(b.contentContainer),b.deferred.embedded.resolve())},b.panel.bind(a),a(b.panel.get())},attachEvents:function(){var a,c,d=this;d.container.hasClass("cannot-expand")||(d.container.find(".accordion-section-title, .customize-section-back").on("click keydown",function(a){f.utils.isKeydownButNotEnterEvent(a)||(a.preventDefault(),d.expanded()?d.collapse():d.expand())}),d.container.find(".customize-section-title .customize-help-toggle").on("click",function(){a=d.container.find(".section-meta"),a.hasClass("cannot-expand")||(c=a.find(".customize-section-description:first"),c.toggleClass("open"),c.slideToggle(d.defaultExpandedArguments.duration,function(){c.trigger("toggled")}),b(this).attr("aria-expanded",function(a,b){return"true"===b?"false":"true"}))}))},isContextuallyActive:function(){var a=this,b=a.controls(),c=0;return _(b).each(function(a){a.active()&&(c+=1)}),0!==c},controls:function(){return this._children("section","control")},onChangeExpanded:function(a,c){var d,e,g=this,h=g.headContainer.closest(".wp-full-overlay-sidebar-content"),i=g.contentContainer,j=g.headContainer.closest(".wp-full-overlay"),k=i.find(".customize-section-back"),l=g.headContainer.find(".accordion-section-title").first();a&&!i.hasClass("open")?(d=c.unchanged?c.completeCallback:b.proxy(function(){g._animateChangeExpanded(function(){l.attr("tabindex","-1"),k.attr("tabindex","0"),k.focus(),i.css("top",""),h.scrollTop(0),c.completeCallback&&c.completeCallback()}),i.addClass("open"),j.addClass("section-open"),f.state("expandedSection").set(g)},this),c.allowMultiple||f.section.each(function(a){a!==g&&a.collapse({duration:c.duration})}),g.panel()?f.panel(g.panel()).expand({duration:c.duration,completeCallback:d}):(c.allowMultiple||f.panel.each(function(a){a.collapse()}),d())):!a&&i.hasClass("open")?(g.panel()&&(e=f.panel(g.panel()),e.contentContainer.hasClass("skip-transition")&&e.collapse()),g._animateChangeExpanded(function(){k.attr("tabindex","-1"),l.attr("tabindex","0"),l.focus(),i.css("top",""),c.completeCallback&&c.completeCallback()}),i.removeClass("open"),j.removeClass("section-open"),g===f.state("expandedSection").get()&&f.state("expandedSection").set(!1)):c.completeCallback&&c.completeCallback()}}),f.ThemesSection=f.Section.extend({currentTheme:"",overlay:"",template:"",screenshotQueue:null,$window:null,$body:null,loaded:0,loading:!1,fullyLoaded:!1,term:"",tags:"",nextTerm:"",nextTags:"",filtersHeight:0,headerContainer:null,updateCountDebounced:null,initialize:function(a,c){var d=this;d.headerContainer=b(),d.$window=b(window),d.$body=b(document.body),f.Section.prototype.initialize.call(d,a,c),d.updateCountDebounced=_.debounce(d.updateCount,500)},embed:function(){var a,b=this;a=function(a){var c;f.panel(a,function(a){a.deferred.embedded.done(function(){c=a.contentContainer,b.headContainer.parent().is(c)||c.find(".customize-themes-full-container-container").before(b.headContainer),b.contentContainer.parent().is(b.headContainer)||b.containerParent.append(b.contentContainer),b.deferred.embedded.resolve()})})},b.panel.bind(a),a(b.panel.get())},ready:function(){var a=this;a.overlay=a.container.find(".theme-overlay"),a.template=wp.template("customize-themes-details-view"),a.container.on("keydown",function(b){a.overlay.find(".theme-wrap").is(":visible")&&(39===b.keyCode&&a.nextTheme(),37===b.keyCode&&a.previousTheme(),27===b.keyCode&&(a.$body.hasClass("modal-open")?a.closeDetails():a.headerContainer.find(".customize-themes-section-title").focus(),b.stopPropagation()))}),a.renderScreenshots=_.throttle(a.renderScreenshots,100),_.bindAll(a,"renderScreenshots","loadMore","checkTerm","filtersChecked")},isContextuallyActive:function(){return this.active()},attachEvents:function(){function a(){var a=d.headerContainer.find(".customize-themes-section-title");a.toggleClass("selected",d.expanded()),a.attr("aria-expanded",d.expanded()?"true":"false"),d.expanded()||a.removeClass("details-open")}var c,d=this;d.container.find(".customize-section-back").on("click keydown",function(a){f.utils.isKeydownButNotEnterEvent(a)||(a.preventDefault(),d.collapse())}),d.headerContainer=b("#accordion-section-"+d.id),d.headerContainer.on("click",".customize-themes-section-title",function(){d.headerContainer.find(".filter-details").length&&(d.headerContainer.find(".customize-themes-section-title").toggleClass("details-open").attr("aria-expanded",function(a,b){return"true"===b?"false":"true"}),d.headerContainer.find(".filter-details").slideToggle(180)),d.expanded()||d.expand()}),d.container.on("click",".theme-actions .preview-theme",function(){f.panel("themes").loadThemePreview(b(this).data("slug"))}),d.container.on("click",".left",function(){d.previousTheme()}),d.container.on("click",".right",function(){d.nextTheme()}),d.container.on("click",".theme-backdrop, .close",function(){d.closeDetails()}),"local"===d.params.filter_type?d.container.on("input",".wp-filter-search-themes",function(a){d.filterSearch(a.currentTarget.value)}):"remote"===d.params.filter_type&&(c=_.debounce(d.checkTerm,500),d.contentContainer.on("input",".wp-filter-search",function(){f.panel("themes").expanded()&&(c(d),d.expanded()||d.expand())}),d.contentContainer.on("click",".filter-group input",function(){d.filtersChecked(),d.checkTerm(d)})),d.contentContainer.on("click",".feature-filter-toggle",function(a){var c=b(".customize-themes-full-container"),e=b(a.currentTarget);if(d.filtersHeight=e.parent().next(".filter-drawer").height(),!(0<c.scrollTop()&&(c.animate({scrollTop:0},400),e.hasClass("open"))))if(e.toggleClass("open").attr("aria-expanded",function(a,b){return"true"===b?"false":"true"}).parent().next(".filter-drawer").slideToggle(180,"linear"),e.hasClass("open")){var f=1018<window.innerWidth?50:76;d.contentContainer.find(".themes").css("margin-top",d.filtersHeight+f)}else d.contentContainer.find(".themes").css("margin-top",0)}),d.contentContainer.on("click",".no-themes-local .search-dotorg-themes",function(){f.section("wporg_themes").focus()}),d.expanded.bind(a),a(),f.bind("ready",function(){d.contentContainer=d.container.find(".customize-themes-section"),d.contentContainer.appendTo(b(".customize-themes-full-container")),d.container.add(d.headerContainer)})},onChangeExpanded:function(a,b){function c(){0===d.loaded&&d.loadThemes(),f.section.each(function(a){var c;a!==d&&"themes"===a.params.type&&(c=a.contentContainer.find(".wp-filter-search").val(),d.contentContainer.find(".wp-filter-search").val(c),""===c&&""!==d.term&&"local"!==d.params.filter_type?(d.term="",d.initializeNewQuery(d.term,d.tags)):"remote"===d.params.filter_type?d.checkTerm(d):"local"===d.params.filter_type&&d.filterSearch(c),a.collapse({duration:b.duration}))}),d.contentContainer.addClass("current-section"),e.scrollTop(),e.on("scroll",_.throttle(d.renderScreenshots,300)),e.on("scroll",_.throttle(d.loadMore,300)),b.completeCallback&&b.completeCallback(),d.updateCount()}var d=this,e=d.contentContainer.closest(".customize-themes-full-container");return b.unchanged?void(b.completeCallback&&b.completeCallback()):void(a?d.panel()&&f.panel.has(d.panel())?f.panel(d.panel()).expand({duration:b.duration,completeCallback:c}):c():(d.contentContainer.removeClass("current-section"),d.headerContainer.find(".filter-details").slideUp(180),e.off("scroll"),b.completeCallback&&b.completeCallback()))},getContent:function(){return this.container.find(".control-section-content")},loadThemes:function(){var a,b,c,d=this;d.loading||(b=Math.ceil(d.loaded/100)+1,a={nonce:f.settings.nonce.switch_themes,wp_customize:"on",theme_action:d.params.action,customized_theme:f.settings.theme.stylesheet,page:b},"remote"===d.params.filter_type&&(a.search=d.term,a.tags=d.tags),d.headContainer.closest(".wp-full-overlay").addClass("loading"),d.loading=!0,d.container.find(".no-themes").hide(),c=wp.ajax.post("customize_load_themes",a),c.done(function(a){var c=a.themes;return""!==d.nextTerm||""!==d.nextTags?(d.nextTerm&&(d.term=d.nextTerm),d.nextTags&&(d.tags=d.nextTags),d.nextTerm="",d.nextTags="",d.loading=!1,void d.loadThemes()):(0!==c.length?(d.loadControls(c,b),1===b&&(_.each(d.controls().slice(0,3),function(a){var b,c=a.params.theme.screenshot[0];c&&(b=new Image,b.src=c)}),"local"!==d.params.filter_type&&wp.a11y.speak(f.settings.l10n.themeSearchResults.replace("%d",a.info.results))),_.delay(d.renderScreenshots,100),("local"===d.params.filter_type||100>c.length)&&(d.fullyLoaded=!0)):0===d.loaded?(d.container.find(".no-themes").show(),wp.a11y.speak(d.container.find(".no-themes").text())):d.fullyLoaded=!0,"local"===d.params.filter_type?d.updateCount():d.updateCount(a.info.results),d.container.find(".unexpected-error").hide(),d.headContainer.closest(".wp-full-overlay").removeClass("loading"),void(d.loading=!1))}),c.fail(function(a){"undefined"==typeof a?(d.container.find(".unexpected-error").show(),wp.a11y.speak(d.container.find(".unexpected-error").text())):"undefined"!=typeof console&&console.error&&console.error(a),d.headContainer.closest(".wp-full-overlay").removeClass("loading"),d.loading=!1}))},loadControls:function(a,b){var c=[],d=this;_.each(a,function(a){var b=new f.controlConstructor.theme(d.params.action+"_theme_"+a.id,{type:"theme",section:d.params.id,theme:a,priority:d.loaded+1});f.control.add(b),c.push(b),d.loaded=d.loaded+1}),1!==b&&Array.prototype.push.apply(d.screenshotQueue,c)},loadMore:function(){var a,b,c,d=this;d.fullyLoaded||d.loading||(a=d.container.closest(".customize-themes-full-container"),b=a.scrollTop()+a.height(),c=a.prop("scrollHeight")-3e3,b>c&&d.loadThemes())},filterSearch:function(a){var b,c=0,d=!1,e=this,g=f.section.has("wporg_themes")&&"remote"!==e.params.filter_type?".no-themes-local":".no-themes",h=e.controls();e.loading||(b=a.toLowerCase().trim().replace(/-/g," ").split(" "),_.each(h,function(a){d=a.filter(b),d&&(c+=1)}),0===c?(e.container.find(g).show(),wp.a11y.speak(e.container.find(g).text())):e.container.find(g).hide(),e.renderScreenshots(),f.reflowPaneContents(),e.updateCountDebounced(c))},checkTerm:function(a){var b;"remote"===a.params.filter_type&&(b=a.contentContainer.find(".wp-filter-search").val(),a.term!==b.trim()&&a.initializeNewQuery(b,a.tags))},filtersChecked:function(){var a=this,c=a.container.find(".filter-group").find(":checkbox"),d=[];_.each(c.filter(":checked"),function(a){d.push(b(a).prop("value"))}),0===d.length?(d="",a.contentContainer.find(".feature-filter-toggle .filter-count-0").show(),a.contentContainer.find(".feature-filter-toggle .filter-count-filters").hide()):(a.contentContainer.find(".feature-filter-toggle .theme-filter-count").text(d.length),a.contentContainer.find(".feature-filter-toggle .filter-count-0").hide(),a.contentContainer.find(".feature-filter-toggle .filter-count-filters").show()),_.isEqual(a.tags,d)||(a.loading?a.nextTags=d:"remote"===a.params.filter_type?a.initializeNewQuery(a.term,d):"local"===a.params.filter_type&&a.filterSearch(d.join(" ")))},initializeNewQuery:function(a,b){var c=this;_.each(c.controls(),function(a){a.container.remove(),f.control.remove(a.id)}),c.loaded=0,c.fullyLoaded=!1,c.screenshotQueue=null,c.loading?(c.nextTerm=a,c.nextTags=b):(c.term=a,c.tags=b,c.loadThemes()),c.expanded()||c.expand()},renderScreenshots:function(){var a=this;null!==a.screenshotQueue&&0!==a.screenshotQueue.length||(a.screenshotQueue=_.filter(a.controls(),function(a){return!a.screenshotRendered})),a.screenshotQueue.length&&(a.screenshotQueue=_.filter(a.screenshotQueue,function(b){var c=b.container.find(".theme-screenshot"),d=c.find("img");if(!d.length)return!1;if(d.is(":hidden"))return!0;var e=a.$window.scrollTop(),f=e+a.$window.height(),g=d.offset().top,h=c.height(),i=g+h,j=3*h,k=i>=e-j&&g<=f+j;return k&&b.container.trigger("render-screenshot"),!k}))},getVisibleCount:function(){return this.contentContainer.find("li.customize-control:visible").length},updateCount:function(a){var b,c,d=this;a||0===a||(a=d.getVisibleCount()),c=d.contentContainer.find(".themes-displayed"),b=d.contentContainer.find(".theme-count"),0===a?b.text("0"):(c.fadeOut(180,function(){b.text(a),c.fadeIn(180)}),wp.a11y.speak(f.settings.l10n.announceThemeCount.replace("%d",a)))},nextTheme:function(){var a=this;a.getNextTheme()&&a.showDetails(a.getNextTheme(),function(){a.overlay.find(".right").focus()})},getNextTheme:function(){var a,b,c,d,e=this;return a=f.control(e.params.action+"_theme_"+e.currentTheme),c=e.controls(),d=_.indexOf(c,a),-1!==d&&(b=c[d+1],!!b&&b.params.theme)},previousTheme:function(){var a=this;a.getPreviousTheme()&&a.showDetails(a.getPreviousTheme(),function(){a.overlay.find(".left").focus()})},getPreviousTheme:function(){var a,b,c,d,e=this;return a=f.control(e.params.action+"_theme_"+e.currentTheme),c=e.controls(),d=_.indexOf(c,a),-1!==d&&(b=c[d-1],!!b&&b.params.theme)},updateLimits:function(){this.getNextTheme()||this.overlay.find(".right").addClass("disabled"),this.getPreviousTheme()||this.overlay.find(".left").addClass("disabled")},loadThemePreview:function(a){return f.ThemesPanel.prototype.loadThemePreview.call(this,a)},showDetails:function(a,b){function c(){return!g.canSwitchTheme(a.id)}function d(){return c()||!1===f.settings.theme._canInstall||!0===f.settings.theme._filesystemCredentialsNeeded}var e=this,g=f.panel("themes");e.currentTheme=a.id,e.overlay.html(e.template(a)).fadeIn("fast").focus(),e.overlay.find("button.preview, button.preview-theme").toggleClass("disabled",c()),e.overlay.find("button.theme-install").toggleClass("disabled",d()),e.$body.addClass("modal-open"),e.containFocus(e.overlay),e.updateLimits(),wp.a11y.speak(f.settings.l10n.announceThemeDetails.replace("%s",a.name)),b&&b()},closeDetails:function(){var a=this;a.$body.removeClass("modal-open"),a.overlay.fadeOut("fast"),f.control(a.params.action+"_theme_"+a.currentTheme).container.find(".theme").focus()},containFocus:function(a){var c;a.on("keydown",function(d){if(9===d.keyCode)return c=b(":tabbable",a),c.last()[0]!==d.target||d.shiftKey?c.first()[0]===d.target&&d.shiftKey?(c.last().focus(),!1):void 0:(c.first().focus(),!1)})}}),f.OuterSection=f.Section.extend({initialize:function(){var a=this;a.containerParent="#customize-outer-theme-controls",a.containerPaneParent=".customize-outer-pane-parent",f.Section.prototype.initialize.apply(a,arguments)},onChangeExpanded:function(a,c){var d,e,g=this,h=g.headContainer.closest(".wp-full-overlay-sidebar-content"),i=g.contentContainer,j=i.find(".customize-section-back"),k=g.headContainer.find(".accordion-section-title").first(),l=b(document.body);l.toggleClass("outer-section-open",a),g.container.toggleClass("open",a),g.container.removeClass("busy"),f.section.each(function(a){"outer"===a.params.type&&a.id!==g.id&&a.container.removeClass("open")}),a&&!i.hasClass("open")?(d=c.unchanged?c.completeCallback:b.proxy(function(){g._animateChangeExpanded(function(){k.attr("tabindex","-1"),j.attr("tabindex","0"),j.focus(),i.css("top",""),h.scrollTop(0),c.completeCallback&&c.completeCallback()}),i.addClass("open")},this),g.panel()?f.panel(g.panel()).expand({duration:c.duration,completeCallback:d}):d()):!a&&i.hasClass("open")?(g.panel()&&(e=f.panel(g.panel()),e.contentContainer.hasClass("skip-transition")&&e.collapse()),g._animateChangeExpanded(function(){j.attr("tabindex","-1"),k.attr("tabindex","0"),k.focus(),i.css("top",""),c.completeCallback&&c.completeCallback()}),i.removeClass("open")):c.completeCallback&&c.completeCallback()}}),f.Panel=c.extend({containerType:"panel",initialize:function(a,b){var d,e=this;d=b.params||b,d.type||_.find(f.panelConstructor,function(a,b){return a===e.constructor&&(d.type=b,!0)}),c.prototype.initialize.call(e,a,d),e.embed(),e.deferred.embedded.done(function(){e.ready()})},embed:function(){var a=this,c=b("#customize-theme-controls"),d=b(".customize-pane-parent");a.headContainer.parent().is(d)||d.append(a.headContainer),a.contentContainer.parent().is(a.headContainer)||c.append(a.contentContainer),a.renderContent(),a.deferred.embedded.resolve()},attachEvents:function(){var a,c=this;c.headContainer.find(".accordion-section-title").on("click keydown",function(a){f.utils.isKeydownButNotEnterEvent(a)||(a.preventDefault(),c.expanded()||c.expand())}),c.container.find(".customize-panel-back").on("click keydown",function(a){f.utils.isKeydownButNotEnterEvent(a)||(a.preventDefault(),c.expanded()&&c.collapse())}),a=c.container.find(".panel-meta:first"),a.find("> .accordion-section-title .customize-help-toggle").on("click",function(){if(!a.hasClass("cannot-expand")){var d=a.find(".customize-panel-description:first");a.hasClass("open")?(a.toggleClass("open"),d.slideUp(c.defaultExpandedArguments.duration,function(){d.trigger("toggled")}),b(this).attr("aria-expanded",!1)):(d.slideDown(c.defaultExpandedArguments.duration,function(){d.trigger("toggled")}),a.toggleClass("open"),b(this).attr("aria-expanded",!0))}})},sections:function(){return this._children("panel","section")},isContextuallyActive:function(){var a=this,b=a.sections(),c=0;return _(b).each(function(a){a.active()&&a.isContextuallyActive()&&(c+=1)}),0!==c},onChangeExpanded:function(a,b){if(b.unchanged)return void(b.completeCallback&&b.completeCallback());var c,d=this,e=d.contentContainer,g=e.closest(".wp-full-overlay"),h=e.closest(".wp-full-overlay-sidebar-content"),i=d.headContainer.find(".accordion-section-title"),j=e.find(".customize-panel-back"),k=d.sections();a&&!e.hasClass("current-panel")?(f.section.each(function(a){d.id!==a.panel()&&a.collapse({duration:0})}),f.panel.each(function(a){d!==a&&a.collapse({duration:0});
}),d.params.autoExpandSoleSection&&1===k.length&&k[0].active.get()?(e.addClass("current-panel skip-transition"),g.addClass("in-sub-panel"),k[0].expand({completeCallback:b.completeCallback})):(d._animateChangeExpanded(function(){i.attr("tabindex","-1"),j.attr("tabindex","0"),j.focus(),e.css("top",""),h.scrollTop(0),b.completeCallback&&b.completeCallback()}),e.addClass("current-panel"),g.addClass("in-sub-panel")),f.state("expandedPanel").set(d)):!a&&e.hasClass("current-panel")&&(c=e.hasClass("skip-transition"),c?e.removeClass("skip-transition"):d._animateChangeExpanded(function(){i.attr("tabindex","0"),j.attr("tabindex","-1"),i.focus(),e.css("top",""),b.completeCallback&&b.completeCallback()}),g.removeClass("in-sub-panel"),e.removeClass("current-panel"),d===f.state("expandedPanel").get()&&f.state("expandedPanel").set(!1))},renderContent:function(){var a,c=this;a=0!==b("#tmpl-"+c.templateSelector+"-content").length?wp.template(c.templateSelector+"-content"):wp.template("customize-panel-default-content"),a&&c.headContainer&&c.contentContainer.html(a(_.extend({id:c.id},c.params)))}}),f.ThemesPanel=f.Panel.extend({initialize:function(a,b){var c=this;c.installingThemes=[],f.Panel.prototype.initialize.call(c,a,b)},canSwitchTheme:function(a){return!(!a||a!==f.settings.theme.stylesheet)||"publish"===f.state("selectedChangesetStatus").get()&&(""===f.state("changesetStatus").get()||"auto-draft"===f.state("changesetStatus").get())},attachEvents:function(){function a(){c.canSwitchTheme()?c.notifications.remove("theme_switch_unavailable"):c.notifications.add(new f.Notification("theme_switch_unavailable",{message:f.l10n.themePreviewUnavailable,type:"warning"}))}var c=this;f.Panel.prototype.attachEvents.apply(c),f.settings.theme._canInstall&&f.settings.theme._filesystemCredentialsNeeded&&c.notifications.add(new f.Notification("theme_install_unavailable",{message:f.l10n.themeInstallUnavailable,type:"info",dismissible:!0})),a(),f.state("selectedChangesetStatus").bind(a),f.state("changesetStatus").bind(a),c.contentContainer.on("click",".customize-theme",function(){c.collapse()}),c.contentContainer.on("click",".customize-themes-section-title, .customize-themes-mobile-back",function(){b(".wp-full-overlay").toggleClass("showing-themes")}),c.contentContainer.on("click",".theme-install",function(a){c.installTheme(a)}),c.contentContainer.on("click",".update-theme, #update-theme",function(a){a.preventDefault(),a.stopPropagation(),c.updateTheme(a)}),c.contentContainer.on("click",".delete-theme",function(a){c.deleteTheme(a)}),_.bindAll(c,"installTheme","updateTheme")},onChangeExpanded:function(a,b){var c,d,e=this,g=!1;return f.Panel.prototype.onChangeExpanded.apply(this,[a,b]),b.unchanged?void(b.completeCallback&&b.completeCallback()):(c=e.headContainer.closest(".wp-full-overlay"),void(a?(c.addClass("in-themes-panel").delay(200).find(".customize-themes-full-container").addClass("animate"),_.delay(function(){c.addClass("themes-panel-expanded")},200),600<window.innerWidth&&(d=e.sections(),_.each(d,function(a){a.expanded()&&(g=!0)}),!g&&d.length>0&&d[0].expand())):c.removeClass("in-themes-panel themes-panel-expanded").find(".customize-themes-full-container").removeClass("animate")))},installTheme:function(a){var c,d,e,g=this,h=b(a.target).data("slug"),i=b.Deferred();return c=b(a.target).hasClass("preview"),f.settings.theme._filesystemCredentialsNeeded?(i.reject({errorCode:"theme_install_unavailable"}),i.promise()):g.canSwitchTheme(h)?_.contains(g.installingThemes,h)?(i.reject({errorCode:"theme_already_installing"}),i.promise()):(wp.updates.maybeRequestFilesystemCredentials(a),d=function(a){var b,d=!1;if(c)f.notifications.remove("theme_installing"),g.loadThemePreview(h);else{if(f.control.each(function(b){"theme"===b.params.type&&b.params.theme.id===a.slug&&(d=b.params.theme,b.rerenderAsInstalled(!0))}),!d||f.control.has("installed_theme_"+d.id))return void i.resolve(a);d.type="installed",b=new f.controlConstructor.theme("installed_theme_"+d.id,{type:"theme",section:"installed_themes",theme:d,priority:0}),f.control.add(b),f.control(b.id).container.trigger("render-screenshot"),f.section.each(function(a){"themes"===a.params.type&&d.id===a.currentTheme&&a.closeDetails()})}i.resolve(a)},g.installingThemes.push(h),e=wp.updates.installTheme({slug:h}),c&&f.notifications.add(new f.OverlayNotification("theme_installing",{message:f.l10n.themeDownloading,type:"info",loading:!0})),e.done(d),e.fail(function(){f.notifications.remove("theme_installing")}),i.promise()):(i.reject({errorCode:"theme_switch_unavailable"}),i.promise())},loadThemePreview:function(a){var c,d,e,g=this,h=b.Deferred();return g.canSwitchTheme(a)?(d=document.createElement("a"),d.href=location.href,e=_.extend(f.utils.parseQueryString(d.search.substr(1)),{theme:a,changeset_uuid:f.settings.changeset.uuid,"return":f.settings.url["return"]}),f.state("saved").get()||(e.customize_autosaved="on"),d.search=b.param(e),f.notifications.add(new f.OverlayNotification("theme_previewing",{message:f.l10n.themePreviewWait,type:"info",loading:!0})),c=function(){var a;f.state("processing").get()>0||(f.state("processing").unbind(c),a=f.requestChangesetUpdate({},{autosave:!0}),a.done(function(){h.resolve(),b(window).off("beforeunload.customize-confirm"),location.replace(d.href)}),a.fail(function(){f.notifications.remove("theme_previewing"),h.reject()}))},0===f.state("processing").get()?c():f.state("processing").bind(c),h.promise()):(h.reject({errorCode:"theme_switch_unavailable"}),h.promise())},updateTheme:function(a){wp.updates.maybeRequestFilesystemCredentials(a),b(document).one("wp-theme-update-success",function(a,b){f.control.each(function(a){"theme"===a.params.type&&a.params.theme.id===b.slug&&(a.params.theme.hasUpdate=!1,a.params.theme.version=b.newVersion,setTimeout(function(){a.rerenderAsInstalled(!0)},2e3))})}),wp.updates.updateTheme({slug:b(a.target).closest(".notice").data("slug")})},deleteTheme:function(a){var c,d;c=b(a.target).data("slug"),d=f.section("installed_themes"),a.preventDefault(),f.settings.theme._filesystemCredentialsNeeded||window.confirm(f.settings.l10n.confirmDeleteTheme)&&(wp.updates.maybeRequestFilesystemCredentials(a),b(document).one("wp-theme-delete-success",function(){var a=f.control("installed_theme_"+c);a.container.remove(),f.control.remove(a.id),d.loaded=d.loaded-1,d.updateCount(),f.control.each(function(a){"theme"===a.params.type&&a.params.theme.id===c&&a.rerenderAsInstalled(!1)})}),wp.updates.deleteTheme({slug:c}),d.closeDetails(),d.focus())}}),f.Control=f.Class.extend({defaultActiveArguments:{duration:"fast",completeCallback:b.noop},defaults:{label:"",description:"",active:!0,priority:10},initialize:function(a,c){var d,e,g=this,h=[];g.params=_.extend({},g.defaults,g.params||{},c.params||c||{}),f.Control.instanceCounter||(f.Control.instanceCounter=0),f.Control.instanceCounter++,g.params.instanceNumber||(g.params.instanceNumber=f.Control.instanceCounter),g.params.type||_.find(f.controlConstructor,function(a,b){return a===g.constructor&&(g.params.type=b,!0)}),g.params.content||(g.params.content=b("<li></li>",{id:"customize-control-"+a.replace(/]/g,"").replace(/\[/g,"-"),"class":"customize-control customize-control-"+g.params.type})),g.id=a,g.selector="#customize-control-"+a.replace(/\]/g,"").replace(/\[/g,"-"),g.params.content?g.container=b(g.params.content):g.container=b(g.selector),g.params.templateId?g.templateSelector=g.params.templateId:g.templateSelector="customize-control-"+g.params.type+"-content",g.deferred=_.extend(g.deferred||{},{embedded:new b.Deferred}),g.section=new f.Value,g.priority=new f.Value,g.active=new f.Value,g.activeArgumentsQueue=[],g.notifications=new f.Notifications({alt:g.altNotice}),g.elements=[],g.active.bind(function(a){var c=g.activeArgumentsQueue.shift();c=b.extend({},g.defaultActiveArguments,c),g.onChangeActive(a,c)}),g.section.set(g.params.section),g.priority.set(isNaN(g.params.priority)?10:g.params.priority),g.active.set(g.params.active),f.utils.bubbleChildValueChanges(g,["section","priority","active"]),g.settings={},d={},g.params.setting&&(d["default"]=g.params.setting),_.extend(d,g.params.settings),_.each(d,function(a,b){var c;_.isObject(a)&&_.isFunction(a.extended)&&a.extended(f.Value)?g.settings[b]=a:_.isString(a)&&(c=f(a),c?g.settings[b]=c:h.push(a))}),e=function(){_.each(d,function(a,b){!g.settings[b]&&_.isString(a)&&(g.settings[b]=f(a))}),g.settings[0]&&!g.settings["default"]&&(g.settings["default"]=g.settings[0]),g.setting=g.settings["default"]||null,g.linkElements(),g.embed()},0===h.length?e():f.apply(f,h.concat(e)),g.deferred.embedded.done(function(){g.linkElements(),g.setupNotifications(),g.ready()})},linkElements:function(){var a,c,d,e=this;a=e.container.find("[data-customize-setting-link], [data-customize-setting-key-link]"),c={},a.each(function(){var g,h,i=b(this);if(!i.data("customizeSettingLinked")){if(i.data("customizeSettingLinked",!0),i.is(":radio")){if(g=i.prop("name"),c[g])return;c[g]=!0,i=a.filter('[name="'+g+'"]')}i.data("customizeSettingLink")?h=f(i.data("customizeSettingLink")):i.data("customizeSettingKeyLink")&&(h=e.settings[i.data("customizeSettingKeyLink")]),h&&(d=new f.Element(i),e.elements.push(d),d.sync(h),d.set(h()))}})},embed:function(){var a,b=this;a=function(a){var c;a&&f.section(a,function(a){a.deferred.embedded.done(function(){c=a.contentContainer.is("ul")?a.contentContainer:a.contentContainer.find("ul:first"),b.container.parent().is(c)||(c.append(b.container),b.renderContent()),b.deferred.embedded.resolve()})})},b.section.bind(a),a(b.section.get())},ready:function(){var a,c=this;"dropdown-pages"===c.params.type&&c.params.allow_addition&&(a=c.container.find(".new-content-item"),a.hide(),c.container.on("click",".add-new-toggle",function(c){b(c.currentTarget).slideUp(180),a.slideDown(180),a.find(".create-item-input").focus()}),c.container.on("click",".add-content",function(){c.addNewPage()}),c.container.on("keydown",".create-item-input",function(a){13===a.which&&c.addNewPage()}))},getNotificationsContainerElement:function(){var a,c,d=this;return c=d.container.find(".customize-control-notifications-container:first"),c.length?c:(c=b('<div class="customize-control-notifications-container"></div>'),d.container.hasClass("customize-control-nav_menu_item")?d.container.find(".menu-item-settings:first").prepend(c):d.container.hasClass("customize-control-widget_form")?d.container.find(".widget-inside:first").prepend(c):(a=d.container.find(".customize-control-title"),a.length?a.after(c):d.container.prepend(c)),c)},setupNotifications:function(){var a,b,c=this;_.each(c.settings,function(a){a.notifications&&(a.notifications.bind("add",function(b){var d=_.extend({},b,{setting:a.id});c.notifications.add(new f.Notification(a.id+":"+b.code,d))}),a.notifications.bind("remove",function(b){c.notifications.remove(a.id+":"+b.code)}))}),a=function(){var a=c.section();(!a||f.section.has(a)&&f.section(a).expanded())&&c.notifications.render()},c.notifications.bind("rendered",function(){var a=c.notifications.get();c.container.toggleClass("has-notifications",0!==a.length),c.container.toggleClass("has-error",0!==_.where(a,{type:"error"}).length)}),b=function(b,c){c&&f.section.has(c)&&f.section(c).expanded.unbind(a),b&&f.section(b,function(b){b.expanded.bind(a),a()})},c.section.bind(b),b(c.section.get()),c.notifications.bind("change",_.debounce(a))},renderNotifications:function(){var a,c,d=this,e=!1;"undefined"!=typeof console&&console.warn&&console.warn("[DEPRECATED] wp.customize.Control.prototype.renderNotifications() is deprecated in favor of instantating a wp.customize.Notifications and calling its render() method."),a=d.getNotificationsContainerElement(),a&&a.length&&(c=[],d.notifications.each(function(a){c.push(a),"error"===a.type&&(e=!0)}),0===c.length?a.stop().slideUp("fast"):a.stop().slideDown("fast",null,function(){b(this).css("height","auto")}),d.notificationsTemplate||(d.notificationsTemplate=wp.template("customize-control-notifications")),d.container.toggleClass("has-notifications",0!==c.length),d.container.toggleClass("has-error",e),a.empty().append(b.trim(d.notificationsTemplate({notifications:c,altNotice:Boolean(d.altNotice)}))))},expand:function(a){f.section(this.section()).expand(a)},focus:d,onChangeActive:function(a,c){return c.unchanged?void(c.completeCallback&&c.completeCallback()):void(b.contains(document,this.container[0])?a?this.container.slideDown(c.duration,c.completeCallback):this.container.slideUp(c.duration,c.completeCallback):(this.container.toggle(a),c.completeCallback&&c.completeCallback()))},toggle:function(a){return this.onChangeActive(a,this.defaultActiveArguments)},activate:c.prototype.activate,deactivate:c.prototype.deactivate,_toggleActive:c.prototype._toggleActive,dropdownInit:function(){var a=this,b=this.container.find(".dropdown-status"),c=this.params,d=!1,e=function(a){"string"==typeof a&&c.statuses&&c.statuses[a]?b.html(c.statuses[a]).show():b.hide()};this.container.on("click keydown",".dropdown",function(b){f.utils.isKeydownButNotEnterEvent(b)||(b.preventDefault(),d||a.container.toggleClass("open"),a.container.hasClass("open")&&a.container.parent().parent().find("li.library-selected").focus(),d=!0,setTimeout(function(){d=!1},400))}),this.setting.bind(e),e(this.setting())},renderContent:function(){var a,b,c,d,e=this;b=["button","checkbox","date","datetime-local","email","month","number","password","radio","range","search","select","tel","time","text","textarea","week","url"],c=e.templateSelector,c==="customize-control-"+e.params.type+"-content"&&_.contains(b,e.params.type)&&!document.getElementById("tmpl-"+c)&&0===e.container.children().length&&(c="customize-control-default-content"),document.getElementById("tmpl-"+c)&&(a=wp.template(c),a&&e.container&&e.container.html(a(e.params))),e.notifications.container=e.getNotificationsContainerElement(),d=e.section(),(!d||f.section.has(d)&&f.section(d).expanded())&&e.notifications.render()},addNewPage:function(){var a,c,d,e,g,h,i=this;if("dropdown-pages"===i.params.type&&i.params.allow_addition&&f.Menus){if(c=i.container.find(".add-new-toggle"),d=i.container.find(".new-content-item"),e=i.container.find(".create-item-input"),g=e.val(),h=i.container.find("select"),!g)return void e.addClass("invalid");e.removeClass("invalid"),e.attr("disabled","disabled"),a=f.Menus.insertAutoDraftPost({post_title:g,post_type:"page"}),a.done(function(a){var e,j,k;e=new f.Menus.AvailableItemModel({id:"post-"+a.post_id,title:g,type:"post_type",type_label:f.Menus.data.l10n.page_label,object:"page",object_id:a.post_id,url:a.url}),f.Menus.availableMenuItemsPanel.collection.add(e),j=b("#available-menu-items-post_type-page").find(".available-menu-items-list"),k=wp.template("available-menu-item"),j.prepend(k(e.attributes)),h.focus(),i.setting.set(String(a.post_id)),d.slideUp(180),c.slideDown(180)}),a.always(function(){e.val("").removeAttr("disabled")})}}}),f.ColorControl=f.Control.extend({ready:function(){var a,b=this,c="hue"===this.params.mode,d=!1;c?(a=this.container.find(".color-picker-hue"),a.val(b.setting()).wpColorPicker({change:function(a,c){d=!0,b.setting(c.color.h()),d=!1}})):(a=this.container.find(".color-picker-hex"),a.val(b.setting()).wpColorPicker({change:function(){d=!0,b.setting.set(a.wpColorPicker("color")),d=!1},clear:function(){d=!0,b.setting.set(""),d=!1}})),b.setting.bind(function(b){d||(a.val(b),a.wpColorPicker("color",b))}),b.container.on("keydown",function(c){var d;27===c.which&&(d=b.container.find(".wp-picker-container"),d.hasClass("wp-picker-active")&&(a.wpColorPicker("close"),b.container.find(".wp-color-result").focus(),c.stopPropagation()))})}}),f.MediaControl=f.Control.extend({ready:function(){function a(a){var d=b.Deferred();c.extended(f.UploadControl)?d.resolve():(a=parseInt(a,10),_.isNaN(a)||a<=0?(delete c.params.attachment,d.resolve()):c.params.attachment&&c.params.attachment.id===a&&d.resolve()),"pending"===d.state()&&wp.media.attachment(a).fetch().done(function(){c.params.attachment=this.attributes,d.resolve(),wp.customize.previewer.send(c.setting.id+"-attachment-data",this.attributes)}),d.done(function(){c.renderContent()})}var c=this;_.bindAll(c,"restoreDefault","removeFile","openFrame","select","pausePlayer"),c.container.on("click keydown",".upload-button",c.openFrame),c.container.on("click keydown",".upload-button",c.pausePlayer),c.container.on("click keydown",".thumbnail-image img",c.openFrame),c.container.on("click keydown",".default-button",c.restoreDefault),c.container.on("click keydown",".remove-button",c.pausePlayer),c.container.on("click keydown",".remove-button",c.removeFile),c.container.on("click keydown",".remove-button",c.cleanupPlayer),f.section(c.section()).container.on("expanded",function(){c.player&&c.player.setControlsSize()}).on("collapsed",function(){c.pausePlayer()}),a(c.setting()),c.setting.bind(a)},pausePlayer:function(){this.player&&this.player.pause()},cleanupPlayer:function(){this.player&&wp.media.mixin.removePlayer(this.player)},openFrame:function(a){f.utils.isKeydownButNotEnterEvent(a)||(a.preventDefault(),this.frame||this.initFrame(),this.frame.open())},initFrame:function(){this.frame=wp.media({button:{text:this.params.button_labels.frame_button},states:[new wp.media.controller.Library({title:this.params.button_labels.frame_title,library:wp.media.query({type:this.params.mime_type}),multiple:!1,date:!1})]}),this.frame.on("select",this.select)},select:function(){var a,b=this.frame.state().get("selection").first().toJSON(),c=window._wpmejsSettings||{};this.params.attachment=b,this.setting(b.id),a=this.container.find("audio, video").get(0),a?this.player=new MediaElementPlayer(a,c):this.cleanupPlayer()},restoreDefault:function(a){f.utils.isKeydownButNotEnterEvent(a)||(a.preventDefault(),this.params.attachment=this.params.defaultAttachment,this.setting(this.params.defaultAttachment.url))},removeFile:function(a){f.utils.isKeydownButNotEnterEvent(a)||(a.preventDefault(),this.params.attachment={},this.setting(""),this.renderContent())}}),f.UploadControl=f.MediaControl.extend({select:function(){var a,b=this.frame.state().get("selection").first().toJSON(),c=window._wpmejsSettings||{};this.params.attachment=b,this.setting(b.url),a=this.container.find("audio, video").get(0),a?this.player=new MediaElementPlayer(a,c):this.cleanupPlayer()},success:function(){},removerVisibility:function(){}}),f.ImageControl=f.UploadControl.extend({thumbnailSrc:function(){}}),f.BackgroundControl=f.UploadControl.extend({ready:function(){f.UploadControl.prototype.ready.apply(this,arguments)},select:function(){f.UploadControl.prototype.select.apply(this,arguments),wp.ajax.post("custom-background-add",{nonce:_wpCustomizeBackground.nonces.add,wp_customize:"on",customize_theme:f.settings.theme.stylesheet,attachment_id:this.params.attachment.id})}}),f.BackgroundPositionControl=f.Control.extend({ready:function(){var a,c=this;c.container.on("change",'input[name="background-position"]',function(){var a=b(this).val().split(" ");c.settings.x(a[0]),c.settings.y(a[1])}),a=_.debounce(function(){var a,b,d,e;a=c.settings.x.get(),b=c.settings.y.get(),e=String(a)+" "+String(b),d=c.container.find('input[name="background-position"][value="'+e+'"]'),d.click()}),c.settings.x.bind(a),c.settings.y.bind(a),a()}}),f.CroppedImageControl=f.MediaControl.extend({openFrame:function(a){f.utils.isKeydownButNotEnterEvent(a)||(this.initFrame(),this.frame.setState("library").open())},initFrame:function(){var a=_wpMediaViewsL10n;this.frame=wp.media({button:{text:a.select,close:!1},states:[new wp.media.controller.Library({title:this.params.button_labels.frame_title,library:wp.media.query({type:"image"}),multiple:!1,date:!1,priority:20,suggestedWidth:this.params.width,suggestedHeight:this.params.height}),new wp.media.controller.CustomizeImageCropper({imgSelectOptions:this.calculateImageSelectOptions,control:this})]}),this.frame.on("select",this.onSelect,this),this.frame.on("cropped",this.onCropped,this),this.frame.on("skippedcrop",this.onSkippedCrop,this)},onSelect:function(){var a=this.frame.state().get("selection").first().toJSON();this.params.width!==a.width||this.params.height!==a.height||this.params.flex_width||this.params.flex_height?this.frame.setState("cropper"):(this.setImageFromAttachment(a),this.frame.close())},onCropped:function(a){this.setImageFromAttachment(a)},calculateImageSelectOptions:function(a,b){var c,d,e,f=b.get("control"),g=!!parseInt(f.params.flex_width,10),h=!!parseInt(f.params.flex_height,10),i=a.get("width"),j=a.get("height"),k=parseInt(f.params.width,10),l=parseInt(f.params.height,10),m=k/l,n=k,o=l;return b.set("canSkipCrop",!f.mustBeCropped(g,h,k,l,i,j)),i/j>m?(l=j,k=l*m):(k=i,l=k/m),c=(i-k)/2,d=(j-l)/2,e={handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:i,imageHeight:j,minWidth:n>k?k:n,minHeight:o>l?l:o,x1:c,y1:d,x2:k+c,y2:l+d},h===!1&&g===!1&&(e.aspectRatio=k+":"+l),!0===h&&(delete e.minHeight,e.maxWidth=i),!0===g&&(delete e.minWidth,e.maxHeight=j),e},mustBeCropped:function(a,b,c,d,e,f){return(!0!==a||!0!==b)&&((!0!==a||d!==f)&&((!0!==b||c!==e)&&((c!==e||d!==f)&&!(e<=c))))},onSkippedCrop:function(){var a=this.frame.state().get("selection").first().toJSON();this.setImageFromAttachment(a)},setImageFromAttachment:function(a){this.params.attachment=a,this.setting(a.id)}}),f.SiteIconControl=f.CroppedImageControl.extend({initFrame:function(){var a=_wpMediaViewsL10n;this.frame=wp.media({button:{text:a.select,close:!1},states:[new wp.media.controller.Library({title:this.params.button_labels.frame_title,library:wp.media.query({type:"image"}),multiple:!1,date:!1,priority:20,suggestedWidth:this.params.width,suggestedHeight:this.params.height}),new wp.media.controller.SiteIconCropper({imgSelectOptions:this.calculateImageSelectOptions,control:this})]}),this.frame.on("select",this.onSelect,this),this.frame.on("cropped",this.onCropped,this),this.frame.on("skippedcrop",this.onSkippedCrop,this)},onSelect:function(){var a=this.frame.state().get("selection").first().toJSON(),b=this;this.params.width!==a.width||this.params.height!==a.height||this.params.flex_width||this.params.flex_height?this.frame.setState("cropper"):wp.ajax.post("crop-image",{nonce:a.nonces.edit,id:a.id,context:"site-icon",cropDetails:{x1:0,y1:0,width:this.params.width,height:this.params.height,dst_width:this.params.width,dst_height:this.params.height}}).done(function(a){b.setImageFromAttachment(a),b.frame.close()}).fail(function(){b.frame.trigger("content:error:crop")})},setImageFromAttachment:function(a){var c,d,e=["site_icon-32","thumbnail","full"];_.each(e,function(b){d||_.isUndefined(a.sizes[b])||(d=a.sizes[b])}),this.params.attachment=a,this.setting(a.id),d&&(c=b('link[rel="icon"][sizes="32x32"]'),c.attr("href",d.url))},removeFile:function(a){f.utils.isKeydownButNotEnterEvent(a)||(a.preventDefault(),this.params.attachment={},this.setting(""),this.renderContent(),b('link[rel="icon"][sizes="32x32"]').attr("href","/favicon.ico"))}}),f.HeaderControl=f.Control.extend({ready:function(){this.btnRemove=b("#customize-control-header_image .actions .remove"),this.btnNew=b("#customize-control-header_image .actions .new"),_.bindAll(this,"openMedia","removeImage"),this.btnNew.on("click",this.openMedia),this.btnRemove.on("click",this.removeImage),f.HeaderTool.currentHeader=this.getInitialHeaderImage(),new f.HeaderTool.CurrentView({model:f.HeaderTool.currentHeader,el:"#customize-control-header_image .current .container"}),new f.HeaderTool.ChoiceListView({collection:f.HeaderTool.UploadsList=new f.HeaderTool.ChoiceList,el:"#customize-control-header_image .choices .uploaded .list"}),new f.HeaderTool.ChoiceListView({collection:f.HeaderTool.DefaultsList=new f.HeaderTool.DefaultsList,el:"#customize-control-header_image .choices .default .list"}),f.HeaderTool.combinedList=f.HeaderTool.CombinedList=new f.HeaderTool.CombinedList([f.HeaderTool.UploadsList,f.HeaderTool.DefaultsList]),wp.media.controller.Cropper.prototype.defaults.doCropArgs.wp_customize="on",wp.media.controller.Cropper.prototype.defaults.doCropArgs.customize_theme=f.settings.theme.stylesheet},getInitialHeaderImage:function(){if(!f.get().header_image||!f.get().header_image_data||_.contains(["remove-header","random-default-image","random-uploaded-image"],f.get().header_image))return new f.HeaderTool.ImageModel;var a=_.find(_wpCustomizeHeader.uploads,function(a){return a.attachment_id===f.get().header_image_data.attachment_id});return a||(a={url:f.get().header_image,thumbnail_url:f.get().header_image,attachment_id:f.get().header_image_data.attachment_id}),new f.HeaderTool.ImageModel({header:a,choice:a.url.split("/").pop()})},calculateImageSelectOptions:function(a,b){var c,d,e,g,h,i,j=parseInt(_wpCustomizeHeader.data.width,10),k=parseInt(_wpCustomizeHeader.data.height,10),l=!!parseInt(_wpCustomizeHeader.data["flex-width"],10),m=!!parseInt(_wpCustomizeHeader.data["flex-height"],10);return h=a.get("width"),g=a.get("height"),this.headerImage=new f.HeaderTool.ImageModel,this.headerImage.set({themeWidth:j,themeHeight:k,themeFlexWidth:l,themeFlexHeight:m,imageWidth:h,imageHeight:g}),b.set("canSkipCrop",!this.headerImage.shouldBeCropped()),c=j/k,d=h,e=g,d/e>c?(k=e,j=k*c):(j=d,k=j/c),i={handles:!0,keys:!0,instance:!0,persistent:!0,imageWidth:h,imageHeight:g,x1:0,y1:0,x2:j,y2:k},m===!1&&l===!1&&(i.aspectRatio=j+":"+k),m===!1&&(i.maxHeight=k),l===!1&&(i.maxWidth=j),i},openMedia:function(a){var b=_wpMediaViewsL10n;a.preventDefault(),this.frame=wp.media({button:{text:b.selectAndCrop,close:!1},states:[new wp.media.controller.Library({title:b.chooseImage,library:wp.media.query({type:"image"}),multiple:!1,date:!1,priority:20,suggestedWidth:_wpCustomizeHeader.data.width,suggestedHeight:_wpCustomizeHeader.data.height}),new wp.media.controller.Cropper({imgSelectOptions:this.calculateImageSelectOptions})]}),this.frame.on("select",this.onSelect,this),this.frame.on("cropped",this.onCropped,this),this.frame.on("skippedcrop",this.onSkippedCrop,this),this.frame.open()},onSelect:function(){this.frame.setState("cropper")},onCropped:function(a){var b=a.url,c=a.attachment_id,d=a.width,e=a.height;this.setImageFromURL(b,c,d,e)},onSkippedCrop:function(a){var b=a.get("url"),c=a.get("width"),d=a.get("height");this.setImageFromURL(b,a.id,c,d)},setImageFromURL:function(a,b,c,d){var e,g={};g.url=a,g.thumbnail_url=a,g.timestamp=_.now(),b&&(g.attachment_id=b),c&&(g.width=c),d&&(g.height=d),e=new f.HeaderTool.ImageModel({header:g,choice:a.split("/").pop()}),f.HeaderTool.UploadsList.add(e),f.HeaderTool.currentHeader.set(e.toJSON()),e.save(),e.importImage()},removeImage:function(){f.HeaderTool.currentHeader.trigger("hide"),f.HeaderTool.CombinedList.trigger("control:removeImage")}}),f.ThemeControl=f.Control.extend({touchDrag:!1,screenshotRendered:!1,ready:function(){function a(){return!g.canSwitchTheme(e.params.theme.id)}function c(){return a()||!1===f.settings.theme._canInstall||!0===f.settings.theme._filesystemCredentialsNeeded}function d(){e.container.find("button.preview, button.preview-theme").toggleClass("disabled",a()),e.container.find("button.theme-install").toggleClass("disabled",c())}var e=this,g=f.panel("themes");f.state("selectedChangesetStatus").bind(d),f.state("changesetStatus").bind(d),d(),e.container.on("touchmove",".theme",function(){e.touchDrag=!0}),e.container.on("click keydown touchend",".theme",function(a){var c;if(!f.utils.isKeydownButNotEnterEvent(a))return e.touchDrag===!0?e.touchDrag=!1:void(b(a.target).is(".theme-actions .button, .update-theme")||(a.preventDefault(),c=f.section(e.section()),c.showDetails(e.params.theme,function(){f.settings.theme._filesystemCredentialsNeeded&&c.overlay.find(".theme-actions .delete-theme").remove()})))}),e.container.on("render-screenshot",function(){var a=b(this).find("img"),c=a.data("src");c&&a.attr("src",c),e.screenshotRendered=!0})},filter:function(a){var b=this,c=0,d=b.params.theme.name+" "+b.params.theme.description+" "+b.params.theme.tags+" "+b.params.theme.author+" ";return d=d.toLowerCase().replace("-"," "),_.isArray(a)||(a=[a]),b.params.theme.name.toLowerCase()===a.join(" ")?c=100:(c+=10*(d.split(a.join(" ")).length-1),_.each(a,function(a){c+=2*(d.split(a+" ").length-1),c=c+d.split(a).length-1}),c>99&&(c=99)),0!==c?(b.activate(),b.params.priority=101-c,!0):(b.deactivate(),b.params.priority=101,!1)},rerenderAsInstalled:function(a){var b,c=this;a?c.params.theme.type="installed":(b=f.section(c.params.section),c.params.theme.type=b.params.action),c.renderContent(),c.container.trigger("render-screenshot")}}),f.CodeEditorControl=f.Control.extend({initialize:function(a,c){var d=this;d.deferred=_.extend(d.deferred||{},{codemirror:b.Deferred()}),f.Control.prototype.initialize.call(d,a,c),d.notifications.bind("add",function(a){a.code===d.setting.id+":csslint_error"&&(a.templateId="customize-code-editor-lint-error-notification",a.render=function(a){return function(){var b=a.call(this);return b.find("input[type=checkbox]").on("click",function(){d.setting.notifications.remove("csslint_error")}),b}}(a.render))})},ready:function(){var a=this;return a.section()?void f.section(a.section(),function(b){b.deferred.embedded.done(function(){var c;b.expanded()?a.initEditor():(c=function(d){d&&(a.initEditor(),b.expanded.unbind(c))},b.expanded.bind(c))})}):void a.initEditor()},initEditor:function(){var a,b=this,c=!1;wp.codeEditor&&(_.isUndefined(b.params.editor_settings)||!1!==b.params.editor_settings)&&(c=wp.codeEditor.defaultSettings?_.clone(wp.codeEditor.defaultSettings):{},c.codemirror=_.extend({},c.codemirror,{indentUnit:2,tabSize:2}),_.isObject(b.params.editor_settings)&&_.each(b.params.editor_settings,function(a,b){_.isObject(a)&&(c[b]=_.extend({},c[b],a))})),a=new f.Element(b.container.find("textarea")),b.elements.push(a),a.sync(b.setting),a.set(b.setting()),c?b.initSyntaxHighlightingEditor(c):b.initPlainTextareaEditor()},focus:function(a){var b,c=this,d=_.extend({},a);b=d.completeCallback,d.completeCallback=function(){b&&b(),c.editor&&c.editor.codemirror.focus()},f.Control.prototype.focus.call(c,d)},initSyntaxHighlightingEditor:function(a){var c,d=this,e=d.container.find("textarea"),f=!1;c=_.extend({},a,{onTabNext:_.bind(d.onTabNext,d),onTabPrevious:_.bind(d.onTabPrevious,d),onUpdateErrorNotice:_.bind(d.onUpdateErrorNotice,d)}),d.editor=wp.codeEditor.initialize(e,c),b(d.editor.codemirror.display.lineDiv).attr({role:"textbox","aria-multiline":"true","aria-label":d.params.label,"aria-describedby":"editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4"}),d.container.find("label").on("click",function(){d.editor.codemirror.focus()}),d.editor.codemirror.on("change",function(a){f=!0,e.val(a.getValue()).trigger("change"),f=!1}),d.setting.bind(function(a){f||d.editor.codemirror.setValue(a)}),d.editor.codemirror.on("keydown",function(a,b){var c=27;c===b.keyCode&&b.stopPropagation()}),d.deferred.codemirror.resolveWith(d,[d.editor.codemirror])},onTabNext:function(){var a,c,d,e=this;d=f.section(e.section()),a=d.controls(),c=a.indexOf(e),a.length===c+1?b("#customize-footer-actions .collapse-sidebar").focus():a[c+1].container.find(":focusable:first").focus()},onTabPrevious:function(){var a,b,c,d=this;c=f.section(d.section()),a=c.controls(),b=a.indexOf(d),0===b?c.contentContainer.find(".customize-section-title .customize-help-toggle, .customize-section-title .customize-section-description.open .section-description-close").last().focus():a[b-1].contentContainer.find(":focusable:first").focus()},onUpdateErrorNotice:function(a){var b,c=this;c.setting.notifications.remove("csslint_error"),0!==a.length&&(b=1===a.length?f.l10n.customCssError.singular.replace("%d","1"):f.l10n.customCssError.plural.replace("%d",String(a.length)),c.setting.notifications.add(new f.Notification("csslint_error",{message:b,type:"error"})))},initPlainTextareaEditor:function(){var a=this,b=a.container.find("textarea"),c=b[0];b.on("blur",function(){b.data("next-tab-blurs",!1)}),b.on("keydown",function(a){var d,e,f,g=9,h=27;return h===a.keyCode?void(b.data("next-tab-blurs")||(b.data("next-tab-blurs",!0),a.stopPropagation())):void(g!==a.keyCode||a.ctrlKey||a.altKey||a.shiftKey||b.data("next-tab-blurs")||(d=c.selectionStart,
e=c.selectionEnd,f=c.value,d>=0&&(c.value=f.substring(0,d).concat("\t",f.substring(e)),b.selectionStart=c.selectionEnd=d+1),a.stopPropagation(),a.preventDefault()))}),a.deferred.codemirror.rejectWith(a)}}),f.DateTimeControl=f.Control.extend({ready:function(){var a=this;if(a.inputElements={},a.invalidDate=!1,_.bindAll(a,"populateSetting","updateDaysForMonth","populateDateInputs"),!a.setting)throw new Error("Missing setting");a.container.find(".date-input").each(function(){var c,d,e=b(this);c=e.data("component"),d=new f.Element(e),a.inputElements[c]=d,a.elements.push(d),e.on("change",function(){a.invalidDate&&a.notifications.add(new f.Notification("invalid_date",{message:f.l10n.invalidDate}))}),e.on("input",_.debounce(function(){a.invalidDate||a.notifications.remove("invalid_date")})),e.on("blur",_.debounce(function(){a.invalidDate||a.populateDateInputs()}))}),a.inputElements.month.bind(a.updateDaysForMonth),a.inputElements.year.bind(a.updateDaysForMonth),a.populateDateInputs(),a.setting.bind(a.populateDateInputs),_.each(a.inputElements,function(b){b.bind(a.populateSetting)})},parseDateTime:function(a){var b,c,d=this,e=12;return a&&(b=a.match(/^(\d\d\d\d)-(\d\d)-(\d\d)(?: (\d\d):(\d\d)(?::(\d\d))?)?$/)),b?(b.shift(),c={year:b.shift(),month:b.shift(),day:b.shift(),hour:b.shift()||"00",minute:b.shift()||"00",second:b.shift()||"00"},d.params.includeTime&&d.params.twelveHourFormat&&(c.hour=parseInt(c.hour,10),c.meridian=c.hour>=e?"pm":"am",c.hour=c.hour%e?String(c.hour%e):String(e),delete c.second),c):null},validateInputs:function(){var a,b,c=this;return c.invalidDate=!1,a=["year","day"],c.params.includeTime&&a.push("hour","minute"),_.find(a,function(a){var d,e,f,g;return d=c.inputElements[a],b=d.element.get(0),e=parseInt(d.element.attr("max"),10),f=parseInt(d.element.attr("min"),10),g=parseInt(d(),10),c.invalidDate=isNaN(g)||g>e||g<f,c.invalidDate||b.setCustomValidity(""),c.invalidDate}),c.inputElements.meridian&&!c.invalidDate&&(b=c.inputElements.meridian.element.get(0),"am"!==c.inputElements.meridian.get()&&"pm"!==c.inputElements.meridian.get()?c.invalidDate=!0:b.setCustomValidity("")),c.invalidDate?b.setCustomValidity(f.l10n.invalidValue):b.setCustomValidity(""),(!c.section()||f.section.has(c.section())&&f.section(c.section()).expanded())&&_.result(b,"reportValidity"),c.invalidDate},updateDaysForMonth:function(){var a,b,c,d,e=this;c=parseInt(e.inputElements.month(),10),b=parseInt(e.inputElements.year(),10),d=parseInt(e.inputElements.day(),10),c&&b&&(a=new Date(b,c,0).getDate(),e.inputElements.day.element.attr("max",a),d>a&&e.inputElements.day(String(a)))},populateSetting:function(){var a,b=this;return!(b.validateInputs()||!b.params.allowPastDate&&!b.isFutureDate())&&(a=b.convertInputDateToString(),b.setting.set(a),!0)},convertInputDateToString:function(){var a,b,c,d,e=this,f="";return d=function(a,b){var c;return String(a).length<b&&(c=b-String(a).length,a=Math.pow(10,c).toString().substr(1)+String(a)),a},c=function(a){var b=parseInt(e.inputElements[a].get(),10);return _.contains(["month","day","hour","minute"],a)?b=d(b,2):"year"===a&&(b=d(b,4)),b},a=["year","-","month","-","day"],e.params.includeTime&&(b=e.inputElements.meridian?e.convertHourToTwentyFourHourFormat(e.inputElements.hour(),e.inputElements.meridian()):e.inputElements.hour(),a=a.concat([" ",d(b,2),":","minute",":","00"])),_.each(a,function(a){f+=e.inputElements[a]?c(a):a}),f},isFutureDate:function(){var a=this;return 0<f.utils.getRemainingTime(a.convertInputDateToString())},convertHourToTwentyFourHourFormat:function(a,b){var c,d,e=12;return d=parseInt(a,10),isNaN(d)?"":(c="pm"===b&&d<e?d+e:"am"===b&&e===d?d-e:d,String(c))},populateDateInputs:function(){var a,b=this;return!!(a=b.parseDateTime(b.setting.get()))&&(_.each(b.inputElements,function(b,c){var d=a[c];"month"===c||"meridian"===c?(d=d.replace(/^0/,""),b.set(d)):(d=parseInt(d,10),b.element.is(document.activeElement)?d!==parseInt(b(),10)&&b.set(String(d)):b.set(a[c]))}),!0)},toggleFutureDateNotification:function(a){var b,c,d=this;return b="not_future_date",a?(c=new f.Notification(b,{type:"error",message:f.l10n.futureDateError}),d.notifications.add(c)):d.notifications.remove(b),d}}),f.PreviewLinkControl=f.Control.extend({defaults:_.extend({},f.Control.prototype.defaults,{templateId:"customize-preview-link-control"}),ready:function(){var a,c,d,e,g,h,i=this;_.bindAll(i,"updatePreviewLink"),i.setting||(i.setting=new f.Value),i.previewElements={},i.container.find(".preview-control-element").each(function(){d=b(this),c=d.data("component"),a=new f.Element(d),i.previewElements[c]=a,i.elements.push(a)}),e=i.previewElements.url,g=i.previewElements.input,h=i.previewElements.button,g.link(i.setting),e.link(i.setting),e.bind(function(a){e.element.parent().attr({href:a,target:f.settings.changeset.uuid})}),f.bind("ready",i.updatePreviewLink),f.state("saved").bind(i.updatePreviewLink),f.state("changesetStatus").bind(i.updatePreviewLink),f.state("activated").bind(i.updatePreviewLink),f.previewer.previewUrl.bind(i.updatePreviewLink),h.element.on("click",function(a){a.preventDefault(),i.setting()&&(g.element.select(),document.execCommand("copy"),h(h.element.data("copied-text")))}),e.element.parent().on("click",function(a){b(this).hasClass("disabled")&&a.preventDefault()}),h.element.on("mouseenter",function(){i.setting()&&h(h.element.data("copy-text"))})},updatePreviewLink:function(){var a,b=this;a=!f.state("saved").get()||""===f.state("changesetStatus").get()||"auto-draft"===f.state("changesetStatus").get(),b.toggleSaveNotification(a),b.previewElements.url.element.parent().toggleClass("disabled",a),b.previewElements.button.element.prop("disabled",a),b.setting.set(f.previewer.getFrontendPreviewUrl())},toggleSaveNotification:function(a){var b,c,d=this;b="changes_not_saved",a?(c=new f.Notification(b,{type:"info",message:f.l10n.saveBeforeShare}),d.notifications.add(c)):d.notifications.remove(b)}}),f.defaultConstructor=f.Setting,f.control=new f.Values({defaultConstructor:f.Control}),f.section=new f.Values({defaultConstructor:f.Section}),f.panel=new f.Values({defaultConstructor:f.Panel}),f.notifications=new f.Notifications,f.PreviewFrame=f.Messenger.extend({sensitivity:null,initialize:function(a,c){var d=b.Deferred();d.promise(this),this.container=a.container,b.extend(a,{channel:f.PreviewFrame.uuid()}),f.Messenger.prototype.initialize.call(this,a,c),this.add("previewUrl",a.previewUrl),this.query=b.extend(a.query||{},{customize_messenger_channel:this.channel()}),this.run(d)},run:function(a){var c,d,e,g=this,h=!1,i=!1,j=null,k="{}"!==g.query.customized;g._ready&&g.unbind("ready",g._ready),g._ready=function(b){i=!0,j=b,g.container.addClass("iframe-ready"),b&&h&&a.resolveWith(g,[b])},g.bind("ready",g._ready),c=document.createElement("a"),c.href=g.previewUrl(),d=_.extend(f.utils.parseQueryString(c.search.substr(1)),{customize_changeset_uuid:g.query.customize_changeset_uuid,customize_theme:g.query.customize_theme,customize_messenger_channel:g.query.customize_messenger_channel}),!f.settings.changeset.autosaved&&f.state("saved").get()||(d.customize_autosaved="on"),c.search=b.param(d),g.iframe=b("<iframe />",{title:f.l10n.previewIframeTitle,name:"customize-"+g.channel()}),g.iframe.attr("onmousewheel",""),k?g.iframe.attr("data-src",c.href):g.iframe.attr("src",c.href),g.iframe.appendTo(g.container),g.targetWindow(g.iframe[0].contentWindow),k&&(e=b("<form>",{action:c.href,target:g.iframe.attr("name"),method:"post",hidden:"hidden"}),e.append(b("<input>",{type:"hidden",name:"_method",value:"GET"})),_.each(g.query,function(a,c){e.append(b("<input>",{type:"hidden",name:c,value:a}))}),g.container.append(e),e.submit(),e.remove()),g.bind("iframe-loading-error",function(b){return g.iframe.remove(),0===b?void g.login(a):-1===b?void a.rejectWith(g,["cheatin"]):void a.rejectWith(g,["request failure"])}),g.iframe.one("load",function(){h=!0,i?a.resolveWith(g,[j]):setTimeout(function(){a.rejectWith(g,["ready timeout"])},g.sensitivity)})},login:function(a){var c,d=this;return c=function(){a.rejectWith(d,["logged out"])},this.triedLogin?c():void b.get(f.settings.url.ajax,{action:"logged-in"}).fail(c).done(function(e){var g;"1"!==e&&c(),g=b("<iframe />",{src:d.previewUrl(),title:f.l10n.previewIframeTitle}).hide(),g.appendTo(d.container),g.on("load",function(){d.triedLogin=!0,g.remove(),d.run(a)})})},destroy:function(){f.Messenger.prototype.destroy.call(this),this.iframe&&this.iframe.remove(),delete this.iframe,delete this.targetWindow}}),function(){var a=0;f.PreviewFrame.uuid=function(){return"preview-"+String(a++)}}(),f.setDocumentTitle=function(a){var b,c;b=f.settings.documentTitleTmpl,c=b.replace("%s",a),document.title=c,f.trigger("title",c)},f.Previewer=f.Messenger.extend({refreshBuffer:null,initialize:function(a,c){var d=this,e=document.createElement("a");b.extend(d,c||{}),d.deferred={active:b.Deferred()},d.refresh=_.debounce(function(a){return function(){var b,c;b=function(){return 0===f.state("processing").get()},b()?a.call(d):(c=function(){b()&&(a.call(d),f.state("processing").unbind(c))},f.state("processing").bind(c))}}(d.refresh),d.refreshBuffer),d.container=f.ensure(a.container),d.allowedUrls=a.allowedUrls,a.url=window.location.href,f.Messenger.prototype.initialize.call(d,a),e.href=d.origin(),d.add("scheme",e.protocol.replace(/:$/,"")),d.add("previewUrl",a.previewUrl).setter(function(a){var c,e,g,h=null,i=[];return c=document.createElement("a"),c.href=a,/\/wp-(admin|includes|content)(\/|$)/.test(c.pathname)?null:(c.search.length>1&&(e=f.utils.parseQueryString(c.search.substr(1)),delete e.customize_changeset_uuid,delete e.customize_theme,delete e.customize_messenger_channel,delete e.customize_autosaved,_.isEmpty(e)?c.search="":c.search=b.param(e)),i.push(c),d.scheme.get()+":"!==c.protocol&&(c=document.createElement("a"),c.href=i[0].href,c.protocol=d.scheme.get()+":",i.unshift(c)),g=document.createElement("a"),_.find(i,function(a){return!_.isUndefined(_.find(d.allowedUrls,function(b){if(g.href=b,c.protocol===g.protocol&&c.host===g.host&&0===c.pathname.indexOf(g.pathname.replace(/\/$/,"")))return h=a.href,!0}))}),h)}),d.bind("ready",d.ready),d.deferred.active.done(_.bind(d.keepPreviewAlive,d)),d.bind("synced",function(){d.send("active")}),d.previewUrl.bind(d.refresh),d.scroll=0,d.bind("scroll",function(a){d.scroll=a}),d.bind("url",function(a){var b,c=!1;d.scroll=0,b=function(){c=!0},d.previewUrl.bind(b),d.previewUrl.set(a),d.previewUrl.unbind(b),c||d.refresh()}),d.bind("documentTitle",function(a){f.setDocumentTitle(a)})},ready:function(a){var b,c=this,d={};d.settings=f.get(),d["settings-modified-while-loading"]=c.settingsModifiedWhileLoading,("resolved"!==c.deferred.active.state()||c.loading)&&(d.scroll=c.scroll),d["edit-shortcut-visibility"]=f.state("editShortcutVisibility").get(),c.send("sync",d),a.currentUrl&&(c.previewUrl.unbind(c.refresh),c.previewUrl.set(a.currentUrl),c.previewUrl.bind(c.refresh)),b={panel:a.activePanels,section:a.activeSections,control:a.activeControls},_(b).each(function(a,b){f[b].each(function(c,d){var e=_.isUndefined(f.settings[b+"s"][d]);e&&_.isUndefined(a[d])||(a[d]?c.activate():c.deactivate())})}),a.settingValidities&&f._handleSettingValidities({settingValidities:a.settingValidities,focusInvalidControl:!1})},keepPreviewAlive:function(){var a,b,c,d,e=this;d=function(){b=setTimeout(c,f.settings.timeouts.keepAliveCheck)},a=function(){f.state("previewerAlive").set(!0),clearTimeout(b),d()},c=function(){f.state("previewerAlive").set(!1)},d(),e.bind("ready",a),e.bind("keep-alive",a)},query:function(){},abort:function(){this.loading&&(this.loading.destroy(),delete this.loading)},refresh:function(){var a,b=this;b.send("loading-initiated"),b.abort(),b.loading=new f.PreviewFrame({url:b.url(),previewUrl:b.previewUrl(),query:b.query({excludeCustomizedSaved:!0})||{},container:b.container}),b.settingsModifiedWhileLoading={},a=function(a){b.settingsModifiedWhileLoading[a.id]=!0},f.bind("change",a),b.loading.always(function(){f.unbind("change",a)}),b.loading.done(function(a){var c,d=this;b.preview=d,b.targetWindow(d.targetWindow()),b.channel(d.channel()),c=function(){d.unbind("synced",c),b._previousPreview&&b._previousPreview.destroy(),b._previousPreview=b.preview,b.deferred.active.resolve(),delete b.loading},d.bind("synced",c),b.trigger("ready",a)}),b.loading.fail(function(a){b.send("loading-failed"),"logged out"===a&&(b.preview&&(b.preview.destroy(),delete b.preview),b.login().done(b.refresh)),"cheatin"===a&&b.cheatin()})},login:function(){var a,c,d,e=this;return this._login?this._login:(a=b.Deferred(),this._login=a.promise(),c=new f.Messenger({channel:"login",url:f.settings.url.login}),d=b("<iframe />",{src:f.settings.url.login,title:f.l10n.loginIframeTitle}).appendTo(this.container),c.targetWindow(d[0].contentWindow),c.bind("login",function(){var b=e.refreshNonces();b.always(function(){d.remove(),c.destroy(),delete e._login}),b.done(function(){a.resolve()}),b.fail(function(){e.cheatin(),a.reject()})}),this._login)},cheatin:function(){b(document.body).empty().addClass("cheatin").append("<h1>"+f.l10n.notAllowedHeading+"</h1><p>"+f.l10n.notAllowed+"</p>")},refreshNonces:function(){var a,c=b.Deferred();return c.promise(),a=wp.ajax.post("customize_refresh_nonces",{wp_customize:"on",customize_theme:f.settings.theme.stylesheet}),a.done(function(a){f.trigger("nonce-refresh",a),c.resolve()}),a.fail(function(){c.reject()}),c}}),f.settingConstructor={},f.controlConstructor={color:f.ColorControl,media:f.MediaControl,upload:f.UploadControl,image:f.ImageControl,cropped_image:f.CroppedImageControl,site_icon:f.SiteIconControl,header:f.HeaderControl,background:f.BackgroundControl,background_position:f.BackgroundPositionControl,theme:f.ThemeControl,date_time:f.DateTimeControl,code_editor:f.CodeEditorControl},f.panelConstructor={themes:f.ThemesPanel},f.sectionConstructor={themes:f.ThemesSection,outer:f.OuterSection},f._handleSettingValidities=function(a){var b,c=[],d=!1;_.each(a.settingValidities,function(a,b){var d=f(b);d&&(_.isObject(a)&&_.each(a,function(a,b){var e,g,h=!1;e=new f.Notification(b,_.extend({fromServer:!0},a)),g=d.notifications(e.code),g&&(h=e.type!==g.type||e.message!==g.message||!_.isEqual(e.data,g.data)),h&&d.notifications.remove(b),d.notifications.has(e.code)||d.notifications.add(e),c.push(d.id)}),d.notifications.each(function(b){!b.fromServer||"error"!==b.type||!0!==a&&a[b.code]||d.notifications.remove(b.code)}))}),a.focusInvalidControl&&(b=f.findControlsForSettings(c),_(_.values(b)).find(function(a){return _(a).find(function(a){var b=a.section()&&f.section.has(a.section())&&f.section(a.section()).expanded();return b&&a.expanded&&(b=a.expanded()),b&&(a.focus(),d=!0),d})}),d||_.isEmpty(b)||_.values(b)[0][0].focus())},f.findControlsForSettings=function(a){var b,c={};return _.each(_.unique(a),function(a){var d=f(a);d&&(b=d.findControls(),b&&b.length>0&&(c[a]=b))}),c},f.reflowPaneContents=_.bind(function(){var a,c,d,e=[],g=!1;document.activeElement&&(c=b(document.activeElement)),f.panel.each(function(b){if("themes"!==b.id){var c=b.sections(),d=_.pluck(c,"headContainer");e.push(b),a=b.contentContainer.is("ul")?b.contentContainer:b.contentContainer.find("ul:first"),f.utils.areElementListsEqual(d,a.children("[id]"))||(_(c).each(function(b){a.append(b.headContainer)}),g=!0)}}),f.section.each(function(b){var c=b.controls(),d=_.pluck(c,"container");b.panel()||e.push(b),a=b.contentContainer.is("ul")?b.contentContainer:b.contentContainer.find("ul:first"),f.utils.areElementListsEqual(d,a.children("[id]"))||(_(c).each(function(b){a.append(b.container)}),g=!0)}),e.sort(f.utils.prioritySort),d=_.pluck(e,"headContainer"),a=b("#customize-theme-controls .customize-pane-parent"),f.utils.areElementListsEqual(d,a.children())||(_(e).each(function(b){a.append(b.headContainer)}),g=!0),f.panel.each(function(a){var b=a.active();a.active.callbacks.fireWith(a.active,[b,b])}),f.section.each(function(a){var b=a.active();a.active.callbacks.fireWith(a.active,[b,b])}),g&&c&&c.focus(),f.trigger("pane-contents-reflowed")},f),f.state=new f.Values,_.each(["saved","saving","trashing","activated","processing","paneVisible","expandedPanel","expandedSection","changesetDate","selectedChangesetDate","changesetStatus","selectedChangesetStatus","remainingTimeToPublish","previewerAlive","editShortcutVisibility","changesetLocked","previewedDevice"],function(a){f.state.create(a)}),b(function(){function a(){function c(a){a||f.settings.changeset.autosaved||(f.settings.changeset.autosaved=!0,f.previewer.send("autosaving"))}var d,e,g,h=!1;f.unbind("change",a),f.state("saved").bind(c),c(f.state("saved").get()),e=function(){h||(h=!0,f.requestChangesetUpdate({},{autosave:!0}).always(function(){h=!1})),g()},g=function(){clearTimeout(d),d=setTimeout(function(){e()},f.settings.timeouts.changesetAutoSave)},g(),b(document).on("visibilitychange.wp-customize-changeset-update",function(){document.hidden&&e()}),b(window).on("beforeunload.wp-customize-changeset-update",function(){e()})}if(f.settings=window._wpCustomizeSettings,f.l10n=window._wpCustomizeControlsL10n,f.settings&&b.support.postMessage&&(b.support.cors||!f.settings.isCrossDomain)){null===f.PreviewFrame.prototype.sensitivity&&(f.PreviewFrame.prototype.sensitivity=f.settings.timeouts.previewFrameSensitivity),null===f.Previewer.prototype.refreshBuffer&&(f.Previewer.prototype.refreshBuffer=f.settings.timeouts.windowRefresh);var c,d=b(document.body),e=d.children(".wp-full-overlay"),g=b("#customize-info .panel-title.site-title"),h=b(".customize-controls-close"),i=b("#save"),j=b("#customize-save-button-wrapper"),k=b("#publish-settings"),l=b("#customize-footer-actions");f.bind("ready",function(){f.section.add(new f.OuterSection("publish_settings",{title:f.l10n.publishSettings,priority:0,active:f.settings.theme.active}))}),f.section("publish_settings",function(a){function b(){r||(r=f.utils.highlightButton(j,{delay:1e3,focusTarget:i}))}function c(){r&&(r(),r=null)}var d,e,g,h,l,m,n,o,p,q,r,s=1e3;e=new f.Control("trash_changeset",{type:"button",section:a.id,priority:30,input_attrs:{"class":"button-link button-link-delete",value:f.l10n.discardChanges}}),f.control.add(e),e.deferred.embedded.done(function(){e.container.find(".button-link").on("click",function(){confirm(f.l10n.trashConfirm)&&wp.customize.previewer.trash()})}),f.control.add(new f.PreviewLinkControl("changeset_preview_link",{section:a.id,priority:100})),h=function(){return!!f.state("activated").get()&&(!f.state("trashing").get()&&"trash"!==f.state("changesetStatus").get()&&(""!==f.state("changesetStatus").get()||!f.state("saved").get()))},a.active.validate=h,g=function(){a.active.set(h())},f.state("activated").bind(g),f.state("trashing").bind(g),f.state("saved").bind(g),f.state("changesetStatus").bind(g),g(),d=function(){k.toggle(a.active.get()),i.toggleClass("has-next-sibling",a.active.get())},d(),a.active.bind(d),f.state("selectedChangesetStatus").bind(c),a.contentContainer.find(".customize-action").text(f.l10n.updating),a.contentContainer.find(".customize-section-back").removeAttr("tabindex"),k.prop("disabled",!1),k.on("click",function(b){b.preventDefault(),a.expanded.set(!a.expanded.get())}),a.expanded.bind(function(a){var d;return k.attr("aria-expanded",String(a)),k.toggleClass("active",a),a?void c():(d=f.state("changesetStatus").get(),""!==d&&"auto-draft"!==d||(d="publish"),void(f.state("selectedChangesetStatus").get()!==d?b():"future"===f.state("selectedChangesetStatus").get()&&f.state("selectedChangesetDate").get()!==f.state("changesetDate").get()&&b()))}),l=new f.Control("changeset_status",{priority:10,type:"radio",section:"publish_settings",setting:f.state("selectedChangesetStatus"),templateId:"customize-selected-changeset-status-control",label:f.l10n.action,choices:f.settings.changeset.statusChoices}),f.control.add(l),m=new f.DateTimeControl("changeset_scheduled_date",{priority:20,section:"publish_settings",setting:f.state("selectedChangesetDate"),minYear:(new Date).getFullYear(),allowPastDate:!1,includeTime:!0,twelveHourFormat:/a/i.test(f.settings.timeFormat),description:f.l10n.scheduleDescription}),m.notifications.alt=!0,f.control.add(m),o=function(){f.state("selectedChangesetStatus").set("publish"),f.previewer.save()},q=function(){var a="future"===f.state("changesetStatus").get()&&"future"===f.state("selectedChangesetStatus").get()&&f.state("changesetDate").get()&&f.state("selectedChangesetDate").get()===f.state("changesetDate").get()&&f.utils.getRemainingTime(f.state("changesetDate").get())>=0;a&&!p?p=setInterval(function(){var a=f.utils.getRemainingTime(f.state("changesetDate").get());f.state("remainingTimeToPublish").set(a),a<=0&&(clearInterval(p),p=0,o())},s):!a&&p&&(clearInterval(p),p=0)},f.state("changesetDate").bind(q),f.state("selectedChangesetDate").bind(q),f.state("changesetStatus").bind(q),f.state("selectedChangesetStatus").bind(q),q(),m.active.validate=function(){return"future"===f.state("selectedChangesetStatus").get()},n=function(a){m.active.set("future"===a)},n(f.state("selectedChangesetStatus").get()),f.state("selectedChangesetStatus").bind(n),f.state("saving").bind(function(a){a&&"future"===f.state("selectedChangesetStatus").get()&&m.toggleFutureDateNotification(!m.isFutureDate())})}),b("#customize-controls").on("keydown",function(a){var c=13===a.which,d=b(a.target);c&&(d.is("input:not([type=button])")||d.is("select"))&&a.preventDefault()}),b(".customize-info").find("> .accordion-section-title .customize-help-toggle").on("click",function(){var a=b(this).closest(".accordion-section"),c=a.find(".customize-panel-description:first");a.hasClass("cannot-expand")||(a.hasClass("open")?(a.toggleClass("open"),c.slideUp(f.Panel.prototype.defaultExpandedArguments.duration,function(){c.trigger("toggled")}),b(this).attr("aria-expanded",!1)):(c.slideDown(f.Panel.prototype.defaultExpandedArguments.duration,function(){c.trigger("toggled")}),a.toggleClass("open"),b(this).attr("aria-expanded",!0)))}),f.previewer=new f.Previewer({container:"#customize-preview",form:"#customize-controls",previewUrl:f.settings.url.preview,allowedUrls:f.settings.url.allowed},{nonce:f.settings.nonce,query:function(a){var b={wp_customize:"on",customize_theme:f.settings.theme.stylesheet,nonce:this.nonce.preview,customize_changeset_uuid:f.settings.changeset.uuid};return!f.settings.changeset.autosaved&&f.state("saved").get()||(b.customize_autosaved="on"),b.customized=JSON.stringify(f.dirtyValues({unsaved:a&&a.excludeCustomizedSaved})),b},save:function(a){function d(a){m[a.id]=!0}var e,g,h=this,i=b.Deferred(),j=f.state("selectedChangesetStatus").get(),k=f.state("selectedChangesetDate").get(),l=f.state("processing"),m={},n=[],o=[],p=[];return a&&a.status&&(j=a.status),f.state("saving").get()&&(i.reject("already_saving"),i.promise()),f.state("saving").set(!0),g=function(){var e,g,l={},q=f._latestRevision,r="client_side_error";return f.bind("change",d),f.notifications.remove(r),f.each(function(a){a.notifications.each(function(b){"error"!==b.type||b.fromServer||(n.push(a.id),l[a.id]||(l[a.id]={}),l[a.id][b.code]=b)})}),f.control.each(function(a){(!a.setting||!a.setting.id&&a.active.get())&&a.notifications.each(function(b){"error"===b.type&&p.push([a])})}),o=_.union(p,_.values(f.findControlsForSettings(n))),_.isEmpty(o)?(g=b.extend(h.query({excludeCustomizedSaved:!1}),{nonce:h.nonce.save,customize_changeset_status:j}),a&&a.date?g.customize_changeset_date=a.date:"future"===j&&k&&(g.customize_changeset_date=k),a&&a.title&&(g.customize_changeset_title=a.title),f.trigger("save-request-params",g),e=wp.ajax.post("customize_save",g),f.state("processing").set(f.state("processing").get()+1),f.trigger("save",e),e.always(function(){f.state("processing").set(f.state("processing").get()-1),f.state("saving").set(!1),f.unbind("change",d)}),f.notifications.each(function(a){a.saveFailure&&f.notifications.remove(a.code)}),e.fail(function(a){var b,d;d={type:"error",dismissible:!0,fromServer:!0,saveFailure:!0},"0"===a?a="not_logged_in":"-1"===a&&(a="invalid_nonce"),"invalid_nonce"===a?h.cheatin():"not_logged_in"===a?(h.preview.iframe.hide(),h.login().done(function(){h.save(),h.preview.iframe.show()})):a.code?"not_future_date"===a.code&&f.section.has("publish_settings")&&f.section("publish_settings").active.get()&&f.control.has("changeset_scheduled_date")?f.control("changeset_scheduled_date").toggleFutureDateNotification(!0).focus():"changeset_locked"!==a.code&&(b=new f.Notification(a.code,_.extend(d,{message:a.message}))):b=new f.Notification("unknown_error",_.extend(d,{message:f.l10n.unknownRequestFail})),b&&f.notifications.add(b),a.setting_validities&&f._handleSettingValidities({settingValidities:a.setting_validities,focusInvalidControl:!0}),i.rejectWith(h,[a]),f.trigger("error",a),"changeset_already_published"===a.code&&a.next_changeset_uuid&&(f.settings.changeset.uuid=a.next_changeset_uuid,f.state("changesetStatus").set(""),f.settings.changeset.branching&&c.send("changeset-uuid",f.settings.changeset.uuid),f.previewer.send("changeset-uuid",f.settings.changeset.uuid))}),void e.done(function(a){h.send("saved",a),f.state("changesetStatus").set(a.changeset_status),a.changeset_date&&f.state("changesetDate").set(a.changeset_date),"publish"===a.changeset_status&&(f.each(function(a){a._dirty&&(_.isUndefined(f._latestSettingRevisions[a.id])||f._latestSettingRevisions[a.id]<=q)&&(a._dirty=!1)}),f.state("changesetStatus").set(""),f.settings.changeset.uuid=a.next_changeset_uuid,f.settings.changeset.branching&&c.send("changeset-uuid",f.settings.changeset.uuid)),f._lastSavedRevision=Math.max(q,f._lastSavedRevision),a.setting_validities&&f._handleSettingValidities({settingValidities:a.setting_validities,focusInvalidControl:!0}),i.resolveWith(h,[a]),f.trigger("saved",a),_.isEmpty(m)||f.state("saved").set(!1)})):(o[0][0].focus(),f.unbind("change",d),n.length&&f.notifications.add(new f.Notification(r,{message:(1===n.length?f.l10n.saveBlockedError.singular:f.l10n.saveBlockedError.plural).replace(/%s/g,String(n.length)),type:"error",dismissible:!0,saveFailure:!0})),i.rejectWith(h,[{setting_invalidities:l}]),f.state("saving").set(!1),i.promise())},0===l()?g():(e=function(){0===l()&&(f.state.unbind("change",e),g())},f.state.bind("change",e)),i.promise()},trash:function(){var a,c,d;f.state("trashing").set(!0),f.state("processing").set(f.state("processing").get()+1),a=wp.ajax.post("customize_trash",{customize_changeset_uuid:f.settings.changeset.uuid,nonce:f.settings.nonce.trash}),f.notifications.add(new f.OverlayNotification("changeset_trashing",{type:"info",message:f.l10n.revertingChanges,loading:!0})),c=function(){var a,c=document.createElement("a");f.state("changesetStatus").set("trash"),f.each(function(a){a._dirty=!1}),f.state("saved").set(!0),c.href=location.href,a=f.utils.parseQueryString(c.search.substr(1)),delete a.changeset_uuid,a["return"]=f.settings.url["return"],c.search=b.param(a),location.replace(c.href)},d=function(a,b){var c=a||"unknown_error";f.state("processing").set(f.state("processing").get()-1),f.state("trashing").set(!1),f.notifications.remove("changeset_trashing"),f.notifications.add(new f.Notification(c,{message:b||f.l10n.unknownError,dismissible:!0,type:"error"}))},a.done(function(a){c(a.message)}),a.fail(function(a){var b=a.code||"trashing_failed";a.success||"non_existent_changeset"===b||"changeset_already_trashed"===b?c(a.message):d(b,a.message)})},getFrontendPreviewUrl:function(){var a,c,d=this;return c=document.createElement("a"),c.href=d.previewUrl.get(),a=f.utils.parseQueryString(c.search.substr(1)),f.state("changesetStatus").get()&&"publish"!==f.state("changesetStatus").get()&&(a.customize_changeset_uuid=f.settings.changeset.uuid),f.state("activated").get()||(a.customize_theme=f.settings.theme.stylesheet),c.search=b.param(a),c.href}}),b.ajaxPrefilter(function(a){/wp_customize=on/.test(a.data)&&(a.data+="&"+b.param({customize_preview_nonce:f.settings.nonce.preview}))}),f.previewer.bind("nonce",function(a){b.extend(this.nonce,a)}),f.bind("nonce-refresh",function(a){b.extend(f.settings.nonce,a),b.extend(f.previewer.nonce,a),f.previewer.send("nonce-refresh",a)}),b.each(f.settings.settings,function(a,b){var c=f.settingConstructor[b.type]||f.Setting;f.add(new c(a,b.value,{transport:b.transport,previewer:f.previewer,dirty:!!b.dirty}))}),b.each(f.settings.panels,function(a,b){var c,d=f.panelConstructor[b.type]||f.Panel;c=_.extend({params:b},b),f.panel.add(new d(a,c))}),b.each(f.settings.sections,function(a,b){var c,d=f.sectionConstructor[b.type]||f.Section;c=_.extend({params:b},b),f.section.add(new d(a,c))}),b.each(f.settings.controls,function(a,b){var c,d=f.controlConstructor[b.type]||f.Control;c=_.extend({params:b},b),f.control.add(new d(a,c))}),_.each(["panel","section","control"],function(a){var b=f.settings.autofocus[a];b&&f[a](b,function(a){a.deferred.embedded.done(function(){f.previewer.deferred.active.done(function(){a.focus()})})})}),f.bind("ready",f.reflowPaneContents),b([f.panel,f.section,f.control]).each(function(a,b){var c=_.debounce(f.reflowPaneContents,f.settings.timeouts.reflowPaneContents);b.bind("add",c),b.bind("change",c),b.bind("remove",c)}),f.bind("ready",function(){var a,c,d;f.notifications.container=b("#customize-notifications-area"),f.notifications.bind("change",_.debounce(function(){f.notifications.render()})),a=b(".wp-full-overlay-sidebar-content"),f.notifications.bind("rendered",function(){a.css("top",""),0!==f.notifications.count()&&(c=f.notifications.container.outerHeight()+1,d=parseInt(a.css("top"),10),a.css("top",d+c+"px")),f.notifications.trigger("sidebarTopUpdated")}),f.notifications.render()}),function(a){var c,e,g=a.instance("saved"),j=a.instance("saving"),k=a.instance("trashing"),l=a.instance("activated"),m=a.instance("processing"),n=a.instance("paneVisible"),o=a.instance("expandedPanel"),p=a.instance("expandedSection"),q=a.instance("changesetStatus"),r=a.instance("selectedChangesetStatus"),s=a.instance("changesetDate"),t=a.instance("selectedChangesetDate"),u=a.instance("previewerAlive"),v=a.instance("editShortcutVisibility"),w=a.instance("changesetLocked");a.bind("change",function(){var a;l()?""===q.get()&&g()?(f.settings.changeset.currentUserCanPublish?i.val(f.l10n.published):i.val(f.l10n.saved),h.find(".screen-reader-text").text(f.l10n.close)):("draft"===r()?g()&&r()===q()?i.val(f.l10n.draftSaved):i.val(f.l10n.saveDraft):"future"===r()?g()&&r()===q()?s.get()!==t.get()?i.val(f.l10n.schedule):i.val(f.l10n.scheduled):i.val(f.l10n.schedule):f.settings.changeset.currentUserCanPublish&&i.val(f.l10n.publish),h.find(".screen-reader-text").text(f.l10n.cancel)):(i.val(f.l10n.activate),h.find(".screen-reader-text").text(f.l10n.cancel)),a=!j()&&!k()&&!w()&&(!l()||!g()||q()!==r()&&""!==q()||"future"===r()&&s.get()!==t.get()),i.prop("disabled",!a)}),r.validate=function(a){return""===a||"auto-draft"===a?null:a},e=f.settings.changeset.currentUserCanPublish?"publish":"draft",q(f.settings.changeset.status),w(Boolean(f.settings.changeset.lockUser)),s(f.settings.changeset.publishDate),t(f.settings.changeset.publishDate),r(""===f.settings.changeset.status||"auto-draft"===f.settings.changeset.status?e:f.settings.changeset.status),r.link(q),g(!0),""===q()&&f.each(function(a){a._dirty&&g(!1)}),j(!1),l(f.settings.theme.active),m(0),n(!0),o(!1),p(!1),u(!0),v("visible"),f.bind("change",function(){a("saved").get()&&a("saved").set(!1)}),f.settings.changeset.branching&&g.bind(function(a){a||c(!0)}),j.bind(function(a){d.toggleClass("saving",a)}),k.bind(function(a){d.toggleClass("trashing",a)}),f.bind("saved",function(b){a("saved").set(!0),"publish"===b.changeset_status&&a("activated").set(!0)}),l.bind(function(a){a&&f.trigger("activated")}),c=function(a){var c,d;if(history.replaceState){if(c=document.createElement("a"),c.href=location.href,d=f.utils.parseQueryString(c.search.substr(1)),a){if(d.changeset_uuid===f.settings.changeset.uuid)return;d.changeset_uuid=f.settings.changeset.uuid}else{if(!d.changeset_uuid)return;delete d.changeset_uuid}c.search=b.param(d),history.replaceState({},document.title,c.href)}},f.settings.changeset.branching&&q.bind(function(a){c(""!==a&&"publish"!==a&&"trash"!==a);
-})}(f.state),function(){function a(a){a&&a.lockUser&&(f.settings.changeset.lockUser=a.lockUser),f.state("changesetLocked").set(!0),f.notifications.add(new c("changeset_locked",{lockUser:f.settings.changeset.lockUser,allowOverride:Boolean(a&&a.allowOverride)}))}var c=f.OverlayNotification.extend({templateId:"customize-changeset-locked-notification",lockUser:null,initialize:function(a,b){var c,d,e=this;c=a||"changeset_locked",d=_.extend({type:"warning",containerClasses:"",lockUser:{}},b),d.containerClasses+=" notification-changeset-locked",f.OverlayNotification.prototype.initialize.call(e,c,d)},render:function(){var a,b,c,d,e=this;return b=_.extend({allowOverride:!1,returnUrl:f.settings.url["return"],previewUrl:f.previewer.previewUrl.get(),frontendPreviewUrl:f.previewer.getFrontendPreviewUrl()},this),a=f.OverlayNotification.prototype.render.call(b),f.requestChangesetUpdate({},{autosave:!0}).fail(function(b){b.autosaved||a.find(".notice-error").prop("hidden",!1).text(b.message||f.l10n.unknownRequestFail)}),c=a.find(".customize-notice-take-over-button"),c.on("click",function(b){b.preventDefault(),d||(c.addClass("disabled"),d=wp.ajax.post("customize_override_changeset_lock",{wp_customize:"on",customize_theme:f.settings.theme.stylesheet,customize_changeset_uuid:f.settings.changeset.uuid,nonce:f.settings.nonce.override_lock}),d.done(function(){f.notifications.remove(e.code),f.state("changesetLocked").set(!1)}),d.fail(function(b){var e=b.message||f.l10n.unknownRequestFail;a.find(".notice-error").prop("hidden",!1).text(e),d.always(function(){c.removeClass("disabled")})}),d.always(function(){d=null}))}),a}});f.settings.changeset.lockUser&&a({allowOverride:!0}),b(document).on("heartbeat-send.update_lock_notice",function(a,b){b.check_changeset_lock=!0,b.changeset_uuid=f.settings.changeset.uuid}),b(document).on("heartbeat-tick.update_lock_notice",function(b,c){var d,e="changeset_locked";c.customize_changeset_lock_user&&(d=f.notifications(e),d&&d.lockUser.id!==f.settings.changeset.lockUser.id&&f.notifications.remove(e),a({lockUser:c.customize_changeset_lock_user}))}),f.bind("error",function(b){"changeset_locked"===b.code&&b.lock_user&&a({lockUser:b.lock_user})})}(),function(){function a(){var a,c;return a=document.createElement("a"),a.href=location.href,c=f.utils.parseQueryString(a.search.substr(1)),f.settings.changeset.latestAutoDraftUuid?c.changeset_uuid=f.settings.changeset.latestAutoDraftUuid:c.customize_autosaved="on",c["return"]=f.settings.url["return"],a.search=b.param(c),a.href}function c(a){var c,d=document.createElement("a"),e=0;d.href=location.href,c=f.utils.parseQueryString(d.search.substr(1)),_.each(a,function(a){"undefined"!=typeof c[a]&&(e+=1,delete c[a])}),0!==e&&(d.search=b.param(c),history.replaceState({},document.title,d.href))}function d(){h||(wp.ajax.post("customize_dismiss_autosave_or_lock",{wp_customize:"on",customize_theme:f.settings.theme.stylesheet,customize_changeset_uuid:f.settings.changeset.uuid,nonce:f.settings.nonce.dismiss_autosave_or_lock,dismiss_autosave:!0}),h=!0)}function e(){var b,c="autosave_available";f.notifications.add(new f.Notification(c,{message:f.l10n.autosaveNotice,type:"warning",dismissible:!0,render:function(){var b,c=f.Notification.prototype.render.call(this);return b=c.find("a"),b.prop("href",a()),b.on("click",function(b){b.preventDefault(),location.replace(a())}),c.find(".notice-dismiss").on("click",d),c}})),b=function(){d(),f.notifications.remove(c),f.unbind("change",b),f.state("changesetStatus").unbind(b)},f.bind("change",b),f.state("changesetStatus").bind(b)}var g=[],h=!1;f.settings.changeset.autosaved&&(f.state("saved").set(!1),g.push("customize_autosaved")),f.settings.changeset.branching||f.settings.changeset.status&&"auto-draft"!==f.settings.changeset.status||g.push("changeset_uuid"),g.length>0&&c(g),(f.settings.changeset.latestAutoDraftUuid||f.settings.changeset.hasAutosaveRevision)&&e()}(),f.previewer.previewUrl()?f.previewer.refresh():f.previewer.previewUrl(f.settings.url.home),i.click(function(a){f.previewer.save(),a.preventDefault()}).keydown(function(a){9!==a.which&&(13===a.which&&f.previewer.save(),a.preventDefault())}),h.keydown(function(a){9!==a.which&&(13===a.which&&this.click(),a.preventDefault())}),b(".collapse-sidebar").on("click",function(){f.state("paneVisible").set(!f.state("paneVisible").get())}),f.state("paneVisible").bind(function(a){e.toggleClass("preview-only",!a),e.toggleClass("expanded",a),e.toggleClass("collapsed",!a),a?b(".collapse-sidebar").attr({"aria-expanded":"true","aria-label":f.l10n.collapseSidebar}):b(".collapse-sidebar").attr({"aria-expanded":"false","aria-label":f.l10n.expandSidebar})}),d.on("keydown",function(a){var c,e=[],g=[],h=[];if(27===a.which&&(b(a.target).is("body")||b.contains(b("#customize-controls")[0],a.target))&&(f.control.each(function(a){a.expanded&&a.expanded()&&_.isFunction(a.collapse)&&e.push(a)}),f.section.each(function(a){a.expanded()&&g.push(a)}),f.panel.each(function(a){a.expanded()&&h.push(a)}),e.length>0&&0===g.length&&(e.length=0),c=e[0]||g[0]||h[0])){if("themes"===c.params.type)return void(d.hasClass("modal-open")?c.closeDetails():f.panel.has("themes")&&f.panel("themes").collapse());c.collapse(),a.preventDefault()}}),b(".customize-controls-preview-toggle").on("click",function(){f.state("paneVisible").set(!f.state("paneVisible").get())}),function(){var a,c,d,e,g,h,i,j=b(".wp-full-overlay-sidebar-content");a=function(a){var b,g=a,i=f.state("expandedSection").get(),j=f.state("expandedPanel").get();if(h&&h.element&&(d(h.element),h.element.find(".description").off("toggled",c)),!g)if(!i&&j&&j.contentContainer)g=j;else{if(j||!i||!i.contentContainer)return void(h=!1);g=i}b=g.contentContainer.find(".customize-section-title, .panel-meta").first(),b.length?(h={instance:g,element:b,parent:b.closest(".customize-pane-child"),height:b.outerHeight()},h.element.find(".description").on("toggled",c),i&&e(h.element,h.parent)):h=!1},f.state("expandedSection").bind(a),f.state("expandedPanel").bind(a),j.on("scroll",_.throttle(function(){if(h){var a,b=j.scrollTop();a=i?b===i?0:b>i?1:-1:1,i=b,0!==a&&g(h,b,a)}},8)),f.notifications.bind("sidebarTopUpdated",function(){h&&h.element.hasClass("is-sticky")&&h.element.css("top",j.css("top"))}),d=function(a){a.hasClass("is-sticky")&&a.removeClass("is-sticky").addClass("maybe-sticky is-in-view").css("top",j.scrollTop()+"px")},e=function(a,b){a.hasClass("is-in-view")&&(a.removeClass("maybe-sticky is-in-view").css({width:"",top:""}),b.css("padding-top",""))},c=function(){h.height=h.element.outerHeight()},g=function(a,b,c){var d=a.element,e=a.parent,f=a.height,g=parseInt(d.css("top"),10),h=d.hasClass("maybe-sticky"),i=d.hasClass("is-sticky"),k=d.hasClass("is-in-view"),l=-1===c;if(!l)return i&&(g=b,d.removeClass("is-sticky").css({top:g+"px",width:""})),void(k&&b>g+f&&(d.removeClass("is-in-view"),e.css("padding-top","")));if(!h&&b>=f)h=!0,d.addClass("maybe-sticky");else if(0===b)return d.removeClass("maybe-sticky is-in-view is-sticky").css({top:"",width:""}),void e.css("padding-top","");k&&!i?g>=b&&d.addClass("is-sticky").css({top:j.css("top"),width:e.outerWidth()+"px"}):h&&!k&&(d.addClass("is-in-view").css("top",b-f+"px"),e.css("padding-top",f+"px"))}}(),f.previewedDevice=f.state("previewedDevice"),f.bind("ready",function(){_.find(f.settings.previewableDevices,function(a,b){if(!0===a["default"])return f.previewedDevice.set(b),!0})}),l.find(".devices button").on("click",function(a){f.previewedDevice.set(b(a.currentTarget).data("device"))}),f.previewedDevice.bind(function(a){var c=b(".wp-full-overlay"),d="";l.find(".devices button").removeClass("active").attr("aria-pressed",!1),l.find(".devices .preview-"+a).addClass("active").attr("aria-pressed",!0),b.each(f.settings.previewableDevices,function(a){d+=" preview-"+a}),c.removeClass(d).addClass("preview-"+a)}),g.length&&f("blogname",function(a){var c=function(){g.text(b.trim(a())||f.l10n.untitledBlogName)};a.bind(c),c()}),c=new f.Messenger({url:f.settings.url.parent,channel:"loader"}),function(){function a(){var a;return f.state("activated").get()?(a=f.state("changesetStatus").get(),""!==a&&"auto-draft"!==a||(a="publish"),f.state("selectedChangesetStatus").get()===a&&(("future"!==f.state("selectedChangesetStatus").get()||f.state("selectedChangesetDate").get()===f.state("changesetDate").get())&&(f.state("saved").get()&&"auto-draft"!==f.state("changesetStatus").get()))):0===f._latestRevision}function d(){f.unbind("change",d),f.state("selectedChangesetStatus").unbind(d),f.state("selectedChangesetDate").unbind(d),b(window).on("beforeunload.customize-confirm",function(){if(!a()&&!f.state("changesetLocked").get())return setTimeout(function(){e.removeClass("customize-loading")},1),f.l10n.saveAlert})}function g(){var c=b.Deferred(),d=!1,e=!1;return a()?e=!0:confirm(f.l10n.saveAlert)?(e=!0,f.each(function(a){a._dirty=!1}),b(document).off("visibilitychange.wp-customize-changeset-update"),b(window).off("beforeunload.wp-customize-changeset-update"),h.css("cursor","progress"),""!==f.state("changesetStatus").get()&&(d=!0)):c.reject(),(e||d)&&wp.ajax.send("customize_dismiss_autosave_or_lock",{timeout:500,data:{wp_customize:"on",customize_theme:f.settings.theme.stylesheet,customize_changeset_uuid:f.settings.changeset.uuid,nonce:f.settings.nonce.dismiss_autosave_or_lock,dismiss_autosave:d,dismiss_lock:e}}).always(function(){c.resolve()}),c.promise()}var i=!1;c.bind("back",function(){i=!0}),f.bind("change",d),f.state("selectedChangesetStatus").bind(d),f.state("selectedChangesetDate").bind(d),c.bind("confirm-close",function(){g().done(function(){c.send("confirmed-close",!0)}).fail(function(){c.send("confirmed-close",!1)})}),h.on("click.customize-controls-close",function(a){a.preventDefault(),i?c.send("close"):g().done(function(){b(window).off("beforeunload.customize-confirm"),window.location.href=h.prop("href")})})}(),b.each(["saved","change"],function(a,b){f.bind(b,function(){c.send(b)})}),f.bind("title",function(a){c.send("title",a)}),f.settings.changeset.branching&&c.send("changeset-uuid",f.settings.changeset.uuid),c.send("ready"),b.each({background_image:{controls:["background_preset","background_position","background_size","background_repeat","background_attachment"],callback:function(a){return!!a}},show_on_front:{controls:["page_on_front","page_for_posts"],callback:function(a){return"page"===a}},header_textcolor:{controls:["header_textcolor"],callback:function(a){return"blank"!==a}}},function(a,c){f(a,function(a){b.each(c.controls,function(b,d){f.control(d,function(b){var d=function(a){b.container.toggle(c.callback(a))};d(a.get()),a.bind(d)})})})}),f.control("background_preset",function(a){var b,c,d,e,g,h;b={"default":[!1,!1,!1,!1],fill:[!0,!1,!1,!1],fit:[!0,!1,!0,!1],repeat:[!0,!1,!1,!0],custom:[!0,!0,!0,!0]},c=[_wpCustomizeBackground.defaults["default-position-x"],_wpCustomizeBackground.defaults["default-position-y"],_wpCustomizeBackground.defaults["default-size"],_wpCustomizeBackground.defaults["default-repeat"],_wpCustomizeBackground.defaults["default-attachment"]],d={"default":c,fill:["left","top","cover","no-repeat","fixed"],fit:["left","top","contain","no-repeat","fixed"],repeat:["left","top","auto","repeat","scroll"]},e=function(a){_.each(["background_position","background_size","background_repeat","background_attachment"],function(c,d){var e=f.control(c);e&&e.container.toggle(b[a][d])})},g=function(a){_.each(["background_position_x","background_position_y","background_size","background_repeat","background_attachment"],function(b,c){var e=f(b);e&&e.set(d[a][c])})},h=a.setting.get(),e(h),a.setting.bind("change",function(a){e(a),"custom"!==a&&g(a)})}),f.control("background_repeat",function(a){a.elements[0].unsync(f("background_repeat")),a.element=new f.Element(a.container.find("input")),a.element.set("no-repeat"!==a.setting()),a.element.bind(function(b){a.setting.set(b?"repeat":"no-repeat")}),a.setting.bind(function(b){a.element.set("no-repeat"!==b)})}),f.control("background_attachment",function(a){a.elements[0].unsync(f("background_attachment")),a.element=new f.Element(a.container.find("input")),a.element.set("fixed"!==a.setting()),a.element.bind(function(b){a.setting.set(b?"scroll":"fixed")}),a.setting.bind(function(b){a.element.set("fixed"!==b)})}),f.control("display_header_text",function(a){var b="";a.elements[0].unsync(f("header_textcolor")),a.element=new f.Element(a.container.find("input")),a.element.set("blank"!==a.setting()),a.element.bind(function(c){c||(b=f("header_textcolor").get()),a.setting.set(c?b:"blank")}),a.setting.bind(function(b){a.element.set("blank"!==b)})}),f("show_on_front","page_on_front","page_for_posts",function(a,b,c){var d=function(){var d,e,g=this,h="show_on_front_page_collision";d=parseInt(b(),10),e=parseInt(c(),10),"page"===a()&&(g===b&&d>0&&f.previewer.previewUrl.set(f.settings.url.home),g===c&&e>0&&f.previewer.previewUrl.set(f.settings.url.home+"?page_id="+e)),"page"===a()&&d&&e&&d===e?a.notifications.add(new f.Notification(h,{type:"error",message:f.l10n.pageOnFrontError})):a.notifications.remove(h)};a.bind(d),b.bind(d),c.bind(d),d.call(a,a()),f.control("show_on_front",function(a){a.deferred.embedded.done(function(){a.container.append(a.getNotificationsContainerElement())})})}),function(){var a=b.Deferred();f.section("custom_css",function(b){b.deferred.embedded.done(function(){b.expanded()?a.resolve(b):b.expanded.bind(function(c){c&&a.resolve(b)})})}),a.done(function(a){var b=f.control("custom_css");b.container.find(".customize-control-title:first").addClass("screen-reader-text"),a.container.find(".section-description-buttons .section-description-close").on("click",function(){a.container.find(".section-meta .customize-section-description:first").removeClass("open").slideUp(),a.container.find(".customize-help-toggle").attr("aria-expanded","false").focus()}),b&&!b.setting.get()&&(a.container.find(".section-meta .customize-section-description:first").addClass("open").show().trigger("toggled"),a.container.find(".customize-help-toggle").attr("aria-expanded","true"))})}(),f.control("header_video",function(a){a.deferred.embedded.done(function(){var b=function(){var b=f.section(a.section()),c="video_header_not_available";b&&(a.active.get()?b.notifications.remove(c):b.notifications.add(new f.Notification(c,{type:"info",message:f.l10n.videoHeaderNotice})))};b(),a.active.bind(b)})}),f.previewer.bind("selective-refresh-setting-validities",function(a){f._handleSettingValidities({settingValidities:a,focusInvalidControl:!1})}),f.previewer.bind("focus-control-for-setting",function(a){var b=[];f.control.each(function(c){var d=_.pluck(c.settings,"id");-1!==_.indexOf(d,a)&&b.push(c)}),b.length&&(b.sort(function(a,b){return a.priority()-b.priority()}),b[0].focus())}),f.previewer.bind("refresh",function(){f.previewer.refresh()}),f.state("paneVisible").bind(function(a){var c;c=window.matchMedia?window.matchMedia("screen and ( max-width: 640px )").matches:b(window).width()<=640,f.state("editShortcutVisibility").set(a||c?"visible":"hidden")}),window.matchMedia&&window.matchMedia("screen and ( max-width: 640px )").addListener(function(){var a=f.state("paneVisible");a.callbacks.fireWith(a,[a.get(),a.get()])}),f.previewer.bind("edit-shortcut-visibility",function(a){f.state("editShortcutVisibility").set(a)}),f.state("editShortcutVisibility").bind(function(a){f.previewer.send("edit-shortcut-visibility",a)}),f.bind("change",a),b(document).one("wp-before-tinymce-init",function(){(!window.tinymce.ui.FloatPanel.zIndex||window.tinymce.ui.FloatPanel.zIndex<500001)&&(window.tinymce.ui.FloatPanel.zIndex=500001)}),d.addClass("ready"),f.trigger("ready")}})}(wp,jQuery);
\ No newline at end of file
+})}(f.state),function(){function a(a){a&&a.lockUser&&(f.settings.changeset.lockUser=a.lockUser),f.state("changesetLocked").set(!0),f.notifications.add(new c("changeset_locked",{lockUser:f.settings.changeset.lockUser,allowOverride:Boolean(a&&a.allowOverride)}))}var c=f.OverlayNotification.extend({templateId:"customize-changeset-locked-notification",lockUser:null,initialize:function(a,b){var c,d,e=this;c=a||"changeset_locked",d=_.extend({type:"warning",containerClasses:"",lockUser:{}},b),d.containerClasses+=" notification-changeset-locked",f.OverlayNotification.prototype.initialize.call(e,c,d)},render:function(){var a,b,c,d,e=this;return b=_.extend({allowOverride:!1,returnUrl:f.settings.url["return"],previewUrl:f.previewer.previewUrl.get(),frontendPreviewUrl:f.previewer.getFrontendPreviewUrl()},this),a=f.OverlayNotification.prototype.render.call(b),f.requestChangesetUpdate({},{autosave:!0}).fail(function(b){b.autosaved||a.find(".notice-error").prop("hidden",!1).text(b.message||f.l10n.unknownRequestFail)}),c=a.find(".customize-notice-take-over-button"),c.on("click",function(b){b.preventDefault(),d||(c.addClass("disabled"),d=wp.ajax.post("customize_override_changeset_lock",{wp_customize:"on",customize_theme:f.settings.theme.stylesheet,customize_changeset_uuid:f.settings.changeset.uuid,nonce:f.settings.nonce.override_lock}),d.done(function(){f.notifications.remove(e.code),f.state("changesetLocked").set(!1)}),d.fail(function(b){var e=b.message||f.l10n.unknownRequestFail;a.find(".notice-error").prop("hidden",!1).text(e),d.always(function(){c.removeClass("disabled")})}),d.always(function(){d=null}))}),a}});f.settings.changeset.lockUser&&a({allowOverride:!0}),b(document).on("heartbeat-send.update_lock_notice",function(a,b){b.check_changeset_lock=!0,b.changeset_uuid=f.settings.changeset.uuid}),b(document).on("heartbeat-tick.update_lock_notice",function(b,c){var d,e="changeset_locked";c.customize_changeset_lock_user&&(d=f.notifications(e),d&&d.lockUser.id!==f.settings.changeset.lockUser.id&&f.notifications.remove(e),a({lockUser:c.customize_changeset_lock_user}))}),f.bind("error",function(b){"changeset_locked"===b.code&&b.lock_user&&a({lockUser:b.lock_user})})}(),function(){function a(){var a,c;return a=document.createElement("a"),a.href=location.href,c=f.utils.parseQueryString(a.search.substr(1)),f.settings.changeset.latestAutoDraftUuid?c.changeset_uuid=f.settings.changeset.latestAutoDraftUuid:c.customize_autosaved="on",c["return"]=f.settings.url["return"],a.search=b.param(c),a.href}function c(a){var c,d=document.createElement("a"),e=0;d.href=location.href,c=f.utils.parseQueryString(d.search.substr(1)),_.each(a,function(a){"undefined"!=typeof c[a]&&(e+=1,delete c[a])}),0!==e&&(d.search=b.param(c),history.replaceState({},document.title,d.href))}function d(){h||(wp.ajax.post("customize_dismiss_autosave_or_lock",{wp_customize:"on",customize_theme:f.settings.theme.stylesheet,customize_changeset_uuid:f.settings.changeset.uuid,nonce:f.settings.nonce.dismiss_autosave_or_lock,dismiss_autosave:!0}),h=!0)}function e(){var b,c="autosave_available";f.notifications.add(new f.Notification(c,{message:f.l10n.autosaveNotice,type:"warning",dismissible:!0,render:function(){var b,c=f.Notification.prototype.render.call(this);return b=c.find("a"),b.prop("href",a()),b.on("click",function(b){b.preventDefault(),location.replace(a())}),c.find(".notice-dismiss").on("click",d),c}})),b=function(){d(),f.notifications.remove(c),f.unbind("change",b),f.state("changesetStatus").unbind(b)},f.bind("change",b),f.state("changesetStatus").bind(b)}var g=[],h=!1;f.settings.changeset.autosaved&&(f.state("saved").set(!1),g.push("customize_autosaved")),f.settings.changeset.branching||f.settings.changeset.status&&"auto-draft"!==f.settings.changeset.status||g.push("changeset_uuid"),g.length>0&&c(g),(f.settings.changeset.latestAutoDraftUuid||f.settings.changeset.hasAutosaveRevision)&&e()}(),f.previewer.previewUrl()?f.previewer.refresh():f.previewer.previewUrl(f.settings.url.home),i.click(function(a){f.previewer.save(),a.preventDefault()}).keydown(function(a){9!==a.which&&(13===a.which&&f.previewer.save(),a.preventDefault())}),h.keydown(function(a){9!==a.which&&(13===a.which&&this.click(),a.preventDefault())}),b(".collapse-sidebar").on("click",function(){f.state("paneVisible").set(!f.state("paneVisible").get())}),f.state("paneVisible").bind(function(a){e.toggleClass("preview-only",!a),e.toggleClass("expanded",a),e.toggleClass("collapsed",!a),a?b(".collapse-sidebar").attr({"aria-expanded":"true","aria-label":f.l10n.collapseSidebar}):b(".collapse-sidebar").attr({"aria-expanded":"false","aria-label":f.l10n.expandSidebar})}),d.on("keydown",function(a){var c,e=[],g=[],h=[];if(27===a.which&&(b(a.target).is("body")||b.contains(b("#customize-controls")[0],a.target))&&(f.control.each(function(a){a.expanded&&a.expanded()&&_.isFunction(a.collapse)&&e.push(a)}),f.section.each(function(a){a.expanded()&&g.push(a)}),f.panel.each(function(a){a.expanded()&&h.push(a)}),e.length>0&&0===g.length&&(e.length=0),c=e[0]||g[0]||h[0])){if("themes"===c.params.type)return void(d.hasClass("modal-open")?c.closeDetails():f.panel.has("themes")&&f.panel("themes").collapse());c.collapse(),a.preventDefault()}}),b(".customize-controls-preview-toggle").on("click",function(){f.state("paneVisible").set(!f.state("paneVisible").get())}),function(){var a,c,d,e,g,h,i,j=b(".wp-full-overlay-sidebar-content");a=function(a){var b,g=a,i=f.state("expandedSection").get(),j=f.state("expandedPanel").get();if(h&&h.element&&(d(h.element),h.element.find(".description").off("toggled",c)),!g)if(!i&&j&&j.contentContainer)g=j;else{if(j||!i||!i.contentContainer)return void(h=!1);g=i}b=g.contentContainer.find(".customize-section-title, .panel-meta").first(),b.length?(h={instance:g,element:b,parent:b.closest(".customize-pane-child"),height:b.outerHeight()},h.element.find(".description").on("toggled",c),i&&e(h.element,h.parent)):h=!1},f.state("expandedSection").bind(a),f.state("expandedPanel").bind(a),j.on("scroll",_.throttle(function(){if(h){var a,b=j.scrollTop();a=i?b===i?0:b>i?1:-1:1,i=b,0!==a&&g(h,b,a)}},8)),f.notifications.bind("sidebarTopUpdated",function(){h&&h.element.hasClass("is-sticky")&&h.element.css("top",j.css("top"))}),d=function(a){a.hasClass("is-sticky")&&a.removeClass("is-sticky").addClass("maybe-sticky is-in-view").css("top",j.scrollTop()+"px")},e=function(a,b){a.hasClass("is-in-view")&&(a.removeClass("maybe-sticky is-in-view").css({width:"",top:""}),b.css("padding-top",""))},c=function(){h.height=h.element.outerHeight()},g=function(a,b,c){var d=a.element,e=a.parent,f=a.height,g=parseInt(d.css("top"),10),h=d.hasClass("maybe-sticky"),i=d.hasClass("is-sticky"),k=d.hasClass("is-in-view"),l=-1===c;if(!l)return i&&(g=b,d.removeClass("is-sticky").css({top:g+"px",width:""})),void(k&&b>g+f&&(d.removeClass("is-in-view"),e.css("padding-top","")));if(!h&&b>=f)h=!0,d.addClass("maybe-sticky");else if(0===b)return d.removeClass("maybe-sticky is-in-view is-sticky").css({top:"",width:""}),void e.css("padding-top","");k&&!i?g>=b&&d.addClass("is-sticky").css({top:j.css("top"),width:e.outerWidth()+"px"}):h&&!k&&(d.addClass("is-in-view").css("top",b-f+"px"),e.css("padding-top",f+"px"))}}(),f.previewedDevice=f.state("previewedDevice"),f.bind("ready",function(){_.find(f.settings.previewableDevices,function(a,b){if(!0===a["default"])return f.previewedDevice.set(b),!0})}),l.find(".devices button").on("click",function(a){f.previewedDevice.set(b(a.currentTarget).data("device"))}),f.previewedDevice.bind(function(a){var c=b(".wp-full-overlay"),d="";l.find(".devices button").removeClass("active").attr("aria-pressed",!1),l.find(".devices .preview-"+a).addClass("active").attr("aria-pressed",!0),b.each(f.settings.previewableDevices,function(a){d+=" preview-"+a}),c.removeClass(d).addClass("preview-"+a)}),g.length&&f("blogname",function(a){var c=function(){g.text(b.trim(a())||f.l10n.untitledBlogName)};a.bind(c),c()}),c=new f.Messenger({url:f.settings.url.parent,channel:"loader"}),function(){function a(){var a;return f.state("activated").get()?(a=f.state("changesetStatus").get(),""!==a&&"auto-draft"!==a||(a="publish"),f.state("selectedChangesetStatus").get()===a&&(("future"!==f.state("selectedChangesetStatus").get()||f.state("selectedChangesetDate").get()===f.state("changesetDate").get())&&(f.state("saved").get()&&"auto-draft"!==f.state("changesetStatus").get()))):0===f._latestRevision}function d(){f.unbind("change",d),f.state("selectedChangesetStatus").unbind(d),f.state("selectedChangesetDate").unbind(d),b(window).on("beforeunload.customize-confirm",function(){if(!a()&&!f.state("changesetLocked").get())return setTimeout(function(){e.removeClass("customize-loading")},1),f.l10n.saveAlert})}function g(){var c=b.Deferred(),d=!1,e=!1;return a()?e=!0:confirm(f.l10n.saveAlert)?(e=!0,f.each(function(a){a._dirty=!1}),b(document).off("visibilitychange.wp-customize-changeset-update"),b(window).off("beforeunload.wp-customize-changeset-update"),h.css("cursor","progress"),""!==f.state("changesetStatus").get()&&(d=!0)):c.reject(),(e||d)&&wp.ajax.send("customize_dismiss_autosave_or_lock",{timeout:500,data:{wp_customize:"on",customize_theme:f.settings.theme.stylesheet,customize_changeset_uuid:f.settings.changeset.uuid,nonce:f.settings.nonce.dismiss_autosave_or_lock,dismiss_autosave:d,dismiss_lock:e}}).always(function(){c.resolve()}),c.promise()}var i=!1;c.bind("back",function(){i=!0}),f.bind("change",d),f.state("selectedChangesetStatus").bind(d),f.state("selectedChangesetDate").bind(d),c.bind("confirm-close",function(){g().done(function(){c.send("confirmed-close",!0)}).fail(function(){c.send("confirmed-close",!1)})}),h.on("click.customize-controls-close",function(a){a.preventDefault(),i?c.send("close"):g().done(function(){b(window).off("beforeunload.customize-confirm"),window.location.href=h.prop("href")})})}(),b.each(["saved","change"],function(a,b){f.bind(b,function(){c.send(b)})}),f.bind("title",function(a){c.send("title",a)}),f.settings.changeset.branching&&c.send("changeset-uuid",f.settings.changeset.uuid),c.send("ready"),b.each({background_image:{controls:["background_preset","background_position","background_size","background_repeat","background_attachment"],callback:function(a){return!!a}},show_on_front:{controls:["page_on_front","page_for_posts"],callback:function(a){return"page"===a}},header_textcolor:{controls:["header_textcolor"],callback:function(a){return"blank"!==a}}},function(a,c){f(a,function(a){b.each(c.controls,function(b,d){f.control(d,function(b){var d=function(a){b.container.toggle(c.callback(a))};d(a.get()),a.bind(d)})})})}),f.control("background_preset",function(a){var b,c,d,e,g,h;b={"default":[!1,!1,!1,!1],fill:[!0,!1,!1,!1],fit:[!0,!1,!0,!1],repeat:[!0,!1,!1,!0],custom:[!0,!0,!0,!0]},c=[_wpCustomizeBackground.defaults["default-position-x"],_wpCustomizeBackground.defaults["default-position-y"],_wpCustomizeBackground.defaults["default-size"],_wpCustomizeBackground.defaults["default-repeat"],_wpCustomizeBackground.defaults["default-attachment"]],d={"default":c,fill:["left","top","cover","no-repeat","fixed"],fit:["left","top","contain","no-repeat","fixed"],repeat:["left","top","auto","repeat","scroll"]},e=function(a){_.each(["background_position","background_size","background_repeat","background_attachment"],function(c,d){var e=f.control(c);e&&e.container.toggle(b[a][d])})},g=function(a){_.each(["background_position_x","background_position_y","background_size","background_repeat","background_attachment"],function(b,c){var e=f(b);e&&e.set(d[a][c])})},h=a.setting.get(),e(h),a.setting.bind("change",function(a){e(a),"custom"!==a&&g(a)})}),f.control("background_repeat",function(a){a.elements[0].unsync(f("background_repeat")),a.element=new f.Element(a.container.find("input")),a.element.set("no-repeat"!==a.setting()),a.element.bind(function(b){a.setting.set(b?"repeat":"no-repeat")}),a.setting.bind(function(b){a.element.set("no-repeat"!==b)})}),f.control("background_attachment",function(a){a.elements[0].unsync(f("background_attachment")),a.element=new f.Element(a.container.find("input")),a.element.set("fixed"!==a.setting()),a.element.bind(function(b){a.setting.set(b?"scroll":"fixed")}),a.setting.bind(function(b){a.element.set("fixed"!==b)})}),f.control("display_header_text",function(a){var b="";a.elements[0].unsync(f("header_textcolor")),a.element=new f.Element(a.container.find("input")),a.element.set("blank"!==a.setting()),a.element.bind(function(c){c||(b=f("header_textcolor").get()),a.setting.set(c?b:"blank")}),a.setting.bind(function(b){a.element.set("blank"!==b)})}),f("show_on_front","page_on_front","page_for_posts",function(a,b,c){var d=function(){var d,e,g=this,h="show_on_front_page_collision";d=parseInt(b(),10),e=parseInt(c(),10),"page"===a()&&(g===b&&d>0&&f.previewer.previewUrl.set(f.settings.url.home),g===c&&e>0&&f.previewer.previewUrl.set(f.settings.url.home+"?page_id="+e)),"page"===a()&&d&&e&&d===e?a.notifications.add(new f.Notification(h,{type:"error",message:f.l10n.pageOnFrontError})):a.notifications.remove(h)};a.bind(d),b.bind(d),c.bind(d),d.call(a,a()),f.control("show_on_front",function(a){a.deferred.embedded.done(function(){a.container.append(a.getNotificationsContainerElement())})})}),function(){var a=b.Deferred();f.section("custom_css",function(b){b.deferred.embedded.done(function(){b.expanded()?a.resolve(b):b.expanded.bind(function(c){c&&a.resolve(b)})})}),a.done(function(a){var b=f.control("custom_css");b.container.find(".customize-control-title:first").addClass("screen-reader-text"),a.container.find(".section-description-buttons .section-description-close").on("click",function(){a.container.find(".section-meta .customize-section-description:first").removeClass("open").slideUp(),a.container.find(".customize-help-toggle").attr("aria-expanded","false").focus()}),b&&!b.setting.get()&&(a.container.find(".section-meta .customize-section-description:first").addClass("open").show().trigger("toggled"),a.container.find(".customize-help-toggle").attr("aria-expanded","true"))})}(),f.control("header_video",function(a){a.deferred.embedded.done(function(){var b=function(){var b=f.section(a.section()),c="video_header_not_available";b&&(a.active.get()?b.notifications.remove(c):b.notifications.add(new f.Notification(c,{type:"info",message:f.l10n.videoHeaderNotice})))};b(),a.active.bind(b)})}),f.previewer.bind("selective-refresh-setting-validities",function(a){f._handleSettingValidities({settingValidities:a,focusInvalidControl:!1})}),f.previewer.bind("focus-control-for-setting",function(a){var b=[];f.control.each(function(c){var d=_.pluck(c.settings,"id");-1!==_.indexOf(d,a)&&b.push(c)}),b.length&&(b.sort(function(a,b){return a.priority()-b.priority()}),b[0].focus())}),f.previewer.bind("refresh",function(){f.previewer.refresh()}),f.state("paneVisible").bind(function(a){var c;c=window.matchMedia?window.matchMedia("screen and ( max-width: 640px )").matches:b(window).width()<=640,f.state("editShortcutVisibility").set(a||c?"visible":"hidden")}),window.matchMedia&&window.matchMedia("screen and ( max-width: 640px )").addListener(function(){var a=f.state("paneVisible");a.callbacks.fireWith(a,[a.get(),a.get()])}),f.previewer.bind("edit-shortcut-visibility",function(a){f.state("editShortcutVisibility").set(a)}),f.state("editShortcutVisibility").bind(function(a){f.previewer.send("edit-shortcut-visibility",a)}),f.bind("change",a),b(document).one("tinymce-editor-setup",function(){window.tinymce.ui.FloatPanel&&(!window.tinymce.ui.FloatPanel.zIndex||window.tinymce.ui.FloatPanel.zIndex<500001)&&(window.tinymce.ui.FloatPanel.zIndex=500001)}),d.addClass("ready"),f.trigger("ready")}})}(wp,jQuery);
\ No newline at end of file
updateWelcomePanel( this.checked ? 1 : 0 );
});
+ var tryGutenbergPanel = $( '#try-gutenberg-panel' ),
+ tryGutenbergPanelHide = $('#wp_try_gutenberg_panel-hide'),
+ updateTryGutenbergPanel, installGutenbergSuccess;
+
+ updateTryGutenbergPanel = function( visible ) {
+ $.post( ajaxurl, {
+ action: 'update-try-gutenberg-panel',
+ visible: visible,
+ trygutenbergpanelnonce: $( '#trygutenbergpanelnonce' ).val()
+ });
+ };
+
+ installGutenbergSuccess = function( response ) {
+ response.activateUrl += '&from=try-gutenberg';
+ response.activateLabel = wp.updates.l10n.activatePluginLabel.replace( '%s', response.pluginName );
+ wp.updates.installPluginSuccess( response );
+ };
+
+ if ( tryGutenbergPanel.hasClass( 'hidden' ) && tryGutenbergPanelHide.prop( 'checked' ) ) {
+ tryGutenbergPanel.removeClass( 'hidden' );
+ }
+
+ $( '.try-gutenberg-panel-close, .try-gutenberg-panel-dismiss a', tryGutenbergPanel ).click( function( e ) {
+ e.preventDefault();
+ tryGutenbergPanel.addClass( 'hidden' );
+ updateTryGutenbergPanel( 0 );
+ $('#wp_try_gutenberg_panel-hide').prop( 'checked', false );
+ });
+
+ tryGutenbergPanelHide.click( function() {
+ tryGutenbergPanel.toggleClass( 'hidden', ! this.checked );
+ updateTryGutenbergPanel( this.checked ? 1 : 0 );
+ });
+
+ tryGutenbergPanel.on( 'click', '.install-now', function( e ) {
+ e.preventDefault();
+ var args = {
+ slug: $( e.target ).data( 'slug' ),
+ success: installGutenbergSuccess
+ };
+ wp.updates.installPlugin( args );
+ } );
+
// These widgets are sometimes populated via ajax
ajaxWidgets = ['dashboard_primary'];
-var ajaxWidgets,ajaxPopulateWidgets,quickPressLoad;window.wp=window.wp||{},jQuery(document).ready(function(a){function b(){if(!(document.documentMode&&document.documentMode<9)){a("body").append('<div class="quick-draft-textarea-clone" style="display: none;"></div>');var b=a(".quick-draft-textarea-clone"),c=a("#content"),d=c.height(),e=a(window).height()-100;b.css({"font-family":c.css("font-family"),"font-size":c.css("font-size"),"line-height":c.css("line-height"),"padding-bottom":c.css("paddingBottom"),"padding-left":c.css("paddingLeft"),"padding-right":c.css("paddingRight"),"padding-top":c.css("paddingTop"),"white-space":"pre-wrap","word-wrap":"break-word",display:"none"}),c.on("focus input propertychange",function(){var f=a(this),g=f.val()+" ",h=b.css("width",f.css("width")).text(g).outerHeight()+2;c.css("overflow-y","auto"),h===d||h>=e&&d>=e||(d=h>e?e:h,c.css("overflow","hidden"),f.css("height",d+"px"))})}}var c,d=a("#welcome-panel"),e=a("#wp_welcome_panel-hide");c=function(b){a.post(ajaxurl,{action:"update-welcome-panel",visible:b,welcomepanelnonce:a("#welcomepanelnonce").val()})},d.hasClass("hidden")&&e.prop("checked")&&d.removeClass("hidden"),a(".welcome-panel-close, .welcome-panel-dismiss a",d).click(function(b){b.preventDefault(),d.addClass("hidden"),c(0),a("#wp_welcome_panel-hide").prop("checked",!1)}),e.click(function(){d.toggleClass("hidden",!this.checked),c(this.checked?1:0)}),ajaxWidgets=["dashboard_primary"],ajaxPopulateWidgets=function(b){function c(b,c){var d,e=a("#"+c+" div.inside:visible").find(".widget-loading");e.length&&(d=e.parent(),setTimeout(function(){d.load(ajaxurl+"?action=dashboard-widgets&widget="+c+"&pagenow="+pagenow,"",function(){d.hide().slideDown("normal",function(){a(this).css("display","")})})},500*b))}b?(b=b.toString(),a.inArray(b,ajaxWidgets)!==-1&&c(0,b)):a.each(ajaxWidgets,c)},ajaxPopulateWidgets(),postboxes.add_postbox_toggles(pagenow,{pbshow:ajaxPopulateWidgets}),quickPressLoad=function(){var c,d=a("#quickpost-action");a('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",!1),c=a("#quick-press").submit(function(b){function d(){var b=a(".drafts ul li").first();b.css("background","#fffbe5"),setTimeout(function(){b.css("background","none")},1e3)}b.preventDefault(),a("#dashboard_quick_press #publishing-action .spinner").show(),a('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",!0),a.post(c.attr("action"),c.serializeArray(),function(b){a("#dashboard_quick_press .inside").html(b),a("#quick-press").removeClass("initial-form"),quickPressLoad(),d(),a("#title").focus()})}),a("#publish").click(function(){d.val("post-quickpress-publish")}),a("#title, #tags-input, #content").each(function(){var b=a(this),c=a("#"+this.id+"-prompt-text");""===this.value&&c.removeClass("screen-reader-text"),c.click(function(){a(this).addClass("screen-reader-text"),b.focus()}),b.blur(function(){""===this.value&&c.removeClass("screen-reader-text")}),b.focus(function(){c.addClass("screen-reader-text")})}),a("#quick-press").on("click focusin",function(){wpActiveEditor="content"}),b()},quickPressLoad(),a(".meta-box-sortables").sortable("option","containment","#wpwrap")}),jQuery(function(a){"use strict";var b,c=window.communityEventsData||{};b=window.wp.communityEvents={initialized:!1,model:null,init:function(){if(!b.initialized){var d=a("#community-events");a(".community-events-errors").attr("aria-hidden","true").removeClass("hide-if-js"),d.on("click",".community-events-toggle-location, .community-events-cancel",b.toggleLocationForm),d.on("submit",".community-events-form",function(c){var d=a.trim(a("#community-events-location").val());c.preventDefault(),d&&b.getEvents({location:d})}),c&&c.cache&&c.cache.location&&c.cache.events?b.renderEventsTemplate(c.cache,"app"):b.getEvents(),b.initialized=!0}},toggleLocationForm:function(b){var c=a(".community-events-toggle-location"),d=a(".community-events-cancel"),e=a(".community-events-form"),f=a();"object"==typeof b&&(f=a(b.target),b="true"==c.attr("aria-expanded")?"hide":"show"),"hide"===b?(c.attr("aria-expanded","false"),d.attr("aria-expanded","false"),e.attr("aria-hidden","true"),f.hasClass("community-events-cancel")&&c.focus()):(c.attr("aria-expanded","true"),d.attr("aria-expanded","true"),e.attr("aria-hidden","false"))},getEvents:function(b){var d,e=this,f=a(".community-events-form").children(".spinner");b=b||{},b._wpnonce=c.nonce,b.timezone=window.Intl?window.Intl.DateTimeFormat().resolvedOptions().timeZone:"",d=b.location?"user":"app",f.addClass("is-active"),wp.ajax.post("get-community-events",b).always(function(){f.removeClass("is-active")}).done(function(a){"no_location_available"===a.error&&(b.location?a.unknownCity=b.location:delete a.error),e.renderEventsTemplate(a,d)}).fail(function(){e.renderEventsTemplate({location:!1,error:!0},d)})},renderEventsTemplate:function(d,e){var f,g,h=/%(?:\d\$)?s/g,i=a(".community-events-toggle-location"),j=a("#community-events-location-message"),k=a(".community-events-results");g={".community-events":!0,".community-events-loading":!1,".community-events-errors":!1,".community-events-error-occurred":!1,".community-events-could-not-locate":!1,"#community-events-location-message":!1,".community-events-toggle-location":!1,".community-events-results":!1},d.location.ip?(j.text(c.l10n.attend_event_near_generic),d.events.length?(f=wp.template("community-events-event-list"),k.html(f(d))):(f=wp.template("community-events-no-upcoming-events"),k.html(f(d))),g["#community-events-location-message"]=!0,g[".community-events-toggle-location"]=!0,g[".community-events-results"]=!0):d.location.description?(f=wp.template("community-events-attend-event-near"),j.html(f(d)),d.events.length?(f=wp.template("community-events-event-list"),k.html(f(d))):(f=wp.template("community-events-no-upcoming-events"),k.html(f(d))),"user"===e&&wp.a11y.speak(c.l10n.city_updated.replace(h,d.location.description),"assertive"),g["#community-events-location-message"]=!0,g[".community-events-toggle-location"]=!0,g[".community-events-results"]=!0):d.unknownCity?(f=wp.template("community-events-could-not-locate"),a(".community-events-could-not-locate").html(f(d)),wp.a11y.speak(c.l10n.could_not_locate_city.replace(h,d.unknownCity)),g[".community-events-errors"]=!0,g[".community-events-could-not-locate"]=!0):d.error&&"user"===e?(wp.a11y.speak(c.l10n.error_occurred_please_try_again),g[".community-events-errors"]=!0,g[".community-events-error-occurred"]=!0):(j.text(c.l10n.enter_closest_city),g["#community-events-location-message"]=!0,g[".community-events-toggle-location"]=!0),_.each(g,function(b,c){a(c).attr("aria-hidden",!b)}),i.attr("aria-expanded",g[".community-events-toggle-location"]),d.location&&(d.location.ip||d.location.latitude)?(b.toggleLocationForm("hide"),"user"===e&&i.focus()):b.toggleLocationForm("show")}},a("#dashboard_primary").is(":visible")?b.init():a(document).on("postbox-toggled",function(c,d){var e=a(d);"dashboard_primary"===e.attr("id")&&e.is(":visible")&&b.init()})});
\ No newline at end of file
+var ajaxWidgets,ajaxPopulateWidgets,quickPressLoad;window.wp=window.wp||{},jQuery(document).ready(function(a){function b(){if(!(document.documentMode&&document.documentMode<9)){a("body").append('<div class="quick-draft-textarea-clone" style="display: none;"></div>');var b=a(".quick-draft-textarea-clone"),c=a("#content"),d=c.height(),e=a(window).height()-100;b.css({"font-family":c.css("font-family"),"font-size":c.css("font-size"),"line-height":c.css("line-height"),"padding-bottom":c.css("paddingBottom"),"padding-left":c.css("paddingLeft"),"padding-right":c.css("paddingRight"),"padding-top":c.css("paddingTop"),"white-space":"pre-wrap","word-wrap":"break-word",display:"none"}),c.on("focus input propertychange",function(){var f=a(this),g=f.val()+" ",h=b.css("width",f.css("width")).text(g).outerHeight()+2;c.css("overflow-y","auto"),h===d||h>=e&&d>=e||(d=h>e?e:h,c.css("overflow","hidden"),f.css("height",d+"px"))})}}var c,d=a("#welcome-panel"),e=a("#wp_welcome_panel-hide");c=function(b){a.post(ajaxurl,{action:"update-welcome-panel",visible:b,welcomepanelnonce:a("#welcomepanelnonce").val()})},d.hasClass("hidden")&&e.prop("checked")&&d.removeClass("hidden"),a(".welcome-panel-close, .welcome-panel-dismiss a",d).click(function(b){b.preventDefault(),d.addClass("hidden"),c(0),a("#wp_welcome_panel-hide").prop("checked",!1)}),e.click(function(){d.toggleClass("hidden",!this.checked),c(this.checked?1:0)});var f,g,h=a("#try-gutenberg-panel"),i=a("#wp_try_gutenberg_panel-hide");f=function(b){a.post(ajaxurl,{action:"update-try-gutenberg-panel",visible:b,trygutenbergpanelnonce:a("#trygutenbergpanelnonce").val()})},g=function(a){a.activateUrl+="&from=try-gutenberg",a.activateLabel=wp.updates.l10n.activatePluginLabel.replace("%s",a.pluginName),wp.updates.installPluginSuccess(a)},h.hasClass("hidden")&&i.prop("checked")&&h.removeClass("hidden"),a(".try-gutenberg-panel-close, .try-gutenberg-panel-dismiss a",h).click(function(b){b.preventDefault(),h.addClass("hidden"),f(0),a("#wp_try_gutenberg_panel-hide").prop("checked",!1)}),i.click(function(){h.toggleClass("hidden",!this.checked),f(this.checked?1:0)}),h.on("click",".install-now",function(b){b.preventDefault();var c={slug:a(b.target).data("slug"),success:g};wp.updates.installPlugin(c)}),ajaxWidgets=["dashboard_primary"],ajaxPopulateWidgets=function(b){function c(b,c){var d,e=a("#"+c+" div.inside:visible").find(".widget-loading");e.length&&(d=e.parent(),setTimeout(function(){d.load(ajaxurl+"?action=dashboard-widgets&widget="+c+"&pagenow="+pagenow,"",function(){d.hide().slideDown("normal",function(){a(this).css("display","")})})},500*b))}b?(b=b.toString(),a.inArray(b,ajaxWidgets)!==-1&&c(0,b)):a.each(ajaxWidgets,c)},ajaxPopulateWidgets(),postboxes.add_postbox_toggles(pagenow,{pbshow:ajaxPopulateWidgets}),quickPressLoad=function(){var c,d=a("#quickpost-action");a('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",!1),c=a("#quick-press").submit(function(b){function d(){var b=a(".drafts ul li").first();b.css("background","#fffbe5"),setTimeout(function(){b.css("background","none")},1e3)}b.preventDefault(),a("#dashboard_quick_press #publishing-action .spinner").show(),a('#quick-press .submit input[type="submit"], #quick-press .submit input[type="reset"]').prop("disabled",!0),a.post(c.attr("action"),c.serializeArray(),function(b){a("#dashboard_quick_press .inside").html(b),a("#quick-press").removeClass("initial-form"),quickPressLoad(),d(),a("#title").focus()})}),a("#publish").click(function(){d.val("post-quickpress-publish")}),a("#title, #tags-input, #content").each(function(){var b=a(this),c=a("#"+this.id+"-prompt-text");""===this.value&&c.removeClass("screen-reader-text"),c.click(function(){a(this).addClass("screen-reader-text"),b.focus()}),b.blur(function(){""===this.value&&c.removeClass("screen-reader-text")}),b.focus(function(){c.addClass("screen-reader-text")})}),a("#quick-press").on("click focusin",function(){wpActiveEditor="content"}),b()},quickPressLoad(),a(".meta-box-sortables").sortable("option","containment","#wpwrap")}),jQuery(function(a){"use strict";var b,c=window.communityEventsData||{};b=window.wp.communityEvents={initialized:!1,model:null,init:function(){if(!b.initialized){var d=a("#community-events");a(".community-events-errors").attr("aria-hidden","true").removeClass("hide-if-js"),d.on("click",".community-events-toggle-location, .community-events-cancel",b.toggleLocationForm),d.on("submit",".community-events-form",function(c){var d=a.trim(a("#community-events-location").val());c.preventDefault(),d&&b.getEvents({location:d})}),c&&c.cache&&c.cache.location&&c.cache.events?b.renderEventsTemplate(c.cache,"app"):b.getEvents(),b.initialized=!0}},toggleLocationForm:function(b){var c=a(".community-events-toggle-location"),d=a(".community-events-cancel"),e=a(".community-events-form"),f=a();"object"==typeof b&&(f=a(b.target),b="true"==c.attr("aria-expanded")?"hide":"show"),"hide"===b?(c.attr("aria-expanded","false"),d.attr("aria-expanded","false"),e.attr("aria-hidden","true"),f.hasClass("community-events-cancel")&&c.focus()):(c.attr("aria-expanded","true"),d.attr("aria-expanded","true"),e.attr("aria-hidden","false"))},getEvents:function(b){var d,e=this,f=a(".community-events-form").children(".spinner");b=b||{},b._wpnonce=c.nonce,b.timezone=window.Intl?window.Intl.DateTimeFormat().resolvedOptions().timeZone:"",d=b.location?"user":"app",f.addClass("is-active"),wp.ajax.post("get-community-events",b).always(function(){f.removeClass("is-active")}).done(function(a){"no_location_available"===a.error&&(b.location?a.unknownCity=b.location:delete a.error),e.renderEventsTemplate(a,d)}).fail(function(){e.renderEventsTemplate({location:!1,error:!0},d)})},renderEventsTemplate:function(d,e){var f,g,h=/%(?:\d\$)?s/g,i=a(".community-events-toggle-location"),j=a("#community-events-location-message"),k=a(".community-events-results");g={".community-events":!0,".community-events-loading":!1,".community-events-errors":!1,".community-events-error-occurred":!1,".community-events-could-not-locate":!1,"#community-events-location-message":!1,".community-events-toggle-location":!1,".community-events-results":!1},d.location.ip?(j.text(c.l10n.attend_event_near_generic),d.events.length?(f=wp.template("community-events-event-list"),k.html(f(d))):(f=wp.template("community-events-no-upcoming-events"),k.html(f(d))),g["#community-events-location-message"]=!0,g[".community-events-toggle-location"]=!0,g[".community-events-results"]=!0):d.location.description?(f=wp.template("community-events-attend-event-near"),j.html(f(d)),d.events.length?(f=wp.template("community-events-event-list"),k.html(f(d))):(f=wp.template("community-events-no-upcoming-events"),k.html(f(d))),"user"===e&&wp.a11y.speak(c.l10n.city_updated.replace(h,d.location.description),"assertive"),g["#community-events-location-message"]=!0,g[".community-events-toggle-location"]=!0,g[".community-events-results"]=!0):d.unknownCity?(f=wp.template("community-events-could-not-locate"),a(".community-events-could-not-locate").html(f(d)),wp.a11y.speak(c.l10n.could_not_locate_city.replace(h,d.unknownCity)),g[".community-events-errors"]=!0,g[".community-events-could-not-locate"]=!0):d.error&&"user"===e?(wp.a11y.speak(c.l10n.error_occurred_please_try_again),g[".community-events-errors"]=!0,g[".community-events-error-occurred"]=!0):(j.text(c.l10n.enter_closest_city),g["#community-events-location-message"]=!0,g[".community-events-toggle-location"]=!0),_.each(g,function(b,c){a(c).attr("aria-hidden",!b)}),i.attr("aria-expanded",g[".community-events-toggle-location"]),d.location&&(d.location.ip||d.location.latitude)?(b.toggleLocationForm("hide"),"user"===e&&i.focus()):b.toggleLocationForm("show")}},a("#dashboard_primary").is(":visible")?b.init():a(document).on("postbox-toggled",function(c,d){var e=a(d);"dashboard_primary"===e.attr("id")&&e.is(":visible")&&b.init()})});
\ No newline at end of file
update();
} );
+
} )( jQuery, new wp.utils.WordCounter() );
$message
.removeClass( 'updating-message' )
- .addClass( 'updated-message installed button-disabled' )
+ .addClass( 'updated-message installed' )
.attr( 'aria-label', wp.updates.l10n.pluginInstalledLabel.replace( '%s', response.pluginName ) )
.text( wp.updates.l10n.pluginInstalled );
+ if ( $message.hasClass( 'button-primary' ) ) {
+ $message.addClass( 'button-primary-disabled' );
+ } else {
+ $message.addClass( 'button-disabled' );
+ }
+
wp.a11y.speak( wp.updates.l10n.installedMsg, 'polite' );
$document.trigger( 'wp-plugin-install-success', response );
setTimeout( function() {
// Transform the 'Install' button into an 'Activate' button.
- $message.removeClass( 'install-now installed button-disabled updated-message' ).addClass( 'activate-now button-primary' )
+ $message.removeClass( 'install-now installed button-primary-disabled button-secondary-disabled button-disabled updated-message' )
+ .addClass( 'activate-now' )
.attr( 'href', response.activateUrl )
.attr( 'aria-label', wp.updates.l10n.activatePluginLabel.replace( '%s', response.pluginName ) )
- .text( wp.updates.l10n.activatePlugin );
+ .text( response.activateLabel || wp.updates.l10n.activatePlugin );
}, 1000 );
}
};
-!function(a,b,c){var d=a(document);b=b||{},b.updates={},b.updates.ajaxNonce=c.ajax_nonce,b.updates.l10n=c.l10n,b.updates.searchTerm="",b.updates.shouldRequestFilesystemCredentials=!1,b.updates.filesystemCredentials={ftp:{host:"",username:"",password:"",connectionType:""},ssh:{publicKey:"",privateKey:""},fsNonce:"",available:!1},b.updates.ajaxLocked=!1,b.updates.adminNotice=b.template("wp-updates-admin-notice"),b.updates.queue=[],b.updates.$elToReturnFocusToFromCredentialsModal=void 0,b.updates.addAdminNotice=function(c){var e,f=a(c.selector);delete c.selector,e=b.updates.adminNotice(c),f.length||(f=a("#"+c.id)),f.length?f.replaceWith(e):"customize"===pagenow?a(".customize-themes-notifications").append(e):a(".wrap").find("> h1").after(e),d.trigger("wp-updates-notice-added")},b.updates.ajax=function(c,d){var e={};return b.updates.ajaxLocked?(b.updates.queue.push({action:c,data:d}),a.Deferred()):(b.updates.ajaxLocked=!0,d.success&&(e.success=d.success,delete d.success),d.error&&(e.error=d.error,delete d.error),e.data=_.extend(d,{action:c,_ajax_nonce:b.updates.ajaxNonce,_fs_nonce:b.updates.filesystemCredentials.fsNonce,username:b.updates.filesystemCredentials.ftp.username,password:b.updates.filesystemCredentials.ftp.password,hostname:b.updates.filesystemCredentials.ftp.hostname,connection_type:b.updates.filesystemCredentials.ftp.connectionType,public_key:b.updates.filesystemCredentials.ssh.publicKey,private_key:b.updates.filesystemCredentials.ssh.privateKey}),b.ajax.send(e).always(b.updates.ajaxAlways))},b.updates.ajaxAlways=function(c){c.errorCode&&"unable_to_connect_to_filesystem"===c.errorCode||(b.updates.ajaxLocked=!1,b.updates.queueChecker()),"undefined"!=typeof c.debug&&window.console&&window.console.log&&_.map(c.debug,function(b){window.console.log(a("<p />").html(b).text())})},b.updates.refreshCount=function(){var b,d=a("#wp-admin-bar-updates"),e=a('a[href="update-core.php"] .update-plugins'),f=a('a[href="plugins.php"] .update-plugins'),g=a('a[href="themes.php"] .update-plugins');d.find(".ab-item").removeAttr("title"),d.find(".ab-label").text(c.totals.counts.total),0===c.totals.counts.total&&d.find(".ab-label").parents("li").remove(),e.each(function(a,b){b.className=b.className.replace(/count-\d+/,"count-"+c.totals.counts.total)}),c.totals.counts.total>0?e.find(".update-count").text(c.totals.counts.total):e.remove(),f.each(function(a,b){b.className=b.className.replace(/count-\d+/,"count-"+c.totals.counts.plugins)}),c.totals.counts.total>0?f.find(".plugin-count").text(c.totals.counts.plugins):f.remove(),g.each(function(a,b){b.className=b.className.replace(/count-\d+/,"count-"+c.totals.counts.themes)}),c.totals.counts.total>0?g.find(".theme-count").text(c.totals.counts.themes):g.remove(),"plugins"===pagenow||"plugins-network"===pagenow?b=c.totals.counts.plugins:"themes"!==pagenow&&"themes-network"!==pagenow||(b=c.totals.counts.themes),b>0?a(".subsubsub .upgrade .count").text("("+b+")"):(a(".subsubsub .upgrade").remove(),a(".subsubsub li:last").html(function(){return a(this).children()}))},b.updates.decrementCount=function(a){c.totals.counts.total=Math.max(--c.totals.counts.total,0),"plugin"===a?c.totals.counts.plugins=Math.max(--c.totals.counts.plugins,0):"theme"===a&&(c.totals.counts.themes=Math.max(--c.totals.counts.themes,0)),b.updates.refreshCount(a)},b.updates.updatePlugin=function(c){var e,f,g,h;return c=_.extend({success:b.updates.updatePluginSuccess,error:b.updates.updatePluginError},c),"plugins"===pagenow||"plugins-network"===pagenow?(e=a('tr[data-plugin="'+c.plugin+'"]'),g=e.find(".update-message").removeClass("notice-error").addClass("updating-message notice-warning").find("p"),h=b.updates.l10n.pluginUpdatingLabel.replace("%s",e.find(".plugin-title strong").text())):"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||(f=a(".plugin-card-"+c.slug),g=f.find(".update-now").addClass("updating-message"),h=b.updates.l10n.pluginUpdatingLabel.replace("%s",g.data("name")),f.removeClass("plugin-card-update-failed").find(".notice.notice-error").remove()),g.html()!==b.updates.l10n.updating&&g.data("originaltext",g.html()),g.attr("aria-label",h).text(b.updates.l10n.updating),d.trigger("wp-plugin-updating",c),b.updates.ajax("update-plugin",c)},b.updates.updatePluginSuccess=function(c){var e,f,g;"plugins"===pagenow||"plugins-network"===pagenow?(e=a('tr[data-plugin="'+c.plugin+'"]').removeClass("update").addClass("updated"),f=e.find(".update-message").removeClass("updating-message notice-warning").addClass("updated-message notice-success").find("p"),g=e.find(".plugin-version-author-uri").html().replace(c.oldVersion,c.newVersion),e.find(".plugin-version-author-uri").html(g)):"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||(f=a(".plugin-card-"+c.slug).find(".update-now").removeClass("updating-message").addClass("button-disabled updated-message")),f.attr("aria-label",b.updates.l10n.pluginUpdatedLabel.replace("%s",c.pluginName)).text(b.updates.l10n.pluginUpdated),b.a11y.speak(b.updates.l10n.updatedMsg,"polite"),b.updates.decrementCount("plugin"),d.trigger("wp-plugin-update-success",c)},b.updates.updatePluginError=function(c){var e,f,g;b.updates.isValidResponse(c,"update")&&(b.updates.maybeHandleCredentialError(c,"update-plugin")||(g=b.updates.l10n.updateFailed.replace("%s",c.errorMessage),"plugins"===pagenow||"plugins-network"===pagenow?(f=c.plugin?a('tr[data-plugin="'+c.plugin+'"]').find(".update-message"):a('tr[data-slug="'+c.slug+'"]').find(".update-message"),f.removeClass("updating-message notice-warning").addClass("notice-error").find("p").html(g),c.pluginName?f.find("p").attr("aria-label",b.updates.l10n.pluginUpdateFailedLabel.replace("%s",c.pluginName)):f.find("p").removeAttr("aria-label")):"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||(e=a(".plugin-card-"+c.slug).addClass("plugin-card-update-failed").append(b.updates.adminNotice({className:"update-message notice-error notice-alt is-dismissible",message:g})),e.find(".update-now").text(b.updates.l10n.updateFailedShort).removeClass("updating-message"),c.pluginName?e.find(".update-now").attr("aria-label",b.updates.l10n.pluginUpdateFailedLabel.replace("%s",c.pluginName)):e.find(".update-now").removeAttr("aria-label"),e.on("click",".notice.is-dismissible .notice-dismiss",function(){setTimeout(function(){e.removeClass("plugin-card-update-failed").find(".column-name a").focus(),e.find(".update-now").attr("aria-label",!1).text(b.updates.l10n.updateNow)},200)})),b.a11y.speak(g,"assertive"),d.trigger("wp-plugin-update-error",c)))},b.updates.installPlugin=function(c){var e=a(".plugin-card-"+c.slug),f=e.find(".install-now");return c=_.extend({success:b.updates.installPluginSuccess,error:b.updates.installPluginError},c),"import"===pagenow&&(f=a('[data-slug="'+c.slug+'"]')),f.html()!==b.updates.l10n.installing&&f.data("originaltext",f.html()),f.addClass("updating-message").attr("aria-label",b.updates.l10n.pluginInstallingLabel.replace("%s",f.data("name"))).text(b.updates.l10n.installing),b.a11y.speak(b.updates.l10n.installingMsg,"polite"),e.removeClass("plugin-card-install-failed").find(".notice.notice-error").remove(),d.trigger("wp-plugin-installing",c),b.updates.ajax("install-plugin",c)},b.updates.installPluginSuccess=function(c){var e=a(".plugin-card-"+c.slug).find(".install-now");e.removeClass("updating-message").addClass("updated-message installed button-disabled").attr("aria-label",b.updates.l10n.pluginInstalledLabel.replace("%s",c.pluginName)).text(b.updates.l10n.pluginInstalled),b.a11y.speak(b.updates.l10n.installedMsg,"polite"),d.trigger("wp-plugin-install-success",c),c.activateUrl&&setTimeout(function(){e.removeClass("install-now installed button-disabled updated-message").addClass("activate-now button-primary").attr("href",c.activateUrl).attr("aria-label",b.updates.l10n.activatePluginLabel.replace("%s",c.pluginName)).text(b.updates.l10n.activatePlugin)},1e3)},b.updates.installPluginError=function(c){var e,f=a(".plugin-card-"+c.slug),g=f.find(".install-now");b.updates.isValidResponse(c,"install")&&(b.updates.maybeHandleCredentialError(c,"install-plugin")||(e=b.updates.l10n.installFailed.replace("%s",c.errorMessage),f.addClass("plugin-card-update-failed").append('<div class="notice notice-error notice-alt is-dismissible"><p>'+e+"</p></div>"),f.on("click",".notice.is-dismissible .notice-dismiss",function(){setTimeout(function(){f.removeClass("plugin-card-update-failed").find(".column-name a").focus()},200)}),g.removeClass("updating-message").addClass("button-disabled").attr("aria-label",b.updates.l10n.pluginInstallFailedLabel.replace("%s",g.data("name"))).text(b.updates.l10n.installFailedShort),b.a11y.speak(e,"assertive"),d.trigger("wp-plugin-install-error",c)))},b.updates.installImporterSuccess=function(c){b.updates.addAdminNotice({id:"install-success",className:"notice-success is-dismissible",message:b.updates.l10n.importerInstalledMsg.replace("%s",c.activateUrl+"&from=import")}),a('[data-slug="'+c.slug+'"]').removeClass("install-now updating-message").addClass("activate-now").attr({href:c.activateUrl+"&from=import","aria-label":b.updates.l10n.activateImporterLabel.replace("%s",c.pluginName)}).text(b.updates.l10n.activateImporter),b.a11y.speak(b.updates.l10n.installedMsg,"polite"),d.trigger("wp-importer-install-success",c)},b.updates.installImporterError=function(c){var e=b.updates.l10n.installFailed.replace("%s",c.errorMessage),f=a('[data-slug="'+c.slug+'"]'),g=f.data("name");b.updates.isValidResponse(c,"install")&&(b.updates.maybeHandleCredentialError(c,"install-plugin")||(b.updates.addAdminNotice({id:c.errorCode,className:"notice-error is-dismissible",message:e}),f.removeClass("updating-message").text(b.updates.l10n.installNow).attr("aria-label",b.updates.l10n.installNowLabel.replace("%s",g)),b.a11y.speak(e,"assertive"),d.trigger("wp-importer-install-error",c)))},b.updates.deletePlugin=function(c){var e=a('[data-plugin="'+c.plugin+'"]').find(".row-actions a.delete");return c=_.extend({success:b.updates.deletePluginSuccess,error:b.updates.deletePluginError},c),e.html()!==b.updates.l10n.deleting&&e.data("originaltext",e.html()).text(b.updates.l10n.deleting),b.a11y.speak(b.updates.l10n.deleting,"polite"),d.trigger("wp-plugin-deleting",c),b.updates.ajax("delete-plugin",c)},b.updates.deletePluginSuccess=function(e){a('[data-plugin="'+e.plugin+'"]').css({backgroundColor:"#faafaa"}).fadeOut(350,function(){var d=a("#bulk-action-form"),f=a(".subsubsub"),g=a(this),h=d.find("thead th:not(.hidden), thead td").length,i=b.template("item-deleted-row"),j=c.plugins;g.hasClass("plugin-update-tr")||g.after(i({slug:e.slug,plugin:e.plugin,colspan:h,name:e.pluginName})),g.remove(),-1!==_.indexOf(j.upgrade,e.plugin)&&(j.upgrade=_.without(j.upgrade,e.plugin),b.updates.decrementCount("plugin")),-1!==_.indexOf(j.inactive,e.plugin)&&(j.inactive=_.without(j.inactive,e.plugin),j.inactive.length?f.find(".inactive .count").text("("+j.inactive.length+")"):f.find(".inactive").remove()),-1!==_.indexOf(j.active,e.plugin)&&(j.active=_.without(j.active,e.plugin),j.active.length?f.find(".active .count").text("("+j.active.length+")"):f.find(".active").remove()),-1!==_.indexOf(j.recently_activated,e.plugin)&&(j.recently_activated=_.without(j.recently_activated,e.plugin),j.recently_activated.length?f.find(".recently_activated .count").text("("+j.recently_activated.length+")"):f.find(".recently_activated").remove()),j.all=_.without(j.all,e.plugin),j.all.length?f.find(".all .count").text("("+j.all.length+")"):(d.find(".tablenav").css({visibility:"hidden"}),f.find(".all").remove(),d.find("tr.no-items").length||d.find("#the-list").append('<tr class="no-items"><td class="colspanchange" colspan="'+h+'">'+b.updates.l10n.noPlugins+"</td></tr>"))}),b.a11y.speak(b.updates.l10n.pluginDeleted,"polite"),d.trigger("wp-plugin-delete-success",e)},b.updates.deletePluginError=function(c){var e,f,g=b.template("item-update-row"),h=b.updates.adminNotice({className:"update-message notice-error notice-alt",message:c.errorMessage});c.plugin?(e=a('tr.inactive[data-plugin="'+c.plugin+'"]'),f=e.siblings('[data-plugin="'+c.plugin+'"]')):(e=a('tr.inactive[data-slug="'+c.slug+'"]'),f=e.siblings('[data-slug="'+c.slug+'"]')),b.updates.isValidResponse(c,"delete")&&(b.updates.maybeHandleCredentialError(c,"delete-plugin")||(f.length?(f.find(".notice-error").remove(),f.find(".plugin-update").append(h)):e.addClass("update").after(g({slug:c.slug,plugin:c.plugin||c.slug,colspan:a("#bulk-action-form").find("thead th:not(.hidden), thead td").length,content:h})),d.trigger("wp-plugin-delete-error",c)))},b.updates.updateTheme=function(c){var e;return c=_.extend({success:b.updates.updateThemeSuccess,error:b.updates.updateThemeError},c),"themes-network"===pagenow?e=a('[data-slug="'+c.slug+'"]').find(".update-message").removeClass("notice-error").addClass("updating-message notice-warning").find("p"):"customize"===pagenow?(e=a('[data-slug="'+c.slug+'"].notice').removeClass("notice-large"),e.find("h3").remove(),e=e.add(a("#customize-control-installed_theme_"+c.slug).find(".update-message")),e=e.addClass("updating-message").find("p")):(e=a("#update-theme").closest(".notice").removeClass("notice-large"),e.find("h3").remove(),e=e.add(a('[data-slug="'+c.slug+'"]').find(".update-message")),e=e.addClass("updating-message").find("p")),e.html()!==b.updates.l10n.updating&&e.data("originaltext",e.html()),b.a11y.speak(b.updates.l10n.updatingMsg,"polite"),e.text(b.updates.l10n.updating),d.trigger("wp-theme-updating",c),b.updates.ajax("update-theme",c)},b.updates.updateThemeSuccess=function(c){var e,f,g=a("body.modal-open").length,h=a('[data-slug="'+c.slug+'"]'),i={className:"updated-message notice-success notice-alt",message:b.updates.l10n.themeUpdated};"customize"===pagenow?(h=a(".updating-message").siblings(".theme-name"),h.length&&(f=h.html().replace(c.oldVersion,c.newVersion),h.html(f)),e=a(".theme-info .notice").add(b.customize.control("installed_theme_"+c.slug).container.find(".theme").find(".update-message"))):"themes-network"===pagenow?(e=h.find(".update-message"),f=h.find(".theme-version-author-uri").html().replace(c.oldVersion,c.newVersion),h.find(".theme-version-author-uri").html(f)):(e=a(".theme-info .notice").add(h.find(".update-message")),g?a(".load-customize:visible").focus():h.find(".load-customize").focus()),b.updates.addAdminNotice(_.extend({selector:e},i)),b.a11y.speak(b.updates.l10n.updatedMsg,"polite"),b.updates.decrementCount("theme"),d.trigger("wp-theme-update-success",c),g&&"customize"!==pagenow&&a(".theme-info .theme-author").after(b.updates.adminNotice(i))},b.updates.updateThemeError=function(c){var e,f=a('[data-slug="'+c.slug+'"]'),g=b.updates.l10n.updateFailed.replace("%s",c.errorMessage);b.updates.isValidResponse(c,"update")&&(b.updates.maybeHandleCredentialError(c,"update-theme")||("customize"===pagenow&&(f=b.customize.control("installed_theme_"+c.slug).container.find(".theme")),"themes-network"===pagenow?e=f.find(".update-message "):(e=a(".theme-info .notice").add(f.find(".notice")),a("body.modal-open").length?a(".load-customize:visible").focus():f.find(".load-customize").focus()),b.updates.addAdminNotice({selector:e,className:"update-message notice-error notice-alt is-dismissible",message:g}),b.a11y.speak(g,"polite"),d.trigger("wp-theme-update-error",c)))},b.updates.installTheme=function(c){var e=a('.theme-install[data-slug="'+c.slug+'"]');return c=_.extend({success:b.updates.installThemeSuccess,error:b.updates.installThemeError},c),e.addClass("updating-message"),e.parents(".theme").addClass("focus"),e.html()!==b.updates.l10n.installing&&e.data("originaltext",e.html()),e.text(b.updates.l10n.installing).attr("aria-label",b.updates.l10n.themeInstallingLabel.replace("%s",e.data("name"))),b.a11y.speak(b.updates.l10n.installingMsg,"polite"),a('.install-theme-info, [data-slug="'+c.slug+'"]').removeClass("theme-install-failed").find(".notice.notice-error").remove(),d.trigger("wp-theme-installing",c),b.updates.ajax("install-theme",c)},b.updates.installThemeSuccess=function(c){var e,f=a(".wp-full-overlay-header, [data-slug="+c.slug+"]");d.trigger("wp-theme-install-success",c),e=f.find(".button-primary").removeClass("updating-message").addClass("updated-message disabled").attr("aria-label",b.updates.l10n.themeInstalledLabel.replace("%s",c.themeName)).text(b.updates.l10n.themeInstalled),b.a11y.speak(b.updates.l10n.installedMsg,"polite"),setTimeout(function(){c.activateUrl&&e.attr("href",c.activateUrl).removeClass("theme-install updated-message disabled").addClass("activate").attr("aria-label",b.updates.l10n.activateThemeLabel.replace("%s",c.themeName)).text(b.updates.l10n.activateTheme),c.customizeUrl&&e.siblings(".preview").replaceWith(function(){return a("<a>").attr("href",c.customizeUrl).addClass("button load-customize").text(b.updates.l10n.livePreview)})},1e3)},b.updates.installThemeError=function(c){var e,f,g=b.updates.l10n.installFailed.replace("%s",c.errorMessage),h=b.updates.adminNotice({className:"update-message notice-error notice-alt",message:g});b.updates.isValidResponse(c,"install")&&(b.updates.maybeHandleCredentialError(c,"install-theme")||("customize"===pagenow?(d.find("body").hasClass("modal-open")?(f=a('.theme-install[data-slug="'+c.slug+'"]'),e=a(".theme-overlay .theme-info").prepend(h)):(f=a('.theme-install[data-slug="'+c.slug+'"]'),e=f.closest(".theme").addClass("theme-install-failed").append(h)),b.customize.notifications.remove("theme_installing")):d.find("body").hasClass("full-overlay-active")?(f=a('.theme-install[data-slug="'+c.slug+'"]'),e=a(".install-theme-info").prepend(h)):(e=a('[data-slug="'+c.slug+'"]').removeClass("focus").addClass("theme-install-failed").append(h),f=e.find(".theme-install")),f.removeClass("updating-message").attr("aria-label",b.updates.l10n.themeInstallFailedLabel.replace("%s",f.data("name"))).text(b.updates.l10n.installFailedShort),b.a11y.speak(g,"assertive"),d.trigger("wp-theme-install-error",c)))},b.updates.deleteTheme=function(c){var e;return"themes"===pagenow?e=a(".theme-actions .delete-theme"):"themes-network"===pagenow&&(e=a('[data-slug="'+c.slug+'"]').find(".row-actions a.delete")),c=_.extend({success:b.updates.deleteThemeSuccess,error:b.updates.deleteThemeError},c),e&&e.html()!==b.updates.l10n.deleting&&e.data("originaltext",e.html()).text(b.updates.l10n.deleting),b.a11y.speak(b.updates.l10n.deleting,"polite"),a(".theme-info .update-message").remove(),d.trigger("wp-theme-deleting",c),b.updates.ajax("delete-theme",c)},b.updates.deleteThemeSuccess=function(e){var f=a('[data-slug="'+e.slug+'"]');"themes-network"===pagenow&&f.css({backgroundColor:"#faafaa"}).fadeOut(350,function(){var d=a(".subsubsub"),f=a(this),g=c.themes,h=b.template("item-deleted-row");f.hasClass("plugin-update-tr")||f.after(h({slug:e.slug,colspan:a("#bulk-action-form").find("thead th:not(.hidden), thead td").length,name:f.find(".theme-title strong").text()})),f.remove(),f.hasClass("update")&&(g.upgrade--,b.updates.decrementCount("theme")),f.hasClass("inactive")&&(g.disabled--,g.disabled?d.find(".disabled .count").text("("+g.disabled+")"):d.find(".disabled").remove()),d.find(".all .count").text("("+--g.all+")")}),b.a11y.speak(b.updates.l10n.themeDeleted,"polite"),d.trigger("wp-theme-delete-success",e)},b.updates.deleteThemeError=function(c){var e=a('tr.inactive[data-slug="'+c.slug+'"]'),f=a(".theme-actions .delete-theme"),g=b.template("item-update-row"),h=e.siblings("#"+c.slug+"-update"),i=b.updates.l10n.deleteFailed.replace("%s",c.errorMessage),j=b.updates.adminNotice({className:"update-message notice-error notice-alt",message:i});b.updates.maybeHandleCredentialError(c,"delete-theme")||("themes-network"===pagenow?h.length?(h.find(".notice-error").remove(),h.find(".plugin-update").append(j)):e.addClass("update").after(g({slug:c.slug,colspan:a("#bulk-action-form").find("thead th:not(.hidden), thead td").length,content:j})):a(".theme-info .theme-description").before(j),f.html(f.data("originaltext")),b.a11y.speak(i,"assertive"),d.trigger("wp-theme-delete-error",c))},b.updates._addCallbacks=function(a,c){return"import"===pagenow&&"install-plugin"===c&&(a.success=b.updates.installImporterSuccess,a.error=b.updates.installImporterError),a},b.updates.queueChecker=function(){var a;if(!b.updates.ajaxLocked&&b.updates.queue.length)switch(a=b.updates.queue.shift(),a.action){case"install-plugin":b.updates.installPlugin(a.data);break;case"update-plugin":b.updates.updatePlugin(a.data);break;case"delete-plugin":b.updates.deletePlugin(a.data);break;case"install-theme":b.updates.installTheme(a.data);break;case"update-theme":b.updates.updateTheme(a.data);break;case"delete-theme":b.updates.deleteTheme(a.data)}},b.updates.requestFilesystemCredentials=function(c){!1===b.updates.filesystemCredentials.available&&(c&&!b.updates.$elToReturnFocusToFromCredentialsModal&&(b.updates.$elToReturnFocusToFromCredentialsModal=a(c.target)),b.updates.ajaxLocked=!0,b.updates.requestForCredentialsModalOpen())},b.updates.maybeRequestFilesystemCredentials=function(a){b.updates.shouldRequestFilesystemCredentials&&!b.updates.ajaxLocked&&b.updates.requestFilesystemCredentials(a)},b.updates.keydown=function(c){27===c.keyCode?b.updates.requestForCredentialsModalCancel():9===c.keyCode&&("upgrade"!==c.target.id||c.shiftKey?"hostname"===c.target.id&&c.shiftKey&&(a("#upgrade").focus(),c.preventDefault()):(a("#hostname").focus(),c.preventDefault()))},b.updates.requestForCredentialsModalOpen=function(){var c=a("#request-filesystem-credentials-dialog");a("body").addClass("modal-open"),c.show(),c.find("input:enabled:first").focus(),c.on("keydown",b.updates.keydown)},b.updates.requestForCredentialsModalClose=function(){a("#request-filesystem-credentials-dialog").hide(),a("body").removeClass("modal-open"),b.updates.$elToReturnFocusToFromCredentialsModal&&b.updates.$elToReturnFocusToFromCredentialsModal.focus()},b.updates.requestForCredentialsModalCancel=function(){(b.updates.ajaxLocked||b.updates.queue.length)&&(_.each(b.updates.queue,function(a){d.trigger("credential-modal-cancel",a)}),b.updates.ajaxLocked=!1,b.updates.queue=[],b.updates.requestForCredentialsModalClose())},b.updates.showErrorInCredentialsForm=function(b){var c=a("#request-filesystem-credentials-form");c.find(".notice").remove(),c.find("#request-filesystem-credentials-title").after('<div class="notice notice-alt notice-error"><p>'+b+"</p></div>")},b.updates.credentialError=function(a,c){a=b.updates._addCallbacks(a,c),b.updates.queue.unshift({action:c,data:a}),b.updates.filesystemCredentials.available=!1,b.updates.showErrorInCredentialsForm(a.errorMessage),b.updates.requestFilesystemCredentials()},b.updates.maybeHandleCredentialError=function(a,c){return!(!b.updates.shouldRequestFilesystemCredentials||!a.errorCode||"unable_to_connect_to_filesystem"!==a.errorCode)&&(b.updates.credentialError(a,c),!0)},b.updates.isValidResponse=function(c,d){var e,f=b.updates.l10n.unknownError;if(_.isObject(c)&&!_.isFunction(c.always))return!0;switch(_.isString(c)&&"-1"===c?f=b.updates.l10n.nonceError:_.isString(c)?f=c:"undefined"!=typeof c.readyState&&0===c.readyState?f=b.updates.l10n.connectionError:_.isString(c.responseText)&&""!==c.responseText?f=c.responseText:_.isString(c.statusText)&&(f=c.statusText),d){case"update":e=b.updates.l10n.updateFailed;break;case"install":e=b.updates.l10n.installFailed;break;case"delete":e=b.updates.l10n.deleteFailed}return f=f.replace(/<[\/a-z][^<>]*>/gi,""),e=e.replace("%s",f),b.updates.addAdminNotice({id:"unknown_error",className:"notice-error is-dismissible",message:_.escape(e)}),b.updates.ajaxLocked=!1,b.updates.queue=[],a(".button.updating-message").removeClass("updating-message").removeAttr("aria-label").prop("disabled",!0).text(b.updates.l10n.updateFailedShort),a(".updating-message:not(.button):not(.thickbox)").removeClass("updating-message notice-warning").addClass("notice-error").find("p").removeAttr("aria-label").text(e),b.a11y.speak(e,"assertive"),!1},b.updates.beforeunload=function(){if(b.updates.ajaxLocked)return b.updates.l10n.beforeunload},a(function(){var e=a("#plugin-filter"),f=a("#bulk-action-form"),g=a("#request-filesystem-credentials-form"),h=a("#request-filesystem-credentials-dialog"),i=a(".plugins-php .wp-filter-search"),j=a(".plugin-install-php .wp-filter-search");c=_.extend(c,window._wpUpdatesItemCounts||{}),c.totals&&b.updates.refreshCount(),b.updates.shouldRequestFilesystemCredentials=h.length>0,h.on("submit","form",function(c){c.preventDefault(),b.updates.filesystemCredentials.ftp.hostname=a("#hostname").val(),b.updates.filesystemCredentials.ftp.username=a("#username").val(),b.updates.filesystemCredentials.ftp.password=a("#password").val(),b.updates.filesystemCredentials.ftp.connectionType=a('input[name="connection_type"]:checked').val(),b.updates.filesystemCredentials.ssh.publicKey=a("#public_key").val(),b.updates.filesystemCredentials.ssh.privateKey=a("#private_key").val(),b.updates.filesystemCredentials.fsNonce=a("#_fs_nonce").val(),b.updates.filesystemCredentials.available=!0,b.updates.ajaxLocked=!1,b.updates.queueChecker(),b.updates.requestForCredentialsModalClose()}),h.on("click",'[data-js-action="close"], .notification-dialog-background',b.updates.requestForCredentialsModalCancel),g.on("change",'input[name="connection_type"]',function(){a("#ssh-keys").toggleClass("hidden","ssh"!==a(this).val())}).change(),d.on("credential-modal-cancel",function(c,d){var e,f,g=a(".updating-message");"import"===pagenow?g.removeClass("updating-message"):"plugins"===pagenow||"plugins-network"===pagenow?"update-plugin"===d.action?e=a('tr[data-plugin="'+d.data.plugin+'"]').find(".update-message"):"delete-plugin"===d.action&&(e=a('[data-plugin="'+d.data.plugin+'"]').find(".row-actions a.delete")):"themes"===pagenow||"themes-network"===pagenow?"update-theme"===d.action?e=a('[data-slug="'+d.data.slug+'"]').find(".update-message"):"delete-theme"===d.action&&"themes-network"===pagenow?e=a('[data-slug="'+d.data.slug+'"]').find(".row-actions a.delete"):"delete-theme"===d.action&&"themes"===pagenow&&(e=a(".theme-actions .delete-theme")):e=g,e&&e.hasClass("updating-message")&&(f=e.data("originaltext"),"undefined"==typeof f&&(f=a("<p>").html(e.find("p").data("originaltext"))),e.removeClass("updating-message").html(f),"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||("update-plugin"===d.action?e.attr("aria-label",b.updates.l10n.pluginUpdateNowLabel.replace("%s",e.data("name"))):"install-plugin"===d.action&&e.attr("aria-label",b.updates.l10n.pluginInstallNowLabel.replace("%s",e.data("name"))))),b.a11y.speak(b.updates.l10n.updateCancel,"polite")}),f.on("click","[data-plugin] .update-link",function(c){var d=a(c.target),e=d.parents("tr");c.preventDefault(),d.hasClass("updating-message")||d.hasClass("button-disabled")||(b.updates.maybeRequestFilesystemCredentials(c),b.updates.$elToReturnFocusToFromCredentialsModal=e.find(".check-column input"),b.updates.updatePlugin({plugin:e.data("plugin"),slug:e.data("slug")}))}),e.on("click",".update-now",function(c){var d=a(c.target);c.preventDefault(),d.hasClass("updating-message")||d.hasClass("button-disabled")||(b.updates.maybeRequestFilesystemCredentials(c),b.updates.updatePlugin({plugin:d.data("plugin"),slug:d.data("slug")}))}),e.on("click",".install-now",function(c){var e=a(c.target);c.preventDefault(),e.hasClass("updating-message")||e.hasClass("button-disabled")||(b.updates.shouldRequestFilesystemCredentials&&!b.updates.ajaxLocked&&(b.updates.requestFilesystemCredentials(c),d.on("credential-modal-cancel",function(){var c=a(".install-now.updating-message");c.removeClass("updating-message").text(b.updates.l10n.installNow),b.a11y.speak(b.updates.l10n.updateCancel,"polite")})),b.updates.installPlugin({slug:e.data("slug")}))}),d.on("click",".importer-item .install-now",function(c){var e=a(c.target),f=a(this).data("name");c.preventDefault(),e.hasClass("updating-message")||(b.updates.shouldRequestFilesystemCredentials&&!b.updates.ajaxLocked&&(b.updates.requestFilesystemCredentials(c),d.on("credential-modal-cancel",function(){e.removeClass("updating-message").text(b.updates.l10n.installNow).attr("aria-label",b.updates.l10n.installNowLabel.replace("%s",f)),b.a11y.speak(b.updates.l10n.updateCancel,"polite")})),b.updates.installPlugin({slug:e.data("slug"),pagenow:pagenow,success:b.updates.installImporterSuccess,error:b.updates.installImporterError}))}),f.on("click","[data-plugin] a.delete",function(c){var d=a(c.target).parents("tr");c.preventDefault(),window.confirm(b.updates.l10n.aysDeleteUninstall.replace("%s",d.find(".plugin-title strong").text()))&&(b.updates.maybeRequestFilesystemCredentials(c),b.updates.deletePlugin({plugin:d.data("plugin"),slug:d.data("slug")}))}),d.on("click",".themes-php.network-admin .update-link",function(c){var d=a(c.target),e=d.parents("tr");c.preventDefault(),d.hasClass("updating-message")||d.hasClass("button-disabled")||(b.updates.maybeRequestFilesystemCredentials(c),b.updates.$elToReturnFocusToFromCredentialsModal=e.find(".check-column input"),b.updates.updateTheme({slug:e.data("slug")}))}),d.on("click",".themes-php.network-admin a.delete",function(c){var d=a(c.target).parents("tr");c.preventDefault(),window.confirm(b.updates.l10n.aysDelete.replace("%s",d.find(".theme-title strong").text()))&&(b.updates.maybeRequestFilesystemCredentials(c),b.updates.deleteTheme({slug:d.data("slug")}))}),f.on("click",'[type="submit"]:not([name="clear-recent-list"])',function(c){var e,g,h=a(c.target).siblings("select").val(),i=f.find('input[name="checked[]"]:checked'),j=0,k=0,l=[];switch(pagenow){case"plugins":case"plugins-network":e="plugin";break;case"themes-network":e="theme";break;default:return}if(!i.length)return c.preventDefault(),a("html, body").animate({scrollTop:0}),b.updates.addAdminNotice({id:"no-items-selected",className:"notice-error is-dismissible",message:b.updates.l10n.noItemsSelected});switch(h){case"update-selected":g=h.replace("selected",e);break;case"delete-selected":if(!window.confirm("plugin"===e?b.updates.l10n.aysBulkDelete:b.updates.l10n.aysBulkDeleteThemes))return void c.preventDefault();g=h.replace("selected",e);break;default:return}b.updates.maybeRequestFilesystemCredentials(c),c.preventDefault(),f.find('.manage-column [type="checkbox"]').prop("checked",!1),d.trigger("wp-"+e+"-bulk-"+h,i),i.each(function(c,d){var e=a(d),f=e.parents("tr");return"update-selected"!==h||f.hasClass("update")&&!f.find("notice-error").length?void b.updates.queue.push({action:g,data:{plugin:f.data("plugin"),slug:f.data("slug")}}):void e.prop("checked",!1)}),d.on("wp-plugin-update-success wp-plugin-update-error wp-theme-update-success wp-theme-update-error",function(c,d){var e,f,g=a('[data-slug="'+d.slug+'"]');"wp-"+d.update+"-update-success"===c.type?j++:(f=d.pluginName?d.pluginName:g.find(".column-primary strong").text(),k++,l.push(f+": "+d.errorMessage)),g.find('input[name="checked[]"]:checked').prop("checked",!1),b.updates.adminNotice=b.template("wp-bulk-updates-admin-notice"),b.updates.addAdminNotice({id:"bulk-action-notice",className:"bulk-action-notice",successes:j,errors:k,errorMessages:l,type:d.update}),e=a("#bulk-action-notice").on("click","button",function(){a(this).toggleClass("bulk-action-errors-collapsed").attr("aria-expanded",!a(this).hasClass("bulk-action-errors-collapsed")),e.find(".bulk-action-errors").toggleClass("hidden")}),k>0&&!b.updates.queue.length&&a("html, body").animate({scrollTop:0})}),d.on("wp-updates-notice-added",function(){b.updates.adminNotice=b.template("wp-updates-admin-notice")}),b.updates.queueChecker()}),j.length&&j.attr("aria-describedby","live-search-desc"),j.on("keyup input",_.debounce(function(c,d){var f,g,h=a(".plugin-install-search");f={_ajax_nonce:b.updates.ajaxNonce,s:c.target.value,tab:"search",type:a("#typeselector").val(),pagenow:pagenow},g=location.href.split("?")[0]+"?"+a.param(_.omit(f,["_ajax_nonce","pagenow"])),"keyup"===c.type&&27===c.which&&(c.target.value=""),b.updates.searchTerm===f.s&&"typechange"!==d||(e.empty(),b.updates.searchTerm=f.s,window.history&&window.history.replaceState&&window.history.replaceState(null,"",g),
-h.length||(h=a('<li class="plugin-install-search" />').append(a("<a />",{"class":"current",href:g,text:b.updates.l10n.searchResultsLabel})),a(".wp-filter .filter-links .current").removeClass("current").parents(".filter-links").prepend(h),e.prev("p").remove(),a(".plugins-popular-tags-wrapper").remove()),"undefined"!=typeof b.updates.searchRequest&&b.updates.searchRequest.abort(),a("body").addClass("loading-content"),b.updates.searchRequest=b.ajax.post("search-install-plugins",f).done(function(c){a("body").removeClass("loading-content"),e.append(c.items),delete b.updates.searchRequest,0===c.count?b.a11y.speak(b.updates.l10n.noPluginsFound):b.a11y.speak(b.updates.l10n.pluginsFound.replace("%d",c.count))}))},500)),i.length&&i.attr("aria-describedby","live-search-desc"),i.on("keyup input",_.debounce(function(c){var d,e={_ajax_nonce:b.updates.ajaxNonce,s:c.target.value,pagenow:pagenow,plugin_status:"all"};"keyup"===c.type&&27===c.which&&(c.target.value=""),b.updates.searchTerm!==e.s&&(b.updates.searchTerm=e.s,d=_.object(_.compact(_.map(location.search.slice(1).split("&"),function(a){if(a)return a.split("=")}))),e.plugin_status=d.plugin_status||"all",window.history&&window.history.replaceState&&window.history.replaceState(null,"",location.href.split("?")[0]+"?s="+e.s+"&plugin_status="+e.plugin_status),"undefined"!=typeof b.updates.searchRequest&&b.updates.searchRequest.abort(),f.empty(),a("body").addClass("loading-content"),a(".subsubsub .current").removeClass("current"),b.updates.searchRequest=b.ajax.post("search-plugins",e).done(function(c){var d=a("<span />").addClass("subtitle").html(b.updates.l10n.searchResults.replace("%s",_.escape(e.s))),g=a(".wrap .subtitle");e.s.length?g.length?g.replaceWith(d):a(".wp-header-end").before(d):(g.remove(),a(".subsubsub ."+e.plugin_status+" a").addClass("current")),a("body").removeClass("loading-content"),f.append(c.items),delete b.updates.searchRequest,0===c.count?b.a11y.speak(b.updates.l10n.noPluginsFound):b.a11y.speak(b.updates.l10n.pluginsFound.replace("%d",c.count))}))},500)),d.on("submit",".search-plugins",function(b){b.preventDefault(),a("input.wp-filter-search").trigger("input")}),d.on("click",".try-again",function(a){a.preventDefault(),j.trigger("input")}),a("#typeselector").on("change",function(){var b=a('input[name="s"]');b.val().length&&b.trigger("input","typechange")}),a("#plugin_update_from_iframe").on("click",function(b){var c,d=window.parent===window?null:window.parent;a.support.postMessage=!!window.postMessage,!1!==a.support.postMessage&&null!==d&&-1===window.parent.location.pathname.indexOf("update-core.php")&&(b.preventDefault(),c={action:"update-plugin",data:{plugin:a(this).data("plugin"),slug:a(this).data("slug")}},d.postMessage(JSON.stringify(c),window.location.origin))}),a("#plugin_install_from_iframe").on("click",function(b){var c,d=window.parent===window?null:window.parent;a.support.postMessage=!!window.postMessage,!1!==a.support.postMessage&&null!==d&&-1===window.parent.location.pathname.indexOf("index.php")&&(b.preventDefault(),c={action:"install-plugin",data:{slug:a(this).data("slug")}},d.postMessage(JSON.stringify(c),window.location.origin))}),a(window).on("message",function(c){var d,e=c.originalEvent,f=document.location.protocol+"//"+document.location.hostname;if(e.origin===f){try{d=a.parseJSON(e.data)}catch(g){return}if(d&&"undefined"!=typeof d.action)switch(d.action){case"decrementUpdateCount":b.updates.decrementCount(d.upgradeType);break;case"install-plugin":case"update-plugin":window.tb_remove(),d.data=b.updates._addCallbacks(d.data,d.action),b.updates.queue.push(d),b.updates.queueChecker()}}}),a(window).on("beforeunload",b.updates.beforeunload)})}(jQuery,window.wp,window._wpUpdatesSettings);
\ No newline at end of file
+!function(a,b,c){var d=a(document);b=b||{},b.updates={},b.updates.ajaxNonce=c.ajax_nonce,b.updates.l10n=c.l10n,b.updates.searchTerm="",b.updates.shouldRequestFilesystemCredentials=!1,b.updates.filesystemCredentials={ftp:{host:"",username:"",password:"",connectionType:""},ssh:{publicKey:"",privateKey:""},fsNonce:"",available:!1},b.updates.ajaxLocked=!1,b.updates.adminNotice=b.template("wp-updates-admin-notice"),b.updates.queue=[],b.updates.$elToReturnFocusToFromCredentialsModal=void 0,b.updates.addAdminNotice=function(c){var e,f=a(c.selector);delete c.selector,e=b.updates.adminNotice(c),f.length||(f=a("#"+c.id)),f.length?f.replaceWith(e):"customize"===pagenow?a(".customize-themes-notifications").append(e):a(".wrap").find("> h1").after(e),d.trigger("wp-updates-notice-added")},b.updates.ajax=function(c,d){var e={};return b.updates.ajaxLocked?(b.updates.queue.push({action:c,data:d}),a.Deferred()):(b.updates.ajaxLocked=!0,d.success&&(e.success=d.success,delete d.success),d.error&&(e.error=d.error,delete d.error),e.data=_.extend(d,{action:c,_ajax_nonce:b.updates.ajaxNonce,_fs_nonce:b.updates.filesystemCredentials.fsNonce,username:b.updates.filesystemCredentials.ftp.username,password:b.updates.filesystemCredentials.ftp.password,hostname:b.updates.filesystemCredentials.ftp.hostname,connection_type:b.updates.filesystemCredentials.ftp.connectionType,public_key:b.updates.filesystemCredentials.ssh.publicKey,private_key:b.updates.filesystemCredentials.ssh.privateKey}),b.ajax.send(e).always(b.updates.ajaxAlways))},b.updates.ajaxAlways=function(c){c.errorCode&&"unable_to_connect_to_filesystem"===c.errorCode||(b.updates.ajaxLocked=!1,b.updates.queueChecker()),"undefined"!=typeof c.debug&&window.console&&window.console.log&&_.map(c.debug,function(b){window.console.log(a("<p />").html(b).text())})},b.updates.refreshCount=function(){var b,d=a("#wp-admin-bar-updates"),e=a('a[href="update-core.php"] .update-plugins'),f=a('a[href="plugins.php"] .update-plugins'),g=a('a[href="themes.php"] .update-plugins');d.find(".ab-item").removeAttr("title"),d.find(".ab-label").text(c.totals.counts.total),0===c.totals.counts.total&&d.find(".ab-label").parents("li").remove(),e.each(function(a,b){b.className=b.className.replace(/count-\d+/,"count-"+c.totals.counts.total)}),c.totals.counts.total>0?e.find(".update-count").text(c.totals.counts.total):e.remove(),f.each(function(a,b){b.className=b.className.replace(/count-\d+/,"count-"+c.totals.counts.plugins)}),c.totals.counts.total>0?f.find(".plugin-count").text(c.totals.counts.plugins):f.remove(),g.each(function(a,b){b.className=b.className.replace(/count-\d+/,"count-"+c.totals.counts.themes)}),c.totals.counts.total>0?g.find(".theme-count").text(c.totals.counts.themes):g.remove(),"plugins"===pagenow||"plugins-network"===pagenow?b=c.totals.counts.plugins:"themes"!==pagenow&&"themes-network"!==pagenow||(b=c.totals.counts.themes),b>0?a(".subsubsub .upgrade .count").text("("+b+")"):(a(".subsubsub .upgrade").remove(),a(".subsubsub li:last").html(function(){return a(this).children()}))},b.updates.decrementCount=function(a){c.totals.counts.total=Math.max(--c.totals.counts.total,0),"plugin"===a?c.totals.counts.plugins=Math.max(--c.totals.counts.plugins,0):"theme"===a&&(c.totals.counts.themes=Math.max(--c.totals.counts.themes,0)),b.updates.refreshCount(a)},b.updates.updatePlugin=function(c){var e,f,g,h;return c=_.extend({success:b.updates.updatePluginSuccess,error:b.updates.updatePluginError},c),"plugins"===pagenow||"plugins-network"===pagenow?(e=a('tr[data-plugin="'+c.plugin+'"]'),g=e.find(".update-message").removeClass("notice-error").addClass("updating-message notice-warning").find("p"),h=b.updates.l10n.pluginUpdatingLabel.replace("%s",e.find(".plugin-title strong").text())):"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||(f=a(".plugin-card-"+c.slug),g=f.find(".update-now").addClass("updating-message"),h=b.updates.l10n.pluginUpdatingLabel.replace("%s",g.data("name")),f.removeClass("plugin-card-update-failed").find(".notice.notice-error").remove()),g.html()!==b.updates.l10n.updating&&g.data("originaltext",g.html()),g.attr("aria-label",h).text(b.updates.l10n.updating),d.trigger("wp-plugin-updating",c),b.updates.ajax("update-plugin",c)},b.updates.updatePluginSuccess=function(c){var e,f,g;"plugins"===pagenow||"plugins-network"===pagenow?(e=a('tr[data-plugin="'+c.plugin+'"]').removeClass("update").addClass("updated"),f=e.find(".update-message").removeClass("updating-message notice-warning").addClass("updated-message notice-success").find("p"),g=e.find(".plugin-version-author-uri").html().replace(c.oldVersion,c.newVersion),e.find(".plugin-version-author-uri").html(g)):"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||(f=a(".plugin-card-"+c.slug).find(".update-now").removeClass("updating-message").addClass("button-disabled updated-message")),f.attr("aria-label",b.updates.l10n.pluginUpdatedLabel.replace("%s",c.pluginName)).text(b.updates.l10n.pluginUpdated),b.a11y.speak(b.updates.l10n.updatedMsg,"polite"),b.updates.decrementCount("plugin"),d.trigger("wp-plugin-update-success",c)},b.updates.updatePluginError=function(c){var e,f,g;b.updates.isValidResponse(c,"update")&&(b.updates.maybeHandleCredentialError(c,"update-plugin")||(g=b.updates.l10n.updateFailed.replace("%s",c.errorMessage),"plugins"===pagenow||"plugins-network"===pagenow?(f=c.plugin?a('tr[data-plugin="'+c.plugin+'"]').find(".update-message"):a('tr[data-slug="'+c.slug+'"]').find(".update-message"),f.removeClass("updating-message notice-warning").addClass("notice-error").find("p").html(g),c.pluginName?f.find("p").attr("aria-label",b.updates.l10n.pluginUpdateFailedLabel.replace("%s",c.pluginName)):f.find("p").removeAttr("aria-label")):"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||(e=a(".plugin-card-"+c.slug).addClass("plugin-card-update-failed").append(b.updates.adminNotice({className:"update-message notice-error notice-alt is-dismissible",message:g})),e.find(".update-now").text(b.updates.l10n.updateFailedShort).removeClass("updating-message"),c.pluginName?e.find(".update-now").attr("aria-label",b.updates.l10n.pluginUpdateFailedLabel.replace("%s",c.pluginName)):e.find(".update-now").removeAttr("aria-label"),e.on("click",".notice.is-dismissible .notice-dismiss",function(){setTimeout(function(){e.removeClass("plugin-card-update-failed").find(".column-name a").focus(),e.find(".update-now").attr("aria-label",!1).text(b.updates.l10n.updateNow)},200)})),b.a11y.speak(g,"assertive"),d.trigger("wp-plugin-update-error",c)))},b.updates.installPlugin=function(c){var e=a(".plugin-card-"+c.slug),f=e.find(".install-now");return c=_.extend({success:b.updates.installPluginSuccess,error:b.updates.installPluginError},c),"import"===pagenow&&(f=a('[data-slug="'+c.slug+'"]')),f.html()!==b.updates.l10n.installing&&f.data("originaltext",f.html()),f.addClass("updating-message").attr("aria-label",b.updates.l10n.pluginInstallingLabel.replace("%s",f.data("name"))).text(b.updates.l10n.installing),b.a11y.speak(b.updates.l10n.installingMsg,"polite"),e.removeClass("plugin-card-install-failed").find(".notice.notice-error").remove(),d.trigger("wp-plugin-installing",c),b.updates.ajax("install-plugin",c)},b.updates.installPluginSuccess=function(c){var e=a(".plugin-card-"+c.slug).find(".install-now");e.removeClass("updating-message").addClass("updated-message installed").attr("aria-label",b.updates.l10n.pluginInstalledLabel.replace("%s",c.pluginName)).text(b.updates.l10n.pluginInstalled),e.hasClass("button-primary")?e.addClass("button-primary-disabled"):e.addClass("button-disabled"),b.a11y.speak(b.updates.l10n.installedMsg,"polite"),d.trigger("wp-plugin-install-success",c),c.activateUrl&&setTimeout(function(){e.removeClass("install-now installed button-primary-disabled button-secondary-disabled button-disabled updated-message").addClass("activate-now").attr("href",c.activateUrl).attr("aria-label",b.updates.l10n.activatePluginLabel.replace("%s",c.pluginName)).text(c.activateLabel||b.updates.l10n.activatePlugin)},1e3)},b.updates.installPluginError=function(c){var e,f=a(".plugin-card-"+c.slug),g=f.find(".install-now");b.updates.isValidResponse(c,"install")&&(b.updates.maybeHandleCredentialError(c,"install-plugin")||(e=b.updates.l10n.installFailed.replace("%s",c.errorMessage),f.addClass("plugin-card-update-failed").append('<div class="notice notice-error notice-alt is-dismissible"><p>'+e+"</p></div>"),f.on("click",".notice.is-dismissible .notice-dismiss",function(){setTimeout(function(){f.removeClass("plugin-card-update-failed").find(".column-name a").focus()},200)}),g.removeClass("updating-message").addClass("button-disabled").attr("aria-label",b.updates.l10n.pluginInstallFailedLabel.replace("%s",g.data("name"))).text(b.updates.l10n.installFailedShort),b.a11y.speak(e,"assertive"),d.trigger("wp-plugin-install-error",c)))},b.updates.installImporterSuccess=function(c){b.updates.addAdminNotice({id:"install-success",className:"notice-success is-dismissible",message:b.updates.l10n.importerInstalledMsg.replace("%s",c.activateUrl+"&from=import")}),a('[data-slug="'+c.slug+'"]').removeClass("install-now updating-message").addClass("activate-now").attr({href:c.activateUrl+"&from=import","aria-label":b.updates.l10n.activateImporterLabel.replace("%s",c.pluginName)}).text(b.updates.l10n.activateImporter),b.a11y.speak(b.updates.l10n.installedMsg,"polite"),d.trigger("wp-importer-install-success",c)},b.updates.installImporterError=function(c){var e=b.updates.l10n.installFailed.replace("%s",c.errorMessage),f=a('[data-slug="'+c.slug+'"]'),g=f.data("name");b.updates.isValidResponse(c,"install")&&(b.updates.maybeHandleCredentialError(c,"install-plugin")||(b.updates.addAdminNotice({id:c.errorCode,className:"notice-error is-dismissible",message:e}),f.removeClass("updating-message").text(b.updates.l10n.installNow).attr("aria-label",b.updates.l10n.installNowLabel.replace("%s",g)),b.a11y.speak(e,"assertive"),d.trigger("wp-importer-install-error",c)))},b.updates.deletePlugin=function(c){var e=a('[data-plugin="'+c.plugin+'"]').find(".row-actions a.delete");return c=_.extend({success:b.updates.deletePluginSuccess,error:b.updates.deletePluginError},c),e.html()!==b.updates.l10n.deleting&&e.data("originaltext",e.html()).text(b.updates.l10n.deleting),b.a11y.speak(b.updates.l10n.deleting,"polite"),d.trigger("wp-plugin-deleting",c),b.updates.ajax("delete-plugin",c)},b.updates.deletePluginSuccess=function(e){a('[data-plugin="'+e.plugin+'"]').css({backgroundColor:"#faafaa"}).fadeOut(350,function(){var d=a("#bulk-action-form"),f=a(".subsubsub"),g=a(this),h=d.find("thead th:not(.hidden), thead td").length,i=b.template("item-deleted-row"),j=c.plugins;g.hasClass("plugin-update-tr")||g.after(i({slug:e.slug,plugin:e.plugin,colspan:h,name:e.pluginName})),g.remove(),-1!==_.indexOf(j.upgrade,e.plugin)&&(j.upgrade=_.without(j.upgrade,e.plugin),b.updates.decrementCount("plugin")),-1!==_.indexOf(j.inactive,e.plugin)&&(j.inactive=_.without(j.inactive,e.plugin),j.inactive.length?f.find(".inactive .count").text("("+j.inactive.length+")"):f.find(".inactive").remove()),-1!==_.indexOf(j.active,e.plugin)&&(j.active=_.without(j.active,e.plugin),j.active.length?f.find(".active .count").text("("+j.active.length+")"):f.find(".active").remove()),-1!==_.indexOf(j.recently_activated,e.plugin)&&(j.recently_activated=_.without(j.recently_activated,e.plugin),j.recently_activated.length?f.find(".recently_activated .count").text("("+j.recently_activated.length+")"):f.find(".recently_activated").remove()),j.all=_.without(j.all,e.plugin),j.all.length?f.find(".all .count").text("("+j.all.length+")"):(d.find(".tablenav").css({visibility:"hidden"}),f.find(".all").remove(),d.find("tr.no-items").length||d.find("#the-list").append('<tr class="no-items"><td class="colspanchange" colspan="'+h+'">'+b.updates.l10n.noPlugins+"</td></tr>"))}),b.a11y.speak(b.updates.l10n.pluginDeleted,"polite"),d.trigger("wp-plugin-delete-success",e)},b.updates.deletePluginError=function(c){var e,f,g=b.template("item-update-row"),h=b.updates.adminNotice({className:"update-message notice-error notice-alt",message:c.errorMessage});c.plugin?(e=a('tr.inactive[data-plugin="'+c.plugin+'"]'),f=e.siblings('[data-plugin="'+c.plugin+'"]')):(e=a('tr.inactive[data-slug="'+c.slug+'"]'),f=e.siblings('[data-slug="'+c.slug+'"]')),b.updates.isValidResponse(c,"delete")&&(b.updates.maybeHandleCredentialError(c,"delete-plugin")||(f.length?(f.find(".notice-error").remove(),f.find(".plugin-update").append(h)):e.addClass("update").after(g({slug:c.slug,plugin:c.plugin||c.slug,colspan:a("#bulk-action-form").find("thead th:not(.hidden), thead td").length,content:h})),d.trigger("wp-plugin-delete-error",c)))},b.updates.updateTheme=function(c){var e;return c=_.extend({success:b.updates.updateThemeSuccess,error:b.updates.updateThemeError},c),"themes-network"===pagenow?e=a('[data-slug="'+c.slug+'"]').find(".update-message").removeClass("notice-error").addClass("updating-message notice-warning").find("p"):"customize"===pagenow?(e=a('[data-slug="'+c.slug+'"].notice').removeClass("notice-large"),e.find("h3").remove(),e=e.add(a("#customize-control-installed_theme_"+c.slug).find(".update-message")),e=e.addClass("updating-message").find("p")):(e=a("#update-theme").closest(".notice").removeClass("notice-large"),e.find("h3").remove(),e=e.add(a('[data-slug="'+c.slug+'"]').find(".update-message")),e=e.addClass("updating-message").find("p")),e.html()!==b.updates.l10n.updating&&e.data("originaltext",e.html()),b.a11y.speak(b.updates.l10n.updatingMsg,"polite"),e.text(b.updates.l10n.updating),d.trigger("wp-theme-updating",c),b.updates.ajax("update-theme",c)},b.updates.updateThemeSuccess=function(c){var e,f,g=a("body.modal-open").length,h=a('[data-slug="'+c.slug+'"]'),i={className:"updated-message notice-success notice-alt",message:b.updates.l10n.themeUpdated};"customize"===pagenow?(h=a(".updating-message").siblings(".theme-name"),h.length&&(f=h.html().replace(c.oldVersion,c.newVersion),h.html(f)),e=a(".theme-info .notice").add(b.customize.control("installed_theme_"+c.slug).container.find(".theme").find(".update-message"))):"themes-network"===pagenow?(e=h.find(".update-message"),f=h.find(".theme-version-author-uri").html().replace(c.oldVersion,c.newVersion),h.find(".theme-version-author-uri").html(f)):(e=a(".theme-info .notice").add(h.find(".update-message")),g?a(".load-customize:visible").focus():h.find(".load-customize").focus()),b.updates.addAdminNotice(_.extend({selector:e},i)),b.a11y.speak(b.updates.l10n.updatedMsg,"polite"),b.updates.decrementCount("theme"),d.trigger("wp-theme-update-success",c),g&&"customize"!==pagenow&&a(".theme-info .theme-author").after(b.updates.adminNotice(i))},b.updates.updateThemeError=function(c){var e,f=a('[data-slug="'+c.slug+'"]'),g=b.updates.l10n.updateFailed.replace("%s",c.errorMessage);b.updates.isValidResponse(c,"update")&&(b.updates.maybeHandleCredentialError(c,"update-theme")||("customize"===pagenow&&(f=b.customize.control("installed_theme_"+c.slug).container.find(".theme")),"themes-network"===pagenow?e=f.find(".update-message "):(e=a(".theme-info .notice").add(f.find(".notice")),a("body.modal-open").length?a(".load-customize:visible").focus():f.find(".load-customize").focus()),b.updates.addAdminNotice({selector:e,className:"update-message notice-error notice-alt is-dismissible",message:g}),b.a11y.speak(g,"polite"),d.trigger("wp-theme-update-error",c)))},b.updates.installTheme=function(c){var e=a('.theme-install[data-slug="'+c.slug+'"]');return c=_.extend({success:b.updates.installThemeSuccess,error:b.updates.installThemeError},c),e.addClass("updating-message"),e.parents(".theme").addClass("focus"),e.html()!==b.updates.l10n.installing&&e.data("originaltext",e.html()),e.text(b.updates.l10n.installing).attr("aria-label",b.updates.l10n.themeInstallingLabel.replace("%s",e.data("name"))),b.a11y.speak(b.updates.l10n.installingMsg,"polite"),a('.install-theme-info, [data-slug="'+c.slug+'"]').removeClass("theme-install-failed").find(".notice.notice-error").remove(),d.trigger("wp-theme-installing",c),b.updates.ajax("install-theme",c)},b.updates.installThemeSuccess=function(c){var e,f=a(".wp-full-overlay-header, [data-slug="+c.slug+"]");d.trigger("wp-theme-install-success",c),e=f.find(".button-primary").removeClass("updating-message").addClass("updated-message disabled").attr("aria-label",b.updates.l10n.themeInstalledLabel.replace("%s",c.themeName)).text(b.updates.l10n.themeInstalled),b.a11y.speak(b.updates.l10n.installedMsg,"polite"),setTimeout(function(){c.activateUrl&&e.attr("href",c.activateUrl).removeClass("theme-install updated-message disabled").addClass("activate").attr("aria-label",b.updates.l10n.activateThemeLabel.replace("%s",c.themeName)).text(b.updates.l10n.activateTheme),c.customizeUrl&&e.siblings(".preview").replaceWith(function(){return a("<a>").attr("href",c.customizeUrl).addClass("button load-customize").text(b.updates.l10n.livePreview)})},1e3)},b.updates.installThemeError=function(c){var e,f,g=b.updates.l10n.installFailed.replace("%s",c.errorMessage),h=b.updates.adminNotice({className:"update-message notice-error notice-alt",message:g});b.updates.isValidResponse(c,"install")&&(b.updates.maybeHandleCredentialError(c,"install-theme")||("customize"===pagenow?(d.find("body").hasClass("modal-open")?(f=a('.theme-install[data-slug="'+c.slug+'"]'),e=a(".theme-overlay .theme-info").prepend(h)):(f=a('.theme-install[data-slug="'+c.slug+'"]'),e=f.closest(".theme").addClass("theme-install-failed").append(h)),b.customize.notifications.remove("theme_installing")):d.find("body").hasClass("full-overlay-active")?(f=a('.theme-install[data-slug="'+c.slug+'"]'),e=a(".install-theme-info").prepend(h)):(e=a('[data-slug="'+c.slug+'"]').removeClass("focus").addClass("theme-install-failed").append(h),f=e.find(".theme-install")),f.removeClass("updating-message").attr("aria-label",b.updates.l10n.themeInstallFailedLabel.replace("%s",f.data("name"))).text(b.updates.l10n.installFailedShort),b.a11y.speak(g,"assertive"),d.trigger("wp-theme-install-error",c)))},b.updates.deleteTheme=function(c){var e;return"themes"===pagenow?e=a(".theme-actions .delete-theme"):"themes-network"===pagenow&&(e=a('[data-slug="'+c.slug+'"]').find(".row-actions a.delete")),c=_.extend({success:b.updates.deleteThemeSuccess,error:b.updates.deleteThemeError},c),e&&e.html()!==b.updates.l10n.deleting&&e.data("originaltext",e.html()).text(b.updates.l10n.deleting),b.a11y.speak(b.updates.l10n.deleting,"polite"),a(".theme-info .update-message").remove(),d.trigger("wp-theme-deleting",c),b.updates.ajax("delete-theme",c)},b.updates.deleteThemeSuccess=function(e){var f=a('[data-slug="'+e.slug+'"]');"themes-network"===pagenow&&f.css({backgroundColor:"#faafaa"}).fadeOut(350,function(){var d=a(".subsubsub"),f=a(this),g=c.themes,h=b.template("item-deleted-row");f.hasClass("plugin-update-tr")||f.after(h({slug:e.slug,colspan:a("#bulk-action-form").find("thead th:not(.hidden), thead td").length,name:f.find(".theme-title strong").text()})),f.remove(),f.hasClass("update")&&(g.upgrade--,b.updates.decrementCount("theme")),f.hasClass("inactive")&&(g.disabled--,g.disabled?d.find(".disabled .count").text("("+g.disabled+")"):d.find(".disabled").remove()),d.find(".all .count").text("("+--g.all+")")}),b.a11y.speak(b.updates.l10n.themeDeleted,"polite"),d.trigger("wp-theme-delete-success",e)},b.updates.deleteThemeError=function(c){var e=a('tr.inactive[data-slug="'+c.slug+'"]'),f=a(".theme-actions .delete-theme"),g=b.template("item-update-row"),h=e.siblings("#"+c.slug+"-update"),i=b.updates.l10n.deleteFailed.replace("%s",c.errorMessage),j=b.updates.adminNotice({className:"update-message notice-error notice-alt",message:i});b.updates.maybeHandleCredentialError(c,"delete-theme")||("themes-network"===pagenow?h.length?(h.find(".notice-error").remove(),h.find(".plugin-update").append(j)):e.addClass("update").after(g({slug:c.slug,colspan:a("#bulk-action-form").find("thead th:not(.hidden), thead td").length,content:j})):a(".theme-info .theme-description").before(j),f.html(f.data("originaltext")),b.a11y.speak(i,"assertive"),d.trigger("wp-theme-delete-error",c))},b.updates._addCallbacks=function(a,c){return"import"===pagenow&&"install-plugin"===c&&(a.success=b.updates.installImporterSuccess,a.error=b.updates.installImporterError),a},b.updates.queueChecker=function(){var a;if(!b.updates.ajaxLocked&&b.updates.queue.length)switch(a=b.updates.queue.shift(),a.action){case"install-plugin":b.updates.installPlugin(a.data);break;case"update-plugin":b.updates.updatePlugin(a.data);break;case"delete-plugin":b.updates.deletePlugin(a.data);break;case"install-theme":b.updates.installTheme(a.data);break;case"update-theme":b.updates.updateTheme(a.data);break;case"delete-theme":b.updates.deleteTheme(a.data)}},b.updates.requestFilesystemCredentials=function(c){!1===b.updates.filesystemCredentials.available&&(c&&!b.updates.$elToReturnFocusToFromCredentialsModal&&(b.updates.$elToReturnFocusToFromCredentialsModal=a(c.target)),b.updates.ajaxLocked=!0,b.updates.requestForCredentialsModalOpen())},b.updates.maybeRequestFilesystemCredentials=function(a){b.updates.shouldRequestFilesystemCredentials&&!b.updates.ajaxLocked&&b.updates.requestFilesystemCredentials(a)},b.updates.keydown=function(c){27===c.keyCode?b.updates.requestForCredentialsModalCancel():9===c.keyCode&&("upgrade"!==c.target.id||c.shiftKey?"hostname"===c.target.id&&c.shiftKey&&(a("#upgrade").focus(),c.preventDefault()):(a("#hostname").focus(),c.preventDefault()))},b.updates.requestForCredentialsModalOpen=function(){var c=a("#request-filesystem-credentials-dialog");a("body").addClass("modal-open"),c.show(),c.find("input:enabled:first").focus(),c.on("keydown",b.updates.keydown)},b.updates.requestForCredentialsModalClose=function(){a("#request-filesystem-credentials-dialog").hide(),a("body").removeClass("modal-open"),b.updates.$elToReturnFocusToFromCredentialsModal&&b.updates.$elToReturnFocusToFromCredentialsModal.focus()},b.updates.requestForCredentialsModalCancel=function(){(b.updates.ajaxLocked||b.updates.queue.length)&&(_.each(b.updates.queue,function(a){d.trigger("credential-modal-cancel",a)}),b.updates.ajaxLocked=!1,b.updates.queue=[],b.updates.requestForCredentialsModalClose())},b.updates.showErrorInCredentialsForm=function(b){var c=a("#request-filesystem-credentials-form");c.find(".notice").remove(),c.find("#request-filesystem-credentials-title").after('<div class="notice notice-alt notice-error"><p>'+b+"</p></div>")},b.updates.credentialError=function(a,c){a=b.updates._addCallbacks(a,c),b.updates.queue.unshift({action:c,data:a}),b.updates.filesystemCredentials.available=!1,b.updates.showErrorInCredentialsForm(a.errorMessage),b.updates.requestFilesystemCredentials()},b.updates.maybeHandleCredentialError=function(a,c){return!(!b.updates.shouldRequestFilesystemCredentials||!a.errorCode||"unable_to_connect_to_filesystem"!==a.errorCode)&&(b.updates.credentialError(a,c),!0)},b.updates.isValidResponse=function(c,d){var e,f=b.updates.l10n.unknownError;if(_.isObject(c)&&!_.isFunction(c.always))return!0;switch(_.isString(c)&&"-1"===c?f=b.updates.l10n.nonceError:_.isString(c)?f=c:"undefined"!=typeof c.readyState&&0===c.readyState?f=b.updates.l10n.connectionError:_.isString(c.responseText)&&""!==c.responseText?f=c.responseText:_.isString(c.statusText)&&(f=c.statusText),d){case"update":e=b.updates.l10n.updateFailed;break;case"install":e=b.updates.l10n.installFailed;break;case"delete":e=b.updates.l10n.deleteFailed}return f=f.replace(/<[\/a-z][^<>]*>/gi,""),e=e.replace("%s",f),b.updates.addAdminNotice({id:"unknown_error",className:"notice-error is-dismissible",message:_.escape(e)}),b.updates.ajaxLocked=!1,b.updates.queue=[],a(".button.updating-message").removeClass("updating-message").removeAttr("aria-label").prop("disabled",!0).text(b.updates.l10n.updateFailedShort),a(".updating-message:not(.button):not(.thickbox)").removeClass("updating-message notice-warning").addClass("notice-error").find("p").removeAttr("aria-label").text(e),b.a11y.speak(e,"assertive"),!1},b.updates.beforeunload=function(){if(b.updates.ajaxLocked)return b.updates.l10n.beforeunload},a(function(){var e=a("#plugin-filter"),f=a("#bulk-action-form"),g=a("#request-filesystem-credentials-form"),h=a("#request-filesystem-credentials-dialog"),i=a(".plugins-php .wp-filter-search"),j=a(".plugin-install-php .wp-filter-search");c=_.extend(c,window._wpUpdatesItemCounts||{}),c.totals&&b.updates.refreshCount(),b.updates.shouldRequestFilesystemCredentials=h.length>0,h.on("submit","form",function(c){c.preventDefault(),b.updates.filesystemCredentials.ftp.hostname=a("#hostname").val(),b.updates.filesystemCredentials.ftp.username=a("#username").val(),b.updates.filesystemCredentials.ftp.password=a("#password").val(),b.updates.filesystemCredentials.ftp.connectionType=a('input[name="connection_type"]:checked').val(),b.updates.filesystemCredentials.ssh.publicKey=a("#public_key").val(),b.updates.filesystemCredentials.ssh.privateKey=a("#private_key").val(),b.updates.filesystemCredentials.fsNonce=a("#_fs_nonce").val(),b.updates.filesystemCredentials.available=!0,b.updates.ajaxLocked=!1,b.updates.queueChecker(),b.updates.requestForCredentialsModalClose()}),h.on("click",'[data-js-action="close"], .notification-dialog-background',b.updates.requestForCredentialsModalCancel),g.on("change",'input[name="connection_type"]',function(){a("#ssh-keys").toggleClass("hidden","ssh"!==a(this).val())}).change(),d.on("credential-modal-cancel",function(c,d){var e,f,g=a(".updating-message");"import"===pagenow?g.removeClass("updating-message"):"plugins"===pagenow||"plugins-network"===pagenow?"update-plugin"===d.action?e=a('tr[data-plugin="'+d.data.plugin+'"]').find(".update-message"):"delete-plugin"===d.action&&(e=a('[data-plugin="'+d.data.plugin+'"]').find(".row-actions a.delete")):"themes"===pagenow||"themes-network"===pagenow?"update-theme"===d.action?e=a('[data-slug="'+d.data.slug+'"]').find(".update-message"):"delete-theme"===d.action&&"themes-network"===pagenow?e=a('[data-slug="'+d.data.slug+'"]').find(".row-actions a.delete"):"delete-theme"===d.action&&"themes"===pagenow&&(e=a(".theme-actions .delete-theme")):e=g,e&&e.hasClass("updating-message")&&(f=e.data("originaltext"),"undefined"==typeof f&&(f=a("<p>").html(e.find("p").data("originaltext"))),e.removeClass("updating-message").html(f),"plugin-install"!==pagenow&&"plugin-install-network"!==pagenow||("update-plugin"===d.action?e.attr("aria-label",b.updates.l10n.pluginUpdateNowLabel.replace("%s",e.data("name"))):"install-plugin"===d.action&&e.attr("aria-label",b.updates.l10n.pluginInstallNowLabel.replace("%s",e.data("name"))))),b.a11y.speak(b.updates.l10n.updateCancel,"polite")}),f.on("click","[data-plugin] .update-link",function(c){var d=a(c.target),e=d.parents("tr");c.preventDefault(),d.hasClass("updating-message")||d.hasClass("button-disabled")||(b.updates.maybeRequestFilesystemCredentials(c),b.updates.$elToReturnFocusToFromCredentialsModal=e.find(".check-column input"),b.updates.updatePlugin({plugin:e.data("plugin"),slug:e.data("slug")}))}),e.on("click",".update-now",function(c){var d=a(c.target);c.preventDefault(),d.hasClass("updating-message")||d.hasClass("button-disabled")||(b.updates.maybeRequestFilesystemCredentials(c),b.updates.updatePlugin({plugin:d.data("plugin"),slug:d.data("slug")}))}),e.on("click",".install-now",function(c){var e=a(c.target);c.preventDefault(),e.hasClass("updating-message")||e.hasClass("button-disabled")||(b.updates.shouldRequestFilesystemCredentials&&!b.updates.ajaxLocked&&(b.updates.requestFilesystemCredentials(c),d.on("credential-modal-cancel",function(){var c=a(".install-now.updating-message");c.removeClass("updating-message").text(b.updates.l10n.installNow),b.a11y.speak(b.updates.l10n.updateCancel,"polite")})),b.updates.installPlugin({slug:e.data("slug")}))}),d.on("click",".importer-item .install-now",function(c){var e=a(c.target),f=a(this).data("name");c.preventDefault(),e.hasClass("updating-message")||(b.updates.shouldRequestFilesystemCredentials&&!b.updates.ajaxLocked&&(b.updates.requestFilesystemCredentials(c),d.on("credential-modal-cancel",function(){e.removeClass("updating-message").text(b.updates.l10n.installNow).attr("aria-label",b.updates.l10n.installNowLabel.replace("%s",f)),b.a11y.speak(b.updates.l10n.updateCancel,"polite")})),b.updates.installPlugin({slug:e.data("slug"),pagenow:pagenow,success:b.updates.installImporterSuccess,error:b.updates.installImporterError}))}),f.on("click","[data-plugin] a.delete",function(c){var d=a(c.target).parents("tr");c.preventDefault(),window.confirm(b.updates.l10n.aysDeleteUninstall.replace("%s",d.find(".plugin-title strong").text()))&&(b.updates.maybeRequestFilesystemCredentials(c),b.updates.deletePlugin({plugin:d.data("plugin"),slug:d.data("slug")}))}),d.on("click",".themes-php.network-admin .update-link",function(c){var d=a(c.target),e=d.parents("tr");c.preventDefault(),d.hasClass("updating-message")||d.hasClass("button-disabled")||(b.updates.maybeRequestFilesystemCredentials(c),b.updates.$elToReturnFocusToFromCredentialsModal=e.find(".check-column input"),b.updates.updateTheme({slug:e.data("slug")}))}),d.on("click",".themes-php.network-admin a.delete",function(c){var d=a(c.target).parents("tr");c.preventDefault(),window.confirm(b.updates.l10n.aysDelete.replace("%s",d.find(".theme-title strong").text()))&&(b.updates.maybeRequestFilesystemCredentials(c),b.updates.deleteTheme({slug:d.data("slug")}))}),f.on("click",'[type="submit"]:not([name="clear-recent-list"])',function(c){var e,g,h=a(c.target).siblings("select").val(),i=f.find('input[name="checked[]"]:checked'),j=0,k=0,l=[];switch(pagenow){case"plugins":case"plugins-network":e="plugin";break;case"themes-network":e="theme";break;default:return}if(!i.length)return c.preventDefault(),a("html, body").animate({scrollTop:0}),b.updates.addAdminNotice({id:"no-items-selected",className:"notice-error is-dismissible",message:b.updates.l10n.noItemsSelected});switch(h){case"update-selected":g=h.replace("selected",e);break;case"delete-selected":if(!window.confirm("plugin"===e?b.updates.l10n.aysBulkDelete:b.updates.l10n.aysBulkDeleteThemes))return void c.preventDefault();g=h.replace("selected",e);break;default:return}b.updates.maybeRequestFilesystemCredentials(c),c.preventDefault(),f.find('.manage-column [type="checkbox"]').prop("checked",!1),d.trigger("wp-"+e+"-bulk-"+h,i),i.each(function(c,d){var e=a(d),f=e.parents("tr");return"update-selected"!==h||f.hasClass("update")&&!f.find("notice-error").length?void b.updates.queue.push({action:g,data:{plugin:f.data("plugin"),slug:f.data("slug")}}):void e.prop("checked",!1)}),d.on("wp-plugin-update-success wp-plugin-update-error wp-theme-update-success wp-theme-update-error",function(c,d){var e,f,g=a('[data-slug="'+d.slug+'"]');"wp-"+d.update+"-update-success"===c.type?j++:(f=d.pluginName?d.pluginName:g.find(".column-primary strong").text(),k++,l.push(f+": "+d.errorMessage)),g.find('input[name="checked[]"]:checked').prop("checked",!1),b.updates.adminNotice=b.template("wp-bulk-updates-admin-notice"),b.updates.addAdminNotice({id:"bulk-action-notice",className:"bulk-action-notice",successes:j,errors:k,errorMessages:l,type:d.update}),e=a("#bulk-action-notice").on("click","button",function(){a(this).toggleClass("bulk-action-errors-collapsed").attr("aria-expanded",!a(this).hasClass("bulk-action-errors-collapsed")),e.find(".bulk-action-errors").toggleClass("hidden")}),k>0&&!b.updates.queue.length&&a("html, body").animate({scrollTop:0})}),d.on("wp-updates-notice-added",function(){b.updates.adminNotice=b.template("wp-updates-admin-notice")}),b.updates.queueChecker()}),j.length&&j.attr("aria-describedby","live-search-desc"),j.on("keyup input",_.debounce(function(c,d){var f,g,h=a(".plugin-install-search");f={_ajax_nonce:b.updates.ajaxNonce,s:c.target.value,tab:"search",type:a("#typeselector").val(),pagenow:pagenow},g=location.href.split("?")[0]+"?"+a.param(_.omit(f,["_ajax_nonce","pagenow"])),"keyup"===c.type&&27===c.which&&(c.target.value=""),b.updates.searchTerm===f.s&&"typechange"!==d||(e.empty(),
+b.updates.searchTerm=f.s,window.history&&window.history.replaceState&&window.history.replaceState(null,"",g),h.length||(h=a('<li class="plugin-install-search" />').append(a("<a />",{"class":"current",href:g,text:b.updates.l10n.searchResultsLabel})),a(".wp-filter .filter-links .current").removeClass("current").parents(".filter-links").prepend(h),e.prev("p").remove(),a(".plugins-popular-tags-wrapper").remove()),"undefined"!=typeof b.updates.searchRequest&&b.updates.searchRequest.abort(),a("body").addClass("loading-content"),b.updates.searchRequest=b.ajax.post("search-install-plugins",f).done(function(c){a("body").removeClass("loading-content"),e.append(c.items),delete b.updates.searchRequest,0===c.count?b.a11y.speak(b.updates.l10n.noPluginsFound):b.a11y.speak(b.updates.l10n.pluginsFound.replace("%d",c.count))}))},500)),i.length&&i.attr("aria-describedby","live-search-desc"),i.on("keyup input",_.debounce(function(c){var d,e={_ajax_nonce:b.updates.ajaxNonce,s:c.target.value,pagenow:pagenow,plugin_status:"all"};"keyup"===c.type&&27===c.which&&(c.target.value=""),b.updates.searchTerm!==e.s&&(b.updates.searchTerm=e.s,d=_.object(_.compact(_.map(location.search.slice(1).split("&"),function(a){if(a)return a.split("=")}))),e.plugin_status=d.plugin_status||"all",window.history&&window.history.replaceState&&window.history.replaceState(null,"",location.href.split("?")[0]+"?s="+e.s+"&plugin_status="+e.plugin_status),"undefined"!=typeof b.updates.searchRequest&&b.updates.searchRequest.abort(),f.empty(),a("body").addClass("loading-content"),a(".subsubsub .current").removeClass("current"),b.updates.searchRequest=b.ajax.post("search-plugins",e).done(function(c){var d=a("<span />").addClass("subtitle").html(b.updates.l10n.searchResults.replace("%s",_.escape(e.s))),g=a(".wrap .subtitle");e.s.length?g.length?g.replaceWith(d):a(".wp-header-end").before(d):(g.remove(),a(".subsubsub ."+e.plugin_status+" a").addClass("current")),a("body").removeClass("loading-content"),f.append(c.items),delete b.updates.searchRequest,0===c.count?b.a11y.speak(b.updates.l10n.noPluginsFound):b.a11y.speak(b.updates.l10n.pluginsFound.replace("%d",c.count))}))},500)),d.on("submit",".search-plugins",function(b){b.preventDefault(),a("input.wp-filter-search").trigger("input")}),d.on("click",".try-again",function(a){a.preventDefault(),j.trigger("input")}),a("#typeselector").on("change",function(){var b=a('input[name="s"]');b.val().length&&b.trigger("input","typechange")}),a("#plugin_update_from_iframe").on("click",function(b){var c,d=window.parent===window?null:window.parent;a.support.postMessage=!!window.postMessage,!1!==a.support.postMessage&&null!==d&&-1===window.parent.location.pathname.indexOf("update-core.php")&&(b.preventDefault(),c={action:"update-plugin",data:{plugin:a(this).data("plugin"),slug:a(this).data("slug")}},d.postMessage(JSON.stringify(c),window.location.origin))}),a("#plugin_install_from_iframe").on("click",function(b){var c,d=window.parent===window?null:window.parent;a.support.postMessage=!!window.postMessage,!1!==a.support.postMessage&&null!==d&&-1===window.parent.location.pathname.indexOf("index.php")&&(b.preventDefault(),c={action:"install-plugin",data:{slug:a(this).data("slug")}},d.postMessage(JSON.stringify(c),window.location.origin))}),a(window).on("message",function(c){var d,e=c.originalEvent,f=document.location.protocol+"//"+document.location.hostname;if(e.origin===f){try{d=a.parseJSON(e.data)}catch(g){return}if(d&&"undefined"!=typeof d.action)switch(d.action){case"decrementUpdateCount":b.updates.decrementCount(d.upgradeType);break;case"install-plugin":case"update-plugin":window.tb_remove(),d.data=b.updates._addCallbacks(d.data,d.action),b.updates.queue.push(d),b.updates.queueChecker()}}}),a(window).on("beforeunload",b.updates.beforeunload)})}(jQuery,window.wp,window._wpUpdatesSettings);
\ No newline at end of file
$( '#link_rel' ).val( ( isMe ) ? 'me' : inputs.substr( 0,inputs.length - 1 ) );
});
});
+
+// Privacy request action handling
+jQuery( document ).ready( function( $ ) {
+ var strings = window.privacyToolsL10n || {};
+
+ function setActionState( $action, state ) {
+ $action.children().hide();
+ $action.children( '.' + state ).show();
+ }
+
+ function clearResultsAfterRow( $requestRow ) {
+ $requestRow.removeClass( 'has-request-results' );
+
+ if ( $requestRow.next().hasClass( 'request-results' ) ) {
+ $requestRow.next().remove();
+ }
+ }
+
+ function appendResultsAfterRow( $requestRow, classes, summaryMessage, additionalMessages ) {
+ var itemList = '',
+ resultRowClasses = 'request-results';
+
+ clearResultsAfterRow( $requestRow );
+
+ if ( additionalMessages.length ) {
+ $.each( additionalMessages, function( index, value ) {
+ itemList = itemList + '<li>' + value + '</li>';
+ });
+ itemList = '<ul>' + itemList + '</ul>';
+ }
+
+ $requestRow.addClass( 'has-request-results' );
+
+ if ( $requestRow.hasClass( 'status-request-confirmed' ) ) {
+ resultRowClasses = resultRowClasses + ' status-request-confirmed';
+ }
+
+ if ( $requestRow.hasClass( 'status-request-failed' ) ) {
+ resultRowClasses = resultRowClasses + ' status-request-failed';
+ }
+
+ $requestRow.after( function() {
+ return '<tr class="' + resultRowClasses + '"><th colspan="5">' +
+ '<div class="notice inline notice-alt ' + classes + '">' +
+ '<p>' + summaryMessage + '</p>' +
+ itemList +
+ '</div>' +
+ '</td>' +
+ '</tr>';
+ });
+ }
+
+ $( '.export-personal-data-handle' ).click( function( event ) {
+
+ var $this = $( this ),
+ $action = $this.parents( '.export-personal-data' ),
+ $requestRow = $this.parents( 'tr' ),
+ requestID = $action.data( 'request-id' ),
+ nonce = $action.data( 'nonce' ),
+ exportersCount = $action.data( 'exporters-count' ),
+ sendAsEmail = $action.data( 'send-as-email' ) ? true : false;
+
+ event.preventDefault();
+ event.stopPropagation();
+
+ $action.blur();
+ clearResultsAfterRow( $requestRow );
+
+ function onExportDoneSuccess( zipUrl ) {
+ setActionState( $action, 'export-personal-data-success' );
+ if ( 'undefined' !== typeof zipUrl ) {
+ window.location = zipUrl;
+ } else if ( ! sendAsEmail ) {
+ onExportFailure( strings.noExportFile );
+ }
+ }
+
+ function onExportFailure( errorMessage ) {
+ setActionState( $action, 'export-personal-data-failed' );
+ if ( errorMessage ) {
+ appendResultsAfterRow( $requestRow, 'notice-error', strings.exportError, [ errorMessage ] );
+ }
+ }
+
+ function doNextExport( exporterIndex, pageIndex ) {
+ $.ajax(
+ {
+ url: window.ajaxurl,
+ data: {
+ action: 'wp-privacy-export-personal-data',
+ exporter: exporterIndex,
+ id: requestID,
+ page: pageIndex,
+ security: nonce,
+ sendAsEmail: sendAsEmail
+ },
+ method: 'post'
+ }
+ ).done( function( response ) {
+ var responseData = response.data;
+
+ if ( ! response.success ) {
+
+ // e.g. invalid request ID
+ onExportFailure( response.data );
+ return;
+ }
+
+ if ( ! responseData.done ) {
+ setTimeout( doNextExport( exporterIndex, pageIndex + 1 ) );
+ } else {
+ if ( exporterIndex < exportersCount ) {
+ setTimeout( doNextExport( exporterIndex + 1, 1 ) );
+ } else {
+ onExportDoneSuccess( responseData.url );
+ }
+ }
+ }).fail( function( jqxhr, textStatus, error ) {
+
+ // e.g. Nonce failure
+ onExportFailure( error );
+ });
+ }
+
+ // And now, let's begin
+ setActionState( $action, 'export-personal-data-processing' );
+ doNextExport( 1, 1 );
+ });
+
+ $( '.remove-personal-data-handle' ).click( function( event ) {
+
+ var $this = $( this ),
+ $action = $this.parents( '.remove-personal-data' ),
+ $requestRow = $this.parents( 'tr' ),
+ requestID = $action.data( 'request-id' ),
+ nonce = $action.data( 'nonce' ),
+ erasersCount = $action.data( 'erasers-count' ),
+ hasRemoved = false,
+ hasRetained = false,
+ messages = [];
+
+ event.stopPropagation();
+
+ $action.blur();
+ clearResultsAfterRow( $requestRow );
+
+ function onErasureDoneSuccess() {
+ var summaryMessage = strings.noDataFound;
+ var classes = 'notice-success';
+
+ setActionState( $action, 'remove-personal-data-idle' );
+
+ if ( false === hasRemoved ) {
+ if ( false === hasRetained ) {
+ summaryMessage = strings.noDataFound;
+ } else {
+ summaryMessage = strings.noneRemoved;
+ classes = 'notice-warning';
+ }
+ } else {
+ if ( false === hasRetained ) {
+ summaryMessage = strings.foundAndRemoved;
+ } else {
+ summaryMessage = strings.someNotRemoved;
+ classes = 'notice-warning';
+ }
+ }
+ appendResultsAfterRow( $requestRow, 'notice-success', summaryMessage, messages );
+ }
+
+ function onErasureFailure() {
+ setActionState( $action, 'remove-personal-data-failed' );
+ appendResultsAfterRow( $requestRow, 'notice-error', strings.removalError, [] );
+ }
+
+ function doNextErasure( eraserIndex, pageIndex ) {
+ $.ajax({
+ url: window.ajaxurl,
+ data: {
+ action: 'wp-privacy-erase-personal-data',
+ eraser: eraserIndex,
+ id: requestID,
+ page: pageIndex,
+ security: nonce
+ },
+ method: 'post'
+ }).done( function( response ) {
+ var responseData = response.data;
+
+ if ( ! response.success ) {
+ onErasureFailure();
+ return;
+ }
+ if ( responseData.items_removed ) {
+ hasRemoved = hasRemoved || responseData.items_removed;
+ }
+ if ( responseData.items_retained ) {
+ hasRetained = hasRetained || responseData.items_retained;
+ }
+ if ( responseData.messages ) {
+ messages = messages.concat( responseData.messages );
+ }
+ if ( ! responseData.done ) {
+ setTimeout( doNextErasure( eraserIndex, pageIndex + 1 ) );
+ } else {
+ if ( eraserIndex < erasersCount ) {
+ setTimeout( doNextErasure( eraserIndex + 1, 1 ) );
+ } else {
+ onErasureDoneSuccess();
+ }
+ }
+ }).fail( function() {
+ onErasureFailure();
+ });
+ }
+
+ // And now, let's begin
+ setActionState( $action, 'remove-personal-data-processing' );
+
+ doNextErasure( 1, 1 );
+ });
+});
+
+( function( $ ) {
+
+ // Privacy policy page, copy button.
+ $( document ).on( 'click', function( event ) {
+ var $target = $( event.target );
+ var $parent, $container, range;
+
+ if ( $target.is( 'button.privacy-text-copy' ) ) {
+ $parent = $target.parent().parent();
+ $container = $parent.find( 'div.wp-suggested-text' );
+
+ if ( ! $container.length ) {
+ $container = $parent.find( 'div.policy-text' );
+ }
+
+ if ( $container.length ) {
+ try {
+ window.getSelection().removeAllRanges();
+ range = document.createRange();
+ $container.addClass( 'hide-privacy-policy-tutorial' );
+
+ range.selectNodeContents( $container[0] );
+ window.getSelection().addRange( range );
+ document.execCommand( 'copy' );
+
+ $container.removeClass( 'hide-privacy-policy-tutorial' );
+ window.getSelection().removeAllRanges();
+ } catch ( er ) {}
+ }
+ }
+ });
+
+} ( jQuery ) );
-jQuery(document).ready(function(a){a("#link_rel").prop("readonly",!0),a("#linkxfndiv input").bind("click keyup",function(){var b=a("#me").is(":checked"),c="";a("input.valinp").each(function(){b?a(this).prop("disabled",!0).parent().addClass("disabled"):(a(this).removeAttr("disabled").parent().removeClass("disabled"),a(this).is(":checked")&&""!==a(this).val()&&(c+=a(this).val()+" "))}),a("#link_rel").val(b?"me":c.substr(0,c.length-1))})});
\ No newline at end of file
+jQuery(document).ready(function(a){a("#link_rel").prop("readonly",!0),a("#linkxfndiv input").bind("click keyup",function(){var b=a("#me").is(":checked"),c="";a("input.valinp").each(function(){b?a(this).prop("disabled",!0).parent().addClass("disabled"):(a(this).removeAttr("disabled").parent().removeClass("disabled"),a(this).is(":checked")&&""!==a(this).val()&&(c+=a(this).val()+" "))}),a("#link_rel").val(b?"me":c.substr(0,c.length-1))})}),jQuery(document).ready(function(a){function b(a,b){a.children().hide(),a.children("."+b).show()}function c(a){a.removeClass("has-request-results"),a.next().hasClass("request-results")&&a.next().remove()}function d(b,d,e,f){var g="",h="request-results";c(b),f.length&&(a.each(f,function(a,b){g=g+"<li>"+b+"</li>"}),g="<ul>"+g+"</ul>"),b.addClass("has-request-results"),b.hasClass("status-request-confirmed")&&(h+=" status-request-confirmed"),b.hasClass("status-request-failed")&&(h+=" status-request-failed"),b.after(function(){return'<tr class="'+h+'"><th colspan="5"><div class="notice inline notice-alt '+d+'"><p>'+e+"</p>"+g+"</div></td></tr>"})}var e=window.privacyToolsL10n||{};a(".export-personal-data-handle").click(function(f){function g(a){b(k,"export-personal-data-success"),"undefined"!=typeof a?window.location=a:p||h(e.noExportFile)}function h(a){b(k,"export-personal-data-failed"),a&&d(l,"notice-error",e.exportError,[a])}function i(b,c){a.ajax({url:window.ajaxurl,data:{action:"wp-privacy-export-personal-data",exporter:b,id:m,page:c,security:n,sendAsEmail:p},method:"post"}).done(function(a){var d=a.data;return a.success?void(d.done?b<o?setTimeout(i(b+1,1)):g(d.url):setTimeout(i(b,c+1))):void h(a.data)}).fail(function(a,b,c){h(c)})}var j=a(this),k=j.parents(".export-personal-data"),l=j.parents("tr"),m=k.data("request-id"),n=k.data("nonce"),o=k.data("exporters-count"),p=!!k.data("send-as-email");f.preventDefault(),f.stopPropagation(),k.blur(),c(l),b(k,"export-personal-data-processing"),i(1,1)}),a(".remove-personal-data-handle").click(function(f){function g(){var a=e.noDataFound,c="notice-success";b(k,"remove-personal-data-idle"),!1===p?!1===q?a=e.noDataFound:(a=e.noneRemoved,c="notice-warning"):!1===q?a=e.foundAndRemoved:(a=e.someNotRemoved,c="notice-warning"),d(l,"notice-success",a,r)}function h(){b(k,"remove-personal-data-failed"),d(l,"notice-error",e.removalError,[])}function i(b,c){a.ajax({url:window.ajaxurl,data:{action:"wp-privacy-erase-personal-data",eraser:b,id:m,page:c,security:n},method:"post"}).done(function(a){var d=a.data;return a.success?(d.items_removed&&(p=p||d.items_removed),d.items_retained&&(q=q||d.items_retained),d.messages&&(r=r.concat(d.messages)),void(d.done?b<o?setTimeout(i(b+1,1)):g():setTimeout(i(b,c+1)))):void h()}).fail(function(){h()})}var j=a(this),k=j.parents(".remove-personal-data"),l=j.parents("tr"),m=k.data("request-id"),n=k.data("nonce"),o=k.data("erasers-count"),p=!1,q=!1,r=[];f.stopPropagation(),k.blur(),c(l),b(k,"remove-personal-data-processing"),i(1,1)})}),function(a){a(document).on("click",function(b){var c,d,e,f=a(b.target);if(f.is("button.privacy-text-copy")&&(c=f.parent().parent(),d=c.find("div.wp-suggested-text"),d.length||(d=c.find("div.policy-text")),d.length))try{window.getSelection().removeAllRanges(),e=document.createRange(),d.addClass("hide-privacy-policy-tutorial"),e.selectNodeContents(d[0]),window.getSelection().addRange(e),document.execCommand("copy"),d.removeClass("hide-privacy-policy-tutorial"),window.getSelection().removeAllRanges()}catch(g){}})}(jQuery);
\ No newline at end of file
if ( ! is_multisite() && defined('WP_ALLOW_MULTISITE') && WP_ALLOW_MULTISITE )
$submenu['tools.php'][50] = array(__('Network Setup'), 'setup_network', 'network.php');
-$menu[80] = array( __('Settings'), 'manage_options', 'options-general.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'dashicons-admin-settings' );
- $submenu['options-general.php'][10] = array(_x('General', 'settings screen'), 'manage_options', 'options-general.php');
- $submenu['options-general.php'][15] = array(__('Writing'), 'manage_options', 'options-writing.php');
- $submenu['options-general.php'][20] = array(__('Reading'), 'manage_options', 'options-reading.php');
- $submenu['options-general.php'][25] = array(__('Discussion'), 'manage_options', 'options-discussion.php');
- $submenu['options-general.php'][30] = array(__('Media'), 'manage_options', 'options-media.php');
- $submenu['options-general.php'][40] = array(__('Permalinks'), 'manage_options', 'options-permalink.php');
+$change_notice = '';
+if ( current_user_can( 'manage_privacy_options' ) && WP_Privacy_Policy_Content::text_change_check() ) {
+ $change_notice = ' <span class="update-plugins 1"><span class="plugin-count">' . number_format_i18n( 1 ) . '</span></span>';
+}
+
+// translators: %s is the update notification bubble, if updates are available.
+$menu[80] = array( sprintf( __( 'Settings %s' ), $change_notice ), 'manage_options', 'options-general.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'dashicons-admin-settings' );
+ $submenu['options-general.php'][10] = array( _x( 'General', 'settings screen' ), 'manage_options', 'options-general.php' );
+ $submenu['options-general.php'][15] = array( __( 'Writing' ), 'manage_options', 'options-writing.php' );
+ $submenu['options-general.php'][20] = array( __( 'Reading' ), 'manage_options', 'options-reading.php' );
+ $submenu['options-general.php'][25] = array( __( 'Discussion' ), 'manage_options', 'options-discussion.php' );
+ $submenu['options-general.php'][30] = array( __( 'Media' ), 'manage_options', 'options-media.php' );
+ $submenu['options-general.php'][40] = array( __( 'Permalinks' ), 'manage_options', 'options-permalink.php' );
+ // translators: %s is the update notification bubble, if updates are available.
+ $submenu['options-general.php'][45] = array( sprintf( __( 'Privacy %s' ), $change_notice ), 'manage_privacy_options', 'privacy.php' );
$_wp_last_utility_menu = 80; // The index of the last top-level menu in the utility menu group
); ?>
</label>
<br />
+
+<label for="show_comments_cookies_opt_in">
+<input name="show_comments_cookies_opt_in" type="checkbox" id="show_comments_cookies_opt_in" value="1" <?php checked( '1', get_option( 'show_comments_cookies_opt_in' ) ); ?> />
+<?php _e( 'Show comments cookies opt-in checkbox.' ); ?>
+</label>
+<br />
+
<label for="thread_comments">
<input name="thread_comments" type="checkbox" id="thread_comments" value="1" <?php checked('1', get_option('thread_comments')); ?> />
<?php
}
$whitelist_options = array(
- 'general' => array( 'blogname', 'blogdescription', 'gmt_offset', 'date_format', 'time_format', 'start_of_week', 'timezone_string', 'WPLANG', 'new_admin_email' ),
- 'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comments_notify', 'moderation_notify', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'page_comments', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ),
- 'media' => array( 'thumbnail_size_w', 'thumbnail_size_h', 'thumbnail_crop', 'medium_size_w', 'medium_size_h', 'large_size_w', 'large_size_h', 'image_default_size', 'image_default_align', 'image_default_link_type' ),
- 'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'show_on_front', 'page_on_front', 'page_for_posts', 'blog_public' ),
- 'writing' => array( 'default_category', 'default_email_category', 'default_link_category', 'default_post_format' )
+ 'general' => array(
+ 'blogname',
+ 'blogdescription',
+ 'gmt_offset',
+ 'date_format',
+ 'time_format',
+ 'start_of_week',
+ 'timezone_string',
+ 'WPLANG',
+ 'new_admin_email',
+ ),
+ 'discussion' => array(
+ 'default_pingback_flag',
+ 'default_ping_status',
+ 'default_comment_status',
+ 'comments_notify',
+ 'moderation_notify',
+ 'comment_moderation',
+ 'require_name_email',
+ 'comment_whitelist',
+ 'comment_max_links',
+ 'moderation_keys',
+ 'blacklist_keys',
+ 'show_avatars',
+ 'avatar_rating',
+ 'avatar_default',
+ 'close_comments_for_old_posts',
+ 'close_comments_days_old',
+ 'thread_comments',
+ 'thread_comments_depth',
+ 'page_comments',
+ 'comments_per_page',
+ 'default_comments_page',
+ 'comment_order',
+ 'comment_registration',
+ 'show_comments_cookies_opt_in',
+ ),
+ 'media' => array(
+ 'thumbnail_size_w',
+ 'thumbnail_size_h',
+ 'thumbnail_crop',
+ 'medium_size_w',
+ 'medium_size_h',
+ 'large_size_w',
+ 'large_size_h',
+ 'image_default_size',
+ 'image_default_align',
+ 'image_default_link_type',
+ ),
+ 'reading' => array(
+ 'posts_per_page',
+ 'posts_per_rss',
+ 'rss_use_excerpt',
+ 'show_on_front',
+ 'page_on_front',
+ 'page_for_posts',
+ 'blog_public',
+ ),
+ 'writing' => array(
+ 'default_category',
+ 'default_email_category',
+ 'default_link_category',
+ 'default_post_format',
+ ),
);
$whitelist_options['misc'] = $whitelist_options['options'] = $whitelist_options['privacy'] = array();
wp_redirect( self_admin_url("import.php?import=" . str_replace('-importer', '', dirname($plugin))) ); // overrides the ?error=true one above and redirects to the Imports page, stripping the -importer suffix
} else if ( isset($_GET['from']) && 'press-this' == $_GET['from'] ) {
wp_redirect( self_admin_url( "press-this.php") );
+ } else if ( isset( $_GET['from'] ) && 'try-gutenberg' == $_GET['from'] ) {
+ if ( 'gutenberg/gutenberg.php' === $plugin ) {
+ wp_redirect( self_admin_url( "admin.php?page=gutenberg" ) );
+ } else {
+ wp_redirect( self_admin_url() );
+ }
} else {
wp_redirect( self_admin_url("plugins.php?activate=true&plugin_status=$status&paged=$page&s=$s") ); // overrides the ?error=true one above
}
<?php
/**
- * Privacy administration panel.
+ * Privacy Settings Screen.
*
* @package WordPress
* @subpackage Administration
/** WordPress Administration Bootstrap */
require_once( dirname( __FILE__ ) . '/admin.php' );
-$title = __( 'Privacy' );
+if ( ! current_user_can( 'manage_privacy_options' ) ) {
+ wp_die( __( 'Sorry, you are not allowed to manage privacy on this site.' ) );
+}
-list( $display_version ) = explode( '-', get_bloginfo( 'version' ) );
+$action = isset( $_POST['action'] ) ? $_POST['action'] : '';
+
+if ( ! empty( $action ) ) {
+ check_admin_referer( $action );
+
+ if ( 'set-privacy-page' === $action ) {
+ $privacy_policy_page_id = isset( $_POST['page_for_privacy_policy'] ) ? (int) $_POST['page_for_privacy_policy'] : 0;
+ update_option( 'wp_page_for_privacy_policy', $privacy_policy_page_id );
+
+ $privacy_page_updated_message = __( 'Privacy Policy page updated successfully.' );
+
+ if ( $privacy_policy_page_id ) {
+ /*
+ * Don't always link to the menu customizer:
+ *
+ * - Unpublished pages can't be selected by default.
+ * - `WP_Customize_Nav_Menus::__construct()` checks the user's capabilities.
+ * - Themes might not "officially" support menus.
+ */
+ if (
+ 'publish' === get_post_status( $privacy_policy_page_id )
+ && current_user_can( 'edit_theme_options' )
+ && current_theme_supports( 'menus' )
+ ) {
+ $privacy_page_updated_message = sprintf(
+ /* translators: %s: URL to Customizer -> Menus */
+ __( 'Privacy Policy page updated successfully. Remember to <a href="%s">update your menus</a>!' ),
+ esc_url( add_query_arg( 'autofocus[panel]', 'nav_menus', admin_url( 'customize.php' ) ) )
+ );
+ }
+ }
+
+ add_settings_error(
+ 'page_for_privacy_policy',
+ 'page_for_privacy_policy',
+ $privacy_page_updated_message,
+ 'updated'
+ );
+ } elseif ( 'create-privacy-page' === $action ) {
+
+ if ( ! class_exists( 'WP_Privacy_Policy_Content' ) ) {
+ require_once( ABSPATH . 'wp-admin/includes/misc.php' );
+ }
+
+ $privacy_policy_page_content = WP_Privacy_Policy_Content::get_default_content();
+ $privacy_policy_page_id = wp_insert_post(
+ array(
+ 'post_title' => __( 'Privacy Policy' ),
+ 'post_status' => 'draft',
+ 'post_type' => 'page',
+ 'post_content' => $privacy_policy_page_content,
+ ),
+ true
+ );
+
+ if ( is_wp_error( $privacy_policy_page_id ) ) {
+ add_settings_error(
+ 'page_for_privacy_policy',
+ 'page_for_privacy_policy',
+ __( 'Unable to create a Privacy Policy page.' ),
+ 'error'
+ );
+ } else {
+ update_option( 'wp_page_for_privacy_policy', $privacy_policy_page_id );
+
+ wp_redirect( admin_url( 'post.php?post=' . $privacy_policy_page_id . '&action=edit' ) );
+ exit;
+ }
+ }
+}
+
+// If a Privacy Policy page ID is available, make sure the page actually exists. If not, display an error.
+$privacy_policy_page_exists = false;
+$privacy_policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
+
+if ( ! empty( $privacy_policy_page_id ) ) {
+
+ $privacy_policy_page = get_post( $privacy_policy_page_id );
+
+ if ( ! $privacy_policy_page instanceof WP_Post ) {
+ add_settings_error(
+ 'page_for_privacy_policy',
+ 'page_for_privacy_policy',
+ __( 'The currently selected Privacy Policy page does not exist. Please create or select a new page.' ),
+ 'error'
+ );
+ } else {
+ if ( 'trash' === $privacy_policy_page->post_status ) {
+ add_settings_error(
+ 'page_for_privacy_policy',
+ 'page_for_privacy_policy',
+ sprintf(
+ /* translators: URL to Pages Trash */
+ __( 'The currently selected Privacy Policy page is in the trash. Please create or select a new Privacy Policy page or <a href="%s">restore the current page</a>.' ),
+ 'edit.php?post_status=trash&post_type=page'
+ ),
+ 'error'
+ );
+ } else {
+ $privacy_policy_page_exists = true;
+ }
+ }
+}
+
+$title = __( 'Privacy Settings' );
+$parent_file = 'options-general.php';
+
+require_once( ABSPATH . 'wp-admin/admin-header.php' );
-include( ABSPATH . 'wp-admin/admin-header.php' );
?>
-<div class="wrap about-wrap full-width-layout">
+<div class="wrap">
+ <h1><?php echo $title; ?></h1>
+ <h2><?php _e( 'Privacy Policy page' ); ?></h2>
+ <p>
+ <?php _e( 'As a website owner, you may need to follow national or international privacy laws. For example, you may need to create and display a Privacy Policy.' ); ?>
+ <?php _e( 'If you already have a Privacy Policy page, please select it below. If not, please create one.' ); ?>
+ </p>
+ <p>
+ <?php _e( 'The new page will include help and suggestions for your Privacy Policy.' ); ?>
+ <?php _e( 'However, it is your responsibility to use those resources correctly, to provide the information that your Privacy Policy requires, and to keep that information current and accurate.' ); ?>
+ </p>
+ <p>
+ <?php _e( 'After your Privacy Policy page is set, we suggest that you edit it.' ); ?>
+ <?php _e( 'We would also suggest reviewing your Privacy Policy from time to time, especially after installing or updating any themes or plugins. There may be changes or new suggested information for you to consider adding to your policy.' ); ?>
+ </p>
+ <?php
-<h1><?php printf( __( 'Welcome to WordPress %s' ), $display_version ); ?></h1>
+ if ( $privacy_policy_page_exists ) {
+ $edit_href = add_query_arg(
+ array(
+ 'post' => $privacy_policy_page_id,
+ 'action' => 'edit',
+ ),
+ admin_url( 'post.php' )
+ );
-<p class="about-text"><?php printf( __( 'Thank you for updating to the latest version! WordPress %s will smooth your design workflow and keep you safe from coding errors.' ), $display_version ); ?></p>
+ $view_href = get_permalink( $privacy_policy_page_id );
-<div class="wp-badge"><?php printf( __( 'Version %s' ), $display_version ); ?></div>
+ ?>
+ <p class="tools-privacy-edit"><strong>
+ <?php
-<h2 class="nav-tab-wrapper wp-clearfix">
- <a href="about.php" class="nav-tab"><?php _e( 'What’s New' ); ?></a>
- <a href="credits.php" class="nav-tab"><?php _e( 'Credits' ); ?></a>
- <a href="freedoms.php" class="nav-tab"><?php _e( 'Freedoms' ); ?></a>
- <a href="privacy.php" class="nav-tab nav-tab-active"><?php _e( 'Privacy' ); ?></a>
-</h2>
+ if ( 'publish' === get_post_status( $privacy_policy_page_id ) ) {
+ /* translators: 1: URL to edit page, 2: URL to view page */
+ printf( __( '<a href="%1$s">Edit</a> or <a href="%2$s">view</a> your Privacy Policy page content.' ), $edit_href, $view_href );
+ } else {
+ /* translators: 1: URL to edit page, 2: URL to preview page */
+ printf( __( '<a href="%1$s">Edit</a> or <a href="%2$s">preview</a> your Privacy Policy page content.' ), $edit_href, $view_href );
+ }
-<div class="about-wrap-content">
- <p class="about-description"><?php _e( 'From time to time, your WordPress site may send data to WordPress.org — including, but not limited to — the version of WordPress you are using, and a list of installed plugins and themes.' ); ?></p>
+ ?>
+ </strong></p>
+ <p>
+ <?php
- <p><?php printf( __( 'This data is used to provide general enhancements to WordPress, which includes helping to protect your site by finding and automatically installing new updates. It is also used to calculate statistics, such as those shown on the <a href="%s">WordPress.org stats page</a>.' ), 'https://wordpress.org/about/stats/' ); ?></p>
+ /* translators: 1: Privacy Policy guide URL, 2: additional link attributes, 3: accessibility text */
+ printf(
+ __( 'Need help putting together your new Privacy Policy page? <a href="%1$s" %2$s>Check out our guide%3$s</a> for recommendations on what content to include, along with policies suggested by your plugins and theme.' ),
+ admin_url( 'tools.php?wp-privacy-policy-guide' ),
+ '',
+ ''
+ );
- <p><?php printf( __( 'We take privacy and transparency very seriously. To learn more about what data we collect, and how we use it, please visit <a href="%s">WordPress.org/about/privacy</a>.' ), 'https://wordpress.org/about/privacy/' ); ?></p>
-</div>
+ ?>
+ </p>
+ <?php
+ }
+ ?>
+ <hr>
+ <table class="form-table tools-privacy-policy-page">
+ <tr>
+ <th scope="row">
+ <?php
+ if ( $privacy_policy_page_exists ) {
+ _e( 'Change your Privacy Policy page' );
+ } else {
+ _e( 'Select a Privacy Policy page' );
+ }
+ ?>
+ </th>
+ <td>
+ <?php
+ $has_pages = (bool) get_posts( array(
+ 'post_type' => 'page',
+ 'posts_per_page' => 1,
+ 'post_status' => array(
+ 'publish',
+ 'draft',
+ ),
+ ) );
+
+ if ( $has_pages ) : ?>
+ <form method="post" action="">
+ <label for="page_for_privacy_policy">
+ <?php _e( 'Select an existing page:' ); ?>
+ </label>
+ <input type="hidden" name="action" value="set-privacy-page" />
+ <?php
+ wp_dropdown_pages(
+ array(
+ 'name' => 'page_for_privacy_policy',
+ 'show_option_none' => __( '— Select —' ),
+ 'option_none_value' => '0',
+ 'selected' => $privacy_policy_page_id,
+ 'post_status' => array( 'draft', 'publish' ),
+ )
+ );
+ wp_nonce_field( 'set-privacy-page' );
+
+ submit_button( __( 'Use This Page' ), 'primary', 'submit', false, array( 'id' => 'set-page' ) );
+ ?>
+ </form>
+ <?php endif; ?>
+
+ <form class="wp-create-privacy-page" method="post" action="">
+ <input type="hidden" name="action" value="create-privacy-page" />
+ <span>
+ <?php
+ if ( $has_pages ) {
+ _e( 'Or:' );
+ } else {
+ _e( 'There are no pages.' );
+ }
+ ?>
+ </span>
+ <?php
+ wp_nonce_field( 'create-privacy-page' );
+
+ submit_button( __( 'Create New Page' ), 'primary', 'submit', false, array( 'id' => 'create-page' ) );
+ ?>
+ </form>
+ </td>
+ </tr>
+ </table>
</div>
-<?php include( ABSPATH . 'wp-admin/admin-footer.php' ); ?>
+<?php
+
+include( ABSPATH . 'wp-admin/admin-footer.php' );
/** WordPress Administration Bootstrap */
require_once( dirname( __FILE__ ) . '/admin.php' );
-$title = __('Tools');
+$is_privacy_guide = ( isset( $_GET['wp-privacy-policy-guide'] ) && current_user_can( 'manage_privacy_options' ) );
-get_current_screen()->add_help_tab( array(
- 'id' => 'converter',
- 'title' => __('Categories and Tags Converter'),
- 'content' => '<p>' . __('Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '</p>' .
- '<p>' . __( 'The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin & Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa.' ) . '</p>',
-) );
+if ( $is_privacy_guide ) {
+ $title = __( 'Privacy Policy Guide' );
-get_current_screen()->set_help_sidebar(
- '<p><strong>' . __('For more information:') . '</strong></p>' .
- '<p>' . __('<a href="https://codex.wordpress.org/Tools_Screen">Documentation on Tools</a>') . '</p>' .
- '<p>' . __('<a href="https://wordpress.org/support/">Support Forums</a>') . '</p>'
-);
+ // "Borrow" xfn.js for now so we don't have to create new files.
+ wp_enqueue_script( 'xfn' );
+
+} else {
+
+ $title = __('Tools');
+
+ get_current_screen()->add_help_tab( array(
+ 'id' => 'converter',
+ 'title' => __('Categories and Tags Converter'),
+ 'content' => '<p>' . __('Categories have hierarchy, meaning that you can nest sub-categories. Tags do not have hierarchy and cannot be nested. Sometimes people start out using one on their posts, then later realize that the other would work better for their content.' ) . '</p>' .
+ '<p>' . __( 'The Categories and Tags Converter link on this screen will take you to the Import screen, where that Converter is one of the plugins you can install. Once that plugin is installed, the Activate Plugin & Run Importer link will take you to a screen where you can choose to convert tags into categories or vice versa.' ) . '</p>',
+ ) );
+
+ get_current_screen()->set_help_sidebar(
+ '<p><strong>' . __('For more information:') . '</strong></p>' .
+ '<p>' . __('<a href="https://codex.wordpress.org/Tools_Screen">Documentation on Tools</a>') . '</p>' .
+ '<p>' . __('<a href="https://wordpress.org/support/">Support Forums</a>') . '</p>'
+ );
+}
require_once( ABSPATH . 'wp-admin/admin-header.php' );
<div class="wrap">
<h1><?php echo esc_html( $title ); ?></h1>
<?php
-if ( current_user_can( 'import' ) ) :
-$cats = get_taxonomy('category');
-$tags = get_taxonomy('post_tag');
-if ( current_user_can($cats->cap->manage_terms) || current_user_can($tags->cap->manage_terms) ) : ?>
-<div class="card">
- <h2 class="title"><?php _e( 'Categories and Tags Converter' ) ?></h2>
- <p><?php printf( __('If you want to convert your categories to tags (or vice versa), use the <a href="%s">Categories and Tags Converter</a> available from the Import screen.'), 'import.php' ); ?></p>
-</div>
-<?php
-endif;
-endif;
-/**
- * Fires at the end of the Tools Administration screen.
- *
- * @since 2.8.0
- */
-do_action( 'tool_box' );
+if ( $is_privacy_guide ) {
+ ?>
+ <div class="wp-privacy-policy-guide">
+ <?php WP_Privacy_Policy_Content::privacy_policy_guide(); ?>
+ </div>
+ <?php
+
+} else {
+
+ if ( current_user_can( 'import' ) ) :
+ $cats = get_taxonomy('category');
+ $tags = get_taxonomy('post_tag');
+ if ( current_user_can($cats->cap->manage_terms) || current_user_can($tags->cap->manage_terms) ) : ?>
+ <div class="card">
+ <h2 class="title"><?php _e( 'Categories and Tags Converter' ) ?></h2>
+ <p><?php printf( __('If you want to convert your categories to tags (or vice versa), use the <a href="%s">Categories and Tags Converter</a> available from the Import screen.'), 'import.php' ); ?></p>
+ </div>
+ <?php
+ endif;
+ endif;
+
+ /**
+ * Fires at the end of the Tools Administration screen.
+ *
+ * @since 2.8.0
+ */
+ do_action( 'tool_box' );
+}
?>
</div>
<?php
}
$user = wp_get_current_user();
+$cookies_consent = ( isset( $_POST['wp-comment-cookies-consent'] ) );
/**
* Perform other actions when comment cookies are set.
*
* @since 3.4.0
+ * @since 4.9.6 The `$cookies_consent` parameter was added.
*
- * @param WP_Comment $comment Comment object.
- * @param WP_User $user User object. The user may not exist.
+ * @param WP_Comment $comment Comment object.
+ * @param WP_User $user Comment author's user object. The user may not exist.
+ * @param boolean $cookies_consent Comment author's consent to store cookies.
*/
-do_action( 'set_comment_cookies', $comment, $user );
+do_action( 'set_comment_cookies', $comment, $user, $cookies_consent );
$location = empty( $_POST['redirect_to'] ) ? get_comment_link( $comment ) : $_POST['redirect_to'] . '#comment-' . $comment->comment_ID;
-/*! elementor - v2.0.10 - 08-05-2018 */
+/*! elementor - v2.2.1 - 03-09-2018 */
.elementor-screen-only,
.screen-reader-text,
.screen-reader-text span,
.dialog-type-lightbox .dialog-widget-content {
margin: auto;
width: 375px; }
+ .dialog-type-lightbox .dialog-header {
+ padding: 20px 0;
+ font-weight: 500; }
.dialog-type-lightbox .dialog-message {
- padding: 0 20px;
+ padding: 0 20px 20px;
min-height: 50px; }
- .dialog-type-lightbox .dialog-widget-header, .dialog-type-lightbox .dialog-message {
+ .dialog-type-lightbox .dialog-header, .dialog-type-lightbox .dialog-message {
text-align: center; }
.dialog-type-lightbox .dialog-buttons-wrapper {
border-top: 1px solid #e6e9ec;
.dialog-type-lightbox .dialog-buttons-wrapper > button::-moz-focus-inner {
border: 0; }
-.dialog-widget-header {
- padding: 20px 0;
- font-weight: 500; }
-
.dialog-close-button {
cursor: pointer;
position: absolute;
.dialog-close-button:not(:hover) {
opacity: .4; }
-.dialog-lightbox-widget .dialog-widget-header,
-.dialog-confirm-widget .dialog-widget-header {
+.dialog-lightbox-widget .dialog-header,
+.dialog-confirm-widget .dialog-header {
font-size: 15px;
color: #495157; }
line-height: 37px; }
.elementor-button {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
text-transform: uppercase;
outline: none;
border: none;
margin-left: 10px; }
.elementor-templates-modal .dialog-widget-content {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
background-color: #f1f3f5;
width: 100%; }
@media (max-width: 1439px) {
.elementor-templates-modal .dialog-widget-content {
max-width: 1200px; } }
-.elementor-templates-modal .dialog-widget-header {
+.elementor-templates-modal .dialog-header {
padding: 0;
background-color: #fff;
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
overflow: auto;
padding: 25px 30px 30px; }
+.elementor-templates-modal .dialog-content {
+ height: 100%; }
+
+.elementor-templates-modal .dialog-loading {
+ display: none; }
+
.elementor-templates-modal__header {
display: -webkit-box;
display: -webkit-flex;
align-items: center; }
.elementor-templates-modal__header__logo__icon-wrapper {
padding: 4px 7px 6px;
- background-image: -webkit-linear-gradient(225deg, #EF295A, #434363);
- background-image: -o-linear-gradient(225deg, #EF295A, #434363);
- background-image: linear-gradient(-135deg, #EF295A, #434363);
+ background-image: -webkit-linear-gradient(225deg, #f2295b, #434363);
+ background-image: -o-linear-gradient(225deg, #f2295b, #434363);
+ background-image: linear-gradient(-135deg, #f2295b, #434363);
-webkit-border-radius: 2px;
border-radius: 2px;
margin-left: 10px; }
cursor: pointer; }
.elementor-templates-modal__header__item > i:not(:hover) {
color: #a4afb7; }
- .elementor-templates-modal__header__close-modal {
+ .elementor-templates-modal__header__close--normal {
width: 45px;
border-right: 1px solid #e6e9ec; }
- .elementor-templates-modal__header__close-modal i {
+ .elementor-templates-modal__header__close--normal i {
font-size: 18px; }
+ .elementor-templates-modal__header__close--skip {
+ padding: 10px;
+ padding-right: 20px;
+ margin-left: 10px;
+ color: #fff;
+ background-color: #a4afb7;
+ font-size: 11px;
+ font-weight: normal;
+ line-height: 1;
+ text-transform: uppercase;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ cursor: pointer; }
+ .elementor-templates-modal__header__close--skip > i {
+ font-size: inherit;
+ padding-right: 10px;
+ margin-right: 15px;
+ border-right: 1px solid; }
+ .elementor-templates-modal__header__close--skip > i:not(:hover) {
+ color: #fff; }
+
+#adminmenu #toplevel_page_elementor div.wp-menu-image:before,
+#adminmenu #toplevel_page_edit-post_type-elementor_library div.wp-menu-image:before {
+ content: "\e801";
+ font-family: eicons;
+ font-size: 18px;
+ margin-top: 1px; }
+
+#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"],
+#adminmenu #toplevel_page_edit-post_type-elementor_library a[href="admin.php?page=go_elementor_pro"] {
+ color: #d54e21; }
+
+#adminmenu #toplevel_page_elementor .dashicons.dashicons-star-filled,
+#adminmenu #toplevel_page_edit-post_type-elementor_library .dashicons.dashicons-star-filled {
+ height: auto; }
+
+.elementor-plugins-gopro {
+ color: #39b54a;
+ font-weight: bold; }
+
+.e-logo-wrapper {
+ display: inline-block;
+ padding: .75em;
+ background-image: -webkit-linear-gradient(225deg, #EF295A, #434363);
+ background-image: -o-linear-gradient(225deg, #EF295A, #434363);
+ background-image: linear-gradient(-135deg, #EF295A, #434363);
+ -webkit-border-radius: 7.5%;
+ border-radius: 7.5%;
+ line-height: 1; }
+ .e-logo-wrapper i {
+ color: #ffffff;
+ font-size: 1em; }
+
+#elementor-switch-mode {
+ margin: 15px 0; }
+
+#elementor-switch-mode-button,
+#elementor-editor-button {
+ outline: none;
+ cursor: pointer; }
+ #elementor-switch-mode-button i,
+ #elementor-editor-button i {
+ margin-left: 3px;
+ font-size: 19px; }
body.elementor-editor-active .elementor-switch-mode-off {
display: none; }
-ms-transform: translateY(1px);
transform: translateY(1px); }
-body.elementor-editor-active #elementor-editor {
- display: table; }
-
body.elementor-editor-active #postdivrich {
display: none !important; }
+body.elementor-editor-active .editor-block-list__layout {
+ display: none; }
+
body.elementor-editor-inactive .elementor-switch-mode-on {
display: none; }
body.elementor-editor-inactive #elementor-editor {
display: none; }
-#adminmenu #toplevel_page_elementor div.wp-menu-image:before,
-#adminmenu #toplevel_page_edit-post_type-elementor_library div.wp-menu-image:before {
- content: "\e800";
- font-family: eicons;
- font-size: 14px;
- margin-top: 3px; }
+body.elementor-editor-active .editor-block-list__layout {
+ display: none; }
-#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"],
-#adminmenu #toplevel_page_edit-post_type-elementor_library a[href="admin.php?page=go_elementor_pro"] {
- color: #d54e21; }
+body.elementor-editor-active .edit-post-layout__content .edit-post-visual-editor {
+ -webkit-flex-basis: auto;
+ -ms-flex-preferred-size: auto;
+ flex-basis: auto; }
-#adminmenu #toplevel_page_elementor .dashicons.dashicons-star-filled,
-#adminmenu #toplevel_page_edit-post_type-elementor_library .dashicons.dashicons-star-filled {
- height: auto; }
-
-.elementor-plugins-gopro {
- color: #39b54a;
- font-weight: bold; }
+body.elementor-editor-active #elementor-editor {
+ margin-bottom: 50px; }
-#elementor-switch-mode {
- margin: 15px 0; }
+body.elementor-editor-active .edit-post-text-editor__body .editor-post-text-editor {
+ display: none; }
-#elementor-editor-button {
- outline: none;
- cursor: pointer; }
- #elementor-editor-button .eicon-elementor {
- margin-left: 5px; }
+body .gutenberg #elementor-switch-mode {
+ margin: 0 15px; }
+ body .gutenberg #elementor-switch-mode .button {
+ margin: 2px;
+ height: 33px;
+ font-size: 13px;
+ line-height: 1; }
+ body .gutenberg #elementor-switch-mode .button i {
+ font-size: 125%;
+ padding-left: 5px; }
.elementor-button {
font-size: 13px;
padding: 15px 40px; }
#elementor-editor {
- background-color: #F7F7F7;
- border: 1px solid #DDD;
height: 300px;
width: 100%;
-webkit-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease; }
- #elementor-editor:hover {
- background-color: #ffffff; }
+ #elementor-editor .elementor-loader-wrapper {
+ position: absolute;
+ width: 300px;
+ left: 50%;
+ top: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ #elementor-editor .elementor-loader {
+ -webkit-border-radius: 7px;
+ border-radius: 7px;
+ padding: 40px;
+ height: 150px;
+ width: 150px;
+ background-color: rgba(255, 255, 255, 0.9);
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02);
+ box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); }
+ #elementor-editor .elementor-loader-boxes {
+ height: 100%;
+ width: 100%;
+ position: relative; }
#elementor-editor .elementor-loader-box {
position: absolute;
+ background-color: #e6e9ec;
-webkit-animation: load 1.8s linear infinite;
animation: load 1.8s linear infinite; }
#elementor-editor .elementor-loader-box:nth-of-type(1) {
opacity: 1; }
100% {
opacity: .3; } }
- #elementor-editor .elementor-loader-box {
- background-color: #a4afb7; }
+ #elementor-editor .elementor-loading-title {
+ color: #a4afb7;
+ text-align: center;
+ text-transform: uppercase;
+ margin-top: 30px;
+ letter-spacing: 7px;
+ font-size: 10px;
+ width: 100%; }
#elementor-go-to-edit-page-link {
- display: table-cell;
- vertical-align: middle;
- text-align: center;
- text-decoration: none; }
+ height: 100%;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ border: 1px solid #DDD;
+ background-color: #F7F7F7;
+ text-decoration: none;
+ position: relative;
+ font-family: Sans-serif; }
+ #elementor-go-to-edit-page-link:hover {
+ background-color: #ffffff; }
+ #elementor-go-to-edit-page-link:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none; }
#elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button {
display: none; }
#elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper {
display: none; }
-.elementor-loader-wrapper {
- margin: auto;
- width: 80px; }
-
-.elementor-loader {
- height: 80px;
- position: relative; }
-
-.elementor-loading-title {
- color: #a4afb7;
- text-transform: uppercase;
- margin-top: 15px;
- font-size: 11px;
- letter-spacing: 5px; }
-
.elementor-button-spinner:before {
font: normal 20px/.5 dashicons;
speak: none;
._elementor_settings_update_time {
display: none; }
+.e-getting-started {
+ max-width: 900px;
+ padding: 2.5em 0;
+ margin: auto;
+ text-align: center; }
+ .e-getting-started__header {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); }
+ .e-getting-started__header .e-logo-wrapper {
+ font-size: 10px;
+ margin-left: 10px; }
+ .e-getting-started__title {
+ padding: 0 15px;
+ font-weight: 600;
+ text-transform: uppercase;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .e-getting-started__skip {
+ border-right: 1px solid #eee;
+ font-size: 16px;
+ color: inherit; }
+ .e-getting-started__skip i {
+ padding: 15px; }
+ .e-getting-started__content {
+ padding: 50px; }
+ .e-getting-started__content h2 {
+ font-size: 2em;
+ margin-top: 0; }
+ .e-getting-started__content--narrow {
+ max-width: 500px;
+ margin: auto; }
+ .e-getting-started__video {
+ margin: 40px 0 60px; }
+ .e-getting-started__video iframe {
+ -webkit-box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.15);
+ box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.15); }
+ .e-getting-started__actions .button-primary {
+ margin-left: 20px; }
+
/*= Elementor Message
---------------------------------------*/
.notice.elementor-message {
- border-right-color: #B7084E !important;
+ border: none;
padding: 20px; }
.notice.elementor-message .elementor-message-inner {
display: table;
display: table-cell;
vertical-align: middle; }
.notice.elementor-message .elementor-message-icon {
- color: #B7084E;
- font-size: 40px;
+ font-size: 20px;
width: 40px; }
.notice.elementor-message .elementor-message-content {
padding: 0 20px; }
.notice.elementor-message .elementor-message-action {
text-align: left; }
.notice.elementor-message .elementor-message-action .elementor-button {
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #fff;
border-color: #7c1337;
-webkit-box-shadow: 0 1px 0 #7c1337;
-webkit-transform: translateY(1px);
-ms-transform: translateY(1px);
transform: translateY(1px); }
+ .notice.elementor-message .elementor-message-actions {
+ margin-top: 10px; }
+ .notice.elementor-message .elementor-message-actions .button.button-primary {
+ margin-left: 5px; }
@media (min-width: 1200px) {
.elementor-message-action {
-o-transition: all 0.5s;
transition: all 0.5s; }
-#elementor-deactivate-feedback-modal .dialog-widget-header {
+#elementor-deactivate-feedback-modal .dialog-header {
padding: 18px 15px;
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
#elementor-deactivate-feedback-modal .dialog-buttons-wrapper {
border-top: none;
text-align: right;
- padding: 20px 30px 30px; }
+ padding: 20px 30px 30px;
+ overflow: hidden; }
#elementor-deactivate-feedback-modal .dialog-submit {
- background-color: #B7084E;
+ background-color: #D30C5C;
-webkit-border-radius: 3px;
border-radius: 3px;
color: #fff;
line-height: 1;
padding: 12px 20px;
- font-size: 14px;
+ font-size: 13px;
width: 180px;
height: 38px; }
#elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before {
float: left;
width: auto; }
+#elementor-deactivate-feedback-modal[data-feedback-selected="elementor_pro"] .elementor-feedback-text {
+ color: #b01b1b;
+ padding: 0; }
+
+#elementor-deactivate-feedback-modal[data-feedback-selected="elementor_pro"] .dialog-submit {
+ display: none; }
+
#elementor-deactivate-feedback-dialog-header i {
- color: #B7084E;
+ color: #D30C5C;
font-size: 19px; }
#elementor-deactivate-feedback-dialog-header-title {
display: none; }
.elementor-maintenance-mode-error {
- color: red; }
+ color: red;
+ line-height: 1.6;
+ display: none; }
#e-dashboard-overview .dashicons {
vertical-align: middle;
vertical-align: middle; }
#e-dashboard-overview .e-overview__logo {
- color: #B7084E;
- font-size: 40px;
- width: 40px; }
+ width: 30px; }
#e-dashboard-overview .e-overview__versions {
padding: 0 10px;
margin-bottom: 2em; }
#elementor-new-template-modal .dialog-message {
+ max-height: 70vh; }
+
+#elementor-new-template-dialog-content {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
+ height: 100%;
text-align: right;
padding: 0 120px;
color: #6d7882; }
align-items: center;
font-size: 15px; }
#elementor-new-template__take_a_tour i {
- color: #EF295A;
+ color: #f2295b;
font-size: 30px; }
#elementor-new-template__take_a_tour a {
color: #6d7882;
#elementor-new-template__form .elementor-form-field select:focus {
border-color: #a4afb7; }
#elementor-new-template__form .elementor-form-field__select {
+ appearance: none;
-webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
+ -moz-appearance: none;
cursor: pointer; }
#elementor-new-template__form .elementor-form-field__select__wrapper {
position: relative; }
-/*! elementor - v2.0.10 - 08-05-2018 */
-.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-message{padding:0 20px;min-height:50px}.dialog-type-lightbox .dialog-message,.dialog-type-lightbox .dialog-widget-header{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-widget-header{padding:20px 0;font-weight:500}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-widget-header,.dialog-lightbox-widget .dialog-widget-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-left:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-button{text-transform:uppercase;outline:none;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-left:10px}.elementor-templates-modal .dialog-widget-content{background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-widget-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding:25px 30px 30px}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{font-size:15px;line-height:1;text-transform:uppercase;color:#495157;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:right;padding-right:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#ef295a,#434363);background-image:-o-linear-gradient(225deg,#ef295a,#434363);background-image:linear-gradient(-135deg,#ef295a,#434363);-webkit-border-radius:2px;border-radius:2px;margin-left:10px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close-modal{width:45px;border-right:1px solid #e6e9ec}.elementor-templates-modal__header__close-modal i{font-size:18px}body.elementor-editor-active .elementor-switch-mode-off{display:none}body.elementor-editor-active #elementor-switch-mode-button{background-color:#f7f7f7;color:#555;border-color:#ccc;-webkit-box-shadow:0 1px 0 #ccc!important;box-shadow:0 1px 0 #ccc!important;text-shadow:unset}body.elementor-editor-active #elementor-switch-mode-button:hover{background-color:#e9e9e9}body.elementor-editor-active #elementor-switch-mode-button:active{-webkit-box-shadow:inset 0 1px 0 #ccc;box-shadow:inset 0 1px 0 #ccc;-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px)}body.elementor-editor-active #elementor-editor{display:table}body.elementor-editor-active #postdivrich{display:none!important}body.elementor-editor-inactive #elementor-editor,body.elementor-editor-inactive .elementor-switch-mode-on{display:none}#adminmenu #toplevel_page_edit-post_type-elementor_library div.wp-menu-image:before,#adminmenu #toplevel_page_elementor div.wp-menu-image:before{content:"\e800";font-family:eicons;font-size:14px;margin-top:3px}#adminmenu #toplevel_page_edit-post_type-elementor_library a[href="admin.php?page=go_elementor_pro"],#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]{color:#d54e21}#adminmenu #toplevel_page_edit-post_type-elementor_library .dashicons.dashicons-star-filled,#adminmenu #toplevel_page_elementor .dashicons.dashicons-star-filled{height:auto}.elementor-plugins-gopro{color:#39b54a;font-weight:700}#elementor-switch-mode{margin:15px 0}#elementor-editor-button{outline:none;cursor:pointer}#elementor-editor-button .eicon-elementor{margin-left:5px}.elementor-button{font-size:13px;text-decoration:none;padding:15px 40px}#elementor-editor{background-color:#f7f7f7;border:1px solid #ddd;height:300px;width:100%;-webkit-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}#elementor-editor:hover{background-color:#fff}#elementor-editor .elementor-loader-box{position:absolute;-webkit-animation:load 1.8s linear infinite;animation:load 1.8s linear infinite}#elementor-editor .elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}#elementor-editor .elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}#elementor-editor .elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}#elementor-editor .elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}#elementor-editor .elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}#elementor-editor .elementor-loader-box{background-color:#a4afb7}#elementor-go-to-edit-page-link{display:table-cell;vertical-align:middle;text-align:center;text-decoration:none}#elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button,#elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper{display:none}.elementor-loader-wrapper{margin:auto;width:80px}.elementor-loader{height:80px;position:relative}.elementor-loading-title{color:#a4afb7;text-transform:uppercase;margin-top:15px;font-size:11px;letter-spacing:5px}.elementor-button-spinner:before{font:normal 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:8px;right:-4px;position:relative;vertical-align:top;content:"\f463"}.elementor-button-spinner.loading:before{-webkit-animation:rotation 1s infinite linear;animation:rotation 1s infinite linear}.elementor-button-spinner.success:before{content:"\f147";color:#46b450}.elementor-blank_state{padding:5em 0;margin:auto;max-width:520px;text-align:center;color:#6d7882}.elementor-blank_state i{font-size:50px;color:#a4afb7}.elementor-blank_state h2{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:32px;font-weight:300;color:inherit;margin:50px 0 35px;line-height:1.2}.elementor-blank_state p{font-size:16px;font-weight:400;color:#a4afb7;margin-bottom:40px}.elementor-blank_state .elementor-button{display:inline-block}#available-widgets [class*=elementor-template] .widget-title:before{content:"\e801";font-family:eicons;font-size:17px}.elementor-settings-form-page{padding-top:30px}._elementor_settings_update_time,.elementor-settings-form-page:not(.elementor-active){display:none}.notice.elementor-message{border-right-color:#b7084e!important;padding:20px}.notice.elementor-message .elementor-message-inner{display:table;width:100%}.notice.elementor-message .elementor-message-inner .elementor-message-action,.notice.elementor-message .elementor-message-inner .elementor-message-content,.notice.elementor-message .elementor-message-inner .elementor-message-icon{display:table-cell;vertical-align:middle}.notice.elementor-message .elementor-message-icon{color:#b7084e;font-size:40px;width:40px}.notice.elementor-message .elementor-message-content{padding:0 20px}.notice.elementor-message p{padding:0;margin:0}.notice.elementor-message h3{margin:0 0 5px}.notice.elementor-message .elementor-message-action{text-align:left}.notice.elementor-message .elementor-message-action .elementor-button{background-color:#b7084e;color:#fff;border-color:#7c1337;-webkit-box-shadow:0 1px 0 #7c1337;box-shadow:0 1px 0 #7c1337;padding:5px 30px;height:auto;line-height:20px;text-transform:capitalize}.notice.elementor-message .elementor-message-action .elementor-button i{padding-left:5px}.notice.elementor-message .elementor-message-action .elementor-button:hover{background-color:#a0124a}.notice.elementor-message .elementor-message-action .elementor-button:active{-webkit-box-shadow:inset 0 1px 0 #7c1337;box-shadow:inset 0 1px 0 #7c1337;-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px)}@media (min-width:1200px){.elementor-message-action{padding-left:10px}}@media (max-width:600px){.notice.elementor-message{padding:20px}.notice.elementor-message .elementor-message-inner{display:block;text-align:center}.notice.elementor-message .elementor-message-inner .elementor-message-action,.notice.elementor-message .elementor-message-inner .elementor-message-content,.notice.elementor-message .elementor-message-inner .elementor-message-icon{display:block}.notice.elementor-message .elementor-message-inner .elementor-message-action{text-align:center}.notice.elementor-message .elementor-message-inner .elementor-message-icon{width:auto}.notice.elementor-message .elementor-message-inner .elementor-message-content{padding:10px 0}}#elementor-system-info{padding:15px}#elementor-system-info .elementor-system-info-section{margin-bottom:10px}#elementor-system-info .elementor-system-info-section>.elementor-system-info-report-name{padding-left:10px;border-bottom:1px solid #e1e1e1}#elementor-system-info .elementor-system-info-section .widefat{white-space:pre}#elementor-system-info .elementor-system-info-report-name{text-transform:uppercase;font-size:14px;margin:0;line-height:2}#elementor-system-info .elementor-system-info-report-row{overflow:hidden;padding:5px 0}#elementor-system-info .elementor-system-info-report-row>*{float:left}#elementor-system-info .elementor-system-info-field-recommendation,#elementor-system-info .elementor-system-info-report-field{padding-left:10px;color:#7f7f7f}#elementor-system-info .elementor-system-info-report-fields{padding-left:20px}#elementor-system-info .elementor-system-info-plugin-name{color:#000}#elementor-system-info .elementor-system-info-plugin-properties{padding:10px}#elementor-system-info #elementor-system-info-raw-code{width:100%;height:200px}#elementor-system-info #elementor-system-info-raw-code-label{padding:5px;display:block}#elementor-system-info .elementor-warning td:first-child{border-right:3px solid #fcb92c}@-webkit-keyframes elementor-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes elementor-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}#elementor-deactivate-feedback-dialog-wrapper{display:none}#elementor-deactivate-feedback-modal .dialog-widget-content{width:550px}#elementor-deactivate-feedback-modal .dialog-close-button{-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}#elementor-deactivate-feedback-modal .dialog-widget-header{padding:18px 15px;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);text-align:right}#elementor-deactivate-feedback-modal .dialog-message{padding:30px 30px 0;text-align:right}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input{float:right;margin:0 0 0 15px;-webkit-box-shadow:none;box-shadow:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input:not(:checked)~.elementor-feedback-text{display:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-label{display:block;font-size:13px;color:#6d7882}#elementor-deactivate-feedback-modal .elementor-feedback-text{margin:10px 30px 0 0;padding:5px;font-size:13px;-webkit-box-shadow:none;box-shadow:none;background-color:#fff;width:92%}#elementor-deactivate-feedback-modal .dialog-buttons-wrapper{border-top:none;text-align:right;padding:20px 30px 30px}#elementor-deactivate-feedback-modal .dialog-submit{background-color:#b7084e;-webkit-border-radius:3px;border-radius:3px;color:#fff;line-height:1;padding:12px 20px;font-size:14px;width:180px;height:38px}#elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before{display:inline-block;content:"\f463";font:18px dashicons;-webkit-animation:elementor-rotation 2s infinite linear;animation:elementor-rotation 2s infinite linear}#elementor-deactivate-feedback-modal .dialog-skip{font-size:12px;color:#a4afb7;background:none;float:left;width:auto}#elementor-deactivate-feedback-dialog-header i{color:#b7084e;font-size:19px}#elementor-deactivate-feedback-dialog-header-title{font-size:15px;text-transform:uppercase;font-weight:700;padding-right:5px}#elementor-deactivate-feedback-dialog-form-caption{font-weight:700;font-size:15px;color:#495157;line-height:1.4}#elementor-deactivate-feedback-dialog-form-body{padding-top:30px}.elementor-deactivate-feedback-dialog-input-wrapper{line-height:1.3;overflow:hidden;margin-bottom:15px}#elementor-hidden-area{display:none}#elementor-import-template-trigger{cursor:pointer}#elementor-import-template-area{display:none;margin:50px 0 30px;text-align:center}#elementor-import-template-form{display:inline-block;margin-top:30px;padding:30px 50px;background-color:#fff;border:1px solid #e5e5e5}#elementor-import-template-title{font-size:18px;color:#555d66}.form-table:not(.elementor-maintenance-mode-is-enabled) .elementor-default-hide{display:none}.elementor-maintenance-mode-error{color:red}#e-dashboard-overview .dashicons{vertical-align:middle;font-size:17px}#e-dashboard-overview .e-overview__header{display:table;width:100%;-webkit-box-shadow:0 5px 8px rgba(0,0,0,.05);box-shadow:0 5px 8px rgba(0,0,0,.05);margin:0 -12px 8px;padding:0 12px 12px}#e-dashboard-overview .e-overview__create,#e-dashboard-overview .e-overview__logo,#e-dashboard-overview .e-overview__versions{display:table-cell;vertical-align:middle}#e-dashboard-overview .e-overview__logo{color:#b7084e;font-size:40px;width:40px}#e-dashboard-overview .e-overview__versions{padding:0 10px;font-size:.9em;line-height:1.5}#e-dashboard-overview .e-overview__version{display:block}#e-dashboard-overview .e-overview__create{text-align:left}#e-dashboard-overview .e-overview__post{margin-top:10px}#e-dashboard-overview .e-overview__post-link{display:inline-block}#e-dashboard-overview .e-overview__badge{background:#39b54a;color:#fff;font-size:.75em;padding:3px 6px;-webkit-border-radius:3px;border-radius:3px;text-transform:uppercase}#e-dashboard-overview .e-overview__post-description{margin:0 0 1.5em}#e-dashboard-overview .e-overview__recently-edited li{color:#72777c}#e-dashboard-overview .e-overview__feed{font-size:14px;font-weight:500}#e-dashboard-overview .e-overview__feed .e-overview__post-link{padding-bottom:5px}#e-dashboard-overview .e-overview__feed .e-overview__heading,#e-dashboard-overview .e-overview__recently-edited .e-overview__heading{font-weight:700;border-bottom:1px solid #eee;margin:0 -12px;padding:6px 12px}#e-dashboard-overview .e-overview__footer{margin:0 -12px -12px;padding:12px;border-top:1px solid #eee}#e-dashboard-overview .e-overview__footer ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;list-style:none;margin:0;padding:0}#e-dashboard-overview .e-overview__footer ul li{padding:0 10px;margin:0;border-right:1px solid #ddd}#e-dashboard-overview .e-overview__footer ul li:first-child{padding-right:0;border:none}#e-dashboard-overview .e-overview__go-pro a{color:#fcb92c;font-weight:500}.post-type-elementor_library #elementor-template-library-tabs-wrapper{padding-top:2em;margin-bottom:2em}#elementor-new-template-modal .dialog-message{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:right;padding:0 120px;color:#6d7882}#elementor-new-template__description{width:35%;max-width:300px;padding-left:100px}#elementor-new-template__description__title{font-size:30px;color:#556068}#elementor-new-template__description__title span{font-weight:700}#elementor-new-template__description__content{font-size:14px;padding:30px 0}#elementor-new-template__take_a_tour{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;font-size:15px}#elementor-new-template__take_a_tour i{color:#ef295a;font-size:30px}#elementor-new-template__take_a_tour a{color:#6d7882;padding-right:10px;text-decoration:none;font-weight:500}#elementor-new-template__form{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:440px;padding:55px;background-color:#fff;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 30px 0 rgba(0,0,0,.08);box-shadow:0 2px 30px 0 rgba(0,0,0,.08)}#elementor-new-template__form__title{font-size:23px;color:#556068}#elementor-new-template__form .elementor-form-field__label{display:block;margin:25px 0 7px;font-size:14px;line-height:1}#elementor-new-template__form .elementor-form-field input,#elementor-new-template__form .elementor-form-field select{width:100%;height:50px;padding:10px;font-size:14px;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:3px;border-radius:3px;background:none;color:#495157;border:1px solid;outline:none}#elementor-new-template__form .elementor-form-field input:not(:focus),#elementor-new-template__form .elementor-form-field select:not(:focus){border-color:#d5dadf}#elementor-new-template__form .elementor-form-field input:focus,#elementor-new-template__form .elementor-form-field select:focus{border-color:#a4afb7}#elementor-new-template__form .elementor-form-field__select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}#elementor-new-template__form .elementor-form-field__select__wrapper{position:relative}#elementor-new-template__form .elementor-form-field__select__wrapper:after{font-family:eicons;content:"\e955";position:absolute;top:50%;left:10px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}#elementor-new-template__form__submit{width:100%;height:50px;margin-top:25px}@media (max-width:1024px){#elementor-new-template__description{max-width:250px;padding-left:30px}}@media (max-width:767px){#elementor-new-template__description{display:none}}#elementor-role-manager{max-width:500px;margin-top:50px}#elementor-role-manager h3{color:#6d7882;font-weight:400;font-size:22px}#elementor-role-manager .elementor-settings-form-page{padding:0}#elementor-role-manager .elementor-role-row{background:#fff;color:#6d7882;margin-bottom:2px}#elementor-role-manager .elementor-role-row .elementor-role-label{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:15px 20px;font-weight:500;cursor:pointer}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-name{padding-left:20px}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-toggle{text-align:left;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-excluded-indicator{color:#a4afb7}#elementor-role-manager .elementor-role-row .elementor-role-controls{background-color:#f7f7f7;padding:20px 20px 5px}#elementor-role-manager .elementor-role-row .elementor-role-controls>div{margin-bottom:15px}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__desc{font-weight:500;font-style:italic}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__link{text-align:left;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{padding:20px 0;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 20px 20px;min-height:50px}.dialog-type-lightbox .dialog-header,.dialog-type-lightbox .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-header,.dialog-lightbox-widget .dialog-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-left:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;text-transform:uppercase;outline:none;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-left:10px}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding:25px 30px 30px}.elementor-templates-modal .dialog-content{height:100%}.elementor-templates-modal .dialog-loading{display:none}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{font-size:15px;line-height:1;text-transform:uppercase;color:#495157;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:right;padding-right:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#f2295b,#434363);background-image:-o-linear-gradient(225deg,#f2295b,#434363);background-image:linear-gradient(-135deg,#f2295b,#434363);-webkit-border-radius:2px;border-radius:2px;margin-left:10px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close--normal{width:45px;border-right:1px solid #e6e9ec}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px;padding-right:20px;margin-left:10px;color:#fff;background-color:#a4afb7;font-size:11px;font-weight:400;line-height:1;text-transform:uppercase;-webkit-border-radius:2px;border-radius:2px;cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-right:10px;margin-right:15px;border-right:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:#fff}#adminmenu #toplevel_page_edit-post_type-elementor_library div.wp-menu-image:before,#adminmenu #toplevel_page_elementor div.wp-menu-image:before{content:"\e801";font-family:eicons;font-size:18px;margin-top:1px}#adminmenu #toplevel_page_edit-post_type-elementor_library a[href="admin.php?page=go_elementor_pro"],#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]{color:#d54e21}#adminmenu #toplevel_page_edit-post_type-elementor_library .dashicons.dashicons-star-filled,#adminmenu #toplevel_page_elementor .dashicons.dashicons-star-filled{height:auto}.elementor-plugins-gopro{color:#39b54a;font-weight:700}.e-logo-wrapper{display:inline-block;padding:.75em;background-image:-webkit-linear-gradient(225deg,#ef295a,#434363);background-image:-o-linear-gradient(225deg,#ef295a,#434363);background-image:linear-gradient(-135deg,#ef295a,#434363);-webkit-border-radius:7.5%;border-radius:7.5%;line-height:1}.e-logo-wrapper i{color:#fff;font-size:1em}#elementor-switch-mode{margin:15px 0}#elementor-editor-button,#elementor-switch-mode-button{outline:none;cursor:pointer}#elementor-editor-button i,#elementor-switch-mode-button i{margin-left:3px;font-size:19px}body.elementor-editor-active .elementor-switch-mode-off{display:none}body.elementor-editor-active #elementor-switch-mode-button{background-color:#f7f7f7;color:#555;border-color:#ccc;-webkit-box-shadow:0 1px 0 #ccc!important;box-shadow:0 1px 0 #ccc!important;text-shadow:unset}body.elementor-editor-active #elementor-switch-mode-button:hover{background-color:#e9e9e9}body.elementor-editor-active #elementor-switch-mode-button:active{-webkit-box-shadow:inset 0 1px 0 #ccc;box-shadow:inset 0 1px 0 #ccc;-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px)}body.elementor-editor-active #postdivrich{display:none!important}body.elementor-editor-active .editor-block-list__layout,body.elementor-editor-inactive #elementor-editor,body.elementor-editor-inactive .elementor-switch-mode-on{display:none}body.elementor-editor-active .edit-post-layout__content .edit-post-visual-editor{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}body.elementor-editor-active #elementor-editor{margin-bottom:50px}body.elementor-editor-active .edit-post-text-editor__body .editor-post-text-editor{display:none}body .gutenberg #elementor-switch-mode{margin:0 15px}body .gutenberg #elementor-switch-mode .button{margin:2px;height:33px;font-size:13px;line-height:1}body .gutenberg #elementor-switch-mode .button i{font-size:125%;padding-left:5px}.elementor-button{font-size:13px;text-decoration:none;padding:15px 40px}#elementor-editor{height:300px;width:100%;-webkit-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}#elementor-editor .elementor-loader-wrapper{position:absolute;width:300px;left:50%;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}#elementor-editor .elementor-loader{-webkit-border-radius:7px;border-radius:7px;padding:40px;height:150px;width:150px;background-color:hsla(0,0%,100%,.9);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:2px 2px 20px 4px rgba(0,0,0,.02);box-shadow:2px 2px 20px 4px rgba(0,0,0,.02)}#elementor-editor .elementor-loader-boxes{height:100%;width:100%;position:relative}#elementor-editor .elementor-loader-box{position:absolute;background-color:#e6e9ec;-webkit-animation:load 1.8s linear infinite;animation:load 1.8s linear infinite}#elementor-editor .elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}#elementor-editor .elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}#elementor-editor .elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}#elementor-editor .elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}#elementor-editor .elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}#elementor-editor .elementor-loading-title{color:#a4afb7;text-align:center;text-transform:uppercase;margin-top:30px;letter-spacing:7px;font-size:10px;width:100%}#elementor-go-to-edit-page-link{height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #ddd;background-color:#f7f7f7;text-decoration:none;position:relative;font-family:Sans-serif}#elementor-go-to-edit-page-link:hover{background-color:#fff}#elementor-go-to-edit-page-link:focus{-webkit-box-shadow:none;box-shadow:none}#elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button,#elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper{display:none}.elementor-button-spinner:before{font:normal 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:8px;right:-4px;position:relative;vertical-align:top;content:"\f463"}.elementor-button-spinner.loading:before{-webkit-animation:rotation 1s infinite linear;animation:rotation 1s infinite linear}.elementor-button-spinner.success:before{content:"\f147";color:#46b450}.elementor-blank_state{padding:5em 0;margin:auto;max-width:520px;text-align:center;color:#6d7882}.elementor-blank_state i{font-size:50px;color:#a4afb7}.elementor-blank_state h2{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:32px;font-weight:300;color:inherit;margin:50px 0 35px;line-height:1.2}.elementor-blank_state p{font-size:16px;font-weight:400;color:#a4afb7;margin-bottom:40px}.elementor-blank_state .elementor-button{display:inline-block}#available-widgets [class*=elementor-template] .widget-title:before{content:"\e801";font-family:eicons;font-size:17px}.elementor-settings-form-page{padding-top:30px}._elementor_settings_update_time,.elementor-settings-form-page:not(.elementor-active){display:none}.e-getting-started{max-width:900px;padding:2.5em 0;margin:auto;text-align:center}.e-getting-started__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1)}.e-getting-started__header .e-logo-wrapper{font-size:10px;margin-left:10px}.e-getting-started__title{padding:0 15px;font-weight:600;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.e-getting-started__skip{border-right:1px solid #eee;font-size:16px;color:inherit}.e-getting-started__skip i{padding:15px}.e-getting-started__content{padding:50px}.e-getting-started__content h2{font-size:2em;margin-top:0}.e-getting-started__content--narrow{max-width:500px;margin:auto}.e-getting-started__video{margin:40px 0 60px}.e-getting-started__video iframe{-webkit-box-shadow:10px 10px 20px rgba(0,0,0,.15);box-shadow:10px 10px 20px rgba(0,0,0,.15)}.e-getting-started__actions .button-primary{margin-left:20px}.notice.elementor-message{border:none;padding:20px}.notice.elementor-message .elementor-message-inner{display:table;width:100%}.notice.elementor-message .elementor-message-inner .elementor-message-action,.notice.elementor-message .elementor-message-inner .elementor-message-content,.notice.elementor-message .elementor-message-inner .elementor-message-icon{display:table-cell;vertical-align:middle}.notice.elementor-message .elementor-message-icon{font-size:20px;width:40px}.notice.elementor-message .elementor-message-content{padding:0 20px}.notice.elementor-message p{padding:0;margin:0}.notice.elementor-message h3{margin:0 0 5px}.notice.elementor-message .elementor-message-action{text-align:left}.notice.elementor-message .elementor-message-action .elementor-button{background-color:#d30c5c;color:#fff;border-color:#7c1337;-webkit-box-shadow:0 1px 0 #7c1337;box-shadow:0 1px 0 #7c1337;padding:5px 30px;height:auto;line-height:20px;text-transform:capitalize}.notice.elementor-message .elementor-message-action .elementor-button i{padding-left:5px}.notice.elementor-message .elementor-message-action .elementor-button:hover{background-color:#a0124a}.notice.elementor-message .elementor-message-action .elementor-button:active{-webkit-box-shadow:inset 0 1px 0 #7c1337;box-shadow:inset 0 1px 0 #7c1337;-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px)}.notice.elementor-message .elementor-message-actions{margin-top:10px}.notice.elementor-message .elementor-message-actions .button.button-primary{margin-left:5px}@media (min-width:1200px){.elementor-message-action{padding-left:10px}}@media (max-width:600px){.notice.elementor-message{padding:20px}.notice.elementor-message .elementor-message-inner{display:block;text-align:center}.notice.elementor-message .elementor-message-inner .elementor-message-action,.notice.elementor-message .elementor-message-inner .elementor-message-content,.notice.elementor-message .elementor-message-inner .elementor-message-icon{display:block}.notice.elementor-message .elementor-message-inner .elementor-message-action{text-align:center}.notice.elementor-message .elementor-message-inner .elementor-message-icon{width:auto}.notice.elementor-message .elementor-message-inner .elementor-message-content{padding:10px 0}}#elementor-system-info{padding:15px}#elementor-system-info .elementor-system-info-section{margin-bottom:10px}#elementor-system-info .elementor-system-info-section>.elementor-system-info-report-name{padding-left:10px;border-bottom:1px solid #e1e1e1}#elementor-system-info .elementor-system-info-section .widefat{white-space:pre}#elementor-system-info .elementor-system-info-report-name{text-transform:uppercase;font-size:14px;margin:0;line-height:2}#elementor-system-info .elementor-system-info-report-row{overflow:hidden;padding:5px 0}#elementor-system-info .elementor-system-info-report-row>*{float:left}#elementor-system-info .elementor-system-info-field-recommendation,#elementor-system-info .elementor-system-info-report-field{padding-left:10px;color:#7f7f7f}#elementor-system-info .elementor-system-info-report-fields{padding-left:20px}#elementor-system-info .elementor-system-info-plugin-name{color:#000}#elementor-system-info .elementor-system-info-plugin-properties{padding:10px}#elementor-system-info #elementor-system-info-raw-code{width:100%;height:200px}#elementor-system-info #elementor-system-info-raw-code-label{padding:5px;display:block}#elementor-system-info .elementor-warning td:first-child{border-right:3px solid #fcb92c}@-webkit-keyframes elementor-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes elementor-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}#elementor-deactivate-feedback-dialog-wrapper{display:none}#elementor-deactivate-feedback-modal .dialog-widget-content{width:550px}#elementor-deactivate-feedback-modal .dialog-close-button{-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}#elementor-deactivate-feedback-modal .dialog-header{padding:18px 15px;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);text-align:right}#elementor-deactivate-feedback-modal .dialog-message{padding:30px 30px 0;text-align:right}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input{float:right;margin:0 0 0 15px;-webkit-box-shadow:none;box-shadow:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input:not(:checked)~.elementor-feedback-text{display:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-label{display:block;font-size:13px;color:#6d7882}#elementor-deactivate-feedback-modal .elementor-feedback-text{margin:10px 30px 0 0;padding:5px;font-size:13px;-webkit-box-shadow:none;box-shadow:none;background-color:#fff;width:92%}#elementor-deactivate-feedback-modal .dialog-buttons-wrapper{border-top:none;text-align:right;padding:20px 30px 30px;overflow:hidden}#elementor-deactivate-feedback-modal .dialog-submit{background-color:#d30c5c;-webkit-border-radius:3px;border-radius:3px;color:#fff;line-height:1;padding:12px 20px;font-size:13px;width:180px;height:38px}#elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before{display:inline-block;content:"\f463";font:18px dashicons;-webkit-animation:elementor-rotation 2s infinite linear;animation:elementor-rotation 2s infinite linear}#elementor-deactivate-feedback-modal .dialog-skip{font-size:12px;color:#a4afb7;background:none;float:left;width:auto}#elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .elementor-feedback-text{color:#b01b1b;padding:0}#elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .dialog-submit{display:none}#elementor-deactivate-feedback-dialog-header i{color:#d30c5c;font-size:19px}#elementor-deactivate-feedback-dialog-header-title{font-size:15px;text-transform:uppercase;font-weight:700;padding-right:5px}#elementor-deactivate-feedback-dialog-form-caption{font-weight:700;font-size:15px;color:#495157;line-height:1.4}#elementor-deactivate-feedback-dialog-form-body{padding-top:30px}.elementor-deactivate-feedback-dialog-input-wrapper{line-height:1.3;overflow:hidden;margin-bottom:15px}#elementor-hidden-area{display:none}#elementor-import-template-trigger{cursor:pointer}#elementor-import-template-area{display:none;margin:50px 0 30px;text-align:center}#elementor-import-template-form{display:inline-block;margin-top:30px;padding:30px 50px;background-color:#fff;border:1px solid #e5e5e5}#elementor-import-template-title{font-size:18px;color:#555d66}.form-table:not(.elementor-maintenance-mode-is-enabled) .elementor-default-hide{display:none}.elementor-maintenance-mode-error{color:red;line-height:1.6;display:none}#e-dashboard-overview .dashicons{vertical-align:middle;font-size:17px}#e-dashboard-overview .e-overview__header{display:table;width:100%;-webkit-box-shadow:0 5px 8px rgba(0,0,0,.05);box-shadow:0 5px 8px rgba(0,0,0,.05);margin:0 -12px 8px;padding:0 12px 12px}#e-dashboard-overview .e-overview__create,#e-dashboard-overview .e-overview__logo,#e-dashboard-overview .e-overview__versions{display:table-cell;vertical-align:middle}#e-dashboard-overview .e-overview__logo{width:30px}#e-dashboard-overview .e-overview__versions{padding:0 10px;font-size:.9em;line-height:1.5}#e-dashboard-overview .e-overview__version{display:block}#e-dashboard-overview .e-overview__create{text-align:left}#e-dashboard-overview .e-overview__post{margin-top:10px}#e-dashboard-overview .e-overview__post-link{display:inline-block}#e-dashboard-overview .e-overview__badge{background:#39b54a;color:#fff;font-size:.75em;padding:3px 6px;-webkit-border-radius:3px;border-radius:3px;text-transform:uppercase}#e-dashboard-overview .e-overview__post-description{margin:0 0 1.5em}#e-dashboard-overview .e-overview__recently-edited li{color:#72777c}#e-dashboard-overview .e-overview__feed{font-size:14px;font-weight:500}#e-dashboard-overview .e-overview__feed .e-overview__post-link{padding-bottom:5px}#e-dashboard-overview .e-overview__feed .e-overview__heading,#e-dashboard-overview .e-overview__recently-edited .e-overview__heading{font-weight:700;border-bottom:1px solid #eee;margin:0 -12px;padding:6px 12px}#e-dashboard-overview .e-overview__footer{margin:0 -12px -12px;padding:12px;border-top:1px solid #eee}#e-dashboard-overview .e-overview__footer ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;list-style:none;margin:0;padding:0}#e-dashboard-overview .e-overview__footer ul li{padding:0 10px;margin:0;border-right:1px solid #ddd}#e-dashboard-overview .e-overview__footer ul li:first-child{padding-right:0;border:none}#e-dashboard-overview .e-overview__go-pro a{color:#fcb92c;font-weight:500}.post-type-elementor_library #elementor-template-library-tabs-wrapper{padding-top:2em;margin-bottom:2em}#elementor-new-template-modal .dialog-message{max-height:70vh}#elementor-new-template-dialog-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;text-align:right;padding:0 120px;color:#6d7882}#elementor-new-template__description{width:35%;max-width:300px;padding-left:100px}#elementor-new-template__description__title{font-size:30px;color:#556068}#elementor-new-template__description__title span{font-weight:700}#elementor-new-template__description__content{font-size:14px;padding:30px 0}#elementor-new-template__take_a_tour{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;font-size:15px}#elementor-new-template__take_a_tour i{color:#f2295b;font-size:30px}#elementor-new-template__take_a_tour a{color:#6d7882;padding-right:10px;text-decoration:none;font-weight:500}#elementor-new-template__form{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:440px;padding:55px;background-color:#fff;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 30px 0 rgba(0,0,0,.08);box-shadow:0 2px 30px 0 rgba(0,0,0,.08)}#elementor-new-template__form__title{font-size:23px;color:#556068}#elementor-new-template__form .elementor-form-field__label{display:block;margin:25px 0 7px;font-size:14px;line-height:1}#elementor-new-template__form .elementor-form-field input,#elementor-new-template__form .elementor-form-field select{width:100%;height:50px;padding:10px;font-size:14px;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:3px;border-radius:3px;background:none;color:#495157;border:1px solid;outline:none}#elementor-new-template__form .elementor-form-field input:not(:focus),#elementor-new-template__form .elementor-form-field select:not(:focus){border-color:#d5dadf}#elementor-new-template__form .elementor-form-field input:focus,#elementor-new-template__form .elementor-form-field select:focus{border-color:#a4afb7}#elementor-new-template__form .elementor-form-field__select{appearance:none;-webkit-appearance:none;-moz-appearance:none;cursor:pointer}#elementor-new-template__form .elementor-form-field__select__wrapper{position:relative}#elementor-new-template__form .elementor-form-field__select__wrapper:after{font-family:eicons;content:"\e955";position:absolute;top:50%;left:10px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}#elementor-new-template__form__submit{width:100%;height:50px;margin-top:25px}@media (max-width:1024px){#elementor-new-template__description{max-width:250px;padding-left:30px}}@media (max-width:767px){#elementor-new-template__description{display:none}}#elementor-role-manager{max-width:500px;margin-top:50px}#elementor-role-manager h3{color:#6d7882;font-weight:400;font-size:22px}#elementor-role-manager .elementor-settings-form-page{padding:0}#elementor-role-manager .elementor-role-row{background:#fff;color:#6d7882;margin-bottom:2px}#elementor-role-manager .elementor-role-row .elementor-role-label{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:15px 20px;font-weight:500;cursor:pointer}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-name{padding-left:20px}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-toggle{text-align:left;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-excluded-indicator{color:#a4afb7}#elementor-role-manager .elementor-role-row .elementor-role-controls{background-color:#f7f7f7;padding:20px 20px 5px}#elementor-role-manager .elementor-role-row .elementor-role-controls>div{margin-bottom:15px}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__desc{font-weight:500;font-style:italic}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__link{text-align:left;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
+/*! elementor - v2.2.1 - 03-09-2018 */
.elementor-screen-only,
.screen-reader-text,
.screen-reader-text span,
.dialog-type-lightbox .dialog-widget-content {
margin: auto;
width: 375px; }
+ .dialog-type-lightbox .dialog-header {
+ padding: 20px 0;
+ font-weight: 500; }
.dialog-type-lightbox .dialog-message {
- padding: 0 20px;
+ padding: 0 20px 20px;
min-height: 50px; }
- .dialog-type-lightbox .dialog-widget-header, .dialog-type-lightbox .dialog-message {
+ .dialog-type-lightbox .dialog-header, .dialog-type-lightbox .dialog-message {
text-align: center; }
.dialog-type-lightbox .dialog-buttons-wrapper {
border-top: 1px solid #e6e9ec;
.dialog-type-lightbox .dialog-buttons-wrapper > button::-moz-focus-inner {
border: 0; }
-.dialog-widget-header {
- padding: 20px 0;
- font-weight: 500; }
-
.dialog-close-button {
cursor: pointer;
position: absolute;
.dialog-close-button:not(:hover) {
opacity: .4; }
-.dialog-lightbox-widget .dialog-widget-header,
-.dialog-confirm-widget .dialog-widget-header {
+.dialog-lightbox-widget .dialog-header,
+.dialog-confirm-widget .dialog-header {
font-size: 15px;
color: #495157; }
line-height: 37px; }
.elementor-button {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
text-transform: uppercase;
outline: none;
border: none;
margin-right: 10px; }
.elementor-templates-modal .dialog-widget-content {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
background-color: #f1f3f5;
width: 100%; }
@media (max-width: 1439px) {
.elementor-templates-modal .dialog-widget-content {
max-width: 1200px; } }
-.elementor-templates-modal .dialog-widget-header {
+.elementor-templates-modal .dialog-header {
padding: 0;
background-color: #fff;
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
overflow: auto;
padding: 25px 30px 30px; }
+.elementor-templates-modal .dialog-content {
+ height: 100%; }
+
+.elementor-templates-modal .dialog-loading {
+ display: none; }
+
.elementor-templates-modal__header {
display: -webkit-box;
display: -webkit-flex;
align-items: center; }
.elementor-templates-modal__header__logo__icon-wrapper {
padding: 4px 7px 6px;
- background-image: -webkit-linear-gradient(225deg, #EF295A, #434363);
- background-image: -o-linear-gradient(225deg, #EF295A, #434363);
- background-image: linear-gradient(-135deg, #EF295A, #434363);
+ background-image: -webkit-linear-gradient(225deg, #f2295b, #434363);
+ background-image: -o-linear-gradient(225deg, #f2295b, #434363);
+ background-image: linear-gradient(-135deg, #f2295b, #434363);
-webkit-border-radius: 2px;
border-radius: 2px;
margin-right: 10px; }
cursor: pointer; }
.elementor-templates-modal__header__item > i:not(:hover) {
color: #a4afb7; }
- .elementor-templates-modal__header__close-modal {
+ .elementor-templates-modal__header__close--normal {
width: 45px;
border-left: 1px solid #e6e9ec; }
- .elementor-templates-modal__header__close-modal i {
+ .elementor-templates-modal__header__close--normal i {
font-size: 18px; }
+ .elementor-templates-modal__header__close--skip {
+ padding: 10px;
+ padding-left: 20px;
+ margin-right: 10px;
+ color: #fff;
+ background-color: #a4afb7;
+ font-size: 11px;
+ font-weight: normal;
+ line-height: 1;
+ text-transform: uppercase;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ cursor: pointer; }
+ .elementor-templates-modal__header__close--skip > i {
+ font-size: inherit;
+ padding-left: 10px;
+ margin-left: 15px;
+ border-left: 1px solid; }
+ .elementor-templates-modal__header__close--skip > i:not(:hover) {
+ color: #fff; }
+
+#adminmenu #toplevel_page_elementor div.wp-menu-image:before,
+#adminmenu #toplevel_page_edit-post_type-elementor_library div.wp-menu-image:before {
+ content: "\e801";
+ font-family: eicons;
+ font-size: 18px;
+ margin-top: 1px; }
+
+#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"],
+#adminmenu #toplevel_page_edit-post_type-elementor_library a[href="admin.php?page=go_elementor_pro"] {
+ color: #d54e21; }
+
+#adminmenu #toplevel_page_elementor .dashicons.dashicons-star-filled,
+#adminmenu #toplevel_page_edit-post_type-elementor_library .dashicons.dashicons-star-filled {
+ height: auto; }
+
+.elementor-plugins-gopro {
+ color: #39b54a;
+ font-weight: bold; }
+
+.e-logo-wrapper {
+ display: inline-block;
+ padding: .75em;
+ background-image: -webkit-linear-gradient(225deg, #EF295A, #434363);
+ background-image: -o-linear-gradient(225deg, #EF295A, #434363);
+ background-image: linear-gradient(-135deg, #EF295A, #434363);
+ -webkit-border-radius: 7.5%;
+ border-radius: 7.5%;
+ line-height: 1; }
+ .e-logo-wrapper i {
+ color: #ffffff;
+ font-size: 1em; }
+
+#elementor-switch-mode {
+ margin: 15px 0; }
+
+#elementor-switch-mode-button,
+#elementor-editor-button {
+ outline: none;
+ cursor: pointer; }
+ #elementor-switch-mode-button i,
+ #elementor-editor-button i {
+ margin-right: 3px;
+ font-size: 19px; }
body.elementor-editor-active .elementor-switch-mode-off {
display: none; }
-ms-transform: translateY(1px);
transform: translateY(1px); }
-body.elementor-editor-active #elementor-editor {
- display: table; }
-
body.elementor-editor-active #postdivrich {
display: none !important; }
+body.elementor-editor-active .editor-block-list__layout {
+ display: none; }
+
body.elementor-editor-inactive .elementor-switch-mode-on {
display: none; }
body.elementor-editor-inactive #elementor-editor {
display: none; }
-#adminmenu #toplevel_page_elementor div.wp-menu-image:before,
-#adminmenu #toplevel_page_edit-post_type-elementor_library div.wp-menu-image:before {
- content: "\e800";
- font-family: eicons;
- font-size: 14px;
- margin-top: 3px; }
-
-#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"],
-#adminmenu #toplevel_page_edit-post_type-elementor_library a[href="admin.php?page=go_elementor_pro"] {
- color: #d54e21; }
+body.elementor-editor-active .editor-block-list__layout {
+ display: none; }
-#adminmenu #toplevel_page_elementor .dashicons.dashicons-star-filled,
-#adminmenu #toplevel_page_edit-post_type-elementor_library .dashicons.dashicons-star-filled {
- height: auto; }
+body.elementor-editor-active .edit-post-layout__content .edit-post-visual-editor {
+ -webkit-flex-basis: auto;
+ -ms-flex-preferred-size: auto;
+ flex-basis: auto; }
-.elementor-plugins-gopro {
- color: #39b54a;
- font-weight: bold; }
+body.elementor-editor-active #elementor-editor {
+ margin-bottom: 50px; }
-#elementor-switch-mode {
- margin: 15px 0; }
+body.elementor-editor-active .edit-post-text-editor__body .editor-post-text-editor {
+ display: none; }
-#elementor-editor-button {
- outline: none;
- cursor: pointer; }
- #elementor-editor-button .eicon-elementor {
- margin-right: 5px; }
+body .gutenberg #elementor-switch-mode {
+ margin: 0 15px; }
+ body .gutenberg #elementor-switch-mode .button {
+ margin: 2px;
+ height: 33px;
+ font-size: 13px;
+ line-height: 1; }
+ body .gutenberg #elementor-switch-mode .button i {
+ font-size: 125%;
+ padding-right: 5px; }
.elementor-button {
font-size: 13px;
padding: 15px 40px; }
#elementor-editor {
- background-color: #F7F7F7;
- border: 1px solid #DDD;
height: 300px;
width: 100%;
-webkit-transition: all 0.5s ease;
-o-transition: all 0.5s ease;
transition: all 0.5s ease; }
- #elementor-editor:hover {
- background-color: #ffffff; }
+ #elementor-editor .elementor-loader-wrapper {
+ position: absolute;
+ width: 300px;
+ left: 50%;
+ top: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ #elementor-editor .elementor-loader {
+ -webkit-border-radius: 7px;
+ border-radius: 7px;
+ padding: 40px;
+ height: 150px;
+ width: 150px;
+ background-color: rgba(255, 255, 255, 0.9);
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02);
+ box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); }
+ #elementor-editor .elementor-loader-boxes {
+ height: 100%;
+ width: 100%;
+ position: relative; }
#elementor-editor .elementor-loader-box {
position: absolute;
+ background-color: #e6e9ec;
-webkit-animation: load 1.8s linear infinite;
animation: load 1.8s linear infinite; }
#elementor-editor .elementor-loader-box:nth-of-type(1) {
opacity: 1; }
100% {
opacity: .3; } }
- #elementor-editor .elementor-loader-box {
- background-color: #a4afb7; }
+ #elementor-editor .elementor-loading-title {
+ color: #a4afb7;
+ text-align: center;
+ text-transform: uppercase;
+ margin-top: 30px;
+ letter-spacing: 7px;
+ font-size: 10px;
+ width: 100%; }
#elementor-go-to-edit-page-link {
- display: table-cell;
- vertical-align: middle;
- text-align: center;
- text-decoration: none; }
+ height: 100%;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ border: 1px solid #DDD;
+ background-color: #F7F7F7;
+ text-decoration: none;
+ position: relative;
+ font-family: Sans-serif; }
+ #elementor-go-to-edit-page-link:hover {
+ background-color: #ffffff; }
+ #elementor-go-to-edit-page-link:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none; }
#elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button {
display: none; }
#elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper {
display: none; }
-.elementor-loader-wrapper {
- margin: auto;
- width: 80px; }
-
-.elementor-loader {
- height: 80px;
- position: relative; }
-
-.elementor-loading-title {
- color: #a4afb7;
- text-transform: uppercase;
- margin-top: 15px;
- font-size: 11px;
- letter-spacing: 5px; }
-
.elementor-button-spinner:before {
font: normal 20px/.5 dashicons;
speak: none;
._elementor_settings_update_time {
display: none; }
+.e-getting-started {
+ max-width: 900px;
+ padding: 2.5em 0;
+ margin: auto;
+ text-align: center; }
+ .e-getting-started__header {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: horizontal;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: row;
+ -ms-flex-direction: row;
+ flex-direction: row;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); }
+ .e-getting-started__header .e-logo-wrapper {
+ font-size: 10px;
+ margin-right: 10px; }
+ .e-getting-started__title {
+ padding: 0 15px;
+ font-weight: 600;
+ text-transform: uppercase;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .e-getting-started__skip {
+ border-left: 1px solid #eee;
+ font-size: 16px;
+ color: inherit; }
+ .e-getting-started__skip i {
+ padding: 15px; }
+ .e-getting-started__content {
+ padding: 50px; }
+ .e-getting-started__content h2 {
+ font-size: 2em;
+ margin-top: 0; }
+ .e-getting-started__content--narrow {
+ max-width: 500px;
+ margin: auto; }
+ .e-getting-started__video {
+ margin: 40px 0 60px; }
+ .e-getting-started__video iframe {
+ -webkit-box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.15);
+ box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.15); }
+ .e-getting-started__actions .button-primary {
+ margin-right: 20px; }
+
/*= Elementor Message
---------------------------------------*/
.notice.elementor-message {
- border-left-color: #B7084E !important;
+ border: none;
padding: 20px; }
.notice.elementor-message .elementor-message-inner {
display: table;
display: table-cell;
vertical-align: middle; }
.notice.elementor-message .elementor-message-icon {
- color: #B7084E;
- font-size: 40px;
+ font-size: 20px;
width: 40px; }
.notice.elementor-message .elementor-message-content {
padding: 0 20px; }
.notice.elementor-message .elementor-message-action {
text-align: right; }
.notice.elementor-message .elementor-message-action .elementor-button {
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #fff;
border-color: #7c1337;
-webkit-box-shadow: 0 1px 0 #7c1337;
-webkit-transform: translateY(1px);
-ms-transform: translateY(1px);
transform: translateY(1px); }
+ .notice.elementor-message .elementor-message-actions {
+ margin-top: 10px; }
+ .notice.elementor-message .elementor-message-actions .button.button-primary {
+ margin-right: 5px; }
@media (min-width: 1200px) {
.elementor-message-action {
-o-transition: all 0.5s;
transition: all 0.5s; }
-#elementor-deactivate-feedback-modal .dialog-widget-header {
+#elementor-deactivate-feedback-modal .dialog-header {
padding: 18px 15px;
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
#elementor-deactivate-feedback-modal .dialog-buttons-wrapper {
border-top: none;
text-align: left;
- padding: 20px 30px 30px; }
+ padding: 20px 30px 30px;
+ overflow: hidden; }
#elementor-deactivate-feedback-modal .dialog-submit {
- background-color: #B7084E;
+ background-color: #D30C5C;
-webkit-border-radius: 3px;
border-radius: 3px;
color: #fff;
line-height: 1;
padding: 12px 20px;
- font-size: 14px;
+ font-size: 13px;
width: 180px;
height: 38px; }
#elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before {
float: right;
width: auto; }
+#elementor-deactivate-feedback-modal[data-feedback-selected="elementor_pro"] .elementor-feedback-text {
+ color: #b01b1b;
+ padding: 0; }
+
+#elementor-deactivate-feedback-modal[data-feedback-selected="elementor_pro"] .dialog-submit {
+ display: none; }
+
#elementor-deactivate-feedback-dialog-header i {
- color: #B7084E;
+ color: #D30C5C;
font-size: 19px; }
#elementor-deactivate-feedback-dialog-header-title {
display: none; }
.elementor-maintenance-mode-error {
- color: red; }
+ color: red;
+ line-height: 1.6;
+ display: none; }
#e-dashboard-overview .dashicons {
vertical-align: middle;
vertical-align: middle; }
#e-dashboard-overview .e-overview__logo {
- color: #B7084E;
- font-size: 40px;
- width: 40px; }
+ width: 30px; }
#e-dashboard-overview .e-overview__versions {
padding: 0 10px;
margin-bottom: 2em; }
#elementor-new-template-modal .dialog-message {
+ max-height: 70vh; }
+
+#elementor-new-template-dialog-content {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
+ height: 100%;
text-align: left;
padding: 0 120px;
color: #6d7882; }
align-items: center;
font-size: 15px; }
#elementor-new-template__take_a_tour i {
- color: #EF295A;
+ color: #f2295b;
font-size: 30px; }
#elementor-new-template__take_a_tour a {
color: #6d7882;
#elementor-new-template__form .elementor-form-field select:focus {
border-color: #a4afb7; }
#elementor-new-template__form .elementor-form-field__select {
+ appearance: none;
-webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
+ -moz-appearance: none;
cursor: pointer; }
#elementor-new-template__form .elementor-form-field__select__wrapper {
position: relative; }
-/*! elementor - v2.0.10 - 08-05-2018 */
-.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-message{padding:0 20px;min-height:50px}.dialog-type-lightbox .dialog-message,.dialog-type-lightbox .dialog-widget-header{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-widget-header{padding:20px 0;font-weight:500}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-widget-header,.dialog-lightbox-widget .dialog-widget-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-right:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-button{text-transform:uppercase;outline:none;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-right:10px}.elementor-templates-modal .dialog-widget-content{background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-widget-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding:25px 30px 30px}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{font-size:15px;line-height:1;text-transform:uppercase;color:#495157;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:left;padding-left:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#ef295a,#434363);background-image:-o-linear-gradient(225deg,#ef295a,#434363);background-image:linear-gradient(-135deg,#ef295a,#434363);-webkit-border-radius:2px;border-radius:2px;margin-right:10px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close-modal{width:45px;border-left:1px solid #e6e9ec}.elementor-templates-modal__header__close-modal i{font-size:18px}body.elementor-editor-active .elementor-switch-mode-off{display:none}body.elementor-editor-active #elementor-switch-mode-button{background-color:#f7f7f7;color:#555;border-color:#ccc;-webkit-box-shadow:0 1px 0 #ccc!important;box-shadow:0 1px 0 #ccc!important;text-shadow:unset}body.elementor-editor-active #elementor-switch-mode-button:hover{background-color:#e9e9e9}body.elementor-editor-active #elementor-switch-mode-button:active{-webkit-box-shadow:inset 0 1px 0 #ccc;box-shadow:inset 0 1px 0 #ccc;-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px)}body.elementor-editor-active #elementor-editor{display:table}body.elementor-editor-active #postdivrich{display:none!important}body.elementor-editor-inactive #elementor-editor,body.elementor-editor-inactive .elementor-switch-mode-on{display:none}#adminmenu #toplevel_page_edit-post_type-elementor_library div.wp-menu-image:before,#adminmenu #toplevel_page_elementor div.wp-menu-image:before{content:"\e800";font-family:eicons;font-size:14px;margin-top:3px}#adminmenu #toplevel_page_edit-post_type-elementor_library a[href="admin.php?page=go_elementor_pro"],#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]{color:#d54e21}#adminmenu #toplevel_page_edit-post_type-elementor_library .dashicons.dashicons-star-filled,#adminmenu #toplevel_page_elementor .dashicons.dashicons-star-filled{height:auto}.elementor-plugins-gopro{color:#39b54a;font-weight:700}#elementor-switch-mode{margin:15px 0}#elementor-editor-button{outline:none;cursor:pointer}#elementor-editor-button .eicon-elementor{margin-right:5px}.elementor-button{font-size:13px;text-decoration:none;padding:15px 40px}#elementor-editor{background-color:#f7f7f7;border:1px solid #ddd;height:300px;width:100%;-webkit-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}#elementor-editor:hover{background-color:#fff}#elementor-editor .elementor-loader-box{position:absolute;-webkit-animation:load 1.8s linear infinite;animation:load 1.8s linear infinite}#elementor-editor .elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}#elementor-editor .elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}#elementor-editor .elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}#elementor-editor .elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}#elementor-editor .elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}#elementor-editor .elementor-loader-box{background-color:#a4afb7}#elementor-go-to-edit-page-link{display:table-cell;vertical-align:middle;text-align:center;text-decoration:none}#elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button,#elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper{display:none}.elementor-loader-wrapper{margin:auto;width:80px}.elementor-loader{height:80px;position:relative}.elementor-loading-title{color:#a4afb7;text-transform:uppercase;margin-top:15px;font-size:11px;letter-spacing:5px}.elementor-button-spinner:before{font:normal 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:8px;left:-4px;position:relative;vertical-align:top;content:"\f463"}.elementor-button-spinner.loading:before{-webkit-animation:rotation 1s infinite linear;animation:rotation 1s infinite linear}.elementor-button-spinner.success:before{content:"\f147";color:#46b450}.elementor-blank_state{padding:5em 0;margin:auto;max-width:520px;text-align:center;color:#6d7882}.elementor-blank_state i{font-size:50px;color:#a4afb7}.elementor-blank_state h2{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:32px;font-weight:300;color:inherit;margin:50px 0 35px;line-height:1.2}.elementor-blank_state p{font-size:16px;font-weight:400;color:#a4afb7;margin-bottom:40px}.elementor-blank_state .elementor-button{display:inline-block}#available-widgets [class*=elementor-template] .widget-title:before{content:"\e801";font-family:eicons;font-size:17px}.elementor-settings-form-page{padding-top:30px}._elementor_settings_update_time,.elementor-settings-form-page:not(.elementor-active){display:none}.notice.elementor-message{border-left-color:#b7084e!important;padding:20px}.notice.elementor-message .elementor-message-inner{display:table;width:100%}.notice.elementor-message .elementor-message-inner .elementor-message-action,.notice.elementor-message .elementor-message-inner .elementor-message-content,.notice.elementor-message .elementor-message-inner .elementor-message-icon{display:table-cell;vertical-align:middle}.notice.elementor-message .elementor-message-icon{color:#b7084e;font-size:40px;width:40px}.notice.elementor-message .elementor-message-content{padding:0 20px}.notice.elementor-message p{padding:0;margin:0}.notice.elementor-message h3{margin:0 0 5px}.notice.elementor-message .elementor-message-action{text-align:right}.notice.elementor-message .elementor-message-action .elementor-button{background-color:#b7084e;color:#fff;border-color:#7c1337;-webkit-box-shadow:0 1px 0 #7c1337;box-shadow:0 1px 0 #7c1337;padding:5px 30px;height:auto;line-height:20px;text-transform:capitalize}.notice.elementor-message .elementor-message-action .elementor-button i{padding-right:5px}.notice.elementor-message .elementor-message-action .elementor-button:hover{background-color:#a0124a}.notice.elementor-message .elementor-message-action .elementor-button:active{-webkit-box-shadow:inset 0 1px 0 #7c1337;box-shadow:inset 0 1px 0 #7c1337;-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px)}@media (min-width:1200px){.elementor-message-action{padding-right:10px}}@media (max-width:600px){.notice.elementor-message{padding:20px}.notice.elementor-message .elementor-message-inner{display:block;text-align:center}.notice.elementor-message .elementor-message-inner .elementor-message-action,.notice.elementor-message .elementor-message-inner .elementor-message-content,.notice.elementor-message .elementor-message-inner .elementor-message-icon{display:block}.notice.elementor-message .elementor-message-inner .elementor-message-action{text-align:center}.notice.elementor-message .elementor-message-inner .elementor-message-icon{width:auto}.notice.elementor-message .elementor-message-inner .elementor-message-content{padding:10px 0}}#elementor-system-info{padding:15px}#elementor-system-info .elementor-system-info-section{margin-bottom:10px}#elementor-system-info .elementor-system-info-section>.elementor-system-info-report-name{padding-left:10px;border-bottom:1px solid #e1e1e1}#elementor-system-info .elementor-system-info-section .widefat{white-space:pre}#elementor-system-info .elementor-system-info-report-name{text-transform:uppercase;font-size:14px;margin:0;line-height:2}#elementor-system-info .elementor-system-info-report-row{overflow:hidden;padding:5px 0}#elementor-system-info .elementor-system-info-report-row>*{float:left}#elementor-system-info .elementor-system-info-field-recommendation,#elementor-system-info .elementor-system-info-report-field{padding-left:10px;color:#7f7f7f}#elementor-system-info .elementor-system-info-report-fields{padding-left:20px}#elementor-system-info .elementor-system-info-plugin-name{color:#000}#elementor-system-info .elementor-system-info-plugin-properties{padding:10px}#elementor-system-info #elementor-system-info-raw-code{width:100%;height:200px}#elementor-system-info #elementor-system-info-raw-code-label{padding:5px;display:block}#elementor-system-info .elementor-warning td:first-child{border-left:3px solid #fcb92c}@-webkit-keyframes elementor-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes elementor-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}#elementor-deactivate-feedback-dialog-wrapper{display:none}#elementor-deactivate-feedback-modal .dialog-widget-content{width:550px}#elementor-deactivate-feedback-modal .dialog-close-button{-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}#elementor-deactivate-feedback-modal .dialog-widget-header{padding:18px 15px;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);text-align:left}#elementor-deactivate-feedback-modal .dialog-message{padding:30px 30px 0;text-align:left}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input{float:left;margin:0 15px 0 0;-webkit-box-shadow:none;box-shadow:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input:not(:checked)~.elementor-feedback-text{display:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-label{display:block;font-size:13px;color:#6d7882}#elementor-deactivate-feedback-modal .elementor-feedback-text{margin:10px 0 0 30px;padding:5px;font-size:13px;-webkit-box-shadow:none;box-shadow:none;background-color:#fff;width:92%}#elementor-deactivate-feedback-modal .dialog-buttons-wrapper{border-top:none;text-align:left;padding:20px 30px 30px}#elementor-deactivate-feedback-modal .dialog-submit{background-color:#b7084e;-webkit-border-radius:3px;border-radius:3px;color:#fff;line-height:1;padding:12px 20px;font-size:14px;width:180px;height:38px}#elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before{display:inline-block;content:"\f463";font:18px dashicons;-webkit-animation:elementor-rotation 2s infinite linear;animation:elementor-rotation 2s infinite linear}#elementor-deactivate-feedback-modal .dialog-skip{font-size:12px;color:#a4afb7;background:none;float:right;width:auto}#elementor-deactivate-feedback-dialog-header i{color:#b7084e;font-size:19px}#elementor-deactivate-feedback-dialog-header-title{font-size:15px;text-transform:uppercase;font-weight:700;padding-left:5px}#elementor-deactivate-feedback-dialog-form-caption{font-weight:700;font-size:15px;color:#495157;line-height:1.4}#elementor-deactivate-feedback-dialog-form-body{padding-top:30px}.elementor-deactivate-feedback-dialog-input-wrapper{line-height:1.3;overflow:hidden;margin-bottom:15px}#elementor-hidden-area{display:none}#elementor-import-template-trigger{cursor:pointer}#elementor-import-template-area{display:none;margin:50px 0 30px;text-align:center}#elementor-import-template-form{display:inline-block;margin-top:30px;padding:30px 50px;background-color:#fff;border:1px solid #e5e5e5}#elementor-import-template-title{font-size:18px;color:#555d66}.form-table:not(.elementor-maintenance-mode-is-enabled) .elementor-default-hide{display:none}.elementor-maintenance-mode-error{color:red}#e-dashboard-overview .dashicons{vertical-align:middle;font-size:17px}#e-dashboard-overview .e-overview__header{display:table;width:100%;-webkit-box-shadow:0 5px 8px rgba(0,0,0,.05);box-shadow:0 5px 8px rgba(0,0,0,.05);margin:0 -12px 8px;padding:0 12px 12px}#e-dashboard-overview .e-overview__create,#e-dashboard-overview .e-overview__logo,#e-dashboard-overview .e-overview__versions{display:table-cell;vertical-align:middle}#e-dashboard-overview .e-overview__logo{color:#b7084e;font-size:40px;width:40px}#e-dashboard-overview .e-overview__versions{padding:0 10px;font-size:.9em;line-height:1.5}#e-dashboard-overview .e-overview__version{display:block}#e-dashboard-overview .e-overview__create{text-align:right}#e-dashboard-overview .e-overview__post{margin-top:10px}#e-dashboard-overview .e-overview__post-link{display:inline-block}#e-dashboard-overview .e-overview__badge{background:#39b54a;color:#fff;font-size:.75em;padding:3px 6px;-webkit-border-radius:3px;border-radius:3px;text-transform:uppercase}#e-dashboard-overview .e-overview__post-description{margin:0 0 1.5em}#e-dashboard-overview .e-overview__recently-edited li{color:#72777c}#e-dashboard-overview .e-overview__feed{font-size:14px;font-weight:500}#e-dashboard-overview .e-overview__feed .e-overview__post-link{padding-bottom:5px}#e-dashboard-overview .e-overview__feed .e-overview__heading,#e-dashboard-overview .e-overview__recently-edited .e-overview__heading{font-weight:700;border-bottom:1px solid #eee;margin:0 -12px;padding:6px 12px}#e-dashboard-overview .e-overview__footer{margin:0 -12px -12px;padding:12px;border-top:1px solid #eee}#e-dashboard-overview .e-overview__footer ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;list-style:none;margin:0;padding:0}#e-dashboard-overview .e-overview__footer ul li{padding:0 10px;margin:0;border-left:1px solid #ddd}#e-dashboard-overview .e-overview__footer ul li:first-child{padding-left:0;border:none}#e-dashboard-overview .e-overview__go-pro a{color:#fcb92c;font-weight:500}.post-type-elementor_library #elementor-template-library-tabs-wrapper{padding-top:2em;margin-bottom:2em}#elementor-new-template-modal .dialog-message{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:left;padding:0 120px;color:#6d7882}#elementor-new-template__description{width:35%;max-width:300px;padding-right:100px}#elementor-new-template__description__title{font-size:30px;color:#556068}#elementor-new-template__description__title span{font-weight:700}#elementor-new-template__description__content{font-size:14px;padding:30px 0}#elementor-new-template__take_a_tour{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;font-size:15px}#elementor-new-template__take_a_tour i{color:#ef295a;font-size:30px}#elementor-new-template__take_a_tour a{color:#6d7882;padding-left:10px;text-decoration:none;font-weight:500}#elementor-new-template__form{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:440px;padding:55px;background-color:#fff;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 30px 0 rgba(0,0,0,.08);box-shadow:0 2px 30px 0 rgba(0,0,0,.08)}#elementor-new-template__form__title{font-size:23px;color:#556068}#elementor-new-template__form .elementor-form-field__label{display:block;margin:25px 0 7px;font-size:14px;line-height:1}#elementor-new-template__form .elementor-form-field input,#elementor-new-template__form .elementor-form-field select{width:100%;height:50px;padding:10px;font-size:14px;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:3px;border-radius:3px;background:none;color:#495157;border:1px solid;outline:none}#elementor-new-template__form .elementor-form-field input:not(:focus),#elementor-new-template__form .elementor-form-field select:not(:focus){border-color:#d5dadf}#elementor-new-template__form .elementor-form-field input:focus,#elementor-new-template__form .elementor-form-field select:focus{border-color:#a4afb7}#elementor-new-template__form .elementor-form-field__select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}#elementor-new-template__form .elementor-form-field__select__wrapper{position:relative}#elementor-new-template__form .elementor-form-field__select__wrapper:after{font-family:eicons;content:"\e955";position:absolute;top:50%;right:10px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}#elementor-new-template__form__submit{width:100%;height:50px;margin-top:25px}@media (max-width:1024px){#elementor-new-template__description{max-width:250px;padding-right:30px}}@media (max-width:767px){#elementor-new-template__description{display:none}}#elementor-role-manager{max-width:500px;margin-top:50px}#elementor-role-manager h3{color:#6d7882;font-weight:400;font-size:22px}#elementor-role-manager .elementor-settings-form-page{padding:0}#elementor-role-manager .elementor-role-row{background:#fff;color:#6d7882;margin-bottom:2px}#elementor-role-manager .elementor-role-row .elementor-role-label{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:15px 20px;font-weight:500;cursor:pointer}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-name{padding-right:20px}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-toggle{text-align:right;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-excluded-indicator{color:#a4afb7}#elementor-role-manager .elementor-role-row .elementor-role-controls{background-color:#f7f7f7;padding:20px 20px 5px}#elementor-role-manager .elementor-role-row .elementor-role-controls>div{margin-bottom:15px}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__desc{font-weight:500;font-style:italic}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__link{text-align:right;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:2;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{padding:20px 0;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 20px 20px;min-height:50px}.dialog-type-lightbox .dialog-header,.dialog-type-lightbox .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-header,.dialog-lightbox-widget .dialog-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-right:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;text-transform:uppercase;outline:none;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-right:10px}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding:25px 30px 30px}.elementor-templates-modal .dialog-content{height:100%}.elementor-templates-modal .dialog-loading{display:none}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{font-size:15px;line-height:1;text-transform:uppercase;color:#495157;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:left;padding-left:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#f2295b,#434363);background-image:-o-linear-gradient(225deg,#f2295b,#434363);background-image:linear-gradient(-135deg,#f2295b,#434363);-webkit-border-radius:2px;border-radius:2px;margin-right:10px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close--normal{width:45px;border-left:1px solid #e6e9ec}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px;padding-left:20px;margin-right:10px;color:#fff;background-color:#a4afb7;font-size:11px;font-weight:400;line-height:1;text-transform:uppercase;-webkit-border-radius:2px;border-radius:2px;cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-left:10px;margin-left:15px;border-left:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:#fff}#adminmenu #toplevel_page_edit-post_type-elementor_library div.wp-menu-image:before,#adminmenu #toplevel_page_elementor div.wp-menu-image:before{content:"\e801";font-family:eicons;font-size:18px;margin-top:1px}#adminmenu #toplevel_page_edit-post_type-elementor_library a[href="admin.php?page=go_elementor_pro"],#adminmenu #toplevel_page_elementor a[href="admin.php?page=go_elementor_pro"]{color:#d54e21}#adminmenu #toplevel_page_edit-post_type-elementor_library .dashicons.dashicons-star-filled,#adminmenu #toplevel_page_elementor .dashicons.dashicons-star-filled{height:auto}.elementor-plugins-gopro{color:#39b54a;font-weight:700}.e-logo-wrapper{display:inline-block;padding:.75em;background-image:-webkit-linear-gradient(225deg,#ef295a,#434363);background-image:-o-linear-gradient(225deg,#ef295a,#434363);background-image:linear-gradient(-135deg,#ef295a,#434363);-webkit-border-radius:7.5%;border-radius:7.5%;line-height:1}.e-logo-wrapper i{color:#fff;font-size:1em}#elementor-switch-mode{margin:15px 0}#elementor-editor-button,#elementor-switch-mode-button{outline:none;cursor:pointer}#elementor-editor-button i,#elementor-switch-mode-button i{margin-right:3px;font-size:19px}body.elementor-editor-active .elementor-switch-mode-off{display:none}body.elementor-editor-active #elementor-switch-mode-button{background-color:#f7f7f7;color:#555;border-color:#ccc;-webkit-box-shadow:0 1px 0 #ccc!important;box-shadow:0 1px 0 #ccc!important;text-shadow:unset}body.elementor-editor-active #elementor-switch-mode-button:hover{background-color:#e9e9e9}body.elementor-editor-active #elementor-switch-mode-button:active{-webkit-box-shadow:inset 0 1px 0 #ccc;box-shadow:inset 0 1px 0 #ccc;-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px)}body.elementor-editor-active #postdivrich{display:none!important}body.elementor-editor-active .editor-block-list__layout,body.elementor-editor-inactive #elementor-editor,body.elementor-editor-inactive .elementor-switch-mode-on{display:none}body.elementor-editor-active .edit-post-layout__content .edit-post-visual-editor{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto}body.elementor-editor-active #elementor-editor{margin-bottom:50px}body.elementor-editor-active .edit-post-text-editor__body .editor-post-text-editor{display:none}body .gutenberg #elementor-switch-mode{margin:0 15px}body .gutenberg #elementor-switch-mode .button{margin:2px;height:33px;font-size:13px;line-height:1}body .gutenberg #elementor-switch-mode .button i{font-size:125%;padding-right:5px}.elementor-button{font-size:13px;text-decoration:none;padding:15px 40px}#elementor-editor{height:300px;width:100%;-webkit-transition:all .5s ease;-o-transition:all .5s ease;transition:all .5s ease}#elementor-editor .elementor-loader-wrapper{position:absolute;width:300px;left:50%;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}#elementor-editor .elementor-loader{-webkit-border-radius:7px;border-radius:7px;padding:40px;height:150px;width:150px;background-color:hsla(0,0%,100%,.9);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:2px 2px 20px 4px rgba(0,0,0,.02);box-shadow:2px 2px 20px 4px rgba(0,0,0,.02)}#elementor-editor .elementor-loader-boxes{height:100%;width:100%;position:relative}#elementor-editor .elementor-loader-box{position:absolute;background-color:#e6e9ec;-webkit-animation:load 1.8s linear infinite;animation:load 1.8s linear infinite}#elementor-editor .elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}#elementor-editor .elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}#elementor-editor .elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}#elementor-editor .elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}#elementor-editor .elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}#elementor-editor .elementor-loading-title{color:#a4afb7;text-align:center;text-transform:uppercase;margin-top:30px;letter-spacing:7px;font-size:10px;width:100%}#elementor-go-to-edit-page-link{height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #ddd;background-color:#f7f7f7;text-decoration:none;position:relative;font-family:Sans-serif}#elementor-go-to-edit-page-link:hover{background-color:#fff}#elementor-go-to-edit-page-link:focus{-webkit-box-shadow:none;box-shadow:none}#elementor-go-to-edit-page-link.elementor-animate #elementor-editor-button,#elementor-go-to-edit-page-link:not(.elementor-animate) .elementor-loader-wrapper{display:none}.elementor-button-spinner:before{font:normal 20px/.5 dashicons;speak:none;display:inline-block;padding:0;top:8px;left:-4px;position:relative;vertical-align:top;content:"\f463"}.elementor-button-spinner.loading:before{-webkit-animation:rotation 1s infinite linear;animation:rotation 1s infinite linear}.elementor-button-spinner.success:before{content:"\f147";color:#46b450}.elementor-blank_state{padding:5em 0;margin:auto;max-width:520px;text-align:center;color:#6d7882}.elementor-blank_state i{font-size:50px;color:#a4afb7}.elementor-blank_state h2{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:32px;font-weight:300;color:inherit;margin:50px 0 35px;line-height:1.2}.elementor-blank_state p{font-size:16px;font-weight:400;color:#a4afb7;margin-bottom:40px}.elementor-blank_state .elementor-button{display:inline-block}#available-widgets [class*=elementor-template] .widget-title:before{content:"\e801";font-family:eicons;font-size:17px}.elementor-settings-form-page{padding-top:30px}._elementor_settings_update_time,.elementor-settings-form-page:not(.elementor-active){display:none}.e-getting-started{max-width:900px;padding:2.5em 0;margin:auto;text-align:center}.e-getting-started__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1)}.e-getting-started__header .e-logo-wrapper{font-size:10px;margin-right:10px}.e-getting-started__title{padding:0 15px;font-weight:600;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.e-getting-started__skip{border-left:1px solid #eee;font-size:16px;color:inherit}.e-getting-started__skip i{padding:15px}.e-getting-started__content{padding:50px}.e-getting-started__content h2{font-size:2em;margin-top:0}.e-getting-started__content--narrow{max-width:500px;margin:auto}.e-getting-started__video{margin:40px 0 60px}.e-getting-started__video iframe{-webkit-box-shadow:10px 10px 20px rgba(0,0,0,.15);box-shadow:10px 10px 20px rgba(0,0,0,.15)}.e-getting-started__actions .button-primary{margin-right:20px}.notice.elementor-message{border:none;padding:20px}.notice.elementor-message .elementor-message-inner{display:table;width:100%}.notice.elementor-message .elementor-message-inner .elementor-message-action,.notice.elementor-message .elementor-message-inner .elementor-message-content,.notice.elementor-message .elementor-message-inner .elementor-message-icon{display:table-cell;vertical-align:middle}.notice.elementor-message .elementor-message-icon{font-size:20px;width:40px}.notice.elementor-message .elementor-message-content{padding:0 20px}.notice.elementor-message p{padding:0;margin:0}.notice.elementor-message h3{margin:0 0 5px}.notice.elementor-message .elementor-message-action{text-align:right}.notice.elementor-message .elementor-message-action .elementor-button{background-color:#d30c5c;color:#fff;border-color:#7c1337;-webkit-box-shadow:0 1px 0 #7c1337;box-shadow:0 1px 0 #7c1337;padding:5px 30px;height:auto;line-height:20px;text-transform:capitalize}.notice.elementor-message .elementor-message-action .elementor-button i{padding-right:5px}.notice.elementor-message .elementor-message-action .elementor-button:hover{background-color:#a0124a}.notice.elementor-message .elementor-message-action .elementor-button:active{-webkit-box-shadow:inset 0 1px 0 #7c1337;box-shadow:inset 0 1px 0 #7c1337;-webkit-transform:translateY(1px);-ms-transform:translateY(1px);transform:translateY(1px)}.notice.elementor-message .elementor-message-actions{margin-top:10px}.notice.elementor-message .elementor-message-actions .button.button-primary{margin-right:5px}@media (min-width:1200px){.elementor-message-action{padding-right:10px}}@media (max-width:600px){.notice.elementor-message{padding:20px}.notice.elementor-message .elementor-message-inner{display:block;text-align:center}.notice.elementor-message .elementor-message-inner .elementor-message-action,.notice.elementor-message .elementor-message-inner .elementor-message-content,.notice.elementor-message .elementor-message-inner .elementor-message-icon{display:block}.notice.elementor-message .elementor-message-inner .elementor-message-action{text-align:center}.notice.elementor-message .elementor-message-inner .elementor-message-icon{width:auto}.notice.elementor-message .elementor-message-inner .elementor-message-content{padding:10px 0}}#elementor-system-info{padding:15px}#elementor-system-info .elementor-system-info-section{margin-bottom:10px}#elementor-system-info .elementor-system-info-section>.elementor-system-info-report-name{padding-left:10px;border-bottom:1px solid #e1e1e1}#elementor-system-info .elementor-system-info-section .widefat{white-space:pre}#elementor-system-info .elementor-system-info-report-name{text-transform:uppercase;font-size:14px;margin:0;line-height:2}#elementor-system-info .elementor-system-info-report-row{overflow:hidden;padding:5px 0}#elementor-system-info .elementor-system-info-report-row>*{float:left}#elementor-system-info .elementor-system-info-field-recommendation,#elementor-system-info .elementor-system-info-report-field{padding-left:10px;color:#7f7f7f}#elementor-system-info .elementor-system-info-report-fields{padding-left:20px}#elementor-system-info .elementor-system-info-plugin-name{color:#000}#elementor-system-info .elementor-system-info-plugin-properties{padding:10px}#elementor-system-info #elementor-system-info-raw-code{width:100%;height:200px}#elementor-system-info #elementor-system-info-raw-code-label{padding:5px;display:block}#elementor-system-info .elementor-warning td:first-child{border-left:3px solid #fcb92c}@-webkit-keyframes elementor-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes elementor-rotation{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}#elementor-deactivate-feedback-dialog-wrapper{display:none}#elementor-deactivate-feedback-modal .dialog-widget-content{width:550px}#elementor-deactivate-feedback-modal .dialog-close-button{-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}#elementor-deactivate-feedback-modal .dialog-header{padding:18px 15px;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);text-align:left}#elementor-deactivate-feedback-modal .dialog-message{padding:30px 30px 0;text-align:left}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input{float:left;margin:0 15px 0 0;-webkit-box-shadow:none;box-shadow:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-input:not(:checked)~.elementor-feedback-text{display:none}#elementor-deactivate-feedback-modal .elementor-deactivate-feedback-dialog-label{display:block;font-size:13px;color:#6d7882}#elementor-deactivate-feedback-modal .elementor-feedback-text{margin:10px 0 0 30px;padding:5px;font-size:13px;-webkit-box-shadow:none;box-shadow:none;background-color:#fff;width:92%}#elementor-deactivate-feedback-modal .dialog-buttons-wrapper{border-top:none;text-align:left;padding:20px 30px 30px;overflow:hidden}#elementor-deactivate-feedback-modal .dialog-submit{background-color:#d30c5c;-webkit-border-radius:3px;border-radius:3px;color:#fff;line-height:1;padding:12px 20px;font-size:13px;width:180px;height:38px}#elementor-deactivate-feedback-modal .dialog-submit.elementor-loading:before{display:inline-block;content:"\f463";font:18px dashicons;-webkit-animation:elementor-rotation 2s infinite linear;animation:elementor-rotation 2s infinite linear}#elementor-deactivate-feedback-modal .dialog-skip{font-size:12px;color:#a4afb7;background:none;float:right;width:auto}#elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .elementor-feedback-text{color:#b01b1b;padding:0}#elementor-deactivate-feedback-modal[data-feedback-selected=elementor_pro] .dialog-submit{display:none}#elementor-deactivate-feedback-dialog-header i{color:#d30c5c;font-size:19px}#elementor-deactivate-feedback-dialog-header-title{font-size:15px;text-transform:uppercase;font-weight:700;padding-left:5px}#elementor-deactivate-feedback-dialog-form-caption{font-weight:700;font-size:15px;color:#495157;line-height:1.4}#elementor-deactivate-feedback-dialog-form-body{padding-top:30px}.elementor-deactivate-feedback-dialog-input-wrapper{line-height:1.3;overflow:hidden;margin-bottom:15px}#elementor-hidden-area{display:none}#elementor-import-template-trigger{cursor:pointer}#elementor-import-template-area{display:none;margin:50px 0 30px;text-align:center}#elementor-import-template-form{display:inline-block;margin-top:30px;padding:30px 50px;background-color:#fff;border:1px solid #e5e5e5}#elementor-import-template-title{font-size:18px;color:#555d66}.form-table:not(.elementor-maintenance-mode-is-enabled) .elementor-default-hide{display:none}.elementor-maintenance-mode-error{color:red;line-height:1.6;display:none}#e-dashboard-overview .dashicons{vertical-align:middle;font-size:17px}#e-dashboard-overview .e-overview__header{display:table;width:100%;-webkit-box-shadow:0 5px 8px rgba(0,0,0,.05);box-shadow:0 5px 8px rgba(0,0,0,.05);margin:0 -12px 8px;padding:0 12px 12px}#e-dashboard-overview .e-overview__create,#e-dashboard-overview .e-overview__logo,#e-dashboard-overview .e-overview__versions{display:table-cell;vertical-align:middle}#e-dashboard-overview .e-overview__logo{width:30px}#e-dashboard-overview .e-overview__versions{padding:0 10px;font-size:.9em;line-height:1.5}#e-dashboard-overview .e-overview__version{display:block}#e-dashboard-overview .e-overview__create{text-align:right}#e-dashboard-overview .e-overview__post{margin-top:10px}#e-dashboard-overview .e-overview__post-link{display:inline-block}#e-dashboard-overview .e-overview__badge{background:#39b54a;color:#fff;font-size:.75em;padding:3px 6px;-webkit-border-radius:3px;border-radius:3px;text-transform:uppercase}#e-dashboard-overview .e-overview__post-description{margin:0 0 1.5em}#e-dashboard-overview .e-overview__recently-edited li{color:#72777c}#e-dashboard-overview .e-overview__feed{font-size:14px;font-weight:500}#e-dashboard-overview .e-overview__feed .e-overview__post-link{padding-bottom:5px}#e-dashboard-overview .e-overview__feed .e-overview__heading,#e-dashboard-overview .e-overview__recently-edited .e-overview__heading{font-weight:700;border-bottom:1px solid #eee;margin:0 -12px;padding:6px 12px}#e-dashboard-overview .e-overview__footer{margin:0 -12px -12px;padding:12px;border-top:1px solid #eee}#e-dashboard-overview .e-overview__footer ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;list-style:none;margin:0;padding:0}#e-dashboard-overview .e-overview__footer ul li{padding:0 10px;margin:0;border-left:1px solid #ddd}#e-dashboard-overview .e-overview__footer ul li:first-child{padding-left:0;border:none}#e-dashboard-overview .e-overview__go-pro a{color:#fcb92c;font-weight:500}.post-type-elementor_library #elementor-template-library-tabs-wrapper{padding-top:2em;margin-bottom:2em}#elementor-new-template-modal .dialog-message{max-height:70vh}#elementor-new-template-dialog-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:100%;text-align:left;padding:0 120px;color:#6d7882}#elementor-new-template__description{width:35%;max-width:300px;padding-right:100px}#elementor-new-template__description__title{font-size:30px;color:#556068}#elementor-new-template__description__title span{font-weight:700}#elementor-new-template__description__content{font-size:14px;padding:30px 0}#elementor-new-template__take_a_tour{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;font-size:15px}#elementor-new-template__take_a_tour i{color:#f2295b;font-size:30px}#elementor-new-template__take_a_tour a{color:#6d7882;padding-left:10px;text-decoration:none;font-weight:500}#elementor-new-template__form{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;max-width:440px;padding:55px;background-color:#fff;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 30px 0 rgba(0,0,0,.08);box-shadow:0 2px 30px 0 rgba(0,0,0,.08)}#elementor-new-template__form__title{font-size:23px;color:#556068}#elementor-new-template__form .elementor-form-field__label{display:block;margin:25px 0 7px;font-size:14px;line-height:1}#elementor-new-template__form .elementor-form-field input,#elementor-new-template__form .elementor-form-field select{width:100%;height:50px;padding:10px;font-size:14px;-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:3px;border-radius:3px;background:none;color:#495157;border:1px solid;outline:none}#elementor-new-template__form .elementor-form-field input:not(:focus),#elementor-new-template__form .elementor-form-field select:not(:focus){border-color:#d5dadf}#elementor-new-template__form .elementor-form-field input:focus,#elementor-new-template__form .elementor-form-field select:focus{border-color:#a4afb7}#elementor-new-template__form .elementor-form-field__select{appearance:none;-webkit-appearance:none;-moz-appearance:none;cursor:pointer}#elementor-new-template__form .elementor-form-field__select__wrapper{position:relative}#elementor-new-template__form .elementor-form-field__select__wrapper:after{font-family:eicons;content:"\e955";position:absolute;top:50%;right:10px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}#elementor-new-template__form__submit{width:100%;height:50px;margin-top:25px}@media (max-width:1024px){#elementor-new-template__description{max-width:250px;padding-right:30px}}@media (max-width:767px){#elementor-new-template__description{display:none}}#elementor-role-manager{max-width:500px;margin-top:50px}#elementor-role-manager h3{color:#6d7882;font-weight:400;font-size:22px}#elementor-role-manager .elementor-settings-form-page{padding:0}#elementor-role-manager .elementor-role-row{background:#fff;color:#6d7882;margin-bottom:2px}#elementor-role-manager .elementor-role-row .elementor-role-label{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding:15px 20px;font-weight:500;cursor:pointer}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-name{padding-right:20px}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-toggle{text-align:right;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}#elementor-role-manager .elementor-role-row .elementor-role-label span.elementor-role-excluded-indicator{color:#a4afb7}#elementor-role-manager .elementor-role-row .elementor-role-controls{background-color:#f7f7f7;padding:20px 20px 5px}#elementor-role-manager .elementor-role-row .elementor-role-controls>div{margin-bottom:15px}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__desc{font-weight:500;font-style:italic}#elementor-role-manager .elementor-role-row .elementor-role-controls .elementor-role-go-pro .elementor-role-go-pro__link{text-align:right;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
+/*! elementor - v2.2.1 - 03-09-2018 */
@charset "UTF-8";
.elementor-panel-box {
margin-top: 10px;
line-height: 1.4;
color: #a4afb7; }
-.elementor-panel-nerd-box {
- padding: 30px 20px;
- text-align: center; }
- .elementor-panel-nerd-box .elementor-panel-nerd-box-icon {
- font-size: 52px;
- color: #a4afb7; }
- .elementor-panel-nerd-box .elementor-panel-nerd-box-title {
- margin-top: 20px;
- font-size: 16px;
- font-weight: bold; }
- .elementor-panel-nerd-box .elementor-panel-nerd-box-message {
- margin-top: 20px;
- line-height: 1.4;
- font-size: 11px; }
- .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link {
- background-color: #fcb92c;
- color: #ffffff;
- padding: 7px 25px;
- margin-top: 20px;
- -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
- box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
- -webkit-transition: .5s;
- -o-transition: .5s;
- transition: .5s; }
- .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link:hover {
- background-color: #fdca5e; }
-
.elementor-controls-popover {
display: none;
position: absolute;
margin: -4px auto 5px;
padding-top: 15px;
width: 90%;
- z-index: 1;
+ z-index: 10000;
background-color: #fff; }
.elementor-controls-popover:before {
content: '';
.elementor-controls-popover div.elementor-control:before {
content: none; }
-#elementor-panel-get-pro-elements .elementor-panel-nerd-box-message {
+#elementor-panel-get-pro-elements .elementor-nerd-box-message {
text-transform: uppercase; }
.select2-container {
transition: all ease-in-out .3s; }
.elementor-control a:hover {
border-bottom-color: inherit; }
+ .elementor-control .elementor-control-content {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column; }
.elementor-control.elementor-control-type-divider {
padding: 0;
margin-bottom: -1px;
border-color: #e6e9ec;
border-style: solid; }
.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick {
- border-top-width: 3px; }
+ border-top-width: 1px; }
.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default {
margin-right: 20px;
margin-left: 20px; }
- .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider):before {
- content: '';
- height: 1px;
- display: block;
- margin-bottom: 15px;
- background-color: #e6e9ec; }
+ .elementor-control.elementor-control-type-divider + .elementor-control:not(.elementor-control-type-section) {
+ padding-top: 15px; }
.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp {
margin-top: 15px; }
.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before {
+ content: '';
+ height: 1px;
+ display: block;
+ margin-bottom: 15px;
background-color: transparent; }
.elementor-control.elementor-control-separator-before {
padding-top: 15px; }
.elementor-control.elementor-control-separator-before:before {
content: '';
position: absolute;
- height: 3px;
+ height: 1px;
width: 100%;
top: 0;
left: 0;
.elementor-control.elementor-control-separator-after:after {
content: '';
position: absolute;
- height: 3px;
+ height: 1px;
width: 100%;
bottom: 0;
left: 0;
background-color: #d5dadf; }
- .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs {
+ .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs,
+ .elementor-control.elementor-control-separator-after + .elementor-control-separator-default {
padding-top: 15px; }
.elementor-control.elementor-control-deprecated {
color: #b01b1b; }
display: none; }
body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile {
display: none; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper {
+ position: relative; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper select {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ color: #495157;
+ font-size: 12px;
+ font-family: inherit;
+ font-weight: inherit;
+ font-style: inherit;
+ text-transform: inherit;
+ letter-spacing: inherit;
+ line-height: inherit;
+ -webkit-flex-basis: 100%;
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ padding-right: 5px;
+ padding-left: 20px;
+ cursor: pointer; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after {
+ font-family: eicons;
+ content: '\e955';
+ font-size: 12px;
+ position: absolute;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
+ left: 5px;
+ pointer-events: none; }
.elementor-control .select2-container {
width: 100% !important;
outline: none; }
.elementor-control .select2-container.select2-container--open .select2-selection--multiple, .elementor-control .select2-container.select2-container--focus .select2-selection--single,
.elementor-control .select2-container.select2-container--focus .select2-selection--multiple {
border-color: #a4afb7; }
+ .elementor-control .select2-container.select2-container--default .select2-selection {
+ -webkit-border-radius: 3px;
+ border-radius: 3px; }
.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear {
display: none; }
.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice {
border: none;
-webkit-border-radius: 0;
border-radius: 0; }
+ .elementor-control .select2-container.select2-container--default .select2-selection__rendered {
+ line-height: 27px; }
.elementor-control .select2-selection {
outline: none; }
.elementor-control .select2-selection--single {
height: 27px;
top: 0; }
+.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,
+.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before {
+ content: '\f0d7'; }
+
+.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,
+.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before {
+ content: ""; }
+
.elementor-panel-heading {
display: table;
table-layout: fixed;
width: 100%;
border-bottom: 1px solid #e6e9ec;
cursor: pointer; }
- .elementor-panel-heading:not(.elementor-open) .elementor-panel-heading-toggle .fa:before {
- content: ""; }
- .elementor-panel-heading.elementor-open .elementor-panel-heading-toggle .fa:before {
- content: '\f0d7'; }
.elementor-panel-heading > * {
display: table-cell;
vertical-align: middle; }
.elementor-choices input:not(:checked) + .elementor-choices-label {
background-color: #fff;
color: #a4afb7; }
+ .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) {
+ -webkit-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0; }
+ .elementor-choices input:not(:checked) + .elementor-choices-label:last-child {
+ -webkit-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px; }
.elementor-choices .elementor-choices-label {
display: table-cell;
vertical-align: middle;
-webkit-border-radius: 5px;
border-radius: 5px;
position: relative;
- width: 67%; }
+ width: 70%; }
.elementor-slider .ui-slider-handle {
height: 16px;
width: 16px;
cursor: pointer; }
.elementor-slider-input {
- width: 33%;
+ width: 30%;
float: left; }
.elementor-slider-input input {
- width: 80%;
- float: left; }
+ max-width: 80%;
+ float: left;
+ padding: 5px 5px; }
.elementor-units-choices {
-webkit-box-flex: 1;
.elementor-control-position .elementor-choices {
direction: ltr; }
+.elementor-control-direction-ltr {
+ direction: ltr; }
+
+.elementor-control-direction-rtl {
+ direction: rtl; }
+
.elementor-control-type-media .elementor-control-media {
padding: 7px;
border: 1px solid;
- height: 150px; }
+ height: 150px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out; }
.elementor-control-type-media .elementor-control-media:not(:hover) {
border-color: #d5dadf; }
.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button {
border-color: #a4afb7; }
.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button {
background-color: #a4afb7; }
- .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-image-area {
+ .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area {
display: none; }
.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button {
display: none; }
color: #fff;
font-size: 20px; }
-.elementor-control-type-media .elementor-control-media-image-area:not(:hover) .elementor-control-media-delete {
- display: none; }
-
-.elementor-control-type-media .elementor-control-media-image-area:hover .elementor-control-media-image {
- opacity: .5; }
+.elementor-control-type-media .elementor-control-media-area {
+ background-image: -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ background-image: -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ background-image: linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ -webkit-background-size: 16px 16px;
+ background-size: 16px 16px;
+ background-position: 0 0, 8px 8px;
+ background-color: #f6f6f6;
+ overflow: hidden; }
+ .elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ bottom: -30px; }
+ .elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image {
+ opacity: .9; }
+ .elementor-control-type-media .elementor-control-media-area i {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ color: rgba(255, 255, 255, 0.7);
+ font-size: 21px; }
.elementor-control-type-media .elementor-control-media-delete {
position: absolute;
font-size: 11px;
color: #fff;
background-color: #a4afb7;
- text-transform: uppercase; }
+ text-transform: uppercase;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+ -webkit-box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); }
.elementor-control-type-media .elementor-control-media-image {
height: 100%;
padding: 5px;
font-size: 12px; }
+.elementor-control-type-url .elementor-control-url-autocomplete-spinner {
+ display: none;
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ top: 7px;
+ right: 44px; }
+
.elementor-control-type-url .elementor-input {
direction: ltr; }
.elementor-control-type-url .elementor-input:not(:focus) + .elementor-control-url-more {
.elementor-control-type-url .elementor-input:focus + .elementor-control-url-more {
border-color: #a4afb7; }
+.elementor-autocomplete-menu {
+ position: absolute;
+ background: #fff;
+ color: #495157;
+ border: 1px solid #a4afb7;
+ margin: 0;
+ list-style: none;
+ padding: 4px 0;
+ height: auto;
+ width: 100%;
+ min-width: 260px;
+ max-width: 300px;
+ max-height: 200px;
+ overflow-y: auto;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: all .3s ease-in-out;
+ -o-transition: all .3s ease-in-out;
+ transition: all .3s ease-in-out;
+ cursor: default;
+ z-index: 1; }
+ .elementor-autocomplete-menu .ui-menu-item {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-align-self: baseline;
+ -ms-flex-item-align: baseline;
+ align-self: baseline;
+ padding: 5px 8px;
+ font-size: 12px;
+ width: 100%;
+ line-height: 1.2;
+ cursor: pointer; }
+ .elementor-autocomplete-menu .ui-menu-item.ui-state-hover, .elementor-autocomplete-menu .ui-menu-item.ui-state-active, .elementor-autocomplete-menu .ui-menu-item.ui-state-focus {
+ background: #e6e9ec; }
+ .elementor-autocomplete-menu .elementor-autocomplete-item-info {
+ font-size: 10px;
+ padding-top: 2px; }
+
.elementor-control-type-section {
margin-top: 10px;
padding: 0; }
- .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section) {
- padding-top: 15px; }
- .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before {
- display: none; }
+ .elementor-control-type-section.elementor-open {
+ padding-bottom: 15px; }
+ .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before {
+ display: none; }
.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-title {
width: 70%; }
border-radius: 3px; }
.elementor-control-type-wysiwyg #insert-media-button {
- margin-top: 7px;
height: initial;
- line-height: 1;
+ line-height: 24px;
font-size: 10px;
- padding: 3px 7px;
background-color: #e6e9ec; }
.elementor-control-type-wysiwyg .ed_button {
text-align: center;
width: 100%;
padding: 0;
- line-height: 30px;
+ line-height: 27px;
border-top: 1px solid #a4afb7;
border-bottom: 1px solid #a4afb7;
border-left: 1px solid #a4afb7;
width: auto;
height: 26px; }
+.elementor-group-control-css-filter .elementor-slider {
+ height: 6px;
+ -webkit-box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); }
+
+.elementor-group-control-css-filter .elementor-slider .ui-slider-handle {
+ -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.1);
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.1); }
+
+.elementor-group-control-css-filter .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper {
+ margin-top: 0;
+ margin-bottom: 5px; }
+
+.elementor-group-control-blur .elementor-slider {
+ background: url("../images/blur.png");
+ -webkit-background-size: cover;
+ background-size: cover;
+ background-position: center; }
+
+.elementor-group-control-contrast .elementor-slider {
+ background: url("../images/contrast.png");
+ -webkit-background-size: 100% 100%;
+ background-size: 100% 100%; }
+
+.elementor-group-control-hue .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(red), color-stop(orange), color-stop(yellow), color-stop(greenyellow), color-stop(limegreen), color-stop(deepskyblue), color-stop(blue), color-stop(95%, darkviolet));
+ background-image: -webkit-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%);
+ background-image: -o-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%);
+ background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); }
+
+.elementor-group-control-saturate .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(gray), to(red));
+ background-image: -webkit-linear-gradient(left, gray, red);
+ background-image: -o-linear-gradient(left, gray, red);
+ background-image: linear-gradient(to right, gray, red); }
+
+.elementor-group-control-brightness .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(black), to(white));
+ background-image: -webkit-linear-gradient(left, black, white);
+ background-image: -o-linear-gradient(left, black, white);
+ background-image: linear-gradient(to right, black, white); }
+
.wp-picker-container.wp-picker-active {
position: absolute;
z-index: 10000;
- top: 0;
+ top: -9px;
left: 7px;
background-color: #fff;
border: solid #fff;
.wp-picker-container:not(.wp-picker-active) .wp-color-result {
margin: 0; }
-.wp-picker-container.wp-picker-active {
- -webkit-transform: translateY(6px);
- -ms-transform: translateY(6px);
- transform: translateY(6px); }
- [class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active,
- [class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active {
- padding-top: 9px; }
- .wp-picker-container.wp-picker-active .wp-color-result {
- margin-right: 3px; }
+[class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active,
+[class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active {
+ padding-top: 9px; }
+
+.wp-picker-container.wp-picker-active .wp-color-result {
+ margin-right: 3px; }
.wp-picker-container input[type="text"].wp-color-picker {
float: left;
box-shadow: 1px 2px 3px -2px #222;
background-color: #6d7882;
position: fixed;
+ overflow: hidden;
-webkit-border-radius: 3px;
border-radius: 3px;
z-index: 9998; }
user-select: none; }
.pen-icon:hover {
background: #556068; }
- .pen-icon:first-of-type {
- -webkit-border-top-left-radius: 3px;
- border-top-left-radius: 3px;
- -webkit-border-bottom-left-radius: 3px;
- border-bottom-left-radius: 3px; }
- .pen-icon:last-of-type {
- -webkit-border-top-right-radius: 3px;
- border-top-right-radius: 3px;
- -webkit-border-bottom-right-radius: 3px;
- border-bottom-right-radius: 3px; }
.pen-icon[data-group], .pen-icon[data-action="closeGroup"] {
display: none; }
.pen-icon[data-action="close"]:before {
content: '';
position: absolute;
- left: 0;
+ right: 0;
height: 60%;
width: 1px;
background-color: #556068; }
line-height: 1.5;
padding: 0;
padding-right: 10px;
- width: 250px; }
+ padding-left: 10px;
+ width: 250px;
+ direction: ltr; }
.pen-input-wrapper .pen-url-input, .pen-input-wrapper .pen-url-input:focus {
background-color: transparent;
border: none;
color: #fff; }
.pen-input-wrapper .pen-url-input::-webkit-input-placeholder {
color: #d5dadf; }
- .pen-input-wrapper .pen-url-input::-moz-placeholder {
- color: #d5dadf; }
.pen-input-wrapper .pen-url-input:-ms-input-placeholder {
color: #d5dadf; }
.pen-input-wrapper .pen-url-input::-ms-input-placeholder {
.pen-input-wrapper .pen-url-input::placeholder {
color: #d5dadf; }
.pen-input-label {
- margin: 0; }
+ margin: 0;
+ margin-left: -1px; }
.pen-placeholder:before {
content: attr(data-pen-placeholder);
position: absolute;
background-color: #fff;
border: 1px solid #a4afb7;
-webkit-border-radius: 3px;
- border-radius: 3px; }
+ border-radius: 3px;
+ z-index: 1; }
.elementor-tags-list__group-title {
color: #495157;
font-weight: bold;
width: 260px;
background-color: #e6e9ec;
-webkit-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3);
- box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); }
+ box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3);
+ z-index: 1; }
.elementor-tag-settings-popup:before {
content: '';
position: absolute;
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1; }
- .elementor-label-inline .elementor-control-dynamic-switcher-wrapper {
+ .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-dynamic-switcher-wrapper {
width: 100%;
padding-bottom: 10px; }
#elementor {
position: relative; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner {
- margin-top: 25px; }
+.elementor-editor-active .elementor.elementor-edit-area-active .elementor-top-section > .elementor-container > .elementor-row {
+ min-height: 40px; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-empty .elementor-sortable-placeholder {
- display: none; }
+.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section:first-child {
+ margin-top: 15px; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-empty-view {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- z-index: 1; }
+.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section > .elementor-container > .elementor-row {
+ min-height: 40px; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-first-add {
- text-align: center;
- border: 1px dashed #d5dadf;
+.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap {
+ min-height: 30px; }
+ @media (min-width: 768px) {
+ .elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap {
+ margin: 10px; } }
+
+.elementor-editor-active .elementor-column {
+ min-width: 25px; }
+
+.elementor-editor-active .elementor-widget.elementor-loading {
+ opacity: .3; }
+
+.elementor-editor-active .elementor-widget:not(.elementor-loading):not(.elementor-widget-menu-anchor) {
+ -webkit-transition: all .1s;
+ -o-transition: all .1s;
+ transition: all .1s; }
+
+.elementor-editor-active .elementor-widget.elementor-element-editable, .elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover {
+ outline: 1px solid #71d7f7; }
+
+.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings {
+ display: none; }
+
+.elementor-editor-active .elementor-editor-element-setting {
+ cursor: pointer;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
- height: 100%;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
- justify-content: center; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-first-add .elementor-icon {
- font-size: 19px;
- color: #a4afb7;
- cursor: pointer; }
+ justify-content: center;
+ padding: 0;
+ margin: 0;
+ font-size: 11px;
+ color: #fff;
+ width: 25px;
+ -webkit-transition: margin .3s, width .3s, font .3s;
+ -o-transition: margin .3s, width .3s, font .3s;
+ transition: margin .3s, width .3s, font .3s; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element > .elementor-element-overlay {
+.elementor-editor-active .handle {
+ display: none; }
+
+.elementor-editor-active .elementor-inline-editing {
+ min-height: 15px; }
+
+.elementor-editor-active .elementor-edit-hidden {
+ display: none; }
+
+.elementor-element > .elementor-element-overlay {
position: absolute;
top: 0;
left: 0;
z-index: 9998;
pointer-events: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget-empty {
+.elementor-element-empty .elementor-sortable-placeholder {
+ display: none; }
+
+.elementor-element.elementor-widget-empty {
background-color: rgba(213, 218, 223, 0.8); }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget-empty .elementor-widget-empty-icon {
+ .elementor-element.elementor-widget-empty .elementor-widget-empty-icon {
color: #c2cbd2;
font-size: 22px;
display: block;
text-align: center;
padding: 10px 0; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element:not(:hover):not(.elementor-element-editable) > .elementor-element-overlay .elementor-editor-element-settings {
+.elementor-element:not(:hover):not(.elementor-element-editable) > .elementor-element-overlay .elementor-editor-element-settings {
display: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side="top"]:before, .elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side="bottom"] + .elementor-element:before {
+.elementor-element--toggle-edit-tools > .elementor-element-overlay .elementor-editor-element-edit:not(.elementor-active) ~ * {
+ width: 0;
+ font-size: 0; }
+
+.elementor-element[data-side="top"]:before, .elementor-element[data-side="bottom"] + .elementor-element:before {
content: '';
background-color: #71d7f7;
-webkit-transition-timing-function: ease-out;
animation: placeholder-widget 500ms;
display: block; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side="bottom"]:last-child:after {
+.elementor-element[data-side="bottom"]:last-child:after {
content: '';
background-color: #71d7f7;
-webkit-transition-timing-function: ease-out;
animation: placeholder-widget 500ms;
display: block; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section > .elementor-element-overlay {
+.elementor-section > .elementor-element-overlay {
right: 0;
bottom: 0; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-section > .elementor-element-overlay:after {
+ .elementor-section > .elementor-element-overlay:after {
position: absolute;
left: 2px;
right: 2px;
-webkit-animation: section-outline .75s;
animation: section-outline .75s; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section:hover > .elementor-element-overlay:after, .elementor-editor-active .elementor.elementor-edit-mode .elementor-section.elementor-element-editable > .elementor-element-overlay:after {
+.elementor-section:hover > .elementor-element-overlay:after, .elementor-section.elementor-element-editable > .elementor-element-overlay:after {
content: ''; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-top-section > .elementor-container > .elementor-row {
- min-height: 40px; }
+.elementor-section-filled .elementor-sortable-placeholder.elementor-column {
+ display: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner-section:first-child {
- margin-top: 15px; }
+.elementor-section-filled .elementor-row.elementor-draggable-over {
+ border: 1px solid #f00; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner-section > .elementor-container > .elementor-row {
- min-height: 40px; }
+.elementor-column > .elementor-element-overlay {
+ right: 0;
+ bottom: 0; }
+ .elementor-column > .elementor-element-overlay:after {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ outline: 1px dashed #6d7882; }
+
+.elementor-column:hover > .elementor-element-overlay, .elementor-column.elementor-element-editable > .elementor-element-overlay {
+ border: 1px solid #ffffff; }
+ .elementor-column:hover > .elementor-element-overlay:after, .elementor-column.elementor-element-editable > .elementor-element-overlay:after {
+ content: ''; }
+
+.elementor-column.elementor-dragging-on-child > .elementor-element-overlay {
+ border: 1px solid #71d7f7; }
+ .elementor-column.elementor-dragging-on-child > .elementor-element-overlay:after {
+ display: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings {
+.elementor-column > .ui-resizable-e, .elementor-column > .ui-resizable-w {
+ cursor: col-resize;
+ width: 7px;
+ position: absolute;
+ left: -5px;
+ top: 0;
+ height: 100%; }
+
+.elementor-column:last-of-type > .ui-resizable-e, .elementor-column:last-of-type > .ui-resizable-w {
+ display: none !important; }
+
+@media (max-width: 1024px) {
+ .elementor-column > .ui-resizable-e, .elementor-column > .ui-resizable-w {
+ display: none !important; } }
+
+.elementor-editor-element-settings {
position: absolute;
- overflow: hidden;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
line-height: 1;
z-index: 1;
pointer-events: all; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-trigger.elementor-active ~ .elementor-editor-element-setting {
- margin-right: 0; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-trigger:not(.elementor-active) ~ .elementor-editor-element-setting {
- width: 0;
- font-size: 0;
- padding: 0; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-remove:hover .fa {
- color: #f00; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-setting {
- cursor: pointer;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- padding: 0;
- margin: 0;
- font-size: 11px;
- color: #fff;
- width: 25px;
- -webkit-transition: margin .3s, width .3s, font .3s;
- -o-transition: margin .3s, width .3s, font .3s;
- transition: margin .3s, width .3s, font .3s;
- -webkit-box-sizing: content-box;
- box-sizing: content-box; }
+.elementor-editor-element-setting.elementor-editor-element-save {
+ display: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings {
+@media (min-width: 1025px) {
+ .elementor-editor-element-edit {
+ cursor: move; } }
+
+.elementor-editor-section-settings {
+ height: 24px;
top: 1px;
right: 50%;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#41c9f4), to(#71d7f7));
- background-image: -webkit-linear-gradient(top, #41c9f4, #71d7f7);
- background-image: -o-linear-gradient(top, #41c9f4, #71d7f7);
- background-image: linear-gradient(to bottom, #41c9f4, #71d7f7);
- -webkit-border-radius: 3px 3px 0 0;
- border-radius: 3px 3px 0 0;
-webkit-transform: translateX(50%) translateY(-100%);
-ms-transform: translateX(50%) translateY(-100%);
- transform: translateX(50%) translateY(-100%); }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:hover {
+ transform: translateX(50%) translateY(-100%);
+ background-color: #71d7f7;
+ -webkit-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+ -webkit-box-shadow: 0px -2px 8px rgba(0, 0, 0, 0.05);
+ box-shadow: 0px -2px 8px rgba(0, 0, 0, 0.05); }
+ .elementor-editor-section-settings i.eicon-handle {
+ font-size: 16px; }
+ .elementor-editor-section-settings .elementor-editor-element-setting:hover {
background-color: #10bcf2; }
- @media (min-width: 1025px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:first-child {
- padding-right: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:first-child:not(.elementor-active) {
- padding-left: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:last-child {
- padding-left: 1px; } }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings {
+ .elementor-editor-section-settings .elementor-editor-element-setting:first-child {
+ -webkit-border-radius: 0 5px 0 0;
+ border-radius: 0 5px 0 0; }
+ .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before {
+ content: '';
+ position: absolute;
+ border: solid transparent;
+ top: 2px;
+ border-left-color: #71d7f7;
+ border-width: 22px 0 0 12px;
+ left: -webkit-calc(100% - 1px);
+ left: calc(100% - 1px); }
+ .elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before {
+ border-left-color: #10bcf2; }
+ .elementor-editor-section-settings .elementor-editor-element-setting:last-child {
+ -webkit-border-radius: 5px 0 0 0;
+ border-radius: 5px 0 0 0; }
+ .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after {
+ content: '';
+ position: absolute;
+ border: solid transparent;
+ top: 2px;
+ border-right-color: #71d7f7;
+ border-width: 22px 12px 0 0;
+ right: -webkit-calc(100% - 1px);
+ right: calc(100% - 1px); }
+ .elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after {
+ border-right-color: #10bcf2; }
+
+.elementor-section--handles-inside .elementor-editor-section-settings {
+ -webkit-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ transform: translateX(-50%);
+ -webkit-border-radius: 0 0 5px 5px;
+ border-radius: 0 0 5px 5px; }
+ .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child {
+ -webkit-border-radius: 0 0 5px 0;
+ border-radius: 0 0 5px 0; }
+ .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before {
+ top: 0;
+ border-width: 0 0 22px 12px; }
+ .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child {
+ -webkit-border-radius: 0 0 0 5px;
+ border-radius: 0 0 0 5px; }
+ .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after {
+ top: 0;
+ border-width: 0 12px 22px 0; }
+
+.elementor-editor-column-settings {
top: -1px;
right: -1px;
- -webkit-border-radius: 0 3px 0 0;
- border-radius: 0 3px 0 0;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#6d7882), to(#556068));
- background-image: -webkit-linear-gradient(top, #6d7882, #556068);
- background-image: -o-linear-gradient(top, #6d7882, #556068);
- background-image: linear-gradient(to bottom, #6d7882, #556068); }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:hover {
+ -webkit-border-radius: 0 0 0 3px;
+ border-radius: 0 0 0 3px;
+ overflow: hidden; }
+ .elementor-editor-column-settings .elementor-editor-element-setting {
background-color: #495157; }
- @media (min-width: 1025px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:first-child {
- padding-right: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:first-child:not(.elementor-active) {
- padding-left: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:last-child {
- padding-left: 1px; } }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings {
+ .elementor-editor-column-settings .elementor-editor-element-setting:not(:hover) {
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#6d7882), to(#556068));
+ background-image: -webkit-linear-gradient(top, #6d7882, #556068);
+ background-image: -o-linear-gradient(top, #6d7882, #556068);
+ background-image: linear-gradient(to bottom, #6d7882, #556068); }
+
+.elementor-editor-widget-settings {
z-index: 2;
top: -1px;
left: -1px;
- background-image: -webkit-gradient(linear, left bottom, left top, from(#41c9f4), to(#71d7f7));
- background-image: -webkit-linear-gradient(bottom, #41c9f4, #71d7f7);
- background-image: -o-linear-gradient(bottom, #41c9f4, #71d7f7);
- background-image: linear-gradient(to top, #41c9f4, #71d7f7);
- -webkit-border-radius: 0 0 3px 0;
- border-radius: 0 0 3px 0;
-webkit-box-orient: horizontal;
-webkit-box-direction: reverse;
-webkit-flex-direction: row-reverse;
-ms-flex-direction: row-reverse;
- flex-direction: row-reverse; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:hover {
+ flex-direction: row-reverse;
+ -webkit-border-radius: 0 0 3px 0;
+ border-radius: 0 0 3px 0;
+ overflow: hidden; }
+ .elementor-editor-widget-settings .elementor-editor-element-setting {
background-color: #10bcf2; }
- @media (min-width: 1025px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:first-child {
- padding-left: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:first-child:not(.elementor-active) {
- padding-right: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:last-child {
- padding-right: 1px; } }
-
-@media (min-width: 1025px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-trigger {
- cursor: move; } }
-
-@media (max-width: 1024px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-setting:not(.elementor-editor-element-trigger) {
- display: none; } }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-editor-column-settings .elementor-editor-element-add, .elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-editor-column-settings .elementor-editor-element-duplicate {
- display: none; }
+ .elementor-editor-widget-settings .elementor-editor-element-setting:not(:hover) {
+ background-image: -webkit-gradient(linear, left bottom, left top, from(#41c9f4), to(#71d7f7));
+ background-image: -webkit-linear-gradient(bottom, #41c9f4, #71d7f7);
+ background-image: -o-linear-gradient(bottom, #41c9f4, #71d7f7);
+ background-image: linear-gradient(to top, #41c9f4, #71d7f7); }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-sortable-placeholder.elementor-column {
- display: none; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-row.elementor-draggable-over {
- border: 1px solid #f00; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .elementor-element-overlay {
- right: 0;
- bottom: 0; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .elementor-element-overlay:after {
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- outline: 1px dashed #6d7882; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:hover > .elementor-element-overlay, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-element-editable > .elementor-element-overlay {
- border: 1px solid #ffffff; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-column:hover > .elementor-element-overlay:after, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-element-editable > .elementor-element-overlay:after {
- content: ''; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-dragging-on-child > .elementor-element-overlay {
- border: 1px solid #71d7f7; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-dragging-on-child > .elementor-element-overlay:after {
- display: none; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .ui-resizable-e, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .ui-resizable-w {
- cursor: col-resize;
- width: 7px;
+.elementor-empty-view {
position: absolute;
- left: -5px;
top: 0;
- height: 100%; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:last-of-type > .ui-resizable-e, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column:last-of-type > .ui-resizable-w {
- display: none !important; }
-
-@media (max-width: 1024px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .ui-resizable-e, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .ui-resizable-w {
- display: none !important; } }
-
-.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap {
- min-height: 30px; }
- @media (min-width: 768px) {
- .elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap {
- margin: 10px; } }
-
-.elementor-editor-active .elementor-column {
- min-width: 25px; }
-
-.elementor-editor-active .elementor-widget.elementor-loading {
- opacity: .3; }
-
-.elementor-editor-active .elementor-widget:not(.elementor-loading):not(.elementor-widget-menu-anchor) {
- -webkit-transition: all .1s;
- -o-transition: all .1s;
- transition: all .1s; }
-
-.elementor-editor-active .elementor-widget.elementor-element-editable, .elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover {
- outline: 1px solid #71d7f7; }
-
-.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings {
- display: none; }
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: 1; }
-.elementor-editor-active .handle {
- display: none; }
+.elementor-first-add {
+ text-align: center;
+ border: 1px dashed #d5dadf;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 100%;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .elementor-first-add .elementor-icon {
+ font-size: 19px;
+ color: #a4afb7;
+ cursor: pointer; }
-.elementor-editor-active .elementor-sortable-helper {
+.elementor-sortable-helper {
position: absolute;
-webkit-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
cursor: move; }
- .elementor-editor-active .elementor-sortable-helper .icon {
+ .elementor-sortable-helper .icon {
font-size: 28px;
padding-top: 15px;
line-height: 1; }
- .elementor-editor-active .elementor-sortable-helper .elementor-element-title-wrapper {
+ .elementor-sortable-helper .elementor-element-title-wrapper {
display: table;
width: 100%; }
- .elementor-editor-active .elementor-sortable-helper .title {
+ .elementor-sortable-helper .title {
font-size: 11px;
font-family: Arial, Helvetica, sans-serif;
font-weight: normal;
vertical-align: middle;
height: 40px; }
-.elementor-editor-active .elementor-inline-editing {
- min-height: 15px; }
-
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-first-add {
+.elementor-editor-content-only .elementor-first-add {
display: none; }
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section > .elementor-element-overlay {
+.elementor-editor-content-only .elementor-section > .elementor-element-overlay {
display: none; }
- .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section > .elementor-element-overlay:after {
+ .elementor-editor-content-only .elementor-section > .elementor-element-overlay:after {
display: none; }
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section:hover > .elementor-element-overlay:after, .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section.elementor-element-editable > .elementor-element-overlay:after {
+.elementor-editor-content-only .elementor-section:hover > .elementor-element-overlay:after, .elementor-editor-content-only .elementor-section.elementor-element-editable > .elementor-element-overlay:after {
display: none; }
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column > .elementor-element-overlay {
+.elementor-editor-content-only .elementor-column > .elementor-element-overlay {
display: none; }
- .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column > .elementor-element-overlay:after {
+ .elementor-editor-content-only .elementor-column > .elementor-element-overlay:after {
display: none; }
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column:hover > .elementor-element-overlay:after, .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column.elementor-element-editable > .elementor-element-overlay:after {
+.elementor-editor-content-only .elementor-column:hover > .elementor-element-overlay:after, .elementor-editor-content-only .elementor-column.elementor-element-editable > .elementor-element-overlay:after {
display: none; }
@media (min-width: 1025px) {
- .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-editor-element-trigger {
+ .elementor-editor-content-only .elementor-editor-element-edit {
cursor: pointer; } }
.elementor-sortable-placeholder:not(.elementor-column-placeholder) {
display: none; }
.elementor-add-section {
- background-color: rgba(255, 255, 255, 0.5);
- max-width: 1140px;
+ max-width: 1160px;
position: relative; }
- .elementor-add-section:not(.elementor-dragging-on-child) {
- border: 2px dashed #d5dadf; }
- .elementor-add-section.elementor-dragging-on-child {
+ .elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner {
+ border: 2px dashed #d5dadf;
+ background-color: rgba(255, 255, 255, 0.5); }
+ .elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner {
border: 3px dashed #71d7f7; }
.elementor-add-section[data-view="choose-action"] .elementor-select-preset {
display: none; }
.elementor-add-section[data-view="select-preset"] .elementor-add-new-section {
display: none; }
- @media (max-width: 479px) {
- .elementor-add-section {
- display: none; } }
.elementor-add-section-inner {
text-align: center;
- margin-top: 10px;
+ margin: 20px;
padding: 40px 0; }
.elementor-add-new-section {
display: inline-block; }
- .elementor-add-new-section .elementor-button {
- color: #fff;
- background-image: none;
- font-size: 13px;
- font-family: Arial, Helvetica, sans-serif;
- font-weight: normal;
- font-style: normal;
- text-transform: uppercase;
- line-height: 1;
+ .elementor-add-new-section .elementor-add-section-area-button {
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
height: 40px;
- min-width: 170px;
- padding: 0 20px;
- border: none;
- -webkit-border-radius: 3px;
- border-radius: 3px;
+ width: 40px;
+ color: #fff;
+ font-size: 16px;
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ -webkit-transition: all .3s;
+ -o-transition: all .3s;
+ transition: all .3s;
cursor: pointer; }
- .elementor-add-new-section .elementor-button:hover {
+ .elementor-add-new-section .elementor-add-section-area-button:hover {
opacity: 0.85;
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); }
- .elementor-add-new-section .elementor-button:active {
+ .elementor-add-new-section .elementor-add-section-area-button:active {
-webkit-box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.1);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.1); }
.elementor-add-new-section .elementor-add-section-button {
- background-color: #B7084E; }
+ background-color: #D30C5C; }
.elementor-add-new-section .elementor-add-template-button {
background-color: #6d7882;
- margin-right: 25px; }
+ margin-right: 5px; }
.elementor-add-section-drag-title {
font-family: Arial, Helvetica, sans-serif;
.elementor-add-section-close {
position: absolute;
- right: 20px;
+ right: 40px;
top: 20px;
font-size: 20px;
cursor: pointer;
cursor: pointer;
margin: 0;
padding: 10px;
- float: right; }
+ float: right;
+ max-width: 33.333%; }
.elementor-select-preset-list .elementor-preset:hover path {
fill: #6d7882; }
.elementor-select-preset-list .elementor-preset:not(:hover) path {
fill: #d5dadf; }
.elementor-select-preset-list .elementor-preset svg {
height: 50px;
+ width: 100%;
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg); }
.elementor-editor-preview .elementor-element-empty,
.elementor-editor-preview .elementor-widget-empty {
display: none; }
+
+.elementor.elementor-edit-area-active .elementor-hidden-desktop,
+.elementor.elementor-edit-area-active .elementor-hidden-tablet,
+.elementor.elementor-edit-area-active .elementor-hidden-phone {
+ display: block; }
/*# sourceMappingURL=editor-preview-rtl.css.map */
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-@charset "UTF-8";.elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel-box-content{padding:20px 20px 10px}.elementor-control-title{font-size:12px}.elementor-button{display:inline-block}.elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:right}.elementor-panel-alert a{color:inherit}.elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-control-field-description,.elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-panel-nerd-box{padding:30px 20px;text-align:center}.elementor-panel-nerd-box .elementor-panel-nerd-box-icon{font-size:52px;color:#a4afb7}.elementor-panel-nerd-box .elementor-panel-nerd-box-title{margin-top:20px;font-size:16px;font-weight:700}.elementor-panel-nerd-box .elementor-panel-nerd-box-message{margin-top:20px;line-height:1.4;font-size:11px}.elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link{background-color:#fcb92c;color:#fff;padding:7px 25px;margin-top:20px;-webkit-box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link:hover{background-color:#fdca5e}.elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:1;background-color:#fff}.elementor-controls-popover:before{content:"";position:absolute;top:-16px;left:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-controls-popover div.elementor-control:before{content:none}#elementor-panel-get-pro-elements .elementor-panel-nerd-box-message{text-transform:uppercase}.select2-container{width:100%!important}#elementor-controls .pojo-widget-button-collapse{display:none}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control.elementor-control-type-divider{padding:0;margin-bottom:-1px;z-index:1;background-color:transparent}.elementor-control.elementor-control-type-divider hr{border-bottom-width:0;border-top-width:1px;border-color:#e6e9ec;border-style:solid}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick{border-top-width:3px}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default{margin-right:20px;margin-left:20px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider):before{content:"";height:1px;display:block;margin-bottom:15px;background-color:#e6e9ec}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:3px;width:100%;top:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:3px;width:100%;bottom:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control .select2-container{width:100%!important;outline:none}.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.elementor-control .select2-container.select2-container--focus .select2-selection--multiple,.elementor-control .select2-container.select2-container--focus .select2-selection--single,.elementor-control .select2-container.select2-container--open .select2-selection--multiple,.elementor-control .select2-container.select2-container--open .select2-selection--single{border-color:#a4afb7}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-selection{outline:none}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading.elementor-open .elementor-panel-heading-toggle .fa:before{content:"\f0d7"}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:45%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;cursor:pointer}.elementor-slider{display:inline-block;margin-top:10px;height:4px;background-color:#a4afb7;-webkit-border-radius:5px;border-radius:5px;position:relative;width:67%}.elementor-slider .ui-slider-handle{height:16px;width:16px;background-color:#fff;display:inline-block;top:50%;-webkit-transform:translateY(-50%) translateX(-8px);-ms-transform:translateY(-50%) translateX(-8px);transform:translateY(-50%) translateX(-8px);position:absolute;-webkit-box-shadow:1px 1px 6px rgba(0,0,0,.3);box-shadow:1px 1px 6px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%;cursor:pointer}.elementor-slider-input{width:33%;float:left}.elementor-slider-input input{width:80%;float:left}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-start-end .eicon-h-align-left,.elementor-control-start-end .eicon-h-align-right{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;margin-right:5px;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.elementor-control-align .elementor-choices,.elementor-control-position .elementor-choices,.elementor-control-text_align .elementor-choices{direction:ltr}.elementor-control-type-media .elementor-control-media{padding:7px;border:1px solid;height:150px}.elementor-control-type-media .elementor-control-media:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-media:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-image-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .elementor-control-media>*{height:100%;cursor:pointer;position:relative}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-image-area:not(:hover) .elementor-control-media-delete{display:none}.elementor-control-type-media .elementor-control-media-image-area:hover .elementor-control-media-image{opacity:.5}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:none;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section){padding-top:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{margin-top:7px;height:auto;line-height:1;font-size:10px;padding:3px 7px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:right;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-left:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-left:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:"";position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1);box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:right}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:right;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:left;height:27px;width:65px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:30px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-left:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-right:1px solid #a4afb7;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding:0 10px 15px}.elementor-control-type-repeater .elementor-control:before,.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:right;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-left:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:left}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:.15s ease-out;-o-transition:.15s ease-out;transition:.15s ease-out;-webkit-transition-property:opacity,background;-o-transition-property:opacity,background;transition-property:opacity,background}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px hsla(0,0%,100%,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-hidden{display:none!important}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:ltr}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-left:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-button .elementor-control-input-wrapper{text-align:left}.elementor-control-type-button .elementor-button{width:auto;height:26px}.wp-picker-container.wp-picker-active{position:absolute;z-index:4;top:0;left:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:-webkit-calc(100% - 2px * 2);width:calc(100% - 2px * 2);height:-webkit-calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container:not(.wp-picker-active){float:left}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}.wp-picker-container.wp-picker-active{-webkit-transform:translateY(6px);-ms-transform:translateY(6px);transform:translateY(6px)}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:100px;max-width:136px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}.pen{position:relative;outline:none}.pen:not([data-elementor-inline-editing-toolbar=advanced]){white-space:pre-wrap}.pen-menu{-webkit-box-shadow:1px 2px 3px -2px #222;box-shadow:1px 2px 3px -2px #222;background-color:#6d7882;position:fixed;-webkit-border-radius:3px;border-radius:3px;z-index:3}.pen-menu:after{top:100%;content:"";position:absolute;border:6px solid transparent;border-top-color:#6d7882;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.pen-menu-below:after{top:0;-webkit-transform:translateX(-50%) translateY(-100%) rotate(180deg);-ms-transform:translateX(-50%) translateY(-100%) rotate(180deg);transform:translateX(-50%) translateY(-100%) rotate(180deg)}.pen-icon{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:35px;padding:0 10px;font-size:21px;color:#d5dadf;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pen-icon:hover{background:#556068}.pen-icon:first-of-type{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.pen-icon:last-of-type{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.pen-icon[data-action=closeGroup],.pen-icon[data-group]{display:none}.pen-icon[data-action=close]:before{content:"";position:absolute;left:0;height:60%;width:1px;background-color:#556068}.pen-icon.active{background-color:#556068;-webkit-box-shadow:inset 2px 2px 4px #556068;box-shadow:inset 2px 2px 4px #556068}.pen-group-icon:after{font-family:FontAwesome;font-size:12px;content:"\f0d7";padding-left:4px;color:#71d7f7}.pen-input-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.pen-input-wrapper .pen-url-input{font-size:12px;line-height:1.5;padding:0;padding-right:10px;width:250px}.pen-input-wrapper .pen-url-input,.pen-input-wrapper .pen-url-input:focus{background-color:transparent;border:none;outline:none;-webkit-box-shadow:none;box-shadow:none;color:#fff}.pen-input-wrapper .pen-url-input::-webkit-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::-moz-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input:-ms-input-placeholder,.pen-input-wrapper .pen-url-input::-ms-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::placeholder{color:#d5dadf}.pen-input-label{margin:0}.pen-placeholder:before{content:attr(data-pen-placeholder);position:absolute;font-weight:400;color:#757575;opacity:.6}.pen-external-url-checkbox{display:none}.pen-external-url-checkbox:checked+i{color:#fff}.elementor-inline-editing i:not([class]){font-style:italic}.elementor-inline-editing b{font-weight:700}.elementor-inline-editing u{text-decoration:underline}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-left:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3)}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;right:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-right:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline .elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}@-webkit-keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@-webkit-keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@-webkit-keyframes section-outline{0%{opacity:0}to{opacity:1}}@keyframes section-outline{0%{opacity:0}to{opacity:1}}body.elementor-editor-active .elementor.elementor-edit-mode .article,body.elementor-editor-active .elementor.elementor-edit-mode.layout-section .entry-content{overflow:visible}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-overlay .elementor-editor-element-settings{clear:unset}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section{overflow:visible}#elementor .animated{-webkit-animation-fill-mode:none!important;animation-fill-mode:none!important}#elementor ul.elementor-editor-element-settings{word-break:normal;padding:0}#elementor .gallery{opacity:1}html.elementor-html{margin-top:0!important}#elementor{position:relative}.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner{margin-top:25px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-empty .elementor-sortable-placeholder{display:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-empty-view{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1}.elementor-editor-active .elementor.elementor-edit-mode .elementor-first-add{text-align:center;border:1px dashed #d5dadf;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-editor-active .elementor.elementor-edit-mode .elementor-first-add .elementor-icon{font-size:19px;color:#a4afb7;cursor:pointer}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element>.elementor-element-overlay{position:absolute;top:0;left:0;letter-spacing:0;z-index:3;pointer-events:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget-empty{background-color:rgba(213,218,223,.8)}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget-empty .elementor-widget-empty-icon{color:#c2cbd2;font-size:22px;display:block;text-align:center;padding:10px 0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element:not(:hover):not(.elementor-element-editable)>.elementor-element-overlay .elementor-editor-element-settings{display:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side=bottom]+.elementor-element:before,.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side=bottom]:last-child:after,.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side=top]:before{content:"";background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:placeholder-widget .5s;animation:placeholder-widget .5s;display:block}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section>.elementor-element-overlay{right:0;bottom:0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section>.elementor-element-overlay:after{position:absolute;left:2px;right:2px;top:2px;bottom:2px;outline:2px solid #71d7f7;-webkit-animation:section-outline .75s;animation:section-outline .75s}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-active .elementor.elementor-edit-mode .elementor-section:hover>.elementor-element-overlay:after{content:""}.elementor-editor-active .elementor.elementor-edit-mode .elementor-top-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner-section:first-child{margin-top:15px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings{position:absolute;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:26px;list-style:none;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:normal;line-height:1;z-index:1;pointer-events:all}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-trigger.elementor-active~.elementor-editor-element-setting{margin-right:0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-trigger:not(.elementor-active)~.elementor-editor-element-setting{width:0;font-size:0;padding:0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-remove:hover .fa{color:red}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-setting{cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:0;margin:0;font-size:11px;color:#fff;width:25px;-webkit-transition:margin .3s,width .3s,font .3s;-o-transition:margin .3s,width .3s,font .3s;transition:margin .3s,width .3s,font .3s;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings{top:1px;right:50%;background-image:-webkit-gradient(linear,left top,left bottom,from(#41c9f4),to(#71d7f7));background-image:-webkit-linear-gradient(top,#41c9f4,#71d7f7);background-image:-o-linear-gradient(top,#41c9f4,#71d7f7);background-image:linear-gradient(180deg,#41c9f4,#71d7f7);-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;-webkit-transform:translateX(50%) translateY(-100%);-ms-transform:translateX(50%) translateY(-100%);transform:translateX(50%) translateY(-100%)}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:hover{background-color:#10bcf2}@media (min-width:1025px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:first-child{padding-right:1px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:first-child:not(.elementor-active),.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:last-child{padding-left:1px}}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings{top:-1px;right:-1px;-webkit-border-radius:0 3px 0 0;border-radius:0 3px 0 0;background-image:-webkit-gradient(linear,left top,left bottom,from(#6d7882),to(#556068));background-image:-webkit-linear-gradient(top,#6d7882,#556068);background-image:-o-linear-gradient(top,#6d7882,#556068);background-image:linear-gradient(180deg,#6d7882,#556068)}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:hover{background-color:#495157}@media (min-width:1025px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:first-child{padding-right:1px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:first-child:not(.elementor-active),.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:last-child{padding-left:1px}}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings{z-index:2;top:-1px;left:-1px;background-image:-webkit-gradient(linear,left bottom,left top,from(#41c9f4),to(#71d7f7));background-image:-webkit-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:-o-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:linear-gradient(0deg,#41c9f4,#71d7f7);-webkit-border-radius:0 0 3px 0;border-radius:0 0 3px 0;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:hover{background-color:#10bcf2}@media (min-width:1025px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:first-child{padding-left:1px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:first-child:not(.elementor-active),.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:last-child{padding-right:1px}}@media (min-width:1025px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-trigger{cursor:move}}@media (max-width:1024px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-setting:not(.elementor-editor-element-trigger){display:none}}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-editor-column-settings .elementor-editor-element-add,.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-editor-column-settings .elementor-editor-element-duplicate,.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-sortable-placeholder.elementor-column{display:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-row.elementor-draggable-over{border:1px solid red}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.elementor-element-overlay{right:0;bottom:0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.elementor-element-overlay:after{position:absolute;left:0;right:0;top:0;bottom:0;outline:1px dashed #6d7882}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-element-editable>.elementor-element-overlay,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:hover>.elementor-element-overlay{border:1px solid #fff}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:hover>.elementor-element-overlay:after{content:""}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-dragging-on-child>.elementor-element-overlay{border:1px solid #71d7f7}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-dragging-on-child>.elementor-element-overlay:after{display:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.ui-resizable-e,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.ui-resizable-w{cursor:col-resize;width:7px;position:absolute;left:-5px;top:0;height:100%}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:last-of-type>.ui-resizable-e,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:last-of-type>.ui-resizable-w{display:none!important}@media (max-width:1024px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.ui-resizable-e,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.ui-resizable-w{display:none!important}}.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{min-height:30px}@media (min-width:768px){.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{margin:10px}}.elementor-editor-active .elementor-column{min-width:25px}.elementor-editor-active .elementor-widget.elementor-loading{opacity:.3}.elementor-editor-active .elementor-widget:not(.elementor-loading):not(.elementor-widget-menu-anchor){-webkit-transition:all .1s;-o-transition:all .1s;transition:all .1s}.elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover,.elementor-editor-active .elementor-widget.elementor-element-editable{outline:1px solid #71d7f7}.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings,.elementor-editor-active .handle{display:none}.elementor-editor-active .elementor-sortable-helper{position:absolute;-webkit-border-radius:3px;border-radius:3px;background-color:#fff;text-align:center;color:#556068;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2);cursor:move}.elementor-editor-active .elementor-sortable-helper .icon{font-size:28px;padding-top:15px;line-height:1}.elementor-editor-active .elementor-sortable-helper .elementor-element-title-wrapper{display:table;width:100%}.elementor-editor-active .elementor-sortable-helper .title{font-size:11px;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-style:normal;display:table-cell;vertical-align:middle;height:40px}.elementor-editor-active .elementor-inline-editing{min-height:15px}.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column:hover>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column>.elementor-element-overlay,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-first-add,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section:hover>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section>.elementor-element-overlay,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section>.elementor-element-overlay:after{display:none}@media (min-width:1025px){.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-editor-element-trigger{cursor:pointer}}.elementor-sortable-placeholder:not(.elementor-column-placeholder){background-color:#71d7f7;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-duration:.5s;animation-duration:.5s;opacity:.9}.elementor-section-placeholder{height:40px;-webkit-animation-name:placeholder-section;animation-name:placeholder-section}.elementor-column-placeholder{position:relative}.elementor-column-placeholder:after,.elementor-column-placeholder:before{content:"";position:absolute;top:10px;bottom:10px;right:10px;left:10px}.elementor-column-placeholder:before{border:1px solid #6d7882}.elementor-column-placeholder:after{border:1px dashed #fff}.elementor-widget-placeholder{height:10px;-webkit-animation-name:placeholder-widget;animation-name:placeholder-widget}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add:after,.elementor-first-add.elementor-html5dnd-current-element:after{content:"";background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:placeholder-widget .5s;animation:placeholder-widget .5s;width:100%}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add .elementor-icon,.elementor-draggable-over[data-dragged-element=section][data-dragged-is-inner=true] .elementor-inner-column .elementor-sortable-placeholder,.elementor-first-add.elementor-html5dnd-current-element .elementor-icon{display:none}.elementor-add-section{background-color:hsla(0,0%,100%,.5);max-width:1140px;position:relative}.elementor-add-section:not(.elementor-dragging-on-child){border:2px dashed #d5dadf}.elementor-add-section.elementor-dragging-on-child{border:3px dashed #71d7f7}.elementor-add-section[data-view=choose-action] .elementor-select-preset,.elementor-add-section[data-view=select-preset] .elementor-add-new-section{display:none}@media (max-width:479px){.elementor-add-section{display:none}}.elementor-add-section-inner{text-align:center;margin-top:10px;padding:40px 0}.elementor-add-new-section{display:inline-block}.elementor-add-new-section .elementor-button{color:#fff;background-image:none;font-size:13px;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-style:normal;text-transform:uppercase;line-height:1;height:40px;min-width:170px;padding:0 20px;border:none;-webkit-border-radius:3px;border-radius:3px;cursor:pointer}.elementor-add-new-section .elementor-button:hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-add-new-section .elementor-button:active{-webkit-box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1);box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1)}.elementor-add-new-section .elementor-add-section-button{background-color:#b7084e}.elementor-add-new-section .elementor-add-template-button{background-color:#6d7882;margin-right:25px}.elementor-add-section-drag-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:italic;line-height:1;color:#556068;margin-top:15px}.elementor-add-section-close{position:absolute;right:20px;top:20px;font-size:20px;cursor:pointer;line-height:1;color:#d5dadf}.elementor-add-section-close:hover{color:#6d7882}.elementor-select-preset-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:500;font-style:normal;text-transform:uppercase;color:#556068}.elementor-select-preset-list{list-style:none;padding:0 25px;margin:20px auto 0;overflow:hidden;max-width:700px}.elementor-select-preset-list .elementor-preset{cursor:pointer;margin:0;padding:10px;float:right}.elementor-select-preset-list .elementor-preset:hover path{fill:#6d7882}.elementor-select-preset-list .elementor-preset:not(:hover) path{fill:#d5dadf}.elementor-select-preset-list .elementor-preset svg{height:50px;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}#elementor-add-new-section{margin:60px auto}#elementor-add-new-section[data-view=choose-action] .elementor-add-section-close{display:none}.elementor-add-section-inline{margin:10px auto}.elementor-column-percents-tooltip{position:absolute;display:none;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);color:#fff;font-size:10px;background-color:#556068;width:40px;padding:3.5px 0;text-align:center;z-index:1;line-height:1}.elementor-column-percents-tooltip:after{content:"";position:absolute;width:0;height:0;border:8.5px solid transparent;top:0}.elementor-column-percents-tooltip[data-side=left]{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;right:15px}.elementor-column-percents-tooltip[data-side=left]:after{left:100%;border-left-color:#556068;border-right-width:0}.elementor-column-percents-tooltip[data-side=right]{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;left:15px}.elementor-column-percents-tooltip[data-side=right]:after{right:100%;border-right-color:#556068;border-left-width:0}.elementor-editor-preview .elementor-add-section,.elementor-editor-preview .elementor-element-empty,.elementor-editor-preview .elementor-element-overlay,.elementor-editor-preview .elementor-empty,.elementor-editor-preview .elementor-widget-empty{display:none}
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+@charset "UTF-8";.elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel-box-content{padding:20px 20px 10px}.elementor-control-title{font-size:12px}.elementor-button{display:inline-block}.elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:right}.elementor-panel-alert a{color:inherit}.elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-control-field-description,.elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:4;background-color:#fff}.elementor-controls-popover:before{content:"";position:absolute;top:-16px;left:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-controls-popover div.elementor-control:before{content:none}#elementor-panel-get-pro-elements .elementor-nerd-box-message{text-transform:uppercase}.select2-container{width:100%!important}#elementor-controls .pojo-widget-button-collapse{display:none}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control .elementor-control-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.elementor-control.elementor-control-type-divider{padding:0;margin-bottom:-1px;z-index:1;background-color:transparent}.elementor-control.elementor-control-type-divider hr{border-bottom-width:0;border-top-width:1px;border-color:#e6e9ec;border-style:solid}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick{border-top-width:1px}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default{margin-right:20px;margin-left:20px}.elementor-control.elementor-control-type-divider+.elementor-control:not(.elementor-control-type-section){padding-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{content:"";height:1px;display:block;margin-bottom:15px;background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:1px;width:100%;top:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:1px;width:100%;bottom:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:#495157;font-size:12px;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-right:5px;padding-left:20px;cursor:pointer}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:"\e955";font-size:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:5px;pointer-events:none}.elementor-control .select2-container{width:100%!important;outline:none}.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.elementor-control .select2-container.select2-container--focus .select2-selection--multiple,.elementor-control .select2-container.select2-container--focus .select2-selection--single,.elementor-control .select2-container.select2-container--open .select2-selection--multiple,.elementor-control .select2-container.select2-container--open .select2-selection--single{border-color:#a4afb7}.elementor-control .select2-container.select2-container--default .select2-selection{-webkit-border-radius:3px;border-radius:3px}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-container.select2-container--default .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection{outline:none}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before{content:"\f0d7"}.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:45%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;cursor:pointer}.elementor-slider{display:inline-block;margin-top:10px;height:4px;background-color:#a4afb7;-webkit-border-radius:5px;border-radius:5px;position:relative;width:70%}.elementor-slider .ui-slider-handle{height:16px;width:16px;background-color:#fff;display:inline-block;top:50%;-webkit-transform:translateY(-50%) translateX(-8px);-ms-transform:translateY(-50%) translateX(-8px);transform:translateY(-50%) translateX(-8px);position:absolute;-webkit-box-shadow:1px 1px 6px rgba(0,0,0,.3);box-shadow:1px 1px 6px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%;cursor:pointer}.elementor-slider-input{width:30%;float:left}.elementor-slider-input input{max-width:80%;float:left;padding:5px}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-start-end .eicon-h-align-left,.elementor-control-start-end .eicon-h-align-right{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;margin-right:5px;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.elementor-control-align .elementor-choices,.elementor-control-direction-ltr,.elementor-control-position .elementor-choices,.elementor-control-text_align .elementor-choices{direction:ltr}.elementor-control-direction-rtl{direction:rtl}.elementor-control-type-media .elementor-control-media{padding:7px;border:1px solid;height:150px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.elementor-control-type-media .elementor-control-media:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-media:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .elementor-control-media>*{height:100%;cursor:pointer;position:relative}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-area{background-image:-webkit-linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd),-webkit-linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd);background-image:-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd),linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd);-webkit-background-size:16px 16px;background-size:16px 16px;background-position:0 0,8px 8px;background-color:#f6f6f6;overflow:hidden}.elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete{-webkit-box-shadow:none;box-shadow:none;bottom:-30px}.elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image{opacity:.9}.elementor-control-type-media .elementor-control-media-area i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:hsla(0,0%,100%,.7);font-size:21px}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-box-shadow:0 0 3px 3px rgba(0,0,0,.1);box-shadow:0 0 3px 3px rgba(0,0,0,.1)}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:none;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;width:12px;height:12px;top:7px;right:44px}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-autocomplete-menu{position:absolute;background:#fff;color:#495157;border:1px solid #a4afb7;margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out;cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline;padding:5px 8px;font-size:12px;width:100%;line-height:1.2;cursor:pointer}.elementor-autocomplete-menu .ui-menu-item.ui-state-active,.elementor-autocomplete-menu .ui-menu-item.ui-state-focus,.elementor-autocomplete-menu .ui-menu-item.ui-state-hover{background:#e6e9ec}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-top:2px}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section.elementor-open{padding-bottom:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{height:auto;line-height:24px;font-size:10px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:right;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-left:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-left:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:"";position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1);box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:right}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:right;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:left;height:27px;width:65px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:27px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-left:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-right:1px solid #a4afb7;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding:0 10px 15px}.elementor-control-type-repeater .elementor-control:before,.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:right;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-left:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:left}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:.15s ease-out;-o-transition:.15s ease-out;transition:.15s ease-out;-webkit-transition-property:opacity,background;-o-transition-property:opacity,background;transition-property:opacity,background}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px hsla(0,0%,100%,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-hidden{display:none!important}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:ltr}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-left:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-button .elementor-control-input-wrapper{text-align:left}.elementor-control-type-button .elementor-button{width:auto;height:26px}.elementor-group-control-css-filter .elementor-slider{height:6px;-webkit-box-shadow:0 0 1px 1px inset rgba(0,0,0,.2);box-shadow:inset 0 0 1px 1px rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-slider .ui-slider-handle{-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.3),0 0 0 1px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.3),0 0 0 1px rgba(0,0,0,.1)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0;margin-bottom:5px}.elementor-group-control-blur .elementor-slider{background:url(../images/blur.png);-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-group-control-contrast .elementor-slider{background:url(../images/contrast.png);-webkit-background-size:100% 100%;background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(red),color-stop(orange),color-stop(#ff0),color-stop(#adff2f),color-stop(#32cd32),color-stop(#00bfff),color-stop(blue),color-stop(95%,#9400d3));background-image:-webkit-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%);background-image:-o-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%);background-image:linear-gradient(90deg,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(gray),to(red));background-image:-webkit-linear-gradient(left,gray,red);background-image:-o-linear-gradient(left,gray,red);background-image:linear-gradient(90deg,gray,red)}.elementor-group-control-brightness .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(#000),to(#fff));background-image:-webkit-linear-gradient(left,#000,#fff);background-image:-o-linear-gradient(left,#000,#fff);background-image:linear-gradient(90deg,#000,#fff)}.wp-picker-container.wp-picker-active{position:absolute;z-index:4;top:-9px;left:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:-webkit-calc(100% - 2px * 2);width:calc(100% - 2px * 2);height:-webkit-calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container:not(.wp-picker-active){float:left}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:100px;max-width:136px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}.pen{position:relative;outline:none}.pen:not([data-elementor-inline-editing-toolbar=advanced]){white-space:pre-wrap}.pen-menu{-webkit-box-shadow:1px 2px 3px -2px #222;box-shadow:1px 2px 3px -2px #222;background-color:#6d7882;position:fixed;overflow:hidden;-webkit-border-radius:3px;border-radius:3px;z-index:3}.pen-menu:after{top:100%;content:"";position:absolute;border:6px solid transparent;border-top-color:#6d7882;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.pen-menu-below:after{top:0;-webkit-transform:translateX(-50%) translateY(-100%) rotate(180deg);-ms-transform:translateX(-50%) translateY(-100%) rotate(180deg);transform:translateX(-50%) translateY(-100%) rotate(180deg)}.pen-icon{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:35px;padding:0 10px;font-size:21px;color:#d5dadf;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pen-icon:hover{background:#556068}.pen-icon[data-action=closeGroup],.pen-icon[data-group]{display:none}.pen-icon[data-action=close]:before{content:"";position:absolute;right:0;height:60%;width:1px;background-color:#556068}.pen-icon.active{background-color:#556068;-webkit-box-shadow:inset 2px 2px 4px #556068;box-shadow:inset 2px 2px 4px #556068}.pen-group-icon:after{font-family:FontAwesome;font-size:12px;content:"\f0d7";padding-left:4px;color:#71d7f7}.pen-input-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.pen-input-wrapper .pen-url-input{font-size:12px;line-height:1.5;padding:0;padding-right:10px;padding-left:10px;width:250px;direction:ltr}.pen-input-wrapper .pen-url-input,.pen-input-wrapper .pen-url-input:focus{background-color:transparent;border:none;outline:none;-webkit-box-shadow:none;box-shadow:none;color:#fff}.pen-input-wrapper .pen-url-input::-webkit-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input:-ms-input-placeholder,.pen-input-wrapper .pen-url-input::-ms-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::placeholder{color:#d5dadf}.pen-input-label{margin:0;margin-left:-1px}.pen-placeholder:before{content:attr(data-pen-placeholder);position:absolute;font-weight:400;color:#757575;opacity:.6}.pen-external-url-checkbox{display:none}.pen-external-url-checkbox:checked+i{color:#fff}.elementor-inline-editing i:not([class]){font-style:italic}.elementor-inline-editing b{font-weight:700}.elementor-inline-editing u{text-decoration:underline}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px;z-index:1}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-left:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3);z-index:1}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;right:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-right:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}@-webkit-keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@-webkit-keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@-webkit-keyframes section-outline{0%{opacity:0}to{opacity:1}}@keyframes section-outline{0%{opacity:0}to{opacity:1}}body.elementor-editor-active .elementor.elementor-edit-mode .article,body.elementor-editor-active .elementor.elementor-edit-mode.layout-section .entry-content{overflow:visible}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-overlay .elementor-editor-element-settings{clear:unset}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section{overflow:visible}#elementor .animated{-webkit-animation-fill-mode:none!important;animation-fill-mode:none!important}#elementor ul.elementor-editor-element-settings{word-break:normal;padding:0}#elementor .gallery{opacity:1}html.elementor-html{margin-top:0!important}#elementor{position:relative}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-top-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section:first-child{margin-top:15px}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{min-height:30px}@media (min-width:768px){.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{margin:10px}}.elementor-editor-active .elementor-column{min-width:25px}.elementor-editor-active .elementor-widget.elementor-loading{opacity:.3}.elementor-editor-active .elementor-widget:not(.elementor-loading):not(.elementor-widget-menu-anchor){-webkit-transition:all .1s;-o-transition:all .1s;transition:all .1s}.elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover,.elementor-editor-active .elementor-widget.elementor-element-editable{outline:1px solid #71d7f7}.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings{display:none}.elementor-editor-active .elementor-editor-element-setting{cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:0;margin:0;font-size:11px;color:#fff;width:25px;-webkit-transition:margin .3s,width .3s,font .3s;-o-transition:margin .3s,width .3s,font .3s;transition:margin .3s,width .3s,font .3s}.elementor-editor-active .handle{display:none}.elementor-editor-active .elementor-inline-editing{min-height:15px}.elementor-editor-active .elementor-edit-hidden{display:none}.elementor-element>.elementor-element-overlay{position:absolute;top:0;left:0;letter-spacing:0;z-index:3;pointer-events:none}.elementor-element-empty .elementor-sortable-placeholder{display:none}.elementor-element.elementor-widget-empty{background-color:rgba(213,218,223,.8)}.elementor-element.elementor-widget-empty .elementor-widget-empty-icon{color:#c2cbd2;font-size:22px;display:block;text-align:center;padding:10px 0}.elementor-element:not(:hover):not(.elementor-element-editable)>.elementor-element-overlay .elementor-editor-element-settings{display:none}.elementor-element--toggle-edit-tools>.elementor-element-overlay .elementor-editor-element-edit:not(.elementor-active)~*{width:0;font-size:0}.elementor-element[data-side=bottom]+.elementor-element:before,.elementor-element[data-side=bottom]:last-child:after,.elementor-element[data-side=top]:before{content:"";background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:placeholder-widget .5s;animation:placeholder-widget .5s;display:block}.elementor-section>.elementor-element-overlay{right:0;bottom:0}.elementor-section>.elementor-element-overlay:after{position:absolute;left:2px;right:2px;top:2px;bottom:2px;outline:2px solid #71d7f7;-webkit-animation:section-outline .75s;animation:section-outline .75s}.elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-section:hover>.elementor-element-overlay:after{content:""}.elementor-section-filled .elementor-sortable-placeholder.elementor-column{display:none}.elementor-section-filled .elementor-row.elementor-draggable-over{border:1px solid red}.elementor-column>.elementor-element-overlay{right:0;bottom:0}.elementor-column>.elementor-element-overlay:after{position:absolute;left:0;right:0;top:0;bottom:0;outline:1px dashed #6d7882}.elementor-column.elementor-element-editable>.elementor-element-overlay,.elementor-column:hover>.elementor-element-overlay{border:1px solid #fff}.elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-column:hover>.elementor-element-overlay:after{content:""}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay{border:1px solid #71d7f7}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay:after{display:none}.elementor-column>.ui-resizable-e,.elementor-column>.ui-resizable-w{cursor:col-resize;width:7px;position:absolute;left:-5px;top:0;height:100%}.elementor-column:last-of-type>.ui-resizable-e,.elementor-column:last-of-type>.ui-resizable-w{display:none!important}@media (max-width:1024px){.elementor-column>.ui-resizable-e,.elementor-column>.ui-resizable-w{display:none!important}}.elementor-editor-element-settings{position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:26px;list-style:none;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:normal;line-height:1;z-index:1;pointer-events:all}.elementor-editor-element-setting.elementor-editor-element-save{display:none}@media (min-width:1025px){.elementor-editor-element-edit{cursor:move}}.elementor-editor-section-settings{height:24px;top:1px;right:50%;-webkit-transform:translateX(50%) translateY(-100%);-ms-transform:translateX(50%) translateY(-100%);transform:translateX(50%) translateY(-100%);background-color:#71d7f7;-webkit-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;-webkit-box-shadow:0 -2px 8px rgba(0,0,0,.05);box-shadow:0 -2px 8px rgba(0,0,0,.05)}.elementor-editor-section-settings i.eicon-handle{font-size:16px}.elementor-editor-section-settings .elementor-editor-element-setting:hover{background-color:#10bcf2}.elementor-editor-section-settings .elementor-editor-element-setting:first-child{-webkit-border-radius:0 5px 0 0;border-radius:0 5px 0 0}.elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{content:"";position:absolute;border:solid transparent;top:2px;border-left-color:#71d7f7;border-width:22px 0 0 12px;left:-webkit-calc(100% - 1px);left:calc(100% - 1px)}.elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before{border-left-color:#10bcf2}.elementor-editor-section-settings .elementor-editor-element-setting:last-child{-webkit-border-radius:5px 0 0 0;border-radius:5px 0 0 0}.elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{content:"";position:absolute;border:solid transparent;top:2px;border-right-color:#71d7f7;border-width:22px 12px 0 0;right:-webkit-calc(100% - 1px);right:calc(100% - 1px)}.elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after{border-right-color:#10bcf2}.elementor-section--handles-inside .elementor-editor-section-settings{-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);-webkit-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child{-webkit-border-radius:0 0 5px 0;border-radius:0 0 5px 0}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{top:0;border-width:0 0 22px 12px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child{-webkit-border-radius:0 0 0 5px;border-radius:0 0 0 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{top:0;border-width:0 12px 22px 0}.elementor-editor-column-settings{top:-1px;right:-1px;-webkit-border-radius:0 0 0 3px;border-radius:0 0 0 3px;overflow:hidden}.elementor-editor-column-settings .elementor-editor-element-setting{background-color:#495157}.elementor-editor-column-settings .elementor-editor-element-setting:not(:hover){background-image:-webkit-gradient(linear,left top,left bottom,from(#6d7882),to(#556068));background-image:-webkit-linear-gradient(top,#6d7882,#556068);background-image:-o-linear-gradient(top,#6d7882,#556068);background-image:linear-gradient(180deg,#6d7882,#556068)}.elementor-editor-widget-settings{z-index:2;top:-1px;left:-1px;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-border-radius:0 0 3px 0;border-radius:0 0 3px 0;overflow:hidden}.elementor-editor-widget-settings .elementor-editor-element-setting{background-color:#10bcf2}.elementor-editor-widget-settings .elementor-editor-element-setting:not(:hover){background-image:-webkit-gradient(linear,left bottom,left top,from(#41c9f4),to(#71d7f7));background-image:-webkit-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:-o-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:linear-gradient(0deg,#41c9f4,#71d7f7)}.elementor-empty-view{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1}.elementor-first-add{text-align:center;border:1px dashed #d5dadf;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-first-add .elementor-icon{font-size:19px;color:#a4afb7;cursor:pointer}.elementor-sortable-helper{position:absolute;-webkit-border-radius:3px;border-radius:3px;background-color:#fff;text-align:center;color:#556068;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2);cursor:move}.elementor-sortable-helper .icon{font-size:28px;padding-top:15px;line-height:1}.elementor-sortable-helper .elementor-element-title-wrapper{display:table;width:100%}.elementor-sortable-helper .title{font-size:11px;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-style:normal;display:table-cell;vertical-align:middle;height:40px}.elementor-editor-content-only .elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-column:hover>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-column>.elementor-element-overlay,.elementor-editor-content-only .elementor-column>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-first-add,.elementor-editor-content-only .elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-section:hover>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-section>.elementor-element-overlay,.elementor-editor-content-only .elementor-section>.elementor-element-overlay:after{display:none}@media (min-width:1025px){.elementor-editor-content-only .elementor-editor-element-edit{cursor:pointer}}.elementor-sortable-placeholder:not(.elementor-column-placeholder){background-color:#71d7f7;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-duration:.5s;animation-duration:.5s;opacity:.9}.elementor-section-placeholder{height:40px;-webkit-animation-name:placeholder-section;animation-name:placeholder-section}.elementor-column-placeholder{position:relative}.elementor-column-placeholder:after,.elementor-column-placeholder:before{content:"";position:absolute;top:10px;bottom:10px;right:10px;left:10px}.elementor-column-placeholder:before{border:1px solid #6d7882}.elementor-column-placeholder:after{border:1px dashed #fff}.elementor-widget-placeholder{height:10px;-webkit-animation-name:placeholder-widget;animation-name:placeholder-widget}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add:after,.elementor-first-add.elementor-html5dnd-current-element:after{content:"";background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:placeholder-widget .5s;animation:placeholder-widget .5s;width:100%}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add .elementor-icon,.elementor-draggable-over[data-dragged-element=section][data-dragged-is-inner=true] .elementor-inner-column .elementor-sortable-placeholder,.elementor-first-add.elementor-html5dnd-current-element .elementor-icon{display:none}.elementor-add-section{max-width:1160px;position:relative}.elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner{border:2px dashed #d5dadf;background-color:hsla(0,0%,100%,.5)}.elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner{border:3px dashed #71d7f7}.elementor-add-section[data-view=choose-action] .elementor-select-preset,.elementor-add-section[data-view=select-preset] .elementor-add-new-section{display:none}.elementor-add-section-inner{text-align:center;margin:20px;padding:40px 0}.elementor-add-new-section{display:inline-block}.elementor-add-new-section .elementor-add-section-area-button{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:40px;width:40px;color:#fff;font-size:16px;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:all .3s;-o-transition:all .3s;transition:all .3s;cursor:pointer}.elementor-add-new-section .elementor-add-section-area-button:hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-add-new-section .elementor-add-section-area-button:active{-webkit-box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1);box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1)}.elementor-add-new-section .elementor-add-section-button{background-color:#d30c5c}.elementor-add-new-section .elementor-add-template-button{background-color:#6d7882;margin-right:5px}.elementor-add-section-drag-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:italic;line-height:1;color:#556068;margin-top:15px}.elementor-add-section-close{position:absolute;right:40px;top:20px;font-size:20px;cursor:pointer;line-height:1;color:#d5dadf}.elementor-add-section-close:hover{color:#6d7882}.elementor-select-preset-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:500;font-style:normal;text-transform:uppercase;color:#556068}.elementor-select-preset-list{list-style:none;padding:0 25px;margin:20px auto 0;overflow:hidden;max-width:700px}.elementor-select-preset-list .elementor-preset{cursor:pointer;margin:0;padding:10px;float:right;max-width:33.333%}.elementor-select-preset-list .elementor-preset:hover path{fill:#6d7882}.elementor-select-preset-list .elementor-preset:not(:hover) path{fill:#d5dadf}.elementor-select-preset-list .elementor-preset svg{height:50px;width:100%;-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}#elementor-add-new-section{margin:60px auto}#elementor-add-new-section[data-view=choose-action] .elementor-add-section-close{display:none}.elementor-add-section-inline{margin:10px auto}.elementor-column-percents-tooltip{position:absolute;display:none;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);color:#fff;font-size:10px;background-color:#556068;width:40px;padding:3.5px 0;text-align:center;z-index:1;line-height:1}.elementor-column-percents-tooltip:after{content:"";position:absolute;width:0;height:0;border:8.5px solid transparent;top:0}.elementor-column-percents-tooltip[data-side=left]{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;right:15px}.elementor-column-percents-tooltip[data-side=left]:after{left:100%;border-left-color:#556068;border-right-width:0}.elementor-column-percents-tooltip[data-side=right]{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;left:15px}.elementor-column-percents-tooltip[data-side=right]:after{right:100%;border-right-color:#556068;border-left-width:0}.elementor-editor-preview .elementor-add-section,.elementor-editor-preview .elementor-element-empty,.elementor-editor-preview .elementor-element-overlay,.elementor-editor-preview .elementor-empty,.elementor-editor-preview .elementor-widget-empty{display:none}.elementor.elementor-edit-area-active .elementor-hidden-desktop,.elementor.elementor-edit-area-active .elementor-hidden-phone,.elementor.elementor-edit-area-active .elementor-hidden-tablet{display:block}
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
+/*! elementor - v2.2.1 - 03-09-2018 */
@charset "UTF-8";
.elementor-panel-box {
margin-top: 10px;
line-height: 1.4;
color: #a4afb7; }
-.elementor-panel-nerd-box {
- padding: 30px 20px;
- text-align: center; }
- .elementor-panel-nerd-box .elementor-panel-nerd-box-icon {
- font-size: 52px;
- color: #a4afb7; }
- .elementor-panel-nerd-box .elementor-panel-nerd-box-title {
- margin-top: 20px;
- font-size: 16px;
- font-weight: bold; }
- .elementor-panel-nerd-box .elementor-panel-nerd-box-message {
- margin-top: 20px;
- line-height: 1.4;
- font-size: 11px; }
- .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link {
- background-color: #fcb92c;
- color: #ffffff;
- padding: 7px 25px;
- margin-top: 20px;
- -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
- box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
- -webkit-transition: .5s;
- -o-transition: .5s;
- transition: .5s; }
- .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link:hover {
- background-color: #fdca5e; }
-
.elementor-controls-popover {
display: none;
position: absolute;
margin: -4px auto 5px;
padding-top: 15px;
width: 90%;
- z-index: 1;
+ z-index: 10000;
background-color: #fff; }
.elementor-controls-popover:before {
content: '';
.elementor-controls-popover div.elementor-control:before {
content: none; }
-#elementor-panel-get-pro-elements .elementor-panel-nerd-box-message {
+#elementor-panel-get-pro-elements .elementor-nerd-box-message {
text-transform: uppercase; }
.select2-container {
transition: all ease-in-out .3s; }
.elementor-control a:hover {
border-bottom-color: inherit; }
+ .elementor-control .elementor-control-content {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column; }
.elementor-control.elementor-control-type-divider {
padding: 0;
margin-bottom: -1px;
border-color: #e6e9ec;
border-style: solid; }
.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick {
- border-top-width: 3px; }
+ border-top-width: 1px; }
.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default {
margin-right: 20px;
margin-left: 20px; }
- .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider):before {
- content: '';
- height: 1px;
- display: block;
- margin-bottom: 15px;
- background-color: #e6e9ec; }
+ .elementor-control.elementor-control-type-divider + .elementor-control:not(.elementor-control-type-section) {
+ padding-top: 15px; }
.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp {
margin-top: 15px; }
.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before {
+ content: '';
+ height: 1px;
+ display: block;
+ margin-bottom: 15px;
background-color: transparent; }
.elementor-control.elementor-control-separator-before {
padding-top: 15px; }
.elementor-control.elementor-control-separator-before:before {
content: '';
position: absolute;
- height: 3px;
+ height: 1px;
width: 100%;
top: 0;
left: 0;
.elementor-control.elementor-control-separator-after:after {
content: '';
position: absolute;
- height: 3px;
+ height: 1px;
width: 100%;
bottom: 0;
left: 0;
background-color: #d5dadf; }
- .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs {
+ .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs,
+ .elementor-control.elementor-control-separator-after + .elementor-control-separator-default {
padding-top: 15px; }
.elementor-control.elementor-control-deprecated {
color: #b01b1b; }
display: none; }
body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile {
display: none; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper {
+ position: relative; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper select {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ color: #495157;
+ font-size: 12px;
+ font-family: inherit;
+ font-weight: inherit;
+ font-style: inherit;
+ text-transform: inherit;
+ letter-spacing: inherit;
+ line-height: inherit;
+ -webkit-flex-basis: 100%;
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ padding-left: 5px;
+ padding-right: 20px;
+ cursor: pointer; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after {
+ font-family: eicons;
+ content: '\e955';
+ font-size: 12px;
+ position: absolute;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
+ right: 5px;
+ pointer-events: none; }
.elementor-control .select2-container {
width: 100% !important;
outline: none; }
.elementor-control .select2-container.select2-container--open .select2-selection--multiple, .elementor-control .select2-container.select2-container--focus .select2-selection--single,
.elementor-control .select2-container.select2-container--focus .select2-selection--multiple {
border-color: #a4afb7; }
+ .elementor-control .select2-container.select2-container--default .select2-selection {
+ -webkit-border-radius: 3px;
+ border-radius: 3px; }
.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear {
display: none; }
.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice {
border: none;
-webkit-border-radius: 0;
border-radius: 0; }
+ .elementor-control .select2-container.select2-container--default .select2-selection__rendered {
+ line-height: 27px; }
.elementor-control .select2-selection {
outline: none; }
.elementor-control .select2-selection--single {
height: 27px;
top: 0; }
+.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,
+.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before {
+ content: '\f0d7'; }
+
+.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,
+.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before {
+ content: ""; }
+
.elementor-panel-heading {
display: table;
table-layout: fixed;
width: 100%;
border-bottom: 1px solid #e6e9ec;
cursor: pointer; }
- .elementor-panel-heading:not(.elementor-open) .elementor-panel-heading-toggle .fa:before {
- content: ""; }
- .elementor-panel-heading.elementor-open .elementor-panel-heading-toggle .fa:before {
- content: '\f0d7'; }
.elementor-panel-heading > * {
display: table-cell;
vertical-align: middle; }
.elementor-choices input:not(:checked) + .elementor-choices-label {
background-color: #fff;
color: #a4afb7; }
+ .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) {
+ -webkit-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px; }
+ .elementor-choices input:not(:checked) + .elementor-choices-label:last-child {
+ -webkit-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0; }
.elementor-choices .elementor-choices-label {
display: table-cell;
vertical-align: middle;
-webkit-border-radius: 5px;
border-radius: 5px;
position: relative;
- width: 67%; }
+ width: 70%; }
.elementor-slider .ui-slider-handle {
height: 16px;
width: 16px;
cursor: pointer; }
.elementor-slider-input {
- width: 33%;
+ width: 30%;
float: right; }
.elementor-slider-input input {
- width: 80%;
- float: right; }
+ max-width: 80%;
+ float: right;
+ padding: 5px 5px; }
.elementor-units-choices {
-webkit-box-flex: 1;
.elementor-control-position .elementor-choices {
direction: ltr; }
+.elementor-control-direction-ltr {
+ direction: ltr; }
+
+.elementor-control-direction-rtl {
+ direction: rtl; }
+
.elementor-control-type-media .elementor-control-media {
padding: 7px;
border: 1px solid;
- height: 150px; }
+ height: 150px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out; }
.elementor-control-type-media .elementor-control-media:not(:hover) {
border-color: #d5dadf; }
.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button {
border-color: #a4afb7; }
.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button {
background-color: #a4afb7; }
- .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-image-area {
+ .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area {
display: none; }
.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button {
display: none; }
color: #fff;
font-size: 20px; }
-.elementor-control-type-media .elementor-control-media-image-area:not(:hover) .elementor-control-media-delete {
- display: none; }
-
-.elementor-control-type-media .elementor-control-media-image-area:hover .elementor-control-media-image {
- opacity: .5; }
+.elementor-control-type-media .elementor-control-media-area {
+ background-image: -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ background-image: -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ background-image: linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ -webkit-background-size: 16px 16px;
+ background-size: 16px 16px;
+ background-position: 0 0, 8px 8px;
+ background-color: #f6f6f6;
+ overflow: hidden; }
+ .elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ bottom: -30px; }
+ .elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image {
+ opacity: .9; }
+ .elementor-control-type-media .elementor-control-media-area i {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ color: rgba(255, 255, 255, 0.7);
+ font-size: 21px; }
.elementor-control-type-media .elementor-control-media-delete {
position: absolute;
font-size: 11px;
color: #fff;
background-color: #a4afb7;
- text-transform: uppercase; }
+ text-transform: uppercase;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+ -webkit-box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); }
.elementor-control-type-media .elementor-control-media-image {
height: 100%;
padding: 5px;
font-size: 12px; }
+.elementor-control-type-url .elementor-control-url-autocomplete-spinner {
+ display: none;
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ top: 7px;
+ left: 44px; }
+
.elementor-control-type-url .elementor-input {
direction: ltr; }
.elementor-control-type-url .elementor-input:not(:focus) + .elementor-control-url-more {
.elementor-control-type-url .elementor-input:focus + .elementor-control-url-more {
border-color: #a4afb7; }
+.elementor-autocomplete-menu {
+ position: absolute;
+ background: #fff;
+ color: #495157;
+ border: 1px solid #a4afb7;
+ margin: 0;
+ list-style: none;
+ padding: 4px 0;
+ height: auto;
+ width: 100%;
+ min-width: 260px;
+ max-width: 300px;
+ max-height: 200px;
+ overflow-y: auto;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: all .3s ease-in-out;
+ -o-transition: all .3s ease-in-out;
+ transition: all .3s ease-in-out;
+ cursor: default;
+ z-index: 1; }
+ .elementor-autocomplete-menu .ui-menu-item {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-align-self: baseline;
+ -ms-flex-item-align: baseline;
+ align-self: baseline;
+ padding: 5px 8px;
+ font-size: 12px;
+ width: 100%;
+ line-height: 1.2;
+ cursor: pointer; }
+ .elementor-autocomplete-menu .ui-menu-item.ui-state-hover, .elementor-autocomplete-menu .ui-menu-item.ui-state-active, .elementor-autocomplete-menu .ui-menu-item.ui-state-focus {
+ background: #e6e9ec; }
+ .elementor-autocomplete-menu .elementor-autocomplete-item-info {
+ font-size: 10px;
+ padding-top: 2px; }
+
.elementor-control-type-section {
margin-top: 10px;
padding: 0; }
- .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section) {
- padding-top: 15px; }
- .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before {
- display: none; }
+ .elementor-control-type-section.elementor-open {
+ padding-bottom: 15px; }
+ .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before {
+ display: none; }
.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-title {
width: 70%; }
border-radius: 3px; }
.elementor-control-type-wysiwyg #insert-media-button {
- margin-top: 7px;
height: initial;
- line-height: 1;
+ line-height: 24px;
font-size: 10px;
- padding: 3px 7px;
background-color: #e6e9ec; }
.elementor-control-type-wysiwyg .ed_button {
text-align: center;
width: 100%;
padding: 0;
- line-height: 30px;
+ line-height: 27px;
border-top: 1px solid #a4afb7;
border-bottom: 1px solid #a4afb7;
border-right: 1px solid #a4afb7;
width: auto;
height: 26px; }
+.elementor-group-control-css-filter .elementor-slider {
+ height: 6px;
+ -webkit-box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); }
+
+.elementor-group-control-css-filter .elementor-slider .ui-slider-handle {
+ -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.1);
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.1); }
+
+.elementor-group-control-css-filter .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper {
+ margin-top: 0;
+ margin-bottom: 5px; }
+
+.elementor-group-control-blur .elementor-slider {
+ background: url("../images/blur.png");
+ -webkit-background-size: cover;
+ background-size: cover;
+ background-position: center; }
+
+.elementor-group-control-contrast .elementor-slider {
+ background: url("../images/contrast.png");
+ -webkit-background-size: 100% 100%;
+ background-size: 100% 100%; }
+
+.elementor-group-control-hue .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(red), color-stop(orange), color-stop(yellow), color-stop(greenyellow), color-stop(limegreen), color-stop(deepskyblue), color-stop(blue), color-stop(95%, darkviolet));
+ background-image: -webkit-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%);
+ background-image: -o-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%);
+ background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); }
+
+.elementor-group-control-saturate .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(gray), to(red));
+ background-image: -webkit-linear-gradient(left, gray, red);
+ background-image: -o-linear-gradient(left, gray, red);
+ background-image: linear-gradient(to right, gray, red); }
+
+.elementor-group-control-brightness .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(black), to(white));
+ background-image: -webkit-linear-gradient(left, black, white);
+ background-image: -o-linear-gradient(left, black, white);
+ background-image: linear-gradient(to right, black, white); }
+
.wp-picker-container.wp-picker-active {
position: absolute;
z-index: 10000;
- top: 0;
+ top: -9px;
right: 7px;
background-color: #fff;
border: solid #fff;
.wp-picker-container:not(.wp-picker-active) .wp-color-result {
margin: 0; }
-.wp-picker-container.wp-picker-active {
- -webkit-transform: translateY(6px);
- -ms-transform: translateY(6px);
- transform: translateY(6px); }
- [class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active,
- [class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active {
- padding-top: 9px; }
- .wp-picker-container.wp-picker-active .wp-color-result {
- margin-right: 3px; }
+[class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active,
+[class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active {
+ padding-top: 9px; }
+
+.wp-picker-container.wp-picker-active .wp-color-result {
+ margin-right: 3px; }
.wp-picker-container input[type="text"].wp-color-picker {
float: left;
box-shadow: 1px 2px 3px -2px #222;
background-color: #6d7882;
position: fixed;
+ overflow: hidden;
-webkit-border-radius: 3px;
border-radius: 3px;
z-index: 9998; }
user-select: none; }
.pen-icon:hover {
background: #556068; }
- .pen-icon:first-of-type {
- -webkit-border-top-left-radius: 3px;
- border-top-left-radius: 3px;
- -webkit-border-bottom-left-radius: 3px;
- border-bottom-left-radius: 3px; }
- .pen-icon:last-of-type {
- -webkit-border-top-right-radius: 3px;
- border-top-right-radius: 3px;
- -webkit-border-bottom-right-radius: 3px;
- border-bottom-right-radius: 3px; }
.pen-icon[data-group], .pen-icon[data-action="closeGroup"] {
display: none; }
.pen-icon[data-action="close"]:before {
line-height: 1.5;
padding: 0;
padding-left: 10px;
- width: 250px; }
+ padding-right: 10px;
+ width: 250px;
+ direction: ltr; }
.pen-input-wrapper .pen-url-input, .pen-input-wrapper .pen-url-input:focus {
background-color: transparent;
border: none;
color: #fff; }
.pen-input-wrapper .pen-url-input::-webkit-input-placeholder {
color: #d5dadf; }
- .pen-input-wrapper .pen-url-input::-moz-placeholder {
- color: #d5dadf; }
.pen-input-wrapper .pen-url-input:-ms-input-placeholder {
color: #d5dadf; }
.pen-input-wrapper .pen-url-input::-ms-input-placeholder {
.pen-input-wrapper .pen-url-input::placeholder {
color: #d5dadf; }
.pen-input-label {
- margin: 0; }
+ margin: 0;
+ margin-right: -1px; }
.pen-placeholder:before {
content: attr(data-pen-placeholder);
position: absolute;
background-color: #fff;
border: 1px solid #a4afb7;
-webkit-border-radius: 3px;
- border-radius: 3px; }
+ border-radius: 3px;
+ z-index: 1; }
.elementor-tags-list__group-title {
color: #495157;
font-weight: bold;
width: 260px;
background-color: #e6e9ec;
-webkit-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3);
- box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); }
+ box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3);
+ z-index: 1; }
.elementor-tag-settings-popup:before {
content: '';
position: absolute;
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1; }
- .elementor-label-inline .elementor-control-dynamic-switcher-wrapper {
+ .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-dynamic-switcher-wrapper {
width: 100%;
padding-bottom: 10px; }
#elementor {
position: relative; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner {
- margin-top: 25px; }
+.elementor-editor-active .elementor.elementor-edit-area-active .elementor-top-section > .elementor-container > .elementor-row {
+ min-height: 40px; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-empty .elementor-sortable-placeholder {
- display: none; }
+.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section:first-child {
+ margin-top: 15px; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-empty-view {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- z-index: 1; }
+.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section > .elementor-container > .elementor-row {
+ min-height: 40px; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-first-add {
- text-align: center;
- border: 1px dashed #d5dadf;
+.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap {
+ min-height: 30px; }
+ @media (min-width: 768px) {
+ .elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap {
+ margin: 10px; } }
+
+.elementor-editor-active .elementor-column {
+ min-width: 25px; }
+
+.elementor-editor-active .elementor-widget.elementor-loading {
+ opacity: .3; }
+
+.elementor-editor-active .elementor-widget:not(.elementor-loading):not(.elementor-widget-menu-anchor) {
+ -webkit-transition: all .1s;
+ -o-transition: all .1s;
+ transition: all .1s; }
+
+.elementor-editor-active .elementor-widget.elementor-element-editable, .elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover {
+ outline: 1px solid #71d7f7; }
+
+.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings {
+ display: none; }
+
+.elementor-editor-active .elementor-editor-element-setting {
+ cursor: pointer;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
- height: 100%;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
- justify-content: center; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-first-add .elementor-icon {
- font-size: 19px;
- color: #a4afb7;
- cursor: pointer; }
+ justify-content: center;
+ padding: 0;
+ margin: 0;
+ font-size: 11px;
+ color: #fff;
+ width: 25px;
+ -webkit-transition: margin .3s, width .3s, font .3s;
+ -o-transition: margin .3s, width .3s, font .3s;
+ transition: margin .3s, width .3s, font .3s; }
+
+.elementor-editor-active .handle {
+ display: none; }
+
+.elementor-editor-active .elementor-inline-editing {
+ min-height: 15px; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element > .elementor-element-overlay {
+.elementor-editor-active .elementor-edit-hidden {
+ display: none; }
+
+.elementor-element > .elementor-element-overlay {
position: absolute;
top: 0;
right: 0;
z-index: 9998;
pointer-events: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget-empty {
+.elementor-element-empty .elementor-sortable-placeholder {
+ display: none; }
+
+.elementor-element.elementor-widget-empty {
background-color: rgba(213, 218, 223, 0.8); }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget-empty .elementor-widget-empty-icon {
+ .elementor-element.elementor-widget-empty .elementor-widget-empty-icon {
color: #c2cbd2;
font-size: 22px;
display: block;
text-align: center;
padding: 10px 0; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element:not(:hover):not(.elementor-element-editable) > .elementor-element-overlay .elementor-editor-element-settings {
+.elementor-element:not(:hover):not(.elementor-element-editable) > .elementor-element-overlay .elementor-editor-element-settings {
display: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side="top"]:before, .elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side="bottom"] + .elementor-element:before {
+.elementor-element--toggle-edit-tools > .elementor-element-overlay .elementor-editor-element-edit:not(.elementor-active) ~ * {
+ width: 0;
+ font-size: 0; }
+
+.elementor-element[data-side="top"]:before, .elementor-element[data-side="bottom"] + .elementor-element:before {
content: '';
background-color: #71d7f7;
-webkit-transition-timing-function: ease-out;
animation: placeholder-widget 500ms;
display: block; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side="bottom"]:last-child:after {
+.elementor-element[data-side="bottom"]:last-child:after {
content: '';
background-color: #71d7f7;
-webkit-transition-timing-function: ease-out;
animation: placeholder-widget 500ms;
display: block; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section > .elementor-element-overlay {
+.elementor-section > .elementor-element-overlay {
left: 0;
bottom: 0; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-section > .elementor-element-overlay:after {
+ .elementor-section > .elementor-element-overlay:after {
position: absolute;
left: 2px;
right: 2px;
-webkit-animation: section-outline .75s;
animation: section-outline .75s; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section:hover > .elementor-element-overlay:after, .elementor-editor-active .elementor.elementor-edit-mode .elementor-section.elementor-element-editable > .elementor-element-overlay:after {
+.elementor-section:hover > .elementor-element-overlay:after, .elementor-section.elementor-element-editable > .elementor-element-overlay:after {
content: ''; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-top-section > .elementor-container > .elementor-row {
- min-height: 40px; }
+.elementor-section-filled .elementor-sortable-placeholder.elementor-column {
+ display: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner-section:first-child {
- margin-top: 15px; }
+.elementor-section-filled .elementor-row.elementor-draggable-over {
+ border: 1px solid #f00; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner-section > .elementor-container > .elementor-row {
- min-height: 40px; }
+.elementor-column > .elementor-element-overlay {
+ left: 0;
+ bottom: 0; }
+ .elementor-column > .elementor-element-overlay:after {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ outline: 1px dashed #6d7882; }
+
+.elementor-column:hover > .elementor-element-overlay, .elementor-column.elementor-element-editable > .elementor-element-overlay {
+ border: 1px solid #ffffff; }
+ .elementor-column:hover > .elementor-element-overlay:after, .elementor-column.elementor-element-editable > .elementor-element-overlay:after {
+ content: ''; }
+
+.elementor-column.elementor-dragging-on-child > .elementor-element-overlay {
+ border: 1px solid #71d7f7; }
+ .elementor-column.elementor-dragging-on-child > .elementor-element-overlay:after {
+ display: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings {
+.elementor-column > .ui-resizable-e, .elementor-column > .ui-resizable-w {
+ cursor: col-resize;
+ width: 7px;
+ position: absolute;
+ right: -5px;
+ top: 0;
+ height: 100%; }
+
+.elementor-column:last-of-type > .ui-resizable-e, .elementor-column:last-of-type > .ui-resizable-w {
+ display: none !important; }
+
+@media (max-width: 1024px) {
+ .elementor-column > .ui-resizable-e, .elementor-column > .ui-resizable-w {
+ display: none !important; } }
+
+.elementor-editor-element-settings {
position: absolute;
- overflow: hidden;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
line-height: 1;
z-index: 1;
pointer-events: all; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-trigger.elementor-active ~ .elementor-editor-element-setting {
- margin-left: 0; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-trigger:not(.elementor-active) ~ .elementor-editor-element-setting {
- width: 0;
- font-size: 0;
- padding: 0; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-remove:hover .fa {
- color: #f00; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-setting {
- cursor: pointer;
- display: -webkit-box;
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -webkit-align-items: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -webkit-justify-content: center;
- -ms-flex-pack: center;
- justify-content: center;
- padding: 0;
- margin: 0;
- font-size: 11px;
- color: #fff;
- width: 25px;
- -webkit-transition: margin .3s, width .3s, font .3s;
- -o-transition: margin .3s, width .3s, font .3s;
- transition: margin .3s, width .3s, font .3s;
- -webkit-box-sizing: content-box;
- box-sizing: content-box; }
+.elementor-editor-element-setting.elementor-editor-element-save {
+ display: none; }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings {
+@media (min-width: 1025px) {
+ .elementor-editor-element-edit {
+ cursor: move; } }
+
+.elementor-editor-section-settings {
+ height: 24px;
top: 1px;
left: 50%;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#41c9f4), to(#71d7f7));
- background-image: -webkit-linear-gradient(top, #41c9f4, #71d7f7);
- background-image: -o-linear-gradient(top, #41c9f4, #71d7f7);
- background-image: linear-gradient(to bottom, #41c9f4, #71d7f7);
- -webkit-border-radius: 3px 3px 0 0;
- border-radius: 3px 3px 0 0;
-webkit-transform: translateX(-50%) translateY(-100%);
-ms-transform: translateX(-50%) translateY(-100%);
- transform: translateX(-50%) translateY(-100%); }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:hover {
+ transform: translateX(-50%) translateY(-100%);
+ background-color: #71d7f7;
+ -webkit-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+ -webkit-box-shadow: 0px -2px 8px rgba(0, 0, 0, 0.05);
+ box-shadow: 0px -2px 8px rgba(0, 0, 0, 0.05); }
+ .elementor-editor-section-settings i.eicon-handle {
+ font-size: 16px; }
+ .elementor-editor-section-settings .elementor-editor-element-setting:hover {
background-color: #10bcf2; }
- @media (min-width: 1025px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:first-child {
- padding-left: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:first-child:not(.elementor-active) {
- padding-right: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:last-child {
- padding-right: 1px; } }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings {
+ .elementor-editor-section-settings .elementor-editor-element-setting:first-child {
+ -webkit-border-radius: 5px 0 0 0;
+ border-radius: 5px 0 0 0; }
+ .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before {
+ content: '';
+ position: absolute;
+ border: solid transparent;
+ top: 2px;
+ border-right-color: #71d7f7;
+ border-width: 22px 12px 0 0;
+ right: -webkit-calc(100% - 1px);
+ right: calc(100% - 1px); }
+ .elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before {
+ border-right-color: #10bcf2; }
+ .elementor-editor-section-settings .elementor-editor-element-setting:last-child {
+ -webkit-border-radius: 0 5px 0 0;
+ border-radius: 0 5px 0 0; }
+ .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after {
+ content: '';
+ position: absolute;
+ border: solid transparent;
+ top: 2px;
+ border-left-color: #71d7f7;
+ border-width: 22px 0 0 12px;
+ left: -webkit-calc(100% - 1px);
+ left: calc(100% - 1px); }
+ .elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after {
+ border-left-color: #10bcf2; }
+
+.elementor-section--handles-inside .elementor-editor-section-settings {
+ -webkit-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ transform: translateX(-50%);
+ -webkit-border-radius: 0 0 5px 5px;
+ border-radius: 0 0 5px 5px; }
+ .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child {
+ -webkit-border-radius: 0 0 0 5px;
+ border-radius: 0 0 0 5px; }
+ .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before {
+ top: 0;
+ border-width: 0 12px 22px 0; }
+ .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child {
+ -webkit-border-radius: 0 0 5px 0;
+ border-radius: 0 0 5px 0; }
+ .elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after {
+ top: 0;
+ border-width: 0 0 22px 12px; }
+
+.elementor-editor-column-settings {
top: -1px;
left: -1px;
-webkit-border-radius: 0 0 3px 0;
border-radius: 0 0 3px 0;
- background-image: -webkit-gradient(linear, left top, left bottom, from(#6d7882), to(#556068));
- background-image: -webkit-linear-gradient(top, #6d7882, #556068);
- background-image: -o-linear-gradient(top, #6d7882, #556068);
- background-image: linear-gradient(to bottom, #6d7882, #556068); }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:hover {
+ overflow: hidden; }
+ .elementor-editor-column-settings .elementor-editor-element-setting {
background-color: #495157; }
- @media (min-width: 1025px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:first-child {
- padding-left: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:first-child:not(.elementor-active) {
- padding-right: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:last-child {
- padding-right: 1px; } }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings {
+ .elementor-editor-column-settings .elementor-editor-element-setting:not(:hover) {
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#6d7882), to(#556068));
+ background-image: -webkit-linear-gradient(top, #6d7882, #556068);
+ background-image: -o-linear-gradient(top, #6d7882, #556068);
+ background-image: linear-gradient(to bottom, #6d7882, #556068); }
+
+.elementor-editor-widget-settings {
z-index: 2;
top: -1px;
right: -1px;
- background-image: -webkit-gradient(linear, left bottom, left top, from(#41c9f4), to(#71d7f7));
- background-image: -webkit-linear-gradient(bottom, #41c9f4, #71d7f7);
- background-image: -o-linear-gradient(bottom, #41c9f4, #71d7f7);
- background-image: linear-gradient(to top, #41c9f4, #71d7f7);
- -webkit-border-radius: 0 0 0 3px;
- border-radius: 0 0 0 3px;
-webkit-box-orient: horizontal;
-webkit-box-direction: reverse;
-webkit-flex-direction: row-reverse;
-ms-flex-direction: row-reverse;
- flex-direction: row-reverse; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:hover {
+ flex-direction: row-reverse;
+ -webkit-border-radius: 0 0 0 3px;
+ border-radius: 0 0 0 3px;
+ overflow: hidden; }
+ .elementor-editor-widget-settings .elementor-editor-element-setting {
background-color: #10bcf2; }
- @media (min-width: 1025px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:first-child {
- padding-right: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:first-child:not(.elementor-active) {
- padding-left: 1px; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:last-child {
- padding-left: 1px; } }
-
-@media (min-width: 1025px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-trigger {
- cursor: move; } }
-
-@media (max-width: 1024px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-setting:not(.elementor-editor-element-trigger) {
- display: none; } }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-editor-column-settings .elementor-editor-element-add, .elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-editor-column-settings .elementor-editor-element-duplicate {
- display: none; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-sortable-placeholder.elementor-column {
- display: none; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-row.elementor-draggable-over {
- border: 1px solid #f00; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .elementor-element-overlay {
- left: 0;
- bottom: 0; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .elementor-element-overlay:after {
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- outline: 1px dashed #6d7882; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:hover > .elementor-element-overlay, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-element-editable > .elementor-element-overlay {
- border: 1px solid #ffffff; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-column:hover > .elementor-element-overlay:after, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-element-editable > .elementor-element-overlay:after {
- content: ''; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-dragging-on-child > .elementor-element-overlay {
- border: 1px solid #71d7f7; }
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-dragging-on-child > .elementor-element-overlay:after {
- display: none; }
+ .elementor-editor-widget-settings .elementor-editor-element-setting:not(:hover) {
+ background-image: -webkit-gradient(linear, left bottom, left top, from(#41c9f4), to(#71d7f7));
+ background-image: -webkit-linear-gradient(bottom, #41c9f4, #71d7f7);
+ background-image: -o-linear-gradient(bottom, #41c9f4, #71d7f7);
+ background-image: linear-gradient(to top, #41c9f4, #71d7f7); }
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .ui-resizable-e, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .ui-resizable-w {
- cursor: col-resize;
- width: 7px;
+.elementor-empty-view {
position: absolute;
- right: -5px;
top: 0;
- height: 100%; }
-
-.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:last-of-type > .ui-resizable-e, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column:last-of-type > .ui-resizable-w {
- display: none !important; }
-
-@media (max-width: 1024px) {
- .elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .ui-resizable-e, .elementor-editor-active .elementor.elementor-edit-mode .elementor-column > .ui-resizable-w {
- display: none !important; } }
-
-.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap {
- min-height: 30px; }
- @media (min-width: 768px) {
- .elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap {
- margin: 10px; } }
-
-.elementor-editor-active .elementor-column {
- min-width: 25px; }
-
-.elementor-editor-active .elementor-widget.elementor-loading {
- opacity: .3; }
-
-.elementor-editor-active .elementor-widget:not(.elementor-loading):not(.elementor-widget-menu-anchor) {
- -webkit-transition: all .1s;
- -o-transition: all .1s;
- transition: all .1s; }
-
-.elementor-editor-active .elementor-widget.elementor-element-editable, .elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover {
- outline: 1px solid #71d7f7; }
-
-.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings {
- display: none; }
+ bottom: 0;
+ left: 0;
+ right: 0;
+ z-index: 1; }
-.elementor-editor-active .handle {
- display: none; }
+.elementor-first-add {
+ text-align: center;
+ border: 1px dashed #d5dadf;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 100%;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+ .elementor-first-add .elementor-icon {
+ font-size: 19px;
+ color: #a4afb7;
+ cursor: pointer; }
-.elementor-editor-active .elementor-sortable-helper {
+.elementor-sortable-helper {
position: absolute;
-webkit-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
cursor: move; }
- .elementor-editor-active .elementor-sortable-helper .icon {
+ .elementor-sortable-helper .icon {
font-size: 28px;
padding-top: 15px;
line-height: 1; }
- .elementor-editor-active .elementor-sortable-helper .elementor-element-title-wrapper {
+ .elementor-sortable-helper .elementor-element-title-wrapper {
display: table;
width: 100%; }
- .elementor-editor-active .elementor-sortable-helper .title {
+ .elementor-sortable-helper .title {
font-size: 11px;
font-family: Arial, Helvetica, sans-serif;
font-weight: normal;
vertical-align: middle;
height: 40px; }
-.elementor-editor-active .elementor-inline-editing {
- min-height: 15px; }
-
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-first-add {
+.elementor-editor-content-only .elementor-first-add {
display: none; }
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section > .elementor-element-overlay {
+.elementor-editor-content-only .elementor-section > .elementor-element-overlay {
display: none; }
- .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section > .elementor-element-overlay:after {
+ .elementor-editor-content-only .elementor-section > .elementor-element-overlay:after {
display: none; }
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section:hover > .elementor-element-overlay:after, .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section.elementor-element-editable > .elementor-element-overlay:after {
+.elementor-editor-content-only .elementor-section:hover > .elementor-element-overlay:after, .elementor-editor-content-only .elementor-section.elementor-element-editable > .elementor-element-overlay:after {
display: none; }
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column > .elementor-element-overlay {
+.elementor-editor-content-only .elementor-column > .elementor-element-overlay {
display: none; }
- .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column > .elementor-element-overlay:after {
+ .elementor-editor-content-only .elementor-column > .elementor-element-overlay:after {
display: none; }
-.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column:hover > .elementor-element-overlay:after, .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column.elementor-element-editable > .elementor-element-overlay:after {
+.elementor-editor-content-only .elementor-column:hover > .elementor-element-overlay:after, .elementor-editor-content-only .elementor-column.elementor-element-editable > .elementor-element-overlay:after {
display: none; }
@media (min-width: 1025px) {
- .elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-editor-element-trigger {
+ .elementor-editor-content-only .elementor-editor-element-edit {
cursor: pointer; } }
.elementor-sortable-placeholder:not(.elementor-column-placeholder) {
display: none; }
.elementor-add-section {
- background-color: rgba(255, 255, 255, 0.5);
- max-width: 1140px;
+ max-width: 1160px;
position: relative; }
- .elementor-add-section:not(.elementor-dragging-on-child) {
- border: 2px dashed #d5dadf; }
- .elementor-add-section.elementor-dragging-on-child {
+ .elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner {
+ border: 2px dashed #d5dadf;
+ background-color: rgba(255, 255, 255, 0.5); }
+ .elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner {
border: 3px dashed #71d7f7; }
.elementor-add-section[data-view="choose-action"] .elementor-select-preset {
display: none; }
.elementor-add-section[data-view="select-preset"] .elementor-add-new-section {
display: none; }
- @media (max-width: 479px) {
- .elementor-add-section {
- display: none; } }
.elementor-add-section-inner {
text-align: center;
- margin-top: 10px;
+ margin: 20px;
padding: 40px 0; }
.elementor-add-new-section {
display: inline-block; }
- .elementor-add-new-section .elementor-button {
- color: #fff;
- background-image: none;
- font-size: 13px;
- font-family: Arial, Helvetica, sans-serif;
- font-weight: normal;
- font-style: normal;
- text-transform: uppercase;
- line-height: 1;
+ .elementor-add-new-section .elementor-add-section-area-button {
+ display: -webkit-inline-box;
+ display: -webkit-inline-flex;
+ display: -ms-inline-flexbox;
+ display: inline-flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
height: 40px;
- min-width: 170px;
- padding: 0 20px;
- border: none;
- -webkit-border-radius: 3px;
- border-radius: 3px;
+ width: 40px;
+ color: #fff;
+ font-size: 16px;
+ -webkit-border-radius: 50%;
+ border-radius: 50%;
+ -webkit-transition: all .3s;
+ -o-transition: all .3s;
+ transition: all .3s;
cursor: pointer; }
- .elementor-add-new-section .elementor-button:hover {
+ .elementor-add-new-section .elementor-add-section-area-button:hover {
opacity: 0.85;
-webkit-box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2);
box-shadow: 0 0 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); }
- .elementor-add-new-section .elementor-button:active {
+ .elementor-add-new-section .elementor-add-section-area-button:active {
-webkit-box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.1);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.1); }
.elementor-add-new-section .elementor-add-section-button {
- background-color: #B7084E; }
+ background-color: #D30C5C; }
.elementor-add-new-section .elementor-add-template-button {
background-color: #6d7882;
- margin-left: 25px; }
+ margin-left: 5px; }
.elementor-add-section-drag-title {
font-family: Arial, Helvetica, sans-serif;
.elementor-add-section-close {
position: absolute;
- right: 20px;
+ right: 40px;
top: 20px;
font-size: 20px;
cursor: pointer;
cursor: pointer;
margin: 0;
padding: 10px;
- float: left; }
+ float: left;
+ max-width: 33.333%; }
.elementor-select-preset-list .elementor-preset:hover path {
fill: #6d7882; }
.elementor-select-preset-list .elementor-preset:not(:hover) path {
fill: #d5dadf; }
.elementor-select-preset-list .elementor-preset svg {
- height: 50px; }
+ height: 50px;
+ width: 100%; }
#elementor-add-new-section {
margin: 60px auto; }
.elementor-editor-preview .elementor-element-empty,
.elementor-editor-preview .elementor-widget-empty {
display: none; }
+
+.elementor.elementor-edit-area-active .elementor-hidden-desktop,
+.elementor.elementor-edit-area-active .elementor-hidden-tablet,
+.elementor.elementor-edit-area-active .elementor-hidden-phone {
+ display: block; }
/*# sourceMappingURL=editor-preview.css.map */
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-@charset "UTF-8";.elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel-box-content{padding:20px 20px 10px}.elementor-control-title{font-size:12px}.elementor-button{display:inline-block}.elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:left}.elementor-panel-alert a{color:inherit}.elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-control-field-description,.elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-panel-nerd-box{padding:30px 20px;text-align:center}.elementor-panel-nerd-box .elementor-panel-nerd-box-icon{font-size:52px;color:#a4afb7}.elementor-panel-nerd-box .elementor-panel-nerd-box-title{margin-top:20px;font-size:16px;font-weight:700}.elementor-panel-nerd-box .elementor-panel-nerd-box-message{margin-top:20px;line-height:1.4;font-size:11px}.elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link{background-color:#fcb92c;color:#fff;padding:7px 25px;margin-top:20px;-webkit-box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link:hover{background-color:#fdca5e}.elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:1;background-color:#fff}.elementor-controls-popover:before{content:"";position:absolute;top:-16px;right:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-controls-popover div.elementor-control:before{content:none}#elementor-panel-get-pro-elements .elementor-panel-nerd-box-message{text-transform:uppercase}.select2-container{width:100%!important}#elementor-controls .pojo-widget-button-collapse{display:none}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control.elementor-control-type-divider{padding:0;margin-bottom:-1px;z-index:1;background-color:transparent}.elementor-control.elementor-control-type-divider hr{border-bottom-width:0;border-top-width:1px;border-color:#e6e9ec;border-style:solid}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick{border-top-width:3px}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default{margin-right:20px;margin-left:20px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider):before{content:"";height:1px;display:block;margin-bottom:15px;background-color:#e6e9ec}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:3px;width:100%;top:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:3px;width:100%;bottom:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control .select2-container{width:100%!important;outline:none}.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.elementor-control .select2-container.select2-container--focus .select2-selection--multiple,.elementor-control .select2-container.select2-container--focus .select2-selection--single,.elementor-control .select2-container.select2-container--open .select2-selection--multiple,.elementor-control .select2-container.select2-container--open .select2-selection--single{border-color:#a4afb7}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-selection{outline:none}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading.elementor-open .elementor-panel-heading-toggle .fa:before{content:"\f0d7"}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:45%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;cursor:pointer}.elementor-slider{display:inline-block;margin-top:10px;height:4px;background-color:#a4afb7;-webkit-border-radius:5px;border-radius:5px;position:relative;width:67%}.elementor-slider .ui-slider-handle{height:16px;width:16px;background-color:#fff;display:inline-block;top:50%;-webkit-transform:translateY(-50%) translateX(-8px);-ms-transform:translateY(-50%) translateX(-8px);transform:translateY(-50%) translateX(-8px);position:absolute;-webkit-box-shadow:1px 1px 6px rgba(0,0,0,.3);box-shadow:1px 1px 6px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%;cursor:pointer}.elementor-slider-input{width:33%;float:right}.elementor-slider-input input{width:80%;float:right}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;margin-left:5px;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.elementor-control-align .elementor-choices,.elementor-control-position .elementor-choices,.elementor-control-text_align .elementor-choices{direction:ltr}.elementor-control-type-media .elementor-control-media{padding:7px;border:1px solid;height:150px}.elementor-control-type-media .elementor-control-media:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-media:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-image-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .elementor-control-media>*{height:100%;cursor:pointer;position:relative}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-image-area:not(:hover) .elementor-control-media-delete{display:none}.elementor-control-type-media .elementor-control-media-image-area:hover .elementor-control-media-image{opacity:.5}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:none;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section){padding-top:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{margin-top:7px;height:auto;line-height:1;font-size:10px;padding:3px 7px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:left;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-right:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-right:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:"";position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1);box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:left}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:left;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:right;height:27px;width:65px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:30px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-right:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-left:1px solid #a4afb7;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding:0 10px 15px}.elementor-control-type-repeater .elementor-control:before,.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:left;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-right:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:right}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:.15s ease-out;-o-transition:.15s ease-out;transition:.15s ease-out;-webkit-transition-property:opacity,background;-o-transition-property:opacity,background;transition-property:opacity,background}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px hsla(0,0%,100%,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-hidden{display:none!important}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:rtl}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-right:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-button .elementor-control-input-wrapper{text-align:right}.elementor-control-type-button .elementor-button{width:auto;height:26px}.wp-picker-container.wp-picker-active{position:absolute;z-index:4;top:0;right:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:-webkit-calc(100% - 2px * 2);width:calc(100% - 2px * 2);height:-webkit-calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container:not(.wp-picker-active){float:right}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}.wp-picker-container.wp-picker-active{-webkit-transform:translateY(6px);-ms-transform:translateY(6px);transform:translateY(6px)}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:100px;max-width:136px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}.pen{position:relative;outline:none}.pen:not([data-elementor-inline-editing-toolbar=advanced]){white-space:pre-wrap}.pen-menu{-webkit-box-shadow:1px 2px 3px -2px #222;box-shadow:1px 2px 3px -2px #222;background-color:#6d7882;position:fixed;-webkit-border-radius:3px;border-radius:3px;z-index:3}.pen-menu:after{top:100%;content:"";position:absolute;border:6px solid transparent;border-top-color:#6d7882;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.pen-menu-below:after{top:0;-webkit-transform:translateX(-50%) translateY(-100%) rotate(180deg);-ms-transform:translateX(-50%) translateY(-100%) rotate(180deg);transform:translateX(-50%) translateY(-100%) rotate(180deg)}.pen-icon{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:35px;padding:0 10px;font-size:21px;color:#d5dadf;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pen-icon:hover{background:#556068}.pen-icon:first-of-type{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.pen-icon:last-of-type{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.pen-icon[data-action=closeGroup],.pen-icon[data-group]{display:none}.pen-icon[data-action=close]:before{content:"";position:absolute;left:0;height:60%;width:1px;background-color:#556068}.pen-icon.active{background-color:#556068;-webkit-box-shadow:inset 2px 2px 4px #556068;box-shadow:inset 2px 2px 4px #556068}.pen-group-icon:after{font-family:FontAwesome;font-size:12px;content:"\f0d7";padding-left:4px;color:#71d7f7}.pen-input-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.pen-input-wrapper .pen-url-input{font-size:12px;line-height:1.5;padding:0;padding-left:10px;width:250px}.pen-input-wrapper .pen-url-input,.pen-input-wrapper .pen-url-input:focus{background-color:transparent;border:none;outline:none;-webkit-box-shadow:none;box-shadow:none;color:#fff}.pen-input-wrapper .pen-url-input::-webkit-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::-moz-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input:-ms-input-placeholder,.pen-input-wrapper .pen-url-input::-ms-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::placeholder{color:#d5dadf}.pen-input-label{margin:0}.pen-placeholder:before{content:attr(data-pen-placeholder);position:absolute;font-weight:400;color:#757575;opacity:.6}.pen-external-url-checkbox{display:none}.pen-external-url-checkbox:checked+i{color:#fff}.elementor-inline-editing i:not([class]){font-style:italic}.elementor-inline-editing b{font-weight:700}.elementor-inline-editing u{text-decoration:underline}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-right:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3)}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;left:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-left:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline .elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}@-webkit-keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@-webkit-keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@-webkit-keyframes section-outline{0%{opacity:0}to{opacity:1}}@keyframes section-outline{0%{opacity:0}to{opacity:1}}body.elementor-editor-active .elementor.elementor-edit-mode .article,body.elementor-editor-active .elementor.elementor-edit-mode.layout-section .entry-content{overflow:visible}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-overlay .elementor-editor-element-settings{clear:unset}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section{overflow:visible}#elementor .animated{-webkit-animation-fill-mode:none!important;animation-fill-mode:none!important}#elementor ul.elementor-editor-element-settings{word-break:normal;padding:0}#elementor .gallery{opacity:1}html.elementor-html{margin-top:0!important}#elementor{position:relative}.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner{margin-top:25px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-empty .elementor-sortable-placeholder{display:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-empty-view{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1}.elementor-editor-active .elementor.elementor-edit-mode .elementor-first-add{text-align:center;border:1px dashed #d5dadf;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-editor-active .elementor.elementor-edit-mode .elementor-first-add .elementor-icon{font-size:19px;color:#a4afb7;cursor:pointer}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element>.elementor-element-overlay{position:absolute;top:0;right:0;letter-spacing:0;z-index:3;pointer-events:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget-empty{background-color:rgba(213,218,223,.8)}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-widget-empty .elementor-widget-empty-icon{color:#c2cbd2;font-size:22px;display:block;text-align:center;padding:10px 0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element:not(:hover):not(.elementor-element-editable)>.elementor-element-overlay .elementor-editor-element-settings{display:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side=bottom]+.elementor-element:before,.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side=bottom]:last-child:after,.elementor-editor-active .elementor.elementor-edit-mode .elementor-element[data-side=top]:before{content:"";background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:placeholder-widget .5s;animation:placeholder-widget .5s;display:block}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section>.elementor-element-overlay{left:0;bottom:0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section>.elementor-element-overlay:after{position:absolute;left:2px;right:2px;top:2px;bottom:2px;outline:2px solid #71d7f7;-webkit-animation:section-outline .75s;animation:section-outline .75s}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-active .elementor.elementor-edit-mode .elementor-section:hover>.elementor-element-overlay:after{content:""}.elementor-editor-active .elementor.elementor-edit-mode .elementor-top-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner-section:first-child{margin-top:15px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-inner-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings{position:absolute;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:26px;list-style:none;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:normal;line-height:1;z-index:1;pointer-events:all}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-trigger.elementor-active~.elementor-editor-element-setting{margin-left:0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-trigger:not(.elementor-active)~.elementor-editor-element-setting{width:0;font-size:0;padding:0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-settings .elementor-editor-element-remove:hover .fa{color:red}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-setting{cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:0;margin:0;font-size:11px;color:#fff;width:25px;-webkit-transition:margin .3s,width .3s,font .3s;-o-transition:margin .3s,width .3s,font .3s;transition:margin .3s,width .3s,font .3s;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings{top:1px;left:50%;background-image:-webkit-gradient(linear,left top,left bottom,from(#41c9f4),to(#71d7f7));background-image:-webkit-linear-gradient(top,#41c9f4,#71d7f7);background-image:-o-linear-gradient(top,#41c9f4,#71d7f7);background-image:linear-gradient(180deg,#41c9f4,#71d7f7);-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;-webkit-transform:translateX(-50%) translateY(-100%);-ms-transform:translateX(-50%) translateY(-100%);transform:translateX(-50%) translateY(-100%)}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:hover{background-color:#10bcf2}@media (min-width:1025px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:first-child{padding-left:1px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:first-child:not(.elementor-active),.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-section-settings .elementor-editor-element-setting:last-child{padding-right:1px}}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings{top:-1px;left:-1px;-webkit-border-radius:0 0 3px 0;border-radius:0 0 3px 0;background-image:-webkit-gradient(linear,left top,left bottom,from(#6d7882),to(#556068));background-image:-webkit-linear-gradient(top,#6d7882,#556068);background-image:-o-linear-gradient(top,#6d7882,#556068);background-image:linear-gradient(180deg,#6d7882,#556068)}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:hover{background-color:#495157}@media (min-width:1025px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:first-child{padding-left:1px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:first-child:not(.elementor-active),.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-column-settings .elementor-editor-element-setting:last-child{padding-right:1px}}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings{z-index:2;top:-1px;right:-1px;background-image:-webkit-gradient(linear,left bottom,left top,from(#41c9f4),to(#71d7f7));background-image:-webkit-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:-o-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:linear-gradient(0deg,#41c9f4,#71d7f7);-webkit-border-radius:0 0 0 3px;border-radius:0 0 0 3px;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:hover{background-color:#10bcf2}@media (min-width:1025px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:first-child{padding-right:1px}.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:first-child:not(.elementor-active),.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-widget-settings .elementor-editor-element-setting:last-child{padding-left:1px}}@media (min-width:1025px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-trigger{cursor:move}}@media (max-width:1024px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-editor-element-setting:not(.elementor-editor-element-trigger){display:none}}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-editor-column-settings .elementor-editor-element-add,.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-editor-column-settings .elementor-editor-element-duplicate,.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-sortable-placeholder.elementor-column{display:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-section-filled .elementor-row.elementor-draggable-over{border:1px solid red}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.elementor-element-overlay{left:0;bottom:0}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.elementor-element-overlay:after{position:absolute;left:0;right:0;top:0;bottom:0;outline:1px dashed #6d7882}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-element-editable>.elementor-element-overlay,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:hover>.elementor-element-overlay{border:1px solid #fff}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:hover>.elementor-element-overlay:after{content:""}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-dragging-on-child>.elementor-element-overlay{border:1px solid #71d7f7}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column.elementor-dragging-on-child>.elementor-element-overlay:after{display:none}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.ui-resizable-e,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.ui-resizable-w{cursor:col-resize;width:7px;position:absolute;right:-5px;top:0;height:100%}.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:last-of-type>.ui-resizable-e,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column:last-of-type>.ui-resizable-w{display:none!important}@media (max-width:1024px){.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.ui-resizable-e,.elementor-editor-active .elementor.elementor-edit-mode .elementor-column>.ui-resizable-w{display:none!important}}.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{min-height:30px}@media (min-width:768px){.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{margin:10px}}.elementor-editor-active .elementor-column{min-width:25px}.elementor-editor-active .elementor-widget.elementor-loading{opacity:.3}.elementor-editor-active .elementor-widget:not(.elementor-loading):not(.elementor-widget-menu-anchor){-webkit-transition:all .1s;-o-transition:all .1s;transition:all .1s}.elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover,.elementor-editor-active .elementor-widget.elementor-element-editable{outline:1px solid #71d7f7}.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings,.elementor-editor-active .handle{display:none}.elementor-editor-active .elementor-sortable-helper{position:absolute;-webkit-border-radius:3px;border-radius:3px;background-color:#fff;text-align:center;color:#556068;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2);cursor:move}.elementor-editor-active .elementor-sortable-helper .icon{font-size:28px;padding-top:15px;line-height:1}.elementor-editor-active .elementor-sortable-helper .elementor-element-title-wrapper{display:table;width:100%}.elementor-editor-active .elementor-sortable-helper .title{font-size:11px;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-style:normal;display:table-cell;vertical-align:middle;height:40px}.elementor-editor-active .elementor-inline-editing{min-height:15px}.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column:hover>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column>.elementor-element-overlay,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-column>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-first-add,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section:hover>.elementor-element-overlay:after,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section>.elementor-element-overlay,.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-section>.elementor-element-overlay:after{display:none}@media (min-width:1025px){.elementor-editor-active.elementor-editor-content-only .elementor.elementor-edit-mode .elementor-editor-element-trigger{cursor:pointer}}.elementor-sortable-placeholder:not(.elementor-column-placeholder){background-color:#71d7f7;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-duration:.5s;animation-duration:.5s;opacity:.9}.elementor-section-placeholder{height:40px;-webkit-animation-name:placeholder-section;animation-name:placeholder-section}.elementor-column-placeholder{position:relative}.elementor-column-placeholder:after,.elementor-column-placeholder:before{content:"";position:absolute;top:10px;bottom:10px;right:10px;left:10px}.elementor-column-placeholder:before{border:1px solid #6d7882}.elementor-column-placeholder:after{border:1px dashed #fff}.elementor-widget-placeholder{height:10px;-webkit-animation-name:placeholder-widget;animation-name:placeholder-widget}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add:after,.elementor-first-add.elementor-html5dnd-current-element:after{content:"";background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:placeholder-widget .5s;animation:placeholder-widget .5s;width:100%}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add .elementor-icon,.elementor-draggable-over[data-dragged-element=section][data-dragged-is-inner=true] .elementor-inner-column .elementor-sortable-placeholder,.elementor-first-add.elementor-html5dnd-current-element .elementor-icon{display:none}.elementor-add-section{background-color:hsla(0,0%,100%,.5);max-width:1140px;position:relative}.elementor-add-section:not(.elementor-dragging-on-child){border:2px dashed #d5dadf}.elementor-add-section.elementor-dragging-on-child{border:3px dashed #71d7f7}.elementor-add-section[data-view=choose-action] .elementor-select-preset,.elementor-add-section[data-view=select-preset] .elementor-add-new-section{display:none}@media (max-width:479px){.elementor-add-section{display:none}}.elementor-add-section-inner{text-align:center;margin-top:10px;padding:40px 0}.elementor-add-new-section{display:inline-block}.elementor-add-new-section .elementor-button{color:#fff;background-image:none;font-size:13px;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-style:normal;text-transform:uppercase;line-height:1;height:40px;min-width:170px;padding:0 20px;border:none;-webkit-border-radius:3px;border-radius:3px;cursor:pointer}.elementor-add-new-section .elementor-button:hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-add-new-section .elementor-button:active{-webkit-box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1);box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1)}.elementor-add-new-section .elementor-add-section-button{background-color:#b7084e}.elementor-add-new-section .elementor-add-template-button{background-color:#6d7882;margin-left:25px}.elementor-add-section-drag-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:italic;line-height:1;color:#556068;margin-top:15px}.elementor-add-section-close{position:absolute;right:20px;top:20px;font-size:20px;cursor:pointer;line-height:1;color:#d5dadf}.elementor-add-section-close:hover{color:#6d7882}.elementor-select-preset-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:500;font-style:normal;text-transform:uppercase;color:#556068}.elementor-select-preset-list{list-style:none;padding:0 25px;margin:20px auto 0;overflow:hidden;max-width:700px}.elementor-select-preset-list .elementor-preset{cursor:pointer;margin:0;padding:10px;float:left}.elementor-select-preset-list .elementor-preset:hover path{fill:#6d7882}.elementor-select-preset-list .elementor-preset:not(:hover) path{fill:#d5dadf}.elementor-select-preset-list .elementor-preset svg{height:50px}#elementor-add-new-section{margin:60px auto}#elementor-add-new-section[data-view=choose-action] .elementor-add-section-close{display:none}.elementor-add-section-inline{margin:10px auto}.elementor-column-percents-tooltip{position:absolute;display:none;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);color:#fff;font-size:10px;background-color:#556068;width:40px;padding:3.5px 0;text-align:center;z-index:1;line-height:1}.elementor-column-percents-tooltip:after{content:"";position:absolute;width:0;height:0;border:8.5px solid transparent;top:0}.elementor-column-percents-tooltip[data-side=left]{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;right:15px}.elementor-column-percents-tooltip[data-side=left]:after{left:100%;border-left-color:#556068;border-right-width:0}.elementor-column-percents-tooltip[data-side=right]{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;left:15px}.elementor-column-percents-tooltip[data-side=right]:after{right:100%;border-right-color:#556068;border-left-width:0}.elementor-editor-preview .elementor-add-section,.elementor-editor-preview .elementor-element-empty,.elementor-editor-preview .elementor-element-overlay,.elementor-editor-preview .elementor-empty,.elementor-editor-preview .elementor-widget-empty{display:none}
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+@charset "UTF-8";.elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel-box-content{padding:20px 20px 10px}.elementor-control-title{font-size:12px}.elementor-button{display:inline-block}.elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:left}.elementor-panel-alert a{color:inherit}.elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-control-field-description,.elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:4;background-color:#fff}.elementor-controls-popover:before{content:"";position:absolute;top:-16px;right:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-controls-popover div.elementor-control:before{content:none}#elementor-panel-get-pro-elements .elementor-nerd-box-message{text-transform:uppercase}.select2-container{width:100%!important}#elementor-controls .pojo-widget-button-collapse{display:none}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control .elementor-control-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.elementor-control.elementor-control-type-divider{padding:0;margin-bottom:-1px;z-index:1;background-color:transparent}.elementor-control.elementor-control-type-divider hr{border-bottom-width:0;border-top-width:1px;border-color:#e6e9ec;border-style:solid}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick{border-top-width:1px}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default{margin-right:20px;margin-left:20px}.elementor-control.elementor-control-type-divider+.elementor-control:not(.elementor-control-type-section){padding-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{content:"";height:1px;display:block;margin-bottom:15px;background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:1px;width:100%;top:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:1px;width:100%;bottom:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:#495157;font-size:12px;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:5px;padding-right:20px;cursor:pointer}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:"\e955";font-size:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);right:5px;pointer-events:none}.elementor-control .select2-container{width:100%!important;outline:none}.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.elementor-control .select2-container.select2-container--focus .select2-selection--multiple,.elementor-control .select2-container.select2-container--focus .select2-selection--single,.elementor-control .select2-container.select2-container--open .select2-selection--multiple,.elementor-control .select2-container.select2-container--open .select2-selection--single{border-color:#a4afb7}.elementor-control .select2-container.select2-container--default .select2-selection{-webkit-border-radius:3px;border-radius:3px}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-container.select2-container--default .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection{outline:none}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before{content:"\f0d7"}.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:45%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;cursor:pointer}.elementor-slider{display:inline-block;margin-top:10px;height:4px;background-color:#a4afb7;-webkit-border-radius:5px;border-radius:5px;position:relative;width:70%}.elementor-slider .ui-slider-handle{height:16px;width:16px;background-color:#fff;display:inline-block;top:50%;-webkit-transform:translateY(-50%) translateX(-8px);-ms-transform:translateY(-50%) translateX(-8px);transform:translateY(-50%) translateX(-8px);position:absolute;-webkit-box-shadow:1px 1px 6px rgba(0,0,0,.3);box-shadow:1px 1px 6px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%;cursor:pointer}.elementor-slider-input{width:30%;float:right}.elementor-slider-input input{max-width:80%;float:right;padding:5px}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;margin-left:5px;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.elementor-control-align .elementor-choices,.elementor-control-direction-ltr,.elementor-control-position .elementor-choices,.elementor-control-text_align .elementor-choices{direction:ltr}.elementor-control-direction-rtl{direction:rtl}.elementor-control-type-media .elementor-control-media{padding:7px;border:1px solid;height:150px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.elementor-control-type-media .elementor-control-media:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-media:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .elementor-control-media>*{height:100%;cursor:pointer;position:relative}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-area{background-image:-webkit-linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd),-webkit-linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd);background-image:-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd),linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd);-webkit-background-size:16px 16px;background-size:16px 16px;background-position:0 0,8px 8px;background-color:#f6f6f6;overflow:hidden}.elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete{-webkit-box-shadow:none;box-shadow:none;bottom:-30px}.elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image{opacity:.9}.elementor-control-type-media .elementor-control-media-area i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:hsla(0,0%,100%,.7);font-size:21px}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-box-shadow:0 0 3px 3px rgba(0,0,0,.1);box-shadow:0 0 3px 3px rgba(0,0,0,.1)}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:none;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;width:12px;height:12px;top:7px;left:44px}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-autocomplete-menu{position:absolute;background:#fff;color:#495157;border:1px solid #a4afb7;margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out;cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline;padding:5px 8px;font-size:12px;width:100%;line-height:1.2;cursor:pointer}.elementor-autocomplete-menu .ui-menu-item.ui-state-active,.elementor-autocomplete-menu .ui-menu-item.ui-state-focus,.elementor-autocomplete-menu .ui-menu-item.ui-state-hover{background:#e6e9ec}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-top:2px}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section.elementor-open{padding-bottom:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{height:auto;line-height:24px;font-size:10px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:left;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-right:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-right:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:"";position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1);box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:left}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:left;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:right;height:27px;width:65px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:27px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-right:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-left:1px solid #a4afb7;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding:0 10px 15px}.elementor-control-type-repeater .elementor-control:before,.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:left;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-right:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:right}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:.15s ease-out;-o-transition:.15s ease-out;transition:.15s ease-out;-webkit-transition-property:opacity,background;-o-transition-property:opacity,background;transition-property:opacity,background}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px hsla(0,0%,100%,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-hidden{display:none!important}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:rtl}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-right:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-button .elementor-control-input-wrapper{text-align:right}.elementor-control-type-button .elementor-button{width:auto;height:26px}.elementor-group-control-css-filter .elementor-slider{height:6px;-webkit-box-shadow:0 0 1px 1px inset rgba(0,0,0,.2);box-shadow:inset 0 0 1px 1px rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-slider .ui-slider-handle{-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.3),0 0 0 1px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.3),0 0 0 1px rgba(0,0,0,.1)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0;margin-bottom:5px}.elementor-group-control-blur .elementor-slider{background:url(../images/blur.png);-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-group-control-contrast .elementor-slider{background:url(../images/contrast.png);-webkit-background-size:100% 100%;background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(red),color-stop(orange),color-stop(#ff0),color-stop(#adff2f),color-stop(#32cd32),color-stop(#00bfff),color-stop(blue),color-stop(95%,#9400d3));background-image:-webkit-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%);background-image:-o-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%);background-image:linear-gradient(90deg,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(gray),to(red));background-image:-webkit-linear-gradient(left,gray,red);background-image:-o-linear-gradient(left,gray,red);background-image:linear-gradient(90deg,gray,red)}.elementor-group-control-brightness .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(#000),to(#fff));background-image:-webkit-linear-gradient(left,#000,#fff);background-image:-o-linear-gradient(left,#000,#fff);background-image:linear-gradient(90deg,#000,#fff)}.wp-picker-container.wp-picker-active{position:absolute;z-index:4;top:-9px;right:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:-webkit-calc(100% - 2px * 2);width:calc(100% - 2px * 2);height:-webkit-calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container:not(.wp-picker-active){float:right}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:100px;max-width:136px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}.pen{position:relative;outline:none}.pen:not([data-elementor-inline-editing-toolbar=advanced]){white-space:pre-wrap}.pen-menu{-webkit-box-shadow:1px 2px 3px -2px #222;box-shadow:1px 2px 3px -2px #222;background-color:#6d7882;position:fixed;overflow:hidden;-webkit-border-radius:3px;border-radius:3px;z-index:3}.pen-menu:after{top:100%;content:"";position:absolute;border:6px solid transparent;border-top-color:#6d7882;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.pen-menu-below:after{top:0;-webkit-transform:translateX(-50%) translateY(-100%) rotate(180deg);-ms-transform:translateX(-50%) translateY(-100%) rotate(180deg);transform:translateX(-50%) translateY(-100%) rotate(180deg)}.pen-icon{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:35px;padding:0 10px;font-size:21px;color:#d5dadf;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pen-icon:hover{background:#556068}.pen-icon[data-action=closeGroup],.pen-icon[data-group]{display:none}.pen-icon[data-action=close]:before{content:"";position:absolute;left:0;height:60%;width:1px;background-color:#556068}.pen-icon.active{background-color:#556068;-webkit-box-shadow:inset 2px 2px 4px #556068;box-shadow:inset 2px 2px 4px #556068}.pen-group-icon:after{font-family:FontAwesome;font-size:12px;content:"\f0d7";padding-left:4px;color:#71d7f7}.pen-input-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.pen-input-wrapper .pen-url-input{font-size:12px;line-height:1.5;padding:0;padding-left:10px;padding-right:10px;width:250px;direction:ltr}.pen-input-wrapper .pen-url-input,.pen-input-wrapper .pen-url-input:focus{background-color:transparent;border:none;outline:none;-webkit-box-shadow:none;box-shadow:none;color:#fff}.pen-input-wrapper .pen-url-input::-webkit-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input:-ms-input-placeholder,.pen-input-wrapper .pen-url-input::-ms-input-placeholder{color:#d5dadf}.pen-input-wrapper .pen-url-input::placeholder{color:#d5dadf}.pen-input-label{margin:0;margin-right:-1px}.pen-placeholder:before{content:attr(data-pen-placeholder);position:absolute;font-weight:400;color:#757575;opacity:.6}.pen-external-url-checkbox{display:none}.pen-external-url-checkbox:checked+i{color:#fff}.elementor-inline-editing i:not([class]){font-style:italic}.elementor-inline-editing b{font-weight:700}.elementor-inline-editing u{text-decoration:underline}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px;z-index:1}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-right:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3);z-index:1}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;left:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-left:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}@-webkit-keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@keyframes placeholder-section{0%{height:0;opacity:0}to{height:40px;opacity:.9}}@-webkit-keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@keyframes placeholder-widget{0%{height:0;opacity:0}to{height:10px;opacity:.9}}@-webkit-keyframes section-outline{0%{opacity:0}to{opacity:1}}@keyframes section-outline{0%{opacity:0}to{opacity:1}}body.elementor-editor-active .elementor.elementor-edit-mode .article,body.elementor-editor-active .elementor.elementor-edit-mode.layout-section .entry-content{overflow:visible}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element-overlay .elementor-editor-element-settings{clear:unset}body.elementor-editor-active .elementor.elementor-edit-mode .elementor-element.elementor-section{overflow:visible}#elementor .animated{-webkit-animation-fill-mode:none!important;animation-fill-mode:none!important}#elementor ul.elementor-editor-element-settings{word-break:normal;padding:0}#elementor .gallery{opacity:1}html.elementor-html{margin-top:0!important}#elementor{position:relative}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-top-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section:first-child{margin-top:15px}.elementor-editor-active .elementor.elementor-edit-area-active .elementor-inner-section>.elementor-container>.elementor-row{min-height:40px}.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{min-height:30px}@media (min-width:768px){.elementor-editor-active .elementor-column-wrap.elementor-element-empty .elementor-widget-wrap{margin:10px}}.elementor-editor-active .elementor-column{min-width:25px}.elementor-editor-active .elementor-widget.elementor-loading{opacity:.3}.elementor-editor-active .elementor-widget:not(.elementor-loading):not(.elementor-widget-menu-anchor){-webkit-transition:all .1s;-o-transition:all .1s;transition:all .1s}.elementor-editor-active .elementor-widget.elementor-element-edit-mode:hover,.elementor-editor-active .elementor-widget.elementor-element-editable{outline:1px solid #71d7f7}.elementor-editor-active .elementor-widget:not(:hover) .elementor-editor-element-settings{display:none}.elementor-editor-active .elementor-editor-element-setting{cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;padding:0;margin:0;font-size:11px;color:#fff;width:25px;-webkit-transition:margin .3s,width .3s,font .3s;-o-transition:margin .3s,width .3s,font .3s;transition:margin .3s,width .3s,font .3s}.elementor-editor-active .handle{display:none}.elementor-editor-active .elementor-inline-editing{min-height:15px}.elementor-editor-active .elementor-edit-hidden{display:none}.elementor-element>.elementor-element-overlay{position:absolute;top:0;right:0;letter-spacing:0;z-index:3;pointer-events:none}.elementor-element-empty .elementor-sortable-placeholder{display:none}.elementor-element.elementor-widget-empty{background-color:rgba(213,218,223,.8)}.elementor-element.elementor-widget-empty .elementor-widget-empty-icon{color:#c2cbd2;font-size:22px;display:block;text-align:center;padding:10px 0}.elementor-element:not(:hover):not(.elementor-element-editable)>.elementor-element-overlay .elementor-editor-element-settings{display:none}.elementor-element--toggle-edit-tools>.elementor-element-overlay .elementor-editor-element-edit:not(.elementor-active)~*{width:0;font-size:0}.elementor-element[data-side=bottom]+.elementor-element:before,.elementor-element[data-side=bottom]:last-child:after,.elementor-element[data-side=top]:before{content:"";background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:placeholder-widget .5s;animation:placeholder-widget .5s;display:block}.elementor-section>.elementor-element-overlay{left:0;bottom:0}.elementor-section>.elementor-element-overlay:after{position:absolute;left:2px;right:2px;top:2px;bottom:2px;outline:2px solid #71d7f7;-webkit-animation:section-outline .75s;animation:section-outline .75s}.elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-section:hover>.elementor-element-overlay:after{content:""}.elementor-section-filled .elementor-sortable-placeholder.elementor-column{display:none}.elementor-section-filled .elementor-row.elementor-draggable-over{border:1px solid red}.elementor-column>.elementor-element-overlay{left:0;bottom:0}.elementor-column>.elementor-element-overlay:after{position:absolute;left:0;right:0;top:0;bottom:0;outline:1px dashed #6d7882}.elementor-column.elementor-element-editable>.elementor-element-overlay,.elementor-column:hover>.elementor-element-overlay{border:1px solid #fff}.elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-column:hover>.elementor-element-overlay:after{content:""}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay{border:1px solid #71d7f7}.elementor-column.elementor-dragging-on-child>.elementor-element-overlay:after{display:none}.elementor-column>.ui-resizable-e,.elementor-column>.ui-resizable-w{cursor:col-resize;width:7px;position:absolute;right:-5px;top:0;height:100%}.elementor-column:last-of-type>.ui-resizable-e,.elementor-column:last-of-type>.ui-resizable-w{display:none!important}@media (max-width:1024px){.elementor-column>.ui-resizable-e,.elementor-column>.ui-resizable-w{display:none!important}}.elementor-editor-element-settings{position:absolute;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:26px;list-style:none;margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:normal;line-height:1;z-index:1;pointer-events:all}.elementor-editor-element-setting.elementor-editor-element-save{display:none}@media (min-width:1025px){.elementor-editor-element-edit{cursor:move}}.elementor-editor-section-settings{height:24px;top:1px;left:50%;-webkit-transform:translateX(-50%) translateY(-100%);-ms-transform:translateX(-50%) translateY(-100%);transform:translateX(-50%) translateY(-100%);background-color:#71d7f7;-webkit-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;-webkit-box-shadow:0 -2px 8px rgba(0,0,0,.05);box-shadow:0 -2px 8px rgba(0,0,0,.05)}.elementor-editor-section-settings i.eicon-handle{font-size:16px}.elementor-editor-section-settings .elementor-editor-element-setting:hover{background-color:#10bcf2}.elementor-editor-section-settings .elementor-editor-element-setting:first-child{-webkit-border-radius:5px 0 0 0;border-radius:5px 0 0 0}.elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{content:"";position:absolute;border:solid transparent;top:2px;border-right-color:#71d7f7;border-width:22px 12px 0 0;right:-webkit-calc(100% - 1px);right:calc(100% - 1px)}.elementor-editor-section-settings .elementor-editor-element-setting:first-child:hover:before{border-right-color:#10bcf2}.elementor-editor-section-settings .elementor-editor-element-setting:last-child{-webkit-border-radius:0 5px 0 0;border-radius:0 5px 0 0}.elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{content:"";position:absolute;border:solid transparent;top:2px;border-left-color:#71d7f7;border-width:22px 0 0 12px;left:-webkit-calc(100% - 1px);left:calc(100% - 1px)}.elementor-editor-section-settings .elementor-editor-element-setting:last-child:hover:after{border-left-color:#10bcf2}.elementor-section--handles-inside .elementor-editor-section-settings{-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);-webkit-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child{-webkit-border-radius:0 0 0 5px;border-radius:0 0 0 5px}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:first-child:before{top:0;border-width:0 12px 22px 0}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child{-webkit-border-radius:0 0 5px 0;border-radius:0 0 5px 0}.elementor-section--handles-inside .elementor-editor-section-settings .elementor-editor-element-setting:last-child:after{top:0;border-width:0 0 22px 12px}.elementor-editor-column-settings{top:-1px;left:-1px;-webkit-border-radius:0 0 3px 0;border-radius:0 0 3px 0;overflow:hidden}.elementor-editor-column-settings .elementor-editor-element-setting{background-color:#495157}.elementor-editor-column-settings .elementor-editor-element-setting:not(:hover){background-image:-webkit-gradient(linear,left top,left bottom,from(#6d7882),to(#556068));background-image:-webkit-linear-gradient(top,#6d7882,#556068);background-image:-o-linear-gradient(top,#6d7882,#556068);background-image:linear-gradient(180deg,#6d7882,#556068)}.elementor-editor-widget-settings{z-index:2;top:-1px;right:-1px;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-border-radius:0 0 0 3px;border-radius:0 0 0 3px;overflow:hidden}.elementor-editor-widget-settings .elementor-editor-element-setting{background-color:#10bcf2}.elementor-editor-widget-settings .elementor-editor-element-setting:not(:hover){background-image:-webkit-gradient(linear,left bottom,left top,from(#41c9f4),to(#71d7f7));background-image:-webkit-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:-o-linear-gradient(bottom,#41c9f4,#71d7f7);background-image:linear-gradient(0deg,#41c9f4,#71d7f7)}.elementor-empty-view{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1}.elementor-first-add{text-align:center;border:1px dashed #d5dadf;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-first-add .elementor-icon{font-size:19px;color:#a4afb7;cursor:pointer}.elementor-sortable-helper{position:absolute;-webkit-border-radius:3px;border-radius:3px;background-color:#fff;text-align:center;color:#556068;-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2);cursor:move}.elementor-sortable-helper .icon{font-size:28px;padding-top:15px;line-height:1}.elementor-sortable-helper .elementor-element-title-wrapper{display:table;width:100%}.elementor-sortable-helper .title{font-size:11px;font-family:Arial,Helvetica,sans-serif;font-weight:400;font-style:normal;display:table-cell;vertical-align:middle;height:40px}.elementor-editor-content-only .elementor-column.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-column:hover>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-column>.elementor-element-overlay,.elementor-editor-content-only .elementor-column>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-first-add,.elementor-editor-content-only .elementor-section.elementor-element-editable>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-section:hover>.elementor-element-overlay:after,.elementor-editor-content-only .elementor-section>.elementor-element-overlay,.elementor-editor-content-only .elementor-section>.elementor-element-overlay:after{display:none}@media (min-width:1025px){.elementor-editor-content-only .elementor-editor-element-edit{cursor:pointer}}.elementor-sortable-placeholder:not(.elementor-column-placeholder){background-color:#71d7f7;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-duration:.5s;animation-duration:.5s;opacity:.9}.elementor-section-placeholder{height:40px;-webkit-animation-name:placeholder-section;animation-name:placeholder-section}.elementor-column-placeholder{position:relative}.elementor-column-placeholder:after,.elementor-column-placeholder:before{content:"";position:absolute;top:10px;bottom:10px;right:10px;left:10px}.elementor-column-placeholder:before{border:1px solid #6d7882}.elementor-column-placeholder:after{border:1px dashed #fff}.elementor-widget-placeholder{height:10px;-webkit-animation-name:placeholder-widget;animation-name:placeholder-widget}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add:after,.elementor-first-add.elementor-html5dnd-current-element:after{content:"";background-color:#71d7f7;-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;opacity:.9;height:10px;-webkit-animation:placeholder-widget .5s;animation:placeholder-widget .5s;width:100%}.elementor-draggable-over:not([data-dragged-element=section]):not([data-dragged-is-inner=true])>.elementor-empty-view>.elementor-first-add .elementor-icon,.elementor-draggable-over[data-dragged-element=section][data-dragged-is-inner=true] .elementor-inner-column .elementor-sortable-placeholder,.elementor-first-add.elementor-html5dnd-current-element .elementor-icon{display:none}.elementor-add-section{max-width:1160px;position:relative}.elementor-add-section:not(.elementor-dragging-on-child) .elementor-add-section-inner{border:2px dashed #d5dadf;background-color:hsla(0,0%,100%,.5)}.elementor-add-section.elementor-dragging-on-child .elementor-add-section-inner{border:3px dashed #71d7f7}.elementor-add-section[data-view=choose-action] .elementor-select-preset,.elementor-add-section[data-view=select-preset] .elementor-add-new-section{display:none}.elementor-add-section-inner{text-align:center;margin:20px;padding:40px 0}.elementor-add-new-section{display:inline-block}.elementor-add-new-section .elementor-add-section-area-button{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;height:40px;width:40px;color:#fff;font-size:16px;-webkit-border-radius:50%;border-radius:50%;-webkit-transition:all .3s;-o-transition:all .3s;transition:all .3s;cursor:pointer}.elementor-add-new-section .elementor-add-section-area-button:hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-add-new-section .elementor-add-section-area-button:active{-webkit-box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1);box-shadow:0 10px 20px rgba(0,0,0,.19),0 6px 6px rgba(0,0,0,.1)}.elementor-add-new-section .elementor-add-section-button{background-color:#d30c5c}.elementor-add-new-section .elementor-add-template-button{background-color:#6d7882;margin-left:5px}.elementor-add-section-drag-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:400;font-style:italic;line-height:1;color:#556068;margin-top:15px}.elementor-add-section-close{position:absolute;right:40px;top:20px;font-size:20px;cursor:pointer;line-height:1;color:#d5dadf}.elementor-add-section-close:hover{color:#6d7882}.elementor-select-preset-title{font-family:Arial,Helvetica,sans-serif;font-size:13px;font-weight:500;font-style:normal;text-transform:uppercase;color:#556068}.elementor-select-preset-list{list-style:none;padding:0 25px;margin:20px auto 0;overflow:hidden;max-width:700px}.elementor-select-preset-list .elementor-preset{cursor:pointer;margin:0;padding:10px;float:left;max-width:33.333%}.elementor-select-preset-list .elementor-preset:hover path{fill:#6d7882}.elementor-select-preset-list .elementor-preset:not(:hover) path{fill:#d5dadf}.elementor-select-preset-list .elementor-preset svg{height:50px;width:100%}#elementor-add-new-section{margin:60px auto}#elementor-add-new-section[data-view=choose-action] .elementor-add-section-close{display:none}.elementor-add-section-inline{margin:10px auto}.elementor-column-percents-tooltip{position:absolute;display:none;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);color:#fff;font-size:10px;background-color:#556068;width:40px;padding:3.5px 0;text-align:center;z-index:1;line-height:1}.elementor-column-percents-tooltip:after{content:"";position:absolute;width:0;height:0;border:8.5px solid transparent;top:0}.elementor-column-percents-tooltip[data-side=left]{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;right:15px}.elementor-column-percents-tooltip[data-side=left]:after{left:100%;border-left-color:#556068;border-right-width:0}.elementor-column-percents-tooltip[data-side=right]{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;left:15px}.elementor-column-percents-tooltip[data-side=right]:after{right:100%;border-right-color:#556068;border-left-width:0}.elementor-editor-preview .elementor-add-section,.elementor-editor-preview .elementor-element-empty,.elementor-editor-preview .elementor-element-overlay,.elementor-editor-preview .elementor-empty,.elementor-editor-preview .elementor-widget-empty{display:none}.elementor.elementor-edit-area-active .elementor-hidden-desktop,.elementor.elementor-edit-area-active .elementor-hidden-phone,.elementor.elementor-edit-area-active .elementor-hidden-tablet{display:block}
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
+/*! elementor - v2.2.1 - 03-09-2018 */
@charset "UTF-8";
.dialog-widget-content {
background-color: #fff;
.dialog-type-lightbox .dialog-widget-content {
margin: auto;
width: 375px; }
+ .dialog-type-lightbox .dialog-header {
+ padding: 20px 0;
+ font-weight: 500; }
.dialog-type-lightbox .dialog-message {
- padding: 0 20px;
+ padding: 0 20px 20px;
min-height: 50px; }
- .dialog-type-lightbox .dialog-widget-header, .dialog-type-lightbox .dialog-message {
+ .dialog-type-lightbox .dialog-header, .dialog-type-lightbox .dialog-message {
text-align: center; }
.dialog-type-lightbox .dialog-buttons-wrapper {
border-top: 1px solid #e6e9ec;
.dialog-type-lightbox .dialog-buttons-wrapper > button::-moz-focus-inner {
border: 0; }
-.dialog-widget-header {
- padding: 20px 0;
- font-weight: 500; }
-
.dialog-close-button {
cursor: pointer;
position: absolute;
.dialog-close-button:not(:hover) {
opacity: .4; }
-.dialog-lightbox-widget .dialog-widget-header,
-.dialog-confirm-widget .dialog-widget-header {
+.dialog-lightbox-widget .dialog-header,
+.dialog-confirm-widget .dialog-header {
font-size: 15px;
color: #495157; }
text-decoration: none;
text-transform: none;
overflow: hidden; }
+ body:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 0;
+ background-color: #71d7f7;
+ -webkit-transition: width .5s;
+ -o-transition: width .5s;
+ transition: width .5s; }
body a {
color: #71d7f7; }
body a:hover {
- color: #B7084E; }
+ color: #D30C5C; }
body.elementor-editor-active #elementor-preview {
left: 0; }
@media (max-width: 1439px) {
@media (min-width: 1440px) {
body.elementor-editor-active #elementor-preview {
right: 300px; } }
- body.elementor-editor-active #elementor-panel {
- right: 0; }
body.elementor-editor-active #elementor-mode-switcher-preview .fa:before {
content: ""; }
body.elementor-editor-preview #elementor-preview {
left: 0; }
- @media (max-width: 1439px) {
- body.elementor-editor-preview #elementor-panel {
- right: -280px; } }
- @media (min-width: 1440px) {
- body.elementor-editor-preview #elementor-panel {
- right: -300px; } }
- body.elementor-editor-preview #elementor-panel > .ui-resizable-e, body.elementor-editor-preview #elementor-panel > .ui-resizable-w {
- display: none; }
body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before {
content: ""; }
+ body.elementor-navigator--dock-hint:after {
+ width: 30px; }
-#elementor-preview:not(.ui-resizable-resizing),
-#elementor-panel:not(.ui-resizable-resizing) {
+#elementor-panel:not(.ui-resizable-resizing),
+#elementor-preview:not(.ui-resizable-resizing) {
-webkit-transition: right 0.5s, width 0.5s;
-o-transition: right 0.5s, width 0.5s;
transition: right 0.5s, width 0.5s; }
-#elementor-preview .ps-scrollbar-y-rail,
-#elementor-panel .ps-scrollbar-y-rail {
- z-index: 2; }
-
#elementor-loading {
position: fixed;
top: 0;
background: #f1f3f5;
z-index: 9999; }
-.elementor-loader-wrapper {
- position: absolute;
- top: 50%;
- left: 50%;
- -webkit-transform: translateX(-50%) translateY(-50%);
- -ms-transform: translateX(-50%) translateY(-50%);
- transform: translateX(-50%) translateY(-50%);
- width: 100px; }
- .elementor-loader-wrapper .elementor-loader {
- height: 100px;
- position: relative; }
- .elementor-loader-wrapper .elementor-loader-box {
- background-color: #495157; }
- .elementor-loader-wrapper .elementor-loader-box {
- position: absolute;
- -webkit-animation: load 1.8s linear infinite;
- animation: load 1.8s linear infinite; }
- .elementor-loader-wrapper .elementor-loader-box:nth-of-type(1) {
- width: 20%;
- height: 100%;
- left: 0;
- top: 0; }
- .elementor-loader-wrapper .elementor-loader-box:not(:nth-of-type(1)) {
- right: 0;
- height: 20%;
- width: 60%; }
- .elementor-loader-wrapper .elementor-loader-box:nth-of-type(2) {
- top: 0;
- -webkit-animation-delay: -0.45s;
- animation-delay: -0.45s; }
- .elementor-loader-wrapper .elementor-loader-box:nth-of-type(3) {
- top: 40%;
- -webkit-animation-delay: -0.9s;
- animation-delay: -0.9s; }
- .elementor-loader-wrapper .elementor-loader-box:nth-of-type(4) {
- bottom: 0;
- -webkit-animation-delay: -1.35s;
- animation-delay: -1.35s; }
-
-@-webkit-keyframes load {
- 0% {
- opacity: .3; }
- 50% {
- opacity: 1; }
- 100% {
- opacity: .3; } }
-
-@keyframes load {
- 0% {
- opacity: .3; }
- 50% {
- opacity: 1; }
- 100% {
- opacity: .3; } }
-
-.elementor-loading-title {
- color: #495157;
- text-align: center;
- text-transform: uppercase;
- margin-top: 30px;
- letter-spacing: 7px;
- font-size: 10px;
- -webkit-animation: load-title 1.5s linear infinite;
- animation: load-title 1.5s linear infinite; }
-
-@-webkit-keyframes load-title {
- 0% {
- opacity: 1; }
- 50% {
- opacity: .6; }
- 100% {
- opacity: 1; } }
-
-@keyframes load-title {
- 0% {
- opacity: 1; }
- 50% {
- opacity: .6; }
- 100% {
- opacity: 1; } }
-
#elementor-preview-loading {
display: -webkit-box;
display: -webkit-flex;
.select2-dropdown .select2-search__field {
outline: none; }
+.ui-resizable-n {
+ top: -5px; }
+
+.ui-resizable-e {
+ right: -5px; }
+
+.ui-resizable-s {
+ bottom: -5px; }
+
+.ui-resizable-w {
+ left: -5px; }
+
+.ui-resizable-ne {
+ top: -5px;
+ right: -5px; }
+
+.ui-resizable-nw {
+ top: -5px;
+ left: -5px; }
+
+.ui-resizable-se {
+ bottom: -5px;
+ right: -5px; }
+
+.ui-resizable-sw {
+ bottom: -5px;
+ left: -5px; }
+
+.ui-resizable-n, .ui-resizable-s {
+ left: 0;
+ height: 10px;
+ width: 100%;
+ cursor: ns-resize; }
+
+.ui-resizable-e, .ui-resizable-w {
+ top: 0;
+ height: 100%;
+ width: 10px;
+ cursor: ew-resize; }
+
+.ui-resizable-ne, .ui-resizable-nw, .ui-resizable-se, .ui-resizable-sw {
+ height: 15px;
+ width: 15px; }
+
+.ui-resizable-nw, .ui-resizable-se {
+ cursor: nwse-resize; }
+
+.ui-resizable-ne, .ui-resizable-sw {
+ cursor: nesw-resize; }
+
+.ui-resizable-handle {
+ position: absolute; }
+
+.ui-resizable-resizing {
+ pointer-events: none; }
+
#elementor-fatal-error-dialog button.dialog-ok {
color: #71d7f7; }
-#elementor-fatal-error-dialog .dialog-widget-header {
+#elementor-fatal-error-dialog .dialog-header {
font-size: 13px;
color: #6d7882; }
+.elementor-nerd-box {
+ padding: 30px;
+ text-align: center; }
+ .elementor-nerd-box-icon {
+ font-size: 52px;
+ color: #a4afb7; }
+ .elementor-nerd-box-title {
+ margin-top: 20px;
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 1.4; }
+ .elementor-nerd-box-message {
+ margin-top: 20px;
+ line-height: 1.8;
+ font-size: 11px; }
+ .elementor-nerd-box .elementor-button.elementor-nerd-box-link {
+ background-color: #fcb92c;
+ color: #ffffff;
+ padding: 7px 25px;
+ margin-top: 20px;
+ -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
+ -webkit-transition: .5s;
+ -o-transition: .5s;
+ transition: .5s; }
+ .elementor-nerd-box .elementor-button.elementor-nerd-box-link:hover {
+ background-color: #fdca5e; }
+
.eicon-nerd:hover:before {
content: '\e965'; }
.eicon-nerd:active:before {
content: '\e964'; }
+.elementor-loader-wrapper {
+ position: absolute;
+ width: 300px;
+ left: 50%;
+ top: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+
+.elementor-loader {
+ -webkit-border-radius: 7px;
+ border-radius: 7px;
+ padding: 40px;
+ height: 150px;
+ width: 150px;
+ background-color: rgba(255, 255, 255, 0.9);
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02);
+ box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); }
+
+.elementor-loader-boxes {
+ height: 100%;
+ width: 100%;
+ position: relative; }
+
+.elementor-loader-box {
+ position: absolute;
+ background-color: #e6e9ec;
+ -webkit-animation: load 1.8s linear infinite;
+ animation: load 1.8s linear infinite; }
+ .elementor-loader-box:nth-of-type(1) {
+ width: 20%;
+ height: 100%;
+ left: 0;
+ top: 0; }
+ .elementor-loader-box:not(:nth-of-type(1)) {
+ right: 0;
+ height: 20%;
+ width: 60%; }
+ .elementor-loader-box:nth-of-type(2) {
+ top: 0;
+ -webkit-animation-delay: -0.45s;
+ animation-delay: -0.45s; }
+ .elementor-loader-box:nth-of-type(3) {
+ top: 40%;
+ -webkit-animation-delay: -0.9s;
+ animation-delay: -0.9s; }
+ .elementor-loader-box:nth-of-type(4) {
+ bottom: 0;
+ -webkit-animation-delay: -1.35s;
+ animation-delay: -1.35s; }
+
+@-webkit-keyframes load {
+ 0% {
+ opacity: .3; }
+ 50% {
+ opacity: 1; }
+ 100% {
+ opacity: .3; } }
+
+@keyframes load {
+ 0% {
+ opacity: .3; }
+ 50% {
+ opacity: 1; }
+ 100% {
+ opacity: .3; } }
+
+.elementor-loading-title {
+ color: #a4afb7;
+ text-align: center;
+ text-transform: uppercase;
+ margin-top: 30px;
+ letter-spacing: 7px;
+ font-size: 10px;
+ width: 100%; }
+
.elementor-button {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
text-transform: uppercase;
outline: none;
border: none;
z-index: 100000; }
.elementor-panel {
+ position: fixed;
+ height: 100%;
+ top: 0;
+ bottom: 0;
+ overflow: visible;
+ background-color: #e6e9ec;
+ z-index: 1;
font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
font-size: 13px; }
+ .elementor-editor-active .elementor-panel {
+ right: 0; }
+ @media (max-width: 1439px) {
+ .elementor-editor-preview .elementor-panel {
+ right: -280px; } }
+ @media (min-width: 1440px) {
+ .elementor-editor-preview .elementor-panel {
+ right: -300px; } }
+ .elementor-editor-preview .elementor-panel > .ui-resizable-e, .elementor-editor-preview .elementor-panel > .ui-resizable-w {
+ display: none; }
+ @media (max-width: 1439px) {
+ .elementor-panel {
+ width: 280px; } }
+ @media (min-width: 1440px) {
+ .elementor-panel {
+ width: 300px; } }
+ .elementor-panel .ps-scrollbar-y-rail {
+ z-index: 2; }
.elementor-panel ::-moz-selection {
background: #5bc0de;
color: #ffffff; }
background: #5bc0de;
color: #ffffff; }
.elementor-panel a {
- color: #B7084E; }
+ color: #D30C5C; }
.elementor-panel h1,
.elementor-panel h2,
.elementor-panel h3,
border: 0; }
.elementor-panel :focus {
outline: 0; }
- .elementor-panel#elementor-panel {
- position: fixed;
- height: 100%;
- top: 0;
- bottom: 0;
- overflow: visible;
- background-color: #e6e9ec; }
- @media (max-width: 1439px) {
- .elementor-panel {
- width: 280px; } }
- @media (min-width: 1440px) {
- .elementor-panel {
- width: 300px; } }
- .elementor-panel > .ui-resizable-e, .elementor-panel > .ui-resizable-w {
- position: absolute;
- top: 0;
- height: 100%;
- width: 7px;
- left: -5px;
- cursor: ew-resize; }
- .elementor-panel #elementor-panel-inner {
- position: relative;
- height: 100%;
- -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
- box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); }
- .elementor-panel .elementor-panel-container {
- clear: both;
- padding-left: 15px;
- padding-right: 15px; }
- .elementor-panel #elementor-panel-content-wrapper {
- position: absolute;
- bottom: 40px;
- top: 40px;
- left: 0;
- width: 100%; }
.elementor-panel .elementor-panel-box {
margin-top: 10px;
background-color: #fff; }
font-style: italic;
line-height: 1.4;
color: #a4afb7; }
- .elementor-panel .elementor-panel-nerd-box {
- padding: 30px 20px;
- text-align: center; }
- .elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-icon {
- font-size: 52px;
- color: #a4afb7; }
- .elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-title {
- margin-top: 20px;
- font-size: 16px;
- font-weight: bold; }
- .elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-message {
- margin-top: 20px;
- line-height: 1.4;
- font-size: 11px; }
- .elementor-panel .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link {
- background-color: #fcb92c;
- color: #ffffff;
- padding: 7px 25px;
- margin-top: 20px;
- -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
- box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
- -webkit-transition: .5s;
- -o-transition: .5s;
- transition: .5s; }
- .elementor-panel .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link:hover {
- background-color: #fdca5e; }
.elementor-panel .elementor-controls-popover {
display: none;
position: absolute;
margin: -4px auto 5px;
padding-top: 15px;
width: 90%;
- z-index: 1;
+ z-index: 10000;
background-color: #fff; }
.elementor-panel .elementor-controls-popover:before {
content: '';
background-color: transparent; }
.elementor-panel .elementor-controls-popover div.elementor-control:before {
content: none; }
- .elementor-panel #elementor-panel-get-pro-elements .elementor-panel-nerd-box-message {
+ .elementor-panel #elementor-panel-get-pro-elements .elementor-nerd-box-message {
text-transform: uppercase; }
.elementor-panel .select2-container {
width: 100% !important; }
display: table;
height: 40px;
width: 100%;
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #fff; }
.elementor-panel #elementor-panel-header > * {
display: table-cell;
-webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); }
.elementor-panel .elementor-element:hover .icon, .elementor-panel .elementor-element:hover .title {
- color: #B7084E; }
+ color: #D30C5C; }
.elementor-panel .elementor-element .icon {
font-size: 28px;
padding-top: 15px;
-o-transition: left 1s;
transition: left 1s; }
.elementor-panel #elementor-panel-elements-search-input {
+ background-color: rgba(255, 255, 255, 0.7);
font-size: 11px;
- -webkit-border-radius: 0;
- border-radius: 0;
- padding: 10px 0 10px 27px;
+ padding: 10px 10px 10px 27px;
font-style: italic;
color: #a4afb7;
border: none;
-webkit-transition: all 1s;
-o-transition: all 1s;
transition: all 1s;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ appearance: none;
-webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
+ -moz-appearance: none; }
+ .elementor-panel #elementor-panel-elements-search-input + i {
+ left: 10px; }
.elementor-panel #elementor-panel-elements-search-input:focus {
- background-color: rgba(255, 255, 255, 0.7);
+ background-color: white;
padding-right: 15px; }
.elementor-panel #elementor-panel-elements-search-input:focus + i {
left: 15px; }
- .elementor-panel .elementor-panel-category:first-child .panel-elements-category-title {
- padding-top: 14px; }
- .elementor-panel .panel-elements-category-title-basic {
- display: none; }
- .elementor-panel .panel-elements-category-title {
- padding: 12px 15px;
- text-transform: uppercase;
- font-size: 11px; }
- .elementor-panel .panel-elements-category-items {
- overflow: hidden;
- padding: 0 5px; }
+ .elementor-panel #elementor-panel-elements-search-input::-webkit-input-placeholder {
+ color: #a4afb7; }
+ .elementor-panel #elementor-panel-elements-search-input:-ms-input-placeholder {
+ color: #a4afb7; }
+ .elementor-panel #elementor-panel-elements-search-input::-ms-input-placeholder {
+ color: #a4afb7; }
+ .elementor-panel #elementor-panel-elements-search-input::placeholder {
+ color: #a4afb7; }
+ .elementor-panel .elementor-panel-category {
+ position: relative; }
+ .elementor-panel .elementor-panel-category:first-child .elementor-panel-category-title {
+ padding-top: 14px; }
+ .elementor-panel .elementor-panel-category.elementor-active .elementor-panel-category-title:before {
+ -webkit-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ transform: rotate(-90deg); }
+ .elementor-panel .elementor-panel-category:not(.elementor-active):after {
+ content: '';
+ position: absolute;
+ left: 15px;
+ right: 15px;
+ bottom: 0;
+ height: 8px;
+ background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.03)), to(transparent));
+ background: -webkit-linear-gradient(rgba(0, 0, 0, 0.03), transparent);
+ background: -o-linear-gradient(rgba(0, 0, 0, 0.03), transparent);
+ background: linear-gradient(rgba(0, 0, 0, 0.03), transparent);
+ -webkit-transform: translateY(100%);
+ -ms-transform: translateY(100%);
+ transform: translateY(100%); }
+ .elementor-panel .elementor-panel-category-title {
+ margin: 0 15px;
+ padding: 20px 0;
+ position: relative;
+ text-transform: uppercase;
+ font-size: 11px;
+ cursor: pointer; }
+ .elementor-panel .elementor-panel-category-title:before {
+ content: "";
+ font-family: eicons;
+ position: absolute;
+ left: 0;
+ -webkit-transition: -webkit-transform .3s;
+ transition: -webkit-transform .3s;
+ -o-transition: transform .3s;
+ transition: transform .3s;
+ transition: transform .3s, -webkit-transform .3s; }
+ .elementor-panel .elementor-panel-category-items {
+ overflow: hidden;
+ padding: 0 5px;
+ display: none; }
.elementor-panel .elementor-panel-scheme-title {
padding: 10px 20px;
margin-top: 10px; }
background-color: #fff;
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); }
+ .elementor-panel .elementor-panel-scheme-buttons .elementor-button {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
+ font-size: 11px;
+ font-weight: 400; }
.elementor-panel .elementor-panel-scheme-button-wrapper {
display: table-cell;
vertical-align: middle;
@media (min-width: 1440px) {
.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)) {
margin-left: 19px; } }
- @media (max-width: 1439px) {
- [class*="wp-version-4-9"] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)), [class*="wp-version-5"] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)) {
- margin-left: 5px; } }
- @media (min-width: 1440px) {
- [class*="wp-version-4-9"] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)), [class*="wp-version-5"] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)) {
- margin-left: 12px; } }
.elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active) {
float: none; }
.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active {
- -webkit-transform: translateY(10px);
- -ms-transform: translateY(10px);
- transform: translateY(10px); }
+ top: 10px; }
+ @media (max-width: 1439px) {
+ .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active {
+ border-width: 0 4px 0 5px; } }
+ @media (min-width: 1440px) {
+ .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active {
+ border-width: 0 7px 0 5px; } }
@media (max-width: 1439px) {
.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result {
margin-right: 4px; } }
vertical-align: middle; }
.elementor-panel .elementor-panel-scheme-typography-item-value select, .elementor-panel .elementor-panel-scheme-typography-item-value input {
width: 100%; }
- .elementor-panel .elementor-panel-scheme-item .elementor-panel-heading:not(.elementor-open) + .elementor-panel-scheme-typography-items {
+ .elementor-panel .elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-scheme-typography-items {
display: none; }
.elementor-panel .elementor-panel-scheme-color-system-scheme {
margin-bottom: 10px; }
background-image: -webkit-linear-gradient(top, #f3f3f3, #fff);
background-image: -o-linear-gradient(top, #f3f3f3, #fff);
background-image: linear-gradient(to bottom, #f3f3f3, #fff);
- border-bottom: 3px solid #B7084E; }
+ border-bottom: 3px solid #D30C5C; }
.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a {
display: block;
text-align: center;
.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-title {
color: #6d7882; }
+#elementor-panel-inner {
+ position: relative;
+ height: 100%;
+ -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); }
+
+#elementor-panel-content-wrapper {
+ position: absolute;
+ bottom: 40px;
+ top: 40px;
+ left: 0;
+ width: 100%; }
+
+.elementor-panel-container {
+ clear: both;
+ padding-left: 15px;
+ padding-right: 15px; }
+
.media-modal.wp-core-ui input {
width: auto; }
transition: all ease-in-out .3s; }
.elementor-control a:hover {
border-bottom-color: inherit; }
+ .elementor-control .elementor-control-content {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column; }
.elementor-control.elementor-control-type-divider {
padding: 0;
margin-bottom: -1px;
border-color: #e6e9ec;
border-style: solid; }
.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick {
- border-top-width: 3px; }
+ border-top-width: 1px; }
.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default {
margin-right: 20px;
margin-left: 20px; }
- .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider):before {
- content: '';
- height: 1px;
- display: block;
- margin-bottom: 15px;
- background-color: #e6e9ec; }
+ .elementor-control.elementor-control-type-divider + .elementor-control:not(.elementor-control-type-section) {
+ padding-top: 15px; }
.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp {
margin-top: 15px; }
.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before {
+ content: '';
+ height: 1px;
+ display: block;
+ margin-bottom: 15px;
background-color: transparent; }
.elementor-control.elementor-control-separator-before {
padding-top: 15px; }
.elementor-control.elementor-control-separator-before:before {
content: '';
position: absolute;
- height: 3px;
+ height: 1px;
width: 100%;
top: 0;
left: 0;
.elementor-control.elementor-control-separator-after:after {
content: '';
position: absolute;
- height: 3px;
+ height: 1px;
width: 100%;
bottom: 0;
left: 0;
background-color: #d5dadf; }
- .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs {
+ .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs,
+ .elementor-control.elementor-control-separator-after + .elementor-control-separator-default {
padding-top: 15px; }
.elementor-control.elementor-control-deprecated {
color: #b01b1b; }
display: none; }
body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile {
display: none; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper {
+ position: relative; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper select {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ color: #495157;
+ font-size: 12px;
+ font-family: inherit;
+ font-weight: inherit;
+ font-style: inherit;
+ text-transform: inherit;
+ letter-spacing: inherit;
+ line-height: inherit;
+ -webkit-flex-basis: 100%;
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ padding-right: 5px;
+ padding-left: 20px;
+ cursor: pointer; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after {
+ font-family: eicons;
+ content: '\e955';
+ font-size: 12px;
+ position: absolute;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
+ left: 5px;
+ pointer-events: none; }
.elementor-control .select2-container {
width: 100% !important;
outline: none; }
.elementor-control .select2-container.select2-container--open .select2-selection--multiple, .elementor-control .select2-container.select2-container--focus .select2-selection--single,
.elementor-control .select2-container.select2-container--focus .select2-selection--multiple {
border-color: #a4afb7; }
+ .elementor-control .select2-container.select2-container--default .select2-selection {
+ -webkit-border-radius: 3px;
+ border-radius: 3px; }
.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear {
display: none; }
.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice {
border: none;
-webkit-border-radius: 0;
border-radius: 0; }
+ .elementor-control .select2-container.select2-container--default .select2-selection__rendered {
+ line-height: 27px; }
.elementor-control .select2-selection {
outline: none; }
.elementor-control .select2-selection--single {
height: 27px;
top: 0; }
+.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,
+.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before {
+ content: '\f0d7'; }
+
+.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,
+.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before {
+ content: ""; }
+
.elementor-panel-heading {
display: table;
table-layout: fixed;
width: 100%;
border-bottom: 1px solid #e6e9ec;
cursor: pointer; }
- .elementor-panel-heading:not(.elementor-open) .elementor-panel-heading-toggle .fa:before {
- content: ""; }
- .elementor-panel-heading.elementor-open .elementor-panel-heading-toggle .fa:before {
- content: '\f0d7'; }
.elementor-panel-heading > * {
display: table-cell;
vertical-align: middle; }
.elementor-choices input:not(:checked) + .elementor-choices-label {
background-color: #fff;
color: #a4afb7; }
+ .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) {
+ -webkit-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0; }
+ .elementor-choices input:not(:checked) + .elementor-choices-label:last-child {
+ -webkit-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px; }
.elementor-choices .elementor-choices-label {
display: table-cell;
vertical-align: middle;
-webkit-border-radius: 5px;
border-radius: 5px;
position: relative;
- width: 67%; }
+ width: 70%; }
.elementor-slider .ui-slider-handle {
height: 16px;
width: 16px;
cursor: pointer; }
.elementor-slider-input {
- width: 33%;
+ width: 30%;
float: left; }
.elementor-slider-input input {
- width: 80%;
- float: left; }
+ max-width: 80%;
+ float: left;
+ padding: 5px 5px; }
.elementor-units-choices {
-webkit-box-flex: 1;
.elementor-control-position .elementor-choices {
direction: ltr; }
+.elementor-control-direction-ltr {
+ direction: ltr; }
+
+.elementor-control-direction-rtl {
+ direction: rtl; }
+
.elementor-control-type-media .elementor-control-media {
padding: 7px;
border: 1px solid;
- height: 150px; }
+ height: 150px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out; }
.elementor-control-type-media .elementor-control-media:not(:hover) {
border-color: #d5dadf; }
.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button {
border-color: #a4afb7; }
.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button {
background-color: #a4afb7; }
- .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-image-area {
+ .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area {
display: none; }
.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button {
display: none; }
color: #fff;
font-size: 20px; }
-.elementor-control-type-media .elementor-control-media-image-area:not(:hover) .elementor-control-media-delete {
- display: none; }
-
-.elementor-control-type-media .elementor-control-media-image-area:hover .elementor-control-media-image {
- opacity: .5; }
+.elementor-control-type-media .elementor-control-media-area {
+ background-image: -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ background-image: -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ background-image: linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ -webkit-background-size: 16px 16px;
+ background-size: 16px 16px;
+ background-position: 0 0, 8px 8px;
+ background-color: #f6f6f6;
+ overflow: hidden; }
+ .elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ bottom: -30px; }
+ .elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image {
+ opacity: .9; }
+ .elementor-control-type-media .elementor-control-media-area i {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ color: rgba(255, 255, 255, 0.7);
+ font-size: 21px; }
.elementor-control-type-media .elementor-control-media-delete {
position: absolute;
font-size: 11px;
color: #fff;
background-color: #a4afb7;
- text-transform: uppercase; }
+ text-transform: uppercase;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+ -webkit-box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); }
.elementor-control-type-media .elementor-control-media-image {
height: 100%;
padding: 5px;
font-size: 12px; }
+.elementor-control-type-url .elementor-control-url-autocomplete-spinner {
+ display: none;
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ top: 7px;
+ right: 44px; }
+
.elementor-control-type-url .elementor-input {
direction: ltr; }
.elementor-control-type-url .elementor-input:not(:focus) + .elementor-control-url-more {
.elementor-control-type-url .elementor-input:focus + .elementor-control-url-more {
border-color: #a4afb7; }
+.elementor-autocomplete-menu {
+ position: absolute;
+ background: #fff;
+ color: #495157;
+ border: 1px solid #a4afb7;
+ margin: 0;
+ list-style: none;
+ padding: 4px 0;
+ height: auto;
+ width: 100%;
+ min-width: 260px;
+ max-width: 300px;
+ max-height: 200px;
+ overflow-y: auto;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: all .3s ease-in-out;
+ -o-transition: all .3s ease-in-out;
+ transition: all .3s ease-in-out;
+ cursor: default;
+ z-index: 1; }
+ .elementor-autocomplete-menu .ui-menu-item {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-align-self: baseline;
+ -ms-flex-item-align: baseline;
+ align-self: baseline;
+ padding: 5px 8px;
+ font-size: 12px;
+ width: 100%;
+ line-height: 1.2;
+ cursor: pointer; }
+ .elementor-autocomplete-menu .ui-menu-item.ui-state-hover, .elementor-autocomplete-menu .ui-menu-item.ui-state-active, .elementor-autocomplete-menu .ui-menu-item.ui-state-focus {
+ background: #e6e9ec; }
+ .elementor-autocomplete-menu .elementor-autocomplete-item-info {
+ font-size: 10px;
+ padding-top: 2px; }
+
.elementor-control-type-section {
margin-top: 10px;
padding: 0; }
- .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section) {
- padding-top: 15px; }
- .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before {
- display: none; }
+ .elementor-control-type-section.elementor-open {
+ padding-bottom: 15px; }
+ .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before {
+ display: none; }
.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-title {
width: 70%; }
border-radius: 3px; }
.elementor-control-type-wysiwyg #insert-media-button {
- margin-top: 7px;
height: initial;
- line-height: 1;
+ line-height: 24px;
font-size: 10px;
- padding: 3px 7px;
background-color: #e6e9ec; }
.elementor-control-type-wysiwyg .ed_button {
text-align: center;
width: 100%;
padding: 0;
- line-height: 30px;
+ line-height: 27px;
border-top: 1px solid #a4afb7;
border-bottom: 1px solid #a4afb7;
border-left: 1px solid #a4afb7;
width: auto;
height: 26px; }
+.elementor-group-control-css-filter .elementor-slider {
+ height: 6px;
+ -webkit-box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); }
+
+.elementor-group-control-css-filter .elementor-slider .ui-slider-handle {
+ -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.1);
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.1); }
+
+.elementor-group-control-css-filter .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper {
+ margin-top: 0;
+ margin-bottom: 5px; }
+
+.elementor-group-control-blur .elementor-slider {
+ background: url("../images/blur.png");
+ -webkit-background-size: cover;
+ background-size: cover;
+ background-position: center; }
+
+.elementor-group-control-contrast .elementor-slider {
+ background: url("../images/contrast.png");
+ -webkit-background-size: 100% 100%;
+ background-size: 100% 100%; }
+
+.elementor-group-control-hue .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(red), color-stop(orange), color-stop(yellow), color-stop(greenyellow), color-stop(limegreen), color-stop(deepskyblue), color-stop(blue), color-stop(95%, darkviolet));
+ background-image: -webkit-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%);
+ background-image: -o-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%);
+ background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); }
+
+.elementor-group-control-saturate .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(gray), to(red));
+ background-image: -webkit-linear-gradient(left, gray, red);
+ background-image: -o-linear-gradient(left, gray, red);
+ background-image: linear-gradient(to right, gray, red); }
+
+.elementor-group-control-brightness .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(black), to(white));
+ background-image: -webkit-linear-gradient(left, black, white);
+ background-image: -o-linear-gradient(left, black, white);
+ background-image: linear-gradient(to right, black, white); }
+
.wp-picker-container.wp-picker-active {
position: absolute;
z-index: 10000;
- top: 0;
+ top: -9px;
left: 7px;
background-color: #fff;
border: solid #fff;
.wp-picker-container:not(.wp-picker-active) .wp-color-result {
margin: 0; }
-.wp-picker-container.wp-picker-active {
- -webkit-transform: translateY(6px);
- -ms-transform: translateY(6px);
- transform: translateY(6px); }
- [class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active,
- [class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active {
- padding-top: 9px; }
- .wp-picker-container.wp-picker-active .wp-color-result {
- margin-right: 3px; }
+[class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active,
+[class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active {
+ padding-top: 9px; }
+
+.wp-picker-container.wp-picker-active .wp-color-result {
+ margin-right: 3px; }
.wp-picker-container input[type="text"].wp-color-picker {
float: left;
box-shadow: -3px 1px 5px rgba(0, 0, 0, 0.1);
cursor: pointer; }
#elementor-mode-switcher:hover {
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #FFFFFF; }
body.elementor-editor-preview #elementor-mode-switcher {
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #FFFFFF; }
#elementor-mode-switcher-inner, #elementor-mode-switcher-preview {
.elementor-revision-item__wrapper.current {
font-weight: bold; }
.elementor-revision-item__wrapper .elementor-revision-item__tools-current {
- color: #B7084E; }
+ color: #D30C5C; }
.elementor-revision-item:hover:not(.elementor-revision-current-preview) {
background-color: rgba(230, 233, 236, 0.3); }
border-left: none; }
.elementor-templates-modal .dialog-widget-content {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
background-color: #f1f3f5;
width: 100%; }
@media (max-width: 1439px) {
.elementor-templates-modal .dialog-widget-content {
max-width: 1200px; } }
-.elementor-templates-modal .dialog-widget-header {
+.elementor-templates-modal .dialog-header {
padding: 0;
background-color: #fff;
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
overflow: auto;
padding: 25px 30px 30px; }
+.elementor-templates-modal .dialog-content {
+ height: 100%; }
+
+.elementor-templates-modal .dialog-loading {
+ display: none; }
+
.elementor-templates-modal__header {
display: -webkit-box;
display: -webkit-flex;
align-items: center; }
.elementor-templates-modal__header__logo__icon-wrapper {
padding: 4px 7px 6px;
- background-image: -webkit-linear-gradient(225deg, #EF295A, #434363);
- background-image: -o-linear-gradient(225deg, #EF295A, #434363);
- background-image: linear-gradient(-135deg, #EF295A, #434363);
+ background-image: -webkit-linear-gradient(225deg, #f2295b, #434363);
+ background-image: -o-linear-gradient(225deg, #f2295b, #434363);
+ background-image: linear-gradient(-135deg, #f2295b, #434363);
-webkit-border-radius: 2px;
border-radius: 2px;
margin-left: 10px; }
cursor: pointer; }
.elementor-templates-modal__header__item > i:not(:hover) {
color: #a4afb7; }
- .elementor-templates-modal__header__close-modal {
+ .elementor-templates-modal__header__close--normal {
width: 45px;
border-right: 1px solid #e6e9ec; }
- .elementor-templates-modal__header__close-modal i {
+ .elementor-templates-modal__header__close--normal i {
font-size: 18px; }
+ .elementor-templates-modal__header__close--skip {
+ padding: 10px;
+ padding-right: 20px;
+ margin-left: 10px;
+ color: #fff;
+ background-color: #a4afb7;
+ font-size: 11px;
+ font-weight: normal;
+ line-height: 1;
+ text-transform: uppercase;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ cursor: pointer; }
+ .elementor-templates-modal__header__close--skip > i {
+ font-size: inherit;
+ padding-right: 10px;
+ margin-right: 15px;
+ border-right: 1px solid; }
+ .elementor-templates-modal__header__close--skip > i:not(:hover) {
+ color: #fff; }
#elementor-template-library-modal a.elementor-template-library-blank-footer-link {
font-style: normal;
text-decoration: underline;
color: #39b54a; }
#elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover {
- font-weight: 500; }
-
-#elementor-template-library-modal .dialog-lightbox-content {
- height: 100%; }
-
-#elementor-template-library-modal .dialog-lightbox-loading {
- display: none; }
+ color: #2d8e3a; }
#elementor-template-library-header-menu {
text-align: center;
#elementor-template-library-header-preview-back i:before {
content: ""; }
-#elementor-template-library-loading .elementor-loading-title {
- color: #a4afb7; }
-
-#elementor-template-library-loading .elementor-loader-box {
- background-color: #d5dadf; }
-
#elementor-template-library-templates {
padding: 0 15px; }
#elementor-template-library-templates[data-template-source="local"] #elementor-template-library-templates-container {
-webkit-box-shadow: 1px 1px 20px 0 rgba(0, 0, 0, 0.03);
box-shadow: 1px 1px 20px 0 rgba(0, 0, 0, 0.03);
- margin-top: 10px; }
+ margin-top: 10px;
+ margin-bottom: 45px; }
#elementor-template-library-templates[data-template-source="local"] .elementor-template-library-order-input:checked + .elementor-template-library-order-label {
color: #6d7882; }
#elementor-template-library-templates[data-template-source="remote"] #elementor-template-library-templates-container {
#elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label {
color: #495157; }
#elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label i:after {
- color: #B7084E;
+ color: #D30C5C;
content: '\f004'; }
#elementor-template-library-filter-my-favorites-label {
#elementor-template-library-filter-my-favorites-label:hover {
color: #556068; }
#elementor-template-library-filter-my-favorites-label:hover i:after {
- color: #B7084E; }
+ color: #D30C5C; }
#elementor-template-library-filter-my-favorites-label i {
padding-left: 5px; }
#elementor-template-library-filter-my-favorites-label i:after {
#elementor-template-library-filter-text::-webkit-input-placeholder {
font-weight: 300;
color: #c2cbd2; }
- #elementor-template-library-filter-text::-moz-placeholder {
- font-weight: 300;
- color: #c2cbd2; }
#elementor-template-library-filter-text:-ms-input-placeholder {
font-weight: 300;
color: #c2cbd2; }
border-color: #c2cbd2; }
#elementor-template-library-filter-text:focus::-webkit-input-placeholder {
color: #a4afb7; }
- #elementor-template-library-filter-text:focus::-moz-placeholder {
- color: #a4afb7; }
#elementor-template-library-filter-text:focus:-ms-input-placeholder {
color: #a4afb7; }
#elementor-template-library-filter-text:focus::-ms-input-placeholder {
text-transform: uppercase;
top: 5px;
left: 5px;
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #d5dadf;
padding: 2px 4px 0;
font-size: 9px;
display: none; }
.elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked + .elementor-template-library-template-favorite-label i:before {
content: '\f004';
- color: #B7084E; }
+ color: #D30C5C; }
.elementor-template-library-template-remote .elementor-template-library-template-favorite-label {
cursor: pointer; }
.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i {
- color: #B7084E; }
+ color: #D30C5C; }
@media (max-width: 1439px) {
.elementor-template-library-template-page {
border-radius: 3px 3px 0 0; }
.elementor-template-library-template-local:last-child {
-webkit-border-radius: 0 0 3px 3px;
- border-radius: 0 0 3px 3px;
- margin-bottom: 45px; }
+ border-radius: 0 0 3px 3px; }
.elementor-template-library-template-local .elementor-template-library-template-name {
font-weight: 500; }
.elementor-template-library-template-local .elementor-template-library-template-name,
border: none; }
#elementor-template-library-save-template-name::-webkit-input-placeholder {
color: #a4afb7; }
- #elementor-template-library-save-template-name::-moz-placeholder {
- color: #a4afb7; }
#elementor-template-library-save-template-name:-ms-input-placeholder {
color: #a4afb7; }
#elementor-template-library-save-template-name::-ms-input-placeholder {
#elementor-template-library-save-template-submit {
width: 150px;
-webkit-border-radius: 3px 0 0 3px;
- border-radius: 3px 0 0 3px;
- font-weight: 500; }
+ border-radius: 3px 0 0 3px; }
#elementor-template-library-save-template-submit:hover {
-webkit-box-shadow: none;
box-shadow: none; }
#elementor-template-library-import-form-label {
margin-top: 20px;
padding: 15px 35px;
- font-size: 16px;
display: inline-block; }
#elementor-template-library-import-form-input {
display: none; }
-ms-transform: translateX(-50%);
transform: translateX(-50%);
color: #a4afb7;
- font-size: 16px;
font-style: italic; }
@media (max-height: 700px) {
.elementor-template-library-blank-footer {
background-color: #fff;
border: 1px solid #a4afb7;
-webkit-border-radius: 3px;
- border-radius: 3px; }
+ border-radius: 3px;
+ z-index: 1; }
.elementor-tags-list__group-title {
color: #495157;
font-weight: bold;
width: 260px;
background-color: #e6e9ec;
-webkit-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3);
- box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); }
+ box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3);
+ z-index: 1; }
.elementor-tag-settings-popup:before {
content: '';
position: absolute;
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1; }
- .elementor-label-inline .elementor-control-dynamic-switcher-wrapper {
+ .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-dynamic-switcher-wrapper {
width: 100%;
padding-bottom: 10px; }
cursor: pointer; }
#elementor-toast .dialog-button:last-child {
margin-left: 0; }
+
+.elementor-context-menu {
+ position: absolute;
+ width: 200px;
+ background-color: #fff;
+ border: 1px solid #e6e9ec;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.09);
+ box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.09);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ z-index: 3; }
+ .elementor-context-menu-list__group {
+ padding: 5px 0; }
+ .elementor-context-menu-list__group:not(:last-child) {
+ border-bottom: 1px solid #e6e9ec; }
+ .elementor-context-menu-list__item {
+ padding: 5px 10px;
+ padding-left: 20px;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ cursor: pointer; }
+ .elementor-context-menu-list__item--disabled {
+ cursor: default;
+ color: #d5dadf; }
+ .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover {
+ background-color: #71d7f7; }
+ .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover > * {
+ color: #fff; }
+ .elementor-context-menu-list__item__icon {
+ width: 20px;
+ color: #c2cbd2; }
+ .elementor-context-menu-list__item__title {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1; }
+ .elementor-context-menu-list__item__shortcut {
+ color: #d5dadf; }
+ .elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover {
+ background-color: #d72b3f; }
+ .elementor-context-menu .eicon-pro-icon {
+ color: #fcb92c; }
+
+.elementor-introduction {
+ position: absolute;
+ width: 270px;
+ padding: 30px 20px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.07);
+ box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.07);
+ text-align: center; }
+ .elementor-introduction:before {
+ content: '';
+ position: absolute;
+ border: solid transparent;
+ border-width: 7px 5px;
+ border-bottom-color: #fff;
+ top: -14px;
+ left: 50%;
+ -webkit-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ transform: translateX(-50%); }
+ .elementor-introduction .dialog-header {
+ color: #6d7882;
+ font-size: 16px; }
+ .elementor-introduction .dialog-message {
+ font-size: 13px;
+ line-height: 1.6;
+ margin-top: 10px;
+ color: #a4afb7; }
+ .elementor-introduction .dialog-buttons-wrapper {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin-top: 25px; }
+ .elementor-introduction .dialog-button {
+ font-size: 11px; }
+ .elementor-introduction .dialog-ok {
+ padding: 7px 27px;
+ text-transform: capitalize; }
+ .elementor-introduction .dialog-learn-more {
+ color: #39b54a;
+ margin-left: 15px;
+ cursor: pointer; }
+
+#elementor-navigator {
+ position: fixed;
+ top: 100px;
+ width: 240px;
+ height: 339px;
+ left: 30px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ overflow: hidden;
+ z-index: 2;
+ display: none; }
+ body.elementor-navigator-docked #elementor-navigator {
+ top: 0;
+ left: 0;
+ height: 100%; }
+ body:not(.elementor-navigator-docked) #elementor-navigator {
+ -webkit-border-radius: 5px;
+ border-radius: 5px; }
+ #elementor-navigator__inner {
+ height: 100%;
+ background-color: #e6e9ec; }
+ #elementor-navigator__header {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 12px 10px;
+ background-color: #fff;
+ border-bottom: 1px solid #e6e9ec;
+ cursor: move; }
+ #elementor-navigator__close, #elementor-navigator__toggle-all {
+ -webkit-transition: color .5s;
+ -o-transition: color .5s;
+ transition: color .5s;
+ cursor: pointer; }
+ #elementor-navigator__close:not(:hover), #elementor-navigator__toggle-all:not(:hover) {
+ color: #a4afb7; }
+ #elementor-navigator__toggle-all {
+ font-size: 13px; }
+ #elementor-navigator__close {
+ font-size: 11px; }
+ #elementor-navigator__elements {
+ height: -webkit-calc(100% - 49px);
+ height: calc(100% - 49px);
+ overflow: auto;
+ position: relative; }
+ .elementor-navigator-docked #elementor-navigator__elements {
+ height: -webkit-calc(100% - 35px);
+ height: calc(100% - 35px); }
+ #elementor-navigator__footer {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ bottom: 0;
+ text-align: center;
+ background-color: #fff;
+ border-top: 1px solid #e6e9ec;
+ color: #a4afb7; }
+ .elementor-navigator-docked #elementor-navigator__footer {
+ display: none; }
+
+.elementor-navigator__item {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 32px;
+ padding-left: 4px;
+ font-size: 12px;
+ border-bottom: 1px solid #e6e9ec;
+ cursor: pointer; }
+ .elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i {
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg); }
+ .elementor-navigator__item > * {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .elementor-navigator__item + .elementor-navigator__elements {
+ display: none; }
+
+.elementor-navigator__elements .elementor-empty-view {
+ padding: 10px;
+ border-bottom: 1px solid #e6e9ec; }
+ .elementor-navigator__elements .elementor-empty-view__title {
+ margin-right: 23px;
+ color: #c2cbd2;
+ font-size: 10px;
+ font-style: italic; }
+
+.elementor-navigator__elements .ui-sortable-helper {
+ background-color: #fff;
+ -webkit-box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1);
+ -webkit-transform: rotate(4deg);
+ -ms-transform: rotate(4deg);
+ transform: rotate(4deg);
+ border: 1px solid #e6e9ec;
+ pointer-events: none; }
+
+.elementor-navigator__elements .ui-sortable-placeholder {
+ background-color: #f1f3f5; }
+
+.elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view {
+ border-top: 2px solid #71d7f7; }
+ .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view .elementor-empty-view__title {
+ display: none; }
+ .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view + .ui-sortable-placeholder {
+ display: none; }
+
+.elementor-navigator__element:not(.elementor-navigator__element--has-children) .elementor-navigator__element__list-toggle {
+ visibility: hidden; }
+
+.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item .elementor-navigator__element__toggle {
+ color: #71d7f7; }
+
+.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item:not(:hover) .elementor-navigator__element__toggle {
+ display: none; }
+
+.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item.elementor-editing {
+ background-color: #71d7f7; }
+ .elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item.elementor-editing > * {
+ color: #fff; }
+
+.elementor-navigator__element__list-toggle {
+ margin-left: 7px;
+ -webkit-transition: -webkit-transform .3s;
+ transition: -webkit-transform .3s;
+ -o-transition: transform .3s;
+ transition: transform .3s;
+ transition: transform .3s, -webkit-transform .3s;
+ color: #a4afb7; }
+
+.elementor-navigator__element__element-type {
+ margin-left: 8px; }
+
+.elementor-navigator__element__title {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ overflow: hidden; }
+ .elementor-navigator__element__title__text {
+ white-space: nowrap;
+ -webkit-user-select: text; }
+ .elementor-navigator__element__title__text[contenteditable="true"] {
+ outline: none;
+ color: #6d7882;
+ background-color: #fff;
+ padding: 2px 3px;
+ -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); }
+ .elementor-navigator__element__title__text:not([contenteditable="true"]) {
+ overflow: hidden;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis; }
+
+.elementor-navigator__element__toggle {
+ text-align: left;
+ font-size: 13px;
+ padding: 0 5px; }
+
+.elementor-navigator__element--hidden .elementor-navigator__element__title,
+.elementor-navigator__element--hidden .elementor-navigator__element__toggle {
+ opacity: .5; }
+
+.elementor-navigator__element-column {
+ background-color: #fafbfb; }
+ .elementor-navigator__element-column > .elementor-navigator__item .elementor-navigator__element__element-type {
+ color: #a4afb7; }
+
+.elementor-navigator__element-section {
+ background-color: #fff; }
/*# sourceMappingURL=editor-rtl.css.map */
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-@charset "UTF-8";.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-message{padding:0 20px;min-height:50px}.dialog-type-lightbox .dialog-message,.dialog-type-lightbox .dialog-widget-header{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-widget-header{padding:20px 0;font-weight:500}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-widget-header,.dialog-lightbox-widget .dialog-widget-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-left:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}*,:after,:before{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}body,html{height:100%}html{background-color:#f1f1f1}iframe,img{border:0 none}li{list-style:none}a,body{text-decoration:none}body{color:#6d7882;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px;font-weight:400;line-height:1;text-transform:none;overflow:hidden}body a{color:#71d7f7}body a:hover{color:#b7084e}body.elementor-editor-active #elementor-preview{left:0}@media (max-width:1439px){body.elementor-editor-active #elementor-preview{right:280px}}@media (min-width:1440px){body.elementor-editor-active #elementor-preview{right:300px}}body.elementor-editor-active #elementor-panel{right:0}body.elementor-editor-active #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-editor-preview #elementor-preview{left:0}@media (max-width:1439px){body.elementor-editor-preview #elementor-panel{right:-280px}}@media (min-width:1440px){body.elementor-editor-preview #elementor-panel{right:-300px}}body.elementor-editor-preview #elementor-panel>.ui-resizable-e,body.elementor-editor-preview #elementor-panel>.ui-resizable-w{display:none}body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before{content:""}#elementor-panel:not(.ui-resizable-resizing),#elementor-preview:not(.ui-resizable-resizing){-webkit-transition:right .5s,width .5s;-o-transition:right .5s,width .5s;transition:right .5s,width .5s}#elementor-panel .ps-scrollbar-y-rail,#elementor-preview .ps-scrollbar-y-rail{z-index:2}#elementor-loading{position:fixed;top:0;left:0;bottom:0;right:0;background:#f1f3f5;z-index:4}.elementor-loader-wrapper{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);width:100px}.elementor-loader-wrapper .elementor-loader{height:100px;position:relative}.elementor-loader-wrapper .elementor-loader-box{background-color:#495157;position:absolute;-webkit-animation:load 1.8s linear infinite;animation:load 1.8s linear infinite}.elementor-loader-wrapper .elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}.elementor-loader-wrapper .elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}.elementor-loader-wrapper .elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}.elementor-loader-wrapper .elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}.elementor-loader-wrapper .elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}.elementor-loading-title{color:#495157;text-align:center;text-transform:uppercase;margin-top:30px;letter-spacing:7px;font-size:10px;-webkit-animation:load-title 1.5s linear infinite;animation:load-title 1.5s linear infinite}@-webkit-keyframes load-title{0%{opacity:1}50%{opacity:.6}to{opacity:1}}@keyframes load-title{0%{opacity:1}50%{opacity:.6}to{opacity:1}}#elementor-preview-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fff}#elementor-preview-loading i{color:#d5dadf;font-size:50px}.select2-container{z-index:4}.select2-dropdown{border-color:#a4afb7}.select2-dropdown .select2-search__field{outline:none}#elementor-fatal-error-dialog button.dialog-ok{color:#71d7f7}#elementor-fatal-error-dialog .dialog-widget-header{font-size:13px;color:#6d7882}.eicon-nerd:hover:before{content:"\e965"}.eicon-nerd:active:before{content:"\e964"}.elementor-button{text-transform:uppercase;outline:none;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-left:10px}.elementor-input-style,input,select,textarea{-webkit-border-radius:3px;border-radius:3px;font-size:12px;width:100%;background:none;-webkit-box-shadow:none;box-shadow:none;color:#495157;border:1px solid;outline:none}.elementor-input-style:not(:focus),input:not(:focus),select:not(:focus),textarea:not(:focus){border-color:#d5dadf}.elementor-input-style:focus,input:focus,select:focus,textarea:focus{border-color:#a4afb7}.elementor-error input,.elementor-error select,.elementor-error textarea{border-color:#b01b1b}.elementor-input-style,input,textarea{padding:5px 8px}.elementor-input-style,textarea{resize:vertical}input[type=checkbox],input[type=radio]{border:1px solid #d5dadf;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-transition:border-color .05s ease-in-out;-o-transition:.05s border-color ease-in-out;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=radio]:focus{border-color:#a4afb7}input[disabled]{background-color:#e6e9ec;cursor:not-allowed;opacity:1}select{height:27px}.ps-container{-ms-touch-action:none;overflow:hidden!important}.ps-container.ps-active-x>.ps-scrollbar-x-rail,.ps-container.ps-active-y>.ps-scrollbar-y-rail{display:block}.ps-container.ps-in-scrolling{pointer-events:none}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container>.ps-scrollbar-x-rail{display:none;position:absolute;-webkit-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;bottom:3px;height:8px}.ps-container>.ps-scrollbar-x-rail>.ps-scrollbar-x{position:absolute;background-color:#aaa;-webkit-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;bottom:0;height:8px}.ps-container>.ps-scrollbar-y-rail{display:none;position:absolute;-webkit-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;right:3px;width:8px}.ps-container>.ps-scrollbar-y-rail>.ps-scrollbar-y{position:absolute;background-color:#aaa;-webkit-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;right:0;width:8px}.ps-container:hover.ps-in-scrolling{pointer-events:none}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container:hover>.ps-scrollbar-x-rail,.ps-container:hover>.ps-scrollbar-y-rail{opacity:.6}.ps-container:hover>.ps-scrollbar-x-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x{background-color:#999}.ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y{background-color:#999}#nprogress{pointer-events:none}#nprogress .bar{background:#39b54a;position:fixed;z-index:3;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;-webkit-box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;opacity:1;-webkit-transform:rotate(3deg) translateY(-4px);-ms-transform:rotate(3deg) translateY(-4px);transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:none;position:fixed;z-index:3;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;box-sizing:border-box;border:2px solid transparent;border-top-color:#39b54a;border-left-color:#39b54a;-webkit-border-radius:50%;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}#nprogress .bar,#nprogress .spinner{z-index:6}.elementor-panel{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px}.elementor-panel ::-moz-selection{background:#5bc0de;color:#fff}.elementor-panel ::selection{background:#5bc0de;color:#fff}.elementor-panel a{color:#b7084e}.elementor-panel h1,.elementor-panel h2,.elementor-panel h3,.elementor-panel h4,.elementor-panel h5,.elementor-panel h6{font-size:100%;font-weight:400}.elementor-panel abbr,.elementor-panel acronym{border:0;font-variant:normal}.elementor-panel sup{vertical-align:text-top}.elementor-panel sub{vertical-align:text-bottom}.elementor-panel img{max-width:100%;height:auto;border:0}.elementor-panel ::-moz-focus-inner{padding:0;border:0}.elementor-panel :focus{outline:0}.elementor-panel#elementor-panel{position:fixed;height:100%;top:0;bottom:0;overflow:visible;background-color:#e6e9ec}@media (max-width:1439px){.elementor-panel{width:280px}}@media (min-width:1440px){.elementor-panel{width:300px}}.elementor-panel>.ui-resizable-e,.elementor-panel>.ui-resizable-w{position:absolute;top:0;height:100%;width:7px;left:-5px;cursor:ew-resize}.elementor-panel #elementor-panel-inner{position:relative;height:100%;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-shadow:0 0 5px 0 rgba(0,0,0,.2)}.elementor-panel .elementor-panel-container{clear:both;padding-left:15px;padding-right:15px}.elementor-panel #elementor-panel-content-wrapper{position:absolute;bottom:40px;top:40px;left:0;width:100%}.elementor-panel .elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel .elementor-panel-box-content{padding:20px 20px 10px}.elementor-panel .elementor-control-title{font-size:12px}.elementor-panel .elementor-button{display:inline-block}.elementor-panel .elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:right}.elementor-panel .elementor-panel-alert a{color:inherit}.elementor-panel .elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel .elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel .elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel .elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-panel .elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-panel .elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-panel .elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-panel .elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-panel .elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-panel .elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-panel .elementor-control-field-description,.elementor-panel .elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-panel .elementor-panel-nerd-box{padding:30px 20px;text-align:center}.elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-icon{font-size:52px;color:#a4afb7}.elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-title{margin-top:20px;font-size:16px;font-weight:700}.elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-message{margin-top:20px;line-height:1.4;font-size:11px}.elementor-panel .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link{background-color:#fcb92c;color:#fff;padding:7px 25px;margin-top:20px;-webkit-box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-panel .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link:hover{background-color:#fdca5e}.elementor-panel .elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:1;background-color:#fff}.elementor-panel .elementor-controls-popover:before{content:"";position:absolute;top:-16px;left:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-panel .elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-panel .elementor-controls-popover div.elementor-control:before{content:none}.elementor-panel #elementor-panel-get-pro-elements .elementor-panel-nerd-box-message{text-transform:uppercase}.elementor-panel .select2-container{width:100%!important}.elementor-panel #elementor-controls .pojo-widget-button-collapse{display:none}.elementor-panel #elementor-panel-header{display:table;height:40px;width:100%;background-color:#b7084e;color:#fff}.elementor-panel #elementor-panel-header>*{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-header-button{width:40px}.elementor-panel .elementor-header-button .elementor-icon{cursor:pointer;display:block;font-size:19px;height:40px;line-height:40px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar{font-size:18px}.elementor-panel .elementor-header-button .elementor-icon:hover{color:#d5dadf}.elementor-panel #elementor-panel-header-title{font-size:15px}.elementor-panel #elementor-panel-header-title img{width:66px}.elementor-panel #elementor-panel-elements-navigation .elementor-panel-navigation-tab{text-align:center;padding:10px 0;font-size:11px;text-transform:uppercase;cursor:pointer}.elementor-panel #elementor-panel-elements{overflow:hidden;padding:0 5px}.elementor-panel .elementor-element-wrapper{float:right;width:50%;padding:5px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-panel .elementor-element{-webkit-border-radius:3px;border-radius:3px;background-color:#fff;cursor:move}.elementor-panel .elementor-element:hover{-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2)}.elementor-panel .elementor-element:hover .icon,.elementor-panel .elementor-element:hover .title{color:#b7084e}.elementor-panel .elementor-element .icon{font-size:28px;padding-top:15px;color:#556068}.elementor-panel .elementor-element .elementor-element-title-wrapper{display:table;width:100%}.elementor-panel .elementor-element .title{font-size:11px;color:#556068;display:table-cell;vertical-align:middle;height:40px}.elementor-panel #elementor-panel-elements-search-wrapper{position:relative;margin:10px 10px 5px}.elementor-panel #elementor-panel-elements-search-wrapper i{position:absolute;left:0;top:50%;color:#a4afb7;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:left 1s;-o-transition:left 1s;transition:left 1s}.elementor-panel #elementor-panel-elements-search-input{font-size:11px;-webkit-border-radius:0;border-radius:0;padding:10px 0 10px 27px;font-style:italic;color:#a4afb7;border:none;-webkit-transition:all 1s;-o-transition:all 1s;transition:all 1s;-webkit-appearance:none;-moz-appearance:none;appearance:none}.elementor-panel #elementor-panel-elements-search-input:focus{background-color:hsla(0,0%,100%,.7);padding-right:15px}.elementor-panel #elementor-panel-elements-search-input:focus+i{left:15px}.elementor-panel .elementor-panel-category:first-child .panel-elements-category-title{padding-top:14px}.elementor-panel .panel-elements-category-title-basic{display:none}.elementor-panel .panel-elements-category-title{padding:12px 15px;text-transform:uppercase;font-size:11px}.elementor-panel .panel-elements-category-items{overflow:hidden;padding:0 5px}.elementor-panel .elementor-panel-scheme-title{padding:10px 20px;margin-top:10px}.elementor-panel .elementor-panel-scheme-description{padding:20px 20px 0}.elementor-panel .elementor-panel-scheme-buttons{padding:0 20px;display:table;table-layout:fixed;width:100%;height:40px;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1)}.elementor-panel .elementor-panel-scheme-button-wrapper{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-panel-scheme-button-wrapper:first-child{text-align:right}.elementor-panel .elementor-panel-scheme-button-wrapper:last-child{text-align:left}.elementor-panel .elementor-panel-scheme-save .elementor-button{padding:6px 18px}.elementor-panel .elementor-panel-scheme-discard .elementor-button,.elementor-panel .elementor-panel-scheme-reset .elementor-button{color:#a4afb7;background:none}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-items{position:relative}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item{display:inline-block}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-left:13px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-left:19px}}@media (max-width:1439px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)),[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-left:5px}}@media (min-width:1440px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)),[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-left:12px}}.elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active){float:none}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:4px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:6px}}@media (max-width:1439px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:10px}}@media (min-width:1440px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:9px}}.elementor-panel .elementor-panel-scheme-color-title{text-align:center;text-transform:uppercase;margin:10px 0;color:#c2cbd2;font-size:8px}.elementor-panel .elementor-panel-scheme-typography-item{display:table;table-layout:fixed;width:100%;margin-bottom:15px}.elementor-panel .elementor-panel-scheme-typography-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-scheme-typography-item-value input,.elementor-panel .elementor-panel-scheme-typography-item-value select{width:100%}.elementor-panel .elementor-panel-scheme-item .elementor-panel-heading:not(.elementor-open)+.elementor-panel-scheme-typography-items{display:none}.elementor-panel .elementor-panel-scheme-color-system-scheme{margin-bottom:10px}.elementor-panel .elementor-panel-scheme-color-system-scheme .elementor-title{font-size:11px;color:#a4afb7;font-style:italic;margin-top:5px}.elementor-panel .elementor-panel-scheme-color-system-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;overflow:hidden;padding:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf;cursor:pointer}.elementor-panel .elementor-panel-scheme-color-system-items:hover{border:1px solid #a4afb7}.elementor-panel .elementor-panel-scheme-color-system-item{height:20px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-panel #elementor-panel-schemes-disabled a:hover{text-decoration:underline}.elementor-panel #elementor-panel-page-menu{padding:25px 15px}.elementor-panel #elementor-panel-exit-to-dashboard{width:100%;padding:15px 20px;font-size:12px;background-color:#0085ba;color:#fff;text-transform:uppercase;text-align:right;font-weight:400;border:none}.elementor-panel #elementor-panel-exit-to-dashboard:hover{background-color:#0073a1;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-panel #elementor-panel-exit-to-dashboard:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-panel #elementor-panel-exit-to-dashboard:visited{color:#fff}.elementor-panel #elementor-panel-exit-to-dashboard i{margin-left:15px}.elementor-panel .elementor-panel-menu-group-title{text-transform:uppercase;font-size:11px}.elementor-panel .elementor-panel-menu-items{margin:15px 0 25px;-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-menu-item{display:table;width:100%;height:40px;cursor:pointer;margin-bottom:1px;background-color:#fff}.elementor-panel .elementor-panel-menu-item:hover{background-color:hsla(0,0%,100%,.8)}.elementor-panel .elementor-panel-menu-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-menu-item-icon{text-align:center;width:50px;color:#a4afb7}.elementor-panel .elementor-panel-menu-item-title{font-weight:500}.elementor-panel .elementor-panel-menu-item-title>span{color:#39b54a}.elementor-panel .elementor-control.elementor-control-clear_page{background-color:transparent}.elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-panel .elementor-panel-navigation{background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);display:table;table-layout:fixed;width:100%}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab{display:table-cell}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(180deg,#f3f3f3,#fff);border-bottom:3px solid #b7084e}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a{display:block;text-align:center;padding:12px 0 8px;font-size:10px;color:#6d7882}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a:before{font-family:FontAwesome;font-size:16px;display:block;margin-bottom:6px}.elementor-panel .elementor-tab-control-content a:before{content:"\f040"}.elementor-panel .elementor-tab-control-style a:before{content:"\f042"}.elementor-panel .elementor-tab-control-advanced a:before,.elementor-panel .elementor-tab-control-general_style a:before,.elementor-panel .elementor-tab-control-settings a:before{content:"\f013"}.elementor-panel .elementor-tab-control-responsive a:before{content:"\f10a"}.elementor-panel .elementor-tab-control-column a:before,.elementor-panel .elementor-tab-control-layout a:before{content:"\f0db"}.elementor-panel .elementor-tab-control-lightbox a:before{content:"\f2d2"}.elementor-panel #elementor-panel-footer{position:absolute;bottom:0;left:0;right:0;height:40px;background-color:#495157}.elementor-panel #elementor-panel-footer-tools{display:table;table-layout:fixed;width:100%;height:100%}.elementor-panel .elementor-panel-footer-tool{display:table-cell;vertical-align:middle;text-align:center;cursor:pointer;color:#a4afb7;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update{border-left:1px solid #2d8739;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update i{margin-left:5px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options{float:right;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i{margin:auto}.elementor-panel .elementor-panel-footer-tool.elementor-open{color:#fff}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open):hover{color:#d5dadf}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open) .elementor-panel-footer-sub-menu-wrapper{display:none}.elementor-panel .elementor-panel-footer-sub-menu-wrapper{position:absolute;bottom:100%;left:0;width:100%;background-color:#556068;padding:10px;-webkit-box-shadow:-2px -5px 8px rgba(0,0,0,.1);box-shadow:-2px -5px 8px rgba(0,0,0,.1);cursor:default;z-index:5}.elementor-panel .elementor-panel-footer-sub-menu{-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-footer-sub-menu-item{background-color:#495157;display:table;table-layout:fixed;width:100%;cursor:pointer}.elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child){margin-bottom:1px}.elementor-panel .elementor-panel-footer-sub-menu-item[data-device-mode=mobile-landscape] .fa-mobile{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-panel .elementor-panel-footer-sub-menu-item:hover{background-color:rgba(0,0,0,.2)}.elementor-panel .elementor-panel-footer-sub-menu-item.active{background-color:rgba(0,0,0,.3)}.elementor-panel .elementor-panel-footer-sub-menu-item>*{display:table-cell;height:40px;vertical-align:middle}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-icon{width:40px;color:#a4afb7}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-title{text-align:right;color:#d5dadf}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-description{width:95px;text-align:right;font-size:11px;font-style:italic;color:#a4afb7}.elementor-panel #elementor-panel-footer-help-title{text-align:right;padding:10px 0;color:#d5dadf}.elementor-panel #elementor-panel-footer-responsive>i{display:block;height:100%;line-height:40px}.elementor-panel #elementor-panel-saver-publish{width:80px}.elementor-panel #elementor-panel-saver-publish .elementor-button-state i{margin-left:0}.elementor-panel #elementor-panel-saver-publish .elementor-button-state #elementor-panel-saver-button-publish-label{display:none}.elementor-panel #elementor-panel-saver-save-options{width:35px;border-right:1px solid #495157}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper{font-size:11px;font-style:italic;color:#a4afb7;padding:5px 0 15px}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper:not(.elementor-state-active) .elementor-state-icon{display:none}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper time{border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out;cursor:pointer}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper time:hover{border-bottom-color:inherit}.elementor-panel .elementor-saver-disabled{cursor:default}.elementor-panel #elementor-panel-saver-button-preview a{color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish,.elementor-panel #elementor-panel-saver-button-save-options{font-size:11px;text-transform:uppercase;height:26px}.elementor-panel #elementor-panel-saver-button-publish.elementor-saver-disabled,.elementor-panel #elementor-panel-saver-button-save-options.elementor-saver-disabled{background-color:#556068;color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish{width:100%;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-panel #elementor-panel-saver-button-save-options{width:25px}.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-icon,.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-title{color:#6d7882}.media-modal.wp-core-ui input{width:auto}.media-modal.wp-core-ui fieldset{padding:0;border:0}.media-modal.wp-core-ui .wp-clearfix:after{content:"";display:table;clear:both}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control.elementor-control-type-divider{padding:0;margin-bottom:-1px;z-index:1;background-color:transparent}.elementor-control.elementor-control-type-divider hr{border-bottom-width:0;border-top-width:1px;border-color:#e6e9ec;border-style:solid}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick{border-top-width:3px}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default{margin-right:20px;margin-left:20px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider):before{content:"";height:1px;display:block;margin-bottom:15px;background-color:#e6e9ec}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:3px;width:100%;top:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:3px;width:100%;bottom:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control .select2-container{width:100%!important;outline:none}.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.elementor-control .select2-container.select2-container--focus .select2-selection--multiple,.elementor-control .select2-container.select2-container--focus .select2-selection--single,.elementor-control .select2-container.select2-container--open .select2-selection--multiple,.elementor-control .select2-container.select2-container--open .select2-selection--single{border-color:#a4afb7}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-selection{outline:none}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading.elementor-open .elementor-panel-heading-toggle .fa:before{content:"\f0d7"}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:45%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;cursor:pointer}.elementor-slider{display:inline-block;margin-top:10px;height:4px;background-color:#a4afb7;-webkit-border-radius:5px;border-radius:5px;position:relative;width:67%}.elementor-slider .ui-slider-handle{height:16px;width:16px;background-color:#fff;display:inline-block;top:50%;-webkit-transform:translateY(-50%) translateX(-8px);-ms-transform:translateY(-50%) translateX(-8px);transform:translateY(-50%) translateX(-8px);position:absolute;-webkit-box-shadow:1px 1px 6px rgba(0,0,0,.3);box-shadow:1px 1px 6px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%;cursor:pointer}.elementor-slider-input{width:33%;float:left}.elementor-slider-input input{width:80%;float:left}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-start-end .eicon-h-align-left,.elementor-control-start-end .eicon-h-align-right{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;margin-right:5px;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.elementor-control-align .elementor-choices,.elementor-control-position .elementor-choices,.elementor-control-text_align .elementor-choices{direction:ltr}.elementor-control-type-media .elementor-control-media{padding:7px;border:1px solid;height:150px}.elementor-control-type-media .elementor-control-media:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-media:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-image-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .elementor-control-media>*{height:100%;cursor:pointer;position:relative}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-image-area:not(:hover) .elementor-control-media-delete{display:none}.elementor-control-type-media .elementor-control-media-image-area:hover .elementor-control-media-image{opacity:.5}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:none;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section){padding-top:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{margin-top:7px;height:auto;line-height:1;font-size:10px;padding:3px 7px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:right;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-left:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-left:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:"";position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1);box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:right}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:right;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:left;height:27px;width:65px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:30px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-left:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-right:1px solid #a4afb7;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding:0 10px 15px}.elementor-control-type-repeater .elementor-control:before,.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:right;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-left:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:left}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:.15s ease-out;-o-transition:.15s ease-out;transition:.15s ease-out;-webkit-transition-property:opacity,background;-o-transition-property:opacity,background;transition-property:opacity,background}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px hsla(0,0%,100%,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-hidden{display:none!important}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:ltr}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-left:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-button .elementor-control-input-wrapper{text-align:left}.elementor-control-type-button .elementor-button{width:auto;height:26px}.wp-picker-container.wp-picker-active{position:absolute;z-index:5;top:0;left:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:-webkit-calc(100% - 2px * 2);width:calc(100% - 2px * 2);height:-webkit-calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container:not(.wp-picker-active){float:left}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}.wp-picker-container.wp-picker-active{-webkit-transform:translateY(6px);-ms-transform:translateY(6px);transform:translateY(6px)}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:100px;max-width:136px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}#elementor-mode-switcher{position:absolute;right:100%;top:50%;width:15px;height:50px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);background-color:#e6e9ec;font-size:15px;-webkit-box-shadow:-3px 1px 5px rgba(0,0,0,.1);box-shadow:-3px 1px 5px rgba(0,0,0,.1);cursor:pointer}#elementor-mode-switcher:hover,body.elementor-editor-preview #elementor-mode-switcher{background-color:#b7084e;color:#fff}#elementor-mode-switcher-inner,#elementor-mode-switcher-preview{width:100%;height:100%;position:absolute;top:0;left:0}#elementor-mode-switcher-preview{cursor:pointer}#elementor-mode-switcher-preview .fa{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}#elementor-mode-switcher-preview-input{display:none}.elementor-revision-item__wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px}.elementor-revision-item__wrapper.current{font-weight:700}.elementor-revision-item__wrapper .elementor-revision-item__tools-current{color:#b7084e}.elementor-revision-item:hover:not(.elementor-revision-current-preview){background-color:rgba(230,233,236,.3)}.elementor-revision-item-loading .elementor-revision-item__tools-current,.elementor-revision-item-loading .elementor-revision-item__tools-delete,.elementor-revision-item.elementor-revision-current-preview .elementor-revision-item__tools-delete,.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner,.elementor-revision-item:not(:hover) .elementor-revision-item__tools-delete{display:none}.elementor-revision-item__gravatar{-webkit-border-radius:50%;border-radius:50%;overflow:hidden}.elementor-revision-item__gravatar img{display:block}.elementor-revision-item__details{padding-right:15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;cursor:pointer}.elementor-revision-item__tools-delete{cursor:pointer}.elementor-revision-meta{padding-top:5px;font-size:10px;font-weight:700}.elementor-revision-current-preview{background-color:#e6e9ec}#elementor-restore-autosave-dialog.dialog-widget{background-color:rgba(0,0,0,.3)}.elementor-history-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px;line-height:1.4;cursor:pointer}.elementor-history-item:hover{background-color:rgba(230,233,236,.3)}.elementor-history-item:hover .elementor-history-item__icon .fa:before{content:"\f1da"}.elementor-history-item-applied{color:#a4afb7}.elementor-history-item-current{background:#e6e9ec;cursor:inherit}.elementor-history-item-current .elementor-history-item__icon .fa:before,.elementor-history-item-current:hover .elementor-history-item__icon .fa:before{content:"\f00c"}.elementor-history-item__details{width:95%}.elementor-history-item__title{font-weight:700}.elementor-history-item__action,.elementor-history-item__subtitle{font-weight:lighter}.elementor-history-item__action{font-style:italic;text-decoration:underline}.elementor-history-item .__icon{float:left}.elementor-history-revisions-message{font-size:11px;text-align:center;padding:5px 0}#elementor-preview{background-color:#333;position:absolute;height:100%;top:0;right:0;border:0}.elementor-device-desktop #elementor-preview{overflow-y:hidden}body:not(.elementor-device-desktop) #elementor-preview{overflow-y:auto}#elementor-preview-responsive-wrapper{position:absolute;top:0;bottom:0;left:0;right:0;-webkit-transition:all .5s ease 0s;-o-transition:all .5s ease 0s;transition:all .5s ease 0s}.elementor-device-desktop #elementor-preview-responsive-wrapper{min-width:1025px;margin:0 auto;width:100%;height:100%}.elementor-device-tablet #elementor-preview-responsive-wrapper{width:768px;height:1025px;padding:40px 10px 70px}.elementor-device-mobile #elementor-preview-responsive-wrapper{width:360px;height:640px;padding:40px 10px 70px}body:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper{-webkit-border-radius:30px;border-radius:30px;background-color:#111;margin:30px auto 80px;-webkit-box-sizing:content-box;box-sizing:content-box}#elementor-preview-iframe{width:100%;height:100%;background-color:#fff}.tipsy{font-size:10px;position:absolute;padding:5px;z-index:6}.tipsy-inner{background-color:#000;color:#fff;max-width:200px;padding:6px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.5);box-shadow:0 0 5px 0 rgba(0,0,0,.5)}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-arrow-n{border-bottom-color:#000}.tipsy-arrow-s{border-top-color:#000}.tipsy-arrow-e{border-left-color:#000}.tipsy-arrow-w{border-right-color:#000}.tipsy-n .tipsy-arrow,.tipsy-nw .tipsy-arrow{border-left-color:transparent;border-right-color:transparent;top:0;border-bottom-style:solid;border-top:none}.tipsy-n .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-nw .tipsy-arrow{left:10px}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow,.tipsy-se .tipsy-arrow,.tipsy-sw .tipsy-arrow{bottom:0;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-sw .tipsy-arrow{left:10px}.tipsy-se .tipsy-arrow{right:10px}.tipsy-e .tipsy-arrow,.tipsy-w .tipsy-arrow{top:50%;margin-top:-5px;border-top-color:transparent;border-bottom-color:transparent}.tipsy-e .tipsy-arrow{right:0;border-left-style:solid;border-right:none}.tipsy-w .tipsy-arrow{left:0;border-right-style:solid;border-left:none}.elementor-templates-modal .dialog-widget-content{background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-widget-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding:25px 30px 30px}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{font-size:15px;line-height:1;text-transform:uppercase;color:#495157;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:right;padding-right:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#ef295a,#434363);background-image:-o-linear-gradient(225deg,#ef295a,#434363);background-image:linear-gradient(-135deg,#ef295a,#434363);-webkit-border-radius:2px;border-radius:2px;margin-left:10px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close-modal{width:45px;border-right:1px solid #e6e9ec}.elementor-templates-modal__header__close-modal i{font-size:18px}#elementor-template-library-modal a.elementor-template-library-blank-footer-link{font-style:normal;text-decoration:underline;color:#39b54a}#elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover{font-weight:500}#elementor-template-library-modal .dialog-lightbox-content{height:100%}#elementor-template-library-modal .dialog-lightbox-loading{display:none}#elementor-template-library-header-menu{text-align:center;color:#6d7882;font-size:13px}.elementor-template-library-menu-item{display:inline-block;padding:17px 0;width:115px;cursor:pointer}.elementor-template-library-menu-item.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(180deg,#f3f3f3,#fff);border-bottom:3px solid #9b0a46}#elementor-template-library-header-actions{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-template-library-header-actions>div{padding-left:16px}#elementor-template-library-header-preview-insert-wrapper{cursor:default;padding:0 10px}#elementor-template-library-header-preview-insert-wrapper .elementor-button{padding:8px 14px;font-size:11px}#elementor-template-library-header-preview-insert-wrapper .elementor-template-library-template-insert{color:#fff;background-color:#39b54a}#elementor-template-library-header-preview-back{padding:16.5px 0 15px 16.5px;border-left:1px solid #e6e9ec;cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}#elementor-template-library-header-preview-back:not(:hover){color:#a4afb7}#elementor-template-library-header-preview-back i{padding-left:10px;font-size:18px}#elementor-template-library-header-preview-back i:before{content:""}#elementor-template-library-loading .elementor-loading-title{color:#a4afb7}#elementor-template-library-loading .elementor-loader-box{background-color:#d5dadf}#elementor-template-library-templates{padding:0 15px}#elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container{-webkit-box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);margin-top:10px}#elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#6d7882}#elementor-template-library-templates[data-template-source=remote] #elementor-template-library-templates-container{margin:10px -15px 0}#elementor-template-library-templates[data-template-source=remote] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#495157}#elementor-template-library-templates .elementor-template-library-order-input,#elementor-template-library-templates.elementor-templates-filter-active #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-order-toolbar-local{display:none}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label{padding-left:8px}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label:after{font-family:eicons;content:"\e956";margin-right:3px}#elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse+.elementor-template-library-order-label:after{content:"\e955"}#elementor-template-library-templates-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}#elementor-template-library-templates-container .elementor-template-library-template-local .elementor-template-library-template-insert{text-transform:none;font-size:12px}#elementor-template-library-toolbar{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}#elementor-template-library-toolbar,.elementor-template-library-filter-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}#elementor-template-library-filter-toolbar-remote{font-size:11px}#elementor-template-library-order{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-left:1px solid #d5dadf}.elementor-template-library-order-label{text-transform:uppercase;cursor:pointer;padding-left:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elementor-template-library-order-label:hover{color:#556068}#elementor-template-library-filter{border-left:1px solid #d5dadf}#elementor-template-library-filter .select2{text-align:right;margin-left:25px}#elementor-template-library-filter .select2-selection__rendered,#select2-elementor-template-library-filter-subtype-results .select2-results__option{text-transform:capitalize}#elementor-template-library-my-favorites{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right;padding-right:20px}#elementor-template-library-filter-my-favorites{display:none}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label{color:#495157}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label i:after{color:#b7084e;content:"\f004"}#elementor-template-library-filter-my-favorites-label{cursor:pointer;text-transform:uppercase}#elementor-template-library-filter-my-favorites-label:hover{color:#556068}#elementor-template-library-filter-my-favorites-label:hover i:after{color:#b7084e}#elementor-template-library-filter-my-favorites-label i{padding-left:5px}#elementor-template-library-filter-my-favorites-label i:after{color:#a4afb7;content:"\f08a"}#elementor-template-library-filter-text-wrapper{width:200px;position:relative}#elementor-template-library-filter-text-wrapper:after{content:"\e863";position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-family:eicons}#elementor-template-library-filter-text{border:none;border-bottom:1px solid #d5dadf;-webkit-border-radius:0;border-radius:0;font-size:11px;text-transform:uppercase;padding:8px 15px 8px 0;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s}#elementor-template-library-filter-text::-webkit-input-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text::-moz-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text:-ms-input-placeholder,#elementor-template-library-filter-text::-ms-input-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text::placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text:focus{border-color:#c2cbd2}#elementor-template-library-filter-text:focus::-webkit-input-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus::-moz-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus:-ms-input-placeholder,#elementor-template-library-filter-text:focus::-ms-input-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus::placeholder{color:#a4afb7}.elementor-template-library-template-remote{margin:15px;padding:8px;background-color:#fff;-webkit-box-shadow:0 1px 20px 0 rgba(0,0,0,.07);box-shadow:0 1px 20px 0 rgba(0,0,0,.07);-webkit-border-radius:3px;border-radius:3px}.elementor-template-library-template-remote:hover .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-preview{opacity:0}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-favorite,.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-action{display:none}.elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before{position:absolute;content:"pro";text-transform:uppercase;top:5px;left:5px;background-color:#b7084e;color:#d5dadf;padding:2px 4px 0;font-size:9px;-webkit-border-radius:2px;border-radius:2px}.elementor-template-library-template-remote .elementor-template-library-template-body{position:relative}@media (max-width:1025px){.elementor-template-library-template-remote .elementor-template-library-template-body{height:300px}}.elementor-template-library-template-remote .elementor-template-library-template-screenshot{height:100%;-webkit-background-size:cover;background-size:cover;background-position-x:50%;-webkit-box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07);box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07)}.elementor-template-library-template-remote .elementor-template-library-template-preview{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-preview i{font-size:20px;color:#d5dadf;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-template-library-template-remote .elementor-template-library-template-action{background-color:transparent;text-transform:none}.elementor-template-library-template-remote .elementor-template-library-template-action i{margin-left:0}.elementor-template-library-template-remote .elementor-template-library-template-insert{color:#39b54a}.elementor-template-library-template-remote .elementor-button-go-pro{color:#fcb92c}.elementor-template-library-template-remote .elementor-template-library-template-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:10px;font-size:11px;line-height:1}.elementor-template-library-template-remote .elementor-template-library-template-name{text-align:right;color:#6d7882;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-left:5px}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input{display:none}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked+.elementor-template-library-template-favorite-label i:before{content:"\f004";color:#b7084e}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label{cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i{color:#b7084e}@media (max-width:1439px){.elementor-template-library-template-page{width:-webkit-calc(25% - 30px);width:calc(25% - 30px)}}@media (min-width:1440px){.elementor-template-library-template-page{width:-webkit-calc(20% - 30px);width:calc(20% - 30px)}}@media (max-width:1025px){.elementor-template-library-template-page{width:-webkit-calc(33.333% - 30px);width:calc(33.333% - 30px)}}.elementor-template-library-template-page .elementor-template-library-template-body{height:200px}.elementor-template-library-template-block{position:relative;width:-webkit-calc(33.333% - 30px);width:calc(33.333% - 30px);overflow:hidden}.elementor-template-library-template-block img{display:block;width:100%}.elementor-template-library-template-block .elementor-template-library-template-footer{position:absolute;width:100%;bottom:0;right:0;padding:10px;background-color:#fff;-webkit-transition:-webkit-transform .5s;transition:-webkit-transform .5s;-o-transition:transform .5s;transition:transform .5s;transition:transform .5s,-webkit-transform .5s}.elementor-template-library-template-block .elementor-template-library-template-name{display:none}.elementor-template-library-template-block:not(:hover) .elementor-template-library-template-footer{-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%)}#elementor-template-library-order-toolbar-local,.elementor-template-library-template-local{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0 25px;text-align:right}#elementor-template-library-order-toolbar-local{margin-top:30px}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label{line-height:1;font-size:10px;font-weight:500}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label:not(:hover){color:#a4afb7}.elementor-template-library-template-local{height:50px;width:100%;margin-top:1px;background-color:#fff;-webkit-transition:background-color .3s linear;-o-transition:background-color .3s linear;transition:background-color .3s linear}.elementor-template-library-template-local:hover{background-color:#fafbfb}.elementor-template-library-template-local:not(:hover) .elementor-template-library-template-insert{background:none;color:#a4afb7}.elementor-template-library-template-local:first-child{-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-template-library-template-local:last-child{-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;margin-bottom:45px}.elementor-template-library-template-local .elementor-template-library-template-name{font-weight:500}.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name{padding-left:20px}.elementor-template-library-template-local .elementor-template-library-template-meta{color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-action,.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name,.elementor-template-library-template-local .elementor-template-library-template-preview{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-template-library-template-local .elementor-template-library-template-controls{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-template-library-template-local .elementor-template-library-template-controls>div{cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}.elementor-template-library-template-local .elementor-template-library-template-controls>div:not(:hover){color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-insert i{margin-left:3px}.elementor-template-library-template-local .elementor-template-library-template-control-title{margin-right:6px}.elementor-template-library-template-local .elementor-template-library-template-delete:hover{color:red}.elementor-template-library-template-local .elementor-template-library-template-export:hover i{color:#556068}.elementor-template-library-template-local .elementor-template-library-template-action{padding:8px 18px;margin:0 5%}.elementor-template-library-template-local .elementor-template-library-template-more{display:none;position:absolute;background-color:#fff;padding:3px 20px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:1px 3px 11px rgba(0,0,0,.3);box-shadow:1px 3px 11px rgba(0,0,0,.3);top:100%;left:0;-webkit-transform:translateX(-65%) translateY(-7px);-ms-transform:translateX(-65%) translateY(-7px);transform:translateX(-65%) translateY(-7px);z-index:1}.elementor-template-library-template-local .elementor-template-library-template-more:before{content:"";position:absolute;border:solid transparent;border-width:8px 4px;border-bottom-color:#fff;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-template-library-template-local .elementor-template-library-template-more>div{margin:10px 0;font-size:11px}.elementor-template-library-template-local .elementor-template-library-template-more-toggle{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-template-library-template-local .elementor-template-library-template-more-toggle i{font-size:16px}#elementor-template-library-preview{height:100%;overflow:hidden}#elementor-template-library-preview iframe{height:150%;-webkit-transform:scale(.666) translateX(25%) translateY(-25%);-ms-transform:scale(.666) translateX(25%) translateY(-25%);transform:scale(.666) translateX(25%) translateY(-25%)}@media (max-width:1439px){#elementor-template-library-preview iframe{width:1440px}}@media (min-width:1440px){#elementor-template-library-preview iframe{width:1710px}}.elementor-template-library-blank-icon{font-size:65px;margin-top:45px;color:#c2cbd2;line-height:1}.elementor-template-library-blank-title{font-size:30px;margin-top:40px}.elementor-template-library-blank-message{font-size:18px;color:#a4afb7;margin-top:25px;font-weight:300}#elementor-template-library-save-template-form{margin-top:40px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}#elementor-template-library-save-template-form>*{height:55px;font-size:16px}#elementor-template-library-save-template-name{width:500px;background-color:#fff;font-weight:300;color:#a4afb7;padding-right:25px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;border:none}#elementor-template-library-save-template-name::-webkit-input-placeholder{color:#a4afb7}#elementor-template-library-save-template-name::-moz-placeholder{color:#a4afb7}#elementor-template-library-save-template-name:-ms-input-placeholder,#elementor-template-library-save-template-name::-ms-input-placeholder{color:#a4afb7}#elementor-template-library-save-template-name::placeholder{color:#a4afb7}#elementor-template-library-save-template-submit{width:150px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:500}#elementor-template-library-save-template-submit:hover{-webkit-box-shadow:none;box-shadow:none}#elementor-template-library-import-form{width:95%;background-color:hsla(0,0%,100%,.5);padding:60px;border:2px dashed #d5dadf;margin:35px auto;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}#elementor-template-library-import-form:hover{background-color:hsla(0,0%,100%,.9)}#elementor-template-library-import-form-or{margin-top:15px;font-size:18px}#elementor-template-library-import-form-label{margin-top:20px;padding:15px 35px;font-size:16px;display:inline-block}#elementor-template-library-import-form-input{display:none}#elementor-template-library-import-form.elementor-drag-over{border:3px dashed #71d7f7}#elementor-template-library-import .elementor-template-library-blank-icon{margin-top:0}#elementor-template-library-import .elementor-template-library-blank-message{margin-top:20px}.elementor-template-library-blank-footer{position:absolute;bottom:70px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);color:#a4afb7;font-size:16px;font-style:italic}@media (max-height:700px){.elementor-template-library-blank-footer{display:none}}#elementor-template-library-footer-banner i{color:#c2cbd2;font-size:56px;margin-top:40px}#elementor-template-library-footer-banner .elementor-excerpt{color:#a4afb7;font-size:15px;font-weight:500;margin:20px 0}#elementor-template-library-templates-empty{width:100%;margin-top:40px}#elementor-template-library-error-dialog .dialog-message{text-align:start}#elementor-template-library-error-info{margin-top:10px}@media (max-width:1439px){.elementor-template-library-local-column-1{width:33%}.elementor-template-library-local-column-2{width:10%}.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:15%}.elementor-template-library-local-column-5{width:27%}}@media (min-width:1440px){.elementor-template-library-local-column-1{width:25%}.elementor-template-library-local-column-2,.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:17%}.elementor-template-library-local-column-5{width:24%}}@media (max-width:1024px){.elementor-template-library-local-column-3{display:none}.elementor-template-library-local-column-5{width:41%}}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-left:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3)}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;right:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-right:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline .elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}#elementor-toast{position:absolute;width:280px;padding:20px;-webkit-border-radius:5px;border-radius:5px;color:#d5dadf;background-color:rgba(0,0,0,.8);z-index:5}#elementor-toast .dialog-message{font-size:13px}#elementor-toast .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-top:15px}#elementor-toast .dialog-button{color:#fcb92c;margin:0 5px;text-transform:uppercase;cursor:pointer}#elementor-toast .dialog-button:last-child{margin-left:0}
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+@charset "UTF-8";.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{padding:20px 0;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 20px 20px;min-height:50px}.dialog-type-lightbox .dialog-header,.dialog-type-lightbox .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-header,.dialog-lightbox-widget .dialog-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-left:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}*,:after,:before{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}body,html{height:100%}html{background-color:#f1f1f1}iframe,img{border:0 none}li{list-style:none}a,body{text-decoration:none}body{color:#6d7882;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px;font-weight:400;line-height:1;text-transform:none;overflow:hidden}body:after{content:"";position:absolute;top:0;left:0;height:100%;width:0;background-color:#71d7f7;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}body a{color:#71d7f7}body a:hover{color:#d30c5c}body.elementor-editor-active #elementor-preview{left:0}@media (max-width:1439px){body.elementor-editor-active #elementor-preview{right:280px}}@media (min-width:1440px){body.elementor-editor-active #elementor-preview{right:300px}}body.elementor-editor-active #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-editor-preview #elementor-preview{left:0}body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-navigator--dock-hint:after{width:30px}#elementor-panel:not(.ui-resizable-resizing),#elementor-preview:not(.ui-resizable-resizing){-webkit-transition:right .5s,width .5s;-o-transition:right .5s,width .5s;transition:right .5s,width .5s}#elementor-loading{position:fixed;top:0;left:0;bottom:0;right:0;background:#f1f3f5;z-index:5}#elementor-preview-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fff}#elementor-preview-loading i{color:#d5dadf;font-size:50px}.select2-container{z-index:5}.select2-dropdown{border-color:#a4afb7}.select2-dropdown .select2-search__field{outline:none}.ui-resizable-n{top:-5px}.ui-resizable-e{right:-5px}.ui-resizable-s{bottom:-5px}.ui-resizable-w{left:-5px}.ui-resizable-ne{top:-5px;right:-5px}.ui-resizable-nw{top:-5px;left:-5px}.ui-resizable-se{bottom:-5px;right:-5px}.ui-resizable-sw{bottom:-5px;left:-5px}.ui-resizable-n,.ui-resizable-s{left:0;height:10px;width:100%;cursor:ns-resize}.ui-resizable-e,.ui-resizable-w{top:0;height:100%;width:10px;cursor:ew-resize}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{height:15px;width:15px}.ui-resizable-nw,.ui-resizable-se{cursor:nwse-resize}.ui-resizable-ne,.ui-resizable-sw{cursor:nesw-resize}.ui-resizable-handle{position:absolute}.ui-resizable-resizing{pointer-events:none}#elementor-fatal-error-dialog button.dialog-ok{color:#71d7f7}#elementor-fatal-error-dialog .dialog-header{font-size:13px;color:#6d7882}.elementor-nerd-box{padding:30px;text-align:center}.elementor-nerd-box-icon{font-size:52px;color:#a4afb7}.elementor-nerd-box-title{margin-top:20px;font-size:16px;font-weight:700;line-height:1.4}.elementor-nerd-box-message{margin-top:20px;line-height:1.8;font-size:11px}.elementor-nerd-box .elementor-button.elementor-nerd-box-link{background-color:#fcb92c;color:#fff;padding:7px 25px;margin-top:20px;-webkit-box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-nerd-box .elementor-button.elementor-nerd-box-link:hover{background-color:#fdca5e}.eicon-nerd:hover:before{content:"\e965"}.eicon-nerd:active:before{content:"\e964"}.elementor-loader-wrapper{position:absolute;width:300px;left:50%;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-loader{-webkit-border-radius:7px;border-radius:7px;padding:40px;height:150px;width:150px;background-color:hsla(0,0%,100%,.9);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:2px 2px 20px 4px rgba(0,0,0,.02);box-shadow:2px 2px 20px 4px rgba(0,0,0,.02)}.elementor-loader-boxes{height:100%;width:100%;position:relative}.elementor-loader-box{position:absolute;background-color:#e6e9ec;-webkit-animation:load 1.8s linear infinite;animation:load 1.8s linear infinite}.elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}.elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}.elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}.elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}.elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}.elementor-loading-title{color:#a4afb7;text-align:center;text-transform:uppercase;margin-top:30px;letter-spacing:7px;font-size:10px;width:100%}.elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;text-transform:uppercase;outline:none;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-left:10px}.elementor-input-style,input,select,textarea{-webkit-border-radius:3px;border-radius:3px;font-size:12px;width:100%;background:none;-webkit-box-shadow:none;box-shadow:none;color:#495157;border:1px solid;outline:none}.elementor-input-style:not(:focus),input:not(:focus),select:not(:focus),textarea:not(:focus){border-color:#d5dadf}.elementor-input-style:focus,input:focus,select:focus,textarea:focus{border-color:#a4afb7}.elementor-error input,.elementor-error select,.elementor-error textarea{border-color:#b01b1b}.elementor-input-style,input,textarea{padding:5px 8px}.elementor-input-style,textarea{resize:vertical}input[type=checkbox],input[type=radio]{border:1px solid #d5dadf;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-transition:border-color .05s ease-in-out;-o-transition:.05s border-color ease-in-out;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=radio]:focus{border-color:#a4afb7}input[disabled]{background-color:#e6e9ec;cursor:not-allowed;opacity:1}select{height:27px}.ps-container{-ms-touch-action:none;overflow:hidden!important}.ps-container.ps-active-x>.ps-scrollbar-x-rail,.ps-container.ps-active-y>.ps-scrollbar-y-rail{display:block}.ps-container.ps-in-scrolling{pointer-events:none}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container>.ps-scrollbar-x-rail{display:none;position:absolute;-webkit-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;bottom:3px;height:8px}.ps-container>.ps-scrollbar-x-rail>.ps-scrollbar-x{position:absolute;background-color:#aaa;-webkit-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;bottom:0;height:8px}.ps-container>.ps-scrollbar-y-rail{display:none;position:absolute;-webkit-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;right:3px;width:8px}.ps-container>.ps-scrollbar-y-rail>.ps-scrollbar-y{position:absolute;background-color:#aaa;-webkit-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;right:0;width:8px}.ps-container:hover.ps-in-scrolling{pointer-events:none}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container:hover>.ps-scrollbar-x-rail,.ps-container:hover>.ps-scrollbar-y-rail{opacity:.6}.ps-container:hover>.ps-scrollbar-x-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x{background-color:#999}.ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y{background-color:#999}#nprogress{pointer-events:none}#nprogress .bar{background:#39b54a;position:fixed;z-index:4;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;-webkit-box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;opacity:1;-webkit-transform:rotate(3deg) translateY(-4px);-ms-transform:rotate(3deg) translateY(-4px);transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:none;position:fixed;z-index:4;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;box-sizing:border-box;border:2px solid transparent;border-top-color:#39b54a;border-left-color:#39b54a;-webkit-border-radius:50%;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}#nprogress .bar,#nprogress .spinner{z-index:7}.elementor-panel{position:fixed;height:100%;top:0;bottom:0;overflow:visible;background-color:#e6e9ec;z-index:1;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px}.elementor-editor-active .elementor-panel{right:0}@media (max-width:1439px){.elementor-editor-preview .elementor-panel{right:-280px}}@media (min-width:1440px){.elementor-editor-preview .elementor-panel{right:-300px}}.elementor-editor-preview .elementor-panel>.ui-resizable-e,.elementor-editor-preview .elementor-panel>.ui-resizable-w{display:none}@media (max-width:1439px){.elementor-panel{width:280px}}@media (min-width:1440px){.elementor-panel{width:300px}}.elementor-panel .ps-scrollbar-y-rail{z-index:2}.elementor-panel ::-moz-selection{background:#5bc0de;color:#fff}.elementor-panel ::selection{background:#5bc0de;color:#fff}.elementor-panel a{color:#d30c5c}.elementor-panel h1,.elementor-panel h2,.elementor-panel h3,.elementor-panel h4,.elementor-panel h5,.elementor-panel h6{font-size:100%;font-weight:400}.elementor-panel abbr,.elementor-panel acronym{border:0;font-variant:normal}.elementor-panel sup{vertical-align:text-top}.elementor-panel sub{vertical-align:text-bottom}.elementor-panel img{max-width:100%;height:auto;border:0}.elementor-panel ::-moz-focus-inner{padding:0;border:0}.elementor-panel :focus{outline:0}.elementor-panel .elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel .elementor-panel-box-content{padding:20px 20px 10px}.elementor-panel .elementor-control-title{font-size:12px}.elementor-panel .elementor-button{display:inline-block}.elementor-panel .elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:right}.elementor-panel .elementor-panel-alert a{color:inherit}.elementor-panel .elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel .elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel .elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel .elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-panel .elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-panel .elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-panel .elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-panel .elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-panel .elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-panel .elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-panel .elementor-control-field-description,.elementor-panel .elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-panel .elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:6;background-color:#fff}.elementor-panel .elementor-controls-popover:before{content:"";position:absolute;top:-16px;left:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-panel .elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-panel .elementor-controls-popover div.elementor-control:before{content:none}.elementor-panel #elementor-panel-get-pro-elements .elementor-nerd-box-message{text-transform:uppercase}.elementor-panel .select2-container{width:100%!important}.elementor-panel #elementor-controls .pojo-widget-button-collapse{display:none}.elementor-panel #elementor-panel-header{display:table;height:40px;width:100%;background-color:#d30c5c;color:#fff}.elementor-panel #elementor-panel-header>*{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-header-button{width:40px}.elementor-panel .elementor-header-button .elementor-icon{cursor:pointer;display:block;font-size:19px;height:40px;line-height:40px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar{font-size:18px}.elementor-panel .elementor-header-button .elementor-icon:hover{color:#d5dadf}.elementor-panel #elementor-panel-header-title{font-size:15px}.elementor-panel #elementor-panel-header-title img{width:66px}.elementor-panel #elementor-panel-elements-navigation .elementor-panel-navigation-tab{text-align:center;padding:10px 0;font-size:11px;text-transform:uppercase;cursor:pointer}.elementor-panel #elementor-panel-elements{overflow:hidden;padding:0 5px}.elementor-panel .elementor-element-wrapper{float:right;width:50%;padding:5px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-panel .elementor-element{-webkit-border-radius:3px;border-radius:3px;background-color:#fff;cursor:move}.elementor-panel .elementor-element:hover{-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2)}.elementor-panel .elementor-element:hover .icon,.elementor-panel .elementor-element:hover .title{color:#d30c5c}.elementor-panel .elementor-element .icon{font-size:28px;padding-top:15px;color:#556068}.elementor-panel .elementor-element .elementor-element-title-wrapper{display:table;width:100%}.elementor-panel .elementor-element .title{font-size:11px;color:#556068;display:table-cell;vertical-align:middle;height:40px}.elementor-panel #elementor-panel-elements-search-wrapper{position:relative;margin:10px 10px 5px}.elementor-panel #elementor-panel-elements-search-wrapper i{position:absolute;left:0;top:50%;color:#a4afb7;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:left 1s;-o-transition:left 1s;transition:left 1s}.elementor-panel #elementor-panel-elements-search-input{background-color:hsla(0,0%,100%,.7);font-size:11px;padding:10px 10px 10px 27px;font-style:italic;color:#a4afb7;border:none;-webkit-transition:all 1s;-o-transition:all 1s;transition:all 1s;-webkit-border-radius:3px;border-radius:3px;appearance:none;-webkit-appearance:none;-moz-appearance:none}.elementor-panel #elementor-panel-elements-search-input+i{left:10px}.elementor-panel #elementor-panel-elements-search-input:focus{background-color:#fff;padding-right:15px}.elementor-panel #elementor-panel-elements-search-input:focus+i{left:15px}.elementor-panel #elementor-panel-elements-search-input::-webkit-input-placeholder{color:#a4afb7}.elementor-panel #elementor-panel-elements-search-input:-ms-input-placeholder,.elementor-panel #elementor-panel-elements-search-input::-ms-input-placeholder{color:#a4afb7}.elementor-panel #elementor-panel-elements-search-input::placeholder{color:#a4afb7}.elementor-panel .elementor-panel-category{position:relative}.elementor-panel .elementor-panel-category:first-child .elementor-panel-category-title{padding-top:14px}.elementor-panel .elementor-panel-category.elementor-active .elementor-panel-category-title:before{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-panel .elementor-panel-category:not(.elementor-active):after{content:"";position:absolute;left:15px;right:15px;bottom:0;height:8px;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.03)),to(transparent));background:-webkit-linear-gradient(rgba(0,0,0,.03),transparent);background:-o-linear-gradient(rgba(0,0,0,.03),transparent);background:linear-gradient(rgba(0,0,0,.03),transparent);-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%)}.elementor-panel .elementor-panel-category-title{margin:0 15px;padding:20px 0;position:relative;text-transform:uppercase;font-size:11px;cursor:pointer}.elementor-panel .elementor-panel-category-title:before{content:"";font-family:eicons;position:absolute;left:0;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;-o-transition:transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.elementor-panel .elementor-panel-category-items{overflow:hidden;padding:0 5px;display:none}.elementor-panel .elementor-panel-scheme-title{padding:10px 20px;margin-top:10px}.elementor-panel .elementor-panel-scheme-description{padding:20px 20px 0}.elementor-panel .elementor-panel-scheme-buttons{padding:0 20px;display:table;table-layout:fixed;width:100%;height:40px;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1)}.elementor-panel .elementor-panel-scheme-buttons .elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:11px;font-weight:400}.elementor-panel .elementor-panel-scheme-button-wrapper{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-panel-scheme-button-wrapper:first-child{text-align:right}.elementor-panel .elementor-panel-scheme-button-wrapper:last-child{text-align:left}.elementor-panel .elementor-panel-scheme-save .elementor-button{padding:6px 18px}.elementor-panel .elementor-panel-scheme-discard .elementor-button,.elementor-panel .elementor-panel-scheme-reset .elementor-button{color:#a4afb7;background:none}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-items{position:relative}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item{display:inline-block}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-left:13px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-left:19px}}.elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active){float:none}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{top:10px}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{border-width:0 4px 0 5px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{border-width:0 7px 0 5px}}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:4px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:6px}}@media (max-width:1439px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:10px}}@media (min-width:1440px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:9px}}.elementor-panel .elementor-panel-scheme-color-title{text-align:center;text-transform:uppercase;margin:10px 0;color:#c2cbd2;font-size:8px}.elementor-panel .elementor-panel-scheme-typography-item{display:table;table-layout:fixed;width:100%;margin-bottom:15px}.elementor-panel .elementor-panel-scheme-typography-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-scheme-typography-item-value input,.elementor-panel .elementor-panel-scheme-typography-item-value select{width:100%}.elementor-panel .elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-scheme-typography-items{display:none}.elementor-panel .elementor-panel-scheme-color-system-scheme{margin-bottom:10px}.elementor-panel .elementor-panel-scheme-color-system-scheme .elementor-title{font-size:11px;color:#a4afb7;font-style:italic;margin-top:5px}.elementor-panel .elementor-panel-scheme-color-system-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;overflow:hidden;padding:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf;cursor:pointer}.elementor-panel .elementor-panel-scheme-color-system-items:hover{border:1px solid #a4afb7}.elementor-panel .elementor-panel-scheme-color-system-item{height:20px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-panel #elementor-panel-schemes-disabled a:hover{text-decoration:underline}.elementor-panel #elementor-panel-page-menu{padding:25px 15px}.elementor-panel #elementor-panel-exit-to-dashboard{width:100%;padding:15px 20px;font-size:12px;background-color:#0085ba;color:#fff;text-transform:uppercase;text-align:right;font-weight:400;border:none}.elementor-panel #elementor-panel-exit-to-dashboard:hover{background-color:#0073a1;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-panel #elementor-panel-exit-to-dashboard:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-panel #elementor-panel-exit-to-dashboard:visited{color:#fff}.elementor-panel #elementor-panel-exit-to-dashboard i{margin-left:15px}.elementor-panel .elementor-panel-menu-group-title{text-transform:uppercase;font-size:11px}.elementor-panel .elementor-panel-menu-items{margin:15px 0 25px;-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-menu-item{display:table;width:100%;height:40px;cursor:pointer;margin-bottom:1px;background-color:#fff}.elementor-panel .elementor-panel-menu-item:hover{background-color:hsla(0,0%,100%,.8)}.elementor-panel .elementor-panel-menu-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-menu-item-icon{text-align:center;width:50px;color:#a4afb7}.elementor-panel .elementor-panel-menu-item-title{font-weight:500}.elementor-panel .elementor-panel-menu-item-title>span{color:#39b54a}.elementor-panel .elementor-control.elementor-control-clear_page{background-color:transparent}.elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-panel .elementor-panel-navigation{background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);display:table;table-layout:fixed;width:100%}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab{display:table-cell}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(180deg,#f3f3f3,#fff);border-bottom:3px solid #d30c5c}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a{display:block;text-align:center;padding:12px 0 8px;font-size:10px;color:#6d7882}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a:before{font-family:FontAwesome;font-size:16px;display:block;margin-bottom:6px}.elementor-panel .elementor-tab-control-content a:before{content:"\f040"}.elementor-panel .elementor-tab-control-style a:before{content:"\f042"}.elementor-panel .elementor-tab-control-advanced a:before,.elementor-panel .elementor-tab-control-general_style a:before,.elementor-panel .elementor-tab-control-settings a:before{content:"\f013"}.elementor-panel .elementor-tab-control-responsive a:before{content:"\f10a"}.elementor-panel .elementor-tab-control-column a:before,.elementor-panel .elementor-tab-control-layout a:before{content:"\f0db"}.elementor-panel .elementor-tab-control-lightbox a:before{content:"\f2d2"}.elementor-panel #elementor-panel-footer{position:absolute;bottom:0;left:0;right:0;height:40px;background-color:#495157}.elementor-panel #elementor-panel-footer-tools{display:table;table-layout:fixed;width:100%;height:100%}.elementor-panel .elementor-panel-footer-tool{display:table-cell;vertical-align:middle;text-align:center;cursor:pointer;color:#a4afb7;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update{border-left:1px solid #2d8739;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update i{margin-left:5px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options{float:right;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i{margin:auto}.elementor-panel .elementor-panel-footer-tool.elementor-open{color:#fff}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open):hover{color:#d5dadf}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open) .elementor-panel-footer-sub-menu-wrapper{display:none}.elementor-panel .elementor-panel-footer-sub-menu-wrapper{position:absolute;bottom:100%;left:0;width:100%;background-color:#556068;padding:10px;-webkit-box-shadow:-2px -5px 8px rgba(0,0,0,.1);box-shadow:-2px -5px 8px rgba(0,0,0,.1);cursor:default;z-index:6}.elementor-panel .elementor-panel-footer-sub-menu{-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-footer-sub-menu-item{background-color:#495157;display:table;table-layout:fixed;width:100%;cursor:pointer}.elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child){margin-bottom:1px}.elementor-panel .elementor-panel-footer-sub-menu-item[data-device-mode=mobile-landscape] .fa-mobile{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-panel .elementor-panel-footer-sub-menu-item:hover{background-color:rgba(0,0,0,.2)}.elementor-panel .elementor-panel-footer-sub-menu-item.active{background-color:rgba(0,0,0,.3)}.elementor-panel .elementor-panel-footer-sub-menu-item>*{display:table-cell;height:40px;vertical-align:middle}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-icon{width:40px;color:#a4afb7}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-title{text-align:right;color:#d5dadf}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-description{width:95px;text-align:right;font-size:11px;font-style:italic;color:#a4afb7}.elementor-panel #elementor-panel-footer-help-title{text-align:right;padding:10px 0;color:#d5dadf}.elementor-panel #elementor-panel-footer-responsive>i{display:block;height:100%;line-height:40px}.elementor-panel #elementor-panel-saver-publish{width:80px}.elementor-panel #elementor-panel-saver-publish .elementor-button-state i{margin-left:0}.elementor-panel #elementor-panel-saver-publish .elementor-button-state #elementor-panel-saver-button-publish-label{display:none}.elementor-panel #elementor-panel-saver-save-options{width:35px;border-right:1px solid #495157}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper{font-size:11px;font-style:italic;color:#a4afb7;padding:5px 0 15px}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper:not(.elementor-state-active) .elementor-state-icon{display:none}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper time{border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out;cursor:pointer}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper time:hover{border-bottom-color:inherit}.elementor-panel .elementor-saver-disabled{cursor:default}.elementor-panel #elementor-panel-saver-button-preview a{color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish,.elementor-panel #elementor-panel-saver-button-save-options{font-size:11px;text-transform:uppercase;height:26px}.elementor-panel #elementor-panel-saver-button-publish.elementor-saver-disabled,.elementor-panel #elementor-panel-saver-button-save-options.elementor-saver-disabled{background-color:#556068;color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish{width:100%;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-panel #elementor-panel-saver-button-save-options{width:25px}.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-icon,.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-title{color:#6d7882}#elementor-panel-inner{position:relative;height:100%;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-shadow:0 0 5px 0 rgba(0,0,0,.2)}#elementor-panel-content-wrapper{position:absolute;bottom:40px;top:40px;left:0;width:100%}.elementor-panel-container{clear:both;padding-left:15px;padding-right:15px}.media-modal.wp-core-ui input{width:auto}.media-modal.wp-core-ui fieldset{padding:0;border:0}.media-modal.wp-core-ui .wp-clearfix:after{content:"";display:table;clear:both}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control .elementor-control-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.elementor-control.elementor-control-type-divider{padding:0;margin-bottom:-1px;z-index:1;background-color:transparent}.elementor-control.elementor-control-type-divider hr{border-bottom-width:0;border-top-width:1px;border-color:#e6e9ec;border-style:solid}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick{border-top-width:1px}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default{margin-right:20px;margin-left:20px}.elementor-control.elementor-control-type-divider+.elementor-control:not(.elementor-control-type-section){padding-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{content:"";height:1px;display:block;margin-bottom:15px;background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:1px;width:100%;top:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:1px;width:100%;bottom:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:#495157;font-size:12px;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-right:5px;padding-left:20px;cursor:pointer}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:"\e955";font-size:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:5px;pointer-events:none}.elementor-control .select2-container{width:100%!important;outline:none}.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.elementor-control .select2-container.select2-container--focus .select2-selection--multiple,.elementor-control .select2-container.select2-container--focus .select2-selection--single,.elementor-control .select2-container.select2-container--open .select2-selection--multiple,.elementor-control .select2-container.select2-container--open .select2-selection--single{border-color:#a4afb7}.elementor-control .select2-container.select2-container--default .select2-selection{-webkit-border-radius:3px;border-radius:3px}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-container.select2-container--default .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection{outline:none}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before{content:"\f0d7"}.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:45%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;cursor:pointer}.elementor-slider{display:inline-block;margin-top:10px;height:4px;background-color:#a4afb7;-webkit-border-radius:5px;border-radius:5px;position:relative;width:70%}.elementor-slider .ui-slider-handle{height:16px;width:16px;background-color:#fff;display:inline-block;top:50%;-webkit-transform:translateY(-50%) translateX(-8px);-ms-transform:translateY(-50%) translateX(-8px);transform:translateY(-50%) translateX(-8px);position:absolute;-webkit-box-shadow:1px 1px 6px rgba(0,0,0,.3);box-shadow:1px 1px 6px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%;cursor:pointer}.elementor-slider-input{width:30%;float:left}.elementor-slider-input input{max-width:80%;float:left;padding:5px}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-start-end .eicon-h-align-left,.elementor-control-start-end .eicon-h-align-right{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;margin-right:5px;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.elementor-control-align .elementor-choices,.elementor-control-direction-ltr,.elementor-control-position .elementor-choices,.elementor-control-text_align .elementor-choices{direction:ltr}.elementor-control-direction-rtl{direction:rtl}.elementor-control-type-media .elementor-control-media{padding:7px;border:1px solid;height:150px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.elementor-control-type-media .elementor-control-media:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-media:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .elementor-control-media>*{height:100%;cursor:pointer;position:relative}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-area{background-image:-webkit-linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd),-webkit-linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd);background-image:-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd),linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd);-webkit-background-size:16px 16px;background-size:16px 16px;background-position:0 0,8px 8px;background-color:#f6f6f6;overflow:hidden}.elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete{-webkit-box-shadow:none;box-shadow:none;bottom:-30px}.elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image{opacity:.9}.elementor-control-type-media .elementor-control-media-area i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:hsla(0,0%,100%,.7);font-size:21px}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-box-shadow:0 0 3px 3px rgba(0,0,0,.1);box-shadow:0 0 3px 3px rgba(0,0,0,.1)}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:none;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;width:12px;height:12px;top:7px;right:44px}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-autocomplete-menu{position:absolute;background:#fff;color:#495157;border:1px solid #a4afb7;margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out;cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline;padding:5px 8px;font-size:12px;width:100%;line-height:1.2;cursor:pointer}.elementor-autocomplete-menu .ui-menu-item.ui-state-active,.elementor-autocomplete-menu .ui-menu-item.ui-state-focus,.elementor-autocomplete-menu .ui-menu-item.ui-state-hover{background:#e6e9ec}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-top:2px}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section.elementor-open{padding-bottom:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{height:auto;line-height:24px;font-size:10px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:right;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-left:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-left:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:"";position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1);box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:right}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:right;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:left;height:27px;width:65px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:27px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-left:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-right:1px solid #a4afb7;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding:0 10px 15px}.elementor-control-type-repeater .elementor-control:before,.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:right;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-left:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:left}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:.15s ease-out;-o-transition:.15s ease-out;transition:.15s ease-out;-webkit-transition-property:opacity,background;-o-transition-property:opacity,background;transition-property:opacity,background}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px hsla(0,0%,100%,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-hidden{display:none!important}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:ltr}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-left:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-button .elementor-control-input-wrapper{text-align:left}.elementor-control-type-button .elementor-button{width:auto;height:26px}.elementor-group-control-css-filter .elementor-slider{height:6px;-webkit-box-shadow:0 0 1px 1px inset rgba(0,0,0,.2);box-shadow:inset 0 0 1px 1px rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-slider .ui-slider-handle{-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.3),0 0 0 1px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.3),0 0 0 1px rgba(0,0,0,.1)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0;margin-bottom:5px}.elementor-group-control-blur .elementor-slider{background:url(../images/blur.png);-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-group-control-contrast .elementor-slider{background:url(../images/contrast.png);-webkit-background-size:100% 100%;background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(red),color-stop(orange),color-stop(#ff0),color-stop(#adff2f),color-stop(#32cd32),color-stop(#00bfff),color-stop(blue),color-stop(95%,#9400d3));background-image:-webkit-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%);background-image:-o-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%);background-image:linear-gradient(90deg,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(gray),to(red));background-image:-webkit-linear-gradient(left,gray,red);background-image:-o-linear-gradient(left,gray,red);background-image:linear-gradient(90deg,gray,red)}.elementor-group-control-brightness .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(#000),to(#fff));background-image:-webkit-linear-gradient(left,#000,#fff);background-image:-o-linear-gradient(left,#000,#fff);background-image:linear-gradient(90deg,#000,#fff)}.wp-picker-container.wp-picker-active{position:absolute;z-index:6;top:-9px;left:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:-webkit-calc(100% - 2px * 2);width:calc(100% - 2px * 2);height:-webkit-calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container:not(.wp-picker-active){float:left}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:100px;max-width:136px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}#elementor-mode-switcher{position:absolute;right:100%;top:50%;width:15px;height:50px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);background-color:#e6e9ec;font-size:15px;-webkit-box-shadow:-3px 1px 5px rgba(0,0,0,.1);box-shadow:-3px 1px 5px rgba(0,0,0,.1);cursor:pointer}#elementor-mode-switcher:hover,body.elementor-editor-preview #elementor-mode-switcher{background-color:#d30c5c;color:#fff}#elementor-mode-switcher-inner,#elementor-mode-switcher-preview{width:100%;height:100%;position:absolute;top:0;left:0}#elementor-mode-switcher-preview{cursor:pointer}#elementor-mode-switcher-preview .fa{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}#elementor-mode-switcher-preview-input{display:none}.elementor-revision-item__wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px}.elementor-revision-item__wrapper.current{font-weight:700}.elementor-revision-item__wrapper .elementor-revision-item__tools-current{color:#d30c5c}.elementor-revision-item:hover:not(.elementor-revision-current-preview){background-color:rgba(230,233,236,.3)}.elementor-revision-item-loading .elementor-revision-item__tools-current,.elementor-revision-item-loading .elementor-revision-item__tools-delete,.elementor-revision-item.elementor-revision-current-preview .elementor-revision-item__tools-delete,.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner,.elementor-revision-item:not(:hover) .elementor-revision-item__tools-delete{display:none}.elementor-revision-item__gravatar{-webkit-border-radius:50%;border-radius:50%;overflow:hidden}.elementor-revision-item__gravatar img{display:block}.elementor-revision-item__details{padding-right:15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;cursor:pointer}.elementor-revision-item__tools-delete{cursor:pointer}.elementor-revision-meta{padding-top:5px;font-size:10px;font-weight:700}.elementor-revision-current-preview{background-color:#e6e9ec}#elementor-restore-autosave-dialog.dialog-widget{background-color:rgba(0,0,0,.3)}.elementor-history-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px;line-height:1.4;cursor:pointer}.elementor-history-item:hover{background-color:rgba(230,233,236,.3)}.elementor-history-item:hover .elementor-history-item__icon .fa:before{content:"\f1da"}.elementor-history-item-applied{color:#a4afb7}.elementor-history-item-current{background:#e6e9ec;cursor:inherit}.elementor-history-item-current .elementor-history-item__icon .fa:before,.elementor-history-item-current:hover .elementor-history-item__icon .fa:before{content:"\f00c"}.elementor-history-item__details{width:95%}.elementor-history-item__title{font-weight:700}.elementor-history-item__action,.elementor-history-item__subtitle{font-weight:lighter}.elementor-history-item__action{font-style:italic;text-decoration:underline}.elementor-history-item .__icon{float:left}.elementor-history-revisions-message{font-size:11px;text-align:center;padding:5px 0}#elementor-preview{background-color:#333;position:absolute;height:100%;top:0;right:0;border:0}.elementor-device-desktop #elementor-preview{overflow-y:hidden}body:not(.elementor-device-desktop) #elementor-preview{overflow-y:auto}#elementor-preview-responsive-wrapper{position:absolute;top:0;bottom:0;left:0;right:0;-webkit-transition:all .5s ease 0s;-o-transition:all .5s ease 0s;transition:all .5s ease 0s}.elementor-device-desktop #elementor-preview-responsive-wrapper{min-width:1025px;margin:0 auto;width:100%;height:100%}.elementor-device-tablet #elementor-preview-responsive-wrapper{width:768px;height:1025px;padding:40px 10px 70px}.elementor-device-mobile #elementor-preview-responsive-wrapper{width:360px;height:640px;padding:40px 10px 70px}body:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper{-webkit-border-radius:30px;border-radius:30px;background-color:#111;margin:30px auto 80px;-webkit-box-sizing:content-box;box-sizing:content-box}#elementor-preview-iframe{width:100%;height:100%;background-color:#fff}.tipsy{font-size:10px;position:absolute;padding:5px;z-index:7}.tipsy-inner{background-color:#000;color:#fff;max-width:200px;padding:6px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.5);box-shadow:0 0 5px 0 rgba(0,0,0,.5)}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-arrow-n{border-bottom-color:#000}.tipsy-arrow-s{border-top-color:#000}.tipsy-arrow-e{border-left-color:#000}.tipsy-arrow-w{border-right-color:#000}.tipsy-n .tipsy-arrow,.tipsy-nw .tipsy-arrow{border-left-color:transparent;border-right-color:transparent;top:0;border-bottom-style:solid;border-top:none}.tipsy-n .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-nw .tipsy-arrow{left:10px}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow,.tipsy-se .tipsy-arrow,.tipsy-sw .tipsy-arrow{bottom:0;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-sw .tipsy-arrow{left:10px}.tipsy-se .tipsy-arrow{right:10px}.tipsy-e .tipsy-arrow,.tipsy-w .tipsy-arrow{top:50%;margin-top:-5px;border-top-color:transparent;border-bottom-color:transparent}.tipsy-e .tipsy-arrow{right:0;border-left-style:solid;border-right:none}.tipsy-w .tipsy-arrow{left:0;border-right-style:solid;border-left:none}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding:25px 30px 30px}.elementor-templates-modal .dialog-content{height:100%}.elementor-templates-modal .dialog-loading{display:none}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{font-size:15px;line-height:1;text-transform:uppercase;color:#495157;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:right;padding-right:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#f2295b,#434363);background-image:-o-linear-gradient(225deg,#f2295b,#434363);background-image:linear-gradient(-135deg,#f2295b,#434363);-webkit-border-radius:2px;border-radius:2px;margin-left:10px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close--normal{width:45px;border-right:1px solid #e6e9ec}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px;padding-right:20px;margin-left:10px;color:#fff;background-color:#a4afb7;font-size:11px;font-weight:400;line-height:1;text-transform:uppercase;-webkit-border-radius:2px;border-radius:2px;cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-right:10px;margin-right:15px;border-right:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:#fff}#elementor-template-library-modal a.elementor-template-library-blank-footer-link{font-style:normal;text-decoration:underline;color:#39b54a}#elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover{color:#2d8e3a}#elementor-template-library-header-menu{text-align:center;color:#6d7882;font-size:13px}.elementor-template-library-menu-item{display:inline-block;padding:17px 0;width:115px;cursor:pointer}.elementor-template-library-menu-item.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(180deg,#f3f3f3,#fff);border-bottom:3px solid #9b0a46}#elementor-template-library-header-actions{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-template-library-header-actions>div{padding-left:16px}#elementor-template-library-header-preview-insert-wrapper{cursor:default;padding:0 10px}#elementor-template-library-header-preview-insert-wrapper .elementor-button{padding:8px 14px;font-size:11px}#elementor-template-library-header-preview-insert-wrapper .elementor-template-library-template-insert{color:#fff;background-color:#39b54a}#elementor-template-library-header-preview-back{padding:16.5px 0 15px 16.5px;border-left:1px solid #e6e9ec;cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}#elementor-template-library-header-preview-back:not(:hover){color:#a4afb7}#elementor-template-library-header-preview-back i{padding-left:10px;font-size:18px}#elementor-template-library-header-preview-back i:before{content:""}#elementor-template-library-templates{padding:0 15px}#elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container{-webkit-box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);margin-top:10px;margin-bottom:45px}#elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#6d7882}#elementor-template-library-templates[data-template-source=remote] #elementor-template-library-templates-container{margin:10px -15px 0}#elementor-template-library-templates[data-template-source=remote] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#495157}#elementor-template-library-templates .elementor-template-library-order-input,#elementor-template-library-templates.elementor-templates-filter-active #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-order-toolbar-local{display:none}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label{padding-left:8px}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label:after{font-family:eicons;content:"\e956";margin-right:3px}#elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse+.elementor-template-library-order-label:after{content:"\e955"}#elementor-template-library-templates-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}#elementor-template-library-templates-container .elementor-template-library-template-local .elementor-template-library-template-insert{text-transform:none;font-size:12px}#elementor-template-library-toolbar{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}#elementor-template-library-toolbar,.elementor-template-library-filter-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}#elementor-template-library-filter-toolbar-remote{font-size:11px}#elementor-template-library-order{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-left:1px solid #d5dadf}.elementor-template-library-order-label{text-transform:uppercase;cursor:pointer;padding-left:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elementor-template-library-order-label:hover{color:#556068}#elementor-template-library-filter{border-left:1px solid #d5dadf}#elementor-template-library-filter .select2{text-align:right;margin-left:25px}#elementor-template-library-filter .select2-selection__rendered,#select2-elementor-template-library-filter-subtype-results .select2-results__option{text-transform:capitalize}#elementor-template-library-my-favorites{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right;padding-right:20px}#elementor-template-library-filter-my-favorites{display:none}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label{color:#495157}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label i:after{color:#d30c5c;content:"\f004"}#elementor-template-library-filter-my-favorites-label{cursor:pointer;text-transform:uppercase}#elementor-template-library-filter-my-favorites-label:hover{color:#556068}#elementor-template-library-filter-my-favorites-label:hover i:after{color:#d30c5c}#elementor-template-library-filter-my-favorites-label i{padding-left:5px}#elementor-template-library-filter-my-favorites-label i:after{color:#a4afb7;content:"\f08a"}#elementor-template-library-filter-text-wrapper{width:200px;position:relative}#elementor-template-library-filter-text-wrapper:after{content:"\e863";position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-family:eicons}#elementor-template-library-filter-text{border:none;border-bottom:1px solid #d5dadf;-webkit-border-radius:0;border-radius:0;font-size:11px;text-transform:uppercase;padding:8px 15px 8px 0;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s}#elementor-template-library-filter-text::-webkit-input-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text:-ms-input-placeholder,#elementor-template-library-filter-text::-ms-input-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text::placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text:focus{border-color:#c2cbd2}#elementor-template-library-filter-text:focus::-webkit-input-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus:-ms-input-placeholder,#elementor-template-library-filter-text:focus::-ms-input-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus::placeholder{color:#a4afb7}.elementor-template-library-template-remote{margin:15px;padding:8px;background-color:#fff;-webkit-box-shadow:0 1px 20px 0 rgba(0,0,0,.07);box-shadow:0 1px 20px 0 rgba(0,0,0,.07);-webkit-border-radius:3px;border-radius:3px}.elementor-template-library-template-remote:hover .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-preview{opacity:0}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-favorite,.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-action{display:none}.elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before{position:absolute;content:"pro";text-transform:uppercase;top:5px;left:5px;background-color:#d30c5c;color:#d5dadf;padding:2px 4px 0;font-size:9px;-webkit-border-radius:2px;border-radius:2px}.elementor-template-library-template-remote .elementor-template-library-template-body{position:relative}@media (max-width:1025px){.elementor-template-library-template-remote .elementor-template-library-template-body{height:300px}}.elementor-template-library-template-remote .elementor-template-library-template-screenshot{height:100%;-webkit-background-size:cover;background-size:cover;background-position-x:50%;-webkit-box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07);box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07)}.elementor-template-library-template-remote .elementor-template-library-template-preview{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-preview i{font-size:20px;color:#d5dadf;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-template-library-template-remote .elementor-template-library-template-action{background-color:transparent;text-transform:none}.elementor-template-library-template-remote .elementor-template-library-template-action i{margin-left:0}.elementor-template-library-template-remote .elementor-template-library-template-insert{color:#39b54a}.elementor-template-library-template-remote .elementor-button-go-pro{color:#fcb92c}.elementor-template-library-template-remote .elementor-template-library-template-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:10px;font-size:11px;line-height:1}.elementor-template-library-template-remote .elementor-template-library-template-name{text-align:right;color:#6d7882;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-left:5px}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input{display:none}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked+.elementor-template-library-template-favorite-label i:before{content:"\f004";color:#d30c5c}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label{cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i{color:#d30c5c}@media (max-width:1439px){.elementor-template-library-template-page{width:-webkit-calc(25% - 30px);width:calc(25% - 30px)}}@media (min-width:1440px){.elementor-template-library-template-page{width:-webkit-calc(20% - 30px);width:calc(20% - 30px)}}@media (max-width:1025px){.elementor-template-library-template-page{width:-webkit-calc(33.333% - 30px);width:calc(33.333% - 30px)}}.elementor-template-library-template-page .elementor-template-library-template-body{height:200px}.elementor-template-library-template-block{position:relative;width:-webkit-calc(33.333% - 30px);width:calc(33.333% - 30px);overflow:hidden}.elementor-template-library-template-block img{display:block;width:100%}.elementor-template-library-template-block .elementor-template-library-template-footer{position:absolute;width:100%;bottom:0;right:0;padding:10px;background-color:#fff;-webkit-transition:-webkit-transform .5s;transition:-webkit-transform .5s;-o-transition:transform .5s;transition:transform .5s;transition:transform .5s,-webkit-transform .5s}.elementor-template-library-template-block .elementor-template-library-template-name{display:none}.elementor-template-library-template-block:not(:hover) .elementor-template-library-template-footer{-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%)}#elementor-template-library-order-toolbar-local,.elementor-template-library-template-local{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0 25px;text-align:right}#elementor-template-library-order-toolbar-local{margin-top:30px}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label{line-height:1;font-size:10px;font-weight:500}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label:not(:hover){color:#a4afb7}.elementor-template-library-template-local{height:50px;width:100%;margin-top:1px;background-color:#fff;-webkit-transition:background-color .3s linear;-o-transition:background-color .3s linear;transition:background-color .3s linear}.elementor-template-library-template-local:hover{background-color:#fafbfb}.elementor-template-library-template-local:not(:hover) .elementor-template-library-template-insert{background:none;color:#a4afb7}.elementor-template-library-template-local:first-child{-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-template-library-template-local:last-child{-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.elementor-template-library-template-local .elementor-template-library-template-name{font-weight:500}.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name{padding-left:20px}.elementor-template-library-template-local .elementor-template-library-template-meta{color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-action,.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name,.elementor-template-library-template-local .elementor-template-library-template-preview{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-template-library-template-local .elementor-template-library-template-controls{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-template-library-template-local .elementor-template-library-template-controls>div{cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}.elementor-template-library-template-local .elementor-template-library-template-controls>div:not(:hover){color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-insert i{margin-left:3px}.elementor-template-library-template-local .elementor-template-library-template-control-title{margin-right:6px}.elementor-template-library-template-local .elementor-template-library-template-delete:hover{color:red}.elementor-template-library-template-local .elementor-template-library-template-export:hover i{color:#556068}.elementor-template-library-template-local .elementor-template-library-template-action{padding:8px 18px;margin:0 5%}.elementor-template-library-template-local .elementor-template-library-template-more{display:none;position:absolute;background-color:#fff;padding:3px 20px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:1px 3px 11px rgba(0,0,0,.3);box-shadow:1px 3px 11px rgba(0,0,0,.3);top:100%;left:0;-webkit-transform:translateX(-65%) translateY(-7px);-ms-transform:translateX(-65%) translateY(-7px);transform:translateX(-65%) translateY(-7px);z-index:1}.elementor-template-library-template-local .elementor-template-library-template-more:before{content:"";position:absolute;border:solid transparent;border-width:8px 4px;border-bottom-color:#fff;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-template-library-template-local .elementor-template-library-template-more>div{margin:10px 0;font-size:11px}.elementor-template-library-template-local .elementor-template-library-template-more-toggle{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left}.elementor-template-library-template-local .elementor-template-library-template-more-toggle i{font-size:16px}#elementor-template-library-preview{height:100%;overflow:hidden}#elementor-template-library-preview iframe{height:150%;-webkit-transform:scale(.666) translateX(25%) translateY(-25%);-ms-transform:scale(.666) translateX(25%) translateY(-25%);transform:scale(.666) translateX(25%) translateY(-25%)}@media (max-width:1439px){#elementor-template-library-preview iframe{width:1440px}}@media (min-width:1440px){#elementor-template-library-preview iframe{width:1710px}}.elementor-template-library-blank-icon{font-size:65px;margin-top:45px;color:#c2cbd2;line-height:1}.elementor-template-library-blank-title{font-size:30px;margin-top:40px}.elementor-template-library-blank-message{font-size:18px;color:#a4afb7;margin-top:25px;font-weight:300}#elementor-template-library-save-template-form{margin-top:40px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}#elementor-template-library-save-template-form>*{height:55px;font-size:16px}#elementor-template-library-save-template-name{width:500px;background-color:#fff;font-weight:300;color:#a4afb7;padding-right:25px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;border:none}#elementor-template-library-save-template-name::-webkit-input-placeholder{color:#a4afb7}#elementor-template-library-save-template-name:-ms-input-placeholder,#elementor-template-library-save-template-name::-ms-input-placeholder{color:#a4afb7}#elementor-template-library-save-template-name::placeholder{color:#a4afb7}#elementor-template-library-save-template-submit{width:150px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}#elementor-template-library-save-template-submit:hover{-webkit-box-shadow:none;box-shadow:none}#elementor-template-library-import-form{width:95%;background-color:hsla(0,0%,100%,.5);padding:60px;border:2px dashed #d5dadf;margin:35px auto;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}#elementor-template-library-import-form:hover{background-color:hsla(0,0%,100%,.9)}#elementor-template-library-import-form-or{margin-top:15px;font-size:18px}#elementor-template-library-import-form-label{margin-top:20px;padding:15px 35px;display:inline-block}#elementor-template-library-import-form-input{display:none}#elementor-template-library-import-form.elementor-drag-over{border:3px dashed #71d7f7}#elementor-template-library-import .elementor-template-library-blank-icon{margin-top:0}#elementor-template-library-import .elementor-template-library-blank-message{margin-top:20px}.elementor-template-library-blank-footer{position:absolute;bottom:70px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);color:#a4afb7;font-style:italic}@media (max-height:700px){.elementor-template-library-blank-footer{display:none}}#elementor-template-library-footer-banner i{color:#c2cbd2;font-size:56px;margin-top:40px}#elementor-template-library-footer-banner .elementor-excerpt{color:#a4afb7;font-size:15px;font-weight:500;margin:20px 0}#elementor-template-library-templates-empty{width:100%;margin-top:40px}#elementor-template-library-error-dialog .dialog-message{text-align:start}#elementor-template-library-error-info{margin-top:10px}@media (max-width:1439px){.elementor-template-library-local-column-1{width:33%}.elementor-template-library-local-column-2{width:10%}.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:15%}.elementor-template-library-local-column-5{width:27%}}@media (min-width:1440px){.elementor-template-library-local-column-1{width:25%}.elementor-template-library-local-column-2,.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:17%}.elementor-template-library-local-column-5{width:24%}}@media (max-width:1024px){.elementor-template-library-local-column-3{display:none}.elementor-template-library-local-column-5{width:41%}}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px;z-index:1}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-left:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3);z-index:1}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;right:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-right:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}#elementor-toast{position:absolute;width:280px;padding:20px;-webkit-border-radius:5px;border-radius:5px;color:#d5dadf;background-color:rgba(0,0,0,.8);z-index:6}#elementor-toast .dialog-message{font-size:13px}#elementor-toast .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-top:15px}#elementor-toast .dialog-button{color:#fcb92c;margin:0 5px;text-transform:uppercase;cursor:pointer}#elementor-toast .dialog-button:last-child{margin-left:0}.elementor-context-menu{position:absolute;width:200px;background-color:#fff;border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.09);box-shadow:0 2px 10px 0 rgba(0,0,0,.09);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:3}.elementor-context-menu-list__group{padding:5px 0}.elementor-context-menu-list__group:not(:last-child){border-bottom:1px solid #e6e9ec}.elementor-context-menu-list__item{padding:5px 10px;padding-left:20px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer}.elementor-context-menu-list__item--disabled{cursor:default;color:#d5dadf}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover{background-color:#71d7f7}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover>*{color:#fff}.elementor-context-menu-list__item__icon{width:20px;color:#c2cbd2}.elementor-context-menu-list__item__title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-context-menu-list__item__shortcut{color:#d5dadf}.elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover{background-color:#d72b3f}.elementor-context-menu .eicon-pro-icon{color:#fcb92c}.elementor-introduction{position:absolute;width:270px;padding:30px 20px;background-color:#fff;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.07);box-shadow:0 2px 10px 0 rgba(0,0,0,.07);text-align:center}.elementor-introduction:before{content:"";position:absolute;border:solid transparent;border-width:7px 5px;border-bottom-color:#fff;top:-14px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-introduction .dialog-header{color:#6d7882;font-size:16px}.elementor-introduction .dialog-message{font-size:13px;line-height:1.6;margin-top:10px;color:#a4afb7}.elementor-introduction .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:25px}.elementor-introduction .dialog-button{font-size:11px}.elementor-introduction .dialog-ok{padding:7px 27px;text-transform:capitalize}.elementor-introduction .dialog-learn-more{color:#39b54a;margin-left:15px;cursor:pointer}#elementor-navigator{position:fixed;top:100px;width:240px;height:339px;left:30px;background-color:#fff;-webkit-box-shadow:0 2px 20px 0 rgba(0,0,0,.1);box-shadow:0 2px 20px 0 rgba(0,0,0,.1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;z-index:2;display:none}body.elementor-navigator-docked #elementor-navigator{top:0;left:0;height:100%}body:not(.elementor-navigator-docked) #elementor-navigator{-webkit-border-radius:5px;border-radius:5px}#elementor-navigator__inner{height:100%;background-color:#e6e9ec}#elementor-navigator__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:12px 10px;background-color:#fff;border-bottom:1px solid #e6e9ec;cursor:move}#elementor-navigator__close,#elementor-navigator__toggle-all{-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}#elementor-navigator__close:not(:hover),#elementor-navigator__toggle-all:not(:hover){color:#a4afb7}#elementor-navigator__toggle-all{font-size:13px}#elementor-navigator__close{font-size:11px}#elementor-navigator__elements{height:-webkit-calc(100% - 49px);height:calc(100% - 49px);overflow:auto;position:relative}.elementor-navigator-docked #elementor-navigator__elements{height:-webkit-calc(100% - 35px);height:calc(100% - 35px)}#elementor-navigator__footer{position:absolute;width:100%;left:0;bottom:0;text-align:center;background-color:#fff;border-top:1px solid #e6e9ec;color:#a4afb7}.elementor-navigator-docked #elementor-navigator__footer{display:none}.elementor-navigator__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:32px;padding-left:4px;font-size:12px;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.elementor-navigator__item>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-navigator__item+.elementor-navigator__elements{display:none}.elementor-navigator__elements .elementor-empty-view{padding:10px;border-bottom:1px solid #e6e9ec}.elementor-navigator__elements .elementor-empty-view__title{margin-right:23px;color:#c2cbd2;font-size:10px;font-style:italic}.elementor-navigator__elements .ui-sortable-helper{background-color:#fff;-webkit-box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);-webkit-transform:rotate(4deg);-ms-transform:rotate(4deg);transform:rotate(4deg);border:1px solid #e6e9ec;pointer-events:none}.elementor-navigator__elements .ui-sortable-placeholder{background-color:#f1f3f5}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view{border-top:2px solid #71d7f7}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view+.ui-sortable-placeholder,.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view .elementor-empty-view__title{display:none}.elementor-navigator__element:not(.elementor-navigator__element--has-children) .elementor-navigator__element__list-toggle{visibility:hidden}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item .elementor-navigator__element__toggle{color:#71d7f7}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item:not(:hover) .elementor-navigator__element__toggle{display:none}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item.elementor-editing{background-color:#71d7f7}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item.elementor-editing>*{color:#fff}.elementor-navigator__element__list-toggle{margin-left:7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;-o-transition:transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;color:#a4afb7}.elementor-navigator__element__element-type{margin-left:8px}.elementor-navigator__element__title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden}.elementor-navigator__element__title__text{white-space:nowrap;-webkit-user-select:text}.elementor-navigator__element__title__text[contenteditable=true]{outline:none;color:#6d7882;background-color:#fff;padding:2px 3px;-webkit-box-shadow:0 0 4px rgba(0,0,0,.2);box-shadow:0 0 4px rgba(0,0,0,.2)}.elementor-navigator__element__title__text:not([contenteditable=true]){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-navigator__element__toggle{text-align:left;font-size:13px;padding:0 5px}.elementor-navigator__element--hidden .elementor-navigator__element__title,.elementor-navigator__element--hidden .elementor-navigator__element__toggle{opacity:.5}.elementor-navigator__element-column{background-color:#fafbfb}.elementor-navigator__element-column>.elementor-navigator__item .elementor-navigator__element__element-type{color:#a4afb7}.elementor-navigator__element-section{background-color:#fff}
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
+/*! elementor - v2.2.1 - 03-09-2018 */
@charset "UTF-8";
.dialog-widget-content {
background-color: #fff;
.dialog-type-lightbox .dialog-widget-content {
margin: auto;
width: 375px; }
+ .dialog-type-lightbox .dialog-header {
+ padding: 20px 0;
+ font-weight: 500; }
.dialog-type-lightbox .dialog-message {
- padding: 0 20px;
+ padding: 0 20px 20px;
min-height: 50px; }
- .dialog-type-lightbox .dialog-widget-header, .dialog-type-lightbox .dialog-message {
+ .dialog-type-lightbox .dialog-header, .dialog-type-lightbox .dialog-message {
text-align: center; }
.dialog-type-lightbox .dialog-buttons-wrapper {
border-top: 1px solid #e6e9ec;
.dialog-type-lightbox .dialog-buttons-wrapper > button::-moz-focus-inner {
border: 0; }
-.dialog-widget-header {
- padding: 20px 0;
- font-weight: 500; }
-
.dialog-close-button {
cursor: pointer;
position: absolute;
.dialog-close-button:not(:hover) {
opacity: .4; }
-.dialog-lightbox-widget .dialog-widget-header,
-.dialog-confirm-widget .dialog-widget-header {
+.dialog-lightbox-widget .dialog-header,
+.dialog-confirm-widget .dialog-header {
font-size: 15px;
color: #495157; }
text-decoration: none;
text-transform: none;
overflow: hidden; }
+ body:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ height: 100%;
+ width: 0;
+ background-color: #71d7f7;
+ -webkit-transition: width .5s;
+ -o-transition: width .5s;
+ transition: width .5s; }
body a {
color: #71d7f7; }
body a:hover {
- color: #B7084E; }
+ color: #D30C5C; }
body.elementor-editor-active #elementor-preview {
right: 0; }
@media (max-width: 1439px) {
@media (min-width: 1440px) {
body.elementor-editor-active #elementor-preview {
left: 300px; } }
- body.elementor-editor-active #elementor-panel {
- left: 0; }
body.elementor-editor-active #elementor-mode-switcher-preview .fa:before {
content: ""; }
body.elementor-editor-preview #elementor-preview {
left: 0; }
- @media (max-width: 1439px) {
- body.elementor-editor-preview #elementor-panel {
- left: -280px; } }
- @media (min-width: 1440px) {
- body.elementor-editor-preview #elementor-panel {
- left: -300px; } }
- body.elementor-editor-preview #elementor-panel > .ui-resizable-e, body.elementor-editor-preview #elementor-panel > .ui-resizable-w {
- display: none; }
body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before {
content: ""; }
+ body.elementor-navigator--dock-hint:after {
+ width: 30px; }
-#elementor-preview:not(.ui-resizable-resizing),
-#elementor-panel:not(.ui-resizable-resizing) {
+#elementor-panel:not(.ui-resizable-resizing),
+#elementor-preview:not(.ui-resizable-resizing) {
-webkit-transition: left 0.5s, width 0.5s;
-o-transition: left 0.5s, width 0.5s;
transition: left 0.5s, width 0.5s; }
-#elementor-preview .ps-scrollbar-y-rail,
-#elementor-panel .ps-scrollbar-y-rail {
- z-index: 2; }
-
#elementor-loading {
position: fixed;
top: 0;
background: #f1f3f5;
z-index: 9999; }
-.elementor-loader-wrapper {
- position: absolute;
- top: 50%;
- left: 50%;
- -webkit-transform: translateX(-50%) translateY(-50%);
- -ms-transform: translateX(-50%) translateY(-50%);
- transform: translateX(-50%) translateY(-50%);
- width: 100px; }
- .elementor-loader-wrapper .elementor-loader {
- height: 100px;
- position: relative; }
- .elementor-loader-wrapper .elementor-loader-box {
- background-color: #495157; }
- .elementor-loader-wrapper .elementor-loader-box {
- position: absolute;
- -webkit-animation: load 1.8s linear infinite;
- animation: load 1.8s linear infinite; }
- .elementor-loader-wrapper .elementor-loader-box:nth-of-type(1) {
- width: 20%;
- height: 100%;
- left: 0;
- top: 0; }
- .elementor-loader-wrapper .elementor-loader-box:not(:nth-of-type(1)) {
- right: 0;
- height: 20%;
- width: 60%; }
- .elementor-loader-wrapper .elementor-loader-box:nth-of-type(2) {
- top: 0;
- -webkit-animation-delay: -0.45s;
- animation-delay: -0.45s; }
- .elementor-loader-wrapper .elementor-loader-box:nth-of-type(3) {
- top: 40%;
- -webkit-animation-delay: -0.9s;
- animation-delay: -0.9s; }
- .elementor-loader-wrapper .elementor-loader-box:nth-of-type(4) {
- bottom: 0;
- -webkit-animation-delay: -1.35s;
- animation-delay: -1.35s; }
-
-@-webkit-keyframes load {
- 0% {
- opacity: .3; }
- 50% {
- opacity: 1; }
- 100% {
- opacity: .3; } }
-
-@keyframes load {
- 0% {
- opacity: .3; }
- 50% {
- opacity: 1; }
- 100% {
- opacity: .3; } }
-
-.elementor-loading-title {
- color: #495157;
- text-align: center;
- text-transform: uppercase;
- margin-top: 30px;
- letter-spacing: 7px;
- font-size: 10px;
- -webkit-animation: load-title 1.5s linear infinite;
- animation: load-title 1.5s linear infinite; }
-
-@-webkit-keyframes load-title {
- 0% {
- opacity: 1; }
- 50% {
- opacity: .6; }
- 100% {
- opacity: 1; } }
-
-@keyframes load-title {
- 0% {
- opacity: 1; }
- 50% {
- opacity: .6; }
- 100% {
- opacity: 1; } }
-
#elementor-preview-loading {
display: -webkit-box;
display: -webkit-flex;
.select2-dropdown .select2-search__field {
outline: none; }
+.ui-resizable-n {
+ top: -5px; }
+
+.ui-resizable-e {
+ right: -5px; }
+
+.ui-resizable-s {
+ bottom: -5px; }
+
+.ui-resizable-w {
+ left: -5px; }
+
+.ui-resizable-ne {
+ top: -5px;
+ right: -5px; }
+
+.ui-resizable-nw {
+ top: -5px;
+ left: -5px; }
+
+.ui-resizable-se {
+ bottom: -5px;
+ right: -5px; }
+
+.ui-resizable-sw {
+ bottom: -5px;
+ left: -5px; }
+
+.ui-resizable-n, .ui-resizable-s {
+ left: 0;
+ height: 10px;
+ width: 100%;
+ cursor: ns-resize; }
+
+.ui-resizable-e, .ui-resizable-w {
+ top: 0;
+ height: 100%;
+ width: 10px;
+ cursor: ew-resize; }
+
+.ui-resizable-ne, .ui-resizable-nw, .ui-resizable-se, .ui-resizable-sw {
+ height: 15px;
+ width: 15px; }
+
+.ui-resizable-nw, .ui-resizable-se {
+ cursor: nwse-resize; }
+
+.ui-resizable-ne, .ui-resizable-sw {
+ cursor: nesw-resize; }
+
+.ui-resizable-handle {
+ position: absolute; }
+
+.ui-resizable-resizing {
+ pointer-events: none; }
+
#elementor-fatal-error-dialog button.dialog-ok {
color: #71d7f7; }
-#elementor-fatal-error-dialog .dialog-widget-header {
+#elementor-fatal-error-dialog .dialog-header {
font-size: 13px;
color: #6d7882; }
+.elementor-nerd-box {
+ padding: 30px;
+ text-align: center; }
+ .elementor-nerd-box-icon {
+ font-size: 52px;
+ color: #a4afb7; }
+ .elementor-nerd-box-title {
+ margin-top: 20px;
+ font-size: 16px;
+ font-weight: bold;
+ line-height: 1.4; }
+ .elementor-nerd-box-message {
+ margin-top: 20px;
+ line-height: 1.8;
+ font-size: 11px; }
+ .elementor-nerd-box .elementor-button.elementor-nerd-box-link {
+ background-color: #fcb92c;
+ color: #ffffff;
+ padding: 7px 25px;
+ margin-top: 20px;
+ -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
+ -webkit-transition: .5s;
+ -o-transition: .5s;
+ transition: .5s; }
+ .elementor-nerd-box .elementor-button.elementor-nerd-box-link:hover {
+ background-color: #fdca5e; }
+
.eicon-nerd:hover:before {
content: '\e965'; }
.eicon-nerd:active:before {
content: '\e964'; }
+.elementor-loader-wrapper {
+ position: absolute;
+ width: 300px;
+ left: 50%;
+ top: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center; }
+
+.elementor-loader {
+ -webkit-border-radius: 7px;
+ border-radius: 7px;
+ padding: 40px;
+ height: 150px;
+ width: 150px;
+ background-color: rgba(255, 255, 255, 0.9);
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02);
+ box-shadow: 2px 2px 20px 4px rgba(0, 0, 0, 0.02); }
+
+.elementor-loader-boxes {
+ height: 100%;
+ width: 100%;
+ position: relative; }
+
+.elementor-loader-box {
+ position: absolute;
+ background-color: #e6e9ec;
+ -webkit-animation: load 1.8s linear infinite;
+ animation: load 1.8s linear infinite; }
+ .elementor-loader-box:nth-of-type(1) {
+ width: 20%;
+ height: 100%;
+ left: 0;
+ top: 0; }
+ .elementor-loader-box:not(:nth-of-type(1)) {
+ right: 0;
+ height: 20%;
+ width: 60%; }
+ .elementor-loader-box:nth-of-type(2) {
+ top: 0;
+ -webkit-animation-delay: -0.45s;
+ animation-delay: -0.45s; }
+ .elementor-loader-box:nth-of-type(3) {
+ top: 40%;
+ -webkit-animation-delay: -0.9s;
+ animation-delay: -0.9s; }
+ .elementor-loader-box:nth-of-type(4) {
+ bottom: 0;
+ -webkit-animation-delay: -1.35s;
+ animation-delay: -1.35s; }
+
+@-webkit-keyframes load {
+ 0% {
+ opacity: .3; }
+ 50% {
+ opacity: 1; }
+ 100% {
+ opacity: .3; } }
+
+@keyframes load {
+ 0% {
+ opacity: .3; }
+ 50% {
+ opacity: 1; }
+ 100% {
+ opacity: .3; } }
+
+.elementor-loading-title {
+ color: #a4afb7;
+ text-align: center;
+ text-transform: uppercase;
+ margin-top: 30px;
+ letter-spacing: 7px;
+ font-size: 10px;
+ width: 100%; }
+
.elementor-button {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
text-transform: uppercase;
outline: none;
border: none;
z-index: 100000; }
.elementor-panel {
+ position: fixed;
+ height: 100%;
+ top: 0;
+ bottom: 0;
+ overflow: visible;
+ background-color: #e6e9ec;
+ z-index: 1;
font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
font-size: 13px; }
+ .elementor-editor-active .elementor-panel {
+ left: 0; }
+ @media (max-width: 1439px) {
+ .elementor-editor-preview .elementor-panel {
+ left: -280px; } }
+ @media (min-width: 1440px) {
+ .elementor-editor-preview .elementor-panel {
+ left: -300px; } }
+ .elementor-editor-preview .elementor-panel > .ui-resizable-e, .elementor-editor-preview .elementor-panel > .ui-resizable-w {
+ display: none; }
+ @media (max-width: 1439px) {
+ .elementor-panel {
+ width: 280px; } }
+ @media (min-width: 1440px) {
+ .elementor-panel {
+ width: 300px; } }
+ .elementor-panel .ps-scrollbar-y-rail {
+ z-index: 2; }
.elementor-panel ::-moz-selection {
background: #5bc0de;
color: #ffffff; }
background: #5bc0de;
color: #ffffff; }
.elementor-panel a {
- color: #B7084E; }
+ color: #D30C5C; }
.elementor-panel h1,
.elementor-panel h2,
.elementor-panel h3,
border: 0; }
.elementor-panel :focus {
outline: 0; }
- .elementor-panel#elementor-panel {
- position: fixed;
- height: 100%;
- top: 0;
- bottom: 0;
- overflow: visible;
- background-color: #e6e9ec; }
- @media (max-width: 1439px) {
- .elementor-panel {
- width: 280px; } }
- @media (min-width: 1440px) {
- .elementor-panel {
- width: 300px; } }
- .elementor-panel > .ui-resizable-e, .elementor-panel > .ui-resizable-w {
- position: absolute;
- top: 0;
- height: 100%;
- width: 7px;
- right: -5px;
- cursor: ew-resize; }
- .elementor-panel #elementor-panel-inner {
- position: relative;
- height: 100%;
- -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
- box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); }
- .elementor-panel .elementor-panel-container {
- clear: both;
- padding-left: 15px;
- padding-right: 15px; }
- .elementor-panel #elementor-panel-content-wrapper {
- position: absolute;
- bottom: 40px;
- top: 40px;
- left: 0;
- width: 100%; }
.elementor-panel .elementor-panel-box {
margin-top: 10px;
background-color: #fff; }
font-style: italic;
line-height: 1.4;
color: #a4afb7; }
- .elementor-panel .elementor-panel-nerd-box {
- padding: 30px 20px;
- text-align: center; }
- .elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-icon {
- font-size: 52px;
- color: #a4afb7; }
- .elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-title {
- margin-top: 20px;
- font-size: 16px;
- font-weight: bold; }
- .elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-message {
- margin-top: 20px;
- line-height: 1.4;
- font-size: 11px; }
- .elementor-panel .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link {
- background-color: #fcb92c;
- color: #ffffff;
- padding: 7px 25px;
- margin-top: 20px;
- -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
- box-shadow: 0 0 1px rgba(0, 0, 0, 0.1), 0 2px 2px rgba(0, 0, 0, 0.1);
- -webkit-transition: .5s;
- -o-transition: .5s;
- transition: .5s; }
- .elementor-panel .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link:hover {
- background-color: #fdca5e; }
.elementor-panel .elementor-controls-popover {
display: none;
position: absolute;
margin: -4px auto 5px;
padding-top: 15px;
width: 90%;
- z-index: 1;
+ z-index: 10000;
background-color: #fff; }
.elementor-panel .elementor-controls-popover:before {
content: '';
background-color: transparent; }
.elementor-panel .elementor-controls-popover div.elementor-control:before {
content: none; }
- .elementor-panel #elementor-panel-get-pro-elements .elementor-panel-nerd-box-message {
+ .elementor-panel #elementor-panel-get-pro-elements .elementor-nerd-box-message {
text-transform: uppercase; }
.elementor-panel .select2-container {
width: 100% !important; }
display: table;
height: 40px;
width: 100%;
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #fff; }
.elementor-panel #elementor-panel-header > * {
display: table-cell;
-webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); }
.elementor-panel .elementor-element:hover .icon, .elementor-panel .elementor-element:hover .title {
- color: #B7084E; }
+ color: #D30C5C; }
.elementor-panel .elementor-element .icon {
font-size: 28px;
padding-top: 15px;
-o-transition: right 1s;
transition: right 1s; }
.elementor-panel #elementor-panel-elements-search-input {
+ background-color: rgba(255, 255, 255, 0.7);
font-size: 11px;
- -webkit-border-radius: 0;
- border-radius: 0;
- padding: 10px 27px 10px 0;
+ padding: 10px 27px 10px 10px;
font-style: italic;
color: #a4afb7;
border: none;
-webkit-transition: all 1s;
-o-transition: all 1s;
transition: all 1s;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ appearance: none;
-webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
+ -moz-appearance: none; }
+ .elementor-panel #elementor-panel-elements-search-input + i {
+ right: 10px; }
.elementor-panel #elementor-panel-elements-search-input:focus {
- background-color: rgba(255, 255, 255, 0.7);
+ background-color: white;
padding-left: 15px; }
.elementor-panel #elementor-panel-elements-search-input:focus + i {
right: 15px; }
- .elementor-panel .elementor-panel-category:first-child .panel-elements-category-title {
- padding-top: 14px; }
- .elementor-panel .panel-elements-category-title-basic {
- display: none; }
- .elementor-panel .panel-elements-category-title {
- padding: 12px 15px;
- text-transform: uppercase;
- font-size: 11px; }
- .elementor-panel .panel-elements-category-items {
- overflow: hidden;
- padding: 0 5px; }
+ .elementor-panel #elementor-panel-elements-search-input::-webkit-input-placeholder {
+ color: #a4afb7; }
+ .elementor-panel #elementor-panel-elements-search-input:-ms-input-placeholder {
+ color: #a4afb7; }
+ .elementor-panel #elementor-panel-elements-search-input::-ms-input-placeholder {
+ color: #a4afb7; }
+ .elementor-panel #elementor-panel-elements-search-input::placeholder {
+ color: #a4afb7; }
+ .elementor-panel .elementor-panel-category {
+ position: relative; }
+ .elementor-panel .elementor-panel-category:first-child .elementor-panel-category-title {
+ padding-top: 14px; }
+ .elementor-panel .elementor-panel-category.elementor-active .elementor-panel-category-title:before {
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg); }
+ .elementor-panel .elementor-panel-category:not(.elementor-active):after {
+ content: '';
+ position: absolute;
+ left: 15px;
+ right: 15px;
+ bottom: 0;
+ height: 8px;
+ background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.03)), to(transparent));
+ background: -webkit-linear-gradient(rgba(0, 0, 0, 0.03), transparent);
+ background: -o-linear-gradient(rgba(0, 0, 0, 0.03), transparent);
+ background: linear-gradient(rgba(0, 0, 0, 0.03), transparent);
+ -webkit-transform: translateY(100%);
+ -ms-transform: translateY(100%);
+ transform: translateY(100%); }
+ .elementor-panel .elementor-panel-category-title {
+ margin: 0 15px;
+ padding: 20px 0;
+ position: relative;
+ text-transform: uppercase;
+ font-size: 11px;
+ cursor: pointer; }
+ .elementor-panel .elementor-panel-category-title:before {
+ content: "";
+ font-family: eicons;
+ position: absolute;
+ right: 0;
+ -webkit-transition: -webkit-transform .3s;
+ transition: -webkit-transform .3s;
+ -o-transition: transform .3s;
+ transition: transform .3s;
+ transition: transform .3s, -webkit-transform .3s; }
+ .elementor-panel .elementor-panel-category-items {
+ overflow: hidden;
+ padding: 0 5px;
+ display: none; }
.elementor-panel .elementor-panel-scheme-title {
padding: 10px 20px;
margin-top: 10px; }
background-color: #fff;
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 8px rgba(0, 0, 0, 0.1); }
+ .elementor-panel .elementor-panel-scheme-buttons .elementor-button {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
+ font-size: 11px;
+ font-weight: 400; }
.elementor-panel .elementor-panel-scheme-button-wrapper {
display: table-cell;
vertical-align: middle;
@media (min-width: 1440px) {
.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)) {
margin-right: 19px; } }
- @media (max-width: 1439px) {
- [class*="wp-version-4-9"] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)), [class*="wp-version-5"] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)) {
- margin-right: 5px; } }
- @media (min-width: 1440px) {
- [class*="wp-version-4-9"] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)), [class*="wp-version-5"] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)) {
- margin-right: 12px; } }
.elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active) {
float: none; }
.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active {
- -webkit-transform: translateY(10px);
- -ms-transform: translateY(10px);
- transform: translateY(10px); }
+ top: 10px; }
+ @media (max-width: 1439px) {
+ .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active {
+ border-width: 0 4px 0 5px; } }
+ @media (min-width: 1440px) {
+ .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active {
+ border-width: 0 7px 0 5px; } }
@media (max-width: 1439px) {
.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result {
margin-right: 4px; } }
vertical-align: middle; }
.elementor-panel .elementor-panel-scheme-typography-item-value select, .elementor-panel .elementor-panel-scheme-typography-item-value input {
width: 100%; }
- .elementor-panel .elementor-panel-scheme-item .elementor-panel-heading:not(.elementor-open) + .elementor-panel-scheme-typography-items {
+ .elementor-panel .elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-scheme-typography-items {
display: none; }
.elementor-panel .elementor-panel-scheme-color-system-scheme {
margin-bottom: 10px; }
background-image: -webkit-linear-gradient(top, #f3f3f3, #fff);
background-image: -o-linear-gradient(top, #f3f3f3, #fff);
background-image: linear-gradient(to bottom, #f3f3f3, #fff);
- border-bottom: 3px solid #B7084E; }
+ border-bottom: 3px solid #D30C5C; }
.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a {
display: block;
text-align: center;
.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-title {
color: #6d7882; }
+#elementor-panel-inner {
+ position: relative;
+ height: 100%;
+ -webkit-box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.2); }
+
+#elementor-panel-content-wrapper {
+ position: absolute;
+ bottom: 40px;
+ top: 40px;
+ left: 0;
+ width: 100%; }
+
+.elementor-panel-container {
+ clear: both;
+ padding-left: 15px;
+ padding-right: 15px; }
+
.media-modal.wp-core-ui input {
width: auto; }
transition: all ease-in-out .3s; }
.elementor-control a:hover {
border-bottom-color: inherit; }
+ .elementor-control .elementor-control-content {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-orient: vertical;
+ -webkit-box-direction: normal;
+ -webkit-flex-direction: column;
+ -ms-flex-direction: column;
+ flex-direction: column; }
.elementor-control.elementor-control-type-divider {
padding: 0;
margin-bottom: -1px;
border-color: #e6e9ec;
border-style: solid; }
.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick {
- border-top-width: 3px; }
+ border-top-width: 1px; }
.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default {
margin-right: 20px;
margin-left: 20px; }
- .elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider):before {
- content: '';
- height: 1px;
- display: block;
- margin-bottom: 15px;
- background-color: #e6e9ec; }
+ .elementor-control.elementor-control-type-divider + .elementor-control:not(.elementor-control-type-section) {
+ padding-top: 15px; }
.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp {
margin-top: 15px; }
.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before {
+ content: '';
+ height: 1px;
+ display: block;
+ margin-bottom: 15px;
background-color: transparent; }
.elementor-control.elementor-control-separator-before {
padding-top: 15px; }
.elementor-control.elementor-control-separator-before:before {
content: '';
position: absolute;
- height: 3px;
+ height: 1px;
width: 100%;
top: 0;
left: 0;
.elementor-control.elementor-control-separator-after:after {
content: '';
position: absolute;
- height: 3px;
+ height: 1px;
width: 100%;
bottom: 0;
left: 0;
background-color: #d5dadf; }
- .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs {
+ .elementor-control.elementor-control-separator-after + .elementor-control-type-tabs,
+ .elementor-control.elementor-control-separator-after + .elementor-control-separator-default {
padding-top: 15px; }
.elementor-control.elementor-control-deprecated {
color: #b01b1b; }
display: none; }
body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile {
display: none; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper {
+ position: relative; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper select {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ color: #495157;
+ font-size: 12px;
+ font-family: inherit;
+ font-weight: inherit;
+ font-style: inherit;
+ text-transform: inherit;
+ letter-spacing: inherit;
+ line-height: inherit;
+ -webkit-flex-basis: 100%;
+ -ms-flex-preferred-size: 100%;
+ flex-basis: 100%;
+ padding-left: 5px;
+ padding-right: 20px;
+ cursor: pointer; }
+ .elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after {
+ font-family: eicons;
+ content: '\e955';
+ font-size: 12px;
+ position: absolute;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
+ right: 5px;
+ pointer-events: none; }
.elementor-control .select2-container {
width: 100% !important;
outline: none; }
.elementor-control .select2-container.select2-container--open .select2-selection--multiple, .elementor-control .select2-container.select2-container--focus .select2-selection--single,
.elementor-control .select2-container.select2-container--focus .select2-selection--multiple {
border-color: #a4afb7; }
+ .elementor-control .select2-container.select2-container--default .select2-selection {
+ -webkit-border-radius: 3px;
+ border-radius: 3px; }
.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear {
display: none; }
.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice {
border: none;
-webkit-border-radius: 0;
border-radius: 0; }
+ .elementor-control .select2-container.select2-container--default .select2-selection__rendered {
+ line-height: 27px; }
.elementor-control .select2-selection {
outline: none; }
.elementor-control .select2-selection--single {
height: 27px;
top: 0; }
+.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,
+.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before {
+ content: '\f0d7'; }
+
+.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,
+.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before {
+ content: ""; }
+
.elementor-panel-heading {
display: table;
table-layout: fixed;
width: 100%;
border-bottom: 1px solid #e6e9ec;
cursor: pointer; }
- .elementor-panel-heading:not(.elementor-open) .elementor-panel-heading-toggle .fa:before {
- content: ""; }
- .elementor-panel-heading.elementor-open .elementor-panel-heading-toggle .fa:before {
- content: '\f0d7'; }
.elementor-panel-heading > * {
display: table-cell;
vertical-align: middle; }
.elementor-choices input:not(:checked) + .elementor-choices-label {
background-color: #fff;
color: #a4afb7; }
+ .elementor-choices input:not(:checked) + .elementor-choices-label:nth-child(2) {
+ -webkit-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px; }
+ .elementor-choices input:not(:checked) + .elementor-choices-label:last-child {
+ -webkit-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0; }
.elementor-choices .elementor-choices-label {
display: table-cell;
vertical-align: middle;
-webkit-border-radius: 5px;
border-radius: 5px;
position: relative;
- width: 67%; }
+ width: 70%; }
.elementor-slider .ui-slider-handle {
height: 16px;
width: 16px;
cursor: pointer; }
.elementor-slider-input {
- width: 33%;
+ width: 30%;
float: right; }
.elementor-slider-input input {
- width: 80%;
- float: right; }
+ max-width: 80%;
+ float: right;
+ padding: 5px 5px; }
.elementor-units-choices {
-webkit-box-flex: 1;
.elementor-control-position .elementor-choices {
direction: ltr; }
+.elementor-control-direction-ltr {
+ direction: ltr; }
+
+.elementor-control-direction-rtl {
+ direction: rtl; }
+
.elementor-control-type-media .elementor-control-media {
padding: 7px;
border: 1px solid;
- height: 150px; }
+ height: 150px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out; }
.elementor-control-type-media .elementor-control-media:not(:hover) {
border-color: #d5dadf; }
.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button {
border-color: #a4afb7; }
.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button {
background-color: #a4afb7; }
- .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-image-area {
+ .elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area {
display: none; }
.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button {
display: none; }
color: #fff;
font-size: 20px; }
-.elementor-control-type-media .elementor-control-media-image-area:not(:hover) .elementor-control-media-delete {
- display: none; }
-
-.elementor-control-type-media .elementor-control-media-image-area:hover .elementor-control-media-image {
- opacity: .5; }
+.elementor-control-type-media .elementor-control-media-area {
+ background-image: -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -webkit-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ background-image: -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), -o-linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ background-image: linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd), linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%, #ddd);
+ -webkit-background-size: 16px 16px;
+ background-size: 16px 16px;
+ background-position: 0 0, 8px 8px;
+ background-color: #f6f6f6;
+ overflow: hidden; }
+ .elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ bottom: -30px; }
+ .elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image {
+ opacity: .9; }
+ .elementor-control-type-media .elementor-control-media-area i {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ color: rgba(255, 255, 255, 0.7);
+ font-size: 21px; }
.elementor-control-type-media .elementor-control-media-delete {
position: absolute;
font-size: 11px;
color: #fff;
background-color: #a4afb7;
- text-transform: uppercase; }
+ text-transform: uppercase;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+ -webkit-box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 3px 3px rgba(0, 0, 0, 0.1); }
.elementor-control-type-media .elementor-control-media-image {
height: 100%;
padding: 5px;
font-size: 12px; }
+.elementor-control-type-url .elementor-control-url-autocomplete-spinner {
+ display: none;
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ top: 7px;
+ left: 44px; }
+
.elementor-control-type-url .elementor-input {
direction: ltr; }
.elementor-control-type-url .elementor-input:not(:focus) + .elementor-control-url-more {
.elementor-control-type-url .elementor-input:focus + .elementor-control-url-more {
border-color: #a4afb7; }
+.elementor-autocomplete-menu {
+ position: absolute;
+ background: #fff;
+ color: #495157;
+ border: 1px solid #a4afb7;
+ margin: 0;
+ list-style: none;
+ padding: 4px 0;
+ height: auto;
+ width: 100%;
+ min-width: 260px;
+ max-width: 300px;
+ max-height: 200px;
+ overflow-y: auto;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-transition: all .3s ease-in-out;
+ -o-transition: all .3s ease-in-out;
+ transition: all .3s ease-in-out;
+ cursor: default;
+ z-index: 1; }
+ .elementor-autocomplete-menu .ui-menu-item {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ -webkit-align-self: baseline;
+ -ms-flex-item-align: baseline;
+ align-self: baseline;
+ padding: 5px 8px;
+ font-size: 12px;
+ width: 100%;
+ line-height: 1.2;
+ cursor: pointer; }
+ .elementor-autocomplete-menu .ui-menu-item.ui-state-hover, .elementor-autocomplete-menu .ui-menu-item.ui-state-active, .elementor-autocomplete-menu .ui-menu-item.ui-state-focus {
+ background: #e6e9ec; }
+ .elementor-autocomplete-menu .elementor-autocomplete-item-info {
+ font-size: 10px;
+ padding-top: 2px; }
+
.elementor-control-type-section {
margin-top: 10px;
padding: 0; }
- .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section) {
- padding-top: 15px; }
- .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before {
- display: none; }
+ .elementor-control-type-section.elementor-open {
+ padding-bottom: 15px; }
+ .elementor-control-type-section + .elementor-control:not(.elementor-control-type-section):before {
+ display: none; }
.elementor-control-type-color > .elementor-control-content > .elementor-control-field > .elementor-control-title {
width: 70%; }
border-radius: 3px; }
.elementor-control-type-wysiwyg #insert-media-button {
- margin-top: 7px;
height: initial;
- line-height: 1;
+ line-height: 24px;
font-size: 10px;
- padding: 3px 7px;
background-color: #e6e9ec; }
.elementor-control-type-wysiwyg .ed_button {
text-align: center;
width: 100%;
padding: 0;
- line-height: 30px;
+ line-height: 27px;
border-top: 1px solid #a4afb7;
border-bottom: 1px solid #a4afb7;
border-right: 1px solid #a4afb7;
width: auto;
height: 26px; }
+.elementor-group-control-css-filter .elementor-slider {
+ height: 6px;
+ -webkit-box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 1px 1px inset rgba(0, 0, 0, 0.2); }
+
+.elementor-group-control-css-filter .elementor-slider .ui-slider-handle {
+ -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.1);
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(0, 0, 0, 0.1); }
+
+.elementor-group-control-css-filter .elementor-control-content > .elementor-control-field > .elementor-control-input-wrapper {
+ margin-top: 0;
+ margin-bottom: 5px; }
+
+.elementor-group-control-blur .elementor-slider {
+ background: url("../images/blur.png");
+ -webkit-background-size: cover;
+ background-size: cover;
+ background-position: center; }
+
+.elementor-group-control-contrast .elementor-slider {
+ background: url("../images/contrast.png");
+ -webkit-background-size: 100% 100%;
+ background-size: 100% 100%; }
+
+.elementor-group-control-hue .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(red), color-stop(orange), color-stop(yellow), color-stop(greenyellow), color-stop(limegreen), color-stop(deepskyblue), color-stop(blue), color-stop(95%, darkviolet));
+ background-image: -webkit-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%);
+ background-image: -o-linear-gradient(left, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%);
+ background-image: linear-gradient(to right, red, orange, yellow, greenyellow, limegreen, deepskyblue, blue, darkviolet 95%); }
+
+.elementor-group-control-saturate .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(gray), to(red));
+ background-image: -webkit-linear-gradient(left, gray, red);
+ background-image: -o-linear-gradient(left, gray, red);
+ background-image: linear-gradient(to right, gray, red); }
+
+.elementor-group-control-brightness .elementor-slider {
+ background-image: -webkit-gradient(linear, left top, right top, from(black), to(white));
+ background-image: -webkit-linear-gradient(left, black, white);
+ background-image: -o-linear-gradient(left, black, white);
+ background-image: linear-gradient(to right, black, white); }
+
.wp-picker-container.wp-picker-active {
position: absolute;
z-index: 10000;
- top: 0;
+ top: -9px;
right: 7px;
background-color: #fff;
border: solid #fff;
.wp-picker-container:not(.wp-picker-active) .wp-color-result {
margin: 0; }
-.wp-picker-container.wp-picker-active {
- -webkit-transform: translateY(6px);
- -ms-transform: translateY(6px);
- transform: translateY(6px); }
- [class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active,
- [class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active {
- padding-top: 9px; }
- .wp-picker-container.wp-picker-active .wp-color-result {
- margin-right: 3px; }
+[class*="wp-version-4-9"] #elementor-controls .wp-picker-container.wp-picker-active,
+[class*="wp-version-5"] #elementor-controls .wp-picker-container.wp-picker-active {
+ padding-top: 9px; }
+
+.wp-picker-container.wp-picker-active .wp-color-result {
+ margin-right: 3px; }
.wp-picker-container input[type="text"].wp-color-picker {
float: left;
box-shadow: 3px 1px 5px rgba(0, 0, 0, 0.1);
cursor: pointer; }
#elementor-mode-switcher:hover {
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #FFFFFF; }
body.elementor-editor-preview #elementor-mode-switcher {
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #FFFFFF; }
#elementor-mode-switcher-inner, #elementor-mode-switcher-preview {
.elementor-revision-item__wrapper.current {
font-weight: bold; }
.elementor-revision-item__wrapper .elementor-revision-item__tools-current {
- color: #B7084E; }
+ color: #D30C5C; }
.elementor-revision-item:hover:not(.elementor-revision-current-preview) {
background-color: rgba(230, 233, 236, 0.3); }
border-left: none; }
.elementor-templates-modal .dialog-widget-content {
+ font-family: Roboto, Arial, Helvetica, Verdana, sans-serif;
background-color: #f1f3f5;
width: 100%; }
@media (max-width: 1439px) {
.elementor-templates-modal .dialog-widget-content {
max-width: 1200px; } }
-.elementor-templates-modal .dialog-widget-header {
+.elementor-templates-modal .dialog-header {
padding: 0;
background-color: #fff;
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.1);
overflow: auto;
padding: 25px 30px 30px; }
+.elementor-templates-modal .dialog-content {
+ height: 100%; }
+
+.elementor-templates-modal .dialog-loading {
+ display: none; }
+
.elementor-templates-modal__header {
display: -webkit-box;
display: -webkit-flex;
align-items: center; }
.elementor-templates-modal__header__logo__icon-wrapper {
padding: 4px 7px 6px;
- background-image: -webkit-linear-gradient(225deg, #EF295A, #434363);
- background-image: -o-linear-gradient(225deg, #EF295A, #434363);
- background-image: linear-gradient(-135deg, #EF295A, #434363);
+ background-image: -webkit-linear-gradient(225deg, #f2295b, #434363);
+ background-image: -o-linear-gradient(225deg, #f2295b, #434363);
+ background-image: linear-gradient(-135deg, #f2295b, #434363);
-webkit-border-radius: 2px;
border-radius: 2px;
margin-right: 10px; }
cursor: pointer; }
.elementor-templates-modal__header__item > i:not(:hover) {
color: #a4afb7; }
- .elementor-templates-modal__header__close-modal {
+ .elementor-templates-modal__header__close--normal {
width: 45px;
border-left: 1px solid #e6e9ec; }
- .elementor-templates-modal__header__close-modal i {
+ .elementor-templates-modal__header__close--normal i {
font-size: 18px; }
+ .elementor-templates-modal__header__close--skip {
+ padding: 10px;
+ padding-left: 20px;
+ margin-right: 10px;
+ color: #fff;
+ background-color: #a4afb7;
+ font-size: 11px;
+ font-weight: normal;
+ line-height: 1;
+ text-transform: uppercase;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+ cursor: pointer; }
+ .elementor-templates-modal__header__close--skip > i {
+ font-size: inherit;
+ padding-left: 10px;
+ margin-left: 15px;
+ border-left: 1px solid; }
+ .elementor-templates-modal__header__close--skip > i:not(:hover) {
+ color: #fff; }
#elementor-template-library-modal a.elementor-template-library-blank-footer-link {
font-style: normal;
text-decoration: underline;
color: #39b54a; }
#elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover {
- font-weight: 500; }
-
-#elementor-template-library-modal .dialog-lightbox-content {
- height: 100%; }
-
-#elementor-template-library-modal .dialog-lightbox-loading {
- display: none; }
+ color: #2d8e3a; }
#elementor-template-library-header-menu {
text-align: center;
#elementor-template-library-header-preview-back i:before {
content: ""; }
-#elementor-template-library-loading .elementor-loading-title {
- color: #a4afb7; }
-
-#elementor-template-library-loading .elementor-loader-box {
- background-color: #d5dadf; }
-
#elementor-template-library-templates {
padding: 0 15px; }
#elementor-template-library-templates[data-template-source="local"] #elementor-template-library-templates-container {
-webkit-box-shadow: 1px 1px 20px 0 rgba(0, 0, 0, 0.03);
box-shadow: 1px 1px 20px 0 rgba(0, 0, 0, 0.03);
- margin-top: 10px; }
+ margin-top: 10px;
+ margin-bottom: 45px; }
#elementor-template-library-templates[data-template-source="local"] .elementor-template-library-order-input:checked + .elementor-template-library-order-label {
color: #6d7882; }
#elementor-template-library-templates[data-template-source="remote"] #elementor-template-library-templates-container {
#elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label {
color: #495157; }
#elementor-template-library-filter-my-favorites:checked + #elementor-template-library-filter-my-favorites-label i:after {
- color: #B7084E;
+ color: #D30C5C;
content: '\f004'; }
#elementor-template-library-filter-my-favorites-label {
#elementor-template-library-filter-my-favorites-label:hover {
color: #556068; }
#elementor-template-library-filter-my-favorites-label:hover i:after {
- color: #B7084E; }
+ color: #D30C5C; }
#elementor-template-library-filter-my-favorites-label i {
padding-right: 5px; }
#elementor-template-library-filter-my-favorites-label i:after {
#elementor-template-library-filter-text::-webkit-input-placeholder {
font-weight: 300;
color: #c2cbd2; }
- #elementor-template-library-filter-text::-moz-placeholder {
- font-weight: 300;
- color: #c2cbd2; }
#elementor-template-library-filter-text:-ms-input-placeholder {
font-weight: 300;
color: #c2cbd2; }
border-color: #c2cbd2; }
#elementor-template-library-filter-text:focus::-webkit-input-placeholder {
color: #a4afb7; }
- #elementor-template-library-filter-text:focus::-moz-placeholder {
- color: #a4afb7; }
#elementor-template-library-filter-text:focus:-ms-input-placeholder {
color: #a4afb7; }
#elementor-template-library-filter-text:focus::-ms-input-placeholder {
text-transform: uppercase;
top: 5px;
right: 5px;
- background-color: #B7084E;
+ background-color: #D30C5C;
color: #d5dadf;
padding: 2px 4px 0;
font-size: 9px;
display: none; }
.elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked + .elementor-template-library-template-favorite-label i:before {
content: '\f004';
- color: #B7084E; }
+ color: #D30C5C; }
.elementor-template-library-template-remote .elementor-template-library-template-favorite-label {
cursor: pointer; }
.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i {
- color: #B7084E; }
+ color: #D30C5C; }
@media (max-width: 1439px) {
.elementor-template-library-template-page {
border-radius: 3px 3px 0 0; }
.elementor-template-library-template-local:last-child {
-webkit-border-radius: 0 0 3px 3px;
- border-radius: 0 0 3px 3px;
- margin-bottom: 45px; }
+ border-radius: 0 0 3px 3px; }
.elementor-template-library-template-local .elementor-template-library-template-name {
font-weight: 500; }
.elementor-template-library-template-local .elementor-template-library-template-name,
border: none; }
#elementor-template-library-save-template-name::-webkit-input-placeholder {
color: #a4afb7; }
- #elementor-template-library-save-template-name::-moz-placeholder {
- color: #a4afb7; }
#elementor-template-library-save-template-name:-ms-input-placeholder {
color: #a4afb7; }
#elementor-template-library-save-template-name::-ms-input-placeholder {
#elementor-template-library-save-template-submit {
width: 150px;
-webkit-border-radius: 0 3px 3px 0;
- border-radius: 0 3px 3px 0;
- font-weight: 500; }
+ border-radius: 0 3px 3px 0; }
#elementor-template-library-save-template-submit:hover {
-webkit-box-shadow: none;
box-shadow: none; }
#elementor-template-library-import-form-label {
margin-top: 20px;
padding: 15px 35px;
- font-size: 16px;
display: inline-block; }
#elementor-template-library-import-form-input {
display: none; }
-ms-transform: translateX(-50%);
transform: translateX(-50%);
color: #a4afb7;
- font-size: 16px;
font-style: italic; }
@media (max-height: 700px) {
.elementor-template-library-blank-footer {
background-color: #fff;
border: 1px solid #a4afb7;
-webkit-border-radius: 3px;
- border-radius: 3px; }
+ border-radius: 3px;
+ z-index: 1; }
.elementor-tags-list__group-title {
color: #495157;
font-weight: bold;
width: 260px;
background-color: #e6e9ec;
-webkit-box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3);
- box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3); }
+ box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.3);
+ z-index: 1; }
.elementor-tag-settings-popup:before {
content: '';
position: absolute;
-webkit-flex-grow: 1;
-ms-flex-positive: 1;
flex-grow: 1; }
- .elementor-label-inline .elementor-control-dynamic-switcher-wrapper {
+ .elementor-label-inline > .elementor-control-content > .elementor-control-field > .elementor-control-dynamic-switcher-wrapper {
width: 100%;
padding-bottom: 10px; }
cursor: pointer; }
#elementor-toast .dialog-button:last-child {
margin-right: 0; }
+
+.elementor-context-menu {
+ position: absolute;
+ width: 200px;
+ background-color: #fff;
+ border: 1px solid #e6e9ec;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.09);
+ box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.09);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ z-index: 3; }
+ .elementor-context-menu-list__group {
+ padding: 5px 0; }
+ .elementor-context-menu-list__group:not(:last-child) {
+ border-bottom: 1px solid #e6e9ec; }
+ .elementor-context-menu-list__item {
+ padding: 5px 10px;
+ padding-right: 20px;
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ cursor: pointer; }
+ .elementor-context-menu-list__item--disabled {
+ cursor: default;
+ color: #d5dadf; }
+ .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover {
+ background-color: #71d7f7; }
+ .elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover > * {
+ color: #fff; }
+ .elementor-context-menu-list__item__icon {
+ width: 20px;
+ color: #c2cbd2; }
+ .elementor-context-menu-list__item__title {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1; }
+ .elementor-context-menu-list__item__shortcut {
+ color: #d5dadf; }
+ .elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover {
+ background-color: #d72b3f; }
+ .elementor-context-menu .eicon-pro-icon {
+ color: #fcb92c; }
+
+.elementor-introduction {
+ position: absolute;
+ width: 270px;
+ padding: 30px 20px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.07);
+ box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.07);
+ text-align: center; }
+ .elementor-introduction:before {
+ content: '';
+ position: absolute;
+ border: solid transparent;
+ border-width: 7px 5px;
+ border-bottom-color: #fff;
+ top: -14px;
+ left: 50%;
+ -webkit-transform: translateX(-50%);
+ -ms-transform: translateX(-50%);
+ transform: translateX(-50%); }
+ .elementor-introduction .dialog-header {
+ color: #6d7882;
+ font-size: 16px; }
+ .elementor-introduction .dialog-message {
+ font-size: 13px;
+ line-height: 1.6;
+ margin-top: 10px;
+ color: #a4afb7; }
+ .elementor-introduction .dialog-buttons-wrapper {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ -webkit-justify-content: center;
+ -ms-flex-pack: center;
+ justify-content: center;
+ margin-top: 25px; }
+ .elementor-introduction .dialog-button {
+ font-size: 11px; }
+ .elementor-introduction .dialog-ok {
+ padding: 7px 27px;
+ text-transform: capitalize; }
+ .elementor-introduction .dialog-learn-more {
+ color: #39b54a;
+ margin-right: 15px;
+ cursor: pointer; }
+
+#elementor-navigator {
+ position: fixed;
+ top: 100px;
+ width: 240px;
+ height: 339px;
+ right: 30px;
+ background-color: #fff;
+ -webkit-box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: 0 2px 20px 0 rgba(0, 0, 0, 0.1);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ overflow: hidden;
+ z-index: 2;
+ display: none; }
+ body.elementor-navigator-docked #elementor-navigator {
+ top: 0;
+ right: 0;
+ height: 100%; }
+ body:not(.elementor-navigator-docked) #elementor-navigator {
+ -webkit-border-radius: 5px;
+ border-radius: 5px; }
+ #elementor-navigator__inner {
+ height: 100%;
+ background-color: #e6e9ec; }
+ #elementor-navigator__header {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center;
+ -webkit-box-pack: justify;
+ -webkit-justify-content: space-between;
+ -ms-flex-pack: justify;
+ justify-content: space-between;
+ padding: 12px 10px;
+ background-color: #fff;
+ border-bottom: 1px solid #e6e9ec;
+ cursor: move; }
+ #elementor-navigator__close, #elementor-navigator__toggle-all {
+ -webkit-transition: color .5s;
+ -o-transition: color .5s;
+ transition: color .5s;
+ cursor: pointer; }
+ #elementor-navigator__close:not(:hover), #elementor-navigator__toggle-all:not(:hover) {
+ color: #a4afb7; }
+ #elementor-navigator__toggle-all {
+ font-size: 13px; }
+ #elementor-navigator__close {
+ font-size: 11px; }
+ #elementor-navigator__elements {
+ height: -webkit-calc(100% - 49px);
+ height: calc(100% - 49px);
+ overflow: auto;
+ position: relative; }
+ .elementor-navigator-docked #elementor-navigator__elements {
+ height: -webkit-calc(100% - 35px);
+ height: calc(100% - 35px); }
+ #elementor-navigator__footer {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ bottom: 0;
+ text-align: center;
+ background-color: #fff;
+ border-top: 1px solid #e6e9ec;
+ color: #a4afb7; }
+ .elementor-navigator-docked #elementor-navigator__footer {
+ display: none; }
+
+.elementor-navigator__item {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ height: 32px;
+ padding-right: 4px;
+ font-size: 12px;
+ border-bottom: 1px solid #e6e9ec;
+ cursor: pointer; }
+ .elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i {
+ -webkit-transform: rotate(-90deg);
+ -ms-transform: rotate(-90deg);
+ transform: rotate(-90deg); }
+ .elementor-navigator__item > * {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ -ms-flex-align: center;
+ align-items: center; }
+ .elementor-navigator__item + .elementor-navigator__elements {
+ display: none; }
+
+.elementor-navigator__elements .elementor-empty-view {
+ padding: 10px;
+ border-bottom: 1px solid #e6e9ec; }
+ .elementor-navigator__elements .elementor-empty-view__title {
+ margin-left: 23px;
+ color: #c2cbd2;
+ font-size: 10px;
+ font-style: italic; }
+
+.elementor-navigator__elements .ui-sortable-helper {
+ background-color: #fff;
+ -webkit-box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: 1px 2px 5px 0 rgba(0, 0, 0, 0.1);
+ -webkit-transform: rotate(4deg);
+ -ms-transform: rotate(4deg);
+ transform: rotate(4deg);
+ border: 1px solid #e6e9ec;
+ pointer-events: none; }
+
+.elementor-navigator__elements .ui-sortable-placeholder {
+ background-color: #f1f3f5; }
+
+.elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view {
+ border-top: 2px solid #71d7f7; }
+ .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view .elementor-empty-view__title {
+ display: none; }
+ .elementor-navigator__element.elementor-dragging-on-child > .elementor-navigator__elements > .elementor-empty-view + .ui-sortable-placeholder {
+ display: none; }
+
+.elementor-navigator__element:not(.elementor-navigator__element--has-children) .elementor-navigator__element__list-toggle {
+ visibility: hidden; }
+
+.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item .elementor-navigator__element__toggle {
+ color: #71d7f7; }
+
+.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item:not(:hover) .elementor-navigator__element__toggle {
+ display: none; }
+
+.elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item.elementor-editing {
+ background-color: #71d7f7; }
+ .elementor-navigator__element:not(.elementor-navigator__element--hidden) > .elementor-navigator__item.elementor-editing > * {
+ color: #fff; }
+
+.elementor-navigator__element__list-toggle {
+ margin-right: 7px;
+ -webkit-transition: -webkit-transform .3s;
+ transition: -webkit-transform .3s;
+ -o-transition: transform .3s;
+ transition: transform .3s;
+ transition: transform .3s, -webkit-transform .3s;
+ color: #a4afb7; }
+
+.elementor-navigator__element__element-type {
+ margin-right: 8px; }
+
+.elementor-navigator__element__title {
+ -webkit-box-flex: 1;
+ -webkit-flex-grow: 1;
+ -ms-flex-positive: 1;
+ flex-grow: 1;
+ overflow: hidden; }
+ .elementor-navigator__element__title__text {
+ white-space: nowrap;
+ -webkit-user-select: text; }
+ .elementor-navigator__element__title__text[contenteditable="true"] {
+ outline: none;
+ color: #6d7882;
+ background-color: #fff;
+ padding: 2px 3px;
+ -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); }
+ .elementor-navigator__element__title__text:not([contenteditable="true"]) {
+ overflow: hidden;
+ -o-text-overflow: ellipsis;
+ text-overflow: ellipsis; }
+
+.elementor-navigator__element__toggle {
+ text-align: right;
+ font-size: 13px;
+ padding: 0 5px; }
+
+.elementor-navigator__element--hidden .elementor-navigator__element__title,
+.elementor-navigator__element--hidden .elementor-navigator__element__toggle {
+ opacity: .5; }
+
+.elementor-navigator__element-column {
+ background-color: #fafbfb; }
+ .elementor-navigator__element-column > .elementor-navigator__item .elementor-navigator__element__element-type {
+ color: #a4afb7; }
+
+.elementor-navigator__element-section {
+ background-color: #fff; }
/*# sourceMappingURL=editor.css.map */
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-@charset "UTF-8";.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:4;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-message{padding:0 20px;min-height:50px}.dialog-type-lightbox .dialog-message,.dialog-type-lightbox .dialog-widget-header{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-widget-header{padding:20px 0;font-weight:500}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-widget-header,.dialog-lightbox-widget .dialog-widget-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-right:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}*,:after,:before{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}body,html{height:100%}html{background-color:#f1f1f1}iframe,img{border:0 none}li{list-style:none}a,body{text-decoration:none}body{color:#6d7882;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px;font-weight:400;line-height:1;text-transform:none;overflow:hidden}body a{color:#71d7f7}body a:hover{color:#b7084e}body.elementor-editor-active #elementor-preview{right:0}@media (max-width:1439px){body.elementor-editor-active #elementor-preview{left:280px}}@media (min-width:1440px){body.elementor-editor-active #elementor-preview{left:300px}}body.elementor-editor-active #elementor-panel{left:0}body.elementor-editor-active #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-editor-preview #elementor-preview{left:0}@media (max-width:1439px){body.elementor-editor-preview #elementor-panel{left:-280px}}@media (min-width:1440px){body.elementor-editor-preview #elementor-panel{left:-300px}}body.elementor-editor-preview #elementor-panel>.ui-resizable-e,body.elementor-editor-preview #elementor-panel>.ui-resizable-w{display:none}body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before{content:""}#elementor-panel:not(.ui-resizable-resizing),#elementor-preview:not(.ui-resizable-resizing){-webkit-transition:left .5s,width .5s;-o-transition:left .5s,width .5s;transition:left .5s,width .5s}#elementor-panel .ps-scrollbar-y-rail,#elementor-preview .ps-scrollbar-y-rail{z-index:2}#elementor-loading{position:fixed;top:0;left:0;bottom:0;right:0;background:#f1f3f5;z-index:4}.elementor-loader-wrapper{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);width:100px}.elementor-loader-wrapper .elementor-loader{height:100px;position:relative}.elementor-loader-wrapper .elementor-loader-box{background-color:#495157;position:absolute;-webkit-animation:load 1.8s linear infinite;animation:load 1.8s linear infinite}.elementor-loader-wrapper .elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}.elementor-loader-wrapper .elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}.elementor-loader-wrapper .elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}.elementor-loader-wrapper .elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}.elementor-loader-wrapper .elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}.elementor-loading-title{color:#495157;text-align:center;text-transform:uppercase;margin-top:30px;letter-spacing:7px;font-size:10px;-webkit-animation:load-title 1.5s linear infinite;animation:load-title 1.5s linear infinite}@-webkit-keyframes load-title{0%{opacity:1}50%{opacity:.6}to{opacity:1}}@keyframes load-title{0%{opacity:1}50%{opacity:.6}to{opacity:1}}#elementor-preview-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fff}#elementor-preview-loading i{color:#d5dadf;font-size:50px}.select2-container{z-index:4}.select2-dropdown{border-color:#a4afb7}.select2-dropdown .select2-search__field{outline:none}#elementor-fatal-error-dialog button.dialog-ok{color:#71d7f7}#elementor-fatal-error-dialog .dialog-widget-header{font-size:13px;color:#6d7882}.eicon-nerd:hover:before{content:"\e965"}.eicon-nerd:active:before{content:"\e964"}.elementor-button{text-transform:uppercase;outline:none;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-right:10px}.elementor-input-style,input,select,textarea{-webkit-border-radius:3px;border-radius:3px;font-size:12px;width:100%;background:none;-webkit-box-shadow:none;box-shadow:none;color:#495157;border:1px solid;outline:none}.elementor-input-style:not(:focus),input:not(:focus),select:not(:focus),textarea:not(:focus){border-color:#d5dadf}.elementor-input-style:focus,input:focus,select:focus,textarea:focus{border-color:#a4afb7}.elementor-error input,.elementor-error select,.elementor-error textarea{border-color:#b01b1b}.elementor-input-style,input,textarea{padding:5px 8px}.elementor-input-style,textarea{resize:vertical}input[type=checkbox],input[type=radio]{border:1px solid #d5dadf;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-transition:border-color .05s ease-in-out;-o-transition:.05s border-color ease-in-out;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=radio]:focus{border-color:#a4afb7}input[disabled]{background-color:#e6e9ec;cursor:not-allowed;opacity:1}select{height:27px}.ps-container{-ms-touch-action:none;overflow:hidden!important}.ps-container.ps-active-x>.ps-scrollbar-x-rail,.ps-container.ps-active-y>.ps-scrollbar-y-rail{display:block}.ps-container.ps-in-scrolling{pointer-events:none}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container>.ps-scrollbar-x-rail{display:none;position:absolute;-webkit-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;bottom:3px;height:8px}.ps-container>.ps-scrollbar-x-rail>.ps-scrollbar-x{position:absolute;background-color:#aaa;-webkit-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;bottom:0;height:8px}.ps-container>.ps-scrollbar-y-rail{display:none;position:absolute;-webkit-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;right:3px;width:8px}.ps-container>.ps-scrollbar-y-rail>.ps-scrollbar-y{position:absolute;background-color:#aaa;-webkit-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;right:0;width:8px}.ps-container:hover.ps-in-scrolling{pointer-events:none}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container:hover>.ps-scrollbar-x-rail,.ps-container:hover>.ps-scrollbar-y-rail{opacity:.6}.ps-container:hover>.ps-scrollbar-x-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x{background-color:#999}.ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y{background-color:#999}#nprogress{pointer-events:none}#nprogress .bar{background:#39b54a;position:fixed;z-index:3;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;-webkit-box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;opacity:1;-webkit-transform:rotate(3deg) translateY(-4px);-ms-transform:rotate(3deg) translateY(-4px);transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:none;position:fixed;z-index:3;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;box-sizing:border-box;border:2px solid transparent;border-top-color:#39b54a;border-left-color:#39b54a;-webkit-border-radius:50%;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}#nprogress .bar,#nprogress .spinner{z-index:6}.elementor-panel{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px}.elementor-panel ::-moz-selection{background:#5bc0de;color:#fff}.elementor-panel ::selection{background:#5bc0de;color:#fff}.elementor-panel a{color:#b7084e}.elementor-panel h1,.elementor-panel h2,.elementor-panel h3,.elementor-panel h4,.elementor-panel h5,.elementor-panel h6{font-size:100%;font-weight:400}.elementor-panel abbr,.elementor-panel acronym{border:0;font-variant:normal}.elementor-panel sup{vertical-align:text-top}.elementor-panel sub{vertical-align:text-bottom}.elementor-panel img{max-width:100%;height:auto;border:0}.elementor-panel ::-moz-focus-inner{padding:0;border:0}.elementor-panel :focus{outline:0}.elementor-panel#elementor-panel{position:fixed;height:100%;top:0;bottom:0;overflow:visible;background-color:#e6e9ec}@media (max-width:1439px){.elementor-panel{width:280px}}@media (min-width:1440px){.elementor-panel{width:300px}}.elementor-panel>.ui-resizable-e,.elementor-panel>.ui-resizable-w{position:absolute;top:0;height:100%;width:7px;right:-5px;cursor:ew-resize}.elementor-panel #elementor-panel-inner{position:relative;height:100%;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-shadow:0 0 5px 0 rgba(0,0,0,.2)}.elementor-panel .elementor-panel-container{clear:both;padding-left:15px;padding-right:15px}.elementor-panel #elementor-panel-content-wrapper{position:absolute;bottom:40px;top:40px;left:0;width:100%}.elementor-panel .elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel .elementor-panel-box-content{padding:20px 20px 10px}.elementor-panel .elementor-control-title{font-size:12px}.elementor-panel .elementor-button{display:inline-block}.elementor-panel .elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:left}.elementor-panel .elementor-panel-alert a{color:inherit}.elementor-panel .elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel .elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel .elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel .elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-panel .elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-panel .elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-panel .elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-panel .elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-panel .elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-panel .elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-panel .elementor-control-field-description,.elementor-panel .elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-panel .elementor-panel-nerd-box{padding:30px 20px;text-align:center}.elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-icon{font-size:52px;color:#a4afb7}.elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-title{margin-top:20px;font-size:16px;font-weight:700}.elementor-panel .elementor-panel-nerd-box .elementor-panel-nerd-box-message{margin-top:20px;line-height:1.4;font-size:11px}.elementor-panel .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link{background-color:#fcb92c;color:#fff;padding:7px 25px;margin-top:20px;-webkit-box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-panel .elementor-panel-nerd-box .elementor-button.elementor-panel-nerd-box-link:hover{background-color:#fdca5e}.elementor-panel .elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:1;background-color:#fff}.elementor-panel .elementor-controls-popover:before{content:"";position:absolute;top:-16px;right:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-panel .elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-panel .elementor-controls-popover div.elementor-control:before{content:none}.elementor-panel #elementor-panel-get-pro-elements .elementor-panel-nerd-box-message{text-transform:uppercase}.elementor-panel .select2-container{width:100%!important}.elementor-panel #elementor-controls .pojo-widget-button-collapse{display:none}.elementor-panel #elementor-panel-header{display:table;height:40px;width:100%;background-color:#b7084e;color:#fff}.elementor-panel #elementor-panel-header>*{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-header-button{width:40px}.elementor-panel .elementor-header-button .elementor-icon{cursor:pointer;display:block;font-size:19px;height:40px;line-height:40px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar{font-size:18px}.elementor-panel .elementor-header-button .elementor-icon:hover{color:#d5dadf}.elementor-panel #elementor-panel-header-title{font-size:15px}.elementor-panel #elementor-panel-header-title img{width:66px}.elementor-panel #elementor-panel-elements-navigation .elementor-panel-navigation-tab{text-align:center;padding:10px 0;font-size:11px;text-transform:uppercase;cursor:pointer}.elementor-panel #elementor-panel-elements{overflow:hidden;padding:0 5px}.elementor-panel .elementor-element-wrapper{float:left;width:50%;padding:5px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-panel .elementor-element{-webkit-border-radius:3px;border-radius:3px;background-color:#fff;cursor:move}.elementor-panel .elementor-element:hover{-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2)}.elementor-panel .elementor-element:hover .icon,.elementor-panel .elementor-element:hover .title{color:#b7084e}.elementor-panel .elementor-element .icon{font-size:28px;padding-top:15px;color:#556068}.elementor-panel .elementor-element .elementor-element-title-wrapper{display:table;width:100%}.elementor-panel .elementor-element .title{font-size:11px;color:#556068;display:table-cell;vertical-align:middle;height:40px}.elementor-panel #elementor-panel-elements-search-wrapper{position:relative;margin:10px 10px 5px}.elementor-panel #elementor-panel-elements-search-wrapper i{position:absolute;right:0;top:50%;color:#a4afb7;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:right 1s;-o-transition:right 1s;transition:right 1s}.elementor-panel #elementor-panel-elements-search-input{font-size:11px;-webkit-border-radius:0;border-radius:0;padding:10px 27px 10px 0;font-style:italic;color:#a4afb7;border:none;-webkit-transition:all 1s;-o-transition:all 1s;transition:all 1s;-webkit-appearance:none;-moz-appearance:none;appearance:none}.elementor-panel #elementor-panel-elements-search-input:focus{background-color:hsla(0,0%,100%,.7);padding-left:15px}.elementor-panel #elementor-panel-elements-search-input:focus+i{right:15px}.elementor-panel .elementor-panel-category:first-child .panel-elements-category-title{padding-top:14px}.elementor-panel .panel-elements-category-title-basic{display:none}.elementor-panel .panel-elements-category-title{padding:12px 15px;text-transform:uppercase;font-size:11px}.elementor-panel .panel-elements-category-items{overflow:hidden;padding:0 5px}.elementor-panel .elementor-panel-scheme-title{padding:10px 20px;margin-top:10px}.elementor-panel .elementor-panel-scheme-description{padding:20px 20px 0}.elementor-panel .elementor-panel-scheme-buttons{padding:0 20px;display:table;table-layout:fixed;width:100%;height:40px;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1)}.elementor-panel .elementor-panel-scheme-button-wrapper{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-panel-scheme-button-wrapper:first-child{text-align:left}.elementor-panel .elementor-panel-scheme-button-wrapper:last-child{text-align:right}.elementor-panel .elementor-panel-scheme-save .elementor-button{padding:6px 18px}.elementor-panel .elementor-panel-scheme-discard .elementor-button,.elementor-panel .elementor-panel-scheme-reset .elementor-button{color:#a4afb7;background:none}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-items{position:relative}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item{display:inline-block}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-right:13px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-right:19px}}@media (max-width:1439px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)),[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-right:5px}}@media (min-width:1440px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)),[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-right:12px}}.elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active){float:none}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:4px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:6px}}@media (max-width:1439px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:10px}}@media (min-width:1440px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:9px}}.elementor-panel .elementor-panel-scheme-color-title{text-align:center;text-transform:uppercase;margin:10px 0;color:#c2cbd2;font-size:8px}.elementor-panel .elementor-panel-scheme-typography-item{display:table;table-layout:fixed;width:100%;margin-bottom:15px}.elementor-panel .elementor-panel-scheme-typography-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-scheme-typography-item-value input,.elementor-panel .elementor-panel-scheme-typography-item-value select{width:100%}.elementor-panel .elementor-panel-scheme-item .elementor-panel-heading:not(.elementor-open)+.elementor-panel-scheme-typography-items{display:none}.elementor-panel .elementor-panel-scheme-color-system-scheme{margin-bottom:10px}.elementor-panel .elementor-panel-scheme-color-system-scheme .elementor-title{font-size:11px;color:#a4afb7;font-style:italic;margin-top:5px}.elementor-panel .elementor-panel-scheme-color-system-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;overflow:hidden;padding:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf;cursor:pointer}.elementor-panel .elementor-panel-scheme-color-system-items:hover{border:1px solid #a4afb7}.elementor-panel .elementor-panel-scheme-color-system-item{height:20px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-panel #elementor-panel-schemes-disabled a:hover{text-decoration:underline}.elementor-panel #elementor-panel-page-menu{padding:25px 15px}.elementor-panel #elementor-panel-exit-to-dashboard{width:100%;padding:15px 20px;font-size:12px;background-color:#0085ba;color:#fff;text-transform:uppercase;text-align:left;font-weight:400;border:none}.elementor-panel #elementor-panel-exit-to-dashboard:hover{background-color:#0073a1;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-panel #elementor-panel-exit-to-dashboard:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-panel #elementor-panel-exit-to-dashboard:visited{color:#fff}.elementor-panel #elementor-panel-exit-to-dashboard i{margin-right:15px}.elementor-panel .elementor-panel-menu-group-title{text-transform:uppercase;font-size:11px}.elementor-panel .elementor-panel-menu-items{margin:15px 0 25px;-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-menu-item{display:table;width:100%;height:40px;cursor:pointer;margin-bottom:1px;background-color:#fff}.elementor-panel .elementor-panel-menu-item:hover{background-color:hsla(0,0%,100%,.8)}.elementor-panel .elementor-panel-menu-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-menu-item-icon{text-align:center;width:50px;color:#a4afb7}.elementor-panel .elementor-panel-menu-item-title{font-weight:500}.elementor-panel .elementor-panel-menu-item-title>span{color:#39b54a}.elementor-panel .elementor-control.elementor-control-clear_page{background-color:transparent}.elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-panel .elementor-panel-navigation{background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);display:table;table-layout:fixed;width:100%}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab{display:table-cell}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(180deg,#f3f3f3,#fff);border-bottom:3px solid #b7084e}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a{display:block;text-align:center;padding:12px 0 8px;font-size:10px;color:#6d7882}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a:before{font-family:FontAwesome;font-size:16px;display:block;margin-bottom:6px}.elementor-panel .elementor-tab-control-content a:before{content:"\f040"}.elementor-panel .elementor-tab-control-style a:before{content:"\f042"}.elementor-panel .elementor-tab-control-advanced a:before,.elementor-panel .elementor-tab-control-general_style a:before,.elementor-panel .elementor-tab-control-settings a:before{content:"\f013"}.elementor-panel .elementor-tab-control-responsive a:before{content:"\f10a"}.elementor-panel .elementor-tab-control-column a:before,.elementor-panel .elementor-tab-control-layout a:before{content:"\f0db"}.elementor-panel .elementor-tab-control-lightbox a:before{content:"\f2d2"}.elementor-panel #elementor-panel-footer{position:absolute;bottom:0;left:0;right:0;height:40px;background-color:#495157}.elementor-panel #elementor-panel-footer-tools{display:table;table-layout:fixed;width:100%;height:100%}.elementor-panel .elementor-panel-footer-tool{display:table-cell;vertical-align:middle;text-align:center;cursor:pointer;color:#a4afb7;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update{border-right:1px solid #2d8739;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update i{margin-right:5px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options{float:left;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i{margin:auto}.elementor-panel .elementor-panel-footer-tool.elementor-open{color:#fff}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open):hover{color:#d5dadf}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open) .elementor-panel-footer-sub-menu-wrapper{display:none}.elementor-panel .elementor-panel-footer-sub-menu-wrapper{position:absolute;bottom:100%;left:0;width:100%;background-color:#556068;padding:10px;-webkit-box-shadow:-2px -5px 8px rgba(0,0,0,.1);box-shadow:-2px -5px 8px rgba(0,0,0,.1);cursor:default;z-index:5}.elementor-panel .elementor-panel-footer-sub-menu{-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-footer-sub-menu-item{background-color:#495157;display:table;table-layout:fixed;width:100%;cursor:pointer}.elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child){margin-bottom:1px}.elementor-panel .elementor-panel-footer-sub-menu-item[data-device-mode=mobile-landscape] .fa-mobile{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-panel .elementor-panel-footer-sub-menu-item:hover{background-color:rgba(0,0,0,.2)}.elementor-panel .elementor-panel-footer-sub-menu-item.active{background-color:rgba(0,0,0,.3)}.elementor-panel .elementor-panel-footer-sub-menu-item>*{display:table-cell;height:40px;vertical-align:middle}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-icon{width:40px;color:#a4afb7}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-title{text-align:left;color:#d5dadf}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-description{width:95px;text-align:left;font-size:11px;font-style:italic;color:#a4afb7}.elementor-panel #elementor-panel-footer-help-title{text-align:left;padding:10px 0;color:#d5dadf}.elementor-panel #elementor-panel-footer-responsive>i{display:block;height:100%;line-height:40px}.elementor-panel #elementor-panel-saver-publish{width:80px}.elementor-panel #elementor-panel-saver-publish .elementor-button-state i{margin-right:0}.elementor-panel #elementor-panel-saver-publish .elementor-button-state #elementor-panel-saver-button-publish-label{display:none}.elementor-panel #elementor-panel-saver-save-options{width:35px;border-left:1px solid #495157}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper{font-size:11px;font-style:italic;color:#a4afb7;padding:5px 0 15px}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper:not(.elementor-state-active) .elementor-state-icon{display:none}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper time{border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out;cursor:pointer}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper time:hover{border-bottom-color:inherit}.elementor-panel .elementor-saver-disabled{cursor:default}.elementor-panel #elementor-panel-saver-button-preview a{color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish,.elementor-panel #elementor-panel-saver-button-save-options{font-size:11px;text-transform:uppercase;height:26px}.elementor-panel #elementor-panel-saver-button-publish.elementor-saver-disabled,.elementor-panel #elementor-panel-saver-button-save-options.elementor-saver-disabled{background-color:#556068;color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish{width:100%;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-panel #elementor-panel-saver-button-save-options{width:25px}.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-icon,.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-title{color:#6d7882}.media-modal.wp-core-ui input{width:auto}.media-modal.wp-core-ui fieldset{padding:0;border:0}.media-modal.wp-core-ui .wp-clearfix:after{content:"";display:table;clear:both}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control.elementor-control-type-divider{padding:0;margin-bottom:-1px;z-index:1;background-color:transparent}.elementor-control.elementor-control-type-divider hr{border-bottom-width:0;border-top-width:1px;border-color:#e6e9ec;border-style:solid}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick{border-top-width:3px}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default{margin-right:20px;margin-left:20px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider):before{content:"";height:1px;display:block;margin-bottom:15px;background-color:#e6e9ec}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:3px;width:100%;top:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:3px;width:100%;bottom:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control .select2-container{width:100%!important;outline:none}.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.elementor-control .select2-container.select2-container--focus .select2-selection--multiple,.elementor-control .select2-container.select2-container--focus .select2-selection--single,.elementor-control .select2-container.select2-container--open .select2-selection--multiple,.elementor-control .select2-container.select2-container--open .select2-selection--single{border-color:#a4afb7}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-selection{outline:none}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading.elementor-open .elementor-panel-heading-toggle .fa:before{content:"\f0d7"}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:45%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;cursor:pointer}.elementor-slider{display:inline-block;margin-top:10px;height:4px;background-color:#a4afb7;-webkit-border-radius:5px;border-radius:5px;position:relative;width:67%}.elementor-slider .ui-slider-handle{height:16px;width:16px;background-color:#fff;display:inline-block;top:50%;-webkit-transform:translateY(-50%) translateX(-8px);-ms-transform:translateY(-50%) translateX(-8px);transform:translateY(-50%) translateX(-8px);position:absolute;-webkit-box-shadow:1px 1px 6px rgba(0,0,0,.3);box-shadow:1px 1px 6px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%;cursor:pointer}.elementor-slider-input{width:33%;float:right}.elementor-slider-input input{width:80%;float:right}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;margin-left:5px;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.elementor-control-align .elementor-choices,.elementor-control-position .elementor-choices,.elementor-control-text_align .elementor-choices{direction:ltr}.elementor-control-type-media .elementor-control-media{padding:7px;border:1px solid;height:150px}.elementor-control-type-media .elementor-control-media:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-media:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-image-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .elementor-control-media>*{height:100%;cursor:pointer;position:relative}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-image-area:not(:hover) .elementor-control-media-delete{display:none}.elementor-control-type-media .elementor-control-media-image-area:hover .elementor-control-media-image{opacity:.5}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:none;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section){padding-top:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{margin-top:7px;height:auto;line-height:1;font-size:10px;padding:3px 7px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:left;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-right:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-right:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:"";position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1);box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:left}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:left;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:right;height:27px;width:65px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:30px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-right:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-left:1px solid #a4afb7;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding:0 10px 15px}.elementor-control-type-repeater .elementor-control:before,.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:left;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-right:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:right}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:.15s ease-out;-o-transition:.15s ease-out;transition:.15s ease-out;-webkit-transition-property:opacity,background;-o-transition-property:opacity,background;transition-property:opacity,background}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px hsla(0,0%,100%,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-hidden{display:none!important}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:rtl}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-right:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-button .elementor-control-input-wrapper{text-align:right}.elementor-control-type-button .elementor-button{width:auto;height:26px}.wp-picker-container.wp-picker-active{position:absolute;z-index:5;top:0;right:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:-webkit-calc(100% - 2px * 2);width:calc(100% - 2px * 2);height:-webkit-calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container:not(.wp-picker-active){float:right}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}.wp-picker-container.wp-picker-active{-webkit-transform:translateY(6px);-ms-transform:translateY(6px);transform:translateY(6px)}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:100px;max-width:136px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}#elementor-mode-switcher{position:absolute;left:100%;top:50%;width:15px;height:50px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);background-color:#e6e9ec;font-size:15px;-webkit-box-shadow:3px 1px 5px rgba(0,0,0,.1);box-shadow:3px 1px 5px rgba(0,0,0,.1);cursor:pointer}#elementor-mode-switcher:hover,body.elementor-editor-preview #elementor-mode-switcher{background-color:#b7084e;color:#fff}#elementor-mode-switcher-inner,#elementor-mode-switcher-preview{width:100%;height:100%;position:absolute;top:0;left:0}#elementor-mode-switcher-preview{cursor:pointer}#elementor-mode-switcher-preview .fa{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}#elementor-mode-switcher-preview-input{display:none}.elementor-revision-item__wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px}.elementor-revision-item__wrapper.current{font-weight:700}.elementor-revision-item__wrapper .elementor-revision-item__tools-current{color:#b7084e}.elementor-revision-item:hover:not(.elementor-revision-current-preview){background-color:rgba(230,233,236,.3)}.elementor-revision-item-loading .elementor-revision-item__tools-current,.elementor-revision-item-loading .elementor-revision-item__tools-delete,.elementor-revision-item.elementor-revision-current-preview .elementor-revision-item__tools-delete,.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner,.elementor-revision-item:not(:hover) .elementor-revision-item__tools-delete{display:none}.elementor-revision-item__gravatar{-webkit-border-radius:50%;border-radius:50%;overflow:hidden}.elementor-revision-item__gravatar img{display:block}.elementor-revision-item__details{padding-left:15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;cursor:pointer}.elementor-revision-item__tools-delete{cursor:pointer}.elementor-revision-meta{padding-top:5px;font-size:10px;font-weight:700}.elementor-revision-current-preview{background-color:#e6e9ec}#elementor-restore-autosave-dialog.dialog-widget{background-color:rgba(0,0,0,.3)}.elementor-history-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px;line-height:1.4;cursor:pointer}.elementor-history-item:hover{background-color:rgba(230,233,236,.3)}.elementor-history-item:hover .elementor-history-item__icon .fa:before{content:"\f1da"}.elementor-history-item-applied{color:#a4afb7}.elementor-history-item-current{background:#e6e9ec;cursor:inherit}.elementor-history-item-current .elementor-history-item__icon .fa:before,.elementor-history-item-current:hover .elementor-history-item__icon .fa:before{content:"\f00c"}.elementor-history-item__details{width:95%}.elementor-history-item__title{font-weight:700}.elementor-history-item__action,.elementor-history-item__subtitle{font-weight:lighter}.elementor-history-item__action{font-style:italic;text-decoration:underline}.elementor-history-item .__icon{float:right}.elementor-history-revisions-message{font-size:11px;text-align:center;padding:5px 0}#elementor-preview{background-color:#333;position:absolute;height:100%;top:0;right:0;border:0}.elementor-device-desktop #elementor-preview{overflow-y:hidden}body:not(.elementor-device-desktop) #elementor-preview{overflow-y:auto}#elementor-preview-responsive-wrapper{position:absolute;top:0;bottom:0;left:0;right:0;-webkit-transition:all .5s ease 0s;-o-transition:all .5s ease 0s;transition:all .5s ease 0s}.elementor-device-desktop #elementor-preview-responsive-wrapper{min-width:1025px;margin:0 auto;width:100%;height:100%}.elementor-device-tablet #elementor-preview-responsive-wrapper{width:768px;height:1025px;padding:40px 10px 70px}.elementor-device-mobile #elementor-preview-responsive-wrapper{width:360px;height:640px;padding:40px 10px 70px}body:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper{-webkit-border-radius:30px;border-radius:30px;background-color:#111;margin:30px auto 80px;-webkit-box-sizing:content-box;box-sizing:content-box}#elementor-preview-iframe{width:100%;height:100%;background-color:#fff}.tipsy{font-size:10px;position:absolute;padding:5px;z-index:6}.tipsy-inner{background-color:#000;color:#fff;max-width:200px;padding:6px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.5);box-shadow:0 0 5px 0 rgba(0,0,0,.5)}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-arrow-n{border-bottom-color:#000}.tipsy-arrow-s{border-top-color:#000}.tipsy-arrow-e{border-left-color:#000}.tipsy-arrow-w{border-right-color:#000}.tipsy-n .tipsy-arrow,.tipsy-nw .tipsy-arrow{border-left-color:transparent;border-right-color:transparent;top:0;border-bottom-style:solid;border-top:none}.tipsy-n .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-nw .tipsy-arrow{left:10px}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow,.tipsy-se .tipsy-arrow,.tipsy-sw .tipsy-arrow{bottom:0;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-sw .tipsy-arrow{left:10px}.tipsy-se .tipsy-arrow{right:10px}.tipsy-e .tipsy-arrow,.tipsy-w .tipsy-arrow{top:50%;margin-top:-5px;border-top-color:transparent;border-bottom-color:transparent}.tipsy-e .tipsy-arrow{right:0;border-left-style:solid;border-right:none}.tipsy-w .tipsy-arrow{left:0;border-right-style:solid;border-left:none}.elementor-templates-modal .dialog-widget-content{background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-widget-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding:25px 30px 30px}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{font-size:15px;line-height:1;text-transform:uppercase;color:#495157;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:left;padding-left:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#ef295a,#434363);background-image:-o-linear-gradient(225deg,#ef295a,#434363);background-image:linear-gradient(-135deg,#ef295a,#434363);-webkit-border-radius:2px;border-radius:2px;margin-right:10px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close-modal{width:45px;border-left:1px solid #e6e9ec}.elementor-templates-modal__header__close-modal i{font-size:18px}#elementor-template-library-modal a.elementor-template-library-blank-footer-link{font-style:normal;text-decoration:underline;color:#39b54a}#elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover{font-weight:500}#elementor-template-library-modal .dialog-lightbox-content{height:100%}#elementor-template-library-modal .dialog-lightbox-loading{display:none}#elementor-template-library-header-menu{text-align:center;color:#6d7882;font-size:13px}.elementor-template-library-menu-item{display:inline-block;padding:17px 0;width:115px;cursor:pointer}.elementor-template-library-menu-item.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(180deg,#f3f3f3,#fff);border-bottom:3px solid #9b0a46}#elementor-template-library-header-actions{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-template-library-header-actions>div{padding-right:16px}#elementor-template-library-header-preview-insert-wrapper{cursor:default;padding:0 10px}#elementor-template-library-header-preview-insert-wrapper .elementor-button{padding:8px 14px;font-size:11px}#elementor-template-library-header-preview-insert-wrapper .elementor-template-library-template-insert{color:#fff;background-color:#39b54a}#elementor-template-library-header-preview-back{padding:16.5px 16.5px 15px 0;border-right:1px solid #e6e9ec;cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}#elementor-template-library-header-preview-back:not(:hover){color:#a4afb7}#elementor-template-library-header-preview-back i{padding-right:10px;font-size:18px}#elementor-template-library-header-preview-back i:before{content:""}#elementor-template-library-loading .elementor-loading-title{color:#a4afb7}#elementor-template-library-loading .elementor-loader-box{background-color:#d5dadf}#elementor-template-library-templates{padding:0 15px}#elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container{-webkit-box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);margin-top:10px}#elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#6d7882}#elementor-template-library-templates[data-template-source=remote] #elementor-template-library-templates-container{margin:10px -15px 0}#elementor-template-library-templates[data-template-source=remote] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#495157}#elementor-template-library-templates .elementor-template-library-order-input,#elementor-template-library-templates.elementor-templates-filter-active #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-order-toolbar-local{display:none}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label{padding-right:8px}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label:after{font-family:eicons;content:"\e956";margin-left:3px}#elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse+.elementor-template-library-order-label:after{content:"\e955"}#elementor-template-library-templates-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}#elementor-template-library-templates-container .elementor-template-library-template-local .elementor-template-library-template-insert{text-transform:none;font-size:12px}#elementor-template-library-toolbar{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}#elementor-template-library-toolbar,.elementor-template-library-filter-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}#elementor-template-library-filter-toolbar-remote{font-size:11px}#elementor-template-library-order{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-right:1px solid #d5dadf}.elementor-template-library-order-label{text-transform:uppercase;cursor:pointer;padding-right:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elementor-template-library-order-label:hover{color:#556068}#elementor-template-library-filter{border-right:1px solid #d5dadf}#elementor-template-library-filter .select2{text-align:left;margin-right:25px}#elementor-template-library-filter .select2-selection__rendered,#select2-elementor-template-library-filter-subtype-results .select2-results__option{text-transform:capitalize}#elementor-template-library-my-favorites{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left;padding-left:20px}#elementor-template-library-filter-my-favorites{display:none}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label{color:#495157}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label i:after{color:#b7084e;content:"\f004"}#elementor-template-library-filter-my-favorites-label{cursor:pointer;text-transform:uppercase}#elementor-template-library-filter-my-favorites-label:hover{color:#556068}#elementor-template-library-filter-my-favorites-label:hover i:after{color:#b7084e}#elementor-template-library-filter-my-favorites-label i{padding-right:5px}#elementor-template-library-filter-my-favorites-label i:after{color:#a4afb7;content:"\f08a"}#elementor-template-library-filter-text-wrapper{width:200px;position:relative}#elementor-template-library-filter-text-wrapper:after{content:"\e863";position:absolute;top:50%;right:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-family:eicons}#elementor-template-library-filter-text{border:none;border-bottom:1px solid #d5dadf;-webkit-border-radius:0;border-radius:0;font-size:11px;text-transform:uppercase;padding:8px 15px 8px 0;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s}#elementor-template-library-filter-text::-webkit-input-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text::-moz-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text:-ms-input-placeholder,#elementor-template-library-filter-text::-ms-input-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text::placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text:focus{border-color:#c2cbd2}#elementor-template-library-filter-text:focus::-webkit-input-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus::-moz-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus:-ms-input-placeholder,#elementor-template-library-filter-text:focus::-ms-input-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus::placeholder{color:#a4afb7}.elementor-template-library-template-remote{margin:15px;padding:8px;background-color:#fff;-webkit-box-shadow:0 1px 20px 0 rgba(0,0,0,.07);box-shadow:0 1px 20px 0 rgba(0,0,0,.07);-webkit-border-radius:3px;border-radius:3px}.elementor-template-library-template-remote:hover .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-preview{opacity:0}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-favorite,.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-action{display:none}.elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before{position:absolute;content:"pro";text-transform:uppercase;top:5px;right:5px;background-color:#b7084e;color:#d5dadf;padding:2px 4px 0;font-size:9px;-webkit-border-radius:2px;border-radius:2px}.elementor-template-library-template-remote .elementor-template-library-template-body{position:relative}@media (max-width:1025px){.elementor-template-library-template-remote .elementor-template-library-template-body{height:300px}}.elementor-template-library-template-remote .elementor-template-library-template-screenshot{height:100%;-webkit-background-size:cover;background-size:cover;background-position-x:50%;-webkit-box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07);box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07)}.elementor-template-library-template-remote .elementor-template-library-template-preview{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-preview i{font-size:20px;color:#d5dadf;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-template-library-template-remote .elementor-template-library-template-action{background-color:transparent;text-transform:none}.elementor-template-library-template-remote .elementor-template-library-template-action i{margin-right:0}.elementor-template-library-template-remote .elementor-template-library-template-insert{color:#39b54a}.elementor-template-library-template-remote .elementor-button-go-pro{color:#fcb92c}.elementor-template-library-template-remote .elementor-template-library-template-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:10px;font-size:11px;line-height:1}.elementor-template-library-template-remote .elementor-template-library-template-name{text-align:left;color:#6d7882;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-right:5px}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input{display:none}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked+.elementor-template-library-template-favorite-label i:before{content:"\f004";color:#b7084e}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label{cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i{color:#b7084e}@media (max-width:1439px){.elementor-template-library-template-page{width:-webkit-calc(25% - 30px);width:calc(25% - 30px)}}@media (min-width:1440px){.elementor-template-library-template-page{width:-webkit-calc(20% - 30px);width:calc(20% - 30px)}}@media (max-width:1025px){.elementor-template-library-template-page{width:-webkit-calc(33.333% - 30px);width:calc(33.333% - 30px)}}.elementor-template-library-template-page .elementor-template-library-template-body{height:200px}.elementor-template-library-template-block{position:relative;width:-webkit-calc(33.333% - 30px);width:calc(33.333% - 30px);overflow:hidden}.elementor-template-library-template-block img{display:block;width:100%}.elementor-template-library-template-block .elementor-template-library-template-footer{position:absolute;width:100%;bottom:0;left:0;padding:10px;background-color:#fff;-webkit-transition:-webkit-transform .5s;transition:-webkit-transform .5s;-o-transition:transform .5s;transition:transform .5s;transition:transform .5s,-webkit-transform .5s}.elementor-template-library-template-block .elementor-template-library-template-name{display:none}.elementor-template-library-template-block:not(:hover) .elementor-template-library-template-footer{-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%)}#elementor-template-library-order-toolbar-local,.elementor-template-library-template-local{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0 25px;text-align:left}#elementor-template-library-order-toolbar-local{margin-top:30px}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label{line-height:1;font-size:10px;font-weight:500}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label:not(:hover){color:#a4afb7}.elementor-template-library-template-local{height:50px;width:100%;margin-top:1px;background-color:#fff;-webkit-transition:background-color .3s linear;-o-transition:background-color .3s linear;transition:background-color .3s linear}.elementor-template-library-template-local:hover{background-color:#fafbfb}.elementor-template-library-template-local:not(:hover) .elementor-template-library-template-insert{background:none;color:#a4afb7}.elementor-template-library-template-local:first-child{-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-template-library-template-local:last-child{-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;margin-bottom:45px}.elementor-template-library-template-local .elementor-template-library-template-name{font-weight:500}.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name{padding-right:20px}.elementor-template-library-template-local .elementor-template-library-template-meta{color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-action,.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name,.elementor-template-library-template-local .elementor-template-library-template-preview{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-template-library-template-local .elementor-template-library-template-controls{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-template-library-template-local .elementor-template-library-template-controls>div{cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}.elementor-template-library-template-local .elementor-template-library-template-controls>div:not(:hover){color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-insert i{margin-right:3px}.elementor-template-library-template-local .elementor-template-library-template-control-title{margin-left:6px}.elementor-template-library-template-local .elementor-template-library-template-delete:hover{color:red}.elementor-template-library-template-local .elementor-template-library-template-export:hover i{color:#556068}.elementor-template-library-template-local .elementor-template-library-template-action{padding:8px 18px;margin:0 5%}.elementor-template-library-template-local .elementor-template-library-template-more{display:none;position:absolute;background-color:#fff;padding:3px 20px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:1px 3px 11px rgba(0,0,0,.3);box-shadow:1px 3px 11px rgba(0,0,0,.3);top:100%;right:0;-webkit-transform:translateX(65%) translateY(-7px);-ms-transform:translateX(65%) translateY(-7px);transform:translateX(65%) translateY(-7px);z-index:1}.elementor-template-library-template-local .elementor-template-library-template-more:before{content:"";position:absolute;border:solid transparent;border-width:8px 4px;border-bottom-color:#fff;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-template-library-template-local .elementor-template-library-template-more>div{margin:10px 0;font-size:11px}.elementor-template-library-template-local .elementor-template-library-template-more-toggle{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-template-library-template-local .elementor-template-library-template-more-toggle i{font-size:16px}#elementor-template-library-preview{height:100%;overflow:hidden}#elementor-template-library-preview iframe{height:150%;-webkit-transform:scale(.666) translateX(-25%) translateY(-25%);-ms-transform:scale(.666) translateX(-25%) translateY(-25%);transform:scale(.666) translateX(-25%) translateY(-25%)}@media (max-width:1439px){#elementor-template-library-preview iframe{width:1440px}}@media (min-width:1440px){#elementor-template-library-preview iframe{width:1710px}}.elementor-template-library-blank-icon{font-size:65px;margin-top:45px;color:#c2cbd2;line-height:1}.elementor-template-library-blank-title{font-size:30px;margin-top:40px}.elementor-template-library-blank-message{font-size:18px;color:#a4afb7;margin-top:25px;font-weight:300}#elementor-template-library-save-template-form{margin-top:40px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}#elementor-template-library-save-template-form>*{height:55px;font-size:16px}#elementor-template-library-save-template-name{width:500px;background-color:#fff;font-weight:300;color:#a4afb7;padding-left:25px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;border:none}#elementor-template-library-save-template-name::-webkit-input-placeholder{color:#a4afb7}#elementor-template-library-save-template-name::-moz-placeholder{color:#a4afb7}#elementor-template-library-save-template-name:-ms-input-placeholder,#elementor-template-library-save-template-name::-ms-input-placeholder{color:#a4afb7}#elementor-template-library-save-template-name::placeholder{color:#a4afb7}#elementor-template-library-save-template-submit{width:150px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;font-weight:500}#elementor-template-library-save-template-submit:hover{-webkit-box-shadow:none;box-shadow:none}#elementor-template-library-import-form{width:95%;background-color:hsla(0,0%,100%,.5);padding:60px;border:2px dashed #d5dadf;margin:35px auto;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}#elementor-template-library-import-form:hover{background-color:hsla(0,0%,100%,.9)}#elementor-template-library-import-form-or{margin-top:15px;font-size:18px}#elementor-template-library-import-form-label{margin-top:20px;padding:15px 35px;font-size:16px;display:inline-block}#elementor-template-library-import-form-input{display:none}#elementor-template-library-import-form.elementor-drag-over{border:3px dashed #71d7f7}#elementor-template-library-import .elementor-template-library-blank-icon{margin-top:0}#elementor-template-library-import .elementor-template-library-blank-message{margin-top:20px}.elementor-template-library-blank-footer{position:absolute;bottom:70px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);color:#a4afb7;font-size:16px;font-style:italic}@media (max-height:700px){.elementor-template-library-blank-footer{display:none}}#elementor-template-library-footer-banner i{color:#c2cbd2;font-size:56px;margin-top:40px}#elementor-template-library-footer-banner .elementor-excerpt{color:#a4afb7;font-size:15px;font-weight:500;margin:20px 0}#elementor-template-library-templates-empty{width:100%;margin-top:40px}#elementor-template-library-error-dialog .dialog-message{text-align:start}#elementor-template-library-error-info{margin-top:10px}@media (max-width:1439px){.elementor-template-library-local-column-1{width:33%}.elementor-template-library-local-column-2{width:10%}.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:15%}.elementor-template-library-local-column-5{width:27%}}@media (min-width:1440px){.elementor-template-library-local-column-1{width:25%}.elementor-template-library-local-column-2,.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:17%}.elementor-template-library-local-column-5{width:24%}}@media (max-width:1024px){.elementor-template-library-local-column-3{display:none}.elementor-template-library-local-column-5{width:41%}}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-right:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3)}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;left:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-left:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline .elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}#elementor-toast{position:absolute;width:280px;padding:20px;-webkit-border-radius:5px;border-radius:5px;color:#d5dadf;background-color:rgba(0,0,0,.8);z-index:5}#elementor-toast .dialog-message{font-size:13px}#elementor-toast .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-top:15px}#elementor-toast .dialog-button{color:#fcb92c;margin:0 5px;text-transform:uppercase;cursor:pointer}#elementor-toast .dialog-button:last-child{margin-right:0}
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+@charset "UTF-8";.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{padding:20px 0;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 20px 20px;min-height:50px}.dialog-type-lightbox .dialog-header,.dialog-type-lightbox .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-header,.dialog-lightbox-widget .dialog-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-right:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}*,:after,:before{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}body,html{height:100%}html{background-color:#f1f1f1}iframe,img{border:0 none}li{list-style:none}a,body{text-decoration:none}body{color:#6d7882;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px;font-weight:400;line-height:1;text-transform:none;overflow:hidden}body:after{content:"";position:absolute;top:0;right:0;height:100%;width:0;background-color:#71d7f7;-webkit-transition:width .5s;-o-transition:width .5s;transition:width .5s}body a{color:#71d7f7}body a:hover{color:#d30c5c}body.elementor-editor-active #elementor-preview{right:0}@media (max-width:1439px){body.elementor-editor-active #elementor-preview{left:280px}}@media (min-width:1440px){body.elementor-editor-active #elementor-preview{left:300px}}body.elementor-editor-active #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-editor-preview #elementor-preview{left:0}body.elementor-editor-preview #elementor-mode-switcher-preview .fa:before{content:""}body.elementor-navigator--dock-hint:after{width:30px}#elementor-panel:not(.ui-resizable-resizing),#elementor-preview:not(.ui-resizable-resizing){-webkit-transition:left .5s,width .5s;-o-transition:left .5s,width .5s;transition:left .5s,width .5s}#elementor-loading{position:fixed;top:0;left:0;bottom:0;right:0;background:#f1f3f5;z-index:5}#elementor-preview-loading{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:absolute;top:0;left:0;width:100%;height:100%;background-color:#fff}#elementor-preview-loading i{color:#d5dadf;font-size:50px}.select2-container{z-index:5}.select2-dropdown{border-color:#a4afb7}.select2-dropdown .select2-search__field{outline:none}.ui-resizable-n{top:-5px}.ui-resizable-e{right:-5px}.ui-resizable-s{bottom:-5px}.ui-resizable-w{left:-5px}.ui-resizable-ne{top:-5px;right:-5px}.ui-resizable-nw{top:-5px;left:-5px}.ui-resizable-se{bottom:-5px;right:-5px}.ui-resizable-sw{bottom:-5px;left:-5px}.ui-resizable-n,.ui-resizable-s{left:0;height:10px;width:100%;cursor:ns-resize}.ui-resizable-e,.ui-resizable-w{top:0;height:100%;width:10px;cursor:ew-resize}.ui-resizable-ne,.ui-resizable-nw,.ui-resizable-se,.ui-resizable-sw{height:15px;width:15px}.ui-resizable-nw,.ui-resizable-se{cursor:nwse-resize}.ui-resizable-ne,.ui-resizable-sw{cursor:nesw-resize}.ui-resizable-handle{position:absolute}.ui-resizable-resizing{pointer-events:none}#elementor-fatal-error-dialog button.dialog-ok{color:#71d7f7}#elementor-fatal-error-dialog .dialog-header{font-size:13px;color:#6d7882}.elementor-nerd-box{padding:30px;text-align:center}.elementor-nerd-box-icon{font-size:52px;color:#a4afb7}.elementor-nerd-box-title{margin-top:20px;font-size:16px;font-weight:700;line-height:1.4}.elementor-nerd-box-message{margin-top:20px;line-height:1.8;font-size:11px}.elementor-nerd-box .elementor-button.elementor-nerd-box-link{background-color:#fcb92c;color:#fff;padding:7px 25px;margin-top:20px;-webkit-box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);box-shadow:0 0 1px rgba(0,0,0,.1),0 2px 2px rgba(0,0,0,.1);-webkit-transition:.5s;-o-transition:.5s;transition:.5s}.elementor-nerd-box .elementor-button.elementor-nerd-box-link:hover{background-color:#fdca5e}.eicon-nerd:hover:before{content:"\e965"}.eicon-nerd:active:before{content:"\e964"}.elementor-loader-wrapper{position:absolute;width:300px;left:50%;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-loader{-webkit-border-radius:7px;border-radius:7px;padding:40px;height:150px;width:150px;background-color:hsla(0,0%,100%,.9);-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-shadow:2px 2px 20px 4px rgba(0,0,0,.02);box-shadow:2px 2px 20px 4px rgba(0,0,0,.02)}.elementor-loader-boxes{height:100%;width:100%;position:relative}.elementor-loader-box{position:absolute;background-color:#e6e9ec;-webkit-animation:load 1.8s linear infinite;animation:load 1.8s linear infinite}.elementor-loader-box:first-of-type{width:20%;height:100%;left:0;top:0}.elementor-loader-box:not(:first-of-type){right:0;height:20%;width:60%}.elementor-loader-box:nth-of-type(2){top:0;-webkit-animation-delay:-.45s;animation-delay:-.45s}.elementor-loader-box:nth-of-type(3){top:40%;-webkit-animation-delay:-.9s;animation-delay:-.9s}.elementor-loader-box:nth-of-type(4){bottom:0;-webkit-animation-delay:-1.35s;animation-delay:-1.35s}@-webkit-keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes load{0%{opacity:.3}50%{opacity:1}to{opacity:.3}}.elementor-loading-title{color:#a4afb7;text-align:center;text-transform:uppercase;margin-top:30px;letter-spacing:7px;font-size:10px;width:100%}.elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;text-transform:uppercase;outline:none;border:none;-webkit-border-radius:3px;border-radius:3px;-webkit-transition-property:background,color,opacity,-webkit-box-shadow;transition-property:background,color,opacity,-webkit-box-shadow;-o-transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity;transition-property:background,color,box-shadow,opacity,-webkit-box-shadow;-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.elementor-button:hover{border:none}.elementor-button:not([disabled]){cursor:pointer}.elementor-button:not(.elementor-button-state) .elementor-state-icon{display:none}.elementor-button.elementor-button-success{color:#fff}.elementor-button.elementor-button-success[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-success:not([disabled]){background-color:#39b54a}.elementor-button.elementor-button-success:not([disabled]):hover{opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-success:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-warning{background-color:#a4afb7;color:#fff}.elementor-button.elementor-button-warning[disabled]{background-color:#c2cbd2}.elementor-button.elementor-button-warning:not([disabled]):hover{background-color:#b01b1b;opacity:.85;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-warning:not([disabled]):active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-edit-template{display:inline-block;margin-top:15px;color:#fff}.elementor-button.elementor-button-default{background-color:#a4afb7;color:#fff;font-size:11px;padding:6.5px 15px}.elementor-button.elementor-button-default:hover{background-color:#6d7882;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-button.elementor-button-default:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-button.elementor-button-default:visited{color:#fff}.elementor-button.elementor-button-go-pro{color:#fff;background-color:#fcb92c}.elementor-button i{margin-right:10px}.elementor-input-style,input,select,textarea{-webkit-border-radius:3px;border-radius:3px;font-size:12px;width:100%;background:none;-webkit-box-shadow:none;box-shadow:none;color:#495157;border:1px solid;outline:none}.elementor-input-style:not(:focus),input:not(:focus),select:not(:focus),textarea:not(:focus){border-color:#d5dadf}.elementor-input-style:focus,input:focus,select:focus,textarea:focus{border-color:#a4afb7}.elementor-error input,.elementor-error select,.elementor-error textarea{border-color:#b01b1b}.elementor-input-style,input,textarea{padding:5px 8px}.elementor-input-style,textarea{resize:vertical}input[type=checkbox],input[type=radio]{border:1px solid #d5dadf;background:#fff;color:#555;clear:none;cursor:pointer;display:inline-block;line-height:0;height:16px;margin:-4px 4px 0 0;outline:0;text-align:center;vertical-align:middle;width:16px;min-width:16px;-webkit-transition:border-color .05s ease-in-out;-o-transition:.05s border-color ease-in-out;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=radio]:focus{border-color:#a4afb7}input[disabled]{background-color:#e6e9ec;cursor:not-allowed;opacity:1}select{height:27px}.ps-container{-ms-touch-action:none;overflow:hidden!important}.ps-container.ps-active-x>.ps-scrollbar-x-rail,.ps-container.ps-active-y>.ps-scrollbar-y-rail{display:block}.ps-container.ps-in-scrolling{pointer-events:none}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container>.ps-scrollbar-x-rail{display:none;position:absolute;-webkit-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;bottom:3px;height:8px}.ps-container>.ps-scrollbar-x-rail>.ps-scrollbar-x{position:absolute;background-color:#aaa;-webkit-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;bottom:0;height:8px}.ps-container>.ps-scrollbar-y-rail{display:none;position:absolute;-webkit-border-radius:4px;border-radius:4px;opacity:0;-webkit-transition:background-color .2s linear,opacity .2s linear;-o-transition:background-color .2s linear,opacity .2s linear;transition:background-color .2s linear,opacity .2s linear;right:3px;width:8px}.ps-container>.ps-scrollbar-y-rail>.ps-scrollbar-y{position:absolute;background-color:#aaa;-webkit-border-radius:4px;border-radius:4px;-webkit-transition:background-color .2s linear;-o-transition:background-color .2s linear;transition:background-color .2s linear;right:0;width:8px}.ps-container:hover.ps-in-scrolling{pointer-events:none}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-x>.ps-scrollbar-x-rail>.ps-scrollbar-x{background-color:#999}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail{background-color:#eee;opacity:.9}.ps-container:hover.ps-in-scrolling.ps-y>.ps-scrollbar-y-rail>.ps-scrollbar-y{background-color:#999}.ps-container:hover>.ps-scrollbar-x-rail,.ps-container:hover>.ps-scrollbar-y-rail{opacity:.6}.ps-container:hover>.ps-scrollbar-x-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-x-rail:hover>.ps-scrollbar-x{background-color:#999}.ps-container:hover>.ps-scrollbar-y-rail:hover{background-color:#eee;opacity:.9}.ps-container:hover>.ps-scrollbar-y-rail:hover>.ps-scrollbar-y{background-color:#999}#nprogress{pointer-events:none}#nprogress .bar{background:#39b54a;position:fixed;z-index:4;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;-webkit-box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;box-shadow:0 0 10px #39b54a,0 0 5px #39b54a;opacity:1;-webkit-transform:rotate(3deg) translateY(-4px);-ms-transform:rotate(3deg) translateY(-4px);transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:none;position:fixed;z-index:4;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;-webkit-box-sizing:border-box;box-sizing:border-box;border:2px solid transparent;border-top-color:#39b54a;border-left-color:#39b54a;-webkit-border-radius:50%;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}#nprogress .bar,#nprogress .spinner{z-index:7}.elementor-panel{position:fixed;height:100%;top:0;bottom:0;overflow:visible;background-color:#e6e9ec;z-index:1;font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:13px}.elementor-editor-active .elementor-panel{left:0}@media (max-width:1439px){.elementor-editor-preview .elementor-panel{left:-280px}}@media (min-width:1440px){.elementor-editor-preview .elementor-panel{left:-300px}}.elementor-editor-preview .elementor-panel>.ui-resizable-e,.elementor-editor-preview .elementor-panel>.ui-resizable-w{display:none}@media (max-width:1439px){.elementor-panel{width:280px}}@media (min-width:1440px){.elementor-panel{width:300px}}.elementor-panel .ps-scrollbar-y-rail{z-index:2}.elementor-panel ::-moz-selection{background:#5bc0de;color:#fff}.elementor-panel ::selection{background:#5bc0de;color:#fff}.elementor-panel a{color:#d30c5c}.elementor-panel h1,.elementor-panel h2,.elementor-panel h3,.elementor-panel h4,.elementor-panel h5,.elementor-panel h6{font-size:100%;font-weight:400}.elementor-panel abbr,.elementor-panel acronym{border:0;font-variant:normal}.elementor-panel sup{vertical-align:text-top}.elementor-panel sub{vertical-align:text-bottom}.elementor-panel img{max-width:100%;height:auto;border:0}.elementor-panel ::-moz-focus-inner{padding:0;border:0}.elementor-panel :focus{outline:0}.elementor-panel .elementor-panel-box{margin-top:10px;background-color:#fff}.elementor-panel .elementor-panel-box-content{padding:20px 20px 10px}.elementor-panel .elementor-control-title{font-size:12px}.elementor-panel .elementor-button{display:inline-block}.elementor-panel .elementor-panel-alert{padding:15px;border-left:5px solid transparent;position:relative;font-size:12px;line-height:1.5;text-align:left}.elementor-panel .elementor-panel-alert a{color:inherit}.elementor-panel .elementor-panel-alert.elementor-panel-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-panel .elementor-panel-alert.elementor-panel-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-panel .elementor-panel-alert.elementor-panel-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-panel .elementor-panel-alert.elementor-panel-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}.elementor-panel .elementor-label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;-webkit-border-radius:.25em;border-radius:.25em;text-transform:capitalize}.elementor-panel .elementor-label.elementor-label-default{background-color:#a4afb7}.elementor-panel .elementor-label.elementor-label-info{background-color:#5bc0de}.elementor-panel .elementor-label.elementor-label-success{background-color:#5cb85c}.elementor-panel .elementor-label.elementor-label-warning{background-color:#f0ad4e}.elementor-panel .elementor-label.elementor-label-danger{background-color:#d9534f}.elementor-panel .elementor-control-field-description,.elementor-panel .elementor-descriptor{font-size:11px;font-style:italic;line-height:1.4;color:#a4afb7}.elementor-panel .elementor-controls-popover{display:none;position:absolute;-webkit-box-shadow:0 2px 15px rgba(0,0,0,.3);box-shadow:0 2px 15px rgba(0,0,0,.3);-webkit-border-radius:3px;border-radius:3px;left:0;right:0;margin:-4px auto 5px;padding-top:15px;width:90%;z-index:6;background-color:#fff}.elementor-panel .elementor-controls-popover:before{content:"";position:absolute;top:-16px;right:22px;border:8px solid transparent;border-bottom-color:#fff}.elementor-panel .elementor-controls-popover div.elementor-control{background-color:transparent}.elementor-panel .elementor-controls-popover div.elementor-control:before{content:none}.elementor-panel #elementor-panel-get-pro-elements .elementor-nerd-box-message{text-transform:uppercase}.elementor-panel .select2-container{width:100%!important}.elementor-panel #elementor-controls .pojo-widget-button-collapse{display:none}.elementor-panel #elementor-panel-header{display:table;height:40px;width:100%;background-color:#d30c5c;color:#fff}.elementor-panel #elementor-panel-header>*{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-header-button{width:40px}.elementor-panel .elementor-header-button .elementor-icon{cursor:pointer;display:block;font-size:19px;height:40px;line-height:40px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-panel .elementor-header-button .elementor-icon.eicon-menu-bar{font-size:18px}.elementor-panel .elementor-header-button .elementor-icon:hover{color:#d5dadf}.elementor-panel #elementor-panel-header-title{font-size:15px}.elementor-panel #elementor-panel-header-title img{width:66px}.elementor-panel #elementor-panel-elements-navigation .elementor-panel-navigation-tab{text-align:center;padding:10px 0;font-size:11px;text-transform:uppercase;cursor:pointer}.elementor-panel #elementor-panel-elements{overflow:hidden;padding:0 5px}.elementor-panel .elementor-element-wrapper{float:left;width:50%;padding:5px;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-panel .elementor-element{-webkit-border-radius:3px;border-radius:3px;background-color:#fff;cursor:move}.elementor-panel .elementor-element:hover{-webkit-box-shadow:0 2px 6px rgba(0,0,0,.2);box-shadow:0 2px 6px rgba(0,0,0,.2)}.elementor-panel .elementor-element:hover .icon,.elementor-panel .elementor-element:hover .title{color:#d30c5c}.elementor-panel .elementor-element .icon{font-size:28px;padding-top:15px;color:#556068}.elementor-panel .elementor-element .elementor-element-title-wrapper{display:table;width:100%}.elementor-panel .elementor-element .title{font-size:11px;color:#556068;display:table-cell;vertical-align:middle;height:40px}.elementor-panel #elementor-panel-elements-search-wrapper{position:relative;margin:10px 10px 5px}.elementor-panel #elementor-panel-elements-search-wrapper i{position:absolute;right:0;top:50%;color:#a4afb7;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);-webkit-transition:right 1s;-o-transition:right 1s;transition:right 1s}.elementor-panel #elementor-panel-elements-search-input{background-color:hsla(0,0%,100%,.7);font-size:11px;padding:10px 27px 10px 10px;font-style:italic;color:#a4afb7;border:none;-webkit-transition:all 1s;-o-transition:all 1s;transition:all 1s;-webkit-border-radius:3px;border-radius:3px;appearance:none;-webkit-appearance:none;-moz-appearance:none}.elementor-panel #elementor-panel-elements-search-input+i{right:10px}.elementor-panel #elementor-panel-elements-search-input:focus{background-color:#fff;padding-left:15px}.elementor-panel #elementor-panel-elements-search-input:focus+i{right:15px}.elementor-panel #elementor-panel-elements-search-input::-webkit-input-placeholder{color:#a4afb7}.elementor-panel #elementor-panel-elements-search-input:-ms-input-placeholder,.elementor-panel #elementor-panel-elements-search-input::-ms-input-placeholder{color:#a4afb7}.elementor-panel #elementor-panel-elements-search-input::placeholder{color:#a4afb7}.elementor-panel .elementor-panel-category{position:relative}.elementor-panel .elementor-panel-category:first-child .elementor-panel-category-title{padding-top:14px}.elementor-panel .elementor-panel-category.elementor-active .elementor-panel-category-title:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.elementor-panel .elementor-panel-category:not(.elementor-active):after{content:"";position:absolute;left:15px;right:15px;bottom:0;height:8px;background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.03)),to(transparent));background:-webkit-linear-gradient(rgba(0,0,0,.03),transparent);background:-o-linear-gradient(rgba(0,0,0,.03),transparent);background:linear-gradient(rgba(0,0,0,.03),transparent);-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%)}.elementor-panel .elementor-panel-category-title{margin:0 15px;padding:20px 0;position:relative;text-transform:uppercase;font-size:11px;cursor:pointer}.elementor-panel .elementor-panel-category-title:before{content:"";font-family:eicons;position:absolute;right:0;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;-o-transition:transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.elementor-panel .elementor-panel-category-items{overflow:hidden;padding:0 5px;display:none}.elementor-panel .elementor-panel-scheme-title{padding:10px 20px;margin-top:10px}.elementor-panel .elementor-panel-scheme-description{padding:20px 20px 0}.elementor-panel .elementor-panel-scheme-buttons{padding:0 20px;display:table;table-layout:fixed;width:100%;height:40px;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1)}.elementor-panel .elementor-panel-scheme-buttons .elementor-button{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;font-size:11px;font-weight:400}.elementor-panel .elementor-panel-scheme-button-wrapper{display:table-cell;vertical-align:middle;text-align:center}.elementor-panel .elementor-panel-scheme-button-wrapper:first-child{text-align:left}.elementor-panel .elementor-panel-scheme-button-wrapper:last-child{text-align:right}.elementor-panel .elementor-panel-scheme-save .elementor-button{padding:6px 18px}.elementor-panel .elementor-panel-scheme-discard .elementor-button,.elementor-panel .elementor-panel-scheme-reset .elementor-button{color:#a4afb7;background:none}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-items{position:relative}.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item{display:inline-block}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-right:13px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .elementor-panel-scheme-item:not(:nth-child(4n)){margin-right:19px}}.elementor-panel .elementor-panel-scheme-color .wp-picker-container:not(.wp-picker-active){float:none}.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{top:10px}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{border-width:0 4px 0 5px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active{border-width:0 7px 0 5px}}@media (max-width:1439px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:4px}}@media (min-width:1440px){.elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:6px}}@media (max-width:1439px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:10px}}@media (min-width:1440px){[class*=wp-version-4-9] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result,[class*=wp-version-5] .elementor-panel .elementor-panel-scheme-color .wp-picker-container.wp-picker-active .wp-color-result{margin-right:9px}}.elementor-panel .elementor-panel-scheme-color-title{text-align:center;text-transform:uppercase;margin:10px 0;color:#c2cbd2;font-size:8px}.elementor-panel .elementor-panel-scheme-typography-item{display:table;table-layout:fixed;width:100%;margin-bottom:15px}.elementor-panel .elementor-panel-scheme-typography-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-scheme-typography-item-value input,.elementor-panel .elementor-panel-scheme-typography-item-value select{width:100%}.elementor-panel .elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-scheme-typography-items{display:none}.elementor-panel .elementor-panel-scheme-color-system-scheme{margin-bottom:10px}.elementor-panel .elementor-panel-scheme-color-system-scheme .elementor-title{font-size:11px;color:#a4afb7;font-style:italic;margin-top:5px}.elementor-panel .elementor-panel-scheme-color-system-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;overflow:hidden;padding:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf;cursor:pointer}.elementor-panel .elementor-panel-scheme-color-system-items:hover{border:1px solid #a4afb7}.elementor-panel .elementor-panel-scheme-color-system-item{height:20px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-panel #elementor-panel-schemes-disabled a:hover{text-decoration:underline}.elementor-panel #elementor-panel-page-menu{padding:25px 15px}.elementor-panel #elementor-panel-exit-to-dashboard{width:100%;padding:15px 20px;font-size:12px;background-color:#0085ba;color:#fff;text-transform:uppercase;text-align:left;font-weight:400;border:none}.elementor-panel #elementor-panel-exit-to-dashboard:hover{background-color:#0073a1;-webkit-box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2);box-shadow:0 0 2px rgba(0,0,0,.12),0 2px 2px rgba(0,0,0,.2)}.elementor-panel #elementor-panel-exit-to-dashboard:active{-webkit-box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1);box-shadow:0 5px 10px rgba(0,0,0,.19),0 3px 3px rgba(0,0,0,.1)}.elementor-panel #elementor-panel-exit-to-dashboard:visited{color:#fff}.elementor-panel #elementor-panel-exit-to-dashboard i{margin-right:15px}.elementor-panel .elementor-panel-menu-group-title{text-transform:uppercase;font-size:11px}.elementor-panel .elementor-panel-menu-items{margin:15px 0 25px;-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-menu-item{display:table;width:100%;height:40px;cursor:pointer;margin-bottom:1px;background-color:#fff}.elementor-panel .elementor-panel-menu-item:hover{background-color:hsla(0,0%,100%,.8)}.elementor-panel .elementor-panel-menu-item>*{display:table-cell;vertical-align:middle}.elementor-panel .elementor-panel-menu-item-icon{text-align:center;width:50px;color:#a4afb7}.elementor-panel .elementor-panel-menu-item-title{font-weight:500}.elementor-panel .elementor-panel-menu-item-title>span{color:#39b54a}.elementor-panel .elementor-control.elementor-control-clear_page{background-color:transparent}.elementor-panel .elementor-control.elementor-control-clear_page .elementor-control-raw-html{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-panel .elementor-panel-navigation{background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);display:table;table-layout:fixed;width:100%}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab{display:table-cell}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(180deg,#f3f3f3,#fff);border-bottom:3px solid #d30c5c}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a{display:block;text-align:center;padding:12px 0 8px;font-size:10px;color:#6d7882}.elementor-panel .elementor-panel-navigation .elementor-panel-navigation-tab a:before{font-family:FontAwesome;font-size:16px;display:block;margin-bottom:6px}.elementor-panel .elementor-tab-control-content a:before{content:"\f040"}.elementor-panel .elementor-tab-control-style a:before{content:"\f042"}.elementor-panel .elementor-tab-control-advanced a:before,.elementor-panel .elementor-tab-control-general_style a:before,.elementor-panel .elementor-tab-control-settings a:before{content:"\f013"}.elementor-panel .elementor-tab-control-responsive a:before{content:"\f10a"}.elementor-panel .elementor-tab-control-column a:before,.elementor-panel .elementor-tab-control-layout a:before{content:"\f0db"}.elementor-panel .elementor-tab-control-lightbox a:before{content:"\f2d2"}.elementor-panel #elementor-panel-footer{position:absolute;bottom:0;left:0;right:0;height:40px;background-color:#495157}.elementor-panel #elementor-panel-footer-tools{display:table;table-layout:fixed;width:100%;height:100%}.elementor-panel .elementor-panel-footer-tool{display:table-cell;vertical-align:middle;text-align:center;cursor:pointer;color:#a4afb7;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update{border-right:1px solid #2d8739;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-update i{margin-right:5px}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options{float:left;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-panel .elementor-panel-footer-tool #elementor-panel-saver-button-save-options i{margin:auto}.elementor-panel .elementor-panel-footer-tool.elementor-open{color:#fff}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open):hover{color:#d5dadf}.elementor-panel .elementor-panel-footer-tool:not(.elementor-open) .elementor-panel-footer-sub-menu-wrapper{display:none}.elementor-panel .elementor-panel-footer-sub-menu-wrapper{position:absolute;bottom:100%;left:0;width:100%;background-color:#556068;padding:10px;-webkit-box-shadow:-2px -5px 8px rgba(0,0,0,.1);box-shadow:-2px -5px 8px rgba(0,0,0,.1);cursor:default;z-index:6}.elementor-panel .elementor-panel-footer-sub-menu{-webkit-border-radius:5px;border-radius:5px;overflow:hidden}.elementor-panel .elementor-panel-footer-sub-menu-item{background-color:#495157;display:table;table-layout:fixed;width:100%;cursor:pointer}.elementor-panel .elementor-panel-footer-sub-menu-item:not(:last-child){margin-bottom:1px}.elementor-panel .elementor-panel-footer-sub-menu-item[data-device-mode=mobile-landscape] .fa-mobile{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-panel .elementor-panel-footer-sub-menu-item:hover{background-color:rgba(0,0,0,.2)}.elementor-panel .elementor-panel-footer-sub-menu-item.active{background-color:rgba(0,0,0,.3)}.elementor-panel .elementor-panel-footer-sub-menu-item>*{display:table-cell;height:40px;vertical-align:middle}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-icon{width:40px;color:#a4afb7}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-title{text-align:left;color:#d5dadf}.elementor-panel .elementor-panel-footer-sub-menu-item .elementor-description{width:95px;text-align:left;font-size:11px;font-style:italic;color:#a4afb7}.elementor-panel #elementor-panel-footer-help-title{text-align:left;padding:10px 0;color:#d5dadf}.elementor-panel #elementor-panel-footer-responsive>i{display:block;height:100%;line-height:40px}.elementor-panel #elementor-panel-saver-publish{width:80px}.elementor-panel #elementor-panel-saver-publish .elementor-button-state i{margin-right:0}.elementor-panel #elementor-panel-saver-publish .elementor-button-state #elementor-panel-saver-button-publish-label{display:none}.elementor-panel #elementor-panel-saver-save-options{width:35px;border-left:1px solid #495157}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper{font-size:11px;font-style:italic;color:#a4afb7;padding:5px 0 15px}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper:not(.elementor-state-active) .elementor-state-icon{display:none}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper time{border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out;cursor:pointer}.elementor-panel #elementor-panel-saver-save-options .elementor-last-edited-wrapper time:hover{border-bottom-color:inherit}.elementor-panel .elementor-saver-disabled{cursor:default}.elementor-panel #elementor-panel-saver-button-preview a{color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish,.elementor-panel #elementor-panel-saver-button-save-options{font-size:11px;text-transform:uppercase;height:26px}.elementor-panel #elementor-panel-saver-button-publish.elementor-saver-disabled,.elementor-panel #elementor-panel-saver-button-save-options.elementor-saver-disabled{background-color:#556068;color:#a4afb7}.elementor-panel #elementor-panel-saver-button-publish{width:100%;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-panel #elementor-panel-saver-button-save-options{width:25px}.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-icon,.elementor-panel #elementor-panel-saver-menu-save-draft.elementor-saver-disabled .elementor-title{color:#6d7882}#elementor-panel-inner{position:relative;height:100%;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.2);box-shadow:0 0 5px 0 rgba(0,0,0,.2)}#elementor-panel-content-wrapper{position:absolute;bottom:40px;top:40px;left:0;width:100%}.elementor-panel-container{clear:both;padding-left:15px;padding-right:15px}.media-modal.wp-core-ui input{width:auto}.media-modal.wp-core-ui fieldset{padding:0;border:0}.media-modal.wp-core-ui .wp-clearfix:after{content:"";display:table;clear:both}.elementor-control{background-color:#fff;position:relative;padding:0 20px 15px}.elementor-control a{font-weight:500;text-decoration:none;border-bottom:1px dotted transparent;-webkit-transition:all .3s ease-in-out;-o-transition:all ease-in-out .3s;transition:all .3s ease-in-out}.elementor-control a:hover{border-bottom-color:inherit}.elementor-control .elementor-control-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.elementor-control.elementor-control-type-divider{padding:0;margin-bottom:-1px;z-index:1;background-color:transparent}.elementor-control.elementor-control-type-divider hr{border-bottom-width:0;border-top-width:1px;border-color:#e6e9ec;border-style:solid}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--thick{border-top-width:1px}.elementor-control.elementor-control-type-divider hr.elementor-divider-style--default{margin-right:20px;margin-left:20px}.elementor-control.elementor-control-type-divider+.elementor-control:not(.elementor-control-type-section){padding-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp{margin-top:15px}.elementor-control.elementor-control-separator-default:not(.elementor-control-type-divider).elementor-control-wp:before{content:"";height:1px;display:block;margin-bottom:15px;background-color:transparent}.elementor-control.elementor-control-separator-before{padding-top:15px}.elementor-control.elementor-control-separator-before:before{content:"";position:absolute;height:1px;width:100%;top:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after:after{content:"";position:absolute;height:1px;width:100%;bottom:0;left:0;background-color:#d5dadf}.elementor-control.elementor-control-separator-after+.elementor-control-separator-default,.elementor-control.elementor-control-separator-after+.elementor-control-type-tabs{padding-top:15px}.elementor-control.elementor-control-deprecated,.elementor-control.elementor-control-deprecated .elementor-control-field-description{color:#b01b1b}.elementor-control.elementor-control-hidden-label>*>*>.elementor-control-title,.elementor-control.elementor-control-hidden-label>*>.elementor-control-title,.elementor-control.elementor-hidden-control{display:none}.elementor-control.elementor-control-type-heading .elementor-control-title{font-weight:700;margin:0}body:not(.elementor-device-desktop) .elementor-control.elementor-control-responsive-desktop,body:not(.elementor-device-mobile) .elementor-control.elementor-control-responsive-mobile,body:not(.elementor-device-tablet) .elementor-control.elementor-control-responsive-tablet{display:none}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper{position:relative}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:#495157;font-size:12px;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:5px;padding-right:20px;cursor:pointer}.elementor-control.elementor-control-type-select .elementor-control-input-wrapper:after{font-family:eicons;content:"\e955";font-size:12px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);right:5px;pointer-events:none}.elementor-control .select2-container{width:100%!important;outline:none}.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--multiple,.elementor-control .select2-container:not(.select2-container--open):not(.select2-container--focus) .select2-selection--single{border-color:#d5dadf}.elementor-control .select2-container.select2-container--focus .select2-selection--multiple,.elementor-control .select2-container.select2-container--focus .select2-selection--single,.elementor-control .select2-container.select2-container--open .select2-selection--multiple,.elementor-control .select2-container.select2-container--open .select2-selection--single{border-color:#a4afb7}.elementor-control .select2-container.select2-container--default .select2-selection{-webkit-border-radius:3px;border-radius:3px}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__clear{display:none}.elementor-control .select2-container.select2-container--default .select2-selection--multiple .select2-selection__choice{line-height:1.5;font-size:.9em;border:none;-webkit-border-radius:0;border-radius:0}.elementor-control .select2-container.select2-container--default .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection{outline:none}.elementor-control .select2-selection--single{height:27px}.elementor-control .select2-selection__rendered{line-height:27px}.elementor-control .select2-selection__arrow{height:27px;top:0}.elementor-control.elementor-open .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item.elementor-open .elementor-panel-heading-toggle .fa:before{content:"\f0d7"}.elementor-control:not(.elementor-open) .elementor-panel-heading-toggle .fa:before,.elementor-panel-scheme-item:not(.elementor-open) .elementor-panel-heading-toggle .fa:before{content:""}.elementor-panel-heading{display:table;table-layout:fixed;height:40px;padding:0 20px;width:100%;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-panel-heading>*{display:table-cell;vertical-align:middle}.elementor-panel-heading-toggle{width:20px;color:#495157}.elementor-panel-heading-title{color:#495157;font-weight:700}.elementor-control-wp{line-height:1.5}.elementor-control-wp p{margin:15px 0}.elementor-control-field{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-label-block>.elementor-control-content>.elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-label-block>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:100%;margin-top:10px}.elementor-label-block.elementor-control-hidden-label:not(.elementor-control-dynamic)>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:45%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{width:55%}.elementor-control-field-description{margin-top:10px}.elementor-group-control-attachment_alert .elementor-control-field-description{margin-top:0}.elementor-required{color:#b01b1b}.elementor-choices{display:table;width:100%;height:27px;background-color:#a4afb7;text-align:center;border-spacing:1px;-webkit-border-radius:3px;border-radius:3px}.elementor-choices input{display:none}.elementor-choices input:checked+.elementor-choices-label{color:#fff}.elementor-choices input:not(:checked)+.elementor-choices-label{background-color:#fff;color:#a4afb7}.elementor-choices input:not(:checked)+.elementor-choices-label:nth-child(2){-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-choices input:not(:checked)+.elementor-choices-label:last-child{-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.elementor-choices .elementor-choices-label{display:table-cell;vertical-align:middle;font-size:12px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;cursor:pointer}.elementor-slider{display:inline-block;margin-top:10px;height:4px;background-color:#a4afb7;-webkit-border-radius:5px;border-radius:5px;position:relative;width:70%}.elementor-slider .ui-slider-handle{height:16px;width:16px;background-color:#fff;display:inline-block;top:50%;-webkit-transform:translateY(-50%) translateX(-8px);-ms-transform:translateY(-50%) translateX(-8px);transform:translateY(-50%) translateX(-8px);position:absolute;-webkit-box-shadow:1px 1px 6px rgba(0,0,0,.3);box-shadow:1px 1px 6px rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%;cursor:pointer}.elementor-slider-input{width:30%;float:right}.elementor-slider-input input{max-width:80%;float:right;padding:5px}.elementor-units-choices{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-units-choices input{display:none}.elementor-units-choices input:not(:checked)+label{color:#c2cbd2}.elementor-units-choices input:checked+label{text-decoration:underline}.elementor-units-choices label{cursor:pointer;padding:0 2px;text-transform:uppercase;font-size:9px}.elementor-control-responsive-switchers{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin:0 5px}.elementor-control-responsive-switchers .elementor-responsive-switcher{display:inline-block;-webkit-border-radius:50%;border-radius:50%;height:18px;width:18px;background-color:#a4afb7;cursor:pointer;position:relative;margin-left:5px;color:#fff;font-size:8px;text-align:center;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}.elementor-control-responsive-switchers .elementor-responsive-switcher:hover{background-color:#c2cbd2}.elementor-control-responsive-switchers .elementor-responsive-switcher i{position:relative;display:block;line-height:18px}.elementor-control-responsive-switchers .elementor-responsive-switcher i:before{height:18px;width:18px;position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher{background:#c2cbd2}.elementor-device-desktop #elementor-panel .elementor-panel-controls-stack:not(.elementor-responsive-switchers-open) .elementor-responsive-switcher:not(.elementor-responsive-switcher-desktop){display:none}.elementor-device-mobile .elementor-responsive-switcher-mobile,.elementor-device-tablet .elementor-responsive-switcher-tablet{background-color:#71d7f7}.elementor-update-preview{margin:15px 15px 0;background-color:#e6e9ec;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-update-preview-button-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-update-preview-button{padding:8px 15px;text-transform:uppercase}.elementor-control-align .elementor-choices,.elementor-control-direction-ltr,.elementor-control-position .elementor-choices,.elementor-control-text_align .elementor-choices{direction:ltr}.elementor-control-direction-rtl{direction:rtl}.elementor-control-type-media .elementor-control-media{padding:7px;border:1px solid;height:150px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.elementor-control-type-media .elementor-control-media:not(:hover){border-color:#d5dadf}.elementor-control-type-media .elementor-control-media:not(:hover) .elementor-control-media-upload-button{background-color:#d5dadf}.elementor-control-type-media .elementor-control-media:hover{border-color:#a4afb7}.elementor-control-type-media .elementor-control-media:hover .elementor-control-media-upload-button{background-color:#a4afb7}.elementor-control-type-media .elementor-control-media.elementor-media-empty .elementor-control-media-area,.elementor-control-type-media .elementor-control-media:not(.elementor-media-empty) .elementor-control-media-upload-button{display:none}.elementor-control-type-media .elementor-control-media>*{height:100%;cursor:pointer;position:relative}.elementor-control-type-media .fa-plus-circle{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:20px}.elementor-control-type-media .elementor-control-media-area{background-image:-webkit-linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd),-webkit-linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd);background-image:-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd),-o-linear-gradient(45deg,#ddd 25%,transparent 25%,transparent 75%,#ddd 75%,#ddd);background-image:linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd),linear-gradient(45deg,#ddd 25%,transparent 0,transparent 75%,#ddd 0,#ddd);-webkit-background-size:16px 16px;background-size:16px 16px;background-position:0 0,8px 8px;background-color:#f6f6f6;overflow:hidden}.elementor-control-type-media .elementor-control-media-area:not(:hover) .elementor-control-media-delete{-webkit-box-shadow:none;box-shadow:none;bottom:-30px}.elementor-control-type-media .elementor-control-media-area:hover .elementor-control-media-image{opacity:.9}.elementor-control-type-media .elementor-control-media-area i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:hsla(0,0%,100%,.7);font-size:21px}.elementor-control-type-media .elementor-control-media-delete{position:absolute;bottom:0;left:0;right:0;text-align:center;padding:9.5px;font-size:11px;color:#fff;background-color:#a4afb7;text-transform:uppercase;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-box-shadow:0 0 3px 3px rgba(0,0,0,.1);box-shadow:0 0 3px 3px rgba(0,0,0,.1)}.elementor-control-type-media .elementor-control-media-image{height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-control-type-dimensions .elementor-control-dimensions{overflow:hidden}.elementor-control-type-dimensions li{float:left;width:20%}.elementor-control-type-dimensions li .elementor-link-dimensions,.elementor-control-type-dimensions li input{display:block;text-align:center;width:100%;border-color:#a4afb7;height:27px}.elementor-control-type-dimensions li input{border-left:none;-webkit-border-radius:0;border-radius:0;padding:4px 0}.elementor-control-type-dimensions li input:focus+.elementor-control-dimension-label{color:#a4afb7}.elementor-control-type-dimensions li .elementor-link-dimensions{border:1px solid #a4afb7;border-left:none;background-color:#fff;padding:0;outline:none;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;cursor:pointer}.elementor-control-type-dimensions li:first-child input{border-left:1px solid #a4afb7;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-dimensions .elementor-control-dimension-label{display:block;text-align:center;color:#d5dadf;font-size:9px;text-transform:uppercase;padding-top:5px}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked{background-color:#fff}.elementor-control-type-dimensions .elementor-link-dimensions.unlinked .elementor-linked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked){background-color:#a4afb7}.elementor-control-type-dimensions .elementor-link-dimensions:not(.unlinked) .elementor-unlinked{display:none}.elementor-control-type-dimensions .elementor-link-dimensions .elementor-linked{color:#fff}.elementor-control-type-url .elementor-control-url-external-hide .elementor-control-url-more{display:none}.elementor-control-type-url .elementor-control-url-external-show .elementor-input,.elementor-control-type-url .elementor-control-url-external-show .elementor-input-style{padding-right:46px;height:26px}.elementor-control-type-url .elementor-control-input-wrapper{position:relative}.elementor-control-type-url .elementor-control-url-more{position:absolute;top:0;right:0;height:26px;width:40px;border-left:1px solid #d5dadf;cursor:pointer;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-control-type-url .elementor-control-url-more i{font-size:13px}.elementor-control-type-url .elementor-control-url-more-input,.elementor-control-type-url .elementor-control-url-more-input:not(:checked)+.elementor-control-url-more-options{display:none}.elementor-control-type-url .elementor-control-url-more-options{padding-top:10px}.elementor-control-type-url .elementor-control-url-option{padding:5px;font-size:12px}.elementor-control-type-url .elementor-control-url-autocomplete-spinner{display:none;position:absolute;width:12px;height:12px;top:7px;left:44px}.elementor-control-type-url .elementor-input{direction:ltr}.elementor-control-type-url .elementor-input:not(:focus)+.elementor-control-url-more{border-color:#d5dadf}.elementor-control-type-url .elementor-input:focus+.elementor-control-url-more{border-color:#a4afb7}.elementor-autocomplete-menu{position:absolute;background:#fff;color:#495157;border:1px solid #a4afb7;margin:0;list-style:none;padding:4px 0;height:auto;width:100%;min-width:260px;max-width:300px;max-height:200px;overflow-y:auto;-webkit-border-radius:3px;border-radius:3px;-webkit-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out;cursor:default;z-index:1}.elementor-autocomplete-menu .ui-menu-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline;padding:5px 8px;font-size:12px;width:100%;line-height:1.2;cursor:pointer}.elementor-autocomplete-menu .ui-menu-item.ui-state-active,.elementor-autocomplete-menu .ui-menu-item.ui-state-focus,.elementor-autocomplete-menu .ui-menu-item.ui-state-hover{background:#e6e9ec}.elementor-autocomplete-menu .elementor-autocomplete-item-info{font-size:10px;padding-top:2px}.elementor-control-type-section{margin-top:10px;padding:0}.elementor-control-type-section.elementor-open{padding-bottom:15px}.elementor-control-type-section+.elementor-control:not(.elementor-control-type-section):before{display:none}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-title{width:70%}.elementor-control-type-color>.elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{height:27px;width:30%}.elementor-control-type-wysiwyg.elementor-rich-editing-disabled .wp-editor-container{margin-top:10px}.elementor-control-type-wysiwyg *{-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-control-type-wysiwyg .wp-editor-container{border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-wysiwyg #insert-media-button{height:auto;line-height:24px;font-size:10px;background-color:#e6e9ec}.elementor-control-type-wysiwyg .ed_button{height:22px;width:auto}.elementor-control-type-wysiwyg .wp-media-buttons-icon{height:14px;margin:0}.elementor-control-type-wysiwyg .wp-media-buttons-icon:before{font-size:14px}.elementor-control-type-wysiwyg .wp-switch-editor{border:none;color:#6d7882;font-size:10px;padding:3px 9px 4px;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-control-type-wysiwyg .html-active .switch-tmce{background-color:transparent}.elementor-control-type-wysiwyg .html-active .switch-html,.elementor-control-type-wysiwyg .tmce-active .switch-tmce{background-color:#e6e9ec}.elementor-control-type-wysiwyg .tmce-active .switch-html{background-color:transparent}.elementor-control-type-wysiwyg .mce-toolbar-grp,.elementor-control-type-wysiwyg .quicktags-toolbar{background-color:#e6e9ec}.elementor-control-type-wysiwyg .mce-toolbar-grp>div{padding:0 3px}.elementor-control-type-wysiwyg .elementor-wp-editor{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-control-type-wysiwyg .mce-ico{color:#6d7882;font-size:16px}.elementor-control-type-wysiwyg .mce-btn{margin-right:0;margin-left:0}.elementor-control-type-wysiwyg .mce-btn.mce-active,.elementor-control-type-wysiwyg .mce-btn:active,.elementor-control-type-wysiwyg .mce-btn:hover{border-color:#d5dadf}.elementor-control-type-wysiwyg .mce-path{padding:5px 10px}.elementor-control-type-wysiwyg .mce-path-item{font-size:12px;color:#6d7882}.elementor-control-type-icon .select2-selection__rendered .fa{margin-right:3px}.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-clear,.elementor-control-type-gallery.elementor-gallery-empty .elementor-control-gallery-thumbnails{display:none}.elementor-control-type-gallery .elementor-control-gallery-thumbnails{overflow:hidden;margin-top:20px;cursor:pointer}.elementor-control-type-gallery .elementor-control-gallery-thumbnail{width:40px;height:40px;-webkit-background-size:cover;background-size:cover;background-position:50% 50%;float:left;margin-bottom:10px}.elementor-control-type-gallery .elementor-control-gallery-thumbnail:not(:nth-child(5n)){margin-right:10px}.elementor-control-type-gallery .elementor-control-gallery-add{width:100%;height:30px;color:#fff;background-color:#a4afb7;margin-top:10px;text-transform:uppercase}.elementor-control-type-gallery .elementor-control-gallery-clear{color:#b01b1b;cursor:pointer}.elementor-control-type-structure .elementor-control-structure-preset{border:1px solid #e6e9ec;padding:3px;-webkit-border-radius:3px;border-radius:3px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset){display:inline-block;cursor:pointer;height:50px}.elementor-control-type-structure .elementor-control-structure-preset:not(.elementor-control-structure-current-preset) svg{height:100%}.elementor-control-type-structure .elementor-control-structure-preset path{fill:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-current-preset{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-current-preset svg{display:block;width:100%}.elementor-control-type-structure .elementor-control-structure-reset{padding:10px 0 0 2px;font-size:11px;cursor:pointer;color:#a4afb7}.elementor-control-type-structure .elementor-control-structure-reset i{margin-right:8px}.elementor-control-type-structure .elementor-control-structure-more-presets-title,.elementor-control-type-structure .elementor-control-structure-title{color:#495157;font-weight:700;padding:13.5px 20px;position:relative}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:after,.elementor-control-type-structure .elementor-control-structure-title:before{content:"";position:absolute;left:0;right:0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before,.elementor-control-type-structure .elementor-control-structure-title:before{top:0;background-color:#e6e9ec;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-control-type-structure .elementor-control-structure-more-presets-title:after,.elementor-control-type-structure .elementor-control-structure-title:after{bottom:0;height:1px;background-color:#e6e9ec}.elementor-control-type-structure .elementor-control-structure-title{margin:10px -20px 0}.elementor-control-type-structure .elementor-control-structure-title:before{height:10px;-webkit-box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1);box-shadow:inset 0 2px 4px hsla(0,0%,50%,.1)}.elementor-control-type-structure .elementor-control-structure-more-presets-title{margin:15px -20px 0}.elementor-control-type-structure .elementor-control-structure-more-presets-title:before{height:3px}.elementor-control-type-structure .elementor-control-structure-more-presets{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.elementor-control-type-structure .elementor-control-structure-more-presets input{display:none}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset{border:1px solid #a4afb7}.elementor-control-type-structure .elementor-control-structure-more-presets input:checked+.elementor-control-structure-preset path{fill:#a4afb7}.elementor-control-type-structure .elementor-control-structure-preset-wrapper{margin-top:15px}.elementor-control-type-structure .elementor-control-structure-preset-title{text-align:center;padding-top:5px;font-style:italic;font-size:11px;color:#a4afb7}.elementor-control-type-image_dimensions .elementor-control-field-description{margin:0 0 15px;line-height:1.4}.elementor-control-type-image_dimensions .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-image_dimensions .elementor-image-dimensions-field{width:65px;float:left}.elementor-control-type-image_dimensions .elementor-image-dimensions-field input:focus+.elementor-image-dimensions-field-description{color:#a4afb7}.elementor-control-type-image_dimensions .elementor-image-dimensions-separator{width:20px;text-align:center;float:left;padding-top:4px}.elementor-control-type-image_dimensions .elementor-image-dimensions-field-description{display:block;text-transform:uppercase;margin-top:5px;color:#d5dadf;font-size:9px;text-align:center}.elementor-control-type-image_dimensions .elementor-image-dimensions-apply-button{float:right;height:27px;width:65px}.elementor-control-type-code{padding:0 10px 15px}.elementor-control-type-wp_widget .widget-inside{display:block}.elementor-control-type-wp_widget .quicktags-toolbar input{width:auto}.elementor-control-type-tabs{font-size:.8em;color:#a4afb7;text-transform:uppercase;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-tab{text-align:center;width:100%;padding:0;line-height:27px;border-top:1px solid #a4afb7;border-bottom:1px solid #a4afb7;border-right:1px solid #a4afb7;cursor:pointer}.elementor-control-type-tab:first-child{border-left:1px solid #a4afb7;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.elementor-control-type-tab:last-child{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.elementor-control-type-tab.elementor-tab-active{background-color:#a4afb7;color:#fff}.elementor-tab-close{display:none!important}.elementor-control-type-repeater,.elementor-control-type-repeater .elementor-control:not(.elementor-control-type-tab){padding:0 10px 15px}.elementor-control-type-repeater .elementor-control:before,.elementor-control-type-repeater.elementor-repeater-has-minimum-rows .elementor-repeater-tool-remove{display:none}.elementor-control-type-repeater .elementor-repeater-fields{margin:10px 0}.elementor-control-type-repeater .elementor-repeater-row-controls{border:1px solid #d5dadf;border-top-width:0;padding-top:15px}.elementor-control-type-repeater .elementor-repeater-row-controls:not(.editable){display:none}.elementor-control-type-repeater .elementor-repeater-row-controls .wp-picker-container.wp-picker-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);border-width:0}.elementor-control-type-repeater .elementor-repeater-row-tools{display:table;table-layout:fixed;width:100%;color:#556068;background-color:#d5dadf;height:40px;border-spacing:1px;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-control-type-repeater .elementor-repeater-row-tools:hover{background-color:#a4afb7}.elementor-control-type-repeater .elementor-repeater-row-tools>div{display:table-cell;text-align:center;vertical-align:middle;cursor:pointer}.elementor-control-type-repeater .elementor-repeater-row-tools>div:not(.elementor-repeater-row-handle-sortable){background-color:#fff}.elementor-control-type-repeater .elementor-repeater-row-tools>div:hover{opacity:.95}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title{text-align:left;padding:0 10px;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-item-title .fa{margin-right:5px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-tool{width:40px}.elementor-control-type-repeater .elementor-repeater-row-tools .elementor-repeater-row-handle-sortable{cursor:move;width:10px;color:#fff}.elementor-control-type-repeater .elementor-button-wrapper{text-align:center;padding:10px}.elementor-control-type-textarea textarea{display:block}.elementor-control-type-box_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-box_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-text_shadow .elementor-control-input-wrapper{overflow:hidden}.elementor-control-type-text_shadow .elementor-shadow-slider{margin-top:10px}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-title{width:70%}.elementor-control-type-switcher.elementor-label-inline>.elementor-control-content .elementor-control-field .elementor-control-input-wrapper{width:30%}.elementor-control-type-switcher .elementor-control-input-wrapper{text-align:right}.elementor-control-type-switcher .elementor-switch{position:relative;display:inline-block;vertical-align:top;width:49px;height:20px;background-color:#fff;-webkit-border-radius:18px;border-radius:18px;cursor:pointer}.elementor-control-type-switcher .elementor-switch-input{display:none}.elementor-control-type-switcher .elementor-switch-label{position:relative;display:block;height:inherit;font-size:7px;text-transform:uppercase;background:#eceeef;-webkit-border-radius:inherit;border-radius:inherit;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);box-shadow:inset 0 1px 2px rgba(0,0,0,.12),inset 0 0 2px rgba(0,0,0,.15);-webkit-transition:.15s ease-out;-o-transition:.15s ease-out;transition:.15s ease-out;-webkit-transition-property:opacity,background;-o-transition-property:opacity,background;transition-property:opacity,background}.elementor-control-type-switcher .elementor-switch-label:after,.elementor-control-type-switcher .elementor-switch-label:before{position:absolute;top:0;width:50%;text-align:center;line-height:20px;-webkit-transition:inherit;-o-transition:inherit;transition:inherit}.elementor-control-type-switcher .elementor-switch-label:before{content:attr(data-off);right:3px;color:#a4afb7;text-shadow:0 1px hsla(0,0%,100%,.5)}.elementor-control-type-switcher .elementor-switch-label:after{content:attr(data-on);left:3px;color:#fff;text-shadow:0 1px rgba(0,0,0,.2);opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label{background:#71d7f7;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2);box-shadow:inset 0 1px 2px rgba(0,0,0,.15),inset 0 0 3px rgba(0,0,0,.2)}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:before{opacity:0}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-label:after{opacity:1}.elementor-control-type-switcher .elementor-switch-handle{position:absolute;top:1px;left:1px;width:18px;height:18px;background:#fff;-webkit-border-radius:10px;border-radius:10px;-webkit-transition:left .15s ease-out;-o-transition:left .15s ease-out;transition:left .15s ease-out}.elementor-control-type-switcher .elementor-switch-input:checked~.elementor-switch-handle{left:30px;-webkit-box-shadow:-1px 1px 5px rgba(0,0,0,.2);box-shadow:-1px 1px 5px rgba(0,0,0,.2)}.elementor-control-type-order .elementor-control-oreder-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-control-type-order input{display:none}.elementor-control-type-order input:checked+.elementor-control-order-label{-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}.elementor-control-type-order select{-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.elementor-control-type-order select:not(:focus)~.elementor-control-order-label{border-color:#d5dadf}.elementor-control-type-order select:focus~.elementor-control-order-label{border-color:#a4afb7}.elementor-control-type-order .elementor-control-order-label{position:relative;padding:0;width:40px;border:1px solid;font-size:10px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-left:-3px;background-color:#fff;cursor:pointer}.elementor-control-type-order .elementor-control-order-label i{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-control-type-hidden{display:none!important}.elementor-control-type-popover_toggle input{display:none}.elementor-control-type-popover_toggle label{cursor:pointer}.elementor-control-type-popover_toggle .elementor-control-input-wrapper{direction:rtl}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:checked+.elementor-control-popover-toggle-toggle-label{color:#71d7f7}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle:not(:checked)~.elementor-control-popover-toggle-reset-label{display:none}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-reset-label{color:#c2cbd2;padding-right:5px}.elementor-control-type-popover_toggle .elementor-control-popover-toggle-toggle-label{width:50px;height:27px;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.elementor-control-type-button .elementor-control-input-wrapper{text-align:right}.elementor-control-type-button .elementor-button{width:auto;height:26px}.elementor-group-control-css-filter .elementor-slider{height:6px;-webkit-box-shadow:0 0 1px 1px inset rgba(0,0,0,.2);box-shadow:inset 0 0 1px 1px rgba(0,0,0,.2)}.elementor-group-control-css-filter .elementor-slider .ui-slider-handle{-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.3),0 0 0 1px rgba(0,0,0,.1);box-shadow:1px 1px 2px rgba(0,0,0,.3),0 0 0 1px rgba(0,0,0,.1)}.elementor-group-control-css-filter .elementor-control-content>.elementor-control-field>.elementor-control-input-wrapper{margin-top:0;margin-bottom:5px}.elementor-group-control-blur .elementor-slider{background:url(../images/blur.png);-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-group-control-contrast .elementor-slider{background:url(../images/contrast.png);-webkit-background-size:100% 100%;background-size:100% 100%}.elementor-group-control-hue .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(red),color-stop(orange),color-stop(#ff0),color-stop(#adff2f),color-stop(#32cd32),color-stop(#00bfff),color-stop(blue),color-stop(95%,#9400d3));background-image:-webkit-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%);background-image:-o-linear-gradient(left,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%);background-image:linear-gradient(90deg,red,orange,#ff0,#adff2f,#32cd32,#00bfff,blue,#9400d3 95%)}.elementor-group-control-saturate .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(gray),to(red));background-image:-webkit-linear-gradient(left,gray,red);background-image:-o-linear-gradient(left,gray,red);background-image:linear-gradient(90deg,gray,red)}.elementor-group-control-brightness .elementor-slider{background-image:-webkit-gradient(linear,left top,right top,from(#000),to(#fff));background-image:-webkit-linear-gradient(left,#000,#fff);background-image:-o-linear-gradient(left,#000,#fff);background-image:linear-gradient(90deg,#000,#fff)}.wp-picker-container.wp-picker-active{position:absolute;z-index:6;top:-9px;right:7px;background-color:#fff;border:solid #fff;border-width:0 10px 0 5px;padding-top:10px;-webkit-box-shadow:0 0 5px rgba(0,0,0,.4);box-shadow:0 0 5px rgba(0,0,0,.4)}.wp-picker-container.wp-picker-active .wp-color-result{float:right}.wp-picker-container.wp-picker-active .wp-picker-input-wrap{padding-left:10px;float:left}.wp-picker-container *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-container .color-alpha{width:-webkit-calc(100% - 2px * 2);width:calc(100% - 2px * 2);height:-webkit-calc(100% - 2px * 2);height:calc(100% - 2px * 2);margin:2px;position:absolute;top:0;left:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.wp-picker-container .iris-picker{border:none}.wp-picker-container:not(.wp-picker-active){float:right}.wp-picker-container:not(.wp-picker-active) .wp-color-result{margin:0}[class*=wp-version-4-9] #elementor-controls .wp-picker-container.wp-picker-active,[class*=wp-version-5] #elementor-controls .wp-picker-container.wp-picker-active{padding-top:9px}.wp-picker-container.wp-picker-active .wp-color-result{margin-right:3px}.wp-picker-container input[type=text].wp-color-picker{float:left;width:100px;max-width:136px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-size:11px;line-height:12px;padding:7px 3px}.wp-color-result{margin:0;width:48px;height:25px;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s;padding:0;background-color:#fafafa;-webkit-border-radius:3px;border-radius:3px;border:1px solid #d5dadf}.wp-color-result,.wp-color-result:focus{-webkit-box-shadow:inset 0 0 0 3px #fff;box-shadow:inset 0 0 0 3px #fff}.wp-color-result.wp-picker-open:after,.wp-color-result:after{content:none}.wp-color-result:hover{border:1px solid #a4afb7}.wp-color-result:active,.wp-color-result:focus{outline:0}.wp-picker-clear.button,.wp-picker-default.button{height:26px;width:48px;padding:0;background-color:#d5dadf;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin:0}.wp-picker-holder *{-webkit-box-sizing:content-box;box-sizing:content-box}.wp-picker-holder .iris-square-value{-webkit-transition:none;-o-transition:none;transition:none}.wp-picker-open~.wp-picker-holder{clear:both;margin-bottom:15px}#elementor-mode-switcher{position:absolute;left:100%;top:50%;width:15px;height:50px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);background-color:#e6e9ec;font-size:15px;-webkit-box-shadow:3px 1px 5px rgba(0,0,0,.1);box-shadow:3px 1px 5px rgba(0,0,0,.1);cursor:pointer}#elementor-mode-switcher:hover,body.elementor-editor-preview #elementor-mode-switcher{background-color:#d30c5c;color:#fff}#elementor-mode-switcher-inner,#elementor-mode-switcher-preview{width:100%;height:100%;position:absolute;top:0;left:0}#elementor-mode-switcher-preview{cursor:pointer}#elementor-mode-switcher-preview .fa{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}#elementor-mode-switcher-preview-input{display:none}.elementor-revision-item__wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px}.elementor-revision-item__wrapper.current{font-weight:700}.elementor-revision-item__wrapper .elementor-revision-item__tools-current{color:#d30c5c}.elementor-revision-item:hover:not(.elementor-revision-current-preview){background-color:rgba(230,233,236,.3)}.elementor-revision-item-loading .elementor-revision-item__tools-current,.elementor-revision-item-loading .elementor-revision-item__tools-delete,.elementor-revision-item.elementor-revision-current-preview .elementor-revision-item__tools-delete,.elementor-revision-item:not(.elementor-revision-item-loading) .elementor-revision-item__tools-spinner,.elementor-revision-item:not(:hover) .elementor-revision-item__tools-delete{display:none}.elementor-revision-item__gravatar{-webkit-border-radius:50%;border-radius:50%;overflow:hidden}.elementor-revision-item__gravatar img{display:block}.elementor-revision-item__details{padding-left:15px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;cursor:pointer}.elementor-revision-item__tools-delete{cursor:pointer}.elementor-revision-meta{padding-top:5px;font-size:10px;font-weight:700}.elementor-revision-current-preview{background-color:#e6e9ec}#elementor-restore-autosave-dialog.dialog-widget{background-color:rgba(0,0,0,.3)}.elementor-history-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;border:1px solid #d5dadf;padding:10px 15px;margin-bottom:10px;font-size:11px;line-height:1.4;cursor:pointer}.elementor-history-item:hover{background-color:rgba(230,233,236,.3)}.elementor-history-item:hover .elementor-history-item__icon .fa:before{content:"\f1da"}.elementor-history-item-applied{color:#a4afb7}.elementor-history-item-current{background:#e6e9ec;cursor:inherit}.elementor-history-item-current .elementor-history-item__icon .fa:before,.elementor-history-item-current:hover .elementor-history-item__icon .fa:before{content:"\f00c"}.elementor-history-item__details{width:95%}.elementor-history-item__title{font-weight:700}.elementor-history-item__action,.elementor-history-item__subtitle{font-weight:lighter}.elementor-history-item__action{font-style:italic;text-decoration:underline}.elementor-history-item .__icon{float:right}.elementor-history-revisions-message{font-size:11px;text-align:center;padding:5px 0}#elementor-preview{background-color:#333;position:absolute;height:100%;top:0;right:0;border:0}.elementor-device-desktop #elementor-preview{overflow-y:hidden}body:not(.elementor-device-desktop) #elementor-preview{overflow-y:auto}#elementor-preview-responsive-wrapper{position:absolute;top:0;bottom:0;left:0;right:0;-webkit-transition:all .5s ease 0s;-o-transition:all .5s ease 0s;transition:all .5s ease 0s}.elementor-device-desktop #elementor-preview-responsive-wrapper{min-width:1025px;margin:0 auto;width:100%;height:100%}.elementor-device-tablet #elementor-preview-responsive-wrapper{width:768px;height:1025px;padding:40px 10px 70px}.elementor-device-mobile #elementor-preview-responsive-wrapper{width:360px;height:640px;padding:40px 10px 70px}body:not(.elementor-device-desktop) #elementor-preview-responsive-wrapper{-webkit-border-radius:30px;border-radius:30px;background-color:#111;margin:30px auto 80px;-webkit-box-sizing:content-box;box-sizing:content-box}#elementor-preview-iframe{width:100%;height:100%;background-color:#fff}.tipsy{font-size:10px;position:absolute;padding:5px;z-index:7}.tipsy-inner{background-color:#000;color:#fff;max-width:200px;padding:6px 12px;text-align:center;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 0 5px 0 rgba(0,0,0,.5);box-shadow:0 0 5px 0 rgba(0,0,0,.5)}.tipsy-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.tipsy-arrow-n{border-bottom-color:#000}.tipsy-arrow-s{border-top-color:#000}.tipsy-arrow-e{border-left-color:#000}.tipsy-arrow-w{border-right-color:#000}.tipsy-n .tipsy-arrow,.tipsy-nw .tipsy-arrow{border-left-color:transparent;border-right-color:transparent;top:0;border-bottom-style:solid;border-top:none}.tipsy-n .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-nw .tipsy-arrow{left:10px}.tipsy-ne .tipsy-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow,.tipsy-se .tipsy-arrow,.tipsy-sw .tipsy-arrow{bottom:0;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.tipsy-s .tipsy-arrow{left:50%;margin-left:-5px}.tipsy-sw .tipsy-arrow{left:10px}.tipsy-se .tipsy-arrow{right:10px}.tipsy-e .tipsy-arrow,.tipsy-w .tipsy-arrow{top:50%;margin-top:-5px;border-top-color:transparent;border-bottom-color:transparent}.tipsy-e .tipsy-arrow{right:0;border-left-style:solid;border-right:none}.tipsy-w .tipsy-arrow{left:0;border-right-style:solid;border-left:none}.elementor-templates-modal .dialog-widget-content{font-family:Roboto,Arial,Helvetica,Verdana,sans-serif;background-color:#f1f3f5;width:100%}@media (max-width:1439px){.elementor-templates-modal .dialog-widget-content{max-width:990px}}@media (min-width:1440px){.elementor-templates-modal .dialog-widget-content{max-width:1200px}}.elementor-templates-modal .dialog-header{padding:0;background-color:#fff;-webkit-box-shadow:0 0 8px rgba(0,0,0,.1);box-shadow:0 0 8px rgba(0,0,0,.1);position:relative;z-index:1}.elementor-templates-modal .dialog-buttons-wrapper{display:none}.elementor-templates-modal .dialog-message{height:750px;max-height:85vh;overflow:auto;padding:25px 30px 30px}.elementor-templates-modal .dialog-content{height:100%}.elementor-templates-modal .dialog-loading{display:none}.elementor-templates-modal__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:50px}.elementor-templates-modal__header__logo{font-size:15px;line-height:1;text-transform:uppercase;color:#495157;font-weight:700;cursor:pointer}.elementor-templates-modal__header__logo-area{text-align:left;padding-left:15px}.elementor-templates-modal__header__logo-area>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-templates-modal__header__logo__icon-wrapper{padding:4px 7px 6px;background-image:-webkit-linear-gradient(225deg,#f2295b,#434363);background-image:-o-linear-gradient(225deg,#f2295b,#434363);background-image:linear-gradient(-135deg,#f2295b,#434363);-webkit-border-radius:2px;border-radius:2px;margin-right:10px}.elementor-templates-modal__header__logo i{color:#fff;font-size:10px}.elementor-templates-modal__header__items-area{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-templates-modal__header__item{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:content-box;box-sizing:content-box}.elementor-templates-modal__header__item>i{font-size:20px;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}.elementor-templates-modal__header__item>i:not(:hover){color:#a4afb7}.elementor-templates-modal__header__close--normal{width:45px;border-left:1px solid #e6e9ec}.elementor-templates-modal__header__close--normal i{font-size:18px}.elementor-templates-modal__header__close--skip{padding:10px;padding-left:20px;margin-right:10px;color:#fff;background-color:#a4afb7;font-size:11px;font-weight:400;line-height:1;text-transform:uppercase;-webkit-border-radius:2px;border-radius:2px;cursor:pointer}.elementor-templates-modal__header__close--skip>i{font-size:inherit;padding-left:10px;margin-left:15px;border-left:1px solid}.elementor-templates-modal__header__close--skip>i:not(:hover){color:#fff}#elementor-template-library-modal a.elementor-template-library-blank-footer-link{font-style:normal;text-decoration:underline;color:#39b54a}#elementor-template-library-modal a.elementor-template-library-blank-footer-link:hover{color:#2d8e3a}#elementor-template-library-header-menu{text-align:center;color:#6d7882;font-size:13px}.elementor-template-library-menu-item{display:inline-block;padding:17px 0;width:115px;cursor:pointer}.elementor-template-library-menu-item.elementor-active{background-image:-webkit-gradient(linear,left top,left bottom,from(#f3f3f3),to(#fff));background-image:-webkit-linear-gradient(top,#f3f3f3,#fff);background-image:-o-linear-gradient(top,#f3f3f3,#fff);background-image:linear-gradient(180deg,#f3f3f3,#fff);border-bottom:3px solid #9b0a46}#elementor-template-library-header-actions{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}#elementor-template-library-header-actions>div{padding-right:16px}#elementor-template-library-header-preview-insert-wrapper{cursor:default;padding:0 10px}#elementor-template-library-header-preview-insert-wrapper .elementor-button{padding:8px 14px;font-size:11px}#elementor-template-library-header-preview-insert-wrapper .elementor-template-library-template-insert{color:#fff;background-color:#39b54a}#elementor-template-library-header-preview-back{padding:16.5px 16.5px 15px 0;border-right:1px solid #e6e9ec;cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}#elementor-template-library-header-preview-back:not(:hover){color:#a4afb7}#elementor-template-library-header-preview-back i{padding-right:10px;font-size:18px}#elementor-template-library-header-preview-back i:before{content:""}#elementor-template-library-templates{padding:0 15px}#elementor-template-library-templates[data-template-source=local] #elementor-template-library-templates-container{-webkit-box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);box-shadow:1px 1px 20px 0 rgba(0,0,0,.03);margin-top:10px;margin-bottom:45px}#elementor-template-library-templates[data-template-source=local] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#6d7882}#elementor-template-library-templates[data-template-source=remote] #elementor-template-library-templates-container{margin:10px -15px 0}#elementor-template-library-templates[data-template-source=remote] .elementor-template-library-order-input:checked+.elementor-template-library-order-label{color:#495157}#elementor-template-library-templates .elementor-template-library-order-input,#elementor-template-library-templates.elementor-templates-filter-active #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-footer-banner,#elementor-template-library-templates[data-template-source=empty] #elementor-template-library-order-toolbar-local{display:none}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label{padding-right:8px}#elementor-template-library-templates .elementor-template-library-order-input:checked+.elementor-template-library-order-label:after{font-family:eicons;content:"\e956";margin-left:3px}#elementor-template-library-templates .elementor-template-library-order-input:checked.elementor-template-library-order-reverse+.elementor-template-library-order-label:after{content:"\e955"}#elementor-template-library-templates-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}#elementor-template-library-templates-container .elementor-template-library-template-local .elementor-template-library-template-insert{text-transform:none;font-size:12px}#elementor-template-library-toolbar{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}#elementor-template-library-toolbar,.elementor-template-library-filter-toolbar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}#elementor-template-library-filter-toolbar-remote{font-size:11px}#elementor-template-library-order{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-right:1px solid #d5dadf}.elementor-template-library-order-label{text-transform:uppercase;cursor:pointer;padding-right:22px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.elementor-template-library-order-label:hover{color:#556068}#elementor-template-library-filter{border-right:1px solid #d5dadf}#elementor-template-library-filter .select2{text-align:left;margin-right:25px}#elementor-template-library-filter .select2-selection__rendered,#select2-elementor-template-library-filter-subtype-results .select2-results__option{text-transform:capitalize}#elementor-template-library-my-favorites{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:left;padding-left:20px}#elementor-template-library-filter-my-favorites{display:none}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label{color:#495157}#elementor-template-library-filter-my-favorites:checked+#elementor-template-library-filter-my-favorites-label i:after{color:#d30c5c;content:"\f004"}#elementor-template-library-filter-my-favorites-label{cursor:pointer;text-transform:uppercase}#elementor-template-library-filter-my-favorites-label:hover{color:#556068}#elementor-template-library-filter-my-favorites-label:hover i:after{color:#d30c5c}#elementor-template-library-filter-my-favorites-label i{padding-right:5px}#elementor-template-library-filter-my-favorites-label i:after{color:#a4afb7;content:"\f08a"}#elementor-template-library-filter-text-wrapper{width:200px;position:relative}#elementor-template-library-filter-text-wrapper:after{content:"\e863";position:absolute;top:50%;right:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-family:eicons}#elementor-template-library-filter-text{border:none;border-bottom:1px solid #d5dadf;-webkit-border-radius:0;border-radius:0;font-size:11px;text-transform:uppercase;padding:8px 15px 8px 0;-webkit-transition:border .5s;-o-transition:border .5s;transition:border .5s}#elementor-template-library-filter-text::-webkit-input-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text:-ms-input-placeholder,#elementor-template-library-filter-text::-ms-input-placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text::placeholder{font-weight:300;color:#c2cbd2}#elementor-template-library-filter-text:focus{border-color:#c2cbd2}#elementor-template-library-filter-text:focus::-webkit-input-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus:-ms-input-placeholder,#elementor-template-library-filter-text:focus::-ms-input-placeholder{color:#a4afb7}#elementor-template-library-filter-text:focus::placeholder{color:#a4afb7}.elementor-template-library-template-remote{margin:15px;padding:8px;background-color:#fff;-webkit-box-shadow:0 1px 20px 0 rgba(0,0,0,.07);box-shadow:0 1px 20px 0 rgba(0,0,0,.07);-webkit-border-radius:3px;border-radius:3px}.elementor-template-library-template-remote:hover .elementor-template-library-template-name{display:none}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-preview{opacity:0}.elementor-template-library-template-remote:not(:hover) .elementor-template-library-favorite,.elementor-template-library-template-remote:not(:hover) .elementor-template-library-template-action{display:none}.elementor-template-library-template-remote.elementor-template-library-pro-template .elementor-template-library-template-body:before{position:absolute;content:"pro";text-transform:uppercase;top:5px;right:5px;background-color:#d30c5c;color:#d5dadf;padding:2px 4px 0;font-size:9px;-webkit-border-radius:2px;border-radius:2px}.elementor-template-library-template-remote .elementor-template-library-template-body{position:relative}@media (max-width:1025px){.elementor-template-library-template-remote .elementor-template-library-template-body{height:300px}}.elementor-template-library-template-remote .elementor-template-library-template-screenshot{height:100%;-webkit-background-size:cover;background-size:cover;background-position-x:50%;-webkit-box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07);box-shadow:inset 0 -2px 15px -6px rgba(0,0,0,.07)}.elementor-template-library-template-remote .elementor-template-library-template-preview{position:absolute;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .5s;-o-transition:opacity .5s;transition:opacity .5s;cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-preview i{font-size:20px;color:#d5dadf;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-template-library-template-remote .elementor-template-library-template-action{background-color:transparent;text-transform:none}.elementor-template-library-template-remote .elementor-template-library-template-action i{margin-right:0}.elementor-template-library-template-remote .elementor-template-library-template-insert{color:#39b54a}.elementor-template-library-template-remote .elementor-button-go-pro{color:#fcb92c}.elementor-template-library-template-remote .elementor-template-library-template-footer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;margin-top:10px;font-size:11px;line-height:1}.elementor-template-library-template-remote .elementor-template-library-template-name{text-align:left;color:#6d7882;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-right:5px}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input{display:none}.elementor-template-library-template-remote .elementor-template-library-template-favorite-input:checked+.elementor-template-library-template-favorite-label i:before{content:"\f004";color:#d30c5c}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label{cursor:pointer}.elementor-template-library-template-remote .elementor-template-library-template-favorite-label:hover i{color:#d30c5c}@media (max-width:1439px){.elementor-template-library-template-page{width:-webkit-calc(25% - 30px);width:calc(25% - 30px)}}@media (min-width:1440px){.elementor-template-library-template-page{width:-webkit-calc(20% - 30px);width:calc(20% - 30px)}}@media (max-width:1025px){.elementor-template-library-template-page{width:-webkit-calc(33.333% - 30px);width:calc(33.333% - 30px)}}.elementor-template-library-template-page .elementor-template-library-template-body{height:200px}.elementor-template-library-template-block{position:relative;width:-webkit-calc(33.333% - 30px);width:calc(33.333% - 30px);overflow:hidden}.elementor-template-library-template-block img{display:block;width:100%}.elementor-template-library-template-block .elementor-template-library-template-footer{position:absolute;width:100%;bottom:0;left:0;padding:10px;background-color:#fff;-webkit-transition:-webkit-transform .5s;transition:-webkit-transform .5s;-o-transition:transform .5s;transition:transform .5s;transition:transform .5s,-webkit-transform .5s}.elementor-template-library-template-block .elementor-template-library-template-name{display:none}.elementor-template-library-template-block:not(:hover) .elementor-template-library-template-footer{-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%)}#elementor-template-library-order-toolbar-local,.elementor-template-library-template-local{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0 25px;text-align:left}#elementor-template-library-order-toolbar-local{margin-top:30px}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label{line-height:1;font-size:10px;font-weight:500}#elementor-template-library-order-toolbar-local .elementor-template-library-order-label:not(:hover){color:#a4afb7}.elementor-template-library-template-local{height:50px;width:100%;margin-top:1px;background-color:#fff;-webkit-transition:background-color .3s linear;-o-transition:background-color .3s linear;transition:background-color .3s linear}.elementor-template-library-template-local:hover{background-color:#fafbfb}.elementor-template-library-template-local:not(:hover) .elementor-template-library-template-insert{background:none;color:#a4afb7}.elementor-template-library-template-local:first-child{-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.elementor-template-library-template-local:last-child{-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.elementor-template-library-template-local .elementor-template-library-template-name{font-weight:500}.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name{padding-right:20px}.elementor-template-library-template-local .elementor-template-library-template-meta{color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-action,.elementor-template-library-template-local .elementor-template-library-template-meta,.elementor-template-library-template-local .elementor-template-library-template-name,.elementor-template-library-template-local .elementor-template-library-template-preview{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-template-library-template-local .elementor-template-library-template-controls{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-template-library-template-local .elementor-template-library-template-controls>div{cursor:pointer;-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s}.elementor-template-library-template-local .elementor-template-library-template-controls>div:not(:hover){color:#a4afb7}.elementor-template-library-template-local .elementor-template-library-template-insert i{margin-right:3px}.elementor-template-library-template-local .elementor-template-library-template-control-title{margin-left:6px}.elementor-template-library-template-local .elementor-template-library-template-delete:hover{color:red}.elementor-template-library-template-local .elementor-template-library-template-export:hover i{color:#556068}.elementor-template-library-template-local .elementor-template-library-template-action{padding:8px 18px;margin:0 5%}.elementor-template-library-template-local .elementor-template-library-template-more{display:none;position:absolute;background-color:#fff;padding:3px 20px;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:1px 3px 11px rgba(0,0,0,.3);box-shadow:1px 3px 11px rgba(0,0,0,.3);top:100%;right:0;-webkit-transform:translateX(65%) translateY(-7px);-ms-transform:translateX(65%) translateY(-7px);transform:translateX(65%) translateY(-7px);z-index:1}.elementor-template-library-template-local .elementor-template-library-template-more:before{content:"";position:absolute;border:solid transparent;border-width:8px 4px;border-bottom-color:#fff;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-template-library-template-local .elementor-template-library-template-more>div{margin:10px 0;font-size:11px}.elementor-template-library-template-local .elementor-template-library-template-more-toggle{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:right}.elementor-template-library-template-local .elementor-template-library-template-more-toggle i{font-size:16px}#elementor-template-library-preview{height:100%;overflow:hidden}#elementor-template-library-preview iframe{height:150%;-webkit-transform:scale(.666) translateX(-25%) translateY(-25%);-ms-transform:scale(.666) translateX(-25%) translateY(-25%);transform:scale(.666) translateX(-25%) translateY(-25%)}@media (max-width:1439px){#elementor-template-library-preview iframe{width:1440px}}@media (min-width:1440px){#elementor-template-library-preview iframe{width:1710px}}.elementor-template-library-blank-icon{font-size:65px;margin-top:45px;color:#c2cbd2;line-height:1}.elementor-template-library-blank-title{font-size:30px;margin-top:40px}.elementor-template-library-blank-message{font-size:18px;color:#a4afb7;margin-top:25px;font-weight:300}#elementor-template-library-save-template-form{margin-top:40px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}#elementor-template-library-save-template-form>*{height:55px;font-size:16px}#elementor-template-library-save-template-name{width:500px;background-color:#fff;font-weight:300;color:#a4afb7;padding-left:25px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;border:none}#elementor-template-library-save-template-name::-webkit-input-placeholder{color:#a4afb7}#elementor-template-library-save-template-name:-ms-input-placeholder,#elementor-template-library-save-template-name::-ms-input-placeholder{color:#a4afb7}#elementor-template-library-save-template-name::placeholder{color:#a4afb7}#elementor-template-library-save-template-submit{width:150px;-webkit-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}#elementor-template-library-save-template-submit:hover{-webkit-box-shadow:none;box-shadow:none}#elementor-template-library-import-form{width:95%;background-color:hsla(0,0%,100%,.5);padding:60px;border:2px dashed #d5dadf;margin:35px auto;-webkit-transition:background-color .5s;-o-transition:background-color .5s;transition:background-color .5s}#elementor-template-library-import-form:hover{background-color:hsla(0,0%,100%,.9)}#elementor-template-library-import-form-or{margin-top:15px;font-size:18px}#elementor-template-library-import-form-label{margin-top:20px;padding:15px 35px;display:inline-block}#elementor-template-library-import-form-input{display:none}#elementor-template-library-import-form.elementor-drag-over{border:3px dashed #71d7f7}#elementor-template-library-import .elementor-template-library-blank-icon{margin-top:0}#elementor-template-library-import .elementor-template-library-blank-message{margin-top:20px}.elementor-template-library-blank-footer{position:absolute;bottom:70px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);color:#a4afb7;font-style:italic}@media (max-height:700px){.elementor-template-library-blank-footer{display:none}}#elementor-template-library-footer-banner i{color:#c2cbd2;font-size:56px;margin-top:40px}#elementor-template-library-footer-banner .elementor-excerpt{color:#a4afb7;font-size:15px;font-weight:500;margin:20px 0}#elementor-template-library-templates-empty{width:100%;margin-top:40px}#elementor-template-library-error-dialog .dialog-message{text-align:start}#elementor-template-library-error-info{margin-top:10px}@media (max-width:1439px){.elementor-template-library-local-column-1{width:33%}.elementor-template-library-local-column-2{width:10%}.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:15%}.elementor-template-library-local-column-5{width:27%}}@media (min-width:1440px){.elementor-template-library-local-column-1{width:25%}.elementor-template-library-local-column-2,.elementor-template-library-local-column-3,.elementor-template-library-local-column-4{width:17%}.elementor-template-library-local-column-5{width:24%}}@media (max-width:1024px){.elementor-template-library-local-column-3{display:none}.elementor-template-library-local-column-5{width:41%}}.elementor-tags-list{display:none;position:absolute;width:260px;max-height:300px;overflow:auto;padding-bottom:5px;background-color:#fff;border:1px solid #a4afb7;-webkit-border-radius:3px;border-radius:3px;z-index:1}.elementor-tags-list__group-title{color:#495157;font-weight:700;font-size:12px;padding:10px 15px}.elementor-tags-list__item{font-size:10px;padding:6px 15px;cursor:pointer}.elementor-tags-list__item:before{content:">";font-size:8px;padding-right:5px}.elementor-tags-list__item:hover{background-color:#e6e9ec}.elementor-dynamic-cover{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;width:100%;height:27px;-webkit-box-sizing:border-box;box-sizing:border-box}.elementor-dynamic-cover__settings i{color:#d5dadf}.elementor-dynamic-cover__settings i.fa-wrench{cursor:pointer}.elementor-dynamic-cover__title{padding:0 8px;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.elementor-dynamic-cover__remove{color:#c2cbd2;cursor:pointer}.elementor-control-type-wysiwyg .elementor-dynamic-cover{margin-top:10px}.elementor-tag-settings-popup{position:absolute;width:260px;background-color:#e6e9ec;-webkit-box-shadow:1px 1px 10px rgba(0,0,0,.3);box-shadow:1px 1px 10px rgba(0,0,0,.3);z-index:1}.elementor-tag-settings-popup:before{content:"";position:absolute;top:-20px;left:5px;border:10px solid transparent;border-bottom-color:#fff}.elementor-tag-settings-popup .elementor-control-type-section:first-child{margin:0}.elementor-tag-controls-stack-empty{background-color:#fff;padding:10px;font-size:13px;text-align:center}.elementor-control-dynamic.elementor-label-inline .elementor-control-field{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-control-dynamic-switcher{cursor:pointer;font-size:9px}.elementor-control-dynamic-switcher i{padding-left:5px}.elementor-control-dynamic-switcher-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-label-inline>.elementor-control-content>.elementor-control-field>.elementor-control-dynamic-switcher-wrapper{width:100%;padding-bottom:10px}.elementor-control-dynamic-value .elementor-control-tag-area{display:none}.elementor-control-dynamic-value .elementor-control-dynamic-switcher{color:#71d7f7}#elementor-toast{position:absolute;width:280px;padding:20px;-webkit-border-radius:5px;border-radius:5px;color:#d5dadf;background-color:rgba(0,0,0,.8);z-index:6}#elementor-toast .dialog-message{font-size:13px}#elementor-toast .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;margin-top:15px}#elementor-toast .dialog-button{color:#fcb92c;margin:0 5px;text-transform:uppercase;cursor:pointer}#elementor-toast .dialog-button:last-child{margin-right:0}.elementor-context-menu{position:absolute;width:200px;background-color:#fff;border:1px solid #e6e9ec;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.09);box-shadow:0 2px 10px 0 rgba(0,0,0,.09);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:3}.elementor-context-menu-list__group{padding:5px 0}.elementor-context-menu-list__group:not(:last-child){border-bottom:1px solid #e6e9ec}.elementor-context-menu-list__item{padding:5px 10px;padding-right:20px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer}.elementor-context-menu-list__item--disabled{cursor:default;color:#d5dadf}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover{background-color:#71d7f7}.elementor-context-menu-list__item:not(.elementor-context-menu-list__item--disabled):hover>*{color:#fff}.elementor-context-menu-list__item__icon{width:20px;color:#c2cbd2}.elementor-context-menu-list__item__title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-context-menu-list__item__shortcut{color:#d5dadf}.elementor-context-menu-list__item.elementor-context-menu-list__item-delete:not(.elementor-context-menu-list__item--disabled):hover{background-color:#d72b3f}.elementor-context-menu .eicon-pro-icon{color:#fcb92c}.elementor-introduction{position:absolute;width:270px;padding:30px 20px;background-color:#fff;-webkit-box-shadow:0 2px 10px 0 rgba(0,0,0,.07);box-shadow:0 2px 10px 0 rgba(0,0,0,.07);text-align:center}.elementor-introduction:before{content:"";position:absolute;border:solid transparent;border-width:7px 5px;border-bottom-color:#fff;top:-14px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-introduction .dialog-header{color:#6d7882;font-size:16px}.elementor-introduction .dialog-message{font-size:13px;line-height:1.6;margin-top:10px;color:#a4afb7}.elementor-introduction .dialog-buttons-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-top:25px}.elementor-introduction .dialog-button{font-size:11px}.elementor-introduction .dialog-ok{padding:7px 27px;text-transform:capitalize}.elementor-introduction .dialog-learn-more{color:#39b54a;margin-right:15px;cursor:pointer}#elementor-navigator{position:fixed;top:100px;width:240px;height:339px;right:30px;background-color:#fff;-webkit-box-shadow:0 2px 20px 0 rgba(0,0,0,.1);box-shadow:0 2px 20px 0 rgba(0,0,0,.1);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;z-index:2;display:none}body.elementor-navigator-docked #elementor-navigator{top:0;right:0;height:100%}body:not(.elementor-navigator-docked) #elementor-navigator{-webkit-border-radius:5px;border-radius:5px}#elementor-navigator__inner{height:100%;background-color:#e6e9ec}#elementor-navigator__header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:12px 10px;background-color:#fff;border-bottom:1px solid #e6e9ec;cursor:move}#elementor-navigator__close,#elementor-navigator__toggle-all{-webkit-transition:color .5s;-o-transition:color .5s;transition:color .5s;cursor:pointer}#elementor-navigator__close:not(:hover),#elementor-navigator__toggle-all:not(:hover){color:#a4afb7}#elementor-navigator__toggle-all{font-size:13px}#elementor-navigator__close{font-size:11px}#elementor-navigator__elements{height:-webkit-calc(100% - 49px);height:calc(100% - 49px);overflow:auto;position:relative}.elementor-navigator-docked #elementor-navigator__elements{height:-webkit-calc(100% - 35px);height:calc(100% - 35px)}#elementor-navigator__footer{position:absolute;width:100%;left:0;bottom:0;text-align:center;background-color:#fff;border-top:1px solid #e6e9ec;color:#a4afb7}.elementor-navigator-docked #elementor-navigator__footer{display:none}.elementor-navigator__item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:32px;padding-right:4px;font-size:12px;border-bottom:1px solid #e6e9ec;cursor:pointer}.elementor-navigator__item:not(.elementor-active) .elementor-navigator__element__list-toggle i{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.elementor-navigator__item>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-navigator__item+.elementor-navigator__elements{display:none}.elementor-navigator__elements .elementor-empty-view{padding:10px;border-bottom:1px solid #e6e9ec}.elementor-navigator__elements .elementor-empty-view__title{margin-left:23px;color:#c2cbd2;font-size:10px;font-style:italic}.elementor-navigator__elements .ui-sortable-helper{background-color:#fff;-webkit-box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);box-shadow:1px 2px 5px 0 rgba(0,0,0,.1);-webkit-transform:rotate(4deg);-ms-transform:rotate(4deg);transform:rotate(4deg);border:1px solid #e6e9ec;pointer-events:none}.elementor-navigator__elements .ui-sortable-placeholder{background-color:#f1f3f5}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view{border-top:2px solid #71d7f7}.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view+.ui-sortable-placeholder,.elementor-navigator__element.elementor-dragging-on-child>.elementor-navigator__elements>.elementor-empty-view .elementor-empty-view__title{display:none}.elementor-navigator__element:not(.elementor-navigator__element--has-children) .elementor-navigator__element__list-toggle{visibility:hidden}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item .elementor-navigator__element__toggle{color:#71d7f7}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item:not(:hover) .elementor-navigator__element__toggle{display:none}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item.elementor-editing{background-color:#71d7f7}.elementor-navigator__element:not(.elementor-navigator__element--hidden)>.elementor-navigator__item.elementor-editing>*{color:#fff}.elementor-navigator__element__list-toggle{margin-right:7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;-o-transition:transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;color:#a4afb7}.elementor-navigator__element__element-type{margin-right:8px}.elementor-navigator__element__title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden}.elementor-navigator__element__title__text{white-space:nowrap;-webkit-user-select:text}.elementor-navigator__element__title__text[contenteditable=true]{outline:none;color:#6d7882;background-color:#fff;padding:2px 3px;-webkit-box-shadow:0 0 4px rgba(0,0,0,.2);box-shadow:0 0 4px rgba(0,0,0,.2)}.elementor-navigator__element__title__text:not([contenteditable=true]){overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-navigator__element__toggle{text-align:right;font-size:13px;padding:0 5px}.elementor-navigator__element--hidden .elementor-navigator__element__title,.elementor-navigator__element--hidden .elementor-navigator__element__toggle{opacity:.5}.elementor-navigator__element-column{background-color:#fafbfb}.elementor-navigator__element-column>.elementor-navigator__item .elementor-navigator__element__element-type{color:#a4afb7}.elementor-navigator__element-section{background-color:#fff}
\ No newline at end of file
--- /dev/null
+/*! elementor - v2.2.1 - 03-09-2018 */
+.elementor-msie ul.products, .elementor-msie .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-msie ul.products li.product, .elementor-msie ul.products .elementor-grid-item, .elementor-msie .elementor-grid li.product, .elementor-msie .elementor-grid .elementor-grid-item {
+ word-break: break-word; }
+
+.elementor-msie .elementor-grid-1 .elementor-grid-item {
+ width: 100%; }
+
+.elementor-msie .elementor-grid-2 .elementor-grid-item {
+ width: 50%; }
+
+.elementor-msie .elementor-grid-3 .elementor-grid-item {
+ width: 33.3333333333%; }
+
+.elementor-msie .elementor-grid-4 .elementor-grid-item {
+ width: 25%; }
+
+.elementor-msie .elementor-grid-5 .elementor-grid-item {
+ width: 20%; }
+
+.elementor-msie .elementor-grid-6 .elementor-grid-item {
+ width: 16.6666666667%; }
+
+.elementor-msie .elementor-grid-7 .elementor-grid-item {
+ width: 14.2857142857%; }
+
+.elementor-msie .elementor-grid-8 .elementor-grid-item {
+ width: 12.5%; }
+
+.elementor-msie .elementor-grid-9 .elementor-grid-item {
+ width: 11.1111111111%; }
+
+.elementor-msie .elementor-grid-10 .elementor-grid-item {
+ width: 10%; }
+
+.elementor-msie .elementor-grid-11 .elementor-grid-item {
+ width: 9.0909090909%; }
+
+.elementor-msie .elementor-grid-12 .elementor-grid-item {
+ width: 8.3333333333%; }
+
+@media (max-width: 1024px) {
+ .elementor-msie .elementor-grid-tablet-1 .elementor-grid-item {
+ width: 100%; }
+ .elementor-msie .elementor-grid-tablet-2 .elementor-grid-item {
+ width: 50%; }
+ .elementor-msie .elementor-grid-tablet-3 .elementor-grid-item {
+ width: 33.3333333333%; }
+ .elementor-msie .elementor-grid-tablet-4 .elementor-grid-item {
+ width: 25%; }
+ .elementor-msie .elementor-grid-tablet-5 .elementor-grid-item {
+ width: 20%; }
+ .elementor-msie .elementor-grid-tablet-6 .elementor-grid-item {
+ width: 16.6666666667%; }
+ .elementor-msie .elementor-grid-tablet-7 .elementor-grid-item {
+ width: 14.2857142857%; }
+ .elementor-msie .elementor-grid-tablet-8 .elementor-grid-item {
+ width: 12.5%; }
+ .elementor-msie .elementor-grid-tablet-9 .elementor-grid-item {
+ width: 11.1111111111%; }
+ .elementor-msie .elementor-grid-tablet-10 .elementor-grid-item {
+ width: 10%; }
+ .elementor-msie .elementor-grid-tablet-11 .elementor-grid-item {
+ width: 9.0909090909%; }
+ .elementor-msie .elementor-grid-tablet-12 .elementor-grid-item {
+ width: 8.3333333333%; } }
+
+@media (max-width: 767px) {
+ .elementor-msie .elementor-grid-mobile-1 .elementor-grid-item {
+ width: 100%; }
+ .elementor-msie .elementor-grid-mobile-2 .elementor-grid-item {
+ width: 50%; }
+ .elementor-msie .elementor-grid-mobile-3 .elementor-grid-item {
+ width: 33.3333333333%; }
+ .elementor-msie .elementor-grid-mobile-4 .elementor-grid-item {
+ width: 25%; }
+ .elementor-msie .elementor-grid-mobile-5 .elementor-grid-item {
+ width: 20%; }
+ .elementor-msie .elementor-grid-mobile-6 .elementor-grid-item {
+ width: 16.6666666667%; }
+ .elementor-msie .elementor-grid-mobile-7 .elementor-grid-item {
+ width: 14.2857142857%; }
+ .elementor-msie .elementor-grid-mobile-8 .elementor-grid-item {
+ width: 12.5%; }
+ .elementor-msie .elementor-grid-mobile-9 .elementor-grid-item {
+ width: 11.1111111111%; }
+ .elementor-msie .elementor-grid-mobile-10 .elementor-grid-item {
+ width: 10%; }
+ .elementor-msie .elementor-grid-mobile-11 .elementor-grid-item {
+ width: 9.0909090909%; }
+ .elementor-msie .elementor-grid-mobile-12 .elementor-grid-item {
+ width: 8.3333333333%; } }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-1 ul.products li.product {
+ width: 100%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-2 ul.products li.product {
+ width: 50%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-3 ul.products li.product {
+ width: 33.3333333333%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-4 ul.products li.product {
+ width: 25%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-5 ul.products li.product {
+ width: 20%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-6 ul.products li.product {
+ width: 16.6666666667%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-7 ul.products li.product {
+ width: 14.2857142857%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-8 ul.products li.product {
+ width: 12.5%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-9 ul.products li.product {
+ width: 11.1111111111%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-10 ul.products li.product {
+ width: 10%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-11 ul.products li.product {
+ width: 9.0909090909%; }
+
+.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-12 ul.products li.product {
+ width: 8.3333333333%; }
+
+@media (max-width: 1024px) {
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-1 ul.products li.product {
+ width: 100%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-2 ul.products li.product {
+ width: 50%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-3 ul.products li.product {
+ width: 33.3333333333%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-4 ul.products li.product {
+ width: 25%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-5 ul.products li.product {
+ width: 20%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-6 ul.products li.product {
+ width: 16.6666666667%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-7 ul.products li.product {
+ width: 14.2857142857%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-8 ul.products li.product {
+ width: 12.5%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-9 ul.products li.product {
+ width: 11.1111111111%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-10 ul.products li.product {
+ width: 10%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-11 ul.products li.product {
+ width: 9.0909090909%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-12 ul.products li.product {
+ width: 8.3333333333%; } }
+
+@media (max-width: 767px) {
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-1 ul.products li.product {
+ width: 100%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-2 ul.products li.product {
+ width: 50%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-3 ul.products li.product {
+ width: 33.3333333333%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-4 ul.products li.product {
+ width: 25%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-5 ul.products li.product {
+ width: 20%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-6 ul.products li.product {
+ width: 16.6666666667%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-7 ul.products li.product {
+ width: 14.2857142857%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-8 ul.products li.product {
+ width: 12.5%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-9 ul.products li.product {
+ width: 11.1111111111%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-10 ul.products li.product {
+ width: 10%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-11 ul.products li.product {
+ width: 9.0909090909%; }
+ .elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-12 ul.products li.product {
+ width: 8.3333333333%; } }
+
+.elementor-msie .elementor-element.elementor-wc-products ul.products, .elementor-msie .elementor-posts {
+ margin-right: -10px;
+ margin-left: -10px; }
+ .elementor-msie .elementor-element.elementor-wc-products ul.products li.product, .elementor-msie .elementor-element.elementor-wc-products ul.products .elementor-post, .elementor-msie .elementor-posts li.product, .elementor-msie .elementor-posts .elementor-post {
+ padding-right: 10px;
+ padding-left: 10px;
+ margin-bottom: 20px; }
+ .elementor-msie .elementor-element.elementor-wc-products ul.products .elementor-post, .elementor-msie .elementor-posts .elementor-post {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex; }
+/*# sourceMappingURL=frontend-msie.css.map */
\ No newline at end of file
--- /dev/null
+/*! elementor - v2.2.1 - 03-09-2018 */
+.elementor-msie .elementor-grid,.elementor-msie ul.products{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-msie .elementor-grid .elementor-grid-item,.elementor-msie .elementor-grid li.product,.elementor-msie ul.products .elementor-grid-item,.elementor-msie ul.products li.product{word-break:break-word}.elementor-msie .elementor-grid-1 .elementor-grid-item{width:100%}.elementor-msie .elementor-grid-2 .elementor-grid-item{width:50%}.elementor-msie .elementor-grid-3 .elementor-grid-item{width:33.3333333333%}.elementor-msie .elementor-grid-4 .elementor-grid-item{width:25%}.elementor-msie .elementor-grid-5 .elementor-grid-item{width:20%}.elementor-msie .elementor-grid-6 .elementor-grid-item{width:16.6666666667%}.elementor-msie .elementor-grid-7 .elementor-grid-item{width:14.2857142857%}.elementor-msie .elementor-grid-8 .elementor-grid-item{width:12.5%}.elementor-msie .elementor-grid-9 .elementor-grid-item{width:11.1111111111%}.elementor-msie .elementor-grid-10 .elementor-grid-item{width:10%}.elementor-msie .elementor-grid-11 .elementor-grid-item{width:9.0909090909%}.elementor-msie .elementor-grid-12 .elementor-grid-item{width:8.3333333333%}@media (max-width:1024px){.elementor-msie .elementor-grid-tablet-1 .elementor-grid-item{width:100%}.elementor-msie .elementor-grid-tablet-2 .elementor-grid-item{width:50%}.elementor-msie .elementor-grid-tablet-3 .elementor-grid-item{width:33.3333333333%}.elementor-msie .elementor-grid-tablet-4 .elementor-grid-item{width:25%}.elementor-msie .elementor-grid-tablet-5 .elementor-grid-item{width:20%}.elementor-msie .elementor-grid-tablet-6 .elementor-grid-item{width:16.6666666667%}.elementor-msie .elementor-grid-tablet-7 .elementor-grid-item{width:14.2857142857%}.elementor-msie .elementor-grid-tablet-8 .elementor-grid-item{width:12.5%}.elementor-msie .elementor-grid-tablet-9 .elementor-grid-item{width:11.1111111111%}.elementor-msie .elementor-grid-tablet-10 .elementor-grid-item{width:10%}.elementor-msie .elementor-grid-tablet-11 .elementor-grid-item{width:9.0909090909%}.elementor-msie .elementor-grid-tablet-12 .elementor-grid-item{width:8.3333333333%}}@media (max-width:767px){.elementor-msie .elementor-grid-mobile-1 .elementor-grid-item{width:100%}.elementor-msie .elementor-grid-mobile-2 .elementor-grid-item{width:50%}.elementor-msie .elementor-grid-mobile-3 .elementor-grid-item{width:33.3333333333%}.elementor-msie .elementor-grid-mobile-4 .elementor-grid-item{width:25%}.elementor-msie .elementor-grid-mobile-5 .elementor-grid-item{width:20%}.elementor-msie .elementor-grid-mobile-6 .elementor-grid-item{width:16.6666666667%}.elementor-msie .elementor-grid-mobile-7 .elementor-grid-item{width:14.2857142857%}.elementor-msie .elementor-grid-mobile-8 .elementor-grid-item{width:12.5%}.elementor-msie .elementor-grid-mobile-9 .elementor-grid-item{width:11.1111111111%}.elementor-msie .elementor-grid-mobile-10 .elementor-grid-item{width:10%}.elementor-msie .elementor-grid-mobile-11 .elementor-grid-item{width:9.0909090909%}.elementor-msie .elementor-grid-mobile-12 .elementor-grid-item{width:8.3333333333%}}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-1 ul.products li.product{width:100%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-2 ul.products li.product{width:50%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-3 ul.products li.product{width:33.3333333333%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-4 ul.products li.product{width:25%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-5 ul.products li.product{width:20%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-6 ul.products li.product{width:16.6666666667%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-7 ul.products li.product{width:14.2857142857%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-8 ul.products li.product{width:12.5%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-9 ul.products li.product{width:11.1111111111%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-10 ul.products li.product{width:10%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-11 ul.products li.product{width:9.0909090909%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-12 ul.products li.product{width:8.3333333333%}@media (max-width:1024px){.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-1 ul.products li.product{width:100%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-2 ul.products li.product{width:50%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-3 ul.products li.product{width:33.3333333333%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-4 ul.products li.product{width:25%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-5 ul.products li.product{width:20%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-6 ul.products li.product{width:16.6666666667%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-7 ul.products li.product{width:14.2857142857%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-8 ul.products li.product{width:12.5%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-9 ul.products li.product{width:11.1111111111%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-10 ul.products li.product{width:10%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-11 ul.products li.product{width:9.0909090909%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-tablet-12 ul.products li.product{width:8.3333333333%}}@media (max-width:767px){.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-1 ul.products li.product{width:100%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-2 ul.products li.product{width:50%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-3 ul.products li.product{width:33.3333333333%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-4 ul.products li.product{width:25%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-5 ul.products li.product{width:20%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-6 ul.products li.product{width:16.6666666667%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-7 ul.products li.product{width:14.2857142857%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-8 ul.products li.product{width:12.5%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-9 ul.products li.product{width:11.1111111111%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-10 ul.products li.product{width:10%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-11 ul.products li.product{width:9.0909090909%}.elementor-msie .elementor-element.elementor-wc-products.elementor-products-columns-mobile-12 ul.products li.product{width:8.3333333333%}}.elementor-msie .elementor-element.elementor-wc-products ul.products,.elementor-msie .elementor-posts{margin-right:-10px;margin-left:-10px}.elementor-msie .elementor-element.elementor-wc-products ul.products .elementor-post,.elementor-msie .elementor-element.elementor-wc-products ul.products li.product,.elementor-msie .elementor-posts .elementor-post,.elementor-msie .elementor-posts li.product{padding-right:10px;padding-left:10px;margin-bottom:20px}.elementor-msie .elementor-element.elementor-wc-products ul.products .elementor-post,.elementor-msie .elementor-posts .elementor-post{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
+/*! elementor - v2.2.1 - 03-09-2018 */
.dialog-widget-content {
background-color: #fff;
position: absolute;
.dialog-type-lightbox .dialog-widget-content {
margin: auto;
width: 375px; }
+ .dialog-type-lightbox .dialog-header {
+ padding: 20px 0;
+ font-weight: 500; }
.dialog-type-lightbox .dialog-message {
- padding: 0 20px;
+ padding: 0 20px 20px;
min-height: 50px; }
- .dialog-type-lightbox .dialog-widget-header, .dialog-type-lightbox .dialog-message {
+ .dialog-type-lightbox .dialog-header, .dialog-type-lightbox .dialog-message {
text-align: center; }
.dialog-type-lightbox .dialog-buttons-wrapper {
border-top: 1px solid #e6e9ec;
.dialog-type-lightbox .dialog-buttons-wrapper > button::-moz-focus-inner {
border: 0; }
-.dialog-widget-header {
- padding: 20px 0;
- font-weight: 500; }
-
.dialog-close-button {
cursor: pointer;
position: absolute;
.dialog-close-button:not(:hover) {
opacity: .4; }
-.dialog-lightbox-widget .dialog-widget-header,
-.dialog-confirm-widget .dialog-widget-header {
+.dialog-lightbox-widget .dialog-header,
+.dialog-confirm-widget .dialog-header {
font-size: 15px;
color: #495157; }
width: 100%; } }
#wpadminbar #wp-admin-bar-elementor_edit_page > .ab-item::before {
- content: "\e800";
+ content: "\e801";
font-family: eicons;
- font-size: 12px;
- margin-top: 5px; }
+ top: 3px;
+ font-size: 18px; }
+
+#wpadminbar #wp-admin-bar-elementor_inspector > .ab-item::before {
+ content: "\f348";
+ top: 2px; }
.elementor:after {
position: absolute;
.elementor-column.elementor-md-100 {
width: 100%; } }
+@media (min-width: 768px) and (max-width: 1024px) {
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(1) {
+ -webkit-box-ordinal-group: 11;
+ -webkit-order: 10;
+ -ms-flex-order: 10;
+ order: 10; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(2) {
+ -webkit-box-ordinal-group: 10;
+ -webkit-order: 9;
+ -ms-flex-order: 9;
+ order: 9; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(3) {
+ -webkit-box-ordinal-group: 9;
+ -webkit-order: 8;
+ -ms-flex-order: 8;
+ order: 8; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(4) {
+ -webkit-box-ordinal-group: 8;
+ -webkit-order: 7;
+ -ms-flex-order: 7;
+ order: 7; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(5) {
+ -webkit-box-ordinal-group: 7;
+ -webkit-order: 6;
+ -ms-flex-order: 6;
+ order: 6; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(6) {
+ -webkit-box-ordinal-group: 6;
+ -webkit-order: 5;
+ -ms-flex-order: 5;
+ order: 5; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(7) {
+ -webkit-box-ordinal-group: 5;
+ -webkit-order: 4;
+ -ms-flex-order: 4;
+ order: 4; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(8) {
+ -webkit-box-ordinal-group: 4;
+ -webkit-order: 3;
+ -ms-flex-order: 3;
+ order: 3; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(9) {
+ -webkit-box-ordinal-group: 3;
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(10) {
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1; } }
+
@media (max-width: 767px) {
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(1) {
+ -webkit-box-ordinal-group: 11;
+ -webkit-order: 10;
+ -ms-flex-order: 10;
+ order: 10; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(2) {
+ -webkit-box-ordinal-group: 10;
+ -webkit-order: 9;
+ -ms-flex-order: 9;
+ order: 9; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(3) {
+ -webkit-box-ordinal-group: 9;
+ -webkit-order: 8;
+ -ms-flex-order: 8;
+ order: 8; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(4) {
+ -webkit-box-ordinal-group: 8;
+ -webkit-order: 7;
+ -ms-flex-order: 7;
+ order: 7; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(5) {
+ -webkit-box-ordinal-group: 7;
+ -webkit-order: 6;
+ -ms-flex-order: 6;
+ order: 6; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(6) {
+ -webkit-box-ordinal-group: 6;
+ -webkit-order: 5;
+ -ms-flex-order: 5;
+ order: 5; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(7) {
+ -webkit-box-ordinal-group: 5;
+ -webkit-order: 4;
+ -ms-flex-order: 4;
+ order: 4; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(8) {
+ -webkit-box-ordinal-group: 4;
+ -webkit-order: 3;
+ -ms-flex-order: 3;
+ order: 3; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(9) {
+ -webkit-box-ordinal-group: 3;
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(10) {
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1; }
.elementor-column {
- width: 100%; }
- .elementor-reverse-mobile > .elementor-container > .elementor-row {
- -webkit-box-orient: vertical;
- -webkit-box-direction: reverse;
- -webkit-flex-direction: column-reverse;
- -ms-flex-direction: column-reverse;
- flex-direction: column-reverse; } }
+ width: 100%; } }
-.elementor-grid, .elementor-inline-items, ul.elementor-icon-list-items.elementor-inline-items {
+ul.elementor-icon-list-items.elementor-inline-items {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap; }
- .elementor-grid .elementor-grid-item, .elementor-inline-items .elementor-grid-item, ul.elementor-icon-list-items.elementor-inline-items .elementor-grid-item {
+ ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item {
word-break: break-word; }
+.elementor-grid .elementor-grid-item {
+ word-break: break-word;
+ min-width: 0; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; }
+
+@media (max-width: 1024px) {
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; } }
+
+@media (max-width: 767px) {
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; } }
+
.elementor-screen-only,
.screen-reader-text,
.screen-reader-text span,
align-items: flex-end; }
.elementor-field-group .elementor-field-textual {
width: 100%;
+ max-width: 100%;
border: 1px solid #818a91;
background-color: transparent;
color: #373a3c;
color: inherit;
font-family: inherit;
opacity: 0.6; }
- .elementor-field-group .elementor-field-textual::-moz-placeholder {
- color: inherit;
- font-family: inherit;
- opacity: 0.6; }
.elementor-field-group .elementor-field-textual::-ms-input-placeholder {
color: inherit;
font-family: inherit;
position: relative;
width: 100%; }
.elementor-field-group .elementor-select-wrapper select {
+ appearance: none;
-webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
+ -moz-appearance: none;
color: inherit;
font-size: inherit;
font-family: inherit;
.elementor-form .elementor-button.elementor-size-xl {
min-height: 72px; }
+.elementor-element .elementor-widget-container {
+ -webkit-transition: background 0.3s, border 0.3s, -webkit-border-radius 0.3s, -webkit-box-shadow 0.3s;
+ transition: background 0.3s, border 0.3s, -webkit-border-radius 0.3s, -webkit-box-shadow 0.3s;
+ -o-transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;
+ transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;
+ transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s, -webkit-border-radius 0.3s, -webkit-box-shadow 0.3s; }
+
.elementor-accordion {
text-align: right; }
.elementor-accordion .elementor-accordion-item {
padding: 15px 20px;
font-weight: bold;
line-height: 1;
- cursor: pointer; }
+ cursor: pointer;
+ outline: none; }
.elementor-accordion .elementor-tab-title .elementor-accordion-icon {
display: inline-block;
width: 1.5em; }
-o-transition: all 0.5s;
transition: all 0.5s; }
.elementor-button:hover, .elementor-button:focus, .elementor-button:visited {
- color: #fff;
- opacity: .9; }
+ color: #fff; }
.elementor-button.elementor-size-xs {
font-size: 13px;
padding: 10px 20px;
right: auto;
position: relative;
height: 100%;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
border-top: 0;
border-bottom: 0;
border-right: 0;
.elementor-widget-image .elementor-image figure > a {
display: block; }
.elementor-widget-image .elementor-image img {
- vertical-align: middle; }
+ vertical-align: middle;
+ display: inline-block; }
.elementor-widget-image .elementor-image.elementor-image-shape-circle {
-webkit-border-radius: 50%;
border-radius: 50%; }
.elementor-social-icon:hover {
opacity: .9;
color: white; }
+ .elementor-social-icon-android {
+ background-color: #A4C639; }
.elementor-social-icon-apple {
background-color: #999999; }
.elementor-social-icon-behance {
background-color: #0077b5; }
.elementor-social-icon-medium {
background-color: #00ab6b; }
- .elementor-social-icon-odnoklassniki {
- background-color: #F4731C; }
.elementor-social-icon-meetup {
background-color: #ec1c40; }
+ .elementor-social-icon-mixcloud {
+ background-color: #273a4b; }
+ .elementor-social-icon-odnoklassniki {
+ background-color: #F4731C; }
.elementor-social-icon-pinterest {
background-color: #bd081c; }
.elementor-social-icon-product-hunt {
background-color: #EB4924; }
.elementor-social-icon-telegram {
background-color: #2CA5E0; }
+ .elementor-social-icon-thumb-tack {
+ background-color: #1aa1d8; }
.elementor-social-icon-tripadvisor {
background-color: #589442; }
.elementor-social-icon-tumblr {
width: 60px;
height: 60px;
-webkit-border-radius: 50%;
- border-radius: 50%; }
+ border-radius: 50%;
+ -o-object-fit: cover;
+ object-fit: cover;
+ max-width: none; }
.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image {
padding-left: 15px; }
.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details {
margin: 0;
padding: 15px;
border-bottom: 1px solid #D4D4D4;
- cursor: pointer; }
+ cursor: pointer;
+ outline: none; }
.elementor-toggle .elementor-tab-title .elementor-toggle-icon {
display: inline-block;
width: 1em; }
.elementor-toggle .elementor-tab-content {
padding: 12px 10px; } }
+.elementor-widget-video .elementor-widget-container {
+ overflow: hidden; }
+
.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay {
position: absolute;
top: 0;
display: none; }
.elementor-slick-slider .slick-loading .slick-list {
- background: #fff url("../images/ajax-loader.gif") center center no-repeat; }
+ background: #fff; }
+ .elementor-slick-slider .slick-loading .slick-list:after {
+ content: '\f1ce';
+ font-family: FontAwesome;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+ font-size: 25px;
+ color: #a4afb7; }
.elementor-slick-slider .slick-prev,
.elementor-slick-slider .slick-next {
padding: 0;
-webkit-box-shadow: none;
box-shadow: none;
+ appearance: none;
-webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
+ -moz-appearance: none; }
.swiper-pagination-clickable .swiper-pagination-bullet {
cursor: pointer; }
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
-.elementor-lightbox .dialog-widget-header {
+.elementor-lightbox .dialog-header {
display: none; }
.elementor-lightbox .dialog-widget-content {
padding: 0; }
@media (max-width: 767px) {
- .elementor:not(.elementor-edit-area-active) .elementor-hidden-phone {
+ .elementor .elementor-hidden-phone {
display: none; } }
@media (min-width: 768px) and (max-width: 1024px) {
- .elementor:not(.elementor-edit-area-active) .elementor-hidden-tablet {
+ .elementor .elementor-hidden-tablet {
display: none; } }
@media (min-width: 1025px) {
- .elementor:not(.elementor-edit-area-active) .elementor-hidden-desktop {
+ .elementor .elementor-hidden-desktop {
display: none; } }
/*# sourceMappingURL=frontend-rtl.css.map */
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-message{padding:0 20px;min-height:50px}.dialog-type-lightbox .dialog-message,.dialog-type-lightbox .dialog-widget-header{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-widget-header{padding:20px 0;font-weight:500}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-widget-header,.dialog-lightbox-widget .dialog-widget-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-left:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor{-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual}.elementor *,.elementor :after,.elementor :before{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor a{-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.elementor hr{margin:0;background-color:transparent}.elementor img{height:auto;max-width:100%;border:none;-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.elementor .elementor-widget:not(.elementor-widget-text-editor) figure{margin:0}.elementor embed,.elementor iframe,.elementor object,.elementor video{max-width:100%;width:100%;margin:0;line-height:1;border:none}.elementor .elementor-custom-embed{line-height:0}.elementor .elementor-background-video-container{height:100%;width:100%;top:0;left:0;position:absolute;overflow:hidden;z-index:0;-webkit-transition:opacity 1s;-o-transition:opacity 1s;transition:opacity 1s}.elementor .elementor-background-video-container.elementor-loading{opacity:0}.elementor .elementor-background-video-embed{max-width:none;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor .elementor-background-video{position:absolute;max-width:none;top:50%;left:50%;-webkit-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%)}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor-invisible{visibility:hidden}.elementor-align-center{text-align:center}.elementor-align-center .elementor-button{width:auto}.elementor-align-right{text-align:right}.elementor-align-right .elementor-button{width:auto}.elementor-align-left{text-align:left}.elementor-align-left .elementor-button{width:auto}.elementor-align-justify .elementor-button{width:100%}.elementor-custom-embed-play{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;opacity:.8;text-shadow:1px 0 6px rgba(0,0,0,.3);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:FontAwesome;-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.elementor-custom-embed-play.elementor-playing i:before{content:"\f1ce"}.elementor-swiper-button{position:absolute;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;z-index:1;cursor:pointer;font-size:25px;color:hsla(0,0%,93%,.9);top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor-swiper-button.swiper-button-disabled{opacity:.3}.elementor-tag{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex}@media (max-width:1024px){.elementor-tablet-align-center{text-align:center}.elementor-tablet-align-center .elementor-button{width:auto}.elementor-tablet-align-right{text-align:right}.elementor-tablet-align-right .elementor-button{width:auto}.elementor-tablet-align-left{text-align:left}.elementor-tablet-align-left .elementor-button{width:auto}.elementor-tablet-align-justify .elementor-button{width:100%}}@media (max-width:767px){.elementor-mobile-align-center{text-align:center}.elementor-mobile-align-center .elementor-button{width:auto}.elementor-mobile-align-right{text-align:right}.elementor-mobile-align-right .elementor-button{width:auto}.elementor-mobile-align-left{text-align:left}.elementor-mobile-align-left .elementor-button{width:auto}.elementor-mobile-align-justify .elementor-button{width:100%}}#wpadminbar #wp-admin-bar-elementor_edit_page>.ab-item:before{content:"\e800";font-family:eicons;font-size:12px;margin-top:5px}.elementor:after{position:absolute;opacity:0;width:0;height:0;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}@media (min-width:1025px){.elementor:after{content:"desktop"}}@media (min-width:768px) and (max-width:1024px){.elementor:after{content:"tablet"}}@media (max-width:767px){.elementor:after{content:"mobile"}}.elementor-section{position:relative}.elementor-section .elementor-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:auto;margin-left:auto;position:relative}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-section.elementor-section-stretched{position:relative;width:100%}.elementor-section.elementor-section-items-top>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section.elementor-section-items-middle>.elementor-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section.elementor-section-items-bottom>.elementor-container{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}@media (min-width:768px){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}}.elementor-section-content-top>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section-content-middle>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section-content-bottom>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-row{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}@media (max-width:1024px){.elementor-row{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.elementor-column-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-wrap,.elementor-widget-wrap{width:100%;position:relative}.elementor-widget{position:relative}.elementor-widget:not(:last-child){margin-bottom:20px}.elementor-column{position:relative;min-height:1px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-gap-narrow>.elementor-row>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-row>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-row>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-row>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-row>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:768px){.elementor-column.elementor-col-10,.elementor-column[data-col="10"]{width:10%}.elementor-column.elementor-col-11,.elementor-column[data-col="11"]{width:11.111%}.elementor-column.elementor-col-12,.elementor-column[data-col="12"]{width:12.5%}.elementor-column.elementor-col-14,.elementor-column[data-col="14"]{width:14.285%}.elementor-column.elementor-col-16,.elementor-column[data-col="16"]{width:16.666%}.elementor-column.elementor-col-20,.elementor-column[data-col="20"]{width:20%}.elementor-column.elementor-col-25,.elementor-column[data-col="25"]{width:25%}.elementor-column.elementor-col-30,.elementor-column[data-col="30"]{width:30%}.elementor-column.elementor-col-33,.elementor-column[data-col="33"]{width:33.333%}.elementor-column.elementor-col-40,.elementor-column[data-col="40"]{width:40%}.elementor-column.elementor-col-50,.elementor-column[data-col="50"]{width:50%}.elementor-column.elementor-col-60,.elementor-column[data-col="60"]{width:60%}.elementor-column.elementor-col-66,.elementor-column[data-col="66"]{width:66.666%}.elementor-column.elementor-col-70,.elementor-column[data-col="70"]{width:70%}.elementor-column.elementor-col-75,.elementor-column[data-col="75"]{width:75%}.elementor-column.elementor-col-80,.elementor-column[data-col="80"]{width:80%}.elementor-column.elementor-col-83,.elementor-column[data-col="83"]{width:83.333%}.elementor-column.elementor-col-90,.elementor-column[data-col="90"]{width:90%}.elementor-column.elementor-col-100,.elementor-column[data-col="100"]{width:100%}}@media (max-width:479px){.elementor-column.elementor-xs-10{width:10%}.elementor-column.elementor-xs-11{width:11.111%}.elementor-column.elementor-xs-12{width:12.5%}.elementor-column.elementor-xs-14{width:14.285%}.elementor-column.elementor-xs-16{width:16.666%}.elementor-column.elementor-xs-20{width:20%}.elementor-column.elementor-xs-25{width:25%}.elementor-column.elementor-xs-30{width:30%}.elementor-column.elementor-xs-33{width:33.333%}.elementor-column.elementor-xs-40{width:40%}.elementor-column.elementor-xs-50{width:50%}.elementor-column.elementor-xs-60{width:60%}.elementor-column.elementor-xs-66{width:66.666%}.elementor-column.elementor-xs-70{width:70%}.elementor-column.elementor-xs-75{width:75%}.elementor-column.elementor-xs-80{width:80%}.elementor-column.elementor-xs-83{width:83.333%}.elementor-column.elementor-xs-90{width:90%}.elementor-column.elementor-xs-100{width:100%}}@media (max-width:767px){.elementor-column.elementor-sm-10{width:10%}.elementor-column.elementor-sm-11{width:11.111%}.elementor-column.elementor-sm-12{width:12.5%}.elementor-column.elementor-sm-14{width:14.285%}.elementor-column.elementor-sm-16{width:16.666%}.elementor-column.elementor-sm-20{width:20%}.elementor-column.elementor-sm-25{width:25%}.elementor-column.elementor-sm-30{width:30%}.elementor-column.elementor-sm-33{width:33.333%}.elementor-column.elementor-sm-40{width:40%}.elementor-column.elementor-sm-50{width:50%}.elementor-column.elementor-sm-60{width:60%}.elementor-column.elementor-sm-66{width:66.666%}.elementor-column.elementor-sm-70{width:70%}.elementor-column.elementor-sm-75{width:75%}.elementor-column.elementor-sm-80{width:80%}.elementor-column.elementor-sm-83{width:83.333%}.elementor-column.elementor-sm-90{width:90%}.elementor-column.elementor-sm-100{width:100%}}@media (min-width:768px) and (max-width:1024px){.elementor-column.elementor-md-10{width:10%}.elementor-column.elementor-md-11{width:11.111%}.elementor-column.elementor-md-12{width:12.5%}.elementor-column.elementor-md-14{width:14.285%}.elementor-column.elementor-md-16{width:16.666%}.elementor-column.elementor-md-20{width:20%}.elementor-column.elementor-md-25{width:25%}.elementor-column.elementor-md-30{width:30%}.elementor-column.elementor-md-33{width:33.333%}.elementor-column.elementor-md-40{width:40%}.elementor-column.elementor-md-50{width:50%}.elementor-column.elementor-md-60{width:60%}.elementor-column.elementor-md-66{width:66.666%}.elementor-column.elementor-md-70{width:70%}.elementor-column.elementor-md-75{width:75%}.elementor-column.elementor-md-80{width:80%}.elementor-column.elementor-md-83{width:83.333%}.elementor-column.elementor-md-90{width:90%}.elementor-column.elementor-md-100{width:100%}}@media (max-width:767px){.elementor-column{width:100%}.elementor-reverse-mobile>.elementor-container>.elementor-row{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}.elementor-grid,.elementor-inline-items,ul.elementor-icon-list-items.elementor-inline-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid .elementor-grid-item,.elementor-inline-items .elementor-grid-item,ul.elementor-icon-list-items.elementor-inline-items .elementor-grid-item{word-break:break-word}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.elementor-form-fields-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group .elementor-field-subgroup,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>.elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>input,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>textarea{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group .elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group>input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-field-group.elementor-field-type-submit{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-field-group .elementor-field-textual{width:100%;border:1px solid #818a91;background-color:transparent;color:#373a3c;vertical-align:middle;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::-moz-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-select-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;width:100%}.elementor-field-group .elementor-select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:inherit;font-size:inherit;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\f0d7";font-family:FontAwesome;font-size:15px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:10px;pointer-events:none}.elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before{content:""}.elementor-field-subgroup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-field-subgroup .elementor-field-option label{display:inline-block}.elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option{padding-left:10px}.elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-field-label{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-right:.2em}.elementor-field-textual{line-height:1.4}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;-webkit-border-radius:2px;border-radius:2px}.elementor-field-textual.elementor-size-sm{font-size:15px;min-height:40px;padding:5px 14px;-webkit-border-radius:3px;border-radius:3px}.elementor-field-textual.elementor-size-md{font-size:16px;min-height:47px;padding:6px 16px;-webkit-border-radius:4px;border-radius:4px}.elementor-field-textual.elementor-size-lg{font-size:18px;min-height:59px;padding:7px 20px;-webkit-border-radius:5px;border-radius:5px}.elementor-field-textual.elementor-size-xl{font-size:20px;min-height:72px;padding:8px 24px;-webkit-border-radius:6px;border-radius:6px}.elementor-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-button-align-start .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-button-align-end .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}@media screen and (max-width:1024px){.elementor-tablet-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-tablet-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-tablet-button-align-start .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-tablet-button-align-end .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}}@media screen and (max-width:767px){.elementor-mobile-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-mobile-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-mobile-button-align-start .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-mobile-button-align-end .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}}.elementor-error .elementor-field{border-color:#d9534f}.elementor-error .help-inline{color:#d9534f;font-size:.9em}.elementor-message{margin:10px 0;font-size:1em;line-height:1}.elementor-message:before{content:"\f00c";display:inline-block;font-family:fontawesome;font-weight:400;font-style:normal;vertical-align:middle;margin-right:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\f00d"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-top:0;padding-bottom:0;border:0 none}.elementor-form .elementor-button>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-form .elementor-button .elementor-align-icon-right{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.elementor-form .elementor-button .elementor-align-icon-left{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-form .elementor-button.elementor-size-xs{min-height:33px}.elementor-form .elementor-button.elementor-size-sm{min-height:40px}.elementor-form .elementor-button.elementor-size-md{min-height:47px}.elementor-form .elementor-button.elementor-size-lg{min-height:59px}.elementor-form .elementor-button.elementor-size-xl{min-height:72px}.elementor-accordion{text-align:right}.elementor-accordion .elementor-accordion-item{border:1px solid #d4d4d4}.elementor-accordion .elementor-accordion-item+.elementor-accordion-item{border-top:none}.elementor-accordion .elementor-tab-title{margin:0;padding:15px 20px;font-weight:700;line-height:1;cursor:pointer}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right{float:right;text-align:right}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left{float:left;text-align:left}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed{display:block}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened,.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed{display:none}.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened{display:block}.elementor-accordion .elementor-tab-content{display:none;padding:15px 20px;border-top:1px solid #d4d4d4}@media (max-width:767px){.elementor-accordion .elementor-tab-title{padding:12px 15px}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{width:1.2em}.elementor-accordion .elementor-tab-content{padding:7px 15px}}.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:right}.elementor-alert .elementor-alert-title{display:block;font-weight:700}.elementor-alert .elementor-alert-description{font-size:13px}.elementor-alert button.elementor-alert-dismiss{position:absolute;left:10px;top:10px;padding:3px;font-size:20px;line-height:1;background:transparent;color:inherit;border:none;cursor:pointer}.elementor-alert.elementor-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert.elementor-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert.elementor-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert.elementor-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:767px){.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}.elementor-button{display:inline-block;line-height:1;background-color:#818a91;color:#fff;text-align:center;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff;opacity:.9}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;-webkit-border-radius:2px;border-radius:2px}.elementor-button.elementor-size-sm{font-size:15px;padding:12px 24px;-webkit-border-radius:3px;border-radius:3px}.elementor-button.elementor-size-md{font-size:16px;padding:15px 30px;-webkit-border-radius:4px;border-radius:4px}.elementor-button.elementor-size-lg{font-size:18px;padding:20px 40px;-webkit-border-radius:5px;border-radius:5px}.elementor-button.elementor-size-xl{font-size:20px;padding:25px 50px;-webkit-border-radius:6px;border-radius:6px}.elementor-button .elementor-align-icon-right{float:right;margin-left:5px}.elementor-button .elementor-align-icon-left{float:left;margin-right:5px}.elementor-button .elementor-button-text{display:inline-block}.elementor-button span{text-decoration:inherit}.elementor-element.elementor-button-info .elementor-button{background-color:#5bc0de}.elementor-element.elementor-button-success .elementor-button{background-color:#5cb85c}.elementor-element.elementor-button-warning .elementor-button{background-color:#f0ad4e}.elementor-element.elementor-button-danger .elementor-button{background-color:#d9534f}.elementor-widget-button .elementor-button .elementor-button-info{background-color:#5bc0de}.elementor-widget-button .elementor-button .elementor-button-success{background-color:#5cb85c}.elementor-widget-button .elementor-button .elementor-button-warning{background-color:#f0ad4e}.elementor-widget-button .elementor-button .elementor-button-danger{background-color:#d9534f}.elementor-counter .elementor-counter-number-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:69px;font-weight:600;color:#222;line-height:1}.elementor-counter .elementor-counter-number-prefix,.elementor-counter .elementor-counter-number-suffix{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:pre-wrap}.elementor-counter .elementor-counter-number-prefix{text-align:left}.elementor-counter .elementor-counter-number-suffix{text-align:right}.elementor-counter .elementor-counter-title{text-align:center;font-size:19px;font-weight:400;color:#666;line-height:2.5}.elementor-widget-divider .elementor-divider{line-height:0;font-size:0}.elementor-widget-divider .elementor-divider-separator{display:inline-block}.elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}@media (min-width:768px){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:767px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}.elementor-widget-google_maps iframe{height:300px}.elementor-widget-heading .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title>a{color:inherit;font-size:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}.elementor-icon{display:inline-block;line-height:1;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;color:#818a91;font-size:50px;text-align:center}.elementor-icon:hover{color:#818a91}.elementor-icon i{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#818a91;color:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#818a91;border:3px solid #818a91;background-color:transparent}.elementor-shape-circle .elementor-icon{-webkit-border-radius:50%;border-radius:50%}@media (min-width:768px){.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img{margin:auto}.elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:767px){.elementor-widget-icon-box .elementor-icon-box-icon{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-icon-box .elementor-icon-box-wrapper{text-align:center}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}.elementor-widget .elementor-icon-list-items.elementor-inline-items{margin-right:-8px;margin-left:-8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item{margin-right:8px;margin-left:8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after{width:auto;left:auto;right:auto;position:relative;height:100%;border-top:0;border-bottom:0;border-right:0;border-left-width:1px;border-style:solid;left:-8px}.elementor-widget .elementor-icon-list-items{list-style-type:none;margin:0;padding:0}.elementor-widget .elementor-icon-list-item{margin:0;padding:0;position:relative}.elementor-widget .elementor-icon-list-item:after{position:absolute;bottom:0;width:100%}.elementor-widget .elementor-icon-list-item,.elementor-widget .elementor-icon-list-item a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget .elementor-icon-list-item a{width:100%}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding-right:5px}.elementor-widget .elementor-icon-list-icon{text-align:center}.elementor-widget.elementor-align-center .elementor-icon-list-item,.elementor-widget.elementor-align-center .elementor-icon-list-item a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-align-center .elementor-inline-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-left .elementor-icon-list-item,.elementor-widget.elementor-align-left .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:left}.elementor-widget.elementor-align-left .elementor-inline-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-align-right .elementor-icon-list-item,.elementor-widget.elementor-align-right .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:right}.elementor-widget.elementor-align-right .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after{left:0}@media (max-width:1024px){.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:left}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:right}.elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:767px){.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:left}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:right}.elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after{left:0}}.elementor-widget-image{text-align:center}.elementor-widget-image .elementor-image>a,.elementor-widget-image .elementor-image figure>a{display:block}.elementor-widget-image .elementor-image img{vertical-align:middle}.elementor-widget-image .elementor-image.elementor-image-shape-circle{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:768px){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:767px){.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}.elementor-image-carousel-wrapper .slick-image-stretch .slick-slide .slick-slide-image{width:100%}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}.swiper-container .swiper-slide figure{line-height:0}.swiper-container .swiper-slide figure img{width:100%}body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}.elementor-widget-progress{text-align:right}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:30px;line-height:30px;-webkit-border-radius:2px;border-radius:2px}.elementor-progress-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#818a91;width:0;font-size:11px;-webkit-border-radius:2px;border-radius:2px;-webkit-transition:width 1s ease-in-out;-o-transition:width 1s ease-in-out;transition:width 1s ease-in-out}.elementor-progress-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-right:15px}.elementor-progress-percentage{padding-left:15px}.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar{background-color:#5bc0de}.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar{background-color:#5cb85c}.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar{background-color:#f0ad4e}.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar{background-color:#d9534f}.elementor-progress .elementor-title{display:block}@media (max-width:767px){.elementor-progress-wrapper{height:25px;line-height:25px}.elementor-progress-text{padding-right:10px}}.elementor-social-icons-wrapper{font-size:0}.elementor-social-icon{font-size:25px;text-align:center;padding:.5em;margin-left:5px;cursor:pointer}.elementor-social-icon i{color:#fff}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-google-plus{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-linkedin{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#df2029}.elementor-social-icon-weixin{background-color:#7bb32e}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{-webkit-border-radius:10%;border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{width:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active{border-left-style:none}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{height:999em;width:0;left:0;border-left-style:solid}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{top:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after{top:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title{display:table-cell}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active{border-bottom-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{bottom:0;height:0;width:999em;border-bottom-style:solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{right:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after{left:100%}.elementor-widget-tabs .elementor-tab-content,.elementor-widget-tabs .elementor-tab-title,.elementor-widget-tabs .elementor-tab-title:after,.elementor-widget-tabs .elementor-tab-title:before,.elementor-widget-tabs .elementor-tabs-content-wrapper{border:1px none #d4d4d4}.elementor-widget-tabs .elementor-tabs{text-align:right}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:none}.elementor-widget-tabs .elementor-tab-desktop-title{position:relative;padding:20px 25px;font-weight:700;line-height:1;border:solid transparent}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active{border-color:#d4d4d4}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before{display:block;content:"";position:absolute}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:767px){.elementor-tabs .elementor-tab-content,.elementor-tabs .elementor-tab-title{border-style:solid;border-bottom-style:none}.elementor-tabs .elementor-tabs-wrapper{display:none}.elementor-tabs .elementor-tabs-content-wrapper{border-bottom-style:solid}.elementor-tabs .elementor-tab-content{padding:10px}}@media (min-width:768px){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-style:solid;border-right-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content{border-style:solid;border-top-style:none}.elementor-tabs .elementor-tab-mobile-title{display:none}}.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;color:inherit}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;color:inherit}.elementor-testimonial-wrapper.elementor-testimonial-text-align-left{text-align:left}.elementor-testimonial-wrapper.elementor-testimonial-text-align-right{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;-webkit-border-radius:50%;border-radius:50%}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-left:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:right;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}.elementor-toggle{text-align:right}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d4d4d4;cursor:pointer}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d4d4d4;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%}.slick-slider{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list,.slick-slider{position:relative;display:block}.slick-list{overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translateZ(0);transform:translateZ(0)}.slick-track{position:relative;left:0;top:0;display:block}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}.elementor-slick-slider[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.elementor-slick-slider .slick-loading .slick-list{background:#fff url(../images/ajax-loader.gif) 50% no-repeat}.elementor-slick-slider .slick-next,.elementor-slick-slider .slick-prev{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;padding:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:transparent;border:none;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus,.elementor-slick-slider .slick-next:hover,.elementor-slick-slider .slick-prev:focus,.elementor-slick-slider .slick-prev:hover{color:transparent;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus:before,.elementor-slick-slider .slick-next:hover:before,.elementor-slick-slider .slick-prev:focus:before,.elementor-slick-slider .slick-prev:hover:before{opacity:1}.elementor-slick-slider .slick-next.slick-disabled:before,.elementor-slick-slider .slick-prev.slick-disabled:before{opacity:.25}.elementor-slick-slider .slick-next:before,.elementor-slick-slider .slick-prev:before{font-family:FontAwesome;font-size:35px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider .slick-prev{left:-25px}[dir=rtl] .elementor-slick-slider .slick-prev{left:auto;right:-25px}.elementor-slick-slider .slick-prev:before{content:"\f104"}[dir=rtl] .elementor-slick-slider .slick-prev:before{content:"\f105"}.elementor-slick-slider .slick-next{right:-25px}[dir=rtl] .elementor-slick-slider .slick-next{left:-25px;right:auto}.elementor-slick-slider .slick-next:before{content:"\f105"}[dir=rtl] .elementor-slick-slider .slick-next:before{content:"\f104"}.elementor-slick-slider .slick-dotted.slick-slider{margin-bottom:30px}.elementor-slick-slider ul.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center;line-height:1}.elementor-slick-slider ul.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0;padding:0;cursor:pointer}.elementor-slick-slider ul.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:none;background:transparent}.elementor-slick-slider ul.slick-dots li button:focus,.elementor-slick-slider ul.slick-dots li button:hover{outline:none}.elementor-slick-slider ul.slick-dots li button:focus:before,.elementor-slick-slider ul.slick-dots li button:hover:before{opacity:1}.elementor-slick-slider ul.slick-dots li button:before{font-family:FontAwesome;font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:"\f111";text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider ul.slick-dots li.slick-active button:before{opacity:.75;color:#000}.elementor-slick-slider .slick-arrows-inside .slick-prev{left:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-prev{left:auto;right:20px}.elementor-slick-slider .slick-arrows-inside .slick-next{right:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-next{left:20px;right:auto}.elementor-slick-slider .slick-dots-inside .slick-dots{bottom:5px}.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider{margin-bottom:0}.elementor-slick-slider .slick-slider .slick-next,.elementor-slick-slider .slick-slider .slick-prev{z-index:1}.elementor-slick-slider .slick-slide img{margin:auto}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-webkit-background-size:27px 44px;background-size:27px 44px;background:no-repeat 50%}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23007aff'/%3E%3C/svg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z'/%3E%3C/svg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23007aff'/%3E%3C/svg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:6px;height:6px;display:inline-block;-webkit-border-radius:50%;border-radius:50%;background:#000;opacity:.2}.swiper-pagination-fraction{color:#000}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 6px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#000;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:hsla(0,0%,100%,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-scrollbar{-webkit-border-radius:10px;border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);-webkit-border-radius:10px;border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12) infinite;animation:swiper-preloader-spin 1s steps(12) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;-webkit-background-size:100% 100%;background-size:100%;background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E") no-repeat 50%}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E")}@-webkit-keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.elementor-lightbox .dialog-widget-header{display:none}.elementor-lightbox .dialog-widget-content{background:none;-webkit-box-shadow:none;box-shadow:none;width:100%;height:100%}.elementor-lightbox .dialog-message{-webkit-animation-duration:.4s;animation-duration:.4s}.elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio){height:100%}.elementor-lightbox .dialog-lightbox-close-button{cursor:pointer;position:absolute;font-size:25px;padding:5px;z-index:2;line-height:1}@media (max-width:767px){.elementor-lightbox .dialog-lightbox-close-button{padding:0}}.elementor-lightbox .dialog-lightbox-close-button,.elementor-lightbox .elementor-swiper-button{color:hsla(0,0%,93%,.9);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;opacity:1}.elementor-lightbox .dialog-lightbox-close-button:hover,.elementor-lightbox .elementor-swiper-button:hover{color:#fff}.elementor-lightbox .swiper-container{height:100%}.elementor-lightbox .elementor-lightbox-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:70px 80px;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin:auto}@media (max-width:767px){.elementor-lightbox .elementor-lightbox-item{padding:40px}}.elementor-lightbox .elementor-lightbox-image{max-height:100%}.elementor-lightbox .elementor-video-container{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}@media (min-width:1025px){.elementor-lightbox .elementor-video-container{width:75%}}@media (max-width:1024px){.elementor-lightbox .elementor-video-container{width:100%}}.elementor-lightbox .elementor-swiper-button-prev{left:35px}.elementor-lightbox .elementor-swiper-button-next{right:35px}@media (max-width:767px){.elementor-lightbox .elementor-swiper-button-prev{left:10px}.elementor-lightbox .elementor-swiper-button-next{right:10px}}.animated{-webkit-animation-duration:1.25s;animation-duration:1.25s}.animated.animated-slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.animated-fast{-webkit-animation-duration:.75s;animation-duration:.75s}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.elementor-shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.elementor-shape-top{top:-1px}.elementor-shape-bottom{bottom:-1px}.elementor-shape[data-negative=false].elementor-shape-bottom,.elementor-shape[data-negative=true].elementor-shape-top{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-shape svg{display:block;width:-webkit-calc(100% + 1.3px);width:calc(100% + 1.3px);position:relative;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-shape .elementor-shape-fill{fill:#fff;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotateY(0deg);transform:rotateY(0deg)}#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:200px}#wp-admin-bar-elementor_edit_page .elementor-edit-link-title{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;width:100%}#wp-admin-bar-elementor_edit_page .elementor-edit-link-type{background:#55595c;font-size:11px;line-height:9px;margin-top:6px;padding:4px 8px;-webkit-border-radius:3px;border-radius:3px}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{-webkit-transition:none;-o-transition:none;transition:none}#elementor .elementor-element ul.elementor-icon-list-items,#left-area ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}@media (max-width:767px){.elementor:not(.elementor-edit-area-active) .elementor-hidden-phone{display:none}}@media (min-width:768px) and (max-width:1024px){.elementor:not(.elementor-edit-area-active) .elementor-hidden-tablet{display:none}}@media (min-width:1025px){.elementor:not(.elementor-edit-area-active) .elementor-hidden-desktop{display:none}}
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{padding:20px 0;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 20px 20px;min-height:50px}.dialog-type-lightbox .dialog-header,.dialog-type-lightbox .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-header,.dialog-lightbox-widget .dialog-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-left:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor{-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual}.elementor *,.elementor :after,.elementor :before{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor a{-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.elementor hr{margin:0;background-color:transparent}.elementor img{height:auto;max-width:100%;border:none;-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.elementor .elementor-widget:not(.elementor-widget-text-editor) figure{margin:0}.elementor embed,.elementor iframe,.elementor object,.elementor video{max-width:100%;width:100%;margin:0;line-height:1;border:none}.elementor .elementor-custom-embed{line-height:0}.elementor .elementor-background-video-container{height:100%;width:100%;top:0;left:0;position:absolute;overflow:hidden;z-index:0;-webkit-transition:opacity 1s;-o-transition:opacity 1s;transition:opacity 1s}.elementor .elementor-background-video-container.elementor-loading{opacity:0}.elementor .elementor-background-video-embed{max-width:none;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor .elementor-background-video{position:absolute;max-width:none;top:50%;left:50%;-webkit-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%)}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor-invisible{visibility:hidden}.elementor-align-center{text-align:center}.elementor-align-center .elementor-button{width:auto}.elementor-align-right{text-align:right}.elementor-align-right .elementor-button{width:auto}.elementor-align-left{text-align:left}.elementor-align-left .elementor-button{width:auto}.elementor-align-justify .elementor-button{width:100%}.elementor-custom-embed-play{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;opacity:.8;text-shadow:1px 0 6px rgba(0,0,0,.3);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:FontAwesome;-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.elementor-custom-embed-play.elementor-playing i:before{content:"\f1ce"}.elementor-swiper-button{position:absolute;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;z-index:1;cursor:pointer;font-size:25px;color:hsla(0,0%,93%,.9);top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor-swiper-button.swiper-button-disabled{opacity:.3}.elementor-tag{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex}@media (max-width:1024px){.elementor-tablet-align-center{text-align:center}.elementor-tablet-align-center .elementor-button{width:auto}.elementor-tablet-align-right{text-align:right}.elementor-tablet-align-right .elementor-button{width:auto}.elementor-tablet-align-left{text-align:left}.elementor-tablet-align-left .elementor-button{width:auto}.elementor-tablet-align-justify .elementor-button{width:100%}}@media (max-width:767px){.elementor-mobile-align-center{text-align:center}.elementor-mobile-align-center .elementor-button{width:auto}.elementor-mobile-align-right{text-align:right}.elementor-mobile-align-right .elementor-button{width:auto}.elementor-mobile-align-left{text-align:left}.elementor-mobile-align-left .elementor-button{width:auto}.elementor-mobile-align-justify .elementor-button{width:100%}}#wpadminbar #wp-admin-bar-elementor_edit_page>.ab-item:before{content:"\e801";font-family:eicons;top:3px;font-size:18px}#wpadminbar #wp-admin-bar-elementor_inspector>.ab-item:before{content:"\f348";top:2px}.elementor:after{position:absolute;opacity:0;width:0;height:0;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}@media (min-width:1025px){.elementor:after{content:"desktop"}}@media (min-width:768px) and (max-width:1024px){.elementor:after{content:"tablet"}}@media (max-width:767px){.elementor:after{content:"mobile"}}.elementor-section{position:relative}.elementor-section .elementor-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:auto;margin-left:auto;position:relative}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-section.elementor-section-stretched{position:relative;width:100%}.elementor-section.elementor-section-items-top>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section.elementor-section-items-middle>.elementor-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section.elementor-section-items-bottom>.elementor-container{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}@media (min-width:768px){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}}.elementor-section-content-top>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section-content-middle>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section-content-bottom>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-row{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}@media (max-width:1024px){.elementor-row{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.elementor-column-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-wrap,.elementor-widget-wrap{width:100%;position:relative}.elementor-widget{position:relative}.elementor-widget:not(:last-child){margin-bottom:20px}.elementor-column{position:relative;min-height:1px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-gap-narrow>.elementor-row>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-row>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-row>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-row>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-row>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:768px){.elementor-column.elementor-col-10,.elementor-column[data-col="10"]{width:10%}.elementor-column.elementor-col-11,.elementor-column[data-col="11"]{width:11.111%}.elementor-column.elementor-col-12,.elementor-column[data-col="12"]{width:12.5%}.elementor-column.elementor-col-14,.elementor-column[data-col="14"]{width:14.285%}.elementor-column.elementor-col-16,.elementor-column[data-col="16"]{width:16.666%}.elementor-column.elementor-col-20,.elementor-column[data-col="20"]{width:20%}.elementor-column.elementor-col-25,.elementor-column[data-col="25"]{width:25%}.elementor-column.elementor-col-30,.elementor-column[data-col="30"]{width:30%}.elementor-column.elementor-col-33,.elementor-column[data-col="33"]{width:33.333%}.elementor-column.elementor-col-40,.elementor-column[data-col="40"]{width:40%}.elementor-column.elementor-col-50,.elementor-column[data-col="50"]{width:50%}.elementor-column.elementor-col-60,.elementor-column[data-col="60"]{width:60%}.elementor-column.elementor-col-66,.elementor-column[data-col="66"]{width:66.666%}.elementor-column.elementor-col-70,.elementor-column[data-col="70"]{width:70%}.elementor-column.elementor-col-75,.elementor-column[data-col="75"]{width:75%}.elementor-column.elementor-col-80,.elementor-column[data-col="80"]{width:80%}.elementor-column.elementor-col-83,.elementor-column[data-col="83"]{width:83.333%}.elementor-column.elementor-col-90,.elementor-column[data-col="90"]{width:90%}.elementor-column.elementor-col-100,.elementor-column[data-col="100"]{width:100%}}@media (max-width:479px){.elementor-column.elementor-xs-10{width:10%}.elementor-column.elementor-xs-11{width:11.111%}.elementor-column.elementor-xs-12{width:12.5%}.elementor-column.elementor-xs-14{width:14.285%}.elementor-column.elementor-xs-16{width:16.666%}.elementor-column.elementor-xs-20{width:20%}.elementor-column.elementor-xs-25{width:25%}.elementor-column.elementor-xs-30{width:30%}.elementor-column.elementor-xs-33{width:33.333%}.elementor-column.elementor-xs-40{width:40%}.elementor-column.elementor-xs-50{width:50%}.elementor-column.elementor-xs-60{width:60%}.elementor-column.elementor-xs-66{width:66.666%}.elementor-column.elementor-xs-70{width:70%}.elementor-column.elementor-xs-75{width:75%}.elementor-column.elementor-xs-80{width:80%}.elementor-column.elementor-xs-83{width:83.333%}.elementor-column.elementor-xs-90{width:90%}.elementor-column.elementor-xs-100{width:100%}}@media (max-width:767px){.elementor-column.elementor-sm-10{width:10%}.elementor-column.elementor-sm-11{width:11.111%}.elementor-column.elementor-sm-12{width:12.5%}.elementor-column.elementor-sm-14{width:14.285%}.elementor-column.elementor-sm-16{width:16.666%}.elementor-column.elementor-sm-20{width:20%}.elementor-column.elementor-sm-25{width:25%}.elementor-column.elementor-sm-30{width:30%}.elementor-column.elementor-sm-33{width:33.333%}.elementor-column.elementor-sm-40{width:40%}.elementor-column.elementor-sm-50{width:50%}.elementor-column.elementor-sm-60{width:60%}.elementor-column.elementor-sm-66{width:66.666%}.elementor-column.elementor-sm-70{width:70%}.elementor-column.elementor-sm-75{width:75%}.elementor-column.elementor-sm-80{width:80%}.elementor-column.elementor-sm-83{width:83.333%}.elementor-column.elementor-sm-90{width:90%}.elementor-column.elementor-sm-100{width:100%}}@media (min-width:768px) and (max-width:1024px){.elementor-column.elementor-md-10{width:10%}.elementor-column.elementor-md-11{width:11.111%}.elementor-column.elementor-md-12{width:12.5%}.elementor-column.elementor-md-14{width:14.285%}.elementor-column.elementor-md-16{width:16.666%}.elementor-column.elementor-md-20{width:20%}.elementor-column.elementor-md-25{width:25%}.elementor-column.elementor-md-30{width:30%}.elementor-column.elementor-md-33{width:33.333%}.elementor-column.elementor-md-40{width:40%}.elementor-column.elementor-md-50{width:50%}.elementor-column.elementor-md-60{width:60%}.elementor-column.elementor-md-66{width:66.666%}.elementor-column.elementor-md-70{width:70%}.elementor-column.elementor-md-75{width:75%}.elementor-column.elementor-md-80{width:80%}.elementor-column.elementor-md-83{width:83.333%}.elementor-column.elementor-md-90{width:90%}.elementor-column.elementor-md-100{width:100%}}@media (min-width:768px) and (max-width:1024px){.elementor-reverse-tablet>.elementor-container>.elementor-row>:first-child{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(2){-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(3){-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(4){-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(5){-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(6){-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(7){-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(8){-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(9){-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(10){-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}}@media (max-width:767px){.elementor-reverse-mobile>.elementor-container>.elementor-row>:first-child{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(2){-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(3){-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(4){-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(5){-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(6){-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(7){-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(8){-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(9){-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(10){-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.elementor-column{width:100%}}ul.elementor-icon-list-items.elementor-inline-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item{word-break:break-word}.elementor-grid .elementor-grid-item{word-break:break-word;min-width:0}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}@media (max-width:1024px){.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-tablet-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}@media (max-width:767px){.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-mobile-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.elementor-form-fields-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group .elementor-field-subgroup,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>.elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>input,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>textarea{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group .elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group>input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-field-group.elementor-field-type-submit{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-field-group .elementor-field-textual{width:100%;max-width:100%;border:1px solid #818a91;background-color:transparent;color:#373a3c;vertical-align:middle;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-ms-input-placeholder,.elementor-field-group .elementor-field-textual::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-select-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;width:100%}.elementor-field-group .elementor-select-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:inherit;font-size:inherit;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\f0d7";font-family:FontAwesome;font-size:15px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:10px;pointer-events:none}.elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before{content:""}.elementor-field-subgroup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-field-subgroup .elementor-field-option label{display:inline-block}.elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option{padding-left:10px}.elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-field-label{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-right:.2em}.elementor-field-textual{line-height:1.4}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;-webkit-border-radius:2px;border-radius:2px}.elementor-field-textual.elementor-size-sm{font-size:15px;min-height:40px;padding:5px 14px;-webkit-border-radius:3px;border-radius:3px}.elementor-field-textual.elementor-size-md{font-size:16px;min-height:47px;padding:6px 16px;-webkit-border-radius:4px;border-radius:4px}.elementor-field-textual.elementor-size-lg{font-size:18px;min-height:59px;padding:7px 20px;-webkit-border-radius:5px;border-radius:5px}.elementor-field-textual.elementor-size-xl{font-size:20px;min-height:72px;padding:8px 24px;-webkit-border-radius:6px;border-radius:6px}.elementor-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-button-align-start .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-button-align-end .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}@media screen and (max-width:1024px){.elementor-tablet-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-tablet-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-tablet-button-align-start .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-tablet-button-align-end .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}}@media screen and (max-width:767px){.elementor-mobile-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-mobile-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-mobile-button-align-start .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-mobile-button-align-end .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}}.elementor-error .elementor-field{border-color:#d9534f}.elementor-error .help-inline{color:#d9534f;font-size:.9em}.elementor-message{margin:10px 0;font-size:1em;line-height:1}.elementor-message:before{content:"\f00c";display:inline-block;font-family:fontawesome;font-weight:400;font-style:normal;vertical-align:middle;margin-right:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\f00d"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-top:0;padding-bottom:0;border:0 none}.elementor-form .elementor-button>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-form .elementor-button .elementor-align-icon-right{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.elementor-form .elementor-button .elementor-align-icon-left{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-form .elementor-button.elementor-size-xs{min-height:33px}.elementor-form .elementor-button.elementor-size-sm{min-height:40px}.elementor-form .elementor-button.elementor-size-md{min-height:47px}.elementor-form .elementor-button.elementor-size-lg{min-height:59px}.elementor-form .elementor-button.elementor-size-xl{min-height:72px}.elementor-element .elementor-widget-container{-webkit-transition:background .3s,border .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s;transition:background .3s,border .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s;-o-transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;transition:background .3s,border .3s,border-radius .3s,box-shadow .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s}.elementor-accordion{text-align:right}.elementor-accordion .elementor-accordion-item{border:1px solid #d4d4d4}.elementor-accordion .elementor-accordion-item+.elementor-accordion-item{border-top:none}.elementor-accordion .elementor-tab-title{margin:0;padding:15px 20px;font-weight:700;line-height:1;cursor:pointer;outline:none}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right{float:right;text-align:right}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left{float:left;text-align:left}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed{display:block}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened,.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed{display:none}.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened{display:block}.elementor-accordion .elementor-tab-content{display:none;padding:15px 20px;border-top:1px solid #d4d4d4}@media (max-width:767px){.elementor-accordion .elementor-tab-title{padding:12px 15px}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{width:1.2em}.elementor-accordion .elementor-tab-content{padding:7px 15px}}.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:right}.elementor-alert .elementor-alert-title{display:block;font-weight:700}.elementor-alert .elementor-alert-description{font-size:13px}.elementor-alert button.elementor-alert-dismiss{position:absolute;left:10px;top:10px;padding:3px;font-size:20px;line-height:1;background:transparent;color:inherit;border:none;cursor:pointer}.elementor-alert.elementor-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert.elementor-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert.elementor-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert.elementor-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:767px){.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}.elementor-button{display:inline-block;line-height:1;background-color:#818a91;color:#fff;text-align:center;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;-webkit-border-radius:2px;border-radius:2px}.elementor-button.elementor-size-sm{font-size:15px;padding:12px 24px;-webkit-border-radius:3px;border-radius:3px}.elementor-button.elementor-size-md{font-size:16px;padding:15px 30px;-webkit-border-radius:4px;border-radius:4px}.elementor-button.elementor-size-lg{font-size:18px;padding:20px 40px;-webkit-border-radius:5px;border-radius:5px}.elementor-button.elementor-size-xl{font-size:20px;padding:25px 50px;-webkit-border-radius:6px;border-radius:6px}.elementor-button .elementor-align-icon-right{float:right;margin-left:5px}.elementor-button .elementor-align-icon-left{float:left;margin-right:5px}.elementor-button .elementor-button-text{display:inline-block}.elementor-button span{text-decoration:inherit}.elementor-element.elementor-button-info .elementor-button{background-color:#5bc0de}.elementor-element.elementor-button-success .elementor-button{background-color:#5cb85c}.elementor-element.elementor-button-warning .elementor-button{background-color:#f0ad4e}.elementor-element.elementor-button-danger .elementor-button{background-color:#d9534f}.elementor-widget-button .elementor-button .elementor-button-info{background-color:#5bc0de}.elementor-widget-button .elementor-button .elementor-button-success{background-color:#5cb85c}.elementor-widget-button .elementor-button .elementor-button-warning{background-color:#f0ad4e}.elementor-widget-button .elementor-button .elementor-button-danger{background-color:#d9534f}.elementor-counter .elementor-counter-number-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:69px;font-weight:600;color:#222;line-height:1}.elementor-counter .elementor-counter-number-prefix,.elementor-counter .elementor-counter-number-suffix{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:pre-wrap}.elementor-counter .elementor-counter-number-prefix{text-align:left}.elementor-counter .elementor-counter-number-suffix{text-align:right}.elementor-counter .elementor-counter-title{text-align:center;font-size:19px;font-weight:400;color:#666;line-height:2.5}.elementor-widget-divider .elementor-divider{line-height:0;font-size:0}.elementor-widget-divider .elementor-divider-separator{display:inline-block}.elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}@media (min-width:768px){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:767px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}.elementor-widget-google_maps iframe{height:300px}.elementor-widget-heading .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title>a{color:inherit;font-size:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}.elementor-icon{display:inline-block;line-height:1;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;color:#818a91;font-size:50px;text-align:center}.elementor-icon:hover{color:#818a91}.elementor-icon i{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#818a91;color:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#818a91;border:3px solid #818a91;background-color:transparent}.elementor-shape-circle .elementor-icon{-webkit-border-radius:50%;border-radius:50%}@media (min-width:768px){.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img{margin:auto}.elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:767px){.elementor-widget-icon-box .elementor-icon-box-icon{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-icon-box .elementor-icon-box-wrapper{text-align:center}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}.elementor-widget .elementor-icon-list-items.elementor-inline-items{margin-right:-8px;margin-left:-8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item{margin-right:8px;margin-left:8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after{width:auto;left:auto;right:auto;position:relative;height:100%;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);border-top:0;border-bottom:0;border-right:0;border-left-width:1px;border-style:solid;left:-8px}.elementor-widget .elementor-icon-list-items{list-style-type:none;margin:0;padding:0}.elementor-widget .elementor-icon-list-item{margin:0;padding:0;position:relative}.elementor-widget .elementor-icon-list-item:after{position:absolute;bottom:0;width:100%}.elementor-widget .elementor-icon-list-item,.elementor-widget .elementor-icon-list-item a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget .elementor-icon-list-item a{width:100%}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding-right:5px}.elementor-widget .elementor-icon-list-icon{text-align:center}.elementor-widget.elementor-align-center .elementor-icon-list-item,.elementor-widget.elementor-align-center .elementor-icon-list-item a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-align-center .elementor-inline-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-left .elementor-icon-list-item,.elementor-widget.elementor-align-left .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:left}.elementor-widget.elementor-align-left .elementor-inline-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-align-right .elementor-icon-list-item,.elementor-widget.elementor-align-right .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:right}.elementor-widget.elementor-align-right .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after{left:0}@media (max-width:1024px){.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:left}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:right}.elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:767px){.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:left}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:right}.elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after{left:0}}.elementor-widget-image{text-align:center}.elementor-widget-image .elementor-image>a,.elementor-widget-image .elementor-image figure>a{display:block}.elementor-widget-image .elementor-image img{vertical-align:middle;display:inline-block}.elementor-widget-image .elementor-image.elementor-image-shape-circle{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:768px){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:767px){.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}.elementor-image-carousel-wrapper .slick-image-stretch .slick-slide .slick-slide-image{width:100%}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}.swiper-container .swiper-slide figure{line-height:0}.swiper-container .swiper-slide figure img{width:100%}body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}.elementor-widget-progress{text-align:right}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:30px;line-height:30px;-webkit-border-radius:2px;border-radius:2px}.elementor-progress-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#818a91;width:0;font-size:11px;-webkit-border-radius:2px;border-radius:2px;-webkit-transition:width 1s ease-in-out;-o-transition:width 1s ease-in-out;transition:width 1s ease-in-out}.elementor-progress-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-right:15px}.elementor-progress-percentage{padding-left:15px}.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar{background-color:#5bc0de}.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar{background-color:#5cb85c}.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar{background-color:#f0ad4e}.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar{background-color:#d9534f}.elementor-progress .elementor-title{display:block}@media (max-width:767px){.elementor-progress-wrapper{height:25px;line-height:25px}.elementor-progress-text{padding-right:10px}}.elementor-social-icons-wrapper{font-size:0}.elementor-social-icon{font-size:25px;text-align:center;padding:.5em;margin-left:5px;cursor:pointer}.elementor-social-icon i{color:#fff}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-google-plus{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-linkedin{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#df2029}.elementor-social-icon-weixin{background-color:#7bb32e}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{-webkit-border-radius:10%;border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{width:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active{border-left-style:none}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{height:999em;width:0;left:0;border-left-style:solid}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{top:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after{top:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title{display:table-cell}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active{border-bottom-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{bottom:0;height:0;width:999em;border-bottom-style:solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{right:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after{left:100%}.elementor-widget-tabs .elementor-tab-content,.elementor-widget-tabs .elementor-tab-title,.elementor-widget-tabs .elementor-tab-title:after,.elementor-widget-tabs .elementor-tab-title:before,.elementor-widget-tabs .elementor-tabs-content-wrapper{border:1px none #d4d4d4}.elementor-widget-tabs .elementor-tabs{text-align:right}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:none}.elementor-widget-tabs .elementor-tab-desktop-title{position:relative;padding:20px 25px;font-weight:700;line-height:1;border:solid transparent}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active{border-color:#d4d4d4}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before{display:block;content:"";position:absolute}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:767px){.elementor-tabs .elementor-tab-content,.elementor-tabs .elementor-tab-title{border-style:solid;border-bottom-style:none}.elementor-tabs .elementor-tabs-wrapper{display:none}.elementor-tabs .elementor-tabs-content-wrapper{border-bottom-style:solid}.elementor-tabs .elementor-tab-content{padding:10px}}@media (min-width:768px){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-style:solid;border-right-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content{border-style:solid;border-top-style:none}.elementor-tabs .elementor-tab-mobile-title{display:none}}.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;color:inherit}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;color:inherit}.elementor-testimonial-wrapper.elementor-testimonial-text-align-left{text-align:left}.elementor-testimonial-wrapper.elementor-testimonial-text-align-right{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;-webkit-border-radius:50%;border-radius:50%;-o-object-fit:cover;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-left:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:right;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}.elementor-toggle{text-align:right}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d4d4d4;cursor:pointer;outline:none}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d4d4d4;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.elementor-widget-video .elementor-widget-container{overflow:hidden}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%}.slick-slider{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list,.slick-slider{position:relative;display:block}.slick-list{overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translateZ(0);transform:translateZ(0)}.slick-track{position:relative;left:0;top:0;display:block}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}.elementor-slick-slider[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.elementor-slick-slider .slick-loading .slick-list{background:#fff}.elementor-slick-slider .slick-loading .slick-list:after{content:"\f1ce";font-family:FontAwesome;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear;font-size:25px;color:#a4afb7}.elementor-slick-slider .slick-next,.elementor-slick-slider .slick-prev{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;padding:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:transparent;border:none;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus,.elementor-slick-slider .slick-next:hover,.elementor-slick-slider .slick-prev:focus,.elementor-slick-slider .slick-prev:hover{color:transparent;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus:before,.elementor-slick-slider .slick-next:hover:before,.elementor-slick-slider .slick-prev:focus:before,.elementor-slick-slider .slick-prev:hover:before{opacity:1}.elementor-slick-slider .slick-next.slick-disabled:before,.elementor-slick-slider .slick-prev.slick-disabled:before{opacity:.25}.elementor-slick-slider .slick-next:before,.elementor-slick-slider .slick-prev:before{font-family:FontAwesome;font-size:35px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider .slick-prev{left:-25px}[dir=rtl] .elementor-slick-slider .slick-prev{left:auto;right:-25px}.elementor-slick-slider .slick-prev:before{content:"\f104"}[dir=rtl] .elementor-slick-slider .slick-prev:before{content:"\f105"}.elementor-slick-slider .slick-next{right:-25px}[dir=rtl] .elementor-slick-slider .slick-next{left:-25px;right:auto}.elementor-slick-slider .slick-next:before{content:"\f105"}[dir=rtl] .elementor-slick-slider .slick-next:before{content:"\f104"}.elementor-slick-slider .slick-dotted.slick-slider{margin-bottom:30px}.elementor-slick-slider ul.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center;line-height:1}.elementor-slick-slider ul.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0;padding:0;cursor:pointer}.elementor-slick-slider ul.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:none;background:transparent}.elementor-slick-slider ul.slick-dots li button:focus,.elementor-slick-slider ul.slick-dots li button:hover{outline:none}.elementor-slick-slider ul.slick-dots li button:focus:before,.elementor-slick-slider ul.slick-dots li button:hover:before{opacity:1}.elementor-slick-slider ul.slick-dots li button:before{font-family:FontAwesome;font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:"\f111";text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider ul.slick-dots li.slick-active button:before{opacity:.75;color:#000}.elementor-slick-slider .slick-arrows-inside .slick-prev{left:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-prev{left:auto;right:20px}.elementor-slick-slider .slick-arrows-inside .slick-next{right:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-next{left:20px;right:auto}.elementor-slick-slider .slick-dots-inside .slick-dots{bottom:5px}.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider{margin-bottom:0}.elementor-slick-slider .slick-slider .slick-next,.elementor-slick-slider .slick-slider .slick-prev{z-index:1}.elementor-slick-slider .slick-slide img{margin:auto}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-webkit-background-size:27px 44px;background-size:27px 44px;background:no-repeat 50%}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23007aff'/%3E%3C/svg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z'/%3E%3C/svg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23007aff'/%3E%3C/svg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:6px;height:6px;display:inline-block;-webkit-border-radius:50%;border-radius:50%;background:#000;opacity:.2}.swiper-pagination-fraction{color:#000}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 6px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#000;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:hsla(0,0%,100%,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-scrollbar{-webkit-border-radius:10px;border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);-webkit-border-radius:10px;border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12) infinite;animation:swiper-preloader-spin 1s steps(12) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;-webkit-background-size:100% 100%;background-size:100%;background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E") no-repeat 50%}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E")}@-webkit-keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.elementor-lightbox .dialog-header{display:none}.elementor-lightbox .dialog-widget-content{background:none;-webkit-box-shadow:none;box-shadow:none;width:100%;height:100%}.elementor-lightbox .dialog-message{-webkit-animation-duration:.4s;animation-duration:.4s}.elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio){height:100%}.elementor-lightbox .dialog-lightbox-close-button{cursor:pointer;position:absolute;font-size:25px;padding:5px;z-index:2;line-height:1}@media (max-width:767px){.elementor-lightbox .dialog-lightbox-close-button{padding:0}}.elementor-lightbox .dialog-lightbox-close-button,.elementor-lightbox .elementor-swiper-button{color:hsla(0,0%,93%,.9);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;opacity:1}.elementor-lightbox .dialog-lightbox-close-button:hover,.elementor-lightbox .elementor-swiper-button:hover{color:#fff}.elementor-lightbox .swiper-container{height:100%}.elementor-lightbox .elementor-lightbox-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:70px 80px;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin:auto}@media (max-width:767px){.elementor-lightbox .elementor-lightbox-item{padding:40px}}.elementor-lightbox .elementor-lightbox-image{max-height:100%}.elementor-lightbox .elementor-video-container{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}@media (min-width:1025px){.elementor-lightbox .elementor-video-container{width:75%}}@media (max-width:1024px){.elementor-lightbox .elementor-video-container{width:100%}}.elementor-lightbox .elementor-swiper-button-prev{left:35px}.elementor-lightbox .elementor-swiper-button-next{right:35px}@media (max-width:767px){.elementor-lightbox .elementor-swiper-button-prev{left:10px}.elementor-lightbox .elementor-swiper-button-next{right:10px}}.animated{-webkit-animation-duration:1.25s;animation-duration:1.25s}.animated.animated-slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.animated-fast{-webkit-animation-duration:.75s;animation-duration:.75s}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.elementor-shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.elementor-shape-top{top:-1px}.elementor-shape-bottom{bottom:-1px}.elementor-shape[data-negative=false].elementor-shape-bottom,.elementor-shape[data-negative=true].elementor-shape-top{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-shape svg{display:block;width:-webkit-calc(100% + 1.3px);width:calc(100% + 1.3px);position:relative;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-shape .elementor-shape-fill{fill:#fff;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotateY(0deg);transform:rotateY(0deg)}#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:200px}#wp-admin-bar-elementor_edit_page .elementor-edit-link-title{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;width:100%}#wp-admin-bar-elementor_edit_page .elementor-edit-link-type{background:#55595c;font-size:11px;line-height:9px;margin-top:6px;padding:4px 8px;-webkit-border-radius:3px;border-radius:3px}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{-webkit-transition:none;-o-transition:none;transition:none}#elementor .elementor-element ul.elementor-icon-list-items,#left-area ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}@media (max-width:767px){.elementor .elementor-hidden-phone{display:none}}@media (min-width:768px) and (max-width:1024px){.elementor .elementor-hidden-tablet{display:none}}@media (min-width:1025px){.elementor .elementor-hidden-desktop{display:none}}
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
+/*! elementor - v2.2.1 - 03-09-2018 */
.dialog-widget-content {
background-color: #fff;
position: absolute;
.dialog-type-lightbox .dialog-widget-content {
margin: auto;
width: 375px; }
+ .dialog-type-lightbox .dialog-header {
+ padding: 20px 0;
+ font-weight: 500; }
.dialog-type-lightbox .dialog-message {
- padding: 0 20px;
+ padding: 0 20px 20px;
min-height: 50px; }
- .dialog-type-lightbox .dialog-widget-header, .dialog-type-lightbox .dialog-message {
+ .dialog-type-lightbox .dialog-header, .dialog-type-lightbox .dialog-message {
text-align: center; }
.dialog-type-lightbox .dialog-buttons-wrapper {
border-top: 1px solid #e6e9ec;
.dialog-type-lightbox .dialog-buttons-wrapper > button::-moz-focus-inner {
border: 0; }
-.dialog-widget-header {
- padding: 20px 0;
- font-weight: 500; }
-
.dialog-close-button {
cursor: pointer;
position: absolute;
.dialog-close-button:not(:hover) {
opacity: .4; }
-.dialog-lightbox-widget .dialog-widget-header,
-.dialog-confirm-widget .dialog-widget-header {
+.dialog-lightbox-widget .dialog-header,
+.dialog-confirm-widget .dialog-header {
font-size: 15px;
color: #495157; }
width: 100%; } }
#wpadminbar #wp-admin-bar-elementor_edit_page > .ab-item::before {
- content: "\e800";
+ content: "\e801";
font-family: eicons;
- font-size: 12px;
- margin-top: 5px; }
+ top: 3px;
+ font-size: 18px; }
+
+#wpadminbar #wp-admin-bar-elementor_inspector > .ab-item::before {
+ content: "\f348";
+ top: 2px; }
.elementor:after {
position: absolute;
.elementor-column.elementor-md-100 {
width: 100%; } }
+@media (min-width: 768px) and (max-width: 1024px) {
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(1) {
+ -webkit-box-ordinal-group: 11;
+ -webkit-order: 10;
+ -ms-flex-order: 10;
+ order: 10; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(2) {
+ -webkit-box-ordinal-group: 10;
+ -webkit-order: 9;
+ -ms-flex-order: 9;
+ order: 9; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(3) {
+ -webkit-box-ordinal-group: 9;
+ -webkit-order: 8;
+ -ms-flex-order: 8;
+ order: 8; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(4) {
+ -webkit-box-ordinal-group: 8;
+ -webkit-order: 7;
+ -ms-flex-order: 7;
+ order: 7; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(5) {
+ -webkit-box-ordinal-group: 7;
+ -webkit-order: 6;
+ -ms-flex-order: 6;
+ order: 6; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(6) {
+ -webkit-box-ordinal-group: 6;
+ -webkit-order: 5;
+ -ms-flex-order: 5;
+ order: 5; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(7) {
+ -webkit-box-ordinal-group: 5;
+ -webkit-order: 4;
+ -ms-flex-order: 4;
+ order: 4; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(8) {
+ -webkit-box-ordinal-group: 4;
+ -webkit-order: 3;
+ -ms-flex-order: 3;
+ order: 3; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(9) {
+ -webkit-box-ordinal-group: 3;
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(10) {
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1; } }
+
@media (max-width: 767px) {
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(1) {
+ -webkit-box-ordinal-group: 11;
+ -webkit-order: 10;
+ -ms-flex-order: 10;
+ order: 10; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(2) {
+ -webkit-box-ordinal-group: 10;
+ -webkit-order: 9;
+ -ms-flex-order: 9;
+ order: 9; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(3) {
+ -webkit-box-ordinal-group: 9;
+ -webkit-order: 8;
+ -ms-flex-order: 8;
+ order: 8; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(4) {
+ -webkit-box-ordinal-group: 8;
+ -webkit-order: 7;
+ -ms-flex-order: 7;
+ order: 7; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(5) {
+ -webkit-box-ordinal-group: 7;
+ -webkit-order: 6;
+ -ms-flex-order: 6;
+ order: 6; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(6) {
+ -webkit-box-ordinal-group: 6;
+ -webkit-order: 5;
+ -ms-flex-order: 5;
+ order: 5; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(7) {
+ -webkit-box-ordinal-group: 5;
+ -webkit-order: 4;
+ -ms-flex-order: 4;
+ order: 4; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(8) {
+ -webkit-box-ordinal-group: 4;
+ -webkit-order: 3;
+ -ms-flex-order: 3;
+ order: 3; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(9) {
+ -webkit-box-ordinal-group: 3;
+ -webkit-order: 2;
+ -ms-flex-order: 2;
+ order: 2; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(10) {
+ -webkit-box-ordinal-group: 2;
+ -webkit-order: 1;
+ -ms-flex-order: 1;
+ order: 1; }
.elementor-column {
- width: 100%; }
- .elementor-reverse-mobile > .elementor-container > .elementor-row {
- -webkit-box-orient: vertical;
- -webkit-box-direction: reverse;
- -webkit-flex-direction: column-reverse;
- -ms-flex-direction: column-reverse;
- flex-direction: column-reverse; } }
+ width: 100%; } }
-.elementor-grid, .elementor-inline-items, ul.elementor-icon-list-items.elementor-inline-items {
+ul.elementor-icon-list-items.elementor-inline-items {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap; }
- .elementor-grid .elementor-grid-item, .elementor-inline-items .elementor-grid-item, ul.elementor-icon-list-items.elementor-inline-items .elementor-grid-item {
+ ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item {
word-break: break-word; }
+.elementor-grid .elementor-grid-item {
+ word-break: break-word;
+ min-width: 0; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+
+.elementor-grid-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; }
+
+@media (max-width: 1024px) {
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; } }
+
+@media (max-width: 767px) {
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: -ms-flexbox;
+ display: flex;
+ overflow: hidden;
+ -webkit-flex-wrap: wrap;
+ -ms-flex-wrap: wrap;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; } }
+
.elementor-screen-only,
.screen-reader-text,
.screen-reader-text span,
align-items: flex-end; }
.elementor-field-group .elementor-field-textual {
width: 100%;
+ max-width: 100%;
border: 1px solid #818a91;
background-color: transparent;
color: #373a3c;
color: inherit;
font-family: inherit;
opacity: 0.6; }
- .elementor-field-group .elementor-field-textual::-moz-placeholder {
- color: inherit;
- font-family: inherit;
- opacity: 0.6; }
.elementor-field-group .elementor-field-textual::-ms-input-placeholder {
color: inherit;
font-family: inherit;
position: relative;
width: 100%; }
.elementor-field-group .elementor-select-wrapper select {
+ appearance: none;
-webkit-appearance: none;
- -moz-appearance: none;
- appearance: none;
+ -moz-appearance: none;
color: inherit;
font-size: inherit;
font-family: inherit;
.elementor-form .elementor-button.elementor-size-xl {
min-height: 72px; }
+.elementor-element .elementor-widget-container {
+ -webkit-transition: background 0.3s, border 0.3s, -webkit-border-radius 0.3s, -webkit-box-shadow 0.3s;
+ transition: background 0.3s, border 0.3s, -webkit-border-radius 0.3s, -webkit-box-shadow 0.3s;
+ -o-transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;
+ transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s;
+ transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s, -webkit-border-radius 0.3s, -webkit-box-shadow 0.3s; }
+
.elementor-accordion {
text-align: left; }
.elementor-accordion .elementor-accordion-item {
padding: 15px 20px;
font-weight: bold;
line-height: 1;
- cursor: pointer; }
+ cursor: pointer;
+ outline: none; }
.elementor-accordion .elementor-tab-title .elementor-accordion-icon {
display: inline-block;
width: 1.5em; }
-o-transition: all 0.5s;
transition: all 0.5s; }
.elementor-button:hover, .elementor-button:focus, .elementor-button:visited {
- color: #fff;
- opacity: .9; }
+ color: #fff; }
.elementor-button.elementor-size-xs {
font-size: 13px;
padding: 10px 20px;
right: auto;
position: relative;
height: 100%;
+ top: 50%;
+ -webkit-transform: translateY(-50%);
+ -ms-transform: translateY(-50%);
+ transform: translateY(-50%);
border-top: 0;
border-bottom: 0;
border-right: 0;
.elementor-widget-image .elementor-image figure > a {
display: block; }
.elementor-widget-image .elementor-image img {
- vertical-align: middle; }
+ vertical-align: middle;
+ display: inline-block; }
.elementor-widget-image .elementor-image.elementor-image-shape-circle {
-webkit-border-radius: 50%;
border-radius: 50%; }
.elementor-social-icon:hover {
opacity: .9;
color: white; }
+ .elementor-social-icon-android {
+ background-color: #A4C639; }
.elementor-social-icon-apple {
background-color: #999999; }
.elementor-social-icon-behance {
background-color: #0077b5; }
.elementor-social-icon-medium {
background-color: #00ab6b; }
- .elementor-social-icon-odnoklassniki {
- background-color: #F4731C; }
.elementor-social-icon-meetup {
background-color: #ec1c40; }
+ .elementor-social-icon-mixcloud {
+ background-color: #273a4b; }
+ .elementor-social-icon-odnoklassniki {
+ background-color: #F4731C; }
.elementor-social-icon-pinterest {
background-color: #bd081c; }
.elementor-social-icon-product-hunt {
background-color: #EB4924; }
.elementor-social-icon-telegram {
background-color: #2CA5E0; }
+ .elementor-social-icon-thumb-tack {
+ background-color: #1aa1d8; }
.elementor-social-icon-tripadvisor {
background-color: #589442; }
.elementor-social-icon-tumblr {
width: 60px;
height: 60px;
-webkit-border-radius: 50%;
- border-radius: 50%; }
+ border-radius: 50%;
+ -o-object-fit: cover;
+ object-fit: cover;
+ max-width: none; }
.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image {
padding-right: 15px; }
.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details {
margin: 0;
padding: 15px;
border-bottom: 1px solid #D4D4D4;
- cursor: pointer; }
+ cursor: pointer;
+ outline: none; }
.elementor-toggle .elementor-tab-title .elementor-toggle-icon {
display: inline-block;
width: 1em; }
.elementor-toggle .elementor-tab-content {
padding: 12px 10px; } }
+.elementor-widget-video .elementor-widget-container {
+ overflow: hidden; }
+
.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay {
position: absolute;
top: 0;
display: none; }
.elementor-slick-slider .slick-loading .slick-list {
- background: #fff url("../images/ajax-loader.gif") center center no-repeat; }
+ background: #fff; }
+ .elementor-slick-slider .slick-loading .slick-list:after {
+ content: '\f1ce';
+ font-family: FontAwesome;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ -ms-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+ font-size: 25px;
+ color: #a4afb7; }
.elementor-slick-slider .slick-prev,
.elementor-slick-slider .slick-next {
padding: 0;
-webkit-box-shadow: none;
box-shadow: none;
+ appearance: none;
-webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
+ -moz-appearance: none; }
.swiper-pagination-clickable .swiper-pagination-bullet {
cursor: pointer; }
-webkit-transform: rotate(360deg);
transform: rotate(360deg); } }
-.elementor-lightbox .dialog-widget-header {
+.elementor-lightbox .dialog-header {
display: none; }
.elementor-lightbox .dialog-widget-content {
padding: 0; }
@media (max-width: 767px) {
- .elementor:not(.elementor-edit-area-active) .elementor-hidden-phone {
+ .elementor .elementor-hidden-phone {
display: none; } }
@media (min-width: 768px) and (max-width: 1024px) {
- .elementor:not(.elementor-edit-area-active) .elementor-hidden-tablet {
+ .elementor .elementor-hidden-tablet {
display: none; } }
@media (min-width: 1025px) {
- .elementor:not(.elementor-edit-area-active) .elementor-hidden-desktop {
+ .elementor .elementor-hidden-desktop {
display: none; } }
/*# sourceMappingURL=frontend.css.map */
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-message{padding:0 20px;min-height:50px}.dialog-type-lightbox .dialog-message,.dialog-type-lightbox .dialog-widget-header{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-widget-header{padding:20px 0;font-weight:500}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-widget-header,.dialog-lightbox-widget .dialog-widget-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-right:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor{-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual}.elementor *,.elementor :after,.elementor :before{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor a{-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.elementor hr{margin:0;background-color:transparent}.elementor img{height:auto;max-width:100%;border:none;-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.elementor .elementor-widget:not(.elementor-widget-text-editor) figure{margin:0}.elementor embed,.elementor iframe,.elementor object,.elementor video{max-width:100%;width:100%;margin:0;line-height:1;border:none}.elementor .elementor-custom-embed{line-height:0}.elementor .elementor-background-video-container{height:100%;width:100%;top:0;left:0;position:absolute;overflow:hidden;z-index:0;-webkit-transition:opacity 1s;-o-transition:opacity 1s;transition:opacity 1s}.elementor .elementor-background-video-container.elementor-loading{opacity:0}.elementor .elementor-background-video-embed{max-width:none;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor .elementor-background-video{position:absolute;max-width:none;top:50%;left:50%;-webkit-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%)}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor-invisible{visibility:hidden}.elementor-align-center{text-align:center}.elementor-align-center .elementor-button{width:auto}.elementor-align-right{text-align:right}.elementor-align-right .elementor-button{width:auto}.elementor-align-left{text-align:left}.elementor-align-left .elementor-button{width:auto}.elementor-align-justify .elementor-button{width:100%}.elementor-custom-embed-play{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;opacity:.8;text-shadow:1px 0 6px rgba(0,0,0,.3);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:FontAwesome;-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.elementor-custom-embed-play.elementor-playing i:before{content:"\f1ce"}.elementor-swiper-button{position:absolute;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;z-index:1;cursor:pointer;font-size:25px;color:hsla(0,0%,93%,.9);top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor-swiper-button.swiper-button-disabled{opacity:.3}.elementor-tag{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex}@media (max-width:1024px){.elementor-tablet-align-center{text-align:center}.elementor-tablet-align-center .elementor-button{width:auto}.elementor-tablet-align-right{text-align:right}.elementor-tablet-align-right .elementor-button{width:auto}.elementor-tablet-align-left{text-align:left}.elementor-tablet-align-left .elementor-button{width:auto}.elementor-tablet-align-justify .elementor-button{width:100%}}@media (max-width:767px){.elementor-mobile-align-center{text-align:center}.elementor-mobile-align-center .elementor-button{width:auto}.elementor-mobile-align-right{text-align:right}.elementor-mobile-align-right .elementor-button{width:auto}.elementor-mobile-align-left{text-align:left}.elementor-mobile-align-left .elementor-button{width:auto}.elementor-mobile-align-justify .elementor-button{width:100%}}#wpadminbar #wp-admin-bar-elementor_edit_page>.ab-item:before{content:"\e800";font-family:eicons;font-size:12px;margin-top:5px}.elementor:after{position:absolute;opacity:0;width:0;height:0;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}@media (min-width:1025px){.elementor:after{content:"desktop"}}@media (min-width:768px) and (max-width:1024px){.elementor:after{content:"tablet"}}@media (max-width:767px){.elementor:after{content:"mobile"}}.elementor-section{position:relative}.elementor-section .elementor-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:auto;margin-left:auto;position:relative}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-section.elementor-section-stretched{position:relative;width:100%}.elementor-section.elementor-section-items-top>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section.elementor-section-items-middle>.elementor-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section.elementor-section-items-bottom>.elementor-container{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}@media (min-width:768px){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}}.elementor-section-content-top>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section-content-middle>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section-content-bottom>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-row{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}@media (max-width:1024px){.elementor-row{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.elementor-column-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-wrap,.elementor-widget-wrap{width:100%;position:relative}.elementor-widget{position:relative}.elementor-widget:not(:last-child){margin-bottom:20px}.elementor-column{position:relative;min-height:1px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-gap-narrow>.elementor-row>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-row>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-row>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-row>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-row>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:768px){.elementor-column.elementor-col-10,.elementor-column[data-col="10"]{width:10%}.elementor-column.elementor-col-11,.elementor-column[data-col="11"]{width:11.111%}.elementor-column.elementor-col-12,.elementor-column[data-col="12"]{width:12.5%}.elementor-column.elementor-col-14,.elementor-column[data-col="14"]{width:14.285%}.elementor-column.elementor-col-16,.elementor-column[data-col="16"]{width:16.666%}.elementor-column.elementor-col-20,.elementor-column[data-col="20"]{width:20%}.elementor-column.elementor-col-25,.elementor-column[data-col="25"]{width:25%}.elementor-column.elementor-col-30,.elementor-column[data-col="30"]{width:30%}.elementor-column.elementor-col-33,.elementor-column[data-col="33"]{width:33.333%}.elementor-column.elementor-col-40,.elementor-column[data-col="40"]{width:40%}.elementor-column.elementor-col-50,.elementor-column[data-col="50"]{width:50%}.elementor-column.elementor-col-60,.elementor-column[data-col="60"]{width:60%}.elementor-column.elementor-col-66,.elementor-column[data-col="66"]{width:66.666%}.elementor-column.elementor-col-70,.elementor-column[data-col="70"]{width:70%}.elementor-column.elementor-col-75,.elementor-column[data-col="75"]{width:75%}.elementor-column.elementor-col-80,.elementor-column[data-col="80"]{width:80%}.elementor-column.elementor-col-83,.elementor-column[data-col="83"]{width:83.333%}.elementor-column.elementor-col-90,.elementor-column[data-col="90"]{width:90%}.elementor-column.elementor-col-100,.elementor-column[data-col="100"]{width:100%}}@media (max-width:479px){.elementor-column.elementor-xs-10{width:10%}.elementor-column.elementor-xs-11{width:11.111%}.elementor-column.elementor-xs-12{width:12.5%}.elementor-column.elementor-xs-14{width:14.285%}.elementor-column.elementor-xs-16{width:16.666%}.elementor-column.elementor-xs-20{width:20%}.elementor-column.elementor-xs-25{width:25%}.elementor-column.elementor-xs-30{width:30%}.elementor-column.elementor-xs-33{width:33.333%}.elementor-column.elementor-xs-40{width:40%}.elementor-column.elementor-xs-50{width:50%}.elementor-column.elementor-xs-60{width:60%}.elementor-column.elementor-xs-66{width:66.666%}.elementor-column.elementor-xs-70{width:70%}.elementor-column.elementor-xs-75{width:75%}.elementor-column.elementor-xs-80{width:80%}.elementor-column.elementor-xs-83{width:83.333%}.elementor-column.elementor-xs-90{width:90%}.elementor-column.elementor-xs-100{width:100%}}@media (max-width:767px){.elementor-column.elementor-sm-10{width:10%}.elementor-column.elementor-sm-11{width:11.111%}.elementor-column.elementor-sm-12{width:12.5%}.elementor-column.elementor-sm-14{width:14.285%}.elementor-column.elementor-sm-16{width:16.666%}.elementor-column.elementor-sm-20{width:20%}.elementor-column.elementor-sm-25{width:25%}.elementor-column.elementor-sm-30{width:30%}.elementor-column.elementor-sm-33{width:33.333%}.elementor-column.elementor-sm-40{width:40%}.elementor-column.elementor-sm-50{width:50%}.elementor-column.elementor-sm-60{width:60%}.elementor-column.elementor-sm-66{width:66.666%}.elementor-column.elementor-sm-70{width:70%}.elementor-column.elementor-sm-75{width:75%}.elementor-column.elementor-sm-80{width:80%}.elementor-column.elementor-sm-83{width:83.333%}.elementor-column.elementor-sm-90{width:90%}.elementor-column.elementor-sm-100{width:100%}}@media (min-width:768px) and (max-width:1024px){.elementor-column.elementor-md-10{width:10%}.elementor-column.elementor-md-11{width:11.111%}.elementor-column.elementor-md-12{width:12.5%}.elementor-column.elementor-md-14{width:14.285%}.elementor-column.elementor-md-16{width:16.666%}.elementor-column.elementor-md-20{width:20%}.elementor-column.elementor-md-25{width:25%}.elementor-column.elementor-md-30{width:30%}.elementor-column.elementor-md-33{width:33.333%}.elementor-column.elementor-md-40{width:40%}.elementor-column.elementor-md-50{width:50%}.elementor-column.elementor-md-60{width:60%}.elementor-column.elementor-md-66{width:66.666%}.elementor-column.elementor-md-70{width:70%}.elementor-column.elementor-md-75{width:75%}.elementor-column.elementor-md-80{width:80%}.elementor-column.elementor-md-83{width:83.333%}.elementor-column.elementor-md-90{width:90%}.elementor-column.elementor-md-100{width:100%}}@media (max-width:767px){.elementor-column{width:100%}.elementor-reverse-mobile>.elementor-container>.elementor-row{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}}.elementor-grid,.elementor-inline-items,ul.elementor-icon-list-items.elementor-inline-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid .elementor-grid-item,.elementor-inline-items .elementor-grid-item,ul.elementor-icon-list-items.elementor-inline-items .elementor-grid-item{word-break:break-word}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.elementor-form-fields-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group .elementor-field-subgroup,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>.elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>input,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>textarea{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group .elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group>input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-field-group.elementor-field-type-submit{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-field-group .elementor-field-textual{width:100%;border:1px solid #818a91;background-color:transparent;color:#373a3c;vertical-align:middle;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::-moz-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-select-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;width:100%}.elementor-field-group .elementor-select-wrapper select{-webkit-appearance:none;-moz-appearance:none;appearance:none;color:inherit;font-size:inherit;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-right:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\f0d7";font-family:FontAwesome;font-size:15px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);right:10px;pointer-events:none}.elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before{content:""}.elementor-field-subgroup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-field-subgroup .elementor-field-option label{display:inline-block}.elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option{padding-right:10px}.elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-field-label{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-left:.2em}.elementor-field-textual{line-height:1.4}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;-webkit-border-radius:2px;border-radius:2px}.elementor-field-textual.elementor-size-sm{font-size:15px;min-height:40px;padding:5px 14px;-webkit-border-radius:3px;border-radius:3px}.elementor-field-textual.elementor-size-md{font-size:16px;min-height:47px;padding:6px 16px;-webkit-border-radius:4px;border-radius:4px}.elementor-field-textual.elementor-size-lg{font-size:18px;min-height:59px;padding:7px 20px;-webkit-border-radius:5px;border-radius:5px}.elementor-field-textual.elementor-size-xl{font-size:20px;min-height:72px;padding:8px 24px;-webkit-border-radius:6px;border-radius:6px}.elementor-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-button-align-start .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-button-align-end .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}@media screen and (max-width:1024px){.elementor-tablet-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-tablet-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-tablet-button-align-start .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-tablet-button-align-end .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}}@media screen and (max-width:767px){.elementor-mobile-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-mobile-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-mobile-button-align-start .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-mobile-button-align-end .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}}.elementor-error .elementor-field{border-color:#d9534f}.elementor-error .help-inline{color:#d9534f;font-size:.9em}.elementor-message{margin:10px 0;font-size:1em;line-height:1}.elementor-message:before{content:"\f00c";display:inline-block;font-family:fontawesome;font-weight:400;font-style:normal;vertical-align:middle;margin-right:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\f00d"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-top:0;padding-bottom:0;border:0 none}.elementor-form .elementor-button>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-form .elementor-button .elementor-align-icon-right{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-form .elementor-button .elementor-align-icon-left{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.elementor-form .elementor-button.elementor-size-xs{min-height:33px}.elementor-form .elementor-button.elementor-size-sm{min-height:40px}.elementor-form .elementor-button.elementor-size-md{min-height:47px}.elementor-form .elementor-button.elementor-size-lg{min-height:59px}.elementor-form .elementor-button.elementor-size-xl{min-height:72px}.elementor-accordion{text-align:left}.elementor-accordion .elementor-accordion-item{border:1px solid #d4d4d4}.elementor-accordion .elementor-accordion-item+.elementor-accordion-item{border-top:none}.elementor-accordion .elementor-tab-title{margin:0;padding:15px 20px;font-weight:700;line-height:1;cursor:pointer}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right{float:right;text-align:right}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left{float:left;text-align:left}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed{display:block}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened,.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed{display:none}.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened{display:block}.elementor-accordion .elementor-tab-content{display:none;padding:15px 20px;border-top:1px solid #d4d4d4}@media (max-width:767px){.elementor-accordion .elementor-tab-title{padding:12px 15px}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{width:1.2em}.elementor-accordion .elementor-tab-content{padding:7px 15px}}.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:left}.elementor-alert .elementor-alert-title{display:block;font-weight:700}.elementor-alert .elementor-alert-description{font-size:13px}.elementor-alert button.elementor-alert-dismiss{position:absolute;right:10px;top:10px;padding:3px;font-size:20px;line-height:1;background:transparent;color:inherit;border:none;cursor:pointer}.elementor-alert.elementor-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert.elementor-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert.elementor-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert.elementor-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:767px){.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}.elementor-button{display:inline-block;line-height:1;background-color:#818a91;color:#fff;text-align:center;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff;opacity:.9}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;-webkit-border-radius:2px;border-radius:2px}.elementor-button.elementor-size-sm{font-size:15px;padding:12px 24px;-webkit-border-radius:3px;border-radius:3px}.elementor-button.elementor-size-md{font-size:16px;padding:15px 30px;-webkit-border-radius:4px;border-radius:4px}.elementor-button.elementor-size-lg{font-size:18px;padding:20px 40px;-webkit-border-radius:5px;border-radius:5px}.elementor-button.elementor-size-xl{font-size:20px;padding:25px 50px;-webkit-border-radius:6px;border-radius:6px}.elementor-button .elementor-align-icon-right{float:right;margin-left:5px}.elementor-button .elementor-align-icon-left{float:left;margin-right:5px}.elementor-button .elementor-button-text{display:inline-block}.elementor-button span{text-decoration:inherit}.elementor-element.elementor-button-info .elementor-button{background-color:#5bc0de}.elementor-element.elementor-button-success .elementor-button{background-color:#5cb85c}.elementor-element.elementor-button-warning .elementor-button{background-color:#f0ad4e}.elementor-element.elementor-button-danger .elementor-button{background-color:#d9534f}.elementor-widget-button .elementor-button .elementor-button-info{background-color:#5bc0de}.elementor-widget-button .elementor-button .elementor-button-success{background-color:#5cb85c}.elementor-widget-button .elementor-button .elementor-button-warning{background-color:#f0ad4e}.elementor-widget-button .elementor-button .elementor-button-danger{background-color:#d9534f}.elementor-counter .elementor-counter-number-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:69px;font-weight:600;color:#222;line-height:1}.elementor-counter .elementor-counter-number-prefix,.elementor-counter .elementor-counter-number-suffix{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:pre-wrap}.elementor-counter .elementor-counter-number-prefix{text-align:right}.elementor-counter .elementor-counter-number-suffix{text-align:left}.elementor-counter .elementor-counter-title{text-align:center;font-size:19px;font-weight:400;color:#666;line-height:2.5}.elementor-widget-divider .elementor-divider{line-height:0;font-size:0}.elementor-widget-divider .elementor-divider-separator{display:inline-block}.elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}@media (min-width:768px){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:767px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}.elementor-widget-google_maps iframe{height:300px}.elementor-widget-heading .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title>a{color:inherit;font-size:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}.elementor-icon{display:inline-block;line-height:1;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;color:#818a91;font-size:50px;text-align:center}.elementor-icon:hover{color:#818a91}.elementor-icon i{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#818a91;color:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#818a91;border:3px solid #818a91;background-color:transparent}.elementor-shape-circle .elementor-icon{-webkit-border-radius:50%;border-radius:50%}@media (min-width:768px){.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img{margin:auto}.elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:767px){.elementor-widget-icon-box .elementor-icon-box-icon{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-icon-box .elementor-icon-box-wrapper{text-align:center}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}.elementor-widget .elementor-icon-list-items.elementor-inline-items{margin-right:-8px;margin-left:-8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item{margin-right:8px;margin-left:8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after{width:auto;left:auto;right:auto;position:relative;height:100%;border-top:0;border-bottom:0;border-right:0;border-left-width:1px;border-style:solid;right:-8px}.elementor-widget .elementor-icon-list-items{list-style-type:none;margin:0;padding:0}.elementor-widget .elementor-icon-list-item{margin:0;padding:0;position:relative}.elementor-widget .elementor-icon-list-item:after{position:absolute;bottom:0;width:100%}.elementor-widget .elementor-icon-list-item,.elementor-widget .elementor-icon-list-item a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget .elementor-icon-list-item a{width:100%}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding-left:5px}.elementor-widget .elementor-icon-list-icon{text-align:center}.elementor-widget.elementor-align-center .elementor-icon-list-item,.elementor-widget.elementor-align-center .elementor-icon-list-item a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-align-center .elementor-inline-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-left .elementor-icon-list-item,.elementor-widget.elementor-align-left .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.elementor-widget.elementor-align-left .elementor-inline-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-align-right .elementor-icon-list-item,.elementor-widget.elementor-align-right .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.elementor-widget.elementor-align-right .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after{right:0}@media (max-width:1024px){.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:767px){.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after{right:0}}.elementor-widget-image{text-align:center}.elementor-widget-image .elementor-image>a,.elementor-widget-image .elementor-image figure>a{display:block}.elementor-widget-image .elementor-image img{vertical-align:middle}.elementor-widget-image .elementor-image.elementor-image-shape-circle{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:768px){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:767px){.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}.elementor-image-carousel-wrapper .slick-image-stretch .slick-slide .slick-slide-image{width:100%}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}.swiper-container .swiper-slide figure{line-height:0}.swiper-container .swiper-slide figure img{width:100%}body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}.elementor-widget-progress{text-align:left}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:30px;line-height:30px;-webkit-border-radius:2px;border-radius:2px}.elementor-progress-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#818a91;width:0;font-size:11px;-webkit-border-radius:2px;border-radius:2px;-webkit-transition:width 1s ease-in-out;-o-transition:width 1s ease-in-out;transition:width 1s ease-in-out}.elementor-progress-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-left:15px}.elementor-progress-percentage{padding-right:15px}.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar{background-color:#5bc0de}.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar{background-color:#5cb85c}.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar{background-color:#f0ad4e}.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar{background-color:#d9534f}.elementor-progress .elementor-title{display:block}@media (max-width:767px){.elementor-progress-wrapper{height:25px;line-height:25px}.elementor-progress-text{padding-left:10px}}.elementor-social-icons-wrapper{font-size:0}.elementor-social-icon{font-size:25px;text-align:center;padding:.5em;margin-right:5px;cursor:pointer}.elementor-social-icon i{color:#fff}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-google-plus{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-linkedin{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#df2029}.elementor-social-icon-weixin{background-color:#7bb32e}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{-webkit-border-radius:10%;border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{width:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active{border-right-style:none}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{height:999em;width:0;right:0;border-right-style:solid}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{top:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after{top:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title{display:table-cell}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active{border-bottom-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{bottom:0;height:0;width:999em;border-bottom-style:solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{right:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after{left:100%}.elementor-widget-tabs .elementor-tab-content,.elementor-widget-tabs .elementor-tab-title,.elementor-widget-tabs .elementor-tab-title:after,.elementor-widget-tabs .elementor-tab-title:before,.elementor-widget-tabs .elementor-tabs-content-wrapper{border:1px none #d4d4d4}.elementor-widget-tabs .elementor-tabs{text-align:left}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:none}.elementor-widget-tabs .elementor-tab-desktop-title{position:relative;padding:20px 25px;font-weight:700;line-height:1;border:solid transparent}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active{border-color:#d4d4d4}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before{display:block;content:"";position:absolute}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:767px){.elementor-tabs .elementor-tab-content,.elementor-tabs .elementor-tab-title{border-style:solid;border-bottom-style:none}.elementor-tabs .elementor-tabs-wrapper{display:none}.elementor-tabs .elementor-tabs-content-wrapper{border-bottom-style:solid}.elementor-tabs .elementor-tab-content{padding:10px}}@media (min-width:768px){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-style:solid;border-left-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content{border-style:solid;border-top-style:none}.elementor-tabs .elementor-tab-mobile-title{display:none}}.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;color:inherit}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;color:inherit}.elementor-testimonial-wrapper.elementor-testimonial-text-align-left{text-align:left}.elementor-testimonial-wrapper.elementor-testimonial-text-align-right{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;-webkit-border-radius:50%;border-radius:50%}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-right:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:left}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}.elementor-toggle{text-align:left}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d4d4d4;cursor:pointer}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d4d4d4;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%}.slick-slider{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list,.slick-slider{position:relative;display:block}.slick-list{overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translateZ(0);transform:translateZ(0)}.slick-track{position:relative;left:0;top:0;display:block}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}.elementor-slick-slider[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.elementor-slick-slider .slick-loading .slick-list{background:#fff url(../images/ajax-loader.gif) 50% no-repeat}.elementor-slick-slider .slick-next,.elementor-slick-slider .slick-prev{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;padding:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:transparent;border:none;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus,.elementor-slick-slider .slick-next:hover,.elementor-slick-slider .slick-prev:focus,.elementor-slick-slider .slick-prev:hover{color:transparent;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus:before,.elementor-slick-slider .slick-next:hover:before,.elementor-slick-slider .slick-prev:focus:before,.elementor-slick-slider .slick-prev:hover:before{opacity:1}.elementor-slick-slider .slick-next.slick-disabled:before,.elementor-slick-slider .slick-prev.slick-disabled:before{opacity:.25}.elementor-slick-slider .slick-next:before,.elementor-slick-slider .slick-prev:before{font-family:FontAwesome;font-size:35px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider .slick-prev{left:-25px}[dir=rtl] .elementor-slick-slider .slick-prev{left:auto;right:-25px}.elementor-slick-slider .slick-prev:before{content:"\f104"}[dir=rtl] .elementor-slick-slider .slick-prev:before{content:"\f105"}.elementor-slick-slider .slick-next{right:-25px}[dir=rtl] .elementor-slick-slider .slick-next{left:-25px;right:auto}.elementor-slick-slider .slick-next:before{content:"\f105"}[dir=rtl] .elementor-slick-slider .slick-next:before{content:"\f104"}.elementor-slick-slider .slick-dotted.slick-slider{margin-bottom:30px}.elementor-slick-slider ul.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center;line-height:1}.elementor-slick-slider ul.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0;padding:0;cursor:pointer}.elementor-slick-slider ul.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:none;background:transparent}.elementor-slick-slider ul.slick-dots li button:focus,.elementor-slick-slider ul.slick-dots li button:hover{outline:none}.elementor-slick-slider ul.slick-dots li button:focus:before,.elementor-slick-slider ul.slick-dots li button:hover:before{opacity:1}.elementor-slick-slider ul.slick-dots li button:before{font-family:FontAwesome;font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:"\f111";text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider ul.slick-dots li.slick-active button:before{opacity:.75;color:#000}.elementor-slick-slider .slick-arrows-inside .slick-prev{left:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-prev{left:auto;right:20px}.elementor-slick-slider .slick-arrows-inside .slick-next{right:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-next{left:20px;right:auto}.elementor-slick-slider .slick-dots-inside .slick-dots{bottom:5px}.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider{margin-bottom:0}.elementor-slick-slider .slick-slider .slick-next,.elementor-slick-slider .slick-slider .slick-prev{z-index:1}.elementor-slick-slider .slick-slide img{margin:auto}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-webkit-background-size:27px 44px;background-size:27px 44px;background:no-repeat 50%}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23007aff'/%3E%3C/svg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z'/%3E%3C/svg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23007aff'/%3E%3C/svg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:6px;height:6px;display:inline-block;-webkit-border-radius:50%;border-radius:50%;background:#000;opacity:.2}.swiper-pagination-fraction{color:#000}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 6px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#000;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:hsla(0,0%,100%,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-scrollbar{-webkit-border-radius:10px;border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);-webkit-border-radius:10px;border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12) infinite;animation:swiper-preloader-spin 1s steps(12) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;-webkit-background-size:100% 100%;background-size:100%;background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E") no-repeat 50%}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E")}@-webkit-keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.elementor-lightbox .dialog-widget-header{display:none}.elementor-lightbox .dialog-widget-content{background:none;-webkit-box-shadow:none;box-shadow:none;width:100%;height:100%}.elementor-lightbox .dialog-message{-webkit-animation-duration:.4s;animation-duration:.4s}.elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio){height:100%}.elementor-lightbox .dialog-lightbox-close-button{cursor:pointer;position:absolute;font-size:25px;padding:5px;z-index:2;line-height:1}@media (max-width:767px){.elementor-lightbox .dialog-lightbox-close-button{padding:0}}.elementor-lightbox .dialog-lightbox-close-button,.elementor-lightbox .elementor-swiper-button{color:hsla(0,0%,93%,.9);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;opacity:1}.elementor-lightbox .dialog-lightbox-close-button:hover,.elementor-lightbox .elementor-swiper-button:hover{color:#fff}.elementor-lightbox .swiper-container{height:100%}.elementor-lightbox .elementor-lightbox-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:70px 80px;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin:auto}@media (max-width:767px){.elementor-lightbox .elementor-lightbox-item{padding:40px}}.elementor-lightbox .elementor-lightbox-image{max-height:100%}.elementor-lightbox .elementor-video-container{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}@media (min-width:1025px){.elementor-lightbox .elementor-video-container{width:75%}}@media (max-width:1024px){.elementor-lightbox .elementor-video-container{width:100%}}.elementor-lightbox .elementor-swiper-button-prev{left:35px}.elementor-lightbox .elementor-swiper-button-next{right:35px}@media (max-width:767px){.elementor-lightbox .elementor-swiper-button-prev{left:10px}.elementor-lightbox .elementor-swiper-button-next{right:10px}}.animated{-webkit-animation-duration:1.25s;animation-duration:1.25s}.animated.animated-slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.animated-fast{-webkit-animation-duration:.75s;animation-duration:.75s}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.elementor-shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.elementor-shape-top{top:-1px}.elementor-shape-bottom{bottom:-1px}.elementor-shape[data-negative=false].elementor-shape-bottom,.elementor-shape[data-negative=true].elementor-shape-top{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-shape svg{display:block;width:-webkit-calc(100% + 1.3px);width:calc(100% + 1.3px);position:relative;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-shape .elementor-shape-fill{fill:#fff;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotateY(0deg);transform:rotateY(0deg)}#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:200px}#wp-admin-bar-elementor_edit_page .elementor-edit-link-title{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;width:100%}#wp-admin-bar-elementor_edit_page .elementor-edit-link-type{background:#55595c;font-size:11px;line-height:9px;margin-top:6px;padding:4px 8px;-webkit-border-radius:3px;border-radius:3px}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{-webkit-transition:none;-o-transition:none;transition:none}#elementor .elementor-element ul.elementor-icon-list-items,#left-area ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}@media (max-width:767px){.elementor:not(.elementor-edit-area-active) .elementor-hidden-phone{display:none}}@media (min-width:768px) and (max-width:1024px){.elementor:not(.elementor-edit-area-active) .elementor-hidden-tablet{display:none}}@media (min-width:1025px){.elementor:not(.elementor-edit-area-active) .elementor-hidden-desktop{display:none}}
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{padding:20px 0;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 20px 20px;min-height:50px}.dialog-type-lightbox .dialog-header,.dialog-type-lightbox .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-header,.dialog-lightbox-widget .dialog-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-right:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor{-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual}.elementor *,.elementor :after,.elementor :before{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor a{-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.elementor hr{margin:0;background-color:transparent}.elementor img{height:auto;max-width:100%;border:none;-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.elementor .elementor-widget:not(.elementor-widget-text-editor) figure{margin:0}.elementor embed,.elementor iframe,.elementor object,.elementor video{max-width:100%;width:100%;margin:0;line-height:1;border:none}.elementor .elementor-custom-embed{line-height:0}.elementor .elementor-background-video-container{height:100%;width:100%;top:0;left:0;position:absolute;overflow:hidden;z-index:0;-webkit-transition:opacity 1s;-o-transition:opacity 1s;transition:opacity 1s}.elementor .elementor-background-video-container.elementor-loading{opacity:0}.elementor .elementor-background-video-embed{max-width:none;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor .elementor-background-video{position:absolute;max-width:none;top:50%;left:50%;-webkit-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%)}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor-invisible{visibility:hidden}.elementor-align-center{text-align:center}.elementor-align-center .elementor-button{width:auto}.elementor-align-right{text-align:right}.elementor-align-right .elementor-button{width:auto}.elementor-align-left{text-align:left}.elementor-align-left .elementor-button{width:auto}.elementor-align-justify .elementor-button{width:100%}.elementor-custom-embed-play{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;opacity:.8;text-shadow:1px 0 6px rgba(0,0,0,.3);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:FontAwesome;-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.elementor-custom-embed-play.elementor-playing i:before{content:"\f1ce"}.elementor-swiper-button{position:absolute;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;z-index:1;cursor:pointer;font-size:25px;color:hsla(0,0%,93%,.9);top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor-swiper-button.swiper-button-disabled{opacity:.3}.elementor-tag{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex}@media (max-width:1024px){.elementor-tablet-align-center{text-align:center}.elementor-tablet-align-center .elementor-button{width:auto}.elementor-tablet-align-right{text-align:right}.elementor-tablet-align-right .elementor-button{width:auto}.elementor-tablet-align-left{text-align:left}.elementor-tablet-align-left .elementor-button{width:auto}.elementor-tablet-align-justify .elementor-button{width:100%}}@media (max-width:767px){.elementor-mobile-align-center{text-align:center}.elementor-mobile-align-center .elementor-button{width:auto}.elementor-mobile-align-right{text-align:right}.elementor-mobile-align-right .elementor-button{width:auto}.elementor-mobile-align-left{text-align:left}.elementor-mobile-align-left .elementor-button{width:auto}.elementor-mobile-align-justify .elementor-button{width:100%}}#wpadminbar #wp-admin-bar-elementor_edit_page>.ab-item:before{content:"\e801";font-family:eicons;top:3px;font-size:18px}#wpadminbar #wp-admin-bar-elementor_inspector>.ab-item:before{content:"\f348";top:2px}.elementor:after{position:absolute;opacity:0;width:0;height:0;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}@media (min-width:1025px){.elementor:after{content:"desktop"}}@media (min-width:768px) and (max-width:1024px){.elementor:after{content:"tablet"}}@media (max-width:767px){.elementor:after{content:"mobile"}}.elementor-section{position:relative}.elementor-section .elementor-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:auto;margin-left:auto;position:relative}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-section.elementor-section-stretched{position:relative;width:100%}.elementor-section.elementor-section-items-top>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section.elementor-section-items-middle>.elementor-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section.elementor-section-items-bottom>.elementor-container{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}@media (min-width:768px){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}}.elementor-section-content-top>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section-content-middle>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section-content-bottom>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-row{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}@media (max-width:1024px){.elementor-row{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.elementor-column-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-wrap,.elementor-widget-wrap{width:100%;position:relative}.elementor-widget{position:relative}.elementor-widget:not(:last-child){margin-bottom:20px}.elementor-column{position:relative;min-height:1px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-gap-narrow>.elementor-row>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-row>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-row>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-row>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-row>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:768px){.elementor-column.elementor-col-10,.elementor-column[data-col="10"]{width:10%}.elementor-column.elementor-col-11,.elementor-column[data-col="11"]{width:11.111%}.elementor-column.elementor-col-12,.elementor-column[data-col="12"]{width:12.5%}.elementor-column.elementor-col-14,.elementor-column[data-col="14"]{width:14.285%}.elementor-column.elementor-col-16,.elementor-column[data-col="16"]{width:16.666%}.elementor-column.elementor-col-20,.elementor-column[data-col="20"]{width:20%}.elementor-column.elementor-col-25,.elementor-column[data-col="25"]{width:25%}.elementor-column.elementor-col-30,.elementor-column[data-col="30"]{width:30%}.elementor-column.elementor-col-33,.elementor-column[data-col="33"]{width:33.333%}.elementor-column.elementor-col-40,.elementor-column[data-col="40"]{width:40%}.elementor-column.elementor-col-50,.elementor-column[data-col="50"]{width:50%}.elementor-column.elementor-col-60,.elementor-column[data-col="60"]{width:60%}.elementor-column.elementor-col-66,.elementor-column[data-col="66"]{width:66.666%}.elementor-column.elementor-col-70,.elementor-column[data-col="70"]{width:70%}.elementor-column.elementor-col-75,.elementor-column[data-col="75"]{width:75%}.elementor-column.elementor-col-80,.elementor-column[data-col="80"]{width:80%}.elementor-column.elementor-col-83,.elementor-column[data-col="83"]{width:83.333%}.elementor-column.elementor-col-90,.elementor-column[data-col="90"]{width:90%}.elementor-column.elementor-col-100,.elementor-column[data-col="100"]{width:100%}}@media (max-width:479px){.elementor-column.elementor-xs-10{width:10%}.elementor-column.elementor-xs-11{width:11.111%}.elementor-column.elementor-xs-12{width:12.5%}.elementor-column.elementor-xs-14{width:14.285%}.elementor-column.elementor-xs-16{width:16.666%}.elementor-column.elementor-xs-20{width:20%}.elementor-column.elementor-xs-25{width:25%}.elementor-column.elementor-xs-30{width:30%}.elementor-column.elementor-xs-33{width:33.333%}.elementor-column.elementor-xs-40{width:40%}.elementor-column.elementor-xs-50{width:50%}.elementor-column.elementor-xs-60{width:60%}.elementor-column.elementor-xs-66{width:66.666%}.elementor-column.elementor-xs-70{width:70%}.elementor-column.elementor-xs-75{width:75%}.elementor-column.elementor-xs-80{width:80%}.elementor-column.elementor-xs-83{width:83.333%}.elementor-column.elementor-xs-90{width:90%}.elementor-column.elementor-xs-100{width:100%}}@media (max-width:767px){.elementor-column.elementor-sm-10{width:10%}.elementor-column.elementor-sm-11{width:11.111%}.elementor-column.elementor-sm-12{width:12.5%}.elementor-column.elementor-sm-14{width:14.285%}.elementor-column.elementor-sm-16{width:16.666%}.elementor-column.elementor-sm-20{width:20%}.elementor-column.elementor-sm-25{width:25%}.elementor-column.elementor-sm-30{width:30%}.elementor-column.elementor-sm-33{width:33.333%}.elementor-column.elementor-sm-40{width:40%}.elementor-column.elementor-sm-50{width:50%}.elementor-column.elementor-sm-60{width:60%}.elementor-column.elementor-sm-66{width:66.666%}.elementor-column.elementor-sm-70{width:70%}.elementor-column.elementor-sm-75{width:75%}.elementor-column.elementor-sm-80{width:80%}.elementor-column.elementor-sm-83{width:83.333%}.elementor-column.elementor-sm-90{width:90%}.elementor-column.elementor-sm-100{width:100%}}@media (min-width:768px) and (max-width:1024px){.elementor-column.elementor-md-10{width:10%}.elementor-column.elementor-md-11{width:11.111%}.elementor-column.elementor-md-12{width:12.5%}.elementor-column.elementor-md-14{width:14.285%}.elementor-column.elementor-md-16{width:16.666%}.elementor-column.elementor-md-20{width:20%}.elementor-column.elementor-md-25{width:25%}.elementor-column.elementor-md-30{width:30%}.elementor-column.elementor-md-33{width:33.333%}.elementor-column.elementor-md-40{width:40%}.elementor-column.elementor-md-50{width:50%}.elementor-column.elementor-md-60{width:60%}.elementor-column.elementor-md-66{width:66.666%}.elementor-column.elementor-md-70{width:70%}.elementor-column.elementor-md-75{width:75%}.elementor-column.elementor-md-80{width:80%}.elementor-column.elementor-md-83{width:83.333%}.elementor-column.elementor-md-90{width:90%}.elementor-column.elementor-md-100{width:100%}}@media (min-width:768px) and (max-width:1024px){.elementor-reverse-tablet>.elementor-container>.elementor-row>:first-child{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(2){-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(3){-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(4){-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(5){-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(6){-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(7){-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(8){-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(9){-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(10){-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}}@media (max-width:767px){.elementor-reverse-mobile>.elementor-container>.elementor-row>:first-child{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(2){-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(3){-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(4){-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(5){-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(6){-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(7){-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(8){-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(9){-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(10){-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.elementor-column{width:100%}}ul.elementor-icon-list-items.elementor-inline-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item{word-break:break-word}.elementor-grid .elementor-grid-item{word-break:break-word;min-width:0}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}@media (max-width:1024px){.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-tablet-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}@media (max-width:767px){.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-mobile-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.elementor-form-fields-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group .elementor-field-subgroup,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>.elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>input,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>textarea{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group .elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group>input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-field-group.elementor-field-type-submit{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-field-group .elementor-field-textual{width:100%;max-width:100%;border:1px solid #818a91;background-color:transparent;color:#373a3c;vertical-align:middle;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-ms-input-placeholder,.elementor-field-group .elementor-field-textual::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-select-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;width:100%}.elementor-field-group .elementor-select-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:inherit;font-size:inherit;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-right:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\f0d7";font-family:FontAwesome;font-size:15px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);right:10px;pointer-events:none}.elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before{content:""}.elementor-field-subgroup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-field-subgroup .elementor-field-option label{display:inline-block}.elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option{padding-right:10px}.elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-field-label{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-left:.2em}.elementor-field-textual{line-height:1.4}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;-webkit-border-radius:2px;border-radius:2px}.elementor-field-textual.elementor-size-sm{font-size:15px;min-height:40px;padding:5px 14px;-webkit-border-radius:3px;border-radius:3px}.elementor-field-textual.elementor-size-md{font-size:16px;min-height:47px;padding:6px 16px;-webkit-border-radius:4px;border-radius:4px}.elementor-field-textual.elementor-size-lg{font-size:18px;min-height:59px;padding:7px 20px;-webkit-border-radius:5px;border-radius:5px}.elementor-field-textual.elementor-size-xl{font-size:20px;min-height:72px;padding:8px 24px;-webkit-border-radius:6px;border-radius:6px}.elementor-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-button-align-start .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-button-align-end .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}@media screen and (max-width:1024px){.elementor-tablet-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-tablet-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-tablet-button-align-start .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-tablet-button-align-end .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}}@media screen and (max-width:767px){.elementor-mobile-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-mobile-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-mobile-button-align-start .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-mobile-button-align-end .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}}.elementor-error .elementor-field{border-color:#d9534f}.elementor-error .help-inline{color:#d9534f;font-size:.9em}.elementor-message{margin:10px 0;font-size:1em;line-height:1}.elementor-message:before{content:"\f00c";display:inline-block;font-family:fontawesome;font-weight:400;font-style:normal;vertical-align:middle;margin-right:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\f00d"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-top:0;padding-bottom:0;border:0 none}.elementor-form .elementor-button>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-form .elementor-button .elementor-align-icon-right{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-form .elementor-button .elementor-align-icon-left{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.elementor-form .elementor-button.elementor-size-xs{min-height:33px}.elementor-form .elementor-button.elementor-size-sm{min-height:40px}.elementor-form .elementor-button.elementor-size-md{min-height:47px}.elementor-form .elementor-button.elementor-size-lg{min-height:59px}.elementor-form .elementor-button.elementor-size-xl{min-height:72px}.elementor-element .elementor-widget-container{-webkit-transition:background .3s,border .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s;transition:background .3s,border .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s;-o-transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;transition:background .3s,border .3s,border-radius .3s,box-shadow .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s}.elementor-accordion{text-align:left}.elementor-accordion .elementor-accordion-item{border:1px solid #d4d4d4}.elementor-accordion .elementor-accordion-item+.elementor-accordion-item{border-top:none}.elementor-accordion .elementor-tab-title{margin:0;padding:15px 20px;font-weight:700;line-height:1;cursor:pointer;outline:none}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right{float:right;text-align:right}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left{float:left;text-align:left}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed{display:block}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened,.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed{display:none}.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened{display:block}.elementor-accordion .elementor-tab-content{display:none;padding:15px 20px;border-top:1px solid #d4d4d4}@media (max-width:767px){.elementor-accordion .elementor-tab-title{padding:12px 15px}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{width:1.2em}.elementor-accordion .elementor-tab-content{padding:7px 15px}}.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:left}.elementor-alert .elementor-alert-title{display:block;font-weight:700}.elementor-alert .elementor-alert-description{font-size:13px}.elementor-alert button.elementor-alert-dismiss{position:absolute;right:10px;top:10px;padding:3px;font-size:20px;line-height:1;background:transparent;color:inherit;border:none;cursor:pointer}.elementor-alert.elementor-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert.elementor-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert.elementor-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert.elementor-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:767px){.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}.elementor-button{display:inline-block;line-height:1;background-color:#818a91;color:#fff;text-align:center;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;-webkit-border-radius:2px;border-radius:2px}.elementor-button.elementor-size-sm{font-size:15px;padding:12px 24px;-webkit-border-radius:3px;border-radius:3px}.elementor-button.elementor-size-md{font-size:16px;padding:15px 30px;-webkit-border-radius:4px;border-radius:4px}.elementor-button.elementor-size-lg{font-size:18px;padding:20px 40px;-webkit-border-radius:5px;border-radius:5px}.elementor-button.elementor-size-xl{font-size:20px;padding:25px 50px;-webkit-border-radius:6px;border-radius:6px}.elementor-button .elementor-align-icon-right{float:right;margin-left:5px}.elementor-button .elementor-align-icon-left{float:left;margin-right:5px}.elementor-button .elementor-button-text{display:inline-block}.elementor-button span{text-decoration:inherit}.elementor-element.elementor-button-info .elementor-button{background-color:#5bc0de}.elementor-element.elementor-button-success .elementor-button{background-color:#5cb85c}.elementor-element.elementor-button-warning .elementor-button{background-color:#f0ad4e}.elementor-element.elementor-button-danger .elementor-button{background-color:#d9534f}.elementor-widget-button .elementor-button .elementor-button-info{background-color:#5bc0de}.elementor-widget-button .elementor-button .elementor-button-success{background-color:#5cb85c}.elementor-widget-button .elementor-button .elementor-button-warning{background-color:#f0ad4e}.elementor-widget-button .elementor-button .elementor-button-danger{background-color:#d9534f}.elementor-counter .elementor-counter-number-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:69px;font-weight:600;color:#222;line-height:1}.elementor-counter .elementor-counter-number-prefix,.elementor-counter .elementor-counter-number-suffix{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:pre-wrap}.elementor-counter .elementor-counter-number-prefix{text-align:right}.elementor-counter .elementor-counter-number-suffix{text-align:left}.elementor-counter .elementor-counter-title{text-align:center;font-size:19px;font-weight:400;color:#666;line-height:2.5}.elementor-widget-divider .elementor-divider{line-height:0;font-size:0}.elementor-widget-divider .elementor-divider-separator{display:inline-block}.elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}@media (min-width:768px){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:767px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}.elementor-widget-google_maps iframe{height:300px}.elementor-widget-heading .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title>a{color:inherit;font-size:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}.elementor-icon{display:inline-block;line-height:1;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;color:#818a91;font-size:50px;text-align:center}.elementor-icon:hover{color:#818a91}.elementor-icon i{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#818a91;color:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#818a91;border:3px solid #818a91;background-color:transparent}.elementor-shape-circle .elementor-icon{-webkit-border-radius:50%;border-radius:50%}@media (min-width:768px){.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img{margin:auto}.elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:767px){.elementor-widget-icon-box .elementor-icon-box-icon{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-icon-box .elementor-icon-box-wrapper{text-align:center}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}.elementor-widget .elementor-icon-list-items.elementor-inline-items{margin-right:-8px;margin-left:-8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item{margin-right:8px;margin-left:8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after{width:auto;left:auto;right:auto;position:relative;height:100%;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);border-top:0;border-bottom:0;border-right:0;border-left-width:1px;border-style:solid;right:-8px}.elementor-widget .elementor-icon-list-items{list-style-type:none;margin:0;padding:0}.elementor-widget .elementor-icon-list-item{margin:0;padding:0;position:relative}.elementor-widget .elementor-icon-list-item:after{position:absolute;bottom:0;width:100%}.elementor-widget .elementor-icon-list-item,.elementor-widget .elementor-icon-list-item a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget .elementor-icon-list-item a{width:100%}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding-left:5px}.elementor-widget .elementor-icon-list-icon{text-align:center}.elementor-widget.elementor-align-center .elementor-icon-list-item,.elementor-widget.elementor-align-center .elementor-icon-list-item a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-align-center .elementor-inline-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-left .elementor-icon-list-item,.elementor-widget.elementor-align-left .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.elementor-widget.elementor-align-left .elementor-inline-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-align-right .elementor-icon-list-item,.elementor-widget.elementor-align-right .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.elementor-widget.elementor-align-right .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after{right:0}@media (max-width:1024px){.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:767px){.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after{right:0}}.elementor-widget-image{text-align:center}.elementor-widget-image .elementor-image>a,.elementor-widget-image .elementor-image figure>a{display:block}.elementor-widget-image .elementor-image img{vertical-align:middle;display:inline-block}.elementor-widget-image .elementor-image.elementor-image-shape-circle{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:768px){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:767px){.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}.elementor-image-carousel-wrapper .slick-image-stretch .slick-slide .slick-slide-image{width:100%}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}.swiper-container .swiper-slide figure{line-height:0}.swiper-container .swiper-slide figure img{width:100%}body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}.elementor-widget-progress{text-align:left}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:30px;line-height:30px;-webkit-border-radius:2px;border-radius:2px}.elementor-progress-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#818a91;width:0;font-size:11px;-webkit-border-radius:2px;border-radius:2px;-webkit-transition:width 1s ease-in-out;-o-transition:width 1s ease-in-out;transition:width 1s ease-in-out}.elementor-progress-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-left:15px}.elementor-progress-percentage{padding-right:15px}.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar{background-color:#5bc0de}.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar{background-color:#5cb85c}.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar{background-color:#f0ad4e}.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar{background-color:#d9534f}.elementor-progress .elementor-title{display:block}@media (max-width:767px){.elementor-progress-wrapper{height:25px;line-height:25px}.elementor-progress-text{padding-left:10px}}.elementor-social-icons-wrapper{font-size:0}.elementor-social-icon{font-size:25px;text-align:center;padding:.5em;margin-right:5px;cursor:pointer}.elementor-social-icon i{color:#fff}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-google-plus{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-linkedin{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#df2029}.elementor-social-icon-weixin{background-color:#7bb32e}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{-webkit-border-radius:10%;border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{width:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active{border-right-style:none}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{height:999em;width:0;right:0;border-right-style:solid}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{top:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after{top:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title{display:table-cell}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active{border-bottom-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{bottom:0;height:0;width:999em;border-bottom-style:solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{right:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after{left:100%}.elementor-widget-tabs .elementor-tab-content,.elementor-widget-tabs .elementor-tab-title,.elementor-widget-tabs .elementor-tab-title:after,.elementor-widget-tabs .elementor-tab-title:before,.elementor-widget-tabs .elementor-tabs-content-wrapper{border:1px none #d4d4d4}.elementor-widget-tabs .elementor-tabs{text-align:left}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:none}.elementor-widget-tabs .elementor-tab-desktop-title{position:relative;padding:20px 25px;font-weight:700;line-height:1;border:solid transparent}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active{border-color:#d4d4d4}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before{display:block;content:"";position:absolute}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:767px){.elementor-tabs .elementor-tab-content,.elementor-tabs .elementor-tab-title{border-style:solid;border-bottom-style:none}.elementor-tabs .elementor-tabs-wrapper{display:none}.elementor-tabs .elementor-tabs-content-wrapper{border-bottom-style:solid}.elementor-tabs .elementor-tab-content{padding:10px}}@media (min-width:768px){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-style:solid;border-left-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content{border-style:solid;border-top-style:none}.elementor-tabs .elementor-tab-mobile-title{display:none}}.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;color:inherit}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;color:inherit}.elementor-testimonial-wrapper.elementor-testimonial-text-align-left{text-align:left}.elementor-testimonial-wrapper.elementor-testimonial-text-align-right{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;-webkit-border-radius:50%;border-radius:50%;-o-object-fit:cover;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-right:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:left}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}.elementor-toggle{text-align:left}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d4d4d4;cursor:pointer;outline:none}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d4d4d4;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.elementor-widget-video .elementor-widget-container{overflow:hidden}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%}.slick-slider{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list,.slick-slider{position:relative;display:block}.slick-list{overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translateZ(0);transform:translateZ(0)}.slick-track{position:relative;left:0;top:0;display:block}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}.elementor-slick-slider[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.elementor-slick-slider .slick-loading .slick-list{background:#fff}.elementor-slick-slider .slick-loading .slick-list:after{content:"\f1ce";font-family:FontAwesome;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear;font-size:25px;color:#a4afb7}.elementor-slick-slider .slick-next,.elementor-slick-slider .slick-prev{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;padding:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:transparent;border:none;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus,.elementor-slick-slider .slick-next:hover,.elementor-slick-slider .slick-prev:focus,.elementor-slick-slider .slick-prev:hover{color:transparent;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus:before,.elementor-slick-slider .slick-next:hover:before,.elementor-slick-slider .slick-prev:focus:before,.elementor-slick-slider .slick-prev:hover:before{opacity:1}.elementor-slick-slider .slick-next.slick-disabled:before,.elementor-slick-slider .slick-prev.slick-disabled:before{opacity:.25}.elementor-slick-slider .slick-next:before,.elementor-slick-slider .slick-prev:before{font-family:FontAwesome;font-size:35px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider .slick-prev{left:-25px}[dir=rtl] .elementor-slick-slider .slick-prev{left:auto;right:-25px}.elementor-slick-slider .slick-prev:before{content:"\f104"}[dir=rtl] .elementor-slick-slider .slick-prev:before{content:"\f105"}.elementor-slick-slider .slick-next{right:-25px}[dir=rtl] .elementor-slick-slider .slick-next{left:-25px;right:auto}.elementor-slick-slider .slick-next:before{content:"\f105"}[dir=rtl] .elementor-slick-slider .slick-next:before{content:"\f104"}.elementor-slick-slider .slick-dotted.slick-slider{margin-bottom:30px}.elementor-slick-slider ul.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center;line-height:1}.elementor-slick-slider ul.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0;padding:0;cursor:pointer}.elementor-slick-slider ul.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:none;background:transparent}.elementor-slick-slider ul.slick-dots li button:focus,.elementor-slick-slider ul.slick-dots li button:hover{outline:none}.elementor-slick-slider ul.slick-dots li button:focus:before,.elementor-slick-slider ul.slick-dots li button:hover:before{opacity:1}.elementor-slick-slider ul.slick-dots li button:before{font-family:FontAwesome;font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:"\f111";text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider ul.slick-dots li.slick-active button:before{opacity:.75;color:#000}.elementor-slick-slider .slick-arrows-inside .slick-prev{left:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-prev{left:auto;right:20px}.elementor-slick-slider .slick-arrows-inside .slick-next{right:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-next{left:20px;right:auto}.elementor-slick-slider .slick-dots-inside .slick-dots{bottom:5px}.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider{margin-bottom:0}.elementor-slick-slider .slick-slider .slick-next,.elementor-slick-slider .slick-slider .slick-prev{z-index:1}.elementor-slick-slider .slick-slide img{margin:auto}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-webkit-background-size:27px 44px;background-size:27px 44px;background:no-repeat 50%}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23007aff'/%3E%3C/svg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z'/%3E%3C/svg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23007aff'/%3E%3C/svg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:6px;height:6px;display:inline-block;-webkit-border-radius:50%;border-radius:50%;background:#000;opacity:.2}.swiper-pagination-fraction{color:#000}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 6px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#000;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:hsla(0,0%,100%,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-scrollbar{-webkit-border-radius:10px;border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);-webkit-border-radius:10px;border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12) infinite;animation:swiper-preloader-spin 1s steps(12) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;-webkit-background-size:100% 100%;background-size:100%;background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E") no-repeat 50%}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E")}@-webkit-keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.elementor-lightbox .dialog-header{display:none}.elementor-lightbox .dialog-widget-content{background:none;-webkit-box-shadow:none;box-shadow:none;width:100%;height:100%}.elementor-lightbox .dialog-message{-webkit-animation-duration:.4s;animation-duration:.4s}.elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio){height:100%}.elementor-lightbox .dialog-lightbox-close-button{cursor:pointer;position:absolute;font-size:25px;padding:5px;z-index:2;line-height:1}@media (max-width:767px){.elementor-lightbox .dialog-lightbox-close-button{padding:0}}.elementor-lightbox .dialog-lightbox-close-button,.elementor-lightbox .elementor-swiper-button{color:hsla(0,0%,93%,.9);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;opacity:1}.elementor-lightbox .dialog-lightbox-close-button:hover,.elementor-lightbox .elementor-swiper-button:hover{color:#fff}.elementor-lightbox .swiper-container{height:100%}.elementor-lightbox .elementor-lightbox-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:70px 80px;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin:auto}@media (max-width:767px){.elementor-lightbox .elementor-lightbox-item{padding:40px}}.elementor-lightbox .elementor-lightbox-image{max-height:100%}.elementor-lightbox .elementor-video-container{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}@media (min-width:1025px){.elementor-lightbox .elementor-video-container{width:75%}}@media (max-width:1024px){.elementor-lightbox .elementor-video-container{width:100%}}.elementor-lightbox .elementor-swiper-button-prev{left:35px}.elementor-lightbox .elementor-swiper-button-next{right:35px}@media (max-width:767px){.elementor-lightbox .elementor-swiper-button-prev{left:10px}.elementor-lightbox .elementor-swiper-button-next{right:10px}}.animated{-webkit-animation-duration:1.25s;animation-duration:1.25s}.animated.animated-slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.animated-fast{-webkit-animation-duration:.75s;animation-duration:.75s}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.elementor-shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.elementor-shape-top{top:-1px}.elementor-shape-bottom{bottom:-1px}.elementor-shape[data-negative=false].elementor-shape-bottom,.elementor-shape[data-negative=true].elementor-shape-top{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-shape svg{display:block;width:-webkit-calc(100% + 1.3px);width:calc(100% + 1.3px);position:relative;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-shape .elementor-shape-fill{fill:#fff;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotateY(0deg);transform:rotateY(0deg)}#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:200px}#wp-admin-bar-elementor_edit_page .elementor-edit-link-title{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;width:100%}#wp-admin-bar-elementor_edit_page .elementor-edit-link-type{background:#55595c;font-size:11px;line-height:9px;margin-top:6px;padding:4px 8px;-webkit-border-radius:3px;border-radius:3px}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{-webkit-transition:none;-o-transition:none;transition:none}#elementor .elementor-element ul.elementor-icon-list-items,#left-area ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}@media (max-width:767px){.elementor .elementor-hidden-phone{display:none}}@media (min-width:768px) and (max-width:1024px){.elementor .elementor-hidden-tablet{display:none}}@media (min-width:1025px){.elementor .elementor-hidden-desktop{display:none}}
\ No newline at end of file
--- /dev/null
+.dialog-widget-content {
+ background-color: #fff;
+ position: absolute;
+ border-radius: 3px;
+ box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2);
+ overflow: hidden; }
+
+.dialog-message {
+ font-size: 12px;
+ line-height: 1.5; }
+
+.dialog-type-lightbox {
+ position: fixed;
+ height: 100%;
+ width: 100%;
+ top: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.8);
+ z-index: 9999;
+ user-select: none; }
+ .dialog-type-lightbox .dialog-widget-content {
+ margin: auto;
+ width: 375px; }
+ .dialog-type-lightbox .dialog-header {
+ padding: 20px 0;
+ font-weight: 500; }
+ .dialog-type-lightbox .dialog-message {
+ padding: 0 20px 20px;
+ min-height: 50px; }
+ .dialog-type-lightbox .dialog-header, .dialog-type-lightbox .dialog-message {
+ text-align: center; }
+ .dialog-type-lightbox .dialog-buttons-wrapper {
+ border-top: 1px solid #e6e9ec;
+ text-align: center; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button {
+ border: none;
+ background: none;
+ font-size: 15px;
+ cursor: pointer;
+ padding: 13px 0;
+ outline: 0; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button:first-child {
+ color: #6d7882; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button.dialog-ok {
+ color: #b01b1b; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button.dialog-take_over {
+ color: #39b54a; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button:active {
+ background-color: rgba(230, 233, 236, 0.5); }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button::-moz-focus-inner {
+ border: 0; }
+
+.dialog-close-button {
+ cursor: pointer;
+ position: absolute;
+ top: 30px;
+ right: 30px;
+ font-size: 15px; }
+ .dialog-close-button:not(:hover) {
+ opacity: .4; }
+
+.dialog-lightbox-widget .dialog-header,
+.dialog-confirm-widget .dialog-header {
+ font-size: 15px;
+ color: #495157; }
+
+.dialog-lightbox-widget .dialog-buttons-wrapper > button,
+.dialog-confirm-widget .dialog-buttons-wrapper > button {
+ width: 50%; }
+ .dialog-lightbox-widget .dialog-buttons-wrapper > button:first-child,
+ .dialog-confirm-widget .dialog-buttons-wrapper > button:first-child {
+ border-left: 1px solid #e6e9ec; }
+ .dialog-lightbox-widget .dialog-buttons-wrapper > button:hover,
+ .dialog-confirm-widget .dialog-buttons-wrapper > button:hover {
+ background-color: #f4f6f7; }
+
+.dialog-alert-widget .dialog-buttons-wrapper > button {
+ width: 100%; }
+
+@media (max-width: 767px) {
+ .dialog-close-button {
+ top: 15px;
+ right: 15px; }
+ body.admin-bar .dialog-close-button {
+ top: 40px; } }
+
+.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio {
+ padding-bottom: 42.8571%; }
+
+.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio {
+ padding-bottom: 56.25%; }
+
+.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio {
+ padding-bottom: 75%; }
+
+.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio {
+ padding-bottom: 66.6666%; }
+
+.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio {
+ padding-bottom: 100%; }
+
+.elementor-fit-aspect-ratio {
+ position: relative;
+ height: 0; }
+ .elementor-fit-aspect-ratio iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ border: 0; }
+
+.elementor-hidden {
+ display: none; }
+
+.flatpickr-calendar {
+ width: 280px; }
+ .flatpickr-calendar .flatpickr-current-month span.cur-month {
+ font-weight: 300; }
+ .flatpickr-calendar .dayContainer {
+ width: 280px;
+ min-width: 280px;
+ max-width: 280px; }
+ .flatpickr-calendar .flatpickr-days {
+ width: 280px; }
+ .flatpickr-calendar .flatpickr-day {
+ max-width: 37px;
+ height: 37px;
+ line-height: 37px; }
+
+.elementor {
+ hyphens: manual; }
+ .elementor *, .elementor *:before, .elementor *:after {
+ box-sizing: border-box; }
+ .elementor a {
+ box-shadow: none;
+ text-decoration: none; }
+ .elementor hr {
+ margin: 0;
+ background-color: transparent; }
+ .elementor img {
+ height: auto;
+ max-width: 100%;
+ border: none;
+ border-radius: 0;
+ box-shadow: none; }
+ .elementor .elementor-widget:not(.elementor-widget-text-editor) figure {
+ margin: 0; }
+ .elementor embed,
+ .elementor iframe,
+ .elementor object,
+ .elementor video {
+ max-width: 100%;
+ width: 100%;
+ margin: 0;
+ line-height: 1;
+ border: none; }
+ .elementor .elementor-custom-embed {
+ line-height: 0; }
+ .elementor .elementor-background-video-container {
+ height: 100%;
+ width: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ overflow: hidden;
+ z-index: 0;
+ transition: opacity 1s; }
+ .elementor .elementor-background-video-container.elementor-loading {
+ opacity: 0; }
+ .elementor .elementor-background-video-embed {
+ max-width: none;
+ position: absolute;
+ top: 50%;
+ left: 0;
+ transform: translateY(-50%); }
+ .elementor .elementor-background-video {
+ position: absolute;
+ max-width: none;
+ top: 50%;
+ left: 50%;
+ transform: translateY(-50%) translateX(-50%); }
+ .elementor .elementor-html5-video {
+ object-fit: cover; }
+ .elementor .elementor-background-overlay {
+ height: 100%;
+ width: 100%;
+ top: 0;
+ left: 0;
+ position: absolute; }
+
+.elementor-invisible {
+ visibility: hidden; }
+
+.elementor-align-center {
+ text-align: center; }
+ .elementor-align-center .elementor-button {
+ width: auto; }
+
+.elementor-align-right {
+ text-align: right; }
+ .elementor-align-right .elementor-button {
+ width: auto; }
+
+.elementor-align-left {
+ text-align: left; }
+ .elementor-align-left .elementor-button {
+ width: auto; }
+
+.elementor-align-justify .elementor-button {
+ width: 100%; }
+
+.elementor-custom-embed-play {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%); }
+ .elementor-custom-embed-play i {
+ font-size: 100px;
+ color: #fff;
+ opacity: 0.8;
+ text-shadow: 1px 0 6px rgba(0, 0, 0, 0.3);
+ transition: all .5s; }
+ .elementor-custom-embed-play.elementor-playing i {
+ font-family: 'FontAwesome';
+ animation: fa-spin 2s infinite linear; }
+ .elementor-custom-embed-play.elementor-playing i:before {
+ content: "\f1ce"; }
+
+.elementor-swiper-button {
+ position: absolute;
+ display: inline-flex;
+ z-index: 1;
+ cursor: pointer;
+ font-size: 25px;
+ color: rgba(238, 238, 238, 0.9);
+ top: 50%;
+ transform: translateY(-50%); }
+ .elementor-swiper-button.swiper-button-disabled {
+ opacity: 0.3; }
+
+.elementor-tag {
+ display: inline-flex; }
+
+@media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-tablet-align-center {
+ text-align: center; }
+ .elementor-tablet-align-center .elementor-button {
+ width: auto; }
+ .elementor-tablet-align-right {
+ text-align: right; }
+ .elementor-tablet-align-right .elementor-button {
+ width: auto; }
+ .elementor-tablet-align-left {
+ text-align: left; }
+ .elementor-tablet-align-left .elementor-button {
+ width: auto; }
+ .elementor-tablet-align-justify .elementor-button {
+ width: 100%; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-mobile-align-center {
+ text-align: center; }
+ .elementor-mobile-align-center .elementor-button {
+ width: auto; }
+ .elementor-mobile-align-right {
+ text-align: right; }
+ .elementor-mobile-align-right .elementor-button {
+ width: auto; }
+ .elementor-mobile-align-left {
+ text-align: left; }
+ .elementor-mobile-align-left .elementor-button {
+ width: auto; }
+ .elementor-mobile-align-justify .elementor-button {
+ width: 100%; } }
+
+#wpadminbar #wp-admin-bar-elementor_edit_page > .ab-item::before {
+ content: "\e801";
+ font-family: eicons;
+ top: 3px;
+ font-size: 18px; }
+
+#wpadminbar #wp-admin-bar-elementor_inspector > .ab-item::before {
+ content: "\f348";
+ top: 2px; }
+
+.elementor:after {
+ position: absolute;
+ opacity: 0;
+ width: 0;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0; }
+ @media (min-width: ELEMENTOR_SCREEN_LG_MIN) {
+ .elementor:after {
+ content: 'desktop'; } }
+ @media (min-width: ELEMENTOR_SCREEN_MD_MIN) and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor:after {
+ content: 'tablet'; } }
+ @media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor:after {
+ content: 'mobile'; } }
+
+.elementor-section {
+ position: relative; }
+ .elementor-section .elementor-container {
+ display: flex;
+ margin-right: auto;
+ margin-left: auto;
+ position: relative; }
+ .elementor-section.elementor-section-boxed > .elementor-container {
+ max-width: 1140px; }
+ .elementor-section.elementor-section-stretched {
+ position: relative;
+ width: 100%; }
+ .elementor-section.elementor-section-items-top > .elementor-container {
+ align-items: flex-start; }
+ .elementor-section.elementor-section-items-middle > .elementor-container {
+ align-items: center; }
+ .elementor-section.elementor-section-items-bottom > .elementor-container {
+ align-items: flex-end; }
+ @media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-section.elementor-section-height-full {
+ height: 100vh; }
+ .elementor-section.elementor-section-height-full > .elementor-container {
+ height: 100%; } }
+
+.elementor-section-content-top > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap {
+ align-items: flex-start; }
+
+.elementor-section-content-middle > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap {
+ align-items: center; }
+
+.elementor-section-content-bottom > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap {
+ align-items: flex-end; }
+
+.elementor-row {
+ width: 100%;
+ display: flex; }
+ @media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-row {
+ flex-wrap: wrap; } }
+
+.elementor-column-wrap {
+ width: 100%;
+ position: relative;
+ display: flex; }
+
+.elementor-widget-wrap {
+ position: relative;
+ width: 100%; }
+
+.elementor-widget {
+ position: relative; }
+ .elementor-widget:not(:last-child) {
+ margin-bottom: 20px; }
+
+.elementor-column {
+ position: relative;
+ min-height: 1px;
+ display: flex; }
+
+.elementor-column-gap-narrow > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 5px; }
+
+.elementor-column-gap-default > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 10px; }
+
+.elementor-column-gap-extended > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 15px; }
+
+.elementor-column-gap-wide > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 20px; }
+
+.elementor-column-gap-wider > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 30px; }
+
+.elementor-inner-section .elementor-column-gap-no .elementor-element-populated {
+ padding: 0; }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-column.elementor-col-10, .elementor-column[data-col="10"] {
+ width: 10%; }
+ .elementor-column.elementor-col-11, .elementor-column[data-col="11"] {
+ width: 11.111%; }
+ .elementor-column.elementor-col-12, .elementor-column[data-col="12"] {
+ width: 12.5%; }
+ .elementor-column.elementor-col-14, .elementor-column[data-col="14"] {
+ width: 14.285%; }
+ .elementor-column.elementor-col-16, .elementor-column[data-col="16"] {
+ width: 16.666%; }
+ .elementor-column.elementor-col-20, .elementor-column[data-col="20"] {
+ width: 20%; }
+ .elementor-column.elementor-col-25, .elementor-column[data-col="25"] {
+ width: 25%; }
+ .elementor-column.elementor-col-30, .elementor-column[data-col="30"] {
+ width: 30%; }
+ .elementor-column.elementor-col-33, .elementor-column[data-col="33"] {
+ width: 33.333%; }
+ .elementor-column.elementor-col-40, .elementor-column[data-col="40"] {
+ width: 40%; }
+ .elementor-column.elementor-col-50, .elementor-column[data-col="50"] {
+ width: 50%; }
+ .elementor-column.elementor-col-60, .elementor-column[data-col="60"] {
+ width: 60%; }
+ .elementor-column.elementor-col-66, .elementor-column[data-col="66"] {
+ width: 66.666%; }
+ .elementor-column.elementor-col-70, .elementor-column[data-col="70"] {
+ width: 70%; }
+ .elementor-column.elementor-col-75, .elementor-column[data-col="75"] {
+ width: 75%; }
+ .elementor-column.elementor-col-80, .elementor-column[data-col="80"] {
+ width: 80%; }
+ .elementor-column.elementor-col-83, .elementor-column[data-col="83"] {
+ width: 83.333%; }
+ .elementor-column.elementor-col-90, .elementor-column[data-col="90"] {
+ width: 90%; }
+ .elementor-column.elementor-col-100, .elementor-column[data-col="100"] {
+ width: 100%; } }
+
+@media (max-width: 479px) {
+ .elementor-column.elementor-xs-10 {
+ width: 10%; }
+ .elementor-column.elementor-xs-11 {
+ width: 11.111%; }
+ .elementor-column.elementor-xs-12 {
+ width: 12.5%; }
+ .elementor-column.elementor-xs-14 {
+ width: 14.285%; }
+ .elementor-column.elementor-xs-16 {
+ width: 16.666%; }
+ .elementor-column.elementor-xs-20 {
+ width: 20%; }
+ .elementor-column.elementor-xs-25 {
+ width: 25%; }
+ .elementor-column.elementor-xs-30 {
+ width: 30%; }
+ .elementor-column.elementor-xs-33 {
+ width: 33.333%; }
+ .elementor-column.elementor-xs-40 {
+ width: 40%; }
+ .elementor-column.elementor-xs-50 {
+ width: 50%; }
+ .elementor-column.elementor-xs-60 {
+ width: 60%; }
+ .elementor-column.elementor-xs-66 {
+ width: 66.666%; }
+ .elementor-column.elementor-xs-70 {
+ width: 70%; }
+ .elementor-column.elementor-xs-75 {
+ width: 75%; }
+ .elementor-column.elementor-xs-80 {
+ width: 80%; }
+ .elementor-column.elementor-xs-83 {
+ width: 83.333%; }
+ .elementor-column.elementor-xs-90 {
+ width: 90%; }
+ .elementor-column.elementor-xs-100 {
+ width: 100%; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-column.elementor-sm-10 {
+ width: 10%; }
+ .elementor-column.elementor-sm-11 {
+ width: 11.111%; }
+ .elementor-column.elementor-sm-12 {
+ width: 12.5%; }
+ .elementor-column.elementor-sm-14 {
+ width: 14.285%; }
+ .elementor-column.elementor-sm-16 {
+ width: 16.666%; }
+ .elementor-column.elementor-sm-20 {
+ width: 20%; }
+ .elementor-column.elementor-sm-25 {
+ width: 25%; }
+ .elementor-column.elementor-sm-30 {
+ width: 30%; }
+ .elementor-column.elementor-sm-33 {
+ width: 33.333%; }
+ .elementor-column.elementor-sm-40 {
+ width: 40%; }
+ .elementor-column.elementor-sm-50 {
+ width: 50%; }
+ .elementor-column.elementor-sm-60 {
+ width: 60%; }
+ .elementor-column.elementor-sm-66 {
+ width: 66.666%; }
+ .elementor-column.elementor-sm-70 {
+ width: 70%; }
+ .elementor-column.elementor-sm-75 {
+ width: 75%; }
+ .elementor-column.elementor-sm-80 {
+ width: 80%; }
+ .elementor-column.elementor-sm-83 {
+ width: 83.333%; }
+ .elementor-column.elementor-sm-90 {
+ width: 90%; }
+ .elementor-column.elementor-sm-100 {
+ width: 100%; } }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-column.elementor-md-10 {
+ width: 10%; }
+ .elementor-column.elementor-md-11 {
+ width: 11.111%; }
+ .elementor-column.elementor-md-12 {
+ width: 12.5%; }
+ .elementor-column.elementor-md-14 {
+ width: 14.285%; }
+ .elementor-column.elementor-md-16 {
+ width: 16.666%; }
+ .elementor-column.elementor-md-20 {
+ width: 20%; }
+ .elementor-column.elementor-md-25 {
+ width: 25%; }
+ .elementor-column.elementor-md-30 {
+ width: 30%; }
+ .elementor-column.elementor-md-33 {
+ width: 33.333%; }
+ .elementor-column.elementor-md-40 {
+ width: 40%; }
+ .elementor-column.elementor-md-50 {
+ width: 50%; }
+ .elementor-column.elementor-md-60 {
+ width: 60%; }
+ .elementor-column.elementor-md-66 {
+ width: 66.666%; }
+ .elementor-column.elementor-md-70 {
+ width: 70%; }
+ .elementor-column.elementor-md-75 {
+ width: 75%; }
+ .elementor-column.elementor-md-80 {
+ width: 80%; }
+ .elementor-column.elementor-md-83 {
+ width: 83.333%; }
+ .elementor-column.elementor-md-90 {
+ width: 90%; }
+ .elementor-column.elementor-md-100 {
+ width: 100%; } }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(1) {
+ order: 10; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(2) {
+ order: 9; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(3) {
+ order: 8; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(4) {
+ order: 7; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(5) {
+ order: 6; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(6) {
+ order: 5; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(7) {
+ order: 4; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(8) {
+ order: 3; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(9) {
+ order: 2; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(10) {
+ order: 1; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(1) {
+ order: 10; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(2) {
+ order: 9; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(3) {
+ order: 8; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(4) {
+ order: 7; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(5) {
+ order: 6; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(6) {
+ order: 5; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(7) {
+ order: 4; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(8) {
+ order: 3; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(9) {
+ order: 2; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(10) {
+ order: 1; }
+ .elementor-column {
+ width: 100%; } }
+
+ul.elementor-icon-list-items.elementor-inline-items {
+ display: flex;
+ flex-wrap: wrap; }
+ ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item {
+ word-break: break-word; }
+
+.elementor-grid .elementor-grid-item {
+ word-break: break-word;
+ min-width: 0; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; }
+
+@media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; } }
+
+.elementor-screen-only,
+.screen-reader-text,
+.screen-reader-text span,
+.ui-helper-hidden-accessible {
+ position: absolute;
+ top: -10000em;
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0; }
+
+.elementor-clearfix:after {
+ content: '';
+ display: block;
+ clear: both;
+ width: 0;
+ height: 0; }
+
+.elementor-form-fields-wrapper {
+ display: flex;
+ flex-wrap: wrap; }
+ .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > textarea, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > .elementor-select-wrapper, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group .elementor-field-subgroup {
+ flex-basis: 100%;
+ max-width: 100%; }
+ .elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group .elementor-select-wrapper {
+ flex-grow: 1; }
+
+.elementor-field-group {
+ flex-wrap: wrap;
+ align-items: center; }
+ .elementor-field-group.elementor-field-type-submit {
+ align-items: flex-end; }
+ .elementor-field-group .elementor-field-textual {
+ width: 100%;
+ max-width: 100%;
+ border: 1px solid #818a91;
+ background-color: transparent;
+ color: #373a3c;
+ vertical-align: middle;
+ flex-grow: 1; }
+ .elementor-field-group .elementor-field-textual:focus {
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset;
+ outline: 0; }
+ .elementor-field-group .elementor-field-textual::-webkit-input-placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-field-textual:-ms-input-placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-field-textual::-moz-placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-field-textual:-moz-placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-field-textual::placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-select-wrapper {
+ display: flex;
+ position: relative;
+ width: 100%; }
+ .elementor-field-group .elementor-select-wrapper select {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ color: inherit;
+ font-size: inherit;
+ font-family: inherit;
+ font-weight: inherit;
+ font-style: inherit;
+ text-transform: inherit;
+ letter-spacing: inherit;
+ line-height: inherit;
+ flex-basis: 100%;
+ padding-left: 20px; }
+ .elementor-field-group .elementor-select-wrapper:before {
+ content: '\f0d7';
+ font-family: 'FontAwesome';
+ font-size: 15px;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ left: 10px;
+ pointer-events: none; }
+ .elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before {
+ content: ''; }
+
+.elementor-field-subgroup {
+ display: flex;
+ flex-wrap: wrap; }
+ .elementor-field-subgroup .elementor-field-option label {
+ display: inline-block; }
+ .elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option {
+ padding-left: 10px; }
+ .elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option {
+ flex-basis: 100%; }
+
+.elementor-field-label {
+ cursor: pointer; }
+ .elementor-mark-required .elementor-field-label:after {
+ content: '*';
+ color: red;
+ padding-right: 0.2em; }
+
+.elementor-field-textual {
+ line-height: 1.4; }
+ .elementor-field-textual.elementor-size-xs {
+ font-size: 13px;
+ min-height: 33px;
+ padding: 4px 12px;
+ border-radius: 2px; }
+ .elementor-field-textual.elementor-size-sm {
+ font-size: 15px;
+ min-height: 40px;
+ padding: 5px 14px;
+ border-radius: 3px; }
+ .elementor-field-textual.elementor-size-md {
+ font-size: 16px;
+ min-height: 47px;
+ padding: 6px 16px;
+ border-radius: 4px; }
+ .elementor-field-textual.elementor-size-lg {
+ font-size: 18px;
+ min-height: 59px;
+ padding: 7px 20px;
+ border-radius: 5px; }
+ .elementor-field-textual.elementor-size-xl {
+ font-size: 20px;
+ min-height: 72px;
+ padding: 8px 24px;
+ border-radius: 6px; }
+
+.elementor-button-align-center .elementor-field-type-submit {
+ justify-content: center; }
+
+.elementor-button-align-stretch .elementor-field-type-submit button {
+ flex-basis: 100%; }
+
+.elementor-button-align-start .elementor-field-type-submit {
+ justify-content: flex-end; }
+
+.elementor-button-align-end .elementor-field-type-submit {
+ justify-content: flex-start; }
+
+@media screen and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-tablet-button-align-center .elementor-field-type-submit {
+ justify-content: center; }
+ .elementor-tablet-button-align-stretch .elementor-field-type-submit button {
+ flex-basis: 100%; }
+ .elementor-tablet-button-align-start .elementor-field-type-submit {
+ justify-content: flex-end; }
+ .elementor-tablet-button-align-end .elementor-field-type-submit {
+ justify-content: flex-start; } }
+
+@media screen and (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-mobile-button-align-center .elementor-field-type-submit {
+ justify-content: center; }
+ .elementor-mobile-button-align-stretch .elementor-field-type-submit button {
+ flex-basis: 100%; }
+ .elementor-mobile-button-align-start .elementor-field-type-submit {
+ justify-content: flex-end; }
+ .elementor-mobile-button-align-end .elementor-field-type-submit {
+ justify-content: flex-start; } }
+
+.elementor-error .elementor-field {
+ border-color: #d9534f; }
+
+.elementor-error .help-inline {
+ color: #d9534f;
+ font-size: 0.9em; }
+
+.elementor-message {
+ margin: 10px 0;
+ font-size: 1em;
+ line-height: 1; }
+ .elementor-message:before {
+ content: "\f00c";
+ display: inline-block;
+ font-family: fontawesome;
+ font-weight: normal;
+ font-style: normal;
+ vertical-align: middle;
+ margin-right: 5px; }
+ .elementor-message.elementor-message-danger {
+ color: #d9534f; }
+ .elementor-message.elementor-message-danger:before {
+ content: "\f00d"; }
+ .elementor-message.form-message-success {
+ color: #5cb85c; }
+
+.elementor-form .elementor-button {
+ padding-top: 0;
+ padding-bottom: 0;
+ border: 0 none; }
+ .elementor-form .elementor-button > span {
+ display: flex;
+ justify-content: center; }
+ .elementor-form .elementor-button .elementor-align-icon-right {
+ order: 0; }
+ .elementor-form .elementor-button .elementor-align-icon-left {
+ order: 2; }
+ .elementor-form .elementor-button.elementor-size-xs {
+ min-height: 33px; }
+ .elementor-form .elementor-button.elementor-size-sm {
+ min-height: 40px; }
+ .elementor-form .elementor-button.elementor-size-md {
+ min-height: 47px; }
+ .elementor-form .elementor-button.elementor-size-lg {
+ min-height: 59px; }
+ .elementor-form .elementor-button.elementor-size-xl {
+ min-height: 72px; }
+
+.elementor-element .elementor-widget-container {
+ transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s; }
+
+.elementor-accordion {
+ text-align: right; }
+ .elementor-accordion .elementor-accordion-item {
+ border: 1px solid #D4D4D4; }
+ .elementor-accordion .elementor-accordion-item + .elementor-accordion-item {
+ border-top: none; }
+ .elementor-accordion .elementor-tab-title {
+ margin: 0;
+ padding: 15px 20px;
+ font-weight: bold;
+ line-height: 1;
+ cursor: pointer;
+ outline: none; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon {
+ display: inline-block;
+ width: 1.5em; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right {
+ float: right;
+ text-align: right; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left {
+ float: left;
+ text-align: left; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed {
+ display: block; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened {
+ display: none; }
+ .elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed {
+ display: none; }
+ .elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened {
+ display: block; }
+ .elementor-accordion .elementor-tab-content {
+ display: none;
+ padding: 15px 20px;
+ border-top: 1px solid #D4D4D4; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-accordion .elementor-tab-title {
+ padding: 12px 15px; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon {
+ width: 1.2em; }
+ .elementor-accordion .elementor-tab-content {
+ padding: 7px 15px; } }
+
+.elementor-alert {
+ padding: 15px;
+ border-left: 5px solid transparent;
+ position: relative;
+ text-align: right; }
+ .elementor-alert .elementor-alert-title {
+ display: block;
+ font-weight: bold; }
+ .elementor-alert .elementor-alert-description {
+ font-size: 13px; }
+ .elementor-alert button.elementor-alert-dismiss {
+ position: absolute;
+ left: 10px;
+ top: 10px;
+ padding: 3px;
+ font-size: 20px;
+ line-height: 1;
+ background: transparent;
+ color: inherit;
+ border: none;
+ cursor: pointer; }
+ .elementor-alert.elementor-alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bcdff1; }
+ .elementor-alert.elementor-alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #cae6be; }
+ .elementor-alert.elementor-alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #f9f0c3; }
+ .elementor-alert.elementor-alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #e8c4c4; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-alert {
+ padding: 10px; }
+ .elementor-alert button.elementor-alert-dismiss {
+ right: 7px;
+ top: 7px; } }
+
+.elementor-button {
+ display: inline-block;
+ line-height: 1;
+ background-color: #818a91;
+ color: #fff;
+ text-align: center;
+ transition: all 0.5s; }
+ .elementor-button:hover, .elementor-button:focus, .elementor-button:visited {
+ color: #fff; }
+ .elementor-button.elementor-size-xs {
+ font-size: 13px;
+ padding: 10px 20px;
+ border-radius: 2px; }
+ .elementor-button.elementor-size-sm {
+ font-size: 15px;
+ padding: 12px 24px;
+ border-radius: 3px; }
+ .elementor-button.elementor-size-md {
+ font-size: 16px;
+ padding: 15px 30px;
+ border-radius: 4px; }
+ .elementor-button.elementor-size-lg {
+ font-size: 18px;
+ padding: 20px 40px;
+ border-radius: 5px; }
+ .elementor-button.elementor-size-xl {
+ font-size: 20px;
+ padding: 25px 50px;
+ border-radius: 6px; }
+ .elementor-button .elementor-align-icon-right {
+ float: right;
+ margin-left: 5px; }
+ .elementor-button .elementor-align-icon-left {
+ float: left;
+ margin-right: 5px; }
+ .elementor-button .elementor-button-text {
+ display: inline-block; }
+ .elementor-button span {
+ text-decoration: inherit; }
+
+.elementor-element.elementor-button-info .elementor-button {
+ background-color: #5bc0de; }
+
+.elementor-element.elementor-button-success .elementor-button {
+ background-color: #5cb85c; }
+
+.elementor-element.elementor-button-warning .elementor-button {
+ background-color: #f0ad4e; }
+
+.elementor-element.elementor-button-danger .elementor-button {
+ background-color: #d9534f; }
+
+.elementor-widget-button .elementor-button .elementor-button-info {
+ background-color: #5bc0de; }
+
+.elementor-widget-button .elementor-button .elementor-button-success {
+ background-color: #5cb85c; }
+
+.elementor-widget-button .elementor-button .elementor-button-warning {
+ background-color: #f0ad4e; }
+
+.elementor-widget-button .elementor-button .elementor-button-danger {
+ background-color: #d9534f; }
+
+.elementor-counter .elementor-counter-number-wrapper {
+ display: flex;
+ font-size: 69px;
+ font-weight: 600;
+ color: #222222;
+ line-height: 1; }
+
+.elementor-counter .elementor-counter-number-prefix, .elementor-counter .elementor-counter-number-suffix {
+ flex-grow: 1;
+ white-space: pre-wrap; }
+
+.elementor-counter .elementor-counter-number-prefix {
+ text-align: left; }
+
+.elementor-counter .elementor-counter-number-suffix {
+ text-align: right; }
+
+.elementor-counter .elementor-counter-title {
+ text-align: center;
+ font-size: 19px;
+ font-weight: 400;
+ color: #666666;
+ line-height: 2.5; }
+
+.elementor-widget-divider .elementor-divider {
+ line-height: 0;
+ font-size: 0; }
+
+.elementor-widget-divider .elementor-divider-separator {
+ display: inline-block; }
+
+.elementor-image-gallery .gallery-item {
+ display: inline-block;
+ text-align: center;
+ vertical-align: top;
+ width: 100%;
+ max-width: 100%;
+ margin: 0 auto; }
+ .elementor-image-gallery .gallery-item img {
+ margin: 0 auto; }
+ .elementor-image-gallery .gallery-item .gallery-caption {
+ margin: 0; }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-image-gallery .gallery-columns-2 .gallery-item {
+ max-width: 50%; }
+ .elementor-image-gallery .gallery-columns-3 .gallery-item {
+ max-width: 33.33%; }
+ .elementor-image-gallery .gallery-columns-4 .gallery-item {
+ max-width: 25%; }
+ .elementor-image-gallery .gallery-columns-5 .gallery-item {
+ max-width: 20%; }
+ .elementor-image-gallery .gallery-columns-6 .gallery-item {
+ max-width: 16.666%; }
+ .elementor-image-gallery .gallery-columns-7 .gallery-item {
+ max-width: 14.28%; }
+ .elementor-image-gallery .gallery-columns-8 .gallery-item {
+ max-width: 12.5%; }
+ .elementor-image-gallery .gallery-columns-9 .gallery-item {
+ max-width: 11.11%; }
+ .elementor-image-gallery .gallery-columns-10 .gallery-item {
+ max-width: 10%; } }
+
+@media (min-width: 480px) and (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-image-gallery .gallery.gallery-columns-2 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-3 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-4 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-5 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-6 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-7 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-8 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-9 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-10 .gallery-item {
+ max-width: 50%; } }
+
+@media (max-width: 479px) {
+ .elementor-image-gallery .gallery.gallery-columns-2 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-3 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-4 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-5 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-6 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-7 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-8 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-9 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-10 .gallery-item {
+ max-width: 100%; } }
+
+.elementor-widget-google_maps iframe {
+ height: 300px; }
+
+.elementor-widget-heading .elementor-heading-title {
+ padding: 0;
+ margin: 0;
+ line-height: 1; }
+ .elementor-widget-heading .elementor-heading-title > a {
+ color: inherit;
+ font-size: inherit; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-small {
+ font-size: 15px; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-medium {
+ font-size: 19px; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-large {
+ font-size: 29px; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-xl {
+ font-size: 39px; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-xxl {
+ font-size: 59px; }
+
+.elementor-icon {
+ display: inline-block;
+ line-height: 1;
+ transition: all 0.5s;
+ color: #818a91;
+ font-size: 50px;
+ text-align: center; }
+ .elementor-icon:hover {
+ color: #818a91; }
+ .elementor-icon i {
+ width: 1em;
+ height: 1em;
+ position: relative;
+ display: block; }
+ .elementor-icon i:before {
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%); }
+
+.elementor-view-stacked .elementor-icon {
+ padding: .5em;
+ background-color: #818a91;
+ color: #fff; }
+
+.elementor-view-framed .elementor-icon {
+ padding: .5em;
+ color: #818a91;
+ border: 3px solid #818a91;
+ background-color: transparent; }
+
+.elementor-shape-circle .elementor-icon {
+ border-radius: 50%; }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper {
+ display: flex; }
+ .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon {
+ flex: 0 0 auto; }
+ .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper {
+ text-align: left;
+ flex-direction: row; }
+ .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper {
+ text-align: right;
+ flex-direction: row-reverse; }
+ .elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img {
+ margin: auto; }
+ .elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper {
+ align-items: flex-start; }
+ .elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper {
+ align-items: center; }
+ .elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper {
+ align-items: flex-end; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-widget-icon-box .elementor-icon-box-icon {
+ margin-left: auto !important;
+ margin-right: auto !important;
+ margin-bottom: 15px; } }
+
+.elementor-widget-icon-box .elementor-icon-box-wrapper {
+ text-align: center; }
+
+.elementor-widget-icon-box .elementor-icon-box-title a {
+ color: inherit; }
+
+.elementor-widget-icon-box .elementor-icon-box-description {
+ margin: 0; }
+
+.elementor-widget .elementor-icon-list-items.elementor-inline-items {
+ margin-right: -8px;
+ margin-left: -8px; }
+ .elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item {
+ margin-right: 8px;
+ margin-left: 8px; }
+ .elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after {
+ width: auto;
+ left: auto;
+ right: auto;
+ position: relative;
+ height: 100%;
+ top: 50%;
+ transform: translateY(-50%);
+ border-top: 0;
+ border-bottom: 0;
+ border-right: 0;
+ border-left-width: 1px;
+ border-style: solid;
+ left: -8px; }
+
+.elementor-widget .elementor-icon-list-items {
+ list-style-type: none;
+ margin: 0;
+ padding: 0; }
+
+.elementor-widget .elementor-icon-list-item {
+ margin: 0;
+ padding: 0;
+ position: relative; }
+ .elementor-widget .elementor-icon-list-item:after {
+ position: absolute;
+ bottom: 0;
+ width: 100%; }
+ .elementor-widget .elementor-icon-list-item, .elementor-widget .elementor-icon-list-item a {
+ display: flex;
+ align-items: flex-start; }
+ .elementor-widget .elementor-icon-list-item a {
+ width: 100%; }
+
+.elementor-widget .elementor-icon-list-icon + .elementor-icon-list-text {
+ align-self: center;
+ padding-right: 5px; }
+
+.elementor-widget .elementor-icon-list-icon {
+ text-align: center; }
+
+.elementor-widget.elementor-align-center .elementor-icon-list-item, .elementor-widget.elementor-align-center .elementor-icon-list-item a {
+ justify-content: center; }
+
+.elementor-widget.elementor-align-center .elementor-icon-list-item:after {
+ margin: auto; }
+
+.elementor-widget.elementor-align-center .elementor-inline-items {
+ justify-content: center; }
+
+.elementor-widget.elementor-align-left .elementor-icon-list-item, .elementor-widget.elementor-align-left .elementor-icon-list-item a {
+ justify-content: flex-end;
+ text-align: left; }
+
+.elementor-widget.elementor-align-left .elementor-inline-items {
+ justify-content: flex-end; }
+
+.elementor-widget.elementor-align-right .elementor-icon-list-item, .elementor-widget.elementor-align-right .elementor-icon-list-item a {
+ justify-content: flex-start;
+ text-align: right; }
+
+.elementor-widget.elementor-align-right .elementor-icon-list-items {
+ justify-content: flex-start; }
+
+.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after {
+ right: 0; }
+
+.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after {
+ left: 0; }
+
+@media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-widget.elementor-tablet-align-center .elementor-icon-list-items {
+ justify-content: center; }
+ .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a {
+ justify-content: center; }
+ .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after {
+ margin: auto; }
+ .elementor-widget.elementor-tablet-align-left .elementor-icon-list-items {
+ justify-content: flex-end; }
+ .elementor-widget.elementor-tablet-align-left .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a {
+ justify-content: flex-end;
+ text-align: left; }
+ .elementor-widget.elementor-tablet-align-right .elementor-icon-list-items {
+ justify-content: flex-start; }
+ .elementor-widget.elementor-tablet-align-right .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a {
+ justify-content: flex-start;
+ text-align: right; }
+ .elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after {
+ right: 0; }
+ .elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after {
+ left: 0; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-widget.elementor-mobile-align-center .elementor-icon-list-items {
+ justify-content: center; }
+ .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a {
+ justify-content: center; }
+ .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after {
+ margin: auto; }
+ .elementor-widget.elementor-mobile-align-left .elementor-icon-list-items {
+ justify-content: flex-end; }
+ .elementor-widget.elementor-mobile-align-left .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a {
+ justify-content: flex-end;
+ text-align: left; }
+ .elementor-widget.elementor-mobile-align-right .elementor-icon-list-items {
+ justify-content: flex-start; }
+ .elementor-widget.elementor-mobile-align-right .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a {
+ justify-content: flex-start;
+ text-align: right; }
+ .elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after {
+ right: 0; }
+ .elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after {
+ left: 0; } }
+
+.elementor-widget-image {
+ text-align: center; }
+ .elementor-widget-image .elementor-image > a,
+ .elementor-widget-image .elementor-image figure > a {
+ display: block; }
+ .elementor-widget-image .elementor-image img {
+ vertical-align: middle;
+ display: inline-block; }
+ .elementor-widget-image .elementor-image.elementor-image-shape-circle {
+ border-radius: 50%; }
+
+.elementor-widget-image-box .elementor-image-box-content {
+ width: 100%; }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper, .elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper {
+ display: flex; }
+ .elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper {
+ text-align: left;
+ flex-direction: row; }
+ .elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper {
+ text-align: right;
+ flex-direction: row-reverse; }
+ .elementor-widget-image-box.elementor-position-top .elementor-image-box-img {
+ margin: auto; }
+ .elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper {
+ align-items: flex-start; }
+ .elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper {
+ align-items: center; }
+ .elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper {
+ align-items: flex-end; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-widget-image-box .elementor-image-box-img {
+ margin-left: auto !important;
+ margin-right: auto !important;
+ margin-bottom: 15px; } }
+
+.elementor-widget-image-box .elementor-image-box-img {
+ display: inline-block; }
+
+.elementor-widget-image-box .elementor-image-box-title a {
+ color: inherit; }
+
+.elementor-widget-image-box .elementor-image-box-wrapper {
+ text-align: center; }
+
+.elementor-widget-image-box .elementor-image-box-description {
+ margin: 0; }
+
+.elementor-image-carousel-wrapper .slick-image-stretch .slick-slide .slick-slide-image {
+ width: 100%; }
+
+.elementor-image-gallery figure img {
+ display: block; }
+
+.elementor-image-gallery figure figcaption {
+ width: 100%; }
+
+.gallery-spacing-custom .elementor-image-gallery .gallery-icon {
+ padding: 0; }
+
+.swiper-container .swiper-slide figure {
+ line-height: 0; }
+ .swiper-container .swiper-slide figure img {
+ width: 100%; }
+
+body.elementor-page .elementor-widget-menu-anchor {
+ margin-bottom: 0; }
+
+.elementor-widget-progress {
+ text-align: right; }
+
+.elementor-progress-wrapper {
+ position: relative;
+ background-color: #eeeeee;
+ color: #ffffff;
+ height: 30px;
+ line-height: 30px;
+ border-radius: 2px; }
+
+.elementor-progress-bar {
+ display: flex;
+ background-color: #818a91;
+ width: 0;
+ font-size: 11px;
+ border-radius: 2px;
+ transition: width 1s ease-in-out; }
+
+.elementor-progress-text {
+ flex-grow: 1;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ padding-right: 15px; }
+
+.elementor-progress-percentage {
+ padding-left: 15px; }
+
+.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar {
+ background-color: #5bc0de; }
+
+.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar {
+ background-color: #5cb85c; }
+
+.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar {
+ background-color: #f0ad4e; }
+
+.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar {
+ background-color: #d9534f; }
+
+.elementor-progress .elementor-title {
+ display: block; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-progress-wrapper {
+ height: 25px;
+ line-height: 25px; }
+ .elementor-progress-text {
+ padding-right: 10px; } }
+
+.elementor-social-icons-wrapper {
+ font-size: 0; }
+
+.elementor-social-icon {
+ font-size: 25px;
+ text-align: center;
+ padding: 0.5em;
+ margin-left: 5px;
+ cursor: pointer; }
+ .elementor-social-icon i {
+ color: white; }
+ .elementor-social-icon:last-child {
+ margin: 0; }
+ .elementor-social-icon:hover {
+ opacity: .9;
+ color: white; }
+ .elementor-social-icon-android {
+ background-color: #A4C639; }
+ .elementor-social-icon-apple {
+ background-color: #999999; }
+ .elementor-social-icon-behance {
+ background-color: #1769ff; }
+ .elementor-social-icon-bitbucket {
+ background-color: #205081; }
+ .elementor-social-icon-codepen {
+ background-color: #000000; }
+ .elementor-social-icon-delicious {
+ background-color: #3399ff; }
+ .elementor-social-icon-digg {
+ background-color: #005be2; }
+ .elementor-social-icon-dribbble {
+ background-color: #ea4c89; }
+ .elementor-social-icon-envelope {
+ background-color: #ea4335; }
+ .elementor-social-icon-facebook {
+ background-color: #3b5998; }
+ .elementor-social-icon-flickr {
+ background-color: #0063dc; }
+ .elementor-social-icon-foursquare {
+ background-color: #2d5be3; }
+ .elementor-social-icon-github {
+ background-color: #333333; }
+ .elementor-social-icon-google-plus {
+ background-color: #dd4b39; }
+ .elementor-social-icon-houzz {
+ background-color: #7ac142; }
+ .elementor-social-icon-instagram {
+ background-color: #262626; }
+ .elementor-social-icon-jsfiddle {
+ background-color: #487AA2; }
+ .elementor-social-icon-linkedin {
+ background-color: #0077b5; }
+ .elementor-social-icon-medium {
+ background-color: #00ab6b; }
+ .elementor-social-icon-meetup {
+ background-color: #ec1c40; }
+ .elementor-social-icon-mixcloud {
+ background-color: #273a4b; }
+ .elementor-social-icon-odnoklassniki {
+ background-color: #F4731C; }
+ .elementor-social-icon-pinterest {
+ background-color: #bd081c; }
+ .elementor-social-icon-product-hunt {
+ background-color: #da552f; }
+ .elementor-social-icon-reddit {
+ background-color: #ff4500; }
+ .elementor-social-icon-rss {
+ background-color: #f26522; }
+ .elementor-social-icon-shopping-cart {
+ background-color: #4CAF50; }
+ .elementor-social-icon-skype {
+ background-color: #00AFF0; }
+ .elementor-social-icon-slideshare {
+ background-color: #0077b5; }
+ .elementor-social-icon-snapchat {
+ background-color: #fffc00; }
+ .elementor-social-icon-soundcloud {
+ background-color: #ff8800; }
+ .elementor-social-icon-spotify {
+ background-color: #2ebd59; }
+ .elementor-social-icon-stack-overflow {
+ background-color: #fe7a15; }
+ .elementor-social-icon-steam {
+ background-color: #00adee; }
+ .elementor-social-icon-stumbleupon {
+ background-color: #EB4924; }
+ .elementor-social-icon-telegram {
+ background-color: #2CA5E0; }
+ .elementor-social-icon-thumb-tack {
+ background-color: #1aa1d8; }
+ .elementor-social-icon-tripadvisor {
+ background-color: #589442; }
+ .elementor-social-icon-tumblr {
+ background-color: #35465c; }
+ .elementor-social-icon-twitch {
+ background-color: #6441A5; }
+ .elementor-social-icon-twitter {
+ background-color: #1DA1F2; }
+ .elementor-social-icon-vimeo {
+ background-color: #1ab7ea; }
+ .elementor-social-icon-vk {
+ background-color: #45668e; }
+ .elementor-social-icon-weibo {
+ background-color: #df2029; }
+ .elementor-social-icon-weixin {
+ background-color: #7bb32e; }
+ .elementor-social-icon-whatsapp {
+ background-color: #25d366; }
+ .elementor-social-icon-wordpress {
+ background-color: #21759b; }
+ .elementor-social-icon-xing {
+ background-color: #026466; }
+ .elementor-social-icon-yelp {
+ background-color: #af0606; }
+ .elementor-social-icon-youtube {
+ background-color: #cd201f; }
+ .elementor-social-icon-500px {
+ background-color: #0099e5; }
+
+.elementor-shape-rounded .elementor-icon.elementor-social-icon {
+ border-radius: 10%; }
+
+.elementor-shape-circle .elementor-icon.elementor-social-icon {
+ border-radius: 50%; }
+
+.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper {
+ width: 25%;
+ flex-shrink: 0; }
+
+.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active {
+ border-left-style: none; }
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after {
+ height: 999em;
+ width: 0;
+ left: 0;
+ border-left-style: solid; }
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before {
+ top: 0;
+ transform: translateY(-100%); }
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after {
+ top: 100%; }
+
+.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title {
+ display: table-cell; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active {
+ border-bottom-style: none; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after {
+ bottom: 0;
+ height: 0;
+ width: 999em;
+ border-bottom-style: solid; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before {
+ right: 100%; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after {
+ left: 100%; }
+
+.elementor-widget-tabs .elementor-tab-title,
+.elementor-widget-tabs .elementor-tab-title:before,
+.elementor-widget-tabs .elementor-tab-title:after,
+.elementor-widget-tabs .elementor-tab-content,
+.elementor-widget-tabs .elementor-tabs-content-wrapper {
+ border: 1px none #D4D4D4; }
+
+.elementor-widget-tabs .elementor-tabs {
+ text-align: right; }
+
+.elementor-widget-tabs .elementor-tabs-wrapper {
+ overflow: hidden; }
+
+.elementor-widget-tabs .elementor-tab-title {
+ cursor: pointer;
+ outline: none; }
+
+.elementor-widget-tabs .elementor-tab-desktop-title {
+ position: relative;
+ padding: 20px 25px;
+ font-weight: bold;
+ line-height: 1;
+ border: solid transparent; }
+ .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active {
+ border-color: #D4D4D4; }
+ .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after {
+ display: block;
+ content: '';
+ position: absolute; }
+
+.elementor-widget-tabs .elementor-tab-mobile-title {
+ padding: 10px 10px;
+ cursor: pointer; }
+
+.elementor-widget-tabs .elementor-tab-content {
+ padding: 20px;
+ display: none; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-tabs .elementor-tab-title,
+ .elementor-tabs .elementor-tab-content {
+ border-style: solid;
+ border-bottom-style: none; }
+ .elementor-tabs .elementor-tabs-wrapper {
+ display: none; }
+ .elementor-tabs .elementor-tabs-content-wrapper {
+ border-bottom-style: solid; }
+ .elementor-tabs .elementor-tab-content {
+ padding: 10px; } }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs {
+ display: flex; }
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper {
+ flex-grow: 1;
+ border-style: solid;
+ border-right-style: none; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content {
+ border-style: solid;
+ border-top-style: none; }
+ .elementor-tabs .elementor-tab-mobile-title {
+ display: none; } }
+
+.elementor-testimonial-wrapper {
+ overflow: hidden;
+ text-align: center; }
+ .elementor-testimonial-wrapper .elementor-testimonial-content {
+ font-size: 1.3em;
+ margin-bottom: 20px; }
+ .elementor-testimonial-wrapper .elementor-testimonial-name {
+ line-height: 1.5;
+ color: inherit; }
+ .elementor-testimonial-wrapper .elementor-testimonial-job {
+ font-size: 0.85em;
+ color: inherit; }
+ .elementor-testimonial-wrapper.elementor-testimonial-text-align-left {
+ text-align: left; }
+ .elementor-testimonial-wrapper.elementor-testimonial-text-align-right {
+ text-align: right; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta {
+ width: 100%;
+ line-height: 1; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta-inner {
+ display: inline-block; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,
+ .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image {
+ display: table-cell;
+ vertical-align: middle; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img {
+ width: 60px;
+ height: 60px;
+ border-radius: 50%;
+ object-fit: cover;
+ max-width: none; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image {
+ padding-left: 15px; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details {
+ text-align: right; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image {
+ display: block; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image {
+ margin-bottom: 20px; }
+
+.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap {
+ background-color: #818a91;
+ color: #fff; }
+
+.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap {
+ color: #818a91;
+ border: 3px solid;
+ background-color: transparent; }
+
+.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap {
+ margin-top: 8px; }
+ .elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter {
+ width: 1em;
+ height: 1em; }
+
+.elementor-widget-text-editor .elementor-drop-cap {
+ float: right;
+ text-align: center;
+ line-height: 1;
+ font-size: 50px; }
+ .elementor-widget-text-editor .elementor-drop-cap-letter {
+ display: inline-block; }
+
+.elementor-toggle {
+ text-align: right; }
+ .elementor-toggle .elementor-tab-title {
+ font-weight: bold;
+ line-height: 1;
+ margin: 0;
+ padding: 15px;
+ border-bottom: 1px solid #D4D4D4;
+ cursor: pointer;
+ outline: none; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon {
+ display: inline-block;
+ width: 1em; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right {
+ float: right;
+ text-align: right; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left {
+ float: left;
+ text-align: left; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed {
+ display: block; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened {
+ display: none; }
+ .elementor-toggle .elementor-tab-title.elementor-active {
+ border-bottom: none; }
+ .elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed {
+ display: none; }
+ .elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened {
+ display: block; }
+ .elementor-toggle .elementor-tab-content {
+ padding: 15px;
+ border-bottom: 1px solid #D4D4D4;
+ display: none; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-toggle .elementor-tab-title {
+ padding: 12px; }
+ .elementor-toggle .elementor-tab-content {
+ padding: 12px 10px; } }
+
+.elementor-widget-video .elementor-widget-container {
+ overflow: hidden; }
+
+.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-size: cover;
+ background-position: 50%; }
+
+.elementor-widget-video .elementor-custom-embed-image-overlay {
+ cursor: pointer;
+ text-align: center; }
+ .elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i {
+ opacity: 1; }
+ .elementor-widget-video .elementor-custom-embed-image-overlay img {
+ display: block;
+ width: 100%; }
+
+.slick-slider {
+ position: relative;
+ display: block;
+ box-sizing: border-box;
+ -webkit-touch-callout: none;
+ user-select: none;
+ touch-action: pan-y;
+ -webkit-tap-highlight-color: transparent; }
+
+.slick-list {
+ position: relative;
+ overflow: hidden;
+ display: block;
+ margin: 0;
+ padding: 0; }
+ .slick-list:focus {
+ outline: none; }
+ .slick-list.dragging {
+ cursor: pointer; }
+
+.slick-slider .slick-track,
+.slick-slider .slick-list {
+ transform: translate3d(0, 0, 0); }
+
+.slick-track {
+ position: relative;
+ left: 0;
+ top: 0;
+ display: block; }
+ .slick-track:before, .slick-track:after {
+ content: "";
+ display: table; }
+ .slick-track:after {
+ clear: both; }
+ .slick-loading .slick-track {
+ visibility: hidden; }
+
+.slick-slide {
+ float: left;
+ height: 100%;
+ min-height: 1px;
+ display: none; }
+ .elementor-slick-slider[dir="rtl"] .slick-slide {
+ float: right; }
+ .slick-slide img {
+ display: block; }
+ .slick-slide.slick-loading img {
+ display: none; }
+ .slick-slide.dragging img {
+ pointer-events: none; }
+ .slick-initialized .slick-slide {
+ display: block; }
+ .slick-loading .slick-slide {
+ visibility: hidden; }
+ .slick-vertical .slick-slide {
+ display: block;
+ height: auto;
+ border: 1px solid transparent; }
+
+.slick-arrow.slick-hidden {
+ display: none; }
+
+.elementor-slick-slider .slick-loading .slick-list {
+ background: #fff; }
+ .elementor-slick-slider .slick-loading .slick-list:after {
+ content: '\f1ce';
+ font-family: FontAwesome;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ animation: fa-spin 2s infinite linear;
+ font-size: 25px;
+ color: #a4afb7; }
+
+.elementor-slick-slider .slick-prev,
+.elementor-slick-slider .slick-next {
+ font-size: 0;
+ line-height: 0;
+ position: absolute;
+ top: 50%;
+ display: block;
+ width: 20px;
+ padding: 0;
+ transform: translate(0, -50%);
+ cursor: pointer;
+ color: transparent;
+ border: none;
+ outline: none;
+ background: transparent; }
+ .elementor-slick-slider .slick-prev:hover, .elementor-slick-slider .slick-prev:focus,
+ .elementor-slick-slider .slick-next:hover,
+ .elementor-slick-slider .slick-next:focus {
+ color: transparent;
+ outline: none;
+ background: transparent; }
+ .elementor-slick-slider .slick-prev:hover:before, .elementor-slick-slider .slick-prev:focus:before,
+ .elementor-slick-slider .slick-next:hover:before,
+ .elementor-slick-slider .slick-next:focus:before {
+ opacity: 1; }
+ .elementor-slick-slider .slick-prev.slick-disabled:before,
+ .elementor-slick-slider .slick-next.slick-disabled:before {
+ opacity: .25; }
+ .elementor-slick-slider .slick-prev:before,
+ .elementor-slick-slider .slick-next:before {
+ font-family: 'FontAwesome';
+ font-size: 35px;
+ line-height: 1;
+ opacity: .75;
+ color: white;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale; }
+
+.elementor-slick-slider .slick-prev {
+ left: -25px; }
+ [dir="rtl"] .elementor-slick-slider .slick-prev {
+ left: auto;
+ right: -25px; }
+ .elementor-slick-slider .slick-prev:before {
+ content: '\f104'; }
+ [dir="rtl"] .elementor-slick-slider .slick-prev:before {
+ content: '\f105'; }
+
+.elementor-slick-slider .slick-next {
+ right: -25px; }
+ [dir="rtl"] .elementor-slick-slider .slick-next {
+ left: -25px;
+ right: auto; }
+ .elementor-slick-slider .slick-next:before {
+ content: '\f105'; }
+ [dir="rtl"] .elementor-slick-slider .slick-next:before {
+ content: '\f104'; }
+
+.elementor-slick-slider .slick-dotted.slick-slider {
+ margin-bottom: 30px; }
+
+.elementor-slick-slider ul.slick-dots {
+ position: absolute;
+ bottom: -25px;
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+ line-height: 1; }
+ .elementor-slick-slider ul.slick-dots li {
+ position: relative;
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ margin: 0;
+ padding: 0;
+ cursor: pointer; }
+ .elementor-slick-slider ul.slick-dots li button {
+ font-size: 0;
+ line-height: 0;
+ display: block;
+ width: 20px;
+ height: 20px;
+ padding: 5px;
+ cursor: pointer;
+ color: transparent;
+ border: 0;
+ outline: none;
+ background: transparent; }
+ .elementor-slick-slider ul.slick-dots li button:hover, .elementor-slick-slider ul.slick-dots li button:focus {
+ outline: none; }
+ .elementor-slick-slider ul.slick-dots li button:hover:before, .elementor-slick-slider ul.slick-dots li button:focus:before {
+ opacity: 1; }
+ .elementor-slick-slider ul.slick-dots li button:before {
+ font-family: 'FontAwesome';
+ font-size: 6px;
+ line-height: 20px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ content: '\f111';
+ text-align: center;
+ opacity: .25;
+ color: black;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale; }
+ .elementor-slick-slider ul.slick-dots li.slick-active button:before {
+ opacity: .75;
+ color: black; }
+
+.elementor-slick-slider .slick-arrows-inside .slick-prev {
+ left: 20px; }
+ [dir="rtl"] .elementor-slick-slider .slick-arrows-inside .slick-prev {
+ left: auto;
+ right: 20px; }
+
+.elementor-slick-slider .slick-arrows-inside .slick-next {
+ right: 20px; }
+ [dir="rtl"] .elementor-slick-slider .slick-arrows-inside .slick-next {
+ left: 20px;
+ right: auto; }
+
+.elementor-slick-slider .slick-dots-inside .slick-dots {
+ bottom: 5px; }
+
+.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider {
+ margin-bottom: 0; }
+
+.elementor-slick-slider .slick-slider .slick-prev,
+.elementor-slick-slider .slick-slider .slick-next {
+ z-index: 1; }
+
+.elementor-slick-slider .slick-slide img {
+ margin: auto; }
+
+/**
+ * Swiper 3.4.2
+ * Customized by Elementor team
+ */
+.swiper-container {
+ margin-left: auto;
+ margin-right: auto;
+ position: relative;
+ overflow: hidden;
+ /* Fix of Webkit flickering */
+ z-index: 1; }
+
+.swiper-container-no-flexbox .swiper-slide {
+ float: left; }
+
+.swiper-container-vertical > .swiper-wrapper {
+ flex-direction: column; }
+
+.swiper-wrapper {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ display: flex;
+ transition-property: transform;
+ box-sizing: content-box; }
+
+.swiper-container-android .swiper-slide, .swiper-wrapper {
+ transform: translate3d(0px, 0, 0); }
+
+.swiper-container-multirow > .swiper-wrapper {
+ flex-wrap: wrap; }
+
+.swiper-container-free-mode > .swiper-wrapper {
+ transition-timing-function: ease-out;
+ margin: 0 auto; }
+
+.swiper-slide {
+ flex-shrink: 0;
+ width: 100%;
+ height: 100%;
+ position: relative; }
+
+/* Auto Height */
+.swiper-container-autoheight {
+ height: auto; }
+ .swiper-container-autoheight .swiper-slide {
+ height: auto; }
+ .swiper-container-autoheight .swiper-wrapper {
+ align-items: flex-start;
+ transition-property: transform, height; }
+
+/* a11y */
+.swiper-container .swiper-notification {
+ position: absolute;
+ left: 0;
+ top: 0;
+ pointer-events: none;
+ opacity: 0;
+ z-index: -1000; }
+
+/* IE10 Windows Phone 8 Fixes */
+.swiper-wp8-horizontal {
+ touch-action: pan-y; }
+
+.swiper-wp8-vertical {
+ touch-action: pan-x; }
+
+/* Arrows */
+.swiper-button-prev, .swiper-button-next {
+ position: absolute;
+ top: 50%;
+ width: 27px;
+ height: 44px;
+ margin-top: -22px;
+ z-index: 10;
+ cursor: pointer;
+ background-size: 27px 44px;
+ background: no-repeat center; }
+
+.swiper-button-prev.swiper-button-disabled, .swiper-button-next.swiper-button-disabled {
+ opacity: 0.35;
+ cursor: auto;
+ pointer-events: none; }
+
+.swiper-button-prev, .swiper-container-rtl .swiper-button-next {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+ left: 10px;
+ right: auto; }
+
+.swiper-button-prev.swiper-button-black, .swiper-container-rtl .swiper-button-next.swiper-button-black {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); }
+
+.swiper-button-prev.swiper-button-white, .swiper-container-rtl .swiper-button-next.swiper-button-white {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); }
+
+.swiper-button-next, .swiper-container-rtl .swiper-button-prev {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+ right: 10px;
+ left: auto; }
+
+.swiper-button-next.swiper-button-black, .swiper-container-rtl .swiper-button-prev.swiper-button-black {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); }
+
+.swiper-button-next.swiper-button-white, .swiper-container-rtl .swiper-button-prev.swiper-button-white {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); }
+
+/* Pagination Styles */
+.swiper-pagination {
+ position: absolute;
+ text-align: center;
+ transition: 300ms;
+ transform: translate3d(0, 0, 0);
+ z-index: 10; }
+ .swiper-pagination.swiper-pagination-hidden {
+ opacity: 0; }
+
+/* Common Styles */
+.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets {
+ bottom: 10px;
+ left: 0;
+ width: 100%; }
+
+/* Bullets */
+.swiper-pagination-bullet {
+ width: 6px;
+ height: 6px;
+ display: inline-block;
+ border-radius: 50%;
+ background: #000;
+ opacity: 0.2; }
+
+.swiper-pagination-fraction {
+ color: #000; }
+
+button.swiper-pagination-bullet {
+ border: none;
+ margin: 0;
+ padding: 0;
+ box-shadow: none;
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none; }
+
+.swiper-pagination-clickable .swiper-pagination-bullet {
+ cursor: pointer; }
+
+.swiper-pagination-white .swiper-pagination-bullet {
+ background: #fff; }
+
+.swiper-pagination-bullet-active {
+ opacity: 1; }
+
+.swiper-pagination-white .swiper-pagination-bullet-active {
+ background: #fff; }
+
+.swiper-pagination-black .swiper-pagination-bullet-active {
+ background: #000; }
+
+.swiper-container-vertical > .swiper-pagination-bullets {
+ right: 10px;
+ top: 50%;
+ transform: translate3d(0px, -50%, 0); }
+ .swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
+ margin: 5px 0;
+ display: block; }
+
+.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
+ margin: 0 6px; }
+
+/* Progress */
+.swiper-pagination-progress {
+ background: rgba(0, 0, 0, 0.25);
+ position: absolute; }
+ .swiper-pagination-progress .swiper-pagination-progressbar {
+ background: #000;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ transform: scale(0);
+ transform-origin: left top; }
+
+.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar {
+ transform-origin: right top; }
+
+.swiper-container-horizontal > .swiper-pagination-progress {
+ width: 100%;
+ height: 4px;
+ left: 0;
+ top: 0; }
+
+.swiper-container-vertical > .swiper-pagination-progress {
+ width: 4px;
+ height: 100%;
+ left: 0;
+ top: 0; }
+
+.swiper-pagination-progress.swiper-pagination-white {
+ background: rgba(255, 255, 255, 0.5); }
+ .swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar {
+ background: #fff; }
+
+.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar {
+ background: #000; }
+
+/* 3D Container */
+.swiper-container-3d {
+ perspective: 1200px; }
+ .swiper-container-3d .swiper-wrapper, .swiper-container-3d .swiper-slide, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-cube-shadow {
+ transform-style: preserve-3d; }
+ .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ z-index: 10; }
+ .swiper-container-3d .swiper-slide-shadow-left {
+ background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
+ .swiper-container-3d .swiper-slide-shadow-right {
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
+ .swiper-container-3d .swiper-slide-shadow-top {
+ background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
+ .swiper-container-3d .swiper-slide-shadow-bottom {
+ background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
+
+/* Coverflow */
+.swiper-container-coverflow .swiper-wrapper, .swiper-container-flip .swiper-wrapper {
+ /* Windows 8 IE 10 fix */
+ -ms-perspective: 1200px; }
+
+/* Cube + Flip */
+.swiper-container-cube, .swiper-container-flip {
+ overflow: visible; }
+
+.swiper-container-cube .swiper-slide, .swiper-container-flip .swiper-slide {
+ pointer-events: none;
+ backface-visibility: hidden;
+ z-index: 1; }
+
+.swiper-container-cube .swiper-slide .swiper-slide, .swiper-container-flip .swiper-slide .swiper-slide {
+ pointer-events: none; }
+
+.swiper-container-cube .swiper-slide-active, .swiper-container-flip .swiper-slide-active, .swiper-container-cube .swiper-slide-active .swiper-slide-active, .swiper-container-flip .swiper-slide-active .swiper-slide-active {
+ pointer-events: auto; }
+
+.swiper-container-cube .swiper-slide-shadow-top, .swiper-container-flip .swiper-slide-shadow-top, .swiper-container-cube .swiper-slide-shadow-bottom, .swiper-container-flip .swiper-slide-shadow-bottom, .swiper-container-cube .swiper-slide-shadow-left, .swiper-container-flip .swiper-slide-shadow-left, .swiper-container-cube .swiper-slide-shadow-right, .swiper-container-flip .swiper-slide-shadow-right {
+ z-index: 0;
+ backface-visibility: hidden; }
+
+/* Cube */
+.swiper-container-cube .swiper-slide {
+ visibility: hidden;
+ transform-origin: 0 0;
+ width: 100%;
+ height: 100%; }
+
+.swiper-container-cube.swiper-container-rtl .swiper-slide {
+ transform-origin: 100% 0; }
+
+.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-next, .swiper-container-cube .swiper-slide-prev, .swiper-container-cube .swiper-slide-next + .swiper-slide {
+ pointer-events: auto;
+ visibility: visible; }
+
+.swiper-container-cube .swiper-cube-shadow {
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ height: 100%;
+ background: #000;
+ opacity: 0.6;
+ -webkit-filter: blur(50px);
+ filter: blur(50px);
+ z-index: 0; }
+
+/* Fade */
+.swiper-container-fade.swiper-container-free-mode .swiper-slide {
+ transition-timing-function: ease-out; }
+
+.swiper-container-fade .swiper-slide {
+ pointer-events: none;
+ transition-property: opacity; }
+ .swiper-container-fade .swiper-slide .swiper-slide {
+ pointer-events: none; }
+
+.swiper-container-fade .swiper-slide-active {
+ pointer-events: auto; }
+ .swiper-container-fade .swiper-slide-active .swiper-slide-active {
+ pointer-events: auto; }
+
+.swiper-zoom-container {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ text-align: center; }
+ .swiper-zoom-container > img, .swiper-zoom-container > svg, .swiper-zoom-container > canvas {
+ max-width: 100%;
+ max-height: 100%;
+ object-fit: contain; }
+
+/* Scrollbar */
+.swiper-scrollbar {
+ border-radius: 10px;
+ position: relative;
+ -ms-touch-action: none;
+ background: rgba(0, 0, 0, 0.1); }
+
+.swiper-container-horizontal > .swiper-scrollbar {
+ position: absolute;
+ left: 1%;
+ bottom: 3px;
+ z-index: 50;
+ height: 5px;
+ width: 98%; }
+
+.swiper-container-vertical > .swiper-scrollbar {
+ position: absolute;
+ right: 3px;
+ top: 1%;
+ z-index: 50;
+ width: 5px;
+ height: 98%; }
+
+.swiper-scrollbar-drag {
+ height: 100%;
+ width: 100%;
+ position: relative;
+ background: rgba(0, 0, 0, 0.5);
+ border-radius: 10px;
+ left: 0;
+ top: 0; }
+
+.swiper-scrollbar-cursor-drag {
+ cursor: move; }
+
+/* Preloader */
+.swiper-lazy-preloader {
+ width: 42px;
+ height: 42px;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ margin-left: -21px;
+ margin-top: -21px;
+ z-index: 10;
+ transform-origin: 50%;
+ animation: swiper-preloader-spin 1s steps(12, end) infinite; }
+ .swiper-lazy-preloader:after {
+ display: block;
+ content: "";
+ width: 100%;
+ height: 100%;
+ background-size: 100%;
+ background: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") no-repeat 50%; }
+
+.swiper-lazy-preloader-white:after {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); }
+
+@keyframes swiper-preloader-spin {
+ 100% {
+ transform: rotate(360deg); } }
+
+.elementor-lightbox .dialog-header {
+ display: none; }
+
+.elementor-lightbox .dialog-widget-content {
+ background: none;
+ box-shadow: none;
+ width: 100%;
+ height: 100%; }
+
+.elementor-lightbox .dialog-message {
+ animation-duration: .4s; }
+ .elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio) {
+ height: 100%; }
+
+.elementor-lightbox .dialog-lightbox-close-button {
+ cursor: pointer;
+ position: absolute;
+ font-size: 25px;
+ padding: 5px;
+ z-index: 2;
+ line-height: 1; }
+ @media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-lightbox .dialog-lightbox-close-button {
+ padding: 0; } }
+
+.elementor-lightbox .dialog-lightbox-close-button,
+.elementor-lightbox .elementor-swiper-button {
+ color: rgba(238, 238, 238, 0.9);
+ transition: all 0.5s;
+ opacity: 1; }
+ .elementor-lightbox .dialog-lightbox-close-button:hover,
+ .elementor-lightbox .elementor-swiper-button:hover {
+ color: #ffffff; }
+
+.elementor-lightbox .swiper-container {
+ height: 100%; }
+
+.elementor-lightbox .elementor-lightbox-item {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ padding: 70px 80px;
+ box-sizing: border-box;
+ height: 100%;
+ margin: auto; }
+ @media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-lightbox .elementor-lightbox-item {
+ padding: 40px; } }
+
+.elementor-lightbox .elementor-lightbox-image {
+ max-height: 100%; }
+
+.elementor-lightbox .elementor-video-container {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%); }
+ @media (min-width: ELEMENTOR_SCREEN_LG_MIN) {
+ .elementor-lightbox .elementor-video-container {
+ width: 75%; } }
+ @media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-lightbox .elementor-video-container {
+ width: 100%; } }
+
+.elementor-lightbox .elementor-swiper-button-prev {
+ left: 35px; }
+
+.elementor-lightbox .elementor-swiper-button-next {
+ right: 35px; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-lightbox .elementor-swiper-button-prev {
+ left: 10px; }
+ .elementor-lightbox .elementor-swiper-button-next {
+ right: 10px; } }
+
+.animated {
+ animation-duration: 1.25s; }
+ .animated.animated-slow {
+ animation-duration: 2s; }
+ .animated.animated-fast {
+ animation-duration: .75s; }
+
+.animated.infinite {
+ animation-iteration-count: infinite; }
+
+/*
+.animated.hinge {
+ animation-duration: 2s;
+}
+
+
+.animated.flipOutX,
+.animated.flipOutY,
+.animated.bounceIn,
+.animated.bounceOut {
+ animation-duration: .75s;
+}
+*/
+.elementor-shape {
+ overflow: hidden;
+ position: absolute;
+ left: 0;
+ width: 100%;
+ line-height: 0;
+ direction: ltr; }
+ .elementor-shape-top {
+ top: -1px; }
+ .elementor-shape-bottom {
+ bottom: -1px; }
+ .elementor-shape[data-negative="false"].elementor-shape-bottom {
+ transform: rotate(180deg); }
+ .elementor-shape[data-negative="true"].elementor-shape-top {
+ transform: rotate(180deg); }
+ .elementor-shape svg {
+ display: block;
+ width: calc(100% + 1.3px);
+ position: relative;
+ left: 50%;
+ transform: translateX(-50%); }
+ .elementor-shape .elementor-shape-fill {
+ fill: #fff;
+ transform-origin: center;
+ transform: rotateY(0deg); }
+
+#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item {
+ display: flex;
+ width: 200px; }
+
+#wp-admin-bar-elementor_edit_page .elementor-edit-link-title {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ width: 100%; }
+
+#wp-admin-bar-elementor_edit_page .elementor-edit-link-type {
+ background: #55595c;
+ font-size: 11px;
+ line-height: 9px;
+ margin-top: 6px;
+ padding: 4px 8px;
+ border-radius: 3px; }
+
+.page-template-elementor_canvas.elementor-page:before {
+ display: none; }
+
+.elementor-post__thumbnail__link {
+ transition: none; }
+
+#left-area ul.elementor-icon-list-items,
+.elementor .elementor-element ul.elementor-icon-list-items,
+#elementor .elementor-element ul.elementor-icon-list-items {
+ padding: 0; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor .elementor-hidden-phone {
+ display: none; } }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor .elementor-hidden-tablet {
+ display: none; } }
+
+@media (min-width: ELEMENTOR_SCREEN_LG_MIN) {
+ .elementor .elementor-hidden-desktop {
+ display: none; } }
--- /dev/null
+.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{padding:20px 0;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 20px 20px;min-height:50px}.dialog-type-lightbox .dialog-header,.dialog-type-lightbox .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-header,.dialog-lightbox-widget .dialog-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-left:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor{-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual}.elementor *,.elementor :after,.elementor :before{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor a{-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.elementor hr{margin:0;background-color:transparent}.elementor img{height:auto;max-width:100%;border:none;-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.elementor .elementor-widget:not(.elementor-widget-text-editor) figure{margin:0}.elementor embed,.elementor iframe,.elementor object,.elementor video{max-width:100%;width:100%;margin:0;line-height:1;border:none}.elementor .elementor-custom-embed{line-height:0}.elementor .elementor-background-video-container{height:100%;width:100%;top:0;left:0;position:absolute;overflow:hidden;z-index:0;-webkit-transition:opacity 1s;-o-transition:opacity 1s;transition:opacity 1s}.elementor .elementor-background-video-container.elementor-loading{opacity:0}.elementor .elementor-background-video-embed{max-width:none;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor .elementor-background-video{position:absolute;max-width:none;top:50%;left:50%;-webkit-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%)}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor-invisible{visibility:hidden}.elementor-align-center{text-align:center}.elementor-align-center .elementor-button{width:auto}.elementor-align-right{text-align:right}.elementor-align-right .elementor-button{width:auto}.elementor-align-left{text-align:left}.elementor-align-left .elementor-button{width:auto}.elementor-align-justify .elementor-button{width:100%}.elementor-custom-embed-play{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;opacity:.8;text-shadow:1px 0 6px rgba(0,0,0,.3);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:FontAwesome;-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.elementor-custom-embed-play.elementor-playing i:before{content:"\f1ce"}.elementor-swiper-button{position:absolute;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;z-index:1;cursor:pointer;font-size:25px;color:hsla(0,0%,93%,.9);top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor-swiper-button.swiper-button-disabled{opacity:.3}.elementor-tag{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-tablet-align-center{text-align:center}.elementor-tablet-align-center .elementor-button{width:auto}.elementor-tablet-align-right{text-align:right}.elementor-tablet-align-right .elementor-button{width:auto}.elementor-tablet-align-left{text-align:left}.elementor-tablet-align-left .elementor-button{width:auto}.elementor-tablet-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-mobile-align-center{text-align:center}.elementor-mobile-align-center .elementor-button{width:auto}.elementor-mobile-align-right{text-align:right}.elementor-mobile-align-right .elementor-button{width:auto}.elementor-mobile-align-left{text-align:left}.elementor-mobile-align-left .elementor-button{width:auto}.elementor-mobile-align-justify .elementor-button{width:100%}}#wpadminbar #wp-admin-bar-elementor_edit_page>.ab-item:before{content:"\e801";font-family:eicons;top:3px;font-size:18px}#wpadminbar #wp-admin-bar-elementor_inspector>.ab-item:before{content:"\f348";top:2px}.elementor:after{position:absolute;opacity:0;width:0;height:0;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}@media (min-width:ELEMENTOR_SCREEN_LG_MIN){.elementor:after{content:"desktop"}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN) and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor:after{content:"tablet"}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor:after{content:"mobile"}}.elementor-section{position:relative}.elementor-section .elementor-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:auto;margin-left:auto;position:relative}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-section.elementor-section-stretched{position:relative;width:100%}.elementor-section.elementor-section-items-top>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section.elementor-section-items-middle>.elementor-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section.elementor-section-items-bottom>.elementor-container{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}}.elementor-section-content-top>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section-content-middle>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section-content-bottom>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-row{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-row{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.elementor-column-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-wrap,.elementor-widget-wrap{width:100%;position:relative}.elementor-widget{position:relative}.elementor-widget:not(:last-child){margin-bottom:20px}.elementor-column{position:relative;min-height:1px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-gap-narrow>.elementor-row>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-row>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-row>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-row>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-row>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-column.elementor-col-10,.elementor-column[data-col="10"]{width:10%}.elementor-column.elementor-col-11,.elementor-column[data-col="11"]{width:11.111%}.elementor-column.elementor-col-12,.elementor-column[data-col="12"]{width:12.5%}.elementor-column.elementor-col-14,.elementor-column[data-col="14"]{width:14.285%}.elementor-column.elementor-col-16,.elementor-column[data-col="16"]{width:16.666%}.elementor-column.elementor-col-20,.elementor-column[data-col="20"]{width:20%}.elementor-column.elementor-col-25,.elementor-column[data-col="25"]{width:25%}.elementor-column.elementor-col-30,.elementor-column[data-col="30"]{width:30%}.elementor-column.elementor-col-33,.elementor-column[data-col="33"]{width:33.333%}.elementor-column.elementor-col-40,.elementor-column[data-col="40"]{width:40%}.elementor-column.elementor-col-50,.elementor-column[data-col="50"]{width:50%}.elementor-column.elementor-col-60,.elementor-column[data-col="60"]{width:60%}.elementor-column.elementor-col-66,.elementor-column[data-col="66"]{width:66.666%}.elementor-column.elementor-col-70,.elementor-column[data-col="70"]{width:70%}.elementor-column.elementor-col-75,.elementor-column[data-col="75"]{width:75%}.elementor-column.elementor-col-80,.elementor-column[data-col="80"]{width:80%}.elementor-column.elementor-col-83,.elementor-column[data-col="83"]{width:83.333%}.elementor-column.elementor-col-90,.elementor-column[data-col="90"]{width:90%}.elementor-column.elementor-col-100,.elementor-column[data-col="100"]{width:100%}}@media (max-width:479px){.elementor-column.elementor-xs-10{width:10%}.elementor-column.elementor-xs-11{width:11.111%}.elementor-column.elementor-xs-12{width:12.5%}.elementor-column.elementor-xs-14{width:14.285%}.elementor-column.elementor-xs-16{width:16.666%}.elementor-column.elementor-xs-20{width:20%}.elementor-column.elementor-xs-25{width:25%}.elementor-column.elementor-xs-30{width:30%}.elementor-column.elementor-xs-33{width:33.333%}.elementor-column.elementor-xs-40{width:40%}.elementor-column.elementor-xs-50{width:50%}.elementor-column.elementor-xs-60{width:60%}.elementor-column.elementor-xs-66{width:66.666%}.elementor-column.elementor-xs-70{width:70%}.elementor-column.elementor-xs-75{width:75%}.elementor-column.elementor-xs-80{width:80%}.elementor-column.elementor-xs-83{width:83.333%}.elementor-column.elementor-xs-90{width:90%}.elementor-column.elementor-xs-100{width:100%}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-column.elementor-sm-10{width:10%}.elementor-column.elementor-sm-11{width:11.111%}.elementor-column.elementor-sm-12{width:12.5%}.elementor-column.elementor-sm-14{width:14.285%}.elementor-column.elementor-sm-16{width:16.666%}.elementor-column.elementor-sm-20{width:20%}.elementor-column.elementor-sm-25{width:25%}.elementor-column.elementor-sm-30{width:30%}.elementor-column.elementor-sm-33{width:33.333%}.elementor-column.elementor-sm-40{width:40%}.elementor-column.elementor-sm-50{width:50%}.elementor-column.elementor-sm-60{width:60%}.elementor-column.elementor-sm-66{width:66.666%}.elementor-column.elementor-sm-70{width:70%}.elementor-column.elementor-sm-75{width:75%}.elementor-column.elementor-sm-80{width:80%}.elementor-column.elementor-sm-83{width:83.333%}.elementor-column.elementor-sm-90{width:90%}.elementor-column.elementor-sm-100{width:100%}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN) and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-column.elementor-md-10{width:10%}.elementor-column.elementor-md-11{width:11.111%}.elementor-column.elementor-md-12{width:12.5%}.elementor-column.elementor-md-14{width:14.285%}.elementor-column.elementor-md-16{width:16.666%}.elementor-column.elementor-md-20{width:20%}.elementor-column.elementor-md-25{width:25%}.elementor-column.elementor-md-30{width:30%}.elementor-column.elementor-md-33{width:33.333%}.elementor-column.elementor-md-40{width:40%}.elementor-column.elementor-md-50{width:50%}.elementor-column.elementor-md-60{width:60%}.elementor-column.elementor-md-66{width:66.666%}.elementor-column.elementor-md-70{width:70%}.elementor-column.elementor-md-75{width:75%}.elementor-column.elementor-md-80{width:80%}.elementor-column.elementor-md-83{width:83.333%}.elementor-column.elementor-md-90{width:90%}.elementor-column.elementor-md-100{width:100%}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN) and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-reverse-tablet>.elementor-container>.elementor-row>:first-child{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(2){-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(3){-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(4){-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(5){-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(6){-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(7){-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(8){-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(9){-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(10){-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-reverse-mobile>.elementor-container>.elementor-row>:first-child{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(2){-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(3){-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(4){-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(5){-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(6){-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(7){-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(8){-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(9){-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(10){-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.elementor-column{width:100%}}ul.elementor-icon-list-items.elementor-inline-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item{word-break:break-word}.elementor-grid .elementor-grid-item{word-break:break-word;min-width:0}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-tablet-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-mobile-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.elementor-form-fields-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group .elementor-field-subgroup,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>.elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>input,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>textarea{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group .elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group>input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-field-group.elementor-field-type-submit{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-field-group .elementor-field-textual{width:100%;max-width:100%;border:1px solid #818a91;background-color:transparent;color:#373a3c;vertical-align:middle;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-ms-input-placeholder,.elementor-field-group .elementor-field-textual::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-select-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;width:100%}.elementor-field-group .elementor-select-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:inherit;font-size:inherit;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-left:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\f0d7";font-family:FontAwesome;font-size:15px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);left:10px;pointer-events:none}.elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before{content:""}.elementor-field-subgroup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-field-subgroup .elementor-field-option label{display:inline-block}.elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option{padding-left:10px}.elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-field-label{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-right:.2em}.elementor-field-textual{line-height:1.4}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;-webkit-border-radius:2px;border-radius:2px}.elementor-field-textual.elementor-size-sm{font-size:15px;min-height:40px;padding:5px 14px;-webkit-border-radius:3px;border-radius:3px}.elementor-field-textual.elementor-size-md{font-size:16px;min-height:47px;padding:6px 16px;-webkit-border-radius:4px;border-radius:4px}.elementor-field-textual.elementor-size-lg{font-size:18px;min-height:59px;padding:7px 20px;-webkit-border-radius:5px;border-radius:5px}.elementor-field-textual.elementor-size-xl{font-size:20px;min-height:72px;padding:8px 24px;-webkit-border-radius:6px;border-radius:6px}.elementor-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-button-align-start .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-button-align-end .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}@media screen and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-tablet-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-tablet-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-tablet-button-align-start .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-tablet-button-align-end .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}}@media screen and (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-mobile-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-mobile-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-mobile-button-align-start .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-mobile-button-align-end .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}}.elementor-error .elementor-field{border-color:#d9534f}.elementor-error .help-inline{color:#d9534f;font-size:.9em}.elementor-message{margin:10px 0;font-size:1em;line-height:1}.elementor-message:before{content:"\f00c";display:inline-block;font-family:fontawesome;font-weight:400;font-style:normal;vertical-align:middle;margin-right:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\f00d"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-top:0;padding-bottom:0;border:0 none}.elementor-form .elementor-button>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-form .elementor-button .elementor-align-icon-right{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.elementor-form .elementor-button .elementor-align-icon-left{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-form .elementor-button.elementor-size-xs{min-height:33px}.elementor-form .elementor-button.elementor-size-sm{min-height:40px}.elementor-form .elementor-button.elementor-size-md{min-height:47px}.elementor-form .elementor-button.elementor-size-lg{min-height:59px}.elementor-form .elementor-button.elementor-size-xl{min-height:72px}.elementor-element .elementor-widget-container{-webkit-transition:background .3s,border .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s;transition:background .3s,border .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s;-o-transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;transition:background .3s,border .3s,border-radius .3s,box-shadow .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s}.elementor-accordion{text-align:right}.elementor-accordion .elementor-accordion-item{border:1px solid #d4d4d4}.elementor-accordion .elementor-accordion-item+.elementor-accordion-item{border-top:none}.elementor-accordion .elementor-tab-title{margin:0;padding:15px 20px;font-weight:700;line-height:1;cursor:pointer;outline:none}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right{float:right;text-align:right}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left{float:left;text-align:left}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed{display:block}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened,.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed{display:none}.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened{display:block}.elementor-accordion .elementor-tab-content{display:none;padding:15px 20px;border-top:1px solid #d4d4d4}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-accordion .elementor-tab-title{padding:12px 15px}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{width:1.2em}.elementor-accordion .elementor-tab-content{padding:7px 15px}}.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:right}.elementor-alert .elementor-alert-title{display:block;font-weight:700}.elementor-alert .elementor-alert-description{font-size:13px}.elementor-alert button.elementor-alert-dismiss{position:absolute;left:10px;top:10px;padding:3px;font-size:20px;line-height:1;background:transparent;color:inherit;border:none;cursor:pointer}.elementor-alert.elementor-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert.elementor-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert.elementor-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert.elementor-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}.elementor-button{display:inline-block;line-height:1;background-color:#818a91;color:#fff;text-align:center;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;-webkit-border-radius:2px;border-radius:2px}.elementor-button.elementor-size-sm{font-size:15px;padding:12px 24px;-webkit-border-radius:3px;border-radius:3px}.elementor-button.elementor-size-md{font-size:16px;padding:15px 30px;-webkit-border-radius:4px;border-radius:4px}.elementor-button.elementor-size-lg{font-size:18px;padding:20px 40px;-webkit-border-radius:5px;border-radius:5px}.elementor-button.elementor-size-xl{font-size:20px;padding:25px 50px;-webkit-border-radius:6px;border-radius:6px}.elementor-button .elementor-align-icon-right{float:right;margin-left:5px}.elementor-button .elementor-align-icon-left{float:left;margin-right:5px}.elementor-button .elementor-button-text{display:inline-block}.elementor-button span{text-decoration:inherit}.elementor-element.elementor-button-info .elementor-button{background-color:#5bc0de}.elementor-element.elementor-button-success .elementor-button{background-color:#5cb85c}.elementor-element.elementor-button-warning .elementor-button{background-color:#f0ad4e}.elementor-element.elementor-button-danger .elementor-button{background-color:#d9534f}.elementor-widget-button .elementor-button .elementor-button-info{background-color:#5bc0de}.elementor-widget-button .elementor-button .elementor-button-success{background-color:#5cb85c}.elementor-widget-button .elementor-button .elementor-button-warning{background-color:#f0ad4e}.elementor-widget-button .elementor-button .elementor-button-danger{background-color:#d9534f}.elementor-counter .elementor-counter-number-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:69px;font-weight:600;color:#222;line-height:1}.elementor-counter .elementor-counter-number-prefix,.elementor-counter .elementor-counter-number-suffix{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:pre-wrap}.elementor-counter .elementor-counter-number-prefix{text-align:left}.elementor-counter .elementor-counter-number-suffix{text-align:right}.elementor-counter .elementor-counter-title{text-align:center;font-size:19px;font-weight:400;color:#666;line-height:2.5}.elementor-widget-divider .elementor-divider{line-height:0;font-size:0}.elementor-widget-divider .elementor-divider-separator{display:inline-block}.elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}.elementor-widget-google_maps iframe{height:300px}.elementor-widget-heading .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title>a{color:inherit;font-size:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}.elementor-icon{display:inline-block;line-height:1;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;color:#818a91;font-size:50px;text-align:center}.elementor-icon:hover{color:#818a91}.elementor-icon i{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#818a91;color:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#818a91;border:3px solid #818a91;background-color:transparent}.elementor-shape-circle .elementor-icon{-webkit-border-radius:50%;border-radius:50%}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img{margin:auto}.elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-widget-icon-box .elementor-icon-box-icon{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-icon-box .elementor-icon-box-wrapper{text-align:center}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}.elementor-widget .elementor-icon-list-items.elementor-inline-items{margin-right:-8px;margin-left:-8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item{margin-right:8px;margin-left:8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after{width:auto;left:auto;right:auto;position:relative;height:100%;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);border-top:0;border-bottom:0;border-right:0;border-left-width:1px;border-style:solid;left:-8px}.elementor-widget .elementor-icon-list-items{list-style-type:none;margin:0;padding:0}.elementor-widget .elementor-icon-list-item{margin:0;padding:0;position:relative}.elementor-widget .elementor-icon-list-item:after{position:absolute;bottom:0;width:100%}.elementor-widget .elementor-icon-list-item,.elementor-widget .elementor-icon-list-item a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget .elementor-icon-list-item a{width:100%}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding-right:5px}.elementor-widget .elementor-icon-list-icon{text-align:center}.elementor-widget.elementor-align-center .elementor-icon-list-item,.elementor-widget.elementor-align-center .elementor-icon-list-item a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-align-center .elementor-inline-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-left .elementor-icon-list-item,.elementor-widget.elementor-align-left .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:left}.elementor-widget.elementor-align-left .elementor-inline-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-align-right .elementor-icon-list-item,.elementor-widget.elementor-align-right .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:right}.elementor-widget.elementor-align-right .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after{left:0}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:left}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:right}.elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after{left:0}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:left}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:right}.elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after{right:0}.elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after{left:0}}.elementor-widget-image{text-align:center}.elementor-widget-image .elementor-image>a,.elementor-widget-image .elementor-image figure>a{display:block}.elementor-widget-image .elementor-image img{vertical-align:middle;display:inline-block}.elementor-widget-image .elementor-image.elementor-image-shape-circle{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}.elementor-image-carousel-wrapper .slick-image-stretch .slick-slide .slick-slide-image{width:100%}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}.swiper-container .swiper-slide figure{line-height:0}.swiper-container .swiper-slide figure img{width:100%}body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}.elementor-widget-progress{text-align:right}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:30px;line-height:30px;-webkit-border-radius:2px;border-radius:2px}.elementor-progress-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#818a91;width:0;font-size:11px;-webkit-border-radius:2px;border-radius:2px;-webkit-transition:width 1s ease-in-out;-o-transition:width 1s ease-in-out;transition:width 1s ease-in-out}.elementor-progress-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-right:15px}.elementor-progress-percentage{padding-left:15px}.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar{background-color:#5bc0de}.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar{background-color:#5cb85c}.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar{background-color:#f0ad4e}.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar{background-color:#d9534f}.elementor-progress .elementor-title{display:block}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-progress-wrapper{height:25px;line-height:25px}.elementor-progress-text{padding-right:10px}}.elementor-social-icons-wrapper{font-size:0}.elementor-social-icon{font-size:25px;text-align:center;padding:.5em;margin-left:5px;cursor:pointer}.elementor-social-icon i{color:#fff}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-google-plus{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-linkedin{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#df2029}.elementor-social-icon-weixin{background-color:#7bb32e}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{-webkit-border-radius:10%;border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{width:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active{border-left-style:none}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{height:999em;width:0;left:0;border-left-style:solid}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{top:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after{top:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title{display:table-cell}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active{border-bottom-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{bottom:0;height:0;width:999em;border-bottom-style:solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{right:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after{left:100%}.elementor-widget-tabs .elementor-tab-content,.elementor-widget-tabs .elementor-tab-title,.elementor-widget-tabs .elementor-tab-title:after,.elementor-widget-tabs .elementor-tab-title:before,.elementor-widget-tabs .elementor-tabs-content-wrapper{border:1px none #d4d4d4}.elementor-widget-tabs .elementor-tabs{text-align:right}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:none}.elementor-widget-tabs .elementor-tab-desktop-title{position:relative;padding:20px 25px;font-weight:700;line-height:1;border:solid transparent}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active{border-color:#d4d4d4}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before{display:block;content:"";position:absolute}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-tabs .elementor-tab-content,.elementor-tabs .elementor-tab-title{border-style:solid;border-bottom-style:none}.elementor-tabs .elementor-tabs-wrapper{display:none}.elementor-tabs .elementor-tabs-content-wrapper{border-bottom-style:solid}.elementor-tabs .elementor-tab-content{padding:10px}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-style:solid;border-right-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content{border-style:solid;border-top-style:none}.elementor-tabs .elementor-tab-mobile-title{display:none}}.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;color:inherit}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;color:inherit}.elementor-testimonial-wrapper.elementor-testimonial-text-align-left{text-align:left}.elementor-testimonial-wrapper.elementor-testimonial-text-align-right{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;-webkit-border-radius:50%;border-radius:50%;-o-object-fit:cover;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-left:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:right;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}.elementor-toggle{text-align:right}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d4d4d4;cursor:pointer;outline:none}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d4d4d4;display:none}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.elementor-widget-video .elementor-widget-container{overflow:hidden}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%}.slick-slider{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list,.slick-slider{position:relative;display:block}.slick-list{overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translateZ(0);transform:translateZ(0)}.slick-track{position:relative;left:0;top:0;display:block}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}.elementor-slick-slider[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.elementor-slick-slider .slick-loading .slick-list{background:#fff}.elementor-slick-slider .slick-loading .slick-list:after{content:"\f1ce";font-family:FontAwesome;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear;font-size:25px;color:#a4afb7}.elementor-slick-slider .slick-next,.elementor-slick-slider .slick-prev{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;padding:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:transparent;border:none;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus,.elementor-slick-slider .slick-next:hover,.elementor-slick-slider .slick-prev:focus,.elementor-slick-slider .slick-prev:hover{color:transparent;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus:before,.elementor-slick-slider .slick-next:hover:before,.elementor-slick-slider .slick-prev:focus:before,.elementor-slick-slider .slick-prev:hover:before{opacity:1}.elementor-slick-slider .slick-next.slick-disabled:before,.elementor-slick-slider .slick-prev.slick-disabled:before{opacity:.25}.elementor-slick-slider .slick-next:before,.elementor-slick-slider .slick-prev:before{font-family:FontAwesome;font-size:35px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider .slick-prev{left:-25px}[dir=rtl] .elementor-slick-slider .slick-prev{left:auto;right:-25px}.elementor-slick-slider .slick-prev:before{content:"\f104"}[dir=rtl] .elementor-slick-slider .slick-prev:before{content:"\f105"}.elementor-slick-slider .slick-next{right:-25px}[dir=rtl] .elementor-slick-slider .slick-next{left:-25px;right:auto}.elementor-slick-slider .slick-next:before{content:"\f105"}[dir=rtl] .elementor-slick-slider .slick-next:before{content:"\f104"}.elementor-slick-slider .slick-dotted.slick-slider{margin-bottom:30px}.elementor-slick-slider ul.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center;line-height:1}.elementor-slick-slider ul.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0;padding:0;cursor:pointer}.elementor-slick-slider ul.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:none;background:transparent}.elementor-slick-slider ul.slick-dots li button:focus,.elementor-slick-slider ul.slick-dots li button:hover{outline:none}.elementor-slick-slider ul.slick-dots li button:focus:before,.elementor-slick-slider ul.slick-dots li button:hover:before{opacity:1}.elementor-slick-slider ul.slick-dots li button:before{font-family:FontAwesome;font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:"\f111";text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider ul.slick-dots li.slick-active button:before{opacity:.75;color:#000}.elementor-slick-slider .slick-arrows-inside .slick-prev{left:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-prev{left:auto;right:20px}.elementor-slick-slider .slick-arrows-inside .slick-next{right:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-next{left:20px;right:auto}.elementor-slick-slider .slick-dots-inside .slick-dots{bottom:5px}.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider{margin-bottom:0}.elementor-slick-slider .slick-slider .slick-next,.elementor-slick-slider .slick-slider .slick-prev{z-index:1}.elementor-slick-slider .slick-slide img{margin:auto}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-webkit-background-size:27px 44px;background-size:27px 44px;background:no-repeat 50%}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23007aff'/%3E%3C/svg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z'/%3E%3C/svg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23007aff'/%3E%3C/svg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:6px;height:6px;display:inline-block;-webkit-border-radius:50%;border-radius:50%;background:#000;opacity:.2}.swiper-pagination-fraction{color:#000}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 6px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#000;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:hsla(0,0%,100%,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-scrollbar{-webkit-border-radius:10px;border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);-webkit-border-radius:10px;border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12) infinite;animation:swiper-preloader-spin 1s steps(12) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;-webkit-background-size:100% 100%;background-size:100%;background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E") no-repeat 50%}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E")}@-webkit-keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.elementor-lightbox .dialog-header{display:none}.elementor-lightbox .dialog-widget-content{background:none;-webkit-box-shadow:none;box-shadow:none;width:100%;height:100%}.elementor-lightbox .dialog-message{-webkit-animation-duration:.4s;animation-duration:.4s}.elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio){height:100%}.elementor-lightbox .dialog-lightbox-close-button{cursor:pointer;position:absolute;font-size:25px;padding:5px;z-index:2;line-height:1}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-lightbox .dialog-lightbox-close-button{padding:0}}.elementor-lightbox .dialog-lightbox-close-button,.elementor-lightbox .elementor-swiper-button{color:hsla(0,0%,93%,.9);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;opacity:1}.elementor-lightbox .dialog-lightbox-close-button:hover,.elementor-lightbox .elementor-swiper-button:hover{color:#fff}.elementor-lightbox .swiper-container{height:100%}.elementor-lightbox .elementor-lightbox-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:70px 80px;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin:auto}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-lightbox .elementor-lightbox-item{padding:40px}}.elementor-lightbox .elementor-lightbox-image{max-height:100%}.elementor-lightbox .elementor-video-container{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}@media (min-width:ELEMENTOR_SCREEN_LG_MIN){.elementor-lightbox .elementor-video-container{width:75%}}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-lightbox .elementor-video-container{width:100%}}.elementor-lightbox .elementor-swiper-button-prev{left:35px}.elementor-lightbox .elementor-swiper-button-next{right:35px}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-lightbox .elementor-swiper-button-prev{left:10px}.elementor-lightbox .elementor-swiper-button-next{right:10px}}.animated{-webkit-animation-duration:1.25s;animation-duration:1.25s}.animated.animated-slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.animated-fast{-webkit-animation-duration:.75s;animation-duration:.75s}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.elementor-shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.elementor-shape-top{top:-1px}.elementor-shape-bottom{bottom:-1px}.elementor-shape[data-negative=false].elementor-shape-bottom,.elementor-shape[data-negative=true].elementor-shape-top{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-shape svg{display:block;width:-webkit-calc(100% + 1.3px);width:calc(100% + 1.3px);position:relative;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-shape .elementor-shape-fill{fill:#fff;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotateY(0deg);transform:rotateY(0deg)}#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:200px}#wp-admin-bar-elementor_edit_page .elementor-edit-link-title{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;width:100%}#wp-admin-bar-elementor_edit_page .elementor-edit-link-type{background:#55595c;font-size:11px;line-height:9px;margin-top:6px;padding:4px 8px;-webkit-border-radius:3px;border-radius:3px}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{-webkit-transition:none;-o-transition:none;transition:none}#elementor .elementor-element ul.elementor-icon-list-items,#left-area ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor .elementor-hidden-phone{display:none}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN) and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor .elementor-hidden-tablet{display:none}}@media (min-width:ELEMENTOR_SCREEN_LG_MIN){.elementor .elementor-hidden-desktop{display:none}}
\ No newline at end of file
--- /dev/null
+.dialog-widget-content {
+ background-color: #fff;
+ position: absolute;
+ border-radius: 3px;
+ box-shadow: 2px 8px 23px 3px rgba(0, 0, 0, 0.2);
+ overflow: hidden; }
+
+.dialog-message {
+ font-size: 12px;
+ line-height: 1.5; }
+
+.dialog-type-lightbox {
+ position: fixed;
+ height: 100%;
+ width: 100%;
+ top: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.8);
+ z-index: 9999;
+ user-select: none; }
+ .dialog-type-lightbox .dialog-widget-content {
+ margin: auto;
+ width: 375px; }
+ .dialog-type-lightbox .dialog-header {
+ padding: 20px 0;
+ font-weight: 500; }
+ .dialog-type-lightbox .dialog-message {
+ padding: 0 20px 20px;
+ min-height: 50px; }
+ .dialog-type-lightbox .dialog-header, .dialog-type-lightbox .dialog-message {
+ text-align: center; }
+ .dialog-type-lightbox .dialog-buttons-wrapper {
+ border-top: 1px solid #e6e9ec;
+ text-align: center; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button {
+ border: none;
+ background: none;
+ font-size: 15px;
+ cursor: pointer;
+ padding: 13px 0;
+ outline: 0; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button:first-child {
+ color: #6d7882; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button.dialog-ok {
+ color: #b01b1b; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button.dialog-take_over {
+ color: #39b54a; }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button:active {
+ background-color: rgba(230, 233, 236, 0.5); }
+ .dialog-type-lightbox .dialog-buttons-wrapper > button::-moz-focus-inner {
+ border: 0; }
+
+.dialog-close-button {
+ cursor: pointer;
+ position: absolute;
+ top: 30px;
+ right: 30px;
+ font-size: 15px; }
+ .dialog-close-button:not(:hover) {
+ opacity: .4; }
+
+.dialog-lightbox-widget .dialog-header,
+.dialog-confirm-widget .dialog-header {
+ font-size: 15px;
+ color: #495157; }
+
+.dialog-lightbox-widget .dialog-buttons-wrapper > button,
+.dialog-confirm-widget .dialog-buttons-wrapper > button {
+ width: 50%; }
+ .dialog-lightbox-widget .dialog-buttons-wrapper > button:first-child,
+ .dialog-confirm-widget .dialog-buttons-wrapper > button:first-child {
+ border-right: 1px solid #e6e9ec; }
+ .dialog-lightbox-widget .dialog-buttons-wrapper > button:hover,
+ .dialog-confirm-widget .dialog-buttons-wrapper > button:hover {
+ background-color: #f4f6f7; }
+
+.dialog-alert-widget .dialog-buttons-wrapper > button {
+ width: 100%; }
+
+@media (max-width: 767px) {
+ .dialog-close-button {
+ top: 15px;
+ right: 15px; }
+ body.admin-bar .dialog-close-button {
+ top: 40px; } }
+
+.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio {
+ padding-bottom: 42.8571%; }
+
+.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio {
+ padding-bottom: 56.25%; }
+
+.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio {
+ padding-bottom: 75%; }
+
+.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio {
+ padding-bottom: 66.6666%; }
+
+.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio {
+ padding-bottom: 100%; }
+
+.elementor-fit-aspect-ratio {
+ position: relative;
+ height: 0; }
+ .elementor-fit-aspect-ratio iframe {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ border: 0; }
+
+.elementor-hidden {
+ display: none; }
+
+.flatpickr-calendar {
+ width: 280px; }
+ .flatpickr-calendar .flatpickr-current-month span.cur-month {
+ font-weight: 300; }
+ .flatpickr-calendar .dayContainer {
+ width: 280px;
+ min-width: 280px;
+ max-width: 280px; }
+ .flatpickr-calendar .flatpickr-days {
+ width: 280px; }
+ .flatpickr-calendar .flatpickr-day {
+ max-width: 37px;
+ height: 37px;
+ line-height: 37px; }
+
+.elementor {
+ hyphens: manual; }
+ .elementor *, .elementor *:before, .elementor *:after {
+ box-sizing: border-box; }
+ .elementor a {
+ box-shadow: none;
+ text-decoration: none; }
+ .elementor hr {
+ margin: 0;
+ background-color: transparent; }
+ .elementor img {
+ height: auto;
+ max-width: 100%;
+ border: none;
+ border-radius: 0;
+ box-shadow: none; }
+ .elementor .elementor-widget:not(.elementor-widget-text-editor) figure {
+ margin: 0; }
+ .elementor embed,
+ .elementor iframe,
+ .elementor object,
+ .elementor video {
+ max-width: 100%;
+ width: 100%;
+ margin: 0;
+ line-height: 1;
+ border: none; }
+ .elementor .elementor-custom-embed {
+ line-height: 0; }
+ .elementor .elementor-background-video-container {
+ height: 100%;
+ width: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ overflow: hidden;
+ z-index: 0;
+ transition: opacity 1s; }
+ .elementor .elementor-background-video-container.elementor-loading {
+ opacity: 0; }
+ .elementor .elementor-background-video-embed {
+ max-width: none;
+ position: absolute;
+ top: 50%;
+ left: 0;
+ transform: translateY(-50%); }
+ .elementor .elementor-background-video {
+ position: absolute;
+ max-width: none;
+ top: 50%;
+ left: 50%;
+ transform: translateY(-50%) translateX(-50%); }
+ .elementor .elementor-html5-video {
+ object-fit: cover; }
+ .elementor .elementor-background-overlay {
+ height: 100%;
+ width: 100%;
+ top: 0;
+ left: 0;
+ position: absolute; }
+
+.elementor-invisible {
+ visibility: hidden; }
+
+.elementor-align-center {
+ text-align: center; }
+ .elementor-align-center .elementor-button {
+ width: auto; }
+
+.elementor-align-right {
+ text-align: right; }
+ .elementor-align-right .elementor-button {
+ width: auto; }
+
+.elementor-align-left {
+ text-align: left; }
+ .elementor-align-left .elementor-button {
+ width: auto; }
+
+.elementor-align-justify .elementor-button {
+ width: 100%; }
+
+.elementor-custom-embed-play {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%); }
+ .elementor-custom-embed-play i {
+ font-size: 100px;
+ color: #fff;
+ opacity: 0.8;
+ text-shadow: 1px 0 6px rgba(0, 0, 0, 0.3);
+ transition: all .5s; }
+ .elementor-custom-embed-play.elementor-playing i {
+ font-family: 'FontAwesome';
+ animation: fa-spin 2s infinite linear; }
+ .elementor-custom-embed-play.elementor-playing i:before {
+ content: "\f1ce"; }
+
+.elementor-swiper-button {
+ position: absolute;
+ display: inline-flex;
+ z-index: 1;
+ cursor: pointer;
+ font-size: 25px;
+ color: rgba(238, 238, 238, 0.9);
+ top: 50%;
+ transform: translateY(-50%); }
+ .elementor-swiper-button.swiper-button-disabled {
+ opacity: 0.3; }
+
+.elementor-tag {
+ display: inline-flex; }
+
+@media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-tablet-align-center {
+ text-align: center; }
+ .elementor-tablet-align-center .elementor-button {
+ width: auto; }
+ .elementor-tablet-align-right {
+ text-align: right; }
+ .elementor-tablet-align-right .elementor-button {
+ width: auto; }
+ .elementor-tablet-align-left {
+ text-align: left; }
+ .elementor-tablet-align-left .elementor-button {
+ width: auto; }
+ .elementor-tablet-align-justify .elementor-button {
+ width: 100%; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-mobile-align-center {
+ text-align: center; }
+ .elementor-mobile-align-center .elementor-button {
+ width: auto; }
+ .elementor-mobile-align-right {
+ text-align: right; }
+ .elementor-mobile-align-right .elementor-button {
+ width: auto; }
+ .elementor-mobile-align-left {
+ text-align: left; }
+ .elementor-mobile-align-left .elementor-button {
+ width: auto; }
+ .elementor-mobile-align-justify .elementor-button {
+ width: 100%; } }
+
+#wpadminbar #wp-admin-bar-elementor_edit_page > .ab-item::before {
+ content: "\e801";
+ font-family: eicons;
+ top: 3px;
+ font-size: 18px; }
+
+#wpadminbar #wp-admin-bar-elementor_inspector > .ab-item::before {
+ content: "\f348";
+ top: 2px; }
+
+.elementor:after {
+ position: absolute;
+ opacity: 0;
+ width: 0;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0; }
+ @media (min-width: ELEMENTOR_SCREEN_LG_MIN) {
+ .elementor:after {
+ content: 'desktop'; } }
+ @media (min-width: ELEMENTOR_SCREEN_MD_MIN) and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor:after {
+ content: 'tablet'; } }
+ @media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor:after {
+ content: 'mobile'; } }
+
+.elementor-section {
+ position: relative; }
+ .elementor-section .elementor-container {
+ display: flex;
+ margin-right: auto;
+ margin-left: auto;
+ position: relative; }
+ .elementor-section.elementor-section-boxed > .elementor-container {
+ max-width: 1140px; }
+ .elementor-section.elementor-section-stretched {
+ position: relative;
+ width: 100%; }
+ .elementor-section.elementor-section-items-top > .elementor-container {
+ align-items: flex-start; }
+ .elementor-section.elementor-section-items-middle > .elementor-container {
+ align-items: center; }
+ .elementor-section.elementor-section-items-bottom > .elementor-container {
+ align-items: flex-end; }
+ @media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-section.elementor-section-height-full {
+ height: 100vh; }
+ .elementor-section.elementor-section-height-full > .elementor-container {
+ height: 100%; } }
+
+.elementor-section-content-top > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap {
+ align-items: flex-start; }
+
+.elementor-section-content-middle > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap {
+ align-items: center; }
+
+.elementor-section-content-bottom > .elementor-container > .elementor-row > .elementor-column > .elementor-column-wrap {
+ align-items: flex-end; }
+
+.elementor-row {
+ width: 100%;
+ display: flex; }
+ @media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-row {
+ flex-wrap: wrap; } }
+
+.elementor-column-wrap {
+ width: 100%;
+ position: relative;
+ display: flex; }
+
+.elementor-widget-wrap {
+ position: relative;
+ width: 100%; }
+
+.elementor-widget {
+ position: relative; }
+ .elementor-widget:not(:last-child) {
+ margin-bottom: 20px; }
+
+.elementor-column {
+ position: relative;
+ min-height: 1px;
+ display: flex; }
+
+.elementor-column-gap-narrow > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 5px; }
+
+.elementor-column-gap-default > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 10px; }
+
+.elementor-column-gap-extended > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 15px; }
+
+.elementor-column-gap-wide > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 20px; }
+
+.elementor-column-gap-wider > .elementor-row > .elementor-column > .elementor-element-populated {
+ padding: 30px; }
+
+.elementor-inner-section .elementor-column-gap-no .elementor-element-populated {
+ padding: 0; }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-column.elementor-col-10, .elementor-column[data-col="10"] {
+ width: 10%; }
+ .elementor-column.elementor-col-11, .elementor-column[data-col="11"] {
+ width: 11.111%; }
+ .elementor-column.elementor-col-12, .elementor-column[data-col="12"] {
+ width: 12.5%; }
+ .elementor-column.elementor-col-14, .elementor-column[data-col="14"] {
+ width: 14.285%; }
+ .elementor-column.elementor-col-16, .elementor-column[data-col="16"] {
+ width: 16.666%; }
+ .elementor-column.elementor-col-20, .elementor-column[data-col="20"] {
+ width: 20%; }
+ .elementor-column.elementor-col-25, .elementor-column[data-col="25"] {
+ width: 25%; }
+ .elementor-column.elementor-col-30, .elementor-column[data-col="30"] {
+ width: 30%; }
+ .elementor-column.elementor-col-33, .elementor-column[data-col="33"] {
+ width: 33.333%; }
+ .elementor-column.elementor-col-40, .elementor-column[data-col="40"] {
+ width: 40%; }
+ .elementor-column.elementor-col-50, .elementor-column[data-col="50"] {
+ width: 50%; }
+ .elementor-column.elementor-col-60, .elementor-column[data-col="60"] {
+ width: 60%; }
+ .elementor-column.elementor-col-66, .elementor-column[data-col="66"] {
+ width: 66.666%; }
+ .elementor-column.elementor-col-70, .elementor-column[data-col="70"] {
+ width: 70%; }
+ .elementor-column.elementor-col-75, .elementor-column[data-col="75"] {
+ width: 75%; }
+ .elementor-column.elementor-col-80, .elementor-column[data-col="80"] {
+ width: 80%; }
+ .elementor-column.elementor-col-83, .elementor-column[data-col="83"] {
+ width: 83.333%; }
+ .elementor-column.elementor-col-90, .elementor-column[data-col="90"] {
+ width: 90%; }
+ .elementor-column.elementor-col-100, .elementor-column[data-col="100"] {
+ width: 100%; } }
+
+@media (max-width: 479px) {
+ .elementor-column.elementor-xs-10 {
+ width: 10%; }
+ .elementor-column.elementor-xs-11 {
+ width: 11.111%; }
+ .elementor-column.elementor-xs-12 {
+ width: 12.5%; }
+ .elementor-column.elementor-xs-14 {
+ width: 14.285%; }
+ .elementor-column.elementor-xs-16 {
+ width: 16.666%; }
+ .elementor-column.elementor-xs-20 {
+ width: 20%; }
+ .elementor-column.elementor-xs-25 {
+ width: 25%; }
+ .elementor-column.elementor-xs-30 {
+ width: 30%; }
+ .elementor-column.elementor-xs-33 {
+ width: 33.333%; }
+ .elementor-column.elementor-xs-40 {
+ width: 40%; }
+ .elementor-column.elementor-xs-50 {
+ width: 50%; }
+ .elementor-column.elementor-xs-60 {
+ width: 60%; }
+ .elementor-column.elementor-xs-66 {
+ width: 66.666%; }
+ .elementor-column.elementor-xs-70 {
+ width: 70%; }
+ .elementor-column.elementor-xs-75 {
+ width: 75%; }
+ .elementor-column.elementor-xs-80 {
+ width: 80%; }
+ .elementor-column.elementor-xs-83 {
+ width: 83.333%; }
+ .elementor-column.elementor-xs-90 {
+ width: 90%; }
+ .elementor-column.elementor-xs-100 {
+ width: 100%; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-column.elementor-sm-10 {
+ width: 10%; }
+ .elementor-column.elementor-sm-11 {
+ width: 11.111%; }
+ .elementor-column.elementor-sm-12 {
+ width: 12.5%; }
+ .elementor-column.elementor-sm-14 {
+ width: 14.285%; }
+ .elementor-column.elementor-sm-16 {
+ width: 16.666%; }
+ .elementor-column.elementor-sm-20 {
+ width: 20%; }
+ .elementor-column.elementor-sm-25 {
+ width: 25%; }
+ .elementor-column.elementor-sm-30 {
+ width: 30%; }
+ .elementor-column.elementor-sm-33 {
+ width: 33.333%; }
+ .elementor-column.elementor-sm-40 {
+ width: 40%; }
+ .elementor-column.elementor-sm-50 {
+ width: 50%; }
+ .elementor-column.elementor-sm-60 {
+ width: 60%; }
+ .elementor-column.elementor-sm-66 {
+ width: 66.666%; }
+ .elementor-column.elementor-sm-70 {
+ width: 70%; }
+ .elementor-column.elementor-sm-75 {
+ width: 75%; }
+ .elementor-column.elementor-sm-80 {
+ width: 80%; }
+ .elementor-column.elementor-sm-83 {
+ width: 83.333%; }
+ .elementor-column.elementor-sm-90 {
+ width: 90%; }
+ .elementor-column.elementor-sm-100 {
+ width: 100%; } }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-column.elementor-md-10 {
+ width: 10%; }
+ .elementor-column.elementor-md-11 {
+ width: 11.111%; }
+ .elementor-column.elementor-md-12 {
+ width: 12.5%; }
+ .elementor-column.elementor-md-14 {
+ width: 14.285%; }
+ .elementor-column.elementor-md-16 {
+ width: 16.666%; }
+ .elementor-column.elementor-md-20 {
+ width: 20%; }
+ .elementor-column.elementor-md-25 {
+ width: 25%; }
+ .elementor-column.elementor-md-30 {
+ width: 30%; }
+ .elementor-column.elementor-md-33 {
+ width: 33.333%; }
+ .elementor-column.elementor-md-40 {
+ width: 40%; }
+ .elementor-column.elementor-md-50 {
+ width: 50%; }
+ .elementor-column.elementor-md-60 {
+ width: 60%; }
+ .elementor-column.elementor-md-66 {
+ width: 66.666%; }
+ .elementor-column.elementor-md-70 {
+ width: 70%; }
+ .elementor-column.elementor-md-75 {
+ width: 75%; }
+ .elementor-column.elementor-md-80 {
+ width: 80%; }
+ .elementor-column.elementor-md-83 {
+ width: 83.333%; }
+ .elementor-column.elementor-md-90 {
+ width: 90%; }
+ .elementor-column.elementor-md-100 {
+ width: 100%; } }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(1) {
+ order: 10; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(2) {
+ order: 9; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(3) {
+ order: 8; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(4) {
+ order: 7; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(5) {
+ order: 6; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(6) {
+ order: 5; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(7) {
+ order: 4; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(8) {
+ order: 3; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(9) {
+ order: 2; }
+ .elementor-reverse-tablet > .elementor-container > .elementor-row > :nth-child(10) {
+ order: 1; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(1) {
+ order: 10; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(2) {
+ order: 9; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(3) {
+ order: 8; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(4) {
+ order: 7; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(5) {
+ order: 6; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(6) {
+ order: 5; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(7) {
+ order: 4; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(8) {
+ order: 3; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(9) {
+ order: 2; }
+ .elementor-reverse-mobile > .elementor-container > .elementor-row > :nth-child(10) {
+ order: 1; }
+ .elementor-column {
+ width: 100%; } }
+
+ul.elementor-icon-list-items.elementor-inline-items {
+ display: flex;
+ flex-wrap: wrap; }
+ ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item {
+ word-break: break-word; }
+
+.elementor-grid .elementor-grid-item {
+ word-break: break-word;
+ min-width: 0; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+
+.elementor-grid-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+
+.elementor-grid-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; }
+
+@media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+ .elementor-grid-tablet-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-tablet-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-1 .elementor-grid {
+ grid-template-columns: repeat(1, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-2 .elementor-grid {
+ grid-template-columns: repeat(2, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-3 .elementor-grid {
+ grid-template-columns: repeat(3, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-4 .elementor-grid {
+ grid-template-columns: repeat(4, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-5 .elementor-grid {
+ grid-template-columns: repeat(5, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-6 .elementor-grid {
+ grid-template-columns: repeat(6, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-7 .elementor-grid {
+ grid-template-columns: repeat(7, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-8 .elementor-grid {
+ grid-template-columns: repeat(8, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-9 .elementor-grid {
+ grid-template-columns: repeat(9, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-10 .elementor-grid {
+ grid-template-columns: repeat(10, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-11 .elementor-grid {
+ grid-template-columns: repeat(11, 1fr);
+ display: grid; }
+ .elementor-grid-mobile-0 .elementor-grid {
+ display: flex;
+ overflow: hidden;
+ flex-wrap: wrap; }
+ .elementor-grid-mobile-12 .elementor-grid {
+ grid-template-columns: repeat(12, 1fr);
+ display: grid; } }
+
+.elementor-screen-only,
+.screen-reader-text,
+.screen-reader-text span,
+.ui-helper-hidden-accessible {
+ position: absolute;
+ top: -10000em;
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0; }
+
+.elementor-clearfix:after {
+ content: '';
+ display: block;
+ clear: both;
+ width: 0;
+ height: 0; }
+
+.elementor-form-fields-wrapper {
+ display: flex;
+ flex-wrap: wrap; }
+ .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > textarea, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group > .elementor-select-wrapper, .elementor-form-fields-wrapper.elementor-labels-above > .elementor-field-group .elementor-field-subgroup {
+ flex-basis: 100%;
+ max-width: 100%; }
+ .elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group > input, .elementor-form-fields-wrapper.elementor-labels-inline > .elementor-field-group .elementor-select-wrapper {
+ flex-grow: 1; }
+
+.elementor-field-group {
+ flex-wrap: wrap;
+ align-items: center; }
+ .elementor-field-group.elementor-field-type-submit {
+ align-items: flex-end; }
+ .elementor-field-group .elementor-field-textual {
+ width: 100%;
+ max-width: 100%;
+ border: 1px solid #818a91;
+ background-color: transparent;
+ color: #373a3c;
+ vertical-align: middle;
+ flex-grow: 1; }
+ .elementor-field-group .elementor-field-textual:focus {
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset;
+ outline: 0; }
+ .elementor-field-group .elementor-field-textual::-webkit-input-placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-field-textual:-ms-input-placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-field-textual::-moz-placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-field-textual:-moz-placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-field-textual::placeholder {
+ color: inherit;
+ font-family: inherit;
+ opacity: 0.6; }
+ .elementor-field-group .elementor-select-wrapper {
+ display: flex;
+ position: relative;
+ width: 100%; }
+ .elementor-field-group .elementor-select-wrapper select {
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ color: inherit;
+ font-size: inherit;
+ font-family: inherit;
+ font-weight: inherit;
+ font-style: inherit;
+ text-transform: inherit;
+ letter-spacing: inherit;
+ line-height: inherit;
+ flex-basis: 100%;
+ padding-right: 20px; }
+ .elementor-field-group .elementor-select-wrapper:before {
+ content: '\f0d7';
+ font-family: 'FontAwesome';
+ font-size: 15px;
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ right: 10px;
+ pointer-events: none; }
+ .elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before {
+ content: ''; }
+
+.elementor-field-subgroup {
+ display: flex;
+ flex-wrap: wrap; }
+ .elementor-field-subgroup .elementor-field-option label {
+ display: inline-block; }
+ .elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option {
+ padding-right: 10px; }
+ .elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option {
+ flex-basis: 100%; }
+
+.elementor-field-label {
+ cursor: pointer; }
+ .elementor-mark-required .elementor-field-label:after {
+ content: '*';
+ color: red;
+ padding-left: 0.2em; }
+
+.elementor-field-textual {
+ line-height: 1.4; }
+ .elementor-field-textual.elementor-size-xs {
+ font-size: 13px;
+ min-height: 33px;
+ padding: 4px 12px;
+ border-radius: 2px; }
+ .elementor-field-textual.elementor-size-sm {
+ font-size: 15px;
+ min-height: 40px;
+ padding: 5px 14px;
+ border-radius: 3px; }
+ .elementor-field-textual.elementor-size-md {
+ font-size: 16px;
+ min-height: 47px;
+ padding: 6px 16px;
+ border-radius: 4px; }
+ .elementor-field-textual.elementor-size-lg {
+ font-size: 18px;
+ min-height: 59px;
+ padding: 7px 20px;
+ border-radius: 5px; }
+ .elementor-field-textual.elementor-size-xl {
+ font-size: 20px;
+ min-height: 72px;
+ padding: 8px 24px;
+ border-radius: 6px; }
+
+.elementor-button-align-center .elementor-field-type-submit {
+ justify-content: center; }
+
+.elementor-button-align-stretch .elementor-field-type-submit button {
+ flex-basis: 100%; }
+
+.elementor-button-align-start .elementor-field-type-submit {
+ justify-content: flex-start; }
+
+.elementor-button-align-end .elementor-field-type-submit {
+ justify-content: flex-end; }
+
+@media screen and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-tablet-button-align-center .elementor-field-type-submit {
+ justify-content: center; }
+ .elementor-tablet-button-align-stretch .elementor-field-type-submit button {
+ flex-basis: 100%; }
+ .elementor-tablet-button-align-start .elementor-field-type-submit {
+ justify-content: flex-start; }
+ .elementor-tablet-button-align-end .elementor-field-type-submit {
+ justify-content: flex-end; } }
+
+@media screen and (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-mobile-button-align-center .elementor-field-type-submit {
+ justify-content: center; }
+ .elementor-mobile-button-align-stretch .elementor-field-type-submit button {
+ flex-basis: 100%; }
+ .elementor-mobile-button-align-start .elementor-field-type-submit {
+ justify-content: flex-start; }
+ .elementor-mobile-button-align-end .elementor-field-type-submit {
+ justify-content: flex-end; } }
+
+.elementor-error .elementor-field {
+ border-color: #d9534f; }
+
+.elementor-error .help-inline {
+ color: #d9534f;
+ font-size: 0.9em; }
+
+.elementor-message {
+ margin: 10px 0;
+ font-size: 1em;
+ line-height: 1; }
+ .elementor-message:before {
+ content: "\f00c";
+ display: inline-block;
+ font-family: fontawesome;
+ font-weight: normal;
+ font-style: normal;
+ vertical-align: middle;
+ margin-right: 5px; }
+ .elementor-message.elementor-message-danger {
+ color: #d9534f; }
+ .elementor-message.elementor-message-danger:before {
+ content: "\f00d"; }
+ .elementor-message.form-message-success {
+ color: #5cb85c; }
+
+.elementor-form .elementor-button {
+ padding-top: 0;
+ padding-bottom: 0;
+ border: 0 none; }
+ .elementor-form .elementor-button > span {
+ display: flex;
+ justify-content: center; }
+ .elementor-form .elementor-button .elementor-align-icon-right {
+ order: 2; }
+ .elementor-form .elementor-button .elementor-align-icon-left {
+ order: 0; }
+ .elementor-form .elementor-button.elementor-size-xs {
+ min-height: 33px; }
+ .elementor-form .elementor-button.elementor-size-sm {
+ min-height: 40px; }
+ .elementor-form .elementor-button.elementor-size-md {
+ min-height: 47px; }
+ .elementor-form .elementor-button.elementor-size-lg {
+ min-height: 59px; }
+ .elementor-form .elementor-button.elementor-size-xl {
+ min-height: 72px; }
+
+.elementor-element .elementor-widget-container {
+ transition: background 0.3s, border 0.3s, border-radius 0.3s, box-shadow 0.3s; }
+
+.elementor-accordion {
+ text-align: left; }
+ .elementor-accordion .elementor-accordion-item {
+ border: 1px solid #D4D4D4; }
+ .elementor-accordion .elementor-accordion-item + .elementor-accordion-item {
+ border-top: none; }
+ .elementor-accordion .elementor-tab-title {
+ margin: 0;
+ padding: 15px 20px;
+ font-weight: bold;
+ line-height: 1;
+ cursor: pointer;
+ outline: none; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon {
+ display: inline-block;
+ width: 1.5em; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right {
+ float: right;
+ text-align: right; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left {
+ float: left;
+ text-align: left; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed {
+ display: block; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened {
+ display: none; }
+ .elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed {
+ display: none; }
+ .elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened {
+ display: block; }
+ .elementor-accordion .elementor-tab-content {
+ display: none;
+ padding: 15px 20px;
+ border-top: 1px solid #D4D4D4; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-accordion .elementor-tab-title {
+ padding: 12px 15px; }
+ .elementor-accordion .elementor-tab-title .elementor-accordion-icon {
+ width: 1.2em; }
+ .elementor-accordion .elementor-tab-content {
+ padding: 7px 15px; } }
+
+.elementor-alert {
+ padding: 15px;
+ border-left: 5px solid transparent;
+ position: relative;
+ text-align: left; }
+ .elementor-alert .elementor-alert-title {
+ display: block;
+ font-weight: bold; }
+ .elementor-alert .elementor-alert-description {
+ font-size: 13px; }
+ .elementor-alert button.elementor-alert-dismiss {
+ position: absolute;
+ right: 10px;
+ top: 10px;
+ padding: 3px;
+ font-size: 20px;
+ line-height: 1;
+ background: transparent;
+ color: inherit;
+ border: none;
+ cursor: pointer; }
+ .elementor-alert.elementor-alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bcdff1; }
+ .elementor-alert.elementor-alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #cae6be; }
+ .elementor-alert.elementor-alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #f9f0c3; }
+ .elementor-alert.elementor-alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #e8c4c4; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-alert {
+ padding: 10px; }
+ .elementor-alert button.elementor-alert-dismiss {
+ right: 7px;
+ top: 7px; } }
+
+.elementor-button {
+ display: inline-block;
+ line-height: 1;
+ background-color: #818a91;
+ color: #fff;
+ text-align: center;
+ transition: all 0.5s; }
+ .elementor-button:hover, .elementor-button:focus, .elementor-button:visited {
+ color: #fff; }
+ .elementor-button.elementor-size-xs {
+ font-size: 13px;
+ padding: 10px 20px;
+ border-radius: 2px; }
+ .elementor-button.elementor-size-sm {
+ font-size: 15px;
+ padding: 12px 24px;
+ border-radius: 3px; }
+ .elementor-button.elementor-size-md {
+ font-size: 16px;
+ padding: 15px 30px;
+ border-radius: 4px; }
+ .elementor-button.elementor-size-lg {
+ font-size: 18px;
+ padding: 20px 40px;
+ border-radius: 5px; }
+ .elementor-button.elementor-size-xl {
+ font-size: 20px;
+ padding: 25px 50px;
+ border-radius: 6px; }
+ .elementor-button .elementor-align-icon-right {
+ float: right;
+ margin-left: 5px; }
+ .elementor-button .elementor-align-icon-left {
+ float: left;
+ margin-right: 5px; }
+ .elementor-button .elementor-button-text {
+ display: inline-block; }
+ .elementor-button span {
+ text-decoration: inherit; }
+
+.elementor-element.elementor-button-info .elementor-button {
+ background-color: #5bc0de; }
+
+.elementor-element.elementor-button-success .elementor-button {
+ background-color: #5cb85c; }
+
+.elementor-element.elementor-button-warning .elementor-button {
+ background-color: #f0ad4e; }
+
+.elementor-element.elementor-button-danger .elementor-button {
+ background-color: #d9534f; }
+
+.elementor-widget-button .elementor-button .elementor-button-info {
+ background-color: #5bc0de; }
+
+.elementor-widget-button .elementor-button .elementor-button-success {
+ background-color: #5cb85c; }
+
+.elementor-widget-button .elementor-button .elementor-button-warning {
+ background-color: #f0ad4e; }
+
+.elementor-widget-button .elementor-button .elementor-button-danger {
+ background-color: #d9534f; }
+
+.elementor-counter .elementor-counter-number-wrapper {
+ display: flex;
+ font-size: 69px;
+ font-weight: 600;
+ color: #222222;
+ line-height: 1; }
+
+.elementor-counter .elementor-counter-number-prefix, .elementor-counter .elementor-counter-number-suffix {
+ flex-grow: 1;
+ white-space: pre-wrap; }
+
+.elementor-counter .elementor-counter-number-prefix {
+ text-align: right; }
+
+.elementor-counter .elementor-counter-number-suffix {
+ text-align: left; }
+
+.elementor-counter .elementor-counter-title {
+ text-align: center;
+ font-size: 19px;
+ font-weight: 400;
+ color: #666666;
+ line-height: 2.5; }
+
+.elementor-widget-divider .elementor-divider {
+ line-height: 0;
+ font-size: 0; }
+
+.elementor-widget-divider .elementor-divider-separator {
+ display: inline-block; }
+
+.elementor-image-gallery .gallery-item {
+ display: inline-block;
+ text-align: center;
+ vertical-align: top;
+ width: 100%;
+ max-width: 100%;
+ margin: 0 auto; }
+ .elementor-image-gallery .gallery-item img {
+ margin: 0 auto; }
+ .elementor-image-gallery .gallery-item .gallery-caption {
+ margin: 0; }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-image-gallery .gallery-columns-2 .gallery-item {
+ max-width: 50%; }
+ .elementor-image-gallery .gallery-columns-3 .gallery-item {
+ max-width: 33.33%; }
+ .elementor-image-gallery .gallery-columns-4 .gallery-item {
+ max-width: 25%; }
+ .elementor-image-gallery .gallery-columns-5 .gallery-item {
+ max-width: 20%; }
+ .elementor-image-gallery .gallery-columns-6 .gallery-item {
+ max-width: 16.666%; }
+ .elementor-image-gallery .gallery-columns-7 .gallery-item {
+ max-width: 14.28%; }
+ .elementor-image-gallery .gallery-columns-8 .gallery-item {
+ max-width: 12.5%; }
+ .elementor-image-gallery .gallery-columns-9 .gallery-item {
+ max-width: 11.11%; }
+ .elementor-image-gallery .gallery-columns-10 .gallery-item {
+ max-width: 10%; } }
+
+@media (min-width: 480px) and (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-image-gallery .gallery.gallery-columns-2 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-3 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-4 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-5 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-6 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-7 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-8 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-9 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-10 .gallery-item {
+ max-width: 50%; } }
+
+@media (max-width: 479px) {
+ .elementor-image-gallery .gallery.gallery-columns-2 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-3 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-4 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-5 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-6 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-7 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-8 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-9 .gallery-item, .elementor-image-gallery .gallery.gallery-columns-10 .gallery-item {
+ max-width: 100%; } }
+
+.elementor-widget-google_maps iframe {
+ height: 300px; }
+
+.elementor-widget-heading .elementor-heading-title {
+ padding: 0;
+ margin: 0;
+ line-height: 1; }
+ .elementor-widget-heading .elementor-heading-title > a {
+ color: inherit;
+ font-size: inherit; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-small {
+ font-size: 15px; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-medium {
+ font-size: 19px; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-large {
+ font-size: 29px; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-xl {
+ font-size: 39px; }
+ .elementor-widget-heading .elementor-heading-title.elementor-size-xxl {
+ font-size: 59px; }
+
+.elementor-icon {
+ display: inline-block;
+ line-height: 1;
+ transition: all 0.5s;
+ color: #818a91;
+ font-size: 50px;
+ text-align: center; }
+ .elementor-icon:hover {
+ color: #818a91; }
+ .elementor-icon i {
+ width: 1em;
+ height: 1em;
+ position: relative;
+ display: block; }
+ .elementor-icon i:before {
+ position: absolute;
+ left: 50%;
+ transform: translateX(-50%); }
+
+.elementor-view-stacked .elementor-icon {
+ padding: .5em;
+ background-color: #818a91;
+ color: #fff; }
+
+.elementor-view-framed .elementor-icon {
+ padding: .5em;
+ color: #818a91;
+ border: 3px solid #818a91;
+ background-color: transparent; }
+
+.elementor-shape-circle .elementor-icon {
+ border-radius: 50%; }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper {
+ display: flex; }
+ .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon, .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon {
+ flex: 0 0 auto; }
+ .elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper {
+ text-align: right;
+ flex-direction: row-reverse; }
+ .elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper {
+ text-align: left;
+ flex-direction: row; }
+ .elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img {
+ margin: auto; }
+ .elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper {
+ align-items: flex-start; }
+ .elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper {
+ align-items: center; }
+ .elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper {
+ align-items: flex-end; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-widget-icon-box .elementor-icon-box-icon {
+ margin-left: auto !important;
+ margin-right: auto !important;
+ margin-bottom: 15px; } }
+
+.elementor-widget-icon-box .elementor-icon-box-wrapper {
+ text-align: center; }
+
+.elementor-widget-icon-box .elementor-icon-box-title a {
+ color: inherit; }
+
+.elementor-widget-icon-box .elementor-icon-box-description {
+ margin: 0; }
+
+.elementor-widget .elementor-icon-list-items.elementor-inline-items {
+ margin-right: -8px;
+ margin-left: -8px; }
+ .elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item {
+ margin-right: 8px;
+ margin-left: 8px; }
+ .elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after {
+ width: auto;
+ left: auto;
+ right: auto;
+ position: relative;
+ height: 100%;
+ top: 50%;
+ transform: translateY(-50%);
+ border-top: 0;
+ border-bottom: 0;
+ border-right: 0;
+ border-left-width: 1px;
+ border-style: solid;
+ right: -8px; }
+
+.elementor-widget .elementor-icon-list-items {
+ list-style-type: none;
+ margin: 0;
+ padding: 0; }
+
+.elementor-widget .elementor-icon-list-item {
+ margin: 0;
+ padding: 0;
+ position: relative; }
+ .elementor-widget .elementor-icon-list-item:after {
+ position: absolute;
+ bottom: 0;
+ width: 100%; }
+ .elementor-widget .elementor-icon-list-item, .elementor-widget .elementor-icon-list-item a {
+ display: flex;
+ align-items: flex-start; }
+ .elementor-widget .elementor-icon-list-item a {
+ width: 100%; }
+
+.elementor-widget .elementor-icon-list-icon + .elementor-icon-list-text {
+ align-self: center;
+ padding-left: 5px; }
+
+.elementor-widget .elementor-icon-list-icon {
+ text-align: center; }
+
+.elementor-widget.elementor-align-center .elementor-icon-list-item, .elementor-widget.elementor-align-center .elementor-icon-list-item a {
+ justify-content: center; }
+
+.elementor-widget.elementor-align-center .elementor-icon-list-item:after {
+ margin: auto; }
+
+.elementor-widget.elementor-align-center .elementor-inline-items {
+ justify-content: center; }
+
+.elementor-widget.elementor-align-left .elementor-icon-list-item, .elementor-widget.elementor-align-left .elementor-icon-list-item a {
+ justify-content: flex-start;
+ text-align: left; }
+
+.elementor-widget.elementor-align-left .elementor-inline-items {
+ justify-content: flex-start; }
+
+.elementor-widget.elementor-align-right .elementor-icon-list-item, .elementor-widget.elementor-align-right .elementor-icon-list-item a {
+ justify-content: flex-end;
+ text-align: right; }
+
+.elementor-widget.elementor-align-right .elementor-icon-list-items {
+ justify-content: flex-end; }
+
+.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after {
+ left: 0; }
+
+.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after {
+ right: 0; }
+
+@media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-widget.elementor-tablet-align-center .elementor-icon-list-items {
+ justify-content: center; }
+ .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a {
+ justify-content: center; }
+ .elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after {
+ margin: auto; }
+ .elementor-widget.elementor-tablet-align-left .elementor-icon-list-items {
+ justify-content: flex-start; }
+ .elementor-widget.elementor-tablet-align-left .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a {
+ justify-content: flex-start;
+ text-align: left; }
+ .elementor-widget.elementor-tablet-align-right .elementor-icon-list-items {
+ justify-content: flex-end; }
+ .elementor-widget.elementor-tablet-align-right .elementor-icon-list-item, .elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a {
+ justify-content: flex-end;
+ text-align: right; }
+ .elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after {
+ left: 0; }
+ .elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after {
+ right: 0; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-widget.elementor-mobile-align-center .elementor-icon-list-items {
+ justify-content: center; }
+ .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a {
+ justify-content: center; }
+ .elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after {
+ margin: auto; }
+ .elementor-widget.elementor-mobile-align-left .elementor-icon-list-items {
+ justify-content: flex-start; }
+ .elementor-widget.elementor-mobile-align-left .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a {
+ justify-content: flex-start;
+ text-align: left; }
+ .elementor-widget.elementor-mobile-align-right .elementor-icon-list-items {
+ justify-content: flex-end; }
+ .elementor-widget.elementor-mobile-align-right .elementor-icon-list-item, .elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a {
+ justify-content: flex-end;
+ text-align: right; }
+ .elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after {
+ left: 0; }
+ .elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after {
+ right: 0; } }
+
+.elementor-widget-image {
+ text-align: center; }
+ .elementor-widget-image .elementor-image > a,
+ .elementor-widget-image .elementor-image figure > a {
+ display: block; }
+ .elementor-widget-image .elementor-image img {
+ vertical-align: middle;
+ display: inline-block; }
+ .elementor-widget-image .elementor-image.elementor-image-shape-circle {
+ border-radius: 50%; }
+
+.elementor-widget-image-box .elementor-image-box-content {
+ width: 100%; }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper, .elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper {
+ display: flex; }
+ .elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper {
+ text-align: right;
+ flex-direction: row-reverse; }
+ .elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper {
+ text-align: left;
+ flex-direction: row; }
+ .elementor-widget-image-box.elementor-position-top .elementor-image-box-img {
+ margin: auto; }
+ .elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper {
+ align-items: flex-start; }
+ .elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper {
+ align-items: center; }
+ .elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper {
+ align-items: flex-end; } }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-widget-image-box .elementor-image-box-img {
+ margin-left: auto !important;
+ margin-right: auto !important;
+ margin-bottom: 15px; } }
+
+.elementor-widget-image-box .elementor-image-box-img {
+ display: inline-block; }
+
+.elementor-widget-image-box .elementor-image-box-title a {
+ color: inherit; }
+
+.elementor-widget-image-box .elementor-image-box-wrapper {
+ text-align: center; }
+
+.elementor-widget-image-box .elementor-image-box-description {
+ margin: 0; }
+
+.elementor-image-carousel-wrapper .slick-image-stretch .slick-slide .slick-slide-image {
+ width: 100%; }
+
+.elementor-image-gallery figure img {
+ display: block; }
+
+.elementor-image-gallery figure figcaption {
+ width: 100%; }
+
+.gallery-spacing-custom .elementor-image-gallery .gallery-icon {
+ padding: 0; }
+
+.swiper-container .swiper-slide figure {
+ line-height: 0; }
+ .swiper-container .swiper-slide figure img {
+ width: 100%; }
+
+body.elementor-page .elementor-widget-menu-anchor {
+ margin-bottom: 0; }
+
+.elementor-widget-progress {
+ text-align: left; }
+
+.elementor-progress-wrapper {
+ position: relative;
+ background-color: #eeeeee;
+ color: #ffffff;
+ height: 30px;
+ line-height: 30px;
+ border-radius: 2px; }
+
+.elementor-progress-bar {
+ display: flex;
+ background-color: #818a91;
+ width: 0;
+ font-size: 11px;
+ border-radius: 2px;
+ transition: width 1s ease-in-out; }
+
+.elementor-progress-text {
+ flex-grow: 1;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ padding-left: 15px; }
+
+.elementor-progress-percentage {
+ padding-right: 15px; }
+
+.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar {
+ background-color: #5bc0de; }
+
+.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar {
+ background-color: #5cb85c; }
+
+.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar {
+ background-color: #f0ad4e; }
+
+.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar {
+ background-color: #d9534f; }
+
+.elementor-progress .elementor-title {
+ display: block; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-progress-wrapper {
+ height: 25px;
+ line-height: 25px; }
+ .elementor-progress-text {
+ padding-left: 10px; } }
+
+.elementor-social-icons-wrapper {
+ font-size: 0; }
+
+.elementor-social-icon {
+ font-size: 25px;
+ text-align: center;
+ padding: 0.5em;
+ margin-right: 5px;
+ cursor: pointer; }
+ .elementor-social-icon i {
+ color: white; }
+ .elementor-social-icon:last-child {
+ margin: 0; }
+ .elementor-social-icon:hover {
+ opacity: .9;
+ color: white; }
+ .elementor-social-icon-android {
+ background-color: #A4C639; }
+ .elementor-social-icon-apple {
+ background-color: #999999; }
+ .elementor-social-icon-behance {
+ background-color: #1769ff; }
+ .elementor-social-icon-bitbucket {
+ background-color: #205081; }
+ .elementor-social-icon-codepen {
+ background-color: #000000; }
+ .elementor-social-icon-delicious {
+ background-color: #3399ff; }
+ .elementor-social-icon-digg {
+ background-color: #005be2; }
+ .elementor-social-icon-dribbble {
+ background-color: #ea4c89; }
+ .elementor-social-icon-envelope {
+ background-color: #ea4335; }
+ .elementor-social-icon-facebook {
+ background-color: #3b5998; }
+ .elementor-social-icon-flickr {
+ background-color: #0063dc; }
+ .elementor-social-icon-foursquare {
+ background-color: #2d5be3; }
+ .elementor-social-icon-github {
+ background-color: #333333; }
+ .elementor-social-icon-google-plus {
+ background-color: #dd4b39; }
+ .elementor-social-icon-houzz {
+ background-color: #7ac142; }
+ .elementor-social-icon-instagram {
+ background-color: #262626; }
+ .elementor-social-icon-jsfiddle {
+ background-color: #487AA2; }
+ .elementor-social-icon-linkedin {
+ background-color: #0077b5; }
+ .elementor-social-icon-medium {
+ background-color: #00ab6b; }
+ .elementor-social-icon-meetup {
+ background-color: #ec1c40; }
+ .elementor-social-icon-mixcloud {
+ background-color: #273a4b; }
+ .elementor-social-icon-odnoklassniki {
+ background-color: #F4731C; }
+ .elementor-social-icon-pinterest {
+ background-color: #bd081c; }
+ .elementor-social-icon-product-hunt {
+ background-color: #da552f; }
+ .elementor-social-icon-reddit {
+ background-color: #ff4500; }
+ .elementor-social-icon-rss {
+ background-color: #f26522; }
+ .elementor-social-icon-shopping-cart {
+ background-color: #4CAF50; }
+ .elementor-social-icon-skype {
+ background-color: #00AFF0; }
+ .elementor-social-icon-slideshare {
+ background-color: #0077b5; }
+ .elementor-social-icon-snapchat {
+ background-color: #fffc00; }
+ .elementor-social-icon-soundcloud {
+ background-color: #ff8800; }
+ .elementor-social-icon-spotify {
+ background-color: #2ebd59; }
+ .elementor-social-icon-stack-overflow {
+ background-color: #fe7a15; }
+ .elementor-social-icon-steam {
+ background-color: #00adee; }
+ .elementor-social-icon-stumbleupon {
+ background-color: #EB4924; }
+ .elementor-social-icon-telegram {
+ background-color: #2CA5E0; }
+ .elementor-social-icon-thumb-tack {
+ background-color: #1aa1d8; }
+ .elementor-social-icon-tripadvisor {
+ background-color: #589442; }
+ .elementor-social-icon-tumblr {
+ background-color: #35465c; }
+ .elementor-social-icon-twitch {
+ background-color: #6441A5; }
+ .elementor-social-icon-twitter {
+ background-color: #1DA1F2; }
+ .elementor-social-icon-vimeo {
+ background-color: #1ab7ea; }
+ .elementor-social-icon-vk {
+ background-color: #45668e; }
+ .elementor-social-icon-weibo {
+ background-color: #df2029; }
+ .elementor-social-icon-weixin {
+ background-color: #7bb32e; }
+ .elementor-social-icon-whatsapp {
+ background-color: #25d366; }
+ .elementor-social-icon-wordpress {
+ background-color: #21759b; }
+ .elementor-social-icon-xing {
+ background-color: #026466; }
+ .elementor-social-icon-yelp {
+ background-color: #af0606; }
+ .elementor-social-icon-youtube {
+ background-color: #cd201f; }
+ .elementor-social-icon-500px {
+ background-color: #0099e5; }
+
+.elementor-shape-rounded .elementor-icon.elementor-social-icon {
+ border-radius: 10%; }
+
+.elementor-shape-circle .elementor-icon.elementor-social-icon {
+ border-radius: 50%; }
+
+.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper {
+ width: 25%;
+ flex-shrink: 0; }
+
+.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active {
+ border-right-style: none; }
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after {
+ height: 999em;
+ width: 0;
+ right: 0;
+ border-right-style: solid; }
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before {
+ top: 0;
+ transform: translateY(-100%); }
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after {
+ top: 100%; }
+
+.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title {
+ display: table-cell; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active {
+ border-bottom-style: none; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after {
+ bottom: 0;
+ height: 0;
+ width: 999em;
+ border-bottom-style: solid; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before {
+ right: 100%; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after {
+ left: 100%; }
+
+.elementor-widget-tabs .elementor-tab-title,
+.elementor-widget-tabs .elementor-tab-title:before,
+.elementor-widget-tabs .elementor-tab-title:after,
+.elementor-widget-tabs .elementor-tab-content,
+.elementor-widget-tabs .elementor-tabs-content-wrapper {
+ border: 1px none #D4D4D4; }
+
+.elementor-widget-tabs .elementor-tabs {
+ text-align: left; }
+
+.elementor-widget-tabs .elementor-tabs-wrapper {
+ overflow: hidden; }
+
+.elementor-widget-tabs .elementor-tab-title {
+ cursor: pointer;
+ outline: none; }
+
+.elementor-widget-tabs .elementor-tab-desktop-title {
+ position: relative;
+ padding: 20px 25px;
+ font-weight: bold;
+ line-height: 1;
+ border: solid transparent; }
+ .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active {
+ border-color: #D4D4D4; }
+ .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before, .elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after {
+ display: block;
+ content: '';
+ position: absolute; }
+
+.elementor-widget-tabs .elementor-tab-mobile-title {
+ padding: 10px 10px;
+ cursor: pointer; }
+
+.elementor-widget-tabs .elementor-tab-content {
+ padding: 20px;
+ display: none; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-tabs .elementor-tab-title,
+ .elementor-tabs .elementor-tab-content {
+ border-style: solid;
+ border-bottom-style: none; }
+ .elementor-tabs .elementor-tabs-wrapper {
+ display: none; }
+ .elementor-tabs .elementor-tabs-content-wrapper {
+ border-bottom-style: solid; }
+ .elementor-tabs .elementor-tab-content {
+ padding: 10px; } }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) {
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs {
+ display: flex; }
+ .elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper {
+ flex-grow: 1;
+ border-style: solid;
+ border-left-style: none; }
+ .elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content {
+ border-style: solid;
+ border-top-style: none; }
+ .elementor-tabs .elementor-tab-mobile-title {
+ display: none; } }
+
+.elementor-testimonial-wrapper {
+ overflow: hidden;
+ text-align: center; }
+ .elementor-testimonial-wrapper .elementor-testimonial-content {
+ font-size: 1.3em;
+ margin-bottom: 20px; }
+ .elementor-testimonial-wrapper .elementor-testimonial-name {
+ line-height: 1.5;
+ color: inherit; }
+ .elementor-testimonial-wrapper .elementor-testimonial-job {
+ font-size: 0.85em;
+ color: inherit; }
+ .elementor-testimonial-wrapper.elementor-testimonial-text-align-left {
+ text-align: left; }
+ .elementor-testimonial-wrapper.elementor-testimonial-text-align-right {
+ text-align: right; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta {
+ width: 100%;
+ line-height: 1; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta-inner {
+ display: inline-block; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,
+ .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image {
+ display: table-cell;
+ vertical-align: middle; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img {
+ width: 60px;
+ height: 60px;
+ border-radius: 50%;
+ object-fit: cover;
+ max-width: none; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image {
+ padding-right: 15px; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details {
+ text-align: left; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image {
+ display: block; }
+ .elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image {
+ margin-bottom: 20px; }
+
+.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap {
+ background-color: #818a91;
+ color: #fff; }
+
+.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap {
+ color: #818a91;
+ border: 3px solid;
+ background-color: transparent; }
+
+.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap {
+ margin-top: 8px; }
+ .elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter {
+ width: 1em;
+ height: 1em; }
+
+.elementor-widget-text-editor .elementor-drop-cap {
+ float: left;
+ text-align: center;
+ line-height: 1;
+ font-size: 50px; }
+ .elementor-widget-text-editor .elementor-drop-cap-letter {
+ display: inline-block; }
+
+.elementor-toggle {
+ text-align: left; }
+ .elementor-toggle .elementor-tab-title {
+ font-weight: bold;
+ line-height: 1;
+ margin: 0;
+ padding: 15px;
+ border-bottom: 1px solid #D4D4D4;
+ cursor: pointer;
+ outline: none; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon {
+ display: inline-block;
+ width: 1em; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right {
+ float: right;
+ text-align: right; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left {
+ float: left;
+ text-align: left; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed {
+ display: block; }
+ .elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened {
+ display: none; }
+ .elementor-toggle .elementor-tab-title.elementor-active {
+ border-bottom: none; }
+ .elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed {
+ display: none; }
+ .elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened {
+ display: block; }
+ .elementor-toggle .elementor-tab-content {
+ padding: 15px;
+ border-bottom: 1px solid #D4D4D4;
+ display: none; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-toggle .elementor-tab-title {
+ padding: 12px; }
+ .elementor-toggle .elementor-tab-content {
+ padding: 12px 10px; } }
+
+.elementor-widget-video .elementor-widget-container {
+ overflow: hidden; }
+
+.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-size: cover;
+ background-position: 50%; }
+
+.elementor-widget-video .elementor-custom-embed-image-overlay {
+ cursor: pointer;
+ text-align: center; }
+ .elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i {
+ opacity: 1; }
+ .elementor-widget-video .elementor-custom-embed-image-overlay img {
+ display: block;
+ width: 100%; }
+
+.slick-slider {
+ position: relative;
+ display: block;
+ box-sizing: border-box;
+ -webkit-touch-callout: none;
+ user-select: none;
+ touch-action: pan-y;
+ -webkit-tap-highlight-color: transparent; }
+
+.slick-list {
+ position: relative;
+ overflow: hidden;
+ display: block;
+ margin: 0;
+ padding: 0; }
+ .slick-list:focus {
+ outline: none; }
+ .slick-list.dragging {
+ cursor: pointer; }
+
+.slick-slider .slick-track,
+.slick-slider .slick-list {
+ transform: translate3d(0, 0, 0); }
+
+.slick-track {
+ position: relative;
+ left: 0;
+ top: 0;
+ display: block; }
+ .slick-track:before, .slick-track:after {
+ content: "";
+ display: table; }
+ .slick-track:after {
+ clear: both; }
+ .slick-loading .slick-track {
+ visibility: hidden; }
+
+.slick-slide {
+ float: left;
+ height: 100%;
+ min-height: 1px;
+ display: none; }
+ .elementor-slick-slider[dir="rtl"] .slick-slide {
+ float: right; }
+ .slick-slide img {
+ display: block; }
+ .slick-slide.slick-loading img {
+ display: none; }
+ .slick-slide.dragging img {
+ pointer-events: none; }
+ .slick-initialized .slick-slide {
+ display: block; }
+ .slick-loading .slick-slide {
+ visibility: hidden; }
+ .slick-vertical .slick-slide {
+ display: block;
+ height: auto;
+ border: 1px solid transparent; }
+
+.slick-arrow.slick-hidden {
+ display: none; }
+
+.elementor-slick-slider .slick-loading .slick-list {
+ background: #fff; }
+ .elementor-slick-slider .slick-loading .slick-list:after {
+ content: '\f1ce';
+ font-family: FontAwesome;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ animation: fa-spin 2s infinite linear;
+ font-size: 25px;
+ color: #a4afb7; }
+
+.elementor-slick-slider .slick-prev,
+.elementor-slick-slider .slick-next {
+ font-size: 0;
+ line-height: 0;
+ position: absolute;
+ top: 50%;
+ display: block;
+ width: 20px;
+ padding: 0;
+ transform: translate(0, -50%);
+ cursor: pointer;
+ color: transparent;
+ border: none;
+ outline: none;
+ background: transparent; }
+ .elementor-slick-slider .slick-prev:hover, .elementor-slick-slider .slick-prev:focus,
+ .elementor-slick-slider .slick-next:hover,
+ .elementor-slick-slider .slick-next:focus {
+ color: transparent;
+ outline: none;
+ background: transparent; }
+ .elementor-slick-slider .slick-prev:hover:before, .elementor-slick-slider .slick-prev:focus:before,
+ .elementor-slick-slider .slick-next:hover:before,
+ .elementor-slick-slider .slick-next:focus:before {
+ opacity: 1; }
+ .elementor-slick-slider .slick-prev.slick-disabled:before,
+ .elementor-slick-slider .slick-next.slick-disabled:before {
+ opacity: .25; }
+ .elementor-slick-slider .slick-prev:before,
+ .elementor-slick-slider .slick-next:before {
+ font-family: 'FontAwesome';
+ font-size: 35px;
+ line-height: 1;
+ opacity: .75;
+ color: white;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale; }
+
+.elementor-slick-slider .slick-prev {
+ left: -25px; }
+ [dir="rtl"] .elementor-slick-slider .slick-prev {
+ left: auto;
+ right: -25px; }
+ .elementor-slick-slider .slick-prev:before {
+ content: '\f104'; }
+ [dir="rtl"] .elementor-slick-slider .slick-prev:before {
+ content: '\f105'; }
+
+.elementor-slick-slider .slick-next {
+ right: -25px; }
+ [dir="rtl"] .elementor-slick-slider .slick-next {
+ left: -25px;
+ right: auto; }
+ .elementor-slick-slider .slick-next:before {
+ content: '\f105'; }
+ [dir="rtl"] .elementor-slick-slider .slick-next:before {
+ content: '\f104'; }
+
+.elementor-slick-slider .slick-dotted.slick-slider {
+ margin-bottom: 30px; }
+
+.elementor-slick-slider ul.slick-dots {
+ position: absolute;
+ bottom: -25px;
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ text-align: center;
+ line-height: 1; }
+ .elementor-slick-slider ul.slick-dots li {
+ position: relative;
+ display: inline-block;
+ width: 20px;
+ height: 20px;
+ margin: 0;
+ padding: 0;
+ cursor: pointer; }
+ .elementor-slick-slider ul.slick-dots li button {
+ font-size: 0;
+ line-height: 0;
+ display: block;
+ width: 20px;
+ height: 20px;
+ padding: 5px;
+ cursor: pointer;
+ color: transparent;
+ border: 0;
+ outline: none;
+ background: transparent; }
+ .elementor-slick-slider ul.slick-dots li button:hover, .elementor-slick-slider ul.slick-dots li button:focus {
+ outline: none; }
+ .elementor-slick-slider ul.slick-dots li button:hover:before, .elementor-slick-slider ul.slick-dots li button:focus:before {
+ opacity: 1; }
+ .elementor-slick-slider ul.slick-dots li button:before {
+ font-family: 'FontAwesome';
+ font-size: 6px;
+ line-height: 20px;
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 20px;
+ height: 20px;
+ content: '\f111';
+ text-align: center;
+ opacity: .25;
+ color: black;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale; }
+ .elementor-slick-slider ul.slick-dots li.slick-active button:before {
+ opacity: .75;
+ color: black; }
+
+.elementor-slick-slider .slick-arrows-inside .slick-prev {
+ left: 20px; }
+ [dir="rtl"] .elementor-slick-slider .slick-arrows-inside .slick-prev {
+ left: auto;
+ right: 20px; }
+
+.elementor-slick-slider .slick-arrows-inside .slick-next {
+ right: 20px; }
+ [dir="rtl"] .elementor-slick-slider .slick-arrows-inside .slick-next {
+ left: 20px;
+ right: auto; }
+
+.elementor-slick-slider .slick-dots-inside .slick-dots {
+ bottom: 5px; }
+
+.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider {
+ margin-bottom: 0; }
+
+.elementor-slick-slider .slick-slider .slick-prev,
+.elementor-slick-slider .slick-slider .slick-next {
+ z-index: 1; }
+
+.elementor-slick-slider .slick-slide img {
+ margin: auto; }
+
+/**
+ * Swiper 3.4.2
+ * Customized by Elementor team
+ */
+.swiper-container {
+ margin-left: auto;
+ margin-right: auto;
+ position: relative;
+ overflow: hidden;
+ /* Fix of Webkit flickering */
+ z-index: 1; }
+
+.swiper-container-no-flexbox .swiper-slide {
+ float: left; }
+
+.swiper-container-vertical > .swiper-wrapper {
+ flex-direction: column; }
+
+.swiper-wrapper {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ display: flex;
+ transition-property: transform;
+ box-sizing: content-box; }
+
+.swiper-container-android .swiper-slide, .swiper-wrapper {
+ transform: translate3d(0px, 0, 0); }
+
+.swiper-container-multirow > .swiper-wrapper {
+ flex-wrap: wrap; }
+
+.swiper-container-free-mode > .swiper-wrapper {
+ transition-timing-function: ease-out;
+ margin: 0 auto; }
+
+.swiper-slide {
+ flex-shrink: 0;
+ width: 100%;
+ height: 100%;
+ position: relative; }
+
+/* Auto Height */
+.swiper-container-autoheight {
+ height: auto; }
+ .swiper-container-autoheight .swiper-slide {
+ height: auto; }
+ .swiper-container-autoheight .swiper-wrapper {
+ align-items: flex-start;
+ transition-property: transform, height; }
+
+/* a11y */
+.swiper-container .swiper-notification {
+ position: absolute;
+ left: 0;
+ top: 0;
+ pointer-events: none;
+ opacity: 0;
+ z-index: -1000; }
+
+/* IE10 Windows Phone 8 Fixes */
+.swiper-wp8-horizontal {
+ touch-action: pan-y; }
+
+.swiper-wp8-vertical {
+ touch-action: pan-x; }
+
+/* Arrows */
+.swiper-button-prev, .swiper-button-next {
+ position: absolute;
+ top: 50%;
+ width: 27px;
+ height: 44px;
+ margin-top: -22px;
+ z-index: 10;
+ cursor: pointer;
+ background-size: 27px 44px;
+ background: no-repeat center; }
+
+.swiper-button-prev.swiper-button-disabled, .swiper-button-next.swiper-button-disabled {
+ opacity: 0.35;
+ cursor: auto;
+ pointer-events: none; }
+
+.swiper-button-prev, .swiper-container-rtl .swiper-button-next {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+ left: 10px;
+ right: auto; }
+
+.swiper-button-prev.swiper-button-black, .swiper-container-rtl .swiper-button-next.swiper-button-black {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); }
+
+.swiper-button-prev.swiper-button-white, .swiper-container-rtl .swiper-button-next.swiper-button-white {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); }
+
+.swiper-button-next, .swiper-container-rtl .swiper-button-prev {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
+ right: 10px;
+ left: auto; }
+
+.swiper-button-next.swiper-button-black, .swiper-container-rtl .swiper-button-prev.swiper-button-black {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E"); }
+
+.swiper-button-next.swiper-button-white, .swiper-container-rtl .swiper-button-prev.swiper-button-white {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E"); }
+
+/* Pagination Styles */
+.swiper-pagination {
+ position: absolute;
+ text-align: center;
+ transition: 300ms;
+ transform: translate3d(0, 0, 0);
+ z-index: 10; }
+ .swiper-pagination.swiper-pagination-hidden {
+ opacity: 0; }
+
+/* Common Styles */
+.swiper-pagination-fraction, .swiper-pagination-custom, .swiper-container-horizontal > .swiper-pagination-bullets {
+ bottom: 10px;
+ left: 0;
+ width: 100%; }
+
+/* Bullets */
+.swiper-pagination-bullet {
+ width: 6px;
+ height: 6px;
+ display: inline-block;
+ border-radius: 50%;
+ background: #000;
+ opacity: 0.2; }
+
+.swiper-pagination-fraction {
+ color: #000; }
+
+button.swiper-pagination-bullet {
+ border: none;
+ margin: 0;
+ padding: 0;
+ box-shadow: none;
+ appearance: none;
+ -webkit-appearance: none;
+ -moz-appearance: none; }
+
+.swiper-pagination-clickable .swiper-pagination-bullet {
+ cursor: pointer; }
+
+.swiper-pagination-white .swiper-pagination-bullet {
+ background: #fff; }
+
+.swiper-pagination-bullet-active {
+ opacity: 1; }
+
+.swiper-pagination-white .swiper-pagination-bullet-active {
+ background: #fff; }
+
+.swiper-pagination-black .swiper-pagination-bullet-active {
+ background: #000; }
+
+.swiper-container-vertical > .swiper-pagination-bullets {
+ right: 10px;
+ top: 50%;
+ transform: translate3d(0px, -50%, 0); }
+ .swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
+ margin: 5px 0;
+ display: block; }
+
+.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
+ margin: 0 6px; }
+
+/* Progress */
+.swiper-pagination-progress {
+ background: rgba(0, 0, 0, 0.25);
+ position: absolute; }
+ .swiper-pagination-progress .swiper-pagination-progressbar {
+ background: #000;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ transform: scale(0);
+ transform-origin: left top; }
+
+.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar {
+ transform-origin: right top; }
+
+.swiper-container-horizontal > .swiper-pagination-progress {
+ width: 100%;
+ height: 4px;
+ left: 0;
+ top: 0; }
+
+.swiper-container-vertical > .swiper-pagination-progress {
+ width: 4px;
+ height: 100%;
+ left: 0;
+ top: 0; }
+
+.swiper-pagination-progress.swiper-pagination-white {
+ background: rgba(255, 255, 255, 0.5); }
+ .swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar {
+ background: #fff; }
+
+.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar {
+ background: #000; }
+
+/* 3D Container */
+.swiper-container-3d {
+ perspective: 1200px; }
+ .swiper-container-3d .swiper-wrapper, .swiper-container-3d .swiper-slide, .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom, .swiper-container-3d .swiper-cube-shadow {
+ transform-style: preserve-3d; }
+ .swiper-container-3d .swiper-slide-shadow-left, .swiper-container-3d .swiper-slide-shadow-right, .swiper-container-3d .swiper-slide-shadow-top, .swiper-container-3d .swiper-slide-shadow-bottom {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ z-index: 10; }
+ .swiper-container-3d .swiper-slide-shadow-left {
+ background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
+ .swiper-container-3d .swiper-slide-shadow-right {
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
+ .swiper-container-3d .swiper-slide-shadow-top {
+ background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
+ .swiper-container-3d .swiper-slide-shadow-bottom {
+ background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0)); }
+
+/* Coverflow */
+.swiper-container-coverflow .swiper-wrapper, .swiper-container-flip .swiper-wrapper {
+ /* Windows 8 IE 10 fix */
+ -ms-perspective: 1200px; }
+
+/* Cube + Flip */
+.swiper-container-cube, .swiper-container-flip {
+ overflow: visible; }
+
+.swiper-container-cube .swiper-slide, .swiper-container-flip .swiper-slide {
+ pointer-events: none;
+ backface-visibility: hidden;
+ z-index: 1; }
+
+.swiper-container-cube .swiper-slide .swiper-slide, .swiper-container-flip .swiper-slide .swiper-slide {
+ pointer-events: none; }
+
+.swiper-container-cube .swiper-slide-active, .swiper-container-flip .swiper-slide-active, .swiper-container-cube .swiper-slide-active .swiper-slide-active, .swiper-container-flip .swiper-slide-active .swiper-slide-active {
+ pointer-events: auto; }
+
+.swiper-container-cube .swiper-slide-shadow-top, .swiper-container-flip .swiper-slide-shadow-top, .swiper-container-cube .swiper-slide-shadow-bottom, .swiper-container-flip .swiper-slide-shadow-bottom, .swiper-container-cube .swiper-slide-shadow-left, .swiper-container-flip .swiper-slide-shadow-left, .swiper-container-cube .swiper-slide-shadow-right, .swiper-container-flip .swiper-slide-shadow-right {
+ z-index: 0;
+ backface-visibility: hidden; }
+
+/* Cube */
+.swiper-container-cube .swiper-slide {
+ visibility: hidden;
+ transform-origin: 0 0;
+ width: 100%;
+ height: 100%; }
+
+.swiper-container-cube.swiper-container-rtl .swiper-slide {
+ transform-origin: 100% 0; }
+
+.swiper-container-cube .swiper-slide-active, .swiper-container-cube .swiper-slide-next, .swiper-container-cube .swiper-slide-prev, .swiper-container-cube .swiper-slide-next + .swiper-slide {
+ pointer-events: auto;
+ visibility: visible; }
+
+.swiper-container-cube .swiper-cube-shadow {
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ height: 100%;
+ background: #000;
+ opacity: 0.6;
+ -webkit-filter: blur(50px);
+ filter: blur(50px);
+ z-index: 0; }
+
+/* Fade */
+.swiper-container-fade.swiper-container-free-mode .swiper-slide {
+ transition-timing-function: ease-out; }
+
+.swiper-container-fade .swiper-slide {
+ pointer-events: none;
+ transition-property: opacity; }
+ .swiper-container-fade .swiper-slide .swiper-slide {
+ pointer-events: none; }
+
+.swiper-container-fade .swiper-slide-active {
+ pointer-events: auto; }
+ .swiper-container-fade .swiper-slide-active .swiper-slide-active {
+ pointer-events: auto; }
+
+.swiper-zoom-container {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ text-align: center; }
+ .swiper-zoom-container > img, .swiper-zoom-container > svg, .swiper-zoom-container > canvas {
+ max-width: 100%;
+ max-height: 100%;
+ object-fit: contain; }
+
+/* Scrollbar */
+.swiper-scrollbar {
+ border-radius: 10px;
+ position: relative;
+ -ms-touch-action: none;
+ background: rgba(0, 0, 0, 0.1); }
+
+.swiper-container-horizontal > .swiper-scrollbar {
+ position: absolute;
+ left: 1%;
+ bottom: 3px;
+ z-index: 50;
+ height: 5px;
+ width: 98%; }
+
+.swiper-container-vertical > .swiper-scrollbar {
+ position: absolute;
+ right: 3px;
+ top: 1%;
+ z-index: 50;
+ width: 5px;
+ height: 98%; }
+
+.swiper-scrollbar-drag {
+ height: 100%;
+ width: 100%;
+ position: relative;
+ background: rgba(0, 0, 0, 0.5);
+ border-radius: 10px;
+ left: 0;
+ top: 0; }
+
+.swiper-scrollbar-cursor-drag {
+ cursor: move; }
+
+/* Preloader */
+.swiper-lazy-preloader {
+ width: 42px;
+ height: 42px;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ margin-left: -21px;
+ margin-top: -21px;
+ z-index: 10;
+ transform-origin: 50%;
+ animation: swiper-preloader-spin 1s steps(12, end) infinite; }
+ .swiper-lazy-preloader:after {
+ display: block;
+ content: "";
+ width: 100%;
+ height: 100%;
+ background-size: 100%;
+ background: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") no-repeat 50%; }
+
+.swiper-lazy-preloader-white:after {
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); }
+
+@keyframes swiper-preloader-spin {
+ 100% {
+ transform: rotate(360deg); } }
+
+.elementor-lightbox .dialog-header {
+ display: none; }
+
+.elementor-lightbox .dialog-widget-content {
+ background: none;
+ box-shadow: none;
+ width: 100%;
+ height: 100%; }
+
+.elementor-lightbox .dialog-message {
+ animation-duration: .4s; }
+ .elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio) {
+ height: 100%; }
+
+.elementor-lightbox .dialog-lightbox-close-button {
+ cursor: pointer;
+ position: absolute;
+ font-size: 25px;
+ padding: 5px;
+ z-index: 2;
+ line-height: 1; }
+ @media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-lightbox .dialog-lightbox-close-button {
+ padding: 0; } }
+
+.elementor-lightbox .dialog-lightbox-close-button,
+.elementor-lightbox .elementor-swiper-button {
+ color: rgba(238, 238, 238, 0.9);
+ transition: all 0.5s;
+ opacity: 1; }
+ .elementor-lightbox .dialog-lightbox-close-button:hover,
+ .elementor-lightbox .elementor-swiper-button:hover {
+ color: #ffffff; }
+
+.elementor-lightbox .swiper-container {
+ height: 100%; }
+
+.elementor-lightbox .elementor-lightbox-item {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ padding: 70px 80px;
+ box-sizing: border-box;
+ height: 100%;
+ margin: auto; }
+ @media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-lightbox .elementor-lightbox-item {
+ padding: 40px; } }
+
+.elementor-lightbox .elementor-lightbox-image {
+ max-height: 100%; }
+
+.elementor-lightbox .elementor-video-container {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%); }
+ @media (min-width: ELEMENTOR_SCREEN_LG_MIN) {
+ .elementor-lightbox .elementor-video-container {
+ width: 75%; } }
+ @media (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor-lightbox .elementor-video-container {
+ width: 100%; } }
+
+.elementor-lightbox .elementor-swiper-button-prev {
+ left: 35px; }
+
+.elementor-lightbox .elementor-swiper-button-next {
+ right: 35px; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor-lightbox .elementor-swiper-button-prev {
+ left: 10px; }
+ .elementor-lightbox .elementor-swiper-button-next {
+ right: 10px; } }
+
+.animated {
+ animation-duration: 1.25s; }
+ .animated.animated-slow {
+ animation-duration: 2s; }
+ .animated.animated-fast {
+ animation-duration: .75s; }
+
+.animated.infinite {
+ animation-iteration-count: infinite; }
+
+/*
+.animated.hinge {
+ animation-duration: 2s;
+}
+
+
+.animated.flipOutX,
+.animated.flipOutY,
+.animated.bounceIn,
+.animated.bounceOut {
+ animation-duration: .75s;
+}
+*/
+.elementor-shape {
+ overflow: hidden;
+ position: absolute;
+ left: 0;
+ width: 100%;
+ line-height: 0;
+ direction: ltr; }
+ .elementor-shape-top {
+ top: -1px; }
+ .elementor-shape-bottom {
+ bottom: -1px; }
+ .elementor-shape[data-negative="false"].elementor-shape-bottom {
+ transform: rotate(180deg); }
+ .elementor-shape[data-negative="true"].elementor-shape-top {
+ transform: rotate(180deg); }
+ .elementor-shape svg {
+ display: block;
+ width: calc(100% + 1.3px);
+ position: relative;
+ left: 50%;
+ transform: translateX(-50%); }
+ .elementor-shape .elementor-shape-fill {
+ fill: #fff;
+ transform-origin: center;
+ transform: rotateY(0deg); }
+
+#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item {
+ display: flex;
+ width: 200px; }
+
+#wp-admin-bar-elementor_edit_page .elementor-edit-link-title {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ width: 100%; }
+
+#wp-admin-bar-elementor_edit_page .elementor-edit-link-type {
+ background: #55595c;
+ font-size: 11px;
+ line-height: 9px;
+ margin-top: 6px;
+ padding: 4px 8px;
+ border-radius: 3px; }
+
+.page-template-elementor_canvas.elementor-page:before {
+ display: none; }
+
+.elementor-post__thumbnail__link {
+ transition: none; }
+
+#left-area ul.elementor-icon-list-items,
+.elementor .elementor-element ul.elementor-icon-list-items,
+#elementor .elementor-element ul.elementor-icon-list-items {
+ padding: 0; }
+
+@media (max-width: ELEMENTOR_SCREEN_SM_MAX) {
+ .elementor .elementor-hidden-phone {
+ display: none; } }
+
+@media (min-width: ELEMENTOR_SCREEN_MD_MIN) and (max-width: ELEMENTOR_SCREEN_MD_MAX) {
+ .elementor .elementor-hidden-tablet {
+ display: none; } }
+
+@media (min-width: ELEMENTOR_SCREEN_LG_MIN) {
+ .elementor .elementor-hidden-desktop {
+ display: none; } }
--- /dev/null
+.dialog-widget-content{background-color:#fff;position:absolute;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);box-shadow:2px 8px 23px 3px rgba(0,0,0,.2);overflow:hidden}.dialog-message{font-size:12px;line-height:1.5}.dialog-type-lightbox{position:fixed;height:100%;width:100%;top:0;left:0;background-color:rgba(0,0,0,.8);z-index:9999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dialog-type-lightbox .dialog-widget-content{margin:auto;width:375px}.dialog-type-lightbox .dialog-header{padding:20px 0;font-weight:500}.dialog-type-lightbox .dialog-message{padding:0 20px 20px;min-height:50px}.dialog-type-lightbox .dialog-header,.dialog-type-lightbox .dialog-message{text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper{border-top:1px solid #e6e9ec;text-align:center}.dialog-type-lightbox .dialog-buttons-wrapper>button{border:none;background:none;font-size:15px;cursor:pointer;padding:13px 0;outline:0}.dialog-type-lightbox .dialog-buttons-wrapper>button:first-child{color:#6d7882}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-ok{color:#b01b1b}.dialog-type-lightbox .dialog-buttons-wrapper>button.dialog-take_over{color:#39b54a}.dialog-type-lightbox .dialog-buttons-wrapper>button:active{background-color:rgba(230,233,236,.5)}.dialog-type-lightbox .dialog-buttons-wrapper>button::-moz-focus-inner{border:0}.dialog-close-button{cursor:pointer;position:absolute;top:30px;right:30px;font-size:15px}.dialog-close-button:not(:hover){opacity:.4}.dialog-confirm-widget .dialog-header,.dialog-lightbox-widget .dialog-header{font-size:15px;color:#495157}.dialog-confirm-widget .dialog-buttons-wrapper>button,.dialog-lightbox-widget .dialog-buttons-wrapper>button{width:50%}.dialog-confirm-widget .dialog-buttons-wrapper>button:first-child,.dialog-lightbox-widget .dialog-buttons-wrapper>button:first-child{border-right:1px solid #e6e9ec}.dialog-confirm-widget .dialog-buttons-wrapper>button:hover,.dialog-lightbox-widget .dialog-buttons-wrapper>button:hover{background-color:#f4f6f7}.dialog-alert-widget .dialog-buttons-wrapper>button{width:100%}@media (max-width:767px){.dialog-close-button{top:15px;right:15px}body.admin-bar .dialog-close-button{top:40px}}.elementor-aspect-ratio-219 .elementor-fit-aspect-ratio{padding-bottom:42.8571%}.elementor-aspect-ratio-169 .elementor-fit-aspect-ratio{padding-bottom:56.25%}.elementor-aspect-ratio-43 .elementor-fit-aspect-ratio{padding-bottom:75%}.elementor-aspect-ratio-32 .elementor-fit-aspect-ratio{padding-bottom:66.6666%}.elementor-aspect-ratio-11 .elementor-fit-aspect-ratio{padding-bottom:100%}.elementor-fit-aspect-ratio{position:relative;height:0}.elementor-fit-aspect-ratio iframe{position:absolute;top:0;left:0;height:100%;width:100%;border:0}.elementor-hidden{display:none}.flatpickr-calendar{width:280px}.flatpickr-calendar .flatpickr-current-month span.cur-month{font-weight:300}.flatpickr-calendar .dayContainer{width:280px;min-width:280px;max-width:280px}.flatpickr-calendar .flatpickr-days{width:280px}.flatpickr-calendar .flatpickr-day{max-width:37px;height:37px;line-height:37px}.elementor{-webkit-hyphens:manual;-ms-hyphens:manual;hyphens:manual}.elementor *,.elementor :after,.elementor :before{-webkit-box-sizing:border-box;box-sizing:border-box}.elementor a{-webkit-box-shadow:none;box-shadow:none;text-decoration:none}.elementor hr{margin:0;background-color:transparent}.elementor img{height:auto;max-width:100%;border:none;-webkit-border-radius:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.elementor .elementor-widget:not(.elementor-widget-text-editor) figure{margin:0}.elementor embed,.elementor iframe,.elementor object,.elementor video{max-width:100%;width:100%;margin:0;line-height:1;border:none}.elementor .elementor-custom-embed{line-height:0}.elementor .elementor-background-video-container{height:100%;width:100%;top:0;left:0;position:absolute;overflow:hidden;z-index:0;-webkit-transition:opacity 1s;-o-transition:opacity 1s;transition:opacity 1s}.elementor .elementor-background-video-container.elementor-loading{opacity:0}.elementor .elementor-background-video-embed{max-width:none;position:absolute;top:50%;left:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor .elementor-background-video{position:absolute;max-width:none;top:50%;left:50%;-webkit-transform:translateY(-50%) translateX(-50%);-ms-transform:translateY(-50%) translateX(-50%);transform:translateY(-50%) translateX(-50%)}.elementor .elementor-html5-video{-o-object-fit:cover;object-fit:cover}.elementor .elementor-background-overlay{height:100%;width:100%;top:0;left:0;position:absolute}.elementor-invisible{visibility:hidden}.elementor-align-center{text-align:center}.elementor-align-center .elementor-button{width:auto}.elementor-align-right{text-align:right}.elementor-align-right .elementor-button{width:auto}.elementor-align-left{text-align:left}.elementor-align-left .elementor-button{width:auto}.elementor-align-justify .elementor-button{width:100%}.elementor-custom-embed-play{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.elementor-custom-embed-play i{font-size:100px;color:#fff;opacity:.8;text-shadow:1px 0 6px rgba(0,0,0,.3);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-custom-embed-play.elementor-playing i{font-family:FontAwesome;-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.elementor-custom-embed-play.elementor-playing i:before{content:"\f1ce"}.elementor-swiper-button{position:absolute;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;z-index:1;cursor:pointer;font-size:25px;color:hsla(0,0%,93%,.9);top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.elementor-swiper-button.swiper-button-disabled{opacity:.3}.elementor-tag{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-tablet-align-center{text-align:center}.elementor-tablet-align-center .elementor-button{width:auto}.elementor-tablet-align-right{text-align:right}.elementor-tablet-align-right .elementor-button{width:auto}.elementor-tablet-align-left{text-align:left}.elementor-tablet-align-left .elementor-button{width:auto}.elementor-tablet-align-justify .elementor-button{width:100%}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-mobile-align-center{text-align:center}.elementor-mobile-align-center .elementor-button{width:auto}.elementor-mobile-align-right{text-align:right}.elementor-mobile-align-right .elementor-button{width:auto}.elementor-mobile-align-left{text-align:left}.elementor-mobile-align-left .elementor-button{width:auto}.elementor-mobile-align-justify .elementor-button{width:100%}}#wpadminbar #wp-admin-bar-elementor_edit_page>.ab-item:before{content:"\e801";font-family:eicons;top:3px;font-size:18px}#wpadminbar #wp-admin-bar-elementor_inspector>.ab-item:before{content:"\f348";top:2px}.elementor:after{position:absolute;opacity:0;width:0;height:0;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}@media (min-width:ELEMENTOR_SCREEN_LG_MIN){.elementor:after{content:"desktop"}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN) and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor:after{content:"tablet"}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor:after{content:"mobile"}}.elementor-section{position:relative}.elementor-section .elementor-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-right:auto;margin-left:auto;position:relative}.elementor-section.elementor-section-boxed>.elementor-container{max-width:1140px}.elementor-section.elementor-section-stretched{position:relative;width:100%}.elementor-section.elementor-section-items-top>.elementor-container{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section.elementor-section-items-middle>.elementor-container{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section.elementor-section-items-bottom>.elementor-container{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-section.elementor-section-height-full{height:100vh}.elementor-section.elementor-section-height-full>.elementor-container{height:100%}}.elementor-section-content-top>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-section-content-middle>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-section-content-bottom>.elementor-container>.elementor-row>.elementor-column>.elementor-column-wrap{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-row{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-row{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}}.elementor-column-wrap{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-wrap,.elementor-widget-wrap{width:100%;position:relative}.elementor-widget{position:relative}.elementor-widget:not(:last-child){margin-bottom:20px}.elementor-column{position:relative;min-height:1px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-column-gap-narrow>.elementor-row>.elementor-column>.elementor-element-populated{padding:5px}.elementor-column-gap-default>.elementor-row>.elementor-column>.elementor-element-populated{padding:10px}.elementor-column-gap-extended>.elementor-row>.elementor-column>.elementor-element-populated{padding:15px}.elementor-column-gap-wide>.elementor-row>.elementor-column>.elementor-element-populated{padding:20px}.elementor-column-gap-wider>.elementor-row>.elementor-column>.elementor-element-populated{padding:30px}.elementor-inner-section .elementor-column-gap-no .elementor-element-populated{padding:0}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-column.elementor-col-10,.elementor-column[data-col="10"]{width:10%}.elementor-column.elementor-col-11,.elementor-column[data-col="11"]{width:11.111%}.elementor-column.elementor-col-12,.elementor-column[data-col="12"]{width:12.5%}.elementor-column.elementor-col-14,.elementor-column[data-col="14"]{width:14.285%}.elementor-column.elementor-col-16,.elementor-column[data-col="16"]{width:16.666%}.elementor-column.elementor-col-20,.elementor-column[data-col="20"]{width:20%}.elementor-column.elementor-col-25,.elementor-column[data-col="25"]{width:25%}.elementor-column.elementor-col-30,.elementor-column[data-col="30"]{width:30%}.elementor-column.elementor-col-33,.elementor-column[data-col="33"]{width:33.333%}.elementor-column.elementor-col-40,.elementor-column[data-col="40"]{width:40%}.elementor-column.elementor-col-50,.elementor-column[data-col="50"]{width:50%}.elementor-column.elementor-col-60,.elementor-column[data-col="60"]{width:60%}.elementor-column.elementor-col-66,.elementor-column[data-col="66"]{width:66.666%}.elementor-column.elementor-col-70,.elementor-column[data-col="70"]{width:70%}.elementor-column.elementor-col-75,.elementor-column[data-col="75"]{width:75%}.elementor-column.elementor-col-80,.elementor-column[data-col="80"]{width:80%}.elementor-column.elementor-col-83,.elementor-column[data-col="83"]{width:83.333%}.elementor-column.elementor-col-90,.elementor-column[data-col="90"]{width:90%}.elementor-column.elementor-col-100,.elementor-column[data-col="100"]{width:100%}}@media (max-width:479px){.elementor-column.elementor-xs-10{width:10%}.elementor-column.elementor-xs-11{width:11.111%}.elementor-column.elementor-xs-12{width:12.5%}.elementor-column.elementor-xs-14{width:14.285%}.elementor-column.elementor-xs-16{width:16.666%}.elementor-column.elementor-xs-20{width:20%}.elementor-column.elementor-xs-25{width:25%}.elementor-column.elementor-xs-30{width:30%}.elementor-column.elementor-xs-33{width:33.333%}.elementor-column.elementor-xs-40{width:40%}.elementor-column.elementor-xs-50{width:50%}.elementor-column.elementor-xs-60{width:60%}.elementor-column.elementor-xs-66{width:66.666%}.elementor-column.elementor-xs-70{width:70%}.elementor-column.elementor-xs-75{width:75%}.elementor-column.elementor-xs-80{width:80%}.elementor-column.elementor-xs-83{width:83.333%}.elementor-column.elementor-xs-90{width:90%}.elementor-column.elementor-xs-100{width:100%}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-column.elementor-sm-10{width:10%}.elementor-column.elementor-sm-11{width:11.111%}.elementor-column.elementor-sm-12{width:12.5%}.elementor-column.elementor-sm-14{width:14.285%}.elementor-column.elementor-sm-16{width:16.666%}.elementor-column.elementor-sm-20{width:20%}.elementor-column.elementor-sm-25{width:25%}.elementor-column.elementor-sm-30{width:30%}.elementor-column.elementor-sm-33{width:33.333%}.elementor-column.elementor-sm-40{width:40%}.elementor-column.elementor-sm-50{width:50%}.elementor-column.elementor-sm-60{width:60%}.elementor-column.elementor-sm-66{width:66.666%}.elementor-column.elementor-sm-70{width:70%}.elementor-column.elementor-sm-75{width:75%}.elementor-column.elementor-sm-80{width:80%}.elementor-column.elementor-sm-83{width:83.333%}.elementor-column.elementor-sm-90{width:90%}.elementor-column.elementor-sm-100{width:100%}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN) and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-column.elementor-md-10{width:10%}.elementor-column.elementor-md-11{width:11.111%}.elementor-column.elementor-md-12{width:12.5%}.elementor-column.elementor-md-14{width:14.285%}.elementor-column.elementor-md-16{width:16.666%}.elementor-column.elementor-md-20{width:20%}.elementor-column.elementor-md-25{width:25%}.elementor-column.elementor-md-30{width:30%}.elementor-column.elementor-md-33{width:33.333%}.elementor-column.elementor-md-40{width:40%}.elementor-column.elementor-md-50{width:50%}.elementor-column.elementor-md-60{width:60%}.elementor-column.elementor-md-66{width:66.666%}.elementor-column.elementor-md-70{width:70%}.elementor-column.elementor-md-75{width:75%}.elementor-column.elementor-md-80{width:80%}.elementor-column.elementor-md-83{width:83.333%}.elementor-column.elementor-md-90{width:90%}.elementor-column.elementor-md-100{width:100%}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN) and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-reverse-tablet>.elementor-container>.elementor-row>:first-child{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(2){-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(3){-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(4){-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(5){-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(6){-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(7){-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(8){-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(9){-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-reverse-tablet>.elementor-container>.elementor-row>:nth-child(10){-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-reverse-mobile>.elementor-container>.elementor-row>:first-child{-webkit-box-ordinal-group:11;-webkit-order:10;-ms-flex-order:10;order:10}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(2){-webkit-box-ordinal-group:10;-webkit-order:9;-ms-flex-order:9;order:9}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(3){-webkit-box-ordinal-group:9;-webkit-order:8;-ms-flex-order:8;order:8}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(4){-webkit-box-ordinal-group:8;-webkit-order:7;-ms-flex-order:7;order:7}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(5){-webkit-box-ordinal-group:7;-webkit-order:6;-ms-flex-order:6;order:6}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(6){-webkit-box-ordinal-group:6;-webkit-order:5;-ms-flex-order:5;order:5}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(7){-webkit-box-ordinal-group:5;-webkit-order:4;-ms-flex-order:4;order:4}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(8){-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(9){-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-reverse-mobile>.elementor-container>.elementor-row>:nth-child(10){-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.elementor-column{width:100%}}ul.elementor-icon-list-items.elementor-inline-items{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}ul.elementor-icon-list-items.elementor-inline-items .elementor-inline-item{word-break:break-word}.elementor-grid .elementor-grid-item{word-break:break-word;min-width:0}.elementor-grid-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-grid-tablet-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-tablet-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-tablet-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-tablet-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-tablet-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-tablet-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-tablet-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-tablet-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-tablet-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-tablet-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-tablet-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-tablet-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-tablet-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-grid-mobile-1 .elementor-grid{grid-template-columns:repeat(1,1fr);display:grid}.elementor-grid-mobile-2 .elementor-grid{grid-template-columns:repeat(2,1fr);display:grid}.elementor-grid-mobile-3 .elementor-grid{grid-template-columns:repeat(3,1fr);display:grid}.elementor-grid-mobile-4 .elementor-grid{grid-template-columns:repeat(4,1fr);display:grid}.elementor-grid-mobile-5 .elementor-grid{grid-template-columns:repeat(5,1fr);display:grid}.elementor-grid-mobile-6 .elementor-grid{grid-template-columns:repeat(6,1fr);display:grid}.elementor-grid-mobile-7 .elementor-grid{grid-template-columns:repeat(7,1fr);display:grid}.elementor-grid-mobile-8 .elementor-grid{grid-template-columns:repeat(8,1fr);display:grid}.elementor-grid-mobile-9 .elementor-grid{grid-template-columns:repeat(9,1fr);display:grid}.elementor-grid-mobile-10 .elementor-grid{grid-template-columns:repeat(10,1fr);display:grid}.elementor-grid-mobile-11 .elementor-grid{grid-template-columns:repeat(11,1fr);display:grid}.elementor-grid-mobile-0 .elementor-grid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-grid-mobile-12 .elementor-grid{grid-template-columns:repeat(12,1fr);display:grid}}.elementor-screen-only,.screen-reader-text,.screen-reader-text span,.ui-helper-hidden-accessible{position:absolute;top:-10000em;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.elementor-clearfix:after{content:"";display:block;clear:both;width:0;height:0}.elementor-form-fields-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group .elementor-field-subgroup,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>.elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>input,.elementor-form-fields-wrapper.elementor-labels-above>.elementor-field-group>textarea{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;max-width:100%}.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group .elementor-select-wrapper,.elementor-form-fields-wrapper.elementor-labels-inline>.elementor-field-group>input{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-field-group.elementor-field-type-submit{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}.elementor-field-group .elementor-field-textual{width:100%;max-width:100%;border:1px solid #818a91;background-color:transparent;color:#373a3c;vertical-align:middle;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.elementor-field-group .elementor-field-textual:focus{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.1) inset;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1);outline:0}.elementor-field-group .elementor-field-textual::-webkit-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual:-ms-input-placeholder,.elementor-field-group .elementor-field-textual::-ms-input-placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-field-textual::placeholder{color:inherit;font-family:inherit;opacity:.6}.elementor-field-group .elementor-select-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;position:relative;width:100%}.elementor-field-group .elementor-select-wrapper select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:inherit;font-size:inherit;font-family:inherit;font-weight:inherit;font-style:inherit;text-transform:inherit;letter-spacing:inherit;line-height:inherit;-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding-right:20px}.elementor-field-group .elementor-select-wrapper:before{content:"\f0d7";font-family:FontAwesome;font-size:15px;position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);right:10px;pointer-events:none}.elementor-field-group.elementor-field-type-select-multiple .elementor-select-wrapper:before{content:""}.elementor-field-subgroup{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.elementor-field-subgroup .elementor-field-option label{display:inline-block}.elementor-field-subgroup.elementor-subgroup-inline .elementor-field-option{padding-right:10px}.elementor-field-subgroup:not(.elementor-subgroup-inline) .elementor-field-option{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-field-label{cursor:pointer}.elementor-mark-required .elementor-field-label:after{content:"*";color:red;padding-left:.2em}.elementor-field-textual{line-height:1.4}.elementor-field-textual.elementor-size-xs{font-size:13px;min-height:33px;padding:4px 12px;-webkit-border-radius:2px;border-radius:2px}.elementor-field-textual.elementor-size-sm{font-size:15px;min-height:40px;padding:5px 14px;-webkit-border-radius:3px;border-radius:3px}.elementor-field-textual.elementor-size-md{font-size:16px;min-height:47px;padding:6px 16px;-webkit-border-radius:4px;border-radius:4px}.elementor-field-textual.elementor-size-lg{font-size:18px;min-height:59px;padding:7px 20px;-webkit-border-radius:5px;border-radius:5px}.elementor-field-textual.elementor-size-xl{font-size:20px;min-height:72px;padding:8px 24px;-webkit-border-radius:6px;border-radius:6px}.elementor-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-button-align-start .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-button-align-end .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}@media screen and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-tablet-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-tablet-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-tablet-button-align-start .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-tablet-button-align-end .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}}@media screen and (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-mobile-button-align-center .elementor-field-type-submit{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-mobile-button-align-stretch .elementor-field-type-submit button{-webkit-flex-basis:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.elementor-mobile-button-align-start .elementor-field-type-submit{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-mobile-button-align-end .elementor-field-type-submit{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}}.elementor-error .elementor-field{border-color:#d9534f}.elementor-error .help-inline{color:#d9534f;font-size:.9em}.elementor-message{margin:10px 0;font-size:1em;line-height:1}.elementor-message:before{content:"\f00c";display:inline-block;font-family:fontawesome;font-weight:400;font-style:normal;vertical-align:middle;margin-right:5px}.elementor-message.elementor-message-danger{color:#d9534f}.elementor-message.elementor-message-danger:before{content:"\f00d"}.elementor-message.form-message-success{color:#5cb85c}.elementor-form .elementor-button{padding-top:0;padding-bottom:0;border:0 none}.elementor-form .elementor-button>span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-form .elementor-button .elementor-align-icon-right{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.elementor-form .elementor-button .elementor-align-icon-left{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.elementor-form .elementor-button.elementor-size-xs{min-height:33px}.elementor-form .elementor-button.elementor-size-sm{min-height:40px}.elementor-form .elementor-button.elementor-size-md{min-height:47px}.elementor-form .elementor-button.elementor-size-lg{min-height:59px}.elementor-form .elementor-button.elementor-size-xl{min-height:72px}.elementor-element .elementor-widget-container{-webkit-transition:background .3s,border .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s;transition:background .3s,border .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s;-o-transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;transition:background .3s,border .3s,border-radius .3s,box-shadow .3s;transition:background .3s,border .3s,border-radius .3s,box-shadow .3s,-webkit-border-radius .3s,-webkit-box-shadow .3s}.elementor-accordion{text-align:left}.elementor-accordion .elementor-accordion-item{border:1px solid #d4d4d4}.elementor-accordion .elementor-accordion-item+.elementor-accordion-item{border-top:none}.elementor-accordion .elementor-tab-title{margin:0;padding:15px 20px;font-weight:700;line-height:1;cursor:pointer;outline:none}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{display:inline-block;width:1.5em}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-right{float:right;text-align:right}.elementor-accordion .elementor-tab-title .elementor-accordion-icon.elementor-accordion-icon-left{float:left;text-align:left}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-closed{display:block}.elementor-accordion .elementor-tab-title .elementor-accordion-icon .elementor-accordion-icon-opened,.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-closed{display:none}.elementor-accordion .elementor-tab-title.elementor-active .elementor-accordion-icon-opened{display:block}.elementor-accordion .elementor-tab-content{display:none;padding:15px 20px;border-top:1px solid #d4d4d4}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-accordion .elementor-tab-title{padding:12px 15px}.elementor-accordion .elementor-tab-title .elementor-accordion-icon{width:1.2em}.elementor-accordion .elementor-tab-content{padding:7px 15px}}.elementor-alert{padding:15px;border-left:5px solid transparent;position:relative;text-align:left}.elementor-alert .elementor-alert-title{display:block;font-weight:700}.elementor-alert .elementor-alert-description{font-size:13px}.elementor-alert button.elementor-alert-dismiss{position:absolute;right:10px;top:10px;padding:3px;font-size:20px;line-height:1;background:transparent;color:inherit;border:none;cursor:pointer}.elementor-alert.elementor-alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.elementor-alert.elementor-alert-success{color:#3c763d;background-color:#dff0d8;border-color:#cae6be}.elementor-alert.elementor-alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#f9f0c3}.elementor-alert.elementor-alert-danger{color:#a94442;background-color:#f2dede;border-color:#e8c4c4}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-alert{padding:10px}.elementor-alert button.elementor-alert-dismiss{right:7px;top:7px}}.elementor-button{display:inline-block;line-height:1;background-color:#818a91;color:#fff;text-align:center;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s}.elementor-button:focus,.elementor-button:hover,.elementor-button:visited{color:#fff}.elementor-button.elementor-size-xs{font-size:13px;padding:10px 20px;-webkit-border-radius:2px;border-radius:2px}.elementor-button.elementor-size-sm{font-size:15px;padding:12px 24px;-webkit-border-radius:3px;border-radius:3px}.elementor-button.elementor-size-md{font-size:16px;padding:15px 30px;-webkit-border-radius:4px;border-radius:4px}.elementor-button.elementor-size-lg{font-size:18px;padding:20px 40px;-webkit-border-radius:5px;border-radius:5px}.elementor-button.elementor-size-xl{font-size:20px;padding:25px 50px;-webkit-border-radius:6px;border-radius:6px}.elementor-button .elementor-align-icon-right{float:right;margin-left:5px}.elementor-button .elementor-align-icon-left{float:left;margin-right:5px}.elementor-button .elementor-button-text{display:inline-block}.elementor-button span{text-decoration:inherit}.elementor-element.elementor-button-info .elementor-button{background-color:#5bc0de}.elementor-element.elementor-button-success .elementor-button{background-color:#5cb85c}.elementor-element.elementor-button-warning .elementor-button{background-color:#f0ad4e}.elementor-element.elementor-button-danger .elementor-button{background-color:#d9534f}.elementor-widget-button .elementor-button .elementor-button-info{background-color:#5bc0de}.elementor-widget-button .elementor-button .elementor-button-success{background-color:#5cb85c}.elementor-widget-button .elementor-button .elementor-button-warning{background-color:#f0ad4e}.elementor-widget-button .elementor-button .elementor-button-danger{background-color:#d9534f}.elementor-counter .elementor-counter-number-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;font-size:69px;font-weight:600;color:#222;line-height:1}.elementor-counter .elementor-counter-number-prefix,.elementor-counter .elementor-counter-number-suffix{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:pre-wrap}.elementor-counter .elementor-counter-number-prefix{text-align:right}.elementor-counter .elementor-counter-number-suffix{text-align:left}.elementor-counter .elementor-counter-title{text-align:center;font-size:19px;font-weight:400;color:#666;line-height:2.5}.elementor-widget-divider .elementor-divider{line-height:0;font-size:0}.elementor-widget-divider .elementor-divider-separator{display:inline-block}.elementor-image-gallery .gallery-item{display:inline-block;text-align:center;vertical-align:top;width:100%;max-width:100%;margin:0 auto}.elementor-image-gallery .gallery-item img{margin:0 auto}.elementor-image-gallery .gallery-item .gallery-caption{margin:0}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-image-gallery .gallery-columns-2 .gallery-item{max-width:50%}.elementor-image-gallery .gallery-columns-3 .gallery-item{max-width:33.33%}.elementor-image-gallery .gallery-columns-4 .gallery-item{max-width:25%}.elementor-image-gallery .gallery-columns-5 .gallery-item{max-width:20%}.elementor-image-gallery .gallery-columns-6 .gallery-item{max-width:16.666%}.elementor-image-gallery .gallery-columns-7 .gallery-item{max-width:14.28%}.elementor-image-gallery .gallery-columns-8 .gallery-item{max-width:12.5%}.elementor-image-gallery .gallery-columns-9 .gallery-item{max-width:11.11%}.elementor-image-gallery .gallery-columns-10 .gallery-item{max-width:10%}}@media (min-width:480px) and (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:50%}}@media (max-width:479px){.elementor-image-gallery .gallery.gallery-columns-2 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-3 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-4 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-5 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-6 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-7 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-8 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-9 .gallery-item,.elementor-image-gallery .gallery.gallery-columns-10 .gallery-item{max-width:100%}}.elementor-widget-google_maps iframe{height:300px}.elementor-widget-heading .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title>a{color:inherit;font-size:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}.elementor-icon{display:inline-block;line-height:1;-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;color:#818a91;font-size:50px;text-align:center}.elementor-icon:hover{color:#818a91}.elementor-icon i{width:1em;height:1em;position:relative;display:block}.elementor-icon i:before{position:absolute;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-view-stacked .elementor-icon{padding:.5em;background-color:#818a91;color:#fff}.elementor-view-framed .elementor-icon{padding:.5em;color:#818a91;border:3px solid #818a91;background-color:transparent}.elementor-shape-circle .elementor-icon{-webkit-border-radius:50%;border-radius:50%}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-icon,.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-icon{-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto}.elementor-widget-icon-box.elementor-position-right .elementor-icon-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-icon-box.elementor-position-left .elementor-icon-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-icon-box.elementor-position-top .elementor-icon-box-img{margin:auto}.elementor-widget-icon-box.elementor-vertical-align-top .elementor-icon-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-icon-box.elementor-vertical-align-middle .elementor-icon-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-icon-box.elementor-vertical-align-bottom .elementor-icon-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-widget-icon-box .elementor-icon-box-icon{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-icon-box .elementor-icon-box-wrapper{text-align:center}.elementor-widget-icon-box .elementor-icon-box-title a{color:inherit}.elementor-widget-icon-box .elementor-icon-box-description{margin:0}.elementor-widget .elementor-icon-list-items.elementor-inline-items{margin-right:-8px;margin-left:-8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item{margin-right:8px;margin-left:8px}.elementor-widget .elementor-icon-list-items.elementor-inline-items .elementor-icon-list-item:after{width:auto;left:auto;right:auto;position:relative;height:100%;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);border-top:0;border-bottom:0;border-right:0;border-left-width:1px;border-style:solid;right:-8px}.elementor-widget .elementor-icon-list-items{list-style-type:none;margin:0;padding:0}.elementor-widget .elementor-icon-list-item{margin:0;padding:0;position:relative}.elementor-widget .elementor-icon-list-item:after{position:absolute;bottom:0;width:100%}.elementor-widget .elementor-icon-list-item,.elementor-widget .elementor-icon-list-item a{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget .elementor-icon-list-item a{width:100%}.elementor-widget .elementor-icon-list-icon+.elementor-icon-list-text{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;padding-left:5px}.elementor-widget .elementor-icon-list-icon{text-align:center}.elementor-widget.elementor-align-center .elementor-icon-list-item,.elementor-widget.elementor-align-center .elementor-icon-list-item a{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-align-center .elementor-inline-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-align-left .elementor-icon-list-item,.elementor-widget.elementor-align-left .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.elementor-widget.elementor-align-left .elementor-inline-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-align-right .elementor-icon-list-item,.elementor-widget.elementor-align-right .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.elementor-widget.elementor-align-right .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget:not(.elementor-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-align-left) .elementor-icon-list-item:after{right:0}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item a,.elementor-widget.elementor-tablet-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-tablet-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-left .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item,.elementor-widget.elementor-tablet-align-right .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.elementor-widget:not(.elementor-tablet-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-tablet-align-left) .elementor-icon-list-item:after{right:0}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item a,.elementor-widget.elementor-mobile-align-center .elementor-icon-list-items{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.elementor-widget.elementor-mobile-align-center .elementor-icon-list-item:after{margin:auto}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-items{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-left .elementor-icon-list-item a{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-items{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item,.elementor-widget.elementor-mobile-align-right .elementor-icon-list-item a{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.elementor-widget:not(.elementor-mobile-align-right) .elementor-icon-list-item:after{left:0}.elementor-widget:not(.elementor-mobile-align-left) .elementor-icon-list-item:after{right:0}}.elementor-widget-image{text-align:center}.elementor-widget-image .elementor-image>a,.elementor-widget-image .elementor-image figure>a{display:block}.elementor-widget-image .elementor-image img{vertical-align:middle;display:inline-block}.elementor-widget-image .elementor-image.elementor-image-shape-circle{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-image-box .elementor-image-box-content{width:100%}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper,.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-image-box.elementor-position-right .elementor-image-box-wrapper{text-align:right;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.elementor-widget-image-box.elementor-position-left .elementor-image-box-wrapper{text-align:left;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.elementor-widget-image-box.elementor-position-top .elementor-image-box-img{margin:auto}.elementor-widget-image-box.elementor-vertical-align-top .elementor-image-box-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.elementor-widget-image-box.elementor-vertical-align-middle .elementor-image-box-wrapper{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.elementor-widget-image-box.elementor-vertical-align-bottom .elementor-image-box-wrapper{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;align-items:flex-end}}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-widget-image-box .elementor-image-box-img{margin-left:auto!important;margin-right:auto!important;margin-bottom:15px}}.elementor-widget-image-box .elementor-image-box-img{display:inline-block}.elementor-widget-image-box .elementor-image-box-title a{color:inherit}.elementor-widget-image-box .elementor-image-box-wrapper{text-align:center}.elementor-widget-image-box .elementor-image-box-description{margin:0}.elementor-image-carousel-wrapper .slick-image-stretch .slick-slide .slick-slide-image{width:100%}.elementor-image-gallery figure img{display:block}.elementor-image-gallery figure figcaption{width:100%}.gallery-spacing-custom .elementor-image-gallery .gallery-icon{padding:0}.swiper-container .swiper-slide figure{line-height:0}.swiper-container .swiper-slide figure img{width:100%}body.elementor-page .elementor-widget-menu-anchor{margin-bottom:0}.elementor-widget-progress{text-align:left}.elementor-progress-wrapper{position:relative;background-color:#eee;color:#fff;height:30px;line-height:30px;-webkit-border-radius:2px;border-radius:2px}.elementor-progress-bar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background-color:#818a91;width:0;font-size:11px;-webkit-border-radius:2px;border-radius:2px;-webkit-transition:width 1s ease-in-out;-o-transition:width 1s ease-in-out;transition:width 1s ease-in-out}.elementor-progress-text{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding-left:15px}.elementor-progress-percentage{padding-right:15px}.elementor-widget-progress .elementor-progress-wrapper.progress-info .elementor-progress-bar{background-color:#5bc0de}.elementor-widget-progress .elementor-progress-wrapper.progress-success .elementor-progress-bar{background-color:#5cb85c}.elementor-widget-progress .elementor-progress-wrapper.progress-warning .elementor-progress-bar{background-color:#f0ad4e}.elementor-widget-progress .elementor-progress-wrapper.progress-danger .elementor-progress-bar{background-color:#d9534f}.elementor-progress .elementor-title{display:block}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-progress-wrapper{height:25px;line-height:25px}.elementor-progress-text{padding-left:10px}}.elementor-social-icons-wrapper{font-size:0}.elementor-social-icon{font-size:25px;text-align:center;padding:.5em;margin-right:5px;cursor:pointer}.elementor-social-icon i{color:#fff}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-google-plus{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-linkedin{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#df2029}.elementor-social-icon-weixin{background-color:#7bb32e}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{-webkit-border-radius:10%;border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{-webkit-border-radius:50%;border-radius:50%}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-wrapper{width:25%;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active{border-right-style:none}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{height:999em;width:0;right:0;border-right-style:solid}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:before{top:0;-webkit-transform:translateY(-100%);-ms-transform:translateY(-100%);transform:translateY(-100%)}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tab-desktop-title.elementor-active:after{top:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title{display:table-cell}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active{border-bottom-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{bottom:0;height:0;width:999em;border-bottom-style:solid}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:before{right:100%}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-desktop-title.elementor-active:after{left:100%}.elementor-widget-tabs .elementor-tab-content,.elementor-widget-tabs .elementor-tab-title,.elementor-widget-tabs .elementor-tab-title:after,.elementor-widget-tabs .elementor-tab-title:before,.elementor-widget-tabs .elementor-tabs-content-wrapper{border:1px none #d4d4d4}.elementor-widget-tabs .elementor-tabs{text-align:left}.elementor-widget-tabs .elementor-tabs-wrapper{overflow:hidden}.elementor-widget-tabs .elementor-tab-title{cursor:pointer;outline:none}.elementor-widget-tabs .elementor-tab-desktop-title{position:relative;padding:20px 25px;font-weight:700;line-height:1;border:solid transparent}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active{border-color:#d4d4d4}.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:after,.elementor-widget-tabs .elementor-tab-desktop-title.elementor-active:before{display:block;content:"";position:absolute}.elementor-widget-tabs .elementor-tab-mobile-title{padding:10px;cursor:pointer}.elementor-widget-tabs .elementor-tab-content{padding:20px;display:none}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-tabs .elementor-tab-content,.elementor-tabs .elementor-tab-title{border-style:solid;border-bottom-style:none}.elementor-tabs .elementor-tabs-wrapper{display:none}.elementor-tabs .elementor-tabs-content-wrapper{border-bottom-style:solid}.elementor-tabs .elementor-tab-content{padding:10px}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN){.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.elementor-widget-tabs.elementor-tabs-view-vertical .elementor-tabs-content-wrapper{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-style:solid;border-left-style:none}.elementor-widget-tabs.elementor-tabs-view-horizontal .elementor-tab-content{border-style:solid;border-top-style:none}.elementor-tabs .elementor-tab-mobile-title{display:none}}.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;color:inherit}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;color:inherit}.elementor-testimonial-wrapper.elementor-testimonial-text-align-left{text-align:left}.elementor-testimonial-wrapper.elementor-testimonial-text-align-right{text-align:right}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;-webkit-border-radius:50%;border-radius:50%;-o-object-fit:cover;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-right:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:left}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#818a91;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#818a91;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}.elementor-toggle{text-align:left}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d4d4d4;cursor:pointer;outline:none}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d4d4d4;display:none}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px 10px}}.elementor-widget-video .elementor-widget-container{overflow:hidden}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;left:0;width:100%;height:100%;-webkit-background-size:cover;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%}.slick-slider{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-touch-action:pan-y;touch-action:pan-y;-webkit-tap-highlight-color:transparent}.slick-list,.slick-slider{position:relative;display:block}.slick-list{overflow:hidden;margin:0;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer}.slick-slider .slick-list,.slick-slider .slick-track{-webkit-transform:translateZ(0);transform:translateZ(0)}.slick-track{position:relative;left:0;top:0;display:block}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{float:left;height:100%;min-height:1px;display:none}.elementor-slick-slider[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{display:block;height:auto;border:1px solid transparent}.slick-arrow.slick-hidden{display:none}.elementor-slick-slider .slick-loading .slick-list{background:#fff}.elementor-slick-slider .slick-loading .slick-list:after{content:"\f1ce";font-family:FontAwesome;position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear;font-size:25px;color:#a4afb7}.elementor-slick-slider .slick-next,.elementor-slick-slider .slick-prev{font-size:0;line-height:0;position:absolute;top:50%;display:block;width:20px;padding:0;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:transparent;border:none;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus,.elementor-slick-slider .slick-next:hover,.elementor-slick-slider .slick-prev:focus,.elementor-slick-slider .slick-prev:hover{color:transparent;outline:none;background:transparent}.elementor-slick-slider .slick-next:focus:before,.elementor-slick-slider .slick-next:hover:before,.elementor-slick-slider .slick-prev:focus:before,.elementor-slick-slider .slick-prev:hover:before{opacity:1}.elementor-slick-slider .slick-next.slick-disabled:before,.elementor-slick-slider .slick-prev.slick-disabled:before{opacity:.25}.elementor-slick-slider .slick-next:before,.elementor-slick-slider .slick-prev:before{font-family:FontAwesome;font-size:35px;line-height:1;opacity:.75;color:#fff;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider .slick-prev{left:-25px}[dir=rtl] .elementor-slick-slider .slick-prev{left:auto;right:-25px}.elementor-slick-slider .slick-prev:before{content:"\f104"}[dir=rtl] .elementor-slick-slider .slick-prev:before{content:"\f105"}.elementor-slick-slider .slick-next{right:-25px}[dir=rtl] .elementor-slick-slider .slick-next{left:-25px;right:auto}.elementor-slick-slider .slick-next:before{content:"\f105"}[dir=rtl] .elementor-slick-slider .slick-next:before{content:"\f104"}.elementor-slick-slider .slick-dotted.slick-slider{margin-bottom:30px}.elementor-slick-slider ul.slick-dots{position:absolute;bottom:-25px;display:block;width:100%;padding:0;margin:0;list-style:none;text-align:center;line-height:1}.elementor-slick-slider ul.slick-dots li{position:relative;display:inline-block;width:20px;height:20px;margin:0;padding:0;cursor:pointer}.elementor-slick-slider ul.slick-dots li button{font-size:0;line-height:0;display:block;width:20px;height:20px;padding:5px;cursor:pointer;color:transparent;border:0;outline:none;background:transparent}.elementor-slick-slider ul.slick-dots li button:focus,.elementor-slick-slider ul.slick-dots li button:hover{outline:none}.elementor-slick-slider ul.slick-dots li button:focus:before,.elementor-slick-slider ul.slick-dots li button:hover:before{opacity:1}.elementor-slick-slider ul.slick-dots li button:before{font-family:FontAwesome;font-size:6px;line-height:20px;position:absolute;top:0;left:0;width:20px;height:20px;content:"\f111";text-align:center;opacity:.25;color:#000;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.elementor-slick-slider ul.slick-dots li.slick-active button:before{opacity:.75;color:#000}.elementor-slick-slider .slick-arrows-inside .slick-prev{left:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-prev{left:auto;right:20px}.elementor-slick-slider .slick-arrows-inside .slick-next{right:20px}[dir=rtl] .elementor-slick-slider .slick-arrows-inside .slick-next{left:20px;right:auto}.elementor-slick-slider .slick-dots-inside .slick-dots{bottom:5px}.elementor-slick-slider .slick-dots-inside.slick-dotted.slick-slider{margin-bottom:0}.elementor-slick-slider .slick-slider .slick-next,.elementor-slick-slider .slick-slider .slick-prev{z-index:1}.elementor-slick-slider .slick-slide img{margin:auto}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-wp8-horizontal{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-wp8-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;-webkit-background-size:27px 44px;background-size:27px 44px;background:no-repeat 50%}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23007aff'/%3E%3C/svg%3E");left:10px;right:auto}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z'/%3E%3C/svg%3E")}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M0 22L22 0l2.1 2.1L4.2 22l19.9 19.9L22 44 0 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23007aff'/%3E%3C/svg%3E");right:10px;left:auto}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z'/%3E%3C/svg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 27 44'%3E%3Cpath d='M27 22L5 44l-2.1-2.1L22.8 22 2.9 2.1 5 0l22 22z' fill='%23fff'/%3E%3C/svg%3E")}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s;-o-transition:.3s;transition:.3s;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullet{width:6px;height:6px;display:inline-block;-webkit-border-radius:50%;border-radius:50%;background:#000;opacity:.2}.swiper-pagination-fraction{color:#000}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;appearance:none;-webkit-appearance:none;-moz-appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-white .swiper-pagination-bullet{background:#fff}.swiper-pagination-bullet-active{opacity:1}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:5px 0;display:block}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 6px}.swiper-pagination-progress{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progress .swiper-pagination-progressbar{background:#000;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progress{width:100%;height:4px;left:0;top:0}.swiper-container-vertical>.swiper-pagination-progress{width:4px;height:100%;left:0;top:0}.swiper-pagination-progress.swiper-pagination-white{background:hsla(0,0%,100%,.5)}.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar{background:#fff}.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar{background:#000}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(right,rgba(0,0,0,.5),transparent);background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(left,rgba(0,0,0,.5),transparent);background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),transparent);background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:-o-linear-gradient(top,rgba(0,0,0,.5),transparent);background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-coverflow .swiper-wrapper,.swiper-container-flip .swiper-wrapper{-ms-perspective:1200px}.swiper-container-cube,.swiper-container-flip{overflow:visible}.swiper-container-cube .swiper-slide,.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-cube .swiper-slide .swiper-slide,.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active,.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top,.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-slide{visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-scrollbar{-webkit-border-radius:10px;border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);-webkit-border-radius:10px;border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12) infinite;animation:swiper-preloader-spin 1s steps(12) infinite}.swiper-lazy-preloader:after{display:block;content:"";width:100%;height:100%;-webkit-background-size:100% 100%;background-size:100%;background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%236c6c6c' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E") no-repeat 50%}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 120 120' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath id='a' stroke='%23fff' stroke-width='11' stroke-linecap='round' d='M60 7v20'/%3E%3C/defs%3E%3Cuse xlink:href='%23a' opacity='.27'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(30 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(60 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(90 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(120 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.27' transform='rotate(150 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.37' transform='rotate(180 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.46' transform='rotate(210 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.56' transform='rotate(240 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.66' transform='rotate(270 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.75' transform='rotate(300 60 60)'/%3E%3Cuse xlink:href='%23a' opacity='.85' transform='rotate(330 60 60)'/%3E%3C/svg%3E")}@-webkit-keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes swiper-preloader-spin{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.elementor-lightbox .dialog-header{display:none}.elementor-lightbox .dialog-widget-content{background:none;-webkit-box-shadow:none;box-shadow:none;width:100%;height:100%}.elementor-lightbox .dialog-message{-webkit-animation-duration:.4s;animation-duration:.4s}.elementor-lightbox .dialog-message:not(.elementor-fit-aspect-ratio){height:100%}.elementor-lightbox .dialog-lightbox-close-button{cursor:pointer;position:absolute;font-size:25px;padding:5px;z-index:2;line-height:1}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-lightbox .dialog-lightbox-close-button{padding:0}}.elementor-lightbox .dialog-lightbox-close-button,.elementor-lightbox .elementor-swiper-button{color:hsla(0,0%,93%,.9);-webkit-transition:all .5s;-o-transition:all .5s;transition:all .5s;opacity:1}.elementor-lightbox .dialog-lightbox-close-button:hover,.elementor-lightbox .elementor-swiper-button:hover{color:#fff}.elementor-lightbox .swiper-container{height:100%}.elementor-lightbox .elementor-lightbox-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:70px 80px;-webkit-box-sizing:border-box;box-sizing:border-box;height:100%;margin:auto}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-lightbox .elementor-lightbox-item{padding:40px}}.elementor-lightbox .elementor-lightbox-image{max-height:100%}.elementor-lightbox .elementor-video-container{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}@media (min-width:ELEMENTOR_SCREEN_LG_MIN){.elementor-lightbox .elementor-video-container{width:75%}}@media (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor-lightbox .elementor-video-container{width:100%}}.elementor-lightbox .elementor-swiper-button-prev{left:35px}.elementor-lightbox .elementor-swiper-button-next{right:35px}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor-lightbox .elementor-swiper-button-prev{left:10px}.elementor-lightbox .elementor-swiper-button-next{right:10px}}.animated{-webkit-animation-duration:1.25s;animation-duration:1.25s}.animated.animated-slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.animated-fast{-webkit-animation-duration:.75s;animation-duration:.75s}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.elementor-shape{overflow:hidden;position:absolute;left:0;width:100%;line-height:0;direction:ltr}.elementor-shape-top{top:-1px}.elementor-shape-bottom{bottom:-1px}.elementor-shape[data-negative=false].elementor-shape-bottom,.elementor-shape[data-negative=true].elementor-shape-top{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.elementor-shape svg{display:block;width:-webkit-calc(100% + 1.3px);width:calc(100% + 1.3px);position:relative;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.elementor-shape .elementor-shape-fill{fill:#fff;-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotateY(0deg);transform:rotateY(0deg)}#wp-admin-bar-elementor_edit_page .ab-submenu .ab-item{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:200px}#wp-admin-bar-elementor_edit_page .elementor-edit-link-title{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;width:100%}#wp-admin-bar-elementor_edit_page .elementor-edit-link-type{background:#55595c;font-size:11px;line-height:9px;margin-top:6px;padding:4px 8px;-webkit-border-radius:3px;border-radius:3px}.page-template-elementor_canvas.elementor-page:before{display:none}.elementor-post__thumbnail__link{-webkit-transition:none;-o-transition:none;transition:none}#elementor .elementor-element ul.elementor-icon-list-items,#left-area ul.elementor-icon-list-items,.elementor .elementor-element ul.elementor-icon-list-items{padding:0}@media (max-width:ELEMENTOR_SCREEN_SM_MAX){.elementor .elementor-hidden-phone{display:none}}@media (min-width:ELEMENTOR_SCREEN_MD_MIN) and (max-width:ELEMENTOR_SCREEN_MD_MAX){.elementor .elementor-hidden-tablet{display:none}}@media (min-width:ELEMENTOR_SCREEN_LG_MIN){.elementor .elementor-hidden-desktop{display:none}}
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
+/*! elementor - v2.2.1 - 03-09-2018 */
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 162);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 162:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
/* global jQuery, ElementorAdminFeedbackArgs */
-( function( $ ) {
+(function ($) {
'use strict';
var ElementorAdminDialogApp = {
- dialogsManager: new DialogsManager.Instance(),
-
- cacheElements: function() {
+ cacheElements: function cacheElements() {
this.cache = {
- $deactivateLink: $( '#the-list' ).find( '[data-slug="elementor"] span.deactivate a' ),
- $dialogHeader: $( '#elementor-deactivate-feedback-dialog-header' ),
- $dialogForm: $( '#elementor-deactivate-feedback-dialog-form' )
+ $deactivateLink: $('#the-list').find('[data-slug="elementor"] span.deactivate a'),
+ $dialogHeader: $('#elementor-deactivate-feedback-dialog-header'),
+ $dialogForm: $('#elementor-deactivate-feedback-dialog-form')
};
},
- bindEvents: function() {
+ bindEvents: function bindEvents() {
var self = this;
- self.cache.$deactivateLink.on( 'click', function( event ) {
+ self.cache.$deactivateLink.on('click', function (event) {
event.preventDefault();
self.getModal().show();
- } );
+ });
},
- deactivate: function() {
- location.href = this.cache.$deactivateLink.attr( 'href' );
+ deactivate: function deactivate() {
+ location.href = this.cache.$deactivateLink.attr('href');
},
- initModal: function() {
+ initModal: function initModal() {
var self = this,
- modal;
+ modal;
- self.getModal = function() {
- if ( ! modal ) {
- modal = self.dialogsManager.createWidget( 'lightbox', {
+ self.getModal = function () {
+ if (!modal) {
+ modal = elementorAdmin.getDialogsManager().createWidget('lightbox', {
id: 'elementor-deactivate-feedback-modal',
headerMessage: self.cache.$dialogHeader,
message: self.cache.$dialogForm,
my: 'center',
at: 'center'
},
- onReady: function() {
- DialogsManager.getWidgetType( 'lightbox' ).prototype.onReady.apply( this, arguments );
+ onReady: function onReady() {
+ DialogsManager.getWidgetType('lightbox').prototype.onReady.apply(this, arguments);
- this.addButton( {
+ this.addButton({
name: 'submit',
text: ElementorAdminFeedbackArgs.i18n.submit_n_deactivate,
- callback: self.sendFeedback.bind( self )
- } );
+ callback: self.sendFeedback.bind(self)
+ });
- if ( ! ElementorAdminFeedbackArgs.is_tracker_opted_in ) {
- this.addButton( {
+ if (!ElementorAdminFeedbackArgs.is_tracker_opted_in) {
+ this.addButton({
name: 'skip',
text: ElementorAdminFeedbackArgs.i18n.skip_n_deactivate,
- callback: function() {
+ callback: function callback() {
self.deactivate();
}
- } );
+ });
}
+ },
+
+ onShow: function onShow() {
+ var $dialogModal = $('#elementor-deactivate-feedback-modal'),
+ radioSelector = '.elementor-deactivate-feedback-dialog-input';
+
+ $dialogModal.find(radioSelector).on('change', function () {
+ $dialogModal.attr('data-feedback-selected', $(this).val());
+ });
+
+ $dialogModal.find(radioSelector + ':checked').trigger('change');
}
- } );
+ });
}
return modal;
};
},
- sendFeedback: function() {
+ sendFeedback: function sendFeedback() {
var self = this,
- formData = self.cache.$dialogForm.serialize();
+ formData = self.cache.$dialogForm.serialize();
- self.getModal().getElements( 'submit' ).text( '' ).addClass( 'elementor-loading' );
+ self.getModal().getElements('submit').text('').addClass('elementor-loading');
- $.post( ajaxurl, formData, this.deactivate.bind( this ) );
+ $.post(ajaxurl, formData, this.deactivate.bind(this));
},
- init: function() {
+ init: function init() {
this.initModal();
this.cacheElements();
this.bindEvents();
}
};
- $( function() {
+ $(function () {
ElementorAdminDialogApp.init();
- } );
+ });
+})(jQuery);
-}( jQuery ) );
+/***/ })
-},{}]},{},[1])
-//# sourceMappingURL=admin-feedback.js.map
+/******/ });
+//# sourceMappingURL=admin-feedback.js.map
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-!function o(r,c,d){function s(t,e){if(!c[t]){if(!r[t]){var a="function"==typeof require&&require;if(!e&&a)return a(t,!0);if(l)return l(t,!0);var i=new Error("Cannot find module '"+t+"'");throw i.code="MODULE_NOT_FOUND",i}var n=c[t]={exports:{}};r[t][0].call(n.exports,function(e){return s(r[t][1][e]||e)},n,n.exports,o,r,c,d)}return c[t].exports}for(var l="function"==typeof require&&require,e=0;e<d.length;e++)s(d[e]);return s}({1:[function(e,t,a){!function(t){"use strict";var e={dialogsManager:new DialogsManager.Instance,cacheElements:function(){this.cache={$deactivateLink:t("#the-list").find('[data-slug="elementor"] span.deactivate a'),$dialogHeader:t("#elementor-deactivate-feedback-dialog-header"),$dialogForm:t("#elementor-deactivate-feedback-dialog-form")}},bindEvents:function(){var t=this;t.cache.$deactivateLink.on("click",function(e){e.preventDefault(),t.getModal().show()})},deactivate:function(){location.href=this.cache.$deactivateLink.attr("href")},initModal:function(){var e,t=this;t.getModal=function(){return e||(e=t.dialogsManager.createWidget("lightbox",{id:"elementor-deactivate-feedback-modal",headerMessage:t.cache.$dialogHeader,message:t.cache.$dialogForm,hide:{onButtonClick:!1},position:{my:"center",at:"center"},onReady:function(){DialogsManager.getWidgetType("lightbox").prototype.onReady.apply(this,arguments),this.addButton({name:"submit",text:ElementorAdminFeedbackArgs.i18n.submit_n_deactivate,callback:t.sendFeedback.bind(t)}),ElementorAdminFeedbackArgs.is_tracker_opted_in||this.addButton({name:"skip",text:ElementorAdminFeedbackArgs.i18n.skip_n_deactivate,callback:function(){t.deactivate()}})}})),e}},sendFeedback:function(){var e=this.cache.$dialogForm.serialize();this.getModal().getElements("submit").text("").addClass("elementor-loading"),t.post(ajaxurl,e,this.deactivate.bind(this))},init:function(){this.initModal(),this.cacheElements(),this.bindEvents()}};t(function(){e.init()})}(jQuery)},{}]},{},[1]);
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+!function(e){var t={};function n(a){if(t[a])return t[a].exports;var i=t[a]={i:a,l:!1,exports:{}};return e[a].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},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 a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(a,i,function(t){return e[t]}.bind(null,i));return a},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=162)}({162:function(e,t,n){"use strict";!function(e){var t={cacheElements:function(){this.cache={$deactivateLink:e("#the-list").find('[data-slug="elementor"] span.deactivate a'),$dialogHeader:e("#elementor-deactivate-feedback-dialog-header"),$dialogForm:e("#elementor-deactivate-feedback-dialog-form")}},bindEvents:function(){var e=this;e.cache.$deactivateLink.on("click",function(t){t.preventDefault(),e.getModal().show()})},deactivate:function(){location.href=this.cache.$deactivateLink.attr("href")},initModal:function(){var t,n=this;n.getModal=function(){return t||(t=elementorAdmin.getDialogsManager().createWidget("lightbox",{id:"elementor-deactivate-feedback-modal",headerMessage:n.cache.$dialogHeader,message:n.cache.$dialogForm,hide:{onButtonClick:!1},position:{my:"center",at:"center"},onReady:function(){DialogsManager.getWidgetType("lightbox").prototype.onReady.apply(this,arguments),this.addButton({name:"submit",text:ElementorAdminFeedbackArgs.i18n.submit_n_deactivate,callback:n.sendFeedback.bind(n)}),ElementorAdminFeedbackArgs.is_tracker_opted_in||this.addButton({name:"skip",text:ElementorAdminFeedbackArgs.i18n.skip_n_deactivate,callback:function(){n.deactivate()}})},onShow:function(){var t=e("#elementor-deactivate-feedback-modal"),n=".elementor-deactivate-feedback-dialog-input";t.find(n).on("change",function(){t.attr("data-feedback-selected",e(this).val())}),t.find(n+":checked").trigger("change")}})),t}},sendFeedback:function(){var t=this.cache.$dialogForm.serialize();this.getModal().getElements("submit").text("").addClass("elementor-loading"),e.post(ajaxurl,t,this.deactivate.bind(this))},init:function(){this.initModal(),this.cacheElements(),this.bindEvents()}};e(function(){t.init()})}(jQuery)}});
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
-( function( $ ) {
- 'use strict';
+/*! elementor - v2.2.1 - 03-09-2018 */
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 160);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 1:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Module = __webpack_require__(2),
+ ViewModule;
+
+ViewModule = Module.extend({
+ elements: null,
+
+ getDefaultElements: function getDefaultElements() {
+ return {};
+ },
+
+ bindEvents: function bindEvents() {},
+
+ onInit: function onInit() {
+ this.initElements();
+
+ this.bindEvents();
+ },
+
+ initElements: function initElements() {
+ this.elements = this.getDefaultElements();
+ }
+});
+
+module.exports = ViewModule;
+
+/***/ }),
+
+/***/ 160:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
- var ElementorAdminApp = {
+(function ($) {
+ var ViewModule = __webpack_require__(1);
+
+ var ElementorAdmin = ViewModule.extend({
maintenanceMode: null,
- cacheElements: function() {
- this.cache = {
- $window: $( window ),
- $body: $( 'body' ),
- $switchMode: $( '#elementor-switch-mode' ),
- $goToEditLink: $( '#elementor-go-to-edit-page-link' ),
- $switchModeInput: $( '#elementor-switch-mode-input' ),
- $switchModeButton: $( '#elementor-switch-mode-button' ),
- $elementorLoader: $( '.elementor-loader' ),
- $builderEditor: $( '#elementor-editor' ),
- $importButton: $( '#elementor-import-template-trigger' ),
- $importArea: $( '#elementor-import-template-area' ),
- $settingsForm: $( '#elementor-settings-form' ),
- $settingsTabsWrapper: $( '#elementor-settings-tabs-wrapper' ),
- $addNew: $( '.post-type-elementor_library #wpbody-content .page-title-action:first, #elementor-template-library-add-new' ),
- $addNewDialogHeader: $( '.elementor-templates-modal__header' ),
- $addNewDialogClose: $( '.elementor-templates-modal__header__close-modal' ),
- $addNewDialogContent: $( '#elementor-new-template-dialog-content' )
+ config: ElementorAdminConfig,
+
+ getDefaultElements: function getDefaultElements() {
+ var elements = {
+ $window: $(window),
+ $body: $('body'),
+ $switchMode: $('#elementor-switch-mode'),
+ $goToEditLink: $('#elementor-go-to-edit-page-link'),
+ $switchModeInput: $('#elementor-switch-mode-input'),
+ $switchModeButton: $('#elementor-switch-mode-button'),
+ $elementorLoader: $('.elementor-loader'),
+ $builderEditor: $('#elementor-editor'),
+ $importButton: $('#elementor-import-template-trigger'),
+ $importArea: $('#elementor-import-template-area'),
+ $settingsForm: $('#elementor-settings-form'),
+ $settingsTabsWrapper: $('#elementor-settings-tabs-wrapper')
};
- this.cache.$settingsFormPages = this.cache.$settingsForm.find( '.elementor-settings-form-page' );
+ elements.$settingsFormPages = elements.$settingsForm.find('.elementor-settings-form-page');
+
+ elements.$activeSettingsPage = elements.$settingsFormPages.filter('.elementor-active');
- this.cache.$activeSettingsPage = this.cache.$settingsFormPages.filter( '.elementor-active' );
+ elements.$settingsTabs = elements.$settingsTabsWrapper.children();
- this.cache.$settingsTabs = this.cache.$settingsTabsWrapper.children();
+ elements.$activeSettingsTab = elements.$settingsTabs.filter('.nav-tab-active');
- this.cache.$activeSettingsTab = this.cache.$settingsTabs.filter( '.nav-tab-active' );
+ return elements;
},
- toggleStatus: function() {
+ toggleStatus: function toggleStatus() {
var isElementorMode = this.isElementorMode();
- this.cache.$body
- .toggleClass( 'elementor-editor-active', isElementorMode )
- .toggleClass( 'elementor-editor-inactive', ! isElementorMode );
+ this.elements.$body.toggleClass('elementor-editor-active', isElementorMode).toggleClass('elementor-editor-inactive', !isElementorMode);
},
- bindEvents: function() {
+ bindEvents: function bindEvents() {
var self = this;
- self.cache.$switchModeButton.on( 'click', function( event ) {
+ self.elements.$switchModeButton.on('click', function (event) {
event.preventDefault();
- if ( self.isElementorMode() ) {
- self.cache.$switchModeInput.val( '' );
+ if (self.isElementorMode()) {
+ self.elements.$switchModeInput.val('');
} else {
- self.cache.$switchModeInput.val( true );
+ self.elements.$switchModeInput.val(true);
- var $wpTitle = $( '#title' );
+ var $wpTitle = $('#title');
- if ( ! $wpTitle.val() ) {
- $wpTitle.val( 'Elementor #' + $( '#post_ID' ).val() );
+ if (!$wpTitle.val()) {
+ $wpTitle.val('Elementor #' + $('#post_ID').val());
}
- if ( wp.autosave ) {
+ if (wp.autosave) {
wp.autosave.server.triggerSave();
}
self.animateLoader();
- $( document ).on( 'heartbeat-tick.autosave', function() {
- self.cache.$window.off( 'beforeunload.edit-post' );
+ $(document).on('heartbeat-tick.autosave', function () {
+ self.elements.$window.off('beforeunload.edit-post');
- location.href = self.cache.$goToEditLink.attr( 'href' );
- } );
+ location.href = self.elements.$goToEditLink.attr('href');
+ });
}
self.toggleStatus();
- } );
+ });
- self.cache.$addNew.on( 'click', function( event ) {
- event.preventDefault();
- self.getNewTemplateModal().show();
- } );
-
- self.cache.$goToEditLink.on( 'click', function() {
+ self.elements.$goToEditLink.on('click', function () {
self.animateLoader();
- } );
+ });
- $( 'div.notice.elementor-message-dismissed' ).on( 'click', 'button.notice-dismiss', function( event ) {
+ $('div.notice.elementor-message-dismissed').on('click', 'button.notice-dismiss, .elementor-button-notice-dismiss', function (event) {
event.preventDefault();
- $.post( ajaxurl, {
+ $.post(ajaxurl, {
action: 'elementor_set_admin_notice_viewed',
- notice_id: $( this ).closest( '.elementor-message-dismissed' ).data( 'notice_id' )
- } );
- } );
+ notice_id: $(this).closest('.elementor-message-dismissed').data('notice_id')
+ });
- $( '#elementor-clear-cache-button' ).on( 'click', function( event ) {
+ var $wrapperElm = $(this).closest('.elementor-message-dismissed');
+ $wrapperElm.fadeTo(100, 0, function () {
+ $wrapperElm.slideUp(100, function () {
+ $wrapperElm.remove();
+ });
+ });
+ });
+
+ $('#elementor-clear-cache-button').on('click', function (event) {
event.preventDefault();
- var $thisButton = $( this );
+ var $thisButton = $(this);
- $thisButton.removeClass( 'success' ).addClass( 'loading' );
+ $thisButton.removeClass('success').addClass('loading');
- $.post( ajaxurl, {
+ $.post(ajaxurl, {
action: 'elementor_clear_cache',
- _nonce: $thisButton.data( 'nonce' )
- } )
- .done( function() {
- $thisButton.removeClass( 'loading' ).addClass( 'success' );
- } );
- } );
-
- $( '#elementor-library-sync-button' ).on( 'click', function( event ) {
+ _nonce: $thisButton.data('nonce')
+ }).done(function () {
+ $thisButton.removeClass('loading').addClass('success');
+ });
+ });
+
+ $('#elementor-library-sync-button').on('click', function (event) {
event.preventDefault();
- var $thisButton = $( this );
+ var $thisButton = $(this);
- $thisButton.removeClass( 'success' ).addClass( 'loading' );
+ $thisButton.removeClass('success').addClass('loading');
- $.post( ajaxurl, {
+ $.post(ajaxurl, {
action: 'elementor_reset_library',
- _nonce: $thisButton.data( 'nonce' )
- } )
- .done( function() {
- $thisButton.removeClass( 'loading' ).addClass( 'success' );
- } );
- } );
-
- $( '#elementor-replace-url-button' ).on( 'click', function( event ) {
+ _nonce: $thisButton.data('nonce')
+ }).done(function () {
+ $thisButton.removeClass('loading').addClass('success');
+ });
+ });
+
+ $('#elementor-replace-url-button').on('click', function (event) {
event.preventDefault();
- var $this = $( this ),
- $tr = $this.parents( 'tr' ),
- $from = $tr.find( '[name="from"]' ),
- $to = $tr.find( '[name="to"]' );
+ var $this = $(this),
+ $tr = $this.parents('tr'),
+ $from = $tr.find('[name="from"]'),
+ $to = $tr.find('[name="to"]');
- $this.removeClass( 'success' ).addClass( 'loading' );
+ $this.removeClass('success').addClass('loading');
- $.post( ajaxurl, {
+ $.post(ajaxurl, {
action: 'elementor_replace_url',
from: $from.val(),
to: $to.val(),
- _nonce: $this.data( 'nonce' )
- } )
- .done( function( response ) {
- $this.removeClass( 'loading' );
-
- if ( response.success ) {
- $this.addClass( 'success' );
- }
-
- var dialogsManager = new DialogsManager.Instance();
- dialogsManager.createWidget( 'alert', {
- message: response.data
- } ).show();
- } );
- } );
-
- self.cache.$settingsTabs.on( {
- click: function( event ) {
+ _nonce: $this.data('nonce')
+ }).done(function (response) {
+ $this.removeClass('loading');
+
+ if (response.success) {
+ $this.addClass('success');
+ }
+
+ self.getDialogsManager().createWidget('alert', {
+ message: response.data
+ }).show();
+ });
+ });
+
+ self.elements.$settingsTabs.on({
+ click: function click(event) {
event.preventDefault();
event.currentTarget.focus(); // Safari does not focus the tab automatically
},
- focus: function() { // Using focus event to enable navigation by tab key
- var hrefWithoutHash = location.href.replace( /#.*/, '' );
+ focus: function focus() {
+ // Using focus event to enable navigation by tab key
+ var hrefWithoutHash = location.href.replace(/#.*/, '');
- history.pushState( {}, '', hrefWithoutHash + this.hash );
+ history.pushState({}, '', hrefWithoutHash + this.hash);
self.goToSettingsTabFromHash();
}
- } );
+ });
- $( '.elementor-rollback-button' ).on( 'click', function( event ) {
+ $('.elementor-rollback-button').on('click', function (event) {
event.preventDefault();
- var $this = $( this ),
- dialogsManager = new DialogsManager.Instance();
+ var $this = $(this);
- dialogsManager.createWidget( 'confirm', {
- headerMessage: ElementorAdminConfig.i18n.rollback_to_previous_version,
- message: ElementorAdminConfig.i18n.rollback_confirm,
+ self.getDialogsManager().createWidget('confirm', {
+ headerMessage: self.config.i18n.rollback_to_previous_version,
+ message: self.config.i18n.rollback_confirm,
strings: {
- confirm: ElementorAdminConfig.i18n.yes,
- cancel: ElementorAdminConfig.i18n.cancel
+ confirm: self.config.i18n.yes,
+ cancel: self.config.i18n.cancel
},
- onConfirm: function() {
- $this.addClass( 'loading' );
+ onConfirm: function onConfirm() {
+ $this.addClass('loading');
- location.href = $this.attr( 'href' );
+ location.href = $this.attr('href');
}
- } ).show();
- } );
+ }).show();
+ });
- $( '.elementor_css_print_method select' ).on( 'change', function() {
- var $descriptions = $( '.elementor-css-print-method-description' );
+ $('.elementor_css_print_method select').on('change', function () {
+ var $descriptions = $('.elementor-css-print-method-description');
$descriptions.hide();
- $descriptions.filter( '[data-value="' + $( this ).val() + '"]' ).show();
- } ).trigger( 'change' );
+ $descriptions.filter('[data-value="' + $(this).val() + '"]').show();
+ }).trigger('change');
+ },
+
+ setMarionetteTemplateCompiler: function setMarionetteTemplateCompiler() {
+ if ('undefined' !== typeof Marionette) {
+ Marionette.TemplateCache.prototype.compileTemplate = function (rawTemplate, options) {
+ options = {
+ evaluate: /<#([\s\S]+?)#>/g,
+ interpolate: /{{{([\s\S]+?)}}}/g,
+ escape: /{{([^}]+?)}}(?!})/g
+ };
+
+ return _.template(rawTemplate, options);
+ };
+ }
},
- init: function() {
- this.cacheElements();
+ onInit: function onInit() {
+ ViewModule.prototype.onInit.apply(this, arguments);
- this.bindEvents();
+ this.setMarionetteTemplateCompiler();
- this.initTemplatesImport();
+ this.initDialogsManager();
- this.initNewTemplateDialog();
+ this.initTemplatesImport();
this.initMaintenanceMode();
this.roleManager.init();
},
- initNewTemplateDialog: function() {
- var self = this,
- modal;
-
- self.getNewTemplateModal = function() {
- if ( ! modal ) {
- var dialogsManager = new DialogsManager.Instance();
-
- modal = dialogsManager.createWidget( 'lightbox', {
- id: 'elementor-new-template-modal',
- className: 'elementor-templates-modal',
- headerMessage: self.cache.$addNewDialogHeader,
- message: self.cache.$addNewDialogContent.children(),
- hide: {
- onButtonClick: false
- },
- position: {
- my: 'center',
- at: 'center'
- },
- onReady: function() {
- DialogsManager.getWidgetType( 'lightbox' ).prototype.onReady.apply( this, arguments );
-
- self.cache.$addNewDialogClose.on( 'click', function() {
- modal.hide();
- } );
- }
- } );
+ initDialogsManager: function initDialogsManager() {
+ var dialogsManager;
+
+ this.getDialogsManager = function () {
+ if (!dialogsManager) {
+ dialogsManager = new DialogsManager.Instance();
}
- return modal;
+ return dialogsManager;
};
-
},
- initTemplatesImport: function() {
- if ( ! this.cache.$body.hasClass( 'post-type-elementor_library' ) ) {
+ initTemplatesImport: function initTemplatesImport() {
+ if (!this.elements.$body.hasClass('post-type-elementor_library')) {
return;
}
var self = this,
- $importButton = self.cache.$importButton,
- $importArea = self.cache.$importArea;
+ $importButton = self.elements.$importButton,
+ $importArea = self.elements.$importArea;
- self.cache.$formAnchor = $( 'h1' );
+ self.elements.$formAnchor = $('h1');
- $( '#wpbody-content' ).find( '.page-title-action:last' ).after( $importButton );
+ $('#wpbody-content').find('.page-title-action:last').after($importButton);
- self.cache.$formAnchor.after( $importArea );
+ self.elements.$formAnchor.after($importArea);
- $importButton.on( 'click', function() {
- $( '#elementor-import-template-area' ).toggle();
- } );
+ $importButton.on('click', function () {
+ $('#elementor-import-template-area').toggle();
+ });
},
- initMaintenanceMode: function() {
- var MaintenanceMode = require( 'elementor-admin/maintenance-mode' );
+ initMaintenanceMode: function initMaintenanceMode() {
+ var MaintenanceMode = __webpack_require__(161);
this.maintenanceMode = new MaintenanceMode();
},
- isElementorMode: function() {
- return !! this.cache.$switchModeInput.val();
+ isElementorMode: function isElementorMode() {
+ return !!this.elements.$switchModeInput.val();
},
- animateLoader: function() {
- this.cache.$goToEditLink.addClass( 'elementor-animate' );
+ animateLoader: function animateLoader() {
+ this.elements.$goToEditLink.addClass('elementor-animate');
},
- goToSettingsTabFromHash: function() {
- var hash = location.hash.slice( 1 );
+ goToSettingsTabFromHash: function goToSettingsTabFromHash() {
+ var hash = location.hash.slice(1);
- if ( hash ) {
- this.goToSettingsTab( hash );
+ if (hash) {
+ this.goToSettingsTab(hash);
}
},
- goToSettingsTab: function( tabName ) {
- var $activePage = this.cache.$settingsFormPages.filter( '#' + tabName );
+ goToSettingsTab: function goToSettingsTab(tabName) {
+ var $activePage = this.elements.$settingsFormPages.filter('#' + tabName);
- if ( ! $activePage.length ) {
+ if (!$activePage.length) {
return;
}
- this.cache.$activeSettingsPage.removeClass( 'elementor-active' );
+ this.elements.$activeSettingsPage.removeClass('elementor-active');
- this.cache.$activeSettingsTab.removeClass( 'nav-tab-active' );
+ this.elements.$activeSettingsTab.removeClass('nav-tab-active');
- var $activeTab = this.cache.$settingsTabs.filter( '#elementor-settings-' + tabName );
+ var $activeTab = this.elements.$settingsTabs.filter('#elementor-settings-' + tabName);
- $activePage.addClass( 'elementor-active' );
+ $activePage.addClass('elementor-active');
- $activeTab.addClass( 'nav-tab-active' );
+ $activeTab.addClass('nav-tab-active');
- this.cache.$settingsForm.attr( 'action', 'options.php#' + tabName );
+ this.elements.$settingsForm.attr('action', 'options.php#' + tabName);
- this.cache.$activeSettingsPage = $activePage;
+ this.elements.$activeSettingsPage = $activePage;
- this.cache.$activeSettingsTab = $activeTab;
+ this.elements.$activeSettingsTab = $activeTab;
},
roleManager: {
arrowUp: 'dashicons-arrow-up',
arrowDown: 'dashicons-arrow-down'
},
- toggle: function( $trigger ) {
+ toggle: function toggle($trigger) {
var self = this,
- $row = $trigger.closest( self.selectors.row ),
- $toggleHandleIcon = $row.find( self.selectors.toggleHandle ).find( '.dashicons' ),
- $controls = $row.find( self.selectors.controlsContainer );
+ $row = $trigger.closest(self.selectors.row),
+ $toggleHandleIcon = $row.find(self.selectors.toggleHandle).find('.dashicons'),
+ $controls = $row.find(self.selectors.controlsContainer);
- $controls.toggleClass( 'hidden' );
- if ( $controls.hasClass( 'hidden' ) ) {
- $toggleHandleIcon.removeClass( self.selectors.arrowUp ).addClass( self.selectors.arrowDown );
+ $controls.toggleClass('hidden');
+ if ($controls.hasClass('hidden')) {
+ $toggleHandleIcon.removeClass(self.selectors.arrowUp).addClass(self.selectors.arrowDown);
} else {
- $toggleHandleIcon.removeClass( self.selectors.arrowDown ).addClass( self.selectors.arrowUp );
+ $toggleHandleIcon.removeClass(self.selectors.arrowDown).addClass(self.selectors.arrowUp);
}
- self.updateLabel( $row );
+ self.updateLabel($row);
},
- updateLabel: function( $row ) {
+ updateLabel: function updateLabel($row) {
var self = this,
- $indicator = $row.find( self.selectors.excludedIndicator ),
- excluded = $row.find( self.selectors.excludedField ).is( ':checked' );
- if ( excluded ) {
- $indicator.html( $indicator.data( 'excluded-label' ) );
+ $indicator = $row.find(self.selectors.excludedIndicator),
+ excluded = $row.find(self.selectors.excludedField).is(':checked');
+ if (excluded) {
+ $indicator.html($indicator.data('excluded-label'));
} else {
- $indicator.html( '' );
+ $indicator.html('');
}
- self.setAdvancedState( $row, excluded );
+ self.setAdvancedState($row, excluded);
},
- setAdvancedState: function( $row, state ) {
+ setAdvancedState: function setAdvancedState($row, state) {
var self = this,
- $controls = $row.find( 'input[type="checkbox"]' ).not( self.selectors.excludedField );
+ $controls = $row.find('input[type="checkbox"]').not(self.selectors.excludedField);
- $controls.each( function( index, input ) {
- $( input ).prop( 'disabled', state );
+ $controls.each(function (index, input) {
+ $(input).prop('disabled', state);
});
},
- bind: function() {
+ bind: function bind() {
var self = this;
- $( document ).on( 'click', self.selectors.label + ',' + self.selectors.toggleHandle, function( event ) {
+ $(document).on('click', self.selectors.label + ',' + self.selectors.toggleHandle, function (event) {
event.stopPropagation();
event.preventDefault();
- self.toggle( $( this ) );
- } ).on( 'change', self.selectors.excludedField, function() {
- self.updateLabel( $( this ).closest( self.selectors.row ) );
+ self.toggle($(this));
+ }).on('change', self.selectors.excludedField, function () {
+ self.updateLabel($(this).closest(self.selectors.row));
});
-
},
- init: function() {
+ init: function init() {
var self = this;
- if ( ! $( 'body[class*="' + self.selectors.body + '"]' ).length ) {
+ if (!$('body[class*="' + self.selectors.body + '"]').length) {
return;
}
self.bind();
- $( self.selectors.row ).each( function( index, row ) {
- self.updateLabel( $( row ) );
+ $(self.selectors.row).each(function (index, row) {
+ self.updateLabel($(row));
});
}
}
- };
+ });
- $( function() {
- ElementorAdminApp.init();
- } );
+ $(function () {
+ window.elementorAdmin = new ElementorAdmin();
- window.elementorAdmin = ElementorAdminApp;
-}( jQuery ) );
+ elementorAdmin.elements.$window.trigger('elementor/admin/init');
+ });
+})(jQuery);
-},{"elementor-admin/maintenance-mode":2}],2:[function(require,module,exports){
-var ViewModule = require( 'elementor-utils/view-module' ),
- MaintenanceModeModule;
+/***/ }),
-MaintenanceModeModule = ViewModule.extend( {
- getDefaultSettings: function() {
+/***/ 161:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var ViewModule = __webpack_require__(1),
+ MaintenanceModeModule;
+
+MaintenanceModeModule = ViewModule.extend({
+ getDefaultSettings: function getDefaultSettings() {
return {
selectors: {
modeSelect: '.elementor_maintenance_mode_mode select',
};
},
- getDefaultElements: function() {
+ getDefaultElements: function getDefaultElements() {
var elements = {},
- selectors = this.getSettings( 'selectors' );
+ selectors = this.getSettings('selectors');
- elements.$modeSelect = jQuery( selectors.modeSelect );
- elements.$maintenanceModeTable = elements.$modeSelect.parents( selectors.maintenanceModeTable );
- elements.$excludeModeSelect = elements.$maintenanceModeTable.find( selectors.excludeModeSelect );
- elements.$excludeRolesArea = elements.$maintenanceModeTable.find( selectors.excludeRolesArea );
- elements.$templateSelect = elements.$maintenanceModeTable.find( selectors.templateSelect );
- elements.$editTemplateButton = elements.$maintenanceModeTable.find( selectors.editTemplateButton );
- elements.$maintenanceModeDescriptions = elements.$maintenanceModeTable.find( selectors.maintenanceModeDescriptions );
- elements.$maintenanceModeError = elements.$maintenanceModeTable.find( selectors.maintenanceModeError );
+ elements.$modeSelect = jQuery(selectors.modeSelect);
+ elements.$maintenanceModeTable = elements.$modeSelect.parents(selectors.maintenanceModeTable);
+ elements.$excludeModeSelect = elements.$maintenanceModeTable.find(selectors.excludeModeSelect);
+ elements.$excludeRolesArea = elements.$maintenanceModeTable.find(selectors.excludeRolesArea);
+ elements.$templateSelect = elements.$maintenanceModeTable.find(selectors.templateSelect);
+ elements.$editTemplateButton = elements.$maintenanceModeTable.find(selectors.editTemplateButton);
+ elements.$maintenanceModeDescriptions = elements.$maintenanceModeTable.find(selectors.maintenanceModeDescriptions);
+ elements.$maintenanceModeError = elements.$maintenanceModeTable.find(selectors.maintenanceModeError);
return elements;
},
- bindEvents: function() {
+ bindEvents: function bindEvents() {
var settings = this.getSettings(),
- elements = this.elements;
+ elements = this.elements;
- elements.$modeSelect.on( 'change', function() {
- elements.$maintenanceModeTable.toggleClass( settings.classes.isEnabled, !! elements.$modeSelect.val() );
+ elements.$modeSelect.on('change', function () {
+ elements.$maintenanceModeTable.toggleClass(settings.classes.isEnabled, !!elements.$modeSelect.val());
elements.$maintenanceModeDescriptions.hide();
- elements.$maintenanceModeDescriptions.filter( '[data-value="' + elements.$modeSelect.val() + '"]' ).show();
- } ).trigger( 'change' );
+ elements.$maintenanceModeDescriptions.filter('[data-value="' + elements.$modeSelect.val() + '"]').show();
+ }).trigger('change');
- elements.$excludeModeSelect.on( 'change', function() {
- elements.$excludeRolesArea.toggle( 'custom' === elements.$excludeModeSelect.val() );
- } ).trigger( 'change' );
+ elements.$excludeModeSelect.on('change', function () {
+ elements.$excludeRolesArea.toggle('custom' === elements.$excludeModeSelect.val());
+ }).trigger('change');
- elements.$templateSelect.on( 'change', function() {
+ elements.$templateSelect.on('change', function () {
var templateID = elements.$templateSelect.val();
- if ( ! templateID ) {
+ if (!templateID) {
elements.$editTemplateButton.hide();
elements.$maintenanceModeError.show();
return;
}
- var editUrl = ElementorAdminConfig.home_url + '?p=' + templateID + '&elementor';
+ var editUrl = elementorAdmin.config.home_url + '?p=' + templateID + '&elementor';
- elements.$editTemplateButton
- .prop( 'href', editUrl )
- .show();
+ elements.$editTemplateButton.prop('href', editUrl).show();
elements.$maintenanceModeError.hide();
- } ).trigger( 'change' );
+ }).trigger('change');
}
-} );
+});
module.exports = MaintenanceModeModule;
-},{"elementor-utils/view-module":4}],3:[function(require,module,exports){
-var Module = function() {
+/***/ }),
+
+/***/ 2:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var Module = function Module() {
var $ = jQuery,
- instanceParams = arguments,
- self = this,
- settings,
- events = {};
+ instanceParams = arguments,
+ self = this,
+ settings,
+ events = {};
- var ensureClosureMethods = function() {
- $.each( self, function( methodName ) {
- var oldMethod = self[ methodName ];
+ var ensureClosureMethods = function ensureClosureMethods() {
+ $.each(self, function (methodName) {
+ var oldMethod = self[methodName];
- if ( 'function' !== typeof oldMethod ) {
+ if ('function' !== typeof oldMethod) {
return;
}
- self[ methodName ] = function() {
- return oldMethod.apply( self, arguments );
+ self[methodName] = function () {
+ return oldMethod.apply(self, arguments);
};
});
};
- var initSettings = function() {
+ var initSettings = function initSettings() {
settings = self.getDefaultSettings();
var instanceSettings = instanceParams[0];
- if ( instanceSettings ) {
- $.extend( settings, instanceSettings );
+ if (instanceSettings) {
+ $.extend(settings, instanceSettings);
}
};
- var init = function() {
- self.__construct.apply( self, instanceParams );
+ var init = function init() {
+ self.__construct.apply(self, instanceParams);
ensureClosureMethods();
initSettings();
- self.trigger( 'init' );
+ self.trigger('init');
};
- this.getItems = function( items, itemKey ) {
- if ( itemKey ) {
- var keyStack = itemKey.split( '.' ),
- currentKey = keyStack.splice( 0, 1 );
+ this.getItems = function (items, itemKey) {
+ if (itemKey) {
+ var keyStack = itemKey.split('.'),
+ currentKey = keyStack.splice(0, 1);
- if ( ! keyStack.length ) {
- return items[ currentKey ];
+ if (!keyStack.length) {
+ return items[currentKey];
}
- if ( ! items[ currentKey ] ) {
+ if (!items[currentKey]) {
return;
}
- return this.getItems( items[ currentKey ], keyStack.join( '.' ) );
+ return this.getItems(items[currentKey], keyStack.join('.'));
}
return items;
};
- this.getSettings = function( setting ) {
- return this.getItems( settings, setting );
+ this.getSettings = function (setting) {
+ return this.getItems(settings, setting);
};
- this.setSettings = function( settingKey, value, settingsContainer ) {
- if ( ! settingsContainer ) {
+ this.setSettings = function (settingKey, value, settingsContainer) {
+ if (!settingsContainer) {
settingsContainer = settings;
}
- if ( 'object' === typeof settingKey ) {
- $.extend( settingsContainer, settingKey );
+ if ('object' === (typeof settingKey === 'undefined' ? 'undefined' : _typeof(settingKey))) {
+ $.extend(settingsContainer, settingKey);
return self;
}
- var keyStack = settingKey.split( '.' ),
- currentKey = keyStack.splice( 0, 1 );
+ var keyStack = settingKey.split('.'),
+ currentKey = keyStack.splice(0, 1);
- if ( ! keyStack.length ) {
- settingsContainer[ currentKey ] = value;
+ if (!keyStack.length) {
+ settingsContainer[currentKey] = value;
return self;
}
- if ( ! settingsContainer[ currentKey ] ) {
- settingsContainer[ currentKey ] = {};
+ if (!settingsContainer[currentKey]) {
+ settingsContainer[currentKey] = {};
}
- return self.setSettings( keyStack.join( '.' ), value, settingsContainer[ currentKey ] );
+ return self.setSettings(keyStack.join('.'), value, settingsContainer[currentKey]);
};
- this.forceMethodImplementation = function( methodArguments ) {
+ this.forceMethodImplementation = function (methodArguments) {
var functionName = methodArguments.callee.name;
- throw new ReferenceError( 'The method ' + functionName + ' must to be implemented in the inheritor child.' );
+ throw new ReferenceError('The method ' + functionName + ' must to be implemented in the inheritor child.');
};
- this.on = function( eventName, callback ) {
- if ( 'object' === typeof eventName ) {
- $.each( eventName, function( singleEventName ) {
- self.on( singleEventName, this );
- } );
+ this.on = function (eventName, callback) {
+ if ('object' === (typeof eventName === 'undefined' ? 'undefined' : _typeof(eventName))) {
+ $.each(eventName, function (singleEventName) {
+ self.on(singleEventName, this);
+ });
return self;
}
- var eventNames = eventName.split( ' ' );
+ var eventNames = eventName.split(' ');
- eventNames.forEach( function( singleEventName ) {
- if ( ! events[ singleEventName ] ) {
- events[ singleEventName ] = [];
+ eventNames.forEach(function (singleEventName) {
+ if (!events[singleEventName]) {
+ events[singleEventName] = [];
}
- events[ singleEventName ].push( callback );
- } );
+ events[singleEventName].push(callback);
+ });
return self;
};
- this.off = function( eventName, callback ) {
- if ( ! events[ eventName ] ) {
+ this.off = function (eventName, callback) {
+ if (!events[eventName]) {
return self;
}
- if ( ! callback ) {
- delete events[ eventName ];
+ if (!callback) {
+ delete events[eventName];
return self;
}
- var callbackIndex = events[ eventName ].indexOf( callback );
+ var callbackIndex = events[eventName].indexOf(callback);
- if ( -1 !== callbackIndex ) {
- delete events[ eventName ][ callbackIndex ];
+ if (-1 !== callbackIndex) {
+ delete events[eventName][callbackIndex];
}
return self;
};
- this.trigger = function( eventName ) {
- var methodName = 'on' + eventName[ 0 ].toUpperCase() + eventName.slice( 1 ),
- params = Array.prototype.slice.call( arguments, 1 );
+ this.trigger = function (eventName) {
+ var methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1),
+ params = Array.prototype.slice.call(arguments, 1);
- if ( self[ methodName ] ) {
- self[ methodName ].apply( self, params );
+ if (self[methodName]) {
+ self[methodName].apply(self, params);
}
- var callbacks = events[ eventName ];
+ var callbacks = events[eventName];
- if ( ! callbacks ) {
+ if (!callbacks) {
return self;
}
- $.each( callbacks, function( index, callback ) {
- callback.apply( self, params );
- } );
+ $.each(callbacks, function (index, callback) {
+ callback.apply(self, params);
+ });
return self;
};
init();
};
-Module.prototype.__construct = function() {};
+Module.prototype.__construct = function () {};
-Module.prototype.getDefaultSettings = function() {
+Module.prototype.getDefaultSettings = function () {
return {};
};
Module.extendsCount = 0;
-Module.extend = function( properties ) {
+Module.extend = function (properties) {
var $ = jQuery,
- parent = this;
+ parent = this;
- var child = function() {
- return parent.apply( this, arguments );
+ var child = function child() {
+ return parent.apply(this, arguments);
};
- $.extend( child, parent );
+ $.extend(child, parent);
- child.prototype = Object.create( $.extend( {}, parent.prototype, properties ) );
+ child.prototype = Object.create($.extend({}, parent.prototype, properties));
child.prototype.constructor = child;
/*
- * Constructor ID is used to set an unique ID
+ * Constructor ID is used to set an unique ID
* to every extend of the Module.
*
- * It's useful in some cases such as unique
- * listener for frontend handlers.
- */
+ * It's useful in some cases such as unique
+ * listener for frontend handlers.
+ */
var constructorID = ++Module.extendsCount;
- child.prototype.getConstructorID = function() {
+ child.prototype.getConstructorID = function () {
return constructorID;
};
module.exports = Module;
-},{}],4:[function(require,module,exports){
-var Module = require( './module' ),
- ViewModule;
-
-ViewModule = Module.extend( {
- elements: null,
-
- getDefaultElements: function() {
- return {};
- },
-
- bindEvents: function() {},
-
- onInit: function() {
- this.initElements();
-
- this.bindEvents();
- },
-
- initElements: function() {
- this.elements = this.getDefaultElements();
- }
-} );
-
-module.exports = ViewModule;
+/***/ })
-},{"./module":3}]},{},[1])
-//# sourceMappingURL=admin.js.map
+/******/ });
+//# sourceMappingURL=admin.js.map
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-!function i(r,s,c){function l(t,e){if(!s[t]){if(!r[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(d)return d(t,!0);var o=new Error("Cannot find module '"+t+"'");throw o.code="MODULE_NOT_FOUND",o}var a=s[t]={exports:{}};r[t][0].call(a.exports,function(e){return l(r[t][1][e]||e)},a,a.exports,i,r,s,c)}return s[t].exports}for(var d="function"==typeof require&&require,e=0;e<c.length;e++)l(c[e]);return l}({1:[function(t,e,n){!function(i){"use strict";var e={maintenanceMode:null,cacheElements:function(){this.cache={$window:i(window),$body:i("body"),$switchMode:i("#elementor-switch-mode"),$goToEditLink:i("#elementor-go-to-edit-page-link"),$switchModeInput:i("#elementor-switch-mode-input"),$switchModeButton:i("#elementor-switch-mode-button"),$elementorLoader:i(".elementor-loader"),$builderEditor:i("#elementor-editor"),$importButton:i("#elementor-import-template-trigger"),$importArea:i("#elementor-import-template-area"),$settingsForm:i("#elementor-settings-form"),$settingsTabsWrapper:i("#elementor-settings-tabs-wrapper"),$addNew:i(".post-type-elementor_library #wpbody-content .page-title-action:first, #elementor-template-library-add-new"),$addNewDialogHeader:i(".elementor-templates-modal__header"),$addNewDialogClose:i(".elementor-templates-modal__header__close-modal"),$addNewDialogContent:i("#elementor-new-template-dialog-content")},this.cache.$settingsFormPages=this.cache.$settingsForm.find(".elementor-settings-form-page"),this.cache.$activeSettingsPage=this.cache.$settingsFormPages.filter(".elementor-active"),this.cache.$settingsTabs=this.cache.$settingsTabsWrapper.children(),this.cache.$activeSettingsTab=this.cache.$settingsTabs.filter(".nav-tab-active")},toggleStatus:function(){var e=this.isElementorMode();this.cache.$body.toggleClass("elementor-editor-active",e).toggleClass("elementor-editor-inactive",!e)},bindEvents:function(){var n=this;n.cache.$switchModeButton.on("click",function(e){if(e.preventDefault(),n.isElementorMode())n.cache.$switchModeInput.val("");else{n.cache.$switchModeInput.val(!0);var t=i("#title");t.val()||t.val("Elementor #"+i("#post_ID").val()),wp.autosave&&wp.autosave.server.triggerSave(),n.animateLoader(),i(document).on("heartbeat-tick.autosave",function(){n.cache.$window.off("beforeunload.edit-post"),location.href=n.cache.$goToEditLink.attr("href")})}n.toggleStatus()}),n.cache.$addNew.on("click",function(e){e.preventDefault(),n.getNewTemplateModal().show()}),n.cache.$goToEditLink.on("click",function(){n.animateLoader()}),i("div.notice.elementor-message-dismissed").on("click","button.notice-dismiss",function(e){e.preventDefault(),i.post(ajaxurl,{action:"elementor_set_admin_notice_viewed",notice_id:i(this).closest(".elementor-message-dismissed").data("notice_id")})}),i("#elementor-clear-cache-button").on("click",function(e){e.preventDefault();var t=i(this);t.removeClass("success").addClass("loading"),i.post(ajaxurl,{action:"elementor_clear_cache",_nonce:t.data("nonce")}).done(function(){t.removeClass("loading").addClass("success")})}),i("#elementor-library-sync-button").on("click",function(e){e.preventDefault();var t=i(this);t.removeClass("success").addClass("loading"),i.post(ajaxurl,{action:"elementor_reset_library",_nonce:t.data("nonce")}).done(function(){t.removeClass("loading").addClass("success")})}),i("#elementor-replace-url-button").on("click",function(e){e.preventDefault();var t=i(this),n=t.parents("tr"),o=n.find('[name="from"]'),a=n.find('[name="to"]');t.removeClass("success").addClass("loading"),i.post(ajaxurl,{action:"elementor_replace_url",from:o.val(),to:a.val(),_nonce:t.data("nonce")}).done(function(e){t.removeClass("loading"),e.success&&t.addClass("success"),(new DialogsManager.Instance).createWidget("alert",{message:e.data}).show()})}),n.cache.$settingsTabs.on({click:function(e){e.preventDefault(),e.currentTarget.focus()},focus:function(){var e=location.href.replace(/#.*/,"");history.pushState({},"",e+this.hash),n.goToSettingsTabFromHash()}}),i(".elementor-rollback-button").on("click",function(e){e.preventDefault();var t=i(this);(new DialogsManager.Instance).createWidget("confirm",{headerMessage:ElementorAdminConfig.i18n.rollback_to_previous_version,message:ElementorAdminConfig.i18n.rollback_confirm,strings:{confirm:ElementorAdminConfig.i18n.yes,cancel:ElementorAdminConfig.i18n.cancel},onConfirm:function(){t.addClass("loading"),location.href=t.attr("href")}}).show()}),i(".elementor_css_print_method select").on("change",function(){var e=i(".elementor-css-print-method-description");e.hide(),e.filter('[data-value="'+i(this).val()+'"]').show()}).trigger("change")},init:function(){this.cacheElements(),this.bindEvents(),this.initTemplatesImport(),this.initNewTemplateDialog(),this.initMaintenanceMode(),this.goToSettingsTabFromHash(),this.roleManager.init()},initNewTemplateDialog:function(){var t,n=this;n.getNewTemplateModal=function(){if(!t){var e=new DialogsManager.Instance;t=e.createWidget("lightbox",{id:"elementor-new-template-modal",className:"elementor-templates-modal",headerMessage:n.cache.$addNewDialogHeader,message:n.cache.$addNewDialogContent.children(),hide:{onButtonClick:!1},position:{my:"center",at:"center"},onReady:function(){DialogsManager.getWidgetType("lightbox").prototype.onReady.apply(this,arguments),n.cache.$addNewDialogClose.on("click",function(){t.hide()})}})}return t}},initTemplatesImport:function(){if(this.cache.$body.hasClass("post-type-elementor_library")){var e=this,t=e.cache.$importButton,n=e.cache.$importArea;e.cache.$formAnchor=i("h1"),i("#wpbody-content").find(".page-title-action:last").after(t),e.cache.$formAnchor.after(n),t.on("click",function(){i("#elementor-import-template-area").toggle()})}},initMaintenanceMode:function(){var e=t("elementor-admin/maintenance-mode");this.maintenanceMode=new e},isElementorMode:function(){return!!this.cache.$switchModeInput.val()},animateLoader:function(){this.cache.$goToEditLink.addClass("elementor-animate")},goToSettingsTabFromHash:function(){var e=location.hash.slice(1);e&&this.goToSettingsTab(e)},goToSettingsTab:function(e){var t=this.cache.$settingsFormPages.filter("#"+e);if(t.length){this.cache.$activeSettingsPage.removeClass("elementor-active"),this.cache.$activeSettingsTab.removeClass("nav-tab-active");var n=this.cache.$settingsTabs.filter("#elementor-settings-"+e);t.addClass("elementor-active"),n.addClass("nav-tab-active"),this.cache.$settingsForm.attr("action","options.php#"+e),this.cache.$activeSettingsPage=t,this.cache.$activeSettingsTab=n}},roleManager:{selectors:{body:"elementor-role-manager",row:".elementor-role-row",label:".elementor-role-label",excludedIndicator:".elementor-role-excluded-indicator",excludedField:'input[name="elementor_exclude_user_roles[]"]',controlsContainer:".elementor-role-controls",toggleHandle:".elementor-role-toggle",arrowUp:"dashicons-arrow-up",arrowDown:"dashicons-arrow-down"},toggle:function(e){var t=this,n=e.closest(t.selectors.row),o=n.find(t.selectors.toggleHandle).find(".dashicons"),a=n.find(t.selectors.controlsContainer);a.toggleClass("hidden"),a.hasClass("hidden")?o.removeClass(t.selectors.arrowUp).addClass(t.selectors.arrowDown):o.removeClass(t.selectors.arrowDown).addClass(t.selectors.arrowUp),t.updateLabel(n)},updateLabel:function(e){var t=this,n=e.find(t.selectors.excludedIndicator),o=e.find(t.selectors.excludedField).is(":checked");o?n.html(n.data("excluded-label")):n.html(""),t.setAdvancedState(e,o)},setAdvancedState:function(e,n){e.find('input[type="checkbox"]').not(this.selectors.excludedField).each(function(e,t){i(t).prop("disabled",n)})},bind:function(){var t=this;i(document).on("click",t.selectors.label+","+t.selectors.toggleHandle,function(e){e.stopPropagation(),e.preventDefault(),t.toggle(i(this))}).on("change",t.selectors.excludedField,function(){t.updateLabel(i(this).closest(t.selectors.row))})},init:function(){var n=this;i('body[class*="'+n.selectors.body+'"]').length&&(n.bind(),i(n.selectors.row).each(function(e,t){n.updateLabel(i(t))}))}}};i(function(){e.init()}),window.elementorAdmin=e}(jQuery)},{"elementor-admin/maintenance-mode":2}],2:[function(e,t,n){var o;o=e("elementor-utils/view-module").extend({getDefaultSettings:function(){return{selectors:{modeSelect:".elementor_maintenance_mode_mode select",maintenanceModeTable:"#tab-maintenance_mode table",maintenanceModeDescriptions:".elementor-maintenance-mode-description",excludeModeSelect:".elementor_maintenance_mode_exclude_mode select",excludeRolesArea:".elementor_maintenance_mode_exclude_roles",templateSelect:".elementor_maintenance_mode_template_id select",editTemplateButton:".elementor-edit-template",maintenanceModeError:".elementor-maintenance-mode-error"},classes:{isEnabled:"elementor-maintenance-mode-is-enabled"}}},getDefaultElements:function(){var e={},t=this.getSettings("selectors");return e.$modeSelect=jQuery(t.modeSelect),e.$maintenanceModeTable=e.$modeSelect.parents(t.maintenanceModeTable),e.$excludeModeSelect=e.$maintenanceModeTable.find(t.excludeModeSelect),e.$excludeRolesArea=e.$maintenanceModeTable.find(t.excludeRolesArea),e.$templateSelect=e.$maintenanceModeTable.find(t.templateSelect),e.$editTemplateButton=e.$maintenanceModeTable.find(t.editTemplateButton),e.$maintenanceModeDescriptions=e.$maintenanceModeTable.find(t.maintenanceModeDescriptions),e.$maintenanceModeError=e.$maintenanceModeTable.find(t.maintenanceModeError),e},bindEvents:function(){var e=this.getSettings(),n=this.elements;n.$modeSelect.on("change",function(){n.$maintenanceModeTable.toggleClass(e.classes.isEnabled,!!n.$modeSelect.val()),n.$maintenanceModeDescriptions.hide(),n.$maintenanceModeDescriptions.filter('[data-value="'+n.$modeSelect.val()+'"]').show()}).trigger("change"),n.$excludeModeSelect.on("change",function(){n.$excludeRolesArea.toggle("custom"===n.$excludeModeSelect.val())}).trigger("change"),n.$templateSelect.on("change",function(){var e=n.$templateSelect.val();if(!e)return n.$editTemplateButton.hide(),void n.$maintenanceModeError.show();var t=ElementorAdminConfig.home_url+"?p="+e+"&elementor";n.$editTemplateButton.prop("href",t).show(),n.$maintenanceModeError.hide()}).trigger("change")}}),t.exports=o},{"elementor-utils/view-module":4}],3:[function(e,t,n){var i=function(){var i,r=jQuery,t=arguments,s=this,a={};this.getItems=function(e,t){if(t){var n=t.split("."),o=n.splice(0,1);if(!n.length)return e[o];if(!e[o])return;return this.getItems(e[o],n.join("."))}return e},this.getSettings=function(e){return this.getItems(i,e)},this.setSettings=function(e,t,n){if(n||(n=i),"object"==typeof e)return r.extend(n,e),s;var o=e.split("."),a=o.splice(0,1);return o.length?(n[a]||(n[a]={}),s.setSettings(o.join("."),t,n[a])):(n[a]=t,s)},this.forceMethodImplementation=function(e){var t=e.callee.name;throw new ReferenceError("The method "+t+" must to be implemented in the inheritor child.")},this.on=function(e,t){return"object"==typeof e?r.each(e,function(e){s.on(e,this)}):e.split(" ").forEach(function(e){a[e]||(a[e]=[]),a[e].push(t)}),s},this.off=function(e,t){if(!a[e])return s;if(!t)return delete a[e],s;var n=a[e].indexOf(t);return-1!==n&&delete a[e][n],s},this.trigger=function(e){var t="on"+e[0].toUpperCase()+e.slice(1),n=Array.prototype.slice.call(arguments,1);s[t]&&s[t].apply(s,n);var o=a[e];return o&&r.each(o,function(e,t){t.apply(s,n)}),s},s.__construct.apply(s,t),r.each(s,function(e){var t=s[e];"function"==typeof t&&(s[e]=function(){return t.apply(s,arguments)})}),function(){i=s.getDefaultSettings();var e=t[0];e&&r.extend(i,e)}(),s.trigger("init")};i.prototype.__construct=function(){},i.prototype.getDefaultSettings=function(){return{}},i.extendsCount=0,i.extend=function(e){var t=jQuery,n=this,o=function(){return n.apply(this,arguments)};t.extend(o,n),(o.prototype=Object.create(t.extend({},n.prototype,e))).constructor=o;var a=++i.extendsCount;return o.prototype.getConstructorID=function(){return a},o.__super__=n.prototype,o},t.exports=i},{}],4:[function(e,t,n){var o;o=e("./module").extend({elements:null,getDefaultElements:function(){return{}},bindEvents:function(){},onInit:function(){this.initElements(),this.bindEvents()},initElements:function(){this.elements=this.getDefaultElements()}}),t.exports=o},{"./module":3}]},{},[1]);
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+!function(e){var t={};function n(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,n),i.l=!0,i.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 i in e)n.d(o,i,function(t){return e[t]}.bind(null,i));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=160)}({1:function(e,t,n){"use strict";var o;o=n(2).extend({elements:null,getDefaultElements:function(){return{}},bindEvents:function(){},onInit:function(){this.initElements(),this.bindEvents()},initElements:function(){this.elements=this.getDefaultElements()}}),e.exports=o},160:function(e,t,n){"use strict";!function(e){var t=n(1),o=t.extend({maintenanceMode:null,config:ElementorAdminConfig,getDefaultElements:function(){var t={$window:e(window),$body:e("body"),$switchMode:e("#elementor-switch-mode"),$goToEditLink:e("#elementor-go-to-edit-page-link"),$switchModeInput:e("#elementor-switch-mode-input"),$switchModeButton:e("#elementor-switch-mode-button"),$elementorLoader:e(".elementor-loader"),$builderEditor:e("#elementor-editor"),$importButton:e("#elementor-import-template-trigger"),$importArea:e("#elementor-import-template-area"),$settingsForm:e("#elementor-settings-form"),$settingsTabsWrapper:e("#elementor-settings-tabs-wrapper")};return t.$settingsFormPages=t.$settingsForm.find(".elementor-settings-form-page"),t.$activeSettingsPage=t.$settingsFormPages.filter(".elementor-active"),t.$settingsTabs=t.$settingsTabsWrapper.children(),t.$activeSettingsTab=t.$settingsTabs.filter(".nav-tab-active"),t},toggleStatus:function(){var e=this.isElementorMode();this.elements.$body.toggleClass("elementor-editor-active",e).toggleClass("elementor-editor-inactive",!e)},bindEvents:function(){var t=this;t.elements.$switchModeButton.on("click",function(n){if(n.preventDefault(),t.isElementorMode())t.elements.$switchModeInput.val("");else{t.elements.$switchModeInput.val(!0);var o=e("#title");o.val()||o.val("Elementor #"+e("#post_ID").val()),wp.autosave&&wp.autosave.server.triggerSave(),t.animateLoader(),e(document).on("heartbeat-tick.autosave",function(){t.elements.$window.off("beforeunload.edit-post"),location.href=t.elements.$goToEditLink.attr("href")})}t.toggleStatus()}),t.elements.$goToEditLink.on("click",function(){t.animateLoader()}),e("div.notice.elementor-message-dismissed").on("click","button.notice-dismiss, .elementor-button-notice-dismiss",function(t){t.preventDefault(),e.post(ajaxurl,{action:"elementor_set_admin_notice_viewed",notice_id:e(this).closest(".elementor-message-dismissed").data("notice_id")});var n=e(this).closest(".elementor-message-dismissed");n.fadeTo(100,0,function(){n.slideUp(100,function(){n.remove()})})}),e("#elementor-clear-cache-button").on("click",function(t){t.preventDefault();var n=e(this);n.removeClass("success").addClass("loading"),e.post(ajaxurl,{action:"elementor_clear_cache",_nonce:n.data("nonce")}).done(function(){n.removeClass("loading").addClass("success")})}),e("#elementor-library-sync-button").on("click",function(t){t.preventDefault();var n=e(this);n.removeClass("success").addClass("loading"),e.post(ajaxurl,{action:"elementor_reset_library",_nonce:n.data("nonce")}).done(function(){n.removeClass("loading").addClass("success")})}),e("#elementor-replace-url-button").on("click",function(n){n.preventDefault();var o=e(this),i=o.parents("tr"),a=i.find('[name="from"]'),r=i.find('[name="to"]');o.removeClass("success").addClass("loading"),e.post(ajaxurl,{action:"elementor_replace_url",from:a.val(),to:r.val(),_nonce:o.data("nonce")}).done(function(e){o.removeClass("loading"),e.success&&o.addClass("success"),t.getDialogsManager().createWidget("alert",{message:e.data}).show()})}),t.elements.$settingsTabs.on({click:function(e){e.preventDefault(),e.currentTarget.focus()},focus:function(){var e=location.href.replace(/#.*/,"");history.pushState({},"",e+this.hash),t.goToSettingsTabFromHash()}}),e(".elementor-rollback-button").on("click",function(n){n.preventDefault();var o=e(this);t.getDialogsManager().createWidget("confirm",{headerMessage:t.config.i18n.rollback_to_previous_version,message:t.config.i18n.rollback_confirm,strings:{confirm:t.config.i18n.yes,cancel:t.config.i18n.cancel},onConfirm:function(){o.addClass("loading"),location.href=o.attr("href")}}).show()}),e(".elementor_css_print_method select").on("change",function(){var t=e(".elementor-css-print-method-description");t.hide(),t.filter('[data-value="'+e(this).val()+'"]').show()}).trigger("change")},setMarionetteTemplateCompiler:function(){"undefined"!=typeof Marionette&&(Marionette.TemplateCache.prototype.compileTemplate=function(e,t){return t={evaluate:/<#([\s\S]+?)#>/g,interpolate:/{{{([\s\S]+?)}}}/g,escape:/{{([^}]+?)}}(?!})/g},_.template(e,t)})},onInit:function(){t.prototype.onInit.apply(this,arguments),this.setMarionetteTemplateCompiler(),this.initDialogsManager(),this.initTemplatesImport(),this.initMaintenanceMode(),this.goToSettingsTabFromHash(),this.roleManager.init()},initDialogsManager:function(){var e;this.getDialogsManager=function(){return e||(e=new DialogsManager.Instance),e}},initTemplatesImport:function(){if(this.elements.$body.hasClass("post-type-elementor_library")){var t=this.elements.$importButton,n=this.elements.$importArea;this.elements.$formAnchor=e("h1"),e("#wpbody-content").find(".page-title-action:last").after(t),this.elements.$formAnchor.after(n),t.on("click",function(){e("#elementor-import-template-area").toggle()})}},initMaintenanceMode:function(){var e=n(161);this.maintenanceMode=new e},isElementorMode:function(){return!!this.elements.$switchModeInput.val()},animateLoader:function(){this.elements.$goToEditLink.addClass("elementor-animate")},goToSettingsTabFromHash:function(){var e=location.hash.slice(1);e&&this.goToSettingsTab(e)},goToSettingsTab:function(e){var t=this.elements.$settingsFormPages.filter("#"+e);if(t.length){this.elements.$activeSettingsPage.removeClass("elementor-active"),this.elements.$activeSettingsTab.removeClass("nav-tab-active");var n=this.elements.$settingsTabs.filter("#elementor-settings-"+e);t.addClass("elementor-active"),n.addClass("nav-tab-active"),this.elements.$settingsForm.attr("action","options.php#"+e),this.elements.$activeSettingsPage=t,this.elements.$activeSettingsTab=n}},roleManager:{selectors:{body:"elementor-role-manager",row:".elementor-role-row",label:".elementor-role-label",excludedIndicator:".elementor-role-excluded-indicator",excludedField:'input[name="elementor_exclude_user_roles[]"]',controlsContainer:".elementor-role-controls",toggleHandle:".elementor-role-toggle",arrowUp:"dashicons-arrow-up",arrowDown:"dashicons-arrow-down"},toggle:function(e){var t=e.closest(this.selectors.row),n=t.find(this.selectors.toggleHandle).find(".dashicons"),o=t.find(this.selectors.controlsContainer);o.toggleClass("hidden"),o.hasClass("hidden")?n.removeClass(this.selectors.arrowUp).addClass(this.selectors.arrowDown):n.removeClass(this.selectors.arrowDown).addClass(this.selectors.arrowUp),this.updateLabel(t)},updateLabel:function(e){var t=e.find(this.selectors.excludedIndicator),n=e.find(this.selectors.excludedField).is(":checked");n?t.html(t.data("excluded-label")):t.html(""),this.setAdvancedState(e,n)},setAdvancedState:function(t,n){t.find('input[type="checkbox"]').not(this.selectors.excludedField).each(function(t,o){e(o).prop("disabled",n)})},bind:function(){var t=this;e(document).on("click",t.selectors.label+","+t.selectors.toggleHandle,function(n){n.stopPropagation(),n.preventDefault(),t.toggle(e(this))}).on("change",t.selectors.excludedField,function(){t.updateLabel(e(this).closest(t.selectors.row))})},init:function(){var t=this;e('body[class*="'+t.selectors.body+'"]').length&&(t.bind(),e(t.selectors.row).each(function(n,o){t.updateLabel(e(o))}))}}});e(function(){window.elementorAdmin=new o,elementorAdmin.elements.$window.trigger("elementor/admin/init")})}(jQuery)},161:function(e,t,n){"use strict";var o;o=n(1).extend({getDefaultSettings:function(){return{selectors:{modeSelect:".elementor_maintenance_mode_mode select",maintenanceModeTable:"#tab-maintenance_mode table",maintenanceModeDescriptions:".elementor-maintenance-mode-description",excludeModeSelect:".elementor_maintenance_mode_exclude_mode select",excludeRolesArea:".elementor_maintenance_mode_exclude_roles",templateSelect:".elementor_maintenance_mode_template_id select",editTemplateButton:".elementor-edit-template",maintenanceModeError:".elementor-maintenance-mode-error"},classes:{isEnabled:"elementor-maintenance-mode-is-enabled"}}},getDefaultElements:function(){var e={},t=this.getSettings("selectors");return e.$modeSelect=jQuery(t.modeSelect),e.$maintenanceModeTable=e.$modeSelect.parents(t.maintenanceModeTable),e.$excludeModeSelect=e.$maintenanceModeTable.find(t.excludeModeSelect),e.$excludeRolesArea=e.$maintenanceModeTable.find(t.excludeRolesArea),e.$templateSelect=e.$maintenanceModeTable.find(t.templateSelect),e.$editTemplateButton=e.$maintenanceModeTable.find(t.editTemplateButton),e.$maintenanceModeDescriptions=e.$maintenanceModeTable.find(t.maintenanceModeDescriptions),e.$maintenanceModeError=e.$maintenanceModeTable.find(t.maintenanceModeError),e},bindEvents:function(){var e=this.getSettings(),t=this.elements;t.$modeSelect.on("change",function(){t.$maintenanceModeTable.toggleClass(e.classes.isEnabled,!!t.$modeSelect.val()),t.$maintenanceModeDescriptions.hide(),t.$maintenanceModeDescriptions.filter('[data-value="'+t.$modeSelect.val()+'"]').show()}).trigger("change"),t.$excludeModeSelect.on("change",function(){t.$excludeRolesArea.toggle("custom"===t.$excludeModeSelect.val())}).trigger("change"),t.$templateSelect.on("change",function(){var e=t.$templateSelect.val();if(!e)return t.$editTemplateButton.hide(),void t.$maintenanceModeError.show();var n=elementorAdmin.config.home_url+"?p="+e+"&elementor";t.$editTemplateButton.prop("href",n).show(),t.$maintenanceModeError.hide()}).trigger("change")}}),e.exports=o},2:function(e,t,n){"use strict";var o="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},i=function(){var e,t=jQuery,n=arguments,i=this,a={};this.getItems=function(e,t){if(t){var n=t.split("."),o=n.splice(0,1);if(!n.length)return e[o];if(!e[o])return;return this.getItems(e[o],n.join("."))}return e},this.getSettings=function(t){return this.getItems(e,t)},this.setSettings=function(n,a,r){if(r||(r=e),"object"===(void 0===n?"undefined":o(n)))return t.extend(r,n),i;var s=n.split("."),l=s.splice(0,1);return s.length?(r[l]||(r[l]={}),i.setSettings(s.join("."),a,r[l])):(r[l]=a,i)},this.forceMethodImplementation=function(e){var t=e.callee.name;throw new ReferenceError("The method "+t+" must to be implemented in the inheritor child.")},this.on=function(e,n){return"object"===(void 0===e?"undefined":o(e))?(t.each(e,function(e){i.on(e,this)}),i):(e.split(" ").forEach(function(e){a[e]||(a[e]=[]),a[e].push(n)}),i)},this.off=function(e,t){if(!a[e])return i;if(!t)return delete a[e],i;var n=a[e].indexOf(t);return-1!==n&&delete a[e][n],i},this.trigger=function(e){var n="on"+e[0].toUpperCase()+e.slice(1),o=Array.prototype.slice.call(arguments,1);i[n]&&i[n].apply(i,o);var r=a[e];return r?(t.each(r,function(e,t){t.apply(i,o)}),i):i},i.__construct.apply(i,n),t.each(i,function(e){var t=i[e];"function"==typeof t&&(i[e]=function(){return t.apply(i,arguments)})}),function(){e=i.getDefaultSettings();var o=n[0];o&&t.extend(e,o)}(),i.trigger("init")};i.prototype.__construct=function(){},i.prototype.getDefaultSettings=function(){return{}},i.extendsCount=0,i.extend=function(e){var t=jQuery,n=this,o=function(){return n.apply(this,arguments)};t.extend(o,n),(o.prototype=Object.create(t.extend({},n.prototype,e))).constructor=o;var a=++i.extendsCount;return o.prototype.getConstructorID=function(){return a},o.__super__=n.prototype,o},e.exports=i}});
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
-var TagPanelView = require( 'elementor-dynamic-tags/tag-panel-view' );
+/*! elementor - v2.2.1 - 03-09-2018 */
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 45);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var ControlBaseView = __webpack_require__(7),
+ TagsBehavior = __webpack_require__(97),
+ Validator = __webpack_require__(18),
+ ControlBaseDataView;
+
+ControlBaseDataView = ControlBaseView.extend({
+
+ ui: function ui() {
+ var ui = ControlBaseView.prototype.ui.apply(this, arguments);
+
+ _.extend(ui, {
+ input: 'input[data-setting][type!="checkbox"][type!="radio"]',
+ checkbox: 'input[data-setting][type="checkbox"]',
+ radio: 'input[data-setting][type="radio"]',
+ select: 'select[data-setting]',
+ textarea: 'textarea[data-setting]',
+ responsiveSwitchers: '.elementor-responsive-switcher',
+ contentEditable: '[contenteditable="true"]',
+ tooltipTarget: '.tooltip-target'
+ });
-module.exports = Marionette.Behavior.extend( {
+ return ui;
+ },
- tagView: null,
+ templateHelpers: function templateHelpers() {
+ var controlData = ControlBaseView.prototype.templateHelpers.apply(this, arguments);
- listenerAttached: false,
+ controlData.data.controlValue = this.getControlValue();
- ui: {
- tagArea: '.elementor-control-tag-area',
- dynamicSwitcher: '.elementor-control-dynamic-switcher'
+ return controlData;
},
- events: {
- 'click @ui.dynamicSwitcher': 'onDynamicSwitcherClick'
+ events: function events() {
+ return {
+ 'input @ui.input': 'onBaseInputChange',
+ 'change @ui.checkbox': 'onBaseInputChange',
+ 'change @ui.radio': 'onBaseInputChange',
+ 'input @ui.textarea': 'onBaseInputChange',
+ 'change @ui.select': 'onBaseInputChange',
+ 'input @ui.contentEditable': 'onBaseInputChange',
+ 'click @ui.responsiveSwitchers': 'onResponsiveSwitchersClick'
+ };
},
- initialize: function() {
- if ( ! this.listenerAttached ) {
- this.listenTo( this.view.options.elementSettingsModel, 'change:external:__dynamic__', this.onAfterExternalChange );
- this.listenerAttached = true;
+ behaviors: function behaviors() {
+ var behaviors = {},
+ dynamicSettings = this.options.model.get('dynamic');
+
+ if (dynamicSettings && dynamicSettings.active) {
+ var tags = _.filter(elementor.dynamicTags.getConfig('tags'), function (tag) {
+ return _.intersection(tag.categories, dynamicSettings.categories).length;
+ });
+
+ if (tags.length) {
+ behaviors.tags = {
+ behaviorClass: TagsBehavior,
+ tags: tags,
+ dynamicSettings: dynamicSettings
+ };
+ }
}
+
+ return behaviors;
},
- renderTools: function() {
- if ( this.getOption( 'dynamicSettings' )['default'] ) {
- return;
- }
+ initialize: function initialize(options) {
+ ControlBaseView.prototype.initialize.apply(this, arguments);
- var $dynamicSwitcher = jQuery( Marionette.Renderer.render( '#tmpl-elementor-control-dynamic-switcher' ) );
+ this.registerValidators();
- this.ui.controlTitle[ this.view.model.get( 'label_block' ) ? 'after' : 'before' ]( $dynamicSwitcher );
+ this.listenTo(this.elementSettingsModel, 'change:external:' + this.model.get('name'), this.onAfterExternalChange);
+ },
- this.ui.dynamicSwitcher = this.$el.find( this.ui.dynamicSwitcher.selector );
+ getControlValue: function getControlValue() {
+ return this.elementSettingsModel.get(this.model.get('name'));
},
- toggleDynamicClass: function() {
- this.$el.toggleClass( 'elementor-control-dynamic-value', this.isDynamicMode() );
+ setValue: function setValue(value) {
+ this.setSettingsModel(value);
},
- isDynamicMode: function() {
- var dynamicSettings = this.view.elementSettingsModel.get( '__dynamic__' );
+ setSettingsModel: function setSettingsModel(value) {
+ this.elementSettingsModel.set(this.model.get('name'), value);
- return ! ! ( dynamicSettings && dynamicSettings[ this.view.model.get( 'name' ) ] );
+ this.triggerMethod('settings:change');
},
- createTagsList: function() {
- var tags = _.groupBy( this.getOption( 'tags' ), 'group' ),
- groups = elementor.dynamicTags.getConfig( 'groups' ),
- $tagsList = this.ui.tagsList = jQuery( '<div>', { 'class': 'elementor-tags-list' } ),
- $tagsListInner = jQuery( '<div>', { 'class': 'elementor-tags-list__inner' } );
+ applySavedValue: function applySavedValue() {
+ this.setInputValue('[data-setting="' + this.model.get('name') + '"]', this.getControlValue());
+ },
- $tagsList.append( $tagsListInner );
+ getEditSettings: function getEditSettings(setting) {
+ var settings = this.getOption('elementEditSettings').toJSON();
- jQuery.each( groups, function( groupName ) {
- var groupTags = tags[ groupName ];
+ if (setting) {
+ return settings[setting];
+ }
- if ( ! groupTags ) {
- return;
- }
+ return settings;
+ },
- var group = this,
- $groupTitle = jQuery( '<div>', { 'class': 'elementor-tags-list__group-title' } ).text( group.title );
+ setEditSetting: function setEditSetting(settingKey, settingValue) {
+ var settings = this.getOption('elementEditSettings');
+
+ settings.set(settingKey, settingValue);
+ },
- $tagsListInner.append( $groupTitle );
+ getInputValue: function getInputValue(input) {
+ var $input = this.$(input);
- groupTags.forEach( function( tag ) {
- var $tag = jQuery( '<div>', { 'class': 'elementor-tags-list__item' } );
+ if ($input.is('[contenteditable="true"]')) {
+ return $input.html();
+ }
+
+ var inputValue = $input.val(),
+ inputType = $input.attr('type');
- $tag.text( tag.title ).attr( 'data-tag-name', tag.name );
+ if (-1 !== ['radio', 'checkbox'].indexOf(inputType)) {
+ return $input.prop('checked') ? inputValue : '';
+ }
- $tagsListInner.append( $tag );
- } );
- } );
+ if ('number' === inputType && _.isFinite(inputValue)) {
+ return +inputValue;
+ }
- $tagsListInner.on( 'click', '.elementor-tags-list__item', this.onTagsListItemClick.bind( this ) );
+ // Temp fix for jQuery (< 3.0) that return null instead of empty array
+ if ('SELECT' === input.tagName && $input.prop('multiple') && null === inputValue) {
+ inputValue = [];
+ }
- elementor.$body.append( $tagsList );
+ return inputValue;
},
- getTagsList: function() {
- if ( ! this.ui.tagsList ) {
- this.createTagsList();
+ setInputValue: function setInputValue(input, value) {
+ var $input = this.$(input),
+ inputType = $input.attr('type');
+
+ if ('checkbox' === inputType) {
+ $input.prop('checked', !!value);
+ } else if ('radio' === inputType) {
+ $input.filter('[value="' + value + '"]').prop('checked', true);
+ } else {
+ $input.val(value);
}
+ },
- return this.ui.tagsList;
+ addValidator: function addValidator(validator) {
+ this.validators.push(validator);
},
- toggleTagsList: function() {
- var $tagsList = this.getTagsList();
+ registerValidators: function registerValidators() {
+ this.validators = [];
- if ( $tagsList.is( ':visible' ) ) {
- $tagsList.hide();
+ var validationTerms = {};
- return;
+ if (this.model.get('required')) {
+ validationTerms.required = true;
}
- $tagsList.show().position( {
- my: 'right top',
- at: 'right bottom+5',
- of: this.ui.dynamicSwitcher
- } );
+ if (!jQuery.isEmptyObject(validationTerms)) {
+ this.addValidator(new Validator({
+ validationTerms: validationTerms
+ }));
+ }
},
- setTagView: function( id, name, settings ) {
- if ( this.tagView ) {
- this.tagView.destroy();
+ onRender: function onRender() {
+ ControlBaseView.prototype.onRender.apply(this, arguments);
+
+ if (this.model.get('responsive')) {
+ this.renderResponsiveSwitchers();
}
- var tagView = this.tagView = new TagPanelView( {
- id: id,
- name: name,
- settings: settings,
- dynamicSettings: this.getOption( 'dynamicSettings' )
- } );
+ this.applySavedValue();
- tagView.render();
+ this.triggerMethod('ready');
- this.ui.tagArea.after( tagView.el );
+ this.toggleControlVisibility();
- this.listenTo( tagView.model, 'change', this.onTagViewModelChange.bind( this ) )
- .listenTo( tagView, 'remove', this.onTagViewRemove.bind( this ) );
+ this.addTooltip();
},
- setDefaultTagView: function() {
- var tagData = elementor.dynamicTags.tagTextToTagData( this.getDynamicValue() );
+ onBaseInputChange: function onBaseInputChange(event) {
+ clearTimeout(this.correctionTimeout);
- this.setTagView( tagData.id, tagData.name, tagData.settings );
- },
+ var input = event.currentTarget,
+ value = this.getInputValue(input),
+ validators = this.validators.slice(0),
+ settingsValidators = this.elementSettingsModel.validators[this.model.get('name')];
- tagViewToTagText: function() {
- var tagView = this.tagView;
+ if (settingsValidators) {
+ validators = validators.concat(settingsValidators);
+ }
- return elementor.dynamicTags.tagDataToTagText( tagView.getOption( 'id' ), tagView.getOption( 'name' ), tagView.model );
- },
+ if (validators) {
+ var oldValue = this.getControlValue(input.dataset.setting);
- getDynamicValue: function() {
- return this.view.elementSettingsModel.get( '__dynamic__' )[ this.view.model.get( 'name' ) ];
- },
+ var isValidValue = validators.every(function (validator) {
+ return validator.isValid(value, oldValue);
+ });
- getDynamicControlSettings: function() {
+ if (!isValidValue) {
+ this.correctionTimeout = setTimeout(this.setInputValue.bind(this, input, oldValue), 1200);
- return {
- control: {
- name: '__dynamic__',
- label: this.view.model.get( 'label' )
+ return;
}
- };
+ }
+
+ this.updateElementModel(value, input);
+
+ this.triggerMethod('input:change', event);
},
- setDynamicValue: function( value ) {
- var settingKey = this.view.model.get( 'name' ),
- dynamicSettings = this.view.elementSettingsModel.get( '__dynamic__' ) || {};
+ onResponsiveSwitchersClick: function onResponsiveSwitchersClick(event) {
+ var device = jQuery(event.currentTarget).data('device');
- dynamicSettings = elementor.helpers.cloneObject( dynamicSettings );
+ elementor.changeDeviceMode(device);
- dynamicSettings[ settingKey ] = value;
+ this.triggerMethod('responsive:switcher:click', device);
+ },
- this.view.elementSettingsModel.set( '__dynamic__', dynamicSettings, this.getDynamicControlSettings( settingKey ) );
+ renderResponsiveSwitchers: function renderResponsiveSwitchers() {
+ var templateHtml = Marionette.Renderer.render('#tmpl-elementor-control-responsive-switchers', this.model.attributes);
- this.toggleDynamicClass();
+ this.ui.controlTitle.after(templateHtml);
},
- destroyTagView: function() {
- if ( this.tagView ) {
- this.tagView.destroy();
+ onAfterExternalChange: function onAfterExternalChange() {
+ this.hideTooltip();
- this.tagView = null;
- }
+ this.applySavedValue();
},
- onRender: function() {
- this.$el.addClass( 'elementor-control-dynamic' );
+ addTooltip: function addTooltip() {
+ if (!this.ui.tooltipTarget) {
+ return;
+ }
- this.renderTools();
+ // Create tooltip on controls
+ this.ui.tooltipTarget.tipsy({
+ gravity: function gravity() {
+ // `n` for down, `s` for up
+ var gravity = jQuery(this).data('tooltip-pos');
- this.toggleDynamicClass();
+ if (undefined !== gravity) {
+ return gravity;
+ } else {
+ return 'n';
+ }
+ },
+ title: function title() {
+ return this.getAttribute('data-tooltip');
+ }
+ });
+ },
- if ( this.isDynamicMode() ) {
- this.setDefaultTagView();
+ hideTooltip: function hideTooltip() {
+ if (this.ui.tooltipTarget) {
+ this.ui.tooltipTarget.tipsy('hide');
}
},
- onDynamicSwitcherClick: function() {
- this.toggleTagsList();
+ updateElementModel: function updateElementModel(value) {
+ this.setValue(value);
+ }
+}, {
+ // Static methods
+ getStyleValue: function getStyleValue(placeholder, controlValue) {
+ return controlValue;
},
- onTagsListItemClick: function( event ) {
- var $tag = jQuery( event.currentTarget );
-
- this.setTagView( elementor.helpers.getUniqueID(), $tag.data( 'tagName' ), {} );
-
- this.setDynamicValue( this.tagViewToTagText() );
-
- this.toggleTagsList();
+ onPasteStyle: function onPasteStyle() {
+ return true;
+ }
+});
- if ( this.tagView.getTagConfig().settings_required ) {
- this.tagView.showSettingsPopup();
- }
- },
+module.exports = ControlBaseDataView;
- onTagViewModelChange: function() {
- this.setDynamicValue( this.tagViewToTagText() );
- },
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __webpack_require__) {
- onTagViewRemove: function() {
- var settingKey = this.view.model.get( 'name' ),
- dynamicSettings = this.view.elementSettingsModel.get( '__dynamic__' );
+"use strict";
- dynamicSettings = elementor.helpers.cloneObject( dynamicSettings );
- delete dynamicSettings[settingKey ];
+var Module = __webpack_require__(2),
+ ViewModule;
- if ( Object.keys( dynamicSettings ).length ) {
- this.view.elementSettingsModel.set( '__dynamic__', dynamicSettings, this.getDynamicControlSettings( settingKey ) );
- } else {
- this.view.elementSettingsModel.unset( '__dynamic__', this.getDynamicControlSettings( settingKey ) );
- }
+ViewModule = Module.extend({
+ elements: null,
- this.toggleDynamicClass();
+ getDefaultElements: function getDefaultElements() {
+ return {};
},
- onAfterExternalChange: function() {
- this.destroyTagView();
+ bindEvents: function bindEvents() {},
- if ( this.isDynamicMode() ) {
- this.setDefaultTagView();
- }
+ onInit: function onInit() {
+ this.initElements();
- this.toggleDynamicClass();
+ this.bindEvents();
},
- onDestroy: function() {
- this.destroyTagView();
+ initElements: function initElements() {
+ this.elements = this.getDefaultElements();
}
-} );
+});
-},{"elementor-dynamic-tags/tag-panel-view":5}],2:[function(require,module,exports){
-var Module = require( 'elementor-utils/module' ),
- SettingsModel = require( 'elementor-elements/models/base-settings' );
+module.exports = ViewModule;
-module.exports = Module.extend( {
+/***/ }),
+/* 2 */
+/***/ (function(module, exports, __webpack_require__) {
- CACHE_KEY_NOT_FOUND_ERROR: 'Cache key not found',
+"use strict";
- tags: {
- Base: require( 'elementor-dynamic-tags/tag' )
- },
- cache: {},
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
- cacheRequests: {},
+var Module = function Module() {
+ var $ = jQuery,
+ instanceParams = arguments,
+ self = this,
+ settings,
+ events = {};
- cacheCallbacks: [],
+ var ensureClosureMethods = function ensureClosureMethods() {
+ $.each(self, function (methodName) {
+ var oldMethod = self[methodName];
- addCacheRequest: function( tag ) {
- this.cacheRequests[ this.createCacheKey( tag ) ] = true;
- },
+ if ('function' !== typeof oldMethod) {
+ return;
+ }
- createCacheKey: function( tag ) {
- return btoa( tag.getOption( 'name' ) ) + '-' + btoa( encodeURIComponent( JSON.stringify( tag.model ) ) );
- },
+ self[methodName] = function () {
+ return oldMethod.apply(self, arguments);
+ };
+ });
+ };
- loadTagDataFromCache: function( tag ) {
- var cacheKey = this.createCacheKey( tag );
+ var initSettings = function initSettings() {
+ settings = self.getDefaultSettings();
- if ( undefined !== this.cache[ cacheKey ] ) {
- return this.cache[ cacheKey ];
- }
+ var instanceSettings = instanceParams[0];
- if ( ! this.cacheRequests[ cacheKey ] ) {
- this.addCacheRequest( tag );
+ if (instanceSettings) {
+ $.extend(settings, instanceSettings);
}
- },
+ };
- loadCacheRequests: function() {
- var cache = this.cache,
- cacheRequests = this.cacheRequests,
- cacheCallbacks = this.cacheCallbacks;
+ var init = function init() {
+ self.__construct.apply(self, instanceParams);
- this.cacheRequests = {};
+ ensureClosureMethods();
- this.cacheCallbacks = [];
+ initSettings();
- elementor.ajax.send( 'render_tags', {
- data: {
- post_id: elementor.config.document.id,
- tags: Object.keys( cacheRequests )
- },
- success: function( data ) {
- jQuery.extend( cache, data );
+ self.trigger('init');
+ };
- cacheCallbacks.forEach( function( callback ) {
- callback();
- } );
+ this.getItems = function (items, itemKey) {
+ if (itemKey) {
+ var keyStack = itemKey.split('.'),
+ currentKey = keyStack.splice(0, 1);
+
+ if (!keyStack.length) {
+ return items[currentKey];
}
- } );
- },
- refreshCacheFromServer: function( callback ) {
- this.cacheCallbacks.push( callback );
+ if (!items[currentKey]) {
+ return;
+ }
- this.loadCacheRequests();
- },
+ return this.getItems(items[currentKey], keyStack.join('.'));
+ }
- getConfig: function( key ) {
- return this.getItems( elementor.config.dynamicTags, key );
- },
+ return items;
+ };
- parseTagsText: function( text, settings, parseCallback ) {
- var self = this;
+ this.getSettings = function (setting) {
+ return this.getItems(settings, setting);
+ };
- if ( 'object' === settings.returnType ) {
- return self.parseTagText( text, settings, parseCallback );
+ this.setSettings = function (settingKey, value, settingsContainer) {
+ if (!settingsContainer) {
+ settingsContainer = settings;
}
- return text.replace( /\[elementor-tag[^\]]+]/g, function( tagText ) {
- return self.parseTagText( tagText, settings, parseCallback );
- } );
- },
+ if ('object' === (typeof settingKey === 'undefined' ? 'undefined' : _typeof(settingKey))) {
+ $.extend(settingsContainer, settingKey);
+
+ return self;
+ }
- parseTagText: function( tagText, settings, parseCallback ) {
- var tagData = this.tagTextToTagData( tagText );
+ var keyStack = settingKey.split('.'),
+ currentKey = keyStack.splice(0, 1);
- if ( ! tagData ) {
- if ( 'object' === settings.returnType ) {
- return {};
- }
+ if (!keyStack.length) {
+ settingsContainer[currentKey] = value;
- return '';
+ return self;
}
- return parseCallback( tagData.id, tagData.name, tagData.settings );
- },
+ if (!settingsContainer[currentKey]) {
+ settingsContainer[currentKey] = {};
+ }
- tagTextToTagData: function( tagText ) {
- var tagIDMatch = tagText.match( /id="(.*?(?="))"/ ),
- tagNameMatch = tagText.match( /name="(.*?(?="))"/ ),
- tagSettingsMatch = tagText.match( /settings="(.*?(?="]))/ );
+ return self.setSettings(keyStack.join('.'), value, settingsContainer[currentKey]);
+ };
- if ( ! tagIDMatch || ! tagNameMatch || ! tagSettingsMatch ) {
- return false;
- }
+ this.forceMethodImplementation = function (methodArguments) {
+ var functionName = methodArguments.callee.name;
- return {
- id: tagIDMatch[1],
- name: tagNameMatch[1],
- settings: JSON.parse( decodeURIComponent( tagSettingsMatch[1] ) )
- };
- },
+ throw new ReferenceError('The method ' + functionName + ' must to be implemented in the inheritor child.');
+ };
- createTag: function( tagID, tagName, tagSettings ) {
- var tagConfig = this.getConfig( 'tags.' + tagName );
+ this.on = function (eventName, callback) {
+ if ('object' === (typeof eventName === 'undefined' ? 'undefined' : _typeof(eventName))) {
+ $.each(eventName, function (singleEventName) {
+ self.on(singleEventName, this);
+ });
- if ( ! tagConfig ) {
- return;
+ return self;
}
- var TagClass = this.tags[ tagName ] || this.tags.Base,
- model = new SettingsModel( tagSettings, {
- controls: tagConfig.controls
- } );
+ var eventNames = eventName.split(' ');
- return new TagClass( { id: tagID, name: tagName, model: model } );
- },
+ eventNames.forEach(function (singleEventName) {
+ if (!events[singleEventName]) {
+ events[singleEventName] = [];
+ }
- getTagDataContent: function( tagID, tagName, tagSettings ) {
- var tag = this.createTag( tagID, tagName, tagSettings );
+ events[singleEventName].push(callback);
+ });
- if ( ! tag ) {
- return;
+ return self;
+ };
+
+ this.off = function (eventName, callback) {
+ if (!events[eventName]) {
+ return self;
}
- return tag.getContent();
- },
+ if (!callback) {
+ delete events[eventName];
- tagDataToTagText: function( tagID, tagName, tagSettings ) {
- tagSettings = encodeURIComponent( JSON.stringify( tagSettings && tagSettings.toJSON( { removeDefault: true } ) || {} ) );
+ return self;
+ }
- return '[elementor-tag id="' + tagID + '" name="' + tagName + '" settings="' + tagSettings + '"]';
- },
+ var callbackIndex = events[eventName].indexOf(callback);
- cleanCache: function() {
- this.cache = {};
- },
+ if (-1 !== callbackIndex) {
+ delete events[eventName][callbackIndex];
+ }
- onInit: function() {
- this.loadCacheRequests = _.debounce( this.loadCacheRequests, 300 );
- }
-} );
+ return self;
+ };
-},{"elementor-dynamic-tags/tag":6,"elementor-elements/models/base-settings":68,"elementor-utils/module":131}],3:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- className: 'elementor-tag-controls-stack-empty',
+ this.trigger = function (eventName) {
+ var methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1),
+ params = Array.prototype.slice.call(arguments, 1);
- template: '#tmpl-elementor-tag-controls-stack-empty'
-} );
+ if (self[methodName]) {
+ self[methodName].apply(self, params);
+ }
-},{}],4:[function(require,module,exports){
-var ControlsStack = require( 'elementor-views/controls-stack' ),
- EmptyView = require( 'elementor-dynamic-tags/tag-controls-stack-empty' );
+ var callbacks = events[eventName];
-module.exports = ControlsStack.extend( {
- activeTab: 'content',
+ if (!callbacks) {
+ return self;
+ }
- template: _.noop,
+ $.each(callbacks, function (index, callback) {
+ callback.apply(self, params);
+ });
- emptyView: EmptyView,
+ return self;
+ };
- isEmpty: function() {
- // Ignore the section control
- return this.collection.length < 2;
- },
+ init();
+};
- childViewOptions: function() {
- return {
- elementSettingsModel: this.model
- };
- },
+Module.prototype.__construct = function () {};
- onRenderTemplate: function() {
- this.activateFirstSection();
- }
-} );
+Module.prototype.getDefaultSettings = function () {
+ return {};
+};
-},{"elementor-dynamic-tags/tag-controls-stack-empty":3,"elementor-views/controls-stack":126}],5:[function(require,module,exports){
-var TagControlsStack = require( 'elementor-dynamic-tags/tag-controls-stack' ),
- SettingsModel = require( 'elementor-elements/models/base-settings' );
+Module.extendsCount = 0;
-module.exports = Marionette.ItemView.extend( {
+Module.extend = function (properties) {
+ var $ = jQuery,
+ parent = this;
- className: 'elementor-dynamic-cover elementor-input-style',
+ var child = function child() {
+ return parent.apply(this, arguments);
+ };
- tagControlsStack: null,
+ $.extend(child, parent);
- templateHelpers: function() {
- var helpers = {};
- if ( this.model ) {
- helpers.controls = this.model.options.controls;
- }
+ child.prototype = Object.create($.extend({}, parent.prototype, properties));
- return helpers;
- },
+ child.prototype.constructor = child;
- ui: {
- remove: '.elementor-dynamic-cover__remove'
- },
+ /*
+ * Constructor ID is used to set an unique ID
+ * to every extend of the Module.
+ *
+ * It's useful in some cases such as unique
+ * listener for frontend handlers.
+ */
+ var constructorID = ++Module.extendsCount;
- events: function() {
- var events = {
- 'click @ui.remove': 'onRemoveClick'
- };
+ child.prototype.getConstructorID = function () {
+ return constructorID;
+ };
- if ( this.hasSettings() ) {
- events.click = 'onClick';
- }
+ child.__super__ = parent.prototype;
- return events;
- },
+ return child;
+};
- getTemplate: function() {
- var config = this.getTagConfig(),
- templateFunction = Marionette.TemplateCache.get( '#tmpl-elementor-control-dynamic-cover' ),
- renderedTemplate = Marionette.Renderer.render( templateFunction, {
- hasSettings: this.hasSettings(),
- isRemovable: ! this.getOption( 'dynamicSettings' )['default'],
- title: config.title,
- content: config.panel_template
- } );
+module.exports = Module;
- return Marionette.TemplateCache.prototype.compileTemplate( renderedTemplate.trim() );
- },
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
- getTagConfig: function() {
- return elementor.dynamicTags.getConfig( 'tags.' + this.getOption( 'name' ) );
- },
+"use strict";
- initSettingsPopup: function() {
- var settingsPopupOptions = {
- className: 'elementor-tag-settings-popup',
- position: {
- my: 'left top+5',
- at: 'left bottom',
- of: this.$el,
- autoRefresh: true
- }
- };
- var settingsPopup = elementor.dialogsManager.createWidget( 'buttons', settingsPopupOptions );
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
- this.getSettingsPopup = function() {
- return settingsPopup;
- };
- },
+var BaseSettingsModel;
- hasSettings: function() {
- return !! Object.values( this.getTagConfig().controls ).length;
- },
+BaseSettingsModel = Backbone.Model.extend({
+ options: {},
- showSettingsPopup: function() {
- if ( ! this.tagControlsStack ) {
- this.initTagControlsStack();
- }
+ initialize: function initialize(data, options) {
+ var self = this;
- var settingsPopup = this.getSettingsPopup();
+ // Keep the options for cloning
+ self.options = options;
+
+ self.controls = elementor.mergeControlsSettings(options.controls);
+
+ self.validators = {};
- if ( settingsPopup.isVisible() ) {
+ if (!self.controls) {
return;
}
- settingsPopup.show();
- },
+ var attrs = data || {},
+ defaults = {};
- initTagControlsStack: function() {
- this.tagControlsStack = new TagControlsStack( {
- model: this.model,
- controls: this.model.controls,
- el: this.getSettingsPopup().getElements( 'message' )[0]
- } );
+ _.each(self.controls, function (control) {
+ var isUIControl = -1 !== control.features.indexOf('ui');
- this.tagControlsStack.render();
- },
+ if (isUIControl) {
+ return;
+ }
+ var controlName = control.name;
- initModel: function() {
- this.model = new SettingsModel( this.getOption( 'settings' ), {
- controls: this.getTagConfig().controls
- } );
- },
+ defaults[controlName] = control['default'];
- initialize: function() {
- if ( ! this.hasSettings() ) {
- return;
- }
+ var isDynamicControl = control.dynamic && control.dynamic.active,
+ hasDynamicSettings = isDynamicControl && attrs.__dynamic__ && attrs.__dynamic__[controlName];
- this.initModel();
+ if (isDynamicControl && !hasDynamicSettings && control.dynamic['default']) {
+ if (!attrs.__dynamic__) {
+ attrs.__dynamic__ = {};
+ }
- this.initSettingsPopup();
+ attrs.__dynamic__[controlName] = control.dynamic['default'];
- this.listenTo( this.model, 'change', this.render );
- },
+ hasDynamicSettings = true;
+ }
- onClick: function() {
- this.showSettingsPopup();
- },
+ // Check if the value is a plain object ( and not an array )
+ var isMultipleControl = jQuery.isPlainObject(control['default']);
- onRemoveClick: function( event ) {
- event.stopPropagation();
+ if (undefined !== attrs[controlName] && isMultipleControl && !_.isObject(attrs[controlName]) && !hasDynamicSettings) {
+ elementor.debug.addCustomError(new TypeError('An invalid argument supplied as multiple control value'), 'InvalidElementData', 'Element `' + (self.get('widgetType') || self.get('elType')) + '` got <' + attrs[controlName] + '> as `' + controlName + '` value. Expected array or object.');
- this.destroy();
+ delete attrs[controlName];
+ }
- this.trigger( 'remove' );
- },
+ if (undefined === attrs[controlName]) {
+ attrs[controlName] = defaults[controlName];
+ }
+ });
- onDestroy: function() {
- if ( this.hasSettings() ) {
- this.getSettingsPopup().destroy();
- }
- }
-} );
+ self.defaults = defaults;
-},{"elementor-dynamic-tags/tag-controls-stack":4,"elementor-elements/models/base-settings":68}],6:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
+ self.handleRepeaterData(attrs);
- hasTemplate: true,
+ self.set(attrs);
+ },
- tagName: 'span',
+ handleRepeaterData: function handleRepeaterData(attrs) {
+ _.each(this.controls, function (field) {
+ if (field.is_repeater) {
+ // TODO: Apply defaults on each field in repeater fields
+ if (!(attrs[field.name] instanceof Backbone.Collection)) {
+ attrs[field.name] = new Backbone.Collection(attrs[field.name], {
+ model: function model(attrs, options) {
+ options = options || {};
- className: function() {
- return 'elementor-tag';
- },
+ options.controls = field.fields;
- getTemplate: function() {
- if ( ! this.hasTemplate ) {
- return false;
- }
+ if (!attrs._id) {
+ attrs._id = elementor.helpers.getUniqueID();
+ }
- return Marionette.TemplateCache.get( '#tmpl-elementor-tag-' + this.getOption( 'name' ) + '-content' );
+ return new BaseSettingsModel(attrs, options);
+ }
+ });
+ }
+ }
+ });
},
- initialize: function() {
- try {
- this.getTemplate();
- } catch ( e ) {
- this.hasTemplate = false;
- }
+ getFontControls: function getFontControls() {
+ return _.filter(this.getActiveControls(), function (control) {
+ return 'font' === control.type;
+ });
},
- getConfig: function( key ) {
- var config = elementor.dynamicTags.getConfig( 'tags.' + this.getOption( 'name' ) );
+ getStyleControls: function getStyleControls(controls, attributes) {
+ var self = this;
- if ( key ) {
- return config[ key ];
- }
+ controls = elementor.helpers.cloneObject(self.getActiveControls(controls, attributes));
- return config;
- },
+ var styleControls = [];
- getContent: function() {
- var contentType = this.getConfig( 'content_type' ),
- data;
+ jQuery.each(controls, function () {
+ var control = this,
+ controlDefaultSettings = elementor.config.controls[control.type];
- if ( ! this.hasTemplate ) {
- data = elementor.dynamicTags.loadTagDataFromCache( this );
+ control = jQuery.extend({}, controlDefaultSettings, control);
- if ( undefined === data ) {
- throw new Error( elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR );
- }
- }
+ if (control.fields) {
+ var styleFields = [];
- if ( 'ui' === contentType ) {
- this.render();
+ self.attributes[control.name].each(function (item) {
+ styleFields.push(self.getStyleControls(control.fields, item.attributes));
+ });
- if ( this.hasTemplate ) {
- return this.el.outerHTML;
+ control.styleFields = styleFields;
}
- if ( this.getConfig( 'wrapped_tag' ) ) {
- data = jQuery( data ).html();
+ if (control.fields || control.dynamic && control.dynamic.active || self.isStyleControl(control.name, controls)) {
+ styleControls.push(control);
}
+ });
- this.$el.html( data );
- }
-
- return data;
+ return styleControls;
},
- onRender: function() {
- this.el.id = 'elementor-tag-' + this.getOption( 'id' );
- }
-} );
-
-},{}],7:[function(require,module,exports){
-module.exports = Marionette.Behavior.extend( {
- previewWindow: null,
+ isStyleControl: function isStyleControl(attribute, controls) {
+ controls = controls || this.controls;
- ui: function() {
- return {
- buttonPreview: '#elementor-panel-saver-button-preview',
- buttonPublish: '#elementor-panel-saver-button-publish',
- buttonSaveOptions: '#elementor-panel-saver-button-save-options',
- buttonPublishLabel: '#elementor-panel-saver-button-publish-label',
- menuSaveDraft: '#elementor-panel-saver-menu-save-draft',
- lastEditedWrapper: '.elementor-last-edited-wrapper'
- };
- },
+ var currentControl = _.find(controls, function (control) {
+ return attribute === control.name;
+ });
- events: function() {
- return {
- 'click @ui.buttonPreview': 'onClickButtonPreview',
- 'click @ui.buttonPublish': 'onClickButtonPublish',
- 'click @ui.menuSaveDraft': 'onClickMenuSaveDraft'
- };
+ return currentControl && !_.isEmpty(currentControl.selectors);
},
- initialize: function() {
- elementor.saver
- .on( 'before:save', this.onBeforeSave.bind( this ) )
- .on( 'after:save', this.onAfterSave.bind( this ) )
- .on( 'after:saveError', this.onAfterSaveError.bind( this ) )
- .on( 'page:status:change', this.onPageStatusChange );
-
- elementor.settings.page.model.on( 'change', this.onPageSettingsChange.bind( this ) );
+ getClassControls: function getClassControls(controls) {
+ controls = controls || this.controls;
- elementor.channels.editor.on( 'status:change', this.activateSaveButtons.bind( this ) );
+ return _.filter(controls, function (control) {
+ return !_.isUndefined(control.prefix_class);
+ });
},
- activateSaveButtons: function( hasChanges ) {
- hasChanges = hasChanges || 'draft' === elementor.settings.page.model.get( 'post_status' );
+ isClassControl: function isClassControl(attribute) {
+ var currentControl = _.find(this.controls, function (control) {
+ return attribute === control.name;
+ });
- this.ui.buttonPublish.add( this.ui.menuSaveDraft ).toggleClass( 'elementor-saver-disabled', ! hasChanges );
- this.ui.buttonSaveOptions.toggleClass( 'elementor-saver-disabled', ! hasChanges );
+ return currentControl && !_.isUndefined(currentControl.prefix_class);
},
- onRender: function() {
- this.setMenuItems( elementor.settings.page.model.get( 'post_status' ) );
- this.addTooltip();
+ getControl: function getControl(id) {
+ return _.find(this.controls, function (control) {
+ return id === control.name;
+ });
},
- onPageSettingsChange: function( settings ) {
- var changed = settings.changed;
+ getActiveControls: function getActiveControls(controls, attributes) {
+ var activeControls = {};
- if ( ! _.isUndefined( changed.post_status ) ) {
- this.setMenuItems( changed.post_status );
+ if (!controls) {
+ controls = this.controls;
+ }
- this.refreshWpPreview();
+ if (!attributes) {
+ attributes = this.attributes;
+ }
- // Refresh page-settings post-status value.
- if ( 'page_settings' === elementor.getPanelView().getCurrentPageName() ) {
- elementor.getPanelView().getCurrentPageView().render();
+ _.each(controls, function (control, controlKey) {
+ if (elementor.helpers.isActiveControl(control, attributes)) {
+ activeControls[controlKey] = control;
}
- }
+ });
+
+ return activeControls;
},
- onPageStatusChange: function( newStatus ) {
- if ( 'publish' === newStatus ) {
- elementor.notifications.showToast( {
- message: elementor.config.document.messages.publish_notification,
- buttons: [
- {
- name: 'view_page',
- text: elementor.translate( 'have_a_look' ),
- callback: function() {
- open( elementor.config.document.urls.permalink );
- }
- }
- ]
- } );
- }
+ clone: function clone() {
+ return new BaseSettingsModel(elementor.helpers.cloneObject(this.attributes), elementor.helpers.cloneObject(this.options));
},
- onBeforeSave: function( options ) {
- NProgress.start();
- if ( 'autosave' === options.status ) {
- this.ui.lastEditedWrapper.addClass( 'elementor-state-active' );
+ setExternalChange: function setExternalChange(key, value) {
+ var self = this,
+ settingsToChange;
+
+ if ('object' === (typeof key === 'undefined' ? 'undefined' : _typeof(key))) {
+ settingsToChange = key;
} else {
- this.ui.buttonPublish.addClass( 'elementor-button-state' );
+ settingsToChange = {};
+
+ settingsToChange[key] = value;
}
- },
- onAfterSave: function( data ) {
- NProgress.done();
- this.ui.buttonPublish.removeClass( 'elementor-button-state' );
- this.ui.lastEditedWrapper.removeClass( 'elementor-state-active' );
- this.refreshWpPreview();
- this.setLastEdited( data );
- },
+ self.set(settingsToChange);
- setLastEdited: function( data ) {
- this.ui.lastEditedWrapper
- .removeClass( 'elementor-button-state' )
- .find( '.elementor-last-edited' )
- .html( data.config.last_edited );
+ jQuery.each(settingsToChange, function (changedKey, changedValue) {
+ self.trigger('change:external:' + changedKey, changedValue);
+ });
},
- onAfterSaveError: function() {
- NProgress.done();
- this.ui.buttonPublish.removeClass( 'elementor-button-state' );
- },
+ parseDynamicSettings: function parseDynamicSettings(settings, options, controls) {
+ var self = this;
- onClickButtonPreview: function() {
- // Open immediately in order to avoid popup blockers.
- this.previewWindow = open( elementor.config.document.urls.wp_preview, 'wp-preview-' + elementor.config.document.id );
+ settings = elementor.helpers.cloneObject(settings || self.attributes);
- if ( elementor.saver.isEditorChanged() ) {
- // Force save even if it's saving now.
- if ( elementor.saver.isSaving ) {
- elementor.saver.isSaving = false;
- }
+ options = options || {};
- elementor.saver.doAutoSave();
- }
- },
+ controls = controls || this.controls;
- onClickButtonPublish: function() {
- var postStatus = elementor.settings.page.model.get( 'post_status' );
+ jQuery.each(controls, function () {
+ var control = this,
+ valueToParse;
- if ( this.ui.buttonPublish.hasClass( 'elementor-saver-disabled' ) ) {
- return;
- }
+ if ('repeater' === control.type) {
+ valueToParse = settings[control.name];
+ valueToParse.forEach(function (value, key) {
+ valueToParse[key] = self.parseDynamicSettings(value, options, control.fields);
+ });
- switch ( postStatus ) {
- case 'publish':
- case 'private':
- elementor.saver.update();
- break;
- case 'draft':
- if ( elementor.config.current_user_can_publish ) {
- elementor.saver.publish();
- } else {
- elementor.saver.savePending();
- }
- break;
- case 'pending': // User cannot change post status
- case undefined: // TODO: as a contributor it's undefined instead of 'pending'.
- if ( elementor.config.current_user_can_publish ) {
- elementor.saver.publish();
- } else {
- elementor.saver.update();
- }
- break;
- }
- },
+ return;
+ }
- onClickMenuSaveDraft: function() {
- elementor.saver.saveDraft();
- },
+ valueToParse = settings.__dynamic__ && settings.__dynamic__[control.name];
- setMenuItems: function( postStatus ) {
- var publishLabel = 'publish';
+ if (!valueToParse) {
+ return;
+ }
- switch ( postStatus ) {
- case 'publish':
- case 'private':
- publishLabel = 'update';
+ var dynamicSettings = control.dynamic;
- if ( elementor.config.current_revision_id !== elementor.config.document.id ) {
- this.activateSaveButtons( true );
- }
+ if (undefined === dynamicSettings) {
+ dynamicSettings = elementor.config.controls[control.type].dynamic;
+ }
- break;
- case 'draft':
- if ( ! elementor.config.current_user_can_publish ) {
- publishLabel = 'submit';
- }
+ if (!dynamicSettings || !dynamicSettings.active) {
+ return;
+ }
- this.activateSaveButtons( true );
- break;
- case 'pending': // User cannot change post status
- case undefined: // TODO: as a contributor it's undefined instead of 'pending'.
- if ( ! elementor.config.current_user_can_publish ) {
- publishLabel = 'update';
+ var dynamicValue;
+
+ try {
+ dynamicValue = elementor.dynamicTags.parseTagsText(valueToParse, dynamicSettings, elementor.dynamicTags.getTagDataContent);
+ } catch (error) {
+ if (elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR !== error.message) {
+ throw error;
}
- break;
- }
- this.ui.buttonPublishLabel.html( elementor.translate( publishLabel ) );
- },
+ dynamicValue = '';
- addTooltip: function() {
- // Create tooltip on controls
- this.$el.find( '.tooltip-target' ).tipsy( {
- // `n` for down, `s` for up
- gravity: 's',
- title: function() {
- return this.getAttribute( 'data-tooltip' );
+ if (options.onServerRequestStart) {
+ options.onServerRequestStart();
+ }
+
+ elementor.dynamicTags.refreshCacheFromServer(function () {
+ if (options.onServerRequestEnd) {
+ options.onServerRequestEnd();
+ }
+ });
}
- } );
- },
- refreshWpPreview: function() {
- if ( this.previewWindow ) {
- // Refresh URL form updated config.
- try {
- this.previewWindow.location.href = elementor.config.document.urls.wp_preview;
- } catch ( e ) {
- // If the this.previewWindow is closed or it's domain was changed.
- // Do nothing.
+ if (dynamicSettings.property) {
+ settings[control.name][dynamicSettings.property] = dynamicValue;
+ } else {
+ settings[control.name] = dynamicValue;
}
- }
- }
-} );
+ });
-},{}],8:[function(require,module,exports){
-var Module = require( 'elementor-utils/module' );
+ return settings;
+ },
-module.exports = Module.extend( {
- autoSaveTimer: null,
+ toJSON: function toJSON(options) {
+ var data = Backbone.Model.prototype.toJSON.call(this);
- autosaveInterval: elementor.config.autosave_interval * 1000,
+ options = options || {};
- isSaving: false,
+ delete data.widgetType;
+ delete data.elType;
+ delete data.isInner;
- isChangedDuringSave: false,
+ _.each(data, function (attribute, key) {
+ if (attribute && attribute.toJSON) {
+ data[key] = attribute.toJSON();
+ }
+ });
- __construct: function() {
- this.setWorkSaver();
- },
+ if (options.removeDefault) {
+ var controls = this.controls;
- startTimer: function( hasChanges ) {
- clearTimeout( this.autoSaveTimer );
- if ( hasChanges ) {
- this.autoSaveTimer = setTimeout( _.bind( this.doAutoSave, this ), this.autosaveInterval );
- }
- },
+ _.each(data, function (value, key) {
+ var control = controls[key];
- saveDraft: function() {
- var postStatus = elementor.settings.page.model.get( 'post_status' );
+ if (control) {
+ // TODO: use `save_default` in text|textarea controls.
+ if (control.save_default || ('text' === control.type || 'textarea' === control.type) && data[key]) {
+ return;
+ }
- if ( ! elementor.saver.isEditorChanged() && 'draft' !== postStatus ) {
- return;
- }
+ if (data[key] && 'object' === _typeof(data[key])) {
+ // First check length difference
+ if (Object.keys(data[key]).length !== Object.keys(control['default']).length) {
+ return;
+ }
- switch ( postStatus ) {
- case 'publish':
- case 'private':
- this.doAutoSave();
- break;
- default:
- // Update and create a revision
- this.update();
- }
- },
+ // If it's equal length, loop over value
+ var isEqual = true;
- doAutoSave: function() {
- var editorMode = elementor.channels.dataEditMode.request( 'activeMode' );
+ _.each(data[key], function (propertyValue, propertyKey) {
+ if (data[key][propertyKey] !== control['default'][propertyKey]) {
+ return isEqual = false;
+ }
+ });
- // Avoid auto save for Revisions Preview changes.
- if ( 'edit' !== editorMode ) {
- return;
+ if (isEqual) {
+ delete data[key];
+ }
+ } else {
+ if (data[key] === control['default']) {
+ delete data[key];
+ }
+ }
+ }
+ });
}
- this.saveAutoSave();
- },
+ return elementor.helpers.cloneObject(data);
+ }
+});
- saveAutoSave: function( options ) {
- if ( ! this.isEditorChanged() ) {
- return;
- }
+module.exports = BaseSettingsModel;
- options = _.extend( {
- status: 'autosave'
- }, options );
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
- this.saveEditor( options );
- },
+"use strict";
- savePending: function( options ) {
- options = _.extend( {
- status: 'pending'
- }, options );
- this.saveEditor( options );
- },
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
- discard: function() {
- var self = this;
- elementor.ajax.addRequest( 'discard_changes', {
- success: function() {
- self.setFlagEditorChange( false );
- location.href = elementor.config.document.urls.exit_to_dashboard;
- }
- } );
- },
+var ControlBaseDataView = __webpack_require__(0),
+ ControlBaseMultipleItemView;
- update: function( options ) {
- options = _.extend( {
- status: elementor.settings.page.model.get( 'post_status' )
- }, options );
+ControlBaseMultipleItemView = ControlBaseDataView.extend({
- this.saveEditor( options );
- },
+ applySavedValue: function applySavedValue() {
+ var values = this.getControlValue(),
+ $inputs = this.$('[data-setting]'),
+ self = this;
- publish: function( options ) {
- options = _.extend( {
- status: 'publish'
- }, options );
+ _.each(values, function (value, key) {
+ var $input = $inputs.filter(function () {
+ return key === this.dataset.setting;
+ });
- this.saveEditor( options );
+ self.setInputValue($input, value);
+ });
},
- setFlagEditorChange: function( status ) {
- if ( status && this.isSaving ) {
- this.isChangedDuringSave = true;
- }
+ getControlValue: function getControlValue(key) {
+ var values = this.elementSettingsModel.get(this.model.get('name'));
- this.startTimer( status );
-
- elementor.channels.editor
- .reply( 'status', status )
- .trigger( 'status:change', status );
- },
+ if (!jQuery.isPlainObject(values)) {
+ return {};
+ }
- isEditorChanged: function() {
- return ( true === elementor.channels.editor.request( 'status' ) );
- },
+ if (key) {
+ var value = values[key];
- setWorkSaver: function() {
- var self = this;
- elementor.$window.on( 'beforeunload', function() {
- if ( self.isEditorChanged() ) {
- return elementor.translate( 'before_unload_alert' );
+ if (undefined === value) {
+ value = '';
}
- } );
- },
- saveEditor: function( options ) {
- if ( this.isSaving ) {
- return;
+ return value;
}
- options = _.extend( {
- status: 'draft',
- onSuccess: null
- }, options );
-
- var self = this,
- elements = elementor.elements.toJSON( { removeDefault: true } ),
- settings = elementor.settings.page.model.toJSON( { removeDefault: true } ),
- oldStatus = elementor.settings.page.model.get( 'post_status' ),
- statusChanged = oldStatus !== options.status;
-
- self.trigger( 'before:save', options )
- .trigger( 'before:save:' + options.status, options );
-
- self.isSaving = true;
-
- self.isChangedDuringSave = false;
-
- settings.post_status = options.status;
+ return elementor.helpers.cloneObject(values);
+ },
- elementor.ajax.addRequest( 'save_builder', {
- data: {
- status: options.status,
- elements: elements,
- settings: settings
- },
+ setValue: function setValue(key, value) {
+ var values = this.getControlValue();
- success: function( data ) {
- self.afterAjax();
+ if ('object' === (typeof key === 'undefined' ? 'undefined' : _typeof(key))) {
+ _.each(key, function (internalValue, internalKey) {
+ values[internalKey] = internalValue;
+ });
+ } else {
+ values[key] = value;
+ }
- if ( 'autosave' !== options.status ) {
- if ( statusChanged ) {
- elementor.settings.page.model.set( 'post_status', options.status );
- }
+ this.setSettingsModel(values);
+ },
- // Notice: Must be after update page.model.post_status to the new status.
- if ( ! self.isChangedDuringSave ) {
- self.setFlagEditorChange( false );
- }
- }
+ updateElementModel: function updateElementModel(value, input) {
+ var key = input.dataset.setting;
- if ( data.config ) {
- jQuery.extend( true, elementor.config, data.config );
- }
+ this.setValue(key, value);
+ }
+}, {
+ // Static methods
+ getStyleValue: function getStyleValue(placeholder, controlValue) {
+ if (!_.isObject(controlValue)) {
+ return ''; // invalid
+ }
- elementor.config.data = elements;
+ return controlValue[placeholder];
+ }
+});
- elementor.channels.editor.trigger( 'saved', data );
+module.exports = ControlBaseMultipleItemView;
- self.trigger( 'after:save', data )
- .trigger( 'after:save:' + options.status, data );
+/***/ }),
+/* 5 */,
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( statusChanged ) {
- self.trigger( 'page:status:change', options.status, oldStatus );
- }
+"use strict";
- if ( _.isFunction( options.onSuccess ) ) {
- options.onSuccess.call( this, data );
- }
- },
- error: function( data ) {
- self.afterAjax();
- self.trigger( 'after:saveError', data )
- .trigger( 'after:saveError:' + options.status, data );
+var ControlBaseDataView = __webpack_require__(0),
+ ControlSelect2ItemView;
- var message;
+ControlSelect2ItemView = ControlBaseDataView.extend({
+ getSelect2Placeholder: function getSelect2Placeholder() {
+ return this.ui.select.children('option:first[value=""]').text();
+ },
- if ( _.isString( data ) ) {
- message = data;
- } else if ( data.statusText ) {
- message = elementor.ajax.createErrorMessage( data );
+ getSelect2DefaultOptions: function getSelect2DefaultOptions() {
+ return {
+ allowClear: true,
+ placeholder: this.getSelect2Placeholder(),
+ dir: elementor.config.is_rtl ? 'rtl' : 'ltr'
+ };
+ },
- if ( 0 === data.readyState ) {
- message += ' ' + elementor.translate( 'saving_disabled' );
- }
- } else if ( data[0] && data[0].code ) {
- message = elementor.translate( 'server_error' ) + ' ' + data[0].code;
- }
+ getSelect2Options: function getSelect2Options() {
+ return jQuery.extend(this.getSelect2DefaultOptions(), this.model.get('select2options'));
+ },
- elementor.notifications.showToast( {
- message: message
- } );
- }
- } );
+ onReady: function onReady() {
+ this.ui.select.select2(this.getSelect2Options());
},
- afterAjax: function() {
- this.isSaving = false;
+ onBeforeDestroy: function onBeforeDestroy() {
+ if (this.ui.select.data('select2')) {
+ this.ui.select.select2('destroy');
+ }
+
+ this.$el.remove();
}
-} );
+});
-},{"elementor-utils/module":131}],9:[function(require,module,exports){
-var ViewModule = require( 'elementor-utils/view-module' ),
- SettingsModel = require( 'elementor-elements/models/base-settings' ),
- ControlsCSSParser = require( 'elementor-editor-utils/controls-css-parser' );
+module.exports = ControlSelect2ItemView;
-module.exports = ViewModule.extend( {
- controlsCSS: null,
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
- model: null,
+"use strict";
- hasChange: false,
- changeCallbacks: {},
+var ControlBaseView;
- addChangeCallback: function( attribute, callback ) {
- this.changeCallbacks[ attribute ] = callback;
+ControlBaseView = Marionette.CompositeView.extend({
+ ui: function ui() {
+ return {
+ controlTitle: '.elementor-control-title'
+ };
},
- bindEvents: function() {
- elementor.on( 'preview:loaded', this.onElementorPreviewLoaded );
+ behaviors: function behaviors() {
+ var behaviors = {};
- this.model.on( 'change', this.onModelChange );
+ return elementor.hooks.applyFilters('controls/base/behaviors', behaviors, this);
},
- addPanelPage: function() {
- var name = this.getSettings( 'name' );
-
- elementor.getPanelView().addPage( name + '_settings', {
- view: elementor.settings.panelPages[ name ] || elementor.settings.panelPages.base,
- title: this.getSettings( 'panelPage.title' ),
- options: {
- model: this.model,
- controls: this.model.controls,
- name: name
- }
- } );
+ getBehavior: function getBehavior(name) {
+ return this._behaviors[Object.keys(this.behaviors()).indexOf(name)];
},
- updateStylesheet: function( keepOldEntries ) {
- if ( ! keepOldEntries ) {
- this.controlsCSS.stylesheet.empty();
+ className: function className() {
+ // TODO: Any better classes for that?
+ var classes = 'elementor-control elementor-control-' + this.model.get('name') + ' elementor-control-type-' + this.model.get('type'),
+ modelClasses = this.model.get('classes'),
+ responsive = this.model.get('responsive');
+
+ if (!_.isEmpty(modelClasses)) {
+ classes += ' ' + modelClasses;
}
- this.controlsCSS.addStyleRules( this.model.getStyleControls(), this.model.attributes, this.model.controls, [ /{{WRAPPER}}/g ], [ this.getSettings( 'cssWrapperSelector' ) ] );
+ if (!_.isEmpty(responsive)) {
+ classes += ' elementor-control-responsive-' + responsive.max;
+ }
- this.controlsCSS.addStyleToDocument();
+ return classes;
},
- initModel: function() {
- this.model = new SettingsModel( this.getSettings( 'settings' ), {
- controls: this.getSettings( 'controls' )
- } );
- },
+ templateHelpers: function templateHelpers() {
+ var controlData = {
+ _cid: this.model.cid
+ };
- initControlsCSSParser: function() {
- this.controlsCSS = new ControlsCSSParser( {
- id: this.getSettings( 'name' ),
- settingsModel: this.model
- } );
+ return {
+ data: _.extend({}, this.model.toJSON(), controlData)
+ };
},
- getDataToSave: function( data ) {
- return data;
+ getTemplate: function getTemplate() {
+ return Marionette.TemplateCache.get('#tmpl-elementor-control-' + this.model.get('type') + '-content');
},
- save: function( callback ) {
- var self = this;
-
- if ( ! self.hasChange ) {
- return;
- }
+ initialize: function initialize(options) {
+ this.elementSettingsModel = options.elementSettingsModel;
- var settings = this.model.toJSON( { removeDefault: true } ),
- data = this.getDataToSave( {
- data: settings
- } );
+ var controlType = this.model.get('type'),
+ controlSettings = jQuery.extend(true, {}, elementor.config.controls[controlType], this.model.attributes);
- NProgress.start();
+ this.model.set(controlSettings);
- elementor.ajax.addRequest( 'save_' + this.getSettings( 'name' ) + '_settings', {
- data: data,
- success: function() {
- NProgress.done();
+ this.listenTo(this.elementSettingsModel, 'change', this.toggleControlVisibility);
+ },
- self.setSettings( 'settings', settings );
+ toggleControlVisibility: function toggleControlVisibility() {
+ var isVisible = elementor.helpers.isActiveControl(this.model, this.elementSettingsModel.attributes);
- self.hasChange = false;
+ this.$el.toggleClass('elementor-hidden-control', !isVisible);
- if ( callback ) {
- callback.apply( self, arguments );
- }
- },
- error: function() {
- alert( 'An error occurred' );
- }
- } );
+ elementor.getPanelView().updateScrollbar();
},
- addPanelMenuItem: function() {
- var menuSettings = this.getSettings( 'panelPage.menu' );
+ onRender: function onRender() {
+ var layoutType = this.model.get('label_block') ? 'block' : 'inline',
+ showLabel = this.model.get('show_label'),
+ elClasses = 'elementor-label-' + layoutType;
- if ( ! menuSettings ) {
- return;
+ elClasses += ' elementor-control-separator-' + this.model.get('separator');
+
+ if (!showLabel) {
+ elClasses += ' elementor-control-hidden-label';
}
- var menuItemOptions = {
- icon: menuSettings.icon,
- title: this.getSettings( 'panelPage.title' ),
- type: 'page',
- pageName: this.getSettings( 'name' ) + '_settings'
- };
+ this.$el.addClass(elClasses);
- elementor.modules.layouts.panel.pages.menu.Menu.addItem( menuItemOptions, 'settings', menuSettings.beforeItem );
- },
+ this.toggleControlVisibility();
+ }
+});
- onInit: function() {
- this.initModel();
+module.exports = ControlBaseView;
- this.initControlsCSSParser();
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
- this.addPanelMenuItem();
- this.debounceSave = _.debounce( this.save, 3000 );
+var TemplateLibraryHeaderView = __webpack_require__(14),
+ TemplateLibraryHeaderLogoView = __webpack_require__(9),
+ TemplateLibraryLoadingView = __webpack_require__(15);
- ViewModule.prototype.onInit.apply( this, arguments );
+module.exports = Marionette.LayoutView.extend({
+ el: function el() {
+ return this.modal.getElements('widget');
},
- onModelChange: function( model ) {
- var self = this;
+ modal: null,
- self.hasChange = true;
+ regions: function regions() {
+ return {
+ modalHeader: '.dialog-header',
+ modalContent: '.dialog-lightbox-content',
+ modalLoading: '.dialog-lightbox-loading'
+ };
+ },
+
+ constructor: function constructor() {
+ this.initModal();
+
+ Marionette.LayoutView.prototype.constructor.apply(this, arguments);
+ },
- this.controlsCSS.stylesheet.empty();
+ initialize: function initialize() {
+ this.modalHeader.show(new TemplateLibraryHeaderView(this.getHeaderOptions()));
+ },
- _.each( model.changed, function( value, key ) {
- if ( self.changeCallbacks[ key ] ) {
- self.changeCallbacks[ key ].call( self, value );
+ initModal: function initModal() {
+ var modalOptions = {
+ className: 'elementor-templates-modal',
+ closeButton: false,
+ hide: {
+ onOutsideClick: false
}
- } );
+ };
- self.updateStylesheet( true );
+ jQuery.extend(true, modalOptions, this.getModalOptions());
- self.debounceSave();
+ this.modal = this.getDialogsManager().createWidget('lightbox', modalOptions);
+
+ this.modal.getElements('message').append(this.modal.addElement('content'), this.modal.addElement('loading'));
},
- onElementorPreviewLoaded: function() {
- this.updateStylesheet();
+ getDialogsManager: function getDialogsManager() {
+ return elementor.dialogsManager;
+ },
- this.addPanelPage();
+ showModal: function showModal() {
+ this.modal.show();
+ },
- if ( ! elementor.userCan( 'design' ) ) {
- elementor.panel.currentView.setPage( 'page_settings' );
- }
- }
-} );
+ hideModal: function hideModal() {
+ this.modal.hide();
+ },
-},{"elementor-editor-utils/controls-css-parser":110,"elementor-elements/models/base-settings":68,"elementor-utils/view-module":132}],10:[function(require,module,exports){
-var ControlsStack = require( 'elementor-views/controls-stack' );
+ getModalOptions: function getModalOptions() {
+ return {};
+ },
-module.exports = ControlsStack.extend( {
- id: function() {
- return 'elementor-panel-' + this.getOption( 'name' ) + '-settings';
+ getLogoOptions: function getLogoOptions() {
+ return {};
},
- getTemplate: function() {
- return '#tmpl-elementor-panel-' + this.getOption( 'name' ) + '-settings';
+ getHeaderOptions: function getHeaderOptions() {
+ return {};
},
- childViewContainer: function() {
- return '#elementor-panel-' + this.getOption( 'name' ) + '-settings-controls';
+ getHeaderView: function getHeaderView() {
+ return this.modalHeader.currentView;
},
- childViewOptions: function() {
- return {
- elementSettingsModel: this.model
- };
- }
-} );
+ showLoadingView: function showLoadingView() {
+ this.modalLoading.show(new TemplateLibraryLoadingView());
-},{"elementor-views/controls-stack":126}],11:[function(require,module,exports){
-var BaseSettings = require( 'elementor-editor/components/settings/base/manager' );
+ this.modalLoading.$el.show();
-module.exports = BaseSettings.extend( {
- changeCallbacks: {
- elementor_page_title_selector: function( newValue ) {
- var newSelector = newValue || 'h1.entry-title',
- titleSelectors = elementor.settings.page.model.controls.hide_title.selectors = {};
+ this.modalContent.$el.hide();
+ },
- titleSelectors[ newSelector ] = 'display: none';
+ hideLoadingView: function hideLoadingView() {
+ this.modalContent.$el.show();
- elementor.settings.page.updateStylesheet();
- }
+ this.modalLoading.$el.hide();
+ },
+
+ showLogo: function showLogo() {
+ this.getHeaderView().logoArea.show(new TemplateLibraryHeaderLogoView(this.getLogoOptions()));
}
-} );
+});
-},{"elementor-editor/components/settings/base/manager":9}],12:[function(require,module,exports){
-var BaseSettings = require( 'elementor-editor/components/settings/base/manager' );
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
-module.exports = BaseSettings.extend( {
+"use strict";
- save: function() {},
- changeCallbacks: {
- post_title: function( newValue ) {
- var $title = elementorFrontend.getElements( '$document' ).find( elementor.config.page_title_selector );
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-templates-modal__header__logo',
- $title.text( newValue );
- },
+ className: 'elementor-templates-modal__header__logo',
- template: function() {
- elementor.saver.saveAutoSave( {
- onSuccess: function() {
- elementor.reloadPreview();
+ events: {
+ 'click': 'onClick'
+ },
- elementor.once( 'preview:loaded', function() {
- elementor.getPanelView().setPage( 'page_settings' );
- } );
- }
- } );
- }
+ templateHelpers: function templateHelpers() {
+ return {
+ title: this.getOption('title')
+ };
},
- onModelChange: function() {
- elementor.saver.setFlagEditorChange( true );
+ onClick: function onClick() {
+ var clickCallback = this.getOption('click');
- BaseSettings.prototype.onModelChange.apply( this, arguments );
- },
+ if (clickCallback) {
+ clickCallback();
+ }
+ }
+});
- bindEvents: function() {
- elementor.channels.editor.on( 'elementor:clearPage', function() {
- elementor.clearPage();
- } );
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
- BaseSettings.prototype.bindEvents.apply( this, arguments );
- },
+"use strict";
- getDataToSave: function( data ) {
- data.id = elementor.config.document.id;
- return data;
- }
-} );
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-},{"elementor-editor/components/settings/base/manager":9}],13:[function(require,module,exports){
-var Module = require( 'elementor-utils/module' );
+var BaseSettingsModel = __webpack_require__(3),
+ ControlsCSSParser = __webpack_require__(13),
+ Validator = __webpack_require__(18),
+ BaseContainer = __webpack_require__(28),
+ BaseElementView;
-module.exports = Module.extend( {
- modules: {
- base: require( 'elementor-editor/components/settings/base/manager' ),
- general: require( 'elementor-editor/components/settings/general/manager' ),
- page: require( 'elementor-editor/components/settings/page/manager' )
- },
+BaseElementView = BaseContainer.extend({
+ tagName: 'div',
- panelPages: {
- base: require( 'elementor-editor/components/settings/base/panel' )
- },
+ controlsCSSParser: null,
- onInit: function() {
- this.initSettings();
- },
+ allowRender: true,
- initSettings: function() {
- var self = this;
+ toggleEditTools: false,
- _.each( elementor.config.settings, function( config, name ) {
- var Manager = self.modules[ name ] || self.modules.base;
+ renderAttributes: {},
- self[ name ] = new Manager( config );
- } );
- }
-} );
+ className: function className() {
+ var classes = 'elementor-element elementor-element-edit-mode ' + this.getElementUniqueID();
-},{"elementor-editor/components/settings/base/manager":9,"elementor-editor/components/settings/base/panel":10,"elementor-editor/components/settings/general/manager":11,"elementor-editor/components/settings/page/manager":12,"elementor-utils/module":131}],14:[function(require,module,exports){
-var InsertTemplateHandler;
+ if (this.toggleEditTools) {
+ classes += ' elementor-element--toggle-edit-tools';
+ }
-InsertTemplateHandler = Marionette.Behavior.extend( {
- ui: {
- insertButton: '.elementor-template-library-template-insert'
+ return classes;
},
- events: {
- 'click @ui.insertButton': 'onInsertButtonClick'
- },
+ attributes: function attributes() {
+ var type = this.model.get('elType');
- onInsertButtonClick: function() {
- if ( this.view.model.get( 'hasPageSettings' ) ) {
- InsertTemplateHandler.showImportDialog( this.view.model );
- return;
+ if ('widget' === type) {
+ type = this.model.get('widgetType');
}
- elementor.templates.importTemplate( this.view.model );
- }
-}, {
- dialog: null,
-
- showImportDialog: function( model ) {
- var dialog = InsertTemplateHandler.getDialog();
+ return {
+ 'data-id': this.getID(),
+ 'data-element_type': type
+ };
+ },
- dialog.onConfirm = function() {
- elementor.templates.importTemplate( model, { withPageSettings: true } );
+ ui: function ui() {
+ return {
+ tools: '> .elementor-element-overlay > .elementor-editor-element-settings',
+ editButton: '> .elementor-element-overlay .elementor-editor-element-edit',
+ duplicateButton: '> .elementor-element-overlay .elementor-editor-element-duplicate',
+ addButton: '> .elementor-element-overlay .elementor-editor-element-add',
+ removeButton: '> .elementor-element-overlay .elementor-editor-element-remove'
};
+ },
+
+ behaviors: function behaviors() {
+ var groups = elementor.hooks.applyFilters('elements/' + this.options.model.get('elType') + '/contextMenuGroups', this.getContextMenuGroups(), this);
- dialog.onCancel = function() {
- elementor.templates.importTemplate( model );
+ var behaviors = {
+ contextMenu: {
+ behaviorClass: __webpack_require__(11),
+ groups: groups
+ }
};
- dialog.show();
+ return elementor.hooks.applyFilters('elements/base/behaviors', behaviors, this);
},
- initDialog: function() {
- InsertTemplateHandler.dialog = elementor.dialogsManager.createWidget( 'confirm', {
- id: 'elementor-insert-template-settings-dialog',
- headerMessage: elementor.translate( 'import_template_dialog_header' ),
- message: elementor.translate( 'import_template_dialog_message' ) + '<br>' + elementor.translate( 'import_template_dialog_message_attention' ),
- strings: {
- confirm: elementor.translate( 'yes' ),
- cancel: elementor.translate( 'no' )
- }
- } );
+ getBehavior: function getBehavior(name) {
+ return this._behaviors[Object.keys(this.behaviors()).indexOf(name)];
},
- getDialog: function() {
- if ( ! InsertTemplateHandler.dialog ) {
- InsertTemplateHandler.initDialog();
- }
+ events: function events() {
+ return {
+ 'mousedown': 'onMouseDown',
+ 'click @ui.editButton': 'onEditButtonClick',
+ 'click @ui.duplicateButton': 'onDuplicateButtonClick',
+ 'click @ui.addButton': 'onAddButtonClick',
+ 'click @ui.removeButton': 'onRemoveButtonClick'
+ };
+ },
- return InsertTemplateHandler.dialog;
- }
-} );
+ getElementType: function getElementType() {
+ return this.model.get('elType');
+ },
-module.exports = InsertTemplateHandler;
+ getIDInt: function getIDInt() {
+ return parseInt(this.getID(), 16);
+ },
-},{}],15:[function(require,module,exports){
-var TemplateLibraryTemplateModel = require( 'elementor-templates/models/template' ),
- TemplateLibraryCollection;
+ getChildType: function getChildType() {
+ return elementor.helpers.getElementChildType(this.getElementType());
+ },
-TemplateLibraryCollection = Backbone.Collection.extend( {
- model: TemplateLibraryTemplateModel
-} );
+ getChildView: function getChildView(model) {
+ var ChildView,
+ elType = model.get('elType');
-module.exports = TemplateLibraryCollection;
+ if ('section' === elType) {
+ ChildView = __webpack_require__(29);
+ } else if ('column' === elType) {
+ ChildView = __webpack_require__(90);
+ } else {
+ ChildView = elementor.modules.elements.views.Widget;
+ }
-},{"elementor-templates/models/template":17}],16:[function(require,module,exports){
-var TemplateLibraryLayoutView = require( 'elementor-templates/views/library-layout' ),
- TemplateLibraryCollection = require( 'elementor-templates/collections/templates' ),
- TemplateLibraryManager;
+ return elementor.hooks.applyFilters('element/view', ChildView, model, this);
+ },
-TemplateLibraryManager = function() {
- var self = this,
- deleteDialog,
- errorDialog,
- layout,
- config = {},
- startIntent = {},
- templateTypes = {},
- filterTerms = {},
- templatesCollection;
-
- var initLayout = function() {
- layout = new TemplateLibraryLayoutView();
- };
+ // TODO: backward compatibility method since 1.8.0
+ templateHelpers: function templateHelpers() {
+ var templateHelpers = BaseContainer.prototype.templateHelpers.apply(this, arguments);
- var registerDefaultTemplateTypes = function() {
- var data = {
- saveDialog: {
- description: elementor.translate( 'save_your_template_description' )
- },
- ajaxParams: {
- success: function( data ) {
- self.getTemplatesCollection().add( data );
+ return jQuery.extend(templateHelpers, {
+ editModel: this.getEditModel() // @deprecated. Use view.getEditModel() instead.
+ });
+ },
- self.setTemplatesPage( 'local' );
- },
- error: function( data ) {
- self.showErrorDialog( data );
- }
- }
- };
+ getTemplateType: function getTemplateType() {
+ return 'js';
+ },
- _.each( [ 'page', 'section' ], function( type ) {
- var safeData = jQuery.extend( true, {}, data, {
- saveDialog: {
- title: elementor.translate( 'save_your_template', [ elementor.translate( type ) ] )
+ getEditModel: function getEditModel() {
+ return this.model;
+ },
+
+ getContextMenuGroups: function getContextMenuGroups() {
+ var elementType = this.options.model.get('elType'),
+ controlSign = elementor.envData.mac ? '⌘' : '^';
+
+ return [{
+ name: 'general',
+ actions: [{
+ name: 'edit',
+ icon: 'eicon-edit',
+ title: elementor.translate('edit_element', [elementor.helpers.firstLetterUppercase(elementType)]),
+ callback: this.options.model.trigger.bind(this.options.model, 'request:edit')
+ }, {
+ name: 'duplicate',
+ icon: 'eicon-clone',
+ title: elementor.translate('duplicate'),
+ shortcut: controlSign + '+D',
+ callback: this.duplicate.bind(this)
+ }]
+ }, {
+ name: 'transfer',
+ actions: [{
+ name: 'copy',
+ title: elementor.translate('copy'),
+ shortcut: controlSign + '+C',
+ callback: this.copy.bind(this)
+ }, {
+ name: 'paste',
+ title: elementor.translate('paste'),
+ shortcut: controlSign + '+V',
+ callback: this.paste.bind(this),
+ isEnabled: this.isPasteEnabled.bind(this)
+ }, {
+ name: 'pasteStyle',
+ title: elementor.translate('paste_style'),
+ shortcut: controlSign + '+⇧+V',
+ callback: this.pasteStyle.bind(this),
+ isEnabled: function isEnabled() {
+ return !!elementor.getStorage('transfer');
}
- } );
+ }, {
+ name: 'resetStyle',
+ title: elementor.translate('reset_style'),
+ callback: this.resetStyle.bind(this)
+ }]
+ }, {
+ name: 'delete',
+ actions: [{
+ name: 'delete',
+ icon: 'eicon-trash',
+ title: elementor.translate('delete'),
+ shortcut: '⌦',
+ callback: this.removeElement.bind(this)
+ }]
+ }];
+ },
+
+ initialize: function initialize() {
+ BaseContainer.prototype.initialize.apply(this, arguments);
+
+ if (this.collection) {
+ this.listenTo(this.collection, 'add remove reset', this.onCollectionChanged, this);
+ }
- self.registerTemplateType( type, safeData );
- } );
- };
+ var editModel = this.getEditModel();
- var registerDefaultFilterTerms = function() {
- filterTerms = {
- text: {
- callback: function( value ) {
- value = value.toLowerCase();
+ this.listenTo(editModel.get('settings'), 'change', this.onSettingsChanged).listenTo(editModel.get('editSettings'), 'change', this.onEditSettingsChanged).listenTo(this.model, 'request:edit', this.onEditRequest).listenTo(this.model, 'request:toggleVisibility', this.toggleVisibility);
- if ( this.get( 'title' ).toLowerCase().indexOf( value ) >= 0 ) {
- return true;
- }
+ this.initControlsCSSParser();
+ },
- return _.any( this.get( 'tags' ), function( tag ) {
- return tag.toLowerCase().indexOf( value ) >= 0;
- } );
- }
- },
- type: {},
- subtype: {},
- favorite: {}
- };
- };
+ startTransport: function startTransport(type) {
+ elementor.setStorage('transfer', {
+ type: type,
+ elementsType: this.getElementType(),
+ elements: [this.model.toJSON({ copyHtmlCache: true })]
+ });
+ },
- var setIntentFilters = function() {
- jQuery.each( startIntent.filters, function( filterKey, filterValue ) {
- self.setFilter( filterKey, filterValue, true );
- } );
- };
+ copy: function copy() {
+ this.startTransport('copy');
+ },
- this.init = function() {
- registerDefaultTemplateTypes();
+ cut: function cut() {
+ this.startTransport('cut');
+ },
- registerDefaultFilterTerms();
+ paste: function paste() {
+ this.trigger('request:paste');
+ },
- elementor.addBackgroundClickListener( 'libraryToggleMore', {
- element: '.elementor-template-library-template-more'
- } );
- };
+ isPasteEnabled: function isPasteEnabled() {
+ var transferData = elementor.getStorage('transfer');
- this.getTemplateTypes = function( type ) {
- if ( type ) {
- return templateTypes[ type ];
+ if (!transferData || this.isCollectionFilled()) {
+ return false;
}
- return templateTypes;
- };
+ return this.getElementType() === transferData.elementsType;
+ },
- this.registerTemplateType = function( type, data ) {
- templateTypes[ type ] = data;
- };
+ isStyleTransferControl: function isStyleTransferControl(control) {
+ if (undefined !== control.style_transfer) {
+ return control.style_transfer;
+ }
- this.deleteTemplate = function( templateModel, options ) {
- var dialog = self.getDeleteDialog();
+ return 'content' !== control.tab || control.selectors || control.prefix_class;
+ },
- dialog.onConfirm = function() {
- if ( options.onConfirm ) {
- options.onConfirm();
- }
+ duplicate: function duplicate() {
+ var oldTransport = elementor.getStorage('transfer');
- elementor.ajax.send( 'delete_template', {
- data: {
- source: templateModel.get( 'source' ),
- template_id: templateModel.get( 'template_id' )
- },
- success: function( response ) {
- templatesCollection.remove( templateModel, { silent: true } );
+ this.copy();
- if ( options.onSuccess ) {
- options.onSuccess( response );
- }
- }
- } );
- };
+ this.paste();
- dialog.show();
- };
+ elementor.setStorage('transfer', oldTransport);
+ },
- this.importTemplate = function( templateModel, options ) {
- options = options || {};
+ pasteStyle: function pasteStyle() {
+ var self = this,
+ transferData = elementor.getStorage('transfer'),
+ sourceElement = transferData.elements[0],
+ sourceSettings = sourceElement.settings,
+ editModel = self.getEditModel(),
+ settings = editModel.get('settings'),
+ settingsAttributes = settings.attributes,
+ controls = settings.controls,
+ diffSettings = {};
+
+ jQuery.each(controls, function (controlName, control) {
+ if (!self.isStyleTransferControl(control)) {
+ return;
+ }
- layout.showLoadingView();
+ var sourceValue = sourceSettings[controlName],
+ targetValue = settingsAttributes[controlName];
- self.requestTemplateContent( templateModel.get( 'source' ), templateModel.get( 'template_id' ), {
- data: {
- page_settings: options.withPageSettings
- },
- success: function( data ) {
- self.closeModal();
+ if (undefined === sourceValue || undefined === targetValue) {
+ return;
+ }
- elementor.channels.data.trigger( 'template:before:insert', templateModel );
+ if ('object' === (typeof sourceValue === 'undefined' ? 'undefined' : _typeof(sourceValue))) {
+ if ('object' !== (typeof targetValue === 'undefined' ? 'undefined' : _typeof(targetValue))) {
+ return;
+ }
- elementor.sections.currentView.addChildModel( data.content, startIntent.importOptions || {} );
+ var isEqual = true;
- elementor.channels.data.trigger( 'template:after:insert', templateModel );
+ jQuery.each(sourceValue, function (propertyKey) {
+ if (sourceValue[propertyKey] !== targetValue[propertyKey]) {
+ return isEqual = false;
+ }
+ });
- if ( options.withPageSettings ) {
- elementor.settings.page.model.set( data.page_settings );
+ if (isEqual) {
+ return;
+ }
+ } else {
+ if (sourceValue === targetValue) {
+ return;
}
- },
- error: function( data ) {
- self.showErrorDialog( data );
- },
- complete: function() {
- layout.hideLoadingView();
}
- } );
- };
- this.saveTemplate = function( type, data ) {
- var templateType = templateTypes[ type ];
+ var ControlView = elementor.getControlView(control.type);
- _.extend( data, {
- source: 'local',
- type: type
- } );
+ if (!ControlView.onPasteStyle(control, sourceValue)) {
+ return;
+ }
- if ( templateType.prepareSavedData ) {
- data = templateType.prepareSavedData( data );
- }
+ diffSettings[controlName] = sourceValue;
+ });
- data.content = JSON.stringify( data.content );
+ self.allowRender = false;
- var ajaxParams = { data: data };
+ elementor.channels.data.trigger('element:before:paste:style', editModel);
- if ( templateType.ajaxParams ) {
- _.extend( ajaxParams, templateType.ajaxParams );
- }
+ editModel.setSetting(diffSettings);
- elementor.ajax.send( 'save_template', ajaxParams );
- };
+ elementor.channels.data.trigger('element:after:paste:style', editModel);
- this.requestTemplateContent = function( source, id, ajaxOptions ) {
- var options = {
- data: {
- source: source,
- edit_mode: true,
- display: true,
- template_id: id
- }
- };
+ self.allowRender = true;
- if ( ajaxOptions ) {
- jQuery.extend( true, options, ajaxOptions );
- }
+ self.renderOnChange();
+ },
- return elementor.ajax.send( 'get_template_data', options );
- };
+ resetStyle: function resetStyle() {
+ var self = this,
+ editModel = self.getEditModel(),
+ controls = editModel.get('settings').controls,
+ defaultValues = {};
- this.markAsFavorite = function( templateModel, favorite ) {
- var options = {
- data: {
- source: templateModel.get( 'source' ),
- template_id: templateModel.get( 'template_id' ),
- favorite: favorite
+ self.allowRender = false;
+
+ elementor.channels.data.trigger('element:before:reset:style', editModel);
+
+ jQuery.each(controls, function (controlName, control) {
+ if (!self.isStyleTransferControl(control)) {
+ return;
}
- };
- return elementor.ajax.send( 'mark_template_as_favorite', options );
- };
+ defaultValues[controlName] = control['default'];
+ });
- this.getDeleteDialog = function() {
- if ( ! deleteDialog ) {
- deleteDialog = elementor.dialogsManager.createWidget( 'confirm', {
- id: 'elementor-template-library-delete-dialog',
- headerMessage: elementor.translate( 'delete_template' ),
- message: elementor.translate( 'delete_template_confirm' ),
- strings: {
- confirm: elementor.translate( 'delete' )
- }
- } );
- }
+ editModel.setSetting(defaultValues);
- return deleteDialog;
- };
+ elementor.channels.data.trigger('element:after:reset:style', editModel);
- this.getErrorDialog = function() {
- if ( ! errorDialog ) {
- errorDialog = elementor.dialogsManager.createWidget( 'alert', {
- id: 'elementor-template-library-error-dialog',
- headerMessage: elementor.translate( 'an_error_occurred' )
- } );
- }
+ self.allowRender = true;
- return errorDialog;
- };
+ self.renderOnChange();
+ },
- this.getLayout = function() {
- return layout;
- };
+ toggleVisibility: function toggleVisibility() {
+ this.model.set('hidden', !this.model.get('hidden'));
- this.getTemplatesCollection = function() {
- return templatesCollection;
- };
+ this.toggleVisibilityClass();
+ },
- this.getConfig = function( item ) {
- if ( item ) {
- return config[ item ];
- }
+ toggleVisibilityClass: function toggleVisibilityClass() {
+ this.$el.toggleClass('elementor-edit-hidden', !!this.model.get('hidden'));
+ },
- return config;
- };
+ addElementFromPanel: function addElementFromPanel(options) {
+ options = options || {};
- this.requestLibraryData = function( options ) {
- if ( templatesCollection && ! options.forceUpdate ) {
- if ( options.onUpdate ) {
- options.onUpdate();
- }
+ var elementView = elementor.channels.panelElements.request('element:selected');
+ var itemData = {
+ elType: elementView.model.get('elType')
+ };
+
+ if ('widget' === itemData.elType) {
+ itemData.widgetType = elementView.model.get('widgetType');
+ } else if ('section' === itemData.elType) {
+ itemData.isInner = true;
+ } else {
return;
}
- if ( options.onBeforeUpdate ) {
- options.onBeforeUpdate();
- }
+ var customData = elementView.model.get('custom');
- var ajaxOptions = {
- data: {},
- success: function( data ) {
- templatesCollection = new TemplateLibraryCollection( data.templates );
+ if (customData) {
+ jQuery.extend(itemData, customData);
+ }
- config = data.config;
+ options.trigger = {
+ beforeAdd: 'element:before:add',
+ afterAdd: 'element:after:add'
+ };
- if ( options.onUpdate ) {
- options.onUpdate();
- }
+ options.onAfterAdd = function (newModel, newView) {
+ if ('section' === newView.getElementType() && newView.isInner()) {
+ newView.addChildElement();
}
};
- if ( options.forceSync ) {
- ajaxOptions.data.sync = true;
- }
+ this.addChildElement(itemData, options);
+ },
- elementor.ajax.send( 'get_library_data', ajaxOptions );
- };
+ addControlValidator: function addControlValidator(controlName, validationCallback) {
+ validationCallback = validationCallback.bind(this);
- this.startModal = function( customStartIntent ) {
- if ( ! layout ) {
- initLayout();
+ var validator = new Validator({ customValidationMethod: validationCallback }),
+ validators = this.getEditModel().get('settings').validators;
+
+ if (!validators[controlName]) {
+ validators[controlName] = [];
}
- layout.showModal();
+ validators[controlName].push(validator);
+ },
- self.requestLibraryData( {
- onBeforeUpdate: layout.showLoadingView.bind( layout ),
- onUpdate: function() {
- var documentType = elementor.config.document.type,
- isBlockType = -1 !== config.categories.indexOf( documentType ),
- oldStartIntent = Object.create( startIntent );
+ addRenderAttribute: function addRenderAttribute(element, key, value, overwrite) {
+ var self = this;
- startIntent = jQuery.extend( {
- filters: {
- source: 'remote',
- type: isBlockType ? 'block' : 'page',
- subtype: isBlockType ? documentType : null
- },
- onReady: self.showTemplates
- }, customStartIntent );
+ if ('object' === (typeof element === 'undefined' ? 'undefined' : _typeof(element))) {
+ jQuery.each(element, function (elementKey) {
+ self.addRenderAttribute(elementKey, this, null, overwrite);
+ });
- var isSameIntent = _.isEqual( Object.getPrototypeOf( oldStartIntent ), startIntent );
+ return self;
+ }
- if ( isSameIntent && 'elementor-template-library-templates' === layout.modalContent.currentView.id ) {
- return;
- }
+ if ('object' === (typeof key === 'undefined' ? 'undefined' : _typeof(key))) {
+ jQuery.each(key, function (attributeKey) {
+ self.addRenderAttribute(element, attributeKey, this, overwrite);
+ });
- layout.hideLoadingView();
+ return self;
+ }
- setIntentFilters();
-
- startIntent.onReady();
- }
- } );
- };
-
- this.closeModal = function() {
- layout.hideModal();
- };
+ if (!self.renderAttributes[element]) {
+ self.renderAttributes[element] = {};
+ }
- this.getFilter = function( name ) {
- return elementor.channels.templates.request( 'filter:' + name );
- };
+ if (!self.renderAttributes[element][key]) {
+ self.renderAttributes[element][key] = [];
+ }
- this.setFilter = function( name, value, silent ) {
- elementor.channels.templates.reply( 'filter:' + name, value );
+ if (!Array.isArray(value)) {
+ value = [value];
+ }
- if ( ! silent ) {
- elementor.channels.templates.trigger( 'filter:change' );
+ if (overwrite) {
+ self.renderAttributes[element][key] = value;
+ } else {
+ self.renderAttributes[element][key] = self.renderAttributes[element][key].concat(value);
}
- };
+ },
- this.getFilterTerms = function( termName ) {
- if ( termName ) {
- return filterTerms[ termName ];
+ getRenderAttributeString: function getRenderAttributeString(element) {
+ if (!this.renderAttributes[element]) {
+ return '';
}
- return filterTerms;
- };
+ var renderAttributes = this.renderAttributes[element],
+ attributes = [];
- this.setTemplatesPage = function( source, type, silent ) {
- elementor.channels.templates.stopReplying();
+ jQuery.each(renderAttributes, function (attributeKey) {
+ attributes.push(attributeKey + '="' + _.escape(this.join(' ')) + '"');
+ });
- self.setFilter( 'source', source, true );
+ return attributes.join(' ');
+ },
- if ( type ) {
- self.setFilter( 'type', type, true );
- }
+ isInner: function isInner() {
+ return !!this.model.get('isInner');
+ },
- if ( ! silent ) {
- self.showTemplates();
- }
- };
+ initControlsCSSParser: function initControlsCSSParser() {
+ this.controlsCSSParser = new ControlsCSSParser({
+ id: this.model.cid,
+ settingsModel: this.getEditModel().get('settings'),
+ dynamicParsing: this.getDynamicParsingSettings()
+ });
+ },
- this.showTemplates = function() {
- var activeSource = self.getFilter( 'source' );
+ enqueueFonts: function enqueueFonts() {
+ var editModel = this.getEditModel(),
+ settings = editModel.get('settings');
- var templatesToShow = templatesCollection.filter( function( model ) {
- if ( activeSource !== model.get( 'source' ) ) {
- return false;
+ _.each(settings.getFontControls(), function (control) {
+ var fontFamilyName = editModel.getSetting(control.name);
+
+ if (_.isEmpty(fontFamilyName)) {
+ return;
}
- var typeInfo = templateTypes[ model.get( 'type' ) ];
+ elementor.helpers.enqueueFont(fontFamilyName);
+ });
+ },
- return ! typeInfo || false !== typeInfo.showInLibrary;
- } );
+ renderStyles: function renderStyles(settings) {
+ if (!settings) {
+ settings = this.getEditModel().get('settings');
+ }
- layout.showTemplatesView( new TemplateLibraryCollection( templatesToShow ) );
- };
+ this.controlsCSSParser.stylesheet.empty();
- this.showErrorDialog = function( errorMessage ) {
- if ( 'object' === typeof errorMessage ) {
- var message = '';
+ this.controlsCSSParser.addStyleRules(settings.getStyleControls(), settings.attributes, this.getEditModel().get('settings').controls, [/{{ID}}/g, /{{WRAPPER}}/g], [this.getID(), '#elementor .' + this.getElementUniqueID()]);
- _.each( errorMessage, function( error ) {
- message += '<div>' + error.message + '.</div>';
- } );
+ this.controlsCSSParser.addStyleToDocument();
- errorMessage = message;
- } else if ( errorMessage ) {
- errorMessage += '.';
- } else {
- errorMessage = '<i><The error message is empty></i>';
+ var extraCSS = elementor.hooks.applyFilters('editor/style/styleText', '', this);
+
+ if (extraCSS) {
+ this.controlsCSSParser.elements.$stylesheetElement.append(extraCSS);
}
+ },
- self.getErrorDialog()
- .setMessage( elementor.translate( 'templates_request_error' ) + '<div id="elementor-template-library-error-info">' + errorMessage + '</div>' )
- .show();
- };
-};
+ renderCustomClasses: function renderCustomClasses() {
+ var self = this;
-module.exports = new TemplateLibraryManager();
+ var settings = self.getEditModel().get('settings'),
+ classControls = settings.getClassControls();
-},{"elementor-templates/collections/templates":15,"elementor-templates/views/library-layout":19}],17:[function(require,module,exports){
-module.exports = Backbone.Model.extend( {
- defaults: {
- template_id: 0,
- title: '',
- source: '',
- type: '',
- subtype: '',
- author: '',
- thumbnail: '',
- url: '',
- export_link: '',
- tags: []
- }
-} );
+ // Remove all previous classes
+ _.each(classControls, function (control) {
+ var previousClassValue = settings.previous(control.name);
-},{}],18:[function(require,module,exports){
-var TemplateLibraryHeaderView = require( 'elementor-templates/views/parts/header' ),
- TemplateLibraryHeaderLogoView = require( 'elementor-templates/views/parts/header-parts/logo' ),
- TemplateLibraryLoadingView = require( 'elementor-templates/views/parts/loading' );
+ if (control.classes_dictionary) {
+ if (undefined !== control.classes_dictionary[previousClassValue]) {
+ previousClassValue = control.classes_dictionary[previousClassValue];
+ }
+ }
-module.exports = Marionette.LayoutView.extend( {
- el: function() {
- return this.modal.getElements( 'widget' );
- },
+ self.$el.removeClass(control.prefix_class + previousClassValue);
+ });
- modal: null,
+ // Add new classes
+ _.each(classControls, function (control) {
+ var value = settings.attributes[control.name],
+ classValue = value;
- regions: function() {
- return {
- modalHeader: '.dialog-widget-header',
- modalContent: '.dialog-lightbox-content',
- modalLoading: '.dialog-lightbox-loading'
- };
+ if (control.classes_dictionary) {
+ if (undefined !== control.classes_dictionary[value]) {
+ classValue = control.classes_dictionary[value];
+ }
+ }
+
+ var isVisible = elementor.helpers.isActiveControl(control, settings.attributes);
+
+ if (isVisible && (classValue || 0 === classValue)) {
+ self.$el.addClass(control.prefix_class + classValue);
+ }
+ });
+
+ self.$el.addClass(_.result(self, 'className'));
+
+ self.toggleVisibilityClass();
},
- constructor: function() {
- this.initModal();
+ renderCustomElementID: function renderCustomElementID() {
+ var customElementID = this.getEditModel().get('settings').get('_element_id');
- Marionette.LayoutView.prototype.constructor.apply( this, arguments );
+ this.$el.attr('id', customElementID);
},
- initialize: function() {
- this.modalHeader.show( new TemplateLibraryHeaderView() );
+ renderUI: function renderUI() {
+ this.renderStyles();
+ this.renderCustomClasses();
+ this.renderCustomElementID();
+ this.enqueueFonts();
},
- initModal: function() {
- var modalOptions = {
- className: 'elementor-templates-modal',
- closeButton: false,
- hide: {
- onOutsideClick: false
- }
- };
+ runReadyTrigger: function runReadyTrigger() {
+ var self = this;
- jQuery.extend( true, modalOptions, this.getModalOptions() );
+ _.defer(function () {
+ elementorFrontend.elementsHandler.runReadyTrigger(self.$el);
- this.modal = elementor.dialogsManager.createWidget( 'lightbox', modalOptions );
+ if (!elementorFrontend.isEditMode()) {
+ return;
+ }
- this.modal.getElements( 'message' ).append( this.modal.addElement( 'content' ), this.modal.addElement( 'loading' ) );
+ // In edit mode - handle an external elements which loaded by another elements like shortcode etc.
+ self.$el.find('.elementor-element.elementor-' + self.model.get('elType') + ':not(.elementor-element-edit-mode)').each(function () {
+ elementorFrontend.elementsHandler.runReadyTrigger(jQuery(this));
+ });
+ });
},
- showModal: function() {
- this.modal.show();
+ getID: function getID() {
+ return this.model.get('id');
},
- hideModal: function() {
- this.modal.hide();
+ getElementUniqueID: function getElementUniqueID() {
+ return 'elementor-element-' + this.getID();
},
- getModalOptions: function() {
- return {};
- },
+ renderOnChange: function renderOnChange(settings) {
+ if (!this.allowRender) {
+ return;
+ }
- getLogoOptions: function() {
- return {};
- },
+ // Make sure is correct model
+ if (settings instanceof BaseSettingsModel) {
+ var hasChanged = settings.hasChanged(),
+ isContentChanged = !hasChanged,
+ isRenderRequired = !hasChanged;
- getHeaderView: function() {
- return this.modalHeader.currentView;
- },
+ _.each(settings.changedAttributes(), function (settingValue, settingKey) {
+ var control = settings.getControl(settingKey);
- showLoadingView: function() {
- this.modalLoading.show( new TemplateLibraryLoadingView() );
+ if ('_column_size' === settingKey) {
+ isRenderRequired = true;
+ return;
+ }
- this.modalLoading.$el.show();
+ if (!control) {
+ isRenderRequired = true;
+ isContentChanged = true;
+ return;
+ }
- this.modalContent.$el.hide();
- },
+ if ('none' !== control.render_type) {
+ isRenderRequired = true;
+ }
- hideLoadingView: function() {
- this.modalContent.$el.show();
+ if (-1 !== ['none', 'ui'].indexOf(control.render_type)) {
+ return;
+ }
- this.modalLoading.$el.hide();
- },
+ if ('template' === control.render_type || !settings.isStyleControl(settingKey) && !settings.isClassControl(settingKey) && '_element_id' !== settingKey) {
+ isContentChanged = true;
+ }
+ });
- showLogo: function() {
- this.getHeaderView().logoArea.show( new TemplateLibraryHeaderLogoView( this.getLogoOptions() ) );
- }
-} );
+ if (!isRenderRequired) {
+ return;
+ }
-},{"elementor-templates/views/parts/header":25,"elementor-templates/views/parts/header-parts/logo":22,"elementor-templates/views/parts/loading":27}],19:[function(require,module,exports){
-var BaseModalLayout = require( 'elementor-templates/views/base-modal-layout' ),
- TemplateLibraryHeaderActionsView = require( 'elementor-templates/views/parts/header-parts/actions' ),
- TemplateLibraryHeaderMenuView = require( 'elementor-templates/views/parts/header-parts/menu' ),
- TemplateLibraryHeaderPreviewView = require( 'elementor-templates/views/parts/header-parts/preview' ),
- TemplateLibraryHeaderBackView = require( 'elementor-templates/views/parts/header-parts/back' ),
- TemplateLibraryCollectionView = require( 'elementor-templates/views/parts/templates' ),
- TemplateLibrarySaveTemplateView = require( 'elementor-templates/views/parts/save-template' ),
- TemplateLibraryImportView = require( 'elementor-templates/views/parts/import' ),
- TemplateLibraryPreviewView = require( 'elementor-templates/views/parts/preview' );
+ if (!isContentChanged) {
+ this.renderUI();
+ return;
+ }
+ }
-module.exports = BaseModalLayout.extend( {
+ // Re-render the template
+ var templateType = this.getTemplateType(),
+ editModel = this.getEditModel();
- getModalOptions: function() {
- return {
- id: 'elementor-template-library-modal'
- };
+ if ('js' === templateType) {
+ this.getEditModel().setHtmlCache();
+ this.render();
+ editModel.renderOnLeave = true;
+ } else {
+ editModel.renderRemoteServer();
+ }
},
- getLogoOptions: function() {
+ getDynamicParsingSettings: function getDynamicParsingSettings() {
+ var self = this;
+
return {
- title: elementor.translate( 'library' ),
- click: function() {
- elementor.templates.setTemplatesPage( 'remote', 'page' );
+ onServerRequestStart: function onServerRequestStart() {
+ self.$el.addClass('elementor-loading');
+ },
+ onServerRequestEnd: function onServerRequestEnd() {
+ self.render();
+
+ self.$el.removeClass('elementor-loading');
}
};
},
- getTemplateActionButton: function( templateData ) {
- var viewId = '#tmpl-elementor-template-library-' + ( templateData.isPro ? 'get-pro-button' : 'insert-button' );
+ serializeData: function serializeData() {
+ var data = BaseContainer.prototype.serializeData.apply(this, arguments);
- viewId = elementor.hooks.applyFilters( 'elementor/editor/template-library/template/action-button', viewId, templateData );
+ data.settings = this.getEditModel().get('settings').parseDynamicSettings(data.settings, this.getDynamicParsingSettings());
- var template = Marionette.TemplateCache.get( viewId );
-
- return Marionette.Renderer.render( template );
+ return data;
},
- setHeaderDefaultParts: function() {
- var headerView = this.getHeaderView();
-
- headerView.tools.show( new TemplateLibraryHeaderActionsView() );
- headerView.menuArea.show( new TemplateLibraryHeaderMenuView() );
+ save: function save() {
+ var model = this.model;
- this.showLogo();
+ elementor.templates.startModal({
+ onReady: function onReady() {
+ elementor.templates.getLayout().showSaveTemplateView(model);
+ }
+ });
},
- showTemplatesView: function( templatesCollection ) {
- this.modalContent.show( new TemplateLibraryCollectionView( {
- collection: templatesCollection
- } ) );
+ removeElement: function removeElement() {
+ elementor.channels.data.trigger('element:before:remove', this.model);
- this.setHeaderDefaultParts();
- },
+ var parent = this._parent;
- showImportView: function() {
- this.getHeaderView().menuArea.reset();
+ parent.isManualRemoving = true;
- this.modalContent.show( new TemplateLibraryImportView() );
- },
+ this.model.destroy();
- showSaveTemplateView: function( elementModel ) {
- this.getHeaderView().menuArea.reset();
+ parent.isManualRemoving = false;
- this.modalContent.show( new TemplateLibrarySaveTemplateView( { model: elementModel } ) );
+ elementor.channels.data.trigger('element:after:remove', this.model);
},
- showPreviewView: function( templateModel ) {
- this.modalContent.show( new TemplateLibraryPreviewView( {
- url: templateModel.get( 'url' )
- } ) );
-
- var headerView = this.getHeaderView();
-
- headerView.menuArea.reset();
-
- headerView.tools.show( new TemplateLibraryHeaderPreviewView( {
- model: templateModel
- } ) );
+ onBeforeRender: function onBeforeRender() {
+ this.renderAttributes = {};
+ },
- headerView.logoArea.show( new TemplateLibraryHeaderBackView() );
- }
-} );
+ onRender: function onRender() {
+ this.renderUI();
-},{"elementor-templates/views/base-modal-layout":18,"elementor-templates/views/parts/header-parts/actions":20,"elementor-templates/views/parts/header-parts/back":21,"elementor-templates/views/parts/header-parts/menu":23,"elementor-templates/views/parts/header-parts/preview":24,"elementor-templates/views/parts/import":26,"elementor-templates/views/parts/preview":28,"elementor-templates/views/parts/save-template":29,"elementor-templates/views/parts/templates":31}],20:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-template-library-header-actions',
+ this.runReadyTrigger();
- id: 'elementor-template-library-header-actions',
+ if (this.toggleEditTools) {
+ var editButton = this.ui.editButton;
- ui: {
- 'import': '#elementor-template-library-header-import i',
- sync: '#elementor-template-library-header-sync i',
- save: '#elementor-template-library-header-save i'
+ this.ui.tools.hoverIntent(function () {
+ editButton.addClass('elementor-active');
+ }, function () {
+ editButton.removeClass('elementor-active');
+ }, { timeout: 500 });
+ }
},
- events: {
- 'click @ui.import': 'onImportClick',
- 'click @ui.sync': 'onSyncClick',
- 'click @ui.save': 'onSaveClick'
+ onCollectionChanged: function onCollectionChanged() {
+ elementor.saver.setFlagEditorChange(true);
},
- onImportClick: function() {
- elementor.templates.getLayout().showImportView();
+ onEditSettingsChanged: function onEditSettingsChanged(changedModel) {
+ elementor.channels.editor.trigger('change:editSettings', changedModel, this);
},
- onSyncClick: function() {
- var self = this;
-
- self.ui.sync.addClass( 'eicon-animation-spin' );
+ onSettingsChanged: function onSettingsChanged(changedModel) {
+ elementor.saver.setFlagEditorChange(true);
- elementor.templates.requestLibraryData( {
- onUpdate: function() {
- self.ui.sync.removeClass( 'eicon-animation-spin' );
+ this.renderOnChange(changedModel);
+ },
- elementor.templates.setTemplatesPage( elementor.templates.getFilter( 'source' ), elementor.templates.getFilter( 'type' ) );
- },
- forceUpdate: true,
- forceSync: true
- } );
+ onEditButtonClick: function onEditButtonClick() {
+ this.model.trigger('request:edit');
},
- onSaveClick: function() {
- elementor.templates.getLayout().showSaveTemplateView();
- }
-} );
+ onEditRequest: function onEditRequest() {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-},{}],21:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-template-library-header-back',
+ if ('edit' !== elementor.channels.dataEditMode.request('activeMode')) {
+ return;
+ }
- id: 'elementor-template-library-header-preview-back',
+ var model = this.getEditModel(),
+ panel = elementor.getPanelView();
- events: {
- 'click': 'onClick'
+ if ('editor' === panel.getCurrentPageName() && panel.getCurrentPageView().model === model) {
+ return;
+ }
+
+ if (options.scrollIntoView) {
+ elementor.helpers.scrollToView(this.$el, 200);
+ }
+
+ panel.openEditor(model, this);
},
- onClick: function() {
- elementor.templates.showTemplates();
- }
-} );
+ onDuplicateButtonClick: function onDuplicateButtonClick(event) {
+ event.stopPropagation();
-},{}],22:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-templates-modal__header__logo',
+ this.duplicate();
+ },
- className: 'elementor-templates-modal__header__logo',
+ onRemoveButtonClick: function onRemoveButtonClick(event) {
+ event.stopPropagation();
- events: {
- 'click': 'onClick'
+ this.removeElement();
},
- templateHelpers: function() {
- return {
- title: this.getOption( 'title' )
- };
+ /* jQuery ui sortable preventing any `mousedown` event above any element, and as a result is preventing the `blur`
+ * event on the currently active element. Therefor, we need to blur the active element manually.
+ */
+ onMouseDown: function onMouseDown(event) {
+ if (jQuery(event.target).closest('.elementor-inline-editing').length) {
+ return;
+ }
+
+ elementorFrontend.getElements('$document')[0].activeElement.blur();
},
- onClick: function() {
- var clickCallback = this.getOption( 'click' );
+ onDestroy: function onDestroy() {
+ this.controlsCSSParser.removeStyleFromDocument();
- if ( clickCallback ) {
- clickCallback();
- }
+ elementor.channels.data.trigger('element:destroy', this.model);
}
-} );
+});
-},{}],23:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- options: {
- activeClass: 'elementor-active'
- },
+module.exports = BaseElementView;
- template: '#tmpl-elementor-template-library-header-menu',
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
- id: 'elementor-template-library-header-menu',
+"use strict";
- ui: {
- menuItems: '.elementor-template-library-menu-item'
- },
- events: {
- 'click @ui.menuItems': 'onMenuItemClick'
+var ContextMenu = __webpack_require__(88);
+
+module.exports = Marionette.Behavior.extend({
+
+ defaults: {
+ groups: [],
+ eventTargets: ['el']
},
- $activeItem: null,
+ events: function events() {
+ var events = {};
- activateMenuItem: function( $item ) {
- var activeClass = this.getOption( 'activeClass' );
+ this.getOption('eventTargets').forEach(function (eventTarget) {
+ var eventName = 'contextmenu';
- if ( this.$activeItem === $item ) {
- return;
- }
+ if ('el' !== eventTarget) {
+ eventName += ' ' + eventTarget;
+ }
- if ( this.$activeItem ) {
- this.$activeItem.removeClass( activeClass );
- }
+ events[eventName] = 'onContextMenu';
+ });
- $item.addClass( activeClass );
+ return events;
+ },
- this.$activeItem = $item;
+ initialize: function initialize() {
+ this.listenTo(this.view.options.model, 'request:contextmenu', this.onRequestContextMenu);
},
- onRender: function() {
- var currentSource = elementor.templates.getFilter( 'source' ),
- $sourceItem = this.ui.menuItems.filter( '[data-template-source="' + currentSource + '"]' );
+ initContextMenu: function initContextMenu() {
+ var contextMenuGroups = this.getOption('groups'),
+ deleteGroup = _.findWhere(contextMenuGroups, { name: 'delete' }),
+ afterGroupIndex = contextMenuGroups.indexOf(deleteGroup);
- if ( 'remote' === currentSource ) {
- $sourceItem = $sourceItem.filter( '[data-template-type="' + elementor.templates.getFilter( 'type' ) + '"]' );
+ if (-1 === afterGroupIndex) {
+ afterGroupIndex = contextMenuGroups.length;
}
- this.activateMenuItem( $sourceItem );
- },
+ contextMenuGroups.splice(afterGroupIndex, 0, {
+ name: 'tools',
+ actions: [{
+ name: 'navigator',
+ title: elementor.translate('navigator'),
+ callback: elementor.navigator.open.bind(elementor.navigator, this.view.model)
+ }]
+ });
- onMenuItemClick: function( event ) {
- var item = event.currentTarget,
- itemData = item.dataset;
-
- this.activateMenuItem( jQuery( item ) );
-
- elementor.templates.setTemplatesPage( item.dataset.templateSource, itemData.templateType );
- }
-} );
-
-},{}],24:[function(require,module,exports){
-var TemplateLibraryInsertTemplateBehavior = require( 'elementor-templates/behaviors/insert-template' );
-
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-template-library-header-preview',
+ this.contextMenu = new ContextMenu({
+ groups: contextMenuGroups
+ });
- id: 'elementor-template-library-header-preview',
+ this.contextMenu.getModal().on('hide', this.onContextMenuHide);
+ },
- behaviors: {
- insertTemplate: {
- behaviorClass: TemplateLibraryInsertTemplateBehavior
+ getContextMenu: function getContextMenu() {
+ if (!this.contextMenu) {
+ this.initContextMenu();
}
- }
-} );
-},{"elementor-templates/behaviors/insert-template":14}],25:[function(require,module,exports){
-var TemplateLibraryHeaderView;
+ return this.contextMenu;
+ },
-TemplateLibraryHeaderView = Marionette.LayoutView.extend( {
+ onContextMenu: function onContextMenu(event) {
+ if (elementor.hotKeys.isControlEvent(event) || !elementor.userCan('design')) {
+ return;
+ }
- className: 'elementor-templates-modal__header',
+ if ('edit' !== elementor.channels.dataEditMode.request('activeMode')) {
+ return;
+ }
- template: '#tmpl-elementor-templates-modal__header',
+ event.preventDefault();
- regions: {
- logoArea: '.elementor-templates-modal__header__logo-area',
- tools: '#elementor-template-library-header-tools',
- menuArea: '.elementor-templates-modal__header__menu-area'
- },
+ event.stopPropagation();
- ui: {
- closeModal: '.elementor-templates-modal__header__close-modal'
- },
+ this.getContextMenu().show(event);
- events: {
- 'click @ui.closeModal': 'onCloseModalClick'
+ elementor.channels.editor.reply('contextMenu:targetView', this.view);
},
- onCloseModalClick: function() {
- this._parent._parent._parent.hideModal();
- }
-} );
+ onRequestContextMenu: function onRequestContextMenu(event) {
+ var modal = this.getContextMenu().getModal(),
+ iframe = modal.getSettings('iframe'),
+ toolsGroup = _.findWhere(this.contextMenu.getSettings('groups'), { name: 'tools' });
-module.exports = TemplateLibraryHeaderView;
+ toolsGroup.isVisible = false;
-},{}],26:[function(require,module,exports){
-var TemplateLibraryImportView;
+ modal.setSettings('iframe', null);
-TemplateLibraryImportView = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-template-library-import',
+ this.onContextMenu(event);
- id: 'elementor-template-library-import',
+ toolsGroup.isVisible = true;
- ui: {
- uploadForm: '#elementor-template-library-import-form',
- fileInput: '#elementor-template-library-import-form-input'
+ modal.setSettings('iframe', iframe);
},
- events: {
- 'change @ui.fileInput': 'onFileInputChange'
+ onContextMenuHide: function onContextMenuHide() {
+ elementor.channels.editor.reply('contextMenu:targetView', null);
},
- droppedFiles: null,
+ onDestroy: function onDestroy() {
+ if (this.contextMenu) {
+ this.contextMenu.destroy();
+ }
+ }
+});
- submitForm: function() {
- var layout = elementor.templates.getLayout(),
- data = new FormData();
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( this.droppedFiles ) {
- data.append( 'file', this.droppedFiles[0] );
+"use strict";
- this.droppedFiles = null;
- } else {
- data.append( 'file', this.ui.fileInput[0].files[0] );
- this.ui.uploadForm[0].reset();
- }
+var ControlsStack;
- var options = {
- data: data,
- processData: false,
- contentType: false,
- success: function( data ) {
- elementor.templates.getTemplatesCollection().add( data );
+ControlsStack = Marionette.CompositeView.extend({
+ className: 'elementor-panel-controls-stack',
- elementor.templates.setTemplatesPage( 'local' );
- },
- error: function( data ) {
- elementor.templates.showErrorDialog( data );
+ classes: {
+ popover: 'elementor-controls-popover'
+ },
- layout.showImportView();
- },
- complete: function() {
- layout.hideLoadingView();
- }
- };
+ activeTab: null,
- elementor.ajax.send( 'import_template', options );
+ activeSection: null,
- layout.showLoadingView();
+ templateHelpers: function templateHelpers() {
+ return {
+ elementData: elementor.getElementData(this.model)
+ };
},
- onRender: function() {
- this.ui.uploadForm.on( {
- 'drag dragstart dragend dragover dragenter dragleave drop': this.onFormActions.bind( this ),
- dragenter: this.onFormDragEnter.bind( this ),
- 'dragleave drop': this.onFormDragLeave.bind( this ),
- drop: this.onFormDrop.bind( this )
- } );
+ ui: function ui() {
+ return {
+ tabs: '.elementor-panel-navigation-tab',
+ reloadButton: '.elementor-update-preview-button'
+ };
},
- onFormActions: function( event ) {
- event.preventDefault();
- event.stopPropagation();
+ events: function events() {
+ return {
+ 'click @ui.tabs': 'onClickTabControl',
+ 'click @ui.reloadButton': 'onReloadButtonClick'
+ };
},
- onFormDragEnter: function() {
- this.ui.uploadForm.addClass( 'elementor-drag-over' );
+ modelEvents: {
+ 'destroy': 'onModelDestroy'
},
- onFormDragLeave: function( event ) {
- if ( jQuery( event.relatedTarget ).closest( this.ui.uploadForm ).length ) {
- return;
+ behaviors: {
+ HandleInnerTabs: {
+ behaviorClass: __webpack_require__(31)
}
-
- this.ui.uploadForm.removeClass( 'elementor-drag-over' );
},
- onFormDrop: function( event ) {
- this.droppedFiles = event.originalEvent.dataTransfer.files;
+ initialize: function initialize() {
+ this.initCollection();
- this.submitForm();
+ this.listenTo(elementor.channels.deviceMode, 'change', this.onDeviceModeChange);
},
- onFileInputChange: function() {
- this.submitForm();
- }
-} );
-
-module.exports = TemplateLibraryImportView;
+ initCollection: function initCollection() {
+ this.collection = new Backbone.Collection(_.values(elementor.mergeControlsSettings(this.getOption('controls'))));
+ },
-},{}],27:[function(require,module,exports){
-var TemplateLibraryLoadingView;
+ filter: function filter(controlModel) {
+ if (controlModel.get('tab') !== this.activeTab) {
+ return false;
+ }
-TemplateLibraryLoadingView = Marionette.ItemView.extend( {
- id: 'elementor-template-library-loading',
+ if ('section' === controlModel.get('type')) {
+ return true;
+ }
- template: '#tmpl-elementor-template-library-loading'
-} );
+ var section = controlModel.get('section');
-module.exports = TemplateLibraryLoadingView;
+ return !section || section === this.activeSection;
+ },
-},{}],28:[function(require,module,exports){
-var TemplateLibraryPreviewView;
+ isVisibleSectionControl: function isVisibleSectionControl(sectionControlModel) {
+ return this.activeTab === sectionControlModel.get('tab');
+ },
-TemplateLibraryPreviewView = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-template-library-preview',
+ activateTab: function activateTab(tabName) {
+ this.activeTab = tabName;
- id: 'elementor-template-library-preview',
+ this.ui.tabs.removeClass('elementor-active').filter('[data-tab="' + tabName + '"]').addClass('elementor-active');
- ui: {
- iframe: '> iframe'
+ this.activateFirstSection();
},
- onRender: function() {
- this.ui.iframe.attr( 'src', this.getOption( 'url' ) );
- }
-} );
-
-module.exports = TemplateLibraryPreviewView;
+ activateSection: function activateSection(sectionName) {
+ this.activeSection = sectionName;
+ },
-},{}],29:[function(require,module,exports){
-var TemplateLibrarySaveTemplateView;
+ activateFirstSection: function activateFirstSection() {
+ var self = this;
-TemplateLibrarySaveTemplateView = Marionette.ItemView.extend( {
- id: 'elementor-template-library-save-template',
+ var sectionControls = self.collection.filter(function (controlModel) {
+ return 'section' === controlModel.get('type') && self.isVisibleSectionControl(controlModel);
+ });
- template: '#tmpl-elementor-template-library-save-template',
+ if (!sectionControls[0]) {
+ return;
+ }
- ui: {
- form: '#elementor-template-library-save-template-form',
- submitButton: '#elementor-template-library-save-template-submit'
- },
+ var preActivatedSection = sectionControls.filter(function (controlModel) {
+ return self.activeSection === controlModel.get('name');
+ });
- events: {
- 'submit @ui.form': 'onFormSubmit'
- },
+ if (preActivatedSection[0]) {
+ return;
+ }
- getSaveType: function() {
- return this.model ? this.model.get( 'elType' ) : 'page';
+ self.activateSection(sectionControls[0].get('name'));
},
- templateHelpers: function() {
- var saveType = this.getSaveType(),
- templateType = elementor.templates.getTemplateTypes( saveType );
+ getChildView: function getChildView(item) {
+ var controlType = item.get('type');
- return templateType.saveDialog;
+ return elementor.getControlView(controlType);
},
- onFormSubmit: function( event ) {
- event.preventDefault();
+ handlePopovers: function handlePopovers() {
+ var self = this,
+ popoverStarted = false,
+ $popover;
- var formData = this.ui.form.elementorSerializeObject(),
- saveType = this.model ? this.model.get( 'elType' ) : 'page',
- JSONParams = { removeDefault: true };
+ self.removePopovers();
- formData.content = this.model ? [ this.model.toJSON( JSONParams ) ] : elementor.elements.toJSON( JSONParams );
+ self.children.each(function (child) {
+ if (popoverStarted) {
+ $popover.append(child.$el);
+ }
- this.ui.submitButton.addClass( 'elementor-button-state' );
+ var popover = child.model.get('popover');
- elementor.templates.saveTemplate( saveType, formData );
- }
-} );
+ if (!popover) {
+ return;
+ }
-module.exports = TemplateLibrarySaveTemplateView;
+ if (popover.start) {
+ popoverStarted = true;
-},{}],30:[function(require,module,exports){
-var TemplateLibraryTemplatesEmptyView;
+ $popover = jQuery('<div>', { 'class': self.classes.popover });
-TemplateLibraryTemplatesEmptyView = Marionette.ItemView.extend( {
- id: 'elementor-template-library-templates-empty',
+ child.$el.before($popover);
- template: '#tmpl-elementor-template-library-templates-empty',
+ $popover.append(child.$el);
+ }
- ui: {
- title: '.elementor-template-library-blank-title',
- message: '.elementor-template-library-blank-message'
+ if (popover.end) {
+ popoverStarted = false;
+ }
+ });
},
- modesStrings: {
- empty: {
- title: elementor.translate( 'templates_empty_title' ),
- message: elementor.translate( 'templates_empty_message' )
- },
- noResults: {
- title: elementor.translate( 'templates_no_results_title' ),
- message: elementor.translate( 'templates_no_results_message' )
- },
- noFavorites: {
- title: elementor.translate( 'templates_no_favorites_title' ),
- message: elementor.translate( 'templates_no_favorites_message' )
- }
+ removePopovers: function removePopovers() {
+ this.$el.find('.' + this.classes.popover).remove();
},
- getCurrentMode: function() {
- if ( elementor.templates.getFilter( 'text' ) ) {
- return 'noResults';
- }
+ openActiveSection: function openActiveSection() {
+ var activeSection = this.activeSection,
+ activeSectionView = this.children.filter(function (view) {
+ return activeSection === view.model.get('name');
+ });
- if ( elementor.templates.getFilter( 'favorite' ) ) {
- return 'noFavorites';
+ if (activeSectionView[0]) {
+ activeSectionView[0].$el.addClass('elementor-open');
}
-
- return 'empty';
},
- onRender: function() {
- var modeStrings = this.modesStrings[ this.getCurrentMode() ];
-
- this.ui.title.html( modeStrings.title );
+ onRenderCollection: function onRenderCollection() {
+ this.openActiveSection();
- this.ui.message.html( modeStrings.message );
- }
-} );
+ this.handlePopovers();
+ },
-module.exports = TemplateLibraryTemplatesEmptyView;
+ onRenderTemplate: function onRenderTemplate() {
+ this.activateTab(this.activeTab || this.ui.tabs.eq(0).data('tab'));
+ },
-},{}],31:[function(require,module,exports){
-var TemplateLibraryTemplateLocalView = require( 'elementor-templates/views/template/local' ),
- TemplateLibraryTemplateRemoteView = require( 'elementor-templates/views/template/remote' ),
- Masonry = require( 'elementor-utils/masonry' ),
- TemplateLibraryCollectionView;
+ onModelDestroy: function onModelDestroy() {
+ this.destroy();
+ },
-TemplateLibraryCollectionView = Marionette.CompositeView.extend( {
- template: '#tmpl-elementor-template-library-templates',
+ onClickTabControl: function onClickTabControl(event) {
+ event.preventDefault();
- id: 'elementor-template-library-templates',
+ var $tab = this.$(event.currentTarget),
+ tabName = $tab.data('tab');
- childViewContainer: '#elementor-template-library-templates-container',
+ if (this.activeTab === tabName) {
+ return;
+ }
- reorderOnSort: true,
+ this.activateTab(tabName);
- emptyView: function() {
- var EmptyView = require( 'elementor-templates/views/parts/templates-empty' );
+ this._renderChildren();
+ },
- return new EmptyView();
+ onReloadButtonClick: function onReloadButtonClick() {
+ elementor.reloadPreview();
},
- ui: {
- textFilter: '#elementor-template-library-filter-text',
- selectFilter: '.elementor-template-library-filter-select',
- myFavoritesFilter: '#elementor-template-library-filter-my-favorites',
- orderInputs: '.elementor-template-library-order-input',
- orderLabels: '.elementor-template-library-order-label'
+ onDeviceModeChange: function onDeviceModeChange() {
+ this.$el.removeClass('elementor-responsive-switchers-open');
},
- events: {
- 'input @ui.textFilter': 'onTextFilterInput',
- 'change @ui.selectFilter': 'onSelectFilterChange',
- 'change @ui.myFavoritesFilter': 'onMyFavoritesFilterChange',
- 'mousedown @ui.orderLabels': 'onOrderLabelsClick'
+ onChildviewControlSectionClicked: function onChildviewControlSectionClicked(childView) {
+ var isSectionOpen = childView.$el.hasClass('elementor-open');
+
+ this.activateSection(isSectionOpen ? null : childView.model.get('name'));
+
+ this._renderChildren();
},
- comparators: {
- title: function( model ) {
- return model.get( 'title' ).toLowerCase();
- },
- popularityIndex: function( model ) {
- var popularityIndex = model.get( 'popularityIndex' );
+ onChildviewResponsiveSwitcherClick: function onChildviewResponsiveSwitcherClick(childView, device) {
+ if ('desktop' === device) {
+ this.$el.toggleClass('elementor-responsive-switchers-open');
+ }
+ }
+});
- if ( ! popularityIndex ) {
- popularityIndex = model.get( 'date' );
- }
+module.exports = ControlsStack;
- return -popularityIndex;
- },
- trendIndex: function( model ) {
- var trendIndex = model.get( 'trendIndex' );
+/***/ }),
+/* 13 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( ! trendIndex ) {
- trendIndex = model.get( 'date' );
- }
+"use strict";
- return -trendIndex;
- }
- },
- getChildView: function( childModel ) {
- if ( 'remote' === childModel.get( 'source' ) ) {
- return TemplateLibraryTemplateRemoteView;
- }
+var ViewModule = __webpack_require__(1),
+ Stylesheet = __webpack_require__(24),
+ ControlsCSSParser;
- return TemplateLibraryTemplateLocalView;
- },
+ControlsCSSParser = ViewModule.extend({
+ stylesheet: null,
- initialize: function() {
- this.listenTo( elementor.channels.templates, 'filter:change', this._renderChildren );
+ getDefaultSettings: function getDefaultSettings() {
+ return {
+ id: 0,
+ settingsModel: null,
+ dynamicParsing: {}
+ };
},
- filter: function( childModel ) {
- var filterTerms = elementor.templates.getFilterTerms(),
- passingFilter = true;
+ getDefaultElements: function getDefaultElements() {
+ return {
+ $stylesheetElement: jQuery('<style>', { id: 'elementor-style-' + this.getSettings('id') })
+ };
+ },
- jQuery.each( filterTerms, function( filterTermName ) {
- var filterValue = elementor.templates.getFilter( filterTermName );
+ initStylesheet: function initStylesheet() {
+ var breakpoints = elementorFrontend.config.breakpoints;
- if ( ! filterValue ) {
- return;
- }
+ this.stylesheet = new Stylesheet();
- if ( this.callback ) {
- var callbackResult = this.callback.call( childModel, filterValue );
+ this.stylesheet.addDevice('mobile', 0).addDevice('tablet', breakpoints.md).addDevice('desktop', breakpoints.lg);
+ },
- if ( ! callbackResult ) {
- passingFilter = false;
- }
+ addStyleRules: function addStyleRules(styleControls, values, controls, placeholders, replacements) {
+ var self = this,
+ dynamicParsedValues = self.getSettings('settingsModel').parseDynamicSettings(values, self.getSettings('dynamicParsing'), styleControls);
- return callbackResult;
+ _.each(styleControls, function (control) {
+ if (control.styleFields && control.styleFields.length) {
+ self.addRepeaterControlsStyleRules(values[control.name], control.styleFields, controls, placeholders, replacements);
}
- var filterResult = filterValue === childModel.get( filterTermName );
+ if (control.dynamic && control.dynamic.active && values.__dynamic__ && values.__dynamic__[control.name]) {
+ self.addDynamicControlStyleRules(values.__dynamic__[control.name], control);
+ }
- if ( ! filterResult ) {
- passingFilter = false;
+ if (!control.selectors) {
+ return;
}
- return filterResult;
- } );
+ self.addControlStyleRules(control, dynamicParsedValues, controls, placeholders, replacements);
+ });
+ },
- return passingFilter;
+ addControlStyleRules: function addControlStyleRules(control, values, controls, placeholders, replacements) {
+ var self = this;
+
+ ControlsCSSParser.addControlStyleRules(self.stylesheet, control, controls, function (control) {
+ return self.getStyleControlValue(control, values);
+ }, placeholders, replacements);
},
- order: function( by, reverseOrder ) {
- var comparator = this.comparators[ by ] || by;
+ getStyleControlValue: function getStyleControlValue(control, values) {
+ var value = values[control.name];
- if ( reverseOrder ) {
- comparator = this.reverseOrder( comparator );
+ if (control.selectors_dictionary) {
+ value = control.selectors_dictionary[value] || value;
}
- this.collection.comparator = comparator;
+ if (!_.isNumber(value) && _.isEmpty(value)) {
+ return;
+ }
- this.collection.sort();
+ return value;
},
- reverseOrder: function( comparator ) {
- if ( 'function' !== typeof comparator ) {
- var comparatorValue = comparator;
+ addRepeaterControlsStyleRules: function addRepeaterControlsStyleRules(repeaterValues, repeaterControlsItems, controls, placeholders, replacements) {
+ var self = this;
- comparator = function( model ) {
- return model.get( comparatorValue );
- };
- }
+ repeaterControlsItems.forEach(function (item, index) {
+ var itemModel = repeaterValues.models[index];
- return function( left, right ) {
- var l = comparator( left ),
- r = comparator( right );
+ self.addStyleRules(item, itemModel.attributes, controls, placeholders.concat(['{{CURRENT_ITEM}}']), replacements.concat(['.elementor-repeater-item-' + itemModel.get('_id')]));
+ });
+ },
- if ( undefined === l ) {
- return -1;
- }
+ addDynamicControlStyleRules: function addDynamicControlStyleRules(value, control) {
+ var self = this;
- if ( undefined === r ) {
- return 1;
+ elementor.dynamicTags.parseTagsText(value, control.dynamic, function (id, name, settings) {
+ var tag = elementor.dynamicTags.createTag(id, name, settings);
+
+ if (!tag) {
+ return;
}
- return l < r ? 1 : l > r ? -1 : 0;
- };
- },
+ var tagSettingsModel = tag.model,
+ styleControls = tagSettingsModel.getStyleControls();
- addSourceData: function() {
- var isEmpty = this.children.isEmpty();
+ if (!styleControls.length) {
+ return;
+ }
- this.$el.attr( 'data-template-source', isEmpty ? 'empty' : elementor.templates.getFilter( 'source' ) );
+ self.addStyleRules(tagSettingsModel.getStyleControls(), tagSettingsModel.attributes, tagSettingsModel.controls, ['{{WRAPPER}}'], ['#elementor-tag-' + id]);
+ });
},
- setFiltersUI: function() {
- var $filters = this.$( this.ui.selectFilter );
+ addStyleToDocument: function addStyleToDocument() {
+ elementor.$previewContents.find('head').append(this.elements.$stylesheetElement);
- $filters.select2( {
- placeholder: elementor.translate( 'category' ),
- allowClear: true,
- width: 150
- } );
+ this.elements.$stylesheetElement.text(this.stylesheet);
},
- setMasonrySkin: function() {
- var masonry = new Masonry( {
- container: this.$childViewContainer,
- items: this.$childViewContainer.children()
- } );
-
- this.$childViewContainer.imagesLoaded( masonry.run.bind( masonry ) );
+ removeStyleFromDocument: function removeStyleFromDocument() {
+ this.elements.$stylesheetElement.remove();
},
- toggleFilterClass: function() {
- this.$el.toggleClass( 'elementor-templates-filter-active', !! ( elementor.templates.getFilter( 'text' ) || elementor.templates.getFilter( 'favorite' ) ) );
- },
+ onInit: function onInit() {
+ ViewModule.prototype.onInit.apply(this, arguments);
- onRenderCollection: function() {
- this.addSourceData();
+ this.initStylesheet();
+ }
+});
- this.toggleFilterClass();
+ControlsCSSParser.addControlStyleRules = function (stylesheet, control, controls, valueCallback, placeholders, replacements) {
+ var value = valueCallback(control);
- if ( 'remote' === elementor.templates.getFilter( 'source' ) && 'block' === elementor.templates.getFilter( 'type' ) ) {
- this.setFiltersUI();
+ if (undefined === value) {
+ return;
+ }
- this.setMasonrySkin();
- }
- },
+ _.each(control.selectors, function (cssProperty, selector) {
+ var outputCssProperty;
- onBeforeRenderEmpty: function() {
- this.addSourceData();
- },
+ try {
+ outputCssProperty = cssProperty.replace(/{{(?:([^.}]+)\.)?([^}]*)}}/g, function (originalPhrase, controlName, placeholder) {
+ var parserControl = control,
+ valueToInsert = value;
- onTextFilterInput: function() {
- elementor.templates.setFilter( 'text', this.ui.textFilter.val() );
- },
+ if (controlName) {
+ parserControl = _.findWhere(controls, { name: controlName });
- onSelectFilterChange: function( event ) {
- var $select = jQuery( event.currentTarget ),
- filterName = $select.data( 'elementor-filter' );
+ if (!parserControl) {
+ return '';
+ }
- elementor.templates.setFilter( filterName, $select.val() );
- },
+ valueToInsert = valueCallback(parserControl);
+ }
- onMyFavoritesFilterChange: function( ) {
- elementor.templates.setFilter( 'favorite', this.ui.myFavoritesFilter[0].checked );
- },
+ var parsedValue = elementor.getControlView(parserControl.type).getStyleValue(placeholder.toLowerCase(), valueToInsert);
+
+ if ('' === parsedValue) {
+ throw '';
+ }
- onOrderLabelsClick: function( event ) {
- var $clickedInput = jQuery( event.currentTarget.control ),
- toggle;
+ return parsedValue;
+ });
+ } catch (e) {
+ return;
+ }
- if ( ! $clickedInput[0].checked ) {
- toggle = 'asc' !== $clickedInput.data( 'default-ordering-direction' );
+ if (_.isEmpty(outputCssProperty)) {
+ return;
}
- $clickedInput.toggleClass( 'elementor-template-library-order-reverse', toggle );
+ var devicePattern = /^(?:\([^)]+\)){1,2}/,
+ deviceRules = selector.match(devicePattern),
+ query = {};
- this.order( $clickedInput.val(), $clickedInput.hasClass( 'elementor-template-library-order-reverse' ) );
- }
-} );
+ if (deviceRules) {
+ deviceRules = deviceRules[0];
-module.exports = TemplateLibraryCollectionView;
+ selector = selector.replace(devicePattern, '');
-},{"elementor-templates/views/parts/templates-empty":30,"elementor-templates/views/template/local":33,"elementor-templates/views/template/remote":34,"elementor-utils/masonry":130}],32:[function(require,module,exports){
-var TemplateLibraryInsertTemplateBehavior = require( 'elementor-templates/behaviors/insert-template' ),
- TemplateLibraryTemplateView;
+ var pureDevicePattern = /\(([^)]+)\)/g,
+ pureDeviceRules = [],
+ matches;
-TemplateLibraryTemplateView = Marionette.ItemView.extend( {
- className: function() {
- var classes = 'elementor-template-library-template',
- source = this.model.get( 'source' );
+ while (matches = pureDevicePattern.exec(deviceRules)) {
+ pureDeviceRules.push(matches[1]);
+ }
- classes += ' elementor-template-library-template-' + source;
+ _.each(pureDeviceRules, function (deviceRule) {
+ if ('desktop' === deviceRule) {
+ return;
+ }
- if ( 'remote' === source ) {
- classes += ' elementor-template-library-template-' + this.model.get( 'type' );
+ var device = deviceRule.replace(/\+$/, ''),
+ endPoint = device === deviceRule ? 'max' : 'min';
+
+ query[endPoint] = device;
+ });
}
- if ( this.model.get( 'isPro' ) ) {
- classes += ' elementor-template-library-pro-template';
+ _.each(placeholders, function (placeholder, index) {
+ // Check if it's a RegExp
+ var regexp = placeholder.source ? placeholder.source : placeholder,
+ placeholderPattern = new RegExp(regexp, 'g');
+
+ selector = selector.replace(placeholderPattern, replacements[index]);
+ });
+
+ if (!Object.keys(query).length && control.responsive) {
+ query = _.pick(elementor.helpers.cloneObject(control.responsive), ['min', 'max']);
+
+ if ('desktop' === query.max) {
+ delete query.max;
+ }
}
- return classes;
+ stylesheet.addRules(selector, outputCssProperty, query);
+ });
+};
+
+module.exports = ControlsCSSParser;
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var TemplateLibraryHeaderView;
+
+TemplateLibraryHeaderView = Marionette.LayoutView.extend({
+
+ className: 'elementor-templates-modal__header',
+
+ template: '#tmpl-elementor-templates-modal__header',
+
+ regions: {
+ logoArea: '.elementor-templates-modal__header__logo-area',
+ tools: '#elementor-template-library-header-tools',
+ menuArea: '.elementor-templates-modal__header__menu-area'
},
- ui: function() {
- return {
- previewButton: '.elementor-template-library-template-preview'
- };
+ ui: {
+ closeModal: '.elementor-templates-modal__header__close'
+ },
+
+ events: {
+ 'click @ui.closeModal': 'onCloseModalClick'
},
- events: function() {
+ templateHelpers: function templateHelpers() {
return {
- 'click @ui.previewButton': 'onPreviewButtonClick'
+ closeType: this.getOption('closeType')
};
},
- behaviors: {
- insertTemplate: {
- behaviorClass: TemplateLibraryInsertTemplateBehavior
- }
+ onCloseModalClick: function onCloseModalClick() {
+ this._parent._parent._parent.hideModal();
}
-} );
+});
-module.exports = TemplateLibraryTemplateView;
+module.exports = TemplateLibraryHeaderView;
-},{"elementor-templates/behaviors/insert-template":14}],33:[function(require,module,exports){
-var TemplateLibraryTemplateView = require( 'elementor-templates/views/template/base' ),
- TemplateLibraryTemplateLocalView;
+/***/ }),
+/* 15 */
+/***/ (function(module, exports, __webpack_require__) {
-TemplateLibraryTemplateLocalView = TemplateLibraryTemplateView.extend( {
- template: '#tmpl-elementor-template-library-template-local',
+"use strict";
- ui: function() {
- return _.extend( TemplateLibraryTemplateView.prototype.ui.apply( this, arguments ), {
- deleteButton: '.elementor-template-library-template-delete',
- morePopup: '.elementor-template-library-template-more',
- toggleMore: '.elementor-template-library-template-more-toggle',
- toggleMoreIcon: '.elementor-template-library-template-more-toggle i'
- } );
- },
- events: function() {
- return _.extend( TemplateLibraryTemplateView.prototype.events.apply( this, arguments ), {
- 'click @ui.deleteButton': 'onDeleteButtonClick',
- 'click @ui.toggleMore': 'onToggleMoreClick'
- } );
- },
+var TemplateLibraryLoadingView;
- onDeleteButtonClick: function() {
- var toggleMoreIcon = this.ui.toggleMoreIcon;
+TemplateLibraryLoadingView = Marionette.ItemView.extend({
+ id: 'elementor-template-library-loading',
- elementor.templates.deleteTemplate( this.model, {
- onConfirm: function() {
- toggleMoreIcon.removeClass( 'eicon-ellipsis-h' ).addClass( 'fa fa-circle-o-notch fa-spin' );
- },
- onSuccess: function() {
- elementor.templates.showTemplates();
- }
- } );
+ template: '#tmpl-elementor-template-library-loading'
+});
+
+module.exports = TemplateLibraryLoadingView;
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var ViewModule = __webpack_require__(1);
+
+module.exports = ViewModule.extend({
+
+ getDefaultSettings: function getDefaultSettings() {
+ return {
+ container: null,
+ items: null,
+ columnsCount: 3,
+ verticalSpaceBetween: 30
+ };
},
- onToggleMoreClick: function() {
- this.ui.morePopup.show();
+ getDefaultElements: function getDefaultElements() {
+ return {
+ $container: jQuery(this.getSettings('container')),
+ $items: jQuery(this.getSettings('items'))
+ };
},
- onPreviewButtonClick: function() {
- open( this.model.get( 'url' ), '_blank' );
+ run: function run() {
+ var heights = [],
+ distanceFromTop = this.elements.$container.position().top,
+ settings = this.getSettings(),
+ columnsCount = settings.columnsCount;
+
+ distanceFromTop += parseInt(this.elements.$container.css('margin-top'), 10);
+
+ this.elements.$items.each(function (index) {
+ var row = Math.floor(index / columnsCount),
+ $item = jQuery(this),
+ itemHeight = $item[0].getBoundingClientRect().height + settings.verticalSpaceBetween;
+
+ if (row) {
+ var itemPosition = $item.position(),
+ indexAtRow = index % columnsCount,
+ pullHeight = itemPosition.top - distanceFromTop - heights[indexAtRow];
+
+ pullHeight -= parseInt($item.css('margin-top'), 10);
+
+ pullHeight *= -1;
+
+ $item.css('margin-top', pullHeight + 'px');
+
+ heights[indexAtRow] += itemHeight;
+ } else {
+ heights.push(itemHeight);
+ }
+ });
}
-} );
+});
-module.exports = TemplateLibraryTemplateLocalView;
+/***/ }),
+/* 17 */
+/***/ (function(module, exports, __webpack_require__) {
-},{"elementor-templates/views/template/base":32}],34:[function(require,module,exports){
-var TemplateLibraryTemplateView = require( 'elementor-templates/views/template/base' ),
- TemplateLibraryTemplateRemoteView;
+"use strict";
-TemplateLibraryTemplateRemoteView = TemplateLibraryTemplateView.extend( {
- template: '#tmpl-elementor-template-library-template-remote',
- ui: function() {
- return jQuery.extend( TemplateLibraryTemplateView.prototype.ui.apply( this, arguments ), {
- favoriteCheckbox: '.elementor-template-library-template-favorite-input'
- } );
- },
+var HotKeys = function HotKeys() {
+ var hotKeysHandlers = {};
- events: function() {
- return jQuery.extend( TemplateLibraryTemplateView.prototype.events.apply( this, arguments ), {
- 'change @ui.favoriteCheckbox': 'onFavoriteCheckboxChange'
- } );
- },
+ var applyHotKey = function applyHotKey(event) {
+ var handlers = hotKeysHandlers[event.which];
- onPreviewButtonClick: function() {
- elementor.templates.getLayout().showPreviewView( this.model );
- },
+ if (!handlers) {
+ return;
+ }
- onFavoriteCheckboxChange: function() {
- var isFavorite = this.ui.favoriteCheckbox[0].checked;
+ jQuery.each(handlers, function () {
+ var handler = this;
+
+ if (handler.isWorthHandling && !handler.isWorthHandling(event)) {
+ return;
+ }
- this.model.set( 'favorite', isFavorite );
+ // Fix for some keyboard sources that consider alt key as ctrl key
+ if (!handler.allowAltKey && event.altKey) {
+ return;
+ }
+
+ event.preventDefault();
+
+ handler.handle(event);
+ });
+ };
- elementor.templates.markAsFavorite( this.model, isFavorite );
+ this.isControlEvent = function (event) {
+ return event[elementor.envData.mac ? 'metaKey' : 'ctrlKey'];
+ };
- if ( ! isFavorite && elementor.templates.getFilter( 'favorite' ) ) {
- elementor.channels.templates.trigger( 'filter:change' );
+ this.addHotKeyHandler = function (keyCode, handlerName, handler) {
+ if (!hotKeysHandlers[keyCode]) {
+ hotKeysHandlers[keyCode] = {};
}
- }
-} );
-module.exports = TemplateLibraryTemplateRemoteView;
+ hotKeysHandlers[keyCode][handlerName] = handler;
+ };
+
+ this.bindListener = function ($listener) {
+ $listener.on('keydown', applyHotKey);
+ };
+};
+
+module.exports = new HotKeys();
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
-},{"elementor-templates/views/template/base":32}],35:[function(require,module,exports){
-var Module = require( 'elementor-utils/module' ),
- Validator;
+var Module = __webpack_require__(2),
+ Validator;
-Validator = Module.extend( {
+Validator = Module.extend({
errors: [],
- __construct: function( settings ) {
+ __construct: function __construct(settings) {
var customValidationMethod = settings.customValidationMethod;
- if ( customValidationMethod ) {
+ if (customValidationMethod) {
this.validationMethod = customValidationMethod;
}
},
- getDefaultSettings: function() {
+ getDefaultSettings: function getDefaultSettings() {
return {
validationTerms: {}
};
},
- isValid: function() {
- var validationErrors = this.validationMethod.apply( this, arguments );
+ isValid: function isValid() {
+ var validationErrors = this.validationMethod.apply(this, arguments);
- if ( validationErrors.length ) {
+ if (validationErrors.length) {
this.errors = validationErrors;
return false;
return true;
},
- validationMethod: function( newValue ) {
- var validationTerms = this.getSettings( 'validationTerms' ),
- errors = [];
+ validationMethod: function validationMethod(newValue) {
+ var validationTerms = this.getSettings('validationTerms'),
+ errors = [];
- if ( validationTerms.required ) {
- if ( ! ( '' + newValue ).length ) {
- errors.push( 'Required value is empty' );
+ if (validationTerms.required) {
+ if (!('' + newValue).length) {
+ errors.push('Required value is empty');
}
}
return errors;
}
-} );
+});
module.exports = Validator;
-},{"elementor-utils/module":131}],36:[function(require,module,exports){
-var Validator = require( 'elementor-validator/base' );
-
-module.exports = Validator.extend( {
- validationMethod: function( newValue ) {
- var validationTerms = this.getSettings( 'validationTerms' ),
- errors = [];
-
- if ( _.isFinite( newValue ) ) {
- if ( undefined !== validationTerms.min && newValue < validationTerms.min ) {
- errors.push( 'Value is less than minimum' );
- }
-
- if ( undefined !== validationTerms.max && newValue > validationTerms.max ) {
- errors.push( 'Value is greater than maximum' );
- }
- }
-
- return errors;
- }
-} );
-
-},{"elementor-validator/base":35}],37:[function(require,module,exports){
-var ControlBaseView = require( 'elementor-controls/base' ),
- TagsBehavior = require( 'elementor-dynamic-tags/control-behavior' ),
- Validator = require( 'elementor-validator/base' ),
- ControlBaseDataView;
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
-ControlBaseDataView = ControlBaseView.extend( {
+"use strict";
- ui: function() {
- var ui = ControlBaseView.prototype.ui.apply( this, arguments );
- _.extend( ui, {
- input: 'input[data-setting][type!="checkbox"][type!="radio"]',
- checkbox: 'input[data-setting][type="checkbox"]',
- radio: 'input[data-setting][type="radio"]',
- select: 'select[data-setting]',
- textarea: 'textarea[data-setting]',
- responsiveSwitchers: '.elementor-responsive-switcher',
- contentEditable: '[contenteditable="true"]'
- } );
+var SortableBehavior;
- return ui;
+SortableBehavior = Marionette.Behavior.extend({
+ defaults: {
+ elChildType: 'widget'
},
- templateHelpers: function() {
- var controlData = ControlBaseView.prototype.templateHelpers.apply( this, arguments );
-
- controlData.data.controlValue = this.getControlValue();
-
- return controlData;
+ events: {
+ sortstart: 'onSortStart',
+ sortreceive: 'onSortReceive',
+ sortupdate: 'onSortUpdate',
+ sortover: 'onSortOver',
+ sortout: 'onSortOut'
},
- events: function() {
- return {
- 'input @ui.input': 'onBaseInputChange',
- 'change @ui.checkbox': 'onBaseInputChange',
- 'change @ui.radio': 'onBaseInputChange',
- 'input @ui.textarea': 'onBaseInputChange',
- 'change @ui.select': 'onBaseInputChange',
- 'input @ui.contentEditable': 'onBaseInputChange',
- 'click @ui.responsiveSwitchers': 'onResponsiveSwitchersClick'
- };
+ initialize: function initialize() {
+ this.listenTo(elementor.channels.dataEditMode, 'switch', this.onEditModeSwitched).listenTo(this.view.options.model, 'request:sort:start', this.startSort).listenTo(this.view.options.model, 'request:sort:update', this.updateSort).listenTo(this.view.options.model, 'request:sort:receive', this.receiveSort);
},
- behaviors: function() {
- var behaviors = {},
- dynamicSettings = this.options.model.get( 'dynamic' );
+ onEditModeSwitched: function onEditModeSwitched(activeMode) {
+ if ('edit' === activeMode) {
+ this.activate();
+ } else {
+ this.deactivate();
+ }
+ },
- if ( dynamicSettings && dynamicSettings.active ) {
- var tags = _.filter( elementor.dynamicTags.getConfig( 'tags' ), function( tag ) {
- return _.intersection( tag.categories, dynamicSettings.categories ).length;
- } );
+ onRender: function onRender() {
+ var self = this;
- if ( tags.length ) {
- behaviors.tags = {
- behaviorClass: TagsBehavior,
- tags: tags,
- dynamicSettings: dynamicSettings
- };
- }
- }
+ _.defer(function () {
+ self.onEditModeSwitched(elementor.channels.dataEditMode.request('activeMode'));
+ });
+ },
- return behaviors;
+ onDestroy: function onDestroy() {
+ this.deactivate();
},
- initialize: function( options ) {
- ControlBaseView.prototype.initialize.apply( this, arguments );
+ activate: function activate() {
+ if (!elementor.userCan('design')) {
+ return;
+ }
- this.registerValidators();
+ if (this.getChildViewContainer().sortable('instance')) {
+ return;
+ }
- this.listenTo( this.elementSettingsModel, 'change:external:' + this.model.get( 'name' ), this.onSettingsExternalChange );
- },
+ var $childViewContainer = this.getChildViewContainer(),
+ defaultSortableOptions = {
+ connectWith: $childViewContainer.selector,
+ placeholder: 'elementor-sortable-placeholder elementor-' + this.getOption('elChildType') + '-placeholder',
+ cursorAt: {
+ top: 20,
+ left: 25
+ },
+ helper: this._getSortableHelper.bind(this),
+ cancel: 'input, textarea, button, select, option, .elementor-inline-editing, .elementor-tab-title'
- getControlValue: function() {
- return this.elementSettingsModel.get( this.model.get( 'name' ) );
- },
+ },
+ sortableOptions = _.extend(defaultSortableOptions, this.view.getSortableOptions());
- setValue: function( value ) {
- this.setSettingsModel( value );
+ $childViewContainer.sortable(sortableOptions);
},
- setSettingsModel: function( value ) {
- this.elementSettingsModel.set( this.model.get( 'name' ), value );
+ _getSortableHelper: function _getSortableHelper(event, $item) {
+ var model = this.view.collection.get({
+ cid: $item.data('model-cid')
+ });
- this.triggerMethod( 'settings:change' );
+ return '<div style="height: 84px; width: 125px;" class="elementor-sortable-helper elementor-sortable-helper-' + model.get('elType') + '"><div class="icon"><i class="' + model.getIcon() + '"></i></div><div class="elementor-element-title-wrapper"><div class="title">' + model.getTitle() + '</div></div></div>';
},
- applySavedValue: function() {
- this.setInputValue( '[data-setting="' + this.model.get( 'name' ) + '"]', this.getControlValue() );
+ getChildViewContainer: function getChildViewContainer() {
+ return this.view.getChildViewContainer(this.view);
},
- getEditSettings: function( setting ) {
- var settings = this.getOption( 'elementEditSettings' ).toJSON();
+ deactivate: function deactivate() {
+ var childViewContainer = this.getChildViewContainer();
- if ( setting ) {
- return settings[ setting ];
+ if (childViewContainer.sortable('instance')) {
+ childViewContainer.sortable('destroy');
}
-
- return settings;
},
- setEditSetting: function( settingKey, settingValue ) {
- var settings = this.getOption( 'elementEditSettings' );
+ startSort: function startSort(event, ui) {
+ event.stopPropagation();
+
+ var model = this.view.collection.get({
+ cid: ui.item.data('model-cid')
+ });
- settings.set( settingKey, settingValue );
+ elementor.channels.data.reply('dragging:model', model).reply('dragging:parent:view', this.view).trigger('drag:start', model).trigger(model.get('elType') + ':drag:start');
},
- getInputValue: function( input ) {
- var $input = this.$( input );
+ updateSort: function updateSort(ui) {
+ var model = elementor.channels.data.request('dragging:model'),
+ $childElement = ui.item,
+ collection = this.view.collection,
+ newIndex = $childElement.parent().children().index($childElement),
+ child = this.view.children.findByModelCid(model.cid);
- if ( $input.is( '[contenteditable="true"]' ) ) {
- return $input.html();
- }
+ this.view.addChildElement(model.clone(), {
+ at: newIndex,
+ trigger: {
+ beforeAdd: 'drag:before:update',
+ afterAdd: 'drag:after:update'
+ },
+ onBeforeAdd: function onBeforeAdd() {
+ child._isRendering = true;
- var inputValue = $input.val(),
- inputType = $input.attr( 'type' );
+ collection.remove(model);
+ }
+ });
- if ( -1 !== [ 'radio', 'checkbox' ].indexOf( inputType ) ) {
- return $input.prop( 'checked' ) ? inputValue : '';
- }
+ elementor.saver.setFlagEditorChange(true);
+ },
- if ( 'number' === inputType && _.isFinite( inputValue ) ) {
- return +inputValue;
- }
+ receiveSort: function receiveSort(event, ui) {
+ event.stopPropagation();
- // Temp fix for jQuery (< 3.0) that return null instead of empty array
- if ( 'SELECT' === input.tagName && $input.prop( 'multiple' ) && null === inputValue ) {
- inputValue = [];
+ if (this.view.isCollectionFilled()) {
+ jQuery(ui.sender).sortable('cancel');
+
+ return;
}
- return inputValue;
- },
+ var model = elementor.channels.data.request('dragging:model'),
+ draggedElType = model.get('elType'),
+ draggedIsInnerSection = 'section' === draggedElType && model.get('isInner'),
+ targetIsInnerColumn = 'column' === this.view.getElementType() && this.view.isInner();
- setInputValue: function( input, value ) {
- var $input = this.$( input ),
- inputType = $input.attr( 'type' );
+ if (draggedIsInnerSection && targetIsInnerColumn) {
+ jQuery(ui.sender).sortable('cancel');
- if ( 'checkbox' === inputType ) {
- $input.prop( 'checked', !! value );
- } else if ( 'radio' === inputType ) {
- $input.filter( '[value="' + value + '"]' ).prop( 'checked', true );
- } else {
- $input.val( value );
+ return;
}
- },
- addValidator: function( validator ) {
- this.validators.push( validator );
- },
+ var newIndex = ui.item.index(),
+ modelData = model.toJSON({ copyHtmlCache: true });
- registerValidators: function() {
- this.validators = [];
+ this.view.addChildElement(modelData, {
+ at: newIndex,
+ trigger: {
+ beforeAdd: 'drag:before:update',
+ afterAdd: 'drag:after:update'
+ },
+ onAfterAdd: function onAfterAdd() {
+ var senderSection = elementor.channels.data.request('dragging:parent:view');
- var validationTerms = {};
+ senderSection.isManualRemoving = true;
- if ( this.model.get( 'required' ) ) {
- validationTerms.required = true;
- }
+ model.destroy();
- if ( ! jQuery.isEmptyObject( validationTerms ) ) {
- this.addValidator( new Validator( {
- validationTerms: validationTerms
- } ) );
- }
+ senderSection.isManualRemoving = false;
+ }
+ });
},
- onRender: function() {
- ControlBaseView.prototype.onRender.apply( this, arguments );
+ onSortStart: function onSortStart(event, ui) {
+ if ('column' === this.options.elChildType) {
+ var uiData = ui.item.data('sortableItem'),
+ uiItems = uiData.items,
+ itemHeight = 0;
- this.applySavedValue();
+ uiItems.forEach(function (item) {
+ if (item.item[0] === ui.item[0]) {
+ itemHeight = item.height;
+ return false;
+ }
+ });
- if ( this.model.get( 'responsive' ) ) {
- this.renderResponsiveSwitchers();
+ ui.placeholder.height(itemHeight);
}
- this.triggerMethod( 'ready' );
-
- this.toggleControlVisibility();
-
- this.addTooltip();
+ this.startSort(event, ui);
},
- onBaseInputChange: function( event ) {
- clearTimeout( this.correctionTimeout );
-
- var input = event.currentTarget,
- value = this.getInputValue( input ),
- validators = this.validators.slice( 0 ),
- settingsValidators = this.elementSettingsModel.validators[ this.model.get( 'name' ) ];
+ onSortOver: function onSortOver(event) {
+ event.stopPropagation();
- if ( settingsValidators ) {
- validators = validators.concat( settingsValidators );
- }
+ var model = elementor.channels.data.request('dragging:model');
- if ( validators ) {
- var oldValue = this.getControlValue( input.dataset.setting );
+ jQuery(event.target).addClass('elementor-draggable-over').attr({
+ 'data-dragged-element': model.get('elType'),
+ 'data-dragged-is-inner': model.get('isInner')
+ });
- var isValidValue = validators.every( function( validator ) {
- return validator.isValid( value, oldValue );
- } );
+ this.$el.addClass('elementor-dragging-on-child');
+ },
- if ( ! isValidValue ) {
- this.correctionTimeout = setTimeout( this.setInputValue.bind( this, input, oldValue ), 1200 );
+ onSortOut: function onSortOut(event) {
+ event.stopPropagation();
- return;
- }
- }
+ jQuery(event.target).removeClass('elementor-draggable-over').removeAttr('data-dragged-element data-dragged-is-inner');
- this.updateElementModel( value, input );
+ this.$el.removeClass('elementor-dragging-on-child');
+ },
- this.triggerMethod( 'input:change', event );
+ onSortReceive: function onSortReceive(event, ui) {
+ this.receiveSort(event, ui);
},
- onResponsiveSwitchersClick: function( event ) {
- var device = jQuery( event.currentTarget ).data( 'device' );
+ onSortUpdate: function onSortUpdate(event, ui) {
+ event.stopPropagation();
- elementor.changeDeviceMode( device );
+ if (this.getChildViewContainer()[0] !== ui.item.parent()[0]) {
+ return;
+ }
- this.triggerMethod( 'responsive:switcher:click', device );
+ this.updateSort(ui);
},
- onSettingsExternalChange: function() {
- this.applySavedValue();
+ onAddChild: function onAddChild(view) {
+ view.$el.attr('data-model-cid', view.model.cid);
+ }
+});
- this.triggerMethod( 'after:external:change' );
- },
+module.exports = SortableBehavior;
- renderResponsiveSwitchers: function() {
- var templateHtml = Marionette.Renderer.render( '#tmpl-elementor-control-responsive-switchers', this.model.attributes );
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
- this.ui.controlTitle.after( templateHtml );
- },
+"use strict";
- onAfterExternalChange: function() {
- this.hideTooltip();
- this.applySavedValue();
- },
+/**
+ * Handles managing all events for whatever you plug it into. Priorities for hooks are based on lowest to highest in
+ * that, lowest priority hooks are fired first.
+ */
- addTooltip: function() {
- // Create tooltip on controls
- this.$( '.tooltip-target' ).tipsy( {
- gravity: function() {
- // `n` for down, `s` for up
- var gravity = jQuery( this ).data( 'tooltip-pos' );
+var EventManager = function EventManager() {
+ var slice = Array.prototype.slice,
+ MethodsAvailable;
- if ( undefined !== gravity ) {
- return gravity;
- } else {
- return 'n';
+ /**
+ * Contains the hooks that get registered with this EventManager. The array for storage utilizes a "flat"
+ * object literal such that looking up the hook utilizes the native object literal hash.
+ */
+ var STORAGE = {
+ actions: {},
+ filters: {}
+ };
+
+ /**
+ * Removes the specified hook by resetting the value of it.
+ *
+ * @param type Type of hook, either 'actions' or 'filters'
+ * @param hook The hook (namespace.identifier) to remove
+ *
+ * @private
+ */
+ function _removeHook(type, hook, callback, context) {
+ var handlers, handler, i;
+
+ if (!STORAGE[type][hook]) {
+ return;
+ }
+ if (!callback) {
+ STORAGE[type][hook] = [];
+ } else {
+ handlers = STORAGE[type][hook];
+ if (!context) {
+ for (i = handlers.length; i--;) {
+ if (handlers[i].callback === callback) {
+ handlers.splice(i, 1);
+ }
+ }
+ } else {
+ for (i = handlers.length; i--;) {
+ handler = handlers[i];
+ if (handler.callback === callback && handler.context === context) {
+ handlers.splice(i, 1);
+ }
}
- },
- title: function() {
- return this.getAttribute( 'data-tooltip' );
}
- } );
- },
+ }
+ }
- hideTooltip: function() {
- jQuery( '.tipsy' ).hide();
- },
+ /**
+ * Use an insert sort for keeping our hooks organized based on priority. This function is ridiculously faster
+ * than bubble sort, etc: http://jsperf.com/javascript-sort
+ *
+ * @param hooks The custom array containing all of the appropriate hooks to perform an insert sort on.
+ * @private
+ */
+ function _hookInsertSort(hooks) {
+ var tmpHook, j, prevHook;
+ for (var i = 1, len = hooks.length; i < len; i++) {
+ tmpHook = hooks[i];
+ j = i;
+ while ((prevHook = hooks[j - 1]) && prevHook.priority > tmpHook.priority) {
+ hooks[j] = hooks[j - 1];
+ --j;
+ }
+ hooks[j] = tmpHook;
+ }
- updateElementModel: function( value ) {
- this.setValue( value );
- }
-}, {
- // Static methods
- getStyleValue: function( placeholder, controlValue ) {
- return controlValue;
+ return hooks;
}
-} );
-module.exports = ControlBaseDataView;
+ /**
+ * Adds the hook to the appropriate storage container
+ *
+ * @param type 'actions' or 'filters'
+ * @param hook The hook (namespace.identifier) to add to our event manager
+ * @param callback The function that will be called when the hook is executed.
+ * @param priority The priority of this hook. Must be an integer.
+ * @param [context] A value to be used for this
+ * @private
+ */
+ function _addHook(type, hook, callback, priority, context) {
+ var hookObject = {
+ callback: callback,
+ priority: priority,
+ context: context
+ };
-},{"elementor-controls/base":40,"elementor-dynamic-tags/control-behavior":1,"elementor-validator/base":35}],38:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlBaseMultipleItemView;
+ // Utilize 'prop itself' : http://jsperf.com/hasownproperty-vs-in-vs-undefined/19
+ var hooks = STORAGE[type][hook];
+ if (hooks) {
+ // TEMP FIX BUG
+ var hasSameCallback = false;
+ jQuery.each(hooks, function () {
+ if (this.callback === callback) {
+ hasSameCallback = true;
+ return false;
+ }
+ });
-ControlBaseMultipleItemView = ControlBaseDataView.extend( {
+ if (hasSameCallback) {
+ return;
+ }
+ // END TEMP FIX BUG
- applySavedValue: function() {
- var values = this.getControlValue(),
- $inputs = this.$( '[data-setting]' ),
- self = this;
+ hooks.push(hookObject);
+ hooks = _hookInsertSort(hooks);
+ } else {
+ hooks = [hookObject];
+ }
- _.each( values, function( value, key ) {
- var $input = $inputs.filter( function() {
- return key === this.dataset.setting;
- } );
+ STORAGE[type][hook] = hooks;
+ }
- self.setInputValue( $input, value );
- } );
- },
+ /**
+ * Runs the specified hook. If it is an action, the value is not modified but if it is a filter, it is.
+ *
+ * @param type 'actions' or 'filters'
+ * @param hook The hook ( namespace.identifier ) to be ran.
+ * @param args Arguments to pass to the action/filter. If it's a filter, args is actually a single parameter.
+ * @private
+ */
+ function _runHook(type, hook, args) {
+ var handlers = STORAGE[type][hook],
+ i,
+ len;
+
+ if (!handlers) {
+ return 'filters' === type ? args[0] : false;
+ }
- getControlValue: function( key ) {
- var values = this.elementSettingsModel.get( this.model.get( 'name' ) );
+ len = handlers.length;
+ if ('filters' === type) {
+ for (i = 0; i < len; i++) {
+ args[0] = handlers[i].callback.apply(handlers[i].context, args);
+ }
+ } else {
+ for (i = 0; i < len; i++) {
+ handlers[i].callback.apply(handlers[i].context, args);
+ }
+ }
- if ( ! jQuery.isPlainObject( values ) ) {
- return {};
+ return 'filters' === type ? args[0] : true;
+ }
+
+ /**
+ * Adds an action to the event manager.
+ *
+ * @param action Must contain namespace.identifier
+ * @param callback Must be a valid callback function before this action is added
+ * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
+ * @param [context] Supply a value to be used for this
+ */
+ function addAction(action, callback, priority, context) {
+ if ('string' === typeof action && 'function' === typeof callback) {
+ priority = parseInt(priority || 10, 10);
+ _addHook('actions', action, callback, priority, context);
}
- if ( key ) {
- var value = values[ key ];
+ return MethodsAvailable;
+ }
- if ( undefined === value ) {
- value = '';
- }
+ /**
+ * Performs an action if it exists. You can pass as many arguments as you want to this function; the only rule is
+ * that the first argument must always be the action.
+ */
+ function doAction() /* action, arg1, arg2, ... */{
+ var args = slice.call(arguments);
+ var action = args.shift();
- return value;
+ if ('string' === typeof action) {
+ _runHook('actions', action, args);
}
- return elementor.helpers.cloneObject( values );
- },
+ return MethodsAvailable;
+ }
- setValue: function( key, value ) {
- var values = this.getControlValue();
+ /**
+ * Removes the specified action if it contains a namespace.identifier & exists.
+ *
+ * @param action The action to remove
+ * @param [callback] Callback function to remove
+ */
+ function removeAction(action, callback) {
+ if ('string' === typeof action) {
+ _removeHook('actions', action, callback);
+ }
- if ( 'object' === typeof key ) {
- _.each( key, function( internalValue, internalKey ) {
- values[ internalKey ] = internalValue;
- } );
- } else {
- values[ key ] = value;
+ return MethodsAvailable;
+ }
+
+ /**
+ * Adds a filter to the event manager.
+ *
+ * @param filter Must contain namespace.identifier
+ * @param callback Must be a valid callback function before this action is added
+ * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
+ * @param [context] Supply a value to be used for this
+ */
+ function addFilter(filter, callback, priority, context) {
+ if ('string' === typeof filter && 'function' === typeof callback) {
+ priority = parseInt(priority || 10, 10);
+ _addHook('filters', filter, callback, priority, context);
}
- this.setSettingsModel( values );
- },
+ return MethodsAvailable;
+ }
- updateElementModel: function( value, input ) {
- var key = input.dataset.setting;
+ /**
+ * Performs a filter if it exists. You should only ever pass 1 argument to be filtered. The only rule is that
+ * the first argument must always be the filter.
+ */
+ function applyFilters() /* filter, filtered arg, arg2, ... */{
+ var args = slice.call(arguments);
+ var filter = args.shift();
+
+ if ('string' === typeof filter) {
+ return _runHook('filters', filter, args);
+ }
- this.setValue( key, value );
+ return MethodsAvailable;
}
-}, {
- // Static methods
- getStyleValue: function( placeholder, controlValue ) {
- if ( ! _.isObject( controlValue ) ) {
- return ''; // invalid
+
+ /**
+ * Removes the specified filter if it contains a namespace.identifier & exists.
+ *
+ * @param filter The action to remove
+ * @param [callback] Callback function to remove
+ */
+ function removeFilter(filter, callback) {
+ if ('string' === typeof filter) {
+ _removeHook('filters', filter, callback);
}
- return controlValue[ placeholder ];
+ return MethodsAvailable;
}
-} );
-module.exports = ControlBaseMultipleItemView;
+ /**
+ * Maintain a reference to the object scope so our public methods never get confusing.
+ */
+ MethodsAvailable = {
+ removeFilter: removeFilter,
+ applyFilters: applyFilters,
+ addFilter: addFilter,
+ removeAction: removeAction,
+ doAction: doAction,
+ addAction: addAction
+ };
-},{"elementor-controls/base-data":37}],39:[function(require,module,exports){
-var ControlBaseMultipleItemView = require( 'elementor-controls/base-multiple' ),
- ControlBaseUnitsItemView;
+ // return all of the publicly available methods
+ return MethodsAvailable;
+};
-ControlBaseUnitsItemView = ControlBaseMultipleItemView.extend( {
+module.exports = EventManager;
- getCurrentRange: function() {
- return this.getUnitRange( this.getControlValue( 'unit' ) );
- },
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
- getUnitRange: function( unit ) {
- var ranges = this.model.get( 'range' );
+"use strict";
- if ( ! ranges || ! ranges[ unit ] ) {
- return false;
- }
- return ranges[ unit ];
- }
-} );
+var ViewModule = __webpack_require__(1),
+ SettingsModel = __webpack_require__(3),
+ ControlsCSSParser = __webpack_require__(13);
-module.exports = ControlBaseUnitsItemView;
+module.exports = ViewModule.extend({
+ model: null,
-},{"elementor-controls/base-multiple":38}],40:[function(require,module,exports){
-var ControlBaseView;
+ hasChange: false,
-ControlBaseView = Marionette.CompositeView.extend( {
- ui: function() {
- return {
- controlTitle: '.elementor-control-title'
- };
+ changeCallbacks: {},
+
+ addChangeCallback: function addChangeCallback(attribute, callback) {
+ this.changeCallbacks[attribute] = callback;
},
- behaviors: function() {
- var behaviors = {};
+ bindEvents: function bindEvents() {
+ elementor.on('preview:loaded', this.onElementorPreviewLoaded);
- return elementor.hooks.applyFilters( 'controls/base/behaviors', behaviors, this );
+ this.model.on('change', this.onModelChange);
},
- getBehavior: function( name ) {
- return this._behaviors[ Object.keys( this.behaviors() ).indexOf( name ) ];
+ addPanelPage: function addPanelPage() {
+ var name = this.getSettings('name');
+
+ elementor.getPanelView().addPage(name + '_settings', {
+ view: elementor.settings.panelPages[name] || elementor.settings.panelPages.base,
+ title: this.getSettings('panelPage.title'),
+ options: {
+ model: this.model,
+ controls: this.model.controls,
+ name: name
+ }
+ });
},
- className: function() {
- // TODO: Any better classes for that?
- var classes = 'elementor-control elementor-control-' + this.model.get( 'name' ) + ' elementor-control-type-' + this.model.get( 'type' ),
- modelClasses = this.model.get( 'classes' ),
- responsive = this.model.get( 'responsive' );
+ updateStylesheet: function updateStylesheet(keepOldEntries) {
+ var controlsCSS = this.getControlsCSS();
- if ( ! _.isEmpty( modelClasses ) ) {
- classes += ' ' + modelClasses;
+ if (!keepOldEntries) {
+ controlsCSS.stylesheet.empty();
}
- if ( ! _.isEmpty( responsive ) ) {
- classes += ' elementor-control-responsive-' + responsive.max;
- }
+ controlsCSS.addStyleRules(this.model.getStyleControls(), this.model.attributes, this.model.controls, [/{{WRAPPER}}/g], [this.getSettings('cssWrapperSelector')]);
- return classes;
+ controlsCSS.addStyleToDocument();
},
- templateHelpers: function() {
- var controlData = {
- _cid: this.model.cid
- };
+ initModel: function initModel() {
+ this.model = new SettingsModel(this.getSettings('settings'), {
+ controls: this.getSettings('controls')
+ });
+ },
- return {
- data: _.extend( {}, this.model.toJSON(), controlData )
+ initControlsCSSParser: function initControlsCSSParser() {
+ var controlsCSS;
+
+ this.getControlsCSS = function () {
+ if (!controlsCSS) {
+ controlsCSS = new ControlsCSSParser({
+ id: this.getSettings('name'),
+ settingsModel: this.model
+ });
+
+ /*
+ * @deprecated 2.1.0
+ */
+ this.controlsCSS = controlsCSS;
+ }
+
+ return controlsCSS;
};
},
- getTemplate: function() {
- return Marionette.TemplateCache.get( '#tmpl-elementor-control-' + this.model.get( 'type' ) + '-content' );
+ getDataToSave: function getDataToSave(data) {
+ return data;
},
- initialize: function( options ) {
- this.elementSettingsModel = options.elementSettingsModel;
+ save: function save(callback) {
+ var self = this;
+
+ if (!self.hasChange) {
+ return;
+ }
- var controlType = this.model.get( 'type' ),
- controlSettings = jQuery.extend( true, {}, elementor.config.controls[ controlType ], this.model.attributes );
+ var settings = this.model.toJSON({ removeDefault: true }),
+ data = this.getDataToSave({
+ data: settings
+ });
- this.model.set( controlSettings );
+ NProgress.start();
- this.listenTo( this.elementSettingsModel, 'change', this.toggleControlVisibility );
- },
+ elementor.ajax.addRequest('save_' + this.getSettings('name') + '_settings', {
+ data: data,
+ success: function success() {
+ NProgress.done();
- toggleControlVisibility: function() {
- var isVisible = elementor.helpers.isActiveControl( this.model, this.elementSettingsModel.attributes );
+ self.setSettings('settings', settings);
- this.$el.toggleClass( 'elementor-hidden-control', ! isVisible );
+ self.hasChange = false;
- elementor.channels.data.trigger( 'scrollbar:update' );
+ if (callback) {
+ callback.apply(self, arguments);
+ }
+ },
+ error: function error() {
+ alert('An error occurred');
+ }
+ });
},
- onRender: function() {
- var layoutType = this.model.get( 'label_block' ) ? 'block' : 'inline',
- showLabel = this.model.get( 'show_label' ),
- elClasses = 'elementor-label-' + layoutType;
+ addPanelMenuItem: function addPanelMenuItem() {
+ var menuSettings = this.getSettings('panelPage.menu');
- elClasses += ' elementor-control-separator-' + this.model.get( 'separator' );
-
- if ( ! showLabel ) {
- elClasses += ' elementor-control-hidden-label';
+ if (!menuSettings) {
+ return;
}
- this.$el.addClass( elClasses );
+ var menuItemOptions = {
+ icon: menuSettings.icon,
+ title: this.getSettings('panelPage.title'),
+ type: 'page',
+ pageName: this.getSettings('name') + '_settings'
+ };
- this.toggleControlVisibility();
- }
-} );
+ elementor.modules.layouts.panel.pages.menu.Menu.addItem(menuItemOptions, 'settings', menuSettings.beforeItem);
+ },
-module.exports = ControlBaseView;
+ onInit: function onInit() {
+ this.initModel();
-},{}],41:[function(require,module,exports){
-var ControlMultipleBaseItemView = require( 'elementor-controls/base-multiple' ),
- ControlBoxShadowItemView;
+ this.initControlsCSSParser();
-ControlBoxShadowItemView = ControlMultipleBaseItemView.extend( {
- ui: function() {
- var ui = ControlMultipleBaseItemView.prototype.ui.apply( this, arguments );
+ this.addPanelMenuItem();
- ui.sliders = '.elementor-slider';
- ui.colors = '.elementor-shadow-color-picker';
+ this.debounceSave = _.debounce(this.save, 3000);
- return ui;
+ ViewModule.prototype.onInit.apply(this, arguments);
},
- events: function() {
- return _.extend( ControlMultipleBaseItemView.prototype.events.apply( this, arguments ), {
- 'slide @ui.sliders': 'onSlideChange'
- } );
- },
+ onModelChange: function onModelChange(model) {
+ var self = this;
- initSliders: function() {
- var value = this.getControlValue();
+ self.hasChange = true;
- this.ui.sliders.each( function() {
- var $slider = jQuery( this ),
- $input = $slider.next( '.elementor-slider-input' ).find( 'input' );
+ this.getControlsCSS().stylesheet.empty();
- $slider.slider( {
- value: value[ this.dataset.input ],
- min: +$input.attr( 'min' ),
- max: +$input.attr( 'max' )
- } );
- } );
- },
-
- initColors: function() {
- var self = this;
-
- elementor.helpers.wpColorPicker( this.ui.colors, {
- change: function() {
- var $this = jQuery( this ),
- type = $this.data( 'setting' );
-
- self.setValue( type, $this.wpColorPicker( 'color' ) );
- },
-
- clear: function() {
- self.setValue( this.dataset.setting, '' );
+ _.each(model.changed, function (value, key) {
+ if (self.changeCallbacks[key]) {
+ self.changeCallbacks[key].call(self, value);
}
- } );
- },
+ });
- onInputChange: function( event ) {
- var type = event.currentTarget.dataset.setting,
- $slider = this.ui.sliders.filter( '[data-input="' + type + '"]' );
+ self.updateStylesheet(true);
- $slider.slider( 'value', this.getControlValue( type ) );
+ self.debounceSave();
},
- onReady: function() {
- this.initSliders();
- this.initColors();
- },
+ onElementorPreviewLoaded: function onElementorPreviewLoaded() {
+ this.updateStylesheet();
- onSlideChange: function( event, ui ) {
- var type = event.currentTarget.dataset.input,
- $input = this.ui.input.filter( '[data-setting="' + type + '"]' );
+ this.addPanelPage();
- $input.val( ui.value );
- this.setValue( type, ui.value );
- },
+ if (!elementor.userCan('design')) {
+ elementor.panel.currentView.setPage('page_settings');
+ }
+ }
+});
- onBeforeDestroy: function() {
- this.ui.colors.each( function() {
- var $color = jQuery( this );
+/***/ }),
+/* 22 */,
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( $color.wpColorPicker( 'instance' ) ) {
- $color.wpColorPicker( 'close' );
- }
- } );
+"use strict";
- this.$el.remove();
- }
-} );
-module.exports = ControlBoxShadowItemView;
+module.exports = Marionette.Region.extend({
-},{"elementor-controls/base-multiple":38}],42:[function(require,module,exports){
-var ControlBaseView = require( 'elementor-controls/base' );
+ storage: null,
-module.exports = ControlBaseView.extend( {
+ storageSizeKeys: null,
- ui: function() {
- var ui = ControlBaseView.prototype.ui.apply( this, arguments );
+ constructor: function constructor() {
+ Marionette.Region.prototype.constructor.apply(this, arguments);
- ui.button = 'button';
+ var savedStorage = elementor.getStorage(this.getStorageKey());
- return ui;
- },
+ this.storage = savedStorage ? savedStorage : this.getDefaultStorage();
- events: {
- 'click @ui.button': 'onButtonClick'
+ this.storageSizeKeys = Object.keys(this.storage.size);
},
- onButtonClick: function() {
- var eventName = this.model.get( 'event' );
-
- elementor.channels.editor.trigger( eventName, this );
- }
-} );
-
-},{"elementor-controls/base":40}],43:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlChooseItemView;
+ saveStorage: function saveStorage(key, value) {
+ this.storage[key] = value;
-ControlChooseItemView = ControlBaseDataView.extend( {
- ui: function() {
- var ui = ControlBaseDataView.prototype.ui.apply( this, arguments );
+ elementor.setStorage(this.getStorageKey(), this.storage);
+ },
- ui.inputs = '[type="radio"]';
+ saveSize: function saveSize() {
+ this.saveStorage('size', elementor.helpers.getElementInlineStyle(this.$el, this.storageSizeKeys));
+ }
+});
- return ui;
- },
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
- events: function() {
- return _.extend( ControlBaseDataView.prototype.events.apply( this, arguments ), {
- 'mousedown label': 'onMouseDownLabel',
- 'click @ui.inputs': 'onClickInput',
- 'change @ui.inputs': 'onBaseInputChange'
- } );
- },
+"use strict";
- onMouseDownLabel: function( event ) {
- var $clickedLabel = this.$( event.currentTarget ),
- $selectedInput = this.$( '#' + $clickedLabel.attr( 'for' ) );
- $selectedInput.data( 'checked', $selectedInput.prop( 'checked' ) );
- },
+(function ($) {
- onClickInput: function( event ) {
- if ( ! this.model.get( 'toggle' ) ) {
- return;
- }
+ var Stylesheet = function Stylesheet() {
+ var self = this,
+ rules = {},
+ rawCSS = {},
+ devices = {};
- var $selectedInput = this.$( event.currentTarget );
+ var getDeviceMaxValue = function getDeviceMaxValue(deviceName) {
+ var deviceNames = Object.keys(devices),
+ deviceNameIndex = deviceNames.indexOf(deviceName),
+ nextIndex = deviceNameIndex + 1;
- if ( $selectedInput.data( 'checked' ) ) {
- $selectedInput.prop( 'checked', false ).trigger( 'change' );
- }
- },
+ if (nextIndex >= deviceNames.length) {
+ throw new RangeError('Max value for this device is out of range.');
+ }
- onRender: function() {
- ControlBaseDataView.prototype.onRender.apply( this, arguments );
+ return devices[deviceNames[nextIndex]] - 1;
+ };
- var currentValue = this.getControlValue();
+ var queryToHash = function queryToHash(query) {
+ var hash = [];
- if ( currentValue ) {
- this.ui.inputs.filter( '[value="' + currentValue + '"]' ).prop( 'checked', true );
- }
- }
-} );
+ $.each(query, function (endPoint) {
+ hash.push(endPoint + '_' + this);
+ });
-module.exports = ControlChooseItemView;
+ return hash.join('-');
+ };
-},{"elementor-controls/base-data":37}],44:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlCodeEditorItemView;
+ var hashToQuery = function hashToQuery(hash) {
+ var query = {};
-ControlCodeEditorItemView = ControlBaseDataView.extend( {
+ hash = hash.split('-').filter(String);
- ui: function() {
- var ui = ControlBaseDataView.prototype.ui.apply( this, arguments );
+ hash.forEach(function (singleQuery) {
+ var queryParts = singleQuery.split('_'),
+ endPoint = queryParts[0],
+ deviceName = queryParts[1];
- ui.editor = '.elementor-code-editor';
+ query[endPoint] = 'max' === endPoint ? getDeviceMaxValue(deviceName) : devices[deviceName];
+ });
- return ui;
- },
+ return query;
+ };
- onReady: function() {
- var self = this;
+ var addQueryHash = function addQueryHash(queryHash) {
+ rules[queryHash] = {};
- if ( 'undefined' === typeof ace ) {
- return;
- }
+ var hashes = Object.keys(rules);
- var langTools = ace.require( 'ace/ext/language_tools' );
+ if (hashes.length < 2) {
+ return;
+ }
- self.editor = ace.edit( this.ui.editor[0] );
+ // Sort the devices from narrowest to widest
+ hashes.sort(function (a, b) {
+ if ('all' === a) {
+ return -1;
+ }
- jQuery( self.editor.container ).addClass( 'elementor-input-style elementor-code-editor' );
+ if ('all' === b) {
+ return 1;
+ }
- self.editor.setOptions( {
- mode: 'ace/mode/' + self.model.attributes.language,
- minLines: 10,
- maxLines: Infinity,
- showGutter: true,
- useWorker: true,
- enableBasicAutocompletion: true,
- enableLiveAutocompletion: true
- } );
+ var aQuery = hashToQuery(a),
+ bQuery = hashToQuery(b);
- self.editor.getSession().setUseWrapMode( true );
+ return bQuery.max - aQuery.max;
+ });
- elementor.panel.$el.on( 'resize.aceEditor', self.onResize.bind( this ) );
+ var sortedRules = {};
- if ( 'css' === self.model.attributes.language ) {
- var selectorCompleter = {
- getCompletions: function( editor, session, pos, prefix, callback ) {
- var list = [],
- token = session.getTokenAt( pos.row, pos.column );
+ hashes.forEach(function (deviceName) {
+ sortedRules[deviceName] = rules[deviceName];
+ });
- if ( 0 < prefix.length && 'selector'.match( prefix ) && 'constant' === token.type ) {
- list = [ {
- name: 'selector',
- value: 'selector',
- score: 1,
- meta: 'Elementor'
- } ];
- }
+ rules = sortedRules;
+ };
- callback( null, list );
- }
- };
+ var getQueryHashStyleFormat = function getQueryHashStyleFormat(queryHash) {
+ var query = hashToQuery(queryHash),
+ styleFormat = [];
- langTools.addCompleter( selectorCompleter );
- }
+ $.each(query, function (endPoint) {
+ styleFormat.push('(' + endPoint + '-width:' + this + 'px)');
+ });
- self.editor.setValue( self.getControlValue(), -1 ); // -1 = move cursor to the start
+ return '@media' + styleFormat.join(' and ');
+ };
- self.editor.on( 'change', function() {
- self.setValue( self.editor.getValue() );
- } );
+ this.addDevice = function (deviceName, deviceValue) {
+ devices[deviceName] = deviceValue;
- if ( 'html' === self.model.attributes.language ) {
- // Remove the `doctype` annotation
- var session = self.editor.getSession();
+ var deviceNames = Object.keys(devices);
- session.on( 'changeAnnotation', function() {
- var annotations = session.getAnnotations() || [],
- annotationsLength = annotations.length,
- index = annotations.length;
+ if (deviceNames.length < 2) {
+ return self;
+ }
- while ( index-- ) {
- if ( /doctype first\. Expected/.test( annotations[ index ].text ) ) {
- annotations.splice( index, 1 );
- }
- }
+ // Sort the devices from narrowest to widest
+ deviceNames.sort(function (a, b) {
+ return devices[a] - devices[b];
+ });
- if ( annotationsLength > annotations.length ) {
- session.setAnnotations( annotations );
- }
- } );
- }
- },
+ var sortedDevices = {};
- onResize: function() {
- this.editor.resize();
- },
+ deviceNames.forEach(function (deviceName) {
+ sortedDevices[deviceName] = devices[deviceName];
+ });
- onDestroy: function() {
- elementor.panel.$el.off( 'resize.aceEditor' );
- }
-} );
+ devices = sortedDevices;
-module.exports = ControlCodeEditorItemView;
+ return self;
+ };
-},{"elementor-controls/base-data":37}],45:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlColorItemView;
+ this.addRawCSS = function (key, css) {
+ rawCSS[key] = css;
+ };
-ControlColorItemView = ControlBaseDataView.extend( {
- onReady: function() {
- var self = this;
+ this.addRules = function (selector, styleRules, query) {
+ var queryHash = 'all';
- elementor.helpers.wpColorPicker( self.ui.input, {
- change: function() {
- self.ui.input.val( self.ui.input.wpColorPicker( 'color' ) ).trigger( 'input' );
- },
- clear: function() {
- self.setValue( '' );
+ if (!_.isEmpty(query)) {
+ queryHash = queryToHash(query);
}
- } );
- },
- onBeforeDestroy: function() {
- if ( this.ui.input.wpColorPicker( 'instance' ) ) {
- this.ui.input.wpColorPicker( 'close' );
- }
+ if (!rules[queryHash]) {
+ addQueryHash(queryHash);
+ }
- this.$el.remove();
- }
-} );
+ if (!styleRules) {
+ var parsedRules = selector.match(/[^{]+\{[^}]+}/g);
-module.exports = ControlColorItemView;
+ $.each(parsedRules, function () {
+ var parsedRule = this.match(/([^{]+)\{([^}]+)}/);
-},{"elementor-controls/base-data":37}],46:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlDateTimePickerItemView;
+ if (parsedRule) {
+ self.addRules(parsedRule[1].trim(), parsedRule[2].trim(), query);
+ }
+ });
-ControlDateTimePickerItemView = ControlBaseDataView.extend( {
+ return;
+ }
- onReady: function() {
- var self = this;
+ if (!rules[queryHash][selector]) {
+ rules[queryHash][selector] = {};
+ }
- var options = _.extend( {
- onClose: function() {
- self.saveValue();
- },
- enableTime: true,
- minuteIncrement: 1
- }, this.model.get( 'picker_options' ) );
+ if ('string' === typeof styleRules) {
+ styleRules = styleRules.split(';').filter(String);
- this.ui.input.flatpickr( options );
- },
+ var orderedRules = {};
- saveValue: function() {
- this.setValue( this.ui.input.val() );
- },
+ try {
+ $.each(styleRules, function () {
+ var property = this.split(/:(.*)?/);
- onBeforeDestroy: function() {
- this.saveValue();
- this.ui.input.flatpickr().destroy();
- }
-} );
+ orderedRules[property[0].trim()] = property[1].trim().replace(';', '');
+ });
+ } catch (error) {
+ // At least one of the properties is incorrect
+ return;
+ }
-module.exports = ControlDateTimePickerItemView;
+ styleRules = orderedRules;
+ }
-},{"elementor-controls/base-data":37}],47:[function(require,module,exports){
-var ControlBaseUnitsItemView = require( 'elementor-controls/base-units' ),
- ControlDimensionsItemView;
+ $.extend(rules[queryHash][selector], styleRules);
-ControlDimensionsItemView = ControlBaseUnitsItemView.extend( {
- ui: function() {
- var ui = ControlBaseUnitsItemView.prototype.ui.apply( this, arguments );
+ return self;
+ };
- ui.controls = '.elementor-control-dimension > input:enabled';
- ui.link = 'button.elementor-link-dimensions';
+ this.getRules = function () {
+ return rules;
+ };
- return ui;
- },
+ this.empty = function () {
+ rules = {};
+ rawCSS = {};
+ };
- events: function() {
- return _.extend( ControlBaseUnitsItemView.prototype.events.apply( this, arguments ), {
- 'click @ui.link': 'onLinkDimensionsClicked'
- } );
- },
+ this.toString = function () {
+ var styleText = '';
- defaultDimensionValue: 0,
+ $.each(rules, function (queryHash) {
+ var deviceText = Stylesheet.parseRules(this);
- initialize: function() {
- ControlBaseUnitsItemView.prototype.initialize.apply( this, arguments );
+ if ('all' !== queryHash) {
+ deviceText = getQueryHashStyleFormat(queryHash) + '{' + deviceText + '}';
+ }
- // TODO: Need to be in helpers, and not in variable
- this.model.set( 'allowed_dimensions', this.filterDimensions( this.model.get( 'allowed_dimensions' ) ) );
- },
+ styleText += deviceText;
+ });
- getPossibleDimensions: function() {
- return [
- 'top',
- 'right',
- 'bottom',
- 'left'
- ];
- },
+ $.each(rawCSS, function () {
+ styleText += this;
+ });
- filterDimensions: function( filter ) {
- filter = filter || 'all';
+ return styleText;
+ };
+ };
- var dimensions = this.getPossibleDimensions();
+ Stylesheet.parseRules = function (rules) {
+ var parsedRules = '';
- if ( 'all' === filter ) {
- return dimensions;
- }
+ $.each(rules, function (selector) {
+ var selectorContent = Stylesheet.parseProperties(this);
- if ( ! _.isArray( filter ) ) {
- if ( 'horizontal' === filter ) {
- filter = [ 'right', 'left' ];
- } else if ( 'vertical' === filter ) {
- filter = [ 'top', 'bottom' ];
+ if (selectorContent) {
+ parsedRules += selector + '{' + selectorContent + '}';
}
- }
-
- return filter;
- },
+ });
- onReady: function() {
- var self = this,
- currentValue = self.getControlValue();
+ return parsedRules;
+ };
- if ( ! self.isLinkedDimensions() ) {
- self.ui.link.addClass( 'unlinked' );
+ Stylesheet.parseProperties = function (properties) {
+ var parsedProperties = '';
- self.ui.controls.each( function( index, element ) {
- var value = currentValue[ element.dataset.setting ];
+ $.each(properties, function (propertyKey) {
+ if (this) {
+ parsedProperties += propertyKey + ':' + this + ';';
+ }
+ });
- if ( _.isEmpty( value ) ) {
- value = self.defaultDimensionValue;
- }
+ return parsedProperties;
+ };
- self.$( element ).val( value );
- } );
- }
+ module.exports = Stylesheet;
+})(jQuery);
- self.fillEmptyDimensions();
- },
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
- updateDimensionsValue: function() {
- var currentValue = {},
- dimensions = this.getPossibleDimensions(),
- $controls = this.ui.controls,
- defaultDimensionValue = this.defaultDimensionValue;
+"use strict";
- dimensions.forEach( function( dimension ) {
- var $element = $controls.filter( '[data-setting="' + dimension + '"]' );
- currentValue[ dimension ] = $element.length ? $element.val() : defaultDimensionValue;
- } );
+var InsertTemplateHandler;
- this.setValue( currentValue );
+InsertTemplateHandler = Marionette.Behavior.extend({
+ ui: {
+ insertButton: '.elementor-template-library-template-insert'
},
- fillEmptyDimensions: function() {
- var dimensions = this.getPossibleDimensions(),
- allowedDimensions = this.model.get( 'allowed_dimensions' ),
- $controls = this.ui.controls,
- defaultDimensionValue = this.defaultDimensionValue;
+ events: {
+ 'click @ui.insertButton': 'onInsertButtonClick'
+ },
- if ( this.isLinkedDimensions() ) {
+ onInsertButtonClick: function onInsertButtonClick() {
+ if (this.view.model.get('hasPageSettings')) {
+ InsertTemplateHandler.showImportDialog(this.view.model);
return;
}
- dimensions.forEach( function( dimension ) {
- var $element = $controls.filter( '[data-setting="' + dimension + '"]' ),
- isAllowedDimension = -1 !== _.indexOf( allowedDimensions, dimension );
-
- if ( isAllowedDimension && $element.length && _.isEmpty( $element.val() ) ) {
- $element.val( defaultDimensionValue );
- }
+ elementor.templates.importTemplate(this.view.model);
+ }
+}, {
+ dialog: null,
- } );
- },
+ showImportDialog: function showImportDialog(model) {
+ var dialog = InsertTemplateHandler.getDialog();
- updateDimensions: function() {
- this.fillEmptyDimensions();
- this.updateDimensionsValue();
- },
+ dialog.onConfirm = function () {
+ elementor.templates.importTemplate(model, { withPageSettings: true });
+ };
- resetDimensions: function() {
- this.ui.controls.val( '' );
+ dialog.onCancel = function () {
+ elementor.templates.importTemplate(model);
+ };
- this.updateDimensionsValue();
+ dialog.show();
},
- onInputChange: function( event ) {
- var inputSetting = event.target.dataset.setting;
-
- if ( 'unit' === inputSetting ) {
- this.resetDimensions();
- }
+ initDialog: function initDialog() {
+ InsertTemplateHandler.dialog = elementor.dialogsManager.createWidget('confirm', {
+ id: 'elementor-insert-template-settings-dialog',
+ headerMessage: elementor.translate('import_template_dialog_header'),
+ message: elementor.translate('import_template_dialog_message') + '<br>' + elementor.translate('import_template_dialog_message_attention'),
+ strings: {
+ confirm: elementor.translate('yes'),
+ cancel: elementor.translate('no')
+ }
+ });
+ },
- if ( ! _.contains( this.getPossibleDimensions(), inputSetting ) ) {
- return;
+ getDialog: function getDialog() {
+ if (!InsertTemplateHandler.dialog) {
+ InsertTemplateHandler.initDialog();
}
- if ( this.isLinkedDimensions() ) {
- var $thisControl = this.$( event.target );
+ return InsertTemplateHandler.dialog;
+ }
+});
- this.ui.controls.val( $thisControl.val() );
- }
+module.exports = InsertTemplateHandler;
- this.updateDimensions();
- },
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
- onLinkDimensionsClicked: function( event ) {
- event.preventDefault();
- event.stopPropagation();
+"use strict";
- this.ui.link.toggleClass( 'unlinked' );
- this.setValue( 'isLinked', ! this.ui.link.hasClass( 'unlinked' ) );
+var TemplateLibraryInsertTemplateBehavior = __webpack_require__(25),
+ TemplateLibraryTemplateView;
- if ( this.isLinkedDimensions() ) {
- // Set all controls value from the first control.
- this.ui.controls.val( this.ui.controls.eq( 0 ).val() );
- }
+TemplateLibraryTemplateView = Marionette.ItemView.extend({
+ className: function className() {
+ var classes = 'elementor-template-library-template',
+ source = this.model.get('source');
- this.updateDimensions();
- },
+ classes += ' elementor-template-library-template-' + source;
- isLinkedDimensions: function() {
- return this.getControlValue( 'isLinked' );
- }
-} );
+ if ('remote' === source) {
+ classes += ' elementor-template-library-template-' + this.model.get('type');
+ }
-module.exports = ControlDimensionsItemView;
+ if (this.model.get('isPro')) {
+ classes += ' elementor-template-library-pro-template';
+ }
-},{"elementor-controls/base-units":39}],48:[function(require,module,exports){
-var ControlSelect2View = require( 'elementor-controls/select2' );
+ return classes;
+ },
-module.exports = ControlSelect2View.extend( {
- getSelect2Options: function() {
+ ui: function ui() {
return {
- dir: elementor.config.is_rtl ? 'rtl' : 'ltr'
+ previewButton: '.elementor-template-library-template-preview'
};
},
- templateHelpers: function() {
- var helpers = ControlSelect2View.prototype.templateHelpers.apply( this, arguments ),
- fonts = this.model.get( 'options' );
-
- helpers.getFontsByGroups = function( groups ) {
- var filteredFonts = {};
+ events: function events() {
+ return {
+ 'click @ui.previewButton': 'onPreviewButtonClick'
+ };
+ },
- _.each( fonts, function( fontType, fontName ) {
- if ( _.isArray( groups ) && _.contains( groups, fontType ) || fontType === groups ) {
- filteredFonts[ fontName ] = fontName;
- }
- } );
-
- return filteredFonts;
- };
-
- return helpers;
+ behaviors: {
+ insertTemplate: {
+ behaviorClass: TemplateLibraryInsertTemplateBehavior
+ }
}
-} );
-
-},{"elementor-controls/select2":59}],49:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlMediaItemView;
+});
-ControlMediaItemView = ControlBaseDataView.extend( {
- ui: function() {
- var ui = ControlBaseDataView.prototype.ui.apply( this, arguments );
+module.exports = TemplateLibraryTemplateView;
- ui.addImages = '.elementor-control-gallery-add';
- ui.clearGallery = '.elementor-control-gallery-clear';
- ui.galleryThumbnails = '.elementor-control-gallery-thumbnails';
- ui.status = '.elementor-control-gallery-status-title';
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
- return ui;
- },
+"use strict";
- events: function() {
- return _.extend( ControlBaseDataView.prototype.events.apply( this, arguments ), {
- 'click @ui.addImages': 'onAddImagesClick',
- 'click @ui.clearGallery': 'onClearGalleryClick',
- 'click @ui.galleryThumbnails': 'onGalleryThumbnailsClick'
- } );
- },
- onReady: function() {
- this.initRemoveDialog();
+module.exports = Backbone.Model.extend({
+ defaults: {
+ id: 0,
+ type: '',
+ elementType: '',
+ status: 'not_applied',
+ title: '',
+ subTitle: '',
+ action: '',
+ history: {}
},
- applySavedValue: function() {
- var images = this.getControlValue(),
- imagesCount = images.length,
- hasImages = !! imagesCount;
-
- this.$el
- .toggleClass( 'elementor-gallery-has-images', hasImages )
- .toggleClass( 'elementor-gallery-empty', ! hasImages );
-
- var $galleryThumbnails = this.ui.galleryThumbnails;
-
- $galleryThumbnails.empty();
+ initialize: function initialize() {
+ this.set('items', new Backbone.Collection());
+ }
+});
- this.ui.status.text( elementor.translate( hasImages ? 'gallery_images_selected' : 'gallery_no_images_selected', [ imagesCount ] ) );
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( ! hasImages ) {
- return;
- }
+"use strict";
- this.getControlValue().forEach( function( image ) {
- var $thumbnail = jQuery( '<div>', { 'class': 'elementor-control-gallery-thumbnail' } );
- $thumbnail.css( 'background-image', 'url(' + image.url + ')' );
+module.exports = Marionette.CompositeView.extend({
- $galleryThumbnails.append( $thumbnail );
- } );
+ templateHelpers: function templateHelpers() {
+ return {
+ view: this
+ };
},
- hasImages: function() {
- return !! this.getControlValue().length;
+ getBehavior: function getBehavior(name) {
+ return this._behaviors[Object.keys(this.behaviors()).indexOf(name)];
},
- openFrame: function( action ) {
- this.initFrame( action );
+ initialize: function initialize() {
+ this.collection = this.model.get('elements');
+ },
- this.frame.open();
+ addChildModel: function addChildModel(model, options) {
+ return this.collection.add(model, options, true);
},
- initFrame: function( action ) {
- var frameStates = {
- create: 'gallery',
- add: 'gallery-library',
- edit: 'gallery-edit'
- };
+ addChildElement: function addChildElement(data, options) {
+ if (this.isCollectionFilled()) {
+ return;
+ }
- var options = {
- frame: 'post',
- multiple: true,
- state: frameStates[ action ],
- button: {
- text: elementor.translate( 'insert_media' )
- }
- };
+ options = jQuery.extend({
+ trigger: false,
+ edit: true,
+ onBeforeAdd: null,
+ onAfterAdd: null
+ }, options);
- if ( this.hasImages() ) {
- options.selection = this.fetchSelection();
- }
+ var childTypes = this.getChildType(),
+ newItem,
+ elType;
- this.frame = wp.media( options );
+ if (data instanceof Backbone.Model) {
+ newItem = data;
- // When a file is selected, run a callback.
- this.frame.on( {
- 'update': this.select,
- 'menu:render:default': this.menuRender,
- 'content:render:browse': this.gallerySettings
- }, this );
- },
+ elType = newItem.get('elType');
+ } else {
+ newItem = {
+ id: elementor.helpers.getUniqueID(),
+ elType: childTypes[0],
+ settings: {},
+ elements: []
+ };
- menuRender: function( view ) {
- view.unset( 'insert' );
- view.unset( 'featured-image' );
- },
+ if (data) {
+ jQuery.extend(newItem, data);
+ }
- gallerySettings: function( browser ) {
- browser.sidebar.on( 'ready', function() {
- browser.sidebar.unset( 'gallery' );
- } );
- },
+ elType = newItem.elType;
+ }
- fetchSelection: function() {
- var attachments = wp.media.query( {
- orderby: 'post__in',
- order: 'ASC',
- type: 'image',
- perPage: -1,
- post__in: _.pluck( this.getControlValue(), 'id' )
- } );
+ if (-1 === childTypes.indexOf(elType)) {
+ return this.children.last().addChildElement(newItem, options);
+ }
- return new wp.media.model.Selection( attachments.models, {
- props: attachments.props.toJSON(),
- multiple: true
- } );
- },
+ if (options.clone) {
+ newItem = this.cloneItem(newItem);
+ }
- /**
- * Callback handler for when an attachment is selected in the media modal.
- * Gets the selected image information, and sets it within the control.
- */
- select: function( selection ) {
- var images = [];
+ if (options.trigger) {
+ elementor.channels.data.trigger(options.trigger.beforeAdd, newItem);
+ }
- selection.each( function( image ) {
- images.push( {
- id: image.get( 'id' ),
- url: image.get( 'url' )
- } );
- } );
+ if (options.onBeforeAdd) {
+ options.onBeforeAdd();
+ }
- this.setValue( images );
+ var newModel = this.addChildModel(newItem, { at: options.at }),
+ newView = this.children.findByModel(newModel);
- this.applySavedValue();
- },
+ if (options.onAfterAdd) {
+ options.onAfterAdd(newModel, newView);
+ }
- onBeforeDestroy: function() {
- if ( this.frame ) {
- this.frame.off();
+ if (options.trigger) {
+ elementor.channels.data.trigger(options.trigger.afterAdd, newItem);
}
- this.$el.remove();
+ if (options.edit) {
+ newModel.trigger('request:edit');
+ }
+
+ return newView;
},
- resetGallery: function() {
- this.setValue( '' );
+ cloneItem: function cloneItem(item) {
+ var self = this;
- this.applySavedValue();
- },
+ if (item instanceof Backbone.Model) {
+ return item.clone();
+ }
- initRemoveDialog: function() {
- var removeDialog;
+ item.id = elementor.helpers.getUniqueID();
- this.getRemoveDialog = function() {
- if ( ! removeDialog ) {
- removeDialog = elementor.dialogsManager.createWidget( 'confirm', {
- message: elementor.translate( 'dialog_confirm_gallery_delete' ),
- headerMessage: elementor.translate( 'delete_gallery' ),
- strings: {
- confirm: elementor.translate( 'delete' ),
- cancel: elementor.translate( 'cancel' )
- },
- defaultOption: 'confirm',
- onConfirm: this.resetGallery.bind( this )
- } );
- }
+ item.settings._element_id = '';
- return removeDialog;
- };
+ item.elements.forEach(function (childItem, index) {
+ item.elements[index] = self.cloneItem(childItem);
+ });
+
+ return item;
},
- onAddImagesClick: function() {
- this.openFrame( this.hasImages() ? 'add' : 'create' );
+ isCollectionFilled: function isCollectionFilled() {
+ return false;
},
- onClearGalleryClick: function() {
- this.getRemoveDialog().show();
+ onChildviewRequestAddNew: function onChildviewRequestAddNew(childView) {
+ this.addChildElement({}, {
+ at: childView.$el.index() + 1,
+ trigger: {
+ beforeAdd: 'element:before:add',
+ afterAdd: 'element:after:add'
+ }
+ });
},
- onGalleryThumbnailsClick: function() {
- this.openFrame( 'edit' );
- }
-} );
+ onChildviewRequestPaste: function onChildviewRequestPaste(childView) {
+ var self = this;
-module.exports = ControlMediaItemView;
+ if (self.isCollectionFilled()) {
+ return;
+ }
-},{"elementor-controls/base-data":37}],50:[function(require,module,exports){
-var ControlSelect2View = require( 'elementor-controls/select2' ),
- ControlIconView;
+ var elements = elementor.getStorage('transfer').elements,
+ index = self.collection.indexOf(childView.model);
-ControlIconView = ControlSelect2View.extend( {
+ elementor.channels.data.trigger('element:before:add', elements[0]);
- initialize: function() {
- ControlSelect2View.prototype.initialize.apply( this, arguments );
+ elements.forEach(function (item) {
+ index++;
- this.filterIcons();
- },
+ self.addChildElement(item, { at: index, clone: true });
+ });
- filterIcons: function() {
- var icons = this.model.get( 'options' ),
- include = this.model.get( 'include' ),
- exclude = this.model.get( 'exclude' );
+ elementor.channels.data.trigger('element:after:add', elements[0]);
+ }
+});
- if ( include ) {
- var filteredIcons = {};
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
- _.each( include, function( iconKey ) {
- filteredIcons[ iconKey ] = icons[ iconKey ];
- } );
+"use strict";
- this.model.set( 'options', filteredIcons );
- return;
- }
- if ( exclude ) {
- _.each( exclude, function( iconKey ) {
- delete icons[ iconKey ];
- } );
- }
- },
+var _inline = __webpack_require__(89);
- iconsList: function( icon ) {
- if ( ! icon.id ) {
- return icon.text;
- }
+var _inline2 = _interopRequireDefault(_inline);
- return jQuery(
- '<span><i class="' + icon.id + '"></i> ' + icon.text + '</span>'
- );
- },
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- getSelect2Options: function() {
- return {
- allowClear: true,
- templateResult: this.iconsList.bind( this ),
- templateSelection: this.iconsList.bind( this )
- };
- }
-} );
+var BaseElementView = __webpack_require__(10),
+ SectionView;
-module.exports = ControlIconView;
+SectionView = BaseElementView.extend({
+ template: Marionette.TemplateCache.get('#tmpl-elementor-section-content'),
-},{"elementor-controls/select2":59}],51:[function(require,module,exports){
-var ControlMultipleBaseItemView = require( 'elementor-controls/base-multiple' ),
- ControlImageDimensionsItemView;
+ addSectionView: null,
-ControlImageDimensionsItemView = ControlMultipleBaseItemView.extend( {
- ui: function() {
- return {
- inputWidth: 'input[data-setting="width"]',
- inputHeight: 'input[data-setting="height"]',
+ className: function className() {
+ var classes = BaseElementView.prototype.className.apply(this, arguments),
+ type = this.isInner() ? 'inner' : 'top';
- btnApply: 'button.elementor-image-dimensions-apply-button'
- };
+ return classes + ' elementor-section elementor-' + type + '-section';
},
- // Override the base events
- events: function() {
- return {
- 'click @ui.btnApply': 'onApplyClicked'
- };
+ tagName: function tagName() {
+ return this.model.getSetting('html_tag') || 'section';
},
- onApplyClicked: function( event ) {
- event.preventDefault();
+ childViewContainer: '> .elementor-container > .elementor-row',
- this.setValue( {
- width: this.ui.inputWidth.val(),
- height: this.ui.inputHeight.val()
- } );
- }
-} );
+ behaviors: function behaviors() {
+ var behaviors = BaseElementView.prototype.behaviors.apply(this, arguments);
-module.exports = ControlImageDimensionsItemView;
+ _.extend(behaviors, {
+ Sortable: {
+ behaviorClass: __webpack_require__(19),
+ elChildType: 'column'
+ }
+ });
-},{"elementor-controls/base-multiple":38}],52:[function(require,module,exports){
-var ControlMultipleBaseItemView = require( 'elementor-controls/base-multiple' ),
- ControlMediaItemView;
+ return elementor.hooks.applyFilters('elements/section/behaviors', behaviors, this);
+ },
-ControlMediaItemView = ControlMultipleBaseItemView.extend( {
- ui: function() {
- var ui = ControlMultipleBaseItemView.prototype.ui.apply( this, arguments );
+ errors: {
+ columnWidthTooLarge: 'New column width is too large',
+ columnWidthTooSmall: 'New column width is too small'
+ },
- ui.controlMedia = '.elementor-control-media';
- ui.mediaImage = '.elementor-control-media-image';
- ui.frameOpeners = '.elementor-control-media-upload-button, .elementor-control-media-image';
- ui.deleteButton = '.elementor-control-media-delete';
+ initialize: function initialize() {
+ BaseElementView.prototype.initialize.apply(this, arguments);
- return ui;
- },
+ this.listenTo(this.collection, 'add remove reset', this._checkIsFull);
- events: function() {
- return _.extend( ControlMultipleBaseItemView.prototype.events.apply( this, arguments ), {
- 'click @ui.frameOpeners': 'openFrame',
- 'click @ui.deleteButton': 'deleteImage'
- } );
+ this._checkIsEmpty();
},
- applySavedValue: function() {
- var url = this.getControlValue( 'url' );
+ getContextMenuGroups: function getContextMenuGroups() {
+ var groups = BaseElementView.prototype.getContextMenuGroups.apply(this, arguments),
+ transferGroupIndex = groups.indexOf(_.findWhere(groups, { name: 'transfer' }));
- this.ui.mediaImage.css( 'background-image', url ? 'url(' + url + ')' : '' );
+ groups.splice(transferGroupIndex + 1, 0, {
+ name: 'save',
+ actions: [{
+ name: 'save',
+ title: elementor.translate('save_as_block'),
+ callback: this.save.bind(this)
+ }]
+ });
- this.ui.controlMedia.toggleClass( 'elementor-media-empty', ! url );
+ return groups;
},
- openFrame: function() {
- if ( ! this.frame ) {
- this.initFrame();
+ addChildModel: function addChildModel(model, options) {
+ var isModelInstance = model instanceof Backbone.Model,
+ isInner = this.isInner();
+
+ if (isModelInstance) {
+ model.set('isInner', isInner);
+ } else {
+ model.isInner = isInner;
}
- this.frame.open();
+ return BaseElementView.prototype.addChildModel.apply(this, arguments);
},
- deleteImage: function() {
- this.setValue( {
- url: '',
- id: ''
- } );
+ getSortableOptions: function getSortableOptions() {
+ var sectionConnectClass = this.isInner() ? '.elementor-inner-section' : '.elementor-top-section';
- this.applySavedValue();
+ return {
+ connectWith: sectionConnectClass + ' > .elementor-container > .elementor-row',
+ handle: '> .elementor-element-overlay .elementor-editor-element-edit',
+ items: '> .elementor-column',
+ forcePlaceholderSize: true,
+ tolerance: 'pointer'
+ };
},
- /**
- * Create a media modal select frame, and store it so the instance can be reused when needed.
- */
- initFrame: function() {
- this.frame = wp.media( {
- button: {
- text: elementor.translate( 'insert_media' )
- },
- states: [
- new wp.media.controller.Library( {
- title: elementor.translate( 'insert_media' ),
- library: wp.media.query( { type: 'image' } ),
- multiple: false,
- date: false
- } )
- ]
- } );
-
- // When a file is selected, run a callback.
- this.frame.on( 'insert select', this.select.bind( this ) );
+ getColumnPercentSize: function getColumnPercentSize(element, size) {
+ return +(size / element.parent().width() * 100).toFixed(3);
},
- /**
- * Callback handler for when an attachment is selected in the media modal.
- * Gets the selected image information, and sets it within the control.
- */
- select: function() {
- this.trigger( 'before:select' );
+ getDefaultStructure: function getDefaultStructure() {
+ return this.collection.length + '0';
+ },
- // Get the attachment from the modal frame.
- var attachment = this.frame.state().get( 'selection' ).first().toJSON();
+ getStructure: function getStructure() {
+ return this.model.getSetting('structure');
+ },
- if ( attachment.url ) {
- this.setValue( {
- url: attachment.url,
- id: attachment.id
- } );
+ setStructure: function setStructure(structure) {
+ var parsedStructure = elementor.presetsFactory.getParsedStructure(structure);
- this.applySavedValue();
+ if (+parsedStructure.columnsCount !== this.collection.length) {
+ throw new TypeError('The provided structure doesn\'t match the columns count.');
}
- this.trigger( 'after:select' );
+ this.model.setSetting('structure', structure);
},
- onBeforeDestroy: function() {
- this.$el.remove();
- }
-} );
-
-module.exports = ControlMediaItemView;
+ redefineLayout: function redefineLayout() {
+ var preset = elementor.presetsFactory.getPresetByStructure(this.getStructure());
-},{"elementor-controls/base-multiple":38}],53:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- NumberValidator = require( 'elementor-validator/number' ),
- ControlNumberItemView;
+ this.collection.each(function (model, index) {
+ model.setSetting('_column_size', preset.preset[index]);
+ model.setSetting('_inline_size', null);
+ });
+ },
-ControlNumberItemView = ControlBaseDataView.extend( {
+ resetLayout: function resetLayout() {
+ this.setStructure(this.getDefaultStructure());
+ },
- registerValidators: function() {
- ControlBaseDataView.prototype.registerValidators.apply( this, arguments );
+ resetColumnsCustomSize: function resetColumnsCustomSize() {
+ this.collection.each(function (model) {
+ model.setSetting('_inline_size', null);
+ });
+ },
- var validationTerms = {},
- model = this.model;
+ isCollectionFilled: function isCollectionFilled() {
+ var MAX_SIZE = 10,
+ columnsCount = this.collection.length;
- [ 'min', 'max' ].forEach( function( term ) {
- var termValue = model.get( term );
+ return MAX_SIZE <= columnsCount;
+ },
- if ( _.isFinite( termValue ) ) {
- validationTerms[ term ] = termValue;
- }
- } );
+ _checkIsFull: function _checkIsFull() {
+ this.$el.toggleClass('elementor-section-filled', this.isCollectionFilled());
+ },
- if ( ! jQuery.isEmptyObject( validationTerms ) ) {
- this.addValidator( new NumberValidator( {
- validationTerms: validationTerms
- } ) );
+ _checkIsEmpty: function _checkIsEmpty() {
+ if (!this.collection.length && !this.model.get('allowEmpty')) {
+ this.addChildElement(null, { edit: false });
}
- }
-} );
-
-module.exports = ControlNumberItemView;
-
-},{"elementor-controls/base-data":37,"elementor-validator/number":36}],54:[function(require,module,exports){
-var ControlMultipleBaseItemView = require( 'elementor-controls/base-multiple' ),
- ControlOrderItemView;
-
-ControlOrderItemView = ControlMultipleBaseItemView.extend( {
- ui: function() {
- var ui = ControlMultipleBaseItemView.prototype.ui.apply( this, arguments );
-
- ui.reverseOrderLabel = '.elementor-control-order-label';
-
- return ui;
},
- changeLabelTitle: function() {
- var reverseOrder = this.getControlValue( 'reverse_order' );
+ getColumnAt: function getColumnAt(index) {
+ var model = this.collection.at(index);
- this.ui.reverseOrderLabel.attr( 'title', elementor.translate( reverseOrder ? 'asc' : 'desc' ) );
+ return model ? this.children.findByModelCid(model.cid) : null;
},
- onRender: function() {
- ControlMultipleBaseItemView.prototype.onRender.apply( this, arguments );
+ getNextColumn: function getNextColumn(columnView) {
+ return this.getColumnAt(this.collection.indexOf(columnView.model) + 1);
+ },
- this.changeLabelTitle();
+ getPreviousColumn: function getPreviousColumn(columnView) {
+ return this.getColumnAt(this.collection.indexOf(columnView.model) - 1);
},
- onInputChange: function() {
- this.changeLabelTitle();
- }
-} );
+ showChildrenPercentsTooltip: function showChildrenPercentsTooltip(columnView, nextColumnView) {
+ columnView.ui.percentsTooltip.show();
-module.exports = ControlOrderItemView;
+ columnView.ui.percentsTooltip.attr('data-side', elementor.config.is_rtl ? 'right' : 'left');
-},{"elementor-controls/base-multiple":38}],55:[function(require,module,exports){
-var ControlChooseView = require( 'elementor-controls/choose' ),
- ControlPopoverStarterView;
+ nextColumnView.ui.percentsTooltip.show();
-ControlPopoverStarterView = ControlChooseView.extend( {
- ui: function() {
- var ui = ControlChooseView.prototype.ui.apply( this, arguments );
+ nextColumnView.ui.percentsTooltip.attr('data-side', elementor.config.is_rtl ? 'left' : 'right');
+ },
- ui.popoverToggle = '.elementor-control-popover-toggle-toggle';
+ hideChildrenPercentsTooltip: function hideChildrenPercentsTooltip(columnView, nextColumnView) {
+ columnView.ui.percentsTooltip.hide();
- return ui;
+ nextColumnView.ui.percentsTooltip.hide();
},
- events: function() {
- return _.extend( ControlChooseView.prototype.events.apply( this, arguments ), {
- 'click @ui.popoverToggle': 'onPopoverToggleClick'
- } );
- },
+ resizeChild: function resizeChild(childView, currentSize, newSize) {
+ var nextChildView = this.getNextColumn(childView) || this.getPreviousColumn(childView);
- onPopoverToggleClick: function() {
- this.$el.next( '.elementor-controls-popover' ).toggle();
- }
-} );
+ if (!nextChildView) {
+ throw new ReferenceError('There is not any next column');
+ }
-module.exports = ControlPopoverStarterView;
+ var minColumnSize = 2,
+ $nextElement = nextChildView.$el,
+ nextElementCurrentSize = +nextChildView.model.getSetting('_inline_size') || this.getColumnPercentSize($nextElement, $nextElement[0].getBoundingClientRect().width),
+ nextElementNewSize = +(currentSize + nextElementCurrentSize - newSize).toFixed(3);
-},{"elementor-controls/choose":43}],56:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- RepeaterRowView;
+ if (nextElementNewSize < minColumnSize) {
+ throw new RangeError(this.errors.columnWidthTooLarge);
+ }
-RepeaterRowView = Marionette.CompositeView.extend( {
- template: Marionette.TemplateCache.get( '#tmpl-elementor-repeater-row' ),
+ if (newSize < minColumnSize) {
+ throw new RangeError(this.errors.columnWidthTooSmall);
+ }
- className: 'elementor-repeater-fields',
+ nextChildView.model.setSetting('_inline_size', nextElementNewSize);
- ui: {
- duplicateButton: '.elementor-repeater-tool-duplicate',
- editButton: '.elementor-repeater-tool-edit',
- removeButton: '.elementor-repeater-tool-remove',
- itemTitle: '.elementor-repeater-row-item-title'
+ return true;
},
- behaviors: {
- HandleInnerTabs: {
- behaviorClass: require( 'elementor-behaviors/inner-tabs' )
+ destroyAddSectionView: function destroyAddSectionView() {
+ if (this.addSectionView && !this.addSectionView.isDestroyed) {
+ this.addSectionView.destroy();
}
},
- triggers: {
- 'click @ui.removeButton': 'click:remove',
- 'click @ui.duplicateButton': 'click:duplicate',
- 'click @ui.itemTitle': 'click:edit'
- },
+ onRender: function onRender() {
+ BaseElementView.prototype.onRender.apply(this, arguments);
- modelEvents: {
- change: 'onModelChange'
+ this._checkIsFull();
},
- templateHelpers: function() {
- return {
- itemIndex: this.getOption( 'itemIndex' )
- };
- },
+ onSettingsChanged: function onSettingsChanged(settingsModel) {
+ BaseElementView.prototype.onSettingsChanged.apply(this, arguments);
- childViewContainer: '.elementor-repeater-row-controls',
+ if (settingsModel.changed.structure) {
+ this.redefineLayout();
+ }
+ },
- getChildView: function( item ) {
- var controlType = item.get( 'type' );
+ onAddButtonClick: function onAddButtonClick() {
+ if (this.addSectionView && !this.addSectionView.isDestroyed) {
+ this.addSectionView.fadeToDeath();
- return elementor.getControlView( controlType );
- },
+ return;
+ }
- childViewOptions: function() {
- return {
- elementSettingsModel: this.model
- };
- },
+ var myIndex = this.model.collection.indexOf(this.model),
+ addSectionView = new _inline2.default({
+ at: myIndex
+ });
- updateIndex: function( newIndex ) {
- this.itemIndex = newIndex;
- },
+ addSectionView.render();
- setTitle: function() {
- var titleField = this.getOption( 'titleField' ),
- title = '';
+ this.$el.before(addSectionView.$el);
- if ( titleField ) {
- var values = {};
+ addSectionView.$el.hide();
- this.children.each( function( child ) {
- if ( ! ( child instanceof ControlBaseDataView ) ) {
- return;
- }
+ // Delaying the slide down for slow-render browsers (such as FF)
+ setTimeout(function () {
+ addSectionView.$el.slideDown();
+ });
- values[ child.model.get( 'name' ) ] = child.getControlValue();
- } );
+ this.addSectionView = addSectionView;
+ },
- title = Marionette.TemplateCache.prototype.compileTemplate( titleField )( this.model.parseDynamicSettings() );
+ onAddChild: function onAddChild() {
+ if (!this.isBuffering && !this.model.get('allowEmpty')) {
+ // Reset the layout just when we have really add/remove element.
+ this.resetLayout();
}
+ },
- if ( ! title ) {
- title = elementor.translate( 'Item #{0}', [ this.getOption( 'itemIndex' ) ] );
+ onRemoveChild: function onRemoveChild() {
+ if (!this.isManualRemoving) {
+ return;
}
- this.ui.itemTitle.html( title );
- },
-
- initialize: function( options ) {
- this.itemIndex = 0;
+ // If it's the last column, please create new one.
+ this._checkIsEmpty();
- // Collection for Controls list
- this.collection = new Backbone.Collection( _.values( elementor.mergeControlsSettings( options.controlFields ) ) );
+ this.resetLayout();
},
- onRender: function() {
- this.setTitle();
- },
+ onChildviewRequestResizeStart: function onChildviewRequestResizeStart(columnView) {
+ var nextColumnView = this.getNextColumn(columnView);
- onModelChange: function() {
- if ( this.getOption( 'titleField' ) ) {
- this.setTitle();
+ if (!nextColumnView) {
+ return;
}
+
+ this.showChildrenPercentsTooltip(columnView, nextColumnView);
+
+ var $iframes = columnView.$el.find('iframe').add(nextColumnView.$el.find('iframe'));
+
+ elementor.helpers.disableElementEvents($iframes);
},
- onChildviewResponsiveSwitcherClick: function( childView, device ) {
- if ( 'desktop' === device ) {
- elementor.getPanelView().getCurrentPageView().$el.toggleClass( 'elementor-responsive-switchers-open' );
+ onChildviewRequestResizeStop: function onChildviewRequestResizeStop(columnView) {
+ var nextColumnView = this.getNextColumn(columnView);
+
+ if (!nextColumnView) {
+ return;
}
- }
-} );
-module.exports = RepeaterRowView;
+ this.hideChildrenPercentsTooltip(columnView, nextColumnView);
-},{"elementor-behaviors/inner-tabs":75,"elementor-controls/base-data":37}],57:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- RepeaterRowView = require( 'elementor-controls/repeater-row' ),
- BaseSettingsModel = require( 'elementor-elements/models/base-settings' ),
- ControlRepeaterItemView;
+ var $iframes = columnView.$el.find('iframe').add(nextColumnView.$el.find('iframe'));
-ControlRepeaterItemView = ControlBaseDataView.extend( {
- ui: {
- btnAddRow: '.elementor-repeater-add',
- fieldContainer: '.elementor-repeater-fields-wrapper'
+ elementor.helpers.enableElementEvents($iframes);
},
- events: function() {
- return {
- 'click @ui.btnAddRow': 'onButtonAddRowClick',
- 'sortstart @ui.fieldContainer': 'onSortStart',
- 'sortupdate @ui.fieldContainer': 'onSortUpdate',
- 'sortstop @ui.fieldContainer': 'onSortStop'
- };
- },
+ onChildviewRequestResize: function onChildviewRequestResize(columnView, ui) {
+ // Get current column details
+ var currentSize = +columnView.model.getSetting('_inline_size') || this.getColumnPercentSize(columnView.$el, columnView.$el.data('originalWidth'));
- childView: RepeaterRowView,
+ ui.element.css({
+ width: '',
+ left: 'initial' // Fix for RTL resizing
+ });
- childViewContainer: '.elementor-repeater-fields-wrapper',
+ var newSize = this.getColumnPercentSize(ui.element, ui.size.width);
- templateHelpers: function() {
- return {
- data: _.extend( {}, this.model.toJSON(), { controlValue: [] } )
- };
- },
+ try {
+ this.resizeChild(columnView, currentSize, newSize);
+ } catch (e) {
+ return;
+ }
- childViewOptions: function() {
- return {
- controlFields: this.model.get( 'fields' ),
- titleField: this.model.get( 'title_field' )
- };
+ columnView.model.setSetting('_inline_size', newSize);
},
- createItemModel: function( attrs, options, controlView ) {
- options = options || {};
+ onDestroy: function onDestroy() {
+ BaseElementView.prototype.onDestroy.apply(this, arguments);
- options.controls = controlView.model.get( 'fields' );
+ this.destroyAddSectionView();
+ }
+});
- if ( ! attrs._id ) {
- attrs._id = elementor.helpers.getUniqueID();
- }
+module.exports = SectionView;
- return new BaseSettingsModel( attrs, options );
- },
+/***/ }),
+/* 30 */
+/***/ (function(module, exports, __webpack_require__) {
- fillCollection: function() {
- var controlName = this.model.get( 'name' );
- this.collection = this.elementSettingsModel.get( controlName );
+"use strict";
- // Hack for history redo/undo
- if ( ! ( this.collection instanceof Backbone.Collection ) ) {
- this.collection = new Backbone.Collection( this.collection, {
- // Use `partial` to supply the `this` as an argument, but not as context
- // the `_` is a place holder for original arguments: `attrs` & `options`
- model: _.partial( this.createItemModel, _, _, this )
- } );
- // Set the value silent
- this.elementSettingsModel.set( controlName, this.collection, { silent: true } );
- this.listenTo( this.collection, 'change', this.onRowControlChange );
- this.listenTo( this.collection, 'update', this.onRowUpdate, this );
- }
- },
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
- initialize: function( options ) {
- ControlBaseDataView.prototype.initialize.apply( this, arguments );
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- this.fillCollection();
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- this.listenTo( this.collection, 'change', this.onRowControlChange );
- this.listenTo( this.collection, 'update', this.onRowUpdate, this );
- },
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
- addRow: function( data, options ) {
- var id = elementor.helpers.getUniqueID();
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- if ( data instanceof Backbone.Model ) {
- data.set( '_id', id );
- } else {
- data._id = id;
- }
+var AddSectionBase = function (_Marionette$ItemView) {
+ _inherits(AddSectionBase, _Marionette$ItemView);
- return this.collection.add( data, options );
- },
+ function AddSectionBase() {
+ _classCallCheck(this, AddSectionBase);
- editRow: function( rowView ) {
- if ( this.currentEditableChild ) {
- var currentEditable = this.currentEditableChild.getChildViewContainer( this.currentEditableChild );
- currentEditable.removeClass( 'editable' );
+ return _possibleConstructorReturn(this, (AddSectionBase.__proto__ || Object.getPrototypeOf(AddSectionBase)).apply(this, arguments));
+ }
- // If the repeater contains TinyMCE editors, fire the `hide` trigger to hide floated toolbars
- currentEditable.find( '.elementor-wp-editor' ).each( function() {
- tinymce.get( this.id ).fire( 'hide' );
- } );
+ _createClass(AddSectionBase, [{
+ key: 'template',
+ value: function template() {
+ return Marionette.TemplateCache.get('#tmpl-elementor-add-section');
}
-
- if ( this.currentEditableChild === rowView ) {
- delete this.currentEditableChild;
- return;
+ }, {
+ key: 'attributes',
+ value: function attributes() {
+ return {
+ 'data-view': 'choose-action'
+ };
+ }
+ }, {
+ key: 'ui',
+ value: function ui() {
+ return {
+ addNewSection: '.elementor-add-new-section',
+ closeButton: '.elementor-add-section-close',
+ addSectionButton: '.elementor-add-section-button',
+ addTemplateButton: '.elementor-add-template-button',
+ selectPreset: '.elementor-select-preset',
+ presets: '.elementor-preset'
+ };
+ }
+ }, {
+ key: 'events',
+ value: function events() {
+ return {
+ 'click @ui.addSectionButton': 'onAddSectionButtonClick',
+ 'click @ui.addTemplateButton': 'onAddTemplateButtonClick',
+ 'click @ui.closeButton': 'onCloseButtonClick',
+ 'click @ui.presets': 'onPresetSelected'
+ };
+ }
+ }, {
+ key: 'behaviors',
+ value: function behaviors() {
+ return {
+ contextMenu: {
+ behaviorClass: __webpack_require__(11),
+ groups: this.getContextMenuGroups()
+ }
+ };
+ }
+ }, {
+ key: 'className',
+ value: function className() {
+ return 'elementor-add-section elementor-visible-desktop';
+ }
+ }, {
+ key: 'addSection',
+ value: function addSection(properties, options) {
+ return elementor.getPreviewView().addChildElement(properties, jQuery.extend({}, this.options, options));
+ }
+ }, {
+ key: 'setView',
+ value: function setView(view) {
+ this.$el.attr('data-view', view);
+ }
+ }, {
+ key: 'showSelectPresets',
+ value: function showSelectPresets() {
+ this.setView('select-preset');
+ }
+ }, {
+ key: 'closeSelectPresets',
+ value: function closeSelectPresets() {
+ this.setView('choose-action');
+ }
+ }, {
+ key: 'getTemplatesModalOptions',
+ value: function getTemplatesModalOptions() {
+ return {
+ importOptions: {
+ at: this.getOption('at')
+ }
+ };
}
+ }, {
+ key: 'getContextMenuGroups',
+ value: function getContextMenuGroups() {
+ var hasContent = function hasContent() {
+ return elementor.elements.length > 0;
+ };
- rowView.getChildViewContainer( rowView ).addClass( 'editable' );
+ return [{
+ name: 'paste',
+ actions: [{
+ name: 'paste',
+ title: elementor.translate('paste'),
+ callback: this.paste.bind(this),
+ isEnabled: this.isPasteEnabled.bind(this)
+ }]
+ }, {
+ name: 'content',
+ actions: [{
+ name: 'copy_all_content',
+ title: elementor.translate('copy_all_content'),
+ callback: this.copy.bind(this),
+ isEnabled: hasContent
+ }, {
+ name: 'delete_all_content',
+ title: elementor.translate('delete_all_content'),
+ callback: elementor.clearPage.bind(elementor),
+ isEnabled: hasContent
+ }]
+ }];
+ }
+ }, {
+ key: 'copy',
+ value: function copy() {
+ elementor.getPreviewView().copy();
+ }
+ }, {
+ key: 'paste',
+ value: function paste() {
+ elementor.getPreviewView().paste(this.getOption('at'));
+ }
+ }, {
+ key: 'isPasteEnabled',
+ value: function isPasteEnabled() {
+ return elementor.getStorage('transfer');
+ }
+ }, {
+ key: 'onAddSectionButtonClick',
+ value: function onAddSectionButtonClick() {
+ this.showSelectPresets();
+ }
+ }, {
+ key: 'onAddTemplateButtonClick',
+ value: function onAddTemplateButtonClick() {
+ elementor.templates.startModal(this.getTemplatesModalOptions());
+ }
+ }, {
+ key: 'onRender',
+ value: function onRender() {
+ this.$el.html5Droppable({
+ axis: ['vertical'],
+ groups: ['elementor-element'],
+ placeholder: false,
+ currentElementClass: 'elementor-html5dnd-current-element',
+ hasDraggingOnChildClass: 'elementor-dragging-on-child',
+ onDropping: this.onDropping.bind(this)
+ });
+ }
+ }, {
+ key: 'onPresetSelected',
+ value: function onPresetSelected(event) {
+ this.closeSelectPresets();
+
+ var selectedStructure = event.currentTarget.dataset.structure,
+ parsedStructure = elementor.presetsFactory.getParsedStructure(selectedStructure),
+ elements = [],
+ loopIndex;
+
+ for (loopIndex = 0; loopIndex < parsedStructure.columnsCount; loopIndex++) {
+ elements.push({
+ id: elementor.helpers.getUniqueID(),
+ elType: 'column',
+ settings: {},
+ elements: []
+ });
+ }
- this.currentEditableChild = rowView;
+ elementor.channels.data.trigger('element:before:add', {
+ elType: 'section'
+ });
- this.updateActiveRow();
- },
+ var newSection = this.addSection({ elements: elements });
- toggleMinRowsClass: function() {
- if ( ! this.model.get( 'prevent_empty' ) ) {
- return;
- }
+ newSection.setStructure(selectedStructure);
- this.$el.toggleClass( 'elementor-repeater-has-minimum-rows', 1 >= this.collection.length );
- },
+ elementor.channels.data.trigger('element:after:add');
+ }
+ }, {
+ key: 'onDropping',
+ value: function onDropping() {
+ elementor.channels.data.trigger('section:before:drop');
- updateActiveRow: function() {
- var activeItemIndex = 0;
+ this.addSection().addElementFromPanel();
- if ( this.currentEditableChild ) {
- activeItemIndex = this.currentEditableChild.itemIndex;
+ elementor.channels.data.trigger('section:after:drop');
}
+ }]);
- this.setEditSetting( 'activeItemIndex', activeItemIndex );
- },
+ return AddSectionBase;
+}(Marionette.ItemView);
- updateChildIndexes: function() {
- var collection = this.collection;
+exports.default = AddSectionBase;
- this.children.each( function( view ) {
- view.updateIndex( collection.indexOf( view.model ) + 1 );
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
- view.setTitle();
- } );
- },
+"use strict";
- onRender: function() {
- ControlBaseDataView.prototype.onRender.apply( this, arguments );
- this.ui.fieldContainer.sortable( { axis: 'y', handle: '.elementor-repeater-row-tools' } );
+var InnerTabsBehavior;
- this.toggleMinRowsClass();
- },
+InnerTabsBehavior = Marionette.Behavior.extend({
- onSortStart: function( event, ui ) {
- ui.item.data( 'oldIndex', ui.item.index() );
+ onRenderCollection: function onRenderCollection() {
+ this.handleInnerTabs(this.view);
},
- onSortStop: function( event, ui ) {
- // Reload TinyMCE editors (if exist), it's a bug that TinyMCE content is missing after stop dragging
- var self = this,
- sortedIndex = ui.item.index();
+ handleInnerTabs: function handleInnerTabs(parent) {
+ var closedClass = 'elementor-tab-close',
+ activeClass = 'elementor-tab-active',
+ tabsWrappers = parent.children.filter(function (view) {
+ return 'tabs' === view.model.get('type');
+ });
- if ( -1 === sortedIndex ) {
- return;
- }
+ _.each(tabsWrappers, function (view) {
+ view.$el.find('.elementor-control-content').remove();
- var sortedRowView = self.children.findByIndex( ui.item.index() ),
- rowControls = sortedRowView.children._views;
+ var tabsId = view.model.get('name'),
+ tabs = parent.children.filter(function (childView) {
+ return 'tab' === childView.model.get('type') && childView.model.get('tabs_wrapper') === tabsId;
+ });
- jQuery.each( rowControls, function() {
- if ( 'wysiwyg' === this.model.get( 'type' ) ) {
- sortedRowView.render();
+ _.each(tabs, function (childView, index) {
+ view._addChildView(childView);
- delete self.currentEditableChild;
+ var tabId = childView.model.get('name'),
+ controlsUnderTab = parent.children.filter(function (view) {
+ return tabId === view.model.get('inner_tab');
+ });
- return false;
- }
- } );
+ if (0 === index) {
+ childView.$el.addClass(activeClass);
+ } else {
+ _.each(controlsUnderTab, function (view) {
+ view.$el.addClass(closedClass);
+ });
+ }
+ });
+ });
},
- onSortUpdate: function( event, ui ) {
- var oldIndex = ui.item.data( 'oldIndex' ),
- model = this.collection.at( oldIndex ),
- newIndex = ui.item.index();
+ onChildviewControlTabClicked: function onChildviewControlTabClicked(childView) {
+ var closedClass = 'elementor-tab-close',
+ activeClass = 'elementor-tab-active',
+ tabClicked = childView.model.get('name'),
+ childrenUnderTab = this.view.children.filter(function (view) {
+ return 'tab' !== view.model.get('type') && childView.model.get('tabs_wrapper') === view.model.get('tabs_wrapper');
+ }),
+ siblingTabs = this.view.children.filter(function (view) {
+ return 'tab' === view.model.get('type') && childView.model.get('tabs_wrapper') === view.model.get('tabs_wrapper');
+ });
- this.collection.remove( model );
+ _.each(siblingTabs, function (view) {
+ view.$el.removeClass(activeClass);
+ });
- this.addRow( model, { at: newIndex } );
- },
+ childView.$el.addClass(activeClass);
- onAddChild: function() {
- this.updateChildIndexes();
- this.updateActiveRow();
- },
+ _.each(childrenUnderTab, function (view) {
+ if (view.model.get('inner_tab') === tabClicked) {
+ view.$el.removeClass(closedClass);
+ } else {
+ view.$el.addClass(closedClass);
+ }
+ });
- onRemoveChild: function( childView ) {
- if ( childView === this.currentEditableChild ) {
- delete this.currentEditableChild;
- }
+ elementor.getPanelView().updateScrollbar();
+ }
+});
- this.updateChildIndexes();
- this.updateActiveRow();
- },
+module.exports = InnerTabsBehavior;
- onRowUpdate: function( collection, event ) {
- // Simulate `changed` and `_previousAttributes` values
- var settings = this.elementSettingsModel,
- collectionCloned = collection.clone(),
- controlName = this.model.get( 'name' );
+/***/ }),
+/* 32 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( event.add ) {
- collectionCloned.remove( event.changes.added[0] );
- } else {
- collectionCloned.add( event.changes.removed[0], { at: event.index } );
- }
+"use strict";
- settings.changed = {};
- settings.changed[ controlName ] = collection;
- settings._previousAttributes = {};
- settings._previousAttributes[ controlName ] = collectionCloned.toJSON();
+var ControlMultipleBaseItemView = __webpack_require__(4),
+ ControlBoxShadowItemView;
- settings.trigger( 'change', settings, settings._pending );
+ControlBoxShadowItemView = ControlMultipleBaseItemView.extend({
+ ui: function ui() {
+ var ui = ControlMultipleBaseItemView.prototype.ui.apply(this, arguments);
- delete settings.changed;
- delete settings._previousAttributes;
+ ui.sliders = '.elementor-slider';
+ ui.colors = '.elementor-shadow-color-picker';
- this.toggleMinRowsClass();
+ return ui;
},
- onRowControlChange: function( model ) {
- // Simulate `changed` and `_previousAttributes` values
- var changed = Object.keys( model.changed );
+ events: function events() {
+ return _.extend(ControlMultipleBaseItemView.prototype.events.apply(this, arguments), {
+ 'slide @ui.sliders': 'onSlideChange'
+ });
+ },
- if ( ! changed.length ) {
- return;
- }
+ initSliders: function initSliders() {
+ var value = this.getControlValue();
- var collectionCloned = model.collection.toJSON(),
- modelIndex = model.collection.findIndex( model ),
- element = this._parent.model,
- settings = element.get( 'settings' ),
- controlName = this.model.get( 'name' );
+ this.ui.sliders.each(function () {
+ var $slider = jQuery(this),
+ $input = $slider.next('.elementor-slider-input').find('input');
- // Save it with old values
- collectionCloned[ modelIndex ] = model._previousAttributes;
+ $slider.slider({
+ value: value[this.dataset.input],
+ min: +$input.attr('min'),
+ max: +$input.attr('max')
+ });
+ });
+ },
- settings.changed = {};
- settings.changed[ controlName ] = model.collection;
+ initColors: function initColors() {
+ var self = this;
- settings._previousAttributes = {};
- settings._previousAttributes[ controlName ] = collectionCloned;
+ elementor.helpers.wpColorPicker(this.ui.colors, {
+ change: function change() {
+ var $this = jQuery(this),
+ type = $this.data('setting');
- settings.trigger( 'change', settings );
+ self.setValue(type, $this.wpColorPicker('color'));
+ },
- delete settings.changed;
- delete settings._previousAttributes;
+ clear: function clear() {
+ self.setValue(this.dataset.setting, '');
+ }
+ });
},
- onButtonAddRowClick: function() {
- var defaults = {};
- _.each( this.model.get( 'fields' ), function( field ) {
- defaults[ field.name ] = field['default'];
- } );
-
- var newModel = this.addRow( defaults ),
- newChildView = this.children.findByModel( newModel );
+ onInputChange: function onInputChange(event) {
+ var type = event.currentTarget.dataset.setting,
+ $slider = this.ui.sliders.filter('[data-input="' + type + '"]');
- this.editRow( newChildView );
- this.render();
+ $slider.slider('value', this.getControlValue(type));
},
- onChildviewClickRemove: function( childView ) {
- childView.model.destroy();
- this.render();
+ onReady: function onReady() {
+ this.initSliders();
+ this.initColors();
},
- onChildviewClickDuplicate: function( childView ) {
- var newModel = this.createItemModel( childView.model.toJSON(), {}, this );
- this.addRow( newModel, { at: childView.itemIndex } );
- this.render();
- },
+ onSlideChange: function onSlideChange(event, ui) {
+ var type = event.currentTarget.dataset.input,
+ $input = this.ui.input.filter('[data-setting="' + type + '"]');
- onChildviewClickEdit: function( childView ) {
- this.editRow( childView );
+ $input.val(ui.value);
+ this.setValue(type, ui.value);
},
- onAfterExternalChange: function() {
- // Update the collection with current value
- this.fillCollection();
+ onBeforeDestroy: function onBeforeDestroy() {
+ this.ui.colors.each(function () {
+ var $color = jQuery(this);
- ControlBaseDataView.prototype.onAfterExternalChange.apply( this, arguments );
- }
-} );
+ if ($color.wpColorPicker('instance')) {
+ $color.wpColorPicker('close');
+ }
+ });
-module.exports = ControlRepeaterItemView;
+ this.$el.remove();
+ }
+});
-},{"elementor-controls/base-data":37,"elementor-controls/repeater-row":56,"elementor-elements/models/base-settings":68}],58:[function(require,module,exports){
-var ControlBaseView = require( 'elementor-controls/base' ),
- ControlSectionItemView;
+module.exports = ControlBoxShadowItemView;
-ControlSectionItemView = ControlBaseView.extend( {
- ui: function() {
- var ui = ControlBaseView.prototype.ui.apply( this, arguments );
+/***/ }),
+/* 33 */
+/***/ (function(module, exports, __webpack_require__) {
- ui.heading = '.elementor-panel-heading';
+"use strict";
- return ui;
- },
- triggers: {
- 'click': 'control:section:clicked'
- }
-} );
+var ControlBaseDataView = __webpack_require__(0),
+ ControlChooseItemView;
-module.exports = ControlSectionItemView;
+ControlChooseItemView = ControlBaseDataView.extend({
+ ui: function ui() {
+ var ui = ControlBaseDataView.prototype.ui.apply(this, arguments);
-},{"elementor-controls/base":40}],59:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlSelect2ItemView;
+ ui.inputs = '[type="radio"]';
-ControlSelect2ItemView = ControlBaseDataView.extend( {
- getSelect2Placeholder: function() {
- return this.ui.select.children( 'option:first[value=""]' ).text();
+ return ui;
},
- getSelect2DefaultOptions: function() {
- return {
- allowClear: true,
- placeholder: this.getSelect2Placeholder(),
- dir: elementor.config.is_rtl ? 'rtl' : 'ltr'
- };
+ events: function events() {
+ return _.extend(ControlBaseDataView.prototype.events.apply(this, arguments), {
+ 'mousedown label': 'onMouseDownLabel',
+ 'click @ui.inputs': 'onClickInput',
+ 'change @ui.inputs': 'onBaseInputChange'
+ });
},
- getSelect2Options: function() {
- return jQuery.extend( this.getSelect2DefaultOptions(), this.model.get( 'select2options' ) );
- },
+ onMouseDownLabel: function onMouseDownLabel(event) {
+ var $clickedLabel = this.$(event.currentTarget),
+ $selectedInput = this.$('#' + $clickedLabel.attr('for'));
- onReady: function() {
- this.ui.select.select2( this.getSelect2Options() );
+ $selectedInput.data('checked', $selectedInput.prop('checked'));
},
- onBeforeDestroy: function() {
- if ( this.ui.select.data( 'select2' ) ) {
- this.ui.select.select2( 'destroy' );
+ onClickInput: function onClickInput(event) {
+ if (!this.model.get('toggle')) {
+ return;
}
- this.$el.remove();
- }
-} );
+ var $selectedInput = this.$(event.currentTarget);
-module.exports = ControlSelect2ItemView;
+ if ($selectedInput.data('checked')) {
+ $selectedInput.prop('checked', false).trigger('change');
+ }
+ },
-},{"elementor-controls/base-data":37}],60:[function(require,module,exports){
-var ControlBaseUnitsItemView = require( 'elementor-controls/base-units' ),
- ControlSliderItemView;
+ onRender: function onRender() {
+ ControlBaseDataView.prototype.onRender.apply(this, arguments);
-ControlSliderItemView = ControlBaseUnitsItemView.extend( {
- ui: function() {
- var ui = ControlBaseUnitsItemView.prototype.ui.apply( this, arguments );
+ var currentValue = this.getControlValue();
- ui.slider = '.elementor-slider';
+ if (currentValue) {
+ this.ui.inputs.filter('[value="' + currentValue + '"]').prop('checked', true);
+ }
+ }
+}, {
- return ui;
- },
+ onPasteStyle: function onPasteStyle(control, clipboardValue) {
+ return '' === clipboardValue || undefined !== control.options[clipboardValue];
+ }
+});
- events: function() {
- return _.extend( ControlBaseUnitsItemView.prototype.events.apply( this, arguments ), {
- 'slide @ui.slider': 'onSlideChange'
- } );
- },
+module.exports = ControlChooseItemView;
- initSlider: function() {
- var size = this.getControlValue( 'size' ),
- unitRange = this.getCurrentRange();
+/***/ }),
+/* 34 */
+/***/ (function(module, exports, __webpack_require__) {
- this.ui.input.attr( unitRange ).val( size );
+"use strict";
- this.ui.slider.slider( _.extend( {}, unitRange, { value: size } ) );
- },
- resetSize: function() {
- this.setValue( 'size', '' );
+var ControlBaseMultipleItemView = __webpack_require__(4),
+ ControlBaseUnitsItemView;
- this.initSlider();
- },
+ControlBaseUnitsItemView = ControlBaseMultipleItemView.extend({
- onReady: function() {
- this.initSlider();
+ getCurrentRange: function getCurrentRange() {
+ return this.getUnitRange(this.getControlValue('unit'));
},
- onSlideChange: function( event, ui ) {
- this.setValue( 'size', ui.value );
+ getUnitRange: function getUnitRange(unit) {
+ var ranges = this.model.get('range');
- this.ui.input.val( ui.value );
- },
+ if (!ranges || !ranges[unit]) {
+ return false;
+ }
- onInputChange: function( event ) {
- var dataChanged = event.currentTarget.dataset.setting;
+ return ranges[unit];
+ }
+});
- if ( 'size' === dataChanged ) {
- this.ui.slider.slider( 'value', this.getControlValue( 'size' ) );
- } else if ( 'unit' === dataChanged ) {
- this.resetSize();
- }
+module.exports = ControlBaseUnitsItemView;
+
+/***/ }),
+/* 35 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var ControlBaseDataView = __webpack_require__(0),
+ RepeaterRowView;
+
+RepeaterRowView = Marionette.CompositeView.extend({
+ template: Marionette.TemplateCache.get('#tmpl-elementor-repeater-row'),
+
+ className: 'elementor-repeater-fields',
+
+ ui: {
+ duplicateButton: '.elementor-repeater-tool-duplicate',
+ editButton: '.elementor-repeater-tool-edit',
+ removeButton: '.elementor-repeater-tool-remove',
+ itemTitle: '.elementor-repeater-row-item-title'
},
- onBeforeDestroy: function() {
- if ( this.ui.slider.data( 'uiSlider' ) ) {
- this.ui.slider.slider( 'destroy' );
+ behaviors: {
+ HandleInnerTabs: {
+ behaviorClass: __webpack_require__(31)
}
+ },
- this.$el.remove();
- }
-} );
+ triggers: {
+ 'click @ui.removeButton': 'click:remove',
+ 'click @ui.duplicateButton': 'click:duplicate',
+ 'click @ui.itemTitle': 'click:edit'
+ },
-module.exports = ControlSliderItemView;
+ modelEvents: {
+ change: 'onModelChange'
+ },
+
+ templateHelpers: function templateHelpers() {
+ return {
+ itemIndex: this.getOption('itemIndex')
+ };
+ },
-},{"elementor-controls/base-units":39}],61:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlStructureItemView;
+ childViewContainer: '.elementor-repeater-row-controls',
-ControlStructureItemView = ControlBaseDataView.extend( {
- ui: function() {
- var ui = ControlBaseDataView.prototype.ui.apply( this, arguments );
+ getChildView: function getChildView(item) {
+ var controlType = item.get('type');
- ui.resetStructure = '.elementor-control-structure-reset';
+ return elementor.getControlView(controlType);
+ },
- return ui;
+ childViewOptions: function childViewOptions() {
+ return {
+ elementSettingsModel: this.model
+ };
},
- events: function() {
- return _.extend( ControlBaseDataView.prototype.events.apply( this, arguments ), {
- 'click @ui.resetStructure': 'onResetStructureClick'
- } );
+ updateIndex: function updateIndex(newIndex) {
+ this.itemIndex = newIndex;
},
- templateHelpers: function() {
- var helpers = ControlBaseDataView.prototype.templateHelpers.apply( this, arguments );
+ setTitle: function setTitle() {
+ var titleField = this.getOption('titleField'),
+ title = '';
- helpers.getMorePresets = this.getMorePresets.bind( this );
+ if (titleField) {
+ var values = {};
- return helpers;
- },
+ this.children.each(function (child) {
+ if (!(child instanceof ControlBaseDataView)) {
+ return;
+ }
- getCurrentEditedSection: function() {
- var editor = elementor.getPanelView().getCurrentPageView();
+ values[child.model.get('name')] = child.getControlValue();
+ });
+
+ title = Marionette.TemplateCache.prototype.compileTemplate(titleField)(this.model.parseDynamicSettings());
+ }
+
+ if (!title) {
+ title = elementor.translate('Item #{0}', [this.getOption('itemIndex')]);
+ }
- return editor.getOption( 'editedElementView' );
+ this.ui.itemTitle.html(title);
},
- getMorePresets: function() {
- var parsedStructure = elementor.presetsFactory.getParsedStructure( this.getControlValue() );
+ initialize: function initialize(options) {
+ this.itemIndex = 0;
- return elementor.presetsFactory.getPresets( parsedStructure.columnsCount );
+ // Collection for Controls list
+ this.collection = new Backbone.Collection(_.values(elementor.mergeControlsSettings(options.controlFields)));
},
- onInputChange: function() {
- this.getCurrentEditedSection().redefineLayout();
+ onRender: function onRender() {
+ this.setTitle();
+ },
- this.render();
+ onModelChange: function onModelChange() {
+ if (this.getOption('titleField')) {
+ this.setTitle();
+ }
},
- onResetStructureClick: function() {
- this.getCurrentEditedSection().resetColumnsCustomSize();
+ onChildviewResponsiveSwitcherClick: function onChildviewResponsiveSwitcherClick(childView, device) {
+ if ('desktop' === device) {
+ elementor.getPanelView().getCurrentPageView().$el.toggleClass('elementor-responsive-switchers-open');
+ }
}
-} );
+});
-module.exports = ControlStructureItemView;
+module.exports = RepeaterRowView;
-},{"elementor-controls/base-data":37}],62:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' );
+/***/ }),
+/* 36 */
+/***/ (function(module, exports, __webpack_require__) {
-module.exports = ControlBaseDataView.extend( {
- setInputValue: function( input, value ) {
- this.$( input ).prop( 'checked', this.model.get( 'return_value' ) === value );
- }
-} );
+"use strict";
-},{"elementor-controls/base-data":37}],63:[function(require,module,exports){
-var ControlBaseView = require( 'elementor-controls/base' ),
- ControlTabItemView;
-ControlTabItemView = ControlBaseView.extend( {
- triggers: {
- 'click': {
- event: 'control:tab:clicked',
- stopPropagation: false
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var BaseSettingsModel = __webpack_require__(3),
+ ColumnSettingsModel = __webpack_require__(125),
+ ElementModel;
+
+ElementModel = Backbone.Model.extend({
+ defaults: {
+ id: '',
+ elType: '',
+ isInner: false,
+ settings: {},
+ defaultEditSettings: {}
+ },
+
+ remoteRender: false,
+ _htmlCache: null,
+ _jqueryXhr: null,
+ renderOnLeave: false,
+
+ initialize: function initialize(options) {
+ var elType = this.get('elType'),
+ elements = this.get('elements');
+
+ if (undefined !== elements) {
+ var ElementsCollection = __webpack_require__(37);
+
+ this.set('elements', new ElementsCollection(elements));
}
- }
-} );
-module.exports = ControlTabItemView;
+ if ('widget' === elType) {
+ this.remoteRender = true;
+ this.setHtmlCache(options.htmlCache || '');
+ }
-},{"elementor-controls/base":40}],64:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlWPWidgetItemView;
+ // No need this variable anymore
+ delete options.htmlCache;
-ControlWPWidgetItemView = ControlBaseDataView.extend( {
- ui: function() {
- var ui = ControlBaseDataView.prototype.ui.apply( this, arguments );
+ // Make call to remote server as throttle function
+ this.renderRemoteServer = _.throttle(this.renderRemoteServer, 1000);
- ui.form = 'form';
- ui.loading = '.wp-widget-form-loading';
+ this.initSettings();
- return ui;
+ this.initEditSettings();
+
+ this.on({
+ destroy: this.onDestroy,
+ 'editor:close': this.onCloseEditor
+ });
},
- events: function() {
- return {
- 'keyup @ui.form :input': 'onFormChanged',
- 'change @ui.form :input': 'onFormChanged'
- };
+ initSettings: function initSettings() {
+ var elType = this.get('elType'),
+ settings = this.get('settings'),
+ settingModels = {
+ column: ColumnSettingsModel
+ },
+ SettingsModel = settingModels[elType] || BaseSettingsModel;
+
+ if (jQuery.isEmptyObject(settings)) {
+ settings = elementor.helpers.cloneObject(settings);
+ }
+
+ if ('widget' === elType) {
+ settings.widgetType = this.get('widgetType');
+ }
+
+ settings.elType = elType;
+ settings.isInner = this.get('isInner');
+
+ settings = new SettingsModel(settings, {
+ controls: elementor.getElementControls(this)
+ });
+
+ this.set('settings', settings);
+
+ elementorFrontend.config.elements.data[this.cid] = settings;
},
- onFormChanged: function() {
- var idBase = 'widget-' + this.model.get( 'id_base' ),
- settings = this.ui.form.elementorSerializeObject()[ idBase ].REPLACE_TO_ID;
+ initEditSettings: function initEditSettings() {
+ var editSettings = new Backbone.Model(this.get('defaultEditSettings'));
- this.setValue( settings );
+ this.set('editSettings', editSettings);
+
+ elementorFrontend.config.elements.editSettings[this.cid] = editSettings;
},
- onReady: function() {
- var self = this;
+ setSetting: function setSetting(key, value) {
+ var settings = this.get('settings');
- elementor.ajax.addRequest( 'editor_get_wp_widget_form', {
- data: {
- // Fake Widget ID
- id: self.model.cid,
- widget_type: self.model.get( 'widget' ),
- data: self.elementSettingsModel.toJSON()
- },
- success: function( data ) {
- self.ui.form.html( data );
- // WP >= 4.8
- if ( wp.textWidgets ) {
- self.ui.form.addClass( 'open' );
- var event = new jQuery.Event( 'widget-added' );
- wp.textWidgets.handleWidgetAdded( event, self.ui.form );
- wp.mediaWidgets.handleWidgetAdded( event, self.ui.form );
+ if ('object' !== (typeof key === 'undefined' ? 'undefined' : _typeof(key))) {
+ var keyParts = key.split('.'),
+ isRepeaterKey = 3 === keyParts.length;
- // WP >= 4.9
- if ( wp.customHtmlWidgets ) {
- wp.customHtmlWidgets.handleWidgetAdded( event, self.ui.form );
- }
- }
+ key = keyParts[0];
+
+ if (isRepeaterKey) {
+ settings = settings.get(key).models[keyParts[1]];
- elementor.hooks.doAction( 'panel/widgets/' + self.model.get( 'widget' ) + '/controls/wp_widget/loaded', self );
+ key = keyParts[2];
}
- } );
- }
-} );
+ }
-module.exports = ControlWPWidgetItemView;
+ settings.setExternalChange(key, value);
+ },
-},{"elementor-controls/base-data":37}],65:[function(require,module,exports){
-var ControlBaseDataView = require( 'elementor-controls/base-data' ),
- ControlWysiwygItemView;
+ getSetting: function getSetting(key) {
+ var keyParts = key.split('.'),
+ isRepeaterKey = 3 === keyParts.length,
+ settings = this.get('settings');
-ControlWysiwygItemView = ControlBaseDataView.extend( {
+ key = keyParts[0];
- editor: null,
+ var value = settings.get(key);
- ui: function() {
- var ui = ControlBaseDataView.prototype.ui.apply( this, arguments );
+ if (undefined === value) {
+ return '';
+ }
- jQuery.extend( ui, {
- inputWrapper: '.elementor-control-input-wrapper'
- } );
+ if (isRepeaterKey) {
+ value = value.models[keyParts[1]].get(keyParts[2]);
+ }
- return ui;
+ return value;
},
- events: function() {
- return _.extend( ControlBaseDataView.prototype.events.apply( this, arguments ), {
- 'keyup textarea.elementor-wp-editor': 'onBaseInputChange'
- } );
+ setHtmlCache: function setHtmlCache(htmlCache) {
+ this._htmlCache = htmlCache;
},
- // List of buttons to move {buttonToMove: afterButton}
- buttons: {
- addToBasic: {
- underline: 'italic'
- },
- addToAdvanced: {},
- moveToAdvanced: {
- blockquote: 'removeformat',
- alignleft: 'blockquote',
- aligncenter: 'alignleft',
- alignright: 'aligncenter'
- },
- moveToBasic: {},
- removeFromBasic: [ 'unlink', 'wp_more' ],
- removeFromAdvanced: []
+ getHtmlCache: function getHtmlCache() {
+ return this._htmlCache;
},
- initialize: function() {
- ControlBaseDataView.prototype.initialize.apply( this, arguments );
+ getDefaultTitle: function getDefaultTitle() {
+ return elementor.getElementData(this).title;
+ },
- var self = this;
+ getTitle: function getTitle() {
+ var title = this.getSetting('_title');
- self.editorID = 'elementorwpeditor' + self.cid;
+ if (!title) {
+ title = this.getDefaultTitle();
+ }
- // Wait a cycle before initializing the editors.
- _.defer( function() {
- // Initialize QuickTags, and set as the default mode.
- quicktags( {
- buttons: 'strong,em,del,link,img,close',
- id: self.editorID
- } );
+ return title;
+ },
- if ( elementor.config.rich_editing_enabled ) {
- switchEditors.go( self.editorID, 'tmce' );
- }
+ getIcon: function getIcon() {
+ return elementor.getElementData(this).icon;
+ },
- delete QTags.instances[ 0 ];
- } );
+ createRemoteRenderRequest: function createRemoteRenderRequest() {
+ var data = this.toJSON();
- if ( ! elementor.config.rich_editing_enabled ) {
- self.$el.addClass( 'elementor-rich-editing-disabled' );
+ return elementor.ajax.addRequest('render_widget', {
+ unique_id: this.cid,
+ data: {
+ data: data
+ },
+ success: this.onRemoteGetHtml.bind(this)
+ }, true).jqXhr;
+ },
+ renderRemoteServer: function renderRemoteServer() {
+ if (!this.remoteRender) {
return;
}
- var editorConfig = {
- id: self.editorID,
- selector: '#' + self.editorID,
- setup: function( editor ) {
- self.editor = editor;
- }
- };
-
- tinyMCEPreInit.mceInit[ self.editorID ] = _.extend( _.clone( tinyMCEPreInit.mceInit.elementorwpeditor ), editorConfig );
+ this.renderOnLeave = false;
- if ( ! elementor.config.tinymceHasCustomConfig ) {
- self.rearrangeButtons();
- }
- },
+ this.trigger('before:remote:render');
- applySavedValue: function() {
- if ( ! this.editor ) {
- return;
+ if (this.isRemoteRequestActive()) {
+ this._jqueryXhr.abort();
}
- var controlValue = this.getControlValue();
+ this._jqueryXhr = this.createRemoteRenderRequest();
+ },
- this.editor.setContent( controlValue );
+ isRemoteRequestActive: function isRemoteRequestActive() {
+ return this._jqueryXhr && 4 !== this._jqueryXhr.readyState;
+ },
- // Update also the plain textarea
- jQuery( '#' + this.editorID ).val( controlValue );
+ onRemoteGetHtml: function onRemoteGetHtml(data) {
+ this.setHtmlCache(data.render);
+ this.trigger('remote:render');
},
- saveEditor: function() {
- this.editor.save();
+ clone: function clone() {
+ var newModel = new this.constructor(elementor.helpers.cloneObject(this.attributes));
- this.setValue( this.editor.getContent() );
- },
+ newModel.set('id', elementor.helpers.getUniqueID());
- moveButtons: function( buttonsToMove, from, to ) {
- if ( ! to ) {
- to = from;
+ newModel.setHtmlCache(this.getHtmlCache());
- from = null;
+ var elements = this.get('elements');
+
+ if (!_.isEmpty(elements)) {
+ newModel.set('elements', elements.clone());
}
- _.each( buttonsToMove, function( afterButton, button ) {
- var afterButtonIndex = to.indexOf( afterButton );
+ return newModel;
+ },
- if ( from ) {
- var buttonIndex = from.indexOf( button );
+ toJSON: function toJSON(options) {
+ options = _.extend({ copyHtmlCache: false }, options);
- if ( -1 === buttonIndex ) {
- throw new ReferenceError( 'Trying to move non-existing button `' + button + '`' );
- }
+ // Call parent's toJSON method
+ var data = Backbone.Model.prototype.toJSON.call(this);
- from.splice( buttonIndex, 1 );
+ _.each(data, function (attribute, key) {
+ if (attribute && attribute.toJSON) {
+ data[key] = attribute.toJSON(options);
}
+ });
- if ( -1 === afterButtonIndex ) {
- throw new ReferenceError( 'Trying to move button after non-existing button `' + afterButton + '`' );
- }
+ if (options.copyHtmlCache) {
+ data.htmlCache = this.getHtmlCache();
+ } else {
+ delete data.htmlCache;
+ }
+
+ return data;
+ },
- to.splice( afterButtonIndex + 1, 0, button );
- } );
+ onCloseEditor: function onCloseEditor() {
+ if (this.renderOnLeave) {
+ this.renderRemoteServer();
+ }
},
- rearrangeButtons: function() {
- var editorProps = tinyMCEPreInit.mceInit[ this.editorID ],
- editorBasicToolbarButtons = editorProps.toolbar1.split( ',' ),
- editorAdvancedToolbarButtons = editorProps.toolbar2.split( ',' );
+ onDestroy: function onDestroy() {
+ // Clean the memory for all use instances
+ var settings = this.get('settings'),
+ elements = this.get('elements');
- editorBasicToolbarButtons = _.difference( editorBasicToolbarButtons, this.buttons.removeFromBasic );
+ if (undefined !== elements) {
+ _.each(_.clone(elements.models), function (model) {
+ model.destroy();
+ });
+ }
- editorAdvancedToolbarButtons = _.difference( editorAdvancedToolbarButtons, this.buttons.removeFromAdvanced );
+ settings.destroy();
+ }
- this.moveButtons( this.buttons.moveToBasic, editorAdvancedToolbarButtons, editorBasicToolbarButtons );
+});
- this.moveButtons( this.buttons.moveToAdvanced, editorBasicToolbarButtons, editorAdvancedToolbarButtons );
+ElementModel.prototype.sync = ElementModel.prototype.fetch = ElementModel.prototype.save = _.noop;
- this.moveButtons( this.buttons.addToBasic, editorBasicToolbarButtons );
+module.exports = ElementModel;
- this.moveButtons( this.buttons.addToAdvanced, editorAdvancedToolbarButtons );
+/***/ }),
+/* 37 */
+/***/ (function(module, exports, __webpack_require__) {
- editorProps.toolbar1 = editorBasicToolbarButtons.join( ',' );
- editorProps.toolbar2 = editorAdvancedToolbarButtons.join( ',' );
- },
+"use strict";
- onReady: function() {
- var self = this;
- var $editor = jQuery( elementor.config.wp_editor.replace( /elementorwpeditor/g, self.editorID ).replace( '%%EDITORCONTENT%%', self.getControlValue() ) );
+var ElementModel = __webpack_require__(36);
- self.ui.inputWrapper.html( $editor );
+var ElementsCollection = Backbone.Collection.extend({
+ add: function add(models, options, isCorrectSet) {
+ if ((!options || !options.silent) && !isCorrectSet) {
+ throw 'Call Error: Adding model to element collection is allowed only by the dedicated addChildModel() method.';
+ }
- setTimeout( function() {
- self.editor.on( 'keyup change undo redo SetContent', self.saveEditor.bind( self ) );
- }, 100 );
+ return Backbone.Collection.prototype.add.call(this, models, options);
},
- onBeforeDestroy: function() {
- // Remove TinyMCE and QuickTags instances
- delete QTags.instances[ this.editorID ];
+ model: function model(attrs, options) {
+ var ModelClass = Backbone.Model;
- if ( ! elementor.config.rich_editing_enabled ) {
- return;
+ if (attrs.elType) {
+ ModelClass = elementor.hooks.applyFilters('element/model', ElementModel, attrs);
}
- tinymce.EditorManager.execCommand( 'mceRemoveEditor', true, this.editorID );
+ return new ModelClass(attrs, options);
+ },
- // Cleanup PreInit data
- delete tinyMCEPreInit.mceInit[ this.editorID ];
- delete tinyMCEPreInit.qtInit[ this.editorID ];
+ clone: function clone() {
+ var tempCollection = Backbone.Collection.prototype.clone.apply(this, arguments),
+ newCollection = new ElementsCollection();
+
+ tempCollection.forEach(function (model) {
+ newCollection.add(model.clone(), null, true);
+ });
+
+ return newCollection;
}
-} );
+});
-module.exports = ControlWysiwygItemView;
+ElementsCollection.prototype.sync = ElementsCollection.prototype.fetch = ElementsCollection.prototype.save = _.noop;
-},{"elementor-controls/base-data":37}],66:[function(require,module,exports){
-/* global ElementorConfig */
-var App;
+module.exports = ElementsCollection;
-Marionette.TemplateCache.prototype.compileTemplate = function( rawTemplate, options ) {
- options = {
- evaluate: /<#([\s\S]+?)#>/g,
- interpolate: /{{{([\s\S]+?)}}}/g,
- escape: /{{([^}]+?)}}(?!})/g
- };
+/***/ }),
+/* 38 */
+/***/ (function(module, exports, __webpack_require__) {
- return _.template( rawTemplate, options );
-};
+"use strict";
-App = Marionette.Application.extend( {
- previewLoadedOnce: false,
- helpers: require( 'elementor-editor-utils/helpers' ),
- heartbeat: require( 'elementor-editor-utils/heartbeat' ),
- imagesManager: require( 'elementor-editor-utils/images-manager' ),
- debug: require( 'elementor-editor-utils/debug' ),
- schemes: require( 'elementor-editor-utils/schemes' ),
- presetsFactory: require( 'elementor-editor-utils/presets-factory' ),
- templates: require( 'elementor-templates/manager' ),
- ajax: require( 'elementor-editor-utils/ajax' ),
- conditions: require( 'elementor-editor-utils/conditions' ),
- hotKeys: require( 'elementor-utils/hot-keys' ),
- history: require( 'modules/history/assets/js/module' ),
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-global',
- channels: {
- editor: Backbone.Radio.channel( 'ELEMENTOR:editor' ),
- data: Backbone.Radio.channel( 'ELEMENTOR:data' ),
- panelElements: Backbone.Radio.channel( 'ELEMENTOR:panelElements' ),
- dataEditMode: Backbone.Radio.channel( 'ELEMENTOR:editmode' ),
- deviceMode: Backbone.Radio.channel( 'ELEMENTOR:deviceMode' ),
- templates: Backbone.Radio.channel( 'ELEMENTOR:templates' )
+ id: 'elementor-panel-global',
+
+ initialize: function initialize() {
+ elementor.getPanelView().getCurrentPageView().search.reset();
},
- // Exporting modules that can be used externally
- modules: {
- Module: require( 'elementor-utils/module' ),
- components: {
- templateLibrary: {
- views: {
- parts: {
- headerParts: {
- logo: require( 'elementor-templates/views/parts/header-parts/logo' )
- }
- },
- BaseModalLayout: require( 'elementor-templates/views/base-modal-layout' )
- }
- },
- saver: {
- behaviors: {
- FooterSaver: require( './components/saver/behaviors/footer-saver' )
- }
- }
- },
- controls: {
- Animation: require( 'elementor-controls/select2' ),
- Base: require( 'elementor-controls/base' ),
- BaseData: require( 'elementor-controls/base-data' ),
- BaseMultiple: require( 'elementor-controls/base-multiple' ),
- Box_shadow: require( 'elementor-controls/box-shadow' ),
- Button: require( 'elementor-controls/button' ),
- Choose: require( 'elementor-controls/choose' ),
- Code: require( 'elementor-controls/code' ),
- Color: require( 'elementor-controls/color' ),
- Date_time: require( 'elementor-controls/date-time' ),
- Dimensions: require( 'elementor-controls/dimensions' ),
- Font: require( 'elementor-controls/font' ),
- Gallery: require( 'elementor-controls/gallery' ),
- Hover_animation: require( 'elementor-controls/select2' ),
- Icon: require( 'elementor-controls/icon' ),
- Image_dimensions: require( 'elementor-controls/image-dimensions' ),
- Media: require( 'elementor-controls/media' ),
- Number: require( 'elementor-controls/number' ),
- Order: require( 'elementor-controls/order' ),
- Popover_toggle: require( 'elementor-controls/popover-toggle' ),
- Repeater: require( 'elementor-controls/repeater' ),
- RepeaterRow: require( 'elementor-controls/repeater-row' ),
- Section: require( 'elementor-controls/section' ),
- Select2: require( 'elementor-controls/select2' ),
- Slider: require( 'elementor-controls/slider' ),
- Structure: require( 'elementor-controls/structure' ),
- Switcher: require( 'elementor-controls/switcher' ),
- Tab: require( 'elementor-controls/tab' ),
- Text_shadow: require( 'elementor-controls/box-shadow' ),
- Url: require( 'elementor-controls/base-multiple' ),
- Wp_widget: require( 'elementor-controls/wp_widget' ),
- Wysiwyg: require( 'elementor-controls/wysiwyg' )
- },
- elements: {
- models: {
- BaseSettings: require( 'elementor-elements/models/base-settings' ),
- Element: require( 'elementor-elements/models/element' )
- },
- views: {
- Widget: require( 'elementor-elements/views/widget' )
- }
- },
- layouts: {
- panel: {
- pages: {
- elements: {
- views: {
- Global: require( 'elementor-panel/pages/elements/views/global' ),
- Elements: require( 'elementor-panel/pages/elements/views/elements' )
- }
- },
- menu: {
- Menu: require( 'elementor-panel/pages/menu/menu' )
- }
+ onDestroy: function onDestroy() {
+ var panel = elementor.getPanelView();
+
+ if ('elements' === panel.getCurrentPageName()) {
+ setTimeout(function () {
+ var elementsPageView = panel.getCurrentPageView();
+
+ if (!elementsPageView.search.currentView) {
+ elementsPageView.showView('search');
}
- }
- },
- views: {
- ControlsStack: require( 'elementor-views/controls-stack' )
+ });
}
- },
+ }
+});
- backgroundClickListeners: {
- popover: {
- element: '.elementor-controls-popover',
- ignore: '.elementor-control-popover-toggle-toggle, .elementor-control-popover-toggle-toggle-label, .select2-container'
- },
- tagsList: {
- element: '.elementor-tags-list',
- ignore: '.elementor-control-dynamic-switcher'
+/***/ }),
+/* 39 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var PanelElementsElementView;
+
+PanelElementsElementView = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-element-library-element',
+
+ className: 'elementor-element-wrapper',
+
+ onRender: function onRender() {
+ var self = this;
+ if (!elementor.userCan('design')) {
+ return;
}
- },
- // TODO: Temp modules bc method since 2.0.0
- initModulesBC: function() {
- var bcModules = {
- ControlsStack: this.modules.views.ControlsStack,
- element: {
- Model: this.modules.elements.models.Element
- },
- RepeaterRowView: this.modules.controls.RepeaterRow,
- WidgetView: this.modules.elements.views.Widget,
- panel: {
- Menu: this.modules.layouts.panel.pages.menu.Menu
+ this.$el.html5Draggable({
+
+ onDragStart: function onDragStart() {
+ elementor.channels.panelElements.reply('element:selected', self).trigger('element:drag:start');
},
- saver: {
- footerBehavior: this.modules.components.saver.behaviors.FooterSaver
+
+ onDragEnd: function onDragEnd() {
+ elementor.channels.panelElements.trigger('element:drag:end');
},
- SettingsModel: this.modules.elements.models.BaseSettings,
- templateLibrary: {
- ElementsCollectionView: this.modules.layouts.panel.pages.elements.views.Elements
- }
- };
- jQuery.extend( this.modules, bcModules );
- },
+ groups: ['elementor-element']
+ });
+ }
+});
- userCan: function( capability ) {
- return -1 === this.config.user.restrictions.indexOf( capability );
- },
+module.exports = PanelElementsElementView;
- _defaultDeviceMode: 'desktop',
+/***/ }),
+/* 40 */
+/***/ (function(module, exports, __webpack_require__) {
- addControlView: function( controlID, ControlView ) {
- this.modules.controls[ controlID[0].toUpperCase() + controlID.slice( 1 ) ] = ControlView;
- },
+"use strict";
- checkEnvCompatibility: function() {
- return this.envData.gecko || this.envData.webkit;
- },
- getElementData: function( modelElement ) {
- var elType = modelElement.get( 'elType' );
+var PanelElementsElementModel;
- if ( 'widget' === elType ) {
- var widgetType = modelElement.get( 'widgetType' );
+PanelElementsElementModel = Backbone.Model.extend({
+ defaults: {
+ title: '',
+ categories: [],
+ keywords: [],
+ icon: '',
+ elType: 'widget',
+ widgetType: ''
+ }
+});
- if ( ! this.config.widgets[ widgetType ] ) {
- return false;
- }
+module.exports = PanelElementsElementModel;
- return this.config.widgets[ widgetType ];
- }
+/***/ }),
+/* 41 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( ! this.config.elements[ elType ] ) {
- return false;
- }
+"use strict";
- return this.config.elements[ elType ];
- },
- getElementControls: function( modelElement ) {
- var self = this,
- elementData = self.getElementData( modelElement );
+var PanelElementsElementModel = __webpack_require__(40),
+ PanelElementsElementsCollection;
- if ( ! elementData ) {
- return false;
- }
+PanelElementsElementsCollection = Backbone.Collection.extend({
+ model: PanelElementsElementModel /*,
+ comparator: 'title'*/
+});
- var isInner = modelElement.get( 'isInner' ),
- controls = {},
- userCanEditStyle = elementor.userCan( 'design' );
+module.exports = PanelElementsElementsCollection;
- _.each( elementData.controls, function( controlData, controlKey ) {
- if ( isInner && controlData.hide_in_inner || ! isInner && controlData.hide_in_top ) {
- return;
- }
+/***/ }),
+/* 42 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( ! userCanEditStyle && 'content' !== controlData.tab ) {
- return;
- }
+"use strict";
- controls[ controlKey ] = controlData;
- } );
- return controls;
- },
+var PanelSchemeBaseView = __webpack_require__(43),
+ PanelSchemeColorsView;
- mergeControlsSettings: function( controls ) {
- var self = this;
+PanelSchemeColorsView = PanelSchemeBaseView.extend({
+ ui: function ui() {
+ var ui = PanelSchemeBaseView.prototype.ui.apply(this, arguments);
- _.each( controls, function( controlData, controlKey ) {
- controls[ controlKey ] = jQuery.extend( true, {}, self.config.controls[ controlData.type ], controlData );
- } );
+ ui.systemSchemes = '.elementor-panel-scheme-color-system-scheme';
- return controls;
+ return ui;
},
- getControlView: function( controlID ) {
- var capitalizedControlName = controlID[0].toUpperCase() + controlID.slice( 1 ),
- View = this.modules.controls[ capitalizedControlName ];
-
- if ( ! View ) {
- var controlData = this.config.controls[ controlID ],
- isUIControl = -1 !== controlData.features.indexOf( 'ui' );
+ events: function events() {
+ var events = PanelSchemeBaseView.prototype.events.apply(this, arguments);
- View = this.modules.controls[ isUIControl ? 'Base' : 'BaseData' ];
- }
+ events['click @ui.systemSchemes'] = 'onSystemSchemeClick';
- return View;
+ return events;
},
- getPanelView: function() {
- return this.getRegion( 'panel' ).currentView;
+ getType: function getType() {
+ return 'color';
},
- initEnvData: function() {
- this.envData = _.pick( tinymce.EditorManager.Env, [ 'desktop', 'webkit', 'gecko', 'ie', 'opera' ] );
- },
+ onSystemSchemeClick: function onSystemSchemeClick(event) {
+ var $schemeClicked = jQuery(event.currentTarget),
+ schemeName = $schemeClicked.data('schemeName'),
+ scheme = elementor.config.system_schemes[this.getType()][schemeName].items;
- initComponents: function() {
- var EventManager = require( 'elementor-utils/hooks' ),
- DynamicTags = require( 'elementor-dynamic-tags/manager' ),
- Settings = require( 'elementor-editor/components/settings/settings' ),
- Saver = require( 'elementor-editor/components/saver/manager' ),
- Notifications = require( 'elementor-editor-utils/notifications' );
+ this.changeChildrenUIValues(scheme);
+ }
+});
- this.hooks = new EventManager();
+module.exports = PanelSchemeColorsView;
- this.saver = new Saver();
+/***/ }),
+/* 43 */
+/***/ (function(module, exports, __webpack_require__) {
- this.settings = new Settings();
+"use strict";
- this.dynamicTags = new DynamicTags();
- /**
- * @deprecated 1.6.0 - use `this.settings.page` instead
- */
- this.pageSettings = this.settings.page;
+var childViewTypes = {
+ color: __webpack_require__(149),
+ typography: __webpack_require__(150)
+},
+ PanelSchemeBaseView;
- this.templates.init();
+PanelSchemeBaseView = Marionette.CompositeView.extend({
+ id: function id() {
+ return 'elementor-panel-scheme-' + this.getType();
+ },
- this.initDialogsManager();
+ className: function className() {
+ return 'elementor-panel-scheme elementor-panel-scheme-' + this.getUIType();
+ },
- this.notifications = new Notifications();
+ childViewContainer: '.elementor-panel-scheme-items',
- this.ajax.init();
+ getTemplate: function getTemplate() {
+ return Marionette.TemplateCache.get('#tmpl-elementor-panel-schemes-' + this.getType());
},
- initDialogsManager: function() {
- this.dialogsManager = new DialogsManager.Instance();
+ getChildView: function getChildView() {
+ return childViewTypes[this.getUIType()];
},
- initElements: function() {
- var ElementCollection = require( 'elementor-elements/collections/elements' ),
- config = this.config.data;
+ getUIType: function getUIType() {
+ return this.getType();
+ },
- // If it's an reload, use the not-saved data
- if ( this.elements ) {
- config = this.elements.toJSON();
- }
+ ui: function ui() {
+ return {
+ saveButton: '.elementor-panel-scheme-save .elementor-button',
+ discardButton: '.elementor-panel-scheme-discard .elementor-button',
+ resetButton: '.elementor-panel-scheme-reset .elementor-button'
+ };
+ },
- this.elements = new ElementCollection( config );
+ events: function events() {
+ return {
+ 'click @ui.saveButton': 'saveScheme',
+ 'click @ui.discardButton': 'discardScheme',
+ 'click @ui.resetButton': 'setDefaultScheme'
+ };
},
- initPreview: function() {
- var $ = jQuery;
+ initialize: function initialize() {
+ this.model = new Backbone.Model();
- this.$previewWrapper = $( '#elementor-preview' );
+ this.resetScheme();
+ },
- this.$previewResponsiveWrapper = $( '#elementor-preview-responsive-wrapper' );
+ getType: function getType() {},
- var previewIframeId = 'elementor-preview-iframe';
+ getScheme: function getScheme() {
+ return elementor.schemes.getScheme(this.getType());
+ },
- // Make sure the iFrame does not exist.
- if ( ! this.$preview ) {
- this.$preview = $( '<iframe>', {
- id: previewIframeId,
- src: this.config.document.urls.preview,
- allowfullscreen: 1
- } );
+ changeChildrenUIValues: function changeChildrenUIValues(schemeItems) {
+ var self = this;
- this.$previewResponsiveWrapper.append( this.$preview );
- }
+ _.each(schemeItems, function (value, key) {
+ var model = self.collection.findWhere({ key: key }),
+ childView = self.children.findByModelCid(model.cid);
- this.$preview.on( 'load', this.onPreviewLoaded.bind( this ) );
+ childView.changeUIValue(value);
+ });
},
- initFrontend: function() {
- var frontendWindow = this.$preview[0].contentWindow;
+ discardScheme: function discardScheme() {
+ elementor.schemes.resetSchemes(this.getType());
- window.elementorFrontend = frontendWindow.elementorFrontend;
+ this.onSchemeChange();
- frontendWindow.elementor = this;
+ this.ui.saveButton.prop('disabled', true);
- elementorFrontend.init();
+ this._renderChildren();
+ },
- elementorFrontend.elementsHandler.initHandlers();
+ setSchemeValue: function setSchemeValue(key, value) {
+ elementor.schemes.setSchemeValue(this.getType(), key, value);
- this.trigger( 'frontend:init' );
+ this.onSchemeChange();
},
- initClearPageDialog: function() {
- var self = this,
- dialog;
+ saveScheme: function saveScheme() {
+ elementor.schemes.saveScheme(this.getType());
- self.getClearPageDialog = function() {
- if ( dialog ) {
- return dialog;
- }
+ this.ui.saveButton.prop('disabled', true);
- dialog = this.dialogsManager.createWidget( 'confirm', {
- id: 'elementor-clear-page-dialog',
- headerMessage: elementor.translate( 'clear_page' ),
- message: elementor.translate( 'dialog_confirm_clear_page' ),
- position: {
- my: 'center center',
- at: 'center center'
- },
- strings: {
- confirm: elementor.translate( 'delete' ),
- cancel: elementor.translate( 'cancel' )
- },
- onConfirm: function() {
- self.getRegion( 'sections' ).currentView.collection.reset();
- }
- } );
+ this.resetScheme();
- return dialog;
- };
+ this._renderChildren();
},
- initHotKeys: function() {
- var keysDictionary = {
- del: 46,
- d: 68,
- l: 76,
- m: 77,
- p: 80,
- s: 83
- };
+ setDefaultScheme: function setDefaultScheme() {
+ var defaultScheme = elementor.config.default_schemes[this.getType()].items;
- var $ = jQuery,
- hotKeysHandlers = {},
- hotKeysManager = this.hotKeys;
+ this.changeChildrenUIValues(defaultScheme);
+ },
- hotKeysHandlers[ keysDictionary.del ] = {
- deleteElement: {
- isWorthHandling: function( event ) {
- var isEditorOpen = 'editor' === elementor.getPanelView().getCurrentPageName();
+ resetItems: function resetItems() {
+ this.model.set('items', this.getScheme().items);
+ },
- if ( ! isEditorOpen ) {
- return false;
- }
+ resetCollection: function resetCollection() {
+ var self = this,
+ items = self.model.get('items');
- var $target = $( event.target );
+ self.collection = new Backbone.Collection();
- if ( $target.is( ':input, .elementor-input' ) ) {
- return false;
- }
+ _.each(items, function (item, key) {
+ item.type = self.getType();
+ item.key = key;
- return ! $target.closest( '[contenteditable="true"]' ).length;
- },
- handle: function() {
- elementor.getPanelView().getCurrentPageView().getOption( 'editedElementView' ).removeElement();
- }
- }
- };
+ self.collection.add(item);
+ });
+ },
- hotKeysHandlers[ keysDictionary.d ] = {
- duplicateElement: {
- isWorthHandling: function( event ) {
- return hotKeysManager.isControlEvent( event );
- },
- handle: function() {
- var panel = elementor.getPanelView();
+ resetScheme: function resetScheme() {
+ this.resetItems();
+ this.resetCollection();
+ },
- if ( 'editor' !== panel.getCurrentPageName() ) {
- return;
- }
+ onSchemeChange: function onSchemeChange() {
+ elementor.schemes.printSchemesStyle();
+ },
- panel.getCurrentPageView().getOption( 'editedElementView' ).duplicate();
- }
- }
- };
+ onChildviewValueChange: function onChildviewValueChange(childView, newValue) {
+ this.ui.saveButton.removeProp('disabled');
- hotKeysHandlers[ keysDictionary.l ] = {
- showTemplateLibrary: {
- isWorthHandling: function( event ) {
- return hotKeysManager.isControlEvent( event ) && event.shiftKey;
- },
- handle: function() {
- elementor.templates.startModal();
- }
- }
- };
+ this.setSchemeValue(childView.model.get('key'), newValue);
+ }
+});
- hotKeysHandlers[ keysDictionary.m ] = {
- changeDeviceMode: {
- devices: [ 'desktop', 'tablet', 'mobile' ],
- isWorthHandling: function( event ) {
- return hotKeysManager.isControlEvent( event ) && event.shiftKey;
- },
- handle: function() {
- var currentDeviceMode = elementor.channels.deviceMode.request( 'currentMode' ),
- modeIndex = this.devices.indexOf( currentDeviceMode );
+module.exports = PanelSchemeBaseView;
- modeIndex++;
+/***/ }),
+/* 44 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( modeIndex >= this.devices.length ) {
- modeIndex = 0;
- }
+"use strict";
- elementor.changeDeviceMode( this.devices[ modeIndex ] );
- }
- }
- };
- hotKeysHandlers[ keysDictionary.p ] = {
- changeEditMode: {
- isWorthHandling: function( event ) {
- return hotKeysManager.isControlEvent( event );
- },
- handle: function() {
- elementor.getPanelView().modeSwitcher.currentView.toggleMode();
- }
- }
- };
+var PanelSchemeItemView;
- hotKeysHandlers[ keysDictionary.s ] = {
- saveEditor: {
- isWorthHandling: function( event ) {
- return hotKeysManager.isControlEvent( event );
- },
- handle: function() {
- elementor.saver.saveDraft();
- }
+PanelSchemeItemView = Marionette.ItemView.extend({
+ getTemplate: function getTemplate() {
+ return Marionette.TemplateCache.get('#tmpl-elementor-panel-scheme-' + this.getUIType() + '-item');
+ },
+
+ className: function className() {
+ return 'elementor-panel-scheme-item';
+ }
+});
+
+module.exports = PanelSchemeItemView;
+
+/***/ }),
+/* 45 */
+/***/ (function(module, exports, __webpack_require__) {
+
+__webpack_require__(46);
+__webpack_require__(47);
+module.exports = __webpack_require__(48);
+
+
+/***/ }),
+/* 46 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/*
+ * jQuery Serialize Object v1.0.1
+ */
+(function ($) {
+ $.fn.elementorSerializeObject = function () {
+ var serializedArray = this.serializeArray(),
+ data = {};
+
+ var parseObject = function parseObject(dataContainer, key, value) {
+ var isArrayKey = /^[^\[\]]+\[]/.test(key),
+ isObjectKey = /^[^\[\]]+\[[^\[\]]+]/.test(key),
+ keyName = key.replace(/\[.*/, '');
+
+ if (isArrayKey) {
+ if (!dataContainer[keyName]) {
+ dataContainer[keyName] = [];
+ }
+ } else {
+ if (!isObjectKey) {
+ if (dataContainer.push) {
+ dataContainer.push(value);
+ } else {
+ dataContainer[keyName] = value;
+ }
+
+ return;
+ }
+
+ if (!dataContainer[keyName]) {
+ dataContainer[keyName] = {};
+ }
+ }
+
+ var nextKeys = key.match(/\[[^\[\]]*]/g);
+
+ nextKeys[0] = nextKeys[0].replace(/\[|]/g, '');
+
+ return parseObject(dataContainer[keyName], nextKeys.join(''), value);
+ };
+
+ $.each(serializedArray, function () {
+ parseObject(data, this.name, this.value);
+ });
+ return data;
+ };
+})(jQuery);
+
+/***/ }),
+/* 47 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+/**
+ * HTML5 - Drag and Drop
+ */
+;(function ($) {
+
+ var hasFullDataTransferSupport = function hasFullDataTransferSupport(event) {
+ try {
+ event.originalEvent.dataTransfer.setData('test', 'test');
+
+ event.originalEvent.dataTransfer.clearData('test');
+
+ return true;
+ } catch (e) {
+ return false;
+ }
+ };
+
+ var Draggable = function Draggable(userSettings) {
+ var self = this,
+ settings = {},
+ elementsCache = {},
+ defaultSettings = {
+ element: '',
+ groups: null,
+ onDragStart: null,
+ onDragEnd: null
+ };
+
+ var initSettings = function initSettings() {
+ $.extend(true, settings, defaultSettings, userSettings);
+ };
+
+ var initElementsCache = function initElementsCache() {
+ elementsCache.$element = $(settings.element);
+ };
+
+ var buildElements = function buildElements() {
+ elementsCache.$element.attr('draggable', true);
+ };
+
+ var onDragEnd = function onDragEnd(event) {
+ if ($.isFunction(settings.onDragEnd)) {
+ settings.onDragEnd.call(elementsCache.$element, event, self);
+ }
+ };
+
+ var onDragStart = function onDragStart(event) {
+ var groups = settings.groups || [],
+ dataContainer = {
+ groups: groups
+ };
+
+ if (hasFullDataTransferSupport(event)) {
+ event.originalEvent.dataTransfer.setData(JSON.stringify(dataContainer), true);
+ }
+
+ if ($.isFunction(settings.onDragStart)) {
+ settings.onDragStart.call(elementsCache.$element, event, self);
+ }
+ };
+
+ var attachEvents = function attachEvents() {
+ elementsCache.$element.on('dragstart', onDragStart).on('dragend', onDragEnd);
+ };
+
+ var init = function init() {
+ initSettings();
+
+ initElementsCache();
+
+ buildElements();
+
+ attachEvents();
+ };
+
+ this.destroy = function () {
+ elementsCache.$element.off('dragstart', onDragStart);
+
+ elementsCache.$element.removeAttr('draggable');
+ };
+
+ init();
+ };
+
+ var Droppable = function Droppable(userSettings) {
+ var self = this,
+ settings = {},
+ elementsCache = {},
+ currentElement,
+ currentSide,
+ defaultSettings = {
+ element: '',
+ items: '>',
+ horizontalSensitivity: '10%',
+ axis: ['vertical', 'horizontal'],
+ placeholder: true,
+ currentElementClass: 'html5dnd-current-element',
+ placeholderClass: 'html5dnd-placeholder',
+ hasDraggingOnChildClass: 'html5dnd-has-dragging-on-child',
+ groups: null,
+ isDroppingAllowed: null,
+ onDragEnter: null,
+ onDragging: null,
+ onDropping: null,
+ onDragLeave: null
+ };
+
+ var initSettings = function initSettings() {
+ $.extend(settings, defaultSettings, userSettings);
+ };
+
+ var initElementsCache = function initElementsCache() {
+ elementsCache.$element = $(settings.element);
+
+ elementsCache.$placeholder = $('<div>', { 'class': settings.placeholderClass });
+ };
+
+ var hasHorizontalDetection = function hasHorizontalDetection() {
+ return -1 !== settings.axis.indexOf('horizontal');
+ };
+
+ var hasVerticalDetection = function hasVerticalDetection() {
+ return -1 !== settings.axis.indexOf('vertical');
+ };
+
+ var checkHorizontal = function checkHorizontal(offsetX, elementWidth) {
+ var isPercentValue, sensitivity;
+
+ if (!hasHorizontalDetection()) {
+ return false;
+ }
+
+ if (!hasVerticalDetection()) {
+ return offsetX > elementWidth / 2 ? 'right' : 'left';
+ }
+
+ sensitivity = settings.horizontalSensitivity.match(/\d+/);
+
+ if (!sensitivity) {
+ return false;
+ }
+
+ sensitivity = sensitivity[0];
+
+ isPercentValue = /%$/.test(settings.horizontalSensitivity);
+
+ if (isPercentValue) {
+ sensitivity = elementWidth / sensitivity;
+ }
+
+ if (offsetX > elementWidth - sensitivity) {
+ return 'right';
+ } else if (offsetX < sensitivity) {
+ return 'left';
+ }
+
+ return false;
+ };
+
+ var setSide = function setSide(event) {
+ var $element = $(currentElement),
+ elementHeight = $element.outerHeight() - elementsCache.$placeholder.outerHeight(),
+ elementWidth = $element.outerWidth();
+
+ event = event.originalEvent;
+
+ if (currentSide = checkHorizontal(event.offsetX, elementWidth)) {
+ return;
+ }
+
+ if (!hasVerticalDetection()) {
+ currentSide = null;
+
+ return;
+ }
+
+ var elementPosition = currentElement.getBoundingClientRect();
+
+ currentSide = event.clientY > elementPosition.top + elementHeight / 2 ? 'bottom' : 'top';
+ };
+
+ var insertPlaceholder = function insertPlaceholder() {
+ if (!settings.placeholder) {
+ return;
+ }
+
+ var insertMethod = 'top' === currentSide ? 'prependTo' : 'appendTo';
+
+ elementsCache.$placeholder[insertMethod](currentElement);
+ };
+
+ var isDroppingAllowed = function isDroppingAllowed(event) {
+ var dataTransferTypes, draggableGroups, isGroupMatch, isDroppingAllowed;
+
+ if (settings.groups && hasFullDataTransferSupport(event)) {
+ dataTransferTypes = event.originalEvent.dataTransfer.types;
+
+ isGroupMatch = false;
+
+ dataTransferTypes = Array.prototype.slice.apply(dataTransferTypes); // Convert to array, since Firefox hold it as DOMStringList
+
+ dataTransferTypes.forEach(function (type) {
+ try {
+ draggableGroups = JSON.parse(type);
+
+ if (!draggableGroups.groups.slice) {
+ return;
+ }
+
+ settings.groups.forEach(function (groupName) {
+
+ if (-1 !== draggableGroups.groups.indexOf(groupName)) {
+ isGroupMatch = true;
+
+ return false; // stops the forEach from extra loops
+ }
+ });
+ } catch (e) {}
+ });
+
+ if (!isGroupMatch) {
+ return false;
+ }
+ }
+
+ if ($.isFunction(settings.isDroppingAllowed)) {
+
+ isDroppingAllowed = settings.isDroppingAllowed.call(currentElement, currentSide, event, self);
+
+ if (!isDroppingAllowed) {
+ return false;
+ }
+ }
+
+ return true;
+ };
+
+ var onDragEnter = function onDragEnter(event) {
+ event.stopPropagation();
+
+ if (currentElement) {
+ return;
+ }
+
+ currentElement = this;
+
+ elementsCache.$element.parents().each(function () {
+ var droppableInstance = $(this).data('html5Droppable');
+
+ if (!droppableInstance) {
+ return;
+ }
+
+ droppableInstance.doDragLeave();
+ });
+
+ setSide(event);
+
+ if (!isDroppingAllowed(event)) {
+ return;
+ }
+
+ insertPlaceholder();
+
+ elementsCache.$element.addClass(settings.hasDraggingOnChildClass);
+
+ $(currentElement).addClass(settings.currentElementClass);
+
+ if ($.isFunction(settings.onDragEnter)) {
+ settings.onDragEnter.call(currentElement, currentSide, event, self);
+ }
+ };
+
+ var onDragOver = function onDragOver(event) {
+ event.stopPropagation();
+
+ if (!currentElement) {
+ onDragEnter.call(this, event);
+ }
+
+ var oldSide = currentSide;
+
+ setSide(event);
+
+ if (!isDroppingAllowed(event)) {
+ return;
+ }
+
+ event.preventDefault();
+
+ if (oldSide !== currentSide) {
+ insertPlaceholder();
+ }
+
+ if ($.isFunction(settings.onDragging)) {
+ settings.onDragging.call(this, currentSide, event, self);
+ }
+ };
+
+ var onDragLeave = function onDragLeave(event) {
+ var elementPosition = this.getBoundingClientRect();
+
+ if ('dragleave' === event.type && !(event.clientX < elementPosition.left || event.clientX >= elementPosition.right || event.clientY < elementPosition.top || event.clientY >= elementPosition.bottom)) {
+ return;
+ }
+
+ $(currentElement).removeClass(settings.currentElementClass);
+
+ self.doDragLeave();
+ };
+
+ var onDrop = function onDrop(event) {
+ setSide(event);
+
+ if (!isDroppingAllowed(event)) {
+ return;
+ }
+
+ event.preventDefault();
+
+ if ($.isFunction(settings.onDropping)) {
+ settings.onDropping.call(this, currentSide, event, self);
+ }
+ };
+
+ var attachEvents = function attachEvents() {
+ elementsCache.$element.on('dragenter', settings.items, onDragEnter).on('dragover', settings.items, onDragOver).on('drop', settings.items, onDrop).on('dragleave drop', settings.items, onDragLeave);
+ };
+
+ var init = function init() {
+ initSettings();
+
+ initElementsCache();
+
+ attachEvents();
+ };
+
+ this.doDragLeave = function () {
+ if (settings.placeholder) {
+ elementsCache.$placeholder.remove();
+ }
+
+ elementsCache.$element.removeClass(settings.hasDraggingOnChildClass);
+
+ if ($.isFunction(settings.onDragLeave)) {
+ settings.onDragLeave.call(currentElement, event, self);
+ }
+
+ currentElement = currentSide = null;
+ };
+
+ this.destroy = function () {
+ elementsCache.$element.off('dragenter', settings.items, onDragEnter).off('dragover', settings.items, onDragOver).off('drop', settings.items, onDrop).off('dragleave drop', settings.items, onDragLeave);
+ };
+
+ init();
+ };
+
+ var plugins = {
+ html5Draggable: Draggable,
+ html5Droppable: Droppable
+ };
+
+ $.each(plugins, function (pluginName, Plugin) {
+ $.fn[pluginName] = function (options) {
+ options = options || {};
+
+ this.each(function () {
+ var instance = $.data(this, pluginName),
+ hasInstance = instance instanceof Plugin;
+
+ if (hasInstance) {
+
+ if ('destroy' === options) {
+
+ instance.destroy();
+
+ $.removeData(this, pluginName);
+ }
+
+ return;
+ }
+
+ options.element = this;
+
+ $.data(this, pluginName, new Plugin(options));
+ });
+
+ return this;
+ };
+ });
+})(jQuery);
+
+/***/ }),
+/* 48 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _heartbeat = __webpack_require__(49);
+
+var _heartbeat2 = _interopRequireDefault(_heartbeat);
+
+var _navigator = __webpack_require__(50);
+
+var _navigator2 = _interopRequireDefault(_navigator);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/* global ElementorConfig */
+Marionette.TemplateCache.prototype.compileTemplate = function (rawTemplate, options) {
+ options = {
+ evaluate: /<#([\s\S]+?)#>/g,
+ interpolate: /{{{([\s\S]+?)}}}/g,
+ escape: /{{([^}]+?)}}(?!})/g
+ };
+
+ return _.template(rawTemplate, options);
+};
+
+var App = Marionette.Application.extend({
+ previewLoadedOnce: false,
+
+ helpers: __webpack_require__(55),
+ imagesManager: __webpack_require__(56),
+ debug: __webpack_require__(57),
+ schemes: __webpack_require__(58),
+ presetsFactory: __webpack_require__(59),
+ templates: __webpack_require__(60),
+ ajax: __webpack_require__(75),
+ conditions: __webpack_require__(76),
+ hotKeys: __webpack_require__(17),
+ history: __webpack_require__(77),
+
+ channels: {
+ editor: Backbone.Radio.channel('ELEMENTOR:editor'),
+ data: Backbone.Radio.channel('ELEMENTOR:data'),
+ panelElements: Backbone.Radio.channel('ELEMENTOR:panelElements'),
+ dataEditMode: Backbone.Radio.channel('ELEMENTOR:editmode'),
+ deviceMode: Backbone.Radio.channel('ELEMENTOR:deviceMode'),
+ templates: Backbone.Radio.channel('ELEMENTOR:templates')
+ },
+
+ // Exporting modules that can be used externally
+ modules: {
+ Module: __webpack_require__(2),
+ components: {
+ templateLibrary: {
+ views: {
+ parts: {
+ headerParts: {
+ logo: __webpack_require__(9)
+ }
+ },
+ BaseModalLayout: __webpack_require__(8)
+ }
+ },
+ saver: {
+ behaviors: {
+ FooterSaver: __webpack_require__(96)
+ }
+ }
+ },
+ controls: {
+ Animation: __webpack_require__(6),
+ Base: __webpack_require__(7),
+ BaseData: __webpack_require__(0),
+ BaseMultiple: __webpack_require__(4),
+ Box_shadow: __webpack_require__(32),
+ Button: __webpack_require__(101),
+ Choose: __webpack_require__(33),
+ Code: __webpack_require__(102),
+ Color: __webpack_require__(103),
+ Date_time: __webpack_require__(104),
+ Dimensions: __webpack_require__(105),
+ Font: __webpack_require__(106),
+ Gallery: __webpack_require__(107),
+ Hover_animation: __webpack_require__(6),
+ Icon: __webpack_require__(108),
+ Image_dimensions: __webpack_require__(109),
+ Media: __webpack_require__(110),
+ Number: __webpack_require__(111),
+ Order: __webpack_require__(113),
+ Popover_toggle: __webpack_require__(114),
+ Repeater: __webpack_require__(115),
+ RepeaterRow: __webpack_require__(35),
+ Section: __webpack_require__(116),
+ Select: __webpack_require__(117),
+ Select2: __webpack_require__(6),
+ Slider: __webpack_require__(118),
+ Structure: __webpack_require__(119),
+ Switcher: __webpack_require__(120),
+ Tab: __webpack_require__(121),
+ Text_shadow: __webpack_require__(32),
+ Url: __webpack_require__(122),
+ Wp_widget: __webpack_require__(123),
+ Wysiwyg: __webpack_require__(124)
+ },
+ elements: {
+ models: {
+ BaseSettings: __webpack_require__(3),
+ Element: __webpack_require__(36)
+ },
+ views: {
+ Widget: __webpack_require__(126)
+ }
+ },
+ layouts: {
+ panel: {
+ pages: {
+ elements: {
+ views: {
+ Global: __webpack_require__(38),
+ Elements: __webpack_require__(128)
+ }
+ },
+ menu: {
+ Menu: __webpack_require__(129)
+ }
+ }
+ }
+ },
+ views: {
+ ControlsStack: __webpack_require__(12)
+ }
+ },
+
+ backgroundClickListeners: {
+ popover: {
+ element: '.elementor-controls-popover',
+ ignore: '.elementor-control-popover-toggle-toggle, .elementor-control-popover-toggle-toggle-label, .select2-container'
+ },
+ tagsList: {
+ element: '.elementor-tags-list',
+ ignore: '.elementor-control-dynamic-switcher'
+ }
+ },
+
+ // TODO: Temp modules bc method since 2.0.0
+ initModulesBC: function initModulesBC() {
+ var bcModules = {
+ ControlsStack: this.modules.views.ControlsStack,
+ element: {
+ Model: this.modules.elements.models.Element
+ },
+ RepeaterRowView: this.modules.controls.RepeaterRow,
+ WidgetView: this.modules.elements.views.Widget,
+ panel: {
+ Menu: this.modules.layouts.panel.pages.menu.Menu
+ },
+ saver: {
+ footerBehavior: this.modules.components.saver.behaviors.FooterSaver
+ },
+ SettingsModel: this.modules.elements.models.BaseSettings,
+ templateLibrary: {
+ ElementsCollectionView: this.modules.layouts.panel.pages.elements.views.Elements
+ }
+ };
+
+ jQuery.extend(this.modules, bcModules);
+ },
+
+ userCan: function userCan(capability) {
+ return -1 === this.config.user.restrictions.indexOf(capability);
+ },
+
+ _defaultDeviceMode: 'desktop',
+
+ addControlView: function addControlView(controlID, ControlView) {
+ this.modules.controls[elementor.helpers.firstLetterUppercase(controlID)] = ControlView;
+ },
+
+ checkEnvCompatibility: function checkEnvCompatibility() {
+ return this.envData.gecko || this.envData.webkit;
+ },
+
+ getElementData: function getElementData(model) {
+ var elType = model.get('elType');
+
+ if ('widget' === elType) {
+ var widgetType = model.get('widgetType');
+
+ if (!this.config.widgets[widgetType]) {
+ return false;
+ }
+
+ return this.config.widgets[widgetType];
+ }
+
+ if (!this.config.elements[elType]) {
+ return false;
+ }
+
+ var elementConfig = this.helpers.cloneObject(this.config.elements[elType]);
+
+ if ('section' === elType && model.get('isInner')) {
+ elementConfig.title = elementor.translate('inner_section');
+ }
+
+ return elementConfig;
+ },
+
+ getElementControls: function getElementControls(modelElement) {
+ var self = this,
+ elementData = self.getElementData(modelElement);
+
+ if (!elementData) {
+ return false;
+ }
+
+ var isInner = modelElement.get('isInner'),
+ controls = {};
+
+ _.each(elementData.controls, function (controlData, controlKey) {
+ if (isInner && controlData.hide_in_inner || !isInner && controlData.hide_in_top) {
+ return;
+ }
+
+ controls[controlKey] = controlData;
+ });
+
+ return controls;
+ },
+
+ mergeControlsSettings: function mergeControlsSettings(controls) {
+ var self = this;
+
+ _.each(controls, function (controlData, controlKey) {
+ controls[controlKey] = jQuery.extend(true, {}, self.config.controls[controlData.type], controlData);
+ });
+
+ return controls;
+ },
+
+ getControlView: function getControlView(controlID) {
+ var capitalizedControlName = elementor.helpers.firstLetterUppercase(controlID),
+ View = this.modules.controls[capitalizedControlName];
+
+ if (!View) {
+ var controlData = this.config.controls[controlID],
+ isUIControl = -1 !== controlData.features.indexOf('ui');
+
+ View = this.modules.controls[isUIControl ? 'Base' : 'BaseData'];
+ }
+
+ return View;
+ },
+
+ getPanelView: function getPanelView() {
+ return this.panel.currentView;
+ },
+
+ getPreviewView: function getPreviewView() {
+ return this.sections.currentView;
+ },
+
+ initEnvData: function initEnvData() {
+ this.envData = _.pick(tinymce.Env, ['desktop', 'mac', 'webkit', 'gecko', 'ie', 'opera']);
+ },
+
+ initComponents: function initComponents() {
+ var EventManager = __webpack_require__(20),
+ DynamicTags = __webpack_require__(132),
+ Settings = __webpack_require__(134),
+ Saver = __webpack_require__(138),
+ Notifications = __webpack_require__(139);
+
+ this.hooks = new EventManager();
+
+ this.saver = new Saver();
+
+ this.settings = new Settings();
+
+ this.dynamicTags = new DynamicTags();
+
+ /**
+ * @deprecated 1.6.0 - use `this.settings.page` instead
+ */
+ this.pageSettings = this.settings.page;
+
+ this.templates.init();
+
+ this.initDialogsManager();
+
+ this.notifications = new Notifications();
+
+ this.ajax.init();
+
+ this.initHotKeys();
+
+ this.initEnvData();
+ },
+
+ initDialogsManager: function initDialogsManager() {
+ this.dialogsManager = new DialogsManager.Instance();
+ },
+
+ initElements: function initElements() {
+ var ElementCollection = __webpack_require__(37),
+ config = this.config.data;
+
+ // If it's an reload, use the not-saved data
+ if (this.elements) {
+ config = this.elements.toJSON();
+ }
+
+ this.elements = new ElementCollection(config);
+
+ this.elementsModel = new Backbone.Model({
+ elements: this.elements
+ });
+ },
+
+ initPreview: function initPreview() {
+ var $ = jQuery;
+
+ this.$previewWrapper = $('#elementor-preview');
+
+ this.$previewResponsiveWrapper = $('#elementor-preview-responsive-wrapper');
+
+ var previewIframeId = 'elementor-preview-iframe';
+
+ // Make sure the iFrame does not exist.
+ if (!this.$preview) {
+ this.$preview = $('<iframe>', {
+ id: previewIframeId,
+ src: this.config.document.urls.preview,
+ allowfullscreen: 1
+ });
+
+ this.$previewResponsiveWrapper.append(this.$preview);
+ }
+
+ this.$preview.on('load', this.onPreviewLoaded.bind(this));
+ },
+
+ initFrontend: function initFrontend() {
+ var frontendWindow = this.$preview[0].contentWindow;
+
+ window.elementorFrontend = frontendWindow.elementorFrontend;
+
+ frontendWindow.elementor = this;
+
+ elementorFrontend.init();
+
+ elementorFrontend.elementsHandler.initHandlers();
+
+ this.trigger('frontend:init');
+ },
+
+ initClearPageDialog: function initClearPageDialog() {
+ var self = this,
+ dialog;
+
+ self.getClearPageDialog = function () {
+ if (dialog) {
+ return dialog;
+ }
+
+ dialog = this.dialogsManager.createWidget('confirm', {
+ id: 'elementor-clear-page-dialog',
+ headerMessage: elementor.translate('clear_page'),
+ message: elementor.translate('dialog_confirm_clear_page'),
+ position: {
+ my: 'center center',
+ at: 'center center'
+ },
+ strings: {
+ confirm: elementor.translate('delete'),
+ cancel: elementor.translate('cancel')
+ },
+ onConfirm: function onConfirm() {
+ self.elements.reset();
+ }
+ });
+
+ return dialog;
+ };
+ },
+
+ initHotKeys: function initHotKeys() {
+ var keysDictionary = {
+ c: 67,
+ d: 68,
+ i: 73,
+ l: 76,
+ m: 77,
+ p: 80,
+ s: 83,
+ v: 86,
+ del: 46
+ };
+
+ var $ = jQuery,
+ hotKeysHandlers = {},
+ hotKeysManager = this.hotKeys;
+
+ hotKeysHandlers[keysDictionary.c] = {
+ copyElement: {
+ isWorthHandling: function isWorthHandling(event) {
+ if (!hotKeysManager.isControlEvent(event)) {
+ return false;
+ }
+
+ var isEditorOpen = 'editor' === elementor.getPanelView().getCurrentPageName();
+
+ if (!isEditorOpen) {
+ return false;
+ }
+
+ var frontendWindow = elementorFrontend.getElements('window'),
+ textSelection = getSelection() + frontendWindow.getSelection();
+
+ if (!textSelection && elementor.envData.gecko) {
+ textSelection = [window, frontendWindow].some(function (window) {
+ var activeElement = window.document.activeElement;
+
+ if (!activeElement || -1 === ['INPUT', 'TEXTAREA'].indexOf(activeElement.tagName)) {
+ return;
+ }
+
+ var originalInputType;
+
+ // Some of input types can't retrieve a selection
+ if ('INPUT' === activeElement.tagName) {
+ originalInputType = activeElement.type;
+
+ activeElement.type = 'text';
+ }
+
+ var selection = activeElement.value.substring(activeElement.selectionStart, activeElement.selectionEnd);
+
+ activeElement.type = originalInputType;
+
+ return !!selection;
+ });
+ }
+
+ return !textSelection;
+ },
+ handle: function handle() {
+ elementor.getPanelView().getCurrentPageView().getOption('editedElementView').copy();
+ }
+ }
+ };
+
+ hotKeysHandlers[keysDictionary.d] = {
+ duplicateElement: {
+ isWorthHandling: function isWorthHandling(event) {
+ return hotKeysManager.isControlEvent(event);
+ },
+ handle: function handle() {
+ var panel = elementor.getPanelView();
+
+ if ('editor' !== panel.getCurrentPageName()) {
+ return;
+ }
+
+ panel.getCurrentPageView().getOption('editedElementView').duplicate();
+ }
+ }
+ };
+
+ hotKeysHandlers[keysDictionary.i] = {
+ navigator: {
+ isWorthHandling: function isWorthHandling(event) {
+ return hotKeysManager.isControlEvent(event) && 'edit' === elementor.channels.dataEditMode.request('activeMode');
+ },
+ handle: function handle() {
+ if (elementor.navigator.storage.visible) {
+ elementor.navigator.close();
+ } else {
+ elementor.navigator.open();
+ }
+ }
+ }
+ };
+
+ hotKeysHandlers[keysDictionary.l] = {
+ showTemplateLibrary: {
+ isWorthHandling: function isWorthHandling(event) {
+ return hotKeysManager.isControlEvent(event) && event.shiftKey;
+ },
+ handle: function handle() {
+ elementor.templates.startModal();
+ }
+ }
+ };
+
+ hotKeysHandlers[keysDictionary.m] = {
+ changeDeviceMode: {
+ devices: ['desktop', 'tablet', 'mobile'],
+ isWorthHandling: function isWorthHandling(event) {
+ return hotKeysManager.isControlEvent(event) && event.shiftKey;
+ },
+ handle: function handle() {
+ var currentDeviceMode = elementor.channels.deviceMode.request('currentMode'),
+ modeIndex = this.devices.indexOf(currentDeviceMode);
+
+ modeIndex++;
+
+ if (modeIndex >= this.devices.length) {
+ modeIndex = 0;
+ }
+
+ elementor.changeDeviceMode(this.devices[modeIndex]);
+ }
+ }
+ };
+
+ hotKeysHandlers[keysDictionary.p] = {
+ changeEditMode: {
+ isWorthHandling: function isWorthHandling(event) {
+ return hotKeysManager.isControlEvent(event);
+ },
+ handle: function handle() {
+ elementor.getPanelView().modeSwitcher.currentView.toggleMode();
+ }
+ }
+ };
+
+ hotKeysHandlers[keysDictionary.s] = {
+ saveEditor: {
+ isWorthHandling: function isWorthHandling(event) {
+ return hotKeysManager.isControlEvent(event);
+ },
+ handle: function handle() {
+ elementor.saver.saveDraft();
+ }
+ }
+ };
+
+ hotKeysHandlers[keysDictionary.v] = {
+ pasteElement: {
+ isWorthHandling: function isWorthHandling(event) {
+ if (!hotKeysManager.isControlEvent(event)) {
+ return false;
+ }
+
+ return -1 !== ['BODY', 'IFRAME'].indexOf(document.activeElement.tagName) && 'BODY' === elementorFrontend.getElements('window').document.activeElement.tagName;
+ },
+ handle: function handle(event) {
+ var targetElement = elementor.channels.editor.request('contextMenu:targetView');
+
+ if (!targetElement) {
+ var panel = elementor.getPanelView();
+
+ if ('editor' === panel.getCurrentPageName()) {
+ targetElement = panel.getCurrentPageView().getOption('editedElementView');
+ }
+ }
+
+ if (event.shiftKey) {
+ if (targetElement && targetElement.pasteStyle && elementor.getStorage('transfer')) {
+ targetElement.pasteStyle();
+ }
+
+ return;
+ }
+
+ if (!targetElement) {
+ targetElement = elementor.getPreviewView();
+ }
+
+ if (targetElement.isPasteEnabled()) {
+ targetElement.paste();
+ }
+ }
+ }
+ };
+
+ hotKeysHandlers[keysDictionary.del] = {
+ deleteElement: {
+ isWorthHandling: function isWorthHandling(event) {
+ var isEditorOpen = 'editor' === elementor.getPanelView().getCurrentPageName();
+
+ if (!isEditorOpen) {
+ return false;
+ }
+
+ var $target = $(event.target);
+
+ if ($target.is(':input, .elementor-input')) {
+ return false;
+ }
+
+ return !$target.closest('[contenteditable="true"]').length;
+ },
+ handle: function handle() {
+ elementor.getPanelView().getCurrentPageView().getOption('editedElementView').removeElement();
+ }
+ }
+ };
+
+ _.each(hotKeysHandlers, function (handlers, keyCode) {
+ _.each(handlers, function (handler, handlerName) {
+ hotKeysManager.addHotKeyHandler(keyCode, handlerName, handler);
+ });
+ });
+
+ hotKeysManager.bindListener(this.$window);
+ },
+
+ initPanel: function initPanel() {
+ this.addRegions({ panel: __webpack_require__(140) });
+ },
+
+ initNavigator: function initNavigator() {
+ this.addRegions({
+ navigator: {
+ el: '#elementor-navigator',
+ regionClass: _navigator2.default
+ }
+ });
+ },
+
+ preventClicksInsideEditor: function preventClicksInsideEditor() {
+ this.$previewContents.on('submit', function (event) {
+ event.preventDefault();
+ });
+
+ this.$previewContents.on('click', function (event) {
+ var $target = jQuery(event.target),
+ editMode = elementor.channels.dataEditMode.request('activeMode'),
+ isClickInsideElementor = !!$target.closest('#elementor, .pen-menu').length,
+ isTargetInsideDocument = this.contains($target[0]);
+
+ if (isClickInsideElementor && 'edit' === editMode || !isTargetInsideDocument) {
+ return;
+ }
+
+ if ($target.closest('a:not(.elementor-clickable)').length) {
+ event.preventDefault();
+ }
+
+ if (!isClickInsideElementor) {
+ var panelView = elementor.getPanelView();
+
+ if ('elements' !== panelView.getCurrentPageName()) {
+ panelView.setPage('elements');
+ }
+ }
+ });
+ },
+
+ addBackgroundClickArea: function addBackgroundClickArea(element) {
+ element.addEventListener('click', this.onBackgroundClick.bind(this), true);
+ },
+
+ addBackgroundClickListener: function addBackgroundClickListener(key, listener) {
+ this.backgroundClickListeners[key] = listener;
+ },
+
+ removeBackgroundClickListener: function removeBackgroundClickListener(key) {
+ delete this.backgroundClickListeners[key];
+ },
+
+ showFatalErrorDialog: function showFatalErrorDialog(options) {
+ var defaultOptions = {
+ id: 'elementor-fatal-error-dialog',
+ headerMessage: '',
+ message: '',
+ position: {
+ my: 'center center',
+ at: 'center center'
+ },
+ strings: {
+ confirm: elementor.translate('learn_more'),
+ cancel: elementor.translate('go_back')
+ },
+ onConfirm: null,
+ onCancel: function onCancel() {
+ parent.history.go(-1);
+ },
+ hide: {
+ onBackgroundClick: false,
+ onButtonClick: false
+ }
+ };
+
+ options = jQuery.extend(true, defaultOptions, options);
+
+ this.dialogsManager.createWidget('confirm', options).show();
+ },
+
+ checkPageStatus: function checkPageStatus() {
+ if (elementor.config.current_revision_id !== elementor.config.document.id) {
+ this.notifications.showToast({
+ message: this.translate('working_on_draft_notification'),
+ buttons: [{
+ name: 'view_revisions',
+ text: elementor.translate('view_all_revisions'),
+ callback: function callback() {
+ var panel = elementor.getPanelView();
+
+ panel.setPage('historyPage');
+ panel.getCurrentPageView().activateTab('revisions');
+ }
+ }]
+ });
+ }
+ },
+
+ getStorage: function getStorage(key) {
+ var elementorStorage = localStorage.getItem('elementor');
+
+ if (elementorStorage) {
+ elementorStorage = JSON.parse(elementorStorage);
+ } else {
+ elementorStorage = {};
+ }
+
+ if (key) {
+ return elementorStorage[key];
+ }
+
+ return elementorStorage;
+ },
+
+ setStorage: function setStorage(key, value) {
+ var elementorStorage = this.getStorage();
+
+ elementorStorage[key] = value;
+
+ localStorage.setItem('elementor', JSON.stringify(elementorStorage));
+ },
+
+ openLibraryOnStart: function openLibraryOnStart() {
+ if ('#library' === location.hash) {
+ elementor.templates.startModal();
+
+ location.hash = '';
+ }
+ },
+
+ enterPreviewMode: function enterPreviewMode(hidePanel) {
+ var $elements = elementorFrontend.getElements('$body');
+
+ if (hidePanel) {
+ $elements = $elements.add(this.$body);
+ }
+
+ $elements.removeClass('elementor-editor-active').addClass('elementor-editor-preview');
+
+ this.$previewElementorEl.removeClass('elementor-edit-area-active').addClass('elementor-edit-area-preview');
+
+ if (hidePanel) {
+ // Handle panel resize
+ this.$previewWrapper.css(this.config.is_rtl ? 'right' : 'left', '');
+
+ this.panel.$el.css('width', '');
+ }
+ },
+
+ exitPreviewMode: function exitPreviewMode() {
+ elementorFrontend.getElements('$body').add(this.$body).removeClass('elementor-editor-preview').addClass('elementor-editor-active');
+
+ this.$previewElementorEl.removeClass('elementor-edit-area-preview').addClass('elementor-edit-area-active');
+ },
+
+ changeEditMode: function changeEditMode(newMode) {
+ var dataEditMode = elementor.channels.dataEditMode,
+ oldEditMode = dataEditMode.request('activeMode');
+
+ dataEditMode.reply('activeMode', newMode);
+
+ if (newMode !== oldEditMode) {
+ dataEditMode.trigger('switch', newMode);
+ }
+ },
+
+ reloadPreview: function reloadPreview() {
+ jQuery('#elementor-preview-loading').show();
+
+ this.$preview[0].contentWindow.location.reload(true);
+ },
+
+ clearPage: function clearPage() {
+ this.getClearPageDialog().show();
+ },
+
+ changeDeviceMode: function changeDeviceMode(newDeviceMode) {
+ var oldDeviceMode = this.channels.deviceMode.request('currentMode');
+
+ if (oldDeviceMode === newDeviceMode) {
+ return;
+ }
+
+ this.$body.removeClass('elementor-device-' + oldDeviceMode).addClass('elementor-device-' + newDeviceMode);
+
+ this.channels.deviceMode.reply('previousMode', oldDeviceMode).reply('currentMode', newDeviceMode).trigger('change');
+ },
+
+ enqueueTypographyFonts: function enqueueTypographyFonts() {
+ var self = this,
+ typographyScheme = this.schemes.getScheme('typography');
+
+ self.helpers.resetEnqueuedFontsCache();
+
+ _.each(typographyScheme.items, function (item) {
+ self.helpers.enqueueFont(item.value.font_family);
+ });
+ },
+
+ translate: function translate(stringKey, templateArgs, i18nStack) {
+ if (!i18nStack) {
+ i18nStack = this.config.i18n;
+ }
+
+ var string = i18nStack[stringKey];
+
+ if (undefined === string) {
+ string = stringKey;
+ }
+
+ if (templateArgs) {
+ // TODO: bc since 2.0.4
+ string = string.replace(/{(\d+)}/g, function (match, number) {
+ return undefined !== templateArgs[number] ? templateArgs[number] : match;
+ });
+
+ string = string.replace(/%(?:(\d+)\$)?s/g, function (match, number) {
+ if (!number) {
+ number = 1;
+ }
+
+ number--;
+
+ return undefined !== templateArgs[number] ? templateArgs[number] : match;
+ });
+ }
+
+ return string;
+ },
+
+ logSite: function logSite() {
+ var text = '',
+ style = '';
+
+ if (this.envData.gecko) {
+ var asciiText = [' ;;;;;;;;;;;;;;; ', ';;; ;; ;;;', ';;; ;;;;;;;;;;;;', ';;; ;;;;;;;;;;;;', ';;; ;; ;;;', ';;; ;;;;;;;;;;;;', ';;; ;;;;;;;;;;;;', ';;; ;; ;;;', ' ;;;;;;;;;;;;;;; '];
+
+ text += '%c' + asciiText.join('\n') + '\n';
+
+ style = 'color: #C42961';
+ } else {
+ text += '%c00';
+
+ style = 'font-size: 22px; background-image: url("' + elementor.config.assets_url + 'images/logo-icon.png"); color: transparent; background-repeat: no-repeat';
+ }
+
+ setTimeout(console.log.bind(console, text, style));
+
+ text = '%cLove using Elementor? Join our growing community of Elementor developers: %chttps://github.com/pojome/elementor';
+
+ setTimeout(console.log.bind(console, text, 'color: #9B0A46', ''));
+ },
+
+ onStart: function onStart() {
+ this.$window = jQuery(window);
+
+ this.$body = jQuery('body');
+
+ NProgress.start();
+ NProgress.inc(0.2);
+
+ this.config = ElementorConfig;
+
+ Backbone.Radio.DEBUG = false;
+ Backbone.Radio.tuneIn('ELEMENTOR');
+
+ this.initModulesBC();
+
+ this.initComponents();
+
+ if (!this.checkEnvCompatibility()) {
+ this.onEnvNotCompatible();
+ }
+
+ this.channels.dataEditMode.reply('activeMode', 'edit');
+
+ this.listenTo(this.channels.dataEditMode, 'switch', this.onEditModeSwitched);
+
+ this.initClearPageDialog();
+
+ this.addBackgroundClickArea(document);
+
+ this.$window.trigger('elementor:init');
+
+ this.initPreview();
+
+ this.logSite();
+ },
+
+ onPreviewLoaded: function onPreviewLoaded() {
+ NProgress.done();
+
+ var previewWindow = this.$preview[0].contentWindow;
+
+ if (!previewWindow.elementorFrontend) {
+ this.onPreviewLoadingError();
+
+ return;
+ }
+
+ this.$previewContents = this.$preview.contents();
+ this.$previewElementorEl = this.$previewContents.find('#elementor');
+
+ if (!this.$previewElementorEl.length) {
+ this.onPreviewElNotFound();
+
+ return;
+ }
+
+ this.initFrontend();
+
+ this.initElements();
+
+ var iframeRegion = new Marionette.Region({
+ // Make sure you get the DOM object out of the jQuery object
+ el: this.$previewElementorEl[0]
+ });
+
+ this.schemes.init();
+ this.schemes.printSchemesStyle();
+
+ this.preventClicksInsideEditor();
+
+ this.addBackgroundClickArea(elementorFrontend.getElements('$document')[0]);
+
+ if (this.previewLoadedOnce) {
+ this.getPanelView().setPage('elements', null, { autoFocusSearch: false });
+ } else {
+ this.onFirstPreviewLoaded();
+ }
+
+ this.initNavigator();
+
+ this.addRegions({
+ sections: iframeRegion
+ });
+
+ var Preview = __webpack_require__(156);
+
+ this.sections.show(new Preview({ model: this.elementsModel }));
+
+ this.$previewContents.children().addClass('elementor-html');
+
+ elementorFrontend.getElements('$body').addClass('elementor-editor-active');
+
+ if (!elementor.userCan('design')) {
+ elementorFrontend.getElements('$body').addClass('elementor-editor-content-only');
+ }
+
+ this.changeDeviceMode(this._defaultDeviceMode);
+
+ jQuery('#elementor-loading, #elementor-preview-loading').fadeOut(600);
+
+ _.defer(function () {
+ elementorFrontend.getElements('window').jQuery.holdReady(false);
+ });
+
+ this.enqueueTypographyFonts();
+
+ this.onEditModeSwitched();
+
+ this.hotKeys.bindListener(elementorFrontend.getElements('$window'));
+
+ this.trigger('preview:loaded');
+ },
+
+ onFirstPreviewLoaded: function onFirstPreviewLoaded() {
+ this.initPanel();
+
+ this.heartbeat = new _heartbeat2.default();
+
+ this.checkPageStatus();
+
+ this.openLibraryOnStart();
+
+ this.previewLoadedOnce = true;
+ },
+
+ onEditModeSwitched: function onEditModeSwitched() {
+ var activeMode = this.channels.dataEditMode.request('activeMode');
+
+ if ('edit' === activeMode) {
+ this.exitPreviewMode();
+ } else {
+ this.enterPreviewMode('preview' === activeMode);
+ }
+ },
+
+ onEnvNotCompatible: function onEnvNotCompatible() {
+ this.showFatalErrorDialog({
+ headerMessage: this.translate('device_incompatible_header'),
+ message: this.translate('device_incompatible_message'),
+ strings: {
+ confirm: elementor.translate('proceed_anyway')
+ },
+ hide: {
+ onButtonClick: true
+ },
+ onConfirm: function onConfirm() {
+ this.hide();
+ }
+ });
+ },
+
+ onPreviewLoadingError: function onPreviewLoadingError() {
+ this.showFatalErrorDialog({
+ headerMessage: this.translate('preview_not_loading_header'),
+ message: this.translate('preview_not_loading_message'),
+ onConfirm: function onConfirm() {
+ open(elementor.config.help_preview_error_url, '_blank');
+ }
+ });
+ },
+
+ onPreviewElNotFound: function onPreviewElNotFound() {
+ var args = this.$preview[0].contentWindow.elementorPreviewErrorArgs;
+
+ if (!args) {
+ args = {
+ headerMessage: this.translate('preview_el_not_found_header'),
+ message: this.translate('preview_el_not_found_message'),
+ confirmURL: elementor.config.help_the_content_url
+ };
+ }
+
+ args.onConfirm = function () {
+ open(args.confirmURL, '_blank');
+ };
+
+ this.showFatalErrorDialog(args);
+ },
+
+ onBackgroundClick: function onBackgroundClick(event) {
+ jQuery.each(this.backgroundClickListeners, function () {
+ var $clickedTarget = jQuery(event.target);
+
+ // If it's a label that associated with an input
+ if ($clickedTarget[0].control) {
+ $clickedTarget = $clickedTarget.add($clickedTarget[0].control);
+ }
+
+ if (this.ignore && $clickedTarget.closest(this.ignore).length) {
+ return;
+ }
+
+ if (this.callback) {
+ this.callback();
+
+ return;
+ }
+
+ var $clickedTargetClosestElement = $clickedTarget.closest(this.element);
+
+ jQuery(this.element).not($clickedTargetClosestElement).hide();
+ });
+ }
+});
+
+module.exports = (window.elementor = new App()).start();
+
+/***/ }),
+/* 49 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Heartbeat = function () {
+ function Heartbeat() {
+ var _this = this;
+
+ _classCallCheck(this, Heartbeat);
+
+ var modal = void 0;
+
+ this.getModal = function () {
+ if (!modal) {
+ modal = _this.initModal();
+ }
+
+ return modal;
+ };
+
+ jQuery(document).on({
+ 'heartbeat-send': function heartbeatSend(event, data) {
+ data.elementor_post_lock = {
+ post_ID: elementor.config.document.id
+ };
+ },
+ 'heartbeat-tick': function heartbeatTick(event, response) {
+ if (response.locked_user) {
+ if (elementor.saver.isEditorChanged()) {
+ elementor.saver.saveEditor({
+ status: 'autosave'
+ });
+ }
+
+ _this.showLockMessage(response.locked_user);
+ } else {
+ _this.getModal().hide();
+ }
+
+ elementor.config.nonce = response.elementorNonce;
+ },
+ 'heartbeat-tick.wp-refresh-nonces': function heartbeatTickWpRefreshNonces(event, response) {
+ var nonces = response['elementor-refresh-nonces'];
+
+ if (nonces) {
+ if (nonces.heartbeatNonce) {
+ elementor.config.nonce = nonces.elementorNonce;
+ }
+
+ if (nonces.heartbeatNonce) {
+ window.heartbeatSettings.nonce = nonces.heartbeatNonce;
+ }
+ }
+ }
+ });
+
+ if (elementor.config.locked_user) {
+ this.showLockMessage(elementor.config.locked_user);
+ }
+ }
+
+ _createClass(Heartbeat, [{
+ key: 'initModal',
+ value: function initModal() {
+ var modal = elementor.dialogsManager.createWidget('lightbox', {
+ headerMessage: elementor.translate('take_over')
+ });
+
+ modal.addButton({
+ name: 'go_back',
+ text: elementor.translate('go_back'),
+ callback: function callback() {
+ parent.history.go(-1);
+ }
+ });
+
+ modal.addButton({
+ name: 'take_over',
+ text: elementor.translate('take_over'),
+ callback: function callback() {
+ wp.heartbeat.enqueue('elementor_force_post_lock', true);
+ wp.heartbeat.connectNow();
+ }
+ });
+
+ return modal;
+ }
+ }, {
+ key: 'showLockMessage',
+ value: function showLockMessage(lockedUser) {
+ var modal = this.getModal();
+
+ modal.setMessage(elementor.translate('dialog_user_taken_over', [lockedUser])).show();
+ }
+ }]);
+
+ return Heartbeat;
+}();
+
+exports.default = Heartbeat;
+
+/***/ }),
+/* 50 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _layout = __webpack_require__(51);
+
+var _layout2 = _interopRequireDefault(_layout);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var BaseRegion = __webpack_require__(23);
+
+var _class = function (_BaseRegion) {
+ _inherits(_class, _BaseRegion);
+
+ function _class(options) {
+ _classCallCheck(this, _class);
+
+ var _this = _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).call(this, options));
+
+ _this.isDocked = false;
+
+ _this.opened = false;
+
+ _this.ensurePosition = _this.ensurePosition.bind(_this);
+
+ _this.listenTo(elementor.channels.dataEditMode, 'switch', _this.onEditModeSwitched);
+
+ if (_this.storage.visible) {
+ _this.open();
+ }
+ return _this;
+ }
+
+ _createClass(_class, [{
+ key: 'getStorageKey',
+ value: function getStorageKey() {
+ return 'navigator';
+ }
+ }, {
+ key: 'getDefaultStorage',
+ value: function getDefaultStorage() {
+ return {
+ visible: false,
+ size: {
+ width: '',
+ height: '',
+ top: '',
+ bottom: '',
+ right: '',
+ left: ''
+ }
+ };
+ }
+ }, {
+ key: 'getLayout',
+ value: function getLayout() {
+ return this.currentView;
+ }
+ }, {
+ key: 'getDraggableOptions',
+ value: function getDraggableOptions() {
+ return {
+ iframeFix: true,
+ handle: '#elementor-navigator__header',
+ drag: this.onDrag.bind(this),
+ stop: this.onDragStop.bind(this)
+ };
+ }
+ }, {
+ key: 'getResizableOptions',
+ value: function getResizableOptions() {
+ var _this2 = this;
+
+ return {
+ handles: 'all',
+ containment: 'document',
+ minWidth: 150,
+ maxWidth: 500,
+ minHeight: 240,
+ start: function start() {
+ elementor.$previewWrapper.addClass('ui-resizable-resizing');
+ },
+ stop: function stop() {
+ elementor.$previewWrapper.removeClass('ui-resizable-resizing');
+
+ if (_this2.isDocked) {
+ _this2.storage.size.width = elementor.helpers.getElementInlineStyle(_this2.$el, ['width']).width;
+
+ elementor.setStorage('navigator', _this2.storage);
+ } else {
+ _this2.saveSize();
+ }
+ }
+ };
+ }
+ }, {
+ key: 'beforeFirstOpen',
+ value: function beforeFirstOpen() {
+ this.show(new _layout2.default());
+
+ this.$el.draggable(this.getDraggableOptions());
+
+ this.$el.resizable(this.getResizableOptions());
+ }
+ }, {
+ key: 'open',
+ value: function open(model) {
+ if (!this.opened) {
+ this.beforeFirstOpen();
+
+ this.opened = true;
+ }
+
+ this.$el.show();
+
+ if (this.storage.docked) {
+ this.dock();
+
+ this.setDockedSize();
+ } else {
+ this.setSize();
+ }
+
+ if (model) {
+ model.trigger('request:edit');
+ }
+
+ this.saveStorage('visible', true);
+
+ this.ensurePosition();
+
+ elementor.$window.on('resize', this.ensurePosition);
+ }
+ }, {
+ key: 'close',
+ value: function close(silent) {
+ this.$el.hide();
+
+ if (this.isDocked) {
+ this.undock(true);
+ }
+
+ if (!silent) {
+ this.saveStorage('visible', false);
+ }
+
+ elementor.$window.off('resize', this.ensurePosition);
+ }
+ }, {
+ key: 'isOpen',
+ value: function isOpen() {
+ return this.$el.is(':visible');
+ }
+ }, {
+ key: 'dock',
+ value: function dock() {
+ elementor.$body.addClass('elementor-navigator-docked');
+
+ var side = elementor.config.is_rtl ? 'left' : 'right',
+ resizableOptions = this.getResizableOptions();
+
+ this.$el.css({
+ height: '',
+ top: '',
+ bottom: '',
+ left: '',
+ right: ''
+ });
+
+ elementor.$previewWrapper.css(side, this.storage.size.width);
+
+ this.$el.resizable('destroy');
+
+ resizableOptions.handles = elementor.config.is_rtl ? 'e' : 'w';
+
+ resizableOptions.resize = function (event, ui) {
+ elementor.$previewWrapper.css(side, ui.size.width);
+ };
+
+ this.$el.resizable(resizableOptions);
+
+ this.isDocked = true;
+
+ this.saveStorage('docked', true);
+ }
+ }, {
+ key: 'undock',
+ value: function undock(silent) {
+ elementor.$body.removeClass('elementor-navigator-docked');
+
+ elementor.$previewWrapper.css(elementor.config.is_rtl ? 'left' : 'right', '');
+
+ this.setSize();
+
+ this.$el.resizable('destroy');
+
+ this.$el.resizable(this.getResizableOptions());
+
+ this.isDocked = false;
+
+ if (!silent) {
+ this.saveStorage('docked', false);
+ }
+ }
+ }, {
+ key: 'setSize',
+ value: function setSize() {
+ if (this.storage.size) {
+ this.$el.css(this.storage.size);
+ }
+ }
+ }, {
+ key: 'setDockedSize',
+ value: function setDockedSize() {
+ this.$el.css('width', this.storage.size.width);
+ }
+ }, {
+ key: 'ensurePosition',
+ value: function ensurePosition() {
+ if (this.isDocked) {
+ return;
+ }
+
+ var offset = this.$el.offset();
+
+ if (offset.left > innerWidth) {
+ this.$el.css({
+ left: '',
+ right: ''
+ });
+ }
+
+ if (offset.top > innerHeight) {
+ this.$el.css({
+ top: '',
+ bottom: ''
+ });
+ }
+ }
+ }, {
+ key: 'onDrag',
+ value: function onDrag(event, ui) {
+ if (this.isDocked) {
+ if (ui.position.left === ui.originalPosition.left) {
+ if (ui.position.top !== ui.originalPosition.top) {
+ return false;
+ }
+ } else {
+ this.undock();
+ }
+
+ return;
+ }
+
+ if (0 > ui.position.top) {
+ ui.position.top = 0;
+ }
+
+ var isOutOfLeft = 0 > ui.position.left,
+ isOutOfRight = ui.position.left + this.el.offsetWidth > innerWidth;
+
+ if (elementor.config.is_rtl) {
+ if (isOutOfRight) {
+ ui.position.left = innerWidth - this.el.offsetWidth;
+ }
+ } else if (isOutOfLeft) {
+ ui.position.left = 0;
+ }
+
+ elementor.$body.toggleClass('elementor-navigator--dock-hint', elementor.config.is_rtl ? isOutOfLeft : isOutOfRight);
+ }
+ }, {
+ key: 'onDragStop',
+ value: function onDragStop(event, ui) {
+ if (this.isDocked) {
+ return;
+ }
+
+ this.saveSize();
+
+ var elementRight = ui.position.left + this.el.offsetWidth;
+
+ if (0 > ui.position.left || elementRight > innerWidth) {
+ this.dock();
+ }
+
+ elementor.$body.removeClass('elementor-navigator--dock-hint');
+ }
+ }, {
+ key: 'onEditModeSwitched',
+ value: function onEditModeSwitched(activeMode) {
+ if ('edit' === activeMode && this.storage.visible) {
+ this.open();
+ } else {
+ this.close(true);
+ }
+ }
+ }]);
+
+ return _class;
+}(BaseRegion);
+
+exports.default = _class;
+
+/***/ }),
+/* 51 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _element = __webpack_require__(52);
+
+var _element2 = _interopRequireDefault(_element);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_Marionette$LayoutVie) {
+ _inherits(_class, _Marionette$LayoutVie);
+
+ function _class() {
+ _classCallCheck(this, _class);
+
+ return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments));
+ }
+
+ _createClass(_class, [{
+ key: 'getTemplate',
+ value: function getTemplate() {
+ return '#tmpl-elementor-navigator';
+ }
+ }, {
+ key: 'id',
+ value: function id() {
+ return 'elementor-navigator__inner';
+ }
+ }, {
+ key: 'ui',
+ value: function ui() {
+ return {
+ toggleAll: '#elementor-navigator__toggle-all',
+ close: '#elementor-navigator__close'
+ };
+ }
+ }, {
+ key: 'events',
+ value: function events() {
+ return {
+ 'click @ui.toggleAll': 'toggleAll',
+ 'click @ui.close': 'onCloseClick'
+ };
+ }
+ }, {
+ key: 'regions',
+ value: function regions() {
+ return {
+ elements: '#elementor-navigator__elements'
+ };
+ }
+ }, {
+ key: 'toggleAll',
+ value: function toggleAll() {
+ var state = 'expand' === this.ui.toggleAll.data('elementor-action'),
+ classes = ['eicon-collapse', 'eicon-expand'];
+
+ this.ui.toggleAll.data('elementor-action', state ? 'collapse' : 'expand').removeClass(classes[+state]).addClass(classes[+!state]);
+
+ this.elements.currentView.recursiveChildInvoke('toggleList', state);
+ }
+ }, {
+ key: 'activateElementsMouseInteraction',
+ value: function activateElementsMouseInteraction() {
+ this.elements.currentView.recursiveChildInvoke('activateMouseInteraction');
+ }
+ }, {
+ key: 'deactivateElementsMouseInteraction',
+ value: function deactivateElementsMouseInteraction() {
+ this.elements.currentView.recursiveChildInvoke('deactivateMouseInteraction');
+ }
+ }, {
+ key: 'onShow',
+ value: function onShow() {
+ this.elements.show(new _element2.default({
+ model: elementor.elementsModel
+ }));
+ }
+ }, {
+ key: 'onCloseClick',
+ value: function onCloseClick() {
+ elementor.navigator.close();
+ }
+ }]);
+
+ return _class;
+}(Marionette.LayoutView);
+
+exports.default = _class;
+
+/***/ }),
+/* 52 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _elementEmpty = __webpack_require__(53);
+
+var _elementEmpty2 = _interopRequireDefault(_elementEmpty);
+
+var _rootEmpty = __webpack_require__(54);
+
+var _rootEmpty2 = _interopRequireDefault(_rootEmpty);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_Marionette$Composite) {
+ _inherits(_class, _Marionette$Composite);
+
+ function _class() {
+ _classCallCheck(this, _class);
+
+ return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments));
+ }
+
+ _createClass(_class, [{
+ key: 'getTemplate',
+ value: function getTemplate() {
+ return '#tmpl-elementor-navigator__elements';
+ }
+ }, {
+ key: 'ui',
+ value: function ui() {
+ return {
+ item: '> .elementor-navigator__item',
+ title: '> .elementor-navigator__item .elementor-navigator__element__title__text',
+ toggle: '> .elementor-navigator__item > .elementor-navigator__element__toggle',
+ toggleList: '> .elementor-navigator__item > .elementor-navigator__element__list-toggle',
+ elements: '> .elementor-navigator__elements'
+ };
+ }
+ }, {
+ key: 'events',
+ value: function events() {
+ return {
+ 'contextmenu': 'onContextMenu',
+ 'click @ui.item': 'onItemClick',
+ 'click @ui.toggle': 'onToggleClick',
+ 'click @ui.toggleList': 'onToggleListClick',
+ 'dblclick @ui.title': 'onTitleDoubleClick',
+ 'keydown @ui.title': 'onTitleKeyDown',
+ 'paste @ui.title': 'onTitlePaste',
+ 'sortstart @ui.elements': 'onSortStart',
+ 'sortover @ui.elements': 'onSortOver',
+ 'sortout @ui.elements': 'onSortOut',
+ 'sortstop @ui.elements': 'onSortStop',
+ 'sortupdate @ui.elements': 'onSortUpdate',
+ 'sortreceive @ui.elements': 'onSortReceive'
+ };
+ }
+ }, {
+ key: 'getEmptyView',
+ value: function getEmptyView() {
+ if (this.isRoot()) {
+ return _rootEmpty2.default;
+ }
+
+ if (this.hasChildren()) {
+ return _elementEmpty2.default;
+ }
+
+ return null;
+ }
+ }, {
+ key: 'childViewOptions',
+ value: function childViewOptions() {
+ return {
+ indent: this.getIndent() + 10
+ };
+ }
+ }, {
+ key: 'className',
+ value: function className() {
+ var elType = this.model.get('elType');
+
+ var classes = 'elementor-navigator__element';
+
+ if (elType) {
+ classes += ' elementor-navigator__element-' + elType;
+ }
+
+ if (this.hasChildren()) {
+ classes += ' elementor-navigator__element--has-children';
+ }
+
+ return classes;
+ }
+ }, {
+ key: 'attributes',
+ value: function attributes() {
+ return {
+ 'data-model-cid': this.model.cid
+ };
+ }
+ }, {
+ key: 'templateHelpers',
+ value: function templateHelpers() {
+ var helpers = {};
+
+ if (!this.isRoot()) {
+ helpers.title = this.model.getTitle();
+
+ helpers.icon = 'section' === this.model.get('elType') ? '' : this.model.getIcon();
+ }
+
+ return helpers;
+ }
+ }, {
+ key: 'initialize',
+ value: function initialize() {
+ this.collection = this.model.get('elements');
+
+ this.childViewContainer = '.elementor-navigator__elements';
+
+ this.listenTo(this.model, 'request:edit', this.onEditRequest).listenTo(this.model, 'change', this.onModelChange).listenTo(this.model.get('settings'), 'change', this.onModelSettingsChange);
+ }
+ }, {
+ key: 'getIndent',
+ value: function getIndent() {
+ return this.getOption('indent') || 0;
+ }
+ }, {
+ key: 'isRoot',
+ value: function isRoot() {
+ return !this.model.get('elType');
+ }
+ }, {
+ key: 'hasChildren',
+ value: function hasChildren() {
+ return 'widget' !== this.model.get('elType');
+ }
+ }, {
+ key: 'toggleList',
+ value: function toggleList(state, callback) {
+ if (!this.hasChildren() || this.isRoot()) {
+ return;
+ }
+
+ var isActive = this.ui.item.hasClass('elementor-active');
+
+ if (isActive === state) {
+ return;
+ }
+
+ this.ui.item.toggleClass('elementor-active', state);
+
+ var slideMethod = 'slideToggle';
+
+ if (undefined !== state) {
+ slideMethod = 'slide' + (state ? 'Down' : 'Up');
+ }
+
+ this.ui.elements[slideMethod](300, callback);
+ }
+ }, {
+ key: 'toggleHiddenClass',
+ value: function toggleHiddenClass() {
+ this.$el.toggleClass('elementor-navigator__element--hidden', !!this.model.get('hidden'));
+ }
+ }, {
+ key: 'recursiveChildInvoke',
+ value: function recursiveChildInvoke(method) {
+ var _this2 = this,
+ _arguments = arguments;
+
+ for (var _len = arguments.length, restArgs = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
+ restArgs[_key - 1] = arguments[_key];
+ }
+
+ this[method].apply(this, restArgs);
+
+ this.children.each(function (child) {
+ if (!(child instanceof _this2.constructor)) {
+ return;
+ }
+
+ child.recursiveChildInvoke.apply(child, _arguments);
+ });
+ }
+ }, {
+ key: 'recursiveParentInvoke',
+ value: function recursiveParentInvoke(method) {
+ for (var _len2 = arguments.length, restArgs = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
+ restArgs[_key2 - 1] = arguments[_key2];
+ }
+
+ if (!(this._parent instanceof this.constructor)) {
+ return;
+ }
+
+ this._parent[method].apply(this._parent, restArgs);
+
+ this._parent.recursiveParentInvoke.apply(this._parent, arguments);
+ }
+ }, {
+ key: 'recursiveChildAgreement',
+ value: function recursiveChildAgreement(method) {
+ for (var _len3 = arguments.length, restArgs = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
+ restArgs[_key3 - 1] = arguments[_key3];
+ }
+
+ if (!this[method].apply(this, restArgs)) {
+ return false;
+ }
+
+ var hasAgreement = true;
+
+ var _iteratorNormalCompletion = true;
+ var _didIteratorError = false;
+ var _iteratorError = undefined;
+
+ try {
+ for (var _iterator = Object.values(this.children._views)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+ var child = _step.value;
+
+ if (!(child instanceof this.constructor)) {
+ continue;
+ }
+
+ if (!child.recursiveChildAgreement.apply(child, arguments)) {
+ hasAgreement = false;
+
+ break;
+ }
+ }
+ } catch (err) {
+ _didIteratorError = true;
+ _iteratorError = err;
+ } finally {
+ try {
+ if (!_iteratorNormalCompletion && _iterator.return) {
+ _iterator.return();
+ }
+ } finally {
+ if (_didIteratorError) {
+ throw _iteratorError;
+ }
+ }
+ }
+
+ return hasAgreement;
+ }
+ }, {
+ key: 'activateMouseInteraction',
+ value: function activateMouseInteraction() {
+ this.$el.on({
+ mouseenter: this.onMouseEnter.bind(this),
+ mouseleave: this.onMouseLeave.bind(this)
+ });
+ }
+ }, {
+ key: 'deactivateMouseInteraction',
+ value: function deactivateMouseInteraction() {
+ this.$el.off('mouseenter mouseleave');
+ }
+ }, {
+ key: 'dragShouldBeIgnored',
+ value: function dragShouldBeIgnored(draggedModel) {
+ var childTypes = elementor.helpers.getElementChildType(this.model.get('elType')),
+ draggedElType = draggedModel.get('elType');
+
+ if ('section' === draggedElType && !draggedModel.get('isInner')) {
+ return true;
+ }
+
+ return !childTypes || -1 === childTypes.indexOf(draggedModel.get('elType'));
+ }
+ }, {
+ key: 'addEditingClass',
+ value: function addEditingClass() {
+ this.ui.item.addClass('elementor-editing');
+ }
+ }, {
+ key: 'removeEditingClass',
+ value: function removeEditingClass() {
+ this.ui.item.removeClass('elementor-editing');
+ }
+ }, {
+ key: 'enterTitleEditing',
+ value: function enterTitleEditing() {
+ this.ui.title.attr('contenteditable', true).focus();
+
+ document.execCommand('selectAll');
+
+ elementor.addBackgroundClickListener('navigator', {
+ ignore: this.ui.title,
+ callback: this.exitTitleEditing.bind(this)
+ });
+ }
+ }, {
+ key: 'exitTitleEditing',
+ value: function exitTitleEditing() {
+ this.ui.title.attr('contenteditable', false);
+
+ var newTitle = this.ui.title.text().trim();
+
+ this.model.get('settings').set('_title', newTitle);
+
+ elementor.removeBackgroundClickListener('navigator');
+ }
+ }, {
+ key: 'activateSortable',
+ value: function activateSortable() {
+ if (!elementor.userCan('design')) {
+ return;
+ }
+
+ this.ui.elements.sortable({
+ items: '> .elementor-navigator__element',
+ placeholder: 'ui-sortable-placeholder',
+ axis: 'y',
+ forcePlaceholderSize: true,
+ connectWith: '.elementor-navigator__element-' + this.model.get('elType') + ' ' + this.ui.elements.selector,
+ cancel: '[contenteditable="true"]'
+ });
+ }
+ }, {
+ key: 'onRender',
+ value: function onRender() {
+ this.activateSortable();
+
+ this.ui.item.css('padding-' + (elementor.config.is_rtl ? 'right' : 'left'), this.getIndent());
+
+ this.toggleHiddenClass();
+ }
+ }, {
+ key: 'onModelChange',
+ value: function onModelChange() {
+ if (undefined !== this.model.changed.hidden) {
+ this.toggleHiddenClass();
+ }
+ }
+ }, {
+ key: 'onModelSettingsChange',
+ value: function onModelSettingsChange(settingsModel) {
+ if (undefined !== settingsModel.changed._title) {
+ this.ui.title.text(this.model.getTitle());
+ }
+ }
+ }, {
+ key: 'onItemClick',
+ value: function onItemClick() {
+ this.model.trigger('request:edit', { scrollIntoView: true });
+ }
+ }, {
+ key: 'onToggleClick',
+ value: function onToggleClick(event) {
+ event.stopPropagation();
+
+ this.model.trigger('request:toggleVisibility');
+ }
+ }, {
+ key: 'onTitleDoubleClick',
+ value: function onTitleDoubleClick() {
+ this.enterTitleEditing();
+ }
+ }, {
+ key: 'onTitleKeyDown',
+ value: function onTitleKeyDown(event) {
+ var ENTER_KEY = 13;
+
+ if (ENTER_KEY === event.which) {
+ event.preventDefault();
+
+ this.exitTitleEditing();
+ }
+ }
+ }, {
+ key: 'onTitlePaste',
+ value: function onTitlePaste(event) {
+ event.preventDefault();
+
+ document.execCommand('insertHTML', false, event.originalEvent.clipboardData.getData('text/plain'));
+ }
+ }, {
+ key: 'onToggleListClick',
+ value: function onToggleListClick(event) {
+ event.stopPropagation();
+
+ this.toggleList();
+ }
+ }, {
+ key: 'onSortStart',
+ value: function onSortStart(event, ui) {
+ this.model.trigger('request:sort:start', event, ui);
+
+ jQuery(ui.item).children('.elementor-navigator__item').trigger('click');
+
+ elementor.navigator.getLayout().activateElementsMouseInteraction();
+ }
+ }, {
+ key: 'onSortStop',
+ value: function onSortStop() {
+ elementor.navigator.getLayout().deactivateElementsMouseInteraction();
+ }
+ }, {
+ key: 'onSortOver',
+ value: function onSortOver(event) {
+ event.stopPropagation();
+
+ this.$el.addClass('elementor-dragging-on-child');
+ }
+ }, {
+ key: 'onSortOut',
+ value: function onSortOut(event) {
+ event.stopPropagation();
+
+ this.$el.removeClass('elementor-dragging-on-child');
+ }
+ }, {
+ key: 'onSortUpdate',
+ value: function onSortUpdate(event, ui) {
+ event.stopPropagation();
+
+ if (!this.ui.elements.is(ui.item.parent())) {
+ return;
+ }
+
+ this.model.trigger('request:sort:update', ui);
+ }
+ }, {
+ key: 'onSortReceive',
+ value: function onSortReceive(event, ui) {
+ this.model.trigger('request:sort:receive', event, ui);
+ }
+ }, {
+ key: 'onMouseEnter',
+ value: function onMouseEnter(event) {
+ var _this3 = this;
+
+ event.stopPropagation();
+
+ var dragShouldBeIgnored = this.recursiveChildAgreement('dragShouldBeIgnored', elementor.channels.data.request('dragging:model'));
+
+ if (dragShouldBeIgnored) {
+ return;
+ }
+
+ this.autoExpandTimeout = setTimeout(function () {
+ _this3.toggleList(true, function () {
+ _this3.ui.elements.sortable('refreshPositions');
+ });
+ }, 500);
+ }
+ }, {
+ key: 'onMouseLeave',
+ value: function onMouseLeave(event) {
+ event.stopPropagation();
+
+ clearTimeout(this.autoExpandTimeout);
+ }
+ }, {
+ key: 'onContextMenu',
+ value: function onContextMenu(event) {
+ this.model.trigger('request:contextmenu', event);
+ }
+ }, {
+ key: 'onEditRequest',
+ value: function onEditRequest() {
+ this.recursiveParentInvoke('toggleList', true);
+
+ elementor.navigator.getLayout().elements.currentView.recursiveChildInvoke('removeEditingClass');
+
+ this.addEditingClass();
+
+ elementor.helpers.scrollToView(this.$el, 400, elementor.navigator.getLayout().elements.$el);
+ }
+ }]);
+
+ return _class;
+}(Marionette.CompositeView);
+
+exports.default = _class;
+
+/***/ }),
+/* 53 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_Marionette$ItemView) {
+ _inherits(_class, _Marionette$ItemView);
+
+ function _class() {
+ _classCallCheck(this, _class);
+
+ return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments));
+ }
+
+ _createClass(_class, [{
+ key: 'getTemplate',
+ value: function getTemplate() {
+ return '#tmpl-elementor-navigator__elements--empty';
+ }
+ }, {
+ key: 'className',
+ value: function className() {
+ return 'elementor-empty-view';
+ }
+ }, {
+ key: 'onRendr',
+ value: function onRendr() {
+ this.$el.css('padding-' + (elementor.config.is_rtl ? 'right' : 'left'), this.getOption('indent'));
+ }
+ }]);
+
+ return _class;
+}(Marionette.ItemView);
+
+exports.default = _class;
+
+/***/ }),
+/* 54 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_Marionette$ItemView) {
+ _inherits(_class, _Marionette$ItemView);
+
+ function _class() {
+ _classCallCheck(this, _class);
+
+ return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).apply(this, arguments));
+ }
+
+ _createClass(_class, [{
+ key: 'getTemplate',
+ value: function getTemplate() {
+ return '#tmpl-elementor-navigator__root--empty';
+ }
+ }, {
+ key: 'className',
+ value: function className() {
+ return 'elementor-nerd-box';
+ }
+ }]);
+
+ return _class;
+}(Marionette.ItemView);
+
+exports.default = _class;
+
+/***/ }),
+/* 55 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var helpers;
+
+helpers = {
+ _enqueuedFonts: [],
+
+ elementsHierarchy: {
+ section: {
+ column: {
+ widget: null,
+ section: null
+ }
+ }
+ },
+
+ enqueueFont: function enqueueFont(font) {
+ if (-1 !== this._enqueuedFonts.indexOf(font)) {
+ return;
+ }
+
+ var fontType = elementor.config.controls.font.options[font],
+ fontUrl,
+ subsets = {
+ 'ru_RU': 'cyrillic',
+ 'uk': 'cyrillic',
+ 'bg_BG': 'cyrillic',
+ 'vi': 'vietnamese',
+ 'el': 'greek',
+ 'he_IL': 'hebrew'
+ };
+
+ switch (fontType) {
+ case 'googlefonts':
+ fontUrl = 'https://fonts.googleapis.com/css?family=' + font + ':100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic';
+
+ if (subsets[elementor.config.locale]) {
+ fontUrl += '&subset=' + subsets[elementor.config.locale];
+ }
+
+ break;
+
+ case 'earlyaccess':
+ var fontLowerString = font.replace(/\s+/g, '').toLowerCase();
+ fontUrl = 'https://fonts.googleapis.com/earlyaccess/' + fontLowerString + '.css';
+ break;
+ }
+
+ if (!_.isEmpty(fontUrl)) {
+ elementor.$previewContents.find('link:last').after('<link href="' + fontUrl + '" rel="stylesheet" type="text/css">');
+ }
+
+ this._enqueuedFonts.push(font);
+
+ elementor.channels.editor.trigger('font:insertion', fontType, font);
+ },
+
+ resetEnqueuedFontsCache: function resetEnqueuedFontsCache() {
+ this._enqueuedFonts = [];
+ },
+
+ getElementChildType: function getElementChildType(elementType, container) {
+ if (!container) {
+ container = this.elementsHierarchy;
+ }
+
+ if (undefined !== container[elementType]) {
+
+ if (jQuery.isPlainObject(container[elementType])) {
+ return Object.keys(container[elementType]);
+ }
+
+ return null;
+ }
+
+ for (var type in container) {
+
+ if (!container.hasOwnProperty(type)) {
+ continue;
+ }
+
+ if (!jQuery.isPlainObject(container[type])) {
+ continue;
+ }
+
+ var result = this.getElementChildType(elementType, container[type]);
+
+ if (result) {
+ return result;
+ }
+ }
+
+ return null;
+ },
+
+ getUniqueID: function getUniqueID() {
+ return Math.random().toString(16).substr(2, 7);
+ },
+
+ /*
+ * @deprecated 2.0.0
+ */
+ stringReplaceAll: function stringReplaceAll(string, replaces) {
+ var re = new RegExp(Object.keys(replaces).join('|'), 'gi');
+
+ return string.replace(re, function (matched) {
+ return replaces[matched];
+ });
+ },
+
+ isActiveControl: function isActiveControl(controlModel, values) {
+ var condition, conditions;
+
+ // TODO: Better way to get this?
+ if (_.isFunction(controlModel.get)) {
+ condition = controlModel.get('condition');
+ conditions = controlModel.get('conditions');
+ } else {
+ condition = controlModel.condition;
+ conditions = controlModel.conditions;
+ }
+
+ // Multiple conditions with relations.
+ if (conditions) {
+ return elementor.conditions.check(conditions, values);
+ }
+
+ if (_.isEmpty(condition)) {
+ return true;
+ }
+
+ var hasFields = _.filter(condition, function (conditionValue, conditionName) {
+ var conditionNameParts = conditionName.match(/([a-z_0-9]+)(?:\[([a-z_]+)])?(!?)$/i),
+ conditionRealName = conditionNameParts[1],
+ conditionSubKey = conditionNameParts[2],
+ isNegativeCondition = !!conditionNameParts[3],
+ controlValue = values[conditionRealName];
+
+ if (values.__dynamic__ && values.__dynamic__[conditionRealName]) {
+ controlValue = values.__dynamic__[conditionRealName];
+ }
+
+ if (undefined === controlValue) {
+ return true;
+ }
+
+ if (conditionSubKey && 'object' === (typeof controlValue === 'undefined' ? 'undefined' : _typeof(controlValue))) {
+ controlValue = controlValue[conditionSubKey];
+ }
+
+ // If it's a non empty array - check if the conditionValue contains the controlValue,
+ // If the controlValue is a non empty array - check if the controlValue contains the conditionValue
+ // otherwise check if they are equal. ( and give the ability to check if the value is an empty array )
+ var isContains;
+
+ if (_.isArray(conditionValue) && !_.isEmpty(conditionValue)) {
+ isContains = _.contains(conditionValue, controlValue);
+ } else if (_.isArray(controlValue) && !_.isEmpty(controlValue)) {
+ isContains = _.contains(controlValue, conditionValue);
+ } else {
+ isContains = _.isEqual(conditionValue, controlValue);
+ }
+
+ return isNegativeCondition ? isContains : !isContains;
+ });
+
+ return _.isEmpty(hasFields);
+ },
+
+ cloneObject: function cloneObject(object) {
+ return JSON.parse(JSON.stringify(object));
+ },
+
+ firstLetterUppercase: function firstLetterUppercase(string) {
+ return string[0].toUpperCase() + string.slice(1);
+ },
+
+ disableElementEvents: function disableElementEvents($element) {
+ $element.each(function () {
+ var currentPointerEvents = this.style.pointerEvents;
+
+ if ('none' === currentPointerEvents) {
+ return;
+ }
+
+ jQuery(this).data('backup-pointer-events', currentPointerEvents).css('pointer-events', 'none');
+ });
+ },
+
+ enableElementEvents: function enableElementEvents($element) {
+ $element.each(function () {
+ var $this = jQuery(this),
+ backupPointerEvents = $this.data('backup-pointer-events');
+
+ if (undefined === backupPointerEvents) {
+ return;
+ }
+
+ $this.removeData('backup-pointer-events').css('pointer-events', backupPointerEvents);
+ });
+ },
+
+ getColorPickerPaletteIndex: function getColorPickerPaletteIndex(paletteKey) {
+ return ['7', '8', '1', '5', '2', '3', '6', '4'].indexOf(paletteKey);
+ },
+
+ wpColorPicker: function wpColorPicker($element, options) {
+ var self = this,
+ colorPickerScheme = elementor.schemes.getScheme('color-picker'),
+ items = _.sortBy(colorPickerScheme.items, function (item) {
+ return self.getColorPickerPaletteIndex(item.key);
+ }),
+ defaultOptions = {
+ width: window.innerWidth >= 1440 ? 271 : 251,
+ palettes: _.pluck(items, 'value')
+ };
+
+ if (options) {
+ _.extend(defaultOptions, options);
+ }
+
+ return $element.wpColorPicker(defaultOptions);
+ },
+
+ isInViewport: function isInViewport(element, html) {
+ var rect = element.getBoundingClientRect();
+ html = html || document.documentElement;
+ return rect.top >= 0 && rect.left >= 0 && rect.bottom <= (window.innerHeight || html.clientHeight) && rect.right <= (window.innerWidth || html.clientWidth);
+ },
+
+ scrollToView: function scrollToView($element, timeout, $parent) {
+ if (undefined === timeout) {
+ timeout = 500;
+ }
+
+ var $scrolled = $parent,
+ $elementorFrontendWindow = elementorFrontend.getElements('$window');
+
+ if (!$parent) {
+ $parent = $elementorFrontendWindow;
+
+ $scrolled = elementor.$previewContents.find('html, body');
+ }
+
+ setTimeout(function () {
+ var parentHeight = $parent.height(),
+ parentScrollTop = $parent.scrollTop(),
+ elementTop = $parent === $elementorFrontendWindow ? $element.offset().top : $element[0].offsetTop,
+ topToCheck = elementTop - parentScrollTop;
+
+ if (topToCheck > 0 && topToCheck < parentHeight) {
+ return;
+ }
+
+ var scrolling = elementTop - parentHeight / 2;
+
+ $scrolled.stop(true).animate({ scrollTop: scrolling }, 1000);
+ }, timeout);
+ },
+
+ getElementInlineStyle: function getElementInlineStyle($element, properties) {
+ var style = {},
+ elementStyle = $element[0].style;
+
+ properties.forEach(function (property) {
+ style[property] = undefined !== elementStyle[property] ? elementStyle[property] : '';
+ });
+
+ return style;
+ },
+
+ cssWithBackup: function cssWithBackup($element, backupState, rules) {
+ var cssBackup = this.getElementInlineStyle($element, Object.keys(rules));
+
+ $element.data('css-backup-' + backupState, cssBackup).css(rules);
+ },
+
+ recoverCSSBackup: function recoverCSSBackup($element, backupState) {
+ var backupKey = 'css-backup-' + backupState;
+
+ $element.css($element.data(backupKey));
+
+ $element.removeData(backupKey);
+ },
+
+ compareVersions: function compareVersions(versionA, versionB, operator) {
+ var prepareVersion = function prepareVersion(version) {
+ version = version + '';
+
+ return version.replace(/[^\d.]+/, '.-1.');
+ };
+
+ versionA = prepareVersion(versionA);
+ versionB = prepareVersion(versionB);
+
+ if (versionA === versionB) {
+ return !operator || /^={2,3}$/.test(operator);
+ }
+
+ var versionAParts = versionA.split('.').map(Number),
+ versionBParts = versionB.split('.').map(Number),
+ longestVersionParts = Math.max(versionAParts.length, versionBParts.length);
+
+ for (var i = 0; i < longestVersionParts; i++) {
+ var valueA = versionAParts[i] || 0,
+ valueB = versionBParts[i] || 0;
+
+ if (valueA !== valueB) {
+ return this.conditions.compare(valueA, valueB, operator);
+ }
+ }
+ }
+};
+
+module.exports = helpers;
+
+/***/ }),
+/* 56 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var ImagesManager;
+
+ImagesManager = function ImagesManager() {
+ var self = this;
+
+ var cache = {};
+
+ var debounceDelay = 300;
+
+ var registeredItems = [];
+
+ var getNormalizedSize = function getNormalizedSize(image) {
+ var size,
+ imageSize = image.size;
+
+ if ('custom' === imageSize) {
+ var customDimension = image.dimension;
+
+ if (customDimension.width || customDimension.height) {
+ size = 'custom_' + customDimension.width + 'x' + customDimension.height;
+ } else {
+ return 'full';
+ }
+ } else {
+ size = imageSize;
+ }
+
+ return size;
+ };
+
+ self.onceTriggerChange = _.once(function (model) {
+ setTimeout(function () {
+ model.get('settings').trigger('change', model.get('settings'));
+ }, 700);
+ });
+
+ self.getImageUrl = function (image) {
+ // Register for AJAX checking
+ self.registerItem(image);
+
+ var imageUrl = self.getItem(image);
+
+ // If it's not in cache, like a new dropped widget or a custom size - get from settings
+ if (!imageUrl) {
+
+ if ('custom' === image.size) {
+
+ if (elementor.getPanelView() && 'editor' === elementor.getPanelView().getCurrentPageName() && image.model) {
+ // Trigger change again, so it's will load from the cache
+ self.onceTriggerChange(image.model);
+ }
+
+ return;
+ }
+
+ // If it's a new dropped widget
+ imageUrl = image.url;
+ }
+
+ return imageUrl;
+ };
+
+ self.getItem = function (image) {
+ var size = getNormalizedSize(image),
+ id = image.id;
+
+ if (!size) {
+ return false;
+ }
+
+ if (cache[id] && cache[id][size]) {
+ return cache[id][size];
+ }
+
+ return false;
+ };
+
+ self.registerItem = function (image) {
+ if ('' === image.id) {
+ // It's a new dropped widget
+ return;
+ }
+
+ if (self.getItem(image)) {
+ // It's already in cache
+ return;
+ }
+
+ registeredItems.push(image);
+
+ self.debounceGetRemoteItems();
+ };
+
+ self.getRemoteItems = function () {
+ var requestedItems = [],
+ registeredItemsLength = Object.keys(registeredItems).length,
+ image,
+ index;
+
+ // It's one item, so we can render it from remote server
+ if (0 === registeredItemsLength) {
+ return;
+ } else if (1 === registeredItemsLength) {
+ image = registeredItems[Object.keys(registeredItems)[0]];
+
+ if (image && image.model) {
+ image.model.renderRemoteServer();
+ return;
+ }
+ }
+
+ for (index in registeredItems) {
+ image = registeredItems[index];
+
+ var size = getNormalizedSize(image),
+ id = image.id,
+ isFirstTime = !cache[id] || 0 === Object.keys(cache[id]).length;
+
+ requestedItems.push({
+ id: id,
+ size: size,
+ is_first_time: isFirstTime
+ });
+ }
+
+ elementor.ajax.send('get_images_details', {
+ data: {
+ items: requestedItems
+ },
+ success: function success(data) {
+ var id, size;
+
+ for (id in data) {
+ if (!cache[id]) {
+ cache[id] = {};
+ }
+
+ for (size in data[id]) {
+ cache[id][size] = data[id][size];
+ }
+ }
+ registeredItems = [];
+ }
+ });
+ };
+
+ self.debounceGetRemoteItems = _.debounce(self.getRemoteItems, debounceDelay);
+};
+
+module.exports = new ImagesManager();
+
+/***/ }),
+/* 57 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Debug = function Debug() {
+ var self = this,
+ errorStack = [],
+ settings = {},
+ elements = {};
+
+ var initSettings = function initSettings() {
+ settings = {
+ debounceDelay: 500,
+ urlsToWatch: ['elementor/assets']
+ };
+ };
+
+ var initElements = function initElements() {
+ elements.$window = jQuery(window);
+ };
+
+ var onError = function onError(event) {
+ var originalEvent = event.originalEvent,
+ error = originalEvent.error;
+
+ if (!error) {
+ return;
+ }
+
+ var isInWatchList = false,
+ urlsToWatch = settings.urlsToWatch;
+
+ jQuery.each(urlsToWatch, function () {
+ if (-1 !== error.stack.indexOf(this)) {
+ isInWatchList = true;
+
+ return false;
+ }
+ });
+
+ if (!isInWatchList) {
+ return;
+ }
+
+ self.addError({
+ type: error.name,
+ message: error.message,
+ url: originalEvent.filename,
+ line: originalEvent.lineno,
+ column: originalEvent.colno
+ });
+ };
+
+ var bindEvents = function bindEvents() {
+ elements.$window.on('error', onError);
+ };
+
+ var init = function init() {
+ initSettings();
+
+ initElements();
+
+ bindEvents();
+
+ self.sendErrors = _.debounce(self.sendErrors, settings.debounceDelay);
+ };
+
+ this.addURLToWatch = function (url) {
+ settings.urlsToWatch.push(url);
+ };
+
+ this.addCustomError = function (error, category, tag) {
+ var errorInfo = {
+ type: error.name,
+ message: error.message,
+ url: error.fileName || error.sourceURL,
+ line: error.lineNumber || error.line,
+ column: error.columnNumber || error.column,
+ customFields: {
+ category: category || 'general',
+ tag: tag
+ }
+ };
+
+ if (!errorInfo.url) {
+ var stackInfo = error.stack.match(/\n {4}at (.*?(?=:(\d+):(\d+)))/);
+
+ if (stackInfo) {
+ errorInfo.url = stackInfo[1];
+ errorInfo.line = stackInfo[2];
+ errorInfo.column = stackInfo[3];
+ }
+ }
+
+ this.addError(errorInfo);
+ };
+
+ this.addError = function (errorParams) {
+ var defaultParams = {
+ type: 'Error',
+ timestamp: Math.floor(new Date().getTime() / 1000),
+ message: null,
+ url: null,
+ line: null,
+ column: null,
+ customFields: {}
+ };
+
+ errorStack.push(jQuery.extend(true, defaultParams, errorParams));
+
+ self.sendErrors();
+ };
+
+ this.sendErrors = function () {
+ // Avoid recursions on errors in ajax
+ elements.$window.off('error', onError);
+
+ jQuery.ajax({
+ url: ElementorConfig.ajaxurl,
+ method: 'POST',
+ data: {
+ action: 'elementor_debug_log',
+ data: errorStack
+ },
+ success: function success() {
+ errorStack = [];
+
+ // Restore error handler
+ elements.$window.on('error', onError);
+ }
+ });
+ };
+
+ init();
+};
+
+module.exports = new Debug();
+
+/***/ }),
+/* 58 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Schemes,
+ Stylesheet = __webpack_require__(24),
+ ControlsCSSParser = __webpack_require__(13);
+
+Schemes = function Schemes() {
+ var self = this,
+ stylesheet = new Stylesheet(),
+ schemes = {},
+ settings = {
+ selectorWrapperPrefix: '.elementor-widget-'
+ },
+ elements = {};
+
+ var buildUI = function buildUI() {
+ elements.$previewHead.append(elements.$style);
+ };
+
+ var initElements = function initElements() {
+ elements.$style = jQuery('<style>', {
+ id: 'elementor-style-scheme'
+ });
+
+ elements.$previewHead = elementor.$previewContents.find('head');
+ };
+
+ var initSchemes = function initSchemes() {
+ schemes = elementor.helpers.cloneObject(elementor.config.schemes.items);
+ };
+
+ var fetchControlStyles = function fetchControlStyles(control, controlsStack, widgetType) {
+ ControlsCSSParser.addControlStyleRules(stylesheet, control, controlsStack, function (control) {
+ return self.getSchemeValue(control.scheme.type, control.scheme.value, control.scheme.key).value;
+ }, ['{{WRAPPER}}'], [settings.selectorWrapperPrefix + widgetType]);
+ };
+
+ var fetchWidgetControlsStyles = function fetchWidgetControlsStyles(widget) {
+ var widgetSchemeControls = self.getWidgetSchemeControls(widget);
+
+ _.each(widgetSchemeControls, function (control) {
+ fetchControlStyles(control, widgetSchemeControls, widget.widget_type);
+ });
+ };
+
+ var fetchAllWidgetsSchemesStyle = function fetchAllWidgetsSchemesStyle() {
+ _.each(elementor.config.widgets, function (widget) {
+ fetchWidgetControlsStyles(widget);
+ });
+ };
+
+ this.init = function () {
+ initElements();
+ buildUI();
+ initSchemes();
+
+ return self;
+ };
+
+ this.getWidgetSchemeControls = function (widget) {
+ return _.filter(widget.controls, function (control) {
+ return _.isObject(control.scheme);
+ });
+ };
+
+ this.getSchemes = function () {
+ return schemes;
+ };
+
+ this.getEnabledSchemesTypes = function () {
+ return elementor.config.schemes.enabled_schemes;
+ };
+
+ this.getScheme = function (schemeType) {
+ return schemes[schemeType];
+ };
+
+ this.getSchemeValue = function (schemeType, value, key) {
+ if (this.getEnabledSchemesTypes().indexOf(schemeType) < 0) {
+ return false;
+ }
+
+ var scheme = self.getScheme(schemeType),
+ schemeValue = scheme.items[value];
+
+ if (key && _.isObject(schemeValue)) {
+ var clonedSchemeValue = elementor.helpers.cloneObject(schemeValue);
+
+ clonedSchemeValue.value = schemeValue.value[key];
+
+ return clonedSchemeValue;
+ }
+
+ return schemeValue;
+ };
+
+ this.printSchemesStyle = function () {
+ stylesheet.empty();
+
+ fetchAllWidgetsSchemesStyle();
+
+ elements.$style.text(stylesheet);
+ };
+
+ this.resetSchemes = function (schemeName) {
+ schemes[schemeName] = elementor.helpers.cloneObject(elementor.config.schemes.items[schemeName]);
+ };
+
+ this.saveScheme = function (schemeName) {
+ elementor.config.schemes.items[schemeName].items = elementor.helpers.cloneObject(schemes[schemeName].items);
+
+ var itemsToSave = {};
+
+ _.each(schemes[schemeName].items, function (item, key) {
+ itemsToSave[key] = item.value;
+ });
+
+ NProgress.start();
+
+ elementor.ajax.send('apply_scheme', {
+ data: {
+ scheme_name: schemeName,
+ data: JSON.stringify(itemsToSave)
+ },
+ success: function success() {
+ NProgress.done();
+ }
+ });
+ };
+
+ this.setSchemeValue = function (schemeName, itemKey, value) {
+ schemes[schemeName].items[itemKey].value = value;
+ };
+};
+
+module.exports = new Schemes();
+
+/***/ }),
+/* 59 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var presetsFactory;
+
+presetsFactory = {
+
+ getPresetsDictionary: function getPresetsDictionary() {
+ return {
+ 11: 100 / 9,
+ 12: 100 / 8,
+ 14: 100 / 7,
+ 16: 100 / 6,
+ 33: 100 / 3,
+ 66: 2 / 3 * 100,
+ 83: 5 / 6 * 100
+ };
+ },
+
+ getAbsolutePresetValues: function getAbsolutePresetValues(preset) {
+ var clonedPreset = elementor.helpers.cloneObject(preset),
+ presetDictionary = this.getPresetsDictionary();
+
+ _.each(clonedPreset, function (unitValue, unitIndex) {
+ if (presetDictionary[unitValue]) {
+ clonedPreset[unitIndex] = presetDictionary[unitValue];
+ }
+ });
+
+ return clonedPreset;
+ },
+
+ getPresets: function getPresets(columnsCount, presetIndex) {
+ var presets = elementor.helpers.cloneObject(elementor.config.elements.section.presets);
+
+ if (columnsCount) {
+ presets = presets[columnsCount];
+ }
+
+ if (presetIndex) {
+ presets = presets[presetIndex];
+ }
+
+ return presets;
+ },
+
+ getPresetByStructure: function getPresetByStructure(structure) {
+ var parsedStructure = this.getParsedStructure(structure);
+
+ return this.getPresets(parsedStructure.columnsCount, parsedStructure.presetIndex);
+ },
+
+ getParsedStructure: function getParsedStructure(structure) {
+ structure += ''; // Make sure this is a string
+
+ return {
+ columnsCount: structure.slice(0, -1),
+ presetIndex: structure.substr(-1)
+ };
+ },
+
+ getPresetSVG: function getPresetSVG(preset, svgWidth, svgHeight, separatorWidth) {
+ svgWidth = svgWidth || 100;
+ svgHeight = svgHeight || 50;
+ separatorWidth = separatorWidth || 2;
+
+ var absolutePresetValues = this.getAbsolutePresetValues(preset),
+ presetSVGPath = this._generatePresetSVGPath(absolutePresetValues, svgWidth, svgHeight, separatorWidth);
+
+ return this._createSVGPreset(presetSVGPath, svgWidth, svgHeight);
+ },
+
+ _createSVGPreset: function _createSVGPreset(presetPath, svgWidth, svgHeight) {
+ var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+
+ svg.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink');
+ svg.setAttribute('viewBox', '0 0 ' + svgWidth + ' ' + svgHeight);
+
+ var path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
+
+ path.setAttribute('d', presetPath);
+
+ svg.appendChild(path);
+
+ return svg;
+ },
+
+ _generatePresetSVGPath: function _generatePresetSVGPath(preset, svgWidth, svgHeight, separatorWidth) {
+ var DRAW_SIZE = svgWidth - separatorWidth * (preset.length - 1);
+
+ var xPointer = 0,
+ dOutput = '';
+
+ for (var i = 0; i < preset.length; i++) {
+ if (i) {
+ dOutput += ' ';
+ }
+
+ var increment = preset[i] / 100 * DRAW_SIZE;
+
+ xPointer += increment;
+
+ dOutput += 'M' + +xPointer.toFixed(4) + ',0';
+
+ dOutput += 'V' + svgHeight;
+
+ dOutput += 'H' + +(xPointer - increment).toFixed(4);
+
+ dOutput += 'V0Z';
+
+ xPointer += separatorWidth;
+ }
+
+ return dOutput;
+ }
+};
+
+module.exports = presetsFactory;
+
+/***/ }),
+/* 60 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var TemplateLibraryLayoutView = __webpack_require__(61),
+ TemplateLibraryCollection = __webpack_require__(73),
+ TemplateLibraryManager;
+
+TemplateLibraryManager = function TemplateLibraryManager() {
+ var self = this,
+ deleteDialog,
+ errorDialog,
+ layout,
+ config = {},
+ startIntent = {},
+ templateTypes = {},
+ filterTerms = {},
+ templatesCollection;
+
+ var initLayout = function initLayout() {
+ layout = new TemplateLibraryLayoutView();
+ };
+
+ var registerDefaultTemplateTypes = function registerDefaultTemplateTypes() {
+ var data = {
+ saveDialog: {
+ description: elementor.translate('save_your_template_description')
+ },
+ ajaxParams: {
+ success: function success(data) {
+ self.getTemplatesCollection().add(data);
+
+ self.setTemplatesPage('local');
+ },
+ error: function error(data) {
+ self.showErrorDialog(data);
+ }
}
};
- _.each( hotKeysHandlers, function( handlers, keyCode ) {
- _.each( handlers, function( handler, handlerName ) {
- hotKeysManager.addHotKeyHandler( keyCode, handlerName, handler );
- } );
- } );
+ _.each(['page', 'section'], function (type) {
+ var safeData = jQuery.extend(true, {}, data, {
+ saveDialog: {
+ title: elementor.translate('save_your_template', [elementor.translate(type)])
+ }
+ });
+
+ self.registerTemplateType(type, safeData);
+ });
+ };
+
+ var registerDefaultFilterTerms = function registerDefaultFilterTerms() {
+ filterTerms = {
+ text: {
+ callback: function callback(value) {
+ value = value.toLowerCase();
+
+ if (this.get('title').toLowerCase().indexOf(value) >= 0) {
+ return true;
+ }
+
+ return _.any(this.get('tags'), function (tag) {
+ return tag.toLowerCase().indexOf(value) >= 0;
+ });
+ }
+ },
+ type: {},
+ subtype: {},
+ favorite: {}
+ };
+ };
+
+ var setIntentFilters = function setIntentFilters() {
+ jQuery.each(startIntent.filters, function (filterKey, filterValue) {
+ self.setFilter(filterKey, filterValue, true);
+ });
+ };
+
+ this.init = function () {
+ registerDefaultTemplateTypes();
- hotKeysManager.bindListener( this.$window.add( elementorFrontend.getElements( '$window' ) ) );
- },
+ registerDefaultFilterTerms();
- preventClicksInsideEditor: function() {
- this.$previewContents.on( 'click', function( event ) {
- var $target = jQuery( event.target ),
- editMode = elementor.channels.dataEditMode.request( 'activeMode' ),
- isClickInsideElementor = !! $target.closest( '#elementor, .pen-menu' ).length,
- isTargetInsideDocument = this.contains( $target[0] );
+ elementor.addBackgroundClickListener('libraryToggleMore', {
+ element: '.elementor-template-library-template-more'
+ });
+ };
- if ( isClickInsideElementor && 'edit' === editMode || ! isTargetInsideDocument ) {
- return;
- }
+ this.getTemplateTypes = function (type) {
+ if (type) {
+ return templateTypes[type];
+ }
- if ( $target.closest( 'a:not(.elementor-clickable)' ).length ) {
- event.preventDefault();
+ return templateTypes;
+ };
+
+ this.registerTemplateType = function (type, data) {
+ templateTypes[type] = data;
+ };
+
+ this.deleteTemplate = function (templateModel, options) {
+ var dialog = self.getDeleteDialog();
+
+ dialog.onConfirm = function () {
+ if (options.onConfirm) {
+ options.onConfirm();
}
- if ( ! isClickInsideElementor ) {
- var panelView = elementor.getPanelView();
+ elementor.ajax.send('delete_template', {
+ data: {
+ source: templateModel.get('source'),
+ template_id: templateModel.get('template_id')
+ },
+ success: function success(response) {
+ templatesCollection.remove(templateModel, { silent: true });
- if ( 'elements' !== panelView.getCurrentPageName() ) {
- panelView.setPage( 'elements' );
+ if (options.onSuccess) {
+ options.onSuccess(response);
+ }
}
- }
- } );
- },
+ });
+ };
- addBackgroundClickArea: function( element ) {
- element.addEventListener( 'click', this.onBackgroundClick.bind( this ), true );
- },
+ dialog.show();
+ };
- addBackgroundClickListener: function( key, listener ) {
- this.backgroundClickListeners[ key ] = listener;
- },
+ this.importTemplate = function (templateModel, options) {
+ options = options || {};
- showFatalErrorDialog: function( options ) {
- var defaultOptions = {
- id: 'elementor-fatal-error-dialog',
- headerMessage: '',
- message: '',
- position: {
- my: 'center center',
- at: 'center center'
+ layout.showLoadingView();
+
+ self.requestTemplateContent(templateModel.get('source'), templateModel.get('template_id'), {
+ data: {
+ page_settings: options.withPageSettings
},
- strings: {
- confirm: elementor.translate( 'learn_more' ),
- cancel: elementor.translate( 'go_back' )
+ success: function success(data) {
+ self.closeModal();
+
+ elementor.channels.data.trigger('template:before:insert', templateModel);
+
+ elementor.getPreviewView().addChildModel(data.content, startIntent.importOptions || {});
+
+ elementor.channels.data.trigger('template:after:insert', templateModel);
+
+ if (options.withPageSettings) {
+ elementor.settings.page.model.set(data.page_settings);
+ }
},
- onConfirm: null,
- onCancel: function() {
- parent.history.go( -1 );
+ error: function error(data) {
+ self.showErrorDialog(data);
},
- hide: {
- onBackgroundClick: false,
- onButtonClick: false
+ complete: function complete() {
+ layout.hideLoadingView();
+ }
+ });
+ };
+
+ this.saveTemplate = function (type, data) {
+ var templateType = templateTypes[type];
+
+ _.extend(data, {
+ source: 'local',
+ type: type
+ });
+
+ if (templateType.prepareSavedData) {
+ data = templateType.prepareSavedData(data);
+ }
+
+ data.content = JSON.stringify(data.content);
+
+ var ajaxParams = { data: data };
+
+ if (templateType.ajaxParams) {
+ _.extend(ajaxParams, templateType.ajaxParams);
+ }
+
+ elementor.ajax.send('save_template', ajaxParams);
+ };
+
+ this.requestTemplateContent = function (source, id, ajaxOptions) {
+ var options = {
+ data: {
+ source: source,
+ edit_mode: true,
+ display: true,
+ template_id: id
}
};
- options = jQuery.extend( true, defaultOptions, options );
+ if (ajaxOptions) {
+ jQuery.extend(true, options, ajaxOptions);
+ }
+
+ return elementor.ajax.send('get_template_data', options);
+ };
- this.dialogsManager.createWidget( 'confirm', options ).show();
- },
+ this.markAsFavorite = function (templateModel, favorite) {
+ var options = {
+ data: {
+ source: templateModel.get('source'),
+ template_id: templateModel.get('template_id'),
+ favorite: favorite
+ }
+ };
- checkPageStatus: function() {
- if ( elementor.config.current_revision_id !== elementor.config.document.id ) {
- this.notifications.showToast( {
- message: this.translate( 'working_on_draft_notification' ),
- buttons: [
- {
- name: 'view_revisions',
- text: elementor.translate( 'view_all_revisions' ),
- callback: function() {
- var panel = elementor.getPanelView();
+ return elementor.ajax.send('mark_template_as_favorite', options);
+ };
- panel.setPage( 'historyPage' );
- panel.getCurrentPageView().activateTab( 'revisions' );
- }
- }
- ]
- } );
+ this.getDeleteDialog = function () {
+ if (!deleteDialog) {
+ deleteDialog = elementor.dialogsManager.createWidget('confirm', {
+ id: 'elementor-template-library-delete-dialog',
+ headerMessage: elementor.translate('delete_template'),
+ message: elementor.translate('delete_template_confirm'),
+ strings: {
+ confirm: elementor.translate('delete')
+ }
+ });
}
- },
- openLibraryOnStart: function() {
- if ( '#library' === location.hash ) {
- elementor.templates.startModal();
+ return deleteDialog;
+ };
- location.hash = '';
+ this.getErrorDialog = function () {
+ if (!errorDialog) {
+ errorDialog = elementor.dialogsManager.createWidget('alert', {
+ id: 'elementor-template-library-error-dialog',
+ headerMessage: elementor.translate('an_error_occurred')
+ });
}
- },
- onStart: function() {
- this.$window = jQuery( window );
+ return errorDialog;
+ };
- this.$body = jQuery( 'body' );
+ this.getLayout = function () {
+ return layout;
+ };
- NProgress.start();
- NProgress.inc( 0.2 );
+ this.getTemplatesCollection = function () {
+ return templatesCollection;
+ };
- this.config = ElementorConfig;
+ this.getConfig = function (item) {
+ if (item) {
+ return config[item];
+ }
- Backbone.Radio.DEBUG = false;
- Backbone.Radio.tuneIn( 'ELEMENTOR' );
+ return config;
+ };
- this.initModulesBC();
+ this.requestLibraryData = function (options) {
+ if (templatesCollection && !options.forceUpdate) {
+ if (options.onUpdate) {
+ options.onUpdate();
+ }
- this.initComponents();
- this.initEnvData();
+ return;
+ }
- if ( ! this.checkEnvCompatibility() ) {
- this.onEnvNotCompatible();
+ if (options.onBeforeUpdate) {
+ options.onBeforeUpdate();
}
- this.channels.dataEditMode.reply( 'activeMode', 'edit' );
+ var ajaxOptions = {
+ data: {},
+ success: function success(data) {
+ templatesCollection = new TemplateLibraryCollection(data.templates);
- this.listenTo( this.channels.dataEditMode, 'switch', this.onEditModeSwitched );
+ config = data.config;
- this.initClearPageDialog();
- this.addBackgroundClickArea( document );
+ if (options.onUpdate) {
+ options.onUpdate();
+ }
+ }
+ };
- this.$window.trigger( 'elementor:init' );
+ if (options.forceSync) {
+ ajaxOptions.data.sync = true;
+ }
- this.initPreview();
- this.logSite();
- },
+ elementor.ajax.send('get_library_data', ajaxOptions);
+ };
- onPreviewLoaded: function() {
- NProgress.done();
+ this.startModal = function (customStartIntent) {
+ if (!layout) {
+ initLayout();
+ }
- var previewWindow = this.$preview[0].contentWindow;
+ layout.showModal();
- if ( ! previewWindow.elementorFrontend ) {
- this.onPreviewLoadingError();
+ self.requestLibraryData({
+ onBeforeUpdate: layout.showLoadingView.bind(layout),
+ onUpdate: function onUpdate() {
+ var documentType = elementor.config.document.remote_type,
+ isBlockType = -1 !== config.categories.indexOf(documentType),
+ oldStartIntent = Object.create(startIntent);
- return;
+ startIntent = jQuery.extend({
+ filters: {
+ source: 'remote',
+ type: isBlockType ? 'block' : 'page',
+ subtype: isBlockType ? documentType : null
+ },
+ onReady: self.showTemplates
+ }, customStartIntent);
+
+ var isSameIntent = _.isEqual(Object.getPrototypeOf(oldStartIntent), startIntent);
+
+ if (isSameIntent && 'elementor-template-library-templates' === layout.modalContent.currentView.id) {
+ return;
+ }
+
+ layout.hideLoadingView();
+
+ setIntentFilters();
+
+ startIntent.onReady();
+ }
+ });
+ };
+
+ this.closeModal = function () {
+ layout.hideModal();
+ };
+
+ this.getFilter = function (name) {
+ return elementor.channels.templates.request('filter:' + name);
+ };
+
+ this.setFilter = function (name, value, silent) {
+ elementor.channels.templates.reply('filter:' + name, value);
+
+ if (!silent) {
+ elementor.channels.templates.trigger('filter:change');
}
+ };
- this.$previewContents = this.$preview.contents();
- this.$previewElementorEl = this.$previewContents.find( '#elementor' );
+ this.getFilterTerms = function (termName) {
+ if (termName) {
+ return filterTerms[termName];
+ }
- if ( ! this.$previewElementorEl.length ) {
- this.onPreviewElNotFound();
+ return filterTerms;
+ };
- return;
+ this.setTemplatesPage = function (source, type, silent) {
+ elementor.channels.templates.stopReplying();
+
+ self.setFilter('source', source, true);
+
+ if (type) {
+ self.setFilter('type', type, true);
}
- this.initFrontend();
- this.initElements();
- this.initHotKeys();
+ if (!silent) {
+ self.showTemplates();
+ }
+ };
- var iframeRegion = new Marionette.Region( {
- // Make sure you get the DOM object out of the jQuery object
- el: this.$previewElementorEl[0]
- } );
+ this.showTemplates = function () {
+ var activeSource = self.getFilter('source');
- this.schemes.init();
- this.schemes.printSchemesStyle();
+ var templatesToShow = templatesCollection.filter(function (model) {
+ if (activeSource !== model.get('source')) {
+ return false;
+ }
- this.preventClicksInsideEditor();
+ var typeInfo = templateTypes[model.get('type')];
+
+ return !typeInfo || false !== typeInfo.showInLibrary;
+ });
+
+ layout.showTemplatesView(new TemplateLibraryCollection(templatesToShow));
+ };
- this.addBackgroundClickArea( elementorFrontend.getElements( '$document' )[0] );
+ this.showErrorDialog = function (errorMessage) {
+ if ('object' === (typeof errorMessage === 'undefined' ? 'undefined' : _typeof(errorMessage))) {
+ var message = '';
+
+ _.each(errorMessage, function (error) {
+ message += '<div>' + error.message + '.</div>';
+ });
- if ( this.previewLoadedOnce ) {
- this.getPanelView().setPage( 'elements' );
+ errorMessage = message;
+ } else if (errorMessage) {
+ errorMessage += '.';
} else {
- this.onFirstPreviewLoaded();
+ errorMessage = '<i><The error message is empty></i>';
}
- this.addRegions( {
- sections: iframeRegion
- } );
+ self.getErrorDialog().setMessage(elementor.translate('templates_request_error') + '<div id="elementor-template-library-error-info">' + errorMessage + '</div>').show();
+ };
+};
+
+module.exports = new TemplateLibraryManager();
- var Preview = require( 'elementor-views/preview' );
+/***/ }),
+/* 61 */
+/***/ (function(module, exports, __webpack_require__) {
- this.getRegion( 'sections' ).show( new Preview( {
- collection: this.elements
- } ) );
+"use strict";
- this.$previewContents.children().addClass( 'elementor-html' );
- elementorFrontend.getElements( '$body' ).addClass( 'elementor-editor-active' );
+var BaseModalLayout = __webpack_require__(8),
+ TemplateLibraryHeaderActionsView = __webpack_require__(62),
+ TemplateLibraryHeaderMenuView = __webpack_require__(63),
+ TemplateLibraryHeaderPreviewView = __webpack_require__(64),
+ TemplateLibraryHeaderBackView = __webpack_require__(65),
+ TemplateLibraryCollectionView = __webpack_require__(66),
+ TemplateLibrarySaveTemplateView = __webpack_require__(70),
+ TemplateLibraryImportView = __webpack_require__(71),
+ TemplateLibraryPreviewView = __webpack_require__(72);
- if ( ! elementor.userCan( 'design' ) ) {
- elementorFrontend.getElements( '$body' ).addClass( 'elementor-editor-content-only' );
- }
+module.exports = BaseModalLayout.extend({
- this.changeDeviceMode( this._defaultDeviceMode );
+ getModalOptions: function getModalOptions() {
+ return {
+ id: 'elementor-template-library-modal'
+ };
+ },
- jQuery( '#elementor-loading, #elementor-preview-loading' ).fadeOut( 600 );
+ getLogoOptions: function getLogoOptions() {
+ return {
+ title: elementor.translate('library'),
+ click: function click() {
+ elementor.templates.setTemplatesPage('remote', 'page');
+ }
+ };
+ },
- _.defer( function() {
- elementorFrontend.getElements( 'window' ).jQuery.holdReady( false );
- } );
+ getTemplateActionButton: function getTemplateActionButton(templateData) {
+ var viewId = '#tmpl-elementor-template-library-' + (templateData.isPro ? 'get-pro-button' : 'insert-button');
- this.enqueueTypographyFonts();
+ viewId = elementor.hooks.applyFilters('elementor/editor/template-library/template/action-button', viewId, templateData);
- this.onEditModeSwitched();
+ var template = Marionette.TemplateCache.get(viewId);
- this.trigger( 'preview:loaded' );
+ return Marionette.Renderer.render(template);
},
- onFirstPreviewLoaded: function() {
- this.addRegions( {
- panel: '#elementor-panel'
- } );
-
- var PanelLayoutView = require( 'elementor-layouts/panel/panel' );
- this.panel.show( new PanelLayoutView() );
+ setHeaderDefaultParts: function setHeaderDefaultParts() {
+ var headerView = this.getHeaderView();
- this.setResizablePanel();
- this.heartbeat.init();
- this.checkPageStatus();
- this.openLibraryOnStart();
+ headerView.tools.show(new TemplateLibraryHeaderActionsView());
+ headerView.menuArea.show(new TemplateLibraryHeaderMenuView());
- this.previewLoadedOnce = true;
+ this.showLogo();
},
- onEditModeSwitched: function() {
- var activeMode = this.channels.dataEditMode.request( 'activeMode' );
+ showTemplatesView: function showTemplatesView(templatesCollection) {
+ this.modalContent.show(new TemplateLibraryCollectionView({
+ collection: templatesCollection
+ }));
- if ( 'edit' === activeMode ) {
- this.exitPreviewMode();
- } else {
- this.enterPreviewMode( 'preview' === activeMode );
- }
+ this.setHeaderDefaultParts();
},
- onEnvNotCompatible: function() {
- this.showFatalErrorDialog( {
- headerMessage: this.translate( 'device_incompatible_header' ),
- message: this.translate( 'device_incompatible_message' ),
- strings: {
- confirm: elementor.translate( 'proceed_anyway' )
- },
- hide: {
- onButtonClick: true
- },
- onConfirm: function() {
- this.hide();
- }
- } );
- },
+ showImportView: function showImportView() {
+ this.getHeaderView().menuArea.reset();
- onPreviewLoadingError: function() {
- this.showFatalErrorDialog( {
- headerMessage: this.translate( 'preview_not_loading_header' ),
- message: this.translate( 'preview_not_loading_message' ),
- onConfirm: function() {
- open( elementor.config.help_preview_error_url, '_blank' );
- }
- } );
+ this.modalContent.show(new TemplateLibraryImportView());
},
- onPreviewElNotFound: function() {
- var args = this.$preview[0].contentWindow.elementorPreviewErrorArgs;
+ showSaveTemplateView: function showSaveTemplateView(elementModel) {
+ this.getHeaderView().menuArea.reset();
- if ( ! args ) {
- args = {
- headerMessage: this.translate( 'preview_el_not_found_header' ),
- message: this.translate( 'preview_el_not_found_message' ),
- confirmURL: elementor.config.help_the_content_url
- };
- }
+ this.modalContent.show(new TemplateLibrarySaveTemplateView({ model: elementModel }));
+ },
- args.onConfirm = function() {
- open( args.confirmURL, '_blank' );
- };
+ showPreviewView: function showPreviewView(templateModel) {
+ this.modalContent.show(new TemplateLibraryPreviewView({
+ url: templateModel.get('url')
+ }));
- this.showFatalErrorDialog( args );
- },
+ var headerView = this.getHeaderView();
- onBackgroundClick: function( event ) {
- jQuery.each( this.backgroundClickListeners, function() {
- var elementToHide = this.element,
- $clickedTarget = jQuery( event.target );
+ headerView.menuArea.reset();
- // If it's a label that associated with an input
- if ( $clickedTarget[0].control ) {
- $clickedTarget = $clickedTarget.add( $clickedTarget[0].control );
- }
+ headerView.tools.show(new TemplateLibraryHeaderPreviewView({
+ model: templateModel
+ }));
- if ( this.ignore && $clickedTarget.closest( this.ignore ).length ) {
- return;
- }
+ headerView.logoArea.show(new TemplateLibraryHeaderBackView());
+ }
+});
- var $clickedTargetClosestElement = $clickedTarget.closest( elementToHide );
+/***/ }),
+/* 62 */
+/***/ (function(module, exports, __webpack_require__) {
- jQuery( elementToHide ).not( $clickedTargetClosestElement ).hide();
- } );
- },
+"use strict";
- setResizablePanel: function() {
- var self = this,
- side = elementor.config.is_rtl ? 'right' : 'left';
- self.panel.$el.resizable( {
- handles: elementor.config.is_rtl ? 'w' : 'e',
- minWidth: 200,
- maxWidth: 680,
- start: function() {
- self.$previewWrapper
- .addClass( 'ui-resizable-resizing' )
- .css( 'pointer-events', 'none' );
- },
- stop: function() {
- self.$previewWrapper
- .removeClass( 'ui-resizable-resizing' )
- .css( 'pointer-events', '' );
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-template-library-header-actions',
- elementor.channels.data.trigger( 'scrollbar:update' );
- },
- resize: function( event, ui ) {
- self.$previewWrapper
- .css( side, ui.size.width );
- }
- } );
+ id: 'elementor-template-library-header-actions',
+
+ ui: {
+ 'import': '#elementor-template-library-header-import i',
+ sync: '#elementor-template-library-header-sync i',
+ save: '#elementor-template-library-header-save i'
},
- enterPreviewMode: function( hidePanel ) {
- var $elements = elementorFrontend.getElements( '$body' );
+ events: {
+ 'click @ui.import': 'onImportClick',
+ 'click @ui.sync': 'onSyncClick',
+ 'click @ui.save': 'onSaveClick'
+ },
- if ( hidePanel ) {
- $elements = $elements.add( this.$body );
- }
+ onImportClick: function onImportClick() {
+ elementor.templates.getLayout().showImportView();
+ },
- $elements
- .removeClass( 'elementor-editor-active' )
- .addClass( 'elementor-editor-preview' );
+ onSyncClick: function onSyncClick() {
+ var self = this;
- this.$previewElementorEl
- .removeClass( 'elementor-edit-area-active' )
- .addClass( 'elementor-edit-area-preview' );
+ self.ui.sync.addClass('eicon-animation-spin');
- if ( hidePanel ) {
- // Handle panel resize
- this.$previewWrapper.css( this.config.is_rtl ? 'right' : 'left', '' );
+ elementor.templates.requestLibraryData({
+ onUpdate: function onUpdate() {
+ self.ui.sync.removeClass('eicon-animation-spin');
- this.panel.$el.css( 'width', '' );
- }
+ elementor.templates.setTemplatesPage(elementor.templates.getFilter('source'), elementor.templates.getFilter('type'));
+ },
+ forceUpdate: true,
+ forceSync: true
+ });
},
- exitPreviewMode: function() {
- elementorFrontend.getElements( '$body' ).add( this.$body )
- .removeClass( 'elementor-editor-preview' )
- .addClass( 'elementor-editor-active' );
+ onSaveClick: function onSaveClick() {
+ elementor.templates.getLayout().showSaveTemplateView();
+ }
+});
- this.$previewElementorEl
- .removeClass( 'elementor-edit-area-preview' )
- .addClass( 'elementor-edit-area-active' );
- },
+/***/ }),
+/* 63 */
+/***/ (function(module, exports, __webpack_require__) {
- changeEditMode: function( newMode ) {
- var dataEditMode = elementor.channels.dataEditMode,
- oldEditMode = dataEditMode.request( 'activeMode' );
+"use strict";
- dataEditMode.reply( 'activeMode', newMode );
- if ( newMode !== oldEditMode ) {
- dataEditMode.trigger( 'switch', newMode );
- }
+module.exports = Marionette.ItemView.extend({
+ options: {
+ activeClass: 'elementor-active'
},
- reloadPreview: function() {
- jQuery( '#elementor-preview-loading' ).show();
+ template: '#tmpl-elementor-template-library-header-menu',
+
+ id: 'elementor-template-library-header-menu',
- this.$preview[0].contentWindow.location.reload( true );
+ ui: {
+ menuItems: '.elementor-template-library-menu-item'
},
- clearPage: function() {
- this.getClearPageDialog().show();
+ events: {
+ 'click @ui.menuItems': 'onMenuItemClick'
},
- changeDeviceMode: function( newDeviceMode ) {
- var oldDeviceMode = this.channels.deviceMode.request( 'currentMode' );
+ $activeItem: null,
+
+ activateMenuItem: function activateMenuItem($item) {
+ var activeClass = this.getOption('activeClass');
- if ( oldDeviceMode === newDeviceMode ) {
+ if (this.$activeItem === $item) {
return;
}
- this.$body
- .removeClass( 'elementor-device-' + oldDeviceMode )
- .addClass( 'elementor-device-' + newDeviceMode );
-
- this.channels.deviceMode
- .reply( 'previousMode', oldDeviceMode )
- .reply( 'currentMode', newDeviceMode )
- .trigger( 'change' );
- },
-
- enqueueTypographyFonts: function() {
- var self = this,
- typographyScheme = this.schemes.getScheme( 'typography' );
+ if (this.$activeItem) {
+ this.$activeItem.removeClass(activeClass);
+ }
- self.helpers.resetEnqueuedFontsCache();
+ $item.addClass(activeClass);
- _.each( typographyScheme.items, function( item ) {
- self.helpers.enqueueFont( item.value.font_family );
- } );
+ this.$activeItem = $item;
},
- translate: function( stringKey, templateArgs, i18nStack ) {
- if ( ! i18nStack ) {
- i18nStack = this.config.i18n;
- }
-
- var string = i18nStack[ stringKey ];
+ onRender: function onRender() {
+ var currentSource = elementor.templates.getFilter('source'),
+ $sourceItem = this.ui.menuItems.filter('[data-template-source="' + currentSource + '"]');
- if ( undefined === string ) {
- string = stringKey;
+ if ('remote' === currentSource) {
+ $sourceItem = $sourceItem.filter('[data-template-type="' + elementor.templates.getFilter('type') + '"]');
}
- if ( templateArgs ) {
- // TODO: bc since 2.0.4
- string = string.replace( /{(\d+)}/g, function( match, number ) {
- return undefined !== templateArgs[ number ] ? templateArgs[ number ] : match;
- } );
-
- string = string.replace( /%(?:(\d+)\$)?s/g, function( match, number ) {
- if ( ! number ) {
- number = 1;
- }
+ this.activateMenuItem($sourceItem);
+ },
- number--;
+ onMenuItemClick: function onMenuItemClick(event) {
+ var item = event.currentTarget,
+ itemData = item.dataset;
- return undefined !== templateArgs[ number ] ? templateArgs[ number ] : match;
- } );
- }
+ this.activateMenuItem(jQuery(item));
- return string;
- },
+ elementor.templates.setTemplatesPage(item.dataset.templateSource, itemData.templateType);
+ }
+});
- compareVersions: function( versionA, versionB, operator ) {
- var prepareVersion = function( version ) {
- version = version + '';
+/***/ }),
+/* 64 */
+/***/ (function(module, exports, __webpack_require__) {
- return version.replace( /[^\d.]+/, '.-1.' );
- };
+"use strict";
- versionA = prepareVersion( versionA );
- versionB = prepareVersion( versionB );
- if ( versionA === versionB ) {
- return ! operator || /^={2,3}$/.test( operator );
- }
+var TemplateLibraryInsertTemplateBehavior = __webpack_require__(25);
- var versionAParts = versionA.split( '.' ).map( Number ),
- versionBParts = versionB.split( '.' ).map( Number ),
- longestVersionParts = Math.max( versionAParts.length, versionBParts.length );
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-template-library-header-preview',
- for ( var i = 0; i < longestVersionParts; i++ ) {
- var valueA = versionAParts[ i ] || 0,
- valueB = versionBParts[ i ] || 0;
+ id: 'elementor-template-library-header-preview',
- if ( valueA !== valueB ) {
- return this.conditions.compare( valueA, valueB, operator );
- }
+ behaviors: {
+ insertTemplate: {
+ behaviorClass: TemplateLibraryInsertTemplateBehavior
}
- },
+ }
+});
- logSite: function() {
- var text = '',
- style = '';
-
- if ( this.envData.gecko ) {
- var asciiText = [
- ' ;;;;;;;;;;;;;;; ',
- ';;; ;; ;;;',
- ';;; ;;;;;;;;;;;;',
- ';;; ;;;;;;;;;;;;',
- ';;; ;; ;;;',
- ';;; ;;;;;;;;;;;;',
- ';;; ;;;;;;;;;;;;',
- ';;; ;; ;;;',
- ' ;;;;;;;;;;;;;;; '
- ];
-
- text += '%c' + asciiText.join( '\n' ) + '\n';
+/***/ }),
+/* 65 */
+/***/ (function(module, exports, __webpack_require__) {
- style = 'color: #C42961';
- } else {
- text += '%c00';
+"use strict";
- style = 'font-size: 22px; background-image: url("' + elementor.config.assets_url + 'images/logo-icon.png"); color: transparent; background-repeat: no-repeat';
- }
- setTimeout( console.log.bind( console, text, style ) );
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-template-library-header-back',
- text = '%cLove using Elementor? Join our growing community of Elementor developers: %chttps://github.com/pojome/elementor';
+ id: 'elementor-template-library-header-preview-back',
- setTimeout( console.log.bind( console, text, 'color: #9B0A46', '' ) );
- }
-} );
+ events: {
+ 'click': 'onClick'
+ },
-module.exports = ( window.elementor = new App() ).start();
+ onClick: function onClick() {
+ elementor.templates.showTemplates();
+ }
+});
-},{"./components/saver/behaviors/footer-saver":7,"elementor-controls/base":40,"elementor-controls/base-data":37,"elementor-controls/base-multiple":38,"elementor-controls/box-shadow":41,"elementor-controls/button":42,"elementor-controls/choose":43,"elementor-controls/code":44,"elementor-controls/color":45,"elementor-controls/date-time":46,"elementor-controls/dimensions":47,"elementor-controls/font":48,"elementor-controls/gallery":49,"elementor-controls/icon":50,"elementor-controls/image-dimensions":51,"elementor-controls/media":52,"elementor-controls/number":53,"elementor-controls/order":54,"elementor-controls/popover-toggle":55,"elementor-controls/repeater":57,"elementor-controls/repeater-row":56,"elementor-controls/section":58,"elementor-controls/select2":59,"elementor-controls/slider":60,"elementor-controls/structure":61,"elementor-controls/switcher":62,"elementor-controls/tab":63,"elementor-controls/wp_widget":64,"elementor-controls/wysiwyg":65,"elementor-dynamic-tags/manager":2,"elementor-editor-utils/ajax":108,"elementor-editor-utils/conditions":109,"elementor-editor-utils/debug":111,"elementor-editor-utils/heartbeat":112,"elementor-editor-utils/helpers":113,"elementor-editor-utils/images-manager":114,"elementor-editor-utils/notifications":117,"elementor-editor-utils/presets-factory":118,"elementor-editor-utils/schemes":119,"elementor-editor/components/saver/manager":8,"elementor-editor/components/settings/settings":13,"elementor-elements/collections/elements":67,"elementor-elements/models/base-settings":68,"elementor-elements/models/element":70,"elementor-elements/views/widget":81,"elementor-layouts/panel/panel":107,"elementor-panel/pages/elements/views/elements":93,"elementor-panel/pages/elements/views/global":94,"elementor-panel/pages/menu/menu":96,"elementor-templates/manager":16,"elementor-templates/views/base-modal-layout":18,"elementor-templates/views/parts/header-parts/logo":22,"elementor-utils/hooks":128,"elementor-utils/hot-keys":129,"elementor-utils/module":131,"elementor-views/controls-stack":126,"elementor-views/preview":127,"modules/history/assets/js/module":140}],67:[function(require,module,exports){
-var ElementModel = require( 'elementor-elements/models/element' );
+/***/ }),
+/* 66 */
+/***/ (function(module, exports, __webpack_require__) {
-var ElementsCollection = Backbone.Collection.extend( {
- add: function( models, options, isCorrectSet ) {
- if ( ( ! options || ! options.silent ) && ! isCorrectSet ) {
- throw 'Call Error: Adding model to element collection is allowed only by the dedicated addChildModel() method.';
- }
+"use strict";
- return Backbone.Collection.prototype.add.call( this, models, options );
- },
- model: function( attrs, options ) {
- var ModelClass = Backbone.Model;
+var TemplateLibraryTemplateLocalView = __webpack_require__(67),
+ TemplateLibraryTemplateRemoteView = __webpack_require__(68),
+ Masonry = __webpack_require__(16),
+ TemplateLibraryCollectionView;
- if ( attrs.elType ) {
- ModelClass = elementor.hooks.applyFilters( 'element/model', ElementModel, attrs );
- }
+TemplateLibraryCollectionView = Marionette.CompositeView.extend({
+ template: '#tmpl-elementor-template-library-templates',
- return new ModelClass( attrs, options );
- },
+ id: 'elementor-template-library-templates',
- clone: function() {
- var tempCollection = Backbone.Collection.prototype.clone.apply( this, arguments ),
- newCollection = new ElementsCollection();
+ childViewContainer: '#elementor-template-library-templates-container',
- tempCollection.forEach( function( model ) {
- newCollection.add( model.clone(), null, true );
- } );
+ reorderOnSort: true,
- return newCollection;
- }
-} );
+ emptyView: function emptyView() {
+ var EmptyView = __webpack_require__(69);
-ElementsCollection.prototype.sync = ElementsCollection.prototype.fetch = ElementsCollection.prototype.save = _.noop;
+ return new EmptyView();
+ },
-module.exports = ElementsCollection;
+ ui: {
+ textFilter: '#elementor-template-library-filter-text',
+ selectFilter: '.elementor-template-library-filter-select',
+ myFavoritesFilter: '#elementor-template-library-filter-my-favorites',
+ orderInputs: '.elementor-template-library-order-input',
+ orderLabels: '.elementor-template-library-order-label'
+ },
-},{"elementor-elements/models/element":70}],68:[function(require,module,exports){
-var BaseSettingsModel;
+ events: {
+ 'input @ui.textFilter': 'onTextFilterInput',
+ 'change @ui.selectFilter': 'onSelectFilterChange',
+ 'change @ui.myFavoritesFilter': 'onMyFavoritesFilterChange',
+ 'mousedown @ui.orderLabels': 'onOrderLabelsClick'
+ },
-BaseSettingsModel = Backbone.Model.extend( {
- options: {},
+ comparators: {
+ title: function title(model) {
+ return model.get('title').toLowerCase();
+ },
+ popularityIndex: function popularityIndex(model) {
+ var popularityIndex = model.get('popularityIndex');
- initialize: function( data, options ) {
- var self = this;
+ if (!popularityIndex) {
+ popularityIndex = model.get('date');
+ }
- // Keep the options for cloning
- self.options = options;
+ return -popularityIndex;
+ },
+ trendIndex: function trendIndex(model) {
+ var trendIndex = model.get('trendIndex');
- self.controls = elementor.mergeControlsSettings( options.controls );
+ if (!trendIndex) {
+ trendIndex = model.get('date');
+ }
- self.validators = {};
+ return -trendIndex;
+ }
+ },
- if ( ! self.controls ) {
- return;
+ getChildView: function getChildView(childModel) {
+ if ('remote' === childModel.get('source')) {
+ return TemplateLibraryTemplateRemoteView;
}
- var attrs = data || {},
- defaults = {};
+ return TemplateLibraryTemplateLocalView;
+ },
- _.each( self.controls, function( control ) {
- var isUIControl = -1 !== control.features.indexOf( 'ui' );
+ initialize: function initialize() {
+ this.listenTo(elementor.channels.templates, 'filter:change', this._renderChildren);
+ },
- if ( isUIControl ) {
- return;
- }
+ filter: function filter(childModel) {
+ var filterTerms = elementor.templates.getFilterTerms(),
+ passingFilter = true;
- // Check if the value is a plain object ( and not an array )
- var controlName = control.name,
- isMultipleControl = jQuery.isPlainObject( control.default_value );
+ jQuery.each(filterTerms, function (filterTermName) {
+ var filterValue = elementor.templates.getFilter(filterTermName);
- if ( isMultipleControl ) {
- defaults[ controlName ] = _.extend( {}, control.default_value, control['default'] || {} );
- } else {
- defaults[ controlName ] = control['default'] || control.default_value;
+ if (!filterValue) {
+ return;
}
- var isDynamicControl = control.dynamic && control.dynamic.active,
- hasDynamicSettings = isDynamicControl && attrs.__dynamic__ && attrs.__dynamic__[ controlName ];
+ if (this.callback) {
+ var callbackResult = this.callback.call(childModel, filterValue);
- if ( isDynamicControl && ! hasDynamicSettings && control.dynamic['default'] ) {
- if ( ! attrs.__dynamic__ ) {
- attrs.__dynamic__ = {};
+ if (!callbackResult) {
+ passingFilter = false;
}
- attrs.__dynamic__[ controlName ] = control.dynamic['default'];
-
- hasDynamicSettings = true;
+ return callbackResult;
}
- if ( undefined !== attrs[ controlName ] && isMultipleControl && ! _.isObject( attrs[ controlName ] ) && ! hasDynamicSettings ) {
- elementor.debug.addCustomError(
- new TypeError( 'An invalid argument supplied as multiple control value' ),
- 'InvalidElementData',
- 'Element `' + ( self.get( 'widgetType' ) || self.get( 'elType' ) ) + '` got <' + attrs[ controlName ] + '> as `' + controlName + '` value. Expected array or object.'
- );
-
- delete attrs[ controlName ];
- }
+ var filterResult = filterValue === childModel.get(filterTermName);
- if ( undefined === attrs[ controlName ] ) {
- attrs[ controlName ] = defaults[ controlName ];
+ if (!filterResult) {
+ passingFilter = false;
}
- } );
-
- self.defaults = defaults;
- self.handleRepeaterData( attrs );
+ return filterResult;
+ });
- self.set( attrs );
+ return passingFilter;
},
- handleRepeaterData: function( attrs ) {
- _.each( this.controls, function( field ) {
- if ( field.is_repeater ) {
- // TODO: Apply defaults on each field in repeater fields
- if ( ! ( attrs[ field.name ] instanceof Backbone.Collection ) ) {
- attrs[ field.name ] = new Backbone.Collection( attrs[ field.name ], {
- model: function( attrs, options ) {
- options = options || {};
+ order: function order(by, reverseOrder) {
+ var comparator = this.comparators[by] || by;
- options.controls = field.fields;
+ if (reverseOrder) {
+ comparator = this.reverseOrder(comparator);
+ }
- if ( ! attrs._id ) {
- attrs._id = elementor.helpers.getUniqueID();
- }
+ this.collection.comparator = comparator;
- return new BaseSettingsModel( attrs, options );
- }
- } );
- }
- }
- } );
+ this.collection.sort();
},
- getFontControls: function() {
- return _.filter( this.getActiveControls(), function( control ) {
- return 'font' === control.type;
- } );
- },
+ reverseOrder: function reverseOrder(comparator) {
+ if ('function' !== typeof comparator) {
+ var comparatorValue = comparator;
- getStyleControls: function( controls, attributes ) {
- var self = this;
+ comparator = function comparator(model) {
+ return model.get(comparatorValue);
+ };
+ }
- controls = elementor.helpers.cloneObject( self.getActiveControls( controls, attributes ) );
+ return function (left, right) {
+ var l = comparator(left),
+ r = comparator(right);
- var styleControls = [];
+ if (undefined === l) {
+ return -1;
+ }
- jQuery.each( controls, function() {
- var control = this,
- controlDefaultSettings = elementor.config.controls[ control.type ];
+ if (undefined === r) {
+ return 1;
+ }
- control = jQuery.extend( {}, controlDefaultSettings, control );
+ return l < r ? 1 : l > r ? -1 : 0;
+ };
+ },
- if ( control.fields ) {
- var styleFields = [];
+ addSourceData: function addSourceData() {
+ var isEmpty = this.children.isEmpty();
- self.attributes[ control.name ].each( function( item ) {
- styleFields.push( self.getStyleControls( control.fields, item.attributes ) );
- } );
+ this.$el.attr('data-template-source', isEmpty ? 'empty' : elementor.templates.getFilter('source'));
+ },
- control.styleFields = styleFields;
- }
+ setFiltersUI: function setFiltersUI() {
+ var $filters = this.$(this.ui.selectFilter);
+
+ $filters.select2({
+ placeholder: elementor.translate('category'),
+ allowClear: true,
+ width: 150
+ });
+ },
+
+ setMasonrySkin: function setMasonrySkin() {
+ var masonry = new Masonry({
+ container: this.$childViewContainer,
+ items: this.$childViewContainer.children()
+ });
- if ( control.fields || ( control.dynamic && control.dynamic.active ) || self.isStyleControl( control.name, controls ) ) {
- styleControls.push( control );
- }
- } );
+ this.$childViewContainer.imagesLoaded(masonry.run.bind(masonry));
+ },
- return styleControls;
+ toggleFilterClass: function toggleFilterClass() {
+ this.$el.toggleClass('elementor-templates-filter-active', !!(elementor.templates.getFilter('text') || elementor.templates.getFilter('favorite')));
},
- isStyleControl: function( attribute, controls ) {
- controls = controls || this.controls;
+ onRenderCollection: function onRenderCollection() {
+ this.addSourceData();
- var currentControl = _.find( controls, function( control ) {
- return attribute === control.name;
- } );
+ this.toggleFilterClass();
+
+ if ('remote' === elementor.templates.getFilter('source') && 'block' === elementor.templates.getFilter('type')) {
+ this.setFiltersUI();
- return currentControl && ! _.isEmpty( currentControl.selectors );
+ this.setMasonrySkin();
+ }
},
- getClassControls: function( controls ) {
- controls = controls || this.controls;
+ onBeforeRenderEmpty: function onBeforeRenderEmpty() {
+ this.addSourceData();
+ },
- return _.filter( controls, function( control ) {
- return ! _.isUndefined( control.prefix_class );
- } );
+ onTextFilterInput: function onTextFilterInput() {
+ elementor.templates.setFilter('text', this.ui.textFilter.val());
},
- isClassControl: function( attribute ) {
- var currentControl = _.find( this.controls, function( control ) {
- return attribute === control.name;
- } );
+ onSelectFilterChange: function onSelectFilterChange(event) {
+ var $select = jQuery(event.currentTarget),
+ filterName = $select.data('elementor-filter');
- return currentControl && ! _.isUndefined( currentControl.prefix_class );
+ elementor.templates.setFilter(filterName, $select.val());
},
- getControl: function( id ) {
- return _.find( this.controls, function( control ) {
- return id === control.name;
- } );
+ onMyFavoritesFilterChange: function onMyFavoritesFilterChange() {
+ elementor.templates.setFilter('favorite', this.ui.myFavoritesFilter[0].checked);
},
- getActiveControls: function( controls, attributes ) {
- var activeControls = {};
-
- if ( ! controls ) {
- controls = this.controls;
- }
+ onOrderLabelsClick: function onOrderLabelsClick(event) {
+ var $clickedInput = jQuery(event.currentTarget.control),
+ toggle;
- if ( ! attributes ) {
- attributes = this.attributes;
+ if (!$clickedInput[0].checked) {
+ toggle = 'asc' !== $clickedInput.data('default-ordering-direction');
}
- _.each( controls, function( control, controlKey ) {
- if ( elementor.helpers.isActiveControl( control, attributes ) ) {
- activeControls[ controlKey ] = control;
- }
- } );
+ $clickedInput.toggleClass('elementor-template-library-order-reverse', toggle);
- return activeControls;
- },
+ this.order($clickedInput.val(), $clickedInput.hasClass('elementor-template-library-order-reverse'));
+ }
+});
- clone: function() {
- return new BaseSettingsModel( elementor.helpers.cloneObject( this.attributes ), elementor.helpers.cloneObject( this.options ) );
- },
+module.exports = TemplateLibraryCollectionView;
- setExternalChange: function( key, value ) {
- this.set( key, value );
+/***/ }),
+/* 67 */
+/***/ (function(module, exports, __webpack_require__) {
- this.trigger( 'change:external', key, value )
- .trigger( 'change:external:' + key, value );
- },
+"use strict";
- parseDynamicSettings: function( settings, options, controls ) {
- var self = this;
- settings = elementor.helpers.cloneObject( settings || self.attributes );
+var TemplateLibraryTemplateView = __webpack_require__(26),
+ TemplateLibraryTemplateLocalView;
- options = options || {};
+TemplateLibraryTemplateLocalView = TemplateLibraryTemplateView.extend({
+ template: '#tmpl-elementor-template-library-template-local',
- controls = controls || this.controls;
+ ui: function ui() {
+ return _.extend(TemplateLibraryTemplateView.prototype.ui.apply(this, arguments), {
+ deleteButton: '.elementor-template-library-template-delete',
+ morePopup: '.elementor-template-library-template-more',
+ toggleMore: '.elementor-template-library-template-more-toggle',
+ toggleMoreIcon: '.elementor-template-library-template-more-toggle i'
+ });
+ },
- jQuery.each( controls, function() {
- var control = this,
- valueToParse;
+ events: function events() {
+ return _.extend(TemplateLibraryTemplateView.prototype.events.apply(this, arguments), {
+ 'click @ui.deleteButton': 'onDeleteButtonClick',
+ 'click @ui.toggleMore': 'onToggleMoreClick'
+ });
+ },
- if ( 'repeater' === control.type ) {
- valueToParse = settings[ control.name ];
- valueToParse.forEach( function( value, key ) {
- valueToParse[ key ] = self.parseDynamicSettings( value, options, control.fields );
- } );
+ onDeleteButtonClick: function onDeleteButtonClick() {
+ var toggleMoreIcon = this.ui.toggleMoreIcon;
- return;
+ elementor.templates.deleteTemplate(this.model, {
+ onConfirm: function onConfirm() {
+ toggleMoreIcon.removeClass('eicon-ellipsis-h').addClass('fa fa-circle-o-notch fa-spin');
+ },
+ onSuccess: function onSuccess() {
+ elementor.templates.showTemplates();
}
+ });
+ },
- valueToParse = settings.__dynamic__ && settings.__dynamic__[ control.name ];
-
- if ( ! valueToParse ) {
- return;
- }
+ onToggleMoreClick: function onToggleMoreClick() {
+ this.ui.morePopup.show();
+ },
- var dynamicSettings = control.dynamic;
+ onPreviewButtonClick: function onPreviewButtonClick() {
+ open(this.model.get('url'), '_blank');
+ }
+});
- if ( undefined === dynamicSettings ) {
- dynamicSettings = elementor.config.controls[ control.type ].dynamic;
- }
+module.exports = TemplateLibraryTemplateLocalView;
- if ( ! dynamicSettings || ! dynamicSettings.active ) {
- return;
- }
+/***/ }),
+/* 68 */
+/***/ (function(module, exports, __webpack_require__) {
- var dynamicValue;
+"use strict";
- try {
- dynamicValue = elementor.dynamicTags.parseTagsText( valueToParse, dynamicSettings, elementor.dynamicTags.getTagDataContent );
- } catch ( error ) {
- if ( elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR !== error.message ) {
- throw error;
- }
- dynamicValue = '';
+var TemplateLibraryTemplateView = __webpack_require__(26),
+ TemplateLibraryTemplateRemoteView;
- if ( options.onServerRequestStart ) {
- options.onServerRequestStart();
- }
+TemplateLibraryTemplateRemoteView = TemplateLibraryTemplateView.extend({
+ template: '#tmpl-elementor-template-library-template-remote',
- elementor.dynamicTags.refreshCacheFromServer( function() {
- if ( options.onServerRequestEnd ) {
- options.onServerRequestEnd();
- }
- } );
- }
+ ui: function ui() {
+ return jQuery.extend(TemplateLibraryTemplateView.prototype.ui.apply(this, arguments), {
+ favoriteCheckbox: '.elementor-template-library-template-favorite-input'
+ });
+ },
- if ( dynamicSettings.property ) {
- settings[ control.name ][ dynamicSettings.property ] = dynamicValue;
- } else {
- settings[ control.name ] = dynamicValue;
- }
- } );
+ events: function events() {
+ return jQuery.extend(TemplateLibraryTemplateView.prototype.events.apply(this, arguments), {
+ 'change @ui.favoriteCheckbox': 'onFavoriteCheckboxChange'
+ });
+ },
- return settings;
+ onPreviewButtonClick: function onPreviewButtonClick() {
+ elementor.templates.getLayout().showPreviewView(this.model);
},
- toJSON: function( options ) {
- var data = Backbone.Model.prototype.toJSON.call( this );
+ onFavoriteCheckboxChange: function onFavoriteCheckboxChange() {
+ var isFavorite = this.ui.favoriteCheckbox[0].checked;
- options = options || {};
+ this.model.set('favorite', isFavorite);
- delete data.widgetType;
- delete data.elType;
- delete data.isInner;
+ elementor.templates.markAsFavorite(this.model, isFavorite);
- _.each( data, function( attribute, key ) {
- if ( attribute && attribute.toJSON ) {
- data[ key ] = attribute.toJSON();
- }
- } );
+ if (!isFavorite && elementor.templates.getFilter('favorite')) {
+ elementor.channels.templates.trigger('filter:change');
+ }
+ }
+});
- if ( options.removeDefault ) {
- var controls = this.controls;
+module.exports = TemplateLibraryTemplateRemoteView;
- _.each( data, function( value, key ) {
- var control = controls[ key ];
+/***/ }),
+/* 69 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( control ) {
- // TODO: use `save_default` in text|textarea controls.
- if ( control.save_default || ( ( 'text' === control.type || 'textarea' === control.type ) && data[ key ] ) ) {
- return;
- }
+"use strict";
- if ( data[ key ] && 'object' === typeof data[ key ] ) {
- // First check length difference
- if ( Object.keys( data[ key ] ).length !== Object.keys( control[ 'default' ] ).length ) {
- return;
- }
- // If it's equal length, loop over value
- var isEqual = true;
+var TemplateLibraryTemplatesEmptyView;
- _.each( data[ key ], function( propertyValue, propertyKey ) {
- if ( data[ key ][ propertyKey ] !== control[ 'default' ][ propertyKey ] ) {
- return isEqual = false;
- }
- } );
+TemplateLibraryTemplatesEmptyView = Marionette.ItemView.extend({
+ id: 'elementor-template-library-templates-empty',
- if ( isEqual ) {
- delete data[ key ];
- }
- } else {
- if ( data[ key ] === control[ 'default' ] ) {
- delete data[ key ];
- }
- }
- }
- } );
+ template: '#tmpl-elementor-template-library-templates-empty',
+
+ ui: {
+ title: '.elementor-template-library-blank-title',
+ message: '.elementor-template-library-blank-message'
+ },
+
+ modesStrings: {
+ empty: {
+ title: elementor.translate('templates_empty_title'),
+ message: elementor.translate('templates_empty_message')
+ },
+ noResults: {
+ title: elementor.translate('templates_no_results_title'),
+ message: elementor.translate('templates_no_results_message')
+ },
+ noFavorites: {
+ title: elementor.translate('templates_no_favorites_title'),
+ message: elementor.translate('templates_no_favorites_message')
}
+ },
- return elementor.helpers.cloneObject( data );
- }
-} );
+ getCurrentMode: function getCurrentMode() {
+ if (elementor.templates.getFilter('text')) {
+ return 'noResults';
+ }
-module.exports = BaseSettingsModel;
+ if (elementor.templates.getFilter('favorite')) {
+ return 'noFavorites';
+ }
-},{}],69:[function(require,module,exports){
-var BaseSettingsModel = require( 'elementor-elements/models/base-settings' ),
- ColumnSettingsModel;
+ return 'empty';
+ },
-ColumnSettingsModel = BaseSettingsModel.extend( {
- defaults: {
- _column_size: 100
- }
-} );
+ onRender: function onRender() {
+ var modeStrings = this.modesStrings[this.getCurrentMode()];
-module.exports = ColumnSettingsModel;
+ this.ui.title.html(modeStrings.title);
-},{"elementor-elements/models/base-settings":68}],70:[function(require,module,exports){
-var BaseSettingsModel = require( 'elementor-elements/models/base-settings' ),
- ColumnSettingsModel = require( 'elementor-elements/models/column-settings' ),
- ElementModel;
+ this.ui.message.html(modeStrings.message);
+ }
+});
-ElementModel = Backbone.Model.extend( {
- defaults: {
- id: '',
- elType: '',
- isInner: false,
- settings: {},
- defaultEditSettings: {}
- },
+module.exports = TemplateLibraryTemplatesEmptyView;
- remoteRender: false,
- _htmlCache: null,
- _jqueryXhr: null,
- renderOnLeave: false,
+/***/ }),
+/* 70 */
+/***/ (function(module, exports, __webpack_require__) {
- initialize: function( options ) {
- var elType = this.get( 'elType' ),
- elements = this.get( 'elements' );
+"use strict";
- if ( undefined !== elements ) {
- var ElementsCollection = require( 'elementor-elements/collections/elements' );
- this.set( 'elements', new ElementsCollection( elements ) );
- }
+var TemplateLibrarySaveTemplateView;
- if ( 'widget' === elType ) {
- this.remoteRender = true;
- this.setHtmlCache( options.htmlCache || '' );
- }
+TemplateLibrarySaveTemplateView = Marionette.ItemView.extend({
+ id: 'elementor-template-library-save-template',
- // No need this variable anymore
- delete options.htmlCache;
+ template: '#tmpl-elementor-template-library-save-template',
- // Make call to remote server as throttle function
- this.renderRemoteServer = _.throttle( this.renderRemoteServer, 1000 );
+ ui: {
+ form: '#elementor-template-library-save-template-form',
+ submitButton: '#elementor-template-library-save-template-submit'
+ },
- this.initSettings();
+ events: {
+ 'submit @ui.form': 'onFormSubmit'
+ },
- this.initEditSettings();
+ getSaveType: function getSaveType() {
+ return this.model ? this.model.get('elType') : 'page';
+ },
- this.on( {
- destroy: this.onDestroy,
- 'editor:close': this.onCloseEditor
- } );
+ templateHelpers: function templateHelpers() {
+ var saveType = this.getSaveType(),
+ templateType = elementor.templates.getTemplateTypes(saveType);
+
+ return templateType.saveDialog;
},
- initSettings: function() {
- var elType = this.get( 'elType' ),
- settings = this.get( 'settings' ),
- settingModels = {
- column: ColumnSettingsModel
- },
- SettingsModel = settingModels[ elType ] || BaseSettingsModel;
+ onFormSubmit: function onFormSubmit(event) {
+ event.preventDefault();
- if ( jQuery.isEmptyObject( settings ) ) {
- settings = elementor.helpers.cloneObject( settings );
- }
+ var formData = this.ui.form.elementorSerializeObject(),
+ saveType = this.model ? this.model.get('elType') : 'page',
+ JSONParams = { removeDefault: true };
- if ( 'widget' === elType ) {
- settings.widgetType = this.get( 'widgetType' );
- }
+ formData.content = this.model ? [this.model.toJSON(JSONParams)] : elementor.elements.toJSON(JSONParams);
- settings.elType = elType;
- settings.isInner = this.get( 'isInner' );
+ this.ui.submitButton.addClass('elementor-button-state');
- settings = new SettingsModel( settings, {
- controls: elementor.getElementControls( this )
- } );
+ elementor.templates.saveTemplate(saveType, formData);
+ }
+});
- this.set( 'settings', settings );
+module.exports = TemplateLibrarySaveTemplateView;
- elementorFrontend.config.elements.data[ this.cid ] = settings;
- },
+/***/ }),
+/* 71 */
+/***/ (function(module, exports, __webpack_require__) {
- initEditSettings: function() {
- var editSettings = new Backbone.Model( this.get( 'defaultEditSettings' ) );
+"use strict";
- this.set( 'editSettings', editSettings );
- elementorFrontend.config.elements.editSettings[ this.cid ] = editSettings;
- },
+var TemplateLibraryImportView;
- onDestroy: function() {
- // Clean the memory for all use instances
- var settings = this.get( 'settings' ),
- elements = this.get( 'elements' );
+TemplateLibraryImportView = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-template-library-import',
- if ( undefined !== elements ) {
- _.each( _.clone( elements.models ), function( model ) {
- model.destroy();
- } );
- }
+ id: 'elementor-template-library-import',
- if ( settings instanceof BaseSettingsModel ) {
- settings.destroy();
- }
+ ui: {
+ uploadForm: '#elementor-template-library-import-form',
+ fileInput: '#elementor-template-library-import-form-input'
},
- onCloseEditor: function() {
- if ( this.renderOnLeave ) {
- this.renderRemoteServer();
- }
+ events: {
+ 'change @ui.fileInput': 'onFileInputChange'
},
- setSetting: function( key, value ) {
- var keyParts = key.split( '.' ),
- isRepeaterKey = 3 === keyParts.length,
- settings = this.get( 'settings' );
+ droppedFiles: null,
- key = keyParts[0];
+ submitForm: function submitForm() {
+ var layout = elementor.templates.getLayout(),
+ data = new FormData();
- if ( isRepeaterKey ) {
- settings = settings.get( key ).models[ keyParts[1] ];
+ if (this.droppedFiles) {
+ data.append('file', this.droppedFiles[0]);
- key = keyParts[2];
- }
+ this.droppedFiles = null;
+ } else {
+ data.append('file', this.ui.fileInput[0].files[0]);
- settings.setExternalChange( key, value );
- },
+ this.ui.uploadForm[0].reset();
+ }
- getSetting: function( key ) {
- var keyParts = key.split( '.' ),
- isRepeaterKey = 3 === keyParts.length,
- settings = this.get( 'settings' );
+ var options = {
+ data: data,
+ processData: false,
+ contentType: false,
+ success: function success(data) {
+ elementor.templates.getTemplatesCollection().add(data);
- key = keyParts[0];
+ elementor.templates.setTemplatesPage('local');
+ },
+ error: function error(data) {
+ elementor.templates.showErrorDialog(data);
- var value = settings.get( key );
+ layout.showImportView();
+ },
+ complete: function complete() {
+ layout.hideLoadingView();
+ }
+ };
- if ( undefined === value ) {
- return '';
- }
+ elementor.ajax.send('import_template', options);
- if ( isRepeaterKey ) {
- value = value.models[ keyParts[1] ].get( keyParts[2] );
- }
+ layout.showLoadingView();
+ },
- return value;
+ onRender: function onRender() {
+ this.ui.uploadForm.on({
+ 'drag dragstart dragend dragover dragenter dragleave drop': this.onFormActions.bind(this),
+ dragenter: this.onFormDragEnter.bind(this),
+ 'dragleave drop': this.onFormDragLeave.bind(this),
+ drop: this.onFormDrop.bind(this)
+ });
},
- setHtmlCache: function( htmlCache ) {
- this._htmlCache = htmlCache;
+ onFormActions: function onFormActions(event) {
+ event.preventDefault();
+ event.stopPropagation();
},
- getHtmlCache: function() {
- return this._htmlCache;
+ onFormDragEnter: function onFormDragEnter() {
+ this.ui.uploadForm.addClass('elementor-drag-over');
},
- getTitle: function() {
- var elementData = elementor.getElementData( this );
+ onFormDragLeave: function onFormDragLeave(event) {
+ if (jQuery(event.relatedTarget).closest(this.ui.uploadForm).length) {
+ return;
+ }
- return ( elementData ) ? elementData.title : 'Unknown';
+ this.ui.uploadForm.removeClass('elementor-drag-over');
},
- getIcon: function() {
- var elementData = elementor.getElementData( this );
+ onFormDrop: function onFormDrop(event) {
+ this.droppedFiles = event.originalEvent.dataTransfer.files;
- return ( elementData ) ? elementData.icon : 'unknown';
+ this.submitForm();
},
- createRemoteRenderRequest: function() {
- var data = this.toJSON();
+ onFileInputChange: function onFileInputChange() {
+ this.submitForm();
+ }
+});
- return elementor.ajax.addRequest( 'render_widget', {
- unique_id: this.cid,
- data: {
- data: data
- },
- success: this.onRemoteGetHtml.bind( this )
- }, true ).jqXhr;
- },
+module.exports = TemplateLibraryImportView;
- renderRemoteServer: function() {
- if ( ! this.remoteRender ) {
- return;
- }
+/***/ }),
+/* 72 */
+/***/ (function(module, exports, __webpack_require__) {
- this.renderOnLeave = false;
+"use strict";
- this.trigger( 'before:remote:render' );
- if ( this.isRemoteRequestActive() ) {
- this._jqueryXhr.abort();
- }
+var TemplateLibraryPreviewView;
- this._jqueryXhr = this.createRemoteRenderRequest();
- },
+TemplateLibraryPreviewView = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-template-library-preview',
- isRemoteRequestActive: function() {
- return this._jqueryXhr && 4 !== this._jqueryXhr.readyState;
- },
+ id: 'elementor-template-library-preview',
- onRemoteGetHtml: function( data ) {
- this.setHtmlCache( data.render );
- this.trigger( 'remote:render' );
+ ui: {
+ iframe: '> iframe'
},
- clone: function() {
- var newModel = new this.constructor( elementor.helpers.cloneObject( this.attributes ) );
+ onRender: function onRender() {
+ this.ui.iframe.attr('src', this.getOption('url'));
+ }
+});
+
+module.exports = TemplateLibraryPreviewView;
- newModel.set( 'id', elementor.helpers.getUniqueID() );
+/***/ }),
+/* 73 */
+/***/ (function(module, exports, __webpack_require__) {
- newModel.setHtmlCache( this.getHtmlCache() );
+"use strict";
- var elements = this.get( 'elements' );
- if ( ! _.isEmpty( elements ) ) {
- newModel.set( 'elements', elements.clone() );
- }
+var TemplateLibraryTemplateModel = __webpack_require__(74),
+ TemplateLibraryCollection;
- return newModel;
- },
+TemplateLibraryCollection = Backbone.Collection.extend({
+ model: TemplateLibraryTemplateModel
+});
- toJSON: function( options ) {
- options = _.extend( { copyHtmlCache: false }, options );
+module.exports = TemplateLibraryCollection;
- // Call parent's toJSON method
- var data = Backbone.Model.prototype.toJSON.call( this );
+/***/ }),
+/* 74 */
+/***/ (function(module, exports, __webpack_require__) {
- _.each( data, function( attribute, key ) {
- if ( attribute && attribute.toJSON ) {
- data[ key ] = attribute.toJSON( options );
- }
- } );
+"use strict";
- if ( options.copyHtmlCache ) {
- data.htmlCache = this.getHtmlCache();
- } else {
- delete data.htmlCache;
- }
- return data;
+module.exports = Backbone.Model.extend({
+ defaults: {
+ template_id: 0,
+ title: '',
+ source: '',
+ type: '',
+ subtype: '',
+ author: '',
+ thumbnail: '',
+ url: '',
+ export_link: '',
+ tags: []
}
+});
-} );
+/***/ }),
+/* 75 */
+/***/ (function(module, exports, __webpack_require__) {
-ElementModel.prototype.sync = ElementModel.prototype.fetch = ElementModel.prototype.save = _.noop;
-
-module.exports = ElementModel;
+"use strict";
-},{"elementor-elements/collections/elements":67,"elementor-elements/models/base-settings":68,"elementor-elements/models/column-settings":69}],71:[function(require,module,exports){
-var BaseSettingsModel = require( 'elementor-elements/models/base-settings' ),
- ControlsCSSParser = require( 'elementor-editor-utils/controls-css-parser' ),
- Validator = require( 'elementor-validator/base' ),
- BaseContainer = require( 'elementor-views/base-container' ),
- BaseElementView;
-BaseElementView = BaseContainer.extend( {
- tagName: 'div',
+var Ajax;
- controlsCSSParser: null,
+Ajax = {
+ config: {},
+ requests: {},
+ cache: {},
- toggleEditTools: true,
+ initConfig: function initConfig() {
+ this.config = {
+ ajaxParams: {
+ type: 'POST',
+ url: elementor.config.ajaxurl,
+ data: {}
+ },
+ actionPrefix: 'elementor_'
+ };
+ },
- allowRender: true,
+ init: function init() {
+ this.initConfig();
- renderAttributes: {},
+ this.debounceSendBatch = _.debounce(this.sendBatch.bind(this), 500);
+ },
- className: function() {
- return 'elementor-element elementor-element-edit-mode ' + this.getElementUniqueID();
+ getCacheKey: function getCacheKey(request) {
+ return JSON.stringify({
+ unique_id: request.unique_id,
+ data: request.data
+ });
},
- attributes: function() {
- var type = this.model.get( 'elType' );
+ loadObjects: function loadObjects(options) {
+ var self = this,
+ dataCollection = {},
+ deferredArray = [];
- if ( 'widget' === type ) {
- type = this.model.get( 'widgetType' );
+ if (options.before) {
+ options.before();
}
- return {
- 'data-id': this.getID(),
- 'data-element_type': type
- };
- },
+ options.ids.forEach(function (objectId) {
+ deferredArray.push(self.load({
+ action: options.action,
+ unique_id: options.data.unique_id + objectId,
+ data: jQuery.extend({ id: objectId }, options.data)
+ }).done(function (data) {
+ dataCollection = jQuery.extend(dataCollection, data);
+ }));
+ });
- ui: function() {
- return {
- triggerButton: '> .elementor-element-overlay .elementor-editor-element-trigger',
- duplicateButton: '> .elementor-element-overlay .elementor-editor-element-duplicate',
- removeButton: '> .elementor-element-overlay .elementor-editor-element-remove',
- saveButton: '> .elementor-element-overlay .elementor-editor-element-save',
- settingsList: '> .elementor-element-overlay .elementor-editor-element-settings',
- addButton: '> .elementor-element-overlay .elementor-editor-element-add'
- };
+ jQuery.when.apply(jQuery, deferredArray).done(function () {
+ options.success(dataCollection);
+ });
},
- behaviors: function() {
- var behaviors = {};
+ load: function load(request) {
+ var self = this;
+ if (!request.unique_id) {
+ request.unique_id = request.action;
+ }
- return elementor.hooks.applyFilters( 'elements/base/behaviors', behaviors, this );
- },
+ if (request.before) {
+ request.before();
+ }
- getBehavior: function( name ) {
- return this._behaviors[ Object.keys( this.behaviors() ).indexOf( name ) ];
- },
+ var deferred,
+ cacheKey = self.getCacheKey(request);
- events: function() {
- return {
- 'click @ui.removeButton': 'onClickRemove',
- 'click @ui.saveButton': 'onClickSave',
- 'click @ui.duplicateButton': 'onClickDuplicate',
- 'click @ui.triggerButton': 'onClickEdit'
- };
- },
+ if (_.has(self.cache, cacheKey)) {
+ deferred = jQuery.Deferred().done(request.success).resolve(self.cache[cacheKey]);
+ } else {
+ deferred = self.addRequest(request.action, {
+ data: request.data,
+ unique_id: request.unique_id,
+ success: function success(data) {
+ self.cache[cacheKey] = data;
+ }
+ }).done(request.success);
+ }
- getElementType: function() {
- return this.model.get( 'elType' );
+ return deferred;
},
- getIDInt: function() {
- return parseInt( this.getID(), 16 );
- },
+ addRequest: function addRequest(action, options, immediately) {
+ options = options || {};
- getChildType: function() {
- return elementor.helpers.getElementChildType( this.getElementType() );
- },
+ if (!options.unique_id) {
+ options.unique_id = action;
+ }
- getChildView: function( model ) {
- var ChildView,
- elType = model.get( 'elType' );
+ options.deferred = jQuery.Deferred().done(options.success).fail(options.error).always(options.complete);
+
+ var request = {
+ action: action,
+ options: options
+ };
- if ( 'section' === elType ) {
- ChildView = require( 'elementor-elements/views/section' );
- } else if ( 'column' === elType ) {
- ChildView = require( 'elementor-elements/views/column' );
+ if (immediately) {
+ var requests = {};
+ requests[options.unique_id] = request;
+ options.deferred.jqXhr = this.sendBatch(requests);
} else {
- ChildView = elementor.modules.elements.views.Widget;
+ this.requests[options.unique_id] = request;
+ this.debounceSendBatch();
}
- return elementor.hooks.applyFilters( 'element/view', ChildView, model, this );
+ return options.deferred;
},
- // TODO: backward compatibility method since 1.8.0
- templateHelpers: function() {
- var templateHelpers = BaseContainer.prototype.templateHelpers.apply( this, arguments );
+ sendBatch: function sendBatch(requests) {
+ var actions = {};
- return jQuery.extend( templateHelpers, {
- editModel: this.getEditModel() // @deprecated. Use view.getEditModel() instead.
- } );
- },
+ if (!requests) {
+ requests = this.requests;
- getTemplateType: function() {
- return 'js';
- },
+ // Empty for next batch.
+ this.requests = {};
+ }
- getEditModel: function() {
- return this.model;
+ _(requests).each(function (request, id) {
+ actions[id] = {
+ action: request.action,
+ data: request.options.data
+ };
+ });
+
+ return this.send('ajax', {
+ data: {
+ actions: JSON.stringify(actions)
+ },
+ success: function success(data) {
+ _.each(data.responses, function (response, id) {
+ var options = requests[id].options;
+ if (options) {
+ if (response.success) {
+ options.deferred.resolve(response.data);
+ } else if (!response.success) {
+ options.deferred.reject(response.data);
+ }
+ }
+ });
+ },
+ error: function error(data) {
+ _.each(requests, function (args) {
+ if (args.options) {
+ args.options.deferred.reject(data);
+ }
+ });
+ }
+ });
},
- initialize: function() {
- // grab the child collection from the parent model
- // so that we can render the collection as children
- // of this parent element
- this.collection = this.model.get( 'elements' );
+ send: function send(action, options) {
+ var self = this,
+ ajaxParams = elementor.helpers.cloneObject(this.config.ajaxParams);
- if ( this.collection ) {
- this.listenTo( this.collection, 'add remove reset', this.onCollectionChanged, this );
- }
+ options = options || {};
- var editModel = this.getEditModel();
+ action = this.config.actionPrefix + action;
- this.listenTo( editModel.get( 'settings' ), 'change', this.onSettingsChanged, this );
- this.listenTo( editModel.get( 'editSettings' ), 'change', this.onEditSettingsChanged, this );
+ jQuery.extend(ajaxParams, options);
- this.initControlsCSSParser();
- },
+ if (ajaxParams.data instanceof FormData) {
+ ajaxParams.data.append('action', action);
+ ajaxParams.data.append('_nonce', elementor.config.nonce);
+ ajaxParams.data.append('editor_post_id', elementor.config.document.id);
+ } else {
+ ajaxParams.data.action = action;
+ ajaxParams.data._nonce = elementor.config.nonce;
+ ajaxParams.data.editor_post_id = elementor.config.document.id;
+ }
- edit: function() {
- elementor.getPanelView().openEditor( this.getEditModel(), this );
- },
+ var successCallback = ajaxParams.success,
+ errorCallback = ajaxParams.error;
- addElementFromPanel: function( options ) {
- var elementView = elementor.channels.panelElements.request( 'element:selected' );
+ if (successCallback || errorCallback) {
+ ajaxParams.success = function (response) {
+ if (response.success && successCallback) {
+ successCallback(response.data);
+ }
- var itemData = {
- id: elementor.helpers.getUniqueID(),
- elType: elementView.model.get( 'elType' )
- };
+ if (!response.success && errorCallback) {
+ errorCallback(response.data);
+ }
+ };
- if ( 'widget' === itemData.elType ) {
- itemData.widgetType = elementView.model.get( 'widgetType' );
- } else if ( 'section' === itemData.elType ) {
- itemData.elements = [];
- itemData.isInner = true;
- } else {
- return;
+ if (errorCallback) {
+ ajaxParams.error = function (data) {
+ errorCallback(data);
+ };
+ } else {
+ ajaxParams.error = function (XMLHttpRequest) {
+ if (0 === XMLHttpRequest.readyState && 'abort' === XMLHttpRequest.statusText) {
+ return;
+ }
+
+ var message = self.createErrorMessage(XMLHttpRequest);
+
+ elementor.notifications.showToast({
+ message: message
+ });
+ };
+ }
}
- var customData = elementView.model.get( 'custom' );
+ return jQuery.ajax(ajaxParams);
+ },
- if ( customData ) {
- _.extend( itemData, customData );
+ createErrorMessage: function createErrorMessage(XMLHttpRequest) {
+ var message;
+ if (4 === XMLHttpRequest.readyState) {
+ message = elementor.translate('server_error');
+ if (200 !== XMLHttpRequest.status) {
+ message += ' (' + XMLHttpRequest.status + ' ' + XMLHttpRequest.statusText + ')';
+ }
+ } else if (0 === XMLHttpRequest.readyState) {
+ message = elementor.translate('server_connection_lost');
+ } else {
+ message = elementor.translate('unknown_error');
}
- elementor.channels.data.trigger( 'element:before:add', itemData );
+ return message + '.';
+ }
+};
- var newView = this.addChildElement( itemData, options );
+module.exports = Ajax;
- if ( 'section' === newView.getElementType() && newView.isInner() ) {
- newView.addEmptyColumn();
- }
+/***/ }),
+/* 76 */
+/***/ (function(module, exports, __webpack_require__) {
- elementor.channels.data.trigger( 'element:after:add', itemData );
+"use strict";
- },
- addControlValidator: function( controlName, validationCallback ) {
- validationCallback = validationCallback.bind( this );
+var Conditions;
- var validator = new Validator( { customValidationMethod: validationCallback } ),
- validators = this.getEditModel().get( 'settings' ).validators;
+Conditions = function Conditions() {
+ var self = this;
- if ( ! validators[ controlName ] ) {
- validators[ controlName ] = [];
+ this.compare = function (leftValue, rightValue, operator) {
+ switch (operator) {
+ /* eslint-disable eqeqeq */
+ case '==':
+ return leftValue == rightValue;
+ case '!=':
+ return leftValue != rightValue;
+ /* eslint-enable eqeqeq */
+ case '!==':
+ return leftValue !== rightValue;
+ case 'in':
+ return -1 !== rightValue.indexOf(leftValue);
+ case '!in':
+ return -1 === rightValue.indexOf(leftValue);
+ case 'contains':
+ return -1 !== leftValue.indexOf(rightValue);
+ case '!contains':
+ return -1 === leftValue.indexOf(rightValue);
+ case '<':
+ return leftValue < rightValue;
+ case '<=':
+ return leftValue <= rightValue;
+ case '>':
+ return leftValue > rightValue;
+ case '>=':
+ return leftValue >= rightValue;
+ default:
+ return leftValue === rightValue;
}
+ };
- validators[ controlName ].push( validator );
- },
+ this.check = function (conditions, comparisonObject) {
+ var isOrCondition = 'or' === conditions.relation,
+ conditionSucceed = !isOrCondition;
- addRenderAttribute: function( element, key, value, overwrite ) {
- var self = this;
+ jQuery.each(conditions.terms, function () {
+ var term = this,
+ comparisonResult;
+
+ if (term.terms) {
+ comparisonResult = self.check(term, comparisonObject);
+ } else {
+ var parsedName = term.name.match(/(\w+)(?:\[(\w+)])?/),
+ value = comparisonObject[parsedName[1]];
- if ( 'object' === typeof element ) {
- jQuery.each( element, function( elementKey ) {
- self.addRenderAttribute( elementKey, this, null, overwrite );
- } );
+ if (parsedName[2]) {
+ value = value[parsedName[2]];
+ }
- return self;
- }
+ comparisonResult = self.compare(value, term.value, term.operator);
+ }
- if ( 'object' === typeof key ) {
- jQuery.each( key, function( attributeKey ) {
- self.addRenderAttribute( element, attributeKey, this, overwrite );
- } );
+ if (isOrCondition) {
+ if (comparisonResult) {
+ conditionSucceed = true;
+ }
- return self;
- }
+ return !comparisonResult;
+ }
- if ( ! self.renderAttributes[ element ] ) {
- self.renderAttributes[ element ] = {};
- }
+ if (!comparisonResult) {
+ return conditionSucceed = false;
+ }
+ });
- if ( ! self.renderAttributes[ element ][ key ] ) {
- self.renderAttributes[ element ][ key ] = [];
- }
+ return conditionSucceed;
+ };
+};
- if ( ! Array.isArray( value ) ) {
- value = [ value ];
- }
+module.exports = new Conditions();
- if ( overwrite ) {
- self.renderAttributes[ element ][ key ] = value;
- } else {
- self.renderAttributes[ element ][ key ] = self.renderAttributes[ element ][ key ].concat( value );
- }
- },
+/***/ }),
+/* 77 */
+/***/ (function(module, exports, __webpack_require__) {
- getRenderAttributeString: function( element ) {
- if ( ! this.renderAttributes[ element ] ) {
- return '';
- }
+"use strict";
- var renderAttributes = this.renderAttributes[ element ],
- attributes = [];
- jQuery.each( renderAttributes, function( attributeKey ) {
- attributes.push( attributeKey + '="' + _.escape( this.join( ' ' ) ) + '"' );
- } );
+var HistoryPageView = __webpack_require__(78),
+ Manager;
- return attributes.join( ' ' );
- },
+Manager = function Manager() {
+ var self = this;
- isCollectionFilled: function() {
- return false;
- },
+ var addPanelPage = function addPanelPage() {
+ elementor.getPanelView().addPage('historyPage', {
+ view: HistoryPageView,
+ title: elementor.translate('history')
+ });
+ };
- isInner: function() {
- return !! this.model.get( 'isInner' );
- },
+ var init = function init() {
+ elementor.on('preview:loaded', addPanelPage);
- initControlsCSSParser: function() {
- this.controlsCSSParser = new ControlsCSSParser( {
- id: this.model.cid,
- settingsModel: this.getEditModel().get( 'settings' ),
- dynamicParsing: this.getDynamicParsingSettings()
- } );
- },
+ self.history = __webpack_require__(84);
- enqueueFonts: function() {
- var editModel = this.getEditModel(),
- settings = editModel.get( 'settings' );
+ self.revisions = __webpack_require__(93);
- _.each( settings.getFontControls(), function( control ) {
- var fontFamilyName = editModel.getSetting( control.name );
+ self.revisions.init();
+ };
- if ( _.isEmpty( fontFamilyName ) ) {
- return;
- }
+ jQuery(window).on('elementor:init', init);
+};
- elementor.helpers.enqueueFont( fontFamilyName );
- } );
- },
+module.exports = new Manager();
- renderStyles: function( settings ) {
- if ( ! settings ) {
- settings = this.getEditModel().get( 'settings' );
- }
+/***/ }),
+/* 78 */
+/***/ (function(module, exports, __webpack_require__) {
- this.controlsCSSParser.stylesheet.empty();
+"use strict";
- this.controlsCSSParser.addStyleRules( settings.getStyleControls(), settings.attributes, this.getEditModel().get( 'settings' ).controls, [ /{{ID}}/g, /{{WRAPPER}}/g ], [ this.getID(), '#elementor .' + this.getElementUniqueID() ] );
- this.controlsCSSParser.addStyleToDocument();
+var TabHistoryView = __webpack_require__(79),
+ TabHistoryEmpty = __webpack_require__(80),
+ TabRevisionsView = __webpack_require__(81),
+ TabRevisionsEmpty = __webpack_require__(83);
+
+module.exports = Marionette.LayoutView.extend({
+ template: '#tmpl-elementor-panel-history-page',
- var extraCSS = elementor.hooks.applyFilters( 'editor/style/styleText', '', this );
+ regions: {
+ content: '#elementor-panel-history-content'
+ },
- if ( extraCSS ) {
- this.controlsCSSParser.elements.$stylesheetElement.append( extraCSS );
- }
+ ui: {
+ tabs: '.elementor-panel-navigation-tab'
},
- renderCustomClasses: function() {
- var self = this;
+ events: {
+ 'click @ui.tabs': 'onTabClick'
+ },
- var settings = self.getEditModel().get( 'settings' ),
- classControls = settings.getClassControls();
+ regionViews: {},
- // Remove all previous classes
- _.each( classControls, function( control ) {
- var previousClassValue = settings.previous( control.name );
+ currentTab: null,
- if ( control.classes_dictionary ) {
- if ( undefined !== control.classes_dictionary[ previousClassValue ] ) {
- previousClassValue = control.classes_dictionary[ previousClassValue ];
- }
- }
+ initialize: function initialize() {
+ this.initRegionViews();
+ },
- self.$el.removeClass( control.prefix_class + previousClassValue );
- } );
+ initRegionViews: function initRegionViews() {
+ var historyItems = elementor.history.history.getItems(),
+ revisionsItems = elementor.history.revisions.getItems();
- // Add new classes
- _.each( classControls, function( control ) {
- var value = settings.attributes[ control.name ],
- classValue = value;
+ this.regionViews = {
+ history: {
+ region: this.content,
+ view: function view() {
+ if (historyItems.length) {
+ return TabHistoryView;
+ }
- if ( control.classes_dictionary ) {
- if ( undefined !== control.classes_dictionary[ value ] ) {
- classValue = control.classes_dictionary[ value ];
+ return TabHistoryEmpty;
+ },
+ options: {
+ collection: historyItems
}
- }
+ },
+ revisions: {
+ region: this.content,
+ view: function view() {
+ if (revisionsItems.length) {
+ return TabRevisionsView;
+ }
- var isVisible = elementor.helpers.isActiveControl( control, settings.attributes );
+ return TabRevisionsEmpty;
+ },
- if ( isVisible && ! _.isEmpty( classValue ) ) {
- self.$el
- .addClass( control.prefix_class + classValue )
- .addClass( _.result( self, 'className' ) );
+ options: {
+ collection: revisionsItems
+ }
}
- } );
+ };
},
- renderCustomElementID: function() {
- var customElementID = this.getEditModel().get( 'settings' ).get( '_element_id' );
+ activateTab: function activateTab(tabName) {
+ this.ui.tabs.removeClass('elementor-active').filter('[data-view="' + tabName + '"]').addClass('elementor-active');
- this.$el.attr( 'id', customElementID );
+ this.showView(tabName);
},
- renderUI: function() {
- this.renderStyles();
- this.renderCustomClasses();
- this.renderCustomElementID();
- this.enqueueFonts();
+ getCurrentTab: function getCurrentTab() {
+ return this.currentTab;
},
- runReadyTrigger: function() {
- var self = this;
+ showView: function showView(viewName) {
+ var viewDetails = this.regionViews[viewName],
+ options = viewDetails.options || {},
+ View = viewDetails.view;
- _.defer( function() {
- elementorFrontend.elementsHandler.runReadyTrigger( self.$el );
- } );
- },
+ if ('function' === typeof View) {
+ View = viewDetails.view();
+ }
- getID: function() {
- return this.model.get( 'id' );
- },
+ options.viewName = viewName;
+ this.currentTab = new View(options);
- getElementUniqueID: function() {
- return 'elementor-element-' + this.getID();
+ viewDetails.region.show(this.currentTab);
},
- duplicate: function() {
- this.trigger( 'request:duplicate' );
+ onRender: function onRender() {
+ this.showView('history');
},
- renderOnChange: function( settings ) {
- if ( ! this.allowRender ) {
- return;
- }
-
- // Make sure is correct model
- if ( settings instanceof BaseSettingsModel ) {
- var hasChanged = settings.hasChanged(),
- isContentChanged = ! hasChanged,
- isRenderRequired = ! hasChanged;
-
- _.each( settings.changedAttributes(), function( settingValue, settingKey ) {
- var control = settings.getControl( settingKey );
+ onTabClick: function onTabClick(event) {
+ this.activateTab(event.currentTarget.dataset.view);
+ },
- if ( '_column_size' === settingKey ) {
- isRenderRequired = true;
- return;
- }
+ onDestroy: function onDestroy() {
+ elementor.getPanelView().getFooterView().ui.history.removeClass('elementor-open');
+ }
+});
- if ( ! control ) {
- isRenderRequired = true;
- isContentChanged = true;
- return;
- }
+/***/ }),
+/* 79 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( 'none' !== control.render_type ) {
- isRenderRequired = true;
- }
+"use strict";
- if ( -1 !== [ 'none', 'ui' ].indexOf( control.render_type ) ) {
- return;
- }
- if ( 'template' === control.render_type || ! settings.isStyleControl( settingKey ) && ! settings.isClassControl( settingKey ) && '_element_id' !== settingKey ) {
- isContentChanged = true;
- }
- } );
+module.exports = Marionette.CompositeView.extend({
+ id: 'elementor-panel-history',
- if ( ! isRenderRequired ) {
- return;
- }
+ template: '#tmpl-elementor-panel-history-tab',
- if ( ! isContentChanged ) {
- this.renderUI();
- return;
- }
+ childView: Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-history-item',
+ ui: {
+ item: '.elementor-history-item'
+ },
+ triggers: {
+ 'click @ui.item': 'item:click'
}
+ }),
- // Re-render the template
- var templateType = this.getTemplateType(),
- editModel = this.getEditModel();
+ childViewContainer: '#elementor-history-list',
- if ( 'js' === templateType ) {
- this.getEditModel().setHtmlCache();
- this.render();
- editModel.renderOnLeave = true;
- } else {
- editModel.renderRemoteServer();
- }
- },
+ currentItem: null,
- getDynamicParsingSettings: function() {
+ onRender: function onRender() {
var self = this;
- return {
- onServerRequestStart: function() {
- self.$el.addClass( 'elementor-loading' );
- },
- onServerRequestEnd: function() {
- self.render();
+ _.defer(function () {
+ // Set current item - the first not applied item
+ if (self.children.length) {
+ var currentItem = self.collection.find(function (model) {
+ return 'not_applied' === model.get('status');
+ }),
+ currentView = self.children.findByModel(currentItem);
- self.$el.removeClass( 'elementor-loading' );
+ self.updateCurrentItem(currentView.$el);
}
- };
+ });
},
- serializeData: function() {
- var data = BaseContainer.prototype.serializeData.apply( this, arguments );
+ updateCurrentItem: function updateCurrentItem(element) {
+ var currentItemClass = 'elementor-history-item-current';
- data.settings = this.getEditModel().get( 'settings' ).parseDynamicSettings( data.settings, this.getDynamicParsingSettings() );
+ if (this.currentItem) {
+ this.currentItem.removeClass(currentItemClass);
+ }
- return data;
- },
+ this.currentItem = element;
- onBeforeRender: function() {
- this.renderAttributes = {};
+ this.currentItem.addClass(currentItemClass);
},
- onRender: function() {
- var self = this;
+ onChildviewItemClick: function onChildviewItemClick(childView, event) {
+ if (childView.$el === this.currentItem) {
+ return;
+ }
- self.renderUI();
+ var collection = event.model.collection,
+ itemIndex = collection.findIndex(event.model);
- self.runReadyTrigger();
+ elementor.history.history.doItem(itemIndex);
- if ( self.toggleEditTools ) {
- var triggerButton = self.ui.triggerButton;
+ this.updateCurrentItem(childView.$el);
- self.ui.settingsList.hoverIntent( function() {
- triggerButton.addClass( 'elementor-active' );
- }, function() {
- triggerButton.removeClass( 'elementor-active' );
- }, { timeout: 500 } );
+ if (!this.isDestroyed) {
+ this.render();
}
- },
+ }
+});
- onCollectionChanged: function() {
- elementor.saver.setFlagEditorChange( true );
- },
+/***/ }),
+/* 80 */
+/***/ (function(module, exports, __webpack_require__) {
- onEditSettingsChanged: function( changedModel ) {
- elementor.channels.editor
- .trigger( 'change:editSettings', changedModel, this );
- },
+"use strict";
- onSettingsChanged: function( changedModel ) {
- elementor.saver.setFlagEditorChange( true );
- this.renderOnChange( changedModel );
- },
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-history-no-items',
+ id: 'elementor-panel-history-no-items',
+ className: 'elementor-nerd-box'
+});
- onClickEdit: function( event ) {
- if ( ! jQuery( event.target ).closest( '.elementor-clickable' ).length ) {
- event.preventDefault();
+/***/ }),
+/* 81 */
+/***/ (function(module, exports, __webpack_require__) {
- event.stopPropagation();
- }
+"use strict";
- var activeMode = elementor.channels.dataEditMode.request( 'activeMode' );
- if ( 'edit' !== activeMode ) {
- return;
- }
+module.exports = Marionette.CompositeView.extend({
+ id: 'elementor-panel-revisions',
- this.edit();
- },
+ template: '#tmpl-elementor-panel-revisions',
- onClickDuplicate: function( event ) {
- event.preventDefault();
- event.stopPropagation();
+ childView: __webpack_require__(82),
- this.duplicate();
+ childViewContainer: '#elementor-revisions-list',
+
+ ui: {
+ discard: '.elementor-panel-scheme-discard .elementor-button',
+ apply: '.elementor-panel-scheme-save .elementor-button'
},
- removeElement: function() {
- elementor.channels.data.trigger( 'element:before:remove', this.model );
+ events: {
+ 'click @ui.discard': 'onDiscardClick',
+ 'click @ui.apply': 'onApplyClick'
+ },
- var parent = this._parent;
+ isRevisionApplied: false,
- parent.isManualRemoving = true;
+ jqueryXhr: null,
- this.model.destroy();
+ currentPreviewId: null,
- parent.isManualRemoving = false;
+ currentPreviewItem: null,
- elementor.channels.data.trigger( 'element:after:remove', this.model );
+ initialize: function initialize() {
+ this.listenTo(elementor.channels.editor, 'saved', this.onEditorSaved);
+ this.currentPreviewId = elementor.config.current_revision_id;
},
- onClickRemove: function( event ) {
- event.preventDefault();
- event.stopPropagation();
- this.removeElement();
- },
+ getRevisionViewData: function getRevisionViewData(revisionView) {
+ var self = this;
- onClickSave: function( event ) {
- event.preventDefault();
+ this.jqueryXhr = elementor.history.revisions.getRevisionDataAsync(revisionView.model.get('id'), {
+ success: function success(data) {
+ elementor.history.revisions.setEditorData(data.elements);
+ elementor.settings.page.model.set(data.settings);
- var model = this.model;
+ self.setRevisionsButtonsActive(true);
- elementor.templates.startModal( {
- onReady: function() {
- elementor.templates.getLayout().showSaveTemplateView( model );
- }
- } );
- },
+ self.jqueryXhr = null;
- onDestroy: function() {
- this.controlsCSSParser.removeStyleFromDocument();
- }
-} );
+ revisionView.$el.removeClass('elementor-revision-item-loading');
-module.exports = BaseElementView;
+ self.enterReviewMode();
+ },
+ error: function error() {
+ revisionView.$el.removeClass('elementor-revision-item-loading');
-},{"elementor-editor-utils/controls-css-parser":110,"elementor-elements/models/base-settings":68,"elementor-elements/views/column":79,"elementor-elements/views/section":80,"elementor-validator/base":35,"elementor-views/base-container":124}],72:[function(require,module,exports){
-var HandleAddDuplicateBehavior;
+ if ('abort' === self.jqueryXhr.statusText) {
+ return;
+ }
-HandleAddDuplicateBehavior = Marionette.Behavior.extend( {
+ self.currentPreviewItem = null;
- onChildviewClickNew: function( childView ) {
- var currentIndex = childView.$el.index() + 1;
+ self.currentPreviewId = null;
- this.addChild( { at: currentIndex } );
+ alert('An error occurred');
+ }
+ });
},
- onRequestNew: function() {
- this.addChild();
+ setRevisionsButtonsActive: function setRevisionsButtonsActive(active) {
+ this.ui.apply.add(this.ui.discard).prop('disabled', !active);
},
- addChild: function( options ) {
- if ( this.view.isCollectionFilled() ) {
- return;
- }
+ deleteRevision: function deleteRevision(revisionView) {
+ var self = this;
- options = options || {};
+ revisionView.$el.addClass('elementor-revision-item-loading');
- var newItem = {
- id: elementor.helpers.getUniqueID(),
- elType: this.view.getChildType()[0],
- settings: {},
- elements: []
- };
+ elementor.history.revisions.deleteRevision(revisionView.model, {
+ success: function success() {
+ if (revisionView.model.get('id') === self.currentPreviewId) {
+ self.onDiscardClick();
+ }
- elementor.channels.data.trigger( 'element:before:add', newItem );
+ self.currentPreviewId = null;
+ },
+ error: function error() {
+ revisionView.$el.removeClass('elementor-revision-item-loading');
- this.view.addChildModel( newItem, options );
+ alert('An error occurred');
+ }
+ });
+ },
- elementor.channels.data.trigger( 'element:after:add', newItem );
- }
-} );
+ enterReviewMode: function enterReviewMode() {
+ elementor.changeEditMode('review');
+ },
-module.exports = HandleAddDuplicateBehavior;
+ exitReviewMode: function exitReviewMode() {
+ elementor.changeEditMode('edit');
+ },
-},{}],73:[function(require,module,exports){
-var HandleDuplicateBehavior;
+ navigate: function navigate(reverse) {
+ var currentPreviewItemIndex = this.collection.indexOf(this.currentPreviewItem.model),
+ requiredIndex = reverse ? currentPreviewItemIndex - 1 : currentPreviewItemIndex + 1;
-HandleDuplicateBehavior = Marionette.Behavior.extend( {
+ if (requiredIndex < 0) {
+ requiredIndex = this.collection.length - 1;
+ }
- onChildviewRequestDuplicate: function( childView ) {
- if ( this.view.isCollectionFilled() ) {
- return;
+ if (requiredIndex >= this.collection.length) {
+ requiredIndex = 0;
}
- var currentIndex = this.view.collection.indexOf( childView.model ),
- newModel = childView.model.clone();
+ this.children.findByIndex(requiredIndex).ui.detailsArea.trigger('click');
+ },
- elementor.channels.data.trigger( 'element:before:duplicate', newModel );
+ onEditorSaved: function onEditorSaved() {
+ this.exitReviewMode();
- this.view.addChildModel( newModel, { at: currentIndex + 1 } );
+ this.setRevisionsButtonsActive(false);
- elementor.channels.data.trigger( 'element:after:duplicate', newModel );
- }
-} );
+ this.currentPreviewId = elementor.config.current_revision_id;
+ },
-module.exports = HandleDuplicateBehavior;
+ onApplyClick: function onApplyClick() {
+ elementor.saver.setFlagEditorChange(true);
-},{}],74:[function(require,module,exports){
-var InlineEditingBehavior;
+ elementor.saver.saveAutoSave();
-InlineEditingBehavior = Marionette.Behavior.extend( {
- editing: false,
+ this.isRevisionApplied = true;
- $currentEditingArea: null,
+ this.currentPreviewId = null;
- ui: function() {
- return {
- inlineEditingArea: '.' + this.getOption( 'inlineEditingClass' )
- };
+ elementor.history.history.getItems().reset();
},
- events: function() {
- return {
- 'click @ui.inlineEditingArea': 'onInlineEditingClick',
- 'input @ui.inlineEditingArea':'onInlineEditingUpdate'
- };
- },
+ onDiscardClick: function onDiscardClick() {
+ elementor.history.revisions.setEditorData(elementor.config.data);
- getEditingSettingKey: function() {
- return this.$currentEditingArea.data().elementorSettingKey;
- },
+ elementor.saver.setFlagEditorChange(this.isRevisionApplied);
- startEditing: function( $element ) {
- var elementorSettingKey = $element.data().elementorSettingKey,
- settingKey = elementorSettingKey,
- keyParts = elementorSettingKey.split( '.' ),
- isRepeaterKey = 3 === keyParts.length,
- settingsModel = this.view.getEditModel().get( 'settings' );
+ this.isRevisionApplied = false;
- if ( isRepeaterKey ) {
- settingsModel = settingsModel.get( keyParts[0] ).models[ keyParts[1] ];
+ this.setRevisionsButtonsActive(false);
- settingKey = keyParts[2];
- }
+ this.currentPreviewId = null;
- var dynamicSettings = settingsModel.get( '__dynamic__' ),
- isDynamic = dynamicSettings && dynamicSettings[ settingKey ];
+ this.exitReviewMode();
- if (
- this.editing ||
- isDynamic ||
- 'edit' !== elementor.channels.dataEditMode.request( 'activeMode' ) ||
- this.view.model.isRemoteRequestActive()
- ) {
- return;
+ if (this.currentPreviewItem) {
+ this.currentPreviewItem.$el.removeClass('elementor-revision-current-preview');
}
+ },
- this.$currentEditingArea = $element;
-
- var elementData = this.$currentEditingArea.data(),
- elementDataToolbar = elementData.elementorInlineEditingToolbar,
- mode = 'advanced' === elementDataToolbar ? 'advanced' : 'basic',
- editModel = this.view.getEditModel(),
- inlineEditingConfig = elementor.config.inlineEditing,
- contentHTML = editModel.getSetting( this.getEditingSettingKey() );
-
- if ( 'advanced' === mode ) {
- contentHTML = wp.editor.autop( contentHTML );
+ onDestroy: function onDestroy() {
+ if (this.currentPreviewId && this.currentPreviewId !== elementor.config.current_revision_id) {
+ this.onDiscardClick();
}
+ },
- /**
- * Replace rendered content with unrendered content.
- * This way the user can edit the original content, before shortcodes and oEmbeds are fired.
- */
- this.$currentEditingArea.html( contentHTML );
-
- var ElementorInlineEditor = elementorFrontend.getElements( 'window' ).ElementorInlineEditor;
-
- this.editing = true;
-
- this.view.allowRender = false;
-
- // Avoid retrieving of old content (e.g. in case of sorting)
- this.view.model.setHtmlCache( '' );
-
- this.editor = new ElementorInlineEditor( {
- linksInNewWindow: true,
- stay: false,
- editor: this.$currentEditingArea[0],
- mode: mode,
- list: 'none' === elementDataToolbar ? [] : inlineEditingConfig.toolbar[ elementDataToolbar || 'basic' ],
- cleanAttrs: ['id', 'class', 'name'],
- placeholder: elementor.translate( 'type_here' ) + '...',
- toolbarIconsPrefix: 'eicon-editor-',
- toolbarIconsDictionary: {
- externalLink: {
- className: 'eicon-editor-external-link'
- },
- list: {
- className: 'eicon-editor-list-ul'
- },
- insertOrderedList: {
- className: 'eicon-editor-list-ol'
- },
- insertUnorderedList: {
- className: 'eicon-editor-list-ul'
- },
- createlink: {
- className: 'eicon-editor-link'
- },
- unlink: {
- className: 'eicon-editor-unlink'
- },
- blockquote: {
- className: 'eicon-editor-quote'
- },
- p: {
- className: 'eicon-editor-paragraph'
- },
- pre: {
- className: 'eicon-editor-code'
- }
- }
- } );
-
- var $menuItems = jQuery( this.editor._menu ).children();
+ onRenderCollection: function onRenderCollection() {
+ if (!this.currentPreviewId) {
+ return;
+ }
- /**
- * When the edit area is not focused (on blur) the inline editing is stopped.
- * In order to prevent blur event when the user clicks on toolbar buttons while editing the
- * content, we need the prevent their mousedown event. This also prevents the blur event.
- */
- $menuItems.on( 'mousedown', function( event ) {
- event.preventDefault();
- } );
+ var currentPreviewModel = this.collection.findWhere({ id: this.currentPreviewId });
- this.$currentEditingArea.on( 'blur', this.onInlineEditingBlur.bind( this ) );
+ // Ensure the model is exist and not deleted during a save.
+ if (currentPreviewModel) {
+ this.currentPreviewItem = this.children.findByModelCid(currentPreviewModel.cid);
+ this.currentPreviewItem.$el.addClass('elementor-revision-current-preview');
+ }
},
- stopEditing: function() {
- this.editing = false;
+ onChildviewDetailsAreaClick: function onChildviewDetailsAreaClick(childView) {
+ var self = this,
+ revisionID = childView.model.get('id');
- this.editor.destroy();
+ if (revisionID === self.currentPreviewId) {
+ return;
+ }
- this.view.allowRender = true;
+ if (this.jqueryXhr) {
+ this.jqueryXhr.abort();
+ }
- /**
- * Inline editing has several toolbar types (advanced, basic and none). When editing is stopped,
- * we need to rerender the area. To prevent multiple renderings, we will render only areas that
- * use advanced toolbars.
- */
- if ( 'advanced' === this.$currentEditingArea.data().elementorInlineEditingToolbar ) {
- this.view.getEditModel().renderRemoteServer();
+ if (self.currentPreviewItem) {
+ self.currentPreviewItem.$el.removeClass('elementor-revision-current-preview');
}
- },
- onInlineEditingClick: function( event ) {
- var self = this,
- $targetElement = jQuery( event.currentTarget );
+ childView.$el.addClass('elementor-revision-current-preview elementor-revision-item-loading');
- /**
- * When starting inline editing we need to set timeout, this allows other inline items to finish
- * their operations before focusing new editing area.
- */
- setTimeout( function() {
- self.startEditing( $targetElement );
- }, 30 );
+ if (elementor.saver.isEditorChanged() && null === self.currentPreviewId) {
+ elementor.saver.saveEditor({
+ status: 'autosave',
+ onSuccess: function onSuccess() {
+ self.getRevisionViewData(childView);
+ }
+ });
+ } else {
+ self.getRevisionViewData(childView);
+ }
+
+ self.currentPreviewItem = childView;
+
+ self.currentPreviewId = revisionID;
},
- onInlineEditingBlur: function() {
- var self = this;
+ onChildviewDeleteClick: function onChildviewDeleteClick(childView) {
+ var self = this,
+ type = childView.model.get('type');
- /**
- * When exiting inline editing we need to set timeout, to make sure there is no focus on internal
- * toolbar action. This prevent the blur and allows the user to continue the inline editing.
- */
- setTimeout( function() {
- var selection = elementorFrontend.getElements( 'window' ).getSelection(),
- $focusNode = jQuery( selection.focusNode );
-
- if ( $focusNode.closest( '.pen-input-wrapper' ).length ) {
- return;
+ var removeDialog = elementor.dialogsManager.createWidget('confirm', {
+ message: elementor.translate('dialog_confirm_delete', [type]),
+ headerMessage: elementor.translate('delete_element', [type]),
+ strings: {
+ confirm: elementor.translate('delete'),
+ cancel: elementor.translate('cancel')
+ },
+ defaultOption: 'confirm',
+ onConfirm: function onConfirm() {
+ self.deleteRevision(childView);
}
+ });
- self.stopEditing();
- }, 20 );
- },
-
- onInlineEditingUpdate: function() {
- this.view.getEditModel().setSetting( this.getEditingSettingKey(), this.editor.getContent() );
+ removeDialog.show();
}
-} );
+});
-module.exports = InlineEditingBehavior;
+/***/ }),
+/* 82 */
+/***/ (function(module, exports, __webpack_require__) {
-},{}],75:[function(require,module,exports){
-var InnerTabsBehavior;
+"use strict";
+
+
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-revisions-revision-item',
-InnerTabsBehavior = Marionette.Behavior.extend( {
+ className: 'elementor-revision-item',
- onRenderCollection: function() {
- this.handleInnerTabs( this.view );
+ ui: {
+ detailsArea: '.elementor-revision-item__details',
+ deleteButton: '.elementor-revision-item__tools-delete'
},
- handleInnerTabs: function( parent ) {
- var closedClass = 'elementor-tab-close',
- activeClass = 'elementor-tab-active',
- tabsWrappers = parent.children.filter( function( view ) {
- return 'tabs' === view.model.get( 'type' );
- } );
+ triggers: {
+ 'click @ui.detailsArea': 'detailsArea:click',
+ 'click @ui.deleteButton': 'delete:click'
+ }
+});
- _.each( tabsWrappers, function( view ) {
- view.$el.find( '.elementor-control-content' ).remove();
+/***/ }),
+/* 83 */
+/***/ (function(module, exports, __webpack_require__) {
- var tabsId = view.model.get( 'name' ),
- tabs = parent.children.filter( function( childView ) {
- return ( 'tab' === childView.model.get( 'type' ) && childView.model.get( 'tabs_wrapper' ) === tabsId );
- } );
+"use strict";
- _.each( tabs, function( childView, index ) {
- view._addChildView( childView );
- var tabId = childView.model.get( 'name' ),
- controlsUnderTab = parent.children.filter( function( view ) {
- return ( tabId === view.model.get( 'inner_tab' ) );
- } );
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-revisions-no-revisions',
+ id: 'elementor-panel-revisions-no-revisions',
+ className: 'elementor-nerd-box'
+});
- if ( 0 === index ) {
- childView.$el.addClass( activeClass );
- } else {
- _.each( controlsUnderTab, function( view ) {
- view.$el.addClass( closedClass );
- } );
- }
- } );
- } );
- },
+/***/ }),
+/* 84 */
+/***/ (function(module, exports, __webpack_require__) {
- onChildviewControlTabClicked: function( childView ) {
- var closedClass = 'elementor-tab-close',
- activeClass = 'elementor-tab-active',
- tabClicked = childView.model.get( 'name' ),
- childrenUnderTab = this.view.children.filter( function( view ) {
- return ( 'tab' !== view.model.get( 'type' ) && childView.model.get( 'tabs_wrapper' ) === view.model.get( 'tabs_wrapper' ) );
- } ),
- siblingTabs = this.view.children.filter( function( view ) {
- return ( 'tab' === view.model.get( 'type' ) && childView.model.get( 'tabs_wrapper' ) === view.model.get( 'tabs_wrapper' ) );
- } );
-
- _.each( siblingTabs, function( view ) {
- view.$el.removeClass( activeClass );
- } );
-
- childView.$el.addClass( activeClass );
-
- _.each( childrenUnderTab, function( view ) {
- if ( view.model.get( 'inner_tab' ) === tabClicked ) {
- view.$el.removeClass( closedClass );
- } else {
- view.$el.addClass( closedClass );
- }
- } );
+"use strict";
- elementor.channels.data.trigger( 'scrollbar:update' );
- }
-} );
-module.exports = InnerTabsBehavior;
+var HistoryCollection = __webpack_require__(85),
+ HistoryItem = __webpack_require__(27),
+ ElementHistoryBehavior = __webpack_require__(86),
+ CollectionHistoryBehavior = __webpack_require__(87);
-},{}],76:[function(require,module,exports){
-var ResizableBehavior;
+var Manager = function Manager() {
+ var self = this,
+ currentItemID = null,
+ items = new HistoryCollection(),
+ editorSaved = false,
+ active = true;
-ResizableBehavior = Marionette.Behavior.extend( {
- defaults: {
- handles: elementor.config.is_rtl ? 'w' : 'e'
- },
+ var translations = {
+ add: elementor.translate('added'),
+ remove: elementor.translate('removed'),
+ change: elementor.translate('edited'),
+ move: elementor.translate('moved'),
+ paste_style: elementor.translate('style_pasted'),
+ reset_style: elementor.translate('style_reset')
+ };
- events: {
- resizestart: 'onResizeStart',
- resizestop: 'onResizeStop',
- resize: 'onResize'
- },
+ var addBehaviors = function addBehaviors(behaviors) {
+ behaviors.ElementHistory = {
+ behaviorClass: ElementHistoryBehavior
+ };
- initialize: function() {
- Marionette.Behavior.prototype.initialize.apply( this, arguments );
+ behaviors.CollectionHistory = {
+ behaviorClass: CollectionHistoryBehavior
+ };
- this.listenTo( elementor.channels.dataEditMode, 'switch', this.onEditModeSwitched );
- },
+ return behaviors;
+ };
- active: function() {
- if ( ! elementor.userCan( 'design' ) ) {
- return;
- }
- this.deactivate();
+ var addCollectionBehavior = function addCollectionBehavior(behaviors) {
+ behaviors.CollectionHistory = {
+ behaviorClass: CollectionHistoryBehavior
+ };
- var options = _.clone( this.options );
+ return behaviors;
+ };
- delete options.behaviorClass;
+ var getActionLabel = function getActionLabel(itemData) {
+ if (translations[itemData.type]) {
+ return translations[itemData.type];
+ }
- var $childViewContainer = this.getChildViewContainer(),
- defaultResizableOptions = {},
- resizableOptions = _.extend( defaultResizableOptions, options );
+ return itemData.type;
+ };
- $childViewContainer.resizable( resizableOptions );
- },
+ var navigate = function navigate(isRedo) {
+ var currentItem = items.find(function (model) {
+ return 'not_applied' === model.get('status');
+ }),
+ currentItemIndex = items.indexOf(currentItem),
+ requiredIndex = isRedo ? currentItemIndex - 1 : currentItemIndex + 1;
- deactivate: function() {
- if ( this.getChildViewContainer().resizable( 'instance' ) ) {
- this.getChildViewContainer().resizable( 'destroy' );
+ if (!isRedo && !currentItem || requiredIndex < 0 || requiredIndex >= items.length) {
+ return;
}
- },
- onEditModeSwitched: function( activeMode ) {
- if ( 'edit' === activeMode ) {
- this.active();
- } else {
- this.deactivate();
- }
- },
+ self.doItem(requiredIndex);
+ };
- onRender: function() {
- var self = this;
+ var addHotKeys = function addHotKeys() {
+ var H_KEY = 72,
+ Y_KEY = 89,
+ Z_KEY = 90;
- _.defer( function() {
- self.onEditModeSwitched( elementor.channels.dataEditMode.request( 'activeMode' ) );
- } );
- },
+ elementor.hotKeys.addHotKeyHandler(H_KEY, 'showHistoryPage', {
+ isWorthHandling: function isWorthHandling(event) {
+ return elementor.hotKeys.isControlEvent(event) && event.shiftKey;
+ },
+ handle: function handle() {
+ elementor.getPanelView().setPage('historyPage');
+ }
+ });
- onDestroy: function() {
- this.deactivate();
- },
+ var navigationWorthHandling = function navigationWorthHandling(event) {
+ return items.length && elementor.hotKeys.isControlEvent(event) && !jQuery(event.target).is('input, textarea, [contenteditable=true]');
+ };
- onResizeStart: function( event ) {
- event.stopPropagation();
+ elementor.hotKeys.addHotKeyHandler(Y_KEY, 'historyNavigationRedo', {
+ isWorthHandling: navigationWorthHandling,
+ handle: function handle(event) {
+ navigate(true);
+ }
+ });
- this.view.$el.data( 'originalWidth', this.view.el.getBoundingClientRect().width );
+ elementor.hotKeys.addHotKeyHandler(Z_KEY, 'historyNavigation', {
+ isWorthHandling: navigationWorthHandling,
+ handle: function handle(event) {
+ navigate(event.shiftKey);
+ }
+ });
+ };
- this.view.triggerMethod( 'request:resize:start', event );
- },
+ var onPanelSave = function onPanelSave() {
+ if (items.length >= 2) {
+ // Check if it's a save after made changes, `items.length - 1` is the `Editing Started Item
+ var firstEditItem = items.at(items.length - 2);
+ editorSaved = 'not_applied' === firstEditItem.get('status');
+ }
+ };
- onResizeStop: function( event ) {
- event.stopPropagation();
+ var init = function init() {
+ addHotKeys();
- this.view.triggerMethod( 'request:resize:stop' );
- },
+ elementor.hooks.addFilter('elements/base/behaviors', addBehaviors);
+ elementor.hooks.addFilter('elements/base-section-container/behaviors', addCollectionBehavior);
- onResize: function( event, ui ) {
- event.stopPropagation();
+ elementor.channels.data.on('drag:before:update', self.startMovingItem).on('drag:after:update', self.endItem).on('element:before:add', self.startAddElement).on('element:after:add', self.endItem).on('element:before:remove', self.startRemoveElement).on('element:after:remove', self.endItem).on('element:before:paste:style', self.startPasteStyle).on('element:after:paste:style', self.endItem).on('element:before:reset:style', self.startResetStyle).on('element:after:reset:style', self.endItem).on('section:before:drop', self.startDropElement).on('section:after:drop', self.endItem).on('template:before:insert', self.startInsertTemplate).on('template:after:insert', self.endItem);
- this.view.triggerMethod( 'request:resize', ui, event );
- },
+ elementor.channels.editor.on('saved', onPanelSave);
+ };
- getChildViewContainer: function() {
- return this.$el;
- }
-} );
+ this.setActive = function (value) {
+ active = value;
+ };
-module.exports = ResizableBehavior;
+ this.getActive = function () {
+ return active;
+ };
-},{}],77:[function(require,module,exports){
-var SortableBehavior;
+ this.getItems = function () {
+ return items;
+ };
-SortableBehavior = Marionette.Behavior.extend( {
- defaults: {
- elChildType: 'widget'
- },
+ this.startItem = function (itemData) {
+ currentItemID = this.addItem(itemData);
+ };
- events: {
- 'sortstart': 'onSortStart',
- 'sortreceive': 'onSortReceive',
- 'sortupdate': 'onSortUpdate',
- 'sortover': 'onSortOver',
- 'sortout': 'onSortOut'
- },
+ this.endItem = function () {
+ currentItemID = null;
+ };
- initialize: function() {
- this.listenTo( elementor.channels.dataEditMode, 'switch', this.onEditModeSwitched )
- .listenTo( elementor.channels.deviceMode, 'change', this.onDeviceModeChange );
- },
+ this.isItemStarted = function () {
+ return null !== currentItemID;
+ };
- onEditModeSwitched: function( activeMode ) {
- if ( 'edit' === activeMode ) {
- this.activate();
- } else {
- this.deactivate();
+ this.addItem = function (itemData) {
+ if (!this.getActive()) {
+ return;
}
- },
- onDeviceModeChange: function() {
- var deviceMode = elementor.channels.deviceMode.request( 'currentMode' );
+ if (!items.length) {
+ items.add({
+ status: 'not_applied',
+ title: elementor.translate('editing_started'),
+ subTitle: '',
+ action: '',
+ editing_started: true
+ });
+ }
- if ( 'desktop' === deviceMode ) {
- this.activate();
- } else {
- this.deactivate();
+ // Remove old applied items from top of list
+ while (items.length && 'applied' === items.first().get('status')) {
+ items.shift();
}
- },
- onRender: function() {
- var self = this;
+ var id = currentItemID ? currentItemID : new Date().getTime();
- _.defer( function() {
- self.onEditModeSwitched( elementor.channels.dataEditMode.request( 'activeMode' ) );
- } );
- },
+ var currentItem = items.findWhere({
+ id: id
+ });
- onDestroy: function() {
- this.deactivate();
- },
+ if (!currentItem) {
+ currentItem = new HistoryItem({
+ id: id,
+ title: itemData.title,
+ subTitle: itemData.subTitle,
+ action: getActionLabel(itemData),
+ type: itemData.type,
+ elementType: itemData.elementType
+ });
- activate: function() {
- if ( ! elementor.userCan( 'design' ) ) {
- return;
- }
- if ( this.getChildViewContainer().sortable( 'instance' ) ) {
- return;
+ self.startItemTitle = '';
+ self.startItemAction = '';
}
- var $childViewContainer = this.getChildViewContainer(),
- defaultSortableOptions = {
- connectWith: $childViewContainer.selector,
- placeholder: 'elementor-sortable-placeholder elementor-' + this.getOption( 'elChildType' ) + '-placeholder',
- cursorAt: {
- top: 20,
- left: 25
- },
- helper: this._getSortableHelper.bind( this ),
- cancel: 'input, textarea, button, select, option, .elementor-inline-editing, .elementor-tab-title'
-
- },
- sortableOptions = _.extend( defaultSortableOptions, this.view.getSortableOptions() );
+ var position = 0;
- $childViewContainer.sortable( sortableOptions );
- },
+ // Temp fix. On move a column - insert the `remove` subItem before the section changes subItem.
+ // In a multi columns section - the structure has been changed,
+ // In a one column section - it's filled with an empty column,
+ // The order is important for the `redoItem`, that needed to change the section first
+ // and only after that - to remove the column.
+ if ('column' === itemData.elementType && 'remove' === itemData.type && 'column' === currentItem.get('elementType')) {
+ position = 1;
+ }
- _getSortableHelper: function( event, $item ) {
- var model = this.view.collection.get( {
- cid: $item.data( 'model-cid' )
- } );
+ currentItem.get('items').add(itemData, { at: position });
- return '<div style="height: 84px; width: 125px;" class="elementor-sortable-helper elementor-sortable-helper-' + model.get( 'elType' ) + '"><div class="icon"><i class="' + model.getIcon() + '"></i></div><div class="elementor-element-title-wrapper"><div class="title">' + model.getTitle() + '</div></div></div>';
- },
+ items.add(currentItem, { at: 0 });
- getChildViewContainer: function() {
- return this.view.getChildViewContainer( this.view );
- },
+ var panel = elementor.getPanelView();
- deactivate: function() {
- if ( this.getChildViewContainer().sortable( 'instance' ) ) {
- this.getChildViewContainer().sortable( 'destroy' );
+ if ('historyPage' === panel.getCurrentPageName()) {
+ panel.getCurrentPageView().render();
}
- },
- onSortStart: function( event, ui ) {
- event.stopPropagation();
-
- var model = this.view.collection.get( {
- cid: ui.item.data( 'model-cid' )
- } );
+ return id;
+ };
- if ( 'column' === this.options.elChildType ) {
- var uiData = ui.item.data( 'sortableItem' ),
- uiItems = uiData.items,
- itemHeight = 0;
+ this.doItem = function (index) {
+ // Don't track while restoring the item
+ this.setActive(false);
- uiItems.forEach( function( item ) {
- if ( item.item[0] === ui.item[0] ) {
- itemHeight = item.height;
- return false;
- }
- } );
+ var item = items.at(index);
- ui.placeholder.height( itemHeight );
+ if ('not_applied' === item.get('status')) {
+ this.undoItem(index);
+ } else {
+ this.redoItem(index);
}
- elementor.channels.data
- .reply( 'dragging:model', model )
- .reply( 'dragging:parent:view', this.view )
- .trigger( 'drag:start', model )
- .trigger( model.get( 'elType' ) + ':drag:start' );
- },
-
- onSortOver: function( event ) {
- event.stopPropagation();
+ this.setActive(true);
- var model = elementor.channels.data.request( 'dragging:model' );
+ var panel = elementor.getPanelView(),
+ panelPage = panel.getCurrentPageView(),
+ viewToScroll;
- jQuery( event.target )
- .addClass( 'elementor-draggable-over' )
- .attr( {
- 'data-dragged-element': model.get( 'elType' ),
- 'data-dragged-is-inner': model.get( 'isInner' )
- } );
+ if ('editor' === panel.getCurrentPageName()) {
+ if (panelPage.getOption('editedElementView').isDestroyed) {
+ // If the the element isn't exist - show the history panel
+ panel.setPage('historyPage');
+ } else {
+ // If element exist - render again, maybe the settings has been changed
+ viewToScroll = panelPage.getOption('editedElementView');
+ }
+ } else {
+ if ('historyPage' === panel.getCurrentPageName()) {
+ panelPage.render();
+ }
- this.$el.addClass( 'elementor-dragging-on-child' );
- },
+ // Try scroll to affected element.
+ if (item instanceof Backbone.Model && item.get('items').length) {
+ var history = item.get('items').first().get('history');
- onSortOut: function( event ) {
- event.stopPropagation();
+ if (history && history.behavior.view.model) {
+ viewToScroll = self.findView(history.behavior.view.model.get('id'));
+ }
+ }
+ }
- jQuery( event.target )
- .removeClass( 'elementor-draggable-over' )
- .removeAttr( 'data-dragged-element data-dragged-is-inner' );
+ if (viewToScroll && !elementor.helpers.isInViewport(viewToScroll.$el[0], elementor.$previewContents.find('html')[0])) {
+ elementor.helpers.scrollToView(viewToScroll.$el);
+ }
- this.$el.removeClass( 'elementor-dragging-on-child' );
- },
+ if (item.get('editing_started')) {
+ if (!editorSaved) {
+ elementor.saver.setFlagEditorChange(false);
+ }
+ }
+ };
- onSortReceive: function( event, ui ) {
- event.stopPropagation();
+ this.undoItem = function (index) {
+ var item;
- if ( this.view.isCollectionFilled() ) {
- jQuery( ui.sender ).sortable( 'cancel' );
- return;
- }
+ for (var stepNum = 0; stepNum < index; stepNum++) {
+ item = items.at(stepNum);
- var model = elementor.channels.data.request( 'dragging:model' ),
- draggedElType = model.get( 'elType' ),
- draggedIsInnerSection = 'section' === draggedElType && model.get( 'isInner' ),
- targetIsInnerColumn = 'column' === this.view.getElementType() && this.view.isInner();
+ if ('not_applied' === item.get('status')) {
+ item.get('items').each(function (subItem) {
+ var history = subItem.get('history');
- if ( draggedIsInnerSection && targetIsInnerColumn ) {
- jQuery( ui.sender ).sortable( 'cancel' );
+ if (history) {
+ /* type duplicate first items hasn't history */
+ history.behavior.restore(subItem);
+ }
+ });
- return;
+ item.set('status', 'applied');
+ }
}
+ };
- elementor.channels.data.trigger( 'drag:before:update', model );
+ this.redoItem = function (index) {
+ for (var stepNum = items.length - 1; stepNum >= index; stepNum--) {
+ var item = items.at(stepNum);
- var newIndex = ui.item.parent().children().index( ui.item ),
- modelJSON = model.toJSON( { copyHtmlCache: true } );
+ if ('applied' === item.get('status')) {
+ var reversedSubItems = _.toArray(item.get('items').models).reverse();
- var senderSection = elementor.channels.data.request( 'dragging:parent:view' );
+ _(reversedSubItems).each(function (subItem) {
+ var history = subItem.get('history');
- senderSection.isManualRemoving = true;
+ if (history) {
+ /* type duplicate first items hasn't history */
+ history.behavior.restore(subItem, true);
+ }
+ });
- model.destroy();
+ item.set('status', 'not_applied');
+ }
+ }
+ };
- senderSection.isManualRemoving = false;
+ this.getModelLabel = function (model) {
+ if (!(model instanceof Backbone.Model)) {
+ model = new Backbone.Model(model);
+ }
- this.view.addChildElement( modelJSON, { at: newIndex } );
+ return elementor.getElementData(model).title;
+ };
- elementor.channels.data.trigger( 'drag:after:update', model );
- },
+ this.findView = function (modelID, views) {
+ var self = this,
+ founded = false;
- onSortUpdate: function( event, ui ) {
- event.stopPropagation();
+ if (!views) {
+ views = elementor.getPreviewView().children;
+ }
- if ( this.getChildViewContainer()[0] === ui.item.parent()[0] ) {
- var model = elementor.channels.data.request( 'dragging:model' ),
- $childElement = ui.item,
- collection = this.view.collection,
- newIndex = $childElement.parent().children().index( $childElement );
+ _.each(views._views, function (view) {
+ if (founded) {
+ return;
+ }
+ // Widget global used getEditModel
+ var model = view.getEditModel ? view.getEditModel() : view.model;
- elementor.channels.data.trigger( 'drag:before:update', model );
+ if (modelID === model.get('id')) {
+ founded = view;
+ } else if (view.children && view.children.length) {
+ founded = self.findView(modelID, view.children);
+ }
+ });
- var child = this.view.children.findByModelCid( model.cid );
+ return founded;
+ };
- child._isRendering = true;
+ this.startMovingItem = function (model) {
+ elementor.history.history.startItem({
+ type: 'move',
+ title: self.getModelLabel(model),
+ elementType: model.elType || model.get('elType')
+ });
+ };
- collection.remove( model );
+ this.startInsertTemplate = function (model) {
+ elementor.history.history.startItem({
+ type: 'add',
+ title: elementor.translate('template'),
+ subTitle: model.get('title'),
+ elementType: 'template'
+ });
+ };
- this.view.addChildElement( model, { at: newIndex } );
+ this.startDropElement = function () {
+ var elementView = elementor.channels.panelElements.request('element:selected');
+ elementor.history.history.startItem({
+ type: 'add',
+ title: self.getModelLabel(elementView.model),
+ elementType: elementView.model.get('widgetType') || elementView.model.get('elType')
+ });
+ };
- elementor.saver.setFlagEditorChange( true );
+ this.startAddElement = function (model) {
+ elementor.history.history.startItem({
+ type: 'add',
+ title: self.getModelLabel(model),
+ elementType: model.elType
+ });
+ };
- elementor.channels.data.trigger( 'drag:after:update', model );
- }
- },
+ this.startPasteStyle = function (model) {
+ elementor.history.history.startItem({
+ type: 'paste_style',
+ title: self.getModelLabel(model),
+ elementType: model.get('elType')
+ });
+ };
- onAddChild: function( view ) {
- view.$el.attr( 'data-model-cid', view.model.cid );
- }
-} );
+ this.startResetStyle = function (model) {
+ elementor.history.history.startItem({
+ type: 'reset_style',
+ title: self.getModelLabel(model),
+ elementType: model.get('elType')
+ });
+ };
-module.exports = SortableBehavior;
+ this.startRemoveElement = function (model) {
+ elementor.history.history.startItem({
+ type: 'remove',
+ title: self.getModelLabel(model),
+ elementType: model.get('elType')
+ });
+ };
-},{}],78:[function(require,module,exports){
-var ElementEmptyView;
+ init();
+};
-ElementEmptyView = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-empty-preview',
+module.exports = new Manager();
- className: 'elementor-empty-view',
+/***/ }),
+/* 85 */
+/***/ (function(module, exports, __webpack_require__) {
- events: {
- 'click': 'onClickAdd'
- },
+"use strict";
- onClickAdd: function() {
- elementor.getPanelView().setPage( 'elements' );
- }
-} );
-module.exports = ElementEmptyView;
+var ItemModel = __webpack_require__(27);
-},{}],79:[function(require,module,exports){
-var BaseElementView = require( 'elementor-elements/views/base' ),
- ColumnEmptyView = require( 'elementor-elements/views/column-empty' ),
- ColumnView;
+module.exports = Backbone.Collection.extend({
+ model: ItemModel
+});
-ColumnView = BaseElementView.extend( {
- template: Marionette.TemplateCache.get( '#tmpl-elementor-element-column-content' ),
+/***/ }),
+/* 86 */
+/***/ (function(module, exports, __webpack_require__) {
- emptyView: ColumnEmptyView,
+"use strict";
- childViewContainer: '> .elementor-column-wrap > .elementor-widget-wrap',
- behaviors: function() {
- var behaviors = BaseElementView.prototype.behaviors.apply( this, arguments );
+module.exports = Marionette.Behavior.extend({
+ oldValues: [],
- _.extend( behaviors, {
- Sortable: {
- behaviorClass: require( 'elementor-behaviors/sortable' ),
- elChildType: 'widget'
- },
- Resizable: {
- behaviorClass: require( 'elementor-behaviors/resizable' )
- },
- HandleDuplicate: {
- behaviorClass: require( 'elementor-behaviors/handle-duplicate' )
- },
- HandleAddMode: {
- behaviorClass: require( 'elementor-behaviors/duplicate' )
- }
- } );
+ listenerAttached: false,
- return elementor.hooks.applyFilters( 'elements/column/behaviors', behaviors, this );
+ initialize: function initialize() {
+ this.lazySaveTextHistory = _.debounce(this.saveTextHistory.bind(this), 800);
},
- className: function() {
- var classes = BaseElementView.prototype.className.apply( this, arguments ),
- type = this.isInner() ? 'inner' : 'top';
-
- return classes + ' elementor-column elementor-' + type + '-column';
+ // use beforeRender that runs after the settingsModel is exist
+ onBeforeRender: function onBeforeRender() {
+ if (!this.listenerAttached) {
+ this.listenTo(this.view.getEditModel().get('settings'), 'change', this.saveHistory);
+ this.listenerAttached = true;
+ }
},
- tagName: function() {
- return this.model.getSetting( 'html_tag' ) || 'div';
- },
+ saveTextHistory: function saveTextHistory(model, changed, control) {
+ var changedAttributes = {},
+ currentValue = model.get(control.name),
+ newValue;
- ui: function() {
- var ui = BaseElementView.prototype.ui.apply( this, arguments );
+ if (currentValue instanceof Backbone.Collection) {
+ // Deep clone.
+ newValue = currentValue.toJSON();
+ } else {
+ newValue = currentValue;
+ }
- ui.columnInner = '> .elementor-column-wrap';
+ changedAttributes[control.name] = {
+ old: this.oldValues[control.name],
+ 'new': newValue
+ };
- ui.percentsTooltip = '> .elementor-element-overlay .elementor-column-percents-tooltip';
+ var historyItem = {
+ type: 'change',
+ elementType: 'control',
+ title: elementor.history.history.getModelLabel(model),
+ subTitle: control.label,
+ history: {
+ behavior: this,
+ changed: changedAttributes,
+ model: this.view.getEditModel().toJSON()
+ }
+ };
- return ui;
- },
+ elementor.history.history.addItem(historyItem);
- triggers: {
- 'click @ui.addButton': 'click:new'
+ delete this.oldValues[control.name];
},
- initialize: function() {
- BaseElementView.prototype.initialize.apply( this, arguments );
-
- this.addControlValidator( '_inline_size', this.onEditorInlineSizeInputChange );
- },
+ saveHistory: function saveHistory(model, options) {
+ if (!elementor.history.history.getActive()) {
+ return;
+ }
- isDroppingAllowed: function() {
- var elementView = elementor.channels.panelElements.request( 'element:selected' );
+ var self = this,
+ changed = Object.keys(model.changed),
+ control = model.controls[changed[0]];
- if ( ! elementView ) {
- return false;
+ if (!control && options && options.control) {
+ control = options.control;
}
- var elType = elementView.model.get( 'elType' );
-
- if ( 'section' === elType ) {
- return ! this.isInner();
+ if (!changed.length || !control) {
+ return;
}
- return 'widget' === elType;
- },
+ if (1 === changed.length) {
+ if (_.isUndefined(self.oldValues[control.name])) {
+ self.oldValues[control.name] = model.previous(control.name);
+ }
- getPercentsForDisplay: function() {
- var inlineSize = +this.model.getSetting( '_inline_size' ) || this.getPercentSize();
+ if (elementor.history.history.isItemStarted()) {
+ // Do not delay the execution
+ self.saveTextHistory(model, changed, control);
+ } else {
+ self.lazySaveTextHistory(model, changed, control);
+ }
- return inlineSize.toFixed( 1 ) + '%';
- },
+ return;
+ }
- changeSizeUI: function() {
- var self = this,
- columnSize = self.model.getSetting( '_column_size' );
+ var changedAttributes = {};
- self.$el.attr( 'data-col', columnSize );
+ _.each(changed, function (controlName) {
+ changedAttributes[controlName] = {
+ old: model.previous(controlName),
+ 'new': model.get(controlName)
+ };
+ });
- _.defer( function() { // Wait for the column size to be applied
- if ( self.ui.percentsTooltip ) {
- self.ui.percentsTooltip.text( self.getPercentsForDisplay() );
+ var historyItem = {
+ type: 'change',
+ elementType: 'control',
+ title: elementor.history.history.getModelLabel(model),
+ history: {
+ behavior: this,
+ changed: changedAttributes,
+ model: this.view.getEditModel().toJSON()
}
- } );
- },
+ };
- getPercentSize: function( size ) {
- if ( ! size ) {
- size = this.el.getBoundingClientRect().width;
+ if (1 === changed.length) {
+ historyItem.subTitle = control.label;
}
- return +( size / this.$el.parent().width() * 100 ).toFixed( 3 );
- },
-
- getSortableOptions: function() {
- return {
- connectWith: '.elementor-widget-wrap',
- items: '> .elementor-element'
- };
+ elementor.history.history.addItem(historyItem);
},
- changeChildContainerClasses: function() {
- var emptyClass = 'elementor-element-empty',
- populatedClass = 'elementor-element-populated';
+ restore: function restore(historyItem, isRedo) {
+ var history = historyItem.get('history'),
+ modelID = history.model.id,
+ view = elementor.history.history.findView(modelID);
- if ( this.collection.isEmpty() ) {
- this.ui.columnInner.removeClass( populatedClass ).addClass( emptyClass );
- } else {
- this.ui.columnInner.removeClass( emptyClass ).addClass( populatedClass );
+ if (!view) {
+ return;
}
- },
- // Events
- onCollectionChanged: function() {
- BaseElementView.prototype.onCollectionChanged.apply( this, arguments );
+ var model = view.getEditModel ? view.getEditModel() : view.model,
+ settings = model.get('settings'),
+ behavior = view.getBehavior('ElementHistory');
- this.changeChildContainerClasses();
- },
+ // Stop listen to restore actions
+ behavior.stopListening(settings, 'change', this.saveHistory);
- onRender: function() {
- var self = this;
+ var restoredValues = {};
+ _.each(history.changed, function (values, key) {
+ if (isRedo) {
+ restoredValues[key] = values['new'];
+ } else {
+ restoredValues[key] = values.old;
+ }
+ });
- BaseElementView.prototype.onRender.apply( self, arguments );
+ // Set at once.
+ settings.setExternalChange(restoredValues);
- self.changeChildContainerClasses();
+ historyItem.set('status', isRedo ? 'not_applied' : 'applied');
- self.changeSizeUI();
+ // Listen again
+ behavior.listenTo(settings, 'change', this.saveHistory);
+ }
+});
- self.$el.html5Droppable( {
- items: ' > .elementor-column-wrap > .elementor-widget-wrap > .elementor-element, >.elementor-column-wrap > .elementor-widget-wrap > .elementor-empty-view > .elementor-first-add',
- axis: [ 'vertical' ],
- groups: [ 'elementor-element' ],
- isDroppingAllowed: self.isDroppingAllowed.bind( self ),
- currentElementClass: 'elementor-html5dnd-current-element',
- placeholderClass: 'elementor-sortable-placeholder elementor-widget-placeholder',
- hasDraggingOnChildClass: 'elementor-dragging-on-child',
- onDropping: function( side, event ) {
- event.stopPropagation();
+/***/ }),
+/* 87 */
+/***/ (function(module, exports, __webpack_require__) {
- var newIndex = jQuery( this ).index();
+"use strict";
- if ( 'bottom' === side ) {
- newIndex++;
- }
- self.addElementFromPanel( { at: newIndex } );
- }
- } );
+module.exports = Marionette.Behavior.extend({
+ listenerAttached: false,
+
+ // use beforeRender that runs after the collection is exist
+ onBeforeRender: function onBeforeRender() {
+ if (this.view.collection && !this.listenerAttached) {
+ this.view.collection.on('update', this.saveCollectionHistory, this).on('reset', this.onDeleteAllContent, this);
+ this.listenerAttached = true;
+ }
},
- onSettingsChanged: function( settings ) {
- BaseElementView.prototype.onSettingsChanged.apply( this, arguments );
+ onDeleteAllContent: function onDeleteAllContent(collection, event) {
+ if (!elementor.history.history.getActive()) {
+ // On Redo the History Listener is not active - stop here for better performance.
+ return;
+ }
- var changedAttributes = settings.changedAttributes();
+ var modelsJSON = [];
- if ( '_column_size' in changedAttributes || '_inline_size' in changedAttributes ) {
- this.changeSizeUI();
- }
- },
+ _.each(event.previousModels, function (model) {
+ modelsJSON.push(model.toJSON({ copyHtmlCache: true }));
+ });
- onEditorInlineSizeInputChange: function( newValue, oldValue ) {
- var errors = [],
- columnSize = this.model.getSetting( '_column_size' );
+ var historyItem = {
+ type: 'remove',
+ elementType: 'section',
+ title: elementor.translate('all_content'),
+ history: {
+ behavior: this,
+ collection: event.previousModels,
+ event: event,
+ models: modelsJSON
+ }
+ };
- // If there's only one column
- if ( 100 === columnSize ) {
- errors.push( 'Could not resize one column' );
+ elementor.history.history.addItem(historyItem);
+ },
- return errors;
+ saveCollectionHistory: function saveCollectionHistory(collection, event) {
+ if (!elementor.history.history.getActive()) {
+ // On Redo the History Listener is not active - stop here for better performance.
+ return;
}
- if ( ! oldValue ) {
- oldValue = columnSize;
- }
+ var historyItem, models, firstModel, type;
- try {
- this._parent.resizeChild( this, +oldValue, +newValue );
- } catch ( e ) {
- if ( e.message === this._parent.errors.columnWidthTooLarge ) {
- errors.push( e.message );
- }
+ if (event.add) {
+ models = event.changes.added;
+ firstModel = models[0];
+ type = 'add';
+ } else {
+ models = event.changes.removed;
+ firstModel = models[0];
+ type = 'remove';
}
- return errors;
- }
-} );
+ var title = elementor.history.history.getModelLabel(firstModel);
-module.exports = ColumnView;
+ // If it's an unknown model - don't save
+ if (!title) {
+ return;
+ }
-},{"elementor-behaviors/duplicate":72,"elementor-behaviors/handle-duplicate":73,"elementor-behaviors/resizable":76,"elementor-behaviors/sortable":77,"elementor-elements/views/base":71,"elementor-elements/views/column-empty":78}],80:[function(require,module,exports){
-var BaseElementView = require( 'elementor-elements/views/base' ),
- AddSectionView = require( 'elementor-views/add-section/inline' ),
- SectionView;
+ var modelsJSON = [];
-SectionView = BaseElementView.extend( {
- template: Marionette.TemplateCache.get( '#tmpl-elementor-element-section-content' ),
+ _.each(models, function (model) {
+ modelsJSON.push(model.toJSON({ copyHtmlCache: true }));
+ });
- addSectionView: null,
+ historyItem = {
+ type: type,
+ elementType: firstModel.get('elType'),
+ elementID: firstModel.get('id'),
+ title: title,
+ history: {
+ behavior: this,
+ collection: collection,
+ event: event,
+ models: modelsJSON
+ }
+ };
- toggleEditTools: false,
+ elementor.history.history.addItem(historyItem);
+ },
- className: function() {
- var classes = BaseElementView.prototype.className.apply( this, arguments ),
- type = this.isInner() ? 'inner' : 'top';
+ add: function add(models, toView, position) {
+ if ('section' === models[0].elType) {
+ _.each(models, function (model) {
+ model.allowEmpty = true;
+ });
+ }
- return classes + ' elementor-section elementor-' + type + '-section';
+ // Fix for case the iframe has been reloaded and the old `elementor-inner` is not exist.
+ if (toView.$el.hasClass('elementor-inner') && toView.$el[0].ownerDocument !== elementor.$previewContents[0]) {
+ toView = elementor.getPreviewView();
+ }
+
+ toView.addChildModel(models, { at: position, silent: 0 });
},
- tagName: function() {
- return this.model.getSetting( 'html_tag' ) || 'section';
+ remove: function remove(models, fromCollection) {
+ fromCollection.remove(models, { silent: 0 });
},
- childViewContainer: '> .elementor-container > .elementor-row',
+ restore: function restore(historyItem, isRedo) {
+ var type = historyItem.get('type'),
+ history = historyItem.get('history'),
+ didAction = false,
+ behavior;
- behaviors: function() {
- var behaviors = BaseElementView.prototype.behaviors.apply( this, arguments );
+ var BaseElementView = __webpack_require__(10);
- _.extend( behaviors, {
- Sortable: {
- behaviorClass: require( 'elementor-behaviors/sortable' ),
- elChildType: 'column'
- },
- HandleDuplicate: {
- behaviorClass: require( 'elementor-behaviors/handle-duplicate' )
- },
- HandleAddMode: {
- behaviorClass: require( 'elementor-behaviors/duplicate' )
+ // Find the new behavior and work with him.
+ if (history.behavior.view instanceof BaseElementView) {
+ var modelID = history.behavior.view.model.get('id'),
+ view = elementor.history.history.findView(modelID);
+ if (view) {
+ behavior = view.getBehavior('CollectionHistory');
}
- } );
-
- return elementor.hooks.applyFilters( 'elements/section/behaviors', behaviors, this );
- },
+ }
- errors: {
- columnWidthTooLarge: 'New column width is too large',
- columnWidthTooSmall: 'New column width is too small'
- },
+ // Container or new Elements - Doesn't have a new behavior
+ if (!behavior) {
+ behavior = history.behavior;
+ }
- events: function() {
- var events = BaseElementView.prototype.events.apply( this, arguments );
+ // Stop listen to undo actions
+ behavior.view.collection.off('update', behavior.saveCollectionHistory);
- events[ 'click @ui.addButton' ] = 'onClickAdd';
+ switch (type) {
+ case 'add':
+ if (isRedo) {
+ this.add(history.models, behavior.view, history.event.index);
+ } else {
+ this.remove(history.models, behavior.view.collection);
+ }
- return events;
- },
+ didAction = true;
+ break;
+ case 'remove':
+ if (isRedo) {
+ this.remove(history.models, behavior.view.collection);
+ } else {
+ this.add(history.models, behavior.view, history.event.index);
+ }
- initialize: function() {
- BaseElementView.prototype.initialize.apply( this, arguments );
+ didAction = true;
+ break;
+ }
- this.listenTo( this.collection, 'add remove reset', this._checkIsFull );
+ // Listen again
+ behavior.view.collection.on('update', behavior.saveCollectionHistory, history.behavior);
- this._checkIsEmpty();
- },
+ return didAction;
+ }
+});
- addEmptyColumn: function() {
- this.addChildModel( {
- id: elementor.helpers.getUniqueID(),
- elType: 'column',
- settings: {},
- elements: []
- } );
- },
+/***/ }),
+/* 88 */
+/***/ (function(module, exports, __webpack_require__) {
- addChildModel: function( model, options ) {
- var isModelInstance = model instanceof Backbone.Model,
- isInner = this.isInner();
+"use strict";
- if ( isModelInstance ) {
- model.set( 'isInner', isInner );
- } else {
- model.isInner = isInner;
- }
- return BaseElementView.prototype.addChildModel.apply( this, arguments );
- },
+var Module = __webpack_require__(2),
+ ContextMenu;
- getSortableOptions: function() {
- var sectionConnectClass = this.isInner() ? '.elementor-inner-section' : '.elementor-top-section';
+ContextMenu = Module.extend({
+ getDefaultSettings: function getDefaultSettings() {
return {
- connectWith: sectionConnectClass + ' > .elementor-container > .elementor-row',
- handle: '> .elementor-element-overlay .elementor-editor-column-settings .elementor-editor-element-trigger',
- items: '> .elementor-column',
- forcePlaceholderSize: true,
- tolerance: 'pointer'
+ actions: {},
+ classes: {
+ list: 'elementor-context-menu-list',
+ group: 'elementor-context-menu-list__group',
+ groupPrefix: 'elementor-context-menu-list__group-',
+ item: 'elementor-context-menu-list__item',
+ itemTypePrefix: 'elementor-context-menu-list__item-',
+ itemTitle: 'elementor-context-menu-list__item__title',
+ itemShortcut: 'elementor-context-menu-list__item__shortcut',
+ iconShortcut: 'elementor-context-menu-list__item__icon',
+ itemDisabled: 'elementor-context-menu-list__item--disabled',
+ divider: 'elementor-context-menu-list__divider',
+ hidden: 'elementor-hidden'
+ }
};
},
- onSettingsChanged: function( settingsModel ) {
- BaseElementView.prototype.onSettingsChanged.apply( this, arguments );
+ buildActionItem: function buildActionItem(action) {
+ var self = this,
+ classes = self.getSettings('classes'),
+ $item = jQuery('<div>', { 'class': classes.item + ' ' + classes.itemTypePrefix + action.name }),
+ $itemTitle = jQuery('<div>', { 'class': classes.itemTitle }).text(action.title),
+ $itemIcon = jQuery('<div>', { 'class': classes.iconShortcut });
+
+ if (action.icon) {
+ $itemIcon.html(jQuery('<i>', { 'class': action.icon }));
+ }
+
+ $item.append($itemIcon, $itemTitle);
+
+ if (action.shortcut) {
+ var $itemShortcut = jQuery('<div>', { 'class': classes.itemShortcut }).html(action.shortcut);
- if ( settingsModel.changed.structure ) {
- this.redefineLayout();
+ $item.append($itemShortcut);
}
- },
- getColumnPercentSize: function( element, size ) {
- return +( size / element.parent().width() * 100 ).toFixed( 3 );
- },
+ if (action.callback) {
+ $item.on('click', function () {
+ self.runAction(action);
+ });
+ }
- getDefaultStructure: function() {
- return this.collection.length + '0';
- },
+ action.$item = $item;
- getStructure: function() {
- return this.model.getSetting( 'structure' );
+ return $item;
},
- setStructure: function( structure ) {
- var parsedStructure = elementor.presetsFactory.getParsedStructure( structure );
+ buildActionsList: function buildActionsList() {
+ var self = this,
+ classes = self.getSettings('classes'),
+ groups = self.getSettings('groups'),
+ $list = jQuery('<div>', { 'class': classes.list });
- if ( +parsedStructure.columnsCount !== this.collection.length ) {
- throw new TypeError( 'The provided structure doesn\'t match the columns count.' );
- }
+ groups.forEach(function (group) {
+ var $group = jQuery('<div>', { 'class': classes.group + ' ' + classes.groupPrefix + group.name });
- this.model.setSetting( 'structure', structure );
- },
+ group.actions.forEach(function (action) {
+ $group.append(self.buildActionItem(action));
+ });
- redefineLayout: function() {
- var preset = elementor.presetsFactory.getPresetByStructure( this.getStructure() );
+ $list.append($group);
- this.collection.each( function( model, index ) {
- model.setSetting( '_column_size', preset.preset[ index ] );
- model.setSetting( '_inline_size', null );
- } );
- },
+ group.$item = $group;
+ });
- resetLayout: function() {
- this.setStructure( this.getDefaultStructure() );
+ return $list;
},
- resetColumnsCustomSize: function() {
- this.collection.each( function( model ) {
- model.setSetting( '_inline_size', null );
- } );
+ toggleGroupVisibility: function toggleGroupVisibility(group, state) {
+ group.$item.toggleClass(this.getSettings('classes.hidden'), !state);
},
- isCollectionFilled: function() {
- var MAX_SIZE = 10,
- columnsCount = this.collection.length;
-
- return ( MAX_SIZE <= columnsCount );
+ toggleActionVisibility: function toggleActionVisibility(action, state) {
+ action.$item.toggleClass(this.getSettings('classes.hidden'), !state);
},
- _checkIsFull: function() {
- this.$el.toggleClass( 'elementor-section-filled', this.isCollectionFilled() );
+ toggleActionUsability: function toggleActionUsability(action, state) {
+ action.$item.toggleClass(this.getSettings('classes.itemDisabled'), !state);
},
- _checkIsEmpty: function() {
- if ( ! this.collection.length && ! this.model.get( 'dontFillEmpty' ) ) {
- this.addEmptyColumn();
+ isActionEnabled: function isActionEnabled(action) {
+ if (!action.callback && !action.groups) {
+ return false;
}
+
+ return action.isEnabled ? action.isEnabled() : true;
},
- getColumnAt: function( index ) {
- var model = this.collection.at( index );
+ runAction: function runAction(action) {
+ if (!this.isActionEnabled(action)) {
+ return;
+ }
+
+ action.callback();
- return model ? this.children.findByModelCid( model.cid ) : null;
+ this.getModal().hide();
},
- getNextColumn: function( columnView ) {
- return this.getColumnAt( this.collection.indexOf( columnView.model ) + 1 );
- },
+ initModal: function initModal() {
+ var modal;
+
+ this.getModal = function () {
+ if (!modal) {
+ modal = elementor.dialogsManager.createWidget('simple', {
+ className: 'elementor-context-menu',
+ message: this.buildActionsList(),
+ iframe: elementor.$preview,
+ effects: {
+ hide: 'hide',
+ show: 'show'
+ },
+ hide: {
+ onOutsideContextMenu: true
+ },
+ position: {
+ my: (elementor.config.is_rtl ? 'right' : 'left') + ' top',
+ collision: 'fit'
+ }
+ });
+ }
- getPreviousColumn: function( columnView ) {
- return this.getColumnAt( this.collection.indexOf( columnView.model ) - 1 );
+ return modal;
+ };
},
- showChildrenPercentsTooltip: function( columnView, nextColumnView ) {
- columnView.ui.percentsTooltip.show();
+ show: function show(event) {
+ var self = this,
+ modal = self.getModal();
- columnView.ui.percentsTooltip.attr( 'data-side', elementor.config.is_rtl ? 'right' : 'left' );
+ modal.setSettings('position', {
+ of: event
+ });
- nextColumnView.ui.percentsTooltip.show();
+ self.getSettings('groups').forEach(function (group) {
+ var isGroupVisible = false !== group.isVisible;
- nextColumnView.ui.percentsTooltip.attr( 'data-side', elementor.config.is_rtl ? 'left' : 'right' );
- },
+ self.toggleGroupVisibility(group, isGroupVisible);
- hideChildrenPercentsTooltip: function( columnView, nextColumnView ) {
- columnView.ui.percentsTooltip.hide();
+ if (isGroupVisible) {
+ group.actions.forEach(function (action) {
+ var isActionVisible = false !== action.isVisible;
- nextColumnView.ui.percentsTooltip.hide();
+ self.toggleActionVisibility(action, isActionVisible);
+
+ if (isActionVisible) {
+ self.toggleActionUsability(action, self.isActionEnabled(action));
+ }
+ });
+ }
+ });
+
+ modal.show();
},
- resizeChild: function( childView, currentSize, newSize ) {
- var nextChildView = this.getNextColumn( childView ) || this.getPreviousColumn( childView );
+ destroy: function destroy() {
+ this.getModal().destroy();
+ },
- if ( ! nextChildView ) {
- throw new ReferenceError( 'There is not any next column' );
- }
+ onInit: function onInit() {
+ this.initModal();
+ }
+});
- var minColumnSize = 2,
- $nextElement = nextChildView.$el,
- nextElementCurrentSize = +nextChildView.model.getSetting( '_inline_size' ) || this.getColumnPercentSize( $nextElement, $nextElement[0].getBoundingClientRect().width ),
- nextElementNewSize = +( currentSize + nextElementCurrentSize - newSize ).toFixed( 3 );
+module.exports = ContextMenu;
- if ( nextElementNewSize < minColumnSize ) {
- throw new RangeError( this.errors.columnWidthTooLarge );
- }
+/***/ }),
+/* 89 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( newSize < minColumnSize ) {
- throw new RangeError( this.errors.columnWidthTooSmall );
- }
+"use strict";
- nextChildView.model.setSetting( '_inline_size', nextElementNewSize );
- return true;
- },
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
- destroyAddSectionView: function() {
- if ( this.addSectionView && ! this.addSectionView.isDestroyed ) {
- this.addSectionView.destroy();
- }
- },
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- onRender: function() {
- BaseElementView.prototype.onRender.apply( this, arguments );
+var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
- this._checkIsFull();
- },
+var _base = __webpack_require__(30);
- onClickAdd: function() {
- if ( this.addSectionView && ! this.addSectionView.isDestroyed ) {
- this.addSectionView.fadeToDeath();
+var _base2 = _interopRequireDefault(_base);
- return;
- }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var myIndex = this.model.collection.indexOf( this.model ),
- addSectionView = new AddSectionView( {
- atIndex: myIndex
- } );
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- addSectionView.render();
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
- this.$el.before( addSectionView.$el );
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- addSectionView.$el.hide();
+var AddSectionView = function (_BaseAddSectionView) {
+ _inherits(AddSectionView, _BaseAddSectionView);
- // Delaying the slide down for slow-render browsers (such as FF)
- setTimeout( function() {
- addSectionView.$el.slideDown();
- } );
+ function AddSectionView() {
+ _classCallCheck(this, AddSectionView);
- this.addSectionView = addSectionView;
- },
+ return _possibleConstructorReturn(this, (AddSectionView.__proto__ || Object.getPrototypeOf(AddSectionView)).apply(this, arguments));
+ }
- onAddChild: function() {
- if ( ! this.isBuffering && ! this.model.get( 'dontFillEmpty' ) ) {
- // Reset the layout just when we have really add/remove element.
- this.resetLayout();
+ _createClass(AddSectionView, [{
+ key: 'className',
+ value: function className() {
+ return _get(AddSectionView.prototype.__proto__ || Object.getPrototypeOf(AddSectionView.prototype), 'className', this).call(this) + ' elementor-add-section-inline';
}
- },
+ }, {
+ key: 'fadeToDeath',
+ value: function fadeToDeath() {
+ var self = this;
- onRemoveChild: function() {
- if ( ! this.isManualRemoving ) {
- return;
+ self.$el.slideUp(function () {
+ self.destroy();
+ });
}
+ }, {
+ key: 'paste',
+ value: function paste() {
+ _get(AddSectionView.prototype.__proto__ || Object.getPrototypeOf(AddSectionView.prototype), 'paste', this).call(this);
- // If it's the last column, please create new one.
- this._checkIsEmpty();
+ this.destroy();
+ }
+ }, {
+ key: 'onCloseButtonClick',
+ value: function onCloseButtonClick() {
+ this.fadeToDeath();
+ }
+ }, {
+ key: 'onPresetSelected',
+ value: function onPresetSelected(event) {
+ _get(AddSectionView.prototype.__proto__ || Object.getPrototypeOf(AddSectionView.prototype), 'onPresetSelected', this).call(this, event);
- this.resetLayout();
- },
+ this.destroy();
+ }
+ }, {
+ key: 'onAddTemplateButtonClick',
+ value: function onAddTemplateButtonClick() {
+ _get(AddSectionView.prototype.__proto__ || Object.getPrototypeOf(AddSectionView.prototype), 'onAddTemplateButtonClick', this).call(this);
- onChildviewRequestResizeStart: function( columnView ) {
- var nextColumnView = this.getNextColumn( columnView );
+ this.destroy();
+ }
+ }, {
+ key: 'onDropping',
+ value: function onDropping() {
+ _get(AddSectionView.prototype.__proto__ || Object.getPrototypeOf(AddSectionView.prototype), 'onDropping', this).call(this);
- if ( ! nextColumnView ) {
- return;
+ this.destroy();
}
+ }]);
- this.showChildrenPercentsTooltip( columnView, nextColumnView );
+ return AddSectionView;
+}(_base2.default);
- var $iframes = columnView.$el.find( 'iframe' ).add( nextColumnView.$el.find( 'iframe' ) );
+exports.default = AddSectionView;
- elementor.helpers.disableElementEvents( $iframes );
- },
+/***/ }),
+/* 90 */
+/***/ (function(module, exports, __webpack_require__) {
- onChildviewRequestResizeStop: function( columnView ) {
- var nextColumnView = this.getNextColumn( columnView );
+"use strict";
- if ( ! nextColumnView ) {
- return;
- }
- this.hideChildrenPercentsTooltip( columnView, nextColumnView );
+var BaseElementView = __webpack_require__(10),
+ ColumnEmptyView = __webpack_require__(91),
+ ColumnView;
- var $iframes = columnView.$el.find( 'iframe' ).add( nextColumnView.$el.find( 'iframe' ) );
+ColumnView = BaseElementView.extend({
+ template: Marionette.TemplateCache.get('#tmpl-elementor-column-content'),
- elementor.helpers.enableElementEvents( $iframes );
- },
+ emptyView: ColumnEmptyView,
- onChildviewRequestResize: function( columnView, ui ) {
- // Get current column details
- var currentSize = +columnView.model.getSetting( '_inline_size' ) || this.getColumnPercentSize( columnView.$el, columnView.$el.data( 'originalWidth' ) );
+ childViewContainer: '> .elementor-column-wrap > .elementor-widget-wrap',
- ui.element.css( {
- width: '',
- left: 'initial' // Fix for RTL resizing
- } );
+ toggleEditTools: true,
- var newSize = this.getColumnPercentSize( ui.element, ui.size.width );
+ behaviors: function behaviors() {
+ var behaviors = BaseElementView.prototype.behaviors.apply(this, arguments);
- try {
- this.resizeChild( columnView, currentSize, newSize );
- } catch ( e ) {
- return;
- }
+ _.extend(behaviors, {
+ Sortable: {
+ behaviorClass: __webpack_require__(19),
+ elChildType: 'widget'
+ },
+ Resizable: {
+ behaviorClass: __webpack_require__(92)
+ }
+ });
- columnView.model.setSetting( '_inline_size', newSize );
+ return elementor.hooks.applyFilters('elements/column/behaviors', behaviors, this);
},
- onDestroy: function() {
- BaseElementView.prototype.onDestroy.apply( this, arguments );
+ className: function className() {
+ var classes = BaseElementView.prototype.className.apply(this, arguments),
+ type = this.isInner() ? 'inner' : 'top';
- this.destroyAddSectionView();
- }
-} );
+ return classes + ' elementor-column elementor-' + type + '-column';
+ },
-module.exports = SectionView;
+ tagName: function tagName() {
+ return this.model.getSetting('html_tag') || 'div';
+ },
-},{"elementor-behaviors/duplicate":72,"elementor-behaviors/handle-duplicate":73,"elementor-behaviors/sortable":77,"elementor-elements/views/base":71,"elementor-views/add-section/inline":123}],81:[function(require,module,exports){
-var BaseElementView = require( 'elementor-elements/views/base' ),
- WidgetView;
+ ui: function ui() {
+ var ui = BaseElementView.prototype.ui.apply(this, arguments);
-WidgetView = BaseElementView.extend( {
- _templateType: null,
+ ui.columnInner = '> .elementor-column-wrap';
- getTemplate: function() {
- var editModel = this.getEditModel();
+ ui.percentsTooltip = '> .elementor-element-overlay .elementor-column-percents-tooltip';
- if ( 'remote' !== this.getTemplateType() ) {
- return Marionette.TemplateCache.get( '#tmpl-elementor-' + editModel.get( 'elType' ) + '-' + editModel.get( 'widgetType' ) + '-content' );
- } else {
- return _.template( '' );
- }
+ return ui;
},
- events: function() {
- var events = BaseElementView.prototype.events.apply( this, arguments );
+ initialize: function initialize() {
+ BaseElementView.prototype.initialize.apply(this, arguments);
- events.click = 'onClickEdit';
-
- return events;
+ this.addControlValidator('_inline_size', this.onEditorInlineSizeInputChange);
},
- behaviors: function() {
- var behaviors = BaseElementView.prototype.behaviors.apply( this, arguments );
+ getContextMenuGroups: function getContextMenuGroups() {
+ var groups = BaseElementView.prototype.getContextMenuGroups.apply(this, arguments),
+ generalGroupIndex = groups.indexOf(_.findWhere(groups, { name: 'general' }));
- _.extend( behaviors, {
- InlineEditing: {
- behaviorClass: require( 'elementor-behaviors/inline-editing' ),
- inlineEditingClass: 'elementor-inline-editing'
- }
- } );
+ groups.splice(generalGroupIndex + 1, 0, {
+ name: 'addNew',
+ actions: [{
+ name: 'addNew',
+ icon: 'eicon-plus',
+ title: elementor.translate('new_column'),
+ callback: this.addNewColumn.bind(this)
+ }]
+ });
- return elementor.hooks.applyFilters( 'elements/widget/behaviors', behaviors, this );
+ return groups;
},
- initialize: function() {
- BaseElementView.prototype.initialize.apply( this, arguments );
+ isDroppingAllowed: function isDroppingAllowed() {
+ var elementView = elementor.channels.panelElements.request('element:selected');
- var editModel = this.getEditModel();
+ if (!elementView) {
+ return false;
+ }
- editModel.on( {
- 'before:remote:render': this.onModelBeforeRemoteRender.bind( this ),
- 'remote:render': this.onModelRemoteRender.bind( this )
- } );
+ var elType = elementView.model.get('elType');
- if ( 'remote' === this.getTemplateType() && ! this.getEditModel().getHtmlCache() ) {
- editModel.renderRemoteServer();
+ if ('section' === elType) {
+ return !this.isInner();
}
- var onRenderMethod = this.onRender;
+ return 'widget' === elType;
+ },
- this.render = _.throttle( this.render, 300 );
+ getPercentsForDisplay: function getPercentsForDisplay() {
+ var inlineSize = +this.model.getSetting('_inline_size') || this.getPercentSize();
- this.onRender = function() {
- _.defer( onRenderMethod.bind( this ) );
- };
+ return inlineSize.toFixed(1) + '%';
},
- render: function() {
- if ( this.model.isRemoteRequestActive() ) {
- this.handleEmptyWidget();
+ changeSizeUI: function changeSizeUI() {
+ var self = this,
+ columnSize = self.model.getSetting('_column_size');
- this.$el.addClass( 'elementor-element' );
+ self.$el.attr('data-col', columnSize);
- return;
+ _.defer(function () {
+ // Wait for the column size to be applied
+ if (self.ui.percentsTooltip) {
+ self.ui.percentsTooltip.text(self.getPercentsForDisplay());
+ }
+ });
+ },
+
+ getPercentSize: function getPercentSize(size) {
+ if (!size) {
+ size = this.el.getBoundingClientRect().width;
}
- Marionette.CompositeView.prototype.render.apply( this, arguments );
+ return +(size / this.$el.parent().width() * 100).toFixed(3);
},
- handleEmptyWidget: function() {
- // TODO: REMOVE THIS !!
- // TEMP CODING !!
- this.$el
- .addClass( 'elementor-widget-empty' )
- .append( '<i class="elementor-widget-empty-icon ' + this.getEditModel().getIcon() + '"></i>' );
+ getSortableOptions: function getSortableOptions() {
+ return {
+ connectWith: '.elementor-widget-wrap',
+ items: '> .elementor-element'
+ };
},
- getTemplateType: function() {
- if ( null === this._templateType ) {
- var editModel = this.getEditModel(),
- $template = jQuery( '#tmpl-elementor-' + editModel.get( 'elType' ) + '-' + editModel.get( 'widgetType' ) + '-content' );
+ changeChildContainerClasses: function changeChildContainerClasses() {
+ var emptyClass = 'elementor-element-empty',
+ populatedClass = 'elementor-element-populated';
- this._templateType = $template.length ? 'js' : 'remote';
+ if (this.collection.isEmpty()) {
+ this.ui.columnInner.removeClass(populatedClass).addClass(emptyClass);
+ } else {
+ this.ui.columnInner.removeClass(emptyClass).addClass(populatedClass);
}
+ },
- return this._templateType;
+ addNewColumn: function addNewColumn() {
+ this.trigger('request:add:new');
},
- getHTMLContent: function( html ) {
- var htmlCache = this.getEditModel().getHtmlCache();
+ // Events
+ onCollectionChanged: function onCollectionChanged() {
+ BaseElementView.prototype.onCollectionChanged.apply(this, arguments);
- return htmlCache || html;
+ this.changeChildContainerClasses();
},
- attachElContent: function( html ) {
- var self = this,
- htmlContent = self.getHTMLContent( html );
+ onRender: function onRender() {
+ var self = this;
- _.defer( function() {
- elementorFrontend.getElements( 'window' ).jQuery( self.el ).html( htmlContent );
+ BaseElementView.prototype.onRender.apply(self, arguments);
- self.bindUIElements(); // Build again the UI elements since the content attached just now
- } );
+ self.changeChildContainerClasses();
- return this;
- },
+ self.changeSizeUI();
- addInlineEditingAttributes: function( key, toolbar ) {
- this.addRenderAttribute( key, {
- 'class': 'elementor-inline-editing',
- 'data-elementor-setting-key': key
- } );
+ self.$el.html5Droppable({
+ items: ' > .elementor-column-wrap > .elementor-widget-wrap > .elementor-element, >.elementor-column-wrap > .elementor-widget-wrap > .elementor-empty-view > .elementor-first-add',
+ axis: ['vertical'],
+ groups: ['elementor-element'],
+ isDroppingAllowed: self.isDroppingAllowed.bind(self),
+ currentElementClass: 'elementor-html5dnd-current-element',
+ placeholderClass: 'elementor-sortable-placeholder elementor-widget-placeholder',
+ hasDraggingOnChildClass: 'elementor-dragging-on-child',
+ onDropping: function onDropping(side, event) {
+ event.stopPropagation();
- if ( toolbar ) {
- this.addRenderAttribute( key, {
- 'data-elementor-inline-editing-toolbar': toolbar
- } );
- }
- },
+ var newIndex = jQuery(this).index();
- getRepeaterSettingKey: function( settingKey, repeaterKey, repeaterItemIndex ) {
- return [ repeaterKey, repeaterItemIndex, settingKey ].join( '.' );
- },
+ if ('bottom' === side) {
+ newIndex++;
+ }
- onModelBeforeRemoteRender: function() {
- this.$el.addClass( 'elementor-loading' );
+ self.addElementFromPanel({ at: newIndex });
+ }
+ });
},
- onBeforeDestroy: function() {
- // Remove old style from the DOM.
- elementor.$previewContents.find( '#elementor-style-' + this.model.cid ).remove();
- },
+ onSettingsChanged: function onSettingsChanged(settings) {
+ BaseElementView.prototype.onSettingsChanged.apply(this, arguments);
- onModelRemoteRender: function() {
- if ( this.isDestroyed ) {
- return;
- }
+ var changedAttributes = settings.changedAttributes();
- this.$el.removeClass( 'elementor-loading' );
- this.render();
+ if ('_column_size' in changedAttributes || '_inline_size' in changedAttributes) {
+ this.changeSizeUI();
+ }
},
- onRender: function() {
- var self = this,
- baseClasses = BaseElementView.prototype.className.apply( self, arguments );
+ onEditorInlineSizeInputChange: function onEditorInlineSizeInputChange(newValue, oldValue) {
+ var errors = [],
+ columnSize = this.model.getSetting('_column_size');
- BaseElementView.prototype.onRender.apply( self, arguments );
+ // If there's only one column
+ if (100 === columnSize) {
+ errors.push('Could not resize one column');
- var editModel = self.getEditModel(),
- skinType = editModel.getSetting( '_skin' ) || 'default';
+ return errors;
+ }
- self.$el
- .attr( 'data-element_type', editModel.get( 'widgetType' ) + '.' + skinType )
- .addClass( baseClasses + ' elementor-widget ' + elementor.getElementData( editModel ).html_wrapper_class )
- .removeClass( 'elementor-widget-empty' )
- .children( '.elementor-widget-empty-icon' )
- .remove();
+ if (!oldValue) {
+ oldValue = columnSize;
+ }
- // TODO: Find better way to detect if all images are loaded
- self.$el.imagesLoaded().always( function() {
- setTimeout( function() {
- if ( 1 > self.$el.height() ) {
- self.handleEmptyWidget();
- }
- }, 200 );
- // Is element empty?
- } );
+ try {
+ this._parent.resizeChild(this, +oldValue, +newValue);
+ } catch (e) {
+ if (e.message === this._parent.errors.columnWidthTooLarge) {
+ errors.push(e.message);
+ }
+ }
+
+ return errors;
+ },
+
+ onAddButtonClick: function onAddButtonClick(event) {
+ event.stopPropagation();
+
+ this.addNewColumn();
}
-} );
+});
-module.exports = WidgetView;
+module.exports = ColumnView;
-},{"elementor-behaviors/inline-editing":74,"elementor-elements/views/base":71}],82:[function(require,module,exports){
-var EditModeItemView;
+/***/ }),
+/* 91 */
+/***/ (function(module, exports, __webpack_require__) {
-EditModeItemView = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-mode-switcher-content',
+"use strict";
- id: 'elementor-mode-switcher-inner',
- ui: {
- previewButton: '#elementor-mode-switcher-preview-input',
- previewLabel: '#elementor-mode-switcher-preview',
- previewLabelA11y: '#elementor-mode-switcher-preview .elementor-screen-only'
- },
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-empty-preview',
+
+ className: 'elementor-empty-view',
events: {
- 'change @ui.previewButton': 'onPreviewButtonChange'
+ 'click': 'onClickAdd'
},
- initialize: function() {
- this.listenTo( elementor.channels.dataEditMode, 'switch', this.onEditModeChanged );
+ behaviors: function behaviors() {
+ return {
+ contextMenu: {
+ behaviorClass: __webpack_require__(11),
+ groups: this.getContextMenuGroups()
+ }
+ };
},
- getCurrentMode: function() {
- return this.ui.previewButton.is( ':checked' ) ? 'preview' : 'edit';
+ getContextMenuGroups: function getContextMenuGroups() {
+ return [{
+ name: 'general',
+ actions: [{
+ name: 'paste',
+ title: elementor.translate('paste'),
+ callback: this.paste.bind(this),
+ isEnabled: this.isPasteEnabled.bind(this)
+ }]
+ }];
},
- setMode: function( mode ) {
- this.ui.previewButton
- .prop( 'checked', 'preview' === mode )
- .trigger( 'change' );
- },
+ paste: function paste() {
+ var self = this,
+ elements = elementor.getStorage('transfer').elements,
+ index = 0;
- toggleMode: function() {
- this.setMode( this.ui.previewButton.prop( 'checked' ) ? 'edit' : 'preview' );
- },
+ elements.forEach(function (item) {
+ self._parent.addChildElement(item, { at: index, clone: true });
- onRender: function() {
- this.onEditModeChanged();
+ index++;
+ });
},
- onPreviewButtonChange: function() {
- elementor.changeEditMode( this.getCurrentMode() );
- },
+ isPasteEnabled: function isPasteEnabled() {
+ var transferData = elementor.getStorage('transfer');
- onEditModeChanged: function() {
- var activeMode = elementor.channels.dataEditMode.request( 'activeMode' ),
- title = elementor.translate( 'preview' === activeMode ? 'back_to_editor' : 'preview' );
+ if (!transferData) {
+ return false;
+ }
- this.ui.previewLabel.attr( 'title', title );
- this.ui.previewLabelA11y.text( title );
- }
-} );
+ if ('section' === transferData.elementsType) {
+ return transferData.elements[0].isInner && !this._parent.isInner();
+ }
-module.exports = EditModeItemView;
+ return 'widget' === transferData.elementsType;
+ },
-},{}],83:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-footer-content',
+ onClickAdd: function onClickAdd() {
+ elementor.getPanelView().setPage('elements');
+ }
+});
- tagName: 'nav',
+/***/ }),
+/* 92 */
+/***/ (function(module, exports, __webpack_require__) {
- id: 'elementor-panel-footer-tools',
+"use strict";
- possibleRotateModes: [ 'portrait', 'landscape' ],
- ui: {
- buttonSave: '#elementor-panel-saver-button-publish, #elementor-panel-saver-menu-save-draft', // TODO: remove. Compatibility for Pro <= 1.9.5
- menuButtons: '.elementor-panel-footer-tool',
- settings: '#elementor-panel-footer-settings',
- deviceModeIcon: '#elementor-panel-footer-responsive > i',
- deviceModeButtons: '#elementor-panel-footer-responsive .elementor-panel-footer-sub-menu-item',
- saveTemplate: '#elementor-panel-saver-menu-save-template',
- history: '#elementor-panel-footer-history'
+var ResizableBehavior;
+
+ResizableBehavior = Marionette.Behavior.extend({
+ defaults: {
+ handles: elementor.config.is_rtl ? 'w' : 'e'
},
events: {
- 'click @ui.settings': 'onClickSettings',
- 'click @ui.deviceModeButtons': 'onClickResponsiveButtons',
- 'click @ui.saveTemplate': 'onClickSaveTemplate',
- 'click @ui.history': 'onClickHistory'
+ resizestart: 'onResizeStart',
+ resizestop: 'onResizeStop',
+ resize: 'onResize'
},
- behaviors: function() {
- var behaviors = {
- saver: {
- behaviorClass: elementor.modules.components.saver.behaviors.FooterSaver
- }
- };
+ initialize: function initialize() {
+ Marionette.Behavior.prototype.initialize.apply(this, arguments);
+
+ this.listenTo(elementor.channels.dataEditMode, 'switch', this.onEditModeSwitched);
+ },
+
+ active: function active() {
+ if (!elementor.userCan('design')) {
+ return;
+ }
+ this.deactivate();
+
+ var options = _.clone(this.options);
- return elementor.hooks.applyFilters( 'panel/footer/behaviors', behaviors, this );
- },
+ delete options.behaviorClass;
- initialize: function() {
- this.listenTo( elementor.channels.deviceMode, 'change', this.onDeviceModeChange );
- },
+ var $childViewContainer = this.getChildViewContainer(),
+ defaultResizableOptions = {},
+ resizableOptions = _.extend(defaultResizableOptions, options);
- getDeviceModeButton: function( deviceMode ) {
- return this.ui.deviceModeButtons.filter( '[data-device-mode="' + deviceMode + '"]' );
+ $childViewContainer.resizable(resizableOptions);
},
- onPanelClick: function( event ) {
- var $target = jQuery( event.target ),
- isClickInsideOfTool = $target.closest( '.elementor-panel-footer-sub-menu-wrapper' ).length;
-
- if ( isClickInsideOfTool ) {
- return;
+ deactivate: function deactivate() {
+ if (this.getChildViewContainer().resizable('instance')) {
+ this.getChildViewContainer().resizable('destroy');
}
+ },
- var $tool = $target.closest( '.elementor-panel-footer-tool' ),
- isClosedTool = $tool.length && ! $tool.hasClass( 'elementor-open' );
-
- this.ui.menuButtons.filter( ':not(.elementor-leave-open)' ).removeClass( 'elementor-open' );
-
- if ( isClosedTool ) {
- $tool.addClass( 'elementor-open' );
+ onEditModeSwitched: function onEditModeSwitched(activeMode) {
+ if ('edit' === activeMode) {
+ this.active();
+ } else {
+ this.deactivate();
}
},
- onClickSettings: function() {
+ onRender: function onRender() {
var self = this;
- if ( 'page_settings' !== elementor.getPanelView().getCurrentPageName() ) {
- elementor.getPanelView().setPage( 'page_settings' );
-
- elementor.getPanelView().getCurrentPageView().once( 'destroy', function() {
- self.ui.settings.removeClass( 'elementor-open' );
- } );
- }
+ _.defer(function () {
+ self.onEditModeSwitched(elementor.channels.dataEditMode.request('activeMode'));
+ });
},
- onDeviceModeChange: function() {
- var previousDeviceMode = elementor.channels.deviceMode.request( 'previousMode' ),
- currentDeviceMode = elementor.channels.deviceMode.request( 'currentMode' );
+ onDestroy: function onDestroy() {
+ this.deactivate();
+ },
- this.getDeviceModeButton( previousDeviceMode ).removeClass( 'active' );
+ onResizeStart: function onResizeStart(event) {
+ event.stopPropagation();
- this.getDeviceModeButton( currentDeviceMode ).addClass( 'active' );
+ this.view.$el.data('originalWidth', this.view.el.getBoundingClientRect().width);
- // Change the footer icon
- this.ui.deviceModeIcon.removeClass( 'eicon-device-' + previousDeviceMode ).addClass( 'eicon-device-' + currentDeviceMode );
+ this.view.triggerMethod('request:resize:start', event);
},
- onClickResponsiveButtons: function( event ) {
- var $clickedButton = this.$( event.currentTarget ),
- newDeviceMode = $clickedButton.data( 'device-mode' );
+ onResizeStop: function onResizeStop(event) {
+ event.stopPropagation();
- elementor.changeDeviceMode( newDeviceMode );
+ this.view.triggerMethod('request:resize:stop');
},
- onClickSaveTemplate: function() {
- elementor.templates.startModal( {
- onReady: function() {
- elementor.templates.getLayout().showSaveTemplateView();
- }
- } );
- },
+ onResize: function onResize(event, ui) {
+ event.stopPropagation();
- onClickHistory: function() {
- if ( 'historyPage' !== elementor.getPanelView().getCurrentPageName() ) {
- elementor.getPanelView().setPage( 'historyPage' );
- }
+ this.view.triggerMethod('request:resize', ui, event);
},
- onRender: function() {
- var self = this;
-
- _.defer( function() {
- elementor.getPanelView().$el.on( 'click', self.onPanelClick.bind( self ) );
- } );
+ getChildViewContainer: function getChildViewContainer() {
+ return this.$el;
}
-} );
+});
-},{}],84:[function(require,module,exports){
-var PanelHeaderItemView;
+module.exports = ResizableBehavior;
-PanelHeaderItemView = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-header',
+/***/ }),
+/* 93 */
+/***/ (function(module, exports, __webpack_require__) {
- id: 'elementor-panel-header',
+"use strict";
- ui: {
- menuButton: '#elementor-panel-header-menu-button',
- menuIcon: '#elementor-panel-header-menu-button i',
- title: '#elementor-panel-header-title',
- addButton: '#elementor-panel-header-add-button'
- },
- events: {
- 'click @ui.addButton': 'onClickAdd',
- 'click @ui.menuButton': 'onClickMenu'
- },
+var RevisionsCollection = __webpack_require__(94),
+ RevisionsManager;
- setTitle: function( title ) {
- this.ui.title.html( title );
- },
+RevisionsManager = function RevisionsManager() {
+ var self = this,
+ revisions;
- onClickAdd: function() {
- elementor.getPanelView().setPage( 'elements' );
- },
+ this.getItems = function () {
+ return revisions;
+ };
- onClickMenu: function() {
- var panel = elementor.getPanelView(),
- currentPanelPageName = panel.getCurrentPageName(),
- nextPage = 'menu' === currentPanelPageName ? 'elements' : 'menu';
+ var onEditorSaved = function onEditorSaved(data) {
+ if (data.latest_revisions) {
+ self.addRevisions(data.latest_revisions);
+ }
- if ( 'menu' === nextPage ) {
- var arrowClass = 'eicon-arrow-' + ( elementor.config.is_rtl ? 'right' : 'left' );
+ if (data.revisions_ids) {
+ var revisionsToKeep = revisions.filter(function (revision) {
+ return -1 !== data.revisions_ids.indexOf(revision.get('id'));
+ });
- this.ui.menuIcon.removeClass( 'eicon-menu-bar' ).addClass( arrowClass );
+ revisions.reset(revisionsToKeep);
}
+ };
- panel.setPage( nextPage );
- }
-} );
-
-module.exports = PanelHeaderItemView;
+ var attachEvents = function attachEvents() {
+ elementor.channels.editor.on('saved', onEditorSaved);
+ };
-},{}],85:[function(require,module,exports){
-var ControlsStack = require( 'elementor-views/controls-stack' ),
- EditorView;
+ var addHotKeys = function addHotKeys() {
+ var UP_ARROW_KEY = 38,
+ DOWN_ARROW_KEY = 40;
-EditorView = ControlsStack.extend( {
- template: Marionette.TemplateCache.get( '#tmpl-editor-content' ),
+ var navigationHandler = {
+ isWorthHandling: function isWorthHandling() {
+ var panel = elementor.getPanelView();
- id: 'elementor-panel-page-editor',
+ if ('historyPage' !== panel.getCurrentPageName()) {
+ return false;
+ }
- childViewContainer: '#elementor-controls',
+ var revisionsTab = panel.getCurrentPageView().getCurrentTab();
- childViewOptions: function() {
- return {
- elementSettingsModel: this.model.get( 'settings' ),
- elementEditSettings: this.model.get( 'editSettings' )
+ return revisionsTab.currentPreviewId && revisionsTab.currentPreviewItem && revisionsTab.children.length > 1;
+ },
+ handle: function handle(event) {
+ elementor.getPanelView().getCurrentPageView().getCurrentTab().navigate(UP_ARROW_KEY === event.which);
+ }
};
- },
-
- openActiveSection: function() {
- ControlsStack.prototype.openActiveSection.apply( this, arguments );
- elementor.channels.editor.trigger( 'section:activated', this.activeSection, this );
- },
+ elementor.hotKeys.addHotKeyHandler(UP_ARROW_KEY, 'revisionNavigation', navigationHandler);
- isVisibleSectionControl: function( sectionControlModel ) {
- return ControlsStack.prototype.isVisibleSectionControl.apply( this, arguments ) && elementor.helpers.isActiveControl( sectionControlModel, this.model.get( 'settings' ).attributes );
- },
+ elementor.hotKeys.addHotKeyHandler(DOWN_ARROW_KEY, 'revisionNavigation', navigationHandler);
+ };
- scrollToEditedElement: function() {
- elementor.helpers.scrollToView( this.getOption( 'editedElementView' ) );
- },
+ this.setEditorData = function (data) {
+ var collection = elementor.getRegion('sections').currentView.collection;
- getControlView: function( name ) {
- return this.children.findByModelCid( this.getControlModel( name ).cid );
- },
+ // Don't track in history.
+ elementor.history.history.setActive(false);
+ collection.reset(data);
+ elementor.history.history.setActive(true);
+ };
- getControlModel: function( name ) {
- return this.collection.findWhere( { name: name } );
- },
+ this.getRevisionDataAsync = function (id, options) {
+ _.extend(options, {
+ data: {
+ id: id
+ }
+ });
- onDestroy: function() {
- var editedElementView = this.getOption( 'editedElementView' );
+ return elementor.ajax.send('get_revision_data', options);
+ };
- if ( editedElementView ) {
- editedElementView.$el.removeClass( 'elementor-element-editable' );
- }
+ this.addRevisions = function (items) {
+ items.forEach(function (item) {
+ var existedModel = revisions.findWhere({
+ id: item.id
+ });
- this.model.trigger( 'editor:close' );
+ if (existedModel) {
+ revisions.remove(existedModel);
+ }
- this.triggerMethod( 'editor:destroy' );
- },
+ revisions.add(item);
+ });
+ };
- onRender: function() {
- var editedElementView = this.getOption( 'editedElementView' );
+ this.deleteRevision = function (revisionModel, options) {
+ var params = {
+ data: {
+ id: revisionModel.get('id')
+ },
+ success: function success() {
+ if (options.success) {
+ options.success();
+ }
- if ( editedElementView ) {
- editedElementView.$el.addClass( 'elementor-element-editable' );
- }
- },
+ revisionModel.destroy();
- onDeviceModeChange: function() {
- ControlsStack.prototype.onDeviceModeChange.apply( this, arguments );
+ if (!revisions.length) {
+ var panel = elementor.getPanelView();
+ if ('historyPage' === panel.getCurrentPageName()) {
+ panel.getCurrentPageView().activateTab('revisions');
+ }
+ }
+ }
+ };
- this.scrollToEditedElement();
- },
+ if (options.error) {
+ params.error = options.error;
+ }
- onChildviewSettingsChange: function( childView ) {
- var editedElementView = this.getOption( 'editedElementView' ),
- editedElementType = editedElementView.model.get( 'elType' );
+ elementor.ajax.send('delete_revision', params);
+ };
- if ( 'widget' === editedElementType ) {
- editedElementType = editedElementView.model.get( 'widgetType' );
- }
+ this.init = function () {
+ revisions = new RevisionsCollection(elementor.config.revisions);
- elementor.channels.editor
- .trigger( 'change', childView, editedElementView )
- .trigger( 'change:' + editedElementType, childView, editedElementView )
- .trigger( 'change:' + editedElementType + ':' + childView.model.get( 'name' ), childView, editedElementView );
- }
-} );
+ attachEvents();
-module.exports = EditorView;
+ addHotKeys();
+ };
+};
-},{"elementor-views/controls-stack":126}],86:[function(require,module,exports){
-var PanelElementsCategory = require( '../models/element' ),
- PanelElementsCategoriesCollection;
+module.exports = new RevisionsManager();
-PanelElementsCategoriesCollection = Backbone.Collection.extend( {
- model: PanelElementsCategory
-} );
+/***/ }),
+/* 94 */
+/***/ (function(module, exports, __webpack_require__) {
-module.exports = PanelElementsCategoriesCollection;
+"use strict";
-},{"../models/element":89}],87:[function(require,module,exports){
-var PanelElementsElementModel = require( '../models/element' ),
- PanelElementsElementsCollection;
-PanelElementsElementsCollection = Backbone.Collection.extend( {
- model: PanelElementsElementModel/*,
- comparator: 'title'*/
-} );
+var RevisionModel = __webpack_require__(95);
-module.exports = PanelElementsElementsCollection;
+module.exports = Backbone.Collection.extend({
+ model: RevisionModel,
+ comparator: function comparator(model) {
+ return -model.get('timestamp');
+ }
+});
-},{"../models/element":89}],88:[function(require,module,exports){
-var PanelElementsCategoriesCollection = require( './collections/categories' ),
- PanelElementsElementsCollection = require( './collections/elements' ),
- PanelElementsCategoriesView = require( './views/categories' ),
- PanelElementsElementsView = elementor.modules.layouts.panel.pages.elements.views.Elements,
- PanelElementsSearchView = require( './views/search' ),
- PanelElementsGlobalView = require( './views/global' ),
- PanelElementsLayoutView;
+/***/ }),
+/* 95 */
+/***/ (function(module, exports, __webpack_require__) {
-PanelElementsLayoutView = Marionette.LayoutView.extend( {
- template: '#tmpl-elementor-panel-elements',
+"use strict";
- regions: {
- elements: '#elementor-panel-elements-wrapper',
- search: '#elementor-panel-elements-search-area'
- },
- ui: {
- tabs: '.elementor-panel-navigation-tab'
- },
+var RevisionModel;
- events: {
- 'click @ui.tabs': 'onTabClick'
- },
+RevisionModel = Backbone.Model.extend();
- regionViews: {},
+RevisionModel.prototype.sync = function () {
+ return null;
+};
- elementsCollection: null,
+module.exports = RevisionModel;
- categoriesCollection: null,
+/***/ }),
+/* 96 */
+/***/ (function(module, exports, __webpack_require__) {
- initialize: function() {
- this.listenTo( elementor.channels.panelElements, 'element:selected', this.destroy );
+"use strict";
- this.initElementsCollection();
- this.initCategoriesCollection();
+module.exports = Marionette.Behavior.extend({
+ previewWindow: null,
- this.initRegionViews();
+ ui: function ui() {
+ return {
+ buttonPreview: '#elementor-panel-saver-button-preview',
+ buttonPublish: '#elementor-panel-saver-button-publish',
+ buttonSaveOptions: '#elementor-panel-saver-button-save-options',
+ buttonPublishLabel: '#elementor-panel-saver-button-publish-label',
+ menuSaveDraft: '#elementor-panel-saver-menu-save-draft',
+ lastEditedWrapper: '.elementor-last-edited-wrapper'
+ };
},
- initRegionViews: function() {
- var regionViews = {
- elements: {
- region: this.elements,
- view: PanelElementsElementsView,
- options: { collection: this.elementsCollection }
- },
- categories: {
- region: this.elements,
- view: PanelElementsCategoriesView,
- options: { collection: this.categoriesCollection }
- },
- search: {
- region: this.search,
- view: PanelElementsSearchView
- },
- global: {
- region: this.elements,
- view: PanelElementsGlobalView
- }
+ events: function events() {
+ return {
+ 'click @ui.buttonPreview': 'onClickButtonPreview',
+ 'click @ui.buttonPublish': 'onClickButtonPublish',
+ 'click @ui.menuSaveDraft': 'onClickMenuSaveDraft'
};
-
- this.regionViews = elementor.hooks.applyFilters( 'panel/elements/regionViews', regionViews );
},
- initElementsCollection: function() {
- var elementsCollection = new PanelElementsElementsCollection(),
- sectionConfig = elementor.config.elements.section;
-
- elementsCollection.add( {
- title: elementor.translate( 'inner_section' ),
- elType: 'section',
- categories: [ 'basic' ],
- icon: sectionConfig.icon
- } );
+ initialize: function initialize() {
+ elementor.saver.on('before:save', this.onBeforeSave.bind(this)).on('after:save', this.onAfterSave.bind(this)).on('after:saveError', this.onAfterSaveError.bind(this)).on('page:status:change', this.onPageStatusChange);
- // TODO: Change the array from server syntax, and no need each loop for initialize
- _.each( elementor.config.widgets, function( element ) {
- elementsCollection.add( {
- title: element.title,
- elType: element.elType,
- categories: element.categories,
- keywords: element.keywords,
- icon: element.icon,
- widgetType: element.widget_type,
- custom: element.custom
- } );
- } );
+ elementor.settings.page.model.on('change', this.onPageSettingsChange.bind(this));
- this.elementsCollection = elementsCollection;
+ elementor.channels.editor.on('status:change', this.activateSaveButtons.bind(this));
},
- initCategoriesCollection: function() {
- var categories = {};
+ activateSaveButtons: function activateSaveButtons(hasChanges) {
+ hasChanges = hasChanges || 'draft' === elementor.settings.page.model.get('post_status');
- this.elementsCollection.each( function( element ) {
- _.each( element.get( 'categories' ), function( category ) {
- if ( ! categories[ category ] ) {
- categories[ category ] = [];
- }
+ this.ui.buttonPublish.add(this.ui.menuSaveDraft).toggleClass('elementor-saver-disabled', !hasChanges);
+ this.ui.buttonSaveOptions.toggleClass('elementor-saver-disabled', !hasChanges);
+ },
- categories[ category ].push( element );
- } );
- } );
+ onRender: function onRender() {
+ this.setMenuItems(elementor.settings.page.model.get('post_status'));
+ this.addTooltip();
+ },
- var categoriesCollection = new PanelElementsCategoriesCollection();
+ onPageSettingsChange: function onPageSettingsChange(settings) {
+ var changed = settings.changed;
- _.each( elementor.config.elements_categories, function( categoryConfig, categoryName ) {
- if ( ! categories[ categoryName ] ) {
- return;
- }
+ if (!_.isUndefined(changed.post_status)) {
+ this.setMenuItems(changed.post_status);
- categoriesCollection.add( {
- name: categoryName,
- title: categoryConfig.title,
- icon: categoryConfig.icon,
- items: categories[ categoryName ]
- } );
- } );
+ this.refreshWpPreview();
- this.categoriesCollection = categoriesCollection;
+ // Refresh page-settings post-status value.
+ if ('page_settings' === elementor.getPanelView().getCurrentPageName()) {
+ elementor.getPanelView().getCurrentPageView().render();
+ }
+ }
},
- activateTab: function( tabName ) {
- this.ui.tabs
- .removeClass( 'elementor-active' )
- .filter( '[data-view="' + tabName + '"]' )
- .addClass( 'elementor-active' );
-
- this.showView( tabName );
+ onPageStatusChange: function onPageStatusChange(newStatus) {
+ if ('publish' === newStatus) {
+ elementor.notifications.showToast({
+ message: elementor.config.document.panel.messages.publish_notification,
+ buttons: [{
+ name: 'view_page',
+ text: elementor.translate('have_a_look'),
+ callback: function callback() {
+ open(elementor.config.document.urls.permalink);
+ }
+ }]
+ });
+ }
},
- showView: function( viewName ) {
- var viewDetails = this.regionViews[ viewName ],
- options = viewDetails.options || {};
-
- viewDetails.region.show( new viewDetails.view( options ) );
+ onBeforeSave: function onBeforeSave(options) {
+ NProgress.start();
+ if ('autosave' === options.status) {
+ this.ui.lastEditedWrapper.addClass('elementor-state-active');
+ } else {
+ this.ui.buttonPublish.addClass('elementor-button-state');
+ }
},
- clearSearchInput: function() {
- this.getChildView( 'search' ).clearInput();
+ onAfterSave: function onAfterSave(data) {
+ NProgress.done();
+ this.ui.buttonPublish.removeClass('elementor-button-state');
+ this.ui.lastEditedWrapper.removeClass('elementor-state-active');
+ this.refreshWpPreview();
+ this.setLastEdited(data);
},
- changeFilter: function( filterValue ) {
- elementor.channels.panelElements
- .reply( 'filter:value', filterValue )
- .trigger( 'filter:change' );
+ setLastEdited: function setLastEdited(data) {
+ this.ui.lastEditedWrapper.removeClass('elementor-button-state').find('.elementor-last-edited').html(data.config.last_edited);
},
- clearFilters: function() {
- this.changeFilter( null );
- this.clearSearchInput();
+ onAfterSaveError: function onAfterSaveError() {
+ NProgress.done();
+ this.ui.buttonPublish.removeClass('elementor-button-state');
},
- onChildviewChildrenRender: function() {
- this.updateElementsScrollbar();
+ onClickButtonPreview: function onClickButtonPreview() {
+ // Open immediately in order to avoid popup blockers.
+ this.previewWindow = open(elementor.config.document.urls.wp_preview, 'wp-preview-' + elementor.config.document.id);
+
+ if (elementor.saver.isEditorChanged()) {
+ // Force save even if it's saving now.
+ if (elementor.saver.isSaving) {
+ elementor.saver.isSaving = false;
+ }
+
+ elementor.saver.doAutoSave();
+ }
},
- onChildviewSearchChangeInput: function( child ) {
- this.changeFilter( child.ui.input.val(), 'search' );
+ onClickButtonPublish: function onClickButtonPublish() {
+ var postStatus = elementor.settings.page.model.get('post_status');
+
+ if (this.ui.buttonPublish.hasClass('elementor-saver-disabled')) {
+ return;
+ }
+
+ switch (postStatus) {
+ case 'publish':
+ case 'private':
+ elementor.saver.update();
+ break;
+ case 'draft':
+ if (elementor.config.current_user_can_publish) {
+ elementor.saver.publish();
+ } else {
+ elementor.saver.savePending();
+ }
+ break;
+ case 'pending': // User cannot change post status
+ case undefined:
+ // TODO: as a contributor it's undefined instead of 'pending'.
+ if (elementor.config.current_user_can_publish) {
+ elementor.saver.publish();
+ } else {
+ elementor.saver.update();
+ }
+ break;
+ }
},
- onDestroy: function() {
- elementor.channels.panelElements.reply( 'filter:value', null );
+ onClickMenuSaveDraft: function onClickMenuSaveDraft() {
+ elementor.saver.saveDraft();
},
- onShow: function() {
- this.showView( 'categories' );
+ setMenuItems: function setMenuItems(postStatus) {
+ var publishLabel = 'publish';
+
+ switch (postStatus) {
+ case 'publish':
+ case 'private':
+ publishLabel = 'update';
+
+ if (elementor.config.current_revision_id !== elementor.config.document.id) {
+ this.activateSaveButtons(true);
+ }
+
+ break;
+ case 'draft':
+ if (!elementor.config.current_user_can_publish) {
+ publishLabel = 'submit';
+ }
+
+ this.activateSaveButtons(true);
+ break;
+ case 'pending': // User cannot change post status
+ case undefined:
+ // TODO: as a contributor it's undefined instead of 'pending'.
+ if (!elementor.config.current_user_can_publish) {
+ publishLabel = 'update';
+ }
+ break;
+ }
- this.showView( 'search' );
+ this.ui.buttonPublishLabel.html(elementor.translate(publishLabel));
},
- onTabClick: function( event ) {
- this.activateTab( event.currentTarget.dataset.view );
+ addTooltip: function addTooltip() {
+ // Create tooltip on controls
+ this.$el.find('.tooltip-target').tipsy({
+ // `n` for down, `s` for up
+ gravity: 's',
+ title: function title() {
+ return this.getAttribute('data-tooltip');
+ }
+ });
},
- updateElementsScrollbar: function() {
- elementor.channels.data.trigger( 'scrollbar:update' );
+ refreshWpPreview: function refreshWpPreview() {
+ if (this.previewWindow) {
+ // Refresh URL form updated config.
+ try {
+ this.previewWindow.location.href = elementor.config.document.urls.wp_preview;
+ } catch (e) {
+ // If the this.previewWindow is closed or it's domain was changed.
+ // Do nothing.
+ }
+ }
}
-} );
+});
-module.exports = PanelElementsLayoutView;
-
-},{"./collections/categories":86,"./collections/elements":87,"./views/categories":90,"./views/global":94,"./views/search":95}],89:[function(require,module,exports){
-var PanelElementsElementModel;
+/***/ }),
+/* 97 */
+/***/ (function(module, exports, __webpack_require__) {
-PanelElementsElementModel = Backbone.Model.extend( {
- defaults: {
- title: '',
- categories: [],
- keywords: [],
- icon: '',
- elType: 'widget',
- widgetType: ''
- }
-} );
+"use strict";
-module.exports = PanelElementsElementModel;
-},{}],90:[function(require,module,exports){
-var PanelElementsCategoryView = require( './category' ),
- PanelElementsCategoriesView;
+var TagPanelView = __webpack_require__(98);
-PanelElementsCategoriesView = Marionette.CompositeView.extend( {
- template: '#tmpl-elementor-panel-categories',
+module.exports = Marionette.Behavior.extend({
- childView: PanelElementsCategoryView,
+ tagView: null,
- childViewContainer: '#elementor-panel-categories',
+ listenerAttached: false,
- id: 'elementor-panel-elements-categories',
+ ui: {
+ tagArea: '.elementor-control-tag-area',
+ dynamicSwitcher: '.elementor-control-dynamic-switcher'
+ },
- initialize: function() {
- this.listenTo( elementor.channels.panelElements, 'filter:change', this.onPanelElementsFilterChange );
+ events: {
+ 'click @ui.dynamicSwitcher': 'onDynamicSwitcherClick'
},
- onPanelElementsFilterChange: function() {
- if ( elementor.channels.panelElements.request( 'filter:value' ) ) {
- elementor.getPanelView().getCurrentPageView().showView( 'elements' );
+ initialize: function initialize() {
+ if (!this.listenerAttached) {
+ this.listenTo(this.view.options.elementSettingsModel, 'change:external:__dynamic__', this.onAfterExternalChange);
+ this.listenerAttached = true;
}
- }
-} );
-
-module.exports = PanelElementsCategoriesView;
+ },
-},{"./category":91}],91:[function(require,module,exports){
-var PanelElementsElementsCollection = require( '../collections/elements' ),
- PanelElementsCategoryView;
+ renderTools: function renderTools() {
+ if (this.getOption('dynamicSettings')['default']) {
+ return;
+ }
-PanelElementsCategoryView = Marionette.CompositeView.extend( {
- template: '#tmpl-elementor-panel-elements-category',
+ var $dynamicSwitcher = jQuery(Marionette.Renderer.render('#tmpl-elementor-control-dynamic-switcher'));
- className: 'elementor-panel-category',
+ this.ui.controlTitle[this.view.model.get('label_block') ? 'after' : 'before']($dynamicSwitcher);
- id: function() {
- return 'elementor-panel-category-' + this.model.get( 'name' );
+ this.ui.dynamicSwitcher = this.$el.find(this.ui.dynamicSwitcher.selector);
},
- childView: require( 'elementor-panel/pages/elements/views/element' ),
-
- childViewContainer: '.panel-elements-category-items',
-
- initialize: function() {
- this.collection = new PanelElementsElementsCollection( this.model.get( 'items' ) );
- }
-} );
-
-module.exports = PanelElementsCategoryView;
+ toggleDynamicClass: function toggleDynamicClass() {
+ this.$el.toggleClass('elementor-control-dynamic-value', this.isDynamicMode());
+ },
-},{"../collections/elements":87,"elementor-panel/pages/elements/views/element":92}],92:[function(require,module,exports){
-var PanelElementsElementView;
+ isDynamicMode: function isDynamicMode() {
+ var dynamicSettings = this.view.elementSettingsModel.get('__dynamic__');
-PanelElementsElementView = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-element-library-element',
+ return !!(dynamicSettings && dynamicSettings[this.view.model.get('name')]);
+ },
- className: 'elementor-element-wrapper',
+ createTagsList: function createTagsList() {
+ var tags = _.groupBy(this.getOption('tags'), 'group'),
+ groups = elementor.dynamicTags.getConfig('groups'),
+ $tagsList = this.ui.tagsList = jQuery('<div>', { 'class': 'elementor-tags-list' }),
+ $tagsListInner = jQuery('<div>', { 'class': 'elementor-tags-list__inner' });
- onRender: function() {
- var self = this;
- if ( ! elementor.userCan( 'design' ) ) {
- return;
- }
+ $tagsList.append($tagsListInner);
- this.$el.html5Draggable( {
+ jQuery.each(groups, function (groupName) {
+ var groupTags = tags[groupName];
- onDragStart: function() {
- elementor.channels.panelElements
- .reply( 'element:selected', self )
- .trigger( 'element:drag:start' );
- },
+ if (!groupTags) {
+ return;
+ }
- onDragEnd: function() {
- elementor.channels.panelElements.trigger( 'element:drag:end' );
- },
+ var group = this,
+ $groupTitle = jQuery('<div>', { 'class': 'elementor-tags-list__group-title' }).text(group.title);
- groups: [ 'elementor-element' ]
- } );
- }
-} );
+ $tagsListInner.append($groupTitle);
-module.exports = PanelElementsElementView;
+ groupTags.forEach(function (tag) {
+ var $tag = jQuery('<div>', { 'class': 'elementor-tags-list__item' });
-},{}],93:[function(require,module,exports){
-var PanelElementsElementsView;
+ $tag.text(tag.title).attr('data-tag-name', tag.name);
-PanelElementsElementsView = Marionette.CollectionView.extend( {
- childView: require( 'elementor-panel/pages/elements/views/element' ),
+ $tagsListInner.append($tag);
+ });
+ });
- id: 'elementor-panel-elements',
+ $tagsListInner.on('click', '.elementor-tags-list__item', this.onTagsListItemClick.bind(this));
- initialize: function() {
- this.listenTo( elementor.channels.panelElements, 'filter:change', this.onFilterChanged );
+ elementor.$body.append($tagsList);
},
- filter: function( childModel ) {
- var filterValue = elementor.channels.panelElements.request( 'filter:value' );
-
- if ( ! filterValue ) {
- return true;
- }
-
- if ( -1 !== childModel.get( 'title' ).toLowerCase().indexOf( filterValue.toLowerCase() ) ) {
- return true;
+ getTagsList: function getTagsList() {
+ if (!this.ui.tagsList) {
+ this.createTagsList();
}
- return _.any( childModel.get( 'keywords' ), function( keyword ) {
- return ( -1 !== keyword.toLowerCase().indexOf( filterValue.toLowerCase() ) );
- } );
+ return this.ui.tagsList;
},
- onFilterChanged: function() {
- var filterValue = elementor.channels.panelElements.request( 'filter:value' );
+ toggleTagsList: function toggleTagsList() {
+ var $tagsList = this.getTagsList();
- if ( ! filterValue ) {
- this.onFilterEmpty();
- }
+ if ($tagsList.is(':visible')) {
+ $tagsList.hide();
- this._renderChildren();
+ return;
+ }
- this.triggerMethod( 'children:render' );
+ $tagsList.show().position({
+ my: 'right top',
+ at: 'right bottom+5',
+ of: this.ui.dynamicSwitcher
+ });
},
- onFilterEmpty: function() {
- elementor.getPanelView().getCurrentPageView().showView( 'categories' );
- }
-} );
+ setTagView: function setTagView(id, name, settings) {
+ if (this.tagView) {
+ this.tagView.destroy();
+ }
-module.exports = PanelElementsElementsView;
+ var tagView = this.tagView = new TagPanelView({
+ id: id,
+ name: name,
+ settings: settings,
+ dynamicSettings: this.getOption('dynamicSettings')
+ });
-},{"elementor-panel/pages/elements/views/element":92}],94:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-global',
+ tagView.render();
- id: 'elementor-panel-global',
+ this.ui.tagArea.after(tagView.el);
- initialize: function() {
- elementor.getPanelView().getCurrentPageView().search.reset();
+ this.listenTo(tagView.model, 'change', this.onTagViewModelChange.bind(this)).listenTo(tagView, 'remove', this.onTagViewRemove.bind(this));
},
- onDestroy: function() {
- var panel = elementor.getPanelView();
-
- if ( 'elements' === panel.getCurrentPageName() ) {
- setTimeout( function() {
- var elementsPageView = panel.getCurrentPageView();
-
- if ( ! elementsPageView.search.currentView ) {
- elementsPageView.showView( 'search' );
- }
- } );
- }
- }
-} );
-
-},{}],95:[function(require,module,exports){
-var PanelElementsSearchView;
+ setDefaultTagView: function setDefaultTagView() {
+ var tagData = elementor.dynamicTags.tagTextToTagData(this.getDynamicValue());
-PanelElementsSearchView = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-element-search',
+ this.setTagView(tagData.id, tagData.name, tagData.settings);
+ },
- id: 'elementor-panel-elements-search-wrapper',
+ tagViewToTagText: function tagViewToTagText() {
+ var tagView = this.tagView;
- ui: {
- input: 'input'
+ return elementor.dynamicTags.tagDataToTagText(tagView.getOption('id'), tagView.getOption('name'), tagView.model);
},
- events: {
- 'input @ui.input': 'onInputChanged'
+ getDynamicValue: function getDynamicValue() {
+ return this.view.elementSettingsModel.get('__dynamic__')[this.view.model.get('name')];
},
- clearInput: function() {
- this.ui.input.val( '' );
+ getDynamicControlSettings: function getDynamicControlSettings() {
+ return {
+ control: {
+ name: '__dynamic__',
+ label: this.view.model.get('label')
+ }
+ };
},
- onInputChanged: function( event ) {
- var ESC_KEY = 27;
-
- if ( ESC_KEY === event.keyCode ) {
- this.clearInput();
- }
+ setDynamicValue: function setDynamicValue(value) {
+ var settingKey = this.view.model.get('name'),
+ dynamicSettings = this.view.elementSettingsModel.get('__dynamic__') || {};
- this.triggerMethod( 'search:change:input' );
- },
+ dynamicSettings = elementor.helpers.cloneObject(dynamicSettings);
- onRender: function() {
- var input = this.ui.input;
+ dynamicSettings[settingKey] = value;
- setTimeout( function() {
- input.focus();
- } );
- }
-} );
+ this.view.elementSettingsModel.set('__dynamic__', dynamicSettings, this.getDynamicControlSettings(settingKey));
-module.exports = PanelElementsSearchView;
+ this.toggleDynamicClass();
+ },
-},{}],96:[function(require,module,exports){
-var PanelMenuGroupView = require( 'elementor-panel/pages/menu/views/group' ),
- PanelMenuPageView;
+ destroyTagView: function destroyTagView() {
+ if (this.tagView) {
+ this.tagView.destroy();
-PanelMenuPageView = Marionette.CompositeView.extend( {
- id: 'elementor-panel-page-menu',
+ this.tagView = null;
+ }
+ },
- template: '#tmpl-elementor-panel-menu',
+ onRender: function onRender() {
+ this.$el.addClass('elementor-control-dynamic');
- childView: PanelMenuGroupView,
+ this.renderTools();
- childViewContainer: '#elementor-panel-page-menu-content',
+ this.toggleDynamicClass();
- initialize: function() {
- this.collection = PanelMenuPageView.getGroups();
+ if (this.isDynamicMode()) {
+ this.setDefaultTagView();
+ }
},
- onDestroy: function() {
- var arrowClass = 'eicon-arrow-' + ( elementor.config.is_rtl ? 'right' : 'left' );
+ onDynamicSwitcherClick: function onDynamicSwitcherClick() {
+ this.toggleTagsList();
+ },
- elementor.panel.currentView.getHeaderView().ui.menuIcon.removeClass( arrowClass ).addClass( 'eicon-menu-bar' );
- }
-}, {
- groups: null,
+ onTagsListItemClick: function onTagsListItemClick(event) {
+ var $tag = jQuery(event.currentTarget);
- initGroups: function() {
- var menus = [];
+ this.setTagView(elementor.helpers.getUniqueID(), $tag.data('tagName'), {});
- if ( elementor.config.user.is_administrator ) {
- menus = [
- {
- name: 'style',
- title: elementor.translate( 'global_style' ),
- items: [
- {
- name: 'global-colors',
- icon: 'fa fa-paint-brush',
- title: elementor.translate( 'global_colors' ),
- type: 'page',
- pageName: 'colorScheme'
- },
- {
- name: 'global-fonts',
- icon: 'fa fa-font',
- title: elementor.translate( 'global_fonts' ),
- type: 'page',
- pageName: 'typographyScheme'
- },
- {
- name: 'color-picker',
- icon: 'fa fa-eyedropper',
- title: elementor.translate( 'color_picker' ),
- type: 'page',
- pageName: 'colorPickerScheme'
- }
- ]
- },
- {
- name: 'settings',
- title: elementor.translate( 'settings' ),
- items: [
- {
- name: 'elementor-settings',
- icon: 'fa fa-external-link',
- title: elementor.translate( 'elementor_settings' ),
- type: 'link',
- link: elementor.config.settings_page_link,
- newTab: true
- },
- {
- name: 'about-elementor',
- icon: 'fa fa-info-circle',
- title: elementor.translate( 'about_elementor' ),
- type: 'link',
- link: elementor.config.elementor_site,
- newTab: true
- }
- ]
- }
- ];
- }
+ this.setDynamicValue(this.tagViewToTagText());
- this.groups = new Backbone.Collection( menus );
- },
+ this.toggleTagsList();
- getGroups: function() {
- if ( ! this.groups ) {
- this.initGroups();
+ if (this.tagView.getTagConfig().settings_required) {
+ this.tagView.showSettingsPopup();
}
-
- return this.groups;
},
- addItem: function( itemData, groupName, before ) {
- var group = this.getGroups().findWhere( { name: groupName } );
+ onTagViewModelChange: function onTagViewModelChange() {
+ this.setDynamicValue(this.tagViewToTagText());
+ },
- if ( ! group ) {
- return;
- }
+ onTagViewRemove: function onTagViewRemove() {
+ var settingKey = this.view.model.get('name'),
+ dynamicSettings = this.view.elementSettingsModel.get('__dynamic__');
- var items = group.get( 'items' ),
- beforeItem;
+ dynamicSettings = elementor.helpers.cloneObject(dynamicSettings);
- if ( before ) {
- beforeItem = _.findWhere( items, { name: before } );
- }
+ delete dynamicSettings[settingKey];
- if ( beforeItem ) {
- items.splice( items.indexOf( beforeItem ), 0, itemData );
+ if (Object.keys(dynamicSettings).length) {
+ this.view.elementSettingsModel.set('__dynamic__', dynamicSettings, this.getDynamicControlSettings(settingKey));
} else {
- items.push( itemData );
+ this.view.elementSettingsModel.unset('__dynamic__', this.getDynamicControlSettings(settingKey));
}
- }
-} );
+ this.toggleDynamicClass();
+ },
-module.exports = PanelMenuPageView;
+ onAfterExternalChange: function onAfterExternalChange() {
+ this.destroyTagView();
-},{"elementor-panel/pages/menu/views/group":97}],97:[function(require,module,exports){
-var PanelMenuItemView = require( 'elementor-panel/pages/menu/views/item' );
+ if (this.isDynamicMode()) {
+ this.setDefaultTagView();
+ }
-module.exports = Marionette.CompositeView.extend( {
- template: '#tmpl-elementor-panel-menu-group',
+ this.toggleDynamicClass();
+ },
- className: 'elementor-panel-menu-group',
+ onDestroy: function onDestroy() {
+ this.destroyTagView();
+ }
+});
- childView: PanelMenuItemView,
+/***/ }),
+/* 98 */
+/***/ (function(module, exports, __webpack_require__) {
- childViewContainer: '.elementor-panel-menu-items',
+"use strict";
- initialize: function() {
- this.collection = new Backbone.Collection( this.model.get( 'items' ) );
- },
- onChildviewClick: function( childView ) {
- var menuItemType = childView.model.get( 'type' );
+var TagControlsStack = __webpack_require__(99),
+ SettingsModel = __webpack_require__(3);
- switch ( menuItemType ) {
- case 'page':
- var pageName = childView.model.get( 'pageName' ),
- pageTitle = childView.model.get( 'title' );
+module.exports = Marionette.ItemView.extend({
- elementor.getPanelView().setPage( pageName, pageTitle );
+ className: 'elementor-dynamic-cover elementor-input-style',
- break;
+ tagControlsStack: null,
- case 'link':
- var link = childView.model.get( 'link' ),
- isNewTab = childView.model.get( 'newTab' );
+ templateHelpers: function templateHelpers() {
+ var helpers = {};
+ if (this.model) {
+ helpers.controls = this.model.options.controls;
+ }
- if ( isNewTab ) {
- open( link, '_blank' );
- } else {
- location.href = childView.model.get( 'link' );
- }
+ return helpers;
+ },
- break;
+ ui: {
+ remove: '.elementor-dynamic-cover__remove'
+ },
- default:
- var callback = childView.model.get( 'callback' );
+ events: function events() {
+ var events = {
+ 'click @ui.remove': 'onRemoveClick'
+ };
- if ( _.isFunction( callback ) ) {
- callback.call( childView );
- }
+ if (this.hasSettings()) {
+ events.click = 'onClick';
}
- }
-} );
-
-},{"elementor-panel/pages/menu/views/item":98}],98:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-menu-item',
- className: 'elementor-panel-menu-item',
+ return events;
+ },
- triggers: {
- click: 'click'
- }
-} );
+ getTemplate: function getTemplate() {
+ var config = this.getTagConfig(),
+ templateFunction = Marionette.TemplateCache.get('#tmpl-elementor-control-dynamic-cover'),
+ renderedTemplate = Marionette.Renderer.render(templateFunction, {
+ hasSettings: this.hasSettings(),
+ isRemovable: !this.getOption('dynamicSettings')['default'],
+ title: config.title,
+ content: config.panel_template
+ });
-},{}],99:[function(require,module,exports){
-var childViewTypes = {
- color: require( 'elementor-panel/pages/schemes/items/color' ),
- typography: require( 'elementor-panel/pages/schemes/items/typography' )
+ return Marionette.TemplateCache.prototype.compileTemplate(renderedTemplate.trim());
},
- PanelSchemeBaseView;
-PanelSchemeBaseView = Marionette.CompositeView.extend( {
- id: function() {
- return 'elementor-panel-scheme-' + this.getType();
+ getTagConfig: function getTagConfig() {
+ return elementor.dynamicTags.getConfig('tags.' + this.getOption('name'));
},
- className: function() {
- return 'elementor-panel-scheme elementor-panel-scheme-' + this.getUIType();
- },
+ initSettingsPopup: function initSettingsPopup() {
+ var settingsPopupOptions = {
+ className: 'elementor-tag-settings-popup',
+ position: {
+ my: 'left top+5',
+ at: 'left bottom',
+ of: this.$el,
+ autoRefresh: true
+ }
+ };
- childViewContainer: '.elementor-panel-scheme-items',
+ var settingsPopup = elementor.dialogsManager.createWidget('buttons', settingsPopupOptions);
- getTemplate: function() {
- return Marionette.TemplateCache.get( '#tmpl-elementor-panel-schemes-' + this.getType() );
+ this.getSettingsPopup = function () {
+ return settingsPopup;
+ };
},
- getChildView: function() {
- return childViewTypes[ this.getUIType() ];
+ hasSettings: function hasSettings() {
+ return !!Object.values(this.getTagConfig().controls).length;
},
- getUIType: function() {
- return this.getType();
+ showSettingsPopup: function showSettingsPopup() {
+ if (!this.tagControlsStack) {
+ this.initTagControlsStack();
+ }
+
+ var settingsPopup = this.getSettingsPopup();
+
+ if (settingsPopup.isVisible()) {
+ return;
+ }
+
+ settingsPopup.show();
},
- ui: function() {
- return {
- saveButton: '.elementor-panel-scheme-save .elementor-button',
- discardButton: '.elementor-panel-scheme-discard .elementor-button',
- resetButton: '.elementor-panel-scheme-reset .elementor-button'
- };
+ initTagControlsStack: function initTagControlsStack() {
+ this.tagControlsStack = new TagControlsStack({
+ model: this.model,
+ controls: this.model.controls,
+ el: this.getSettingsPopup().getElements('message')[0]
+ });
+
+ this.tagControlsStack.render();
},
- events: function() {
- return {
- 'click @ui.saveButton': 'saveScheme',
- 'click @ui.discardButton': 'discardScheme',
- 'click @ui.resetButton': 'setDefaultScheme'
- };
+ initModel: function initModel() {
+ this.model = new SettingsModel(this.getOption('settings'), {
+ controls: this.getTagConfig().controls
+ });
},
- initialize: function() {
- this.model = new Backbone.Model();
+ initialize: function initialize() {
+ if (!this.hasSettings()) {
+ return;
+ }
+
+ this.initModel();
- this.resetScheme();
- },
+ this.initSettingsPopup();
- getType: function() {},
+ this.listenTo(this.model, 'change', this.render);
+ },
- getScheme: function() {
- return elementor.schemes.getScheme( this.getType() );
+ onClick: function onClick() {
+ this.showSettingsPopup();
},
- changeChildrenUIValues: function( schemeItems ) {
- var self = this;
+ onRemoveClick: function onRemoveClick(event) {
+ event.stopPropagation();
- _.each( schemeItems, function( value, key ) {
- var model = self.collection.findWhere( { key: key } ),
- childView = self.children.findByModelCid( model.cid );
+ this.destroy();
- childView.changeUIValue( value );
- } );
+ this.trigger('remove');
},
- discardScheme: function() {
- elementor.schemes.resetSchemes( this.getType() );
+ onDestroy: function onDestroy() {
+ if (this.hasSettings()) {
+ this.getSettingsPopup().destroy();
+ }
+ }
+});
- this.onSchemeChange();
+/***/ }),
+/* 99 */
+/***/ (function(module, exports, __webpack_require__) {
- this.ui.saveButton.prop( 'disabled', true );
+"use strict";
- this._renderChildren();
- },
- setSchemeValue: function( key, value ) {
- elementor.schemes.setSchemeValue( this.getType(), key, value );
+var ControlsStack = __webpack_require__(12),
+ EmptyView = __webpack_require__(100);
- this.onSchemeChange();
- },
+module.exports = ControlsStack.extend({
+ activeTab: 'content',
- saveScheme: function() {
- elementor.schemes.saveScheme( this.getType() );
+ template: _.noop,
- this.ui.saveButton.prop( 'disabled', true );
+ emptyView: EmptyView,
- this.resetScheme();
+ isEmpty: function isEmpty() {
+ // Ignore the section control
+ return this.collection.length < 2;
+ },
- this._renderChildren();
+ childViewOptions: function childViewOptions() {
+ return {
+ elementSettingsModel: this.model
+ };
},
- setDefaultScheme: function() {
- var defaultScheme = elementor.config.default_schemes[ this.getType() ].items;
+ onRenderTemplate: function onRenderTemplate() {
+ this.activateFirstSection();
+ }
+});
- this.changeChildrenUIValues( defaultScheme );
- },
+/***/ }),
+/* 100 */
+/***/ (function(module, exports, __webpack_require__) {
- resetItems: function() {
- this.model.set( 'items', this.getScheme().items );
- },
+"use strict";
- resetCollection: function() {
- var self = this,
- items = self.model.get( 'items' );
- self.collection = new Backbone.Collection();
+module.exports = Marionette.ItemView.extend({
+ className: 'elementor-tag-controls-stack-empty',
- _.each( items, function( item, key ) {
- item.type = self.getType();
- item.key = key;
+ template: '#tmpl-elementor-tag-controls-stack-empty'
+});
- self.collection.add( item );
- } );
- },
+/***/ }),
+/* 101 */
+/***/ (function(module, exports, __webpack_require__) {
- resetScheme: function() {
- this.resetItems();
- this.resetCollection();
- },
+"use strict";
- onSchemeChange: function() {
- elementor.schemes.printSchemesStyle();
- },
- onChildviewValueChange: function( childView, newValue ) {
- this.ui.saveButton.removeProp( 'disabled' );
+var ControlBaseView = __webpack_require__(7);
- this.setSchemeValue( childView.model.get( 'key' ), newValue );
- }
-} );
+module.exports = ControlBaseView.extend({
-module.exports = PanelSchemeBaseView;
+ ui: function ui() {
+ var ui = ControlBaseView.prototype.ui.apply(this, arguments);
-},{"elementor-panel/pages/schemes/items/color":104,"elementor-panel/pages/schemes/items/typography":105}],100:[function(require,module,exports){
-var PanelSchemeColorsView = require( 'elementor-panel/pages/schemes/colors' ),
- PanelSchemeColorPickerView;
+ ui.button = 'button';
-PanelSchemeColorPickerView = PanelSchemeColorsView.extend( {
- getType: function() {
- return 'color-picker';
+ return ui;
},
- getUIType: function() {
- return 'color';
+ events: {
+ 'click @ui.button': 'onButtonClick'
},
- onSchemeChange: function() {},
-
- getViewComparator: function() {
- return this.orderView;
- },
+ onButtonClick: function onButtonClick() {
+ var eventName = this.model.get('event');
- orderView: function( model ) {
- return elementor.helpers.getColorPickerPaletteIndex( model.get( 'key' ) );
+ elementor.channels.editor.trigger(eventName, this);
}
-} );
+});
-module.exports = PanelSchemeColorPickerView;
+/***/ }),
+/* 102 */
+/***/ (function(module, exports, __webpack_require__) {
-},{"elementor-panel/pages/schemes/colors":101}],101:[function(require,module,exports){
-var PanelSchemeBaseView = require( 'elementor-panel/pages/schemes/base' ),
- PanelSchemeColorsView;
+"use strict";
-PanelSchemeColorsView = PanelSchemeBaseView.extend( {
- ui: function() {
- var ui = PanelSchemeBaseView.prototype.ui.apply( this, arguments );
- ui.systemSchemes = '.elementor-panel-scheme-color-system-scheme';
+var ControlBaseDataView = __webpack_require__(0),
+ ControlCodeEditorItemView;
+
+ControlCodeEditorItemView = ControlBaseDataView.extend({
+
+ ui: function ui() {
+ var ui = ControlBaseDataView.prototype.ui.apply(this, arguments);
+
+ ui.editor = '.elementor-code-editor';
return ui;
},
- events: function() {
- var events = PanelSchemeBaseView.prototype.events.apply( this, arguments );
+ onReady: function onReady() {
+ var self = this;
- events[ 'click @ui.systemSchemes' ] = 'onSystemSchemeClick';
+ if ('undefined' === typeof ace) {
+ return;
+ }
- return events;
- },
+ var langTools = ace.require('ace/ext/language_tools');
- getType: function() {
- return 'color';
- },
+ self.editor = ace.edit(this.ui.editor[0]);
- onSystemSchemeClick: function( event ) {
- var $schemeClicked = jQuery( event.currentTarget ),
- schemeName = $schemeClicked.data( 'schemeName' ),
- scheme = elementor.config.system_schemes[ this.getType() ][ schemeName ].items;
+ jQuery(self.editor.container).addClass('elementor-input-style elementor-code-editor');
- this.changeChildrenUIValues( scheme );
- }
-} );
+ self.editor.setOptions({
+ mode: 'ace/mode/' + self.model.attributes.language,
+ minLines: 10,
+ maxLines: Infinity,
+ showGutter: true,
+ useWorker: true,
+ enableBasicAutocompletion: true,
+ enableLiveAutocompletion: true
+ });
-module.exports = PanelSchemeColorsView;
+ self.editor.getSession().setUseWrapMode(true);
-},{"elementor-panel/pages/schemes/base":99}],102:[function(require,module,exports){
-var PanelSchemeDisabledView;
+ elementor.panel.$el.on('resize.aceEditor', self.onResize.bind(this));
-PanelSchemeDisabledView = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-schemes-disabled',
+ if ('css' === self.model.attributes.language) {
+ var selectorCompleter = {
+ getCompletions: function getCompletions(editor, session, pos, prefix, callback) {
+ var list = [],
+ token = session.getTokenAt(pos.row, pos.column);
- id: 'elementor-panel-schemes-disabled',
+ if (0 < prefix.length && 'selector'.match(prefix) && 'constant' === token.type) {
+ list = [{
+ name: 'selector',
+ value: 'selector',
+ score: 1,
+ meta: 'Elementor'
+ }];
+ }
- className: 'elementor-panel-nerd-box',
+ callback(null, list);
+ }
+ };
- disabledTitle: '',
+ langTools.addCompleter(selectorCompleter);
+ }
- templateHelpers: function() {
- return {
- disabledTitle: this.disabledTitle
- };
- }
-} );
+ self.editor.setValue(self.getControlValue(), -1); // -1 = move cursor to the start
-module.exports = PanelSchemeDisabledView;
+ self.editor.on('change', function () {
+ self.setValue(self.editor.getValue());
+ });
-},{}],103:[function(require,module,exports){
-var PanelSchemeItemView;
+ if ('html' === self.model.attributes.language) {
+ // Remove the `doctype` annotation
+ var session = self.editor.getSession();
-PanelSchemeItemView = Marionette.ItemView.extend( {
- getTemplate: function() {
- return Marionette.TemplateCache.get( '#tmpl-elementor-panel-scheme-' + this.getUIType() + '-item' );
+ session.on('changeAnnotation', function () {
+ var annotations = session.getAnnotations() || [],
+ annotationsLength = annotations.length,
+ index = annotations.length;
+
+ while (index--) {
+ if (/doctype first\. Expected/.test(annotations[index].text)) {
+ annotations.splice(index, 1);
+ }
+ }
+
+ if (annotationsLength > annotations.length) {
+ session.setAnnotations(annotations);
+ }
+ });
+ }
},
- className: function() {
- return 'elementor-panel-scheme-item';
+ onResize: function onResize() {
+ this.editor.resize();
+ },
+
+ onDestroy: function onDestroy() {
+ elementor.panel.$el.off('resize.aceEditor');
}
-} );
+});
-module.exports = PanelSchemeItemView;
+module.exports = ControlCodeEditorItemView;
-},{}],104:[function(require,module,exports){
-var PanelSchemeItemView = require( 'elementor-panel/pages/schemes/items/base' ),
- PanelSchemeColorView;
+/***/ }),
+/* 103 */
+/***/ (function(module, exports, __webpack_require__) {
-PanelSchemeColorView = PanelSchemeItemView.extend( {
- getUIType: function() {
- return 'color';
- },
+"use strict";
- ui: {
- input: '.elementor-panel-scheme-color-value'
- },
- changeUIValue: function( newValue ) {
- this.ui.input.wpColorPicker( 'color', newValue );
- },
+var ControlBaseDataView = __webpack_require__(0),
+ ControlColorItemView;
+
+ControlColorItemView = ControlBaseDataView.extend({
+ applySavedValue: function applySavedValue() {
+ ControlBaseDataView.prototype.applySavedValue.apply(this, arguments);
- onBeforeDestroy: function() {
- if ( this.ui.input.wpColorPicker( 'instance' ) ) {
- this.ui.input.wpColorPicker( 'close' );
+ var self = this,
+ value = self.getControlValue(),
+ colorInstance = self.ui.input.wpColorPicker('instance');
+
+ if (colorInstance) {
+ self.ui.input.wpColorPicker('color', value);
+
+ if (!value) {
+ // Trigger `change` event manually, since it will not be triggered automatically on empty value
+ self.ui.input.data('a8cIris')._change();
+ }
+ } else {
+ elementor.helpers.wpColorPicker(self.ui.input, {
+ change: function change() {
+ self.setValue(self.ui.input.wpColorPicker('color'));
+ },
+ clear: function clear() {
+ self.setValue('');
+ }
+ });
}
},
- onRender: function() {
- var self = this;
+ onBeforeDestroy: function onBeforeDestroy() {
+ if (this.ui.input.wpColorPicker('instance')) {
+ this.ui.input.wpColorPicker('close');
+ }
- elementor.helpers.wpColorPicker( self.ui.input, {
- change: function( event, ui ) {
- self.triggerMethod( 'value:change', ui.color.toString() );
- }
- } );
+ this.$el.remove();
}
-} );
-
-module.exports = PanelSchemeColorView;
+});
-},{"elementor-panel/pages/schemes/items/base":103}],105:[function(require,module,exports){
-var PanelSchemeItemView = require( 'elementor-panel/pages/schemes/items/base' ),
- PanelSchemeTypographyView;
+module.exports = ControlColorItemView;
-PanelSchemeTypographyView = PanelSchemeItemView.extend( {
- getUIType: function() {
- return 'typography';
- },
+/***/ }),
+/* 104 */
+/***/ (function(module, exports, __webpack_require__) {
- className: function() {
- var classes = PanelSchemeItemView.prototype.className.apply( this, arguments );
+"use strict";
- return classes + ' elementor-panel-box';
- },
- ui: {
- heading: '.elementor-panel-heading',
- allFields: '.elementor-panel-scheme-typography-item-field',
- inputFields: 'input.elementor-panel-scheme-typography-item-field',
- selectFields: 'select.elementor-panel-scheme-typography-item-field',
- selectFamilyFields: 'select.elementor-panel-scheme-typography-item-field[name="font_family"]'
- },
+var ControlBaseDataView = __webpack_require__(0),
+ ControlDateTimePickerItemView;
- events: {
- 'input @ui.inputFields': 'onFieldChange',
- 'change @ui.selectFields': 'onFieldChange',
- 'click @ui.heading': 'toggleVisibility'
- },
+ControlDateTimePickerItemView = ControlBaseDataView.extend({
- onRender: function() {
+ onReady: function onReady() {
var self = this;
- this.ui.inputFields.add( this.ui.selectFields ).each( function() {
- var $this = jQuery( this ),
- name = $this.attr( 'name' ),
- value = self.model.get( 'value' )[ name ];
-
- $this.val( value );
- } );
+ var options = _.extend({
+ onClose: function onClose() {
+ self.saveValue();
+ },
+ enableTime: true,
+ minuteIncrement: 1
+ }, this.model.get('picker_options'));
- this.ui.selectFamilyFields.select2( {
- dir: elementor.config.is_rtl ? 'rtl' : 'ltr'
- } );
+ this.ui.input.flatpickr(options);
},
- toggleVisibility: function() {
- this.ui.heading.toggleClass( 'elementor-open' );
+ saveValue: function saveValue() {
+ this.setValue(this.ui.input.val());
},
- changeUIValue: function( newValue ) {
- this.ui.allFields.each( function() {
- var $this = jQuery( this ),
- thisName = $this.attr( 'name' ),
- newFieldValue = newValue[ thisName ];
+ onBeforeDestroy: function onBeforeDestroy() {
+ this.saveValue();
+ this.ui.input.flatpickr().destroy();
+ }
+});
- $this.val( newFieldValue ).trigger( 'change' );
- } );
- },
+module.exports = ControlDateTimePickerItemView;
- onFieldChange: function( event ) {
- var $select = this.$( event.currentTarget ),
- currentValue = elementor.schemes.getSchemeValue( 'typography', this.model.get( 'key' ) ).value,
- fieldKey = $select.attr( 'name' );
+/***/ }),
+/* 105 */
+/***/ (function(module, exports, __webpack_require__) {
- currentValue[ fieldKey ] = $select.val();
+"use strict";
- if ( 'font_family' === fieldKey && ! _.isEmpty( currentValue[ fieldKey ] ) ) {
- elementor.helpers.enqueueFont( currentValue[ fieldKey ] );
- }
- this.triggerMethod( 'value:change', currentValue );
- }
-} );
+var ControlBaseUnitsItemView = __webpack_require__(34),
+ ControlDimensionsItemView;
-module.exports = PanelSchemeTypographyView;
+ControlDimensionsItemView = ControlBaseUnitsItemView.extend({
+ ui: function ui() {
+ var ui = ControlBaseUnitsItemView.prototype.ui.apply(this, arguments);
-},{"elementor-panel/pages/schemes/items/base":103}],106:[function(require,module,exports){
-var PanelSchemeBaseView = require( 'elementor-panel/pages/schemes/base' ),
- PanelSchemeTypographyView;
+ ui.controls = '.elementor-control-dimension > input:enabled';
+ ui.link = 'button.elementor-link-dimensions';
-PanelSchemeTypographyView = PanelSchemeBaseView.extend( {
- getType: function() {
- return 'typography';
- }
-} );
+ return ui;
+ },
-module.exports = PanelSchemeTypographyView;
+ events: function events() {
+ return _.extend(ControlBaseUnitsItemView.prototype.events.apply(this, arguments), {
+ 'click @ui.link': 'onLinkDimensionsClicked'
+ });
+ },
-},{"elementor-panel/pages/schemes/base":99}],107:[function(require,module,exports){
-var EditModeItemView = require( 'elementor-layouts/edit-mode' ),
- PanelLayoutView;
+ defaultDimensionValue: 0,
-PanelLayoutView = Marionette.LayoutView.extend( {
- template: '#tmpl-elementor-panel',
+ initialize: function initialize() {
+ ControlBaseUnitsItemView.prototype.initialize.apply(this, arguments);
- id: 'elementor-panel-inner',
+ // TODO: Need to be in helpers, and not in variable
+ this.model.set('allowed_dimensions', this.filterDimensions(this.model.get('allowed_dimensions')));
+ },
- regions: {
- content: '#elementor-panel-content-wrapper',
- header: '#elementor-panel-header-wrapper',
- footer: '#elementor-panel-footer',
- modeSwitcher: '#elementor-mode-switcher'
+ getPossibleDimensions: function getPossibleDimensions() {
+ return ['top', 'right', 'bottom', 'left'];
},
- pages: {},
+ filterDimensions: function filterDimensions(filter) {
+ filter = filter || 'all';
- childEvents: {
- 'click:add': function() {
- this.setPage( 'elements' );
- },
- 'editor:destroy': function() {
- this.setPage( 'elements' );
+ var dimensions = this.getPossibleDimensions();
+
+ if ('all' === filter) {
+ return dimensions;
+ }
+
+ if (!_.isArray(filter)) {
+ if ('horizontal' === filter) {
+ filter = ['right', 'left'];
+ } else if ('vertical' === filter) {
+ filter = ['top', 'bottom'];
+ }
}
+
+ return filter;
},
- currentPageName: null,
+ onReady: function onReady() {
+ var self = this,
+ currentValue = self.getControlValue();
- currentPageView: null,
+ if (!self.isLinkedDimensions()) {
+ self.ui.link.addClass('unlinked');
- _isScrollbarInitialized: false,
+ self.ui.controls.each(function (index, element) {
+ var value = currentValue[element.dataset.setting];
- initialize: function() {
- this.initPages();
- },
+ if (_.isEmpty(value)) {
+ value = self.defaultDimensionValue;
+ }
- buildPages: function() {
- var pages = {
- elements: {
- view: require( 'elementor-panel/pages/elements/elements' ),
- title: '<img src="' + elementor.config.assets_url + 'images/logo-panel.svg">'
- },
- editor: {
- view: require( 'elementor-panel/pages/editor' )
- },
- menu: {
- view: elementor.modules.layouts.panel.pages.menu.Menu,
- title: '<img src="' + elementor.config.assets_url + 'images/logo-panel.svg">'
- },
- colorScheme: {
- view: require( 'elementor-panel/pages/schemes/colors' )
- },
- typographyScheme: {
- view: require( 'elementor-panel/pages/schemes/typography' )
- },
- colorPickerScheme: {
- view: require( 'elementor-panel/pages/schemes/color-picker' )
- }
- };
+ self.$(element).val(value);
+ });
+ }
- var schemesTypes = Object.keys( elementor.schemes.getSchemes() ),
- disabledSchemes = _.difference( schemesTypes, elementor.schemes.getEnabledSchemesTypes() );
+ self.fillEmptyDimensions();
+ },
- _.each( disabledSchemes, function( schemeType ) {
- var scheme = elementor.schemes.getScheme( schemeType );
+ updateDimensionsValue: function updateDimensionsValue() {
+ var currentValue = {},
+ dimensions = this.getPossibleDimensions(),
+ $controls = this.ui.controls,
+ defaultDimensionValue = this.defaultDimensionValue;
- pages[ schemeType + 'Scheme' ].view = require( 'elementor-panel/pages/schemes/disabled' ).extend( {
- disabledTitle: scheme.disabled_title
- } );
- } );
+ dimensions.forEach(function (dimension) {
+ var $element = $controls.filter('[data-setting="' + dimension + '"]');
- return pages;
+ currentValue[dimension] = $element.length ? $element.val() : defaultDimensionValue;
+ });
+
+ this.setValue(currentValue);
},
- initPages: function() {
- var pages;
+ fillEmptyDimensions: function fillEmptyDimensions() {
+ var dimensions = this.getPossibleDimensions(),
+ allowedDimensions = this.model.get('allowed_dimensions'),
+ $controls = this.ui.controls,
+ defaultDimensionValue = this.defaultDimensionValue;
- this.getPages = function( page ) {
- if ( ! pages ) {
- pages = this.buildPages();
- }
+ if (this.isLinkedDimensions()) {
+ return;
+ }
- return page ? pages[ page ] : pages;
- };
+ dimensions.forEach(function (dimension) {
+ var $element = $controls.filter('[data-setting="' + dimension + '"]'),
+ isAllowedDimension = -1 !== _.indexOf(allowedDimensions, dimension);
- this.addPage = function( pageName, pageData ) {
- if ( ! pages ) {
- pages = this.buildPages();
+ if (isAllowedDimension && $element.length && _.isEmpty($element.val())) {
+ $element.val(defaultDimensionValue);
}
-
- pages[ pageName ] = pageData;
- };
- },
-
- getHeaderView: function() {
- return this.getChildView( 'header' );
+ });
},
- getFooterView: function() {
- return this.getChildView( 'footer' );
+ updateDimensions: function updateDimensions() {
+ this.fillEmptyDimensions();
+ this.updateDimensionsValue();
},
- getCurrentPageName: function() {
- return this.currentPageName;
- },
+ resetDimensions: function resetDimensions() {
+ this.ui.controls.val('');
- getCurrentPageView: function() {
- return this.currentPageView;
+ this.updateDimensionsValue();
},
- setPage: function( page, title, viewOptions ) {
- if ( 'elements' === page && ! elementor.userCan( 'design' ) ) {
- var pages = this.getPages();
- if ( pages.hasOwnProperty( 'page_settings' ) ) {
- page = 'page_settings';
- }
- }
- var pageData = this.getPages( page );
+ onInputChange: function onInputChange(event) {
+ var inputSetting = event.target.dataset.setting;
- if ( ! pageData ) {
- throw new ReferenceError( 'Elementor panel doesn\'t have page named \'' + page + '\'' );
+ if ('unit' === inputSetting) {
+ this.resetDimensions();
}
- if ( pageData.options ) {
- viewOptions = _.extend( pageData.options, viewOptions );
+ if (!_.contains(this.getPossibleDimensions(), inputSetting)) {
+ return;
}
- var View = pageData.view;
+ if (this.isLinkedDimensions()) {
+ var $thisControl = this.$(event.target);
- if ( pageData.getView ) {
- View = pageData.getView();
+ this.ui.controls.val($thisControl.val());
}
- this.currentPageName = page;
+ this.updateDimensions();
+ },
+
+ onLinkDimensionsClicked: function onLinkDimensionsClicked(event) {
+ event.preventDefault();
+ event.stopPropagation();
- this.currentPageView = new View( viewOptions );
+ this.ui.link.toggleClass('unlinked');
- this.showChildView( 'content', this.currentPageView );
+ this.setValue('isLinked', !this.ui.link.hasClass('unlinked'));
- this.getHeaderView().setTitle( title || pageData.title );
+ if (this.isLinkedDimensions()) {
+ // Set all controls value from the first control.
+ this.ui.controls.val(this.ui.controls.eq(0).val());
+ }
- this
- .trigger( 'set:page', this.currentPageView )
- .trigger( 'set:page:' + page, this.currentPageView );
+ this.updateDimensions();
},
- openEditor: function( model, view ) {
- var currentPageName = this.getCurrentPageName();
-
- if ( 'editor' === currentPageName ) {
- var currentPageView = this.getCurrentPageView(),
- currentEditableModel = currentPageView.model;
+ isLinkedDimensions: function isLinkedDimensions() {
+ return this.getControlValue('isLinked');
+ }
+});
- if ( currentEditableModel === model ) {
- return;
- }
- }
+module.exports = ControlDimensionsItemView;
- var elementData = elementor.getElementData( model );
+/***/ }),
+/* 106 */
+/***/ (function(module, exports, __webpack_require__) {
- this.setPage( 'editor', elementor.translate( 'edit_element', [ elementData.title ] ), {
- model: model,
- controls: elementor.getElementControls( model ),
- editedElementView: view
- } );
+"use strict";
- var action = 'panel/open_editor/' + model.get( 'elType' );
- // Example: panel/open_editor/widget
- elementor.hooks.doAction( action, this, model, view );
+var ControlSelect2View = __webpack_require__(6);
- // Example: panel/open_editor/widget/heading
- elementor.hooks.doAction( action + '/' + model.get( 'widgetType' ), this, model, view );
+module.exports = ControlSelect2View.extend({
+ getSelect2Options: function getSelect2Options() {
+ return {
+ dir: elementor.config.is_rtl ? 'rtl' : 'ltr'
+ };
},
- onBeforeShow: function() {
- var PanelFooterItemView = require( 'elementor-layouts/panel/footer' ),
- PanelHeaderItemView = require( 'elementor-layouts/panel/header' );
+ templateHelpers: function templateHelpers() {
+ var helpers = ControlSelect2View.prototype.templateHelpers.apply(this, arguments),
+ fonts = this.model.get('options');
- // Edit Mode
- this.showChildView( 'modeSwitcher', new EditModeItemView() );
+ helpers.getFontsByGroups = function (groups) {
+ var filteredFonts = {};
- // Header
- this.showChildView( 'header', new PanelHeaderItemView() );
+ _.each(fonts, function (fontType, fontName) {
+ if (_.isArray(groups) && _.contains(groups, fontType) || fontType === groups) {
+ filteredFonts[fontName] = fontName;
+ }
+ });
- // Footer
- this.showChildView( 'footer', new PanelFooterItemView() );
+ return filteredFonts;
+ };
- // Added Editor events
- this.updateScrollbar = _.throttle( this.updateScrollbar, 100 );
+ return helpers;
+ }
+});
- this.getRegion( 'content' )
- .on( 'before:show', this.onEditorBeforeShow.bind( this ) )
- .on( 'empty', this.onEditorEmpty.bind( this ) )
- .on( 'show', this.updateScrollbar.bind( this ) );
+/***/ }),
+/* 107 */
+/***/ (function(module, exports, __webpack_require__) {
- // Set default page to elements
- this.setPage( 'elements' );
+"use strict";
+
+
+var ControlBaseDataView = __webpack_require__(0),
+ ControlMediaItemView;
+
+ControlMediaItemView = ControlBaseDataView.extend({
+ ui: function ui() {
+ var ui = ControlBaseDataView.prototype.ui.apply(this, arguments);
- this.listenTo( elementor.channels.data, 'scrollbar:update', this.updateScrollbar );
+ ui.addImages = '.elementor-control-gallery-add';
+ ui.clearGallery = '.elementor-control-gallery-clear';
+ ui.galleryThumbnails = '.elementor-control-gallery-thumbnails';
+ ui.status = '.elementor-control-gallery-status-title';
+
+ return ui;
},
- onEditorBeforeShow: function() {
- _.defer( this.updateScrollbar.bind( this ) );
+ events: function events() {
+ return _.extend(ControlBaseDataView.prototype.events.apply(this, arguments), {
+ 'click @ui.addImages': 'onAddImagesClick',
+ 'click @ui.clearGallery': 'onClearGalleryClick',
+ 'click @ui.galleryThumbnails': 'onGalleryThumbnailsClick'
+ });
},
- onEditorEmpty: function() {
- this.updateScrollbar();
+ onReady: function onReady() {
+ this.initRemoveDialog();
},
- updateScrollbar: function() {
- var $panel = this.content.$el;
+ applySavedValue: function applySavedValue() {
+ var images = this.getControlValue(),
+ imagesCount = images.length,
+ hasImages = !!imagesCount;
- if ( ! this._isScrollbarInitialized ) {
- $panel.perfectScrollbar();
- this._isScrollbarInitialized = true;
+ this.$el.toggleClass('elementor-gallery-has-images', hasImages).toggleClass('elementor-gallery-empty', !hasImages);
+ var $galleryThumbnails = this.ui.galleryThumbnails;
+
+ $galleryThumbnails.empty();
+
+ this.ui.status.text(elementor.translate(hasImages ? 'gallery_images_selected' : 'gallery_no_images_selected', [imagesCount]));
+
+ if (!hasImages) {
return;
}
- $panel.perfectScrollbar( 'update' );
- }
-} );
-
-module.exports = PanelLayoutView;
+ this.getControlValue().forEach(function (image) {
+ var $thumbnail = jQuery('<div>', { 'class': 'elementor-control-gallery-thumbnail' });
-},{"elementor-layouts/edit-mode":82,"elementor-layouts/panel/footer":83,"elementor-layouts/panel/header":84,"elementor-panel/pages/editor":85,"elementor-panel/pages/elements/elements":88,"elementor-panel/pages/schemes/color-picker":100,"elementor-panel/pages/schemes/colors":101,"elementor-panel/pages/schemes/disabled":102,"elementor-panel/pages/schemes/typography":106}],108:[function(require,module,exports){
-var Ajax;
+ $thumbnail.css('background-image', 'url(' + image.url + ')');
-Ajax = {
- config: {},
- requests: {},
- cache: {},
+ $galleryThumbnails.append($thumbnail);
+ });
+ },
- initConfig: function() {
- this.config = {
- ajaxParams: {
- type: 'POST',
- url: elementor.config.ajaxurl,
- data: {}
- },
- actionPrefix: 'elementor_'
- };
+ hasImages: function hasImages() {
+ return !!this.getControlValue().length;
},
- init: function() {
- this.initConfig();
+ openFrame: function openFrame(action) {
+ this.initFrame(action);
- this.debounceSendBatch = _.debounce( this.sendBatch.bind( this ), 500 );
+ this.frame.open();
},
- getCacheKey: function( request ) {
- return JSON.stringify( {
- unique_id: request.unique_id,
- data: request.data
- } );
- },
+ initFrame: function initFrame(action) {
+ var frameStates = {
+ create: 'gallery',
+ add: 'gallery-library',
+ edit: 'gallery-edit'
+ };
- loadObjects: function( options ) {
- var self = this,
- dataCollection = {},
- deferredArray = [];
+ var options = {
+ frame: 'post',
+ multiple: true,
+ state: frameStates[action],
+ button: {
+ text: elementor.translate('insert_media')
+ }
+ };
- if ( options.before ) {
- options.before();
+ if (this.hasImages()) {
+ options.selection = this.fetchSelection();
}
- options.ids.forEach( function( objectId ) {
- deferredArray.push( self.load( {
- action: options.action,
- unique_id: options.data.unique_id + objectId,
- data: jQuery.extend( { id: objectId }, options.data )
- } ).done( function( data ) {
- dataCollection = jQuery.extend( dataCollection, data );
- }) );
- } );
+ this.frame = wp.media(options);
- jQuery.when.apply( jQuery, deferredArray ).done( function() {
- options.success( dataCollection );
- } );
+ // When a file is selected, run a callback.
+ this.frame.on({
+ 'update': this.select,
+ 'menu:render:default': this.menuRender,
+ 'content:render:browse': this.gallerySettings
+ }, this);
},
- load: function( request ) {
- var self = this;
- if ( ! request.unique_id ) {
- request.unique_id = request.action;
- }
-
- if ( request.before ) {
- request.before();
- }
+ menuRender: function menuRender(view) {
+ view.unset('insert');
+ view.unset('featured-image');
+ },
- var deferred,
- cacheKey = self.getCacheKey( request );
+ gallerySettings: function gallerySettings(browser) {
+ browser.sidebar.on('ready', function () {
+ browser.sidebar.unset('gallery');
+ });
+ },
- if ( _.has( self.cache, cacheKey ) ) {
- deferred = jQuery.Deferred()
- .done( request.success )
- .resolve( self.cache[ cacheKey ] );
- } else {
- deferred = self.addRequest( request.action, {
- data: request.data,
- unique_id: request.unique_id,
- success: function( data ) {
- self.cache[ cacheKey ] = data;
- }
- } ).done( request.success );
- }
+ fetchSelection: function fetchSelection() {
+ var attachments = wp.media.query({
+ orderby: 'post__in',
+ order: 'ASC',
+ type: 'image',
+ perPage: -1,
+ post__in: _.pluck(this.getControlValue(), 'id')
+ });
- return deferred;
+ return new wp.media.model.Selection(attachments.models, {
+ props: attachments.props.toJSON(),
+ multiple: true
+ });
},
- addRequest: function( action, options, immediately ) {
- if ( ! options.unique_id ) {
- options.unique_id = action;
- }
+ /**
+ * Callback handler for when an attachment is selected in the media modal.
+ * Gets the selected image information, and sets it within the control.
+ */
+ select: function select(selection) {
+ var images = [];
- options.deferred = jQuery.Deferred().done( options.success ).fail( options.error ).always( options.complete );
+ selection.each(function (image) {
+ images.push({
+ id: image.get('id'),
+ url: image.get('url')
+ });
+ });
- var request = {
- action: action,
- options: options
- };
+ this.setValue(images);
- if ( immediately ) {
- var requests = {};
- requests[ options.unique_id ] = request;
- options.deferred.jqXhr = this.sendBatch( requests );
- } else {
- this.requests[ options.unique_id ] = request;
- this.debounceSendBatch();
+ this.applySavedValue();
+ },
+
+ onBeforeDestroy: function onBeforeDestroy() {
+ if (this.frame) {
+ this.frame.off();
}
- return options.deferred;
+ this.$el.remove();
},
- sendBatch: function( requests ) {
- var actions = {};
-
- if ( ! requests ) {
- requests = this.requests;
+ resetGallery: function resetGallery() {
+ this.setValue('');
- // Empty for next batch.
- this.requests = {};
- }
+ this.applySavedValue();
+ },
- _( requests ).each( function( request, id ) {
- actions[ id ] = {
- action: request.action,
- data: request.options.data
- };
- } );
+ initRemoveDialog: function initRemoveDialog() {
+ var removeDialog;
- return this.send( 'ajax', {
- data: {
- actions: JSON.stringify( actions )
- },
- success: function( data ) {
- _.each( data.responses, function( response, id ) {
- var options = requests[ id ].options;
- if ( options ) {
- if ( response.success ) {
- options.deferred.resolve( response.data );
- } else if ( ! response.success ) {
- options.deferred.reject( response.data );
- }
- }
- } );
- },
- error: function( data ) {
- _.each( requests, function( args ) {
- if ( args.options ) {
- args.options.deferred.reject( data );
- }
- } );
+ this.getRemoveDialog = function () {
+ if (!removeDialog) {
+ removeDialog = elementor.dialogsManager.createWidget('confirm', {
+ message: elementor.translate('dialog_confirm_gallery_delete'),
+ headerMessage: elementor.translate('delete_gallery'),
+ strings: {
+ confirm: elementor.translate('delete'),
+ cancel: elementor.translate('cancel')
+ },
+ defaultOption: 'confirm',
+ onConfirm: this.resetGallery.bind(this)
+ });
}
- } );
+
+ return removeDialog;
+ };
},
- send: function( action, options ) {
- var self = this,
- ajaxParams = elementor.helpers.cloneObject( this.config.ajaxParams );
+ onAddImagesClick: function onAddImagesClick() {
+ this.openFrame(this.hasImages() ? 'add' : 'create');
+ },
- options = options || {};
+ onClearGalleryClick: function onClearGalleryClick() {
+ this.getRemoveDialog().show();
+ },
- action = this.config.actionPrefix + action;
+ onGalleryThumbnailsClick: function onGalleryThumbnailsClick() {
+ this.openFrame('edit');
+ }
+});
- jQuery.extend( ajaxParams, options );
+module.exports = ControlMediaItemView;
- if ( ajaxParams.data instanceof FormData ) {
- ajaxParams.data.append( 'action', action );
- ajaxParams.data.append( '_nonce', elementor.config.nonce );
- ajaxParams.data.append( 'editor_post_id', elementor.config.document.id );
+/***/ }),
+/* 108 */
+/***/ (function(module, exports, __webpack_require__) {
- } else {
- ajaxParams.data.action = action;
- ajaxParams.data._nonce = elementor.config.nonce;
- ajaxParams.data.editor_post_id = elementor.config.document.id;
- }
+"use strict";
- var successCallback = ajaxParams.success,
- errorCallback = ajaxParams.error;
- if ( successCallback || errorCallback ) {
- ajaxParams.success = function( response ) {
- if ( response.success && successCallback ) {
- successCallback( response.data );
- }
+var ControlSelect2View = __webpack_require__(6),
+ ControlIconView;
- if ( ( ! response.success ) && errorCallback ) {
- errorCallback( response.data );
- }
- };
+ControlIconView = ControlSelect2View.extend({
- if ( errorCallback ) {
- ajaxParams.error = function( data ) {
- errorCallback( data );
- };
- } else {
- ajaxParams.error = function( XMLHttpRequest ) {
- if ( 0 === XMLHttpRequest.readyState && 'abort' === XMLHttpRequest.statusText ) {
- return;
- }
+ initialize: function initialize() {
+ ControlSelect2View.prototype.initialize.apply(this, arguments);
+
+ this.filterIcons();
+ },
- var message = self.createErrorMessage( XMLHttpRequest );
+ filterIcons: function filterIcons() {
+ var icons = this.model.get('options'),
+ include = this.model.get('include'),
+ exclude = this.model.get('exclude');
- elementor.notifications.showToast( {
- message: message
- } );
- };
- }
+ if (include) {
+ var filteredIcons = {};
+
+ _.each(include, function (iconKey) {
+ filteredIcons[iconKey] = icons[iconKey];
+ });
+
+ this.model.set('options', filteredIcons);
+ return;
}
- return jQuery.ajax( ajaxParams );
+ if (exclude) {
+ _.each(exclude, function (iconKey) {
+ delete icons[iconKey];
+ });
+ }
},
- createErrorMessage: function( XMLHttpRequest ) {
- var message;
- if ( 4 === XMLHttpRequest.readyState ) {
- message = elementor.translate( 'server_error' );
- if ( 200 !== XMLHttpRequest.status ) {
- message += ' (' + XMLHttpRequest.status + ' ' + XMLHttpRequest.statusText + ')';
- }
- } else if ( 0 === XMLHttpRequest.readyState ) {
- message = elementor.translate( 'server_connection_lost' );
- } else {
- message = elementor.translate( 'unknown_error' );
+ iconsList: function iconsList(icon) {
+ if (!icon.id) {
+ return icon.text;
}
- return message + '.';
+ return jQuery('<span><i class="' + icon.id + '"></i> ' + icon.text + '</span>');
+ },
+
+ getSelect2Options: function getSelect2Options() {
+ return {
+ allowClear: true,
+ templateResult: this.iconsList.bind(this),
+ templateSelection: this.iconsList.bind(this)
+ };
}
-};
+});
-module.exports = Ajax;
+module.exports = ControlIconView;
-},{}],109:[function(require,module,exports){
-var Conditions;
+/***/ }),
+/* 109 */
+/***/ (function(module, exports, __webpack_require__) {
-Conditions = function() {
- var self = this;
+"use strict";
- this.compare = function( leftValue, rightValue, operator ) {
- switch ( operator ) {
- /* jshint ignore:start */
- case '==':
- return leftValue == rightValue;
- case '!=':
- return leftValue != rightValue;
- /* jshint ignore:end */
- case '!==':
- return leftValue !== rightValue;
- case 'in':
- return -1 !== rightValue.indexOf( leftValue );
- case '!in':
- return -1 === rightValue.indexOf( leftValue );
- case 'contains':
- return -1 !== leftValue.indexOf( rightValue );
- case '!contains':
- return -1 === leftValue.indexOf( rightValue );
- case '<':
- return leftValue < rightValue;
- case '<=':
- return leftValue <= rightValue;
- case '>':
- return leftValue > rightValue;
- case '>=':
- return leftValue >= rightValue;
- default:
- return leftValue === rightValue;
- }
- };
- this.check = function( conditions, comparisonObject ) {
- var isOrCondition = 'or' === conditions.relation,
- conditionSucceed = ! isOrCondition;
+var ControlMultipleBaseItemView = __webpack_require__(4),
+ ControlImageDimensionsItemView;
- jQuery.each( conditions.terms, function() {
- var term = this,
- comparisonResult;
+ControlImageDimensionsItemView = ControlMultipleBaseItemView.extend({
+ ui: function ui() {
+ return {
+ inputWidth: 'input[data-setting="width"]',
+ inputHeight: 'input[data-setting="height"]',
- if ( term.terms ) {
- comparisonResult = self.check( term, comparisonObject );
- } else {
- var parsedName = term.name.match( /(\w+)(?:\[(\w+)])?/ ),
- value = comparisonObject[ parsedName[ 1 ] ];
+ btnApply: 'button.elementor-image-dimensions-apply-button'
+ };
+ },
+
+ // Override the base events
+ events: function events() {
+ return {
+ 'click @ui.btnApply': 'onApplyClicked'
+ };
+ },
+
+ onApplyClicked: function onApplyClicked(event) {
+ event.preventDefault();
- if ( parsedName[ 2 ] ) {
- value = value[ parsedName[ 2 ] ];
- }
+ this.setValue({
+ width: this.ui.inputWidth.val(),
+ height: this.ui.inputHeight.val()
+ });
+ }
+});
- comparisonResult = self.compare( value, term.value, term.operator );
- }
+module.exports = ControlImageDimensionsItemView;
- if ( isOrCondition ) {
- if ( comparisonResult ) {
- conditionSucceed = true;
- }
+/***/ }),
+/* 110 */
+/***/ (function(module, exports, __webpack_require__) {
- return ! comparisonResult;
- }
+"use strict";
- if ( ! comparisonResult ) {
- return conditionSucceed = false;
- }
- } );
- return conditionSucceed;
- };
-};
+var ControlMultipleBaseItemView = __webpack_require__(4),
+ ControlMediaItemView;
-module.exports = new Conditions();
+ControlMediaItemView = ControlMultipleBaseItemView.extend({
+ ui: function ui() {
+ var ui = ControlMultipleBaseItemView.prototype.ui.apply(this, arguments);
-},{}],110:[function(require,module,exports){
-var ViewModule = require( 'elementor-utils/view-module' ),
- Stylesheet = require( 'elementor-editor-utils/stylesheet' ),
- ControlsCSSParser;
+ ui.controlMedia = '.elementor-control-media';
+ ui.mediaImage = '.elementor-control-media-image';
+ ui.mediaVideo = '.elementor-control-media-video';
+ ui.frameOpeners = '.elementor-control-preview-area';
+ ui.deleteButton = '.elementor-control-media-delete';
-ControlsCSSParser = ViewModule.extend( {
- stylesheet: null,
+ return ui;
+ },
- getDefaultSettings: function() {
- return {
- id: 0,
- settingsModel: null,
- dynamicParsing: {}
- };
+ events: function events() {
+ return _.extend(ControlMultipleBaseItemView.prototype.events.apply(this, arguments), {
+ 'click @ui.frameOpeners': 'openFrame',
+ 'click @ui.deleteButton': 'deleteImage'
+ });
},
- getDefaultElements: function() {
- return {
- $stylesheetElement: jQuery( '<style>', { id: 'elementor-style-' + this.getSettings( 'id' ) } )
- };
+ getMediaType: function getMediaType() {
+ return this.model.get('media_type');
},
- initStylesheet: function() {
- var viewportBreakpoints = elementor.config.viewportBreakpoints;
+ applySavedValue: function applySavedValue() {
+ var url = this.getControlValue('url'),
+ mediaType = this.getMediaType();
- this.stylesheet = new Stylesheet();
+ if ('image' === mediaType) {
+ this.ui.mediaImage.css('background-image', url ? 'url(' + url + ')' : '');
+ } else if ('video' === mediaType) {
+ this.ui.mediaVideo.attr('src', url);
+ }
- this.stylesheet
- .addDevice( 'mobile', 0 )
- .addDevice( 'tablet', viewportBreakpoints.md )
- .addDevice( 'desktop', viewportBreakpoints.lg );
+ this.ui.controlMedia.toggleClass('elementor-media-empty', !url);
},
- addStyleRules: function( styleControls, values, controls, placeholders, replacements ) {
- var self = this,
- dynamicParsedValues = self.getSettings( 'settingsModel' ).parseDynamicSettings( values, self.getSettings( 'dynamicParsing' ), styleControls );
+ openFrame: function openFrame() {
+ if (!this.frame) {
+ this.initFrame();
+ }
- _.each( styleControls, function( control ) {
- if ( control.styleFields && control.styleFields.length ) {
- self.addRepeaterControlsStyleRules( values[ control.name ], control.styleFields, controls, placeholders, replacements );
- }
+ this.frame.open();
+ },
- if ( control.dynamic && control.dynamic.active && values.__dynamic__ && values.__dynamic__[ control.name ] ) {
- self.addDynamicControlStyleRules( values.__dynamic__[ control.name ], control );
- }
+ deleteImage: function deleteImage(event) {
+ event.stopPropagation();
- if ( ! control.selectors ) {
- return;
- }
+ this.setValue({
+ url: '',
+ id: ''
+ });
- self.addControlStyleRules( control, dynamicParsedValues, controls, placeholders, replacements );
- } );
+ this.applySavedValue();
},
- addControlStyleRules: function( control, values, controls, placeholders, replacements ) {
- var self = this;
+ /**
+ * Create a media modal select frame, and store it so the instance can be reused when needed.
+ */
+ initFrame: function initFrame() {
+ // Set current doc id to attach uploaded images.
+ wp.media.view.settings.post.id = elementor.config.document.id;
+ this.frame = wp.media({
+ button: {
+ text: elementor.translate('insert_media')
+ },
+ states: [new wp.media.controller.Library({
+ title: elementor.translate('insert_media'),
+ library: wp.media.query({ type: this.getMediaType() }),
+ multiple: false,
+ date: false
+ })]
+ });
- ControlsCSSParser.addControlStyleRules( self.stylesheet, control, controls, function( control ) {
- return self.getStyleControlValue( control, values );
- }, placeholders, replacements );
+ // When a file is selected, run a callback.
+ this.frame.on('insert select', this.select.bind(this));
},
- getStyleControlValue: function( control, values ) {
- var value = values[ control.name ];
+ /**
+ * Callback handler for when an attachment is selected in the media modal.
+ * Gets the selected image information, and sets it within the control.
+ */
+ select: function select() {
+ this.trigger('before:select');
- if ( control.selectors_dictionary ) {
- value = control.selectors_dictionary[ value ] || value;
- }
+ // Get the attachment from the modal frame.
+ var attachment = this.frame.state().get('selection').first().toJSON();
- if ( ! _.isNumber( value ) && _.isEmpty( value ) ) {
- return;
+ if (attachment.url) {
+ this.setValue({
+ url: attachment.url,
+ id: attachment.id
+ });
+
+ this.applySavedValue();
}
- return value;
+ this.trigger('after:select');
},
- addRepeaterControlsStyleRules: function( repeaterValues, repeaterControlsItems, controls, placeholders, replacements ) {
- var self = this;
+ onBeforeDestroy: function onBeforeDestroy() {
+ this.$el.remove();
+ }
+});
- repeaterControlsItems.forEach( function( item, index ) {
- var itemModel = repeaterValues.models[ index ];
+module.exports = ControlMediaItemView;
- self.addStyleRules(
- item,
- itemModel.attributes,
- controls,
- placeholders.concat( [ '{{CURRENT_ITEM}}' ] ),
- replacements.concat( [ '.elementor-repeater-item-' + itemModel.get( '_id' ) ] )
- );
- } );
- },
+/***/ }),
+/* 111 */
+/***/ (function(module, exports, __webpack_require__) {
- addDynamicControlStyleRules: function( value, control ) {
- var self = this;
+"use strict";
- elementor.dynamicTags.parseTagsText( value, control.dynamic, function( id, name, settings ) {
- var tag = elementor.dynamicTags.createTag( id, name, settings );
- if ( ! tag ) {
- return;
- }
+var ControlBaseDataView = __webpack_require__(0),
+ NumberValidator = __webpack_require__(112),
+ ControlNumberItemView;
- var tagSettingsModel = tag.model,
- styleControls = tagSettingsModel.getStyleControls();
+ControlNumberItemView = ControlBaseDataView.extend({
- if ( ! styleControls.length ) {
- return;
+ registerValidators: function registerValidators() {
+ ControlBaseDataView.prototype.registerValidators.apply(this, arguments);
+
+ var validationTerms = {},
+ model = this.model;
+
+ ['min', 'max'].forEach(function (term) {
+ var termValue = model.get(term);
+
+ if (_.isFinite(termValue)) {
+ validationTerms[term] = termValue;
}
+ });
- self.addStyleRules( tagSettingsModel.getStyleControls(), tagSettingsModel.attributes, tagSettingsModel.controls, [ '{{WRAPPER}}' ], [ '#elementor-tag-' + id ] );
- } );
- },
+ if (!jQuery.isEmptyObject(validationTerms)) {
+ this.addValidator(new NumberValidator({
+ validationTerms: validationTerms
+ }));
+ }
+ }
+});
- addStyleToDocument: function() {
- elementor.$previewContents.find( 'head' ).append( this.elements.$stylesheetElement );
+module.exports = ControlNumberItemView;
- this.elements.$stylesheetElement.text( this.stylesheet );
- },
+/***/ }),
+/* 112 */
+/***/ (function(module, exports, __webpack_require__) {
- removeStyleFromDocument: function() {
- this.elements.$stylesheetElement.remove();
- },
+"use strict";
- onInit: function() {
- ViewModule.prototype.onInit.apply( this, arguments );
- this.initStylesheet();
- }
-} );
+var Validator = __webpack_require__(18);
-ControlsCSSParser.addControlStyleRules = function( stylesheet, control, controls, valueCallback, placeholders, replacements ) {
- var value = valueCallback( control );
+module.exports = Validator.extend({
+ validationMethod: function validationMethod(newValue) {
+ var validationTerms = this.getSettings('validationTerms'),
+ errors = [];
- if ( undefined === value ) {
- return;
+ if (_.isFinite(newValue)) {
+ if (undefined !== validationTerms.min && newValue < validationTerms.min) {
+ errors.push('Value is less than minimum');
+ }
+
+ if (undefined !== validationTerms.max && newValue > validationTerms.max) {
+ errors.push('Value is greater than maximum');
+ }
+ }
+
+ return errors;
}
+});
- _.each( control.selectors, function( cssProperty, selector ) {
- var outputCssProperty;
+/***/ }),
+/* 113 */
+/***/ (function(module, exports, __webpack_require__) {
- try {
- outputCssProperty = cssProperty.replace( /{{(?:([^.}]+)\.)?([^}]*)}}/g, function( originalPhrase, controlName, placeholder ) {
- var parserControl = control,
- valueToInsert = value;
+"use strict";
- if ( controlName ) {
- parserControl = _.findWhere( controls, { name: controlName } );
- if ( ! parserControl ) {
- return '';
- }
+var ControlMultipleBaseItemView = __webpack_require__(4),
+ ControlOrderItemView;
- valueToInsert = valueCallback( parserControl );
- }
+ControlOrderItemView = ControlMultipleBaseItemView.extend({
+ ui: function ui() {
+ var ui = ControlMultipleBaseItemView.prototype.ui.apply(this, arguments);
- var parsedValue = elementor.getControlView( parserControl.type ).getStyleValue( placeholder.toLowerCase(), valueToInsert );
+ ui.reverseOrderLabel = '.elementor-control-order-label';
- if ( '' === parsedValue ) {
- throw '';
- }
+ return ui;
+ },
- return parsedValue;
- } );
- } catch ( e ) {
- return;
- }
+ changeLabelTitle: function changeLabelTitle() {
+ var reverseOrder = this.getControlValue('reverse_order');
- if ( _.isEmpty( outputCssProperty ) ) {
- return;
- }
+ this.ui.reverseOrderLabel.attr('title', elementor.translate(reverseOrder ? 'asc' : 'desc'));
+ },
- var devicePattern = /^(?:\([^)]+\)){1,2}/,
- deviceRules = selector.match( devicePattern ),
- query = {};
+ onRender: function onRender() {
+ ControlMultipleBaseItemView.prototype.onRender.apply(this, arguments);
- if ( deviceRules ) {
- deviceRules = deviceRules[0];
+ this.changeLabelTitle();
+ },
- selector = selector.replace( devicePattern, '' );
+ onInputChange: function onInputChange() {
+ this.changeLabelTitle();
+ }
+});
- var pureDevicePattern = /\(([^)]+)\)/g,
- pureDeviceRules = [],
- matches;
+module.exports = ControlOrderItemView;
- while ( matches = pureDevicePattern.exec( deviceRules ) ) {
- pureDeviceRules.push( matches[1] );
- }
+/***/ }),
+/* 114 */
+/***/ (function(module, exports, __webpack_require__) {
- _.each( pureDeviceRules, function( deviceRule ) {
- if ( 'desktop' === deviceRule ) {
- return;
- }
+"use strict";
- var device = deviceRule.replace( /\+$/, '' ),
- endPoint = device === deviceRule ? 'max' : 'min';
- query[ endPoint ] = device;
- } );
- }
+var ControlChooseView = __webpack_require__(33),
+ ControlPopoverStarterView;
- _.each( placeholders, function( placeholder, index ) {
- // Check if it's a RegExp
- var regexp = placeholder.source ? placeholder.source : placeholder,
- placeholderPattern = new RegExp( regexp, 'g' );
+ControlPopoverStarterView = ControlChooseView.extend({
+ ui: function ui() {
+ var ui = ControlChooseView.prototype.ui.apply(this, arguments);
+
+ ui.popoverToggle = '.elementor-control-popover-toggle-toggle';
- selector = selector.replace( placeholderPattern, replacements[ index ] );
- } );
+ return ui;
+ },
- if ( ! Object.keys( query ).length && control.responsive ) {
- query = _.pick( elementor.helpers.cloneObject( control.responsive ), [ 'min', 'max' ] );
+ events: function events() {
+ return _.extend(ControlChooseView.prototype.events.apply(this, arguments), {
+ 'click @ui.popoverToggle': 'onPopoverToggleClick'
+ });
+ },
- if ( 'desktop' === query.max ) {
- delete query.max;
- }
- }
+ onPopoverToggleClick: function onPopoverToggleClick() {
+ this.$el.next('.elementor-controls-popover').toggle();
+ }
+}, {
- stylesheet.addRules( selector, outputCssProperty, query );
- } );
-};
+ onPasteStyle: function onPasteStyle(control, clipboardValue) {
+ return !clipboardValue || clipboardValue === control.return_value;
+ }
+});
-module.exports = ControlsCSSParser;
+module.exports = ControlPopoverStarterView;
-},{"elementor-editor-utils/stylesheet":120,"elementor-utils/view-module":132}],111:[function(require,module,exports){
-var Debug = function() {
- var self = this,
- errorStack = [],
- settings = {},
- elements = {};
+/***/ }),
+/* 115 */
+/***/ (function(module, exports, __webpack_require__) {
- var initSettings = function() {
- settings = {
- debounceDelay: 500,
- urlsToWatch: [
- 'elementor/assets'
- ]
+"use strict";
+
+
+var ControlBaseDataView = __webpack_require__(0),
+ RepeaterRowView = __webpack_require__(35),
+ BaseSettingsModel = __webpack_require__(3),
+ ControlRepeaterItemView;
+
+ControlRepeaterItemView = ControlBaseDataView.extend({
+ ui: {
+ btnAddRow: '.elementor-repeater-add',
+ fieldContainer: '.elementor-repeater-fields-wrapper'
+ },
+
+ events: function events() {
+ return {
+ 'click @ui.btnAddRow': 'onButtonAddRowClick',
+ 'sortstart @ui.fieldContainer': 'onSortStart',
+ 'sortupdate @ui.fieldContainer': 'onSortUpdate',
+ 'sortstop @ui.fieldContainer': 'onSortStop'
};
- };
+ },
- var initElements = function() {
- elements.$window = jQuery( window );
- };
+ childView: RepeaterRowView,
- var onError = function( event ) {
- var originalEvent = event.originalEvent,
- error = originalEvent.error;
+ childViewContainer: '.elementor-repeater-fields-wrapper',
- if ( ! error ) {
- return;
- }
+ templateHelpers: function templateHelpers() {
+ return {
+ data: _.extend({}, this.model.toJSON(), { controlValue: [] })
+ };
+ },
- var isInWatchList = false,
- urlsToWatch = settings.urlsToWatch;
+ childViewOptions: function childViewOptions() {
+ return {
+ controlFields: this.model.get('fields'),
+ titleField: this.model.get('title_field')
+ };
+ },
- jQuery.each( urlsToWatch, function() {
- if ( -1 !== error.stack.indexOf( this ) ) {
- isInWatchList = true;
+ createItemModel: function createItemModel(attrs, options, controlView) {
+ options = options || {};
- return false;
- }
- } );
+ options.controls = controlView.model.get('fields');
- if ( ! isInWatchList ) {
- return;
+ if (!attrs._id) {
+ attrs._id = elementor.helpers.getUniqueID();
}
- self.addError( {
- type: error.name,
- message: error.message,
- url: originalEvent.filename,
- line: originalEvent.lineno,
- column: originalEvent.colno
- } );
- };
+ return new BaseSettingsModel(attrs, options);
+ },
- var bindEvents = function() {
- elements.$window.on( 'error', onError );
- };
+ fillCollection: function fillCollection() {
+ var controlName = this.model.get('name');
+ this.collection = this.elementSettingsModel.get(controlName);
- var init = function() {
- initSettings();
+ // Hack for history redo/undo
+ if (!(this.collection instanceof Backbone.Collection)) {
+ this.collection = new Backbone.Collection(this.collection, {
+ // Use `partial` to supply the `this` as an argument, but not as context
+ // the `_` is a place holder for original arguments: `attrs` & `options`
+ model: _.partial(this.createItemModel, _, _, this)
+ });
- initElements();
+ // Set the value silent
+ this.elementSettingsModel.set(controlName, this.collection, { silent: true });
+ this.listenTo(this.collection, 'change', this.onRowControlChange);
+ this.listenTo(this.collection, 'update', this.onRowUpdate, this);
+ }
+ },
- bindEvents();
+ initialize: function initialize(options) {
+ ControlBaseDataView.prototype.initialize.apply(this, arguments);
- self.sendErrors = _.debounce( self.sendErrors, settings.debounceDelay );
- };
+ this.fillCollection();
- this.addURLToWatch = function( url ) {
- settings.urlsToWatch.push( url );
- };
+ this.listenTo(this.collection, 'change', this.onRowControlChange);
+ this.listenTo(this.collection, 'update', this.onRowUpdate, this);
+ },
- this.addCustomError = function( error, category, tag ) {
- var errorInfo = {
- type: error.name,
- message: error.message,
- url: error.fileName || error.sourceURL,
- line: error.lineNumber || error.line,
- column: error.columnNumber || error.column,
- customFields: {
- category: category || 'general',
- tag: tag
- }
- };
+ addRow: function addRow(data, options) {
+ var id = elementor.helpers.getUniqueID();
- if ( ! errorInfo.url ) {
- var stackInfo = error.stack.match( /\n {4}at (.*?(?=:(\d+):(\d+)))/ );
+ if (data instanceof Backbone.Model) {
+ data.set('_id', id);
+ } else {
+ data._id = id;
+ }
- if ( stackInfo ) {
- errorInfo.url = stackInfo[1];
- errorInfo.line = stackInfo[2];
- errorInfo.column = stackInfo[3];
- }
+ return this.collection.add(data, options);
+ },
+
+ editRow: function editRow(rowView) {
+ if (this.currentEditableChild) {
+ var currentEditable = this.currentEditableChild.getChildViewContainer(this.currentEditableChild);
+ currentEditable.removeClass('editable');
+
+ // If the repeater contains TinyMCE editors, fire the `hide` trigger to hide floated toolbars
+ currentEditable.find('.elementor-wp-editor').each(function () {
+ tinymce.get(this.id).fire('hide');
+ });
}
- this.addError( errorInfo );
- };
+ if (this.currentEditableChild === rowView) {
+ delete this.currentEditableChild;
+ return;
+ }
- this.addError = function( errorParams ) {
- var defaultParams = {
- type: 'Error',
- timestamp: Math.floor( new Date().getTime() / 1000 ),
- message: null,
- url: null,
- line: null,
- column: null,
- customFields: {}
- };
+ rowView.getChildViewContainer(rowView).addClass('editable');
- errorStack.push( jQuery.extend( true, defaultParams, errorParams ) );
+ this.currentEditableChild = rowView;
- self.sendErrors();
- };
+ this.updateActiveRow();
+ },
- this.sendErrors = function() {
- // Avoid recursions on errors in ajax
- elements.$window.off( 'error', onError );
+ toggleMinRowsClass: function toggleMinRowsClass() {
+ if (!this.model.get('prevent_empty')) {
+ return;
+ }
- jQuery.ajax( {
- url: ElementorConfig.ajaxurl,
- method: 'POST',
- data: {
- action: 'elementor_debug_log',
- data: errorStack
- },
- success: function() {
- errorStack = [];
+ this.$el.toggleClass('elementor-repeater-has-minimum-rows', 1 >= this.collection.length);
+ },
+
+ updateActiveRow: function updateActiveRow() {
+ var activeItemIndex = 1;
+
+ if (this.currentEditableChild) {
+ activeItemIndex = this.currentEditableChild.itemIndex;
+ }
+
+ this.setEditSetting('activeItemIndex', activeItemIndex);
+ },
- // Restore error handler
- elements.$window.on( 'error', onError );
- }
- } );
- };
+ updateChildIndexes: function updateChildIndexes() {
+ var collection = this.collection;
- init();
-};
+ this.children.each(function (view) {
+ view.updateIndex(collection.indexOf(view.model) + 1);
-module.exports = new Debug();
+ view.setTitle();
+ });
+ },
-},{}],112:[function(require,module,exports){
-var heartbeat;
+ onRender: function onRender() {
+ ControlBaseDataView.prototype.onRender.apply(this, arguments);
-heartbeat = {
+ this.ui.fieldContainer.sortable({ axis: 'y', handle: '.elementor-repeater-row-tools' });
- init: function() {
- var modal;
+ this.toggleMinRowsClass();
+ },
- this.getModal = function() {
- if ( ! modal ) {
- modal = this.initModal();
- }
+ onSortStart: function onSortStart(event, ui) {
+ ui.item.data('oldIndex', ui.item.index());
+ },
- return modal;
- };
+ onSortStop: function onSortStop(event, ui) {
+ // Reload TinyMCE editors (if exist), it's a bug that TinyMCE content is missing after stop dragging
+ var self = this,
+ sortedIndex = ui.item.index();
- jQuery( document ).on( {
- 'heartbeat-send': function( event, data ) {
- data.elementor_post_lock = {
- post_ID: elementor.config.document.id
- };
- },
- 'heartbeat-tick': function( event, response ) {
- if ( response.locked_user ) {
- if ( elementor.saver.isEditorChanged() ) {
- elementor.saver.saveEditor( {
- status: 'autosave'
- } );
- }
+ if (-1 === sortedIndex) {
+ return;
+ }
- heartbeat.showLockMessage( response.locked_user );
- } else {
- heartbeat.getModal().hide();
- }
+ var sortedRowView = self.children.findByIndex(ui.item.index()),
+ rowControls = sortedRowView.children._views;
- elementor.config.nonce = response.elementorNonce;
- },
- 'heartbeat-tick.wp-refresh-nonces': function( event, response ) {
- var nonces = response['elementor-refresh-nonces'];
+ jQuery.each(rowControls, function () {
+ if ('wysiwyg' === this.model.get('type')) {
+ sortedRowView.render();
- if ( nonces ) {
- if ( nonces.heartbeatNonce ) {
- elementor.config.nonce = nonces.elementorNonce;
- }
+ delete self.currentEditableChild;
- if ( nonces.heartbeatNonce ) {
- window.heartbeatSettings.nonce = nonces.heartbeatNonce;
- }
- }
+ return false;
}
- } );
-
- if ( elementor.config.locked_user ) {
- heartbeat.showLockMessage( elementor.config.locked_user );
- }
+ });
},
- initModal: function() {
- var modal = elementor.dialogsManager.createWidget( 'lightbox', {
- headerMessage: elementor.translate( 'take_over' )
- } );
+ onSortUpdate: function onSortUpdate(event, ui) {
+ var oldIndex = ui.item.data('oldIndex'),
+ model = this.collection.at(oldIndex),
+ newIndex = ui.item.index();
- modal.addButton( {
- name: 'go_back',
- text: elementor.translate( 'go_back' ),
- callback: function() {
- parent.history.go( -1 );
- }
- } );
+ this.collection.remove(model);
- modal.addButton( {
- name: 'take_over',
- text: elementor.translate( 'take_over' ),
- callback: function() {
- wp.heartbeat.enqueue( 'elementor_force_post_lock', true );
- wp.heartbeat.connectNow();
- }
- } );
+ this.addRow(model, { at: newIndex });
+ },
- return modal;
+ onAddChild: function onAddChild() {
+ this.updateChildIndexes();
+ this.updateActiveRow();
},
- showLockMessage: function( lockedUser ) {
- var modal = heartbeat.getModal();
+ onRowUpdate: function onRowUpdate(collection, event) {
+ // Simulate `changed` and `_previousAttributes` values
+ var settings = this.elementSettingsModel,
+ collectionCloned = collection.clone(),
+ controlName = this.model.get('name');
- modal
- .setMessage( elementor.translate( 'dialog_user_taken_over', [ lockedUser ] ) )
- .show();
- }
-};
+ if (event.add) {
+ collectionCloned.remove(event.changes.added[0]);
+ } else {
+ collectionCloned.add(event.changes.removed[0], { at: event.index });
+ }
-module.exports = heartbeat;
+ settings.changed = {};
+ settings.changed[controlName] = collection;
-},{}],113:[function(require,module,exports){
-var helpers;
+ settings._previousAttributes = {};
+ settings._previousAttributes[controlName] = collectionCloned.toJSON();
-helpers = {
- _enqueuedFonts: [],
+ settings.trigger('change', settings, settings._pending);
- elementsHierarchy: {
- section: {
- column: {
- widget: null,
- section: null
- }
- }
+ delete settings.changed;
+ delete settings._previousAttributes;
+
+ this.toggleMinRowsClass();
},
- enqueueFont: function( font ) {
- if ( -1 !== this._enqueuedFonts.indexOf( font ) ) {
+ onRowControlChange: function onRowControlChange(model) {
+ // Simulate `changed` and `_previousAttributes` values
+ var changed = Object.keys(model.changed);
+
+ if (!changed.length) {
return;
}
- var fontType = elementor.config.controls.font.options[ font ],
- fontUrl,
+ var collectionCloned = model.collection.toJSON(),
+ modelIndex = model.collection.findIndex(model),
+ element = this._parent.model,
+ settings = element.get('settings'),
+ controlName = this.model.get('name');
- subsets = {
- 'ru_RU': 'cyrillic',
- 'uk': 'cyrillic',
- 'bg_BG': 'cyrillic',
- 'vi': 'vietnamese',
- 'el': 'greek',
- 'he_IL': 'hebrew'
- };
+ // Save it with old values
+ collectionCloned[modelIndex] = model._previousAttributes;
- switch ( fontType ) {
- case 'googlefonts' :
- fontUrl = 'https://fonts.googleapis.com/css?family=' + font + ':100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic';
+ settings.changed = {};
+ settings.changed[controlName] = model.collection;
- if ( subsets[ elementor.config.locale ] ) {
- fontUrl += '&subset=' + subsets[ elementor.config.locale ];
- }
+ settings._previousAttributes = {};
+ settings._previousAttributes[controlName] = collectionCloned;
- break;
+ settings.trigger('change', settings);
- case 'earlyaccess' :
- var fontLowerString = font.replace( /\s+/g, '' ).toLowerCase();
- fontUrl = 'https://fonts.googleapis.com/earlyaccess/' + fontLowerString + '.css';
- break;
- }
+ delete settings.changed;
+ delete settings._previousAttributes;
+ },
- if ( ! _.isEmpty( fontUrl ) ) {
- elementor.$previewContents.find( 'link:last' ).after( '<link href="' + fontUrl + '" rel="stylesheet" type="text/css">' );
- }
+ onButtonAddRowClick: function onButtonAddRowClick() {
+ var defaults = {};
+ _.each(this.model.get('fields'), function (field) {
+ defaults[field.name] = field['default'];
+ });
- this._enqueuedFonts.push( font );
+ var newModel = this.addRow(defaults),
+ newChildView = this.children.findByModel(newModel);
- elementor.channels.editor.trigger( 'font:insertion', fontType, font );
+ this.editRow(newChildView);
},
- resetEnqueuedFontsCache: function() {
- this._enqueuedFonts = [];
- },
+ onChildviewClickRemove: function onChildviewClickRemove(childView) {
+ childView.model.destroy();
- getElementChildType: function( elementType, container ) {
- if ( ! container ) {
- container = this.elementsHierarchy;
+ if (childView === this.currentEditableChild) {
+ delete this.currentEditableChild;
}
- if ( undefined !== container[ elementType ] ) {
+ this.updateChildIndexes();
+
+ this.updateActiveRow();
+ },
- if ( jQuery.isPlainObject( container[ elementType ] ) ) {
- return Object.keys( container[ elementType ] );
- }
+ onChildviewClickDuplicate: function onChildviewClickDuplicate(childView) {
+ var newModel = this.createItemModel(childView.model.toJSON(), {}, this);
- return null;
- }
+ this.addRow(newModel, { at: childView.itemIndex });
+ },
+
+ onChildviewClickEdit: function onChildviewClickEdit(childView) {
+ this.editRow(childView);
+ },
- for ( var type in container ) {
+ onAfterExternalChange: function onAfterExternalChange() {
+ // Update the collection with current value
+ this.fillCollection();
- if ( ! container.hasOwnProperty( type ) ) {
- continue;
- }
+ ControlBaseDataView.prototype.onAfterExternalChange.apply(this, arguments);
+ }
+});
- if ( ! jQuery.isPlainObject( container[ type ] ) ) {
- continue;
- }
+module.exports = ControlRepeaterItemView;
- var result = this.getElementChildType( elementType, container[ type ] );
+/***/ }),
+/* 116 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( result ) {
- return result;
- }
- }
+"use strict";
- return null;
- },
- getUniqueID: function() {
- return Math.random().toString( 16 ).substr( 2, 7 );
- },
+var ControlBaseView = __webpack_require__(7),
+ ControlSectionItemView;
- /*
- * @deprecated 2.0.0
- */
- stringReplaceAll: function( string, replaces ) {
- var re = new RegExp( Object.keys( replaces ).join( '|' ), 'gi' );
+ControlSectionItemView = ControlBaseView.extend({
+ ui: function ui() {
+ var ui = ControlBaseView.prototype.ui.apply(this, arguments);
- return string.replace( re, function( matched ) {
- return replaces[ matched ];
- } );
+ ui.heading = '.elementor-panel-heading';
+
+ return ui;
},
- isActiveControl: function( controlModel, values ) {
- var condition,
- conditions;
+ triggers: {
+ 'click': 'control:section:clicked'
+ }
+});
- // TODO: Better way to get this?
- if ( _.isFunction( controlModel.get ) ) {
- condition = controlModel.get( 'condition' );
- conditions = controlModel.get( 'conditions' );
- } else {
- condition = controlModel.condition;
- conditions = controlModel.conditions;
- }
+module.exports = ControlSectionItemView;
- // Multiple conditions with relations.
- if ( conditions ) {
- return elementor.conditions.check( conditions, values );
- }
+/***/ }),
+/* 117 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( _.isEmpty( condition ) ) {
- return true;
- }
+"use strict";
- var hasFields = _.filter( condition, function( conditionValue, conditionName ) {
- var conditionNameParts = conditionName.match( /([a-z_0-9]+)(?:\[([a-z_]+)])?(!?)$/i ),
- conditionRealName = conditionNameParts[1],
- conditionSubKey = conditionNameParts[2],
- isNegativeCondition = !! conditionNameParts[3],
- controlValue = values[ conditionRealName ];
- if ( undefined === controlValue ) {
- return true;
- }
+var ControlBaseDataView = __webpack_require__(0),
+ ControlSelectItemView;
- if ( conditionSubKey && Array.isArray( controlValue ) ) {
- controlValue = controlValue[ conditionSubKey ];
- }
+ControlSelectItemView = ControlBaseDataView.extend({}, {
- // If it's a non empty array - check if the conditionValue contains the controlValue,
- // If the controlValue is a non empty array - check if the controlValue contains the conditionValue
- // otherwise check if they are equal. ( and give the ability to check if the value is an empty array )
- var isContains;
- if ( _.isArray( conditionValue ) && ! _.isEmpty( conditionValue ) ) {
- isContains = _.contains( conditionValue, controlValue );
- } else if ( _.isArray( controlValue ) && ! _.isEmpty( controlValue ) ) {
- isContains = _.contains( controlValue, conditionValue );
- } else {
- isContains = _.isEqual( conditionValue, controlValue );
- }
+ onPasteStyle: function onPasteStyle(control, clipboardValue) {
+ if (control.groups) {
+ return control.groups.some(function (group) {
+ return ControlSelectItemView.onPasteStyle(group, clipboardValue);
+ });
+ }
- return isNegativeCondition ? isContains : ! isContains;
- } );
+ return undefined !== control.options[clipboardValue];
+ }
+});
- return _.isEmpty( hasFields );
- },
+module.exports = ControlSelectItemView;
- cloneObject: function( object ) {
- return JSON.parse( JSON.stringify( object ) );
- },
+/***/ }),
+/* 118 */
+/***/ (function(module, exports, __webpack_require__) {
- disableElementEvents: function( $element ) {
- $element.each( function() {
- var currentPointerEvents = this.style.pointerEvents;
+"use strict";
- if ( 'none' === currentPointerEvents ) {
- return;
- }
- jQuery( this )
- .data( 'backup-pointer-events', currentPointerEvents )
- .css( 'pointer-events', 'none' );
- } );
- },
+var ControlBaseUnitsItemView = __webpack_require__(34),
+ ControlSliderItemView;
- enableElementEvents: function( $element ) {
- $element.each( function() {
- var $this = jQuery( this ),
- backupPointerEvents = $this.data( 'backup-pointer-events' );
+ControlSliderItemView = ControlBaseUnitsItemView.extend({
+ ui: function ui() {
+ var ui = ControlBaseUnitsItemView.prototype.ui.apply(this, arguments);
- if ( undefined === backupPointerEvents ) {
- return;
- }
+ ui.slider = '.elementor-slider';
- $this
- .removeData( 'backup-pointer-events' )
- .css( 'pointer-events', backupPointerEvents );
- } );
+ return ui;
},
- getColorPickerPaletteIndex: function( paletteKey ) {
- return [ '7', '8', '1', '5', '2', '3', '6', '4' ].indexOf( paletteKey );
+ events: function events() {
+ return _.extend(ControlBaseUnitsItemView.prototype.events.apply(this, arguments), {
+ 'slide @ui.slider': 'onSlideChange'
+ });
},
- wpColorPicker: function( $element, options ) {
- var self = this,
- colorPickerScheme = elementor.schemes.getScheme( 'color-picker' ),
- items = _.sortBy( colorPickerScheme.items, function( item ) {
- return self.getColorPickerPaletteIndex( item.key );
- } ),
- defaultOptions = {
- width: window.innerWidth >= 1440 ? 271 : 251,
- palettes: _.pluck( items, 'value' )
- };
+ initSlider: function initSlider() {
+ var size = this.getControlValue('size'),
+ unitRange = this.getCurrentRange();
- if ( options ) {
- _.extend( defaultOptions, options );
- }
+ this.ui.input.attr(unitRange).val(size);
- return $element.wpColorPicker( defaultOptions );
+ this.ui.slider.slider(_.extend({}, unitRange, { value: size }));
},
- isInViewport: function( element, html ) {
- var rect = element.getBoundingClientRect();
- html = html || document.documentElement;
- return (
- rect.top >= 0 &&
- rect.left >= 0 &&
- rect.bottom <= ( window.innerHeight || html.clientHeight ) &&
- rect.right <= ( window.innerWidth || html.clientWidth )
- );
- },
-
- scrollToView: function( view ) {
- // Timeout according to preview resize css animation duration
- setTimeout( function() {
- elementor.$previewContents.find( 'html, body' ).animate( {
- scrollTop: view.$el.offset().top - elementor.$preview[0].contentWindow.innerHeight / 2
- } );
- }, 500 );
- }
-};
-
-module.exports = helpers;
-
-},{}],114:[function(require,module,exports){
-var ImagesManager;
+ resetSize: function resetSize() {
+ this.setValue('size', '');
-ImagesManager = function() {
- var self = this;
+ this.initSlider();
+ },
- var cache = {};
+ onReady: function onReady() {
+ this.initSlider();
+ },
- var debounceDelay = 300;
+ onSlideChange: function onSlideChange(event, ui) {
+ this.setValue('size', ui.value);
- var registeredItems = [];
+ this.ui.input.val(ui.value);
+ },
- var getNormalizedSize = function( image ) {
- var size,
- imageSize = image.size;
+ onInputChange: function onInputChange(event) {
+ var dataChanged = event.currentTarget.dataset.setting;
- if ( 'custom' === imageSize ) {
- var customDimension = image.dimension;
+ if ('size' === dataChanged) {
+ this.ui.slider.slider('value', this.getControlValue('size'));
+ } else if ('unit' === dataChanged) {
+ this.resetSize();
+ }
+ },
- if ( customDimension.width || customDimension.height ) {
- size = 'custom_' + customDimension.width + 'x' + customDimension.height;
- } else {
- return 'full';
- }
- } else {
- size = imageSize;
+ onBeforeDestroy: function onBeforeDestroy() {
+ if (this.ui.slider.data('uiSlider')) {
+ this.ui.slider.slider('destroy');
}
- return size;
- };
+ this.$el.remove();
+ }
+});
- self.onceTriggerChange = _.once( function( model ) {
- setTimeout( function() {
- model.get( 'settings' ).trigger( 'change', model.get( 'settings' ) );
- }, 700 );
- } );
+module.exports = ControlSliderItemView;
- self.getImageUrl = function( image ) {
- // Register for AJAX checking
- self.registerItem( image );
+/***/ }),
+/* 119 */
+/***/ (function(module, exports, __webpack_require__) {
- var imageUrl = self.getItem( image );
+"use strict";
- // If it's not in cache, like a new dropped widget or a custom size - get from settings
- if ( ! imageUrl ) {
- if ( 'custom' === image.size ) {
+var ControlBaseDataView = __webpack_require__(0),
+ ControlStructureItemView;
- if ( elementor.getPanelView() && 'editor' === elementor.getPanelView().getCurrentPageName() && image.model ) {
- // Trigger change again, so it's will load from the cache
- self.onceTriggerChange( image.model );
- }
+ControlStructureItemView = ControlBaseDataView.extend({
+ ui: function ui() {
+ var ui = ControlBaseDataView.prototype.ui.apply(this, arguments);
- return;
- }
+ ui.resetStructure = '.elementor-control-structure-reset';
- // If it's a new dropped widget
- imageUrl = image.url;
- }
+ return ui;
+ },
- return imageUrl;
- };
+ events: function events() {
+ return _.extend(ControlBaseDataView.prototype.events.apply(this, arguments), {
+ 'click @ui.resetStructure': 'onResetStructureClick'
+ });
+ },
- self.getItem = function( image ) {
- var size = getNormalizedSize( image ),
- id = image.id;
+ templateHelpers: function templateHelpers() {
+ var helpers = ControlBaseDataView.prototype.templateHelpers.apply(this, arguments);
- if ( ! size ) {
- return false;
- }
+ helpers.getMorePresets = this.getMorePresets.bind(this);
- if ( cache[ id ] && cache[ id ][ size ] ) {
- return cache[ id ][ size ];
- }
+ return helpers;
+ },
- return false;
- };
+ getCurrentEditedSection: function getCurrentEditedSection() {
+ var editor = elementor.getPanelView().getCurrentPageView();
- self.registerItem = function( image ) {
- if ( '' === image.id ) {
- // It's a new dropped widget
- return;
- }
+ return editor.getOption('editedElementView');
+ },
- if ( self.getItem( image ) ) {
- // It's already in cache
- return;
- }
+ getMorePresets: function getMorePresets() {
+ var parsedStructure = elementor.presetsFactory.getParsedStructure(this.getControlValue());
- registeredItems.push( image );
+ return elementor.presetsFactory.getPresets(parsedStructure.columnsCount);
+ },
- self.debounceGetRemoteItems();
- };
+ onInputChange: function onInputChange() {
+ this.getCurrentEditedSection().redefineLayout();
- self.getRemoteItems = function() {
- var requestedItems = [],
- registeredItemsLength = Object.keys( registeredItems ).length,
- image,
- index;
+ this.render();
+ },
- // It's one item, so we can render it from remote server
- if ( 0 === registeredItemsLength ) {
- return;
- } else if ( 1 === registeredItemsLength ) {
- image = registeredItems[ Object.keys( registeredItems )[0] ];
+ onResetStructureClick: function onResetStructureClick() {
+ this.getCurrentEditedSection().resetColumnsCustomSize();
+ }
+});
- if ( image && image.model ) {
- image.model.renderRemoteServer();
- return;
- }
- }
+module.exports = ControlStructureItemView;
- for ( index in registeredItems ) {
- image = registeredItems[ index ];
+/***/ }),
+/* 120 */
+/***/ (function(module, exports, __webpack_require__) {
- var size = getNormalizedSize( image ),
- id = image.id,
- isFirstTime = ! cache[ id ] || 0 === Object.keys( cache[ id ] ).length;
+"use strict";
- requestedItems.push( {
- id: id,
- size: size,
- is_first_time: isFirstTime
- } );
- }
- elementor.ajax.send(
- 'get_images_details', {
- data: {
- items: requestedItems
- },
- success: function( data ) {
- var id,
- size;
+var ControlBaseDataView = __webpack_require__(0);
- for ( id in data ) {
- if ( ! cache[ id ] ) {
- cache[ id ] = {};
- }
+module.exports = ControlBaseDataView.extend({
- for ( size in data[ id ] ) {
- cache[ id ][ size ] = data[ id ][ size ];
- }
- }
- registeredItems = [];
- }
- }
- );
- };
+ setInputValue: function setInputValue(input, value) {
+ this.$(input).prop('checked', this.model.get('return_value') === value);
+ }
+}, {
- self.debounceGetRemoteItems = _.debounce( self.getRemoteItems, debounceDelay );
-};
+ onPasteStyle: function onPasteStyle(control, clipboardValue) {
+ return !clipboardValue || clipboardValue === control.return_value;
+ }
+});
-module.exports = new ImagesManager();
+/***/ }),
+/* 121 */
+/***/ (function(module, exports, __webpack_require__) {
-},{}],115:[function(require,module,exports){
-/**
- * HTML5 - Drag and Drop
- */
-;(function( $ ) {
+"use strict";
- var hasFullDataTransferSupport = function( event ) {
- try {
- event.originalEvent.dataTransfer.setData( 'test', 'test' );
- event.originalEvent.dataTransfer.clearData( 'test' );
+var ControlBaseView = __webpack_require__(7),
+ ControlTabItemView;
- return true;
- } catch ( e ) {
- return false;
+ControlTabItemView = ControlBaseView.extend({
+ triggers: {
+ 'click': {
+ event: 'control:tab:clicked',
+ stopPropagation: false
}
- };
+ }
+});
- var Draggable = function( userSettings ) {
- var self = this,
- settings = {},
- elementsCache = {},
- defaultSettings = {
- element: '',
- groups: null,
- onDragStart: null,
- onDragEnd: null
- };
+module.exports = ControlTabItemView;
- var initSettings = function() {
- $.extend( true, settings, defaultSettings, userSettings );
- };
+/***/ }),
+/* 122 */
+/***/ (function(module, exports, __webpack_require__) {
- var initElementsCache = function() {
- elementsCache.$element = $( settings.element );
- };
+"use strict";
- var buildElements = function() {
- elementsCache.$element.attr( 'draggable', true );
- };
- var onDragEnd = function( event ) {
- if ( $.isFunction( settings.onDragEnd ) ) {
- settings.onDragEnd.call( elementsCache.$element, event, self );
- }
- };
+var BaseMultiple = __webpack_require__(4);
- var onDragStart = function( event ) {
- var groups = settings.groups || [],
- dataContainer = {
- groups: groups
- };
+module.exports = BaseMultiple.extend({
- if ( hasFullDataTransferSupport( event ) ) {
- event.originalEvent.dataTransfer.setData( JSON.stringify( dataContainer ), true );
- }
+ onReady: function onReady() {
+ var self = this,
+ positionBase = elementor.config.is_rtl ? 'right' : 'left',
+ last,
+ cache;
+
+ // Based on /wp-includes/js/tinymce/plugins/wplink/plugin.js.
+ this.ui.input.autocomplete({
+ source: function source(request, response) {
+ if (last === request.term) {
+ response(cache);
+ return;
+ }
+
+ if (/^https?:/.test(request.term) || request.term.indexOf('.') !== -1) {
+ return response();
+ }
- if ( $.isFunction( settings.onDragStart ) ) {
- settings.onDragStart.call( elementsCache.$element, event, self );
+ // Show Spinner.
+ self.ui.input.prev().show();
+
+ jQuery.post(window.ajaxurl, {
+ editor: 'elementor',
+ action: 'wp-link-ajax',
+ page: 1,
+ search: request.term,
+ _ajax_linking_nonce: jQuery('#_ajax_linking_nonce').val()
+ }, function (data) {
+ cache = data;
+ response(data);
+ }, 'json').always(function () {
+ // Hide Spinner.
+ self.ui.input.prev().hide();
+ });
+
+ last = request.term;
+ },
+ focus: function focus(event, ui) {
+ /*
+ * Don't empty the URL input field, when using the arrow keys to
+ * highlight items. See api.jqueryui.com/autocomplete/#event-focus
+ */
+ event.preventDefault();
+ },
+ select: function select(event, ui) {
+ self.ui.input.val(ui.item.permalink);
+ self.setValue('url', ui.item.permalink);
+ return false;
+ },
+ open: function open(event) {
+ jQuery(event.target).data('uiAutocomplete').menu.activeMenu.addClass('elementor-autocomplete-menu');
+ },
+ minLength: 2,
+ position: {
+ my: positionBase + ' top+2',
+ at: positionBase + ' bottom'
}
- };
+ })
+ // The `_renderItem` cannot be override via the arguments.
+ .autocomplete('instance')._renderItem = function (ul, item) {
+ var fallbackTitle = window.wpLinkL10n ? window.wpLinkL10n.noTitle : '',
+ title = item.title ? item.title : fallbackTitle;
- var attachEvents = function() {
- elementsCache.$element
- .on( 'dragstart', onDragStart )
- .on( 'dragend', onDragEnd );
+ return jQuery('<li role="option" id="mce-wp-autocomplete-' + item.ID + '">').append('<span>' + title + '</span> <span class="elementor-autocomplete-item-info">' + item.info + '</span>').appendTo(ul);
};
+ },
- var init = function() {
- initSettings();
+ onBeforeDestroy: function onBeforeDestroy() {
+ if (this.ui.input.data('autocomplete')) {
+ this.ui.input.autocomplete('destroy');
+ }
- initElementsCache();
+ this.$el.remove();
+ }
+});
- buildElements();
+/***/ }),
+/* 123 */
+/***/ (function(module, exports, __webpack_require__) {
- attachEvents();
- };
+"use strict";
- this.destroy = function() {
- elementsCache.$element.off( 'dragstart', onDragStart );
- elementsCache.$element.removeAttr( 'draggable' );
- };
+var ControlBaseDataView = __webpack_require__(0),
+ ControlWPWidgetItemView;
- init();
- };
+ControlWPWidgetItemView = ControlBaseDataView.extend({
+ ui: function ui() {
+ var ui = ControlBaseDataView.prototype.ui.apply(this, arguments);
- var Droppable = function( userSettings ) {
- var self = this,
- settings = {},
- elementsCache = {},
- currentElement,
- currentSide,
- defaultSettings = {
- element: '',
- items: '>',
- horizontalSensitivity: '10%',
- axis: [ 'vertical', 'horizontal' ],
- placeholder: true,
- currentElementClass: 'html5dnd-current-element',
- placeholderClass: 'html5dnd-placeholder',
- hasDraggingOnChildClass: 'html5dnd-has-dragging-on-child',
- groups: null,
- isDroppingAllowed: null,
- onDragEnter: null,
- onDragging: null,
- onDropping: null,
- onDragLeave: null
- };
+ ui.form = 'form';
+ ui.loading = '.wp-widget-form-loading';
+
+ return ui;
+ },
- var initSettings = function() {
- $.extend( settings, defaultSettings, userSettings );
+ events: function events() {
+ return {
+ 'keyup @ui.form :input': 'onFormChanged',
+ 'change @ui.form :input': 'onFormChanged'
};
+ },
- var initElementsCache = function() {
- elementsCache.$element = $( settings.element );
+ onFormChanged: function onFormChanged() {
+ var idBase = 'widget-' + this.model.get('id_base'),
+ settings = this.ui.form.elementorSerializeObject()[idBase].REPLACE_TO_ID;
- elementsCache.$placeholder = $( '<div>', { 'class': settings.placeholderClass } );
- };
+ this.setValue(settings);
+ },
- var hasHorizontalDetection = function() {
- return -1 !== settings.axis.indexOf( 'horizontal' );
- };
+ onReady: function onReady() {
+ var self = this;
- var hasVerticalDetection = function() {
- return -1 !== settings.axis.indexOf( 'vertical' );
- };
+ elementor.ajax.addRequest('editor_get_wp_widget_form', {
+ data: {
+ // Fake Widget ID
+ id: self.model.cid,
+ widget_type: self.model.get('widget'),
+ data: self.elementSettingsModel.toJSON()
+ },
+ success: function success(data) {
+ self.ui.form.html(data);
+ // WP >= 4.8
+ if (wp.textWidgets) {
+ self.ui.form.addClass('open');
+ var event = new jQuery.Event('widget-added');
+ wp.textWidgets.handleWidgetAdded(event, self.ui.form);
+ wp.mediaWidgets.handleWidgetAdded(event, self.ui.form);
- var checkHorizontal = function( offsetX, elementWidth ) {
- var isPercentValue,
- sensitivity;
+ // WP >= 4.9
+ if (wp.customHtmlWidgets) {
+ wp.customHtmlWidgets.handleWidgetAdded(event, self.ui.form);
+ }
+ }
- if ( ! hasHorizontalDetection() ) {
- return false;
+ elementor.hooks.doAction('panel/widgets/' + self.model.get('widget') + '/controls/wp_widget/loaded', self);
}
+ });
+ }
+});
- if ( ! hasVerticalDetection() ) {
- return offsetX > elementWidth / 2 ? 'right' : 'left';
- }
+module.exports = ControlWPWidgetItemView;
- sensitivity = settings.horizontalSensitivity.match( /\d+/ );
+/***/ }),
+/* 124 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( ! sensitivity ) {
- return false;
- }
+"use strict";
- sensitivity = sensitivity[0];
- isPercentValue = /%$/.test( settings.horizontalSensitivity );
+var ControlBaseDataView = __webpack_require__(0),
+ ControlWysiwygItemView;
- if ( isPercentValue ) {
- sensitivity = elementWidth / sensitivity;
- }
+ControlWysiwygItemView = ControlBaseDataView.extend({
- if ( offsetX > elementWidth - sensitivity ) {
- return 'right';
- } else if ( offsetX < sensitivity ) {
- return 'left';
- }
+ editor: null,
- return false;
- };
+ ui: function ui() {
+ var ui = ControlBaseDataView.prototype.ui.apply(this, arguments);
- var setSide = function( event ) {
- var $element = $( currentElement ),
- elementHeight = $element.outerHeight() - elementsCache.$placeholder.outerHeight(),
- elementWidth = $element.outerWidth();
+ jQuery.extend(ui, {
+ inputWrapper: '.elementor-control-input-wrapper'
+ });
- event = event.originalEvent;
+ return ui;
+ },
- if ( currentSide = checkHorizontal( event.offsetX, elementWidth ) ) {
- return;
- }
+ events: function events() {
+ return _.extend(ControlBaseDataView.prototype.events.apply(this, arguments), {
+ 'keyup textarea.elementor-wp-editor': 'onBaseInputChange'
+ });
+ },
- if ( ! hasVerticalDetection() ) {
- currentSide = null;
+ // List of buttons to move {buttonToMove: afterButton}
+ buttons: {
+ addToBasic: {
+ underline: 'italic'
+ },
+ addToAdvanced: {},
+ moveToAdvanced: {
+ blockquote: 'removeformat',
+ alignleft: 'blockquote',
+ aligncenter: 'alignleft',
+ alignright: 'aligncenter'
+ },
+ moveToBasic: {},
+ removeFromBasic: ['unlink', 'wp_more'],
+ removeFromAdvanced: []
+ },
- return;
- }
+ initialize: function initialize() {
+ ControlBaseDataView.prototype.initialize.apply(this, arguments);
- var elementPosition = currentElement.getBoundingClientRect();
+ var self = this;
- currentSide = event.clientY > elementPosition.top + elementHeight / 2 ? 'bottom' : 'top';
- };
+ self.editorID = 'elementorwpeditor' + self.cid;
- var insertPlaceholder = function() {
- if ( ! settings.placeholder ) {
- return;
+ // Wait a cycle before initializing the editors.
+ _.defer(function () {
+ // Initialize QuickTags, and set as the default mode.
+ quicktags({
+ buttons: 'strong,em,del,link,img,close',
+ id: self.editorID
+ });
+
+ if (elementor.config.rich_editing_enabled) {
+ switchEditors.go(self.editorID, 'tmce');
}
- var insertMethod = 'top' === currentSide ? 'prependTo' : 'appendTo';
+ delete QTags.instances[0];
+ });
- elementsCache.$placeholder[ insertMethod ]( currentElement );
+ if (!elementor.config.rich_editing_enabled) {
+ self.$el.addClass('elementor-rich-editing-disabled');
+
+ return;
+ }
+
+ var editorConfig = {
+ id: self.editorID,
+ selector: '#' + self.editorID,
+ setup: function setup(editor) {
+ self.editor = editor;
+ }
};
- var isDroppingAllowed = function( event ) {
- var dataTransferTypes,
- draggableGroups,
- isGroupMatch,
- isDroppingAllowed;
+ tinyMCEPreInit.mceInit[self.editorID] = _.extend(_.clone(tinyMCEPreInit.mceInit.elementorwpeditor), editorConfig);
- if ( settings.groups && hasFullDataTransferSupport( event ) ) {
- dataTransferTypes = event.originalEvent.dataTransfer.types;
+ if (!elementor.config.tinymceHasCustomConfig) {
+ self.rearrangeButtons();
+ }
+ },
- isGroupMatch = false;
+ applySavedValue: function applySavedValue() {
+ if (!this.editor) {
+ return;
+ }
- dataTransferTypes = Array.prototype.slice.apply( dataTransferTypes ); // Convert to array, since Firefox hold it as DOMStringList
+ var controlValue = this.getControlValue();
- dataTransferTypes.forEach( function( type ) {
- try {
- draggableGroups = JSON.parse( type );
+ this.editor.setContent(controlValue);
- if ( ! draggableGroups.groups.slice ) {
- return;
- }
+ // Update also the plain textarea
+ jQuery('#' + this.editorID).val(controlValue);
+ },
- settings.groups.forEach( function( groupName ) {
+ saveEditor: function saveEditor() {
+ this.editor.save();
- if ( -1 !== draggableGroups.groups.indexOf( groupName ) ) {
- isGroupMatch = true;
+ this.setValue(this.editor.getContent());
+ },
- return false; // stops the forEach from extra loops
- }
- } );
- } catch ( e ) {
- }
- } );
+ moveButtons: function moveButtons(buttonsToMove, from, to) {
+ if (!to) {
+ to = from;
- if ( ! isGroupMatch ) {
- return false;
- }
- }
+ from = null;
+ }
- if ( $.isFunction( settings.isDroppingAllowed ) ) {
+ _.each(buttonsToMove, function (afterButton, button) {
+ var afterButtonIndex = to.indexOf(afterButton);
- isDroppingAllowed = settings.isDroppingAllowed.call( currentElement, currentSide, event, self );
+ if (from) {
+ var buttonIndex = from.indexOf(button);
- if ( ! isDroppingAllowed ) {
- return false;
+ if (-1 === buttonIndex) {
+ throw new ReferenceError('Trying to move non-existing button `' + button + '`');
}
- }
- return true;
- };
-
- var onDragEnter = function( event ) {
- event.stopPropagation();
+ from.splice(buttonIndex, 1);
+ }
- if ( currentElement ) {
- return;
+ if (-1 === afterButtonIndex) {
+ throw new ReferenceError('Trying to move button after non-existing button `' + afterButton + '`');
}
- currentElement = this;
+ to.splice(afterButtonIndex + 1, 0, button);
+ });
+ },
- elementsCache.$element.parents().each( function() {
- var droppableInstance = $( this ).data( 'html5Droppable' );
+ rearrangeButtons: function rearrangeButtons() {
+ var editorProps = tinyMCEPreInit.mceInit[this.editorID],
+ editorBasicToolbarButtons = editorProps.toolbar1.split(','),
+ editorAdvancedToolbarButtons = editorProps.toolbar2.split(',');
- if ( ! droppableInstance ) {
- return;
- }
+ editorBasicToolbarButtons = _.difference(editorBasicToolbarButtons, this.buttons.removeFromBasic);
- droppableInstance.doDragLeave();
- } );
+ editorAdvancedToolbarButtons = _.difference(editorAdvancedToolbarButtons, this.buttons.removeFromAdvanced);
- setSide( event );
+ this.moveButtons(this.buttons.moveToBasic, editorAdvancedToolbarButtons, editorBasicToolbarButtons);
- if ( ! isDroppingAllowed( event ) ) {
- return;
- }
+ this.moveButtons(this.buttons.moveToAdvanced, editorBasicToolbarButtons, editorAdvancedToolbarButtons);
- insertPlaceholder();
+ this.moveButtons(this.buttons.addToBasic, editorBasicToolbarButtons);
- elementsCache.$element.addClass( settings.hasDraggingOnChildClass );
+ this.moveButtons(this.buttons.addToAdvanced, editorAdvancedToolbarButtons);
- $( currentElement ).addClass( settings.currentElementClass );
+ editorProps.toolbar1 = editorBasicToolbarButtons.join(',');
+ editorProps.toolbar2 = editorAdvancedToolbarButtons.join(',');
+ },
- if ( $.isFunction( settings.onDragEnter ) ) {
- settings.onDragEnter.call( currentElement, currentSide, event, self );
- }
- };
+ onReady: function onReady() {
+ var self = this;
- var onDragOver = function( event ) {
- event.stopPropagation();
+ var $editor = jQuery(elementor.config.wp_editor.replace(/elementorwpeditor/g, self.editorID).replace('%%EDITORCONTENT%%', self.getControlValue()));
- if ( ! currentElement ) {
- onDragEnter.call( this, event );
- }
+ self.ui.inputWrapper.html($editor);
- var oldSide = currentSide;
+ setTimeout(function () {
+ self.editor.on('keyup change undo redo SetContent', self.saveEditor.bind(self));
+ }, 100);
+ },
- setSide( event );
+ onBeforeDestroy: function onBeforeDestroy() {
+ // Remove TinyMCE and QuickTags instances
+ delete QTags.instances[this.editorID];
- if ( ! isDroppingAllowed( event ) ) {
- return;
- }
+ if (!elementor.config.rich_editing_enabled) {
+ return;
+ }
- event.preventDefault();
+ tinymce.EditorManager.execCommand('mceRemoveEditor', true, this.editorID);
- if ( oldSide !== currentSide ) {
- insertPlaceholder();
- }
+ // Cleanup PreInit data
+ delete tinyMCEPreInit.mceInit[this.editorID];
+ delete tinyMCEPreInit.qtInit[this.editorID];
+ }
+});
- if ( $.isFunction( settings.onDragging ) ) {
- settings.onDragging.call( this, currentSide, event, self );
- }
- };
+module.exports = ControlWysiwygItemView;
- var onDragLeave = function( event ) {
- var elementPosition = this.getBoundingClientRect();
+/***/ }),
+/* 125 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( 'dragleave' === event.type && ! (
- event.clientX < elementPosition.left ||
- event.clientX >= elementPosition.right ||
- event.clientY < elementPosition.top ||
- event.clientY >= elementPosition.bottom
- ) ) {
- return;
- }
+"use strict";
- $( currentElement ).removeClass( settings.currentElementClass );
- self.doDragLeave();
- };
+var BaseSettingsModel = __webpack_require__(3),
+ ColumnSettingsModel;
- var onDrop = function( event ) {
- setSide( event );
+ColumnSettingsModel = BaseSettingsModel.extend({
+ defaults: {
+ _column_size: 100
+ }
+});
- if ( ! isDroppingAllowed( event ) ) {
- return;
- }
+module.exports = ColumnSettingsModel;
- event.preventDefault();
+/***/ }),
+/* 126 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( $.isFunction( settings.onDropping ) ) {
- settings.onDropping.call( this, currentSide, event, self );
- }
- };
+"use strict";
- var attachEvents = function() {
- elementsCache.$element
- .on( 'dragenter', settings.items, onDragEnter )
- .on( 'dragover', settings.items, onDragOver )
- .on( 'drop', settings.items, onDrop )
- .on( 'dragleave drop', settings.items, onDragLeave );
- };
- var init = function() {
- initSettings();
+var BaseElementView = __webpack_require__(10),
+ WidgetView;
- initElementsCache();
+WidgetView = BaseElementView.extend({
+ _templateType: null,
- attachEvents();
- };
+ toggleEditTools: true,
- this.doDragLeave = function() {
- if ( settings.placeholder ) {
- elementsCache.$placeholder.remove();
- }
+ getTemplate: function getTemplate() {
+ var editModel = this.getEditModel();
- elementsCache.$element.removeClass( settings.hasDraggingOnChildClass );
+ if ('remote' !== this.getTemplateType()) {
+ return Marionette.TemplateCache.get('#tmpl-elementor-' + editModel.get('widgetType') + '-content');
+ } else {
+ return _.template('');
+ }
+ },
- if ( $.isFunction( settings.onDragLeave ) ) {
- settings.onDragLeave.call( currentElement, event, self );
- }
+ className: function className() {
+ var baseClasses = BaseElementView.prototype.className.apply(this, arguments);
- currentElement = currentSide = null;
- };
+ return baseClasses + ' elementor-widget ' + elementor.getElementData(this.getEditModel()).html_wrapper_class;
+ },
- this.destroy = function() {
- elementsCache.$element
- .off( 'dragenter', settings.items, onDragEnter )
- .off( 'dragover', settings.items, onDragOver )
- .off( 'drop', settings.items, onDrop )
- .off( 'dragleave drop', settings.items, onDragLeave );
- };
+ events: function events() {
+ var events = BaseElementView.prototype.events.apply(this, arguments);
- init();
- };
+ events.click = 'onClickEdit';
- var plugins = {
- html5Draggable: Draggable,
- html5Droppable: Droppable
- };
+ return events;
+ },
- $.each( plugins, function( pluginName, Plugin ) {
- $.fn[ pluginName ] = function( options ) {
- options = options || {};
+ behaviors: function behaviors() {
+ var behaviors = BaseElementView.prototype.behaviors.apply(this, arguments);
- this.each( function() {
- var instance = $.data( this, pluginName ),
- hasInstance = instance instanceof Plugin;
+ _.extend(behaviors, {
+ InlineEditing: {
+ behaviorClass: __webpack_require__(127),
+ inlineEditingClass: 'elementor-inline-editing'
+ }
+ });
- if ( hasInstance ) {
+ return elementor.hooks.applyFilters('elements/widget/behaviors', behaviors, this);
+ },
- if ( 'destroy' === options ) {
+ initialize: function initialize() {
+ BaseElementView.prototype.initialize.apply(this, arguments);
- instance.destroy();
+ var editModel = this.getEditModel();
- $.removeData( this, pluginName );
- }
+ editModel.on({
+ 'before:remote:render': this.onModelBeforeRemoteRender.bind(this),
+ 'remote:render': this.onModelRemoteRender.bind(this)
+ });
- return;
- }
+ if ('remote' === this.getTemplateType() && !this.getEditModel().getHtmlCache()) {
+ editModel.renderRemoteServer();
+ }
- options.element = this;
+ var onRenderMethod = this.onRender;
- $.data( this, pluginName, new Plugin( options ) );
- } );
+ this.render = _.throttle(this.render, 300);
- return this;
+ this.onRender = function () {
+ _.defer(onRenderMethod.bind(this));
};
- } );
-})( jQuery );
+ },
-},{}],116:[function(require,module,exports){
-/*!
- * jQuery Serialize Object v1.0.1
- */
-(function( $ ) {
- $.fn.elementorSerializeObject = function() {
- var serializedArray = this.serializeArray(),
- data = {};
+ getContextMenuGroups: function getContextMenuGroups() {
+ var groups = BaseElementView.prototype.getContextMenuGroups.apply(this, arguments),
+ transferGroupIndex = groups.indexOf(_.findWhere(groups, { name: 'transfer' }));
- var parseObject = function( dataContainer, key, value ) {
- var isArrayKey = /^[^\[\]]+\[]/.test( key ),
- isObjectKey = /^[^\[\]]+\[[^\[\]]+]/.test( key ),
- keyName = key.replace( /\[.*/, '' );
+ groups.splice(transferGroupIndex + 1, 0, {
+ name: 'save',
+ actions: [{
+ name: 'save',
+ title: elementor.translate('save_as_global'),
+ shortcut: jQuery('<i>', { 'class': 'eicon-pro-icon' })
+ }]
+ });
- if ( isArrayKey ) {
- if ( ! dataContainer[ keyName ] ) {
- dataContainer[ keyName ] = [];
- }
- } else {
- if ( ! isObjectKey ) {
- if ( dataContainer.push ) {
- dataContainer.push( value );
- } else {
- dataContainer[ keyName ] = value;
- }
+ return groups;
+ },
- return;
- }
+ render: function render() {
+ if (this.model.isRemoteRequestActive()) {
+ this.handleEmptyWidget();
- if ( ! dataContainer[ keyName ] ) {
- dataContainer[ keyName ] = {};
- }
- }
+ this.$el.addClass('elementor-element');
- var nextKeys = key.match( /\[[^\[\]]*]/g );
+ return;
+ }
- nextKeys[ 0 ] = nextKeys[ 0 ].replace( /\[|]/g, '' );
+ Marionette.CompositeView.prototype.render.apply(this, arguments);
+ },
- return parseObject( dataContainer[ keyName ], nextKeys.join( '' ), value );
- };
+ handleEmptyWidget: function handleEmptyWidget() {
+ // TODO: REMOVE THIS !!
+ // TEMP CODING !!
+ this.$el.addClass('elementor-widget-empty').append('<i class="elementor-widget-empty-icon ' + this.getEditModel().getIcon() + '"></i>');
+ },
- $.each( serializedArray, function() {
- parseObject( data, this.name, this.value );
- } );
- return data;
- };
-})( jQuery );
+ getTemplateType: function getTemplateType() {
+ if (null === this._templateType) {
+ var editModel = this.getEditModel(),
+ $template = jQuery('#tmpl-elementor-' + editModel.get('widgetType') + '-content');
-},{}],117:[function(require,module,exports){
-var Module = require( 'elementor-utils/module' );
+ this._templateType = $template.length ? 'js' : 'remote';
+ }
-module.exports = Module.extend( {
- initToast: function() {
- var toast = elementor.dialogsManager.createWidget( 'buttons', {
- id: 'elementor-toast',
- position: {
- my: 'center bottom',
- at: 'center bottom-10',
- of: '#elementor-panel-content-wrapper',
- autoRefresh: true
- },
- hide: {
- onClick: true,
- auto: true,
- autoDelay: 10000
- },
- effects: {
- show: function() {
- var $widget = toast.getElements( 'widget' );
+ return this._templateType;
+ },
- $widget.show();
+ getHTMLContent: function getHTMLContent(html) {
+ var htmlCache = this.getEditModel().getHtmlCache();
- toast.refreshPosition();
+ return htmlCache || html;
+ },
- var top = parseInt( $widget.css( 'top' ), 10 );
+ attachElContent: function attachElContent(html) {
+ var self = this,
+ htmlContent = self.getHTMLContent(html);
- $widget
- .hide()
- .css( 'top', top + 100 );
+ _.defer(function () {
+ elementorFrontend.getElements('window').jQuery(self.el).html(htmlContent);
- $widget.animate( {
- opacity: 'show',
- height: 'show',
- paddingBottom: 'show',
- paddingTop: 'show',
- top: top
- }, {
- easing: 'linear',
- duration: 300
- } );
- },
- hide: function() {
- var $widget = toast.getElements( 'widget' ),
- top = parseInt( $widget.css( 'top' ), 10 );
+ self.bindUIElements(); // Build again the UI elements since the content attached just now
+ });
- $widget.animate( {
- opacity: 'hide',
- height: 'hide',
- paddingBottom: 'hide',
- paddingTop: 'hide',
- top: top + 100
- }, {
- easing: 'linear',
- duration: 300
- } );
- }
- },
- buttonTag: 'div'
- } );
+ return this;
+ },
- this.getToast = function() {
- return toast;
- };
+ addInlineEditingAttributes: function addInlineEditingAttributes(key, toolbar) {
+ this.addRenderAttribute(key, {
+ 'class': 'elementor-inline-editing',
+ 'data-elementor-setting-key': key
+ });
+
+ if (toolbar) {
+ this.addRenderAttribute(key, {
+ 'data-elementor-inline-editing-toolbar': toolbar
+ });
+ }
},
- showToast: function( options ) {
- var toast = this.getToast();
+ getRepeaterSettingKey: function getRepeaterSettingKey(settingKey, repeaterKey, repeaterItemIndex) {
+ return [repeaterKey, repeaterItemIndex, settingKey].join('.');
+ },
- toast.setMessage( options.message );
+ onModelBeforeRemoteRender: function onModelBeforeRemoteRender() {
+ this.$el.addClass('elementor-loading');
+ },
- toast.getElements( 'buttonsWrapper' ).empty();
+ onBeforeDestroy: function onBeforeDestroy() {
+ // Remove old style from the DOM.
+ elementor.$previewContents.find('#elementor-style-' + this.model.cid).remove();
+ },
- if ( options.buttons ) {
- options.buttons.forEach( function( button ) {
- toast.addButton( button );
- } );
+ onModelRemoteRender: function onModelRemoteRender() {
+ if (this.isDestroyed) {
+ return;
}
- toast.show();
+ this.$el.removeClass('elementor-loading');
+ this.render();
},
- onInit: function() {
- this.initToast();
- }
-} );
+ onRender: function onRender() {
+ var self = this;
-},{"elementor-utils/module":131}],118:[function(require,module,exports){
-var presetsFactory;
+ BaseElementView.prototype.onRender.apply(self, arguments);
-presetsFactory = {
+ var editModel = self.getEditModel(),
+ skinType = editModel.getSetting('_skin') || 'default';
- getPresetsDictionary: function() {
- return {
- 11: 100 / 9,
- 12: 100 / 8,
- 14: 100 / 7,
- 16: 100 / 6,
- 33: 100 / 3,
- 66: 2 / 3 * 100,
- 83: 5 / 6 * 100
- };
+ self.$el.attr('data-element_type', editModel.get('widgetType') + '.' + skinType).removeClass('elementor-widget-empty').children('.elementor-widget-empty-icon').remove();
+
+ // TODO: Find better way to detect if all images are loaded
+ self.$el.imagesLoaded().always(function () {
+ setTimeout(function () {
+ if (1 > self.$el.height()) {
+ self.handleEmptyWidget();
+ }
+ }, 200);
+ // Is element empty?
+ });
},
- getAbsolutePresetValues: function( preset ) {
- var clonedPreset = elementor.helpers.cloneObject( preset ),
- presetDictionary = this.getPresetsDictionary();
+ onClickEdit: function onClickEdit() {
+ this.model.trigger('request:edit');
+ }
+});
- _.each( clonedPreset, function( unitValue, unitIndex ) {
- if ( presetDictionary[ unitValue ] ) {
- clonedPreset[ unitIndex ] = presetDictionary[ unitValue ];
- }
- } );
+module.exports = WidgetView;
- return clonedPreset;
- },
+/***/ }),
+/* 127 */
+/***/ (function(module, exports, __webpack_require__) {
- getPresets: function( columnsCount, presetIndex ) {
- var presets = elementor.helpers.cloneObject( elementor.config.elements.section.presets );
+"use strict";
- if ( columnsCount ) {
- presets = presets[ columnsCount ];
- }
- if ( presetIndex ) {
- presets = presets[ presetIndex ];
- }
+var InlineEditingBehavior;
- return presets;
- },
+InlineEditingBehavior = Marionette.Behavior.extend({
+ editing: false,
- getPresetByStructure: function( structure ) {
- var parsedStructure = this.getParsedStructure( structure );
+ $currentEditingArea: null,
- return this.getPresets( parsedStructure.columnsCount, parsedStructure.presetIndex );
+ ui: function ui() {
+ return {
+ inlineEditingArea: '.' + this.getOption('inlineEditingClass')
+ };
},
- getParsedStructure: function( structure ) {
- structure += ''; // Make sure this is a string
-
+ events: function events() {
return {
- columnsCount: structure.slice( 0, -1 ),
- presetIndex: structure.substr( -1 )
+ 'click @ui.inlineEditingArea': 'onInlineEditingClick',
+ 'input @ui.inlineEditingArea': 'onInlineEditingUpdate'
};
},
- getPresetSVG: function( preset, svgWidth, svgHeight, separatorWidth ) {
- svgWidth = svgWidth || 100;
- svgHeight = svgHeight || 50;
- separatorWidth = separatorWidth || 2;
+ getEditingSettingKey: function getEditingSettingKey() {
+ return this.$currentEditingArea.data().elementorSettingKey;
+ },
- var absolutePresetValues = this.getAbsolutePresetValues( preset ),
- presetSVGPath = this._generatePresetSVGPath( absolutePresetValues, svgWidth, svgHeight, separatorWidth );
+ startEditing: function startEditing($element) {
+ var elementorSettingKey = $element.data().elementorSettingKey,
+ settingKey = elementorSettingKey,
+ keyParts = elementorSettingKey.split('.'),
+ isRepeaterKey = 3 === keyParts.length,
+ settingsModel = this.view.getEditModel().get('settings');
- return this._createSVGPreset( presetSVGPath, svgWidth, svgHeight );
- },
+ if (isRepeaterKey) {
+ settingsModel = settingsModel.get(keyParts[0]).models[keyParts[1]];
- _createSVGPreset: function( presetPath, svgWidth, svgHeight ) {
- var svg = document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' );
+ settingKey = keyParts[2];
+ }
- svg.setAttributeNS( 'http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink' );
- svg.setAttribute( 'viewBox', '0 0 ' + svgWidth + ' ' + svgHeight );
+ var dynamicSettings = settingsModel.get('__dynamic__'),
+ isDynamic = dynamicSettings && dynamicSettings[settingKey];
- var path = document.createElementNS( 'http://www.w3.org/2000/svg', 'path' );
+ if (this.editing || isDynamic || 'edit' !== elementor.channels.dataEditMode.request('activeMode') || this.view.model.isRemoteRequestActive()) {
+ return;
+ }
- path.setAttribute( 'd', presetPath );
+ this.$currentEditingArea = $element;
- svg.appendChild( path );
+ var elementData = this.$currentEditingArea.data(),
+ elementDataToolbar = elementData.elementorInlineEditingToolbar,
+ mode = 'advanced' === elementDataToolbar ? 'advanced' : 'basic',
+ editModel = this.view.getEditModel(),
+ inlineEditingConfig = elementor.config.inlineEditing,
+ contentHTML = editModel.getSetting(this.getEditingSettingKey());
- return svg;
- },
+ if ('advanced' === mode) {
+ contentHTML = wp.editor.autop(contentHTML);
+ }
- _generatePresetSVGPath: function( preset, svgWidth, svgHeight, separatorWidth ) {
- var DRAW_SIZE = svgWidth - separatorWidth * ( preset.length - 1 );
+ /**
+ * Replace rendered content with unrendered content.
+ * This way the user can edit the original content, before shortcodes and oEmbeds are fired.
+ */
+ this.$currentEditingArea.html(contentHTML);
- var xPointer = 0,
- dOutput = '';
+ var ElementorInlineEditor = elementorFrontend.getElements('window').ElementorInlineEditor;
- for ( var i = 0; i < preset.length; i++ ) {
- if ( i ) {
- dOutput += ' ';
- }
+ this.editing = true;
- var increment = preset[ i ] / 100 * DRAW_SIZE;
+ this.view.allowRender = false;
- xPointer += increment;
+ // Avoid retrieving of old content (e.g. in case of sorting)
+ this.view.model.setHtmlCache('');
- dOutput += 'M' + ( +xPointer.toFixed( 4 ) ) + ',0';
+ this.editor = new ElementorInlineEditor({
+ linksInNewWindow: true,
+ stay: false,
+ editor: this.$currentEditingArea[0],
+ mode: mode,
+ list: 'none' === elementDataToolbar ? [] : inlineEditingConfig.toolbar[elementDataToolbar || 'basic'],
+ cleanAttrs: ['id', 'class', 'name'],
+ placeholder: elementor.translate('type_here') + '...',
+ toolbarIconsPrefix: 'eicon-editor-',
+ toolbarIconsDictionary: {
+ externalLink: {
+ className: 'eicon-editor-external-link'
+ },
+ list: {
+ className: 'eicon-editor-list-ul'
+ },
+ insertOrderedList: {
+ className: 'eicon-editor-list-ol'
+ },
+ insertUnorderedList: {
+ className: 'eicon-editor-list-ul'
+ },
+ createlink: {
+ className: 'eicon-editor-link'
+ },
+ unlink: {
+ className: 'eicon-editor-unlink'
+ },
+ blockquote: {
+ className: 'eicon-editor-quote'
+ },
+ p: {
+ className: 'eicon-editor-paragraph'
+ },
+ pre: {
+ className: 'eicon-editor-code'
+ }
+ }
+ });
- dOutput += 'V' + svgHeight;
+ var $menuItems = jQuery(this.editor._menu).children();
- dOutput += 'H' + ( +( xPointer - increment ).toFixed( 4 ) );
+ /**
+ * When the edit area is not focused (on blur) the inline editing is stopped.
+ * In order to prevent blur event when the user clicks on toolbar buttons while editing the
+ * content, we need the prevent their mousedown event. This also prevents the blur event.
+ */
+ $menuItems.on('mousedown', function (event) {
+ event.preventDefault();
+ });
- dOutput += 'V0Z';
+ this.$currentEditingArea.on('blur', this.onInlineEditingBlur.bind(this));
+ },
- xPointer += separatorWidth;
- }
+ stopEditing: function stopEditing() {
+ this.editing = false;
- return dOutput;
- }
-};
+ this.editor.destroy();
-module.exports = presetsFactory;
+ this.view.allowRender = true;
-},{}],119:[function(require,module,exports){
-var Schemes,
- Stylesheet = require( 'elementor-editor-utils/stylesheet' ),
- ControlsCSSParser = require( 'elementor-editor-utils/controls-css-parser' );
+ /**
+ * Inline editing has several toolbar types (advanced, basic and none). When editing is stopped,
+ * we need to rerender the area. To prevent multiple renderings, we will render only areas that
+ * use advanced toolbars.
+ */
+ if ('advanced' === this.$currentEditingArea.data().elementorInlineEditingToolbar) {
+ this.view.getEditModel().renderRemoteServer();
+ }
+ },
-Schemes = function() {
- var self = this,
- stylesheet = new Stylesheet(),
- schemes = {},
- settings = {
- selectorWrapperPrefix: '.elementor-widget-'
- },
- elements = {};
+ onInlineEditingClick: function onInlineEditingClick(event) {
+ var self = this,
+ $targetElement = jQuery(event.currentTarget);
- var buildUI = function() {
- elements.$previewHead.append( elements.$style );
- };
+ /**
+ * When starting inline editing we need to set timeout, this allows other inline items to finish
+ * their operations before focusing new editing area.
+ */
+ setTimeout(function () {
+ self.startEditing($targetElement);
+ }, 30);
+ },
- var initElements = function() {
- elements.$style = jQuery( '<style>', {
- id: 'elementor-style-scheme'
- });
+ onInlineEditingBlur: function onInlineEditingBlur() {
+ var self = this;
- elements.$previewHead = elementor.$previewContents.find( 'head' );
- };
+ /**
+ * When exiting inline editing we need to set timeout, to make sure there is no focus on internal
+ * toolbar action. This prevent the blur and allows the user to continue the inline editing.
+ */
+ setTimeout(function () {
+ var selection = elementorFrontend.getElements('window').getSelection(),
+ $focusNode = jQuery(selection.focusNode);
+
+ if ($focusNode.closest('.pen-input-wrapper').length) {
+ return;
+ }
- var initSchemes = function() {
- schemes = elementor.helpers.cloneObject( elementor.config.schemes.items );
- };
+ self.stopEditing();
+ }, 20);
+ },
- var fetchControlStyles = function( control, controlsStack, widgetType ) {
- ControlsCSSParser.addControlStyleRules( stylesheet, control, controlsStack, function( control ) {
- return self.getSchemeValue( control.scheme.type, control.scheme.value, control.scheme.key ).value;
- }, [ '{{WRAPPER}}' ], [ settings.selectorWrapperPrefix + widgetType ] );
- };
+ onInlineEditingUpdate: function onInlineEditingUpdate() {
+ this.view.getEditModel().setSetting(this.getEditingSettingKey(), this.editor.getContent());
+ }
+});
- var fetchWidgetControlsStyles = function( widget ) {
- var widgetSchemeControls = self.getWidgetSchemeControls( widget );
+module.exports = InlineEditingBehavior;
- _.each( widgetSchemeControls, function( control ) {
- fetchControlStyles( control, widgetSchemeControls, widget.widget_type );
- } );
- };
+/***/ }),
+/* 128 */
+/***/ (function(module, exports, __webpack_require__) {
- var fetchAllWidgetsSchemesStyle = function() {
- _.each( elementor.config.widgets, function( widget ) {
- fetchWidgetControlsStyles( widget );
- } );
- };
+"use strict";
- this.init = function() {
- initElements();
- buildUI();
- initSchemes();
- return self;
- };
+var PanelElementsElementsView;
- this.getWidgetSchemeControls = function( widget ) {
- return _.filter( widget.controls, function( control ) {
- return _.isObject( control.scheme );
- } );
- };
+PanelElementsElementsView = Marionette.CollectionView.extend({
+ childView: __webpack_require__(39),
- this.getSchemes = function() {
- return schemes;
- };
+ id: 'elementor-panel-elements',
- this.getEnabledSchemesTypes = function() {
- return elementor.config.schemes.enabled_schemes;
- };
+ initialize: function initialize() {
+ this.listenTo(elementor.channels.panelElements, 'filter:change', this.onFilterChanged);
+ },
- this.getScheme = function( schemeType ) {
- return schemes[ schemeType ];
- };
+ filter: function filter(childModel) {
+ var filterValue = elementor.channels.panelElements.request('filter:value');
- this.getSchemeValue = function( schemeType, value, key ) {
- if ( this.getEnabledSchemesTypes().indexOf( schemeType ) < 0 ) {
- return false;
+ if (!filterValue) {
+ return true;
}
- var scheme = self.getScheme( schemeType ),
- schemeValue = scheme.items[ value ];
+ if (-1 !== childModel.get('title').toLowerCase().indexOf(filterValue.toLowerCase())) {
+ return true;
+ }
- if ( key && _.isObject( schemeValue ) ) {
- var clonedSchemeValue = elementor.helpers.cloneObject( schemeValue );
+ return _.any(childModel.get('keywords'), function (keyword) {
+ return -1 !== keyword.toLowerCase().indexOf(filterValue.toLowerCase());
+ });
+ },
- clonedSchemeValue.value = schemeValue.value[ key ];
+ onFilterChanged: function onFilterChanged() {
+ var filterValue = elementor.channels.panelElements.request('filter:value');
- return clonedSchemeValue;
+ if (!filterValue) {
+ this.onFilterEmpty();
}
- return schemeValue;
- };
+ this._renderChildren();
- this.printSchemesStyle = function() {
- stylesheet.empty();
+ this.triggerMethod('children:render');
+ },
- fetchAllWidgetsSchemesStyle();
+ onFilterEmpty: function onFilterEmpty() {
+ elementor.getPanelView().getCurrentPageView().showView('categories');
+ }
+});
- elements.$style.text( stylesheet );
- };
+module.exports = PanelElementsElementsView;
- this.resetSchemes = function( schemeName ) {
- schemes[ schemeName ] = elementor.helpers.cloneObject( elementor.config.schemes.items[ schemeName ] );
- };
+/***/ }),
+/* 129 */
+/***/ (function(module, exports, __webpack_require__) {
- this.saveScheme = function( schemeName ) {
- elementor.config.schemes.items[ schemeName ].items = elementor.helpers.cloneObject( schemes[ schemeName ].items );
+"use strict";
- var itemsToSave = {};
- _.each( schemes[ schemeName ].items, function( item, key ) {
- itemsToSave[ key ] = item.value;
- } );
+var PanelMenuGroupView = __webpack_require__(130),
+ PanelMenuPageView;
- NProgress.start();
+PanelMenuPageView = Marionette.CompositeView.extend({
+ id: 'elementor-panel-page-menu',
- elementor.ajax.send( 'apply_scheme', {
- data: {
- scheme_name: schemeName,
- data: JSON.stringify( itemsToSave )
- },
- success: function() {
- NProgress.done();
- }
- } );
- };
+ template: '#tmpl-elementor-panel-menu',
- this.setSchemeValue = function( schemeName, itemKey, value ) {
- schemes[ schemeName ].items[ itemKey ].value = value;
- };
-};
+ childView: PanelMenuGroupView,
-module.exports = new Schemes();
+ childViewContainer: '#elementor-panel-page-menu-content',
-},{"elementor-editor-utils/controls-css-parser":110,"elementor-editor-utils/stylesheet":120}],120:[function(require,module,exports){
-( function( $ ) {
+ initialize: function initialize() {
+ this.collection = PanelMenuPageView.getGroups();
+ },
- var Stylesheet = function() {
- var self = this,
- rules = {},
- rawCSS = {},
- devices = {};
+ onDestroy: function onDestroy() {
+ var arrowClass = 'eicon-arrow-' + (elementor.config.is_rtl ? 'right' : 'left');
- var getDeviceMaxValue = function( deviceName ) {
- var deviceNames = Object.keys( devices ),
- deviceNameIndex = deviceNames.indexOf( deviceName ),
- nextIndex = deviceNameIndex + 1;
+ elementor.panel.currentView.getHeaderView().ui.menuIcon.removeClass(arrowClass).addClass('eicon-menu-bar');
+ }
+}, {
+ groups: null,
- if ( nextIndex >= deviceNames.length ) {
- throw new RangeError( 'Max value for this device is out of range.' );
- }
+ initGroups: function initGroups() {
+ var menus = [];
- return devices[ deviceNames[ nextIndex ] ] - 1;
- };
+ if (elementor.config.user.is_administrator) {
+ menus = [{
+ name: 'style',
+ title: elementor.translate('global_style'),
+ items: [{
+ name: 'global-colors',
+ icon: 'fa fa-paint-brush',
+ title: elementor.translate('global_colors'),
+ type: 'page',
+ pageName: 'colorScheme'
+ }, {
+ name: 'global-fonts',
+ icon: 'fa fa-font',
+ title: elementor.translate('global_fonts'),
+ type: 'page',
+ pageName: 'typographyScheme'
+ }, {
+ name: 'color-picker',
+ icon: 'fa fa-eyedropper',
+ title: elementor.translate('color_picker'),
+ type: 'page',
+ pageName: 'colorPickerScheme'
+ }]
+ }, {
+ name: 'settings',
+ title: elementor.translate('settings'),
+ items: [{
+ name: 'elementor-settings',
+ icon: 'fa fa-external-link',
+ title: elementor.translate('elementor_settings'),
+ type: 'link',
+ link: elementor.config.settings_page_link,
+ newTab: true
+ }, {
+ name: 'about-elementor',
+ icon: 'fa fa-info-circle',
+ title: elementor.translate('about_elementor'),
+ type: 'link',
+ link: elementor.config.elementor_site,
+ newTab: true
+ }]
+ }];
+ }
+
+ this.groups = new Backbone.Collection(menus);
+ },
+
+ getGroups: function getGroups() {
+ if (!this.groups) {
+ this.initGroups();
+ }
- var queryToHash = function( query ) {
- var hash = [];
+ return this.groups;
+ },
- $.each( query, function( endPoint ) {
- hash.push( endPoint + '_' + this );
- } );
+ addItem: function addItem(itemData, groupName, before) {
+ var group = this.getGroups().findWhere({ name: groupName });
- return hash.join( '-' );
- };
+ if (!group) {
+ return;
+ }
- var hashToQuery = function( hash ) {
- var query = {};
+ var items = group.get('items'),
+ beforeItem;
- hash = hash.split( '-' ).filter( String );
+ if (before) {
+ beforeItem = _.findWhere(items, { name: before });
+ }
- hash.forEach( function( singleQuery ) {
- var queryParts = singleQuery.split( '_' ),
- endPoint = queryParts[0],
- deviceName = queryParts[1];
+ if (beforeItem) {
+ items.splice(items.indexOf(beforeItem), 0, itemData);
+ } else {
+ items.push(itemData);
+ }
+ }
+});
- query[ endPoint ] = 'max' === endPoint ? getDeviceMaxValue( deviceName ) : devices[ deviceName ];
- } );
+module.exports = PanelMenuPageView;
- return query;
- };
+/***/ }),
+/* 130 */
+/***/ (function(module, exports, __webpack_require__) {
- var addQueryHash = function( queryHash ) {
- rules[ queryHash ] = {};
+"use strict";
- var hashes = Object.keys( rules );
- if ( hashes.length < 2 ) {
- return;
- }
+var PanelMenuItemView = __webpack_require__(131);
- // Sort the devices from narrowest to widest
- hashes.sort( function( a, b ) {
- if ( 'all' === a ) {
- return -1;
- }
+module.exports = Marionette.CompositeView.extend({
+ template: '#tmpl-elementor-panel-menu-group',
- if ( 'all' === b ) {
- return 1;
- }
+ className: 'elementor-panel-menu-group',
- var aQuery = hashToQuery( a ),
- bQuery = hashToQuery( b );
+ childView: PanelMenuItemView,
- return bQuery.max - aQuery.max;
- } );
+ childViewContainer: '.elementor-panel-menu-items',
- var sortedRules = {};
+ initialize: function initialize() {
+ this.collection = new Backbone.Collection(this.model.get('items'));
+ },
- hashes.forEach( function( deviceName ) {
- sortedRules[ deviceName ] = rules[ deviceName ];
- } );
+ onChildviewClick: function onChildviewClick(childView) {
+ var menuItemType = childView.model.get('type');
- rules = sortedRules;
- };
+ switch (menuItemType) {
+ case 'page':
+ var pageName = childView.model.get('pageName'),
+ pageTitle = childView.model.get('title');
- var getQueryHashStyleFormat = function( queryHash ) {
- var query = hashToQuery( queryHash ),
- styleFormat = [];
+ elementor.getPanelView().setPage(pageName, pageTitle);
- $.each( query, function( endPoint ) {
- styleFormat.push( '(' + endPoint + '-width:' + this + 'px)' );
- } );
+ break;
- return '@media' + styleFormat.join( ' and ' );
- };
+ case 'link':
+ var link = childView.model.get('link'),
+ isNewTab = childView.model.get('newTab');
- this.addDevice = function( deviceName, deviceValue ) {
- devices[ deviceName ] = deviceValue;
+ if (isNewTab) {
+ open(link, '_blank');
+ } else {
+ location.href = childView.model.get('link');
+ }
- var deviceNames = Object.keys( devices );
+ break;
- if ( deviceNames.length < 2 ) {
- return self;
- }
+ default:
+ var callback = childView.model.get('callback');
- // Sort the devices from narrowest to widest
- deviceNames.sort( function( a, b ) {
- return devices[ a ] - devices[ b ];
- } );
+ if (_.isFunction(callback)) {
+ callback.call(childView);
+ }
+ }
+ }
+});
- var sortedDevices = {};
+/***/ }),
+/* 131 */
+/***/ (function(module, exports, __webpack_require__) {
- deviceNames.forEach( function( deviceName ) {
- sortedDevices[ deviceName ] = devices[ deviceName ];
- } );
+"use strict";
- devices = sortedDevices;
- return self;
- };
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-menu-item',
- this.addRawCSS = function( key, css ) {
- rawCSS[ key ] = css;
- };
+ className: 'elementor-panel-menu-item',
- this.addRules = function( selector, styleRules, query ) {
- var queryHash = 'all';
+ triggers: {
+ click: 'click'
+ }
+});
- if ( ! _.isEmpty( query ) ) {
- queryHash = queryToHash( query );
- }
+/***/ }),
+/* 132 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( ! rules[ queryHash ] ) {
- addQueryHash( queryHash );
- }
+"use strict";
- if ( ! styleRules ) {
- var parsedRules = selector.match( /[^{]+\{[^}]+}/g );
- $.each( parsedRules, function() {
- var parsedRule = this.match( /([^{]+)\{([^}]+)}/ );
+var Module = __webpack_require__(2),
+ SettingsModel = __webpack_require__(3);
- if ( parsedRule ) {
- self.addRules( parsedRule[1].trim(), parsedRule[2].trim(), query );
- }
- } );
+module.exports = Module.extend({
- return;
- }
+ CACHE_KEY_NOT_FOUND_ERROR: 'Cache key not found',
- if ( ! rules[ queryHash ][ selector ] ) {
- rules[ queryHash ][ selector ] = {};
- }
+ tags: {
+ Base: __webpack_require__(133)
+ },
- if ( 'string' === typeof styleRules ) {
- styleRules = styleRules.split( ';' ).filter( String );
+ cache: {},
- var orderedRules = {};
+ cacheRequests: {},
- try {
- $.each( styleRules, function() {
- var property = this.split( /:(.*)?/ );
+ cacheCallbacks: [],
- orderedRules[ property[0].trim() ] = property[1].trim().replace( ';', '' );
- } );
- } catch ( error ) { // At least one of the properties is incorrect
- return;
- }
+ addCacheRequest: function addCacheRequest(tag) {
+ this.cacheRequests[this.createCacheKey(tag)] = true;
+ },
- styleRules = orderedRules;
- }
+ createCacheKey: function createCacheKey(tag) {
+ return btoa(tag.getOption('name')) + '-' + btoa(encodeURIComponent(JSON.stringify(tag.model)));
+ },
- $.extend( rules[ queryHash ][ selector ], styleRules );
+ loadTagDataFromCache: function loadTagDataFromCache(tag) {
+ var cacheKey = this.createCacheKey(tag);
- return self;
- };
+ if (undefined !== this.cache[cacheKey]) {
+ return this.cache[cacheKey];
+ }
- this.getRules = function() {
- return rules;
- };
+ if (!this.cacheRequests[cacheKey]) {
+ this.addCacheRequest(tag);
+ }
+ },
- this.empty = function() {
- rules = {};
- rawCSS = {};
- };
+ loadCacheRequests: function loadCacheRequests() {
+ var cache = this.cache,
+ cacheRequests = this.cacheRequests,
+ cacheCallbacks = this.cacheCallbacks;
- this.toString = function() {
- var styleText = '';
+ this.cacheRequests = {};
- $.each( rules, function( queryHash ) {
- var deviceText = Stylesheet.parseRules( this );
+ this.cacheCallbacks = [];
- if ( 'all' !== queryHash ) {
- deviceText = getQueryHashStyleFormat( queryHash ) + '{' + deviceText + '}';
- }
+ elementor.ajax.send('render_tags', {
+ data: {
+ post_id: elementor.config.document.id,
+ tags: Object.keys(cacheRequests)
+ },
+ success: function success(data) {
+ jQuery.extend(cache, data);
- styleText += deviceText;
- } );
+ cacheCallbacks.forEach(function (callback) {
+ callback();
+ });
+ }
+ });
+ },
- $.each( rawCSS, function() {
- styleText += this;
- } );
+ refreshCacheFromServer: function refreshCacheFromServer(callback) {
+ this.cacheCallbacks.push(callback);
- return styleText;
- };
- };
+ this.loadCacheRequests();
+ },
- Stylesheet.parseRules = function( rules ) {
- var parsedRules = '';
+ getConfig: function getConfig(key) {
+ return this.getItems(elementor.config.dynamicTags, key);
+ },
- $.each( rules, function( selector ) {
- var selectorContent = Stylesheet.parseProperties( this );
+ parseTagsText: function parseTagsText(text, settings, parseCallback) {
+ var self = this;
- if ( selectorContent ) {
- parsedRules += selector + '{' + selectorContent + '}';
- }
- } );
+ if ('object' === settings.returnType) {
+ return self.parseTagText(text, settings, parseCallback);
+ }
- return parsedRules;
- };
+ return text.replace(/\[elementor-tag[^\]]+]/g, function (tagText) {
+ return self.parseTagText(tagText, settings, parseCallback);
+ });
+ },
- Stylesheet.parseProperties = function( properties ) {
- var parsedProperties = '';
+ parseTagText: function parseTagText(tagText, settings, parseCallback) {
+ var tagData = this.tagTextToTagData(tagText);
- $.each( properties, function( propertyKey ) {
- if ( this ) {
- parsedProperties += propertyKey + ':' + this + ';';
+ if (!tagData) {
+ if ('object' === settings.returnType) {
+ return {};
}
- } );
- return parsedProperties;
- };
+ return '';
+ }
- module.exports = Stylesheet;
-} )( jQuery );
+ return parseCallback(tagData.id, tagData.name, tagData.settings);
+ },
-},{}],121:[function(require,module,exports){
-var AddSectionView;
+ tagTextToTagData: function tagTextToTagData(tagText) {
+ var tagIDMatch = tagText.match(/id="(.*?(?="))"/),
+ tagNameMatch = tagText.match(/name="(.*?(?="))"/),
+ tagSettingsMatch = tagText.match(/settings="(.*?(?="]))/);
-AddSectionView = Marionette.ItemView.extend( {
- template: Marionette.TemplateCache.get( '#tmpl-elementor-add-section' ),
+ if (!tagIDMatch || !tagNameMatch || !tagSettingsMatch) {
+ return false;
+ }
- attributes: {
- 'data-view': 'choose-action'
+ return {
+ id: tagIDMatch[1],
+ name: tagNameMatch[1],
+ settings: JSON.parse(decodeURIComponent(tagSettingsMatch[1]))
+ };
},
- ui: {
- addNewSection: '.elementor-add-new-section',
- closeButton: '.elementor-add-section-close',
- addSectionButton: '.elementor-add-section-button',
- addTemplateButton: '.elementor-add-template-button',
- selectPreset: '.elementor-select-preset',
- presets: '.elementor-preset'
- },
+ createTag: function createTag(tagID, tagName, tagSettings) {
+ var tagConfig = this.getConfig('tags.' + tagName);
- events: {
- 'click @ui.addSectionButton': 'onAddSectionButtonClick',
- 'click @ui.addTemplateButton': 'onAddTemplateButtonClick',
- 'click @ui.closeButton': 'onCloseButtonClick',
- 'click @ui.presets': 'onPresetSelected'
- },
+ if (!tagConfig) {
+ return;
+ }
- className: function() {
- return 'elementor-add-section elementor-visible-desktop';
- },
+ var TagClass = this.tags[tagName] || this.tags.Base,
+ model = new SettingsModel(tagSettings, {
+ controls: tagConfig.controls
+ });
- addSection: function( properties, options ) {
- return elementor.sections.currentView.addSection( properties, options );
+ return new TagClass({ id: tagID, name: tagName, model: model });
},
- setView: function( view ) {
- this.$el.attr( 'data-view', view );
- },
+ getTagDataContent: function getTagDataContent(tagID, tagName, tagSettings) {
+ var tag = this.createTag(tagID, tagName, tagSettings);
- showSelectPresets: function() {
- this.setView( 'select-preset' );
- },
+ if (!tag) {
+ return;
+ }
- closeSelectPresets: function() {
- this.setView( 'choose-action' );
+ return tag.getContent();
},
- getTemplatesModalOptions: function() {
- return {};
- },
+ tagDataToTagText: function tagDataToTagText(tagID, tagName, tagSettings) {
+ tagSettings = encodeURIComponent(JSON.stringify(tagSettings && tagSettings.toJSON({ removeDefault: true }) || {}));
- onAddSectionButtonClick: function() {
- this.showSelectPresets();
+ return '[elementor-tag id="' + tagID + '" name="' + tagName + '" settings="' + tagSettings + '"]';
},
- onAddTemplateButtonClick: function() {
- elementor.templates.startModal( this.getTemplatesModalOptions() );
+ cleanCache: function cleanCache() {
+ this.cache = {};
},
- onRender: function() {
- this.$el.html5Droppable( {
- axis: [ 'vertical' ],
- groups: [ 'elementor-element' ],
- placeholder: false,
- currentElementClass: 'elementor-html5dnd-current-element',
- hasDraggingOnChildClass: 'elementor-dragging-on-child',
- onDropping: this.onDropping.bind( this )
- } );
- },
+ onInit: function onInit() {
+ this.loadCacheRequests = _.debounce(this.loadCacheRequests, 300);
+ }
+});
- onPresetSelected: function( event ) {
- this.closeSelectPresets();
+/***/ }),
+/* 133 */
+/***/ (function(module, exports, __webpack_require__) {
- var selectedStructure = event.currentTarget.dataset.structure,
- parsedStructure = elementor.presetsFactory.getParsedStructure( selectedStructure ),
- elements = [],
- loopIndex;
+"use strict";
- for ( loopIndex = 0; loopIndex < parsedStructure.columnsCount; loopIndex++ ) {
- elements.push( {
- id: elementor.helpers.getUniqueID(),
- elType: 'column',
- settings: {},
- elements: []
- } );
- }
- elementor.channels.data.trigger( 'element:before:add', {
- elType: 'section'
- } );
+module.exports = Marionette.ItemView.extend({
- var newSection = this.addSection( { elements: elements } );
+ hasTemplate: true,
- newSection.setStructure( selectedStructure );
+ tagName: 'span',
- elementor.channels.data.trigger( 'element:after:add' );
+ className: function className() {
+ return 'elementor-tag';
},
- onDropping: function() {
- elementor.channels.data.trigger( 'section:before:drop' );
- this.addSection().addElementFromPanel();
- elementor.channels.data.trigger( 'section:after:drop' );
- }
-} );
-
-module.exports = AddSectionView;
-
-},{}],122:[function(require,module,exports){
-var BaseAddSectionView = require( 'elementor-views/add-section/base' );
-
-module.exports = BaseAddSectionView.extend( {
- id: 'elementor-add-new-section',
-
- onCloseButtonClick: function() {
- this.closeSelectPresets();
- }
-} );
-
-},{"elementor-views/add-section/base":121}],123:[function(require,module,exports){
-var BaseAddSectionView = require( 'elementor-views/add-section/base' );
+ getTemplate: function getTemplate() {
+ if (!this.hasTemplate) {
+ return false;
+ }
-module.exports = BaseAddSectionView.extend( {
- options: {
- atIndex: null
+ return Marionette.TemplateCache.get('#tmpl-elementor-tag-' + this.getOption('name') + '-content');
},
- className: function() {
- return BaseAddSectionView.prototype.className.apply( this, arguments ) + ' elementor-add-section-inline';
+ initialize: function initialize() {
+ try {
+ this.getTemplate();
+ } catch (e) {
+ this.hasTemplate = false;
+ }
},
- addSection: function( properties, options ) {
- options = options || {};
+ getConfig: function getConfig(key) {
+ var config = elementor.dynamicTags.getConfig('tags.' + this.getOption('name'));
- options.at = this.getOption( 'atIndex' );
+ if (key) {
+ return config[key];
+ }
- return BaseAddSectionView.prototype.addSection.call( this, properties, options );
+ return config;
},
- getTemplatesModalOptions: function() {
- return _.extend( BaseAddSectionView.prototype.getTemplatesModalOptions.apply( this, arguments ), {
- importOptions: {
- at: this.getOption( 'atIndex' )
+ getContent: function getContent() {
+ var contentType = this.getConfig('content_type'),
+ data;
+
+ if (!this.hasTemplate) {
+ data = elementor.dynamicTags.loadTagDataFromCache(this);
+
+ if (undefined === data) {
+ throw new Error(elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR);
}
- } );
- },
+ }
- fadeToDeath: function() {
- var self = this;
+ if ('ui' === contentType) {
+ this.render();
- self.$el.slideUp( function() {
- self.destroy();
- } );
- },
+ if (this.hasTemplate) {
+ return this.el.outerHTML;
+ }
- onCloseButtonClick: function() {
- this.fadeToDeath();
- },
+ if (this.getConfig('wrapped_tag')) {
+ data = jQuery(data).html();
+ }
- onPresetSelected: function() {
- BaseAddSectionView.prototype.onPresetSelected.apply( this, arguments );
+ this.$el.html(data);
+ }
- this.destroy();
+ return data;
},
- onAddTemplateButtonClick: function() {
- BaseAddSectionView.prototype.onAddTemplateButtonClick.apply( this, arguments );
+ onRender: function onRender() {
+ this.el.id = 'elementor-tag-' + this.getOption('id');
+ }
+});
- this.destroy();
- },
+/***/ }),
+/* 134 */
+/***/ (function(module, exports, __webpack_require__) {
- onDropping: function() {
- BaseAddSectionView.prototype.onDropping.apply( this, arguments );
+"use strict";
- this.destroy();
- }
-} );
-},{"elementor-views/add-section/base":121}],124:[function(require,module,exports){
-module.exports = Marionette.CompositeView.extend( {
+var Module = __webpack_require__(2);
- templateHelpers: function() {
- return {
- view: this
- };
+module.exports = Module.extend({
+ modules: {
+ base: __webpack_require__(21),
+ general: __webpack_require__(135),
+ page: __webpack_require__(136)
},
- getBehavior: function( name ) {
- return this._behaviors[ Object.keys( this.behaviors() ).indexOf( name ) ];
+ panelPages: {
+ base: __webpack_require__(137)
},
- addChildModel: function( model, options ) {
- return this.collection.add( model, options, true );
+ onInit: function onInit() {
+ this.initSettings();
},
- addChildElement: function( itemData, options ) {
- options = options || {};
+ initSettings: function initSettings() {
+ var self = this;
- var myChildType = this.getChildType(),
- elType = itemData.get ? itemData.get( 'elType' ) : itemData.elType;
+ _.each(elementor.config.settings, function (config, name) {
+ var Manager = self.modules[name] || self.modules.base;
- if ( -1 === myChildType.indexOf( elType ) ) {
- delete options.at;
+ self[name] = new Manager(config);
+ });
+ }
+});
- return this.children.last().addChildElement( itemData, options );
- }
+/***/ }),
+/* 135 */
+/***/ (function(module, exports, __webpack_require__) {
- var newModel = this.addChildModel( itemData, options ),
- newView = this.children.findByModel( newModel );
+"use strict";
- newView.edit();
- return newView;
- }
-} );
+var BaseSettings = __webpack_require__(21);
-},{}],125:[function(require,module,exports){
-var SectionView = require( 'elementor-elements/views/section' ),
- BaseContainer = require( 'elementor-views/base-container' ),
- BaseSectionsContainerView;
+module.exports = BaseSettings.extend({
+ changeCallbacks: {
+ elementor_page_title_selector: function elementor_page_title_selector(newValue) {
+ var newSelector = newValue || 'h1.entry-title',
+ titleSelectors = elementor.settings.page.model.controls.hide_title.selectors = {};
-BaseSectionsContainerView = BaseContainer.extend( {
- childView: SectionView,
+ titleSelectors[newSelector] = 'display: none';
- behaviors: function() {
- var behaviors = {
- Sortable: {
- behaviorClass: require( 'elementor-behaviors/sortable' ),
- elChildType: 'section'
- },
- HandleDuplicate: {
- behaviorClass: require( 'elementor-behaviors/handle-duplicate' )
- },
- HandleAddMode: {
- behaviorClass: require( 'elementor-behaviors/duplicate' )
- }
- };
+ elementor.settings.page.updateStylesheet();
+ }
+ }
+});
- return elementor.hooks.applyFilters( 'elements/base-section-container/behaviors', behaviors, this );
- },
+/***/ }),
+/* 136 */
+/***/ (function(module, exports, __webpack_require__) {
- getSortableOptions: function() {
- return {
- handle: '> .elementor-element-overlay .elementor-editor-section-settings .elementor-editor-element-trigger',
- items: '> .elementor-section'
- };
- },
+"use strict";
- getChildType: function() {
- return [ 'section' ];
- },
- isCollectionFilled: function() {
- return false;
- },
+var BaseSettings = __webpack_require__(21);
- initialize: function() {
- this
- .listenTo( this.collection, 'add remove reset', this.onCollectionChanged )
- .listenTo( elementor.channels.panelElements, 'element:drag:start', this.onPanelElementDragStart )
- .listenTo( elementor.channels.panelElements, 'element:drag:end', this.onPanelElementDragEnd );
- },
+module.exports = BaseSettings.extend({
- addSection: function( properties, options ) {
- var newSection = {
- id: elementor.helpers.getUniqueID(),
- elType: 'section',
- settings: {},
- elements: []
- };
+ save: function save() {},
- if ( properties ) {
- _.extend( newSection, properties );
- }
+ changeCallbacks: {
+ post_title: function post_title(newValue) {
+ var $title = elementorFrontend.getElements('$document').find(elementor.config.page_title_selector);
- var newModel = this.addChildModel( newSection, options );
+ $title.text(newValue);
+ },
- return this.children.findByModelCid( newModel.cid );
- },
+ template: function template() {
+ elementor.saver.saveAutoSave({
+ onSuccess: function onSuccess() {
+ elementor.reloadPreview();
- onCollectionChanged: function() {
- elementor.saver.setFlagEditorChange( true );
+ elementor.once('preview:loaded', function () {
+ elementor.getPanelView().setPage('page_settings');
+ });
+ }
+ });
+ }
},
- onPanelElementDragStart: function() {
- elementor.helpers.disableElementEvents( this.$el.find( 'iframe' ) );
+ onModelChange: function onModelChange() {
+ elementor.saver.setFlagEditorChange(true);
+
+ BaseSettings.prototype.onModelChange.apply(this, arguments);
},
- onPanelElementDragEnd: function() {
- elementor.helpers.enableElementEvents( this.$el.find( 'iframe' ) );
- }
-} );
+ getDataToSave: function getDataToSave(data) {
+ data.id = elementor.config.document.id;
-module.exports = BaseSectionsContainerView;
+ return data;
+ }
+});
-},{"elementor-behaviors/duplicate":72,"elementor-behaviors/handle-duplicate":73,"elementor-behaviors/sortable":77,"elementor-elements/views/section":80,"elementor-views/base-container":124}],126:[function(require,module,exports){
-var ControlsStack;
+/***/ }),
+/* 137 */
+/***/ (function(module, exports, __webpack_require__) {
-ControlsStack = Marionette.CompositeView.extend( {
- className: 'elementor-panel-controls-stack',
+"use strict";
- classes: {
- popover: 'elementor-controls-popover'
- },
- activeTab: null,
+var ControlsStack = __webpack_require__(12);
- activeSection: null,
+module.exports = ControlsStack.extend({
+ id: function id() {
+ return 'elementor-panel-' + this.getOption('name') + '-settings';
+ },
- templateHelpers: function() {
- return {
- elementData: elementor.getElementData( this.model )
- };
+ getTemplate: function getTemplate() {
+ return '#tmpl-elementor-panel-' + this.getOption('name') + '-settings';
},
- ui: function() {
- return {
- tabs: '.elementor-panel-navigation-tab',
- reloadButton: '.elementor-update-preview-button'
- };
+ childViewContainer: function childViewContainer() {
+ return '#elementor-panel-' + this.getOption('name') + '-settings-controls';
},
- events: function() {
+ childViewOptions: function childViewOptions() {
return {
- 'click @ui.tabs': 'onClickTabControl',
- 'click @ui.reloadButton': 'onReloadButtonClick'
+ elementSettingsModel: this.model
};
- },
+ }
+});
- modelEvents: {
- 'destroy': 'onModelDestroy'
- },
+/***/ }),
+/* 138 */
+/***/ (function(module, exports, __webpack_require__) {
- behaviors: {
- HandleInnerTabs: {
- behaviorClass: require( 'elementor-behaviors/inner-tabs' )
- }
- },
+"use strict";
- initialize: function() {
- this.initCollection();
- this.listenTo( elementor.channels.deviceMode, 'change', this.onDeviceModeChange );
- },
+var Module = __webpack_require__(2);
- initCollection: function() {
- this.collection = new Backbone.Collection( _.values( elementor.mergeControlsSettings( this.getOption( 'controls' ) ) ) );
- },
+module.exports = Module.extend({
+ autoSaveTimer: null,
- filter: function( controlModel ) {
- if ( controlModel.get( 'tab' ) !== this.activeTab ) {
- return false;
- }
+ autosaveInterval: elementor.config.autosave_interval * 1000,
- if ( 'section' === controlModel.get( 'type' ) ) {
- return true;
- }
+ isSaving: false,
- var section = controlModel.get( 'section' );
+ isChangedDuringSave: false,
- return ! section || section === this.activeSection;
+ __construct: function __construct() {
+ this.setWorkSaver();
},
- isVisibleSectionControl: function( sectionControlModel ) {
- return this.activeTab === sectionControlModel.get( 'tab' );
+ startTimer: function startTimer(hasChanges) {
+ clearTimeout(this.autoSaveTimer);
+ if (hasChanges) {
+ this.autoSaveTimer = setTimeout(_.bind(this.doAutoSave, this), this.autosaveInterval);
+ }
},
- activateTab: function( tabName ) {
- this.activeTab = tabName;
-
- this.ui.tabs
- .removeClass( 'elementor-active' )
- .filter( '[data-tab="' + tabName + '"]' )
- .addClass( 'elementor-active' );
+ saveDraft: function saveDraft() {
+ var postStatus = elementor.settings.page.model.get('post_status');
- this.activateFirstSection();
- },
+ if (!elementor.saver.isEditorChanged() && 'draft' !== postStatus) {
+ return;
+ }
- activateSection: function( sectionName ) {
- this.activeSection = sectionName;
+ switch (postStatus) {
+ case 'publish':
+ case 'private':
+ this.doAutoSave();
+ break;
+ default:
+ // Update and create a revision
+ this.update();
+ }
},
- activateFirstSection: function() {
- var self = this;
-
- var sectionControls = self.collection.filter( function( controlModel ) {
- return 'section' === controlModel.get( 'type' ) && self.isVisibleSectionControl( controlModel );
- } );
+ doAutoSave: function doAutoSave() {
+ var editorMode = elementor.channels.dataEditMode.request('activeMode');
- if ( ! sectionControls[0] ) {
+ // Avoid auto save for Revisions Preview changes.
+ if ('edit' !== editorMode) {
return;
}
- var preActivatedSection = sectionControls.filter( function( controlModel ) {
- return self.activeSection === controlModel.get( 'name' );
- } );
+ this.saveAutoSave();
+ },
- if ( preActivatedSection[0] ) {
+ saveAutoSave: function saveAutoSave(options) {
+ if (!this.isEditorChanged()) {
return;
}
- self.activateSection( sectionControls[0].get( 'name' ) );
- },
-
- getChildView: function( item ) {
- var controlType = item.get( 'type' );
+ options = _.extend({
+ status: 'autosave'
+ }, options);
- return elementor.getControlView( controlType );
+ this.saveEditor(options);
},
- handlePopovers: function() {
- var self = this,
- popoverStarted = false,
- $popover;
+ savePending: function savePending(options) {
+ options = _.extend({
+ status: 'pending'
+ }, options);
- self.removePopovers();
+ this.saveEditor(options);
+ },
- self.children.each( function( child ) {
- if ( popoverStarted ) {
- $popover.append( child.$el );
+ discard: function discard() {
+ var self = this;
+ elementor.ajax.addRequest('discard_changes', {
+ success: function success() {
+ self.setFlagEditorChange(false);
+ location.href = elementor.config.document.urls.exit_to_dashboard;
}
+ });
+ },
- var popover = child.model.get( 'popover' );
+ update: function update(options) {
+ options = _.extend({
+ status: elementor.settings.page.model.get('post_status')
+ }, options);
- if ( ! popover ) {
- return;
- }
+ this.saveEditor(options);
+ },
- if ( popover.start ) {
- popoverStarted = true;
+ publish: function publish(options) {
+ options = _.extend({
+ status: 'publish'
+ }, options);
- $popover = jQuery( '<div>', { 'class': self.classes.popover } );
+ this.saveEditor(options);
+ },
- child.$el.before( $popover );
+ setFlagEditorChange: function setFlagEditorChange(status) {
+ if (status && this.isSaving) {
+ this.isChangedDuringSave = true;
+ }
- $popover.append( child.$el );
- }
+ this.startTimer(status);
- if ( popover.end ) {
- popoverStarted = false;
- }
- } );
+ elementor.channels.editor.reply('status', status).trigger('status:change', status);
},
- removePopovers: function() {
- this.$el.find( '.' + this.classes.popover ).remove();
+ isEditorChanged: function isEditorChanged() {
+ return true === elementor.channels.editor.request('status');
},
- openActiveSection: function() {
- var activeSection = this.activeSection,
- activeSectionView = this.children.filter( function( view ) {
- return activeSection === view.model.get( 'name' );
- } );
-
- if ( activeSectionView[0] ) {
- activeSectionView[0].ui.heading.addClass( 'elementor-open' );
- }
+ setWorkSaver: function setWorkSaver() {
+ var self = this;
+ elementor.$window.on('beforeunload', function () {
+ if (self.isEditorChanged()) {
+ return elementor.translate('before_unload_alert');
+ }
+ });
},
- onRenderCollection: function() {
- this.openActiveSection();
+ saveEditor: function saveEditor(options) {
+ if (this.isSaving) {
+ return;
+ }
- this.handlePopovers();
- },
+ options = _.extend({
+ status: 'draft',
+ onSuccess: null
+ }, options);
- onRenderTemplate: function() {
- this.activateTab( this.activeTab || this.ui.tabs.eq( 0 ).data( 'tab' ) );
- },
+ var self = this,
+ elements = elementor.elements.toJSON({ removeDefault: true }),
+ settings = elementor.settings.page.model.toJSON({ removeDefault: true }),
+ oldStatus = elementor.settings.page.model.get('post_status'),
+ statusChanged = oldStatus !== options.status;
- onModelDestroy: function() {
- this.destroy();
- },
+ self.trigger('before:save', options).trigger('before:save:' + options.status, options);
- onClickTabControl: function( event ) {
- event.preventDefault();
+ self.isSaving = true;
- var $tab = this.$( event.currentTarget ),
- tabName = $tab.data( 'tab' );
+ self.isChangedDuringSave = false;
- if ( this.activeTab === tabName ) {
- return;
- }
+ settings.post_status = options.status;
- this.activateTab( tabName );
+ elementor.ajax.addRequest('save_builder', {
+ data: {
+ status: options.status,
+ elements: elements,
+ settings: settings
+ },
- this._renderChildren();
- },
+ success: function success(data) {
+ self.afterAjax();
- onReloadButtonClick: function() {
- elementor.reloadPreview();
- },
+ if ('autosave' !== options.status) {
+ if (statusChanged) {
+ elementor.settings.page.model.set('post_status', options.status);
+ }
- onDeviceModeChange: function() {
- this.$el.removeClass( 'elementor-responsive-switchers-open' );
- },
+ // Notice: Must be after update page.model.post_status to the new status.
+ if (!self.isChangedDuringSave) {
+ self.setFlagEditorChange(false);
+ }
+ }
- onChildviewControlSectionClicked: function( childView ) {
- var isSectionOpen = childView.ui.heading.hasClass( 'elementor-open' );
+ if (data.config) {
+ jQuery.extend(true, elementor.config, data.config);
+ }
- this.activateSection( isSectionOpen ? null : childView.model.get( 'name' ) );
+ elementor.config.data = elements;
- this._renderChildren();
- },
+ elementor.channels.editor.trigger('saved', data);
- onChildviewResponsiveSwitcherClick: function( childView, device ) {
- if ( 'desktop' === device ) {
- this.$el.toggleClass( 'elementor-responsive-switchers-open' );
- }
- }
-} );
+ self.trigger('after:save', data).trigger('after:save:' + options.status, data);
-module.exports = ControlsStack;
+ if (statusChanged) {
+ self.trigger('page:status:change', options.status, oldStatus);
+ }
-},{"elementor-behaviors/inner-tabs":75}],127:[function(require,module,exports){
-var BaseSectionsContainerView = require( 'elementor-views/base-sections-container' ),
- AddSectionView = require( 'elementor-views/add-section/independent' ),
- Preview;
+ if (_.isFunction(options.onSuccess)) {
+ options.onSuccess.call(this, data);
+ }
+ },
+ error: function error(data) {
+ self.afterAjax();
-Preview = BaseSectionsContainerView.extend( {
- template: Marionette.TemplateCache.get( '#tmpl-elementor-preview' ),
+ self.trigger('after:saveError', data).trigger('after:saveError:' + options.status, data);
- className: 'elementor-inner',
+ var message;
- childViewContainer: '.elementor-section-wrap',
+ if (_.isString(data)) {
+ message = data;
+ } else if (data.statusText) {
+ message = elementor.ajax.createErrorMessage(data);
- onRender: function() {
- if ( ! elementor.userCan( 'design' ) ) {
- return;
- }
- var addNewSectionView = new AddSectionView();
+ if (0 === data.readyState) {
+ message += ' ' + elementor.translate('saving_disabled');
+ }
+ } else if (data[0] && data[0].code) {
+ message = elementor.translate('server_error') + ' ' + data[0].code;
+ }
- addNewSectionView.render();
+ elementor.notifications.showToast({
+ message: message
+ });
+ }
+ });
+ },
- this.$el.append( addNewSectionView.$el );
+ afterAjax: function afterAjax() {
+ this.isSaving = false;
}
-} );
+});
-module.exports = Preview;
+/***/ }),
+/* 139 */
+/***/ (function(module, exports, __webpack_require__) {
-},{"elementor-views/add-section/independent":122,"elementor-views/base-sections-container":125}],128:[function(require,module,exports){
-'use strict';
+"use strict";
-/**
- * Handles managing all events for whatever you plug it into. Priorities for hooks are based on lowest to highest in
- * that, lowest priority hooks are fired first.
- */
-var EventManager = function() {
- var slice = Array.prototype.slice,
- MethodsAvailable;
- /**
- * Contains the hooks that get registered with this EventManager. The array for storage utilizes a "flat"
- * object literal such that looking up the hook utilizes the native object literal hash.
- */
- var STORAGE = {
- actions: {},
- filters: {}
- };
+var Module = __webpack_require__(2);
- /**
- * Removes the specified hook by resetting the value of it.
- *
- * @param type Type of hook, either 'actions' or 'filters'
- * @param hook The hook (namespace.identifier) to remove
- *
- * @private
- */
- function _removeHook( type, hook, callback, context ) {
- var handlers, handler, i;
+module.exports = Module.extend({
+ initToast: function initToast() {
+ var toast = elementor.dialogsManager.createWidget('buttons', {
+ id: 'elementor-toast',
+ position: {
+ my: 'center bottom',
+ at: 'center bottom-10',
+ of: '#elementor-panel-content-wrapper',
+ autoRefresh: true
+ },
+ hide: {
+ onClick: true,
+ auto: true,
+ autoDelay: 10000
+ },
+ effects: {
+ show: function show() {
+ var $widget = toast.getElements('widget');
- if ( ! STORAGE[ type ][ hook ] ) {
- return;
- }
- if ( ! callback ) {
- STORAGE[ type ][ hook ] = [];
- } else {
- handlers = STORAGE[ type ][ hook ];
- if ( ! context ) {
- for ( i = handlers.length; i--; ) {
- if ( handlers[ i ].callback === callback ) {
- handlers.splice( i, 1 );
- }
- }
- } else {
- for ( i = handlers.length; i--; ) {
- handler = handlers[ i ];
- if ( handler.callback === callback && handler.context === context ) {
- handlers.splice( i, 1 );
- }
- }
- }
- }
- }
+ $widget.show();
- /**
- * Use an insert sort for keeping our hooks organized based on priority. This function is ridiculously faster
- * than bubble sort, etc: http://jsperf.com/javascript-sort
- *
- * @param hooks The custom array containing all of the appropriate hooks to perform an insert sort on.
- * @private
- */
- function _hookInsertSort( hooks ) {
- var tmpHook, j, prevHook;
- for ( var i = 1, len = hooks.length; i < len; i++ ) {
- tmpHook = hooks[ i ];
- j = i;
- while ( ( prevHook = hooks[ j - 1 ] ) && prevHook.priority > tmpHook.priority ) {
- hooks[ j ] = hooks[ j - 1 ];
- --j;
- }
- hooks[ j ] = tmpHook;
- }
+ toast.refreshPosition();
- return hooks;
- }
+ var top = parseInt($widget.css('top'), 10);
- /**
- * Adds the hook to the appropriate storage container
- *
- * @param type 'actions' or 'filters'
- * @param hook The hook (namespace.identifier) to add to our event manager
- * @param callback The function that will be called when the hook is executed.
- * @param priority The priority of this hook. Must be an integer.
- * @param [context] A value to be used for this
- * @private
- */
- function _addHook( type, hook, callback, priority, context ) {
- var hookObject = {
- callback: callback,
- priority: priority,
- context: context
- };
+ $widget.hide().css('top', top + 100);
- // Utilize 'prop itself' : http://jsperf.com/hasownproperty-vs-in-vs-undefined/19
- var hooks = STORAGE[ type ][ hook ];
- if ( hooks ) {
- // TEMP FIX BUG
- var hasSameCallback = false;
- jQuery.each( hooks, function() {
- if ( this.callback === callback ) {
- hasSameCallback = true;
- return false;
- }
- } );
+ $widget.animate({
+ opacity: 'show',
+ height: 'show',
+ paddingBottom: 'show',
+ paddingTop: 'show',
+ top: top
+ }, {
+ easing: 'linear',
+ duration: 300
+ });
+ },
+ hide: function hide() {
+ var $widget = toast.getElements('widget'),
+ top = parseInt($widget.css('top'), 10);
- if ( hasSameCallback ) {
- return;
+ $widget.animate({
+ opacity: 'hide',
+ height: 'hide',
+ paddingBottom: 'hide',
+ paddingTop: 'hide',
+ top: top + 100
+ }, {
+ easing: 'linear',
+ duration: 300
+ });
+ }
+ },
+ button: {
+ tag: 'div'
}
- // END TEMP FIX BUG
+ });
- hooks.push( hookObject );
- hooks = _hookInsertSort( hooks );
- } else {
- hooks = [ hookObject ];
- }
+ this.getToast = function () {
+ return toast;
+ };
+ },
- STORAGE[ type ][ hook ] = hooks;
- }
+ showToast: function showToast(options) {
+ var toast = this.getToast();
- /**
- * Runs the specified hook. If it is an action, the value is not modified but if it is a filter, it is.
- *
- * @param type 'actions' or 'filters'
- * @param hook The hook ( namespace.identifier ) to be ran.
- * @param args Arguments to pass to the action/filter. If it's a filter, args is actually a single parameter.
- * @private
- */
- function _runHook( type, hook, args ) {
- var handlers = STORAGE[ type ][ hook ], i, len;
+ toast.setMessage(options.message);
- if ( ! handlers ) {
- return ( 'filters' === type ) ? args[ 0 ] : false;
- }
+ toast.getElements('buttonsWrapper').empty();
- len = handlers.length;
- if ( 'filters' === type ) {
- for ( i = 0; i < len; i++ ) {
- args[ 0 ] = handlers[ i ].callback.apply( handlers[ i ].context, args );
- }
- } else {
- for ( i = 0; i < len; i++ ) {
- handlers[ i ].callback.apply( handlers[ i ].context, args );
- }
+ if (options.buttons) {
+ options.buttons.forEach(function (button) {
+ toast.addButton(button);
+ });
}
- return ( 'filters' === type ) ? args[ 0 ] : true;
+ toast.show();
+ },
+
+ onInit: function onInit() {
+ this.initToast();
}
+});
- /**
- * Adds an action to the event manager.
- *
- * @param action Must contain namespace.identifier
- * @param callback Must be a valid callback function before this action is added
- * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
- * @param [context] Supply a value to be used for this
- */
- function addAction( action, callback, priority, context ) {
- if ( 'string' === typeof action && 'function' === typeof callback ) {
- priority = parseInt( ( priority || 10 ), 10 );
- _addHook( 'actions', action, callback, priority, context );
- }
+/***/ }),
+/* 140 */
+/***/ (function(module, exports, __webpack_require__) {
- return MethodsAvailable;
- }
+"use strict";
- /**
- * Performs an action if it exists. You can pass as many arguments as you want to this function; the only rule is
- * that the first argument must always be the action.
- */
- function doAction( /* action, arg1, arg2, ... */ ) {
- var args = slice.call( arguments );
- var action = args.shift();
- if ( 'string' === typeof action ) {
- _runHook( 'actions', action, args );
- }
+var BaseRegion = __webpack_require__(23);
- return MethodsAvailable;
- }
+module.exports = BaseRegion.extend({
+ el: '#elementor-panel',
- /**
- * Removes the specified action if it contains a namespace.identifier & exists.
- *
- * @param action The action to remove
- * @param [callback] Callback function to remove
- */
- function removeAction( action, callback ) {
- if ( 'string' === typeof action ) {
- _removeHook( 'actions', action, callback );
- }
+ getStorageKey: function getStorageKey() {
+ return 'panel';
+ },
- return MethodsAvailable;
- }
+ getDefaultStorage: function getDefaultStorage() {
+ return {
+ size: {
+ width: ''
+ }
+ };
+ },
- /**
- * Adds a filter to the event manager.
- *
- * @param filter Must contain namespace.identifier
- * @param callback Must be a valid callback function before this action is added
- * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
- * @param [context] Supply a value to be used for this
- */
- function addFilter( filter, callback, priority, context ) {
- if ( 'string' === typeof filter && 'function' === typeof callback ) {
- priority = parseInt( ( priority || 10 ), 10 );
- _addHook( 'filters', filter, callback, priority, context );
- }
+ constructor: function constructor() {
+ BaseRegion.prototype.constructor.apply(this, arguments);
- return MethodsAvailable;
- }
+ var PanelLayoutView = __webpack_require__(141);
- /**
- * Performs a filter if it exists. You should only ever pass 1 argument to be filtered. The only rule is that
- * the first argument must always be the filter.
- */
- function applyFilters( /* filter, filtered arg, arg2, ... */ ) {
- var args = slice.call( arguments );
- var filter = args.shift();
+ this.show(new PanelLayoutView());
- if ( 'string' === typeof filter ) {
- return _runHook( 'filters', filter, args );
- }
+ this.resizable();
- return MethodsAvailable;
- }
+ this.setSize();
- /**
- * Removes the specified filter if it contains a namespace.identifier & exists.
- *
- * @param filter The action to remove
- * @param [callback] Callback function to remove
- */
- function removeFilter( filter, callback ) {
- if ( 'string' === typeof filter ) {
- _removeHook( 'filters', filter, callback );
- }
+ this.listenTo(elementor.channels.dataEditMode, 'switch', this.onEditModeSwitched);
+ },
- return MethodsAvailable;
- }
+ setSize: function setSize() {
+ var width = this.storage.size.width,
+ side = elementor.config.is_rtl ? 'right' : 'left';
- /**
- * Maintain a reference to the object scope so our public methods never get confusing.
- */
- MethodsAvailable = {
- removeFilter: removeFilter,
- applyFilters: applyFilters,
- addFilter: addFilter,
- removeAction: removeAction,
- doAction: doAction,
- addAction: addAction
- };
+ this.$el.css('width', width);
- // return all of the publicly available methods
- return MethodsAvailable;
-};
+ elementor.$previewWrapper.css(side, width);
+ },
-module.exports = EventManager;
+ resizable: function resizable() {
+ var self = this,
+ side = elementor.config.is_rtl ? 'right' : 'left';
-},{}],129:[function(require,module,exports){
-var HotKeys = function() {
- var hotKeysHandlers = {};
+ self.$el.resizable({
+ handles: elementor.config.is_rtl ? 'w' : 'e',
+ minWidth: 200,
+ maxWidth: 680,
+ start: function start() {
+ elementor.$previewWrapper.addClass('ui-resizable-resizing');
+ },
+ stop: function stop() {
+ elementor.$previewWrapper.removeClass('ui-resizable-resizing');
- var isMac = function() {
- return -1 !== navigator.userAgent.indexOf( 'Mac OS X' );
- };
+ elementor.getPanelView().updateScrollbar();
- var applyHotKey = function( event ) {
- var handlers = hotKeysHandlers[ event.which ];
+ self.saveSize();
+ },
+ resize: function resize(event, ui) {
+ elementor.$previewWrapper.css(side, ui.size.width);
+ }
+ });
+ },
- if ( ! handlers ) {
+ onEditModeSwitched: function onEditModeSwitched(activeMode) {
+ if ('edit' !== activeMode) {
return;
}
- jQuery.each( handlers, function() {
- var handler = this;
+ this.setSize();
+ }
+});
- if ( handler.isWorthHandling && ! handler.isWorthHandling( event ) ) {
- return;
- }
+/***/ }),
+/* 141 */
+/***/ (function(module, exports, __webpack_require__) {
- // Fix for some keyboard sources that consider alt key as ctrl key
- if ( ! handler.allowAltKey && event.altKey ) {
- return;
- }
+"use strict";
- event.preventDefault();
- handler.handle( event );
- } );
- };
+var EditModeItemView = __webpack_require__(142),
+ PanelLayoutView;
- this.isControlEvent = function( event ) {
- return event[ isMac() ? 'metaKey' : 'ctrlKey' ];
- };
+PanelLayoutView = Marionette.LayoutView.extend({
+ template: '#tmpl-elementor-panel',
- this.addHotKeyHandler = function( keyCode, handlerName, handler ) {
- if ( ! hotKeysHandlers[ keyCode ] ) {
- hotKeysHandlers[ keyCode ] = {};
- }
+ id: 'elementor-panel-inner',
- hotKeysHandlers[ keyCode ][ handlerName ] = handler;
- };
+ regions: {
+ content: '#elementor-panel-content-wrapper',
+ header: '#elementor-panel-header-wrapper',
+ footer: '#elementor-panel-footer',
+ modeSwitcher: '#elementor-mode-switcher'
+ },
- this.bindListener = function( $listener ) {
- $listener.on( 'keydown', applyHotKey );
- };
-};
+ pages: {},
-module.exports = new HotKeys();
+ childEvents: {
+ 'click:add': function clickAdd() {
+ this.setPage('elements');
+ },
+ 'editor:destroy': function editorDestroy() {
+ this.setPage('elements', null, { autoFocusSearch: false });
+ }
+ },
-},{}],130:[function(require,module,exports){
-var ViewModule = require( './view-module' );
+ currentPageName: null,
-module.exports = ViewModule.extend( {
+ currentPageView: null,
- getDefaultSettings: function() {
- return {
- container: null,
- items: null,
- columnsCount: 3,
- verticalSpaceBetween: 30
- };
- },
+ _isScrollbarInitialized: false,
- getDefaultElements: function() {
- return {
- $container: jQuery( this.getSettings( 'container' ) ),
- $items: jQuery( this.getSettings( 'items' ) )
- };
+ initialize: function initialize() {
+ this.initPages();
},
- run: function() {
- var heights = [],
- distanceFromTop = this.elements.$container.position().top,
- settings = this.getSettings(),
- columnsCount = settings.columnsCount;
-
- distanceFromTop += parseInt( this.elements.$container.css( 'margin-top' ), 10 );
+ buildPages: function buildPages() {
+ var pages = {
+ elements: {
+ view: __webpack_require__(143),
+ title: '<img src="' + elementor.config.assets_url + 'images/logo-panel.svg">'
+ },
+ editor: {
+ view: __webpack_require__(148)
+ },
+ menu: {
+ view: elementor.modules.layouts.panel.pages.menu.Menu,
+ title: '<img src="' + elementor.config.assets_url + 'images/logo-panel.svg">'
+ },
+ colorScheme: {
+ view: __webpack_require__(42)
+ },
+ typographyScheme: {
+ view: __webpack_require__(151)
+ },
+ colorPickerScheme: {
+ view: __webpack_require__(152)
+ }
+ };
- this.elements.$items.each( function( index ) {
- var row = Math.floor( index / columnsCount ),
- $item = jQuery( this ),
- itemHeight = $item[0].getBoundingClientRect().height + settings.verticalSpaceBetween;
+ var schemesTypes = Object.keys(elementor.schemes.getSchemes()),
+ disabledSchemes = _.difference(schemesTypes, elementor.schemes.getEnabledSchemesTypes());
- if ( row ) {
- var itemPosition = $item.position(),
- indexAtRow = index % columnsCount,
- pullHeight = itemPosition.top - distanceFromTop - heights[ indexAtRow ];
+ _.each(disabledSchemes, function (schemeType) {
+ var scheme = elementor.schemes.getScheme(schemeType);
- pullHeight -= parseInt( $item.css( 'margin-top' ), 10 );
+ pages[schemeType + 'Scheme'].view = __webpack_require__(153).extend({
+ disabledTitle: scheme.disabled_title
+ });
+ });
- pullHeight *= -1;
+ return pages;
+ },
- $item.css( 'margin-top', pullHeight + 'px' );
+ initPages: function initPages() {
+ var pages;
- heights[ indexAtRow ] += itemHeight;
- } else {
- heights.push( itemHeight );
+ this.getPages = function (page) {
+ if (!pages) {
+ pages = this.buildPages();
}
- } );
- }
-} );
-
-},{"./view-module":132}],131:[function(require,module,exports){
-var Module = function() {
- var $ = jQuery,
- instanceParams = arguments,
- self = this,
- settings,
- events = {};
- var ensureClosureMethods = function() {
- $.each( self, function( methodName ) {
- var oldMethod = self[ methodName ];
+ return page ? pages[page] : pages;
+ };
- if ( 'function' !== typeof oldMethod ) {
- return;
+ this.addPage = function (pageName, pageData) {
+ if (!pages) {
+ pages = this.buildPages();
}
- self[ methodName ] = function() {
- return oldMethod.apply( self, arguments );
- };
- });
- };
-
- var initSettings = function() {
- settings = self.getDefaultSettings();
-
- var instanceSettings = instanceParams[0];
-
- if ( instanceSettings ) {
- $.extend( settings, instanceSettings );
- }
- };
-
- var init = function() {
- self.__construct.apply( self, instanceParams );
+ pages[pageName] = pageData;
+ };
+ },
- ensureClosureMethods();
+ getHeaderView: function getHeaderView() {
+ return this.getChildView('header');
+ },
- initSettings();
+ getFooterView: function getFooterView() {
+ return this.getChildView('footer');
+ },
- self.trigger( 'init' );
- };
+ getCurrentPageName: function getCurrentPageName() {
+ return this.currentPageName;
+ },
- this.getItems = function( items, itemKey ) {
- if ( itemKey ) {
- var keyStack = itemKey.split( '.' ),
- currentKey = keyStack.splice( 0, 1 );
+ getCurrentPageView: function getCurrentPageView() {
+ return this.currentPageView;
+ },
- if ( ! keyStack.length ) {
- return items[ currentKey ];
- }
+ setPage: function setPage(page, title, viewOptions) {
+ var pages = this.getPages();
- if ( ! items[ currentKey ] ) {
- return;
+ if ('elements' === page && !elementor.userCan('design')) {
+ if (pages.page_settings) {
+ page = 'page_settings';
}
-
- return this.getItems( items[ currentKey ], keyStack.join( '.' ) );
}
- return items;
- };
+ var pageData = pages[page];
- this.getSettings = function( setting ) {
- return this.getItems( settings, setting );
- };
+ if (!pageData) {
+ throw new ReferenceError('Elementor panel doesn\'t have page named \'' + page + '\'');
+ }
- this.setSettings = function( settingKey, value, settingsContainer ) {
- if ( ! settingsContainer ) {
- settingsContainer = settings;
+ if (pageData.options) {
+ viewOptions = _.extend(pageData.options, viewOptions);
}
- if ( 'object' === typeof settingKey ) {
- $.extend( settingsContainer, settingKey );
+ var View = pageData.view;
- return self;
+ if (pageData.getView) {
+ View = pageData.getView();
}
- var keyStack = settingKey.split( '.' ),
- currentKey = keyStack.splice( 0, 1 );
+ this.currentPageName = page;
- if ( ! keyStack.length ) {
- settingsContainer[ currentKey ] = value;
+ this.currentPageView = new View(viewOptions);
- return self;
- }
+ this.showChildView('content', this.currentPageView);
- if ( ! settingsContainer[ currentKey ] ) {
- settingsContainer[ currentKey ] = {};
- }
+ this.getHeaderView().setTitle(title || pageData.title);
- return self.setSettings( keyStack.join( '.' ), value, settingsContainer[ currentKey ] );
- };
+ this.trigger('set:page', this.currentPageView).trigger('set:page:' + page, this.currentPageView);
+ },
- this.forceMethodImplementation = function( methodArguments ) {
- var functionName = methodArguments.callee.name;
+ openEditor: function openEditor(model, view) {
+ this.setPage('editor', elementor.translate('edit_element', [elementor.getElementData(model).title]), {
+ model: model,
+ controls: elementor.getElementControls(model),
+ editedElementView: view
+ });
- throw new ReferenceError( 'The method ' + functionName + ' must to be implemented in the inheritor child.' );
- };
+ var action = 'panel/open_editor/' + model.get('elType');
- this.on = function( eventName, callback ) {
- if ( 'object' === typeof eventName ) {
- $.each( eventName, function( singleEventName ) {
- self.on( singleEventName, this );
- } );
+ // Example: panel/open_editor/widget
+ elementor.hooks.doAction(action, this, model, view);
- return self;
- }
+ // Example: panel/open_editor/widget/heading
+ elementor.hooks.doAction(action + '/' + model.get('widgetType'), this, model, view);
+ },
- var eventNames = eventName.split( ' ' );
+ onBeforeShow: function onBeforeShow() {
+ var PanelFooterItemView = __webpack_require__(154),
+ PanelHeaderItemView = __webpack_require__(155);
- eventNames.forEach( function( singleEventName ) {
- if ( ! events[ singleEventName ] ) {
- events[ singleEventName ] = [];
- }
+ // Edit Mode
+ this.showChildView('modeSwitcher', new EditModeItemView());
- events[ singleEventName ].push( callback );
- } );
+ // Header
+ this.showChildView('header', new PanelHeaderItemView());
- return self;
- };
+ // Footer
+ this.showChildView('footer', new PanelFooterItemView());
- this.off = function( eventName, callback ) {
- if ( ! events[ eventName ] ) {
- return self;
- }
+ // Added Editor events
+ this.updateScrollbar = _.throttle(this.updateScrollbar, 100);
- if ( ! callback ) {
- delete events[ eventName ];
+ this.getRegion('content').on('before:show', this.onEditorBeforeShow.bind(this)).on('empty', this.onEditorEmpty.bind(this)).on('show', this.updateScrollbar.bind(this));
- return self;
- }
+ // Set default page to elements
+ this.setPage('elements');
+ },
- var callbackIndex = events[ eventName ].indexOf( callback );
+ onEditorBeforeShow: function onEditorBeforeShow() {
+ _.defer(this.updateScrollbar.bind(this));
+ },
- if ( -1 !== callbackIndex ) {
- delete events[ eventName ][ callbackIndex ];
- }
+ onEditorEmpty: function onEditorEmpty() {
+ this.updateScrollbar();
+ },
- return self;
- };
+ updateScrollbar: function updateScrollbar() {
+ var $panel = this.content.$el;
- this.trigger = function( eventName ) {
- var methodName = 'on' + eventName[ 0 ].toUpperCase() + eventName.slice( 1 ),
- params = Array.prototype.slice.call( arguments, 1 );
+ if (!this._isScrollbarInitialized) {
+ $panel.perfectScrollbar();
+ this._isScrollbarInitialized = true;
- if ( self[ methodName ] ) {
- self[ methodName ].apply( self, params );
+ return;
}
- var callbacks = events[ eventName ];
+ $panel.perfectScrollbar('update');
+ }
+});
- if ( ! callbacks ) {
- return self;
- }
+module.exports = PanelLayoutView;
- $.each( callbacks, function( index, callback ) {
- callback.apply( self, params );
- } );
+/***/ }),
+/* 142 */
+/***/ (function(module, exports, __webpack_require__) {
- return self;
- };
+"use strict";
- init();
-};
-Module.prototype.__construct = function() {};
+var EditModeItemView;
-Module.prototype.getDefaultSettings = function() {
- return {};
-};
+EditModeItemView = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-mode-switcher-content',
-Module.extendsCount = 0;
+ id: 'elementor-mode-switcher-inner',
-Module.extend = function( properties ) {
- var $ = jQuery,
- parent = this;
+ ui: {
+ previewButton: '#elementor-mode-switcher-preview-input',
+ previewLabel: '#elementor-mode-switcher-preview',
+ previewLabelA11y: '#elementor-mode-switcher-preview .elementor-screen-only'
+ },
- var child = function() {
- return parent.apply( this, arguments );
- };
+ events: {
+ 'change @ui.previewButton': 'onPreviewButtonChange'
+ },
- $.extend( child, parent );
+ initialize: function initialize() {
+ this.listenTo(elementor.channels.dataEditMode, 'switch', this.onEditModeChanged);
+ },
- child.prototype = Object.create( $.extend( {}, parent.prototype, properties ) );
+ getCurrentMode: function getCurrentMode() {
+ return this.ui.previewButton.is(':checked') ? 'preview' : 'edit';
+ },
- child.prototype.constructor = child;
+ setMode: function setMode(mode) {
+ this.ui.previewButton.prop('checked', 'preview' === mode).trigger('change');
+ },
- /*
- * Constructor ID is used to set an unique ID
- * to every extend of the Module.
- *
- * It's useful in some cases such as unique
- * listener for frontend handlers.
- */
- var constructorID = ++Module.extendsCount;
+ toggleMode: function toggleMode() {
+ this.setMode(this.ui.previewButton.prop('checked') ? 'edit' : 'preview');
+ },
- child.prototype.getConstructorID = function() {
- return constructorID;
- };
+ onRender: function onRender() {
+ this.onEditModeChanged();
+ },
+
+ onPreviewButtonChange: function onPreviewButtonChange() {
+ elementor.changeEditMode(this.getCurrentMode());
+ },
- child.__super__ = parent.prototype;
+ onEditModeChanged: function onEditModeChanged() {
+ var activeMode = elementor.channels.dataEditMode.request('activeMode'),
+ title = elementor.translate('preview' === activeMode ? 'back_to_editor' : 'preview');
- return child;
-};
+ this.ui.previewLabel.attr('title', title);
+ this.ui.previewLabelA11y.text(title);
+ }
+});
-module.exports = Module;
+module.exports = EditModeItemView;
-},{}],132:[function(require,module,exports){
-var Module = require( './module' ),
- ViewModule;
+/***/ }),
+/* 143 */
+/***/ (function(module, exports, __webpack_require__) {
-ViewModule = Module.extend( {
- elements: null,
+"use strict";
- getDefaultElements: function() {
- return {};
- },
- bindEvents: function() {},
+var PanelElementsCategoriesCollection = __webpack_require__(144),
+ PanelElementsElementsCollection = __webpack_require__(41),
+ PanelElementsCategoriesView = __webpack_require__(145),
+ PanelElementsElementsView = elementor.modules.layouts.panel.pages.elements.views.Elements,
+ PanelElementsSearchView = __webpack_require__(147),
+ PanelElementsGlobalView = __webpack_require__(38),
+ PanelElementsLayoutView;
- onInit: function() {
- this.initElements();
+PanelElementsLayoutView = Marionette.LayoutView.extend({
+ template: '#tmpl-elementor-panel-elements',
- this.bindEvents();
+ options: {
+ autoFocusSearch: true
},
- initElements: function() {
- this.elements = this.getDefaultElements();
- }
-} );
-
-module.exports = ViewModule;
+ regions: {
+ elements: '#elementor-panel-elements-wrapper',
+ search: '#elementor-panel-elements-search-area'
+ },
-},{"./module":131}],133:[function(require,module,exports){
-module.exports = Marionette.Behavior.extend( {
- listenerAttached: false,
+ ui: {
+ tabs: '.elementor-panel-navigation-tab'
+ },
- // use beforeRender that runs after the collection is exist
- onBeforeRender: function() {
- if ( this.view.collection && ! this.listenerAttached ) {
- this.view.collection.on( 'update', this.saveCollectionHistory, this );
- this.listenerAttached = true;
- }
+ events: {
+ 'click @ui.tabs': 'onTabClick'
},
- saveCollectionHistory: function( collection, event ) {
- if ( ! elementor.history.history.getActive() ) {
- return;
- }
+ regionViews: {},
- var historyItem,
- models,
- firstModel,
- type;
+ elementsCollection: null,
- if ( event.add ) {
- models = event.changes.added;
- firstModel = models[0];
- type = 'add';
- } else {
- models = event.changes.removed;
- firstModel = models[0];
- type = 'remove';
- }
+ categoriesCollection: null,
- var title = elementor.history.history.getModelLabel( firstModel );
+ initialize: function initialize() {
+ this.listenTo(elementor.channels.panelElements, 'element:selected', this.destroy);
- // If it's an unknown model - don't save
- if ( ! title ) {
- return;
- }
+ this.initElementsCollection();
- var modelsJSON = [];
+ this.initCategoriesCollection();
- _.each( models, function( model ) {
- modelsJSON.push( model.toJSON( { copyHtmlCache: true } ) );
- } );
+ this.initRegionViews();
+ },
- historyItem = {
- type: type,
- elementType: firstModel.get( 'elType' ),
- elementID: firstModel.get( 'id' ),
- title: title,
- history: {
- behavior: this,
- collection: collection,
- event: event,
- models: modelsJSON
+ initRegionViews: function initRegionViews() {
+ var regionViews = {
+ elements: {
+ region: this.elements,
+ view: PanelElementsElementsView,
+ options: { collection: this.elementsCollection }
+ },
+ categories: {
+ region: this.elements,
+ view: PanelElementsCategoriesView,
+ options: { collection: this.categoriesCollection }
+ },
+ search: {
+ region: this.search,
+ view: PanelElementsSearchView
+ },
+ global: {
+ region: this.elements,
+ view: PanelElementsGlobalView
}
};
- elementor.history.history.addItem( historyItem );
- },
-
- add: function( models, toView, position ) {
- if ( 'section' === models[0].elType ) {
- _.each( models, function( model ) {
- model.dontFillEmpty = true;
- } );
- }
-
- toView.addChildModel( models, { at: position, silent: 0 } );
+ this.regionViews = elementor.hooks.applyFilters('panel/elements/regionViews', regionViews);
},
- remove: function( models, fromCollection ) {
- fromCollection.remove( models, { silent: 0 } );
- },
+ initElementsCollection: function initElementsCollection() {
+ var elementsCollection = new PanelElementsElementsCollection(),
+ sectionConfig = elementor.config.elements.section;
- restore: function( historyItem, isRedo ) {
- var type = historyItem.get( 'type' ),
- history = historyItem.get( 'history' ),
- didAction = false,
- behavior;
+ elementsCollection.add({
+ title: elementor.translate('inner_section'),
+ elType: 'section',
+ categories: ['basic'],
+ keywords: ['row', 'columns', 'nested'],
+ icon: sectionConfig.icon
+ });
- // Find the new behavior and work with him
- if ( history.behavior.view.model ) {
- var modelID = history.behavior.view.model.get( 'id' ),
- view = elementor.history.history.findView( modelID );
- if ( view ) {
- behavior = view.getBehavior( 'CollectionHistory' );
+ // TODO: Change the array from server syntax, and no need each loop for initialize
+ _.each(elementor.config.widgets, function (widget) {
+ if (!widget.show_in_panel) {
+ return;
}
- }
- // Container or new Elements - Doesn't have a new behavior
- if ( ! behavior ) {
- behavior = history.behavior;
- }
+ elementsCollection.add({
+ title: widget.title,
+ elType: widget.elType,
+ categories: widget.categories,
+ keywords: widget.keywords,
+ icon: widget.icon,
+ widgetType: widget.widget_type,
+ custom: widget.custom
+ });
+ });
- // Stop listen to undo actions
- behavior.view.collection.off( 'update', behavior.saveCollectionHistory );
+ this.elementsCollection = elementsCollection;
+ },
- switch ( type ) {
- case 'add':
- if ( isRedo ) {
- this.add( history.models, behavior.view, history.event.index );
- } else {
- this.remove( history.models, behavior.view.collection );
- }
+ initCategoriesCollection: function initCategoriesCollection() {
+ var categories = {};
- didAction = true;
- break;
- case 'remove':
- if ( isRedo ) {
- this.remove( history.models, behavior.view.collection );
- } else {
- this.add( history.models, behavior.view, history.event.index );
+ this.elementsCollection.each(function (element) {
+ _.each(element.get('categories'), function (category) {
+ if (!categories[category]) {
+ categories[category] = [];
}
- didAction = true;
- break;
- }
+ categories[category].push(element);
+ });
+ });
- // Listen again
- behavior.view.collection.on( 'update', behavior.saveCollectionHistory, history.behavior );
+ var categoriesCollection = new PanelElementsCategoriesCollection();
- return didAction;
- }
-} );
+ _.each(elementor.config.document.panel.elements_categories, function (categoryConfig, categoryName) {
+ if (!categories[categoryName]) {
+ return;
+ }
+ // Set defaults.
+ if ('undefined' === typeof categoryConfig.active) {
+ categoryConfig.active = true;
+ }
-},{}],134:[function(require,module,exports){
-var ItemModel = require( './item' );
+ if ('undefined' === typeof categoryConfig.icon) {
+ categoryConfig.icon = 'font';
+ }
-module.exports = Backbone.Collection.extend( {
- model: ItemModel
-} );
+ categoriesCollection.add({
+ name: categoryName,
+ title: categoryConfig.title,
+ icon: categoryConfig.icon,
+ defaultActive: categoryConfig.active,
+ items: categories[categoryName]
+ });
+ });
-},{"./item":137}],135:[function(require,module,exports){
-module.exports = Marionette.Behavior.extend( {
- oldValues: [],
+ this.categoriesCollection = categoriesCollection;
+ },
- listenerAttached: false,
+ activateTab: function activateTab(tabName) {
+ this.ui.tabs.removeClass('elementor-active').filter('[data-view="' + tabName + '"]').addClass('elementor-active');
- initialize: function() {
- this.lazySaveTextHistory = _.debounce( this.saveTextHistory.bind( this ), 800 );
+ this.showView(tabName);
},
- // use beforeRender that runs after the settingsModel is exist
- onBeforeRender: function() {
- if ( ! this.listenerAttached ) {
- this.listenTo( this.view.getEditModel().get( 'settings' ), 'change', this.saveHistory );
- this.listenerAttached = true;
- }
+ showView: function showView(viewName) {
+ var viewDetails = this.regionViews[viewName],
+ options = viewDetails.options || {};
+
+ viewDetails.region.show(new viewDetails.view(options));
},
- saveTextHistory: function( model, changed, control ) {
- var changedAttributes = {},
- currentValue = model.get( control.name ),
- newValue;
+ clearSearchInput: function clearSearchInput() {
+ this.getChildView('search').clearInput();
+ },
- if ( currentValue instanceof Backbone.Collection ) {
- // Deep clone.
- newValue = currentValue.toJSON();
- } else {
- newValue = currentValue;
+ changeFilter: function changeFilter(filterValue) {
+ elementor.channels.panelElements.reply('filter:value', filterValue).trigger('filter:change');
+ },
+
+ clearFilters: function clearFilters() {
+ this.changeFilter(null);
+ this.clearSearchInput();
+ },
+
+ focusSearch: function focusSearch() {
+ if (!elementor.userCan('design')) {
+ return;
}
- changedAttributes[ control.name ] = {
- old: this.oldValues[ control.name ],
- 'new': newValue
- };
+ this.search.currentView.ui.input.focus();
+ },
- var historyItem = {
- type: 'change',
- elementType: 'control',
- title: elementor.history.history.getModelLabel( model ),
- subTitle: control.label,
- history: {
- behavior: this,
- changed: changedAttributes,
- model: this.view.getEditModel().toJSON()
- }
- };
+ onChildviewChildrenRender: function onChildviewChildrenRender() {
+ elementor.getPanelView().updateScrollbar();
+ },
- elementor.history.history.addItem( historyItem );
+ onChildviewSearchChangeInput: function onChildviewSearchChangeInput(child) {
+ this.changeFilter(child.ui.input.val(), 'search');
+ },
- delete this.oldValues[ control.name ];
+ onDestroy: function onDestroy() {
+ elementor.channels.panelElements.reply('filter:value', null);
},
- saveHistory: function( model, options ) {
- if ( ! elementor.history.history.getActive() ) {
- return;
- }
+ onShow: function onShow() {
+ this.showView('categories');
- var self = this,
- changed = Object.keys( model.changed ),
- control = model.controls[ changed[0] ];
+ this.showView('search');
- if ( ! control && options && options.control ) {
- control = options.control;
+ if (this.options.autoFocusSearch) {
+ setTimeout(this.focusSearch.bind(this));
}
+ },
- if ( ! changed.length || ! control ) {
- return;
- }
+ onTabClick: function onTabClick(event) {
+ this.activateTab(event.currentTarget.dataset.view);
+ }
+});
- if ( 1 === changed.length ) {
- if ( _.isUndefined( self.oldValues[ control.name ] ) ) {
- self.oldValues[ control.name ] = model.previous( control.name );
- }
+module.exports = PanelElementsLayoutView;
- if ( elementor.history.history.isItemStarted() ) {
- // Do not delay the execution
- self.saveTextHistory( model, changed, control );
- } else {
- self.lazySaveTextHistory( model, changed, control );
- }
+/***/ }),
+/* 144 */
+/***/ (function(module, exports, __webpack_require__) {
- return;
- }
+"use strict";
- var changedAttributes = {};
- _.each( changed, function( controlName ) {
- changedAttributes[ controlName ] = {
- old: model.previous( controlName ),
- 'new': model.get( controlName )
- };
- } );
+var PanelElementsCategory = __webpack_require__(40),
+ PanelElementsCategoriesCollection;
- var historyItem = {
- type: 'change',
- elementType: 'control',
- title: elementor.history.history.getModelLabel( model ),
- history: {
- behavior: this,
- changed: changedAttributes,
- model: this.view.getEditModel().toJSON()
- }
- };
+PanelElementsCategoriesCollection = Backbone.Collection.extend({
+ model: PanelElementsCategory
+});
- if ( 1 === changed.length ) {
- historyItem.subTitle = control.label;
- }
+module.exports = PanelElementsCategoriesCollection;
- elementor.history.history.addItem( historyItem );
- },
+/***/ }),
+/* 145 */
+/***/ (function(module, exports, __webpack_require__) {
- restore: function( historyItem, isRedo ) {
- var history = historyItem.get( 'history' ),
- modelID = history.model.id,
- view = elementor.history.history.findView( modelID );
+"use strict";
- if ( ! view ) {
- return;
- }
- var model = view.getEditModel ? view.getEditModel() : view.model,
- settings = model.get( 'settings' ),
- behavior = view.getBehavior( 'ElementHistory' );
+var PanelElementsCategoryView = __webpack_require__(146),
+ PanelElementsCategoriesView;
- // Stop listen to restore actions
- behavior.stopListening( settings, 'change', this.saveHistory );
+PanelElementsCategoriesView = Marionette.CompositeView.extend({
+ template: '#tmpl-elementor-panel-categories',
- var restoredValues = {};
- _.each( history.changed, function( values, key ) {
- if ( isRedo ) {
- restoredValues[ key ] = values['new'];
- } else {
- restoredValues[ key ] = values.old;
- }
- } );
+ childView: PanelElementsCategoryView,
- // Set at once.
- settings.set( restoredValues );
+ childViewContainer: '#elementor-panel-categories',
- // Trigger each field for `baseControl.onSettingsExternalChange`
- _.each( history.changed, function( values, key ) {
- settings.trigger( 'change:external:' + key );
- } );
+ id: 'elementor-panel-elements-categories',
- historyItem.set( 'status', isRedo ? 'not_applied' : 'applied' );
+ initialize: function initialize() {
+ this.listenTo(elementor.channels.panelElements, 'filter:change', this.onPanelElementsFilterChange);
+ },
- // Listen again
- behavior.listenTo( settings, 'change', this.saveHistory );
+ onPanelElementsFilterChange: function onPanelElementsFilterChange() {
+ if (elementor.channels.panelElements.request('filter:value')) {
+ elementor.getPanelView().getCurrentPageView().showView('elements');
+ }
}
-} );
+});
-},{}],136:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-history-no-items',
- id: 'elementor-panel-history-no-items',
- className: 'elementor-panel-nerd-box'
-} );
+module.exports = PanelElementsCategoriesView;
-},{}],137:[function(require,module,exports){
-module.exports = Backbone.Model.extend( {
- defaults: {
- id: 0,
- type: '',
- elementType: '',
- status: 'not_applied',
- title: '',
- subTitle: '',
- action: '',
- history: {}
+/***/ }),
+/* 146 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var PanelElementsElementsCollection = __webpack_require__(41),
+ PanelElementsCategoryView;
+
+PanelElementsCategoryView = Marionette.CompositeView.extend({
+ template: '#tmpl-elementor-panel-elements-category',
+
+ className: 'elementor-panel-category',
+
+ ui: {
+ title: '.elementor-panel-category-title',
+ items: '.elementor-panel-category-items'
},
- initialize: function() {
- this.set( 'items', new Backbone.Collection() );
- }
-} );
+ events: {
+ 'click @ui.title': 'onTitleClick'
+ },
-},{}],138:[function(require,module,exports){
-var HistoryCollection = require( './collection' ),
- HistoryItem = require( './item' ),
- ElementHistoryBehavior = require( './element-behavior' ),
- CollectionHistoryBehavior = require( './collection-behavior' );
+ id: function id() {
+ return 'elementor-panel-category-' + this.model.get('name');
+ },
-var Manager = function() {
- var self = this,
- currentItemID = null,
- items = new HistoryCollection(),
- editorSaved = false,
- active = true;
+ childView: __webpack_require__(39),
- var translations = {
- add: elementor.translate( 'added' ),
- remove: elementor.translate( 'removed' ),
- change: elementor.translate( 'edited' ),
- move: elementor.translate( 'moved' ),
- duplicate: elementor.translate( 'duplicated' )
- };
+ childViewContainer: '.elementor-panel-category-items',
- var addBehaviors = function( behaviors ) {
- behaviors.ElementHistory = {
- behaviorClass: ElementHistoryBehavior
- };
+ initialize: function initialize() {
+ this.collection = new PanelElementsElementsCollection(this.model.get('items'));
+ },
- behaviors.CollectionHistory = {
- behaviorClass: CollectionHistoryBehavior
- };
+ onRender: function onRender() {
+ var isActive = elementor.channels.panelElements.request('category:' + this.model.get('name') + ':active');
- return behaviors;
- };
+ if (undefined === isActive) {
+ isActive = this.model.get('defaultActive');
+ }
- var addCollectionBehavior = function( behaviors ) {
- behaviors.CollectionHistory = {
- behaviorClass: CollectionHistoryBehavior
- };
+ if (isActive) {
+ this.$el.addClass('elementor-active');
- return behaviors;
- };
+ this.ui.items.show();
+ }
+ },
+
+ onTitleClick: function onTitleClick() {
+ var $items = this.ui.items,
+ activeClass = 'elementor-active',
+ isActive = this.$el.hasClass(activeClass),
+ slideFn = isActive ? 'slideUp' : 'slideDown';
+
+ elementor.channels.panelElements.reply('category:' + this.model.get('name') + ':active', !isActive);
+
+ this.$el.toggleClass(activeClass, !isActive);
+
+ $items[slideFn](300, function () {
+ elementor.getPanelView().updateScrollbar();
+ });
+ }
+});
+
+module.exports = PanelElementsCategoryView;
+
+/***/ }),
+/* 147 */
+/***/ (function(module, exports, __webpack_require__) {
- var getActionLabel = function( itemData ) {
- if ( translations[ itemData.type ] ) {
- return translations[ itemData.type ];
- }
+"use strict";
- return itemData.type;
- };
- var navigate = function( isRedo ) {
- var currentItem = items.find( function( model ) {
- return 'not_applied' === model.get( 'status' );
- } ),
- currentItemIndex = items.indexOf( currentItem ),
- requiredIndex = isRedo ? currentItemIndex - 1 : currentItemIndex + 1;
+var PanelElementsSearchView;
- if ( ( ! isRedo && ! currentItem ) || requiredIndex < 0 || requiredIndex >= items.length ) {
- return;
- }
+PanelElementsSearchView = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-element-search',
- self.doItem( requiredIndex );
- };
+ id: 'elementor-panel-elements-search-wrapper',
- var addHotKeys = function() {
- var H_KEY = 72,
- Z_KEY = 90;
+ ui: {
+ input: 'input'
+ },
- elementor.hotKeys.addHotKeyHandler( Z_KEY, 'historyNavigation', {
- isWorthHandling: function( event ) {
- return items.length && ! jQuery( event.target ).is( 'input, textarea, [contenteditable=true]' );
- },
- handle: function( event ) {
- navigate( Z_KEY === event.which && event.shiftKey );
- }
- } );
+ events: {
+ 'input @ui.input': 'onInputChanged'
+ },
- elementor.hotKeys.addHotKeyHandler( H_KEY, 'showHistoryPage', {
- isWorthHandling: function( event ) {
- return elementor.hotKeys.isControlEvent( event ) && event.shiftKey;
- },
- handle: function() {
- elementor.getPanelView().setPage( 'historyPage' );
- }
- } );
- };
+ clearInput: function clearInput() {
+ this.ui.input.val('');
+ },
- var onPanelSave = function() {
- if ( items.length >= 2 ) {
- // Check if it's a save after made changes, `items.length - 1` is the `Editing Started Item
- var firstEditItem = items.at( items.length - 2 );
- editorSaved = ( 'not_applied' === firstEditItem.get( 'status' ) );
+ onInputChanged: function onInputChanged(event) {
+ var ESC_KEY = 27;
+
+ if (ESC_KEY === event.keyCode) {
+ this.clearInput();
}
- };
- var init = function() {
- addHotKeys();
+ this.triggerMethod('search:change:input');
+ }
+});
- elementor.hooks.addFilter( 'elements/base/behaviors', addBehaviors );
- elementor.hooks.addFilter( 'elements/base-section-container/behaviors', addCollectionBehavior );
+module.exports = PanelElementsSearchView;
- elementor.channels.data
- .on( 'drag:before:update', self.startMovingItem )
- .on( 'drag:after:update', self.endItem )
+/***/ }),
+/* 148 */
+/***/ (function(module, exports, __webpack_require__) {
- .on( 'element:before:add', self.startAddElement )
- .on( 'element:after:add', self.endItem )
+"use strict";
- .on( 'element:before:remove', self.startRemoveElement )
- .on( 'element:after:remove', self.endItem )
- .on( 'element:before:duplicate', self.startDuplicateElement )
- .on( 'element:after:duplicate', self.endItem )
+var ControlsStack = __webpack_require__(12),
+ EditorView;
- .on( 'section:before:drop', self.startDropElement )
- .on( 'section:after:drop', self.endItem )
+EditorView = ControlsStack.extend({
+ template: Marionette.TemplateCache.get('#tmpl-editor-content'),
- .on( 'template:before:insert', self.startInsertTemplate )
- .on( 'template:after:insert', self.endItem );
+ id: 'elementor-panel-page-editor',
- elementor.channels.editor.on( 'saved', onPanelSave );
- };
+ childViewContainer: '#elementor-controls',
- this.setActive = function( value ) {
- active = value;
- };
+ childViewOptions: function childViewOptions() {
+ return {
+ elementSettingsModel: this.model.get('settings'),
+ elementEditSettings: this.model.get('editSettings')
+ };
+ },
- this.getActive = function() {
- return active;
- };
+ openActiveSection: function openActiveSection() {
+ ControlsStack.prototype.openActiveSection.apply(this, arguments);
- this.getItems = function() {
- return items;
- };
+ elementor.channels.editor.trigger('section:activated', this.activeSection, this);
+ },
- this.startItem = function( itemData ) {
- currentItemID = this.addItem( itemData );
- };
+ isVisibleSectionControl: function isVisibleSectionControl(sectionControlModel) {
+ return ControlsStack.prototype.isVisibleSectionControl.apply(this, arguments) && elementor.helpers.isActiveControl(sectionControlModel, this.model.get('settings').attributes);
+ },
- this.endItem = function() {
- currentItemID = null;
- };
+ scrollToEditedElement: function scrollToEditedElement() {
+ elementor.helpers.scrollToView(this.getOption('editedElementView').$el);
+ },
- this.isItemStarted = function() {
- return null !== currentItemID;
- };
+ getControlView: function getControlView(name) {
+ return this.children.findByModelCid(this.getControlModel(name).cid);
+ },
- this.addItem = function( itemData ) {
- if ( ! this.getActive() ) {
- return;
- }
+ getControlModel: function getControlModel(name) {
+ return this.collection.findWhere({ name: name });
+ },
- if ( ! items.length ) {
- items.add( {
- status: 'not_applied',
- title: elementor.translate( 'editing_started' ),
- subTitle: '',
- action: '',
- editing_started: true
- } );
- }
+ onDestroy: function onDestroy() {
+ var editedElementView = this.getOption('editedElementView');
- // Remove old applied items from top of list
- while ( items.length && 'applied' === items.first().get( 'status' ) ) {
- items.shift();
+ if (editedElementView) {
+ editedElementView.$el.removeClass('elementor-element-editable');
}
- var id = currentItemID ? currentItemID : new Date().getTime();
+ this.model.trigger('editor:close');
- var currentItem = items.findWhere( {
- id: id
- } );
+ this.triggerMethod('editor:destroy');
+ },
- if ( ! currentItem ) {
- currentItem = new HistoryItem( {
- id: id,
- title: itemData.title,
- subTitle: itemData.subTitle,
- action: getActionLabel( itemData ),
- type: itemData.type,
- elementType: itemData.elementType
- } );
+ onRender: function onRender() {
+ var editedElementView = this.getOption('editedElementView');
- self.startItemTitle = '';
- self.startItemAction = '';
+ if (editedElementView) {
+ editedElementView.$el.addClass('elementor-element-editable');
}
+ },
- var position = 0;
+ onDeviceModeChange: function onDeviceModeChange() {
+ ControlsStack.prototype.onDeviceModeChange.apply(this, arguments);
- // Temp fix. On move a column - insert the `remove` subItem before the section changes subItem.
- // In a multi columns section - the structure has been changed,
- // In a one column section - it's filled with an empty column,
- // The order is important for the `redoItem`, that needed to change the section first
- // and only after that - to remove the column.
- if ( 'column' === itemData.elementType && 'remove' === itemData.type && 'column' === currentItem.get( 'elementType' ) ) {
- position = 1;
- }
+ this.scrollToEditedElement();
+ },
- currentItem.get( 'items' ).add( itemData, { at: position } );
+ onChildviewSettingsChange: function onChildviewSettingsChange(childView) {
+ var editedElementView = this.getOption('editedElementView'),
+ editedElementType = editedElementView.model.get('elType');
- items.add( currentItem, { at: 0 } );
+ if ('widget' === editedElementType) {
+ editedElementType = editedElementView.model.get('widgetType');
+ }
- var panel = elementor.getPanelView();
+ elementor.channels.editor.trigger('change', childView, editedElementView).trigger('change:' + editedElementType, childView, editedElementView).trigger('change:' + editedElementType + ':' + childView.model.get('name'), childView, editedElementView);
+ }
+});
- if ( 'historyPage' === panel.getCurrentPageName() ) {
- panel.getCurrentPageView().render();
- }
+module.exports = EditorView;
- return id;
- };
+/***/ }),
+/* 149 */
+/***/ (function(module, exports, __webpack_require__) {
- this.doItem = function( index ) {
- // Don't track while restoring the item
- this.setActive( false );
+"use strict";
- var item = items.at( index );
- if ( 'not_applied' === item.get( 'status' ) ) {
- this.undoItem( index );
- } else {
- this.redoItem( index );
- }
+var PanelSchemeItemView = __webpack_require__(44),
+ PanelSchemeColorView;
- this.setActive( true );
+PanelSchemeColorView = PanelSchemeItemView.extend({
+ getUIType: function getUIType() {
+ return 'color';
+ },
- var panel = elementor.getPanelView(),
- panelPage = panel.getCurrentPageView(),
- viewToScroll;
+ ui: {
+ input: '.elementor-panel-scheme-color-value'
+ },
- if ( 'editor' === panel.getCurrentPageName() ) {
- if ( panelPage.getOption( 'editedElementView' ).isDestroyed ) {
- // If the the element isn't exist - show the history panel
- panel.setPage( 'historyPage' );
- } else {
- // If element exist - render again, maybe the settings has been changed
- viewToScroll = panelPage.getOption( 'editedElementView' );
- }
- } else {
- if ( 'historyPage' === panel.getCurrentPageName() ) {
- panelPage.render();
- }
+ changeUIValue: function changeUIValue(newValue) {
+ this.ui.input.wpColorPicker('color', newValue);
+ },
- // Try scroll to affected element.
- if ( item instanceof Backbone.Model && item.get( 'items' ).length ) {
- var oldView = item.get( 'items' ).first().get( 'history' ).behavior.view;
- if ( oldView.model ) {
- viewToScroll = self.findView( oldView.model.get( 'id' ) ) ;
- }
- }
+ onBeforeDestroy: function onBeforeDestroy() {
+ if (this.ui.input.wpColorPicker('instance')) {
+ this.ui.input.wpColorPicker('close');
}
+ },
- if ( viewToScroll && ! elementor.helpers.isInViewport( viewToScroll.$el[0], elementor.$previewContents.find( 'html' )[0] ) ) {
- elementor.helpers.scrollToView( viewToScroll );
- }
+ onRender: function onRender() {
+ var self = this;
- if ( item.get( 'editing_started' ) ) {
- if ( ! editorSaved ) {
- elementor.saver.setFlagEditorChange( false );
+ elementor.helpers.wpColorPicker(self.ui.input, {
+ change: function change(event, ui) {
+ self.triggerMethod('value:change', ui.color.toString());
}
- }
- };
+ });
+ }
+});
- this.undoItem = function( index ) {
- var item;
+module.exports = PanelSchemeColorView;
- for ( var stepNum = 0; stepNum < index; stepNum++ ) {
- item = items.at( stepNum );
+/***/ }),
+/* 150 */
+/***/ (function(module, exports, __webpack_require__) {
- if ( 'not_applied' === item.get( 'status' ) ) {
- item.get( 'items' ).each( function( subItem ) {
- var history = subItem.get( 'history' );
+"use strict";
- if ( history ) { /* type duplicate first items hasn't history */
- history.behavior.restore( subItem );
- }
- } );
- item.set( 'status', 'applied' );
- }
- }
- };
+var PanelSchemeItemView = __webpack_require__(44),
+ PanelSchemeTypographyView;
- this.redoItem = function( index ) {
- for ( var stepNum = items.length - 1; stepNum >= index; stepNum-- ) {
- var item = items.at( stepNum );
+PanelSchemeTypographyView = PanelSchemeItemView.extend({
+ getUIType: function getUIType() {
+ return 'typography';
+ },
- if ( 'applied' === item.get( 'status' ) ) {
- var reversedSubItems = _.toArray( item.get( 'items' ).models ).reverse();
+ className: function className() {
+ var classes = PanelSchemeItemView.prototype.className.apply(this, arguments);
- _( reversedSubItems ).each( function( subItem ) {
- var history = subItem.get( 'history' );
+ return classes + ' elementor-panel-box';
+ },
- if ( history ) { /* type duplicate first items hasn't history */
- history.behavior.restore( subItem, true );
- }
- } );
+ ui: {
+ heading: '.elementor-panel-heading',
+ allFields: '.elementor-panel-scheme-typography-item-field',
+ inputFields: 'input.elementor-panel-scheme-typography-item-field',
+ selectFields: 'select.elementor-panel-scheme-typography-item-field',
+ selectFamilyFields: 'select.elementor-panel-scheme-typography-item-field[name="font_family"]'
+ },
- item.set( 'status', 'not_applied' );
- }
- }
- };
+ events: {
+ 'input @ui.inputFields': 'onFieldChange',
+ 'change @ui.selectFields': 'onFieldChange',
+ 'click @ui.heading': 'toggleVisibility'
+ },
- this.getModelLabel = function( model ) {
- if ( ! ( model instanceof Backbone.Model ) ) {
- model = new Backbone.Model( model );
- }
+ onRender: function onRender() {
+ var self = this;
- return elementor.getElementData( model ).title;
- };
+ this.ui.inputFields.add(this.ui.selectFields).each(function () {
+ var $this = jQuery(this),
+ name = $this.attr('name'),
+ value = self.model.get('value')[name];
- this.findView = function( modelID, views ) {
- var self = this,
- founded = false;
+ $this.val(value);
+ });
- if ( ! views ) {
- views = elementor.sections.currentView.children;
- }
+ this.ui.selectFamilyFields.select2({
+ dir: elementor.config.is_rtl ? 'rtl' : 'ltr'
+ });
+ },
- _.each( views._views, function( view ) {
- if ( founded ) {
- return;
- }
- // Widget global used getEditModel
- var model = view.getEditModel ? view.getEditModel() : view.model;
+ toggleVisibility: function toggleVisibility() {
+ this.$el.toggleClass('elementor-open');
+ },
- if ( modelID === model.get( 'id' ) ) {
- founded = view;
- } else if ( view.children && view.children.length ) {
- founded = self.findView( modelID, view.children );
- }
- } );
+ changeUIValue: function changeUIValue(newValue) {
+ this.ui.allFields.each(function () {
+ var $this = jQuery(this),
+ thisName = $this.attr('name'),
+ newFieldValue = newValue[thisName];
- return founded;
- };
+ $this.val(newFieldValue).trigger('change');
+ });
+ },
- this.startMovingItem = function( model ) {
- elementor.history.history.startItem( {
- type: 'move',
- title: self.getModelLabel( model ),
- elementType: model.get( 'elType' )
- } );
- };
+ onFieldChange: function onFieldChange(event) {
+ var $select = this.$(event.currentTarget),
+ currentValue = elementor.schemes.getSchemeValue('typography', this.model.get('key')).value,
+ fieldKey = $select.attr('name');
- this.startInsertTemplate = function( model ) {
- elementor.history.history.startItem( {
- type: 'add',
- title: elementor.translate( 'template' ),
- subTitle: model.get( 'title' ),
- elementType: 'template'
- } );
- };
+ currentValue[fieldKey] = $select.val();
- this.startDropElement = function() {
- var elementView = elementor.channels.panelElements.request( 'element:selected' );
- elementor.history.history.startItem( {
- type: 'add',
- title: self.getModelLabel( elementView.model ),
- elementType: elementView.model.get( 'widgetType' ) || elementView.model.get( 'elType' )
- } );
- };
+ if ('font_family' === fieldKey && !_.isEmpty(currentValue[fieldKey])) {
+ elementor.helpers.enqueueFont(currentValue[fieldKey]);
+ }
- this.startAddElement = function( model ) {
- elementor.history.history.startItem( {
- type: 'add',
- title: self.getModelLabel( model ),
- elementType: model.elType
- } );
- };
+ this.triggerMethod('value:change', currentValue);
+ }
+});
- this.startDuplicateElement = function( model ) {
- elementor.history.history.startItem( {
- type: 'duplicate',
- title: self.getModelLabel( model ),
- elementType: model.get( 'elType' )
- } );
- };
+module.exports = PanelSchemeTypographyView;
- this.startRemoveElement = function( model ) {
- elementor.history.history.startItem( {
- type: 'remove',
- title: self.getModelLabel( model ),
- elementType: model.get( 'elType' )
- } );
- };
+/***/ }),
+/* 151 */
+/***/ (function(module, exports, __webpack_require__) {
- init();
-};
+"use strict";
-module.exports = new Manager();
-},{"./collection":134,"./collection-behavior":133,"./element-behavior":135,"./item":137}],139:[function(require,module,exports){
-module.exports = Marionette.CompositeView.extend( {
- id: 'elementor-panel-history',
+var PanelSchemeBaseView = __webpack_require__(43),
+ PanelSchemeTypographyView;
- template: '#tmpl-elementor-panel-history-tab',
+PanelSchemeTypographyView = PanelSchemeBaseView.extend({
+ getType: function getType() {
+ return 'typography';
+ }
+});
- childView: Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-history-item',
- ui: {
- item: '.elementor-history-item'
- },
- triggers: {
- 'click @ui.item': 'item:click'
- }
- } ),
+module.exports = PanelSchemeTypographyView;
- childViewContainer: '#elementor-history-list',
+/***/ }),
+/* 152 */
+/***/ (function(module, exports, __webpack_require__) {
- currentItem: null,
+"use strict";
- onRender: function() {
- var self = this;
- _.defer( function() {
- // Set current item - the first not applied item
- if ( self.children.length ) {
- var currentItem = self.collection.find( function( model ) {
- return 'not_applied' === model.get( 'status' );
- } ),
- currentView = self.children.findByModel( currentItem );
+var PanelSchemeColorsView = __webpack_require__(42),
+ PanelSchemeColorPickerView;
- self.updateCurrentItem( currentView.$el );
- }
- } );
+PanelSchemeColorPickerView = PanelSchemeColorsView.extend({
+ getType: function getType() {
+ return 'color-picker';
},
- updateCurrentItem: function( element ) {
- var currentItemClass = 'elementor-history-item-current';
-
- if ( this.currentItem ) {
- this.currentItem.removeClass( currentItemClass );
- }
+ getUIType: function getUIType() {
+ return 'color';
+ },
- this.currentItem = element;
+ onSchemeChange: function onSchemeChange() {},
- this.currentItem.addClass( currentItemClass );
+ getViewComparator: function getViewComparator() {
+ return this.orderView;
},
- onChildviewItemClick: function( childView, event ) {
- if ( childView.$el === this.currentItem ) {
- return;
- }
+ orderView: function orderView(model) {
+ return elementor.helpers.getColorPickerPaletteIndex(model.get('key'));
+ }
+});
- var collection = event.model.collection,
- itemIndex = collection.findIndex( event.model );
+module.exports = PanelSchemeColorPickerView;
- elementor.history.history.doItem( itemIndex );
+/***/ }),
+/* 153 */
+/***/ (function(module, exports, __webpack_require__) {
- this.updateCurrentItem( childView.$el );
+"use strict";
- if ( ! this.isDestroyed ) {
- this.render();
- }
- }
-} );
-},{}],140:[function(require,module,exports){
-var HistoryPageView = require( './panel-page' ),
- Manager;
+var PanelSchemeDisabledView;
+
+PanelSchemeDisabledView = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-schemes-disabled',
-Manager = function() {
- var self = this;
+ id: 'elementor-panel-schemes-disabled',
- var addPanelPage = function() {
- elementor.getPanelView().addPage( 'historyPage', {
- view: HistoryPageView,
- title: elementor.translate( 'history' )
- } );
- };
+ className: 'elementor-nerd-box',
+
+ disabledTitle: '',
- var init = function() {
- elementor.on( 'preview:loaded', addPanelPage );
+ templateHelpers: function templateHelpers() {
+ return {
+ disabledTitle: this.disabledTitle
+ };
+ }
+});
- self.history = require( './history/manager' );
+module.exports = PanelSchemeDisabledView;
- self.revisions = require( './revisions/manager' );
+/***/ }),
+/* 154 */
+/***/ (function(module, exports, __webpack_require__) {
- self.revisions.init();
- };
+"use strict";
- jQuery( window ).on( 'elementor:init', init );
-};
-module.exports = new Manager();
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-footer-content',
-},{"./history/manager":138,"./panel-page":141,"./revisions/manager":144}],141:[function(require,module,exports){
-var TabHistoryView = require( './history/panel-tab' ),
- TabHistoryEmpty = require( './history/empty' ),
- TabRevisionsView = require( './revisions/panel-tab' ),
- TabRevisionsEmpty = require( './revisions/empty' );
+ tagName: 'nav',
-module.exports = Marionette.LayoutView.extend( {
- template: '#tmpl-elementor-panel-history-page',
+ id: 'elementor-panel-footer-tools',
- regions: {
- content: '#elementor-panel-history-content'
- },
+ possibleRotateModes: ['portrait', 'landscape'],
ui: {
- tabs: '.elementor-panel-navigation-tab'
+ buttonSave: '#elementor-panel-saver-button-publish, #elementor-panel-saver-menu-save-draft', // TODO: remove. Compatibility for Pro <= 1.9.5
+ menuButtons: '.elementor-panel-footer-tool',
+ settings: '#elementor-panel-footer-settings',
+ deviceModeIcon: '#elementor-panel-footer-responsive > i',
+ deviceModeButtons: '#elementor-panel-footer-responsive .elementor-panel-footer-sub-menu-item',
+ saveTemplate: '#elementor-panel-saver-menu-save-template',
+ history: '#elementor-panel-footer-history',
+ navigator: '#elementor-panel-footer-navigator'
},
events: {
- 'click @ui.tabs': 'onTabClick'
+ 'click @ui.menuButtons': 'onMenuButtonsClick',
+ 'click @ui.settings': 'onSettingsClick',
+ 'click @ui.deviceModeButtons': 'onResponsiveButtonsClick',
+ 'click @ui.saveTemplate': 'onSaveTemplateClick',
+ 'click @ui.history': 'onHistoryClick',
+ 'click @ui.navigator': 'onNavigatorClick'
},
- regionViews: {},
+ behaviors: function behaviors() {
+ var behaviors = {
+ saver: {
+ behaviorClass: elementor.modules.components.saver.behaviors.FooterSaver
+ }
+ };
+
+ return elementor.hooks.applyFilters('panel/footer/behaviors', behaviors, this);
+ },
- currentTab: null,
+ initialize: function initialize() {
+ this.listenTo(elementor.channels.deviceMode, 'change', this.onDeviceModeChange);
+ },
- initialize: function() {
- this.initRegionViews();
+ getDeviceModeButton: function getDeviceModeButton(deviceMode) {
+ return this.ui.deviceModeButtons.filter('[data-device-mode="' + deviceMode + '"]');
},
- initRegionViews: function() {
- var historyItems = elementor.history.history.getItems(),
- revisionsItems = elementor.history.revisions.getItems();
+ onMenuButtonsClick: function onMenuButtonsClick(event) {
+ var $tool = jQuery(event.currentTarget);
- this.regionViews = {
- history: {
- region: this.content,
- view: function() {
- if ( historyItems.length ) {
- return TabHistoryView;
- }
+ // If the tool is not toggleable or the click is inside of a tool
+ if (!$tool.hasClass('elementor-toggle-state') || jQuery(event.target).closest('.elementor-panel-footer-sub-menu-item').length) {
+ return;
+ }
- return TabHistoryEmpty;
- },
- options: {
- collection: historyItems
- }
- },
- revisions: {
- region: this.content,
- view: function() {
- if ( revisionsItems.length ) {
- return TabRevisionsView;
- }
+ var isOpen = $tool.hasClass('elementor-open');
- return TabRevisionsEmpty;
- },
+ this.ui.menuButtons.not('.elementor-leave-open').removeClass('elementor-open');
- options: {
- collection: revisionsItems
- }
- }
- };
+ if (!isOpen) {
+ $tool.addClass('elementor-open');
+ }
},
- activateTab: function( tabName ) {
- this.ui.tabs
- .removeClass( 'elementor-active' )
- .filter( '[data-view="' + tabName + '"]' )
- .addClass( 'elementor-active' );
+ onSettingsClick: function onSettingsClick() {
+ var self = this;
- this.showView( tabName );
- },
+ if ('page_settings' !== elementor.getPanelView().getCurrentPageName()) {
+ elementor.getPanelView().setPage('page_settings');
- getCurrentTab: function() {
- return this.currentTab;
+ elementor.getPanelView().getCurrentPageView().once('destroy', function () {
+ self.ui.settings.removeClass('elementor-open');
+ });
+ }
},
- showView: function( viewName ) {
- var viewDetails = this.regionViews[ viewName ],
- options = viewDetails.options || {},
- View = viewDetails.view;
+ onDeviceModeChange: function onDeviceModeChange() {
+ var previousDeviceMode = elementor.channels.deviceMode.request('previousMode'),
+ currentDeviceMode = elementor.channels.deviceMode.request('currentMode');
- if ( 'function' === typeof View ) {
- View = viewDetails.view();
- }
+ this.getDeviceModeButton(previousDeviceMode).removeClass('active');
- options.viewName = viewName;
- this.currentTab = new View( options );
+ this.getDeviceModeButton(currentDeviceMode).addClass('active');
- viewDetails.region.show( this.currentTab );
+ // Change the footer icon
+ this.ui.deviceModeIcon.removeClass('eicon-device-' + previousDeviceMode).addClass('eicon-device-' + currentDeviceMode);
},
- onRender: function() {
- this.showView( 'history' );
- },
+ onResponsiveButtonsClick: function onResponsiveButtonsClick(event) {
+ var $clickedButton = this.$(event.currentTarget),
+ newDeviceMode = $clickedButton.data('device-mode');
- onTabClick: function( event ) {
- this.activateTab( event.currentTarget.dataset.view );
+ elementor.changeDeviceMode(newDeviceMode);
},
- onDestroy: function() {
- elementor.getPanelView().getFooterView().ui.history.removeClass( 'elementor-open' );
- }
-} );
+ onSaveTemplateClick: function onSaveTemplateClick() {
+ elementor.templates.startModal({
+ onReady: function onReady() {
+ elementor.templates.getLayout().showSaveTemplateView();
+ }
+ });
+ },
-},{"./history/empty":136,"./history/panel-tab":139,"./revisions/empty":143,"./revisions/panel-tab":146}],142:[function(require,module,exports){
-var RevisionModel = require( './model' );
+ onHistoryClick: function onHistoryClick() {
+ if ('historyPage' !== elementor.getPanelView().getCurrentPageName()) {
+ elementor.getPanelView().setPage('historyPage');
+ }
+ },
-module.exports = Backbone.Collection.extend( {
- model: RevisionModel,
- comparator: function( model ) {
- return -model.get( 'timestamp' );
+ onNavigatorClick: function onNavigatorClick() {
+ if (elementor.navigator.isOpen()) {
+ elementor.navigator.close();
+ } else {
+ elementor.navigator.open();
+ }
}
-} );
+});
-},{"./model":145}],143:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-revisions-no-revisions',
- id: 'elementor-panel-revisions-no-revisions',
- className: 'elementor-panel-nerd-box'
-} );
+/***/ }),
+/* 155 */
+/***/ (function(module, exports, __webpack_require__) {
-},{}],144:[function(require,module,exports){
-var RevisionsCollection = require( './collection' ),
- RevisionsManager;
+"use strict";
-RevisionsManager = function() {
- var self = this,
- revisions;
- this.getItems = function() {
- return revisions;
- };
+var PanelHeaderItemView;
- var onEditorSaved = function( data ) {
- if ( data.latest_revisions ) {
- self.addRevisions( data.latest_revisions );
- }
+PanelHeaderItemView = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-panel-header',
- if ( data.revisions_ids ) {
- var revisionsToKeep = revisions.filter( function( revision ) {
- return -1 !== data.revisions_ids.indexOf( revision.get( 'id' ) );
- } );
+ id: 'elementor-panel-header',
- revisions.reset( revisionsToKeep );
- }
- };
+ ui: {
+ menuButton: '#elementor-panel-header-menu-button',
+ menuIcon: '#elementor-panel-header-menu-button i',
+ title: '#elementor-panel-header-title',
+ addButton: '#elementor-panel-header-add-button'
+ },
- var attachEvents = function() {
- elementor.channels.editor.on( 'saved', onEditorSaved );
- };
+ events: {
+ 'click @ui.addButton': 'onClickAdd',
+ 'click @ui.menuButton': 'onClickMenu'
+ },
- var addHotKeys = function() {
- var UP_ARROW_KEY = 38,
- DOWN_ARROW_KEY = 40;
+ setTitle: function setTitle(title) {
+ this.ui.title.html(title);
+ },
- var navigationHandler = {
- isWorthHandling: function() {
- var panel = elementor.getPanelView();
+ onClickAdd: function onClickAdd() {
+ elementor.getPanelView().setPage('elements');
+ },
- if ( 'historyPage' !== panel.getCurrentPageName() ) {
- return false;
- }
+ onClickMenu: function onClickMenu() {
+ var panel = elementor.getPanelView(),
+ currentPanelPageName = panel.getCurrentPageName(),
+ nextPage = 'menu' === currentPanelPageName ? 'elements' : 'menu';
- var revisionsTab = panel.getCurrentPageView().getCurrentTab();
+ if ('menu' === nextPage) {
+ var arrowClass = 'eicon-arrow-' + (elementor.config.is_rtl ? 'right' : 'left');
- return revisionsTab.currentPreviewId && revisionsTab.currentPreviewItem && revisionsTab.children.length > 1;
- },
- handle: function( event ) {
- elementor.getPanelView().getCurrentPageView().getCurrentTab().navigate( UP_ARROW_KEY === event.which );
- }
- };
+ this.ui.menuIcon.removeClass('eicon-menu-bar').addClass(arrowClass);
+ }
- elementor.hotKeys.addHotKeyHandler( UP_ARROW_KEY, 'revisionNavigation', navigationHandler );
+ panel.setPage(nextPage);
+ }
+});
- elementor.hotKeys.addHotKeyHandler( DOWN_ARROW_KEY, 'revisionNavigation', navigationHandler );
- };
+module.exports = PanelHeaderItemView;
- this.setEditorData = function( data ) {
- var collection = elementor.getRegion( 'sections' ).currentView.collection;
+/***/ }),
+/* 156 */
+/***/ (function(module, exports, __webpack_require__) {
- collection.reset( data );
- };
+"use strict";
- this.getRevisionDataAsync = function( id, options ) {
- _.extend( options, {
- data: {
- id: id
- }
- } );
- return elementor.ajax.send( 'get_revision_data', options );
- };
+var _independent = __webpack_require__(157);
- this.addRevisions = function( items ) {
- items.forEach( function( item ) {
- var existedModel = revisions.findWhere( {
- id: item.id
- } );
+var _independent2 = _interopRequireDefault(_independent);
- if ( existedModel ) {
- revisions.remove( existedModel );
- }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- revisions.add( item );
- } );
- };
+var BaseSectionsContainerView = __webpack_require__(158),
+ Preview;
- this.deleteRevision = function( revisionModel, options ) {
- var params = {
- data: {
- id: revisionModel.get( 'id' )
- },
- success: function() {
- if ( options.success ) {
- options.success();
- }
+Preview = BaseSectionsContainerView.extend({
+ template: Marionette.TemplateCache.get('#tmpl-elementor-preview'),
- revisionModel.destroy();
+ className: 'elementor-inner',
- if ( ! revisions.length ) {
- var panel = elementor.getPanelView();
- if ( 'historyPage' === panel.getCurrentPageName() ) {
- panel.getCurrentPageView().activateTab( 'revisions' );
- }
- }
+ childViewContainer: '.elementor-section-wrap',
+
+ behaviors: function behaviors() {
+ var parentBehaviors = BaseSectionsContainerView.prototype.behaviors.apply(this, arguments),
+ behaviors = {
+ contextMenu: {
+ behaviorClass: __webpack_require__(11),
+ groups: this.getContextMenuGroups()
}
};
- if ( options.error ) {
- params.error = options.error;
+ if (elementor.config.user.introduction) {
+ behaviors.introduction = {
+ behaviorClass: __webpack_require__(159)
+ };
}
- elementor.ajax.send( 'delete_revision', params );
- };
+ return jQuery.extend(parentBehaviors, behaviors);
+ },
- this.init = function() {
- revisions = new RevisionsCollection( elementor.config.revisions );
+ getContextMenuGroups: function getContextMenuGroups() {
+ var hasContent = function hasContent() {
+ return elementor.elements.length > 0;
+ };
- attachEvents();
+ return [{
+ name: 'paste',
+ actions: [{
+ name: 'paste',
+ title: elementor.translate('paste'),
+ callback: this.paste.bind(this),
+ isEnabled: this.isPasteEnabled.bind(this)
+ }]
+ }, {
+ name: 'content',
+ actions: [{
+ name: 'copy_all_content',
+ title: elementor.translate('copy_all_content'),
+ callback: this.copy.bind(this),
+ isEnabled: hasContent
+ }, {
+ name: 'delete_all_content',
+ title: elementor.translate('delete_all_content'),
+ callback: elementor.clearPage.bind(elementor),
+ isEnabled: hasContent
+ }]
+ }];
+ },
+
+ copy: function copy() {
+ elementor.setStorage('transfer', {
+ type: 'copy',
+ elementsType: 'section',
+ elements: elementor.elements.toJSON({ copyHtmlCache: true })
+ });
+ },
- addHotKeys();
- };
-};
+ paste: function paste(atIndex) {
+ var self = this,
+ transferData = elementor.getStorage('transfer'),
+ section,
+ index = undefined !== atIndex ? atIndex : this.collection.length;
-module.exports = new RevisionsManager();
+ elementor.channels.data.trigger('element:before:add', transferData.elements[0]);
-},{"./collection":142}],145:[function(require,module,exports){
-var RevisionModel;
+ if ('section' === transferData.elementsType) {
+ transferData.elements.forEach(function (element) {
+ self.addChildElement(element, {
+ at: index,
+ edit: false,
+ clone: true
+ });
-RevisionModel = Backbone.Model.extend();
+ index++;
+ });
+ } else if ('column' === transferData.elementsType) {
+ section = self.addChildElement({ allowEmpty: true }, { at: atIndex });
-RevisionModel.prototype.sync = function() {
- return null;
-};
+ section.model.unset('allowEmpty');
-module.exports = RevisionModel;
+ index = 0;
-},{}],146:[function(require,module,exports){
-module.exports = Marionette.CompositeView.extend( {
- id: 'elementor-panel-revisions',
+ transferData.elements.forEach(function (element) {
+ section.addChildElement(element, {
+ at: index,
+ clone: true
+ });
- template: '#tmpl-elementor-panel-revisions',
+ index++;
+ });
- childView: require( './view' ),
+ section.redefineLayout();
+ } else {
+ section = self.addChildElement(null, { at: atIndex });
- childViewContainer: '#elementor-revisions-list',
+ index = 0;
- ui: {
- discard: '.elementor-panel-scheme-discard .elementor-button',
- apply: '.elementor-panel-scheme-save .elementor-button'
+ transferData.elements.forEach(function (element) {
+ section.addChildElement(element, {
+ at: index,
+ clone: true
+ });
+
+ index++;
+ });
+ }
+
+ elementor.channels.data.trigger('element:after:add', transferData.elements[0]);
},
- events: {
- 'click @ui.discard': 'onDiscardClick',
- 'click @ui.apply': 'onApplyClick'
+ isPasteEnabled: function isPasteEnabled() {
+ return elementor.getStorage('transfer');
},
- isRevisionApplied: false,
+ onRender: function onRender() {
+ if (!elementor.userCan('design')) {
+ return;
+ }
+ var addNewSectionView = new _independent2.default();
- jqueryXhr: null,
+ addNewSectionView.render();
- currentPreviewId: null,
+ this.$el.append(addNewSectionView.$el);
+ }
+});
- currentPreviewItem: null,
+module.exports = Preview;
- initialize: function() {
- this.listenTo( elementor.channels.editor, 'saved', this.onEditorSaved );
- this.currentPreviewId = elementor.config.current_revision_id;
- },
+/***/ }),
+/* 157 */
+/***/ (function(module, exports, __webpack_require__) {
- getRevisionViewData: function( revisionView ) {
- var self = this;
+"use strict";
- this.jqueryXhr = elementor.history.revisions.getRevisionDataAsync( revisionView.model.get( 'id' ), {
- success: function( data ) {
- elementor.history.revisions.setEditorData( data.elements );
- elementor.settings.page.model.set( data.settings );
- self.setRevisionsButtonsActive( true );
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
- self.jqueryXhr = null;
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- revisionView.$el.removeClass( 'elementor-revision-item-loading' );
+var _base = __webpack_require__(30);
- self.enterReviewMode();
- },
- error: function() {
- revisionView.$el.removeClass( 'elementor-revision-item-loading' );
+var _base2 = _interopRequireDefault(_base);
- if ( 'abort' === self.jqueryXhr.statusText ) {
- return;
- }
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- self.currentPreviewItem = null;
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- self.currentPreviewId = null;
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
- alert( 'An error occurred' );
- }
- } );
- },
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
- setRevisionsButtonsActive: function( active ) {
- this.ui.apply.add( this.ui.discard ).prop( 'disabled', ! active );
- },
+var AddSectionView = function (_BaseAddSectionView) {
+ _inherits(AddSectionView, _BaseAddSectionView);
- deleteRevision: function( revisionView ) {
- var self = this;
+ function AddSectionView() {
+ _classCallCheck(this, AddSectionView);
- revisionView.$el.addClass( 'elementor-revision-item-loading' );
+ return _possibleConstructorReturn(this, (AddSectionView.__proto__ || Object.getPrototypeOf(AddSectionView)).apply(this, arguments));
+ }
- elementor.history.revisions.deleteRevision( revisionView.model, {
- success: function() {
- if ( revisionView.model.get( 'id' ) === self.currentPreviewId ) {
- self.onDiscardClick();
- }
+ _createClass(AddSectionView, [{
+ key: 'onCloseButtonClick',
+ value: function onCloseButtonClick() {
+ this.closeSelectPresets();
+ }
+ }, {
+ key: 'id',
+ get: function get() {
+ return 'elementor-add-new-section';
+ }
+ }]);
- self.currentPreviewId = null;
- },
- error: function() {
- revisionView.$el.removeClass( 'elementor-revision-item-loading' );
+ return AddSectionView;
+}(_base2.default);
- alert( 'An error occurred' );
- }
- } );
- },
+exports.default = AddSectionView;
- enterReviewMode: function() {
- elementor.changeEditMode( 'review' );
- },
+/***/ }),
+/* 158 */
+/***/ (function(module, exports, __webpack_require__) {
- exitReviewMode: function() {
- elementor.changeEditMode( 'edit' );
- },
+"use strict";
- navigate: function( reverse ) {
- var currentPreviewItemIndex = this.collection.indexOf( this.currentPreviewItem.model ),
- requiredIndex = reverse ? currentPreviewItemIndex - 1 : currentPreviewItemIndex + 1;
- if ( requiredIndex < 0 ) {
- requiredIndex = this.collection.length - 1;
- }
+var SectionView = __webpack_require__(29),
+ BaseContainer = __webpack_require__(28),
+ BaseSectionsContainerView;
- if ( requiredIndex >= this.collection.length ) {
- requiredIndex = 0;
- }
+BaseSectionsContainerView = BaseContainer.extend({
+ childView: SectionView,
- this.children.findByIndex( requiredIndex ).ui.detailsArea.trigger( 'click' );
- },
+ behaviors: function behaviors() {
+ var behaviors = {
+ Sortable: {
+ behaviorClass: __webpack_require__(19),
+ elChildType: 'section'
+ }
+ };
- onEditorSaved: function() {
- this.exitReviewMode();
+ return elementor.hooks.applyFilters('elements/base-section-container/behaviors', behaviors, this);
+ },
- this.setRevisionsButtonsActive( false );
+ getSortableOptions: function getSortableOptions() {
+ return {
+ handle: '> .elementor-element-overlay .elementor-editor-element-edit',
+ items: '> .elementor-section'
+ };
+ },
- this.currentPreviewId = elementor.config.current_revision_id;
+ getChildType: function getChildType() {
+ return ['section'];
},
- onApplyClick: function() {
- elementor.saver.setFlagEditorChange( true );
+ initialize: function initialize() {
+ BaseContainer.prototype.initialize.apply(this, arguments);
- elementor.saver.saveAutoSave();
+ this.listenTo(this.collection, 'add remove reset', this.onCollectionChanged).listenTo(elementor.channels.panelElements, 'element:drag:start', this.onPanelElementDragStart).listenTo(elementor.channels.panelElements, 'element:drag:end', this.onPanelElementDragEnd);
+ },
- this.isRevisionApplied = true;
+ onCollectionChanged: function onCollectionChanged() {
+ elementor.saver.setFlagEditorChange(true);
+ },
- this.currentPreviewId = null;
+ onPanelElementDragStart: function onPanelElementDragStart() {
+ elementor.helpers.disableElementEvents(this.$el.find('iframe'));
},
- onDiscardClick: function() {
- elementor.history.revisions.setEditorData( elementor.config.data );
+ onPanelElementDragEnd: function onPanelElementDragEnd() {
+ elementor.helpers.enableElementEvents(this.$el.find('iframe'));
+ }
+});
- elementor.saver.setFlagEditorChange( this.isRevisionApplied );
+module.exports = BaseSectionsContainerView;
- this.isRevisionApplied = false;
+/***/ }),
+/* 159 */
+/***/ (function(module, exports, __webpack_require__) {
- this.setRevisionsButtonsActive( false );
+"use strict";
- this.currentPreviewId = null;
- this.exitReviewMode();
+module.exports = Marionette.Behavior.extend({
- if ( this.currentPreviewItem ) {
- this.currentPreviewItem.$el.removeClass( 'elementor-revision-current-preview' );
- }
- },
+ introductionViewed: false,
- onDestroy: function() {
- if ( this.currentPreviewId && this.currentPreviewId !== elementor.config.current_revision_id ) {
- this.onDiscardClick();
- }
+ ui: {
+ editButton: '.elementor-editor-element-edit'
},
- onRenderCollection: function() {
- if ( ! this.currentPreviewId ) {
- return;
- }
-
- var currentPreviewModel = this.collection.findWhere({ id: this.currentPreviewId });
-
- // Ensure the model is exist and not deleted during a save.
- if ( currentPreviewModel ) {
- this.currentPreviewItem = this.children.findByModelCid( currentPreviewModel.cid );
- this.currentPreviewItem.$el.addClass( 'elementor-revision-current-preview' );
- }
+ events: {
+ 'click @ui.editButton': 'show'
},
- onChildviewDetailsAreaClick: function( childView ) {
- var self = this,
- revisionID = childView.model.get( 'id' );
-
- if ( revisionID === self.currentPreviewId ) {
- return;
- }
-
- if ( this.jqueryXhr ) {
- this.jqueryXhr.abort();
- }
+ initialize: function initialize() {
+ this.initDialog();
+ },
- if ( self.currentPreviewItem ) {
- self.currentPreviewItem.$el.removeClass( 'elementor-revision-current-preview' );
- }
+ initDialog: function initDialog() {
+ var dialog;
- childView.$el.addClass( 'elementor-revision-current-preview elementor-revision-item-loading' );
+ this.getDialog = function () {
+ if (!dialog) {
+ dialog = elementor.dialogsManager.createWidget('buttons', {
+ className: 'elementor-introduction',
+ headerMessage: elementor.translate('meet_right_click_header'),
+ message: elementor.translate('meet_right_click_message'),
+ iframe: elementor.$preview,
+ position: {
+ my: 'center top+5',
+ at: 'center bottom',
+ collision: 'fit'
+ },
+ effects: {
+ hide: 'hide',
+ show: 'show'
+ },
+ hide: {
+ onBackgroundClick: false
+ }
+ });
+
+ dialog.addButton({
+ name: 'learn-more',
+ text: elementor.translate('learn_more'),
+ tag: 'div',
+ callback: function callback() {
+ open(elementor.config.help_right_click_url, '_blank');
+ }
+ });
- if ( elementor.saver.isEditorChanged() && null === self.currentPreviewId ) {
- elementor.saver.saveEditor( {
- status: 'autosave',
- onSuccess: function() {
- self.getRevisionViewData( childView );
- }
- } );
- } else {
- self.getRevisionViewData( childView );
- }
+ dialog.addButton({
+ name: 'ok',
+ text: elementor.translate('got_it'),
+ callback: this.setIntroductionViewed.bind(this)
+ });
- self.currentPreviewItem = childView;
+ dialog.getElements('ok').addClass('elementor-button elementor-button-success');
+ }
- self.currentPreviewId = revisionID;
+ return dialog;
+ };
},
- onChildviewDeleteClick: function( childView ) {
- var self = this,
- type = childView.model.get( 'type' );
-
- var removeDialog = elementor.dialogsManager.createWidget( 'confirm', {
- message: elementor.translate( 'dialog_confirm_delete', [ type ] ),
- headerMessage: elementor.translate( 'delete_element', [ type ] ),
- strings: {
- confirm: elementor.translate( 'delete' ),
- cancel: elementor.translate( 'cancel' )
- },
- defaultOption: 'confirm',
- onConfirm: function() {
- self.deleteRevision( childView );
- }
- } );
-
- removeDialog.show();
- }
-} );
+ show: function show(event) {
+ if (this.introductionViewed) {
+ return;
+ }
-},{"./view":147}],147:[function(require,module,exports){
-module.exports = Marionette.ItemView.extend( {
- template: '#tmpl-elementor-panel-revisions-revision-item',
+ var dialog = this.getDialog();
- className: 'elementor-revision-item',
+ dialog.setSettings('position', {
+ of: event.currentTarget
+ });
- ui: {
- detailsArea: '.elementor-revision-item__details',
- deleteButton: '.elementor-revision-item__tools-delete'
+ dialog.show();
},
- triggers: {
- 'click @ui.detailsArea': 'detailsArea:click',
- 'click @ui.deleteButton': 'delete:click'
+ setIntroductionViewed: function setIntroductionViewed() {
+ this.introductionViewed = true;
+
+ elementor.ajax.addRequest('introduction_viewed');
}
-} );
+});
-},{}]},{},[115,116,66])
-//# sourceMappingURL=editor.js.map
+/***/ })
+/******/ ]);
+//# sourceMappingURL=editor.js.map
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-!function r(s,l,a){function c(t,e){if(!l[t]){if(!s[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(d)return d(t,!0);var i=new Error("Cannot find module '"+t+"'");throw i.code="MODULE_NOT_FOUND",i}var o=l[t]={exports:{}};s[t][0].call(o.exports,function(e){return c(s[t][1][e]||e)},o,o.exports,r,s,l,a)}return l[t].exports}for(var d="function"==typeof require&&require,e=0;e<a.length;e++)c(a[e]);return c}({1:[function(e,t,n){var o=e("elementor-dynamic-tags/tag-panel-view");t.exports=Marionette.Behavior.extend({tagView:null,listenerAttached:!1,ui:{tagArea:".elementor-control-tag-area",dynamicSwitcher:".elementor-control-dynamic-switcher"},events:{"click @ui.dynamicSwitcher":"onDynamicSwitcherClick"},initialize:function(){this.listenerAttached||(this.listenTo(this.view.options.elementSettingsModel,"change:external:__dynamic__",this.onAfterExternalChange),this.listenerAttached=!0)},renderTools:function(){if(!this.getOption("dynamicSettings").default){var e=jQuery(Marionette.Renderer.render("#tmpl-elementor-control-dynamic-switcher"));this.ui.controlTitle[this.view.model.get("label_block")?"after":"before"](e),this.ui.dynamicSwitcher=this.$el.find(this.ui.dynamicSwitcher.selector)}},toggleDynamicClass:function(){this.$el.toggleClass("elementor-control-dynamic-value",this.isDynamicMode())},isDynamicMode:function(){var e=this.view.elementSettingsModel.get("__dynamic__");return!(!e||!e[this.view.model.get("name")])},createTagsList:function(){var i=_.groupBy(this.getOption("tags"),"group"),e=elementor.dynamicTags.getConfig("groups"),t=this.ui.tagsList=jQuery("<div>",{class:"elementor-tags-list"}),o=jQuery("<div>",{class:"elementor-tags-list__inner"});t.append(o),jQuery.each(e,function(e){var t=i[e];if(t){var n=jQuery("<div>",{class:"elementor-tags-list__group-title"}).text(this.title);o.append(n),t.forEach(function(e){var t=jQuery("<div>",{class:"elementor-tags-list__item"});t.text(e.title).attr("data-tag-name",e.name),o.append(t)})}}),o.on("click",".elementor-tags-list__item",this.onTagsListItemClick.bind(this)),elementor.$body.append(t)},getTagsList:function(){return this.ui.tagsList||this.createTagsList(),this.ui.tagsList},toggleTagsList:function(){var e=this.getTagsList();e.is(":visible")?e.hide():e.show().position({my:"right top",at:"right bottom+5",of:this.ui.dynamicSwitcher})},setTagView:function(e,t,n){this.tagView&&this.tagView.destroy();var i=this.tagView=new o({id:e,name:t,settings:n,dynamicSettings:this.getOption("dynamicSettings")});i.render(),this.ui.tagArea.after(i.el),this.listenTo(i.model,"change",this.onTagViewModelChange.bind(this)).listenTo(i,"remove",this.onTagViewRemove.bind(this))},setDefaultTagView:function(){var e=elementor.dynamicTags.tagTextToTagData(this.getDynamicValue());this.setTagView(e.id,e.name,e.settings)},tagViewToTagText:function(){var e=this.tagView;return elementor.dynamicTags.tagDataToTagText(e.getOption("id"),e.getOption("name"),e.model)},getDynamicValue:function(){return this.view.elementSettingsModel.get("__dynamic__")[this.view.model.get("name")]},getDynamicControlSettings:function(){return{control:{name:"__dynamic__",label:this.view.model.get("label")}}},setDynamicValue:function(e){var t=this.view.model.get("name"),n=this.view.elementSettingsModel.get("__dynamic__")||{};(n=elementor.helpers.cloneObject(n))[t]=e,this.view.elementSettingsModel.set("__dynamic__",n,this.getDynamicControlSettings(t)),this.toggleDynamicClass()},destroyTagView:function(){this.tagView&&(this.tagView.destroy(),this.tagView=null)},onRender:function(){this.$el.addClass("elementor-control-dynamic"),this.renderTools(),this.toggleDynamicClass(),this.isDynamicMode()&&this.setDefaultTagView()},onDynamicSwitcherClick:function(){this.toggleTagsList()},onTagsListItemClick:function(e){var t=jQuery(e.currentTarget);this.setTagView(elementor.helpers.getUniqueID(),t.data("tagName"),{}),this.setDynamicValue(this.tagViewToTagText()),this.toggleTagsList(),this.tagView.getTagConfig().settings_required&&this.tagView.showSettingsPopup()},onTagViewModelChange:function(){this.setDynamicValue(this.tagViewToTagText())},onTagViewRemove:function(){var e=this.view.model.get("name"),t=this.view.elementSettingsModel.get("__dynamic__");delete(t=elementor.helpers.cloneObject(t))[e],Object.keys(t).length?this.view.elementSettingsModel.set("__dynamic__",t,this.getDynamicControlSettings(e)):this.view.elementSettingsModel.unset("__dynamic__",this.getDynamicControlSettings(e)),this.toggleDynamicClass()},onAfterExternalChange:function(){this.destroyTagView(),this.isDynamicMode()&&this.setDefaultTagView(),this.toggleDynamicClass()},onDestroy:function(){this.destroyTagView()}})},{"elementor-dynamic-tags/tag-panel-view":5}],2:[function(e,t,n){var i=e("elementor-utils/module"),o=e("elementor-elements/models/base-settings");t.exports=i.extend({CACHE_KEY_NOT_FOUND_ERROR:"Cache key not found",tags:{Base:e("elementor-dynamic-tags/tag")},cache:{},cacheRequests:{},cacheCallbacks:[],addCacheRequest:function(e){this.cacheRequests[this.createCacheKey(e)]=!0},createCacheKey:function(e){return btoa(e.getOption("name"))+"-"+btoa(encodeURIComponent(JSON.stringify(e.model)))},loadTagDataFromCache:function(e){var t=this.createCacheKey(e);if(void 0!==this.cache[t])return this.cache[t];this.cacheRequests[t]||this.addCacheRequest(e)},loadCacheRequests:function(){var t=this.cache,e=this.cacheRequests,n=this.cacheCallbacks;this.cacheRequests={},this.cacheCallbacks=[],elementor.ajax.send("render_tags",{data:{post_id:elementor.config.document.id,tags:Object.keys(e)},success:function(e){jQuery.extend(t,e),n.forEach(function(e){e()})}})},refreshCacheFromServer:function(e){this.cacheCallbacks.push(e),this.loadCacheRequests()},getConfig:function(e){return this.getItems(elementor.config.dynamicTags,e)},parseTagsText:function(e,t,n){var i=this;return"object"===t.returnType?i.parseTagText(e,t,n):e.replace(/\[elementor-tag[^\]]+]/g,function(e){return i.parseTagText(e,t,n)})},parseTagText:function(e,t,n){var i=this.tagTextToTagData(e);return i?n(i.id,i.name,i.settings):"object"===t.returnType?{}:""},tagTextToTagData:function(e){var t=e.match(/id="(.*?(?="))"/),n=e.match(/name="(.*?(?="))"/),i=e.match(/settings="(.*?(?="]))/);return!!(t&&n&&i)&&{id:t[1],name:n[1],settings:JSON.parse(decodeURIComponent(i[1]))}},createTag:function(e,t,n){var i=this.getConfig("tags."+t);if(i)return new(this.tags[t]||this.tags.Base)({id:e,name:t,model:new o(n,{controls:i.controls})})},getTagDataContent:function(e,t,n){var i=this.createTag(e,t,n);if(i)return i.getContent()},tagDataToTagText:function(e,t,n){return'[elementor-tag id="'+e+'" name="'+t+'" settings="'+(n=encodeURIComponent(JSON.stringify(n&&n.toJSON({removeDefault:!0})||{})))+'"]'},cleanCache:function(){this.cache={}},onInit:function(){this.loadCacheRequests=_.debounce(this.loadCacheRequests,300)}})},{"elementor-dynamic-tags/tag":6,"elementor-elements/models/base-settings":68,"elementor-utils/module":131}],3:[function(e,t,n){t.exports=Marionette.ItemView.extend({className:"elementor-tag-controls-stack-empty",template:"#tmpl-elementor-tag-controls-stack-empty"})},{}],4:[function(e,t,n){var i=e("elementor-views/controls-stack"),o=e("elementor-dynamic-tags/tag-controls-stack-empty");t.exports=i.extend({activeTab:"content",template:_.noop,emptyView:o,isEmpty:function(){return this.collection.length<2},childViewOptions:function(){return{elementSettingsModel:this.model}},onRenderTemplate:function(){this.activateFirstSection()}})},{"elementor-dynamic-tags/tag-controls-stack-empty":3,"elementor-views/controls-stack":126}],5:[function(e,t,n){var i=e("elementor-dynamic-tags/tag-controls-stack"),o=e("elementor-elements/models/base-settings");t.exports=Marionette.ItemView.extend({className:"elementor-dynamic-cover elementor-input-style",tagControlsStack:null,templateHelpers:function(){var e={};return this.model&&(e.controls=this.model.options.controls),e},ui:{remove:".elementor-dynamic-cover__remove"},events:function(){var e={"click @ui.remove":"onRemoveClick"};return this.hasSettings()&&(e.click="onClick"),e},getTemplate:function(){var e=this.getTagConfig(),t=Marionette.TemplateCache.get("#tmpl-elementor-control-dynamic-cover"),n=Marionette.Renderer.render(t,{hasSettings:this.hasSettings(),isRemovable:!this.getOption("dynamicSettings").default,title:e.title,content:e.panel_template});return Marionette.TemplateCache.prototype.compileTemplate(n.trim())},getTagConfig:function(){return elementor.dynamicTags.getConfig("tags."+this.getOption("name"))},initSettingsPopup:function(){var e={className:"elementor-tag-settings-popup",position:{my:"left top+5",at:"left bottom",of:this.$el,autoRefresh:!0}},t=elementor.dialogsManager.createWidget("buttons",e);this.getSettingsPopup=function(){return t}},hasSettings:function(){return!!Object.values(this.getTagConfig().controls).length},showSettingsPopup:function(){this.tagControlsStack||this.initTagControlsStack();var e=this.getSettingsPopup();e.isVisible()||e.show()},initTagControlsStack:function(){this.tagControlsStack=new i({model:this.model,controls:this.model.controls,el:this.getSettingsPopup().getElements("message")[0]}),this.tagControlsStack.render()},initModel:function(){this.model=new o(this.getOption("settings"),{controls:this.getTagConfig().controls})},initialize:function(){this.hasSettings()&&(this.initModel(),this.initSettingsPopup(),this.listenTo(this.model,"change",this.render))},onClick:function(){this.showSettingsPopup()},onRemoveClick:function(e){e.stopPropagation(),this.destroy(),this.trigger("remove")},onDestroy:function(){this.hasSettings()&&this.getSettingsPopup().destroy()}})},{"elementor-dynamic-tags/tag-controls-stack":4,"elementor-elements/models/base-settings":68}],6:[function(e,t,n){t.exports=Marionette.ItemView.extend({hasTemplate:!0,tagName:"span",className:function(){return"elementor-tag"},getTemplate:function(){return!!this.hasTemplate&&Marionette.TemplateCache.get("#tmpl-elementor-tag-"+this.getOption("name")+"-content")},initialize:function(){try{this.getTemplate()}catch(e){this.hasTemplate=!1}},getConfig:function(e){var t=elementor.dynamicTags.getConfig("tags."+this.getOption("name"));return e?t[e]:t},getContent:function(){var e,t=this.getConfig("content_type");if(!this.hasTemplate&&void 0===(e=elementor.dynamicTags.loadTagDataFromCache(this)))throw new Error(elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR);if("ui"===t){if(this.render(),this.hasTemplate)return this.el.outerHTML;this.getConfig("wrapped_tag")&&(e=jQuery(e).html()),this.$el.html(e)}return e},onRender:function(){this.el.id="elementor-tag-"+this.getOption("id")}})},{}],7:[function(e,t,n){t.exports=Marionette.Behavior.extend({previewWindow:null,ui:function(){return{buttonPreview:"#elementor-panel-saver-button-preview",buttonPublish:"#elementor-panel-saver-button-publish",buttonSaveOptions:"#elementor-panel-saver-button-save-options",buttonPublishLabel:"#elementor-panel-saver-button-publish-label",menuSaveDraft:"#elementor-panel-saver-menu-save-draft",lastEditedWrapper:".elementor-last-edited-wrapper"}},events:function(){return{"click @ui.buttonPreview":"onClickButtonPreview","click @ui.buttonPublish":"onClickButtonPublish","click @ui.menuSaveDraft":"onClickMenuSaveDraft"}},initialize:function(){elementor.saver.on("before:save",this.onBeforeSave.bind(this)).on("after:save",this.onAfterSave.bind(this)).on("after:saveError",this.onAfterSaveError.bind(this)).on("page:status:change",this.onPageStatusChange),elementor.settings.page.model.on("change",this.onPageSettingsChange.bind(this)),elementor.channels.editor.on("status:change",this.activateSaveButtons.bind(this))},activateSaveButtons:function(e){e=e||"draft"===elementor.settings.page.model.get("post_status"),this.ui.buttonPublish.add(this.ui.menuSaveDraft).toggleClass("elementor-saver-disabled",!e),this.ui.buttonSaveOptions.toggleClass("elementor-saver-disabled",!e)},onRender:function(){this.setMenuItems(elementor.settings.page.model.get("post_status")),this.addTooltip()},onPageSettingsChange:function(e){var t=e.changed;_.isUndefined(t.post_status)||(this.setMenuItems(t.post_status),this.refreshWpPreview(),"page_settings"===elementor.getPanelView().getCurrentPageName()&&elementor.getPanelView().getCurrentPageView().render())},onPageStatusChange:function(e){"publish"===e&&elementor.notifications.showToast({message:elementor.config.document.messages.publish_notification,buttons:[{name:"view_page",text:elementor.translate("have_a_look"),callback:function(){open(elementor.config.document.urls.permalink)}}]})},onBeforeSave:function(e){NProgress.start(),"autosave"===e.status?this.ui.lastEditedWrapper.addClass("elementor-state-active"):this.ui.buttonPublish.addClass("elementor-button-state")},onAfterSave:function(e){NProgress.done(),this.ui.buttonPublish.removeClass("elementor-button-state"),this.ui.lastEditedWrapper.removeClass("elementor-state-active"),this.refreshWpPreview(),this.setLastEdited(e)},setLastEdited:function(e){this.ui.lastEditedWrapper.removeClass("elementor-button-state").find(".elementor-last-edited").html(e.config.last_edited)},onAfterSaveError:function(){NProgress.done(),this.ui.buttonPublish.removeClass("elementor-button-state")},onClickButtonPreview:function(){this.previewWindow=open(elementor.config.document.urls.wp_preview,"wp-preview-"+elementor.config.document.id),elementor.saver.isEditorChanged()&&(elementor.saver.isSaving&&(elementor.saver.isSaving=!1),elementor.saver.doAutoSave())},onClickButtonPublish:function(){var e=elementor.settings.page.model.get("post_status");if(!this.ui.buttonPublish.hasClass("elementor-saver-disabled"))switch(e){case"publish":case"private":elementor.saver.update();break;case"draft":elementor.config.current_user_can_publish?elementor.saver.publish():elementor.saver.savePending();break;case"pending":case void 0:elementor.config.current_user_can_publish?elementor.saver.publish():elementor.saver.update()}},onClickMenuSaveDraft:function(){elementor.saver.saveDraft()},setMenuItems:function(e){var t="publish";switch(e){case"publish":case"private":t="update",elementor.config.current_revision_id!==elementor.config.document.id&&this.activateSaveButtons(!0);break;case"draft":elementor.config.current_user_can_publish||(t="submit"),this.activateSaveButtons(!0);break;case"pending":case void 0:elementor.config.current_user_can_publish||(t="update")}this.ui.buttonPublishLabel.html(elementor.translate(t))},addTooltip:function(){this.$el.find(".tooltip-target").tipsy({gravity:"s",title:function(){return this.getAttribute("data-tooltip")}})},refreshWpPreview:function(){if(this.previewWindow)try{this.previewWindow.location.href=elementor.config.document.urls.wp_preview}catch(e){}}})},{}],8:[function(e,t,n){var i=e("elementor-utils/module");t.exports=i.extend({autoSaveTimer:null,autosaveInterval:1e3*elementor.config.autosave_interval,isSaving:!1,isChangedDuringSave:!1,__construct:function(){this.setWorkSaver()},startTimer:function(e){clearTimeout(this.autoSaveTimer),e&&(this.autoSaveTimer=setTimeout(_.bind(this.doAutoSave,this),this.autosaveInterval))},saveDraft:function(){var e=elementor.settings.page.model.get("post_status");if(elementor.saver.isEditorChanged()||"draft"===e)switch(e){case"publish":case"private":this.doAutoSave();break;default:this.update()}},doAutoSave:function(){"edit"===elementor.channels.dataEditMode.request("activeMode")&&this.saveAutoSave()},saveAutoSave:function(e){this.isEditorChanged()&&(e=_.extend({status:"autosave"},e),this.saveEditor(e))},savePending:function(e){e=_.extend({status:"pending"},e),this.saveEditor(e)},discard:function(){var e=this;elementor.ajax.addRequest("discard_changes",{success:function(){e.setFlagEditorChange(!1),location.href=elementor.config.document.urls.exit_to_dashboard}})},update:function(e){e=_.extend({status:elementor.settings.page.model.get("post_status")},e),this.saveEditor(e)},publish:function(e){e=_.extend({status:"publish"},e),this.saveEditor(e)},setFlagEditorChange:function(e){e&&this.isSaving&&(this.isChangedDuringSave=!0),this.startTimer(e),elementor.channels.editor.reply("status",e).trigger("status:change",e)},isEditorChanged:function(){return!0===elementor.channels.editor.request("status")},setWorkSaver:function(){var e=this;elementor.$window.on("beforeunload",function(){if(e.isEditorChanged())return elementor.translate("before_unload_alert")})},saveEditor:function(n){if(!this.isSaving){n=_.extend({status:"draft",onSuccess:null},n);var i=this,t=elementor.elements.toJSON({removeDefault:!0}),e=elementor.settings.page.model.toJSON({removeDefault:!0}),o=elementor.settings.page.model.get("post_status"),r=o!==n.status;i.trigger("before:save",n).trigger("before:save:"+n.status,n),i.isSaving=!0,i.isChangedDuringSave=!1,e.post_status=n.status,elementor.ajax.addRequest("save_builder",{data:{status:n.status,elements:t,settings:e},success:function(e){i.afterAjax(),"autosave"!==n.status&&(r&&elementor.settings.page.model.set("post_status",n.status),i.isChangedDuringSave||i.setFlagEditorChange(!1)),e.config&&jQuery.extend(!0,elementor.config,e.config),elementor.config.data=t,elementor.channels.editor.trigger("saved",e),i.trigger("after:save",e).trigger("after:save:"+n.status,e),r&&i.trigger("page:status:change",n.status,o),_.isFunction(n.onSuccess)&&n.onSuccess.call(this,e)},error:function(e){var t;i.afterAjax(),i.trigger("after:saveError",e).trigger("after:saveError:"+n.status,e),_.isString(e)?t=e:e.statusText?(t=elementor.ajax.createErrorMessage(e),0===e.readyState&&(t+=" "+elementor.translate("saving_disabled"))):e[0]&&e[0].code&&(t=elementor.translate("server_error")+" "+e[0].code),elementor.notifications.showToast({message:t})}})}},afterAjax:function(){this.isSaving=!1}})},{"elementor-utils/module":131}],9:[function(e,t,n){var i=e("elementor-utils/view-module"),o=e("elementor-elements/models/base-settings"),r=e("elementor-editor-utils/controls-css-parser");t.exports=i.extend({controlsCSS:null,model:null,hasChange:!1,changeCallbacks:{},addChangeCallback:function(e,t){this.changeCallbacks[e]=t},bindEvents:function(){elementor.on("preview:loaded",this.onElementorPreviewLoaded),this.model.on("change",this.onModelChange)},addPanelPage:function(){var e=this.getSettings("name");elementor.getPanelView().addPage(e+"_settings",{view:elementor.settings.panelPages[e]||elementor.settings.panelPages.base,title:this.getSettings("panelPage.title"),options:{model:this.model,controls:this.model.controls,name:e}})},updateStylesheet:function(e){e||this.controlsCSS.stylesheet.empty(),this.controlsCSS.addStyleRules(this.model.getStyleControls(),this.model.attributes,this.model.controls,[/{{WRAPPER}}/g],[this.getSettings("cssWrapperSelector")]),this.controlsCSS.addStyleToDocument()},initModel:function(){this.model=new o(this.getSettings("settings"),{controls:this.getSettings("controls")})},initControlsCSSParser:function(){this.controlsCSS=new r({id:this.getSettings("name"),settingsModel:this.model})},getDataToSave:function(e){return e},save:function(e){var t=this;if(t.hasChange){var n=this.model.toJSON({removeDefault:!0}),i=this.getDataToSave({data:n});NProgress.start(),elementor.ajax.addRequest("save_"+this.getSettings("name")+"_settings",{data:i,success:function(){NProgress.done(),t.setSettings("settings",n),t.hasChange=!1,e&&e.apply(t,arguments)},error:function(){alert("An error occurred")}})}},addPanelMenuItem:function(){var e=this.getSettings("panelPage.menu");if(e){var t={icon:e.icon,title:this.getSettings("panelPage.title"),type:"page",pageName:this.getSettings("name")+"_settings"};elementor.modules.layouts.panel.pages.menu.Menu.addItem(t,"settings",e.beforeItem)}},onInit:function(){this.initModel(),this.initControlsCSSParser(),this.addPanelMenuItem(),this.debounceSave=_.debounce(this.save,3e3),i.prototype.onInit.apply(this,arguments)},onModelChange:function(e){var n=this;n.hasChange=!0,this.controlsCSS.stylesheet.empty(),_.each(e.changed,function(e,t){n.changeCallbacks[t]&&n.changeCallbacks[t].call(n,e)}),n.updateStylesheet(!0),n.debounceSave()},onElementorPreviewLoaded:function(){this.updateStylesheet(),this.addPanelPage(),elementor.userCan("design")||elementor.panel.currentView.setPage("page_settings")}})},{"elementor-editor-utils/controls-css-parser":110,"elementor-elements/models/base-settings":68,"elementor-utils/view-module":132}],10:[function(e,t,n){var i=e("elementor-views/controls-stack");t.exports=i.extend({id:function(){return"elementor-panel-"+this.getOption("name")+"-settings"},getTemplate:function(){return"#tmpl-elementor-panel-"+this.getOption("name")+"-settings"},childViewContainer:function(){return"#elementor-panel-"+this.getOption("name")+"-settings-controls"},childViewOptions:function(){return{elementSettingsModel:this.model}}})},{"elementor-views/controls-stack":126}],11:[function(e,t,n){var i=e("elementor-editor/components/settings/base/manager");t.exports=i.extend({changeCallbacks:{elementor_page_title_selector:function(e){var t=e||"h1.entry-title";(elementor.settings.page.model.controls.hide_title.selectors={})[t]="display: none",elementor.settings.page.updateStylesheet()}}})},{"elementor-editor/components/settings/base/manager":9}],12:[function(e,t,n){var i=e("elementor-editor/components/settings/base/manager");t.exports=i.extend({save:function(){},changeCallbacks:{post_title:function(e){elementorFrontend.getElements("$document").find(elementor.config.page_title_selector).text(e)},template:function(){elementor.saver.saveAutoSave({onSuccess:function(){elementor.reloadPreview(),elementor.once("preview:loaded",function(){elementor.getPanelView().setPage("page_settings")})}})}},onModelChange:function(){elementor.saver.setFlagEditorChange(!0),i.prototype.onModelChange.apply(this,arguments)},bindEvents:function(){elementor.channels.editor.on("elementor:clearPage",function(){elementor.clearPage()}),i.prototype.bindEvents.apply(this,arguments)},getDataToSave:function(e){return e.id=elementor.config.document.id,e}})},{"elementor-editor/components/settings/base/manager":9}],13:[function(e,t,n){var i=e("elementor-utils/module");t.exports=i.extend({modules:{base:e("elementor-editor/components/settings/base/manager"),general:e("elementor-editor/components/settings/general/manager"),page:e("elementor-editor/components/settings/page/manager")},panelPages:{base:e("elementor-editor/components/settings/base/panel")},onInit:function(){this.initSettings()},initSettings:function(){var i=this;_.each(elementor.config.settings,function(e,t){var n=i.modules[t]||i.modules.base;i[t]=new n(e)})}})},{"elementor-editor/components/settings/base/manager":9,"elementor-editor/components/settings/base/panel":10,"elementor-editor/components/settings/general/manager":11,"elementor-editor/components/settings/page/manager":12,"elementor-utils/module":131}],14:[function(e,t,n){var i;i=Marionette.Behavior.extend({ui:{insertButton:".elementor-template-library-template-insert"},events:{"click @ui.insertButton":"onInsertButtonClick"},onInsertButtonClick:function(){this.view.model.get("hasPageSettings")?i.showImportDialog(this.view.model):elementor.templates.importTemplate(this.view.model)}},{dialog:null,showImportDialog:function(e){var t=i.getDialog();t.onConfirm=function(){elementor.templates.importTemplate(e,{withPageSettings:!0})},t.onCancel=function(){elementor.templates.importTemplate(e)},t.show()},initDialog:function(){i.dialog=elementor.dialogsManager.createWidget("confirm",{id:"elementor-insert-template-settings-dialog",headerMessage:elementor.translate("import_template_dialog_header"),message:elementor.translate("import_template_dialog_message")+"<br>"+elementor.translate("import_template_dialog_message_attention"),strings:{confirm:elementor.translate("yes"),cancel:elementor.translate("no")}})},getDialog:function(){return i.dialog||i.initDialog(),i.dialog}}),t.exports=i},{}],15:[function(e,t,n){var i,o=e("elementor-templates/models/template");i=Backbone.Collection.extend({model:o}),t.exports=i},{"elementor-templates/models/template":17}],16:[function(e,t,n){var i,d=e("elementor-templates/views/library-layout"),m=e("elementor-templates/collections/templates");i=function(){var e,t,o,i,r=this,s={},l={},a={},c={};this.init=function(){var n;n={saveDialog:{description:elementor.translate("save_your_template_description")},ajaxParams:{success:function(e){r.getTemplatesCollection().add(e),r.setTemplatesPage("local")},error:function(e){r.showErrorDialog(e)}}},_.each(["page","section"],function(e){var t=jQuery.extend(!0,{},n,{saveDialog:{title:elementor.translate("save_your_template",[elementor.translate(e)])}});r.registerTemplateType(e,t)}),c={text:{callback:function(t){return t=t.toLowerCase(),0<=this.get("title").toLowerCase().indexOf(t)||_.any(this.get("tags"),function(e){return 0<=e.toLowerCase().indexOf(t)})}},type:{},subtype:{},favorite:{}},elementor.addBackgroundClickListener("libraryToggleMore",{element:".elementor-template-library-template-more"})},this.getTemplateTypes=function(e){return e?a[e]:a},this.registerTemplateType=function(e,t){a[e]=t},this.deleteTemplate=function(t,n){var e=r.getDeleteDialog();e.onConfirm=function(){n.onConfirm&&n.onConfirm(),elementor.ajax.send("delete_template",{data:{source:t.get("source"),template_id:t.get("template_id")},success:function(e){i.remove(t,{silent:!0}),n.onSuccess&&n.onSuccess(e)}})},e.show()},this.importTemplate=function(t,n){n=n||{},o.showLoadingView(),r.requestTemplateContent(t.get("source"),t.get("template_id"),{data:{page_settings:n.withPageSettings},success:function(e){r.closeModal(),elementor.channels.data.trigger("template:before:insert",t),elementor.sections.currentView.addChildModel(e.content,l.importOptions||{}),elementor.channels.data.trigger("template:after:insert",t),n.withPageSettings&&elementor.settings.page.model.set(e.page_settings)},error:function(e){r.showErrorDialog(e)},complete:function(){o.hideLoadingView()}})},this.saveTemplate=function(e,t){var n=a[e];_.extend(t,{source:"local",type:e}),n.prepareSavedData&&(t=n.prepareSavedData(t)),t.content=JSON.stringify(t.content);var i={data:t};n.ajaxParams&&_.extend(i,n.ajaxParams),elementor.ajax.send("save_template",i)},this.requestTemplateContent=function(e,t,n){var i={data:{source:e,edit_mode:!0,display:!0,template_id:t}};return n&&jQuery.extend(!0,i,n),elementor.ajax.send("get_template_data",i)},this.markAsFavorite=function(e,t){var n={data:{source:e.get("source"),template_id:e.get("template_id"),favorite:t}};return elementor.ajax.send("mark_template_as_favorite",n)},this.getDeleteDialog=function(){return e||(e=elementor.dialogsManager.createWidget("confirm",{id:"elementor-template-library-delete-dialog",headerMessage:elementor.translate("delete_template"),message:elementor.translate("delete_template_confirm"),strings:{confirm:elementor.translate("delete")}})),e},this.getErrorDialog=function(){return t||(t=elementor.dialogsManager.createWidget("alert",{id:"elementor-template-library-error-dialog",headerMessage:elementor.translate("an_error_occurred")})),t},this.getLayout=function(){return o},this.getTemplatesCollection=function(){return i},this.getConfig=function(e){return e?s[e]:s},this.requestLibraryData=function(t){if(!i||t.forceUpdate){t.onBeforeUpdate&&t.onBeforeUpdate();var e={data:{},success:function(e){i=new m(e.templates),s=e.config,t.onUpdate&&t.onUpdate()}};t.forceSync&&(e.data.sync=!0),elementor.ajax.send("get_library_data",e)}else t.onUpdate&&t.onUpdate()},this.startModal=function(i){o||(o=new d),o.showModal(),r.requestLibraryData({onBeforeUpdate:o.showLoadingView.bind(o),onUpdate:function(){var e=elementor.config.document.type,t=-1!==s.categories.indexOf(e),n=Object.create(l);l=jQuery.extend({filters:{source:"remote",type:t?"block":"page",subtype:t?e:null},onReady:r.showTemplates},i),_.isEqual(Object.getPrototypeOf(n),l)&&"elementor-template-library-templates"===o.modalContent.currentView.id||(o.hideLoadingView(),jQuery.each(l.filters,function(e,t){r.setFilter(e,t,!0)}),l.onReady())}})},this.closeModal=function(){o.hideModal()},this.getFilter=function(e){return elementor.channels.templates.request("filter:"+e)},this.setFilter=function(e,t,n){elementor.channels.templates.reply("filter:"+e,t),n||elementor.channels.templates.trigger("filter:change")},this.getFilterTerms=function(e){return e?c[e]:c},this.setTemplatesPage=function(e,t,n){elementor.channels.templates.stopReplying(),r.setFilter("source",e,!0),t&&r.setFilter("type",t,!0),n||r.showTemplates()},this.showTemplates=function(){var n=r.getFilter("source"),e=i.filter(function(e){if(n!==e.get("source"))return!1;var t=a[e.get("type")];return!t||!1!==t.showInLibrary});o.showTemplatesView(new m(e))},this.showErrorDialog=function(e){if("object"==typeof e){var t="";_.each(e,function(e){t+="<div>"+e.message+".</div>"}),e=t}else e?e+=".":e="<i><The error message is empty></i>";r.getErrorDialog().setMessage(elementor.translate("templates_request_error")+'<div id="elementor-template-library-error-info">'+e+"</div>").show()}},t.exports=new i},{"elementor-templates/collections/templates":15,"elementor-templates/views/library-layout":19}],17:[function(e,t,n){t.exports=Backbone.Model.extend({defaults:{template_id:0,title:"",source:"",type:"",subtype:"",author:"",thumbnail:"",url:"",export_link:"",tags:[]}})},{}],18:[function(e,t,n){var i=e("elementor-templates/views/parts/header"),o=e("elementor-templates/views/parts/header-parts/logo"),r=e("elementor-templates/views/parts/loading");t.exports=Marionette.LayoutView.extend({el:function(){return this.modal.getElements("widget")},modal:null,regions:function(){return{modalHeader:".dialog-widget-header",modalContent:".dialog-lightbox-content",modalLoading:".dialog-lightbox-loading"}},constructor:function(){this.initModal(),Marionette.LayoutView.prototype.constructor.apply(this,arguments)},initialize:function(){this.modalHeader.show(new i)},initModal:function(){var e={className:"elementor-templates-modal",closeButton:!1,hide:{onOutsideClick:!1}};jQuery.extend(!0,e,this.getModalOptions()),this.modal=elementor.dialogsManager.createWidget("lightbox",e),this.modal.getElements("message").append(this.modal.addElement("content"),this.modal.addElement("loading"))},showModal:function(){this.modal.show()},hideModal:function(){this.modal.hide()},getModalOptions:function(){return{}},getLogoOptions:function(){return{}},getHeaderView:function(){return this.modalHeader.currentView},showLoadingView:function(){this.modalLoading.show(new r),this.modalLoading.$el.show(),this.modalContent.$el.hide()},hideLoadingView:function(){this.modalContent.$el.show(),this.modalLoading.$el.hide()},showLogo:function(){this.getHeaderView().logoArea.show(new o(this.getLogoOptions()))}})},{"elementor-templates/views/parts/header":25,"elementor-templates/views/parts/header-parts/logo":22,"elementor-templates/views/parts/loading":27}],19:[function(e,t,n){var i=e("elementor-templates/views/base-modal-layout"),o=e("elementor-templates/views/parts/header-parts/actions"),r=e("elementor-templates/views/parts/header-parts/menu"),s=e("elementor-templates/views/parts/header-parts/preview"),l=e("elementor-templates/views/parts/header-parts/back"),a=e("elementor-templates/views/parts/templates"),c=e("elementor-templates/views/parts/save-template"),d=e("elementor-templates/views/parts/import"),m=e("elementor-templates/views/parts/preview");t.exports=i.extend({getModalOptions:function(){return{id:"elementor-template-library-modal"}},getLogoOptions:function(){return{title:elementor.translate("library"),click:function(){elementor.templates.setTemplatesPage("remote","page")}}},getTemplateActionButton:function(e){var t="#tmpl-elementor-template-library-"+(e.isPro?"get-pro-button":"insert-button");t=elementor.hooks.applyFilters("elementor/editor/template-library/template/action-button",t,e);var n=Marionette.TemplateCache.get(t);return Marionette.Renderer.render(n)},setHeaderDefaultParts:function(){var e=this.getHeaderView();e.tools.show(new o),e.menuArea.show(new r),this.showLogo()},showTemplatesView:function(e){this.modalContent.show(new a({collection:e})),this.setHeaderDefaultParts()},showImportView:function(){this.getHeaderView().menuArea.reset(),this.modalContent.show(new d)},showSaveTemplateView:function(e){this.getHeaderView().menuArea.reset(),this.modalContent.show(new c({model:e}))},showPreviewView:function(e){this.modalContent.show(new m({url:e.get("url")}));var t=this.getHeaderView();t.menuArea.reset(),t.tools.show(new s({model:e})),t.logoArea.show(new l)}})},{"elementor-templates/views/base-modal-layout":18,"elementor-templates/views/parts/header-parts/actions":20,"elementor-templates/views/parts/header-parts/back":21,"elementor-templates/views/parts/header-parts/menu":23,"elementor-templates/views/parts/header-parts/preview":24,"elementor-templates/views/parts/import":26,"elementor-templates/views/parts/preview":28,"elementor-templates/views/parts/save-template":29,"elementor-templates/views/parts/templates":31}],20:[function(e,t,n){t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-header-actions",id:"elementor-template-library-header-actions",ui:{import:"#elementor-template-library-header-import i",sync:"#elementor-template-library-header-sync i",save:"#elementor-template-library-header-save i"},events:{"click @ui.import":"onImportClick","click @ui.sync":"onSyncClick","click @ui.save":"onSaveClick"},onImportClick:function(){elementor.templates.getLayout().showImportView()},onSyncClick:function(){var e=this;e.ui.sync.addClass("eicon-animation-spin"),elementor.templates.requestLibraryData({onUpdate:function(){e.ui.sync.removeClass("eicon-animation-spin"),elementor.templates.setTemplatesPage(elementor.templates.getFilter("source"),elementor.templates.getFilter("type"))},forceUpdate:!0,forceSync:!0})},onSaveClick:function(){elementor.templates.getLayout().showSaveTemplateView()}})},{}],21:[function(e,t,n){t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-header-back",id:"elementor-template-library-header-preview-back",events:{click:"onClick"},onClick:function(){elementor.templates.showTemplates()}})},{}],22:[function(e,t,n){t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-templates-modal__header__logo",className:"elementor-templates-modal__header__logo",events:{click:"onClick"},templateHelpers:function(){return{title:this.getOption("title")}},onClick:function(){var e=this.getOption("click");e&&e()}})},{}],23:[function(e,t,n){t.exports=Marionette.ItemView.extend({options:{activeClass:"elementor-active"},template:"#tmpl-elementor-template-library-header-menu",id:"elementor-template-library-header-menu",ui:{menuItems:".elementor-template-library-menu-item"},events:{"click @ui.menuItems":"onMenuItemClick"},$activeItem:null,activateMenuItem:function(e){var t=this.getOption("activeClass");this.$activeItem!==e&&(this.$activeItem&&this.$activeItem.removeClass(t),e.addClass(t),this.$activeItem=e)},onRender:function(){var e=elementor.templates.getFilter("source"),t=this.ui.menuItems.filter('[data-template-source="'+e+'"]');"remote"===e&&(t=t.filter('[data-template-type="'+elementor.templates.getFilter("type")+'"]')),this.activateMenuItem(t)},onMenuItemClick:function(e){var t=e.currentTarget,n=t.dataset;this.activateMenuItem(jQuery(t)),elementor.templates.setTemplatesPage(t.dataset.templateSource,n.templateType)}})},{}],24:[function(e,t,n){var i=e("elementor-templates/behaviors/insert-template");t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-header-preview",id:"elementor-template-library-header-preview",behaviors:{insertTemplate:{behaviorClass:i}}})},{"elementor-templates/behaviors/insert-template":14}],25:[function(e,t,n){var i;i=Marionette.LayoutView.extend({className:"elementor-templates-modal__header",template:"#tmpl-elementor-templates-modal__header",regions:{logoArea:".elementor-templates-modal__header__logo-area",tools:"#elementor-template-library-header-tools",menuArea:".elementor-templates-modal__header__menu-area"},ui:{closeModal:".elementor-templates-modal__header__close-modal"},events:{"click @ui.closeModal":"onCloseModalClick"},onCloseModalClick:function(){this._parent._parent._parent.hideModal()}}),t.exports=i},{}],26:[function(e,t,n){var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-import",id:"elementor-template-library-import",ui:{uploadForm:"#elementor-template-library-import-form",fileInput:"#elementor-template-library-import-form-input"},events:{"change @ui.fileInput":"onFileInputChange"},droppedFiles:null,submitForm:function(){var t=elementor.templates.getLayout(),e=new FormData;this.droppedFiles?(e.append("file",this.droppedFiles[0]),this.droppedFiles=null):(e.append("file",this.ui.fileInput[0].files[0]),this.ui.uploadForm[0].reset());var n={data:e,processData:!1,contentType:!1,success:function(e){elementor.templates.getTemplatesCollection().add(e),elementor.templates.setTemplatesPage("local")},error:function(e){elementor.templates.showErrorDialog(e),t.showImportView()},complete:function(){t.hideLoadingView()}};elementor.ajax.send("import_template",n),t.showLoadingView()},onRender:function(){this.ui.uploadForm.on({"drag dragstart dragend dragover dragenter dragleave drop":this.onFormActions.bind(this),dragenter:this.onFormDragEnter.bind(this),"dragleave drop":this.onFormDragLeave.bind(this),drop:this.onFormDrop.bind(this)})},onFormActions:function(e){e.preventDefault(),e.stopPropagation()},onFormDragEnter:function(){this.ui.uploadForm.addClass("elementor-drag-over")},onFormDragLeave:function(e){jQuery(e.relatedTarget).closest(this.ui.uploadForm).length||this.ui.uploadForm.removeClass("elementor-drag-over")},onFormDrop:function(e){this.droppedFiles=e.originalEvent.dataTransfer.files,this.submitForm()},onFileInputChange:function(){this.submitForm()}}),t.exports=i},{}],27:[function(e,t,n){var i;i=Marionette.ItemView.extend({id:"elementor-template-library-loading",template:"#tmpl-elementor-template-library-loading"}),t.exports=i},{}],28:[function(e,t,n){var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-preview",id:"elementor-template-library-preview",ui:{iframe:"> iframe"},onRender:function(){this.ui.iframe.attr("src",this.getOption("url"))}}),t.exports=i},{}],29:[function(e,t,n){var i;i=Marionette.ItemView.extend({id:"elementor-template-library-save-template",template:"#tmpl-elementor-template-library-save-template",ui:{form:"#elementor-template-library-save-template-form",submitButton:"#elementor-template-library-save-template-submit"},events:{"submit @ui.form":"onFormSubmit"},getSaveType:function(){return this.model?this.model.get("elType"):"page"},templateHelpers:function(){var e=this.getSaveType();return elementor.templates.getTemplateTypes(e).saveDialog},onFormSubmit:function(e){e.preventDefault();var t=this.ui.form.elementorSerializeObject(),n=this.model?this.model.get("elType"):"page",i={removeDefault:!0};t.content=this.model?[this.model.toJSON(i)]:elementor.elements.toJSON(i),this.ui.submitButton.addClass("elementor-button-state"),elementor.templates.saveTemplate(n,t)}}),t.exports=i},{}],30:[function(e,t,n){var i;i=Marionette.ItemView.extend({id:"elementor-template-library-templates-empty",template:"#tmpl-elementor-template-library-templates-empty",ui:{title:".elementor-template-library-blank-title",message:".elementor-template-library-blank-message"},modesStrings:{empty:{title:elementor.translate("templates_empty_title"),message:elementor.translate("templates_empty_message")},noResults:{title:elementor.translate("templates_no_results_title"),message:elementor.translate("templates_no_results_message")},noFavorites:{title:elementor.translate("templates_no_favorites_title"),message:elementor.translate("templates_no_favorites_message")}},getCurrentMode:function(){return elementor.templates.getFilter("text")?"noResults":elementor.templates.getFilter("favorite")?"noFavorites":"empty"},onRender:function(){var e=this.modesStrings[this.getCurrentMode()];this.ui.title.html(e.title),this.ui.message.html(e.message)}}),t.exports=i},{}],31:[function(e,t,n){var i,o=e("elementor-templates/views/template/local"),r=e("elementor-templates/views/template/remote"),s=e("elementor-utils/masonry");i=Marionette.CompositeView.extend({template:"#tmpl-elementor-template-library-templates",id:"elementor-template-library-templates",childViewContainer:"#elementor-template-library-templates-container",reorderOnSort:!0,emptyView:function(){return new(e("elementor-templates/views/parts/templates-empty"))},ui:{textFilter:"#elementor-template-library-filter-text",selectFilter:".elementor-template-library-filter-select",myFavoritesFilter:"#elementor-template-library-filter-my-favorites",orderInputs:".elementor-template-library-order-input",orderLabels:".elementor-template-library-order-label"},events:{"input @ui.textFilter":"onTextFilterInput","change @ui.selectFilter":"onSelectFilterChange","change @ui.myFavoritesFilter":"onMyFavoritesFilterChange","mousedown @ui.orderLabels":"onOrderLabelsClick"},comparators:{title:function(e){return e.get("title").toLowerCase()},popularityIndex:function(e){var t=e.get("popularityIndex");return t||(t=e.get("date")),-t},trendIndex:function(e){var t=e.get("trendIndex");return t||(t=e.get("date")),-t}},getChildView:function(e){return"remote"===e.get("source")?r:o},initialize:function(){this.listenTo(elementor.channels.templates,"filter:change",this._renderChildren)},filter:function(o){var e=elementor.templates.getFilterTerms(),r=!0;return jQuery.each(e,function(e){var t=elementor.templates.getFilter(e);if(t){if(this.callback){var n=this.callback.call(o,t);return n||(r=!1),n}var i=t===o.get(e);return i||(r=!1),i}}),r},order:function(e,t){var n=this.comparators[e]||e;t&&(n=this.reverseOrder(n)),this.collection.comparator=n,this.collection.sort()},reverseOrder:function(o){if("function"!=typeof o){var t=o;o=function(e){return e.get(t)}}return function(e,t){var n=o(e),i=o(t);return void 0===n?-1:void 0===i?1:n<i?1:i<n?-1:0}},addSourceData:function(){var e=this.children.isEmpty();this.$el.attr("data-template-source",e?"empty":elementor.templates.getFilter("source"))},setFiltersUI:function(){this.$(this.ui.selectFilter).select2({placeholder:elementor.translate("category"),allowClear:!0,width:150})},setMasonrySkin:function(){var e=new s({container:this.$childViewContainer,items:this.$childViewContainer.children()});this.$childViewContainer.imagesLoaded(e.run.bind(e))},toggleFilterClass:function(){this.$el.toggleClass("elementor-templates-filter-active",!(!elementor.templates.getFilter("text")&&!elementor.templates.getFilter("favorite")))},onRenderCollection:function(){this.addSourceData(),this.toggleFilterClass(),"remote"===elementor.templates.getFilter("source")&&"block"===elementor.templates.getFilter("type")&&(this.setFiltersUI(),this.setMasonrySkin())},onBeforeRenderEmpty:function(){this.addSourceData()},onTextFilterInput:function(){elementor.templates.setFilter("text",this.ui.textFilter.val())},onSelectFilterChange:function(e){var t=jQuery(e.currentTarget),n=t.data("elementor-filter");elementor.templates.setFilter(n,t.val())},onMyFavoritesFilterChange:function(){elementor.templates.setFilter("favorite",this.ui.myFavoritesFilter[0].checked)},onOrderLabelsClick:function(e){var t,n=jQuery(e.currentTarget.control);n[0].checked||(t="asc"!==n.data("default-ordering-direction")),n.toggleClass("elementor-template-library-order-reverse",t),this.order(n.val(),n.hasClass("elementor-template-library-order-reverse"))}}),t.exports=i},{"elementor-templates/views/parts/templates-empty":30,"elementor-templates/views/template/local":33,"elementor-templates/views/template/remote":34,"elementor-utils/masonry":130}],32:[function(e,t,n){var i,o=e("elementor-templates/behaviors/insert-template");i=Marionette.ItemView.extend({className:function(){var e="elementor-template-library-template",t=this.model.get("source");return e+=" elementor-template-library-template-"+t,"remote"===t&&(e+=" elementor-template-library-template-"+this.model.get("type")),this.model.get("isPro")&&(e+=" elementor-template-library-pro-template"),e},ui:function(){return{previewButton:".elementor-template-library-template-preview"}},events:function(){return{"click @ui.previewButton":"onPreviewButtonClick"}},behaviors:{insertTemplate:{behaviorClass:o}}}),t.exports=i},{"elementor-templates/behaviors/insert-template":14}],33:[function(e,t,n){var i,o=e("elementor-templates/views/template/base");i=o.extend({template:"#tmpl-elementor-template-library-template-local",ui:function(){return _.extend(o.prototype.ui.apply(this,arguments),{deleteButton:".elementor-template-library-template-delete",morePopup:".elementor-template-library-template-more",toggleMore:".elementor-template-library-template-more-toggle",toggleMoreIcon:".elementor-template-library-template-more-toggle i"})},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.deleteButton":"onDeleteButtonClick","click @ui.toggleMore":"onToggleMoreClick"})},onDeleteButtonClick:function(){var e=this.ui.toggleMoreIcon;elementor.templates.deleteTemplate(this.model,{onConfirm:function(){e.removeClass("eicon-ellipsis-h").addClass("fa fa-circle-o-notch fa-spin")},onSuccess:function(){elementor.templates.showTemplates()}})},onToggleMoreClick:function(){this.ui.morePopup.show()},onPreviewButtonClick:function(){open(this.model.get("url"),"_blank")}}),t.exports=i},{"elementor-templates/views/template/base":32}],34:[function(e,t,n){var i,o=e("elementor-templates/views/template/base");i=o.extend({template:"#tmpl-elementor-template-library-template-remote",ui:function(){return jQuery.extend(o.prototype.ui.apply(this,arguments),{favoriteCheckbox:".elementor-template-library-template-favorite-input"})},events:function(){return jQuery.extend(o.prototype.events.apply(this,arguments),{"change @ui.favoriteCheckbox":"onFavoriteCheckboxChange"})},onPreviewButtonClick:function(){elementor.templates.getLayout().showPreviewView(this.model)},onFavoriteCheckboxChange:function(){var e=this.ui.favoriteCheckbox[0].checked;this.model.set("favorite",e),elementor.templates.markAsFavorite(this.model,e),!e&&elementor.templates.getFilter("favorite")&&elementor.channels.templates.trigger("filter:change")}}),t.exports=i},{"elementor-templates/views/template/base":32}],35:[function(e,t,n){var i;i=e("elementor-utils/module").extend({errors:[],__construct:function(e){var t=e.customValidationMethod;t&&(this.validationMethod=t)},getDefaultSettings:function(){return{validationTerms:{}}},isValid:function(){var e=this.validationMethod.apply(this,arguments);return!e.length||(this.errors=e,!1)},validationMethod:function(e){var t=[];return this.getSettings("validationTerms").required&&((""+e).length||t.push("Required value is empty")),t}}),t.exports=i},{"elementor-utils/module":131}],36:[function(e,t,n){var i=e("elementor-validator/base");t.exports=i.extend({validationMethod:function(e){var t=this.getSettings("validationTerms"),n=[];return _.isFinite(e)&&(void 0!==t.min&&e<t.min&&n.push("Value is less than minimum"),void 0!==t.max&&e>t.max&&n.push("Value is greater than maximum")),n}})},{"elementor-validator/base":35}],37:[function(e,t,n){var i,o=e("elementor-controls/base"),r=e("elementor-dynamic-tags/control-behavior"),s=e("elementor-validator/base");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return _.extend(e,{input:'input[data-setting][type!="checkbox"][type!="radio"]',checkbox:'input[data-setting][type="checkbox"]',radio:'input[data-setting][type="radio"]',select:"select[data-setting]",textarea:"textarea[data-setting]",responsiveSwitchers:".elementor-responsive-switcher",contentEditable:'[contenteditable="true"]'}),e},templateHelpers:function(){var e=o.prototype.templateHelpers.apply(this,arguments);return e.data.controlValue=this.getControlValue(),e},events:function(){return{"input @ui.input":"onBaseInputChange","change @ui.checkbox":"onBaseInputChange","change @ui.radio":"onBaseInputChange","input @ui.textarea":"onBaseInputChange","change @ui.select":"onBaseInputChange","input @ui.contentEditable":"onBaseInputChange","click @ui.responsiveSwitchers":"onResponsiveSwitchersClick"}},behaviors:function(){var e={},t=this.options.model.get("dynamic");if(t&&t.active){var n=_.filter(elementor.dynamicTags.getConfig("tags"),function(e){return _.intersection(e.categories,t.categories).length});n.length&&(e.tags={behaviorClass:r,tags:n,dynamicSettings:t})}return e},initialize:function(e){o.prototype.initialize.apply(this,arguments),this.registerValidators(),this.listenTo(this.elementSettingsModel,"change:external:"+this.model.get("name"),this.onSettingsExternalChange)},getControlValue:function(){return this.elementSettingsModel.get(this.model.get("name"))},setValue:function(e){this.setSettingsModel(e)},setSettingsModel:function(e){this.elementSettingsModel.set(this.model.get("name"),e),this.triggerMethod("settings:change")},applySavedValue:function(){this.setInputValue('[data-setting="'+this.model.get("name")+'"]',this.getControlValue())},getEditSettings:function(e){var t=this.getOption("elementEditSettings").toJSON();return e?t[e]:t},setEditSetting:function(e,t){this.getOption("elementEditSettings").set(e,t)},getInputValue:function(e){var t=this.$(e);if(t.is('[contenteditable="true"]'))return t.html();var n=t.val(),i=t.attr("type");return-1!==["radio","checkbox"].indexOf(i)?t.prop("checked")?n:"":"number"===i&&_.isFinite(n)?+n:("SELECT"===e.tagName&&t.prop("multiple")&&null===n&&(n=[]),n)},setInputValue:function(e,t){var n=this.$(e),i=n.attr("type");"checkbox"===i?n.prop("checked",!!t):"radio"===i?n.filter('[value="'+t+'"]').prop("checked",!0):n.val(t)},addValidator:function(e){this.validators.push(e)},registerValidators:function(){this.validators=[];var e={};this.model.get("required")&&(e.required=!0),jQuery.isEmptyObject(e)||this.addValidator(new s({validationTerms:e}))},onRender:function(){o.prototype.onRender.apply(this,arguments),this.applySavedValue(),this.model.get("responsive")&&this.renderResponsiveSwitchers(),this.triggerMethod("ready"),this.toggleControlVisibility(),this.addTooltip()},onBaseInputChange:function(e){clearTimeout(this.correctionTimeout);var t=e.currentTarget,n=this.getInputValue(t),i=this.validators.slice(0),o=this.elementSettingsModel.validators[this.model.get("name")];if(o&&(i=i.concat(o)),i){var r=this.getControlValue(t.dataset.setting);if(!i.every(function(e){return e.isValid(n,r)}))return void(this.correctionTimeout=setTimeout(this.setInputValue.bind(this,t,r),1200))}this.updateElementModel(n,t),this.triggerMethod("input:change",e)},onResponsiveSwitchersClick:function(e){var t=jQuery(e.currentTarget).data("device");elementor.changeDeviceMode(t),this.triggerMethod("responsive:switcher:click",t)},onSettingsExternalChange:function(){this.applySavedValue(),this.triggerMethod("after:external:change")},renderResponsiveSwitchers:function(){var e=Marionette.Renderer.render("#tmpl-elementor-control-responsive-switchers",this.model.attributes);this.ui.controlTitle.after(e)},onAfterExternalChange:function(){this.hideTooltip(),this.applySavedValue()},addTooltip:function(){this.$(".tooltip-target").tipsy({gravity:function(){var e=jQuery(this).data("tooltip-pos");return void 0!==e?e:"n"},title:function(){return this.getAttribute("data-tooltip")}})},hideTooltip:function(){jQuery(".tipsy").hide()},updateElementModel:function(e){this.setValue(e)}},{getStyleValue:function(e,t){return t}}),t.exports=i},{"elementor-controls/base":40,"elementor-dynamic-tags/control-behavior":1,"elementor-validator/base":35}],38:[function(e,t,n){var i;i=e("elementor-controls/base-data").extend({applySavedValue:function(){var e=this.getControlValue(),i=this.$("[data-setting]"),o=this;_.each(e,function(e,t){var n=i.filter(function(){return t===this.dataset.setting});o.setInputValue(n,e)})},getControlValue:function(e){var t=this.elementSettingsModel.get(this.model.get("name"));if(!jQuery.isPlainObject(t))return{};if(e){var n=t[e];return void 0===n&&(n=""),n}return elementor.helpers.cloneObject(t)},setValue:function(e,t){var n=this.getControlValue();"object"==typeof e?_.each(e,function(e,t){n[t]=e}):n[e]=t,this.setSettingsModel(n)},updateElementModel:function(e,t){var n=t.dataset.setting;this.setValue(n,e)}},{getStyleValue:function(e,t){return _.isObject(t)?t[e]:""}}),t.exports=i},{"elementor-controls/base-data":37}],39:[function(e,t,n){var i;i=e("elementor-controls/base-multiple").extend({getCurrentRange:function(){return this.getUnitRange(this.getControlValue("unit"))},getUnitRange:function(e){var t=this.model.get("range");return!(!t||!t[e])&&t[e]}}),t.exports=i},{"elementor-controls/base-multiple":38}],40:[function(e,t,n){var i;i=Marionette.CompositeView.extend({ui:function(){return{controlTitle:".elementor-control-title"}},behaviors:function(){return elementor.hooks.applyFilters("controls/base/behaviors",{},this)},getBehavior:function(e){return this._behaviors[Object.keys(this.behaviors()).indexOf(e)]},className:function(){var e="elementor-control elementor-control-"+this.model.get("name")+" elementor-control-type-"+this.model.get("type"),t=this.model.get("classes"),n=this.model.get("responsive");return _.isEmpty(t)||(e+=" "+t),_.isEmpty(n)||(e+=" elementor-control-responsive-"+n.max),e},templateHelpers:function(){var e={_cid:this.model.cid};return{data:_.extend({},this.model.toJSON(),e)}},getTemplate:function(){return Marionette.TemplateCache.get("#tmpl-elementor-control-"+this.model.get("type")+"-content")},initialize:function(e){this.elementSettingsModel=e.elementSettingsModel;var t=this.model.get("type"),n=jQuery.extend(!0,{},elementor.config.controls[t],this.model.attributes);this.model.set(n),this.listenTo(this.elementSettingsModel,"change",this.toggleControlVisibility)},toggleControlVisibility:function(){var e=elementor.helpers.isActiveControl(this.model,this.elementSettingsModel.attributes);this.$el.toggleClass("elementor-hidden-control",!e),elementor.channels.data.trigger("scrollbar:update")},onRender:function(){var e=this.model.get("label_block")?"block":"inline",t=this.model.get("show_label"),n="elementor-label-"+e;n+=" elementor-control-separator-"+this.model.get("separator"),t||(n+=" elementor-control-hidden-label"),this.$el.addClass(n),this.toggleControlVisibility()}}),t.exports=i},{}],41:[function(e,t,n){var i,o=e("elementor-controls/base-multiple");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.sliders=".elementor-slider",e.colors=".elementor-shadow-color-picker",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"slide @ui.sliders":"onSlideChange"})},initSliders:function(){var n=this.getControlValue();this.ui.sliders.each(function(){var e=jQuery(this),t=e.next(".elementor-slider-input").find("input");e.slider({value:n[this.dataset.input],min:+t.attr("min"),max:+t.attr("max")})})},initColors:function(){var n=this;elementor.helpers.wpColorPicker(this.ui.colors,{change:function(){var e=jQuery(this),t=e.data("setting");n.setValue(t,e.wpColorPicker("color"))},clear:function(){n.setValue(this.dataset.setting,"")}})},onInputChange:function(e){var t=e.currentTarget.dataset.setting;this.ui.sliders.filter('[data-input="'+t+'"]').slider("value",this.getControlValue(t))},onReady:function(){this.initSliders(),this.initColors()},onSlideChange:function(e,t){var n=e.currentTarget.dataset.input;this.ui.input.filter('[data-setting="'+n+'"]').val(t.value),this.setValue(n,t.value)},onBeforeDestroy:function(){this.ui.colors.each(function(){var e=jQuery(this);e.wpColorPicker("instance")&&e.wpColorPicker("close")}),this.$el.remove()}}),t.exports=i},{"elementor-controls/base-multiple":38}],42:[function(e,t,n){var i=e("elementor-controls/base");t.exports=i.extend({ui:function(){var e=i.prototype.ui.apply(this,arguments);return e.button="button",e},events:{"click @ui.button":"onButtonClick"},onButtonClick:function(){var e=this.model.get("event");elementor.channels.editor.trigger(e,this)}})},{"elementor-controls/base":40}],43:[function(e,t,n){var i,o=e("elementor-controls/base-data");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.inputs='[type="radio"]',e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"mousedown label":"onMouseDownLabel","click @ui.inputs":"onClickInput","change @ui.inputs":"onBaseInputChange"})},onMouseDownLabel:function(e){var t=this.$(e.currentTarget),n=this.$("#"+t.attr("for"));n.data("checked",n.prop("checked"))},onClickInput:function(e){if(this.model.get("toggle")){var t=this.$(e.currentTarget);t.data("checked")&&t.prop("checked",!1).trigger("change")}},onRender:function(){o.prototype.onRender.apply(this,arguments);var e=this.getControlValue();e&&this.ui.inputs.filter('[value="'+e+'"]').prop("checked",!0)}}),t.exports=i},{"elementor-controls/base-data":37}],44:[function(e,t,n){var i,o=e("elementor-controls/base-data");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.editor=".elementor-code-editor",e},onReady:function(){var e=this;if("undefined"!=typeof ace){var t=ace.require("ace/ext/language_tools");if(e.editor=ace.edit(this.ui.editor[0]),jQuery(e.editor.container).addClass("elementor-input-style elementor-code-editor"),e.editor.setOptions({mode:"ace/mode/"+e.model.attributes.language,minLines:10,maxLines:1/0,showGutter:!0,useWorker:!0,enableBasicAutocompletion:!0,enableLiveAutocompletion:!0}),e.editor.getSession().setUseWrapMode(!0),elementor.panel.$el.on("resize.aceEditor",e.onResize.bind(this)),"css"===e.model.attributes.language){t.addCompleter({getCompletions:function(e,t,n,i,o){var r=[],s=t.getTokenAt(n.row,n.column);0<i.length&&"selector".match(i)&&"constant"===s.type&&(r=[{name:"selector",value:"selector",score:1,meta:"Elementor"}]),o(null,r)}})}if(e.editor.setValue(e.getControlValue(),-1),e.editor.on("change",function(){e.setValue(e.editor.getValue())}),"html"===e.model.attributes.language){var i=e.editor.getSession();i.on("changeAnnotation",function(){for(var e=i.getAnnotations()||[],t=e.length,n=e.length;n--;)/doctype first\. Expected/.test(e[n].text)&&e.splice(n,1);t>e.length&&i.setAnnotations(e)})}}},onResize:function(){this.editor.resize()},onDestroy:function(){elementor.panel.$el.off("resize.aceEditor")}}),t.exports=i},{"elementor-controls/base-data":37}],45:[function(e,t,n){var i;i=e("elementor-controls/base-data").extend({onReady:function(){var e=this;elementor.helpers.wpColorPicker(e.ui.input,{change:function(){e.ui.input.val(e.ui.input.wpColorPicker("color")).trigger("input")},clear:function(){e.setValue("")}})},onBeforeDestroy:function(){this.ui.input.wpColorPicker("instance")&&this.ui.input.wpColorPicker("close"),this.$el.remove()}}),t.exports=i},{"elementor-controls/base-data":37}],46:[function(e,t,n){var i;i=e("elementor-controls/base-data").extend({onReady:function(){var e=this,t=_.extend({onClose:function(){e.saveValue()},enableTime:!0,minuteIncrement:1},this.model.get("picker_options"));this.ui.input.flatpickr(t)},saveValue:function(){this.setValue(this.ui.input.val())},onBeforeDestroy:function(){this.saveValue(),this.ui.input.flatpickr().destroy()}}),t.exports=i},{"elementor-controls/base-data":37}],47:[function(e,t,n){var i,o=e("elementor-controls/base-units");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.controls=".elementor-control-dimension > input:enabled",e.link="button.elementor-link-dimensions",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.link":"onLinkDimensionsClicked"})},defaultDimensionValue:0,initialize:function(){o.prototype.initialize.apply(this,arguments),this.model.set("allowed_dimensions",this.filterDimensions(this.model.get("allowed_dimensions")))},getPossibleDimensions:function(){return["top","right","bottom","left"]},filterDimensions:function(e){e=e||"all";var t=this.getPossibleDimensions();return"all"===e?t:(_.isArray(e)||("horizontal"===e?e=["right","left"]:"vertical"===e&&(e=["top","bottom"])),e)},onReady:function(){var i=this,o=i.getControlValue();i.isLinkedDimensions()||(i.ui.link.addClass("unlinked"),i.ui.controls.each(function(e,t){var n=o[t.dataset.setting];_.isEmpty(n)&&(n=i.defaultDimensionValue),i.$(t).val(n)})),i.fillEmptyDimensions()},updateDimensionsValue:function(){var n={},e=this.getPossibleDimensions(),i=this.ui.controls,o=this.defaultDimensionValue;e.forEach(function(e){var t=i.filter('[data-setting="'+e+'"]');n[e]=t.length?t.val():o}),this.setValue(n)},fillEmptyDimensions:function(){var e=this.getPossibleDimensions(),n=this.model.get("allowed_dimensions"),i=this.ui.controls,o=this.defaultDimensionValue;this.isLinkedDimensions()||e.forEach(function(e){var t=i.filter('[data-setting="'+e+'"]');-1!==_.indexOf(n,e)&&t.length&&_.isEmpty(t.val())&&t.val(o)})},updateDimensions:function(){this.fillEmptyDimensions(),this.updateDimensionsValue()},resetDimensions:function(){this.ui.controls.val(""),this.updateDimensionsValue()},onInputChange:function(e){var t=e.target.dataset.setting;if("unit"===t&&this.resetDimensions(),_.contains(this.getPossibleDimensions(),t)){if(this.isLinkedDimensions()){var n=this.$(e.target);this.ui.controls.val(n.val())}this.updateDimensions()}},onLinkDimensionsClicked:function(e){e.preventDefault(),e.stopPropagation(),this.ui.link.toggleClass("unlinked"),this.setValue("isLinked",!this.ui.link.hasClass("unlinked")),this.isLinkedDimensions()&&this.ui.controls.val(this.ui.controls.eq(0).val()),this.updateDimensions()},isLinkedDimensions:function(){return this.getControlValue("isLinked")}}),t.exports=i},{"elementor-controls/base-units":39}],48:[function(e,t,n){var i=e("elementor-controls/select2");t.exports=i.extend({getSelect2Options:function(){return{dir:elementor.config.is_rtl?"rtl":"ltr"}},templateHelpers:function(){var e=i.prototype.templateHelpers.apply(this,arguments),t=this.model.get("options");return e.getFontsByGroups=function(n){var i={};return _.each(t,function(e,t){(_.isArray(n)&&_.contains(n,e)||e===n)&&(i[t]=t)}),i},e}})},{"elementor-controls/select2":59}],49:[function(e,t,n){var i,o=e("elementor-controls/base-data");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.addImages=".elementor-control-gallery-add",e.clearGallery=".elementor-control-gallery-clear",e.galleryThumbnails=".elementor-control-gallery-thumbnails",e.status=".elementor-control-gallery-status-title",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.addImages":"onAddImagesClick","click @ui.clearGallery":"onClearGalleryClick","click @ui.galleryThumbnails":"onGalleryThumbnailsClick"})},onReady:function(){this.initRemoveDialog()},applySavedValue:function(){var e=this.getControlValue().length,t=!!e;this.$el.toggleClass("elementor-gallery-has-images",t).toggleClass("elementor-gallery-empty",!t);var n=this.ui.galleryThumbnails;n.empty(),this.ui.status.text(elementor.translate(t?"gallery_images_selected":"gallery_no_images_selected",[e])),t&&this.getControlValue().forEach(function(e){var t=jQuery("<div>",{class:"elementor-control-gallery-thumbnail"});t.css("background-image","url("+e.url+")"),n.append(t)})},hasImages:function(){return!!this.getControlValue().length},openFrame:function(e){this.initFrame(e),this.frame.open()},initFrame:function(e){var t={frame:"post",multiple:!0,state:{create:"gallery",add:"gallery-library",edit:"gallery-edit"}[e],button:{text:elementor.translate("insert_media")}};this.hasImages()&&(t.selection=this.fetchSelection()),this.frame=wp.media(t),this.frame.on({update:this.select,"menu:render:default":this.menuRender,"content:render:browse":this.gallerySettings},this)},menuRender:function(e){e.unset("insert"),e.unset("featured-image")},gallerySettings:function(e){e.sidebar.on("ready",function(){e.sidebar.unset("gallery")})},fetchSelection:function(){var e=wp.media.query({orderby:"post__in",order:"ASC",type:"image",perPage:-1,post__in:_.pluck(this.getControlValue(),"id")});return new wp.media.model.Selection(e.models,{props:e.props.toJSON(),multiple:!0})},select:function(e){var t=[];e.each(function(e){t.push({id:e.get("id"),url:e.get("url")})}),this.setValue(t),this.applySavedValue()},onBeforeDestroy:function(){this.frame&&this.frame.off(),this.$el.remove()},resetGallery:function(){this.setValue(""),this.applySavedValue()},initRemoveDialog:function(){var e;this.getRemoveDialog=function(){return e||(e=elementor.dialogsManager.createWidget("confirm",{message:elementor.translate("dialog_confirm_gallery_delete"),headerMessage:elementor.translate("delete_gallery"),strings:{confirm:elementor.translate("delete"),cancel:elementor.translate("cancel")},defaultOption:"confirm",onConfirm:this.resetGallery.bind(this)})),e}},onAddImagesClick:function(){this.openFrame(this.hasImages()?"add":"create")},onClearGalleryClick:function(){this.getRemoveDialog().show()},onGalleryThumbnailsClick:function(){this.openFrame("edit")}}),t.exports=i},{"elementor-controls/base-data":37}],50:[function(e,t,n){var i,o=e("elementor-controls/select2");i=o.extend({initialize:function(){o.prototype.initialize.apply(this,arguments),this.filterIcons()},filterIcons:function(){var t=this.model.get("options"),e=this.model.get("include"),n=this.model.get("exclude");if(e){var i={};return _.each(e,function(e){i[e]=t[e]}),void this.model.set("options",i)}n&&_.each(n,function(e){delete t[e]})},iconsList:function(e){return e.id?jQuery('<span><i class="'+e.id+'"></i> '+e.text+"</span>"):e.text},getSelect2Options:function(){return{allowClear:!0,templateResult:this.iconsList.bind(this),templateSelection:this.iconsList.bind(this)}}}),t.exports=i},{"elementor-controls/select2":59}],51:[function(e,t,n){var i;i=e("elementor-controls/base-multiple").extend({ui:function(){return{inputWidth:'input[data-setting="width"]',inputHeight:'input[data-setting="height"]',btnApply:"button.elementor-image-dimensions-apply-button"}},events:function(){return{"click @ui.btnApply":"onApplyClicked"}},onApplyClicked:function(e){e.preventDefault(),this.setValue({width:this.ui.inputWidth.val(),height:this.ui.inputHeight.val()})}}),t.exports=i},{"elementor-controls/base-multiple":38}],52:[function(e,t,n){var i,o=e("elementor-controls/base-multiple");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.controlMedia=".elementor-control-media",e.mediaImage=".elementor-control-media-image",e.frameOpeners=".elementor-control-media-upload-button, .elementor-control-media-image",e.deleteButton=".elementor-control-media-delete",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.frameOpeners":"openFrame","click @ui.deleteButton":"deleteImage"})},applySavedValue:function(){var e=this.getControlValue("url");this.ui.mediaImage.css("background-image",e?"url("+e+")":""),this.ui.controlMedia.toggleClass("elementor-media-empty",!e)},openFrame:function(){this.frame||this.initFrame(),this.frame.open()},deleteImage:function(){this.setValue({url:"",id:""}),this.applySavedValue()},initFrame:function(){this.frame=wp.media({button:{text:elementor.translate("insert_media")},states:[new wp.media.controller.Library({title:elementor.translate("insert_media"),library:wp.media.query({type:"image"}),multiple:!1,date:!1})]}),this.frame.on("insert select",this.select.bind(this))},select:function(){this.trigger("before:select");var e=this.frame.state().get("selection").first().toJSON();e.url&&(this.setValue({url:e.url,id:e.id}),this.applySavedValue()),this.trigger("after:select")},onBeforeDestroy:function(){this.$el.remove()}}),t.exports=i},{"elementor-controls/base-multiple":38}],53:[function(e,t,n){var i,o=e("elementor-controls/base-data"),r=e("elementor-validator/number");i=o.extend({registerValidators:function(){o.prototype.registerValidators.apply(this,arguments);var n={},i=this.model;["min","max"].forEach(function(e){var t=i.get(e);_.isFinite(t)&&(n[e]=t)}),jQuery.isEmptyObject(n)||this.addValidator(new r({validationTerms:n}))}}),t.exports=i},{"elementor-controls/base-data":37,"elementor-validator/number":36}],54:[function(e,t,n){var i,o=e("elementor-controls/base-multiple");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.reverseOrderLabel=".elementor-control-order-label",e},changeLabelTitle:function(){var e=this.getControlValue("reverse_order");this.ui.reverseOrderLabel.attr("title",elementor.translate(e?"asc":"desc"))},onRender:function(){o.prototype.onRender.apply(this,arguments),this.changeLabelTitle()},onInputChange:function(){this.changeLabelTitle()}}),t.exports=i},{"elementor-controls/base-multiple":38}],55:[function(e,t,n){var i,o=e("elementor-controls/choose");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.popoverToggle=".elementor-control-popover-toggle-toggle",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.popoverToggle":"onPopoverToggleClick"})},onPopoverToggleClick:function(){this.$el.next(".elementor-controls-popover").toggle()}}),t.exports=i},{"elementor-controls/choose":43}],56:[function(e,t,n){var i,o=e("elementor-controls/base-data");i=Marionette.CompositeView.extend({template:Marionette.TemplateCache.get("#tmpl-elementor-repeater-row"),className:"elementor-repeater-fields",ui:{duplicateButton:".elementor-repeater-tool-duplicate",editButton:".elementor-repeater-tool-edit",removeButton:".elementor-repeater-tool-remove",itemTitle:".elementor-repeater-row-item-title"},behaviors:{HandleInnerTabs:{behaviorClass:e("elementor-behaviors/inner-tabs")}},triggers:{"click @ui.removeButton":"click:remove","click @ui.duplicateButton":"click:duplicate","click @ui.itemTitle":"click:edit"},modelEvents:{change:"onModelChange"},templateHelpers:function(){return{itemIndex:this.getOption("itemIndex")}},childViewContainer:".elementor-repeater-row-controls",getChildView:function(e){var t=e.get("type");return elementor.getControlView(t)},childViewOptions:function(){return{elementSettingsModel:this.model}},updateIndex:function(e){this.itemIndex=e},setTitle:function(){var e=this.getOption("titleField"),t="";if(e){var n={};this.children.each(function(e){e instanceof o&&(n[e.model.get("name")]=e.getControlValue())}),t=Marionette.TemplateCache.prototype.compileTemplate(e)(this.model.parseDynamicSettings())}t||(t=elementor.translate("Item #{0}",[this.getOption("itemIndex")])),this.ui.itemTitle.html(t)},initialize:function(e){this.itemIndex=0,this.collection=new Backbone.Collection(_.values(elementor.mergeControlsSettings(e.controlFields)))},onRender:function(){this.setTitle()},onModelChange:function(){this.getOption("titleField")&&this.setTitle()},onChildviewResponsiveSwitcherClick:function(e,t){"desktop"===t&&elementor.getPanelView().getCurrentPageView().$el.toggleClass("elementor-responsive-switchers-open")}}),t.exports=i},{"elementor-behaviors/inner-tabs":75,"elementor-controls/base-data":37}],57:[function(e,t,n){var i,o=e("elementor-controls/base-data"),r=e("elementor-controls/repeater-row"),s=e("elementor-elements/models/base-settings");i=o.extend({ui:{btnAddRow:".elementor-repeater-add",fieldContainer:".elementor-repeater-fields-wrapper"},events:function(){return{"click @ui.btnAddRow":"onButtonAddRowClick","sortstart @ui.fieldContainer":"onSortStart","sortupdate @ui.fieldContainer":"onSortUpdate","sortstop @ui.fieldContainer":"onSortStop"}},childView:r,childViewContainer:".elementor-repeater-fields-wrapper",templateHelpers:function(){return{data:_.extend({},this.model.toJSON(),{controlValue:[]})}},childViewOptions:function(){return{controlFields:this.model.get("fields"),titleField:this.model.get("title_field")}},createItemModel:function(e,t,n){return(t=t||{}).controls=n.model.get("fields"),e._id||(e._id=elementor.helpers.getUniqueID()),new s(e,t)},fillCollection:function(){var e=this.model.get("name");this.collection=this.elementSettingsModel.get(e),this.collection instanceof Backbone.Collection||(this.collection=new Backbone.Collection(this.collection,{model:_.partial(this.createItemModel,_,_,this)}),this.elementSettingsModel.set(e,this.collection,{silent:!0}),this.listenTo(this.collection,"change",this.onRowControlChange),this.listenTo(this.collection,"update",this.onRowUpdate,this))},initialize:function(e){o.prototype.initialize.apply(this,arguments),this.fillCollection(),this.listenTo(this.collection,"change",this.onRowControlChange),this.listenTo(this.collection,"update",this.onRowUpdate,this)},addRow:function(e,t){var n=elementor.helpers.getUniqueID();return e instanceof Backbone.Model?e.set("_id",n):e._id=n,this.collection.add(e,t)},editRow:function(e){if(this.currentEditableChild){var t=this.currentEditableChild.getChildViewContainer(this.currentEditableChild);t.removeClass("editable"),t.find(".elementor-wp-editor").each(function(){tinymce.get(this.id).fire("hide")})}this.currentEditableChild!==e?(e.getChildViewContainer(e).addClass("editable"),this.currentEditableChild=e,this.updateActiveRow()):delete this.currentEditableChild},toggleMinRowsClass:function(){this.model.get("prevent_empty")&&this.$el.toggleClass("elementor-repeater-has-minimum-rows",this.collection.length<=1)},updateActiveRow:function(){var e=0;this.currentEditableChild&&(e=this.currentEditableChild.itemIndex),this.setEditSetting("activeItemIndex",e)},updateChildIndexes:function(){var t=this.collection;this.children.each(function(e){e.updateIndex(t.indexOf(e.model)+1),e.setTitle()})},onRender:function(){o.prototype.onRender.apply(this,arguments),this.ui.fieldContainer.sortable({axis:"y",handle:".elementor-repeater-row-tools"}),this.toggleMinRowsClass()},onSortStart:function(e,t){t.item.data("oldIndex",t.item.index())},onSortStop:function(e,t){var n=this;if(-1!==t.item.index()){var i=n.children.findByIndex(t.item.index()),o=i.children._views;jQuery.each(o,function(){if("wysiwyg"===this.model.get("type"))return i.render(),delete n.currentEditableChild,!1})}},onSortUpdate:function(e,t){var n=t.item.data("oldIndex"),i=this.collection.at(n),o=t.item.index();this.collection.remove(i),this.addRow(i,{at:o})},onAddChild:function(){this.updateChildIndexes(),this.updateActiveRow()},onRemoveChild:function(e){e===this.currentEditableChild&&delete this.currentEditableChild,this.updateChildIndexes(),this.updateActiveRow()},onRowUpdate:function(e,t){var n=this.elementSettingsModel,i=e.clone(),o=this.model.get("name");t.add?i.remove(t.changes.added[0]):i.add(t.changes.removed[0],{at:t.index}),n.changed={},n.changed[o]=e,n._previousAttributes={},n._previousAttributes[o]=i.toJSON(),n.trigger("change",n,n._pending),delete n.changed,delete n._previousAttributes,this.toggleMinRowsClass()},onRowControlChange:function(e){if(Object.keys(e.changed).length){var t=e.collection.toJSON(),n=e.collection.findIndex(e),i=this._parent.model.get("settings"),o=this.model.get("name");t[n]=e._previousAttributes,i.changed={},i.changed[o]=e.collection,i._previousAttributes={},i._previousAttributes[o]=t,i.trigger("change",i),delete i.changed,delete i._previousAttributes}},onButtonAddRowClick:function(){var t={};_.each(this.model.get("fields"),function(e){t[e.name]=e.default});var e=this.addRow(t),n=this.children.findByModel(e);this.editRow(n),this.render()},onChildviewClickRemove:function(e){e.model.destroy(),this.render()},onChildviewClickDuplicate:function(e){var t=this.createItemModel(e.model.toJSON(),{},this);this.addRow(t,{at:e.itemIndex}),this.render()},onChildviewClickEdit:function(e){this.editRow(e)},onAfterExternalChange:function(){this.fillCollection(),o.prototype.onAfterExternalChange.apply(this,arguments)}}),t.exports=i},{"elementor-controls/base-data":37,"elementor-controls/repeater-row":56,"elementor-elements/models/base-settings":68}],58:[function(e,t,n){var i,o=e("elementor-controls/base");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.heading=".elementor-panel-heading",e},triggers:{click:"control:section:clicked"}}),t.exports=i},{"elementor-controls/base":40}],59:[function(e,t,n){var i;i=e("elementor-controls/base-data").extend({getSelect2Placeholder:function(){return this.ui.select.children('option:first[value=""]').text()},getSelect2DefaultOptions:function(){return{allowClear:!0,placeholder:this.getSelect2Placeholder(),dir:elementor.config.is_rtl?"rtl":"ltr"}},getSelect2Options:function(){return jQuery.extend(this.getSelect2DefaultOptions(),this.model.get("select2options"))},onReady:function(){this.ui.select.select2(this.getSelect2Options())},onBeforeDestroy:function(){this.ui.select.data("select2")&&this.ui.select.select2("destroy"),this.$el.remove()}}),t.exports=i},{"elementor-controls/base-data":37}],60:[function(e,t,n){var i,o=e("elementor-controls/base-units");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.slider=".elementor-slider",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"slide @ui.slider":"onSlideChange"})},initSlider:function(){var e=this.getControlValue("size"),t=this.getCurrentRange();this.ui.input.attr(t).val(e),this.ui.slider.slider(_.extend({},t,{value:e}))},resetSize:function(){this.setValue("size",""),this.initSlider()},onReady:function(){this.initSlider()},onSlideChange:function(e,t){this.setValue("size",t.value),this.ui.input.val(t.value)},onInputChange:function(e){var t=e.currentTarget.dataset.setting;"size"===t?this.ui.slider.slider("value",this.getControlValue("size")):"unit"===t&&this.resetSize()},onBeforeDestroy:function(){this.ui.slider.data("uiSlider")&&this.ui.slider.slider("destroy"),this.$el.remove()}}),t.exports=i},{"elementor-controls/base-units":39}],61:[function(e,t,n){var i,o=e("elementor-controls/base-data");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.resetStructure=".elementor-control-structure-reset",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.resetStructure":"onResetStructureClick"})},templateHelpers:function(){var e=o.prototype.templateHelpers.apply(this,arguments);return e.getMorePresets=this.getMorePresets.bind(this),e},getCurrentEditedSection:function(){return elementor.getPanelView().getCurrentPageView().getOption("editedElementView")},getMorePresets:function(){var e=elementor.presetsFactory.getParsedStructure(this.getControlValue());return elementor.presetsFactory.getPresets(e.columnsCount)},onInputChange:function(){this.getCurrentEditedSection().redefineLayout(),this.render()},onResetStructureClick:function(){this.getCurrentEditedSection().resetColumnsCustomSize()}}),t.exports=i},{"elementor-controls/base-data":37}],62:[function(e,t,n){var i=e("elementor-controls/base-data");t.exports=i.extend({setInputValue:function(e,t){this.$(e).prop("checked",this.model.get("return_value")===t)}})},{"elementor-controls/base-data":37}],63:[function(e,t,n){var i;i=e("elementor-controls/base").extend({triggers:{click:{event:"control:tab:clicked",stopPropagation:!1}}}),t.exports=i},{"elementor-controls/base":40}],64:[function(e,t,n){var i,o=e("elementor-controls/base-data");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.form="form",e.loading=".wp-widget-form-loading",e},events:function(){return{"keyup @ui.form :input":"onFormChanged","change @ui.form :input":"onFormChanged"}},onFormChanged:function(){var e="widget-"+this.model.get("id_base"),t=this.ui.form.elementorSerializeObject()[e].REPLACE_TO_ID;this.setValue(t)},onReady:function(){var n=this;elementor.ajax.addRequest("editor_get_wp_widget_form",{data:{id:n.model.cid,widget_type:n.model.get("widget"),data:n.elementSettingsModel.toJSON()},success:function(e){if(n.ui.form.html(e),wp.textWidgets){n.ui.form.addClass("open");var t=new jQuery.Event("widget-added");wp.textWidgets.handleWidgetAdded(t,n.ui.form),wp.mediaWidgets.handleWidgetAdded(t,n.ui.form),wp.customHtmlWidgets&&wp.customHtmlWidgets.handleWidgetAdded(t,n.ui.form)}elementor.hooks.doAction("panel/widgets/"+n.model.get("widget")+"/controls/wp_widget/loaded",n)}})}}),t.exports=i},{"elementor-controls/base-data":37}],65:[function(e,t,n){var i,o=e("elementor-controls/base-data");i=o.extend({editor:null,ui:function(){var e=o.prototype.ui.apply(this,arguments);return jQuery.extend(e,{inputWrapper:".elementor-control-input-wrapper"}),e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"keyup textarea.elementor-wp-editor":"onBaseInputChange"})},buttons:{addToBasic:{underline:"italic"},addToAdvanced:{},moveToAdvanced:{blockquote:"removeformat",alignleft:"blockquote",aligncenter:"alignleft",alignright:"aligncenter"},moveToBasic:{},removeFromBasic:["unlink","wp_more"],removeFromAdvanced:[]},initialize:function(){o.prototype.initialize.apply(this,arguments);var t=this;if(t.editorID="elementorwpeditor"+t.cid,_.defer(function(){quicktags({buttons:"strong,em,del,link,img,close",id:t.editorID}),elementor.config.rich_editing_enabled&&switchEditors.go(t.editorID,"tmce"),delete QTags.instances[0]}),elementor.config.rich_editing_enabled){var e={id:t.editorID,selector:"#"+t.editorID,setup:function(e){t.editor=e}};tinyMCEPreInit.mceInit[t.editorID]=_.extend(_.clone(tinyMCEPreInit.mceInit.elementorwpeditor),e),elementor.config.tinymceHasCustomConfig||t.rearrangeButtons()}else t.$el.addClass("elementor-rich-editing-disabled")},applySavedValue:function(){if(this.editor){var e=this.getControlValue();this.editor.setContent(e),jQuery("#"+this.editorID).val(e)}},saveEditor:function(){this.editor.save(),this.setValue(this.editor.getContent())},moveButtons:function(e,o,r){r||(r=o,o=null),_.each(e,function(e,t){var n=r.indexOf(e);if(o){var i=o.indexOf(t);if(-1===i)throw new ReferenceError("Trying to move non-existing button `"+t+"`");o.splice(i,1)}if(-1===n)throw new ReferenceError("Trying to move button after non-existing button `"+e+"`");r.splice(n+1,0,t)})},rearrangeButtons:function(){var e=tinyMCEPreInit.mceInit[this.editorID],t=e.toolbar1.split(","),n=e.toolbar2.split(",");t=_.difference(t,this.buttons.removeFromBasic),n=_.difference(n,this.buttons.removeFromAdvanced),this.moveButtons(this.buttons.moveToBasic,n,t),this.moveButtons(this.buttons.moveToAdvanced,t,n),this.moveButtons(this.buttons.addToBasic,t),this.moveButtons(this.buttons.addToAdvanced,n),e.toolbar1=t.join(","),e.toolbar2=n.join(",")},onReady:function(){var e=this,t=jQuery(elementor.config.wp_editor.replace(/elementorwpeditor/g,e.editorID).replace("%%EDITORCONTENT%%",e.getControlValue()));e.ui.inputWrapper.html(t),setTimeout(function(){e.editor.on("keyup change undo redo SetContent",e.saveEditor.bind(e))},100)},onBeforeDestroy:function(){delete QTags.instances[this.editorID],elementor.config.rich_editing_enabled&&(tinymce.EditorManager.execCommand("mceRemoveEditor",!0,this.editorID),delete tinyMCEPreInit.mceInit[this.editorID],delete tinyMCEPreInit.qtInit[this.editorID])}}),t.exports=i},{"elementor-controls/base-data":37}],66:[function(r,e,t){var n;Marionette.TemplateCache.prototype.compileTemplate=function(e,t){return t={evaluate:/<#([\s\S]+?)#>/g,interpolate:/{{{([\s\S]+?)}}}/g,escape:/{{([^}]+?)}}(?!})/g},_.template(e,t)},n=Marionette.Application.extend({previewLoadedOnce:!1,helpers:r("elementor-editor-utils/helpers"),heartbeat:r("elementor-editor-utils/heartbeat"),imagesManager:r("elementor-editor-utils/images-manager"),debug:r("elementor-editor-utils/debug"),schemes:r("elementor-editor-utils/schemes"),presetsFactory:r("elementor-editor-utils/presets-factory"),templates:r("elementor-templates/manager"),ajax:r("elementor-editor-utils/ajax"),conditions:r("elementor-editor-utils/conditions"),hotKeys:r("elementor-utils/hot-keys"),history:r("modules/history/assets/js/module"),channels:{editor:Backbone.Radio.channel("ELEMENTOR:editor"),data:Backbone.Radio.channel("ELEMENTOR:data"),panelElements:Backbone.Radio.channel("ELEMENTOR:panelElements"),dataEditMode:Backbone.Radio.channel("ELEMENTOR:editmode"),deviceMode:Backbone.Radio.channel("ELEMENTOR:deviceMode"),templates:Backbone.Radio.channel("ELEMENTOR:templates")},modules:{Module:r("elementor-utils/module"),components:{templateLibrary:{views:{parts:{headerParts:{logo:r("elementor-templates/views/parts/header-parts/logo")}},BaseModalLayout:r("elementor-templates/views/base-modal-layout")}},saver:{behaviors:{FooterSaver:r("./components/saver/behaviors/footer-saver")}}},controls:{Animation:r("elementor-controls/select2"),Base:r("elementor-controls/base"),BaseData:r("elementor-controls/base-data"),BaseMultiple:r("elementor-controls/base-multiple"),Box_shadow:r("elementor-controls/box-shadow"),Button:r("elementor-controls/button"),Choose:r("elementor-controls/choose"),Code:r("elementor-controls/code"),Color:r("elementor-controls/color"),Date_time:r("elementor-controls/date-time"),Dimensions:r("elementor-controls/dimensions"),Font:r("elementor-controls/font"),Gallery:r("elementor-controls/gallery"),Hover_animation:r("elementor-controls/select2"),Icon:r("elementor-controls/icon"),Image_dimensions:r("elementor-controls/image-dimensions"),Media:r("elementor-controls/media"),Number:r("elementor-controls/number"),Order:r("elementor-controls/order"),Popover_toggle:r("elementor-controls/popover-toggle"),Repeater:r("elementor-controls/repeater"),RepeaterRow:r("elementor-controls/repeater-row"),Section:r("elementor-controls/section"),Select2:r("elementor-controls/select2"),Slider:r("elementor-controls/slider"),Structure:r("elementor-controls/structure"),Switcher:r("elementor-controls/switcher"),Tab:r("elementor-controls/tab"),Text_shadow:r("elementor-controls/box-shadow"),Url:r("elementor-controls/base-multiple"),Wp_widget:r("elementor-controls/wp_widget"),Wysiwyg:r("elementor-controls/wysiwyg")},elements:{models:{BaseSettings:r("elementor-elements/models/base-settings"),Element:r("elementor-elements/models/element")},views:{Widget:r("elementor-elements/views/widget")}},layouts:{panel:{pages:{elements:{views:{Global:r("elementor-panel/pages/elements/views/global"),Elements:r("elementor-panel/pages/elements/views/elements")}},menu:{Menu:r("elementor-panel/pages/menu/menu")}}}},views:{ControlsStack:r("elementor-views/controls-stack")}},backgroundClickListeners:{popover:{element:".elementor-controls-popover",ignore:".elementor-control-popover-toggle-toggle, .elementor-control-popover-toggle-toggle-label, .select2-container"},tagsList:{element:".elementor-tags-list",ignore:".elementor-control-dynamic-switcher"}},initModulesBC:function(){var e={ControlsStack:this.modules.views.ControlsStack,element:{Model:this.modules.elements.models.Element},RepeaterRowView:this.modules.controls.RepeaterRow,WidgetView:this.modules.elements.views.Widget,panel:{Menu:this.modules.layouts.panel.pages.menu.Menu},saver:{footerBehavior:this.modules.components.saver.behaviors.FooterSaver},SettingsModel:this.modules.elements.models.BaseSettings,templateLibrary:{ElementsCollectionView:this.modules.layouts.panel.pages.elements.views.Elements}};jQuery.extend(this.modules,e)},userCan:function(e){return-1===this.config.user.restrictions.indexOf(e)},_defaultDeviceMode:"desktop",addControlView:function(e,t){this.modules.controls[e[0].toUpperCase()+e.slice(1)]=t},checkEnvCompatibility:function(){return this.envData.gecko||this.envData.webkit},getElementData:function(e){var t=e.get("elType");if("widget"===t){var n=e.get("widgetType");return!!this.config.widgets[n]&&this.config.widgets[n]}return!!this.config.elements[t]&&this.config.elements[t]},getElementControls:function(e){var t=this.getElementData(e);if(!t)return!1;var n=e.get("isInner"),i={},o=elementor.userCan("design");return _.each(t.controls,function(e,t){n&&e.hide_in_inner||!n&&e.hide_in_top||(o||"content"===e.tab)&&(i[t]=e)}),i},mergeControlsSettings:function(n){var i=this;return _.each(n,function(e,t){n[t]=jQuery.extend(!0,{},i.config.controls[e.type],e)}),n},getControlView:function(e){var t=e[0].toUpperCase()+e.slice(1),n=this.modules.controls[t];if(!n){var i=-1!==this.config.controls[e].features.indexOf("ui");n=this.modules.controls[i?"Base":"BaseData"]}return n},getPanelView:function(){return this.getRegion("panel").currentView},initEnvData:function(){this.envData=_.pick(tinymce.EditorManager.Env,["desktop","webkit","gecko","ie","opera"])},initComponents:function(){var e=r("elementor-utils/hooks"),t=r("elementor-dynamic-tags/manager"),n=r("elementor-editor/components/settings/settings"),i=r("elementor-editor/components/saver/manager"),o=r("elementor-editor-utils/notifications");this.hooks=new e,this.saver=new i,this.settings=new n,this.dynamicTags=new t,this.pageSettings=this.settings.page,this.templates.init(),this.initDialogsManager(),this.notifications=new o,this.ajax.init()},initDialogsManager:function(){this.dialogsManager=new DialogsManager.Instance},initElements:function(){var e=r("elementor-elements/collections/elements"),t=this.config.data;this.elements&&(t=this.elements.toJSON()),this.elements=new e(t)},initPreview:function(){var e=jQuery;this.$previewWrapper=e("#elementor-preview"),this.$previewResponsiveWrapper=e("#elementor-preview-responsive-wrapper");this.$preview||(this.$preview=e("<iframe>",{id:"elementor-preview-iframe",src:this.config.document.urls.preview,allowfullscreen:1}),this.$previewResponsiveWrapper.append(this.$preview)),this.$preview.on("load",this.onPreviewLoaded.bind(this))},initFrontend:function(){var e=this.$preview[0].contentWindow;window.elementorFrontend=e.elementorFrontend,e.elementor=this,elementorFrontend.init(),elementorFrontend.elementsHandler.initHandlers(),this.trigger("frontend:init")},initClearPageDialog:function(){var e,t=this;t.getClearPageDialog=function(){return e||(e=this.dialogsManager.createWidget("confirm",{id:"elementor-clear-page-dialog",headerMessage:elementor.translate("clear_page"),message:elementor.translate("dialog_confirm_clear_page"),position:{my:"center center",at:"center center"},strings:{confirm:elementor.translate("delete"),cancel:elementor.translate("cancel")},onConfirm:function(){t.getRegion("sections").currentView.collection.reset()}}))}},initHotKeys:function(){var e=46,t=68,n=76,i=77,o=80,r=83,s=jQuery,l={},a=this.hotKeys;l[e]={deleteElement:{isWorthHandling:function(e){if(!("editor"===elementor.getPanelView().getCurrentPageName()))return!1;var t=s(e.target);return!t.is(":input, .elementor-input")&&!t.closest('[contenteditable="true"]').length},handle:function(){elementor.getPanelView().getCurrentPageView().getOption("editedElementView").removeElement()}}},l[t]={duplicateElement:{isWorthHandling:function(e){return a.isControlEvent(e)},handle:function(){var e=elementor.getPanelView();"editor"===e.getCurrentPageName()&&e.getCurrentPageView().getOption("editedElementView").duplicate()}}},l[n]={showTemplateLibrary:{isWorthHandling:function(e){return a.isControlEvent(e)&&e.shiftKey},handle:function(){elementor.templates.startModal()}}},l[i]={changeDeviceMode:{devices:["desktop","tablet","mobile"],isWorthHandling:function(e){return a.isControlEvent(e)&&e.shiftKey},handle:function(){var e=elementor.channels.deviceMode.request("currentMode"),t=this.devices.indexOf(e);++t>=this.devices.length&&(t=0),elementor.changeDeviceMode(this.devices[t])}}},l[o]={changeEditMode:{isWorthHandling:function(e){return a.isControlEvent(e)},handle:function(){elementor.getPanelView().modeSwitcher.currentView.toggleMode()}}},l[r]={saveEditor:{isWorthHandling:function(e){return a.isControlEvent(e)},handle:function(){elementor.saver.saveDraft()}}},_.each(l,function(e,n){_.each(e,function(e,t){a.addHotKeyHandler(n,t,e)})}),a.bindListener(this.$window.add(elementorFrontend.getElements("$window")))},preventClicksInsideEditor:function(){this.$previewContents.on("click",function(e){var t=jQuery(e.target),n=elementor.channels.dataEditMode.request("activeMode"),i=!!t.closest("#elementor, .pen-menu").length,o=this.contains(t[0]);if((!i||"edit"!==n)&&o&&(t.closest("a:not(.elementor-clickable)").length&&e.preventDefault(),!i)){var r=elementor.getPanelView();"elements"!==r.getCurrentPageName()&&r.setPage("elements")}})},addBackgroundClickArea:function(e){e.addEventListener("click",this.onBackgroundClick.bind(this),!0)},addBackgroundClickListener:function(e,t){this.backgroundClickListeners[e]=t},showFatalErrorDialog:function(e){var t={id:"elementor-fatal-error-dialog",headerMessage:"",message:"",position:{my:"center center",at:"center center"},strings:{confirm:elementor.translate("learn_more"),cancel:elementor.translate("go_back")},onConfirm:null,onCancel:function(){parent.history.go(-1)},hide:{onBackgroundClick:!1,onButtonClick:!1}};e=jQuery.extend(!0,t,e),this.dialogsManager.createWidget("confirm",e).show()},checkPageStatus:function(){elementor.config.current_revision_id!==elementor.config.document.id&&this.notifications.showToast({message:this.translate("working_on_draft_notification"),buttons:[{name:"view_revisions",text:elementor.translate("view_all_revisions"),callback:function(){var e=elementor.getPanelView();e.setPage("historyPage"),e.getCurrentPageView().activateTab("revisions")}}]})},openLibraryOnStart:function(){"#library"===location.hash&&(elementor.templates.startModal(),location.hash="")},onStart:function(){this.$window=jQuery(window),this.$body=jQuery("body"),NProgress.start(),NProgress.inc(.2),this.config=ElementorConfig,Backbone.Radio.DEBUG=!1,Backbone.Radio.tuneIn("ELEMENTOR"),this.initModulesBC(),this.initComponents(),this.initEnvData(),this.checkEnvCompatibility()||this.onEnvNotCompatible(),this.channels.dataEditMode.reply("activeMode","edit"),this.listenTo(this.channels.dataEditMode,"switch",this.onEditModeSwitched),this.initClearPageDialog(),this.addBackgroundClickArea(document),this.$window.trigger("elementor:init"),this.initPreview(),this.logSite()},onPreviewLoaded:function(){if(NProgress.done(),this.$preview[0].contentWindow.elementorFrontend)if(this.$previewContents=this.$preview.contents(),this.$previewElementorEl=this.$previewContents.find("#elementor"),this.$previewElementorEl.length){this.initFrontend(),this.initElements(),this.initHotKeys();var e=new Marionette.Region({el:this.$previewElementorEl[0]});this.schemes.init(),this.schemes.printSchemesStyle(),this.preventClicksInsideEditor(),this.addBackgroundClickArea(elementorFrontend.getElements("$document")[0]),this.previewLoadedOnce?this.getPanelView().setPage("elements"):this.onFirstPreviewLoaded(),this.addRegions({sections:e});var t=r("elementor-views/preview");this.getRegion("sections").show(new t({collection:this.elements})),this.$previewContents.children().addClass("elementor-html"),elementorFrontend.getElements("$body").addClass("elementor-editor-active"),elementor.userCan("design")||elementorFrontend.getElements("$body").addClass("elementor-editor-content-only"),this.changeDeviceMode(this._defaultDeviceMode),jQuery("#elementor-loading, #elementor-preview-loading").fadeOut(600),_.defer(function(){elementorFrontend.getElements("window").jQuery.holdReady(!1)}),this.enqueueTypographyFonts(),this.onEditModeSwitched(),this.trigger("preview:loaded")}else this.onPreviewElNotFound();else this.onPreviewLoadingError()},onFirstPreviewLoaded:function(){this.addRegions({panel:"#elementor-panel"});var e=r("elementor-layouts/panel/panel");this.panel.show(new e),this.setResizablePanel(),this.heartbeat.init(),this.checkPageStatus(),this.openLibraryOnStart(),this.previewLoadedOnce=!0},onEditModeSwitched:function(){var e=this.channels.dataEditMode.request("activeMode");"edit"===e?this.exitPreviewMode():this.enterPreviewMode("preview"===e)},onEnvNotCompatible:function(){this.showFatalErrorDialog({headerMessage:this.translate("device_incompatible_header"),message:this.translate("device_incompatible_message"),strings:{confirm:elementor.translate("proceed_anyway")},hide:{onButtonClick:!0},onConfirm:function(){this.hide()}})},onPreviewLoadingError:function(){this.showFatalErrorDialog({headerMessage:this.translate("preview_not_loading_header"),message:this.translate("preview_not_loading_message"),onConfirm:function(){open(elementor.config.help_preview_error_url,"_blank")}})},onPreviewElNotFound:function(){var e=this.$preview[0].contentWindow.elementorPreviewErrorArgs;e||(e={headerMessage:this.translate("preview_el_not_found_header"),message:this.translate("preview_el_not_found_message"),confirmURL:elementor.config.help_the_content_url}),e.onConfirm=function(){open(e.confirmURL,"_blank")},this.showFatalErrorDialog(e)},onBackgroundClick:function(i){jQuery.each(this.backgroundClickListeners,function(){var e=this.element,t=jQuery(i.target);if(t[0].control&&(t=t.add(t[0].control)),!this.ignore||!t.closest(this.ignore).length){var n=t.closest(e);jQuery(e).not(n).hide()}})},setResizablePanel:function(){var n=this,i=elementor.config.is_rtl?"right":"left";n.panel.$el.resizable({handles:elementor.config.is_rtl?"w":"e",minWidth:200,maxWidth:680,start:function(){n.$previewWrapper.addClass("ui-resizable-resizing").css("pointer-events","none")},stop:function(){n.$previewWrapper.removeClass("ui-resizable-resizing").css("pointer-events",""),elementor.channels.data.trigger("scrollbar:update")},resize:function(e,t){n.$previewWrapper.css(i,t.size.width)}})},enterPreviewMode:function(e){var t=elementorFrontend.getElements("$body");e&&(t=t.add(this.$body)),t.removeClass("elementor-editor-active").addClass("elementor-editor-preview"),this.$previewElementorEl.removeClass("elementor-edit-area-active").addClass("elementor-edit-area-preview"),e&&(this.$previewWrapper.css(this.config.is_rtl?"right":"left",""),this.panel.$el.css("width",""))},exitPreviewMode:function(){elementorFrontend.getElements("$body").add(this.$body).removeClass("elementor-editor-preview").addClass("elementor-editor-active"),this.$previewElementorEl.removeClass("elementor-edit-area-preview").addClass("elementor-edit-area-active")},changeEditMode:function(e){var t=elementor.channels.dataEditMode,n=t.request("activeMode");t.reply("activeMode",e),e!==n&&t.trigger("switch",e)},reloadPreview:function(){jQuery("#elementor-preview-loading").show(),this.$preview[0].contentWindow.location.reload(!0)},clearPage:function(){this.getClearPageDialog().show()},changeDeviceMode:function(e){var t=this.channels.deviceMode.request("currentMode");t!==e&&(this.$body.removeClass("elementor-device-"+t).addClass("elementor-device-"+e),this.channels.deviceMode.reply("previousMode",t).reply("currentMode",e).trigger("change"))},enqueueTypographyFonts:function(){var t=this,e=this.schemes.getScheme("typography");t.helpers.resetEnqueuedFontsCache(),_.each(e.items,function(e){t.helpers.enqueueFont(e.value.font_family)})},translate:function(e,n,t){t||(t=this.config.i18n);var i=t[e];return void 0===i&&(i=e),n&&(i=(i=i.replace(/{(\d+)}/g,function(e,t){return void 0!==n[t]?n[t]:e})).replace(/%(?:(\d+)\$)?s/g,function(e,t){return t||(t=1),void 0!==n[--t]?n[t]:e})),i},compareVersions:function(e,t,n){var i=function(e){return(e+="").replace(/[^\d.]+/,".-1.")};if((e=i(e))===(t=i(t)))return!n||/^={2,3}$/.test(n);for(var o=e.split(".").map(Number),r=t.split(".").map(Number),s=Math.max(o.length,r.length),l=0;l<s;l++){var a=o[l]||0,c=r[l]||0;if(a!==c)return this.conditions.compare(a,c,n)}},logSite:function(){var e="",t="";if(this.envData.gecko){e+="%c"+[" ;;;;;;;;;;;;;;; ",";;; ;; ;;;",";;; ;;;;;;;;;;;;",";;; ;;;;;;;;;;;;",";;; ;; ;;;",";;; ;;;;;;;;;;;;",";;; ;;;;;;;;;;;;",";;; ;; ;;;"," ;;;;;;;;;;;;;;; "].join("\n")+"\n",t="color: #C42961"}else e+="%c00",t='font-size: 22px; background-image: url("'+elementor.config.assets_url+'images/logo-icon.png"); color: transparent; background-repeat: no-repeat';setTimeout(console.log.bind(console,e,t)),e="%cLove using Elementor? Join our growing community of Elementor developers: %chttps://github.com/pojome/elementor",setTimeout(console.log.bind(console,e,"color: #9B0A46",""))}}),e.exports=(window.elementor=new n).start()},{"./components/saver/behaviors/footer-saver":7,"elementor-controls/base":40,"elementor-controls/base-data":37,"elementor-controls/base-multiple":38,"elementor-controls/box-shadow":41,"elementor-controls/button":42,"elementor-controls/choose":43,"elementor-controls/code":44,"elementor-controls/color":45,"elementor-controls/date-time":46,"elementor-controls/dimensions":47,"elementor-controls/font":48,"elementor-controls/gallery":49,"elementor-controls/icon":50,"elementor-controls/image-dimensions":51,"elementor-controls/media":52,"elementor-controls/number":53,"elementor-controls/order":54,"elementor-controls/popover-toggle":55,"elementor-controls/repeater":57,"elementor-controls/repeater-row":56,"elementor-controls/section":58,"elementor-controls/select2":59,"elementor-controls/slider":60,"elementor-controls/structure":61,"elementor-controls/switcher":62,"elementor-controls/tab":63,"elementor-controls/wp_widget":64,"elementor-controls/wysiwyg":65,"elementor-dynamic-tags/manager":2,"elementor-editor-utils/ajax":108,"elementor-editor-utils/conditions":109,"elementor-editor-utils/debug":111,"elementor-editor-utils/heartbeat":112,"elementor-editor-utils/helpers":113,"elementor-editor-utils/images-manager":114,"elementor-editor-utils/notifications":117,"elementor-editor-utils/presets-factory":118,"elementor-editor-utils/schemes":119,"elementor-editor/components/saver/manager":8,"elementor-editor/components/settings/settings":13,"elementor-elements/collections/elements":67,"elementor-elements/models/base-settings":68,"elementor-elements/models/element":70,"elementor-elements/views/widget":81,"elementor-layouts/panel/panel":107,"elementor-panel/pages/elements/views/elements":93,"elementor-panel/pages/elements/views/global":94,"elementor-panel/pages/menu/menu":96,"elementor-templates/manager":16,"elementor-templates/views/base-modal-layout":18,"elementor-templates/views/parts/header-parts/logo":22,"elementor-utils/hooks":128,"elementor-utils/hot-keys":129,"elementor-utils/module":131,"elementor-views/controls-stack":126,"elementor-views/preview":127,"modules/history/assets/js/module":140}],67:[function(e,t,n){var i=e("elementor-elements/models/element"),o=Backbone.Collection.extend({add:function(e,t,n){if(!(t&&t.silent||n))throw"Call Error: Adding model to element collection is allowed only by the dedicated addChildModel() method.";return Backbone.Collection.prototype.add.call(this,e,t)},model:function(e,t){var n=Backbone.Model;return e.elType&&(n=elementor.hooks.applyFilters("element/model",i,e)),new n(e,t)},clone:function(){var e=Backbone.Collection.prototype.clone.apply(this,arguments),t=new o;return e.forEach(function(e){t.add(e.clone(),null,!0)}),t}});o.prototype.sync=o.prototype.fetch=o.prototype.save=_.noop,t.exports=o},{"elementor-elements/models/element":70}],68:[function(e,t,n){var i;i=Backbone.Model.extend({options:{},initialize:function(e,t){var r=this;if(r.options=t,r.controls=elementor.mergeControlsSettings(t.controls),r.validators={},r.controls){var s=e||{},l={};_.each(r.controls,function(e){if(!(-1!==e.features.indexOf("ui"))){var t=e.name,n=jQuery.isPlainObject(e.default_value);l[t]=n?_.extend({},e.default_value,e.default||{}):e.default||e.default_value;var i=e.dynamic&&e.dynamic.active,o=i&&s.__dynamic__&&s.__dynamic__[t];i&&!o&&e.dynamic.default&&(s.__dynamic__||(s.__dynamic__={}),s.__dynamic__[t]=e.dynamic.default,o=!0),void 0===s[t]||!n||_.isObject(s[t])||o||(elementor.debug.addCustomError(new TypeError("An invalid argument supplied as multiple control value"),"InvalidElementData","Element `"+(r.get("widgetType")||r.get("elType"))+"` got <"+s[t]+"> as `"+t+"` value. Expected array or object."),delete s[t]),void 0===s[t]&&(s[t]=l[t])}}),r.defaults=l,r.handleRepeaterData(s),r.set(s)}},handleRepeaterData:function(e){_.each(this.controls,function(n){n.is_repeater&&(e[n.name]instanceof Backbone.Collection||(e[n.name]=new Backbone.Collection(e[n.name],{model:function(e,t){return(t=t||{}).controls=n.fields,e._id||(e._id=elementor.helpers.getUniqueID()),new i(e,t)}})))})},getFontControls:function(){return _.filter(this.getActiveControls(),function(e){return"font"===e.type})},getStyleControls:function(i,e){var o=this;i=elementor.helpers.cloneObject(o.getActiveControls(i,e));var r=[];return jQuery.each(i,function(){var t=this,e=elementor.config.controls[t.type];if((t=jQuery.extend({},e,t)).fields){var n=[];o.attributes[t.name].each(function(e){n.push(o.getStyleControls(t.fields,e.attributes))}),t.styleFields=n}(t.fields||t.dynamic&&t.dynamic.active||o.isStyleControl(t.name,i))&&r.push(t)}),r},isStyleControl:function(t,e){e=e||this.controls;var n=_.find(e,function(e){return t===e.name});return n&&!_.isEmpty(n.selectors)},getClassControls:function(e){return e=e||this.controls,_.filter(e,function(e){return!_.isUndefined(e.prefix_class)})},isClassControl:function(t){var e=_.find(this.controls,function(e){return t===e.name});return e&&!_.isUndefined(e.prefix_class)},getControl:function(t){return _.find(this.controls,function(e){return t===e.name})},getActiveControls:function(e,n){var i={};return e||(e=this.controls),n||(n=this.attributes),_.each(e,function(e,t){elementor.helpers.isActiveControl(e,n)&&(i[t]=e)}),i},clone:function(){return new i(elementor.helpers.cloneObject(this.attributes),elementor.helpers.cloneObject(this.options))},setExternalChange:function(e,t){this.set(e,t),this.trigger("change:external",e,t).trigger("change:external:"+e,t)},parseDynamicSettings:function(o,r,e){var s=this;return o=elementor.helpers.cloneObject(o||s.attributes),r=r||{},e=e||this.controls,jQuery.each(e,function(){var n,i=this;if("repeater"!==i.type){if(n=o.__dynamic__&&o.__dynamic__[i.name]){var e=i.dynamic;if(void 0===e&&(e=elementor.config.controls[i.type].dynamic),e&&e.active){var t;try{t=elementor.dynamicTags.parseTagsText(n,e,elementor.dynamicTags.getTagDataContent)}catch(e){if(elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR!==e.message)throw e;t="",r.onServerRequestStart&&r.onServerRequestStart(),elementor.dynamicTags.refreshCacheFromServer(function(){r.onServerRequestEnd&&r.onServerRequestEnd()})}e.property?o[i.name][e.property]=t:o[i.name]=t}}}else(n=o[i.name]).forEach(function(e,t){n[t]=s.parseDynamicSettings(e,r,i.fields)})}),o},toJSON:function(e){var r=Backbone.Model.prototype.toJSON.call(this);if(e=e||{},delete r.widgetType,delete r.elType,delete r.isInner,_.each(r,function(e,t){e&&e.toJSON&&(r[t]=e.toJSON())}),e.removeDefault){var t=this.controls;_.each(r,function(e,n){var i=t[n];if(i){if(i.save_default||("text"===i.type||"textarea"===i.type)&&r[n])return;if(r[n]&&"object"==typeof r[n]){if(Object.keys(r[n]).length!==Object.keys(i.default).length)return;var o=!0;_.each(r[n],function(e,t){if(r[n][t]!==i.default[t])return o=!1}),o&&delete r[n]}else r[n]===i.default&&delete r[n]}})}return elementor.helpers.cloneObject(r)}}),t.exports=i},{}],69:[function(e,t,n){var i;i=e("elementor-elements/models/base-settings").extend({defaults:{_column_size:100}}),t.exports=i},{"elementor-elements/models/base-settings":68}],70:[function(o,e,t){var n,i=o("elementor-elements/models/base-settings"),r=o("elementor-elements/models/column-settings");(n=Backbone.Model.extend({defaults:{id:"",elType:"",isInner:!1,settings:{},defaultEditSettings:{}},remoteRender:!1,_htmlCache:null,_jqueryXhr:null,renderOnLeave:!1,initialize:function(e){var t=this.get("elType"),n=this.get("elements");if(void 0!==n){var i=o("elementor-elements/collections/elements");this.set("elements",new i(n))}"widget"===t&&(this.remoteRender=!0,this.setHtmlCache(e.htmlCache||"")),delete e.htmlCache,this.renderRemoteServer=_.throttle(this.renderRemoteServer,1e3),this.initSettings(),this.initEditSettings(),this.on({destroy:this.onDestroy,"editor:close":this.onCloseEditor})},initSettings:function(){var e=this.get("elType"),t=this.get("settings"),n={column:r}[e]||i;jQuery.isEmptyObject(t)&&(t=elementor.helpers.cloneObject(t)),"widget"===e&&(t.widgetType=this.get("widgetType")),t.elType=e,t.isInner=this.get("isInner"),t=new n(t,{controls:elementor.getElementControls(this)}),this.set("settings",t),elementorFrontend.config.elements.data[this.cid]=t},initEditSettings:function(){var e=new Backbone.Model(this.get("defaultEditSettings"));this.set("editSettings",e),elementorFrontend.config.elements.editSettings[this.cid]=e},onDestroy:function(){var e=this.get("settings"),t=this.get("elements");void 0!==t&&_.each(_.clone(t.models),function(e){e.destroy()}),e instanceof i&&e.destroy()},onCloseEditor:function(){this.renderOnLeave&&this.renderRemoteServer()},setSetting:function(e,t){var n=e.split("."),i=3===n.length,o=this.get("settings");e=n[0],i&&(o=o.get(e).models[n[1]],e=n[2]),o.setExternalChange(e,t)},getSetting:function(e){var t=e.split("."),n=3===t.length,i=this.get("settings");e=t[0];var o=i.get(e);return void 0===o?"":(n&&(o=o.models[t[1]].get(t[2])),o)},setHtmlCache:function(e){this._htmlCache=e},getHtmlCache:function(){return this._htmlCache},getTitle:function(){var e=elementor.getElementData(this);return e?e.title:"Unknown"},getIcon:function(){var e=elementor.getElementData(this);return e?e.icon:"unknown"},createRemoteRenderRequest:function(){var e=this.toJSON();return elementor.ajax.addRequest("render_widget",{unique_id:this.cid,data:{data:e},success:this.onRemoteGetHtml.bind(this)},!0).jqXhr},renderRemoteServer:function(){this.remoteRender&&(this.renderOnLeave=!1,this.trigger("before:remote:render"),this.isRemoteRequestActive()&&this._jqueryXhr.abort(),this._jqueryXhr=this.createRemoteRenderRequest())},isRemoteRequestActive:function(){return this._jqueryXhr&&4!==this._jqueryXhr.readyState},onRemoteGetHtml:function(e){this.setHtmlCache(e.render),this.trigger("remote:render")},clone:function(){var e=new this.constructor(elementor.helpers.cloneObject(this.attributes));e.set("id",elementor.helpers.getUniqueID()),e.setHtmlCache(this.getHtmlCache());var t=this.get("elements");return _.isEmpty(t)||e.set("elements",t.clone()),e},toJSON:function(n){n=_.extend({copyHtmlCache:!1},n);var i=Backbone.Model.prototype.toJSON.call(this);return _.each(i,function(e,t){e&&e.toJSON&&(i[t]=e.toJSON(n))}),n.copyHtmlCache?i.htmlCache=this.getHtmlCache():delete i.htmlCache,i}})).prototype.sync=n.prototype.fetch=n.prototype.save=_.noop,e.exports=n},{"elementor-elements/collections/elements":67,"elementor-elements/models/base-settings":68,"elementor-elements/models/column-settings":69}],71:[function(i,e,t){var n,s=i("elementor-elements/models/base-settings"),o=i("elementor-editor-utils/controls-css-parser"),r=i("elementor-validator/base"),l=i("elementor-views/base-container");n=l.extend({tagName:"div",controlsCSSParser:null,toggleEditTools:!0,allowRender:!0,renderAttributes:{},className:function(){return"elementor-element elementor-element-edit-mode "+this.getElementUniqueID()},attributes:function(){var e=this.model.get("elType");return"widget"===e&&(e=this.model.get("widgetType")),{"data-id":this.getID(),"data-element_type":e}},ui:function(){return{triggerButton:"> .elementor-element-overlay .elementor-editor-element-trigger",duplicateButton:"> .elementor-element-overlay .elementor-editor-element-duplicate",removeButton:"> .elementor-element-overlay .elementor-editor-element-remove",saveButton:"> .elementor-element-overlay .elementor-editor-element-save",settingsList:"> .elementor-element-overlay .elementor-editor-element-settings",addButton:"> .elementor-element-overlay .elementor-editor-element-add"}},behaviors:function(){return elementor.hooks.applyFilters("elements/base/behaviors",{},this)},getBehavior:function(e){return this._behaviors[Object.keys(this.behaviors()).indexOf(e)]},events:function(){return{"click @ui.removeButton":"onClickRemove","click @ui.saveButton":"onClickSave","click @ui.duplicateButton":"onClickDuplicate","click @ui.triggerButton":"onClickEdit"}},getElementType:function(){return this.model.get("elType")},getIDInt:function(){return parseInt(this.getID(),16)},getChildType:function(){return elementor.helpers.getElementChildType(this.getElementType())},getChildView:function(e){var t,n=e.get("elType");return t="section"===n?i("elementor-elements/views/section"):"column"===n?i("elementor-elements/views/column"):elementor.modules.elements.views.Widget,elementor.hooks.applyFilters("element/view",t,e,this)},templateHelpers:function(){var e=l.prototype.templateHelpers.apply(this,arguments);return jQuery.extend(e,{editModel:this.getEditModel()})},getTemplateType:function(){return"js"},getEditModel:function(){return this.model},initialize:function(){this.collection=this.model.get("elements"),this.collection&&this.listenTo(this.collection,"add remove reset",this.onCollectionChanged,this);var e=this.getEditModel();this.listenTo(e.get("settings"),"change",this.onSettingsChanged,this),this.listenTo(e.get("editSettings"),"change",this.onEditSettingsChanged,this),this.initControlsCSSParser()},edit:function(){elementor.getPanelView().openEditor(this.getEditModel(),this)},addElementFromPanel:function(e){var t=elementor.channels.panelElements.request("element:selected"),n={id:elementor.helpers.getUniqueID(),elType:t.model.get("elType")};if("widget"===n.elType)n.widgetType=t.model.get("widgetType");else{if("section"!==n.elType)return;n.elements=[],n.isInner=!0}var i=t.model.get("custom");i&&_.extend(n,i),elementor.channels.data.trigger("element:before:add",n);var o=this.addChildElement(n,e);"section"===o.getElementType()&&o.isInner()&&o.addEmptyColumn(),elementor.channels.data.trigger("element:after:add",n)},addControlValidator:function(e,t){t=t.bind(this);var n=new r({customValidationMethod:t}),i=this.getEditModel().get("settings").validators;i[e]||(i[e]=[]),i[e].push(n)},addRenderAttribute:function(t,e,n,i){var o=this;return"object"==typeof t?(jQuery.each(t,function(e){o.addRenderAttribute(e,this,null,i)}),o):"object"==typeof e?(jQuery.each(e,function(e){o.addRenderAttribute(t,e,this,i)}),o):(o.renderAttributes[t]||(o.renderAttributes[t]={}),o.renderAttributes[t][e]||(o.renderAttributes[t][e]=[]),Array.isArray(n)||(n=[n]),void(o.renderAttributes[t][e]=i?n:o.renderAttributes[t][e].concat(n)))},getRenderAttributeString:function(e){if(!this.renderAttributes[e])return"";var t=this.renderAttributes[e],n=[];return jQuery.each(t,function(e){n.push(e+'="'+_.escape(this.join(" "))+'"')}),n.join(" ")},isCollectionFilled:function(){return!1},isInner:function(){return!!this.model.get("isInner")},initControlsCSSParser:function(){this.controlsCSSParser=new o({id:this.model.cid,settingsModel:this.getEditModel().get("settings"),dynamicParsing:this.getDynamicParsingSettings()})},enqueueFonts:function(){var n=this.getEditModel(),e=n.get("settings");_.each(e.getFontControls(),function(e){var t=n.getSetting(e.name);_.isEmpty(t)||elementor.helpers.enqueueFont(t)})},renderStyles:function(e){e||(e=this.getEditModel().get("settings")),this.controlsCSSParser.stylesheet.empty(),this.controlsCSSParser.addStyleRules(e.getStyleControls(),e.attributes,this.getEditModel().get("settings").controls,[/{{ID}}/g,/{{WRAPPER}}/g],[this.getID(),"#elementor ."+this.getElementUniqueID()]),this.controlsCSSParser.addStyleToDocument();var t=elementor.hooks.applyFilters("editor/style/styleText","",this);t&&this.controlsCSSParser.elements.$stylesheetElement.append(t)},renderCustomClasses:function(){var i=this,o=i.getEditModel().get("settings"),e=o.getClassControls();_.each(e,function(e){var t=o.previous(e.name);e.classes_dictionary&&void 0!==e.classes_dictionary[t]&&(t=e.classes_dictionary[t]),i.$el.removeClass(e.prefix_class+t)}),_.each(e,function(e){var t=o.attributes[e.name],n=t;e.classes_dictionary&&void 0!==e.classes_dictionary[t]&&(n=e.classes_dictionary[t]),elementor.helpers.isActiveControl(e,o.attributes)&&!_.isEmpty(n)&&i.$el.addClass(e.prefix_class+n).addClass(_.result(i,"className"))})},renderCustomElementID:function(){var e=this.getEditModel().get("settings").get("_element_id");this.$el.attr("id",e)},renderUI:function(){this.renderStyles(),this.renderCustomClasses(),this.renderCustomElementID(),this.enqueueFonts()},runReadyTrigger:function(){var e=this;_.defer(function(){elementorFrontend.elementsHandler.runReadyTrigger(e.$el)})},getID:function(){return this.model.get("id")},getElementUniqueID:function(){return"elementor-element-"+this.getID()},duplicate:function(){this.trigger("request:duplicate")},renderOnChange:function(i){if(this.allowRender){if(i instanceof s){var e=i.hasChanged(),o=!e,r=!e;if(_.each(i.changedAttributes(),function(e,t){var n=i.getControl(t);"_column_size"!==t?n?("none"!==n.render_type&&(r=!0),-1===["none","ui"].indexOf(n.render_type)&&("template"!==n.render_type&&(i.isStyleControl(t)||i.isClassControl(t)||"_element_id"===t)||(o=!0))):o=r=!0:r=!0}),!r)return;if(!o)return void this.renderUI()}var t=this.getTemplateType(),n=this.getEditModel();"js"===t?(this.getEditModel().setHtmlCache(),this.render(),n.renderOnLeave=!0):n.renderRemoteServer()}},getDynamicParsingSettings:function(){var e=this;return{onServerRequestStart:function(){e.$el.addClass("elementor-loading")},onServerRequestEnd:function(){e.render(),e.$el.removeClass("elementor-loading")}}},serializeData:function(){var e=l.prototype.serializeData.apply(this,arguments);return e.settings=this.getEditModel().get("settings").parseDynamicSettings(e.settings,this.getDynamicParsingSettings()),e},onBeforeRender:function(){this.renderAttributes={}},onRender:function(){var e=this;if(e.renderUI(),e.runReadyTrigger(),e.toggleEditTools){var t=e.ui.triggerButton;e.ui.settingsList.hoverIntent(function(){t.addClass("elementor-active")},function(){t.removeClass("elementor-active")},{timeout:500})}},onCollectionChanged:function(){elementor.saver.setFlagEditorChange(!0)},onEditSettingsChanged:function(e){elementor.channels.editor.trigger("change:editSettings",e,this)},onSettingsChanged:function(e){elementor.saver.setFlagEditorChange(!0),this.renderOnChange(e)},onClickEdit:function(e){jQuery(e.target).closest(".elementor-clickable").length||(e.preventDefault(),e.stopPropagation()),"edit"===elementor.channels.dataEditMode.request("activeMode")&&this.edit()},onClickDuplicate:function(e){e.preventDefault(),e.stopPropagation(),this.duplicate()},removeElement:function(){elementor.channels.data.trigger("element:before:remove",this.model);var e=this._parent;e.isManualRemoving=!0,this.model.destroy(),e.isManualRemoving=!1,elementor.channels.data.trigger("element:after:remove",this.model)},onClickRemove:function(e){e.preventDefault(),e.stopPropagation(),this.removeElement()},onClickSave:function(e){e.preventDefault();var t=this.model;elementor.templates.startModal({onReady:function(){elementor.templates.getLayout().showSaveTemplateView(t)}})},onDestroy:function(){this.controlsCSSParser.removeStyleFromDocument()}}),e.exports=n},{"elementor-editor-utils/controls-css-parser":110,"elementor-elements/models/base-settings":68,"elementor-elements/views/column":79,"elementor-elements/views/section":80,"elementor-validator/base":35,"elementor-views/base-container":124}],72:[function(e,t,n){var i;i=Marionette.Behavior.extend({onChildviewClickNew:function(e){var t=e.$el.index()+1;this.addChild({at:t})},onRequestNew:function(){this.addChild()},addChild:function(e){if(!this.view.isCollectionFilled()){e=e||{};var t={id:elementor.helpers.getUniqueID(),elType:this.view.getChildType()[0],settings:{},elements:[]};elementor.channels.data.trigger("element:before:add",t),this.view.addChildModel(t,e),elementor.channels.data.trigger("element:after:add",t)}}}),t.exports=i},{}],73:[function(e,t,n){var i;i=Marionette.Behavior.extend({onChildviewRequestDuplicate:function(e){if(!this.view.isCollectionFilled()){var t=this.view.collection.indexOf(e.model),n=e.model.clone();elementor.channels.data.trigger("element:before:duplicate",n),this.view.addChildModel(n,{at:t+1}),elementor.channels.data.trigger("element:after:duplicate",n)}}}),t.exports=i},{}],74:[function(e,t,n){var i;i=Marionette.Behavior.extend({editing:!1,$currentEditingArea:null,ui:function(){return{inlineEditingArea:"."+this.getOption("inlineEditingClass")}},events:function(){return{"click @ui.inlineEditingArea":"onInlineEditingClick","input @ui.inlineEditingArea":"onInlineEditingUpdate"}},getEditingSettingKey:function(){return this.$currentEditingArea.data().elementorSettingKey},startEditing:function(e){var t=e.data().elementorSettingKey,n=t,i=t.split("."),o=3===i.length,r=this.view.getEditModel().get("settings");o&&(r=r.get(i[0]).models[i[1]],n=i[2]);var s=r.get("__dynamic__"),l=s&&s[n];if(!(this.editing||l||"edit"!==elementor.channels.dataEditMode.request("activeMode")||this.view.model.isRemoteRequestActive())){this.$currentEditingArea=e;var a=this.$currentEditingArea.data().elementorInlineEditingToolbar,c="advanced"===a?"advanced":"basic",d=this.view.getEditModel(),m=elementor.config.inlineEditing,u=d.getSetting(this.getEditingSettingKey());"advanced"===c&&(u=wp.editor.autop(u)),this.$currentEditingArea.html(u);var h=elementorFrontend.getElements("window").ElementorInlineEditor;this.editing=!0,this.view.allowRender=!1,this.view.model.setHtmlCache(""),this.editor=new h({linksInNewWindow:!0,stay:!1,editor:this.$currentEditingArea[0],mode:c,list:"none"===a?[]:m.toolbar[a||"basic"],cleanAttrs:["id","class","name"],placeholder:elementor.translate("type_here")+"...",toolbarIconsPrefix:"eicon-editor-",toolbarIconsDictionary:{externalLink:{className:"eicon-editor-external-link"},list:{className:"eicon-editor-list-ul"},insertOrderedList:{className:"eicon-editor-list-ol"},insertUnorderedList:{className:"eicon-editor-list-ul"},createlink:{className:"eicon-editor-link"},unlink:{className:"eicon-editor-unlink"},blockquote:{className:"eicon-editor-quote"},p:{className:"eicon-editor-paragraph"},pre:{className:"eicon-editor-code"}}}),jQuery(this.editor._menu).children().on("mousedown",function(e){e.preventDefault()}),this.$currentEditingArea.on("blur",this.onInlineEditingBlur.bind(this))}},stopEditing:function(){this.editing=!1,this.editor.destroy(),this.view.allowRender=!0,"advanced"===this.$currentEditingArea.data().elementorInlineEditingToolbar&&this.view.getEditModel().renderRemoteServer()},onInlineEditingClick:function(e){var t=this,n=jQuery(e.currentTarget);setTimeout(function(){t.startEditing(n)},30)},onInlineEditingBlur:function(){var t=this;setTimeout(function(){var e=elementorFrontend.getElements("window").getSelection();jQuery(e.focusNode).closest(".pen-input-wrapper").length||t.stopEditing()},20)},onInlineEditingUpdate:function(){this.view.getEditModel().setSetting(this.getEditingSettingKey(),this.editor.getContent())}}),t.exports=i},{}],75:[function(e,t,n){var i;i=Marionette.Behavior.extend({onRenderCollection:function(){this.handleInnerTabs(this.view)},handleInnerTabs:function(r){var e=r.children.filter(function(e){return"tabs"===e.model.get("type")});_.each(e,function(o){o.$el.find(".elementor-control-content").remove();var t=o.model.get("name"),e=r.children.filter(function(e){return"tab"===e.model.get("type")&&e.model.get("tabs_wrapper")===t});_.each(e,function(e,t){o._addChildView(e);var n=e.model.get("name"),i=r.children.filter(function(e){return n===e.model.get("inner_tab")});0===t?e.$el.addClass("elementor-tab-active"):_.each(i,function(e){e.$el.addClass("elementor-tab-close")})})})},onChildviewControlTabClicked:function(t){var n="elementor-tab-close",i="elementor-tab-active",o=t.model.get("name"),e=this.view.children.filter(function(e){return"tab"!==e.model.get("type")&&t.model.get("tabs_wrapper")===e.model.get("tabs_wrapper")}),r=this.view.children.filter(function(e){return"tab"===e.model.get("type")&&t.model.get("tabs_wrapper")===e.model.get("tabs_wrapper")});_.each(r,function(e){e.$el.removeClass(i)}),t.$el.addClass(i),_.each(e,function(e){e.model.get("inner_tab")===o?e.$el.removeClass(n):e.$el.addClass(n)}),elementor.channels.data.trigger("scrollbar:update")}}),t.exports=i},{}],76:[function(e,t,n){var i;i=Marionette.Behavior.extend({defaults:{handles:elementor.config.is_rtl?"w":"e"},events:{resizestart:"onResizeStart",resizestop:"onResizeStop",resize:"onResize"},initialize:function(){Marionette.Behavior.prototype.initialize.apply(this,arguments),this.listenTo(elementor.channels.dataEditMode,"switch",this.onEditModeSwitched)},active:function(){if(elementor.userCan("design")){this.deactivate();var e=_.clone(this.options);delete e.behaviorClass;var t=this.getChildViewContainer(),n=_.extend({},e);t.resizable(n)}},deactivate:function(){this.getChildViewContainer().resizable("instance")&&this.getChildViewContainer().resizable("destroy")},onEditModeSwitched:function(e){"edit"===e?this.active():this.deactivate()},onRender:function(){var e=this;_.defer(function(){e.onEditModeSwitched(elementor.channels.dataEditMode.request("activeMode"))})},onDestroy:function(){this.deactivate()},onResizeStart:function(e){e.stopPropagation(),this.view.$el.data("originalWidth",this.view.el.getBoundingClientRect().width),this.view.triggerMethod("request:resize:start",e)},onResizeStop:function(e){e.stopPropagation(),this.view.triggerMethod("request:resize:stop")},onResize:function(e,t){e.stopPropagation(),this.view.triggerMethod("request:resize",t,e)},getChildViewContainer:function(){return this.$el}}),t.exports=i},{}],77:[function(e,t,n){var i;i=Marionette.Behavior.extend({defaults:{elChildType:"widget"},events:{sortstart:"onSortStart",sortreceive:"onSortReceive",sortupdate:"onSortUpdate",sortover:"onSortOver",sortout:"onSortOut"},initialize:function(){this.listenTo(elementor.channels.dataEditMode,"switch",this.onEditModeSwitched).listenTo(elementor.channels.deviceMode,"change",this.onDeviceModeChange)},onEditModeSwitched:function(e){"edit"===e?this.activate():this.deactivate()},onDeviceModeChange:function(){"desktop"===elementor.channels.deviceMode.request("currentMode")?this.activate():this.deactivate()},onRender:function(){var e=this;_.defer(function(){e.onEditModeSwitched(elementor.channels.dataEditMode.request("activeMode"))})},onDestroy:function(){this.deactivate()},activate:function(){if(elementor.userCan("design")&&!this.getChildViewContainer().sortable("instance")){var e=this.getChildViewContainer(),t={connectWith:e.selector,placeholder:"elementor-sortable-placeholder elementor-"+this.getOption("elChildType")+"-placeholder",cursorAt:{top:20,left:25},helper:this._getSortableHelper.bind(this),cancel:"input, textarea, button, select, option, .elementor-inline-editing, .elementor-tab-title"},n=_.extend(t,this.view.getSortableOptions());e.sortable(n)}},_getSortableHelper:function(e,t){var n=this.view.collection.get({cid:t.data("model-cid")});return'<div style="height: 84px; width: 125px;" class="elementor-sortable-helper elementor-sortable-helper-'+n.get("elType")+'"><div class="icon"><i class="'+n.getIcon()+'"></i></div><div class="elementor-element-title-wrapper"><div class="title">'+n.getTitle()+"</div></div></div>"},getChildViewContainer:function(){return this.view.getChildViewContainer(this.view)},deactivate:function(){this.getChildViewContainer().sortable("instance")&&this.getChildViewContainer().sortable("destroy")},onSortStart:function(e,t){e.stopPropagation();var n=this.view.collection.get({cid:t.item.data("model-cid")});if("column"===this.options.elChildType){var i=t.item.data("sortableItem").items,o=0;i.forEach(function(e){if(e.item[0]===t.item[0])return o=e.height,!1}),t.placeholder.height(o)}elementor.channels.data.reply("dragging:model",n).reply("dragging:parent:view",this.view).trigger("drag:start",n).trigger(n.get("elType")+":drag:start")},onSortOver:function(e){e.stopPropagation();var t=elementor.channels.data.request("dragging:model");jQuery(e.target).addClass("elementor-draggable-over").attr({"data-dragged-element":t.get("elType"),"data-dragged-is-inner":t.get("isInner")}),this.$el.addClass("elementor-dragging-on-child")},onSortOut:function(e){e.stopPropagation(),jQuery(e.target).removeClass("elementor-draggable-over").removeAttr("data-dragged-element data-dragged-is-inner"),this.$el.removeClass("elementor-dragging-on-child")},onSortReceive:function(e,t){if(e.stopPropagation(),this.view.isCollectionFilled())jQuery(t.sender).sortable("cancel");else{var n=elementor.channels.data.request("dragging:model"),i="section"===n.get("elType")&&n.get("isInner"),o="column"===this.view.getElementType()&&this.view.isInner();if(i&&o)jQuery(t.sender).sortable("cancel");else{elementor.channels.data.trigger("drag:before:update",n);var r=t.item.parent().children().index(t.item),s=n.toJSON({copyHtmlCache:!0}),l=elementor.channels.data.request("dragging:parent:view");l.isManualRemoving=!0,n.destroy(),l.isManualRemoving=!1,this.view.addChildElement(s,{at:r}),elementor.channels.data.trigger("drag:after:update",n)}}},onSortUpdate:function(e,t){if(e.stopPropagation(),this.getChildViewContainer()[0]===t.item.parent()[0]){var n=elementor.channels.data.request("dragging:model"),i=t.item,o=this.view.collection,r=i.parent().children().index(i);elementor.channels.data.trigger("drag:before:update",n),this.view.children.findByModelCid(n.cid)._isRendering=!0,o.remove(n),this.view.addChildElement(n,{at:r}),elementor.saver.setFlagEditorChange(!0),elementor.channels.data.trigger("drag:after:update",n)}},onAddChild:function(e){e.$el.attr("data-model-cid",e.model.cid)}}),t.exports=i},{}],78:[function(e,t,n){var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-empty-preview",className:"elementor-empty-view",events:{click:"onClickAdd"},onClickAdd:function(){elementor.getPanelView().setPage("elements")}}),t.exports=i},{}],79:[function(t,e,n){var i,o=t("elementor-elements/views/base"),r=t("elementor-elements/views/column-empty");i=o.extend({template:Marionette.TemplateCache.get("#tmpl-elementor-element-column-content"),emptyView:r,childViewContainer:"> .elementor-column-wrap > .elementor-widget-wrap",behaviors:function(){var e=o.prototype.behaviors.apply(this,arguments);return _.extend(e,{Sortable:{behaviorClass:t("elementor-behaviors/sortable"),elChildType:"widget"},Resizable:{behaviorClass:t("elementor-behaviors/resizable")},HandleDuplicate:{behaviorClass:t("elementor-behaviors/handle-duplicate")},HandleAddMode:{behaviorClass:t("elementor-behaviors/duplicate")}}),elementor.hooks.applyFilters("elements/column/behaviors",e,this)},className:function(){return o.prototype.className.apply(this,arguments)+" elementor-column elementor-"+(this.isInner()?"inner":"top")+"-column"},tagName:function(){return this.model.getSetting("html_tag")||"div"},ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.columnInner="> .elementor-column-wrap",e.percentsTooltip="> .elementor-element-overlay .elementor-column-percents-tooltip",e},triggers:{"click @ui.addButton":"click:new"},initialize:function(){o.prototype.initialize.apply(this,arguments),this.addControlValidator("_inline_size",this.onEditorInlineSizeInputChange)},isDroppingAllowed:function(){var e=elementor.channels.panelElements.request("element:selected");if(!e)return!1;var t=e.model.get("elType");return"section"===t?!this.isInner():"widget"===t},getPercentsForDisplay:function(){return(+this.model.getSetting("_inline_size")||this.getPercentSize()).toFixed(1)+"%"},changeSizeUI:function(){var e=this,t=e.model.getSetting("_column_size");e.$el.attr("data-col",t),_.defer(function(){e.ui.percentsTooltip&&e.ui.percentsTooltip.text(e.getPercentsForDisplay())})},getPercentSize:function(e){return e||(e=this.el.getBoundingClientRect().width),+(e/this.$el.parent().width()*100).toFixed(3)},getSortableOptions:function(){return{connectWith:".elementor-widget-wrap",items:"> .elementor-element"}},changeChildContainerClasses:function(){var e="elementor-element-empty",t="elementor-element-populated";this.collection.isEmpty()?this.ui.columnInner.removeClass(t).addClass(e):this.ui.columnInner.removeClass(e).addClass(t)},onCollectionChanged:function(){o.prototype.onCollectionChanged.apply(this,arguments),this.changeChildContainerClasses()},onRender:function(){var i=this;o.prototype.onRender.apply(i,arguments),i.changeChildContainerClasses(),i.changeSizeUI(),i.$el.html5Droppable({items:" > .elementor-column-wrap > .elementor-widget-wrap > .elementor-element, >.elementor-column-wrap > .elementor-widget-wrap > .elementor-empty-view > .elementor-first-add",axis:["vertical"],groups:["elementor-element"],isDroppingAllowed:i.isDroppingAllowed.bind(i),currentElementClass:"elementor-html5dnd-current-element",placeholderClass:"elementor-sortable-placeholder elementor-widget-placeholder",hasDraggingOnChildClass:"elementor-dragging-on-child",onDropping:function(e,t){t.stopPropagation();var n=jQuery(this).index();"bottom"===e&&n++,i.addElementFromPanel({at:n})}})},onSettingsChanged:function(e){o.prototype.onSettingsChanged.apply(this,arguments);var t=e.changedAttributes();("_column_size"in t||"_inline_size"in t)&&this.changeSizeUI()},onEditorInlineSizeInputChange:function(e,t){var n=[],i=this.model.getSetting("_column_size");if(100===i)return n.push("Could not resize one column"),n;t||(t=i);try{this._parent.resizeChild(this,+t,+e)}catch(e){e.message===this._parent.errors.columnWidthTooLarge&&n.push(e.message)}return n}}),e.exports=i},{"elementor-behaviors/duplicate":72,"elementor-behaviors/handle-duplicate":73,"elementor-behaviors/resizable":76,"elementor-behaviors/sortable":77,"elementor-elements/views/base":71,"elementor-elements/views/column-empty":78}],80:[function(t,e,n){var i,o=t("elementor-elements/views/base"),r=t("elementor-views/add-section/inline");i=o.extend({template:Marionette.TemplateCache.get("#tmpl-elementor-element-section-content"),addSectionView:null,toggleEditTools:!1,className:function(){return o.prototype.className.apply(this,arguments)+" elementor-section elementor-"+(this.isInner()?"inner":"top")+"-section"},tagName:function(){return this.model.getSetting("html_tag")||"section"},childViewContainer:"> .elementor-container > .elementor-row",behaviors:function(){var e=o.prototype.behaviors.apply(this,arguments);return _.extend(e,{Sortable:{behaviorClass:t("elementor-behaviors/sortable"),elChildType:"column"},HandleDuplicate:{behaviorClass:t("elementor-behaviors/handle-duplicate")},HandleAddMode:{behaviorClass:t("elementor-behaviors/duplicate")}}),elementor.hooks.applyFilters("elements/section/behaviors",e,this)},errors:{columnWidthTooLarge:"New column width is too large",columnWidthTooSmall:"New column width is too small"},events:function(){var e=o.prototype.events.apply(this,arguments);return e["click @ui.addButton"]="onClickAdd",e},initialize:function(){o.prototype.initialize.apply(this,arguments),this.listenTo(this.collection,"add remove reset",this._checkIsFull),this._checkIsEmpty()},addEmptyColumn:function(){this.addChildModel({id:elementor.helpers.getUniqueID(),elType:"column",settings:{},elements:[]})},addChildModel:function(e,t){var n=e instanceof Backbone.Model,i=this.isInner();return n?e.set("isInner",i):e.isInner=i,o.prototype.addChildModel.apply(this,arguments)},getSortableOptions:function(){return{connectWith:(this.isInner()?".elementor-inner-section":".elementor-top-section")+" > .elementor-container > .elementor-row",handle:"> .elementor-element-overlay .elementor-editor-column-settings .elementor-editor-element-trigger",items:"> .elementor-column",forcePlaceholderSize:!0,tolerance:"pointer"}},onSettingsChanged:function(e){o.prototype.onSettingsChanged.apply(this,arguments),e.changed.structure&&this.redefineLayout()},getColumnPercentSize:function(e,t){return+(t/e.parent().width()*100).toFixed(3)},getDefaultStructure:function(){return this.collection.length+"0"},getStructure:function(){return this.model.getSetting("structure")},setStructure:function(e){if(+elementor.presetsFactory.getParsedStructure(e).columnsCount!==this.collection.length)throw new TypeError("The provided structure doesn't match the columns count.");this.model.setSetting("structure",e)},redefineLayout:function(){var n=elementor.presetsFactory.getPresetByStructure(this.getStructure());this.collection.each(function(e,t){e.setSetting("_column_size",n.preset[t]),e.setSetting("_inline_size",null)})},resetLayout:function(){this.setStructure(this.getDefaultStructure())},resetColumnsCustomSize:function(){this.collection.each(function(e){e.setSetting("_inline_size",null)})},isCollectionFilled:function(){return 10<=this.collection.length},_checkIsFull:function(){this.$el.toggleClass("elementor-section-filled",this.isCollectionFilled())},_checkIsEmpty:function(){this.collection.length||this.model.get("dontFillEmpty")||this.addEmptyColumn()},getColumnAt:function(e){var t=this.collection.at(e);return t?this.children.findByModelCid(t.cid):null},getNextColumn:function(e){return this.getColumnAt(this.collection.indexOf(e.model)+1)},getPreviousColumn:function(e){return this.getColumnAt(this.collection.indexOf(e.model)-1)},showChildrenPercentsTooltip:function(e,t){e.ui.percentsTooltip.show(),e.ui.percentsTooltip.attr("data-side",elementor.config.is_rtl?"right":"left"),t.ui.percentsTooltip.show(),t.ui.percentsTooltip.attr("data-side",elementor.config.is_rtl?"left":"right")},hideChildrenPercentsTooltip:function(e,t){e.ui.percentsTooltip.hide(),t.ui.percentsTooltip.hide()},resizeChild:function(e,t,n){var i=this.getNextColumn(e)||this.getPreviousColumn(e);if(!i)throw new ReferenceError("There is not any next column");var o=i.$el,r=+(t+(+i.model.getSetting("_inline_size")||this.getColumnPercentSize(o,o[0].getBoundingClientRect().width))-n).toFixed(3);if(r<2)throw new RangeError(this.errors.columnWidthTooLarge);if(n<2)throw new RangeError(this.errors.columnWidthTooSmall);return i.model.setSetting("_inline_size",r),!0},destroyAddSectionView:function(){this.addSectionView&&!this.addSectionView.isDestroyed&&this.addSectionView.destroy()},onRender:function(){o.prototype.onRender.apply(this,arguments),this._checkIsFull()},onClickAdd:function(){if(!this.addSectionView||this.addSectionView.isDestroyed){var e=this.model.collection.indexOf(this.model),t=new r({atIndex:e});t.render(),this.$el.before(t.$el),t.$el.hide(),setTimeout(function(){t.$el.slideDown()}),this.addSectionView=t}else this.addSectionView.fadeToDeath()},onAddChild:function(){this.isBuffering||this.model.get("dontFillEmpty")||this.resetLayout()},onRemoveChild:function(){this.isManualRemoving&&(this._checkIsEmpty(),this.resetLayout())},onChildviewRequestResizeStart:function(e){var t=this.getNextColumn(e);if(t){this.showChildrenPercentsTooltip(e,t);var n=e.$el.find("iframe").add(t.$el.find("iframe"));elementor.helpers.disableElementEvents(n)}},onChildviewRequestResizeStop:function(e){var t=this.getNextColumn(e);if(t){this.hideChildrenPercentsTooltip(e,t);var n=e.$el.find("iframe").add(t.$el.find("iframe"));elementor.helpers.enableElementEvents(n)}},onChildviewRequestResize:function(e,t){var n=+e.model.getSetting("_inline_size")||this.getColumnPercentSize(e.$el,e.$el.data("originalWidth"));t.element.css({width:"",left:"initial"});var i=this.getColumnPercentSize(t.element,t.size.width);try{this.resizeChild(e,n,i)}catch(e){return}e.model.setSetting("_inline_size",i)},onDestroy:function(){o.prototype.onDestroy.apply(this,arguments),this.destroyAddSectionView()}}),e.exports=i},{"elementor-behaviors/duplicate":72,"elementor-behaviors/handle-duplicate":73,"elementor-behaviors/sortable":77,"elementor-elements/views/base":71,"elementor-views/add-section/inline":123}],81:[function(t,e,n){var i,o=t("elementor-elements/views/base");i=o.extend({_templateType:null,getTemplate:function(){var e=this.getEditModel();return"remote"!==this.getTemplateType()?Marionette.TemplateCache.get("#tmpl-elementor-"+e.get("elType")+"-"+e.get("widgetType")+"-content"):_.template("")},events:function(){var e=o.prototype.events.apply(this,arguments);return e.click="onClickEdit",e},behaviors:function(){var e=o.prototype.behaviors.apply(this,arguments);return _.extend(e,{InlineEditing:{behaviorClass:t("elementor-behaviors/inline-editing"),inlineEditingClass:"elementor-inline-editing"}}),elementor.hooks.applyFilters("elements/widget/behaviors",e,this)},initialize:function(){o.prototype.initialize.apply(this,arguments);var e=this.getEditModel();e.on({"before:remote:render":this.onModelBeforeRemoteRender.bind(this),"remote:render":this.onModelRemoteRender.bind(this)}),"remote"!==this.getTemplateType()||this.getEditModel().getHtmlCache()||e.renderRemoteServer();var t=this.onRender;this.render=_.throttle(this.render,300),this.onRender=function(){_.defer(t.bind(this))}},render:function(){if(this.model.isRemoteRequestActive())return this.handleEmptyWidget(),void this.$el.addClass("elementor-element");Marionette.CompositeView.prototype.render.apply(this,arguments)},handleEmptyWidget:function(){this.$el.addClass("elementor-widget-empty").append('<i class="elementor-widget-empty-icon '+this.getEditModel().getIcon()+'"></i>')},getTemplateType:function(){if(null===this._templateType){var e=this.getEditModel(),t=jQuery("#tmpl-elementor-"+e.get("elType")+"-"+e.get("widgetType")+"-content");this._templateType=t.length?"js":"remote"}return this._templateType},getHTMLContent:function(e){return this.getEditModel().getHtmlCache()||e},attachElContent:function(e){var t=this,n=t.getHTMLContent(e);return _.defer(function(){elementorFrontend.getElements("window").jQuery(t.el).html(n),t.bindUIElements()}),this},addInlineEditingAttributes:function(e,t){this.addRenderAttribute(e,{class:"elementor-inline-editing","data-elementor-setting-key":e}),t&&this.addRenderAttribute(e,{"data-elementor-inline-editing-toolbar":t})},getRepeaterSettingKey:function(e,t,n){return[t,n,e].join(".")},onModelBeforeRemoteRender:function(){this.$el.addClass("elementor-loading")},onBeforeDestroy:function(){elementor.$previewContents.find("#elementor-style-"+this.model.cid).remove()},onModelRemoteRender:function(){this.isDestroyed||(this.$el.removeClass("elementor-loading"),this.render())},onRender:function(){var e=this,t=o.prototype.className.apply(e,arguments);o.prototype.onRender.apply(e,arguments);var n=e.getEditModel(),i=n.getSetting("_skin")||"default";e.$el.attr("data-element_type",n.get("widgetType")+"."+i).addClass(t+" elementor-widget "+elementor.getElementData(n).html_wrapper_class).removeClass("elementor-widget-empty").children(".elementor-widget-empty-icon").remove(),e.$el.imagesLoaded().always(function(){setTimeout(function(){e.$el.height()<1&&e.handleEmptyWidget()},200)})}}),e.exports=i},{"elementor-behaviors/inline-editing":74,"elementor-elements/views/base":71}],82:[function(e,t,n){var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-mode-switcher-content",id:"elementor-mode-switcher-inner",ui:{previewButton:"#elementor-mode-switcher-preview-input",previewLabel:"#elementor-mode-switcher-preview",previewLabelA11y:"#elementor-mode-switcher-preview .elementor-screen-only"},events:{"change @ui.previewButton":"onPreviewButtonChange"},initialize:function(){this.listenTo(elementor.channels.dataEditMode,"switch",this.onEditModeChanged)},getCurrentMode:function(){return this.ui.previewButton.is(":checked")?"preview":"edit"},setMode:function(e){this.ui.previewButton.prop("checked","preview"===e).trigger("change")},toggleMode:function(){this.setMode(this.ui.previewButton.prop("checked")?"edit":"preview")},onRender:function(){this.onEditModeChanged()},onPreviewButtonChange:function(){elementor.changeEditMode(this.getCurrentMode())},onEditModeChanged:function(){var e=elementor.channels.dataEditMode.request("activeMode"),t=elementor.translate("preview"===e?"back_to_editor":"preview");this.ui.previewLabel.attr("title",t),this.ui.previewLabelA11y.text(t)}}),t.exports=i},{}],83:[function(e,t,n){t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-footer-content",tagName:"nav",id:"elementor-panel-footer-tools",possibleRotateModes:["portrait","landscape"],ui:{buttonSave:"#elementor-panel-saver-button-publish, #elementor-panel-saver-menu-save-draft",menuButtons:".elementor-panel-footer-tool",settings:"#elementor-panel-footer-settings",deviceModeIcon:"#elementor-panel-footer-responsive > i",deviceModeButtons:"#elementor-panel-footer-responsive .elementor-panel-footer-sub-menu-item",saveTemplate:"#elementor-panel-saver-menu-save-template",history:"#elementor-panel-footer-history"},events:{"click @ui.settings":"onClickSettings","click @ui.deviceModeButtons":"onClickResponsiveButtons","click @ui.saveTemplate":"onClickSaveTemplate","click @ui.history":"onClickHistory"},behaviors:function(){var e={saver:{behaviorClass:elementor.modules.components.saver.behaviors.FooterSaver}};return elementor.hooks.applyFilters("panel/footer/behaviors",e,this)},initialize:function(){this.listenTo(elementor.channels.deviceMode,"change",this.onDeviceModeChange)},getDeviceModeButton:function(e){return this.ui.deviceModeButtons.filter('[data-device-mode="'+e+'"]')},onPanelClick:function(e){var t=jQuery(e.target);if(!t.closest(".elementor-panel-footer-sub-menu-wrapper").length){var n=t.closest(".elementor-panel-footer-tool"),i=n.length&&!n.hasClass("elementor-open");this.ui.menuButtons.filter(":not(.elementor-leave-open)").removeClass("elementor-open"),i&&n.addClass("elementor-open")}},onClickSettings:function(){var e=this;"page_settings"!==elementor.getPanelView().getCurrentPageName()&&(elementor.getPanelView().setPage("page_settings"),elementor.getPanelView().getCurrentPageView().once("destroy",function(){e.ui.settings.removeClass("elementor-open")}))},onDeviceModeChange:function(){var e=elementor.channels.deviceMode.request("previousMode"),t=elementor.channels.deviceMode.request("currentMode");this.getDeviceModeButton(e).removeClass("active"),this.getDeviceModeButton(t).addClass("active"),this.ui.deviceModeIcon.removeClass("eicon-device-"+e).addClass("eicon-device-"+t)},onClickResponsiveButtons:function(e){var t=this.$(e.currentTarget).data("device-mode");elementor.changeDeviceMode(t)},onClickSaveTemplate:function(){elementor.templates.startModal({onReady:function(){elementor.templates.getLayout().showSaveTemplateView()}})},onClickHistory:function(){"historyPage"!==elementor.getPanelView().getCurrentPageName()&&elementor.getPanelView().setPage("historyPage")},onRender:function(){var e=this;_.defer(function(){elementor.getPanelView().$el.on("click",e.onPanelClick.bind(e))})}})},{}],84:[function(e,t,n){var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-header",id:"elementor-panel-header",ui:{menuButton:"#elementor-panel-header-menu-button",menuIcon:"#elementor-panel-header-menu-button i",title:"#elementor-panel-header-title",addButton:"#elementor-panel-header-add-button"},events:{"click @ui.addButton":"onClickAdd","click @ui.menuButton":"onClickMenu"},setTitle:function(e){this.ui.title.html(e)},onClickAdd:function(){elementor.getPanelView().setPage("elements")},onClickMenu:function(){var e=elementor.getPanelView(),t="menu"===e.getCurrentPageName()?"elements":"menu";if("menu"===t){var n="eicon-arrow-"+(elementor.config.is_rtl?"right":"left");this.ui.menuIcon.removeClass("eicon-menu-bar").addClass(n)}e.setPage(t)}}),t.exports=i},{}],85:[function(e,t,n){var i,o=e("elementor-views/controls-stack");i=o.extend({template:Marionette.TemplateCache.get("#tmpl-editor-content"),id:"elementor-panel-page-editor",childViewContainer:"#elementor-controls",childViewOptions:function(){return{elementSettingsModel:this.model.get("settings"),elementEditSettings:this.model.get("editSettings")}},openActiveSection:function(){o.prototype.openActiveSection.apply(this,arguments),elementor.channels.editor.trigger("section:activated",this.activeSection,this)},isVisibleSectionControl:function(e){return o.prototype.isVisibleSectionControl.apply(this,arguments)&&elementor.helpers.isActiveControl(e,this.model.get("settings").attributes)},scrollToEditedElement:function(){elementor.helpers.scrollToView(this.getOption("editedElementView"))},getControlView:function(e){return this.children.findByModelCid(this.getControlModel(e).cid)},getControlModel:function(e){return this.collection.findWhere({name:e})},onDestroy:function(){var e=this.getOption("editedElementView");e&&e.$el.removeClass("elementor-element-editable"),this.model.trigger("editor:close"),this.triggerMethod("editor:destroy")},onRender:function(){var e=this.getOption("editedElementView");e&&e.$el.addClass("elementor-element-editable")},onDeviceModeChange:function(){o.prototype.onDeviceModeChange.apply(this,arguments),this.scrollToEditedElement()},onChildviewSettingsChange:function(e){var t=this.getOption("editedElementView"),n=t.model.get("elType");"widget"===n&&(n=t.model.get("widgetType")),elementor.channels.editor.trigger("change",e,t).trigger("change:"+n,e,t).trigger("change:"+n+":"+e.model.get("name"),e,t)}}),t.exports=i},{"elementor-views/controls-stack":126}],86:[function(e,t,n){var i,o=e("../models/element");i=Backbone.Collection.extend({model:o}),t.exports=i},{"../models/element":89}],87:[function(e,t,n){var i,o=e("../models/element");i=Backbone.Collection.extend({model:o}),t.exports=i},{"../models/element":89}],88:[function(e,t,n){var i,o=e("./collections/categories"),r=e("./collections/elements"),s=e("./views/categories"),l=elementor.modules.layouts.panel.pages.elements.views.Elements,a=e("./views/search"),c=e("./views/global");i=Marionette.LayoutView.extend({template:"#tmpl-elementor-panel-elements",regions:{elements:"#elementor-panel-elements-wrapper",search:"#elementor-panel-elements-search-area"},ui:{tabs:".elementor-panel-navigation-tab"},events:{"click @ui.tabs":"onTabClick"},regionViews:{},elementsCollection:null,categoriesCollection:null,initialize:function(){this.listenTo(elementor.channels.panelElements,"element:selected",this.destroy),this.initElementsCollection(),this.initCategoriesCollection(),this.initRegionViews()},initRegionViews:function(){var e={elements:{region:this.elements,view:l,options:{collection:this.elementsCollection}},categories:{region:this.elements,view:s,options:{collection:this.categoriesCollection}},search:{region:this.search,view:a},global:{region:this.elements,view:c}};this.regionViews=elementor.hooks.applyFilters("panel/elements/regionViews",e)},initElementsCollection:function(){var t=new r,e=elementor.config.elements.section;t.add({title:elementor.translate("inner_section"),elType:"section",categories:["basic"],icon:e.icon}),_.each(elementor.config.widgets,function(e){t.add({title:e.title,elType:e.elType,categories:e.categories,keywords:e.keywords,icon:e.icon,widgetType:e.widget_type,custom:e.custom})}),this.elementsCollection=t},initCategoriesCollection:function(){var n={};this.elementsCollection.each(function(t){_.each(t.get("categories"),function(e){n[e]||(n[e]=[]),n[e].push(t)})});var i=new o;_.each(elementor.config.elements_categories,function(e,t){n[t]&&i.add({name:t,title:e.title,icon:e.icon,items:n[t]})}),this.categoriesCollection=i},activateTab:function(e){this.ui.tabs.removeClass("elementor-active").filter('[data-view="'+e+'"]').addClass("elementor-active"),this.showView(e)},showView:function(e){var t=this.regionViews[e],n=t.options||{};t.region.show(new t.view(n))},clearSearchInput:function(){this.getChildView("search").clearInput()},changeFilter:function(e){elementor.channels.panelElements.reply("filter:value",e).trigger("filter:change")},clearFilters:function(){this.changeFilter(null),this.clearSearchInput()},onChildviewChildrenRender:function(){this.updateElementsScrollbar()},onChildviewSearchChangeInput:function(e){this.changeFilter(e.ui.input.val(),"search")},onDestroy:function(){elementor.channels.panelElements.reply("filter:value",null)},onShow:function(){this.showView("categories"),this.showView("search")},onTabClick:function(e){this.activateTab(e.currentTarget.dataset.view)},updateElementsScrollbar:function(){elementor.channels.data.trigger("scrollbar:update")}}),t.exports=i},{"./collections/categories":86,"./collections/elements":87,"./views/categories":90,"./views/global":94,"./views/search":95}],89:[function(e,t,n){var i;i=Backbone.Model.extend({defaults:{title:"",categories:[],keywords:[],icon:"",elType:"widget",widgetType:""}}),t.exports=i},{}],90:[function(e,t,n){var i,o=e("./category");i=Marionette.CompositeView.extend({template:"#tmpl-elementor-panel-categories",childView:o,childViewContainer:"#elementor-panel-categories",id:"elementor-panel-elements-categories",initialize:function(){this.listenTo(elementor.channels.panelElements,"filter:change",this.onPanelElementsFilterChange)},onPanelElementsFilterChange:function(){elementor.channels.panelElements.request("filter:value")&&elementor.getPanelView().getCurrentPageView().showView("elements")}}),t.exports=i},{"./category":91}],91:[function(e,t,n){var i,o=e("../collections/elements");i=Marionette.CompositeView.extend({template:"#tmpl-elementor-panel-elements-category",className:"elementor-panel-category",id:function(){return"elementor-panel-category-"+this.model.get("name")},childView:e("elementor-panel/pages/elements/views/element"),childViewContainer:".panel-elements-category-items",initialize:function(){this.collection=new o(this.model.get("items"))}}),t.exports=i},{"../collections/elements":87,"elementor-panel/pages/elements/views/element":92}],92:[function(e,t,n){var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-element-library-element",className:"elementor-element-wrapper",onRender:function(){var e=this;elementor.userCan("design")&&this.$el.html5Draggable({onDragStart:function(){elementor.channels.panelElements.reply("element:selected",e).trigger("element:drag:start")},onDragEnd:function(){elementor.channels.panelElements.trigger("element:drag:end")},groups:["elementor-element"]})}}),t.exports=i},{}],93:[function(e,t,n){var i;i=Marionette.CollectionView.extend({childView:e("elementor-panel/pages/elements/views/element"),id:"elementor-panel-elements",initialize:function(){this.listenTo(elementor.channels.panelElements,"filter:change",this.onFilterChanged)},filter:function(e){var t=elementor.channels.panelElements.request("filter:value");return!t||(-1!==e.get("title").toLowerCase().indexOf(t.toLowerCase())||_.any(e.get("keywords"),function(e){return-1!==e.toLowerCase().indexOf(t.toLowerCase())}))},onFilterChanged:function(){elementor.channels.panelElements.request("filter:value")||this.onFilterEmpty(),this._renderChildren(),this.triggerMethod("children:render")},onFilterEmpty:function(){elementor.getPanelView().getCurrentPageView().showView("categories")}}),t.exports=i},{"elementor-panel/pages/elements/views/element":92}],94:[function(e,t,n){t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-global",id:"elementor-panel-global",initialize:function(){elementor.getPanelView().getCurrentPageView().search.reset()},onDestroy:function(){var t=elementor.getPanelView();"elements"===t.getCurrentPageName()&&setTimeout(function(){var e=t.getCurrentPageView();e.search.currentView||e.showView("search")})}})},{}],95:[function(e,t,n){var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-element-search",id:"elementor-panel-elements-search-wrapper",ui:{input:"input"},events:{"input @ui.input":"onInputChanged"},clearInput:function(){this.ui.input.val("")},onInputChanged:function(e){27===e.keyCode&&this.clearInput(),this.triggerMethod("search:change:input")},onRender:function(){var e=this.ui.input;setTimeout(function(){e.focus()})}}),t.exports=i},{}],96:[function(e,t,n){var i,o=e("elementor-panel/pages/menu/views/group");i=Marionette.CompositeView.extend({id:"elementor-panel-page-menu",template:"#tmpl-elementor-panel-menu",childView:o,childViewContainer:"#elementor-panel-page-menu-content",initialize:function(){this.collection=i.getGroups()},onDestroy:function(){var e="eicon-arrow-"+(elementor.config.is_rtl?"right":"left");elementor.panel.currentView.getHeaderView().ui.menuIcon.removeClass(e).addClass("eicon-menu-bar")}},{groups:null,initGroups:function(){var e=[];elementor.config.user.is_administrator&&(e=[{name:"style",title:elementor.translate("global_style"),items:[{name:"global-colors",icon:"fa fa-paint-brush",title:elementor.translate("global_colors"),type:"page",pageName:"colorScheme"},{name:"global-fonts",icon:"fa fa-font",title:elementor.translate("global_fonts"),type:"page",pageName:"typographyScheme"},{name:"color-picker",icon:"fa fa-eyedropper",title:elementor.translate("color_picker"),type:"page",pageName:"colorPickerScheme"}]},{name:"settings",title:elementor.translate("settings"),items:[{name:"elementor-settings",icon:"fa fa-external-link",title:elementor.translate("elementor_settings"),type:"link",link:elementor.config.settings_page_link,newTab:!0},{name:"about-elementor",icon:"fa fa-info-circle",title:elementor.translate("about_elementor"),type:"link",link:elementor.config.elementor_site,newTab:!0}]}]),this.groups=new Backbone.Collection(e)},getGroups:function(){return this.groups||this.initGroups(),this.groups},addItem:function(e,t,n){var i=this.getGroups().findWhere({name:t});if(i){var o,r=i.get("items");n&&(o=_.findWhere(r,{name:n})),o?r.splice(r.indexOf(o),0,e):r.push(e)}}}),t.exports=i},{"elementor-panel/pages/menu/views/group":97}],97:[function(e,t,n){var i=e("elementor-panel/pages/menu/views/item");t.exports=Marionette.CompositeView.extend({template:"#tmpl-elementor-panel-menu-group",className:"elementor-panel-menu-group",childView:i,childViewContainer:".elementor-panel-menu-items",initialize:function(){this.collection=new Backbone.Collection(this.model.get("items"))},onChildviewClick:function(e){switch(e.model.get("type")){case"page":var t=e.model.get("pageName"),n=e.model.get("title");elementor.getPanelView().setPage(t,n);break;case"link":var i=e.model.get("link");e.model.get("newTab")?open(i,"_blank"):location.href=e.model.get("link");break;default:var o=e.model.get("callback");_.isFunction(o)&&o.call(e)}}})},{"elementor-panel/pages/menu/views/item":98}],98:[function(e,t,n){t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-menu-item",className:"elementor-panel-menu-item",triggers:{click:"click"}})},{}],99:[function(e,t,n){var i,o={color:e("elementor-panel/pages/schemes/items/color"),typography:e("elementor-panel/pages/schemes/items/typography")};i=Marionette.CompositeView.extend({id:function(){return"elementor-panel-scheme-"+this.getType()},className:function(){return"elementor-panel-scheme elementor-panel-scheme-"+this.getUIType()},childViewContainer:".elementor-panel-scheme-items",getTemplate:function(){return Marionette.TemplateCache.get("#tmpl-elementor-panel-schemes-"+this.getType())},getChildView:function(){return o[this.getUIType()]},getUIType:function(){return this.getType()},ui:function(){return{saveButton:".elementor-panel-scheme-save .elementor-button",discardButton:".elementor-panel-scheme-discard .elementor-button",resetButton:".elementor-panel-scheme-reset .elementor-button"}},events:function(){return{"click @ui.saveButton":"saveScheme","click @ui.discardButton":"discardScheme","click @ui.resetButton":"setDefaultScheme"}},initialize:function(){this.model=new Backbone.Model,this.resetScheme()},getType:function(){},getScheme:function(){return elementor.schemes.getScheme(this.getType())},changeChildrenUIValues:function(e){var i=this;_.each(e,function(e,t){var n=i.collection.findWhere({key:t});i.children.findByModelCid(n.cid).changeUIValue(e)})},discardScheme:function(){elementor.schemes.resetSchemes(this.getType()),this.onSchemeChange(),this.ui.saveButton.prop("disabled",!0),this._renderChildren()},setSchemeValue:function(e,t){elementor.schemes.setSchemeValue(this.getType(),e,t),this.onSchemeChange()},saveScheme:function(){elementor.schemes.saveScheme(this.getType()),this.ui.saveButton.prop("disabled",!0),this.resetScheme(),this._renderChildren()},setDefaultScheme:function(){var e=elementor.config.default_schemes[this.getType()].items;this.changeChildrenUIValues(e)},resetItems:function(){this.model.set("items",this.getScheme().items)},resetCollection:function(){var n=this,e=n.model.get("items");n.collection=new Backbone.Collection,_.each(e,function(e,t){e.type=n.getType(),e.key=t,n.collection.add(e)})},resetScheme:function(){this.resetItems(),this.resetCollection()},onSchemeChange:function(){elementor.schemes.printSchemesStyle()},onChildviewValueChange:function(e,t){this.ui.saveButton.removeProp("disabled"),this.setSchemeValue(e.model.get("key"),t)}}),t.exports=i},{"elementor-panel/pages/schemes/items/color":104,"elementor-panel/pages/schemes/items/typography":105}],100:[function(e,t,n){var i;i=e("elementor-panel/pages/schemes/colors").extend({getType:function(){return"color-picker"},getUIType:function(){return"color"},onSchemeChange:function(){},getViewComparator:function(){return this.orderView},orderView:function(e){return elementor.helpers.getColorPickerPaletteIndex(e.get("key"))}}),t.exports=i},{"elementor-panel/pages/schemes/colors":101}],101:[function(e,t,n){var i,o=e("elementor-panel/pages/schemes/base");i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.systemSchemes=".elementor-panel-scheme-color-system-scheme",e},events:function(){var e=o.prototype.events.apply(this,arguments);return e["click @ui.systemSchemes"]="onSystemSchemeClick",e},getType:function(){return"color"},onSystemSchemeClick:function(e){var t=jQuery(e.currentTarget).data("schemeName"),n=elementor.config.system_schemes[this.getType()][t].items;this.changeChildrenUIValues(n)}}),t.exports=i},{"elementor-panel/pages/schemes/base":99}],102:[function(e,t,n){var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-schemes-disabled",id:"elementor-panel-schemes-disabled",className:"elementor-panel-nerd-box",disabledTitle:"",templateHelpers:function(){return{disabledTitle:this.disabledTitle}}}),t.exports=i},{}],103:[function(e,t,n){var i;i=Marionette.ItemView.extend({getTemplate:function(){return Marionette.TemplateCache.get("#tmpl-elementor-panel-scheme-"+this.getUIType()+"-item")},className:function(){return"elementor-panel-scheme-item"}}),t.exports=i},{}],104:[function(e,t,n){var i;i=e("elementor-panel/pages/schemes/items/base").extend({getUIType:function(){return"color"},ui:{input:".elementor-panel-scheme-color-value"},changeUIValue:function(e){this.ui.input.wpColorPicker("color",e)},onBeforeDestroy:function(){this.ui.input.wpColorPicker("instance")&&this.ui.input.wpColorPicker("close")},onRender:function(){var n=this;elementor.helpers.wpColorPicker(n.ui.input,{change:function(e,t){n.triggerMethod("value:change",t.color.toString())}})}}),t.exports=i},{"elementor-panel/pages/schemes/items/base":103}],105:[function(e,t,n){var i,o=e("elementor-panel/pages/schemes/items/base");i=o.extend({getUIType:function(){return"typography"},className:function(){return o.prototype.className.apply(this,arguments)+" elementor-panel-box"},ui:{heading:".elementor-panel-heading",allFields:".elementor-panel-scheme-typography-item-field",inputFields:"input.elementor-panel-scheme-typography-item-field",selectFields:"select.elementor-panel-scheme-typography-item-field",selectFamilyFields:'select.elementor-panel-scheme-typography-item-field[name="font_family"]'},events:{"input @ui.inputFields":"onFieldChange","change @ui.selectFields":"onFieldChange","click @ui.heading":"toggleVisibility"},onRender:function(){var i=this;this.ui.inputFields.add(this.ui.selectFields).each(function(){var e=jQuery(this),t=e.attr("name"),n=i.model.get("value")[t];e.val(n)}),this.ui.selectFamilyFields.select2({dir:elementor.config.is_rtl?"rtl":"ltr"})},toggleVisibility:function(){this.ui.heading.toggleClass("elementor-open")},changeUIValue:function(i){this.ui.allFields.each(function(){var e=jQuery(this),t=e.attr("name"),n=i[t];e.val(n).trigger("change")})},onFieldChange:function(e){var t=this.$(e.currentTarget),n=elementor.schemes.getSchemeValue("typography",this.model.get("key")).value,i=t.attr("name");n[i]=t.val(),"font_family"!==i||_.isEmpty(n[i])||elementor.helpers.enqueueFont(n[i]),this.triggerMethod("value:change",n)}}),t.exports=i},{"elementor-panel/pages/schemes/items/base":103}],106:[function(e,t,n){var i;i=e("elementor-panel/pages/schemes/base").extend({getType:function(){return"typography"}}),t.exports=i},{"elementor-panel/pages/schemes/base":99}],107:[function(i,e,t){var n,o=i("elementor-layouts/edit-mode");n=Marionette.LayoutView.extend({template:"#tmpl-elementor-panel",id:"elementor-panel-inner",regions:{content:"#elementor-panel-content-wrapper",header:"#elementor-panel-header-wrapper",footer:"#elementor-panel-footer",modeSwitcher:"#elementor-mode-switcher"},pages:{},childEvents:{"click:add":function(){this.setPage("elements")},"editor:destroy":function(){this.setPage("elements")}},currentPageName:null,currentPageView:null,_isScrollbarInitialized:!1,initialize:function(){this.initPages()},buildPages:function(){var n={elements:{view:i("elementor-panel/pages/elements/elements"),title:'<img src="'+elementor.config.assets_url+'images/logo-panel.svg">'},editor:{view:i("elementor-panel/pages/editor")},menu:{view:elementor.modules.layouts.panel.pages.menu.Menu,title:'<img src="'+elementor.config.assets_url+'images/logo-panel.svg">'},colorScheme:{view:i("elementor-panel/pages/schemes/colors")},typographyScheme:{view:i("elementor-panel/pages/schemes/typography")},colorPickerScheme:{view:i("elementor-panel/pages/schemes/color-picker")}},e=Object.keys(elementor.schemes.getSchemes()),t=_.difference(e,elementor.schemes.getEnabledSchemesTypes());return _.each(t,function(e){var t=elementor.schemes.getScheme(e);n[e+"Scheme"].view=i("elementor-panel/pages/schemes/disabled").extend({disabledTitle:t.disabled_title})}),n},initPages:function(){var n;this.getPages=function(e){return n||(n=this.buildPages()),e?n[e]:n},this.addPage=function(e,t){n||(n=this.buildPages()),n[e]=t}},getHeaderView:function(){return this.getChildView("header")},getFooterView:function(){return this.getChildView("footer")},getCurrentPageName:function(){return this.currentPageName},getCurrentPageView:function(){return this.currentPageView},setPage:function(e,t,n){"elements"!==e||elementor.userCan("design")||this.getPages().hasOwnProperty("page_settings")&&(e="page_settings");var i=this.getPages(e);if(!i)throw new ReferenceError("Elementor panel doesn't have page named '"+e+"'");i.options&&(n=_.extend(i.options,n));var o=i.view;i.getView&&(o=i.getView()),this.currentPageName=e,this.currentPageView=new o(n),this.showChildView("content",this.currentPageView),this.getHeaderView().setTitle(t||i.title),this.trigger("set:page",this.currentPageView).trigger("set:page:"+e,this.currentPageView)},openEditor:function(e,t){if("editor"===this.getCurrentPageName()&&this.getCurrentPageView().model===e)return;var n=elementor.getElementData(e);this.setPage("editor",elementor.translate("edit_element",[n.title]),{model:e,controls:elementor.getElementControls(e),editedElementView:t});var i="panel/open_editor/"+e.get("elType");elementor.hooks.doAction(i,this,e,t),elementor.hooks.doAction(i+"/"+e.get("widgetType"),this,e,t)},onBeforeShow:function(){var e=i("elementor-layouts/panel/footer"),t=i("elementor-layouts/panel/header");this.showChildView("modeSwitcher",new o),this.showChildView("header",new t),this.showChildView("footer",new e),this.updateScrollbar=_.throttle(this.updateScrollbar,100),this.getRegion("content").on("before:show",this.onEditorBeforeShow.bind(this)).on("empty",this.onEditorEmpty.bind(this)).on("show",this.updateScrollbar.bind(this)),this.setPage("elements"),this.listenTo(elementor.channels.data,"scrollbar:update",this.updateScrollbar)},onEditorBeforeShow:function(){_.defer(this.updateScrollbar.bind(this))},onEditorEmpty:function(){this.updateScrollbar()},updateScrollbar:function(){var e=this.content.$el;if(!this._isScrollbarInitialized)return e.perfectScrollbar(),void(this._isScrollbarInitialized=!0);e.perfectScrollbar("update")}}),e.exports=n},{"elementor-layouts/edit-mode":82,"elementor-layouts/panel/footer":83,"elementor-layouts/panel/header":84,"elementor-panel/pages/editor":85,"elementor-panel/pages/elements/elements":88,"elementor-panel/pages/schemes/color-picker":100,"elementor-panel/pages/schemes/colors":101,"elementor-panel/pages/schemes/disabled":102,"elementor-panel/pages/schemes/typography":106}],108:[function(e,t,n){var i;i={config:{},requests:{},cache:{},initConfig:function(){this.config={ajaxParams:{type:"POST",url:elementor.config.ajaxurl,data:{}},actionPrefix:"elementor_"}},init:function(){this.initConfig(),this.debounceSendBatch=_.debounce(this.sendBatch.bind(this),500)},getCacheKey:function(e){return JSON.stringify({unique_id:e.unique_id,data:e.data})},loadObjects:function(t){var n=this,i={},o=[];t.before&&t.before(),t.ids.forEach(function(e){o.push(n.load({action:t.action,unique_id:t.data.unique_id+e,data:jQuery.extend({id:e},t.data)}).done(function(e){i=jQuery.extend(i,e)}))}),jQuery.when.apply(jQuery,o).done(function(){t.success(i)})},load:function(e){var t=this;e.unique_id||(e.unique_id=e.action),e.before&&e.before();var n=t.getCacheKey(e);return _.has(t.cache,n)?jQuery.Deferred().done(e.success).resolve(t.cache[n]):t.addRequest(e.action,{data:e.data,unique_id:e.unique_id,success:function(e){t.cache[n]=e}}).done(e.success)},addRequest:function(e,t,n){t.unique_id||(t.unique_id=e),t.deferred=jQuery.Deferred().done(t.success).fail(t.error).always(t.complete);var i={action:e,options:t};if(n){var o={};o[t.unique_id]=i,t.deferred.jqXhr=this.sendBatch(o)}else this.requests[t.unique_id]=i,this.debounceSendBatch();return t.deferred},sendBatch:function(i){var n={};return i||(i=this.requests,this.requests={}),_(i).each(function(e,t){n[t]={action:e.action,data:e.options.data}}),this.send("ajax",{data:{actions:JSON.stringify(n)},success:function(e){_.each(e.responses,function(e,t){var n=i[t].options;n&&(e.success?n.deferred.resolve(e.data):e.success||n.deferred.reject(e.data))})},error:function(t){_.each(i,function(e){e.options&&e.options.deferred.reject(t)})}})},send:function(e,t){var n=this,i=elementor.helpers.cloneObject(this.config.ajaxParams);t=t||{},e=this.config.actionPrefix+e,jQuery.extend(i,t),i.data instanceof FormData?(i.data.append("action",e),i.data.append("_nonce",elementor.config.nonce),i.data.append("editor_post_id",elementor.config.document.id)):(i.data.action=e,i.data._nonce=elementor.config.nonce,i.data.editor_post_id=elementor.config.document.id);var o=i.success,r=i.error;return(o||r)&&(i.success=function(e){e.success&&o&&o(e.data),!e.success&&r&&r(e.data)},i.error=r?function(e){r(e)}:function(e){if(0!==e.readyState||"abort"!==e.statusText){var t=n.createErrorMessage(e);elementor.notifications.showToast({message:t})}}),jQuery.ajax(i)},createErrorMessage:function(e){var t;return 4===e.readyState?(t=elementor.translate("server_error"),200!==e.status&&(t+=" ("+e.status+" "+e.statusText+")")):t=0===e.readyState?elementor.translate("server_connection_lost"):elementor.translate("unknown_error"),t+"."}},t.exports=i},{}],109:[function(e,t,n){var i;i=function(){var l=this;this.compare=function(e,t,n){switch(n){case"==":return e==t;case"!=":return e!=t;case"!==":return e!==t;case"in":return-1!==t.indexOf(e);case"!in":return-1===t.indexOf(e);case"contains":return-1!==e.indexOf(t);case"!contains":return-1===e.indexOf(t);case"<":return e<t;case"<=":return e<=t;case">":return t<e;case">=":return t<=e;default:return e===t}},this.check=function(e,o){var r="or"===e.relation,s=!r;return jQuery.each(e.terms,function(){var e,t=this;if(t.terms)e=l.check(t,o);else{var n=t.name.match(/(\w+)(?:\[(\w+)])?/),i=o[n[1]];n[2]&&(i=i[n[2]]),e=l.compare(i,t.value,t.operator)}return r?(e&&(s=!0),!e):e?void 0:s=!1}),s}},t.exports=new i},{}],110:[function(e,t,n){var s,i=e("elementor-utils/view-module"),o=e("elementor-editor-utils/stylesheet");(s=i.extend({stylesheet:null,getDefaultSettings:function(){return{id:0,settingsModel:null,dynamicParsing:{}}},getDefaultElements:function(){return{$stylesheetElement:jQuery("<style>",{id:"elementor-style-"+this.getSettings("id")})}},initStylesheet:function(){var e=elementor.config.viewportBreakpoints;this.stylesheet=new o,this.stylesheet.addDevice("mobile",0).addDevice("tablet",e.md).addDevice("desktop",e.lg)},addStyleRules:function(e,t,n,i,o){var r=this,s=r.getSettings("settingsModel").parseDynamicSettings(t,r.getSettings("dynamicParsing"),e);_.each(e,function(e){e.styleFields&&e.styleFields.length&&r.addRepeaterControlsStyleRules(t[e.name],e.styleFields,n,i,o),e.dynamic&&e.dynamic.active&&t.__dynamic__&&t.__dynamic__[e.name]&&r.addDynamicControlStyleRules(t.__dynamic__[e.name],e),e.selectors&&r.addControlStyleRules(e,s,n,i,o)})},addControlStyleRules:function(e,t,n,i,o){var r=this;s.addControlStyleRules(r.stylesheet,e,n,function(e){return r.getStyleControlValue(e,t)},i,o)},getStyleControlValue:function(e,t){var n=t[e.name];if(e.selectors_dictionary&&(n=e.selectors_dictionary[n]||n),_.isNumber(n)||!_.isEmpty(n))return n},addRepeaterControlsStyleRules:function(i,e,o,r,s){var l=this;e.forEach(function(e,t){var n=i.models[t];l.addStyleRules(e,n.attributes,o,r.concat(["{{CURRENT_ITEM}}"]),s.concat([".elementor-repeater-item-"+n.get("_id")]))})},addDynamicControlStyleRules:function(e,t){var r=this;elementor.dynamicTags.parseTagsText(e,t.dynamic,function(e,t,n){var i=elementor.dynamicTags.createTag(e,t,n);if(i){var o=i.model;o.getStyleControls().length&&r.addStyleRules(o.getStyleControls(),o.attributes,o.controls,["{{WRAPPER}}"],["#elementor-tag-"+e])}})},addStyleToDocument:function(){elementor.$previewContents.find("head").append(this.elements.$stylesheetElement),this.elements.$stylesheetElement.text(this.stylesheet)},removeStyleFromDocument:function(){this.elements.$stylesheetElement.remove()},onInit:function(){i.prototype.onInit.apply(this,arguments),this.initStylesheet()}})).addControlStyleRules=function(c,d,m,u,h,p){var g=u(d);void 0!==g&&_.each(d.selectors,function(e,o){var t;try{t=e.replace(/{{(?:([^.}]+)\.)?([^}]*)}}/g,function(e,t,n){var i=d,o=g;if(t){if(!(i=_.findWhere(m,{name:t})))return"";o=u(i)}var r=elementor.getControlView(i.type).getStyleValue(n.toLowerCase(),o);if(""===r)throw"";return r})}catch(e){return}if(!_.isEmpty(t)){var n=/^(?:\([^)]+\)){1,2}/,i=o.match(n),r={};if(i){i=i[0],o=o.replace(n,"");for(var s,l=/\(([^)]+)\)/g,a=[];s=l.exec(i);)a.push(s[1]);_.each(a,function(e){if("desktop"!==e){var t=e.replace(/\+$/,"");r[t===e?"max":"min"]=t}})}_.each(h,function(e,t){var n=e.source?e.source:e,i=new RegExp(n,"g");o=o.replace(i,p[t])}),!Object.keys(r).length&&d.responsive&&"desktop"===(r=_.pick(elementor.helpers.cloneObject(d.responsive),["min","max"])).max&&delete r.max,c.addRules(o,t,r)}})},t.exports=s},{"elementor-editor-utils/stylesheet":120,"elementor-utils/view-module":132}],111:[function(e,t,n){t.exports=new function(){var r=this,n=[],s={},e={},t=function(e){var t=e.originalEvent,n=t.error;if(n){var i=!1,o=s.urlsToWatch;jQuery.each(o,function(){if(-1!==n.stack.indexOf(this))return!(i=!0)}),i&&r.addError({type:n.name,message:n.message,url:t.filename,line:t.lineno,column:t.colno})}};this.addURLToWatch=function(e){s.urlsToWatch.push(e)},this.addCustomError=function(e,t,n){var i={type:e.name,message:e.message,url:e.fileName||e.sourceURL,line:e.lineNumber||e.line,column:e.columnNumber||e.column,customFields:{category:t||"general",tag:n}};if(!i.url){var o=e.stack.match(/\n {4}at (.*?(?=:(\d+):(\d+)))/);o&&(i.url=o[1],i.line=o[2],i.column=o[3])}this.addError(i)},this.addError=function(e){var t={type:"Error",timestamp:Math.floor((new Date).getTime()/1e3),message:null,url:null,line:null,column:null,customFields:{}};n.push(jQuery.extend(!0,t,e)),r.sendErrors()},this.sendErrors=function(){e.$window.off("error",t),jQuery.ajax({url:ElementorConfig.ajaxurl,method:"POST",data:{action:"elementor_debug_log",data:n},success:function(){n=[],e.$window.on("error",t)}})},s={debounceDelay:500,urlsToWatch:["elementor/assets"]},e.$window=jQuery(window),e.$window.on("error",t),r.sendErrors=_.debounce(r.sendErrors,s.debounceDelay)}},{}],112:[function(e,t,n){var i;i={init:function(){var e;this.getModal=function(){return e||(e=this.initModal()),e},jQuery(document).on({"heartbeat-send":function(e,t){t.elementor_post_lock={post_ID:elementor.config.document.id}},"heartbeat-tick":function(e,t){t.locked_user?(elementor.saver.isEditorChanged()&&elementor.saver.saveEditor({status:"autosave"}),i.showLockMessage(t.locked_user)):i.getModal().hide(),elementor.config.nonce=t.elementorNonce},"heartbeat-tick.wp-refresh-nonces":function(e,t){var n=t["elementor-refresh-nonces"];n&&(n.heartbeatNonce&&(elementor.config.nonce=n.elementorNonce),n.heartbeatNonce&&(window.heartbeatSettings.nonce=n.heartbeatNonce))}}),elementor.config.locked_user&&i.showLockMessage(elementor.config.locked_user)},initModal:function(){var e=elementor.dialogsManager.createWidget("lightbox",{headerMessage:elementor.translate("take_over")});return e.addButton({name:"go_back",text:elementor.translate("go_back"),callback:function(){parent.history.go(-1)}}),e.addButton({name:"take_over",text:elementor.translate("take_over"),callback:function(){wp.heartbeat.enqueue("elementor_force_post_lock",!0),wp.heartbeat.connectNow()}}),e},showLockMessage:function(e){i.getModal().setMessage(elementor.translate("dialog_user_taken_over",[e])).show()}},t.exports=i},{}],113:[function(e,t,n){var i;i={_enqueuedFonts:[],elementsHierarchy:{section:{column:{widget:null,section:null}}},enqueueFont:function(e){if(-1===this._enqueuedFonts.indexOf(e)){var t,n=elementor.config.controls.font.options[e],i={ru_RU:"cyrillic",uk:"cyrillic",bg_BG:"cyrillic",vi:"vietnamese",el:"greek",he_IL:"hebrew"};switch(n){case"googlefonts":t="https://fonts.googleapis.com/css?family="+e+":100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic",i[elementor.config.locale]&&(t+="&subset="+i[elementor.config.locale]);break;case"earlyaccess":t="https://fonts.googleapis.com/earlyaccess/"+e.replace(/\s+/g,"").toLowerCase()+".css"}_.isEmpty(t)||elementor.$previewContents.find("link:last").after('<link href="'+t+'" rel="stylesheet" type="text/css">'),this._enqueuedFonts.push(e),elementor.channels.editor.trigger("font:insertion",n,e)}},resetEnqueuedFontsCache:function(){this._enqueuedFonts=[]},getElementChildType:function(e,t){if(t||(t=this.elementsHierarchy),void 0!==t[e])return jQuery.isPlainObject(t[e])?Object.keys(t[e]):null;for(var n in t)if(t.hasOwnProperty(n)&&jQuery.isPlainObject(t[n])){var i=this.getElementChildType(e,t[n]);if(i)return i}return null},getUniqueID:function(){return Math.random().toString(16).substr(2,7)},stringReplaceAll:function(e,t){var n=new RegExp(Object.keys(t).join("|"),"gi");return e.replace(n,function(e){return t[e]})},isActiveControl:function(e,a){var t,n;if(_.isFunction(e.get)?(t=e.get("condition"),n=e.get("conditions")):(t=e.condition,n=e.conditions),n)return elementor.conditions.check(n,a);if(_.isEmpty(t))return!0;var i=_.filter(t,function(e,t){var n,i=t.match(/([a-z_0-9]+)(?:\[([a-z_]+)])?(!?)$/i),o=i[1],r=i[2],s=!!i[3],l=a[o];return void 0===l||(r&&Array.isArray(l)&&(l=l[r]),n=_.isArray(e)&&!_.isEmpty(e)?_.contains(e,l):_.isArray(l)&&!_.isEmpty(l)?_.contains(l,e):_.isEqual(e,l),s?n:!n)});return _.isEmpty(i)},cloneObject:function(e){return JSON.parse(JSON.stringify(e))},disableElementEvents:function(e){e.each(function(){var e=this.style.pointerEvents;"none"!==e&&jQuery(this).data("backup-pointer-events",e).css("pointer-events","none")})},enableElementEvents:function(e){e.each(function(){var e=jQuery(this),t=e.data("backup-pointer-events");void 0!==t&&e.removeData("backup-pointer-events").css("pointer-events",t)})},getColorPickerPaletteIndex:function(e){return["7","8","1","5","2","3","6","4"].indexOf(e)},wpColorPicker:function(e,t){var n=this,i=elementor.schemes.getScheme("color-picker"),o=_.sortBy(i.items,function(e){return n.getColorPickerPaletteIndex(e.key)}),r={width:1440<=window.innerWidth?271:251,palettes:_.pluck(o,"value")};return t&&_.extend(r,t),e.wpColorPicker(r)},isInViewport:function(e,t){var n=e.getBoundingClientRect();return t=t||document.documentElement,0<=n.top&&0<=n.left&&n.bottom<=(window.innerHeight||t.clientHeight)&&n.right<=(window.innerWidth||t.clientWidth)},scrollToView:function(e){setTimeout(function(){elementor.$previewContents.find("html, body").animate({scrollTop:e.$el.offset().top-elementor.$preview[0].contentWindow.innerHeight/2})},500)}},t.exports=i},{}],114:[function(e,t,n){var i;i=function(){var n=this,l={},a=[],c=function(e){var t,n=e.size;if("custom"===n){var i=e.dimension;if(!i.width&&!i.height)return"full";t="custom_"+i.width+"x"+i.height}else t=n;return t};n.onceTriggerChange=_.once(function(e){setTimeout(function(){e.get("settings").trigger("change",e.get("settings"))},700)}),n.getImageUrl=function(e){n.registerItem(e);var t=n.getItem(e);if(!t){if("custom"===e.size)return void(elementor.getPanelView()&&"editor"===elementor.getPanelView().getCurrentPageName()&&e.model&&n.onceTriggerChange(e.model));t=e.url}return t},n.getItem=function(e){var t=c(e),n=e.id;return!!t&&(!(!l[n]||!l[n][t])&&l[n][t])},n.registerItem=function(e){""!==e.id&&(n.getItem(e)||(a.push(e),n.debounceGetRemoteItems()))},n.getRemoteItems=function(){var e,t,n=[],i=Object.keys(a).length;if(0!==i)if(1===i&&(e=a[Object.keys(a)[0]])&&e.model)e.model.renderRemoteServer();else{for(t in a){e=a[t];var o=c(e),r=e.id,s=!l[r]||0===Object.keys(l[r]).length;n.push({id:r,size:o,is_first_time:s})}elementor.ajax.send("get_images_details",{data:{items:n},success:function(e){var t,n;for(t in e)for(n in l[t]||(l[t]={}),e[t])l[t][n]=e[t][n];a=[]}})}},n.debounceGetRemoteItems=_.debounce(n.getRemoteItems,300)},t.exports=new i},{}],115:[function(e,t,n){var f,v,i;f=jQuery,v=function(e){try{return e.originalEvent.dataTransfer.setData("test","test"),e.originalEvent.dataTransfer.clearData("test"),!0}catch(e){return!1}},i={html5Draggable:function(e){var n=this,i={},o={},t={element:"",groups:null,onDragStart:null,onDragEnd:null},r=function(e){f.isFunction(i.onDragEnd)&&i.onDragEnd.call(o.$element,e,n)},s=function(e){var t={groups:i.groups||[]};v(e)&&e.originalEvent.dataTransfer.setData(JSON.stringify(t),!0),f.isFunction(i.onDragStart)&&i.onDragStart.call(o.$element,e,n)};this.destroy=function(){o.$element.off("dragstart",s),o.$element.removeAttr("draggable")},f.extend(!0,i,t,e),o.$element=f(i.element),o.$element.attr("draggable",!0),o.$element.on("dragstart",s).on("dragend",r)},html5Droppable:function(e){var r,s,o=this,l={},a={},t={element:"",items:">",horizontalSensitivity:"10%",axis:["vertical","horizontal"],placeholder:!0,currentElementClass:"html5dnd-current-element",placeholderClass:"html5dnd-placeholder",hasDraggingOnChildClass:"html5dnd-has-dragging-on-child",groups:null,isDroppingAllowed:null,onDragEnter:null,onDragging:null,onDropping:null,onDragLeave:null},c=function(){return-1!==l.axis.indexOf("vertical")},d=function(e,t){var n;return-1!==l.axis.indexOf("horizontal")&&(c()?!!(n=l.horizontalSensitivity.match(/\d+/))&&(n=n[0],/%$/.test(l.horizontalSensitivity)&&(n=t/n),t-n<e?"right":e<n&&"left"):t/2<e?"right":"left")},n=function(e){var t=f(r),n=t.outerHeight()-a.$placeholder.outerHeight(),i=t.outerWidth();if(e=e.originalEvent,!(s=d(e.offsetX,i)))if(c()){var o=r.getBoundingClientRect();s=e.clientY>o.top+n/2?"bottom":"top"}else s=null},i=function(){if(l.placeholder){var e="top"===s?"prependTo":"appendTo";a.$placeholder[e](r)}},m=function(e){var t,n,i;return!(l.groups&&v(e)&&(t=e.originalEvent.dataTransfer.types,i=!1,(t=Array.prototype.slice.apply(t)).forEach(function(e){try{if(!(n=JSON.parse(e)).groups.slice)return;l.groups.forEach(function(e){if(-1!==n.groups.indexOf(e))return!(i=!0)})}catch(e){}}),!i)||f.isFunction(l.isDroppingAllowed)&&!l.isDroppingAllowed.call(r,s,e,o))},u=function(e){e.stopPropagation(),r||(r=this,a.$element.parents().each(function(){var e=f(this).data("html5Droppable");e&&e.doDragLeave()}),n(e),m(e)&&(i(),a.$element.addClass(l.hasDraggingOnChildClass),f(r).addClass(l.currentElementClass),f.isFunction(l.onDragEnter)&&l.onDragEnter.call(r,s,e,o)))},h=function(e){e.stopPropagation(),r||u.call(this,e);var t=s;n(e),m(e)&&(e.preventDefault(),t!==s&&i(),f.isFunction(l.onDragging)&&l.onDragging.call(this,s,e,o))},p=function(e){var t=this.getBoundingClientRect();("dragleave"!==e.type||e.clientX<t.left||e.clientX>=t.right||e.clientY<t.top||e.clientY>=t.bottom)&&(f(r).removeClass(l.currentElementClass),o.doDragLeave())},g=function(e){n(e),m(e)&&(e.preventDefault(),f.isFunction(l.onDropping)&&l.onDropping.call(this,s,e,o))};this.doDragLeave=function(){l.placeholder&&a.$placeholder.remove(),a.$element.removeClass(l.hasDraggingOnChildClass),f.isFunction(l.onDragLeave)&&l.onDragLeave.call(r,event,o),r=s=null},this.destroy=function(){a.$element.off("dragenter",l.items,u).off("dragover",l.items,h).off("drop",l.items,g).off("dragleave drop",l.items,p)},f.extend(l,t,e),a.$element=f(l.element),a.$placeholder=f("<div>",{class:l.placeholderClass}),a.$element.on("dragenter",l.items,u).on("dragover",l.items,h).on("drop",l.items,g).on("dragleave drop",l.items,p)}},f.each(i,function(n,i){f.fn[n]=function(t){return t=t||{},this.each(function(){var e=f.data(this,n);e instanceof i?"destroy"===t&&(e.destroy(),f.removeData(this,n)):(t.element=this,f.data(this,n,new i(t)))}),this}})},{}],116:[function(e,t,n){var i;(i=jQuery).fn.elementorSerializeObject=function(){var e=this.serializeArray(),t={},l=function(e,t,n){var i=/^[^\[\]]+\[]/.test(t),o=/^[^\[\]]+\[[^\[\]]+]/.test(t),r=t.replace(/\[.*/,"");if(i)e[r]||(e[r]=[]);else{if(!o)return void(e.push?e.push(n):e[r]=n);e[r]||(e[r]={})}var s=t.match(/\[[^\[\]]*]/g);return s[0]=s[0].replace(/\[|]/g,""),l(e[r],s.join(""),n)};return i.each(e,function(){l(t,this.name,this.value)}),t}},{}],117:[function(e,t,n){var i=e("elementor-utils/module");t.exports=i.extend({initToast:function(){var n=elementor.dialogsManager.createWidget("buttons",{id:"elementor-toast",position:{my:"center bottom",at:"center bottom-10",of:"#elementor-panel-content-wrapper",autoRefresh:!0},hide:{onClick:!0,auto:!0,autoDelay:1e4},effects:{show:function(){var e=n.getElements("widget");e.show(),n.refreshPosition();var t=parseInt(e.css("top"),10);e.hide().css("top",t+100),e.animate({opacity:"show",height:"show",paddingBottom:"show",paddingTop:"show",top:t},{easing:"linear",duration:300})},hide:function(){var e=n.getElements("widget"),t=parseInt(e.css("top"),10);e.animate({opacity:"hide",height:"hide",paddingBottom:"hide",paddingTop:"hide",top:t+100},{easing:"linear",duration:300})}},buttonTag:"div"});this.getToast=function(){return n}},showToast:function(e){var t=this.getToast();t.setMessage(e.message),t.getElements("buttonsWrapper").empty(),e.buttons&&e.buttons.forEach(function(e){t.addButton(e)}),t.show()},onInit:function(){this.initToast()}})},{"elementor-utils/module":131}],118:[function(e,t,n){var i;i={getPresetsDictionary:function(){return{11:100/9,12:12.5,14:100/7,16:100/6,33:100/3,66:2/3*100,83:5/6*100}},getAbsolutePresetValues:function(e){var n=elementor.helpers.cloneObject(e),i=this.getPresetsDictionary();return _.each(n,function(e,t){i[e]&&(n[t]=i[e])}),n},getPresets:function(e,t){var n=elementor.helpers.cloneObject(elementor.config.elements.section.presets);return e&&(n=n[e]),t&&(n=n[t]),n},getPresetByStructure:function(e){var t=this.getParsedStructure(e);return this.getPresets(t.columnsCount,t.presetIndex)},getParsedStructure:function(e){return{columnsCount:(e+="").slice(0,-1),presetIndex:e.substr(-1)}},getPresetSVG:function(e,t,n,i){t=t||100,n=n||50,i=i||2;var o=this.getAbsolutePresetValues(e),r=this._generatePresetSVGPath(o,t,n,i);return this._createSVGPreset(r,t,n)},_createSVGPreset:function(e,t,n){var i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),i.setAttribute("viewBox","0 0 "+t+" "+n);var o=document.createElementNS("http://www.w3.org/2000/svg","path");return o.setAttribute("d",e),i.appendChild(o),i},_generatePresetSVGPath:function(e,t,n,i){for(var o=t-i*(e.length-1),r=0,s="",l=0;l<e.length;l++){l&&(s+=" ");var a=e[l]/100*o;s+="M"+ +(r+=a).toFixed(4)+",0",s+="V"+n,s+="H"+ +(r-a).toFixed(4),s+="V0Z",r+=i}return s}},t.exports=i},{}],119:[function(e,t,n){var i,o=e("elementor-editor-utils/stylesheet"),c=e("elementor-editor-utils/controls-css-parser");i=function(){var s=this,l=new o,i={},a=".elementor-widget-",e={},t=function(o){var r=s.getWidgetSchemeControls(o);_.each(r,function(e){var t,n,i;t=e,n=r,i=o.widget_type,c.addControlStyleRules(l,t,n,function(e){return s.getSchemeValue(e.scheme.type,e.scheme.value,e.scheme.key).value},["{{WRAPPER}}"],[a+i])})};this.init=function(){return e.$style=jQuery("<style>",{id:"elementor-style-scheme"}),e.$previewHead=elementor.$previewContents.find("head"),e.$previewHead.append(e.$style),i=elementor.helpers.cloneObject(elementor.config.schemes.items),s},this.getWidgetSchemeControls=function(e){return _.filter(e.controls,function(e){return _.isObject(e.scheme)})},this.getSchemes=function(){return i},this.getEnabledSchemesTypes=function(){return elementor.config.schemes.enabled_schemes},this.getScheme=function(e){return i[e]},this.getSchemeValue=function(e,t,n){if(this.getEnabledSchemesTypes().indexOf(e)<0)return!1;var i=s.getScheme(e).items[t];if(n&&_.isObject(i)){var o=elementor.helpers.cloneObject(i);return o.value=i.value[n],o}return i},this.printSchemesStyle=function(){l.empty(),_.each(elementor.config.widgets,function(e){t(e)}),e.$style.text(l)},this.resetSchemes=function(e){i[e]=elementor.helpers.cloneObject(elementor.config.schemes.items[e])},this.saveScheme=function(e){elementor.config.schemes.items[e].items=elementor.helpers.cloneObject(i[e].items);var n={};_.each(i[e].items,function(e,t){n[t]=e.value}),NProgress.start(),elementor.ajax.send("apply_scheme",{data:{scheme_name:e,data:JSON.stringify(n)},success:function(){NProgress.done()}})},this.setSchemeValue=function(e,t,n){i[e].items[t].value=n}},t.exports=new i},{"elementor-editor-utils/controls-css-parser":110,"elementor-editor-utils/stylesheet":120}],120:[function(e,t,n){var m,s;m=jQuery,(s=function(){var a=this,c={},n={},r={},d=function(e){var o={};return(e=e.split("-").filter(String)).forEach(function(e){var t=e.split("_"),n=t[0],i=t[1];o[n]="max"===n?function(e){var t=Object.keys(r),n=t.indexOf(e)+1;if(n>=t.length)throw new RangeError("Max value for this device is out of range.");return r[t[n]]-1}(i):r[i]}),o};this.addDevice=function(e,t){r[e]=t;var n=Object.keys(r);if(n.length<2)return a;n.sort(function(e,t){return r[e]-r[t]});var i={};return n.forEach(function(e){i[e]=r[e]}),r=i,a},this.addRawCSS=function(e,t){n[e]=t},this.addRules=function(e,t,n){var i,o,r="all";if(_.isEmpty(n)||(i=n,o=[],m.each(i,function(e){o.push(e+"_"+this)}),r=o.join("-")),c[r]||function(e){c[e]={};var t=Object.keys(c);if(!(t.length<2)){t.sort(function(e,t){if("all"===e)return-1;if("all"===t)return 1;var n=d(e);return d(t).max-n.max});var n={};t.forEach(function(e){n[e]=c[e]}),c=n}}(r),t){if(c[r][e]||(c[r][e]={}),"string"==typeof t){t=t.split(";").filter(String);var s={};try{m.each(t,function(){var e=this.split(/:(.*)?/);s[e[0].trim()]=e[1].trim().replace(";","")})}catch(e){return}t=s}return m.extend(c[r][e],t),a}var l=e.match(/[^{]+\{[^}]+}/g);m.each(l,function(){var e=this.match(/([^{]+)\{([^}]+)}/);e&&a.addRules(e[1].trim(),e[2].trim(),n)})},this.getRules=function(){return c},this.empty=function(){c={},n={}},this.toString=function(){var o="";return m.each(c,function(e){var t,n,i=s.parseRules(this);"all"!==e&&(t=d(e),n=[],m.each(t,function(e){n.push("("+e+"-width:"+this+"px)")}),i="@media"+n.join(" and ")+"{"+i+"}"),o+=i}),m.each(n,function(){o+=this}),o}}).parseRules=function(e){var n="";return m.each(e,function(e){var t=s.parseProperties(this);t&&(n+=e+"{"+t+"}")}),n},s.parseProperties=function(e){var t="";return m.each(e,function(e){this&&(t+=e+":"+this+";")}),t},t.exports=s},{}],121:[function(e,t,n){var i;i=Marionette.ItemView.extend({template:Marionette.TemplateCache.get("#tmpl-elementor-add-section"),attributes:{"data-view":"choose-action"},ui:{addNewSection:".elementor-add-new-section",closeButton:".elementor-add-section-close",addSectionButton:".elementor-add-section-button",addTemplateButton:".elementor-add-template-button",selectPreset:".elementor-select-preset",presets:".elementor-preset"},events:{"click @ui.addSectionButton":"onAddSectionButtonClick","click @ui.addTemplateButton":"onAddTemplateButtonClick","click @ui.closeButton":"onCloseButtonClick","click @ui.presets":"onPresetSelected"},className:function(){return"elementor-add-section elementor-visible-desktop"},addSection:function(e,t){return elementor.sections.currentView.addSection(e,t)},setView:function(e){this.$el.attr("data-view",e)},showSelectPresets:function(){this.setView("select-preset")},closeSelectPresets:function(){this.setView("choose-action")},getTemplatesModalOptions:function(){return{}},onAddSectionButtonClick:function(){this.showSelectPresets()},onAddTemplateButtonClick:function(){elementor.templates.startModal(this.getTemplatesModalOptions())},onRender:function(){this.$el.html5Droppable({axis:["vertical"],groups:["elementor-element"],placeholder:!1,currentElementClass:"elementor-html5dnd-current-element",hasDraggingOnChildClass:"elementor-dragging-on-child",onDropping:this.onDropping.bind(this)})},onPresetSelected:function(e){this.closeSelectPresets();var t,n=e.currentTarget.dataset.structure,i=elementor.presetsFactory.getParsedStructure(n),o=[];for(t=0;t<i.columnsCount;t++)o.push({id:elementor.helpers.getUniqueID(),elType:"column",settings:{},elements:[]});elementor.channels.data.trigger("element:before:add",{elType:"section"}),this.addSection({elements:o}).setStructure(n),elementor.channels.data.trigger("element:after:add")},onDropping:function(){elementor.channels.data.trigger("section:before:drop"),this.addSection().addElementFromPanel(),elementor.channels.data.trigger("section:after:drop")}}),t.exports=i},{}],122:[function(e,t,n){var i=e("elementor-views/add-section/base");t.exports=i.extend({id:"elementor-add-new-section",onCloseButtonClick:function(){this.closeSelectPresets()}})},{"elementor-views/add-section/base":121}],123:[function(e,t,n){var i=e("elementor-views/add-section/base");t.exports=i.extend({options:{atIndex:null},className:function(){return i.prototype.className.apply(this,arguments)+" elementor-add-section-inline"},addSection:function(e,t){return(t=t||{}).at=this.getOption("atIndex"),i.prototype.addSection.call(this,e,t)},getTemplatesModalOptions:function(){return _.extend(i.prototype.getTemplatesModalOptions.apply(this,arguments),{importOptions:{at:this.getOption("atIndex")}})},fadeToDeath:function(){var e=this;e.$el.slideUp(function(){e.destroy()})},onCloseButtonClick:function(){this.fadeToDeath()},onPresetSelected:function(){i.prototype.onPresetSelected.apply(this,arguments),this.destroy()},onAddTemplateButtonClick:function(){i.prototype.onAddTemplateButtonClick.apply(this,arguments),this.destroy()},onDropping:function(){i.prototype.onDropping.apply(this,arguments),this.destroy()}})},{"elementor-views/add-section/base":121}],124:[function(e,t,n){t.exports=Marionette.CompositeView.extend({templateHelpers:function(){return{view:this}},getBehavior:function(e){return this._behaviors[Object.keys(this.behaviors()).indexOf(e)]},addChildModel:function(e,t){return this.collection.add(e,t,!0)},addChildElement:function(e,t){t=t||{};var n=this.getChildType(),i=e.get?e.get("elType"):e.elType;if(-1===n.indexOf(i))return delete t.at,this.children.last().addChildElement(e,t);var o=this.addChildModel(e,t),r=this.children.findByModel(o);return r.edit(),r}})},{}],125:[function(t,e,n){var i,o=t("elementor-elements/views/section");i=t("elementor-views/base-container").extend({childView:o,behaviors:function(){var e={Sortable:{behaviorClass:t("elementor-behaviors/sortable"),elChildType:"section"},HandleDuplicate:{behaviorClass:t("elementor-behaviors/handle-duplicate")},HandleAddMode:{behaviorClass:t("elementor-behaviors/duplicate")}};return elementor.hooks.applyFilters("elements/base-section-container/behaviors",e,this)},getSortableOptions:function(){return{handle:"> .elementor-element-overlay .elementor-editor-section-settings .elementor-editor-element-trigger",items:"> .elementor-section"}},getChildType:function(){return["section"]},isCollectionFilled:function(){return!1},initialize:function(){this.listenTo(this.collection,"add remove reset",this.onCollectionChanged).listenTo(elementor.channels.panelElements,"element:drag:start",this.onPanelElementDragStart).listenTo(elementor.channels.panelElements,"element:drag:end",this.onPanelElementDragEnd)},addSection:function(e,t){var n={id:elementor.helpers.getUniqueID(),elType:"section",settings:{},elements:[]};e&&_.extend(n,e);var i=this.addChildModel(n,t);return this.children.findByModelCid(i.cid)},onCollectionChanged:function(){elementor.saver.setFlagEditorChange(!0)},onPanelElementDragStart:function(){elementor.helpers.disableElementEvents(this.$el.find("iframe"))},onPanelElementDragEnd:function(){elementor.helpers.enableElementEvents(this.$el.find("iframe"))}}),e.exports=i},{"elementor-behaviors/duplicate":72,"elementor-behaviors/handle-duplicate":73,"elementor-behaviors/sortable":77,"elementor-elements/views/section":80,"elementor-views/base-container":124}],126:[function(e,t,n){var i;i=Marionette.CompositeView.extend({className:"elementor-panel-controls-stack",classes:{popover:"elementor-controls-popover"},activeTab:null,activeSection:null,templateHelpers:function(){return{elementData:elementor.getElementData(this.model)}},ui:function(){return{tabs:".elementor-panel-navigation-tab",reloadButton:".elementor-update-preview-button"}},events:function(){return{"click @ui.tabs":"onClickTabControl","click @ui.reloadButton":"onReloadButtonClick"}},modelEvents:{destroy:"onModelDestroy"},behaviors:{HandleInnerTabs:{behaviorClass:e("elementor-behaviors/inner-tabs")}},initialize:function(){this.initCollection(),this.listenTo(elementor.channels.deviceMode,"change",this.onDeviceModeChange)},initCollection:function(){this.collection=new Backbone.Collection(_.values(elementor.mergeControlsSettings(this.getOption("controls"))))},filter:function(e){if(e.get("tab")!==this.activeTab)return!1;if("section"===e.get("type"))return!0;var t=e.get("section");return!t||t===this.activeSection},isVisibleSectionControl:function(e){return this.activeTab===e.get("tab")},activateTab:function(e){this.activeTab=e,this.ui.tabs.removeClass("elementor-active").filter('[data-tab="'+e+'"]').addClass("elementor-active"),this.activateFirstSection()},activateSection:function(e){this.activeSection=e},activateFirstSection:function(){var t=this,e=t.collection.filter(function(e){return"section"===e.get("type")&&t.isVisibleSectionControl(e)});e[0]&&(e.filter(function(e){return t.activeSection===e.get("name")})[0]||t.activateSection(e[0].get("name")))},getChildView:function(e){var t=e.get("type");return elementor.getControlView(t)},handlePopovers:function(){var n,i=this,o=!1;i.removePopovers(),i.children.each(function(e){o&&n.append(e.$el);var t=e.model.get("popover");t&&(t.start&&(o=!0,n=jQuery("<div>",{class:i.classes.popover}),e.$el.before(n),n.append(e.$el)),t.end&&(o=!1))})},removePopovers:function(){this.$el.find("."+this.classes.popover).remove()},openActiveSection:function(){var t=this.activeSection,e=this.children.filter(function(e){return t===e.model.get("name")});e[0]&&e[0].ui.heading.addClass("elementor-open")},onRenderCollection:function(){this.openActiveSection(),this.handlePopovers()},onRenderTemplate:function(){this.activateTab(this.activeTab||this.ui.tabs.eq(0).data("tab"))},onModelDestroy:function(){this.destroy()},onClickTabControl:function(e){e.preventDefault();var t=this.$(e.currentTarget).data("tab");this.activeTab!==t&&(this.activateTab(t),this._renderChildren())},onReloadButtonClick:function(){elementor.reloadPreview()},onDeviceModeChange:function(){this.$el.removeClass("elementor-responsive-switchers-open")},onChildviewControlSectionClicked:function(e){var t=e.ui.heading.hasClass("elementor-open");this.activateSection(t?null:e.model.get("name")),this._renderChildren()},onChildviewResponsiveSwitcherClick:function(e,t){"desktop"===t&&this.$el.toggleClass("elementor-responsive-switchers-open")}}),t.exports=i},{"elementor-behaviors/inner-tabs":75}],127:[function(e,t,n){var i,o=e("elementor-views/base-sections-container"),r=e("elementor-views/add-section/independent");i=o.extend({template:Marionette.TemplateCache.get("#tmpl-elementor-preview"),className:"elementor-inner",childViewContainer:".elementor-section-wrap",onRender:function(){if(elementor.userCan("design")){var e=new r;e.render(),this.$el.append(e.$el)}}}),t.exports=i},{"elementor-views/add-section/independent":122,"elementor-views/base-sections-container":125}],128:[function(e,t,n){"use strict";t.exports=function(){var o,n=Array.prototype.slice,a={actions:{},filters:{}};function i(e,t,n,i){var o,r,s;if(a[e][t])if(n)if(o=a[e][t],i)for(s=o.length;s--;)(r=o[s]).callback===n&&r.context===i&&o.splice(s,1);else for(s=o.length;s--;)o[s].callback===n&&o.splice(s,1);else a[e][t]=[]}function r(e,t,n,i,o){var r={callback:n,priority:i,context:o},s=a[e][t];if(s){var l=!1;if(jQuery.each(s,function(){if(this.callback===n)return!(l=!0)}),l)return;s.push(r),s=function(e){for(var t,n,i,o=1,r=e.length;o<r;o++){for(t=e[o],n=o;(i=e[n-1])&&i.priority>t.priority;)e[n]=e[n-1],--n;e[n]=t}return e}(s)}else s=[r];a[e][t]=s}function s(e,t,n){var i,o,r=a[e][t];if(!r)return"filters"===e&&n[0];if(o=r.length,"filters"===e)for(i=0;i<o;i++)n[0]=r[i].callback.apply(r[i].context,n);else for(i=0;i<o;i++)r[i].callback.apply(r[i].context,n);return"filters"!==e||n[0]}return o={removeFilter:function(e,t){return"string"==typeof e&&i("filters",e,t),o},applyFilters:function(){var e=n.call(arguments),t=e.shift();return"string"==typeof t?s("filters",t,e):o},addFilter:function(e,t,n,i){return"string"==typeof e&&"function"==typeof t&&r("filters",e,t,n=parseInt(n||10,10),i),o},removeAction:function(e,t){return"string"==typeof e&&i("actions",e,t),o},doAction:function(){var e=n.call(arguments),t=e.shift();return"string"==typeof t&&s("actions",t,e),o},addAction:function(e,t,n,i){return"string"==typeof e&&"function"==typeof t&&r("actions",e,t,n=parseInt(n||10,10),i),o}}}},{}],129:[function(e,t,n){t.exports=new function(){var i={},t=function(e){var t=i[e.which];t&&jQuery.each(t,function(){this.isWorthHandling&&!this.isWorthHandling(e)||!this.allowAltKey&&e.altKey||(e.preventDefault(),this.handle(e))})};this.isControlEvent=function(e){return e[-1!==navigator.userAgent.indexOf("Mac OS X")?"metaKey":"ctrlKey"]},this.addHotKeyHandler=function(e,t,n){i[e]||(i[e]={}),i[e][t]=n},this.bindListener=function(e){e.on("keydown",t)}}},{}],130:[function(e,t,n){var i=e("./view-module");t.exports=i.extend({getDefaultSettings:function(){return{container:null,items:null,columnsCount:3,verticalSpaceBetween:30}},getDefaultElements:function(){return{$container:jQuery(this.getSettings("container")),$items:jQuery(this.getSettings("items"))}},run:function(){var l=[],a=this.elements.$container.position().top,c=this.getSettings(),d=c.columnsCount;a+=parseInt(this.elements.$container.css("margin-top"),10),this.elements.$items.each(function(e){var t=Math.floor(e/d),n=jQuery(this),i=n[0].getBoundingClientRect().height+c.verticalSpaceBetween;if(t){var o=n.position(),r=e%d,s=o.top-a-l[r];s-=parseInt(n.css("margin-top"),10),s*=-1,n.css("margin-top",s+"px"),l[r]+=i}else l.push(i)})}})},{"./view-module":132}],131:[function(e,t,n){var r=function(){var r,s=jQuery,t=arguments,l=this,o={};this.getItems=function(e,t){if(t){var n=t.split("."),i=n.splice(0,1);if(!n.length)return e[i];if(!e[i])return;return this.getItems(e[i],n.join("."))}return e},this.getSettings=function(e){return this.getItems(r,e)},this.setSettings=function(e,t,n){if(n||(n=r),"object"==typeof e)return s.extend(n,e),l;var i=e.split("."),o=i.splice(0,1);return i.length?(n[o]||(n[o]={}),l.setSettings(i.join("."),t,n[o])):(n[o]=t,l)},this.forceMethodImplementation=function(e){var t=e.callee.name;throw new ReferenceError("The method "+t+" must to be implemented in the inheritor child.")},this.on=function(e,t){return"object"==typeof e?s.each(e,function(e){l.on(e,this)}):e.split(" ").forEach(function(e){o[e]||(o[e]=[]),o[e].push(t)}),l},this.off=function(e,t){if(!o[e])return l;if(!t)return delete o[e],l;var n=o[e].indexOf(t);return-1!==n&&delete o[e][n],l},this.trigger=function(e){var t="on"+e[0].toUpperCase()+e.slice(1),n=Array.prototype.slice.call(arguments,1);l[t]&&l[t].apply(l,n);var i=o[e];return i&&s.each(i,function(e,t){t.apply(l,n)}),l},l.__construct.apply(l,t),s.each(l,function(e){var t=l[e];"function"==typeof t&&(l[e]=function(){return t.apply(l,arguments)})}),function(){r=l.getDefaultSettings();var e=t[0];e&&s.extend(r,e)}(),l.trigger("init")};r.prototype.__construct=function(){},r.prototype.getDefaultSettings=function(){return{}},r.extendsCount=0,r.extend=function(e){var t=jQuery,n=this,i=function(){return n.apply(this,arguments)};t.extend(i,n),(i.prototype=Object.create(t.extend({},n.prototype,e))).constructor=i;var o=++r.extendsCount;return i.prototype.getConstructorID=function(){return o},i.__super__=n.prototype,i},t.exports=r},{}],132:[function(e,t,n){var i;i=e("./module").extend({elements:null,getDefaultElements:function(){return{}},bindEvents:function(){},onInit:function(){this.initElements(),this.bindEvents()},initElements:function(){this.elements=this.getDefaultElements()}}),t.exports=i},{"./module":131}],133:[function(e,t,n){t.exports=Marionette.Behavior.extend({listenerAttached:!1,onBeforeRender:function(){this.view.collection&&!this.listenerAttached&&(this.view.collection.on("update",this.saveCollectionHistory,this),this.listenerAttached=!0)},saveCollectionHistory:function(e,t){if(elementor.history.history.getActive()){var n,i,o,r;t.add?(o=(i=t.changes.added)[0],r="add"):(o=(i=t.changes.removed)[0],r="remove");var s=elementor.history.history.getModelLabel(o);if(s){var l=[];_.each(i,function(e){l.push(e.toJSON({copyHtmlCache:!0}))}),n={type:r,elementType:o.get("elType"),elementID:o.get("id"),title:s,history:{behavior:this,collection:e,event:t,models:l}},elementor.history.history.addItem(n)}}},add:function(e,t,n){"section"===e[0].elType&&_.each(e,function(e){e.dontFillEmpty=!0}),t.addChildModel(e,{at:n,silent:0})},remove:function(e,t){t.remove(e,{silent:0})},restore:function(e,t){var n,i=e.get("type"),o=e.get("history"),r=!1;if(o.behavior.view.model){var s=o.behavior.view.model.get("id"),l=elementor.history.history.findView(s);l&&(n=l.getBehavior("CollectionHistory"))}switch(n||(n=o.behavior),n.view.collection.off("update",n.saveCollectionHistory),i){case"add":t?this.add(o.models,n.view,o.event.index):this.remove(o.models,n.view.collection),r=!0;break;case"remove":t?this.remove(o.models,n.view.collection):this.add(o.models,n.view,o.event.index),r=!0}return n.view.collection.on("update",n.saveCollectionHistory,o.behavior),r}})},{}],134:[function(e,t,n){var i=e("./item");t.exports=Backbone.Collection.extend({model:i})},{"./item":137}],135:[function(e,t,n){t.exports=Marionette.Behavior.extend({oldValues:[],listenerAttached:!1,initialize:function(){this.lazySaveTextHistory=_.debounce(this.saveTextHistory.bind(this),800)},onBeforeRender:function(){this.listenerAttached||(this.listenTo(this.view.getEditModel().get("settings"),"change",this.saveHistory),this.listenerAttached=!0)},saveTextHistory:function(e,t,n){var i,o={},r=e.get(n.name);i=r instanceof Backbone.Collection?r.toJSON():r,o[n.name]={old:this.oldValues[n.name],new:i};var s={type:"change",elementType:"control",title:elementor.history.history.getModelLabel(e),subTitle:n.label,history:{behavior:this,changed:o,model:this.view.getEditModel().toJSON()}};elementor.history.history.addItem(s),delete this.oldValues[n.name]},saveHistory:function(t,e){if(elementor.history.history.getActive()){var n=Object.keys(t.changed),i=t.controls[n[0]];if(!i&&e&&e.control&&(i=e.control),n.length&&i){if(1===n.length)return _.isUndefined(this.oldValues[i.name])&&(this.oldValues[i.name]=t.previous(i.name)),void(elementor.history.history.isItemStarted()?this.saveTextHistory(t,n,i):this.lazySaveTextHistory(t,n,i));var o={};_.each(n,function(e){o[e]={old:t.previous(e),new:t.get(e)}});var r={type:"change",elementType:"control",title:elementor.history.history.getModelLabel(t),history:{behavior:this,changed:o,model:this.view.getEditModel().toJSON()}};1===n.length&&(r.subTitle=i.label),elementor.history.history.addItem(r)}}},restore:function(e,n){var t=e.get("history"),i=t.model.id,o=elementor.history.history.findView(i);if(o){var r=(o.getEditModel?o.getEditModel():o.model).get("settings"),s=o.getBehavior("ElementHistory");s.stopListening(r,"change",this.saveHistory);var l={};_.each(t.changed,function(e,t){l[t]=n?e.new:e.old}),r.set(l),_.each(t.changed,function(e,t){r.trigger("change:external:"+t)}),e.set("status",n?"not_applied":"applied"),s.listenTo(r,"change",this.saveHistory)}}})},{}],136:[function(e,t,n){t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-history-no-items",id:"elementor-panel-history-no-items",className:"elementor-panel-nerd-box"})},{}],137:[function(e,t,n){t.exports=Backbone.Model.extend({defaults:{id:0,type:"",elementType:"",status:"not_applied",title:"",subTitle:"",action:"",history:{}},initialize:function(){this.set("items",new Backbone.Collection)}})},{}],138:[function(e,t,n){var r=e("./collection"),m=e("./item"),u=e("./element-behavior"),h=e("./collection-behavior");t.exports=new function(){var s=this,l=null,a=new r,c=!1,t=!0,d={add:elementor.translate("added"),remove:elementor.translate("removed"),change:elementor.translate("edited"),move:elementor.translate("moved"),duplicate:elementor.translate("duplicated")},e=function(e){return e.ElementHistory={behaviorClass:u},e.CollectionHistory={behaviorClass:h},e},n=function(e){return e.CollectionHistory={behaviorClass:h},e},i=function(){elementor.hotKeys.addHotKeyHandler(90,"historyNavigation",{isWorthHandling:function(e){return a.length&&!jQuery(e.target).is("input, textarea, [contenteditable=true]")},handle:function(e){var t,n,i,o;t=90===e.which&&e.shiftKey,n=a.find(function(e){return"not_applied"===e.get("status")}),i=a.indexOf(n),o=t?i-1:i+1,!t&&!n||o<0||o>=a.length||s.doItem(o)}}),elementor.hotKeys.addHotKeyHandler(72,"showHistoryPage",{isWorthHandling:function(e){return elementor.hotKeys.isControlEvent(e)&&e.shiftKey},handle:function(){elementor.getPanelView().setPage("historyPage")}})},o=function(){if(2<=a.length){var e=a.at(a.length-2);c="not_applied"===e.get("status")}};this.setActive=function(e){t=e},this.getActive=function(){return t},this.getItems=function(){return a},this.startItem=function(e){l=this.addItem(e)},this.endItem=function(){l=null},this.isItemStarted=function(){return null!==l},this.addItem=function(e){if(this.getActive()){for(a.length||a.add({status:"not_applied",title:elementor.translate("editing_started"),subTitle:"",action:"",editing_started:!0});a.length&&"applied"===a.first().get("status");)a.shift();var t,n=l||(new Date).getTime(),i=a.findWhere({id:n});i||(i=new m({id:n,title:e.title,subTitle:e.subTitle,action:(t=e,d[t.type]?d[t.type]:t.type),type:e.type,elementType:e.elementType}),s.startItemTitle="",s.startItemAction="");var o=0;"column"===e.elementType&&"remove"===e.type&&"column"===i.get("elementType")&&(o=1),i.get("items").add(e,{at:o}),a.add(i,{at:0});var r=elementor.getPanelView();return"historyPage"===r.getCurrentPageName()&&r.getCurrentPageView().render(),n}},this.doItem=function(e){this.setActive(!1);var t=a.at(e);"not_applied"===t.get("status")?this.undoItem(e):this.redoItem(e),this.setActive(!0);var n,i=elementor.getPanelView(),o=i.getCurrentPageView();if("editor"===i.getCurrentPageName())o.getOption("editedElementView").isDestroyed?i.setPage("historyPage"):n=o.getOption("editedElementView");else if("historyPage"===i.getCurrentPageName()&&o.render(),t instanceof Backbone.Model&&t.get("items").length){var r=t.get("items").first().get("history").behavior.view;r.model&&(n=s.findView(r.model.get("id")))}n&&!elementor.helpers.isInViewport(n.$el[0],elementor.$previewContents.find("html")[0])&&elementor.helpers.scrollToView(n),t.get("editing_started")&&(c||elementor.saver.setFlagEditorChange(!1))},this.undoItem=function(e){for(var t,n=0;n<e;n++)"not_applied"===(t=a.at(n)).get("status")&&(t.get("items").each(function(e){var t=e.get("history");t&&t.behavior.restore(e)}),t.set("status","applied"))},this.redoItem=function(e){for(var t=a.length-1;e<=t;t--){var n=a.at(t);if("applied"===n.get("status")){var i=_.toArray(n.get("items").models).reverse();_(i).each(function(e){var t=e.get("history");t&&t.behavior.restore(e,!0)}),n.set("status","not_applied")}}},this.getModelLabel=function(e){return e instanceof Backbone.Model||(e=new Backbone.Model(e)),elementor.getElementData(e).title},this.findView=function(n,e){var i=this,o=!1;return e||(e=elementor.sections.currentView.children),_.each(e._views,function(e){if(!o){var t=e.getEditModel?e.getEditModel():e.model;n===t.get("id")?o=e:e.children&&e.children.length&&(o=i.findView(n,e.children))}}),o},this.startMovingItem=function(e){elementor.history.history.startItem({type:"move",title:s.getModelLabel(e),elementType:e.get("elType")})},this.startInsertTemplate=function(e){elementor.history.history.startItem({type:"add",title:elementor.translate("template"),subTitle:e.get("title"),elementType:"template"})},this.startDropElement=function(){var e=elementor.channels.panelElements.request("element:selected");elementor.history.history.startItem({type:"add",title:s.getModelLabel(e.model),elementType:e.model.get("widgetType")||e.model.get("elType")})},this.startAddElement=function(e){elementor.history.history.startItem({type:"add",title:s.getModelLabel(e),elementType:e.elType})},this.startDuplicateElement=function(e){elementor.history.history.startItem({type:"duplicate",title:s.getModelLabel(e),elementType:e.get("elType")})},this.startRemoveElement=function(e){elementor.history.history.startItem({type:"remove",title:s.getModelLabel(e),elementType:e.get("elType")})},i(),elementor.hooks.addFilter("elements/base/behaviors",e),elementor.hooks.addFilter("elements/base-section-container/behaviors",n),elementor.channels.data.on("drag:before:update",s.startMovingItem).on("drag:after:update",s.endItem).on("element:before:add",s.startAddElement).on("element:after:add",s.endItem).on("element:before:remove",s.startRemoveElement).on("element:after:remove",s.endItem).on("element:before:duplicate",s.startDuplicateElement).on("element:after:duplicate",s.endItem).on("section:before:drop",s.startDropElement).on("section:after:drop",s.endItem).on("template:before:insert",s.startInsertTemplate).on("template:after:insert",s.endItem),elementor.channels.editor.on("saved",o)}},{"./collection":134,"./collection-behavior":133,"./element-behavior":135,"./item":137}],139:[function(e,t,n){t.exports=Marionette.CompositeView.extend({id:"elementor-panel-history",template:"#tmpl-elementor-panel-history-tab",childView:Marionette.ItemView.extend({template:"#tmpl-elementor-panel-history-item",ui:{item:".elementor-history-item"},triggers:{"click @ui.item":"item:click"}}),childViewContainer:"#elementor-history-list",currentItem:null,onRender:function(){var n=this;_.defer(function(){if(n.children.length){var e=n.collection.find(function(e){return"not_applied"===e.get("status")}),t=n.children.findByModel(e);n.updateCurrentItem(t.$el)}})},updateCurrentItem:function(e){var t="elementor-history-item-current";this.currentItem&&this.currentItem.removeClass(t),this.currentItem=e,this.currentItem.addClass(t)},onChildviewItemClick:function(e,t){if(e.$el!==this.currentItem){var n=t.model.collection.findIndex(t.model);elementor.history.history.doItem(n),this.updateCurrentItem(e.$el),this.isDestroyed||this.render()}}})},{}],140:[function(n,e,t){var i,o=n("./panel-page");i=function(){var e=this,t=function(){elementor.getPanelView().addPage("historyPage",{view:o,title:elementor.translate("history")})};jQuery(window).on("elementor:init",function(){elementor.on("preview:loaded",t),e.history=n("./history/manager"),e.revisions=n("./revisions/manager"),e.revisions.init()})},e.exports=new i},{"./history/manager":138,"./panel-page":141,"./revisions/manager":144}],141:[function(e,t,n){var i=e("./history/panel-tab"),o=e("./history/empty"),r=e("./revisions/panel-tab"),s=e("./revisions/empty");t.exports=Marionette.LayoutView.extend({template:"#tmpl-elementor-panel-history-page",regions:{content:"#elementor-panel-history-content"},ui:{tabs:".elementor-panel-navigation-tab"},events:{"click @ui.tabs":"onTabClick"},regionViews:{},currentTab:null,initialize:function(){this.initRegionViews()},initRegionViews:function(){var e=elementor.history.history.getItems(),t=elementor.history.revisions.getItems();this.regionViews={history:{region:this.content,view:function(){return e.length?i:o},options:{collection:e}},revisions:{region:this.content,view:function(){return t.length?r:s},options:{collection:t}}}},activateTab:function(e){this.ui.tabs.removeClass("elementor-active").filter('[data-view="'+e+'"]').addClass("elementor-active"),this.showView(e)},getCurrentTab:function(){return this.currentTab},showView:function(e){var t=this.regionViews[e],n=t.options||{},i=t.view;"function"==typeof i&&(i=t.view()),n.viewName=e,this.currentTab=new i(n),t.region.show(this.currentTab)},onRender:function(){this.showView("history")},onTabClick:function(e){this.activateTab(e.currentTarget.dataset.view)},onDestroy:function(){elementor.getPanelView().getFooterView().ui.history.removeClass("elementor-open")}})},{"./history/empty":136,"./history/panel-tab":139,"./revisions/empty":143,"./revisions/panel-tab":146}],142:[function(e,t,n){var i=e("./model");t.exports=Backbone.Collection.extend({model:i,comparator:function(e){return-e.get("timestamp")}})},{"./model":145}],143:[function(e,t,n){t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-revisions-no-revisions",id:"elementor-panel-revisions-no-revisions",className:"elementor-panel-nerd-box"})},{}],144:[function(e,t,n){var i,o=e("./collection");i=function(){var i,n=this;this.getItems=function(){return i};var t=function(t){if(t.latest_revisions&&n.addRevisions(t.latest_revisions),t.revisions_ids){var e=i.filter(function(e){return-1!==t.revisions_ids.indexOf(e.get("id"))});i.reset(e)}};this.setEditorData=function(e){elementor.getRegion("sections").currentView.collection.reset(e)},this.getRevisionDataAsync=function(e,t){return _.extend(t,{data:{id:e}}),elementor.ajax.send("get_revision_data",t)},this.addRevisions=function(e){e.forEach(function(e){var t=i.findWhere({id:e.id});t&&i.remove(t),i.add(e)})},this.deleteRevision=function(t,n){var e={data:{id:t.get("id")},success:function(){if(n.success&&n.success(),t.destroy(),!i.length){var e=elementor.getPanelView();"historyPage"===e.getCurrentPageName()&&e.getCurrentPageView().activateTab("revisions")}}};n.error&&(e.error=n.error),elementor.ajax.send("delete_revision",e)},this.init=function(){var e;i=new o(elementor.config.revisions),elementor.channels.editor.on("saved",t),e={isWorthHandling:function(){var e=elementor.getPanelView();if("historyPage"!==e.getCurrentPageName())return!1;var t=e.getCurrentPageView().getCurrentTab();return t.currentPreviewId&&t.currentPreviewItem&&1<t.children.length},handle:function(e){elementor.getPanelView().getCurrentPageView().getCurrentTab().navigate(38===e.which)}},elementor.hotKeys.addHotKeyHandler(38,"revisionNavigation",e),elementor.hotKeys.addHotKeyHandler(40,"revisionNavigation",e)}},t.exports=new i},{"./collection":142}],145:[function(e,t,n){var i;(i=Backbone.Model.extend()).prototype.sync=function(){return null},t.exports=i},{}],146:[function(e,t,n){t.exports=Marionette.CompositeView.extend({id:"elementor-panel-revisions",template:"#tmpl-elementor-panel-revisions",childView:e("./view"),childViewContainer:"#elementor-revisions-list",ui:{discard:".elementor-panel-scheme-discard .elementor-button",apply:".elementor-panel-scheme-save .elementor-button"},events:{"click @ui.discard":"onDiscardClick","click @ui.apply":"onApplyClick"},isRevisionApplied:!1,jqueryXhr:null,currentPreviewId:null,currentPreviewItem:null,initialize:function(){this.listenTo(elementor.channels.editor,"saved",this.onEditorSaved),this.currentPreviewId=elementor.config.current_revision_id},getRevisionViewData:function(t){var n=this;this.jqueryXhr=elementor.history.revisions.getRevisionDataAsync(t.model.get("id"),{success:function(e){elementor.history.revisions.setEditorData(e.elements),elementor.settings.page.model.set(e.settings),n.setRevisionsButtonsActive(!0),n.jqueryXhr=null,t.$el.removeClass("elementor-revision-item-loading"),n.enterReviewMode()},error:function(){t.$el.removeClass("elementor-revision-item-loading"),"abort"!==n.jqueryXhr.statusText&&(n.currentPreviewItem=null,n.currentPreviewId=null,alert("An error occurred"))}})},setRevisionsButtonsActive:function(e){this.ui.apply.add(this.ui.discard).prop("disabled",!e)},deleteRevision:function(e){var t=this;e.$el.addClass("elementor-revision-item-loading"),elementor.history.revisions.deleteRevision(e.model,{success:function(){e.model.get("id")===t.currentPreviewId&&t.onDiscardClick(),t.currentPreviewId=null},error:function(){e.$el.removeClass("elementor-revision-item-loading"),alert("An error occurred")}})},enterReviewMode:function(){elementor.changeEditMode("review")},exitReviewMode:function(){elementor.changeEditMode("edit")},navigate:function(e){var t=this.collection.indexOf(this.currentPreviewItem.model),n=e?t-1:t+1;n<0&&(n=this.collection.length-1),n>=this.collection.length&&(n=0),this.children.findByIndex(n).ui.detailsArea.trigger("click")},onEditorSaved:function(){this.exitReviewMode(),this.setRevisionsButtonsActive(!1),this.currentPreviewId=elementor.config.current_revision_id},onApplyClick:function(){elementor.saver.setFlagEditorChange(!0),elementor.saver.saveAutoSave(),this.isRevisionApplied=!0,this.currentPreviewId=null},onDiscardClick:function(){elementor.history.revisions.setEditorData(elementor.config.data),elementor.saver.setFlagEditorChange(this.isRevisionApplied),this.isRevisionApplied=!1,this.setRevisionsButtonsActive(!1),this.currentPreviewId=null,this.exitReviewMode(),this.currentPreviewItem&&this.currentPreviewItem.$el.removeClass("elementor-revision-current-preview")},onDestroy:function(){this.currentPreviewId&&this.currentPreviewId!==elementor.config.current_revision_id&&this.onDiscardClick()},onRenderCollection:function(){if(this.currentPreviewId){var e=this.collection.findWhere({id:this.currentPreviewId});e&&(this.currentPreviewItem=this.children.findByModelCid(e.cid),this.currentPreviewItem.$el.addClass("elementor-revision-current-preview"))}},onChildviewDetailsAreaClick:function(e){var t=this,n=e.model.get("id");n!==t.currentPreviewId&&(this.jqueryXhr&&this.jqueryXhr.abort(),t.currentPreviewItem&&t.currentPreviewItem.$el.removeClass("elementor-revision-current-preview"),e.$el.addClass("elementor-revision-current-preview elementor-revision-item-loading"),elementor.saver.isEditorChanged()&&null===t.currentPreviewId?elementor.saver.saveEditor({status:"autosave",onSuccess:function(){t.getRevisionViewData(e)}}):t.getRevisionViewData(e),t.currentPreviewItem=e,t.currentPreviewId=n)},onChildviewDeleteClick:function(e){var t=this,n=e.model.get("type");elementor.dialogsManager.createWidget("confirm",{message:elementor.translate("dialog_confirm_delete",[n]),headerMessage:elementor.translate("delete_element",[n]),strings:{confirm:elementor.translate("delete"),cancel:elementor.translate("cancel")},defaultOption:"confirm",onConfirm:function(){t.deleteRevision(e)}}).show()}})},{"./view":147}],147:[function(e,t,n){t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-revisions-revision-item",className:"elementor-revision-item",ui:{detailsArea:".elementor-revision-item__details",deleteButton:".elementor-revision-item__tools-delete"},triggers:{"click @ui.detailsArea":"detailsArea:click","click @ui.deleteButton":"delete:click"}})},{}]},{},[115,116,66]);
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+!function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},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 i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},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=45)}([function(e,t,n){"use strict";var i,o=n(7),r=n(97),s=n(18);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return _.extend(e,{input:'input[data-setting][type!="checkbox"][type!="radio"]',checkbox:'input[data-setting][type="checkbox"]',radio:'input[data-setting][type="radio"]',select:"select[data-setting]",textarea:"textarea[data-setting]",responsiveSwitchers:".elementor-responsive-switcher",contentEditable:'[contenteditable="true"]',tooltipTarget:".tooltip-target"}),e},templateHelpers:function(){var e=o.prototype.templateHelpers.apply(this,arguments);return e.data.controlValue=this.getControlValue(),e},events:function(){return{"input @ui.input":"onBaseInputChange","change @ui.checkbox":"onBaseInputChange","change @ui.radio":"onBaseInputChange","input @ui.textarea":"onBaseInputChange","change @ui.select":"onBaseInputChange","input @ui.contentEditable":"onBaseInputChange","click @ui.responsiveSwitchers":"onResponsiveSwitchersClick"}},behaviors:function(){var e={},t=this.options.model.get("dynamic");if(t&&t.active){var n=_.filter(elementor.dynamicTags.getConfig("tags"),function(e){return _.intersection(e.categories,t.categories).length});n.length&&(e.tags={behaviorClass:r,tags:n,dynamicSettings:t})}return e},initialize:function(e){o.prototype.initialize.apply(this,arguments),this.registerValidators(),this.listenTo(this.elementSettingsModel,"change:external:"+this.model.get("name"),this.onAfterExternalChange)},getControlValue:function(){return this.elementSettingsModel.get(this.model.get("name"))},setValue:function(e){this.setSettingsModel(e)},setSettingsModel:function(e){this.elementSettingsModel.set(this.model.get("name"),e),this.triggerMethod("settings:change")},applySavedValue:function(){this.setInputValue('[data-setting="'+this.model.get("name")+'"]',this.getControlValue())},getEditSettings:function(e){var t=this.getOption("elementEditSettings").toJSON();return e?t[e]:t},setEditSetting:function(e,t){this.getOption("elementEditSettings").set(e,t)},getInputValue:function(e){var t=this.$(e);if(t.is('[contenteditable="true"]'))return t.html();var n=t.val(),i=t.attr("type");return-1!==["radio","checkbox"].indexOf(i)?t.prop("checked")?n:"":"number"===i&&_.isFinite(n)?+n:("SELECT"===e.tagName&&t.prop("multiple")&&null===n&&(n=[]),n)},setInputValue:function(e,t){var n=this.$(e),i=n.attr("type");"checkbox"===i?n.prop("checked",!!t):"radio"===i?n.filter('[value="'+t+'"]').prop("checked",!0):n.val(t)},addValidator:function(e){this.validators.push(e)},registerValidators:function(){this.validators=[];var e={};this.model.get("required")&&(e.required=!0),jQuery.isEmptyObject(e)||this.addValidator(new s({validationTerms:e}))},onRender:function(){o.prototype.onRender.apply(this,arguments),this.model.get("responsive")&&this.renderResponsiveSwitchers(),this.applySavedValue(),this.triggerMethod("ready"),this.toggleControlVisibility(),this.addTooltip()},onBaseInputChange:function(e){clearTimeout(this.correctionTimeout);var t=e.currentTarget,n=this.getInputValue(t),i=this.validators.slice(0),o=this.elementSettingsModel.validators[this.model.get("name")];if(o&&(i=i.concat(o)),i){var r=this.getControlValue(t.dataset.setting);if(!i.every(function(e){return e.isValid(n,r)}))return void(this.correctionTimeout=setTimeout(this.setInputValue.bind(this,t,r),1200))}this.updateElementModel(n,t),this.triggerMethod("input:change",e)},onResponsiveSwitchersClick:function(e){var t=jQuery(e.currentTarget).data("device");elementor.changeDeviceMode(t),this.triggerMethod("responsive:switcher:click",t)},renderResponsiveSwitchers:function(){var e=Marionette.Renderer.render("#tmpl-elementor-control-responsive-switchers",this.model.attributes);this.ui.controlTitle.after(e)},onAfterExternalChange:function(){this.hideTooltip(),this.applySavedValue()},addTooltip:function(){this.ui.tooltipTarget&&this.ui.tooltipTarget.tipsy({gravity:function(){var e=jQuery(this).data("tooltip-pos");return void 0!==e?e:"n"},title:function(){return this.getAttribute("data-tooltip")}})},hideTooltip:function(){this.ui.tooltipTarget&&this.ui.tooltipTarget.tipsy("hide")},updateElementModel:function(e){this.setValue(e)}},{getStyleValue:function(e,t){return t},onPasteStyle:function(){return!0}}),e.exports=i},function(e,t,n){"use strict";var i;i=n(2).extend({elements:null,getDefaultElements:function(){return{}},bindEvents:function(){},onInit:function(){this.initElements(),this.bindEvents()},initElements:function(){this.elements=this.getDefaultElements()}}),e.exports=i},function(e,t,n){"use strict";var i="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},o=function(){var e,t=jQuery,n=arguments,o=this,r={};this.getItems=function(e,t){if(t){var n=t.split("."),i=n.splice(0,1);if(!n.length)return e[i];if(!e[i])return;return this.getItems(e[i],n.join("."))}return e},this.getSettings=function(t){return this.getItems(e,t)},this.setSettings=function(n,r,s){if(s||(s=e),"object"===(void 0===n?"undefined":i(n)))return t.extend(s,n),o;var a=n.split("."),l=a.splice(0,1);return a.length?(s[l]||(s[l]={}),o.setSettings(a.join("."),r,s[l])):(s[l]=r,o)},this.forceMethodImplementation=function(e){var t=e.callee.name;throw new ReferenceError("The method "+t+" must to be implemented in the inheritor child.")},this.on=function(e,n){return"object"===(void 0===e?"undefined":i(e))?(t.each(e,function(e){o.on(e,this)}),o):(e.split(" ").forEach(function(e){r[e]||(r[e]=[]),r[e].push(n)}),o)},this.off=function(e,t){if(!r[e])return o;if(!t)return delete r[e],o;var n=r[e].indexOf(t);return-1!==n&&delete r[e][n],o},this.trigger=function(e){var n="on"+e[0].toUpperCase()+e.slice(1),i=Array.prototype.slice.call(arguments,1);o[n]&&o[n].apply(o,i);var s=r[e];return s?(t.each(s,function(e,t){t.apply(o,i)}),o):o},o.__construct.apply(o,n),t.each(o,function(e){var t=o[e];"function"==typeof t&&(o[e]=function(){return t.apply(o,arguments)})}),function(){e=o.getDefaultSettings();var i=n[0];i&&t.extend(e,i)}(),o.trigger("init")};o.prototype.__construct=function(){},o.prototype.getDefaultSettings=function(){return{}},o.extendsCount=0,o.extend=function(e){var t=jQuery,n=this,i=function(){return n.apply(this,arguments)};t.extend(i,n),(i.prototype=Object.create(t.extend({},n.prototype,e))).constructor=i;var r=++o.extendsCount;return i.prototype.getConstructorID=function(){return r},i.__super__=n.prototype,i},e.exports=o},function(e,t,n){"use strict";var i,o="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};i=Backbone.Model.extend({options:{},initialize:function(e,t){var n=this;if(n.options=t,n.controls=elementor.mergeControlsSettings(t.controls),n.validators={},n.controls){var i=e||{},o={};_.each(n.controls,function(e){if(!(-1!==e.features.indexOf("ui"))){var t=e.name;o[t]=e.default;var r=e.dynamic&&e.dynamic.active,s=r&&i.__dynamic__&&i.__dynamic__[t];r&&!s&&e.dynamic.default&&(i.__dynamic__||(i.__dynamic__={}),i.__dynamic__[t]=e.dynamic.default,s=!0);var a=jQuery.isPlainObject(e.default);void 0===i[t]||!a||_.isObject(i[t])||s||(elementor.debug.addCustomError(new TypeError("An invalid argument supplied as multiple control value"),"InvalidElementData","Element `"+(n.get("widgetType")||n.get("elType"))+"` got <"+i[t]+"> as `"+t+"` value. Expected array or object."),delete i[t]),void 0===i[t]&&(i[t]=o[t])}}),n.defaults=o,n.handleRepeaterData(i),n.set(i)}},handleRepeaterData:function(e){_.each(this.controls,function(t){t.is_repeater&&(e[t.name]instanceof Backbone.Collection||(e[t.name]=new Backbone.Collection(e[t.name],{model:function(e,n){return(n=n||{}).controls=t.fields,e._id||(e._id=elementor.helpers.getUniqueID()),new i(e,n)}})))})},getFontControls:function(){return _.filter(this.getActiveControls(),function(e){return"font"===e.type})},getStyleControls:function(e,t){var n=this;e=elementor.helpers.cloneObject(n.getActiveControls(e,t));var i=[];return jQuery.each(e,function(){var t=this,o=elementor.config.controls[t.type];if((t=jQuery.extend({},o,t)).fields){var r=[];n.attributes[t.name].each(function(e){r.push(n.getStyleControls(t.fields,e.attributes))}),t.styleFields=r}(t.fields||t.dynamic&&t.dynamic.active||n.isStyleControl(t.name,e))&&i.push(t)}),i},isStyleControl:function(e,t){t=t||this.controls;var n=_.find(t,function(t){return e===t.name});return n&&!_.isEmpty(n.selectors)},getClassControls:function(e){return e=e||this.controls,_.filter(e,function(e){return!_.isUndefined(e.prefix_class)})},isClassControl:function(e){var t=_.find(this.controls,function(t){return e===t.name});return t&&!_.isUndefined(t.prefix_class)},getControl:function(e){return _.find(this.controls,function(t){return e===t.name})},getActiveControls:function(e,t){var n={};return e||(e=this.controls),t||(t=this.attributes),_.each(e,function(e,i){elementor.helpers.isActiveControl(e,t)&&(n[i]=e)}),n},clone:function(){return new i(elementor.helpers.cloneObject(this.attributes),elementor.helpers.cloneObject(this.options))},setExternalChange:function(e,t){var n,i=this;"object"===(void 0===e?"undefined":o(e))?n=e:(n={})[e]=t,i.set(n),jQuery.each(n,function(e,t){i.trigger("change:external:"+e,t)})},parseDynamicSettings:function(e,t,n){var i=this;return e=elementor.helpers.cloneObject(e||i.attributes),t=t||{},n=n||this.controls,jQuery.each(n,function(){var n,o=this;if("repeater"!==o.type){if(n=e.__dynamic__&&e.__dynamic__[o.name]){var r=o.dynamic;if(void 0===r&&(r=elementor.config.controls[o.type].dynamic),r&&r.active){var s;try{s=elementor.dynamicTags.parseTagsText(n,r,elementor.dynamicTags.getTagDataContent)}catch(e){if(elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR!==e.message)throw e;s="",t.onServerRequestStart&&t.onServerRequestStart(),elementor.dynamicTags.refreshCacheFromServer(function(){t.onServerRequestEnd&&t.onServerRequestEnd()})}r.property?e[o.name][r.property]=s:e[o.name]=s}}}else(n=e[o.name]).forEach(function(e,r){n[r]=i.parseDynamicSettings(e,t,o.fields)})}),e},toJSON:function(e){var t=Backbone.Model.prototype.toJSON.call(this);if(e=e||{},delete t.widgetType,delete t.elType,delete t.isInner,_.each(t,function(e,n){e&&e.toJSON&&(t[n]=e.toJSON())}),e.removeDefault){var n=this.controls;_.each(t,function(e,i){var r=n[i];if(r){if(r.save_default||("text"===r.type||"textarea"===r.type)&&t[i])return;if(t[i]&&"object"===o(t[i])){if(Object.keys(t[i]).length!==Object.keys(r.default).length)return;var s=!0;_.each(t[i],function(e,n){if(t[i][n]!==r.default[n])return s=!1}),s&&delete t[i]}else t[i]===r.default&&delete t[i]}})}return elementor.helpers.cloneObject(t)}}),e.exports=i},function(e,t,n){"use strict";var i,o="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};i=n(0).extend({applySavedValue:function(){var e=this.getControlValue(),t=this.$("[data-setting]"),n=this;_.each(e,function(e,i){var o=t.filter(function(){return i===this.dataset.setting});n.setInputValue(o,e)})},getControlValue:function(e){var t=this.elementSettingsModel.get(this.model.get("name"));if(!jQuery.isPlainObject(t))return{};if(e){var n=t[e];return void 0===n&&(n=""),n}return elementor.helpers.cloneObject(t)},setValue:function(e,t){var n=this.getControlValue();"object"===(void 0===e?"undefined":o(e))?_.each(e,function(e,t){n[t]=e}):n[e]=t,this.setSettingsModel(n)},updateElementModel:function(e,t){var n=t.dataset.setting;this.setValue(n,e)}},{getStyleValue:function(e,t){return _.isObject(t)?t[e]:""}}),e.exports=i},,function(e,t,n){"use strict";var i;i=n(0).extend({getSelect2Placeholder:function(){return this.ui.select.children('option:first[value=""]').text()},getSelect2DefaultOptions:function(){return{allowClear:!0,placeholder:this.getSelect2Placeholder(),dir:elementor.config.is_rtl?"rtl":"ltr"}},getSelect2Options:function(){return jQuery.extend(this.getSelect2DefaultOptions(),this.model.get("select2options"))},onReady:function(){this.ui.select.select2(this.getSelect2Options())},onBeforeDestroy:function(){this.ui.select.data("select2")&&this.ui.select.select2("destroy"),this.$el.remove()}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.CompositeView.extend({ui:function(){return{controlTitle:".elementor-control-title"}},behaviors:function(){return elementor.hooks.applyFilters("controls/base/behaviors",{},this)},getBehavior:function(e){return this._behaviors[Object.keys(this.behaviors()).indexOf(e)]},className:function(){var e="elementor-control elementor-control-"+this.model.get("name")+" elementor-control-type-"+this.model.get("type"),t=this.model.get("classes"),n=this.model.get("responsive");return _.isEmpty(t)||(e+=" "+t),_.isEmpty(n)||(e+=" elementor-control-responsive-"+n.max),e},templateHelpers:function(){var e={_cid:this.model.cid};return{data:_.extend({},this.model.toJSON(),e)}},getTemplate:function(){return Marionette.TemplateCache.get("#tmpl-elementor-control-"+this.model.get("type")+"-content")},initialize:function(e){this.elementSettingsModel=e.elementSettingsModel;var t=this.model.get("type"),n=jQuery.extend(!0,{},elementor.config.controls[t],this.model.attributes);this.model.set(n),this.listenTo(this.elementSettingsModel,"change",this.toggleControlVisibility)},toggleControlVisibility:function(){var e=elementor.helpers.isActiveControl(this.model,this.elementSettingsModel.attributes);this.$el.toggleClass("elementor-hidden-control",!e),elementor.getPanelView().updateScrollbar()},onRender:function(){var e=this.model.get("label_block")?"block":"inline",t=this.model.get("show_label"),n="elementor-label-"+e;n+=" elementor-control-separator-"+this.model.get("separator"),t||(n+=" elementor-control-hidden-label"),this.$el.addClass(n),this.toggleControlVisibility()}}),e.exports=i},function(e,t,n){"use strict";var i=n(14),o=n(9),r=n(15);e.exports=Marionette.LayoutView.extend({el:function(){return this.modal.getElements("widget")},modal:null,regions:function(){return{modalHeader:".dialog-header",modalContent:".dialog-lightbox-content",modalLoading:".dialog-lightbox-loading"}},constructor:function(){this.initModal(),Marionette.LayoutView.prototype.constructor.apply(this,arguments)},initialize:function(){this.modalHeader.show(new i(this.getHeaderOptions()))},initModal:function(){var e={className:"elementor-templates-modal",closeButton:!1,hide:{onOutsideClick:!1}};jQuery.extend(!0,e,this.getModalOptions()),this.modal=this.getDialogsManager().createWidget("lightbox",e),this.modal.getElements("message").append(this.modal.addElement("content"),this.modal.addElement("loading"))},getDialogsManager:function(){return elementor.dialogsManager},showModal:function(){this.modal.show()},hideModal:function(){this.modal.hide()},getModalOptions:function(){return{}},getLogoOptions:function(){return{}},getHeaderOptions:function(){return{}},getHeaderView:function(){return this.modalHeader.currentView},showLoadingView:function(){this.modalLoading.show(new r),this.modalLoading.$el.show(),this.modalContent.$el.hide()},hideLoadingView:function(){this.modalContent.$el.show(),this.modalLoading.$el.hide()},showLogo:function(){this.getHeaderView().logoArea.show(new o(this.getLogoOptions()))}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-templates-modal__header__logo",className:"elementor-templates-modal__header__logo",events:{click:"onClick"},templateHelpers:function(){return{title:this.getOption("title")}},onClick:function(){var e=this.getOption("click");e&&e()}})},function(e,t,n){"use strict";var i,o="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},r=n(3),s=n(13),a=n(18),l=n(28);i=l.extend({tagName:"div",controlsCSSParser:null,allowRender:!0,toggleEditTools:!1,renderAttributes:{},className:function(){var e="elementor-element elementor-element-edit-mode "+this.getElementUniqueID();return this.toggleEditTools&&(e+=" elementor-element--toggle-edit-tools"),e},attributes:function(){var e=this.model.get("elType");return"widget"===e&&(e=this.model.get("widgetType")),{"data-id":this.getID(),"data-element_type":e}},ui:function(){return{tools:"> .elementor-element-overlay > .elementor-editor-element-settings",editButton:"> .elementor-element-overlay .elementor-editor-element-edit",duplicateButton:"> .elementor-element-overlay .elementor-editor-element-duplicate",addButton:"> .elementor-element-overlay .elementor-editor-element-add",removeButton:"> .elementor-element-overlay .elementor-editor-element-remove"}},behaviors:function(){var e=elementor.hooks.applyFilters("elements/"+this.options.model.get("elType")+"/contextMenuGroups",this.getContextMenuGroups(),this),t={contextMenu:{behaviorClass:n(11),groups:e}};return elementor.hooks.applyFilters("elements/base/behaviors",t,this)},getBehavior:function(e){return this._behaviors[Object.keys(this.behaviors()).indexOf(e)]},events:function(){return{mousedown:"onMouseDown","click @ui.editButton":"onEditButtonClick","click @ui.duplicateButton":"onDuplicateButtonClick","click @ui.addButton":"onAddButtonClick","click @ui.removeButton":"onRemoveButtonClick"}},getElementType:function(){return this.model.get("elType")},getIDInt:function(){return parseInt(this.getID(),16)},getChildType:function(){return elementor.helpers.getElementChildType(this.getElementType())},getChildView:function(e){var t,i=e.get("elType");return t="section"===i?n(29):"column"===i?n(90):elementor.modules.elements.views.Widget,elementor.hooks.applyFilters("element/view",t,e,this)},templateHelpers:function(){var e=l.prototype.templateHelpers.apply(this,arguments);return jQuery.extend(e,{editModel:this.getEditModel()})},getTemplateType:function(){return"js"},getEditModel:function(){return this.model},getContextMenuGroups:function(){var e=this.options.model.get("elType"),t=elementor.envData.mac?"⌘":"^";return[{name:"general",actions:[{name:"edit",icon:"eicon-edit",title:elementor.translate("edit_element",[elementor.helpers.firstLetterUppercase(e)]),callback:this.options.model.trigger.bind(this.options.model,"request:edit")},{name:"duplicate",icon:"eicon-clone",title:elementor.translate("duplicate"),shortcut:t+"+D",callback:this.duplicate.bind(this)}]},{name:"transfer",actions:[{name:"copy",title:elementor.translate("copy"),shortcut:t+"+C",callback:this.copy.bind(this)},{name:"paste",title:elementor.translate("paste"),shortcut:t+"+V",callback:this.paste.bind(this),isEnabled:this.isPasteEnabled.bind(this)},{name:"pasteStyle",title:elementor.translate("paste_style"),shortcut:t+"+⇧+V",callback:this.pasteStyle.bind(this),isEnabled:function(){return!!elementor.getStorage("transfer")}},{name:"resetStyle",title:elementor.translate("reset_style"),callback:this.resetStyle.bind(this)}]},{name:"delete",actions:[{name:"delete",icon:"eicon-trash",title:elementor.translate("delete"),shortcut:"⌦",callback:this.removeElement.bind(this)}]}]},initialize:function(){l.prototype.initialize.apply(this,arguments),this.collection&&this.listenTo(this.collection,"add remove reset",this.onCollectionChanged,this);var e=this.getEditModel();this.listenTo(e.get("settings"),"change",this.onSettingsChanged).listenTo(e.get("editSettings"),"change",this.onEditSettingsChanged).listenTo(this.model,"request:edit",this.onEditRequest).listenTo(this.model,"request:toggleVisibility",this.toggleVisibility),this.initControlsCSSParser()},startTransport:function(e){elementor.setStorage("transfer",{type:e,elementsType:this.getElementType(),elements:[this.model.toJSON({copyHtmlCache:!0})]})},copy:function(){this.startTransport("copy")},cut:function(){this.startTransport("cut")},paste:function(){this.trigger("request:paste")},isPasteEnabled:function(){var e=elementor.getStorage("transfer");return!(!e||this.isCollectionFilled())&&this.getElementType()===e.elementsType},isStyleTransferControl:function(e){return void 0!==e.style_transfer?e.style_transfer:"content"!==e.tab||e.selectors||e.prefix_class},duplicate:function(){var e=elementor.getStorage("transfer");this.copy(),this.paste(),elementor.setStorage("transfer",e)},pasteStyle:function(){var e=this,t=elementor.getStorage("transfer").elements[0].settings,n=e.getEditModel(),i=n.get("settings"),r=i.attributes,s=i.controls,a={};jQuery.each(s,function(n,i){if(e.isStyleTransferControl(i)){var s=t[n],l=r[n];if(void 0!==s&&void 0!==l){if("object"===(void 0===s?"undefined":o(s))){if("object"!==(void 0===l?"undefined":o(l)))return;var c=!0;if(jQuery.each(s,function(e){if(s[e]!==l[e])return c=!1}),c)return}else if(s===l)return;elementor.getControlView(i.type).onPasteStyle(i,s)&&(a[n]=s)}}}),e.allowRender=!1,elementor.channels.data.trigger("element:before:paste:style",n),n.setSetting(a),elementor.channels.data.trigger("element:after:paste:style",n),e.allowRender=!0,e.renderOnChange()},resetStyle:function(){var e=this,t=e.getEditModel(),n=t.get("settings").controls,i={};e.allowRender=!1,elementor.channels.data.trigger("element:before:reset:style",t),jQuery.each(n,function(t,n){e.isStyleTransferControl(n)&&(i[t]=n.default)}),t.setSetting(i),elementor.channels.data.trigger("element:after:reset:style",t),e.allowRender=!0,e.renderOnChange()},toggleVisibility:function(){this.model.set("hidden",!this.model.get("hidden")),this.toggleVisibilityClass()},toggleVisibilityClass:function(){this.$el.toggleClass("elementor-edit-hidden",!!this.model.get("hidden"))},addElementFromPanel:function(e){e=e||{};var t=elementor.channels.panelElements.request("element:selected"),n={elType:t.model.get("elType")};if("widget"===n.elType)n.widgetType=t.model.get("widgetType");else{if("section"!==n.elType)return;n.isInner=!0}var i=t.model.get("custom");i&&jQuery.extend(n,i),e.trigger={beforeAdd:"element:before:add",afterAdd:"element:after:add"},e.onAfterAdd=function(e,t){"section"===t.getElementType()&&t.isInner()&&t.addChildElement()},this.addChildElement(n,e)},addControlValidator:function(e,t){t=t.bind(this);var n=new a({customValidationMethod:t}),i=this.getEditModel().get("settings").validators;i[e]||(i[e]=[]),i[e].push(n)},addRenderAttribute:function(e,t,n,i){var r=this;return"object"===(void 0===e?"undefined":o(e))?(jQuery.each(e,function(e){r.addRenderAttribute(e,this,null,i)}),r):"object"===(void 0===t?"undefined":o(t))?(jQuery.each(t,function(t){r.addRenderAttribute(e,t,this,i)}),r):(r.renderAttributes[e]||(r.renderAttributes[e]={}),r.renderAttributes[e][t]||(r.renderAttributes[e][t]=[]),Array.isArray(n)||(n=[n]),void(r.renderAttributes[e][t]=i?n:r.renderAttributes[e][t].concat(n)))},getRenderAttributeString:function(e){if(!this.renderAttributes[e])return"";var t=this.renderAttributes[e],n=[];return jQuery.each(t,function(e){n.push(e+'="'+_.escape(this.join(" "))+'"')}),n.join(" ")},isInner:function(){return!!this.model.get("isInner")},initControlsCSSParser:function(){this.controlsCSSParser=new s({id:this.model.cid,settingsModel:this.getEditModel().get("settings"),dynamicParsing:this.getDynamicParsingSettings()})},enqueueFonts:function(){var e=this.getEditModel(),t=e.get("settings");_.each(t.getFontControls(),function(t){var n=e.getSetting(t.name);_.isEmpty(n)||elementor.helpers.enqueueFont(n)})},renderStyles:function(e){e||(e=this.getEditModel().get("settings")),this.controlsCSSParser.stylesheet.empty(),this.controlsCSSParser.addStyleRules(e.getStyleControls(),e.attributes,this.getEditModel().get("settings").controls,[/{{ID}}/g,/{{WRAPPER}}/g],[this.getID(),"#elementor ."+this.getElementUniqueID()]),this.controlsCSSParser.addStyleToDocument();var t=elementor.hooks.applyFilters("editor/style/styleText","",this);t&&this.controlsCSSParser.elements.$stylesheetElement.append(t)},renderCustomClasses:function(){var e=this,t=e.getEditModel().get("settings"),n=t.getClassControls();_.each(n,function(n){var i=t.previous(n.name);n.classes_dictionary&&void 0!==n.classes_dictionary[i]&&(i=n.classes_dictionary[i]),e.$el.removeClass(n.prefix_class+i)}),_.each(n,function(n){var i=t.attributes[n.name],o=i;n.classes_dictionary&&void 0!==n.classes_dictionary[i]&&(o=n.classes_dictionary[i]),elementor.helpers.isActiveControl(n,t.attributes)&&(o||0===o)&&e.$el.addClass(n.prefix_class+o)}),e.$el.addClass(_.result(e,"className")),e.toggleVisibilityClass()},renderCustomElementID:function(){var e=this.getEditModel().get("settings").get("_element_id");this.$el.attr("id",e)},renderUI:function(){this.renderStyles(),this.renderCustomClasses(),this.renderCustomElementID(),this.enqueueFonts()},runReadyTrigger:function(){var e=this;_.defer(function(){elementorFrontend.elementsHandler.runReadyTrigger(e.$el),elementorFrontend.isEditMode()&&e.$el.find(".elementor-element.elementor-"+e.model.get("elType")+":not(.elementor-element-edit-mode)").each(function(){elementorFrontend.elementsHandler.runReadyTrigger(jQuery(this))})})},getID:function(){return this.model.get("id")},getElementUniqueID:function(){return"elementor-element-"+this.getID()},renderOnChange:function(e){if(this.allowRender){if(e instanceof r){var t=e.hasChanged(),n=!t,i=!t;if(_.each(e.changedAttributes(),function(t,o){var r=e.getControl(o);if("_column_size"!==o){if(!r)return i=!0,void(n=!0);"none"!==r.render_type&&(i=!0),-1===["none","ui"].indexOf(r.render_type)&&("template"!==r.render_type&&(e.isStyleControl(o)||e.isClassControl(o)||"_element_id"===o)||(n=!0))}else i=!0}),!i)return;if(!n)return void this.renderUI()}var o=this.getTemplateType(),s=this.getEditModel();"js"===o?(this.getEditModel().setHtmlCache(),this.render(),s.renderOnLeave=!0):s.renderRemoteServer()}},getDynamicParsingSettings:function(){var e=this;return{onServerRequestStart:function(){e.$el.addClass("elementor-loading")},onServerRequestEnd:function(){e.render(),e.$el.removeClass("elementor-loading")}}},serializeData:function(){var e=l.prototype.serializeData.apply(this,arguments);return e.settings=this.getEditModel().get("settings").parseDynamicSettings(e.settings,this.getDynamicParsingSettings()),e},save:function(){var e=this.model;elementor.templates.startModal({onReady:function(){elementor.templates.getLayout().showSaveTemplateView(e)}})},removeElement:function(){elementor.channels.data.trigger("element:before:remove",this.model);var e=this._parent;e.isManualRemoving=!0,this.model.destroy(),e.isManualRemoving=!1,elementor.channels.data.trigger("element:after:remove",this.model)},onBeforeRender:function(){this.renderAttributes={}},onRender:function(){if(this.renderUI(),this.runReadyTrigger(),this.toggleEditTools){var e=this.ui.editButton;this.ui.tools.hoverIntent(function(){e.addClass("elementor-active")},function(){e.removeClass("elementor-active")},{timeout:500})}},onCollectionChanged:function(){elementor.saver.setFlagEditorChange(!0)},onEditSettingsChanged:function(e){elementor.channels.editor.trigger("change:editSettings",e,this)},onSettingsChanged:function(e){elementor.saver.setFlagEditorChange(!0),this.renderOnChange(e)},onEditButtonClick:function(){this.model.trigger("request:edit")},onEditRequest:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if("edit"===elementor.channels.dataEditMode.request("activeMode")){var t=this.getEditModel(),n=elementor.getPanelView();"editor"===n.getCurrentPageName()&&n.getCurrentPageView().model===t||(e.scrollIntoView&&elementor.helpers.scrollToView(this.$el,200),n.openEditor(t,this))}},onDuplicateButtonClick:function(e){e.stopPropagation(),this.duplicate()},onRemoveButtonClick:function(e){e.stopPropagation(),this.removeElement()},onMouseDown:function(e){jQuery(e.target).closest(".elementor-inline-editing").length||elementorFrontend.getElements("$document")[0].activeElement.blur()},onDestroy:function(){this.controlsCSSParser.removeStyleFromDocument(),elementor.channels.data.trigger("element:destroy",this.model)}}),e.exports=i},function(e,t,n){"use strict";var i=n(88);e.exports=Marionette.Behavior.extend({defaults:{groups:[],eventTargets:["el"]},events:function(){var e={};return this.getOption("eventTargets").forEach(function(t){var n="contextmenu";"el"!==t&&(n+=" "+t),e[n]="onContextMenu"}),e},initialize:function(){this.listenTo(this.view.options.model,"request:contextmenu",this.onRequestContextMenu)},initContextMenu:function(){var e=this.getOption("groups"),t=_.findWhere(e,{name:"delete"}),n=e.indexOf(t);-1===n&&(n=e.length),e.splice(n,0,{name:"tools",actions:[{name:"navigator",title:elementor.translate("navigator"),callback:elementor.navigator.open.bind(elementor.navigator,this.view.model)}]}),this.contextMenu=new i({groups:e}),this.contextMenu.getModal().on("hide",this.onContextMenuHide)},getContextMenu:function(){return this.contextMenu||this.initContextMenu(),this.contextMenu},onContextMenu:function(e){!elementor.hotKeys.isControlEvent(e)&&elementor.userCan("design")&&"edit"===elementor.channels.dataEditMode.request("activeMode")&&(e.preventDefault(),e.stopPropagation(),this.getContextMenu().show(e),elementor.channels.editor.reply("contextMenu:targetView",this.view))},onRequestContextMenu:function(e){var t=this.getContextMenu().getModal(),n=t.getSettings("iframe"),i=_.findWhere(this.contextMenu.getSettings("groups"),{name:"tools"});i.isVisible=!1,t.setSettings("iframe",null),this.onContextMenu(e),i.isVisible=!0,t.setSettings("iframe",n)},onContextMenuHide:function(){elementor.channels.editor.reply("contextMenu:targetView",null)},onDestroy:function(){this.contextMenu&&this.contextMenu.destroy()}})},function(e,t,n){"use strict";var i;i=Marionette.CompositeView.extend({className:"elementor-panel-controls-stack",classes:{popover:"elementor-controls-popover"},activeTab:null,activeSection:null,templateHelpers:function(){return{elementData:elementor.getElementData(this.model)}},ui:function(){return{tabs:".elementor-panel-navigation-tab",reloadButton:".elementor-update-preview-button"}},events:function(){return{"click @ui.tabs":"onClickTabControl","click @ui.reloadButton":"onReloadButtonClick"}},modelEvents:{destroy:"onModelDestroy"},behaviors:{HandleInnerTabs:{behaviorClass:n(31)}},initialize:function(){this.initCollection(),this.listenTo(elementor.channels.deviceMode,"change",this.onDeviceModeChange)},initCollection:function(){this.collection=new Backbone.Collection(_.values(elementor.mergeControlsSettings(this.getOption("controls"))))},filter:function(e){if(e.get("tab")!==this.activeTab)return!1;if("section"===e.get("type"))return!0;var t=e.get("section");return!t||t===this.activeSection},isVisibleSectionControl:function(e){return this.activeTab===e.get("tab")},activateTab:function(e){this.activeTab=e,this.ui.tabs.removeClass("elementor-active").filter('[data-tab="'+e+'"]').addClass("elementor-active"),this.activateFirstSection()},activateSection:function(e){this.activeSection=e},activateFirstSection:function(){var e=this,t=e.collection.filter(function(t){return"section"===t.get("type")&&e.isVisibleSectionControl(t)});t[0]&&(t.filter(function(t){return e.activeSection===t.get("name")})[0]||e.activateSection(t[0].get("name")))},getChildView:function(e){var t=e.get("type");return elementor.getControlView(t)},handlePopovers:function(){var e,t=this,n=!1;t.removePopovers(),t.children.each(function(i){n&&e.append(i.$el);var o=i.model.get("popover");o&&(o.start&&(n=!0,e=jQuery("<div>",{class:t.classes.popover}),i.$el.before(e),e.append(i.$el)),o.end&&(n=!1))})},removePopovers:function(){this.$el.find("."+this.classes.popover).remove()},openActiveSection:function(){var e=this.activeSection,t=this.children.filter(function(t){return e===t.model.get("name")});t[0]&&t[0].$el.addClass("elementor-open")},onRenderCollection:function(){this.openActiveSection(),this.handlePopovers()},onRenderTemplate:function(){this.activateTab(this.activeTab||this.ui.tabs.eq(0).data("tab"))},onModelDestroy:function(){this.destroy()},onClickTabControl:function(e){e.preventDefault();var t=this.$(e.currentTarget).data("tab");this.activeTab!==t&&(this.activateTab(t),this._renderChildren())},onReloadButtonClick:function(){elementor.reloadPreview()},onDeviceModeChange:function(){this.$el.removeClass("elementor-responsive-switchers-open")},onChildviewControlSectionClicked:function(e){var t=e.$el.hasClass("elementor-open");this.activateSection(t?null:e.model.get("name")),this._renderChildren()},onChildviewResponsiveSwitcherClick:function(e,t){"desktop"===t&&this.$el.toggleClass("elementor-responsive-switchers-open")}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(1),r=n(24);(i=o.extend({stylesheet:null,getDefaultSettings:function(){return{id:0,settingsModel:null,dynamicParsing:{}}},getDefaultElements:function(){return{$stylesheetElement:jQuery("<style>",{id:"elementor-style-"+this.getSettings("id")})}},initStylesheet:function(){var e=elementorFrontend.config.breakpoints;this.stylesheet=new r,this.stylesheet.addDevice("mobile",0).addDevice("tablet",e.md).addDevice("desktop",e.lg)},addStyleRules:function(e,t,n,i,o){var r=this,s=r.getSettings("settingsModel").parseDynamicSettings(t,r.getSettings("dynamicParsing"),e);_.each(e,function(e){e.styleFields&&e.styleFields.length&&r.addRepeaterControlsStyleRules(t[e.name],e.styleFields,n,i,o),e.dynamic&&e.dynamic.active&&t.__dynamic__&&t.__dynamic__[e.name]&&r.addDynamicControlStyleRules(t.__dynamic__[e.name],e),e.selectors&&r.addControlStyleRules(e,s,n,i,o)})},addControlStyleRules:function(e,t,n,o,r){var s=this;i.addControlStyleRules(s.stylesheet,e,n,function(e){return s.getStyleControlValue(e,t)},o,r)},getStyleControlValue:function(e,t){var n=t[e.name];if(e.selectors_dictionary&&(n=e.selectors_dictionary[n]||n),_.isNumber(n)||!_.isEmpty(n))return n},addRepeaterControlsStyleRules:function(e,t,n,i,o){var r=this;t.forEach(function(t,s){var a=e.models[s];r.addStyleRules(t,a.attributes,n,i.concat(["{{CURRENT_ITEM}}"]),o.concat([".elementor-repeater-item-"+a.get("_id")]))})},addDynamicControlStyleRules:function(e,t){var n=this;elementor.dynamicTags.parseTagsText(e,t.dynamic,function(e,t,i){var o=elementor.dynamicTags.createTag(e,t,i);if(o){var r=o.model;r.getStyleControls().length&&n.addStyleRules(r.getStyleControls(),r.attributes,r.controls,["{{WRAPPER}}"],["#elementor-tag-"+e])}})},addStyleToDocument:function(){elementor.$previewContents.find("head").append(this.elements.$stylesheetElement),this.elements.$stylesheetElement.text(this.stylesheet)},removeStyleFromDocument:function(){this.elements.$stylesheetElement.remove()},onInit:function(){o.prototype.onInit.apply(this,arguments),this.initStylesheet()}})).addControlStyleRules=function(e,t,n,i,o,r){var s=i(t);void 0!==s&&_.each(t.selectors,function(a,l){var c;try{c=a.replace(/{{(?:([^.}]+)\.)?([^}]*)}}/g,function(e,o,r){var a=t,l=s;if(o){if(!(a=_.findWhere(n,{name:o})))return"";l=i(a)}var c=elementor.getControlView(a.type).getStyleValue(r.toLowerCase(),l);if(""===c)throw"";return c})}catch(e){return}if(!_.isEmpty(c)){var u=/^(?:\([^)]+\)){1,2}/,d=l.match(u),m={};if(d){d=d[0],l=l.replace(u,"");for(var h,g=/\(([^)]+)\)/g,p=[];h=g.exec(d);)p.push(h[1]);_.each(p,function(e){if("desktop"!==e){var t=e.replace(/\+$/,"");m[t===e?"max":"min"]=t}})}_.each(o,function(e,t){var n=e.source?e.source:e,i=new RegExp(n,"g");l=l.replace(i,r[t])}),!Object.keys(m).length&&t.responsive&&"desktop"===(m=_.pick(elementor.helpers.cloneObject(t.responsive),["min","max"])).max&&delete m.max,e.addRules(l,c,m)}})},e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.LayoutView.extend({className:"elementor-templates-modal__header",template:"#tmpl-elementor-templates-modal__header",regions:{logoArea:".elementor-templates-modal__header__logo-area",tools:"#elementor-template-library-header-tools",menuArea:".elementor-templates-modal__header__menu-area"},ui:{closeModal:".elementor-templates-modal__header__close"},events:{"click @ui.closeModal":"onCloseModalClick"},templateHelpers:function(){return{closeType:this.getOption("closeType")}},onCloseModalClick:function(){this._parent._parent._parent.hideModal()}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({id:"elementor-template-library-loading",template:"#tmpl-elementor-template-library-loading"}),e.exports=i},function(e,t,n){"use strict";var i=n(1);e.exports=i.extend({getDefaultSettings:function(){return{container:null,items:null,columnsCount:3,verticalSpaceBetween:30}},getDefaultElements:function(){return{$container:jQuery(this.getSettings("container")),$items:jQuery(this.getSettings("items"))}},run:function(){var e=[],t=this.elements.$container.position().top,n=this.getSettings(),i=n.columnsCount;t+=parseInt(this.elements.$container.css("margin-top"),10),this.elements.$items.each(function(o){var r=Math.floor(o/i),s=jQuery(this),a=s[0].getBoundingClientRect().height+n.verticalSpaceBetween;if(r){var l=s.position(),c=o%i,u=l.top-t-e[c];u-=parseInt(s.css("margin-top"),10),u*=-1,s.css("margin-top",u+"px"),e[c]+=a}else e.push(a)})}})},function(e,t,n){"use strict";e.exports=new function(){var e={},t=function(t){var n=e[t.which];n&&jQuery.each(n,function(){this.isWorthHandling&&!this.isWorthHandling(t)||!this.allowAltKey&&t.altKey||(t.preventDefault(),this.handle(t))})};this.isControlEvent=function(e){return e[elementor.envData.mac?"metaKey":"ctrlKey"]},this.addHotKeyHandler=function(t,n,i){e[t]||(e[t]={}),e[t][n]=i},this.bindListener=function(e){e.on("keydown",t)}}},function(e,t,n){"use strict";var i;i=n(2).extend({errors:[],__construct:function(e){var t=e.customValidationMethod;t&&(this.validationMethod=t)},getDefaultSettings:function(){return{validationTerms:{}}},isValid:function(){var e=this.validationMethod.apply(this,arguments);return!e.length||(this.errors=e,!1)},validationMethod:function(e){var t=[];return this.getSettings("validationTerms").required&&((""+e).length||t.push("Required value is empty")),t}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.Behavior.extend({defaults:{elChildType:"widget"},events:{sortstart:"onSortStart",sortreceive:"onSortReceive",sortupdate:"onSortUpdate",sortover:"onSortOver",sortout:"onSortOut"},initialize:function(){this.listenTo(elementor.channels.dataEditMode,"switch",this.onEditModeSwitched).listenTo(this.view.options.model,"request:sort:start",this.startSort).listenTo(this.view.options.model,"request:sort:update",this.updateSort).listenTo(this.view.options.model,"request:sort:receive",this.receiveSort)},onEditModeSwitched:function(e){"edit"===e?this.activate():this.deactivate()},onRender:function(){var e=this;_.defer(function(){e.onEditModeSwitched(elementor.channels.dataEditMode.request("activeMode"))})},onDestroy:function(){this.deactivate()},activate:function(){if(elementor.userCan("design")&&!this.getChildViewContainer().sortable("instance")){var e=this.getChildViewContainer(),t={connectWith:e.selector,placeholder:"elementor-sortable-placeholder elementor-"+this.getOption("elChildType")+"-placeholder",cursorAt:{top:20,left:25},helper:this._getSortableHelper.bind(this),cancel:"input, textarea, button, select, option, .elementor-inline-editing, .elementor-tab-title"},n=_.extend(t,this.view.getSortableOptions());e.sortable(n)}},_getSortableHelper:function(e,t){var n=this.view.collection.get({cid:t.data("model-cid")});return'<div style="height: 84px; width: 125px;" class="elementor-sortable-helper elementor-sortable-helper-'+n.get("elType")+'"><div class="icon"><i class="'+n.getIcon()+'"></i></div><div class="elementor-element-title-wrapper"><div class="title">'+n.getTitle()+"</div></div></div>"},getChildViewContainer:function(){return this.view.getChildViewContainer(this.view)},deactivate:function(){var e=this.getChildViewContainer();e.sortable("instance")&&e.sortable("destroy")},startSort:function(e,t){e.stopPropagation();var n=this.view.collection.get({cid:t.item.data("model-cid")});elementor.channels.data.reply("dragging:model",n).reply("dragging:parent:view",this.view).trigger("drag:start",n).trigger(n.get("elType")+":drag:start")},updateSort:function(e){var t=elementor.channels.data.request("dragging:model"),n=e.item,i=this.view.collection,o=n.parent().children().index(n),r=this.view.children.findByModelCid(t.cid);this.view.addChildElement(t.clone(),{at:o,trigger:{beforeAdd:"drag:before:update",afterAdd:"drag:after:update"},onBeforeAdd:function(){r._isRendering=!0,i.remove(t)}}),elementor.saver.setFlagEditorChange(!0)},receiveSort:function(e,t){if(e.stopPropagation(),this.view.isCollectionFilled())jQuery(t.sender).sortable("cancel");else{var n=elementor.channels.data.request("dragging:model"),i="section"===n.get("elType")&&n.get("isInner"),o="column"===this.view.getElementType()&&this.view.isInner();if(i&&o)jQuery(t.sender).sortable("cancel");else{var r=t.item.index(),s=n.toJSON({copyHtmlCache:!0});this.view.addChildElement(s,{at:r,trigger:{beforeAdd:"drag:before:update",afterAdd:"drag:after:update"},onAfterAdd:function(){var e=elementor.channels.data.request("dragging:parent:view");e.isManualRemoving=!0,n.destroy(),e.isManualRemoving=!1}})}}},onSortStart:function(e,t){if("column"===this.options.elChildType){var n=0;t.item.data("sortableItem").items.forEach(function(e){if(e.item[0]===t.item[0])return n=e.height,!1}),t.placeholder.height(n)}this.startSort(e,t)},onSortOver:function(e){e.stopPropagation();var t=elementor.channels.data.request("dragging:model");jQuery(e.target).addClass("elementor-draggable-over").attr({"data-dragged-element":t.get("elType"),"data-dragged-is-inner":t.get("isInner")}),this.$el.addClass("elementor-dragging-on-child")},onSortOut:function(e){e.stopPropagation(),jQuery(e.target).removeClass("elementor-draggable-over").removeAttr("data-dragged-element data-dragged-is-inner"),this.$el.removeClass("elementor-dragging-on-child")},onSortReceive:function(e,t){this.receiveSort(e,t)},onSortUpdate:function(e,t){e.stopPropagation(),this.getChildViewContainer()[0]===t.item.parent()[0]&&this.updateSort(t)},onAddChild:function(e){e.$el.attr("data-model-cid",e.model.cid)}}),e.exports=i},function(e,t,n){"use strict";e.exports=function(){var e,t=Array.prototype.slice,n={actions:{},filters:{}};function i(e,t,i,o){var r,s,a;if(n[e][t])if(i)if(r=n[e][t],o)for(a=r.length;a--;)(s=r[a]).callback===i&&s.context===o&&r.splice(a,1);else for(a=r.length;a--;)r[a].callback===i&&r.splice(a,1);else n[e][t]=[]}function o(e,t,i,o,r){var s={callback:i,priority:o,context:r},a=n[e][t];if(a){var l=!1;if(jQuery.each(a,function(){if(this.callback===i)return l=!0,!1}),l)return;a.push(s),a=function(e){for(var t,n,i,o=1,r=e.length;o<r;o++){for(t=e[o],n=o;(i=e[n-1])&&i.priority>t.priority;)e[n]=e[n-1],--n;e[n]=t}return e}(a)}else a=[s];n[e][t]=a}function r(e,t,i){var o,r,s=n[e][t];if(!s)return"filters"===e&&i[0];if(r=s.length,"filters"===e)for(o=0;o<r;o++)i[0]=s[o].callback.apply(s[o].context,i);else for(o=0;o<r;o++)s[o].callback.apply(s[o].context,i);return"filters"!==e||i[0]}return e={removeFilter:function(t,n){return"string"==typeof t&&i("filters",t,n),e},applyFilters:function(){var n=t.call(arguments),i=n.shift();return"string"==typeof i?r("filters",i,n):e},addFilter:function(t,n,i,r){return"string"==typeof t&&"function"==typeof n&&o("filters",t,n,i=parseInt(i||10,10),r),e},removeAction:function(t,n){return"string"==typeof t&&i("actions",t,n),e},doAction:function(){var n=t.call(arguments),i=n.shift();return"string"==typeof i&&r("actions",i,n),e},addAction:function(t,n,i,r){return"string"==typeof t&&"function"==typeof n&&o("actions",t,n,i=parseInt(i||10,10),r),e}}}},function(e,t,n){"use strict";var i=n(1),o=n(3),r=n(13);e.exports=i.extend({model:null,hasChange:!1,changeCallbacks:{},addChangeCallback:function(e,t){this.changeCallbacks[e]=t},bindEvents:function(){elementor.on("preview:loaded",this.onElementorPreviewLoaded),this.model.on("change",this.onModelChange)},addPanelPage:function(){var e=this.getSettings("name");elementor.getPanelView().addPage(e+"_settings",{view:elementor.settings.panelPages[e]||elementor.settings.panelPages.base,title:this.getSettings("panelPage.title"),options:{model:this.model,controls:this.model.controls,name:e}})},updateStylesheet:function(e){var t=this.getControlsCSS();e||t.stylesheet.empty(),t.addStyleRules(this.model.getStyleControls(),this.model.attributes,this.model.controls,[/{{WRAPPER}}/g],[this.getSettings("cssWrapperSelector")]),t.addStyleToDocument()},initModel:function(){this.model=new o(this.getSettings("settings"),{controls:this.getSettings("controls")})},initControlsCSSParser:function(){var e;this.getControlsCSS=function(){return e||(e=new r({id:this.getSettings("name"),settingsModel:this.model}),this.controlsCSS=e),e}},getDataToSave:function(e){return e},save:function(e){var t=this;if(t.hasChange){var n=this.model.toJSON({removeDefault:!0}),i=this.getDataToSave({data:n});NProgress.start(),elementor.ajax.addRequest("save_"+this.getSettings("name")+"_settings",{data:i,success:function(){NProgress.done(),t.setSettings("settings",n),t.hasChange=!1,e&&e.apply(t,arguments)},error:function(){alert("An error occurred")}})}},addPanelMenuItem:function(){var e=this.getSettings("panelPage.menu");if(e){var t={icon:e.icon,title:this.getSettings("panelPage.title"),type:"page",pageName:this.getSettings("name")+"_settings"};elementor.modules.layouts.panel.pages.menu.Menu.addItem(t,"settings",e.beforeItem)}},onInit:function(){this.initModel(),this.initControlsCSSParser(),this.addPanelMenuItem(),this.debounceSave=_.debounce(this.save,3e3),i.prototype.onInit.apply(this,arguments)},onModelChange:function(e){var t=this;t.hasChange=!0,this.getControlsCSS().stylesheet.empty(),_.each(e.changed,function(e,n){t.changeCallbacks[n]&&t.changeCallbacks[n].call(t,e)}),t.updateStylesheet(!0),t.debounceSave()},onElementorPreviewLoaded:function(){this.updateStylesheet(),this.addPanelPage(),elementor.userCan("design")||elementor.panel.currentView.setPage("page_settings")}})},,function(e,t,n){"use strict";e.exports=Marionette.Region.extend({storage:null,storageSizeKeys:null,constructor:function(){Marionette.Region.prototype.constructor.apply(this,arguments);var e=elementor.getStorage(this.getStorageKey());this.storage=e||this.getDefaultStorage(),this.storageSizeKeys=Object.keys(this.storage.size)},saveStorage:function(e,t){this.storage[e]=t,elementor.setStorage(this.getStorageKey(),this.storage)},saveSize:function(){this.saveStorage("size",elementor.helpers.getElementInlineStyle(this.$el,this.storageSizeKeys))}})},function(e,t,n){"use strict";!function(t){var n=function e(){var n=this,i={},o={},r={},s=function(e){var t={};return(e=e.split("-").filter(String)).forEach(function(e){var n=e.split("_"),i=n[0],o=n[1];t[i]="max"===i?function(e){var t=Object.keys(r),n=t.indexOf(e)+1;if(n>=t.length)throw new RangeError("Max value for this device is out of range.");return r[t[n]]-1}(o):r[o]}),t};this.addDevice=function(e,t){r[e]=t;var i=Object.keys(r);if(i.length<2)return n;i.sort(function(e,t){return r[e]-r[t]});var o={};return i.forEach(function(e){o[e]=r[e]}),r=o,n},this.addRawCSS=function(e,t){o[e]=t},this.addRules=function(e,o,r){var a="all";if(_.isEmpty(r)||(a=function(e){var n=[];return t.each(e,function(e){n.push(e+"_"+this)}),n.join("-")}(r)),i[a]||function(e){i[e]={};var t=Object.keys(i);if(!(t.length<2)){t.sort(function(e,t){if("all"===e)return-1;if("all"===t)return 1;var n=s(e);return s(t).max-n.max});var n={};t.forEach(function(e){n[e]=i[e]}),i=n}}(a),o){if(i[a][e]||(i[a][e]={}),"string"==typeof o){o=o.split(";").filter(String);var l={};try{t.each(o,function(){var e=this.split(/:(.*)?/);l[e[0].trim()]=e[1].trim().replace(";","")})}catch(e){return}o=l}return t.extend(i[a][e],o),n}var c=e.match(/[^{]+\{[^}]+}/g);t.each(c,function(){var e=this.match(/([^{]+)\{([^}]+)}/);e&&n.addRules(e[1].trim(),e[2].trim(),r)})},this.getRules=function(){return i},this.empty=function(){i={},o={}},this.toString=function(){var n="";return t.each(i,function(i){var o=e.parseRules(this);"all"!==i&&(o=function(e){var n=s(e),i=[];return t.each(n,function(e){i.push("("+e+"-width:"+this+"px)")}),"@media"+i.join(" and ")}(i)+"{"+o+"}"),n+=o}),t.each(o,function(){n+=this}),n}};n.parseRules=function(e){var i="";return t.each(e,function(e){var t=n.parseProperties(this);t&&(i+=e+"{"+t+"}")}),i},n.parseProperties=function(e){var n="";return t.each(e,function(e){this&&(n+=e+":"+this+";")}),n},e.exports=n}(jQuery)},function(e,t,n){"use strict";var i;i=Marionette.Behavior.extend({ui:{insertButton:".elementor-template-library-template-insert"},events:{"click @ui.insertButton":"onInsertButtonClick"},onInsertButtonClick:function(){this.view.model.get("hasPageSettings")?i.showImportDialog(this.view.model):elementor.templates.importTemplate(this.view.model)}},{dialog:null,showImportDialog:function(e){var t=i.getDialog();t.onConfirm=function(){elementor.templates.importTemplate(e,{withPageSettings:!0})},t.onCancel=function(){elementor.templates.importTemplate(e)},t.show()},initDialog:function(){i.dialog=elementor.dialogsManager.createWidget("confirm",{id:"elementor-insert-template-settings-dialog",headerMessage:elementor.translate("import_template_dialog_header"),message:elementor.translate("import_template_dialog_message")+"<br>"+elementor.translate("import_template_dialog_message_attention"),strings:{confirm:elementor.translate("yes"),cancel:elementor.translate("no")}})},getDialog:function(){return i.dialog||i.initDialog(),i.dialog}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(25);i=Marionette.ItemView.extend({className:function(){var e="elementor-template-library-template",t=this.model.get("source");return e+=" elementor-template-library-template-"+t,"remote"===t&&(e+=" elementor-template-library-template-"+this.model.get("type")),this.model.get("isPro")&&(e+=" elementor-template-library-pro-template"),e},ui:function(){return{previewButton:".elementor-template-library-template-preview"}},events:function(){return{"click @ui.previewButton":"onPreviewButtonClick"}},behaviors:{insertTemplate:{behaviorClass:o}}}),e.exports=i},function(e,t,n){"use strict";e.exports=Backbone.Model.extend({defaults:{id:0,type:"",elementType:"",status:"not_applied",title:"",subTitle:"",action:"",history:{}},initialize:function(){this.set("items",new Backbone.Collection)}})},function(e,t,n){"use strict";e.exports=Marionette.CompositeView.extend({templateHelpers:function(){return{view:this}},getBehavior:function(e){return this._behaviors[Object.keys(this.behaviors()).indexOf(e)]},initialize:function(){this.collection=this.model.get("elements")},addChildModel:function(e,t){return this.collection.add(e,t,!0)},addChildElement:function(e,t){if(!this.isCollectionFilled()){t=jQuery.extend({trigger:!1,edit:!0,onBeforeAdd:null,onAfterAdd:null},t);var n,i,o=this.getChildType();if(e instanceof Backbone.Model?i=(n=e).get("elType"):(n={id:elementor.helpers.getUniqueID(),elType:o[0],settings:{},elements:[]},e&&jQuery.extend(n,e),i=n.elType),-1===o.indexOf(i))return this.children.last().addChildElement(n,t);t.clone&&(n=this.cloneItem(n)),t.trigger&&elementor.channels.data.trigger(t.trigger.beforeAdd,n),t.onBeforeAdd&&t.onBeforeAdd();var r=this.addChildModel(n,{at:t.at}),s=this.children.findByModel(r);return t.onAfterAdd&&t.onAfterAdd(r,s),t.trigger&&elementor.channels.data.trigger(t.trigger.afterAdd,n),t.edit&&r.trigger("request:edit"),s}},cloneItem:function(e){var t=this;return e instanceof Backbone.Model?e.clone():(e.id=elementor.helpers.getUniqueID(),e.settings._element_id="",e.elements.forEach(function(n,i){e.elements[i]=t.cloneItem(n)}),e)},isCollectionFilled:function(){return!1},onChildviewRequestAddNew:function(e){this.addChildElement({},{at:e.$el.index()+1,trigger:{beforeAdd:"element:before:add",afterAdd:"element:after:add"}})},onChildviewRequestPaste:function(e){var t=this;if(!t.isCollectionFilled()){var n=elementor.getStorage("transfer").elements,i=t.collection.indexOf(e.model);elementor.channels.data.trigger("element:before:add",n[0]),n.forEach(function(e){i++,t.addChildElement(e,{at:i,clone:!0})}),elementor.channels.data.trigger("element:after:add",n[0])}}})},function(e,t,n){"use strict";var i=function(e){return e&&e.__esModule?e:{default:e}}(n(89));var o,r=n(10);o=r.extend({template:Marionette.TemplateCache.get("#tmpl-elementor-section-content"),addSectionView:null,className:function(){return r.prototype.className.apply(this,arguments)+" elementor-section elementor-"+(this.isInner()?"inner":"top")+"-section"},tagName:function(){return this.model.getSetting("html_tag")||"section"},childViewContainer:"> .elementor-container > .elementor-row",behaviors:function(){var e=r.prototype.behaviors.apply(this,arguments);return _.extend(e,{Sortable:{behaviorClass:n(19),elChildType:"column"}}),elementor.hooks.applyFilters("elements/section/behaviors",e,this)},errors:{columnWidthTooLarge:"New column width is too large",columnWidthTooSmall:"New column width is too small"},initialize:function(){r.prototype.initialize.apply(this,arguments),this.listenTo(this.collection,"add remove reset",this._checkIsFull),this._checkIsEmpty()},getContextMenuGroups:function(){var e=r.prototype.getContextMenuGroups.apply(this,arguments),t=e.indexOf(_.findWhere(e,{name:"transfer"}));return e.splice(t+1,0,{name:"save",actions:[{name:"save",title:elementor.translate("save_as_block"),callback:this.save.bind(this)}]}),e},addChildModel:function(e,t){var n=e instanceof Backbone.Model,i=this.isInner();return n?e.set("isInner",i):e.isInner=i,r.prototype.addChildModel.apply(this,arguments)},getSortableOptions:function(){return{connectWith:(this.isInner()?".elementor-inner-section":".elementor-top-section")+" > .elementor-container > .elementor-row",handle:"> .elementor-element-overlay .elementor-editor-element-edit",items:"> .elementor-column",forcePlaceholderSize:!0,tolerance:"pointer"}},getColumnPercentSize:function(e,t){return+(t/e.parent().width()*100).toFixed(3)},getDefaultStructure:function(){return this.collection.length+"0"},getStructure:function(){return this.model.getSetting("structure")},setStructure:function(e){if(+elementor.presetsFactory.getParsedStructure(e).columnsCount!==this.collection.length)throw new TypeError("The provided structure doesn't match the columns count.");this.model.setSetting("structure",e)},redefineLayout:function(){var e=elementor.presetsFactory.getPresetByStructure(this.getStructure());this.collection.each(function(t,n){t.setSetting("_column_size",e.preset[n]),t.setSetting("_inline_size",null)})},resetLayout:function(){this.setStructure(this.getDefaultStructure())},resetColumnsCustomSize:function(){this.collection.each(function(e){e.setSetting("_inline_size",null)})},isCollectionFilled:function(){return 10<=this.collection.length},_checkIsFull:function(){this.$el.toggleClass("elementor-section-filled",this.isCollectionFilled())},_checkIsEmpty:function(){this.collection.length||this.model.get("allowEmpty")||this.addChildElement(null,{edit:!1})},getColumnAt:function(e){var t=this.collection.at(e);return t?this.children.findByModelCid(t.cid):null},getNextColumn:function(e){return this.getColumnAt(this.collection.indexOf(e.model)+1)},getPreviousColumn:function(e){return this.getColumnAt(this.collection.indexOf(e.model)-1)},showChildrenPercentsTooltip:function(e,t){e.ui.percentsTooltip.show(),e.ui.percentsTooltip.attr("data-side",elementor.config.is_rtl?"right":"left"),t.ui.percentsTooltip.show(),t.ui.percentsTooltip.attr("data-side",elementor.config.is_rtl?"left":"right")},hideChildrenPercentsTooltip:function(e,t){e.ui.percentsTooltip.hide(),t.ui.percentsTooltip.hide()},resizeChild:function(e,t,n){var i=this.getNextColumn(e)||this.getPreviousColumn(e);if(!i)throw new ReferenceError("There is not any next column");var o=i.$el,r=+(t+(+i.model.getSetting("_inline_size")||this.getColumnPercentSize(o,o[0].getBoundingClientRect().width))-n).toFixed(3);if(r<2)throw new RangeError(this.errors.columnWidthTooLarge);if(n<2)throw new RangeError(this.errors.columnWidthTooSmall);return i.model.setSetting("_inline_size",r),!0},destroyAddSectionView:function(){this.addSectionView&&!this.addSectionView.isDestroyed&&this.addSectionView.destroy()},onRender:function(){r.prototype.onRender.apply(this,arguments),this._checkIsFull()},onSettingsChanged:function(e){r.prototype.onSettingsChanged.apply(this,arguments),e.changed.structure&&this.redefineLayout()},onAddButtonClick:function(){if(!this.addSectionView||this.addSectionView.isDestroyed){var e=this.model.collection.indexOf(this.model),t=new i.default({at:e});t.render(),this.$el.before(t.$el),t.$el.hide(),setTimeout(function(){t.$el.slideDown()}),this.addSectionView=t}else this.addSectionView.fadeToDeath()},onAddChild:function(){this.isBuffering||this.model.get("allowEmpty")||this.resetLayout()},onRemoveChild:function(){this.isManualRemoving&&(this._checkIsEmpty(),this.resetLayout())},onChildviewRequestResizeStart:function(e){var t=this.getNextColumn(e);if(t){this.showChildrenPercentsTooltip(e,t);var n=e.$el.find("iframe").add(t.$el.find("iframe"));elementor.helpers.disableElementEvents(n)}},onChildviewRequestResizeStop:function(e){var t=this.getNextColumn(e);if(t){this.hideChildrenPercentsTooltip(e,t);var n=e.$el.find("iframe").add(t.$el.find("iframe"));elementor.helpers.enableElementEvents(n)}},onChildviewRequestResize:function(e,t){var n=+e.model.getSetting("_inline_size")||this.getColumnPercentSize(e.$el,e.$el.data("originalWidth"));t.element.css({width:"",left:"initial"});var i=this.getColumnPercentSize(t.element,t.size.width);try{this.resizeChild(e,n,i)}catch(e){return}e.model.setSetting("_inline_size",i)},onDestroy:function(){r.prototype.onDestroy.apply(this,arguments),this.destroyAddSectionView()}}),e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();var o=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Marionette.ItemView),i(t,[{key:"template",value:function(){return Marionette.TemplateCache.get("#tmpl-elementor-add-section")}},{key:"attributes",value:function(){return{"data-view":"choose-action"}}},{key:"ui",value:function(){return{addNewSection:".elementor-add-new-section",closeButton:".elementor-add-section-close",addSectionButton:".elementor-add-section-button",addTemplateButton:".elementor-add-template-button",selectPreset:".elementor-select-preset",presets:".elementor-preset"}}},{key:"events",value:function(){return{"click @ui.addSectionButton":"onAddSectionButtonClick","click @ui.addTemplateButton":"onAddTemplateButtonClick","click @ui.closeButton":"onCloseButtonClick","click @ui.presets":"onPresetSelected"}}},{key:"behaviors",value:function(){return{contextMenu:{behaviorClass:n(11),groups:this.getContextMenuGroups()}}}},{key:"className",value:function(){return"elementor-add-section elementor-visible-desktop"}},{key:"addSection",value:function(e,t){return elementor.getPreviewView().addChildElement(e,jQuery.extend({},this.options,t))}},{key:"setView",value:function(e){this.$el.attr("data-view",e)}},{key:"showSelectPresets",value:function(){this.setView("select-preset")}},{key:"closeSelectPresets",value:function(){this.setView("choose-action")}},{key:"getTemplatesModalOptions",value:function(){return{importOptions:{at:this.getOption("at")}}}},{key:"getContextMenuGroups",value:function(){var e=function(){return elementor.elements.length>0};return[{name:"paste",actions:[{name:"paste",title:elementor.translate("paste"),callback:this.paste.bind(this),isEnabled:this.isPasteEnabled.bind(this)}]},{name:"content",actions:[{name:"copy_all_content",title:elementor.translate("copy_all_content"),callback:this.copy.bind(this),isEnabled:e},{name:"delete_all_content",title:elementor.translate("delete_all_content"),callback:elementor.clearPage.bind(elementor),isEnabled:e}]}]}},{key:"copy",value:function(){elementor.getPreviewView().copy()}},{key:"paste",value:function(){elementor.getPreviewView().paste(this.getOption("at"))}},{key:"isPasteEnabled",value:function(){return elementor.getStorage("transfer")}},{key:"onAddSectionButtonClick",value:function(){this.showSelectPresets()}},{key:"onAddTemplateButtonClick",value:function(){elementor.templates.startModal(this.getTemplatesModalOptions())}},{key:"onRender",value:function(){this.$el.html5Droppable({axis:["vertical"],groups:["elementor-element"],placeholder:!1,currentElementClass:"elementor-html5dnd-current-element",hasDraggingOnChildClass:"elementor-dragging-on-child",onDropping:this.onDropping.bind(this)})}},{key:"onPresetSelected",value:function(e){this.closeSelectPresets();var t,n=e.currentTarget.dataset.structure,i=elementor.presetsFactory.getParsedStructure(n),o=[];for(t=0;t<i.columnsCount;t++)o.push({id:elementor.helpers.getUniqueID(),elType:"column",settings:{},elements:[]});elementor.channels.data.trigger("element:before:add",{elType:"section"}),this.addSection({elements:o}).setStructure(n),elementor.channels.data.trigger("element:after:add")}},{key:"onDropping",value:function(){elementor.channels.data.trigger("section:before:drop"),this.addSection().addElementFromPanel(),elementor.channels.data.trigger("section:after:drop")}}]),t}();t.default=o},function(e,t,n){"use strict";var i;i=Marionette.Behavior.extend({onRenderCollection:function(){this.handleInnerTabs(this.view)},handleInnerTabs:function(e){var t=e.children.filter(function(e){return"tabs"===e.model.get("type")});_.each(t,function(t){t.$el.find(".elementor-control-content").remove();var n=t.model.get("name"),i=e.children.filter(function(e){return"tab"===e.model.get("type")&&e.model.get("tabs_wrapper")===n});_.each(i,function(n,i){t._addChildView(n);var o=n.model.get("name"),r=e.children.filter(function(e){return o===e.model.get("inner_tab")});0===i?n.$el.addClass("elementor-tab-active"):_.each(r,function(e){e.$el.addClass("elementor-tab-close")})})})},onChildviewControlTabClicked:function(e){var t=e.model.get("name"),n=this.view.children.filter(function(t){return"tab"!==t.model.get("type")&&e.model.get("tabs_wrapper")===t.model.get("tabs_wrapper")}),i=this.view.children.filter(function(t){return"tab"===t.model.get("type")&&e.model.get("tabs_wrapper")===t.model.get("tabs_wrapper")});_.each(i,function(e){e.$el.removeClass("elementor-tab-active")}),e.$el.addClass("elementor-tab-active"),_.each(n,function(e){e.model.get("inner_tab")===t?e.$el.removeClass("elementor-tab-close"):e.$el.addClass("elementor-tab-close")}),elementor.getPanelView().updateScrollbar()}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(4);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.sliders=".elementor-slider",e.colors=".elementor-shadow-color-picker",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"slide @ui.sliders":"onSlideChange"})},initSliders:function(){var e=this.getControlValue();this.ui.sliders.each(function(){var t=jQuery(this),n=t.next(".elementor-slider-input").find("input");t.slider({value:e[this.dataset.input],min:+n.attr("min"),max:+n.attr("max")})})},initColors:function(){var e=this;elementor.helpers.wpColorPicker(this.ui.colors,{change:function(){var t=jQuery(this),n=t.data("setting");e.setValue(n,t.wpColorPicker("color"))},clear:function(){e.setValue(this.dataset.setting,"")}})},onInputChange:function(e){var t=e.currentTarget.dataset.setting;this.ui.sliders.filter('[data-input="'+t+'"]').slider("value",this.getControlValue(t))},onReady:function(){this.initSliders(),this.initColors()},onSlideChange:function(e,t){var n=e.currentTarget.dataset.input;this.ui.input.filter('[data-setting="'+n+'"]').val(t.value),this.setValue(n,t.value)},onBeforeDestroy:function(){this.ui.colors.each(function(){var e=jQuery(this);e.wpColorPicker("instance")&&e.wpColorPicker("close")}),this.$el.remove()}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(0);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.inputs='[type="radio"]',e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"mousedown label":"onMouseDownLabel","click @ui.inputs":"onClickInput","change @ui.inputs":"onBaseInputChange"})},onMouseDownLabel:function(e){var t=this.$(e.currentTarget),n=this.$("#"+t.attr("for"));n.data("checked",n.prop("checked"))},onClickInput:function(e){if(this.model.get("toggle")){var t=this.$(e.currentTarget);t.data("checked")&&t.prop("checked",!1).trigger("change")}},onRender:function(){o.prototype.onRender.apply(this,arguments);var e=this.getControlValue();e&&this.ui.inputs.filter('[value="'+e+'"]').prop("checked",!0)}},{onPasteStyle:function(e,t){return""===t||void 0!==e.options[t]}}),e.exports=i},function(e,t,n){"use strict";var i;i=n(4).extend({getCurrentRange:function(){return this.getUnitRange(this.getControlValue("unit"))},getUnitRange:function(e){var t=this.model.get("range");return!(!t||!t[e])&&t[e]}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(0);i=Marionette.CompositeView.extend({template:Marionette.TemplateCache.get("#tmpl-elementor-repeater-row"),className:"elementor-repeater-fields",ui:{duplicateButton:".elementor-repeater-tool-duplicate",editButton:".elementor-repeater-tool-edit",removeButton:".elementor-repeater-tool-remove",itemTitle:".elementor-repeater-row-item-title"},behaviors:{HandleInnerTabs:{behaviorClass:n(31)}},triggers:{"click @ui.removeButton":"click:remove","click @ui.duplicateButton":"click:duplicate","click @ui.itemTitle":"click:edit"},modelEvents:{change:"onModelChange"},templateHelpers:function(){return{itemIndex:this.getOption("itemIndex")}},childViewContainer:".elementor-repeater-row-controls",getChildView:function(e){var t=e.get("type");return elementor.getControlView(t)},childViewOptions:function(){return{elementSettingsModel:this.model}},updateIndex:function(e){this.itemIndex=e},setTitle:function(){var e=this.getOption("titleField"),t="";if(e){var n={};this.children.each(function(e){e instanceof o&&(n[e.model.get("name")]=e.getControlValue())}),t=Marionette.TemplateCache.prototype.compileTemplate(e)(this.model.parseDynamicSettings())}t||(t=elementor.translate("Item #{0}",[this.getOption("itemIndex")])),this.ui.itemTitle.html(t)},initialize:function(e){this.itemIndex=0,this.collection=new Backbone.Collection(_.values(elementor.mergeControlsSettings(e.controlFields)))},onRender:function(){this.setTitle()},onModelChange:function(){this.getOption("titleField")&&this.setTitle()},onChildviewResponsiveSwitcherClick:function(e,t){"desktop"===t&&elementor.getPanelView().getCurrentPageView().$el.toggleClass("elementor-responsive-switchers-open")}}),e.exports=i},function(e,t,n){"use strict";var i,o="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},r=n(3),s=n(125);(i=Backbone.Model.extend({defaults:{id:"",elType:"",isInner:!1,settings:{},defaultEditSettings:{}},remoteRender:!1,_htmlCache:null,_jqueryXhr:null,renderOnLeave:!1,initialize:function(e){var t=this.get("elType"),i=this.get("elements");if(void 0!==i){var o=n(37);this.set("elements",new o(i))}"widget"===t&&(this.remoteRender=!0,this.setHtmlCache(e.htmlCache||"")),delete e.htmlCache,this.renderRemoteServer=_.throttle(this.renderRemoteServer,1e3),this.initSettings(),this.initEditSettings(),this.on({destroy:this.onDestroy,"editor:close":this.onCloseEditor})},initSettings:function(){var e=this.get("elType"),t=this.get("settings"),n={column:s}[e]||r;jQuery.isEmptyObject(t)&&(t=elementor.helpers.cloneObject(t)),"widget"===e&&(t.widgetType=this.get("widgetType")),t.elType=e,t.isInner=this.get("isInner"),t=new n(t,{controls:elementor.getElementControls(this)}),this.set("settings",t),elementorFrontend.config.elements.data[this.cid]=t},initEditSettings:function(){var e=new Backbone.Model(this.get("defaultEditSettings"));this.set("editSettings",e),elementorFrontend.config.elements.editSettings[this.cid]=e},setSetting:function(e,t){var n=this.get("settings");if("object"!==(void 0===e?"undefined":o(e))){var i=e.split("."),r=3===i.length;e=i[0],r&&(n=n.get(e).models[i[1]],e=i[2])}n.setExternalChange(e,t)},getSetting:function(e){var t=e.split("."),n=3===t.length,i=this.get("settings");e=t[0];var o=i.get(e);return void 0===o?"":(n&&(o=o.models[t[1]].get(t[2])),o)},setHtmlCache:function(e){this._htmlCache=e},getHtmlCache:function(){return this._htmlCache},getDefaultTitle:function(){return elementor.getElementData(this).title},getTitle:function(){var e=this.getSetting("_title");return e||(e=this.getDefaultTitle()),e},getIcon:function(){return elementor.getElementData(this).icon},createRemoteRenderRequest:function(){var e=this.toJSON();return elementor.ajax.addRequest("render_widget",{unique_id:this.cid,data:{data:e},success:this.onRemoteGetHtml.bind(this)},!0).jqXhr},renderRemoteServer:function(){this.remoteRender&&(this.renderOnLeave=!1,this.trigger("before:remote:render"),this.isRemoteRequestActive()&&this._jqueryXhr.abort(),this._jqueryXhr=this.createRemoteRenderRequest())},isRemoteRequestActive:function(){return this._jqueryXhr&&4!==this._jqueryXhr.readyState},onRemoteGetHtml:function(e){this.setHtmlCache(e.render),this.trigger("remote:render")},clone:function(){var e=new this.constructor(elementor.helpers.cloneObject(this.attributes));e.set("id",elementor.helpers.getUniqueID()),e.setHtmlCache(this.getHtmlCache());var t=this.get("elements");return _.isEmpty(t)||e.set("elements",t.clone()),e},toJSON:function(e){e=_.extend({copyHtmlCache:!1},e);var t=Backbone.Model.prototype.toJSON.call(this);return _.each(t,function(n,i){n&&n.toJSON&&(t[i]=n.toJSON(e))}),e.copyHtmlCache?t.htmlCache=this.getHtmlCache():delete t.htmlCache,t},onCloseEditor:function(){this.renderOnLeave&&this.renderRemoteServer()},onDestroy:function(){var e=this.get("settings"),t=this.get("elements");void 0!==t&&_.each(_.clone(t.models),function(e){e.destroy()}),e.destroy()}})).prototype.sync=i.prototype.fetch=i.prototype.save=_.noop,e.exports=i},function(e,t,n){"use strict";var i=n(36),o=Backbone.Collection.extend({add:function(e,t,n){if(!(t&&t.silent||n))throw"Call Error: Adding model to element collection is allowed only by the dedicated addChildModel() method.";return Backbone.Collection.prototype.add.call(this,e,t)},model:function(e,t){var n=Backbone.Model;return e.elType&&(n=elementor.hooks.applyFilters("element/model",i,e)),new n(e,t)},clone:function(){var e=Backbone.Collection.prototype.clone.apply(this,arguments),t=new o;return e.forEach(function(e){t.add(e.clone(),null,!0)}),t}});o.prototype.sync=o.prototype.fetch=o.prototype.save=_.noop,e.exports=o},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-global",id:"elementor-panel-global",initialize:function(){elementor.getPanelView().getCurrentPageView().search.reset()},onDestroy:function(){var e=elementor.getPanelView();"elements"===e.getCurrentPageName()&&setTimeout(function(){var t=e.getCurrentPageView();t.search.currentView||t.showView("search")})}})},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-element-library-element",className:"elementor-element-wrapper",onRender:function(){var e=this;elementor.userCan("design")&&this.$el.html5Draggable({onDragStart:function(){elementor.channels.panelElements.reply("element:selected",e).trigger("element:drag:start")},onDragEnd:function(){elementor.channels.panelElements.trigger("element:drag:end")},groups:["elementor-element"]})}}),e.exports=i},function(e,t,n){"use strict";var i;i=Backbone.Model.extend({defaults:{title:"",categories:[],keywords:[],icon:"",elType:"widget",widgetType:""}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(40);i=Backbone.Collection.extend({model:o}),e.exports=i},function(e,t,n){"use strict";var i,o=n(43);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.systemSchemes=".elementor-panel-scheme-color-system-scheme",e},events:function(){var e=o.prototype.events.apply(this,arguments);return e["click @ui.systemSchemes"]="onSystemSchemeClick",e},getType:function(){return"color"},onSystemSchemeClick:function(e){var t=jQuery(e.currentTarget).data("schemeName"),n=elementor.config.system_schemes[this.getType()][t].items;this.changeChildrenUIValues(n)}}),e.exports=i},function(e,t,n){"use strict";var i,o={color:n(149),typography:n(150)};i=Marionette.CompositeView.extend({id:function(){return"elementor-panel-scheme-"+this.getType()},className:function(){return"elementor-panel-scheme elementor-panel-scheme-"+this.getUIType()},childViewContainer:".elementor-panel-scheme-items",getTemplate:function(){return Marionette.TemplateCache.get("#tmpl-elementor-panel-schemes-"+this.getType())},getChildView:function(){return o[this.getUIType()]},getUIType:function(){return this.getType()},ui:function(){return{saveButton:".elementor-panel-scheme-save .elementor-button",discardButton:".elementor-panel-scheme-discard .elementor-button",resetButton:".elementor-panel-scheme-reset .elementor-button"}},events:function(){return{"click @ui.saveButton":"saveScheme","click @ui.discardButton":"discardScheme","click @ui.resetButton":"setDefaultScheme"}},initialize:function(){this.model=new Backbone.Model,this.resetScheme()},getType:function(){},getScheme:function(){return elementor.schemes.getScheme(this.getType())},changeChildrenUIValues:function(e){var t=this;_.each(e,function(e,n){var i=t.collection.findWhere({key:n});t.children.findByModelCid(i.cid).changeUIValue(e)})},discardScheme:function(){elementor.schemes.resetSchemes(this.getType()),this.onSchemeChange(),this.ui.saveButton.prop("disabled",!0),this._renderChildren()},setSchemeValue:function(e,t){elementor.schemes.setSchemeValue(this.getType(),e,t),this.onSchemeChange()},saveScheme:function(){elementor.schemes.saveScheme(this.getType()),this.ui.saveButton.prop("disabled",!0),this.resetScheme(),this._renderChildren()},setDefaultScheme:function(){var e=elementor.config.default_schemes[this.getType()].items;this.changeChildrenUIValues(e)},resetItems:function(){this.model.set("items",this.getScheme().items)},resetCollection:function(){var e=this,t=e.model.get("items");e.collection=new Backbone.Collection,_.each(t,function(t,n){t.type=e.getType(),t.key=n,e.collection.add(t)})},resetScheme:function(){this.resetItems(),this.resetCollection()},onSchemeChange:function(){elementor.schemes.printSchemesStyle()},onChildviewValueChange:function(e,t){this.ui.saveButton.removeProp("disabled"),this.setSchemeValue(e.model.get("key"),t)}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({getTemplate:function(){return Marionette.TemplateCache.get("#tmpl-elementor-panel-scheme-"+this.getUIType()+"-item")},className:function(){return"elementor-panel-scheme-item"}}),e.exports=i},function(e,t,n){n(46),n(47),e.exports=n(48)},function(e,t,n){"use strict";!function(e){e.fn.elementorSerializeObject=function(){var t=this.serializeArray(),n={};return e.each(t,function(){!function e(t,n,i){var o=/^[^\[\]]+\[]/.test(n),r=/^[^\[\]]+\[[^\[\]]+]/.test(n),s=n.replace(/\[.*/,"");if(o)t[s]||(t[s]=[]);else{if(!r)return void(t.push?t.push(i):t[s]=i);t[s]||(t[s]={})}var a=n.match(/\[[^\[\]]*]/g);return a[0]=a[0].replace(/\[|]/g,""),e(t[s],a.join(""),i)}(n,this.name,this.value)}),n}}(jQuery)},function(e,t,n){"use strict";!function(e){var t=function(e){try{return e.originalEvent.dataTransfer.setData("test","test"),e.originalEvent.dataTransfer.clearData("test"),!0}catch(e){return!1}},n={html5Draggable:function(n){var i=this,o={},r={},s={element:"",groups:null,onDragStart:null,onDragEnd:null},a=function(t){e.isFunction(o.onDragEnd)&&o.onDragEnd.call(r.$element,t,i)},l=function(n){var s={groups:o.groups||[]};t(n)&&n.originalEvent.dataTransfer.setData(JSON.stringify(s),!0),e.isFunction(o.onDragStart)&&o.onDragStart.call(r.$element,n,i)};this.destroy=function(){r.$element.off("dragstart",l),r.$element.removeAttr("draggable")},e.extend(!0,o,s,n),r.$element=e(o.element),r.$element.attr("draggable",!0),r.$element.on("dragstart",l).on("dragend",a)},html5Droppable:function(n){var i,o,r=this,s={},a={},l={element:"",items:">",horizontalSensitivity:"10%",axis:["vertical","horizontal"],placeholder:!0,currentElementClass:"html5dnd-current-element",placeholderClass:"html5dnd-placeholder",hasDraggingOnChildClass:"html5dnd-has-dragging-on-child",groups:null,isDroppingAllowed:null,onDragEnter:null,onDragging:null,onDropping:null,onDragLeave:null},c=function(){return-1!==s.axis.indexOf("vertical")},u=function(e,t){var n;return-1!==s.axis.indexOf("horizontal")&&(c()?!!(n=s.horizontalSensitivity.match(/\d+/))&&(n=n[0],/%$/.test(s.horizontalSensitivity)&&(n=t/n),e>t-n?"right":e<n&&"left"):e>t/2?"right":"left")},d=function(t){var n=e(i),r=n.outerHeight()-a.$placeholder.outerHeight(),s=n.outerWidth();if(t=t.originalEvent,!(o=u(t.offsetX,s)))if(c()){var l=i.getBoundingClientRect();o=t.clientY>l.top+r/2?"bottom":"top"}else o=null},m=function(){if(s.placeholder){var e="top"===o?"prependTo":"appendTo";a.$placeholder[e](i)}},h=function(n){var a,l,c,u;return!(s.groups&&t(n)&&(a=n.originalEvent.dataTransfer.types,c=!1,(a=Array.prototype.slice.apply(a)).forEach(function(e){try{if(!(l=JSON.parse(e)).groups.slice)return;s.groups.forEach(function(e){if(-1!==l.groups.indexOf(e))return c=!0,!1})}catch(e){}}),!c)||e.isFunction(s.isDroppingAllowed)&&(u=s.isDroppingAllowed.call(i,o,n,r),!u))},g=function(t){t.stopPropagation(),i||(i=this,a.$element.parents().each(function(){var t=e(this).data("html5Droppable");t&&t.doDragLeave()}),d(t),h(t)&&(m(),a.$element.addClass(s.hasDraggingOnChildClass),e(i).addClass(s.currentElementClass),e.isFunction(s.onDragEnter)&&s.onDragEnter.call(i,o,t,r)))},p=function(t){t.stopPropagation(),i||g.call(this,t);var n=o;d(t),h(t)&&(t.preventDefault(),n!==o&&m(),e.isFunction(s.onDragging)&&s.onDragging.call(this,o,t,r))},f=function(t){var n=this.getBoundingClientRect();("dragleave"!==t.type||t.clientX<n.left||t.clientX>=n.right||t.clientY<n.top||t.clientY>=n.bottom)&&(e(i).removeClass(s.currentElementClass),r.doDragLeave())},v=function(t){d(t),h(t)&&(t.preventDefault(),e.isFunction(s.onDropping)&&s.onDropping.call(this,o,t,r))};this.doDragLeave=function(){s.placeholder&&a.$placeholder.remove(),a.$element.removeClass(s.hasDraggingOnChildClass),e.isFunction(s.onDragLeave)&&s.onDragLeave.call(i,event,r),i=o=null},this.destroy=function(){a.$element.off("dragenter",s.items,g).off("dragover",s.items,p).off("drop",s.items,v).off("dragleave drop",s.items,f)},e.extend(s,l,n),a.$element=e(s.element),a.$placeholder=e("<div>",{class:s.placeholderClass}),a.$element.on("dragenter",s.items,g).on("dragover",s.items,p).on("drop",s.items,v).on("dragleave drop",s.items,f)}};e.each(n,function(t,n){e.fn[t]=function(i){return i=i||{},this.each(function(){var o=e.data(this,t);o instanceof n?"destroy"===i&&(o.destroy(),e.removeData(this,t)):(i.element=this,e.data(this,t,new n(i)))}),this}})}(jQuery)},function(e,t,n){"use strict";var i=r(n(49)),o=r(n(50));function r(e){return e&&e.__esModule?e:{default:e}}Marionette.TemplateCache.prototype.compileTemplate=function(e,t){return t={evaluate:/<#([\s\S]+?)#>/g,interpolate:/{{{([\s\S]+?)}}}/g,escape:/{{([^}]+?)}}(?!})/g},_.template(e,t)};var s=Marionette.Application.extend({previewLoadedOnce:!1,helpers:n(55),imagesManager:n(56),debug:n(57),schemes:n(58),presetsFactory:n(59),templates:n(60),ajax:n(75),conditions:n(76),hotKeys:n(17),history:n(77),channels:{editor:Backbone.Radio.channel("ELEMENTOR:editor"),data:Backbone.Radio.channel("ELEMENTOR:data"),panelElements:Backbone.Radio.channel("ELEMENTOR:panelElements"),dataEditMode:Backbone.Radio.channel("ELEMENTOR:editmode"),deviceMode:Backbone.Radio.channel("ELEMENTOR:deviceMode"),templates:Backbone.Radio.channel("ELEMENTOR:templates")},modules:{Module:n(2),components:{templateLibrary:{views:{parts:{headerParts:{logo:n(9)}},BaseModalLayout:n(8)}},saver:{behaviors:{FooterSaver:n(96)}}},controls:{Animation:n(6),Base:n(7),BaseData:n(0),BaseMultiple:n(4),Box_shadow:n(32),Button:n(101),Choose:n(33),Code:n(102),Color:n(103),Date_time:n(104),Dimensions:n(105),Font:n(106),Gallery:n(107),Hover_animation:n(6),Icon:n(108),Image_dimensions:n(109),Media:n(110),Number:n(111),Order:n(113),Popover_toggle:n(114),Repeater:n(115),RepeaterRow:n(35),Section:n(116),Select:n(117),Select2:n(6),Slider:n(118),Structure:n(119),Switcher:n(120),Tab:n(121),Text_shadow:n(32),Url:n(122),Wp_widget:n(123),Wysiwyg:n(124)},elements:{models:{BaseSettings:n(3),Element:n(36)},views:{Widget:n(126)}},layouts:{panel:{pages:{elements:{views:{Global:n(38),Elements:n(128)}},menu:{Menu:n(129)}}}},views:{ControlsStack:n(12)}},backgroundClickListeners:{popover:{element:".elementor-controls-popover",ignore:".elementor-control-popover-toggle-toggle, .elementor-control-popover-toggle-toggle-label, .select2-container"},tagsList:{element:".elementor-tags-list",ignore:".elementor-control-dynamic-switcher"}},initModulesBC:function(){var e={ControlsStack:this.modules.views.ControlsStack,element:{Model:this.modules.elements.models.Element},RepeaterRowView:this.modules.controls.RepeaterRow,WidgetView:this.modules.elements.views.Widget,panel:{Menu:this.modules.layouts.panel.pages.menu.Menu},saver:{footerBehavior:this.modules.components.saver.behaviors.FooterSaver},SettingsModel:this.modules.elements.models.BaseSettings,templateLibrary:{ElementsCollectionView:this.modules.layouts.panel.pages.elements.views.Elements}};jQuery.extend(this.modules,e)},userCan:function(e){return-1===this.config.user.restrictions.indexOf(e)},_defaultDeviceMode:"desktop",addControlView:function(e,t){this.modules.controls[elementor.helpers.firstLetterUppercase(e)]=t},checkEnvCompatibility:function(){return this.envData.gecko||this.envData.webkit},getElementData:function(e){var t=e.get("elType");if("widget"===t){var n=e.get("widgetType");return!!this.config.widgets[n]&&this.config.widgets[n]}if(!this.config.elements[t])return!1;var i=this.helpers.cloneObject(this.config.elements[t]);return"section"===t&&e.get("isInner")&&(i.title=elementor.translate("inner_section")),i},getElementControls:function(e){var t=this.getElementData(e);if(!t)return!1;var n=e.get("isInner"),i={};return _.each(t.controls,function(e,t){n&&e.hide_in_inner||!n&&e.hide_in_top||(i[t]=e)}),i},mergeControlsSettings:function(e){var t=this;return _.each(e,function(n,i){e[i]=jQuery.extend(!0,{},t.config.controls[n.type],n)}),e},getControlView:function(e){var t=elementor.helpers.firstLetterUppercase(e),n=this.modules.controls[t];if(!n){var i=-1!==this.config.controls[e].features.indexOf("ui");n=this.modules.controls[i?"Base":"BaseData"]}return n},getPanelView:function(){return this.panel.currentView},getPreviewView:function(){return this.sections.currentView},initEnvData:function(){this.envData=_.pick(tinymce.Env,["desktop","mac","webkit","gecko","ie","opera"])},initComponents:function(){var e=n(20),t=n(132),i=n(134),o=n(138),r=n(139);this.hooks=new e,this.saver=new o,this.settings=new i,this.dynamicTags=new t,this.pageSettings=this.settings.page,this.templates.init(),this.initDialogsManager(),this.notifications=new r,this.ajax.init(),this.initHotKeys(),this.initEnvData()},initDialogsManager:function(){this.dialogsManager=new DialogsManager.Instance},initElements:function(){var e=n(37),t=this.config.data;this.elements&&(t=this.elements.toJSON()),this.elements=new e(t),this.elementsModel=new Backbone.Model({elements:this.elements})},initPreview:function(){var e=jQuery;this.$previewWrapper=e("#elementor-preview"),this.$previewResponsiveWrapper=e("#elementor-preview-responsive-wrapper");this.$preview||(this.$preview=e("<iframe>",{id:"elementor-preview-iframe",src:this.config.document.urls.preview,allowfullscreen:1}),this.$previewResponsiveWrapper.append(this.$preview)),this.$preview.on("load",this.onPreviewLoaded.bind(this))},initFrontend:function(){var e=this.$preview[0].contentWindow;window.elementorFrontend=e.elementorFrontend,e.elementor=this,elementorFrontend.init(),elementorFrontend.elementsHandler.initHandlers(),this.trigger("frontend:init")},initClearPageDialog:function(){var e,t=this;t.getClearPageDialog=function(){return e||(e=this.dialogsManager.createWidget("confirm",{id:"elementor-clear-page-dialog",headerMessage:elementor.translate("clear_page"),message:elementor.translate("dialog_confirm_clear_page"),position:{my:"center center",at:"center center"},strings:{confirm:elementor.translate("delete"),cancel:elementor.translate("cancel")},onConfirm:function(){t.elements.reset()}}))}},initHotKeys:function(){var e=67,t=68,n=73,i=76,o=77,r=80,s=83,a=86,l=46,c=jQuery,u={},d=this.hotKeys;u[e]={copyElement:{isWorthHandling:function(e){if(!d.isControlEvent(e))return!1;if(!("editor"===elementor.getPanelView().getCurrentPageName()))return!1;var t=elementorFrontend.getElements("window"),n=getSelection()+t.getSelection();return!n&&elementor.envData.gecko&&(n=[window,t].some(function(e){var t=e.document.activeElement;if(t&&-1!==["INPUT","TEXTAREA"].indexOf(t.tagName)){var n;"INPUT"===t.tagName&&(n=t.type,t.type="text");var i=t.value.substring(t.selectionStart,t.selectionEnd);return t.type=n,!!i}})),!n},handle:function(){elementor.getPanelView().getCurrentPageView().getOption("editedElementView").copy()}}},u[t]={duplicateElement:{isWorthHandling:function(e){return d.isControlEvent(e)},handle:function(){var e=elementor.getPanelView();"editor"===e.getCurrentPageName()&&e.getCurrentPageView().getOption("editedElementView").duplicate()}}},u[n]={navigator:{isWorthHandling:function(e){return d.isControlEvent(e)&&"edit"===elementor.channels.dataEditMode.request("activeMode")},handle:function(){elementor.navigator.storage.visible?elementor.navigator.close():elementor.navigator.open()}}},u[i]={showTemplateLibrary:{isWorthHandling:function(e){return d.isControlEvent(e)&&e.shiftKey},handle:function(){elementor.templates.startModal()}}},u[o]={changeDeviceMode:{devices:["desktop","tablet","mobile"],isWorthHandling:function(e){return d.isControlEvent(e)&&e.shiftKey},handle:function(){var e=elementor.channels.deviceMode.request("currentMode"),t=this.devices.indexOf(e);++t>=this.devices.length&&(t=0),elementor.changeDeviceMode(this.devices[t])}}},u[r]={changeEditMode:{isWorthHandling:function(e){return d.isControlEvent(e)},handle:function(){elementor.getPanelView().modeSwitcher.currentView.toggleMode()}}},u[s]={saveEditor:{isWorthHandling:function(e){return d.isControlEvent(e)},handle:function(){elementor.saver.saveDraft()}}},u[a]={pasteElement:{isWorthHandling:function(e){return!!d.isControlEvent(e)&&(-1!==["BODY","IFRAME"].indexOf(document.activeElement.tagName)&&"BODY"===elementorFrontend.getElements("window").document.activeElement.tagName)},handle:function(e){var t=elementor.channels.editor.request("contextMenu:targetView");if(!t){var n=elementor.getPanelView();"editor"===n.getCurrentPageName()&&(t=n.getCurrentPageView().getOption("editedElementView"))}e.shiftKey?t&&t.pasteStyle&&elementor.getStorage("transfer")&&t.pasteStyle():(t||(t=elementor.getPreviewView()),t.isPasteEnabled()&&t.paste())}}},u[l]={deleteElement:{isWorthHandling:function(e){if(!("editor"===elementor.getPanelView().getCurrentPageName()))return!1;var t=c(e.target);return!t.is(":input, .elementor-input")&&!t.closest('[contenteditable="true"]').length},handle:function(){elementor.getPanelView().getCurrentPageView().getOption("editedElementView").removeElement()}}},_.each(u,function(e,t){_.each(e,function(e,n){d.addHotKeyHandler(t,n,e)})}),d.bindListener(this.$window)},initPanel:function(){this.addRegions({panel:n(140)})},initNavigator:function(){this.addRegions({navigator:{el:"#elementor-navigator",regionClass:o.default}})},preventClicksInsideEditor:function(){this.$previewContents.on("submit",function(e){e.preventDefault()}),this.$previewContents.on("click",function(e){var t=jQuery(e.target),n=elementor.channels.dataEditMode.request("activeMode"),i=!!t.closest("#elementor, .pen-menu").length,o=this.contains(t[0]);if((!i||"edit"!==n)&&o&&(t.closest("a:not(.elementor-clickable)").length&&e.preventDefault(),!i)){var r=elementor.getPanelView();"elements"!==r.getCurrentPageName()&&r.setPage("elements")}})},addBackgroundClickArea:function(e){e.addEventListener("click",this.onBackgroundClick.bind(this),!0)},addBackgroundClickListener:function(e,t){this.backgroundClickListeners[e]=t},removeBackgroundClickListener:function(e){delete this.backgroundClickListeners[e]},showFatalErrorDialog:function(e){var t={id:"elementor-fatal-error-dialog",headerMessage:"",message:"",position:{my:"center center",at:"center center"},strings:{confirm:elementor.translate("learn_more"),cancel:elementor.translate("go_back")},onConfirm:null,onCancel:function(){parent.history.go(-1)},hide:{onBackgroundClick:!1,onButtonClick:!1}};e=jQuery.extend(!0,t,e),this.dialogsManager.createWidget("confirm",e).show()},checkPageStatus:function(){elementor.config.current_revision_id!==elementor.config.document.id&&this.notifications.showToast({message:this.translate("working_on_draft_notification"),buttons:[{name:"view_revisions",text:elementor.translate("view_all_revisions"),callback:function(){var e=elementor.getPanelView();e.setPage("historyPage"),e.getCurrentPageView().activateTab("revisions")}}]})},getStorage:function(e){var t=localStorage.getItem("elementor");return t=t?JSON.parse(t):{},e?t[e]:t},setStorage:function(e,t){var n=this.getStorage();n[e]=t,localStorage.setItem("elementor",JSON.stringify(n))},openLibraryOnStart:function(){"#library"===location.hash&&(elementor.templates.startModal(),location.hash="")},enterPreviewMode:function(e){var t=elementorFrontend.getElements("$body");e&&(t=t.add(this.$body)),t.removeClass("elementor-editor-active").addClass("elementor-editor-preview"),this.$previewElementorEl.removeClass("elementor-edit-area-active").addClass("elementor-edit-area-preview"),e&&(this.$previewWrapper.css(this.config.is_rtl?"right":"left",""),this.panel.$el.css("width",""))},exitPreviewMode:function(){elementorFrontend.getElements("$body").add(this.$body).removeClass("elementor-editor-preview").addClass("elementor-editor-active"),this.$previewElementorEl.removeClass("elementor-edit-area-preview").addClass("elementor-edit-area-active")},changeEditMode:function(e){var t=elementor.channels.dataEditMode,n=t.request("activeMode");t.reply("activeMode",e),e!==n&&t.trigger("switch",e)},reloadPreview:function(){jQuery("#elementor-preview-loading").show(),this.$preview[0].contentWindow.location.reload(!0)},clearPage:function(){this.getClearPageDialog().show()},changeDeviceMode:function(e){var t=this.channels.deviceMode.request("currentMode");t!==e&&(this.$body.removeClass("elementor-device-"+t).addClass("elementor-device-"+e),this.channels.deviceMode.reply("previousMode",t).reply("currentMode",e).trigger("change"))},enqueueTypographyFonts:function(){var e=this,t=this.schemes.getScheme("typography");e.helpers.resetEnqueuedFontsCache(),_.each(t.items,function(t){e.helpers.enqueueFont(t.value.font_family)})},translate:function(e,t,n){n||(n=this.config.i18n);var i=n[e];return void 0===i&&(i=e),t&&(i=(i=i.replace(/{(\d+)}/g,function(e,n){return void 0!==t[n]?t[n]:e})).replace(/%(?:(\d+)\$)?s/g,function(e,n){return n||(n=1),void 0!==t[--n]?t[n]:e})),i},logSite:function(){var e="",t="";if(this.envData.gecko){e+="%c"+[" ;;;;;;;;;;;;;;; ",";;; ;; ;;;",";;; ;;;;;;;;;;;;",";;; ;;;;;;;;;;;;",";;; ;; ;;;",";;; ;;;;;;;;;;;;",";;; ;;;;;;;;;;;;",";;; ;; ;;;"," ;;;;;;;;;;;;;;; "].join("\n")+"\n",t="color: #C42961"}else e+="%c00",t='font-size: 22px; background-image: url("'+elementor.config.assets_url+'images/logo-icon.png"); color: transparent; background-repeat: no-repeat';setTimeout(console.log.bind(console,e,t)),e="%cLove using Elementor? Join our growing community of Elementor developers: %chttps://github.com/pojome/elementor",setTimeout(console.log.bind(console,e,"color: #9B0A46",""))},onStart:function(){this.$window=jQuery(window),this.$body=jQuery("body"),NProgress.start(),NProgress.inc(.2),this.config=ElementorConfig,Backbone.Radio.DEBUG=!1,Backbone.Radio.tuneIn("ELEMENTOR"),this.initModulesBC(),this.initComponents(),this.checkEnvCompatibility()||this.onEnvNotCompatible(),this.channels.dataEditMode.reply("activeMode","edit"),this.listenTo(this.channels.dataEditMode,"switch",this.onEditModeSwitched),this.initClearPageDialog(),this.addBackgroundClickArea(document),this.$window.trigger("elementor:init"),this.initPreview(),this.logSite()},onPreviewLoaded:function(){if(NProgress.done(),this.$preview[0].contentWindow.elementorFrontend)if(this.$previewContents=this.$preview.contents(),this.$previewElementorEl=this.$previewContents.find("#elementor"),this.$previewElementorEl.length){this.initFrontend(),this.initElements();var e=new Marionette.Region({el:this.$previewElementorEl[0]});this.schemes.init(),this.schemes.printSchemesStyle(),this.preventClicksInsideEditor(),this.addBackgroundClickArea(elementorFrontend.getElements("$document")[0]),this.previewLoadedOnce?this.getPanelView().setPage("elements",null,{autoFocusSearch:!1}):this.onFirstPreviewLoaded(),this.initNavigator(),this.addRegions({sections:e});var t=n(156);this.sections.show(new t({model:this.elementsModel})),this.$previewContents.children().addClass("elementor-html"),elementorFrontend.getElements("$body").addClass("elementor-editor-active"),elementor.userCan("design")||elementorFrontend.getElements("$body").addClass("elementor-editor-content-only"),this.changeDeviceMode(this._defaultDeviceMode),jQuery("#elementor-loading, #elementor-preview-loading").fadeOut(600),_.defer(function(){elementorFrontend.getElements("window").jQuery.holdReady(!1)}),this.enqueueTypographyFonts(),this.onEditModeSwitched(),this.hotKeys.bindListener(elementorFrontend.getElements("$window")),this.trigger("preview:loaded")}else this.onPreviewElNotFound();else this.onPreviewLoadingError()},onFirstPreviewLoaded:function(){this.initPanel(),this.heartbeat=new i.default,this.checkPageStatus(),this.openLibraryOnStart(),this.previewLoadedOnce=!0},onEditModeSwitched:function(){var e=this.channels.dataEditMode.request("activeMode");"edit"===e?this.exitPreviewMode():this.enterPreviewMode("preview"===e)},onEnvNotCompatible:function(){this.showFatalErrorDialog({headerMessage:this.translate("device_incompatible_header"),message:this.translate("device_incompatible_message"),strings:{confirm:elementor.translate("proceed_anyway")},hide:{onButtonClick:!0},onConfirm:function(){this.hide()}})},onPreviewLoadingError:function(){this.showFatalErrorDialog({headerMessage:this.translate("preview_not_loading_header"),message:this.translate("preview_not_loading_message"),onConfirm:function(){open(elementor.config.help_preview_error_url,"_blank")}})},onPreviewElNotFound:function(){var e=this.$preview[0].contentWindow.elementorPreviewErrorArgs;e||(e={headerMessage:this.translate("preview_el_not_found_header"),message:this.translate("preview_el_not_found_message"),confirmURL:elementor.config.help_the_content_url}),e.onConfirm=function(){open(e.confirmURL,"_blank")},this.showFatalErrorDialog(e)},onBackgroundClick:function(e){jQuery.each(this.backgroundClickListeners,function(){var t=jQuery(e.target);if(t[0].control&&(t=t.add(t[0].control)),!this.ignore||!t.closest(this.ignore).length)if(this.callback)this.callback();else{var n=t.closest(this.element);jQuery(this.element).not(n).hide()}})}});e.exports=(window.elementor=new s).start()},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();var o=function(){function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e);var n=void 0;this.getModal=function(){return n||(n=t.initModal()),n},jQuery(document).on({"heartbeat-send":function(e,t){t.elementor_post_lock={post_ID:elementor.config.document.id}},"heartbeat-tick":function(e,n){n.locked_user?(elementor.saver.isEditorChanged()&&elementor.saver.saveEditor({status:"autosave"}),t.showLockMessage(n.locked_user)):t.getModal().hide(),elementor.config.nonce=n.elementorNonce},"heartbeat-tick.wp-refresh-nonces":function(e,t){var n=t["elementor-refresh-nonces"];n&&(n.heartbeatNonce&&(elementor.config.nonce=n.elementorNonce),n.heartbeatNonce&&(window.heartbeatSettings.nonce=n.heartbeatNonce))}}),elementor.config.locked_user&&this.showLockMessage(elementor.config.locked_user)}return i(e,[{key:"initModal",value:function(){var e=elementor.dialogsManager.createWidget("lightbox",{headerMessage:elementor.translate("take_over")});return e.addButton({name:"go_back",text:elementor.translate("go_back"),callback:function(){parent.history.go(-1)}}),e.addButton({name:"take_over",text:elementor.translate("take_over"),callback:function(){wp.heartbeat.enqueue("elementor_force_post_lock",!0),wp.heartbeat.connectNow()}}),e}},{key:"showLockMessage",value:function(e){this.getModal().setMessage(elementor.translate("dialog_user_taken_over",[e])).show()}}]),e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=function(e){return e&&e.__esModule?e:{default:e}}(n(51));var r=n(23),s=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.isDocked=!1,n.opened=!1,n.ensurePosition=n.ensurePosition.bind(n),n.listenTo(elementor.channels.dataEditMode,"switch",n.onEditModeSwitched),n.storage.visible&&n.open(),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r),i(t,[{key:"getStorageKey",value:function(){return"navigator"}},{key:"getDefaultStorage",value:function(){return{visible:!1,size:{width:"",height:"",top:"",bottom:"",right:"",left:""}}}},{key:"getLayout",value:function(){return this.currentView}},{key:"getDraggableOptions",value:function(){return{iframeFix:!0,handle:"#elementor-navigator__header",drag:this.onDrag.bind(this),stop:this.onDragStop.bind(this)}}},{key:"getResizableOptions",value:function(){var e=this;return{handles:"all",containment:"document",minWidth:150,maxWidth:500,minHeight:240,start:function(){elementor.$previewWrapper.addClass("ui-resizable-resizing")},stop:function(){elementor.$previewWrapper.removeClass("ui-resizable-resizing"),e.isDocked?(e.storage.size.width=elementor.helpers.getElementInlineStyle(e.$el,["width"]).width,elementor.setStorage("navigator",e.storage)):e.saveSize()}}}},{key:"beforeFirstOpen",value:function(){this.show(new o.default),this.$el.draggable(this.getDraggableOptions()),this.$el.resizable(this.getResizableOptions())}},{key:"open",value:function(e){this.opened||(this.beforeFirstOpen(),this.opened=!0),this.$el.show(),this.storage.docked?(this.dock(),this.setDockedSize()):this.setSize(),e&&e.trigger("request:edit"),this.saveStorage("visible",!0),this.ensurePosition(),elementor.$window.on("resize",this.ensurePosition)}},{key:"close",value:function(e){this.$el.hide(),this.isDocked&&this.undock(!0),e||this.saveStorage("visible",!1),elementor.$window.off("resize",this.ensurePosition)}},{key:"isOpen",value:function(){return this.$el.is(":visible")}},{key:"dock",value:function(){elementor.$body.addClass("elementor-navigator-docked");var e=elementor.config.is_rtl?"left":"right",t=this.getResizableOptions();this.$el.css({height:"",top:"",bottom:"",left:"",right:""}),elementor.$previewWrapper.css(e,this.storage.size.width),this.$el.resizable("destroy"),t.handles=elementor.config.is_rtl?"e":"w",t.resize=function(t,n){elementor.$previewWrapper.css(e,n.size.width)},this.$el.resizable(t),this.isDocked=!0,this.saveStorage("docked",!0)}},{key:"undock",value:function(e){elementor.$body.removeClass("elementor-navigator-docked"),elementor.$previewWrapper.css(elementor.config.is_rtl?"left":"right",""),this.setSize(),this.$el.resizable("destroy"),this.$el.resizable(this.getResizableOptions()),this.isDocked=!1,e||this.saveStorage("docked",!1)}},{key:"setSize",value:function(){this.storage.size&&this.$el.css(this.storage.size)}},{key:"setDockedSize",value:function(){this.$el.css("width",this.storage.size.width)}},{key:"ensurePosition",value:function(){if(!this.isDocked){var e=this.$el.offset();e.left>innerWidth&&this.$el.css({left:"",right:""}),e.top>innerHeight&&this.$el.css({top:"",bottom:""})}}},{key:"onDrag",value:function(e,t){if(this.isDocked)if(t.position.left===t.originalPosition.left){if(t.position.top!==t.originalPosition.top)return!1}else this.undock();else{0>t.position.top&&(t.position.top=0);var n=0>t.position.left,i=t.position.left+this.el.offsetWidth>innerWidth;elementor.config.is_rtl?i&&(t.position.left=innerWidth-this.el.offsetWidth):n&&(t.position.left=0),elementor.$body.toggleClass("elementor-navigator--dock-hint",elementor.config.is_rtl?n:i)}}},{key:"onDragStop",value:function(e,t){if(!this.isDocked){this.saveSize();var n=t.position.left+this.el.offsetWidth;(0>t.position.left||n>innerWidth)&&this.dock(),elementor.$body.removeClass("elementor-navigator--dock-hint")}}},{key:"onEditModeSwitched",value:function(e){"edit"===e&&this.storage.visible?this.open():this.close(!0)}}]),t}();t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=function(e){return e&&e.__esModule?e:{default:e}}(n(52));var r=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Marionette.LayoutView),i(t,[{key:"getTemplate",value:function(){return"#tmpl-elementor-navigator"}},{key:"id",value:function(){return"elementor-navigator__inner"}},{key:"ui",value:function(){return{toggleAll:"#elementor-navigator__toggle-all",close:"#elementor-navigator__close"}}},{key:"events",value:function(){return{"click @ui.toggleAll":"toggleAll","click @ui.close":"onCloseClick"}}},{key:"regions",value:function(){return{elements:"#elementor-navigator__elements"}}},{key:"toggleAll",value:function(){var e="expand"===this.ui.toggleAll.data("elementor-action"),t=["eicon-collapse","eicon-expand"];this.ui.toggleAll.data("elementor-action",e?"collapse":"expand").removeClass(t[+e]).addClass(t[+!e]),this.elements.currentView.recursiveChildInvoke("toggleList",e)}},{key:"activateElementsMouseInteraction",value:function(){this.elements.currentView.recursiveChildInvoke("activateMouseInteraction")}},{key:"deactivateElementsMouseInteraction",value:function(){this.elements.currentView.recursiveChildInvoke("deactivateMouseInteraction")}},{key:"onShow",value:function(){this.elements.show(new o.default({model:elementor.elementsModel}))}},{key:"onCloseClick",value:function(){elementor.navigator.close()}}]),t}();t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=s(n(53)),r=s(n(54));function s(e){return e&&e.__esModule?e:{default:e}}var a=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Marionette.CompositeView),i(t,[{key:"getTemplate",value:function(){return"#tmpl-elementor-navigator__elements"}},{key:"ui",value:function(){return{item:"> .elementor-navigator__item",title:"> .elementor-navigator__item .elementor-navigator__element__title__text",toggle:"> .elementor-navigator__item > .elementor-navigator__element__toggle",toggleList:"> .elementor-navigator__item > .elementor-navigator__element__list-toggle",elements:"> .elementor-navigator__elements"}}},{key:"events",value:function(){return{contextmenu:"onContextMenu","click @ui.item":"onItemClick","click @ui.toggle":"onToggleClick","click @ui.toggleList":"onToggleListClick","dblclick @ui.title":"onTitleDoubleClick","keydown @ui.title":"onTitleKeyDown","paste @ui.title":"onTitlePaste","sortstart @ui.elements":"onSortStart","sortover @ui.elements":"onSortOver","sortout @ui.elements":"onSortOut","sortstop @ui.elements":"onSortStop","sortupdate @ui.elements":"onSortUpdate","sortreceive @ui.elements":"onSortReceive"}}},{key:"getEmptyView",value:function(){return this.isRoot()?r.default:this.hasChildren()?o.default:null}},{key:"childViewOptions",value:function(){return{indent:this.getIndent()+10}}},{key:"className",value:function(){var e=this.model.get("elType"),t="elementor-navigator__element";return e&&(t+=" elementor-navigator__element-"+e),this.hasChildren()&&(t+=" elementor-navigator__element--has-children"),t}},{key:"attributes",value:function(){return{"data-model-cid":this.model.cid}}},{key:"templateHelpers",value:function(){var e={};return this.isRoot()||(e.title=this.model.getTitle(),e.icon="section"===this.model.get("elType")?"":this.model.getIcon()),e}},{key:"initialize",value:function(){this.collection=this.model.get("elements"),this.childViewContainer=".elementor-navigator__elements",this.listenTo(this.model,"request:edit",this.onEditRequest).listenTo(this.model,"change",this.onModelChange).listenTo(this.model.get("settings"),"change",this.onModelSettingsChange)}},{key:"getIndent",value:function(){return this.getOption("indent")||0}},{key:"isRoot",value:function(){return!this.model.get("elType")}},{key:"hasChildren",value:function(){return"widget"!==this.model.get("elType")}},{key:"toggleList",value:function(e,t){if(this.hasChildren()&&!this.isRoot()&&this.ui.item.hasClass("elementor-active")!==e){this.ui.item.toggleClass("elementor-active",e);var n="slideToggle";void 0!==e&&(n="slide"+(e?"Down":"Up")),this.ui.elements[n](300,t)}}},{key:"toggleHiddenClass",value:function(){this.$el.toggleClass("elementor-navigator__element--hidden",!!this.model.get("hidden"))}},{key:"recursiveChildInvoke",value:function(e){for(var t=this,n=arguments,i=arguments.length,o=Array(i>1?i-1:0),r=1;r<i;r++)o[r-1]=arguments[r];this[e].apply(this,o),this.children.each(function(e){e instanceof t.constructor&&e.recursiveChildInvoke.apply(e,n)})}},{key:"recursiveParentInvoke",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];this._parent instanceof this.constructor&&(this._parent[e].apply(this._parent,n),this._parent.recursiveParentInvoke.apply(this._parent,arguments))}},{key:"recursiveChildAgreement",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!this[e].apply(this,n))return!1;var o=!0,r=!0,s=!1,a=void 0;try{for(var l,c=Object.values(this.children._views)[Symbol.iterator]();!(r=(l=c.next()).done);r=!0){var u=l.value;if(u instanceof this.constructor&&!u.recursiveChildAgreement.apply(u,arguments)){o=!1;break}}}catch(e){s=!0,a=e}finally{try{!r&&c.return&&c.return()}finally{if(s)throw a}}return o}},{key:"activateMouseInteraction",value:function(){this.$el.on({mouseenter:this.onMouseEnter.bind(this),mouseleave:this.onMouseLeave.bind(this)})}},{key:"deactivateMouseInteraction",value:function(){this.$el.off("mouseenter mouseleave")}},{key:"dragShouldBeIgnored",value:function(e){var t=elementor.helpers.getElementChildType(this.model.get("elType"));return"section"===e.get("elType")&&!e.get("isInner")||(!t||-1===t.indexOf(e.get("elType")))}},{key:"addEditingClass",value:function(){this.ui.item.addClass("elementor-editing")}},{key:"removeEditingClass",value:function(){this.ui.item.removeClass("elementor-editing")}},{key:"enterTitleEditing",value:function(){this.ui.title.attr("contenteditable",!0).focus(),document.execCommand("selectAll"),elementor.addBackgroundClickListener("navigator",{ignore:this.ui.title,callback:this.exitTitleEditing.bind(this)})}},{key:"exitTitleEditing",value:function(){this.ui.title.attr("contenteditable",!1);var e=this.ui.title.text().trim();this.model.get("settings").set("_title",e),elementor.removeBackgroundClickListener("navigator")}},{key:"activateSortable",value:function(){elementor.userCan("design")&&this.ui.elements.sortable({items:"> .elementor-navigator__element",placeholder:"ui-sortable-placeholder",axis:"y",forcePlaceholderSize:!0,connectWith:".elementor-navigator__element-"+this.model.get("elType")+" "+this.ui.elements.selector,cancel:'[contenteditable="true"]'})}},{key:"onRender",value:function(){this.activateSortable(),this.ui.item.css("padding-"+(elementor.config.is_rtl?"right":"left"),this.getIndent()),this.toggleHiddenClass()}},{key:"onModelChange",value:function(){void 0!==this.model.changed.hidden&&this.toggleHiddenClass()}},{key:"onModelSettingsChange",value:function(e){void 0!==e.changed._title&&this.ui.title.text(this.model.getTitle())}},{key:"onItemClick",value:function(){this.model.trigger("request:edit",{scrollIntoView:!0})}},{key:"onToggleClick",value:function(e){e.stopPropagation(),this.model.trigger("request:toggleVisibility")}},{key:"onTitleDoubleClick",value:function(){this.enterTitleEditing()}},{key:"onTitleKeyDown",value:function(e){13===e.which&&(e.preventDefault(),this.exitTitleEditing())}},{key:"onTitlePaste",value:function(e){e.preventDefault(),document.execCommand("insertHTML",!1,e.originalEvent.clipboardData.getData("text/plain"))}},{key:"onToggleListClick",value:function(e){e.stopPropagation(),this.toggleList()}},{key:"onSortStart",value:function(e,t){this.model.trigger("request:sort:start",e,t),jQuery(t.item).children(".elementor-navigator__item").trigger("click"),elementor.navigator.getLayout().activateElementsMouseInteraction()}},{key:"onSortStop",value:function(){elementor.navigator.getLayout().deactivateElementsMouseInteraction()}},{key:"onSortOver",value:function(e){e.stopPropagation(),this.$el.addClass("elementor-dragging-on-child")}},{key:"onSortOut",value:function(e){e.stopPropagation(),this.$el.removeClass("elementor-dragging-on-child")}},{key:"onSortUpdate",value:function(e,t){e.stopPropagation(),this.ui.elements.is(t.item.parent())&&this.model.trigger("request:sort:update",t)}},{key:"onSortReceive",value:function(e,t){this.model.trigger("request:sort:receive",e,t)}},{key:"onMouseEnter",value:function(e){var t=this;e.stopPropagation(),this.recursiveChildAgreement("dragShouldBeIgnored",elementor.channels.data.request("dragging:model"))||(this.autoExpandTimeout=setTimeout(function(){t.toggleList(!0,function(){t.ui.elements.sortable("refreshPositions")})},500))}},{key:"onMouseLeave",value:function(e){e.stopPropagation(),clearTimeout(this.autoExpandTimeout)}},{key:"onContextMenu",value:function(e){this.model.trigger("request:contextmenu",e)}},{key:"onEditRequest",value:function(){this.recursiveParentInvoke("toggleList",!0),elementor.navigator.getLayout().elements.currentView.recursiveChildInvoke("removeEditingClass"),this.addEditingClass(),elementor.helpers.scrollToView(this.$el,400,elementor.navigator.getLayout().elements.$el)}}]),t}();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();var o=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Marionette.ItemView),i(t,[{key:"getTemplate",value:function(){return"#tmpl-elementor-navigator__elements--empty"}},{key:"className",value:function(){return"elementor-empty-view"}},{key:"onRendr",value:function(){this.$el.css("padding-"+(elementor.config.is_rtl?"right":"left"),this.getOption("indent"))}}]),t}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}();var o=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,Marionette.ItemView),i(t,[{key:"getTemplate",value:function(){return"#tmpl-elementor-navigator__root--empty"}},{key:"className",value:function(){return"elementor-nerd-box"}}]),t}();t.default=o},function(e,t,n){"use strict";var i,o="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};i={_enqueuedFonts:[],elementsHierarchy:{section:{column:{widget:null,section:null}}},enqueueFont:function(e){if(-1===this._enqueuedFonts.indexOf(e)){var t,n=elementor.config.controls.font.options[e],i={ru_RU:"cyrillic",uk:"cyrillic",bg_BG:"cyrillic",vi:"vietnamese",el:"greek",he_IL:"hebrew"};switch(n){case"googlefonts":t="https://fonts.googleapis.com/css?family="+e+":100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic",i[elementor.config.locale]&&(t+="&subset="+i[elementor.config.locale]);break;case"earlyaccess":t="https://fonts.googleapis.com/earlyaccess/"+e.replace(/\s+/g,"").toLowerCase()+".css"}_.isEmpty(t)||elementor.$previewContents.find("link:last").after('<link href="'+t+'" rel="stylesheet" type="text/css">'),this._enqueuedFonts.push(e),elementor.channels.editor.trigger("font:insertion",n,e)}},resetEnqueuedFontsCache:function(){this._enqueuedFonts=[]},getElementChildType:function(e,t){if(t||(t=this.elementsHierarchy),void 0!==t[e])return jQuery.isPlainObject(t[e])?Object.keys(t[e]):null;for(var n in t)if(t.hasOwnProperty(n)&&jQuery.isPlainObject(t[n])){var i=this.getElementChildType(e,t[n]);if(i)return i}return null},getUniqueID:function(){return Math.random().toString(16).substr(2,7)},stringReplaceAll:function(e,t){var n=new RegExp(Object.keys(t).join("|"),"gi");return e.replace(n,function(e){return t[e]})},isActiveControl:function(e,t){var n,i;if(_.isFunction(e.get)?(n=e.get("condition"),i=e.get("conditions")):(n=e.condition,i=e.conditions),i)return elementor.conditions.check(i,t);if(_.isEmpty(n))return!0;var r=_.filter(n,function(e,n){var i,r=n.match(/([a-z_0-9]+)(?:\[([a-z_]+)])?(!?)$/i),s=r[1],a=r[2],l=!!r[3],c=t[s];return t.__dynamic__&&t.__dynamic__[s]&&(c=t.__dynamic__[s]),void 0===c||(a&&"object"===(void 0===c?"undefined":o(c))&&(c=c[a]),i=_.isArray(e)&&!_.isEmpty(e)?_.contains(e,c):_.isArray(c)&&!_.isEmpty(c)?_.contains(c,e):_.isEqual(e,c),l?i:!i)});return _.isEmpty(r)},cloneObject:function(e){return JSON.parse(JSON.stringify(e))},firstLetterUppercase:function(e){return e[0].toUpperCase()+e.slice(1)},disableElementEvents:function(e){e.each(function(){var e=this.style.pointerEvents;"none"!==e&&jQuery(this).data("backup-pointer-events",e).css("pointer-events","none")})},enableElementEvents:function(e){e.each(function(){var e=jQuery(this),t=e.data("backup-pointer-events");void 0!==t&&e.removeData("backup-pointer-events").css("pointer-events",t)})},getColorPickerPaletteIndex:function(e){return["7","8","1","5","2","3","6","4"].indexOf(e)},wpColorPicker:function(e,t){var n=this,i=elementor.schemes.getScheme("color-picker"),o=_.sortBy(i.items,function(e){return n.getColorPickerPaletteIndex(e.key)}),r={width:window.innerWidth>=1440?271:251,palettes:_.pluck(o,"value")};return t&&_.extend(r,t),e.wpColorPicker(r)},isInViewport:function(e,t){var n=e.getBoundingClientRect();return t=t||document.documentElement,n.top>=0&&n.left>=0&&n.bottom<=(window.innerHeight||t.clientHeight)&&n.right<=(window.innerWidth||t.clientWidth)},scrollToView:function(e,t,n){void 0===t&&(t=500);var i=n,o=elementorFrontend.getElements("$window");n||(n=o,i=elementor.$previewContents.find("html, body")),setTimeout(function(){var t=n.height(),r=n.scrollTop(),s=n===o?e.offset().top:e[0].offsetTop,a=s-r;if(!(a>0&&a<t)){var l=s-t/2;i.stop(!0).animate({scrollTop:l},1e3)}},t)},getElementInlineStyle:function(e,t){var n={},i=e[0].style;return t.forEach(function(e){n[e]=void 0!==i[e]?i[e]:""}),n},cssWithBackup:function(e,t,n){var i=this.getElementInlineStyle(e,Object.keys(n));e.data("css-backup-"+t,i).css(n)},recoverCSSBackup:function(e,t){var n="css-backup-"+t;e.css(e.data(n)),e.removeData(n)},compareVersions:function(e,t,n){var i=function(e){return(e+="").replace(/[^\d.]+/,".-1.")};if((e=i(e))===(t=i(t)))return!n||/^={2,3}$/.test(n);for(var o=e.split(".").map(Number),r=t.split(".").map(Number),s=Math.max(o.length,r.length),a=0;a<s;a++){var l=o[a]||0,c=r[a]||0;if(l!==c)return this.conditions.compare(l,c,n)}}},e.exports=i},function(e,t,n){"use strict";var i;i=function(){var e=this,t={},n=[],i=function(e){var t,n=e.size;if("custom"===n){var i=e.dimension;if(!i.width&&!i.height)return"full";t="custom_"+i.width+"x"+i.height}else t=n;return t};e.onceTriggerChange=_.once(function(e){setTimeout(function(){e.get("settings").trigger("change",e.get("settings"))},700)}),e.getImageUrl=function(t){e.registerItem(t);var n=e.getItem(t);if(!n){if("custom"===t.size)return void(elementor.getPanelView()&&"editor"===elementor.getPanelView().getCurrentPageName()&&t.model&&e.onceTriggerChange(t.model));n=t.url}return n},e.getItem=function(e){var n=i(e),o=e.id;return!!n&&(!(!t[o]||!t[o][n])&&t[o][n])},e.registerItem=function(t){""!==t.id&&(e.getItem(t)||(n.push(t),e.debounceGetRemoteItems()))},e.getRemoteItems=function(){var e,o,r=[],s=Object.keys(n).length;if(0!==s)if(1===s&&(e=n[Object.keys(n)[0]])&&e.model)e.model.renderRemoteServer();else{for(o in n){e=n[o];var a=i(e),l=e.id,c=!t[l]||0===Object.keys(t[l]).length;r.push({id:l,size:a,is_first_time:c})}elementor.ajax.send("get_images_details",{data:{items:r},success:function(e){var i,o;for(i in e)for(o in t[i]||(t[i]={}),e[i])t[i][o]=e[i][o];n=[]}})}},e.debounceGetRemoteItems=_.debounce(e.getRemoteItems,300)},e.exports=new i},function(e,t,n){"use strict";e.exports=new function(){var e=this,t=[],n={},i={},o=function(t){var i=t.originalEvent,o=i.error;if(o){var r=!1,s=n.urlsToWatch;jQuery.each(s,function(){if(-1!==o.stack.indexOf(this))return r=!0,!1}),r&&e.addError({type:o.name,message:o.message,url:i.filename,line:i.lineno,column:i.colno})}};this.addURLToWatch=function(e){n.urlsToWatch.push(e)},this.addCustomError=function(e,t,n){var i={type:e.name,message:e.message,url:e.fileName||e.sourceURL,line:e.lineNumber||e.line,column:e.columnNumber||e.column,customFields:{category:t||"general",tag:n}};if(!i.url){var o=e.stack.match(/\n {4}at (.*?(?=:(\d+):(\d+)))/);o&&(i.url=o[1],i.line=o[2],i.column=o[3])}this.addError(i)},this.addError=function(n){var i={type:"Error",timestamp:Math.floor((new Date).getTime()/1e3),message:null,url:null,line:null,column:null,customFields:{}};t.push(jQuery.extend(!0,i,n)),e.sendErrors()},this.sendErrors=function(){i.$window.off("error",o),jQuery.ajax({url:ElementorConfig.ajaxurl,method:"POST",data:{action:"elementor_debug_log",data:t},success:function(){t=[],i.$window.on("error",o)}})},n={debounceDelay:500,urlsToWatch:["elementor/assets"]},i.$window=jQuery(window),i.$window.on("error",o),e.sendErrors=_.debounce(e.sendErrors,n.debounceDelay)}},function(e,t,n){"use strict";var i,o=n(24),r=n(13);i=function(){var e=this,t=new o,n={},i=".elementor-widget-",s={},a=function(n){var o=e.getWidgetSchemeControls(n);_.each(o,function(s){!function(n,o,s){r.addControlStyleRules(t,n,o,function(t){return e.getSchemeValue(t.scheme.type,t.scheme.value,t.scheme.key).value},["{{WRAPPER}}"],[i+s])}(s,o,n.widget_type)})};this.init=function(){return s.$style=jQuery("<style>",{id:"elementor-style-scheme"}),s.$previewHead=elementor.$previewContents.find("head"),s.$previewHead.append(s.$style),n=elementor.helpers.cloneObject(elementor.config.schemes.items),e},this.getWidgetSchemeControls=function(e){return _.filter(e.controls,function(e){return _.isObject(e.scheme)})},this.getSchemes=function(){return n},this.getEnabledSchemesTypes=function(){return elementor.config.schemes.enabled_schemes},this.getScheme=function(e){return n[e]},this.getSchemeValue=function(t,n,i){if(this.getEnabledSchemesTypes().indexOf(t)<0)return!1;var o=e.getScheme(t).items[n];if(i&&_.isObject(o)){var r=elementor.helpers.cloneObject(o);return r.value=o.value[i],r}return o},this.printSchemesStyle=function(){t.empty(),_.each(elementor.config.widgets,function(e){a(e)}),s.$style.text(t)},this.resetSchemes=function(e){n[e]=elementor.helpers.cloneObject(elementor.config.schemes.items[e])},this.saveScheme=function(e){elementor.config.schemes.items[e].items=elementor.helpers.cloneObject(n[e].items);var t={};_.each(n[e].items,function(e,n){t[n]=e.value}),NProgress.start(),elementor.ajax.send("apply_scheme",{data:{scheme_name:e,data:JSON.stringify(t)},success:function(){NProgress.done()}})},this.setSchemeValue=function(e,t,i){n[e].items[t].value=i}},e.exports=new i},function(e,t,n){"use strict";var i;i={getPresetsDictionary:function(){return{11:100/9,12:12.5,14:100/7,16:100/6,33:100/3,66:2/3*100,83:5/6*100}},getAbsolutePresetValues:function(e){var t=elementor.helpers.cloneObject(e),n=this.getPresetsDictionary();return _.each(t,function(e,i){n[e]&&(t[i]=n[e])}),t},getPresets:function(e,t){var n=elementor.helpers.cloneObject(elementor.config.elements.section.presets);return e&&(n=n[e]),t&&(n=n[t]),n},getPresetByStructure:function(e){var t=this.getParsedStructure(e);return this.getPresets(t.columnsCount,t.presetIndex)},getParsedStructure:function(e){return{columnsCount:(e+="").slice(0,-1),presetIndex:e.substr(-1)}},getPresetSVG:function(e,t,n,i){t=t||100,n=n||50,i=i||2;var o=this.getAbsolutePresetValues(e),r=this._generatePresetSVGPath(o,t,n,i);return this._createSVGPreset(r,t,n)},_createSVGPreset:function(e,t,n){var i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),i.setAttribute("viewBox","0 0 "+t+" "+n);var o=document.createElementNS("http://www.w3.org/2000/svg","path");return o.setAttribute("d",e),i.appendChild(o),i},_generatePresetSVGPath:function(e,t,n,i){for(var o=t-i*(e.length-1),r=0,s="",a=0;a<e.length;a++){a&&(s+=" ");var l=e[a]/100*o;s+="M"+ +(r+=l).toFixed(4)+",0",s+="V"+n,s+="H"+ +(r-l).toFixed(4),s+="V0Z",r+=i}return s}},e.exports=i},function(e,t,n){"use strict";var i,o="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},r=n(61),s=n(73);i=function(){var e,t,n,i,a=this,l={},c={},u={},d={};this.init=function(){!function(){var e={saveDialog:{description:elementor.translate("save_your_template_description")},ajaxParams:{success:function(e){a.getTemplatesCollection().add(e),a.setTemplatesPage("local")},error:function(e){a.showErrorDialog(e)}}};_.each(["page","section"],function(t){var n=jQuery.extend(!0,{},e,{saveDialog:{title:elementor.translate("save_your_template",[elementor.translate(t)])}});a.registerTemplateType(t,n)})}(),d={text:{callback:function(e){return e=e.toLowerCase(),this.get("title").toLowerCase().indexOf(e)>=0||_.any(this.get("tags"),function(t){return t.toLowerCase().indexOf(e)>=0})}},type:{},subtype:{},favorite:{}},elementor.addBackgroundClickListener("libraryToggleMore",{element:".elementor-template-library-template-more"})},this.getTemplateTypes=function(e){return e?u[e]:u},this.registerTemplateType=function(e,t){u[e]=t},this.deleteTemplate=function(e,t){var n=a.getDeleteDialog();n.onConfirm=function(){t.onConfirm&&t.onConfirm(),elementor.ajax.send("delete_template",{data:{source:e.get("source"),template_id:e.get("template_id")},success:function(n){i.remove(e,{silent:!0}),t.onSuccess&&t.onSuccess(n)}})},n.show()},this.importTemplate=function(e,t){t=t||{},n.showLoadingView(),a.requestTemplateContent(e.get("source"),e.get("template_id"),{data:{page_settings:t.withPageSettings},success:function(n){a.closeModal(),elementor.channels.data.trigger("template:before:insert",e),elementor.getPreviewView().addChildModel(n.content,c.importOptions||{}),elementor.channels.data.trigger("template:after:insert",e),t.withPageSettings&&elementor.settings.page.model.set(n.page_settings)},error:function(e){a.showErrorDialog(e)},complete:function(){n.hideLoadingView()}})},this.saveTemplate=function(e,t){var n=u[e];_.extend(t,{source:"local",type:e}),n.prepareSavedData&&(t=n.prepareSavedData(t)),t.content=JSON.stringify(t.content);var i={data:t};n.ajaxParams&&_.extend(i,n.ajaxParams),elementor.ajax.send("save_template",i)},this.requestTemplateContent=function(e,t,n){var i={data:{source:e,edit_mode:!0,display:!0,template_id:t}};return n&&jQuery.extend(!0,i,n),elementor.ajax.send("get_template_data",i)},this.markAsFavorite=function(e,t){var n={data:{source:e.get("source"),template_id:e.get("template_id"),favorite:t}};return elementor.ajax.send("mark_template_as_favorite",n)},this.getDeleteDialog=function(){return e||(e=elementor.dialogsManager.createWidget("confirm",{id:"elementor-template-library-delete-dialog",headerMessage:elementor.translate("delete_template"),message:elementor.translate("delete_template_confirm"),strings:{confirm:elementor.translate("delete")}})),e},this.getErrorDialog=function(){return t||(t=elementor.dialogsManager.createWidget("alert",{id:"elementor-template-library-error-dialog",headerMessage:elementor.translate("an_error_occurred")})),t},this.getLayout=function(){return n},this.getTemplatesCollection=function(){return i},this.getConfig=function(e){return e?l[e]:l},this.requestLibraryData=function(e){if(!i||e.forceUpdate){e.onBeforeUpdate&&e.onBeforeUpdate();var t={data:{},success:function(t){i=new s(t.templates),l=t.config,e.onUpdate&&e.onUpdate()}};e.forceSync&&(t.data.sync=!0),elementor.ajax.send("get_library_data",t)}else e.onUpdate&&e.onUpdate()},this.startModal=function(e){n||(n=new r),n.showModal(),a.requestLibraryData({onBeforeUpdate:n.showLoadingView.bind(n),onUpdate:function(){var t=elementor.config.document.remote_type,i=-1!==l.categories.indexOf(t),o=Object.create(c);c=jQuery.extend({filters:{source:"remote",type:i?"block":"page",subtype:i?t:null},onReady:a.showTemplates},e),_.isEqual(Object.getPrototypeOf(o),c)&&"elementor-template-library-templates"===n.modalContent.currentView.id||(n.hideLoadingView(),jQuery.each(c.filters,function(e,t){a.setFilter(e,t,!0)}),c.onReady())}})},this.closeModal=function(){n.hideModal()},this.getFilter=function(e){return elementor.channels.templates.request("filter:"+e)},this.setFilter=function(e,t,n){elementor.channels.templates.reply("filter:"+e,t),n||elementor.channels.templates.trigger("filter:change")},this.getFilterTerms=function(e){return e?d[e]:d},this.setTemplatesPage=function(e,t,n){elementor.channels.templates.stopReplying(),a.setFilter("source",e,!0),t&&a.setFilter("type",t,!0),n||a.showTemplates()},this.showTemplates=function(){var e=a.getFilter("source"),t=i.filter(function(t){if(e!==t.get("source"))return!1;var n=u[t.get("type")];return!n||!1!==n.showInLibrary});n.showTemplatesView(new s(t))},this.showErrorDialog=function(e){if("object"===(void 0===e?"undefined":o(e))){var t="";_.each(e,function(e){t+="<div>"+e.message+".</div>"}),e=t}else e?e+=".":e="<i><The error message is empty></i>";a.getErrorDialog().setMessage(elementor.translate("templates_request_error")+'<div id="elementor-template-library-error-info">'+e+"</div>").show()}},e.exports=new i},function(e,t,n){"use strict";var i=n(8),o=n(62),r=n(63),s=n(64),a=n(65),l=n(66),c=n(70),u=n(71),d=n(72);e.exports=i.extend({getModalOptions:function(){return{id:"elementor-template-library-modal"}},getLogoOptions:function(){return{title:elementor.translate("library"),click:function(){elementor.templates.setTemplatesPage("remote","page")}}},getTemplateActionButton:function(e){var t="#tmpl-elementor-template-library-"+(e.isPro?"get-pro-button":"insert-button");t=elementor.hooks.applyFilters("elementor/editor/template-library/template/action-button",t,e);var n=Marionette.TemplateCache.get(t);return Marionette.Renderer.render(n)},setHeaderDefaultParts:function(){var e=this.getHeaderView();e.tools.show(new o),e.menuArea.show(new r),this.showLogo()},showTemplatesView:function(e){this.modalContent.show(new l({collection:e})),this.setHeaderDefaultParts()},showImportView:function(){this.getHeaderView().menuArea.reset(),this.modalContent.show(new u)},showSaveTemplateView:function(e){this.getHeaderView().menuArea.reset(),this.modalContent.show(new c({model:e}))},showPreviewView:function(e){this.modalContent.show(new d({url:e.get("url")}));var t=this.getHeaderView();t.menuArea.reset(),t.tools.show(new s({model:e})),t.logoArea.show(new a)}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-header-actions",id:"elementor-template-library-header-actions",ui:{import:"#elementor-template-library-header-import i",sync:"#elementor-template-library-header-sync i",save:"#elementor-template-library-header-save i"},events:{"click @ui.import":"onImportClick","click @ui.sync":"onSyncClick","click @ui.save":"onSaveClick"},onImportClick:function(){elementor.templates.getLayout().showImportView()},onSyncClick:function(){var e=this;e.ui.sync.addClass("eicon-animation-spin"),elementor.templates.requestLibraryData({onUpdate:function(){e.ui.sync.removeClass("eicon-animation-spin"),elementor.templates.setTemplatesPage(elementor.templates.getFilter("source"),elementor.templates.getFilter("type"))},forceUpdate:!0,forceSync:!0})},onSaveClick:function(){elementor.templates.getLayout().showSaveTemplateView()}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({options:{activeClass:"elementor-active"},template:"#tmpl-elementor-template-library-header-menu",id:"elementor-template-library-header-menu",ui:{menuItems:".elementor-template-library-menu-item"},events:{"click @ui.menuItems":"onMenuItemClick"},$activeItem:null,activateMenuItem:function(e){var t=this.getOption("activeClass");this.$activeItem!==e&&(this.$activeItem&&this.$activeItem.removeClass(t),e.addClass(t),this.$activeItem=e)},onRender:function(){var e=elementor.templates.getFilter("source"),t=this.ui.menuItems.filter('[data-template-source="'+e+'"]');"remote"===e&&(t=t.filter('[data-template-type="'+elementor.templates.getFilter("type")+'"]')),this.activateMenuItem(t)},onMenuItemClick:function(e){var t=e.currentTarget,n=t.dataset;this.activateMenuItem(jQuery(t)),elementor.templates.setTemplatesPage(t.dataset.templateSource,n.templateType)}})},function(e,t,n){"use strict";var i=n(25);e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-header-preview",id:"elementor-template-library-header-preview",behaviors:{insertTemplate:{behaviorClass:i}}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-header-back",id:"elementor-template-library-header-preview-back",events:{click:"onClick"},onClick:function(){elementor.templates.showTemplates()}})},function(e,t,n){"use strict";var i,o=n(67),r=n(68),s=n(16);i=Marionette.CompositeView.extend({template:"#tmpl-elementor-template-library-templates",id:"elementor-template-library-templates",childViewContainer:"#elementor-template-library-templates-container",reorderOnSort:!0,emptyView:function(){return new(n(69))},ui:{textFilter:"#elementor-template-library-filter-text",selectFilter:".elementor-template-library-filter-select",myFavoritesFilter:"#elementor-template-library-filter-my-favorites",orderInputs:".elementor-template-library-order-input",orderLabels:".elementor-template-library-order-label"},events:{"input @ui.textFilter":"onTextFilterInput","change @ui.selectFilter":"onSelectFilterChange","change @ui.myFavoritesFilter":"onMyFavoritesFilterChange","mousedown @ui.orderLabels":"onOrderLabelsClick"},comparators:{title:function(e){return e.get("title").toLowerCase()},popularityIndex:function(e){var t=e.get("popularityIndex");return t||(t=e.get("date")),-t},trendIndex:function(e){var t=e.get("trendIndex");return t||(t=e.get("date")),-t}},getChildView:function(e){return"remote"===e.get("source")?r:o},initialize:function(){this.listenTo(elementor.channels.templates,"filter:change",this._renderChildren)},filter:function(e){var t=elementor.templates.getFilterTerms(),n=!0;return jQuery.each(t,function(t){var i=elementor.templates.getFilter(t);if(i){if(this.callback){var o=this.callback.call(e,i);return o||(n=!1),o}var r=i===e.get(t);return r||(n=!1),r}}),n},order:function(e,t){var n=this.comparators[e]||e;t&&(n=this.reverseOrder(n)),this.collection.comparator=n,this.collection.sort()},reverseOrder:function(e){if("function"!=typeof e){var t=e;e=function(e){return e.get(t)}}return function(t,n){var i=e(t),o=e(n);return void 0===i?-1:void 0===o?1:i<o?1:i>o?-1:0}},addSourceData:function(){var e=this.children.isEmpty();this.$el.attr("data-template-source",e?"empty":elementor.templates.getFilter("source"))},setFiltersUI:function(){this.$(this.ui.selectFilter).select2({placeholder:elementor.translate("category"),allowClear:!0,width:150})},setMasonrySkin:function(){var e=new s({container:this.$childViewContainer,items:this.$childViewContainer.children()});this.$childViewContainer.imagesLoaded(e.run.bind(e))},toggleFilterClass:function(){this.$el.toggleClass("elementor-templates-filter-active",!(!elementor.templates.getFilter("text")&&!elementor.templates.getFilter("favorite")))},onRenderCollection:function(){this.addSourceData(),this.toggleFilterClass(),"remote"===elementor.templates.getFilter("source")&&"block"===elementor.templates.getFilter("type")&&(this.setFiltersUI(),this.setMasonrySkin())},onBeforeRenderEmpty:function(){this.addSourceData()},onTextFilterInput:function(){elementor.templates.setFilter("text",this.ui.textFilter.val())},onSelectFilterChange:function(e){var t=jQuery(e.currentTarget),n=t.data("elementor-filter");elementor.templates.setFilter(n,t.val())},onMyFavoritesFilterChange:function(){elementor.templates.setFilter("favorite",this.ui.myFavoritesFilter[0].checked)},onOrderLabelsClick:function(e){var t,n=jQuery(e.currentTarget.control);n[0].checked||(t="asc"!==n.data("default-ordering-direction")),n.toggleClass("elementor-template-library-order-reverse",t),this.order(n.val(),n.hasClass("elementor-template-library-order-reverse"))}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(26);i=o.extend({template:"#tmpl-elementor-template-library-template-local",ui:function(){return _.extend(o.prototype.ui.apply(this,arguments),{deleteButton:".elementor-template-library-template-delete",morePopup:".elementor-template-library-template-more",toggleMore:".elementor-template-library-template-more-toggle",toggleMoreIcon:".elementor-template-library-template-more-toggle i"})},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.deleteButton":"onDeleteButtonClick","click @ui.toggleMore":"onToggleMoreClick"})},onDeleteButtonClick:function(){var e=this.ui.toggleMoreIcon;elementor.templates.deleteTemplate(this.model,{onConfirm:function(){e.removeClass("eicon-ellipsis-h").addClass("fa fa-circle-o-notch fa-spin")},onSuccess:function(){elementor.templates.showTemplates()}})},onToggleMoreClick:function(){this.ui.morePopup.show()},onPreviewButtonClick:function(){open(this.model.get("url"),"_blank")}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(26);i=o.extend({template:"#tmpl-elementor-template-library-template-remote",ui:function(){return jQuery.extend(o.prototype.ui.apply(this,arguments),{favoriteCheckbox:".elementor-template-library-template-favorite-input"})},events:function(){return jQuery.extend(o.prototype.events.apply(this,arguments),{"change @ui.favoriteCheckbox":"onFavoriteCheckboxChange"})},onPreviewButtonClick:function(){elementor.templates.getLayout().showPreviewView(this.model)},onFavoriteCheckboxChange:function(){var e=this.ui.favoriteCheckbox[0].checked;this.model.set("favorite",e),elementor.templates.markAsFavorite(this.model,e),!e&&elementor.templates.getFilter("favorite")&&elementor.channels.templates.trigger("filter:change")}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({id:"elementor-template-library-templates-empty",template:"#tmpl-elementor-template-library-templates-empty",ui:{title:".elementor-template-library-blank-title",message:".elementor-template-library-blank-message"},modesStrings:{empty:{title:elementor.translate("templates_empty_title"),message:elementor.translate("templates_empty_message")},noResults:{title:elementor.translate("templates_no_results_title"),message:elementor.translate("templates_no_results_message")},noFavorites:{title:elementor.translate("templates_no_favorites_title"),message:elementor.translate("templates_no_favorites_message")}},getCurrentMode:function(){return elementor.templates.getFilter("text")?"noResults":elementor.templates.getFilter("favorite")?"noFavorites":"empty"},onRender:function(){var e=this.modesStrings[this.getCurrentMode()];this.ui.title.html(e.title),this.ui.message.html(e.message)}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({id:"elementor-template-library-save-template",template:"#tmpl-elementor-template-library-save-template",ui:{form:"#elementor-template-library-save-template-form",submitButton:"#elementor-template-library-save-template-submit"},events:{"submit @ui.form":"onFormSubmit"},getSaveType:function(){return this.model?this.model.get("elType"):"page"},templateHelpers:function(){var e=this.getSaveType();return elementor.templates.getTemplateTypes(e).saveDialog},onFormSubmit:function(e){e.preventDefault();var t=this.ui.form.elementorSerializeObject(),n=this.model?this.model.get("elType"):"page",i={removeDefault:!0};t.content=this.model?[this.model.toJSON(i)]:elementor.elements.toJSON(i),this.ui.submitButton.addClass("elementor-button-state"),elementor.templates.saveTemplate(n,t)}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-import",id:"elementor-template-library-import",ui:{uploadForm:"#elementor-template-library-import-form",fileInput:"#elementor-template-library-import-form-input"},events:{"change @ui.fileInput":"onFileInputChange"},droppedFiles:null,submitForm:function(){var e=elementor.templates.getLayout(),t=new FormData;this.droppedFiles?(t.append("file",this.droppedFiles[0]),this.droppedFiles=null):(t.append("file",this.ui.fileInput[0].files[0]),this.ui.uploadForm[0].reset());var n={data:t,processData:!1,contentType:!1,success:function(e){elementor.templates.getTemplatesCollection().add(e),elementor.templates.setTemplatesPage("local")},error:function(t){elementor.templates.showErrorDialog(t),e.showImportView()},complete:function(){e.hideLoadingView()}};elementor.ajax.send("import_template",n),e.showLoadingView()},onRender:function(){this.ui.uploadForm.on({"drag dragstart dragend dragover dragenter dragleave drop":this.onFormActions.bind(this),dragenter:this.onFormDragEnter.bind(this),"dragleave drop":this.onFormDragLeave.bind(this),drop:this.onFormDrop.bind(this)})},onFormActions:function(e){e.preventDefault(),e.stopPropagation()},onFormDragEnter:function(){this.ui.uploadForm.addClass("elementor-drag-over")},onFormDragLeave:function(e){jQuery(e.relatedTarget).closest(this.ui.uploadForm).length||this.ui.uploadForm.removeClass("elementor-drag-over")},onFormDrop:function(e){this.droppedFiles=e.originalEvent.dataTransfer.files,this.submitForm()},onFileInputChange:function(){this.submitForm()}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-template-library-preview",id:"elementor-template-library-preview",ui:{iframe:"> iframe"},onRender:function(){this.ui.iframe.attr("src",this.getOption("url"))}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(74);i=Backbone.Collection.extend({model:o}),e.exports=i},function(e,t,n){"use strict";e.exports=Backbone.Model.extend({defaults:{template_id:0,title:"",source:"",type:"",subtype:"",author:"",thumbnail:"",url:"",export_link:"",tags:[]}})},function(e,t,n){"use strict";var i;i={config:{},requests:{},cache:{},initConfig:function(){this.config={ajaxParams:{type:"POST",url:elementor.config.ajaxurl,data:{}},actionPrefix:"elementor_"}},init:function(){this.initConfig(),this.debounceSendBatch=_.debounce(this.sendBatch.bind(this),500)},getCacheKey:function(e){return JSON.stringify({unique_id:e.unique_id,data:e.data})},loadObjects:function(e){var t=this,n={},i=[];e.before&&e.before(),e.ids.forEach(function(o){i.push(t.load({action:e.action,unique_id:e.data.unique_id+o,data:jQuery.extend({id:o},e.data)}).done(function(e){n=jQuery.extend(n,e)}))}),jQuery.when.apply(jQuery,i).done(function(){e.success(n)})},load:function(e){var t=this;e.unique_id||(e.unique_id=e.action),e.before&&e.before();var n=t.getCacheKey(e);return _.has(t.cache,n)?jQuery.Deferred().done(e.success).resolve(t.cache[n]):t.addRequest(e.action,{data:e.data,unique_id:e.unique_id,success:function(e){t.cache[n]=e}}).done(e.success)},addRequest:function(e,t,n){(t=t||{}).unique_id||(t.unique_id=e),t.deferred=jQuery.Deferred().done(t.success).fail(t.error).always(t.complete);var i={action:e,options:t};if(n){var o={};o[t.unique_id]=i,t.deferred.jqXhr=this.sendBatch(o)}else this.requests[t.unique_id]=i,this.debounceSendBatch();return t.deferred},sendBatch:function(e){var t={};return e||(e=this.requests,this.requests={}),_(e).each(function(e,n){t[n]={action:e.action,data:e.options.data}}),this.send("ajax",{data:{actions:JSON.stringify(t)},success:function(t){_.each(t.responses,function(t,n){var i=e[n].options;i&&(t.success?i.deferred.resolve(t.data):t.success||i.deferred.reject(t.data))})},error:function(t){_.each(e,function(e){e.options&&e.options.deferred.reject(t)})}})},send:function(e,t){var n=this,i=elementor.helpers.cloneObject(this.config.ajaxParams);t=t||{},e=this.config.actionPrefix+e,jQuery.extend(i,t),i.data instanceof FormData?(i.data.append("action",e),i.data.append("_nonce",elementor.config.nonce),i.data.append("editor_post_id",elementor.config.document.id)):(i.data.action=e,i.data._nonce=elementor.config.nonce,i.data.editor_post_id=elementor.config.document.id);var o=i.success,r=i.error;return(o||r)&&(i.success=function(e){e.success&&o&&o(e.data),!e.success&&r&&r(e.data)},i.error=r?function(e){r(e)}:function(e){if(0!==e.readyState||"abort"!==e.statusText){var t=n.createErrorMessage(e);elementor.notifications.showToast({message:t})}}),jQuery.ajax(i)},createErrorMessage:function(e){var t;return 4===e.readyState?(t=elementor.translate("server_error"),200!==e.status&&(t+=" ("+e.status+" "+e.statusText+")")):t=0===e.readyState?elementor.translate("server_connection_lost"):elementor.translate("unknown_error"),t+"."}},e.exports=i},function(e,t,n){"use strict";var i;i=function(){var e=this;this.compare=function(e,t,n){switch(n){case"==":return e==t;case"!=":return e!=t;case"!==":return e!==t;case"in":return-1!==t.indexOf(e);case"!in":return-1===t.indexOf(e);case"contains":return-1!==e.indexOf(t);case"!contains":return-1===e.indexOf(t);case"<":return e<t;case"<=":return e<=t;case">":return e>t;case">=":return e>=t;default:return e===t}},this.check=function(t,n){var i="or"===t.relation,o=!i;return jQuery.each(t.terms,function(){var t;if(this.terms)t=e.check(this,n);else{var r=this.name.match(/(\w+)(?:\[(\w+)])?/),s=n[r[1]];r[2]&&(s=s[r[2]]),t=e.compare(s,this.value,this.operator)}return i?(t&&(o=!0),!t):t?void 0:o=!1}),o}},e.exports=new i},function(e,t,n){"use strict";var i,o=n(78);i=function(){var e=this,t=function(){elementor.getPanelView().addPage("historyPage",{view:o,title:elementor.translate("history")})};jQuery(window).on("elementor:init",function(){elementor.on("preview:loaded",t),e.history=n(84),e.revisions=n(93),e.revisions.init()})},e.exports=new i},function(e,t,n){"use strict";var i=n(79),o=n(80),r=n(81),s=n(83);e.exports=Marionette.LayoutView.extend({template:"#tmpl-elementor-panel-history-page",regions:{content:"#elementor-panel-history-content"},ui:{tabs:".elementor-panel-navigation-tab"},events:{"click @ui.tabs":"onTabClick"},regionViews:{},currentTab:null,initialize:function(){this.initRegionViews()},initRegionViews:function(){var e=elementor.history.history.getItems(),t=elementor.history.revisions.getItems();this.regionViews={history:{region:this.content,view:function(){return e.length?i:o},options:{collection:e}},revisions:{region:this.content,view:function(){return t.length?r:s},options:{collection:t}}}},activateTab:function(e){this.ui.tabs.removeClass("elementor-active").filter('[data-view="'+e+'"]').addClass("elementor-active"),this.showView(e)},getCurrentTab:function(){return this.currentTab},showView:function(e){var t=this.regionViews[e],n=t.options||{},i=t.view;"function"==typeof i&&(i=t.view()),n.viewName=e,this.currentTab=new i(n),t.region.show(this.currentTab)},onRender:function(){this.showView("history")},onTabClick:function(e){this.activateTab(e.currentTarget.dataset.view)},onDestroy:function(){elementor.getPanelView().getFooterView().ui.history.removeClass("elementor-open")}})},function(e,t,n){"use strict";e.exports=Marionette.CompositeView.extend({id:"elementor-panel-history",template:"#tmpl-elementor-panel-history-tab",childView:Marionette.ItemView.extend({template:"#tmpl-elementor-panel-history-item",ui:{item:".elementor-history-item"},triggers:{"click @ui.item":"item:click"}}),childViewContainer:"#elementor-history-list",currentItem:null,onRender:function(){var e=this;_.defer(function(){if(e.children.length){var t=e.collection.find(function(e){return"not_applied"===e.get("status")}),n=e.children.findByModel(t);e.updateCurrentItem(n.$el)}})},updateCurrentItem:function(e){this.currentItem&&this.currentItem.removeClass("elementor-history-item-current"),this.currentItem=e,this.currentItem.addClass("elementor-history-item-current")},onChildviewItemClick:function(e,t){if(e.$el!==this.currentItem){var n=t.model.collection.findIndex(t.model);elementor.history.history.doItem(n),this.updateCurrentItem(e.$el),this.isDestroyed||this.render()}}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-history-no-items",id:"elementor-panel-history-no-items",className:"elementor-nerd-box"})},function(e,t,n){"use strict";e.exports=Marionette.CompositeView.extend({id:"elementor-panel-revisions",template:"#tmpl-elementor-panel-revisions",childView:n(82),childViewContainer:"#elementor-revisions-list",ui:{discard:".elementor-panel-scheme-discard .elementor-button",apply:".elementor-panel-scheme-save .elementor-button"},events:{"click @ui.discard":"onDiscardClick","click @ui.apply":"onApplyClick"},isRevisionApplied:!1,jqueryXhr:null,currentPreviewId:null,currentPreviewItem:null,initialize:function(){this.listenTo(elementor.channels.editor,"saved",this.onEditorSaved),this.currentPreviewId=elementor.config.current_revision_id},getRevisionViewData:function(e){var t=this;this.jqueryXhr=elementor.history.revisions.getRevisionDataAsync(e.model.get("id"),{success:function(n){elementor.history.revisions.setEditorData(n.elements),elementor.settings.page.model.set(n.settings),t.setRevisionsButtonsActive(!0),t.jqueryXhr=null,e.$el.removeClass("elementor-revision-item-loading"),t.enterReviewMode()},error:function(){e.$el.removeClass("elementor-revision-item-loading"),"abort"!==t.jqueryXhr.statusText&&(t.currentPreviewItem=null,t.currentPreviewId=null,alert("An error occurred"))}})},setRevisionsButtonsActive:function(e){this.ui.apply.add(this.ui.discard).prop("disabled",!e)},deleteRevision:function(e){var t=this;e.$el.addClass("elementor-revision-item-loading"),elementor.history.revisions.deleteRevision(e.model,{success:function(){e.model.get("id")===t.currentPreviewId&&t.onDiscardClick(),t.currentPreviewId=null},error:function(){e.$el.removeClass("elementor-revision-item-loading"),alert("An error occurred")}})},enterReviewMode:function(){elementor.changeEditMode("review")},exitReviewMode:function(){elementor.changeEditMode("edit")},navigate:function(e){var t=this.collection.indexOf(this.currentPreviewItem.model),n=e?t-1:t+1;n<0&&(n=this.collection.length-1),n>=this.collection.length&&(n=0),this.children.findByIndex(n).ui.detailsArea.trigger("click")},onEditorSaved:function(){this.exitReviewMode(),this.setRevisionsButtonsActive(!1),this.currentPreviewId=elementor.config.current_revision_id},onApplyClick:function(){elementor.saver.setFlagEditorChange(!0),elementor.saver.saveAutoSave(),this.isRevisionApplied=!0,this.currentPreviewId=null,elementor.history.history.getItems().reset()},onDiscardClick:function(){elementor.history.revisions.setEditorData(elementor.config.data),elementor.saver.setFlagEditorChange(this.isRevisionApplied),this.isRevisionApplied=!1,this.setRevisionsButtonsActive(!1),this.currentPreviewId=null,this.exitReviewMode(),this.currentPreviewItem&&this.currentPreviewItem.$el.removeClass("elementor-revision-current-preview")},onDestroy:function(){this.currentPreviewId&&this.currentPreviewId!==elementor.config.current_revision_id&&this.onDiscardClick()},onRenderCollection:function(){if(this.currentPreviewId){var e=this.collection.findWhere({id:this.currentPreviewId});e&&(this.currentPreviewItem=this.children.findByModelCid(e.cid),this.currentPreviewItem.$el.addClass("elementor-revision-current-preview"))}},onChildviewDetailsAreaClick:function(e){var t=this,n=e.model.get("id");n!==t.currentPreviewId&&(this.jqueryXhr&&this.jqueryXhr.abort(),t.currentPreviewItem&&t.currentPreviewItem.$el.removeClass("elementor-revision-current-preview"),e.$el.addClass("elementor-revision-current-preview elementor-revision-item-loading"),elementor.saver.isEditorChanged()&&null===t.currentPreviewId?elementor.saver.saveEditor({status:"autosave",onSuccess:function(){t.getRevisionViewData(e)}}):t.getRevisionViewData(e),t.currentPreviewItem=e,t.currentPreviewId=n)},onChildviewDeleteClick:function(e){var t=this,n=e.model.get("type");elementor.dialogsManager.createWidget("confirm",{message:elementor.translate("dialog_confirm_delete",[n]),headerMessage:elementor.translate("delete_element",[n]),strings:{confirm:elementor.translate("delete"),cancel:elementor.translate("cancel")},defaultOption:"confirm",onConfirm:function(){t.deleteRevision(e)}}).show()}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-revisions-revision-item",className:"elementor-revision-item",ui:{detailsArea:".elementor-revision-item__details",deleteButton:".elementor-revision-item__tools-delete"},triggers:{"click @ui.detailsArea":"detailsArea:click","click @ui.deleteButton":"delete:click"}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-revisions-no-revisions",id:"elementor-panel-revisions-no-revisions",className:"elementor-nerd-box"})},function(e,t,n){"use strict";var i=n(85),o=n(27),r=n(86),s=n(87);e.exports=new function(){var e=this,t=null,n=new i,a=!1,l=!0,c={add:elementor.translate("added"),remove:elementor.translate("removed"),change:elementor.translate("edited"),move:elementor.translate("moved"),paste_style:elementor.translate("style_pasted"),reset_style:elementor.translate("style_reset")},u=function(e){return e.ElementHistory={behaviorClass:r},e.CollectionHistory={behaviorClass:s},e},d=function(e){return e.CollectionHistory={behaviorClass:s},e},m=function(t){var i=n.find(function(e){return"not_applied"===e.get("status")}),o=n.indexOf(i),r=t?o-1:o+1;!t&&!i||r<0||r>=n.length||e.doItem(r)},h=function(){if(n.length>=2){var e=n.at(n.length-2);a="not_applied"===e.get("status")}};this.setActive=function(e){l=e},this.getActive=function(){return l},this.getItems=function(){return n},this.startItem=function(e){t=this.addItem(e)},this.endItem=function(){t=null},this.isItemStarted=function(){return null!==t},this.addItem=function(i){if(this.getActive()){for(n.length||n.add({status:"not_applied",title:elementor.translate("editing_started"),subTitle:"",action:"",editing_started:!0});n.length&&"applied"===n.first().get("status");)n.shift();var r=t||(new Date).getTime(),s=n.findWhere({id:r});s||(s=new o({id:r,title:i.title,subTitle:i.subTitle,action:function(e){return c[e.type]?c[e.type]:e.type}(i),type:i.type,elementType:i.elementType}),e.startItemTitle="",e.startItemAction="");var a=0;"column"===i.elementType&&"remove"===i.type&&"column"===s.get("elementType")&&(a=1),s.get("items").add(i,{at:a}),n.add(s,{at:0});var l=elementor.getPanelView();return"historyPage"===l.getCurrentPageName()&&l.getCurrentPageView().render(),r}},this.doItem=function(t){this.setActive(!1);var i=n.at(t);"not_applied"===i.get("status")?this.undoItem(t):this.redoItem(t),this.setActive(!0);var o,r=elementor.getPanelView(),s=r.getCurrentPageView();if("editor"===r.getCurrentPageName())s.getOption("editedElementView").isDestroyed?r.setPage("historyPage"):o=s.getOption("editedElementView");else if("historyPage"===r.getCurrentPageName()&&s.render(),i instanceof Backbone.Model&&i.get("items").length){var l=i.get("items").first().get("history");l&&l.behavior.view.model&&(o=e.findView(l.behavior.view.model.get("id")))}o&&!elementor.helpers.isInViewport(o.$el[0],elementor.$previewContents.find("html")[0])&&elementor.helpers.scrollToView(o.$el),i.get("editing_started")&&(a||elementor.saver.setFlagEditorChange(!1))},this.undoItem=function(e){for(var t,i=0;i<e;i++)"not_applied"===(t=n.at(i)).get("status")&&(t.get("items").each(function(e){var t=e.get("history");t&&t.behavior.restore(e)}),t.set("status","applied"))},this.redoItem=function(e){for(var t=n.length-1;t>=e;t--){var i=n.at(t);if("applied"===i.get("status")){var o=_.toArray(i.get("items").models).reverse();_(o).each(function(e){var t=e.get("history");t&&t.behavior.restore(e,!0)}),i.set("status","not_applied")}}},this.getModelLabel=function(e){return e instanceof Backbone.Model||(e=new Backbone.Model(e)),elementor.getElementData(e).title},this.findView=function(e,t){var n=this,i=!1;return t||(t=elementor.getPreviewView().children),_.each(t._views,function(t){if(!i){var o=t.getEditModel?t.getEditModel():t.model;e===o.get("id")?i=t:t.children&&t.children.length&&(i=n.findView(e,t.children))}}),i},this.startMovingItem=function(t){elementor.history.history.startItem({type:"move",title:e.getModelLabel(t),elementType:t.elType||t.get("elType")})},this.startInsertTemplate=function(e){elementor.history.history.startItem({type:"add",title:elementor.translate("template"),subTitle:e.get("title"),elementType:"template"})},this.startDropElement=function(){var t=elementor.channels.panelElements.request("element:selected");elementor.history.history.startItem({type:"add",title:e.getModelLabel(t.model),elementType:t.model.get("widgetType")||t.model.get("elType")})},this.startAddElement=function(t){elementor.history.history.startItem({type:"add",title:e.getModelLabel(t),elementType:t.elType})},this.startPasteStyle=function(t){elementor.history.history.startItem({type:"paste_style",title:e.getModelLabel(t),elementType:t.get("elType")})},this.startResetStyle=function(t){elementor.history.history.startItem({type:"reset_style",title:e.getModelLabel(t),elementType:t.get("elType")})},this.startRemoveElement=function(t){elementor.history.history.startItem({type:"remove",title:e.getModelLabel(t),elementType:t.get("elType")})},function(){elementor.hotKeys.addHotKeyHandler(72,"showHistoryPage",{isWorthHandling:function(e){return elementor.hotKeys.isControlEvent(e)&&e.shiftKey},handle:function(){elementor.getPanelView().setPage("historyPage")}});var e=function(e){return n.length&&elementor.hotKeys.isControlEvent(e)&&!jQuery(e.target).is("input, textarea, [contenteditable=true]")};elementor.hotKeys.addHotKeyHandler(89,"historyNavigationRedo",{isWorthHandling:e,handle:function(e){m(!0)}}),elementor.hotKeys.addHotKeyHandler(90,"historyNavigation",{isWorthHandling:e,handle:function(e){m(e.shiftKey)}})}(),elementor.hooks.addFilter("elements/base/behaviors",u),elementor.hooks.addFilter("elements/base-section-container/behaviors",d),elementor.channels.data.on("drag:before:update",e.startMovingItem).on("drag:after:update",e.endItem).on("element:before:add",e.startAddElement).on("element:after:add",e.endItem).on("element:before:remove",e.startRemoveElement).on("element:after:remove",e.endItem).on("element:before:paste:style",e.startPasteStyle).on("element:after:paste:style",e.endItem).on("element:before:reset:style",e.startResetStyle).on("element:after:reset:style",e.endItem).on("section:before:drop",e.startDropElement).on("section:after:drop",e.endItem).on("template:before:insert",e.startInsertTemplate).on("template:after:insert",e.endItem),elementor.channels.editor.on("saved",h)}},function(e,t,n){"use strict";var i=n(27);e.exports=Backbone.Collection.extend({model:i})},function(e,t,n){"use strict";e.exports=Marionette.Behavior.extend({oldValues:[],listenerAttached:!1,initialize:function(){this.lazySaveTextHistory=_.debounce(this.saveTextHistory.bind(this),800)},onBeforeRender:function(){this.listenerAttached||(this.listenTo(this.view.getEditModel().get("settings"),"change",this.saveHistory),this.listenerAttached=!0)},saveTextHistory:function(e,t,n){var i,o={},r=e.get(n.name);i=r instanceof Backbone.Collection?r.toJSON():r,o[n.name]={old:this.oldValues[n.name],new:i};var s={type:"change",elementType:"control",title:elementor.history.history.getModelLabel(e),subTitle:n.label,history:{behavior:this,changed:o,model:this.view.getEditModel().toJSON()}};elementor.history.history.addItem(s),delete this.oldValues[n.name]},saveHistory:function(e,t){if(elementor.history.history.getActive()){var n=Object.keys(e.changed),i=e.controls[n[0]];if(!i&&t&&t.control&&(i=t.control),n.length&&i){if(1===n.length)return _.isUndefined(this.oldValues[i.name])&&(this.oldValues[i.name]=e.previous(i.name)),void(elementor.history.history.isItemStarted()?this.saveTextHistory(e,n,i):this.lazySaveTextHistory(e,n,i));var o={};_.each(n,function(t){o[t]={old:e.previous(t),new:e.get(t)}});var r={type:"change",elementType:"control",title:elementor.history.history.getModelLabel(e),history:{behavior:this,changed:o,model:this.view.getEditModel().toJSON()}};1===n.length&&(r.subTitle=i.label),elementor.history.history.addItem(r)}}},restore:function(e,t){var n=e.get("history"),i=n.model.id,o=elementor.history.history.findView(i);if(o){var r=(o.getEditModel?o.getEditModel():o.model).get("settings"),s=o.getBehavior("ElementHistory");s.stopListening(r,"change",this.saveHistory);var a={};_.each(n.changed,function(e,n){a[n]=t?e.new:e.old}),r.setExternalChange(a),e.set("status",t?"not_applied":"applied"),s.listenTo(r,"change",this.saveHistory)}}})},function(e,t,n){"use strict";e.exports=Marionette.Behavior.extend({listenerAttached:!1,onBeforeRender:function(){this.view.collection&&!this.listenerAttached&&(this.view.collection.on("update",this.saveCollectionHistory,this).on("reset",this.onDeleteAllContent,this),this.listenerAttached=!0)},onDeleteAllContent:function(e,t){if(elementor.history.history.getActive()){var n=[];_.each(t.previousModels,function(e){n.push(e.toJSON({copyHtmlCache:!0}))});var i={type:"remove",elementType:"section",title:elementor.translate("all_content"),history:{behavior:this,collection:t.previousModels,event:t,models:n}};elementor.history.history.addItem(i)}},saveCollectionHistory:function(e,t){if(elementor.history.history.getActive()){var n,i,o,r;t.add?(o=(i=t.changes.added)[0],r="add"):(o=(i=t.changes.removed)[0],r="remove");var s=elementor.history.history.getModelLabel(o);if(s){var a=[];_.each(i,function(e){a.push(e.toJSON({copyHtmlCache:!0}))}),n={type:r,elementType:o.get("elType"),elementID:o.get("id"),title:s,history:{behavior:this,collection:e,event:t,models:a}},elementor.history.history.addItem(n)}}},add:function(e,t,n){"section"===e[0].elType&&_.each(e,function(e){e.allowEmpty=!0}),t.$el.hasClass("elementor-inner")&&t.$el[0].ownerDocument!==elementor.$previewContents[0]&&(t=elementor.getPreviewView()),t.addChildModel(e,{at:n,silent:0})},remove:function(e,t){t.remove(e,{silent:0})},restore:function(e,t){var i,o=e.get("type"),r=e.get("history"),s=!1,a=n(10);if(r.behavior.view instanceof a){var l=r.behavior.view.model.get("id"),c=elementor.history.history.findView(l);c&&(i=c.getBehavior("CollectionHistory"))}switch(i||(i=r.behavior),i.view.collection.off("update",i.saveCollectionHistory),o){case"add":t?this.add(r.models,i.view,r.event.index):this.remove(r.models,i.view.collection),s=!0;break;case"remove":t?this.remove(r.models,i.view.collection):this.add(r.models,i.view,r.event.index),s=!0}return i.view.collection.on("update",i.saveCollectionHistory,r.behavior),s}})},function(e,t,n){"use strict";var i;i=n(2).extend({getDefaultSettings:function(){return{actions:{},classes:{list:"elementor-context-menu-list",group:"elementor-context-menu-list__group",groupPrefix:"elementor-context-menu-list__group-",item:"elementor-context-menu-list__item",itemTypePrefix:"elementor-context-menu-list__item-",itemTitle:"elementor-context-menu-list__item__title",itemShortcut:"elementor-context-menu-list__item__shortcut",iconShortcut:"elementor-context-menu-list__item__icon",itemDisabled:"elementor-context-menu-list__item--disabled",divider:"elementor-context-menu-list__divider",hidden:"elementor-hidden"}}},buildActionItem:function(e){var t=this,n=t.getSettings("classes"),i=jQuery("<div>",{class:n.item+" "+n.itemTypePrefix+e.name}),o=jQuery("<div>",{class:n.itemTitle}).text(e.title),r=jQuery("<div>",{class:n.iconShortcut});if(e.icon&&r.html(jQuery("<i>",{class:e.icon})),i.append(r,o),e.shortcut){var s=jQuery("<div>",{class:n.itemShortcut}).html(e.shortcut);i.append(s)}return e.callback&&i.on("click",function(){t.runAction(e)}),e.$item=i,i},buildActionsList:function(){var e=this,t=e.getSettings("classes"),n=e.getSettings("groups"),i=jQuery("<div>",{class:t.list});return n.forEach(function(n){var o=jQuery("<div>",{class:t.group+" "+t.groupPrefix+n.name});n.actions.forEach(function(t){o.append(e.buildActionItem(t))}),i.append(o),n.$item=o}),i},toggleGroupVisibility:function(e,t){e.$item.toggleClass(this.getSettings("classes.hidden"),!t)},toggleActionVisibility:function(e,t){e.$item.toggleClass(this.getSettings("classes.hidden"),!t)},toggleActionUsability:function(e,t){e.$item.toggleClass(this.getSettings("classes.itemDisabled"),!t)},isActionEnabled:function(e){return!(!e.callback&&!e.groups)&&(!e.isEnabled||e.isEnabled())},runAction:function(e){this.isActionEnabled(e)&&(e.callback(),this.getModal().hide())},initModal:function(){var e;this.getModal=function(){return e||(e=elementor.dialogsManager.createWidget("simple",{className:"elementor-context-menu",message:this.buildActionsList(),iframe:elementor.$preview,effects:{hide:"hide",show:"show"},hide:{onOutsideContextMenu:!0},position:{my:(elementor.config.is_rtl?"right":"left")+" top",collision:"fit"}})),e}},show:function(e){var t=this,n=t.getModal();n.setSettings("position",{of:e}),t.getSettings("groups").forEach(function(e){var n=!1!==e.isVisible;t.toggleGroupVisibility(e,n),n&&e.actions.forEach(function(e){var n=!1!==e.isVisible;t.toggleActionVisibility(e,n),n&&t.toggleActionUsability(e,t.isActionEnabled(e))})}),n.show()},destroy:function(){this.getModal().destroy()},onInit:function(){this.initModal()}}),e.exports=i},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=function e(t,n,i){null===t&&(t=Function.prototype);var o=Object.getOwnPropertyDescriptor(t,n);if(void 0===o){var r=Object.getPrototypeOf(t);return null===r?void 0:e(r,n,i)}if("value"in o)return o.value;var s=o.get;return void 0!==s?s.call(i):void 0},r=function(e){return e&&e.__esModule?e:{default:e}}(n(30));var s=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r.default),i(t,[{key:"className",value:function(){return o(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"className",this).call(this)+" elementor-add-section-inline"}},{key:"fadeToDeath",value:function(){var e=this;e.$el.slideUp(function(){e.destroy()})}},{key:"paste",value:function(){o(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"paste",this).call(this),this.destroy()}},{key:"onCloseButtonClick",value:function(){this.fadeToDeath()}},{key:"onPresetSelected",value:function(e){o(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"onPresetSelected",this).call(this,e),this.destroy()}},{key:"onAddTemplateButtonClick",value:function(){o(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"onAddTemplateButtonClick",this).call(this),this.destroy()}},{key:"onDropping",value:function(){o(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"onDropping",this).call(this),this.destroy()}}]),t}();t.default=s},function(e,t,n){"use strict";var i,o=n(10),r=n(91);i=o.extend({template:Marionette.TemplateCache.get("#tmpl-elementor-column-content"),emptyView:r,childViewContainer:"> .elementor-column-wrap > .elementor-widget-wrap",toggleEditTools:!0,behaviors:function(){var e=o.prototype.behaviors.apply(this,arguments);return _.extend(e,{Sortable:{behaviorClass:n(19),elChildType:"widget"},Resizable:{behaviorClass:n(92)}}),elementor.hooks.applyFilters("elements/column/behaviors",e,this)},className:function(){return o.prototype.className.apply(this,arguments)+" elementor-column elementor-"+(this.isInner()?"inner":"top")+"-column"},tagName:function(){return this.model.getSetting("html_tag")||"div"},ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.columnInner="> .elementor-column-wrap",e.percentsTooltip="> .elementor-element-overlay .elementor-column-percents-tooltip",e},initialize:function(){o.prototype.initialize.apply(this,arguments),this.addControlValidator("_inline_size",this.onEditorInlineSizeInputChange)},getContextMenuGroups:function(){var e=o.prototype.getContextMenuGroups.apply(this,arguments),t=e.indexOf(_.findWhere(e,{name:"general"}));return e.splice(t+1,0,{name:"addNew",actions:[{name:"addNew",icon:"eicon-plus",title:elementor.translate("new_column"),callback:this.addNewColumn.bind(this)}]}),e},isDroppingAllowed:function(){var e=elementor.channels.panelElements.request("element:selected");if(!e)return!1;var t=e.model.get("elType");return"section"===t?!this.isInner():"widget"===t},getPercentsForDisplay:function(){return(+this.model.getSetting("_inline_size")||this.getPercentSize()).toFixed(1)+"%"},changeSizeUI:function(){var e=this,t=e.model.getSetting("_column_size");e.$el.attr("data-col",t),_.defer(function(){e.ui.percentsTooltip&&e.ui.percentsTooltip.text(e.getPercentsForDisplay())})},getPercentSize:function(e){return e||(e=this.el.getBoundingClientRect().width),+(e/this.$el.parent().width()*100).toFixed(3)},getSortableOptions:function(){return{connectWith:".elementor-widget-wrap",items:"> .elementor-element"}},changeChildContainerClasses:function(){this.collection.isEmpty()?this.ui.columnInner.removeClass("elementor-element-populated").addClass("elementor-element-empty"):this.ui.columnInner.removeClass("elementor-element-empty").addClass("elementor-element-populated")},addNewColumn:function(){this.trigger("request:add:new")},onCollectionChanged:function(){o.prototype.onCollectionChanged.apply(this,arguments),this.changeChildContainerClasses()},onRender:function(){var e=this;o.prototype.onRender.apply(e,arguments),e.changeChildContainerClasses(),e.changeSizeUI(),e.$el.html5Droppable({items:" > .elementor-column-wrap > .elementor-widget-wrap > .elementor-element, >.elementor-column-wrap > .elementor-widget-wrap > .elementor-empty-view > .elementor-first-add",axis:["vertical"],groups:["elementor-element"],isDroppingAllowed:e.isDroppingAllowed.bind(e),currentElementClass:"elementor-html5dnd-current-element",placeholderClass:"elementor-sortable-placeholder elementor-widget-placeholder",hasDraggingOnChildClass:"elementor-dragging-on-child",onDropping:function(t,n){n.stopPropagation();var i=jQuery(this).index();"bottom"===t&&i++,e.addElementFromPanel({at:i})}})},onSettingsChanged:function(e){o.prototype.onSettingsChanged.apply(this,arguments);var t=e.changedAttributes();("_column_size"in t||"_inline_size"in t)&&this.changeSizeUI()},onEditorInlineSizeInputChange:function(e,t){var n=[],i=this.model.getSetting("_column_size");if(100===i)return n.push("Could not resize one column"),n;t||(t=i);try{this._parent.resizeChild(this,+t,+e)}catch(e){e.message===this._parent.errors.columnWidthTooLarge&&n.push(e.message)}return n},onAddButtonClick:function(e){e.stopPropagation(),this.addNewColumn()}}),e.exports=i},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-empty-preview",className:"elementor-empty-view",events:{click:"onClickAdd"},behaviors:function(){return{contextMenu:{behaviorClass:n(11),groups:this.getContextMenuGroups()}}},getContextMenuGroups:function(){return[{name:"general",actions:[{name:"paste",title:elementor.translate("paste"),callback:this.paste.bind(this),isEnabled:this.isPasteEnabled.bind(this)}]}]},paste:function(){var e=this,t=0;elementor.getStorage("transfer").elements.forEach(function(n){e._parent.addChildElement(n,{at:t,clone:!0}),t++})},isPasteEnabled:function(){var e=elementor.getStorage("transfer");return!!e&&("section"===e.elementsType?e.elements[0].isInner&&!this._parent.isInner():"widget"===e.elementsType)},onClickAdd:function(){elementor.getPanelView().setPage("elements")}})},function(e,t,n){"use strict";var i;i=Marionette.Behavior.extend({defaults:{handles:elementor.config.is_rtl?"w":"e"},events:{resizestart:"onResizeStart",resizestop:"onResizeStop",resize:"onResize"},initialize:function(){Marionette.Behavior.prototype.initialize.apply(this,arguments),this.listenTo(elementor.channels.dataEditMode,"switch",this.onEditModeSwitched)},active:function(){if(elementor.userCan("design")){this.deactivate();var e=_.clone(this.options);delete e.behaviorClass;var t=this.getChildViewContainer(),n=_.extend({},e);t.resizable(n)}},deactivate:function(){this.getChildViewContainer().resizable("instance")&&this.getChildViewContainer().resizable("destroy")},onEditModeSwitched:function(e){"edit"===e?this.active():this.deactivate()},onRender:function(){var e=this;_.defer(function(){e.onEditModeSwitched(elementor.channels.dataEditMode.request("activeMode"))})},onDestroy:function(){this.deactivate()},onResizeStart:function(e){e.stopPropagation(),this.view.$el.data("originalWidth",this.view.el.getBoundingClientRect().width),this.view.triggerMethod("request:resize:start",e)},onResizeStop:function(e){e.stopPropagation(),this.view.triggerMethod("request:resize:stop")},onResize:function(e,t){e.stopPropagation(),this.view.triggerMethod("request:resize",t,e)},getChildViewContainer:function(){return this.$el}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(94);i=function(){var e,t=this;this.getItems=function(){return e};var n=function(n){if(n.latest_revisions&&t.addRevisions(n.latest_revisions),n.revisions_ids){var i=e.filter(function(e){return-1!==n.revisions_ids.indexOf(e.get("id"))});e.reset(i)}};this.setEditorData=function(e){var t=elementor.getRegion("sections").currentView.collection;elementor.history.history.setActive(!1),t.reset(e),elementor.history.history.setActive(!0)},this.getRevisionDataAsync=function(e,t){return _.extend(t,{data:{id:e}}),elementor.ajax.send("get_revision_data",t)},this.addRevisions=function(t){t.forEach(function(t){var n=e.findWhere({id:t.id});n&&e.remove(n),e.add(t)})},this.deleteRevision=function(t,n){var i={data:{id:t.get("id")},success:function(){if(n.success&&n.success(),t.destroy(),!e.length){var i=elementor.getPanelView();"historyPage"===i.getCurrentPageName()&&i.getCurrentPageView().activateTab("revisions")}}};n.error&&(i.error=n.error),elementor.ajax.send("delete_revision",i)},this.init=function(){e=new o(elementor.config.revisions),elementor.channels.editor.on("saved",n),function(){var e={isWorthHandling:function(){var e=elementor.getPanelView();if("historyPage"!==e.getCurrentPageName())return!1;var t=e.getCurrentPageView().getCurrentTab();return t.currentPreviewId&&t.currentPreviewItem&&t.children.length>1},handle:function(e){elementor.getPanelView().getCurrentPageView().getCurrentTab().navigate(38===e.which)}};elementor.hotKeys.addHotKeyHandler(38,"revisionNavigation",e),elementor.hotKeys.addHotKeyHandler(40,"revisionNavigation",e)}()}},e.exports=new i},function(e,t,n){"use strict";var i=n(95);e.exports=Backbone.Collection.extend({model:i,comparator:function(e){return-e.get("timestamp")}})},function(e,t,n){"use strict";var i;(i=Backbone.Model.extend()).prototype.sync=function(){return null},e.exports=i},function(e,t,n){"use strict";e.exports=Marionette.Behavior.extend({previewWindow:null,ui:function(){return{buttonPreview:"#elementor-panel-saver-button-preview",buttonPublish:"#elementor-panel-saver-button-publish",buttonSaveOptions:"#elementor-panel-saver-button-save-options",buttonPublishLabel:"#elementor-panel-saver-button-publish-label",menuSaveDraft:"#elementor-panel-saver-menu-save-draft",lastEditedWrapper:".elementor-last-edited-wrapper"}},events:function(){return{"click @ui.buttonPreview":"onClickButtonPreview","click @ui.buttonPublish":"onClickButtonPublish","click @ui.menuSaveDraft":"onClickMenuSaveDraft"}},initialize:function(){elementor.saver.on("before:save",this.onBeforeSave.bind(this)).on("after:save",this.onAfterSave.bind(this)).on("after:saveError",this.onAfterSaveError.bind(this)).on("page:status:change",this.onPageStatusChange),elementor.settings.page.model.on("change",this.onPageSettingsChange.bind(this)),elementor.channels.editor.on("status:change",this.activateSaveButtons.bind(this))},activateSaveButtons:function(e){e=e||"draft"===elementor.settings.page.model.get("post_status"),this.ui.buttonPublish.add(this.ui.menuSaveDraft).toggleClass("elementor-saver-disabled",!e),this.ui.buttonSaveOptions.toggleClass("elementor-saver-disabled",!e)},onRender:function(){this.setMenuItems(elementor.settings.page.model.get("post_status")),this.addTooltip()},onPageSettingsChange:function(e){var t=e.changed;_.isUndefined(t.post_status)||(this.setMenuItems(t.post_status),this.refreshWpPreview(),"page_settings"===elementor.getPanelView().getCurrentPageName()&&elementor.getPanelView().getCurrentPageView().render())},onPageStatusChange:function(e){"publish"===e&&elementor.notifications.showToast({message:elementor.config.document.panel.messages.publish_notification,buttons:[{name:"view_page",text:elementor.translate("have_a_look"),callback:function(){open(elementor.config.document.urls.permalink)}}]})},onBeforeSave:function(e){NProgress.start(),"autosave"===e.status?this.ui.lastEditedWrapper.addClass("elementor-state-active"):this.ui.buttonPublish.addClass("elementor-button-state")},onAfterSave:function(e){NProgress.done(),this.ui.buttonPublish.removeClass("elementor-button-state"),this.ui.lastEditedWrapper.removeClass("elementor-state-active"),this.refreshWpPreview(),this.setLastEdited(e)},setLastEdited:function(e){this.ui.lastEditedWrapper.removeClass("elementor-button-state").find(".elementor-last-edited").html(e.config.last_edited)},onAfterSaveError:function(){NProgress.done(),this.ui.buttonPublish.removeClass("elementor-button-state")},onClickButtonPreview:function(){this.previewWindow=open(elementor.config.document.urls.wp_preview,"wp-preview-"+elementor.config.document.id),elementor.saver.isEditorChanged()&&(elementor.saver.isSaving&&(elementor.saver.isSaving=!1),elementor.saver.doAutoSave())},onClickButtonPublish:function(){var e=elementor.settings.page.model.get("post_status");if(!this.ui.buttonPublish.hasClass("elementor-saver-disabled"))switch(e){case"publish":case"private":elementor.saver.update();break;case"draft":elementor.config.current_user_can_publish?elementor.saver.publish():elementor.saver.savePending();break;case"pending":case void 0:elementor.config.current_user_can_publish?elementor.saver.publish():elementor.saver.update()}},onClickMenuSaveDraft:function(){elementor.saver.saveDraft()},setMenuItems:function(e){var t="publish";switch(e){case"publish":case"private":t="update",elementor.config.current_revision_id!==elementor.config.document.id&&this.activateSaveButtons(!0);break;case"draft":elementor.config.current_user_can_publish||(t="submit"),this.activateSaveButtons(!0);break;case"pending":case void 0:elementor.config.current_user_can_publish||(t="update")}this.ui.buttonPublishLabel.html(elementor.translate(t))},addTooltip:function(){this.$el.find(".tooltip-target").tipsy({gravity:"s",title:function(){return this.getAttribute("data-tooltip")}})},refreshWpPreview:function(){if(this.previewWindow)try{this.previewWindow.location.href=elementor.config.document.urls.wp_preview}catch(e){}}})},function(e,t,n){"use strict";var i=n(98);e.exports=Marionette.Behavior.extend({tagView:null,listenerAttached:!1,ui:{tagArea:".elementor-control-tag-area",dynamicSwitcher:".elementor-control-dynamic-switcher"},events:{"click @ui.dynamicSwitcher":"onDynamicSwitcherClick"},initialize:function(){this.listenerAttached||(this.listenTo(this.view.options.elementSettingsModel,"change:external:__dynamic__",this.onAfterExternalChange),this.listenerAttached=!0)},renderTools:function(){if(!this.getOption("dynamicSettings").default){var e=jQuery(Marionette.Renderer.render("#tmpl-elementor-control-dynamic-switcher"));this.ui.controlTitle[this.view.model.get("label_block")?"after":"before"](e),this.ui.dynamicSwitcher=this.$el.find(this.ui.dynamicSwitcher.selector)}},toggleDynamicClass:function(){this.$el.toggleClass("elementor-control-dynamic-value",this.isDynamicMode())},isDynamicMode:function(){var e=this.view.elementSettingsModel.get("__dynamic__");return!(!e||!e[this.view.model.get("name")])},createTagsList:function(){var e=_.groupBy(this.getOption("tags"),"group"),t=elementor.dynamicTags.getConfig("groups"),n=this.ui.tagsList=jQuery("<div>",{class:"elementor-tags-list"}),i=jQuery("<div>",{class:"elementor-tags-list__inner"});n.append(i),jQuery.each(t,function(t){var n=e[t];if(n){var o=jQuery("<div>",{class:"elementor-tags-list__group-title"}).text(this.title);i.append(o),n.forEach(function(e){var t=jQuery("<div>",{class:"elementor-tags-list__item"});t.text(e.title).attr("data-tag-name",e.name),i.append(t)})}}),i.on("click",".elementor-tags-list__item",this.onTagsListItemClick.bind(this)),elementor.$body.append(n)},getTagsList:function(){return this.ui.tagsList||this.createTagsList(),this.ui.tagsList},toggleTagsList:function(){var e=this.getTagsList();e.is(":visible")?e.hide():e.show().position({my:"right top",at:"right bottom+5",of:this.ui.dynamicSwitcher})},setTagView:function(e,t,n){this.tagView&&this.tagView.destroy();var o=this.tagView=new i({id:e,name:t,settings:n,dynamicSettings:this.getOption("dynamicSettings")});o.render(),this.ui.tagArea.after(o.el),this.listenTo(o.model,"change",this.onTagViewModelChange.bind(this)).listenTo(o,"remove",this.onTagViewRemove.bind(this))},setDefaultTagView:function(){var e=elementor.dynamicTags.tagTextToTagData(this.getDynamicValue());this.setTagView(e.id,e.name,e.settings)},tagViewToTagText:function(){var e=this.tagView;return elementor.dynamicTags.tagDataToTagText(e.getOption("id"),e.getOption("name"),e.model)},getDynamicValue:function(){return this.view.elementSettingsModel.get("__dynamic__")[this.view.model.get("name")]},getDynamicControlSettings:function(){return{control:{name:"__dynamic__",label:this.view.model.get("label")}}},setDynamicValue:function(e){var t=this.view.model.get("name"),n=this.view.elementSettingsModel.get("__dynamic__")||{};(n=elementor.helpers.cloneObject(n))[t]=e,this.view.elementSettingsModel.set("__dynamic__",n,this.getDynamicControlSettings(t)),this.toggleDynamicClass()},destroyTagView:function(){this.tagView&&(this.tagView.destroy(),this.tagView=null)},onRender:function(){this.$el.addClass("elementor-control-dynamic"),this.renderTools(),this.toggleDynamicClass(),this.isDynamicMode()&&this.setDefaultTagView()},onDynamicSwitcherClick:function(){this.toggleTagsList()},onTagsListItemClick:function(e){var t=jQuery(e.currentTarget);this.setTagView(elementor.helpers.getUniqueID(),t.data("tagName"),{}),this.setDynamicValue(this.tagViewToTagText()),this.toggleTagsList(),this.tagView.getTagConfig().settings_required&&this.tagView.showSettingsPopup()},onTagViewModelChange:function(){this.setDynamicValue(this.tagViewToTagText())},onTagViewRemove:function(){var e=this.view.model.get("name"),t=this.view.elementSettingsModel.get("__dynamic__");delete(t=elementor.helpers.cloneObject(t))[e],Object.keys(t).length?this.view.elementSettingsModel.set("__dynamic__",t,this.getDynamicControlSettings(e)):this.view.elementSettingsModel.unset("__dynamic__",this.getDynamicControlSettings(e)),this.toggleDynamicClass()},onAfterExternalChange:function(){this.destroyTagView(),this.isDynamicMode()&&this.setDefaultTagView(),this.toggleDynamicClass()},onDestroy:function(){this.destroyTagView()}})},function(e,t,n){"use strict";var i=n(99),o=n(3);e.exports=Marionette.ItemView.extend({className:"elementor-dynamic-cover elementor-input-style",tagControlsStack:null,templateHelpers:function(){var e={};return this.model&&(e.controls=this.model.options.controls),e},ui:{remove:".elementor-dynamic-cover__remove"},events:function(){var e={"click @ui.remove":"onRemoveClick"};return this.hasSettings()&&(e.click="onClick"),e},getTemplate:function(){var e=this.getTagConfig(),t=Marionette.TemplateCache.get("#tmpl-elementor-control-dynamic-cover"),n=Marionette.Renderer.render(t,{hasSettings:this.hasSettings(),isRemovable:!this.getOption("dynamicSettings").default,title:e.title,content:e.panel_template});return Marionette.TemplateCache.prototype.compileTemplate(n.trim())},getTagConfig:function(){return elementor.dynamicTags.getConfig("tags."+this.getOption("name"))},initSettingsPopup:function(){var e={className:"elementor-tag-settings-popup",position:{my:"left top+5",at:"left bottom",of:this.$el,autoRefresh:!0}},t=elementor.dialogsManager.createWidget("buttons",e);this.getSettingsPopup=function(){return t}},hasSettings:function(){return!!Object.values(this.getTagConfig().controls).length},showSettingsPopup:function(){this.tagControlsStack||this.initTagControlsStack();var e=this.getSettingsPopup();e.isVisible()||e.show()},initTagControlsStack:function(){this.tagControlsStack=new i({model:this.model,controls:this.model.controls,el:this.getSettingsPopup().getElements("message")[0]}),this.tagControlsStack.render()},initModel:function(){this.model=new o(this.getOption("settings"),{controls:this.getTagConfig().controls})},initialize:function(){this.hasSettings()&&(this.initModel(),this.initSettingsPopup(),this.listenTo(this.model,"change",this.render))},onClick:function(){this.showSettingsPopup()},onRemoveClick:function(e){e.stopPropagation(),this.destroy(),this.trigger("remove")},onDestroy:function(){this.hasSettings()&&this.getSettingsPopup().destroy()}})},function(e,t,n){"use strict";var i=n(12),o=n(100);e.exports=i.extend({activeTab:"content",template:_.noop,emptyView:o,isEmpty:function(){return this.collection.length<2},childViewOptions:function(){return{elementSettingsModel:this.model}},onRenderTemplate:function(){this.activateFirstSection()}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({className:"elementor-tag-controls-stack-empty",template:"#tmpl-elementor-tag-controls-stack-empty"})},function(e,t,n){"use strict";var i=n(7);e.exports=i.extend({ui:function(){var e=i.prototype.ui.apply(this,arguments);return e.button="button",e},events:{"click @ui.button":"onButtonClick"},onButtonClick:function(){var e=this.model.get("event");elementor.channels.editor.trigger(e,this)}})},function(e,t,n){"use strict";var i,o=n(0);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.editor=".elementor-code-editor",e},onReady:function(){var e=this;if("undefined"!=typeof ace){var t=ace.require("ace/ext/language_tools");if(e.editor=ace.edit(this.ui.editor[0]),jQuery(e.editor.container).addClass("elementor-input-style elementor-code-editor"),e.editor.setOptions({mode:"ace/mode/"+e.model.attributes.language,minLines:10,maxLines:1/0,showGutter:!0,useWorker:!0,enableBasicAutocompletion:!0,enableLiveAutocompletion:!0}),e.editor.getSession().setUseWrapMode(!0),elementor.panel.$el.on("resize.aceEditor",e.onResize.bind(this)),"css"===e.model.attributes.language){t.addCompleter({getCompletions:function(e,t,n,i,o){var r=[],s=t.getTokenAt(n.row,n.column);0<i.length&&"selector".match(i)&&"constant"===s.type&&(r=[{name:"selector",value:"selector",score:1,meta:"Elementor"}]),o(null,r)}})}if(e.editor.setValue(e.getControlValue(),-1),e.editor.on("change",function(){e.setValue(e.editor.getValue())}),"html"===e.model.attributes.language){var n=e.editor.getSession();n.on("changeAnnotation",function(){for(var e=n.getAnnotations()||[],t=e.length,i=e.length;i--;)/doctype first\. Expected/.test(e[i].text)&&e.splice(i,1);t>e.length&&n.setAnnotations(e)})}}},onResize:function(){this.editor.resize()},onDestroy:function(){elementor.panel.$el.off("resize.aceEditor")}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(0);i=o.extend({applySavedValue:function(){o.prototype.applySavedValue.apply(this,arguments);var e=this,t=e.getControlValue();e.ui.input.wpColorPicker("instance")?(e.ui.input.wpColorPicker("color",t),t||e.ui.input.data("a8cIris")._change()):elementor.helpers.wpColorPicker(e.ui.input,{change:function(){e.setValue(e.ui.input.wpColorPicker("color"))},clear:function(){e.setValue("")}})},onBeforeDestroy:function(){this.ui.input.wpColorPicker("instance")&&this.ui.input.wpColorPicker("close"),this.$el.remove()}}),e.exports=i},function(e,t,n){"use strict";var i;i=n(0).extend({onReady:function(){var e=this,t=_.extend({onClose:function(){e.saveValue()},enableTime:!0,minuteIncrement:1},this.model.get("picker_options"));this.ui.input.flatpickr(t)},saveValue:function(){this.setValue(this.ui.input.val())},onBeforeDestroy:function(){this.saveValue(),this.ui.input.flatpickr().destroy()}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(34);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.controls=".elementor-control-dimension > input:enabled",e.link="button.elementor-link-dimensions",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.link":"onLinkDimensionsClicked"})},defaultDimensionValue:0,initialize:function(){o.prototype.initialize.apply(this,arguments),this.model.set("allowed_dimensions",this.filterDimensions(this.model.get("allowed_dimensions")))},getPossibleDimensions:function(){return["top","right","bottom","left"]},filterDimensions:function(e){e=e||"all";var t=this.getPossibleDimensions();return"all"===e?t:(_.isArray(e)||("horizontal"===e?e=["right","left"]:"vertical"===e&&(e=["top","bottom"])),e)},onReady:function(){var e=this,t=e.getControlValue();e.isLinkedDimensions()||(e.ui.link.addClass("unlinked"),e.ui.controls.each(function(n,i){var o=t[i.dataset.setting];_.isEmpty(o)&&(o=e.defaultDimensionValue),e.$(i).val(o)})),e.fillEmptyDimensions()},updateDimensionsValue:function(){var e={},t=this.getPossibleDimensions(),n=this.ui.controls,i=this.defaultDimensionValue;t.forEach(function(t){var o=n.filter('[data-setting="'+t+'"]');e[t]=o.length?o.val():i}),this.setValue(e)},fillEmptyDimensions:function(){var e=this.getPossibleDimensions(),t=this.model.get("allowed_dimensions"),n=this.ui.controls,i=this.defaultDimensionValue;this.isLinkedDimensions()||e.forEach(function(e){var o=n.filter('[data-setting="'+e+'"]');-1!==_.indexOf(t,e)&&o.length&&_.isEmpty(o.val())&&o.val(i)})},updateDimensions:function(){this.fillEmptyDimensions(),this.updateDimensionsValue()},resetDimensions:function(){this.ui.controls.val(""),this.updateDimensionsValue()},onInputChange:function(e){var t=e.target.dataset.setting;if("unit"===t&&this.resetDimensions(),_.contains(this.getPossibleDimensions(),t)){if(this.isLinkedDimensions()){var n=this.$(e.target);this.ui.controls.val(n.val())}this.updateDimensions()}},onLinkDimensionsClicked:function(e){e.preventDefault(),e.stopPropagation(),this.ui.link.toggleClass("unlinked"),this.setValue("isLinked",!this.ui.link.hasClass("unlinked")),this.isLinkedDimensions()&&this.ui.controls.val(this.ui.controls.eq(0).val()),this.updateDimensions()},isLinkedDimensions:function(){return this.getControlValue("isLinked")}}),e.exports=i},function(e,t,n){"use strict";var i=n(6);e.exports=i.extend({getSelect2Options:function(){return{dir:elementor.config.is_rtl?"rtl":"ltr"}},templateHelpers:function(){var e=i.prototype.templateHelpers.apply(this,arguments),t=this.model.get("options");return e.getFontsByGroups=function(e){var n={};return _.each(t,function(t,i){(_.isArray(e)&&_.contains(e,t)||t===e)&&(n[i]=i)}),n},e}})},function(e,t,n){"use strict";var i,o=n(0);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.addImages=".elementor-control-gallery-add",e.clearGallery=".elementor-control-gallery-clear",e.galleryThumbnails=".elementor-control-gallery-thumbnails",e.status=".elementor-control-gallery-status-title",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.addImages":"onAddImagesClick","click @ui.clearGallery":"onClearGalleryClick","click @ui.galleryThumbnails":"onGalleryThumbnailsClick"})},onReady:function(){this.initRemoveDialog()},applySavedValue:function(){var e=this.getControlValue().length,t=!!e;this.$el.toggleClass("elementor-gallery-has-images",t).toggleClass("elementor-gallery-empty",!t);var n=this.ui.galleryThumbnails;n.empty(),this.ui.status.text(elementor.translate(t?"gallery_images_selected":"gallery_no_images_selected",[e])),t&&this.getControlValue().forEach(function(e){var t=jQuery("<div>",{class:"elementor-control-gallery-thumbnail"});t.css("background-image","url("+e.url+")"),n.append(t)})},hasImages:function(){return!!this.getControlValue().length},openFrame:function(e){this.initFrame(e),this.frame.open()},initFrame:function(e){var t={frame:"post",multiple:!0,state:{create:"gallery",add:"gallery-library",edit:"gallery-edit"}[e],button:{text:elementor.translate("insert_media")}};this.hasImages()&&(t.selection=this.fetchSelection()),this.frame=wp.media(t),this.frame.on({update:this.select,"menu:render:default":this.menuRender,"content:render:browse":this.gallerySettings},this)},menuRender:function(e){e.unset("insert"),e.unset("featured-image")},gallerySettings:function(e){e.sidebar.on("ready",function(){e.sidebar.unset("gallery")})},fetchSelection:function(){var e=wp.media.query({orderby:"post__in",order:"ASC",type:"image",perPage:-1,post__in:_.pluck(this.getControlValue(),"id")});return new wp.media.model.Selection(e.models,{props:e.props.toJSON(),multiple:!0})},select:function(e){var t=[];e.each(function(e){t.push({id:e.get("id"),url:e.get("url")})}),this.setValue(t),this.applySavedValue()},onBeforeDestroy:function(){this.frame&&this.frame.off(),this.$el.remove()},resetGallery:function(){this.setValue(""),this.applySavedValue()},initRemoveDialog:function(){var e;this.getRemoveDialog=function(){return e||(e=elementor.dialogsManager.createWidget("confirm",{message:elementor.translate("dialog_confirm_gallery_delete"),headerMessage:elementor.translate("delete_gallery"),strings:{confirm:elementor.translate("delete"),cancel:elementor.translate("cancel")},defaultOption:"confirm",onConfirm:this.resetGallery.bind(this)})),e}},onAddImagesClick:function(){this.openFrame(this.hasImages()?"add":"create")},onClearGalleryClick:function(){this.getRemoveDialog().show()},onGalleryThumbnailsClick:function(){this.openFrame("edit")}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(6);i=o.extend({initialize:function(){o.prototype.initialize.apply(this,arguments),this.filterIcons()},filterIcons:function(){var e=this.model.get("options"),t=this.model.get("include"),n=this.model.get("exclude");if(t){var i={};return _.each(t,function(t){i[t]=e[t]}),void this.model.set("options",i)}n&&_.each(n,function(t){delete e[t]})},iconsList:function(e){return e.id?jQuery('<span><i class="'+e.id+'"></i> '+e.text+"</span>"):e.text},getSelect2Options:function(){return{allowClear:!0,templateResult:this.iconsList.bind(this),templateSelection:this.iconsList.bind(this)}}}),e.exports=i},function(e,t,n){"use strict";var i;i=n(4).extend({ui:function(){return{inputWidth:'input[data-setting="width"]',inputHeight:'input[data-setting="height"]',btnApply:"button.elementor-image-dimensions-apply-button"}},events:function(){return{"click @ui.btnApply":"onApplyClicked"}},onApplyClicked:function(e){e.preventDefault(),this.setValue({width:this.ui.inputWidth.val(),height:this.ui.inputHeight.val()})}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(4);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.controlMedia=".elementor-control-media",e.mediaImage=".elementor-control-media-image",e.mediaVideo=".elementor-control-media-video",e.frameOpeners=".elementor-control-preview-area",e.deleteButton=".elementor-control-media-delete",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.frameOpeners":"openFrame","click @ui.deleteButton":"deleteImage"})},getMediaType:function(){return this.model.get("media_type")},applySavedValue:function(){var e=this.getControlValue("url"),t=this.getMediaType();"image"===t?this.ui.mediaImage.css("background-image",e?"url("+e+")":""):"video"===t&&this.ui.mediaVideo.attr("src",e),this.ui.controlMedia.toggleClass("elementor-media-empty",!e)},openFrame:function(){this.frame||this.initFrame(),this.frame.open()},deleteImage:function(e){e.stopPropagation(),this.setValue({url:"",id:""}),this.applySavedValue()},initFrame:function(){wp.media.view.settings.post.id=elementor.config.document.id,this.frame=wp.media({button:{text:elementor.translate("insert_media")},states:[new wp.media.controller.Library({title:elementor.translate("insert_media"),library:wp.media.query({type:this.getMediaType()}),multiple:!1,date:!1})]}),this.frame.on("insert select",this.select.bind(this))},select:function(){this.trigger("before:select");var e=this.frame.state().get("selection").first().toJSON();e.url&&(this.setValue({url:e.url,id:e.id}),this.applySavedValue()),this.trigger("after:select")},onBeforeDestroy:function(){this.$el.remove()}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(0),r=n(112);i=o.extend({registerValidators:function(){o.prototype.registerValidators.apply(this,arguments);var e={},t=this.model;["min","max"].forEach(function(n){var i=t.get(n);_.isFinite(i)&&(e[n]=i)}),jQuery.isEmptyObject(e)||this.addValidator(new r({validationTerms:e}))}}),e.exports=i},function(e,t,n){"use strict";var i=n(18);e.exports=i.extend({validationMethod:function(e){var t=this.getSettings("validationTerms"),n=[];return _.isFinite(e)&&(void 0!==t.min&&e<t.min&&n.push("Value is less than minimum"),void 0!==t.max&&e>t.max&&n.push("Value is greater than maximum")),n}})},function(e,t,n){"use strict";var i,o=n(4);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.reverseOrderLabel=".elementor-control-order-label",e},changeLabelTitle:function(){var e=this.getControlValue("reverse_order");this.ui.reverseOrderLabel.attr("title",elementor.translate(e?"asc":"desc"))},onRender:function(){o.prototype.onRender.apply(this,arguments),this.changeLabelTitle()},onInputChange:function(){this.changeLabelTitle()}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(33);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.popoverToggle=".elementor-control-popover-toggle-toggle",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.popoverToggle":"onPopoverToggleClick"})},onPopoverToggleClick:function(){this.$el.next(".elementor-controls-popover").toggle()}},{onPasteStyle:function(e,t){return!t||t===e.return_value}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(0),r=n(35),s=n(3);i=o.extend({ui:{btnAddRow:".elementor-repeater-add",fieldContainer:".elementor-repeater-fields-wrapper"},events:function(){return{"click @ui.btnAddRow":"onButtonAddRowClick","sortstart @ui.fieldContainer":"onSortStart","sortupdate @ui.fieldContainer":"onSortUpdate","sortstop @ui.fieldContainer":"onSortStop"}},childView:r,childViewContainer:".elementor-repeater-fields-wrapper",templateHelpers:function(){return{data:_.extend({},this.model.toJSON(),{controlValue:[]})}},childViewOptions:function(){return{controlFields:this.model.get("fields"),titleField:this.model.get("title_field")}},createItemModel:function(e,t,n){return(t=t||{}).controls=n.model.get("fields"),e._id||(e._id=elementor.helpers.getUniqueID()),new s(e,t)},fillCollection:function(){var e=this.model.get("name");this.collection=this.elementSettingsModel.get(e),this.collection instanceof Backbone.Collection||(this.collection=new Backbone.Collection(this.collection,{model:_.partial(this.createItemModel,_,_,this)}),this.elementSettingsModel.set(e,this.collection,{silent:!0}),this.listenTo(this.collection,"change",this.onRowControlChange),this.listenTo(this.collection,"update",this.onRowUpdate,this))},initialize:function(e){o.prototype.initialize.apply(this,arguments),this.fillCollection(),this.listenTo(this.collection,"change",this.onRowControlChange),this.listenTo(this.collection,"update",this.onRowUpdate,this)},addRow:function(e,t){var n=elementor.helpers.getUniqueID();return e instanceof Backbone.Model?e.set("_id",n):e._id=n,this.collection.add(e,t)},editRow:function(e){if(this.currentEditableChild){var t=this.currentEditableChild.getChildViewContainer(this.currentEditableChild);t.removeClass("editable"),t.find(".elementor-wp-editor").each(function(){tinymce.get(this.id).fire("hide")})}this.currentEditableChild!==e?(e.getChildViewContainer(e).addClass("editable"),this.currentEditableChild=e,this.updateActiveRow()):delete this.currentEditableChild},toggleMinRowsClass:function(){this.model.get("prevent_empty")&&this.$el.toggleClass("elementor-repeater-has-minimum-rows",1>=this.collection.length)},updateActiveRow:function(){var e=1;this.currentEditableChild&&(e=this.currentEditableChild.itemIndex),this.setEditSetting("activeItemIndex",e)},updateChildIndexes:function(){var e=this.collection;this.children.each(function(t){t.updateIndex(e.indexOf(t.model)+1),t.setTitle()})},onRender:function(){o.prototype.onRender.apply(this,arguments),this.ui.fieldContainer.sortable({axis:"y",handle:".elementor-repeater-row-tools"}),this.toggleMinRowsClass()},onSortStart:function(e,t){t.item.data("oldIndex",t.item.index())},onSortStop:function(e,t){var n=this;if(-1!==t.item.index()){var i=n.children.findByIndex(t.item.index()),o=i.children._views;jQuery.each(o,function(){if("wysiwyg"===this.model.get("type"))return i.render(),delete n.currentEditableChild,!1})}},onSortUpdate:function(e,t){var n=t.item.data("oldIndex"),i=this.collection.at(n),o=t.item.index();this.collection.remove(i),this.addRow(i,{at:o})},onAddChild:function(){this.updateChildIndexes(),this.updateActiveRow()},onRowUpdate:function(e,t){var n=this.elementSettingsModel,i=e.clone(),o=this.model.get("name");t.add?i.remove(t.changes.added[0]):i.add(t.changes.removed[0],{at:t.index}),n.changed={},n.changed[o]=e,n._previousAttributes={},n._previousAttributes[o]=i.toJSON(),n.trigger("change",n,n._pending),delete n.changed,delete n._previousAttributes,this.toggleMinRowsClass()},onRowControlChange:function(e){if(Object.keys(e.changed).length){var t=e.collection.toJSON(),n=e.collection.findIndex(e),i=this._parent.model.get("settings"),o=this.model.get("name");t[n]=e._previousAttributes,i.changed={},i.changed[o]=e.collection,i._previousAttributes={},i._previousAttributes[o]=t,i.trigger("change",i),delete i.changed,delete i._previousAttributes}},onButtonAddRowClick:function(){var e={};_.each(this.model.get("fields"),function(t){e[t.name]=t.default});var t=this.addRow(e),n=this.children.findByModel(t);this.editRow(n)},onChildviewClickRemove:function(e){e.model.destroy(),e===this.currentEditableChild&&delete this.currentEditableChild,this.updateChildIndexes(),this.updateActiveRow()},onChildviewClickDuplicate:function(e){var t=this.createItemModel(e.model.toJSON(),{},this);this.addRow(t,{at:e.itemIndex})},onChildviewClickEdit:function(e){this.editRow(e)},onAfterExternalChange:function(){this.fillCollection(),o.prototype.onAfterExternalChange.apply(this,arguments)}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(7);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.heading=".elementor-panel-heading",e},triggers:{click:"control:section:clicked"}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(0);i=o.extend({},{onPasteStyle:function(e,t){return e.groups?e.groups.some(function(e){return i.onPasteStyle(e,t)}):void 0!==e.options[t]}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(34);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.slider=".elementor-slider",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"slide @ui.slider":"onSlideChange"})},initSlider:function(){var e=this.getControlValue("size"),t=this.getCurrentRange();this.ui.input.attr(t).val(e),this.ui.slider.slider(_.extend({},t,{value:e}))},resetSize:function(){this.setValue("size",""),this.initSlider()},onReady:function(){this.initSlider()},onSlideChange:function(e,t){this.setValue("size",t.value),this.ui.input.val(t.value)},onInputChange:function(e){var t=e.currentTarget.dataset.setting;"size"===t?this.ui.slider.slider("value",this.getControlValue("size")):"unit"===t&&this.resetSize()},onBeforeDestroy:function(){this.ui.slider.data("uiSlider")&&this.ui.slider.slider("destroy"),this.$el.remove()}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(0);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.resetStructure=".elementor-control-structure-reset",e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"click @ui.resetStructure":"onResetStructureClick"})},templateHelpers:function(){var e=o.prototype.templateHelpers.apply(this,arguments);return e.getMorePresets=this.getMorePresets.bind(this),e},getCurrentEditedSection:function(){return elementor.getPanelView().getCurrentPageView().getOption("editedElementView")},getMorePresets:function(){var e=elementor.presetsFactory.getParsedStructure(this.getControlValue());return elementor.presetsFactory.getPresets(e.columnsCount)},onInputChange:function(){this.getCurrentEditedSection().redefineLayout(),this.render()},onResetStructureClick:function(){this.getCurrentEditedSection().resetColumnsCustomSize()}}),e.exports=i},function(e,t,n){"use strict";var i=n(0);e.exports=i.extend({setInputValue:function(e,t){this.$(e).prop("checked",this.model.get("return_value")===t)}},{onPasteStyle:function(e,t){return!t||t===e.return_value}})},function(e,t,n){"use strict";var i;i=n(7).extend({triggers:{click:{event:"control:tab:clicked",stopPropagation:!1}}}),e.exports=i},function(e,t,n){"use strict";var i=n(4);e.exports=i.extend({onReady:function(){var e,t,n=this,i=elementor.config.is_rtl?"right":"left";this.ui.input.autocomplete({source:function(i,o){if(e!==i.term){if(/^https?:/.test(i.term)||-1!==i.term.indexOf("."))return o();n.ui.input.prev().show(),jQuery.post(window.ajaxurl,{editor:"elementor",action:"wp-link-ajax",page:1,search:i.term,_ajax_linking_nonce:jQuery("#_ajax_linking_nonce").val()},function(e){t=e,o(e)},"json").always(function(){n.ui.input.prev().hide()}),e=i.term}else o(t)},focus:function(e,t){e.preventDefault()},select:function(e,t){return n.ui.input.val(t.item.permalink),n.setValue("url",t.item.permalink),!1},open:function(e){jQuery(e.target).data("uiAutocomplete").menu.activeMenu.addClass("elementor-autocomplete-menu")},minLength:2,position:{my:i+" top+2",at:i+" bottom"}}).autocomplete("instance")._renderItem=function(e,t){var n=window.wpLinkL10n?window.wpLinkL10n.noTitle:"",i=t.title?t.title:n;return jQuery('<li role="option" id="mce-wp-autocomplete-'+t.ID+'">').append("<span>"+i+'</span> <span class="elementor-autocomplete-item-info">'+t.info+"</span>").appendTo(e)}},onBeforeDestroy:function(){this.ui.input.data("autocomplete")&&this.ui.input.autocomplete("destroy"),this.$el.remove()}})},function(e,t,n){"use strict";var i,o=n(0);i=o.extend({ui:function(){var e=o.prototype.ui.apply(this,arguments);return e.form="form",e.loading=".wp-widget-form-loading",e},events:function(){return{"keyup @ui.form :input":"onFormChanged","change @ui.form :input":"onFormChanged"}},onFormChanged:function(){var e="widget-"+this.model.get("id_base"),t=this.ui.form.elementorSerializeObject()[e].REPLACE_TO_ID;this.setValue(t)},onReady:function(){var e=this;elementor.ajax.addRequest("editor_get_wp_widget_form",{data:{id:e.model.cid,widget_type:e.model.get("widget"),data:e.elementSettingsModel.toJSON()},success:function(t){if(e.ui.form.html(t),wp.textWidgets){e.ui.form.addClass("open");var n=new jQuery.Event("widget-added");wp.textWidgets.handleWidgetAdded(n,e.ui.form),wp.mediaWidgets.handleWidgetAdded(n,e.ui.form),wp.customHtmlWidgets&&wp.customHtmlWidgets.handleWidgetAdded(n,e.ui.form)}elementor.hooks.doAction("panel/widgets/"+e.model.get("widget")+"/controls/wp_widget/loaded",e)}})}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(0);i=o.extend({editor:null,ui:function(){var e=o.prototype.ui.apply(this,arguments);return jQuery.extend(e,{inputWrapper:".elementor-control-input-wrapper"}),e},events:function(){return _.extend(o.prototype.events.apply(this,arguments),{"keyup textarea.elementor-wp-editor":"onBaseInputChange"})},buttons:{addToBasic:{underline:"italic"},addToAdvanced:{},moveToAdvanced:{blockquote:"removeformat",alignleft:"blockquote",aligncenter:"alignleft",alignright:"aligncenter"},moveToBasic:{},removeFromBasic:["unlink","wp_more"],removeFromAdvanced:[]},initialize:function(){o.prototype.initialize.apply(this,arguments);var e=this;if(e.editorID="elementorwpeditor"+e.cid,_.defer(function(){quicktags({buttons:"strong,em,del,link,img,close",id:e.editorID}),elementor.config.rich_editing_enabled&&switchEditors.go(e.editorID,"tmce"),delete QTags.instances[0]}),elementor.config.rich_editing_enabled){var t={id:e.editorID,selector:"#"+e.editorID,setup:function(t){e.editor=t}};tinyMCEPreInit.mceInit[e.editorID]=_.extend(_.clone(tinyMCEPreInit.mceInit.elementorwpeditor),t),elementor.config.tinymceHasCustomConfig||e.rearrangeButtons()}else e.$el.addClass("elementor-rich-editing-disabled")},applySavedValue:function(){if(this.editor){var e=this.getControlValue();this.editor.setContent(e),jQuery("#"+this.editorID).val(e)}},saveEditor:function(){this.editor.save(),this.setValue(this.editor.getContent())},moveButtons:function(e,t,n){n||(n=t,t=null),_.each(e,function(e,i){var o=n.indexOf(e);if(t){var r=t.indexOf(i);if(-1===r)throw new ReferenceError("Trying to move non-existing button `"+i+"`");t.splice(r,1)}if(-1===o)throw new ReferenceError("Trying to move button after non-existing button `"+e+"`");n.splice(o+1,0,i)})},rearrangeButtons:function(){var e=tinyMCEPreInit.mceInit[this.editorID],t=e.toolbar1.split(","),n=e.toolbar2.split(",");t=_.difference(t,this.buttons.removeFromBasic),n=_.difference(n,this.buttons.removeFromAdvanced),this.moveButtons(this.buttons.moveToBasic,n,t),this.moveButtons(this.buttons.moveToAdvanced,t,n),this.moveButtons(this.buttons.addToBasic,t),this.moveButtons(this.buttons.addToAdvanced,n),e.toolbar1=t.join(","),e.toolbar2=n.join(",")},onReady:function(){var e=this,t=jQuery(elementor.config.wp_editor.replace(/elementorwpeditor/g,e.editorID).replace("%%EDITORCONTENT%%",e.getControlValue()));e.ui.inputWrapper.html(t),setTimeout(function(){e.editor.on("keyup change undo redo SetContent",e.saveEditor.bind(e))},100)},onBeforeDestroy:function(){delete QTags.instances[this.editorID],elementor.config.rich_editing_enabled&&(tinymce.EditorManager.execCommand("mceRemoveEditor",!0,this.editorID),delete tinyMCEPreInit.mceInit[this.editorID],delete tinyMCEPreInit.qtInit[this.editorID])}}),e.exports=i},function(e,t,n){"use strict";var i;i=n(3).extend({defaults:{_column_size:100}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(10);i=o.extend({_templateType:null,toggleEditTools:!0,getTemplate:function(){var e=this.getEditModel();return"remote"!==this.getTemplateType()?Marionette.TemplateCache.get("#tmpl-elementor-"+e.get("widgetType")+"-content"):_.template("")},className:function(){return o.prototype.className.apply(this,arguments)+" elementor-widget "+elementor.getElementData(this.getEditModel()).html_wrapper_class},events:function(){var e=o.prototype.events.apply(this,arguments);return e.click="onClickEdit",e},behaviors:function(){var e=o.prototype.behaviors.apply(this,arguments);return _.extend(e,{InlineEditing:{behaviorClass:n(127),inlineEditingClass:"elementor-inline-editing"}}),elementor.hooks.applyFilters("elements/widget/behaviors",e,this)},initialize:function(){o.prototype.initialize.apply(this,arguments);var e=this.getEditModel();e.on({"before:remote:render":this.onModelBeforeRemoteRender.bind(this),"remote:render":this.onModelRemoteRender.bind(this)}),"remote"!==this.getTemplateType()||this.getEditModel().getHtmlCache()||e.renderRemoteServer();var t=this.onRender;this.render=_.throttle(this.render,300),this.onRender=function(){_.defer(t.bind(this))}},getContextMenuGroups:function(){var e=o.prototype.getContextMenuGroups.apply(this,arguments),t=e.indexOf(_.findWhere(e,{name:"transfer"}));return e.splice(t+1,0,{name:"save",actions:[{name:"save",title:elementor.translate("save_as_global"),shortcut:jQuery("<i>",{class:"eicon-pro-icon"})}]}),e},render:function(){if(this.model.isRemoteRequestActive())return this.handleEmptyWidget(),void this.$el.addClass("elementor-element");Marionette.CompositeView.prototype.render.apply(this,arguments)},handleEmptyWidget:function(){this.$el.addClass("elementor-widget-empty").append('<i class="elementor-widget-empty-icon '+this.getEditModel().getIcon()+'"></i>')},getTemplateType:function(){if(null===this._templateType){var e=this.getEditModel(),t=jQuery("#tmpl-elementor-"+e.get("widgetType")+"-content");this._templateType=t.length?"js":"remote"}return this._templateType},getHTMLContent:function(e){return this.getEditModel().getHtmlCache()||e},attachElContent:function(e){var t=this,n=t.getHTMLContent(e);return _.defer(function(){elementorFrontend.getElements("window").jQuery(t.el).html(n),t.bindUIElements()}),this},addInlineEditingAttributes:function(e,t){this.addRenderAttribute(e,{class:"elementor-inline-editing","data-elementor-setting-key":e}),t&&this.addRenderAttribute(e,{"data-elementor-inline-editing-toolbar":t})},getRepeaterSettingKey:function(e,t,n){return[t,n,e].join(".")},onModelBeforeRemoteRender:function(){this.$el.addClass("elementor-loading")},onBeforeDestroy:function(){elementor.$previewContents.find("#elementor-style-"+this.model.cid).remove()},onModelRemoteRender:function(){this.isDestroyed||(this.$el.removeClass("elementor-loading"),this.render())},onRender:function(){var e=this;o.prototype.onRender.apply(e,arguments);var t=e.getEditModel(),n=t.getSetting("_skin")||"default";e.$el.attr("data-element_type",t.get("widgetType")+"."+n).removeClass("elementor-widget-empty").children(".elementor-widget-empty-icon").remove(),e.$el.imagesLoaded().always(function(){setTimeout(function(){1>e.$el.height()&&e.handleEmptyWidget()},200)})},onClickEdit:function(){this.model.trigger("request:edit")}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.Behavior.extend({editing:!1,$currentEditingArea:null,ui:function(){return{inlineEditingArea:"."+this.getOption("inlineEditingClass")}},events:function(){return{"click @ui.inlineEditingArea":"onInlineEditingClick","input @ui.inlineEditingArea":"onInlineEditingUpdate"}},getEditingSettingKey:function(){return this.$currentEditingArea.data().elementorSettingKey},startEditing:function(e){var t=e.data().elementorSettingKey,n=t,i=t.split("."),o=3===i.length,r=this.view.getEditModel().get("settings");o&&(r=r.get(i[0]).models[i[1]],n=i[2]);var s=r.get("__dynamic__"),a=s&&s[n];if(!(this.editing||a||"edit"!==elementor.channels.dataEditMode.request("activeMode")||this.view.model.isRemoteRequestActive())){this.$currentEditingArea=e;var l=this.$currentEditingArea.data().elementorInlineEditingToolbar,c="advanced"===l?"advanced":"basic",u=this.view.getEditModel(),d=elementor.config.inlineEditing,m=u.getSetting(this.getEditingSettingKey());"advanced"===c&&(m=wp.editor.autop(m)),this.$currentEditingArea.html(m);var h=elementorFrontend.getElements("window").ElementorInlineEditor;this.editing=!0,this.view.allowRender=!1,this.view.model.setHtmlCache(""),this.editor=new h({linksInNewWindow:!0,stay:!1,editor:this.$currentEditingArea[0],mode:c,list:"none"===l?[]:d.toolbar[l||"basic"],cleanAttrs:["id","class","name"],placeholder:elementor.translate("type_here")+"...",toolbarIconsPrefix:"eicon-editor-",toolbarIconsDictionary:{externalLink:{className:"eicon-editor-external-link"},list:{className:"eicon-editor-list-ul"},insertOrderedList:{className:"eicon-editor-list-ol"},insertUnorderedList:{className:"eicon-editor-list-ul"},createlink:{className:"eicon-editor-link"},unlink:{className:"eicon-editor-unlink"},blockquote:{className:"eicon-editor-quote"},p:{className:"eicon-editor-paragraph"},pre:{className:"eicon-editor-code"}}}),jQuery(this.editor._menu).children().on("mousedown",function(e){e.preventDefault()}),this.$currentEditingArea.on("blur",this.onInlineEditingBlur.bind(this))}},stopEditing:function(){this.editing=!1,this.editor.destroy(),this.view.allowRender=!0,"advanced"===this.$currentEditingArea.data().elementorInlineEditingToolbar&&this.view.getEditModel().renderRemoteServer()},onInlineEditingClick:function(e){var t=this,n=jQuery(e.currentTarget);setTimeout(function(){t.startEditing(n)},30)},onInlineEditingBlur:function(){var e=this;setTimeout(function(){var t=elementorFrontend.getElements("window").getSelection();jQuery(t.focusNode).closest(".pen-input-wrapper").length||e.stopEditing()},20)},onInlineEditingUpdate:function(){this.view.getEditModel().setSetting(this.getEditingSettingKey(),this.editor.getContent())}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.CollectionView.extend({childView:n(39),id:"elementor-panel-elements",initialize:function(){this.listenTo(elementor.channels.panelElements,"filter:change",this.onFilterChanged)},filter:function(e){var t=elementor.channels.panelElements.request("filter:value");return!t||(-1!==e.get("title").toLowerCase().indexOf(t.toLowerCase())||_.any(e.get("keywords"),function(e){return-1!==e.toLowerCase().indexOf(t.toLowerCase())}))},onFilterChanged:function(){elementor.channels.panelElements.request("filter:value")||this.onFilterEmpty(),this._renderChildren(),this.triggerMethod("children:render")},onFilterEmpty:function(){elementor.getPanelView().getCurrentPageView().showView("categories")}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(130);i=Marionette.CompositeView.extend({id:"elementor-panel-page-menu",template:"#tmpl-elementor-panel-menu",childView:o,childViewContainer:"#elementor-panel-page-menu-content",initialize:function(){this.collection=i.getGroups()},onDestroy:function(){var e="eicon-arrow-"+(elementor.config.is_rtl?"right":"left");elementor.panel.currentView.getHeaderView().ui.menuIcon.removeClass(e).addClass("eicon-menu-bar")}},{groups:null,initGroups:function(){var e=[];elementor.config.user.is_administrator&&(e=[{name:"style",title:elementor.translate("global_style"),items:[{name:"global-colors",icon:"fa fa-paint-brush",title:elementor.translate("global_colors"),type:"page",pageName:"colorScheme"},{name:"global-fonts",icon:"fa fa-font",title:elementor.translate("global_fonts"),type:"page",pageName:"typographyScheme"},{name:"color-picker",icon:"fa fa-eyedropper",title:elementor.translate("color_picker"),type:"page",pageName:"colorPickerScheme"}]},{name:"settings",title:elementor.translate("settings"),items:[{name:"elementor-settings",icon:"fa fa-external-link",title:elementor.translate("elementor_settings"),type:"link",link:elementor.config.settings_page_link,newTab:!0},{name:"about-elementor",icon:"fa fa-info-circle",title:elementor.translate("about_elementor"),type:"link",link:elementor.config.elementor_site,newTab:!0}]}]),this.groups=new Backbone.Collection(e)},getGroups:function(){return this.groups||this.initGroups(),this.groups},addItem:function(e,t,n){var i=this.getGroups().findWhere({name:t});if(i){var o,r=i.get("items");n&&(o=_.findWhere(r,{name:n})),o?r.splice(r.indexOf(o),0,e):r.push(e)}}}),e.exports=i},function(e,t,n){"use strict";var i=n(131);e.exports=Marionette.CompositeView.extend({template:"#tmpl-elementor-panel-menu-group",className:"elementor-panel-menu-group",childView:i,childViewContainer:".elementor-panel-menu-items",initialize:function(){this.collection=new Backbone.Collection(this.model.get("items"))},onChildviewClick:function(e){switch(e.model.get("type")){case"page":var t=e.model.get("pageName"),n=e.model.get("title");elementor.getPanelView().setPage(t,n);break;case"link":var i=e.model.get("link");e.model.get("newTab")?open(i,"_blank"):location.href=e.model.get("link");break;default:var o=e.model.get("callback");_.isFunction(o)&&o.call(e)}}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-menu-item",className:"elementor-panel-menu-item",triggers:{click:"click"}})},function(e,t,n){"use strict";var i=n(2),o=n(3);e.exports=i.extend({CACHE_KEY_NOT_FOUND_ERROR:"Cache key not found",tags:{Base:n(133)},cache:{},cacheRequests:{},cacheCallbacks:[],addCacheRequest:function(e){this.cacheRequests[this.createCacheKey(e)]=!0},createCacheKey:function(e){return btoa(e.getOption("name"))+"-"+btoa(encodeURIComponent(JSON.stringify(e.model)))},loadTagDataFromCache:function(e){var t=this.createCacheKey(e);if(void 0!==this.cache[t])return this.cache[t];this.cacheRequests[t]||this.addCacheRequest(e)},loadCacheRequests:function(){var e=this.cache,t=this.cacheRequests,n=this.cacheCallbacks;this.cacheRequests={},this.cacheCallbacks=[],elementor.ajax.send("render_tags",{data:{post_id:elementor.config.document.id,tags:Object.keys(t)},success:function(t){jQuery.extend(e,t),n.forEach(function(e){e()})}})},refreshCacheFromServer:function(e){this.cacheCallbacks.push(e),this.loadCacheRequests()},getConfig:function(e){return this.getItems(elementor.config.dynamicTags,e)},parseTagsText:function(e,t,n){var i=this;return"object"===t.returnType?i.parseTagText(e,t,n):e.replace(/\[elementor-tag[^\]]+]/g,function(e){return i.parseTagText(e,t,n)})},parseTagText:function(e,t,n){var i=this.tagTextToTagData(e);return i?n(i.id,i.name,i.settings):"object"===t.returnType?{}:""},tagTextToTagData:function(e){var t=e.match(/id="(.*?(?="))"/),n=e.match(/name="(.*?(?="))"/),i=e.match(/settings="(.*?(?="]))/);return!!(t&&n&&i)&&{id:t[1],name:n[1],settings:JSON.parse(decodeURIComponent(i[1]))}},createTag:function(e,t,n){var i=this.getConfig("tags."+t);if(i)return new(this.tags[t]||this.tags.Base)({id:e,name:t,model:new o(n,{controls:i.controls})})},getTagDataContent:function(e,t,n){var i=this.createTag(e,t,n);if(i)return i.getContent()},tagDataToTagText:function(e,t,n){return'[elementor-tag id="'+e+'" name="'+t+'" settings="'+(n=encodeURIComponent(JSON.stringify(n&&n.toJSON({removeDefault:!0})||{})))+'"]'},cleanCache:function(){this.cache={}},onInit:function(){this.loadCacheRequests=_.debounce(this.loadCacheRequests,300)}})},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({hasTemplate:!0,tagName:"span",className:function(){return"elementor-tag"},getTemplate:function(){return!!this.hasTemplate&&Marionette.TemplateCache.get("#tmpl-elementor-tag-"+this.getOption("name")+"-content")},initialize:function(){try{this.getTemplate()}catch(e){this.hasTemplate=!1}},getConfig:function(e){var t=elementor.dynamicTags.getConfig("tags."+this.getOption("name"));return e?t[e]:t},getContent:function(){var e,t=this.getConfig("content_type");if(!this.hasTemplate&&void 0===(e=elementor.dynamicTags.loadTagDataFromCache(this)))throw new Error(elementor.dynamicTags.CACHE_KEY_NOT_FOUND_ERROR);if("ui"===t){if(this.render(),this.hasTemplate)return this.el.outerHTML;this.getConfig("wrapped_tag")&&(e=jQuery(e).html()),this.$el.html(e)}return e},onRender:function(){this.el.id="elementor-tag-"+this.getOption("id")}})},function(e,t,n){"use strict";var i=n(2);e.exports=i.extend({modules:{base:n(21),general:n(135),page:n(136)},panelPages:{base:n(137)},onInit:function(){this.initSettings()},initSettings:function(){var e=this;_.each(elementor.config.settings,function(t,n){var i=e.modules[n]||e.modules.base;e[n]=new i(t)})}})},function(e,t,n){"use strict";var i=n(21);e.exports=i.extend({changeCallbacks:{elementor_page_title_selector:function(e){var t=e||"h1.entry-title";(elementor.settings.page.model.controls.hide_title.selectors={})[t]="display: none",elementor.settings.page.updateStylesheet()}}})},function(e,t,n){"use strict";var i=n(21);e.exports=i.extend({save:function(){},changeCallbacks:{post_title:function(e){elementorFrontend.getElements("$document").find(elementor.config.page_title_selector).text(e)},template:function(){elementor.saver.saveAutoSave({onSuccess:function(){elementor.reloadPreview(),elementor.once("preview:loaded",function(){elementor.getPanelView().setPage("page_settings")})}})}},onModelChange:function(){elementor.saver.setFlagEditorChange(!0),i.prototype.onModelChange.apply(this,arguments)},getDataToSave:function(e){return e.id=elementor.config.document.id,e}})},function(e,t,n){"use strict";var i=n(12);e.exports=i.extend({id:function(){return"elementor-panel-"+this.getOption("name")+"-settings"},getTemplate:function(){return"#tmpl-elementor-panel-"+this.getOption("name")+"-settings"},childViewContainer:function(){return"#elementor-panel-"+this.getOption("name")+"-settings-controls"},childViewOptions:function(){return{elementSettingsModel:this.model}}})},function(e,t,n){"use strict";var i=n(2);e.exports=i.extend({autoSaveTimer:null,autosaveInterval:1e3*elementor.config.autosave_interval,isSaving:!1,isChangedDuringSave:!1,__construct:function(){this.setWorkSaver()},startTimer:function(e){clearTimeout(this.autoSaveTimer),e&&(this.autoSaveTimer=setTimeout(_.bind(this.doAutoSave,this),this.autosaveInterval))},saveDraft:function(){var e=elementor.settings.page.model.get("post_status");if(elementor.saver.isEditorChanged()||"draft"===e)switch(e){case"publish":case"private":this.doAutoSave();break;default:this.update()}},doAutoSave:function(){"edit"===elementor.channels.dataEditMode.request("activeMode")&&this.saveAutoSave()},saveAutoSave:function(e){this.isEditorChanged()&&(e=_.extend({status:"autosave"},e),this.saveEditor(e))},savePending:function(e){e=_.extend({status:"pending"},e),this.saveEditor(e)},discard:function(){var e=this;elementor.ajax.addRequest("discard_changes",{success:function(){e.setFlagEditorChange(!1),location.href=elementor.config.document.urls.exit_to_dashboard}})},update:function(e){e=_.extend({status:elementor.settings.page.model.get("post_status")},e),this.saveEditor(e)},publish:function(e){e=_.extend({status:"publish"},e),this.saveEditor(e)},setFlagEditorChange:function(e){e&&this.isSaving&&(this.isChangedDuringSave=!0),this.startTimer(e),elementor.channels.editor.reply("status",e).trigger("status:change",e)},isEditorChanged:function(){return!0===elementor.channels.editor.request("status")},setWorkSaver:function(){var e=this;elementor.$window.on("beforeunload",function(){if(e.isEditorChanged())return elementor.translate("before_unload_alert")})},saveEditor:function(e){if(!this.isSaving){e=_.extend({status:"draft",onSuccess:null},e);var t=this,n=elementor.elements.toJSON({removeDefault:!0}),i=elementor.settings.page.model.toJSON({removeDefault:!0}),o=elementor.settings.page.model.get("post_status"),r=o!==e.status;t.trigger("before:save",e).trigger("before:save:"+e.status,e),t.isSaving=!0,t.isChangedDuringSave=!1,i.post_status=e.status,elementor.ajax.addRequest("save_builder",{data:{status:e.status,elements:n,settings:i},success:function(i){t.afterAjax(),"autosave"!==e.status&&(r&&elementor.settings.page.model.set("post_status",e.status),t.isChangedDuringSave||t.setFlagEditorChange(!1)),i.config&&jQuery.extend(!0,elementor.config,i.config),elementor.config.data=n,elementor.channels.editor.trigger("saved",i),t.trigger("after:save",i).trigger("after:save:"+e.status,i),r&&t.trigger("page:status:change",e.status,o),_.isFunction(e.onSuccess)&&e.onSuccess.call(this,i)},error:function(n){var i;t.afterAjax(),t.trigger("after:saveError",n).trigger("after:saveError:"+e.status,n),_.isString(n)?i=n:n.statusText?(i=elementor.ajax.createErrorMessage(n),0===n.readyState&&(i+=" "+elementor.translate("saving_disabled"))):n[0]&&n[0].code&&(i=elementor.translate("server_error")+" "+n[0].code),elementor.notifications.showToast({message:i})}})}},afterAjax:function(){this.isSaving=!1}})},function(e,t,n){"use strict";var i=n(2);e.exports=i.extend({initToast:function(){var e=elementor.dialogsManager.createWidget("buttons",{id:"elementor-toast",position:{my:"center bottom",at:"center bottom-10",of:"#elementor-panel-content-wrapper",autoRefresh:!0},hide:{onClick:!0,auto:!0,autoDelay:1e4},effects:{show:function(){var t=e.getElements("widget");t.show(),e.refreshPosition();var n=parseInt(t.css("top"),10);t.hide().css("top",n+100),t.animate({opacity:"show",height:"show",paddingBottom:"show",paddingTop:"show",top:n},{easing:"linear",duration:300})},hide:function(){var t=e.getElements("widget"),n=parseInt(t.css("top"),10);t.animate({opacity:"hide",height:"hide",paddingBottom:"hide",paddingTop:"hide",top:n+100},{easing:"linear",duration:300})}},button:{tag:"div"}});this.getToast=function(){return e}},showToast:function(e){var t=this.getToast();t.setMessage(e.message),t.getElements("buttonsWrapper").empty(),e.buttons&&e.buttons.forEach(function(e){t.addButton(e)}),t.show()},onInit:function(){this.initToast()}})},function(e,t,n){"use strict";var i=n(23);e.exports=i.extend({el:"#elementor-panel",getStorageKey:function(){return"panel"},getDefaultStorage:function(){return{size:{width:""}}},constructor:function(){i.prototype.constructor.apply(this,arguments);var e=n(141);this.show(new e),this.resizable(),this.setSize(),this.listenTo(elementor.channels.dataEditMode,"switch",this.onEditModeSwitched)},setSize:function(){var e=this.storage.size.width,t=elementor.config.is_rtl?"right":"left";this.$el.css("width",e),elementor.$previewWrapper.css(t,e)},resizable:function(){var e=this,t=elementor.config.is_rtl?"right":"left";e.$el.resizable({handles:elementor.config.is_rtl?"w":"e",minWidth:200,maxWidth:680,start:function(){elementor.$previewWrapper.addClass("ui-resizable-resizing")},stop:function(){elementor.$previewWrapper.removeClass("ui-resizable-resizing"),elementor.getPanelView().updateScrollbar(),e.saveSize()},resize:function(e,n){elementor.$previewWrapper.css(t,n.size.width)}})},onEditModeSwitched:function(e){"edit"===e&&this.setSize()}})},function(e,t,n){"use strict";var i,o=n(142);i=Marionette.LayoutView.extend({template:"#tmpl-elementor-panel",id:"elementor-panel-inner",regions:{content:"#elementor-panel-content-wrapper",header:"#elementor-panel-header-wrapper",footer:"#elementor-panel-footer",modeSwitcher:"#elementor-mode-switcher"},pages:{},childEvents:{"click:add":function(){this.setPage("elements")},"editor:destroy":function(){this.setPage("elements",null,{autoFocusSearch:!1})}},currentPageName:null,currentPageView:null,_isScrollbarInitialized:!1,initialize:function(){this.initPages()},buildPages:function(){var e={elements:{view:n(143),title:'<img src="'+elementor.config.assets_url+'images/logo-panel.svg">'},editor:{view:n(148)},menu:{view:elementor.modules.layouts.panel.pages.menu.Menu,title:'<img src="'+elementor.config.assets_url+'images/logo-panel.svg">'},colorScheme:{view:n(42)},typographyScheme:{view:n(151)},colorPickerScheme:{view:n(152)}},t=Object.keys(elementor.schemes.getSchemes()),i=_.difference(t,elementor.schemes.getEnabledSchemesTypes());return _.each(i,function(t){var i=elementor.schemes.getScheme(t);e[t+"Scheme"].view=n(153).extend({disabledTitle:i.disabled_title})}),e},initPages:function(){var e;this.getPages=function(t){return e||(e=this.buildPages()),t?e[t]:e},this.addPage=function(t,n){e||(e=this.buildPages()),e[t]=n}},getHeaderView:function(){return this.getChildView("header")},getFooterView:function(){return this.getChildView("footer")},getCurrentPageName:function(){return this.currentPageName},getCurrentPageView:function(){return this.currentPageView},setPage:function(e,t,n){var i=this.getPages();"elements"!==e||elementor.userCan("design")||i.page_settings&&(e="page_settings");var o=i[e];if(!o)throw new ReferenceError("Elementor panel doesn't have page named '"+e+"'");o.options&&(n=_.extend(o.options,n));var r=o.view;o.getView&&(r=o.getView()),this.currentPageName=e,this.currentPageView=new r(n),this.showChildView("content",this.currentPageView),this.getHeaderView().setTitle(t||o.title),this.trigger("set:page",this.currentPageView).trigger("set:page:"+e,this.currentPageView)},openEditor:function(e,t){this.setPage("editor",elementor.translate("edit_element",[elementor.getElementData(e).title]),{model:e,controls:elementor.getElementControls(e),editedElementView:t});var n="panel/open_editor/"+e.get("elType");elementor.hooks.doAction(n,this,e,t),elementor.hooks.doAction(n+"/"+e.get("widgetType"),this,e,t)},onBeforeShow:function(){var e=n(154),t=n(155);this.showChildView("modeSwitcher",new o),this.showChildView("header",new t),this.showChildView("footer",new e),this.updateScrollbar=_.throttle(this.updateScrollbar,100),this.getRegion("content").on("before:show",this.onEditorBeforeShow.bind(this)).on("empty",this.onEditorEmpty.bind(this)).on("show",this.updateScrollbar.bind(this)),this.setPage("elements")},onEditorBeforeShow:function(){_.defer(this.updateScrollbar.bind(this))},onEditorEmpty:function(){this.updateScrollbar()},updateScrollbar:function(){var e=this.content.$el;if(!this._isScrollbarInitialized)return e.perfectScrollbar(),void(this._isScrollbarInitialized=!0);e.perfectScrollbar("update")}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-mode-switcher-content",id:"elementor-mode-switcher-inner",ui:{previewButton:"#elementor-mode-switcher-preview-input",previewLabel:"#elementor-mode-switcher-preview",previewLabelA11y:"#elementor-mode-switcher-preview .elementor-screen-only"},events:{"change @ui.previewButton":"onPreviewButtonChange"},initialize:function(){this.listenTo(elementor.channels.dataEditMode,"switch",this.onEditModeChanged)},getCurrentMode:function(){return this.ui.previewButton.is(":checked")?"preview":"edit"},setMode:function(e){this.ui.previewButton.prop("checked","preview"===e).trigger("change")},toggleMode:function(){this.setMode(this.ui.previewButton.prop("checked")?"edit":"preview")},onRender:function(){this.onEditModeChanged()},onPreviewButtonChange:function(){elementor.changeEditMode(this.getCurrentMode())},onEditModeChanged:function(){var e=elementor.channels.dataEditMode.request("activeMode"),t=elementor.translate("preview"===e?"back_to_editor":"preview");this.ui.previewLabel.attr("title",t),this.ui.previewLabelA11y.text(t)}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(144),r=n(41),s=n(145),a=elementor.modules.layouts.panel.pages.elements.views.Elements,l=n(147),c=n(38);i=Marionette.LayoutView.extend({template:"#tmpl-elementor-panel-elements",options:{autoFocusSearch:!0},regions:{elements:"#elementor-panel-elements-wrapper",search:"#elementor-panel-elements-search-area"},ui:{tabs:".elementor-panel-navigation-tab"},events:{"click @ui.tabs":"onTabClick"},regionViews:{},elementsCollection:null,categoriesCollection:null,initialize:function(){this.listenTo(elementor.channels.panelElements,"element:selected",this.destroy),this.initElementsCollection(),this.initCategoriesCollection(),this.initRegionViews()},initRegionViews:function(){var e={elements:{region:this.elements,view:a,options:{collection:this.elementsCollection}},categories:{region:this.elements,view:s,options:{collection:this.categoriesCollection}},search:{region:this.search,view:l},global:{region:this.elements,view:c}};this.regionViews=elementor.hooks.applyFilters("panel/elements/regionViews",e)},initElementsCollection:function(){var e=new r,t=elementor.config.elements.section;e.add({title:elementor.translate("inner_section"),elType:"section",categories:["basic"],keywords:["row","columns","nested"],icon:t.icon}),_.each(elementor.config.widgets,function(t){t.show_in_panel&&e.add({title:t.title,elType:t.elType,categories:t.categories,keywords:t.keywords,icon:t.icon,widgetType:t.widget_type,custom:t.custom})}),this.elementsCollection=e},initCategoriesCollection:function(){var e={};this.elementsCollection.each(function(t){_.each(t.get("categories"),function(n){e[n]||(e[n]=[]),e[n].push(t)})});var t=new o;_.each(elementor.config.document.panel.elements_categories,function(n,i){e[i]&&(void 0===n.active&&(n.active=!0),void 0===n.icon&&(n.icon="font"),t.add({name:i,title:n.title,icon:n.icon,defaultActive:n.active,items:e[i]}))}),this.categoriesCollection=t},activateTab:function(e){this.ui.tabs.removeClass("elementor-active").filter('[data-view="'+e+'"]').addClass("elementor-active"),this.showView(e)},showView:function(e){var t=this.regionViews[e],n=t.options||{};t.region.show(new t.view(n))},clearSearchInput:function(){this.getChildView("search").clearInput()},changeFilter:function(e){elementor.channels.panelElements.reply("filter:value",e).trigger("filter:change")},clearFilters:function(){this.changeFilter(null),this.clearSearchInput()},focusSearch:function(){elementor.userCan("design")&&this.search.currentView.ui.input.focus()},onChildviewChildrenRender:function(){elementor.getPanelView().updateScrollbar()},onChildviewSearchChangeInput:function(e){this.changeFilter(e.ui.input.val(),"search")},onDestroy:function(){elementor.channels.panelElements.reply("filter:value",null)},onShow:function(){this.showView("categories"),this.showView("search"),this.options.autoFocusSearch&&setTimeout(this.focusSearch.bind(this))},onTabClick:function(e){this.activateTab(e.currentTarget.dataset.view)}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(40);i=Backbone.Collection.extend({model:o}),e.exports=i},function(e,t,n){"use strict";var i,o=n(146);i=Marionette.CompositeView.extend({template:"#tmpl-elementor-panel-categories",childView:o,childViewContainer:"#elementor-panel-categories",id:"elementor-panel-elements-categories",initialize:function(){this.listenTo(elementor.channels.panelElements,"filter:change",this.onPanelElementsFilterChange)},onPanelElementsFilterChange:function(){elementor.channels.panelElements.request("filter:value")&&elementor.getPanelView().getCurrentPageView().showView("elements")}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(41);i=Marionette.CompositeView.extend({template:"#tmpl-elementor-panel-elements-category",className:"elementor-panel-category",ui:{title:".elementor-panel-category-title",items:".elementor-panel-category-items"},events:{"click @ui.title":"onTitleClick"},id:function(){return"elementor-panel-category-"+this.model.get("name")},childView:n(39),childViewContainer:".elementor-panel-category-items",initialize:function(){this.collection=new o(this.model.get("items"))},onRender:function(){var e=elementor.channels.panelElements.request("category:"+this.model.get("name")+":active");void 0===e&&(e=this.model.get("defaultActive")),e&&(this.$el.addClass("elementor-active"),this.ui.items.show())},onTitleClick:function(){var e=this.ui.items,t=this.$el.hasClass("elementor-active"),n=t?"slideUp":"slideDown";elementor.channels.panelElements.reply("category:"+this.model.get("name")+":active",!t),this.$el.toggleClass("elementor-active",!t),e[n](300,function(){elementor.getPanelView().updateScrollbar()})}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-element-search",id:"elementor-panel-elements-search-wrapper",ui:{input:"input"},events:{"input @ui.input":"onInputChanged"},clearInput:function(){this.ui.input.val("")},onInputChanged:function(e){27===e.keyCode&&this.clearInput(),this.triggerMethod("search:change:input")}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(12);i=o.extend({template:Marionette.TemplateCache.get("#tmpl-editor-content"),id:"elementor-panel-page-editor",childViewContainer:"#elementor-controls",childViewOptions:function(){return{elementSettingsModel:this.model.get("settings"),elementEditSettings:this.model.get("editSettings")}},openActiveSection:function(){o.prototype.openActiveSection.apply(this,arguments),elementor.channels.editor.trigger("section:activated",this.activeSection,this)},isVisibleSectionControl:function(e){return o.prototype.isVisibleSectionControl.apply(this,arguments)&&elementor.helpers.isActiveControl(e,this.model.get("settings").attributes)},scrollToEditedElement:function(){elementor.helpers.scrollToView(this.getOption("editedElementView").$el)},getControlView:function(e){return this.children.findByModelCid(this.getControlModel(e).cid)},getControlModel:function(e){return this.collection.findWhere({name:e})},onDestroy:function(){var e=this.getOption("editedElementView");e&&e.$el.removeClass("elementor-element-editable"),this.model.trigger("editor:close"),this.triggerMethod("editor:destroy")},onRender:function(){var e=this.getOption("editedElementView");e&&e.$el.addClass("elementor-element-editable")},onDeviceModeChange:function(){o.prototype.onDeviceModeChange.apply(this,arguments),this.scrollToEditedElement()},onChildviewSettingsChange:function(e){var t=this.getOption("editedElementView"),n=t.model.get("elType");"widget"===n&&(n=t.model.get("widgetType")),elementor.channels.editor.trigger("change",e,t).trigger("change:"+n,e,t).trigger("change:"+n+":"+e.model.get("name"),e,t)}}),e.exports=i},function(e,t,n){"use strict";var i;i=n(44).extend({getUIType:function(){return"color"},ui:{input:".elementor-panel-scheme-color-value"},changeUIValue:function(e){this.ui.input.wpColorPicker("color",e)},onBeforeDestroy:function(){this.ui.input.wpColorPicker("instance")&&this.ui.input.wpColorPicker("close")},onRender:function(){var e=this;elementor.helpers.wpColorPicker(e.ui.input,{change:function(t,n){e.triggerMethod("value:change",n.color.toString())}})}}),e.exports=i},function(e,t,n){"use strict";var i,o=n(44);i=o.extend({getUIType:function(){return"typography"},className:function(){return o.prototype.className.apply(this,arguments)+" elementor-panel-box"},ui:{heading:".elementor-panel-heading",allFields:".elementor-panel-scheme-typography-item-field",inputFields:"input.elementor-panel-scheme-typography-item-field",selectFields:"select.elementor-panel-scheme-typography-item-field",selectFamilyFields:'select.elementor-panel-scheme-typography-item-field[name="font_family"]'},events:{"input @ui.inputFields":"onFieldChange","change @ui.selectFields":"onFieldChange","click @ui.heading":"toggleVisibility"},onRender:function(){var e=this;this.ui.inputFields.add(this.ui.selectFields).each(function(){var t=jQuery(this),n=t.attr("name"),i=e.model.get("value")[n];t.val(i)}),this.ui.selectFamilyFields.select2({dir:elementor.config.is_rtl?"rtl":"ltr"})},toggleVisibility:function(){this.$el.toggleClass("elementor-open")},changeUIValue:function(e){this.ui.allFields.each(function(){var t=jQuery(this),n=t.attr("name"),i=e[n];t.val(i).trigger("change")})},onFieldChange:function(e){var t=this.$(e.currentTarget),n=elementor.schemes.getSchemeValue("typography",this.model.get("key")).value,i=t.attr("name");n[i]=t.val(),"font_family"!==i||_.isEmpty(n[i])||elementor.helpers.enqueueFont(n[i]),this.triggerMethod("value:change",n)}}),e.exports=i},function(e,t,n){"use strict";var i;i=n(43).extend({getType:function(){return"typography"}}),e.exports=i},function(e,t,n){"use strict";var i;i=n(42).extend({getType:function(){return"color-picker"},getUIType:function(){return"color"},onSchemeChange:function(){},getViewComparator:function(){return this.orderView},orderView:function(e){return elementor.helpers.getColorPickerPaletteIndex(e.get("key"))}}),e.exports=i},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-schemes-disabled",id:"elementor-panel-schemes-disabled",className:"elementor-nerd-box",disabledTitle:"",templateHelpers:function(){return{disabledTitle:this.disabledTitle}}}),e.exports=i},function(e,t,n){"use strict";e.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-footer-content",tagName:"nav",id:"elementor-panel-footer-tools",possibleRotateModes:["portrait","landscape"],ui:{buttonSave:"#elementor-panel-saver-button-publish, #elementor-panel-saver-menu-save-draft",menuButtons:".elementor-panel-footer-tool",settings:"#elementor-panel-footer-settings",deviceModeIcon:"#elementor-panel-footer-responsive > i",deviceModeButtons:"#elementor-panel-footer-responsive .elementor-panel-footer-sub-menu-item",saveTemplate:"#elementor-panel-saver-menu-save-template",history:"#elementor-panel-footer-history",navigator:"#elementor-panel-footer-navigator"},events:{"click @ui.menuButtons":"onMenuButtonsClick","click @ui.settings":"onSettingsClick","click @ui.deviceModeButtons":"onResponsiveButtonsClick","click @ui.saveTemplate":"onSaveTemplateClick","click @ui.history":"onHistoryClick","click @ui.navigator":"onNavigatorClick"},behaviors:function(){var e={saver:{behaviorClass:elementor.modules.components.saver.behaviors.FooterSaver}};return elementor.hooks.applyFilters("panel/footer/behaviors",e,this)},initialize:function(){this.listenTo(elementor.channels.deviceMode,"change",this.onDeviceModeChange)},getDeviceModeButton:function(e){return this.ui.deviceModeButtons.filter('[data-device-mode="'+e+'"]')},onMenuButtonsClick:function(e){var t=jQuery(e.currentTarget);if(t.hasClass("elementor-toggle-state")&&!jQuery(e.target).closest(".elementor-panel-footer-sub-menu-item").length){var n=t.hasClass("elementor-open");this.ui.menuButtons.not(".elementor-leave-open").removeClass("elementor-open"),n||t.addClass("elementor-open")}},onSettingsClick:function(){var e=this;"page_settings"!==elementor.getPanelView().getCurrentPageName()&&(elementor.getPanelView().setPage("page_settings"),elementor.getPanelView().getCurrentPageView().once("destroy",function(){e.ui.settings.removeClass("elementor-open")}))},onDeviceModeChange:function(){var e=elementor.channels.deviceMode.request("previousMode"),t=elementor.channels.deviceMode.request("currentMode");this.getDeviceModeButton(e).removeClass("active"),this.getDeviceModeButton(t).addClass("active"),this.ui.deviceModeIcon.removeClass("eicon-device-"+e).addClass("eicon-device-"+t)},onResponsiveButtonsClick:function(e){var t=this.$(e.currentTarget).data("device-mode");elementor.changeDeviceMode(t)},onSaveTemplateClick:function(){elementor.templates.startModal({onReady:function(){elementor.templates.getLayout().showSaveTemplateView()}})},onHistoryClick:function(){"historyPage"!==elementor.getPanelView().getCurrentPageName()&&elementor.getPanelView().setPage("historyPage")},onNavigatorClick:function(){elementor.navigator.isOpen()?elementor.navigator.close():elementor.navigator.open()}})},function(e,t,n){"use strict";var i;i=Marionette.ItemView.extend({template:"#tmpl-elementor-panel-header",id:"elementor-panel-header",ui:{menuButton:"#elementor-panel-header-menu-button",menuIcon:"#elementor-panel-header-menu-button i",title:"#elementor-panel-header-title",addButton:"#elementor-panel-header-add-button"},events:{"click @ui.addButton":"onClickAdd","click @ui.menuButton":"onClickMenu"},setTitle:function(e){this.ui.title.html(e)},onClickAdd:function(){elementor.getPanelView().setPage("elements")},onClickMenu:function(){var e=elementor.getPanelView(),t="menu"===e.getCurrentPageName()?"elements":"menu";if("menu"===t){var n="eicon-arrow-"+(elementor.config.is_rtl?"right":"left");this.ui.menuIcon.removeClass("eicon-menu-bar").addClass(n)}e.setPage(t)}}),e.exports=i},function(e,t,n){"use strict";var i=function(e){return e&&e.__esModule?e:{default:e}}(n(157));var o,r=n(158);o=r.extend({template:Marionette.TemplateCache.get("#tmpl-elementor-preview"),className:"elementor-inner",childViewContainer:".elementor-section-wrap",behaviors:function(){var e=r.prototype.behaviors.apply(this,arguments),t={contextMenu:{behaviorClass:n(11),groups:this.getContextMenuGroups()}};return elementor.config.user.introduction&&(t.introduction={behaviorClass:n(159)}),jQuery.extend(e,t)},getContextMenuGroups:function(){var e=function(){return elementor.elements.length>0};return[{name:"paste",actions:[{name:"paste",title:elementor.translate("paste"),callback:this.paste.bind(this),isEnabled:this.isPasteEnabled.bind(this)}]},{name:"content",actions:[{name:"copy_all_content",title:elementor.translate("copy_all_content"),callback:this.copy.bind(this),isEnabled:e},{name:"delete_all_content",title:elementor.translate("delete_all_content"),callback:elementor.clearPage.bind(elementor),isEnabled:e}]}]},copy:function(){elementor.setStorage("transfer",{type:"copy",elementsType:"section",elements:elementor.elements.toJSON({copyHtmlCache:!0})})},paste:function(e){var t,n=this,i=elementor.getStorage("transfer"),o=void 0!==e?e:this.collection.length;elementor.channels.data.trigger("element:before:add",i.elements[0]),"section"===i.elementsType?i.elements.forEach(function(e){n.addChildElement(e,{at:o,edit:!1,clone:!0}),o++}):"column"===i.elementsType?((t=n.addChildElement({allowEmpty:!0},{at:e})).model.unset("allowEmpty"),o=0,i.elements.forEach(function(e){t.addChildElement(e,{at:o,clone:!0}),o++}),t.redefineLayout()):(t=n.addChildElement(null,{at:e}),o=0,i.elements.forEach(function(e){t.addChildElement(e,{at:o,clone:!0}),o++})),elementor.channels.data.trigger("element:after:add",i.elements[0])},isPasteEnabled:function(){return elementor.getStorage("transfer")},onRender:function(){if(elementor.userCan("design")){var e=new i.default;e.render(),this.$el.append(e.$el)}}}),e.exports=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),o=function(e){return e&&e.__esModule?e:{default:e}}(n(30));var r=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,o.default),i(t,[{key:"onCloseButtonClick",value:function(){this.closeSelectPresets()}},{key:"id",get:function(){return"elementor-add-new-section"}}]),t}();t.default=r},function(e,t,n){"use strict";var i,o=n(29),r=n(28);i=r.extend({childView:o,behaviors:function(){var e={Sortable:{behaviorClass:n(19),elChildType:"section"}};return elementor.hooks.applyFilters("elements/base-section-container/behaviors",e,this)},getSortableOptions:function(){return{handle:"> .elementor-element-overlay .elementor-editor-element-edit",items:"> .elementor-section"}},getChildType:function(){return["section"]},initialize:function(){r.prototype.initialize.apply(this,arguments),this.listenTo(this.collection,"add remove reset",this.onCollectionChanged).listenTo(elementor.channels.panelElements,"element:drag:start",this.onPanelElementDragStart).listenTo(elementor.channels.panelElements,"element:drag:end",this.onPanelElementDragEnd)},onCollectionChanged:function(){elementor.saver.setFlagEditorChange(!0)},onPanelElementDragStart:function(){elementor.helpers.disableElementEvents(this.$el.find("iframe"))},onPanelElementDragEnd:function(){elementor.helpers.enableElementEvents(this.$el.find("iframe"))}}),e.exports=i},function(e,t,n){"use strict";e.exports=Marionette.Behavior.extend({introductionViewed:!1,ui:{editButton:".elementor-editor-element-edit"},events:{"click @ui.editButton":"show"},initialize:function(){this.initDialog()},initDialog:function(){var e;this.getDialog=function(){return e||((e=elementor.dialogsManager.createWidget("buttons",{className:"elementor-introduction",headerMessage:elementor.translate("meet_right_click_header"),message:elementor.translate("meet_right_click_message"),iframe:elementor.$preview,position:{my:"center top+5",at:"center bottom",collision:"fit"},effects:{hide:"hide",show:"show"},hide:{onBackgroundClick:!1}})).addButton({name:"learn-more",text:elementor.translate("learn_more"),tag:"div",callback:function(){open(elementor.config.help_right_click_url,"_blank")}}),e.addButton({name:"ok",text:elementor.translate("got_it"),callback:this.setIntroductionViewed.bind(this)}),e.getElements("ok").addClass("elementor-button elementor-button-success")),e}},show:function(e){if(!this.introductionViewed){var t=this.getDialog();t.setSettings("position",{of:e.currentTarget}),t.show()}},setIntroductionViewed:function(){this.introductionViewed=!0,elementor.ajax.addRequest("introduction_viewed")}})}]);
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
-var ElementsHandler;
+/*! elementor - v2.2.1 - 03-09-2018 */
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 167);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 1:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Module = __webpack_require__(2),
+ ViewModule;
+
+ViewModule = Module.extend({
+ elements: null,
-ElementsHandler = function( $ ) {
- var self = this;
+ getDefaultElements: function getDefaultElements() {
+ return {};
+ },
- // element-type.skin-type
- var handlers = {
- // Elements
- 'section': require( 'elementor-frontend/handlers/section' ),
+ bindEvents: function bindEvents() {},
- // Widgets
- 'accordion.default': require( 'elementor-frontend/handlers/accordion' ),
- 'alert.default': require( 'elementor-frontend/handlers/alert' ),
- 'counter.default': require( 'elementor-frontend/handlers/counter' ),
- 'progress.default': require( 'elementor-frontend/handlers/progress' ),
- 'tabs.default': require( 'elementor-frontend/handlers/tabs' ),
- 'toggle.default': require( 'elementor-frontend/handlers/toggle' ),
- 'video.default': require( 'elementor-frontend/handlers/video' ),
- 'image-carousel.default': require( 'elementor-frontend/handlers/image-carousel' ),
- 'text-editor.default': require( 'elementor-frontend/handlers/text-editor' )
- };
+ onInit: function onInit() {
+ this.initElements();
- var addGlobalHandlers = function() {
- elementorFrontend.hooks.addAction( 'frontend/element_ready/global', require( 'elementor-frontend/handlers/global' ) );
- elementorFrontend.hooks.addAction( 'frontend/element_ready/widget', require( 'elementor-frontend/handlers/widget' ) );
- };
+ this.bindEvents();
+ },
- var addElementsHandlers = function() {
- $.each( handlers, function( elementName, funcCallback ) {
- elementorFrontend.hooks.addAction( 'frontend/element_ready/' + elementName, funcCallback );
- } );
- };
+ initElements: function initElements() {
+ this.elements = this.getDefaultElements();
+ }
+});
- var runElementsHandlers = function() {
- var $elements;
+module.exports = ViewModule;
- if ( elementorFrontend.isEditMode() ) {
- // Elements outside from the Preview
- $elements = jQuery( '.elementor-element', '.elementor:not(.elementor-edit-mode)' );
- } else {
- $elements = $( '.elementor-element' );
- }
+/***/ }),
- $elements.each( function() {
- self.runReadyTrigger( $( this ) );
- } );
- };
+/***/ 16:
+/***/ (function(module, exports, __webpack_require__) {
- var init = function() {
- if ( ! elementorFrontend.isEditMode() ) {
- self.initHandlers();
- }
- };
+"use strict";
- this.initHandlers = function() {
- addGlobalHandlers();
- addElementsHandlers();
+var ViewModule = __webpack_require__(1);
- runElementsHandlers();
- };
+module.exports = ViewModule.extend({
- this.getHandlers = function( handlerName ) {
- if ( handlerName ) {
- return handlers[ handlerName ];
- }
+ getDefaultSettings: function getDefaultSettings() {
+ return {
+ container: null,
+ items: null,
+ columnsCount: 3,
+ verticalSpaceBetween: 30
+ };
+ },
- return handlers;
- };
+ getDefaultElements: function getDefaultElements() {
+ return {
+ $container: jQuery(this.getSettings('container')),
+ $items: jQuery(this.getSettings('items'))
+ };
+ },
+
+ run: function run() {
+ var heights = [],
+ distanceFromTop = this.elements.$container.position().top,
+ settings = this.getSettings(),
+ columnsCount = settings.columnsCount;
- this.runReadyTrigger = function( $scope ) {
- var elementType = $scope.attr( 'data-element_type' );
+ distanceFromTop += parseInt(this.elements.$container.css('margin-top'), 10);
- if ( ! elementType ) {
- return;
- }
+ this.elements.$items.each(function (index) {
+ var row = Math.floor(index / columnsCount),
+ $item = jQuery(this),
+ itemHeight = $item[0].getBoundingClientRect().height + settings.verticalSpaceBetween;
- // Initializing the `$scope` as frontend jQuery instance
- $scope = jQuery( $scope );
+ if (row) {
+ var itemPosition = $item.position(),
+ indexAtRow = index % columnsCount,
+ pullHeight = itemPosition.top - distanceFromTop - heights[indexAtRow];
- elementorFrontend.hooks.doAction( 'frontend/element_ready/global', $scope, $ );
+ pullHeight -= parseInt($item.css('margin-top'), 10);
- var isWidgetType = ( -1 === [ 'section', 'column' ].indexOf( elementType ) );
+ pullHeight *= -1;
- if ( isWidgetType ) {
- elementorFrontend.hooks.doAction( 'frontend/element_ready/widget', $scope, $ );
- }
+ $item.css('margin-top', pullHeight + 'px');
- elementorFrontend.hooks.doAction( 'frontend/element_ready/' + elementType, $scope, $ );
- };
+ heights[indexAtRow] += itemHeight;
+ } else {
+ heights.push(itemHeight);
+ }
+ });
+ }
+});
- init();
-};
+/***/ }),
+
+/***/ 167:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
-module.exports = ElementsHandler;
-},{"elementor-frontend/handlers/accordion":4,"elementor-frontend/handlers/alert":5,"elementor-frontend/handlers/counter":7,"elementor-frontend/handlers/global":8,"elementor-frontend/handlers/image-carousel":9,"elementor-frontend/handlers/progress":10,"elementor-frontend/handlers/section":11,"elementor-frontend/handlers/tabs":12,"elementor-frontend/handlers/text-editor":13,"elementor-frontend/handlers/toggle":14,"elementor-frontend/handlers/video":15,"elementor-frontend/handlers/widget":16}],2:[function(require,module,exports){
/* global elementorFrontendConfig */
-( function( $ ) {
+(function ($) {
var elements = {},
- EventManager = require( '../utils/hooks' ),
- Module = require( './handler-module' ),
- ElementsHandler = require( 'elementor-frontend/elements-handler' ),
- YouTubeModule = require( 'elementor-frontend/utils/youtube' ),
- AnchorsModule = require( 'elementor-frontend/utils/anchors' ),
- LightboxModule = require( 'elementor-frontend/utils/lightbox' );
-
- var ElementorFrontend = function() {
+ EventManager = __webpack_require__(20),
+ Module = __webpack_require__(5),
+ ElementsHandler = __webpack_require__(168),
+ YouTubeModule = __webpack_require__(180),
+ AnchorsModule = __webpack_require__(181),
+ LightboxModule = __webpack_require__(182);
+
+ var ElementorFrontend = function ElementorFrontend() {
var self = this,
- dialogsManager;
+ dialogsManager;
this.config = elementorFrontendConfig;
this.Module = Module;
- var setDeviceModeData = function() {
- elements.$body.attr( 'data-elementor-device-mode', self.getCurrentDeviceMode() );
+ var setDeviceModeData = function setDeviceModeData() {
+ elements.$body.attr('data-elementor-device-mode', self.getCurrentDeviceMode());
};
- var initElements = function() {
+ var initElements = function initElements() {
elements.window = window;
- elements.$window = $( window );
+ elements.$window = $(window);
- elements.$document = $( document );
+ elements.$document = $(document);
- elements.$body = $( 'body' );
+ elements.$body = $('body');
- elements.$elementor = elements.$document.find( '.elementor' );
+ elements.$elementor = elements.$document.find('.elementor');
- elements.$wpAdminBar = elements.$document.find( '#wpadminbar' );
+ elements.$wpAdminBar = elements.$document.find('#wpadminbar');
};
- var bindEvents = function() {
- elements.$window.on( 'resize', setDeviceModeData );
+ var bindEvents = function bindEvents() {
+ elements.$window.on('resize', setDeviceModeData);
};
- var initOnReadyComponents = function() {
+ var initOnReadyComponents = function initOnReadyComponents() {
self.utils = {
youtube: new YouTubeModule(),
anchors: new AnchorsModule(),
};
self.modules = {
- StretchElement: require( 'elementor-frontend/modules/stretch-element' ),
- Masonry: require( 'elementor-utils/masonry' )
+ StretchElement: __webpack_require__(183),
+ Masonry: __webpack_require__(16)
};
- self.elementsHandler = new ElementsHandler( $ );
+ self.elementsHandler = new ElementsHandler($);
};
- var initHotKeys = function() {
- self.hotKeys = require( 'elementor-utils/hot-keys' );
+ var initHotKeys = function initHotKeys() {
+ self.hotKeys = __webpack_require__(17);
- self.hotKeys.bindListener( elements.$window );
+ self.hotKeys.bindListener(elements.$window);
};
- var getSiteSettings = function( settingType, settingName ) {
- var settingsObject = self.isEditMode() ? elementor.settings[ settingType ].model.attributes : self.config.settings[ settingType ];
+ var getSiteSettings = function getSiteSettings(settingType, settingName) {
+ var settingsObject = self.isEditMode() ? elementor.settings[settingType].model.attributes : self.config.settings[settingType];
- if ( settingName ) {
- return settingsObject[ settingName ];
+ if (settingName) {
+ return settingsObject[settingName];
}
return settingsObject;
};
- this.init = function() {
+ var addIeCompatibility = function addIeCompatibility() {
+ var isIE = 'Microsoft Internet Explorer' === navigator.appName || !!navigator.userAgent.match(/Trident/g) || !!navigator.userAgent.match(/MSIE/g) || !!navigator.userAgent.match(/rv:11/);
+
+ if (!isIE) {
+ return;
+ }
+ elements.$body.addClass('elementor-msie');
+
+ var $frontendCss = jQuery('#elementor-frontend-css'),
+ msieCss = $frontendCss[0].outerHTML.replace('css/frontend', 'css/frontend-msie').replace('elementor-frontend-css', 'elementor-frontend-msie-css');
+
+ $frontendCss.after(msieCss);
+ };
+
+ this.init = function () {
self.hooks = new EventManager();
initElements();
+ addIeCompatibility();
+
bindEvents();
setDeviceModeData();
- elements.$window.trigger( 'elementor/frontend/init' );
+ elements.$window.trigger('elementor/frontend/init');
- if ( ! self.isEditMode() ) {
+ if (!self.isEditMode()) {
initHotKeys();
}
initOnReadyComponents();
};
- this.getElements = function( element ) {
- if ( element ) {
- return elements[ element ];
+ this.getElements = function (element) {
+ if (element) {
+ return elements[element];
}
return elements;
};
- this.getDialogsManager = function() {
- if ( ! dialogsManager ) {
+ this.getDialogsManager = function () {
+ if (!dialogsManager) {
dialogsManager = new DialogsManager.Instance();
}
return dialogsManager;
};
- this.getPageSettings = function( settingName ) {
- return getSiteSettings( 'page', settingName );
+ this.getPageSettings = function (settingName) {
+ return getSiteSettings('page', settingName);
};
- this.getGeneralSettings = function( settingName ) {
- return getSiteSettings( 'general', settingName );
+ this.getGeneralSettings = function (settingName) {
+ return getSiteSettings('general', settingName);
};
- this.isEditMode = function() {
+ this.isEditMode = function () {
return self.config.isEditMode;
};
// Based on underscore function
- this.throttle = function( func, wait ) {
+ this.throttle = function (func, wait) {
var timeout,
- context,
- args,
- result,
- previous = 0;
+ context,
+ args,
+ result,
+ previous = 0;
- var later = function() {
+ var later = function later() {
previous = Date.now();
timeout = null;
- result = func.apply( context, args );
+ result = func.apply(context, args);
- if ( ! timeout ) {
+ if (!timeout) {
context = args = null;
}
};
- return function() {
+ return function () {
var now = Date.now(),
- remaining = wait - ( now - previous );
+ remaining = wait - (now - previous);
context = this;
args = arguments;
- if ( remaining <= 0 || remaining > wait ) {
- if ( timeout ) {
- clearTimeout( timeout );
+ if (remaining <= 0 || remaining > wait) {
+ if (timeout) {
+ clearTimeout(timeout);
timeout = null;
}
previous = now;
- result = func.apply( context, args );
+ result = func.apply(context, args);
- if ( ! timeout ) {
+ if (!timeout) {
context = args = null;
}
- } else if ( ! timeout ) {
- timeout = setTimeout( later, remaining );
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
}
return result;
};
};
- this.addListenerOnce = function( listenerID, event, callback, to ) {
- if ( ! to ) {
- to = self.getElements( '$window' );
+ this.addListenerOnce = function (listenerID, event, callback, to) {
+ if (!to) {
+ to = self.getElements('$window');
}
- if ( ! self.isEditMode() ) {
- to.on( event, callback );
+ if (!self.isEditMode()) {
+ to.on(event, callback);
return;
}
- if ( to instanceof jQuery ) {
+ this.removeListeners(listenerID, event, to);
+
+ if (to instanceof jQuery) {
+ var eventNS = event + '.' + listenerID;
+
+ to.on(eventNS, callback);
+ } else {
+ to.on(event, callback, listenerID);
+ }
+ };
+
+ this.removeListeners = function (listenerID, event, callback, from) {
+ if (!from) {
+ from = self.getElements('$window');
+ }
+
+ if (from instanceof jQuery) {
var eventNS = event + '.' + listenerID;
- to.off( eventNS ).on( eventNS, callback );
+ from.off(eventNS, callback);
} else {
- to.off( event, null, listenerID ).on( event, callback, listenerID );
+ from.off(event, callback, listenerID);
}
};
- this.getCurrentDeviceMode = function() {
- return getComputedStyle( elements.$elementor[ 0 ], ':after' ).content.replace( /"/g, '' );
+ this.getCurrentDeviceMode = function () {
+ return getComputedStyle(elements.$elementor[0], ':after').content.replace(/"/g, '');
};
- this.waypoint = function( $element, callback, options ) {
+ this.waypoint = function ($element, callback, options) {
var defaultOptions = {
offset: '100%',
triggerOnce: true
};
- options = $.extend( defaultOptions, options );
+ options = $.extend(defaultOptions, options);
- var correctCallback = function() {
+ var correctCallback = function correctCallback() {
var element = this.element || this,
- result = callback.apply( element, arguments );
+ result = callback.apply(element, arguments);
// If is Waypoint new API and is frontend
- if ( options.triggerOnce && this.destroy ) {
+ if (options.triggerOnce && this.destroy) {
this.destroy();
}
return result;
};
- return $element.elementorWaypoint( correctCallback, options );
+ return $element.elementorWaypoint(correctCallback, options);
};
};
window.elementorFrontend = new ElementorFrontend();
-} )( jQuery );
+})(jQuery);
-if ( ! elementorFrontend.isEditMode() ) {
- jQuery( elementorFrontend.init );
+if (!elementorFrontend.isEditMode()) {
+ jQuery(elementorFrontend.init);
}
-},{"../utils/hooks":21,"./handler-module":3,"elementor-frontend/elements-handler":1,"elementor-frontend/modules/stretch-element":17,"elementor-frontend/utils/anchors":18,"elementor-frontend/utils/lightbox":19,"elementor-frontend/utils/youtube":20,"elementor-utils/hot-keys":22,"elementor-utils/masonry":23}],3:[function(require,module,exports){
-var ViewModule = require( '../utils/view-module' ),
- HandlerModule;
-
-HandlerModule = ViewModule.extend( {
- $element: null,
+/***/ }),
- onElementChange: null,
+/***/ 168:
+/***/ (function(module, exports, __webpack_require__) {
- onEditSettingsChange: null,
+"use strict";
- onGeneralSettingsChange: null,
- onPageSettingsChange: null,
+var ElementsHandler;
- isEdit: null,
+ElementsHandler = function ElementsHandler($) {
+ var self = this;
- __construct: function( settings ) {
- this.$element = settings.$element;
+ // element-type.skin-type
+ var handlers = {
+ // Elements
+ 'section': __webpack_require__(169),
- this.isEdit = this.$element.hasClass( 'elementor-element-edit-mode' );
+ // Widgets
+ 'accordion.default': __webpack_require__(170),
+ 'alert.default': __webpack_require__(171),
+ 'counter.default': __webpack_require__(172),
+ 'progress.default': __webpack_require__(173),
+ 'tabs.default': __webpack_require__(174),
+ 'toggle.default': __webpack_require__(175),
+ 'video.default': __webpack_require__(176),
+ 'image-carousel.default': __webpack_require__(177),
+ 'text-editor.default': __webpack_require__(178)
+ };
- if ( this.isEdit ) {
- this.addEditorListener();
- }
- },
+ var addGlobalHandlers = function addGlobalHandlers() {
+ elementorFrontend.hooks.addAction('frontend/element_ready/global', __webpack_require__(179));
+ };
- findElement: function( selector ) {
- var $mainElement = this.$element;
+ var addElementsHandlers = function addElementsHandlers() {
+ $.each(handlers, function (elementName, funcCallback) {
+ elementorFrontend.hooks.addAction('frontend/element_ready/' + elementName, funcCallback);
+ });
+ };
- return $mainElement.find( selector ).filter( function() {
- return jQuery( this ).closest( '.elementor-element' ).is( $mainElement );
- } );
- },
+ var runElementsHandlers = function runElementsHandlers() {
+ var $elements;
- getUniqueHandlerID: function( cid, $element ) {
- if ( ! cid ) {
- cid = this.getModelCID();
+ if (elementorFrontend.isEditMode()) {
+ // Elements outside from the Preview
+ $elements = jQuery('.elementor-element', '.elementor:not(.elementor-edit-mode)');
+ } else {
+ $elements = $('.elementor-element');
}
- if ( ! $element ) {
- $element = this.$element;
+ $elements.each(function () {
+ self.runReadyTrigger($(this));
+ });
+ };
+
+ var init = function init() {
+ if (!elementorFrontend.isEditMode()) {
+ self.initHandlers();
}
+ };
- return cid + $element.attr( 'data-element_type' ) + this.getConstructorID();
- },
+ this.initHandlers = function () {
+ addGlobalHandlers();
- addEditorListener: function() {
- var self = this,
- uniqueHandlerID = self.getUniqueHandlerID();
+ addElementsHandlers();
- if ( self.onElementChange ) {
- var elementName = self.getElementName(),
- eventName = 'change';
+ runElementsHandlers();
+ };
- if ( 'global' !== elementName ) {
- eventName += ':' + elementName;
- }
+ this.getHandlers = function (handlerName) {
+ if (handlerName) {
+ return handlers[handlerName];
+ }
- elementorFrontend.addListenerOnce( uniqueHandlerID, eventName, function( controlView, elementView ) {
- var elementViewHandlerID = self.getUniqueHandlerID( elementView.model.cid, elementView.$el );
+ return handlers;
+ };
- if ( elementViewHandlerID !== uniqueHandlerID ) {
- return;
- }
+ this.runReadyTrigger = function ($scope) {
+ var elementType = $scope.attr('data-element_type');
- self.onElementChange( controlView.model.get( 'name' ), controlView, elementView );
- }, elementor.channels.editor );
+ if (!elementType) {
+ return;
}
- if ( self.onEditSettingsChange ) {
- elementorFrontend.addListenerOnce( uniqueHandlerID, 'change:editSettings', function( changedModel, view ) {
- if ( view.model.cid !== self.getModelCID() ) {
- return;
- }
+ // Initializing the `$scope` as frontend jQuery instance
+ $scope = jQuery($scope);
- self.onEditSettingsChange( Object.keys( changedModel.changed )[0] );
- }, elementor.channels.editor );
- }
+ elementorFrontend.hooks.doAction('frontend/element_ready/global', $scope, $);
- [ 'page', 'general' ].forEach( function( settingsType ) {
- var listenerMethodName = 'on' + settingsType.charAt( 0 ).toUpperCase() + settingsType.slice( 1 ) + 'SettingsChange';
+ var isWidgetType = -1 === ['section', 'column'].indexOf(elementType);
- if ( self[ listenerMethodName ] ) {
- elementorFrontend.addListenerOnce( uniqueHandlerID, 'change', function( model ) {
- self[ listenerMethodName ]( model.changed );
- }, elementor.settings[ settingsType ].model );
- }
- } );
- },
+ if (isWidgetType) {
+ elementorFrontend.hooks.doAction('frontend/element_ready/widget', $scope, $);
+ }
- getElementName: function() {
- return this.$element.data( 'element_type' ).split( '.' )[0];
- },
+ elementorFrontend.hooks.doAction('frontend/element_ready/' + elementType, $scope, $);
+ };
- getID: function() {
- return this.$element.data( 'id' );
- },
+ init();
+};
- getModelCID: function() {
- return this.$element.data( 'model-cid' );
- },
+module.exports = ElementsHandler;
- getElementSettings: function( setting ) {
- var elementSettings = {},
- modelCID = this.getModelCID();
+/***/ }),
- if ( this.isEdit && modelCID ) {
- var settings = elementorFrontend.config.elements.data[ modelCID ],
- settingsKeys = elementorFrontend.config.elements.keys[ settings.attributes.widgetType || settings.attributes.elType ];
+/***/ 169:
+/***/ (function(module, exports, __webpack_require__) {
- jQuery.each( settings.getActiveControls(), function( controlKey ) {
- if ( -1 !== settingsKeys.indexOf( controlKey ) ) {
- elementSettings[ controlKey ] = settings.attributes[ controlKey ];
- }
- } );
- } else {
- elementSettings = this.$element.data( 'settings' ) || {};
- }
+"use strict";
- return this.getItems( elementSettings, setting );
- },
- getEditSettings: function( setting ) {
- var attributes = {};
+var HandlerModule = __webpack_require__(5);
- if ( this.isEdit ) {
- attributes = elementorFrontend.config.elements.editSettings[ this.getModelCID() ].attributes;
- }
+var BackgroundVideo = HandlerModule.extend({
+ player: null,
- return this.getItems( attributes, setting );
- }
-} );
+ isYTVideo: null,
-module.exports = HandlerModule;
+ getDefaultSettings: function getDefaultSettings() {
+ return {
+ selectors: {
+ backgroundVideoContainer: '.elementor-background-video-container',
+ backgroundVideoEmbed: '.elementor-background-video-embed',
+ backgroundVideoHosted: '.elementor-background-video-hosted'
+ }
+ };
+ },
-},{"../utils/view-module":25}],4:[function(require,module,exports){
-var TabsModule = require( 'elementor-frontend/handlers/base-tabs' );
+ getDefaultElements: function getDefaultElements() {
+ var selectors = this.getSettings('selectors'),
+ elements = {
+ $backgroundVideoContainer: this.$element.find(selectors.backgroundVideoContainer)
+ };
-module.exports = function( $scope ) {
- new TabsModule( {
- $element: $scope,
- showTabFn: 'slideDown',
- hideTabFn: 'slideUp'
- } );
-};
+ elements.$backgroundVideoEmbed = elements.$backgroundVideoContainer.children(selectors.backgroundVideoEmbed);
-},{"elementor-frontend/handlers/base-tabs":6}],5:[function(require,module,exports){
-module.exports = function( $scope, $ ) {
- $scope.find( '.elementor-alert-dismiss' ).on( 'click', function() {
- $( this ).parent().fadeOut();
- } );
-};
+ elements.$backgroundVideoHosted = elements.$backgroundVideoContainer.children(selectors.backgroundVideoHosted);
-},{}],6:[function(require,module,exports){
-var HandlerModule = require( 'elementor-frontend/handler-module' );
+ return elements;
+ },
-module.exports = HandlerModule.extend( {
- $activeContent: null,
+ calcVideosSize: function calcVideosSize() {
+ var containerWidth = this.elements.$backgroundVideoContainer.outerWidth(),
+ containerHeight = this.elements.$backgroundVideoContainer.outerHeight(),
+ aspectRatioSetting = '16:9',
+ //TEMP
+ aspectRatioArray = aspectRatioSetting.split(':'),
+ aspectRatio = aspectRatioArray[0] / aspectRatioArray[1],
+ ratioWidth = containerWidth / aspectRatio,
+ ratioHeight = containerHeight * aspectRatio,
+ isWidthFixed = containerWidth / containerHeight > aspectRatio;
- getDefaultSettings: function() {
return {
- selectors: {
- tabTitle: '.elementor-tab-title',
- tabContent: '.elementor-tab-content'
- },
- classes: {
- active: 'elementor-active'
- },
- showTabFn: 'show',
- hideTabFn: 'hide',
- toggleSelf: true,
- hidePrevious: true,
- autoExpand: true
+ width: isWidthFixed ? containerWidth : ratioHeight,
+ height: isWidthFixed ? ratioWidth : containerHeight
};
},
- getDefaultElements: function() {
- var selectors = this.getSettings( 'selectors' );
+ changeVideoSize: function changeVideoSize() {
+ var $video = this.isYTVideo ? jQuery(this.player.getIframe()) : this.elements.$backgroundVideoHosted,
+ size = this.calcVideosSize();
- return {
- $tabTitles: this.findElement( selectors.tabTitle ),
- $tabContents: this.findElement( selectors.tabContent )
- };
+ $video.width(size.width).height(size.height);
},
- activateDefaultTab: function() {
- var settings = this.getSettings();
+ startVideoLoop: function startVideoLoop() {
+ var self = this;
- if ( ! settings.autoExpand || 'editor' === settings.autoExpand && ! this.isEdit ) {
+ // If the section has been removed
+ if (!self.player.getIframe().contentWindow) {
return;
}
- var defaultActiveTab = this.getEditSettings( 'activeItemIndex' ) || 1,
- originalToggleMethods = {
- showTabFn: settings.showTabFn,
- hideTabFn: settings.hideTabFn
- };
+ var elementSettings = self.getElementSettings(),
+ startPoint = elementSettings.background_video_start || 0,
+ endPoint = elementSettings.background_video_end;
- // Toggle tabs without animation to avoid jumping
- this.setSettings( {
- showTabFn: 'show',
- hideTabFn: 'hide'
- } );
+ self.player.seekTo(startPoint);
- this.changeActiveTab( defaultActiveTab );
+ if (endPoint) {
+ var durationToEnd = endPoint - startPoint + 1;
- // Return back original toggle effects
- this.setSettings( originalToggleMethods );
+ setTimeout(function () {
+ self.startVideoLoop();
+ }, durationToEnd * 1000);
+ }
},
- deactivateActiveTab: function( tabIndex ) {
- var settings = this.getSettings(),
- activeClass = settings.classes.active,
- activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : '.' + activeClass,
- $activeTitle = this.elements.$tabTitles.filter( activeFilter ),
- $activeContent = this.elements.$tabContents.filter( activeFilter );
-
- $activeTitle.add( $activeContent ).removeClass( activeClass );
-
- $activeContent[ settings.hideTabFn ]();
- },
+ prepareYTVideo: function prepareYTVideo(YT, videoID) {
+ var self = this,
+ $backgroundVideoContainer = self.elements.$backgroundVideoContainer,
+ elementSettings = self.getElementSettings(),
+ startStateCode = YT.PlayerState.PLAYING;
- activateTab: function( tabIndex ) {
- var settings = this.getSettings(),
- activeClass = settings.classes.active,
- $requestedTitle = this.elements.$tabTitles.filter( '[data-tab="' + tabIndex + '"]' ),
- $requestedContent = this.elements.$tabContents.filter( '[data-tab="' + tabIndex + '"]' );
+ // Since version 67, Chrome doesn't fire the `PLAYING` state at start time
+ if (window.chrome) {
+ startStateCode = YT.PlayerState.UNSTARTED;
+ }
- $requestedTitle.add( $requestedContent ).addClass( activeClass );
+ $backgroundVideoContainer.addClass('elementor-loading elementor-invisible');
- $requestedContent[ settings.showTabFn ]();
- },
+ self.player = new YT.Player(self.elements.$backgroundVideoEmbed[0], {
+ videoId: videoID,
+ events: {
+ onReady: function onReady() {
+ self.player.mute();
- isActiveTab: function( tabIndex ) {
- return this.elements.$tabTitles.filter( '[data-tab="' + tabIndex + '"]' ).hasClass( this.getSettings( 'classes.active' ) );
- },
+ self.changeVideoSize();
- bindEvents: function() {
- var self = this;
+ self.startVideoLoop();
- self.elements.$tabTitles.on( 'focus', function( event ) {
- self.changeActiveTab( event.currentTarget.dataset.tab );
- } );
+ self.player.playVideo();
+ },
+ onStateChange: function onStateChange(event) {
+ switch (event.data) {
+ case startStateCode:
+ $backgroundVideoContainer.removeClass('elementor-invisible elementor-loading');
- if ( self.getSettings( 'toggleSelf' ) ) {
- self.elements.$tabTitles.on( 'mousedown', function( event ) {
- if ( jQuery( event.currentTarget ).is( ':focus' ) ) {
- self.changeActiveTab( event.currentTarget.dataset.tab );
+ break;
+ case YT.PlayerState.ENDED:
+ self.player.seekTo(elementSettings.background_video_start || 0);
+ }
}
- } );
- }
+ },
+ playerVars: {
+ controls: 0,
+ showinfo: 0,
+ rel: 0
+ }
+ });
+
+ elementorFrontend.getElements('$window').on('resize', self.changeVideoSize);
},
- onInit: function() {
- HandlerModule.prototype.onInit.apply( this, arguments );
+ activate: function activate() {
+ var self = this,
+ videoLink = self.getElementSettings('background_video_link'),
+ videoID = elementorFrontend.utils.youtube.getYoutubeIDFromURL(videoLink);
+
+ self.isYTVideo = !!videoID;
- this.activateDefaultTab();
+ if (videoID) {
+ elementorFrontend.utils.youtube.onYoutubeApiReady(function (YT) {
+ setTimeout(function () {
+ self.prepareYTVideo(YT, videoID);
+ }, 1);
+ });
+ } else {
+ self.elements.$backgroundVideoHosted.attr('src', videoLink).one('canplay', self.changeVideoSize);
+ }
},
- onEditSettingsChange: function( propertyName ) {
- if ( 'activeItemIndex' === propertyName ) {
- this.activateDefaultTab();
+ deactivate: function deactivate() {
+ if (this.isYTVideo && this.player.getIframe()) {
+ this.player.destroy();
+ } else {
+ this.elements.$backgroundVideoHosted.removeAttr('src');
}
},
- changeActiveTab: function( tabIndex ) {
- var isActiveTab = this.isActiveTab( tabIndex ),
- settings = this.getSettings();
+ run: function run() {
+ var elementSettings = this.getElementSettings();
- if ( ( settings.toggleSelf || ! isActiveTab ) && settings.hidePrevious ) {
- this.deactivateActiveTab();
+ if ('video' === elementSettings.background_background && elementSettings.background_video_link) {
+ this.activate();
+ } else {
+ this.deactivate();
}
+ },
- if ( ! settings.hidePrevious && isActiveTab ) {
- this.deactivateActiveTab( tabIndex );
- }
+ onInit: function onInit() {
+ HandlerModule.prototype.onInit.apply(this, arguments);
+
+ this.run();
+ },
- if ( ! isActiveTab ) {
- this.activateTab( tabIndex );
+ onElementChange: function onElementChange(propertyName) {
+ if ('background_background' === propertyName) {
+ this.run();
}
}
-} );
+});
-},{"elementor-frontend/handler-module":3}],7:[function(require,module,exports){
-module.exports = function( $scope, $ ) {
- elementorFrontend.waypoint( $scope.find( '.elementor-counter-number' ), function() {
- var $number = $( this ),
- data = $number.data();
+var StretchedSection = HandlerModule.extend({
- var decimalDigits = data.toValue.toString().match( /\.(.*)/ );
+ stretchElement: null,
- if ( decimalDigits ) {
- data.rounding = decimalDigits[1].length;
- }
+ bindEvents: function bindEvents() {
+ var handlerID = this.getUniqueHandlerID();
- $number.numerator( data );
- } );
-};
+ elementorFrontend.addListenerOnce(handlerID, 'resize', this.stretch);
-},{}],8:[function(require,module,exports){
-var HandlerModule = require( 'elementor-frontend/handler-module' ),
- GlobalHandler;
+ elementorFrontend.addListenerOnce(handlerID, 'sticky:stick', this.stretch, this.$element);
-GlobalHandler = HandlerModule.extend( {
- getElementName: function() {
- return 'global';
+ elementorFrontend.addListenerOnce(handlerID, 'sticky:unstick', this.stretch, this.$element);
},
- animate: function() {
- var $element = this.$element,
- animation = this.getAnimation(),
- elementSettings = this.getElementSettings(),
- animationDelay = elementSettings._animation_delay || elementSettings.animation_delay || 0;
- $element.removeClass( animation );
-
- setTimeout( function() {
- $element.removeClass( 'elementor-invisible' ).addClass( animation );
- }, animationDelay );
+ unbindEvents: function unbindEvents() {
+ elementorFrontend.removeListeners(this.getUniqueHandlerID(), 'resize', this.stretch);
},
- getAnimation: function() {
- var elementSettings = this.getElementSettings();
- return elementSettings.animation || elementSettings._animation;
+ initStretch: function initStretch() {
+ this.stretchElement = new elementorFrontend.modules.StretchElement({
+ element: this.$element,
+ selectors: {
+ container: this.getStretchContainer()
+ }
+ });
},
- onInit: function() {
- HandlerModule.prototype.onInit.apply( this, arguments );
- var animation = this.getAnimation();
+ getStretchContainer: function getStretchContainer() {
+ return elementorFrontend.getGeneralSettings('elementor_stretched_section_container') || window;
+ },
- if ( ! animation ) {
+ stretch: function stretch() {
+ if (!this.getElementSettings('stretch_section')) {
return;
}
- this.$element.removeClass( animation );
-
- elementorFrontend.waypoint( this.$element, this.animate.bind( this ) );
+ this.stretchElement.stretch();
},
- onElementChange: function( propertyName ) {
- if ( /^_?animation/.test( propertyName ) ) {
- this.animate();
- }
- }
-} );
-module.exports = function( $scope ) {
- new GlobalHandler( { $element: $scope } );
-};
+ onInit: function onInit() {
+ HandlerModule.prototype.onInit.apply(this, arguments);
-},{"elementor-frontend/handler-module":3}],9:[function(require,module,exports){
-var HandlerModule = require( 'elementor-frontend/handler-module' ),
- ImageCarouselHandler;
+ this.initStretch();
-ImageCarouselHandler = HandlerModule.extend( {
- getDefaultSettings: function() {
- return {
- selectors: {
- carousel: '.elementor-image-carousel'
+ this.stretch();
+ },
+
+ onElementChange: function onElementChange(propertyName) {
+ if ('stretch_section' === propertyName) {
+ if (this.getElementSettings('stretch_section')) {
+ this.stretch();
+ } else {
+ this.stretchElement.reset();
}
- };
+ }
},
- getDefaultElements: function() {
- var selectors = this.getSettings( 'selectors' );
+ onGeneralSettingsChange: function onGeneralSettingsChange(changed) {
+ if ('elementor_stretched_section_container' in changed) {
+ this.stretchElement.setSettings('selectors.container', this.getStretchContainer());
+
+ this.stretch();
+ }
+ }
+});
+
+var Shapes = HandlerModule.extend({
+ getDefaultSettings: function getDefaultSettings() {
return {
- $carousel: this.$element.find( selectors.carousel )
+ selectors: {
+ container: '> .elementor-shape-%s'
+ },
+ svgURL: elementorFrontend.config.urls.assets + 'shapes/'
};
},
- onInit: function() {
- HandlerModule.prototype.onInit.apply( this, arguments );
+ getDefaultElements: function getDefaultElements() {
+ var elements = {},
+ selectors = this.getSettings('selectors');
- var elementSettings = this.getElementSettings(),
- slidesToShow = +elementSettings.slides_to_show || 3,
- isSingleSlide = 1 === slidesToShow;
+ elements.$topContainer = this.$element.find(selectors.container.replace('%s', 'top'));
- var slickOptions = {
- slidesToShow: slidesToShow,
- autoplay: 'yes' === elementSettings.autoplay,
- autoplaySpeed: elementSettings.autoplay_speed,
- infinite: 'yes' === elementSettings.infinite,
- pauseOnHover: 'yes' === elementSettings.pause_on_hover,
- speed: elementSettings.speed,
- arrows: -1 !== [ 'arrows', 'both' ].indexOf( elementSettings.navigation ),
- dots: -1 !== [ 'dots', 'both' ].indexOf( elementSettings.navigation ),
- rtl: 'rtl' === elementSettings.direction,
- responsive: [
- {
- breakpoint: 1025,
- settings: {
- slidesToShow: +elementSettings.slides_to_show_tablet || ( isSingleSlide ? 1 : 2 ),
- slidesToScroll: 1
- }
- },
- {
- breakpoint: 768,
- settings: {
- slidesToShow: +elementSettings.slides_to_show_mobile || 1,
- slidesToScroll: 1
- }
- }
- ]
- };
+ elements.$bottomContainer = this.$element.find(selectors.container.replace('%s', 'bottom'));
- if ( isSingleSlide ) {
- slickOptions.fade = 'fade' === elementSettings.effect;
- } else {
- slickOptions.slidesToScroll = +elementSettings.slides_to_scroll;
+ return elements;
+ },
+
+ buildSVG: function buildSVG(side) {
+ var self = this,
+ baseSettingKey = 'shape_divider_' + side,
+ shapeType = self.getElementSettings(baseSettingKey),
+ $svgContainer = this.elements['$' + side + 'Container'];
+
+ $svgContainer.empty().attr('data-shape', shapeType);
+
+ if (!shapeType) {
+ return;
}
- this.elements.$carousel.slick( slickOptions );
- }
-} );
+ var fileName = shapeType;
-module.exports = function( $scope ) {
- new ImageCarouselHandler( { $element: $scope } );
-};
+ if (self.getElementSettings(baseSettingKey + '_negative')) {
+ fileName += '-negative';
+ }
-},{"elementor-frontend/handler-module":3}],10:[function(require,module,exports){
-module.exports = function( $scope, $ ) {
- elementorFrontend.waypoint( $scope.find( '.elementor-progress-bar' ), function() {
- var $progressbar = $( this );
+ var svgURL = self.getSettings('svgURL') + fileName + '.svg';
- $progressbar.css( 'width', $progressbar.data( 'max' ) + '%' );
- } );
-};
+ jQuery.get(svgURL, function (data) {
+ $svgContainer.append(data.childNodes[0]);
+ });
-},{}],11:[function(require,module,exports){
-var HandlerModule = require( 'elementor-frontend/handler-module' );
+ this.setNegative(side);
+ },
-var BackgroundVideo = HandlerModule.extend( {
- player: null,
+ setNegative: function setNegative(side) {
+ this.elements['$' + side + 'Container'].attr('data-negative', !!this.getElementSettings('shape_divider_' + side + '_negative'));
+ },
- isYTVideo: null,
+ onInit: function onInit() {
+ var self = this;
- getDefaultSettings: function() {
- return {
- selectors: {
- backgroundVideoContainer: '.elementor-background-video-container',
- backgroundVideoEmbed: '.elementor-background-video-embed',
- backgroundVideoHosted: '.elementor-background-video-hosted'
+ HandlerModule.prototype.onInit.apply(self, arguments);
+
+ ['top', 'bottom'].forEach(function (side) {
+ if (self.getElementSettings('shape_divider_' + side)) {
+ self.buildSVG(side);
}
- };
+ });
},
- getDefaultElements: function() {
- var selectors = this.getSettings( 'selectors' ),
- elements = {
- $backgroundVideoContainer: this.$element.find( selectors.backgroundVideoContainer )
- };
+ onElementChange: function onElementChange(propertyName) {
+ var shapeChange = propertyName.match(/^shape_divider_(top|bottom)$/);
- elements.$backgroundVideoEmbed = elements.$backgroundVideoContainer.children( selectors.backgroundVideoEmbed );
+ if (shapeChange) {
+ this.buildSVG(shapeChange[1]);
- elements.$backgroundVideoHosted = elements.$backgroundVideoContainer.children( selectors.backgroundVideoHosted );
+ return;
+ }
- return elements;
- },
+ var negativeChange = propertyName.match(/^shape_divider_(top|bottom)_negative$/);
- calcVideosSize: function() {
- var containerWidth = this.elements.$backgroundVideoContainer.outerWidth(),
- containerHeight = this.elements.$backgroundVideoContainer.outerHeight(),
- aspectRatioSetting = '16:9', //TEMP
- aspectRatioArray = aspectRatioSetting.split( ':' ),
- aspectRatio = aspectRatioArray[ 0 ] / aspectRatioArray[ 1 ],
- ratioWidth = containerWidth / aspectRatio,
- ratioHeight = containerHeight * aspectRatio,
- isWidthFixed = containerWidth / containerHeight > aspectRatio;
+ if (negativeChange) {
+ this.buildSVG(negativeChange[1]);
- return {
- width: isWidthFixed ? containerWidth : ratioHeight,
- height: isWidthFixed ? ratioWidth : containerHeight
- };
- },
+ this.setNegative(negativeChange[1]);
+ }
+ }
+});
- changeVideoSize: function() {
- var $video = this.isYTVideo ? jQuery( this.player.getIframe() ) : this.elements.$backgroundVideoHosted,
- size = this.calcVideosSize();
+var HandlesPosition = HandlerModule.extend({
- $video.width( size.width ).height( size.height );
+ isFirst: function isFirst() {
+ return this.$element.is('.elementor-edit-mode .elementor-top-section:first');
},
- prepareYTVideo: function( YT, videoID ) {
- var self = this,
- $backgroundVideoContainer = self.elements.$backgroundVideoContainer;
-
- $backgroundVideoContainer.addClass( 'elementor-loading elementor-invisible' );
+ getOffset: function getOffset() {
+ return this.$element.offset().top;
+ },
- self.player = new YT.Player( self.elements.$backgroundVideoEmbed[ 0 ], {
- videoId: videoID,
- events: {
- onReady: function() {
- self.player.mute();
+ setHandlesPosition: function setHandlesPosition() {
+ var self = this;
- self.changeVideoSize();
+ if (self.isFirst()) {
+ var offset = self.getOffset(),
+ $handlesElement = self.$element.find('> .elementor-element-overlay > .elementor-editor-section-settings'),
+ insideHandleClass = 'elementor-section--handles-inside';
- self.player.playVideo();
- },
- onStateChange: function( event ) {
- switch ( event.data ) {
- case YT.PlayerState.PLAYING:
- $backgroundVideoContainer.removeClass( 'elementor-invisible elementor-loading' );
+ if (offset < 25) {
+ self.$element.addClass(insideHandleClass);
- break;
- case YT.PlayerState.ENDED:
- self.player.seekTo( 0 );
- }
+ if (offset < -5) {
+ $handlesElement.css('top', -offset);
+ } else {
+ $handlesElement.css('top', '');
}
- },
- playerVars: {
- controls: 0,
- showinfo: 0,
- rel: 0
+ } else {
+ self.$element.removeClass(insideHandleClass);
}
- } );
-
- elementorFrontend.getElements( '$window' ).on( 'resize', self.changeVideoSize );
+ }
},
- activate: function() {
- var self = this,
- videoLink = self.getElementSettings( 'background_video_link' ),
- videoID = elementorFrontend.utils.youtube.getYoutubeIDFromURL( videoLink );
+ onInit: function onInit() {
+ this.setHandlesPosition();
+ this.$element.on('mouseenter', this.setHandlesPosition);
+ }
+});
- self.isYTVideo = !! videoID;
+module.exports = function ($scope) {
+ if (elementorFrontend.isEditMode() || $scope.hasClass('elementor-section-stretched')) {
+ new StretchedSection({ $element: $scope });
+ }
- if ( videoID ) {
- elementorFrontend.utils.youtube.onYoutubeApiReady( function( YT ) {
- setTimeout( function() {
- self.prepareYTVideo( YT, videoID );
- }, 1 );
- } );
- } else {
- self.elements.$backgroundVideoHosted.attr( 'src', videoLink ).one( 'canplay', self.changeVideoSize );
- }
- },
+ if (elementorFrontend.isEditMode()) {
+ new Shapes({ $element: $scope });
+ new HandlesPosition({ $element: $scope });
+ }
- deactivate: function() {
- if ( this.isYTVideo && this.player.getIframe() ) {
- this.player.destroy();
- } else {
- this.elements.$backgroundVideoHosted.removeAttr( 'src' );
- }
- },
+ new BackgroundVideo({ $element: $scope });
+};
- run: function() {
- var elementSettings = this.getElementSettings();
+/***/ }),
- if ( 'video' === elementSettings.background_background && elementSettings.background_video_link ) {
- this.activate();
- } else {
- this.deactivate();
- }
- },
+/***/ 17:
+/***/ (function(module, exports, __webpack_require__) {
- onInit: function() {
- HandlerModule.prototype.onInit.apply( this, arguments );
+"use strict";
- this.run();
- },
- onElementChange: function( propertyName ) {
- if ( 'background_background' === propertyName ) {
- this.run();
+var HotKeys = function HotKeys() {
+ var hotKeysHandlers = {};
+
+ var applyHotKey = function applyHotKey(event) {
+ var handlers = hotKeysHandlers[event.which];
+
+ if (!handlers) {
+ return;
}
- }
-} );
-var StretchedSection = HandlerModule.extend( {
+ jQuery.each(handlers, function () {
+ var handler = this;
- stretchElement: null,
+ if (handler.isWorthHandling && !handler.isWorthHandling(event)) {
+ return;
+ }
- bindEvents: function() {
- elementorFrontend.addListenerOnce( this.$element.data( 'model-cid' ), 'resize', this.stretch );
- },
+ // Fix for some keyboard sources that consider alt key as ctrl key
+ if (!handler.allowAltKey && event.altKey) {
+ return;
+ }
- initStretch: function() {
- this.stretchElement = new elementorFrontend.modules.StretchElement( { element: this.$element } );
- },
+ event.preventDefault();
- stretch: function() {
- var isStretched = this.$element.hasClass( 'elementor-section-stretched' );
+ handler.handle(event);
+ });
+ };
- if ( ! isStretched ) {
- return;
+ this.isControlEvent = function (event) {
+ return event[elementor.envData.mac ? 'metaKey' : 'ctrlKey'];
+ };
+
+ this.addHotKeyHandler = function (keyCode, handlerName, handler) {
+ if (!hotKeysHandlers[keyCode]) {
+ hotKeysHandlers[keyCode] = {};
}
- this.stretchElement.setSettings( 'selectors.container', elementorFrontend.getGeneralSettings( 'elementor_stretched_section_container' ) || window );
+ hotKeysHandlers[keyCode][handlerName] = handler;
+ };
- this.stretchElement.stretch();
- },
+ this.bindListener = function ($listener) {
+ $listener.on('keydown', applyHotKey);
+ };
+};
- onInit: function() {
- HandlerModule.prototype.onInit.apply( this, arguments );
+module.exports = new HotKeys();
- this.initStretch();
+/***/ }),
- var isStretched = this.$element.hasClass( 'elementor-section-stretched' );
+/***/ 170:
+/***/ (function(module, exports, __webpack_require__) {
- if ( elementorFrontend.isEditMode() || isStretched ) {
- this.stretchElement.reset();
- }
+"use strict";
- this.stretch();
- },
- onGeneralSettingsChange: function( changed ) {
- if ( 'elementor_stretched_section_container' in changed ) {
- this.stretch();
+var TabsModule = __webpack_require__(22);
+
+module.exports = function ($scope) {
+ new TabsModule({
+ $element: $scope,
+ showTabFn: 'slideDown',
+ hideTabFn: 'slideUp'
+ });
+};
+
+/***/ }),
+
+/***/ 171:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function ($scope, $) {
+ $scope.find('.elementor-alert-dismiss').on('click', function () {
+ $(this).parent().fadeOut();
+ });
+};
+
+/***/ }),
+
+/***/ 172:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function ($scope, $) {
+ elementorFrontend.waypoint($scope.find('.elementor-counter-number'), function () {
+ var $number = $(this),
+ data = $number.data();
+
+ var decimalDigits = data.toValue.toString().match(/\.(.*)/);
+
+ if (decimalDigits) {
+ data.rounding = decimalDigits[1].length;
}
- }
-} );
-var Shapes = HandlerModule.extend( {
+ $number.numerator(data);
+ });
+};
+
+/***/ }),
+
+/***/ 173:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = function ($scope, $) {
+ elementorFrontend.waypoint($scope.find('.elementor-progress-bar'), function () {
+ var $progressbar = $(this);
+
+ $progressbar.css('width', $progressbar.data('max') + '%');
+ });
+};
+
+/***/ }),
+
+/***/ 174:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var TabsModule = __webpack_require__(22);
+
+module.exports = function ($scope) {
+ new TabsModule({
+ $element: $scope,
+ toggleSelf: false
+ });
+};
+
+/***/ }),
+
+/***/ 175:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var TabsModule = __webpack_require__(22);
+
+module.exports = function ($scope) {
+ new TabsModule({
+ $element: $scope,
+ showTabFn: 'slideDown',
+ hideTabFn: 'slideUp',
+ hidePrevious: false,
+ autoExpand: 'editor'
+ });
+};
+
+/***/ }),
- getDefaultSettings: function() {
+/***/ 176:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var HandlerModule = __webpack_require__(5),
+ VideoModule;
+
+VideoModule = HandlerModule.extend({
+ getDefaultSettings: function getDefaultSettings() {
return {
selectors: {
- container: '> .elementor-shape-%s'
- },
- svgURL: elementorFrontend.config.urls.assets + 'shapes/'
+ imageOverlay: '.elementor-custom-embed-image-overlay',
+ video: '.elementor-video',
+ videoIframe: '.elementor-video-iframe'
+ }
};
},
- getDefaultElements: function() {
- var elements = {},
- selectors = this.getSettings( 'selectors' );
-
- elements.$topContainer = this.$element.find( selectors.container.replace( '%s', 'top' ) );
+ getDefaultElements: function getDefaultElements() {
+ var selectors = this.getSettings('selectors');
- elements.$bottomContainer = this.$element.find( selectors.container.replace( '%s', 'bottom' ) );
+ return {
+ $imageOverlay: this.$element.find(selectors.imageOverlay),
+ $video: this.$element.find(selectors.video),
+ $videoIframe: this.$element.find(selectors.videoIframe)
+ };
+ },
- return elements;
+ getLightBox: function getLightBox() {
+ return elementorFrontend.utils.lightbox;
},
- buildSVG: function( side ) {
- var self = this,
- baseSettingKey = 'shape_divider_' + side,
- shapeType = self.getElementSettings( baseSettingKey ),
- $svgContainer = this.elements[ '$' + side + 'Container' ];
+ handleVideo: function handleVideo() {
+ if (!this.getElementSettings('lightbox')) {
+ this.elements.$imageOverlay.remove();
+
+ this.playVideo();
+ }
+ },
- $svgContainer.empty().attr( 'data-shape', shapeType );
+ playVideo: function playVideo() {
+ if (this.elements.$video.length) {
+ this.elements.$video[0].play();
- if ( ! shapeType ) {
return;
}
- var fileName = shapeType;
+ var $videoIframe = this.elements.$videoIframe,
+ lazyLoad = $videoIframe.data('lazy-load');
- if ( self.getElementSettings( baseSettingKey + '_negative' ) ) {
- fileName += '-negative';
+ if (lazyLoad) {
+ $videoIframe.attr('src', lazyLoad);
}
- var svgURL = self.getSettings( 'svgURL' ) + fileName + '.svg';
-
- jQuery.get( svgURL, function( data ) {
- $svgContainer.append( data.childNodes[0] );
- } );
+ var newSourceUrl = $videoIframe[0].src.replace('&autoplay=0', '');
- this.setNegative( side );
+ $videoIframe[0].src = newSourceUrl + '&autoplay=1';
},
- setNegative: function( side ) {
- this.elements[ '$' + side + 'Container' ].attr( 'data-negative', !! this.getElementSettings( 'shape_divider_' + side + '_negative' ) );
+ animateVideo: function animateVideo() {
+ this.getLightBox().setEntranceAnimation(this.getElementSettings('lightbox_content_animation'));
},
- onInit: function() {
- var self = this;
-
- HandlerModule.prototype.onInit.apply( self, arguments );
-
- [ 'top', 'bottom' ].forEach( function( side ) {
- if ( self.getElementSettings( 'shape_divider_' + side ) ) {
- self.buildSVG( side );
- }
- } );
+ handleAspectRatio: function handleAspectRatio() {
+ this.getLightBox().setVideoAspectRatio(this.getElementSettings('aspect_ratio'));
},
- onElementChange: function( propertyName ) {
- var shapeChange = propertyName.match( /^shape_divider_(top|bottom)$/ );
+ bindEvents: function bindEvents() {
+ this.elements.$imageOverlay.on('click', this.handleVideo);
+ },
- if ( shapeChange ) {
- this.buildSVG( shapeChange[1] );
+ onElementChange: function onElementChange(propertyName) {
+ if ('lightbox_content_animation' === propertyName) {
+ this.animateVideo();
return;
}
- var negativeChange = propertyName.match( /^shape_divider_(top|bottom)_negative$/ );
+ var isLightBoxEnabled = this.getElementSettings('lightbox');
- if ( negativeChange ) {
- this.buildSVG( negativeChange[1] );
+ if ('lightbox' === propertyName && !isLightBoxEnabled) {
+ this.getLightBox().getModal().hide();
- this.setNegative( negativeChange[1] );
+ return;
}
- }
-} );
-module.exports = function( $scope ) {
- if ( elementorFrontend.isEditMode() || $scope.hasClass( 'elementor-section-stretched' ) ) {
- new StretchedSection( { $element: $scope } );
+ if ('aspect_ratio' === propertyName && isLightBoxEnabled) {
+ this.handleAspectRatio();
+ }
}
+});
+
+module.exports = function ($scope) {
+ new VideoModule({ $element: $scope });
+};
+
+/***/ }),
+
+/***/ 177:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var HandlerModule = __webpack_require__(5),
+ ImageCarouselHandler;
+
+ImageCarouselHandler = HandlerModule.extend({
+ getDefaultSettings: function getDefaultSettings() {
+ return {
+ selectors: {
+ carousel: '.elementor-image-carousel'
+ }
+ };
+ },
+
+ getDefaultElements: function getDefaultElements() {
+ var selectors = this.getSettings('selectors');
+
+ return {
+ $carousel: this.$element.find(selectors.carousel)
+ };
+ },
+
+ onInit: function onInit() {
+ HandlerModule.prototype.onInit.apply(this, arguments);
+
+ var elementSettings = this.getElementSettings(),
+ slidesToShow = +elementSettings.slides_to_show || 3,
+ isSingleSlide = 1 === slidesToShow,
+ breakpoints = elementorFrontend.config.breakpoints;
+
+ var slickOptions = {
+ slidesToShow: slidesToShow,
+ autoplay: 'yes' === elementSettings.autoplay,
+ autoplaySpeed: elementSettings.autoplay_speed,
+ infinite: 'yes' === elementSettings.infinite,
+ pauseOnHover: 'yes' === elementSettings.pause_on_hover,
+ speed: elementSettings.speed,
+ arrows: -1 !== ['arrows', 'both'].indexOf(elementSettings.navigation),
+ dots: -1 !== ['dots', 'both'].indexOf(elementSettings.navigation),
+ rtl: 'rtl' === elementSettings.direction,
+ responsive: [{
+ breakpoint: breakpoints.lg,
+ settings: {
+ slidesToShow: +elementSettings.slides_to_show_tablet || (isSingleSlide ? 1 : 2),
+ slidesToScroll: 1
+ }
+ }, {
+ breakpoint: breakpoints.md,
+ settings: {
+ slidesToShow: +elementSettings.slides_to_show_mobile || 1,
+ slidesToScroll: 1
+ }
+ }]
+ };
+
+ if (isSingleSlide) {
+ slickOptions.fade = 'fade' === elementSettings.effect;
+ } else {
+ slickOptions.slidesToScroll = +elementSettings.slides_to_scroll;
+ }
- if ( elementorFrontend.isEditMode() ) {
- new Shapes( { $element: $scope } );
+ this.elements.$carousel.slick(slickOptions);
}
+});
- new BackgroundVideo( { $element: $scope } );
+module.exports = function ($scope) {
+ new ImageCarouselHandler({ $element: $scope });
};
-},{"elementor-frontend/handler-module":3}],12:[function(require,module,exports){
-var TabsModule = require( 'elementor-frontend/handlers/base-tabs' );
+/***/ }),
-module.exports = function( $scope ) {
- new TabsModule( {
- $element: $scope,
- toggleSelf: false
- } );
-};
+/***/ 178:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
-},{"elementor-frontend/handlers/base-tabs":6}],13:[function(require,module,exports){
-var HandlerModule = require( 'elementor-frontend/handler-module' ),
- TextEditor;
-TextEditor = HandlerModule.extend( {
+var HandlerModule = __webpack_require__(5),
+ TextEditor;
+
+TextEditor = HandlerModule.extend({
dropCapLetter: '',
- getDefaultSettings: function() {
+ getDefaultSettings: function getDefaultSettings() {
return {
selectors: {
paragraph: 'p:first'
};
},
- getDefaultElements: function() {
- var selectors = this.getSettings( 'selectors' ),
- classes = this.getSettings( 'classes' ),
- $dropCap = jQuery( '<span>', { 'class': classes.dropCap } ),
- $dropCapLetter = jQuery( '<span>', { 'class': classes.dropCapLetter } );
+ getDefaultElements: function getDefaultElements() {
+ var selectors = this.getSettings('selectors'),
+ classes = this.getSettings('classes'),
+ $dropCap = jQuery('<span>', { 'class': classes.dropCap }),
+ $dropCapLetter = jQuery('<span>', { 'class': classes.dropCapLetter });
- $dropCap.append( $dropCapLetter );
+ $dropCap.append($dropCapLetter);
return {
- $paragraph: this.$element.find( selectors.paragraph ),
+ $paragraph: this.$element.find(selectors.paragraph),
$dropCap: $dropCap,
$dropCapLetter: $dropCapLetter
};
},
- getElementName: function() {
+ getElementName: function getElementName() {
return 'text-editor';
},
- wrapDropCap: function() {
- var isDropCapEnabled = this.getElementSettings( 'drop_cap' );
+ wrapDropCap: function wrapDropCap() {
+ var isDropCapEnabled = this.getElementSettings('drop_cap');
- if ( ! isDropCapEnabled ) {
+ if (!isDropCapEnabled) {
// If there is an old drop cap inside the paragraph
- if ( this.dropCapLetter ) {
+ if (this.dropCapLetter) {
this.elements.$dropCap.remove();
- this.elements.$paragraph.prepend( this.dropCapLetter );
+ this.elements.$paragraph.prepend(this.dropCapLetter);
this.dropCapLetter = '';
}
var $paragraph = this.elements.$paragraph;
- if ( ! $paragraph.length ) {
+ if (!$paragraph.length) {
return;
}
- var paragraphContent = $paragraph.html().replace( / /g, ' ' ),
- firstLetterMatch = paragraphContent.match( /^ *([^ ] ?)/ );
+ var paragraphContent = $paragraph.html().replace(/ /g, ' '),
+ firstLetterMatch = paragraphContent.match(/^ *([^ ] ?)/);
- if ( ! firstLetterMatch ) {
+ if (!firstLetterMatch) {
return;
}
var firstLetter = firstLetterMatch[1],
- trimmedFirstLetter = firstLetter.trim();
+ trimmedFirstLetter = firstLetter.trim();
// Don't apply drop cap when the content starting with an HTML tag
- if ( '<' === trimmedFirstLetter ) {
+ if ('<' === trimmedFirstLetter) {
return;
}
- this.dropCapLetter = firstLetter;
-
- this.elements.$dropCapLetter.text( trimmedFirstLetter );
-
- var restoredParagraphContent = paragraphContent.slice( firstLetter.length ).replace( /^ */, function( match ) {
- return new Array( match.length + 1 ).join( ' ' );
- });
-
- $paragraph.html( restoredParagraphContent ).prepend( this.elements.$dropCap );
- },
-
- onInit: function() {
- HandlerModule.prototype.onInit.apply( this, arguments );
-
- this.wrapDropCap();
- },
-
- onElementChange: function( propertyName ) {
- if ( 'drop_cap' === propertyName ) {
- this.wrapDropCap();
- }
- }
-} );
-
-module.exports = function( $scope ) {
- new TextEditor( { $element: $scope } );
-};
-
-},{"elementor-frontend/handler-module":3}],14:[function(require,module,exports){
-var TabsModule = require( 'elementor-frontend/handlers/base-tabs' );
-
-module.exports = function( $scope ) {
- new TabsModule( {
- $element: $scope,
- showTabFn: 'slideDown',
- hideTabFn: 'slideUp',
- hidePrevious: false,
- autoExpand: 'editor'
- } );
-};
-
-},{"elementor-frontend/handlers/base-tabs":6}],15:[function(require,module,exports){
-var HandlerModule = require( 'elementor-frontend/handler-module' ),
- VideoModule;
-
-VideoModule = HandlerModule.extend( {
- getDefaultSettings: function() {
- return {
- selectors: {
- imageOverlay: '.elementor-custom-embed-image-overlay',
- videoWrapper: '.elementor-wrapper',
- videoFrame: 'iframe'
- }
- };
- },
-
- getDefaultElements: function() {
- var selectors = this.getSettings( 'selectors' );
+ this.dropCapLetter = firstLetter;
- var elements = {
- $imageOverlay: this.$element.find( selectors.imageOverlay ),
- $videoWrapper: this.$element.find( selectors.videoWrapper )
- };
+ this.elements.$dropCapLetter.text(trimmedFirstLetter);
- elements.$videoFrame = elements.$videoWrapper.find( selectors.videoFrame );
+ var restoredParagraphContent = paragraphContent.slice(firstLetter.length).replace(/^ */, function (match) {
+ return new Array(match.length + 1).join(' ');
+ });
- return elements;
+ $paragraph.html(restoredParagraphContent).prepend(this.elements.$dropCap);
},
- getLightBox: function() {
- return elementorFrontend.utils.lightbox;
- },
+ onInit: function onInit() {
+ HandlerModule.prototype.onInit.apply(this, arguments);
- handleVideo: function() {
- if ( ! this.getElementSettings( 'lightbox' ) ) {
- this.elements.$imageOverlay.remove();
+ this.wrapDropCap();
+ },
- this.playVideo();
+ onElementChange: function onElementChange(propertyName) {
+ if ('drop_cap' === propertyName) {
+ this.wrapDropCap();
}
- },
+ }
+});
- playVideo: function() {
- var $videoFrame = this.elements.$videoFrame,
- newSourceUrl = $videoFrame[0].src.replace( '&autoplay=0', '' );
+module.exports = function ($scope) {
+ new TextEditor({ $element: $scope });
+};
- $videoFrame[0].src = newSourceUrl + '&autoplay=1';
- },
+/***/ }),
- animateVideo: function() {
- this.getLightBox().setEntranceAnimation( this.getElementSettings( 'lightbox_content_animation' ) );
- },
+/***/ 179:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
- handleAspectRatio: function() {
- this.getLightBox().setVideoAspectRatio( this.getElementSettings( 'aspect_ratio' ) );
- },
- bindEvents: function() {
- this.elements.$imageOverlay.on( 'click', this.handleVideo );
+var HandlerModule = __webpack_require__(5),
+ GlobalHandler;
+
+GlobalHandler = HandlerModule.extend({
+ getElementName: function getElementName() {
+ return 'global';
},
+ animate: function animate() {
+ var $element = this.$element,
+ animation = this.getAnimation(),
+ elementSettings = this.getElementSettings(),
+ animationDelay = elementSettings._animation_delay || elementSettings.animation_delay || 0;
- onElementChange: function( propertyName ) {
- if ( 'lightbox_content_animation' === propertyName ) {
- this.animateVideo();
+ $element.removeClass(animation);
- return;
- }
+ setTimeout(function () {
+ $element.removeClass('elementor-invisible').addClass(animation);
+ }, animationDelay);
+ },
+ getAnimation: function getAnimation() {
+ var elementSettings = this.getElementSettings();
- var isLightBoxEnabled = this.getElementSettings( 'lightbox' );
+ return elementSettings.animation || elementSettings._animation;
+ },
+ onInit: function onInit() {
+ HandlerModule.prototype.onInit.apply(this, arguments);
- if ( 'lightbox' === propertyName && ! isLightBoxEnabled ) {
- this.getLightBox().getModal().hide();
+ var animation = this.getAnimation();
+ if (!animation) {
return;
}
- if ( 'aspect_ratio' === propertyName && isLightBoxEnabled ) {
- this.handleAspectRatio();
+ this.$element.removeClass(animation);
+
+ elementorFrontend.waypoint(this.$element, this.animate.bind(this));
+ },
+ onElementChange: function onElementChange(propertyName) {
+ if (/^_?animation/.test(propertyName)) {
+ this.animate();
}
}
-} );
+});
-module.exports = function( $scope ) {
- new VideoModule( { $element: $scope } );
+module.exports = function ($scope) {
+ new GlobalHandler({ $element: $scope });
};
-},{"elementor-frontend/handler-module":3}],16:[function(require,module,exports){
-module.exports = function( $scope, $ ) {
- if ( ! elementorFrontend.isEditMode() ) {
- return;
- }
+/***/ }),
- if ( $scope.hasClass( 'elementor-widget-edit-disabled' ) ) {
- return;
- }
+/***/ 180:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
- $scope.find( '.elementor-element' ).each( function() {
- elementorFrontend.elementsHandler.runReadyTrigger( $( this ) );
- } );
-};
-},{}],17:[function(require,module,exports){
-var ViewModule = require( '../../utils/view-module' );
+var ViewModule = __webpack_require__(1);
-module.exports = ViewModule.extend( {
- getDefaultSettings: function() {
+module.exports = ViewModule.extend({
+ getDefaultSettings: function getDefaultSettings() {
return {
- element: null,
- direction: elementorFrontend.config.is_rtl ? 'right' : 'left',
+ isInserted: false,
+ APISrc: 'https://www.youtube.com/iframe_api',
selectors: {
- container: window
+ firstScript: 'script:first'
}
};
},
- getDefaultElements: function() {
+ getDefaultElements: function getDefaultElements() {
return {
- $element: jQuery( this.getSettings( 'element' ) )
+ $firstScript: jQuery(this.getSettings('selectors.firstScript'))
};
},
- stretch: function() {
- var containerSelector = this.getSettings( 'selectors.container' ),
- $container;
-
- try {
- $container = jQuery( containerSelector );
- } catch ( e ) {}
-
- if ( ! $container || ! $container.length ) {
- $container = jQuery( this.getDefaultSettings().selectors.container );
- }
-
- var $element = this.elements.$element,
- isSpecialContainer = window !== $container[0];
-
- this.reset();
+ insertYTAPI: function insertYTAPI() {
+ this.setSettings('isInserted', true);
- var containerWidth = $container.outerWidth(),
- elementWidth = $element.outerWidth(),
- elementOffset = $element.offset().left,
- correctOffset = elementOffset;
+ this.elements.$firstScript.before(jQuery('<script>', { src: this.getSettings('APISrc') }));
+ },
- if ( isSpecialContainer ) {
- var containerOffset = $container.offset().left;
+ onYoutubeApiReady: function onYoutubeApiReady(callback) {
+ var self = this;
- if ( elementOffset > containerOffset ) {
- correctOffset = elementOffset - containerOffset;
- } else {
- correctOffset = 0;
- }
+ if (!self.getSettings('IsInserted')) {
+ self.insertYTAPI();
}
- if ( elementorFrontend.config.is_rtl ) {
- correctOffset = containerWidth - ( elementWidth + correctOffset );
+ if (window.YT && YT.loaded) {
+ callback(YT);
+ } else {
+ // If not ready check again by timeout..
+ setTimeout(function () {
+ self.onYoutubeApiReady(callback);
+ }, 350);
}
-
- var css = {};
-
- css.width = containerWidth + 'px';
-
- css[ this.getSettings( 'direction' ) ] = -correctOffset + 'px';
-
- $element.css( css );
},
- reset: function() {
- var css = {};
+ getYoutubeIDFromURL: function getYoutubeIDFromURL(url) {
+ var videoIDParts = url.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^?&"'>]+)/);
- css.width = '';
+ return videoIDParts && videoIDParts[1];
+ }
+});
- css[ this.getSettings( 'direction' ) ] = '';
+/***/ }),
- this.elements.$element.css( css );
- }
-} );
+/***/ 181:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
-},{"../../utils/view-module":25}],18:[function(require,module,exports){
-var ViewModule = require( '../../utils/view-module' );
-module.exports = ViewModule.extend( {
- getDefaultSettings: function() {
+var ViewModule = __webpack_require__(1);
+module.exports = ViewModule.extend({
+ getDefaultSettings: function getDefaultSettings() {
return {
scrollDuration: 500,
selectors: {
};
},
- getDefaultElements: function() {
+ getDefaultElements: function getDefaultElements() {
var $ = jQuery,
- selectors = this.getSettings( 'selectors' );
+ selectors = this.getSettings('selectors');
return {
- $scrollable: $( selectors.scrollable )
+ $scrollable: $(selectors.scrollable)
};
},
- bindEvents: function() {
- elementorFrontend.getElements( '$document' ).on( 'click', this.getSettings( 'selectors.links' ), this.handleAnchorLinks );
+ bindEvents: function bindEvents() {
+ elementorFrontend.getElements('$document').on('click', this.getSettings('selectors.links'), this.handleAnchorLinks);
},
- handleAnchorLinks: function( event ) {
+ handleAnchorLinks: function handleAnchorLinks(event) {
var clickedLink = event.currentTarget,
- isSamePathname = ( location.pathname === clickedLink.pathname ),
- isSameHostname = ( location.hostname === clickedLink.hostname );
+ isSamePathname = location.pathname === clickedLink.pathname,
+ isSameHostname = location.hostname === clickedLink.hostname;
- if ( ! isSameHostname || ! isSamePathname || clickedLink.hash.length < 2 ) {
+ if (!isSameHostname || !isSamePathname || clickedLink.hash.length < 2) {
return;
}
- var $anchor = jQuery( clickedLink.hash ).filter( this.getSettings( 'selectors.targets' ) );
+ var $anchor = jQuery(clickedLink.hash).filter(this.getSettings('selectors.targets'));
- if ( ! $anchor.length ) {
+ if (!$anchor.length) {
return;
}
var scrollTop = $anchor.offset().top,
- $wpAdminBar = elementorFrontend.getElements( '$wpAdminBar' ),
- $activeStickys = jQuery( '.elementor-sticky--active' ),
- maxStickyHeight = 0;
+ $wpAdminBar = elementorFrontend.getElements('$wpAdminBar'),
+ $activeStickies = jQuery('.elementor-sticky--active'),
+ maxStickyHeight = 0;
- if ( $wpAdminBar.length > 0 ) {
+ if ($wpAdminBar.length > 0) {
scrollTop -= $wpAdminBar.height();
}
// Offset height of tallest sticky
- if ( $activeStickys.length > 0 ) {
- maxStickyHeight = Math.max.apply( null, $activeStickys.map( function() {
- return jQuery( this ).height();
- } ).get() );
+ if ($activeStickies.length > 0) {
+ maxStickyHeight = Math.max.apply(null, $activeStickies.map(function () {
+ return jQuery(this).outerHeight();
+ }).get());
scrollTop -= maxStickyHeight;
}
event.preventDefault();
- scrollTop = elementorFrontend.hooks.applyFilters( 'frontend/handlers/menu_anchor/scroll_top_distance', scrollTop );
+ scrollTop = elementorFrontend.hooks.applyFilters('frontend/handlers/menu_anchor/scroll_top_distance', scrollTop);
- this.elements.$scrollable.animate( {
+ this.elements.$scrollable.animate({
scrollTop: scrollTop
- }, this.getSettings( 'scrollDuration' ), 'linear' );
+ }, this.getSettings('scrollDuration'), 'linear');
},
- onInit: function() {
- ViewModule.prototype.onInit.apply( this, arguments );
+ onInit: function onInit() {
+ ViewModule.prototype.onInit.apply(this, arguments);
this.bindEvents();
}
-} );
+});
-},{"../../utils/view-module":25}],19:[function(require,module,exports){
-var ViewModule = require( '../../utils/view-module' ),
- LightboxModule;
+/***/ }),
-LightboxModule = ViewModule.extend( {
+/***/ 182:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var ViewModule = __webpack_require__(1),
+ LightboxModule;
+
+LightboxModule = ViewModule.extend({
oldAspectRatio: null,
oldAnimation: null,
swiper: null,
- getDefaultSettings: function() {
+ getDefaultSettings: function getDefaultSettings() {
return {
classes: {
aspectRatio: 'elementor-aspect-ratio-%s',
};
},
- getModal: function() {
- if ( ! LightboxModule.modal ) {
+ getModal: function getModal() {
+ if (!LightboxModule.modal) {
this.initModal();
}
return LightboxModule.modal;
},
- initModal: function() {
- var modal = LightboxModule.modal = elementorFrontend.getDialogsManager().createWidget( 'lightbox', {
+ initModal: function initModal() {
+ var modal = LightboxModule.modal = elementorFrontend.getDialogsManager().createWidget('lightbox', {
className: 'elementor-lightbox',
closeButton: true,
closeButtonClass: 'eicon-close',
selectors: {
- preventClose: '.' + this.getSettings( 'classes.preventClose' )
+ preventClose: '.' + this.getSettings('classes.preventClose')
},
hide: {
onClick: true
}
- } );
+ });
- modal.on( 'hide', function() {
- modal.setMessage( '' );
- } );
+ modal.on('hide', function () {
+ modal.setMessage('');
+ });
},
- showModal: function( options ) {
+ showModal: function showModal(options) {
var self = this,
- defaultOptions = self.getDefaultSettings().modalOptions;
+ defaultOptions = self.getDefaultSettings().modalOptions;
- self.setSettings( 'modalOptions', jQuery.extend( defaultOptions, options.modalOptions ) );
+ self.setSettings('modalOptions', jQuery.extend(defaultOptions, options.modalOptions));
var modal = self.getModal();
- modal.setID( self.getSettings( 'modalOptions.id' ) );
+ modal.setID(self.getSettings('modalOptions.id'));
- modal.onShow = function() {
- DialogsManager.getWidgetType( 'lightbox' ).prototype.onShow.apply( modal, arguments );
+ modal.onShow = function () {
+ DialogsManager.getWidgetType('lightbox').prototype.onShow.apply(modal, arguments);
- setTimeout( function() {
+ setTimeout(function () {
self.setEntranceAnimation();
- }, 10 );
+ }, 10);
};
- modal.onHide = function() {
- DialogsManager.getWidgetType( 'lightbox' ).prototype.onHide.apply( modal, arguments );
+ modal.onHide = function () {
+ DialogsManager.getWidgetType('lightbox').prototype.onHide.apply(modal, arguments);
- modal.getElements( 'widgetContent' ).removeClass( 'animated' );
+ modal.getElements('widgetContent').removeClass('animated');
};
- switch ( options.type ) {
+ switch (options.type) {
case 'image':
- self.setImageContent( options.url );
+ self.setImageContent(options.url);
break;
case 'video':
- self.setVideoContent( options.url );
+ self.setVideoContent(options);
break;
case 'slideshow':
- self.setSlideshowContent( options.slideshow );
+ self.setSlideshowContent(options.slideshow);
break;
default:
- self.setHTMLContent( options.html );
+ self.setHTMLContent(options.html);
}
modal.show();
},
- setHTMLContent: function( html ) {
- this.getModal().setMessage( html );
+ setHTMLContent: function setHTMLContent(html) {
+ this.getModal().setMessage(html);
},
- setImageContent: function( imageURL ) {
+ setImageContent: function setImageContent(imageURL) {
var self = this,
- classes = self.getSettings( 'classes' ),
- $item = jQuery( '<div>', { 'class': classes.item } ),
- $image = jQuery( '<img>', { src: imageURL, 'class': classes.image + ' ' + classes.preventClose } );
+ classes = self.getSettings('classes'),
+ $item = jQuery('<div>', { 'class': classes.item }),
+ $image = jQuery('<img>', { src: imageURL, 'class': classes.image + ' ' + classes.preventClose });
- $item.append( $image );
+ $item.append($image);
- self.getModal().setMessage( $item );
+ self.getModal().setMessage($item);
},
- setVideoContent: function( videoEmbedURL ) {
- videoEmbedURL = videoEmbedURL.replace( '&autoplay=0', '' ) + '&autoplay=1';
+ setVideoContent: function setVideoContent(options) {
+ var classes = this.getSettings('classes'),
+ $videoContainer = jQuery('<div>', { 'class': classes.videoContainer }),
+ $videoWrapper = jQuery('<div>', { 'class': classes.videoWrapper }),
+ $videoElement,
+ modal = this.getModal();
+
+ if ('hosted' === options.videoType) {
+ var videoParams = { src: options.url, autoplay: '' };
+
+ options.videoParams.forEach(function (param) {
+ videoParams[param] = '';
+ });
- var classes = this.getSettings( 'classes' ),
- $videoContainer = jQuery( '<div>', { 'class': classes.videoContainer } ),
- $videoWrapper = jQuery( '<div>', { 'class': classes.videoWrapper } ),
- $videoFrame = jQuery( '<iframe>', { src: videoEmbedURL, allowfullscreen: 1 } ),
- modal = this.getModal();
+ $videoElement = jQuery('<video>', videoParams);
+ } else {
+ var videoURL = options.url.replace('&autoplay=0', '') + '&autoplay=1';
+
+ $videoElement = jQuery('<iframe>', { src: videoURL, allowfullscreen: 1 });
+ }
- $videoContainer.append( $videoWrapper );
+ $videoContainer.append($videoWrapper);
- $videoWrapper.append( $videoFrame );
+ $videoWrapper.append($videoElement);
- modal.setMessage( $videoContainer );
+ modal.setMessage($videoContainer);
this.setVideoAspectRatio();
var onHideMethod = modal.onHide;
- modal.onHide = function() {
+ modal.onHide = function () {
onHideMethod();
- modal.getElements( 'message' ).removeClass( 'elementor-fit-aspect-ratio' );
+ modal.getElements('message').removeClass('elementor-fit-aspect-ratio');
};
},
- setSlideshowContent: function( options ) {
+ setSlideshowContent: function setSlideshowContent(options) {
var $ = jQuery,
- self = this,
- classes = self.getSettings( 'classes' ),
- slideshowClasses = classes.slideshow,
- $container = $( '<div>', { 'class': slideshowClasses.container } ),
- $slidesWrapper = $( '<div>', { 'class': slideshowClasses.slidesWrapper } ),
- $prevButton = $( '<div>', { 'class': slideshowClasses.prevButton + ' ' + classes.preventClose } ).html( $( '<i>', { 'class': slideshowClasses.prevButtonIcon } ) ),
- $nextButton = $( '<div>', { 'class': slideshowClasses.nextButton + ' ' + classes.preventClose } ).html( $( '<i>', { 'class': slideshowClasses.nextButtonIcon } ) );
-
- options.slides.forEach( function( slide ) {
- var slideClass = slideshowClasses.slide + ' ' + classes.item;
-
- if ( slide.video ) {
+ self = this,
+ classes = self.getSettings('classes'),
+ slideshowClasses = classes.slideshow,
+ $container = $('<div>', { 'class': slideshowClasses.container }),
+ $slidesWrapper = $('<div>', { 'class': slideshowClasses.slidesWrapper }),
+ $prevButton = $('<div>', { 'class': slideshowClasses.prevButton + ' ' + classes.preventClose }).html($('<i>', { 'class': slideshowClasses.prevButtonIcon })),
+ $nextButton = $('<div>', { 'class': slideshowClasses.nextButton + ' ' + classes.preventClose }).html($('<i>', { 'class': slideshowClasses.nextButtonIcon }));
+
+ options.slides.forEach(function (slide) {
+ var slideClass = slideshowClasses.slide + ' ' + classes.item;
+
+ if (slide.video) {
slideClass += ' ' + classes.video;
}
- var $slide = $( '<div>', { 'class': slideClass } );
+ var $slide = $('<div>', { 'class': slideClass });
- if ( slide.video ) {
- $slide.attr( 'data-elementor-slideshow-video', slide.video );
+ if (slide.video) {
+ $slide.attr('data-elementor-slideshow-video', slide.video);
- var $playIcon = $( '<div>', { 'class': classes.playButton } ).html( $( '<i>', { 'class': classes.playButtonIcon } ) );
+ var $playIcon = $('<div>', { 'class': classes.playButton }).html($('<i>', { 'class': classes.playButtonIcon }));
- $slide.append( $playIcon );
+ $slide.append($playIcon);
} else {
- var $zoomContainer = $( '<div>', { 'class': 'swiper-zoom-container' } ),
- $slideImage = $( '<img>', { 'class': classes.image + ' ' + classes.preventClose } ).attr( 'src', slide.image );
+ var $zoomContainer = $('<div>', { 'class': 'swiper-zoom-container' }),
+ $slideImage = $('<img>', { 'class': classes.image + ' ' + classes.preventClose, src: slide.image });
- $zoomContainer.append( $slideImage );
+ $zoomContainer.append($slideImage);
- $slide.append( $zoomContainer );
+ $slide.append($zoomContainer);
}
- $slidesWrapper.append( $slide );
- } );
+ $slidesWrapper.append($slide);
+ });
- $container.append(
- $slidesWrapper,
- $prevButton,
- $nextButton
- );
+ $container.append($slidesWrapper, $prevButton, $nextButton);
var modal = self.getModal();
- modal.setMessage( $container );
+ modal.setMessage($container);
var onShowMethod = modal.onShow;
- modal.onShow = function() {
+ modal.onShow = function () {
onShowMethod();
var swiperOptions = {
- prevButton: $prevButton,
- nextButton: $nextButton,
- paginationClickable: true,
+ navigation: {
+ prevEl: $prevButton,
+ nextEl: $nextButton
+ },
+ pagination: {
+ clickable: true
+ },
+ on: {
+ slideChangeTransitionEnd: self.onSlideChange
+ },
grabCursor: true,
- onSlideChangeEnd: self.onSlideChange,
runCallbacksOnInit: false,
loop: true,
- keyboardControl: true
+ keyboard: true
};
- if ( options.swiper ) {
- $.extend( swiperOptions, options.swiper );
+ if (options.swiper) {
+ $.extend(swiperOptions, options.swiper);
}
- self.swiper = new Swiper( $container, swiperOptions );
+ self.swiper = new Swiper($container, swiperOptions);
self.setVideoAspectRatio();
};
},
- setVideoAspectRatio: function( aspectRatio ) {
- aspectRatio = aspectRatio || this.getSettings( 'modalOptions.videoAspectRatio' );
+ setVideoAspectRatio: function setVideoAspectRatio(aspectRatio) {
+ aspectRatio = aspectRatio || this.getSettings('modalOptions.videoAspectRatio');
- var $widgetContent = this.getModal().getElements( 'widgetContent' ),
- oldAspectRatio = this.oldAspectRatio,
- aspectRatioClass = this.getSettings( 'classes.aspectRatio' );
+ var $widgetContent = this.getModal().getElements('widgetContent'),
+ oldAspectRatio = this.oldAspectRatio,
+ aspectRatioClass = this.getSettings('classes.aspectRatio');
this.oldAspectRatio = aspectRatio;
- if ( oldAspectRatio ) {
- $widgetContent.removeClass( aspectRatioClass.replace( '%s', oldAspectRatio ) );
+ if (oldAspectRatio) {
+ $widgetContent.removeClass(aspectRatioClass.replace('%s', oldAspectRatio));
}
- if ( aspectRatio ) {
- $widgetContent.addClass( aspectRatioClass.replace( '%s', aspectRatio ) );
+ if (aspectRatio) {
+ $widgetContent.addClass(aspectRatioClass.replace('%s', aspectRatio));
}
},
- getSlide: function( slideState ) {
- return this.swiper.slides.filter( this.getSettings( 'selectors.slideshow.' + slideState + 'Slide' ) );
+ getSlide: function getSlide(slideState) {
+ return jQuery(this.swiper.slides).filter(this.getSettings('selectors.slideshow.' + slideState + 'Slide'));
},
- playSlideVideo: function() {
- var $activeSlide = this.getSlide( 'active' ),
- videoURL = $activeSlide.data( 'elementor-slideshow-video' );
+ playSlideVideo: function playSlideVideo() {
+ var $activeSlide = this.getSlide('active'),
+ videoURL = $activeSlide.data('elementor-slideshow-video');
- if ( ! videoURL ) {
+ if (!videoURL) {
return;
}
- var classes = this.getSettings( 'classes' );
-
- var $videoContainer = jQuery( '<div>', { 'class': classes.videoContainer + ' ' + classes.invisible } ),
- $videoWrapper = jQuery( '<div>', { 'class': classes.videoWrapper } ),
- $videoFrame = jQuery( '<iframe>', { src: videoURL } ),
- $playIcon = $activeSlide.children( '.' + classes.playButton );
+ var classes = this.getSettings('classes'),
+ $videoContainer = jQuery('<div>', { 'class': classes.videoContainer + ' ' + classes.invisible }),
+ $videoWrapper = jQuery('<div>', { 'class': classes.videoWrapper }),
+ $videoFrame = jQuery('<iframe>', { src: videoURL }),
+ $playIcon = $activeSlide.children('.' + classes.playButton);
- $videoContainer.append( $videoWrapper );
+ $videoContainer.append($videoWrapper);
- $videoWrapper.append( $videoFrame );
+ $videoWrapper.append($videoFrame);
- $activeSlide.append( $videoContainer );
+ $activeSlide.append($videoContainer);
- $playIcon.addClass( classes.playing ).removeClass( classes.hidden );
+ $playIcon.addClass(classes.playing).removeClass(classes.hidden);
- $videoFrame.on( 'load', function() {
- $playIcon.addClass( classes.hidden );
+ $videoFrame.on('load', function () {
+ $playIcon.addClass(classes.hidden);
- $videoContainer.removeClass( classes.invisible );
- } );
+ $videoContainer.removeClass(classes.invisible);
+ });
},
- setEntranceAnimation: function( animation ) {
- animation = animation || this.getSettings( 'modalOptions.entranceAnimation' );
+ setEntranceAnimation: function setEntranceAnimation(animation) {
+ animation = animation || this.getSettings('modalOptions.entranceAnimation');
- var $widgetMessage = this.getModal().getElements( 'message' );
+ var $widgetMessage = this.getModal().getElements('message');
- if ( this.oldAnimation ) {
- $widgetMessage.removeClass( this.oldAnimation );
+ if (this.oldAnimation) {
+ $widgetMessage.removeClass(this.oldAnimation);
}
this.oldAnimation = animation;
- if ( animation ) {
- $widgetMessage.addClass( 'animated ' + animation );
+ if (animation) {
+ $widgetMessage.addClass('animated ' + animation);
}
},
- isLightboxLink: function( element ) {
- if ( 'A' === element.tagName && ! /\.(png|jpe?g|gif|svg)$/i.test( element.href ) ) {
+ isLightboxLink: function isLightboxLink(element) {
+ if ('A' === element.tagName && !/\.(png|jpe?g|gif|svg)$/i.test(element.href)) {
return false;
}
- var generalOpenInLightbox = elementorFrontend.getGeneralSettings( 'elementor_global_image_lightbox' ),
- currentLinkOpenInLightbox = element.dataset.elementorOpenLightbox;
+ var generalOpenInLightbox = elementorFrontend.getGeneralSettings('elementor_global_image_lightbox'),
+ currentLinkOpenInLightbox = element.dataset.elementorOpenLightbox;
return 'yes' === currentLinkOpenInLightbox || generalOpenInLightbox && 'no' !== currentLinkOpenInLightbox;
},
- openLink: function( event ) {
+ openLink: function openLink(event) {
var element = event.currentTarget,
- $target = jQuery( event.target ),
- editMode = elementorFrontend.isEditMode(),
- isClickInsideElementor = !! $target.closest( '#elementor' ).length;
+ $target = jQuery(event.target),
+ editMode = elementorFrontend.isEditMode(),
+ isClickInsideElementor = !!$target.closest('#elementor').length;
- if ( ! this.isLightboxLink( element ) ) {
+ if (!this.isLightboxLink(element)) {
- if ( editMode && isClickInsideElementor ) {
+ if (editMode && isClickInsideElementor) {
event.preventDefault();
}
event.preventDefault();
- if ( elementorFrontend.isEditMode() && ! elementorFrontend.getGeneralSettings( 'elementor_enable_lightbox_in_editor' ) ) {
+ if (editMode && !elementorFrontend.getGeneralSettings('elementor_enable_lightbox_in_editor')) {
return;
}
var lightboxData = {};
- if ( element.dataset.elementorLightbox ) {
- lightboxData = JSON.parse( element.dataset.elementorLightbox );
+ if (element.dataset.elementorLightbox) {
+ lightboxData = JSON.parse(element.dataset.elementorLightbox);
}
- if ( lightboxData.type && 'slideshow' !== lightboxData.type ) {
- this.showModal( lightboxData );
+ if (lightboxData.type && 'slideshow' !== lightboxData.type) {
+ this.showModal(lightboxData);
return;
}
- if ( ! element.dataset.elementorLightboxSlideshow ) {
- this.showModal( {
+ if (!element.dataset.elementorLightboxSlideshow) {
+ this.showModal({
type: 'image',
url: element.href
- } );
+ });
return;
}
var slideshowID = element.dataset.elementorLightboxSlideshow;
- var $allSlideshowLinks = jQuery( this.getSettings( 'selectors.links' ) ).filter( function() {
+ var $allSlideshowLinks = jQuery(this.getSettings('selectors.links')).filter(function () {
return slideshowID === this.dataset.elementorLightboxSlideshow;
- } );
+ });
var slides = [],
- uniqueLinks = {};
+ uniqueLinks = {};
- $allSlideshowLinks.each( function() {
- if ( uniqueLinks[ this.href ] ) {
+ $allSlideshowLinks.each(function () {
+ var slideVideo = this.dataset.elementorLightboxVideo,
+ uniqueID = slideVideo || this.href;
+
+ if (uniqueLinks[uniqueID]) {
return;
}
- uniqueLinks[ this.href ] = true;
+ uniqueLinks[uniqueID] = true;
var slideIndex = this.dataset.elementorLightboxIndex;
- if ( undefined === slideIndex ) {
- slideIndex = $allSlideshowLinks.index( this );
+ if (undefined === slideIndex) {
+ slideIndex = $allSlideshowLinks.index(this);
}
var slideData = {
index: slideIndex
};
- if ( this.dataset.elementorLightboxVideo ) {
- slideData.video = this.dataset.elementorLightboxVideo;
+ if (slideVideo) {
+ slideData.video = slideVideo;
}
- slides.push( slideData );
- } );
+ slides.push(slideData);
+ });
- slides.sort( function( a, b ) {
+ slides.sort(function (a, b) {
return a.index - b.index;
- } );
+ });
var initialSlide = element.dataset.elementorLightboxIndex;
- if ( undefined === initialSlide ) {
- initialSlide = $allSlideshowLinks.index( element );
+ if (undefined === initialSlide) {
+ initialSlide = $allSlideshowLinks.index(element);
}
- this.showModal( {
+ this.showModal({
type: 'slideshow',
modalOptions: {
id: 'elementor-lightbox-slideshow-' + slideshowID
initialSlide: +initialSlide
}
}
- } );
+ });
+ },
+
+ bindEvents: function bindEvents() {
+ elementorFrontend.getElements('$document').on('click', this.getSettings('selectors.links'), this.openLink);
+ },
+
+ onInit: function onInit() {
+ ViewModule.prototype.onInit.apply(this, arguments);
+
+ if (elementorFrontend.isEditMode()) {
+ elementor.settings.general.model.on('change', this.onGeneralSettingsChange);
+ }
+ },
+
+ onGeneralSettingsChange: function onGeneralSettingsChange(model) {
+ if ('elementor_lightbox_content_animation' in model.changed) {
+ this.setSettings('modalOptions.entranceAnimation', model.changed.elementor_lightbox_content_animation);
+
+ this.setEntranceAnimation();
+ }
+ },
+
+ onSlideChange: function onSlideChange() {
+ this.getSlide('prev').add(this.getSlide('next')).add(this.getSlide('active')).find('.' + this.getSettings('classes.videoWrapper')).remove();
+
+ this.playSlideVideo();
+ }
+});
+
+module.exports = LightboxModule;
+
+/***/ }),
+
+/***/ 183:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var ViewModule = __webpack_require__(1);
+
+module.exports = ViewModule.extend({
+ getDefaultSettings: function getDefaultSettings() {
+ return {
+ element: null,
+ direction: elementorFrontend.config.is_rtl ? 'right' : 'left',
+ selectors: {
+ container: window
+ }
+ };
+ },
+
+ getDefaultElements: function getDefaultElements() {
+ return {
+ $element: jQuery(this.getSettings('element'))
+ };
+ },
+
+ stretch: function stretch() {
+ var containerSelector = this.getSettings('selectors.container'),
+ $container;
+
+ try {
+ $container = jQuery(containerSelector);
+ } catch (e) {}
+
+ if (!$container || !$container.length) {
+ $container = jQuery(this.getDefaultSettings().selectors.container);
+ }
+
+ this.reset();
+
+ var $element = this.elements.$element,
+ containerWidth = $container.outerWidth(),
+ elementOffset = $element.offset().left,
+ isFixed = 'fixed' === $element.css('position'),
+ correctOffset = isFixed ? 0 : elementOffset;
+
+ if (window !== $container[0]) {
+ var containerOffset = $container.offset().left;
+
+ if (isFixed) {
+ correctOffset = containerOffset;
+ } else {
+ if (elementOffset > containerOffset) {
+ correctOffset = elementOffset - containerOffset;
+ }
+ }
+ }
+
+ if (!isFixed) {
+ if (elementorFrontend.config.is_rtl) {
+ correctOffset = containerWidth - ($element.outerWidth() + correctOffset);
+ }
+
+ correctOffset = -correctOffset;
+ }
+
+ var css = {};
+
+ css.width = containerWidth + 'px';
+
+ css[this.getSettings('direction')] = correctOffset + 'px';
+
+ $element.css(css);
},
- bindEvents: function() {
- elementorFrontend.getElements( '$document' ).on( 'click', this.getSettings( 'selectors.links' ), this.openLink );
- },
+ reset: function reset() {
+ var css = {};
+
+ css.width = '';
+
+ css[this.getSettings('direction')] = '';
+
+ this.elements.$element.css(css);
+ }
+});
+
+/***/ }),
+
+/***/ 2:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var Module = function Module() {
+ var $ = jQuery,
+ instanceParams = arguments,
+ self = this,
+ settings,
+ events = {};
+
+ var ensureClosureMethods = function ensureClosureMethods() {
+ $.each(self, function (methodName) {
+ var oldMethod = self[methodName];
+
+ if ('function' !== typeof oldMethod) {
+ return;
+ }
+
+ self[methodName] = function () {
+ return oldMethod.apply(self, arguments);
+ };
+ });
+ };
+
+ var initSettings = function initSettings() {
+ settings = self.getDefaultSettings();
+
+ var instanceSettings = instanceParams[0];
+
+ if (instanceSettings) {
+ $.extend(settings, instanceSettings);
+ }
+ };
+
+ var init = function init() {
+ self.__construct.apply(self, instanceParams);
+
+ ensureClosureMethods();
+
+ initSettings();
+
+ self.trigger('init');
+ };
+
+ this.getItems = function (items, itemKey) {
+ if (itemKey) {
+ var keyStack = itemKey.split('.'),
+ currentKey = keyStack.splice(0, 1);
+
+ if (!keyStack.length) {
+ return items[currentKey];
+ }
+
+ if (!items[currentKey]) {
+ return;
+ }
+
+ return this.getItems(items[currentKey], keyStack.join('.'));
+ }
+
+ return items;
+ };
+
+ this.getSettings = function (setting) {
+ return this.getItems(settings, setting);
+ };
+
+ this.setSettings = function (settingKey, value, settingsContainer) {
+ if (!settingsContainer) {
+ settingsContainer = settings;
+ }
+
+ if ('object' === (typeof settingKey === 'undefined' ? 'undefined' : _typeof(settingKey))) {
+ $.extend(settingsContainer, settingKey);
+
+ return self;
+ }
+
+ var keyStack = settingKey.split('.'),
+ currentKey = keyStack.splice(0, 1);
+
+ if (!keyStack.length) {
+ settingsContainer[currentKey] = value;
+
+ return self;
+ }
+
+ if (!settingsContainer[currentKey]) {
+ settingsContainer[currentKey] = {};
+ }
+
+ return self.setSettings(keyStack.join('.'), value, settingsContainer[currentKey]);
+ };
+
+ this.forceMethodImplementation = function (methodArguments) {
+ var functionName = methodArguments.callee.name;
+
+ throw new ReferenceError('The method ' + functionName + ' must to be implemented in the inheritor child.');
+ };
+
+ this.on = function (eventName, callback) {
+ if ('object' === (typeof eventName === 'undefined' ? 'undefined' : _typeof(eventName))) {
+ $.each(eventName, function (singleEventName) {
+ self.on(singleEventName, this);
+ });
+
+ return self;
+ }
+
+ var eventNames = eventName.split(' ');
+
+ eventNames.forEach(function (singleEventName) {
+ if (!events[singleEventName]) {
+ events[singleEventName] = [];
+ }
+
+ events[singleEventName].push(callback);
+ });
+
+ return self;
+ };
+
+ this.off = function (eventName, callback) {
+ if (!events[eventName]) {
+ return self;
+ }
+
+ if (!callback) {
+ delete events[eventName];
+
+ return self;
+ }
+
+ var callbackIndex = events[eventName].indexOf(callback);
+
+ if (-1 !== callbackIndex) {
+ delete events[eventName][callbackIndex];
+ }
+
+ return self;
+ };
+
+ this.trigger = function (eventName) {
+ var methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1),
+ params = Array.prototype.slice.call(arguments, 1);
+
+ if (self[methodName]) {
+ self[methodName].apply(self, params);
+ }
+
+ var callbacks = events[eventName];
+
+ if (!callbacks) {
+ return self;
+ }
+
+ $.each(callbacks, function (index, callback) {
+ callback.apply(self, params);
+ });
- onInit: function() {
- ViewModule.prototype.onInit.apply( this, arguments );
+ return self;
+ };
- if ( elementorFrontend.isEditMode() ) {
- elementor.settings.general.model.on( 'change', this.onGeneralSettingsChange );
- }
- },
+ init();
+};
- onGeneralSettingsChange: function( model ) {
- if ( 'elementor_lightbox_content_animation' in model.changed ) {
- this.setSettings( 'modalOptions.entranceAnimation', model.changed.elementor_lightbox_content_animation );
+Module.prototype.__construct = function () {};
- this.setEntranceAnimation();
- }
- },
+Module.prototype.getDefaultSettings = function () {
+ return {};
+};
- onSlideChange: function() {
- this
- .getSlide( 'prev' )
- .add( this.getSlide( 'next' ) )
- .add( this.getSlide( 'active' ) )
- .find( '.' + this.getSettings( 'classes.videoWrapper' ) )
- .remove();
+Module.extendsCount = 0;
- this.playSlideVideo();
- }
-} );
+Module.extend = function (properties) {
+ var $ = jQuery,
+ parent = this;
-module.exports = LightboxModule;
+ var child = function child() {
+ return parent.apply(this, arguments);
+ };
-},{"../../utils/view-module":25}],20:[function(require,module,exports){
-var ViewModule = require( '../../utils/view-module' );
+ $.extend(child, parent);
-module.exports = ViewModule.extend( {
- getDefaultSettings: function() {
- return {
- isInserted: false,
- APISrc: 'https://www.youtube.com/iframe_api',
- selectors: {
- firstScript: 'script:first'
- }
- };
- },
+ child.prototype = Object.create($.extend({}, parent.prototype, properties));
- getDefaultElements: function() {
- return {
- $firstScript: jQuery( this.getSettings( 'selectors.firstScript' ) )
- };
- },
+ child.prototype.constructor = child;
- insertYTAPI: function() {
- this.setSettings( 'isInserted', true );
+ /*
+ * Constructor ID is used to set an unique ID
+ * to every extend of the Module.
+ *
+ * It's useful in some cases such as unique
+ * listener for frontend handlers.
+ */
+ var constructorID = ++Module.extendsCount;
- this.elements.$firstScript.before( jQuery( '<script>', { src: this.getSettings( 'APISrc' ) } ) );
- },
+ child.prototype.getConstructorID = function () {
+ return constructorID;
+ };
- onYoutubeApiReady: function( callback ) {
- var self = this;
+ child.__super__ = parent.prototype;
- if ( ! self.getSettings( 'IsInserted' ) ) {
- self.insertYTAPI();
- }
+ return child;
+};
- if ( window.YT && YT.loaded ) {
- callback( YT );
- } else {
- // If not ready check again by timeout..
- setTimeout( function() {
- self.onYoutubeApiReady( callback );
- }, 350 );
- }
- },
+module.exports = Module;
- getYoutubeIDFromURL: function( url ) {
- var videoIDParts = url.match( /^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^?&"'>]+)/ );
+/***/ }),
- return videoIDParts && videoIDParts[1];
- }
-} );
+/***/ 20:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
-},{"../../utils/view-module":25}],21:[function(require,module,exports){
-'use strict';
/**
* Handles managing all events for whatever you plug it into. Priorities for hooks are based on lowest to highest in
* that, lowest priority hooks are fired first.
*/
-var EventManager = function() {
+
+var EventManager = function EventManager() {
var slice = Array.prototype.slice,
- MethodsAvailable;
+ MethodsAvailable;
/**
- * Contains the hooks that get registered with this EventManager. The array for storage utilizes a "flat"
- * object literal such that looking up the hook utilizes the native object literal hash.
- */
+ * Contains the hooks that get registered with this EventManager. The array for storage utilizes a "flat"
+ * object literal such that looking up the hook utilizes the native object literal hash.
+ */
var STORAGE = {
actions: {},
filters: {}
};
/**
- * Removes the specified hook by resetting the value of it.
- *
- * @param type Type of hook, either 'actions' or 'filters'
- * @param hook The hook (namespace.identifier) to remove
- *
- * @private
- */
- function _removeHook( type, hook, callback, context ) {
+ * Removes the specified hook by resetting the value of it.
+ *
+ * @param type Type of hook, either 'actions' or 'filters'
+ * @param hook The hook (namespace.identifier) to remove
+ *
+ * @private
+ */
+ function _removeHook(type, hook, callback, context) {
var handlers, handler, i;
- if ( ! STORAGE[ type ][ hook ] ) {
+ if (!STORAGE[type][hook]) {
return;
}
- if ( ! callback ) {
- STORAGE[ type ][ hook ] = [];
+ if (!callback) {
+ STORAGE[type][hook] = [];
} else {
- handlers = STORAGE[ type ][ hook ];
- if ( ! context ) {
- for ( i = handlers.length; i--; ) {
- if ( handlers[ i ].callback === callback ) {
- handlers.splice( i, 1 );
+ handlers = STORAGE[type][hook];
+ if (!context) {
+ for (i = handlers.length; i--;) {
+ if (handlers[i].callback === callback) {
+ handlers.splice(i, 1);
}
}
} else {
- for ( i = handlers.length; i--; ) {
- handler = handlers[ i ];
- if ( handler.callback === callback && handler.context === context ) {
- handlers.splice( i, 1 );
+ for (i = handlers.length; i--;) {
+ handler = handlers[i];
+ if (handler.callback === callback && handler.context === context) {
+ handlers.splice(i, 1);
}
}
}
}
/**
- * Use an insert sort for keeping our hooks organized based on priority. This function is ridiculously faster
- * than bubble sort, etc: http://jsperf.com/javascript-sort
- *
- * @param hooks The custom array containing all of the appropriate hooks to perform an insert sort on.
- * @private
- */
- function _hookInsertSort( hooks ) {
+ * Use an insert sort for keeping our hooks organized based on priority. This function is ridiculously faster
+ * than bubble sort, etc: http://jsperf.com/javascript-sort
+ *
+ * @param hooks The custom array containing all of the appropriate hooks to perform an insert sort on.
+ * @private
+ */
+ function _hookInsertSort(hooks) {
var tmpHook, j, prevHook;
- for ( var i = 1, len = hooks.length; i < len; i++ ) {
- tmpHook = hooks[ i ];
+ for (var i = 1, len = hooks.length; i < len; i++) {
+ tmpHook = hooks[i];
j = i;
- while ( ( prevHook = hooks[ j - 1 ] ) && prevHook.priority > tmpHook.priority ) {
- hooks[ j ] = hooks[ j - 1 ];
+ while ((prevHook = hooks[j - 1]) && prevHook.priority > tmpHook.priority) {
+ hooks[j] = hooks[j - 1];
--j;
}
- hooks[ j ] = tmpHook;
+ hooks[j] = tmpHook;
}
return hooks;
}
/**
- * Adds the hook to the appropriate storage container
- *
- * @param type 'actions' or 'filters'
- * @param hook The hook (namespace.identifier) to add to our event manager
- * @param callback The function that will be called when the hook is executed.
- * @param priority The priority of this hook. Must be an integer.
- * @param [context] A value to be used for this
- * @private
- */
- function _addHook( type, hook, callback, priority, context ) {
+ * Adds the hook to the appropriate storage container
+ *
+ * @param type 'actions' or 'filters'
+ * @param hook The hook (namespace.identifier) to add to our event manager
+ * @param callback The function that will be called when the hook is executed.
+ * @param priority The priority of this hook. Must be an integer.
+ * @param [context] A value to be used for this
+ * @private
+ */
+ function _addHook(type, hook, callback, priority, context) {
var hookObject = {
callback: callback,
priority: priority,
};
// Utilize 'prop itself' : http://jsperf.com/hasownproperty-vs-in-vs-undefined/19
- var hooks = STORAGE[ type ][ hook ];
- if ( hooks ) {
+ var hooks = STORAGE[type][hook];
+ if (hooks) {
// TEMP FIX BUG
var hasSameCallback = false;
- jQuery.each( hooks, function() {
- if ( this.callback === callback ) {
+ jQuery.each(hooks, function () {
+ if (this.callback === callback) {
hasSameCallback = true;
return false;
}
- } );
+ });
- if ( hasSameCallback ) {
+ if (hasSameCallback) {
return;
}
// END TEMP FIX BUG
- hooks.push( hookObject );
- hooks = _hookInsertSort( hooks );
+ hooks.push(hookObject);
+ hooks = _hookInsertSort(hooks);
} else {
- hooks = [ hookObject ];
+ hooks = [hookObject];
}
- STORAGE[ type ][ hook ] = hooks;
+ STORAGE[type][hook] = hooks;
}
/**
- * Runs the specified hook. If it is an action, the value is not modified but if it is a filter, it is.
- *
- * @param type 'actions' or 'filters'
- * @param hook The hook ( namespace.identifier ) to be ran.
- * @param args Arguments to pass to the action/filter. If it's a filter, args is actually a single parameter.
- * @private
- */
- function _runHook( type, hook, args ) {
- var handlers = STORAGE[ type ][ hook ], i, len;
-
- if ( ! handlers ) {
- return ( 'filters' === type ) ? args[ 0 ] : false;
+ * Runs the specified hook. If it is an action, the value is not modified but if it is a filter, it is.
+ *
+ * @param type 'actions' or 'filters'
+ * @param hook The hook ( namespace.identifier ) to be ran.
+ * @param args Arguments to pass to the action/filter. If it's a filter, args is actually a single parameter.
+ * @private
+ */
+ function _runHook(type, hook, args) {
+ var handlers = STORAGE[type][hook],
+ i,
+ len;
+
+ if (!handlers) {
+ return 'filters' === type ? args[0] : false;
}
len = handlers.length;
- if ( 'filters' === type ) {
- for ( i = 0; i < len; i++ ) {
- args[ 0 ] = handlers[ i ].callback.apply( handlers[ i ].context, args );
+ if ('filters' === type) {
+ for (i = 0; i < len; i++) {
+ args[0] = handlers[i].callback.apply(handlers[i].context, args);
}
} else {
- for ( i = 0; i < len; i++ ) {
- handlers[ i ].callback.apply( handlers[ i ].context, args );
+ for (i = 0; i < len; i++) {
+ handlers[i].callback.apply(handlers[i].context, args);
}
}
- return ( 'filters' === type ) ? args[ 0 ] : true;
+ return 'filters' === type ? args[0] : true;
}
/**
- * Adds an action to the event manager.
- *
- * @param action Must contain namespace.identifier
- * @param callback Must be a valid callback function before this action is added
- * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
- * @param [context] Supply a value to be used for this
- */
- function addAction( action, callback, priority, context ) {
- if ( 'string' === typeof action && 'function' === typeof callback ) {
- priority = parseInt( ( priority || 10 ), 10 );
- _addHook( 'actions', action, callback, priority, context );
+ * Adds an action to the event manager.
+ *
+ * @param action Must contain namespace.identifier
+ * @param callback Must be a valid callback function before this action is added
+ * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
+ * @param [context] Supply a value to be used for this
+ */
+ function addAction(action, callback, priority, context) {
+ if ('string' === typeof action && 'function' === typeof callback) {
+ priority = parseInt(priority || 10, 10);
+ _addHook('actions', action, callback, priority, context);
}
return MethodsAvailable;
}
/**
- * Performs an action if it exists. You can pass as many arguments as you want to this function; the only rule is
- * that the first argument must always be the action.
- */
- function doAction( /* action, arg1, arg2, ... */ ) {
- var args = slice.call( arguments );
+ * Performs an action if it exists. You can pass as many arguments as you want to this function; the only rule is
+ * that the first argument must always be the action.
+ */
+ function doAction() /* action, arg1, arg2, ... */{
+ var args = slice.call(arguments);
var action = args.shift();
- if ( 'string' === typeof action ) {
- _runHook( 'actions', action, args );
+ if ('string' === typeof action) {
+ _runHook('actions', action, args);
}
return MethodsAvailable;
}
/**
- * Removes the specified action if it contains a namespace.identifier & exists.
- *
- * @param action The action to remove
- * @param [callback] Callback function to remove
- */
- function removeAction( action, callback ) {
- if ( 'string' === typeof action ) {
- _removeHook( 'actions', action, callback );
+ * Removes the specified action if it contains a namespace.identifier & exists.
+ *
+ * @param action The action to remove
+ * @param [callback] Callback function to remove
+ */
+ function removeAction(action, callback) {
+ if ('string' === typeof action) {
+ _removeHook('actions', action, callback);
}
return MethodsAvailable;
}
/**
- * Adds a filter to the event manager.
- *
- * @param filter Must contain namespace.identifier
- * @param callback Must be a valid callback function before this action is added
- * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
- * @param [context] Supply a value to be used for this
- */
- function addFilter( filter, callback, priority, context ) {
- if ( 'string' === typeof filter && 'function' === typeof callback ) {
- priority = parseInt( ( priority || 10 ), 10 );
- _addHook( 'filters', filter, callback, priority, context );
+ * Adds a filter to the event manager.
+ *
+ * @param filter Must contain namespace.identifier
+ * @param callback Must be a valid callback function before this action is added
+ * @param [priority=10] Used to control when the function is executed in relation to other callbacks bound to the same hook
+ * @param [context] Supply a value to be used for this
+ */
+ function addFilter(filter, callback, priority, context) {
+ if ('string' === typeof filter && 'function' === typeof callback) {
+ priority = parseInt(priority || 10, 10);
+ _addHook('filters', filter, callback, priority, context);
}
return MethodsAvailable;
}
/**
- * Performs a filter if it exists. You should only ever pass 1 argument to be filtered. The only rule is that
- * the first argument must always be the filter.
- */
- function applyFilters( /* filter, filtered arg, arg2, ... */ ) {
- var args = slice.call( arguments );
+ * Performs a filter if it exists. You should only ever pass 1 argument to be filtered. The only rule is that
+ * the first argument must always be the filter.
+ */
+ function applyFilters() /* filter, filtered arg, arg2, ... */{
+ var args = slice.call(arguments);
var filter = args.shift();
- if ( 'string' === typeof filter ) {
- return _runHook( 'filters', filter, args );
+ if ('string' === typeof filter) {
+ return _runHook('filters', filter, args);
}
return MethodsAvailable;
}
/**
- * Removes the specified filter if it contains a namespace.identifier & exists.
- *
- * @param filter The action to remove
- * @param [callback] Callback function to remove
- */
- function removeFilter( filter, callback ) {
- if ( 'string' === typeof filter ) {
- _removeHook( 'filters', filter, callback );
+ * Removes the specified filter if it contains a namespace.identifier & exists.
+ *
+ * @param filter The action to remove
+ * @param [callback] Callback function to remove
+ */
+ function removeFilter(filter, callback) {
+ if ('string' === typeof filter) {
+ _removeHook('filters', filter, callback);
}
return MethodsAvailable;
}
/**
- * Maintain a reference to the object scope so our public methods never get confusing.
- */
+ * Maintain a reference to the object scope so our public methods never get confusing.
+ */
MethodsAvailable = {
removeFilter: removeFilter,
applyFilters: applyFilters,
module.exports = EventManager;
-},{}],22:[function(require,module,exports){
-var HotKeys = function() {
- var hotKeysHandlers = {};
-
- var isMac = function() {
- return -1 !== navigator.userAgent.indexOf( 'Mac OS X' );
- };
-
- var applyHotKey = function( event ) {
- var handlers = hotKeysHandlers[ event.which ];
-
- if ( ! handlers ) {
- return;
- }
-
- jQuery.each( handlers, function() {
- var handler = this;
-
- if ( handler.isWorthHandling && ! handler.isWorthHandling( event ) ) {
- return;
- }
-
- // Fix for some keyboard sources that consider alt key as ctrl key
- if ( ! handler.allowAltKey && event.altKey ) {
- return;
- }
-
- event.preventDefault();
-
- handler.handle( event );
- } );
- };
-
- this.isControlEvent = function( event ) {
- return event[ isMac() ? 'metaKey' : 'ctrlKey' ];
- };
-
- this.addHotKeyHandler = function( keyCode, handlerName, handler ) {
- if ( ! hotKeysHandlers[ keyCode ] ) {
- hotKeysHandlers[ keyCode ] = {};
- }
+/***/ }),
- hotKeysHandlers[ keyCode ][ handlerName ] = handler;
- };
+/***/ 22:
+/***/ (function(module, exports, __webpack_require__) {
- this.bindListener = function( $listener ) {
- $listener.on( 'keydown', applyHotKey );
- };
-};
+"use strict";
-module.exports = new HotKeys();
-},{}],23:[function(require,module,exports){
-var ViewModule = require( './view-module' );
+var HandlerModule = __webpack_require__(5);
-module.exports = ViewModule.extend( {
+module.exports = HandlerModule.extend({
+ $activeContent: null,
- getDefaultSettings: function() {
+ getDefaultSettings: function getDefaultSettings() {
return {
- container: null,
- items: null,
- columnsCount: 3,
- verticalSpaceBetween: 30
+ selectors: {
+ tabTitle: '.elementor-tab-title',
+ tabContent: '.elementor-tab-content'
+ },
+ classes: {
+ active: 'elementor-active'
+ },
+ showTabFn: 'show',
+ hideTabFn: 'hide',
+ toggleSelf: true,
+ hidePrevious: true,
+ autoExpand: true
};
},
- getDefaultElements: function() {
+ getDefaultElements: function getDefaultElements() {
+ var selectors = this.getSettings('selectors');
+
return {
- $container: jQuery( this.getSettings( 'container' ) ),
- $items: jQuery( this.getSettings( 'items' ) )
+ $tabTitles: this.findElement(selectors.tabTitle),
+ $tabContents: this.findElement(selectors.tabContent)
};
},
- run: function() {
- var heights = [],
- distanceFromTop = this.elements.$container.position().top,
- settings = this.getSettings(),
- columnsCount = settings.columnsCount;
-
- distanceFromTop += parseInt( this.elements.$container.css( 'margin-top' ), 10 );
+ activateDefaultTab: function activateDefaultTab() {
+ var settings = this.getSettings();
- this.elements.$items.each( function( index ) {
- var row = Math.floor( index / columnsCount ),
- $item = jQuery( this ),
- itemHeight = $item[0].getBoundingClientRect().height + settings.verticalSpaceBetween;
+ if (!settings.autoExpand || 'editor' === settings.autoExpand && !this.isEdit) {
+ return;
+ }
- if ( row ) {
- var itemPosition = $item.position(),
- indexAtRow = index % columnsCount,
- pullHeight = itemPosition.top - distanceFromTop - heights[ indexAtRow ];
+ var defaultActiveTab = this.getEditSettings('activeItemIndex') || 1,
+ originalToggleMethods = {
+ showTabFn: settings.showTabFn,
+ hideTabFn: settings.hideTabFn
+ };
- pullHeight -= parseInt( $item.css( 'margin-top' ), 10 );
+ // Toggle tabs without animation to avoid jumping
+ this.setSettings({
+ showTabFn: 'show',
+ hideTabFn: 'hide'
+ });
- pullHeight *= -1;
+ this.changeActiveTab(defaultActiveTab);
- $item.css( 'margin-top', pullHeight + 'px' );
+ // Return back original toggle effects
+ this.setSettings(originalToggleMethods);
+ },
- heights[ indexAtRow ] += itemHeight;
- } else {
- heights.push( itemHeight );
- }
- } );
- }
-} );
+ deactivateActiveTab: function deactivateActiveTab(tabIndex) {
+ var settings = this.getSettings(),
+ activeClass = settings.classes.active,
+ activeFilter = tabIndex ? '[data-tab="' + tabIndex + '"]' : '.' + activeClass,
+ $activeTitle = this.elements.$tabTitles.filter(activeFilter),
+ $activeContent = this.elements.$tabContents.filter(activeFilter);
-},{"./view-module":25}],24:[function(require,module,exports){
-var Module = function() {
- var $ = jQuery,
- instanceParams = arguments,
- self = this,
- settings,
- events = {};
+ $activeTitle.add($activeContent).removeClass(activeClass);
- var ensureClosureMethods = function() {
- $.each( self, function( methodName ) {
- var oldMethod = self[ methodName ];
+ $activeContent[settings.hideTabFn]();
+ },
- if ( 'function' !== typeof oldMethod ) {
- return;
- }
+ activateTab: function activateTab(tabIndex) {
+ var settings = this.getSettings(),
+ activeClass = settings.classes.active,
+ $requestedTitle = this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]'),
+ $requestedContent = this.elements.$tabContents.filter('[data-tab="' + tabIndex + '"]');
- self[ methodName ] = function() {
- return oldMethod.apply( self, arguments );
- };
- });
- };
+ $requestedTitle.add($requestedContent).addClass(activeClass);
- var initSettings = function() {
- settings = self.getDefaultSettings();
+ $requestedContent[settings.showTabFn]();
+ },
- var instanceSettings = instanceParams[0];
+ isActiveTab: function isActiveTab(tabIndex) {
+ return this.elements.$tabTitles.filter('[data-tab="' + tabIndex + '"]').hasClass(this.getSettings('classes.active'));
+ },
- if ( instanceSettings ) {
- $.extend( settings, instanceSettings );
- }
- };
+ bindEvents: function bindEvents() {
+ var self = this;
- var init = function() {
- self.__construct.apply( self, instanceParams );
+ self.elements.$tabTitles.on('focus', function (event) {
+ self.changeActiveTab(event.currentTarget.dataset.tab);
+ });
- ensureClosureMethods();
+ if (self.getSettings('toggleSelf')) {
+ self.elements.$tabTitles.on('mousedown', function (event) {
+ if (jQuery(event.currentTarget).is(':focus')) {
+ self.changeActiveTab(event.currentTarget.dataset.tab);
+ }
+ });
+ }
+ },
- initSettings();
+ onInit: function onInit() {
+ HandlerModule.prototype.onInit.apply(this, arguments);
- self.trigger( 'init' );
- };
+ this.activateDefaultTab();
+ },
- this.getItems = function( items, itemKey ) {
- if ( itemKey ) {
- var keyStack = itemKey.split( '.' ),
- currentKey = keyStack.splice( 0, 1 );
+ onEditSettingsChange: function onEditSettingsChange(propertyName) {
+ if ('activeItemIndex' === propertyName) {
+ this.activateDefaultTab();
+ }
+ },
- if ( ! keyStack.length ) {
- return items[ currentKey ];
- }
+ changeActiveTab: function changeActiveTab(tabIndex) {
+ var isActiveTab = this.isActiveTab(tabIndex),
+ settings = this.getSettings();
- if ( ! items[ currentKey ] ) {
- return;
- }
+ if ((settings.toggleSelf || !isActiveTab) && settings.hidePrevious) {
+ this.deactivateActiveTab();
+ }
- return this.getItems( items[ currentKey ], keyStack.join( '.' ) );
+ if (!settings.hidePrevious && isActiveTab) {
+ this.deactivateActiveTab(tabIndex);
}
- return items;
- };
+ if (!isActiveTab) {
+ this.activateTab(tabIndex);
+ }
+ }
+});
- this.getSettings = function( setting ) {
- return this.getItems( settings, setting );
- };
+/***/ }),
- this.setSettings = function( settingKey, value, settingsContainer ) {
- if ( ! settingsContainer ) {
- settingsContainer = settings;
- }
+/***/ 5:
+/***/ (function(module, exports, __webpack_require__) {
- if ( 'object' === typeof settingKey ) {
- $.extend( settingsContainer, settingKey );
+"use strict";
- return self;
- }
- var keyStack = settingKey.split( '.' ),
- currentKey = keyStack.splice( 0, 1 );
+var ViewModule = __webpack_require__(1),
+ HandlerModule;
- if ( ! keyStack.length ) {
- settingsContainer[ currentKey ] = value;
+HandlerModule = ViewModule.extend({
+ $element: null,
- return self;
- }
+ editorListeners: null,
- if ( ! settingsContainer[ currentKey ] ) {
- settingsContainer[ currentKey ] = {};
- }
+ onElementChange: null,
- return self.setSettings( keyStack.join( '.' ), value, settingsContainer[ currentKey ] );
- };
+ onEditSettingsChange: null,
- this.forceMethodImplementation = function( methodArguments ) {
- var functionName = methodArguments.callee.name;
+ onGeneralSettingsChange: null,
- throw new ReferenceError( 'The method ' + functionName + ' must to be implemented in the inheritor child.' );
- };
+ onPageSettingsChange: null,
- this.on = function( eventName, callback ) {
- if ( 'object' === typeof eventName ) {
- $.each( eventName, function( singleEventName ) {
- self.on( singleEventName, this );
- } );
+ isEdit: null,
- return self;
- }
+ __construct: function __construct(settings) {
+ this.$element = settings.$element;
- var eventNames = eventName.split( ' ' );
+ this.isEdit = this.$element.hasClass('elementor-element-edit-mode');
- eventNames.forEach( function( singleEventName ) {
- if ( ! events[ singleEventName ] ) {
- events[ singleEventName ] = [];
- }
+ if (this.isEdit) {
+ this.addEditorListeners();
+ }
+ },
- events[ singleEventName ].push( callback );
- } );
+ findElement: function findElement(selector) {
+ var $mainElement = this.$element;
- return self;
- };
+ return $mainElement.find(selector).filter(function () {
+ return jQuery(this).closest('.elementor-element').is($mainElement);
+ });
+ },
- this.off = function( eventName, callback ) {
- if ( ! events[ eventName ] ) {
- return self;
+ getUniqueHandlerID: function getUniqueHandlerID(cid, $element) {
+ if (!cid) {
+ cid = this.getModelCID();
}
- if ( ! callback ) {
- delete events[ eventName ];
-
- return self;
+ if (!$element) {
+ $element = this.$element;
}
- var callbackIndex = events[ eventName ].indexOf( callback );
+ return cid + $element.attr('data-element_type') + this.getConstructorID();
+ },
- if ( -1 !== callbackIndex ) {
- delete events[ eventName ][ callbackIndex ];
- }
+ initEditorListeners: function initEditorListeners() {
+ var self = this;
- return self;
- };
+ self.editorListeners = [{
+ event: 'element:destroy',
+ to: elementor.channels.data,
+ callback: function callback(removedModel) {
+ if (removedModel.cid !== self.getModelCID()) {
+ return;
+ }
- this.trigger = function( eventName ) {
- var methodName = 'on' + eventName[ 0 ].toUpperCase() + eventName.slice( 1 ),
- params = Array.prototype.slice.call( arguments, 1 );
+ self.onDestroy();
+ }
+ }];
- if ( self[ methodName ] ) {
- self[ methodName ].apply( self, params );
- }
+ if (self.onElementChange) {
+ var elementName = self.getElementName(),
+ eventName = 'change';
- var callbacks = events[ eventName ];
+ if ('global' !== elementName) {
+ eventName += ':' + elementName;
+ }
- if ( ! callbacks ) {
- return self;
- }
+ self.editorListeners.push({
+ event: eventName,
+ to: elementor.channels.editor,
+ callback: function callback(controlView, elementView) {
+ var elementViewHandlerID = self.getUniqueHandlerID(elementView.model.cid, elementView.$el);
- $.each( callbacks, function( index, callback ) {
- callback.apply( self, params );
- } );
+ if (elementViewHandlerID !== self.getUniqueHandlerID()) {
+ return;
+ }
- return self;
- };
+ self.onElementChange(controlView.model.get('name'), controlView, elementView);
+ }
+ });
+ }
- init();
-};
+ if (self.onEditSettingsChange) {
+ self.editorListeners.push({
+ event: 'change:editSettings',
+ to: elementor.channels.editor,
+ callback: function callback(changedModel, view) {
+ if (view.model.cid !== self.getModelCID()) {
+ return;
+ }
-Module.prototype.__construct = function() {};
+ self.onEditSettingsChange(Object.keys(changedModel.changed)[0]);
+ }
+ });
+ }
-Module.prototype.getDefaultSettings = function() {
- return {};
-};
+ ['page', 'general'].forEach(function (settingsType) {
+ var listenerMethodName = 'on' + elementor.helpers.firstLetterUppercase(settingsType) + 'SettingsChange';
-Module.extendsCount = 0;
+ if (self[listenerMethodName]) {
+ self.editorListeners.push({
+ event: 'change',
+ to: elementor.settings[settingsType].model,
+ callback: function callback(model) {
+ self[listenerMethodName](model.changed);
+ }
+ });
+ }
+ });
+ },
-Module.extend = function( properties ) {
- var $ = jQuery,
- parent = this;
+ getEditorListeners: function getEditorListeners() {
+ if (!this.editorListeners) {
+ this.initEditorListeners();
+ }
- var child = function() {
- return parent.apply( this, arguments );
- };
+ return this.editorListeners;
+ },
- $.extend( child, parent );
+ addEditorListeners: function addEditorListeners() {
+ var uniqueHandlerID = this.getUniqueHandlerID();
- child.prototype = Object.create( $.extend( {}, parent.prototype, properties ) );
+ this.getEditorListeners().forEach(function (listener) {
+ elementorFrontend.addListenerOnce(uniqueHandlerID, listener.event, listener.callback, listener.to);
+ });
+ },
- child.prototype.constructor = child;
+ removeEditorListeners: function removeEditorListeners() {
+ var uniqueHandlerID = this.getUniqueHandlerID();
- /*
- * Constructor ID is used to set an unique ID
- * to every extend of the Module.
- *
- * It's useful in some cases such as unique
- * listener for frontend handlers.
- */
- var constructorID = ++Module.extendsCount;
+ this.getEditorListeners().forEach(function (listener) {
+ elementorFrontend.removeListeners(uniqueHandlerID, listener.event, null, listener.to);
+ });
+ },
- child.prototype.getConstructorID = function() {
- return constructorID;
- };
+ getElementName: function getElementName() {
+ return this.$element.data('element_type').split('.')[0];
+ },
- child.__super__ = parent.prototype;
+ getID: function getID() {
+ return this.$element.data('id');
+ },
- return child;
-};
+ getModelCID: function getModelCID() {
+ return this.$element.data('model-cid');
+ },
-module.exports = Module;
+ getElementSettings: function getElementSettings(setting) {
+ var elementSettings = {},
+ modelCID = this.getModelCID();
-},{}],25:[function(require,module,exports){
-var Module = require( './module' ),
- ViewModule;
+ if (this.isEdit && modelCID) {
+ var settings = elementorFrontend.config.elements.data[modelCID],
+ settingsKeys = elementorFrontend.config.elements.keys[settings.attributes.widgetType || settings.attributes.elType];
-ViewModule = Module.extend( {
- elements: null,
+ jQuery.each(settings.getActiveControls(), function (controlKey) {
+ if (-1 !== settingsKeys.indexOf(controlKey)) {
+ elementSettings[controlKey] = settings.attributes[controlKey];
+ }
+ });
+ } else {
+ elementSettings = this.$element.data('settings') || {};
+ }
- getDefaultElements: function() {
- return {};
+ return this.getItems(elementSettings, setting);
},
- bindEvents: function() {},
+ getEditSettings: function getEditSettings(setting) {
+ var attributes = {};
- onInit: function() {
- this.initElements();
+ if (this.isEdit) {
+ attributes = elementorFrontend.config.elements.editSettings[this.getModelCID()].attributes;
+ }
- this.bindEvents();
+ return this.getItems(attributes, setting);
},
- initElements: function() {
- this.elements = this.getDefaultElements();
+ onDestroy: function onDestroy() {
+ this.removeEditorListeners();
+
+ if (this.unbindEvents) {
+ this.unbindEvents();
+ }
}
-} );
+});
-module.exports = ViewModule;
+module.exports = HandlerModule;
+
+/***/ })
-},{"./module":24}]},{},[2])
-//# sourceMappingURL=frontend.js.map
+/******/ });
+//# sourceMappingURL=frontend.js.map
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-!function r(s,a,l){function d(t,e){if(!a[t]){if(!s[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(c)return c(t,!0);var i=new Error("Cannot find module '"+t+"'");throw i.code="MODULE_NOT_FOUND",i}var o=a[t]={exports:{}};s[t][0].call(o.exports,function(e){return d(s[t][1][e]||e)},o,o.exports,r,s,a,l)}return a[t].exports}for(var c="function"==typeof require&&require,e=0;e<l.length;e++)d(l[e]);return d}({1:[function(i,e,t){var n;n=function(n){var e=this,t={section:i("elementor-frontend/handlers/section"),"accordion.default":i("elementor-frontend/handlers/accordion"),"alert.default":i("elementor-frontend/handlers/alert"),"counter.default":i("elementor-frontend/handlers/counter"),"progress.default":i("elementor-frontend/handlers/progress"),"tabs.default":i("elementor-frontend/handlers/tabs"),"toggle.default":i("elementor-frontend/handlers/toggle"),"video.default":i("elementor-frontend/handlers/video"),"image-carousel.default":i("elementor-frontend/handlers/image-carousel"),"text-editor.default":i("elementor-frontend/handlers/text-editor")};this.initHandlers=function(){elementorFrontend.hooks.addAction("frontend/element_ready/global",i("elementor-frontend/handlers/global")),elementorFrontend.hooks.addAction("frontend/element_ready/widget",i("elementor-frontend/handlers/widget")),n.each(t,function(e,t){elementorFrontend.hooks.addAction("frontend/element_ready/"+e,t)}),(elementorFrontend.isEditMode()?jQuery(".elementor-element",".elementor:not(.elementor-edit-mode)"):n(".elementor-element")).each(function(){e.runReadyTrigger(n(this))})},this.getHandlers=function(e){return e?t[e]:t},this.runReadyTrigger=function(e){var t=e.attr("data-element_type");t&&(e=jQuery(e),elementorFrontend.hooks.doAction("frontend/element_ready/global",e,n),-1===["section","column"].indexOf(t)&&elementorFrontend.hooks.doAction("frontend/element_ready/widget",e,n),elementorFrontend.hooks.doAction("frontend/element_ready/"+t,e,n))},elementorFrontend.isEditMode()||e.initHandlers()},e.exports=n},{"elementor-frontend/handlers/accordion":4,"elementor-frontend/handlers/alert":5,"elementor-frontend/handlers/counter":7,"elementor-frontend/handlers/global":8,"elementor-frontend/handlers/image-carousel":9,"elementor-frontend/handlers/progress":10,"elementor-frontend/handlers/section":11,"elementor-frontend/handlers/tabs":12,"elementor-frontend/handlers/text-editor":13,"elementor-frontend/handlers/toggle":14,"elementor-frontend/handlers/video":15,"elementor-frontend/handlers/widget":16}],2:[function(i,e,t){var o,s,a,l,d,c,u,h;o=jQuery,s={},a=i("../utils/hooks"),l=i("./handler-module"),d=i("elementor-frontend/elements-handler"),c=i("elementor-frontend/utils/youtube"),u=i("elementor-frontend/utils/anchors"),h=i("elementor-frontend/utils/lightbox"),window.elementorFrontend=new function(){var e,r=this;this.config=elementorFrontendConfig,this.Module=l;var t=function(){s.$body.attr("data-elementor-device-mode",r.getCurrentDeviceMode())},n=function(e,t){var n=r.isEditMode()?elementor.settings[e].model.attributes:r.config.settings[e];return t?n[t]:n};this.init=function(){r.hooks=new a,s.window=window,s.$window=o(window),s.$document=o(document),s.$body=o("body"),s.$elementor=s.$document.find(".elementor"),s.$wpAdminBar=s.$document.find("#wpadminbar"),s.$window.on("resize",t),t(),s.$window.trigger("elementor/frontend/init"),r.isEditMode()||(r.hotKeys=i("elementor-utils/hot-keys"),r.hotKeys.bindListener(s.$window)),r.utils={youtube:new c,anchors:new u,lightbox:new h},r.modules={StretchElement:i("elementor-frontend/modules/stretch-element"),Masonry:i("elementor-utils/masonry")},r.elementsHandler=new d(o)},this.getElements=function(e){return e?s[e]:s},this.getDialogsManager=function(){return e||(e=new DialogsManager.Instance),e},this.getPageSettings=function(e){return n("page",e)},this.getGeneralSettings=function(e){return n("general",e)},this.isEditMode=function(){return r.config.isEditMode},this.throttle=function(n,i){var o,r,s,a,l=0,d=function(){l=Date.now(),o=null,a=n.apply(r,s),o||(r=s=null)};return function(){var e=Date.now(),t=i-(e-l);return r=this,s=arguments,t<=0||i<t?(o&&(clearTimeout(o),o=null),l=e,a=n.apply(r,s),o||(r=s=null)):o||(o=setTimeout(d,t)),a}},this.addListenerOnce=function(e,t,n,i){if(i||(i=r.getElements("$window")),r.isEditMode())if(i instanceof jQuery){var o=t+"."+e;i.off(o).on(o,n)}else i.off(t,null,e).on(t,n,e);else i.on(t,n)},this.getCurrentDeviceMode=function(){return getComputedStyle(s.$elementor[0],":after").content.replace(/"/g,"")},this.waypoint=function(e,n,i){return i=o.extend({offset:"100%",triggerOnce:!0},i),e.elementorWaypoint(function(){var e=this.element||this,t=n.apply(e,arguments);return i.triggerOnce&&this.destroy&&this.destroy(),t},i)}},elementorFrontend.isEditMode()||jQuery(elementorFrontend.init)},{"../utils/hooks":21,"./handler-module":3,"elementor-frontend/elements-handler":1,"elementor-frontend/modules/stretch-element":17,"elementor-frontend/utils/anchors":18,"elementor-frontend/utils/lightbox":19,"elementor-frontend/utils/youtube":20,"elementor-utils/hot-keys":22,"elementor-utils/masonry":23}],3:[function(e,t,n){var i;i=e("../utils/view-module").extend({$element:null,onElementChange:null,onEditSettingsChange:null,onGeneralSettingsChange:null,onPageSettingsChange:null,isEdit:null,__construct:function(e){this.$element=e.$element,this.isEdit=this.$element.hasClass("elementor-element-edit-mode"),this.isEdit&&this.addEditorListener()},findElement:function(e){var t=this.$element;return t.find(e).filter(function(){return jQuery(this).closest(".elementor-element").is(t)})},getUniqueHandlerID:function(e,t){return e||(e=this.getModelCID()),t||(t=this.$element),e+t.attr("data-element_type")+this.getConstructorID()},addEditorListener:function(){var n=this,i=n.getUniqueHandlerID();if(n.onElementChange){var e=n.getElementName(),t="change";"global"!==e&&(t+=":"+e),elementorFrontend.addListenerOnce(i,t,function(e,t){n.getUniqueHandlerID(t.model.cid,t.$el)===i&&n.onElementChange(e.model.get("name"),e,t)},elementor.channels.editor)}n.onEditSettingsChange&&elementorFrontend.addListenerOnce(i,"change:editSettings",function(e,t){t.model.cid===n.getModelCID()&&n.onEditSettingsChange(Object.keys(e.changed)[0])},elementor.channels.editor),["page","general"].forEach(function(e){var t="on"+e.charAt(0).toUpperCase()+e.slice(1)+"SettingsChange";n[t]&&elementorFrontend.addListenerOnce(i,"change",function(e){n[t](e.changed)},elementor.settings[e].model)})},getElementName:function(){return this.$element.data("element_type").split(".")[0]},getID:function(){return this.$element.data("id")},getModelCID:function(){return this.$element.data("model-cid")},getElementSettings:function(e){var t={},n=this.getModelCID();if(this.isEdit&&n){var i=elementorFrontend.config.elements.data[n],o=elementorFrontend.config.elements.keys[i.attributes.widgetType||i.attributes.elType];jQuery.each(i.getActiveControls(),function(e){-1!==o.indexOf(e)&&(t[e]=i.attributes[e])})}else t=this.$element.data("settings")||{};return this.getItems(t,e)},getEditSettings:function(e){var t={};return this.isEdit&&(t=elementorFrontend.config.elements.editSettings[this.getModelCID()].attributes),this.getItems(t,e)}}),t.exports=i},{"../utils/view-module":25}],4:[function(e,t,n){var i=e("elementor-frontend/handlers/base-tabs");t.exports=function(e){new i({$element:e,showTabFn:"slideDown",hideTabFn:"slideUp"})}},{"elementor-frontend/handlers/base-tabs":6}],5:[function(e,t,n){t.exports=function(e,t){e.find(".elementor-alert-dismiss").on("click",function(){t(this).parent().fadeOut()})}},{}],6:[function(e,t,n){var i=e("elementor-frontend/handler-module");t.exports=i.extend({$activeContent:null,getDefaultSettings:function(){return{selectors:{tabTitle:".elementor-tab-title",tabContent:".elementor-tab-content"},classes:{active:"elementor-active"},showTabFn:"show",hideTabFn:"hide",toggleSelf:!0,hidePrevious:!0,autoExpand:!0}},getDefaultElements:function(){var e=this.getSettings("selectors");return{$tabTitles:this.findElement(e.tabTitle),$tabContents:this.findElement(e.tabContent)}},activateDefaultTab:function(){var e=this.getSettings();if(e.autoExpand&&("editor"!==e.autoExpand||this.isEdit)){var t=this.getEditSettings("activeItemIndex")||1,n={showTabFn:e.showTabFn,hideTabFn:e.hideTabFn};this.setSettings({showTabFn:"show",hideTabFn:"hide"}),this.changeActiveTab(t),this.setSettings(n)}},deactivateActiveTab:function(e){var t=this.getSettings(),n=t.classes.active,i=e?'[data-tab="'+e+'"]':"."+n,o=this.elements.$tabTitles.filter(i),r=this.elements.$tabContents.filter(i);o.add(r).removeClass(n),r[t.hideTabFn]()},activateTab:function(e){var t=this.getSettings(),n=t.classes.active,i=this.elements.$tabTitles.filter('[data-tab="'+e+'"]'),o=this.elements.$tabContents.filter('[data-tab="'+e+'"]');i.add(o).addClass(n),o[t.showTabFn]()},isActiveTab:function(e){return this.elements.$tabTitles.filter('[data-tab="'+e+'"]').hasClass(this.getSettings("classes.active"))},bindEvents:function(){var t=this;t.elements.$tabTitles.on("focus",function(e){t.changeActiveTab(e.currentTarget.dataset.tab)}),t.getSettings("toggleSelf")&&t.elements.$tabTitles.on("mousedown",function(e){jQuery(e.currentTarget).is(":focus")&&t.changeActiveTab(e.currentTarget.dataset.tab)})},onInit:function(){i.prototype.onInit.apply(this,arguments),this.activateDefaultTab()},onEditSettingsChange:function(e){"activeItemIndex"===e&&this.activateDefaultTab()},changeActiveTab:function(e){var t=this.isActiveTab(e),n=this.getSettings();!n.toggleSelf&&t||!n.hidePrevious||this.deactivateActiveTab(),!n.hidePrevious&&t&&this.deactivateActiveTab(e),t||this.activateTab(e)}})},{"elementor-frontend/handler-module":3}],7:[function(e,t,n){t.exports=function(e,i){elementorFrontend.waypoint(e.find(".elementor-counter-number"),function(){var e=i(this),t=e.data(),n=t.toValue.toString().match(/\.(.*)/);n&&(t.rounding=n[1].length),e.numerator(t)})}},{}],8:[function(e,t,n){var i,o=e("elementor-frontend/handler-module");i=o.extend({getElementName:function(){return"global"},animate:function(){var e=this.$element,t=this.getAnimation(),n=this.getElementSettings(),i=n._animation_delay||n.animation_delay||0;e.removeClass(t),setTimeout(function(){e.removeClass("elementor-invisible").addClass(t)},i)},getAnimation:function(){var e=this.getElementSettings();return e.animation||e._animation},onInit:function(){o.prototype.onInit.apply(this,arguments);var e=this.getAnimation();e&&(this.$element.removeClass(e),elementorFrontend.waypoint(this.$element,this.animate.bind(this)))},onElementChange:function(e){/^_?animation/.test(e)&&this.animate()}}),t.exports=function(e){new i({$element:e})}},{"elementor-frontend/handler-module":3}],9:[function(e,t,n){var i,o=e("elementor-frontend/handler-module");i=o.extend({getDefaultSettings:function(){return{selectors:{carousel:".elementor-image-carousel"}}},getDefaultElements:function(){var e=this.getSettings("selectors");return{$carousel:this.$element.find(e.carousel)}},onInit:function(){o.prototype.onInit.apply(this,arguments);var e=this.getElementSettings(),t=+e.slides_to_show||3,n=1===t,i={slidesToShow:t,autoplay:"yes"===e.autoplay,autoplaySpeed:e.autoplay_speed,infinite:"yes"===e.infinite,pauseOnHover:"yes"===e.pause_on_hover,speed:e.speed,arrows:-1!==["arrows","both"].indexOf(e.navigation),dots:-1!==["dots","both"].indexOf(e.navigation),rtl:"rtl"===e.direction,responsive:[{breakpoint:1025,settings:{slidesToShow:+e.slides_to_show_tablet||(n?1:2),slidesToScroll:1}},{breakpoint:768,settings:{slidesToShow:+e.slides_to_show_mobile||1,slidesToScroll:1}}]};n?i.fade="fade"===e.effect:i.slidesToScroll=+e.slides_to_scroll,this.elements.$carousel.slick(i)}}),t.exports=function(e){new i({$element:e})}},{"elementor-frontend/handler-module":3}],10:[function(e,t,n){t.exports=function(e,t){elementorFrontend.waypoint(e.find(".elementor-progress-bar"),function(){var e=t(this);e.css("width",e.data("max")+"%")})}},{}],11:[function(e,t,n){var i=e("elementor-frontend/handler-module"),o=i.extend({player:null,isYTVideo:null,getDefaultSettings:function(){return{selectors:{backgroundVideoContainer:".elementor-background-video-container",backgroundVideoEmbed:".elementor-background-video-embed",backgroundVideoHosted:".elementor-background-video-hosted"}}},getDefaultElements:function(){var e=this.getSettings("selectors"),t={$backgroundVideoContainer:this.$element.find(e.backgroundVideoContainer)};return t.$backgroundVideoEmbed=t.$backgroundVideoContainer.children(e.backgroundVideoEmbed),t.$backgroundVideoHosted=t.$backgroundVideoContainer.children(e.backgroundVideoHosted),t},calcVideosSize:function(){var e=this.elements.$backgroundVideoContainer.outerWidth(),t=this.elements.$backgroundVideoContainer.outerHeight(),n="16:9".split(":"),i=n[0]/n[1],o=i<e/t;return{width:o?e:t*i,height:o?e/i:t}},changeVideoSize:function(){var e=this.isYTVideo?jQuery(this.player.getIframe()):this.elements.$backgroundVideoHosted,t=this.calcVideosSize();e.width(t.width).height(t.height)},prepareYTVideo:function(t,e){var n=this,i=n.elements.$backgroundVideoContainer;i.addClass("elementor-loading elementor-invisible"),n.player=new t.Player(n.elements.$backgroundVideoEmbed[0],{videoId:e,events:{onReady:function(){n.player.mute(),n.changeVideoSize(),n.player.playVideo()},onStateChange:function(e){switch(e.data){case t.PlayerState.PLAYING:i.removeClass("elementor-invisible elementor-loading");break;case t.PlayerState.ENDED:n.player.seekTo(0)}}},playerVars:{controls:0,showinfo:0,rel:0}}),elementorFrontend.getElements("$window").on("resize",n.changeVideoSize)},activate:function(){var t=this,e=t.getElementSettings("background_video_link"),n=elementorFrontend.utils.youtube.getYoutubeIDFromURL(e);t.isYTVideo=!!n,n?elementorFrontend.utils.youtube.onYoutubeApiReady(function(e){setTimeout(function(){t.prepareYTVideo(e,n)},1)}):t.elements.$backgroundVideoHosted.attr("src",e).one("canplay",t.changeVideoSize)},deactivate:function(){this.isYTVideo&&this.player.getIframe()?this.player.destroy():this.elements.$backgroundVideoHosted.removeAttr("src")},run:function(){var e=this.getElementSettings();"video"===e.background_background&&e.background_video_link?this.activate():this.deactivate()},onInit:function(){i.prototype.onInit.apply(this,arguments),this.run()},onElementChange:function(e){"background_background"===e&&this.run()}}),r=i.extend({stretchElement:null,bindEvents:function(){elementorFrontend.addListenerOnce(this.$element.data("model-cid"),"resize",this.stretch)},initStretch:function(){this.stretchElement=new elementorFrontend.modules.StretchElement({element:this.$element})},stretch:function(){this.$element.hasClass("elementor-section-stretched")&&(this.stretchElement.setSettings("selectors.container",elementorFrontend.getGeneralSettings("elementor_stretched_section_container")||window),this.stretchElement.stretch())},onInit:function(){i.prototype.onInit.apply(this,arguments),this.initStretch();var e=this.$element.hasClass("elementor-section-stretched");(elementorFrontend.isEditMode()||e)&&this.stretchElement.reset(),this.stretch()},onGeneralSettingsChange:function(e){"elementor_stretched_section_container"in e&&this.stretch()}}),s=i.extend({getDefaultSettings:function(){return{selectors:{container:"> .elementor-shape-%s"},svgURL:elementorFrontend.config.urls.assets+"shapes/"}},getDefaultElements:function(){var e={},t=this.getSettings("selectors");return e.$topContainer=this.$element.find(t.container.replace("%s","top")),e.$bottomContainer=this.$element.find(t.container.replace("%s","bottom")),e},buildSVG:function(e){var t="shape_divider_"+e,n=this.getElementSettings(t),i=this.elements["$"+e+"Container"];if(i.empty().attr("data-shape",n),n){var o=n;this.getElementSettings(t+"_negative")&&(o+="-negative");var r=this.getSettings("svgURL")+o+".svg";jQuery.get(r,function(e){i.append(e.childNodes[0])}),this.setNegative(e)}},setNegative:function(e){this.elements["$"+e+"Container"].attr("data-negative",!!this.getElementSettings("shape_divider_"+e+"_negative"))},onInit:function(){var t=this;i.prototype.onInit.apply(t,arguments),["top","bottom"].forEach(function(e){t.getElementSettings("shape_divider_"+e)&&t.buildSVG(e)})},onElementChange:function(e){var t=e.match(/^shape_divider_(top|bottom)$/);if(t)this.buildSVG(t[1]);else{var n=e.match(/^shape_divider_(top|bottom)_negative$/);n&&(this.buildSVG(n[1]),this.setNegative(n[1]))}}});t.exports=function(e){(elementorFrontend.isEditMode()||e.hasClass("elementor-section-stretched"))&&new r({$element:e}),elementorFrontend.isEditMode()&&new s({$element:e}),new o({$element:e})}},{"elementor-frontend/handler-module":3}],12:[function(e,t,n){var i=e("elementor-frontend/handlers/base-tabs");t.exports=function(e){new i({$element:e,toggleSelf:!1})}},{"elementor-frontend/handlers/base-tabs":6}],13:[function(e,t,n){var i,o=e("elementor-frontend/handler-module");i=o.extend({dropCapLetter:"",getDefaultSettings:function(){return{selectors:{paragraph:"p:first"},classes:{dropCap:"elementor-drop-cap",dropCapLetter:"elementor-drop-cap-letter"}}},getDefaultElements:function(){var e=this.getSettings("selectors"),t=this.getSettings("classes"),n=jQuery("<span>",{class:t.dropCap}),i=jQuery("<span>",{class:t.dropCapLetter});return n.append(i),{$paragraph:this.$element.find(e.paragraph),$dropCap:n,$dropCapLetter:i}},getElementName:function(){return"text-editor"},wrapDropCap:function(){if(this.getElementSettings("drop_cap")){var e=this.elements.$paragraph;if(e.length){var t=e.html().replace(/ /g," "),n=t.match(/^ *([^ ] ?)/);if(n){var i=n[1],o=i.trim();if("<"!==o){this.dropCapLetter=i,this.elements.$dropCapLetter.text(o);var r=t.slice(i.length).replace(/^ */,function(e){return new Array(e.length+1).join(" ")});e.html(r).prepend(this.elements.$dropCap)}}}}else this.dropCapLetter&&(this.elements.$dropCap.remove(),this.elements.$paragraph.prepend(this.dropCapLetter),this.dropCapLetter="")},onInit:function(){o.prototype.onInit.apply(this,arguments),this.wrapDropCap()},onElementChange:function(e){"drop_cap"===e&&this.wrapDropCap()}}),t.exports=function(e){new i({$element:e})}},{"elementor-frontend/handler-module":3}],14:[function(e,t,n){var i=e("elementor-frontend/handlers/base-tabs");t.exports=function(e){new i({$element:e,showTabFn:"slideDown",hideTabFn:"slideUp",hidePrevious:!1,autoExpand:"editor"})}},{"elementor-frontend/handlers/base-tabs":6}],15:[function(e,t,n){var i,o=e("elementor-frontend/handler-module");i=o.extend({getDefaultSettings:function(){return{selectors:{imageOverlay:".elementor-custom-embed-image-overlay",videoWrapper:".elementor-wrapper",videoFrame:"iframe"}}},getDefaultElements:function(){var e=this.getSettings("selectors"),t={$imageOverlay:this.$element.find(e.imageOverlay),$videoWrapper:this.$element.find(e.videoWrapper)};return t.$videoFrame=t.$videoWrapper.find(e.videoFrame),t},getLightBox:function(){return elementorFrontend.utils.lightbox},handleVideo:function(){this.getElementSettings("lightbox")||(this.elements.$imageOverlay.remove(),this.playVideo())},playVideo:function(){var e=this.elements.$videoFrame,t=e[0].src.replace("&autoplay=0","");e[0].src=t+"&autoplay=1"},animateVideo:function(){this.getLightBox().setEntranceAnimation(this.getElementSettings("lightbox_content_animation"))},handleAspectRatio:function(){this.getLightBox().setVideoAspectRatio(this.getElementSettings("aspect_ratio"))},bindEvents:function(){this.elements.$imageOverlay.on("click",this.handleVideo)},onElementChange:function(e){if("lightbox_content_animation"!==e){var t=this.getElementSettings("lightbox");"lightbox"!==e||t?"aspect_ratio"===e&&t&&this.handleAspectRatio():this.getLightBox().getModal().hide()}else this.animateVideo()}}),t.exports=function(e){new i({$element:e})}},{"elementor-frontend/handler-module":3}],16:[function(e,t,n){t.exports=function(e,t){elementorFrontend.isEditMode()&&(e.hasClass("elementor-widget-edit-disabled")||e.find(".elementor-element").each(function(){elementorFrontend.elementsHandler.runReadyTrigger(t(this))}))}},{}],17:[function(e,t,n){var i=e("../../utils/view-module");t.exports=i.extend({getDefaultSettings:function(){return{element:null,direction:elementorFrontend.config.is_rtl?"right":"left",selectors:{container:window}}},getDefaultElements:function(){return{$element:jQuery(this.getSettings("element"))}},stretch:function(){var e,t=this.getSettings("selectors.container");try{e=jQuery(t)}catch(e){}e&&e.length||(e=jQuery(this.getDefaultSettings().selectors.container));var n=this.elements.$element,i=window!==e[0];this.reset();var o=e.outerWidth(),r=n.outerWidth(),s=n.offset().left,a=s;if(i){var l=e.offset().left;a=l<s?s-l:0}elementorFrontend.config.is_rtl&&(a=o-(r+a));var d={};d.width=o+"px",d[this.getSettings("direction")]=-a+"px",n.css(d)},reset:function(){var e={width:""};e[this.getSettings("direction")]="",this.elements.$element.css(e)}})},{"../../utils/view-module":25}],18:[function(e,t,n){var i=e("../../utils/view-module");t.exports=i.extend({getDefaultSettings:function(){return{scrollDuration:500,selectors:{links:'a[href*="#"]',targets:".elementor-element, .elementor-menu-anchor",scrollable:"html, body"}}},getDefaultElements:function(){return{$scrollable:jQuery(this.getSettings("selectors").scrollable)}},bindEvents:function(){elementorFrontend.getElements("$document").on("click",this.getSettings("selectors.links"),this.handleAnchorLinks)},handleAnchorLinks:function(e){var t=e.currentTarget,n=location.pathname===t.pathname;if(location.hostname===t.hostname&&n&&!(t.hash.length<2)){var i=jQuery(t.hash).filter(this.getSettings("selectors.targets"));if(i.length){var o=i.offset().top,r=elementorFrontend.getElements("$wpAdminBar"),s=jQuery(".elementor-sticky--active");0<r.length&&(o-=r.height()),0<s.length&&(o-=Math.max.apply(null,s.map(function(){return jQuery(this).height()}).get())),e.preventDefault(),o=elementorFrontend.hooks.applyFilters("frontend/handlers/menu_anchor/scroll_top_distance",o),this.elements.$scrollable.animate({scrollTop:o},this.getSettings("scrollDuration"),"linear")}}},onInit:function(){i.prototype.onInit.apply(this,arguments),this.bindEvents()}})},{"../../utils/view-module":25}],19:[function(e,t,n){var i,o=e("../../utils/view-module");i=o.extend({oldAspectRatio:null,oldAnimation:null,swiper:null,getDefaultSettings:function(){return{classes:{aspectRatio:"elementor-aspect-ratio-%s",item:"elementor-lightbox-item",image:"elementor-lightbox-image",videoContainer:"elementor-video-container",videoWrapper:"elementor-fit-aspect-ratio",playButton:"elementor-custom-embed-play",playButtonIcon:"fa",playing:"elementor-playing",hidden:"elementor-hidden",invisible:"elementor-invisible",preventClose:"elementor-lightbox-prevent-close",slideshow:{container:"swiper-container",slidesWrapper:"swiper-wrapper",prevButton:"elementor-swiper-button elementor-swiper-button-prev",nextButton:"elementor-swiper-button elementor-swiper-button-next",prevButtonIcon:"eicon-chevron-left",nextButtonIcon:"eicon-chevron-right",slide:"swiper-slide"}},selectors:{links:"a, [data-elementor-lightbox]",slideshow:{activeSlide:".swiper-slide-active",prevSlide:".swiper-slide-prev",nextSlide:".swiper-slide-next"}},modalOptions:{id:"elementor-lightbox",entranceAnimation:"zoomIn",videoAspectRatio:169,position:{enable:!1}}}},getModal:function(){return i.modal||this.initModal(),i.modal},initModal:function(){var e=i.modal=elementorFrontend.getDialogsManager().createWidget("lightbox",{className:"elementor-lightbox",closeButton:!0,closeButtonClass:"eicon-close",selectors:{preventClose:"."+this.getSettings("classes.preventClose")},hide:{onClick:!0}});e.on("hide",function(){e.setMessage("")})},showModal:function(e){var t=this,n=t.getDefaultSettings().modalOptions;t.setSettings("modalOptions",jQuery.extend(n,e.modalOptions));var i=t.getModal();switch(i.setID(t.getSettings("modalOptions.id")),i.onShow=function(){DialogsManager.getWidgetType("lightbox").prototype.onShow.apply(i,arguments),setTimeout(function(){t.setEntranceAnimation()},10)},i.onHide=function(){DialogsManager.getWidgetType("lightbox").prototype.onHide.apply(i,arguments),i.getElements("widgetContent").removeClass("animated")},e.type){case"image":t.setImageContent(e.url);break;case"video":t.setVideoContent(e.url);break;case"slideshow":t.setSlideshowContent(e.slideshow);break;default:t.setHTMLContent(e.html)}i.show()},setHTMLContent:function(e){this.getModal().setMessage(e)},setImageContent:function(e){var t=this.getSettings("classes"),n=jQuery("<div>",{class:t.item}),i=jQuery("<img>",{src:e,class:t.image+" "+t.preventClose});n.append(i),this.getModal().setMessage(n)},setVideoContent:function(e){e=e.replace("&autoplay=0","")+"&autoplay=1";var t=this.getSettings("classes"),n=jQuery("<div>",{class:t.videoContainer}),i=jQuery("<div>",{class:t.videoWrapper}),o=jQuery("<iframe>",{src:e,allowfullscreen:1}),r=this.getModal();n.append(i),i.append(o),r.setMessage(n),this.setVideoAspectRatio();var s=r.onHide;r.onHide=function(){s(),r.getElements("message").removeClass("elementor-fit-aspect-ratio")}},setSlideshowContent:function(t){var s=jQuery,n=this,a=n.getSettings("classes"),l=a.slideshow,i=s("<div>",{class:l.container}),d=s("<div>",{class:l.slidesWrapper}),o=s("<div>",{class:l.prevButton+" "+a.preventClose}).html(s("<i>",{class:l.prevButtonIcon})),r=s("<div>",{class:l.nextButton+" "+a.preventClose}).html(s("<i>",{class:l.nextButtonIcon}));t.slides.forEach(function(e){var t=l.slide+" "+a.item;e.video&&(t+=" "+a.video);var n=s("<div>",{class:t});if(e.video){n.attr("data-elementor-slideshow-video",e.video);var i=s("<div>",{class:a.playButton}).html(s("<i>",{class:a.playButtonIcon}));n.append(i)}else{var o=s("<div>",{class:"swiper-zoom-container"}),r=s("<img>",{class:a.image+" "+a.preventClose}).attr("src",e.image);o.append(r),n.append(o)}d.append(n)}),i.append(d,o,r);var e=n.getModal();e.setMessage(i);var c=e.onShow;e.onShow=function(){c();var e={prevButton:o,nextButton:r,paginationClickable:!0,grabCursor:!0,onSlideChangeEnd:n.onSlideChange,runCallbacksOnInit:!1,loop:!0,keyboardControl:!0};t.swiper&&s.extend(e,t.swiper),n.swiper=new Swiper(i,e),n.setVideoAspectRatio(),n.playSlideVideo()}},setVideoAspectRatio:function(e){e=e||this.getSettings("modalOptions.videoAspectRatio");var t=this.getModal().getElements("widgetContent"),n=this.oldAspectRatio,i=this.getSettings("classes.aspectRatio");this.oldAspectRatio=e,n&&t.removeClass(i.replace("%s",n)),e&&t.addClass(i.replace("%s",e))},getSlide:function(e){return this.swiper.slides.filter(this.getSettings("selectors.slideshow."+e+"Slide"))},playSlideVideo:function(){var e=this.getSlide("active"),t=e.data("elementor-slideshow-video");if(t){var n=this.getSettings("classes"),i=jQuery("<div>",{class:n.videoContainer+" "+n.invisible}),o=jQuery("<div>",{class:n.videoWrapper}),r=jQuery("<iframe>",{src:t}),s=e.children("."+n.playButton);i.append(o),o.append(r),e.append(i),s.addClass(n.playing).removeClass(n.hidden),r.on("load",function(){s.addClass(n.hidden),i.removeClass(n.invisible)})}},setEntranceAnimation:function(e){e=e||this.getSettings("modalOptions.entranceAnimation");var t=this.getModal().getElements("message");this.oldAnimation&&t.removeClass(this.oldAnimation),(this.oldAnimation=e)&&t.addClass("animated "+e)},isLightboxLink:function(e){if("A"===e.tagName&&!/\.(png|jpe?g|gif|svg)$/i.test(e.href))return!1;var t=elementorFrontend.getGeneralSettings("elementor_global_image_lightbox"),n=e.dataset.elementorOpenLightbox;return"yes"===n||t&&"no"!==n},openLink:function(e){var t=e.currentTarget,n=jQuery(e.target),i=elementorFrontend.isEditMode(),o=!!n.closest("#elementor").length;if(this.isLightboxLink(t)){if(e.preventDefault(),!elementorFrontend.isEditMode()||elementorFrontend.getGeneralSettings("elementor_enable_lightbox_in_editor")){var r={};if(t.dataset.elementorLightbox&&(r=JSON.parse(t.dataset.elementorLightbox)),r.type&&"slideshow"!==r.type)this.showModal(r);else if(t.dataset.elementorLightboxSlideshow){var s=t.dataset.elementorLightboxSlideshow,a=jQuery(this.getSettings("selectors.links")).filter(function(){return s===this.dataset.elementorLightboxSlideshow}),l=[],d={};a.each(function(){if(!d[this.href]){d[this.href]=!0;var e=this.dataset.elementorLightboxIndex;void 0===e&&(e=a.index(this));var t={image:this.href,index:e};this.dataset.elementorLightboxVideo&&(t.video=this.dataset.elementorLightboxVideo),l.push(t)}}),l.sort(function(e,t){return e.index-t.index});var c=t.dataset.elementorLightboxIndex;void 0===c&&(c=a.index(t)),this.showModal({type:"slideshow",modalOptions:{id:"elementor-lightbox-slideshow-"+s},slideshow:{slides:l,swiper:{initialSlide:+c}}})}else this.showModal({type:"image",url:t.href})}}else i&&o&&e.preventDefault()},bindEvents:function(){elementorFrontend.getElements("$document").on("click",this.getSettings("selectors.links"),this.openLink)},onInit:function(){o.prototype.onInit.apply(this,arguments),elementorFrontend.isEditMode()&&elementor.settings.general.model.on("change",this.onGeneralSettingsChange)},onGeneralSettingsChange:function(e){"elementor_lightbox_content_animation"in e.changed&&(this.setSettings("modalOptions.entranceAnimation",e.changed.elementor_lightbox_content_animation),this.setEntranceAnimation())},onSlideChange:function(){this.getSlide("prev").add(this.getSlide("next")).add(this.getSlide("active")).find("."+this.getSettings("classes.videoWrapper")).remove(),this.playSlideVideo()}}),t.exports=i},{"../../utils/view-module":25}],20:[function(e,t,n){var i=e("../../utils/view-module");t.exports=i.extend({getDefaultSettings:function(){return{isInserted:!1,APISrc:"https://www.youtube.com/iframe_api",selectors:{firstScript:"script:first"}}},getDefaultElements:function(){return{$firstScript:jQuery(this.getSettings("selectors.firstScript"))}},insertYTAPI:function(){this.setSettings("isInserted",!0),this.elements.$firstScript.before(jQuery("<script>",{src:this.getSettings("APISrc")}))},onYoutubeApiReady:function(e){var t=this;t.getSettings("IsInserted")||t.insertYTAPI(),window.YT&&YT.loaded?e(YT):setTimeout(function(){t.onYoutubeApiReady(e)},350)},getYoutubeIDFromURL:function(e){var t=e.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^?&"'>]+)/);return t&&t[1]}})},{"../../utils/view-module":25}],21:[function(e,t,n){"use strict";t.exports=function(){var o,n=Array.prototype.slice,l={actions:{},filters:{}};function i(e,t,n,i){var o,r,s;if(l[e][t])if(n)if(o=l[e][t],i)for(s=o.length;s--;)(r=o[s]).callback===n&&r.context===i&&o.splice(s,1);else for(s=o.length;s--;)o[s].callback===n&&o.splice(s,1);else l[e][t]=[]}function r(e,t,n,i,o){var r={callback:n,priority:i,context:o},s=l[e][t];if(s){var a=!1;if(jQuery.each(s,function(){if(this.callback===n)return!(a=!0)}),a)return;s.push(r),s=function(e){for(var t,n,i,o=1,r=e.length;o<r;o++){for(t=e[o],n=o;(i=e[n-1])&&i.priority>t.priority;)e[n]=e[n-1],--n;e[n]=t}return e}(s)}else s=[r];l[e][t]=s}function s(e,t,n){var i,o,r=l[e][t];if(!r)return"filters"===e&&n[0];if(o=r.length,"filters"===e)for(i=0;i<o;i++)n[0]=r[i].callback.apply(r[i].context,n);else for(i=0;i<o;i++)r[i].callback.apply(r[i].context,n);return"filters"!==e||n[0]}return o={removeFilter:function(e,t){return"string"==typeof e&&i("filters",e,t),o},applyFilters:function(){var e=n.call(arguments),t=e.shift();return"string"==typeof t?s("filters",t,e):o},addFilter:function(e,t,n,i){return"string"==typeof e&&"function"==typeof t&&r("filters",e,t,n=parseInt(n||10,10),i),o},removeAction:function(e,t){return"string"==typeof e&&i("actions",e,t),o},doAction:function(){var e=n.call(arguments),t=e.shift();return"string"==typeof t&&s("actions",t,e),o},addAction:function(e,t,n,i){return"string"==typeof e&&"function"==typeof t&&r("actions",e,t,n=parseInt(n||10,10),i),o}}}},{}],22:[function(e,t,n){t.exports=new function(){var i={},t=function(e){var t=i[e.which];t&&jQuery.each(t,function(){this.isWorthHandling&&!this.isWorthHandling(e)||!this.allowAltKey&&e.altKey||(e.preventDefault(),this.handle(e))})};this.isControlEvent=function(e){return e[-1!==navigator.userAgent.indexOf("Mac OS X")?"metaKey":"ctrlKey"]},this.addHotKeyHandler=function(e,t,n){i[e]||(i[e]={}),i[e][t]=n},this.bindListener=function(e){e.on("keydown",t)}}},{}],23:[function(e,t,n){var i=e("./view-module");t.exports=i.extend({getDefaultSettings:function(){return{container:null,items:null,columnsCount:3,verticalSpaceBetween:30}},getDefaultElements:function(){return{$container:jQuery(this.getSettings("container")),$items:jQuery(this.getSettings("items"))}},run:function(){var a=[],l=this.elements.$container.position().top,d=this.getSettings(),c=d.columnsCount;l+=parseInt(this.elements.$container.css("margin-top"),10),this.elements.$items.each(function(e){var t=Math.floor(e/c),n=jQuery(this),i=n[0].getBoundingClientRect().height+d.verticalSpaceBetween;if(t){var o=n.position(),r=e%c,s=o.top-l-a[r];s-=parseInt(n.css("margin-top"),10),s*=-1,n.css("margin-top",s+"px"),a[r]+=i}else a.push(i)})}})},{"./view-module":25}],24:[function(e,t,n){var r=function(){var r,s=jQuery,t=arguments,a=this,o={};this.getItems=function(e,t){if(t){var n=t.split("."),i=n.splice(0,1);if(!n.length)return e[i];if(!e[i])return;return this.getItems(e[i],n.join("."))}return e},this.getSettings=function(e){return this.getItems(r,e)},this.setSettings=function(e,t,n){if(n||(n=r),"object"==typeof e)return s.extend(n,e),a;var i=e.split("."),o=i.splice(0,1);return i.length?(n[o]||(n[o]={}),a.setSettings(i.join("."),t,n[o])):(n[o]=t,a)},this.forceMethodImplementation=function(e){var t=e.callee.name;throw new ReferenceError("The method "+t+" must to be implemented in the inheritor child.")},this.on=function(e,t){return"object"==typeof e?s.each(e,function(e){a.on(e,this)}):e.split(" ").forEach(function(e){o[e]||(o[e]=[]),o[e].push(t)}),a},this.off=function(e,t){if(!o[e])return a;if(!t)return delete o[e],a;var n=o[e].indexOf(t);return-1!==n&&delete o[e][n],a},this.trigger=function(e){var t="on"+e[0].toUpperCase()+e.slice(1),n=Array.prototype.slice.call(arguments,1);a[t]&&a[t].apply(a,n);var i=o[e];return i&&s.each(i,function(e,t){t.apply(a,n)}),a},a.__construct.apply(a,t),s.each(a,function(e){var t=a[e];"function"==typeof t&&(a[e]=function(){return t.apply(a,arguments)})}),function(){r=a.getDefaultSettings();var e=t[0];e&&s.extend(r,e)}(),a.trigger("init")};r.prototype.__construct=function(){},r.prototype.getDefaultSettings=function(){return{}},r.extendsCount=0,r.extend=function(e){var t=jQuery,n=this,i=function(){return n.apply(this,arguments)};t.extend(i,n),(i.prototype=Object.create(t.extend({},n.prototype,e))).constructor=i;var o=++r.extendsCount;return i.prototype.getConstructorID=function(){return o},i.__super__=n.prototype,i},t.exports=r},{}],25:[function(e,t,n){var i;i=e("./module").extend({elements:null,getDefaultElements:function(){return{}},bindEvents:function(){},onInit:function(){this.initElements(),this.bindEvents()},initElements:function(){this.elements=this.getDefaultElements()}}),t.exports=i},{"./module":24}]},{},[2]);
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+!function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},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 i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},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=167)}({1:function(e,t,n){"use strict";var i;i=n(2).extend({elements:null,getDefaultElements:function(){return{}},bindEvents:function(){},onInit:function(){this.initElements(),this.bindEvents()},initElements:function(){this.elements=this.getDefaultElements()}}),e.exports=i},16:function(e,t,n){"use strict";var i=n(1);e.exports=i.extend({getDefaultSettings:function(){return{container:null,items:null,columnsCount:3,verticalSpaceBetween:30}},getDefaultElements:function(){return{$container:jQuery(this.getSettings("container")),$items:jQuery(this.getSettings("items"))}},run:function(){var e=[],t=this.elements.$container.position().top,n=this.getSettings(),i=n.columnsCount;t+=parseInt(this.elements.$container.css("margin-top"),10),this.elements.$items.each(function(o){var s=Math.floor(o/i),r=jQuery(this),a=r[0].getBoundingClientRect().height+n.verticalSpaceBetween;if(s){var l=r.position(),c=o%i,d=l.top-t-e[c];d-=parseInt(r.css("margin-top"),10),d*=-1,r.css("margin-top",d+"px"),e[c]+=a}else e.push(a)})}})},167:function(e,t,n){"use strict";!function(e){var t={},i=n(20),o=n(5),s=n(168),r=n(180),a=n(181),l=n(182);window.elementorFrontend=new function(){var c,d=this;this.config=elementorFrontendConfig,this.Module=o;var u=function(){t.$body.attr("data-elementor-device-mode",d.getCurrentDeviceMode())},h=function(e,t){var n=d.isEditMode()?elementor.settings[e].model.attributes:d.config.settings[e];return t?n[t]:n};this.init=function(){d.hooks=new i,t.window=window,t.$window=e(window),t.$document=e(document),t.$body=e("body"),t.$elementor=t.$document.find(".elementor"),t.$wpAdminBar=t.$document.find("#wpadminbar"),function(){if("Microsoft Internet Explorer"===navigator.appName||navigator.userAgent.match(/Trident/g)||navigator.userAgent.match(/MSIE/g)||navigator.userAgent.match(/rv:11/)){t.$body.addClass("elementor-msie");var e=jQuery("#elementor-frontend-css"),n=e[0].outerHTML.replace("css/frontend","css/frontend-msie").replace("elementor-frontend-css","elementor-frontend-msie-css");e.after(n)}}(),t.$window.on("resize",u),u(),t.$window.trigger("elementor/frontend/init"),d.isEditMode()||(d.hotKeys=n(17),d.hotKeys.bindListener(t.$window)),d.utils={youtube:new r,anchors:new a,lightbox:new l},d.modules={StretchElement:n(183),Masonry:n(16)},d.elementsHandler=new s(e)},this.getElements=function(e){return e?t[e]:t},this.getDialogsManager=function(){return c||(c=new DialogsManager.Instance),c},this.getPageSettings=function(e){return h("page",e)},this.getGeneralSettings=function(e){return h("general",e)},this.isEditMode=function(){return d.config.isEditMode},this.throttle=function(e,t){var n,i,o,s,r=0,a=function(){r=Date.now(),n=null,s=e.apply(i,o),n||(i=o=null)};return function(){var l=Date.now(),c=t-(l-r);return i=this,o=arguments,c<=0||c>t?(n&&(clearTimeout(n),n=null),r=l,s=e.apply(i,o),n||(i=o=null)):n||(n=setTimeout(a,c)),s}},this.addListenerOnce=function(e,t,n,i){if(i||(i=d.getElements("$window")),d.isEditMode())if(this.removeListeners(e,t,i),i instanceof jQuery){var o=t+"."+e;i.on(o,n)}else i.on(t,n,e);else i.on(t,n)},this.removeListeners=function(e,t,n,i){if(i||(i=d.getElements("$window")),i instanceof jQuery){var o=t+"."+e;i.off(o,n)}else i.off(t,n,e)},this.getCurrentDeviceMode=function(){return getComputedStyle(t.$elementor[0],":after").content.replace(/"/g,"")},this.waypoint=function(t,n,i){return i=e.extend({offset:"100%",triggerOnce:!0},i),t.elementorWaypoint(function(){var e=this.element||this,t=n.apply(e,arguments);return i.triggerOnce&&this.destroy&&this.destroy(),t},i)}}}(jQuery),elementorFrontend.isEditMode()||jQuery(elementorFrontend.init)},168:function(e,t,n){"use strict";var i;i=function(e){var t=this,i={section:n(169),"accordion.default":n(170),"alert.default":n(171),"counter.default":n(172),"progress.default":n(173),"tabs.default":n(174),"toggle.default":n(175),"video.default":n(176),"image-carousel.default":n(177),"text-editor.default":n(178)};this.initHandlers=function(){elementorFrontend.hooks.addAction("frontend/element_ready/global",n(179)),e.each(i,function(e,t){elementorFrontend.hooks.addAction("frontend/element_ready/"+e,t)}),(elementorFrontend.isEditMode()?jQuery(".elementor-element",".elementor:not(.elementor-edit-mode)"):e(".elementor-element")).each(function(){t.runReadyTrigger(e(this))})},this.getHandlers=function(e){return e?i[e]:i},this.runReadyTrigger=function(t){var n=t.attr("data-element_type");n&&(t=jQuery(t),elementorFrontend.hooks.doAction("frontend/element_ready/global",t,e),-1===["section","column"].indexOf(n)&&elementorFrontend.hooks.doAction("frontend/element_ready/widget",t,e),elementorFrontend.hooks.doAction("frontend/element_ready/"+n,t,e))},elementorFrontend.isEditMode()||t.initHandlers()},e.exports=i},169:function(e,t,n){"use strict";var i=n(5),o=i.extend({player:null,isYTVideo:null,getDefaultSettings:function(){return{selectors:{backgroundVideoContainer:".elementor-background-video-container",backgroundVideoEmbed:".elementor-background-video-embed",backgroundVideoHosted:".elementor-background-video-hosted"}}},getDefaultElements:function(){var e=this.getSettings("selectors"),t={$backgroundVideoContainer:this.$element.find(e.backgroundVideoContainer)};return t.$backgroundVideoEmbed=t.$backgroundVideoContainer.children(e.backgroundVideoEmbed),t.$backgroundVideoHosted=t.$backgroundVideoContainer.children(e.backgroundVideoHosted),t},calcVideosSize:function(){var e=this.elements.$backgroundVideoContainer.outerWidth(),t=this.elements.$backgroundVideoContainer.outerHeight(),n="16:9".split(":"),i=n[0]/n[1],o=e/t>i;return{width:o?e:t*i,height:o?e/i:t}},changeVideoSize:function(){var e=this.isYTVideo?jQuery(this.player.getIframe()):this.elements.$backgroundVideoHosted,t=this.calcVideosSize();e.width(t.width).height(t.height)},startVideoLoop:function(){var e=this;if(e.player.getIframe().contentWindow){var t=e.getElementSettings(),n=t.background_video_start||0,i=t.background_video_end;if(e.player.seekTo(n),i)setTimeout(function(){e.startVideoLoop()},1e3*(i-n+1))}},prepareYTVideo:function(e,t){var n=this,i=n.elements.$backgroundVideoContainer,o=n.getElementSettings(),s=e.PlayerState.PLAYING;window.chrome&&(s=e.PlayerState.UNSTARTED),i.addClass("elementor-loading elementor-invisible"),n.player=new e.Player(n.elements.$backgroundVideoEmbed[0],{videoId:t,events:{onReady:function(){n.player.mute(),n.changeVideoSize(),n.startVideoLoop(),n.player.playVideo()},onStateChange:function(t){switch(t.data){case s:i.removeClass("elementor-invisible elementor-loading");break;case e.PlayerState.ENDED:n.player.seekTo(o.background_video_start||0)}}},playerVars:{controls:0,showinfo:0,rel:0}}),elementorFrontend.getElements("$window").on("resize",n.changeVideoSize)},activate:function(){var e=this,t=e.getElementSettings("background_video_link"),n=elementorFrontend.utils.youtube.getYoutubeIDFromURL(t);e.isYTVideo=!!n,n?elementorFrontend.utils.youtube.onYoutubeApiReady(function(t){setTimeout(function(){e.prepareYTVideo(t,n)},1)}):e.elements.$backgroundVideoHosted.attr("src",t).one("canplay",e.changeVideoSize)},deactivate:function(){this.isYTVideo&&this.player.getIframe()?this.player.destroy():this.elements.$backgroundVideoHosted.removeAttr("src")},run:function(){var e=this.getElementSettings();"video"===e.background_background&&e.background_video_link?this.activate():this.deactivate()},onInit:function(){i.prototype.onInit.apply(this,arguments),this.run()},onElementChange:function(e){"background_background"===e&&this.run()}}),s=i.extend({stretchElement:null,bindEvents:function(){var e=this.getUniqueHandlerID();elementorFrontend.addListenerOnce(e,"resize",this.stretch),elementorFrontend.addListenerOnce(e,"sticky:stick",this.stretch,this.$element),elementorFrontend.addListenerOnce(e,"sticky:unstick",this.stretch,this.$element)},unbindEvents:function(){elementorFrontend.removeListeners(this.getUniqueHandlerID(),"resize",this.stretch)},initStretch:function(){this.stretchElement=new elementorFrontend.modules.StretchElement({element:this.$element,selectors:{container:this.getStretchContainer()}})},getStretchContainer:function(){return elementorFrontend.getGeneralSettings("elementor_stretched_section_container")||window},stretch:function(){this.getElementSettings("stretch_section")&&this.stretchElement.stretch()},onInit:function(){i.prototype.onInit.apply(this,arguments),this.initStretch(),this.stretch()},onElementChange:function(e){"stretch_section"===e&&(this.getElementSettings("stretch_section")?this.stretch():this.stretchElement.reset())},onGeneralSettingsChange:function(e){"elementor_stretched_section_container"in e&&(this.stretchElement.setSettings("selectors.container",this.getStretchContainer()),this.stretch())}}),r=i.extend({getDefaultSettings:function(){return{selectors:{container:"> .elementor-shape-%s"},svgURL:elementorFrontend.config.urls.assets+"shapes/"}},getDefaultElements:function(){var e={},t=this.getSettings("selectors");return e.$topContainer=this.$element.find(t.container.replace("%s","top")),e.$bottomContainer=this.$element.find(t.container.replace("%s","bottom")),e},buildSVG:function(e){var t="shape_divider_"+e,n=this.getElementSettings(t),i=this.elements["$"+e+"Container"];if(i.empty().attr("data-shape",n),n){var o=n;this.getElementSettings(t+"_negative")&&(o+="-negative");var s=this.getSettings("svgURL")+o+".svg";jQuery.get(s,function(e){i.append(e.childNodes[0])}),this.setNegative(e)}},setNegative:function(e){this.elements["$"+e+"Container"].attr("data-negative",!!this.getElementSettings("shape_divider_"+e+"_negative"))},onInit:function(){var e=this;i.prototype.onInit.apply(e,arguments),["top","bottom"].forEach(function(t){e.getElementSettings("shape_divider_"+t)&&e.buildSVG(t)})},onElementChange:function(e){var t=e.match(/^shape_divider_(top|bottom)$/);if(t)this.buildSVG(t[1]);else{var n=e.match(/^shape_divider_(top|bottom)_negative$/);n&&(this.buildSVG(n[1]),this.setNegative(n[1]))}}}),a=i.extend({isFirst:function(){return this.$element.is(".elementor-edit-mode .elementor-top-section:first")},getOffset:function(){return this.$element.offset().top},setHandlesPosition:function(){if(this.isFirst()){var e=this.getOffset(),t=this.$element.find("> .elementor-element-overlay > .elementor-editor-section-settings");e<25?(this.$element.addClass("elementor-section--handles-inside"),e<-5?t.css("top",-e):t.css("top","")):this.$element.removeClass("elementor-section--handles-inside")}},onInit:function(){this.setHandlesPosition(),this.$element.on("mouseenter",this.setHandlesPosition)}});e.exports=function(e){(elementorFrontend.isEditMode()||e.hasClass("elementor-section-stretched"))&&new s({$element:e}),elementorFrontend.isEditMode()&&(new r({$element:e}),new a({$element:e})),new o({$element:e})}},17:function(e,t,n){"use strict";e.exports=new function(){var e={},t=function(t){var n=e[t.which];n&&jQuery.each(n,function(){this.isWorthHandling&&!this.isWorthHandling(t)||!this.allowAltKey&&t.altKey||(t.preventDefault(),this.handle(t))})};this.isControlEvent=function(e){return e[elementor.envData.mac?"metaKey":"ctrlKey"]},this.addHotKeyHandler=function(t,n,i){e[t]||(e[t]={}),e[t][n]=i},this.bindListener=function(e){e.on("keydown",t)}}},170:function(e,t,n){"use strict";var i=n(22);e.exports=function(e){new i({$element:e,showTabFn:"slideDown",hideTabFn:"slideUp"})}},171:function(e,t,n){"use strict";e.exports=function(e,t){e.find(".elementor-alert-dismiss").on("click",function(){t(this).parent().fadeOut()})}},172:function(e,t,n){"use strict";e.exports=function(e,t){elementorFrontend.waypoint(e.find(".elementor-counter-number"),function(){var e=t(this),n=e.data(),i=n.toValue.toString().match(/\.(.*)/);i&&(n.rounding=i[1].length),e.numerator(n)})}},173:function(e,t,n){"use strict";e.exports=function(e,t){elementorFrontend.waypoint(e.find(".elementor-progress-bar"),function(){var e=t(this);e.css("width",e.data("max")+"%")})}},174:function(e,t,n){"use strict";var i=n(22);e.exports=function(e){new i({$element:e,toggleSelf:!1})}},175:function(e,t,n){"use strict";var i=n(22);e.exports=function(e){new i({$element:e,showTabFn:"slideDown",hideTabFn:"slideUp",hidePrevious:!1,autoExpand:"editor"})}},176:function(e,t,n){"use strict";var i,o=n(5);i=o.extend({getDefaultSettings:function(){return{selectors:{imageOverlay:".elementor-custom-embed-image-overlay",video:".elementor-video",videoIframe:".elementor-video-iframe"}}},getDefaultElements:function(){var e=this.getSettings("selectors");return{$imageOverlay:this.$element.find(e.imageOverlay),$video:this.$element.find(e.video),$videoIframe:this.$element.find(e.videoIframe)}},getLightBox:function(){return elementorFrontend.utils.lightbox},handleVideo:function(){this.getElementSettings("lightbox")||(this.elements.$imageOverlay.remove(),this.playVideo())},playVideo:function(){if(this.elements.$video.length)this.elements.$video[0].play();else{var e=this.elements.$videoIframe,t=e.data("lazy-load");t&&e.attr("src",t);var n=e[0].src.replace("&autoplay=0","");e[0].src=n+"&autoplay=1"}},animateVideo:function(){this.getLightBox().setEntranceAnimation(this.getElementSettings("lightbox_content_animation"))},handleAspectRatio:function(){this.getLightBox().setVideoAspectRatio(this.getElementSettings("aspect_ratio"))},bindEvents:function(){this.elements.$imageOverlay.on("click",this.handleVideo)},onElementChange:function(e){if("lightbox_content_animation"!==e){var t=this.getElementSettings("lightbox");"lightbox"!==e||t?"aspect_ratio"===e&&t&&this.handleAspectRatio():this.getLightBox().getModal().hide()}else this.animateVideo()}}),e.exports=function(e){new i({$element:e})}},177:function(e,t,n){"use strict";var i,o=n(5);i=o.extend({getDefaultSettings:function(){return{selectors:{carousel:".elementor-image-carousel"}}},getDefaultElements:function(){var e=this.getSettings("selectors");return{$carousel:this.$element.find(e.carousel)}},onInit:function(){o.prototype.onInit.apply(this,arguments);var e=this.getElementSettings(),t=+e.slides_to_show||3,n=1===t,i=elementorFrontend.config.breakpoints,s={slidesToShow:t,autoplay:"yes"===e.autoplay,autoplaySpeed:e.autoplay_speed,infinite:"yes"===e.infinite,pauseOnHover:"yes"===e.pause_on_hover,speed:e.speed,arrows:-1!==["arrows","both"].indexOf(e.navigation),dots:-1!==["dots","both"].indexOf(e.navigation),rtl:"rtl"===e.direction,responsive:[{breakpoint:i.lg,settings:{slidesToShow:+e.slides_to_show_tablet||(n?1:2),slidesToScroll:1}},{breakpoint:i.md,settings:{slidesToShow:+e.slides_to_show_mobile||1,slidesToScroll:1}}]};n?s.fade="fade"===e.effect:s.slidesToScroll=+e.slides_to_scroll,this.elements.$carousel.slick(s)}}),e.exports=function(e){new i({$element:e})}},178:function(e,t,n){"use strict";var i,o=n(5);i=o.extend({dropCapLetter:"",getDefaultSettings:function(){return{selectors:{paragraph:"p:first"},classes:{dropCap:"elementor-drop-cap",dropCapLetter:"elementor-drop-cap-letter"}}},getDefaultElements:function(){var e=this.getSettings("selectors"),t=this.getSettings("classes"),n=jQuery("<span>",{class:t.dropCap}),i=jQuery("<span>",{class:t.dropCapLetter});return n.append(i),{$paragraph:this.$element.find(e.paragraph),$dropCap:n,$dropCapLetter:i}},getElementName:function(){return"text-editor"},wrapDropCap:function(){if(this.getElementSettings("drop_cap")){var e=this.elements.$paragraph;if(e.length){var t=e.html().replace(/ /g," "),n=t.match(/^ *([^ ] ?)/);if(n){var i=n[1],o=i.trim();if("<"!==o){this.dropCapLetter=i,this.elements.$dropCapLetter.text(o);var s=t.slice(i.length).replace(/^ */,function(e){return new Array(e.length+1).join(" ")});e.html(s).prepend(this.elements.$dropCap)}}}}else this.dropCapLetter&&(this.elements.$dropCap.remove(),this.elements.$paragraph.prepend(this.dropCapLetter),this.dropCapLetter="")},onInit:function(){o.prototype.onInit.apply(this,arguments),this.wrapDropCap()},onElementChange:function(e){"drop_cap"===e&&this.wrapDropCap()}}),e.exports=function(e){new i({$element:e})}},179:function(e,t,n){"use strict";var i,o=n(5);i=o.extend({getElementName:function(){return"global"},animate:function(){var e=this.$element,t=this.getAnimation(),n=this.getElementSettings(),i=n._animation_delay||n.animation_delay||0;e.removeClass(t),setTimeout(function(){e.removeClass("elementor-invisible").addClass(t)},i)},getAnimation:function(){var e=this.getElementSettings();return e.animation||e._animation},onInit:function(){o.prototype.onInit.apply(this,arguments);var e=this.getAnimation();e&&(this.$element.removeClass(e),elementorFrontend.waypoint(this.$element,this.animate.bind(this)))},onElementChange:function(e){/^_?animation/.test(e)&&this.animate()}}),e.exports=function(e){new i({$element:e})}},180:function(e,t,n){"use strict";var i=n(1);e.exports=i.extend({getDefaultSettings:function(){return{isInserted:!1,APISrc:"https://www.youtube.com/iframe_api",selectors:{firstScript:"script:first"}}},getDefaultElements:function(){return{$firstScript:jQuery(this.getSettings("selectors.firstScript"))}},insertYTAPI:function(){this.setSettings("isInserted",!0),this.elements.$firstScript.before(jQuery("<script>",{src:this.getSettings("APISrc")}))},onYoutubeApiReady:function(e){var t=this;t.getSettings("IsInserted")||t.insertYTAPI(),window.YT&&YT.loaded?e(YT):setTimeout(function(){t.onYoutubeApiReady(e)},350)},getYoutubeIDFromURL:function(e){var t=e.match(/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^?&"'>]+)/);return t&&t[1]}})},181:function(e,t,n){"use strict";var i=n(1);e.exports=i.extend({getDefaultSettings:function(){return{scrollDuration:500,selectors:{links:'a[href*="#"]',targets:".elementor-element, .elementor-menu-anchor",scrollable:"html, body"}}},getDefaultElements:function(){return{$scrollable:jQuery(this.getSettings("selectors").scrollable)}},bindEvents:function(){elementorFrontend.getElements("$document").on("click",this.getSettings("selectors.links"),this.handleAnchorLinks)},handleAnchorLinks:function(e){var t=e.currentTarget,n=location.pathname===t.pathname;if(location.hostname===t.hostname&&n&&!(t.hash.length<2)){var i=jQuery(t.hash).filter(this.getSettings("selectors.targets"));if(i.length){var o=i.offset().top,s=elementorFrontend.getElements("$wpAdminBar"),r=jQuery(".elementor-sticky--active");s.length>0&&(o-=s.height()),r.length>0&&(o-=Math.max.apply(null,r.map(function(){return jQuery(this).outerHeight()}).get())),e.preventDefault(),o=elementorFrontend.hooks.applyFilters("frontend/handlers/menu_anchor/scroll_top_distance",o),this.elements.$scrollable.animate({scrollTop:o},this.getSettings("scrollDuration"),"linear")}}},onInit:function(){i.prototype.onInit.apply(this,arguments),this.bindEvents()}})},182:function(e,t,n){"use strict";var i,o=n(1);i=o.extend({oldAspectRatio:null,oldAnimation:null,swiper:null,getDefaultSettings:function(){return{classes:{aspectRatio:"elementor-aspect-ratio-%s",item:"elementor-lightbox-item",image:"elementor-lightbox-image",videoContainer:"elementor-video-container",videoWrapper:"elementor-fit-aspect-ratio",playButton:"elementor-custom-embed-play",playButtonIcon:"fa",playing:"elementor-playing",hidden:"elementor-hidden",invisible:"elementor-invisible",preventClose:"elementor-lightbox-prevent-close",slideshow:{container:"swiper-container",slidesWrapper:"swiper-wrapper",prevButton:"elementor-swiper-button elementor-swiper-button-prev",nextButton:"elementor-swiper-button elementor-swiper-button-next",prevButtonIcon:"eicon-chevron-left",nextButtonIcon:"eicon-chevron-right",slide:"swiper-slide"}},selectors:{links:"a, [data-elementor-lightbox]",slideshow:{activeSlide:".swiper-slide-active",prevSlide:".swiper-slide-prev",nextSlide:".swiper-slide-next"}},modalOptions:{id:"elementor-lightbox",entranceAnimation:"zoomIn",videoAspectRatio:169,position:{enable:!1}}}},getModal:function(){return i.modal||this.initModal(),i.modal},initModal:function(){var e=i.modal=elementorFrontend.getDialogsManager().createWidget("lightbox",{className:"elementor-lightbox",closeButton:!0,closeButtonClass:"eicon-close",selectors:{preventClose:"."+this.getSettings("classes.preventClose")},hide:{onClick:!0}});e.on("hide",function(){e.setMessage("")})},showModal:function(e){var t=this,n=t.getDefaultSettings().modalOptions;t.setSettings("modalOptions",jQuery.extend(n,e.modalOptions));var i=t.getModal();switch(i.setID(t.getSettings("modalOptions.id")),i.onShow=function(){DialogsManager.getWidgetType("lightbox").prototype.onShow.apply(i,arguments),setTimeout(function(){t.setEntranceAnimation()},10)},i.onHide=function(){DialogsManager.getWidgetType("lightbox").prototype.onHide.apply(i,arguments),i.getElements("widgetContent").removeClass("animated")},e.type){case"image":t.setImageContent(e.url);break;case"video":t.setVideoContent(e);break;case"slideshow":t.setSlideshowContent(e.slideshow);break;default:t.setHTMLContent(e.html)}i.show()},setHTMLContent:function(e){this.getModal().setMessage(e)},setImageContent:function(e){var t=this.getSettings("classes"),n=jQuery("<div>",{class:t.item}),i=jQuery("<img>",{src:e,class:t.image+" "+t.preventClose});n.append(i),this.getModal().setMessage(n)},setVideoContent:function(e){var t,n=this.getSettings("classes"),i=jQuery("<div>",{class:n.videoContainer}),o=jQuery("<div>",{class:n.videoWrapper}),s=this.getModal();if("hosted"===e.videoType){var r={src:e.url,autoplay:""};e.videoParams.forEach(function(e){r[e]=""}),t=jQuery("<video>",r)}else{var a=e.url.replace("&autoplay=0","")+"&autoplay=1";t=jQuery("<iframe>",{src:a,allowfullscreen:1})}i.append(o),o.append(t),s.setMessage(i),this.setVideoAspectRatio();var l=s.onHide;s.onHide=function(){l(),s.getElements("message").removeClass("elementor-fit-aspect-ratio")}},setSlideshowContent:function(e){var t=jQuery,n=this,i=n.getSettings("classes"),o=i.slideshow,s=t("<div>",{class:o.container}),r=t("<div>",{class:o.slidesWrapper}),a=t("<div>",{class:o.prevButton+" "+i.preventClose}).html(t("<i>",{class:o.prevButtonIcon})),l=t("<div>",{class:o.nextButton+" "+i.preventClose}).html(t("<i>",{class:o.nextButtonIcon}));e.slides.forEach(function(e){var n=o.slide+" "+i.item;e.video&&(n+=" "+i.video);var s=t("<div>",{class:n});if(e.video){s.attr("data-elementor-slideshow-video",e.video);var a=t("<div>",{class:i.playButton}).html(t("<i>",{class:i.playButtonIcon}));s.append(a)}else{var l=t("<div>",{class:"swiper-zoom-container"}),c=t("<img>",{class:i.image+" "+i.preventClose,src:e.image});l.append(c),s.append(l)}r.append(s)}),s.append(r,a,l);var c=n.getModal();c.setMessage(s);var d=c.onShow;c.onShow=function(){d();var i={navigation:{prevEl:a,nextEl:l},pagination:{clickable:!0},on:{slideChangeTransitionEnd:n.onSlideChange},grabCursor:!0,runCallbacksOnInit:!1,loop:!0,keyboard:!0};e.swiper&&t.extend(i,e.swiper),n.swiper=new Swiper(s,i),n.setVideoAspectRatio(),n.playSlideVideo()}},setVideoAspectRatio:function(e){e=e||this.getSettings("modalOptions.videoAspectRatio");var t=this.getModal().getElements("widgetContent"),n=this.oldAspectRatio,i=this.getSettings("classes.aspectRatio");this.oldAspectRatio=e,n&&t.removeClass(i.replace("%s",n)),e&&t.addClass(i.replace("%s",e))},getSlide:function(e){return jQuery(this.swiper.slides).filter(this.getSettings("selectors.slideshow."+e+"Slide"))},playSlideVideo:function(){var e=this.getSlide("active"),t=e.data("elementor-slideshow-video");if(t){var n=this.getSettings("classes"),i=jQuery("<div>",{class:n.videoContainer+" "+n.invisible}),o=jQuery("<div>",{class:n.videoWrapper}),s=jQuery("<iframe>",{src:t}),r=e.children("."+n.playButton);i.append(o),o.append(s),e.append(i),r.addClass(n.playing).removeClass(n.hidden),s.on("load",function(){r.addClass(n.hidden),i.removeClass(n.invisible)})}},setEntranceAnimation:function(e){e=e||this.getSettings("modalOptions.entranceAnimation");var t=this.getModal().getElements("message");this.oldAnimation&&t.removeClass(this.oldAnimation),this.oldAnimation=e,e&&t.addClass("animated "+e)},isLightboxLink:function(e){if("A"===e.tagName&&!/\.(png|jpe?g|gif|svg)$/i.test(e.href))return!1;var t=elementorFrontend.getGeneralSettings("elementor_global_image_lightbox"),n=e.dataset.elementorOpenLightbox;return"yes"===n||t&&"no"!==n},openLink:function(e){var t=e.currentTarget,n=jQuery(e.target),i=elementorFrontend.isEditMode(),o=!!n.closest("#elementor").length;if(this.isLightboxLink(t)){if(e.preventDefault(),!i||elementorFrontend.getGeneralSettings("elementor_enable_lightbox_in_editor")){var s={};if(t.dataset.elementorLightbox&&(s=JSON.parse(t.dataset.elementorLightbox)),s.type&&"slideshow"!==s.type)this.showModal(s);else if(t.dataset.elementorLightboxSlideshow){var r=t.dataset.elementorLightboxSlideshow,a=jQuery(this.getSettings("selectors.links")).filter(function(){return r===this.dataset.elementorLightboxSlideshow}),l=[],c={};a.each(function(){var e=this.dataset.elementorLightboxVideo,t=e||this.href;if(!c[t]){c[t]=!0;var n=this.dataset.elementorLightboxIndex;void 0===n&&(n=a.index(this));var i={image:this.href,index:n};e&&(i.video=e),l.push(i)}}),l.sort(function(e,t){return e.index-t.index});var d=t.dataset.elementorLightboxIndex;void 0===d&&(d=a.index(t)),this.showModal({type:"slideshow",modalOptions:{id:"elementor-lightbox-slideshow-"+r},slideshow:{slides:l,swiper:{initialSlide:+d}}})}else this.showModal({type:"image",url:t.href})}}else i&&o&&e.preventDefault()},bindEvents:function(){elementorFrontend.getElements("$document").on("click",this.getSettings("selectors.links"),this.openLink)},onInit:function(){o.prototype.onInit.apply(this,arguments),elementorFrontend.isEditMode()&&elementor.settings.general.model.on("change",this.onGeneralSettingsChange)},onGeneralSettingsChange:function(e){"elementor_lightbox_content_animation"in e.changed&&(this.setSettings("modalOptions.entranceAnimation",e.changed.elementor_lightbox_content_animation),this.setEntranceAnimation())},onSlideChange:function(){this.getSlide("prev").add(this.getSlide("next")).add(this.getSlide("active")).find("."+this.getSettings("classes.videoWrapper")).remove(),this.playSlideVideo()}}),e.exports=i},183:function(e,t,n){"use strict";var i=n(1);e.exports=i.extend({getDefaultSettings:function(){return{element:null,direction:elementorFrontend.config.is_rtl?"right":"left",selectors:{container:window}}},getDefaultElements:function(){return{$element:jQuery(this.getSettings("element"))}},stretch:function(){var e,t=this.getSettings("selectors.container");try{e=jQuery(t)}catch(e){}e&&e.length||(e=jQuery(this.getDefaultSettings().selectors.container)),this.reset();var n=this.elements.$element,i=e.outerWidth(),o=n.offset().left,s="fixed"===n.css("position"),r=s?0:o;if(window!==e[0]){var a=e.offset().left;s?r=a:o>a&&(r=o-a)}s||(elementorFrontend.config.is_rtl&&(r=i-(n.outerWidth()+r)),r=-r);var l={};l.width=i+"px",l[this.getSettings("direction")]=r+"px",n.css(l)},reset:function(){var e={width:""};e[this.getSettings("direction")]="",this.elements.$element.css(e)}})},2:function(e,t,n){"use strict";var i="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},o=function(){var e,t=jQuery,n=arguments,o=this,s={};this.getItems=function(e,t){if(t){var n=t.split("."),i=n.splice(0,1);if(!n.length)return e[i];if(!e[i])return;return this.getItems(e[i],n.join("."))}return e},this.getSettings=function(t){return this.getItems(e,t)},this.setSettings=function(n,s,r){if(r||(r=e),"object"===(void 0===n?"undefined":i(n)))return t.extend(r,n),o;var a=n.split("."),l=a.splice(0,1);return a.length?(r[l]||(r[l]={}),o.setSettings(a.join("."),s,r[l])):(r[l]=s,o)},this.forceMethodImplementation=function(e){var t=e.callee.name;throw new ReferenceError("The method "+t+" must to be implemented in the inheritor child.")},this.on=function(e,n){return"object"===(void 0===e?"undefined":i(e))?(t.each(e,function(e){o.on(e,this)}),o):(e.split(" ").forEach(function(e){s[e]||(s[e]=[]),s[e].push(n)}),o)},this.off=function(e,t){if(!s[e])return o;if(!t)return delete s[e],o;var n=s[e].indexOf(t);return-1!==n&&delete s[e][n],o},this.trigger=function(e){var n="on"+e[0].toUpperCase()+e.slice(1),i=Array.prototype.slice.call(arguments,1);o[n]&&o[n].apply(o,i);var r=s[e];return r?(t.each(r,function(e,t){t.apply(o,i)}),o):o},o.__construct.apply(o,n),t.each(o,function(e){var t=o[e];"function"==typeof t&&(o[e]=function(){return t.apply(o,arguments)})}),function(){e=o.getDefaultSettings();var i=n[0];i&&t.extend(e,i)}(),o.trigger("init")};o.prototype.__construct=function(){},o.prototype.getDefaultSettings=function(){return{}},o.extendsCount=0,o.extend=function(e){var t=jQuery,n=this,i=function(){return n.apply(this,arguments)};t.extend(i,n),(i.prototype=Object.create(t.extend({},n.prototype,e))).constructor=i;var s=++o.extendsCount;return i.prototype.getConstructorID=function(){return s},i.__super__=n.prototype,i},e.exports=o},20:function(e,t,n){"use strict";e.exports=function(){var e,t=Array.prototype.slice,n={actions:{},filters:{}};function i(e,t,i,o){var s,r,a;if(n[e][t])if(i)if(s=n[e][t],o)for(a=s.length;a--;)(r=s[a]).callback===i&&r.context===o&&s.splice(a,1);else for(a=s.length;a--;)s[a].callback===i&&s.splice(a,1);else n[e][t]=[]}function o(e,t,i,o,s){var r={callback:i,priority:o,context:s},a=n[e][t];if(a){var l=!1;if(jQuery.each(a,function(){if(this.callback===i)return l=!0,!1}),l)return;a.push(r),a=function(e){for(var t,n,i,o=1,s=e.length;o<s;o++){for(t=e[o],n=o;(i=e[n-1])&&i.priority>t.priority;)e[n]=e[n-1],--n;e[n]=t}return e}(a)}else a=[r];n[e][t]=a}function s(e,t,i){var o,s,r=n[e][t];if(!r)return"filters"===e&&i[0];if(s=r.length,"filters"===e)for(o=0;o<s;o++)i[0]=r[o].callback.apply(r[o].context,i);else for(o=0;o<s;o++)r[o].callback.apply(r[o].context,i);return"filters"!==e||i[0]}return e={removeFilter:function(t,n){return"string"==typeof t&&i("filters",t,n),e},applyFilters:function(){var n=t.call(arguments),i=n.shift();return"string"==typeof i?s("filters",i,n):e},addFilter:function(t,n,i,s){return"string"==typeof t&&"function"==typeof n&&o("filters",t,n,i=parseInt(i||10,10),s),e},removeAction:function(t,n){return"string"==typeof t&&i("actions",t,n),e},doAction:function(){var n=t.call(arguments),i=n.shift();return"string"==typeof i&&s("actions",i,n),e},addAction:function(t,n,i,s){return"string"==typeof t&&"function"==typeof n&&o("actions",t,n,i=parseInt(i||10,10),s),e}}}},22:function(e,t,n){"use strict";var i=n(5);e.exports=i.extend({$activeContent:null,getDefaultSettings:function(){return{selectors:{tabTitle:".elementor-tab-title",tabContent:".elementor-tab-content"},classes:{active:"elementor-active"},showTabFn:"show",hideTabFn:"hide",toggleSelf:!0,hidePrevious:!0,autoExpand:!0}},getDefaultElements:function(){var e=this.getSettings("selectors");return{$tabTitles:this.findElement(e.tabTitle),$tabContents:this.findElement(e.tabContent)}},activateDefaultTab:function(){var e=this.getSettings();if(e.autoExpand&&("editor"!==e.autoExpand||this.isEdit)){var t=this.getEditSettings("activeItemIndex")||1,n={showTabFn:e.showTabFn,hideTabFn:e.hideTabFn};this.setSettings({showTabFn:"show",hideTabFn:"hide"}),this.changeActiveTab(t),this.setSettings(n)}},deactivateActiveTab:function(e){var t=this.getSettings(),n=t.classes.active,i=e?'[data-tab="'+e+'"]':"."+n,o=this.elements.$tabTitles.filter(i),s=this.elements.$tabContents.filter(i);o.add(s).removeClass(n),s[t.hideTabFn]()},activateTab:function(e){var t=this.getSettings(),n=t.classes.active,i=this.elements.$tabTitles.filter('[data-tab="'+e+'"]'),o=this.elements.$tabContents.filter('[data-tab="'+e+'"]');i.add(o).addClass(n),o[t.showTabFn]()},isActiveTab:function(e){return this.elements.$tabTitles.filter('[data-tab="'+e+'"]').hasClass(this.getSettings("classes.active"))},bindEvents:function(){var e=this;e.elements.$tabTitles.on("focus",function(t){e.changeActiveTab(t.currentTarget.dataset.tab)}),e.getSettings("toggleSelf")&&e.elements.$tabTitles.on("mousedown",function(t){jQuery(t.currentTarget).is(":focus")&&e.changeActiveTab(t.currentTarget.dataset.tab)})},onInit:function(){i.prototype.onInit.apply(this,arguments),this.activateDefaultTab()},onEditSettingsChange:function(e){"activeItemIndex"===e&&this.activateDefaultTab()},changeActiveTab:function(e){var t=this.isActiveTab(e),n=this.getSettings();!n.toggleSelf&&t||!n.hidePrevious||this.deactivateActiveTab(),!n.hidePrevious&&t&&this.deactivateActiveTab(e),t||this.activateTab(e)}})},5:function(e,t,n){"use strict";var i;i=n(1).extend({$element:null,editorListeners:null,onElementChange:null,onEditSettingsChange:null,onGeneralSettingsChange:null,onPageSettingsChange:null,isEdit:null,__construct:function(e){this.$element=e.$element,this.isEdit=this.$element.hasClass("elementor-element-edit-mode"),this.isEdit&&this.addEditorListeners()},findElement:function(e){var t=this.$element;return t.find(e).filter(function(){return jQuery(this).closest(".elementor-element").is(t)})},getUniqueHandlerID:function(e,t){return e||(e=this.getModelCID()),t||(t=this.$element),e+t.attr("data-element_type")+this.getConstructorID()},initEditorListeners:function(){var e=this;if(e.editorListeners=[{event:"element:destroy",to:elementor.channels.data,callback:function(t){t.cid===e.getModelCID()&&e.onDestroy()}}],e.onElementChange){var t=e.getElementName(),n="change";"global"!==t&&(n+=":"+t),e.editorListeners.push({event:n,to:elementor.channels.editor,callback:function(t,n){e.getUniqueHandlerID(n.model.cid,n.$el)===e.getUniqueHandlerID()&&e.onElementChange(t.model.get("name"),t,n)}})}e.onEditSettingsChange&&e.editorListeners.push({event:"change:editSettings",to:elementor.channels.editor,callback:function(t,n){n.model.cid===e.getModelCID()&&e.onEditSettingsChange(Object.keys(t.changed)[0])}}),["page","general"].forEach(function(t){var n="on"+elementor.helpers.firstLetterUppercase(t)+"SettingsChange";e[n]&&e.editorListeners.push({event:"change",to:elementor.settings[t].model,callback:function(t){e[n](t.changed)}})})},getEditorListeners:function(){return this.editorListeners||this.initEditorListeners(),this.editorListeners},addEditorListeners:function(){var e=this.getUniqueHandlerID();this.getEditorListeners().forEach(function(t){elementorFrontend.addListenerOnce(e,t.event,t.callback,t.to)})},removeEditorListeners:function(){var e=this.getUniqueHandlerID();this.getEditorListeners().forEach(function(t){elementorFrontend.removeListeners(e,t.event,null,t.to)})},getElementName:function(){return this.$element.data("element_type").split(".")[0]},getID:function(){return this.$element.data("id")},getModelCID:function(){return this.$element.data("model-cid")},getElementSettings:function(e){var t={},n=this.getModelCID();if(this.isEdit&&n){var i=elementorFrontend.config.elements.data[n],o=elementorFrontend.config.elements.keys[i.attributes.widgetType||i.attributes.elType];jQuery.each(i.getActiveControls(),function(e){-1!==o.indexOf(e)&&(t[e]=i.attributes[e])})}else t=this.$element.data("settings")||{};return this.getItems(t,e)},getEditSettings:function(e){var t={};return this.isEdit&&(t=elementorFrontend.config.elements.editSettings[this.getModelCID()].attributes),this.getItems(t,e)},onDestroy:function(){this.removeEditorListeners(),this.unbindEvents&&this.unbindEvents()}}),e.exports=i}});
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
+/*! elementor - v2.2.1 - 03-09-2018 */
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 163);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 163:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
/* global jQuery, ElementorGutenbergSettings */
-( function( $ ) {
+(function ($) {
'use strict';
var ElementorGutenbergApp = {
- cacheElements: function() {
+ cacheElements: function cacheElements() {
this.isElementorMode = '1' === ElementorGutenbergSettings.isElementorMode;
this.cache = {};
- this.cache.$gutenberg = $( '#editor' );
- this.cache.$switchMode = $( $( '#elementor-gutenberg-button-switch-mode' ).html() );
+ this.cache.$gutenberg = $('#editor');
+ this.cache.$switchMode = $($('#elementor-gutenberg-button-switch-mode').html());
- this.cache.$gutenberg.find( '.edit-post-header-toolbar' ).append( this.cache.$switchMode );
- this.cache.$switchModeButton = this.cache.$switchMode.find( '#elementor-switch-mode-button' );
+ this.cache.$gutenberg.find('.edit-post-header-toolbar').append(this.cache.$switchMode);
+ this.cache.$switchModeButton = this.cache.$switchMode.find('#elementor-switch-mode-button');
- this.cache.$editorPanel = $( $( '#elementor-gutenberg-panel' ).html() );
+ this.toggleStatus();
+ this.buildPanel();
- this.cache.$gurenbergBlockList = this.cache.$gutenberg.find( '.editor-block-list__layout' );
- this.cache.$gurenbergBlockList.after( this.cache.$editorPanel );
+ var self = this;
- this.cache.$editorPanelButton = this.cache.$editorPanel.find( '#elementor-go-to-edit-page-link' );
+ wp.data.subscribe(function () {
+ setTimeout(function () {
+ self.buildPanel();
+ }, 1);
+ });
+ },
- this.toggleStatus();
+ buildPanel: function buildPanel() {
+ var self = this;
+
+ if (!$('#elementor-editor').length) {
+ self.cache.$editorPanel = $($('#elementor-gutenberg-panel').html());
+ self.cache.$gurenbergBlockList = self.cache.$gutenberg.find('.editor-block-list__layout, .editor-post-text-editor');
+ self.cache.$gurenbergBlockList.after(self.cache.$editorPanel);
+
+ self.cache.$editorPanelButton = self.cache.$editorPanel.find('#elementor-go-to-edit-page-link');
+
+ self.cache.$editorPanelButton.on('click', function (event) {
+ event.preventDefault();
+
+ self.animateLoader();
+
+ var documentTitle = wp.data.select('core/editor').getEditedPostAttribute('title');
+ if (!documentTitle) {
+ wp.data.dispatch('core/editor').editPost({ title: 'Elementor #' + $('#post_ID').val() });
+ }
+
+ wp.data.dispatch('core/editor').savePost();
+ self.redirectWhenSave();
+ });
+ }
},
- bindEvents: function() {
+ bindEvents: function bindEvents() {
var self = this;
- self.cache.$switchModeButton.on( 'click', function() {
- self.isElementorMode = ! self.isElementorMode;
+ self.cache.$switchModeButton.on('click', function () {
+ self.isElementorMode = !self.isElementorMode;
self.toggleStatus();
- if ( self.isElementorMode ) {
- self.cache.$editorPanelButton.trigger( 'click' );
+ if (self.isElementorMode) {
+ self.cache.$editorPanelButton.trigger('click');
} else {
- var wpEditor = wp.data.dispatch( 'core/editor' );
+ var wpEditor = wp.data.dispatch('core/editor');
- wpEditor.editPost( { gutenberg_elementor_mode: false } );
+ wpEditor.editPost({ gutenberg_elementor_mode: false });
wpEditor.savePost();
}
- } );
-
- self.cache.$editorPanelButton.on( 'click', function( event ) {
- event.preventDefault();
-
- self.animateLoader();
-
- wp.data.dispatch( 'core/editor' ).savePost();
- self.redirectWhenSave();
- } );
+ });
},
- redirectWhenSave: function() {
+ redirectWhenSave: function redirectWhenSave() {
var self = this;
- setTimeout( function() {
- if ( wp.data.select( 'core/editor' ).isSavingPost() ) {
+ setTimeout(function () {
+ if (wp.data.select('core/editor').isSavingPost()) {
self.redirectWhenSave();
} else {
location.href = ElementorGutenbergSettings.editLink;
}
- }, 300 );
+ }, 300);
},
- animateLoader: function() {
- this.cache.$editorPanelButton.addClass( 'elementor-animate' );
+ animateLoader: function animateLoader() {
+ this.cache.$editorPanelButton.addClass('elementor-animate');
},
- toggleStatus: function() {
- jQuery( 'body' )
- .toggleClass( 'elementor-editor-active', this.isElementorMode )
- .toggleClass( 'elementor-editor-inactive', ! this.isElementorMode );
+ toggleStatus: function toggleStatus() {
+ jQuery('body').toggleClass('elementor-editor-active', this.isElementorMode).toggleClass('elementor-editor-inactive', !this.isElementorMode);
},
- init: function() {
- this.cacheElements();
- this.bindEvents();
+ init: function init() {
+ var self = this;
+ setTimeout(function () {
+ self.cacheElements();
+ self.bindEvents();
+ }, 1);
}
};
- $( function() {
+ $(function () {
ElementorGutenbergApp.init();
- } );
+ });
+})(jQuery);
-}( jQuery ) );
+/***/ })
-},{}]},{},[1])
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJhc3NldHMvZGV2L2pzL2FkbWluL2d1dGVuYmVyZy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKiBnbG9iYWwgalF1ZXJ5LCBFbGVtZW50b3JHdXRlbmJlcmdTZXR0aW5ncyAqL1xuKCBmdW5jdGlvbiggJCApIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBFbGVtZW50b3JHdXRlbmJlcmdBcHAgPSB7XG5cblx0XHRjYWNoZUVsZW1lbnRzOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuaXNFbGVtZW50b3JNb2RlID0gJzEnID09PSBFbGVtZW50b3JHdXRlbmJlcmdTZXR0aW5ncy5pc0VsZW1lbnRvck1vZGU7XG5cblx0XHRcdHRoaXMuY2FjaGUgPSB7fTtcblxuXHRcdFx0dGhpcy5jYWNoZS4kZ3V0ZW5iZXJnID0gJCggJyNlZGl0b3InICk7XG5cdFx0XHR0aGlzLmNhY2hlLiRzd2l0Y2hNb2RlID0gJCggJCggJyNlbGVtZW50b3ItZ3V0ZW5iZXJnLWJ1dHRvbi1zd2l0Y2gtbW9kZScgKS5odG1sKCkgKTtcblxuXHRcdFx0dGhpcy5jYWNoZS4kZ3V0ZW5iZXJnLmZpbmQoICcuZWRpdC1wb3N0LWhlYWRlci10b29sYmFyJyApLmFwcGVuZCggdGhpcy5jYWNoZS4kc3dpdGNoTW9kZSApO1xuXHRcdFx0dGhpcy5jYWNoZS4kc3dpdGNoTW9kZUJ1dHRvbiA9IHRoaXMuY2FjaGUuJHN3aXRjaE1vZGUuZmluZCggJyNlbGVtZW50b3Itc3dpdGNoLW1vZGUtYnV0dG9uJyApO1xuXG5cdFx0XHR0aGlzLmNhY2hlLiRlZGl0b3JQYW5lbCA9ICQoICQoICcjZWxlbWVudG9yLWd1dGVuYmVyZy1wYW5lbCcgKS5odG1sKCkgKTtcblxuXHRcdFx0dGhpcy5jYWNoZS4kZ3VyZW5iZXJnQmxvY2tMaXN0ID0gdGhpcy5jYWNoZS4kZ3V0ZW5iZXJnLmZpbmQoICcuZWRpdG9yLWJsb2NrLWxpc3RfX2xheW91dCcgKTtcblx0XHRcdHRoaXMuY2FjaGUuJGd1cmVuYmVyZ0Jsb2NrTGlzdC5hZnRlciggdGhpcy5jYWNoZS4kZWRpdG9yUGFuZWwgKTtcblxuXHRcdFx0dGhpcy5jYWNoZS4kZWRpdG9yUGFuZWxCdXR0b24gPSB0aGlzLmNhY2hlLiRlZGl0b3JQYW5lbC5maW5kKCAnI2VsZW1lbnRvci1nby10by1lZGl0LXBhZ2UtbGluaycgKTtcblxuXHRcdFx0dGhpcy50b2dnbGVTdGF0dXMoKTtcblx0XHR9LFxuXG5cdFx0YmluZEV2ZW50czogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0XHRcdHNlbGYuY2FjaGUuJHN3aXRjaE1vZGVCdXR0b24ub24oICdjbGljaycsIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmlzRWxlbWVudG9yTW9kZSA9ICEgc2VsZi5pc0VsZW1lbnRvck1vZGU7XG5cblx0XHRcdFx0c2VsZi50b2dnbGVTdGF0dXMoKTtcblxuXHRcdFx0XHRpZiAoIHNlbGYuaXNFbGVtZW50b3JNb2RlICkge1xuXHRcdFx0XHRcdHNlbGYuY2FjaGUuJGVkaXRvclBhbmVsQnV0dG9uLnRyaWdnZXIoICdjbGljaycgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgd3BFZGl0b3IgPSB3cC5kYXRhLmRpc3BhdGNoKCAnY29yZS9lZGl0b3InICk7XG5cblx0XHRcdFx0XHR3cEVkaXRvci5lZGl0UG9zdCggeyBndXRlbmJlcmdfZWxlbWVudG9yX21vZGU6IGZhbHNlIH0gKTtcblx0XHRcdFx0XHR3cEVkaXRvci5zYXZlUG9zdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cblx0XHRcdHNlbGYuY2FjaGUuJGVkaXRvclBhbmVsQnV0dG9uLm9uKCAnY2xpY2snLCBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0c2VsZi5hbmltYXRlTG9hZGVyKCk7XG5cblx0XHRcdFx0d3AuZGF0YS5kaXNwYXRjaCggJ2NvcmUvZWRpdG9yJyApLnNhdmVQb3N0KCk7XG5cdFx0XHRcdHNlbGYucmVkaXJlY3RXaGVuU2F2ZSgpO1xuXHRcdFx0fSApO1xuXHRcdH0sXG5cblx0XHRyZWRpcmVjdFdoZW5TYXZlOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdFx0c2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggd3AuZGF0YS5zZWxlY3QoICdjb3JlL2VkaXRvcicgKS5pc1NhdmluZ1Bvc3QoKSApIHtcblx0XHRcdFx0XHRzZWxmLnJlZGlyZWN0V2hlblNhdmUoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsb2NhdGlvbi5ocmVmID0gRWxlbWVudG9yR3V0ZW5iZXJnU2V0dGluZ3MuZWRpdExpbms7XG5cdFx0XHRcdH1cblx0XHRcdH0sIDMwMCApO1xuXHRcdH0sXG5cblx0XHRhbmltYXRlTG9hZGVyOiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuY2FjaGUuJGVkaXRvclBhbmVsQnV0dG9uLmFkZENsYXNzKCAnZWxlbWVudG9yLWFuaW1hdGUnICk7XG5cdFx0fSxcblxuXHRcdHRvZ2dsZVN0YXR1czogZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoICdib2R5JyApXG5cdFx0XHRcdC50b2dnbGVDbGFzcyggJ2VsZW1lbnRvci1lZGl0b3ItYWN0aXZlJywgdGhpcy5pc0VsZW1lbnRvck1vZGUgKVxuXHRcdFx0XHQudG9nZ2xlQ2xhc3MoICdlbGVtZW50b3ItZWRpdG9yLWluYWN0aXZlJywgISB0aGlzLmlzRWxlbWVudG9yTW9kZSApO1xuXHRcdH0sXG5cblx0XHRpbml0OiBmdW5jdGlvbigpIHtcblx0XHRcdHRoaXMuY2FjaGVFbGVtZW50cygpO1xuXHRcdFx0dGhpcy5iaW5kRXZlbnRzKCk7XG5cdFx0fVxuXHR9O1xuXG5cdCQoIGZ1bmN0aW9uKCkge1xuXHRcdEVsZW1lbnRvckd1dGVuYmVyZ0FwcC5pbml0KCk7XG5cdH0gKTtcblxufSggalF1ZXJ5ICkgKTtcbiJdfQ==
+/******/ });
+//# sourceMappingURL=gutenberg.js.map
\ No newline at end of file
-/*! elementor - v2.0.10 - 08-05-2018 */
-!function r(c,a,s){function h(t,e){if(!a[t]){if(!c[t]){var i="function"==typeof require&&require;if(!e&&i)return i(t,!0);if(d)return d(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var o=a[t]={exports:{}};c[t][0].call(o.exports,function(e){return h(c[t][1][e]||e)},o,o.exports,r,c,a,s)}return a[t].exports}for(var d="function"==typeof require&&require,e=0;e<s.length;e++)h(s[e]);return h}({1:[function(e,t,i){!function(e){"use strict";var t={cacheElements:function(){this.isElementorMode="1"===ElementorGutenbergSettings.isElementorMode,this.cache={},this.cache.$gutenberg=e("#editor"),this.cache.$switchMode=e(e("#elementor-gutenberg-button-switch-mode").html()),this.cache.$gutenberg.find(".edit-post-header-toolbar").append(this.cache.$switchMode),this.cache.$switchModeButton=this.cache.$switchMode.find("#elementor-switch-mode-button"),this.cache.$editorPanel=e(e("#elementor-gutenberg-panel").html()),this.cache.$gurenbergBlockList=this.cache.$gutenberg.find(".editor-block-list__layout"),this.cache.$gurenbergBlockList.after(this.cache.$editorPanel),this.cache.$editorPanelButton=this.cache.$editorPanel.find("#elementor-go-to-edit-page-link"),this.toggleStatus()},bindEvents:function(){var t=this;t.cache.$switchModeButton.on("click",function(){if(t.isElementorMode=!t.isElementorMode,t.toggleStatus(),t.isElementorMode)t.cache.$editorPanelButton.trigger("click");else{var e=wp.data.dispatch("core/editor");e.editPost({gutenberg_elementor_mode:!1}),e.savePost()}}),t.cache.$editorPanelButton.on("click",function(e){e.preventDefault(),t.animateLoader(),wp.data.dispatch("core/editor").savePost(),t.redirectWhenSave()})},redirectWhenSave:function(){var e=this;setTimeout(function(){wp.data.select("core/editor").isSavingPost()?e.redirectWhenSave():location.href=ElementorGutenbergSettings.editLink},300)},animateLoader:function(){this.cache.$editorPanelButton.addClass("elementor-animate")},toggleStatus:function(){jQuery("body").toggleClass("elementor-editor-active",this.isElementorMode).toggleClass("elementor-editor-inactive",!this.isElementorMode)},init:function(){this.cacheElements(),this.bindEvents()}};e(function(){t.init()})}(jQuery)},{}]},{},[1]);
\ No newline at end of file
+/*! elementor - v2.2.1 - 03-09-2018 */
+!function(e){var t={};function n(o){if(t[o])return t[o].exports;var i=t[o]={i:o,l:!1,exports:{}};return e[o].call(i.exports,i,i.exports,n),i.l=!0,i.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 i in e)n.d(o,i,function(t){return e[t]}.bind(null,i));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=163)}({163:function(e,t,n){"use strict";!function(e){var t={cacheElements:function(){this.isElementorMode="1"===ElementorGutenbergSettings.isElementorMode,this.cache={},this.cache.$gutenberg=e("#editor"),this.cache.$switchMode=e(e("#elementor-gutenberg-button-switch-mode").html()),this.cache.$gutenberg.find(".edit-post-header-toolbar").append(this.cache.$switchMode),this.cache.$switchModeButton=this.cache.$switchMode.find("#elementor-switch-mode-button"),this.toggleStatus(),this.buildPanel();var t=this;wp.data.subscribe(function(){setTimeout(function(){t.buildPanel()},1)})},buildPanel:function(){var t=this;e("#elementor-editor").length||(t.cache.$editorPanel=e(e("#elementor-gutenberg-panel").html()),t.cache.$gurenbergBlockList=t.cache.$gutenberg.find(".editor-block-list__layout, .editor-post-text-editor"),t.cache.$gurenbergBlockList.after(t.cache.$editorPanel),t.cache.$editorPanelButton=t.cache.$editorPanel.find("#elementor-go-to-edit-page-link"),t.cache.$editorPanelButton.on("click",function(n){n.preventDefault(),t.animateLoader(),wp.data.select("core/editor").getEditedPostAttribute("title")||wp.data.dispatch("core/editor").editPost({title:"Elementor #"+e("#post_ID").val()}),wp.data.dispatch("core/editor").savePost(),t.redirectWhenSave()}))},bindEvents:function(){var e=this;e.cache.$switchModeButton.on("click",function(){if(e.isElementorMode=!e.isElementorMode,e.toggleStatus(),e.isElementorMode)e.cache.$editorPanelButton.trigger("click");else{var t=wp.data.dispatch("core/editor");t.editPost({gutenberg_elementor_mode:!1}),t.savePost()}})},redirectWhenSave:function(){var e=this;setTimeout(function(){wp.data.select("core/editor").isSavingPost()?e.redirectWhenSave():location.href=ElementorGutenbergSettings.editLink},300)},animateLoader:function(){this.cache.$editorPanelButton.addClass("elementor-animate")},toggleStatus:function(){jQuery("body").toggleClass("elementor-editor-active",this.isElementorMode).toggleClass("elementor-editor-inactive",!this.isElementorMode)},init:function(){var e=this;setTimeout(function(){e.cacheElements(),e.bindEvents()},1)}};e(function(){t.init()})}(jQuery)}});
\ No newline at end of file
--- /dev/null
+/*! elementor - v2.2.1 - 03-09-2018 */
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 164);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 1:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var Module = __webpack_require__(2),
+ ViewModule;
+
+ViewModule = Module.extend({
+ elements: null,
+
+ getDefaultElements: function getDefaultElements() {
+ return {};
+ },
+
+ bindEvents: function bindEvents() {},
+
+ onInit: function onInit() {
+ this.initElements();
+
+ this.bindEvents();
+ },
+
+ initElements: function initElements() {
+ this.elements = this.getDefaultElements();
+ }
+});
+
+module.exports = ViewModule;
+
+/***/ }),
+
+/***/ 14:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var TemplateLibraryHeaderView;
+
+TemplateLibraryHeaderView = Marionette.LayoutView.extend({
+
+ className: 'elementor-templates-modal__header',
+
+ template: '#tmpl-elementor-templates-modal__header',
+
+ regions: {
+ logoArea: '.elementor-templates-modal__header__logo-area',
+ tools: '#elementor-template-library-header-tools',
+ menuArea: '.elementor-templates-modal__header__menu-area'
+ },
+
+ ui: {
+ closeModal: '.elementor-templates-modal__header__close'
+ },
+
+ events: {
+ 'click @ui.closeModal': 'onCloseModalClick'
+ },
+
+ templateHelpers: function templateHelpers() {
+ return {
+ closeType: this.getOption('closeType')
+ };
+ },
+
+ onCloseModalClick: function onCloseModalClick() {
+ this._parent._parent._parent.hideModal();
+ }
+});
+
+module.exports = TemplateLibraryHeaderView;
+
+/***/ }),
+
+/***/ 15:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var TemplateLibraryLoadingView;
+
+TemplateLibraryLoadingView = Marionette.ItemView.extend({
+ id: 'elementor-template-library-loading',
+
+ template: '#tmpl-elementor-template-library-loading'
+});
+
+module.exports = TemplateLibraryLoadingView;
+
+/***/ }),
+
+/***/ 164:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var ViewModule = __webpack_require__(1),
+ NewTemplateLayout = __webpack_require__(165);
+
+var NewTemplateModule = ViewModule.extend({
+
+ getDefaultSettings: function getDefaultSettings() {
+ return {
+ selectors: {
+ addButton: '.page-title-action:first, #elementor-template-library-add-new'
+ }
+ };
+ },
+
+ getDefaultElements: function getDefaultElements() {
+ var selectors = this.getSettings('selectors');
+
+ return {
+ $addButton: jQuery(selectors.addButton)
+ };
+ },
+
+ bindEvents: function bindEvents() {
+ this.elements.$addButton.on('click', this.onAddButtonClick);
+ },
+
+ onInit: function onInit() {
+ ViewModule.prototype.onInit.apply(this, arguments);
+
+ this.layout = new NewTemplateLayout();
+ },
+
+ onAddButtonClick: function onAddButtonClick(event) {
+ event.preventDefault();
+
+ this.layout.showModal();
+ }
+});
+
+jQuery(function () {
+ window.elementorNewTemplate = new NewTemplateModule();
+});
+
+/***/ }),
+
+/***/ 165:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var BaseModalLayout = __webpack_require__(8),
+ NewTemplateView = __webpack_require__(166);
+
+module.exports = BaseModalLayout.extend({
+
+ getModalOptions: function getModalOptions() {
+ return {
+ id: 'elementor-new-template-modal'
+ };
+ },
+
+ getLogoOptions: function getLogoOptions() {
+ return {
+ title: elementorAdmin.config.i18n.new_template
+ };
+ },
+
+ initialize: function initialize() {
+ BaseModalLayout.prototype.initialize.apply(this, arguments);
+
+ this.showLogo();
+
+ this.showContentView();
+ },
+
+ getDialogsManager: function getDialogsManager() {
+ return elementorAdmin.getDialogsManager();
+ },
+
+ showContentView: function showContentView() {
+ this.modalContent.show(new NewTemplateView());
+ }
+});
+
+/***/ }),
+
+/***/ 166:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = Marionette.ItemView.extend({
+
+ id: 'elementor-new-template-dialog-content',
+
+ template: '#tmpl-elementor-new-template',
+
+ ui: {},
+
+ events: {},
+
+ onRender: function onRender() {}
+});
+
+/***/ }),
+
+/***/ 2:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var Module = function Module() {
+ var $ = jQuery,
+ instanceParams = arguments,
+ self = this,
+ settings,
+ events = {};
+
+ var ensureClosureMethods = function ensureClosureMethods() {
+ $.each(self, function (methodName) {
+ var oldMethod = self[methodName];
+
+ if ('function' !== typeof oldMethod) {
+ return;
+ }
+
+ self[methodName] = function () {
+ return oldMethod.apply(self, arguments);
+ };
+ });
+ };
+
+ var initSettings = function initSettings() {
+ settings = self.getDefaultSettings();
+
+ var instanceSettings = instanceParams[0];
+
+ if (instanceSettings) {
+ $.extend(settings, instanceSettings);
+ }
+ };
+
+ var init = function init() {
+ self.__construct.apply(self, instanceParams);
+
+ ensureClosureMethods();
+
+ initSettings();
+
+ self.trigger('init');
+ };
+
+ this.getItems = function (items, itemKey) {
+ if (itemKey) {
+ var keyStack = itemKey.split('.'),
+ currentKey = keyStack.splice(0, 1);
+
+ if (!keyStack.length) {
+ return items[currentKey];
+ }
+
+ if (!items[currentKey]) {
+ return;
+ }
+
+ return this.getItems(items[currentKey], keyStack.join('.'));
+ }
+
+ return items;
+ };
+
+ this.getSettings = function (setting) {
+ return this.getItems(settings, setting);
+ };
+
+ this.setSettings = function (settingKey, value, settingsContainer) {
+ if (!settingsContainer) {
+ settingsContainer = settings;
+ }
+
+ if ('object' === (typeof settingKey === 'undefined' ? 'undefined' : _typeof(settingKey))) {
+ $.extend(settingsContainer, settingKey);
+
+ return self;
+ }
+
+ var keyStack = settingKey.split('.'),
+ currentKey = keyStack.splice(0, 1);
+
+ if (!keyStack.length) {
+ settingsContainer[currentKey] = value;
+
+ return self;
+ }
+
+ if (!settingsContainer[currentKey]) {
+ settingsContainer[currentKey] = {};
+ }
+
+ return self.setSettings(keyStack.join('.'), value, settingsContainer[currentKey]);
+ };
+
+ this.forceMethodImplementation = function (methodArguments) {
+ var functionName = methodArguments.callee.name;
+
+ throw new ReferenceError('The method ' + functionName + ' must to be implemented in the inheritor child.');
+ };
+
+ this.on = function (eventName, callback) {
+ if ('object' === (typeof eventName === 'undefined' ? 'undefined' : _typeof(eventName))) {
+ $.each(eventName, function (singleEventName) {
+ self.on(singleEventName, this);
+ });
+
+ return self;
+ }
+
+ var eventNames = eventName.split(' ');
+
+ eventNames.forEach(function (singleEventName) {
+ if (!events[singleEventName]) {
+ events[singleEventName] = [];
+ }
+
+ events[singleEventName].push(callback);
+ });
+
+ return self;
+ };
+
+ this.off = function (eventName, callback) {
+ if (!events[eventName]) {
+ return self;
+ }
+
+ if (!callback) {
+ delete events[eventName];
+
+ return self;
+ }
+
+ var callbackIndex = events[eventName].indexOf(callback);
+
+ if (-1 !== callbackIndex) {
+ delete events[eventName][callbackIndex];
+ }
+
+ return self;
+ };
+
+ this.trigger = function (eventName) {
+ var methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1),
+ params = Array.prototype.slice.call(arguments, 1);
+
+ if (self[methodName]) {
+ self[methodName].apply(self, params);
+ }
+
+ var callbacks = events[eventName];
+
+ if (!callbacks) {
+ return self;
+ }
+
+ $.each(callbacks, function (index, callback) {
+ callback.apply(self, params);
+ });
+
+ return self;
+ };
+
+ init();
+};
+
+Module.prototype.__construct = function () {};
+
+Module.prototype.getDefaultSettings = function () {
+ return {};
+};
+
+Module.extendsCount = 0;
+
+Module.extend = function (properties) {
+ var $ = jQuery,
+ parent = this;
+
+ var child = function child() {
+ return parent.apply(this, arguments);
+ };
+
+ $.extend(child, parent);
+
+ child.prototype = Object.create($.extend({}, parent.prototype, properties));
+
+ child.prototype.constructor = child;
+
+ /*
+ * Constructor ID is used to set an unique ID
+ * to every extend of the Module.
+ *
+ * It's useful in some cases such as unique
+ * listener for frontend handlers.
+ */
+ var constructorID = ++Module.extendsCount;
+
+ child.prototype.getConstructorID = function () {
+ return constructorID;
+ };
+
+ child.__super__ = parent.prototype;
+
+ return child;
+};
+
+module.exports = Module;
+
+/***/ }),
+
+/***/ 8:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var TemplateLibraryHeaderView = __webpack_require__(14),
+ TemplateLibraryHeaderLogoView = __webpack_require__(9),
+ TemplateLibraryLoadingView = __webpack_require__(15);
+
+module.exports = Marionette.LayoutView.extend({
+ el: function el() {
+ return this.modal.getElements('widget');
+ },
+
+ modal: null,
+
+ regions: function regions() {
+ return {
+ modalHeader: '.dialog-header',
+ modalContent: '.dialog-lightbox-content',
+ modalLoading: '.dialog-lightbox-loading'
+ };
+ },
+
+ constructor: function constructor() {
+ this.initModal();
+
+ Marionette.LayoutView.prototype.constructor.apply(this, arguments);
+ },
+
+ initialize: function initialize() {
+ this.modalHeader.show(new TemplateLibraryHeaderView(this.getHeaderOptions()));
+ },
+
+ initModal: function initModal() {
+ var modalOptions = {
+ className: 'elementor-templates-modal',
+ closeButton: false,
+ hide: {
+ onOutsideClick: false
+ }
+ };
+
+ jQuery.extend(true, modalOptions, this.getModalOptions());
+
+ this.modal = this.getDialogsManager().createWidget('lightbox', modalOptions);
+
+ this.modal.getElements('message').append(this.modal.addElement('content'), this.modal.addElement('loading'));
+ },
+
+ getDialogsManager: function getDialogsManager() {
+ return elementor.dialogsManager;
+ },
+
+ showModal: function showModal() {
+ this.modal.show();
+ },
+
+ hideModal: function hideModal() {
+ this.modal.hide();
+ },
+
+ getModalOptions: function getModalOptions() {
+ return {};
+ },
+
+ getLogoOptions: function getLogoOptions() {
+ return {};
+ },
+
+ getHeaderOptions: function getHeaderOptions() {
+ return {};
+ },
+
+ getHeaderView: function getHeaderView() {
+ return this.modalHeader.currentView;
+ },
+
+ showLoadingView: function showLoadingView() {
+ this.modalLoading.show(new TemplateLibraryLoadingView());
+
+ this.modalLoading.$el.show();
+
+ this.modalContent.$el.hide();
+ },
+
+ hideLoadingView: function hideLoadingView() {
+ this.modalContent.$el.show();
+
+ this.modalLoading.$el.hide();
+ },
+
+ showLogo: function showLogo() {
+ this.getHeaderView().logoArea.show(new TemplateLibraryHeaderLogoView(this.getLogoOptions()));
+ }
+});
+
+/***/ }),
+
+/***/ 9:
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+module.exports = Marionette.ItemView.extend({
+ template: '#tmpl-elementor-templates-modal__header__logo',
+
+ className: 'elementor-templates-modal__header__logo',
+
+ events: {
+ 'click': 'onClick'
+ },
+
+ templateHelpers: function templateHelpers() {
+ return {
+ title: this.getOption('title')
+ };
+ },
+
+ onClick: function onClick() {
+ var clickCallback = this.getOption('click');
+
+ if (clickCallback) {
+ clickCallback();
+ }
+ }
+});
+
+/***/ })
+
+/******/ });
+//# sourceMappingURL=new-template.js.map
\ No newline at end of file
--- /dev/null
+/*! elementor - v2.2.1 - 03-09-2018 */
+!function(t){var e={};function n(o){if(e[o])return e[o].exports;var i=e[o]={i:o,l:!1,exports:{}};return t[o].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(o,i,function(e){return t[e]}.bind(null,i));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=164)}({1:function(t,e,n){"use strict";var o;o=n(2).extend({elements:null,getDefaultElements:function(){return{}},bindEvents:function(){},onInit:function(){this.initElements(),this.bindEvents()},initElements:function(){this.elements=this.getDefaultElements()}}),t.exports=o},14:function(t,e,n){"use strict";var o;o=Marionette.LayoutView.extend({className:"elementor-templates-modal__header",template:"#tmpl-elementor-templates-modal__header",regions:{logoArea:".elementor-templates-modal__header__logo-area",tools:"#elementor-template-library-header-tools",menuArea:".elementor-templates-modal__header__menu-area"},ui:{closeModal:".elementor-templates-modal__header__close"},events:{"click @ui.closeModal":"onCloseModalClick"},templateHelpers:function(){return{closeType:this.getOption("closeType")}},onCloseModalClick:function(){this._parent._parent._parent.hideModal()}}),t.exports=o},15:function(t,e,n){"use strict";var o;o=Marionette.ItemView.extend({id:"elementor-template-library-loading",template:"#tmpl-elementor-template-library-loading"}),t.exports=o},164:function(t,e,n){"use strict";var o=n(1),i=n(165),r=o.extend({getDefaultSettings:function(){return{selectors:{addButton:".page-title-action:first, #elementor-template-library-add-new"}}},getDefaultElements:function(){var t=this.getSettings("selectors");return{$addButton:jQuery(t.addButton)}},bindEvents:function(){this.elements.$addButton.on("click",this.onAddButtonClick)},onInit:function(){o.prototype.onInit.apply(this,arguments),this.layout=new i},onAddButtonClick:function(t){t.preventDefault(),this.layout.showModal()}});jQuery(function(){window.elementorNewTemplate=new r})},165:function(t,e,n){"use strict";var o=n(8),i=n(166);t.exports=o.extend({getModalOptions:function(){return{id:"elementor-new-template-modal"}},getLogoOptions:function(){return{title:elementorAdmin.config.i18n.new_template}},initialize:function(){o.prototype.initialize.apply(this,arguments),this.showLogo(),this.showContentView()},getDialogsManager:function(){return elementorAdmin.getDialogsManager()},showContentView:function(){this.modalContent.show(new i)}})},166:function(t,e,n){"use strict";t.exports=Marionette.ItemView.extend({id:"elementor-new-template-dialog-content",template:"#tmpl-elementor-new-template",ui:{},events:{},onRender:function(){}})},2:function(t,e,n){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){var t,e=jQuery,n=arguments,i=this,r={};this.getItems=function(t,e){if(e){var n=e.split("."),o=n.splice(0,1);if(!n.length)return t[o];if(!t[o])return;return this.getItems(t[o],n.join("."))}return t},this.getSettings=function(e){return this.getItems(t,e)},this.setSettings=function(n,r,l){if(l||(l=t),"object"===(void 0===n?"undefined":o(n)))return e.extend(l,n),i;var a=n.split("."),s=a.splice(0,1);return a.length?(l[s]||(l[s]={}),i.setSettings(a.join("."),r,l[s])):(l[s]=r,i)},this.forceMethodImplementation=function(t){var e=t.callee.name;throw new ReferenceError("The method "+e+" must to be implemented in the inheritor child.")},this.on=function(t,n){return"object"===(void 0===t?"undefined":o(t))?(e.each(t,function(t){i.on(t,this)}),i):(t.split(" ").forEach(function(t){r[t]||(r[t]=[]),r[t].push(n)}),i)},this.off=function(t,e){if(!r[t])return i;if(!e)return delete r[t],i;var n=r[t].indexOf(e);return-1!==n&&delete r[t][n],i},this.trigger=function(t){var n="on"+t[0].toUpperCase()+t.slice(1),o=Array.prototype.slice.call(arguments,1);i[n]&&i[n].apply(i,o);var l=r[t];return l?(e.each(l,function(t,e){e.apply(i,o)}),i):i},i.__construct.apply(i,n),e.each(i,function(t){var e=i[t];"function"==typeof e&&(i[t]=function(){return e.apply(i,arguments)})}),function(){t=i.getDefaultSettings();var o=n[0];o&&e.extend(t,o)}(),i.trigger("init")};i.prototype.__construct=function(){},i.prototype.getDefaultSettings=function(){return{}},i.extendsCount=0,i.extend=function(t){var e=jQuery,n=this,o=function(){return n.apply(this,arguments)};e.extend(o,n),(o.prototype=Object.create(e.extend({},n.prototype,t))).constructor=o;var r=++i.extendsCount;return o.prototype.getConstructorID=function(){return r},o.__super__=n.prototype,o},t.exports=i},8:function(t,e,n){"use strict";var o=n(14),i=n(9),r=n(15);t.exports=Marionette.LayoutView.extend({el:function(){return this.modal.getElements("widget")},modal:null,regions:function(){return{modalHeader:".dialog-header",modalContent:".dialog-lightbox-content",modalLoading:".dialog-lightbox-loading"}},constructor:function(){this.initModal(),Marionette.LayoutView.prototype.constructor.apply(this,arguments)},initialize:function(){this.modalHeader.show(new o(this.getHeaderOptions()))},initModal:function(){var t={className:"elementor-templates-modal",closeButton:!1,hide:{onOutsideClick:!1}};jQuery.extend(!0,t,this.getModalOptions()),this.modal=this.getDialogsManager().createWidget("lightbox",t),this.modal.getElements("message").append(this.modal.addElement("content"),this.modal.addElement("loading"))},getDialogsManager:function(){return elementor.dialogsManager},showModal:function(){this.modal.show()},hideModal:function(){this.modal.hide()},getModalOptions:function(){return{}},getLogoOptions:function(){return{}},getHeaderOptions:function(){return{}},getHeaderView:function(){return this.modalHeader.currentView},showLoadingView:function(){this.modalLoading.show(new r),this.modalLoading.$el.show(),this.modalContent.$el.hide()},hideLoadingView:function(){this.modalContent.$el.show(),this.modalLoading.$el.hide()},showLogo:function(){this.getHeaderView().logoArea.show(new i(this.getLogoOptions()))}})},9:function(t,e,n){"use strict";t.exports=Marionette.ItemView.extend({template:"#tmpl-elementor-templates-modal__header__logo",className:"elementor-templates-modal__header__logo",events:{click:"onClick"},templateHelpers:function(){return{title:this.getOption("title")}},onClick:function(){var t=this.getOption("click");t&&t()}})}});
\ No newline at end of file
/*!
- * Dialogs Manager v4.2.1
+ * Dialogs Manager v4.5.0
* https://github.com/kobizz/dialogs-manager
*
* Copyright Kobi Zaltzberg
widget.init(self, properties);
- widget.setMessage(properties.message);
-
return widget;
};
var bindEvents = function () {
- elements.window.on('keyup', onWindowKeyUp);
+ var windows = [elements.window];
- if (settings.hide.onOutsideClick) {
- elements.window[0].addEventListener('click', hideOnOutsideClick, true);
+ if (elements.iframe) {
+ windows.push(jQuery(elements.iframe[0].contentWindow));
}
+ windows.forEach(function(window) {
+ window.on('keyup', onWindowKeyUp);
+
+ if (settings.hide.onOutsideClick) {
+ window[0].addEventListener('click', hideOnOutsideClick, true);
+ }
+
+ if (settings.hide.onOutsideContextMenu) {
+ window[0].addEventListener('contextmenu', hideOnOutsideClick, true);
+ }
+
+ if (settings.position.autoRefresh) {
+ window.on('resize', self.refreshPosition);
+ }
+ });
+
if (settings.hide.onClick || settings.hide.onBackgroundClick) {
elements.widget.on('click', hideOnClick);
}
-
- if (settings.position.autoRefresh) {
- elements.window.on('resize', self.refreshPosition);
- }
};
var callEffect = function (intent, params) {
});
};
+ var fixIframePosition = function(position) {
+ if (! position.my) {
+ return;
+ }
+
+ var horizontalOffsetRegex = /left|right/,
+ extraOffsetRegex = /([+-]\d+)?$/,
+ iframeOffset = elements.iframe.offset(),
+ iframeWindow = elements.iframe[0].contentWindow,
+ myParts = position.my.split(' '),
+ fixedParts = [];
+
+ if (myParts.length === 1) {
+ if (horizontalOffsetRegex.test(myParts[0])) {
+ myParts.push('center');
+ } else {
+ myParts.unshift('center');
+ }
+ }
+
+ myParts.forEach(function(part, index) {
+ var fixedPart = part.replace(extraOffsetRegex, function(partOffset) {
+ partOffset = +partOffset || 0;
+
+ if (! index) {
+ partOffset += iframeOffset.left - iframeWindow.scrollX;
+ } else {
+ partOffset += iframeOffset.top - iframeWindow.scrollY;
+ }
+
+ if (partOffset >= 0) {
+ partOffset = '+' + partOffset;
+ }
+
+ return partOffset;
+ });
+
+ fixedParts.push(fixedPart);
+ });
+
+ position.my = fixedParts.join(' ');
+ };
+
+ var hideOnClick = function(event) {
+
+ if(isContextMenuClickEvent(event)) {
+ return;
+ }
+
+ if (settings.hide.onClick) {
+
+ if ($(event.target).closest(settings.selectors.preventClose).length) {
+ return;
+ }
+ } else if (event.target !== this) {
+ return;
+ }
+
+ self.hide();
+ };
+
+ var hideOnOutsideClick = function(event) {
+
+ if (isContextMenuClickEvent(event) || $(event.target).closest(elements.widget).length) {
+ return;
+ }
+
+ self.hide();
+ };
+
var initElements = function () {
self.addElement('widget');
+ self.addElement('header');
+
self.addElement('message');
self.addElement('window', window);
self.addElement('container', settings.container);
+ if (settings.iframe) {
+ self.addElement('iframe', settings.iframe);
+ }
+
var id = self.getSettings('id');
if (id) {
classes.push(self.getSettings('className'));
- self.getElements('widget').addClass(classes.join(' '));
+ elements.widget.addClass(classes.join(' '));
};
var initSettings = function (parent, userSettings) {
var parentSettings = $.extend(true, {}, parent.getSettings());
settings = {
+ headerMessage: '',
+ message: '',
effects: parentSettings.effects,
classes: {
globalPrefix: parentSettings.classPrefix,
preventClose: '.' + parentSettings.classPrefix + '-prevent-close'
},
container: 'body',
+ iframe: null,
position: {
element: 'widget',
my: 'center',
autoDelay: 5000,
onClick: false,
onOutsideClick: true,
+ onOutsideContextMenu: false,
onBackgroundClick: true
}
};
});
};
+ var isContextMenuClickEvent = function (event) {
+ // Firefox fires `click` event on every `contextmenu` event.
+ return event.type === 'click' && event.button === 2;
+ };
+
var normalizeClassName = function (name) {
return name.replace(/([a-z])([A-Z])/g, function () {
});
};
- var hideOnClick = function(event) {
-
- if (settings.hide.onClick) {
-
- if ($(event.target).closest(settings.selectors.preventClose).length) {
- return;
- }
- } else if (event.target !== this) {
- return;
- }
-
- self.hide();
- };
-
- var hideOnOutsideClick = function(event) {
- if ($(event.target).closest(elements.widget).length) {
- return;
- }
-
- self.hide();
- };
-
var onWindowKeyUp = function(event) {
var ESC_KEY = 27,
keyCode = event.which;
var unbindEvents = function() {
- elements.window.off('keyup', onWindowKeyUp);
+ var windows = [elements.window];
- if (settings.hide.onOutsideClick) {
- elements.window[0].removeEventListener('click', hideOnOutsideClick, true);
+ if (elements.iframe) {
+ windows.push(jQuery(elements.iframe[0].contentWindow));
}
+ windows.forEach(function(window) {
+ window.off('keyup', onWindowKeyUp);
+
+ if (settings.hide.onOutsideClick) {
+ window[0].removeEventListener('click', hideOnOutsideClick, true);
+ }
+
+ if (settings.hide.onOutsideContextMenu) {
+ window[0].removeEventListener('contextmenu', hideOnOutsideClick, true);
+ }
+
+ if (settings.position.autoRefresh) {
+ window.off('resize', self.refreshPosition);
+ }
+ });
+
if (settings.hide.onClick || settings.hide.onBackgroundClick) {
elements.widget.off('click', hideOnClick);
}
-
- if (settings.position.autoRefresh) {
- elements.window.off('resize', self.refreshPosition);
- }
};
this.addElement = function (name, element, type) {
return $newElement;
};
+ this.destroy = function() {
+
+ unbindEvents();
+
+ elements.widget.remove();
+
+ self.trigger('destroy');
+
+ return self;
+ };
+
+ this.getElements = function (item) {
+
+ return item ? elements[item] : elements;
+ };
+
this.getSettings = function (setting) {
var copy = Object.create(settings);
return copy;
};
+ this.hide = function () {
+
+ clearTimeout(hideTimeOut);
+
+ callEffect('hide', arguments);
+
+ unbindEvents();
+
+ self.trigger('hide');
+
+ return self;
+ };
+
this.init = function (parent, properties) {
if (!(parent instanceof DialogsManager.Instance)) {
return self;
};
- this.getElements = function (item) {
-
- return item ? elements[item] : elements;
- };
-
- this.hide = function () {
-
- clearTimeout(hideTimeOut);
-
- callEffect('hide', arguments);
-
- unbindEvents();
-
- self.trigger('hide');
-
- return self;
- };
-
this.isVisible = function() {
return elements.widget.is(':visible');
return self;
};
- this.setMessage = function (message) {
+ this.off = function(eventName, callback) {
- elements.message.html(message);
+ if (! events[ eventName ]) {
+ return self;
+ }
+
+ if (! callback) {
+ delete events[ eventName ];
+
+ return self;
+ }
+
+ var callbackIndex = events[ eventName ].indexOf(callback);
+
+ if (-1 !== callbackIndex) {
+ delete events[ eventName ][ callbackIndex ];
+ }
return self;
};
+ this.refreshPosition = function () {
+
+ if (! settings.position.enable) {
+ return;
+ }
+
+ var position = $.extend({}, settings.position);
+
+ if (elements[position.of]) {
+ position.of = elements[position.of];
+ }
+
+ if (settings.iframe) {
+ fixIframePosition(position);
+ }
+
+ elements[position.element].position(position);
+ };
+
this.setID = function (id) {
- self.getElements('widget').attr('id', id);
+ elements.widget.attr('id', id);
+
+ return self;
+ };
+
+ this.setHeaderMessage = function (message) {
+
+ this.getElements('header').html(message);
+
+ return this;
+ };
+
+ this.setMessage = function (message) {
+
+ elements.message.html(message);
return self;
};
this.setSettings = function(key, value) {
- if ('object' === typeof value) {
+ if (jQuery.isPlainObject(value)) {
$.extend(true, settings[key], value);
} else {
settings[key] = value;
return self;
};
- this.refreshPosition = function () {
-
- if (! settings.position.enable) {
- return;
- }
-
- var position = $.extend({}, settings.position);
-
- if (elements[position.of]) {
- position.of = elements[position.of];
- }
-
- elements[position.element].position(position);
- };
-
this.trigger = function (eventName, params) {
var methodName = 'on' + eventName[0].toUpperCase() + eventName.slice(1);
return self;
};
-
- this.destroy = function() {
-
- unbindEvents();
-
- elements.widget.remove();
-
- self.trigger('destroy');
-
- return self;
- };
};
DialogsManager.Widget.prototype.types = [];
// Inheritable widget methods
DialogsManager.Widget.prototype.buildWidget = function () {
- var elements = this.getElements();
+ var elements = this.getElements(),
+ settings = this.getSettings();
+
+ elements.widget.append(elements.header, elements.message);
- elements.widget.html(elements.message);
+ this.setHeaderMessage(settings.headerMessage);
+
+ this.setMessage(settings.message);
};
DialogsManager.Widget.prototype.getDefaultSettings = function () {
},
activeKeyDown: function (event) {
+ if (!this.focusedButton) {
+ return;
+ }
+
var TAB_KEY = 9;
if (event.which === TAB_KEY) {
addButton: function (options) {
var self = this,
- $button = self.addElement(options.name, $('<' + this.getSettings('buttonTag') + '>').text(options.text), 'button');
+ settings = self.getSettings(),
+ buttonSettings = jQuery.extend(settings.button, options),
+ $button = self.addElement(options.name, $('<' + buttonSettings.tag + '>').text(options.text), 'button');
self.buttons.push($button);
var buttonFn = function () {
- if (self.getSettings('hide').onButtonClick) {
+ if (settings.hide.onButtonClick) {
self.hide();
}
hide: {
onButtonClick: true
},
- buttonTag: 'button'
+ button: {
+ tag: 'button'
+ }
};
},
onHide: function () {
var settings = DialogsManager.getWidgetType('buttons').prototype.getDefaultSettings.apply(this, arguments);
return $.extend(true, settings, {
- headerMessage: '',
contentWidth: 'auto',
contentHeight: 'auto',
closeButton: false,
DialogsManager.getWidgetType('buttons').prototype.buildWidget.apply(this, arguments);
- var $widgetHeader = this.addElement('widgetHeader'),
- $widgetContent = this.addElement('widgetContent');
+ var $widgetContent = this.addElement('widgetContent'),
+ elements = this.getElements();
- var elements = this.getElements();
-
- $widgetContent.append($widgetHeader, elements.message, elements.buttonsWrapper);
+ $widgetContent.append(elements.header, elements.message, elements.buttonsWrapper);
elements.widget.html($widgetContent);
if ('auto' !== settings.contentHeight) {
elements.message.height(settings.contentHeight);
}
-
- this.setHeaderMessage(settings.headerMessage);
- },
- setHeaderMessage: function (message) {
-
- this.getElements('widgetHeader').html(message);
-
- return this;
}
}));
})(
typeof jQuery !== 'undefined' ? jQuery : typeof require === 'function' && require('jquery'),
typeof module !== 'undefined' ? module.exports : window
-);
+);
\ No newline at end of file
-/*! dialogs-manager v4.2.1 | (c) Kobi Zaltzberg | https://github.com/kobizz/dialogs-manager/blob/master/LICENSE.txt
- 2018-03-06 17:12 */
-!function(a,b){"use strict";var c={widgetsTypes:{},createWidgetType:function(b,d,e){e||(e=this.Widget);var f=function(){e.apply(this,arguments)},g=f.prototype=new e(b);return g.types=g.types.concat([b]),a.extend(g,d),g.constructor=f,f.extend=function(a,b){return c.createWidgetType(a,b,f)},f},addWidgetType:function(a,b,c){return b&&b.prototype instanceof this.Widget?this.widgetsTypes[a]=b:this.widgetsTypes[a]=this.createWidgetType(a,b,c)},getWidgetType:function(a){return this.widgetsTypes[a]}};c.Instance=function(){var b=this,d={},e={},f=function(){d.body=a("body")},g=function(b){var c={classPrefix:"dialog",effects:{show:"fadeIn",hide:"fadeOut"}};a.extend(e,c,b)};this.createWidget=function(a,d){var e=c.getWidgetType(a),f=new e(a);return d=d||{},f.init(b,d),f.setMessage(d.message),f},this.getSettings=function(a){return a?e[a]:Object.create(e)},this.init=function(a){return g(a),f(),b},b.init()},c.Widget=function(b){var d=this,e={},f={},g={},h=0,i=["refreshPosition"],j=function(){g.window.on("keyup",s),e.hide.onOutsideClick&&g.window[0].addEventListener("click",r,!0),(e.hide.onClick||e.hide.onBackgroundClick)&&g.widget.on("click",q),e.position.autoRefresh&&g.window.on("resize",d.refreshPosition)},k=function(b,c){var d=e.effects[b],f=g.widget;if(a.isFunction(d))d.apply(f,c);else{if(!f[d])throw"Reference Error: The effect "+d+" not found";f[d].apply(f,c)}},l=function(){var b=i.concat(d.getClosureMethods());a.each(b,function(){var a=this,b=d[a];d[a]=function(){b.apply(d,arguments)}})},m=function(){d.addElement("widget"),d.addElement("message"),d.addElement("window",window),d.addElement("container",e.container);var b=d.getSettings("id");b&&d.setID(b);var c=[];a.each(d.types,function(){c.push(e.classes.globalPrefix+"-type-"+this)}),c.push(d.getSettings("className")),d.getElements("widget").addClass(c.join(" "))},n=function(c,f){var g=a.extend(!0,{},c.getSettings());e={effects:g.effects,classes:{globalPrefix:g.classPrefix,prefix:g.classPrefix+"-"+b},selectors:{preventClose:"."+g.classPrefix+"-prevent-close"},container:"body",position:{element:"widget",my:"center",at:"center",of:"container",enable:!0,autoRefresh:!1},hide:{auto:!1,autoDelay:5e3,onClick:!1,onOutsideClick:!0,onBackgroundClick:!0}},a.extend(!0,e,d.getDefaultSettings(),f),o()},o=function(){a.each(e,function(a){var b=a.match(/^on([A-Z].*)/);b&&(b=b[1].charAt(0).toLowerCase()+b[1].slice(1),d.on(b,this))})},p=function(a){return a.replace(/([a-z])([A-Z])/g,function(){return arguments[1]+"-"+arguments[2].toLowerCase()})},q=function(b){if(e.hide.onClick){if(a(b.target).closest(e.selectors.preventClose).length)return}else if(b.target!==this)return;d.hide()},r=function(b){a(b.target).closest(g.widget).length||d.hide()},s=function(a){var b=27,c=a.which;b===c&&d.hide()},t=function(){g.window.off("keyup",s),e.hide.onOutsideClick&&g.window[0].removeEventListener("click",r,!0),(e.hide.onClick||e.hide.onBackgroundClick)&&g.widget.off("click",q),e.position.autoRefresh&&g.window.off("resize",d.refreshPosition)};this.addElement=function(b,c,d){var f=g[b]=a(c||"<div>"),h=p(b),i=[];return d&&i.push(e.classes.globalPrefix+"-"+d),i.push(e.classes.globalPrefix+"-"+h),i.push(e.classes.prefix+"-"+h),f.addClass(i.join(" ")),f},this.getSettings=function(a){var b=Object.create(e);return a?b[a]:b},this.init=function(a,b){if(!(a instanceof c.Instance))throw"The "+d.widgetName+" must to be initialized from an instance of DialogsManager.Instance";return l(),d.trigger("init",b),n(a,b),m(),d.buildWidget(),d.attachEvents&&d.attachEvents(),d.trigger("ready"),d},this.getElements=function(a){return a?g[a]:g},this.hide=function(){return clearTimeout(h),k("hide",arguments),t(),d.trigger("hide"),d},this.isVisible=function(){return g.widget.is(":visible")},this.on=function(b,c){if("object"==typeof b)return a.each(b,function(a){d.on(a,this)}),d;var e=b.split(" ");return e.forEach(function(a){f[a]||(f[a]=[]),f[a].push(c)}),d},this.setMessage=function(a){return g.message.html(a),d},this.setID=function(a){return d.getElements("widget").attr("id",a),d},this.setSettings=function(b,c){return"object"==typeof c?a.extend(!0,e[b],c):e[b]=c,d},this.show=function(){return clearTimeout(h),g.widget.appendTo(g.container).hide(),k("show",arguments),d.refreshPosition(),e.hide.auto&&(h=setTimeout(d.hide,e.hide.autoDelay)),j(),d.trigger("show"),d},this.refreshPosition=function(){if(e.position.enable){var b=a.extend({},e.position);g[b.of]&&(b.of=g[b.of]),g[b.element].position(b)}},this.trigger=function(b,c){var e="on"+b[0].toUpperCase()+b.slice(1);d[e]&&d[e](c);var g=f[b];if(g)return a.each(g,function(a,b){b.call(d,c)}),d},this.destroy=function(){return t(),g.widget.remove(),d.trigger("destroy"),d}},c.Widget.prototype.types=[],c.Widget.prototype.buildWidget=function(){var a=this.getElements();a.widget.html(a.message)},c.Widget.prototype.getDefaultSettings=function(){return{}},c.Widget.prototype.getClosureMethods=function(){return[]},c.Widget.prototype.onHide=function(){},c.Widget.prototype.onShow=function(){},c.Widget.prototype.onInit=function(){},c.Widget.prototype.onReady=function(){},c.widgetsTypes.simple=c.Widget,c.addWidgetType("buttons",{activeKeyUp:function(a){var b=9;a.which===b&&a.preventDefault(),this.hotKeys[a.which]&&this.hotKeys[a.which](this)},activeKeyDown:function(a){var b=9;if(a.which===b){a.preventDefault();var c,d=this.focusedButton.index();a.shiftKey?(c=d-1,c<0&&(c=this.buttons.length-1)):(c=d+1,c>=this.buttons.length&&(c=0)),this.focusedButton=this.buttons[c].focus()}},addButton:function(b){var c=this,d=c.addElement(b.name,a("<"+this.getSettings("buttonTag")+">").text(b.text),"button");c.buttons.push(d);var e=function(){c.getSettings("hide").onButtonClick&&c.hide(),a.isFunction(b.callback)&&b.callback.call(this,c)};return d.on("click",e),b.hotKey&&(this.hotKeys[b.hotKey]=e),this.getElements("buttonsWrapper").append(d),b.focus&&(this.focusedButton=d),c},bindHotKeys:function(){this.getElements("window").on({keyup:this.activeKeyUp,keydown:this.activeKeyDown})},buildWidget:function(){c.Widget.prototype.buildWidget.apply(this,arguments);var a=this.addElement("buttonsWrapper");this.getElements("widget").append(a)},getClosureMethods:function(){return["activeKeyUp","activeKeyDown"]},getDefaultSettings:function(){return{hide:{onButtonClick:!0},buttonTag:"button"}},onHide:function(){this.unbindHotKeys()},onInit:function(){this.buttons=[],this.hotKeys={},this.focusedButton=null},onShow:function(){this.bindHotKeys(),this.focusedButton||(this.focusedButton=this.buttons[0]),this.focusedButton&&this.focusedButton.focus()},unbindHotKeys:function(){this.getElements("window").off({keyup:this.activeKeyUp,keydown:this.activeKeyDown})}}),c.addWidgetType("lightbox",c.getWidgetType("buttons").extend("lightbox",{getDefaultSettings:function(){var b=c.getWidgetType("buttons").prototype.getDefaultSettings.apply(this,arguments);return a.extend(!0,b,{headerMessage:"",contentWidth:"auto",contentHeight:"auto",closeButton:!1,closeButtonClass:"fa fa-times",position:{element:"widgetContent",of:"widget",autoRefresh:!0}})},buildWidget:function(){c.getWidgetType("buttons").prototype.buildWidget.apply(this,arguments);var a=this.addElement("widgetHeader"),b=this.addElement("widgetContent"),d=this.getElements();if(b.append(a,d.message,d.buttonsWrapper),d.widget.html(b),this.getSettings("closeButton")){var e=this.addElement("closeButton",'<div><i class="'+this.getSettings("closeButtonClass")+'"></i></div>');b.prepend(e)}},attachEvents:function(){this.getSettings("closeButton")&&this.getElements("closeButton").on("click",this.hide)},onReady:function(){var a=this.getElements(),b=this.getSettings();"auto"!==b.contentWidth&&a.message.width(b.contentWidth),"auto"!==b.contentHeight&&a.message.height(b.contentHeight),this.setHeaderMessage(b.headerMessage)},setHeaderMessage:function(a){return this.getElements("widgetHeader").html(a),this}})),c.addWidgetType("confirm",c.getWidgetType("lightbox").extend("confirm",{onReady:function(){c.getWidgetType("lightbox").prototype.onReady.apply(this,arguments);var a=this.getSettings("strings"),b="cancel"===this.getSettings("defaultOption");this.addButton({name:"cancel",text:a.cancel,callback:function(a){a.trigger("cancel")},focus:b}),this.addButton({name:"ok",text:a.confirm,callback:function(a){a.trigger("confirm")},focus:!b})},getDefaultSettings:function(){var a=c.getWidgetType("lightbox").prototype.getDefaultSettings.apply(this,arguments);return a.strings={confirm:"OK",cancel:"Cancel"},a.defaultOption="cancel",a}})),c.addWidgetType("alert",c.getWidgetType("lightbox").extend("alert",{onReady:function(){c.getWidgetType("lightbox").prototype.onReady.apply(this,arguments);var a=this.getSettings("strings");this.addButton({name:"ok",text:a.confirm,callback:function(a){a.trigger("confirm")}})},getDefaultSettings:function(){var a=c.getWidgetType("lightbox").prototype.getDefaultSettings.apply(this,arguments);return a.strings={confirm:"OK"},a}})),b.DialogsManager=c}("undefined"!=typeof jQuery?jQuery:"function"==typeof require&&require("jquery"),"undefined"!=typeof module?module.exports:window);
+/*! dialogs-manager v4.5.0 | (c) Kobi Zaltzberg | https://github.com/kobizz/dialogs-manager/blob/master/LICENSE.txt
+ 2018-08-27 09:35 */
+!function(a,b){"use strict";var c={widgetsTypes:{},createWidgetType:function(b,d,e){e||(e=this.Widget);var f=function(){e.apply(this,arguments)},g=f.prototype=new e(b);return g.types=g.types.concat([b]),a.extend(g,d),g.constructor=f,f.extend=function(a,b){return c.createWidgetType(a,b,f)},f},addWidgetType:function(a,b,c){return b&&b.prototype instanceof this.Widget?this.widgetsTypes[a]=b:this.widgetsTypes[a]=this.createWidgetType(a,b,c)},getWidgetType:function(a){return this.widgetsTypes[a]}};c.Instance=function(){var b=this,d={},e={},f=function(){d.body=a("body")},g=function(b){var c={classPrefix:"dialog",effects:{show:"fadeIn",hide:"fadeOut"}};a.extend(e,c,b)};this.createWidget=function(a,d){var e=c.getWidgetType(a),f=new e(a);return d=d||{},f.init(b,d),f},this.getSettings=function(a){return a?e[a]:Object.create(e)},this.init=function(a){return g(a),f(),b},b.init()},c.Widget=function(b){var d=this,e={},f={},g={},h=0,i=["refreshPosition"],j=function(){var a=[g.window];g.iframe&&a.push(jQuery(g.iframe[0].contentWindow)),a.forEach(function(a){a.on("keyup",u),e.hide.onOutsideClick&&a[0].addEventListener("click",o,!0),e.hide.onOutsideContextMenu&&a[0].addEventListener("contextmenu",o,!0),e.position.autoRefresh&&a.on("resize",d.refreshPosition)}),(e.hide.onClick||e.hide.onBackgroundClick)&&g.widget.on("click",n)},k=function(b,c){var d=e.effects[b],f=g.widget;if(a.isFunction(d))d.apply(f,c);else{if(!f[d])throw"Reference Error: The effect "+d+" not found";f[d].apply(f,c)}},l=function(){var b=i.concat(d.getClosureMethods());a.each(b,function(){var a=this,b=d[a];d[a]=function(){b.apply(d,arguments)}})},m=function(a){if(a.my){var b=/left|right/,c=/([+-]\d+)?$/,d=g.iframe.offset(),e=g.iframe[0].contentWindow,f=a.my.split(" "),h=[];1===f.length&&(b.test(f[0])?f.push("center"):f.unshift("center")),f.forEach(function(a,b){var f=a.replace(c,function(a){return a=+a||0,a+=b?d.top-e.scrollY:d.left-e.scrollX,a>=0&&(a="+"+a),a});h.push(f)}),a.my=h.join(" ")}},n=function(b){if(!s(b)){if(e.hide.onClick){if(a(b.target).closest(e.selectors.preventClose).length)return}else if(b.target!==this)return;d.hide()}},o=function(b){s(b)||a(b.target).closest(g.widget).length||d.hide()},p=function(){d.addElement("widget"),d.addElement("header"),d.addElement("message"),d.addElement("window",window),d.addElement("container",e.container),e.iframe&&d.addElement("iframe",e.iframe);var b=d.getSettings("id");b&&d.setID(b);var c=[];a.each(d.types,function(){c.push(e.classes.globalPrefix+"-type-"+this)}),c.push(d.getSettings("className")),g.widget.addClass(c.join(" "))},q=function(c,f){var g=a.extend(!0,{},c.getSettings());e={headerMessage:"",message:"",effects:g.effects,classes:{globalPrefix:g.classPrefix,prefix:g.classPrefix+"-"+b},selectors:{preventClose:"."+g.classPrefix+"-prevent-close"},container:"body",iframe:null,position:{element:"widget",my:"center",at:"center",of:"container",enable:!0,autoRefresh:!1},hide:{auto:!1,autoDelay:5e3,onClick:!1,onOutsideClick:!0,onOutsideContextMenu:!1,onBackgroundClick:!0}},a.extend(!0,e,d.getDefaultSettings(),f),r()},r=function(){a.each(e,function(a){var b=a.match(/^on([A-Z].*)/);b&&(b=b[1].charAt(0).toLowerCase()+b[1].slice(1),d.on(b,this))})},s=function(a){return"click"===a.type&&2===a.button},t=function(a){return a.replace(/([a-z])([A-Z])/g,function(){return arguments[1]+"-"+arguments[2].toLowerCase()})},u=function(a){var b=27,c=a.which;b===c&&d.hide()},v=function(){var a=[g.window];g.iframe&&a.push(jQuery(g.iframe[0].contentWindow)),a.forEach(function(a){a.off("keyup",u),e.hide.onOutsideClick&&a[0].removeEventListener("click",o,!0),e.hide.onOutsideContextMenu&&a[0].removeEventListener("contextmenu",o,!0),e.position.autoRefresh&&a.off("resize",d.refreshPosition)}),(e.hide.onClick||e.hide.onBackgroundClick)&&g.widget.off("click",n)};this.addElement=function(b,c,d){var f=g[b]=a(c||"<div>"),h=t(b),i=[];return d&&i.push(e.classes.globalPrefix+"-"+d),i.push(e.classes.globalPrefix+"-"+h),i.push(e.classes.prefix+"-"+h),f.addClass(i.join(" ")),f},this.destroy=function(){return v(),g.widget.remove(),d.trigger("destroy"),d},this.getElements=function(a){return a?g[a]:g},this.getSettings=function(a){var b=Object.create(e);return a?b[a]:b},this.hide=function(){return clearTimeout(h),k("hide",arguments),v(),d.trigger("hide"),d},this.init=function(a,b){if(!(a instanceof c.Instance))throw"The "+d.widgetName+" must to be initialized from an instance of DialogsManager.Instance";return l(),d.trigger("init",b),q(a,b),p(),d.buildWidget(),d.attachEvents&&d.attachEvents(),d.trigger("ready"),d},this.isVisible=function(){return g.widget.is(":visible")},this.on=function(b,c){if("object"==typeof b)return a.each(b,function(a){d.on(a,this)}),d;var e=b.split(" ");return e.forEach(function(a){f[a]||(f[a]=[]),f[a].push(c)}),d},this.off=function(a,b){if(!f[a])return d;if(!b)return delete f[a],d;var c=f[a].indexOf(b);return-1!==c&&delete f[a][c],d},this.refreshPosition=function(){if(e.position.enable){var b=a.extend({},e.position);g[b.of]&&(b.of=g[b.of]),e.iframe&&m(b),g[b.element].position(b)}},this.setID=function(a){return g.widget.attr("id",a),d},this.setHeaderMessage=function(a){return this.getElements("header").html(a),this},this.setMessage=function(a){return g.message.html(a),d},this.setSettings=function(b,c){return jQuery.isPlainObject(c)?a.extend(!0,e[b],c):e[b]=c,d},this.show=function(){return clearTimeout(h),g.widget.appendTo(g.container).hide(),k("show",arguments),d.refreshPosition(),e.hide.auto&&(h=setTimeout(d.hide,e.hide.autoDelay)),j(),d.trigger("show"),d},this.trigger=function(b,c){var e="on"+b[0].toUpperCase()+b.slice(1);d[e]&&d[e](c);var g=f[b];if(g)return a.each(g,function(a,b){b.call(d,c)}),d}},c.Widget.prototype.types=[],c.Widget.prototype.buildWidget=function(){var a=this.getElements(),b=this.getSettings();a.widget.append(a.header,a.message),this.setHeaderMessage(b.headerMessage),this.setMessage(b.message)},c.Widget.prototype.getDefaultSettings=function(){return{}},c.Widget.prototype.getClosureMethods=function(){return[]},c.Widget.prototype.onHide=function(){},c.Widget.prototype.onShow=function(){},c.Widget.prototype.onInit=function(){},c.Widget.prototype.onReady=function(){},c.widgetsTypes.simple=c.Widget,c.addWidgetType("buttons",{activeKeyUp:function(a){var b=9;a.which===b&&a.preventDefault(),this.hotKeys[a.which]&&this.hotKeys[a.which](this)},activeKeyDown:function(a){if(this.focusedButton){var b=9;if(a.which===b){a.preventDefault();var c,d=this.focusedButton.index();a.shiftKey?(c=d-1,c<0&&(c=this.buttons.length-1)):(c=d+1,c>=this.buttons.length&&(c=0)),this.focusedButton=this.buttons[c].focus()}}},addButton:function(b){var c=this,d=c.getSettings(),e=jQuery.extend(d.button,b),f=c.addElement(b.name,a("<"+e.tag+">").text(b.text),"button");c.buttons.push(f);var g=function(){d.hide.onButtonClick&&c.hide(),a.isFunction(b.callback)&&b.callback.call(this,c)};return f.on("click",g),b.hotKey&&(this.hotKeys[b.hotKey]=g),this.getElements("buttonsWrapper").append(f),b.focus&&(this.focusedButton=f),c},bindHotKeys:function(){this.getElements("window").on({keyup:this.activeKeyUp,keydown:this.activeKeyDown})},buildWidget:function(){c.Widget.prototype.buildWidget.apply(this,arguments);var a=this.addElement("buttonsWrapper");this.getElements("widget").append(a)},getClosureMethods:function(){return["activeKeyUp","activeKeyDown"]},getDefaultSettings:function(){return{hide:{onButtonClick:!0},button:{tag:"button"}}},onHide:function(){this.unbindHotKeys()},onInit:function(){this.buttons=[],this.hotKeys={},this.focusedButton=null},onShow:function(){this.bindHotKeys(),this.focusedButton||(this.focusedButton=this.buttons[0]),this.focusedButton&&this.focusedButton.focus()},unbindHotKeys:function(){this.getElements("window").off({keyup:this.activeKeyUp,keydown:this.activeKeyDown})}}),c.addWidgetType("lightbox",c.getWidgetType("buttons").extend("lightbox",{getDefaultSettings:function(){var b=c.getWidgetType("buttons").prototype.getDefaultSettings.apply(this,arguments);return a.extend(!0,b,{contentWidth:"auto",contentHeight:"auto",closeButton:!1,closeButtonClass:"fa fa-times",position:{element:"widgetContent",of:"widget",autoRefresh:!0}})},buildWidget:function(){c.getWidgetType("buttons").prototype.buildWidget.apply(this,arguments);var a=this.addElement("widgetContent"),b=this.getElements();if(a.append(b.header,b.message,b.buttonsWrapper),b.widget.html(a),this.getSettings("closeButton")){var d=this.addElement("closeButton",'<div><i class="'+this.getSettings("closeButtonClass")+'"></i></div>');a.prepend(d)}},attachEvents:function(){this.getSettings("closeButton")&&this.getElements("closeButton").on("click",this.hide)},onReady:function(){var a=this.getElements(),b=this.getSettings();"auto"!==b.contentWidth&&a.message.width(b.contentWidth),"auto"!==b.contentHeight&&a.message.height(b.contentHeight)}})),c.addWidgetType("confirm",c.getWidgetType("lightbox").extend("confirm",{onReady:function(){c.getWidgetType("lightbox").prototype.onReady.apply(this,arguments);var a=this.getSettings("strings"),b="cancel"===this.getSettings("defaultOption");this.addButton({name:"cancel",text:a.cancel,callback:function(a){a.trigger("cancel")},focus:b}),this.addButton({name:"ok",text:a.confirm,callback:function(a){a.trigger("confirm")},focus:!b})},getDefaultSettings:function(){var a=c.getWidgetType("lightbox").prototype.getDefaultSettings.apply(this,arguments);return a.strings={confirm:"OK",cancel:"Cancel"},a.defaultOption="cancel",a}})),c.addWidgetType("alert",c.getWidgetType("lightbox").extend("alert",{onReady:function(){c.getWidgetType("lightbox").prototype.onReady.apply(this,arguments);var a=this.getSettings("strings");this.addButton({name:"ok",text:a.confirm,callback:function(a){a.trigger("confirm")}})},getDefaultSettings:function(){var a=c.getWidgetType("lightbox").prototype.getDefaultSettings.apply(this,arguments);return a.strings={confirm:"OK"},a}})),b.DialogsManager=c}("undefined"!=typeof jQuery?jQuery:"function"==typeof require&&require("jquery"),"undefined"!=typeof module?module.exports:window);
\ No newline at end of file
-/*! Select2 4.0.6-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k<a.length;k++)if("."===(m=a[k]))a.splice(k,1),k-=1;else if(".."===m){if(0===k||1===k&&".."===a[2]||".."===a[k-1])continue;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if((e=p[o.slice(0,l).join("/")])&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=w.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),o.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var c=s[a];delete s[a],u[a]=!0,n.apply(b,c)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return void 0!==b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,c,d,f){var h,k,m,n,o,t,v,w=[],x=typeof d;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(c=!c.length&&d.length?["require","exports","module"]:c,o=0;o<c.length;o+=1)if(n=p(c[o],t),"require"===(k=n.f))w[o]=q.require(a);else if("exports"===k)w[o]=q.exports(a),v=!0;else if("module"===k)h=w[o]=q.module(a);else if(e(r,k)||e(s,k)||e(u,k))w[o]=j(k);else{if(!n.p)throw new Error(a+" missing "+k);n.p.load(n.n,g(f,!0),i(k),{}),w[o]=r[k]}m=d?d.apply(r[a],w):void 0,a&&(h&&h.exports!==b&&h.exports!==r[a]?r[a]=h.exports:m===b&&v||(r[a]=m))}else a&&(r[a]=d)},a=c=o=function(a,c,d,e,f){if("string"==typeof a)return q[a]?q[a](c):j(p(a,l(c)).f);if(!a.splice){if(t=a,t.deps&&o(t.deps,t.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?n(b,a,c,d):setTimeout(function(){n(b,a,c,d)},4),o},o.config=function(a){return o(a)},a._defined=r,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(r,a)||e(s,a)||(s[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){"function"==typeof b[d]&&("constructor"!==d&&c.push(d))}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){return Array.prototype.unshift.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;c<d;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;c<a;c++){b+=Math.floor(36*Math.random()).toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return(e!==f||"hidden"!==f&&"visible"!==f)&&("scroll"===e||"scroll"===f||(d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth))},c.escapeMarkup=function(a){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c.__cache={};var e=0;return c.GetUniqueElementId=function(a){var b=a.getAttribute("data-select2-id");return null==b&&(a.id?(b=a.id,a.setAttribute("data-select2-id",b)):(a.setAttribute("data-select2-id",++e),b=e.toString())),b},c.StoreData=function(a,b,d){var e=c.GetUniqueElementId(a);c.__cache[e]||(c.__cache[e]={}),c.__cache[e][b]=d},c.GetData=function(b,d){var e=c.GetUniqueElementId(b);return d?c.__cache[e]&&null!=c.__cache[e][d]?c.__cache[e][d]:a(b).data(d):c.__cache[e]},c.RemoveData=function(a){var b=c.GetUniqueElementId(a);null!=c.__cache[b]&&delete c.__cache[b]},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){b.find(".select2-results").append(a)},c.prototype.sort=function(a){return this.options.get("sorter")(a)},c.prototype.highlightFirstItem=function(){var a=this.$results.find(".select2-results__option[aria-selected]"),b=a.filter("[aria-selected=true]");b.length>0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var c=this;this.data.current(function(d){var e=a.map(d,function(a){return a.id.toString()});c.$results.find(".select2-results__option[aria-selected]").each(function(){var c=a(this),d=b.GetData(this,"data"),f=""+d.id;null!=d.element&&d.element.selected||null==d.element&&a.inArray(f,e)>-1?c.attr("aria-selected","true"):c.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(c){var d=document.createElement("li");d.className="select2-results__option";var e={role:"treeitem","aria-selected":"false"};c.disabled&&(delete e["aria-selected"],e["aria-disabled"]="true"),null==c.id&&delete e["aria-selected"],null!=c._resultId&&(d.id=c._resultId),c.title&&(d.title=c.title),c.children&&(e.role="group",e["aria-label"]=c.text,delete e["aria-selected"]);for(var f in e){var g=e[f];d.setAttribute(f,g)}if(c.children){var h=a(d),i=document.createElement("strong");i.className="select2-results__group";a(i);this.template(c,i);for(var j=[],k=0;k<c.children.length;k++){var l=c.children[k],m=this.option(l);j.push(m)}var n=a("<ul></ul>",{class:"select2-results__options select2-results__options--nested"});n.append(j),h.append(i),h.append(n)}else this.template(c,d);return b.StoreData(d,"data",c),d},c.prototype.bind=function(c,d){var e=this,f=c.id+"-results";this.$results.attr("id",f),c.on("results:all",function(a){e.clear(),e.append(a.data),c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("results:append",function(a){e.append(a.data),c.isOpen()&&e.setClasses()}),c.on("query",function(a){e.hideMessages(),e.showLoading(a)}),c.on("select",function(){c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("unselect",function(){c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("open",function(){e.$results.attr("aria-expanded","true"),e.$results.attr("aria-hidden","false"),e.setClasses(),e.ensureHighlightVisible()}),c.on("close",function(){e.$results.attr("aria-expanded","false"),e.$results.attr("aria-hidden","true"),e.$results.removeAttr("aria-activedescendant")}),c.on("results:toggle",function(){var a=e.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),c.on("results:select",function(){var a=e.getHighlightedResults();if(0!==a.length){var c=b.GetData(a[0],"data");"true"==a.attr("aria-selected")?e.trigger("close",{}):e.trigger("select",{data:c})}}),c.on("results:previous",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a);if(!(c<=0)){var d=c-1;0===a.length&&(d=0);var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top,h=f.offset().top,i=e.$results.scrollTop()+(h-g);0===d?e.$results.scrollTop(0):h-g<0&&e.$results.scrollTop(i)}}),c.on("results:next",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a),d=c+1;if(!(d>=b.length)){var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top+e.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=e.$results.scrollTop()+h-g;0===d?e.$results.scrollTop(0):h>g&&e.$results.scrollTop(i)}}),c.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),c.on("results:message",function(a){e.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=e.$results.scrollTop(),c=e.$results.get(0).scrollHeight-b+a.deltaY,d=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=e.$results.height();d?(e.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(e.$results.scrollTop(e.$results.get(0).scrollHeight-e.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(c){var d=a(this),f=b.GetData(this,"data");if("true"===d.attr("aria-selected"))return void(e.options.get("multiple")?e.trigger("unselect",{originalEvent:c,data:f}):e.trigger("close",{}));e.trigger("select",{originalEvent:c,data:f})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(c){var d=b.GetData(this,"data");e.getHighlightedResults().removeClass("select2-results__option--highlighted"),e.trigger("results:focus",{data:d,element:a(this)})})},c.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),c<=2?this.$results.scrollTop(0):(g>this.$results.outerHeight()||g<0)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var c=a('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=b.GetData(this.$element[0],"old-tabindex")?this._tabindex=b.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),c.attr("title",this.$element.attr("title")),c.attr("tabindex",this._tabindex),this.$selection=c,c},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),window.setTimeout(function(){d.$selection.focus()},0),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(c){a(document.body).on("mousedown.select2."+c.id,function(c){var d=a(c.target),e=d.closest(".select2");a(".select2.select2-container--open").each(function(){a(this),this!=e[0]&&b.GetData(this,"element").select2("close")})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){b.find(".selection").append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()})},e.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},e.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.attr("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,e){var f=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){f.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!f.options.get("disabled")){var d=a(this),e=d.parent(),g=c.GetData(e[0],"data");f.trigger("unselect",{originalEvent:b,data:g})}})},d.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},d.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},d.prototype.selectionContainer=function(){return a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">×</span></li>')},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.attr("title",e.title||e.text),c.StoreData(f[0],"data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id;if(b.length>1||c)return a.call(this,b);this.clear();var d=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(d)},b}),b.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(a,b,c){function d(){}return d.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},d.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var d=this.$selection.find(".select2-selection__clear");if(0!==d.length){b.stopPropagation();var e=c.GetData(d[0],"data"),f=this.$element.val();this.$element.val(this.placeholder.id);var g={data:e};if(this.trigger("clear",g),g.prevented)return void this.$element.val(f);for(var h=0;h<e.length;h++)if(g={data:e[h]},this.trigger("unselect",g),g.prevented)return void this.$element.val(f);this.$element.trigger("change"),this.trigger("toggle",{})}}},d.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||c.which!=b.DELETE&&c.which!=b.BACKSPACE||this._handleClear(c)},d.prototype.update=function(b,d){if(b.call(this,d),!(this.$selection.find(".select2-selection__placeholder").length>0||0===d.length)){var e=a('<span class="select2-selection__clear">×</span>');c.StoreData(e[0],"data",d),this.$selection.find(".select2-selection__rendered").prepend(e)}},d}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,d,e){var f=this;a.call(this,d,e),d.on("open",function(){f.$search.trigger("focus")}),d.on("close",function(){f.$search.val(""),f.$search.removeAttr("aria-activedescendant"),f.$search.trigger("focus")}),d.on("enable",function(){f.$search.prop("disabled",!1),f._transferTabIndex()}),d.on("disable",function(){f.$search.prop("disabled",!0)}),d.on("focus",function(a){f.$search.trigger("focus")}),d.on("results:focus",function(a){f.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){f.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){f._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),f.trigger("keypress",a),f._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===f.$search.val()){var d=f.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var e=b.GetData(d[0],"data");f.searchRemoveChoice(e),a.preventDefault()}}});var g=document.documentMode,h=g&&g<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(h)return void f.$selection.off("input.search input.searchcheck");f.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(h&&"input"===a.type)return void f.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&f.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;if(this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c){this.$element.find("[data-select2-tag]").length?this.$element.focus():this.$search.focus()}},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{a=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],g=["opening","closing","selecting","unselecting","clearing"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"}}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),null!=c.id?d+="-"+c.id.toString():d+="-"+a.generateChars(4),d},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple")){if(a.selected=!1,c(a.element).is("option"))return a.element.selected=!1,void this.$element.trigger("change");this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})}},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){b.RemoveData(this)})},d.prototype.query=function(a,b){var d=[],e=this;this.$element.children().each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var d;a.children?(d=document.createElement("optgroup"),d.label=a.text):(d=document.createElement("option"),void 0!==d.textContent?d.textContent=a.text:d.innerText=a.text),void 0!==a.id&&(d.value=a.id),a.disabled&&(d.disabled=!0),a.selected&&(d.selected=!0),a.title&&(d.title=a.title);var e=c(d),f=this._normalizeItem(a);return f.element=d,b.StoreData(d,"data",f),e},d.prototype.item=function(a){var d={};if(null!=(d=b.GetData(a[0],"data")))return d;if(a.is("option"))d={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){d={text:a.prop("label"),children:[],title:a.prop("title")};for(var e=a.children("option"),f=[],g=0;g<e.length;g++){var h=c(e[g]),i=this.item(h);f.push(i)}d.children=f}return d=this._normalizeItem(d),d.element=a[0],b.StoreData(a[0],"data",d),d},d.prototype._normalizeItem=function(a){a!==Object(a)&&(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){return this.options.get("matcher")(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){"status"in d&&(0===d.status||"0"===d.status)||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0);if((i.text||"").toUpperCase()===(b.term||"").toUpperCase()||j)return!f&&(a.data=g,void c(a))}if(f)return!0;var k=e.createTag(b);if(null!=k){var l=e.option(k);l.attr("data-select2-tag",!0),e.addOptions([l]),e.insertTag(g,k)}a.results=g,c(a)}var e=this;if(this._removeOldTags(),null==b.term||null!=b.page)return void a.call(this,b,c);a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){this._lastTag;this.$element.find("option[data-select2-tag]").each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(b,c,d){function e(b){var c=g._normalizeItem(b);if(!g.$element.find("option").filter(function(){return a(this).val()===c.id}).length){var d=g.option(c);d.attr("data-select2-tag",!0),g._removeOldTags(),g.addOptions([d])}f(c)}function f(a){g.trigger("select",{data:a})}var g=this;c.term=c.term||"";var h=this.tokenizer(c,this.options,e);h.term!==c.term&&(this.$search.length&&(this.$search.val(h.term),this.$search.focus()),c.term=h.term),b.call(this,c,d)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){if(b.term=b.term||"",b.term.length<this.minimumInputLength)return void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){if(b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength)return void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;if(d.maximumSelectionLength>0&&f>=d.maximumSelectionLength)return void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}});a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.blur()}),c.on("focus",function(){c.isOpen()||e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){e.showSearch(a)?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){e.$results.offset().top+e.$results.outerHeight(!1)+50>=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1)&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){b.StoreData(this,"select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(c){var d=b.GetData(this,"select2-scroll-position");a(this).scrollTop(d.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id;this.$container.parents().filter(b.hasScroll).off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return!(a(c.data.results)<this.minimumResultsForSearch)&&b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",["../utils"],function(a){function b(){}return b.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(a){d._handleSelectOnClose(a)})},b.prototype._handleSelectOnClose=function(b,c){if(c&&null!=c.originalSelect2Event){var d=c.originalSelect2Event;if("select"===d._type||"unselect"===d._type)return}var e=this.getHighlightedResults();if(!(e.length<1)){var f=a.GetData(e[0],"data");null!=f.element&&f.element.selected||null==f.element&&f.selected||this.trigger("select",{data:f})}},b}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{originalEvent:c,originalSelect2Event:b})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){return"Please enter "+(a.minimum-a.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}return D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),null==l.tokenSeparators&&null==l.tokenizer||(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(a){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(a){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var O=k.loadPath(this.defaults.amdLanguageBase+"en"),P=new k(l.language);P.extend(O),l.translations=P}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){null==c(d,e.children[g])&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var h=b(e.text).toUpperCase(),i=b(d.term).toUpperCase();return h.indexOf(i)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(!0,this.defaults,f)},new D}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),d.GetData(a[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),d.StoreData(a[0],"data",d.GetData(a[0],"select2Tags")),d.StoreData(a[0],"tags",!0)),d.GetData(a[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",d.GetData(a[0],"ajaxUrl")),d.StoreData(a[0],"ajax-Url",d.GetData(a[0],"ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,d.GetData(a[0])):d.GetData(a[0]);var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,d){null!=c.GetData(a[0],"select2")&&c.GetData(a[0],"select2").destroy(),this.$element=a,this.id=this._generateId(a),d=d||{},this.options=new b(d,a),e.__super__.constructor.call(this);var f=a.attr("tabindex")||0;c.StoreData(a[0],"old-tabindex",f),a.attr("tabindex","-1");var g=this.options.get("dataAdapter");this.dataAdapter=new g(a,this.options);var h=this.render();this._placeContainer(h);var i=this.options.get("selectionAdapter");this.selection=new i(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,h);var j=this.options.get("dropdownAdapter");this.dropdown=new j(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,h);var k=this.options.get("resultsAdapter");this.results=new k(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){l.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),c.StoreData(a[0],"select2",this),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return e<=0?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;h<i;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e<b.addedNodes.length;e++){var f=b.addedNodes[e];f.selected&&(c=!0)}else b.removedNodes&&b.removedNodes.length>0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=a&&0!==a.length||(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",c.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),c.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),c.StoreData(b[0],"element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&null!=(f=d(this))&&g.push(f)})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;if(this._isInitialized)return void b.call(this,c);this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery","../utils"],function(a,b){function c(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),a.call(this,b,c)}return c.prototype.current=function(b,c){function d(b,c){var e=[];return b.selected||-1!==a.inArray(b.id,c)?(b.selected=!0,e.push(b)):b.selected=!1,b.children&&e.push.apply(e,d(b.children,c)),e}for(var e=[],f=0;f<this._currentData.length;f++){var g=this._currentData[f];e.push.apply(e,d(g,this.$element.val().split(this._valueSeparator)))}c(e)},c.prototype.select=function(b,c){if(this.options.get("multiple")){var d=this.$element.val();d+=this._valueSeparator+c.id,this.$element.val(d),this.$element.trigger("change")}else this.current(function(b){a.map(b,function(a){a.selected=!1})}),this.$element.val(c.id),this.$element.trigger("change")},c.prototype.unselect=function(a,b){var c=this;b.selected=!1,this.current(function(a){for(var d=[],e=0;e<a.length;e++){var f=a[e];b.id!=f.id&&d.push(f.id)}c.$element.val(d.join(c._valueSeparator)),c.$element.trigger("change")})},c.prototype.query=function(a,b,c){for(var d=[],e=0;e<this._currentData.length;e++){var f=this._currentData[e],g=this.matches(b,f);null!==g&&d.push(g)}c({results:d})},c.prototype.addOptions=function(c,d){var e=a.map(d,function(a){return b.GetData(a[0],"data")});this._currentData.push.apply(this._currentData,e)},c}),b.define("select2/compat/matcher",["jquery"],function(a){function b(b){function c(c,d){var e=a.extend(!0,{},d);if(null==c.term||""===a.trim(c.term))return e;if(d.children){for(var f=d.children.length-1;f>=0;f--){var g=d.children[f];b(c.term,g.text,g)||e.children.splice(f,1)}if(e.children.length>0)return e}return b(c.term,d.text,d)?e:null}return c}return b}),b.define("select2/compat/query",[],function(){function a(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),a.call(this,b,c)}return a.prototype.query=function(a,b,c){b.callback=c,this.options.get("query").call(null,b)},a}),b.define("select2/dropdown/attachContainer",[],function(){function a(a,b,c){a.call(this,b,c)}return a.prototype.position=function(a,b,c){c.find(".dropdown-wrapper").append(b),b.addClass("select2-dropdown--below"),c.addClass("select2-container--below")},a}),b.define("select2/dropdown/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$dropdown.on(d.join(" "),function(a){a.stopPropagation()})},a}),b.define("select2/selection/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$selection.on(d.join(" "),function(a){a.stopPropagation()})},a}),function(c){"function"==typeof b.define&&b.define.amd?b.define("jquery-mousewheel",["jquery"],c):"object"==typeof exports?module.exports=c:c(a)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||n<f)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120==0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(a,b,c,d,e){if(null==a.fn.select2){var f=["open","close","destroy"];a.fn.select2=function(b){if("object"==typeof(b=b||{}))return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,g=Array.prototype.slice.call(arguments,1);return this.each(function(){var a=e.GetData(this,"select2");null==a&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=a[b].apply(a,g)}),a.inArray(b,f)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c});
\ No newline at end of file
+/*! Select2 4.0.6-rc.1 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=function(t,n){return void 0===n&&(n="undefined"!=typeof window?require("jquery"):require("jquery")(t)),e(n),n}:e(jQuery)}(function(e){var t=function(){if(e&&e.fn&&e.fn.select2&&e.fn.select2.amd)var t=e.fn.select2.amd;var n,i,r,o;return t&&t.requirejs||(t?i=t:t={},function(e){var t,o,s,a,l={},c={},u={},d={},p=Object.prototype.hasOwnProperty,h=[].slice,f=/\.js$/;function g(e,t){return p.call(e,t)}function m(e,t){var n,i,r,o,s,a,l,c,d,p,h,g=t&&t.split("/"),m=u.map,v=m&&m["*"]||{};if(e){for(s=(e=e.split("/")).length-1,u.nodeIdCompat&&f.test(e[s])&&(e[s]=e[s].replace(f,"")),"."===e[0].charAt(0)&&g&&(e=g.slice(0,g.length-1).concat(e)),d=0;d<e.length;d++)if("."===(h=e[d]))e.splice(d,1),d-=1;else if(".."===h){if(0===d||1===d&&".."===e[2]||".."===e[d-1])continue;d>0&&(e.splice(d-1,2),d-=2)}e=e.join("/")}if((g||v)&&m){for(d=(n=e.split("/")).length;d>0;d-=1){if(i=n.slice(0,d).join("/"),g)for(p=g.length;p>0;p-=1)if((r=m[g.slice(0,p).join("/")])&&(r=r[i])){o=r,a=d;break}if(o)break;!l&&v&&v[i]&&(l=v[i],c=d)}!o&&l&&(o=l,a=c),o&&(n.splice(0,a,o),e=n.join("/"))}return e}function v(t,n){return function(){var i=h.call(arguments,0);return"string"!=typeof i[0]&&1===i.length&&i.push(null),o.apply(e,i.concat([t,n]))}}function y(e){return function(t){l[e]=t}}function _(n){if(g(c,n)){var i=c[n];delete c[n],d[n]=!0,t.apply(e,i)}if(!g(l,n)&&!g(d,n))throw new Error("No "+n);return l[n]}function w(e){var t,n=e?e.indexOf("!"):-1;return n>-1&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function $(e){return e?w(e):[]}s=function(e,t){var n,i,r=w(e),o=r[0],s=t[1];return e=r[1],o&&(n=_(o=m(o,s))),o?e=n&&n.normalize?n.normalize(e,(i=s,function(e){return m(e,i)})):m(e,s):(o=(r=w(e=m(e,s)))[0],e=r[1],o&&(n=_(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:n}},a={require:function(e){return v(e)},exports:function(e){var t=l[e];return void 0!==t?t:l[e]={}},module:function(e){return{id:e,uri:"",exports:l[e],config:(t=e,function(){return u&&u.config&&u.config[t]||{}})};var t}},t=function(t,n,i,r){var o,u,p,h,f,m,w,b=[],x=typeof i;if(m=$(r=r||t),"undefined"===x||"function"===x){for(n=!n.length&&i.length?["require","exports","module"]:n,f=0;f<n.length;f+=1)if("require"===(u=(h=s(n[f],m)).f))b[f]=a.require(t);else if("exports"===u)b[f]=a.exports(t),w=!0;else if("module"===u)o=b[f]=a.module(t);else if(g(l,u)||g(c,u)||g(d,u))b[f]=_(u);else{if(!h.p)throw new Error(t+" missing "+u);h.p.load(h.n,v(r,!0),y(u),{}),b[f]=l[u]}p=i?i.apply(l[t],b):void 0,t&&(o&&o.exports!==e&&o.exports!==l[t]?l[t]=o.exports:p===e&&w||(l[t]=p))}else t&&(l[t]=i)},n=i=o=function(n,i,r,l,c){if("string"==typeof n)return a[n]?a[n](i):_(s(n,$(i)).f);if(!n.splice){if((u=n).deps&&o(u.deps,u.callback),!i)return;i.splice?(n=i,i=r,r=null):n=e}return i=i||function(){},"function"==typeof r&&(r=l,l=c),l?t(e,n,i,r):setTimeout(function(){t(e,n,i,r)},4),o},o.config=function(e){return o(e)},n._defined=l,(r=function(e,t,n){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(n=t,t=[]),g(l,e)||g(c,e)||(c[e]=[e,t,n])}).amd={jQuery:!0}}(),t.requirejs=n,t.require=i,t.define=r),t.define("almond",function(){}),t.define("jquery",[],function(){var t=e||$;return null==t&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),t}),t.define("select2/utils",["jquery"],function(e){var t={};function n(e){var t=e.prototype,n=[];for(var i in t){"function"==typeof t[i]&&("constructor"!==i&&n.push(i))}return n}t.Extend=function(e,t){var n={}.hasOwnProperty;function i(){this.constructor=e}for(var r in t)n.call(t,r)&&(e[r]=t[r]);return i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype,e},t.Decorate=function(e,t){var i=n(t),r=n(e);function o(){var n=Array.prototype.unshift,i=t.prototype.constructor.length,r=e.prototype.constructor;i>0&&(n.call(arguments,e.prototype.constructor),r=t.prototype.constructor),r.apply(this,arguments)}t.displayName=e.displayName,o.prototype=new function(){this.constructor=o};for(var s=0;s<r.length;s++){var a=r[s];o.prototype[a]=e.prototype[a]}for(var l=function(e){var n=function(){};e in o.prototype&&(n=o.prototype[e]);var i=t.prototype[e];return function(){return Array.prototype.unshift.call(arguments,n),i.apply(this,arguments)}},c=0;c<i.length;c++){var u=i[c];o.prototype[u]=l(u)}return o};var i=function(){this.listeners={}};i.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},i.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),n[0]._type=e,e in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},i.prototype.invoke=function(e,t){for(var n=0,i=e.length;n<i;n++)e[n].apply(this,t)},t.Observable=i,t.generateChars=function(e){for(var t="",n=0;n<e;n++){t+=Math.floor(36*Math.random()).toString(36)}return t},t.bind=function(e,t){return function(){e.apply(t,arguments)}},t._convertData=function(e){for(var t in e){var n=t.split("-"),i=e;if(1!==n.length){for(var r=0;r<n.length;r++){var o=n[r];(o=o.substring(0,1).toLowerCase()+o.substring(1))in i||(i[o]={}),r==n.length-1&&(i[o]=e[t]),i=i[o]}delete e[t]}}return e},t.hasScroll=function(t,n){var i=e(n),r=n.style.overflowX,o=n.style.overflowY;return(r!==o||"hidden"!==o&&"visible"!==o)&&("scroll"===r||"scroll"===o||(i.innerHeight()<n.scrollHeight||i.innerWidth()<n.scrollWidth))},t.escapeMarkup=function(e){var t={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},t.appendMany=function(t,n){if("1.7"===e.fn.jquery.substr(0,3)){var i=e();e.map(n,function(e){i=i.add(e)}),n=i}t.append(n)},t.__cache={};var r=0;return t.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++r),t=r.toString())),t},t.StoreData=function(e,n,i){var r=t.GetUniqueElementId(e);t.__cache[r]||(t.__cache[r]={}),t.__cache[r][n]=i},t.GetData=function(n,i){var r=t.GetUniqueElementId(n);return i?t.__cache[r]&&null!=t.__cache[r][i]?t.__cache[r][i]:e(n).data(i):t.__cache[r]},t.RemoveData=function(e){var n=t.GetUniqueElementId(e);null!=t.__cache[n]&&delete t.__cache[n]},t}),t.define("select2/results",["jquery","./utils"],function(e,t){function n(e,t,i){this.$element=e,this.data=i,this.options=t,n.__super__.constructor.call(this)}return t.Extend(n,t.Observable),n.prototype.render=function(){var t=e('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&t.attr("aria-multiselectable","true"),this.$results=t,t},n.prototype.clear=function(){this.$results.empty()},n.prototype.displayMessage=function(t){var n=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var i=e('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),r=this.options.get("translations").get(t.message);i.append(n(r(t.args))),i[0].className+=" select2-results__message",this.$results.append(i)},n.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},n.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n<e.results.length;n++){var i=e.results[n],r=this.option(i);t.push(r)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"})},n.prototype.position=function(e,t){t.find(".select2-results").append(e)},n.prototype.sort=function(e){return this.options.get("sorter")(e)},n.prototype.highlightFirstItem=function(){var e=this.$results.find(".select2-results__option[aria-selected]"),t=e.filter("[aria-selected=true]");t.length>0?t.first().trigger("mouseenter"):e.first().trigger("mouseenter"),this.ensureHighlightVisible()},n.prototype.setClasses=function(){var n=this;this.data.current(function(i){var r=e.map(i,function(e){return e.id.toString()});n.$results.find(".select2-results__option[aria-selected]").each(function(){var n=e(this),i=t.GetData(this,"data"),o=""+i.id;null!=i.element&&i.element.selected||null==i.element&&e.inArray(o,r)>-1?n.attr("aria-selected","true"):n.attr("aria-selected","false")})})},n.prototype.showLoading=function(e){this.hideLoading();var t={disabled:!0,loading:!0,text:this.options.get("translations").get("searching")(e)},n=this.option(t);n.className+=" loading-results",this.$results.prepend(n)},n.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},n.prototype.option=function(n){var i=document.createElement("li");i.className="select2-results__option";var r={role:"treeitem","aria-selected":"false"};for(var o in n.disabled&&(delete r["aria-selected"],r["aria-disabled"]="true"),null==n.id&&delete r["aria-selected"],null!=n._resultId&&(i.id=n._resultId),n.title&&(i.title=n.title),n.children&&(r.role="group",r["aria-label"]=n.text,delete r["aria-selected"]),r){var s=r[o];i.setAttribute(o,s)}if(n.children){var a=e(i),l=document.createElement("strong");l.className="select2-results__group";e(l);this.template(n,l);for(var c=[],u=0;u<n.children.length;u++){var d=n.children[u],p=this.option(d);c.push(p)}var h=e("<ul></ul>",{class:"select2-results__options select2-results__options--nested"});h.append(c),a.append(l),a.append(h)}else this.template(n,i);return t.StoreData(i,"data",n),i},n.prototype.bind=function(n,i){var r=this,o=n.id+"-results";this.$results.attr("id",o),n.on("results:all",function(e){r.clear(),r.append(e.data),n.isOpen()&&(r.setClasses(),r.highlightFirstItem())}),n.on("results:append",function(e){r.append(e.data),n.isOpen()&&r.setClasses()}),n.on("query",function(e){r.hideMessages(),r.showLoading(e)}),n.on("select",function(){n.isOpen()&&(r.setClasses(),r.highlightFirstItem())}),n.on("unselect",function(){n.isOpen()&&(r.setClasses(),r.highlightFirstItem())}),n.on("open",function(){r.$results.attr("aria-expanded","true"),r.$results.attr("aria-hidden","false"),r.setClasses(),r.ensureHighlightVisible()}),n.on("close",function(){r.$results.attr("aria-expanded","false"),r.$results.attr("aria-hidden","true"),r.$results.removeAttr("aria-activedescendant")}),n.on("results:toggle",function(){var e=r.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),n.on("results:select",function(){var e=r.getHighlightedResults();if(0!==e.length){var n=t.GetData(e[0],"data");"true"==e.attr("aria-selected")?r.trigger("close",{}):r.trigger("select",{data:n})}}),n.on("results:previous",function(){var e=r.getHighlightedResults(),t=r.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var i=n-1;0===e.length&&(i=0);var o=t.eq(i);o.trigger("mouseenter");var s=r.$results.offset().top,a=o.offset().top,l=r.$results.scrollTop()+(a-s);0===i?r.$results.scrollTop(0):a-s<0&&r.$results.scrollTop(l)}}),n.on("results:next",function(){var e=r.getHighlightedResults(),t=r.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var i=t.eq(n);i.trigger("mouseenter");var o=r.$results.offset().top+r.$results.outerHeight(!1),s=i.offset().top+i.outerHeight(!1),a=r.$results.scrollTop()+s-o;0===n?r.$results.scrollTop(0):s>o&&r.$results.scrollTop(a)}}),n.on("results:focus",function(e){e.element.addClass("select2-results__option--highlighted")}),n.on("results:message",function(e){r.displayMessage(e)}),e.fn.mousewheel&&this.$results.on("mousewheel",function(e){var t=r.$results.scrollTop(),n=r.$results.get(0).scrollHeight-t+e.deltaY,i=e.deltaY>0&&t-e.deltaY<=0,o=e.deltaY<0&&n<=r.$results.height();i?(r.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):o&&(r.$results.scrollTop(r.$results.get(0).scrollHeight-r.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(n){var i=e(this),o=t.GetData(this,"data");"true"!==i.attr("aria-selected")?r.trigger("select",{originalEvent:n,data:o}):r.options.get("multiple")?r.trigger("unselect",{originalEvent:n,data:o}):r.trigger("close",{})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(n){var i=t.GetData(this,"data");r.getHighlightedResults().removeClass("select2-results__option--highlighted"),r.trigger("results:focus",{data:i,element:e(this)})})},n.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},n.prototype.destroy=function(){this.$results.remove()},n.prototype.ensureHighlightVisible=function(){var e=this.getHighlightedResults();if(0!==e.length){var t=this.$results.find("[aria-selected]").index(e),n=this.$results.offset().top,i=e.offset().top,r=this.$results.scrollTop()+(i-n),o=i-n;r-=2*e.outerHeight(!1),t<=2?this.$results.scrollTop(0):(o>this.$results.outerHeight()||o<0)&&this.$results.scrollTop(r)}},n.prototype.template=function(t,n){var i=this.options.get("templateResult"),r=this.options.get("escapeMarkup"),o=i(t,n);null==o?n.style.display="none":"string"==typeof o?n.innerHTML=r(o):e(n).append(o)},n}),t.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),t.define("select2/selection/base",["jquery","../utils","../keys"],function(e,t,n){function i(e,t){this.$element=e,this.options=t,i.__super__.constructor.call(this)}return t.Extend(i,t.Observable),i.prototype.render=function(){var n=e('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=t.GetData(this.$element[0],"old-tabindex")?this._tabindex=t.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),n.attr("title",this.$element.attr("title")),n.attr("tabindex",this._tabindex),this.$selection=n,n},i.prototype.bind=function(e,t){var i=this,r=(e.id,e.id+"-results");this.container=e,this.$selection.on("focus",function(e){i.trigger("focus",e)}),this.$selection.on("blur",function(e){i._handleBlur(e)}),this.$selection.on("keydown",function(e){i.trigger("keypress",e),e.which===n.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){i.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){i.update(e.data)}),e.on("open",function(){i.$selection.attr("aria-expanded","true"),i.$selection.attr("aria-owns",r),i._attachCloseHandler(e)}),e.on("close",function(){i.$selection.attr("aria-expanded","false"),i.$selection.removeAttr("aria-activedescendant"),i.$selection.removeAttr("aria-owns"),i.$selection.focus(),window.setTimeout(function(){i.$selection.focus()},0),i._detachCloseHandler(e)}),e.on("enable",function(){i.$selection.attr("tabindex",i._tabindex)}),e.on("disable",function(){i.$selection.attr("tabindex","-1")})},i.prototype._handleBlur=function(t){var n=this;window.setTimeout(function(){document.activeElement==n.$selection[0]||e.contains(n.$selection[0],document.activeElement)||n.trigger("blur",t)},1)},i.prototype._attachCloseHandler=function(n){e(document.body).on("mousedown.select2."+n.id,function(n){var i=e(n.target).closest(".select2");e(".select2.select2-container--open").each(function(){e(this);this!=i[0]&&t.GetData(this,"element").select2("close")})})},i.prototype._detachCloseHandler=function(t){e(document.body).off("mousedown.select2."+t.id)},i.prototype.position=function(e,t){t.find(".selection").append(e)},i.prototype.destroy=function(){this._detachCloseHandler(this.container)},i.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},i}),t.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,i){function r(){r.__super__.constructor.apply(this,arguments)}return n.Extend(r,t),r.prototype.render=function(){var e=r.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),e},r.prototype.bind=function(e,t){var n=this;r.__super__.bind.apply(this,arguments);var i=e.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",i).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",i),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),e.on("focus",function(t){e.isOpen()||n.$selection.focus()})},r.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},r.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},r.prototype.selectionContainer=function(){return e("<span></span>")},r.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),i=this.display(t,n);n.empty().append(i),n.attr("title",t.title||t.text)}else this.clear()},r}),t.define("select2/selection/multiple",["jquery","./base","../utils"],function(e,t,n){function i(e,t){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html('<ul class="select2-selection__rendered"></ul>'),e},i.prototype.bind=function(t,r){var o=this;i.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){o.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(t){if(!o.options.get("disabled")){var i=e(this).parent(),r=n.GetData(i[0],"data");o.trigger("unselect",{originalEvent:t,data:r})}})},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">×</span></li>')},i.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],i=0;i<e.length;i++){var r=e[i],o=this.selectionContainer(),s=this.display(r,o);o.append(s),o.attr("title",r.title||r.text),n.StoreData(o[0],"data",r),t.push(o)}var a=this.$selection.find(".select2-selection__rendered");n.appendMany(a,t)}},i}),t.define("select2/selection/placeholder",["../utils"],function(e){function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n)}return t.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},t.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();return n.html(this.display(t)),n.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),n},t.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(t.length>1||n)return e.call(this,t);this.clear();var i=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(i)},t}),t.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(e,t,n){function i(){}return i.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(e){i._handleClear(e)}),t.on("keypress",function(e){i._handleKeyboardClear(e,t)})},i.prototype._handleClear=function(e,t){if(!this.options.get("disabled")){var i=this.$selection.find(".select2-selection__clear");if(0!==i.length){t.stopPropagation();var r=n.GetData(i[0],"data"),o=this.$element.val();this.$element.val(this.placeholder.id);var s={data:r};if(this.trigger("clear",s),s.prevented)this.$element.val(o);else{for(var a=0;a<r.length;a++)if(s={data:r[a]},this.trigger("unselect",s),s.prevented)return void this.$element.val(o);this.$element.trigger("change"),this.trigger("toggle",{})}}}},i.prototype._handleKeyboardClear=function(e,n,i){i.isOpen()||n.which!=t.DELETE&&n.which!=t.BACKSPACE||this._handleClear(n)},i.prototype.update=function(t,i){if(t.call(this,i),!(this.$selection.find(".select2-selection__placeholder").length>0||0===i.length)){var r=e('<span class="select2-selection__clear">×</span>');n.StoreData(r[0],"data",i),this.$selection.find(".select2-selection__rendered").prepend(r)}},i}),t.define("select2/selection/search",["jquery","../utils","../keys"],function(e,t,n){function i(e,t,n){e.call(this,t,n)}return i.prototype.render=function(t){var n=e('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=n,this.$search=n.find("input");var i=t.call(this);return this._transferTabIndex(),i},i.prototype.bind=function(e,i,r){var o=this;e.call(this,i,r),i.on("open",function(){o.$search.trigger("focus")}),i.on("close",function(){o.$search.val(""),o.$search.removeAttr("aria-activedescendant"),o.$search.trigger("focus")}),i.on("enable",function(){o.$search.prop("disabled",!1),o._transferTabIndex()}),i.on("disable",function(){o.$search.prop("disabled",!0)}),i.on("focus",function(e){o.$search.trigger("focus")}),i.on("results:focus",function(e){o.$search.attr("aria-activedescendant",e.id)}),this.$selection.on("focusin",".select2-search--inline",function(e){o.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){o._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),o.trigger("keypress",e),o._keyUpPrevented=e.isDefaultPrevented(),e.which===n.BACKSPACE&&""===o.$search.val()){var i=o.$searchContainer.prev(".select2-selection__choice");if(i.length>0){var r=t.GetData(i[0],"data");o.searchRemoveChoice(r),e.preventDefault()}}});var s=document.documentMode,a=s&&s<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(e){a?o.$selection.off("input.search input.searchcheck"):o.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(e){if(a&&"input"===e.type)o.$selection.off("input.search input.searchcheck");else{var t=e.which;t!=n.SHIFT&&t!=n.CTRL&&t!=n.ALT&&t!=n.TAB&&o.handleSearch(e)}})},i.prototype._transferTabIndex=function(e){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},i.prototype.createPlaceholder=function(e,t){this.$search.attr("placeholder",t.text)},i.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;(this.$search.attr("placeholder",""),e.call(this,t),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),n)&&(this.$element.find("[data-select2-tag]").length?this.$element.focus():this.$search.focus())},i.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var e=this.$search.val();this.trigger("query",{term:e})}this._keyUpPrevented=!1},i.prototype.searchRemoveChoice=function(e,t){this.trigger("unselect",{data:t}),this.$search.val(t.text),this.handleSearch()},i.prototype.resizeSearch=function(){this.$search.css("width","25px");var e="";""!==this.$search.attr("placeholder")?e=this.$selection.find(".select2-selection__rendered").innerWidth():e=.75*(this.$search.val().length+1)+"em";this.$search.css("width",e)},i}),t.define("select2/selection/eventRelay",["jquery"],function(e){function t(){}return t.prototype.bind=function(t,n,i){var r=this,o=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],s=["opening","closing","selecting","unselecting","clearing"];t.call(this,n,i),n.on("*",function(t,n){if(-1!==e.inArray(t,o)){n=n||{};var i=e.Event("select2:"+t,{params:n});r.$element.trigger(i),-1!==e.inArray(t,s)&&(n.prevented=i.isDefaultPrevented())}})},t}),t.define("select2/translation",["jquery","require"],function(e,t){function n(e){this.dict=e||{}}return n.prototype.all=function(){return this.dict},n.prototype.get=function(e){return this.dict[e]},n.prototype.extend=function(t){this.dict=e.extend({},t.all(),this.dict)},n._cache={},n.loadPath=function(e){if(!(e in n._cache)){var i=t(e);n._cache[e]=i}return new n(n._cache[e])},n}),t.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"}}),t.define("select2/data/base",["../utils"],function(e){function t(e,n){t.__super__.constructor.call(this)}return e.Extend(t,e.Observable),t.prototype.current=function(e){throw new Error("The `current` method must be defined in child classes.")},t.prototype.query=function(e,t){throw new Error("The `query` method must be defined in child classes.")},t.prototype.bind=function(e,t){},t.prototype.destroy=function(){},t.prototype.generateResultId=function(t,n){var i=t.id+"-result-";return i+=e.generateChars(4),null!=n.id?i+="-"+n.id.toString():i+="-"+e.generateChars(4),i},t}),t.define("select2/data/select",["./base","../utils","jquery"],function(e,t,n){function i(e,t){this.$element=e,this.options=t,i.__super__.constructor.call(this)}return t.Extend(i,e),i.prototype.current=function(e){var t=[],i=this;this.$element.find(":selected").each(function(){var e=n(this),r=i.item(e);t.push(r)}),e(t)},i.prototype.select=function(e){var t=this;if(e.selected=!0,n(e.element).is("option"))return e.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(i){var r=[];(e=[e]).push.apply(e,i);for(var o=0;o<e.length;o++){var s=e[o].id;-1===n.inArray(s,r)&&r.push(s)}t.$element.val(r),t.$element.trigger("change")});else{var i=e.id;this.$element.val(i),this.$element.trigger("change")}},i.prototype.unselect=function(e){var t=this;if(this.$element.prop("multiple")){if(e.selected=!1,n(e.element).is("option"))return e.element.selected=!1,void this.$element.trigger("change");this.current(function(i){for(var r=[],o=0;o<i.length;o++){var s=i[o].id;s!==e.id&&-1===n.inArray(s,r)&&r.push(s)}t.$element.val(r),t.$element.trigger("change")})}},i.prototype.bind=function(e,t){var n=this;this.container=e,e.on("select",function(e){n.select(e.data)}),e.on("unselect",function(e){n.unselect(e.data)})},i.prototype.destroy=function(){this.$element.find("*").each(function(){t.RemoveData(this)})},i.prototype.query=function(e,t){var i=[],r=this;this.$element.children().each(function(){var t=n(this);if(t.is("option")||t.is("optgroup")){var o=r.item(t),s=r.matches(e,o);null!==s&&i.push(s)}}),t({results:i})},i.prototype.addOptions=function(e){t.appendMany(this.$element,e)},i.prototype.option=function(e){var i;e.children?(i=document.createElement("optgroup")).label=e.text:void 0!==(i=document.createElement("option")).textContent?i.textContent=e.text:i.innerText=e.text,void 0!==e.id&&(i.value=e.id),e.disabled&&(i.disabled=!0),e.selected&&(i.selected=!0),e.title&&(i.title=e.title);var r=n(i),o=this._normalizeItem(e);return o.element=i,t.StoreData(i,"data",o),r},i.prototype.item=function(e){var i={};if(null!=(i=t.GetData(e[0],"data")))return i;if(e.is("option"))i={id:e.val(),text:e.text(),disabled:e.prop("disabled"),selected:e.prop("selected"),title:e.prop("title")};else if(e.is("optgroup")){i={text:e.prop("label"),children:[],title:e.prop("title")};for(var r=e.children("option"),o=[],s=0;s<r.length;s++){var a=n(r[s]),l=this.item(a);o.push(l)}i.children=o}return(i=this._normalizeItem(i)).element=e[0],t.StoreData(e[0],"data",i),i},i.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=n.extend({},{text:""},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),n.extend({},{selected:!1,disabled:!1},e)},i.prototype.matches=function(e,t){return this.options.get("matcher")(e,t)},i}),t.define("select2/data/array",["./select","../utils","jquery"],function(e,t,n){function i(e,t){var n=t.get("data")||[];i.__super__.constructor.call(this,e,t),this.addOptions(this.convertToOptions(n))}return t.Extend(i,e),i.prototype.select=function(e){var t=this.$element.find("option").filter(function(t,n){return n.value==e.id.toString()});0===t.length&&(t=this.option(e),this.addOptions(t)),i.__super__.select.call(this,e)},i.prototype.convertToOptions=function(e){var i=this,r=this.$element.find("option"),o=r.map(function(){return i.item(n(this)).id}).get(),s=[];function a(e){return function(){return n(this).val()==e.id}}for(var l=0;l<e.length;l++){var c=this._normalizeItem(e[l]);if(n.inArray(c.id,o)>=0){var u=r.filter(a(c)),d=this.item(u),p=n.extend(!0,{},c,d),h=this.option(p);u.replaceWith(h)}else{var f=this.option(c);if(c.children){var g=this.convertToOptions(c.children);t.appendMany(f,g)}s.push(f)}}return s},i}),t.define("select2/data/ajax",["./array","../utils","jquery"],function(e,t,n){function i(e,t){this.ajaxOptions=this._applyDefaults(t.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),i.__super__.constructor.call(this,e,t)}return t.Extend(i,e),i.prototype._applyDefaults=function(e){var t={data:function(e){return n.extend({},e,{q:e.term})},transport:function(e,t,i){var r=n.ajax(e);return r.then(t),r.fail(i),r}};return n.extend({},t,e,!0)},i.prototype.processResults=function(e){return e},i.prototype.query=function(e,t){var i=this;null!=this._request&&(n.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var r=n.extend({type:"GET"},this.ajaxOptions);function o(){var o=r.transport(r,function(r){var o=i.processResults(r,e);i.options.get("debug")&&window.console&&console.error&&(o&&o.results&&n.isArray(o.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),t(o)},function(){"status"in o&&(0===o.status||"0"===o.status)||i.trigger("results:message",{message:"errorLoading"})});i._request=o}"function"==typeof r.url&&(r.url=r.url.call(this.$element,e)),"function"==typeof r.data&&(r.data=r.data.call(this.$element,e)),this.ajaxOptions.delay&&null!=e.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(o,this.ajaxOptions.delay)):o()},i}),t.define("select2/data/tags",["jquery"],function(e){function t(t,n,i){var r=i.get("tags"),o=i.get("createTag");void 0!==o&&(this.createTag=o);var s=i.get("insertTag");if(void 0!==s&&(this.insertTag=s),t.call(this,n,i),e.isArray(r))for(var a=0;a<r.length;a++){var l=r[a],c=this._normalizeItem(l),u=this.option(c);this.$element.append(u)}}return t.prototype.query=function(e,t,n){var i=this;this._removeOldTags(),null!=t.term&&null==t.page?e.call(this,t,function e(r,o){for(var s=r.results,a=0;a<s.length;a++){var l=s[a],c=null!=l.children&&!e({results:l.children},!0);if((l.text||"").toUpperCase()===(t.term||"").toUpperCase()||c)return!o&&(r.data=s,void n(r))}if(o)return!0;var u=i.createTag(t);if(null!=u){var d=i.option(u);d.attr("data-select2-tag",!0),i.addOptions([d]),i.insertTag(s,u)}r.results=s,n(r)}):e.call(this,t,n)},t.prototype.createTag=function(t,n){var i=e.trim(n.term);return""===i?null:{id:i,text:i}},t.prototype.insertTag=function(e,t,n){t.unshift(n)},t.prototype._removeOldTags=function(t){this._lastTag;this.$element.find("option[data-select2-tag]").each(function(){this.selected||e(this).remove()})},t}),t.define("select2/data/tokenizer",["jquery"],function(e){function t(e,t,n){var i=n.get("tokenizer");void 0!==i&&(this.tokenizer=i),e.call(this,t,n)}return t.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(".select2-search__field")},t.prototype.query=function(t,n,i){var r=this;n.term=n.term||"";var o=this.tokenizer(n,this.options,function(t){var n,i=r._normalizeItem(t);if(!r.$element.find("option").filter(function(){return e(this).val()===i.id}).length){var o=r.option(i);o.attr("data-select2-tag",!0),r._removeOldTags(),r.addOptions([o])}n=i,r.trigger("select",{data:n})});o.term!==n.term&&(this.$search.length&&(this.$search.val(o.term),this.$search.focus()),n.term=o.term),t.call(this,n,i)},t.prototype.tokenizer=function(t,n,i,r){for(var o=i.get("tokenSeparators")||[],s=n.term,a=0,l=this.createTag||function(e){return{id:e.term,text:e.term}};a<s.length;){var c=s[a];if(-1!==e.inArray(c,o)){var u=s.substr(0,a),d=l(e.extend({},n,{term:u}));null!=d?(r(d),s=s.substr(a+1)||"",a=0):a++}else a++}return{term:s}},t}),t.define("select2/data/minimumInputLength",[],function(){function e(e,t,n){this.minimumInputLength=n.get("minimumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",t.term.length<this.minimumInputLength?this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),t.define("select2/data/maximumInputLength",[],function(){function e(e,t,n){this.maximumInputLength=n.get("maximumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",this.maximumInputLength>0&&t.term.length>this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),t.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){var i=this;this.current(function(r){var o=null!=r?r.length:0;i.maximumSelectionLength>0&&o>=i.maximumSelectionLength?i.trigger("results:message",{message:"maximumSelected",args:{maximum:i.maximumSelectionLength}}):e.call(i,t,n)})},e}),t.define("select2/dropdown",["jquery","./utils"],function(e,t){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return t.Extend(n,t.Observable),n.prototype.render=function(){var t=e('<span class="select2-dropdown"><span class="select2-results"></span></span>');return t.attr("dir",this.options.get("dir")),this.$dropdown=t,t},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),t.define("select2/dropdown/search",["jquery","../utils"],function(e,t){function n(){}return n.prototype.render=function(t){var n=t.call(this),i=e('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=i,this.$search=i.find("input"),n.prepend(i),n},n.prototype.bind=function(t,n,i){var r=this;t.call(this,n,i),this.$search.on("keydown",function(e){r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(t){e(this).off("keyup")}),this.$search.on("keyup input",function(e){r.handleSearch(e)}),n.on("open",function(){r.$search.attr("tabindex",0),r.$search.focus(),window.setTimeout(function(){r.$search.focus()},0)}),n.on("close",function(){r.$search.attr("tabindex",-1),r.$search.val(""),r.$search.blur()}),n.on("focus",function(){n.isOpen()||r.$search.focus()}),n.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(r.showSearch(e)?r.$searchContainer.removeClass("select2-search--hide"):r.$searchContainer.addClass("select2-search--hide"))})},n.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},n.prototype.showSearch=function(e,t){return!0},n}),t.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,i){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,i)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),i=t.length-1;i>=0;i--){var r=t[i];this.placeholder.id===r.id&&n.splice(i,1)}return n},e}),t.define("select2/dropdown/infiniteScroll",["jquery"],function(e){function t(e,t,n,i){this.lastParams={},e.call(this,t,n,i),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return t.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&this.$results.append(this.$loadingMore)},t.prototype.bind=function(t,n,i){var r=this;t.call(this,n,i),n.on("query",function(e){r.lastParams=e,r.loading=!0}),n.on("query:append",function(e){r.lastParams=e,r.loading=!0}),this.$results.on("scroll",function(){var t=e.contains(document.documentElement,r.$loadingMore[0]);!r.loading&&t&&(r.$results.offset().top+r.$results.outerHeight(!1)+50>=r.$loadingMore.offset().top+r.$loadingMore.outerHeight(!1)&&r.loadMore())})},t.prototype.loadMore=function(){this.loading=!0;var t=e.extend({},{page:1},this.lastParams);t.page++,this.trigger("query:append",t)},t.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},t.prototype.createLoadingMore=function(){var t=e('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),n=this.options.get("translations").get("loadingMore");return t.html(n(this.lastParams)),t},t}),t.define("select2/dropdown/attachBody",["jquery","../utils"],function(e,t){function n(t,n,i){this.$dropdownParent=i.get("dropdownParent")||e(document.body),t.call(this,n,i)}return n.prototype.bind=function(e,t,n){var i=this,r=!1;e.call(this,t,n),t.on("open",function(){i._showDropdown(),i._attachPositioningHandler(t),r||(r=!0,t.on("results:all",function(){i._positionDropdown(),i._resizeDropdown()}),t.on("results:append",function(){i._positionDropdown(),i._resizeDropdown()}))}),t.on("close",function(){i._hideDropdown(),i._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},n.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},n.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},n.prototype.render=function(t){var n=e("<span></span>"),i=t.call(this);return n.append(i),this.$dropdownContainer=n,n},n.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},n.prototype._attachPositioningHandler=function(n,i){var r=this,o="scroll.select2."+i.id,s="resize.select2."+i.id,a="orientationchange.select2."+i.id,l=this.$container.parents().filter(t.hasScroll);l.each(function(){t.StoreData(this,"select2-scroll-position",{x:e(this).scrollLeft(),y:e(this).scrollTop()})}),l.on(o,function(e){r._positionDropdown()}),e(window).on(o+" "+s+" "+a,function(e){r._positionDropdown(),r._resizeDropdown()})},n.prototype._detachPositioningHandler=function(n,i){var r="scroll.select2."+i.id,o="resize.select2."+i.id,s="orientationchange.select2."+i.id;this.$container.parents().filter(t.hasScroll).off(r),e(window).off(r+" "+o+" "+s)},n.prototype._positionDropdown=function(){var t=e(window),n=this.$dropdown.hasClass("select2-dropdown--above"),i=this.$dropdown.hasClass("select2-dropdown--below"),r=null,o=this.$container.offset();o.bottom=o.top+this.$container.outerHeight(!1);var s={height:this.$container.outerHeight(!1)};s.top=o.top,s.bottom=o.top+s.height;var a=this.$dropdown.outerHeight(!1),l=t.scrollTop(),c=t.scrollTop()+t.height(),u=l<o.top-a,d=c>o.bottom+a,p={left:o.left,top:s.bottom},h=this.$dropdownParent;"static"===h.css("position")&&(h=h.offsetParent());var f=h.offset();p.top-=f.top,p.left-=f.left,n||i||(r="below"),d||!u||n?!u&&d&&n&&(r="below"):r="above",("above"==r||n&&"below"!==r)&&(p.top=s.top-f.top-a),null!=r&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+r),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+r)),this.$dropdownContainer.css(p)},n.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},n.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},n}),t.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,i){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,i)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,i=0;i<t.length;i++){var r=t[i];r.children?n+=e(r.children):n++}return n}(t.data.results)<this.minimumResultsForSearch)&&e.call(this,t)},e}),t.define("select2/dropdown/selectOnClose",["../utils"],function(e){function t(){}return t.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("close",function(e){i._handleSelectOnClose(e)})},t.prototype._handleSelectOnClose=function(t,n){if(n&&null!=n.originalSelect2Event){var i=n.originalSelect2Event;if("select"===i._type||"unselect"===i._type)return}var r=this.getHighlightedResults();if(!(r.length<1)){var o=e.GetData(r[0],"data");null!=o.element&&o.element.selected||null==o.element&&o.selected||this.trigger("select",{data:o})}},t}),t.define("select2/dropdown/closeOnSelect",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var i=this;e.call(this,t,n),t.on("select",function(e){i._selectTriggered(e)}),t.on("unselect",function(e){i._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&n.ctrlKey||this.trigger("close",{originalEvent:n,originalSelect2Event:t})},e}),t.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return 1!=t&&(n+="s"),n},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return 1!=e.maximum&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),t.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(e,t,n,i,r,o,s,a,l,c,u,d,p,h,f,g,m,v,y,_,w,$,b,x,A,D,S,C,E){function O(){this.reset()}return O.prototype.apply=function(d){if(null==(d=e.extend(!0,{},this.defaults,d)).dataAdapter){if(null!=d.ajax?d.dataAdapter=f:null!=d.data?d.dataAdapter=h:d.dataAdapter=p,d.minimumInputLength>0&&(d.dataAdapter=c.Decorate(d.dataAdapter,v)),d.maximumInputLength>0&&(d.dataAdapter=c.Decorate(d.dataAdapter,y)),d.maximumSelectionLength>0&&(d.dataAdapter=c.Decorate(d.dataAdapter,_)),d.tags&&(d.dataAdapter=c.Decorate(d.dataAdapter,g)),null==d.tokenSeparators&&null==d.tokenizer||(d.dataAdapter=c.Decorate(d.dataAdapter,m)),null!=d.query){var E=t(d.amdBase+"compat/query");d.dataAdapter=c.Decorate(d.dataAdapter,E)}if(null!=d.initSelection){var O=t(d.amdBase+"compat/initSelection");d.dataAdapter=c.Decorate(d.dataAdapter,O)}}if(null==d.resultsAdapter&&(d.resultsAdapter=n,null!=d.ajax&&(d.resultsAdapter=c.Decorate(d.resultsAdapter,x)),null!=d.placeholder&&(d.resultsAdapter=c.Decorate(d.resultsAdapter,b)),d.selectOnClose&&(d.resultsAdapter=c.Decorate(d.resultsAdapter,S))),null==d.dropdownAdapter){if(d.multiple)d.dropdownAdapter=w;else{var q=c.Decorate(w,$);d.dropdownAdapter=q}if(0!==d.minimumResultsForSearch&&(d.dropdownAdapter=c.Decorate(d.dropdownAdapter,D)),d.closeOnSelect&&(d.dropdownAdapter=c.Decorate(d.dropdownAdapter,C)),null!=d.dropdownCssClass||null!=d.dropdownCss||null!=d.adaptDropdownCssClass){var T=t(d.amdBase+"compat/dropdownCss");d.dropdownAdapter=c.Decorate(d.dropdownAdapter,T)}d.dropdownAdapter=c.Decorate(d.dropdownAdapter,A)}if(null==d.selectionAdapter){if(d.multiple?d.selectionAdapter=r:d.selectionAdapter=i,null!=d.placeholder&&(d.selectionAdapter=c.Decorate(d.selectionAdapter,o)),d.allowClear&&(d.selectionAdapter=c.Decorate(d.selectionAdapter,s)),d.multiple&&(d.selectionAdapter=c.Decorate(d.selectionAdapter,a)),null!=d.containerCssClass||null!=d.containerCss||null!=d.adaptContainerCssClass){var j=t(d.amdBase+"compat/containerCss");d.selectionAdapter=c.Decorate(d.selectionAdapter,j)}d.selectionAdapter=c.Decorate(d.selectionAdapter,l)}if("string"==typeof d.language)if(d.language.indexOf("-")>0){var L=d.language.split("-")[0];d.language=[d.language,L]}else d.language=[d.language];if(e.isArray(d.language)){var k=new u;d.language.push("en");for(var P=d.language,I=0;I<P.length;I++){var M=P[I],R={};try{R=u.loadPath(M)}catch(e){try{M=this.defaults.amdLanguageBase+M,R=u.loadPath(M)}catch(e){d.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}k.extend(R)}d.translations=k}else{var U=u.loadPath(this.defaults.amdLanguageBase+"en"),z=new u(d.language);z.extend(U),d.translations=z}return d},O.prototype.reset=function(){function t(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return d[e]||e})}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:c.escapeMarkup,language:E,matcher:function n(i,r){if(""===e.trim(i.term))return r;if(r.children&&r.children.length>0){for(var o=e.extend(!0,{},r),s=r.children.length-1;s>=0;s--)null==n(i,r.children[s])&&o.children.splice(s,1);return o.children.length>0?o:n(i,o)}var a=t(r.text).toUpperCase(),l=t(i.term).toUpperCase();return a.indexOf(l)>-1?r:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:"default",width:"resolve"}},O.prototype.set=function(t,n){var i={};i[e.camelCase(t)]=n;var r=c._convertData(i);e.extend(!0,this.defaults,r)},new O}),t.define("select2/options",["require","jquery","./defaults","./utils"],function(e,t,n,i){function r(t,r){if(this.options=t,null!=r&&this.fromElement(r),this.options=n.apply(this.options),r&&r.is("input")){var o=e(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=i.Decorate(this.options.dataAdapter,o)}}return r.prototype.fromElement=function(e){var n=["select2"];null==this.options.multiple&&(this.options.multiple=e.prop("multiple")),null==this.options.disabled&&(this.options.disabled=e.prop("disabled")),null==this.options.language&&(e.prop("lang")?this.options.language=e.prop("lang").toLowerCase():e.closest("[lang]").prop("lang")&&(this.options.language=e.closest("[lang]").prop("lang"))),null==this.options.dir&&(e.prop("dir")?this.options.dir=e.prop("dir"):e.closest("[dir]").prop("dir")?this.options.dir=e.closest("[dir]").prop("dir"):this.options.dir="ltr"),e.prop("disabled",this.options.disabled),e.prop("multiple",this.options.multiple),i.GetData(e[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),i.StoreData(e[0],"data",i.GetData(e[0],"select2Tags")),i.StoreData(e[0],"tags",!0)),i.GetData(e[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),e.attr("ajax--url",i.GetData(e[0],"ajaxUrl")),i.StoreData(e[0],"ajax-Url",i.GetData(e[0],"ajaxUrl")));var r={};r=t.fn.jquery&&"1."==t.fn.jquery.substr(0,2)&&e[0].dataset?t.extend(!0,{},e[0].dataset,i.GetData(e[0])):i.GetData(e[0]);var o=t.extend(!0,{},r);for(var s in o=i._convertData(o))t.inArray(s,n)>-1||(t.isPlainObject(this.options[s])?t.extend(this.options[s],o[s]):this.options[s]=o[s]);return this},r.prototype.get=function(e){return this.options[e]},r.prototype.set=function(e,t){this.options[e]=t},r}),t.define("select2/core",["jquery","./options","./utils","./keys"],function(e,t,n,i){var r=function(e,i){null!=n.GetData(e[0],"select2")&&n.GetData(e[0],"select2").destroy(),this.$element=e,this.id=this._generateId(e),i=i||{},this.options=new t(i,e),r.__super__.constructor.call(this);var o=e.attr("tabindex")||0;n.StoreData(e[0],"old-tabindex",o),e.attr("tabindex","-1");var s=this.options.get("dataAdapter");this.dataAdapter=new s(e,this.options);var a=this.render();this._placeContainer(a);var l=this.options.get("selectionAdapter");this.selection=new l(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,a);var c=this.options.get("dropdownAdapter");this.dropdown=new c(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,a);var u=this.options.get("resultsAdapter");this.results=new u(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var d=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){d.trigger("selection:update",{data:e})}),e.addClass("select2-hidden-accessible"),e.attr("aria-hidden","true"),this._syncAttributes(),n.StoreData(e[0],"select2",this),e.data("select2",this)};return n.Extend(r,n.Observable),r.prototype._generateId=function(e){return"select2-"+(null!=e.attr("id")?e.attr("id"):null!=e.attr("name")?e.attr("name")+"-"+n.generateChars(2):n.generateChars(4)).replace(/(:|\.|\[|\]|,)/g,"")},r.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get("width"));null!=t&&e.css("width",t)},r.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==t){var i=this._resolveWidth(e,"style");return null!=i?i:this._resolveWidth(e,"element")}if("element"==t){var r=e.outerWidth(!1);return r<=0?"auto":r+"px"}if("style"==t){var o=e.attr("style");if("string"!=typeof o)return null;for(var s=o.split(";"),a=0,l=s.length;a<l;a+=1){var c=s[a].replace(/\s/g,"").match(n);if(null!==c&&c.length>=1)return c[1]}return null}return t},r.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},r.prototype._registerDomEvents=function(){var t=this;this.$element.on("change.select2",function(){t.dataAdapter.current(function(e){t.trigger("selection:update",{data:e})})}),this.$element.on("focus.select2",function(e){t.trigger("focus",e)}),this._syncA=n.bind(this._syncAttributes,this),this._syncS=n.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var i=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=i?(this._observer=new i(function(n){e.each(n,t._syncA),e.each(n,t._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",t._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",t._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",t._syncS,!1))},r.prototype._registerDataEvents=function(){var e=this;this.dataAdapter.on("*",function(t,n){e.trigger(t,n)})},r.prototype._registerSelectionEvents=function(){var t=this,n=["toggle","focus"];this.selection.on("toggle",function(){t.toggleDropdown()}),this.selection.on("focus",function(e){t.focus(e)}),this.selection.on("*",function(i,r){-1===e.inArray(i,n)&&t.trigger(i,r)})},r.prototype._registerDropdownEvents=function(){var e=this;this.dropdown.on("*",function(t,n){e.trigger(t,n)})},r.prototype._registerResultsEvents=function(){var e=this;this.results.on("*",function(t,n){e.trigger(t,n)})},r.prototype._registerEvents=function(){var e=this;this.on("open",function(){e.$container.addClass("select2-container--open")}),this.on("close",function(){e.$container.removeClass("select2-container--open")}),this.on("enable",function(){e.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){e.$container.addClass("select2-container--disabled")}),this.on("blur",function(){e.$container.removeClass("select2-container--focus")}),this.on("query",function(t){e.isOpen()||e.trigger("open",{}),this.dataAdapter.query(t,function(n){e.trigger("results:all",{data:n,query:t})})}),this.on("query:append",function(t){this.dataAdapter.query(t,function(n){e.trigger("results:append",{data:n,query:t})})}),this.on("keypress",function(t){var n=t.which;e.isOpen()?n===i.ESC||n===i.TAB||n===i.UP&&t.altKey?(e.close(),t.preventDefault()):n===i.ENTER?(e.trigger("results:select",{}),t.preventDefault()):n===i.SPACE&&t.ctrlKey?(e.trigger("results:toggle",{}),t.preventDefault()):n===i.UP?(e.trigger("results:previous",{}),t.preventDefault()):n===i.DOWN&&(e.trigger("results:next",{}),t.preventDefault()):(n===i.ENTER||n===i.SPACE||n===i.DOWN&&t.altKey)&&(e.open(),t.preventDefault())})},r.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},r.prototype._syncSubtree=function(e,t){var n=!1,i=this;if(!e||!e.target||"OPTION"===e.target.nodeName||"OPTGROUP"===e.target.nodeName){if(t)if(t.addedNodes&&t.addedNodes.length>0)for(var r=0;r<t.addedNodes.length;r++){t.addedNodes[r].selected&&(n=!0)}else t.removedNodes&&t.removedNodes.length>0&&(n=!0);else n=!0;n&&this.dataAdapter.current(function(e){i.trigger("selection:update",{data:e})})}},r.prototype.trigger=function(e,t){var n=r.__super__.trigger,i={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===t&&(t={}),e in i){var o=i[e],s={prevented:!1,name:e,args:t};if(n.call(this,o,s),s.prevented)return void(t.prevented=!0)}n.call(this,e,t)},r.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},r.prototype.open=function(){this.isOpen()||this.trigger("query",{})},r.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},r.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},r.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},r.prototype.focus=function(e){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},r.prototype.enable=function(e){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=e&&0!==e.length||(e=[!0]);var t=!e[0];this.$element.prop("disabled",t)},r.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var e=[];return this.dataAdapter.current(function(t){e=t}),e},r.prototype.val=function(t){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==t||0===t.length)return this.$element.val();var n=t[0];e.isArray(n)&&(n=e.map(n,function(e){return e.toString()})),this.$element.val(n).trigger("change")},r.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",n.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),n.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},r.prototype.render=function(){var t=e('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return t.attr("dir",this.options.get("dir")),this.$container=t,this.$container.addClass("select2-container--"+this.options.get("theme")),n.StoreData(t[0],"element",this.$element),t},r}),t.define("select2/compat/utils",["jquery"],function(e){return{syncCssClasses:function(t,n,i){var r,o,s=[];(r=e.trim(t.attr("class")))&&e((r=""+r).split(/\s+/)).each(function(){0===this.indexOf("select2-")&&s.push(this)}),(r=e.trim(n.attr("class")))&&e((r=""+r).split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&null!=(o=i(this))&&s.push(o)}),t.attr("class",s.join(" "))}}}),t.define("select2/compat/containerCss",["jquery","./utils"],function(e,t){function n(e){return null}function i(){}return i.prototype.render=function(i){var r=i.call(this),o=this.options.get("containerCssClass")||"";e.isFunction(o)&&(o=o(this.$element));var s=this.options.get("adaptContainerCssClass");if(s=s||n,-1!==o.indexOf(":all:")){o=o.replace(":all:","");var a=s;s=function(e){var t=a(e);return null!=t?t+" "+e:e}}var l=this.options.get("containerCss")||{};return e.isFunction(l)&&(l=l(this.$element)),t.syncCssClasses(r,this.$element,s),r.css(l),r.addClass(o),r},i}),t.define("select2/compat/dropdownCss",["jquery","./utils"],function(e,t){function n(e){return null}function i(){}return i.prototype.render=function(i){var r=i.call(this),o=this.options.get("dropdownCssClass")||"";e.isFunction(o)&&(o=o(this.$element));var s=this.options.get("adaptDropdownCssClass");if(s=s||n,-1!==o.indexOf(":all:")){o=o.replace(":all:","");var a=s;s=function(e){var t=a(e);return null!=t?t+" "+e:e}}var l=this.options.get("dropdownCss")||{};return e.isFunction(l)&&(l=l(this.$element)),t.syncCssClasses(r,this.$element,s),r.css(l),r.addClass(o),r},i}),t.define("select2/compat/initSelection",["jquery"],function(e){function t(e,t,n){n.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=n.get("initSelection"),this._isInitialized=!1,e.call(this,t,n)}return t.prototype.current=function(t,n){var i=this;this._isInitialized?t.call(this,n):this.initSelection.call(null,this.$element,function(t){i._isInitialized=!0,e.isArray(t)||(t=[t]),n(t)})},t}),t.define("select2/compat/inputData",["jquery","../utils"],function(e,t){function n(e,t,n){this._currentData=[],this._valueSeparator=n.get("valueSeparator")||",","hidden"===t.prop("type")&&n.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),e.call(this,t,n)}return n.prototype.current=function(t,n){function i(t,n){var r=[];return t.selected||-1!==e.inArray(t.id,n)?(t.selected=!0,r.push(t)):t.selected=!1,t.children&&r.push.apply(r,i(t.children,n)),r}for(var r=[],o=0;o<this._currentData.length;o++){var s=this._currentData[o];r.push.apply(r,i(s,this.$element.val().split(this._valueSeparator)))}n(r)},n.prototype.select=function(t,n){if(this.options.get("multiple")){var i=this.$element.val();i+=this._valueSeparator+n.id,this.$element.val(i),this.$element.trigger("change")}else this.current(function(t){e.map(t,function(e){e.selected=!1})}),this.$element.val(n.id),this.$element.trigger("change")},n.prototype.unselect=function(e,t){var n=this;t.selected=!1,this.current(function(e){for(var i=[],r=0;r<e.length;r++){var o=e[r];t.id!=o.id&&i.push(o.id)}n.$element.val(i.join(n._valueSeparator)),n.$element.trigger("change")})},n.prototype.query=function(e,t,n){for(var i=[],r=0;r<this._currentData.length;r++){var o=this._currentData[r],s=this.matches(t,o);null!==s&&i.push(s)}n({results:i})},n.prototype.addOptions=function(n,i){var r=e.map(i,function(e){return t.GetData(e[0],"data")});this._currentData.push.apply(this._currentData,r)},n}),t.define("select2/compat/matcher",["jquery"],function(e){return function(t){return function(n,i){var r=e.extend(!0,{},i);if(null==n.term||""===e.trim(n.term))return r;if(i.children){for(var o=i.children.length-1;o>=0;o--){var s=i.children[o];t(n.term,s.text,s)||r.children.splice(o,1)}if(r.children.length>0)return r}return t(n.term,i.text,i)?r:null}}}),t.define("select2/compat/query",[],function(){function e(e,t,n){n.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.callback=n,this.options.get("query").call(null,t)},e}),t.define("select2/dropdown/attachContainer",[],function(){function e(e,t,n){e.call(this,t,n)}return e.prototype.position=function(e,t,n){n.find(".dropdown-wrapper").append(t),t.addClass("select2-dropdown--below"),n.addClass("select2-container--below")},e}),t.define("select2/dropdown/stopPropagation",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$dropdown.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(e){e.stopPropagation()})},e}),t.define("select2/selection/stopPropagation",[],function(){function e(){}return e.prototype.bind=function(e,t,n){e.call(this,t,n);this.$selection.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(e){e.stopPropagation()})},e}),o=function(e){var t,n,i=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],r="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],o=Array.prototype.slice;if(e.event.fixHooks)for(var s=i.length;s;)e.event.fixHooks[i[--s]]=e.event.mouseHooks;var a=e.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var t=r.length;t;)this.addEventListener(r[--t],l,!1);else this.onmousewheel=l;e.data(this,"mousewheel-line-height",a.getLineHeight(this)),e.data(this,"mousewheel-page-height",a.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var t=r.length;t;)this.removeEventListener(r[--t],l,!1);else this.onmousewheel=null;e.removeData(this,"mousewheel-line-height"),e.removeData(this,"mousewheel-page-height")},getLineHeight:function(t){var n=e(t),i=n["offsetParent"in e.fn?"offsetParent":"parent"]();return i.length||(i=e("body")),parseInt(i.css("fontSize"),10)||parseInt(n.css("fontSize"),10)||16},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function l(i){var r,s=i||window.event,l=o.call(arguments,1),d=0,p=0,h=0,f=0,g=0;if((i=e.event.fix(s)).type="mousewheel","detail"in s&&(h=-1*s.detail),"wheelDelta"in s&&(h=s.wheelDelta),"wheelDeltaY"in s&&(h=s.wheelDeltaY),"wheelDeltaX"in s&&(p=-1*s.wheelDeltaX),"axis"in s&&s.axis===s.HORIZONTAL_AXIS&&(p=-1*h,h=0),d=0===h?p:h,"deltaY"in s&&(d=h=-1*s.deltaY),"deltaX"in s&&(p=s.deltaX,0===h&&(d=-1*p)),0!==h||0!==p){if(1===s.deltaMode){var m=e.data(this,"mousewheel-line-height");d*=m,h*=m,p*=m}else if(2===s.deltaMode){var v=e.data(this,"mousewheel-page-height");d*=v,h*=v,p*=v}if(r=Math.max(Math.abs(h),Math.abs(p)),(!n||r<n)&&(n=r,u(s,r)&&(n/=40)),u(s,r)&&(d/=40,p/=40,h/=40),d=Math[d>=1?"floor":"ceil"](d/n),p=Math[p>=1?"floor":"ceil"](p/n),h=Math[h>=1?"floor":"ceil"](h/n),a.settings.normalizeOffset&&this.getBoundingClientRect){var y=this.getBoundingClientRect();f=i.clientX-y.left,g=i.clientY-y.top}return i.deltaX=p,i.deltaY=h,i.deltaFactor=n,i.offsetX=f,i.offsetY=g,i.deltaMode=0,l.unshift(i,d,p,h),t&&clearTimeout(t),t=setTimeout(c,200),(e.event.dispatch||e.event.handle).apply(this,l)}}function c(){n=null}function u(e,t){return a.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}e.fn.extend({mousewheel:function(e){return e?this.bind("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this.unbind("mousewheel",e)}})},"function"==typeof t.define&&t.define.amd?t.define("jquery-mousewheel",["jquery"],o):"object"==typeof exports?module.exports=o:o(e),t.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(e,t,n,i,r){if(null==e.fn.select2){var o=["open","close","destroy"];e.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var i=e.extend(!0,{},t);new n(e(this),i)}),this;if("string"==typeof t){var i,s=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=r.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),i=e[t].apply(e,s)}),e.inArray(t,o)>-1?this:i}throw new Error("Invalid arguments for Select2: "+t)}}return null==e.fn.select2.defaults&&(e.fn.select2.defaults=i),n}),{define:t.define,require:t.require}}(),n=t.require("jquery.select2");return e.fn.select2.amd=t,n});
\ No newline at end of file
@font-face {
font-family: 'eicons';
- src: url("../fonts/eicons.eot?3.3.0");
- src: url("../fonts/eicons.eot?3.3.0#iefix") format("embedded-opentype"), url("../fonts/eicons.woff2?3.3.0") format("woff2"), url("../fonts/eicons.woff?3.3.0") format("woff"), url("../fonts/eicons.ttf?3.3.0") format("truetype"), url("../fonts/eicons.svg?3.3.0#eicon") format("svg");
+ src: url("../fonts/eicons.eot?3.8.0");
+ src: url("../fonts/eicons.eot?3.8.0#iefix") format("embedded-opentype"), url("../fonts/eicons.woff2?3.8.0") format("woff2"), url("../fonts/eicons.woff?3.8.0") format("woff"), url("../fonts/eicons.ttf?3.8.0") format("truetype"), url("../fonts/eicons.svg?3.8.0#eicon") format("svg");
font-weight: normal;
font-style: normal; }
.eicon-minus-square:before {
content: '\e987'; }
+.eicon-cloud-check:before {
+ content: '\e988'; }
+
+.eicon-drag-n-drop:before {
+ content: '\e989'; }
+
+.eicon-home-heart:before {
+ content: '\e990'; }
+
+.eicon-handle:before {
+ content: '\e991'; }
+
+.eicon-cart:before {
+ content: '\e992'; }
+
+.eicon-product-add-to-cart:before {
+ content: '\e993'; }
+
+.eicon-product-breadcrumbs:before {
+ content: '\e994'; }
+
+.eicon-product-categories:before {
+ content: '\e995'; }
+
+.eicon-product-description:before {
+ content: '\e996'; }
+
+.eicon-product-images:before {
+ content: '\e997'; }
+
+.eicon-product-info:before {
+ content: '\e998'; }
+
+.eicon-product-meta:before {
+ content: '\e999'; }
+
+.eicon-product-pages:before {
+ content: '\e1000'; }
+
+.eicon-product-price:before {
+ content: '\e1001'; }
+
+.eicon-product-rating:before {
+ content: '\e1002'; }
+
+.eicon-product-related:before {
+ content: '\e1003'; }
+
+.eicon-product-stock:before {
+ content: '\e1004'; }
+
+.eicon-product-tabs:before {
+ content: '\e1005'; }
+
+.eicon-product-title:before {
+ content: '\e1006'; }
+
+.eicon-product-upsell:before {
+ content: '\e1007'; }
+
+.eicon-products:before {
+ content: '\e1008'; }
+
+.eicon-bag-light:before {
+ content: '\e1009'; }
+
+.eicon-bag-medium:before {
+ content: '\e1010'; }
+
+.eicon-bag-solid:before {
+ content: '\e1011'; }
+
+.eicon-basket-light:before {
+ content: '\e1012'; }
+
+.eicon-basket-medium:before {
+ content: '\e1013'; }
+
+.eicon-basket-solid:before {
+ content: '\e1014'; }
+
+.eicon-cart-light:before {
+ content: '\e1015'; }
+
+.eicon-cart-medium:before {
+ content: '\e1016'; }
+
+.eicon-cart-solid:before {
+ content: '\e1017'; }
+
+.eicon-exchange:before {
+ content: '\e1018'; }
+
+.eicon-eye:before {
+ content: '\e1019'; }
+
+.eicon-laptop:before {
+ content: '\e1020'; }
+
+.eicon-collapse:before {
+ content: '\e1021'; }
+
+.eicon-expand:before {
+ content: '\e1022'; }
+
+.eicon-navigator:before {
+ content: '\e1023'; }
+
.eicon-editor-link:before {
content: '\e500'; }
-/*! elementor-icons - v3.3.0 - 26-04-2018 */
-@font-face{font-family:eicons;src:url(../fonts/eicons.eot?3.3.0);src:url(../fonts/eicons.eot?3.3.0#iefix) format("embedded-opentype"),url(../fonts/eicons.woff2?3.3.0) format("woff2"),url(../fonts/eicons.woff?3.3.0) format("woff"),url(../fonts/eicons.ttf?3.3.0) format("truetype"),url(../fonts/eicons.svg?3.3.0#eicon) format("svg");font-weight:400;font-style:normal}[class*=" eicon-"],[class^=eicon]{display:inline-block;font-family:eicons;font-size:inherit;font-weight:400;font-style:normal;font-variant:normal;line-height:1;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.eicon-animation-spin{animation:a 2s infinite linear}.eicon-elementor:before{content:'\e800'}.eicon-elementor-square:before{content:'\e801'}.eicon-pojome:before{content:'\e802'}.eicon-plus:before{content:'\e803'}.eicon-menu-bar:before{content:'\e804'}.eicon-apps:before{content:'\e805'}.eicon-accordion:before{content:'\e806'}.eicon-alert:before{content:'\e807'}.eicon-animation-text:before{content:'\e808'}.eicon-animation:before{content:'\e809'}.eicon-banner:before{content:'\e810'}.eicon-blockquote:before{content:'\e811'}.eicon-button:before{content:'\e812'}.eicon-call-to-action:before{content:'\e813'}.eicon-captcha:before{content:'\e814'}.eicon-carousel:before{content:'\e815'}.eicon-checkbox:before{content:'\e816'}.eicon-columns:before{content:'\e817'}.eicon-countdown:before{content:'\e818'}.eicon-counter:before{content:'\e819'}.eicon-date:before{content:'\e820'}.eicon-divider-shape:before{content:'\e821'}.eicon-divider:before{content:'\e822'}.eicon-download-button:before{content:'\e823'}.eicon-dual-button:before{content:'\e824'}.eicon-email-field:before{content:'\e825'}.eicon-facebook-comments:before{content:'\e826'}.eicon-facebook-like-box:before{content:'\e827'}.eicon-form-horizontal:before{content:'\e828'}.eicon-form-vertical:before{content:'\e829'}.eicon-gallery-grid:before{content:'\e830'}.eicon-gallery-group:before{content:'\e831'}.eicon-gallery-justified:before{content:'\e832'}.eicon-gallery-masonry:before{content:'\e833'}.eicon-icon-box:before{content:'\e834'}.eicon-image-before-after:before{content:'\e835'}.eicon-image-box:before{content:'\e836'}.eicon-image-hotspot:before{content:'\e837'}.eicon-image-rollover:before{content:'\e838'}.eicon-info-box:before{content:'\e839'}.eicon-inner-section:before{content:'\e840'}.eicon-mailchimp:before{content:'\e841'}.eicon-menu-card:before{content:'\e842'}.eicon-navigation-horizontal:before{content:'\e843'}.eicon-nav-menu:before{content:'\e844'}.eicon-navigation-vertical:before{content:'\e845'}.eicon-number-field:before{content:'\e846'}.eicon-parallax:before{content:'\e847'}.eicon-php7:before{content:'\e848'}.eicon-post-list:before{content:'\e849'}.eicon-post-slider:before{content:'\e850'}.eicon-post:before{content:'\e851'}.eicon-posts-carousel:before{content:'\e852'}.eicon-posts-grid:before{content:'\e853'}.eicon-posts-group:before{content:'\e854'}.eicon-posts-justified:before{content:'\e855'}.eicon-posts-masonry:before{content:'\e856'}.eicon-posts-ticker:before{content:'\e857'}.eicon-price-list:before{content:'\e858'}.eicon-price-table:before{content:'\e859'}.eicon-radio:before{content:'\e860'}.eicon-rtl:before{content:'\e861'}.eicon-scroll:before{content:'\e862'}.eicon-search:before{content:'\e863'}.eicon-select:before{content:'\e864'}.eicon-share:before{content:'\e865'}.eicon-sidebar:before{content:'\e866'}.eicon-skill-bar:before{content:'\e867'}.eicon-slider-3d:before{content:'\e868'}.eicon-slider-album:before{content:'\e869'}.eicon-slider-device:before{content:'\e870'}.eicon-slider-full-screen:before{content:'\e871'}.eicon-slider-push:before{content:'\e872'}.eicon-slider-vertical:before{content:'\e873'}.eicon-slider-video:before{content:'\e874'}.eicon-slideshow:before{content:'\e875'}.eicon-social-icons:before{content:'\e876'}.eicon-spacer:before{content:'\e877'}.eicon-table:before{content:'\e878'}.eicon-tabs:before{content:'\e879'}.eicon-tel-field:before{content:'\e880'}.eicon-text-area:before{content:'\e881'}.eicon-text-field:before{content:'\e882'}.eicon-thumbnails-down:before{content:'\e883'}.eicon-thumbnails-half:before{content:'\e884'}.eicon-thumbnails-right:before{content:'\e885'}.eicon-time-line:before{content:'\e886'}.eicon-toggle:before{content:'\e887'}.eicon-url:before{content:'\e888'}.eicon-type-tool:before{content:'\e889'}.eicon-wordpress:before{content:'\e890'}.eicon-align-left:before{content:'\e891'}.eicon-anchor:before{content:'\e892'}.eicon-bullet-list:before{content:'\e893'}.eicon-coding:before{content:'\e894'}.eicon-favorite:before{content:'\e895'}.eicon-google-maps:before{content:'\e896'}.eicon-insert-image:before{content:'\e897'}.eicon-photo-library:before{content:'\e898'}.eicon-woocommerce:before{content:'\e899'}.eicon-youtube:before{content:'\e900'}.eicon-flip-box:before{content:'\e901'}.eicon-settings:before{content:'\e902'}.eicon-headphones:before{content:'\e903'}.eicon-testimonial:before{content:'\e904'}.eicon-counter-circle:before{content:'\e905'}.eicon-person:before{content:'\e906'}.eicon-chevron-right:before{content:'\e907'}.eicon-chevron-left:before{content:'\e908'}.eicon-close:before{content:'\e909'}.eicon-file-download:before{content:'\e910'}.eicon-save:before{content:'\e911'}.eicon-zoom-in:before{content:'\e912'}.eicon-shortcode:before{content:'\e913'}.eicon-nerd:before{content:'\e914'}.eicon-device-desktop:before{content:'\e915'}.eicon-device-tablet:before{content:'\e916'}.eicon-device-mobile:before{content:'\e917'}.eicon-document-file:before{content:'\e918'}.eicon-folder:before{content:'\e919'}.eicon-hypster:before{content:'\e920'}.eicon-h-align-left:before{content:'\e921'}.eicon-h-align-right:before{content:'\e922'}.eicon-h-align-center:before{content:'\e923'}.eicon-h-align-stretch:before{content:'\e924'}.eicon-v-align-top:before{content:'\e925'}.eicon-v-align-bottom:before{content:'\e926'}.eicon-v-align-middle:before{content:'\e927'}.eicon-v-align-stretch:before{content:'\e928'}.eicon-pro-icon:before{content:'\e929'}.eicon-mail:before{content:'\e930'}.eicon-lock-user:before{content:'\e931'}.eicon-testimonial-carousel:before{content:'\e932'}.eicon-media-carousel:before{content:'\e933'}.eicon-section:before{content:'\e934'}.eicon-column:before{content:'\e935'}.eicon-edit:before{content:'\e936'}.eicon-clone:before{content:'\e937'}.eicon-trash:before{content:'\e938'}.eicon-play:before{content:'\e939'}.eicon-angle-right:before{content:'\e940'}.eicon-angle-left:before{content:'\e941'}.eicon-animated-headline:before{content:'\e942'}.eicon-menu-toggle:before{content:'\e943'}.eicon-fb-embed:before{content:'\e944'}.eicon-fb-feed:before{content:'\e945'}.eicon-twitter-embed:before{content:'\e946'}.eicon-twitter-feed:before{content:'\e947'}.eicon-sync:before{content:'\e948'}.eicon-import-export:before{content:'\e949'}.eicon-check-circle:before{content:'\e950'}.eicon-library-save:before{content:'\e951'}.eicon-library-download:before{content:'\e952'}.eicon-insert:before{content:'\e953'}.eicon-preview:before{content:'\e954'}.eicon-sort-down:before{content:'\e955'}.eicon-sort-up:before{content:'\e956'}.eicon-heading:before{content:'\e957'}.eicon-logo:before{content:'\e958'}.eicon-meta-data:before{content:'\e959'}.eicon-post-content:before{content:'\e960'}.eicon-post-excerpt:before{content:'\e961'}.eicon-post-navigation:before{content:'\e962'}.eicon-yoast:before{content:'\e963'}.eicon-nerd-chuckle:before{content:'\e964'}.eicon-nerd-wink:before{content:'\e965'}.eicon-comments:before{content:'\e966'}.eicon-download-circle-o:before{content:'\e967'}.eicon-library-upload:before{content:'\e968'}.eicon-save-o:before{content:'\e969'}.eicon-upload-circle-o:before{content:'\e970'}.eicon-ellipsis-h:before{content:'\e971'}.eicon-ellipsis-v:before{content:'\e972'}.eicon-arrow-left:before{content:'\e973'}.eicon-arrow-right:before{content:'\e974'}.eicon-arrow-up:before{content:'\e975'}.eicon-arrow-down:before{content:'\e976'}.eicon-play-o:before{content:'\e977'}.eicon-archive-posts:before{content:'\e978'}.eicon-archive-title:before{content:'\e979'}.eicon-featured-image:before{content:'\e980'}.eicon-post-info:before{content:'\e981'}.eicon-post-title:before{content:'\e982'}.eicon-site-logo:before{content:'\e983'}.eicon-site-search:before{content:'\e984'}.eicon-site-title:before{content:'\e985'}.eicon-plus-square:before{content:'\e986'}.eicon-minus-square:before{content:'\e987'}.eicon-editor-link:before{content:'\e500'}.eicon-editor-unlink:before{content:'\e501'}.eicon-editor-external-link:before{content:'\e502'}.eicon-editor-close:before{content:'\e503'}.eicon-editor-list-ol:before{content:'\e504'}.eicon-editor-list-ul:before{content:'\e505'}.eicon-editor-bold:before{content:'\e506'}.eicon-editor-italic:before{content:'\e507'}.eicon-editor-underline:before{content:'\e508'}.eicon-editor-paragraph:before{content:'\e509'}.eicon-editor-h1:before{content:'\e510'}.eicon-editor-h2:before{content:'\e511'}.eicon-editor-h3:before{content:'\e512'}.eicon-editor-h4:before{content:'\e513'}.eicon-editor-h5:before{content:'\e514'}.eicon-editor-h6:before{content:'\e515'}.eicon-editor-quote:before{content:'\e516'}.eicon-editor-code:before{content:'\e517'}.eicon-times:before{content:'\e909'}.eicon-floppy-o:before{content:'\e911'}
\ No newline at end of file
+/*! elementor-icons - v3.8.0 - 23-07-2018 */
+@font-face{font-family:eicons;src:url(../fonts/eicons.eot?3.8.0);src:url(../fonts/eicons.eot?3.8.0#iefix) format("embedded-opentype"),url(../fonts/eicons.woff2?3.8.0) format("woff2"),url(../fonts/eicons.woff?3.8.0) format("woff"),url(../fonts/eicons.ttf?3.8.0) format("truetype"),url(../fonts/eicons.svg?3.8.0#eicon) format("svg");font-weight:400;font-style:normal}[class*=" eicon-"],[class^=eicon]{display:inline-block;font-family:eicons;font-size:inherit;font-weight:400;font-style:normal;font-variant:normal;line-height:1;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.eicon-animation-spin{animation:a 2s infinite linear}.eicon-elementor:before{content:'\e800'}.eicon-elementor-square:before{content:'\e801'}.eicon-pojome:before{content:'\e802'}.eicon-plus:before{content:'\e803'}.eicon-menu-bar:before{content:'\e804'}.eicon-apps:before{content:'\e805'}.eicon-accordion:before{content:'\e806'}.eicon-alert:before{content:'\e807'}.eicon-animation-text:before{content:'\e808'}.eicon-animation:before{content:'\e809'}.eicon-banner:before{content:'\e810'}.eicon-blockquote:before{content:'\e811'}.eicon-button:before{content:'\e812'}.eicon-call-to-action:before{content:'\e813'}.eicon-captcha:before{content:'\e814'}.eicon-carousel:before{content:'\e815'}.eicon-checkbox:before{content:'\e816'}.eicon-columns:before{content:'\e817'}.eicon-countdown:before{content:'\e818'}.eicon-counter:before{content:'\e819'}.eicon-date:before{content:'\e820'}.eicon-divider-shape:before{content:'\e821'}.eicon-divider:before{content:'\e822'}.eicon-download-button:before{content:'\e823'}.eicon-dual-button:before{content:'\e824'}.eicon-email-field:before{content:'\e825'}.eicon-facebook-comments:before{content:'\e826'}.eicon-facebook-like-box:before{content:'\e827'}.eicon-form-horizontal:before{content:'\e828'}.eicon-form-vertical:before{content:'\e829'}.eicon-gallery-grid:before{content:'\e830'}.eicon-gallery-group:before{content:'\e831'}.eicon-gallery-justified:before{content:'\e832'}.eicon-gallery-masonry:before{content:'\e833'}.eicon-icon-box:before{content:'\e834'}.eicon-image-before-after:before{content:'\e835'}.eicon-image-box:before{content:'\e836'}.eicon-image-hotspot:before{content:'\e837'}.eicon-image-rollover:before{content:'\e838'}.eicon-info-box:before{content:'\e839'}.eicon-inner-section:before{content:'\e840'}.eicon-mailchimp:before{content:'\e841'}.eicon-menu-card:before{content:'\e842'}.eicon-navigation-horizontal:before{content:'\e843'}.eicon-nav-menu:before{content:'\e844'}.eicon-navigation-vertical:before{content:'\e845'}.eicon-number-field:before{content:'\e846'}.eicon-parallax:before{content:'\e847'}.eicon-php7:before{content:'\e848'}.eicon-post-list:before{content:'\e849'}.eicon-post-slider:before{content:'\e850'}.eicon-post:before{content:'\e851'}.eicon-posts-carousel:before{content:'\e852'}.eicon-posts-grid:before{content:'\e853'}.eicon-posts-group:before{content:'\e854'}.eicon-posts-justified:before{content:'\e855'}.eicon-posts-masonry:before{content:'\e856'}.eicon-posts-ticker:before{content:'\e857'}.eicon-price-list:before{content:'\e858'}.eicon-price-table:before{content:'\e859'}.eicon-radio:before{content:'\e860'}.eicon-rtl:before{content:'\e861'}.eicon-scroll:before{content:'\e862'}.eicon-search:before{content:'\e863'}.eicon-select:before{content:'\e864'}.eicon-share:before{content:'\e865'}.eicon-sidebar:before{content:'\e866'}.eicon-skill-bar:before{content:'\e867'}.eicon-slider-3d:before{content:'\e868'}.eicon-slider-album:before{content:'\e869'}.eicon-slider-device:before{content:'\e870'}.eicon-slider-full-screen:before{content:'\e871'}.eicon-slider-push:before{content:'\e872'}.eicon-slider-vertical:before{content:'\e873'}.eicon-slider-video:before{content:'\e874'}.eicon-slideshow:before{content:'\e875'}.eicon-social-icons:before{content:'\e876'}.eicon-spacer:before{content:'\e877'}.eicon-table:before{content:'\e878'}.eicon-tabs:before{content:'\e879'}.eicon-tel-field:before{content:'\e880'}.eicon-text-area:before{content:'\e881'}.eicon-text-field:before{content:'\e882'}.eicon-thumbnails-down:before{content:'\e883'}.eicon-thumbnails-half:before{content:'\e884'}.eicon-thumbnails-right:before{content:'\e885'}.eicon-time-line:before{content:'\e886'}.eicon-toggle:before{content:'\e887'}.eicon-url:before{content:'\e888'}.eicon-type-tool:before{content:'\e889'}.eicon-wordpress:before{content:'\e890'}.eicon-align-left:before{content:'\e891'}.eicon-anchor:before{content:'\e892'}.eicon-bullet-list:before{content:'\e893'}.eicon-coding:before{content:'\e894'}.eicon-favorite:before{content:'\e895'}.eicon-google-maps:before{content:'\e896'}.eicon-insert-image:before{content:'\e897'}.eicon-photo-library:before{content:'\e898'}.eicon-woocommerce:before{content:'\e899'}.eicon-youtube:before{content:'\e900'}.eicon-flip-box:before{content:'\e901'}.eicon-settings:before{content:'\e902'}.eicon-headphones:before{content:'\e903'}.eicon-testimonial:before{content:'\e904'}.eicon-counter-circle:before{content:'\e905'}.eicon-person:before{content:'\e906'}.eicon-chevron-right:before{content:'\e907'}.eicon-chevron-left:before{content:'\e908'}.eicon-close:before{content:'\e909'}.eicon-file-download:before{content:'\e910'}.eicon-save:before{content:'\e911'}.eicon-zoom-in:before{content:'\e912'}.eicon-shortcode:before{content:'\e913'}.eicon-nerd:before{content:'\e914'}.eicon-device-desktop:before{content:'\e915'}.eicon-device-tablet:before{content:'\e916'}.eicon-device-mobile:before{content:'\e917'}.eicon-document-file:before{content:'\e918'}.eicon-folder:before{content:'\e919'}.eicon-hypster:before{content:'\e920'}.eicon-h-align-left:before{content:'\e921'}.eicon-h-align-right:before{content:'\e922'}.eicon-h-align-center:before{content:'\e923'}.eicon-h-align-stretch:before{content:'\e924'}.eicon-v-align-top:before{content:'\e925'}.eicon-v-align-bottom:before{content:'\e926'}.eicon-v-align-middle:before{content:'\e927'}.eicon-v-align-stretch:before{content:'\e928'}.eicon-pro-icon:before{content:'\e929'}.eicon-mail:before{content:'\e930'}.eicon-lock-user:before{content:'\e931'}.eicon-testimonial-carousel:before{content:'\e932'}.eicon-media-carousel:before{content:'\e933'}.eicon-section:before{content:'\e934'}.eicon-column:before{content:'\e935'}.eicon-edit:before{content:'\e936'}.eicon-clone:before{content:'\e937'}.eicon-trash:before{content:'\e938'}.eicon-play:before{content:'\e939'}.eicon-angle-right:before{content:'\e940'}.eicon-angle-left:before{content:'\e941'}.eicon-animated-headline:before{content:'\e942'}.eicon-menu-toggle:before{content:'\e943'}.eicon-fb-embed:before{content:'\e944'}.eicon-fb-feed:before{content:'\e945'}.eicon-twitter-embed:before{content:'\e946'}.eicon-twitter-feed:before{content:'\e947'}.eicon-sync:before{content:'\e948'}.eicon-import-export:before{content:'\e949'}.eicon-check-circle:before{content:'\e950'}.eicon-library-save:before{content:'\e951'}.eicon-library-download:before{content:'\e952'}.eicon-insert:before{content:'\e953'}.eicon-preview:before{content:'\e954'}.eicon-sort-down:before{content:'\e955'}.eicon-sort-up:before{content:'\e956'}.eicon-heading:before{content:'\e957'}.eicon-logo:before{content:'\e958'}.eicon-meta-data:before{content:'\e959'}.eicon-post-content:before{content:'\e960'}.eicon-post-excerpt:before{content:'\e961'}.eicon-post-navigation:before{content:'\e962'}.eicon-yoast:before{content:'\e963'}.eicon-nerd-chuckle:before{content:'\e964'}.eicon-nerd-wink:before{content:'\e965'}.eicon-comments:before{content:'\e966'}.eicon-download-circle-o:before{content:'\e967'}.eicon-library-upload:before{content:'\e968'}.eicon-save-o:before{content:'\e969'}.eicon-upload-circle-o:before{content:'\e970'}.eicon-ellipsis-h:before{content:'\e971'}.eicon-ellipsis-v:before{content:'\e972'}.eicon-arrow-left:before{content:'\e973'}.eicon-arrow-right:before{content:'\e974'}.eicon-arrow-up:before{content:'\e975'}.eicon-arrow-down:before{content:'\e976'}.eicon-play-o:before{content:'\e977'}.eicon-archive-posts:before{content:'\e978'}.eicon-archive-title:before{content:'\e979'}.eicon-featured-image:before{content:'\e980'}.eicon-post-info:before{content:'\e981'}.eicon-post-title:before{content:'\e982'}.eicon-site-logo:before{content:'\e983'}.eicon-site-search:before{content:'\e984'}.eicon-site-title:before{content:'\e985'}.eicon-plus-square:before{content:'\e986'}.eicon-minus-square:before{content:'\e987'}.eicon-cloud-check:before{content:'\e988'}.eicon-drag-n-drop:before{content:'\e989'}.eicon-home-heart:before{content:'\e990'}.eicon-handle:before{content:'\e991'}.eicon-cart:before{content:'\e992'}.eicon-product-add-to-cart:before{content:'\e993'}.eicon-product-breadcrumbs:before{content:'\e994'}.eicon-product-categories:before{content:'\e995'}.eicon-product-description:before{content:'\e996'}.eicon-product-images:before{content:'\e997'}.eicon-product-info:before{content:'\e998'}.eicon-product-meta:before{content:'\e999'}.eicon-product-pages:before{content:'\e1000'}.eicon-product-price:before{content:'\e1001'}.eicon-product-rating:before{content:'\e1002'}.eicon-product-related:before{content:'\e1003'}.eicon-product-stock:before{content:'\e1004'}.eicon-product-tabs:before{content:'\e1005'}.eicon-product-title:before{content:'\e1006'}.eicon-product-upsell:before{content:'\e1007'}.eicon-products:before{content:'\e1008'}.eicon-bag-light:before{content:'\e1009'}.eicon-bag-medium:before{content:'\e1010'}.eicon-bag-solid:before{content:'\e1011'}.eicon-basket-light:before{content:'\e1012'}.eicon-basket-medium:before{content:'\e1013'}.eicon-basket-solid:before{content:'\e1014'}.eicon-cart-light:before{content:'\e1015'}.eicon-cart-medium:before{content:'\e1016'}.eicon-cart-solid:before{content:'\e1017'}.eicon-exchange:before{content:'\e1018'}.eicon-eye:before{content:'\e1019'}.eicon-laptop:before{content:'\e1020'}.eicon-collapse:before{content:'\e1021'}.eicon-expand:before{content:'\e1022'}.eicon-navigator:before{content:'\e1023'}.eicon-editor-link:before{content:'\e500'}.eicon-editor-unlink:before{content:'\e501'}.eicon-editor-external-link:before{content:'\e502'}.eicon-editor-close:before{content:'\e503'}.eicon-editor-list-ol:before{content:'\e504'}.eicon-editor-list-ul:before{content:'\e505'}.eicon-editor-bold:before{content:'\e506'}.eicon-editor-italic:before{content:'\e507'}.eicon-editor-underline:before{content:'\e508'}.eicon-editor-paragraph:before{content:'\e509'}.eicon-editor-h1:before{content:'\e510'}.eicon-editor-h2:before{content:'\e511'}.eicon-editor-h3:before{content:'\e512'}.eicon-editor-h4:before{content:'\e513'}.eicon-editor-h5:before{content:'\e514'}.eicon-editor-h6:before{content:'\e515'}.eicon-editor-quote:before{content:'\e516'}.eicon-editor-code:before{content:'\e517'}.eicon-times:before{content:'\e909'}.eicon-floppy-o:before{content:'\e911'}
\ No newline at end of file
<glyph glyph-name="plus-square" unicode="" d="M454 396h-179c-58 0-58-92 0-92h179v-179c0-25 21-46 46-46s46 21 46 46v179h179c58 0 58 92 0 92h-179v179c0 25-21 46-46 46s-46-21-46-46v-179z m-258 412h604c88 0 158-70 158-154v-604c0-88-70-154-154-154h-608c-83-4-154 66-154 150v608c0 84 71 154 154 154z" horiz-adv-x="1000" />
<glyph glyph-name="minus-square" unicode="" d="M725 304c58 0 58 92 0 92h-450c-58 0-58-92 0-92h450z m-529 504h604c88 0 158-70 158-154v-604c0-88-70-154-154-154h-608c-83-4-154 66-154 150v608c0 84 71 154 154 154z" horiz-adv-x="1000" />
+
+<glyph glyph-name="cloud-check" unicode="" d="M392 675c133 33 241-17 308-146 13-21 4-50-17-62-20-13-45-4-58 16-50 92-117 125-212 100-96-25-146-95-159-225l-4-33-29-8c-92-21-133-71-133-150-5-96 37-134 125-138l525 0c129-12 179 29 179 134 0 62-25 104-75 133-21 12-29 37-21 62 12 21 37 34 58 21 84-46 125-116 125-212 0-163-96-242-266-225l-521 0c-138 4-217 87-213 233 0 113 63 192 171 229 17 146 92 238 217 271z m496-54c12 12 29 12 41 0s13-33 0-46l-329-375c0 0 0 0 0 0-17-17-42-17-54 0l-158 175c-13 13-13 33 0 46 12 12 29 12 41 0l142-158 317 358z" horiz-adv-x="1000" />
+
+<glyph glyph-name="drag-n-drop" unicode="" d="M46 779c0-13-10-24-23-24s-23 11-23 24v48c0 13 10 23 23 23h49c13 0 23-10 23-23s-10-24-23-24h-25v-24z m122 25c-13 0-23 10-23 23s10 23 23 23h92c13 0 24-10 24-23s-11-24-24-24h-92z m185 0c-13 0-23 10-23 23s10 23 23 23h93c13 0 23-10 23-23s-10-24-23-24h-93z m186 0c-13 0-24 10-24 23s11 23 24 23h92c13 0 24-10 24-23s-11-23-24-23h-92z m209 0c-13 0-24 10-24 23s11 23 24 23h48c13 0 23-10 23-23v-48c0-13-10-24-23-24-13 0-23 11-23 24v25h-25z m25-122c0 13 10 23 23 23 13 0 23-10 23-23v-92c0-13-10-24-23-24-13 0-23 11-23 24v92z m0-193c0 13 10 23 23 23 13 0 23-10 23-23v-49c0-12-10-23-23-23-13 0-23 11-23 23v49z m-315-363c12 0 23-11 23-23 0-13-11-24-23-24h-93c-13 0-23 11-23 24 0 12 10 23 23 23h93z m-186 0c13 0 23-11 23-23 0-13-10-24-23-24h-92c-13 0-24 11-24 24 0 12 11 23 24 23h92z m-201 0c13 0 24-11 24-23 0-13-11-24-24-24h-48c-13 0-23 11-23 24v48c0 13 10 23 23 23s24-10 24-23v-25h24z m-25 122c0-13-10-24-23-24s-23 11-23 24v92c0 13 10 23 23 23s24-10 24-23v-92z m0 185c0-13-10-23-23-23s-23 10-23 23v92c0 13 10 24 23 24s24-11 24-24v-92z m0 185c0-13-10-23-23-23s-23 10-23 23v93c0 13 10 23 23 23s24-10 24-23v-93z m503-654c-29-22-70-2-70 34v621c0 39 48 58 75 30l434-448c27-28 7-74-31-74h-98l70-145c11-21 2-46-19-57l-134-69c-21-11-48-3-59 19l-77 159-91-70z m17 123l64 49c22 17 54 9 66-16l81-166 56 29-82 169c-14 28 7 62 39 62h65l-288 298v-425z" horiz-adv-x="1000" />
+
+<glyph glyph-name="welcome" unicode="" d="M180 511v-559h676v559l-335 216-341-216z m-75 63l390 248c16 10 37 10 53 0l383-247c14-9 22-23 22-39v-630c0-26-22-46-49-46h-772c-27 0-49 20-49 46v629c0 16 8 30 22 39z m421-201c38 52 82 71 134 54 77-24 67-121 38-163-28-39-85-95-172-169v0c-86 74-143 130-171 169-30 42-39 139 38 163 51 17 96-1 133-54l0 0z" horiz-adv-x="1000" />
+
+<glyph glyph-name="handle" unicode="" d="M167 138c-46 0-84 37-84 83s38 83 84 83 83-37 83-83-37-83-83-83z m329 0c-46 0-83 37-83 83s37 83 83 83 83-37 83-83-37-83-83-83z m333 0c-46 0-83 37-83 83s37 83 83 83c46 0 84-37 84-83s-38-83-84-83z m-662 254c-46 0-84 37-84 83s38 83 84 83 83-37 83-83-37-83-83-83z m329 0c-46 0-83 37-83 83s37 83 83 83 83-37 83-83-37-83-83-83z m333 0c-46 0-83 37-83 83s37 83 83 83c46 0 84-37 84-83s-38-83-84-83z" horiz-adv-x="1000" />
+
+<glyph glyph-name="cart" unicode="" d="M460 58c35 0 63-28 63-62s-28-63-63-63-64 28-64 63 29 62 64 62z m250 0c35 0 63-28 63-62s-28-63-63-63-64 28-64 63 29 62 64 62z m-476 541l139-450c2-5 7-9 12-9h380c6 0 11 4 13 9l138 433c0 1 0 2 0 3 0 8-6 13-13 13l-669 1 0 0z m-13 41h682c30 0 55-24 55-54 0-6-1-11-3-17l-138-433c-7-22-28-38-52-38h-380c-23 0-45 16-52 39l-147 476c-10 35-26 67-48 97-20 27-44 40-75 40-12 0-21 9-21 21s9 21 21 21c45 0 82-20 109-58 21-30 38-61 49-94z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-add-to-cart" unicode="" d="M741 192c-7-9-20-11-29-4-9 6-12 19-5 29 6 8 12 17 17 26 54 90 61 200 22 297-3 7-6 15-10 22-3 6-7 13-11 20-23 39-54 73-92 101-148 108-357 75-465-74s-75-358 74-466c66-48 146-69 226-62 5 1 9 1 13 2 5 0 11 1 16 2 12 2 24 5 36 8 10 4 22-3 25-14 4-11-3-22-14-26-13-3-26-7-40-9-6-1-12-2-18-3-4-1-9-1-14-2-90-8-180 16-255 70-167 122-204 356-83 524s356 205 524 83c42-31 77-69 103-113 4-8 8-15 12-23 4-8 8-16 11-25 45-108 36-232-24-334-6-10-12-19-19-29z m-324 241v125c0 12 9 21 21 21s20-9 20-21v-125h125c12 0 21-9 21-20s-9-21-21-21h-125v-125c0-12-9-21-20-21s-21 9-21 21v125h-125c-12 0-21 9-21 21s9 20 21 20h125z m237-458h126l45 147h-215l44-147z m183 188c18 0 33-15 33-33 0-3 0-7-1-10l-51-164c-4-14-17-23-32-23h-138c-15 0-28 9-33 24l-53 179c0 0 0 1-1 1-3 11-8 22-16 32-4 7-9 10-16 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 6-10 12-20 16-30h241z m-174-301c-16 0-29 13-29 30s13 29 29 29 30-13 30-29-14-30-30-30z m105 0c-17 0-30 13-30 30s13 29 30 29 29-13 29-29-14-30-29-30z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-breadcrumbs" unicode="" d="M490 100c12 0 21-9 21-21s-9-21-21-21h-390c-54 0-100 37-100 86v579c0 48 46 85 100 85h758c55 0 100-37 100-85v-580c0-33-23-63-57-77-7-3-15-5-22-6-3 0-6-1-9-1-5-1-9-1-11-1-12 0-21 8-22 20 0 12 8 21 20 22 2 0 6 0 9 0 3 0 4 0 6 0 5 1 9 3 14 5 19 8 31 23 31 38v580c0 23-25 44-59 44h-758c-33 0-58-21-58-44v-580c0-23 25-43 58-43h390z m122-125h126l46 147h-216l44-147z m183 188c19 0 34-15 34-33 0-3-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h241z m-173-301c-17 0-29 13-29 30s12 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z m-580 738c-12 0-21 9-21 21s9 21 21 21h167c11 0 20-9 20-21s-9-21-20-21h-167z m500 0c-12 0-21 9-21 21s9 21 21 21h167c11 0 20-9 20-21s-9-21-20-21h-167z m-241 67c-9 6-11 20-5 29 7 9 20 11 30 4l82-60c11-8 11-25 1-33l-84-65c-9-7-22-5-29 4-7 9-5 22 4 29l61 48-60 44z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-categories" unicode="" d="M479 671c0 7 9 12 21 12s21-5 21-12v-100c0-7-9-13-21-13s-21 6-21 13v100z m-208-92c0-11-9-21-21-21s-21 10-21 21v42c0 34 28 62 63 62h416c35 0 63-28 63-62v-42c0-11-9-21-21-21s-21 10-21 21v42c0 12-9 21-21 21h-416c-12 0-21-9-21-21v-42z m-83-21v-41h125v41h-125z m-30 42h184c7 0 12-5 12-12v-100c0-8-5-13-12-13h-184c-7 0-12 5-12 13v100c0 7 5 12 12 12z m280-42v-41h125v41h-125z m-30 42h184c7 0 12-5 12-12v-100c0-8-5-13-12-13h-184c-7 0-12 5-12 13v100c0 7 5 12 12 12z m280-42v-41h125v41h-125z m-30 42h184c7 0 12-5 12-12v-100c0-8-5-13-12-13h-184c-7 0-12 5-12 13v100c0 7 5 12 12 12z m-168-500c12 0 21-9 21-21s-9-21-21-21h-390c-54 0-100 37-100 86v579c0 48 46 85 100 85h758c55 0 100-37 100-85v-580c0-33-23-63-57-77-7-3-15-5-22-6-3 0-6-1-9-1-5-1-9-1-11-1-12 0-21 8-22 20 0 12 8 21 20 22 2 0 6 0 9 0 3 0 4 0 6 0 5 1 9 3 14 5 19 8 31 23 31 38v580c0 23-25 44-59 44h-758c-33 0-58-21-58-44v-580c0-23 25-43 58-43h390z m122-125h126l46 147h-216l44-147z m183 188c19 0 34-15 34-33 0-3-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h241z m-173-301c-17 0-29 13-29 30s12 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-description" unicode="" d="M188 642c-12 0-21 9-21 21s9 20 21 20h626c11 0 21-9 21-20s-10-21-21-21h-626z m0-167c-12 0-21 9-21 21s9 21 21 21h626c11 0 21-9 21-21s-10-21-21-21h-626z m0 83c-12 0-21 10-21 21 0 12 9 21 21 21h527c12 0 21-9 21-21 0-11-9-21-21-21h-527z m0-166c-12 0-21 9-21 21s9 20 21 20h405c12 0 21-9 21-20s-9-21-21-21h-405z m302-292c12 0 21-9 21-21s-9-21-21-21h-390c-54 0-100 37-100 86v579c0 48 46 85 100 85h758c55 0 100-37 100-85v-580c0-33-23-63-57-77-7-3-15-5-22-6-3 0-6-1-9-1-5-1-9-1-11-1-12 0-21 8-22 20 0 12 8 21 20 22 2 0 6 0 9 0 3 0 4 0 6 0 5 1 9 3 14 5 19 8 31 23 31 38v580c0 23-25 44-59 44h-758c-33 0-58-21-58-44v-580c0-23 25-43 58-43h390z m122-125h126l46 147h-216l44-147z m183 188c19 0 34-15 34-33 0-3-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h241z m-173-301c-17 0-29 13-29 30s12 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-images" unicode="" d="M416 437h127l45 147h-216l44-147z m184 189c18 0 33-15 33-33 0-4 0-7-2-10l-51-164c-4-14-17-24-31-24h-139c-15 0-27 10-32 24l-54 179c0 1 0 1 0 1-4 11-9 22-16 33-5 6-10 9-17 9-11 0-21 9-21 21s10 21 21 21c21 0 39-10 51-28 7-9 12-19 16-30h242z m-174-301c-16 0-29 13-29 29 0 16 13 29 29 29s29-13 29-29c0-16-13-29-29-29z m104 0c-16 0-29 13-29 29 0 16 13 29 29 29 16 0 29-13 29-29 0-16-13-29-29-29z m-488 483v-625h875v625h-875z m-21 42h917c11 0 20-9 20-21v-666c0-12-9-21-20-21h-917c-12 0-21 9-21 21v666c0 12 9 21 21 21z m21-792v-83h125v83h-125z m-21 42h167c11 0 20-9 20-21v-125c0-12-9-21-20-21h-167c-12 0-21 9-21 21v125c0 12 9 21 21 21z m271-42v-83h125v83h-125z m-21 42h167c11 0 20-9 20-21v-125c0-12-9-21-20-21h-167c-12 0-21 9-21 21v125c0 12 9 21 21 21z m271-42v-83h125v83h-125z m-21 42h167c11 0 20-9 20-21v-125c0-12-9-21-20-21h-167c-12 0-21 9-21 21v125c0 12 9 21 21 21z m271-42v-83h125v83h-125z m-21 42h167c11 0 20-9 20-21v-125c0-12-9-21-20-21h-167c-12 0-21 9-21 21v125c0 12 9 21 21 21z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-info" unicode="" d="M490 100c12 0 21-9 21-21s-9-21-21-21h-390c-54 0-100 37-100 86v579c0 48 46 85 100 85h758c55 0 100-37 100-85v-580c0-33-23-63-57-77-7-3-15-5-22-6-3 0-6-1-9-1-5-1-9-1-11-1-12 0-21 8-22 20 0 12 8 21 20 22 2 0 6 0 9 0 3 0 4 0 6 0 5 1 9 3 14 5 19 8 31 23 31 38v580c0 23-25 44-59 44h-758c-33 0-58-21-58-44v-580c0-23 25-43 58-43h390v0z m122-125h126l46 147h-216l44-147z m183 188c19 0 34-15 34-33 0-3-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h241v0z m-173-301c-17 0-29 13-29 30s12 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z m-188 552l-4-12c-11-3-21-6-28-8-7-1-16-3-25-3-14 0-25 3-33 8-8 5-12 12-12 20 0 3 0 6 1 9s1 7 3 11l15 39c1 4 2 7 3 10 1 4 1 7 1 10 0 5-1 8-4 10s-8 3-16 3c-4 0-8-1-11-1-5-1-8-2-11-3l4 12c10 3 19 6 28 8s17 3 25 3c14 0 26-3 33-8 8-5 12-12 12-19 0-2-1-5-1-9s-2-8-3-12l-15-38c-1-3-2-7-3-11-1-3-1-7-1-9 0-5 2-9 4-10 4-2 9-3 17-3 3 0 7 0 12 1 4 1 7 1 9 2z m4 162c0-7-4-13-11-17s-15-7-25-7c-9 0-18 2-25 7s-10 10-10 17 3 12 10 17 16 7 25 7 18-2 25-7c7-5 11-10 11-17z m-63-288c-115 0-208 93-208 208s93 208 208 208 209-93 209-208-94-208-209-208z m0 41c92 0 167 75 167 167s-75 167-167 167-166-75-166-167 74-167 166-167z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-meta" unicode="" d="M229 350c0 12-9 21-21 21s-20-9-20-21 9-21 20-21 21 9 21 21z m42 0c0-35-28-62-63-62s-62 27-62 62 28 63 62 63 63-28 63-63z m125 0c0 12-9 21-21 21s-21-9-21-21 9-21 21-21 21 9 21 21z m42 0c0-35-28-62-63-62s-62 27-62 62 27 63 62 63 63-28 63-63z m125 0c0 12-10 21-21 21s-21-9-21-21 9-21 21-21 21 9 21 21z m41 0c0-35-28-62-62-62s-63 27-63 62 28 63 63 63 62-28 62-63z m-114-250c12 0 21-9 21-21s-9-21-21-21h-390c-54 0-100 37-100 86v579c0 48 46 85 100 85h758c55 0 100-37 100-85v-580c0-33-23-63-57-77-7-3-15-5-22-6-3 0-6-1-9-1-5-1-9-1-11-1-12 0-21 8-22 20 0 12 8 21 20 22 2 0 6 0 9 0 3 0 4 0 6 0 5 1 9 3 14 5 19 8 31 23 31 38v580c0 23-25 44-59 44h-758c-33 0-58-21-58-44v-580c0-23 25-43 58-43h390z m122-125h126l46 147h-216l44-147z m183 188c19 0 34-15 34-33 0-3-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h241z m-173-301c-17 0-29 13-29 30s12 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-pages" unicode="󡀀" d="M204 144h350c11 0 21-9 21-21s-10-20-21-20h-371c-12 0-21 9-21 20v429c0 6 2 11 6 15l198 198c4 3 9 6 14 6h264c11 0 21-9 21-21v-526c0-12-10-21-21-21-12 0-21 9-21 21v505h-234l-185-185v-400z m156 429v177c0 12 9 21 20 21s21-9 21-21v-198c0-12-9-21-21-21h-197c-12 0-21 9-21 21 0 12 9 21 21 21h177z m329 90h-45c-12 0-21 10-21 21 0 12 9 21 21 21h66c11 0 20-9 20-21v-474c0-12-9-21-20-21-12 0-21 9-21 21v453z m24-41c-12 0-21 9-21 21 0 11 9 20 21 20h65c12 0 21-9 21-20v-433c0-12-9-21-21-21-11 0-20 9-20 21v412h-45z m-135-544c12 0 21-9 21-20 0-12-9-21-21-21h-329c-12 0-21 9-21 21v65c0 12 9 21 21 21 11 0 21-9 21-21v-45h308z m26-69c12 0 21-9 21-21 0-11-9-21-21-21h-314c-11 0-20 10-20 21v66c0 12 9 21 20 21 12 0 21-9 21-21v-45h293z m91-34h127l45 147h-216l44-147z m184 188c18 0 33-15 33-33 0-3 0-7-2-10l-50-164c-5-14-17-23-32-23h-139c-14 0-27 9-32 24l-54 179c0 0 0 1 0 1-3 11-9 22-16 32-4 7-9 10-17 10-11 0-20 9-20 21s9 20 20 20c21 0 39-9 51-27 7-10 12-20 17-30h241z m-174-301c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-price" unicode="󡀁" d="M755 320c-57 0-102 34-106 78-1 12 8 22 19 22 12 1 22-7 23-19 2-21 31-39 64-39 35 0 64 19 64 41 0 21-20 34-64 42l-4 0c-69 13-102 40-102 83 0 46 48 84 106 84 57 0 103-34 106-78 1-11-7-21-19-22-11-2-22 7-23 19-1 22-30 39-64 39-34 0-63-19-63-41 0-21 20-34 63-41l5-1c68-13 101-40 101-83 0-46-47-84-106-84z m0-41c-12 0-21 9-21 21v333c0 12 9 21 21 21s21-9 21-21v-333c0-12-9-21-21-21z m-265-179c12 0 21-9 21-21s-9-21-21-21h-390c-54 0-100 37-100 86v579c0 48 46 85 100 85h758c55 0 100-37 100-85v-580c0-33-23-63-57-77-7-3-15-5-22-6-3 0-6-1-9-1-5-1-9-1-11-1-12 0-21 8-22 20 0 12 8 21 20 22 2 0 6 0 9 0 3 0 4 0 6 0 5 1 9 3 14 5 19 8 31 23 31 38v580c0 23-25 44-59 44h-758c-33 0-58-21-58-44v-580c0-23 25-43 58-43h390z m122-125h126l46 147h-216l44-147z m183 188c19 0 34-15 34-33 0-3-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h241z m-173-301c-17 0-29 13-29 30s12 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z m-198 509c15 0 29 14 29 33v107c0 18-13 33-29 33s-28-15-28-33v-107c0-19 13-33 28-33z m0-42c-39 0-70 34-70 75v107c0 41 31 74 70 74s70-33 70-74v-107c0-41-30-75-70-75z m-182 107c-6 0-12-6-12-15v-36c0-8 6-15 12-15h33c6 0 12 7 12 15v36c0 9-6 15-12 15h-33z m-54-15v54c0 60 46 110 103 110 11 0 20-9 20-21 0-11-9-21-20-21-33 0-61-29-61-66 4 1 8 1 12 1h33c30 0 54-26 54-57v-36c0-30-24-56-54-56h-33c-30 0-54 26-54 56v36z m-101 59c15 0 28 15 28 33s-13 33-28 33c-16 0-28-9-28-15 0-12-10-21-21-21s-21 9-21 21c0 32 33 57 70 57 39 0 70-34 70-75 0-21-8-40-21-54 13-14 21-32 21-54 0-40-31-74-70-74-37 0-70 24-70 57 0 11 9 20 21 20s21-9 21-20c0-6 12-15 28-15 15 0 28 14 28 32 0 19-13 33-28 33h-16c-12 0-21 10-21 21s9 21 21 21h16z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-rating" unicode="󡀂" d="M490 100c12 0 21-9 21-21s-9-21-21-21h-390c-54 0-100 37-100 86v579c0 48 46 85 100 85h758c55 0 100-37 100-85v-580c0-33-23-63-57-77-7-3-15-5-22-6-3 0-6-1-9-1-5-1-9-1-11-1-12 0-21 8-22 20 0 12 8 21 20 22 2 0 6 0 9 0 3 0 4 0 6 0 5 1 9 3 14 5 19 8 31 23 31 38v580c0 23-25 44-59 44h-758c-33 0-58-21-58-44v-580c0-23 25-43 58-43h390z m122-125h126l46 147h-216l44-147z m183 188c19 0 34-15 34-33 0-3-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h241z m-173-301c-17 0-29 13-29 30s12 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z m-258 709c-6-8-6-8-15-10h-17l12-11c5-7 5-7 5-15l-5-27 23 13c8 4 8 4 17 0l22-13-5 27c0 9 0 9 5 15l12 11h-16c-10 2-10 2-15 10l-12 29-11-29z m-4 77c8 10 8 10 21 9 6-4 6-4 9-9l23-55h46c12-3 12-3 16-16-1-7-1-7-5-12l-36-33 10-54c-1-13-1-13-13-19-5 0-5 0-11 2l-45 27-44-27c-13-3-13-3-22 6-3 5-3 5-3 11l10 54-35 33c-7 12-7 12-1 23 5 5 5 5 12 5h46l22 55z m254-77c-6-8-6-8-15-10h-17l12-11c5-7 5-7 5-15l-5-27 23 13c8 4 8 4 17 0l22-13-5 27c0 9 0 9 5 15l12 11h-16c-10 2-10 2-15 10l-12 29-11-29z m-4 77c8 10 8 10 21 9 6-4 6-4 9-9l23-55h46c12-3 12-3 16-16-1-7-1-7-5-12l-36-33 10-54c-1-13-1-13-13-19-5 0-5 0-11 2l-45 27-44-27c-13-3-13-3-22 6-3 5-3 5-3 11l10 54-35 33c-7 12-7 12-1 23 5 5 5 5 12 5h46l22 55z m-496-77c-6-8-6-8-15-10h-17l12-11c5-7 5-7 5-15l-5-27 23 13c8 4 8 4 17 0l22-13-5 27c0 9 0 9 5 15l12 11h-16c-10 2-10 2-15 10l-12 28-11-28z m-4 77c8 10 8 10 21 9 6-4 6-4 9-9l23-55h46c12-3 12-3 16-16-1-7-1-7-5-12l-36-33 10-54c-1-13-1-13-13-19-5 0-5 0-11 2l-45 27-44-27c-13-3-13-3-22 6-3 5-3 5-3 11l10 54-35 33c-7 12-7 12-1 23 5 5 5 5 12 5h46l22 55z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-related" unicode="󡀃" d="M21 308c-12 0-21 10-21 21s9 21 21 21h667c11 0 20-9 20-21s-9-21-20-21h-667z m646-354v459c0 34-28 62-63 62h-500c-34 0-62-28-62-62v-459c0-34 28-62 62-62h500c35 0 63 28 63 62z m41 0c0-57-46-104-104-104h-500c-57 0-104 47-104 104v459c0 57 47 104 104 104h500c58 0 104-47 104-104v-459z m-583 459c0-12-9-21-21-21s-21 9-21 21 10 20 21 20 21-9 21-20m83 0c0-12-9-21-20-21s-21 9-21 21 9 20 21 20 20-9 20-20m84 0c0-12-9-21-21-21-12 0-21 9-21 21s9 20 21 20c12 0 21-9 21-20m6 235c-4 4-6 9-6 15v83c0 57 46 104 104 104h500c57 0 104-47 104-104v-458c0-58-47-105-104-105h-83c-12 0-21 10-21 21s9 21 21 21h83c34 0 62 28 62 63v354h-645c-6 0-11 2-15 6z m660 35v63c0 34-28 62-62 62h-500c-35 0-63-28-63-62v-63h625z m-541 63c0-12-9-21-21-21s-21 9-21 21 9 21 21 21 21-9 21-21m83 0c0-12-9-21-21-21s-21 9-21 21 10 21 21 21 21-9 21-21m83 0c0-12-9-21-20-21s-21 9-21 21 9 21 21 21 20-9 20-21m-452-265c-3 4-6 9-6 15v83c0 58 47 104 104 104h500c58 0 104-46 104-104v-458c0-58-46-104-104-104h-41c-12 0-21 9-21 21s9 20 21 20h41c35 0 63 28 63 63v354h-646c-6 0-11 3-15 6z m661 36v62c0 35-28 63-63 63h-500c-34 0-62-28-62-63v-62h625z m-542 62c0-11-9-21-21-21s-21 10-21 21c0 12 10 21 21 21s21-9 21-21m83 0c0-11-9-21-20-21s-21 10-21 21c0 12 9 21 21 21s20-9 20-21m84 0c0-11-9-21-21-21s-21 10-21 21c0 12 9 21 21 21s21-9 21-21m-105-538h126l46 147h-216l44-147z m183 189c19 0 34-15 34-33 0-4-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 23l-54 180c0 0 0 0 0 0-4 12-9 22-16 33-5 7-10 9-17 9-12 0-21 10-21 21s9 21 21 21c21 0 39-9 51-27 7-10 12-20 16-30h241z m-173-301c-17 0-29 13-29 29s12 29 29 29 29-12 29-29-13-29-29-29z m104 0c-16 0-29 13-29 29s13 29 29 29 29-12 29-29-13-29-29-29z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-stock" unicode="󡀄" d="M389 435l71 245c7 24 41 19 41-5v-672c0-13-12-23-25-20l-343 75c-9 2-16 10-16 20v335c0 12 9 21 21 21h251z m35-27c-2-9-11-15-20-15h-245v-298l301-65v499l-36-121z m28 243l-299-33-62-183h297l64 216z m-48-258h-342c-14 0-24 14-19 27l76 224c2 8 9 14 17 14l343 37c14 2 26-12 22-26l-76-261c-3-9-12-15-21-15z m429 42c12 0 21-10 21-21v-200c0-12-9-21-21-21s-21 9-21 21v179h-256c-9 0-17 6-20 15l-35 121v-499l130 28c11 2 22-5 24-16 3-11-4-22-15-24l-156-34c-13-3-25 7-25 20v671c0 24 34 29 41 5l71-245h262z m-277-42c-9 0-17 6-20 15l-76 261c-4 14 8 28 22 26l343-37c8 0 15-6 18-14l76-224c4-13-6-27-20-27h-343z m16 42h298l-63 183-298 33 63-216z m169-460h127l45 147h-216l44-147z m184 188c18 0 33-15 33-33 0-3 0-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-27 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-11 0-21 9-21 21s10 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h242z m-174-301c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-tabs" unicode="󡀅" d="M737-25h126l46 147h-216l44-147z m183 188c19 0 34-15 34-33 0-3-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h241z m-173-301c-17 0-29 13-29 30s12 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z m-516 738h478c35 0 62-28 62-62v-328c0-11-9-20-20-20s-21 9-21 20v328c0 11-9 20-21 20h-486c-12 0-22 7-27 19l-37 93c-4 8-11 13-20 13h-140c-8 0-16-5-19-14l-40-109c-1-5-2-9-2-14v-468c0-11 9-20 21-20h555c12 0 21-10 21-21s-9-21-21-21h-555c-35 0-63 28-63 62v468c0 9 2 19 5 28l40 110c8 25 32 41 58 41h140c26 0 49-15 58-39l34-86z m219-3l-26 73c-3 8-11 13-20 13h-145c-9 0-18-6-20-15l-12-43c-3-11-14-17-26-14-11 3-17 14-14 26l12 42c7 27 32 46 60 46h145c26 0 49-16 58-41l31-84c5-15-2-32-18-37-5-2-10-3-15-2-11 2-19 13-17 25 1 4 3 8 7 11z m39 29c-3-11-15-18-26-15-11 3-17 15-14 26l11 43c8 27 32 45 60 45h145c26 0 50-16 59-42l44-126c4-11-2-23-13-27s-23 2-26 13l-45 127c-3 8-10 14-19 14h-144c-9 0-17-6-20-16l-12-42z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-title" unicode="󡀆" d="M458 308c0 1 0 1 0 1v291h-125v-33c0-12-9-21-20-21s-21 9-21 21v54c0 12 9 21 21 21h333c12 0 21-9 21-21v-54c0-12-9-21-21-21s-21 9-21 21v33h-125v-291c0 0 0 0 0-1h42c11 0 21-9 21-20s-10-21-21-21h-125c-12 0-21 9-21 21s9 20 21 20h41z m32-208c12 0 21-9 21-21s-9-21-21-21h-390c-54 0-100 37-100 86v579c0 48 46 85 100 85h758c55 0 100-37 100-85v-580c0-33-23-63-57-77-7-3-15-5-22-6-3 0-6-1-9-1-5-1-9-1-11-1-12 0-21 8-22 20 0 12 8 21 20 22 2 0 6 0 9 0 3 0 4 0 6 0 5 1 9 3 14 5 19 8 31 23 31 38v580c0 23-25 44-59 44h-758c-33 0-58-21-58-44v-580c0-23 25-43 58-43h390z m122-125h126l46 147h-216l44-147z m183 188c19 0 34-15 34-33 0-3-1-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-28 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-12 0-21 9-21 21s9 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h241z m-173-301c-17 0-29 13-29 30s12 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z" horiz-adv-x="1000" />
+
+<glyph glyph-name="product-upsell" unicode="󡀇" d="M741-25h127l45 147h-216l44-147z m184 188c18 0 33-15 33-33 0-3 0-7-2-10l-51-164c-4-14-17-23-31-23h-139c-15 0-27 9-32 24l-54 179c0 0 0 1 0 1-4 11-9 22-16 32-5 7-10 10-17 10-11 0-21 9-21 21s10 20 21 20c21 0 39-9 51-27 7-10 12-20 16-30h242z m-174-301c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z m104 0c-16 0-29 13-29 30s13 29 29 29 29-13 29-29-13-30-29-30z m-378 418c-9-6-22-4-29 6-7 9-4 22 5 29 67 46 108 123 108 207 0 137-109 249-243 249-134 0-243-112-243-249 0-101 58-190 147-229 10-5 15-17 10-28-4-10-17-15-27-10-104 46-172 150-172 267 0 160 127 291 285 291 157 0 285-131 285-291 0-98-48-188-126-242z m238 172c8 8 22 8 30 0 8-8 8-21 0-29l-247-253c-8-9-22-9-30 0l-117 119-183-187c-8-8-21-8-29 0-9 8-9 21-1 29l198 203c9 8 22 8 30 0l117-120 232 238z m98 91c11 0 20-10 20-21v-169c0-19-22-28-35-15l-165 169c-13 13-4 36 15 36h165z m-116-42l95-97v97h-95z m-466-35c-1 12 8 22 19 23 12 1 22-8 23-19 1-15 20-29 45-29 26 0 45 15 45 30 0 10-7 17-21 23-5 2-10 3-16 5-3 1-13 2-12 2 1 0-9 2-14 3-7 1-15 4-22 6-28 12-47 32-47 62 0 41 40 72 87 72 45 0 83-28 87-67 0-12-8-22-20-22s-21 7-22 19c-1 14-20 28-45 28-26 0-45-14-45-30 0-10 7-17 21-23 5-2 10-3 16-5 3-1 13-2 12-2-1 0 9-2 13-3 8-1 15-4 23-6 28-12 47-32 47-62 0-41-40-71-87-71-45 0-84 28-87 66z m66 191c0 11 9 21 21 21 12 0 21-10 21-21v-270c0-12-9-21-21-21-12 0-21 9-21 21v270z" horiz-adv-x="1000" />
+
+<glyph glyph-name="products" unicode="󡀈" d="M542 808v-375h375v375h-375z m-21 42h417c11 0 20-9 20-21v-416c0-12-9-21-20-21h-417c-12 0-21 9-21 21v416c0 12 9 21 21 21z m-479-42v-375h375v375h-375z m-21 42h417c11 0 20-9 20-21v-416c0-12-9-21-20-21h-417c-12 0-21 9-21 21v416c0 12 9 21 21 21z m521-542v-375h375v375h-375z m-21 42h417c11 0 20-9 20-21v-417c0-11-9-20-20-20h-417c-12 0-21 9-21 20v417c0 12 9 21 21 21z m-479-42v-375h375v375h-375z m-21 42h417c11 0 20-9 20-21v-417c0-11-9-20-20-20h-417c-12 0-21 9-21 20v417c0 12 9 21 21 21z m185 219h89l33 111h-154l32-111z m134 149c16 0 29-13 29-29 0-3-1-5-1-8l-38-128c-4-13-15-21-28-21h-102c-13 0-25 8-28 21l-41 140c0 1 0 1 0 1-3 9-6 17-12 25-3 5-6 6-9 6-11 0-19 9-19 19s8 19 19 19c17 0 31-8 40-23 5-7 9-15 12-22h178z m-130-246c-12 0-21 11-21 23s10 23 21 23 22-10 22-23-9-23-22-23z m78 0c-12 0-21 11-21 23s10 23 21 23 22-10 22-23-10-23-22-23z m418 97h89l33 111h-154l32-111z m134 149c16 0 29-13 29-29 0-3-1-5-1-8l-38-128c-4-13-15-21-28-21h-102c-13 0-25 8-28 21l-41 140c0 1 0 1 0 1-3 9-6 17-12 25-3 5-6 6-9 6-11 0-19 9-19 19s8 19 19 19c17 0 31-8 40-23 5-7 9-15 12-22h178z m-130-246c-12 0-21 11-21 23s10 23 21 23 22-10 22-23-9-23-22-23z m78 0c-12 0-21 11-21 23s10 23 21 23 22-10 22-23-10-23-22-23z m-582-403h89l33 111h-154l32-111z m134 149c16 0 29-13 29-29 0-3-1-5-1-8l-38-128c-4-13-15-21-28-21h-102c-13 0-25 8-28 21l-41 140c0 1 0 1 0 1-3 9-6 17-12 25-3 5-6 6-9 6-11 0-19 9-19 19 0 11 8 19 19 19 17 0 31-8 40-23 5-7 9-15 12-22h178z m-130-246c-12 0-21 10-21 23 0 13 10 23 21 23s22-10 22-23c0-13-9-23-22-23z m78 0c-12 0-21 10-21 23 0 13 10 23 21 23s22-10 22-23c0-13-10-23-22-23z m418 97h89l33 111h-154l32-111z m134 149c16 0 29-13 29-29 0-3-1-5-1-8l-38-128c-4-13-15-21-28-21h-102c-13 0-25 8-28 21l-41 140c0 1 0 1 0 1-3 9-6 17-12 25-3 5-6 6-9 6-11 0-19 9-19 19 0 11 8 19 19 19 17 0 31-8 40-23 5-7 9-15 12-22h178z m-130-246c-12 0-21 10-21 23 0 13 10 23 21 23s22-10 22-23c0-13-9-23-22-23z m78 0c-12 0-21 10-21 23 0 13 10 23 21 23s22-10 22-23c0-13-10-23-22-23z" horiz-adv-x="1000" />
+
+<glyph glyph-name="bag-light" unicode="󡀉" d="M333 558l0 84c6 108 64 165 168 165 104 0 161-57 166-166v-83h83c46 0 83-37 83-83v-500c0-46-37-83-83-83h-500c-46 0-83 37-83 83v500c0 46 37 83 83 83h83z m42 0h250l0 82c-3 85-43 125-124 125-81 0-121-40-126-124l0-83z m-42-41h-83c-23 0-42-19-42-42v-500c0-23 19-42 42-42h500c23 0 42 19 42 42v500c0 23-19 42-42 42h-83v-121c0-12-9-21-21-21s-21 9-21 21l0 121h-250l0-121c0-12-9-21-21-21-11 0-21 9-21 21l0 121z" horiz-adv-x="1000" />
+
+<glyph glyph-name="bag-medium" unicode="󡀐" d="M323 558l0 85c6 112 68 174 178 174 109 0 172-62 176-176v-83h73c46 0 83-37 83-83v-500c0-46-37-83-83-83h-500c-46 0-83 37-83 83v500c0 46 37 83 83 83h73z m62 0h230l0 82c-4 80-38 115-114 115-76 0-111-35-116-114l0-83z m-62-62h-73c-12 0-21-9-21-21v-500c0-12 9-21 21-21h500c12 0 21 9 21 21v500c0 12-9 21-21 21h-73v-100c0-17-14-31-31-31s-31 14-31 31l0 100h-230l0-100c0-17-14-31-31-31-17 0-31 14-31 31l0 100z" horiz-adv-x="1000" />
+
+<glyph glyph-name="bag-solid" unicode="󡀑" d="M333 558l0 84c6 108 64 165 168 165 104 0 161-57 166-166v-83h83c46 0 83-37 83-83v-500c0-46-37-83-83-83h-500c-46 0-83 37-83 83v500c0 46 37 83 83 83h83z m42 0h250l0 82c-3 85-43 125-124 125-81 0-121-40-126-124l0-83z" horiz-adv-x="1000" />
+
+<glyph glyph-name="basket-light" unicode="󡀒" d="M125 475c0 0 0 0 0 0h131l68 203c8 27 34 47 63 47h268c30 0 56-20 63-48l68-202h130c1 0 1 0 1 0h62c12 0 21-9 21-21s-9-21-21-21h-44l-62-381c-13-46-53-77-100-77h-503c-47 0-88 31-101 79l-62 379h-44c-12 0-21 10-21 21s9 21 21 21h62z m25-42l60-370c7-27 32-46 60-46h503c28 0 52 18 60 43l60 373h-743z m592 42l-63 190c-3 11-13 18-24 18h-268c-11 0-20-7-23-17l-64-191h442z m-242-146c0 12 9 21 21 21s21-9 21-21v-208c0-12-9-21-21-21s-21 9-21 21v208z m187-211c-2-11-12-19-24-18-11 2-19 13-17 24l29 206c2 12 13 20 24 18 11-2 19-12 18-24l-30-206z m-292 6c2-11-6-22-17-24-11-2-22 6-24 18l-29 206c-2 11 6 22 18 24 11 2 22-6 23-18l29-206z" horiz-adv-x="1000" />
+
+<glyph glyph-name="basket-medium" unicode="󡀓" d="M104 485c0 0 1 0 1 0h103l71 197c9 31 41 53 76 53h291c35 0 67-22 77-55l70-195h103c0 0 1 0 1 0h61c17 0 32-14 32-31s-15-31-32-31h-35l-61-374c-14-50-59-84-110-84h-503c-51 0-97 34-111 87l-60 371h-36c-17 0-32 14-32 31s15 31 32 31h62z m37-62l58-358c6-22 26-38 50-38h503c23 0 44 16 49 35l59 361h-719z m585 62l-63 176c-3 7-9 12-18 12h-290c-9 0-15-5-17-10l-64-178h452z m-257-156c0 17 14 31 31 31s31-14 31-31v-208c0-17-14-31-31-31s-31 14-31 31v208z m208-213c-3-17-19-28-36-26-17 2-28 18-26 35l29 206c3 17 19 29 36 27s28-18 26-35l-29-207z m-292 9c3-17-10-32-27-35-17-2-33 10-35 27l-30 206c-2 17 10 33 27 35 17 3 33-9 35-26l30-207z" horiz-adv-x="1000" />
+
+<glyph glyph-name="basket-solid" unicode="󡀔" d="M128 433h-65c-12 0-21 10-21 21s9 21 21 21h193l68 203c8 27 34 47 63 47h268c30 0 56-20 63-48l68-202h193c12 0 21-9 21-21s-9-21-21-21h-66l-60-376c-10-36-43-61-81-61h-502c-37 0-70 25-80 61l-62 376z m614 42l-63 190c-3 11-13 18-24 18h-268c-11 0-20-7-23-17l-64-191h442z m-242-146v-208c0-12 9-21 21-21s21 9 21 21v208c0 12-9 21-21 21s-21-9-21-21z m187-211l30 206c1 11-7 22-18 24-11 2-22-6-24-18l-29-206c-2-11 6-22 17-24 12-1 23 7 24 18z m-292 6l-29 206c-2 11-12 19-24 18-11-2-19-13-17-24l29-206c2-12 12-20 24-18 11 2 19 13 17 24z" horiz-adv-x="1000" />
+
+<glyph glyph-name="cart-light" unicode="󡀕" d="M708-4c0-35 28-63 63-63 34 0 62 28 62 63 0 34-28 62-62 62-35 0-63-28-63-62z m-520 687l750 0c12 0 22-11 20-23l-32-260c-7-52-51-92-104-92l-559 0 8-41c10-49 53-84 102-84l481 0c12 0 21-9 21-20 0-12-9-21-21-21l-481 0c-69 0-129 49-143 117l-101 508-108 0c-12 0-21 9-21 21 0 11 9 20 21 20l125 0c10 0 18-7 20-16l22-109z m8-41l59-292 567 0c32 0 58 24 62 55l30 237-718 0z m471-646c0 57 46 104 104 104 57 0 104-47 104-104 0-58-47-104-104-104-58 0-104 46-104 104z m-417 0c0 57 47 104 104 104 58 0 104-47 104-104 0-58-46-104-104-104-57 0-104 46-104 104z m42 0c0-35 28-63 62-63 35 0 63 28 63 63 0 34-28 62-63 62-34 0-62-28-62-62z" horiz-adv-x="1000" />
+
+<glyph glyph-name="cart-medium" unicode="󡀖" d="M740-4c0-29 23-52 52-52s52 23 52 52-24 52-52 52-52-23-52-52z m-523 698h741c19 0 34-17 31-35l-32-261c-7-57-56-100-114-100h-546l6-29c8-44 47-75 92-75h480c17 0 31-14 31-31s-14-32-31-32h-481c-74 0-139 53-153 126l-100 499h-99c-17 0-32 14-32 32s15 31 32 31h125c15 0 28-11 31-25l19-100z m13-63l54-271h559c26 0 48 20 52 46l28 225h-693z m447-635c0 63 51 114 115 114s114-51 114-114-51-115-114-115-115 51-115 115z m-417 0c0 63 52 114 115 114s115-51 115-114-52-115-115-115-115 51-115 115z m63 0c0-29 23-52 52-52s52 23 52 52-23 52-52 52-52-23-52-52z" horiz-adv-x="1000" />
+
+<glyph glyph-name="cart-solid" unicode="󡀗" d="M188 683h750c5 0 11-2 15-7 4-4 6-10 5-16l-32-260c-7-52-51-92-103-92h-560l8-41c10-48 53-84 102-84h481c12 0 21-9 21-20s-9-21-21-21h-481c-69 0-129 49-143 117l-101 508h-108c-12 0-21 9-21 21s9 20 21 20h125c10 0 18-7 20-16l22-109z m583-583c57 0 104-47 104-104s-47-104-104-104-104 46-104 104 46 104 104 104z m-417 0c58 0 104-47 104-104s-46-104-104-104-104 46-104 104 47 104 104 104z" horiz-adv-x="1000" />
+
+<glyph glyph-name="exchange" unicode="󡀘" d="M392 600v-345c0-17-19-30-42-30s-42 13-42 30v345h-104c-6 0-10 2-14 5-5 4-7 8-7 13 0 5 2 10 7 13l145 130c5 4 10 5 15 5s10-1 15-5l145-130c5-3 7-8 7-13 0-5-2-9-7-13-4-3-9-5-14-5h-104z m208-500v345c0 17 19 30 42 30s41-13 41-30v-345h105c5 0 10-2 14-5s6-8 6-13-2-9-6-13l-146-130c-4-4-9-5-14-5s-11 1-15 5l-146 130c-4 4-6 8-6 13s2 9 6 13 9 5 15 5h104z" horiz-adv-x="1000" />
+
+<glyph glyph-name="eye" unicode="󡀙" d="M893 347c-52 81-117 141-195 181 21-36 31-74 31-115 0-63-22-118-67-163-45-44-99-67-162-67s-117 23-162 67c-45 45-67 100-67 163 0 41 10 79 31 115-78-40-143-100-195-181 46-70 102-125 171-167s142-62 222-62 153 21 222 62 126 97 171 167z m-368 196c0 7-3 13-7 18-5 4-11 7-18 7-42 0-79-15-110-46-30-30-45-67-45-109 0-7 2-13 7-18 4-5 10-7 17-7 7 0 13 2 18 7 4 5 7 10 7 18 0 29 10 54 31 75s46 31 75 31c7 0 13 2 18 7 4 5 7 11 7 17z m433-196c0-12-3-23-10-35-48-79-112-142-193-189-80-47-165-70-255-70s-175 23-255 71c-81 47-145 110-193 188-7 12-10 24-10 36s3 23 10 35c48 78 112 141 193 188s165 71 255 71 175-24 255-72 145-110 193-188c7-12 10-23 10-35z" horiz-adv-x="1000" />
+
+<glyph glyph-name="laptop" unicode="󡀠" d="M167 600h666v-417h-666m666-83a83 83 0 0 1 84 83v417c0 46-38 83-84 83h-666c-47 0-84-37-84-83v-417a83 83 0 0 1 84-83h-167v-83h1000v83h-167z" horiz-adv-x="1000" />
+
+<glyph glyph-name="collapse" unicode="󡀡" d="M826-108h-652c-73 0-132 59-132 132v652c0 73 59 132 132 132h652c73 0 132-59 132-132v-652c0-73-59-132-132-132z m-652 823c-21 0-39-17-39-39v-652c0-21 18-39 39-39h652c21 0 39 18 39 39v652c0 22-18 39-39 39h-652z m76-457c0 8 3 16 9 22l219 227c6 6 13 10 22 10s16-4 22-10l219-227c6-6 9-14 9-22s-3-17-9-23c-6-7-13-10-22-10h-438c-8 0-16 3-22 10-6 6-9 14-9 23z" horiz-adv-x="1000" />
+
+<glyph glyph-name="expand" unicode="󡀢" d="M865 715v-730h-730v730h730z m8 93h-746c-47 0-85-38-85-85v-746c0-47 38-85 85-85h746c47 0 85 38 85 85v746c0 47-38 85-85 85z m-623-365c0-9 3-17 9-23l219-227c6-6 13-10 22-10s16 4 22 10l219 227c6 6 9 14 9 23s-3 16-9 22-13 10-22 10h-438c-8 0-16-3-22-10s-9-14-9-22z" horiz-adv-x="1000" />
+
+<glyph glyph-name="navigator" unicode="󡀣" d="M936 613l-418 192c-11 5-24 5-35 0l-419-192c-14-7-22-20-22-34s8-27 22-33l418-192c6-3 12-4 18-4s12 1 18 4l418 192c14 6 22 19 22 33s-8 27-22 34z m-46-205c23 11 52 1 63-23 12-23 2-52-22-63l-411-195c-12-7-28-7-41 0l-410 195c-24 11-34 40-23 63s40 35 64 23l390-185 390 185z m0-229c23 11 52 1 63-23s2-52-22-63l-411-196c-12-6-28-6-41 0l-410 196c-24 11-34 40-23 63s40 34 64 23l390-186 390 186z" horiz-adv-x="1000" />
</font>
</defs>
</svg>
\ No newline at end of file
transition-duration: 0.3s;
transition-property: transform;
}
-.elementor-animation-grow:hover, .elementor-animation-grow:focus, .elementor-animation-grow:active {
+.elementor-animation-grow:hover {
transform: scale(1.1);
}
transition-duration: 0.3s;
transition-property: transform;
}
-.elementor-animation-shrink:hover, .elementor-animation-shrink:focus, .elementor-animation-shrink:active {
+.elementor-animation-shrink:hover {
transform: scale(0.9);
}
transform: scale(0.9);
}
}
-.elementor-animation-pulse:hover, .elementor-animation-pulse:focus, .elementor-animation-pulse:active {
+.elementor-animation-pulse:hover {
animation-name: elementor-animation-pulse;
animation-duration: 1s;
animation-timing-function: linear;
transform: scale(1.1);
}
}
-.elementor-animation-pulse-grow:hover, .elementor-animation-pulse-grow:focus, .elementor-animation-pulse-grow:active {
+.elementor-animation-pulse-grow:hover {
animation-name: elementor-animation-pulse-grow;
animation-duration: 0.3s;
animation-timing-function: linear;
transform: scale(0.9);
}
}
-.elementor-animation-pulse-shrink:hover, .elementor-animation-pulse-shrink:focus, .elementor-animation-pulse-shrink:active {
+.elementor-animation-pulse-shrink:hover {
animation-name: elementor-animation-pulse-shrink;
animation-duration: 0.3s;
animation-timing-function: linear;
transform: scale(1);
}
}
-.elementor-animation-push:hover, .elementor-animation-push:focus, .elementor-animation-push:active {
+.elementor-animation-push:hover {
animation-name: elementor-animation-push;
animation-duration: 0.3s;
animation-timing-function: linear;
transform: scale(1.2);
}
}
-.elementor-animation-pop:hover, .elementor-animation-pop:focus, .elementor-animation-pop:active {
+.elementor-animation-pop:hover {
animation-name: elementor-animation-pop;
animation-duration: 0.3s;
animation-timing-function: linear;
.elementor-animation-bounce-in {
transition-duration: 0.5s;
}
-.elementor-animation-bounce-in:hover, .elementor-animation-bounce-in:focus, .elementor-animation-bounce-in:active {
+.elementor-animation-bounce-in:hover {
transform: scale(1.2);
transition-timing-function: cubic-bezier(0.47, 2.02, 0.31, -0.36);
}
.elementor-animation-bounce-out {
transition-duration: 0.5s;
}
-.elementor-animation-bounce-out:hover, .elementor-animation-bounce-out:focus, .elementor-animation-bounce-out:active {
+.elementor-animation-bounce-out:hover {
transform: scale(0.8);
transition-timing-function: cubic-bezier(0.47, 2.02, 0.31, -0.36);
}
transition-duration: 0.3s;
transition-property: transform;
}
-.elementor-animation-rotate:hover, .elementor-animation-rotate:focus, .elementor-animation-rotate:active {
+.elementor-animation-rotate:hover {
transform: rotate(4deg);
}
transition-duration: 0.3s;
transition-property: transform;
}
-.elementor-animation-grow-rotate:hover, .elementor-animation-grow-rotate:focus, .elementor-animation-grow-rotate:active {
+.elementor-animation-grow-rotate:hover {
transform: scale(1.1) rotate(4deg);
}
transition-property: transform;
transition-timing-function: ease-out;
}
-.elementor-animation-float:hover, .elementor-animation-float:focus, .elementor-animation-float:active {
+.elementor-animation-float:hover {
transform: translateY(-8px);
}
transition-property: transform;
transition-timing-function: ease-out;
}
-.elementor-animation-sink:hover, .elementor-animation-sink:focus, .elementor-animation-sink:active {
+.elementor-animation-sink:hover {
transform: translateY(8px);
}
transform: translateY(-8px);
}
}
-.elementor-animation-bob:hover, .elementor-animation-bob:focus, .elementor-animation-bob:active {
+.elementor-animation-bob:hover {
animation-name: elementor-animation-bob-float, elementor-animation-bob;
animation-duration: .3s, 1.5s;
animation-delay: 0s, .3s;
transform: translateY(8px);
}
}
-.elementor-animation-hang:hover, .elementor-animation-hang:focus, .elementor-animation-hang:active {
+.elementor-animation-hang:hover {
animation-name: elementor-animation-hang-sink, elementor-animation-hang;
animation-duration: .3s, 1.5s;
animation-delay: 0s, .3s;
transition-duration: 0.3s;
transition-property: transform;
}
-.elementor-animation-skew:hover, .elementor-animation-skew:focus, .elementor-animation-skew:active {
+.elementor-animation-skew:hover {
transform: skew(-10deg);
}
transition-property: transform;
transform-origin: 0 100%;
}
-.elementor-animation-skew-forward:hover, .elementor-animation-skew-forward:focus, .elementor-animation-skew-forward:active {
+.elementor-animation-skew-forward:hover {
transform: skew(-10deg);
}
transition-property: transform;
transform-origin: 0 100%;
}
-.elementor-animation-skew-backward:hover, .elementor-animation-skew-backward:focus, .elementor-animation-skew-backward:active {
+.elementor-animation-skew-backward:hover {
transform: skew(10deg);
}
transform: translateY(0);
}
}
-.elementor-animation-wobble-vertical:hover, .elementor-animation-wobble-vertical:focus, .elementor-animation-wobble-vertical:active {
+.elementor-animation-wobble-vertical:hover {
animation-name: elementor-animation-wobble-vertical;
animation-duration: 1s;
animation-timing-function: ease-in-out;
transform: translateX(0);
}
}
-.elementor-animation-wobble-horizontal:hover, .elementor-animation-wobble-horizontal:focus, .elementor-animation-wobble-horizontal:active {
+.elementor-animation-wobble-horizontal:hover {
animation-name: elementor-animation-wobble-horizontal;
animation-duration: 1s;
animation-timing-function: ease-in-out;
transform: translate(0, 0);
}
}
-.elementor-animation-wobble-to-bottom-right:hover, .elementor-animation-wobble-to-bottom-right:focus, .elementor-animation-wobble-to-bottom-right:active {
+.elementor-animation-wobble-to-bottom-right:hover {
animation-name: elementor-animation-wobble-to-bottom-right;
animation-duration: 1s;
animation-timing-function: ease-in-out;
transform: translate(0, 0);
}
}
-.elementor-animation-wobble-to-top-right:hover, .elementor-animation-wobble-to-top-right:focus, .elementor-animation-wobble-to-top-right:active {
+.elementor-animation-wobble-to-top-right:hover {
animation-name: elementor-animation-wobble-to-top-right;
animation-duration: 1s;
animation-timing-function: ease-in-out;
.elementor-animation-wobble-top {
transform-origin: 0 100%;
}
-.elementor-animation-wobble-top:hover, .elementor-animation-wobble-top:focus, .elementor-animation-wobble-top:active {
+.elementor-animation-wobble-top:hover {
animation-name: elementor-animation-wobble-top;
animation-duration: 1s;
animation-timing-function: ease-in-out;
.elementor-animation-wobble-bottom {
transform-origin: 100% 0;
}
-.elementor-animation-wobble-bottom:hover, .elementor-animation-wobble-bottom:focus, .elementor-animation-wobble-bottom:active {
+.elementor-animation-wobble-bottom:hover {
animation-name: elementor-animation-wobble-bottom;
animation-duration: 1s;
animation-timing-function: ease-in-out;
transform: skew(0);
}
}
-.elementor-animation-wobble-skew:hover, .elementor-animation-wobble-skew:focus, .elementor-animation-wobble-skew:active {
+.elementor-animation-wobble-skew:hover {
animation-name: elementor-animation-wobble-skew;
animation-duration: 1s;
animation-timing-function: ease-in-out;
transform: translateX(-3px) rotate(-2deg);
}
}
-.elementor-animation-buzz:hover, .elementor-animation-buzz:focus, .elementor-animation-buzz:active {
+.elementor-animation-buzz:hover {
animation-name: elementor-animation-buzz;
animation-duration: 0.15s;
animation-timing-function: linear;
transform: translateX(-1px) rotate(0);
}
}
-.elementor-animation-buzz-out:hover, .elementor-animation-buzz-out:focus, .elementor-animation-buzz-out:active {
+.elementor-animation-buzz-out:hover {
animation-name: elementor-animation-buzz-out;
animation-duration: 0.75s;
animation-timing-function: linear;
-!function(a){"use strict";var b=function(b,c,d){function m(a,b){return k&&(k=clearTimeout(k)),j=0,d?d.call(a,b):null}function n(a){e=a.clientX,f=a.clientY}function o(a,b){if(k&&(k=clearTimeout(k)),Math.abs(g-e)+Math.abs(h-f)<l.sensitivity)return j=1,c?c.call(a,b):null;g=e,h=f,k=setTimeout(function(){o(a,b)},l.interval)}function p(a){return k&&(k=clearTimeout(k)),b.removeEventListener("mousemove",n),1!==j&&(g=a.clientX,h=a.clientY,b.addEventListener("mousemove",n),k=setTimeout(function(){o(b,a)},l.interval)),this}function q(a){return k&&(k=clearTimeout(k)),b.removeEventListener("mousemove",n),1===j&&(k=setTimeout(function(){m(b,a)},l.timeout)),this}var e,f,g,h,i={},j=0,k=0,l={sensitivity:7,interval:100,timeout:0};return i.options=function(b){return l=a.extend({},l,b),i},i.remove=function(){b.removeEventListener("mouseover",p),b.removeEventListener("mouseout",q)},b.addEventListener("mouseover",p),b.addEventListener("mouseout",q),i};a.fn.hoverIntent=function(a,c,d){return this.each(function(){b(this,a,c).options(d||{})})}}(jQuery);
\ No newline at end of file
+!function(h){"use strict";var i=function(i,o,r){var u,s,v,c,t={},m=0,a=0,l={sensitivity:7,interval:100,timeout:0};function f(e){u=e.clientX,s=e.clientY}function e(e){return a&&(a=clearTimeout(a)),i.removeEventListener("mousemove",f),1!==m&&(v=e.clientX,c=e.clientY,i.addEventListener("mousemove",f),a=setTimeout(function(){!function e(t,n){if(a&&(a=clearTimeout(a)),Math.abs(v-u)+Math.abs(c-s)<l.sensitivity)return m=1,o?o.call(t,n):null;v=u,c=s,a=setTimeout(function(){e(t,n)},l.interval)}(i,e)},l.interval)),this}function n(n){return a&&(a=clearTimeout(a)),i.removeEventListener("mousemove",f),1===m&&(a=setTimeout(function(){var e,t;e=i,t=n,a&&(a=clearTimeout(a)),m=0,r&&r.call(e,t)},l.timeout)),this}return t.options=function(e){return l=h.extend({},l,e),t},t.remove=function(){i.removeEventListener("mouseover",e),i.removeEventListener("mouseleave",n)},i.addEventListener("mouseover",e),i.addEventListener("mouseleave",n),t};h.fn.hoverIntent=function(e,t,n){return this.each(function(){i(this,e,t).options(n||{})})}}(jQuery);
\ No newline at end of file
/**
- * Swiper 3.4.2
+ * Swiper 4.3.3
* Most modern mobile touch slider and framework with hardware accelerated transitions
- *
* http://www.idangero.us/swiper/
*
- * Copyright 2017, Vladimir Kharlampidi
- * The iDangero.us
- * http://www.idangero.us/
+ * Copyright 2014-2018 Vladimir Kharlampidi
*
- * Licensed under MIT
+ * Released under the MIT License
*
- * Released on: March 10, 2017
+ * Released on: June 5, 2018
*/
-(function () {
- 'use strict';
- var $;
-
- /*===========================
- Swiper
- ===========================*/
- var Swiper = function (container, params) {
- if (!(this instanceof Swiper)) return new Swiper(container, params);
-
-
- var defaults = {
- direction: 'horizontal',
- touchEventsTarget: 'container',
- initialSlide: 0,
- speed: 300,
- // autoplay
- autoplay: false,
- autoplayDisableOnInteraction: true,
- autoplayStopOnLast: false,
- // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
- iOSEdgeSwipeDetection: false,
- iOSEdgeSwipeThreshold: 20,
- // Free mode
- freeMode: false,
- freeModeMomentum: true,
- freeModeMomentumRatio: 1,
- freeModeMomentumBounce: true,
- freeModeMomentumBounceRatio: 1,
- freeModeMomentumVelocityRatio: 1,
- freeModeSticky: false,
- freeModeMinimumVelocity: 0.02,
- // Autoheight
- autoHeight: false,
- // Set wrapper width
- setWrapperSize: false,
- // Virtual Translate
- virtualTranslate: false,
- // Effects
- effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
- coverflow: {
- rotate: 50,
- stretch: 0,
- depth: 100,
- modifier: 1,
- slideShadows : true
- },
- flip: {
- slideShadows : true,
- limitRotation: true
- },
- cube: {
- slideShadows: true,
- shadow: true,
- shadowOffset: 20,
- shadowScale: 0.94
- },
- fade: {
- crossFade: false
- },
- // Parallax
- parallax: false,
- // Zoom
- zoom: false,
- zoomMax: 3,
- zoomMin: 1,
- zoomToggle: true,
- // Scrollbar
- scrollbar: null,
- scrollbarHide: true,
- scrollbarDraggable: false,
- scrollbarSnapOnRelease: false,
- // Keyboard Mousewheel
- keyboardControl: false,
- mousewheelControl: false,
- mousewheelReleaseOnEdges: false,
- mousewheelInvert: false,
- mousewheelForceToAxis: false,
- mousewheelSensitivity: 1,
- mousewheelEventsTarged: 'container',
- // Hash Navigation
- hashnav: false,
- hashnavWatchState: false,
- // History
- history: false,
- // Commong Nav State
- replaceState: false,
- // Breakpoints
- breakpoints: undefined,
- // Slides grid
- spaceBetween: 0,
- slidesPerView: 1,
- slidesPerColumn: 1,
- slidesPerColumnFill: 'column',
- slidesPerGroup: 1,
- centeredSlides: false,
- slidesOffsetBefore: 0, // in px
- slidesOffsetAfter: 0, // in px
- // Round length
- roundLengths: false,
- // Touches
- touchRatio: 1,
- touchAngle: 45,
- simulateTouch: true,
- shortSwipes: true,
- longSwipes: true,
- longSwipesRatio: 0.5,
- longSwipesMs: 300,
- followFinger: true,
- onlyExternal: false,
- threshold: 0,
- touchMoveStopPropagation: true,
- touchReleaseOnEdges: false,
- // Unique Navigation Elements
- uniqueNavElements: true,
- // Pagination
- pagination: null,
- paginationElement: 'span',
- paginationClickable: false,
- paginationHide: false,
- paginationBulletRender: null,
- paginationProgressRender: null,
- paginationFractionRender: null,
- paginationCustomRender: null,
- paginationType: 'bullets', // 'bullets' or 'progress' or 'fraction' or 'custom'
- // Resistance
- resistance: true,
- resistanceRatio: 0.85,
- // Next/prev buttons
- nextButton: null,
- prevButton: null,
- // Progress
- watchSlidesProgress: false,
- watchSlidesVisibility: false,
- // Cursor
- grabCursor: false,
- // Clicks
- preventClicks: true,
- preventClicksPropagation: true,
- slideToClickedSlide: false,
- // Lazy Loading
- lazyLoading: false,
- lazyLoadingInPrevNext: false,
- lazyLoadingInPrevNextAmount: 1,
- lazyLoadingOnTransitionStart: false,
- // Images
- preloadImages: true,
- updateOnImagesReady: true,
- // loop
- loop: false,
- loopAdditionalSlides: 0,
- loopedSlides: null,
- // Control
- control: undefined,
- controlInverse: false,
- controlBy: 'slide', //or 'container'
- normalizeSlideIndex: true,
- // Swiping/no swiping
- allowSwipeToPrev: true,
- allowSwipeToNext: true,
- swipeHandler: null, //'.swipe-handler',
- noSwiping: true,
- noSwipingClass: 'swiper-no-swiping',
- // Passive Listeners
- passiveListeners: true,
- // NS
- containerModifierClass: 'swiper-container-', // NEW
- slideClass: 'swiper-slide',
- slideActiveClass: 'swiper-slide-active',
- slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
- slideVisibleClass: 'swiper-slide-visible',
- slideDuplicateClass: 'swiper-slide-duplicate',
- slideNextClass: 'swiper-slide-next',
- slideDuplicateNextClass: 'swiper-slide-duplicate-next',
- slidePrevClass: 'swiper-slide-prev',
- slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
- wrapperClass: 'swiper-wrapper',
- bulletClass: 'swiper-pagination-bullet',
- bulletActiveClass: 'swiper-pagination-bullet-active',
- buttonDisabledClass: 'swiper-button-disabled',
- paginationCurrentClass: 'swiper-pagination-current',
- paginationTotalClass: 'swiper-pagination-total',
- paginationHiddenClass: 'swiper-pagination-hidden',
- paginationProgressbarClass: 'swiper-pagination-progressbar',
- paginationClickableClass: 'swiper-pagination-clickable', // NEW
- paginationModifierClass: 'swiper-pagination-', // NEW
- lazyLoadingClass: 'swiper-lazy',
- lazyStatusLoadingClass: 'swiper-lazy-loading',
- lazyStatusLoadedClass: 'swiper-lazy-loaded',
- lazyPreloaderClass: 'swiper-lazy-preloader',
- notificationClass: 'swiper-notification',
- preloaderClass: 'preloader',
- zoomContainerClass: 'swiper-zoom-container',
-
- // Observer
- observer: false,
- observeParents: false,
- // Accessibility
- a11y: false,
- prevSlideMessage: 'Previous slide',
- nextSlideMessage: 'Next slide',
- firstSlideMessage: 'This is the first slide',
- lastSlideMessage: 'This is the last slide',
- paginationBulletMessage: 'Go to slide {{index}}',
- // Callbacks
- runCallbacksOnInit: true
- /*
- Callbacks:
- onInit: function (swiper)
- onDestroy: function (swiper)
- onBeforeResize: function (swiper)
- onAfterResize: function (swiper)
- onClick: function (swiper, e)
- onTap: function (swiper, e)
- onDoubleTap: function (swiper, e)
- onSliderMove: function (swiper, e)
- onSlideChangeStart: function (swiper)
- onSlideChangeEnd: function (swiper)
- onTransitionStart: function (swiper)
- onTransitionEnd: function (swiper)
- onImagesReady: function (swiper)
- onProgress: function (swiper, progress)
- onTouchStart: function (swiper, e)
- onTouchMove: function (swiper, e)
- onTouchMoveOpposite: function (swiper, e)
- onTouchEnd: function (swiper, e)
- onReachBeginning: function (swiper)
- onReachEnd: function (swiper)
- onSetTransition: function (swiper, duration)
- onSetTranslate: function (swiper, translate)
- onAutoplayStart: function (swiper)
- onAutoplayStop: function (swiper),
- onLazyImageLoad: function (swiper, slide, image)
- onLazyImageReady: function (swiper, slide, image)
- onKeyPress: function (swiper, keyCode)
- */
-
- };
- var initialVirtualTranslate = params && params.virtualTranslate;
-
- params = params || {};
- var originalParams = {};
- for (var param in params) {
- if (typeof params[param] === 'object' && params[param] !== null && !(params[param].nodeType || params[param] === window || params[param] === document || (typeof Dom7 !== 'undefined' && params[param] instanceof Dom7) || (typeof jQuery !== 'undefined' && params[param] instanceof jQuery))) {
- originalParams[param] = {};
- for (var deepParam in params[param]) {
- originalParams[param][deepParam] = params[param][deepParam];
- }
- }
- else {
- originalParams[param] = params[param];
- }
- }
- for (var def in defaults) {
- if (typeof params[def] === 'undefined') {
- params[def] = defaults[def];
- }
- else if (typeof params[def] === 'object') {
- for (var deepDef in defaults[def]) {
- if (typeof params[def][deepDef] === 'undefined') {
- params[def][deepDef] = defaults[def][deepDef];
- }
- }
- }
- }
-
- // Swiper
- var s = this;
-
- // Params
- s.params = params;
- s.originalParams = originalParams;
-
- // Classname
- s.classNames = [];
- /*=========================
- Dom Library and plugins
- ===========================*/
- if (typeof $ !== 'undefined' && typeof Dom7 !== 'undefined'){
- $ = Dom7;
- }
- if (typeof $ === 'undefined') {
- if (typeof Dom7 === 'undefined') {
- $ = window.Dom7 || window.Zepto || window.jQuery;
- }
- else {
- $ = Dom7;
- }
- if (!$) return;
- }
- // Export it to Swiper instance
- s.$ = $;
-
- /*=========================
- Breakpoints
- ===========================*/
- s.currentBreakpoint = undefined;
- s.getActiveBreakpoint = function () {
- //Get breakpoint for window width
- if (!s.params.breakpoints) return false;
- var breakpoint = false;
- var points = [], point;
- for ( point in s.params.breakpoints ) {
- if (s.params.breakpoints.hasOwnProperty(point)) {
- points.push(point);
- }
- }
- points.sort(function (a, b) {
- return parseInt(a, 10) > parseInt(b, 10);
- });
- for (var i = 0; i < points.length; i++) {
- point = points[i];
- if (point >= window.innerWidth && !breakpoint) {
- breakpoint = point;
- }
- }
- return breakpoint || 'max';
- };
- s.setBreakpoint = function () {
- //Set breakpoint for window width and update parameters
- var breakpoint = s.getActiveBreakpoint();
- if (breakpoint && s.currentBreakpoint !== breakpoint) {
- var breakPointsParams = breakpoint in s.params.breakpoints ? s.params.breakpoints[breakpoint] : s.originalParams;
- var needsReLoop = s.params.loop && (breakPointsParams.slidesPerView !== s.params.slidesPerView);
- for ( var param in breakPointsParams ) {
- s.params[param] = breakPointsParams[param];
- }
- s.currentBreakpoint = breakpoint;
- if(needsReLoop && s.destroyLoop) {
- s.reLoop(true);
- }
- }
- };
- // Set breakpoint on load
- if (s.params.breakpoints) {
- s.setBreakpoint();
- }
-
- /*=========================
- Preparation - Define Container, Wrapper and Pagination
- ===========================*/
- s.container = $(container);
- if (s.container.length === 0) return;
- if (s.container.length > 1) {
- var swipers = [];
- s.container.each(function () {
- var container = this;
- swipers.push(new Swiper(this, params));
- });
- return swipers;
- }
-
- // Save instance in container HTML Element and in data
- s.container[0].swiper = s;
- s.container.data('swiper', s);
-
- s.classNames.push(s.params.containerModifierClass + s.params.direction);
-
- if (s.params.freeMode) {
- s.classNames.push(s.params.containerModifierClass + 'free-mode');
- }
- if (!s.support.flexbox) {
- s.classNames.push(s.params.containerModifierClass + 'no-flexbox');
- s.params.slidesPerColumn = 1;
- }
- if (s.params.autoHeight) {
- s.classNames.push(s.params.containerModifierClass + 'autoheight');
- }
- // Enable slides progress when required
- if (s.params.parallax || s.params.watchSlidesVisibility) {
- s.params.watchSlidesProgress = true;
- }
- // Max resistance when touchReleaseOnEdges
- if (s.params.touchReleaseOnEdges) {
- s.params.resistanceRatio = 0;
- }
- // Coverflow / 3D
- if (['cube', 'coverflow', 'flip'].indexOf(s.params.effect) >= 0) {
- if (s.support.transforms3d) {
- s.params.watchSlidesProgress = true;
- s.classNames.push(s.params.containerModifierClass + '3d');
- }
- else {
- s.params.effect = 'slide';
- }
- }
- if (s.params.effect !== 'slide') {
- s.classNames.push(s.params.containerModifierClass + s.params.effect);
- }
- if (s.params.effect === 'cube') {
- s.params.resistanceRatio = 0;
- s.params.slidesPerView = 1;
- s.params.slidesPerColumn = 1;
- s.params.slidesPerGroup = 1;
- s.params.centeredSlides = false;
- s.params.spaceBetween = 0;
- s.params.virtualTranslate = true;
- }
- if (s.params.effect === 'fade' || s.params.effect === 'flip') {
- s.params.slidesPerView = 1;
- s.params.slidesPerColumn = 1;
- s.params.slidesPerGroup = 1;
- s.params.watchSlidesProgress = true;
- s.params.spaceBetween = 0;
- if (typeof initialVirtualTranslate === 'undefined') {
- s.params.virtualTranslate = true;
- }
- }
-
- // Grab Cursor
- if (s.params.grabCursor && s.support.touch) {
- s.params.grabCursor = false;
- }
-
- // Wrapper
- s.wrapper = s.container.children('.' + s.params.wrapperClass);
-
- // Pagination
- if (s.params.pagination) {
- s.paginationContainer = $(s.params.pagination);
- if (s.params.uniqueNavElements && typeof s.params.pagination === 'string' && s.paginationContainer.length > 1 && s.container.find(s.params.pagination).length === 1) {
- s.paginationContainer = s.container.find(s.params.pagination);
- }
-
- if (s.params.paginationType === 'bullets' && s.params.paginationClickable) {
- s.paginationContainer.addClass(s.params.paginationModifierClass + 'clickable');
- }
- else {
- s.params.paginationClickable = false;
- }
- s.paginationContainer.addClass(s.params.paginationModifierClass + s.params.paginationType);
- }
- // Next/Prev Buttons
- if (s.params.nextButton || s.params.prevButton) {
- if (s.params.nextButton) {
- s.nextButton = $(s.params.nextButton);
- if (s.params.uniqueNavElements && typeof s.params.nextButton === 'string' && s.nextButton.length > 1 && s.container.find(s.params.nextButton).length === 1) {
- s.nextButton = s.container.find(s.params.nextButton);
- }
- }
- if (s.params.prevButton) {
- s.prevButton = $(s.params.prevButton);
- if (s.params.uniqueNavElements && typeof s.params.prevButton === 'string' && s.prevButton.length > 1 && s.container.find(s.params.prevButton).length === 1) {
- s.prevButton = s.container.find(s.params.prevButton);
- }
- }
- }
-
- // Is Horizontal
- s.isHorizontal = function () {
- return s.params.direction === 'horizontal';
- };
- // s.isH = isH;
-
- // RTL
- s.rtl = s.isHorizontal() && (s.container[0].dir.toLowerCase() === 'rtl' || s.container.css('direction') === 'rtl');
- if (s.rtl) {
- s.classNames.push(s.params.containerModifierClass + 'rtl');
- }
-
- // Wrong RTL support
- if (s.rtl) {
- s.wrongRTL = s.wrapper.css('display') === '-webkit-box';
- }
-
- // Columns
- if (s.params.slidesPerColumn > 1) {
- s.classNames.push(s.params.containerModifierClass + 'multirow');
- }
-
- // Check for Android
- if (s.device.android) {
- s.classNames.push(s.params.containerModifierClass + 'android');
- }
-
- // Add classes
- s.container.addClass(s.classNames.join(' '));
-
- // Translate
- s.translate = 0;
-
- // Progress
- s.progress = 0;
-
- // Velocity
- s.velocity = 0;
-
- /*=========================
- Locks, unlocks
- ===========================*/
- s.lockSwipeToNext = function () {
- s.params.allowSwipeToNext = false;
- if (s.params.allowSwipeToPrev === false && s.params.grabCursor) {
- s.unsetGrabCursor();
- }
- };
- s.lockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = false;
- if (s.params.allowSwipeToNext === false && s.params.grabCursor) {
- s.unsetGrabCursor();
- }
- };
- s.lockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = false;
- if (s.params.grabCursor) s.unsetGrabCursor();
- };
- s.unlockSwipeToNext = function () {
- s.params.allowSwipeToNext = true;
- if (s.params.allowSwipeToPrev === true && s.params.grabCursor) {
- s.setGrabCursor();
- }
- };
- s.unlockSwipeToPrev = function () {
- s.params.allowSwipeToPrev = true;
- if (s.params.allowSwipeToNext === true && s.params.grabCursor) {
- s.setGrabCursor();
- }
- };
- s.unlockSwipes = function () {
- s.params.allowSwipeToNext = s.params.allowSwipeToPrev = true;
- if (s.params.grabCursor) s.setGrabCursor();
- };
-
- /*=========================
- Round helper
- ===========================*/
- function round(a) {
- return Math.floor(a);
- }
- /*=========================
- Set grab cursor
- ===========================*/
- s.setGrabCursor = function(moving) {
- s.container[0].style.cursor = 'move';
- s.container[0].style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
- s.container[0].style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
- s.container[0].style.cursor = moving ? 'grabbing': 'grab';
- };
- s.unsetGrabCursor = function () {
- s.container[0].style.cursor = '';
- };
- if (s.params.grabCursor) {
- s.setGrabCursor();
- }
- /*=========================
- Update on Images Ready
- ===========================*/
- s.imagesToLoad = [];
- s.imagesLoaded = 0;
-
- s.loadImage = function (imgElement, src, srcset, sizes, checkForComplete, callback) {
- var image;
- function onReady () {
- if (callback) callback();
- }
- if (!imgElement.complete || !checkForComplete) {
- if (src) {
- image = new window.Image();
- image.onload = onReady;
- image.onerror = onReady;
- if (sizes) {
- image.sizes = sizes;
- }
- if (srcset) {
- image.srcset = srcset;
- }
- if (src) {
- image.src = src;
- }
- } else {
- onReady();
- }
-
- } else {//image already loaded...
- onReady();
- }
- };
- s.preloadImages = function () {
- s.imagesToLoad = s.container.find('img');
- function _onReady() {
- if (typeof s === 'undefined' || s === null || !s) return;
- if (s.imagesLoaded !== undefined) s.imagesLoaded++;
- if (s.imagesLoaded === s.imagesToLoad.length) {
- if (s.params.updateOnImagesReady) s.update();
- s.emit('onImagesReady', s);
- }
- }
- for (var i = 0; i < s.imagesToLoad.length; i++) {
- s.loadImage(s.imagesToLoad[i], (s.imagesToLoad[i].currentSrc || s.imagesToLoad[i].getAttribute('src')), (s.imagesToLoad[i].srcset || s.imagesToLoad[i].getAttribute('srcset')), s.imagesToLoad[i].sizes || s.imagesToLoad[i].getAttribute('sizes'), true, _onReady);
- }
- };
-
- /*=========================
- Autoplay
- ===========================*/
- s.autoplayTimeoutId = undefined;
- s.autoplaying = false;
- s.autoplayPaused = false;
- function autoplay() {
- var autoplayDelay = s.params.autoplay;
- var activeSlide = s.slides.eq(s.activeIndex);
- if (activeSlide.attr('data-swiper-autoplay')) {
- autoplayDelay = activeSlide.attr('data-swiper-autoplay') || s.params.autoplay;
- }
- s.autoplayTimeoutId = setTimeout(function () {
- if (s.params.loop) {
- s.fixLoop();
- s._slideNext();
- s.emit('onAutoplay', s);
- }
- else {
- if (!s.isEnd) {
- s._slideNext();
- s.emit('onAutoplay', s);
- }
- else {
- if (!params.autoplayStopOnLast) {
- s._slideTo(0);
- s.emit('onAutoplay', s);
- }
- else {
- s.stopAutoplay();
- }
- }
- }
- }, autoplayDelay);
- }
- s.startAutoplay = function () {
- if (typeof s.autoplayTimeoutId !== 'undefined') return false;
- if (!s.params.autoplay) return false;
- if (s.autoplaying) return false;
- s.autoplaying = true;
- s.emit('onAutoplayStart', s);
- autoplay();
- };
- s.stopAutoplay = function (internal) {
- if (!s.autoplayTimeoutId) return;
- if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);
- s.autoplaying = false;
- s.autoplayTimeoutId = undefined;
- s.emit('onAutoplayStop', s);
- };
- s.pauseAutoplay = function (speed) {
- if (s.autoplayPaused) return;
- if (s.autoplayTimeoutId) clearTimeout(s.autoplayTimeoutId);
- s.autoplayPaused = true;
- if (speed === 0) {
- s.autoplayPaused = false;
- autoplay();
- }
- else {
- s.wrapper.transitionEnd(function () {
- if (!s) return;
- s.autoplayPaused = false;
- if (!s.autoplaying) {
- s.stopAutoplay();
- }
- else {
- autoplay();
- }
- });
- }
- };
- /*=========================
- Min/Max Translate
- ===========================*/
- s.minTranslate = function () {
- return (-s.snapGrid[0]);
- };
- s.maxTranslate = function () {
- return (-s.snapGrid[s.snapGrid.length - 1]);
- };
- /*=========================
- Slider/slides sizes
- ===========================*/
- s.updateAutoHeight = function () {
- var activeSlides = [];
- var newHeight = 0;
- var i;
-
- // Find slides currently in view
- if(s.params.slidesPerView !== 'auto' && s.params.slidesPerView > 1) {
- for (i = 0; i < Math.ceil(s.params.slidesPerView); i++) {
- var index = s.activeIndex + i;
- if(index > s.slides.length) break;
- activeSlides.push(s.slides.eq(index)[0]);
- }
- } else {
- activeSlides.push(s.slides.eq(s.activeIndex)[0]);
- }
-
- // Find new height from heighest slide in view
- for (i = 0; i < activeSlides.length; i++) {
- if (typeof activeSlides[i] !== 'undefined') {
- var height = activeSlides[i].offsetHeight;
- newHeight = height > newHeight ? height : newHeight;
- }
- }
-
- // Update Height
- if (newHeight) s.wrapper.css('height', newHeight + 'px');
- };
- s.updateContainerSize = function () {
- var width, height;
- if (typeof s.params.width !== 'undefined') {
- width = s.params.width;
- }
- else {
- width = s.container[0].clientWidth;
- }
- if (typeof s.params.height !== 'undefined') {
- height = s.params.height;
- }
- else {
- height = s.container[0].clientHeight;
- }
- if (width === 0 && s.isHorizontal() || height === 0 && !s.isHorizontal()) {
- return;
- }
-
- //Subtract paddings
- width = width - parseInt(s.container.css('padding-left'), 10) - parseInt(s.container.css('padding-right'), 10);
- height = height - parseInt(s.container.css('padding-top'), 10) - parseInt(s.container.css('padding-bottom'), 10);
-
- // Store values
- s.width = width;
- s.height = height;
- s.size = s.isHorizontal() ? s.width : s.height;
- };
-
- s.updateSlidesSize = function () {
- s.slides = s.wrapper.children('.' + s.params.slideClass);
- s.snapGrid = [];
- s.slidesGrid = [];
- s.slidesSizesGrid = [];
-
- var spaceBetween = s.params.spaceBetween,
- slidePosition = -s.params.slidesOffsetBefore,
- i,
- prevSlideSize = 0,
- index = 0;
- if (typeof s.size === 'undefined') return;
- if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
- spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * s.size;
- }
-
- s.virtualSize = -spaceBetween;
- // reset margins
- if (s.rtl) s.slides.css({marginLeft: '', marginTop: ''});
- else s.slides.css({marginRight: '', marginBottom: ''});
-
- var slidesNumberEvenToRows;
- if (s.params.slidesPerColumn > 1) {
- if (Math.floor(s.slides.length / s.params.slidesPerColumn) === s.slides.length / s.params.slidesPerColumn) {
- slidesNumberEvenToRows = s.slides.length;
- }
- else {
- slidesNumberEvenToRows = Math.ceil(s.slides.length / s.params.slidesPerColumn) * s.params.slidesPerColumn;
- }
- if (s.params.slidesPerView !== 'auto' && s.params.slidesPerColumnFill === 'row') {
- slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, s.params.slidesPerView * s.params.slidesPerColumn);
- }
- }
-
- // Calc slides
- var slideSize;
- var slidesPerColumn = s.params.slidesPerColumn;
- var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
- var numFullColumns = slidesPerRow - (s.params.slidesPerColumn * slidesPerRow - s.slides.length);
- for (i = 0; i < s.slides.length; i++) {
- slideSize = 0;
- var slide = s.slides.eq(i);
- if (s.params.slidesPerColumn > 1) {
- // Set slides order
- var newSlideOrderIndex;
- var column, row;
- if (s.params.slidesPerColumnFill === 'column') {
- column = Math.floor(i / slidesPerColumn);
- row = i - column * slidesPerColumn;
- if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn-1)) {
- if (++row >= slidesPerColumn) {
- row = 0;
- column++;
- }
- }
- newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;
- slide
- .css({
- '-webkit-box-ordinal-group': newSlideOrderIndex,
- '-moz-box-ordinal-group': newSlideOrderIndex,
- '-ms-flex-order': newSlideOrderIndex,
- '-webkit-order': newSlideOrderIndex,
- 'order': newSlideOrderIndex
- });
- }
- else {
- row = Math.floor(i / slidesPerRow);
- column = i - row * slidesPerRow;
- }
- slide
- .css(
- 'margin-' + (s.isHorizontal() ? 'top' : 'left'),
- (row !== 0 && s.params.spaceBetween) && (s.params.spaceBetween + 'px')
- )
- .attr('data-swiper-column', column)
- .attr('data-swiper-row', row);
-
- }
- if (slide.css('display') === 'none') continue;
- if (s.params.slidesPerView === 'auto') {
- slideSize = s.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);
- if (s.params.roundLengths) slideSize = round(slideSize);
- }
- else {
- slideSize = (s.size - (s.params.slidesPerView - 1) * spaceBetween) / s.params.slidesPerView;
- if (s.params.roundLengths) slideSize = round(slideSize);
-
- if (s.isHorizontal()) {
- s.slides[i].style.width = slideSize + 'px';
- }
- else {
- s.slides[i].style.height = slideSize + 'px';
- }
- }
- s.slides[i].swiperSlideSize = slideSize;
- s.slidesSizesGrid.push(slideSize);
-
-
- if (s.params.centeredSlides) {
- slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
- if(prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;
- if (i === 0) slidePosition = slidePosition - s.size / 2 - spaceBetween;
- if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
- if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);
- s.slidesGrid.push(slidePosition);
- }
- else {
- if ((index) % s.params.slidesPerGroup === 0) s.snapGrid.push(slidePosition);
- s.slidesGrid.push(slidePosition);
- slidePosition = slidePosition + slideSize + spaceBetween;
- }
-
- s.virtualSize += slideSize + spaceBetween;
-
- prevSlideSize = slideSize;
-
- index ++;
- }
- s.virtualSize = Math.max(s.virtualSize, s.size) + s.params.slidesOffsetAfter;
- var newSlidesGrid;
-
- if (
- s.rtl && s.wrongRTL && (s.params.effect === 'slide' || s.params.effect === 'coverflow')) {
- s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});
- }
- if (!s.support.flexbox || s.params.setWrapperSize) {
- if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});
- else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});
- }
-
- if (s.params.slidesPerColumn > 1) {
- s.virtualSize = (slideSize + s.params.spaceBetween) * slidesNumberEvenToRows;
- s.virtualSize = Math.ceil(s.virtualSize / s.params.slidesPerColumn) - s.params.spaceBetween;
- if (s.isHorizontal()) s.wrapper.css({width: s.virtualSize + s.params.spaceBetween + 'px'});
- else s.wrapper.css({height: s.virtualSize + s.params.spaceBetween + 'px'});
- if (s.params.centeredSlides) {
- newSlidesGrid = [];
- for (i = 0; i < s.snapGrid.length; i++) {
- if (s.snapGrid[i] < s.virtualSize + s.snapGrid[0]) newSlidesGrid.push(s.snapGrid[i]);
- }
- s.snapGrid = newSlidesGrid;
- }
- }
-
- // Remove last grid elements depending on width
- if (!s.params.centeredSlides) {
- newSlidesGrid = [];
- for (i = 0; i < s.snapGrid.length; i++) {
- if (s.snapGrid[i] <= s.virtualSize - s.size) {
- newSlidesGrid.push(s.snapGrid[i]);
- }
- }
- s.snapGrid = newSlidesGrid;
- if (Math.floor(s.virtualSize - s.size) - Math.floor(s.snapGrid[s.snapGrid.length - 1]) > 1) {
- s.snapGrid.push(s.virtualSize - s.size);
- }
- }
- if (s.snapGrid.length === 0) s.snapGrid = [0];
-
- if (s.params.spaceBetween !== 0) {
- if (s.isHorizontal()) {
- if (s.rtl) s.slides.css({marginLeft: spaceBetween + 'px'});
- else s.slides.css({marginRight: spaceBetween + 'px'});
- }
- else s.slides.css({marginBottom: spaceBetween + 'px'});
- }
- if (s.params.watchSlidesProgress) {
- s.updateSlidesOffset();
- }
- };
- s.updateSlidesOffset = function () {
- for (var i = 0; i < s.slides.length; i++) {
- s.slides[i].swiperSlideOffset = s.isHorizontal() ? s.slides[i].offsetLeft : s.slides[i].offsetTop;
- }
- };
-
- /*=========================
- Dynamic Slides Per View
- ===========================*/
- s.currentSlidesPerView = function () {
- var spv = 1, i, j;
- if (s.params.centeredSlides) {
- var size = s.slides[s.activeIndex].swiperSlideSize;
- var breakLoop;
- for (i = s.activeIndex + 1; i < s.slides.length; i++) {
- if (s.slides[i] && !breakLoop) {
- size += s.slides[i].swiperSlideSize;
- spv ++;
- if (size > s.size) breakLoop = true;
- }
- }
- for (j = s.activeIndex - 1; j >= 0; j--) {
- if (s.slides[j] && !breakLoop) {
- size += s.slides[j].swiperSlideSize;
- spv ++;
- if (size > s.size) breakLoop = true;
- }
- }
- }
- else {
- for (i = s.activeIndex + 1; i < s.slides.length; i++) {
- if (s.slidesGrid[i] - s.slidesGrid[s.activeIndex] < s.size) {
- spv++;
- }
- }
- }
- return spv;
- };
- /*=========================
- Slider/slides progress
- ===========================*/
- s.updateSlidesProgress = function (translate) {
- if (typeof translate === 'undefined') {
- translate = s.translate || 0;
- }
- if (s.slides.length === 0) return;
- if (typeof s.slides[0].swiperSlideOffset === 'undefined') s.updateSlidesOffset();
-
- var offsetCenter = -translate;
- if (s.rtl) offsetCenter = translate;
-
- // Visible Slides
- s.slides.removeClass(s.params.slideVisibleClass);
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides[i];
- var slideProgress = (offsetCenter + (s.params.centeredSlides ? s.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + s.params.spaceBetween);
- if (s.params.watchSlidesVisibility) {
- var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
- var slideAfter = slideBefore + s.slidesSizesGrid[i];
- var isVisible =
- (slideBefore >= 0 && slideBefore < s.size) ||
- (slideAfter > 0 && slideAfter <= s.size) ||
- (slideBefore <= 0 && slideAfter >= s.size);
- if (isVisible) {
- s.slides.eq(i).addClass(s.params.slideVisibleClass);
- }
- }
- slide.progress = s.rtl ? -slideProgress : slideProgress;
- }
- };
- s.updateProgress = function (translate) {
- if (typeof translate === 'undefined') {
- translate = s.translate || 0;
- }
- var translatesDiff = s.maxTranslate() - s.minTranslate();
- var wasBeginning = s.isBeginning;
- var wasEnd = s.isEnd;
- if (translatesDiff === 0) {
- s.progress = 0;
- s.isBeginning = s.isEnd = true;
- }
- else {
- s.progress = (translate - s.minTranslate()) / (translatesDiff);
- s.isBeginning = s.progress <= 0;
- s.isEnd = s.progress >= 1;
- }
- if (s.isBeginning && !wasBeginning) s.emit('onReachBeginning', s);
- if (s.isEnd && !wasEnd) s.emit('onReachEnd', s);
-
- if (s.params.watchSlidesProgress) s.updateSlidesProgress(translate);
- s.emit('onProgress', s, s.progress);
- };
- s.updateActiveIndex = function () {
- var translate = s.rtl ? s.translate : -s.translate;
- var newActiveIndex, i, snapIndex;
- for (i = 0; i < s.slidesGrid.length; i ++) {
- if (typeof s.slidesGrid[i + 1] !== 'undefined') {
- if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1] - (s.slidesGrid[i + 1] - s.slidesGrid[i]) / 2) {
- newActiveIndex = i;
- }
- else if (translate >= s.slidesGrid[i] && translate < s.slidesGrid[i + 1]) {
- newActiveIndex = i + 1;
- }
- }
- else {
- if (translate >= s.slidesGrid[i]) {
- newActiveIndex = i;
- }
- }
- }
- // Normalize slideIndex
- if(s.params.normalizeSlideIndex){
- if (newActiveIndex < 0 || typeof newActiveIndex === 'undefined') newActiveIndex = 0;
- }
- // for (i = 0; i < s.slidesGrid.length; i++) {
- // if (- translate >= s.slidesGrid[i]) {
- // newActiveIndex = i;
- // }
- // }
- snapIndex = Math.floor(newActiveIndex / s.params.slidesPerGroup);
- if (snapIndex >= s.snapGrid.length) snapIndex = s.snapGrid.length - 1;
-
- if (newActiveIndex === s.activeIndex) {
- return;
- }
- s.snapIndex = snapIndex;
- s.previousIndex = s.activeIndex;
- s.activeIndex = newActiveIndex;
- s.updateClasses();
- s.updateRealIndex();
- };
- s.updateRealIndex = function(){
- s.realIndex = parseInt(s.slides.eq(s.activeIndex).attr('data-swiper-slide-index') || s.activeIndex, 10);
- };
-
- /*=========================
- Classes
- ===========================*/
- s.updateClasses = function () {
- s.slides.removeClass(s.params.slideActiveClass + ' ' + s.params.slideNextClass + ' ' + s.params.slidePrevClass + ' ' + s.params.slideDuplicateActiveClass + ' ' + s.params.slideDuplicateNextClass + ' ' + s.params.slideDuplicatePrevClass);
- var activeSlide = s.slides.eq(s.activeIndex);
- // Active classes
- activeSlide.addClass(s.params.slideActiveClass);
- if (params.loop) {
- // Duplicate to all looped slides
- if (activeSlide.hasClass(s.params.slideDuplicateClass)) {
- s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass);
- }
- else {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + s.realIndex + '"]').addClass(s.params.slideDuplicateActiveClass);
- }
- }
- // Next Slide
- var nextSlide = activeSlide.next('.' + s.params.slideClass).addClass(s.params.slideNextClass);
- if (s.params.loop && nextSlide.length === 0) {
- nextSlide = s.slides.eq(0);
- nextSlide.addClass(s.params.slideNextClass);
- }
- // Prev Slide
- var prevSlide = activeSlide.prev('.' + s.params.slideClass).addClass(s.params.slidePrevClass);
- if (s.params.loop && prevSlide.length === 0) {
- prevSlide = s.slides.eq(-1);
- prevSlide.addClass(s.params.slidePrevClass);
- }
- if (params.loop) {
- // Duplicate to all looped slides
- if (nextSlide.hasClass(s.params.slideDuplicateClass)) {
- s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass);
- }
- else {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + nextSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicateNextClass);
- }
- if (prevSlide.hasClass(s.params.slideDuplicateClass)) {
- s.wrapper.children('.' + s.params.slideClass + ':not(.' + s.params.slideDuplicateClass + ')[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass);
- }
- else {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + prevSlide.attr('data-swiper-slide-index') + '"]').addClass(s.params.slideDuplicatePrevClass);
- }
- }
-
- // Pagination
- if (s.paginationContainer && s.paginationContainer.length > 0) {
- // Current/Total
- var current,
- total = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;
- if (s.params.loop) {
- current = Math.ceil((s.activeIndex - s.loopedSlides)/s.params.slidesPerGroup);
- if (current > s.slides.length - 1 - s.loopedSlides * 2) {
- current = current - (s.slides.length - s.loopedSlides * 2);
- }
- if (current > total - 1) current = current - total;
- if (current < 0 && s.params.paginationType !== 'bullets') current = total + current;
- }
- else {
- if (typeof s.snapIndex !== 'undefined') {
- current = s.snapIndex;
- }
- else {
- current = s.activeIndex || 0;
- }
- }
- // Types
- if (s.params.paginationType === 'bullets' && s.bullets && s.bullets.length > 0) {
- s.bullets.removeClass(s.params.bulletActiveClass);
- if (s.paginationContainer.length > 1) {
- s.bullets.each(function () {
- if ($(this).index() === current) $(this).addClass(s.params.bulletActiveClass);
- });
- }
- else {
- s.bullets.eq(current).addClass(s.params.bulletActiveClass);
- }
- }
- if (s.params.paginationType === 'fraction') {
- s.paginationContainer.find('.' + s.params.paginationCurrentClass).text(current + 1);
- s.paginationContainer.find('.' + s.params.paginationTotalClass).text(total);
- }
- if (s.params.paginationType === 'progress') {
- var scale = (current + 1) / total,
- scaleX = scale,
- scaleY = 1;
- if (!s.isHorizontal()) {
- scaleY = scale;
- scaleX = 1;
- }
- s.paginationContainer.find('.' + s.params.paginationProgressbarClass).transform('translate3d(0,0,0) scaleX(' + scaleX + ') scaleY(' + scaleY + ')').transition(s.params.speed);
- }
- if (s.params.paginationType === 'custom' && s.params.paginationCustomRender) {
- s.paginationContainer.html(s.params.paginationCustomRender(s, current + 1, total));
- s.emit('onPaginationRendered', s, s.paginationContainer[0]);
- }
- }
-
- // Next/active buttons
- if (!s.params.loop) {
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- if (s.isBeginning) {
- s.prevButton.addClass(s.params.buttonDisabledClass);
- if (s.params.a11y && s.a11y) s.a11y.disable(s.prevButton);
- }
- else {
- s.prevButton.removeClass(s.params.buttonDisabledClass);
- if (s.params.a11y && s.a11y) s.a11y.enable(s.prevButton);
- }
- }
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- if (s.isEnd) {
- s.nextButton.addClass(s.params.buttonDisabledClass);
- if (s.params.a11y && s.a11y) s.a11y.disable(s.nextButton);
- }
- else {
- s.nextButton.removeClass(s.params.buttonDisabledClass);
- if (s.params.a11y && s.a11y) s.a11y.enable(s.nextButton);
- }
- }
- }
- };
-
- /*=========================
- Pagination
- ===========================*/
- s.updatePagination = function () {
- if (!s.params.pagination) return;
- if (s.paginationContainer && s.paginationContainer.length > 0) {
- var paginationHTML = '';
- if (s.params.paginationType === 'bullets') {
- var numberOfBullets = s.params.loop ? Math.ceil((s.slides.length - s.loopedSlides * 2) / s.params.slidesPerGroup) : s.snapGrid.length;
- for (var i = 0; i < numberOfBullets; i++) {
- if (s.params.paginationBulletRender) {
- paginationHTML += s.params.paginationBulletRender(s, i, s.params.bulletClass);
- }
- else {
- paginationHTML += '<' + s.params.paginationElement+' class="' + s.params.bulletClass + '"></' + s.params.paginationElement + '>';
- }
- }
- s.paginationContainer.html(paginationHTML);
- s.bullets = s.paginationContainer.find('.' + s.params.bulletClass);
- if (s.params.paginationClickable && s.params.a11y && s.a11y) {
- s.a11y.initPagination();
- }
- }
- if (s.params.paginationType === 'fraction') {
- if (s.params.paginationFractionRender) {
- paginationHTML = s.params.paginationFractionRender(s, s.params.paginationCurrentClass, s.params.paginationTotalClass);
- }
- else {
- paginationHTML =
- '<span class="' + s.params.paginationCurrentClass + '"></span>' +
- ' / ' +
- '<span class="' + s.params.paginationTotalClass+'"></span>';
- }
- s.paginationContainer.html(paginationHTML);
- }
- if (s.params.paginationType === 'progress') {
- if (s.params.paginationProgressRender) {
- paginationHTML = s.params.paginationProgressRender(s, s.params.paginationProgressbarClass);
- }
- else {
- paginationHTML = '<span class="' + s.params.paginationProgressbarClass + '"></span>';
- }
- s.paginationContainer.html(paginationHTML);
- }
- if (s.params.paginationType !== 'custom') {
- s.emit('onPaginationRendered', s, s.paginationContainer[0]);
- }
- }
- };
- /*=========================
- Common update method
- ===========================*/
- s.update = function (updateTranslate) {
- if (!s) return;
- s.updateContainerSize();
- s.updateSlidesSize();
- s.updateProgress();
- s.updatePagination();
- s.updateClasses();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- }
- var newTranslate;
- function forceSetTranslate() {
- var translate = s.rtl ? -s.translate : s.translate;
- newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());
- s.setWrapperTranslate(newTranslate);
- s.updateActiveIndex();
- s.updateClasses();
- }
- if (updateTranslate) {
- var translated;
- if (s.controller && s.controller.spline) {
- s.controller.spline = undefined;
- }
- if (s.params.freeMode) {
- forceSetTranslate();
- if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- }
- else {
- if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {
- translated = s.slideTo(s.slides.length - 1, 0, false, true);
- }
- else {
- translated = s.slideTo(s.activeIndex, 0, false, true);
- }
- if (!translated) {
- forceSetTranslate();
- }
- }
- }
- else if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- };
-
- /*=========================
- Resize Handler
- ===========================*/
- s.onResize = function (forceUpdatePagination) {
- if (s.params.onBeforeResize) s.params.onBeforeResize(s);
- //Breakpoints
- if (s.params.breakpoints) {
- s.setBreakpoint();
- }
-
- // Disable locks on resize
- var allowSwipeToPrev = s.params.allowSwipeToPrev;
- var allowSwipeToNext = s.params.allowSwipeToNext;
- s.params.allowSwipeToPrev = s.params.allowSwipeToNext = true;
-
- s.updateContainerSize();
- s.updateSlidesSize();
- if (s.params.slidesPerView === 'auto' || s.params.freeMode || forceUpdatePagination) s.updatePagination();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- }
- if (s.controller && s.controller.spline) {
- s.controller.spline = undefined;
- }
- var slideChangedBySlideTo = false;
- if (s.params.freeMode) {
- var newTranslate = Math.min(Math.max(s.translate, s.maxTranslate()), s.minTranslate());
- s.setWrapperTranslate(newTranslate);
- s.updateActiveIndex();
- s.updateClasses();
-
- if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- }
- else {
- s.updateClasses();
- if ((s.params.slidesPerView === 'auto' || s.params.slidesPerView > 1) && s.isEnd && !s.params.centeredSlides) {
- slideChangedBySlideTo = s.slideTo(s.slides.length - 1, 0, false, true);
- }
- else {
- slideChangedBySlideTo = s.slideTo(s.activeIndex, 0, false, true);
- }
- }
- if (s.params.lazyLoading && !slideChangedBySlideTo && s.lazy) {
- s.lazy.load();
- }
- // Return locks after resize
- s.params.allowSwipeToPrev = allowSwipeToPrev;
- s.params.allowSwipeToNext = allowSwipeToNext;
- if (s.params.onAfterResize) s.params.onAfterResize(s);
- };
-
- /*=========================
- Events
- ===========================*/
-
- //Define Touch Events
- s.touchEventsDesktop = {start: 'mousedown', move: 'mousemove', end: 'mouseup'};
- if (window.navigator.pointerEnabled) s.touchEventsDesktop = {start: 'pointerdown', move: 'pointermove', end: 'pointerup'};
- else if (window.navigator.msPointerEnabled) s.touchEventsDesktop = {start: 'MSPointerDown', move: 'MSPointerMove', end: 'MSPointerUp'};
- s.touchEvents = {
- start : s.support.touch || !s.params.simulateTouch ? 'touchstart' : s.touchEventsDesktop.start,
- move : s.support.touch || !s.params.simulateTouch ? 'touchmove' : s.touchEventsDesktop.move,
- end : s.support.touch || !s.params.simulateTouch ? 'touchend' : s.touchEventsDesktop.end
- };
-
-
- // WP8 Touch Events Fix
- if (window.navigator.pointerEnabled || window.navigator.msPointerEnabled) {
- (s.params.touchEventsTarget === 'container' ? s.container : s.wrapper).addClass('swiper-wp8-' + s.params.direction);
- }
-
- // Attach/detach events
- s.initEvents = function (detach) {
- var actionDom = detach ? 'off' : 'on';
- var action = detach ? 'removeEventListener' : 'addEventListener';
- var touchEventsTarget = s.params.touchEventsTarget === 'container' ? s.container[0] : s.wrapper[0];
- var target = s.support.touch ? touchEventsTarget : document;
-
- var moveCapture = s.params.nested ? true : false;
-
- //Touch Events
- if (s.browser.ie) {
- touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, false);
- target[action](s.touchEvents.move, s.onTouchMove, moveCapture);
- target[action](s.touchEvents.end, s.onTouchEnd, false);
- }
- else {
- if (s.support.touch) {
- var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;
- touchEventsTarget[action](s.touchEvents.start, s.onTouchStart, passiveListener);
- touchEventsTarget[action](s.touchEvents.move, s.onTouchMove, moveCapture);
- touchEventsTarget[action](s.touchEvents.end, s.onTouchEnd, passiveListener);
- }
- if ((params.simulateTouch && !s.device.ios && !s.device.android) || (params.simulateTouch && !s.support.touch && s.device.ios)) {
- touchEventsTarget[action]('mousedown', s.onTouchStart, false);
- document[action]('mousemove', s.onTouchMove, moveCapture);
- document[action]('mouseup', s.onTouchEnd, false);
- }
- }
- window[action]('resize', s.onResize);
-
- // Next, Prev, Index
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- s.nextButton[actionDom]('click', s.onClickNext);
- if (s.params.a11y && s.a11y) s.nextButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- s.prevButton[actionDom]('click', s.onClickPrev);
- if (s.params.a11y && s.a11y) s.prevButton[actionDom]('keydown', s.a11y.onEnterKey);
- }
- if (s.params.pagination && s.params.paginationClickable) {
- s.paginationContainer[actionDom]('click', '.' + s.params.bulletClass, s.onClickIndex);
- if (s.params.a11y && s.a11y) s.paginationContainer[actionDom]('keydown', '.' + s.params.bulletClass, s.a11y.onEnterKey);
- }
-
- // Prevent Links Clicks
- if (s.params.preventClicks || s.params.preventClicksPropagation) touchEventsTarget[action]('click', s.preventClicks, true);
- };
- s.attachEvents = function () {
- s.initEvents();
- };
- s.detachEvents = function () {
- s.initEvents(true);
- };
-
- /*=========================
- Handle Clicks
- ===========================*/
- // Prevent Clicks
- s.allowClick = true;
- s.preventClicks = function (e) {
- if (!s.allowClick) {
- if (s.params.preventClicks) e.preventDefault();
- if (s.params.preventClicksPropagation && s.animating) {
- e.stopPropagation();
- e.stopImmediatePropagation();
- }
- }
- };
- // Clicks
- s.onClickNext = function (e) {
- e.preventDefault();
- if (s.isEnd && !s.params.loop) return;
- s.slideNext();
- };
- s.onClickPrev = function (e) {
- e.preventDefault();
- if (s.isBeginning && !s.params.loop) return;
- s.slidePrev();
- };
- s.onClickIndex = function (e) {
- e.preventDefault();
- var index = $(this).index() * s.params.slidesPerGroup;
- if (s.params.loop) index = index + s.loopedSlides;
- s.slideTo(index);
- };
-
- /*=========================
- Handle Touches
- ===========================*/
- function findElementInEvent(e, selector) {
- var el = $(e.target);
- if (!el.is(selector)) {
- if (typeof selector === 'string') {
- el = el.parents(selector);
- }
- else if (selector.nodeType) {
- var found;
- el.parents().each(function (index, _el) {
- if (_el === selector) found = selector;
- });
- if (!found) return undefined;
- else return selector;
- }
- }
- if (el.length === 0) {
- return undefined;
- }
- return el[0];
- }
- s.updateClickedSlide = function (e) {
- var slide = findElementInEvent(e, '.' + s.params.slideClass);
- var slideFound = false;
- if (slide) {
- for (var i = 0; i < s.slides.length; i++) {
- if (s.slides[i] === slide) slideFound = true;
- }
- }
-
- if (slide && slideFound) {
- s.clickedSlide = slide;
- s.clickedIndex = $(slide).index();
- }
- else {
- s.clickedSlide = undefined;
- s.clickedIndex = undefined;
- return;
- }
- if (s.params.slideToClickedSlide && s.clickedIndex !== undefined && s.clickedIndex !== s.activeIndex) {
- var slideToIndex = s.clickedIndex,
- realIndex,
- duplicatedSlides,
- slidesPerView = s.params.slidesPerView === 'auto' ? s.currentSlidesPerView() : s.params.slidesPerView;
- if (s.params.loop) {
- if (s.animating) return;
- realIndex = parseInt($(s.clickedSlide).attr('data-swiper-slide-index'), 10);
- if (s.params.centeredSlides) {
- if ((slideToIndex < s.loopedSlides - slidesPerView/2) || (slideToIndex > s.slides.length - s.loopedSlides + slidesPerView/2)) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();
- setTimeout(function () {
- s.slideTo(slideToIndex);
- }, 0);
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- else {
- if (slideToIndex > s.slides.length - slidesPerView) {
- s.fixLoop();
- slideToIndex = s.wrapper.children('.' + s.params.slideClass + '[data-swiper-slide-index="' + realIndex + '"]:not(.' + s.params.slideDuplicateClass + ')').eq(0).index();
- setTimeout(function () {
- s.slideTo(slideToIndex);
- }, 0);
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- }
- else {
- s.slideTo(slideToIndex);
- }
- }
- };
-
- var isTouched,
- isMoved,
- allowTouchCallbacks,
- touchStartTime,
- isScrolling,
- currentTranslate,
- startTranslate,
- allowThresholdMove,
- // Form elements to match
- formElements = 'input, select, textarea, button, video',
- // Last click time
- lastClickTime = Date.now(), clickTimeout,
- //Velocities
- velocities = [],
- allowMomentumBounce;
-
- // Animating Flag
- s.animating = false;
-
- // Touches information
- s.touches = {
- startX: 0,
- startY: 0,
- currentX: 0,
- currentY: 0,
- diff: 0
- };
-
- // Touch handlers
- var isTouchEvent, startMoving;
- s.onTouchStart = function (e) {
- if (e.originalEvent) e = e.originalEvent;
- isTouchEvent = e.type === 'touchstart';
- if (!isTouchEvent && 'which' in e && e.which === 3) return;
- if (s.params.noSwiping && findElementInEvent(e, '.' + s.params.noSwipingClass)) {
- s.allowClick = true;
- return;
- }
- if (s.params.swipeHandler) {
- if (!findElementInEvent(e, s.params.swipeHandler)) return;
- }
-
- var startX = s.touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
- var startY = s.touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
-
- // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
- if(s.device.ios && s.params.iOSEdgeSwipeDetection && startX <= s.params.iOSEdgeSwipeThreshold) {
- return;
- }
-
- isTouched = true;
- isMoved = false;
- allowTouchCallbacks = true;
- isScrolling = undefined;
- startMoving = undefined;
- s.touches.startX = startX;
- s.touches.startY = startY;
- touchStartTime = Date.now();
- s.allowClick = true;
- s.updateContainerSize();
- s.swipeDirection = undefined;
- if (s.params.threshold > 0) allowThresholdMove = false;
- if (e.type !== 'touchstart') {
- var preventDefault = true;
- if ($(e.target).is(formElements)) preventDefault = false;
- if (document.activeElement && $(document.activeElement).is(formElements)) {
- document.activeElement.blur();
- }
- if (preventDefault) {
- e.preventDefault();
- }
- }
- s.emit('onTouchStart', s, e);
- };
-
- s.onTouchMove = function (e) {
- if (e.originalEvent) e = e.originalEvent;
- if (isTouchEvent && e.type === 'mousemove') return;
- if (e.preventedByNestedSwiper) {
- s.touches.startX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
- s.touches.startY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
- return;
- }
- if (s.params.onlyExternal) {
- // isMoved = true;
- s.allowClick = false;
- if (isTouched) {
- s.touches.startX = s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
- s.touches.startY = s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
- touchStartTime = Date.now();
- }
- return;
- }
- if (isTouchEvent && s.params.touchReleaseOnEdges && !s.params.loop) {
- if (!s.isHorizontal()) {
- // Vertical
- if (
- (s.touches.currentY < s.touches.startY && s.translate <= s.maxTranslate()) ||
- (s.touches.currentY > s.touches.startY && s.translate >= s.minTranslate())
- ) {
- return;
- }
- }
- else {
- if (
- (s.touches.currentX < s.touches.startX && s.translate <= s.maxTranslate()) ||
- (s.touches.currentX > s.touches.startX && s.translate >= s.minTranslate())
- ) {
- return;
- }
- }
- }
- if (isTouchEvent && document.activeElement) {
- if (e.target === document.activeElement && $(e.target).is(formElements)) {
- isMoved = true;
- s.allowClick = false;
- return;
- }
- }
- if (allowTouchCallbacks) {
- s.emit('onTouchMove', s, e);
- }
- if (e.targetTouches && e.targetTouches.length > 1) return;
-
- s.touches.currentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
- s.touches.currentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
-
- if (typeof isScrolling === 'undefined') {
- var touchAngle;
- if (s.isHorizontal() && s.touches.currentY === s.touches.startY || !s.isHorizontal() && s.touches.currentX === s.touches.startX) {
- isScrolling = false;
- }
- else {
- touchAngle = Math.atan2(Math.abs(s.touches.currentY - s.touches.startY), Math.abs(s.touches.currentX - s.touches.startX)) * 180 / Math.PI;
- isScrolling = s.isHorizontal() ? touchAngle > s.params.touchAngle : (90 - touchAngle > s.params.touchAngle);
- }
- }
- if (isScrolling) {
- s.emit('onTouchMoveOpposite', s, e);
- }
- if (typeof startMoving === 'undefined') {
- if (s.touches.currentX !== s.touches.startX || s.touches.currentY !== s.touches.startY) {
- startMoving = true;
- }
- }
- if (!isTouched) return;
- if (isScrolling) {
- isTouched = false;
- return;
- }
- if (!startMoving) {
- return;
- }
- s.allowClick = false;
- s.emit('onSliderMove', s, e);
- e.preventDefault();
- if (s.params.touchMoveStopPropagation && !s.params.nested) {
- e.stopPropagation();
- }
-
- if (!isMoved) {
- if (params.loop) {
- s.fixLoop();
- }
- startTranslate = s.getWrapperTranslate();
- s.setWrapperTransition(0);
- if (s.animating) {
- s.wrapper.trigger('webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd');
- }
- if (s.params.autoplay && s.autoplaying) {
- if (s.params.autoplayDisableOnInteraction) {
- s.stopAutoplay();
- }
- else {
- s.pauseAutoplay();
- }
- }
- allowMomentumBounce = false;
- //Grab Cursor
- if (s.params.grabCursor && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {
- s.setGrabCursor(true);
- }
- }
- isMoved = true;
-
- var diff = s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;
-
- diff = diff * s.params.touchRatio;
- if (s.rtl) diff = -diff;
-
- s.swipeDirection = diff > 0 ? 'prev' : 'next';
- currentTranslate = diff + startTranslate;
-
- var disableParentSwiper = true;
- if ((diff > 0 && currentTranslate > s.minTranslate())) {
- disableParentSwiper = false;
- if (s.params.resistance) currentTranslate = s.minTranslate() - 1 + Math.pow(-s.minTranslate() + startTranslate + diff, s.params.resistanceRatio);
- }
- else if (diff < 0 && currentTranslate < s.maxTranslate()) {
- disableParentSwiper = false;
- if (s.params.resistance) currentTranslate = s.maxTranslate() + 1 - Math.pow(s.maxTranslate() - startTranslate - diff, s.params.resistanceRatio);
- }
-
- if (disableParentSwiper) {
- e.preventedByNestedSwiper = true;
- }
-
- // Directions locks
- if (!s.params.allowSwipeToNext && s.swipeDirection === 'next' && currentTranslate < startTranslate) {
- currentTranslate = startTranslate;
- }
- if (!s.params.allowSwipeToPrev && s.swipeDirection === 'prev' && currentTranslate > startTranslate) {
- currentTranslate = startTranslate;
- }
-
-
- // Threshold
- if (s.params.threshold > 0) {
- if (Math.abs(diff) > s.params.threshold || allowThresholdMove) {
- if (!allowThresholdMove) {
- allowThresholdMove = true;
- s.touches.startX = s.touches.currentX;
- s.touches.startY = s.touches.currentY;
- currentTranslate = startTranslate;
- s.touches.diff = s.isHorizontal() ? s.touches.currentX - s.touches.startX : s.touches.currentY - s.touches.startY;
- return;
- }
- }
- else {
- currentTranslate = startTranslate;
- return;
- }
- }
-
- if (!s.params.followFinger) return;
-
- // Update active index in free mode
- if (s.params.freeMode || s.params.watchSlidesProgress) {
- s.updateActiveIndex();
- }
- if (s.params.freeMode) {
- //Velocity
- if (velocities.length === 0) {
- velocities.push({
- position: s.touches[s.isHorizontal() ? 'startX' : 'startY'],
- time: touchStartTime
- });
- }
- velocities.push({
- position: s.touches[s.isHorizontal() ? 'currentX' : 'currentY'],
- time: (new window.Date()).getTime()
- });
- }
- // Update progress
- s.updateProgress(currentTranslate);
- // Update translate
- s.setWrapperTranslate(currentTranslate);
- };
- s.onTouchEnd = function (e) {
- if (e.originalEvent) e = e.originalEvent;
- if (allowTouchCallbacks) {
- s.emit('onTouchEnd', s, e);
- }
- allowTouchCallbacks = false;
- if (!isTouched) return;
- //Return Grab Cursor
- if (s.params.grabCursor && isMoved && isTouched && (s.params.allowSwipeToNext === true || s.params.allowSwipeToPrev === true)) {
- s.setGrabCursor(false);
- }
-
- // Time diff
- var touchEndTime = Date.now();
- var timeDiff = touchEndTime - touchStartTime;
-
- // Tap, doubleTap, Click
- if (s.allowClick) {
- s.updateClickedSlide(e);
- s.emit('onTap', s, e);
- if (timeDiff < 300 && (touchEndTime - lastClickTime) > 300) {
- if (clickTimeout) clearTimeout(clickTimeout);
- clickTimeout = setTimeout(function () {
- if (!s) return;
- if (s.params.paginationHide && s.paginationContainer.length > 0 && !$(e.target).hasClass(s.params.bulletClass)) {
- s.paginationContainer.toggleClass(s.params.paginationHiddenClass);
- }
- s.emit('onClick', s, e);
- }, 300);
-
- }
- if (timeDiff < 300 && (touchEndTime - lastClickTime) < 300) {
- if (clickTimeout) clearTimeout(clickTimeout);
- s.emit('onDoubleTap', s, e);
- }
- }
-
- lastClickTime = Date.now();
- setTimeout(function () {
- if (s) s.allowClick = true;
- }, 0);
-
- if (!isTouched || !isMoved || !s.swipeDirection || s.touches.diff === 0 || currentTranslate === startTranslate) {
- isTouched = isMoved = false;
- return;
- }
- isTouched = isMoved = false;
-
- var currentPos;
- if (s.params.followFinger) {
- currentPos = s.rtl ? s.translate : -s.translate;
- }
- else {
- currentPos = -currentTranslate;
- }
- if (s.params.freeMode) {
- if (currentPos < -s.minTranslate()) {
- s.slideTo(s.activeIndex);
- return;
- }
- else if (currentPos > -s.maxTranslate()) {
- if (s.slides.length < s.snapGrid.length) {
- s.slideTo(s.snapGrid.length - 1);
- }
- else {
- s.slideTo(s.slides.length - 1);
- }
- return;
- }
-
- if (s.params.freeModeMomentum) {
- if (velocities.length > 1) {
- var lastMoveEvent = velocities.pop(), velocityEvent = velocities.pop();
-
- var distance = lastMoveEvent.position - velocityEvent.position;
- var time = lastMoveEvent.time - velocityEvent.time;
- s.velocity = distance / time;
- s.velocity = s.velocity / 2;
- if (Math.abs(s.velocity) < s.params.freeModeMinimumVelocity) {
- s.velocity = 0;
- }
- // this implies that the user stopped moving a finger then released.
- // There would be no events with distance zero, so the last event is stale.
- if (time > 150 || (new window.Date().getTime() - lastMoveEvent.time) > 300) {
- s.velocity = 0;
- }
- } else {
- s.velocity = 0;
- }
- s.velocity = s.velocity * s.params.freeModeMomentumVelocityRatio;
-
- velocities.length = 0;
- var momentumDuration = 1000 * s.params.freeModeMomentumRatio;
- var momentumDistance = s.velocity * momentumDuration;
-
- var newPosition = s.translate + momentumDistance;
- if (s.rtl) newPosition = - newPosition;
- var doBounce = false;
- var afterBouncePosition;
- var bounceAmount = Math.abs(s.velocity) * 20 * s.params.freeModeMomentumBounceRatio;
- if (newPosition < s.maxTranslate()) {
- if (s.params.freeModeMomentumBounce) {
- if (newPosition + s.maxTranslate() < -bounceAmount) {
- newPosition = s.maxTranslate() - bounceAmount;
- }
- afterBouncePosition = s.maxTranslate();
- doBounce = true;
- allowMomentumBounce = true;
- }
- else {
- newPosition = s.maxTranslate();
- }
- }
- else if (newPosition > s.minTranslate()) {
- if (s.params.freeModeMomentumBounce) {
- if (newPosition - s.minTranslate() > bounceAmount) {
- newPosition = s.minTranslate() + bounceAmount;
- }
- afterBouncePosition = s.minTranslate();
- doBounce = true;
- allowMomentumBounce = true;
- }
- else {
- newPosition = s.minTranslate();
- }
- }
- else if (s.params.freeModeSticky) {
- var j = 0,
- nextSlide;
- for (j = 0; j < s.snapGrid.length; j += 1) {
- if (s.snapGrid[j] > -newPosition) {
- nextSlide = j;
- break;
- }
-
- }
- if (Math.abs(s.snapGrid[nextSlide] - newPosition) < Math.abs(s.snapGrid[nextSlide - 1] - newPosition) || s.swipeDirection === 'next') {
- newPosition = s.snapGrid[nextSlide];
- } else {
- newPosition = s.snapGrid[nextSlide - 1];
- }
- if (!s.rtl) newPosition = - newPosition;
- }
- //Fix duration
- if (s.velocity !== 0) {
- if (s.rtl) {
- momentumDuration = Math.abs((-newPosition - s.translate) / s.velocity);
- }
- else {
- momentumDuration = Math.abs((newPosition - s.translate) / s.velocity);
- }
- }
- else if (s.params.freeModeSticky) {
- s.slideReset();
- return;
- }
-
- if (s.params.freeModeMomentumBounce && doBounce) {
- s.updateProgress(afterBouncePosition);
- s.setWrapperTransition(momentumDuration);
- s.setWrapperTranslate(newPosition);
- s.onTransitionStart();
- s.animating = true;
- s.wrapper.transitionEnd(function () {
- if (!s || !allowMomentumBounce) return;
- s.emit('onMomentumBounce', s);
-
- s.setWrapperTransition(s.params.speed);
- s.setWrapperTranslate(afterBouncePosition);
- s.wrapper.transitionEnd(function () {
- if (!s) return;
- s.onTransitionEnd();
- });
- });
- } else if (s.velocity) {
- s.updateProgress(newPosition);
- s.setWrapperTransition(momentumDuration);
- s.setWrapperTranslate(newPosition);
- s.onTransitionStart();
- if (!s.animating) {
- s.animating = true;
- s.wrapper.transitionEnd(function () {
- if (!s) return;
- s.onTransitionEnd();
- });
- }
-
- } else {
- s.updateProgress(newPosition);
- }
-
- s.updateActiveIndex();
- }
- if (!s.params.freeModeMomentum || timeDiff >= s.params.longSwipesMs) {
- s.updateProgress();
- s.updateActiveIndex();
- }
- return;
- }
-
- // Find current slide
- var i, stopIndex = 0, groupSize = s.slidesSizesGrid[0];
- for (i = 0; i < s.slidesGrid.length; i += s.params.slidesPerGroup) {
- if (typeof s.slidesGrid[i + s.params.slidesPerGroup] !== 'undefined') {
- if (currentPos >= s.slidesGrid[i] && currentPos < s.slidesGrid[i + s.params.slidesPerGroup]) {
- stopIndex = i;
- groupSize = s.slidesGrid[i + s.params.slidesPerGroup] - s.slidesGrid[i];
- }
- }
- else {
- if (currentPos >= s.slidesGrid[i]) {
- stopIndex = i;
- groupSize = s.slidesGrid[s.slidesGrid.length - 1] - s.slidesGrid[s.slidesGrid.length - 2];
- }
- }
- }
-
- // Find current slide size
- var ratio = (currentPos - s.slidesGrid[stopIndex]) / groupSize;
-
- if (timeDiff > s.params.longSwipesMs) {
- // Long touches
- if (!s.params.longSwipes) {
- s.slideTo(s.activeIndex);
- return;
- }
- if (s.swipeDirection === 'next') {
- if (ratio >= s.params.longSwipesRatio) s.slideTo(stopIndex + s.params.slidesPerGroup);
- else s.slideTo(stopIndex);
-
- }
- if (s.swipeDirection === 'prev') {
- if (ratio > (1 - s.params.longSwipesRatio)) s.slideTo(stopIndex + s.params.slidesPerGroup);
- else s.slideTo(stopIndex);
- }
- }
- else {
- // Short swipes
- if (!s.params.shortSwipes) {
- s.slideTo(s.activeIndex);
- return;
- }
- if (s.swipeDirection === 'next') {
- s.slideTo(stopIndex + s.params.slidesPerGroup);
-
- }
- if (s.swipeDirection === 'prev') {
- s.slideTo(stopIndex);
- }
- }
- };
- /*=========================
- Transitions
- ===========================*/
- s._slideTo = function (slideIndex, speed) {
- return s.slideTo(slideIndex, speed, true, true);
- };
- s.slideTo = function (slideIndex, speed, runCallbacks, internal) {
- if (typeof runCallbacks === 'undefined') runCallbacks = true;
- if (typeof slideIndex === 'undefined') slideIndex = 0;
- if (slideIndex < 0) slideIndex = 0;
- s.snapIndex = Math.floor(slideIndex / s.params.slidesPerGroup);
- if (s.snapIndex >= s.snapGrid.length) s.snapIndex = s.snapGrid.length - 1;
-
- var translate = - s.snapGrid[s.snapIndex];
- // Stop autoplay
- if (s.params.autoplay && s.autoplaying) {
- if (internal || !s.params.autoplayDisableOnInteraction) {
- s.pauseAutoplay(speed);
- }
- else {
- s.stopAutoplay();
- }
- }
- // Update progress
- s.updateProgress(translate);
-
- // Normalize slideIndex
- if(s.params.normalizeSlideIndex){
- for (var i = 0; i < s.slidesGrid.length; i++) {
- if (- Math.floor(translate * 100) >= Math.floor(s.slidesGrid[i] * 100)) {
- slideIndex = i;
- }
- }
- }
-
- // Directions locks
- if (!s.params.allowSwipeToNext && translate < s.translate && translate < s.minTranslate()) {
- return false;
- }
- if (!s.params.allowSwipeToPrev && translate > s.translate && translate > s.maxTranslate()) {
- if ((s.activeIndex || 0) !== slideIndex ) return false;
- }
-
- // Update Index
- if (typeof speed === 'undefined') speed = s.params.speed;
- s.previousIndex = s.activeIndex || 0;
- s.activeIndex = slideIndex;
- s.updateRealIndex();
- if ((s.rtl && -translate === s.translate) || (!s.rtl && translate === s.translate)) {
- // Update Height
- if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- s.updateClasses();
- if (s.params.effect !== 'slide') {
- s.setWrapperTranslate(translate);
- }
- return false;
- }
- s.updateClasses();
- s.onTransitionStart(runCallbacks);
-
- if (speed === 0 || s.browser.lteIE9) {
- s.setWrapperTranslate(translate);
- s.setWrapperTransition(0);
- s.onTransitionEnd(runCallbacks);
- }
- else {
- s.setWrapperTranslate(translate);
- s.setWrapperTransition(speed);
- if (!s.animating) {
- s.animating = true;
- s.wrapper.transitionEnd(function () {
- if (!s) return;
- s.onTransitionEnd(runCallbacks);
- });
- }
-
- }
-
- return true;
- };
-
- s.onTransitionStart = function (runCallbacks) {
- if (typeof runCallbacks === 'undefined') runCallbacks = true;
- if (s.params.autoHeight) {
- s.updateAutoHeight();
- }
- if (s.lazy) s.lazy.onTransitionStart();
- if (runCallbacks) {
- s.emit('onTransitionStart', s);
- if (s.activeIndex !== s.previousIndex) {
- s.emit('onSlideChangeStart', s);
- if (s.activeIndex > s.previousIndex) {
- s.emit('onSlideNextStart', s);
- }
- else {
- s.emit('onSlidePrevStart', s);
- }
- }
-
- }
- };
- s.onTransitionEnd = function (runCallbacks) {
- s.animating = false;
- s.setWrapperTransition(0);
- if (typeof runCallbacks === 'undefined') runCallbacks = true;
- if (s.lazy) s.lazy.onTransitionEnd();
- if (runCallbacks) {
- s.emit('onTransitionEnd', s);
- if (s.activeIndex !== s.previousIndex) {
- s.emit('onSlideChangeEnd', s);
- if (s.activeIndex > s.previousIndex) {
- s.emit('onSlideNextEnd', s);
- }
- else {
- s.emit('onSlidePrevEnd', s);
- }
- }
- }
- if (s.params.history && s.history) {
- s.history.setHistory(s.params.history, s.activeIndex);
- }
- if (s.params.hashnav && s.hashnav) {
- s.hashnav.setHash();
- }
-
- };
- s.slideNext = function (runCallbacks, speed, internal) {
- if (s.params.loop) {
- if (s.animating) return false;
- s.fixLoop();
- var clientLeft = s.container[0].clientLeft;
- return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);
- }
- else return s.slideTo(s.activeIndex + s.params.slidesPerGroup, speed, runCallbacks, internal);
- };
- s._slideNext = function (speed) {
- return s.slideNext(true, speed, true);
- };
- s.slidePrev = function (runCallbacks, speed, internal) {
- if (s.params.loop) {
- if (s.animating) return false;
- s.fixLoop();
- var clientLeft = s.container[0].clientLeft;
- return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);
- }
- else return s.slideTo(s.activeIndex - 1, speed, runCallbacks, internal);
- };
- s._slidePrev = function (speed) {
- return s.slidePrev(true, speed, true);
- };
- s.slideReset = function (runCallbacks, speed, internal) {
- return s.slideTo(s.activeIndex, speed, runCallbacks);
- };
-
- s.disableTouchControl = function () {
- s.params.onlyExternal = true;
- return true;
- };
- s.enableTouchControl = function () {
- s.params.onlyExternal = false;
- return true;
- };
-
- /*=========================
- Translate/transition helpers
- ===========================*/
- s.setWrapperTransition = function (duration, byController) {
- s.wrapper.transition(duration);
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTransition(duration);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTransition(duration);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTransition(duration);
- }
- if (s.params.control && s.controller) {
- s.controller.setTransition(duration, byController);
- }
- s.emit('onSetTransition', s, duration);
- };
- s.setWrapperTranslate = function (translate, updateActiveIndex, byController) {
- var x = 0, y = 0, z = 0;
- if (s.isHorizontal()) {
- x = s.rtl ? -translate : translate;
- }
- else {
- y = translate;
- }
-
- if (s.params.roundLengths) {
- x = round(x);
- y = round(y);
- }
-
- if (!s.params.virtualTranslate) {
- if (s.support.transforms3d) s.wrapper.transform('translate3d(' + x + 'px, ' + y + 'px, ' + z + 'px)');
- else s.wrapper.transform('translate(' + x + 'px, ' + y + 'px)');
- }
-
- s.translate = s.isHorizontal() ? x : y;
-
- // Check if we need to update progress
- var progress;
- var translatesDiff = s.maxTranslate() - s.minTranslate();
- if (translatesDiff === 0) {
- progress = 0;
- }
- else {
- progress = (translate - s.minTranslate()) / (translatesDiff);
- }
- if (progress !== s.progress) {
- s.updateProgress(translate);
- }
-
- if (updateActiveIndex) s.updateActiveIndex();
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- s.effects[s.params.effect].setTranslate(s.translate);
- }
- if (s.params.parallax && s.parallax) {
- s.parallax.setTranslate(s.translate);
- }
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.setTranslate(s.translate);
- }
- if (s.params.control && s.controller) {
- s.controller.setTranslate(s.translate, byController);
- }
- s.emit('onSetTranslate', s, s.translate);
- };
-
- s.getTranslate = function (el, axis) {
- var matrix, curTransform, curStyle, transformMatrix;
-
- // automatic axis detection
- if (typeof axis === 'undefined') {
- axis = 'x';
- }
-
- if (s.params.virtualTranslate) {
- return s.rtl ? -s.translate : s.translate;
- }
-
- curStyle = window.getComputedStyle(el, null);
- if (window.WebKitCSSMatrix) {
- curTransform = curStyle.transform || curStyle.webkitTransform;
- if (curTransform.split(',').length > 6) {
- curTransform = curTransform.split(', ').map(function(a){
- return a.replace(',','.');
- }).join(', ');
- }
- // Some old versions of Webkit choke when 'none' is passed; pass
- // empty string instead in this case
- transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
- }
- else {
- transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
- matrix = transformMatrix.toString().split(',');
- }
-
- if (axis === 'x') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m41;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[12]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[4]);
- }
- if (axis === 'y') {
- //Latest Chrome and webkits Fix
- if (window.WebKitCSSMatrix)
- curTransform = transformMatrix.m42;
- //Crazy IE10 Matrix
- else if (matrix.length === 16)
- curTransform = parseFloat(matrix[13]);
- //Normal Browsers
- else
- curTransform = parseFloat(matrix[5]);
- }
- if (s.rtl && curTransform) curTransform = -curTransform;
- return curTransform || 0;
- };
- s.getWrapperTranslate = function (axis) {
- if (typeof axis === 'undefined') {
- axis = s.isHorizontal() ? 'x' : 'y';
- }
- return s.getTranslate(s.wrapper[0], axis);
- };
-
- /*=========================
- Observer
- ===========================*/
- s.observers = [];
- function initObserver(target, options) {
- options = options || {};
- // create an observer instance
- var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
- var observer = new ObserverFunc(function (mutations) {
- mutations.forEach(function (mutation) {
- s.onResize(true);
- s.emit('onObserverUpdate', s, mutation);
- });
- });
-
- observer.observe(target, {
- attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
- childList: typeof options.childList === 'undefined' ? true : options.childList,
- characterData: typeof options.characterData === 'undefined' ? true : options.characterData
- });
-
- s.observers.push(observer);
- }
- s.initObservers = function () {
- if (s.params.observeParents) {
- var containerParents = s.container.parents();
- for (var i = 0; i < containerParents.length; i++) {
- initObserver(containerParents[i]);
- }
- }
-
- // Observe container
- initObserver(s.container[0], {childList: false});
-
- // Observe wrapper
- initObserver(s.wrapper[0], {attributes: false});
- };
- s.disconnectObservers = function () {
- for (var i = 0; i < s.observers.length; i++) {
- s.observers[i].disconnect();
- }
- s.observers = [];
- };
- /*=========================
- Loop
- ===========================*/
- // Create looped slides
- s.createLoop = function () {
- // Remove duplicated slides
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
-
- var slides = s.wrapper.children('.' + s.params.slideClass);
-
- if(s.params.slidesPerView === 'auto' && !s.params.loopedSlides) s.params.loopedSlides = slides.length;
-
- s.loopedSlides = parseInt(s.params.loopedSlides || s.params.slidesPerView, 10);
- s.loopedSlides = s.loopedSlides + s.params.loopAdditionalSlides;
- if (s.loopedSlides > slides.length) {
- s.loopedSlides = slides.length;
- }
-
- var prependSlides = [], appendSlides = [], i;
- slides.each(function (index, el) {
- var slide = $(this);
- if (index < s.loopedSlides) appendSlides.push(el);
- if (index < slides.length && index >= slides.length - s.loopedSlides) prependSlides.push(el);
- slide.attr('data-swiper-slide-index', index);
- });
- for (i = 0; i < appendSlides.length; i++) {
- s.wrapper.append($(appendSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- for (i = prependSlides.length - 1; i >= 0; i--) {
- s.wrapper.prepend($(prependSlides[i].cloneNode(true)).addClass(s.params.slideDuplicateClass));
- }
- };
- s.destroyLoop = function () {
- s.wrapper.children('.' + s.params.slideClass + '.' + s.params.slideDuplicateClass).remove();
- s.slides.removeAttr('data-swiper-slide-index');
- };
- s.reLoop = function (updatePosition) {
- var oldIndex = s.activeIndex - s.loopedSlides;
- s.destroyLoop();
- s.createLoop();
- s.updateSlidesSize();
- if (updatePosition) {
- s.slideTo(oldIndex + s.loopedSlides, 0, false);
- }
-
- };
- s.fixLoop = function () {
- var newIndex;
- //Fix For Negative Oversliding
- if (s.activeIndex < s.loopedSlides) {
- newIndex = s.slides.length - s.loopedSlides * 3 + s.activeIndex;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- //Fix For Positive Oversliding
- else if ((s.params.slidesPerView === 'auto' && s.activeIndex >= s.loopedSlides * 2) || (s.activeIndex > s.slides.length - s.params.slidesPerView * 2)) {
- newIndex = -s.slides.length + s.activeIndex + s.loopedSlides;
- newIndex = newIndex + s.loopedSlides;
- s.slideTo(newIndex, 0, false, true);
- }
- };
- /*=========================
- Append/Prepend/Remove Slides
- ===========================*/
- s.appendSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.append(slides[i]);
- }
- }
- else {
- s.wrapper.append(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- };
- s.prependSlide = function (slides) {
- if (s.params.loop) {
- s.destroyLoop();
- }
- var newActiveIndex = s.activeIndex + 1;
- if (typeof slides === 'object' && slides.length) {
- for (var i = 0; i < slides.length; i++) {
- if (slides[i]) s.wrapper.prepend(slides[i]);
- }
- newActiveIndex = s.activeIndex + slides.length;
- }
- else {
- s.wrapper.prepend(slides);
- }
- if (s.params.loop) {
- s.createLoop();
- }
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- s.slideTo(newActiveIndex, 0, false);
- };
- s.removeSlide = function (slidesIndexes) {
- if (s.params.loop) {
- s.destroyLoop();
- s.slides = s.wrapper.children('.' + s.params.slideClass);
- }
- var newActiveIndex = s.activeIndex,
- indexToRemove;
- if (typeof slidesIndexes === 'object' && slidesIndexes.length) {
- for (var i = 0; i < slidesIndexes.length; i++) {
- indexToRemove = slidesIndexes[i];
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- }
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
- else {
- indexToRemove = slidesIndexes;
- if (s.slides[indexToRemove]) s.slides.eq(indexToRemove).remove();
- if (indexToRemove < newActiveIndex) newActiveIndex--;
- newActiveIndex = Math.max(newActiveIndex, 0);
- }
-
- if (s.params.loop) {
- s.createLoop();
- }
-
- if (!(s.params.observer && s.support.observer)) {
- s.update(true);
- }
- if (s.params.loop) {
- s.slideTo(newActiveIndex + s.loopedSlides, 0, false);
- }
- else {
- s.slideTo(newActiveIndex, 0, false);
- }
-
- };
- s.removeAllSlides = function () {
- var slidesIndexes = [];
- for (var i = 0; i < s.slides.length; i++) {
- slidesIndexes.push(i);
- }
- s.removeSlide(slidesIndexes);
- };
-
-
- /*=========================
- Effects
- ===========================*/
- s.effects = {
- fade: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var offset = slide[0].swiperSlideOffset;
- var tx = -offset;
- if (!s.params.virtualTranslate) tx = tx - s.translate;
- var ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
- var slideOpacity = s.params.fade.crossFade ?
- Math.max(1 - Math.abs(slide[0].progress), 0) :
- 1 + Math.min(Math.max(slide[0].progress, -1), 0);
- slide
- .css({
- opacity: slideOpacity
- })
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px)');
-
- }
-
- },
- setTransition: function (duration) {
- s.slides.transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- flip: {
- setTranslate: function () {
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var progress = slide[0].progress;
- if (s.params.flip.limitRotation) {
- progress = Math.max(Math.min(slide[0].progress, 1), -1);
- }
- var offset = slide[0].swiperSlideOffset;
- var rotate = -180 * progress,
- rotateY = rotate,
- rotateX = 0,
- tx = -offset,
- ty = 0;
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- rotateX = -rotateY;
- rotateY = 0;
- }
- else if (s.rtl) {
- rotateY = -rotateY;
- }
-
- slide[0].style.zIndex = -Math.abs(Math.round(progress)) + s.slides.length;
-
- if (s.params.flip.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'left' : 'top') + '"></div>');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'right' : 'bottom') + '"></div>');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
-
- slide
- .transform('translate3d(' + tx + 'px, ' + ty + 'px, 0px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)');
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.virtualTranslate && duration !== 0) {
- var eventTriggered = false;
- s.slides.eq(s.activeIndex).transitionEnd(function () {
- if (eventTriggered) return;
- if (!s) return;
- if (!$(this).hasClass(s.params.slideActiveClass)) return;
- eventTriggered = true;
- s.animating = false;
- var triggerEvents = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'];
- for (var i = 0; i < triggerEvents.length; i++) {
- s.wrapper.trigger(triggerEvents[i]);
- }
- });
- }
- }
- },
- cube: {
- setTranslate: function () {
- var wrapperRotate = 0, cubeShadow;
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow = s.wrapper.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('<div class="swiper-cube-shadow"></div>');
- s.wrapper.append(cubeShadow);
- }
- cubeShadow.css({height: s.width + 'px'});
- }
- else {
- cubeShadow = s.container.find('.swiper-cube-shadow');
- if (cubeShadow.length === 0) {
- cubeShadow = $('<div class="swiper-cube-shadow"></div>');
- s.container.append(cubeShadow);
- }
- }
- }
- for (var i = 0; i < s.slides.length; i++) {
- var slide = s.slides.eq(i);
- var slideAngle = i * 90;
- var round = Math.floor(slideAngle / 360);
- if (s.rtl) {
- slideAngle = -slideAngle;
- round = Math.floor(-slideAngle / 360);
- }
- var progress = Math.max(Math.min(slide[0].progress, 1), -1);
- var tx = 0, ty = 0, tz = 0;
- if (i % 4 === 0) {
- tx = - round * 4 * s.size;
- tz = 0;
- }
- else if ((i - 1) % 4 === 0) {
- tx = 0;
- tz = - round * 4 * s.size;
- }
- else if ((i - 2) % 4 === 0) {
- tx = s.size + round * 4 * s.size;
- tz = s.size;
- }
- else if ((i - 3) % 4 === 0) {
- tx = - s.size;
- tz = 3 * s.size + s.size * 4 * round;
- }
- if (s.rtl) {
- tx = -tx;
- }
-
- if (!s.isHorizontal()) {
- ty = tx;
- tx = 0;
- }
-
- var transform = 'rotateX(' + (s.isHorizontal() ? 0 : -slideAngle) + 'deg) rotateY(' + (s.isHorizontal() ? slideAngle : 0) + 'deg) translate3d(' + tx + 'px, ' + ty + 'px, ' + tz + 'px)';
- if (progress <= 1 && progress > -1) {
- wrapperRotate = i * 90 + progress * 90;
- if (s.rtl) wrapperRotate = -i * 90 - progress * 90;
- }
- slide.transform(transform);
- if (s.params.cube.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'left' : 'top') + '"></div>');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'right' : 'bottom') + '"></div>');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
- if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
- }
- }
- s.wrapper.css({
- '-webkit-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-moz-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- '-ms-transform-origin': '50% 50% -' + (s.size / 2) + 'px',
- 'transform-origin': '50% 50% -' + (s.size / 2) + 'px'
- });
-
- if (s.params.cube.shadow) {
- if (s.isHorizontal()) {
- cubeShadow.transform('translate3d(0px, ' + (s.width / 2 + s.params.cube.shadowOffset) + 'px, ' + (-s.width / 2) + 'px) rotateX(90deg) rotateZ(0deg) scale(' + (s.params.cube.shadowScale) + ')');
- }
- else {
- var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
- var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
- var scale1 = s.params.cube.shadowScale,
- scale2 = s.params.cube.shadowScale / multiplier,
- offset = s.params.cube.shadowOffset;
- cubeShadow.transform('scale3d(' + scale1 + ', 1, ' + scale2 + ') translate3d(0px, ' + (s.height / 2 + offset) + 'px, ' + (-s.height / 2 / scale2) + 'px) rotateX(-90deg)');
- }
- }
- var zFactor = (s.isSafari || s.isUiWebView) ? (-s.size / 2) : 0;
- s.wrapper.transform('translate3d(0px,0,' + zFactor + 'px) rotateX(' + (s.isHorizontal() ? 0 : wrapperRotate) + 'deg) rotateY(' + (s.isHorizontal() ? -wrapperRotate : 0) + 'deg)');
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- if (s.params.cube.shadow && !s.isHorizontal()) {
- s.container.find('.swiper-cube-shadow').transition(duration);
- }
- }
- },
- coverflow: {
- setTranslate: function () {
- var transform = s.translate;
- var center = s.isHorizontal() ? -transform + s.width / 2 : -transform + s.height / 2;
- var rotate = s.isHorizontal() ? s.params.coverflow.rotate: -s.params.coverflow.rotate;
- var translate = s.params.coverflow.depth;
- //Each slide offset from center
- for (var i = 0, length = s.slides.length; i < length; i++) {
- var slide = s.slides.eq(i);
- var slideSize = s.slidesSizesGrid[i];
- var slideOffset = slide[0].swiperSlideOffset;
- var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * s.params.coverflow.modifier;
-
- var rotateY = s.isHorizontal() ? rotate * offsetMultiplier : 0;
- var rotateX = s.isHorizontal() ? 0 : rotate * offsetMultiplier;
- // var rotateZ = 0
- var translateZ = -translate * Math.abs(offsetMultiplier);
-
- var translateY = s.isHorizontal() ? 0 : s.params.coverflow.stretch * (offsetMultiplier);
- var translateX = s.isHorizontal() ? s.params.coverflow.stretch * (offsetMultiplier) : 0;
-
- //Fix for ultra small values
- if (Math.abs(translateX) < 0.001) translateX = 0;
- if (Math.abs(translateY) < 0.001) translateY = 0;
- if (Math.abs(translateZ) < 0.001) translateZ = 0;
- if (Math.abs(rotateY) < 0.001) rotateY = 0;
- if (Math.abs(rotateX) < 0.001) rotateX = 0;
-
- var slideTransform = 'translate3d(' + translateX + 'px,' + translateY + 'px,' + translateZ + 'px) rotateX(' + rotateX + 'deg) rotateY(' + rotateY + 'deg)';
-
- slide.transform(slideTransform);
- slide[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
- if (s.params.coverflow.slideShadows) {
- //Set shadows
- var shadowBefore = s.isHorizontal() ? slide.find('.swiper-slide-shadow-left') : slide.find('.swiper-slide-shadow-top');
- var shadowAfter = s.isHorizontal() ? slide.find('.swiper-slide-shadow-right') : slide.find('.swiper-slide-shadow-bottom');
- if (shadowBefore.length === 0) {
- shadowBefore = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'left' : 'top') + '"></div>');
- slide.append(shadowBefore);
- }
- if (shadowAfter.length === 0) {
- shadowAfter = $('<div class="swiper-slide-shadow-' + (s.isHorizontal() ? 'right' : 'bottom') + '"></div>');
- slide.append(shadowAfter);
- }
- if (shadowBefore.length) shadowBefore[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
- if (shadowAfter.length) shadowAfter[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0;
- }
- }
-
- //Set correct perspective for IE10
- if (s.browser.ie) {
- var ws = s.wrapper[0].style;
- ws.perspectiveOrigin = center + 'px 50%';
- }
- },
- setTransition: function (duration) {
- s.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
- }
- }
- };
-
-
- /*=========================
- Images Lazy Loading
- ===========================*/
- s.lazy = {
- initialImageLoaded: false,
- loadImageInSlide: function (index, loadInDuplicate) {
- if (typeof index === 'undefined') return;
- if (typeof loadInDuplicate === 'undefined') loadInDuplicate = true;
- if (s.slides.length === 0) return;
-
- var slide = s.slides.eq(index);
- var img = slide.find('.' + s.params.lazyLoadingClass + ':not(.' + s.params.lazyStatusLoadedClass + '):not(.' + s.params.lazyStatusLoadingClass + ')');
- if (slide.hasClass(s.params.lazyLoadingClass) && !slide.hasClass(s.params.lazyStatusLoadedClass) && !slide.hasClass(s.params.lazyStatusLoadingClass)) {
- img = img.add(slide[0]);
- }
- if (img.length === 0) return;
-
- img.each(function () {
- var _img = $(this);
- _img.addClass(s.params.lazyStatusLoadingClass);
- var background = _img.attr('data-background');
- var src = _img.attr('data-src'),
- srcset = _img.attr('data-srcset'),
- sizes = _img.attr('data-sizes');
- s.loadImage(_img[0], (src || background), srcset, sizes, false, function () {
- if (typeof s === 'undefined' || s === null || !s) return;
- if (background) {
- _img.css('background-image', 'url("' + background + '")');
- _img.removeAttr('data-background');
- }
- else {
- if (srcset) {
- _img.attr('srcset', srcset);
- _img.removeAttr('data-srcset');
- }
- if (sizes) {
- _img.attr('sizes', sizes);
- _img.removeAttr('data-sizes');
- }
- if (src) {
- _img.attr('src', src);
- _img.removeAttr('data-src');
- }
-
- }
-
- _img.addClass(s.params.lazyStatusLoadedClass).removeClass(s.params.lazyStatusLoadingClass);
- slide.find('.' + s.params.lazyPreloaderClass + ', .' + s.params.preloaderClass).remove();
- if (s.params.loop && loadInDuplicate) {
- var slideOriginalIndex = slide.attr('data-swiper-slide-index');
- if (slide.hasClass(s.params.slideDuplicateClass)) {
- var originalSlide = s.wrapper.children('[data-swiper-slide-index="' + slideOriginalIndex + '"]:not(.' + s.params.slideDuplicateClass + ')');
- s.lazy.loadImageInSlide(originalSlide.index(), false);
- }
- else {
- var duplicatedSlide = s.wrapper.children('.' + s.params.slideDuplicateClass + '[data-swiper-slide-index="' + slideOriginalIndex + '"]');
- s.lazy.loadImageInSlide(duplicatedSlide.index(), false);
- }
- }
- s.emit('onLazyImageReady', s, slide[0], _img[0]);
- });
-
- s.emit('onLazyImageLoad', s, slide[0], _img[0]);
- });
-
- },
- load: function () {
- var i;
- var slidesPerView = s.params.slidesPerView;
- if (slidesPerView === 'auto') {
- slidesPerView = 0;
- }
- if (!s.lazy.initialImageLoaded) s.lazy.initialImageLoaded = true;
- if (s.params.watchSlidesVisibility) {
- s.wrapper.children('.' + s.params.slideVisibleClass).each(function () {
- s.lazy.loadImageInSlide($(this).index());
- });
- }
- else {
- if (slidesPerView > 1) {
- for (i = s.activeIndex; i < s.activeIndex + slidesPerView ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- s.lazy.loadImageInSlide(s.activeIndex);
- }
- }
- if (s.params.lazyLoadingInPrevNext) {
- if (slidesPerView > 1 || (s.params.lazyLoadingInPrevNextAmount && s.params.lazyLoadingInPrevNextAmount > 1)) {
- var amount = s.params.lazyLoadingInPrevNextAmount;
- var spv = slidesPerView;
- var maxIndex = Math.min(s.activeIndex + spv + Math.max(amount, spv), s.slides.length);
- var minIndex = Math.max(s.activeIndex - Math.max(spv, amount), 0);
- // Next Slides
- for (i = s.activeIndex + slidesPerView; i < maxIndex; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- // Prev Slides
- for (i = minIndex; i < s.activeIndex ; i++) {
- if (s.slides[i]) s.lazy.loadImageInSlide(i);
- }
- }
- else {
- var nextSlide = s.wrapper.children('.' + s.params.slideNextClass);
- if (nextSlide.length > 0) s.lazy.loadImageInSlide(nextSlide.index());
-
- var prevSlide = s.wrapper.children('.' + s.params.slidePrevClass);
- if (prevSlide.length > 0) s.lazy.loadImageInSlide(prevSlide.index());
- }
- }
- },
- onTransitionStart: function () {
- if (s.params.lazyLoading) {
- if (s.params.lazyLoadingOnTransitionStart || (!s.params.lazyLoadingOnTransitionStart && !s.lazy.initialImageLoaded)) {
- s.lazy.load();
- }
- }
- },
- onTransitionEnd: function () {
- if (s.params.lazyLoading && !s.params.lazyLoadingOnTransitionStart) {
- s.lazy.load();
- }
- }
- };
-
-
- /*=========================
- Scrollbar
- ===========================*/
- s.scrollbar = {
- isTouched: false,
- setDragPosition: function (e) {
- var sb = s.scrollbar;
- var x = 0, y = 0;
- var translate;
- var pointerPosition = s.isHorizontal() ?
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX) :
- ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY) ;
- var position = (pointerPosition) - sb.track.offset()[s.isHorizontal() ? 'left' : 'top'] - sb.dragSize / 2;
- var positionMin = -s.minTranslate() * sb.moveDivider;
- var positionMax = -s.maxTranslate() * sb.moveDivider;
- if (position < positionMin) {
- position = positionMin;
- }
- else if (position > positionMax) {
- position = positionMax;
- }
- position = -position / sb.moveDivider;
- s.updateProgress(position);
- s.setWrapperTranslate(position, true);
- },
- dragStart: function (e) {
- var sb = s.scrollbar;
- sb.isTouched = true;
- e.preventDefault();
- e.stopPropagation();
-
- sb.setDragPosition(e);
- clearTimeout(sb.dragTimeout);
-
- sb.track.transition(0);
- if (s.params.scrollbarHide) {
- sb.track.css('opacity', 1);
- }
- s.wrapper.transition(100);
- sb.drag.transition(100);
- s.emit('onScrollbarDragStart', s);
- },
- dragMove: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- sb.setDragPosition(e);
- s.wrapper.transition(0);
- sb.track.transition(0);
- sb.drag.transition(0);
- s.emit('onScrollbarDragMove', s);
- },
- dragEnd: function (e) {
- var sb = s.scrollbar;
- if (!sb.isTouched) return;
- sb.isTouched = false;
- if (s.params.scrollbarHide) {
- clearTimeout(sb.dragTimeout);
- sb.dragTimeout = setTimeout(function () {
- sb.track.css('opacity', 0);
- sb.track.transition(400);
- }, 1000);
-
- }
- s.emit('onScrollbarDragEnd', s);
- if (s.params.scrollbarSnapOnRelease) {
- s.slideReset();
- }
- },
- draggableEvents: (function () {
- if ((s.params.simulateTouch === false && !s.support.touch)) return s.touchEventsDesktop;
- else return s.touchEvents;
- })(),
- enableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).on(sb.draggableEvents.start, sb.dragStart);
- $(target).on(sb.draggableEvents.move, sb.dragMove);
- $(target).on(sb.draggableEvents.end, sb.dragEnd);
- },
- disableDraggable: function () {
- var sb = s.scrollbar;
- var target = s.support.touch ? sb.track : document;
- $(sb.track).off(sb.draggableEvents.start, sb.dragStart);
- $(target).off(sb.draggableEvents.move, sb.dragMove);
- $(target).off(sb.draggableEvents.end, sb.dragEnd);
- },
- set: function () {
- if (!s.params.scrollbar) return;
- var sb = s.scrollbar;
- sb.track = $(s.params.scrollbar);
- if (s.params.uniqueNavElements && typeof s.params.scrollbar === 'string' && sb.track.length > 1 && s.container.find(s.params.scrollbar).length === 1) {
- sb.track = s.container.find(s.params.scrollbar);
- }
- sb.drag = sb.track.find('.swiper-scrollbar-drag');
- if (sb.drag.length === 0) {
- sb.drag = $('<div class="swiper-scrollbar-drag"></div>');
- sb.track.append(sb.drag);
- }
- sb.drag[0].style.width = '';
- sb.drag[0].style.height = '';
- sb.trackSize = s.isHorizontal() ? sb.track[0].offsetWidth : sb.track[0].offsetHeight;
-
- sb.divider = s.size / s.virtualSize;
- sb.moveDivider = sb.divider * (sb.trackSize / s.size);
- sb.dragSize = sb.trackSize * sb.divider;
-
- if (s.isHorizontal()) {
- sb.drag[0].style.width = sb.dragSize + 'px';
- }
- else {
- sb.drag[0].style.height = sb.dragSize + 'px';
- }
-
- if (sb.divider >= 1) {
- sb.track[0].style.display = 'none';
- }
- else {
- sb.track[0].style.display = '';
- }
- if (s.params.scrollbarHide) {
- sb.track[0].style.opacity = 0;
- }
- },
- setTranslate: function () {
- if (!s.params.scrollbar) return;
- var diff;
- var sb = s.scrollbar;
- var translate = s.translate || 0;
- var newPos;
-
- var newSize = sb.dragSize;
- newPos = (sb.trackSize - sb.dragSize) * s.progress;
- if (s.rtl && s.isHorizontal()) {
- newPos = -newPos;
- if (newPos > 0) {
- newSize = sb.dragSize - newPos;
- newPos = 0;
- }
- else if (-newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize + newPos;
- }
- }
- else {
- if (newPos < 0) {
- newSize = sb.dragSize + newPos;
- newPos = 0;
- }
- else if (newPos + sb.dragSize > sb.trackSize) {
- newSize = sb.trackSize - newPos;
- }
- }
- if (s.isHorizontal()) {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(' + (newPos) + 'px, 0, 0)');
- }
- else {
- sb.drag.transform('translateX(' + (newPos) + 'px)');
- }
- sb.drag[0].style.width = newSize + 'px';
- }
- else {
- if (s.support.transforms3d) {
- sb.drag.transform('translate3d(0px, ' + (newPos) + 'px, 0)');
- }
- else {
- sb.drag.transform('translateY(' + (newPos) + 'px)');
- }
- sb.drag[0].style.height = newSize + 'px';
- }
- if (s.params.scrollbarHide) {
- clearTimeout(sb.timeout);
- sb.track[0].style.opacity = 1;
- sb.timeout = setTimeout(function () {
- sb.track[0].style.opacity = 0;
- sb.track.transition(400);
- }, 1000);
- }
- },
- setTransition: function (duration) {
- if (!s.params.scrollbar) return;
- s.scrollbar.drag.transition(duration);
- }
- };
-
-
- /*=========================
- Controller
- ===========================*/
- s.controller = {
- LinearSpline: function (x, y) {
- var binarySearch = (function() {
- var maxIndex, minIndex, guess;
- return function(array, val) {
- minIndex = -1;
- maxIndex = array.length;
- while (maxIndex - minIndex > 1)
- if (array[guess = maxIndex + minIndex >> 1] <= val) {
- minIndex = guess;
- } else {
- maxIndex = guess;
- }
- return maxIndex;
- };
- })();
- this.x = x;
- this.y = y;
- this.lastIndex = x.length - 1;
- // Given an x value (x2), return the expected y2 value:
- // (x1,y1) is the known point before given value,
- // (x3,y3) is the known point after given value.
- var i1, i3;
- var l = this.x.length;
-
- this.interpolate = function (x2) {
- if (!x2) return 0;
-
- // Get the indexes of x1 and x3 (the array indexes before and after given x2):
- i3 = binarySearch(this.x, x2);
- i1 = i3 - 1;
-
- // We have our indexes i1 & i3, so we can calculate already:
- // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
- return ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1];
- };
- },
- //xxx: for now i will just save one spline function to to
- getInterpolateFunction: function(c){
- if(!s.controller.spline) s.controller.spline = s.params.loop ?
- new s.controller.LinearSpline(s.slidesGrid, c.slidesGrid) :
- new s.controller.LinearSpline(s.snapGrid, c.snapGrid);
- },
- setTranslate: function (translate, byController) {
- var controlled = s.params.control;
- var multiplier, controlledTranslate;
- function setControlledTranslate(c) {
- // this will create an Interpolate function based on the snapGrids
- // x is the Grid of the scrolled scroller and y will be the controlled scroller
- // it makes sense to create this only once and recall it for the interpolation
- // the function does a lot of value caching for performance
- translate = c.rtl && c.params.direction === 'horizontal' ? -s.translate : s.translate;
- if (s.params.controlBy === 'slide') {
- s.controller.getInterpolateFunction(c);
- // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
- // but it did not work out
- controlledTranslate = -s.controller.spline.interpolate(-translate);
- }
-
- if(!controlledTranslate || s.params.controlBy === 'container'){
- multiplier = (c.maxTranslate() - c.minTranslate()) / (s.maxTranslate() - s.minTranslate());
- controlledTranslate = (translate - s.minTranslate()) * multiplier + c.minTranslate();
- }
-
- if (s.params.controlInverse) {
- controlledTranslate = c.maxTranslate() - controlledTranslate;
- }
- c.updateProgress(controlledTranslate);
- c.setWrapperTranslate(controlledTranslate, false, s);
- c.updateActiveIndex();
- }
- if (Array.isArray(controlled)) {
- for (var i = 0; i < controlled.length; i++) {
- if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
- setControlledTranslate(controlled[i]);
- }
- }
- }
- else if (controlled instanceof Swiper && byController !== controlled) {
-
- setControlledTranslate(controlled);
- }
- },
- setTransition: function (duration, byController) {
- var controlled = s.params.control;
- var i;
- function setControlledTransition(c) {
- c.setWrapperTransition(duration, s);
- if (duration !== 0) {
- c.onTransitionStart();
- c.wrapper.transitionEnd(function(){
- if (!controlled) return;
- if (c.params.loop && s.params.controlBy === 'slide') {
- c.fixLoop();
- }
- c.onTransitionEnd();
-
- });
- }
- }
- if (Array.isArray(controlled)) {
- for (i = 0; i < controlled.length; i++) {
- if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
- setControlledTransition(controlled[i]);
- }
- }
- }
- else if (controlled instanceof Swiper && byController !== controlled) {
- setControlledTransition(controlled);
- }
- }
- };
-
-
- /*=========================
- Hash Navigation
- ===========================*/
- s.hashnav = {
- onHashCange: function (e, a) {
- var newHash = document.location.hash.replace('#', '');
- var activeSlideHash = s.slides.eq(s.activeIndex).attr('data-hash');
- if (newHash !== activeSlideHash) {
- s.slideTo(s.wrapper.children('.' + s.params.slideClass + '[data-hash="' + (newHash) + '"]').index());
- }
- },
- attachEvents: function (detach) {
- var action = detach ? 'off' : 'on';
- $(window)[action]('hashchange', s.hashnav.onHashCange);
- },
- setHash: function () {
- if (!s.hashnav.initialized || !s.params.hashnav) return;
- if (s.params.replaceState && window.history && window.history.replaceState) {
- window.history.replaceState(null, null, ('#' + s.slides.eq(s.activeIndex).attr('data-hash') || ''));
- } else {
- var slide = s.slides.eq(s.activeIndex);
- var hash = slide.attr('data-hash') || slide.attr('data-history');
- document.location.hash = hash || '';
- }
- },
- init: function () {
- if (!s.params.hashnav || s.params.history) return;
- s.hashnav.initialized = true;
- var hash = document.location.hash.replace('#', '');
- if (hash) {
- var speed = 0;
- for (var i = 0, length = s.slides.length; i < length; i++) {
- var slide = s.slides.eq(i);
- var slideHash = slide.attr('data-hash') || slide.attr('data-history');
- if (slideHash === hash && !slide.hasClass(s.params.slideDuplicateClass)) {
- var index = slide.index();
- s.slideTo(index, speed, s.params.runCallbacksOnInit, true);
- }
- }
- }
- if (s.params.hashnavWatchState) s.hashnav.attachEvents();
- },
- destroy: function () {
- if (s.params.hashnavWatchState) s.hashnav.attachEvents(true);
- }
- };
-
-
- /*=========================
- History Api with fallback to Hashnav
- ===========================*/
- s.history = {
- init: function () {
- if (!s.params.history) return;
- if (!window.history || !window.history.pushState) {
- s.params.history = false;
- s.params.hashnav = true;
- return;
- }
- s.history.initialized = true;
- this.paths = this.getPathValues();
- if (!this.paths.key && !this.paths.value) return;
- this.scrollToSlide(0, this.paths.value, s.params.runCallbacksOnInit);
- if (!s.params.replaceState) {
- window.addEventListener('popstate', this.setHistoryPopState);
- }
- },
- setHistoryPopState: function() {
- s.history.paths = s.history.getPathValues();
- s.history.scrollToSlide(s.params.speed, s.history.paths.value, false);
- },
- getPathValues: function() {
- var pathArray = window.location.pathname.slice(1).split('/');
- var total = pathArray.length;
- var key = pathArray[total - 2];
- var value = pathArray[total - 1];
- return { key: key, value: value };
- },
- setHistory: function (key, index) {
- if (!s.history.initialized || !s.params.history) return;
- var slide = s.slides.eq(index);
- var value = this.slugify(slide.attr('data-history'));
- if (!window.location.pathname.includes(key)) {
- value = key + '/' + value;
- }
- if (s.params.replaceState) {
- window.history.replaceState(null, null, value);
- } else {
- window.history.pushState(null, null, value);
- }
- },
- slugify: function(text) {
- return text.toString().toLowerCase()
- .replace(/\s+/g, '-')
- .replace(/[^\w\-]+/g, '')
- .replace(/\-\-+/g, '-')
- .replace(/^-+/, '')
- .replace(/-+$/, '');
- },
- scrollToSlide: function(speed, value, runCallbacks) {
- if (value) {
- for (var i = 0, length = s.slides.length; i < length; i++) {
- var slide = s.slides.eq(i);
- var slideHistory = this.slugify(slide.attr('data-history'));
- if (slideHistory === value && !slide.hasClass(s.params.slideDuplicateClass)) {
- var index = slide.index();
- s.slideTo(index, speed, runCallbacks);
- }
- }
- } else {
- s.slideTo(0, speed, runCallbacks);
- }
- }
- };
-
-
- /*=========================
- Keyboard Control
- ===========================*/
- function handleKeyboard(e) {
- if (e.originalEvent) e = e.originalEvent; //jquery fix
- var kc = e.keyCode || e.charCode;
- // Directions locks
- if (!s.params.allowSwipeToNext && (s.isHorizontal() && kc === 39 || !s.isHorizontal() && kc === 40)) {
- return false;
- }
- if (!s.params.allowSwipeToPrev && (s.isHorizontal() && kc === 37 || !s.isHorizontal() && kc === 38)) {
- return false;
- }
- if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
- return;
- }
- if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {
- return;
- }
- if (kc === 37 || kc === 39 || kc === 38 || kc === 40) {
- var inView = false;
- //Check that swiper should be inside of visible area of window
- if (s.container.parents('.' + s.params.slideClass).length > 0 && s.container.parents('.' + s.params.slideActiveClass).length === 0) {
- return;
- }
- var windowScroll = {
- left: window.pageXOffset,
- top: window.pageYOffset
- };
- var windowWidth = window.innerWidth;
- var windowHeight = window.innerHeight;
- var swiperOffset = s.container.offset();
- if (s.rtl) swiperOffset.left = swiperOffset.left - s.container[0].scrollLeft;
- var swiperCoord = [
- [swiperOffset.left, swiperOffset.top],
- [swiperOffset.left + s.width, swiperOffset.top],
- [swiperOffset.left, swiperOffset.top + s.height],
- [swiperOffset.left + s.width, swiperOffset.top + s.height]
- ];
- for (var i = 0; i < swiperCoord.length; i++) {
- var point = swiperCoord[i];
- if (
- point[0] >= windowScroll.left && point[0] <= windowScroll.left + windowWidth &&
- point[1] >= windowScroll.top && point[1] <= windowScroll.top + windowHeight
- ) {
- inView = true;
- }
-
- }
- if (!inView) return;
- }
- if (s.isHorizontal()) {
- if (kc === 37 || kc === 39) {
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- }
- if ((kc === 39 && !s.rtl) || (kc === 37 && s.rtl)) s.slideNext();
- if ((kc === 37 && !s.rtl) || (kc === 39 && s.rtl)) s.slidePrev();
- }
- else {
- if (kc === 38 || kc === 40) {
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- }
- if (kc === 40) s.slideNext();
- if (kc === 38) s.slidePrev();
- }
- s.emit('onKeyPress', s, kc);
- }
- s.disableKeyboardControl = function () {
- s.params.keyboardControl = false;
- $(document).off('keydown', handleKeyboard);
- };
- s.enableKeyboardControl = function () {
- s.params.keyboardControl = true;
- $(document).on('keydown', handleKeyboard);
- };
-
-
- /*=========================
- Mousewheel Control
- ===========================*/
- s.mousewheel = {
- event: false,
- lastScrollTime: (new window.Date()).getTime()
- };
- function isEventSupported() {
- var eventName = 'onwheel';
- var isSupported = eventName in document;
-
- if (!isSupported) {
- var element = document.createElement('div');
- element.setAttribute(eventName, 'return;');
- isSupported = typeof element[eventName] === 'function';
- }
-
- if (!isSupported &&
- document.implementation &&
- document.implementation.hasFeature &&
- // always returns true in newer browsers as per the standard.
- // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
- document.implementation.hasFeature('', '') !== true ) {
- // This is the only way to test support for the `wheel` event in IE9+.
- isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
- }
-
- return isSupported;
- }
- /**
- * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is
- * complicated, thus this doc is long and (hopefully) detailed enough to answer
- * your questions.
- *
- * If you need to react to the mouse wheel in a predictable way, this code is
- * like your bestest friend. * hugs *
- *
- * As of today, there are 4 DOM event types you can listen to:
- *
- * 'wheel' -- Chrome(31+), FF(17+), IE(9+)
- * 'mousewheel' -- Chrome, IE(6+), Opera, Safari
- * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!
- * 'DOMMouseScroll' -- FF(0.9.7+) since 2003
- *
- * So what to do? The is the best:
- *
- * normalizeWheel.getEventType();
- *
- * In your event callback, use this code to get sane interpretation of the
- * deltas. This code will return an object with properties:
- *
- * spinX -- normalized spin speed (use for zoom) - x plane
- * spinY -- " - y plane
- * pixelX -- normalized distance (to pixels) - x plane
- * pixelY -- " - y plane
- *
- * Wheel values are provided by the browser assuming you are using the wheel to
- * scroll a web page by a number of lines or pixels (or pages). Values can vary
- * significantly on different platforms and browsers, forgetting that you can
- * scroll at different speeds. Some devices (like trackpads) emit more events
- * at smaller increments with fine granularity, and some emit massive jumps with
- * linear speed or acceleration.
- *
- * This code does its best to normalize the deltas for you:
- *
- * - spin is trying to normalize how far the wheel was spun (or trackpad
- * dragged). This is super useful for zoom support where you want to
- * throw away the chunky scroll steps on the PC and make those equal to
- * the slow and smooth tiny steps on the Mac. Key data: This code tries to
- * resolve a single slow step on a wheel to 1.
- *
- * - pixel is normalizing the desired scroll delta in pixel units. You'll
- * get the crazy differences between browsers, but at least it'll be in
- * pixels!
- *
- * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This
- * should translate to positive value zooming IN, negative zooming OUT.
- * This matches the newer 'wheel' event.
- *
- * Why are there spinX, spinY (or pixels)?
- *
- * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn
- * with a mouse. It results in side-scrolling in the browser by default.
- *
- * - spinY is what you expect -- it's the classic axis of a mouse wheel.
- *
- * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and
- * probably is by browsers in conjunction with fancy 3D controllers .. but
- * you know.
- *
- * Implementation info:
- *
- * Examples of 'wheel' event if you scroll slowly (down) by one step with an
- * average mouse:
- *
- * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)
- * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)
- * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)
- * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)
- * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)
- *
- * On the trackpad:
- *
- * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)
- * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)
- *
- * On other/older browsers.. it's more complicated as there can be multiple and
- * also missing delta values.
- *
- * The 'wheel' event is more standard:
- *
- * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
- *
- * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and
- * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain
- * backward compatibility with older events. Those other values help us
- * better normalize spin speed. Example of what the browsers provide:
- *
- * | event.wheelDelta | event.detail
- * ------------------+------------------+--------------
- * Safari v5/OS X | -120 | 0
- * Safari v5/Win7 | -120 | 0
- * Chrome v17/OS X | -120 | 0
- * Chrome v17/Win7 | -120 | 0
- * IE9/Win7 | -120 | undefined
- * Firefox v4/OS X | undefined | 1
- * Firefox v4/Win7 | undefined | 3
- *
- */
- function normalizeWheel( /*object*/ event ) /*object*/ {
- // Reasonable defaults
- var PIXEL_STEP = 10;
- var LINE_HEIGHT = 40;
- var PAGE_HEIGHT = 800;
-
- var sX = 0, sY = 0, // spinX, spinY
- pX = 0, pY = 0; // pixelX, pixelY
-
- // Legacy
- if( 'detail' in event ) {
- sY = event.detail;
- }
- if( 'wheelDelta' in event ) {
- sY = -event.wheelDelta / 120;
- }
- if( 'wheelDeltaY' in event ) {
- sY = -event.wheelDeltaY / 120;
- }
- if( 'wheelDeltaX' in event ) {
- sX = -event.wheelDeltaX / 120;
- }
-
- // side scrolling on FF with DOMMouseScroll
- if( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {
- sX = sY;
- sY = 0;
- }
-
- pX = sX * PIXEL_STEP;
- pY = sY * PIXEL_STEP;
-
- if( 'deltaY' in event ) {
- pY = event.deltaY;
- }
- if( 'deltaX' in event ) {
- pX = event.deltaX;
- }
-
- if( (pX || pY) && event.deltaMode ) {
- if( event.deltaMode === 1 ) { // delta in LINE units
- pX *= LINE_HEIGHT;
- pY *= LINE_HEIGHT;
- } else { // delta in PAGE units
- pX *= PAGE_HEIGHT;
- pY *= PAGE_HEIGHT;
- }
- }
-
- // Fall-back if spin cannot be determined
- if( pX && !sX ) {
- sX = (pX < 1) ? -1 : 1;
- }
- if( pY && !sY ) {
- sY = (pY < 1) ? -1 : 1;
- }
-
- return {
- spinX: sX,
- spinY: sY,
- pixelX: pX,
- pixelY: pY
- };
- }
- if (s.params.mousewheelControl) {
- /**
- * The best combination if you prefer spinX + spinY normalization. It favors
- * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with
- * 'wheel' event, making spin speed determination impossible.
- */
- s.mousewheel.event = (navigator.userAgent.indexOf('firefox') > -1) ?
- 'DOMMouseScroll' :
- isEventSupported() ?
- 'wheel' : 'mousewheel';
- }
- function handleMousewheel(e) {
- if (e.originalEvent) e = e.originalEvent; //jquery fix
- var delta = 0;
- var rtlFactor = s.rtl ? -1 : 1;
-
- var data = normalizeWheel( e );
-
- if (s.params.mousewheelForceToAxis) {
- if (s.isHorizontal()) {
- if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;
- else return;
- }
- else {
- if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;
- else return;
- }
- }
- else {
- delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? - data.pixelX * rtlFactor : - data.pixelY;
- }
-
- if (delta === 0) return;
-
- if (s.params.mousewheelInvert) delta = -delta;
-
- if (!s.params.freeMode) {
- if ((new window.Date()).getTime() - s.mousewheel.lastScrollTime > 60) {
- if (delta < 0) {
- if ((!s.isEnd || s.params.loop) && !s.animating) {
- s.slideNext();
- s.emit('onScroll', s, e);
- }
- else if (s.params.mousewheelReleaseOnEdges) return true;
- }
- else {
- if ((!s.isBeginning || s.params.loop) && !s.animating) {
- s.slidePrev();
- s.emit('onScroll', s, e);
- }
- else if (s.params.mousewheelReleaseOnEdges) return true;
- }
- }
- s.mousewheel.lastScrollTime = (new window.Date()).getTime();
-
- }
- else {
- //Freemode or scrollContainer:
- var position = s.getWrapperTranslate() + delta * s.params.mousewheelSensitivity;
- var wasBeginning = s.isBeginning,
- wasEnd = s.isEnd;
-
- if (position >= s.minTranslate()) position = s.minTranslate();
- if (position <= s.maxTranslate()) position = s.maxTranslate();
-
- s.setWrapperTransition(0);
- s.setWrapperTranslate(position);
- s.updateProgress();
- s.updateActiveIndex();
-
- if (!wasBeginning && s.isBeginning || !wasEnd && s.isEnd) {
- s.updateClasses();
- }
-
- if (s.params.freeModeSticky) {
- clearTimeout(s.mousewheel.timeout);
- s.mousewheel.timeout = setTimeout(function () {
- s.slideReset();
- }, 300);
- }
- else {
- if (s.params.lazyLoading && s.lazy) {
- s.lazy.load();
- }
- }
- // Emit event
- s.emit('onScroll', s, e);
-
- // Stop autoplay
- if (s.params.autoplay && s.params.autoplayDisableOnInteraction) s.stopAutoplay();
-
- // Return page scroll on edge positions
- if (position === 0 || position === s.maxTranslate()) return;
- }
-
- if (e.preventDefault) e.preventDefault();
- else e.returnValue = false;
- return false;
- }
- s.disableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- var target = s.container;
- if (s.params.mousewheelEventsTarged !== 'container') {
- target = $(s.params.mousewheelEventsTarged);
- }
- target.off(s.mousewheel.event, handleMousewheel);
- s.params.mousewheelControl = false;
- return true;
- };
-
- s.enableMousewheelControl = function () {
- if (!s.mousewheel.event) return false;
- var target = s.container;
- if (s.params.mousewheelEventsTarged !== 'container') {
- target = $(s.params.mousewheelEventsTarged);
- }
- target.on(s.mousewheel.event, handleMousewheel);
- s.params.mousewheelControl = true;
- return true;
- };
-
-
- /*=========================
- Parallax
- ===========================*/
- function setParallaxTransform(el, progress) {
- el = $(el);
- var p, pX, pY;
- var rtlFactor = s.rtl ? -1 : 1;
-
- p = el.attr('data-swiper-parallax') || '0';
- pX = el.attr('data-swiper-parallax-x');
- pY = el.attr('data-swiper-parallax-y');
- if (pX || pY) {
- pX = pX || '0';
- pY = pY || '0';
- }
- else {
- if (s.isHorizontal()) {
- pX = p;
- pY = '0';
- }
- else {
- pY = p;
- pX = '0';
- }
- }
-
- if ((pX).indexOf('%') >= 0) {
- pX = parseInt(pX, 10) * progress * rtlFactor + '%';
- }
- else {
- pX = pX * progress * rtlFactor + 'px' ;
- }
- if ((pY).indexOf('%') >= 0) {
- pY = parseInt(pY, 10) * progress + '%';
- }
- else {
- pY = pY * progress + 'px' ;
- }
-
- el.transform('translate3d(' + pX + ', ' + pY + ',0px)');
- }
- s.parallax = {
- setTranslate: function () {
- s.container.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){
- setParallaxTransform(this, s.progress);
-
- });
- s.slides.each(function () {
- var slide = $(this);
- slide.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function () {
- var progress = Math.min(Math.max(slide[0].progress, -1), 1);
- setParallaxTransform(this, progress);
- });
- });
- },
- setTransition: function (duration) {
- if (typeof duration === 'undefined') duration = s.params.speed;
- s.container.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]').each(function(){
- var el = $(this);
- var parallaxDuration = parseInt(el.attr('data-swiper-parallax-duration'), 10) || duration;
- if (duration === 0) parallaxDuration = 0;
- el.transition(parallaxDuration);
- });
- }
- };
-
-
- /*=========================
- Zoom
- ===========================*/
- s.zoom = {
- // "Global" Props
- scale: 1,
- currentScale: 1,
- isScaling: false,
- gesture: {
- slide: undefined,
- slideWidth: undefined,
- slideHeight: undefined,
- image: undefined,
- imageWrap: undefined,
- zoomMax: s.params.zoomMax
- },
- image: {
- isTouched: undefined,
- isMoved: undefined,
- currentX: undefined,
- currentY: undefined,
- minX: undefined,
- minY: undefined,
- maxX: undefined,
- maxY: undefined,
- width: undefined,
- height: undefined,
- startX: undefined,
- startY: undefined,
- touchesStart: {},
- touchesCurrent: {}
- },
- velocity: {
- x: undefined,
- y: undefined,
- prevPositionX: undefined,
- prevPositionY: undefined,
- prevTime: undefined
- },
- // Calc Scale From Multi-touches
- getDistanceBetweenTouches: function (e) {
- if (e.targetTouches.length < 2) return 1;
- var x1 = e.targetTouches[0].pageX,
- y1 = e.targetTouches[0].pageY,
- x2 = e.targetTouches[1].pageX,
- y2 = e.targetTouches[1].pageY;
- var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
- return distance;
- },
- // Events
- onGestureStart: function (e) {
- var z = s.zoom;
- if (!s.support.gestures) {
- if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {
- return;
- }
- z.gesture.scaleStart = z.getDistanceBetweenTouches(e);
- }
- if (!z.gesture.slide || !z.gesture.slide.length) {
- z.gesture.slide = $(this);
- if (z.gesture.slide.length === 0) z.gesture.slide = s.slides.eq(s.activeIndex);
- z.gesture.image = z.gesture.slide.find('img, svg, canvas');
- z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);
- z.gesture.zoomMax = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax ;
- if (z.gesture.imageWrap.length === 0) {
- z.gesture.image = undefined;
- return;
- }
- }
- z.gesture.image.transition(0);
- z.isScaling = true;
- },
- onGestureChange: function (e) {
- var z = s.zoom;
- if (!s.support.gestures) {
- if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {
- return;
- }
- z.gesture.scaleMove = z.getDistanceBetweenTouches(e);
- }
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- if (s.support.gestures) {
- z.scale = e.scale * z.currentScale;
- }
- else {
- z.scale = (z.gesture.scaleMove / z.gesture.scaleStart) * z.currentScale;
- }
- if (z.scale > z.gesture.zoomMax) {
- z.scale = z.gesture.zoomMax - 1 + Math.pow((z.scale - z.gesture.zoomMax + 1), 0.5);
- }
- if (z.scale < s.params.zoomMin) {
- z.scale = s.params.zoomMin + 1 - Math.pow((s.params.zoomMin - z.scale + 1), 0.5);
- }
- z.gesture.image.transform('translate3d(0,0,0) scale(' + z.scale + ')');
- },
- onGestureEnd: function (e) {
- var z = s.zoom;
- if (!s.support.gestures) {
- if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2) {
- return;
- }
- }
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- z.scale = Math.max(Math.min(z.scale, z.gesture.zoomMax), s.params.zoomMin);
- z.gesture.image.transition(s.params.speed).transform('translate3d(0,0,0) scale(' + z.scale + ')');
- z.currentScale = z.scale;
- z.isScaling = false;
- if (z.scale === 1) z.gesture.slide = undefined;
- },
- onTouchStart: function (s, e) {
- var z = s.zoom;
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- if (z.image.isTouched) return;
- if (s.device.os === 'android') e.preventDefault();
- z.image.isTouched = true;
- z.image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
- z.image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
- },
- onTouchMove: function (e) {
- var z = s.zoom;
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- s.allowClick = false;
- if (!z.image.isTouched || !z.gesture.slide) return;
-
- if (!z.image.isMoved) {
- z.image.width = z.gesture.image[0].offsetWidth;
- z.image.height = z.gesture.image[0].offsetHeight;
- z.image.startX = s.getTranslate(z.gesture.imageWrap[0], 'x') || 0;
- z.image.startY = s.getTranslate(z.gesture.imageWrap[0], 'y') || 0;
- z.gesture.slideWidth = z.gesture.slide[0].offsetWidth;
- z.gesture.slideHeight = z.gesture.slide[0].offsetHeight;
- z.gesture.imageWrap.transition(0);
- if (s.rtl) z.image.startX = -z.image.startX;
- if (s.rtl) z.image.startY = -z.image.startY;
- }
- // Define if we need image drag
- var scaledWidth = z.image.width * z.scale;
- var scaledHeight = z.image.height * z.scale;
-
- if (scaledWidth < z.gesture.slideWidth && scaledHeight < z.gesture.slideHeight) return;
-
- z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);
- z.image.maxX = -z.image.minX;
- z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);
- z.image.maxY = -z.image.minY;
-
- z.image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
- z.image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
-
- if (!z.image.isMoved && !z.isScaling) {
- if (s.isHorizontal() &&
- (Math.floor(z.image.minX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x < z.image.touchesStart.x) ||
- (Math.floor(z.image.maxX) === Math.floor(z.image.startX) && z.image.touchesCurrent.x > z.image.touchesStart.x)
- ) {
- z.image.isTouched = false;
- return;
- }
- else if (!s.isHorizontal() &&
- (Math.floor(z.image.minY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y < z.image.touchesStart.y) ||
- (Math.floor(z.image.maxY) === Math.floor(z.image.startY) && z.image.touchesCurrent.y > z.image.touchesStart.y)
- ) {
- z.image.isTouched = false;
- return;
- }
- }
- e.preventDefault();
- e.stopPropagation();
-
- z.image.isMoved = true;
- z.image.currentX = z.image.touchesCurrent.x - z.image.touchesStart.x + z.image.startX;
- z.image.currentY = z.image.touchesCurrent.y - z.image.touchesStart.y + z.image.startY;
-
- if (z.image.currentX < z.image.minX) {
- z.image.currentX = z.image.minX + 1 - Math.pow((z.image.minX - z.image.currentX + 1), 0.8);
- }
- if (z.image.currentX > z.image.maxX) {
- z.image.currentX = z.image.maxX - 1 + Math.pow((z.image.currentX - z.image.maxX + 1), 0.8);
- }
-
- if (z.image.currentY < z.image.minY) {
- z.image.currentY = z.image.minY + 1 - Math.pow((z.image.minY - z.image.currentY + 1), 0.8);
- }
- if (z.image.currentY > z.image.maxY) {
- z.image.currentY = z.image.maxY - 1 + Math.pow((z.image.currentY - z.image.maxY + 1), 0.8);
- }
-
- //Velocity
- if (!z.velocity.prevPositionX) z.velocity.prevPositionX = z.image.touchesCurrent.x;
- if (!z.velocity.prevPositionY) z.velocity.prevPositionY = z.image.touchesCurrent.y;
- if (!z.velocity.prevTime) z.velocity.prevTime = Date.now();
- z.velocity.x = (z.image.touchesCurrent.x - z.velocity.prevPositionX) / (Date.now() - z.velocity.prevTime) / 2;
- z.velocity.y = (z.image.touchesCurrent.y - z.velocity.prevPositionY) / (Date.now() - z.velocity.prevTime) / 2;
- if (Math.abs(z.image.touchesCurrent.x - z.velocity.prevPositionX) < 2) z.velocity.x = 0;
- if (Math.abs(z.image.touchesCurrent.y - z.velocity.prevPositionY) < 2) z.velocity.y = 0;
- z.velocity.prevPositionX = z.image.touchesCurrent.x;
- z.velocity.prevPositionY = z.image.touchesCurrent.y;
- z.velocity.prevTime = Date.now();
-
- z.gesture.imageWrap.transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');
- },
- onTouchEnd: function (s, e) {
- var z = s.zoom;
- if (!z.gesture.image || z.gesture.image.length === 0) return;
- if (!z.image.isTouched || !z.image.isMoved) {
- z.image.isTouched = false;
- z.image.isMoved = false;
- return;
- }
- z.image.isTouched = false;
- z.image.isMoved = false;
- var momentumDurationX = 300;
- var momentumDurationY = 300;
- var momentumDistanceX = z.velocity.x * momentumDurationX;
- var newPositionX = z.image.currentX + momentumDistanceX;
- var momentumDistanceY = z.velocity.y * momentumDurationY;
- var newPositionY = z.image.currentY + momentumDistanceY;
-
- //Fix duration
- if (z.velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - z.image.currentX) / z.velocity.x);
- if (z.velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - z.image.currentY) / z.velocity.y);
- var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
-
- z.image.currentX = newPositionX;
- z.image.currentY = newPositionY;
-
- // Define if we need image drag
- var scaledWidth = z.image.width * z.scale;
- var scaledHeight = z.image.height * z.scale;
- z.image.minX = Math.min((z.gesture.slideWidth / 2 - scaledWidth / 2), 0);
- z.image.maxX = -z.image.minX;
- z.image.minY = Math.min((z.gesture.slideHeight / 2 - scaledHeight / 2), 0);
- z.image.maxY = -z.image.minY;
- z.image.currentX = Math.max(Math.min(z.image.currentX, z.image.maxX), z.image.minX);
- z.image.currentY = Math.max(Math.min(z.image.currentY, z.image.maxY), z.image.minY);
-
- z.gesture.imageWrap.transition(momentumDuration).transform('translate3d(' + z.image.currentX + 'px, ' + z.image.currentY + 'px,0)');
- },
- onTransitionEnd: function (s) {
- var z = s.zoom;
- if (z.gesture.slide && s.previousIndex !== s.activeIndex) {
- z.gesture.image.transform('translate3d(0,0,0) scale(1)');
- z.gesture.imageWrap.transform('translate3d(0,0,0)');
- z.gesture.slide = z.gesture.image = z.gesture.imageWrap = undefined;
- z.scale = z.currentScale = 1;
- }
- },
- // Toggle Zoom
- toggleZoom: function (s, e) {
- var z = s.zoom;
- if (!z.gesture.slide) {
- z.gesture.slide = s.clickedSlide ? $(s.clickedSlide) : s.slides.eq(s.activeIndex);
- z.gesture.image = z.gesture.slide.find('img, svg, canvas');
- z.gesture.imageWrap = z.gesture.image.parent('.' + s.params.zoomContainerClass);
- }
- if (!z.gesture.image || z.gesture.image.length === 0) return;
-
- var touchX, touchY, offsetX, offsetY, diffX, diffY, translateX, translateY, imageWidth, imageHeight, scaledWidth, scaledHeight, translateMinX, translateMinY, translateMaxX, translateMaxY, slideWidth, slideHeight;
-
- if (typeof z.image.touchesStart.x === 'undefined' && e) {
- touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
- touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
- }
- else {
- touchX = z.image.touchesStart.x;
- touchY = z.image.touchesStart.y;
- }
-
- if (z.scale && z.scale !== 1) {
- // Zoom Out
- z.scale = z.currentScale = 1;
- z.gesture.imageWrap.transition(300).transform('translate3d(0,0,0)');
- z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(1)');
- z.gesture.slide = undefined;
- }
- else {
- // Zoom In
- z.scale = z.currentScale = z.gesture.imageWrap.attr('data-swiper-zoom') || s.params.zoomMax;
- if (e) {
- slideWidth = z.gesture.slide[0].offsetWidth;
- slideHeight = z.gesture.slide[0].offsetHeight;
- offsetX = z.gesture.slide.offset().left;
- offsetY = z.gesture.slide.offset().top;
- diffX = offsetX + slideWidth/2 - touchX;
- diffY = offsetY + slideHeight/2 - touchY;
-
- imageWidth = z.gesture.image[0].offsetWidth;
- imageHeight = z.gesture.image[0].offsetHeight;
- scaledWidth = imageWidth * z.scale;
- scaledHeight = imageHeight * z.scale;
-
- translateMinX = Math.min((slideWidth / 2 - scaledWidth / 2), 0);
- translateMinY = Math.min((slideHeight / 2 - scaledHeight / 2), 0);
- translateMaxX = -translateMinX;
- translateMaxY = -translateMinY;
-
- translateX = diffX * z.scale;
- translateY = diffY * z.scale;
-
- if (translateX < translateMinX) {
- translateX = translateMinX;
- }
- if (translateX > translateMaxX) {
- translateX = translateMaxX;
- }
-
- if (translateY < translateMinY) {
- translateY = translateMinY;
- }
- if (translateY > translateMaxY) {
- translateY = translateMaxY;
- }
- }
- else {
- translateX = 0;
- translateY = 0;
- }
- z.gesture.imageWrap.transition(300).transform('translate3d(' + translateX + 'px, ' + translateY + 'px,0)');
- z.gesture.image.transition(300).transform('translate3d(0,0,0) scale(' + z.scale + ')');
- }
- },
- // Attach/Detach Events
- attachEvents: function (detach) {
- var action = detach ? 'off' : 'on';
-
- if (s.params.zoom) {
- var target = s.slides;
- var passiveListener = s.touchEvents.start === 'touchstart' && s.support.passiveListener && s.params.passiveListeners ? {passive: true, capture: false} : false;
- // Scale image
- if (s.support.gestures) {
- s.slides[action]('gesturestart', s.zoom.onGestureStart, passiveListener);
- s.slides[action]('gesturechange', s.zoom.onGestureChange, passiveListener);
- s.slides[action]('gestureend', s.zoom.onGestureEnd, passiveListener);
- }
- else if (s.touchEvents.start === 'touchstart') {
- s.slides[action](s.touchEvents.start, s.zoom.onGestureStart, passiveListener);
- s.slides[action](s.touchEvents.move, s.zoom.onGestureChange, passiveListener);
- s.slides[action](s.touchEvents.end, s.zoom.onGestureEnd, passiveListener);
- }
-
- // Move image
- s[action]('touchStart', s.zoom.onTouchStart);
- s.slides.each(function (index, slide){
- if ($(slide).find('.' + s.params.zoomContainerClass).length > 0) {
- $(slide)[action](s.touchEvents.move, s.zoom.onTouchMove);
- }
- });
- s[action]('touchEnd', s.zoom.onTouchEnd);
-
- // Scale Out
- s[action]('transitionEnd', s.zoom.onTransitionEnd);
- if (s.params.zoomToggle) {
- s.on('doubleTap', s.zoom.toggleZoom);
- }
- }
- },
- init: function () {
- s.zoom.attachEvents();
- },
- destroy: function () {
- s.zoom.attachEvents(true);
- }
- };
-
-
- /*=========================
- Plugins API. Collect all and init all plugins
- ===========================*/
- s._plugins = [];
- for (var plugin in s.plugins) {
- var p = s.plugins[plugin](s, s.params[plugin]);
- if (p) s._plugins.push(p);
- }
- // Method to call all plugins event/method
- s.callPlugins = function (eventName) {
- for (var i = 0; i < s._plugins.length; i++) {
- if (eventName in s._plugins[i]) {
- s._plugins[i][eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
- }
- }
- };
-
-
- /*=========================
- Events/Callbacks/Plugins Emitter
- ===========================*/
- function normalizeEventName (eventName) {
- if (eventName.indexOf('on') !== 0) {
- if (eventName[0] !== eventName[0].toUpperCase()) {
- eventName = 'on' + eventName[0].toUpperCase() + eventName.substring(1);
- }
- else {
- eventName = 'on' + eventName;
- }
- }
- return eventName;
- }
- s.emitterEventListeners = {
-
- };
- s.emit = function (eventName) {
- // Trigger callbacks
- if (s.params[eventName]) {
- s.params[eventName](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
- }
- var i;
- // Trigger events
- if (s.emitterEventListeners[eventName]) {
- for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {
- s.emitterEventListeners[eventName][i](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
- }
- }
- // Trigger plugins
- if (s.callPlugins) s.callPlugins(eventName, arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
- };
- s.on = function (eventName, handler) {
- eventName = normalizeEventName(eventName);
- if (!s.emitterEventListeners[eventName]) s.emitterEventListeners[eventName] = [];
- s.emitterEventListeners[eventName].push(handler);
- return s;
- };
- s.off = function (eventName, handler) {
- var i;
- eventName = normalizeEventName(eventName);
- if (typeof handler === 'undefined') {
- // Remove all handlers for such event
- s.emitterEventListeners[eventName] = [];
- return s;
- }
- if (!s.emitterEventListeners[eventName] || s.emitterEventListeners[eventName].length === 0) return;
- for (i = 0; i < s.emitterEventListeners[eventName].length; i++) {
- if(s.emitterEventListeners[eventName][i] === handler) s.emitterEventListeners[eventName].splice(i, 1);
- }
- return s;
- };
- s.once = function (eventName, handler) {
- eventName = normalizeEventName(eventName);
- var _handler = function () {
- handler(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
- s.off(eventName, _handler);
- };
- s.on(eventName, _handler);
- return s;
- };
-
-
- // Accessibility tools
- s.a11y = {
- makeFocusable: function ($el) {
- $el.attr('tabIndex', '0');
- return $el;
- },
- addRole: function ($el, role) {
- $el.attr('role', role);
- return $el;
- },
-
- addLabel: function ($el, label) {
- $el.attr('aria-label', label);
- return $el;
- },
-
- disable: function ($el) {
- $el.attr('aria-disabled', true);
- return $el;
- },
-
- enable: function ($el) {
- $el.attr('aria-disabled', false);
- return $el;
- },
-
- onEnterKey: function (event) {
- if (event.keyCode !== 13) return;
- if ($(event.target).is(s.params.nextButton)) {
- s.onClickNext(event);
- if (s.isEnd) {
- s.a11y.notify(s.params.lastSlideMessage);
- }
- else {
- s.a11y.notify(s.params.nextSlideMessage);
- }
- }
- else if ($(event.target).is(s.params.prevButton)) {
- s.onClickPrev(event);
- if (s.isBeginning) {
- s.a11y.notify(s.params.firstSlideMessage);
- }
- else {
- s.a11y.notify(s.params.prevSlideMessage);
- }
- }
- if ($(event.target).is('.' + s.params.bulletClass)) {
- $(event.target)[0].click();
- }
- },
-
- liveRegion: $('<span class="' + s.params.notificationClass + '" aria-live="assertive" aria-atomic="true"></span>'),
-
- notify: function (message) {
- var notification = s.a11y.liveRegion;
- if (notification.length === 0) return;
- notification.html('');
- notification.html(message);
- },
- init: function () {
- // Setup accessibility
- if (s.params.nextButton && s.nextButton && s.nextButton.length > 0) {
- s.a11y.makeFocusable(s.nextButton);
- s.a11y.addRole(s.nextButton, 'button');
- s.a11y.addLabel(s.nextButton, s.params.nextSlideMessage);
- }
- if (s.params.prevButton && s.prevButton && s.prevButton.length > 0) {
- s.a11y.makeFocusable(s.prevButton);
- s.a11y.addRole(s.prevButton, 'button');
- s.a11y.addLabel(s.prevButton, s.params.prevSlideMessage);
- }
-
- $(s.container).append(s.a11y.liveRegion);
- },
- initPagination: function () {
- if (s.params.pagination && s.params.paginationClickable && s.bullets && s.bullets.length) {
- s.bullets.each(function () {
- var bullet = $(this);
- s.a11y.makeFocusable(bullet);
- s.a11y.addRole(bullet, 'button');
- s.a11y.addLabel(bullet, s.params.paginationBulletMessage.replace(/{{index}}/, bullet.index() + 1));
- });
- }
- },
- destroy: function () {
- if (s.a11y.liveRegion && s.a11y.liveRegion.length > 0) s.a11y.liveRegion.remove();
- }
- };
-
-
- /*=========================
- Init/Destroy
- ===========================*/
- s.init = function () {
- if (s.params.loop) s.createLoop();
- s.updateContainerSize();
- s.updateSlidesSize();
- s.updatePagination();
- if (s.params.scrollbar && s.scrollbar) {
- s.scrollbar.set();
- if (s.params.scrollbarDraggable) {
- s.scrollbar.enableDraggable();
- }
- }
- if (s.params.effect !== 'slide' && s.effects[s.params.effect]) {
- if (!s.params.loop) s.updateProgress();
- s.effects[s.params.effect].setTranslate();
- }
- if (s.params.loop) {
- s.slideTo(s.params.initialSlide + s.loopedSlides, 0, s.params.runCallbacksOnInit);
- }
- else {
- s.slideTo(s.params.initialSlide, 0, s.params.runCallbacksOnInit);
- if (s.params.initialSlide === 0) {
- if (s.parallax && s.params.parallax) s.parallax.setTranslate();
- if (s.lazy && s.params.lazyLoading) {
- s.lazy.load();
- s.lazy.initialImageLoaded = true;
- }
- }
- }
- s.attachEvents();
- if (s.params.observer && s.support.observer) {
- s.initObservers();
- }
- if (s.params.preloadImages && !s.params.lazyLoading) {
- s.preloadImages();
- }
- if (s.params.zoom && s.zoom) {
- s.zoom.init();
- }
- if (s.params.autoplay) {
- s.startAutoplay();
- }
- if (s.params.keyboardControl) {
- if (s.enableKeyboardControl) s.enableKeyboardControl();
- }
- if (s.params.mousewheelControl) {
- if (s.enableMousewheelControl) s.enableMousewheelControl();
- }
- // Deprecated hashnavReplaceState changed to replaceState for use in hashnav and history
- if (s.params.hashnavReplaceState) {
- s.params.replaceState = s.params.hashnavReplaceState;
- }
- if (s.params.history) {
- if (s.history) s.history.init();
- }
- if (s.params.hashnav) {
- if (s.hashnav) s.hashnav.init();
- }
- if (s.params.a11y && s.a11y) s.a11y.init();
- s.emit('onInit', s);
- };
-
- // Cleanup dynamic styles
- s.cleanupStyles = function () {
- // Container
- s.container.removeClass(s.classNames.join(' ')).removeAttr('style');
-
- // Wrapper
- s.wrapper.removeAttr('style');
-
- // Slides
- if (s.slides && s.slides.length) {
- s.slides
- .removeClass([
- s.params.slideVisibleClass,
- s.params.slideActiveClass,
- s.params.slideNextClass,
- s.params.slidePrevClass
- ].join(' '))
- .removeAttr('style')
- .removeAttr('data-swiper-column')
- .removeAttr('data-swiper-row');
- }
-
- // Pagination/Bullets
- if (s.paginationContainer && s.paginationContainer.length) {
- s.paginationContainer.removeClass(s.params.paginationHiddenClass);
- }
- if (s.bullets && s.bullets.length) {
- s.bullets.removeClass(s.params.bulletActiveClass);
- }
-
- // Buttons
- if (s.params.prevButton) $(s.params.prevButton).removeClass(s.params.buttonDisabledClass);
- if (s.params.nextButton) $(s.params.nextButton).removeClass(s.params.buttonDisabledClass);
-
- // Scrollbar
- if (s.params.scrollbar && s.scrollbar) {
- if (s.scrollbar.track && s.scrollbar.track.length) s.scrollbar.track.removeAttr('style');
- if (s.scrollbar.drag && s.scrollbar.drag.length) s.scrollbar.drag.removeAttr('style');
- }
- };
-
- // Destroy
- s.destroy = function (deleteInstance, cleanupStyles) {
- // Detach evebts
- s.detachEvents();
- // Stop autoplay
- s.stopAutoplay();
- // Disable draggable
- if (s.params.scrollbar && s.scrollbar) {
- if (s.params.scrollbarDraggable) {
- s.scrollbar.disableDraggable();
- }
- }
- // Destroy loop
- if (s.params.loop) {
- s.destroyLoop();
- }
- // Cleanup styles
- if (cleanupStyles) {
- s.cleanupStyles();
- }
- // Disconnect observer
- s.disconnectObservers();
-
- // Destroy zoom
- if (s.params.zoom && s.zoom) {
- s.zoom.destroy();
- }
- // Disable keyboard/mousewheel
- if (s.params.keyboardControl) {
- if (s.disableKeyboardControl) s.disableKeyboardControl();
- }
- if (s.params.mousewheelControl) {
- if (s.disableMousewheelControl) s.disableMousewheelControl();
- }
- // Disable a11y
- if (s.params.a11y && s.a11y) s.a11y.destroy();
- // Delete history popstate
- if (s.params.history && !s.params.replaceState) {
- window.removeEventListener('popstate', s.history.setHistoryPopState);
- }
- if (s.params.hashnav && s.hashnav) {
- s.hashnav.destroy();
- }
- // Destroy callback
- s.emit('onDestroy');
- // Delete instance
- if (deleteInstance !== false) s = null;
- };
-
- s.init();
-
-
-
- // Return swiper instance
- return s;
- };
-
-
- /*==================================================
- Prototype
- ====================================================*/
- Swiper.prototype = {
- isSafari: (function () {
- var ua = window.navigator.userAgent.toLowerCase();
- return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
- })(),
- isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),
- isArray: function (arr) {
- return Object.prototype.toString.apply(arr) === '[object Array]';
- },
- /*==================================================
- Browser
- ====================================================*/
- browser: {
- ie: window.navigator.pointerEnabled || window.navigator.msPointerEnabled,
- ieTouch: (window.navigator.msPointerEnabled && window.navigator.msMaxTouchPoints > 1) || (window.navigator.pointerEnabled && window.navigator.maxTouchPoints > 1),
- lteIE9: (function() {
- // create temporary DIV
- var div = document.createElement('div');
- // add content to tmp DIV which is wrapped into the IE HTML conditional statement
- div.innerHTML = '<!--[if lte IE 9]><i></i><![endif]-->';
- // return true / false value based on what will browser render
- return div.getElementsByTagName('i').length === 1;
- })()
- },
- /*==================================================
- Devices
- ====================================================*/
- device: (function () {
- var ua = window.navigator.userAgent;
- var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
- var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
- var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
- var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
- return {
- ios: ipad || iphone || ipod,
- android: android
- };
- })(),
- /*==================================================
- Feature Detection
- ====================================================*/
- support: {
- touch : (window.Modernizr && Modernizr.touch === true) || (function () {
- return !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch);
- })(),
-
- transforms3d : (window.Modernizr && Modernizr.csstransforms3d === true) || (function () {
- var div = document.createElement('div').style;
- return ('webkitPerspective' in div || 'MozPerspective' in div || 'OPerspective' in div || 'MsPerspective' in div || 'perspective' in div);
- })(),
-
- flexbox: (function () {
- var div = document.createElement('div').style;
- var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');
- for (var i = 0; i < styles.length; i++) {
- if (styles[i] in div) return true;
- }
- })(),
-
- observer: (function () {
- return ('MutationObserver' in window || 'WebkitMutationObserver' in window);
- })(),
-
- passiveListener: (function () {
- var supportsPassive = false;
- try {
- var opts = Object.defineProperty({}, 'passive', {
- get: function() {
- supportsPassive = true;
- }
- });
- window.addEventListener('testPassiveListener', null, opts);
- } catch (e) {}
- return supportsPassive;
- })(),
-
- gestures: (function () {
- return 'ongesturestart' in window;
- })()
- },
- /*==================================================
- Plugins
- ====================================================*/
- plugins: {}
- };
-
-
- /*===========================
- Get Dom libraries
- ===========================*/
- var swiperDomPlugins = ['jQuery', 'Zepto', 'Dom7'];
- for (var i = 0; i < swiperDomPlugins.length; i++) {
- if (window[swiperDomPlugins[i]]) {
- addLibraryPlugin(window[swiperDomPlugins[i]]);
- }
- }
- // Required DOM Plugins
- var domLib;
- if (typeof Dom7 === 'undefined') {
- domLib = window.Dom7 || window.Zepto || window.jQuery;
- }
- else {
- domLib = Dom7;
- }
-
-
- /*===========================
- Add .swiper plugin from Dom libraries
- ===========================*/
- function addLibraryPlugin(lib) {
- lib.fn.swiper = function (params) {
- var firstInstance;
- lib(this).each(function () {
- var s = new Swiper(this, params);
- if (!firstInstance) firstInstance = s;
- });
- return firstInstance;
- };
- }
-
- if (domLib) {
- if (!('transitionEnd' in domLib.fn)) {
- domLib.fn.transitionEnd = function (callback) {
- var events = ['webkitTransitionEnd', 'transitionend', 'oTransitionEnd', 'MSTransitionEnd', 'msTransitionEnd'],
- i, j, dom = this;
- function fireCallBack(e) {
- /*jshint validthis:true */
- if (e.target !== this) return;
- callback.call(this, e);
- for (i = 0; i < events.length; i++) {
- dom.off(events[i], fireCallBack);
- }
- }
- if (callback) {
- for (i = 0; i < events.length; i++) {
- dom.on(events[i], fireCallBack);
- }
- }
- return this;
- };
- }
- if (!('transform' in domLib.fn)) {
- domLib.fn.transform = function (transform) {
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransform = elStyle.MsTransform = elStyle.msTransform = elStyle.MozTransform = elStyle.OTransform = elStyle.transform = transform;
- }
- return this;
- };
- }
- if (!('transition' in domLib.fn)) {
- domLib.fn.transition = function (duration) {
- if (typeof duration !== 'string') {
- duration = duration + 'ms';
- }
- for (var i = 0; i < this.length; i++) {
- var elStyle = this[i].style;
- elStyle.webkitTransitionDuration = elStyle.MsTransitionDuration = elStyle.msTransitionDuration = elStyle.MozTransitionDuration = elStyle.OTransitionDuration = elStyle.transitionDuration = duration;
- }
- return this;
- };
- }
- if (!('outerWidth' in domLib.fn)) {
- domLib.fn.outerWidth = function (includeMargins) {
- if (this.length > 0) {
- if (includeMargins)
- return this[0].offsetWidth + parseFloat(this.css('margin-right')) + parseFloat(this.css('margin-left'));
- else
- return this[0].offsetWidth;
- }
- else return null;
- };
- }
- }
-
-
- window.Swiper = Swiper;
-})();
-
-/*===========================
- Swiper AMD Export
- ===========================*/
-if (typeof(module) !== 'undefined')
-{
- module.exports = window.Swiper;
-}
-else if (typeof define === 'function' && define.amd) {
- define([], function () {
- 'use strict';
- return window.Swiper;
- });
-}
\ No newline at end of file
+
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global.Swiper = factory());
+}(this, (function () { 'use strict';
+
+ /**
+ * SSR Window 1.0.0
+ * Better handling for window object in SSR environment
+ * https://github.com/nolimits4web/ssr-window
+ *
+ * Copyright 2018, Vladimir Kharlampidi
+ *
+ * Licensed under MIT
+ *
+ * Released on: February 10, 2018
+ */
+ var d;
+ if (typeof document === 'undefined') {
+ d = {
+ body: {},
+ addEventListener: function addEventListener() {},
+ removeEventListener: function removeEventListener() {},
+ activeElement: {
+ blur: function blur() {},
+ nodeName: '',
+ },
+ querySelector: function querySelector() {
+ return null;
+ },
+ querySelectorAll: function querySelectorAll() {
+ return [];
+ },
+ getElementById: function getElementById() {
+ return null;
+ },
+ createEvent: function createEvent() {
+ return {
+ initEvent: function initEvent() {},
+ };
+ },
+ createElement: function createElement() {
+ return {
+ children: [],
+ childNodes: [],
+ style: {},
+ setAttribute: function setAttribute() {},
+ getElementsByTagName: function getElementsByTagName() {
+ return [];
+ },
+ };
+ },
+ location: { hash: '' },
+ };
+ } else {
+ // eslint-disable-next-line
+ d = document;
+ }
+
+ var doc = d;
+
+ var w;
+ if (typeof window === 'undefined') {
+ w = {
+ document: doc,
+ navigator: {
+ userAgent: '',
+ },
+ location: {},
+ history: {},
+ CustomEvent: function CustomEvent() {
+ return this;
+ },
+ addEventListener: function addEventListener() {},
+ removeEventListener: function removeEventListener() {},
+ getComputedStyle: function getComputedStyle() {
+ return {
+ getPropertyValue: function getPropertyValue() {
+ return '';
+ },
+ };
+ },
+ Image: function Image() {},
+ Date: function Date() {},
+ screen: {},
+ setTimeout: function setTimeout() {},
+ clearTimeout: function clearTimeout() {},
+ };
+ } else {
+ // eslint-disable-next-line
+ w = window;
+ }
+
+ var win = w;
+
+ /**
+ * Dom7 2.0.6
+ * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
+ * http://framework7.io/docs/dom.html
+ *
+ * Copyright 2018, Vladimir Kharlampidi
+ * The iDangero.us
+ * http://www.idangero.us/
+ *
+ * Licensed under MIT
+ *
+ * Released on: May 27, 2018
+ */
+
+ var Dom7 = function Dom7(arr) {
+ var self = this;
+ // Create array-like object
+ for (var i = 0; i < arr.length; i += 1) {
+ self[i] = arr[i];
+ }
+ self.length = arr.length;
+ // Return collection with methods
+ return this;
+ };
+
+ function $(selector, context) {
+ var arr = [];
+ var i = 0;
+ if (selector && !context) {
+ if (selector instanceof Dom7) {
+ return selector;
+ }
+ }
+ if (selector) {
+ // String
+ if (typeof selector === 'string') {
+ var els;
+ var tempParent;
+ var html = selector.trim();
+ if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
+ var toCreate = 'div';
+ if (html.indexOf('<li') === 0) { toCreate = 'ul'; }
+ if (html.indexOf('<tr') === 0) { toCreate = 'tbody'; }
+ if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) { toCreate = 'tr'; }
+ if (html.indexOf('<tbody') === 0) { toCreate = 'table'; }
+ if (html.indexOf('<option') === 0) { toCreate = 'select'; }
+ tempParent = doc.createElement(toCreate);
+ tempParent.innerHTML = html;
+ for (i = 0; i < tempParent.childNodes.length; i += 1) {
+ arr.push(tempParent.childNodes[i]);
+ }
+ } else {
+ if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {
+ // Pure ID selector
+ els = [doc.getElementById(selector.trim().split('#')[1])];
+ } else {
+ // Other selectors
+ els = (context || doc).querySelectorAll(selector.trim());
+ }
+ for (i = 0; i < els.length; i += 1) {
+ if (els[i]) { arr.push(els[i]); }
+ }
+ }
+ } else if (selector.nodeType || selector === win || selector === doc) {
+ // Node/element
+ arr.push(selector);
+ } else if (selector.length > 0 && selector[0].nodeType) {
+ // Array of elements or instance of Dom
+ for (i = 0; i < selector.length; i += 1) {
+ arr.push(selector[i]);
+ }
+ }
+ }
+ return new Dom7(arr);
+ }
+
+ $.fn = Dom7.prototype;
+ $.Class = Dom7;
+ $.Dom7 = Dom7;
+
+ function unique(arr) {
+ var uniqueArray = [];
+ for (var i = 0; i < arr.length; i += 1) {
+ if (uniqueArray.indexOf(arr[i]) === -1) { uniqueArray.push(arr[i]); }
+ }
+ return uniqueArray;
+ }
+
+ // Classes and attributes
+ function addClass(className) {
+ var this$1 = this;
+
+ if (typeof className === 'undefined') {
+ return this;
+ }
+ var classes = className.split(' ');
+ for (var i = 0; i < classes.length; i += 1) {
+ for (var j = 0; j < this.length; j += 1) {
+ if (typeof this$1[j].classList !== 'undefined') { this$1[j].classList.add(classes[i]); }
+ }
+ }
+ return this;
+ }
+ function removeClass(className) {
+ var this$1 = this;
+
+ var classes = className.split(' ');
+ for (var i = 0; i < classes.length; i += 1) {
+ for (var j = 0; j < this.length; j += 1) {
+ if (typeof this$1[j].classList !== 'undefined') { this$1[j].classList.remove(classes[i]); }
+ }
+ }
+ return this;
+ }
+ function hasClass(className) {
+ if (!this[0]) { return false; }
+ return this[0].classList.contains(className);
+ }
+ function toggleClass(className) {
+ var this$1 = this;
+
+ var classes = className.split(' ');
+ for (var i = 0; i < classes.length; i += 1) {
+ for (var j = 0; j < this.length; j += 1) {
+ if (typeof this$1[j].classList !== 'undefined') { this$1[j].classList.toggle(classes[i]); }
+ }
+ }
+ return this;
+ }
+ function attr(attrs, value) {
+ var arguments$1 = arguments;
+ var this$1 = this;
+
+ if (arguments.length === 1 && typeof attrs === 'string') {
+ // Get attr
+ if (this[0]) { return this[0].getAttribute(attrs); }
+ return undefined;
+ }
+
+ // Set attrs
+ for (var i = 0; i < this.length; i += 1) {
+ if (arguments$1.length === 2) {
+ // String
+ this$1[i].setAttribute(attrs, value);
+ } else {
+ // Object
+ // eslint-disable-next-line
+ for (var attrName in attrs) {
+ this$1[i][attrName] = attrs[attrName];
+ this$1[i].setAttribute(attrName, attrs[attrName]);
+ }
+ }
+ }
+ return this;
+ }
+ // eslint-disable-next-line
+ function removeAttr(attr) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.length; i += 1) {
+ this$1[i].removeAttribute(attr);
+ }
+ return this;
+ }
+ function data(key, value) {
+ var this$1 = this;
+
+ var el;
+ if (typeof value === 'undefined') {
+ el = this[0];
+ // Get value
+ if (el) {
+ if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) {
+ return el.dom7ElementDataStorage[key];
+ }
+
+ var dataKey = el.getAttribute(("data-" + key));
+ if (dataKey) {
+ return dataKey;
+ }
+ return undefined;
+ }
+ return undefined;
+ }
+
+ // Set value
+ for (var i = 0; i < this.length; i += 1) {
+ el = this$1[i];
+ if (!el.dom7ElementDataStorage) { el.dom7ElementDataStorage = {}; }
+ el.dom7ElementDataStorage[key] = value;
+ }
+ return this;
+ }
+ // Transforms
+ // eslint-disable-next-line
+ function transform(transform) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.length; i += 1) {
+ var elStyle = this$1[i].style;
+ elStyle.webkitTransform = transform;
+ elStyle.transform = transform;
+ }
+ return this;
+ }
+ function transition(duration) {
+ var this$1 = this;
+
+ if (typeof duration !== 'string') {
+ duration = duration + "ms"; // eslint-disable-line
+ }
+ for (var i = 0; i < this.length; i += 1) {
+ var elStyle = this$1[i].style;
+ elStyle.webkitTransitionDuration = duration;
+ elStyle.transitionDuration = duration;
+ }
+ return this;
+ }
+ // Events
+ function on() {
+ var this$1 = this;
+ var assign;
+
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+ var eventType = args[0];
+ var targetSelector = args[1];
+ var listener = args[2];
+ var capture = args[3];
+ if (typeof args[1] === 'function') {
+ (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);
+ targetSelector = undefined;
+ }
+ if (!capture) { capture = false; }
+
+ function handleLiveEvent(e) {
+ var target = e.target;
+ if (!target) { return; }
+ var eventData = e.target.dom7EventData || [];
+ if (eventData.indexOf(e) < 0) {
+ eventData.unshift(e);
+ }
+ if ($(target).is(targetSelector)) { listener.apply(target, eventData); }
+ else {
+ var parents = $(target).parents(); // eslint-disable-line
+ for (var k = 0; k < parents.length; k += 1) {
+ if ($(parents[k]).is(targetSelector)) { listener.apply(parents[k], eventData); }
+ }
+ }
+ }
+ function handleEvent(e) {
+ var eventData = e && e.target ? e.target.dom7EventData || [] : [];
+ if (eventData.indexOf(e) < 0) {
+ eventData.unshift(e);
+ }
+ listener.apply(this, eventData);
+ }
+ var events = eventType.split(' ');
+ var j;
+ for (var i = 0; i < this.length; i += 1) {
+ var el = this$1[i];
+ if (!targetSelector) {
+ for (j = 0; j < events.length; j += 1) {
+ var event = events[j];
+ if (!el.dom7Listeners) { el.dom7Listeners = {}; }
+ if (!el.dom7Listeners[event]) { el.dom7Listeners[event] = []; }
+ el.dom7Listeners[event].push({
+ listener: listener,
+ proxyListener: handleEvent,
+ });
+ el.addEventListener(event, handleEvent, capture);
+ }
+ } else {
+ // Live events
+ for (j = 0; j < events.length; j += 1) {
+ var event$1 = events[j];
+ if (!el.dom7LiveListeners) { el.dom7LiveListeners = {}; }
+ if (!el.dom7LiveListeners[event$1]) { el.dom7LiveListeners[event$1] = []; }
+ el.dom7LiveListeners[event$1].push({
+ listener: listener,
+ proxyListener: handleLiveEvent,
+ });
+ el.addEventListener(event$1, handleLiveEvent, capture);
+ }
+ }
+ }
+ return this;
+ }
+ function off() {
+ var this$1 = this;
+ var assign;
+
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+ var eventType = args[0];
+ var targetSelector = args[1];
+ var listener = args[2];
+ var capture = args[3];
+ if (typeof args[1] === 'function') {
+ (assign = args, eventType = assign[0], listener = assign[1], capture = assign[2]);
+ targetSelector = undefined;
+ }
+ if (!capture) { capture = false; }
+
+ var events = eventType.split(' ');
+ for (var i = 0; i < events.length; i += 1) {
+ var event = events[i];
+ for (var j = 0; j < this.length; j += 1) {
+ var el = this$1[j];
+ var handlers = (void 0);
+ if (!targetSelector && el.dom7Listeners) {
+ handlers = el.dom7Listeners[event];
+ } else if (targetSelector && el.dom7LiveListeners) {
+ handlers = el.dom7LiveListeners[event];
+ }
+ if (handlers && handlers.length) {
+ for (var k = handlers.length - 1; k >= 0; k -= 1) {
+ var handler = handlers[k];
+ if (listener && handler.listener === listener) {
+ el.removeEventListener(event, handler.proxyListener, capture);
+ handlers.splice(k, 1);
+ } else if (!listener) {
+ el.removeEventListener(event, handler.proxyListener, capture);
+ handlers.splice(k, 1);
+ }
+ }
+ }
+ }
+ }
+ return this;
+ }
+ function trigger() {
+ var this$1 = this;
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ var events = args[0].split(' ');
+ var eventData = args[1];
+ for (var i = 0; i < events.length; i += 1) {
+ var event = events[i];
+ for (var j = 0; j < this.length; j += 1) {
+ var el = this$1[j];
+ var evt = (void 0);
+ try {
+ evt = new win.CustomEvent(event, {
+ detail: eventData,
+ bubbles: true,
+ cancelable: true,
+ });
+ } catch (e) {
+ evt = doc.createEvent('Event');
+ evt.initEvent(event, true, true);
+ evt.detail = eventData;
+ }
+ // eslint-disable-next-line
+ el.dom7EventData = args.filter(function (data, dataIndex) { return dataIndex > 0; });
+ el.dispatchEvent(evt);
+ el.dom7EventData = [];
+ delete el.dom7EventData;
+ }
+ }
+ return this;
+ }
+ function transitionEnd(callback) {
+ var events = ['webkitTransitionEnd', 'transitionend'];
+ var dom = this;
+ var i;
+ function fireCallBack(e) {
+ /* jshint validthis:true */
+ if (e.target !== this) { return; }
+ callback.call(this, e);
+ for (i = 0; i < events.length; i += 1) {
+ dom.off(events[i], fireCallBack);
+ }
+ }
+ if (callback) {
+ for (i = 0; i < events.length; i += 1) {
+ dom.on(events[i], fireCallBack);
+ }
+ }
+ return this;
+ }
+ function outerWidth(includeMargins) {
+ if (this.length > 0) {
+ if (includeMargins) {
+ // eslint-disable-next-line
+ var styles = this.styles();
+ return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));
+ }
+ return this[0].offsetWidth;
+ }
+ return null;
+ }
+ function outerHeight(includeMargins) {
+ if (this.length > 0) {
+ if (includeMargins) {
+ // eslint-disable-next-line
+ var styles = this.styles();
+ return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));
+ }
+ return this[0].offsetHeight;
+ }
+ return null;
+ }
+ function offset() {
+ if (this.length > 0) {
+ var el = this[0];
+ var box = el.getBoundingClientRect();
+ var body = doc.body;
+ var clientTop = el.clientTop || body.clientTop || 0;
+ var clientLeft = el.clientLeft || body.clientLeft || 0;
+ var scrollTop = el === win ? win.scrollY : el.scrollTop;
+ var scrollLeft = el === win ? win.scrollX : el.scrollLeft;
+ return {
+ top: (box.top + scrollTop) - clientTop,
+ left: (box.left + scrollLeft) - clientLeft,
+ };
+ }
+
+ return null;
+ }
+ function styles() {
+ if (this[0]) { return win.getComputedStyle(this[0], null); }
+ return {};
+ }
+ function css(props, value) {
+ var this$1 = this;
+
+ var i;
+ if (arguments.length === 1) {
+ if (typeof props === 'string') {
+ if (this[0]) { return win.getComputedStyle(this[0], null).getPropertyValue(props); }
+ } else {
+ for (i = 0; i < this.length; i += 1) {
+ // eslint-disable-next-line
+ for (var prop in props) {
+ this$1[i].style[prop] = props[prop];
+ }
+ }
+ return this;
+ }
+ }
+ if (arguments.length === 2 && typeof props === 'string') {
+ for (i = 0; i < this.length; i += 1) {
+ this$1[i].style[props] = value;
+ }
+ return this;
+ }
+ return this;
+ }
+ // Iterate over the collection passing elements to `callback`
+ function each(callback) {
+ var this$1 = this;
+
+ // Don't bother continuing without a callback
+ if (!callback) { return this; }
+ // Iterate over the current collection
+ for (var i = 0; i < this.length; i += 1) {
+ // If the callback returns false
+ if (callback.call(this$1[i], i, this$1[i]) === false) {
+ // End the loop early
+ return this$1;
+ }
+ }
+ // Return `this` to allow chained DOM operations
+ return this;
+ }
+ // eslint-disable-next-line
+ function html(html) {
+ var this$1 = this;
+
+ if (typeof html === 'undefined') {
+ return this[0] ? this[0].innerHTML : undefined;
+ }
+
+ for (var i = 0; i < this.length; i += 1) {
+ this$1[i].innerHTML = html;
+ }
+ return this;
+ }
+ // eslint-disable-next-line
+ function text(text) {
+ var this$1 = this;
+
+ if (typeof text === 'undefined') {
+ if (this[0]) {
+ return this[0].textContent.trim();
+ }
+ return null;
+ }
+
+ for (var i = 0; i < this.length; i += 1) {
+ this$1[i].textContent = text;
+ }
+ return this;
+ }
+ function is(selector) {
+ var el = this[0];
+ var compareWith;
+ var i;
+ if (!el || typeof selector === 'undefined') { return false; }
+ if (typeof selector === 'string') {
+ if (el.matches) { return el.matches(selector); }
+ else if (el.webkitMatchesSelector) { return el.webkitMatchesSelector(selector); }
+ else if (el.msMatchesSelector) { return el.msMatchesSelector(selector); }
+
+ compareWith = $(selector);
+ for (i = 0; i < compareWith.length; i += 1) {
+ if (compareWith[i] === el) { return true; }
+ }
+ return false;
+ } else if (selector === doc) { return el === doc; }
+ else if (selector === win) { return el === win; }
+
+ if (selector.nodeType || selector instanceof Dom7) {
+ compareWith = selector.nodeType ? [selector] : selector;
+ for (i = 0; i < compareWith.length; i += 1) {
+ if (compareWith[i] === el) { return true; }
+ }
+ return false;
+ }
+ return false;
+ }
+ function index() {
+ var child = this[0];
+ var i;
+ if (child) {
+ i = 0;
+ // eslint-disable-next-line
+ while ((child = child.previousSibling) !== null) {
+ if (child.nodeType === 1) { i += 1; }
+ }
+ return i;
+ }
+ return undefined;
+ }
+ // eslint-disable-next-line
+ function eq(index) {
+ if (typeof index === 'undefined') { return this; }
+ var length = this.length;
+ var returnIndex;
+ if (index > length - 1) {
+ return new Dom7([]);
+ }
+ if (index < 0) {
+ returnIndex = length + index;
+ if (returnIndex < 0) { return new Dom7([]); }
+ return new Dom7([this[returnIndex]]);
+ }
+ return new Dom7([this[index]]);
+ }
+ function append() {
+ var this$1 = this;
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ var newChild;
+
+ for (var k = 0; k < args.length; k += 1) {
+ newChild = args[k];
+ for (var i = 0; i < this.length; i += 1) {
+ if (typeof newChild === 'string') {
+ var tempDiv = doc.createElement('div');
+ tempDiv.innerHTML = newChild;
+ while (tempDiv.firstChild) {
+ this$1[i].appendChild(tempDiv.firstChild);
+ }
+ } else if (newChild instanceof Dom7) {
+ for (var j = 0; j < newChild.length; j += 1) {
+ this$1[i].appendChild(newChild[j]);
+ }
+ } else {
+ this$1[i].appendChild(newChild);
+ }
+ }
+ }
+
+ return this;
+ }
+ function prepend(newChild) {
+ var this$1 = this;
+
+ var i;
+ var j;
+ for (i = 0; i < this.length; i += 1) {
+ if (typeof newChild === 'string') {
+ var tempDiv = doc.createElement('div');
+ tempDiv.innerHTML = newChild;
+ for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
+ this$1[i].insertBefore(tempDiv.childNodes[j], this$1[i].childNodes[0]);
+ }
+ } else if (newChild instanceof Dom7) {
+ for (j = 0; j < newChild.length; j += 1) {
+ this$1[i].insertBefore(newChild[j], this$1[i].childNodes[0]);
+ }
+ } else {
+ this$1[i].insertBefore(newChild, this$1[i].childNodes[0]);
+ }
+ }
+ return this;
+ }
+ function next(selector) {
+ if (this.length > 0) {
+ if (selector) {
+ if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
+ return new Dom7([this[0].nextElementSibling]);
+ }
+ return new Dom7([]);
+ }
+
+ if (this[0].nextElementSibling) { return new Dom7([this[0].nextElementSibling]); }
+ return new Dom7([]);
+ }
+ return new Dom7([]);
+ }
+ function nextAll(selector) {
+ var nextEls = [];
+ var el = this[0];
+ if (!el) { return new Dom7([]); }
+ while (el.nextElementSibling) {
+ var next = el.nextElementSibling; // eslint-disable-line
+ if (selector) {
+ if ($(next).is(selector)) { nextEls.push(next); }
+ } else { nextEls.push(next); }
+ el = next;
+ }
+ return new Dom7(nextEls);
+ }
+ function prev(selector) {
+ if (this.length > 0) {
+ var el = this[0];
+ if (selector) {
+ if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
+ return new Dom7([el.previousElementSibling]);
+ }
+ return new Dom7([]);
+ }
+
+ if (el.previousElementSibling) { return new Dom7([el.previousElementSibling]); }
+ return new Dom7([]);
+ }
+ return new Dom7([]);
+ }
+ function prevAll(selector) {
+ var prevEls = [];
+ var el = this[0];
+ if (!el) { return new Dom7([]); }
+ while (el.previousElementSibling) {
+ var prev = el.previousElementSibling; // eslint-disable-line
+ if (selector) {
+ if ($(prev).is(selector)) { prevEls.push(prev); }
+ } else { prevEls.push(prev); }
+ el = prev;
+ }
+ return new Dom7(prevEls);
+ }
+ function parent(selector) {
+ var this$1 = this;
+
+ var parents = []; // eslint-disable-line
+ for (var i = 0; i < this.length; i += 1) {
+ if (this$1[i].parentNode !== null) {
+ if (selector) {
+ if ($(this$1[i].parentNode).is(selector)) { parents.push(this$1[i].parentNode); }
+ } else {
+ parents.push(this$1[i].parentNode);
+ }
+ }
+ }
+ return $(unique(parents));
+ }
+ function parents(selector) {
+ var this$1 = this;
+
+ var parents = []; // eslint-disable-line
+ for (var i = 0; i < this.length; i += 1) {
+ var parent = this$1[i].parentNode; // eslint-disable-line
+ while (parent) {
+ if (selector) {
+ if ($(parent).is(selector)) { parents.push(parent); }
+ } else {
+ parents.push(parent);
+ }
+ parent = parent.parentNode;
+ }
+ }
+ return $(unique(parents));
+ }
+ function closest(selector) {
+ var closest = this; // eslint-disable-line
+ if (typeof selector === 'undefined') {
+ return new Dom7([]);
+ }
+ if (!closest.is(selector)) {
+ closest = closest.parents(selector).eq(0);
+ }
+ return closest;
+ }
+ function find(selector) {
+ var this$1 = this;
+
+ var foundElements = [];
+ for (var i = 0; i < this.length; i += 1) {
+ var found = this$1[i].querySelectorAll(selector);
+ for (var j = 0; j < found.length; j += 1) {
+ foundElements.push(found[j]);
+ }
+ }
+ return new Dom7(foundElements);
+ }
+ function children(selector) {
+ var this$1 = this;
+
+ var children = []; // eslint-disable-line
+ for (var i = 0; i < this.length; i += 1) {
+ var childNodes = this$1[i].childNodes;
+
+ for (var j = 0; j < childNodes.length; j += 1) {
+ if (!selector) {
+ if (childNodes[j].nodeType === 1) { children.push(childNodes[j]); }
+ } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {
+ children.push(childNodes[j]);
+ }
+ }
+ }
+ return new Dom7(unique(children));
+ }
+ function remove() {
+ var this$1 = this;
+
+ for (var i = 0; i < this.length; i += 1) {
+ if (this$1[i].parentNode) { this$1[i].parentNode.removeChild(this$1[i]); }
+ }
+ return this;
+ }
+ function add() {
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ var dom = this;
+ var i;
+ var j;
+ for (i = 0; i < args.length; i += 1) {
+ var toAdd = $(args[i]);
+ for (j = 0; j < toAdd.length; j += 1) {
+ dom[dom.length] = toAdd[j];
+ dom.length += 1;
+ }
+ }
+ return dom;
+ }
+
+ var Methods = {
+ addClass: addClass,
+ removeClass: removeClass,
+ hasClass: hasClass,
+ toggleClass: toggleClass,
+ attr: attr,
+ removeAttr: removeAttr,
+ data: data,
+ transform: transform,
+ transition: transition,
+ on: on,
+ off: off,
+ trigger: trigger,
+ transitionEnd: transitionEnd,
+ outerWidth: outerWidth,
+ outerHeight: outerHeight,
+ offset: offset,
+ css: css,
+ each: each,
+ html: html,
+ text: text,
+ is: is,
+ index: index,
+ eq: eq,
+ append: append,
+ prepend: prepend,
+ next: next,
+ nextAll: nextAll,
+ prev: prev,
+ prevAll: prevAll,
+ parent: parent,
+ parents: parents,
+ closest: closest,
+ find: find,
+ children: children,
+ remove: remove,
+ add: add,
+ styles: styles,
+ };
+
+ Object.keys(Methods).forEach(function (methodName) {
+ $.fn[methodName] = Methods[methodName];
+ });
+
+ var Utils = {
+ deleteProps: function deleteProps(obj) {
+ var object = obj;
+ Object.keys(object).forEach(function (key) {
+ try {
+ object[key] = null;
+ } catch (e) {
+ // no getter for object
+ }
+ try {
+ delete object[key];
+ } catch (e) {
+ // something got wrong
+ }
+ });
+ },
+ nextTick: function nextTick(callback, delay) {
+ if ( delay === void 0 ) delay = 0;
+
+ return setTimeout(callback, delay);
+ },
+ now: function now() {
+ return Date.now();
+ },
+ getTranslate: function getTranslate(el, axis) {
+ if ( axis === void 0 ) axis = 'x';
+
+ var matrix;
+ var curTransform;
+ var transformMatrix;
+
+ var curStyle = win.getComputedStyle(el, null);
+
+ if (win.WebKitCSSMatrix) {
+ curTransform = curStyle.transform || curStyle.webkitTransform;
+ if (curTransform.split(',').length > 6) {
+ curTransform = curTransform.split(', ').map(function (a) { return a.replace(',', '.'); }).join(', ');
+ }
+ // Some old versions of Webkit choke when 'none' is passed; pass
+ // empty string instead in this case
+ transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
+ } else {
+ transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
+ matrix = transformMatrix.toString().split(',');
+ }
+
+ if (axis === 'x') {
+ // Latest Chrome and webkits Fix
+ if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m41; }
+ // Crazy IE10 Matrix
+ else if (matrix.length === 16) { curTransform = parseFloat(matrix[12]); }
+ // Normal Browsers
+ else { curTransform = parseFloat(matrix[4]); }
+ }
+ if (axis === 'y') {
+ // Latest Chrome and webkits Fix
+ if (win.WebKitCSSMatrix) { curTransform = transformMatrix.m42; }
+ // Crazy IE10 Matrix
+ else if (matrix.length === 16) { curTransform = parseFloat(matrix[13]); }
+ // Normal Browsers
+ else { curTransform = parseFloat(matrix[5]); }
+ }
+ return curTransform || 0;
+ },
+ parseUrlQuery: function parseUrlQuery(url) {
+ var query = {};
+ var urlToParse = url || win.location.href;
+ var i;
+ var params;
+ var param;
+ var length;
+ if (typeof urlToParse === 'string' && urlToParse.length) {
+ urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
+ params = urlToParse.split('&').filter(function (paramsPart) { return paramsPart !== ''; });
+ length = params.length;
+
+ for (i = 0; i < length; i += 1) {
+ param = params[i].replace(/#\S+/g, '').split('=');
+ query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
+ }
+ }
+ return query;
+ },
+ isObject: function isObject(o) {
+ return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;
+ },
+ extend: function extend() {
+ var args = [], len$1 = arguments.length;
+ while ( len$1-- ) args[ len$1 ] = arguments[ len$1 ];
+
+ var to = Object(args[0]);
+ for (var i = 1; i < args.length; i += 1) {
+ var nextSource = args[i];
+ if (nextSource !== undefined && nextSource !== null) {
+ var keysArray = Object.keys(Object(nextSource));
+ for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
+ var nextKey = keysArray[nextIndex];
+ var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
+ if (desc !== undefined && desc.enumerable) {
+ if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
+ Utils.extend(to[nextKey], nextSource[nextKey]);
+ } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
+ to[nextKey] = {};
+ Utils.extend(to[nextKey], nextSource[nextKey]);
+ } else {
+ to[nextKey] = nextSource[nextKey];
+ }
+ }
+ }
+ }
+ }
+ return to;
+ },
+ };
+
+ var Support = (function Support() {
+ var testDiv = doc.createElement('div');
+ return {
+ touch: (win.Modernizr && win.Modernizr.touch === true) || (function checkTouch() {
+ return !!(('ontouchstart' in win) || (win.DocumentTouch && doc instanceof win.DocumentTouch));
+ }()),
+
+ pointerEvents: !!(win.navigator.pointerEnabled || win.PointerEvent),
+ prefixedPointerEvents: !!win.navigator.msPointerEnabled,
+
+ transition: (function checkTransition() {
+ var style = testDiv.style;
+ return ('transition' in style || 'webkitTransition' in style || 'MozTransition' in style);
+ }()),
+ transforms3d: (win.Modernizr && win.Modernizr.csstransforms3d === true) || (function checkTransforms3d() {
+ var style = testDiv.style;
+ return ('webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style);
+ }()),
+
+ flexbox: (function checkFlexbox() {
+ var style = testDiv.style;
+ var styles = ('alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient').split(' ');
+ for (var i = 0; i < styles.length; i += 1) {
+ if (styles[i] in style) { return true; }
+ }
+ return false;
+ }()),
+
+ observer: (function checkObserver() {
+ return ('MutationObserver' in win || 'WebkitMutationObserver' in win);
+ }()),
+
+ passiveListener: (function checkPassiveListener() {
+ var supportsPassive = false;
+ try {
+ var opts = Object.defineProperty({}, 'passive', {
+ // eslint-disable-next-line
+ get: function get() {
+ supportsPassive = true;
+ },
+ });
+ win.addEventListener('testPassiveListener', null, opts);
+ } catch (e) {
+ // No support
+ }
+ return supportsPassive;
+ }()),
+
+ gestures: (function checkGestures() {
+ return 'ongesturestart' in win;
+ }()),
+ };
+ }());
+
+ var SwiperClass = function SwiperClass(params) {
+ if ( params === void 0 ) params = {};
+
+ var self = this;
+ self.params = params;
+
+ // Events
+ self.eventsListeners = {};
+
+ if (self.params && self.params.on) {
+ Object.keys(self.params.on).forEach(function (eventName) {
+ self.on(eventName, self.params.on[eventName]);
+ });
+ }
+ };
+
+ var staticAccessors = { components: { configurable: true } };
+ SwiperClass.prototype.on = function on (events, handler, priority) {
+ var self = this;
+ if (typeof handler !== 'function') { return self; }
+ var method = priority ? 'unshift' : 'push';
+ events.split(' ').forEach(function (event) {
+ if (!self.eventsListeners[event]) { self.eventsListeners[event] = []; }
+ self.eventsListeners[event][method](handler);
+ });
+ return self;
+ };
+ SwiperClass.prototype.once = function once (events, handler, priority) {
+ var self = this;
+ if (typeof handler !== 'function') { return self; }
+ function onceHandler() {
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ handler.apply(self, args);
+ self.off(events, onceHandler);
+ }
+ return self.on(events, onceHandler, priority);
+ };
+ SwiperClass.prototype.off = function off (events, handler) {
+ var self = this;
+ if (!self.eventsListeners) { return self; }
+ events.split(' ').forEach(function (event) {
+ if (typeof handler === 'undefined') {
+ self.eventsListeners[event] = [];
+ } else {
+ self.eventsListeners[event].forEach(function (eventHandler, index) {
+ if (eventHandler === handler) {
+ self.eventsListeners[event].splice(index, 1);
+ }
+ });
+ }
+ });
+ return self;
+ };
+ SwiperClass.prototype.emit = function emit () {
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+
+ var self = this;
+ if (!self.eventsListeners) { return self; }
+ var events;
+ var data;
+ var context;
+ if (typeof args[0] === 'string' || Array.isArray(args[0])) {
+ events = args[0];
+ data = args.slice(1, args.length);
+ context = self;
+ } else {
+ events = args[0].events;
+ data = args[0].data;
+ context = args[0].context || self;
+ }
+ var eventsArray = Array.isArray(events) ? events : events.split(' ');
+ eventsArray.forEach(function (event) {
+ if (self.eventsListeners && self.eventsListeners[event]) {
+ var handlers = [];
+ self.eventsListeners[event].forEach(function (eventHandler) {
+ handlers.push(eventHandler);
+ });
+ handlers.forEach(function (eventHandler) {
+ eventHandler.apply(context, data);
+ });
+ }
+ });
+ return self;
+ };
+ SwiperClass.prototype.useModulesParams = function useModulesParams (instanceParams) {
+ var instance = this;
+ if (!instance.modules) { return; }
+ Object.keys(instance.modules).forEach(function (moduleName) {
+ var module = instance.modules[moduleName];
+ // Extend params
+ if (module.params) {
+ Utils.extend(instanceParams, module.params);
+ }
+ });
+ };
+ SwiperClass.prototype.useModules = function useModules (modulesParams) {
+ if ( modulesParams === void 0 ) modulesParams = {};
+
+ var instance = this;
+ if (!instance.modules) { return; }
+ Object.keys(instance.modules).forEach(function (moduleName) {
+ var module = instance.modules[moduleName];
+ var moduleParams = modulesParams[moduleName] || {};
+ // Extend instance methods and props
+ if (module.instance) {
+ Object.keys(module.instance).forEach(function (modulePropName) {
+ var moduleProp = module.instance[modulePropName];
+ if (typeof moduleProp === 'function') {
+ instance[modulePropName] = moduleProp.bind(instance);
+ } else {
+ instance[modulePropName] = moduleProp;
+ }
+ });
+ }
+ // Add event listeners
+ if (module.on && instance.on) {
+ Object.keys(module.on).forEach(function (moduleEventName) {
+ instance.on(moduleEventName, module.on[moduleEventName]);
+ });
+ }
+
+ // Module create callback
+ if (module.create) {
+ module.create.bind(instance)(moduleParams);
+ }
+ });
+ };
+ staticAccessors.components.set = function (components) {
+ var Class = this;
+ if (!Class.use) { return; }
+ Class.use(components);
+ };
+ SwiperClass.installModule = function installModule (module) {
+ var params = [], len = arguments.length - 1;
+ while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];
+
+ var Class = this;
+ if (!Class.prototype.modules) { Class.prototype.modules = {}; }
+ var name = module.name || (((Object.keys(Class.prototype.modules).length) + "_" + (Utils.now())));
+ Class.prototype.modules[name] = module;
+ // Prototype
+ if (module.proto) {
+ Object.keys(module.proto).forEach(function (key) {
+ Class.prototype[key] = module.proto[key];
+ });
+ }
+ // Class
+ if (module.static) {
+ Object.keys(module.static).forEach(function (key) {
+ Class[key] = module.static[key];
+ });
+ }
+ // Callback
+ if (module.install) {
+ module.install.apply(Class, params);
+ }
+ return Class;
+ };
+ SwiperClass.use = function use (module) {
+ var params = [], len = arguments.length - 1;
+ while ( len-- > 0 ) params[ len ] = arguments[ len + 1 ];
+
+ var Class = this;
+ if (Array.isArray(module)) {
+ module.forEach(function (m) { return Class.installModule(m); });
+ return Class;
+ }
+ return Class.installModule.apply(Class, [ module ].concat( params ));
+ };
+
+ Object.defineProperties( SwiperClass, staticAccessors );
+
+ function updateSize () {
+ var swiper = this;
+ var width;
+ var height;
+ var $el = swiper.$el;
+ if (typeof swiper.params.width !== 'undefined') {
+ width = swiper.params.width;
+ } else {
+ width = $el[0].clientWidth;
+ }
+ if (typeof swiper.params.height !== 'undefined') {
+ height = swiper.params.height;
+ } else {
+ height = $el[0].clientHeight;
+ }
+ if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {
+ return;
+ }
+
+ // Subtract paddings
+ width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
+ height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
+
+ Utils.extend(swiper, {
+ width: width,
+ height: height,
+ size: swiper.isHorizontal() ? width : height,
+ });
+ }
+
+ function updateSlides () {
+ var swiper = this;
+ var params = swiper.params;
+
+ var $wrapperEl = swiper.$wrapperEl;
+ var swiperSize = swiper.size;
+ var rtl = swiper.rtlTranslate;
+ var wrongRTL = swiper.wrongRTL;
+ var isVirtual = swiper.virtual && params.virtual.enabled;
+ var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
+ var slides = $wrapperEl.children(("." + (swiper.params.slideClass)));
+ var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
+ var snapGrid = [];
+ var slidesGrid = [];
+ var slidesSizesGrid = [];
+
+ var offsetBefore = params.slidesOffsetBefore;
+ if (typeof offsetBefore === 'function') {
+ offsetBefore = params.slidesOffsetBefore.call(swiper);
+ }
+
+ var offsetAfter = params.slidesOffsetAfter;
+ if (typeof offsetAfter === 'function') {
+ offsetAfter = params.slidesOffsetAfter.call(swiper);
+ }
+
+ var previousSnapGridLength = swiper.snapGrid.length;
+ var previousSlidesGridLength = swiper.snapGrid.length;
+
+ var spaceBetween = params.spaceBetween;
+ var slidePosition = -offsetBefore;
+ var prevSlideSize = 0;
+ var index = 0;
+ if (typeof swiperSize === 'undefined') {
+ return;
+ }
+ if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
+ spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;
+ }
+
+ swiper.virtualSize = -spaceBetween;
+
+ // reset margins
+ if (rtl) { slides.css({ marginLeft: '', marginTop: '' }); }
+ else { slides.css({ marginRight: '', marginBottom: '' }); }
+
+ var slidesNumberEvenToRows;
+ if (params.slidesPerColumn > 1) {
+ if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
+ slidesNumberEvenToRows = slidesLength;
+ } else {
+ slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
+ }
+ if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
+ slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
+ }
+ }
+
+ // Calc slides
+ var slideSize;
+ var slidesPerColumn = params.slidesPerColumn;
+ var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
+ var numFullColumns = slidesPerRow - ((params.slidesPerColumn * slidesPerRow) - slidesLength);
+ for (var i = 0; i < slidesLength; i += 1) {
+ slideSize = 0;
+ var slide = slides.eq(i);
+ if (params.slidesPerColumn > 1) {
+ // Set slides order
+ var newSlideOrderIndex = (void 0);
+ var column = (void 0);
+ var row = (void 0);
+ if (params.slidesPerColumnFill === 'column') {
+ column = Math.floor(i / slidesPerColumn);
+ row = i - (column * slidesPerColumn);
+ if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) {
+ row += 1;
+ if (row >= slidesPerColumn) {
+ row = 0;
+ column += 1;
+ }
+ }
+ newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn);
+ slide
+ .css({
+ '-webkit-box-ordinal-group': newSlideOrderIndex,
+ '-moz-box-ordinal-group': newSlideOrderIndex,
+ '-ms-flex-order': newSlideOrderIndex,
+ '-webkit-order': newSlideOrderIndex,
+ order: newSlideOrderIndex,
+ });
+ } else {
+ row = Math.floor(i / slidesPerRow);
+ column = i - (row * slidesPerRow);
+ }
+ slide
+ .css(
+ ("margin-" + (swiper.isHorizontal() ? 'top' : 'left')),
+ (row !== 0 && params.spaceBetween) && (((params.spaceBetween) + "px"))
+ )
+ .attr('data-swiper-column', column)
+ .attr('data-swiper-row', row);
+ }
+ if (slide.css('display') === 'none') { continue; } // eslint-disable-line
+
+ if (params.slidesPerView === 'auto') {
+ var slideStyles = win.getComputedStyle(slide[0], null);
+ var currentTransform = slide[0].style.transform;
+ var currentWebKitTransform = slide[0].style.webkitTransform;
+ if (currentTransform) {
+ slide[0].style.transform = 'none';
+ }
+ if (currentWebKitTransform) {
+ slide[0].style.webkitTransform = 'none';
+ }
+ if (swiper.isHorizontal()) {
+ slideSize = slide[0].getBoundingClientRect().width +
+ parseFloat(slideStyles.getPropertyValue('margin-left')) +
+ parseFloat(slideStyles.getPropertyValue('margin-right'));
+ } else {
+ slideSize = slide[0].getBoundingClientRect().height +
+ parseFloat(slideStyles.getPropertyValue('margin-top')) +
+ parseFloat(slideStyles.getPropertyValue('margin-bottom'));
+ }
+ if (currentTransform) {
+ slide[0].style.transform = currentTransform;
+ }
+ if (currentWebKitTransform) {
+ slide[0].style.webkitTransform = currentWebKitTransform;
+ }
+ if (params.roundLengths) { slideSize = Math.floor(slideSize); }
+ } else {
+ slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView;
+ if (params.roundLengths) { slideSize = Math.floor(slideSize); }
+
+ if (slides[i]) {
+ if (swiper.isHorizontal()) {
+ slides[i].style.width = slideSize + "px";
+ } else {
+ slides[i].style.height = slideSize + "px";
+ }
+ }
+ }
+ if (slides[i]) {
+ slides[i].swiperSlideSize = slideSize;
+ }
+ slidesSizesGrid.push(slideSize);
+
+
+ if (params.centeredSlides) {
+ slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween;
+ if (prevSlideSize === 0 && i !== 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }
+ if (i === 0) { slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; }
+ if (Math.abs(slidePosition) < 1 / 1000) { slidePosition = 0; }
+ if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }
+ if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }
+ slidesGrid.push(slidePosition);
+ } else {
+ if (params.roundLengths) { slidePosition = Math.floor(slidePosition); }
+ if ((index) % params.slidesPerGroup === 0) { snapGrid.push(slidePosition); }
+ slidesGrid.push(slidePosition);
+ slidePosition = slidePosition + slideSize + spaceBetween;
+ }
+
+ swiper.virtualSize += slideSize + spaceBetween;
+
+ prevSlideSize = slideSize;
+
+ index += 1;
+ }
+ swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
+ var newSlidesGrid;
+
+ if (
+ rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
+ $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") });
+ }
+ if (!Support.flexbox || params.setWrapperSize) {
+ if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
+ else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
+ }
+
+ if (params.slidesPerColumn > 1) {
+ swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
+ swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
+ if (swiper.isHorizontal()) { $wrapperEl.css({ width: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
+ else { $wrapperEl.css({ height: ((swiper.virtualSize + params.spaceBetween) + "px") }); }
+ if (params.centeredSlides) {
+ newSlidesGrid = [];
+ for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {
+ var slidesGridItem = snapGrid[i$1];
+ if (params.roundLengths) { slidesGridItem = Math.floor(slidesGridItem); }
+ if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) { newSlidesGrid.push(slidesGridItem); }
+ }
+ snapGrid = newSlidesGrid;
+ }
+ }
+
+ // Remove last grid elements depending on width
+ if (!params.centeredSlides) {
+ newSlidesGrid = [];
+ for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {
+ var slidesGridItem$1 = snapGrid[i$2];
+ if (params.roundLengths) { slidesGridItem$1 = Math.floor(slidesGridItem$1); }
+ if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {
+ newSlidesGrid.push(slidesGridItem$1);
+ }
+ }
+ snapGrid = newSlidesGrid;
+ if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
+ snapGrid.push(swiper.virtualSize - swiperSize);
+ }
+ }
+ if (snapGrid.length === 0) { snapGrid = [0]; }
+
+ if (params.spaceBetween !== 0) {
+ if (swiper.isHorizontal()) {
+ if (rtl) { slides.css({ marginLeft: (spaceBetween + "px") }); }
+ else { slides.css({ marginRight: (spaceBetween + "px") }); }
+ } else { slides.css({ marginBottom: (spaceBetween + "px") }); }
+ }
+
+ Utils.extend(swiper, {
+ slides: slides,
+ snapGrid: snapGrid,
+ slidesGrid: slidesGrid,
+ slidesSizesGrid: slidesSizesGrid,
+ });
+
+ if (slidesLength !== previousSlidesLength) {
+ swiper.emit('slidesLengthChange');
+ }
+ if (snapGrid.length !== previousSnapGridLength) {
+ if (swiper.params.watchOverflow) { swiper.checkOverflow(); }
+ swiper.emit('snapGridLengthChange');
+ }
+ if (slidesGrid.length !== previousSlidesGridLength) {
+ swiper.emit('slidesGridLengthChange');
+ }
+
+ if (params.watchSlidesProgress || params.watchSlidesVisibility) {
+ swiper.updateSlidesOffset();
+ }
+ }
+
+ function updateAutoHeight (speed) {
+ var swiper = this;
+ var activeSlides = [];
+ var newHeight = 0;
+ var i;
+ if (typeof speed === 'number') {
+ swiper.setTransition(speed);
+ } else if (speed === true) {
+ swiper.setTransition(swiper.params.speed);
+ }
+ // Find slides currently in view
+ if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
+ for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
+ var index = swiper.activeIndex + i;
+ if (index > swiper.slides.length) { break; }
+ activeSlides.push(swiper.slides.eq(index)[0]);
+ }
+ } else {
+ activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
+ }
+
+ // Find new height from highest slide in view
+ for (i = 0; i < activeSlides.length; i += 1) {
+ if (typeof activeSlides[i] !== 'undefined') {
+ var height = activeSlides[i].offsetHeight;
+ newHeight = height > newHeight ? height : newHeight;
+ }
+ }
+
+ // Update Height
+ if (newHeight) { swiper.$wrapperEl.css('height', (newHeight + "px")); }
+ }
+
+ function updateSlidesOffset () {
+ var swiper = this;
+ var slides = swiper.slides;
+ for (var i = 0; i < slides.length; i += 1) {
+ slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
+ }
+ }
+
+ function updateSlidesProgress (translate) {
+ if ( translate === void 0 ) translate = (this && this.translate) || 0;
+
+ var swiper = this;
+ var params = swiper.params;
+
+ var slides = swiper.slides;
+ var rtl = swiper.rtlTranslate;
+
+ if (slides.length === 0) { return; }
+ if (typeof slides[0].swiperSlideOffset === 'undefined') { swiper.updateSlidesOffset(); }
+
+ var offsetCenter = -translate;
+ if (rtl) { offsetCenter = translate; }
+
+ // Visible Slides
+ slides.removeClass(params.slideVisibleClass);
+
+ for (var i = 0; i < slides.length; i += 1) {
+ var slide = slides[i];
+ var slideProgress =
+ (
+ (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset
+ ) / (slide.swiperSlideSize + params.spaceBetween);
+ if (params.watchSlidesVisibility) {
+ var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
+ var slideAfter = slideBefore + swiper.slidesSizesGrid[i];
+ var isVisible =
+ (slideBefore >= 0 && slideBefore < swiper.size) ||
+ (slideAfter > 0 && slideAfter <= swiper.size) ||
+ (slideBefore <= 0 && slideAfter >= swiper.size);
+ if (isVisible) {
+ slides.eq(i).addClass(params.slideVisibleClass);
+ }
+ }
+ slide.progress = rtl ? -slideProgress : slideProgress;
+ }
+ }
+
+ function updateProgress (translate) {
+ if ( translate === void 0 ) translate = (this && this.translate) || 0;
+
+ var swiper = this;
+ var params = swiper.params;
+
+ var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
+ var progress = swiper.progress;
+ var isBeginning = swiper.isBeginning;
+ var isEnd = swiper.isEnd;
+ var wasBeginning = isBeginning;
+ var wasEnd = isEnd;
+ if (translatesDiff === 0) {
+ progress = 0;
+ isBeginning = true;
+ isEnd = true;
+ } else {
+ progress = (translate - swiper.minTranslate()) / (translatesDiff);
+ isBeginning = progress <= 0;
+ isEnd = progress >= 1;
+ }
+ Utils.extend(swiper, {
+ progress: progress,
+ isBeginning: isBeginning,
+ isEnd: isEnd,
+ });
+
+ if (params.watchSlidesProgress || params.watchSlidesVisibility) { swiper.updateSlidesProgress(translate); }
+
+ if (isBeginning && !wasBeginning) {
+ swiper.emit('reachBeginning toEdge');
+ }
+ if (isEnd && !wasEnd) {
+ swiper.emit('reachEnd toEdge');
+ }
+ if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {
+ swiper.emit('fromEdge');
+ }
+
+ swiper.emit('progress', progress);
+ }
+
+ function updateSlidesClasses () {
+ var swiper = this;
+
+ var slides = swiper.slides;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ var activeIndex = swiper.activeIndex;
+ var realIndex = swiper.realIndex;
+ var isVirtual = swiper.virtual && params.virtual.enabled;
+
+ slides.removeClass(((params.slideActiveClass) + " " + (params.slideNextClass) + " " + (params.slidePrevClass) + " " + (params.slideDuplicateActiveClass) + " " + (params.slideDuplicateNextClass) + " " + (params.slideDuplicatePrevClass)));
+
+ var activeSlide;
+ if (isVirtual) {
+ activeSlide = swiper.$wrapperEl.find(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + activeIndex + "\"]"));
+ } else {
+ activeSlide = slides.eq(activeIndex);
+ }
+
+ // Active classes
+ activeSlide.addClass(params.slideActiveClass);
+
+ if (params.loop) {
+ // Duplicate to all looped slides
+ if (activeSlide.hasClass(params.slideDuplicateClass)) {
+ $wrapperEl
+ .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + realIndex + "\"]"))
+ .addClass(params.slideDuplicateActiveClass);
+ } else {
+ $wrapperEl
+ .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]"))
+ .addClass(params.slideDuplicateActiveClass);
+ }
+ }
+ // Next Slide
+ var nextSlide = activeSlide.nextAll(("." + (params.slideClass))).eq(0).addClass(params.slideNextClass);
+ if (params.loop && nextSlide.length === 0) {
+ nextSlide = slides.eq(0);
+ nextSlide.addClass(params.slideNextClass);
+ }
+ // Prev Slide
+ var prevSlide = activeSlide.prevAll(("." + (params.slideClass))).eq(0).addClass(params.slidePrevClass);
+ if (params.loop && prevSlide.length === 0) {
+ prevSlide = slides.eq(-1);
+ prevSlide.addClass(params.slidePrevClass);
+ }
+ if (params.loop) {
+ // Duplicate to all looped slides
+ if (nextSlide.hasClass(params.slideDuplicateClass)) {
+ $wrapperEl
+ .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + (nextSlide.attr('data-swiper-slide-index')) + "\"]"))
+ .addClass(params.slideDuplicateNextClass);
+ } else {
+ $wrapperEl
+ .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + (nextSlide.attr('data-swiper-slide-index')) + "\"]"))
+ .addClass(params.slideDuplicateNextClass);
+ }
+ if (prevSlide.hasClass(params.slideDuplicateClass)) {
+ $wrapperEl
+ .children(("." + (params.slideClass) + ":not(." + (params.slideDuplicateClass) + ")[data-swiper-slide-index=\"" + (prevSlide.attr('data-swiper-slide-index')) + "\"]"))
+ .addClass(params.slideDuplicatePrevClass);
+ } else {
+ $wrapperEl
+ .children(("." + (params.slideClass) + "." + (params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + (prevSlide.attr('data-swiper-slide-index')) + "\"]"))
+ .addClass(params.slideDuplicatePrevClass);
+ }
+ }
+ }
+
+ function updateActiveIndex (newActiveIndex) {
+ var swiper = this;
+ var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
+ var slidesGrid = swiper.slidesGrid;
+ var snapGrid = swiper.snapGrid;
+ var params = swiper.params;
+ var previousIndex = swiper.activeIndex;
+ var previousRealIndex = swiper.realIndex;
+ var previousSnapIndex = swiper.snapIndex;
+ var activeIndex = newActiveIndex;
+ var snapIndex;
+ if (typeof activeIndex === 'undefined') {
+ for (var i = 0; i < slidesGrid.length; i += 1) {
+ if (typeof slidesGrid[i + 1] !== 'undefined') {
+ if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) {
+ activeIndex = i;
+ } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
+ activeIndex = i + 1;
+ }
+ } else if (translate >= slidesGrid[i]) {
+ activeIndex = i;
+ }
+ }
+ // Normalize slideIndex
+ if (params.normalizeSlideIndex) {
+ if (activeIndex < 0 || typeof activeIndex === 'undefined') { activeIndex = 0; }
+ }
+ }
+ if (snapGrid.indexOf(translate) >= 0) {
+ snapIndex = snapGrid.indexOf(translate);
+ } else {
+ snapIndex = Math.floor(activeIndex / params.slidesPerGroup);
+ }
+ if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }
+ if (activeIndex === previousIndex) {
+ if (snapIndex !== previousSnapIndex) {
+ swiper.snapIndex = snapIndex;
+ swiper.emit('snapIndexChange');
+ }
+ return;
+ }
+
+ // Get real index
+ var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
+
+ Utils.extend(swiper, {
+ snapIndex: snapIndex,
+ realIndex: realIndex,
+ previousIndex: previousIndex,
+ activeIndex: activeIndex,
+ });
+ swiper.emit('activeIndexChange');
+ swiper.emit('snapIndexChange');
+ if (previousRealIndex !== realIndex) {
+ swiper.emit('realIndexChange');
+ }
+ swiper.emit('slideChange');
+ }
+
+ function updateClickedSlide (e) {
+ var swiper = this;
+ var params = swiper.params;
+ var slide = $(e.target).closest(("." + (params.slideClass)))[0];
+ var slideFound = false;
+ if (slide) {
+ for (var i = 0; i < swiper.slides.length; i += 1) {
+ if (swiper.slides[i] === slide) { slideFound = true; }
+ }
+ }
+
+ if (slide && slideFound) {
+ swiper.clickedSlide = slide;
+ if (swiper.virtual && swiper.params.virtual.enabled) {
+ swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
+ } else {
+ swiper.clickedIndex = $(slide).index();
+ }
+ } else {
+ swiper.clickedSlide = undefined;
+ swiper.clickedIndex = undefined;
+ return;
+ }
+ if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
+ swiper.slideToClickedSlide();
+ }
+ }
+
+ var update = {
+ updateSize: updateSize,
+ updateSlides: updateSlides,
+ updateAutoHeight: updateAutoHeight,
+ updateSlidesOffset: updateSlidesOffset,
+ updateSlidesProgress: updateSlidesProgress,
+ updateProgress: updateProgress,
+ updateSlidesClasses: updateSlidesClasses,
+ updateActiveIndex: updateActiveIndex,
+ updateClickedSlide: updateClickedSlide,
+ };
+
+ function getTranslate (axis) {
+ if ( axis === void 0 ) axis = this.isHorizontal() ? 'x' : 'y';
+
+ var swiper = this;
+
+ var params = swiper.params;
+ var rtl = swiper.rtlTranslate;
+ var translate = swiper.translate;
+ var $wrapperEl = swiper.$wrapperEl;
+
+ if (params.virtualTranslate) {
+ return rtl ? -translate : translate;
+ }
+
+ var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
+ if (rtl) { currentTranslate = -currentTranslate; }
+
+ return currentTranslate || 0;
+ }
+
+ function setTranslate (translate, byController) {
+ var swiper = this;
+ var rtl = swiper.rtlTranslate;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ var progress = swiper.progress;
+ var x = 0;
+ var y = 0;
+ var z = 0;
+
+ if (swiper.isHorizontal()) {
+ x = rtl ? -translate : translate;
+ } else {
+ y = translate;
+ }
+
+ if (params.roundLengths) {
+ x = Math.floor(x);
+ y = Math.floor(y);
+ }
+
+ if (!params.virtualTranslate) {
+ if (Support.transforms3d) { $wrapperEl.transform(("translate3d(" + x + "px, " + y + "px, " + z + "px)")); }
+ else { $wrapperEl.transform(("translate(" + x + "px, " + y + "px)")); }
+ }
+ swiper.previousTranslate = swiper.translate;
+ swiper.translate = swiper.isHorizontal() ? x : y;
+
+ // Check if we need to update progress
+ var newProgress;
+ var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
+ if (translatesDiff === 0) {
+ newProgress = 0;
+ } else {
+ newProgress = (translate - swiper.minTranslate()) / (translatesDiff);
+ }
+ if (newProgress !== progress) {
+ swiper.updateProgress(translate);
+ }
+
+ swiper.emit('setTranslate', swiper.translate, byController);
+ }
+
+ function minTranslate () {
+ return (-this.snapGrid[0]);
+ }
+
+ function maxTranslate () {
+ return (-this.snapGrid[this.snapGrid.length - 1]);
+ }
+
+ var translate = {
+ getTranslate: getTranslate,
+ setTranslate: setTranslate,
+ minTranslate: minTranslate,
+ maxTranslate: maxTranslate,
+ };
+
+ function setTransition (duration, byController) {
+ var swiper = this;
+
+ swiper.$wrapperEl.transition(duration);
+
+ swiper.emit('setTransition', duration, byController);
+ }
+
+ function transitionStart (runCallbacks, direction) {
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var activeIndex = swiper.activeIndex;
+ var params = swiper.params;
+ var previousIndex = swiper.previousIndex;
+ if (params.autoHeight) {
+ swiper.updateAutoHeight();
+ }
+
+ var dir = direction;
+ if (!dir) {
+ if (activeIndex > previousIndex) { dir = 'next'; }
+ else if (activeIndex < previousIndex) { dir = 'prev'; }
+ else { dir = 'reset'; }
+ }
+
+ swiper.emit('transitionStart');
+
+ if (runCallbacks && activeIndex !== previousIndex) {
+ if (dir === 'reset') {
+ swiper.emit('slideResetTransitionStart');
+ return;
+ }
+ swiper.emit('slideChangeTransitionStart');
+ if (dir === 'next') {
+ swiper.emit('slideNextTransitionStart');
+ } else {
+ swiper.emit('slidePrevTransitionStart');
+ }
+ }
+ }
+
+ function transitionEnd$1 (runCallbacks, direction) {
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var activeIndex = swiper.activeIndex;
+ var previousIndex = swiper.previousIndex;
+ swiper.animating = false;
+ swiper.setTransition(0);
+
+ var dir = direction;
+ if (!dir) {
+ if (activeIndex > previousIndex) { dir = 'next'; }
+ else if (activeIndex < previousIndex) { dir = 'prev'; }
+ else { dir = 'reset'; }
+ }
+
+ swiper.emit('transitionEnd');
+
+ if (runCallbacks && activeIndex !== previousIndex) {
+ if (dir === 'reset') {
+ swiper.emit('slideResetTransitionEnd');
+ return;
+ }
+ swiper.emit('slideChangeTransitionEnd');
+ if (dir === 'next') {
+ swiper.emit('slideNextTransitionEnd');
+ } else {
+ swiper.emit('slidePrevTransitionEnd');
+ }
+ }
+ }
+
+ var transition$1 = {
+ setTransition: setTransition,
+ transitionStart: transitionStart,
+ transitionEnd: transitionEnd$1,
+ };
+
+ function slideTo (index, speed, runCallbacks, internal) {
+ if ( index === void 0 ) index = 0;
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var slideIndex = index;
+ if (slideIndex < 0) { slideIndex = 0; }
+
+ var params = swiper.params;
+ var snapGrid = swiper.snapGrid;
+ var slidesGrid = swiper.slidesGrid;
+ var previousIndex = swiper.previousIndex;
+ var activeIndex = swiper.activeIndex;
+ var rtl = swiper.rtlTranslate;
+ if (swiper.animating && params.preventIntercationOnTransition) {
+ return false;
+ }
+
+ var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);
+ if (snapIndex >= snapGrid.length) { snapIndex = snapGrid.length - 1; }
+
+ if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
+ swiper.emit('beforeSlideChangeStart');
+ }
+
+ var translate = -snapGrid[snapIndex];
+
+ // Update progress
+ swiper.updateProgress(translate);
+
+ // Normalize slideIndex
+ if (params.normalizeSlideIndex) {
+ for (var i = 0; i < slidesGrid.length; i += 1) {
+ if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
+ slideIndex = i;
+ }
+ }
+ }
+ // Directions locks
+ if (swiper.initialized && slideIndex !== activeIndex) {
+ if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
+ return false;
+ }
+ if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
+ if ((activeIndex || 0) !== slideIndex) { return false; }
+ }
+ }
+
+ var direction;
+ if (slideIndex > activeIndex) { direction = 'next'; }
+ else if (slideIndex < activeIndex) { direction = 'prev'; }
+ else { direction = 'reset'; }
+
+
+ // Update Index
+ if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {
+ swiper.updateActiveIndex(slideIndex);
+ // Update Height
+ if (params.autoHeight) {
+ swiper.updateAutoHeight();
+ }
+ swiper.updateSlidesClasses();
+ if (params.effect !== 'slide') {
+ swiper.setTranslate(translate);
+ }
+ if (direction !== 'reset') {
+ swiper.transitionStart(runCallbacks, direction);
+ swiper.transitionEnd(runCallbacks, direction);
+ }
+ return false;
+ }
+
+ if (speed === 0 || !Support.transition) {
+ swiper.setTransition(0);
+ swiper.setTranslate(translate);
+ swiper.updateActiveIndex(slideIndex);
+ swiper.updateSlidesClasses();
+ swiper.emit('beforeTransitionStart', speed, internal);
+ swiper.transitionStart(runCallbacks, direction);
+ swiper.transitionEnd(runCallbacks, direction);
+ } else {
+ swiper.setTransition(speed);
+ swiper.setTranslate(translate);
+ swiper.updateActiveIndex(slideIndex);
+ swiper.updateSlidesClasses();
+ swiper.emit('beforeTransitionStart', speed, internal);
+ swiper.transitionStart(runCallbacks, direction);
+ if (!swiper.animating) {
+ swiper.animating = true;
+ if (!swiper.onSlideToWrapperTransitionEnd) {
+ swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
+ if (!swiper || swiper.destroyed) { return; }
+ if (e.target !== this) { return; }
+ swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
+ swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
+ swiper.transitionEnd(runCallbacks, direction);
+ };
+ }
+ swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
+ swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
+ }
+ }
+
+ return true;
+ }
+
+ function slideToLoop (index, speed, runCallbacks, internal) {
+ if ( index === void 0 ) index = 0;
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var newIndex = index;
+ if (swiper.params.loop) {
+ newIndex += swiper.loopedSlides;
+ }
+
+ return swiper.slideTo(newIndex, speed, runCallbacks, internal);
+ }
+
+ /* eslint no-unused-vars: "off" */
+ function slideNext (speed, runCallbacks, internal) {
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var params = swiper.params;
+ var animating = swiper.animating;
+ if (params.loop) {
+ if (animating) { return false; }
+ swiper.loopFix();
+ // eslint-disable-next-line
+ swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
+ return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);
+ }
+ return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);
+ }
+
+ /* eslint no-unused-vars: "off" */
+ function slidePrev (speed, runCallbacks, internal) {
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var params = swiper.params;
+ var animating = swiper.animating;
+ var snapGrid = swiper.snapGrid;
+ var slidesGrid = swiper.slidesGrid;
+ var rtlTranslate = swiper.rtlTranslate;
+
+ if (params.loop) {
+ if (animating) { return false; }
+ swiper.loopFix();
+ // eslint-disable-next-line
+ swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
+ }
+ var translate = rtlTranslate ? swiper.translate : -swiper.translate;
+ function normalize(val) {
+ if (val < 0) { return -Math.floor(Math.abs(val)); }
+ return Math.floor(val);
+ }
+ var normalizedTranslate = normalize(translate);
+ var normalizedSnapGrid = snapGrid.map(function (val) { return normalize(val); });
+ var normalizedSlidesGrid = slidesGrid.map(function (val) { return normalize(val); });
+
+ var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
+ var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
+ var prevIndex;
+ if (typeof prevSnap !== 'undefined') {
+ prevIndex = slidesGrid.indexOf(prevSnap);
+ if (prevIndex < 0) { prevIndex = swiper.activeIndex - 1; }
+ }
+ return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
+ }
+
+ /* eslint no-unused-vars: "off" */
+ function slideReset (speed, runCallbacks, internal) {
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
+ }
+
+ /* eslint no-unused-vars: "off" */
+ function slideToClosest (speed, runCallbacks, internal) {
+ if ( speed === void 0 ) speed = this.params.speed;
+ if ( runCallbacks === void 0 ) runCallbacks = true;
+
+ var swiper = this;
+ var index = swiper.activeIndex;
+ var snapIndex = Math.floor(index / swiper.params.slidesPerGroup);
+
+ if (snapIndex < swiper.snapGrid.length - 1) {
+ var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
+
+ var currentSnap = swiper.snapGrid[snapIndex];
+ var nextSnap = swiper.snapGrid[snapIndex + 1];
+
+ if ((translate - currentSnap) > (nextSnap - currentSnap) / 2) {
+ index = swiper.params.slidesPerGroup;
+ }
+ }
+
+ return swiper.slideTo(index, speed, runCallbacks, internal);
+ }
+
+ function slideToClickedSlide () {
+ var swiper = this;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+
+ var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
+ var slideToIndex = swiper.clickedIndex;
+ var realIndex;
+ if (params.loop) {
+ if (swiper.animating) { return; }
+ realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
+ if (params.centeredSlides) {
+ if (
+ (slideToIndex < swiper.loopedSlides - (slidesPerView / 2)) ||
+ (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2))
+ ) {
+ swiper.loopFix();
+ slideToIndex = $wrapperEl
+ .children(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + (params.slideDuplicateClass) + ")"))
+ .eq(0)
+ .index();
+
+ Utils.nextTick(function () {
+ swiper.slideTo(slideToIndex);
+ });
+ } else {
+ swiper.slideTo(slideToIndex);
+ }
+ } else if (slideToIndex > swiper.slides.length - slidesPerView) {
+ swiper.loopFix();
+ slideToIndex = $wrapperEl
+ .children(("." + (params.slideClass) + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + (params.slideDuplicateClass) + ")"))
+ .eq(0)
+ .index();
+
+ Utils.nextTick(function () {
+ swiper.slideTo(slideToIndex);
+ });
+ } else {
+ swiper.slideTo(slideToIndex);
+ }
+ } else {
+ swiper.slideTo(slideToIndex);
+ }
+ }
+
+ var slide = {
+ slideTo: slideTo,
+ slideToLoop: slideToLoop,
+ slideNext: slideNext,
+ slidePrev: slidePrev,
+ slideReset: slideReset,
+ slideToClosest: slideToClosest,
+ slideToClickedSlide: slideToClickedSlide,
+ };
+
+ function loopCreate () {
+ var swiper = this;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ // Remove duplicated slides
+ $wrapperEl.children(("." + (params.slideClass) + "." + (params.slideDuplicateClass))).remove();
+
+ var slides = $wrapperEl.children(("." + (params.slideClass)));
+
+ if (params.loopFillGroupWithBlank) {
+ var blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);
+ if (blankSlidesNum !== params.slidesPerGroup) {
+ for (var i = 0; i < blankSlidesNum; i += 1) {
+ var blankNode = $(doc.createElement('div')).addClass(((params.slideClass) + " " + (params.slideBlankClass)));
+ $wrapperEl.append(blankNode);
+ }
+ slides = $wrapperEl.children(("." + (params.slideClass)));
+ }
+ }
+
+ if (params.slidesPerView === 'auto' && !params.loopedSlides) { params.loopedSlides = slides.length; }
+
+ swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);
+ swiper.loopedSlides += params.loopAdditionalSlides;
+ if (swiper.loopedSlides > slides.length) {
+ swiper.loopedSlides = slides.length;
+ }
+
+ var prependSlides = [];
+ var appendSlides = [];
+ slides.each(function (index, el) {
+ var slide = $(el);
+ if (index < swiper.loopedSlides) { appendSlides.push(el); }
+ if (index < slides.length && index >= slides.length - swiper.loopedSlides) { prependSlides.push(el); }
+ slide.attr('data-swiper-slide-index', index);
+ });
+ for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {
+ $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));
+ }
+ for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {
+ $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));
+ }
+ }
+
+ function loopFix () {
+ var swiper = this;
+ var params = swiper.params;
+ var activeIndex = swiper.activeIndex;
+ var slides = swiper.slides;
+ var loopedSlides = swiper.loopedSlides;
+ var allowSlidePrev = swiper.allowSlidePrev;
+ var allowSlideNext = swiper.allowSlideNext;
+ var snapGrid = swiper.snapGrid;
+ var rtl = swiper.rtlTranslate;
+ var newIndex;
+ swiper.allowSlidePrev = true;
+ swiper.allowSlideNext = true;
+
+ var snapTranslate = -snapGrid[activeIndex];
+ var diff = snapTranslate - swiper.getTranslate();
+
+
+ // Fix For Negative Oversliding
+ if (activeIndex < loopedSlides) {
+ newIndex = (slides.length - (loopedSlides * 3)) + activeIndex;
+ newIndex += loopedSlides;
+ var slideChanged = swiper.slideTo(newIndex, 0, false, true);
+ if (slideChanged && diff !== 0) {
+ swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
+ }
+ } else if ((params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2) || (activeIndex >= slides.length - loopedSlides)) {
+ // Fix For Positive Oversliding
+ newIndex = -slides.length + activeIndex + loopedSlides;
+ newIndex += loopedSlides;
+ var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);
+ if (slideChanged$1 && diff !== 0) {
+ swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
+ }
+ }
+ swiper.allowSlidePrev = allowSlidePrev;
+ swiper.allowSlideNext = allowSlideNext;
+ }
+
+ function loopDestroy () {
+ var swiper = this;
+ var $wrapperEl = swiper.$wrapperEl;
+ var params = swiper.params;
+ var slides = swiper.slides;
+ $wrapperEl.children(("." + (params.slideClass) + "." + (params.slideDuplicateClass))).remove();
+ slides.removeAttr('data-swiper-slide-index');
+ }
+
+ var loop = {
+ loopCreate: loopCreate,
+ loopFix: loopFix,
+ loopDestroy: loopDestroy,
+ };
+
+ function setGrabCursor (moving) {
+ var swiper = this;
+ if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }
+ var el = swiper.el;
+ el.style.cursor = 'move';
+ el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
+ el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
+ el.style.cursor = moving ? 'grabbing' : 'grab';
+ }
+
+ function unsetGrabCursor () {
+ var swiper = this;
+ if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked)) { return; }
+ swiper.el.style.cursor = '';
+ }
+
+ var grabCursor = {
+ setGrabCursor: setGrabCursor,
+ unsetGrabCursor: unsetGrabCursor,
+ };
+
+ function appendSlide (slides) {
+ var swiper = this;
+ var $wrapperEl = swiper.$wrapperEl;
+ var params = swiper.params;
+ if (params.loop) {
+ swiper.loopDestroy();
+ }
+ if (typeof slides === 'object' && 'length' in slides) {
+ for (var i = 0; i < slides.length; i += 1) {
+ if (slides[i]) { $wrapperEl.append(slides[i]); }
+ }
+ } else {
+ $wrapperEl.append(slides);
+ }
+ if (params.loop) {
+ swiper.loopCreate();
+ }
+ if (!(params.observer && Support.observer)) {
+ swiper.update();
+ }
+ }
+
+ function prependSlide (slides) {
+ var swiper = this;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ var activeIndex = swiper.activeIndex;
+
+ if (params.loop) {
+ swiper.loopDestroy();
+ }
+ var newActiveIndex = activeIndex + 1;
+ if (typeof slides === 'object' && 'length' in slides) {
+ for (var i = 0; i < slides.length; i += 1) {
+ if (slides[i]) { $wrapperEl.prepend(slides[i]); }
+ }
+ newActiveIndex = activeIndex + slides.length;
+ } else {
+ $wrapperEl.prepend(slides);
+ }
+ if (params.loop) {
+ swiper.loopCreate();
+ }
+ if (!(params.observer && Support.observer)) {
+ swiper.update();
+ }
+ swiper.slideTo(newActiveIndex, 0, false);
+ }
+
+ function addSlide (index, slides) {
+ var swiper = this;
+ var $wrapperEl = swiper.$wrapperEl;
+ var params = swiper.params;
+ var activeIndex = swiper.activeIndex;
+ var activeIndexBuffer = activeIndex;
+ if (params.loop) {
+ activeIndexBuffer -= swiper.loopedSlides;
+ swiper.loopDestroy();
+ swiper.slides = $wrapperEl.children(("." + (params.slideClass)));
+ }
+ var baseLength = swiper.slides.length;
+ if (index <= 0) {
+ swiper.prependSlide(slides);
+ return;
+ } else if (index >= baseLength) {
+ swiper.appendSlide(slides);
+ return;
+ }
+ var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
+
+ var slidesBuffer = [];
+ for (var i = baseLength - 1; i >= index; i -= 1) {
+ var currentSlide = swiper.slides.eq(i);
+ currentSlide.remove();
+ slidesBuffer.unshift(currentSlide);
+ }
+
+ if (typeof slides === 'object' && 'length' in slides) {
+ for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {
+ if (slides[i$1]) { $wrapperEl.append(slides[i$1]); }
+ }
+ newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
+ } else {
+ $wrapperEl.append(slides);
+ }
+
+ for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {
+ $wrapperEl.append(slidesBuffer[i$2]);
+ }
+
+ if (params.loop) {
+ swiper.loopCreate();
+ }
+ if (!(params.observer && Support.observer)) {
+ swiper.update();
+ }
+ if (params.loop) {
+ swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
+ } else {
+ swiper.slideTo(newActiveIndex, 0, false);
+ }
+ }
+
+ function removeSlide (slidesIndexes) {
+ var swiper = this;
+ var params = swiper.params;
+ var $wrapperEl = swiper.$wrapperEl;
+ var activeIndex = swiper.activeIndex;
+
+ var activeIndexBuffer = activeIndex;
+ if (params.loop) {
+ activeIndexBuffer -= swiper.loopedSlides;
+ swiper.loopDestroy();
+ swiper.slides = $wrapperEl.children(("." + (params.slideClass)));
+ }
+ var newActiveIndex = activeIndexBuffer;
+ var indexToRemove;
+
+ if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {
+ for (var i = 0; i < slidesIndexes.length; i += 1) {
+ indexToRemove = slidesIndexes[i];
+ if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }
+ if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }
+ }
+ newActiveIndex = Math.max(newActiveIndex, 0);
+ } else {
+ indexToRemove = slidesIndexes;
+ if (swiper.slides[indexToRemove]) { swiper.slides.eq(indexToRemove).remove(); }
+ if (indexToRemove < newActiveIndex) { newActiveIndex -= 1; }
+ newActiveIndex = Math.max(newActiveIndex, 0);
+ }
+
+ if (params.loop) {
+ swiper.loopCreate();
+ }
+
+ if (!(params.observer && Support.observer)) {
+ swiper.update();
+ }
+ if (params.loop) {
+ swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
+ } else {
+ swiper.slideTo(newActiveIndex, 0, false);
+ }
+ }
+
+ function removeAllSlides () {
+ var swiper = this;
+
+ var slidesIndexes = [];
+ for (var i = 0; i < swiper.slides.length; i += 1) {
+ slidesIndexes.push(i);
+ }
+ swiper.removeSlide(slidesIndexes);
+ }
+
+ var manipulation = {
+ appendSlide: appendSlide,
+ prependSlide: prependSlide,
+ addSlide: addSlide,
+ removeSlide: removeSlide,
+ removeAllSlides: removeAllSlides,
+ };
+
+ var Device = (function Device() {
+ var ua = win.navigator.userAgent;
+
+ var device = {
+ ios: false,
+ android: false,
+ androidChrome: false,
+ desktop: false,
+ windows: false,
+ iphone: false,
+ ipod: false,
+ ipad: false,
+ cordova: win.cordova || win.phonegap,
+ phonegap: win.cordova || win.phonegap,
+ };
+
+ var windows = ua.match(/(Windows Phone);?[\s\/]+([\d.]+)?/); // eslint-disable-line
+ var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
+ var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
+ var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
+ var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
+
+
+ // Windows
+ if (windows) {
+ device.os = 'windows';
+ device.osVersion = windows[2];
+ device.windows = true;
+ }
+ // Android
+ if (android && !windows) {
+ device.os = 'android';
+ device.osVersion = android[2];
+ device.android = true;
+ device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
+ }
+ if (ipad || iphone || ipod) {
+ device.os = 'ios';
+ device.ios = true;
+ }
+ // iOS
+ if (iphone && !ipod) {
+ device.osVersion = iphone[2].replace(/_/g, '.');
+ device.iphone = true;
+ }
+ if (ipad) {
+ device.osVersion = ipad[2].replace(/_/g, '.');
+ device.ipad = true;
+ }
+ if (ipod) {
+ device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
+ device.iphone = true;
+ }
+ // iOS 8+ changed UA
+ if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
+ if (device.osVersion.split('.')[0] === '10') {
+ device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
+ }
+ }
+
+ // Desktop
+ device.desktop = !(device.os || device.android || device.webView);
+
+ // Webview
+ device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);
+
+ // Minimal UI
+ if (device.os && device.os === 'ios') {
+ var osVersionArr = device.osVersion.split('.');
+ var metaViewport = doc.querySelector('meta[name="viewport"]');
+ device.minimalUi =
+ !device.webView &&
+ (ipod || iphone) &&
+ (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) &&
+ metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;
+ }
+
+ // Pixel Ratio
+ device.pixelRatio = win.devicePixelRatio || 1;
+
+ // Export object
+ return device;
+ }());
+
+ function onTouchStart (event) {
+ var swiper = this;
+ var data = swiper.touchEventsData;
+ var params = swiper.params;
+ var touches = swiper.touches;
+ if (swiper.animating && params.preventIntercationOnTransition) {
+ return;
+ }
+ var e = event;
+ if (e.originalEvent) { e = e.originalEvent; }
+ data.isTouchEvent = e.type === 'touchstart';
+ if (!data.isTouchEvent && 'which' in e && e.which === 3) { return; }
+ if (data.isTouched && data.isMoved) { return; }
+ if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : ("." + (params.noSwipingClass)))[0]) {
+ swiper.allowClick = true;
+ return;
+ }
+ if (params.swipeHandler) {
+ if (!$(e).closest(params.swipeHandler)[0]) { return; }
+ }
+
+ touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
+ touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
+ var startX = touches.currentX;
+ var startY = touches.currentY;
+
+ // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore
+
+ if (
+ Device.ios &&
+ !Device.cordova &&
+ params.iOSEdgeSwipeDetection &&
+ ((startX <= params.iOSEdgeSwipeThreshold) ||
+ (startX >= win.screen.width - params.iOSEdgeSwipeThreshold))
+ ) {
+ return;
+ }
+
+ Utils.extend(data, {
+ isTouched: true,
+ isMoved: false,
+ allowTouchCallbacks: true,
+ isScrolling: undefined,
+ startMoving: undefined,
+ });
+
+ touches.startX = startX;
+ touches.startY = startY;
+ data.touchStartTime = Utils.now();
+ swiper.allowClick = true;
+ swiper.updateSize();
+ swiper.swipeDirection = undefined;
+ if (params.threshold > 0) { data.allowThresholdMove = false; }
+ if (e.type !== 'touchstart') {
+ var preventDefault = true;
+ if ($(e.target).is(data.formElements)) { preventDefault = false; }
+ if (
+ doc.activeElement &&
+ $(doc.activeElement).is(data.formElements) &&
+ doc.activeElement !== e.target
+ ) {
+ doc.activeElement.blur();
+ }
+ if (preventDefault && swiper.allowTouchMove) {
+ e.preventDefault();
+ }
+ }
+ swiper.emit('touchStart', e);
+ }
+
+ function onTouchMove (event) {
+ var swiper = this;
+ var data = swiper.touchEventsData;
+ var params = swiper.params;
+ var touches = swiper.touches;
+ var rtl = swiper.rtlTranslate;
+ var e = event;
+ if (e.originalEvent) { e = e.originalEvent; }
+ if (!data.isTouched) {
+ if (data.startMoving && data.isScrolling) {
+ swiper.emit('touchMoveOpposite', e);
+ }
+ return;
+ }
+ if (data.isTouchEvent && e.type === 'mousemove') { return; }
+ var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
+ var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
+ if (e.preventedByNestedSwiper) {
+ touches.startX = pageX;
+ touches.startY = pageY;
+ return;
+ }
+ if (!swiper.allowTouchMove) {
+ // isMoved = true;
+ swiper.allowClick = false;
+ if (data.isTouched) {
+ Utils.extend(touches, {
+ startX: pageX,
+ startY: pageY,
+ currentX: pageX,
+ currentY: pageY,
+ });
+ data.touchStartTime = Utils.now();
+ }
+ return;
+ }
+ if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
+ if (swiper.isVertical()) {
+ // Vertical
+ if (
+ (pageY < touches.startY && swiper.translate <= swiper.maxTranslate()) ||
+ (pageY > touches.startY && swiper.translate >= swiper.minTranslate())
+ ) {
+ data.isTouched = false;
+ data.isMoved = false;
+ return;
+ }
+ } else if (
+ (pageX < touches.startX && swiper.translate <= swiper.maxTranslate()) ||
+ (pageX > touches.startX && swiper.translate >= swiper.minTranslate())
+ ) {
+ return;
+ }
+ }
+ if (data.isTouchEvent && doc.activeElement) {
+ if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {
+ data.isMoved = true;
+ swiper.allowClick = false;
+ return;
+ }
+ }
+ if (data.allowTouchCallbacks) {
+ swiper.emit('touchMove', e);
+ }
+ if (e.targetTouches && e.targetTouches.length > 1) { return; }
+
+ touches.currentX = pageX;
+ touches.currentY = pageY;
+
+ var diffX = touches.currentX - touches.startX;
+ var diffY = touches.currentY - touches.startY;
+
+ if (typeof data.isScrolling === 'undefined') {
+ var touchAngle;
+ if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) {
+ data.isScrolling = false;
+ } else {
+ // eslint-disable-next-line
+ if ((diffX * diffX) + (diffY * diffY) >= 25) {
+ touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;
+ data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle);
+ }
+ }
+ }
+ if (data.isScrolling) {
+ swiper.emit('touchMoveOpposite', e);
+ }
+ if (typeof startMoving === 'undefined') {
+ if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
+ data.startMoving = true;
+ }
+ }
+ if (data.isScrolling) {
+ data.isTouched = false;
+ return;
+ }
+ if (!data.startMoving) {
+ return;
+ }
+ swiper.allowClick = false;
+ e.preventDefault();
+ if (params.touchMoveStopPropagation && !params.nested) {
+ e.stopPropagation();
+ }
+
+ if (!data.isMoved) {
+ if (params.loop) {
+ swiper.loopFix();
+ }
+ data.startTranslate = swiper.getTranslate();
+ swiper.setTransition(0);
+ if (swiper.animating) {
+ swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
+ }
+ data.allowMomentumBounce = false;
+ // Grab Cursor
+ if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
+ swiper.setGrabCursor(true);
+ }
+ swiper.emit('sliderFirstMove', e);
+ }
+ swiper.emit('sliderMove', e);
+ data.isMoved = true;
+
+ var diff = swiper.isHorizontal() ? diffX : diffY;
+ touches.diff = diff;
+
+ diff *= params.touchRatio;
+ if (rtl) { diff = -diff; }
+
+ swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
+ data.currentTranslate = diff + data.startTranslate;
+
+ var disableParentSwiper = true;
+ var resistanceRatio = params.resistanceRatio;
+ if (params.touchReleaseOnEdges) {
+ resistanceRatio = 0;
+ }
+ if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) {
+ disableParentSwiper = false;
+ if (params.resistance) { data.currentTranslate = (swiper.minTranslate() - 1) + (Math.pow( (-swiper.minTranslate() + data.startTranslate + diff), resistanceRatio )); }
+ } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
+ disableParentSwiper = false;
+ if (params.resistance) { data.currentTranslate = (swiper.maxTranslate() + 1) - (Math.pow( (swiper.maxTranslate() - data.startTranslate - diff), resistanceRatio )); }
+ }
+
+ if (disableParentSwiper) {
+ e.preventedByNestedSwiper = true;
+ }
+
+ // Directions locks
+ if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
+ data.currentTranslate = data.startTranslate;
+ }
+ if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
+ data.currentTranslate = data.startTranslate;
+ }
+
+
+ // Threshold
+ if (params.threshold > 0) {
+ if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
+ if (!data.allowThresholdMove) {
+ data.allowThresholdMove = true;
+ touches.startX = touches.currentX;
+ touches.startY = touches.currentY;
+ data.currentTranslate = data.startTranslate;
+ touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
+ return;
+ }
+ } else {
+ data.currentTranslate = data.startTranslate;
+ return;
+ }
+ }
+
+ if (!params.followFinger) { return; }
+
+ // Update active index in free mode
+ if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ }
+ if (params.freeMode) {
+ // Velocity
+ if (data.velocities.length === 0) {
+ data.velocities.push({
+ position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
+ time: data.touchStartTime,
+ });
+ }
+ data.velocities.push({
+ position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
+ time: Utils.now(),
+ });
+ }
+ // Update progress
+ swiper.updateProgress(data.currentTranslate);
+ // Update translate
+ swiper.setTranslate(data.currentTranslate);
+ }
+
+ function onTouchEnd (event) {
+ var swiper = this;
+ var data = swiper.touchEventsData;
+
+ var params = swiper.params;
+ var touches = swiper.touches;
+ var rtl = swiper.rtlTranslate;
+ var $wrapperEl = swiper.$wrapperEl;
+ var slidesGrid = swiper.slidesGrid;
+ var snapGrid = swiper.snapGrid;
+ var e = event;
+ if (e.originalEvent) { e = e.originalEvent; }
+ if (data.allowTouchCallbacks) {
+ swiper.emit('touchEnd', e);
+ }
+ data.allowTouchCallbacks = false;
+ if (!data.isTouched) {
+ if (data.isMoved && params.grabCursor) {
+ swiper.setGrabCursor(false);
+ }
+ data.isMoved = false;
+ data.startMoving = false;
+ return;
+ }
+ // Return Grab Cursor
+ if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
+ swiper.setGrabCursor(false);
+ }
+
+ // Time diff
+ var touchEndTime = Utils.now();
+ var timeDiff = touchEndTime - data.touchStartTime;
+
+ // Tap, doubleTap, Click
+ if (swiper.allowClick) {
+ swiper.updateClickedSlide(e);
+ swiper.emit('tap', e);
+ if (timeDiff < 300 && (touchEndTime - data.lastClickTime) > 300) {
+ if (data.clickTimeout) { clearTimeout(data.clickTimeout); }
+ data.clickTimeout = Utils.nextTick(function () {
+ if (!swiper || swiper.destroyed) { return; }
+ swiper.emit('click', e);
+ }, 300);
+ }
+ if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) {
+ if (data.clickTimeout) { clearTimeout(data.clickTimeout); }
+ swiper.emit('doubleTap', e);
+ }
+ }
+
+ data.lastClickTime = Utils.now();
+ Utils.nextTick(function () {
+ if (!swiper.destroyed) { swiper.allowClick = true; }
+ });
+
+ if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
+ data.isTouched = false;
+ data.isMoved = false;
+ data.startMoving = false;
+ return;
+ }
+ data.isTouched = false;
+ data.isMoved = false;
+ data.startMoving = false;
+
+ var currentPos;
+ if (params.followFinger) {
+ currentPos = rtl ? swiper.translate : -swiper.translate;
+ } else {
+ currentPos = -data.currentTranslate;
+ }
+
+ if (params.freeMode) {
+ if (currentPos < -swiper.minTranslate()) {
+ swiper.slideTo(swiper.activeIndex);
+ return;
+ } else if (currentPos > -swiper.maxTranslate()) {
+ if (swiper.slides.length < snapGrid.length) {
+ swiper.slideTo(snapGrid.length - 1);
+ } else {
+ swiper.slideTo(swiper.slides.length - 1);
+ }
+ return;
+ }
+
+ if (params.freeModeMomentum) {
+ if (data.velocities.length > 1) {
+ var lastMoveEvent = data.velocities.pop();
+ var velocityEvent = data.velocities.pop();
+
+ var distance = lastMoveEvent.position - velocityEvent.position;
+ var time = lastMoveEvent.time - velocityEvent.time;
+ swiper.velocity = distance / time;
+ swiper.velocity /= 2;
+ if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
+ swiper.velocity = 0;
+ }
+ // this implies that the user stopped moving a finger then released.
+ // There would be no events with distance zero, so the last event is stale.
+ if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) {
+ swiper.velocity = 0;
+ }
+ } else {
+ swiper.velocity = 0;
+ }
+ swiper.velocity *= params.freeModeMomentumVelocityRatio;
+
+ data.velocities.length = 0;
+ var momentumDuration = 1000 * params.freeModeMomentumRatio;
+ var momentumDistance = swiper.velocity * momentumDuration;
+
+ var newPosition = swiper.translate + momentumDistance;
+ if (rtl) { newPosition = -newPosition; }
+
+ var doBounce = false;
+ var afterBouncePosition;
+ var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
+ var needsLoopFix;
+ if (newPosition < swiper.maxTranslate()) {
+ if (params.freeModeMomentumBounce) {
+ if (newPosition + swiper.maxTranslate() < -bounceAmount) {
+ newPosition = swiper.maxTranslate() - bounceAmount;
+ }
+ afterBouncePosition = swiper.maxTranslate();
+ doBounce = true;
+ data.allowMomentumBounce = true;
+ } else {
+ newPosition = swiper.maxTranslate();
+ }
+ if (params.loop && params.centeredSlides) { needsLoopFix = true; }
+ } else if (newPosition > swiper.minTranslate()) {
+ if (params.freeModeMomentumBounce) {
+ if (newPosition - swiper.minTranslate() > bounceAmount) {
+ newPosition = swiper.minTranslate() + bounceAmount;
+ }
+ afterBouncePosition = swiper.minTranslate();
+ doBounce = true;
+ data.allowMomentumBounce = true;
+ } else {
+ newPosition = swiper.minTranslate();
+ }
+ if (params.loop && params.centeredSlides) { needsLoopFix = true; }
+ } else if (params.freeModeSticky) {
+ var nextSlide;
+ for (var j = 0; j < snapGrid.length; j += 1) {
+ if (snapGrid[j] > -newPosition) {
+ nextSlide = j;
+ break;
+ }
+ }
+
+ if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
+ newPosition = snapGrid[nextSlide];
+ } else {
+ newPosition = snapGrid[nextSlide - 1];
+ }
+ newPosition = -newPosition;
+ }
+ if (needsLoopFix) {
+ swiper.once('transitionEnd', function () {
+ swiper.loopFix();
+ });
+ }
+ // Fix duration
+ if (swiper.velocity !== 0) {
+ if (rtl) {
+ momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
+ } else {
+ momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
+ }
+ } else if (params.freeModeSticky) {
+ swiper.slideToClosest();
+ return;
+ }
+
+ if (params.freeModeMomentumBounce && doBounce) {
+ swiper.updateProgress(afterBouncePosition);
+ swiper.setTransition(momentumDuration);
+ swiper.setTranslate(newPosition);
+ swiper.transitionStart(true, swiper.swipeDirection);
+ swiper.animating = true;
+ $wrapperEl.transitionEnd(function () {
+ if (!swiper || swiper.destroyed || !data.allowMomentumBounce) { return; }
+ swiper.emit('momentumBounce');
+
+ swiper.setTransition(params.speed);
+ swiper.setTranslate(afterBouncePosition);
+ $wrapperEl.transitionEnd(function () {
+ if (!swiper || swiper.destroyed) { return; }
+ swiper.transitionEnd();
+ });
+ });
+ } else if (swiper.velocity) {
+ swiper.updateProgress(newPosition);
+ swiper.setTransition(momentumDuration);
+ swiper.setTranslate(newPosition);
+ swiper.transitionStart(true, swiper.swipeDirection);
+ if (!swiper.animating) {
+ swiper.animating = true;
+ $wrapperEl.transitionEnd(function () {
+ if (!swiper || swiper.destroyed) { return; }
+ swiper.transitionEnd();
+ });
+ }
+ } else {
+ swiper.updateProgress(newPosition);
+ }
+
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ } else if (params.freeModeSticky) {
+ swiper.slideToClosest();
+ return;
+ }
+
+ if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
+ swiper.updateProgress();
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ }
+ return;
+ }
+
+ // Find current slide
+ var stopIndex = 0;
+ var groupSize = swiper.slidesSizesGrid[0];
+ for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {
+ if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {
+ if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {
+ stopIndex = i;
+ groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];
+ }
+ } else if (currentPos >= slidesGrid[i]) {
+ stopIndex = i;
+ groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
+ }
+ }
+
+ // Find current slide size
+ var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
+
+ if (timeDiff > params.longSwipesMs) {
+ // Long touches
+ if (!params.longSwipes) {
+ swiper.slideTo(swiper.activeIndex);
+ return;
+ }
+ if (swiper.swipeDirection === 'next') {
+ if (ratio >= params.longSwipesRatio) { swiper.slideTo(stopIndex + params.slidesPerGroup); }
+ else { swiper.slideTo(stopIndex); }
+ }
+ if (swiper.swipeDirection === 'prev') {
+ if (ratio > (1 - params.longSwipesRatio)) { swiper.slideTo(stopIndex + params.slidesPerGroup); }
+ else { swiper.slideTo(stopIndex); }
+ }
+ } else {
+ // Short swipes
+ if (!params.shortSwipes) {
+ swiper.slideTo(swiper.activeIndex);
+ return;
+ }
+ if (swiper.swipeDirection === 'next') {
+ swiper.slideTo(stopIndex + params.slidesPerGroup);
+ }
+ if (swiper.swipeDirection === 'prev') {
+ swiper.slideTo(stopIndex);
+ }
+ }
+ }
+
+ function onResize () {
+ var swiper = this;
+
+ var params = swiper.params;
+ var el = swiper.el;
+
+ if (el && el.offsetWidth === 0) { return; }
+
+ // Breakpoints
+ if (params.breakpoints) {
+ swiper.setBreakpoint();
+ }
+
+ // Save locks
+ var allowSlideNext = swiper.allowSlideNext;
+ var allowSlidePrev = swiper.allowSlidePrev;
+ var snapGrid = swiper.snapGrid;
+
+ // Disable locks on resize
+ swiper.allowSlideNext = true;
+ swiper.allowSlidePrev = true;
+
+ swiper.updateSize();
+ swiper.updateSlides();
+
+ if (params.freeMode) {
+ var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());
+ swiper.setTranslate(newTranslate);
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+
+ if (params.autoHeight) {
+ swiper.updateAutoHeight();
+ }
+ } else {
+ swiper.updateSlidesClasses();
+ if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
+ swiper.slideTo(swiper.slides.length - 1, 0, false, true);
+ } else {
+ swiper.slideTo(swiper.activeIndex, 0, false, true);
+ }
+ }
+ // Return locks after resize
+ swiper.allowSlidePrev = allowSlidePrev;
+ swiper.allowSlideNext = allowSlideNext;
+
+ if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
+ swiper.checkOverflow();
+ }
+ }
+
+ function onClick (e) {
+ var swiper = this;
+ if (!swiper.allowClick) {
+ if (swiper.params.preventClicks) { e.preventDefault(); }
+ if (swiper.params.preventClicksPropagation && swiper.animating) {
+ e.stopPropagation();
+ e.stopImmediatePropagation();
+ }
+ }
+ }
+
+ function attachEvents() {
+ var swiper = this;
+ var params = swiper.params;
+ var touchEvents = swiper.touchEvents;
+ var el = swiper.el;
+ var wrapperEl = swiper.wrapperEl;
+
+ {
+ swiper.onTouchStart = onTouchStart.bind(swiper);
+ swiper.onTouchMove = onTouchMove.bind(swiper);
+ swiper.onTouchEnd = onTouchEnd.bind(swiper);
+ }
+
+ swiper.onClick = onClick.bind(swiper);
+
+ var target = params.touchEventsTarget === 'container' ? el : wrapperEl;
+ var capture = !!params.nested;
+
+ // Touch Events
+ {
+ if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ target.addEventListener(touchEvents.start, swiper.onTouchStart, false);
+ doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
+ doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
+ } else {
+ if (Support.touch) {
+ var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
+ target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
+ target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture: capture } : capture);
+ target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
+ }
+ if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
+ target.addEventListener('mousedown', swiper.onTouchStart, false);
+ doc.addEventListener('mousemove', swiper.onTouchMove, capture);
+ doc.addEventListener('mouseup', swiper.onTouchEnd, false);
+ }
+ }
+ // Prevent Links Clicks
+ if (params.preventClicks || params.preventClicksPropagation) {
+ target.addEventListener('click', swiper.onClick, true);
+ }
+ }
+
+ // Resize handler
+ swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true);
+ }
+
+ function detachEvents() {
+ var swiper = this;
+
+ var params = swiper.params;
+ var touchEvents = swiper.touchEvents;
+ var el = swiper.el;
+ var wrapperEl = swiper.wrapperEl;
+
+ var target = params.touchEventsTarget === 'container' ? el : wrapperEl;
+ var capture = !!params.nested;
+
+ // Touch Events
+ {
+ if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
+ doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
+ doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
+ } else {
+ if (Support.touch) {
+ var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false;
+ target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
+ target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
+ target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
+ }
+ if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
+ target.removeEventListener('mousedown', swiper.onTouchStart, false);
+ doc.removeEventListener('mousemove', swiper.onTouchMove, capture);
+ doc.removeEventListener('mouseup', swiper.onTouchEnd, false);
+ }
+ }
+ // Prevent Links Clicks
+ if (params.preventClicks || params.preventClicksPropagation) {
+ target.removeEventListener('click', swiper.onClick, true);
+ }
+ }
+
+ // Resize handler
+ swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize);
+ }
+
+ var events = {
+ attachEvents: attachEvents,
+ detachEvents: detachEvents,
+ };
+
+ function setBreakpoint () {
+ var swiper = this;
+ var activeIndex = swiper.activeIndex;
+ var initialized = swiper.initialized;
+ var loopedSlides = swiper.loopedSlides; if ( loopedSlides === void 0 ) loopedSlides = 0;
+ var params = swiper.params;
+ var breakpoints = params.breakpoints;
+ if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) { return; }
+ // Set breakpoint for window width and update parameters
+ var breakpoint = swiper.getBreakpoint(breakpoints);
+ if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
+ var breakPointsParams = breakpoint in breakpoints ? breakpoints[breakpoint] : swiper.originalParams;
+ var needsReLoop = params.loop && (breakPointsParams.slidesPerView !== params.slidesPerView);
+
+ Utils.extend(swiper.params, breakPointsParams);
+
+ Utils.extend(swiper, {
+ allowTouchMove: swiper.params.allowTouchMove,
+ allowSlideNext: swiper.params.allowSlideNext,
+ allowSlidePrev: swiper.params.allowSlidePrev,
+ });
+
+ swiper.currentBreakpoint = breakpoint;
+
+ if (needsReLoop && initialized) {
+ swiper.loopDestroy();
+ swiper.loopCreate();
+ swiper.updateSlides();
+ swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false);
+ }
+ swiper.emit('breakpoint', breakPointsParams);
+ }
+ }
+
+ function getBreakpoint (breakpoints) {
+ // Get breakpoint for window width
+ if (!breakpoints) { return undefined; }
+ var breakpoint = false;
+ var points = [];
+ Object.keys(breakpoints).forEach(function (point) {
+ points.push(point);
+ });
+ points.sort(function (a, b) { return parseInt(a, 10) - parseInt(b, 10); });
+ for (var i = 0; i < points.length; i += 1) {
+ var point = points[i];
+ if (point >= win.innerWidth && !breakpoint) {
+ breakpoint = point;
+ }
+ }
+ return breakpoint || 'max';
+ }
+
+ var breakpoints = { setBreakpoint: setBreakpoint, getBreakpoint: getBreakpoint };
+
+ var Browser = (function Browser() {
+ function isSafari() {
+ var ua = win.navigator.userAgent.toLowerCase();
+ return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0);
+ }
+ return {
+ isIE: !!win.navigator.userAgent.match(/Trident/g) || !!win.navigator.userAgent.match(/MSIE/g),
+ isSafari: isSafari(),
+ isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent),
+ };
+ }());
+
+ function addClasses () {
+ var swiper = this;
+ var classNames = swiper.classNames;
+ var params = swiper.params;
+ var rtl = swiper.rtl;
+ var $el = swiper.$el;
+ var suffixes = [];
+
+ suffixes.push(params.direction);
+
+ if (params.freeMode) {
+ suffixes.push('free-mode');
+ }
+ if (!Support.flexbox) {
+ suffixes.push('no-flexbox');
+ }
+ if (params.autoHeight) {
+ suffixes.push('autoheight');
+ }
+ if (rtl) {
+ suffixes.push('rtl');
+ }
+ if (params.slidesPerColumn > 1) {
+ suffixes.push('multirow');
+ }
+ if (Device.android) {
+ suffixes.push('android');
+ }
+ if (Device.ios) {
+ suffixes.push('ios');
+ }
+ // WP8 Touch Events Fix
+ if (Browser.isIE && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ suffixes.push(("wp8-" + (params.direction)));
+ }
+
+ suffixes.forEach(function (suffix) {
+ classNames.push(params.containerModifierClass + suffix);
+ });
+
+ $el.addClass(classNames.join(' '));
+ }
+
+ function removeClasses () {
+ var swiper = this;
+ var $el = swiper.$el;
+ var classNames = swiper.classNames;
+
+ $el.removeClass(classNames.join(' '));
+ }
+
+ var classes = { addClasses: addClasses, removeClasses: removeClasses };
+
+ function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) {
+ var image;
+ function onReady() {
+ if (callback) { callback(); }
+ }
+ if (!imageEl.complete || !checkForComplete) {
+ if (src) {
+ image = new win.Image();
+ image.onload = onReady;
+ image.onerror = onReady;
+ if (sizes) {
+ image.sizes = sizes;
+ }
+ if (srcset) {
+ image.srcset = srcset;
+ }
+ if (src) {
+ image.src = src;
+ }
+ } else {
+ onReady();
+ }
+ } else {
+ // image already loaded...
+ onReady();
+ }
+ }
+
+ function preloadImages () {
+ var swiper = this;
+ swiper.imagesToLoad = swiper.$el.find('img');
+ function onReady() {
+ if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) { return; }
+ if (swiper.imagesLoaded !== undefined) { swiper.imagesLoaded += 1; }
+ if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
+ if (swiper.params.updateOnImagesReady) { swiper.update(); }
+ swiper.emit('imagesReady');
+ }
+ }
+ for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {
+ var imageEl = swiper.imagesToLoad[i];
+ swiper.loadImage(
+ imageEl,
+ imageEl.currentSrc || imageEl.getAttribute('src'),
+ imageEl.srcset || imageEl.getAttribute('srcset'),
+ imageEl.sizes || imageEl.getAttribute('sizes'),
+ true,
+ onReady
+ );
+ }
+ }
+
+ var images = {
+ loadImage: loadImage,
+ preloadImages: preloadImages,
+ };
+
+ function checkOverflow() {
+ var swiper = this;
+ var wasLocked = swiper.isLocked;
+
+ swiper.isLocked = swiper.snapGrid.length === 1;
+ swiper.allowSlideNext = !swiper.isLocked;
+ swiper.allowSlidePrev = !swiper.isLocked;
+
+ // events
+ if (wasLocked !== swiper.isLocked) { swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); }
+
+ if (wasLocked && wasLocked !== swiper.isLocked) {
+ swiper.isEnd = false;
+ swiper.navigation.update();
+ }
+ }
+
+ var checkOverflow$1 = { checkOverflow: checkOverflow };
+
+ var defaults = {
+ init: true,
+ direction: 'horizontal',
+ touchEventsTarget: 'container',
+ initialSlide: 0,
+ speed: 300,
+ //
+ preventIntercationOnTransition: false,
+
+ // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
+ iOSEdgeSwipeDetection: false,
+ iOSEdgeSwipeThreshold: 20,
+
+ // Free mode
+ freeMode: false,
+ freeModeMomentum: true,
+ freeModeMomentumRatio: 1,
+ freeModeMomentumBounce: true,
+ freeModeMomentumBounceRatio: 1,
+ freeModeMomentumVelocityRatio: 1,
+ freeModeSticky: false,
+ freeModeMinimumVelocity: 0.02,
+
+ // Autoheight
+ autoHeight: false,
+
+ // Set wrapper width
+ setWrapperSize: false,
+
+ // Virtual Translate
+ virtualTranslate: false,
+
+ // Effects
+ effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
+
+ // Breakpoints
+ breakpoints: undefined,
+
+ // Slides grid
+ spaceBetween: 0,
+ slidesPerView: 1,
+ slidesPerColumn: 1,
+ slidesPerColumnFill: 'column',
+ slidesPerGroup: 1,
+ centeredSlides: false,
+ slidesOffsetBefore: 0, // in px
+ slidesOffsetAfter: 0, // in px
+ normalizeSlideIndex: true,
+
+ // Disable swiper and hide navigation when container not overflow
+ watchOverflow: false,
+
+ // Round length
+ roundLengths: false,
+
+ // Touches
+ touchRatio: 1,
+ touchAngle: 45,
+ simulateTouch: true,
+ shortSwipes: true,
+ longSwipes: true,
+ longSwipesRatio: 0.5,
+ longSwipesMs: 300,
+ followFinger: true,
+ allowTouchMove: true,
+ threshold: 0,
+ touchMoveStopPropagation: true,
+ touchReleaseOnEdges: false,
+
+ // Unique Navigation Elements
+ uniqueNavElements: true,
+
+ // Resistance
+ resistance: true,
+ resistanceRatio: 0.85,
+
+ // Progress
+ watchSlidesProgress: false,
+ watchSlidesVisibility: false,
+
+ // Cursor
+ grabCursor: false,
+
+ // Clicks
+ preventClicks: true,
+ preventClicksPropagation: true,
+ slideToClickedSlide: false,
+
+ // Images
+ preloadImages: true,
+ updateOnImagesReady: true,
+
+ // loop
+ loop: false,
+ loopAdditionalSlides: 0,
+ loopedSlides: null,
+ loopFillGroupWithBlank: false,
+
+ // Swiping/no swiping
+ allowSlidePrev: true,
+ allowSlideNext: true,
+ swipeHandler: null, // '.swipe-handler',
+ noSwiping: true,
+ noSwipingClass: 'swiper-no-swiping',
+ noSwipingSelector: null,
+
+ // Passive Listeners
+ passiveListeners: true,
+
+ // NS
+ containerModifierClass: 'swiper-container-', // NEW
+ slideClass: 'swiper-slide',
+ slideBlankClass: 'swiper-slide-invisible-blank',
+ slideActiveClass: 'swiper-slide-active',
+ slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
+ slideVisibleClass: 'swiper-slide-visible',
+ slideDuplicateClass: 'swiper-slide-duplicate',
+ slideNextClass: 'swiper-slide-next',
+ slideDuplicateNextClass: 'swiper-slide-duplicate-next',
+ slidePrevClass: 'swiper-slide-prev',
+ slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
+ wrapperClass: 'swiper-wrapper',
+
+ // Callbacks
+ runCallbacksOnInit: true,
+ };
+
+ var prototypes = {
+ update: update,
+ translate: translate,
+ transition: transition$1,
+ slide: slide,
+ loop: loop,
+ grabCursor: grabCursor,
+ manipulation: manipulation,
+ events: events,
+ breakpoints: breakpoints,
+ checkOverflow: checkOverflow$1,
+ classes: classes,
+ images: images,
+ };
+
+ var extendedDefaults = {};
+
+ var Swiper = (function (SwiperClass$$1) {
+ function Swiper() {
+ var assign;
+
+ var args = [], len = arguments.length;
+ while ( len-- ) args[ len ] = arguments[ len ];
+ var el;
+ var params;
+ if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
+ params = args[0];
+ } else {
+ (assign = args, el = assign[0], params = assign[1]);
+ }
+ if (!params) { params = {}; }
+
+ params = Utils.extend({}, params);
+ if (el && !params.el) { params.el = el; }
+
+ SwiperClass$$1.call(this, params);
+
+ Object.keys(prototypes).forEach(function (prototypeGroup) {
+ Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {
+ if (!Swiper.prototype[protoMethod]) {
+ Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
+ }
+ });
+ });
+
+ // Swiper Instance
+ var swiper = this;
+ if (typeof swiper.modules === 'undefined') {
+ swiper.modules = {};
+ }
+ Object.keys(swiper.modules).forEach(function (moduleName) {
+ var module = swiper.modules[moduleName];
+ if (module.params) {
+ var moduleParamName = Object.keys(module.params)[0];
+ var moduleParams = module.params[moduleParamName];
+ if (typeof moduleParams !== 'object') { return; }
+ if (!(moduleParamName in params && 'enabled' in moduleParams)) { return; }
+ if (params[moduleParamName] === true) {
+ params[moduleParamName] = { enabled: true };
+ }
+ if (
+ typeof params[moduleParamName] === 'object' &&
+ !('enabled' in params[moduleParamName])
+ ) {
+ params[moduleParamName].enabled = true;
+ }
+ if (!params[moduleParamName]) { params[moduleParamName] = { enabled: false }; }
+ }
+ });
+
+ // Extend defaults with modules params
+ var swiperParams = Utils.extend({}, defaults);
+ swiper.useModulesParams(swiperParams);
+
+ // Extend defaults with passed params
+ swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
+ swiper.originalParams = Utils.extend({}, swiper.params);
+ swiper.passedParams = Utils.extend({}, params);
+
+ // Save Dom lib
+ swiper.$ = $;
+
+ // Find el
+ var $el = $(swiper.params.el);
+ el = $el[0];
+
+ if (!el) {
+ return undefined;
+ }
+
+ if ($el.length > 1) {
+ var swipers = [];
+ $el.each(function (index, containerEl) {
+ var newParams = Utils.extend({}, params, { el: containerEl });
+ swipers.push(new Swiper(newParams));
+ });
+ return swipers;
+ }
+
+ el.swiper = swiper;
+ $el.data('swiper', swiper);
+
+ // Find Wrapper
+ var $wrapperEl = $el.children(("." + (swiper.params.wrapperClass)));
+
+ // Extend Swiper
+ Utils.extend(swiper, {
+ $el: $el,
+ el: el,
+ $wrapperEl: $wrapperEl,
+ wrapperEl: $wrapperEl[0],
+
+ // Classes
+ classNames: [],
+
+ // Slides
+ slides: $(),
+ slidesGrid: [],
+ snapGrid: [],
+ slidesSizesGrid: [],
+
+ // isDirection
+ isHorizontal: function isHorizontal() {
+ return swiper.params.direction === 'horizontal';
+ },
+ isVertical: function isVertical() {
+ return swiper.params.direction === 'vertical';
+ },
+ // RTL
+ rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
+ rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
+ wrongRTL: $wrapperEl.css('display') === '-webkit-box',
+
+ // Indexes
+ activeIndex: 0,
+ realIndex: 0,
+
+ //
+ isBeginning: true,
+ isEnd: false,
+
+ // Props
+ translate: 0,
+ previousTranslate: 0,
+ progress: 0,
+ velocity: 0,
+ animating: false,
+
+ // Locks
+ allowSlideNext: swiper.params.allowSlideNext,
+ allowSlidePrev: swiper.params.allowSlidePrev,
+
+ // Touch Events
+ touchEvents: (function touchEvents() {
+ var touch = ['touchstart', 'touchmove', 'touchend'];
+ var desktop = ['mousedown', 'mousemove', 'mouseup'];
+ if (Support.pointerEvents) {
+ desktop = ['pointerdown', 'pointermove', 'pointerup'];
+ } else if (Support.prefixedPointerEvents) {
+ desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];
+ }
+ swiper.touchEventsTouch = {
+ start: touch[0],
+ move: touch[1],
+ end: touch[2],
+ };
+ swiper.touchEventsDesktop = {
+ start: desktop[0],
+ move: desktop[1],
+ end: desktop[2],
+ };
+ return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
+ }()),
+ touchEventsData: {
+ isTouched: undefined,
+ isMoved: undefined,
+ allowTouchCallbacks: undefined,
+ touchStartTime: undefined,
+ isScrolling: undefined,
+ currentTranslate: undefined,
+ startTranslate: undefined,
+ allowThresholdMove: undefined,
+ // Form elements to match
+ formElements: 'input, select, option, textarea, button, video',
+ // Last click time
+ lastClickTime: Utils.now(),
+ clickTimeout: undefined,
+ // Velocities
+ velocities: [],
+ allowMomentumBounce: undefined,
+ isTouchEvent: undefined,
+ startMoving: undefined,
+ },
+
+ // Clicks
+ allowClick: true,
+
+ // Touches
+ allowTouchMove: swiper.params.allowTouchMove,
+
+ touches: {
+ startX: 0,
+ startY: 0,
+ currentX: 0,
+ currentY: 0,
+ diff: 0,
+ },
+
+ // Images
+ imagesToLoad: [],
+ imagesLoaded: 0,
+
+ });
+
+ // Install Modules
+ swiper.useModules();
+
+ // Init
+ if (swiper.params.init) {
+ swiper.init();
+ }
+
+ // Return app instance
+ return swiper;
+ }
+
+ if ( SwiperClass$$1 ) Swiper.__proto__ = SwiperClass$$1;
+ Swiper.prototype = Object.create( SwiperClass$$1 && SwiperClass$$1.prototype );
+ Swiper.prototype.constructor = Swiper;
+
+ var staticAccessors = { extendedDefaults: { configurable: true },defaults: { configurable: true },Class: { configurable: true },$: { configurable: true } };
+ Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic () {
+ var swiper = this;
+ var params = swiper.params;
+ var slides = swiper.slides;
+ var slidesGrid = swiper.slidesGrid;
+ var swiperSize = swiper.size;
+ var activeIndex = swiper.activeIndex;
+ var spv = 1;
+ if (params.centeredSlides) {
+ var slideSize = slides[activeIndex].swiperSlideSize;
+ var breakLoop;
+ for (var i = activeIndex + 1; i < slides.length; i += 1) {
+ if (slides[i] && !breakLoop) {
+ slideSize += slides[i].swiperSlideSize;
+ spv += 1;
+ if (slideSize > swiperSize) { breakLoop = true; }
+ }
+ }
+ for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {
+ if (slides[i$1] && !breakLoop) {
+ slideSize += slides[i$1].swiperSlideSize;
+ spv += 1;
+ if (slideSize > swiperSize) { breakLoop = true; }
+ }
+ }
+ } else {
+ for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {
+ if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {
+ spv += 1;
+ }
+ }
+ }
+ return spv;
+ };
+ Swiper.prototype.update = function update$$1 () {
+ var swiper = this;
+ if (!swiper || swiper.destroyed) { return; }
+ var snapGrid = swiper.snapGrid;
+ var params = swiper.params;
+ // Breakpoints
+ if (params.breakpoints) {
+ swiper.setBreakpoint();
+ }
+ swiper.updateSize();
+ swiper.updateSlides();
+ swiper.updateProgress();
+ swiper.updateSlidesClasses();
+
+ function setTranslate() {
+ var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
+ var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
+ swiper.setTranslate(newTranslate);
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ }
+ var translated;
+ if (swiper.params.freeMode) {
+ setTranslate();
+ if (swiper.params.autoHeight) {
+ swiper.updateAutoHeight();
+ }
+ } else {
+ if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
+ translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
+ } else {
+ translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
+ }
+ if (!translated) {
+ setTranslate();
+ }
+ }
+ if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
+ swiper.checkOverflow();
+ }
+ swiper.emit('update');
+ };
+ Swiper.prototype.init = function init () {
+ var swiper = this;
+ if (swiper.initialized) { return; }
+
+ swiper.emit('beforeInit');
+
+ // Set breakpoint
+ if (swiper.params.breakpoints) {
+ swiper.setBreakpoint();
+ }
+
+ // Add Classes
+ swiper.addClasses();
+
+ // Create loop
+ if (swiper.params.loop) {
+ swiper.loopCreate();
+ }
+
+ // Update size
+ swiper.updateSize();
+
+ // Update slides
+ swiper.updateSlides();
+
+ if (swiper.params.watchOverflow) {
+ swiper.checkOverflow();
+ }
+
+ // Set Grab Cursor
+ if (swiper.params.grabCursor) {
+ swiper.setGrabCursor();
+ }
+
+ if (swiper.params.preloadImages) {
+ swiper.preloadImages();
+ }
+
+ // Slide To Initial Slide
+ if (swiper.params.loop) {
+ swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
+ } else {
+ swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
+ }
+
+ // Attach events
+ swiper.attachEvents();
+
+ // Init Flag
+ swiper.initialized = true;
+
+ // Emit
+ swiper.emit('init');
+ };
+ Swiper.prototype.destroy = function destroy (deleteInstance, cleanStyles) {
+ if ( deleteInstance === void 0 ) deleteInstance = true;
+ if ( cleanStyles === void 0 ) cleanStyles = true;
+
+ var swiper = this;
+ var params = swiper.params;
+ var $el = swiper.$el;
+ var $wrapperEl = swiper.$wrapperEl;
+ var slides = swiper.slides;
+
+ if (typeof swiper.params === 'undefined' || swiper.destroyed) {
+ return null;
+ }
+
+ swiper.emit('beforeDestroy');
+
+ // Init Flag
+ swiper.initialized = false;
+
+ // Detach events
+ swiper.detachEvents();
+
+ // Destroy loop
+ if (params.loop) {
+ swiper.loopDestroy();
+ }
+
+ // Cleanup styles
+ if (cleanStyles) {
+ swiper.removeClasses();
+ $el.removeAttr('style');
+ $wrapperEl.removeAttr('style');
+ if (slides && slides.length) {
+ slides
+ .removeClass([
+ params.slideVisibleClass,
+ params.slideActiveClass,
+ params.slideNextClass,
+ params.slidePrevClass ].join(' '))
+ .removeAttr('style')
+ .removeAttr('data-swiper-slide-index')
+ .removeAttr('data-swiper-column')
+ .removeAttr('data-swiper-row');
+ }
+ }
+
+ swiper.emit('destroy');
+
+ // Detach emitter events
+ Object.keys(swiper.eventsListeners).forEach(function (eventName) {
+ swiper.off(eventName);
+ });
+
+ if (deleteInstance !== false) {
+ swiper.$el[0].swiper = null;
+ swiper.$el.data('swiper', null);
+ Utils.deleteProps(swiper);
+ }
+ swiper.destroyed = true;
+
+ return null;
+ };
+ Swiper.extendDefaults = function extendDefaults (newDefaults) {
+ Utils.extend(extendedDefaults, newDefaults);
+ };
+ staticAccessors.extendedDefaults.get = function () {
+ return extendedDefaults;
+ };
+ staticAccessors.defaults.get = function () {
+ return defaults;
+ };
+ staticAccessors.Class.get = function () {
+ return SwiperClass$$1;
+ };
+ staticAccessors.$.get = function () {
+ return $;
+ };
+
+ Object.defineProperties( Swiper, staticAccessors );
+
+ return Swiper;
+ }(SwiperClass));
+
+ var Device$1 = {
+ name: 'device',
+ proto: {
+ device: Device,
+ },
+ static: {
+ device: Device,
+ },
+ };
+
+ var Support$1 = {
+ name: 'support',
+ proto: {
+ support: Support,
+ },
+ static: {
+ support: Support,
+ },
+ };
+
+ var Browser$1 = {
+ name: 'browser',
+ proto: {
+ browser: Browser,
+ },
+ static: {
+ browser: Browser,
+ },
+ };
+
+ var Resize = {
+ name: 'resize',
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ resize: {
+ resizeHandler: function resizeHandler() {
+ if (!swiper || swiper.destroyed || !swiper.initialized) { return; }
+ swiper.emit('beforeResize');
+ swiper.emit('resize');
+ },
+ orientationChangeHandler: function orientationChangeHandler() {
+ if (!swiper || swiper.destroyed || !swiper.initialized) { return; }
+ swiper.emit('orientationchange');
+ },
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ // Emit resize
+ win.addEventListener('resize', swiper.resize.resizeHandler);
+
+ // Emit orientationchange
+ win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ win.removeEventListener('resize', swiper.resize.resizeHandler);
+ win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
+ },
+ },
+ };
+
+ var Observer = {
+ func: win.MutationObserver || win.WebkitMutationObserver,
+ attach: function attach(target, options) {
+ if ( options === void 0 ) options = {};
+
+ var swiper = this;
+
+ var ObserverFunc = Observer.func;
+ var observer = new ObserverFunc(function (mutations) {
+ mutations.forEach(function (mutation) {
+ swiper.emit('observerUpdate', mutation);
+ });
+ });
+
+ observer.observe(target, {
+ attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
+ childList: typeof options.childList === 'undefined' ? true : options.childList,
+ characterData: typeof options.characterData === 'undefined' ? true : options.characterData,
+ });
+
+ swiper.observer.observers.push(observer);
+ },
+ init: function init() {
+ var swiper = this;
+ if (!Support.observer || !swiper.params.observer) { return; }
+ if (swiper.params.observeParents) {
+ var containerParents = swiper.$el.parents();
+ for (var i = 0; i < containerParents.length; i += 1) {
+ swiper.observer.attach(containerParents[i]);
+ }
+ }
+ // Observe container
+ swiper.observer.attach(swiper.$el[0], { childList: false });
+
+ // Observe wrapper
+ swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false });
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.observer.observers.forEach(function (observer) {
+ observer.disconnect();
+ });
+ swiper.observer.observers = [];
+ },
+ };
+
+ var Observer$1 = {
+ name: 'observer',
+ params: {
+ observer: false,
+ observeParents: false,
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ observer: {
+ init: Observer.init.bind(swiper),
+ attach: Observer.attach.bind(swiper),
+ destroy: Observer.destroy.bind(swiper),
+ observers: [],
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ swiper.observer.init();
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.observer.destroy();
+ },
+ },
+ };
+
+ var Virtual = {
+ update: function update(force) {
+ var swiper = this;
+ var ref = swiper.params;
+ var slidesPerView = ref.slidesPerView;
+ var slidesPerGroup = ref.slidesPerGroup;
+ var centeredSlides = ref.centeredSlides;
+ var ref$1 = swiper.virtual;
+ var previousFrom = ref$1.from;
+ var previousTo = ref$1.to;
+ var slides = ref$1.slides;
+ var previousSlidesGrid = ref$1.slidesGrid;
+ var renderSlide = ref$1.renderSlide;
+ var previousOffset = ref$1.offset;
+ swiper.updateActiveIndex();
+ var activeIndex = swiper.activeIndex || 0;
+
+ var offsetProp;
+ if (swiper.rtlTranslate) { offsetProp = 'right'; }
+ else { offsetProp = swiper.isHorizontal() ? 'left' : 'top'; }
+
+ var slidesAfter;
+ var slidesBefore;
+ if (centeredSlides) {
+ slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup;
+ slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup;
+ } else {
+ slidesAfter = slidesPerView + (slidesPerGroup - 1);
+ slidesBefore = slidesPerGroup;
+ }
+ var from = Math.max((activeIndex || 0) - slidesBefore, 0);
+ var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
+ var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
+
+ Utils.extend(swiper.virtual, {
+ from: from,
+ to: to,
+ offset: offset,
+ slidesGrid: swiper.slidesGrid,
+ });
+
+ function onRendered() {
+ swiper.updateSlides();
+ swiper.updateProgress();
+ swiper.updateSlidesClasses();
+ if (swiper.lazy && swiper.params.lazy.enabled) {
+ swiper.lazy.load();
+ }
+ }
+
+ if (previousFrom === from && previousTo === to && !force) {
+ if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
+ swiper.slides.css(offsetProp, (offset + "px"));
+ }
+ swiper.updateProgress();
+ return;
+ }
+ if (swiper.params.virtual.renderExternal) {
+ swiper.params.virtual.renderExternal.call(swiper, {
+ offset: offset,
+ from: from,
+ to: to,
+ slides: (function getSlides() {
+ var slidesToRender = [];
+ for (var i = from; i <= to; i += 1) {
+ slidesToRender.push(slides[i]);
+ }
+ return slidesToRender;
+ }()),
+ });
+ onRendered();
+ return;
+ }
+ var prependIndexes = [];
+ var appendIndexes = [];
+ if (force) {
+ swiper.$wrapperEl.find(("." + (swiper.params.slideClass))).remove();
+ } else {
+ for (var i = previousFrom; i <= previousTo; i += 1) {
+ if (i < from || i > to) {
+ swiper.$wrapperEl.find(("." + (swiper.params.slideClass) + "[data-swiper-slide-index=\"" + i + "\"]")).remove();
+ }
+ }
+ }
+ for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {
+ if (i$1 >= from && i$1 <= to) {
+ if (typeof previousTo === 'undefined' || force) {
+ appendIndexes.push(i$1);
+ } else {
+ if (i$1 > previousTo) { appendIndexes.push(i$1); }
+ if (i$1 < previousFrom) { prependIndexes.push(i$1); }
+ }
+ }
+ }
+ appendIndexes.forEach(function (index) {
+ swiper.$wrapperEl.append(renderSlide(slides[index], index));
+ });
+ prependIndexes.sort(function (a, b) { return a < b; }).forEach(function (index) {
+ swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
+ });
+ swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, (offset + "px"));
+ onRendered();
+ },
+ renderSlide: function renderSlide(slide, index) {
+ var swiper = this;
+ var params = swiper.params.virtual;
+ if (params.cache && swiper.virtual.cache[index]) {
+ return swiper.virtual.cache[index];
+ }
+ var $slideEl = params.renderSlide
+ ? $(params.renderSlide.call(swiper, slide, index))
+ : $(("<div class=\"" + (swiper.params.slideClass) + "\" data-swiper-slide-index=\"" + index + "\">" + slide + "</div>"));
+ if (!$slideEl.attr('data-swiper-slide-index')) { $slideEl.attr('data-swiper-slide-index', index); }
+ if (params.cache) { swiper.virtual.cache[index] = $slideEl; }
+ return $slideEl;
+ },
+ appendSlide: function appendSlide(slide) {
+ var swiper = this;
+ swiper.virtual.slides.push(slide);
+ swiper.virtual.update(true);
+ },
+ prependSlide: function prependSlide(slide) {
+ var swiper = this;
+ swiper.virtual.slides.unshift(slide);
+ if (swiper.params.virtual.cache) {
+ var cache = swiper.virtual.cache;
+ var newCache = {};
+ Object.keys(cache).forEach(function (cachedIndex) {
+ newCache[cachedIndex + 1] = cache[cachedIndex];
+ });
+ swiper.virtual.cache = newCache;
+ }
+ swiper.virtual.update(true);
+ swiper.slideNext(0);
+ },
+ };
+
+ var Virtual$1 = {
+ name: 'virtual',
+ params: {
+ virtual: {
+ enabled: false,
+ slides: [],
+ cache: true,
+ renderSlide: null,
+ renderExternal: null,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ virtual: {
+ update: Virtual.update.bind(swiper),
+ appendSlide: Virtual.appendSlide.bind(swiper),
+ prependSlide: Virtual.prependSlide.bind(swiper),
+ renderSlide: Virtual.renderSlide.bind(swiper),
+ slides: swiper.params.virtual.slides,
+ cache: {},
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (!swiper.params.virtual.enabled) { return; }
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "virtual"));
+ var overwriteParams = {
+ watchSlidesProgress: true,
+ };
+ Utils.extend(swiper.params, overwriteParams);
+ Utils.extend(swiper.originalParams, overwriteParams);
+
+ swiper.virtual.update();
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (!swiper.params.virtual.enabled) { return; }
+ swiper.virtual.update();
+ },
+ },
+ };
+
+ var Keyboard = {
+ handle: function handle(event) {
+ var swiper = this;
+ var rtl = swiper.rtlTranslate;
+ var e = event;
+ if (e.originalEvent) { e = e.originalEvent; } // jquery fix
+ var kc = e.keyCode || e.charCode;
+ // Directions locks
+ if (!swiper.allowSlideNext && ((swiper.isHorizontal() && kc === 39) || (swiper.isVertical() && kc === 40))) {
+ return false;
+ }
+ if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && kc === 37) || (swiper.isVertical() && kc === 38))) {
+ return false;
+ }
+ if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
+ return undefined;
+ }
+ if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {
+ return undefined;
+ }
+ if (swiper.params.keyboard.onlyInViewport && (kc === 37 || kc === 39 || kc === 38 || kc === 40)) {
+ var inView = false;
+ // Check that swiper should be inside of visible area of window
+ if (swiper.$el.parents(("." + (swiper.params.slideClass))).length > 0 && swiper.$el.parents(("." + (swiper.params.slideActiveClass))).length === 0) {
+ return undefined;
+ }
+ var windowWidth = win.innerWidth;
+ var windowHeight = win.innerHeight;
+ var swiperOffset = swiper.$el.offset();
+ if (rtl) { swiperOffset.left -= swiper.$el[0].scrollLeft; }
+ var swiperCoord = [
+ [swiperOffset.left, swiperOffset.top],
+ [swiperOffset.left + swiper.width, swiperOffset.top],
+ [swiperOffset.left, swiperOffset.top + swiper.height],
+ [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height] ];
+ for (var i = 0; i < swiperCoord.length; i += 1) {
+ var point = swiperCoord[i];
+ if (
+ point[0] >= 0 && point[0] <= windowWidth &&
+ point[1] >= 0 && point[1] <= windowHeight
+ ) {
+ inView = true;
+ }
+ }
+ if (!inView) { return undefined; }
+ }
+ if (swiper.isHorizontal()) {
+ if (kc === 37 || kc === 39) {
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ }
+ if ((kc === 39 && !rtl) || (kc === 37 && rtl)) { swiper.slideNext(); }
+ if ((kc === 37 && !rtl) || (kc === 39 && rtl)) { swiper.slidePrev(); }
+ } else {
+ if (kc === 38 || kc === 40) {
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ }
+ if (kc === 40) { swiper.slideNext(); }
+ if (kc === 38) { swiper.slidePrev(); }
+ }
+ swiper.emit('keyPress', kc);
+ return undefined;
+ },
+ enable: function enable() {
+ var swiper = this;
+ if (swiper.keyboard.enabled) { return; }
+ $(doc).on('keydown', swiper.keyboard.handle);
+ swiper.keyboard.enabled = true;
+ },
+ disable: function disable() {
+ var swiper = this;
+ if (!swiper.keyboard.enabled) { return; }
+ $(doc).off('keydown', swiper.keyboard.handle);
+ swiper.keyboard.enabled = false;
+ },
+ };
+
+ var Keyboard$1 = {
+ name: 'keyboard',
+ params: {
+ keyboard: {
+ enabled: false,
+ onlyInViewport: true,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ keyboard: {
+ enabled: false,
+ enable: Keyboard.enable.bind(swiper),
+ disable: Keyboard.disable.bind(swiper),
+ handle: Keyboard.handle.bind(swiper),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.keyboard.enabled) {
+ swiper.keyboard.enable();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.keyboard.enabled) {
+ swiper.keyboard.disable();
+ }
+ },
+ },
+ };
+
+ function isEventSupported() {
+ var eventName = 'onwheel';
+ var isSupported = eventName in doc;
+
+ if (!isSupported) {
+ var element = doc.createElement('div');
+ element.setAttribute(eventName, 'return;');
+ isSupported = typeof element[eventName] === 'function';
+ }
+
+ if (!isSupported &&
+ doc.implementation &&
+ doc.implementation.hasFeature &&
+ // always returns true in newer browsers as per the standard.
+ // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
+ doc.implementation.hasFeature('', '') !== true
+ ) {
+ // This is the only way to test support for the `wheel` event in IE9+.
+ isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');
+ }
+
+ return isSupported;
+ }
+ var Mousewheel = {
+ lastScrollTime: Utils.now(),
+ event: (function getEvent() {
+ if (win.navigator.userAgent.indexOf('firefox') > -1) { return 'DOMMouseScroll'; }
+ return isEventSupported() ? 'wheel' : 'mousewheel';
+ }()),
+ normalize: function normalize(e) {
+ // Reasonable defaults
+ var PIXEL_STEP = 10;
+ var LINE_HEIGHT = 40;
+ var PAGE_HEIGHT = 800;
+
+ var sX = 0;
+ var sY = 0; // spinX, spinY
+ var pX = 0;
+ var pY = 0; // pixelX, pixelY
+
+ // Legacy
+ if ('detail' in e) {
+ sY = e.detail;
+ }
+ if ('wheelDelta' in e) {
+ sY = -e.wheelDelta / 120;
+ }
+ if ('wheelDeltaY' in e) {
+ sY = -e.wheelDeltaY / 120;
+ }
+ if ('wheelDeltaX' in e) {
+ sX = -e.wheelDeltaX / 120;
+ }
+
+ // side scrolling on FF with DOMMouseScroll
+ if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
+ sX = sY;
+ sY = 0;
+ }
+
+ pX = sX * PIXEL_STEP;
+ pY = sY * PIXEL_STEP;
+
+ if ('deltaY' in e) {
+ pY = e.deltaY;
+ }
+ if ('deltaX' in e) {
+ pX = e.deltaX;
+ }
+
+ if ((pX || pY) && e.deltaMode) {
+ if (e.deltaMode === 1) { // delta in LINE units
+ pX *= LINE_HEIGHT;
+ pY *= LINE_HEIGHT;
+ } else { // delta in PAGE units
+ pX *= PAGE_HEIGHT;
+ pY *= PAGE_HEIGHT;
+ }
+ }
+
+ // Fall-back if spin cannot be determined
+ if (pX && !sX) {
+ sX = (pX < 1) ? -1 : 1;
+ }
+ if (pY && !sY) {
+ sY = (pY < 1) ? -1 : 1;
+ }
+
+ return {
+ spinX: sX,
+ spinY: sY,
+ pixelX: pX,
+ pixelY: pY,
+ };
+ },
+ handleMouseEnter: function handleMouseEnter() {
+ var swiper = this;
+ swiper.mouseEntered = true;
+ },
+ handleMouseLeave: function handleMouseLeave() {
+ var swiper = this;
+ swiper.mouseEntered = false;
+ },
+ handle: function handle(event) {
+ var e = event;
+ var swiper = this;
+ var params = swiper.params.mousewheel;
+
+ if (!swiper.mouseEntered && !params.releaseOnEdges) { return true; }
+
+ if (e.originalEvent) { e = e.originalEvent; } // jquery fix
+ var delta = 0;
+ var rtlFactor = swiper.rtlTranslate ? -1 : 1;
+
+ var data = Mousewheel.normalize(e);
+
+ if (params.forceToAxis) {
+ if (swiper.isHorizontal()) {
+ if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) { delta = data.pixelX * rtlFactor; }
+ else { return true; }
+ } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) { delta = data.pixelY; }
+ else { return true; }
+ } else {
+ delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
+ }
+
+ if (delta === 0) { return true; }
+
+ if (params.invert) { delta = -delta; }
+
+ if (!swiper.params.freeMode) {
+ if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {
+ if (delta < 0) {
+ if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
+ swiper.slideNext();
+ swiper.emit('scroll', e);
+ } else if (params.releaseOnEdges) { return true; }
+ } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
+ swiper.slidePrev();
+ swiper.emit('scroll', e);
+ } else if (params.releaseOnEdges) { return true; }
+ }
+ swiper.mousewheel.lastScrollTime = (new win.Date()).getTime();
+ } else {
+ // Freemode or scrollContainer:
+ if (swiper.params.loop) {
+ swiper.loopFix();
+ }
+ var position = swiper.getTranslate() + (delta * params.sensitivity);
+ var wasBeginning = swiper.isBeginning;
+ var wasEnd = swiper.isEnd;
+
+ if (position >= swiper.minTranslate()) { position = swiper.minTranslate(); }
+ if (position <= swiper.maxTranslate()) { position = swiper.maxTranslate(); }
+
+ swiper.setTransition(0);
+ swiper.setTranslate(position);
+ swiper.updateProgress();
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+
+ if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {
+ swiper.updateSlidesClasses();
+ }
+
+ if (swiper.params.freeModeSticky) {
+ clearTimeout(swiper.mousewheel.timeout);
+ swiper.mousewheel.timeout = Utils.nextTick(function () {
+ swiper.slideToClosest();
+ }, 300);
+ }
+ // Emit event
+ swiper.emit('scroll', e);
+
+ // Stop autoplay
+ if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) { swiper.autoplay.stop(); }
+ // Return page scroll on edge positions
+ if (position === swiper.minTranslate() || position === swiper.maxTranslate()) { return true; }
+ }
+
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ return false;
+ },
+ enable: function enable() {
+ var swiper = this;
+ if (!Mousewheel.event) { return false; }
+ if (swiper.mousewheel.enabled) { return false; }
+ var target = swiper.$el;
+ if (swiper.params.mousewheel.eventsTarged !== 'container') {
+ target = $(swiper.params.mousewheel.eventsTarged);
+ }
+ target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
+ target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
+ target.on(Mousewheel.event, swiper.mousewheel.handle);
+ swiper.mousewheel.enabled = true;
+ return true;
+ },
+ disable: function disable() {
+ var swiper = this;
+ if (!Mousewheel.event) { return false; }
+ if (!swiper.mousewheel.enabled) { return false; }
+ var target = swiper.$el;
+ if (swiper.params.mousewheel.eventsTarged !== 'container') {
+ target = $(swiper.params.mousewheel.eventsTarged);
+ }
+ target.off(Mousewheel.event, swiper.mousewheel.handle);
+ swiper.mousewheel.enabled = false;
+ return true;
+ },
+ };
+
+ var Mousewheel$1 = {
+ name: 'mousewheel',
+ params: {
+ mousewheel: {
+ enabled: false,
+ releaseOnEdges: false,
+ invert: false,
+ forceToAxis: false,
+ sensitivity: 1,
+ eventsTarged: 'container',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ mousewheel: {
+ enabled: false,
+ enable: Mousewheel.enable.bind(swiper),
+ disable: Mousewheel.disable.bind(swiper),
+ handle: Mousewheel.handle.bind(swiper),
+ handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
+ handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
+ lastScrollTime: Utils.now(),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.mousewheel.enabled) { swiper.mousewheel.enable(); }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.mousewheel.enabled) { swiper.mousewheel.disable(); }
+ },
+ },
+ };
+
+ var Navigation = {
+ update: function update() {
+ // Update Navigation Buttons
+ var swiper = this;
+ var params = swiper.params.navigation;
+
+ if (swiper.params.loop) { return; }
+ var ref = swiper.navigation;
+ var $nextEl = ref.$nextEl;
+ var $prevEl = ref.$prevEl;
+
+ if ($prevEl && $prevEl.length > 0) {
+ if (swiper.isBeginning) {
+ $prevEl.addClass(params.disabledClass);
+ } else {
+ $prevEl.removeClass(params.disabledClass);
+ }
+ $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
+ }
+ if ($nextEl && $nextEl.length > 0) {
+ if (swiper.isEnd) {
+ $nextEl.addClass(params.disabledClass);
+ } else {
+ $nextEl.removeClass(params.disabledClass);
+ }
+ $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ var params = swiper.params.navigation;
+ if (!(params.nextEl || params.prevEl)) { return; }
+
+ var $nextEl;
+ var $prevEl;
+ if (params.nextEl) {
+ $nextEl = $(params.nextEl);
+ if (
+ swiper.params.uniqueNavElements &&
+ typeof params.nextEl === 'string' &&
+ $nextEl.length > 1 &&
+ swiper.$el.find(params.nextEl).length === 1
+ ) {
+ $nextEl = swiper.$el.find(params.nextEl);
+ }
+ }
+ if (params.prevEl) {
+ $prevEl = $(params.prevEl);
+ if (
+ swiper.params.uniqueNavElements &&
+ typeof params.prevEl === 'string' &&
+ $prevEl.length > 1 &&
+ swiper.$el.find(params.prevEl).length === 1
+ ) {
+ $prevEl = swiper.$el.find(params.prevEl);
+ }
+ }
+
+ if ($nextEl && $nextEl.length > 0) {
+ $nextEl.on('click', function (e) {
+ e.preventDefault();
+ if (swiper.isEnd && !swiper.params.loop) { return; }
+ swiper.slideNext();
+ });
+ }
+ if ($prevEl && $prevEl.length > 0) {
+ $prevEl.on('click', function (e) {
+ e.preventDefault();
+ if (swiper.isBeginning && !swiper.params.loop) { return; }
+ swiper.slidePrev();
+ });
+ }
+
+ Utils.extend(swiper.navigation, {
+ $nextEl: $nextEl,
+ nextEl: $nextEl && $nextEl[0],
+ $prevEl: $prevEl,
+ prevEl: $prevEl && $prevEl[0],
+ });
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ var ref = swiper.navigation;
+ var $nextEl = ref.$nextEl;
+ var $prevEl = ref.$prevEl;
+ if ($nextEl && $nextEl.length) {
+ $nextEl.off('click');
+ $nextEl.removeClass(swiper.params.navigation.disabledClass);
+ }
+ if ($prevEl && $prevEl.length) {
+ $prevEl.off('click');
+ $prevEl.removeClass(swiper.params.navigation.disabledClass);
+ }
+ },
+ };
+
+ var Navigation$1 = {
+ name: 'navigation',
+ params: {
+ navigation: {
+ nextEl: null,
+ prevEl: null,
+
+ hideOnClick: false,
+ disabledClass: 'swiper-button-disabled',
+ hiddenClass: 'swiper-button-hidden',
+ lockClass: 'swiper-button-lock',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ navigation: {
+ init: Navigation.init.bind(swiper),
+ update: Navigation.update.bind(swiper),
+ destroy: Navigation.destroy.bind(swiper),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ swiper.navigation.init();
+ swiper.navigation.update();
+ },
+ toEdge: function toEdge() {
+ var swiper = this;
+ swiper.navigation.update();
+ },
+ fromEdge: function fromEdge() {
+ var swiper = this;
+ swiper.navigation.update();
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.navigation.destroy();
+ },
+ click: function click(e) {
+ var swiper = this;
+ var ref = swiper.navigation;
+ var $nextEl = ref.$nextEl;
+ var $prevEl = ref.$prevEl;
+ if (
+ swiper.params.navigation.hideOnClick &&
+ !$(e.target).is($prevEl) &&
+ !$(e.target).is($nextEl)
+ ) {
+ if ($nextEl) { $nextEl.toggleClass(swiper.params.navigation.hiddenClass); }
+ if ($prevEl) { $prevEl.toggleClass(swiper.params.navigation.hiddenClass); }
+ }
+ },
+ },
+ };
+
+ var Pagination = {
+ update: function update() {
+ // Render || Update Pagination bullets/items
+ var swiper = this;
+ var rtl = swiper.rtl;
+ var params = swiper.params.pagination;
+ if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }
+ var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
+ var $el = swiper.pagination.$el;
+ // Current/Total
+ var current;
+ var total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
+ if (swiper.params.loop) {
+ current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
+ if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) {
+ current -= (slidesLength - (swiper.loopedSlides * 2));
+ }
+ if (current > total - 1) { current -= total; }
+ if (current < 0 && swiper.params.paginationType !== 'bullets') { current = total + current; }
+ } else if (typeof swiper.snapIndex !== 'undefined') {
+ current = swiper.snapIndex;
+ } else {
+ current = swiper.activeIndex || 0;
+ }
+ // Types
+ if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
+ var bullets = swiper.pagination.bullets;
+ var firstIndex;
+ var lastIndex;
+ var midIndex;
+ if (params.dynamicBullets) {
+ swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
+ $el.css(swiper.isHorizontal() ? 'width' : 'height', ((swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)) + "px"));
+ if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
+ swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex);
+ if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) {
+ swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
+ } else if (swiper.pagination.dynamicBulletIndex < 0) {
+ swiper.pagination.dynamicBulletIndex = 0;
+ }
+ }
+ firstIndex = current - swiper.pagination.dynamicBulletIndex;
+ lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
+ midIndex = (lastIndex + firstIndex) / 2;
+ }
+ bullets.removeClass(((params.bulletActiveClass) + " " + (params.bulletActiveClass) + "-next " + (params.bulletActiveClass) + "-next-next " + (params.bulletActiveClass) + "-prev " + (params.bulletActiveClass) + "-prev-prev " + (params.bulletActiveClass) + "-main"));
+ if ($el.length > 1) {
+ bullets.each(function (index, bullet) {
+ var $bullet = $(bullet);
+ var bulletIndex = $bullet.index();
+ if (bulletIndex === current) {
+ $bullet.addClass(params.bulletActiveClass);
+ }
+ if (params.dynamicBullets) {
+ if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
+ $bullet.addClass(((params.bulletActiveClass) + "-main"));
+ }
+ if (bulletIndex === firstIndex) {
+ $bullet
+ .prev()
+ .addClass(((params.bulletActiveClass) + "-prev"))
+ .prev()
+ .addClass(((params.bulletActiveClass) + "-prev-prev"));
+ }
+ if (bulletIndex === lastIndex) {
+ $bullet
+ .next()
+ .addClass(((params.bulletActiveClass) + "-next"))
+ .next()
+ .addClass(((params.bulletActiveClass) + "-next-next"));
+ }
+ }
+ });
+ } else {
+ var $bullet = bullets.eq(current);
+ $bullet.addClass(params.bulletActiveClass);
+ if (params.dynamicBullets) {
+ var $firstDisplayedBullet = bullets.eq(firstIndex);
+ var $lastDisplayedBullet = bullets.eq(lastIndex);
+ for (var i = firstIndex; i <= lastIndex; i += 1) {
+ bullets.eq(i).addClass(((params.bulletActiveClass) + "-main"));
+ }
+ $firstDisplayedBullet
+ .prev()
+ .addClass(((params.bulletActiveClass) + "-prev"))
+ .prev()
+ .addClass(((params.bulletActiveClass) + "-prev-prev"));
+ $lastDisplayedBullet
+ .next()
+ .addClass(((params.bulletActiveClass) + "-next"))
+ .next()
+ .addClass(((params.bulletActiveClass) + "-next-next"));
+ }
+ }
+ if (params.dynamicBullets) {
+ var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
+ var bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize);
+ var offsetProp = rtl ? 'right' : 'left';
+ bullets.css(swiper.isHorizontal() ? offsetProp : 'top', (bulletsOffset + "px"));
+ }
+ }
+ if (params.type === 'fraction') {
+ $el.find(("." + (params.currentClass))).text(params.formatFractionCurrent(current + 1));
+ $el.find(("." + (params.totalClass))).text(params.formatFractionTotal(total));
+ }
+ if (params.type === 'progressbar') {
+ var progressbarDirection;
+ if (params.progressbarOpposite) {
+ progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
+ } else {
+ progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
+ }
+ var scale = (current + 1) / total;
+ var scaleX = 1;
+ var scaleY = 1;
+ if (progressbarDirection === 'horizontal') {
+ scaleX = scale;
+ } else {
+ scaleY = scale;
+ }
+ $el.find(("." + (params.progressbarFillClass))).transform(("translate3d(0,0,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")")).transition(swiper.params.speed);
+ }
+ if (params.type === 'custom' && params.renderCustom) {
+ $el.html(params.renderCustom(swiper, current + 1, total));
+ swiper.emit('paginationRender', swiper, $el[0]);
+ } else {
+ swiper.emit('paginationUpdate', swiper, $el[0]);
+ }
+ $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
+ },
+ render: function render() {
+ // Render Container
+ var swiper = this;
+ var params = swiper.params.pagination;
+ if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }
+ var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
+
+ var $el = swiper.pagination.$el;
+ var paginationHTML = '';
+ if (params.type === 'bullets') {
+ var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
+ for (var i = 0; i < numberOfBullets; i += 1) {
+ if (params.renderBullet) {
+ paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
+ } else {
+ paginationHTML += "<" + (params.bulletElement) + " class=\"" + (params.bulletClass) + "\"></" + (params.bulletElement) + ">";
+ }
+ }
+ $el.html(paginationHTML);
+ swiper.pagination.bullets = $el.find(("." + (params.bulletClass)));
+ }
+ if (params.type === 'fraction') {
+ if (params.renderFraction) {
+ paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
+ } else {
+ paginationHTML =
+ "<span class=\"" + (params.currentClass) + "\"></span>" +
+ ' / ' +
+ "<span class=\"" + (params.totalClass) + "\"></span>";
+ }
+ $el.html(paginationHTML);
+ }
+ if (params.type === 'progressbar') {
+ if (params.renderProgressbar) {
+ paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
+ } else {
+ paginationHTML = "<span class=\"" + (params.progressbarFillClass) + "\"></span>";
+ }
+ $el.html(paginationHTML);
+ }
+ if (params.type !== 'custom') {
+ swiper.emit('paginationRender', swiper.pagination.$el[0]);
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ var params = swiper.params.pagination;
+ if (!params.el) { return; }
+
+ var $el = $(params.el);
+ if ($el.length === 0) { return; }
+
+ if (
+ swiper.params.uniqueNavElements &&
+ typeof params.el === 'string' &&
+ $el.length > 1 &&
+ swiper.$el.find(params.el).length === 1
+ ) {
+ $el = swiper.$el.find(params.el);
+ }
+
+ if (params.type === 'bullets' && params.clickable) {
+ $el.addClass(params.clickableClass);
+ }
+
+ $el.addClass(params.modifierClass + params.type);
+
+ if (params.type === 'bullets' && params.dynamicBullets) {
+ $el.addClass(("" + (params.modifierClass) + (params.type) + "-dynamic"));
+ swiper.pagination.dynamicBulletIndex = 0;
+ if (params.dynamicMainBullets < 1) {
+ params.dynamicMainBullets = 1;
+ }
+ }
+ if (params.type === 'progressbar' && params.progressbarOpposite) {
+ $el.addClass(params.progressbarOppositeClass);
+ }
+
+ if (params.clickable) {
+ $el.on('click', ("." + (params.bulletClass)), function onClick(e) {
+ e.preventDefault();
+ var index = $(this).index() * swiper.params.slidesPerGroup;
+ if (swiper.params.loop) { index += swiper.loopedSlides; }
+ swiper.slideTo(index);
+ });
+ }
+
+ Utils.extend(swiper.pagination, {
+ $el: $el,
+ el: $el[0],
+ });
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ var params = swiper.params.pagination;
+ if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) { return; }
+ var $el = swiper.pagination.$el;
+
+ $el.removeClass(params.hiddenClass);
+ $el.removeClass(params.modifierClass + params.type);
+ if (swiper.pagination.bullets) { swiper.pagination.bullets.removeClass(params.bulletActiveClass); }
+ if (params.clickable) {
+ $el.off('click', ("." + (params.bulletClass)));
+ }
+ },
+ };
+
+ var Pagination$1 = {
+ name: 'pagination',
+ params: {
+ pagination: {
+ el: null,
+ bulletElement: 'span',
+ clickable: false,
+ hideOnClick: false,
+ renderBullet: null,
+ renderProgressbar: null,
+ renderFraction: null,
+ renderCustom: null,
+ progressbarOpposite: false,
+ type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'
+ dynamicBullets: false,
+ dynamicMainBullets: 1,
+ formatFractionCurrent: function (number) { return number; },
+ formatFractionTotal: function (number) { return number; },
+ bulletClass: 'swiper-pagination-bullet',
+ bulletActiveClass: 'swiper-pagination-bullet-active',
+ modifierClass: 'swiper-pagination-', // NEW
+ currentClass: 'swiper-pagination-current',
+ totalClass: 'swiper-pagination-total',
+ hiddenClass: 'swiper-pagination-hidden',
+ progressbarFillClass: 'swiper-pagination-progressbar-fill',
+ progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
+ clickableClass: 'swiper-pagination-clickable', // NEW
+ lockClass: 'swiper-pagination-lock',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ pagination: {
+ init: Pagination.init.bind(swiper),
+ render: Pagination.render.bind(swiper),
+ update: Pagination.update.bind(swiper),
+ destroy: Pagination.destroy.bind(swiper),
+ dynamicBulletIndex: 0,
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ swiper.pagination.init();
+ swiper.pagination.render();
+ swiper.pagination.update();
+ },
+ activeIndexChange: function activeIndexChange() {
+ var swiper = this;
+ if (swiper.params.loop) {
+ swiper.pagination.update();
+ } else if (typeof swiper.snapIndex === 'undefined') {
+ swiper.pagination.update();
+ }
+ },
+ snapIndexChange: function snapIndexChange() {
+ var swiper = this;
+ if (!swiper.params.loop) {
+ swiper.pagination.update();
+ }
+ },
+ slidesLengthChange: function slidesLengthChange() {
+ var swiper = this;
+ if (swiper.params.loop) {
+ swiper.pagination.render();
+ swiper.pagination.update();
+ }
+ },
+ snapGridLengthChange: function snapGridLengthChange() {
+ var swiper = this;
+ if (!swiper.params.loop) {
+ swiper.pagination.render();
+ swiper.pagination.update();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.pagination.destroy();
+ },
+ click: function click(e) {
+ var swiper = this;
+ if (
+ swiper.params.pagination.el &&
+ swiper.params.pagination.hideOnClick &&
+ swiper.pagination.$el.length > 0 &&
+ !$(e.target).hasClass(swiper.params.pagination.bulletClass)
+ ) {
+ swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
+ }
+ },
+ },
+ };
+
+ var Scrollbar = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }
+ var scrollbar = swiper.scrollbar;
+ var rtl = swiper.rtlTranslate;
+ var progress = swiper.progress;
+ var dragSize = scrollbar.dragSize;
+ var trackSize = scrollbar.trackSize;
+ var $dragEl = scrollbar.$dragEl;
+ var $el = scrollbar.$el;
+ var params = swiper.params.scrollbar;
+
+ var newSize = dragSize;
+ var newPos = (trackSize - dragSize) * progress;
+ if (rtl) {
+ newPos = -newPos;
+ if (newPos > 0) {
+ newSize = dragSize - newPos;
+ newPos = 0;
+ } else if (-newPos + dragSize > trackSize) {
+ newSize = trackSize + newPos;
+ }
+ } else if (newPos < 0) {
+ newSize = dragSize + newPos;
+ newPos = 0;
+ } else if (newPos + dragSize > trackSize) {
+ newSize = trackSize - newPos;
+ }
+ if (swiper.isHorizontal()) {
+ if (Support.transforms3d) {
+ $dragEl.transform(("translate3d(" + newPos + "px, 0, 0)"));
+ } else {
+ $dragEl.transform(("translateX(" + newPos + "px)"));
+ }
+ $dragEl[0].style.width = newSize + "px";
+ } else {
+ if (Support.transforms3d) {
+ $dragEl.transform(("translate3d(0px, " + newPos + "px, 0)"));
+ } else {
+ $dragEl.transform(("translateY(" + newPos + "px)"));
+ }
+ $dragEl[0].style.height = newSize + "px";
+ }
+ if (params.hide) {
+ clearTimeout(swiper.scrollbar.timeout);
+ $el[0].style.opacity = 1;
+ swiper.scrollbar.timeout = setTimeout(function () {
+ $el[0].style.opacity = 0;
+ $el.transition(400);
+ }, 1000);
+ }
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }
+ swiper.scrollbar.$dragEl.transition(duration);
+ },
+ updateSize: function updateSize() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) { return; }
+
+ var scrollbar = swiper.scrollbar;
+ var $dragEl = scrollbar.$dragEl;
+ var $el = scrollbar.$el;
+
+ $dragEl[0].style.width = '';
+ $dragEl[0].style.height = '';
+ var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
+
+ var divider = swiper.size / swiper.virtualSize;
+ var moveDivider = divider * (trackSize / swiper.size);
+ var dragSize;
+ if (swiper.params.scrollbar.dragSize === 'auto') {
+ dragSize = trackSize * divider;
+ } else {
+ dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
+ }
+
+ if (swiper.isHorizontal()) {
+ $dragEl[0].style.width = dragSize + "px";
+ } else {
+ $dragEl[0].style.height = dragSize + "px";
+ }
+
+ if (divider >= 1) {
+ $el[0].style.display = 'none';
+ } else {
+ $el[0].style.display = '';
+ }
+ if (swiper.params.scrollbarHide) {
+ $el[0].style.opacity = 0;
+ }
+ Utils.extend(scrollbar, {
+ trackSize: trackSize,
+ divider: divider,
+ moveDivider: moveDivider,
+ dragSize: dragSize,
+ });
+ scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
+ },
+ setDragPosition: function setDragPosition(e) {
+ var swiper = this;
+ var scrollbar = swiper.scrollbar;
+ var rtl = swiper.rtlTranslate;
+ var $el = scrollbar.$el;
+ var dragSize = scrollbar.dragSize;
+ var trackSize = scrollbar.trackSize;
+
+ var pointerPosition;
+ if (swiper.isHorizontal()) {
+ pointerPosition = ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageX : e.pageX || e.clientX);
+ } else {
+ pointerPosition = ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].pageY : e.pageY || e.clientY);
+ }
+ var positionRatio;
+ positionRatio = ((pointerPosition) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragSize / 2)) / (trackSize - dragSize);
+ positionRatio = Math.max(Math.min(positionRatio, 1), 0);
+ if (rtl) {
+ positionRatio = 1 - positionRatio;
+ }
+
+ var position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio);
+
+ swiper.updateProgress(position);
+ swiper.setTranslate(position);
+ swiper.updateActiveIndex();
+ swiper.updateSlidesClasses();
+ },
+ onDragStart: function onDragStart(e) {
+ var swiper = this;
+ var params = swiper.params.scrollbar;
+ var scrollbar = swiper.scrollbar;
+ var $wrapperEl = swiper.$wrapperEl;
+ var $el = scrollbar.$el;
+ var $dragEl = scrollbar.$dragEl;
+ swiper.scrollbar.isTouched = true;
+ e.preventDefault();
+ e.stopPropagation();
+
+ $wrapperEl.transition(100);
+ $dragEl.transition(100);
+ scrollbar.setDragPosition(e);
+
+ clearTimeout(swiper.scrollbar.dragTimeout);
+
+ $el.transition(0);
+ if (params.hide) {
+ $el.css('opacity', 1);
+ }
+ swiper.emit('scrollbarDragStart', e);
+ },
+ onDragMove: function onDragMove(e) {
+ var swiper = this;
+ var scrollbar = swiper.scrollbar;
+ var $wrapperEl = swiper.$wrapperEl;
+ var $el = scrollbar.$el;
+ var $dragEl = scrollbar.$dragEl;
+
+ if (!swiper.scrollbar.isTouched) { return; }
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+ scrollbar.setDragPosition(e);
+ $wrapperEl.transition(0);
+ $el.transition(0);
+ $dragEl.transition(0);
+ swiper.emit('scrollbarDragMove', e);
+ },
+ onDragEnd: function onDragEnd(e) {
+ var swiper = this;
+
+ var params = swiper.params.scrollbar;
+ var scrollbar = swiper.scrollbar;
+ var $el = scrollbar.$el;
+
+ if (!swiper.scrollbar.isTouched) { return; }
+ swiper.scrollbar.isTouched = false;
+ if (params.hide) {
+ clearTimeout(swiper.scrollbar.dragTimeout);
+ swiper.scrollbar.dragTimeout = Utils.nextTick(function () {
+ $el.css('opacity', 0);
+ $el.transition(400);
+ }, 1000);
+ }
+ swiper.emit('scrollbarDragEnd', e);
+ if (params.snapOnRelease) {
+ swiper.slideToClosest();
+ }
+ },
+ enableDraggable: function enableDraggable() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el) { return; }
+ var scrollbar = swiper.scrollbar;
+ var touchEvents = swiper.touchEvents;
+ var touchEventsDesktop = swiper.touchEventsDesktop;
+ var params = swiper.params;
+ var $el = scrollbar.$el;
+ var target = $el[0];
+ var activeListener = Support.passiveListener && params.passiveListener ? { passive: false, capture: false } : false;
+ var passiveListener = Support.passiveListener && params.passiveListener ? { passive: true, capture: false } : false;
+ if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
+ doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
+ doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
+ } else {
+ if (Support.touch) {
+ target.addEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener);
+ target.addEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener);
+ target.addEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener);
+ }
+ if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
+ target.addEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener);
+ doc.addEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener);
+ doc.addEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener);
+ }
+ }
+ },
+ disableDraggable: function disableDraggable() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el) { return; }
+ var scrollbar = swiper.scrollbar;
+ var touchEvents = swiper.touchEvents;
+ var touchEventsDesktop = swiper.touchEventsDesktop;
+ var params = swiper.params;
+ var $el = scrollbar.$el;
+ var target = $el[0];
+ var activeListener = Support.passiveListener && params.passiveListener ? { passive: false, capture: false } : false;
+ var passiveListener = Support.passiveListener && params.passiveListener ? { passive: true, capture: false } : false;
+ if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
+ target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
+ doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
+ doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
+ } else {
+ if (Support.touch) {
+ target.removeEventListener(touchEvents.start, swiper.scrollbar.onDragStart, activeListener);
+ target.removeEventListener(touchEvents.move, swiper.scrollbar.onDragMove, activeListener);
+ target.removeEventListener(touchEvents.end, swiper.scrollbar.onDragEnd, passiveListener);
+ }
+ if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) {
+ target.removeEventListener('mousedown', swiper.scrollbar.onDragStart, activeListener);
+ doc.removeEventListener('mousemove', swiper.scrollbar.onDragMove, activeListener);
+ doc.removeEventListener('mouseup', swiper.scrollbar.onDragEnd, passiveListener);
+ }
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.scrollbar.el) { return; }
+ var scrollbar = swiper.scrollbar;
+ var $swiperEl = swiper.$el;
+ var params = swiper.params.scrollbar;
+
+ var $el = $(params.el);
+ if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
+ $el = $swiperEl.find(params.el);
+ }
+
+ var $dragEl = $el.find(("." + (swiper.params.scrollbar.dragClass)));
+ if ($dragEl.length === 0) {
+ $dragEl = $(("<div class=\"" + (swiper.params.scrollbar.dragClass) + "\"></div>"));
+ $el.append($dragEl);
+ }
+
+ Utils.extend(scrollbar, {
+ $el: $el,
+ el: $el[0],
+ $dragEl: $dragEl,
+ dragEl: $dragEl[0],
+ });
+
+ if (params.draggable) {
+ scrollbar.enableDraggable();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.scrollbar.disableDraggable();
+ },
+ };
+
+ var Scrollbar$1 = {
+ name: 'scrollbar',
+ params: {
+ scrollbar: {
+ el: null,
+ dragSize: 'auto',
+ hide: false,
+ draggable: false,
+ snapOnRelease: true,
+ lockClass: 'swiper-scrollbar-lock',
+ dragClass: 'swiper-scrollbar-drag',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ scrollbar: {
+ init: Scrollbar.init.bind(swiper),
+ destroy: Scrollbar.destroy.bind(swiper),
+ updateSize: Scrollbar.updateSize.bind(swiper),
+ setTranslate: Scrollbar.setTranslate.bind(swiper),
+ setTransition: Scrollbar.setTransition.bind(swiper),
+ enableDraggable: Scrollbar.enableDraggable.bind(swiper),
+ disableDraggable: Scrollbar.disableDraggable.bind(swiper),
+ setDragPosition: Scrollbar.setDragPosition.bind(swiper),
+ onDragStart: Scrollbar.onDragStart.bind(swiper),
+ onDragMove: Scrollbar.onDragMove.bind(swiper),
+ onDragEnd: Scrollbar.onDragEnd.bind(swiper),
+ isTouched: false,
+ timeout: null,
+ dragTimeout: null,
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ swiper.scrollbar.init();
+ swiper.scrollbar.updateSize();
+ swiper.scrollbar.setTranslate();
+ },
+ update: function update() {
+ var swiper = this;
+ swiper.scrollbar.updateSize();
+ },
+ resize: function resize() {
+ var swiper = this;
+ swiper.scrollbar.updateSize();
+ },
+ observerUpdate: function observerUpdate() {
+ var swiper = this;
+ swiper.scrollbar.updateSize();
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ swiper.scrollbar.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ swiper.scrollbar.setTransition(duration);
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.scrollbar.destroy();
+ },
+ },
+ };
+
+ var Parallax = {
+ setTransform: function setTransform(el, progress) {
+ var swiper = this;
+ var rtl = swiper.rtl;
+
+ var $el = $(el);
+ var rtlFactor = rtl ? -1 : 1;
+
+ var p = $el.attr('data-swiper-parallax') || '0';
+ var x = $el.attr('data-swiper-parallax-x');
+ var y = $el.attr('data-swiper-parallax-y');
+ var scale = $el.attr('data-swiper-parallax-scale');
+ var opacity = $el.attr('data-swiper-parallax-opacity');
+
+ if (x || y) {
+ x = x || '0';
+ y = y || '0';
+ } else if (swiper.isHorizontal()) {
+ x = p;
+ y = '0';
+ } else {
+ y = p;
+ x = '0';
+ }
+
+ if ((x).indexOf('%') >= 0) {
+ x = (parseInt(x, 10) * progress * rtlFactor) + "%";
+ } else {
+ x = (x * progress * rtlFactor) + "px";
+ }
+ if ((y).indexOf('%') >= 0) {
+ y = (parseInt(y, 10) * progress) + "%";
+ } else {
+ y = (y * progress) + "px";
+ }
+
+ if (typeof opacity !== 'undefined' && opacity !== null) {
+ var currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress)));
+ $el[0].style.opacity = currentOpacity;
+ }
+ if (typeof scale === 'undefined' || scale === null) {
+ $el.transform(("translate3d(" + x + ", " + y + ", 0px)"));
+ } else {
+ var currentScale = scale - ((scale - 1) * (1 - Math.abs(progress)));
+ $el.transform(("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")"));
+ }
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var $el = swiper.$el;
+ var slides = swiper.slides;
+ var progress = swiper.progress;
+ var snapGrid = swiper.snapGrid;
+ $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]')
+ .each(function (index, el) {
+ swiper.parallax.setTransform(el, progress);
+ });
+ slides.each(function (slideIndex, slideEl) {
+ var slideProgress = slideEl.progress;
+ if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
+ slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1));
+ }
+ slideProgress = Math.min(Math.max(slideProgress, -1), 1);
+ $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]')
+ .each(function (index, el) {
+ swiper.parallax.setTransform(el, slideProgress);
+ });
+ });
+ },
+ setTransition: function setTransition(duration) {
+ if ( duration === void 0 ) duration = this.params.speed;
+
+ var swiper = this;
+ var $el = swiper.$el;
+ $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]')
+ .each(function (index, parallaxEl) {
+ var $parallaxEl = $(parallaxEl);
+ var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
+ if (duration === 0) { parallaxDuration = 0; }
+ $parallaxEl.transition(parallaxDuration);
+ });
+ },
+ };
+
+ var Parallax$1 = {
+ name: 'parallax',
+ params: {
+ parallax: {
+ enabled: false,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ parallax: {
+ setTransform: Parallax.setTransform.bind(swiper),
+ setTranslate: Parallax.setTranslate.bind(swiper),
+ setTransition: Parallax.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (!swiper.params.parallax.enabled) { return; }
+ swiper.params.watchSlidesProgress = true;
+ },
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.parallax) { return; }
+ swiper.parallax.setTranslate();
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (!swiper.params.parallax) { return; }
+ swiper.parallax.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (!swiper.params.parallax) { return; }
+ swiper.parallax.setTransition(duration);
+ },
+ },
+ };
+
+ var Zoom = {
+ // Calc Scale From Multi-touches
+ getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {
+ if (e.targetTouches.length < 2) { return 1; }
+ var x1 = e.targetTouches[0].pageX;
+ var y1 = e.targetTouches[0].pageY;
+ var x2 = e.targetTouches[1].pageX;
+ var y2 = e.targetTouches[1].pageY;
+ var distance = Math.sqrt((Math.pow( (x2 - x1), 2 )) + (Math.pow( (y2 - y1), 2 )));
+ return distance;
+ },
+ // Events
+ onGestureStart: function onGestureStart(e) {
+ var swiper = this;
+ var params = swiper.params.zoom;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ zoom.fakeGestureTouched = false;
+ zoom.fakeGestureMoved = false;
+ if (!Support.gestures) {
+ if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {
+ return;
+ }
+ zoom.fakeGestureTouched = true;
+ gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
+ }
+ if (!gesture.$slideEl || !gesture.$slideEl.length) {
+ gesture.$slideEl = $(e.target).closest('.swiper-slide');
+ if (gesture.$slideEl.length === 0) { gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); }
+ gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
+ gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass)));
+ gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
+ if (gesture.$imageWrapEl.length === 0) {
+ gesture.$imageEl = undefined;
+ return;
+ }
+ }
+ gesture.$imageEl.transition(0);
+ swiper.zoom.isScaling = true;
+ },
+ onGestureChange: function onGestureChange(e) {
+ var swiper = this;
+ var params = swiper.params.zoom;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ if (!Support.gestures) {
+ if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {
+ return;
+ }
+ zoom.fakeGestureMoved = true;
+ gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
+ }
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ if (Support.gestures) {
+ swiper.zoom.scale = e.scale * zoom.currentScale;
+ } else {
+ zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale;
+ }
+ if (zoom.scale > gesture.maxRatio) {
+ zoom.scale = (gesture.maxRatio - 1) + (Math.pow( ((zoom.scale - gesture.maxRatio) + 1), 0.5 ));
+ }
+ if (zoom.scale < params.minRatio) {
+ zoom.scale = (params.minRatio + 1) - (Math.pow( ((params.minRatio - zoom.scale) + 1), 0.5 ));
+ }
+ gesture.$imageEl.transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")"));
+ },
+ onGestureEnd: function onGestureEnd(e) {
+ var swiper = this;
+ var params = swiper.params.zoom;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ if (!Support.gestures) {
+ if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
+ return;
+ }
+ if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) {
+ return;
+ }
+ zoom.fakeGestureTouched = false;
+ zoom.fakeGestureMoved = false;
+ }
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
+ gesture.$imageEl.transition(swiper.params.speed).transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")"));
+ zoom.currentScale = zoom.scale;
+ zoom.isScaling = false;
+ if (zoom.scale === 1) { gesture.$slideEl = undefined; }
+ },
+ onTouchStart: function onTouchStart(e) {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ var image = zoom.image;
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ if (image.isTouched) { return; }
+ if (Device.android) { e.preventDefault(); }
+ image.isTouched = true;
+ image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
+ image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
+ },
+ onTouchMove: function onTouchMove(e) {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ var image = zoom.image;
+ var velocity = zoom.velocity;
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ swiper.allowClick = false;
+ if (!image.isTouched || !gesture.$slideEl) { return; }
+
+ if (!image.isMoved) {
+ image.width = gesture.$imageEl[0].offsetWidth;
+ image.height = gesture.$imageEl[0].offsetHeight;
+ image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
+ image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
+ gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
+ gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
+ gesture.$imageWrapEl.transition(0);
+ if (swiper.rtl) {
+ image.startX = -image.startX;
+ image.startY = -image.startY;
+ }
+ }
+ // Define if we need image drag
+ var scaledWidth = image.width * zoom.scale;
+ var scaledHeight = image.height * zoom.scale;
+
+ if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) { return; }
+
+ image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
+ image.maxX = -image.minX;
+ image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
+ image.maxY = -image.minY;
+
+ image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
+ image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
+
+ if (!image.isMoved && !zoom.isScaling) {
+ if (
+ swiper.isHorizontal() &&
+ (
+ (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x) ||
+ (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)
+ )
+ ) {
+ image.isTouched = false;
+ return;
+ } else if (
+ !swiper.isHorizontal() &&
+ (
+ (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y) ||
+ (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)
+ )
+ ) {
+ image.isTouched = false;
+ return;
+ }
+ }
+ e.preventDefault();
+ e.stopPropagation();
+
+ image.isMoved = true;
+ image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX;
+ image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY;
+
+ if (image.currentX < image.minX) {
+ image.currentX = (image.minX + 1) - (Math.pow( ((image.minX - image.currentX) + 1), 0.8 ));
+ }
+ if (image.currentX > image.maxX) {
+ image.currentX = (image.maxX - 1) + (Math.pow( ((image.currentX - image.maxX) + 1), 0.8 ));
+ }
+
+ if (image.currentY < image.minY) {
+ image.currentY = (image.minY + 1) - (Math.pow( ((image.minY - image.currentY) + 1), 0.8 ));
+ }
+ if (image.currentY > image.maxY) {
+ image.currentY = (image.maxY - 1) + (Math.pow( ((image.currentY - image.maxY) + 1), 0.8 ));
+ }
+
+ // Velocity
+ if (!velocity.prevPositionX) { velocity.prevPositionX = image.touchesCurrent.x; }
+ if (!velocity.prevPositionY) { velocity.prevPositionY = image.touchesCurrent.y; }
+ if (!velocity.prevTime) { velocity.prevTime = Date.now(); }
+ velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
+ velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
+ if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) { velocity.x = 0; }
+ if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) { velocity.y = 0; }
+ velocity.prevPositionX = image.touchesCurrent.x;
+ velocity.prevPositionY = image.touchesCurrent.y;
+ velocity.prevTime = Date.now();
+
+ gesture.$imageWrapEl.transform(("translate3d(" + (image.currentX) + "px, " + (image.currentY) + "px,0)"));
+ },
+ onTouchEnd: function onTouchEnd() {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ var image = zoom.image;
+ var velocity = zoom.velocity;
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+ if (!image.isTouched || !image.isMoved) {
+ image.isTouched = false;
+ image.isMoved = false;
+ return;
+ }
+ image.isTouched = false;
+ image.isMoved = false;
+ var momentumDurationX = 300;
+ var momentumDurationY = 300;
+ var momentumDistanceX = velocity.x * momentumDurationX;
+ var newPositionX = image.currentX + momentumDistanceX;
+ var momentumDistanceY = velocity.y * momentumDurationY;
+ var newPositionY = image.currentY + momentumDistanceY;
+
+ // Fix duration
+ if (velocity.x !== 0) { momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); }
+ if (velocity.y !== 0) { momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); }
+ var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
+
+ image.currentX = newPositionX;
+ image.currentY = newPositionY;
+
+ // Define if we need image drag
+ var scaledWidth = image.width * zoom.scale;
+ var scaledHeight = image.height * zoom.scale;
+ image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0);
+ image.maxX = -image.minX;
+ image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0);
+ image.maxY = -image.minY;
+ image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
+ image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
+
+ gesture.$imageWrapEl.transition(momentumDuration).transform(("translate3d(" + (image.currentX) + "px, " + (image.currentY) + "px,0)"));
+ },
+ onTransitionEnd: function onTransitionEnd() {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ var gesture = zoom.gesture;
+ if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
+ gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
+ gesture.$imageWrapEl.transform('translate3d(0,0,0)');
+ gesture.$slideEl = undefined;
+ gesture.$imageEl = undefined;
+ gesture.$imageWrapEl = undefined;
+
+ zoom.scale = 1;
+ zoom.currentScale = 1;
+ }
+ },
+ // Toggle Zoom
+ toggle: function toggle(e) {
+ var swiper = this;
+ var zoom = swiper.zoom;
+
+ if (zoom.scale && zoom.scale !== 1) {
+ // Zoom Out
+ zoom.out();
+ } else {
+ // Zoom In
+ zoom.in(e);
+ }
+ },
+ in: function in$1(e) {
+ var swiper = this;
+
+ var zoom = swiper.zoom;
+ var params = swiper.params.zoom;
+ var gesture = zoom.gesture;
+ var image = zoom.image;
+
+ if (!gesture.$slideEl) {
+ gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);
+ gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
+ gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass)));
+ }
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+
+ gesture.$slideEl.addClass(("" + (params.zoomedSlideClass)));
+
+ var touchX;
+ var touchY;
+ var offsetX;
+ var offsetY;
+ var diffX;
+ var diffY;
+ var translateX;
+ var translateY;
+ var imageWidth;
+ var imageHeight;
+ var scaledWidth;
+ var scaledHeight;
+ var translateMinX;
+ var translateMinY;
+ var translateMaxX;
+ var translateMaxY;
+ var slideWidth;
+ var slideHeight;
+
+ if (typeof image.touchesStart.x === 'undefined' && e) {
+ touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
+ touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
+ } else {
+ touchX = image.touchesStart.x;
+ touchY = image.touchesStart.y;
+ }
+
+ zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
+ zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
+ if (e) {
+ slideWidth = gesture.$slideEl[0].offsetWidth;
+ slideHeight = gesture.$slideEl[0].offsetHeight;
+ offsetX = gesture.$slideEl.offset().left;
+ offsetY = gesture.$slideEl.offset().top;
+ diffX = (offsetX + (slideWidth / 2)) - touchX;
+ diffY = (offsetY + (slideHeight / 2)) - touchY;
+
+ imageWidth = gesture.$imageEl[0].offsetWidth;
+ imageHeight = gesture.$imageEl[0].offsetHeight;
+ scaledWidth = imageWidth * zoom.scale;
+ scaledHeight = imageHeight * zoom.scale;
+
+ translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0);
+ translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0);
+ translateMaxX = -translateMinX;
+ translateMaxY = -translateMinY;
+
+ translateX = diffX * zoom.scale;
+ translateY = diffY * zoom.scale;
+
+ if (translateX < translateMinX) {
+ translateX = translateMinX;
+ }
+ if (translateX > translateMaxX) {
+ translateX = translateMaxX;
+ }
+
+ if (translateY < translateMinY) {
+ translateY = translateMinY;
+ }
+ if (translateY > translateMaxY) {
+ translateY = translateMaxY;
+ }
+ } else {
+ translateX = 0;
+ translateY = 0;
+ }
+ gesture.$imageWrapEl.transition(300).transform(("translate3d(" + translateX + "px, " + translateY + "px,0)"));
+ gesture.$imageEl.transition(300).transform(("translate3d(0,0,0) scale(" + (zoom.scale) + ")"));
+ },
+ out: function out() {
+ var swiper = this;
+
+ var zoom = swiper.zoom;
+ var params = swiper.params.zoom;
+ var gesture = zoom.gesture;
+
+ if (!gesture.$slideEl) {
+ gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);
+ gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
+ gesture.$imageWrapEl = gesture.$imageEl.parent(("." + (params.containerClass)));
+ }
+ if (!gesture.$imageEl || gesture.$imageEl.length === 0) { return; }
+
+ zoom.scale = 1;
+ zoom.currentScale = 1;
+ gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
+ gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
+ gesture.$slideEl.removeClass(("" + (params.zoomedSlideClass)));
+ gesture.$slideEl = undefined;
+ },
+ // Attach/Detach Events
+ enable: function enable() {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ if (zoom.enabled) { return; }
+ zoom.enabled = true;
+
+ var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
+
+ // Scale image
+ if (Support.gestures) {
+ swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);
+ swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);
+ swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);
+ } else if (swiper.touchEvents.start === 'touchstart') {
+ swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);
+ swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);
+ swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);
+ }
+
+ // Move image
+ swiper.$wrapperEl.on(swiper.touchEvents.move, ("." + (swiper.params.zoom.containerClass)), zoom.onTouchMove);
+ },
+ disable: function disable() {
+ var swiper = this;
+ var zoom = swiper.zoom;
+ if (!zoom.enabled) { return; }
+
+ swiper.zoom.enabled = false;
+
+ var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false;
+
+ // Scale image
+ if (Support.gestures) {
+ swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);
+ swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);
+ swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);
+ } else if (swiper.touchEvents.start === 'touchstart') {
+ swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);
+ swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);
+ swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);
+ }
+
+ // Move image
+ swiper.$wrapperEl.off(swiper.touchEvents.move, ("." + (swiper.params.zoom.containerClass)), zoom.onTouchMove);
+ },
+ };
+
+ var Zoom$1 = {
+ name: 'zoom',
+ params: {
+ zoom: {
+ enabled: false,
+ maxRatio: 3,
+ minRatio: 1,
+ toggle: true,
+ containerClass: 'swiper-zoom-container',
+ zoomedSlideClass: 'swiper-slide-zoomed',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ var zoom = {
+ enabled: false,
+ scale: 1,
+ currentScale: 1,
+ isScaling: false,
+ gesture: {
+ $slideEl: undefined,
+ slideWidth: undefined,
+ slideHeight: undefined,
+ $imageEl: undefined,
+ $imageWrapEl: undefined,
+ maxRatio: 3,
+ },
+ image: {
+ isTouched: undefined,
+ isMoved: undefined,
+ currentX: undefined,
+ currentY: undefined,
+ minX: undefined,
+ minY: undefined,
+ maxX: undefined,
+ maxY: undefined,
+ width: undefined,
+ height: undefined,
+ startX: undefined,
+ startY: undefined,
+ touchesStart: {},
+ touchesCurrent: {},
+ },
+ velocity: {
+ x: undefined,
+ y: undefined,
+ prevPositionX: undefined,
+ prevPositionY: undefined,
+ prevTime: undefined,
+ },
+ };
+ ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach(function (methodName) {
+ zoom[methodName] = Zoom[methodName].bind(swiper);
+ });
+ Utils.extend(swiper, {
+ zoom: zoom,
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.zoom.enabled) {
+ swiper.zoom.enable();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ swiper.zoom.disable();
+ },
+ touchStart: function touchStart(e) {
+ var swiper = this;
+ if (!swiper.zoom.enabled) { return; }
+ swiper.zoom.onTouchStart(e);
+ },
+ touchEnd: function touchEnd(e) {
+ var swiper = this;
+ if (!swiper.zoom.enabled) { return; }
+ swiper.zoom.onTouchEnd(e);
+ },
+ doubleTap: function doubleTap(e) {
+ var swiper = this;
+ if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
+ swiper.zoom.toggle(e);
+ }
+ },
+ transitionEnd: function transitionEnd() {
+ var swiper = this;
+ if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
+ swiper.zoom.onTransitionEnd();
+ }
+ },
+ },
+ };
+
+ var Lazy = {
+ loadInSlide: function loadInSlide(index, loadInDuplicate) {
+ if ( loadInDuplicate === void 0 ) loadInDuplicate = true;
+
+ var swiper = this;
+ var params = swiper.params.lazy;
+ if (typeof index === 'undefined') { return; }
+ if (swiper.slides.length === 0) { return; }
+ var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
+
+ var $slideEl = isVirtual
+ ? swiper.$wrapperEl.children(("." + (swiper.params.slideClass) + "[data-swiper-slide-index=\"" + index + "\"]"))
+ : swiper.slides.eq(index);
+
+ var $images = $slideEl.find(("." + (params.elementClass) + ":not(." + (params.loadedClass) + "):not(." + (params.loadingClass) + ")"));
+ if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
+ $images = $images.add($slideEl[0]);
+ }
+ if ($images.length === 0) { return; }
+
+ $images.each(function (imageIndex, imageEl) {
+ var $imageEl = $(imageEl);
+ $imageEl.addClass(params.loadingClass);
+
+ var background = $imageEl.attr('data-background');
+ var src = $imageEl.attr('data-src');
+ var srcset = $imageEl.attr('data-srcset');
+ var sizes = $imageEl.attr('data-sizes');
+
+ swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, function () {
+ if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) { return; }
+ if (background) {
+ $imageEl.css('background-image', ("url(\"" + background + "\")"));
+ $imageEl.removeAttr('data-background');
+ } else {
+ if (srcset) {
+ $imageEl.attr('srcset', srcset);
+ $imageEl.removeAttr('data-srcset');
+ }
+ if (sizes) {
+ $imageEl.attr('sizes', sizes);
+ $imageEl.removeAttr('data-sizes');
+ }
+ if (src) {
+ $imageEl.attr('src', src);
+ $imageEl.removeAttr('data-src');
+ }
+ }
+
+ $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
+ $slideEl.find(("." + (params.preloaderClass))).remove();
+ if (swiper.params.loop && loadInDuplicate) {
+ var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
+ if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
+ var originalSlide = swiper.$wrapperEl.children(("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + (swiper.params.slideDuplicateClass) + ")"));
+ swiper.lazy.loadInSlide(originalSlide.index(), false);
+ } else {
+ var duplicatedSlide = swiper.$wrapperEl.children(("." + (swiper.params.slideDuplicateClass) + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]"));
+ swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
+ }
+ }
+ swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
+ });
+
+ swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
+ });
+ },
+ load: function load() {
+ var swiper = this;
+ var $wrapperEl = swiper.$wrapperEl;
+ var swiperParams = swiper.params;
+ var slides = swiper.slides;
+ var activeIndex = swiper.activeIndex;
+ var isVirtual = swiper.virtual && swiperParams.virtual.enabled;
+ var params = swiperParams.lazy;
+
+ var slidesPerView = swiperParams.slidesPerView;
+ if (slidesPerView === 'auto') {
+ slidesPerView = 0;
+ }
+
+ function slideExist(index) {
+ if (isVirtual) {
+ if ($wrapperEl.children(("." + (swiperParams.slideClass) + "[data-swiper-slide-index=\"" + index + "\"]")).length) {
+ return true;
+ }
+ } else if (slides[index]) { return true; }
+ return false;
+ }
+ function slideIndex(slideEl) {
+ if (isVirtual) {
+ return $(slideEl).attr('data-swiper-slide-index');
+ }
+ return $(slideEl).index();
+ }
+
+ if (!swiper.lazy.initialImageLoaded) { swiper.lazy.initialImageLoaded = true; }
+ if (swiper.params.watchSlidesVisibility) {
+ $wrapperEl.children(("." + (swiperParams.slideVisibleClass))).each(function (elIndex, slideEl) {
+ var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
+ swiper.lazy.loadInSlide(index);
+ });
+ } else if (slidesPerView > 1) {
+ for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
+ if (slideExist(i)) { swiper.lazy.loadInSlide(i); }
+ }
+ } else {
+ swiper.lazy.loadInSlide(activeIndex);
+ }
+ if (params.loadPrevNext) {
+ if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {
+ var amount = params.loadPrevNextAmount;
+ var spv = slidesPerView;
+ var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
+ var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
+ // Next Slides
+ for (var i$1 = activeIndex + slidesPerView; i$1 < maxIndex; i$1 += 1) {
+ if (slideExist(i$1)) { swiper.lazy.loadInSlide(i$1); }
+ }
+ // Prev Slides
+ for (var i$2 = minIndex; i$2 < activeIndex; i$2 += 1) {
+ if (slideExist(i$2)) { swiper.lazy.loadInSlide(i$2); }
+ }
+ } else {
+ var nextSlide = $wrapperEl.children(("." + (swiperParams.slideNextClass)));
+ if (nextSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(nextSlide)); }
+
+ var prevSlide = $wrapperEl.children(("." + (swiperParams.slidePrevClass)));
+ if (prevSlide.length > 0) { swiper.lazy.loadInSlide(slideIndex(prevSlide)); }
+ }
+ }
+ },
+ };
+
+ var Lazy$1 = {
+ name: 'lazy',
+ params: {
+ lazy: {
+ enabled: false,
+ loadPrevNext: false,
+ loadPrevNextAmount: 1,
+ loadOnTransitionStart: false,
+
+ elementClass: 'swiper-lazy',
+ loadingClass: 'swiper-lazy-loading',
+ loadedClass: 'swiper-lazy-loaded',
+ preloaderClass: 'swiper-lazy-preloader',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ lazy: {
+ initialImageLoaded: false,
+ load: Lazy.load.bind(swiper),
+ loadInSlide: Lazy.loadInSlide.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
+ swiper.params.preloadImages = false;
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
+ swiper.lazy.load();
+ }
+ },
+ scroll: function scroll() {
+ var swiper = this;
+ if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
+ swiper.lazy.load();
+ }
+ },
+ resize: function resize() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled) {
+ swiper.lazy.load();
+ }
+ },
+ scrollbarDragMove: function scrollbarDragMove() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled) {
+ swiper.lazy.load();
+ }
+ },
+ transitionStart: function transitionStart() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled) {
+ if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) {
+ swiper.lazy.load();
+ }
+ }
+ },
+ transitionEnd: function transitionEnd() {
+ var swiper = this;
+ if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
+ swiper.lazy.load();
+ }
+ },
+ },
+ };
+
+ /* eslint no-bitwise: ["error", { "allow": [">>"] }] */
+
+ var Controller = {
+ LinearSpline: function LinearSpline(x, y) {
+ var binarySearch = (function search() {
+ var maxIndex;
+ var minIndex;
+ var guess;
+ return function (array, val) {
+ minIndex = -1;
+ maxIndex = array.length;
+ while (maxIndex - minIndex > 1) {
+ guess = maxIndex + minIndex >> 1;
+ if (array[guess] <= val) {
+ minIndex = guess;
+ } else {
+ maxIndex = guess;
+ }
+ }
+ return maxIndex;
+ };
+ }());
+ this.x = x;
+ this.y = y;
+ this.lastIndex = x.length - 1;
+ // Given an x value (x2), return the expected y2 value:
+ // (x1,y1) is the known point before given value,
+ // (x3,y3) is the known point after given value.
+ var i1;
+ var i3;
+
+ this.interpolate = function interpolate(x2) {
+ if (!x2) { return 0; }
+
+ // Get the indexes of x1 and x3 (the array indexes before and after given x2):
+ i3 = binarySearch(this.x, x2);
+ i1 = i3 - 1;
+
+ // We have our indexes i1 & i3, so we can calculate already:
+ // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
+ return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1];
+ };
+ return this;
+ },
+ // xxx: for now i will just save one spline function to to
+ getInterpolateFunction: function getInterpolateFunction(c) {
+ var swiper = this;
+ if (!swiper.controller.spline) {
+ swiper.controller.spline = swiper.params.loop ?
+ new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) :
+ new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
+ }
+ },
+ setTranslate: function setTranslate(setTranslate$1, byController) {
+ var swiper = this;
+ var controlled = swiper.controller.control;
+ var multiplier;
+ var controlledTranslate;
+ function setControlledTranslate(c) {
+ // this will create an Interpolate function based on the snapGrids
+ // x is the Grid of the scrolled scroller and y will be the controlled scroller
+ // it makes sense to create this only once and recall it for the interpolation
+ // the function does a lot of value caching for performance
+ var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
+ if (swiper.params.controller.by === 'slide') {
+ swiper.controller.getInterpolateFunction(c);
+ // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
+ // but it did not work out
+ controlledTranslate = -swiper.controller.spline.interpolate(-translate);
+ }
+
+ if (!controlledTranslate || swiper.params.controller.by === 'container') {
+ multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
+ controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate();
+ }
+
+ if (swiper.params.controller.inverse) {
+ controlledTranslate = c.maxTranslate() - controlledTranslate;
+ }
+ c.updateProgress(controlledTranslate);
+ c.setTranslate(controlledTranslate, swiper);
+ c.updateActiveIndex();
+ c.updateSlidesClasses();
+ }
+ if (Array.isArray(controlled)) {
+ for (var i = 0; i < controlled.length; i += 1) {
+ if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
+ setControlledTranslate(controlled[i]);
+ }
+ }
+ } else if (controlled instanceof Swiper && byController !== controlled) {
+ setControlledTranslate(controlled);
+ }
+ },
+ setTransition: function setTransition(duration, byController) {
+ var swiper = this;
+ var controlled = swiper.controller.control;
+ var i;
+ function setControlledTransition(c) {
+ c.setTransition(duration, swiper);
+ if (duration !== 0) {
+ c.transitionStart();
+ c.$wrapperEl.transitionEnd(function () {
+ if (!controlled) { return; }
+ if (c.params.loop && swiper.params.controller.by === 'slide') {
+ c.loopFix();
+ }
+ c.transitionEnd();
+ });
+ }
+ }
+ if (Array.isArray(controlled)) {
+ for (i = 0; i < controlled.length; i += 1) {
+ if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
+ setControlledTransition(controlled[i]);
+ }
+ }
+ } else if (controlled instanceof Swiper && byController !== controlled) {
+ setControlledTransition(controlled);
+ }
+ },
+ };
+ var Controller$1 = {
+ name: 'controller',
+ params: {
+ controller: {
+ control: undefined,
+ inverse: false,
+ by: 'slide', // or 'container'
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ controller: {
+ control: swiper.params.controller.control,
+ getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
+ setTranslate: Controller.setTranslate.bind(swiper),
+ setTransition: Controller.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ update: function update() {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ if (swiper.controller.spline) {
+ swiper.controller.spline = undefined;
+ delete swiper.controller.spline;
+ }
+ },
+ resize: function resize() {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ if (swiper.controller.spline) {
+ swiper.controller.spline = undefined;
+ delete swiper.controller.spline;
+ }
+ },
+ observerUpdate: function observerUpdate() {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ if (swiper.controller.spline) {
+ swiper.controller.spline = undefined;
+ delete swiper.controller.spline;
+ }
+ },
+ setTranslate: function setTranslate(translate, byController) {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ swiper.controller.setTranslate(translate, byController);
+ },
+ setTransition: function setTransition(duration, byController) {
+ var swiper = this;
+ if (!swiper.controller.control) { return; }
+ swiper.controller.setTransition(duration, byController);
+ },
+ },
+ };
+
+ var a11y = {
+ makeElFocusable: function makeElFocusable($el) {
+ $el.attr('tabIndex', '0');
+ return $el;
+ },
+ addElRole: function addElRole($el, role) {
+ $el.attr('role', role);
+ return $el;
+ },
+ addElLabel: function addElLabel($el, label) {
+ $el.attr('aria-label', label);
+ return $el;
+ },
+ disableEl: function disableEl($el) {
+ $el.attr('aria-disabled', true);
+ return $el;
+ },
+ enableEl: function enableEl($el) {
+ $el.attr('aria-disabled', false);
+ return $el;
+ },
+ onEnterKey: function onEnterKey(e) {
+ var swiper = this;
+ var params = swiper.params.a11y;
+ if (e.keyCode !== 13) { return; }
+ var $targetEl = $(e.target);
+ if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
+ if (!(swiper.isEnd && !swiper.params.loop)) {
+ swiper.slideNext();
+ }
+ if (swiper.isEnd) {
+ swiper.a11y.notify(params.lastSlideMessage);
+ } else {
+ swiper.a11y.notify(params.nextSlideMessage);
+ }
+ }
+ if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
+ if (!(swiper.isBeginning && !swiper.params.loop)) {
+ swiper.slidePrev();
+ }
+ if (swiper.isBeginning) {
+ swiper.a11y.notify(params.firstSlideMessage);
+ } else {
+ swiper.a11y.notify(params.prevSlideMessage);
+ }
+ }
+ if (swiper.pagination && $targetEl.is(("." + (swiper.params.pagination.bulletClass)))) {
+ $targetEl[0].click();
+ }
+ },
+ notify: function notify(message) {
+ var swiper = this;
+ var notification = swiper.a11y.liveRegion;
+ if (notification.length === 0) { return; }
+ notification.html('');
+ notification.html(message);
+ },
+ updateNavigation: function updateNavigation() {
+ var swiper = this;
+
+ if (swiper.params.loop) { return; }
+ var ref = swiper.navigation;
+ var $nextEl = ref.$nextEl;
+ var $prevEl = ref.$prevEl;
+
+ if ($prevEl && $prevEl.length > 0) {
+ if (swiper.isBeginning) {
+ swiper.a11y.disableEl($prevEl);
+ } else {
+ swiper.a11y.enableEl($prevEl);
+ }
+ }
+ if ($nextEl && $nextEl.length > 0) {
+ if (swiper.isEnd) {
+ swiper.a11y.disableEl($nextEl);
+ } else {
+ swiper.a11y.enableEl($nextEl);
+ }
+ }
+ },
+ updatePagination: function updatePagination() {
+ var swiper = this;
+ var params = swiper.params.a11y;
+ if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
+ swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {
+ var $bulletEl = $(bulletEl);
+ swiper.a11y.makeElFocusable($bulletEl);
+ swiper.a11y.addElRole($bulletEl, 'button');
+ swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));
+ });
+ }
+ },
+ init: function init() {
+ var swiper = this;
+
+ swiper.$el.append(swiper.a11y.liveRegion);
+
+ // Navigation
+ var params = swiper.params.a11y;
+ var $nextEl;
+ var $prevEl;
+ if (swiper.navigation && swiper.navigation.$nextEl) {
+ $nextEl = swiper.navigation.$nextEl;
+ }
+ if (swiper.navigation && swiper.navigation.$prevEl) {
+ $prevEl = swiper.navigation.$prevEl;
+ }
+ if ($nextEl) {
+ swiper.a11y.makeElFocusable($nextEl);
+ swiper.a11y.addElRole($nextEl, 'button');
+ swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
+ $nextEl.on('keydown', swiper.a11y.onEnterKey);
+ }
+ if ($prevEl) {
+ swiper.a11y.makeElFocusable($prevEl);
+ swiper.a11y.addElRole($prevEl, 'button');
+ swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
+ $prevEl.on('keydown', swiper.a11y.onEnterKey);
+ }
+
+ // Pagination
+ if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
+ swiper.pagination.$el.on('keydown', ("." + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) { swiper.a11y.liveRegion.remove(); }
+
+ var $nextEl;
+ var $prevEl;
+ if (swiper.navigation && swiper.navigation.$nextEl) {
+ $nextEl = swiper.navigation.$nextEl;
+ }
+ if (swiper.navigation && swiper.navigation.$prevEl) {
+ $prevEl = swiper.navigation.$prevEl;
+ }
+ if ($nextEl) {
+ $nextEl.off('keydown', swiper.a11y.onEnterKey);
+ }
+ if ($prevEl) {
+ $prevEl.off('keydown', swiper.a11y.onEnterKey);
+ }
+
+ // Pagination
+ if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
+ swiper.pagination.$el.off('keydown', ("." + (swiper.params.pagination.bulletClass)), swiper.a11y.onEnterKey);
+ }
+ },
+ };
+ var A11y = {
+ name: 'a11y',
+ params: {
+ a11y: {
+ enabled: true,
+ notificationClass: 'swiper-notification',
+ prevSlideMessage: 'Previous slide',
+ nextSlideMessage: 'Next slide',
+ firstSlideMessage: 'This is the first slide',
+ lastSlideMessage: 'This is the last slide',
+ paginationBulletMessage: 'Go to slide {{index}}',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ a11y: {
+ liveRegion: $(("<span class=\"" + (swiper.params.a11y.notificationClass) + "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>")),
+ },
+ });
+ Object.keys(a11y).forEach(function (methodName) {
+ swiper.a11y[methodName] = a11y[methodName].bind(swiper);
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.init();
+ swiper.a11y.updateNavigation();
+ },
+ toEdge: function toEdge() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.updateNavigation();
+ },
+ fromEdge: function fromEdge() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.updateNavigation();
+ },
+ paginationUpdate: function paginationUpdate() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.updatePagination();
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (!swiper.params.a11y.enabled) { return; }
+ swiper.a11y.destroy();
+ },
+ },
+ };
+
+ var History = {
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.history) { return; }
+ if (!win.history || !win.history.pushState) {
+ swiper.params.history.enabled = false;
+ swiper.params.hashNavigation.enabled = true;
+ return;
+ }
+ var history = swiper.history;
+ history.initialized = true;
+ history.paths = History.getPathValues();
+ if (!history.paths.key && !history.paths.value) { return; }
+ history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
+ if (!swiper.params.history.replaceState) {
+ win.addEventListener('popstate', swiper.history.setHistoryPopState);
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (!swiper.params.history.replaceState) {
+ win.removeEventListener('popstate', swiper.history.setHistoryPopState);
+ }
+ },
+ setHistoryPopState: function setHistoryPopState() {
+ var swiper = this;
+ swiper.history.paths = History.getPathValues();
+ swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
+ },
+ getPathValues: function getPathValues() {
+ var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) { return part !== ''; });
+ var total = pathArray.length;
+ var key = pathArray[total - 2];
+ var value = pathArray[total - 1];
+ return { key: key, value: value };
+ },
+ setHistory: function setHistory(key, index) {
+ var swiper = this;
+ if (!swiper.history.initialized || !swiper.params.history.enabled) { return; }
+ var slide = swiper.slides.eq(index);
+ var value = History.slugify(slide.attr('data-history'));
+ if (!win.location.pathname.includes(key)) {
+ value = key + "/" + value;
+ }
+ var currentState = win.history.state;
+ if (currentState && currentState.value === value) {
+ return;
+ }
+ if (swiper.params.history.replaceState) {
+ win.history.replaceState({ value: value }, null, value);
+ } else {
+ win.history.pushState({ value: value }, null, value);
+ }
+ },
+ slugify: function slugify(text) {
+ return text.toString().toLowerCase()
+ .replace(/\s+/g, '-')
+ .replace(/[^\w-]+/g, '')
+ .replace(/--+/g, '-')
+ .replace(/^-+/, '')
+ .replace(/-+$/, '');
+ },
+ scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {
+ var swiper = this;
+ if (value) {
+ for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
+ var slide = swiper.slides.eq(i);
+ var slideHistory = History.slugify(slide.attr('data-history'));
+ if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
+ var index = slide.index();
+ swiper.slideTo(index, speed, runCallbacks);
+ }
+ }
+ } else {
+ swiper.slideTo(0, speed, runCallbacks);
+ }
+ },
+ };
+
+ var History$1 = {
+ name: 'history',
+ params: {
+ history: {
+ enabled: false,
+ replaceState: false,
+ key: 'slides',
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ history: {
+ init: History.init.bind(swiper),
+ setHistory: History.setHistory.bind(swiper),
+ setHistoryPopState: History.setHistoryPopState.bind(swiper),
+ scrollToSlide: History.scrollToSlide.bind(swiper),
+ destroy: History.destroy.bind(swiper),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.history.enabled) {
+ swiper.history.init();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.params.history.enabled) {
+ swiper.history.destroy();
+ }
+ },
+ transitionEnd: function transitionEnd() {
+ var swiper = this;
+ if (swiper.history.initialized) {
+ swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
+ }
+ },
+ },
+ };
+
+ var HashNavigation = {
+ onHashCange: function onHashCange() {
+ var swiper = this;
+ var newHash = doc.location.hash.replace('#', '');
+ var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
+ if (newHash !== activeSlideHash) {
+ swiper.slideTo(swiper.$wrapperEl.children(("." + (swiper.params.slideClass) + "[data-hash=\"" + newHash + "\"]")).index());
+ }
+ },
+ setHash: function setHash() {
+ var swiper = this;
+ if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) { return; }
+ if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {
+ win.history.replaceState(null, null, (("#" + (swiper.slides.eq(swiper.activeIndex).attr('data-hash'))) || ''));
+ } else {
+ var slide = swiper.slides.eq(swiper.activeIndex);
+ var hash = slide.attr('data-hash') || slide.attr('data-history');
+ doc.location.hash = hash || '';
+ }
+ },
+ init: function init() {
+ var swiper = this;
+ if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) { return; }
+ swiper.hashNavigation.initialized = true;
+ var hash = doc.location.hash.replace('#', '');
+ if (hash) {
+ var speed = 0;
+ for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
+ var slide = swiper.slides.eq(i);
+ var slideHash = slide.attr('data-hash') || slide.attr('data-history');
+ if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
+ var index = slide.index();
+ swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
+ }
+ }
+ }
+ if (swiper.params.hashNavigation.watchState) {
+ $(win).on('hashchange', swiper.hashNavigation.onHashCange);
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.params.hashNavigation.watchState) {
+ $(win).off('hashchange', swiper.hashNavigation.onHashCange);
+ }
+ },
+ };
+ var HashNavigation$1 = {
+ name: 'hash-navigation',
+ params: {
+ hashNavigation: {
+ enabled: false,
+ replaceState: false,
+ watchState: false,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ hashNavigation: {
+ initialized: false,
+ init: HashNavigation.init.bind(swiper),
+ destroy: HashNavigation.destroy.bind(swiper),
+ setHash: HashNavigation.setHash.bind(swiper),
+ onHashCange: HashNavigation.onHashCange.bind(swiper),
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.hashNavigation.enabled) {
+ swiper.hashNavigation.init();
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.params.hashNavigation.enabled) {
+ swiper.hashNavigation.destroy();
+ }
+ },
+ transitionEnd: function transitionEnd() {
+ var swiper = this;
+ if (swiper.hashNavigation.initialized) {
+ swiper.hashNavigation.setHash();
+ }
+ },
+ },
+ };
+
+ /* eslint no-underscore-dangle: "off" */
+
+ var Autoplay = {
+ run: function run() {
+ var swiper = this;
+ var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
+ var delay = swiper.params.autoplay.delay;
+ if ($activeSlideEl.attr('data-swiper-autoplay')) {
+ delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
+ }
+ swiper.autoplay.timeout = Utils.nextTick(function () {
+ if (swiper.params.autoplay.reverseDirection) {
+ if (swiper.params.loop) {
+ swiper.loopFix();
+ swiper.slidePrev(swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else if (!swiper.isBeginning) {
+ swiper.slidePrev(swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else if (!swiper.params.autoplay.stopOnLastSlide) {
+ swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else {
+ swiper.autoplay.stop();
+ }
+ } else if (swiper.params.loop) {
+ swiper.loopFix();
+ swiper.slideNext(swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else if (!swiper.isEnd) {
+ swiper.slideNext(swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else if (!swiper.params.autoplay.stopOnLastSlide) {
+ swiper.slideTo(0, swiper.params.speed, true, true);
+ swiper.emit('autoplay');
+ } else {
+ swiper.autoplay.stop();
+ }
+ }, delay);
+ },
+ start: function start() {
+ var swiper = this;
+ if (typeof swiper.autoplay.timeout !== 'undefined') { return false; }
+ if (swiper.autoplay.running) { return false; }
+ swiper.autoplay.running = true;
+ swiper.emit('autoplayStart');
+ swiper.autoplay.run();
+ return true;
+ },
+ stop: function stop() {
+ var swiper = this;
+ if (!swiper.autoplay.running) { return false; }
+ if (typeof swiper.autoplay.timeout === 'undefined') { return false; }
+
+ if (swiper.autoplay.timeout) {
+ clearTimeout(swiper.autoplay.timeout);
+ swiper.autoplay.timeout = undefined;
+ }
+ swiper.autoplay.running = false;
+ swiper.emit('autoplayStop');
+ return true;
+ },
+ pause: function pause(speed) {
+ var swiper = this;
+ if (!swiper.autoplay.running) { return; }
+ if (swiper.autoplay.paused) { return; }
+ if (swiper.autoplay.timeout) { clearTimeout(swiper.autoplay.timeout); }
+ swiper.autoplay.paused = true;
+ if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
+ swiper.autoplay.paused = false;
+ swiper.autoplay.run();
+ } else {
+ swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
+ swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
+ }
+ },
+ };
+
+ var Autoplay$1 = {
+ name: 'autoplay',
+ params: {
+ autoplay: {
+ enabled: false,
+ delay: 3000,
+ waitForTransition: true,
+ disableOnInteraction: true,
+ stopOnLastSlide: false,
+ reverseDirection: false,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ autoplay: {
+ running: false,
+ paused: false,
+ run: Autoplay.run.bind(swiper),
+ start: Autoplay.start.bind(swiper),
+ stop: Autoplay.stop.bind(swiper),
+ pause: Autoplay.pause.bind(swiper),
+ onTransitionEnd: function onTransitionEnd(e) {
+ if (!swiper || swiper.destroyed || !swiper.$wrapperEl) { return; }
+ if (e.target !== this) { return; }
+ swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
+ swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
+ swiper.autoplay.paused = false;
+ if (!swiper.autoplay.running) {
+ swiper.autoplay.stop();
+ } else {
+ swiper.autoplay.run();
+ }
+ },
+ },
+ });
+ },
+ on: {
+ init: function init() {
+ var swiper = this;
+ if (swiper.params.autoplay.enabled) {
+ swiper.autoplay.start();
+ }
+ },
+ beforeTransitionStart: function beforeTransitionStart(speed, internal) {
+ var swiper = this;
+ if (swiper.autoplay.running) {
+ if (internal || !swiper.params.autoplay.disableOnInteraction) {
+ swiper.autoplay.pause(speed);
+ } else {
+ swiper.autoplay.stop();
+ }
+ }
+ },
+ sliderFirstMove: function sliderFirstMove() {
+ var swiper = this;
+ if (swiper.autoplay.running) {
+ if (swiper.params.autoplay.disableOnInteraction) {
+ swiper.autoplay.stop();
+ } else {
+ swiper.autoplay.pause();
+ }
+ }
+ },
+ destroy: function destroy() {
+ var swiper = this;
+ if (swiper.autoplay.running) {
+ swiper.autoplay.stop();
+ }
+ },
+ },
+ };
+
+ var Fade = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var slides = swiper.slides;
+ for (var i = 0; i < slides.length; i += 1) {
+ var $slideEl = swiper.slides.eq(i);
+ var offset = $slideEl[0].swiperSlideOffset;
+ var tx = -offset;
+ if (!swiper.params.virtualTranslate) { tx -= swiper.translate; }
+ var ty = 0;
+ if (!swiper.isHorizontal()) {
+ ty = tx;
+ tx = 0;
+ }
+ var slideOpacity = swiper.params.fadeEffect.crossFade ?
+ Math.max(1 - Math.abs($slideEl[0].progress), 0) :
+ 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
+ $slideEl
+ .css({
+ opacity: slideOpacity,
+ })
+ .transform(("translate3d(" + tx + "px, " + ty + "px, 0px)"));
+ }
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ var slides = swiper.slides;
+ var $wrapperEl = swiper.$wrapperEl;
+ slides.transition(duration);
+ if (swiper.params.virtualTranslate && duration !== 0) {
+ var eventTriggered = false;
+ slides.transitionEnd(function () {
+ if (eventTriggered) { return; }
+ if (!swiper || swiper.destroyed) { return; }
+ eventTriggered = true;
+ swiper.animating = false;
+ var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
+ for (var i = 0; i < triggerEvents.length; i += 1) {
+ $wrapperEl.trigger(triggerEvents[i]);
+ }
+ });
+ }
+ },
+ };
+
+ var EffectFade = {
+ name: 'effect-fade',
+ params: {
+ fadeEffect: {
+ crossFade: false,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ fadeEffect: {
+ setTranslate: Fade.setTranslate.bind(swiper),
+ setTransition: Fade.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.effect !== 'fade') { return; }
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "fade"));
+ var overwriteParams = {
+ slidesPerView: 1,
+ slidesPerColumn: 1,
+ slidesPerGroup: 1,
+ watchSlidesProgress: true,
+ spaceBetween: 0,
+ virtualTranslate: true,
+ };
+ Utils.extend(swiper.params, overwriteParams);
+ Utils.extend(swiper.originalParams, overwriteParams);
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (swiper.params.effect !== 'fade') { return; }
+ swiper.fadeEffect.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (swiper.params.effect !== 'fade') { return; }
+ swiper.fadeEffect.setTransition(duration);
+ },
+ },
+ };
+
+ var Cube = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var $el = swiper.$el;
+ var $wrapperEl = swiper.$wrapperEl;
+ var slides = swiper.slides;
+ var swiperWidth = swiper.width;
+ var swiperHeight = swiper.height;
+ var rtl = swiper.rtlTranslate;
+ var swiperSize = swiper.size;
+ var params = swiper.params.cubeEffect;
+ var isHorizontal = swiper.isHorizontal();
+ var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
+ var wrapperRotate = 0;
+ var $cubeShadowEl;
+ if (params.shadow) {
+ if (isHorizontal) {
+ $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
+ if ($cubeShadowEl.length === 0) {
+ $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
+ $wrapperEl.append($cubeShadowEl);
+ }
+ $cubeShadowEl.css({ height: (swiperWidth + "px") });
+ } else {
+ $cubeShadowEl = $el.find('.swiper-cube-shadow');
+ if ($cubeShadowEl.length === 0) {
+ $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
+ $el.append($cubeShadowEl);
+ }
+ }
+ }
+ for (var i = 0; i < slides.length; i += 1) {
+ var $slideEl = slides.eq(i);
+ var slideIndex = i;
+ if (isVirtual) {
+ slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
+ }
+ var slideAngle = slideIndex * 90;
+ var round = Math.floor(slideAngle / 360);
+ if (rtl) {
+ slideAngle = -slideAngle;
+ round = Math.floor(-slideAngle / 360);
+ }
+ var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
+ var tx = 0;
+ var ty = 0;
+ var tz = 0;
+ if (slideIndex % 4 === 0) {
+ tx = -round * 4 * swiperSize;
+ tz = 0;
+ } else if ((slideIndex - 1) % 4 === 0) {
+ tx = 0;
+ tz = -round * 4 * swiperSize;
+ } else if ((slideIndex - 2) % 4 === 0) {
+ tx = swiperSize + (round * 4 * swiperSize);
+ tz = swiperSize;
+ } else if ((slideIndex - 3) % 4 === 0) {
+ tx = -swiperSize;
+ tz = (3 * swiperSize) + (swiperSize * 4 * round);
+ }
+ if (rtl) {
+ tx = -tx;
+ }
+
+ if (!isHorizontal) {
+ ty = tx;
+ tx = 0;
+ }
+
+ var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)";
+ if (progress <= 1 && progress > -1) {
+ wrapperRotate = (slideIndex * 90) + (progress * 90);
+ if (rtl) { wrapperRotate = (-slideIndex * 90) - (progress * 90); }
+ }
+ $slideEl.transform(transform);
+ if (params.slideShadows) {
+ // Set shadows
+ var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
+ var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
+ if (shadowBefore.length === 0) {
+ shadowBefore = $(("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"));
+ $slideEl.append(shadowBefore);
+ }
+ if (shadowAfter.length === 0) {
+ shadowAfter = $(("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"));
+ $slideEl.append(shadowAfter);
+ }
+ if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }
+ if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }
+ }
+ }
+ $wrapperEl.css({
+ '-webkit-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
+ '-moz-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
+ '-ms-transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
+ 'transform-origin': ("50% 50% -" + (swiperSize / 2) + "px"),
+ });
+
+ if (params.shadow) {
+ if (isHorizontal) {
+ $cubeShadowEl.transform(("translate3d(0px, " + ((swiperWidth / 2) + params.shadowOffset) + "px, " + (-swiperWidth / 2) + "px) rotateX(90deg) rotateZ(0deg) scale(" + (params.shadowScale) + ")"));
+ } else {
+ var shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90);
+ var multiplier = 1.5 - (
+ (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2) +
+ (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2)
+ );
+ var scale1 = params.shadowScale;
+ var scale2 = params.shadowScale / multiplier;
+ var offset = params.shadowOffset;
+ $cubeShadowEl.transform(("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + ((swiperHeight / 2) + offset) + "px, " + (-swiperHeight / 2 / scale2) + "px) rotateX(-90deg)"));
+ }
+ }
+ var zFactor = (Browser.isSafari || Browser.isUiWebView) ? (-swiperSize / 2) : 0;
+ $wrapperEl
+ .transform(("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)"));
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ var $el = swiper.$el;
+ var slides = swiper.slides;
+ slides
+ .transition(duration)
+ .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
+ .transition(duration);
+ if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
+ $el.find('.swiper-cube-shadow').transition(duration);
+ }
+ },
+ };
+
+ var EffectCube = {
+ name: 'effect-cube',
+ params: {
+ cubeEffect: {
+ slideShadows: true,
+ shadow: true,
+ shadowOffset: 20,
+ shadowScale: 0.94,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ cubeEffect: {
+ setTranslate: Cube.setTranslate.bind(swiper),
+ setTransition: Cube.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.effect !== 'cube') { return; }
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "cube"));
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "3d"));
+ var overwriteParams = {
+ slidesPerView: 1,
+ slidesPerColumn: 1,
+ slidesPerGroup: 1,
+ watchSlidesProgress: true,
+ resistanceRatio: 0,
+ spaceBetween: 0,
+ centeredSlides: false,
+ virtualTranslate: true,
+ };
+ Utils.extend(swiper.params, overwriteParams);
+ Utils.extend(swiper.originalParams, overwriteParams);
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (swiper.params.effect !== 'cube') { return; }
+ swiper.cubeEffect.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (swiper.params.effect !== 'cube') { return; }
+ swiper.cubeEffect.setTransition(duration);
+ },
+ },
+ };
+
+ var Flip = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var slides = swiper.slides;
+ var rtl = swiper.rtlTranslate;
+ for (var i = 0; i < slides.length; i += 1) {
+ var $slideEl = slides.eq(i);
+ var progress = $slideEl[0].progress;
+ if (swiper.params.flipEffect.limitRotation) {
+ progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
+ }
+ var offset = $slideEl[0].swiperSlideOffset;
+ var rotate = -180 * progress;
+ var rotateY = rotate;
+ var rotateX = 0;
+ var tx = -offset;
+ var ty = 0;
+ if (!swiper.isHorizontal()) {
+ ty = tx;
+ tx = 0;
+ rotateX = -rotateY;
+ rotateY = 0;
+ } else if (rtl) {
+ rotateY = -rotateY;
+ }
+
+ $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
+
+ if (swiper.params.flipEffect.slideShadows) {
+ // Set shadows
+ var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
+ var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
+ if (shadowBefore.length === 0) {
+ shadowBefore = $(("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'left' : 'top') + "\"></div>"));
+ $slideEl.append(shadowBefore);
+ }
+ if (shadowAfter.length === 0) {
+ shadowAfter = $(("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'right' : 'bottom') + "\"></div>"));
+ $slideEl.append(shadowAfter);
+ }
+ if (shadowBefore.length) { shadowBefore[0].style.opacity = Math.max(-progress, 0); }
+ if (shadowAfter.length) { shadowAfter[0].style.opacity = Math.max(progress, 0); }
+ }
+ $slideEl
+ .transform(("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)"));
+ }
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ var slides = swiper.slides;
+ var activeIndex = swiper.activeIndex;
+ var $wrapperEl = swiper.$wrapperEl;
+ slides
+ .transition(duration)
+ .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
+ .transition(duration);
+ if (swiper.params.virtualTranslate && duration !== 0) {
+ var eventTriggered = false;
+ // eslint-disable-next-line
+ slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
+ if (eventTriggered) { return; }
+ if (!swiper || swiper.destroyed) { return; }
+ // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
+ eventTriggered = true;
+ swiper.animating = false;
+ var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
+ for (var i = 0; i < triggerEvents.length; i += 1) {
+ $wrapperEl.trigger(triggerEvents[i]);
+ }
+ });
+ }
+ },
+ };
+
+ var EffectFlip = {
+ name: 'effect-flip',
+ params: {
+ flipEffect: {
+ slideShadows: true,
+ limitRotation: true,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ flipEffect: {
+ setTranslate: Flip.setTranslate.bind(swiper),
+ setTransition: Flip.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.effect !== 'flip') { return; }
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "flip"));
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "3d"));
+ var overwriteParams = {
+ slidesPerView: 1,
+ slidesPerColumn: 1,
+ slidesPerGroup: 1,
+ watchSlidesProgress: true,
+ spaceBetween: 0,
+ virtualTranslate: true,
+ };
+ Utils.extend(swiper.params, overwriteParams);
+ Utils.extend(swiper.originalParams, overwriteParams);
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (swiper.params.effect !== 'flip') { return; }
+ swiper.flipEffect.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (swiper.params.effect !== 'flip') { return; }
+ swiper.flipEffect.setTransition(duration);
+ },
+ },
+ };
+
+ var Coverflow = {
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ var swiperWidth = swiper.width;
+ var swiperHeight = swiper.height;
+ var slides = swiper.slides;
+ var $wrapperEl = swiper.$wrapperEl;
+ var slidesSizesGrid = swiper.slidesSizesGrid;
+ var params = swiper.params.coverflowEffect;
+ var isHorizontal = swiper.isHorizontal();
+ var transform = swiper.translate;
+ var center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2);
+ var rotate = isHorizontal ? params.rotate : -params.rotate;
+ var translate = params.depth;
+ // Each slide offset from center
+ for (var i = 0, length = slides.length; i < length; i += 1) {
+ var $slideEl = slides.eq(i);
+ var slideSize = slidesSizesGrid[i];
+ var slideOffset = $slideEl[0].swiperSlideOffset;
+ var offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier;
+
+ var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
+ var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
+ // var rotateZ = 0
+ var translateZ = -translate * Math.abs(offsetMultiplier);
+
+ var translateY = isHorizontal ? 0 : params.stretch * (offsetMultiplier);
+ var translateX = isHorizontal ? params.stretch * (offsetMultiplier) : 0;
+
+ // Fix for ultra small values
+ if (Math.abs(translateX) < 0.001) { translateX = 0; }
+ if (Math.abs(translateY) < 0.001) { translateY = 0; }
+ if (Math.abs(translateZ) < 0.001) { translateZ = 0; }
+ if (Math.abs(rotateY) < 0.001) { rotateY = 0; }
+ if (Math.abs(rotateX) < 0.001) { rotateX = 0; }
+
+ var slideTransform = "translate3d(" + translateX + "px," + translateY + "px," + translateZ + "px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)";
+
+ $slideEl.transform(slideTransform);
+ $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
+ if (params.slideShadows) {
+ // Set shadows
+ var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
+ var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
+ if ($shadowBeforeEl.length === 0) {
+ $shadowBeforeEl = $(("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>"));
+ $slideEl.append($shadowBeforeEl);
+ }
+ if ($shadowAfterEl.length === 0) {
+ $shadowAfterEl = $(("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>"));
+ $slideEl.append($shadowAfterEl);
+ }
+ if ($shadowBeforeEl.length) { $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; }
+ if ($shadowAfterEl.length) { $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; }
+ }
+ }
+
+ // Set correct perspective for IE10
+ if (Support.pointerEvents || Support.prefixedPointerEvents) {
+ var ws = $wrapperEl[0].style;
+ ws.perspectiveOrigin = center + "px 50%";
+ }
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ swiper.slides
+ .transition(duration)
+ .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left')
+ .transition(duration);
+ },
+ };
+
+ var EffectCoverflow = {
+ name: 'effect-coverflow',
+ params: {
+ coverflowEffect: {
+ rotate: 50,
+ stretch: 0,
+ depth: 100,
+ modifier: 1,
+ slideShadows: true,
+ },
+ },
+ create: function create() {
+ var swiper = this;
+ Utils.extend(swiper, {
+ coverflowEffect: {
+ setTranslate: Coverflow.setTranslate.bind(swiper),
+ setTransition: Coverflow.setTransition.bind(swiper),
+ },
+ });
+ },
+ on: {
+ beforeInit: function beforeInit() {
+ var swiper = this;
+ if (swiper.params.effect !== 'coverflow') { return; }
+
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "coverflow"));
+ swiper.classNames.push(((swiper.params.containerModifierClass) + "3d"));
+
+ swiper.params.watchSlidesProgress = true;
+ swiper.originalParams.watchSlidesProgress = true;
+ },
+ setTranslate: function setTranslate() {
+ var swiper = this;
+ if (swiper.params.effect !== 'coverflow') { return; }
+ swiper.coverflowEffect.setTranslate();
+ },
+ setTransition: function setTransition(duration) {
+ var swiper = this;
+ if (swiper.params.effect !== 'coverflow') { return; }
+ swiper.coverflowEffect.setTransition(duration);
+ },
+ },
+ };
+
+ // Swiper Class
+
+ var components = [
+ Device$1,
+ Support$1,
+ Browser$1,
+ Resize,
+ Observer$1,
+ Virtual$1,
+ Keyboard$1,
+ Mousewheel$1,
+ Navigation$1,
+ Pagination$1,
+ Scrollbar$1,
+ Parallax$1,
+ Zoom$1,
+ Lazy$1,
+ Controller$1,
+ A11y,
+ History$1,
+ HashNavigation$1,
+ Autoplay$1,
+ EffectFade,
+ EffectCube,
+ EffectFlip,
+ EffectCoverflow
+ ];
+
+ if (typeof Swiper.use === 'undefined') {
+ Swiper.use = Swiper.Class.use;
+ Swiper.installModule = Swiper.Class.installModule;
+ }
+
+ Swiper.use(components);
+
+ return Swiper;
+
+})));
/**
- * Swiper 3.4.2
+ * Swiper 4.3.3
* Most modern mobile touch slider and framework with hardware accelerated transitions
- *
* http://www.idangero.us/swiper/
*
- * Copyright 2017, Vladimir Kharlampidi
- * The iDangero.us
- * http://www.idangero.us/
+ * Copyright 2014-2018 Vladimir Kharlampidi
*
- * Licensed under MIT
+ * Released under the MIT License
*
- * Released on: March 10, 2017
+ * Released on: June 5, 2018
*/
-!function(){"use strict";var e,a=function(t,s){function r(e){return Math.floor(e)}function i(){var e=x.params.autoplay,a=x.slides.eq(x.activeIndex);a.attr("data-swiper-autoplay")&&(e=a.attr("data-swiper-autoplay")||x.params.autoplay),x.autoplayTimeoutId=setTimeout(function(){x.params.loop?(x.fixLoop(),x._slideNext(),x.emit("onAutoplay",x)):x.isEnd?s.autoplayStopOnLast?x.stopAutoplay():(x._slideTo(0),x.emit("onAutoplay",x)):(x._slideNext(),x.emit("onAutoplay",x))},e)}function n(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){x.onResize(!0),x.emit("onObserverUpdate",x,e)})});s.observe(e,{attributes:void 0===a.attributes||a.attributes,childList:void 0===a.childList||a.childList,characterData:void 0===a.characterData||a.characterData}),x.observers.push(s)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!x.params.allowSwipeToNext&&(x.isHorizontal()&&39===a||!x.isHorizontal()&&40===a))return!1;if(!x.params.allowSwipeToPrev&&(x.isHorizontal()&&37===a||!x.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(x.container.parents("."+x.params.slideClass).length>0&&0===x.container.parents("."+x.params.slideActiveClass).length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=x.container.offset();x.rtl&&(n.left=n.left-x.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+x.width,n.top],[n.left,n.top+x.height],[n.left+x.width,n.top+x.height]],l=0;l<o.length;l++){var p=o[l];p[0]>=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}x.isHorizontal()?(37!==a&&39!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!x.rtl||37===a&&x.rtl)&&x.slideNext(),(37===a&&!x.rtl||39===a&&x.rtl)&&x.slidePrev()):(38!==a&&40!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&x.slideNext(),38===a&&x.slidePrev()),x.emit("onKeyPress",x,a)}}function p(e){var a=0,t=0,s=0,r=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(a=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(a=t,t=0),s=10*a,r=10*t,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||r)&&e.deltaMode&&(1===e.deltaMode?(s*=40,r*=40):(s*=800,r*=800)),s&&!a&&(a=s<1?-1:1),r&&!t&&(t=r<1?-1:1),{spinX:a,spinY:t,pixelX:s,pixelY:r}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=0,t=x.rtl?-1:1,s=p(e);if(x.params.mousewheelForceToAxis)if(x.isHorizontal()){if(!(Math.abs(s.pixelX)>Math.abs(s.pixelY)))return;a=s.pixelX*t}else{if(!(Math.abs(s.pixelY)>Math.abs(s.pixelX)))return;a=s.pixelY}else a=Math.abs(s.pixelX)>Math.abs(s.pixelY)?-s.pixelX*t:-s.pixelY;if(0!==a){if(x.params.mousewheelInvert&&(a=-a),x.params.freeMode){var r=x.getWrapperTranslate()+a*x.params.mousewheelSensitivity,i=x.isBeginning,n=x.isEnd;if(r>=x.minTranslate()&&(r=x.minTranslate()),r<=x.maxTranslate()&&(r=x.maxTranslate()),x.setWrapperTransition(0),x.setWrapperTranslate(r),x.updateProgress(),x.updateActiveIndex(),(!i&&x.isBeginning||!n&&x.isEnd)&&x.updateClasses(),x.params.freeModeSticky?(clearTimeout(x.mousewheel.timeout),x.mousewheel.timeout=setTimeout(function(){x.slideReset()},300)):x.params.lazyLoading&&x.lazy&&x.lazy.load(),x.emit("onScroll",x,e),x.params.autoplay&&x.params.autoplayDisableOnInteraction&&x.stopAutoplay(),0===r||r===x.maxTranslate())return}else{if((new window.Date).getTime()-x.mousewheel.lastScrollTime>60)if(a<0)if(x.isEnd&&!x.params.loop||x.animating){if(x.params.mousewheelReleaseOnEdges)return!0}else x.slideNext(),x.emit("onScroll",x,e);else if(x.isBeginning&&!x.params.loop||x.animating){if(x.params.mousewheelReleaseOnEdges)return!0}else x.slidePrev(),x.emit("onScroll",x,e);x.mousewheel.lastScrollTime=(new window.Date).getTime()}return e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function m(a,t){a=e(a);var s,r,i,n=x.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",r=a.attr("data-swiper-parallax-x"),i=a.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):x.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",a.transform("translate3d("+r+", "+i+",0px)")}function u(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof a))return new a(t,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,zoom:!1,zoomMax:3,zoomMin:1,zoomToggle:!0,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,mousewheelEventsTarged:"container",hashnav:!1,hashnavWatchState:!1,history:!1,replaceState:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",normalizeSlideIndex:!0,allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",paginationClickableClass:"swiper-pagination-clickable",paginationModifierClass:"swiper-pagination-",lazyLoadingClass:"swiper-lazy",lazyStatusLoadingClass:"swiper-lazy-loading",lazyStatusLoadedClass:"swiper-lazy-loaded",lazyPreloaderClass:"swiper-lazy-preloader",notificationClass:"swiper-notification",preloaderClass:"preloader",zoomContainerClass:"swiper-zoom-container",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},g=s&&s.virtualTranslate;s=s||{};var h={};for(var v in s)if("object"!=typeof s[v]||null===s[v]||(s[v].nodeType||s[v]===window||s[v]===document||"undefined"!=typeof Dom7&&s[v]instanceof Dom7||"undefined"!=typeof jQuery&&s[v]instanceof jQuery))h[v]=s[v];else{h[v]={};for(var f in s[v])h[v][f]=s[v][f]}for(var w in c)if(void 0===s[w])s[w]=c[w];else if("object"==typeof s[w])for(var y in c[w])void 0===s[w][y]&&(s[w][y]=c[w][y]);var x=this;if(x.params=s,x.originalParams=h,x.classNames=[],void 0!==e&&"undefined"!=typeof Dom7&&(e=Dom7),(void 0!==e||(e="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(x.$=e,x.currentBreakpoint=void 0,x.getActiveBreakpoint=function(){if(!x.params.breakpoints)return!1;var e,a=!1,t=[];for(e in x.params.breakpoints)x.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s<t.length;s++)(e=t[s])>=window.innerWidth&&!a&&(a=e);return a||"max"},x.setBreakpoint=function(){var e=x.getActiveBreakpoint();if(e&&x.currentBreakpoint!==e){var a=e in x.params.breakpoints?x.params.breakpoints[e]:x.originalParams,t=x.params.loop&&a.slidesPerView!==x.params.slidesPerView;for(var s in a)x.params[s]=a[s];x.currentBreakpoint=e,t&&x.destroyLoop&&x.reLoop(!0)}},x.params.breakpoints&&x.setBreakpoint(),x.container=e(t),0!==x.container.length)){if(x.container.length>1){var T=[];return x.container.each(function(){T.push(new a(this,s))}),T}x.container[0].swiper=x,x.container.data("swiper",x),x.classNames.push(x.params.containerModifierClass+x.params.direction),x.params.freeMode&&x.classNames.push(x.params.containerModifierClass+"free-mode"),x.support.flexbox||(x.classNames.push(x.params.containerModifierClass+"no-flexbox"),x.params.slidesPerColumn=1),x.params.autoHeight&&x.classNames.push(x.params.containerModifierClass+"autoheight"),(x.params.parallax||x.params.watchSlidesVisibility)&&(x.params.watchSlidesProgress=!0),x.params.touchReleaseOnEdges&&(x.params.resistanceRatio=0),["cube","coverflow","flip"].indexOf(x.params.effect)>=0&&(x.support.transforms3d?(x.params.watchSlidesProgress=!0,x.classNames.push(x.params.containerModifierClass+"3d")):x.params.effect="slide"),"slide"!==x.params.effect&&x.classNames.push(x.params.containerModifierClass+x.params.effect),"cube"===x.params.effect&&(x.params.resistanceRatio=0,x.params.slidesPerView=1,x.params.slidesPerColumn=1,x.params.slidesPerGroup=1,x.params.centeredSlides=!1,x.params.spaceBetween=0,x.params.virtualTranslate=!0),"fade"!==x.params.effect&&"flip"!==x.params.effect||(x.params.slidesPerView=1,x.params.slidesPerColumn=1,x.params.slidesPerGroup=1,x.params.watchSlidesProgress=!0,x.params.spaceBetween=0,void 0===g&&(x.params.virtualTranslate=!0)),x.params.grabCursor&&x.support.touch&&(x.params.grabCursor=!1),x.wrapper=x.container.children("."+x.params.wrapperClass),x.params.pagination&&(x.paginationContainer=e(x.params.pagination),x.params.uniqueNavElements&&"string"==typeof x.params.pagination&&x.paginationContainer.length>1&&1===x.container.find(x.params.pagination).length&&(x.paginationContainer=x.container.find(x.params.pagination)),"bullets"===x.params.paginationType&&x.params.paginationClickable?x.paginationContainer.addClass(x.params.paginationModifierClass+"clickable"):x.params.paginationClickable=!1,x.paginationContainer.addClass(x.params.paginationModifierClass+x.params.paginationType)),(x.params.nextButton||x.params.prevButton)&&(x.params.nextButton&&(x.nextButton=e(x.params.nextButton),x.params.uniqueNavElements&&"string"==typeof x.params.nextButton&&x.nextButton.length>1&&1===x.container.find(x.params.nextButton).length&&(x.nextButton=x.container.find(x.params.nextButton))),x.params.prevButton&&(x.prevButton=e(x.params.prevButton),x.params.uniqueNavElements&&"string"==typeof x.params.prevButton&&x.prevButton.length>1&&1===x.container.find(x.params.prevButton).length&&(x.prevButton=x.container.find(x.params.prevButton)))),x.isHorizontal=function(){return"horizontal"===x.params.direction},x.rtl=x.isHorizontal()&&("rtl"===x.container[0].dir.toLowerCase()||"rtl"===x.container.css("direction")),x.rtl&&x.classNames.push(x.params.containerModifierClass+"rtl"),x.rtl&&(x.wrongRTL="-webkit-box"===x.wrapper.css("display")),x.params.slidesPerColumn>1&&x.classNames.push(x.params.containerModifierClass+"multirow"),x.device.android&&x.classNames.push(x.params.containerModifierClass+"android"),x.container.addClass(x.classNames.join(" ")),x.translate=0,x.progress=0,x.velocity=0,x.lockSwipeToNext=function(){x.params.allowSwipeToNext=!1,x.params.allowSwipeToPrev===!1&&x.params.grabCursor&&x.unsetGrabCursor()},x.lockSwipeToPrev=function(){x.params.allowSwipeToPrev=!1,x.params.allowSwipeToNext===!1&&x.params.grabCursor&&x.unsetGrabCursor()},x.lockSwipes=function(){x.params.allowSwipeToNext=x.params.allowSwipeToPrev=!1,x.params.grabCursor&&x.unsetGrabCursor()},x.unlockSwipeToNext=function(){x.params.allowSwipeToNext=!0,x.params.allowSwipeToPrev===!0&&x.params.grabCursor&&x.setGrabCursor()},x.unlockSwipeToPrev=function(){x.params.allowSwipeToPrev=!0,x.params.allowSwipeToNext===!0&&x.params.grabCursor&&x.setGrabCursor()},x.unlockSwipes=function(){x.params.allowSwipeToNext=x.params.allowSwipeToPrev=!0,x.params.grabCursor&&x.setGrabCursor()},x.setGrabCursor=function(e){x.container[0].style.cursor="move",x.container[0].style.cursor=e?"-webkit-grabbing":"-webkit-grab",x.container[0].style.cursor=e?"-moz-grabbin":"-moz-grab",x.container[0].style.cursor=e?"grabbing":"grab"},x.unsetGrabCursor=function(){x.container[0].style.cursor=""},x.params.grabCursor&&x.setGrabCursor(),x.imagesToLoad=[],x.imagesLoaded=0,x.loadImage=function(e,a,t,s,r,i){function n(){i&&i()}var o;e.complete&&r?n():a?(o=new window.Image,o.onload=n,o.onerror=n,s&&(o.sizes=s),t&&(o.srcset=t),a&&(o.src=a)):n()},x.preloadImages=function(){function e(){void 0!==x&&null!==x&&x&&(void 0!==x.imagesLoaded&&x.imagesLoaded++,x.imagesLoaded===x.imagesToLoad.length&&(x.params.updateOnImagesReady&&x.update(),x.emit("onImagesReady",x)))}x.imagesToLoad=x.container.find("img");for(var a=0;a<x.imagesToLoad.length;a++)x.loadImage(x.imagesToLoad[a],x.imagesToLoad[a].currentSrc||x.imagesToLoad[a].getAttribute("src"),x.imagesToLoad[a].srcset||x.imagesToLoad[a].getAttribute("srcset"),x.imagesToLoad[a].sizes||x.imagesToLoad[a].getAttribute("sizes"),!0,e)},x.autoplayTimeoutId=void 0,x.autoplaying=!1,x.autoplayPaused=!1,x.startAutoplay=function(){return void 0===x.autoplayTimeoutId&&(!!x.params.autoplay&&(!x.autoplaying&&(x.autoplaying=!0,x.emit("onAutoplayStart",x),void i())))},x.stopAutoplay=function(e){x.autoplayTimeoutId&&(x.autoplayTimeoutId&&clearTimeout(x.autoplayTimeoutId),x.autoplaying=!1,x.autoplayTimeoutId=void 0,x.emit("onAutoplayStop",x))},x.pauseAutoplay=function(e){x.autoplayPaused||(x.autoplayTimeoutId&&clearTimeout(x.autoplayTimeoutId),x.autoplayPaused=!0,0===e?(x.autoplayPaused=!1,i()):x.wrapper.transitionEnd(function(){x&&(x.autoplayPaused=!1,x.autoplaying?i():x.stopAutoplay())}))},x.minTranslate=function(){return-x.snapGrid[0]},x.maxTranslate=function(){return-x.snapGrid[x.snapGrid.length-1]},x.updateAutoHeight=function(){var e,a=[],t=0;if("auto"!==x.params.slidesPerView&&x.params.slidesPerView>1)for(e=0;e<Math.ceil(x.params.slidesPerView);e++){var s=x.activeIndex+e;if(s>x.slides.length)break;a.push(x.slides.eq(s)[0])}else a.push(x.slides.eq(x.activeIndex)[0]);for(e=0;e<a.length;e++)if(void 0!==a[e]){var r=a[e].offsetHeight;t=r>t?r:t}t&&x.wrapper.css("height",t+"px")},x.updateContainerSize=function(){var e,a;e=void 0!==x.params.width?x.params.width:x.container[0].clientWidth,a=void 0!==x.params.height?x.params.height:x.container[0].clientHeight,0===e&&x.isHorizontal()||0===a&&!x.isHorizontal()||(e=e-parseInt(x.container.css("padding-left"),10)-parseInt(x.container.css("padding-right"),10),a=a-parseInt(x.container.css("padding-top"),10)-parseInt(x.container.css("padding-bottom"),10),x.width=e,x.height=a,x.size=x.isHorizontal()?x.width:x.height)},x.updateSlidesSize=function(){x.slides=x.wrapper.children("."+x.params.slideClass),x.snapGrid=[],x.slidesGrid=[],x.slidesSizesGrid=[];var e,a=x.params.spaceBetween,t=-x.params.slidesOffsetBefore,s=0,i=0;if(void 0!==x.size){"string"==typeof a&&a.indexOf("%")>=0&&(a=parseFloat(a.replace("%",""))/100*x.size),x.virtualSize=-a,x.rtl?x.slides.css({marginLeft:"",marginTop:""}):x.slides.css({marginRight:"",marginBottom:""});var n;x.params.slidesPerColumn>1&&(n=Math.floor(x.slides.length/x.params.slidesPerColumn)===x.slides.length/x.params.slidesPerColumn?x.slides.length:Math.ceil(x.slides.length/x.params.slidesPerColumn)*x.params.slidesPerColumn,"auto"!==x.params.slidesPerView&&"row"===x.params.slidesPerColumnFill&&(n=Math.max(n,x.params.slidesPerView*x.params.slidesPerColumn)));var o,l=x.params.slidesPerColumn,p=n/l,d=p-(x.params.slidesPerColumn*p-x.slides.length);for(e=0;e<x.slides.length;e++){o=0;var m=x.slides.eq(e);if(x.params.slidesPerColumn>1){var u,c,g;"column"===x.params.slidesPerColumnFill?(c=Math.floor(e/l),g=e-c*l,(c>d||c===d&&g===l-1)&&++g>=l&&(g=0,c++),u=c+g*n/l,m.css({"-webkit-box-ordinal-group":u,"-moz-box-ordinal-group":u,"-ms-flex-order":u,"-webkit-order":u,order:u})):(g=Math.floor(e/p),c=e-g*p),m.css("margin-"+(x.isHorizontal()?"top":"left"),0!==g&&x.params.spaceBetween&&x.params.spaceBetween+"px").attr("data-swiper-column",c).attr("data-swiper-row",g)}"none"!==m.css("display")&&("auto"===x.params.slidesPerView?(o=x.isHorizontal()?m.outerWidth(!0):m.outerHeight(!0),x.params.roundLengths&&(o=r(o))):(o=(x.size-(x.params.slidesPerView-1)*a)/x.params.slidesPerView,x.params.roundLengths&&(o=r(o)),x.isHorizontal()?x.slides[e].style.width=o+"px":x.slides[e].style.height=o+"px"),x.slides[e].swiperSlideSize=o,x.slidesSizesGrid.push(o),x.params.centeredSlides?(t=t+o/2+s/2+a,0===s&&0!==e&&(t=t-x.size/2-a),0===e&&(t=t-x.size/2-a),Math.abs(t)<.001&&(t=0),i%x.params.slidesPerGroup==0&&x.snapGrid.push(t),x.slidesGrid.push(t)):(i%x.params.slidesPerGroup==0&&x.snapGrid.push(t),x.slidesGrid.push(t),t=t+o+a),x.virtualSize+=o+a,s=o,i++)}x.virtualSize=Math.max(x.virtualSize,x.size)+x.params.slidesOffsetAfter;var h;if(x.rtl&&x.wrongRTL&&("slide"===x.params.effect||"coverflow"===x.params.effect)&&x.wrapper.css({width:x.virtualSize+x.params.spaceBetween+"px"}),x.support.flexbox&&!x.params.setWrapperSize||(x.isHorizontal()?x.wrapper.css({width:x.virtualSize+x.params.spaceBetween+"px"}):x.wrapper.css({height:x.virtualSize+x.params.spaceBetween+"px"})),x.params.slidesPerColumn>1&&(x.virtualSize=(o+x.params.spaceBetween)*n,x.virtualSize=Math.ceil(x.virtualSize/x.params.slidesPerColumn)-x.params.spaceBetween,x.isHorizontal()?x.wrapper.css({width:x.virtualSize+x.params.spaceBetween+"px"}):x.wrapper.css({height:x.virtualSize+x.params.spaceBetween+"px"}),x.params.centeredSlides)){for(h=[],e=0;e<x.snapGrid.length;e++)x.snapGrid[e]<x.virtualSize+x.snapGrid[0]&&h.push(x.snapGrid[e]);x.snapGrid=h}if(!x.params.centeredSlides){for(h=[],e=0;e<x.snapGrid.length;e++)x.snapGrid[e]<=x.virtualSize-x.size&&h.push(x.snapGrid[e]);x.snapGrid=h,Math.floor(x.virtualSize-x.size)-Math.floor(x.snapGrid[x.snapGrid.length-1])>1&&x.snapGrid.push(x.virtualSize-x.size)}0===x.snapGrid.length&&(x.snapGrid=[0]),0!==x.params.spaceBetween&&(x.isHorizontal()?x.rtl?x.slides.css({marginLeft:a+"px"}):x.slides.css({marginRight:a+"px"}):x.slides.css({marginBottom:a+"px"})),x.params.watchSlidesProgress&&x.updateSlidesOffset()}},x.updateSlidesOffset=function(){for(var e=0;e<x.slides.length;e++)x.slides[e].swiperSlideOffset=x.isHorizontal()?x.slides[e].offsetLeft:x.slides[e].offsetTop},x.currentSlidesPerView=function(){var e,a,t=1;if(x.params.centeredSlides){var s,r=x.slides[x.activeIndex].swiperSlideSize;for(e=x.activeIndex+1;e<x.slides.length;e++)x.slides[e]&&!s&&(r+=x.slides[e].swiperSlideSize,t++,r>x.size&&(s=!0));for(a=x.activeIndex-1;a>=0;a--)x.slides[a]&&!s&&(r+=x.slides[a].swiperSlideSize,t++,r>x.size&&(s=!0))}else for(e=x.activeIndex+1;e<x.slides.length;e++)x.slidesGrid[e]-x.slidesGrid[x.activeIndex]<x.size&&t++;return t},x.updateSlidesProgress=function(e){if(void 0===e&&(e=x.translate||0),0!==x.slides.length){void 0===x.slides[0].swiperSlideOffset&&x.updateSlidesOffset();var a=-e;x.rtl&&(a=e),x.slides.removeClass(x.params.slideVisibleClass);for(var t=0;t<x.slides.length;t++){var s=x.slides[t],r=(a+(x.params.centeredSlides?x.minTranslate():0)-s.swiperSlideOffset)/(s.swiperSlideSize+x.params.spaceBetween);if(x.params.watchSlidesVisibility){var i=-(a-s.swiperSlideOffset),n=i+x.slidesSizesGrid[t];(i>=0&&i<x.size||n>0&&n<=x.size||i<=0&&n>=x.size)&&x.slides.eq(t).addClass(x.params.slideVisibleClass)}s.progress=x.rtl?-r:r}}},x.updateProgress=function(e){void 0===e&&(e=x.translate||0);var a=x.maxTranslate()-x.minTranslate(),t=x.isBeginning,s=x.isEnd;0===a?(x.progress=0,x.isBeginning=x.isEnd=!0):(x.progress=(e-x.minTranslate())/a,x.isBeginning=x.progress<=0,x.isEnd=x.progress>=1),x.isBeginning&&!t&&x.emit("onReachBeginning",x),x.isEnd&&!s&&x.emit("onReachEnd",x),x.params.watchSlidesProgress&&x.updateSlidesProgress(e),x.emit("onProgress",x,x.progress)},x.updateActiveIndex=function(){var e,a,t,s=x.rtl?x.translate:-x.translate;for(a=0;a<x.slidesGrid.length;a++)void 0!==x.slidesGrid[a+1]?s>=x.slidesGrid[a]&&s<x.slidesGrid[a+1]-(x.slidesGrid[a+1]-x.slidesGrid[a])/2?e=a:s>=x.slidesGrid[a]&&s<x.slidesGrid[a+1]&&(e=a+1):s>=x.slidesGrid[a]&&(e=a);x.params.normalizeSlideIndex&&(e<0||void 0===e)&&(e=0),t=Math.floor(e/x.params.slidesPerGroup),t>=x.snapGrid.length&&(t=x.snapGrid.length-1),e!==x.activeIndex&&(x.snapIndex=t,x.previousIndex=x.activeIndex,x.activeIndex=e,x.updateClasses(),x.updateRealIndex())},x.updateRealIndex=function(){x.realIndex=parseInt(x.slides.eq(x.activeIndex).attr("data-swiper-slide-index")||x.activeIndex,10)},x.updateClasses=function(){x.slides.removeClass(x.params.slideActiveClass+" "+x.params.slideNextClass+" "+x.params.slidePrevClass+" "+x.params.slideDuplicateActiveClass+" "+x.params.slideDuplicateNextClass+" "+x.params.slideDuplicatePrevClass);var a=x.slides.eq(x.activeIndex);a.addClass(x.params.slideActiveClass),s.loop&&(a.hasClass(x.params.slideDuplicateClass)?x.wrapper.children("."+x.params.slideClass+":not(."+x.params.slideDuplicateClass+')[data-swiper-slide-index="'+x.realIndex+'"]').addClass(x.params.slideDuplicateActiveClass):x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+x.realIndex+'"]').addClass(x.params.slideDuplicateActiveClass));var t=a.next("."+x.params.slideClass).addClass(x.params.slideNextClass);x.params.loop&&0===t.length&&(t=x.slides.eq(0),t.addClass(x.params.slideNextClass));var r=a.prev("."+x.params.slideClass).addClass(x.params.slidePrevClass);if(x.params.loop&&0===r.length&&(r=x.slides.eq(-1),r.addClass(x.params.slidePrevClass)),s.loop&&(t.hasClass(x.params.slideDuplicateClass)?x.wrapper.children("."+x.params.slideClass+":not(."+x.params.slideDuplicateClass+')[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicateNextClass):x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicateNextClass),r.hasClass(x.params.slideDuplicateClass)?x.wrapper.children("."+x.params.slideClass+":not(."+x.params.slideDuplicateClass+')[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicatePrevClass):x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicatePrevClass)),x.paginationContainer&&x.paginationContainer.length>0){var i,n=x.params.loop?Math.ceil((x.slides.length-2*x.loopedSlides)/x.params.slidesPerGroup):x.snapGrid.length;if(x.params.loop?(i=Math.ceil((x.activeIndex-x.loopedSlides)/x.params.slidesPerGroup),i>x.slides.length-1-2*x.loopedSlides&&(i-=x.slides.length-2*x.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==x.params.paginationType&&(i=n+i)):i=void 0!==x.snapIndex?x.snapIndex:x.activeIndex||0,"bullets"===x.params.paginationType&&x.bullets&&x.bullets.length>0&&(x.bullets.removeClass(x.params.bulletActiveClass),x.paginationContainer.length>1?x.bullets.each(function(){e(this).index()===i&&e(this).addClass(x.params.bulletActiveClass)}):x.bullets.eq(i).addClass(x.params.bulletActiveClass)),"fraction"===x.params.paginationType&&(x.paginationContainer.find("."+x.params.paginationCurrentClass).text(i+1),x.paginationContainer.find("."+x.params.paginationTotalClass).text(n)),"progress"===x.params.paginationType){var o=(i+1)/n,l=o,p=1;x.isHorizontal()||(p=o,l=1),x.paginationContainer.find("."+x.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+l+") scaleY("+p+")").transition(x.params.speed)}"custom"===x.params.paginationType&&x.params.paginationCustomRender&&(x.paginationContainer.html(x.params.paginationCustomRender(x,i+1,n)),x.emit("onPaginationRendered",x,x.paginationContainer[0]))}x.params.loop||(x.params.prevButton&&x.prevButton&&x.prevButton.length>0&&(x.isBeginning?(x.prevButton.addClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.disable(x.prevButton)):(x.prevButton.removeClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.enable(x.prevButton))),x.params.nextButton&&x.nextButton&&x.nextButton.length>0&&(x.isEnd?(x.nextButton.addClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.disable(x.nextButton)):(x.nextButton.removeClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.enable(x.nextButton))))},x.updatePagination=function(){if(x.params.pagination&&x.paginationContainer&&x.paginationContainer.length>0){var e="";if("bullets"===x.params.paginationType){for(var a=x.params.loop?Math.ceil((x.slides.length-2*x.loopedSlides)/x.params.slidesPerGroup):x.snapGrid.length,t=0;t<a;t++)e+=x.params.paginationBulletRender?x.params.paginationBulletRender(x,t,x.params.bulletClass):"<"+x.params.paginationElement+' class="'+x.params.bulletClass+'"></'+x.params.paginationElement+">";x.paginationContainer.html(e),x.bullets=x.paginationContainer.find("."+x.params.bulletClass),x.params.paginationClickable&&x.params.a11y&&x.a11y&&x.a11y.initPagination()}"fraction"===x.params.paginationType&&(e=x.params.paginationFractionRender?x.params.paginationFractionRender(x,x.params.paginationCurrentClass,x.params.paginationTotalClass):'<span class="'+x.params.paginationCurrentClass+'"></span> / <span class="'+x.params.paginationTotalClass+'"></span>',x.paginationContainer.html(e)),"progress"===x.params.paginationType&&(e=x.params.paginationProgressRender?x.params.paginationProgressRender(x,x.params.paginationProgressbarClass):'<span class="'+x.params.paginationProgressbarClass+'"></span>',x.paginationContainer.html(e)),"custom"!==x.params.paginationType&&x.emit("onPaginationRendered",x,x.paginationContainer[0])}},x.update=function(e){function a(){x.rtl,x.translate;t=Math.min(Math.max(x.translate,x.maxTranslate()),x.minTranslate()),x.setWrapperTranslate(t),x.updateActiveIndex(),x.updateClasses()}if(x){x.updateContainerSize(),x.updateSlidesSize(),x.updateProgress(),x.updatePagination(),x.updateClasses(),x.params.scrollbar&&x.scrollbar&&x.scrollbar.set();var t;if(e){x.controller&&x.controller.spline&&(x.controller.spline=void 0),x.params.freeMode?(a(),x.params.autoHeight&&x.updateAutoHeight()):(("auto"===x.params.slidesPerView||x.params.slidesPerView>1)&&x.isEnd&&!x.params.centeredSlides?x.slideTo(x.slides.length-1,0,!1,!0):x.slideTo(x.activeIndex,0,!1,!0))||a()}else x.params.autoHeight&&x.updateAutoHeight()}},x.onResize=function(e){x.params.onBeforeResize&&x.params.onBeforeResize(x),x.params.breakpoints&&x.setBreakpoint();var a=x.params.allowSwipeToPrev,t=x.params.allowSwipeToNext;x.params.allowSwipeToPrev=x.params.allowSwipeToNext=!0,x.updateContainerSize(),x.updateSlidesSize(),("auto"===x.params.slidesPerView||x.params.freeMode||e)&&x.updatePagination(),x.params.scrollbar&&x.scrollbar&&x.scrollbar.set(),x.controller&&x.controller.spline&&(x.controller.spline=void 0);var s=!1;if(x.params.freeMode){var r=Math.min(Math.max(x.translate,x.maxTranslate()),x.minTranslate());x.setWrapperTranslate(r),x.updateActiveIndex(),x.updateClasses(),x.params.autoHeight&&x.updateAutoHeight()}else x.updateClasses(),s=("auto"===x.params.slidesPerView||x.params.slidesPerView>1)&&x.isEnd&&!x.params.centeredSlides?x.slideTo(x.slides.length-1,0,!1,!0):x.slideTo(x.activeIndex,0,!1,!0);x.params.lazyLoading&&!s&&x.lazy&&x.lazy.load(),x.params.allowSwipeToPrev=a,x.params.allowSwipeToNext=t,x.params.onAfterResize&&x.params.onAfterResize(x)},x.touchEventsDesktop={start:"mousedown",move:"mousemove",end:"mouseup"},window.navigator.pointerEnabled?x.touchEventsDesktop={start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled&&(x.touchEventsDesktop={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}),x.touchEvents={start:x.support.touch||!x.params.simulateTouch?"touchstart":x.touchEventsDesktop.start,move:x.support.touch||!x.params.simulateTouch?"touchmove":x.touchEventsDesktop.move,end:x.support.touch||!x.params.simulateTouch?"touchend":x.touchEventsDesktop.end},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===x.params.touchEventsTarget?x.container:x.wrapper).addClass("swiper-wp8-"+x.params.direction),x.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===x.params.touchEventsTarget?x.container[0]:x.wrapper[0],i=x.support.touch?r:document,n=!!x.params.nested;if(x.browser.ie)r[t](x.touchEvents.start,x.onTouchStart,!1),i[t](x.touchEvents.move,x.onTouchMove,n),i[t](x.touchEvents.end,x.onTouchEnd,!1);else{if(x.support.touch){var o=!("touchstart"!==x.touchEvents.start||!x.support.passiveListener||!x.params.passiveListeners)&&{passive:!0,capture:!1};r[t](x.touchEvents.start,x.onTouchStart,o),r[t](x.touchEvents.move,x.onTouchMove,n),r[t](x.touchEvents.end,x.onTouchEnd,o)}(s.simulateTouch&&!x.device.ios&&!x.device.android||s.simulateTouch&&!x.support.touch&&x.device.ios)&&(r[t]("mousedown",x.onTouchStart,!1),document[t]("mousemove",x.onTouchMove,n),document[t]("mouseup",x.onTouchEnd,!1))}window[t]("resize",x.onResize),x.params.nextButton&&x.nextButton&&x.nextButton.length>0&&(x.nextButton[a]("click",x.onClickNext),x.params.a11y&&x.a11y&&x.nextButton[a]("keydown",x.a11y.onEnterKey)),x.params.prevButton&&x.prevButton&&x.prevButton.length>0&&(x.prevButton[a]("click",x.onClickPrev),x.params.a11y&&x.a11y&&x.prevButton[a]("keydown",x.a11y.onEnterKey)),x.params.pagination&&x.params.paginationClickable&&(x.paginationContainer[a]("click","."+x.params.bulletClass,x.onClickIndex),x.params.a11y&&x.a11y&&x.paginationContainer[a]("keydown","."+x.params.bulletClass,x.a11y.onEnterKey)),(x.params.preventClicks||x.params.preventClicksPropagation)&&r[t]("click",x.preventClicks,!0)},x.attachEvents=function(){x.initEvents()},x.detachEvents=function(){x.initEvents(!0)},x.allowClick=!0,x.preventClicks=function(e){x.allowClick||(x.params.preventClicks&&e.preventDefault(),x.params.preventClicksPropagation&&x.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},x.onClickNext=function(e){e.preventDefault(),x.isEnd&&!x.params.loop||x.slideNext()},x.onClickPrev=function(e){e.preventDefault(),x.isBeginning&&!x.params.loop||x.slidePrev()},x.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*x.params.slidesPerGroup;x.params.loop&&(t+=x.loopedSlides),x.slideTo(t)},x.updateClickedSlide=function(a){var t=n(a,"."+x.params.slideClass),s=!1;if(t)for(var r=0;r<x.slides.length;r++)x.slides[r]===t&&(s=!0);if(!t||!s)return x.clickedSlide=void 0,void(x.clickedIndex=void 0);if(x.clickedSlide=t,x.clickedIndex=e(t).index(),x.params.slideToClickedSlide&&void 0!==x.clickedIndex&&x.clickedIndex!==x.activeIndex){var i,o=x.clickedIndex,l="auto"===x.params.slidesPerView?x.currentSlidesPerView():x.params.slidesPerView;if(x.params.loop){if(x.animating)return;i=parseInt(e(x.clickedSlide).attr("data-swiper-slide-index"),10),x.params.centeredSlides?o<x.loopedSlides-l/2||o>x.slides.length-x.loopedSlides+l/2?(x.fixLoop(),o=x.wrapper.children("."+x.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+x.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){x.slideTo(o)},0)):x.slideTo(o):o>x.slides.length-l?(x.fixLoop(),o=x.wrapper.children("."+x.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+x.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){x.slideTo(o)},0)):x.slideTo(o)}else x.slideTo(o)}};var b,C,S,z,M,P,E,I,k,D,L="input, select, textarea, button, video",B=Date.now(),H=[];x.animating=!1,x.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,X;x.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),(G="touchstart"===a.type)||!("which"in a)||3!==a.which){if(x.params.noSwiping&&n(a,"."+x.params.noSwipingClass))return void(x.allowClick=!0);if(!x.params.swipeHandler||n(a,x.params.swipeHandler)){var t=x.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=x.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(x.device.ios&&x.params.iOSEdgeSwipeDetection&&t<=x.params.iOSEdgeSwipeThreshold)){if(b=!0,C=!1,S=!0,M=void 0,X=void 0,x.touches.startX=t,x.touches.startY=s,z=Date.now(),x.allowClick=!0,x.updateContainerSize(),x.swipeDirection=void 0,x.params.threshold>0&&(I=!1),"touchstart"!==a.type){var r=!0;e(a.target).is(L)&&(r=!1),document.activeElement&&e(document.activeElement).is(L)&&document.activeElement.blur(),r&&a.preventDefault()}x.emit("onTouchStart",x,a)}}}},x.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!G||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return x.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(x.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(x.params.onlyExternal)return x.allowClick=!1,void(b&&(x.touches.startX=x.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,x.touches.startY=x.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,z=Date.now()));if(G&&x.params.touchReleaseOnEdges&&!x.params.loop)if(x.isHorizontal()){if(x.touches.currentX<x.touches.startX&&x.translate<=x.maxTranslate()||x.touches.currentX>x.touches.startX&&x.translate>=x.minTranslate())return}else if(x.touches.currentY<x.touches.startY&&x.translate<=x.maxTranslate()||x.touches.currentY>x.touches.startY&&x.translate>=x.minTranslate())return;if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(L))return C=!0,void(x.allowClick=!1);if(S&&x.emit("onTouchMove",x,a),!(a.targetTouches&&a.targetTouches.length>1)){if(x.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,x.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,void 0===M){var t;x.isHorizontal()&&x.touches.currentY===x.touches.startY||!x.isHorizontal()&&x.touches.currentX===x.touches.startX?M=!1:(t=180*Math.atan2(Math.abs(x.touches.currentY-x.touches.startY),Math.abs(x.touches.currentX-x.touches.startX))/Math.PI,M=x.isHorizontal()?t>x.params.touchAngle:90-t>x.params.touchAngle)}if(M&&x.emit("onTouchMoveOpposite",x,a),void 0===X&&(x.touches.currentX===x.touches.startX&&x.touches.currentY===x.touches.startY||(X=!0)),b){if(M)return void(b=!1);if(X){x.allowClick=!1,x.emit("onSliderMove",x,a),a.preventDefault(),x.params.touchMoveStopPropagation&&!x.params.nested&&a.stopPropagation(),C||(s.loop&&x.fixLoop(),E=x.getWrapperTranslate(),x.setWrapperTransition(0),x.animating&&x.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),x.params.autoplay&&x.autoplaying&&(x.params.autoplayDisableOnInteraction?x.stopAutoplay():x.pauseAutoplay()),D=!1,!x.params.grabCursor||x.params.allowSwipeToNext!==!0&&x.params.allowSwipeToPrev!==!0||x.setGrabCursor(!0)),C=!0;var r=x.touches.diff=x.isHorizontal()?x.touches.currentX-x.touches.startX:x.touches.currentY-x.touches.startY;r*=x.params.touchRatio,x.rtl&&(r=-r),x.swipeDirection=r>0?"prev":"next",P=r+E;var i=!0;if(r>0&&P>x.minTranslate()?(i=!1,x.params.resistance&&(P=x.minTranslate()-1+Math.pow(-x.minTranslate()+E+r,x.params.resistanceRatio))):r<0&&P<x.maxTranslate()&&(i=!1,x.params.resistance&&(P=x.maxTranslate()+1-Math.pow(x.maxTranslate()-E-r,x.params.resistanceRatio))),i&&(a.preventedByNestedSwiper=!0),!x.params.allowSwipeToNext&&"next"===x.swipeDirection&&P<E&&(P=E),!x.params.allowSwipeToPrev&&"prev"===x.swipeDirection&&P>E&&(P=E),x.params.threshold>0){if(!(Math.abs(r)>x.params.threshold||I))return void(P=E);if(!I)return I=!0,x.touches.startX=x.touches.currentX,x.touches.startY=x.touches.currentY,P=E,void(x.touches.diff=x.isHorizontal()?x.touches.currentX-x.touches.startX:x.touches.currentY-x.touches.startY)}x.params.followFinger&&((x.params.freeMode||x.params.watchSlidesProgress)&&x.updateActiveIndex(),x.params.freeMode&&(0===H.length&&H.push({position:x.touches[x.isHorizontal()?"startX":"startY"],time:z}),H.push({position:x.touches[x.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),x.updateProgress(P),x.setWrapperTranslate(P))}}}}},x.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),S&&x.emit("onTouchEnd",x,a),S=!1,b){x.params.grabCursor&&C&&b&&(x.params.allowSwipeToNext===!0||x.params.allowSwipeToPrev===!0)&&x.setGrabCursor(!1);var t=Date.now(),s=t-z;if(x.allowClick&&(x.updateClickedSlide(a),x.emit("onTap",x,a),s<300&&t-B>300&&(k&&clearTimeout(k),k=setTimeout(function(){x&&(x.params.paginationHide&&x.paginationContainer.length>0&&!e(a.target).hasClass(x.params.bulletClass)&&x.paginationContainer.toggleClass(x.params.paginationHiddenClass),x.emit("onClick",x,a))},300)),s<300&&t-B<300&&(k&&clearTimeout(k),x.emit("onDoubleTap",x,a))),B=Date.now(),setTimeout(function(){x&&(x.allowClick=!0)},0),!b||!C||!x.swipeDirection||0===x.touches.diff||P===E)return void(b=C=!1);b=C=!1;var r;if(r=x.params.followFinger?x.rtl?x.translate:-x.translate:-P,x.params.freeMode){if(r<-x.minTranslate())return void x.slideTo(x.activeIndex);if(r>-x.maxTranslate())return void(x.slides.length<x.snapGrid.length?x.slideTo(x.snapGrid.length-1):x.slideTo(x.slides.length-1));if(x.params.freeModeMomentum){if(H.length>1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;x.velocity=o/l,x.velocity=x.velocity/2,Math.abs(x.velocity)<x.params.freeModeMinimumVelocity&&(x.velocity=0),(l>150||(new window.Date).getTime()-i.time>300)&&(x.velocity=0)}else x.velocity=0;x.velocity=x.velocity*x.params.freeModeMomentumVelocityRatio,H.length=0;var p=1e3*x.params.freeModeMomentumRatio,d=x.velocity*p,m=x.translate+d;x.rtl&&(m=-m);var u,c=!1,g=20*Math.abs(x.velocity)*x.params.freeModeMomentumBounceRatio;if(m<x.maxTranslate())x.params.freeModeMomentumBounce?(m+x.maxTranslate()<-g&&(m=x.maxTranslate()-g),u=x.maxTranslate(),c=!0,D=!0):m=x.maxTranslate();else if(m>x.minTranslate())x.params.freeModeMomentumBounce?(m-x.minTranslate()>g&&(m=x.minTranslate()+g),u=x.minTranslate(),c=!0,D=!0):m=x.minTranslate();else if(x.params.freeModeSticky){var h,v=0;for(v=0;v<x.snapGrid.length;v+=1)if(x.snapGrid[v]>-m){h=v;break}m=Math.abs(x.snapGrid[h]-m)<Math.abs(x.snapGrid[h-1]-m)||"next"===x.swipeDirection?x.snapGrid[h]:x.snapGrid[h-1],x.rtl||(m=-m)}if(0!==x.velocity)p=x.rtl?Math.abs((-m-x.translate)/x.velocity):Math.abs((m-x.translate)/x.velocity);else if(x.params.freeModeSticky)return void x.slideReset();x.params.freeModeMomentumBounce&&c?(x.updateProgress(u),x.setWrapperTransition(p),x.setWrapperTranslate(m),x.onTransitionStart(),x.animating=!0,x.wrapper.transitionEnd(function(){x&&D&&(x.emit("onMomentumBounce",x),x.setWrapperTransition(x.params.speed),x.setWrapperTranslate(u),x.wrapper.transitionEnd(function(){x&&x.onTransitionEnd()}))})):x.velocity?(x.updateProgress(m),x.setWrapperTransition(p),x.setWrapperTranslate(m),x.onTransitionStart(),x.animating||(x.animating=!0,x.wrapper.transitionEnd(function(){x&&x.onTransitionEnd()}))):x.updateProgress(m),x.updateActiveIndex()}return void((!x.params.freeModeMomentum||s>=x.params.longSwipesMs)&&(x.updateProgress(),x.updateActiveIndex()))}var f,w=0,y=x.slidesSizesGrid[0];for(f=0;f<x.slidesGrid.length;f+=x.params.slidesPerGroup)void 0!==x.slidesGrid[f+x.params.slidesPerGroup]?r>=x.slidesGrid[f]&&r<x.slidesGrid[f+x.params.slidesPerGroup]&&(w=f,y=x.slidesGrid[f+x.params.slidesPerGroup]-x.slidesGrid[f]):r>=x.slidesGrid[f]&&(w=f,y=x.slidesGrid[x.slidesGrid.length-1]-x.slidesGrid[x.slidesGrid.length-2]);var T=(r-x.slidesGrid[w])/y;if(s>x.params.longSwipesMs){if(!x.params.longSwipes)return void x.slideTo(x.activeIndex);"next"===x.swipeDirection&&(T>=x.params.longSwipesRatio?x.slideTo(w+x.params.slidesPerGroup):x.slideTo(w)),"prev"===x.swipeDirection&&(T>1-x.params.longSwipesRatio?x.slideTo(w+x.params.slidesPerGroup):x.slideTo(w))}else{if(!x.params.shortSwipes)return void x.slideTo(x.activeIndex);"next"===x.swipeDirection&&x.slideTo(w+x.params.slidesPerGroup),"prev"===x.swipeDirection&&x.slideTo(w)}}},x._slideTo=function(e,a){return x.slideTo(e,a,!0,!0)},x.slideTo=function(e,a,t,s){void 0===t&&(t=!0),void 0===e&&(e=0),e<0&&(e=0),x.snapIndex=Math.floor(e/x.params.slidesPerGroup),x.snapIndex>=x.snapGrid.length&&(x.snapIndex=x.snapGrid.length-1);var r=-x.snapGrid[x.snapIndex];if(x.params.autoplay&&x.autoplaying&&(s||!x.params.autoplayDisableOnInteraction?x.pauseAutoplay(a):x.stopAutoplay()),x.updateProgress(r),x.params.normalizeSlideIndex)for(var i=0;i<x.slidesGrid.length;i++)-Math.floor(100*r)>=Math.floor(100*x.slidesGrid[i])&&(e=i);return!(!x.params.allowSwipeToNext&&r<x.translate&&r<x.minTranslate())&&(!(!x.params.allowSwipeToPrev&&r>x.translate&&r>x.maxTranslate()&&(x.activeIndex||0)!==e)&&(void 0===a&&(a=x.params.speed),x.previousIndex=x.activeIndex||0,x.activeIndex=e,x.updateRealIndex(),x.rtl&&-r===x.translate||!x.rtl&&r===x.translate?(x.params.autoHeight&&x.updateAutoHeight(),x.updateClasses(),"slide"!==x.params.effect&&x.setWrapperTranslate(r),!1):(x.updateClasses(),x.onTransitionStart(t),0===a||x.browser.lteIE9?(x.setWrapperTranslate(r),x.setWrapperTransition(0),x.onTransitionEnd(t)):(x.setWrapperTranslate(r),x.setWrapperTransition(a),x.animating||(x.animating=!0,x.wrapper.transitionEnd(function(){x&&x.onTransitionEnd(t)}))),!0)))},x.onTransitionStart=function(e){void 0===e&&(e=!0),x.params.autoHeight&&x.updateAutoHeight(),x.lazy&&x.lazy.onTransitionStart(),e&&(x.emit("onTransitionStart",x),x.activeIndex!==x.previousIndex&&(x.emit("onSlideChangeStart",x),x.activeIndex>x.previousIndex?x.emit("onSlideNextStart",x):x.emit("onSlidePrevStart",x)))},x.onTransitionEnd=function(e){x.animating=!1,x.setWrapperTransition(0),void 0===e&&(e=!0),x.lazy&&x.lazy.onTransitionEnd(),e&&(x.emit("onTransitionEnd",x),x.activeIndex!==x.previousIndex&&(x.emit("onSlideChangeEnd",x),x.activeIndex>x.previousIndex?x.emit("onSlideNextEnd",x):x.emit("onSlidePrevEnd",x))),x.params.history&&x.history&&x.history.setHistory(x.params.history,x.activeIndex),x.params.hashnav&&x.hashnav&&x.hashnav.setHash()},x.slideNext=function(e,a,t){if(x.params.loop){if(x.animating)return!1;x.fixLoop();x.container[0].clientLeft;return x.slideTo(x.activeIndex+x.params.slidesPerGroup,a,e,t)}return x.slideTo(x.activeIndex+x.params.slidesPerGroup,a,e,t)},x._slideNext=function(e){return x.slideNext(!0,e,!0)},x.slidePrev=function(e,a,t){if(x.params.loop){if(x.animating)return!1;x.fixLoop();x.container[0].clientLeft;return x.slideTo(x.activeIndex-1,a,e,t)}return x.slideTo(x.activeIndex-1,a,e,t)},x._slidePrev=function(e){return x.slidePrev(!0,e,!0)},x.slideReset=function(e,a,t){return x.slideTo(x.activeIndex,a,e)},x.disableTouchControl=function(){return x.params.onlyExternal=!0,!0},x.enableTouchControl=function(){return x.params.onlyExternal=!1,!0},x.setWrapperTransition=function(e,a){x.wrapper.transition(e),"slide"!==x.params.effect&&x.effects[x.params.effect]&&x.effects[x.params.effect].setTransition(e),x.params.parallax&&x.parallax&&x.parallax.setTransition(e),x.params.scrollbar&&x.scrollbar&&x.scrollbar.setTransition(e),x.params.control&&x.controller&&x.controller.setTransition(e,a),x.emit("onSetTransition",x,e)},x.setWrapperTranslate=function(e,a,t){var s=0,i=0;x.isHorizontal()?s=x.rtl?-e:e:i=e,x.params.roundLengths&&(s=r(s),i=r(i)),x.params.virtualTranslate||(x.support.transforms3d?x.wrapper.transform("translate3d("+s+"px, "+i+"px, 0px)"):x.wrapper.transform("translate("+s+"px, "+i+"px)")),x.translate=x.isHorizontal()?s:i;var n,o=x.maxTranslate()-x.minTranslate();n=0===o?0:(e-x.minTranslate())/o,n!==x.progress&&x.updateProgress(e),a&&x.updateActiveIndex(),"slide"!==x.params.effect&&x.effects[x.params.effect]&&x.effects[x.params.effect].setTranslate(x.translate),x.params.parallax&&x.parallax&&x.parallax.setTranslate(x.translate),x.params.scrollbar&&x.scrollbar&&x.scrollbar.setTranslate(x.translate),x.params.control&&x.controller&&x.controller.setTranslate(x.translate,t),x.emit("onSetTranslate",x,x.translate)},x.getTranslate=function(e,a){var t,s,r,i;return void 0===a&&(a="x"),x.params.virtualTranslate?x.rtl?-x.translate:x.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=r.transform||r.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),x.rtl&&s&&(s=-s),s||0)},x.getWrapperTranslate=function(e){return void 0===e&&(e=x.isHorizontal()?"x":"y"),x.getTranslate(x.wrapper[0],e)},x.observers=[],x.initObservers=function(){if(x.params.observeParents)for(var e=x.container.parents(),a=0;a<e.length;a++)o(e[a]);o(x.container[0],{childList:!1}),o(x.wrapper[0],{attributes:!1})},x.disconnectObservers=function(){for(var e=0;e<x.observers.length;e++)x.observers[e].disconnect();x.observers=[]},x.createLoop=function(){x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass).remove();var a=x.wrapper.children("."+x.params.slideClass);"auto"!==x.params.slidesPerView||x.params.loopedSlides||(x.params.loopedSlides=a.length),x.loopedSlides=parseInt(x.params.loopedSlides||x.params.slidesPerView,10),x.loopedSlides=x.loopedSlides+x.params.loopAdditionalSlides,x.loopedSlides>a.length&&(x.loopedSlides=a.length);var t,s=[],r=[];for(a.each(function(t,i){var n=e(this);t<x.loopedSlides&&r.push(i),t<a.length&&t>=a.length-x.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t<r.length;t++)x.wrapper.append(e(r[t].cloneNode(!0)).addClass(x.params.slideDuplicateClass));for(t=s.length-1;t>=0;t--)x.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(x.params.slideDuplicateClass))},x.destroyLoop=function(){x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass).remove(),x.slides.removeAttr("data-swiper-slide-index")},x.reLoop=function(e){var a=x.activeIndex-x.loopedSlides;x.destroyLoop(),x.createLoop(),x.updateSlidesSize(),e&&x.slideTo(a+x.loopedSlides,0,!1)},x.fixLoop=function(){var e;x.activeIndex<x.loopedSlides?(e=x.slides.length-3*x.loopedSlides+x.activeIndex,e+=x.loopedSlides,x.slideTo(e,0,!1,!0)):("auto"===x.params.slidesPerView&&x.activeIndex>=2*x.loopedSlides||x.activeIndex>x.slides.length-2*x.params.slidesPerView)&&(e=-x.slides.length+x.activeIndex+x.loopedSlides,e+=x.loopedSlides,x.slideTo(e,0,!1,!0))},x.appendSlide=function(e){if(x.params.loop&&x.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;a<e.length;a++)e[a]&&x.wrapper.append(e[a]);else x.wrapper.append(e);x.params.loop&&x.createLoop(),x.params.observer&&x.support.observer||x.update(!0)},x.prependSlide=function(e){x.params.loop&&x.destroyLoop();var a=x.activeIndex+1;if("object"==typeof e&&e.length){for(var t=0;t<e.length;t++)e[t]&&x.wrapper.prepend(e[t]);a=x.activeIndex+e.length}else x.wrapper.prepend(e);x.params.loop&&x.createLoop(),x.params.observer&&x.support.observer||x.update(!0),x.slideTo(a,0,!1)},x.removeSlide=function(e){x.params.loop&&(x.destroyLoop(),x.slides=x.wrapper.children("."+x.params.slideClass));var a,t=x.activeIndex;if("object"==typeof e&&e.length){for(var s=0;s<e.length;s++)a=e[s],x.slides[a]&&x.slides.eq(a).remove(),a<t&&t--;t=Math.max(t,0)}else a=e,x.slides[a]&&x.slides.eq(a).remove(),a<t&&t--,t=Math.max(t,0);x.params.loop&&x.createLoop(),x.params.observer&&x.support.observer||x.update(!0),x.params.loop?x.slideTo(t+x.loopedSlides,0,!1):x.slideTo(t,0,!1)},x.removeAllSlides=function(){for(var e=[],a=0;a<x.slides.length;a++)e.push(a);x.removeSlide(e)},x.effects={fade:{setTranslate:function(){for(var e=0;e<x.slides.length;e++){var a=x.slides.eq(e),t=a[0].swiperSlideOffset,s=-t;x.params.virtualTranslate||(s-=x.translate);var r=0;x.isHorizontal()||(r=s,s=0);var i=x.params.fade.crossFade?Math.max(1-Math.abs(a[0].progress),0):1+Math.min(Math.max(a[0].progress,-1),0);a.css({opacity:i}).transform("translate3d("+s+"px, "+r+"px, 0px)")}},setTransition:function(e){if(x.slides.transition(e),x.params.virtualTranslate&&0!==e){var a=!1;x.slides.transitionEnd(function(){if(!a&&x){a=!0,x.animating=!1;for(var e=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],t=0;t<e.length;t++)x.wrapper.trigger(e[t])}})}}},flip:{setTranslate:function(){for(var a=0;a<x.slides.length;a++){var t=x.slides.eq(a),s=t[0].progress;x.params.flip.limitRotation&&(s=Math.max(Math.min(t[0].progress,1),-1));var r=t[0].swiperSlideOffset,i=-180*s,n=i,o=0,l=-r,p=0;if(x.isHorizontal()?x.rtl&&(n=-n):(p=l,l=0,o=-n,n=0),t[0].style.zIndex=-Math.abs(Math.round(s))+x.slides.length,x.params.flip.slideShadows){var d=x.isHorizontal()?t.find(".swiper-slide-shadow-left"):t.find(".swiper-slide-shadow-top"),m=x.isHorizontal()?t.find(".swiper-slide-shadow-right"):t.find(".swiper-slide-shadow-bottom");0===d.length&&(d=e('<div class="swiper-slide-shadow-'+(x.isHorizontal()?"left":"top")+'"></div>'),t.append(d)),0===m.length&&(m=e('<div class="swiper-slide-shadow-'+(x.isHorizontal()?"right":"bottom")+'"></div>'),t.append(m)),d.length&&(d[0].style.opacity=Math.max(-s,0)),m.length&&(m[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(a){if(x.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),x.params.virtualTranslate&&0!==a){var t=!1;x.slides.eq(x.activeIndex).transitionEnd(function(){if(!t&&x&&e(this).hasClass(x.params.slideActiveClass)){t=!0,x.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s<a.length;s++)x.wrapper.trigger(a[s])}})}}},cube:{setTranslate:function(){var a,t=0;x.params.cube.shadow&&(x.isHorizontal()?(a=x.wrapper.find(".swiper-cube-shadow"),0===a.length&&(a=e('<div class="swiper-cube-shadow"></div>'),x.wrapper.append(a)),a.css({height:x.width+"px"})):(a=x.container.find(".swiper-cube-shadow"),0===a.length&&(a=e('<div class="swiper-cube-shadow"></div>'),x.container.append(a))));for(var s=0;s<x.slides.length;s++){var r=x.slides.eq(s),i=90*s,n=Math.floor(i/360);x.rtl&&(i=-i,n=Math.floor(-i/360));var o=Math.max(Math.min(r[0].progress,1),-1),l=0,p=0,d=0;s%4==0?(l=4*-n*x.size,d=0):(s-1)%4==0?(l=0,d=4*-n*x.size):(s-2)%4==0?(l=x.size+4*n*x.size,d=x.size):(s-3)%4==0&&(l=-x.size,d=3*x.size+4*x.size*n),x.rtl&&(l=-l),x.isHorizontal()||(p=l,l=0);var m="rotateX("+(x.isHorizontal()?0:-i)+"deg) rotateY("+(x.isHorizontal()?i:0)+"deg) translate3d("+l+"px, "+p+"px, "+d+"px)";if(o<=1&&o>-1&&(t=90*s+90*o,x.rtl&&(t=90*-s-90*o)),r.transform(m),x.params.cube.slideShadows){var u=x.isHorizontal()?r.find(".swiper-slide-shadow-left"):r.find(".swiper-slide-shadow-top"),c=x.isHorizontal()?r.find(".swiper-slide-shadow-right"):r.find(".swiper-slide-shadow-bottom");0===u.length&&(u=e('<div class="swiper-slide-shadow-'+(x.isHorizontal()?"left":"top")+'"></div>'),r.append(u)),0===c.length&&(c=e('<div class="swiper-slide-shadow-'+(x.isHorizontal()?"right":"bottom")+'"></div>'),r.append(c)),u.length&&(u[0].style.opacity=Math.max(-o,0)),c.length&&(c[0].style.opacity=Math.max(o,0))}}if(x.wrapper.css({"-webkit-transform-origin":"50% 50% -"+x.size/2+"px","-moz-transform-origin":"50% 50% -"+x.size/2+"px","-ms-transform-origin":"50% 50% -"+x.size/2+"px","transform-origin":"50% 50% -"+x.size/2+"px"}),x.params.cube.shadow)if(x.isHorizontal())a.transform("translate3d(0px, "+(x.width/2+x.params.cube.shadowOffset)+"px, "+-x.width/2+"px) rotateX(90deg) rotateZ(0deg) scale("+x.params.cube.shadowScale+")");else{var g=Math.abs(t)-90*Math.floor(Math.abs(t)/90),h=1.5-(Math.sin(2*g*Math.PI/360)/2+Math.cos(2*g*Math.PI/360)/2),v=x.params.cube.shadowScale,f=x.params.cube.shadowScale/h,w=x.params.cube.shadowOffset;a.transform("scale3d("+v+", 1, "+f+") translate3d(0px, "+(x.height/2+w)+"px, "+-x.height/2/f+"px) rotateX(-90deg)")}var y=x.isSafari||x.isUiWebView?-x.size/2:0;x.wrapper.transform("translate3d(0px,0,"+y+"px) rotateX("+(x.isHorizontal()?0:t)+"deg) rotateY("+(x.isHorizontal()?-t:0)+"deg)")},setTransition:function(e){x.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),x.params.cube.shadow&&!x.isHorizontal()&&x.container.find(".swiper-cube-shadow").transition(e)}},coverflow:{setTranslate:function(){for(var a=x.translate,t=x.isHorizontal()?-a+x.width/2:-a+x.height/2,s=x.isHorizontal()?x.params.coverflow.rotate:-x.params.coverflow.rotate,r=x.params.coverflow.depth,i=0,n=x.slides.length;i<n;i++){var o=x.slides.eq(i),l=x.slidesSizesGrid[i],p=o[0].swiperSlideOffset,d=(t-p-l/2)/l*x.params.coverflow.modifier,m=x.isHorizontal()?s*d:0,u=x.isHorizontal()?0:s*d,c=-r*Math.abs(d),g=x.isHorizontal()?0:x.params.coverflow.stretch*d,h=x.isHorizontal()?x.params.coverflow.stretch*d:0;Math.abs(h)<.001&&(h=0),Math.abs(g)<.001&&(g=0),Math.abs(c)<.001&&(c=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0);var v="translate3d("+h+"px,"+g+"px,"+c+"px) rotateX("+u+"deg) rotateY("+m+"deg)";if(o.transform(v),o[0].style.zIndex=1-Math.abs(Math.round(d)),x.params.coverflow.slideShadows){var f=x.isHorizontal()?o.find(".swiper-slide-shadow-left"):o.find(".swiper-slide-shadow-top"),w=x.isHorizontal()?o.find(".swiper-slide-shadow-right"):o.find(".swiper-slide-shadow-bottom");0===f.length&&(f=e('<div class="swiper-slide-shadow-'+(x.isHorizontal()?"left":"top")+'"></div>'),o.append(f)),0===w.length&&(w=e('<div class="swiper-slide-shadow-'+(x.isHorizontal()?"right":"bottom")+'"></div>'),o.append(w)),f.length&&(f[0].style.opacity=d>0?d:0),w.length&&(w[0].style.opacity=-d>0?-d:0)}}if(x.browser.ie){x.wrapper[0].style.perspectiveOrigin=t+"px 50%"}},setTransition:function(e){x.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}}},x.lazy={initialImageLoaded:!1,loadImageInSlide:function(a,t){if(void 0!==a&&(void 0===t&&(t=!0),0!==x.slides.length)){var s=x.slides.eq(a),r=s.find("."+x.params.lazyLoadingClass+":not(."+x.params.lazyStatusLoadedClass+"):not(."+x.params.lazyStatusLoadingClass+")");!s.hasClass(x.params.lazyLoadingClass)||s.hasClass(x.params.lazyStatusLoadedClass)||s.hasClass(x.params.lazyStatusLoadingClass)||(r=r.add(s[0])),0!==r.length&&r.each(function(){var a=e(this);a.addClass(x.params.lazyStatusLoadingClass);var r=a.attr("data-background"),i=a.attr("data-src"),n=a.attr("data-srcset"),o=a.attr("data-sizes");x.loadImage(a[0],i||r,n,o,!1,function(){if(void 0!==x&&null!==x&&x){if(r?(a.css("background-image",'url("'+r+'")'),a.removeAttr("data-background")):(n&&(a.attr("srcset",n),a.removeAttr("data-srcset")),o&&(a.attr("sizes",o),a.removeAttr("data-sizes")),i&&(a.attr("src",i),a.removeAttr("data-src"))),a.addClass(x.params.lazyStatusLoadedClass).removeClass(x.params.lazyStatusLoadingClass),s.find("."+x.params.lazyPreloaderClass+", ."+x.params.preloaderClass).remove(),x.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(x.params.slideDuplicateClass)){var l=x.wrapper.children('[data-swiper-slide-index="'+e+'"]:not(.'+x.params.slideDuplicateClass+")");x.lazy.loadImageInSlide(l.index(),!1)}else{var p=x.wrapper.children("."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');x.lazy.loadImageInSlide(p.index(),!1)}}x.emit("onLazyImageReady",x,s[0],a[0])}}),x.emit("onLazyImageLoad",x,s[0],a[0])})}},load:function(){var a,t=x.params.slidesPerView;if("auto"===t&&(t=0),x.lazy.initialImageLoaded||(x.lazy.initialImageLoaded=!0),x.params.watchSlidesVisibility)x.wrapper.children("."+x.params.slideVisibleClass).each(function(){x.lazy.loadImageInSlide(e(this).index())});else if(t>1)for(a=x.activeIndex;a<x.activeIndex+t;a++)x.slides[a]&&x.lazy.loadImageInSlide(a);else x.lazy.loadImageInSlide(x.activeIndex);if(x.params.lazyLoadingInPrevNext)if(t>1||x.params.lazyLoadingInPrevNextAmount&&x.params.lazyLoadingInPrevNextAmount>1){var s=x.params.lazyLoadingInPrevNextAmount,r=t,i=Math.min(x.activeIndex+r+Math.max(s,r),x.slides.length),n=Math.max(x.activeIndex-Math.max(r,s),0);for(a=x.activeIndex+t;a<i;a++)x.slides[a]&&x.lazy.loadImageInSlide(a);for(a=n;a<x.activeIndex;a++)x.slides[a]&&x.lazy.loadImageInSlide(a)}else{var o=x.wrapper.children("."+x.params.slideNextClass);o.length>0&&x.lazy.loadImageInSlide(o.index());var l=x.wrapper.children("."+x.params.slidePrevClass);l.length>0&&x.lazy.loadImageInSlide(l.index())}},onTransitionStart:function(){x.params.lazyLoading&&(x.params.lazyLoadingOnTransitionStart||!x.params.lazyLoadingOnTransitionStart&&!x.lazy.initialImageLoaded)&&x.lazy.load()},onTransitionEnd:function(){x.params.lazyLoading&&!x.params.lazyLoadingOnTransitionStart&&x.lazy.load()}},x.scrollbar={isTouched:!1,setDragPosition:function(e){var a=x.scrollbar,t=x.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY,s=t-a.track.offset()[x.isHorizontal()?"left":"top"]-a.dragSize/2,r=-x.minTranslate()*a.moveDivider,i=-x.maxTranslate()*a.moveDivider;s<r?s=r:s>i&&(s=i),s=-s/a.moveDivider,x.updateProgress(s),x.setWrapperTranslate(s,!0)},dragStart:function(e){var a=x.scrollbar;a.isTouched=!0,e.preventDefault(),e.stopPropagation(),a.setDragPosition(e),clearTimeout(a.dragTimeout),a.track.transition(0),x.params.scrollbarHide&&a.track.css("opacity",1),x.wrapper.transition(100),a.drag.transition(100),x.emit("onScrollbarDragStart",x)},dragMove:function(e){var a=x.scrollbar;a.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),x.wrapper.transition(0),a.track.transition(0),a.drag.transition(0),x.emit("onScrollbarDragMove",x))},dragEnd:function(e){var a=x.scrollbar;a.isTouched&&(a.isTouched=!1,x.params.scrollbarHide&&(clearTimeout(a.dragTimeout),a.dragTimeout=setTimeout(function(){a.track.css("opacity",0),a.track.transition(400)},1e3)),x.emit("onScrollbarDragEnd",x),x.params.scrollbarSnapOnRelease&&x.slideReset())},draggableEvents:function(){return x.params.simulateTouch!==!1||x.support.touch?x.touchEvents:x.touchEventsDesktop}(),enableDraggable:function(){var a=x.scrollbar,t=x.support.touch?a.track:document;e(a.track).on(a.draggableEvents.start,a.dragStart),e(t).on(a.draggableEvents.move,a.dragMove),e(t).on(a.draggableEvents.end,a.dragEnd)},disableDraggable:function(){var a=x.scrollbar,t=x.support.touch?a.track:document;e(a.track).off(a.draggableEvents.start,a.dragStart),e(t).off(a.draggableEvents.move,a.dragMove),e(t).off(a.draggableEvents.end,a.dragEnd)},set:function(){if(x.params.scrollbar){var a=x.scrollbar;a.track=e(x.params.scrollbar),x.params.uniqueNavElements&&"string"==typeof x.params.scrollbar&&a.track.length>1&&1===x.container.find(x.params.scrollbar).length&&(a.track=x.container.find(x.params.scrollbar)),a.drag=a.track.find(".swiper-scrollbar-drag"),0===a.drag.length&&(a.drag=e('<div class="swiper-scrollbar-drag"></div>'),a.track.append(a.drag)),a.drag[0].style.width="",a.drag[0].style.height="",a.trackSize=x.isHorizontal()?a.track[0].offsetWidth:a.track[0].offsetHeight,a.divider=x.size/x.virtualSize,a.moveDivider=a.divider*(a.trackSize/x.size),a.dragSize=a.trackSize*a.divider,x.isHorizontal()?a.drag[0].style.width=a.dragSize+"px":a.drag[0].style.height=a.dragSize+"px",a.divider>=1?a.track[0].style.display="none":a.track[0].style.display="",x.params.scrollbarHide&&(a.track[0].style.opacity=0)}},setTranslate:function(){if(x.params.scrollbar){var e,a=x.scrollbar,t=(x.translate,a.dragSize);e=(a.trackSize-a.dragSize)*x.progress,x.rtl&&x.isHorizontal()?(e=-e,e>0?(t=a.dragSize-e,e=0):-e+a.dragSize>a.trackSize&&(t=a.trackSize+e)):e<0?(t=a.dragSize+e,e=0):e+a.dragSize>a.trackSize&&(t=a.trackSize-e),x.isHorizontal()?(x.support.transforms3d?a.drag.transform("translate3d("+e+"px, 0, 0)"):a.drag.transform("translateX("+e+"px)"),a.drag[0].style.width=t+"px"):(x.support.transforms3d?a.drag.transform("translate3d(0px, "+e+"px, 0)"):a.drag.transform("translateY("+e+"px)"),a.drag[0].style.height=t+"px"),x.params.scrollbarHide&&(clearTimeout(a.timeout),a.track[0].style.opacity=1,a.timeout=setTimeout(function(){a.track[0].style.opacity=0,a.track.transition(400)},1e3))}},setTransition:function(e){x.params.scrollbar&&x.scrollbar.drag.transition(e)}},x.controller={LinearSpline:function(e,a){var t=function(){var e,a,t;return function(s,r){for(a=-1,e=s.length;e-a>1;)s[t=e+a>>1]<=r?a=t:e=t;return e}}();this.x=e,this.y=a,this.lastIndex=e.length-1;var s,r;this.x.length;this.interpolate=function(e){return e?(r=t(this.x,e),s=r-1,(e-this.x[s])*(this.y[r]-this.y[s])/(this.x[r]-this.x[s])+this.y[s]):0}},getInterpolateFunction:function(e){x.controller.spline||(x.controller.spline=x.params.loop?new x.controller.LinearSpline(x.slidesGrid,e.slidesGrid):new x.controller.LinearSpline(x.snapGrid,e.snapGrid))},setTranslate:function(e,t){function s(a){e=a.rtl&&"horizontal"===a.params.direction?-x.translate:x.translate,"slide"===x.params.controlBy&&(x.controller.getInterpolateFunction(a),i=-x.controller.spline.interpolate(-e)),i&&"container"!==x.params.controlBy||(r=(a.maxTranslate()-a.minTranslate())/(x.maxTranslate()-x.minTranslate()),i=(e-x.minTranslate())*r+a.minTranslate()),x.params.controlInverse&&(i=a.maxTranslate()-i),a.updateProgress(i),a.setWrapperTranslate(i,!1,x),a.updateActiveIndex()}var r,i,n=x.params.control;if(Array.isArray(n))for(var o=0;o<n.length;o++)n[o]!==t&&n[o]instanceof a&&s(n[o]);else n instanceof a&&t!==n&&s(n)},setTransition:function(e,t){function s(a){a.setWrapperTransition(e,x),0!==e&&(a.onTransitionStart(),a.wrapper.transitionEnd(function(){i&&(a.params.loop&&"slide"===x.params.controlBy&&a.fixLoop(),a.onTransitionEnd())}))}var r,i=x.params.control;if(Array.isArray(i))for(r=0;r<i.length;r++)i[r]!==t&&i[r]instanceof a&&s(i[r]);else i instanceof a&&t!==i&&s(i)}},x.hashnav={onHashCange:function(e,a){var t=document.location.hash.replace("#","");t!==x.slides.eq(x.activeIndex).attr("data-hash")&&x.slideTo(x.wrapper.children("."+x.params.slideClass+'[data-hash="'+t+'"]').index())},attachEvents:function(a){var t=a?"off":"on";e(window)[t]("hashchange",x.hashnav.onHashCange)},setHash:function(){if(x.hashnav.initialized&&x.params.hashnav)if(x.params.replaceState&&window.history&&window.history.replaceState)window.history.replaceState(null,null,"#"+x.slides.eq(x.activeIndex).attr("data-hash")||"");else{var e=x.slides.eq(x.activeIndex),a=e.attr("data-hash")||e.attr("data-history");document.location.hash=a||""}},init:function(){if(x.params.hashnav&&!x.params.history){x.hashnav.initialized=!0;var e=document.location.hash.replace("#","");if(e)for(var a=0,t=x.slides.length;a<t;a++){var s=x.slides.eq(a),r=s.attr("data-hash")||s.attr("data-history");if(r===e&&!s.hasClass(x.params.slideDuplicateClass)){var i=s.index();x.slideTo(i,0,x.params.runCallbacksOnInit,!0)}}x.params.hashnavWatchState&&x.hashnav.attachEvents()}},destroy:function(){x.params.hashnavWatchState&&x.hashnav.attachEvents(!0)}},x.history={init:function(){if(x.params.history){if(!window.history||!window.history.pushState)return x.params.history=!1,void(x.params.hashnav=!0);x.history.initialized=!0,this.paths=this.getPathValues(),(this.paths.key||this.paths.value)&&(this.scrollToSlide(0,this.paths.value,x.params.runCallbacksOnInit),x.params.replaceState||window.addEventListener("popstate",this.setHistoryPopState))}},setHistoryPopState:function(){x.history.paths=x.history.getPathValues(),x.history.scrollToSlide(x.params.speed,x.history.paths.value,!1)},getPathValues:function(){var e=window.location.pathname.slice(1).split("/"),a=e.length;return{key:e[a-2],value:e[a-1]}},setHistory:function(e,a){if(x.history.initialized&&x.params.history){var t=x.slides.eq(a),s=this.slugify(t.attr("data-history"));window.location.pathname.includes(e)||(s=e+"/"+s),x.params.replaceState?window.history.replaceState(null,null,s):window.history.pushState(null,null,s)}},slugify:function(e){return e.toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w\-]+/g,"").replace(/\-\-+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,a,t){if(a)for(var s=0,r=x.slides.length;s<r;s++){var i=x.slides.eq(s),n=this.slugify(i.attr("data-history"));if(n===a&&!i.hasClass(x.params.slideDuplicateClass)){var o=i.index();x.slideTo(o,e,t)}}else x.slideTo(0,e,t)}},x.disableKeyboardControl=function(){x.params.keyboardControl=!1,e(document).off("keydown",l)},x.enableKeyboardControl=function(){x.params.keyboardControl=!0,e(document).on("keydown",l)},x.mousewheel={event:!1,lastScrollTime:(new window.Date).getTime()},x.params.mousewheelControl&&(x.mousewheel.event=navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":function(){var e="onwheel"in document;if(!e){var a=document.createElement("div");a.setAttribute("onwheel","return;"),e="function"==typeof a.onwheel}return!e&&document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0&&(e=document.implementation.hasFeature("Events.wheel","3.0")),e}()?"wheel":"mousewheel"),x.disableMousewheelControl=function(){if(!x.mousewheel.event)return!1;var a=x.container;return"container"!==x.params.mousewheelEventsTarged&&(a=e(x.params.mousewheelEventsTarged)),a.off(x.mousewheel.event,d),x.params.mousewheelControl=!1,!0},x.enableMousewheelControl=function(){if(!x.mousewheel.event)return!1;var a=x.container;return"container"!==x.params.mousewheelEventsTarged&&(a=e(x.params.mousewheelEventsTarged)),a.on(x.mousewheel.event,d),x.params.mousewheelControl=!0,!0},x.parallax={setTranslate:function(){x.container.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){m(this,x.progress)}),x.slides.each(function(){var a=e(this);a.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){m(this,Math.min(Math.max(a[0].progress,-1),1))})})},setTransition:function(a){void 0===a&&(a=x.params.speed),x.container.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(){var t=e(this),s=parseInt(t.attr("data-swiper-parallax-duration"),10)||a;0===a&&(s=0),t.transition(s)})}},x.zoom={scale:1,currentScale:1,isScaling:!1,gesture:{slide:void 0,slideWidth:void 0,slideHeight:void 0,image:void 0,imageWrap:void 0,zoomMax:x.params.zoomMax},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0},getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var a=e.targetTouches[0].pageX,t=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,r=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-a,2)+Math.pow(r-t,2))},onGestureStart:function(a){var t=x.zoom;if(!x.support.gestures){if("touchstart"!==a.type||"touchstart"===a.type&&a.targetTouches.length<2)return;t.gesture.scaleStart=t.getDistanceBetweenTouches(a)}if(!(t.gesture.slide&&t.gesture.slide.length||(t.gesture.slide=e(this),0===t.gesture.slide.length&&(t.gesture.slide=x.slides.eq(x.activeIndex)),t.gesture.image=t.gesture.slide.find("img, svg, canvas"),t.gesture.imageWrap=t.gesture.image.parent("."+x.params.zoomContainerClass),t.gesture.zoomMax=t.gesture.imageWrap.attr("data-swiper-zoom")||x.params.zoomMax,0!==t.gesture.imageWrap.length)))return void(t.gesture.image=void 0);t.gesture.image.transition(0),t.isScaling=!0},onGestureChange:function(e){var a=x.zoom;if(!x.support.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;a.gesture.scaleMove=a.getDistanceBetweenTouches(e)}a.gesture.image&&0!==a.gesture.image.length&&(x.support.gestures?a.scale=e.scale*a.currentScale:a.scale=a.gesture.scaleMove/a.gesture.scaleStart*a.currentScale,a.scale>a.gesture.zoomMax&&(a.scale=a.gesture.zoomMax-1+Math.pow(a.scale-a.gesture.zoomMax+1,.5)),a.scale<x.params.zoomMin&&(a.scale=x.params.zoomMin+1-Math.pow(x.params.zoomMin-a.scale+1,.5)),a.gesture.image.transform("translate3d(0,0,0) scale("+a.scale+")"))},onGestureEnd:function(e){var a=x.zoom;!x.support.gestures&&("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2)||a.gesture.image&&0!==a.gesture.image.length&&(a.scale=Math.max(Math.min(a.scale,a.gesture.zoomMax),x.params.zoomMin),a.gesture.image.transition(x.params.speed).transform("translate3d(0,0,0) scale("+a.scale+")"),a.currentScale=a.scale,a.isScaling=!1,1===a.scale&&(a.gesture.slide=void 0))},onTouchStart:function(e,a){var t=e.zoom;t.gesture.image&&0!==t.gesture.image.length&&(t.image.isTouched||("android"===e.device.os&&a.preventDefault(),t.image.isTouched=!0,t.image.touchesStart.x="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,t.image.touchesStart.y="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY))},onTouchMove:function(e){var a=x.zoom;if(a.gesture.image&&0!==a.gesture.image.length&&(x.allowClick=!1,a.image.isTouched&&a.gesture.slide)){a.image.isMoved||(a.image.width=a.gesture.image[0].offsetWidth,a.image.height=a.gesture.image[0].offsetHeight,a.image.startX=x.getTranslate(a.gesture.imageWrap[0],"x")||0,a.image.startY=x.getTranslate(a.gesture.imageWrap[0],"y")||0,a.gesture.slideWidth=a.gesture.slide[0].offsetWidth,a.gesture.slideHeight=a.gesture.slide[0].offsetHeight,a.gesture.imageWrap.transition(0),x.rtl&&(a.image.startX=-a.image.startX),x.rtl&&(a.image.startY=-a.image.startY));var t=a.image.width*a.scale,s=a.image.height*a.scale;if(!(t<a.gesture.slideWidth&&s<a.gesture.slideHeight)){if(a.image.minX=Math.min(a.gesture.slideWidth/2-t/2,0),a.image.maxX=-a.image.minX,a.image.minY=Math.min(a.gesture.slideHeight/2-s/2,0),a.image.maxY=-a.image.minY,a.image.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,a.image.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!a.image.isMoved&&!a.isScaling){if(x.isHorizontal()&&Math.floor(a.image.minX)===Math.floor(a.image.startX)&&a.image.touchesCurrent.x<a.image.touchesStart.x||Math.floor(a.image.maxX)===Math.floor(a.image.startX)&&a.image.touchesCurrent.x>a.image.touchesStart.x)return void(a.image.isTouched=!1);if(!x.isHorizontal()&&Math.floor(a.image.minY)===Math.floor(a.image.startY)&&a.image.touchesCurrent.y<a.image.touchesStart.y||Math.floor(a.image.maxY)===Math.floor(a.image.startY)&&a.image.touchesCurrent.y>a.image.touchesStart.y)return void(a.image.isTouched=!1)}e.preventDefault(),e.stopPropagation(),a.image.isMoved=!0,a.image.currentX=a.image.touchesCurrent.x-a.image.touchesStart.x+a.image.startX,a.image.currentY=a.image.touchesCurrent.y-a.image.touchesStart.y+a.image.startY,a.image.currentX<a.image.minX&&(a.image.currentX=a.image.minX+1-Math.pow(a.image.minX-a.image.currentX+1,.8)),a.image.currentX>a.image.maxX&&(a.image.currentX=a.image.maxX-1+Math.pow(a.image.currentX-a.image.maxX+1,.8)),a.image.currentY<a.image.minY&&(a.image.currentY=a.image.minY+1-Math.pow(a.image.minY-a.image.currentY+1,.8)),a.image.currentY>a.image.maxY&&(a.image.currentY=a.image.maxY-1+Math.pow(a.image.currentY-a.image.maxY+1,.8)),a.velocity.prevPositionX||(a.velocity.prevPositionX=a.image.touchesCurrent.x),a.velocity.prevPositionY||(a.velocity.prevPositionY=a.image.touchesCurrent.y),a.velocity.prevTime||(a.velocity.prevTime=Date.now()),a.velocity.x=(a.image.touchesCurrent.x-a.velocity.prevPositionX)/(Date.now()-a.velocity.prevTime)/2,a.velocity.y=(a.image.touchesCurrent.y-a.velocity.prevPositionY)/(Date.now()-a.velocity.prevTime)/2,Math.abs(a.image.touchesCurrent.x-a.velocity.prevPositionX)<2&&(a.velocity.x=0),Math.abs(a.image.touchesCurrent.y-a.velocity.prevPositionY)<2&&(a.velocity.y=0),a.velocity.prevPositionX=a.image.touchesCurrent.x,a.velocity.prevPositionY=a.image.touchesCurrent.y,a.velocity.prevTime=Date.now(),a.gesture.imageWrap.transform("translate3d("+a.image.currentX+"px, "+a.image.currentY+"px,0)")}}},onTouchEnd:function(e,a){var t=e.zoom;if(t.gesture.image&&0!==t.gesture.image.length){if(!t.image.isTouched||!t.image.isMoved)return t.image.isTouched=!1,void(t.image.isMoved=!1);t.image.isTouched=!1,t.image.isMoved=!1;var s=300,r=300,i=t.velocity.x*s,n=t.image.currentX+i,o=t.velocity.y*r,l=t.image.currentY+o;0!==t.velocity.x&&(s=Math.abs((n-t.image.currentX)/t.velocity.x)),0!==t.velocity.y&&(r=Math.abs((l-t.image.currentY)/t.velocity.y));var p=Math.max(s,r);t.image.currentX=n,t.image.currentY=l;var d=t.image.width*t.scale,m=t.image.height*t.scale;t.image.minX=Math.min(t.gesture.slideWidth/2-d/2,0),t.image.maxX=-t.image.minX,t.image.minY=Math.min(t.gesture.slideHeight/2-m/2,0),t.image.maxY=-t.image.minY,t.image.currentX=Math.max(Math.min(t.image.currentX,t.image.maxX),t.image.minX),t.image.currentY=Math.max(Math.min(t.image.currentY,t.image.maxY),t.image.minY),t.gesture.imageWrap.transition(p).transform("translate3d("+t.image.currentX+"px, "+t.image.currentY+"px,0)")}},onTransitionEnd:function(e){var a=e.zoom;a.gesture.slide&&e.previousIndex!==e.activeIndex&&(a.gesture.image.transform("translate3d(0,0,0) scale(1)"),a.gesture.imageWrap.transform("translate3d(0,0,0)"),a.gesture.slide=a.gesture.image=a.gesture.imageWrap=void 0,a.scale=a.currentScale=1)},toggleZoom:function(a,t){var s=a.zoom;if(s.gesture.slide||(s.gesture.slide=a.clickedSlide?e(a.clickedSlide):a.slides.eq(a.activeIndex),s.gesture.image=s.gesture.slide.find("img, svg, canvas"),s.gesture.imageWrap=s.gesture.image.parent("."+a.params.zoomContainerClass)),s.gesture.image&&0!==s.gesture.image.length){var r,i,n,o,l,p,d,m,u,c,g,h,v,f,w,y,x,T;void 0===s.image.touchesStart.x&&t?(r="touchend"===t.type?t.changedTouches[0].pageX:t.pageX,i="touchend"===t.type?t.changedTouches[0].pageY:t.pageY):(r=s.image.touchesStart.x,i=s.image.touchesStart.y),s.scale&&1!==s.scale?(s.scale=s.currentScale=1,s.gesture.imageWrap.transition(300).transform("translate3d(0,0,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale(1)"),s.gesture.slide=void 0):(s.scale=s.currentScale=s.gesture.imageWrap.attr("data-swiper-zoom")||a.params.zoomMax,t?(x=s.gesture.slide[0].offsetWidth,T=s.gesture.slide[0].offsetHeight,n=s.gesture.slide.offset().left,o=s.gesture.slide.offset().top,l=n+x/2-r,p=o+T/2-i,u=s.gesture.image[0].offsetWidth,c=s.gesture.image[0].offsetHeight,g=u*s.scale,h=c*s.scale,v=Math.min(x/2-g/2,0),f=Math.min(T/2-h/2,0),w=-v,y=-f,d=l*s.scale,m=p*s.scale,d<v&&(d=v),d>w&&(d=w),m<f&&(m=f),m>y&&(m=y)):(d=0,m=0),s.gesture.imageWrap.transition(300).transform("translate3d("+d+"px, "+m+"px,0)"),s.gesture.image.transition(300).transform("translate3d(0,0,0) scale("+s.scale+")"))}},attachEvents:function(a){var t=a?"off":"on";if(x.params.zoom){var s=(x.slides,!("touchstart"!==x.touchEvents.start||!x.support.passiveListener||!x.params.passiveListeners)&&{passive:!0,capture:!1});x.support.gestures?(x.slides[t]("gesturestart",x.zoom.onGestureStart,s),x.slides[t]("gesturechange",x.zoom.onGestureChange,s),x.slides[t]("gestureend",x.zoom.onGestureEnd,s)):"touchstart"===x.touchEvents.start&&(x.slides[t](x.touchEvents.start,x.zoom.onGestureStart,s),x.slides[t](x.touchEvents.move,x.zoom.onGestureChange,s),x.slides[t](x.touchEvents.end,x.zoom.onGestureEnd,s)),x[t]("touchStart",x.zoom.onTouchStart),x.slides.each(function(a,s){e(s).find("."+x.params.zoomContainerClass).length>0&&e(s)[t](x.touchEvents.move,x.zoom.onTouchMove)}),x[t]("touchEnd",x.zoom.onTouchEnd),x[t]("transitionEnd",x.zoom.onTransitionEnd),x.params.zoomToggle&&x.on("doubleTap",x.zoom.toggleZoom)}},init:function(){x.zoom.attachEvents()},destroy:function(){x.zoom.attachEvents(!0)}},x._plugins=[];for(var Y in x.plugins){var A=x.plugins[Y](x,x.params[Y]);A&&x._plugins.push(A)}return x.callPlugins=function(e){for(var a=0;a<x._plugins.length;a++)e in x._plugins[a]&&x._plugins[a][e](arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])},x.emitterEventListeners={},x.emit=function(e){x.params[e]&&x.params[e](arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);var a;if(x.emitterEventListeners[e])for(a=0;a<x.emitterEventListeners[e].length;a++)x.emitterEventListeners[e][a](arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]);x.callPlugins&&x.callPlugins(e,arguments[1],arguments[2],arguments[3],arguments[4],arguments[5])},x.on=function(e,a){return e=u(e),x.emitterEventListeners[e]||(x.emitterEventListeners[e]=[]),x.emitterEventListeners[e].push(a),x},x.off=function(e,a){var t;if(e=u(e),void 0===a)return x.emitterEventListeners[e]=[],x;if(x.emitterEventListeners[e]&&0!==x.emitterEventListeners[e].length){for(t=0;t<x.emitterEventListeners[e].length;t++)x.emitterEventListeners[e][t]===a&&x.emitterEventListeners[e].splice(t,1);return x}},x.once=function(e,a){e=u(e);var t=function(){a(arguments[0],arguments[1],arguments[2],arguments[3],arguments[4]),x.off(e,t)};return x.on(e,t),x},x.a11y={makeFocusable:function(e){return e.attr("tabIndex","0"),e},addRole:function(e,a){return e.attr("role",a),e},addLabel:function(e,a){return e.attr("aria-label",a),e},disable:function(e){return e.attr("aria-disabled",!0),e},enable:function(e){return e.attr("aria-disabled",!1),e},onEnterKey:function(a){13===a.keyCode&&(e(a.target).is(x.params.nextButton)?(x.onClickNext(a),x.isEnd?x.a11y.notify(x.params.lastSlideMessage):x.a11y.notify(x.params.nextSlideMessage)):e(a.target).is(x.params.prevButton)&&(x.onClickPrev(a),x.isBeginning?x.a11y.notify(x.params.firstSlideMessage):x.a11y.notify(x.params.prevSlideMessage)),e(a.target).is("."+x.params.bulletClass)&&e(a.target)[0].click())},liveRegion:e('<span class="'+x.params.notificationClass+'" aria-live="assertive" aria-atomic="true"></span>'),notify:function(e){var a=x.a11y.liveRegion;0!==a.length&&(a.html(""),a.html(e))},init:function(){x.params.nextButton&&x.nextButton&&x.nextButton.length>0&&(x.a11y.makeFocusable(x.nextButton),x.a11y.addRole(x.nextButton,"button"),x.a11y.addLabel(x.nextButton,x.params.nextSlideMessage)),x.params.prevButton&&x.prevButton&&x.prevButton.length>0&&(x.a11y.makeFocusable(x.prevButton),x.a11y.addRole(x.prevButton,"button"),x.a11y.addLabel(x.prevButton,x.params.prevSlideMessage)),e(x.container).append(x.a11y.liveRegion)},initPagination:function(){x.params.pagination&&x.params.paginationClickable&&x.bullets&&x.bullets.length&&x.bullets.each(function(){var a=e(this);x.a11y.makeFocusable(a),x.a11y.addRole(a,"button"),x.a11y.addLabel(a,x.params.paginationBulletMessage.replace(/{{index}}/,a.index()+1))})},destroy:function(){x.a11y.liveRegion&&x.a11y.liveRegion.length>0&&x.a11y.liveRegion.remove()}},x.init=function(){x.params.loop&&x.createLoop(),x.updateContainerSize(),x.updateSlidesSize(),x.updatePagination(),x.params.scrollbar&&x.scrollbar&&(x.scrollbar.set(),x.params.scrollbarDraggable&&x.scrollbar.enableDraggable()),"slide"!==x.params.effect&&x.effects[x.params.effect]&&(x.params.loop||x.updateProgress(),x.effects[x.params.effect].setTranslate()),x.params.loop?x.slideTo(x.params.initialSlide+x.loopedSlides,0,x.params.runCallbacksOnInit):(x.slideTo(x.params.initialSlide,0,x.params.runCallbacksOnInit),0===x.params.initialSlide&&(x.parallax&&x.params.parallax&&x.parallax.setTranslate(),x.lazy&&x.params.lazyLoading&&(x.lazy.load(),x.lazy.initialImageLoaded=!0))),x.attachEvents(),x.params.observer&&x.support.observer&&x.initObservers(),x.params.preloadImages&&!x.params.lazyLoading&&x.preloadImages(),x.params.zoom&&x.zoom&&x.zoom.init(),x.params.autoplay&&x.startAutoplay(),x.params.keyboardControl&&x.enableKeyboardControl&&x.enableKeyboardControl(),x.params.mousewheelControl&&x.enableMousewheelControl&&x.enableMousewheelControl(),x.params.hashnavReplaceState&&(x.params.replaceState=x.params.hashnavReplaceState),x.params.history&&x.history&&x.history.init(),x.params.hashnav&&x.hashnav&&x.hashnav.init(),x.params.a11y&&x.a11y&&x.a11y.init(),x.emit("onInit",x)},x.cleanupStyles=function(){x.container.removeClass(x.classNames.join(" ")).removeAttr("style"),x.wrapper.removeAttr("style"),x.slides&&x.slides.length&&x.slides.removeClass([x.params.slideVisibleClass,x.params.slideActiveClass,x.params.slideNextClass,x.params.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-column").removeAttr("data-swiper-row"),x.paginationContainer&&x.paginationContainer.length&&x.paginationContainer.removeClass(x.params.paginationHiddenClass),x.bullets&&x.bullets.length&&x.bullets.removeClass(x.params.bulletActiveClass),x.params.prevButton&&e(x.params.prevButton).removeClass(x.params.buttonDisabledClass),x.params.nextButton&&e(x.params.nextButton).removeClass(x.params.buttonDisabledClass),x.params.scrollbar&&x.scrollbar&&(x.scrollbar.track&&x.scrollbar.track.length&&x.scrollbar.track.removeAttr("style"),x.scrollbar.drag&&x.scrollbar.drag.length&&x.scrollbar.drag.removeAttr("style"))},x.destroy=function(e,a){x.detachEvents(),x.stopAutoplay(),x.params.scrollbar&&x.scrollbar&&x.params.scrollbarDraggable&&x.scrollbar.disableDraggable(),x.params.loop&&x.destroyLoop(),a&&x.cleanupStyles(),x.disconnectObservers(),x.params.zoom&&x.zoom&&x.zoom.destroy(),x.params.keyboardControl&&x.disableKeyboardControl&&x.disableKeyboardControl(),x.params.mousewheelControl&&x.disableMousewheelControl&&x.disableMousewheelControl(),x.params.a11y&&x.a11y&&x.a11y.destroy(),x.params.history&&!x.params.replaceState&&window.removeEventListener("popstate",x.history.setHistoryPopState),x.params.hashnav&&x.hashnav&&x.hashnav.destroy(),x.emit("onDestroy"),e!==!1&&(x=null)},x.init(),x}};a.prototype={isSafari:function(){var e=window.navigator.userAgent.toLowerCase();return e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0}(),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},browser:{ie:window.navigator.pointerEnabled||window.navigator.msPointerEnabled,ieTouch:window.navigator.msPointerEnabled&&window.navigator.msMaxTouchPoints>1||window.navigator.pointerEnabled&&window.navigator.maxTouchPoints>1,lteIE9:function(){var e=document.createElement("div");return e.innerHTML="<!--[if lte IE 9]><i></i><![endif]-->",1===e.getElementsByTagName("i").length}()},device:function(){var e=window.navigator.userAgent,a=e.match(/(Android);?[\s\/]+([\d.]+)?/),t=e.match(/(iPad).*OS\s([\d_]+)/),s=e.match(/(iPod)(.*OS\s([\d_]+))?/),r=!t&&e.match(/(iPhone\sOS|iOS)\s([\d_]+)/);return{ios:t||r||s,android:a}}(),support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){var e=document.createElement("div").style;return"webkitPerspective"in e||"MozPerspective"in e||"OPerspective"in e||"MsPerspective"in e||"perspective"in e}(),flexbox:function(){for(var e=document.createElement("div").style,a="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),t=0;t<a.length;t++)if(a[t]in e)return!0}(),observer:function(){return"MutationObserver"in window||"WebkitMutationObserver"in window}(),passiveListener:function(){var e=!1;try{var a=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("testPassiveListener",null,a)}catch(e){}return e}(),gestures:function(){return"ongesturestart"in window}()},plugins:{}};for(var t=["jQuery","Zepto","Dom7"],s=0;s<t.length;s++)window[t[s]]&&function(e){e.fn.swiper=function(t){var s;return e(this).each(function(){var e=new a(this,t);s||(s=e)}),s}}(window[t[s]]);var r;r="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7,r&&("transitionEnd"in r.fn||(r.fn.transitionEnd=function(e){function a(i){if(i.target===this)for(e.call(this,i),t=0;t<s.length;t++)r.off(s[t],a)}var t,s=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],r=this;if(e)for(t=0;t<s.length;t++)r.on(s[t],a);return this}),"transform"in r.fn||(r.fn.transform=function(e){for(var a=0;a<this.length;a++){var t=this[a].style;t.webkitTransform=t.MsTransform=t.msTransform=t.MozTransform=t.OTransform=t.transform=e}return this}),"transition"in r.fn||(r.fn.transition=function(e){"string"!=typeof e&&(e+="ms");for(var a=0;a<this.length;a++){var t=this[a].style;t.webkitTransitionDuration=t.MsTransitionDuration=t.msTransitionDuration=t.MozTransitionDuration=t.OTransitionDuration=t.transitionDuration=e}return this}),"outerWidth"in r.fn||(r.fn.outerWidth=function(e){return this.length>0?e?this[0].offsetWidth+parseFloat(this.css("margin-right"))+parseFloat(this.css("margin-left")):this[0].offsetWidth:null})),window.Swiper=a}(),"undefined"!=typeof module?module.exports=window.Swiper:"function"==typeof define&&define.amd&&define([],function(){"use strict";return window.Swiper});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Swiper=t()}(this,function(){"use strict";var e="undefined"==typeof document?{body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},location:{hash:""}}:document,t="undefined"==typeof window?{document:e,navigator:{userAgent:""},location:{},history:{},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){}}:window,i=function(e){for(var t=0;t<e.length;t+=1)this[t]=e[t];return this.length=e.length,this};function s(s,a){var r=[],n=0;if(s&&!a&&s instanceof i)return s;if(s)if("string"==typeof s){var o,l,d=s.trim();if(d.indexOf("<")>=0&&d.indexOf(">")>=0){var h="div";for(0===d.indexOf("<li")&&(h="ul"),0===d.indexOf("<tr")&&(h="tbody"),0!==d.indexOf("<td")&&0!==d.indexOf("<th")||(h="tr"),0===d.indexOf("<tbody")&&(h="table"),0===d.indexOf("<option")&&(h="select"),(l=e.createElement(h)).innerHTML=d,n=0;n<l.childNodes.length;n+=1)r.push(l.childNodes[n])}else for(o=a||"#"!==s[0]||s.match(/[ .<>:~]/)?(a||e).querySelectorAll(s.trim()):[e.getElementById(s.trim().split("#")[1])],n=0;n<o.length;n+=1)o[n]&&r.push(o[n])}else if(s.nodeType||s===t||s===e)r.push(s);else if(s.length>0&&s[0].nodeType)for(n=0;n<s.length;n+=1)r.push(s[n]);return new i(r)}function a(e){for(var t=[],i=0;i<e.length;i+=1)-1===t.indexOf(e[i])&&t.push(e[i]);return t}s.fn=i.prototype,s.Class=i,s.Dom7=i;var r={addClass:function(e){if(void 0===e)return this;for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.add(t[i]);return this},removeClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.remove(t[i]);return this},hasClass:function(e){return!!this[0]&&this[0].classList.contains(e)},toggleClass:function(e){for(var t=e.split(" "),i=0;i<t.length;i+=1)for(var s=0;s<this.length;s+=1)void 0!==this[s].classList&&this[s].classList.toggle(t[i]);return this},attr:function(e,t){var i=arguments;if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(var s=0;s<this.length;s+=1)if(2===i.length)this[s].setAttribute(e,t);else for(var a in e)this[s][a]=e[a],this[s].setAttribute(a,e[a]);return this},removeAttr:function(e){for(var t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},data:function(e,t){var i;if(void 0!==t){for(var s=0;s<this.length;s+=1)(i=this[s]).dom7ElementDataStorage||(i.dom7ElementDataStorage={}),i.dom7ElementDataStorage[e]=t;return this}if(i=this[0]){if(i.dom7ElementDataStorage&&e in i.dom7ElementDataStorage)return i.dom7ElementDataStorage[e];var a=i.getAttribute("data-"+e);return a||void 0}},transform:function(e){for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransform=e,i.transform=e}return this},transition:function(e){"string"!=typeof e&&(e+="ms");for(var t=0;t<this.length;t+=1){var i=this[t].style;i.webkitTransitionDuration=e,i.transitionDuration=e}return this},on:function(){for(var e,t=[],i=arguments.length;i--;)t[i]=arguments[i];var a=t[0],r=t[1],n=t[2],o=t[3];function l(e){var t=e.target;if(t){var i=e.target.dom7EventData||[];if(i.indexOf(e)<0&&i.unshift(e),s(t).is(r))n.apply(t,i);else for(var a=s(t).parents(),o=0;o<a.length;o+=1)s(a[o]).is(r)&&n.apply(a[o],i)}}function d(e){var t=e&&e.target?e.target.dom7EventData||[]:[];t.indexOf(e)<0&&t.unshift(e),n.apply(this,t)}"function"==typeof t[1]&&(a=(e=t)[0],n=e[1],o=e[2],r=void 0),o||(o=!1);for(var h,p=a.split(" "),c=0;c<this.length;c+=1){var u=this[c];if(r)for(h=0;h<p.length;h+=1){var v=p[h];u.dom7LiveListeners||(u.dom7LiveListeners={}),u.dom7LiveListeners[v]||(u.dom7LiveListeners[v]=[]),u.dom7LiveListeners[v].push({listener:n,proxyListener:l}),u.addEventListener(v,l,o)}else for(h=0;h<p.length;h+=1){var f=p[h];u.dom7Listeners||(u.dom7Listeners={}),u.dom7Listeners[f]||(u.dom7Listeners[f]=[]),u.dom7Listeners[f].push({listener:n,proxyListener:d}),u.addEventListener(f,d,o)}}return this},off:function(){for(var e,t=[],i=arguments.length;i--;)t[i]=arguments[i];var s=t[0],a=t[1],r=t[2],n=t[3];"function"==typeof t[1]&&(s=(e=t)[0],r=e[1],n=e[2],a=void 0),n||(n=!1);for(var o=s.split(" "),l=0;l<o.length;l+=1)for(var d=o[l],h=0;h<this.length;h+=1){var p=this[h],c=void 0;if(!a&&p.dom7Listeners?c=p.dom7Listeners[d]:a&&p.dom7LiveListeners&&(c=p.dom7LiveListeners[d]),c&&c.length)for(var u=c.length-1;u>=0;u-=1){var v=c[u];r&&v.listener===r?(p.removeEventListener(d,v.proxyListener,n),c.splice(u,1)):r||(p.removeEventListener(d,v.proxyListener,n),c.splice(u,1))}}return this},trigger:function(){for(var i=[],s=arguments.length;s--;)i[s]=arguments[s];for(var a=i[0].split(" "),r=i[1],n=0;n<a.length;n+=1)for(var o=a[n],l=0;l<this.length;l+=1){var d=this[l],h=void 0;try{h=new t.CustomEvent(o,{detail:r,bubbles:!0,cancelable:!0})}catch(t){(h=e.createEvent("Event")).initEvent(o,!0,!0),h.detail=r}d.dom7EventData=i.filter(function(e,t){return t>0}),d.dispatchEvent(h),d.dom7EventData=[],delete d.dom7EventData}return this},transitionEnd:function(e){var t,i=["webkitTransitionEnd","transitionend"],s=this;function a(r){if(r.target===this)for(e.call(this,r),t=0;t<i.length;t+=1)s.off(i[t],a)}if(e)for(t=0;t<i.length;t+=1)s.on(i[t],a);return this},outerWidth:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue("margin-right"))+parseFloat(t.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue("margin-top"))+parseFloat(t.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},offset:function(){if(this.length>0){var i=this[0],s=i.getBoundingClientRect(),a=e.body,r=i.clientTop||a.clientTop||0,n=i.clientLeft||a.clientLeft||0,o=i===t?t.scrollY:i.scrollTop,l=i===t?t.scrollX:i.scrollLeft;return{top:s.top+o-r,left:s.left+l-n}}return null},css:function(e,i){var s;if(1===arguments.length){if("string"!=typeof e){for(s=0;s<this.length;s+=1)for(var a in e)this[s].style[a]=e[a];return this}if(this[0])return t.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(s=0;s<this.length;s+=1)this[s].style[e]=i;return this}return this},each:function(e){if(!e)return this;for(var t=0;t<this.length;t+=1)if(!1===e.call(this[t],t,this[t]))return this;return this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:void 0;for(var t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(var t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(a){var r,n,o=this[0];if(!o||void 0===a)return!1;if("string"==typeof a){if(o.matches)return o.matches(a);if(o.webkitMatchesSelector)return o.webkitMatchesSelector(a);if(o.msMatchesSelector)return o.msMatchesSelector(a);for(r=s(a),n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}if(a===e)return o===e;if(a===t)return o===t;if(a.nodeType||a instanceof i){for(r=a.nodeType?[a]:a,n=0;n<r.length;n+=1)if(r[n]===o)return!0;return!1}return!1},index:function(){var e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;var t,s=this.length;return new i(e>s-1?[]:e<0?(t=s+e)<0?[]:[this[t]]:[this[e]])},append:function(){for(var t,s=[],a=arguments.length;a--;)s[a]=arguments[a];for(var r=0;r<s.length;r+=1){t=s[r];for(var n=0;n<this.length;n+=1)if("string"==typeof t){var o=e.createElement("div");for(o.innerHTML=t;o.firstChild;)this[n].appendChild(o.firstChild)}else if(t instanceof i)for(var l=0;l<t.length;l+=1)this[n].appendChild(t[l]);else this[n].appendChild(t)}return this},prepend:function(t){var s,a;for(s=0;s<this.length;s+=1)if("string"==typeof t){var r=e.createElement("div");for(r.innerHTML=t,a=r.childNodes.length-1;a>=0;a-=1)this[s].insertBefore(r.childNodes[a],this[s].childNodes[0])}else if(t instanceof i)for(a=0;a<t.length;a+=1)this[s].insertBefore(t[a],this[s].childNodes[0]);else this[s].insertBefore(t,this[s].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&s(this[0].nextElementSibling).is(e)?new i([this[0].nextElementSibling]):new i([]):this[0].nextElementSibling?new i([this[0].nextElementSibling]):new i([]):new i([])},nextAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.nextElementSibling;){var r=a.nextElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},prev:function(e){if(this.length>0){var t=this[0];return e?t.previousElementSibling&&s(t.previousElementSibling).is(e)?new i([t.previousElementSibling]):new i([]):t.previousElementSibling?new i([t.previousElementSibling]):new i([])}return new i([])},prevAll:function(e){var t=[],a=this[0];if(!a)return new i([]);for(;a.previousElementSibling;){var r=a.previousElementSibling;e?s(r).is(e)&&t.push(r):t.push(r),a=r}return new i(t)},parent:function(e){for(var t=[],i=0;i<this.length;i+=1)null!==this[i].parentNode&&(e?s(this[i].parentNode).is(e)&&t.push(this[i].parentNode):t.push(this[i].parentNode));return s(a(t))},parents:function(e){for(var t=[],i=0;i<this.length;i+=1)for(var r=this[i].parentNode;r;)e?s(r).is(e)&&t.push(r):t.push(r),r=r.parentNode;return s(a(t))},closest:function(e){var t=this;return void 0===e?new i([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){for(var t=[],s=0;s<this.length;s+=1)for(var a=this[s].querySelectorAll(e),r=0;r<a.length;r+=1)t.push(a[r]);return new i(t)},children:function(e){for(var t=[],r=0;r<this.length;r+=1)for(var n=this[r].childNodes,o=0;o<n.length;o+=1)e?1===n[o].nodeType&&s(n[o]).is(e)&&t.push(n[o]):1===n[o].nodeType&&t.push(n[o]);return new i(a(t))},remove:function(){for(var e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this},add:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,a;for(i=0;i<e.length;i+=1){var r=s(e[i]);for(a=0;a<r.length;a+=1)this[this.length]=r[a],this.length+=1}return this},styles:function(){return this[0]?t.getComputedStyle(this[0],null):{}}};Object.keys(r).forEach(function(e){s.fn[e]=r[e]});var n,o,l,d={deleteProps:function(e){var t=e;Object.keys(t).forEach(function(e){try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}})},nextTick:function(e,t){return void 0===t&&(t=0),setTimeout(e,t)},now:function(){return Date.now()},getTranslate:function(e,i){var s,a,r;void 0===i&&(i="x");var n=t.getComputedStyle(e,null);return t.WebKitCSSMatrix?((a=n.transform||n.webkitTransform).split(",").length>6&&(a=a.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),r=new t.WebKitCSSMatrix("none"===a?"":a)):s=(r=n.MozTransform||n.OTransform||n.MsTransform||n.msTransform||n.transform||n.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,")).toString().split(","),"x"===i&&(a=t.WebKitCSSMatrix?r.m41:16===s.length?parseFloat(s[12]):parseFloat(s[4])),"y"===i&&(a=t.WebKitCSSMatrix?r.m42:16===s.length?parseFloat(s[13]):parseFloat(s[5])),a||0},parseUrlQuery:function(e){var i,s,a,r,n={},o=e||t.location.href;if("string"==typeof o&&o.length)for(r=(s=(o=o.indexOf("?")>-1?o.replace(/\S*\?/,""):"").split("&").filter(function(e){return""!==e})).length,i=0;i<r;i+=1)a=s[i].replace(/#\S+/g,"").split("="),n[decodeURIComponent(a[0])]=void 0===a[1]?void 0:decodeURIComponent(a[1])||"";return n},isObject:function(e){return"object"==typeof e&&null!==e&&e.constructor&&e.constructor===Object},extend:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];for(var i=Object(e[0]),s=1;s<e.length;s+=1){var a=e[s];if(void 0!==a&&null!==a)for(var r=Object.keys(Object(a)),n=0,o=r.length;n<o;n+=1){var l=r[n],h=Object.getOwnPropertyDescriptor(a,l);void 0!==h&&h.enumerable&&(d.isObject(i[l])&&d.isObject(a[l])?d.extend(i[l],a[l]):!d.isObject(i[l])&&d.isObject(a[l])?(i[l]={},d.extend(i[l],a[l])):i[l]=a[l])}}return i}},h=(l=e.createElement("div"),{touch:t.Modernizr&&!0===t.Modernizr.touch||!!("ontouchstart"in t||t.DocumentTouch&&e instanceof t.DocumentTouch),pointerEvents:!(!t.navigator.pointerEnabled&&!t.PointerEvent),prefixedPointerEvents:!!t.navigator.msPointerEnabled,transition:(o=l.style,"transition"in o||"webkitTransition"in o||"MozTransition"in o),transforms3d:t.Modernizr&&!0===t.Modernizr.csstransforms3d||(n=l.style,"webkitPerspective"in n||"MozPerspective"in n||"OPerspective"in n||"MsPerspective"in n||"perspective"in n),flexbox:function(){for(var e=l.style,t="alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient".split(" "),i=0;i<t.length;i+=1)if(t[i]in e)return!0;return!1}(),observer:"MutationObserver"in t||"WebkitMutationObserver"in t,passiveListener:function(){var e=!1;try{var i=Object.defineProperty({},"passive",{get:function(){e=!0}});t.addEventListener("testPassiveListener",null,i)}catch(e){}return e}(),gestures:"ongesturestart"in t}),p=function(e){void 0===e&&(e={});var t=this;t.params=e,t.eventsListeners={},t.params&&t.params.on&&Object.keys(t.params.on).forEach(function(e){t.on(e,t.params.on[e])})},c={components:{configurable:!0}};p.prototype.on=function(e,t,i){var s=this;if("function"!=typeof t)return s;var a=i?"unshift":"push";return e.split(" ").forEach(function(e){s.eventsListeners[e]||(s.eventsListeners[e]=[]),s.eventsListeners[e][a](t)}),s},p.prototype.once=function(e,t,i){var s=this;if("function"!=typeof t)return s;return s.on(e,function i(){for(var a=[],r=arguments.length;r--;)a[r]=arguments[r];t.apply(s,a),s.off(e,i)},i)},p.prototype.off=function(e,t){var i=this;return i.eventsListeners?(e.split(" ").forEach(function(e){void 0===t?i.eventsListeners[e]=[]:i.eventsListeners[e].forEach(function(s,a){s===t&&i.eventsListeners[e].splice(a,1)})}),i):i},p.prototype.emit=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var i,s,a,r=this;return r.eventsListeners?("string"==typeof e[0]||Array.isArray(e[0])?(i=e[0],s=e.slice(1,e.length),a=r):(i=e[0].events,s=e[0].data,a=e[0].context||r),(Array.isArray(i)?i:i.split(" ")).forEach(function(e){if(r.eventsListeners&&r.eventsListeners[e]){var t=[];r.eventsListeners[e].forEach(function(e){t.push(e)}),t.forEach(function(e){e.apply(a,s)})}}),r):r},p.prototype.useModulesParams=function(e){var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i];s.params&&d.extend(e,s.params)})},p.prototype.useModules=function(e){void 0===e&&(e={});var t=this;t.modules&&Object.keys(t.modules).forEach(function(i){var s=t.modules[i],a=e[i]||{};s.instance&&Object.keys(s.instance).forEach(function(e){var i=s.instance[e];t[e]="function"==typeof i?i.bind(t):i}),s.on&&t.on&&Object.keys(s.on).forEach(function(e){t.on(e,s.on[e])}),s.create&&s.create.bind(t)(a)})},c.components.set=function(e){this.use&&this.use(e)},p.installModule=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;s.prototype.modules||(s.prototype.modules={});var a=e.name||Object.keys(s.prototype.modules).length+"_"+d.now();return s.prototype.modules[a]=e,e.proto&&Object.keys(e.proto).forEach(function(t){s.prototype[t]=e.proto[t]}),e.static&&Object.keys(e.static).forEach(function(t){s[t]=e.static[t]}),e.install&&e.install.apply(s,t),s},p.use=function(e){for(var t=[],i=arguments.length-1;i-- >0;)t[i]=arguments[i+1];var s=this;return Array.isArray(e)?(e.forEach(function(e){return s.installModule(e)}),s):s.installModule.apply(s,[e].concat(t))},Object.defineProperties(p,c);var u={updateSize:function(){var e,t,i=this.$el;e=void 0!==this.params.width?this.params.width:i[0].clientWidth,t=void 0!==this.params.height?this.params.height:i[0].clientHeight,0===e&&this.isHorizontal()||0===t&&this.isVertical()||(e=e-parseInt(i.css("padding-left"),10)-parseInt(i.css("padding-right"),10),t=t-parseInt(i.css("padding-top"),10)-parseInt(i.css("padding-bottom"),10),d.extend(this,{width:e,height:t,size:this.isHorizontal()?e:t}))},updateSlides:function(){var e=this.params,i=this.$wrapperEl,s=this.size,a=this.rtlTranslate,r=this.wrongRTL,n=this.virtual&&e.virtual.enabled,o=n?this.virtual.slides.length:this.slides.length,l=i.children("."+this.params.slideClass),p=n?this.virtual.slides.length:l.length,c=[],u=[],v=[],f=e.slidesOffsetBefore;"function"==typeof f&&(f=e.slidesOffsetBefore.call(this));var m=e.slidesOffsetAfter;"function"==typeof m&&(m=e.slidesOffsetAfter.call(this));var g=this.snapGrid.length,b=this.snapGrid.length,w=e.spaceBetween,y=-f,x=0,E=0;if(void 0!==s){var T,S;"string"==typeof w&&w.indexOf("%")>=0&&(w=parseFloat(w.replace("%",""))/100*s),this.virtualSize=-w,a?l.css({marginLeft:"",marginTop:""}):l.css({marginRight:"",marginBottom:""}),e.slidesPerColumn>1&&(T=Math.floor(p/e.slidesPerColumn)===p/this.params.slidesPerColumn?p:Math.ceil(p/e.slidesPerColumn)*e.slidesPerColumn,"auto"!==e.slidesPerView&&"row"===e.slidesPerColumnFill&&(T=Math.max(T,e.slidesPerView*e.slidesPerColumn)));for(var C,M=e.slidesPerColumn,z=T/M,k=z-(e.slidesPerColumn*z-p),P=0;P<p;P+=1){S=0;var $=l.eq(P);if(e.slidesPerColumn>1){var L=void 0,I=void 0,D=void 0;"column"===e.slidesPerColumnFill?(D=P-(I=Math.floor(P/M))*M,(I>k||I===k&&D===M-1)&&(D+=1)>=M&&(D=0,I+=1),L=I+D*T/M,$.css({"-webkit-box-ordinal-group":L,"-moz-box-ordinal-group":L,"-ms-flex-order":L,"-webkit-order":L,order:L})):I=P-(D=Math.floor(P/z))*z,$.css("margin-"+(this.isHorizontal()?"top":"left"),0!==D&&e.spaceBetween&&e.spaceBetween+"px").attr("data-swiper-column",I).attr("data-swiper-row",D)}if("none"!==$.css("display")){if("auto"===e.slidesPerView){var O=t.getComputedStyle($[0],null),A=$[0].style.transform,G=$[0].style.webkitTransform;A&&($[0].style.transform="none"),G&&($[0].style.webkitTransform="none"),S=this.isHorizontal()?$[0].getBoundingClientRect().width+parseFloat(O.getPropertyValue("margin-left"))+parseFloat(O.getPropertyValue("margin-right")):$[0].getBoundingClientRect().height+parseFloat(O.getPropertyValue("margin-top"))+parseFloat(O.getPropertyValue("margin-bottom")),A&&($[0].style.transform=A),G&&($[0].style.webkitTransform=G),e.roundLengths&&(S=Math.floor(S))}else S=(s-(e.slidesPerView-1)*w)/e.slidesPerView,e.roundLengths&&(S=Math.floor(S)),l[P]&&(this.isHorizontal()?l[P].style.width=S+"px":l[P].style.height=S+"px");l[P]&&(l[P].swiperSlideSize=S),v.push(S),e.centeredSlides?(y=y+S/2+x/2+w,0===x&&0!==P&&(y=y-s/2-w),0===P&&(y=y-s/2-w),Math.abs(y)<.001&&(y=0),e.roundLengths&&(y=Math.floor(y)),E%e.slidesPerGroup==0&&c.push(y),u.push(y)):(e.roundLengths&&(y=Math.floor(y)),E%e.slidesPerGroup==0&&c.push(y),u.push(y),y=y+S+w),this.virtualSize+=S+w,x=S,E+=1}}if(this.virtualSize=Math.max(this.virtualSize,s)+m,a&&r&&("slide"===e.effect||"coverflow"===e.effect)&&i.css({width:this.virtualSize+e.spaceBetween+"px"}),h.flexbox&&!e.setWrapperSize||(this.isHorizontal()?i.css({width:this.virtualSize+e.spaceBetween+"px"}):i.css({height:this.virtualSize+e.spaceBetween+"px"})),e.slidesPerColumn>1&&(this.virtualSize=(S+e.spaceBetween)*T,this.virtualSize=Math.ceil(this.virtualSize/e.slidesPerColumn)-e.spaceBetween,this.isHorizontal()?i.css({width:this.virtualSize+e.spaceBetween+"px"}):i.css({height:this.virtualSize+e.spaceBetween+"px"}),e.centeredSlides)){C=[];for(var H=0;H<c.length;H+=1){var N=c[H];e.roundLengths&&(N=Math.floor(N)),c[H]<this.virtualSize+c[0]&&C.push(N)}c=C}if(!e.centeredSlides){C=[];for(var B=0;B<c.length;B+=1){var X=c[B];e.roundLengths&&(X=Math.floor(X)),c[B]<=this.virtualSize-s&&C.push(X)}c=C,Math.floor(this.virtualSize-s)-Math.floor(c[c.length-1])>1&&c.push(this.virtualSize-s)}0===c.length&&(c=[0]),0!==e.spaceBetween&&(this.isHorizontal()?a?l.css({marginLeft:w+"px"}):l.css({marginRight:w+"px"}):l.css({marginBottom:w+"px"})),d.extend(this,{slides:l,snapGrid:c,slidesGrid:u,slidesSizesGrid:v}),p!==o&&this.emit("slidesLengthChange"),c.length!==g&&(this.params.watchOverflow&&this.checkOverflow(),this.emit("snapGridLengthChange")),u.length!==b&&this.emit("slidesGridLengthChange"),(e.watchSlidesProgress||e.watchSlidesVisibility)&&this.updateSlidesOffset()}},updateAutoHeight:function(e){var t,i=[],s=0;if("number"==typeof e?this.setTransition(e):!0===e&&this.setTransition(this.params.speed),"auto"!==this.params.slidesPerView&&this.params.slidesPerView>1)for(t=0;t<Math.ceil(this.params.slidesPerView);t+=1){var a=this.activeIndex+t;if(a>this.slides.length)break;i.push(this.slides.eq(a)[0])}else i.push(this.slides.eq(this.activeIndex)[0]);for(t=0;t<i.length;t+=1)if(void 0!==i[t]){var r=i[t].offsetHeight;s=r>s?r:s}s&&this.$wrapperEl.css("height",s+"px")},updateSlidesOffset:function(){for(var e=this.slides,t=0;t<e.length;t+=1)e[t].swiperSlideOffset=this.isHorizontal()?e[t].offsetLeft:e[t].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this.params,i=this.slides,s=this.rtlTranslate;if(0!==i.length){void 0===i[0].swiperSlideOffset&&this.updateSlidesOffset();var a=-e;s&&(a=e),i.removeClass(t.slideVisibleClass);for(var r=0;r<i.length;r+=1){var n=i[r],o=(a+(t.centeredSlides?this.minTranslate():0)-n.swiperSlideOffset)/(n.swiperSlideSize+t.spaceBetween);if(t.watchSlidesVisibility){var l=-(a-n.swiperSlideOffset),d=l+this.slidesSizesGrid[r];(l>=0&&l<this.size||d>0&&d<=this.size||l<=0&&d>=this.size)&&i.eq(r).addClass(t.slideVisibleClass)}n.progress=s?-o:o}}},updateProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this.params,i=this.maxTranslate()-this.minTranslate(),s=this.progress,a=this.isBeginning,r=this.isEnd,n=a,o=r;0===i?(s=0,a=!0,r=!0):(a=(s=(e-this.minTranslate())/i)<=0,r=s>=1),d.extend(this,{progress:s,isBeginning:a,isEnd:r}),(t.watchSlidesProgress||t.watchSlidesVisibility)&&this.updateSlidesProgress(e),a&&!n&&this.emit("reachBeginning toEdge"),r&&!o&&this.emit("reachEnd toEdge"),(n&&!a||o&&!r)&&this.emit("fromEdge"),this.emit("progress",s)},updateSlidesClasses:function(){var e,t=this.slides,i=this.params,s=this.$wrapperEl,a=this.activeIndex,r=this.realIndex,n=this.virtual&&i.virtual.enabled;t.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=n?this.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+a+'"]'):t.eq(a)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+r+'"]').addClass(i.slideDuplicateActiveClass));var o=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===o.length&&(o=t.eq(0)).addClass(i.slideNextClass);var l=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===l.length&&(l=t.eq(-1)).addClass(i.slidePrevClass),i.loop&&(o.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),l.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,i=this.rtlTranslate?this.translate:-this.translate,s=this.slidesGrid,a=this.snapGrid,r=this.params,n=this.activeIndex,o=this.realIndex,l=this.snapIndex,h=e;if(void 0===h){for(var p=0;p<s.length;p+=1)void 0!==s[p+1]?i>=s[p]&&i<s[p+1]-(s[p+1]-s[p])/2?h=p:i>=s[p]&&i<s[p+1]&&(h=p+1):i>=s[p]&&(h=p);r.normalizeSlideIndex&&(h<0||void 0===h)&&(h=0)}if((t=a.indexOf(i)>=0?a.indexOf(i):Math.floor(h/r.slidesPerGroup))>=a.length&&(t=a.length-1),h!==n){var c=parseInt(this.slides.eq(h).attr("data-swiper-slide-index")||h,10);d.extend(this,{snapIndex:t,realIndex:c,previousIndex:n,activeIndex:h}),this.emit("activeIndexChange"),this.emit("snapIndexChange"),o!==c&&this.emit("realIndexChange"),this.emit("slideChange")}else t!==l&&(this.snapIndex=t,this.emit("snapIndexChange"))},updateClickedSlide:function(e){var t=this.params,i=s(e.target).closest("."+t.slideClass)[0],a=!1;if(i)for(var r=0;r<this.slides.length;r+=1)this.slides[r]===i&&(a=!0);if(!i||!a)return this.clickedSlide=void 0,void(this.clickedIndex=void 0);this.clickedSlide=i,this.virtual&&this.params.virtual.enabled?this.clickedIndex=parseInt(s(i).attr("data-swiper-slide-index"),10):this.clickedIndex=s(i).index(),t.slideToClickedSlide&&void 0!==this.clickedIndex&&this.clickedIndex!==this.activeIndex&&this.slideToClickedSlide()}};var v={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");var t=this.params,i=this.rtlTranslate,s=this.translate,a=this.$wrapperEl;if(t.virtualTranslate)return i?-s:s;var r=d.getTranslate(a[0],e);return i&&(r=-r),r||0},setTranslate:function(e,t){var i=this.rtlTranslate,s=this.params,a=this.$wrapperEl,r=this.progress,n=0,o=0;this.isHorizontal()?n=i?-e:e:o=e,s.roundLengths&&(n=Math.floor(n),o=Math.floor(o)),s.virtualTranslate||(h.transforms3d?a.transform("translate3d("+n+"px, "+o+"px, 0px)"):a.transform("translate("+n+"px, "+o+"px)")),this.previousTranslate=this.translate,this.translate=this.isHorizontal()?n:o;var l=this.maxTranslate()-this.minTranslate();(0===l?0:(e-this.minTranslate())/l)!==r&&this.updateProgress(e),this.emit("setTranslate",this.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]}};var f={setTransition:function(e,t){this.$wrapperEl.transition(e),this.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.params,a=this.previousIndex;s.autoHeight&&this.updateAutoHeight();var r=t;if(r||(r=i>a?"next":i<a?"prev":"reset"),this.emit("transitionStart"),e&&i!==a){if("reset"===r)return void this.emit("slideResetTransitionStart");this.emit("slideChangeTransitionStart"),"next"===r?this.emit("slideNextTransitionStart"):this.emit("slidePrevTransitionStart")}},transitionEnd:function(e,t){void 0===e&&(e=!0);var i=this.activeIndex,s=this.previousIndex;this.animating=!1,this.setTransition(0);var a=t;if(a||(a=i>s?"next":i<s?"prev":"reset"),this.emit("transitionEnd"),e&&i!==s){if("reset"===a)return void this.emit("slideResetTransitionEnd");this.emit("slideChangeTransitionEnd"),"next"===a?this.emit("slideNextTransitionEnd"):this.emit("slidePrevTransitionEnd")}}};var m={slideTo:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=this,r=e;r<0&&(r=0);var n=a.params,o=a.snapGrid,l=a.slidesGrid,d=a.previousIndex,p=a.activeIndex,c=a.rtlTranslate;if(a.animating&&n.preventIntercationOnTransition)return!1;var u=Math.floor(r/n.slidesPerGroup);u>=o.length&&(u=o.length-1),(p||n.initialSlide||0)===(d||0)&&i&&a.emit("beforeSlideChangeStart");var v,f=-o[u];if(a.updateProgress(f),n.normalizeSlideIndex)for(var m=0;m<l.length;m+=1)-Math.floor(100*f)>=Math.floor(100*l[m])&&(r=m);if(a.initialized&&r!==p){if(!a.allowSlideNext&&f<a.translate&&f<a.minTranslate())return!1;if(!a.allowSlidePrev&&f>a.translate&&f>a.maxTranslate()&&(p||0)!==r)return!1}return v=r>p?"next":r<p?"prev":"reset",c&&-f===a.translate||!c&&f===a.translate?(a.updateActiveIndex(r),n.autoHeight&&a.updateAutoHeight(),a.updateSlidesClasses(),"slide"!==n.effect&&a.setTranslate(f),"reset"!==v&&(a.transitionStart(i,v),a.transitionEnd(i,v)),!1):(0!==t&&h.transition?(a.setTransition(t),a.setTranslate(f),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,s),a.transitionStart(i,v),a.animating||(a.animating=!0,a.onSlideToWrapperTransitionEnd||(a.onSlideToWrapperTransitionEnd=function(e){a&&!a.destroyed&&e.target===this&&(a.$wrapperEl[0].removeEventListener("transitionend",a.onSlideToWrapperTransitionEnd),a.$wrapperEl[0].removeEventListener("webkitTransitionEnd",a.onSlideToWrapperTransitionEnd),a.transitionEnd(i,v))}),a.$wrapperEl[0].addEventListener("transitionend",a.onSlideToWrapperTransitionEnd),a.$wrapperEl[0].addEventListener("webkitTransitionEnd",a.onSlideToWrapperTransitionEnd))):(a.setTransition(0),a.setTranslate(f),a.updateActiveIndex(r),a.updateSlidesClasses(),a.emit("beforeTransitionStart",t,s),a.transitionStart(i,v),a.transitionEnd(i,v)),!0)},slideToLoop:function(e,t,i,s){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===i&&(i=!0);var a=e;return this.params.loop&&(a+=this.loopedSlides),this.slideTo(a,t,i,s)},slideNext:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating;return s.loop?!a&&(this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft,this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)):this.slideTo(this.activeIndex+s.slidesPerGroup,e,t,i)},slidePrev:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.params,a=this.animating,r=this.snapGrid,n=this.slidesGrid,o=this.rtlTranslate;if(s.loop){if(a)return!1;this.loopFix(),this._clientLeft=this.$wrapperEl[0].clientLeft}function l(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}var d,h=l(o?this.translate:-this.translate),p=r.map(function(e){return l(e)}),c=(n.map(function(e){return l(e)}),r[p.indexOf(h)],r[p.indexOf(h)-1]);return void 0!==c&&(d=n.indexOf(c))<0&&(d=this.activeIndex-1),this.slideTo(d,e,t,i)},slideReset:function(e,t,i){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,i)},slideToClosest:function(e,t,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);var s=this.activeIndex,a=Math.floor(s/this.params.slidesPerGroup);if(a<this.snapGrid.length-1){var r=this.rtlTranslate?this.translate:-this.translate,n=this.snapGrid[a];r-n>(this.snapGrid[a+1]-n)/2&&(s=this.params.slidesPerGroup)}return this.slideTo(s,e,t,i)},slideToClickedSlide:function(){var e,t=this,i=t.params,a=t.$wrapperEl,r="auto"===i.slidesPerView?t.slidesPerViewDynamic():i.slidesPerView,n=t.clickedIndex;if(i.loop){if(t.animating)return;e=parseInt(s(t.clickedSlide).attr("data-swiper-slide-index"),10),i.centeredSlides?n<t.loopedSlides-r/2||n>t.slides.length-t.loopedSlides+r/2?(t.loopFix(),n=a.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),d.nextTick(function(){t.slideTo(n)})):t.slideTo(n):n>t.slides.length-r?(t.loopFix(),n=a.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+i.slideDuplicateClass+")").eq(0).index(),d.nextTick(function(){t.slideTo(n)})):t.slideTo(n)}else t.slideTo(n)}};var g={loopCreate:function(){var t=this,i=t.params,a=t.$wrapperEl;a.children("."+i.slideClass+"."+i.slideDuplicateClass).remove();var r=a.children("."+i.slideClass);if(i.loopFillGroupWithBlank){var n=i.slidesPerGroup-r.length%i.slidesPerGroup;if(n!==i.slidesPerGroup){for(var o=0;o<n;o+=1){var l=s(e.createElement("div")).addClass(i.slideClass+" "+i.slideBlankClass);a.append(l)}r=a.children("."+i.slideClass)}}"auto"!==i.slidesPerView||i.loopedSlides||(i.loopedSlides=r.length),t.loopedSlides=parseInt(i.loopedSlides||i.slidesPerView,10),t.loopedSlides+=i.loopAdditionalSlides,t.loopedSlides>r.length&&(t.loopedSlides=r.length);var d=[],h=[];r.each(function(e,i){var a=s(i);e<t.loopedSlides&&h.push(i),e<r.length&&e>=r.length-t.loopedSlides&&d.push(i),a.attr("data-swiper-slide-index",e)});for(var p=0;p<h.length;p+=1)a.append(s(h[p].cloneNode(!0)).addClass(i.slideDuplicateClass));for(var c=d.length-1;c>=0;c-=1)a.prepend(s(d[c].cloneNode(!0)).addClass(i.slideDuplicateClass))},loopFix:function(){var e,t=this.params,i=this.activeIndex,s=this.slides,a=this.loopedSlides,r=this.allowSlidePrev,n=this.allowSlideNext,o=this.snapGrid,l=this.rtlTranslate;this.allowSlidePrev=!0,this.allowSlideNext=!0;var d=-o[i]-this.getTranslate();i<a?(e=s.length-3*a+i,e+=a,this.slideTo(e,0,!1,!0)&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d)):("auto"===t.slidesPerView&&i>=2*a||i>=s.length-a)&&(e=-s.length+i+a,e+=a,this.slideTo(e,0,!1,!0)&&0!==d&&this.setTranslate((l?-this.translate:this.translate)-d));this.allowSlidePrev=r,this.allowSlideNext=n},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,i=this.slides;e.children("."+t.slideClass+"."+t.slideDuplicateClass).remove(),i.removeAttr("data-swiper-slide-index")}};var b={setGrabCursor:function(e){if(!(h.touch||!this.params.simulateTouch||this.params.watchOverflow&&this.isLocked)){var t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){h.touch||this.params.watchOverflow&&this.isLocked||(this.el.style.cursor="")}};var w={appendSlide:function(e){var t=this.$wrapperEl,i=this.params;if(i.loop&&this.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s<e.length;s+=1)e[s]&&t.append(e[s]);else t.append(e);i.loop&&this.loopCreate(),i.observer&&h.observer||this.update()},prependSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&this.loopDestroy();var a=s+1;if("object"==typeof e&&"length"in e){for(var r=0;r<e.length;r+=1)e[r]&&i.prepend(e[r]);a=s+e.length}else i.prepend(e);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),this.slideTo(a,0,!1)},addSlide:function(e,t){var i=this.$wrapperEl,s=this.params,a=this.activeIndex;s.loop&&(a-=this.loopedSlides,this.loopDestroy(),this.slides=i.children("."+s.slideClass));var r=this.slides.length;if(e<=0)this.prependSlide(t);else if(e>=r)this.appendSlide(t);else{for(var n=a>e?a+1:a,o=[],l=r-1;l>=e;l-=1){var d=this.slides.eq(l);d.remove(),o.unshift(d)}if("object"==typeof t&&"length"in t){for(var p=0;p<t.length;p+=1)t[p]&&i.append(t[p]);n=a>e?a+t.length:a}else i.append(t);for(var c=0;c<o.length;c+=1)i.append(o[c]);s.loop&&this.loopCreate(),s.observer&&h.observer||this.update(),s.loop?this.slideTo(n+this.loopedSlides,0,!1):this.slideTo(n,0,!1)}},removeSlide:function(e){var t=this.params,i=this.$wrapperEl,s=this.activeIndex;t.loop&&(s-=this.loopedSlides,this.loopDestroy(),this.slides=i.children("."+t.slideClass));var a,r=s;if("object"==typeof e&&"length"in e){for(var n=0;n<e.length;n+=1)a=e[n],this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1);r=Math.max(r,0)}else a=e,this.slides[a]&&this.slides.eq(a).remove(),a<r&&(r-=1),r=Math.max(r,0);t.loop&&this.loopCreate(),t.observer&&h.observer||this.update(),t.loop?this.slideTo(r+this.loopedSlides,0,!1):this.slideTo(r,0,!1)},removeAllSlides:function(){for(var e=[],t=0;t<this.slides.length;t+=1)e.push(t);this.removeSlide(e)}},y=function(){var i=t.navigator.userAgent,s={ios:!1,android:!1,androidChrome:!1,desktop:!1,windows:!1,iphone:!1,ipod:!1,ipad:!1,cordova:t.cordova||t.phonegap,phonegap:t.cordova||t.phonegap},a=i.match(/(Windows Phone);?[\s\/]+([\d.]+)?/),r=i.match(/(Android);?[\s\/]+([\d.]+)?/),n=i.match(/(iPad).*OS\s([\d_]+)/),o=i.match(/(iPod)(.*OS\s([\d_]+))?/),l=!n&&i.match(/(iPhone\sOS|iOS)\s([\d_]+)/);if(a&&(s.os="windows",s.osVersion=a[2],s.windows=!0),r&&!a&&(s.os="android",s.osVersion=r[2],s.android=!0,s.androidChrome=i.toLowerCase().indexOf("chrome")>=0),(n||l||o)&&(s.os="ios",s.ios=!0),l&&!o&&(s.osVersion=l[2].replace(/_/g,"."),s.iphone=!0),n&&(s.osVersion=n[2].replace(/_/g,"."),s.ipad=!0),o&&(s.osVersion=o[3]?o[3].replace(/_/g,"."):null,s.iphone=!0),s.ios&&s.osVersion&&i.indexOf("Version/")>=0&&"10"===s.osVersion.split(".")[0]&&(s.osVersion=i.toLowerCase().split("version/")[1].split(" ")[0]),s.desktop=!(s.os||s.android||s.webView),s.webView=(l||n||o)&&i.match(/.*AppleWebKit(?!.*Safari)/i),s.os&&"ios"===s.os){var d=s.osVersion.split("."),h=e.querySelector('meta[name="viewport"]');s.minimalUi=!s.webView&&(o||l)&&(1*d[0]==7?1*d[1]>=1:1*d[0]>7)&&h&&h.getAttribute("content").indexOf("minimal-ui")>=0}return s.pixelRatio=t.devicePixelRatio||1,s}();function x(){var e=this.params,t=this.el;if(!t||0!==t.offsetWidth){e.breakpoints&&this.setBreakpoint();var i=this.allowSlideNext,s=this.allowSlidePrev,a=this.snapGrid;if(this.allowSlideNext=!0,this.allowSlidePrev=!0,this.updateSize(),this.updateSlides(),e.freeMode){var r=Math.min(Math.max(this.translate,this.maxTranslate()),this.minTranslate());this.setTranslate(r),this.updateActiveIndex(),this.updateSlidesClasses(),e.autoHeight&&this.updateAutoHeight()}else this.updateSlidesClasses(),("auto"===e.slidesPerView||e.slidesPerView>1)&&this.isEnd&&!this.params.centeredSlides?this.slideTo(this.slides.length-1,0,!1,!0):this.slideTo(this.activeIndex,0,!1,!0);this.allowSlidePrev=s,this.allowSlideNext=i,this.params.watchOverflow&&a!==this.snapGrid&&this.checkOverflow()}}var E={attachEvents:function(){var i=this.params,a=this.touchEvents,r=this.el,n=this.wrapperEl;this.onTouchStart=function(i){var a=this.touchEventsData,r=this.params,n=this.touches;if(!this.animating||!r.preventIntercationOnTransition){var o=i;if(o.originalEvent&&(o=o.originalEvent),a.isTouchEvent="touchstart"===o.type,(a.isTouchEvent||!("which"in o)||3!==o.which)&&(!a.isTouched||!a.isMoved))if(r.noSwiping&&s(o.target).closest(r.noSwipingSelector?r.noSwipingSelector:"."+r.noSwipingClass)[0])this.allowClick=!0;else if(!r.swipeHandler||s(o).closest(r.swipeHandler)[0]){n.currentX="touchstart"===o.type?o.targetTouches[0].pageX:o.pageX,n.currentY="touchstart"===o.type?o.targetTouches[0].pageY:o.pageY;var l=n.currentX,h=n.currentY;if(!y.ios||y.cordova||!r.iOSEdgeSwipeDetection||!(l<=r.iOSEdgeSwipeThreshold||l>=t.screen.width-r.iOSEdgeSwipeThreshold)){if(d.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),n.startX=l,n.startY=h,a.touchStartTime=d.now(),this.allowClick=!0,this.updateSize(),this.swipeDirection=void 0,r.threshold>0&&(a.allowThresholdMove=!1),"touchstart"!==o.type){var p=!0;s(o.target).is(a.formElements)&&(p=!1),e.activeElement&&s(e.activeElement).is(a.formElements)&&e.activeElement!==o.target&&e.activeElement.blur(),p&&this.allowTouchMove&&o.preventDefault()}this.emit("touchStart",o)}}}}.bind(this),this.onTouchMove=function(t){var i=this.touchEventsData,a=this.params,r=this.touches,n=this.rtlTranslate,o=t;if(o.originalEvent&&(o=o.originalEvent),i.isTouched){if(!i.isTouchEvent||"mousemove"!==o.type){var l="touchmove"===o.type?o.targetTouches[0].pageX:o.pageX,h="touchmove"===o.type?o.targetTouches[0].pageY:o.pageY;if(o.preventedByNestedSwiper)return r.startX=l,void(r.startY=h);if(!this.allowTouchMove)return this.allowClick=!1,void(i.isTouched&&(d.extend(r,{startX:l,startY:h,currentX:l,currentY:h}),i.touchStartTime=d.now()));if(i.isTouchEvent&&a.touchReleaseOnEdges&&!a.loop)if(this.isVertical()){if(h<r.startY&&this.translate<=this.maxTranslate()||h>r.startY&&this.translate>=this.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(l<r.startX&&this.translate<=this.maxTranslate()||l>r.startX&&this.translate>=this.minTranslate())return;if(i.isTouchEvent&&e.activeElement&&o.target===e.activeElement&&s(o.target).is(i.formElements))return i.isMoved=!0,void(this.allowClick=!1);if(i.allowTouchCallbacks&&this.emit("touchMove",o),!(o.targetTouches&&o.targetTouches.length>1)){r.currentX=l,r.currentY=h;var p,c=r.currentX-r.startX,u=r.currentY-r.startY;if(void 0===i.isScrolling&&(this.isHorizontal()&&r.currentY===r.startY||this.isVertical()&&r.currentX===r.startX?i.isScrolling=!1:c*c+u*u>=25&&(p=180*Math.atan2(Math.abs(u),Math.abs(c))/Math.PI,i.isScrolling=this.isHorizontal()?p>a.touchAngle:90-p>a.touchAngle)),i.isScrolling&&this.emit("touchMoveOpposite",o),"undefined"==typeof startMoving&&(r.currentX===r.startX&&r.currentY===r.startY||(i.startMoving=!0)),i.isScrolling)i.isTouched=!1;else if(i.startMoving){this.allowClick=!1,o.preventDefault(),a.touchMoveStopPropagation&&!a.nested&&o.stopPropagation(),i.isMoved||(a.loop&&this.loopFix(),i.startTranslate=this.getTranslate(),this.setTransition(0),this.animating&&this.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!a.grabCursor||!0!==this.allowSlideNext&&!0!==this.allowSlidePrev||this.setGrabCursor(!0),this.emit("sliderFirstMove",o)),this.emit("sliderMove",o),i.isMoved=!0;var v=this.isHorizontal()?c:u;r.diff=v,v*=a.touchRatio,n&&(v=-v),this.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;var f=!0,m=a.resistanceRatio;if(a.touchReleaseOnEdges&&(m=0),v>0&&i.currentTranslate>this.minTranslate()?(f=!1,a.resistance&&(i.currentTranslate=this.minTranslate()-1+Math.pow(-this.minTranslate()+i.startTranslate+v,m))):v<0&&i.currentTranslate<this.maxTranslate()&&(f=!1,a.resistance&&(i.currentTranslate=this.maxTranslate()+1-Math.pow(this.maxTranslate()-i.startTranslate-v,m))),f&&(o.preventedByNestedSwiper=!0),!this.allowSlideNext&&"next"===this.swipeDirection&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!this.allowSlidePrev&&"prev"===this.swipeDirection&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),a.threshold>0){if(!(Math.abs(v)>a.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);if(!i.allowThresholdMove)return i.allowThresholdMove=!0,r.startX=r.currentX,r.startY=r.currentY,i.currentTranslate=i.startTranslate,void(r.diff=this.isHorizontal()?r.currentX-r.startX:r.currentY-r.startY)}a.followFinger&&((a.freeMode||a.watchSlidesProgress||a.watchSlidesVisibility)&&(this.updateActiveIndex(),this.updateSlidesClasses()),a.freeMode&&(0===i.velocities.length&&i.velocities.push({position:r[this.isHorizontal()?"startX":"startY"],time:i.touchStartTime}),i.velocities.push({position:r[this.isHorizontal()?"currentX":"currentY"],time:d.now()})),this.updateProgress(i.currentTranslate),this.setTranslate(i.currentTranslate))}}}}else i.startMoving&&i.isScrolling&&this.emit("touchMoveOpposite",o)}.bind(this),this.onTouchEnd=function(e){var t=this,i=t.touchEventsData,s=t.params,a=t.touches,r=t.rtlTranslate,n=t.$wrapperEl,o=t.slidesGrid,l=t.snapGrid,h=e;if(h.originalEvent&&(h=h.originalEvent),i.allowTouchCallbacks&&t.emit("touchEnd",h),i.allowTouchCallbacks=!1,!i.isTouched)return i.isMoved&&s.grabCursor&&t.setGrabCursor(!1),i.isMoved=!1,void(i.startMoving=!1);s.grabCursor&&i.isMoved&&i.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=d.now(),u=c-i.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(h),t.emit("tap",h),u<300&&c-i.lastClickTime>300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),i.clickTimeout=d.nextTick(function(){t&&!t.destroyed&&t.emit("click",h)},300)),u<300&&c-i.lastClickTime<300&&(i.clickTimeout&&clearTimeout(i.clickTimeout),t.emit("doubleTap",h))),i.lastClickTime=d.now(),d.nextTick(function(){t.destroyed||(t.allowClick=!0)}),!i.isTouched||!i.isMoved||!t.swipeDirection||0===a.diff||i.currentTranslate===i.startTranslate)return i.isTouched=!1,i.isMoved=!1,void(i.startMoving=!1);if(i.isTouched=!1,i.isMoved=!1,i.startMoving=!1,p=s.followFinger?r?t.translate:-t.translate:-i.currentTranslate,s.freeMode){if(p<-t.minTranslate())return void t.slideTo(t.activeIndex);if(p>-t.maxTranslate())return void(t.slides.length<l.length?t.slideTo(l.length-1):t.slideTo(t.slides.length-1));if(s.freeModeMomentum){if(i.velocities.length>1){var v=i.velocities.pop(),f=i.velocities.pop(),m=v.position-f.position,g=v.time-f.time;t.velocity=m/g,t.velocity/=2,Math.abs(t.velocity)<s.freeModeMinimumVelocity&&(t.velocity=0),(g>150||d.now()-v.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=s.freeModeMomentumVelocityRatio,i.velocities.length=0;var b=1e3*s.freeModeMomentumRatio,w=t.velocity*b,y=t.translate+w;r&&(y=-y);var x,E,T=!1,S=20*Math.abs(t.velocity)*s.freeModeMomentumBounceRatio;if(y<t.maxTranslate())s.freeModeMomentumBounce?(y+t.maxTranslate()<-S&&(y=t.maxTranslate()-S),x=t.maxTranslate(),T=!0,i.allowMomentumBounce=!0):y=t.maxTranslate(),s.loop&&s.centeredSlides&&(E=!0);else if(y>t.minTranslate())s.freeModeMomentumBounce?(y-t.minTranslate()>S&&(y=t.minTranslate()+S),x=t.minTranslate(),T=!0,i.allowMomentumBounce=!0):y=t.minTranslate(),s.loop&&s.centeredSlides&&(E=!0);else if(s.freeModeSticky){for(var C,M=0;M<l.length;M+=1)if(l[M]>-y){C=M;break}y=-(y=Math.abs(l[C]-y)<Math.abs(l[C-1]-y)||"next"===t.swipeDirection?l[C]:l[C-1])}if(E&&t.once("transitionEnd",function(){t.loopFix()}),0!==t.velocity)b=r?Math.abs((-y-t.translate)/t.velocity):Math.abs((y-t.translate)/t.velocity);else if(s.freeModeSticky)return void t.slideToClosest();s.freeModeMomentumBounce&&T?(t.updateProgress(x),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&i.allowMomentumBounce&&(t.emit("momentumBounce"),t.setTransition(s.speed),t.setTranslate(x),n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))})):t.velocity?(t.updateProgress(y),t.setTransition(b),t.setTranslate(y),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd(function(){t&&!t.destroyed&&t.transitionEnd()}))):t.updateProgress(y),t.updateActiveIndex(),t.updateSlidesClasses()}else if(s.freeModeSticky)return void t.slideToClosest();(!s.freeModeMomentum||u>=s.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var z=0,k=t.slidesSizesGrid[0],P=0;P<o.length;P+=s.slidesPerGroup)void 0!==o[P+s.slidesPerGroup]?p>=o[P]&&p<o[P+s.slidesPerGroup]&&(z=P,k=o[P+s.slidesPerGroup]-o[P]):p>=o[P]&&(z=P,k=o[o.length-1]-o[o.length-2]);var $=(p-o[z])/k;if(u>s.longSwipesMs){if(!s.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&($>=s.longSwipesRatio?t.slideTo(z+s.slidesPerGroup):t.slideTo(z)),"prev"===t.swipeDirection&&($>1-s.longSwipesRatio?t.slideTo(z+s.slidesPerGroup):t.slideTo(z))}else{if(!s.shortSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&t.slideTo(z+s.slidesPerGroup),"prev"===t.swipeDirection&&t.slideTo(z)}}}.bind(this),this.onClick=function(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}.bind(this);var o="container"===i.touchEventsTarget?r:n,l=!!i.nested;if(h.touch||!h.pointerEvents&&!h.prefixedPointerEvents){if(h.touch){var p=!("touchstart"!==a.start||!h.passiveListener||!i.passiveListeners)&&{passive:!0,capture:!1};o.addEventListener(a.start,this.onTouchStart,p),o.addEventListener(a.move,this.onTouchMove,h.passiveListener?{passive:!1,capture:l}:l),o.addEventListener(a.end,this.onTouchEnd,p)}(i.simulateTouch&&!y.ios&&!y.android||i.simulateTouch&&!h.touch&&y.ios)&&(o.addEventListener("mousedown",this.onTouchStart,!1),e.addEventListener("mousemove",this.onTouchMove,l),e.addEventListener("mouseup",this.onTouchEnd,!1))}else o.addEventListener(a.start,this.onTouchStart,!1),e.addEventListener(a.move,this.onTouchMove,l),e.addEventListener(a.end,this.onTouchEnd,!1);(i.preventClicks||i.preventClicksPropagation)&&o.addEventListener("click",this.onClick,!0),this.on(y.ios||y.android?"resize orientationchange observerUpdate":"resize observerUpdate",x,!0)},detachEvents:function(){var t=this.params,i=this.touchEvents,s=this.el,a=this.wrapperEl,r="container"===t.touchEventsTarget?s:a,n=!!t.nested;if(h.touch||!h.pointerEvents&&!h.prefixedPointerEvents){if(h.touch){var o=!("onTouchStart"!==i.start||!h.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(i.start,this.onTouchStart,o),r.removeEventListener(i.move,this.onTouchMove,n),r.removeEventListener(i.end,this.onTouchEnd,o)}(t.simulateTouch&&!y.ios&&!y.android||t.simulateTouch&&!h.touch&&y.ios)&&(r.removeEventListener("mousedown",this.onTouchStart,!1),e.removeEventListener("mousemove",this.onTouchMove,n),e.removeEventListener("mouseup",this.onTouchEnd,!1))}else r.removeEventListener(i.start,this.onTouchStart,!1),e.removeEventListener(i.move,this.onTouchMove,n),e.removeEventListener(i.end,this.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener("click",this.onClick,!0),this.off(y.ios||y.android?"resize orientationchange observerUpdate":"resize observerUpdate",x)}};var T={setBreakpoint:function(){var e=this.activeIndex,t=this.initialized,i=this.loopedSlides;void 0===i&&(i=0);var s=this.params,a=s.breakpoints;if(a&&(!a||0!==Object.keys(a).length)){var r=this.getBreakpoint(a);if(r&&this.currentBreakpoint!==r){var n=r in a?a[r]:this.originalParams,o=s.loop&&n.slidesPerView!==s.slidesPerView;d.extend(this.params,n),d.extend(this,{allowTouchMove:this.params.allowTouchMove,allowSlideNext:this.params.allowSlideNext,allowSlidePrev:this.params.allowSlidePrev}),this.currentBreakpoint=r,o&&t&&(this.loopDestroy(),this.loopCreate(),this.updateSlides(),this.slideTo(e-i+this.loopedSlides,0,!1)),this.emit("breakpoint",n)}}},getBreakpoint:function(e){if(e){var i=!1,s=[];Object.keys(e).forEach(function(e){s.push(e)}),s.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var a=0;a<s.length;a+=1){var r=s[a];r>=t.innerWidth&&!i&&(i=r)}return i||"max"}}},S=function(){return{isIE:!!t.navigator.userAgent.match(/Trident/g)||!!t.navigator.userAgent.match(/MSIE/g),isSafari:(e=t.navigator.userAgent.toLowerCase(),e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0),isUiWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(t.navigator.userAgent)};var e}();var C={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,preventIntercationOnTransition:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0},M={update:u,translate:v,transition:f,slide:m,loop:g,grabCursor:b,manipulation:w,events:E,breakpoints:T,checkOverflow:{checkOverflow:function(){var e=this.isLocked;this.isLocked=1===this.snapGrid.length,this.allowSlideNext=!this.isLocked,this.allowSlidePrev=!this.isLocked,e!==this.isLocked&&this.emit(this.isLocked?"lock":"unlock"),e&&e!==this.isLocked&&(this.isEnd=!1,this.navigation.update())}},classes:{addClasses:function(){var e=this.classNames,t=this.params,i=this.rtl,s=this.$el,a=[];a.push(t.direction),t.freeMode&&a.push("free-mode"),h.flexbox||a.push("no-flexbox"),t.autoHeight&&a.push("autoheight"),i&&a.push("rtl"),t.slidesPerColumn>1&&a.push("multirow"),y.android&&a.push("android"),y.ios&&a.push("ios"),S.isIE&&(h.pointerEvents||h.prefixedPointerEvents)&&a.push("wp8-"+t.direction),a.forEach(function(i){e.push(t.containerModifierClass+i)}),s.addClass(e.join(" "))},removeClasses:function(){var e=this.$el,t=this.classNames;e.removeClass(t.join(" "))}},images:{loadImage:function(e,i,s,a,r,n){var o;function l(){n&&n()}e.complete&&r?l():i?((o=new t.Image).onload=l,o.onerror=l,a&&(o.sizes=a),s&&(o.srcset=s),i&&(o.src=i)):l()},preloadImages:function(){var e=this;function t(){void 0!==e&&null!==e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(var i=0;i<e.imagesToLoad.length;i+=1){var s=e.imagesToLoad[i];e.loadImage(s,s.currentSrc||s.getAttribute("src"),s.srcset||s.getAttribute("srcset"),s.sizes||s.getAttribute("sizes"),!0,t)}}}},z={},k=function(e){function t(){for(var i,a,r,n=[],o=arguments.length;o--;)n[o]=arguments[o];1===n.length&&n[0].constructor&&n[0].constructor===Object?r=n[0]:(a=(i=n)[0],r=i[1]),r||(r={}),r=d.extend({},r),a&&!r.el&&(r.el=a),e.call(this,r),Object.keys(M).forEach(function(e){Object.keys(M[e]).forEach(function(i){t.prototype[i]||(t.prototype[i]=M[e][i])})});var l=this;void 0===l.modules&&(l.modules={}),Object.keys(l.modules).forEach(function(e){var t=l.modules[e];if(t.params){var i=Object.keys(t.params)[0],s=t.params[i];if("object"!=typeof s)return;if(!(i in r&&"enabled"in s))return;!0===r[i]&&(r[i]={enabled:!0}),"object"!=typeof r[i]||"enabled"in r[i]||(r[i].enabled=!0),r[i]||(r[i]={enabled:!1})}});var p=d.extend({},C);l.useModulesParams(p),l.params=d.extend({},p,z,r),l.originalParams=d.extend({},l.params),l.passedParams=d.extend({},r),l.$=s;var c=s(l.params.el);if(a=c[0]){if(c.length>1){var u=[];return c.each(function(e,i){var s=d.extend({},r,{el:i});u.push(new t(s))}),u}a.swiper=l,c.data("swiper",l);var v,f,m=c.children("."+l.params.wrapperClass);return d.extend(l,{$el:c,el:a,$wrapperEl:m,wrapperEl:m[0],classNames:[],slides:s(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return"horizontal"===l.params.direction},isVertical:function(){return"vertical"===l.params.direction},rtl:"rtl"===a.dir.toLowerCase()||"rtl"===c.css("direction"),rtlTranslate:"horizontal"===l.params.direction&&("rtl"===a.dir.toLowerCase()||"rtl"===c.css("direction")),wrongRTL:"-webkit-box"===m.css("display"),activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:l.params.allowSlideNext,allowSlidePrev:l.params.allowSlidePrev,touchEvents:(v=["touchstart","touchmove","touchend"],f=["mousedown","mousemove","mouseup"],h.pointerEvents?f=["pointerdown","pointermove","pointerup"]:h.prefixedPointerEvents&&(f=["MSPointerDown","MSPointerMove","MSPointerUp"]),l.touchEventsTouch={start:v[0],move:v[1],end:v[2]},l.touchEventsDesktop={start:f[0],move:f[1],end:f[2]},h.touch||!l.params.simulateTouch?l.touchEventsTouch:l.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,formElements:"input, select, option, textarea, button, video",lastClickTime:d.now(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:l.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),l.useModules(),l.params.init&&l.init(),l}}e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t;var i={extendedDefaults:{configurable:!0},defaults:{configurable:!0},Class:{configurable:!0},$:{configurable:!0}};return t.prototype.slidesPerViewDynamic=function(){var e=this.params,t=this.slides,i=this.slidesGrid,s=this.size,a=this.activeIndex,r=1;if(e.centeredSlides){for(var n,o=t[a].swiperSlideSize,l=a+1;l<t.length;l+=1)t[l]&&!n&&(r+=1,(o+=t[l].swiperSlideSize)>s&&(n=!0));for(var d=a-1;d>=0;d-=1)t[d]&&!n&&(r+=1,(o+=t[d].swiperSlideSize)>s&&(n=!0))}else for(var h=a+1;h<t.length;h+=1)i[h]-i[a]<s&&(r+=1);return r},t.prototype.update=function(){var e=this;if(e&&!e.destroyed){var t=e.snapGrid,i=e.params;i.breakpoints&&e.setBreakpoint(),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode?(s(),e.params.autoHeight&&e.updateAutoHeight()):(("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0))||s(),i.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}function s(){var t=e.rtlTranslate?-1*e.translate:e.translate,i=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(i),e.updateActiveIndex(),e.updateSlidesClasses()}},t.prototype.init=function(){this.initialized||(this.emit("beforeInit"),this.params.breakpoints&&this.setBreakpoint(),this.addClasses(),this.params.loop&&this.loopCreate(),this.updateSize(),this.updateSlides(),this.params.watchOverflow&&this.checkOverflow(),this.params.grabCursor&&this.setGrabCursor(),this.params.preloadImages&&this.preloadImages(),this.params.loop?this.slideTo(this.params.initialSlide+this.loopedSlides,0,this.params.runCallbacksOnInit):this.slideTo(this.params.initialSlide,0,this.params.runCallbacksOnInit),this.attachEvents(),this.initialized=!0,this.emit("init"))},t.prototype.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var i=this,s=i.params,a=i.$el,r=i.$wrapperEl,n=i.slides;return void 0===i.params||i.destroyed?null:(i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),s.loop&&i.loopDestroy(),t&&(i.removeClasses(),a.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([s.slideVisibleClass,s.slideActiveClass,s.slideNextClass,s.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index").removeAttr("data-swiper-column").removeAttr("data-swiper-row")),i.emit("destroy"),Object.keys(i.eventsListeners).forEach(function(e){i.off(e)}),!1!==e&&(i.$el[0].swiper=null,i.$el.data("swiper",null),d.deleteProps(i)),i.destroyed=!0,null)},t.extendDefaults=function(e){d.extend(z,e)},i.extendedDefaults.get=function(){return z},i.defaults.get=function(){return C},i.Class.get=function(){return e},i.$.get=function(){return s},Object.defineProperties(t,i),t}(p),P={name:"device",proto:{device:y},static:{device:y}},$={name:"support",proto:{support:h},static:{support:h}},L={name:"browser",proto:{browser:S},static:{browser:S}},I={name:"resize",create:function(){var e=this;d.extend(e,{resize:{resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init:function(){t.addEventListener("resize",this.resize.resizeHandler),t.addEventListener("orientationchange",this.resize.orientationChangeHandler)},destroy:function(){t.removeEventListener("resize",this.resize.resizeHandler),t.removeEventListener("orientationchange",this.resize.orientationChangeHandler)}}},D={func:t.MutationObserver||t.WebkitMutationObserver,attach:function(e,t){void 0===t&&(t={});var i=this,s=new(0,D.func)(function(e){e.forEach(function(e){i.emit("observerUpdate",e)})});s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),i.observer.observers.push(s)},init:function(){if(h.observer&&this.params.observer){if(this.params.observeParents)for(var e=this.$el.parents(),t=0;t<e.length;t+=1)this.observer.attach(e[t]);this.observer.attach(this.$el[0],{childList:!1}),this.observer.attach(this.$wrapperEl[0],{attributes:!1})}},destroy:function(){this.observer.observers.forEach(function(e){e.disconnect()}),this.observer.observers=[]}},O={name:"observer",params:{observer:!1,observeParents:!1},create:function(){d.extend(this,{observer:{init:D.init.bind(this),attach:D.attach.bind(this),destroy:D.destroy.bind(this),observers:[]}})},on:{init:function(){this.observer.init()},destroy:function(){this.observer.destroy()}}},A={update:function(e){var t=this,i=t.params,s=i.slidesPerView,a=i.slidesPerGroup,r=i.centeredSlides,n=t.virtual,o=n.from,l=n.to,h=n.slides,p=n.slidesGrid,c=n.renderSlide,u=n.offset;t.updateActiveIndex();var v,f,m,g=t.activeIndex||0;v=t.rtlTranslate?"right":t.isHorizontal()?"left":"top",r?(f=Math.floor(s/2)+a,m=Math.floor(s/2)+a):(f=s+(a-1),m=a);var b=Math.max((g||0)-m,0),w=Math.min((g||0)+f,h.length-1),y=(t.slidesGrid[b]||0)-(t.slidesGrid[0]||0);function x(){t.updateSlides(),t.updateProgress(),t.updateSlidesClasses(),t.lazy&&t.params.lazy.enabled&&t.lazy.load()}if(d.extend(t.virtual,{from:b,to:w,offset:y,slidesGrid:t.slidesGrid}),o===b&&l===w&&!e)return t.slidesGrid!==p&&y!==u&&t.slides.css(v,y+"px"),void t.updateProgress();if(t.params.virtual.renderExternal)return t.params.virtual.renderExternal.call(t,{offset:y,from:b,to:w,slides:function(){for(var e=[],t=b;t<=w;t+=1)e.push(h[t]);return e}()}),void x();var E=[],T=[];if(e)t.$wrapperEl.find("."+t.params.slideClass).remove();else for(var S=o;S<=l;S+=1)(S<b||S>w)&&t.$wrapperEl.find("."+t.params.slideClass+'[data-swiper-slide-index="'+S+'"]').remove();for(var C=0;C<h.length;C+=1)C>=b&&C<=w&&(void 0===l||e?T.push(C):(C>l&&T.push(C),C<o&&E.push(C)));T.forEach(function(e){t.$wrapperEl.append(c(h[e],e))}),E.sort(function(e,t){return e<t}).forEach(function(e){t.$wrapperEl.prepend(c(h[e],e))}),t.$wrapperEl.children(".swiper-slide").css(v,y+"px"),x()},renderSlide:function(e,t){var i=this.params.virtual;if(i.cache&&this.virtual.cache[t])return this.virtual.cache[t];var a=i.renderSlide?s(i.renderSlide.call(this,e,t)):s('<div class="'+this.params.slideClass+'" data-swiper-slide-index="'+t+'">'+e+"</div>");return a.attr("data-swiper-slide-index")||a.attr("data-swiper-slide-index",t),i.cache&&(this.virtual.cache[t]=a),a},appendSlide:function(e){this.virtual.slides.push(e),this.virtual.update(!0)},prependSlide:function(e){if(this.virtual.slides.unshift(e),this.params.virtual.cache){var t=this.virtual.cache,i={};Object.keys(t).forEach(function(e){i[e+1]=t[e]}),this.virtual.cache=i}this.virtual.update(!0),this.slideNext(0)}},G={name:"virtual",params:{virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null}},create:function(){d.extend(this,{virtual:{update:A.update.bind(this),appendSlide:A.appendSlide.bind(this),prependSlide:A.prependSlide.bind(this),renderSlide:A.renderSlide.bind(this),slides:this.params.virtual.slides,cache:{}}})},on:{beforeInit:function(){if(this.params.virtual.enabled){this.classNames.push(this.params.containerModifierClass+"virtual");var e={watchSlidesProgress:!0};d.extend(this.params,e),d.extend(this.originalParams,e),this.virtual.update()}},setTranslate:function(){this.params.virtual.enabled&&this.virtual.update()}}},H={handle:function(i){var s=this.rtlTranslate,a=i;a.originalEvent&&(a=a.originalEvent);var r=a.keyCode||a.charCode;if(!this.allowSlideNext&&(this.isHorizontal()&&39===r||this.isVertical()&&40===r))return!1;if(!this.allowSlidePrev&&(this.isHorizontal()&&37===r||this.isVertical()&&38===r))return!1;if(!(a.shiftKey||a.altKey||a.ctrlKey||a.metaKey||e.activeElement&&e.activeElement.nodeName&&("input"===e.activeElement.nodeName.toLowerCase()||"textarea"===e.activeElement.nodeName.toLowerCase()))){if(this.params.keyboard.onlyInViewport&&(37===r||39===r||38===r||40===r)){var n=!1;if(this.$el.parents("."+this.params.slideClass).length>0&&0===this.$el.parents("."+this.params.slideActiveClass).length)return;var o=t.innerWidth,l=t.innerHeight,d=this.$el.offset();s&&(d.left-=this.$el[0].scrollLeft);for(var h=[[d.left,d.top],[d.left+this.width,d.top],[d.left,d.top+this.height],[d.left+this.width,d.top+this.height]],p=0;p<h.length;p+=1){var c=h[p];c[0]>=0&&c[0]<=o&&c[1]>=0&&c[1]<=l&&(n=!0)}if(!n)return}this.isHorizontal()?(37!==r&&39!==r||(a.preventDefault?a.preventDefault():a.returnValue=!1),(39===r&&!s||37===r&&s)&&this.slideNext(),(37===r&&!s||39===r&&s)&&this.slidePrev()):(38!==r&&40!==r||(a.preventDefault?a.preventDefault():a.returnValue=!1),40===r&&this.slideNext(),38===r&&this.slidePrev()),this.emit("keyPress",r)}},enable:function(){this.keyboard.enabled||(s(e).on("keydown",this.keyboard.handle),this.keyboard.enabled=!0)},disable:function(){this.keyboard.enabled&&(s(e).off("keydown",this.keyboard.handle),this.keyboard.enabled=!1)}},N={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0}},create:function(){d.extend(this,{keyboard:{enabled:!1,enable:H.enable.bind(this),disable:H.disable.bind(this),handle:H.handle.bind(this)}})},on:{init:function(){this.params.keyboard.enabled&&this.keyboard.enable()},destroy:function(){this.keyboard.enabled&&this.keyboard.disable()}}};var B={lastScrollTime:d.now(),event:t.navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":function(){var t="onwheel"in e;if(!t){var i=e.createElement("div");i.setAttribute("onwheel","return;"),t="function"==typeof i.onwheel}return!t&&e.implementation&&e.implementation.hasFeature&&!0!==e.implementation.hasFeature("","")&&(t=e.implementation.hasFeature("Events.wheel","3.0")),t}()?"wheel":"mousewheel",normalize:function(e){var t=0,i=0,s=0,a=0;return"detail"in e&&(i=e.detail),"wheelDelta"in e&&(i=-e.wheelDelta/120),"wheelDeltaY"in e&&(i=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=i,i=0),s=10*t,a=10*i,"deltaY"in e&&(a=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||a)&&e.deltaMode&&(1===e.deltaMode?(s*=40,a*=40):(s*=800,a*=800)),s&&!t&&(t=s<1?-1:1),a&&!i&&(i=a<1?-1:1),{spinX:t,spinY:i,pixelX:s,pixelY:a}},handleMouseEnter:function(){this.mouseEntered=!0},handleMouseLeave:function(){this.mouseEntered=!1},handle:function(e){var i=e,s=this,a=s.params.mousewheel;if(!s.mouseEntered&&!a.releaseOnEdges)return!0;i.originalEvent&&(i=i.originalEvent);var r=0,n=s.rtlTranslate?-1:1,o=B.normalize(i);if(a.forceToAxis)if(s.isHorizontal()){if(!(Math.abs(o.pixelX)>Math.abs(o.pixelY)))return!0;r=o.pixelX*n}else{if(!(Math.abs(o.pixelY)>Math.abs(o.pixelX)))return!0;r=o.pixelY}else r=Math.abs(o.pixelX)>Math.abs(o.pixelY)?-o.pixelX*n:-o.pixelY;if(0===r)return!0;if(a.invert&&(r=-r),s.params.freeMode){s.params.loop&&s.loopFix();var l=s.getTranslate()+r*a.sensitivity,h=s.isBeginning,p=s.isEnd;if(l>=s.minTranslate()&&(l=s.minTranslate()),l<=s.maxTranslate()&&(l=s.maxTranslate()),s.setTransition(0),s.setTranslate(l),s.updateProgress(),s.updateActiveIndex(),s.updateSlidesClasses(),(!h&&s.isBeginning||!p&&s.isEnd)&&s.updateSlidesClasses(),s.params.freeModeSticky&&(clearTimeout(s.mousewheel.timeout),s.mousewheel.timeout=d.nextTick(function(){s.slideToClosest()},300)),s.emit("scroll",i),s.params.autoplay&&s.params.autoplayDisableOnInteraction&&s.autoplay.stop(),l===s.minTranslate()||l===s.maxTranslate())return!0}else{if(d.now()-s.mousewheel.lastScrollTime>60)if(r<0)if(s.isEnd&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slideNext(),s.emit("scroll",i);else if(s.isBeginning&&!s.params.loop||s.animating){if(a.releaseOnEdges)return!0}else s.slidePrev(),s.emit("scroll",i);s.mousewheel.lastScrollTime=(new t.Date).getTime()}return i.preventDefault?i.preventDefault():i.returnValue=!1,!1},enable:function(){if(!B.event)return!1;if(this.mousewheel.enabled)return!1;var e=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.on("mouseenter",this.mousewheel.handleMouseEnter),e.on("mouseleave",this.mousewheel.handleMouseLeave),e.on(B.event,this.mousewheel.handle),this.mousewheel.enabled=!0,!0},disable:function(){if(!B.event)return!1;if(!this.mousewheel.enabled)return!1;var e=this.$el;return"container"!==this.params.mousewheel.eventsTarged&&(e=s(this.params.mousewheel.eventsTarged)),e.off(B.event,this.mousewheel.handle),this.mousewheel.enabled=!1,!0}},X={update:function(){var e=this.params.navigation;if(!this.params.loop){var t=this.navigation,i=t.$nextEl,s=t.$prevEl;s&&s.length>0&&(this.isBeginning?s.addClass(e.disabledClass):s.removeClass(e.disabledClass),s[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass)),i&&i.length>0&&(this.isEnd?i.addClass(e.disabledClass):i.removeClass(e.disabledClass),i[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](e.lockClass))}},init:function(){var e,t,i=this,a=i.params.navigation;(a.nextEl||a.prevEl)&&(a.nextEl&&(e=s(a.nextEl),i.params.uniqueNavElements&&"string"==typeof a.nextEl&&e.length>1&&1===i.$el.find(a.nextEl).length&&(e=i.$el.find(a.nextEl))),a.prevEl&&(t=s(a.prevEl),i.params.uniqueNavElements&&"string"==typeof a.prevEl&&t.length>1&&1===i.$el.find(a.prevEl).length&&(t=i.$el.find(a.prevEl))),e&&e.length>0&&e.on("click",function(e){e.preventDefault(),i.isEnd&&!i.params.loop||i.slideNext()}),t&&t.length>0&&t.on("click",function(e){e.preventDefault(),i.isBeginning&&!i.params.loop||i.slidePrev()}),d.extend(i.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}))},destroy:function(){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;t&&t.length&&(t.off("click"),t.removeClass(this.params.navigation.disabledClass)),i&&i.length&&(i.off("click"),i.removeClass(this.params.navigation.disabledClass))}},Y={update:function(){var e=this.rtl,t=this.params.pagination;if(t.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var i,a=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,r=this.pagination.$el,n=this.params.loop?Math.ceil((a-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length;if(this.params.loop?((i=Math.ceil((this.activeIndex-this.loopedSlides)/this.params.slidesPerGroup))>a-1-2*this.loopedSlides&&(i-=a-2*this.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==this.params.paginationType&&(i=n+i)):i=void 0!==this.snapIndex?this.snapIndex:this.activeIndex||0,"bullets"===t.type&&this.pagination.bullets&&this.pagination.bullets.length>0){var o,l,d,h=this.pagination.bullets;if(t.dynamicBullets&&(this.pagination.bulletSize=h.eq(0)[this.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(this.isHorizontal()?"width":"height",this.pagination.bulletSize*(t.dynamicMainBullets+4)+"px"),t.dynamicMainBullets>1&&void 0!==this.previousIndex&&(this.pagination.dynamicBulletIndex+=i-this.previousIndex,this.pagination.dynamicBulletIndex>t.dynamicMainBullets-1?this.pagination.dynamicBulletIndex=t.dynamicMainBullets-1:this.pagination.dynamicBulletIndex<0&&(this.pagination.dynamicBulletIndex=0)),o=i-this.pagination.dynamicBulletIndex,d=((l=o+(Math.min(h.length,t.dynamicMainBullets)-1))+o)/2),h.removeClass(t.bulletActiveClass+" "+t.bulletActiveClass+"-next "+t.bulletActiveClass+"-next-next "+t.bulletActiveClass+"-prev "+t.bulletActiveClass+"-prev-prev "+t.bulletActiveClass+"-main"),r.length>1)h.each(function(e,a){var r=s(a),n=r.index();n===i&&r.addClass(t.bulletActiveClass),t.dynamicBullets&&(n>=o&&n<=l&&r.addClass(t.bulletActiveClass+"-main"),n===o&&r.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),n===l&&r.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next"))});else if(h.eq(i).addClass(t.bulletActiveClass),t.dynamicBullets){for(var p=h.eq(o),c=h.eq(l),u=o;u<=l;u+=1)h.eq(u).addClass(t.bulletActiveClass+"-main");p.prev().addClass(t.bulletActiveClass+"-prev").prev().addClass(t.bulletActiveClass+"-prev-prev"),c.next().addClass(t.bulletActiveClass+"-next").next().addClass(t.bulletActiveClass+"-next-next")}if(t.dynamicBullets){var v=Math.min(h.length,t.dynamicMainBullets+4),f=(this.pagination.bulletSize*v-this.pagination.bulletSize)/2-d*this.pagination.bulletSize,m=e?"right":"left";h.css(this.isHorizontal()?m:"top",f+"px")}}if("fraction"===t.type&&(r.find("."+t.currentClass).text(t.formatFractionCurrent(i+1)),r.find("."+t.totalClass).text(t.formatFractionTotal(n))),"progressbar"===t.type){var g;g=t.progressbarOpposite?this.isHorizontal()?"vertical":"horizontal":this.isHorizontal()?"horizontal":"vertical";var b=(i+1)/n,w=1,y=1;"horizontal"===g?w=b:y=b,r.find("."+t.progressbarFillClass).transform("translate3d(0,0,0) scaleX("+w+") scaleY("+y+")").transition(this.params.speed)}"custom"===t.type&&t.renderCustom?(r.html(t.renderCustom(this,i+1,n)),this.emit("paginationRender",this,r[0])):this.emit("paginationUpdate",this,r[0]),r[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](t.lockClass)}},render:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.virtual&&this.params.virtual.enabled?this.virtual.slides.length:this.slides.length,i=this.pagination.$el,s="";if("bullets"===e.type){for(var a=this.params.loop?Math.ceil((t-2*this.loopedSlides)/this.params.slidesPerGroup):this.snapGrid.length,r=0;r<a;r+=1)e.renderBullet?s+=e.renderBullet.call(this,r,e.bulletClass):s+="<"+e.bulletElement+' class="'+e.bulletClass+'"></'+e.bulletElement+">";i.html(s),this.pagination.bullets=i.find("."+e.bulletClass)}"fraction"===e.type&&(s=e.renderFraction?e.renderFraction.call(this,e.currentClass,e.totalClass):'<span class="'+e.currentClass+'"></span> / <span class="'+e.totalClass+'"></span>',i.html(s)),"progressbar"===e.type&&(s=e.renderProgressbar?e.renderProgressbar.call(this,e.progressbarFillClass):'<span class="'+e.progressbarFillClass+'"></span>',i.html(s)),"custom"!==e.type&&this.emit("paginationRender",this.pagination.$el[0])}},init:function(){var e=this,t=e.params.pagination;if(t.el){var i=s(t.el);0!==i.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&i.length>1&&1===e.$el.find(t.el).length&&(i=e.$el.find(t.el)),"bullets"===t.type&&t.clickable&&i.addClass(t.clickableClass),i.addClass(t.modifierClass+t.type),"bullets"===t.type&&t.dynamicBullets&&(i.addClass(""+t.modifierClass+t.type+"-dynamic"),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&i.addClass(t.progressbarOppositeClass),t.clickable&&i.on("click","."+t.bulletClass,function(t){t.preventDefault();var i=s(this).index()*e.params.slidesPerGroup;e.params.loop&&(i+=e.loopedSlides),e.slideTo(i)}),d.extend(e.pagination,{$el:i,el:i[0]}))}},destroy:function(){var e=this.params.pagination;if(e.el&&this.pagination.el&&this.pagination.$el&&0!==this.pagination.$el.length){var t=this.pagination.$el;t.removeClass(e.hiddenClass),t.removeClass(e.modifierClass+e.type),this.pagination.bullets&&this.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&t.off("click","."+e.bulletClass)}}},V={setTranslate:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=this.rtlTranslate,i=this.progress,s=e.dragSize,a=e.trackSize,r=e.$dragEl,n=e.$el,o=this.params.scrollbar,l=s,d=(a-s)*i;t?(d=-d)>0?(l=s-d,d=0):-d+s>a&&(l=a+d):d<0?(l=s+d,d=0):d+s>a&&(l=a-d),this.isHorizontal()?(h.transforms3d?r.transform("translate3d("+d+"px, 0, 0)"):r.transform("translateX("+d+"px)"),r[0].style.width=l+"px"):(h.transforms3d?r.transform("translate3d(0px, "+d+"px, 0)"):r.transform("translateY("+d+"px)"),r[0].style.height=l+"px"),o.hide&&(clearTimeout(this.scrollbar.timeout),n[0].style.opacity=1,this.scrollbar.timeout=setTimeout(function(){n[0].style.opacity=0,n.transition(400)},1e3))}},setTransition:function(e){this.params.scrollbar.el&&this.scrollbar.el&&this.scrollbar.$dragEl.transition(e)},updateSize:function(){if(this.params.scrollbar.el&&this.scrollbar.el){var e=this.scrollbar,t=e.$dragEl,i=e.$el;t[0].style.width="",t[0].style.height="";var s,a=this.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,r=this.size/this.virtualSize,n=r*(a/this.size);s="auto"===this.params.scrollbar.dragSize?a*r:parseInt(this.params.scrollbar.dragSize,10),this.isHorizontal()?t[0].style.width=s+"px":t[0].style.height=s+"px",i[0].style.display=r>=1?"none":"",this.params.scrollbarHide&&(i[0].style.opacity=0),d.extend(e,{trackSize:a,divider:r,moveDivider:n,dragSize:s}),e.$el[this.params.watchOverflow&&this.isLocked?"addClass":"removeClass"](this.params.scrollbar.lockClass)}},setDragPosition:function(e){var t,i=this.scrollbar,s=this.rtlTranslate,a=i.$el,r=i.dragSize,n=i.trackSize;t=((this.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageX:e.pageX||e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].pageY:e.pageY||e.clientY)-a.offset()[this.isHorizontal()?"left":"top"]-r/2)/(n-r),t=Math.max(Math.min(t,1),0),s&&(t=1-t);var o=this.minTranslate()+(this.maxTranslate()-this.minTranslate())*t;this.updateProgress(o),this.setTranslate(o),this.updateActiveIndex(),this.updateSlidesClasses()},onDragStart:function(e){var t=this.params.scrollbar,i=this.scrollbar,s=this.$wrapperEl,a=i.$el,r=i.$dragEl;this.scrollbar.isTouched=!0,e.preventDefault(),e.stopPropagation(),s.transition(100),r.transition(100),i.setDragPosition(e),clearTimeout(this.scrollbar.dragTimeout),a.transition(0),t.hide&&a.css("opacity",1),this.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this.scrollbar,i=this.$wrapperEl,s=t.$el,a=t.$dragEl;this.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,t.setDragPosition(e),i.transition(0),s.transition(0),a.transition(0),this.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this.params.scrollbar,i=this.scrollbar.$el;this.scrollbar.isTouched&&(this.scrollbar.isTouched=!1,t.hide&&(clearTimeout(this.scrollbar.dragTimeout),this.scrollbar.dragTimeout=d.nextTick(function(){i.css("opacity",0),i.transition(400)},1e3)),this.emit("scrollbarDragEnd",e),t.snapOnRelease&&this.slideToClosest())},enableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEvents,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!h.passiveListener||!a.passiveListener)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListener)&&{passive:!0,capture:!1};h.touch||!h.pointerEvents&&!h.prefixedPointerEvents?(h.touch&&(r.addEventListener(i.start,this.scrollbar.onDragStart,n),r.addEventListener(i.move,this.scrollbar.onDragMove,n),r.addEventListener(i.end,this.scrollbar.onDragEnd,o)),(a.simulateTouch&&!y.ios&&!y.android||a.simulateTouch&&!h.touch&&y.ios)&&(r.addEventListener("mousedown",this.scrollbar.onDragStart,n),e.addEventListener("mousemove",this.scrollbar.onDragMove,n),e.addEventListener("mouseup",this.scrollbar.onDragEnd,o))):(r.addEventListener(s.start,this.scrollbar.onDragStart,n),e.addEventListener(s.move,this.scrollbar.onDragMove,n),e.addEventListener(s.end,this.scrollbar.onDragEnd,o))}},disableDraggable:function(){if(this.params.scrollbar.el){var t=this.scrollbar,i=this.touchEvents,s=this.touchEventsDesktop,a=this.params,r=t.$el[0],n=!(!h.passiveListener||!a.passiveListener)&&{passive:!1,capture:!1},o=!(!h.passiveListener||!a.passiveListener)&&{passive:!0,capture:!1};h.touch||!h.pointerEvents&&!h.prefixedPointerEvents?(h.touch&&(r.removeEventListener(i.start,this.scrollbar.onDragStart,n),r.removeEventListener(i.move,this.scrollbar.onDragMove,n),r.removeEventListener(i.end,this.scrollbar.onDragEnd,o)),(a.simulateTouch&&!y.ios&&!y.android||a.simulateTouch&&!h.touch&&y.ios)&&(r.removeEventListener("mousedown",this.scrollbar.onDragStart,n),e.removeEventListener("mousemove",this.scrollbar.onDragMove,n),e.removeEventListener("mouseup",this.scrollbar.onDragEnd,o))):(r.removeEventListener(s.start,this.scrollbar.onDragStart,n),e.removeEventListener(s.move,this.scrollbar.onDragMove,n),e.removeEventListener(s.end,this.scrollbar.onDragEnd,o))}},init:function(){if(this.params.scrollbar.el){var e=this.scrollbar,t=this.$el,i=this.params.scrollbar,a=s(i.el);this.params.uniqueNavElements&&"string"==typeof i.el&&a.length>1&&1===t.find(i.el).length&&(a=t.find(i.el));var r=a.find("."+this.params.scrollbar.dragClass);0===r.length&&(r=s('<div class="'+this.params.scrollbar.dragClass+'"></div>'),a.append(r)),d.extend(e,{$el:a,el:a[0],$dragEl:r,dragEl:r[0]}),i.draggable&&e.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},R={setTransform:function(e,t){var i=this.rtl,a=s(e),r=i?-1:1,n=a.attr("data-swiper-parallax")||"0",o=a.attr("data-swiper-parallax-x"),l=a.attr("data-swiper-parallax-y"),d=a.attr("data-swiper-parallax-scale"),h=a.attr("data-swiper-parallax-opacity");if(o||l?(o=o||"0",l=l||"0"):this.isHorizontal()?(o=n,l="0"):(l=n,o="0"),o=o.indexOf("%")>=0?parseInt(o,10)*t*r+"%":o*t*r+"px",l=l.indexOf("%")>=0?parseInt(l,10)*t+"%":l*t+"px",void 0!==h&&null!==h){var p=h-(h-1)*(1-Math.abs(t));a[0].style.opacity=p}if(void 0===d||null===d)a.transform("translate3d("+o+", "+l+", 0px)");else{var c=d-(d-1)*(1-Math.abs(t));a.transform("translate3d("+o+", "+l+", 0px) scale("+c+")")}},setTranslate:function(){var e=this,t=e.$el,i=e.slides,a=e.progress,r=e.snapGrid;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){e.parallax.setTransform(i,a)}),i.each(function(t,i){var n=i.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(n+=Math.ceil(t/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),s(i).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){e.parallax.setTransform(i,n)})})},setTransition:function(e){void 0===e&&(e=this.params.speed);this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(t,i){var a=s(i),r=parseInt(a.attr("data-swiper-parallax-duration"),10)||e;0===e&&(r=0),a.transition(r)})}},F={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,i=e.targetTouches[0].pageY,s=e.targetTouches[1].pageX,a=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(s-t,2)+Math.pow(a-i,2))},onGestureStart:function(e){var t=this.params.zoom,i=this.zoom,a=i.gesture;if(i.fakeGestureTouched=!1,i.fakeGestureMoved=!1,!h.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;i.fakeGestureTouched=!0,a.scaleStart=F.getDistanceBetweenTouches(e)}a.$slideEl&&a.$slideEl.length||(a.$slideEl=s(e.target).closest(".swiper-slide"),0===a.$slideEl.length&&(a.$slideEl=this.slides.eq(this.activeIndex)),a.$imageEl=a.$slideEl.find("img, svg, canvas"),a.$imageWrapEl=a.$imageEl.parent("."+t.containerClass),a.maxRatio=a.$imageWrapEl.attr("data-swiper-zoom")||t.maxRatio,0!==a.$imageWrapEl.length)?(a.$imageEl.transition(0),this.zoom.isScaling=!0):a.$imageEl=void 0},onGestureChange:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;i.fakeGestureMoved=!0,s.scaleMove=F.getDistanceBetweenTouches(e)}s.$imageEl&&0!==s.$imageEl.length&&(h.gestures?this.zoom.scale=e.scale*i.currentScale:i.scale=s.scaleMove/s.scaleStart*i.currentScale,i.scale>s.maxRatio&&(i.scale=s.maxRatio-1+Math.pow(i.scale-s.maxRatio+1,.5)),i.scale<t.minRatio&&(i.scale=t.minRatio+1-Math.pow(t.minRatio-i.scale+1,.5)),s.$imageEl.transform("translate3d(0,0,0) scale("+i.scale+")"))},onGestureEnd:function(e){var t=this.params.zoom,i=this.zoom,s=i.gesture;if(!h.gestures){if(!i.fakeGestureTouched||!i.fakeGestureMoved)return;if("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2&&!y.android)return;i.fakeGestureTouched=!1,i.fakeGestureMoved=!1}s.$imageEl&&0!==s.$imageEl.length&&(i.scale=Math.max(Math.min(i.scale,s.maxRatio),t.minRatio),s.$imageEl.transition(this.params.speed).transform("translate3d(0,0,0) scale("+i.scale+")"),i.currentScale=i.scale,i.isScaling=!1,1===i.scale&&(s.$slideEl=void 0))},onTouchStart:function(e){var t=this.zoom,i=t.gesture,s=t.image;i.$imageEl&&0!==i.$imageEl.length&&(s.isTouched||(y.android&&e.preventDefault(),s.isTouched=!0,s.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))},onTouchMove:function(e){var t=this.zoom,i=t.gesture,s=t.image,a=t.velocity;if(i.$imageEl&&0!==i.$imageEl.length&&(this.allowClick=!1,s.isTouched&&i.$slideEl)){s.isMoved||(s.width=i.$imageEl[0].offsetWidth,s.height=i.$imageEl[0].offsetHeight,s.startX=d.getTranslate(i.$imageWrapEl[0],"x")||0,s.startY=d.getTranslate(i.$imageWrapEl[0],"y")||0,i.slideWidth=i.$slideEl[0].offsetWidth,i.slideHeight=i.$slideEl[0].offsetHeight,i.$imageWrapEl.transition(0),this.rtl&&(s.startX=-s.startX,s.startY=-s.startY));var r=s.width*t.scale,n=s.height*t.scale;if(!(r<i.slideWidth&&n<i.slideHeight)){if(s.minX=Math.min(i.slideWidth/2-r/2,0),s.maxX=-s.minX,s.minY=Math.min(i.slideHeight/2-n/2,0),s.maxY=-s.minY,s.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,s.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!s.isMoved&&!t.isScaling){if(this.isHorizontal()&&(Math.floor(s.minX)===Math.floor(s.startX)&&s.touchesCurrent.x<s.touchesStart.x||Math.floor(s.maxX)===Math.floor(s.startX)&&s.touchesCurrent.x>s.touchesStart.x))return void(s.isTouched=!1);if(!this.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.y<s.touchesStart.y||Math.floor(s.maxY)===Math.floor(s.startY)&&s.touchesCurrent.y>s.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentX<s.minX&&(s.currentX=s.minX+1-Math.pow(s.minX-s.currentX+1,.8)),s.currentX>s.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentY<s.minY&&(s.currentY=s.minY+1-Math.pow(s.minY-s.currentY+1,.8)),s.currentY>s.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),a.prevPositionX||(a.prevPositionX=s.touchesCurrent.x),a.prevPositionY||(a.prevPositionY=s.touchesCurrent.y),a.prevTime||(a.prevTime=Date.now()),a.x=(s.touchesCurrent.x-a.prevPositionX)/(Date.now()-a.prevTime)/2,a.y=(s.touchesCurrent.y-a.prevPositionY)/(Date.now()-a.prevTime)/2,Math.abs(s.touchesCurrent.x-a.prevPositionX)<2&&(a.x=0),Math.abs(s.touchesCurrent.y-a.prevPositionY)<2&&(a.y=0),a.prevPositionX=s.touchesCurrent.x,a.prevPositionY=s.touchesCurrent.y,a.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,i=e.image,s=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!i.isTouched||!i.isMoved)return i.isTouched=!1,void(i.isMoved=!1);i.isTouched=!1,i.isMoved=!1;var a=300,r=300,n=s.x*a,o=i.currentX+n,l=s.y*r,d=i.currentY+l;0!==s.x&&(a=Math.abs((o-i.currentX)/s.x)),0!==s.y&&(r=Math.abs((d-i.currentY)/s.y));var h=Math.max(a,r);i.currentX=o,i.currentY=d;var p=i.width*e.scale,c=i.height*e.scale;i.minX=Math.min(t.slideWidth/2-p/2,0),i.maxX=-i.minX,i.minY=Math.min(t.slideHeight/2-c/2,0),i.maxY=-i.minY,i.currentX=Math.max(Math.min(i.currentX,i.maxX),i.minX),i.currentY=Math.max(Math.min(i.currentY,i.maxY),i.minY),t.$imageWrapEl.transition(h).transform("translate3d("+i.currentX+"px, "+i.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl.transform("translate3d(0,0,0)"),t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0,e.scale=1,e.currentScale=1)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,i,a,r,n,o,l,d,h,p,c,u,v,f,m,g,b=this.zoom,w=this.params.zoom,y=b.gesture,x=b.image;(y.$slideEl||(y.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),y.$imageEl=y.$slideEl.find("img, svg, canvas"),y.$imageWrapEl=y.$imageEl.parent("."+w.containerClass)),y.$imageEl&&0!==y.$imageEl.length)&&(y.$slideEl.addClass(""+w.zoomedSlideClass),void 0===x.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,i="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=x.touchesStart.x,i=x.touchesStart.y),b.scale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,b.currentScale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,e?(m=y.$slideEl[0].offsetWidth,g=y.$slideEl[0].offsetHeight,a=y.$slideEl.offset().left+m/2-t,r=y.$slideEl.offset().top+g/2-i,l=y.$imageEl[0].offsetWidth,d=y.$imageEl[0].offsetHeight,h=l*b.scale,p=d*b.scale,v=-(c=Math.min(m/2-h/2,0)),f=-(u=Math.min(g/2-p/2,0)),n=a*b.scale,o=r*b.scale,n<c&&(n=c),n>v&&(n=v),o<u&&(o=u),o>f&&(o=f)):(n=0,o=0),y.$imageWrapEl.transition(300).transform("translate3d("+n+"px, "+o+"px,0)"),y.$imageEl.transition(300).transform("translate3d(0,0,0) scale("+b.scale+")"))},out:function(){var e=this.zoom,t=this.params.zoom,i=e.gesture;i.$slideEl||(i.$slideEl=this.clickedSlide?s(this.clickedSlide):this.slides.eq(this.activeIndex),i.$imageEl=i.$slideEl.find("img, svg, canvas"),i.$imageWrapEl=i.$imageEl.parent("."+t.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&(e.scale=1,e.currentScale=1,i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),i.$slideEl.removeClass(""+t.zoomedSlideClass),i.$slideEl=void 0)},enable:function(){var e=this.zoom;if(!e.enabled){e.enabled=!0;var t=!("touchstart"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};h.gestures?(this.$wrapperEl.on("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.on("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.on(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.on(this.touchEvents.move,".swiper-slide",e.onGestureChange,t),this.$wrapperEl.on(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.on(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove)}},disable:function(){var e=this.zoom;if(e.enabled){this.zoom.enabled=!1;var t=!("touchstart"!==this.touchEvents.start||!h.passiveListener||!this.params.passiveListeners)&&{passive:!0,capture:!1};h.gestures?(this.$wrapperEl.off("gesturestart",".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off("gesturechange",".swiper-slide",e.onGestureChange,t),this.$wrapperEl.off("gestureend",".swiper-slide",e.onGestureEnd,t)):"touchstart"===this.touchEvents.start&&(this.$wrapperEl.off(this.touchEvents.start,".swiper-slide",e.onGestureStart,t),this.$wrapperEl.off(this.touchEvents.move,".swiper-slide",e.onGestureChange,t),this.$wrapperEl.off(this.touchEvents.end,".swiper-slide",e.onGestureEnd,t)),this.$wrapperEl.off(this.touchEvents.move,"."+this.params.zoom.containerClass,e.onTouchMove)}}},W={loadInSlide:function(e,t){void 0===t&&(t=!0);var i=this,a=i.params.lazy;if(void 0!==e&&0!==i.slides.length){var r=i.virtual&&i.params.virtual.enabled?i.$wrapperEl.children("."+i.params.slideClass+'[data-swiper-slide-index="'+e+'"]'):i.slides.eq(e),n=r.find("."+a.elementClass+":not(."+a.loadedClass+"):not(."+a.loadingClass+")");!r.hasClass(a.elementClass)||r.hasClass(a.loadedClass)||r.hasClass(a.loadingClass)||(n=n.add(r[0])),0!==n.length&&n.each(function(e,n){var o=s(n);o.addClass(a.loadingClass);var l=o.attr("data-background"),d=o.attr("data-src"),h=o.attr("data-srcset"),p=o.attr("data-sizes");i.loadImage(o[0],d||l,h,p,!1,function(){if(void 0!==i&&null!==i&&i&&(!i||i.params)&&!i.destroyed){if(l?(o.css("background-image",'url("'+l+'")'),o.removeAttr("data-background")):(h&&(o.attr("srcset",h),o.removeAttr("data-srcset")),p&&(o.attr("sizes",p),o.removeAttr("data-sizes")),d&&(o.attr("src",d),o.removeAttr("data-src"))),o.addClass(a.loadedClass).removeClass(a.loadingClass),r.find("."+a.preloaderClass).remove(),i.params.loop&&t){var e=r.attr("data-swiper-slide-index");if(r.hasClass(i.params.slideDuplicateClass)){var s=i.$wrapperEl.children('[data-swiper-slide-index="'+e+'"]:not(.'+i.params.slideDuplicateClass+")");i.lazy.loadInSlide(s.index(),!1)}else{var n=i.$wrapperEl.children("."+i.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');i.lazy.loadInSlide(n.index(),!1)}}i.emit("lazyImageReady",r[0],o[0])}}),i.emit("lazyImageLoad",r[0],o[0])})}},load:function(){var e=this,t=e.$wrapperEl,i=e.params,a=e.slides,r=e.activeIndex,n=e.virtual&&i.virtual.enabled,o=i.lazy,l=i.slidesPerView;function d(e){if(n){if(t.children("."+i.slideClass+'[data-swiper-slide-index="'+e+'"]').length)return!0}else if(a[e])return!0;return!1}function h(e){return n?s(e).attr("data-swiper-slide-index"):s(e).index()}if("auto"===l&&(l=0),e.lazy.initialImageLoaded||(e.lazy.initialImageLoaded=!0),e.params.watchSlidesVisibility)t.children("."+i.slideVisibleClass).each(function(t,i){var a=n?s(i).attr("data-swiper-slide-index"):s(i).index();e.lazy.loadInSlide(a)});else if(l>1)for(var p=r;p<r+l;p+=1)d(p)&&e.lazy.loadInSlide(p);else e.lazy.loadInSlide(r);if(o.loadPrevNext)if(l>1||o.loadPrevNextAmount&&o.loadPrevNextAmount>1){for(var c=o.loadPrevNextAmount,u=l,v=Math.min(r+u+Math.max(c,u),a.length),f=Math.max(r-Math.max(u,c),0),m=r+l;m<v;m+=1)d(m)&&e.lazy.loadInSlide(m);for(var g=f;g<r;g+=1)d(g)&&e.lazy.loadInSlide(g)}else{var b=t.children("."+i.slideNextClass);b.length>0&&e.lazy.loadInSlide(h(b));var w=t.children("."+i.slidePrevClass);w.length>0&&e.lazy.loadInSlide(h(w))}}},q={LinearSpline:function(e,t){var i,s,a,r,n,o=function(e,t){for(s=-1,i=e.length;i-s>1;)e[a=i+s>>1]<=t?s=a:i=a;return i};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){this.controller.spline||(this.controller.spline=this.params.loop?new q.LinearSpline(this.slidesGrid,e.slidesGrid):new q.LinearSpline(this.snapGrid,e.snapGrid))},setTranslate:function(e,t){var i,s,a=this,r=a.controller.control;function n(e){var t=a.rtlTranslate?-a.translate:a.translate;"slide"===a.params.controller.by&&(a.controller.getInterpolateFunction(e),s=-a.controller.spline.interpolate(-t)),s&&"container"!==a.params.controller.by||(i=(e.maxTranslate()-e.minTranslate())/(a.maxTranslate()-a.minTranslate()),s=(t-a.minTranslate())*i+e.minTranslate()),a.params.controller.inverse&&(s=e.maxTranslate()-s),e.updateProgress(s),e.setTranslate(s,a),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o<r.length;o+=1)r[o]!==t&&r[o]instanceof k&&n(r[o]);else r instanceof k&&t!==r&&n(r)},setTransition:function(e,t){var i,s=this,a=s.controller.control;function r(t){t.setTransition(e,s),0!==e&&(t.transitionStart(),t.$wrapperEl.transitionEnd(function(){a&&(t.params.loop&&"slide"===s.params.controller.by&&t.loopFix(),t.transitionEnd())}))}if(Array.isArray(a))for(i=0;i<a.length;i+=1)a[i]!==t&&a[i]instanceof k&&r(a[i]);else a instanceof k&&t!==a&&r(a)}},j={makeElFocusable:function(e){return e.attr("tabIndex","0"),e},addElRole:function(e,t){return e.attr("role",t),e},addElLabel:function(e,t){return e.attr("aria-label",t),e},disableEl:function(e){return e.attr("aria-disabled",!0),e},enableEl:function(e){return e.attr("aria-disabled",!1),e},onEnterKey:function(e){var t=this.params.a11y;if(13===e.keyCode){var i=s(e.target);this.navigation&&this.navigation.$nextEl&&i.is(this.navigation.$nextEl)&&(this.isEnd&&!this.params.loop||this.slideNext(),this.isEnd?this.a11y.notify(t.lastSlideMessage):this.a11y.notify(t.nextSlideMessage)),this.navigation&&this.navigation.$prevEl&&i.is(this.navigation.$prevEl)&&(this.isBeginning&&!this.params.loop||this.slidePrev(),this.isBeginning?this.a11y.notify(t.firstSlideMessage):this.a11y.notify(t.prevSlideMessage)),this.pagination&&i.is("."+this.params.pagination.bulletClass)&&i[0].click()}},notify:function(e){var t=this.a11y.liveRegion;0!==t.length&&(t.html(""),t.html(e))},updateNavigation:function(){if(!this.params.loop){var e=this.navigation,t=e.$nextEl,i=e.$prevEl;i&&i.length>0&&(this.isBeginning?this.a11y.disableEl(i):this.a11y.enableEl(i)),t&&t.length>0&&(this.isEnd?this.a11y.disableEl(t):this.a11y.enableEl(t))}},updatePagination:function(){var e=this,t=e.params.a11y;e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.bullets.each(function(i,a){var r=s(a);e.a11y.makeElFocusable(r),e.a11y.addElRole(r,"button"),e.a11y.addElLabel(r,t.paginationBulletMessage.replace(/{{index}}/,r.index()+1))})},init:function(){this.$el.append(this.a11y.liveRegion);var e,t,i=this.params.a11y;this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&(this.a11y.makeElFocusable(e),this.a11y.addElRole(e,"button"),this.a11y.addElLabel(e,i.nextSlideMessage),e.on("keydown",this.a11y.onEnterKey)),t&&(this.a11y.makeElFocusable(t),this.a11y.addElRole(t,"button"),this.a11y.addElLabel(t,i.prevSlideMessage),t.on("keydown",this.a11y.onEnterKey)),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.on("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)},destroy:function(){var e,t;this.a11y.liveRegion&&this.a11y.liveRegion.length>0&&this.a11y.liveRegion.remove(),this.navigation&&this.navigation.$nextEl&&(e=this.navigation.$nextEl),this.navigation&&this.navigation.$prevEl&&(t=this.navigation.$prevEl),e&&e.off("keydown",this.a11y.onEnterKey),t&&t.off("keydown",this.a11y.onEnterKey),this.pagination&&this.params.pagination.clickable&&this.pagination.bullets&&this.pagination.bullets.length&&this.pagination.$el.off("keydown","."+this.params.pagination.bulletClass,this.a11y.onEnterKey)}},K={init:function(){if(this.params.history){if(!t.history||!t.history.pushState)return this.params.history.enabled=!1,void(this.params.hashNavigation.enabled=!0);var e=this.history;e.initialized=!0,e.paths=K.getPathValues(),(e.paths.key||e.paths.value)&&(e.scrollToSlide(0,e.paths.value,this.params.runCallbacksOnInit),this.params.history.replaceState||t.addEventListener("popstate",this.history.setHistoryPopState))}},destroy:function(){this.params.history.replaceState||t.removeEventListener("popstate",this.history.setHistoryPopState)},setHistoryPopState:function(){this.history.paths=K.getPathValues(),this.history.scrollToSlide(this.params.speed,this.history.paths.value,!1)},getPathValues:function(){var e=t.location.pathname.slice(1).split("/").filter(function(e){return""!==e}),i=e.length;return{key:e[i-2],value:e[i-1]}},setHistory:function(e,i){if(this.history.initialized&&this.params.history.enabled){var s=this.slides.eq(i),a=K.slugify(s.attr("data-history"));t.location.pathname.includes(e)||(a=e+"/"+a);var r=t.history.state;r&&r.value===a||(this.params.history.replaceState?t.history.replaceState({value:a},null,a):t.history.pushState({value:a},null,a))}},slugify:function(e){return e.toString().toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,t,i){if(t)for(var s=0,a=this.slides.length;s<a;s+=1){var r=this.slides.eq(s);if(K.slugify(r.attr("data-history"))===t&&!r.hasClass(this.params.slideDuplicateClass)){var n=r.index();this.slideTo(n,e,i)}}else this.slideTo(0,e,i)}},U={onHashCange:function(){var t=e.location.hash.replace("#","");t!==this.slides.eq(this.activeIndex).attr("data-hash")&&this.slideTo(this.$wrapperEl.children("."+this.params.slideClass+'[data-hash="'+t+'"]').index())},setHash:function(){if(this.hashNavigation.initialized&&this.params.hashNavigation.enabled)if(this.params.hashNavigation.replaceState&&t.history&&t.history.replaceState)t.history.replaceState(null,null,"#"+this.slides.eq(this.activeIndex).attr("data-hash")||"");else{var i=this.slides.eq(this.activeIndex),s=i.attr("data-hash")||i.attr("data-history");e.location.hash=s||""}},init:function(){if(!(!this.params.hashNavigation.enabled||this.params.history&&this.params.history.enabled)){this.hashNavigation.initialized=!0;var i=e.location.hash.replace("#","");if(i)for(var a=0,r=this.slides.length;a<r;a+=1){var n=this.slides.eq(a);if((n.attr("data-hash")||n.attr("data-history"))===i&&!n.hasClass(this.params.slideDuplicateClass)){var o=n.index();this.slideTo(o,0,this.params.runCallbacksOnInit,!0)}}this.params.hashNavigation.watchState&&s(t).on("hashchange",this.hashNavigation.onHashCange)}},destroy:function(){this.params.hashNavigation.watchState&&s(t).off("hashchange",this.hashNavigation.onHashCange)}},_={run:function(){var e=this,t=e.slides.eq(e.activeIndex),i=e.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(i=t.attr("data-swiper-autoplay")||e.params.autoplay.delay),e.autoplay.timeout=d.nextTick(function(){e.params.autoplay.reverseDirection?e.params.loop?(e.loopFix(),e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.isBeginning?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(e.slides.length-1,e.params.speed,!0,!0),e.emit("autoplay")):(e.slidePrev(e.params.speed,!0,!0),e.emit("autoplay")):e.params.loop?(e.loopFix(),e.slideNext(e.params.speed,!0,!0),e.emit("autoplay")):e.isEnd?e.params.autoplay.stopOnLastSlide?e.autoplay.stop():(e.slideTo(0,e.params.speed,!0,!0),e.emit("autoplay")):(e.slideNext(e.params.speed,!0,!0),e.emit("autoplay"))},i)},start:function(){return void 0===this.autoplay.timeout&&(!this.autoplay.running&&(this.autoplay.running=!0,this.emit("autoplayStart"),this.autoplay.run(),!0))},stop:function(){return!!this.autoplay.running&&(void 0!==this.autoplay.timeout&&(this.autoplay.timeout&&(clearTimeout(this.autoplay.timeout),this.autoplay.timeout=void 0),this.autoplay.running=!1,this.emit("autoplayStop"),!0))},pause:function(e){this.autoplay.running&&(this.autoplay.paused||(this.autoplay.timeout&&clearTimeout(this.autoplay.timeout),this.autoplay.paused=!0,0!==e&&this.params.autoplay.waitForTransition?(this.$wrapperEl[0].addEventListener("transitionend",this.autoplay.onTransitionEnd),this.$wrapperEl[0].addEventListener("webkitTransitionEnd",this.autoplay.onTransitionEnd)):(this.autoplay.paused=!1,this.autoplay.run())))}},Z={setTranslate:function(){for(var e=this.slides,t=0;t<e.length;t+=1){var i=this.slides.eq(t),s=-i[0].swiperSlideOffset;this.params.virtualTranslate||(s-=this.translate);var a=0;this.isHorizontal()||(a=s,s=0);var r=this.params.fadeEffect.crossFade?Math.max(1-Math.abs(i[0].progress),0):1+Math.min(Math.max(i[0].progress,-1),0);i.css({opacity:r}).transform("translate3d("+s+"px, "+a+"px, 0px)")}},setTransition:function(e){var t=this,i=t.slides,s=t.$wrapperEl;if(i.transition(e),t.params.virtualTranslate&&0!==e){var a=!1;i.transitionEnd(function(){if(!a&&t&&!t.destroyed){a=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)s.trigger(e[i])}})}}},Q={setTranslate:function(){var e,t=this.$el,i=this.$wrapperEl,a=this.slides,r=this.width,n=this.height,o=this.rtlTranslate,l=this.size,d=this.params.cubeEffect,h=this.isHorizontal(),p=this.virtual&&this.params.virtual.enabled,c=0;d.shadow&&(h?(0===(e=i.find(".swiper-cube-shadow")).length&&(e=s('<div class="swiper-cube-shadow"></div>'),i.append(e)),e.css({height:r+"px"})):0===(e=t.find(".swiper-cube-shadow")).length&&(e=s('<div class="swiper-cube-shadow"></div>'),t.append(e)));for(var u=0;u<a.length;u+=1){var v=a.eq(u),f=u;p&&(f=parseInt(v.attr("data-swiper-slide-index"),10));var m=90*f,g=Math.floor(m/360);o&&(m=-m,g=Math.floor(-m/360));var b=Math.max(Math.min(v[0].progress,1),-1),w=0,y=0,x=0;f%4==0?(w=4*-g*l,x=0):(f-1)%4==0?(w=0,x=4*-g*l):(f-2)%4==0?(w=l+4*g*l,x=l):(f-3)%4==0&&(w=-l,x=3*l+4*l*g),o&&(w=-w),h||(y=w,w=0);var E="rotateX("+(h?0:-m)+"deg) rotateY("+(h?m:0)+"deg) translate3d("+w+"px, "+y+"px, "+x+"px)";if(b<=1&&b>-1&&(c=90*f+90*b,o&&(c=90*-f-90*b)),v.transform(E),d.slideShadows){var T=h?v.find(".swiper-slide-shadow-left"):v.find(".swiper-slide-shadow-top"),C=h?v.find(".swiper-slide-shadow-right"):v.find(".swiper-slide-shadow-bottom");0===T.length&&(T=s('<div class="swiper-slide-shadow-'+(h?"left":"top")+'"></div>'),v.append(T)),0===C.length&&(C=s('<div class="swiper-slide-shadow-'+(h?"right":"bottom")+'"></div>'),v.append(C)),T.length&&(T[0].style.opacity=Math.max(-b,0)),C.length&&(C[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(h)e.transform("translate3d(0px, "+(r/2+d.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var M=Math.abs(c)-90*Math.floor(Math.abs(c)/90),z=1.5-(Math.sin(2*M*Math.PI/360)/2+Math.cos(2*M*Math.PI/360)/2),k=d.shadowScale,P=d.shadowScale/z,$=d.shadowOffset;e.transform("scale3d("+k+", 1, "+P+") translate3d(0px, "+(n/2+$)+"px, "+-n/2/P+"px) rotateX(-90deg)")}var L=S.isSafari||S.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+L+"px) rotateX("+(this.isHorizontal()?0:c)+"deg) rotateY("+(this.isHorizontal()?-c:0)+"deg)")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},J={setTranslate:function(){for(var e=this.slides,t=this.rtlTranslate,i=0;i<e.length;i+=1){var a=e.eq(i),r=a[0].progress;this.params.flipEffect.limitRotation&&(r=Math.max(Math.min(a[0].progress,1),-1));var n=-180*r,o=0,l=-a[0].swiperSlideOffset,d=0;if(this.isHorizontal()?t&&(n=-n):(d=l,l=0,o=-n,n=0),a[0].style.zIndex=-Math.abs(Math.round(r))+e.length,this.params.flipEffect.slideShadows){var h=this.isHorizontal()?a.find(".swiper-slide-shadow-left"):a.find(".swiper-slide-shadow-top"),p=this.isHorizontal()?a.find(".swiper-slide-shadow-right"):a.find(".swiper-slide-shadow-bottom");0===h.length&&(h=s('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"left":"top")+'"></div>'),a.append(h)),0===p.length&&(p=s('<div class="swiper-slide-shadow-'+(this.isHorizontal()?"right":"bottom")+'"></div>'),a.append(p)),h.length&&(h[0].style.opacity=Math.max(-r,0)),p.length&&(p[0].style.opacity=Math.max(r,0))}a.transform("translate3d("+l+"px, "+d+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){var t=this,i=t.slides,s=t.activeIndex,a=t.$wrapperEl;if(i.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.virtualTranslate&&0!==e){var r=!1;i.eq(s).transitionEnd(function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],i=0;i<e.length;i+=1)a.trigger(e[i])}})}}},ee={setTranslate:function(){for(var e=this.width,t=this.height,i=this.slides,a=this.$wrapperEl,r=this.slidesSizesGrid,n=this.params.coverflowEffect,o=this.isHorizontal(),l=this.translate,d=o?e/2-l:t/2-l,p=o?n.rotate:-n.rotate,c=n.depth,u=0,v=i.length;u<v;u+=1){var f=i.eq(u),m=r[u],g=(d-f[0].swiperSlideOffset-m/2)/m*n.modifier,b=o?p*g:0,w=o?0:p*g,y=-c*Math.abs(g),x=o?0:n.stretch*g,E=o?n.stretch*g:0;Math.abs(E)<.001&&(E=0),Math.abs(x)<.001&&(x=0),Math.abs(y)<.001&&(y=0),Math.abs(b)<.001&&(b=0),Math.abs(w)<.001&&(w=0);var T="translate3d("+E+"px,"+x+"px,"+y+"px) rotateX("+w+"deg) rotateY("+b+"deg)";if(f.transform(T),f[0].style.zIndex=1-Math.abs(Math.round(g)),n.slideShadows){var S=o?f.find(".swiper-slide-shadow-left"):f.find(".swiper-slide-shadow-top"),C=o?f.find(".swiper-slide-shadow-right"):f.find(".swiper-slide-shadow-bottom");0===S.length&&(S=s('<div class="swiper-slide-shadow-'+(o?"left":"top")+'"></div>'),f.append(S)),0===C.length&&(C=s('<div class="swiper-slide-shadow-'+(o?"right":"bottom")+'"></div>'),f.append(C)),S.length&&(S[0].style.opacity=g>0?g:0),C.length&&(C[0].style.opacity=-g>0?-g:0)}}(h.pointerEvents||h.prefixedPointerEvents)&&(a[0].style.perspectiveOrigin=d+"px 50%")},setTransition:function(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}},te=[P,$,L,I,O,G,N,{name:"mousewheel",params:{mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarged:"container"}},create:function(){d.extend(this,{mousewheel:{enabled:!1,enable:B.enable.bind(this),disable:B.disable.bind(this),handle:B.handle.bind(this),handleMouseEnter:B.handleMouseEnter.bind(this),handleMouseLeave:B.handleMouseLeave.bind(this),lastScrollTime:d.now()}})},on:{init:function(){this.params.mousewheel.enabled&&this.mousewheel.enable()},destroy:function(){this.mousewheel.enabled&&this.mousewheel.disable()}}},{name:"navigation",params:{navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}},create:function(){d.extend(this,{navigation:{init:X.init.bind(this),update:X.update.bind(this),destroy:X.destroy.bind(this)}})},on:{init:function(){this.navigation.init(),this.navigation.update()},toEdge:function(){this.navigation.update()},fromEdge:function(){this.navigation.update()},destroy:function(){this.navigation.destroy()},click:function(e){var t=this.navigation,i=t.$nextEl,a=t.$prevEl;!this.params.navigation.hideOnClick||s(e.target).is(a)||s(e.target).is(i)||(i&&i.toggleClass(this.params.navigation.hiddenClass),a&&a.toggleClass(this.params.navigation.hiddenClass))}}},{name:"pagination",params:{pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:function(e){return e},formatFractionTotal:function(e){return e},bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",modifierClass:"swiper-pagination-",currentClass:"swiper-pagination-current",totalClass:"swiper-pagination-total",hiddenClass:"swiper-pagination-hidden",progressbarFillClass:"swiper-pagination-progressbar-fill",progressbarOppositeClass:"swiper-pagination-progressbar-opposite",clickableClass:"swiper-pagination-clickable",lockClass:"swiper-pagination-lock"}},create:function(){d.extend(this,{pagination:{init:Y.init.bind(this),render:Y.render.bind(this),update:Y.update.bind(this),destroy:Y.destroy.bind(this),dynamicBulletIndex:0}})},on:{init:function(){this.pagination.init(),this.pagination.render(),this.pagination.update()},activeIndexChange:function(){this.params.loop?this.pagination.update():void 0===this.snapIndex&&this.pagination.update()},snapIndexChange:function(){this.params.loop||this.pagination.update()},slidesLengthChange:function(){this.params.loop&&(this.pagination.render(),this.pagination.update())},snapGridLengthChange:function(){this.params.loop||(this.pagination.render(),this.pagination.update())},destroy:function(){this.pagination.destroy()},click:function(e){this.params.pagination.el&&this.params.pagination.hideOnClick&&this.pagination.$el.length>0&&!s(e.target).hasClass(this.params.pagination.bulletClass)&&this.pagination.$el.toggleClass(this.params.pagination.hiddenClass)}}},{name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){d.extend(this,{scrollbar:{init:V.init.bind(this),destroy:V.destroy.bind(this),updateSize:V.updateSize.bind(this),setTranslate:V.setTranslate.bind(this),setTransition:V.setTransition.bind(this),enableDraggable:V.enableDraggable.bind(this),disableDraggable:V.disableDraggable.bind(this),setDragPosition:V.setDragPosition.bind(this),onDragStart:V.onDragStart.bind(this),onDragMove:V.onDragMove.bind(this),onDragEnd:V.onDragEnd.bind(this),isTouched:!1,timeout:null,dragTimeout:null}})},on:{init:function(){this.scrollbar.init(),this.scrollbar.updateSize(),this.scrollbar.setTranslate()},update:function(){this.scrollbar.updateSize()},resize:function(){this.scrollbar.updateSize()},observerUpdate:function(){this.scrollbar.updateSize()},setTranslate:function(){this.scrollbar.setTranslate()},setTransition:function(e){this.scrollbar.setTransition(e)},destroy:function(){this.scrollbar.destroy()}}},{name:"parallax",params:{parallax:{enabled:!1}},create:function(){d.extend(this,{parallax:{setTransform:R.setTransform.bind(this),setTranslate:R.setTranslate.bind(this),setTransition:R.setTransition.bind(this)}})},on:{beforeInit:function(){this.params.parallax.enabled&&(this.params.watchSlidesProgress=!0)},init:function(){this.params.parallax&&this.parallax.setTranslate()},setTranslate:function(){this.params.parallax&&this.parallax.setTranslate()},setTransition:function(e){this.params.parallax&&this.parallax.setTransition(e)}}},{name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create:function(){var e=this,t={enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}};"onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out".split(" ").forEach(function(i){t[i]=F[i].bind(e)}),d.extend(e,{zoom:t})},on:{init:function(){this.params.zoom.enabled&&this.zoom.enable()},destroy:function(){this.zoom.disable()},touchStart:function(e){this.zoom.enabled&&this.zoom.onTouchStart(e)},touchEnd:function(e){this.zoom.enabled&&this.zoom.onTouchEnd(e)},doubleTap:function(e){this.params.zoom.enabled&&this.zoom.enabled&&this.params.zoom.toggle&&this.zoom.toggle(e)},transitionEnd:function(){this.zoom.enabled&&this.params.zoom.enabled&&this.zoom.onTransitionEnd()}}},{name:"lazy",params:{lazy:{enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}},create:function(){d.extend(this,{lazy:{initialImageLoaded:!1,load:W.load.bind(this),loadInSlide:W.loadInSlide.bind(this)}})},on:{beforeInit:function(){this.params.lazy.enabled&&this.params.preloadImages&&(this.params.preloadImages=!1)},init:function(){this.params.lazy.enabled&&!this.params.loop&&0===this.params.initialSlide&&this.lazy.load()},scroll:function(){this.params.freeMode&&!this.params.freeModeSticky&&this.lazy.load()},resize:function(){this.params.lazy.enabled&&this.lazy.load()},scrollbarDragMove:function(){this.params.lazy.enabled&&this.lazy.load()},transitionStart:function(){this.params.lazy.enabled&&(this.params.lazy.loadOnTransitionStart||!this.params.lazy.loadOnTransitionStart&&!this.lazy.initialImageLoaded)&&this.lazy.load()},transitionEnd:function(){this.params.lazy.enabled&&!this.params.lazy.loadOnTransitionStart&&this.lazy.load()}}},{name:"controller",params:{controller:{control:void 0,inverse:!1,by:"slide"}},create:function(){d.extend(this,{controller:{control:this.params.controller.control,getInterpolateFunction:q.getInterpolateFunction.bind(this),setTranslate:q.setTranslate.bind(this),setTransition:q.setTransition.bind(this)}})},on:{update:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},resize:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},observerUpdate:function(){this.controller.control&&this.controller.spline&&(this.controller.spline=void 0,delete this.controller.spline)},setTranslate:function(e,t){this.controller.control&&this.controller.setTranslate(e,t)},setTransition:function(e,t){this.controller.control&&this.controller.setTransition(e,t)}}},{name:"a11y",params:{a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}"}},create:function(){var e=this;d.extend(e,{a11y:{liveRegion:s('<span class="'+e.params.a11y.notificationClass+'" aria-live="assertive" aria-atomic="true"></span>')}}),Object.keys(j).forEach(function(t){e.a11y[t]=j[t].bind(e)})},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){d.extend(this,{history:{init:K.init.bind(this),setHistory:K.setHistory.bind(this),setHistoryPopState:K.setHistoryPopState.bind(this),scrollToSlide:K.scrollToSlide.bind(this),destroy:K.destroy.bind(this)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){d.extend(this,{hashNavigation:{initialized:!1,init:U.init.bind(this),destroy:U.destroy.bind(this),setHash:U.setHash.bind(this),onHashCange:U.onHashCange.bind(this)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){var e=this;d.extend(e,{autoplay:{running:!1,paused:!1,run:_.run.bind(e),start:_.start.bind(e),stop:_.stop.bind(e),pause:_.pause.bind(e),onTransitionEnd:function(t){e&&!e.destroyed&&e.$wrapperEl&&t.target===this&&(e.$wrapperEl[0].removeEventListener("transitionend",e.autoplay.onTransitionEnd),e.$wrapperEl[0].removeEventListener("webkitTransitionEnd",e.autoplay.onTransitionEnd),e.autoplay.paused=!1,e.autoplay.running?e.autoplay.run():e.autoplay.stop())}}})},on:{init:function(){this.params.autoplay.enabled&&this.autoplay.start()},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},destroy:function(){this.autoplay.running&&this.autoplay.stop()}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){d.extend(this,{fadeEffect:{setTranslate:Z.setTranslate.bind(this),setTransition:Z.setTransition.bind(this)}})},on:{beforeInit:function(){if("fade"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"fade");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){d.extend(this,{cubeEffect:{setTranslate:Q.setTranslate.bind(this),setTransition:Q.setTransition.bind(this)}})},on:{beforeInit:function(){if("cube"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"cube"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){d.extend(this,{flipEffect:{setTranslate:J.setTranslate.bind(this),setTransition:J.setTransition.bind(this)}})},on:{beforeInit:function(){if("flip"===this.params.effect){this.classNames.push(this.params.containerModifierClass+"flip"),this.classNames.push(this.params.containerModifierClass+"3d");var e={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};d.extend(this.params,e),d.extend(this.originalParams,e)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){d.extend(this,{coverflowEffect:{setTranslate:ee.setTranslate.bind(this),setTransition:ee.setTransition.bind(this)}})},on:{beforeInit:function(){"coverflow"===this.params.effect&&(this.classNames.push(this.params.containerModifierClass+"coverflow"),this.classNames.push(this.params.containerModifierClass+"3d"),this.params.watchSlidesProgress=!0,this.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}}];return void 0===k.use&&(k.use=k.Class.use,k.installModule=k.Class.installModule),k.use(te),k});
\ No newline at end of file
--- /dev/null
+<?php
+namespace Elementor\Core\Admin;
+
+use Elementor\Api;
+use Elementor\Plugin;
+use Elementor\Settings;
+use Elementor\User;
+use Elementor\Utils;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+class Admin {
+
+ /**
+ * @var \Elementor\Core\Admin\Feedback
+ */
+ private $feedback;
+
+ public function maybe_redirect_to_getting_started() {
+ if ( ! get_transient( 'elementor_activation_redirect' ) ) {
+ return;
+ }
+
+ delete_transient( 'elementor_activation_redirect' );
+
+ if ( is_network_admin() || isset( $_GET['activate-multi'] ) ) {
+ return;
+ }
+
+ global $wpdb;
+
+ $has_elementor_page = ! ! $wpdb->get_var( "SELECT `post_id` FROM `{$wpdb->postmeta}` WHERE `meta_key` = '_elementor_edit_mode' LIMIT 1;" );
+
+ if ( $has_elementor_page ) {
+ return;
+ }
+
+ wp_safe_redirect( admin_url( 'admin.php?page=elementor-getting-started' ) );
+ exit;
+ }
+
+ /**
+ * Enqueue admin scripts.
+ *
+ * Registers all the admin scripts and enqueues them.
+ *
+ * Fired by `admin_enqueue_scripts` action.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function enqueue_scripts() {
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
+ wp_register_script(
+ 'backbone-marionette',
+ ELEMENTOR_ASSETS_URL . 'lib/backbone/backbone.marionette' . $suffix . '.js',
+ [
+ 'backbone',
+ ],
+ '2.4.5',
+ true
+ );
+
+ wp_register_script(
+ 'elementor-dialog',
+ ELEMENTOR_ASSETS_URL . 'lib/dialog/dialog' . $suffix . '.js',
+ [
+ 'jquery-ui-position',
+ ],
+ '4.5.0',
+ true
+ );
+
+ wp_register_script(
+ 'elementor-admin-app',
+ ELEMENTOR_ASSETS_URL . 'js/admin' . $suffix . '.js',
+ [
+ 'jquery',
+ ],
+ ELEMENTOR_VERSION,
+ true
+ );
+
+ wp_localize_script(
+ 'elementor-admin-app',
+ 'ElementorAdminConfig',
+ [
+ 'home_url' => home_url(),
+ 'i18n' => [
+ 'rollback_confirm' => __( 'Are you sure you want to reinstall previous version?', 'elementor' ),
+ 'rollback_to_previous_version' => __( 'Rollback to Previous Version', 'elementor' ),
+ 'yes' => __( 'Yes', 'elementor' ),
+ 'cancel' => __( 'Cancel', 'elementor' ),
+ 'new_template' => __( 'New Template', 'elementor' ),
+ ],
+ ]
+ );
+
+ wp_enqueue_script( 'elementor-admin-app' );
+ }
+
+ /**
+ * Enqueue admin styles.
+ *
+ * Registers all the admin styles and enqueues them.
+ *
+ * Fired by `admin_enqueue_scripts` action.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function enqueue_styles() {
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
+ $direction_suffix = is_rtl() ? '-rtl' : '';
+
+ wp_register_style(
+ 'elementor-icons',
+ ELEMENTOR_ASSETS_URL . 'lib/eicons/css/elementor-icons' . $suffix . '.css',
+ [],
+ '3.8.0'
+ );
+
+ wp_register_style(
+ 'elementor-admin-app',
+ ELEMENTOR_ASSETS_URL . 'css/admin' . $direction_suffix . $suffix . '.css',
+ [
+ 'elementor-icons',
+ ],
+ ELEMENTOR_VERSION
+ );
+
+ wp_enqueue_style( 'elementor-admin-app' );
+
+ // It's for upgrade notice.
+ // TODO: enqueue this just if needed.
+ add_thickbox();
+ }
+
+ /**
+ * Print switch mode button.
+ *
+ * Adds a switch button in post edit screen (which has cpt support). To allow
+ * the user to switch from the native WordPress editor to Elementor builder.
+ *
+ * Fired by `edit_form_after_title` action.
+ *
+ * @since 1.0.0
+ * @access public
+ *
+ * @param \WP_Post $post The current post object.
+ */
+ public function print_switch_mode_button( $post ) {
+ if ( ! User::is_current_user_can_edit( $post->ID ) ) {
+ return;
+ }
+
+ wp_nonce_field( basename( __FILE__ ), '_elementor_edit_mode_nonce' );
+ ?>
+ <div id="elementor-switch-mode">
+ <input id="elementor-switch-mode-input" type="hidden" name="_elementor_post_mode" value="<?php echo Plugin::$instance->db->is_built_with_elementor( $post->ID ); ?>" />
+ <button id="elementor-switch-mode-button" type="button" class="button button-primary button-hero">
+ <span class="elementor-switch-mode-on">
+ <i class="eicon-arrow-<?php echo ( is_rtl() ) ? 'right' : 'left'; ?>" aria-hidden="true"></i>
+ <?php echo __( 'Back to WordPress Editor', 'elementor' ); ?>
+ </span>
+ <span class="elementor-switch-mode-off">
+ <i class="eicon-elementor-square" aria-hidden="true"></i>
+ <?php echo __( 'Edit with Elementor', 'elementor' ); ?>
+ </span>
+ </button>
+ </div>
+ <div id="elementor-editor">
+ <a id="elementor-go-to-edit-page-link" href="<?php echo Utils::get_edit_link( $post->ID ); ?>">
+ <div id="elementor-editor-button" class="button button-primary button-hero">
+ <i class="eicon-elementor-square" aria-hidden="true"></i>
+ <?php echo __( 'Edit with Elementor', 'elementor' ); ?>
+ </div>
+ <div class="elementor-loader-wrapper">
+ <div class="elementor-loader">
+ <div class="elementor-loader-boxes">
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ </div>
+ </div>
+ <div class="elementor-loading-title"><?php echo __( 'Loading', 'elementor' ); ?></div>
+ </div>
+ </a>
+ </div>
+ <?php
+ }
+
+ /**
+ * Save post.
+ *
+ * Flag the post mode when the post is saved.
+ *
+ * Fired by `save_post` action.
+ *
+ * @since 1.0.0
+ * @access public
+ *
+ * @param int $post_id Post ID.
+ */
+ public function save_post( $post_id ) {
+ if ( ! isset( $_POST['_elementor_edit_mode_nonce'] ) || ! wp_verify_nonce( $_POST['_elementor_edit_mode_nonce'], basename( __FILE__ ) ) ) {
+ return;
+ }
+
+ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
+ return;
+ }
+
+ Plugin::$instance->db->set_is_elementor_page( $post_id, ! empty( $_POST['_elementor_post_mode'] ) );
+ }
+
+ /**
+ * Add edit link in dashboard.
+ *
+ * Add an edit link to the post/page action links on the post/pages list table.
+ *
+ * Fired by `post_row_actions` and `page_row_actions` filters.
+ *
+ * @since 1.0.0
+ * @access public
+ *
+ * @param array $actions An array of row action links.
+ * @param \WP_Post $post The post object.
+ *
+ * @return array An updated array of row action links.
+ */
+ public function add_edit_in_dashboard( $actions, \WP_Post $post ) {
+ if ( User::is_current_user_can_edit( $post->ID ) && Plugin::$instance->db->is_built_with_elementor( $post->ID ) ) {
+ $actions['edit_with_elementor'] = sprintf(
+ '<a href="%1$s">%2$s</a>',
+ Utils::get_edit_link( $post->ID ),
+ __( 'Edit with Elementor', 'elementor' )
+ );
+ }
+
+ return $actions;
+ }
+
+ /**
+ * Add Elementor post state.
+ *
+ * Adds a new "Elementor" post state to the post table.
+ *
+ * Fired by `display_post_states` filter.
+ *
+ * @since 1.8.0
+ * @access public
+ *
+ * @param array $post_states An array of post display states.
+ * @param \WP_Post $post The current post object.
+ *
+ * @return array A filtered array of post display states.
+ */
+ public function add_elementor_post_state( $post_states, $post ) {
+ if ( User::is_current_user_can_edit( $post->ID ) && Plugin::$instance->db->is_built_with_elementor( $post->ID ) ) {
+ $post_states['elementor'] = __( 'Elementor', 'elementor' );
+ }
+ return $post_states;
+ }
+
+ /**
+ * Body status classes.
+ *
+ * Adds CSS classes to the admin body tag.
+ *
+ * Fired by `admin_body_class` filter.
+ *
+ * @since 1.0.0
+ * @access public
+ *
+ * @param string $classes Space-separated list of CSS classes.
+ *
+ * @return string Space-separated list of CSS classes.
+ */
+ public function body_status_classes( $classes ) {
+ global $pagenow;
+
+ if ( in_array( $pagenow, [ 'post.php', 'post-new.php' ], true ) && Utils::is_post_support() ) {
+ $post = get_post();
+
+ $mode_class = Plugin::$instance->db->is_built_with_elementor( $post->ID ) ? 'elementor-editor-active' : 'elementor-editor-inactive';
+
+ $classes .= ' ' . $mode_class;
+ }
+
+ return $classes;
+ }
+
+ /**
+ * Plugin action links.
+ *
+ * Adds action links to the plugin list table
+ *
+ * Fired by `plugin_action_links` filter.
+ *
+ * @since 1.0.0
+ * @access public
+ *
+ * @param array $links An array of plugin action links.
+ *
+ * @return array An array of plugin action links.
+ */
+ public function plugin_action_links( $links ) {
+ $settings_link = sprintf( '<a href="%1$s">%2$s</a>', admin_url( 'admin.php?page=' . Settings::PAGE_ID ), __( 'Settings', 'elementor' ) );
+
+ array_unshift( $links, $settings_link );
+
+ $links['go_pro'] = sprintf( '<a href="%1$s" target="_blank" class="elementor-plugins-gopro">%2$s</a>', Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=wp-plugins&utm_campaign=gopro&utm_medium=wp-dash' ), __( 'Go Pro', 'elementor' ) );
+
+ return $links;
+ }
+
+ /**
+ * Plugin row meta.
+ *
+ * Adds row meta links to the plugin list table
+ *
+ * Fired by `plugin_row_meta` filter.
+ *
+ * @since 1.1.4
+ * @access public
+ *
+ * @param array $plugin_meta An array of the plugin's metadata, including
+ * the version, author, author URI, and plugin URI.
+ * @param string $plugin_file Path to the plugin file, relative to the plugins
+ * directory.
+ *
+ * @return array An array of plugin row meta links.
+ */
+ public function plugin_row_meta( $plugin_meta, $plugin_file ) {
+ if ( ELEMENTOR_PLUGIN_BASE === $plugin_file ) {
+ $row_meta = [
+ 'docs' => '<a href="https://go.elementor.com/docs-admin-plugins/" aria-label="' . esc_attr( __( 'View Elementor Documentation', 'elementor' ) ) . '" target="_blank">' . __( 'Docs & FAQs', 'elementor' ) . '</a>',
+ 'ideo' => '<a href="https://go.elementor.com/yt-admin-plugins/" aria-label="' . esc_attr( __( 'View Elementor Video Tutorials', 'elementor' ) ) . '" target="_blank">' . __( 'Video Tutorials', 'elementor' ) . '</a>',
+ ];
+
+ $plugin_meta = array_merge( $plugin_meta, $row_meta );
+ }
+
+ return $plugin_meta;
+ }
+
+ /**
+ * Admin notices.
+ *
+ * Add Elementor notices to WordPress admin screen.
+ *
+ * Fired by `admin_notices` action.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function admin_notices() {
+ $upgrade_notice = Api::get_upgrade_notice();
+ if ( empty( $upgrade_notice ) ) {
+ return;
+ }
+
+ if ( ! current_user_can( 'update_plugins' ) ) {
+ return;
+ }
+
+ if ( ! in_array( get_current_screen()->id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
+ return;
+ }
+
+ // Check if have any upgrades.
+ $update_plugins = get_site_transient( 'update_plugins' );
+
+ $has_remote_update_package = ! ( empty( $update_plugins ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ] ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ]->package ) );
+
+ if ( ! $has_remote_update_package && empty( $upgrade_notice['update_link'] ) ) {
+ return;
+ }
+
+ if ( $has_remote_update_package ) {
+ $product = $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ];
+
+ $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $product->slug . '§ion=changelog&TB_iframe=true&width=600&height=800' );
+ $upgrade_url = wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' . ELEMENTOR_PLUGIN_BASE ), 'upgrade-plugin_' . ELEMENTOR_PLUGIN_BASE );
+ $new_version = $product->new_version;
+ } else {
+ $upgrade_url = $upgrade_notice['update_link'];
+ $details_url = $upgrade_url;
+
+ $new_version = $upgrade_notice['version'];
+ }
+
+ // Check if have upgrade notices to show.
+ if ( version_compare( ELEMENTOR_VERSION, $upgrade_notice['version'], '>=' ) ) {
+ return;
+ }
+
+ $notice_id = 'upgrade_notice_' . $upgrade_notice['version'];
+ if ( User::is_user_notice_viewed( $notice_id ) ) {
+ return;
+ }
+ ?>
+ <div class="notice updated is-dismissible elementor-message elementor-message-dismissed" data-notice_id="<?php echo esc_attr( $notice_id ); ?>">
+ <div class="elementor-message-inner">
+ <div class="elementor-message-icon">
+ <div class="e-logo-wrapper">
+ <i class="eicon-elementor" aria-hidden="true"></i>
+ </div>
+ </div>
+ <div class="elementor-message-content">
+ <strong><?php echo __( 'Update Notification', 'elementor' ); ?></strong>
+ <p>
+ <?php
+ printf(
+ /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text */
+ __( 'There is a new version of Elementor Page Builder available. <a href="%1$s" class="thickbox open-plugin-details-modal" aria-label="%2$s">View version %3$s details</a> or <a href="%4$s" class="update-link" aria-label="%5$s">update now</a>.', 'elementor' ),
+ esc_url( $details_url ),
+ esc_attr( sprintf(
+ /* translators: %s: Elementor version */
+ __( 'View Elementor version %s details', 'elementor' ),
+ $new_version
+ ) ),
+ $new_version,
+ esc_url( $upgrade_url ),
+ esc_attr( __( 'Update Elementor Now', 'elementor' ) )
+ );
+ ?>
+ </p>
+ </div>
+ <div class="elementor-message-action">
+ <a class="button elementor-button" href="<?php echo $upgrade_url; ?>">
+ <i class="dashicons dashicons-update" aria-hidden="true"></i>
+ <?php echo __( 'Update Now', 'elementor' ); ?>
+ </a>
+ </div>
+ </div>
+ </div>
+ <?php
+ }
+
+ /**
+ * Admin footer text.
+ *
+ * Modifies the "Thank you" text displayed in the admin footer.
+ *
+ * Fired by `admin_footer_text` filter.
+ *
+ * @since 1.0.0
+ * @access public
+ *
+ * @param string $footer_text The content that will be printed.
+ *
+ * @return string The content that will be printed.
+ */
+ public function admin_footer_text( $footer_text ) {
+ $current_screen = get_current_screen();
+ $is_elementor_screen = ( $current_screen && false !== strpos( $current_screen->id, 'elementor' ) );
+
+ if ( $is_elementor_screen ) {
+ $footer_text = sprintf(
+ /* translators: 1: Elementor, 2: Link to plugin review */
+ __( 'Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!', 'elementor' ),
+ '<strong>' . __( 'Elementor', 'elementor' ) . '</strong>',
+ '<a href="https://go.elementor.com/admin-review/" target="_blank">★★★★★</a>'
+ );
+ }
+
+ return $footer_text;
+ }
+
+ /**
+ * Register dashboard widgets.
+ *
+ * Adds a new Elementor widgets to WordPress dashboard.
+ *
+ * Fired by `wp_dashboard_setup` action.
+ *
+ * @since 1.9.0
+ * @access public
+ */
+ public function register_dashboard_widgets() {
+ wp_add_dashboard_widget( 'e-dashboard-overview', __( 'Elementor Overview', 'elementor' ), [ $this, 'elementor_dashboard_overview_widget' ] );
+
+ // Move our widget to top.
+ global $wp_meta_boxes;
+
+ $dashboard = $wp_meta_boxes['dashboard']['normal']['core'];
+ $ours = [
+ 'e-dashboard-overview' => $dashboard['e-dashboard-overview'],
+ ];
+
+ $wp_meta_boxes['dashboard']['normal']['core'] = array_merge( $ours, $dashboard ); // WPCS: override ok.
+ }
+
+ /**
+ * Elementor dashboard widget.
+ *
+ * Displays the Elementor dashboard widget.
+ *
+ * Fired by `wp_add_dashboard_widget` function.
+ *
+ * @since 1.9.0
+ * @access public
+ */
+ public function elementor_dashboard_overview_widget() {
+ $elementor_feed = Api::get_feed_data();
+
+ $recently_edited_query_args = [
+ 'post_type' => 'any',
+ 'post_status' => [ 'publish', 'draft' ],
+ 'posts_per_page' => '3',
+ 'meta_key' => '_elementor_edit_mode',
+ 'meta_value' => 'builder',
+ 'orderby' => 'modified',
+ ];
+
+ $recently_edited_query = new \WP_Query( $recently_edited_query_args );
+
+ if ( User::is_current_user_can_edit_post_type( 'page' ) ) {
+ $create_new_label = __( 'Create New Page', 'elementor' );
+ $create_new_post_type = 'page';
+ } elseif ( User::is_current_user_can_edit_post_type( 'post' ) ) {
+ $create_new_label = __( 'Create New Post', 'elementor' );
+ $create_new_post_type = 'post';
+ }
+ ?>
+ <div class="e-dashboard-widget">
+ <div class="e-overview__header">
+ <div class="e-overview__logo"><div class="e-logo-wrapper"><i class="eicon-elementor"></i></div></div>
+ <div class="e-overview__versions">
+ <span class="e-overview__version"><?php echo __( 'Elementor', 'elementor' ); ?> v<?php echo ELEMENTOR_VERSION; ?></span>
+ <?php
+ /**
+ * Elementor dashboard widget after the version.
+ *
+ * Fires after Elementor version display in the dashboard widget.
+ *
+ * @since 1.9.0
+ */
+ do_action( 'elementor/admin/dashboard_overview_widget/after_version' );
+ ?>
+ </div>
+ <?php if ( ! empty( $create_new_post_type ) ) : ?>
+ <div class="e-overview__create">
+ <a href="<?php echo esc_url( Utils::get_create_new_post_url( $create_new_post_type ) ); ?>" class="button"><span aria-hidden="true" class="dashicons dashicons-plus"></span> <?php echo esc_html( $create_new_label ); ?></a>
+ </div>
+ <?php endif; ?>
+ </div>
+ <?php if ( $recently_edited_query->have_posts() ) : ?>
+ <div class="e-overview__recently-edited">
+ <h3 class="e-overview__heading"><?php echo __( 'Recently Edited', 'elementor' ); ?></h3>
+ <ul class="e-overview__posts">
+ <?php
+ while ( $recently_edited_query->have_posts() ) :
+ $recently_edited_query->the_post();
+
+ $date = date_i18n( _x( 'M jS', 'Dashboard Overview Widget Recently Date', 'elementor' ), get_the_modified_time( 'U' ) );
+ ?>
+ <li class="e-overview__post">
+ <a href="<?php echo esc_attr( Utils::get_edit_link( get_the_ID() ) ); ?>" class="e-overview__post-link"><?php the_title(); ?> <span class="dashicons dashicons-edit"></span></a> <span><?php echo $date; ?>, <?php the_time(); ?></span>
+ </li>
+ <?php endwhile; ?>
+ </ul>
+ </div>
+ <?php endif; ?>
+ <?php if ( ! empty( $elementor_feed ) ) : ?>
+ <div class="e-overview__feed">
+ <h3 class="e-overview__heading"><?php echo __( 'News & Updates', 'elementor' ); ?></h3>
+ <ul class="e-overview__posts">
+ <?php foreach ( $elementor_feed as $feed_item ) : ?>
+ <li class="e-overview__post">
+ <a href="<?php echo esc_url( $feed_item['url'] ); ?>" class="e-overview__post-link" target="_blank">
+ <?php if ( ! empty( $feed_item['badge'] ) ) : ?>
+ <span class="e-overview__badge"><?php echo esc_html( $feed_item['badge'] ); ?></span>
+ <?php endif; ?>
+ <?php echo esc_html( $feed_item['title'] ); ?>
+ </a>
+ <p class="e-overview__post-description"><?php echo esc_html( $feed_item['excerpt'] ); ?></p>
+ </li>
+ <?php endforeach; ?>
+ </ul>
+ </div>
+ <?php endif; ?>
+ <div class="e-overview__footer">
+ <ul>
+ <?php foreach ( $this->get_dashboard_overview_widget_footer_actions() as $action_id => $action ) : ?>
+ <li class="e-overview__<?php echo esc_attr( $action_id ); ?>"><a href="<?php echo esc_attr( $action['link'] ); ?>" target="_blank"><?php echo esc_html( $action['title'] ); ?> <span class="screen-reader-text"><?php echo __( '(opens in a new window)', 'elementor' ); ?></span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></li>
+ <?php endforeach; ?>
+ </ul>
+ </div>
+ </div>
+ <?php
+ }
+
+ /**
+ * Get elementor dashboard overview widget footer actions.
+ *
+ * Retrieves the footer action links displayed in elementor dashboard widget.
+ *
+ * @since 1.9.0
+ * @access private
+ */
+ private function get_dashboard_overview_widget_footer_actions() {
+ $base_actions = [
+ 'blog' => [
+ 'title' => __( 'Blog', 'elementor' ),
+ 'link' => 'https://go.elementor.com/overview-widget-blog/',
+ ],
+ 'help' => [
+ 'title' => __( 'Help', 'elementor' ),
+ 'link' => 'https://go.elementor.com/overview-widget-docs/',
+ ],
+ ];
+
+ $additions_actions = [
+ 'go-pro' => [
+ 'title' => __( 'Go Pro', 'elementor' ),
+ 'link' => Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=wp-overview-widget&utm_campaign=gopro&utm_medium=wp-dash' ),
+ ],
+ ];
+
+ /**
+ * Dashboard widget footer actions.
+ *
+ * Filters the additions actions displayed in Elementor dashboard widget.
+ *
+ * Developers can add new action links to Elementor dashboard widget
+ * footer using this filter.
+ *
+ * @since 1.9.0
+ *
+ * @param array $additions_actions Elementor dashboard widget footer actions.
+ */
+ $additions_actions = apply_filters( 'elementor/admin/dashboard_overview_widget/footer_actions', $additions_actions );
+
+ $actions = $base_actions + $additions_actions;
+
+ return $actions;
+ }
+
+ /**
+ * Admin action new post.
+ *
+ * When a new post action is fired the title is set to 'Elementor' and the post ID.
+ *
+ * Fired by `admin_action_elementor_new_post` action.
+ *
+ * @since 1.9.0
+ * @access public
+ */
+ public function admin_action_new_post() {
+ check_admin_referer( 'elementor_action_new_post' );
+
+ if ( empty( $_GET['post_type'] ) ) {
+ $post_type = 'post';
+ } else {
+ $post_type = $_GET['post_type'];
+ }
+
+ if ( ! User::is_current_user_can_edit_post_type( $post_type ) ) {
+ return;
+ }
+
+ if ( empty( $_GET['template_type'] ) ) {
+ $type = 'post';
+ } else {
+ $type = $_GET['template_type']; // XSS ok.
+ }
+
+ $post_data = isset( $_GET['post_data'] ) ? $_GET['post_data'] : [];
+
+ $meta = [];
+
+ /**
+ * Create new post meta data.
+ *
+ * Filters the meta data of any new post created.
+ *
+ * @since 2.0.0
+ *
+ * @param array $meta Post meta data.
+ */
+ $meta = apply_filters( 'elementor/admin/create_new_post/meta', $meta );
+
+ $post_data['post_type'] = $post_type;
+
+ $document = Plugin::$instance->documents->create( $type, $post_data, $meta );
+
+ wp_redirect( $document->get_edit_url() );
+ die;
+ }
+
+ public function print_new_template_template() {
+ $this->print_library_layout_template();
+
+ include ELEMENTOR_PATH . 'includes/admin-templates/new-template.php';
+ }
+
+ public function enqueue_new_template_scripts() {
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
+ wp_enqueue_script(
+ 'elementor-new-template',
+ ELEMENTOR_ASSETS_URL . 'js/new-template' . $suffix . '.js',
+ [
+ 'backbone-marionette',
+ 'elementor-dialog',
+ ],
+ ELEMENTOR_VERSION,
+ true
+ );
+ }
+
+ public function init_new_template() {
+ if ( 'edit-elementor_library' !== get_current_screen()->id ) {
+ return;
+ }
+
+ add_action( 'admin_footer', [ $this, 'print_new_template_template' ] );
+
+ add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_new_template_scripts' ] );
+ }
+
+ /**
+ * Admin constructor.
+ *
+ * Initializing Elementor in WordPress admin.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function __construct() {
+ $this->feedback = new Feedback();
+
+ add_action( 'admin_init', [ $this, 'maybe_redirect_to_getting_started' ] );
+
+ add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
+ add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_styles' ] );
+
+ add_action( 'edit_form_after_title', [ $this, 'print_switch_mode_button' ] );
+ add_action( 'save_post', [ $this, 'save_post' ] );
+
+ add_filter( 'page_row_actions', [ $this, 'add_edit_in_dashboard' ], 10, 2 );
+ add_filter( 'post_row_actions', [ $this, 'add_edit_in_dashboard' ], 10, 2 );
+
+ add_filter( 'display_post_states', [ $this, 'add_elementor_post_state' ], 10, 2 );
+
+ add_filter( 'plugin_action_links_' . ELEMENTOR_PLUGIN_BASE, [ $this, 'plugin_action_links' ] );
+ add_filter( 'plugin_row_meta', [ $this, 'plugin_row_meta' ], 10, 2 );
+
+ add_action( 'admin_notices', [ $this, 'admin_notices' ] );
+ add_filter( 'admin_body_class', [ $this, 'body_status_classes' ] );
+ add_filter( 'admin_footer_text', [ $this, 'admin_footer_text' ] );
+
+ // Register Dashboard Widgets.
+ add_action( 'wp_dashboard_setup', [ $this, 'register_dashboard_widgets' ] );
+
+ // Admin Actions
+ add_action( 'admin_action_elementor_new_post', [ $this, 'admin_action_new_post' ] );
+
+ add_action( 'current_screen', [ $this, 'init_new_template' ] );
+ }
+
+ private function print_library_layout_template() {
+ include ELEMENTOR_PATH . 'includes/editor-templates/library-layout.php';
+ }
+}
--- /dev/null
+<?php
+namespace Elementor\Core\Admin;
+
+use Elementor\Api;
+use Elementor\Tracker;
+use Elementor\User;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+class Feedback {
+
+ /**
+ * Enqueue feedback dialog scripts.
+ *
+ * Registers the feedback dialog scripts and enqueues them.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function enqueue_feedback_dialog_scripts() {
+ if ( ! in_array( get_current_screen()->id, [ 'plugins', 'plugins-network' ], true ) ) {
+ return;
+ }
+
+ add_action( 'admin_footer', [ $this, 'print_deactivate_feedback_dialog' ] );
+
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
+ wp_register_script(
+ 'elementor-admin-feedback',
+ ELEMENTOR_ASSETS_URL . 'js/admin-feedback' . $suffix . '.js',
+ [
+ 'jquery',
+ 'underscore',
+ 'elementor-dialog',
+ ],
+ ELEMENTOR_VERSION,
+ true
+ );
+
+ wp_enqueue_script( 'elementor-admin-feedback' );
+
+ wp_localize_script(
+ 'elementor-admin-feedback',
+ 'ElementorAdminFeedbackArgs',
+ [
+ 'is_tracker_opted_in' => Tracker::is_allow_track(),
+ 'i18n' => [
+ 'submit_n_deactivate' => __( 'Submit & Deactivate', 'elementor' ),
+ 'skip_n_deactivate' => __( 'Skip & Deactivate', 'elementor' ),
+ ],
+ ]
+ );
+ }
+
+ /**
+ * Print deactivate feedback dialog.
+ *
+ * Display a dialog box to ask the user why he deactivated Elementor.
+ *
+ * Fired by `admin_footer` filter.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function print_deactivate_feedback_dialog() {
+ $deactivate_reasons = [
+ 'no_longer_needed' => [
+ 'title' => __( 'I no longer need the plugin', 'elementor' ),
+ 'input_placeholder' => '',
+ ],
+ 'found_a_better_plugin' => [
+ 'title' => __( 'I found a better plugin', 'elementor' ),
+ 'input_placeholder' => __( 'Please share which plugin', 'elementor' ),
+ ],
+ 'couldnt_get_the_plugin_to_work' => [
+ 'title' => __( 'I couldn\'t get the plugin to work', 'elementor' ),
+ 'input_placeholder' => '',
+ ],
+ 'temporary_deactivation' => [
+ 'title' => __( 'It\'s a temporary deactivation', 'elementor' ),
+ 'input_placeholder' => '',
+ ],
+ 'elementor_pro' => [
+ 'title' => __( 'I have Elementor Pro', 'elementor' ),
+ 'input_placeholder' => '',
+ 'alert' => __( 'Wait! Don\'t deactivate Elementor. You have to activate both Elementor and Elementor Pro in order for the plugin to work.', 'elementor' ),
+ ],
+ 'other' => [
+ 'title' => __( 'Other', 'elementor' ),
+ 'input_placeholder' => __( 'Please share the reason', 'elementor' ),
+ ],
+ ];
+
+ ?>
+ <div id="elementor-deactivate-feedback-dialog-wrapper">
+ <div id="elementor-deactivate-feedback-dialog-header">
+ <i class="eicon-elementor-square" aria-hidden="true"></i>
+ <span id="elementor-deactivate-feedback-dialog-header-title"><?php echo __( 'Quick Feedback', 'elementor' ); ?></span>
+ </div>
+ <form id="elementor-deactivate-feedback-dialog-form" method="post">
+ <?php
+ wp_nonce_field( '_elementor_deactivate_feedback_nonce' );
+ ?>
+ <input type="hidden" name="action" value="elementor_deactivate_feedback" />
+
+ <div id="elementor-deactivate-feedback-dialog-form-caption"><?php echo __( 'If you have a moment, please share why you are deactivating Elementor:', 'elementor' ); ?></div>
+ <div id="elementor-deactivate-feedback-dialog-form-body">
+ <?php foreach ( $deactivate_reasons as $reason_key => $reason ) : ?>
+ <div class="elementor-deactivate-feedback-dialog-input-wrapper">
+ <input id="elementor-deactivate-feedback-<?php echo esc_attr( $reason_key ); ?>" class="elementor-deactivate-feedback-dialog-input" type="radio" name="reason_key" value="<?php echo esc_attr( $reason_key ); ?>" />
+ <label for="elementor-deactivate-feedback-<?php echo esc_attr( $reason_key ); ?>" class="elementor-deactivate-feedback-dialog-label"><?php echo esc_html( $reason['title'] ); ?></label>
+ <?php if ( ! empty( $reason['input_placeholder'] ) ) : ?>
+ <input class="elementor-feedback-text" type="text" name="reason_<?php echo esc_attr( $reason_key ); ?>" placeholder="<?php echo esc_attr( $reason['input_placeholder'] ); ?>" />
+ <?php endif; ?>
+ <?php if ( ! empty( $reason['alert'] ) ) : ?>
+ <div class="elementor-feedback-text"><?php echo esc_html( $reason['alert'] ); ?></div>
+ <?php endif; ?>
+ </div>
+ <?php endforeach; ?>
+ </div>
+ </form>
+ </div>
+ <?php
+ }
+
+ /**
+ * Ajax elementor deactivate feedback.
+ *
+ * Send the user feedback when Elementor is deactivated.
+ *
+ * Fired by `wp_ajax_elementor_deactivate_feedback` action.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function ajax_elementor_deactivate_feedback() {
+ if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], '_elementor_deactivate_feedback_nonce' ) ) {
+ wp_send_json_error();
+ }
+
+ $reason_text = '';
+ $reason_key = '';
+
+ if ( ! empty( $_POST['reason_key'] ) ) {
+ $reason_key = $_POST['reason_key'];
+ }
+
+ if ( ! empty( $_POST[ "reason_{$reason_key}" ] ) ) {
+ $reason_text = $_POST[ "reason_{$reason_key}" ];
+ }
+
+ Api::send_feedback( $reason_key, $reason_text );
+
+ wp_send_json_success();
+ }
+
+ public function admin_notices() {
+ $notice_id = 'rate_us_feedback';
+ if ( User::is_user_notice_viewed( $notice_id ) ) {
+ return;
+ }
+
+ if ( Tracker::is_notice_shown() ) {
+ return;
+ }
+
+ if ( ! in_array( get_current_screen()->id, [ 'dashboard' ], true ) ) {
+ return;
+ }
+
+ $elementor_pages = new \WP_Query( [
+ 'post_type' => 'any',
+ 'post_status' => 'publish',
+ 'fields' => 'ids',
+ 'update_post_meta_cache' => false,
+ 'update_post_term_cache' => false,
+ 'meta_key' => '_elementor_edit_mode',
+ 'meta_value' => 'builder',
+ ] );
+
+ if ( 10 > $elementor_pages->post_count ) {
+ return;
+ }
+
+ ?>
+ <div class="notice updated is-dismissible elementor-message elementor-message-dismissed" data-notice_id="<?php echo esc_attr( $notice_id ); ?>">
+ <div class="elementor-message-inner">
+ <div class="elementor-message-icon">
+ <div class="e-logo-wrapper">
+ <i class="eicon-elementor" aria-hidden="true"></i>
+ </div>
+ </div>
+ <div class="elementor-message-content">
+ <p><strong><?php echo __( 'Congrats!', 'elementor' ); ?></strong> <?php _e( 'You created over 10 pages with Elementor. Great job! If you can spare a minute, please help us by leaving a five star review on WordPress.org.', 'elementor' ); ?></p>
+ <p class="elementor-message-actions">
+ <a href="https://go.elementor.com/admin-review/" target="_blank" class="button button-primary"><?php _e( 'Happy To Help', 'elementor' ); ?></a>
+ <a href="#" class="button elementor-button-notice-dismiss"><?php _e( 'Hide Notification', 'elementor' ); ?></a>
+ </p>
+ </div>
+ </div>
+ </div>
+ <?php
+ }
+
+ public function __construct() {
+ add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_feedback_dialog_scripts' ] );
+
+ // Ajax.
+ add_action( 'wp_ajax_elementor_deactivate_feedback', [ $this, 'ajax_elementor_deactivate_feedback' ] );
+
+ // Review Plugin
+ add_action( 'admin_notices', [ $this, 'admin_notices' ], 20 );
+ }
+}
foreach ( $this->requests as $id => $action_data ) {
$this->current_action_id = $id;
+
if ( ! isset( $this->ajax_actions[ $action_data['action'] ] ) ) {
$this->add_response_data( false, __( 'Action not found.', 'elementor' ), Exceptions::BAD_REQUEST );
+
continue;
}
try {
$results = call_user_func( $this->ajax_actions[ $action_data['action'] ]['callback'], $action_data['data'], $this );
+
if ( false === $results ) {
$this->add_response_data( false );
} else {
<?php
namespace Elementor\Core\Base;
+use Elementor\Core\Files\CSS\Post as Post_CSS;
use Elementor\Core\Utils\Exceptions;
use Elementor\Plugin;
use Elementor\DB;
use Elementor\Controls_Manager;
use Elementor\Controls_Stack;
-use Elementor\Post_CSS_File;
use Elementor\User;
use Elementor\Core\Settings\Manager as SettingsManager;
use Elementor\Utils;
*/
const TYPE_META_KEY = '_elementor_template_type';
+ private static $properties = [];
+
/**
* Document post data.
*
*/
protected $post;
+ protected static function get_editor_panel_categories() {
+ return Plugin::$instance->elements_manager->get_categories();
+ }
+
/**
* Get properties.
*
];
}
- /**
- * Set post data.
- *
- * Set new post data to the document.
- *
- * @since 2.0.0
- * @access public
- *
- * @param \WP_Post $post WordPress post data.
- *
- * @return Document Document post data.
- */
- public function setPost( $post ) {
- $this->post = $post;
-
- return $this;
+ public static function get_editor_panel_config() {
+ return [
+ 'elements_categories' => static::get_editor_panel_categories(),
+ 'messages' => [
+ /* translators: %s: the document title. */
+ 'publish_notification' => sprintf( __( 'Hurray! Your %s is live.', 'elementor' ), self::get_title() ),
+ ],
+ ];
}
/**
* @return mixed The property value.
*/
public static function get_property( $key ) {
- return self::_get_items( static::get_properties(), $key );
+ $id = static::get_class_full_name();
+ if ( ! isset( self::$properties[ $id ] ) ) {
+ self::$properties[ $id ] = static::get_properties();
+ }
+
+ return self::_get_items( self::$properties[ $id ], $key );
}
/**
return $this->get_name() . '-' . $this->post->ID;
}
+
+ public function get_remote_library_type() {
+ return $this->get_name();
+ }
+
/**
* @since 2.0.0
* @access public
return [
'id' => $this->get_main_id(),
'type' => $this->get_name(),
+ 'remote_type' => $this->get_remote_library_type(),
'last_edited' => $this->get_last_edited(),
- 'messages' => [
- /* translators: %s: the document title. */
- 'publish_notification' => sprintf( __( 'Hurray! Your %s is live.', 'elementor' ), $this::get_title() ),
- ],
+ 'panel' => static::get_editor_panel_config(),
'urls' => [
'exit_to_dashboard' => $this->get_exit_to_dashboard_url(),
'preview' => $this->get_preview_url(),
];
}
- /**
- * Initialize controls.
- *
- * Register the all controls added by `_register_controls()`.
- * and add the `advanced_settings` at end of Settings Tab
- *
- * @since 2.0.0
- * @access protected
- */
- protected function init_controls() {
- parent::init_controls();
-
- if ( ! Plugin::$instance->role_manager->user_can( 'design' ) ) {
- return;
- }
-
- $this->start_controls_section(
- 'advanced_settings',
- [
- 'label' => __( 'Advanced', 'elementor' ),
- 'tab' => Controls_Manager::TAB_SETTINGS,
- ]
- );
-
- $this->add_control(
- 'clear_page',
- [
- 'type' => Controls_Manager::BUTTON,
- 'label' => __( 'Delete All Content', 'elementor' ),
- 'text' => __( 'Delete', 'elementor' ),
- 'separator' => 'before',
- 'event' => 'elementor:clearPage',
- ]
- );
-
- $this->end_controls_section();
- }
-
/**
* @since 2.0.0
* @access protected
$this->save_elements( $data['elements'] );
// Remove Post CSS
- delete_post_meta( $this->post->ID, Post_CSS_File::META_KEY );
+ $post_css = new Post_CSS( $this->post->ID );
+
+ $post_css->delete();
return true;
}
* @param string $url The edit url.
* @param Document $this The document instance.
*/
- $url = apply_filters( 'elementor/document/urls/edit ', $url, $this );
+ $url = apply_filters( 'elementor/document/urls/edit', $url, $this );
return $url;
}
static $url;
if ( empty( $url ) ) {
+
+ add_filter( 'pre_option_permalink_structure', '__return_empty_string' );
+
$url = set_url_scheme( add_query_arg( [
'elementor-preview' => $this->get_main_id(),
'ver' => time(),
- ] , $this->get_permalink() ) );
+ ], $this->get_permalink() ) );
+
+ remove_filter( 'pre_option_permalink_structure', '__return_empty_string' );
/**
* Document preview URL.
if ( Plugin::$instance->editor->is_edit_mode() ) {
if ( empty( $elements ) && empty( $autosave_elements ) ) {
// Convert to Elementor.
- $elements = Plugin::$instance->db->_get_new_editor_from_wp_editor( $this->post->ID );
+ $elements = Plugin::$instance->db->get_new_editor_from_wp_editor( $this->post->ID );
if ( $this->is_autosave() ) {
Plugin::$instance->db->copy_elementor_meta( $this->post->post_parent, $this->post->ID );
}
return $elements;
}
+ public function print_elements_with_wrapper( $elements_data = null ) {
+ if ( ! $elements_data ) {
+ $elements_data = $this->get_elements_data();
+ }
+ ?>
+ <div class="<?php echo esc_attr( $this->get_container_classes() ); ?>">
+ <div class="elementor-inner">
+ <div class="elementor-section-wrap">
+ <?php $this->print_elements( $elements_data ); ?>
+ </div>
+ </div>
+ </div>
+ <?php
+ }
+
/**
* @since 2.0.0
* @access public
*/
public function get_css_wrapper_selector() {
- return 'elementor-' . $this->get_id();
+ return '';
}
/**
*/
public function get_panel_page_settings() {
return [
- 'title' => self::get_title() . ' ' . __( 'Settings', 'elementor' ),
+ /* translators: %s: Document title */
+ 'title' => sprintf( __( '%s Settings', 'elementor' ), self::get_title() ),
];
}
}
$date = date_i18n( _x( 'M j, H:i', 'revision date format', 'elementor' ), strtotime( $post->post_modified ) );
- $display_name = get_the_author_meta( 'display_name' , $post->post_author );
+ $display_name = get_the_author_meta( 'display_name', $post->post_author );
if ( $autosave_post || 'revision' === $post->post_type ) {
/* translators: 1: Saving date, 2: Author display name */
$page_settings_manager->ajax_before_save_settings( $settings, $this->post->ID );
$page_settings_manager->save_settings( $settings, $this->post->ID );
}
+
+ protected function print_elements( $elements_data ) {
+ foreach ( $elements_data as $element_data ) {
+ $element = Plugin::$instance->elements_manager->create_element_instance( $element_data );
+
+ if ( ! $element ) {
+ continue;
+ }
+
+ $element->print_element();
+ }
+ }
}
--- /dev/null
+<?php
+namespace Elementor\Core\Debug;
+
+use Elementor\Settings;
+use Elementor\Tools;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly
+}
+
+class Inspector {
+
+ protected $is_enabled = false;
+
+ protected $log = [];
+
+ public function __construct() {
+ $is_debug = ( defined( 'WP_DEBUG' ) && WP_DEBUG );
+ $option = get_option( 'elementor_enable_inspector', null );
+
+ $this->is_enabled = is_null( $option ) ? $is_debug : 'enable' === $option;
+
+ if ( $this->is_enabled ) {
+ add_action( 'admin_bar_menu', [ $this, 'add_menu_in_admin_bar' ], 201 );
+ }
+
+ add_action( 'elementor/admin/after_create_settings/' . Tools::PAGE_ID, [ $this, 'register_admin_tools_fields' ], 50 );
+ }
+
+ public function is_enabled() {
+ return $this->is_enabled;
+ }
+
+ public function register_admin_tools_fields( Tools $tools ) {
+ $tools->add_fields( Settings::TAB_GENERAL, 'tools', [
+ 'enable_inspector' => [
+ 'label' => __( 'Debug Bar', 'elementor' ),
+ 'field_args' => [
+ 'type' => 'select',
+ 'std' => $this->is_enabled ? 'enable' : '',
+ 'options' => [
+ '' => __( 'Disable', 'elementor' ),
+ 'enable' => __( 'Enable', 'elementor' ),
+ ],
+ 'desc' => __( 'Debug Bar adds an admin bar menu that lists all the templates that are used on a page that is being displayed.', 'elementor' ),
+ ],
+ ],
+ ] );
+ }
+
+ public function parse_template_path( $template ) {
+ // `untrailingslashit` for windows path style.
+ if ( 0 === strpos( $template, untrailingslashit( ELEMENTOR_PATH ) ) ) {
+ return 'Elementor - ' . basename( $template );
+ }
+
+ if ( 0 === strpos( $template, get_stylesheet_directory() ) ) {
+ return wp_get_theme()->get( 'Name' ) . ' - ' . basename( $template );
+ }
+
+ $plugins_dir = dirname( ELEMENTOR_PATH );
+ if ( 0 === strpos( $template, $plugins_dir ) ) {
+ return ltrim( str_replace( $plugins_dir, '', $template ), '/\\' );
+ }
+
+ return str_replace( WP_CONTENT_DIR, '', $template );
+ }
+
+ public function add_log( $module, $title, $url = '' ) {
+ if ( ! $this->is_enabled ) {
+ return;
+ }
+
+ if ( ! isset( $this->log[ $module ] ) ) {
+ $this->log[ $module ] = [];
+ }
+
+ $this->log[ $module ][] = [
+ 'title' => $title,
+ 'url' => $url,
+ ];
+ }
+
+ public function add_menu_in_admin_bar( \WP_Admin_Bar $wp_admin_bar ) {
+ if ( empty( $this->log ) ) {
+ return;
+ }
+
+ $wp_admin_bar->add_node( [
+ 'id' => 'elementor_inspector',
+ 'title' => __( 'Elementor Debugger', 'elementor' ),
+ ] );
+
+ foreach ( $this->log as $module => $log ) {
+ $module_id = sanitize_key( $module );
+
+ $wp_admin_bar->add_menu( [
+ 'id' => 'elementor_inspector_' . $module_id,
+ 'parent' => 'elementor_inspector',
+ 'title' => $module,
+ ] );
+
+ foreach ( $log as $index => $row ) {
+ $url = $row['url'];
+
+ unset( $row['url'] );
+
+ $wp_admin_bar->add_menu( [
+ 'id' => 'elementor_inspector_log_' . $module_id . '_' . $index,
+ 'parent' => 'elementor_inspector_' . $module_id,
+ 'href' => $url,
+ 'title' => implode( ' > ', $row ),
+ 'meta' => [
+ 'target' => '_blank',
+ ],
+ ] );
+ }
+ }
+ }
+}
use Elementor\Plugin;
use Elementor\Settings;
use Elementor\Core\Settings\Manager as SettingsManager;
+use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
return $properties;
}
+ protected static function get_editor_panel_categories() {
+ return Utils::array_inject(
+ parent::get_editor_panel_categories(),
+ 'theme-elements',
+ [
+ 'theme-elements-single' => [
+ 'title' => __( 'Single', 'elementor' ),
+ 'active' => false,
+ ],
+ ]
+ );
+ }
+
/**
* @since 2.0.0
* @access public
$page_title_selector = 'h1.entry-title';
}
+ $page_title_selector .= ', .elementor-page-title';
+
$document->start_injection( [
'of' => 'post_status',
+ 'fallback' => [
+ 'of' => 'post_title',
+ ],
] );
$document->add_control(
[
'label' => __( 'Hide Title', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'No', 'elementor' ),
- 'label_on' => __( 'Yes', 'elementor' ),
'description' => sprintf(
/* translators: %s: Setting page link */
__( 'Not working? You can set a different selector for the title in the <a href="%s" target="_blank">Settings page</a>.', 'elementor' ),
Group_Control_Background::get_type(),
[
'name' => 'background',
+ 'fields_options' => [
+ 'image' => [
+ // Currently isn't supported.
+ 'dynamic' => [
+ 'active' => false,
+ ],
+ ],
+ ],
]
);
public static function register_post_fields_control( $document ) {
$document->start_injection( [
'of' => 'post_status',
+ 'fallback' => [
+ 'of' => 'post_title',
+ ],
] );
if ( post_type_supports( $document->post->post_type, 'excerpt' ) ) {
use Elementor\Core\DocumentTypes\Post;
use Elementor\DB;
use Elementor\Plugin;
+use Elementor\TemplateLibrary\Source_Local;
+use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
*/
protected $switched_data = [];
+ protected $cpt = [];
+
/**
* Documents manager constructor.
*
* @access public
*/
public function __construct() {
- $this->register_default_types();
-
+ // Note: The priority 11 is for allowing plugins to add their register callback on elementor init.
+ add_action( 'elementor/init', [ $this, 'register_default_types' ], 11 );
add_action( 'elementor/ajax/register_actions', [ $this, 'register_ajax_actions' ] );
}
* @access public
*
* @param string $type Document type name.
- * @param string $class The name of the class that registers the document type.
+ * @param Document $class The name of the class that registers the document type.
* Full name with the namespace.
*
* @return Documents_Manager The updated document manager instance.
*/
public function register_document_type( $type, $class ) {
$this->types[ $type ] = $class;
+
+ $cpt = $class::get_property( 'cpt' );
+ if ( $cpt ) {
+ foreach ( $cpt as $post_type ) {
+ $this->cpt[ $post_type ] = $type;
+ }
+ }
+
+ if ( $class::get_property( 'register_type' ) ) {
+ Source_Local::add_template_type( $type );
+ }
+
return $this;
}
$post_id = apply_filters( 'elementor/documents/get/post_id', $post_id );
if ( ! $from_cache || ! isset( $this->documents[ $post_id ] ) ) {
- $doc_type = get_post_meta( $post_id, Document::TYPE_META_KEY, true );
+
+ if ( wp_is_post_autosave( $post_id ) ) {
+ $post_type = get_post_type( wp_get_post_parent_id( $post_id ) );
+ } else {
+ $post_type = get_post_type( $post_id );
+ }
+
+ if ( isset( $this->cpt[ $post_type ] ) ) {
+ $doc_type = $this->cpt[ $post_type ];
+ } else {
+ $doc_type = get_post_meta( $post_id, Document::TYPE_META_KEY, true );
+ }
$doc_type_class = $this->get_document_type( $doc_type );
$this->documents[ $post_id ] = new $doc_type_class( [
if ( empty( $post_data['post_title'] ) ) {
$post_data['post_title'] = __( 'Elementor', 'elementor' );
if ( 'post' !== $type ) {
- $post_data['post_title'] .= ' ' . call_user_func( [ $this->types[ $type ], 'get_title' ] );
+ $post_data['post_title'] = sprintf(
+ /* translators: %s: Document title */
+ __( 'Elementor %s', 'elementor' ),
+ call_user_func( [ $this->types[ $type ], 'get_title' ] )
+ );
}
$update_title = true;
}
$status = DB::STATUS_DRAFT;
- if ( isset( $request['status'] ) && in_array( $request['status'], [ DB::STATUS_PUBLISH, DB::STATUS_PRIVATE, DB::STATUS_PENDING, DB::STATUS_AUTOSAVE ] , true ) ) {
+ if ( isset( $request['status'] ) && in_array( $request['status'], [ DB::STATUS_PUBLISH, DB::STATUS_PRIVATE, DB::STATUS_PENDING, DB::STATUS_AUTOSAVE ], true ) ) {
$status = $request['status'];
}
}
}
+ // Set default page template because the footer-saver doesn't send default values,
+ // But if the template was changed from canvas to default - it needed to save.
+ if ( Utils::is_cpt_custom_templates_supported() && ! isset( $request['settings']['template'] ) ) {
+ $request['settings']['template'] = 'default';
+ }
+
$data = [
'elements' => $request['elements'],
'settings' => $request['settings'],
--- /dev/null
+<?php
+namespace Elementor\Core\DynamicTags;
+
+use Elementor\Controls_Stack;
+use Elementor\Core\Files\CSS\Post;
+use Elementor\Plugin;
+use Elementor\Element_Base;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+class Dynamic_CSS extends Post {
+
+ protected $post_id_for_data;
+ /**
+ * Dynamic_CSS constructor.
+ *
+ * @param int $post_id Post ID
+ * @param int $post_id_for_data
+ */
+ public function __construct( $post_id, $post_id_for_data ) {
+ $this->post_id_for_data = $post_id_for_data;
+
+ parent::__construct( $post_id );
+ }
+
+ public function get_name() {
+ return 'dynamic';
+ }
+
+ protected function use_external_file() {
+ return false;
+ }
+
+ protected function get_file_handle_id() {
+ return 'elementor-post-dynamic-' . $this->post_id_for_data;
+ }
+
+ protected function get_data() {
+ return Plugin::$instance->db->get_plain_editor( $this->post_id_for_data );
+ }
+
+ public function get_meta( $property = null ) {
+ // Parse CSS first, to get the fonts list.
+ $css = $this->get_content();
+
+ $meta = [
+ 'status' => $css ? self::CSS_STATUS_INLINE : self::CSS_STATUS_EMPTY,
+ 'fonts' => $this->get_fonts(),
+ 'css' => $css,
+ ];
+
+ if ( $property ) {
+ return isset( $meta[ $property ] ) ? $meta[ $property ] : null;
+ }
+
+ return $meta;
+ }
+
+ public function add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements ) {
+ $dynamic_settings = $controls_stack->get_settings( '__dynamic__' );
+ if ( ! empty( $dynamic_settings ) ) {
+ $controls = array_intersect_key( $controls, $dynamic_settings );
+
+ $all_controls = $controls_stack->get_controls();
+
+ $parsed_dynamic_settings = $controls_stack->parse_dynamic_settings( $values, $controls );
+
+ foreach ( $controls as $control ) {
+ if ( ! empty( $control['style_fields'] ) ) {
+ $this->add_repeater_control_style_rules( $controls_stack, $control['style_fields'], $values[ $control['name'] ], $placeholders, $replacements );
+ }
+
+ if ( empty( $control['selectors'] ) ) {
+ continue;
+ }
+
+ $this->add_control_style_rules( $control, $parsed_dynamic_settings, $all_controls, $placeholders, $replacements );
+ }
+ }
+
+ if ( $controls_stack instanceof Element_Base ) {
+ foreach ( $controls_stack->get_children() as $child_element ) {
+ $this->render_styles( $child_element );
+ }
+ }
+ }
+}
<?php
namespace Elementor\Core\DynamicTags;
+use Elementor\Core\Files\CSS\Post;
+use Elementor\Core\Files\CSS\Post_Preview;
use Elementor\Plugin;
use Elementor\User;
return $this->parsing_mode;
}
+ /**
+ * @param Post $css_file
+ */
+ public function after_enqueue_post_css( $css_file ) {
+ $post_id = $css_file->get_post_id();
+
+ if ( $css_file instanceof Post_Preview ) {
+ $post_id_for_data = $css_file->get_preview_id();
+ } else {
+ $post_id_for_data = $post_id;
+ }
+
+ $css_file = new Dynamic_CSS( $post_id, $post_id_for_data );
+
+ $css_file->enqueue();
+ }
+
/**
* @since 2.0.0
* @access private
*/
private function add_actions() {
add_action( 'wp_ajax_elementor_render_tags', [ $this, 'ajax_render_tags' ] );
+ add_action( 'elementor/css-file/post/enqueue', [ $this, 'after_enqueue_post_css' ] );
}
}
--- /dev/null
+<?php
+
+namespace Elementor\Core\Files;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly
+}
+
+abstract class Base {
+
+ const UPLOADS_DIR = 'elementor/';
+
+ const DEFAULT_FILES_DIR = 'css/';
+
+ const META_KEY = '';
+
+ private static $wp_uploads_dir;
+
+ private $files_dir;
+
+ private $file_name;
+
+ /**
+ * File path.
+ *
+ * Holds the file path.
+ *
+ * @access private
+ *
+ * @var string
+ */
+ private $path;
+
+ /**
+ * Content.
+ *
+ * Holds the file content.
+ *
+ * @access private
+ *
+ * @var string
+ */
+ private $content;
+
+ public static function get_base_uploads_dir() {
+ $wp_upload_dir = self::get_wp_uploads_dir();
+
+ return $wp_upload_dir['basedir'] . '/' . self::UPLOADS_DIR;
+ }
+
+ public static function get_base_uploads_url() {
+ $wp_upload_dir = self::get_wp_uploads_dir();
+
+ return $wp_upload_dir['baseurl'] . '/' . self::UPLOADS_DIR;
+ }
+
+ public function __construct( $file_name ) {
+ $this->set_file_name( $file_name );
+
+ $this->set_files_dir( static::DEFAULT_FILES_DIR );
+
+ $this->set_path();
+ }
+
+ public function set_files_dir( $files_dir ) {
+ $this->files_dir = $files_dir;
+ }
+
+ public function set_file_name( $file_name ) {
+ $this->file_name = $file_name;
+ }
+
+ public function get_file_name() {
+ return $this->file_name;
+ }
+
+ public function get_url() {
+ $url = set_url_scheme( self::get_base_uploads_url() . $this->files_dir . $this->file_name );
+
+ return add_query_arg( [ 'ver' => $this->get_meta( 'time' ) ], $url );
+ }
+
+ public function get_content() {
+ if ( ! $this->content ) {
+ $this->content = $this->parse_content();
+ }
+
+ return $this->content;
+ }
+
+ public function update() {
+ $this->update_file();
+
+ $meta = $this->get_meta();
+
+ $meta['time'] = time();
+
+ $this->update_meta( $meta );
+ }
+
+ public function update_file() {
+ $this->content = $this->parse_content();
+
+ if ( $this->content ) {
+ $this->write();
+ } else {
+ $this->delete();
+ }
+ }
+
+ public function write() {
+ return file_put_contents( $this->path, $this->content );
+ }
+
+ public function delete() {
+ if ( file_exists( $this->path ) ) {
+ unlink( $this->path );
+ }
+
+ $this->delete_meta();
+ }
+
+ /**
+ * Get meta data.
+ *
+ * Retrieve the CSS file meta data. Returns an array of all the data, or if
+ * custom property is given it will return the property value, or `null` if
+ * the property does not exist.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @param string $property Optional. Custom meta data property. Default is
+ * null.
+ *
+ * @return array|null An array of all the data, or if custom property is
+ * given it will return the property value, or `null` if
+ * the property does not exist.
+ */
+ public function get_meta( $property = null ) {
+ $default_meta = $this->get_default_meta();
+
+ $meta = array_merge( $default_meta, (array) $this->load_meta() );
+
+ if ( $property ) {
+ return isset( $meta[ $property ] ) ? $meta[ $property ] : null;
+ }
+
+ return $meta;
+ }
+
+ abstract protected function parse_content();
+
+ /**
+ * Load meta.
+ *
+ * Retrieve the file meta data.
+ *
+ * @since 2.1.0
+ * @access protected
+ */
+ protected function load_meta() {
+ return get_option( static::META_KEY );
+ }
+
+ /**
+ * Update meta.
+ *
+ * Update the file meta data.
+ *
+ * @since 2.1.0
+ * @access protected
+ *
+ * @param array $meta New meta data.
+ */
+ protected function update_meta( $meta ) {
+ update_option( static::META_KEY, $meta );
+ }
+
+ /**
+ * Delete meta.
+ *
+ * Delete the file meta data.
+ *
+ * @since 2.1.0
+ * @access protected
+ */
+ protected function delete_meta() {
+ delete_option( static::META_KEY );
+ }
+
+ protected function get_default_meta() {
+ return [
+ 'time' => 0,
+ ];
+ }
+
+ private static function get_wp_uploads_dir() {
+ if ( ! self::$wp_uploads_dir ) {
+ self::$wp_uploads_dir = wp_upload_dir( null, false );
+ }
+
+ return self::$wp_uploads_dir;
+ }
+
+ private function set_path() {
+ $dir_path = self::get_base_uploads_dir() . $this->files_dir;
+
+ if ( ! is_dir( $dir_path ) ) {
+ wp_mkdir_p( $dir_path );
+ }
+
+ $this->path = $dir_path . $this->file_name;
+ }
+}
--- /dev/null
+<?php
+namespace Elementor\Core\Files\CSS;
+
+use Elementor\Base_Data_Control;
+use Elementor\Controls_Manager;
+use Elementor\Controls_Stack;
+use Elementor\Core\Files\Base as Base_File;
+use Elementor\Core\DynamicTags\Manager;
+use Elementor\Core\DynamicTags\Tag;
+use Elementor\Element_Base;
+use Elementor\Plugin;
+use Elementor\Core\Responsive\Responsive;
+use Elementor\Stylesheet;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Elementor CSS file.
+ *
+ * Elementor CSS file handler class is responsible for generating CSS files.
+ *
+ * @since 1.2.0
+ * @abstract
+ */
+abstract class Base extends Base_File {
+
+ /**
+ * Elementor CSS file generated status.
+ *
+ * The parsing result after generating CSS file.
+ */
+ const CSS_STATUS_FILE = 'file';
+
+ /**
+ * Elementor inline CSS status.
+ *
+ * The parsing result after generating inline CSS.
+ */
+ const CSS_STATUS_INLINE = 'inline';
+
+ /**
+ * Elementor CSS empty status.
+ *
+ * The parsing result when an empty CSS returned.
+ */
+ const CSS_STATUS_EMPTY = 'empty';
+
+ /**
+ * Fonts.
+ *
+ * Holds the list of fonts.
+ *
+ * @access private
+ *
+ * @var array
+ */
+ private $fonts = [];
+
+ /**
+ * Stylesheet object.
+ *
+ * Holds the CSS file stylesheet instance.
+ *
+ * @access protected
+ *
+ * @var Stylesheet
+ */
+ protected $stylesheet_obj;
+
+ /**
+ * Printed.
+ *
+ * Holds the list of printed files.
+ *
+ * @access protected
+ *
+ * @var array
+ */
+ private static $printed = [];
+
+ /**
+ * Get CSS file name.
+ *
+ * Retrieve the CSS file name.
+ *
+ * @since 1.6.0
+ * @access public
+ * @abstract
+ */
+ abstract public function get_name();
+
+ /**
+ * CSS file constructor.
+ *
+ * Initializing Elementor CSS file.
+ *
+ * @since 1.2.0
+ * @access public
+ */
+ public function __construct( $file_name ) {
+ parent::__construct( $file_name );
+
+ $this->init_stylesheet();
+ }
+
+ /**
+ * Use external file.
+ *
+ * Whether to use external CSS file of not. When there are new schemes or settings
+ * updates.
+ *
+ * @since 1.9.0
+ * @access protected
+ *
+ * @return bool True if the CSS requires an update, False otherwise.
+ */
+ protected function use_external_file() {
+ return 'internal' !== get_option( 'elementor_css_print_method' );
+ }
+
+ /**
+ * Update the CSS file.
+ *
+ * Delete old CSS, parse the CSS, save the new file and update the database.
+ *
+ * This method also sets the CSS status to be used later on in the render posses.
+ *
+ * @since 1.2.0
+ * @access public
+ */
+ public function update() {
+ $this->update_file();
+
+ $meta = $this->get_meta();
+
+ $meta['time'] = time();
+
+ $content = $this->get_content();
+
+ if ( empty( $content ) ) {
+ $meta['status'] = self::CSS_STATUS_EMPTY;
+ $meta['css'] = '';
+ } else {
+ $use_external_file = $this->use_external_file();
+
+ if ( $use_external_file ) {
+ $meta['status'] = self::CSS_STATUS_FILE;
+ } else {
+ $meta['status'] = self::CSS_STATUS_INLINE;
+ $meta['css'] = $content;
+ }
+ }
+
+ $this->update_meta( $meta );
+ }
+
+ public function write() {
+ if ( $this->use_external_file() ) {
+ parent::write();
+ }
+ }
+
+ /**
+ * Enqueue CSS.
+ *
+ * Either enqueue the CSS file in Elementor or add inline style.
+ *
+ * This method is also responsible for loading the fonts.
+ *
+ * @since 1.2.0
+ * @access public
+ */
+ public function enqueue() {
+ $handle_id = $this->get_file_handle_id();
+
+ if ( isset( self::$printed[ $handle_id ] ) ) {
+ return;
+ }
+
+ self::$printed[ $handle_id ] = true;
+
+ $meta = $this->get_meta();
+
+ if ( self::CSS_STATUS_EMPTY === $meta['status'] ) {
+ return;
+ }
+
+ // First time after clear cache and etc.
+ if ( '' === $meta['status'] || $this->is_update_required() ) {
+ $this->update();
+
+ $meta = $this->get_meta();
+ }
+
+ if ( self::CSS_STATUS_INLINE === $meta['status'] ) {
+ $dep = $this->get_inline_dependency();
+ // If the dependency has already been printed ( like a template in footer )
+ if ( wp_styles()->query( $dep, 'done' ) ) {
+ printf( '<style id="%1$s">%2$s</style>', $this->get_file_handle_id(), $meta['css'] ); // XSS ok.
+ } else {
+ wp_add_inline_style( $dep, $meta['css'] );
+ }
+ } elseif ( self::CSS_STATUS_FILE === $meta['status'] ) { // Re-check if it's not empty after CSS update.
+ wp_enqueue_style( $this->get_file_handle_id(), $this->get_url(), $this->get_enqueue_dependencies(), null ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
+ }
+
+ // Handle fonts.
+ if ( ! empty( $meta['fonts'] ) ) {
+ foreach ( $meta['fonts'] as $font ) {
+ Plugin::$instance->frontend->enqueue_font( $font );
+ }
+ }
+
+ $name = $this->get_name();
+
+ /**
+ * Enqueue CSS file.
+ *
+ * Fires when CSS file is enqueued on Elementor.
+ *
+ * The dynamic portion of the hook name, `$name`, refers to the CSS file name.
+ *
+ * @since 1.9.0
+ * @deprecated 2.0.0 Use `elementor/css-file/{$name}/enqueue` action instead.
+ * @todo Need to be hard deprecated using `do_action_deprecated()`.
+ *
+ * @param Base $this The current CSS file.
+ */
+ do_action( "elementor/{$name}-css-file/enqueue", $this );
+
+ /**
+ * Enqueue CSS file.
+ *
+ * Fires when CSS file is enqueued on Elementor.
+ *
+ * The dynamic portion of the hook name, `$name`, refers to the CSS file name.
+ *
+ * @since 2.0.0
+ *
+ * @param Base $this The current CSS file.
+ */
+ do_action( "elementor/css-file/{$name}/enqueue", $this );
+ }
+
+ /**
+ * Print CSS.
+ *
+ * Output the final CSS inside the `<style>` tags and all the frontend fonts in
+ * use.
+ *
+ * @since 1.9.4
+ * @access public
+ */
+ public function print_css() {
+ echo '<style>' . $this->get_content() . '</style>'; // XSS ok.
+ Plugin::$instance->frontend->print_fonts_links();
+ }
+
+ /**
+ * Add control rules.
+ *
+ * Parse the CSS for all the elements inside any given control.
+ *
+ * This method recursively renders the CSS for all the selectors in the control.
+ *
+ * @since 1.2.0
+ * @access public
+ *
+ * @param array $control The controls.
+ * @param array $controls_stack The controls stack.
+ * @param callable $value_callback Callback function for the value.
+ * @param array $placeholders Placeholders.
+ * @param array $replacements Replacements.
+ */
+ public function add_control_rules( array $control, array $controls_stack, callable $value_callback, array $placeholders, array $replacements ) {
+ $value = call_user_func( $value_callback, $control );
+
+ if ( null === $value || empty( $control['selectors'] ) ) {
+ return;
+ }
+
+ foreach ( $control['selectors'] as $selector => $css_property ) {
+ try {
+ $output_css_property = preg_replace_callback(
+ '/\{\{(?:([^.}]+)\.)?([^}]*)}}/', function( $matches ) use ( $control, $value_callback, $controls_stack, $value, $css_property ) {
+ $parser_control = $control;
+ $value_to_insert = $value;
+
+ if ( ! empty( $matches[1] ) ) {
+ if ( ! isset( $controls_stack[ $matches[1] ] ) ) {
+ return '';
+ }
+
+ $parser_control = $controls_stack[ $matches[1] ];
+ $value_to_insert = call_user_func( $value_callback, $parser_control );
+ }
+
+ if ( Controls_Manager::FONT === $control['type'] ) {
+ $this->fonts[] = $value_to_insert;
+ }
+
+ /** @var Base_Data_Control $control_obj */
+ $control_obj = Plugin::$instance->controls_manager->get_control( $parser_control['type'] );
+ $parsed_value = $control_obj->get_style_value( strtolower( $matches[2] ), $value_to_insert );
+
+ if ( '' === $parsed_value ) {
+ throw new \Exception();
+ }
+
+ return $parsed_value;
+ }, $css_property
+ );
+ } catch ( \Exception $e ) {
+ return;
+ }
+
+ if ( ! $output_css_property ) {
+ continue;
+ }
+
+ $device_pattern = '/^(?:\([^\)]+\)){1,2}/';
+
+ preg_match( $device_pattern, $selector, $device_rules );
+
+ $query = [];
+
+ if ( $device_rules ) {
+ $selector = preg_replace( $device_pattern, '', $selector );
+
+ preg_match_all( '/\(([^\)]+)\)/', $device_rules[0], $pure_device_rules );
+
+ $pure_device_rules = $pure_device_rules[1];
+
+ foreach ( $pure_device_rules as $device_rule ) {
+ if ( Element_Base::RESPONSIVE_DESKTOP === $device_rule ) {
+ continue;
+ }
+
+ $device = preg_replace( '/\+$/', '', $device_rule );
+
+ $endpoint = $device === $device_rule ? 'max' : 'min';
+
+ $query[ $endpoint ] = $device;
+ }
+ }
+
+ $parsed_selector = str_replace( $placeholders, $replacements, $selector );
+
+ if ( ! $query && ! empty( $control['responsive'] ) ) {
+ $query = array_intersect_key( $control['responsive'], array_flip( [ 'min', 'max' ] ) );
+
+ if ( ! empty( $query['max'] ) && Element_Base::RESPONSIVE_DESKTOP === $query['max'] ) {
+ unset( $query['max'] );
+ }
+ }
+
+ $this->stylesheet_obj->add_rules( $parsed_selector, $output_css_property, $query );
+ }
+ }
+
+ /**
+ * Get the fonts.
+ *
+ * Retrieve the list of fonts.
+ *
+ * @since 1.9.0
+ * @access public
+ *
+ * @return array Fonts.
+ */
+ public function get_fonts() {
+ return $this->fonts;
+ }
+
+ /**
+ * Get CSS.
+ *
+ * Retrieve the CSS. If the CSS is empty, parse it again.
+ *
+ * @since 1.2.0
+ * @access public
+ * @deprecated 2.1.0 Use `CSS_File::get_content()` method instead
+ *
+ * @return string The CSS.
+ */
+ public function get_css() {
+ return $this->get_content();
+ }
+
+ /**
+ * Get stylesheet.
+ *
+ * Retrieve the CSS file stylesheet instance.
+ *
+ * @since 1.2.0
+ * @access public
+ *
+ * @return Stylesheet The stylesheet object.
+ */
+ public function get_stylesheet() {
+ return $this->stylesheet_obj;
+ }
+
+ /**
+ * Add controls stack style rules.
+ *
+ * Parse the CSS for all the elements inside any given controls stack.
+ *
+ * This method recursively renders the CSS for all the child elements in the stack.
+ *
+ * @since 1.6.0
+ * @access public
+ *
+ * @param Controls_Stack $controls_stack The controls stack.
+ * @param array $controls Controls array.
+ * @param array $values Values array.
+ * @param array $placeholders Placeholders.
+ * @param array $replacements Replacements.
+ */
+ public function add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements ) {
+ $all_controls = $controls_stack->get_controls();
+
+ $parsed_dynamic_settings = $controls_stack->parse_dynamic_settings( $values, $controls );
+
+ foreach ( $controls as $control ) {
+ if ( ! empty( $control['style_fields'] ) ) {
+ $this->add_repeater_control_style_rules( $controls_stack, $control['style_fields'], $values[ $control['name'] ], $placeholders, $replacements );
+ }
+
+ if ( ! empty( $control[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] ) ) {
+ $this->add_dynamic_control_style_rules( $control, $control[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] );
+ }
+
+ if ( ! empty( $parsed_dynamic_settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] ) ) {
+ unset( $parsed_dynamic_settings[ $control['name'] ] );
+ continue;
+ }
+
+ if ( empty( $control['selectors'] ) ) {
+ continue;
+ }
+
+ $this->add_control_style_rules( $control, $parsed_dynamic_settings, $all_controls, $placeholders, $replacements );
+ }
+ }
+
+ /**
+ * Get file handle ID.
+ *
+ * Retrieve the file handle ID.
+ *
+ * @since 1.2.0
+ * @access protected
+ * @abstract
+ *
+ * @return string CSS file handle ID.
+ */
+ abstract protected function get_file_handle_id();
+
+ /**
+ * Render CSS.
+ *
+ * Parse the CSS.
+ *
+ * @since 1.2.0
+ * @access protected
+ * @abstract
+ */
+ abstract protected function render_css();
+
+ protected function get_default_meta() {
+ return array_merge( parent::get_default_meta(), [
+ 'fonts' => array_unique( $this->fonts ),
+ 'status' => '',
+ ] );
+ }
+
+ /**
+ * Get enqueue dependencies.
+ *
+ * Retrieve the name of the stylesheet used by `wp_enqueue_style()`.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return array Name of the stylesheet.
+ */
+ protected function get_enqueue_dependencies() {
+ return [];
+ }
+
+ /**
+ * Get inline dependency.
+ *
+ * Retrieve the name of the stylesheet used by `wp_add_inline_style()`.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return string Name of the stylesheet.
+ */
+ protected function get_inline_dependency() {
+ return '';
+ }
+
+ /**
+ * Is update required.
+ *
+ * Whether the CSS requires an update. When there are new schemes or settings
+ * updates.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return bool True if the CSS requires an update, False otherwise.
+ */
+ protected function is_update_required() {
+ return false;
+ }
+
+ /**
+ * Parse CSS.
+ *
+ * Parsing the CSS file.
+ *
+ * @since 1.2.0
+ * @access protected
+ */
+ protected function parse_content() {
+ $this->render_css();
+
+ $name = $this->get_name();
+
+ /**
+ * Parse CSS file.
+ *
+ * Fires when CSS file is parsed on Elementor.
+ *
+ * The dynamic portion of the hook name, `$name`, refers to the CSS file name.
+ *
+ * @since 1.2.0
+ * @deprecated 2.0.0 Use `elementor/css-file/{$name}/parse` action instead.
+ * @todo Need to be hard deprecated using `do_action_deprecated()`.
+ *
+ * @param Base $this The current CSS file.
+ */
+ do_action( "elementor/{$name}-css-file/parse", $this );
+
+ /**
+ * Parse CSS file.
+ *
+ * Fires when CSS file is parsed on Elementor.
+ *
+ * The dynamic portion of the hook name, `$name`, refers to the CSS file name.
+ *
+ * @since 2.0.0
+ *
+ * @param Base $this The current CSS file.
+ */
+ do_action( "elementor/css-file/{$name}/parse", $this );
+
+ return $this->stylesheet_obj->__toString();
+ }
+
+ /**
+ * Add control style rules.
+ *
+ * Register new style rules for the control.
+ *
+ * @since 1.6.0
+ * @access private
+ *
+ * @param array $control The control.
+ * @param array $values Values array.
+ * @param array $controls The controls stack.
+ * @param array $placeholders Placeholders.
+ * @param array $replacements Replacements.
+ */
+ protected function add_control_style_rules( array $control, array $values, array $controls, array $placeholders, array $replacements ) {
+ $this->add_control_rules(
+ $control, $controls, function( $control ) use ( $values ) {
+ return $this->get_style_control_value( $control, $values );
+ }, $placeholders, $replacements
+ );
+ }
+
+ /**
+ * Get style control value.
+ *
+ * Retrieve the value of the style control for any give control and values.
+ *
+ * It will retrieve the control name and return the style value.
+ *
+ * @since 1.6.0
+ * @access private
+ *
+ * @param array $control The control.
+ * @param array $values Values array.
+ *
+ * @return mixed Style control value.
+ */
+ private function get_style_control_value( array $control, array $values ) {
+ $value = $values[ $control['name'] ];
+
+ if ( isset( $control['selectors_dictionary'][ $value ] ) ) {
+ $value = $control['selectors_dictionary'][ $value ];
+ }
+
+ if ( ! is_numeric( $value ) && ! is_float( $value ) && empty( $value ) ) {
+ return null;
+ }
+
+ return $value;
+ }
+
+ /**
+ * Init stylesheet.
+ *
+ * Initialize CSS file stylesheet by creating a new `Stylesheet` object and register new
+ * breakpoints for the stylesheet.
+ *
+ * @since 1.2.0
+ * @access private
+ */
+ private function init_stylesheet() {
+ $this->stylesheet_obj = new Stylesheet();
+
+ $breakpoints = Responsive::get_breakpoints();
+
+ $this->stylesheet_obj
+ ->add_device( 'mobile', 0 )
+ ->add_device( 'tablet', $breakpoints['md'] )
+ ->add_device( 'desktop', $breakpoints['lg'] );
+ }
+
+ /**
+ * Add repeater control style rules.
+ *
+ * Register new style rules for the repeater control.
+ *
+ * @since 2.0.0
+ * @access private
+ *
+ * @param Controls_Stack $controls_stack The control stack.
+ * @param array $repeater_controls_items The repeater controls items.
+ * @param array $repeater_values Repeater values array.
+ * @param array $placeholders Placeholders.
+ * @param array $replacements Replacements.
+ */
+ protected function add_repeater_control_style_rules( Controls_Stack $controls_stack, array $repeater_controls_items, array $repeater_values, array $placeholders, array $replacements ) {
+ $placeholders = array_merge( $placeholders, [ '{{CURRENT_ITEM}}' ] );
+
+ foreach ( $repeater_controls_items as $index => $item ) {
+ $this->add_controls_stack_style_rules(
+ $controls_stack,
+ $item,
+ $repeater_values[ $index ],
+ $placeholders,
+ array_merge( $replacements, [ '.elementor-repeater-item-' . $repeater_values[ $index ]['_id'] ] )
+ );
+ }
+ }
+
+ /**
+ * Add dynamic control style rules.
+ *
+ * Register new style rules for the dynamic control.
+ *
+ * @since 2.0.0
+ * @access private
+ *
+ * @param array $control The control.
+ * @param string $value The value.
+ */
+ protected function add_dynamic_control_style_rules( array $control, $value ) {
+ Plugin::$instance->dynamic_tags->parse_tags_text( $value, $control, function( $id, $name, $settings ) {
+ $tag = Plugin::$instance->dynamic_tags->create_tag( $id, $name, $settings );
+
+ if ( ! $tag instanceof Tag ) {
+ return;
+ }
+
+ $this->add_controls_stack_style_rules( $tag, $tag->get_style_controls(), $tag->get_active_settings(), [ '{{WRAPPER}}' ], [ '#elementor-tag-' . $id ] );
+ } );
+ }
+}
--- /dev/null
+<?php
+namespace Elementor\Core\Files\CSS;
+
+use Elementor\Plugin;
+use Elementor\Scheme_Base;
+use Elementor\Settings;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Elementor global CSS file.
+ *
+ * Elementor CSS file handler class is responsible for generating the global CSS
+ * file.
+ *
+ * @since 1.2.0
+ */
+class Global_CSS extends Base {
+
+ /**
+ * Elementor global CSS file handler ID.
+ */
+ const FILE_HANDLER_ID = 'elementor-global';
+
+ const META_KEY = '_elementor_global_css';
+
+ /**
+ * Get CSS file name.
+ *
+ * Retrieve the CSS file name.
+ *
+ * @since 1.6.0
+ * @access public
+ *
+ * @return string CSS file name.
+ */
+ public function get_name() {
+ return 'global';
+ }
+
+ /**
+ * Get file handle ID.
+ *
+ * Retrieve the handle ID for the global post CSS file.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return string CSS file handle ID.
+ */
+ protected function get_file_handle_id() {
+ return self::FILE_HANDLER_ID;
+ }
+
+ /**
+ * Render CSS.
+ *
+ * Parse the CSS for all the widgets and all the scheme controls.
+ *
+ * @since 1.2.0
+ * @access protected
+ */
+ protected function render_css() {
+ $this->render_schemes_css();
+ }
+
+ /**
+ * Get inline dependency.
+ *
+ * Retrieve the name of the stylesheet used by `wp_add_inline_style()`.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return string Name of the stylesheet.
+ */
+ protected function get_inline_dependency() {
+ return 'elementor-frontend';
+ }
+
+ /**
+ * Is update required.
+ *
+ * Whether the CSS requires an update. When there are new schemes or settings
+ * updates.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return bool True if the CSS requires an update, False otherwise.
+ */
+ protected function is_update_required() {
+ $file_last_updated = $this->get_meta( 'time' );
+
+ $schemes_last_update = get_option( Scheme_Base::LAST_UPDATED_META );
+
+ if ( $file_last_updated < $schemes_last_update ) {
+ return true;
+ }
+
+ $elementor_settings_last_updated = get_option( Settings::UPDATE_TIME_FIELD );
+
+ if ( $file_last_updated < $elementor_settings_last_updated ) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Render schemes CSS.
+ *
+ * Parse the CSS for all the widgets and all the scheme controls.
+ *
+ * @since 1.2.0
+ * @access private
+ */
+ private function render_schemes_css() {
+ $elementor = Plugin::$instance;
+
+ foreach ( $elementor->widgets_manager->get_widget_types() as $widget ) {
+ $scheme_controls = $widget->get_scheme_controls();
+
+ foreach ( $scheme_controls as $control ) {
+ $this->add_control_rules(
+ $control, $widget->get_controls(), function( $control ) use ( $elementor ) {
+ $scheme_value = $elementor->schemes_manager->get_scheme_value( $control['scheme']['type'], $control['scheme']['value'] );
+
+ if ( empty( $scheme_value ) ) {
+ return null;
+ }
+
+ if ( ! empty( $control['scheme']['key'] ) ) {
+ $scheme_value = $scheme_value[ $control['scheme']['key'] ];
+ }
+
+ if ( empty( $scheme_value ) ) {
+ return null;
+ }
+
+ return $scheme_value;
+ }, [ '{{WRAPPER}}' ], [ '.elementor-widget-' . $widget->get_name() ]
+ );
+ }
+ }
+ }
+}
--- /dev/null
+<?php
+namespace Elementor\Core\Files\CSS;
+
+use Elementor\Plugin;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Elementor post preview CSS file.
+ *
+ * Elementor CSS file handler class is responsible for generating the post
+ * preview CSS file.
+ *
+ * @since 1.9.0
+ */
+class Post_Preview extends Post {
+
+ /**
+ * Preview ID.
+ *
+ * Holds the ID of the current post being previewed.
+ *
+ * @var int
+ */
+ private $preview_id;
+
+ /**
+ * Post preview CSS file constructor.
+ *
+ * Initializing the CSS file of the post preview. Set the post ID and the
+ * parent ID and initiate the stylesheet.
+ *
+ * @since 1.9.0
+ * @access public
+ *
+ * @param int $post_id Post ID.
+ */
+ public function __construct( $post_id ) {
+ $this->preview_id = $post_id;
+
+ $parent_id = wp_get_post_parent_id( $post_id );
+
+ parent::__construct( $parent_id );
+ }
+
+ public function get_preview_id() {
+ return $this->preview_id;
+ }
+
+ /**
+ * Get data.
+ *
+ * Retrieve raw post data from the database.
+ *
+ * @since 1.9.0
+ * @access protected
+ *
+ * @return array Post data.
+ */
+ protected function get_data() {
+ return Plugin::$instance->db->get_plain_editor( $this->preview_id );
+ }
+
+ /**
+ * Get file handle ID.
+ *
+ * Retrieve the handle ID for the previewed post CSS file.
+ *
+ * @since 1.9.0
+ * @access protected
+ *
+ * @return string CSS file handle ID.
+ */
+ protected function get_file_handle_id() {
+ return 'elementor-preview-' . $this->preview_id;
+ }
+
+ /**
+ * Get meta data.
+ *
+ * Retrieve the previewed post CSS file meta data.
+ *
+ * @since 1.9.0
+ * @access public
+ *
+ * @param string $property Optional. Custom meta data property. Default is
+ * null.
+ *
+ * @return array Previewed post CSS file meta data.
+ */
+ public function get_meta( $property = null ) {
+ // Parse CSS first, to get the fonts list.
+ $css = $this->get_content();
+
+ $meta = [
+ 'status' => self::CSS_STATUS_INLINE,
+ 'fonts' => $this->get_fonts(),
+ 'css' => $css,
+ ];
+
+ if ( $property ) {
+ return isset( $meta[ $property ] ) ? $meta[ $property ] : null;
+ }
+
+ return $meta;
+ }
+}
--- /dev/null
+<?php
+namespace Elementor\Core\Files\CSS;
+
+use Elementor\Controls_Stack;
+use Elementor\Element_Base;
+use Elementor\Plugin;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Elementor post CSS file.
+ *
+ * Elementor CSS file handler class is responsible for generating the single
+ * post CSS file.
+ *
+ * @since 1.2.0
+ */
+class Post extends Base {
+
+ /**
+ * Elementor post CSS file prefix.
+ */
+ const FILE_PREFIX = 'post-';
+
+ const META_KEY = '_elementor_css';
+
+ /**
+ * Post ID.
+ *
+ * Holds the current post ID.
+ *
+ * @var int
+ */
+ private $post_id;
+
+ /**
+ * Post CSS file constructor.
+ *
+ * Initializing the CSS file of the post. Set the post ID and initiate the stylesheet.
+ *
+ * @since 1.2.0
+ * @access public
+ *
+ * @param int $post_id Post ID.
+ */
+ public function __construct( $post_id ) {
+ $this->post_id = $post_id;
+
+ parent::__construct( self::FILE_PREFIX . $post_id . '.css' );
+ }
+
+ /**
+ * Get CSS file name.
+ *
+ * Retrieve the CSS file name.
+ *
+ * @since 1.6.0
+ * @access public
+ *
+ * @return string CSS file name.
+ */
+ public function get_name() {
+ return 'post';
+ }
+
+ /**
+ * Get post ID.
+ *
+ * Retrieve the ID of current post.
+ *
+ * @since 1.2.0
+ * @access public
+ *
+ * @return int Post ID.
+ */
+ public function get_post_id() {
+ return $this->post_id;
+ }
+
+ /**
+ * Get unique element selector.
+ *
+ * Retrieve the unique selector for any given element.
+ *
+ * @since 1.2.0
+ * @access public
+ *
+ * @param Element_Base $element The element.
+ *
+ * @return string Unique element selector.
+ */
+ public function get_element_unique_selector( Element_Base $element ) {
+ return '.elementor-' . $this->post_id . ' .elementor-element' . $element->get_unique_selector();
+ }
+
+ /**
+ * Load meta data.
+ *
+ * Retrieve the post CSS file meta data.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return array Post CSS file meta data.
+ */
+ protected function load_meta() {
+ return get_post_meta( $this->post_id, static::META_KEY, true );
+ }
+
+ /**
+ * Update meta data.
+ *
+ * Update the global CSS file meta data.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @param array $meta New meta data.
+ */
+ protected function update_meta( $meta ) {
+ update_post_meta( $this->post_id, static::META_KEY, $meta );
+ }
+
+ /**
+ * Delete meta.
+ *
+ * Delete the file meta data.
+ *
+ * @since 2.1.0
+ * @access protected
+ */
+ protected function delete_meta() {
+ delete_post_meta( $this->post_id, static::META_KEY );
+ }
+
+ /**
+ * Get post data.
+ *
+ * Retrieve raw post data from the database.
+ *
+ * @since 1.9.0
+ * @access protected
+ *
+ * @return array Post data.
+ */
+ protected function get_data() {
+ return Plugin::$instance->db->get_plain_editor( $this->post_id );
+ }
+
+ /**
+ * Render CSS.
+ *
+ * Parse the CSS for all the elements.
+ *
+ * @since 1.2.0
+ * @access protected
+ */
+ protected function render_css() {
+ $data = $this->get_data();
+
+ if ( ! empty( $data ) ) {
+ foreach ( $data as $element_data ) {
+ $element = Plugin::$instance->elements_manager->create_element_instance( $element_data );
+
+ if ( ! $element ) {
+ continue;
+ }
+
+ $this->render_styles( $element );
+ }
+ }
+ }
+
+ /**
+ * Enqueue CSS.
+ *
+ * Enqueue the post CSS file in Elementor.
+ *
+ * This method ensures that the post was actually built with elementor before
+ * enqueueing the post CSS file.
+ *
+ * @since 1.2.2
+ * @access public
+ */
+ public function enqueue() {
+ if ( ! Plugin::$instance->db->is_built_with_elementor( $this->post_id ) ) {
+ return;
+ }
+
+ parent::enqueue();
+ }
+
+ /**
+ * Add controls-stack style rules.
+ *
+ * Parse the CSS for all the elements inside any given controls stack.
+ *
+ * This method recursively renders the CSS for all the child elements in the stack.
+ *
+ * @since 1.6.0
+ * @access public
+ *
+ * @param Controls_Stack $controls_stack The controls stack.
+ * @param array $controls Controls array.
+ * @param array $values Values array.
+ * @param array $placeholders Placeholders.
+ * @param array $replacements Replacements.
+ */
+ public function add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements ) {
+ parent::add_controls_stack_style_rules( $controls_stack, $controls, $values, $placeholders, $replacements );
+
+ if ( $controls_stack instanceof Element_Base ) {
+ foreach ( $controls_stack->get_children() as $child_element ) {
+ $this->render_styles( $child_element );
+ }
+ }
+ }
+
+ /**
+ * Get enqueue dependencies.
+ *
+ * Retrieve the name of the stylesheet used by `wp_enqueue_style()`.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return array Name of the stylesheet.
+ */
+ protected function get_enqueue_dependencies() {
+ return [ 'elementor-frontend' ];
+ }
+
+ /**
+ * Get inline dependency.
+ *
+ * Retrieve the name of the stylesheet used by `wp_add_inline_style()`.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return string Name of the stylesheet.
+ */
+ protected function get_inline_dependency() {
+ return 'elementor-frontend';
+ }
+
+ /**
+ * Get file handle ID.
+ *
+ * Retrieve the handle ID for the post CSS file.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @return string CSS file handle ID.
+ */
+ protected function get_file_handle_id() {
+ return 'elementor-post-' . $this->post_id;
+ }
+
+ /**
+ * Render styles.
+ *
+ * Parse the CSS for any given element.
+ *
+ * @since 1.2.0
+ * @access protected
+ *
+ * @param Element_Base $element The element.
+ */
+ protected function render_styles( Element_Base $element ) {
+ /**
+ * Before element parse CSS.
+ *
+ * Fires before the CSS of the element is parsed.
+ *
+ * @since 1.2.0
+ *
+ * @param Post $this The post CSS file.
+ * @param Element_Base $element The element.
+ */
+ do_action( 'elementor/element/before_parse_css', $this, $element );
+
+ $element_settings = $element->get_settings();
+
+ $this->add_controls_stack_style_rules( $element, $element->get_style_controls( null, $element->get_parsed_dynamic_settings() ), $element_settings, [ '{{ID}}', '{{WRAPPER}}' ], [ $element->get_id(), $this->get_element_unique_selector( $element ) ] );
+
+ /**
+ * After element parse CSS.
+ *
+ * Fires after the CSS of the element is parsed.
+ *
+ * @since 1.2.0
+ *
+ * @param Post $this The post CSS file.
+ * @param Element_Base $element The element.
+ */
+ do_action( 'elementor/element/parse_css', $this, $element );
+ }
+}
--- /dev/null
+<?php
+namespace Elementor\Core\Files;
+
+use Elementor\Core\Files\CSS\Global_CSS;
+use Elementor\Core\Files\CSS\Post as Post_CSS;
+use Elementor\Core\Responsive\Files\Frontend;
+use Elementor\Utils;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Elementor files manager.
+ *
+ * Elementor files manager handler class is responsible for creating files.
+ *
+ * @since 1.2.0
+ */
+class Manager {
+
+ /**
+ * Files manager constructor.
+ *
+ * Initializing the Elementor files manager.
+ *
+ * @since 1.2.0
+ * @access public
+ */
+ public function __construct() {
+ $this->register_actions();
+ }
+
+ /**
+ * On post delete.
+ *
+ * Delete post CSS immediately after a post is deleted from the database.
+ *
+ * Fired by `deleted_post` action.
+ *
+ * @since 1.2.0
+ * @access public
+ *
+ * @param string $post_id Post ID.
+ */
+ public function on_delete_post( $post_id ) {
+ if ( ! Utils::is_post_support( $post_id ) ) {
+ return;
+ }
+
+ $css_file = new Post_CSS( $post_id );
+
+ $css_file->delete();
+ }
+
+ /**
+ * On export post meta.
+ *
+ * When exporting data using WXR, skip post CSS file meta key. This way the
+ * export won't contain the post CSS file data used by Elementor.
+ *
+ * Fired by `wxr_export_skip_postmeta` filter.
+ *
+ * @since 1.2.0
+ * @access public
+ *
+ * @param bool $skip Whether to skip the current post meta.
+ * @param string $meta_key Current meta key.
+ *
+ * @return bool Whether to skip the post CSS meta.
+ */
+ public function on_export_post_meta( $skip, $meta_key ) {
+ if ( Post_CSS::META_KEY === $meta_key ) {
+ $skip = true;
+ }
+
+ return $skip;
+ }
+
+ /**
+ * Clear cache.
+ *
+ * Delete all meta containing files data. And delete the actual
+ * files from the upload directory.
+ *
+ * @since 1.2.0
+ * @access public
+ */
+ public function clear_cache() {
+ delete_post_meta_by_key( Post_CSS::META_KEY );
+
+ delete_option( Global_CSS::META_KEY );
+
+ delete_option( Frontend::META_KEY );
+
+ // Delete files.
+ $path = Base::get_base_uploads_dir() . Base::DEFAULT_FILES_DIR . '*';
+
+ foreach ( glob( $path ) as $file_path ) {
+ unlink( $file_path );
+ }
+
+ /**
+ * Elementor clear files.
+ *
+ * Fires after Elementor clears files
+ *
+ * @since 2.0.8
+ * @deprecated 2.1.0 Use `elementor/core/files/clear_cache` instead
+ */
+ do_action_deprecated( 'elementor/css-file/clear_cache', [], '2.1.0', 'elementor/core/files/clear_cache' );
+
+ /**
+ * Elementor clear files.
+ *
+ * Fires after Elementor clears files
+ *
+ * @since 2.1.0
+ */
+ do_action( 'elementor/core/files/clear_cache' );
+ }
+
+ /**
+ * Register actions.
+ *
+ * Register filters and actions for the files manager.
+ *
+ * @since 1.2.0
+ * @access private
+ */
+ private function register_actions() {
+ add_action( 'deleted_post', [ $this, 'on_delete_post' ] );
+ add_filter( 'wxr_export_skip_postmeta', [ $this, 'on_export_post_meta' ], 10, 2 );
+ }
+}
'library',
'dynamic-tags',
'page-templates',
+ 'gutenberg',
+ 'wp-cli',
];
}
--- /dev/null
+<?php
+
+namespace Elementor\Core\Responsive\Files;
+
+use Elementor\Core\Files\Base;
+use Elementor\Core\Responsive\Responsive;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly
+}
+
+class Frontend extends Base {
+
+ const META_KEY = 'elementor-custom-breakpoints-files';
+
+ private $template_file;
+
+ public function __construct( $file_name, $template_file = null ) {
+ $this->template_file = $template_file;
+
+ parent::__construct( $file_name );
+ }
+
+ public function parse_content() {
+ $breakpoints = Responsive::get_breakpoints();
+
+ $breakpoints_keys = array_keys( $breakpoints );
+
+ $file_content = file_get_contents( $this->template_file );
+
+ $file_content = preg_replace_callback( '/ELEMENTOR_SCREEN_([A-Z]+)_([A-Z]+)/', function ( $placeholder_data ) use ( $breakpoints_keys, $breakpoints ) {
+ $breakpoint_index = array_search( strtolower( $placeholder_data[1] ), $breakpoints_keys );
+
+ $is_max_point = 'MAX' === $placeholder_data[2];
+
+ if ( $is_max_point ) {
+ $breakpoint_index++;
+ }
+
+ $value = $breakpoints[ $breakpoints_keys[ $breakpoint_index ] ];
+
+ if ( $is_max_point ) {
+ $value--;
+ }
+
+ return $value . 'px';
+ }, $file_content );
+
+ return $file_content;
+ }
+
+ /**
+ * Load meta.
+ *
+ * Retrieve the file meta data.
+ *
+ * @since 2.1.0
+ * @access protected
+ */
+ protected function load_meta() {
+ $option = $this->load_meta_option();
+
+ $file_meta_key = $this->get_file_meta_key();
+
+ if ( empty( $option[ $file_meta_key ] ) ) {
+ return [];
+ }
+
+ return $option[ $file_meta_key ];
+ }
+
+ /**
+ * Update meta.
+ *
+ * Update the file meta data.
+ *
+ * @since 2.1.0
+ * @access protected
+ *
+ * @param array $meta New meta data.
+ */
+ protected function update_meta( $meta ) {
+ $option = $this->load_meta_option();
+
+ $option[ $this->get_file_meta_key() ] = $meta;
+
+ update_option( static::META_KEY, $option );
+ }
+
+ /**
+ * Delete meta.
+ *
+ * Delete the file meta data.
+ *
+ * @since 2.1.0
+ * @access protected
+ */
+ protected function delete_meta() {
+ $option = $this->load_meta_option();
+
+ $file_meta_key = $this->get_file_meta_key();
+
+ if ( isset( $option[ $file_meta_key ] ) ) {
+ unset( $option[ $file_meta_key ] );
+ }
+
+ if ( $option ) {
+ update_option( static::META_KEY, $option );
+ } else {
+ delete_option( static::META_KEY );
+ }
+ }
+
+ private function get_file_meta_key() {
+ return pathinfo( $this->get_file_name(), PATHINFO_FILENAME );
+ }
+
+ private function load_meta_option() {
+ $option = get_option( static::META_KEY );
+
+ if ( ! $option ) {
+ $option = [];
+ }
+
+ return $option;
+ }
+}
--- /dev/null
+<?php
+namespace Elementor\Core\Responsive;
+
+use Elementor\Core\Responsive\Files\Frontend;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Elementor responsive.
+ *
+ * Elementor responsive handler class is responsible for setting up Elementor
+ * responsive breakpoints.
+ *
+ * @since 1.0.0
+ */
+class Responsive {
+
+ /**
+ * The Elementor breakpoint prefix.
+ */
+ const BREAKPOINT_OPTION_PREFIX = 'elementor_viewport_';
+
+ /**
+ * Default breakpoints.
+ *
+ * Holds the default responsive breakpoints.
+ *
+ * @since 1.0.0
+ * @access private
+ * @static
+ *
+ * @var array Default breakpoints.
+ */
+ private static $default_breakpoints = [
+ 'xs' => 0,
+ 'sm' => 480,
+ 'md' => 768,
+ 'lg' => 1025,
+ 'xl' => 1440,
+ 'xxl' => 1600,
+ ];
+
+ /**
+ * Editable breakpoint keys.
+ *
+ * Holds the editable breakpoint keys.
+ *
+ * @since 1.0.0
+ * @access private
+ * @static
+ *
+ * @var array Editable breakpoint keys.
+ */
+ private static $editable_breakpoints_keys = [
+ 'md',
+ 'lg',
+ ];
+
+ /**
+ * Get default breakpoints.
+ *
+ * Retrieve the default responsive breakpoints.
+ *
+ * @since 1.0.0
+ * @access public
+ * @static
+ *
+ * @return array Default breakpoints.
+ */
+ public static function get_default_breakpoints() {
+ return self::$default_breakpoints;
+ }
+
+ /**
+ * Get editable breakpoints.
+ *
+ * Retrieve the editable breakpoints.
+ *
+ * @since 1.0.0
+ * @access public
+ * @static
+ *
+ * @return array Editable breakpoints.
+ */
+ public static function get_editable_breakpoints() {
+ return array_intersect_key( self::get_breakpoints(), array_flip( self::$editable_breakpoints_keys ) );
+ }
+
+ /**
+ * Get breakpoints.
+ *
+ * Retrieve the responsive breakpoints.
+ *
+ * @since 1.0.0
+ * @access public
+ * @static
+ *
+ * @return array Responsive breakpoints.
+ */
+ public static function get_breakpoints() {
+ return array_reduce(
+ array_keys( self::$default_breakpoints ), function( $new_array, $breakpoint_key ) {
+ if ( ! in_array( $breakpoint_key, self::$editable_breakpoints_keys ) ) {
+ $new_array[ $breakpoint_key ] = self::$default_breakpoints[ $breakpoint_key ];
+ } else {
+ $saved_option = get_option( self::BREAKPOINT_OPTION_PREFIX . $breakpoint_key );
+
+ $new_array[ $breakpoint_key ] = $saved_option ? (int) $saved_option : self::$default_breakpoints[ $breakpoint_key ];
+ }
+
+ return $new_array;
+ }, []
+ );
+ }
+
+ public static function has_custom_breakpoints() {
+ return ! ! array_diff( self::$default_breakpoints, self::get_breakpoints() );
+ }
+
+ public static function get_stylesheet_templates_path() {
+ return ELEMENTOR_ASSETS_PATH . 'css/templates/';
+ }
+
+ public static function compile_stylesheet_templates() {
+ foreach ( self::get_stylesheet_templates() as $file_name => $template_path ) {
+ $file = new Frontend( $file_name, $template_path );
+
+ $file->update();
+ }
+ }
+
+ private static function get_stylesheet_templates() {
+ $templates_paths = glob( self::get_stylesheet_templates_path() . '*.css' );
+
+ $templates = [];
+
+ foreach ( $templates_paths as $template_path ) {
+ $file_name = 'custom-' . basename( $template_path );
+
+ $templates[ $file_name ] = $template_path;
+ }
+
+ return apply_filters( 'elementor/core/responsive/get_stylesheet_templates', $templates );
+ }
+}
parent::__construct();
add_action( 'admin_menu', [ $this, 'register_admin_menu' ], 100 );
- // TODO: Restore it after the release of Pro v2.0 // add_action( 'elementor/role/restrictions/controls', [ $this, 'get_go_pro_link_html' ] );
+ add_action( 'elementor/role/restrictions/controls', [ $this, 'get_go_pro_link_html' ] );
}
}
namespace Elementor\Core\Settings\Base;
use Elementor\Core\Ajax_Manager;
-use Elementor\CSS_File;
+use Elementor\Core\Files\CSS\Base;
use Elementor\Plugin;
if ( ! defined( 'ABSPATH' ) ) {
* @since 1.6.0
* @access public
*
- * @param CSS_File $css_file The requested CSS file.
+ * @param Base $css_file The requested CSS file.
*/
- public function add_settings_css_rules( CSS_File $css_file ) {
+ public function add_settings_css_rules( Base $css_file ) {
$model = $this->get_model_for_css_file( $css_file );
$css_file->add_controls_stack_style_rules(
* @access protected
* @abstract
*
- * @param CSS_File $css_file The requested CSS file.
+ * @param Base $css_file The requested CSS file.
*/
- abstract protected function get_model_for_css_file( CSS_File $css_file );
+ abstract protected function get_model_for_css_file( Base $css_file );
/**
* Get CSS file for update.
namespace Elementor\Core\Settings\General;
use Elementor\Controls_Manager;
-use Elementor\CSS_File;
+use Elementor\Core\Files\CSS\Base;
+use Elementor\Core\Files\CSS\Global_CSS;
use Elementor\Core\Settings\Base\Manager as BaseManager;
use Elementor\Core\Settings\Base\Model as BaseModel;
-use Elementor\Global_CSS_File;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
* @since 1.6.0
* @access protected
*
- * @param CSS_File $css_file The requested CSS file.
+ * @param Base $css_file The requested CSS file.
*
* @return BaseModel The model object.
*/
- protected function get_model_for_css_file( CSS_File $css_file ) {
+ protected function get_model_for_css_file( Base $css_file ) {
return $this->get_model();
}
*
* @param int $id Post ID.
*
- * @return Global_CSS_File The global CSS file object.
+ * @return Global_CSS The global CSS file object.
*/
protected function get_css_file_for_update( $id ) {
- return new Global_CSS_File();
+ return new Global_CSS( 'global.css' );
}
/**
* @return array Controls list.
*/
public static function get_controls_list() {
-
return [
Controls_Manager::TAB_STYLE => [
'style' => [
$config = [];
$user_can = Plugin::instance()->role_manager->user_can( 'design' );
+
foreach ( self::$settings_managers as $name => $manager ) {
$settings_model = $manager->get_model_for_config();
$tabs = $settings_model->get_tabs_controls();
+
if ( ! $user_can ) {
unset( $tabs['style'] );
}
+
$config[ $name ] = [
'name' => $manager->get_name(),
'panelPage' => $settings_model->get_panel_page_settings(),
<?php
namespace Elementor\Core\Settings\Page;
+use Elementor\Core\Files\CSS\Base;
+use Elementor\Core\Files\CSS\Post;
+use Elementor\Core\Files\CSS\Post_Preview;
use Elementor\Core\Utils\Exceptions;
-use Elementor\CSS_File;
-use Elementor\Core\Settings\Base\Manager as BaseManager;
use Elementor\Core\Settings\Manager as SettingsManager;
+use Elementor\Core\Settings\Base\Manager as BaseManager;
use Elementor\Core\Settings\Base\Model as BaseModel;
use Elementor\DB;
use Elementor\Plugin;
-use Elementor\Post_CSS_File;
-use Elementor\Post_Preview_CSS;
use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
const META_KEY = '_elementor_page_settings';
/**
- * Get page data.
+ * Is CPT supports custom templates.
*
- * Retrieves page data for any given a page ID.
+ * Whether the Custom Post Type supports templates.
*
* @since 1.6.0
- * @deprecated 1.6.0
+ * @deprecated 2.0.0 Use `Utils::is_cpt_custom_templates_supported()` method instead.
* @access public
* @static
*
- * @param int $id Page ID.
- *
- * @return BaseModel
+ * @return bool True is templates are supported, False otherwise.
*/
- public static function get_page( $id ) {
- return SettingsManager::get_settings_managers( 'page' )->get_model( $id );
+ public static function is_cpt_custom_templates_supported() {
+ // Todo: _deprecated_function( __METHOD__, '2.0.0', 'Utils::is_cpt_custom_templates_supported()' );
+
+ return Utils::is_cpt_custom_templates_supported();
}
/**
- * Is CPT supports custom templates.
+ * Get page data.
*
- * Whether the Custom Post Type supports templates.
+ * Retrieves page data for any given a page ID.
*
- * @since 1.6.0
- * @deprecated 2.0.0 Use `Utils::is_cpt_custom_templates_supported()` method instead.
- * @access public
+ * @since 1.6.0
+ * @deprecated 1.6.0
+ * @access public
* @static
*
- * @return bool True is templates are supported, False otherwise.
+ * @param int $id Page ID.
+ *
+ * @return BaseModel
*/
- public static function is_cpt_custom_templates_supported() {
- // Todo: _deprecated_function( __METHOD__, '2.0.0', 'Utils::is_cpt_custom_templates_supported()' );
+ public static function get_page( $id ) {
+ // translators: %s Elementor Document Settings API URL
+ _deprecated_file( __METHOD__, '1.6.0', 'the new settings API', sprintf( 'See <a href="%s">Elementor Document Settings</a> for more information.', 'https://developers.elementor.com/elementor-document-settings/' ) );
- return Utils::is_cpt_custom_templates_supported();
+ return SettingsManager::get_settings_managers( 'page' )->get_model( $id );
}
/**
return null;
}
- $post_id = get_the_ID();
-
if ( Plugin::$instance->editor->is_edit_mode() ) {
+ $post_id = Plugin::$instance->editor->get_post_id();
$document = Plugin::$instance->documents->get_doc_or_auto_save( $post_id );
} else {
+ $post_id = get_the_ID();
$document = Plugin::$instance->documents->get_doc_for_frontend( $post_id );
}
}
if ( Utils::is_cpt_custom_templates_supported() ) {
- $template = 'default';
+ $template = get_metadata( 'post', $post->ID, '_wp_page_template', true );
if ( isset( $data['template'] ) ) {
$template = $data['template'];
}
+ if ( empty( $template ) ) {
+ $template = 'default';
+ }
+
// Use `update_metadata` in order to save also for revisions.
update_metadata( 'post', $post->ID, '_wp_page_template', $template );
}
* @since 1.6.0
* @access protected
*
- * @param CSS_File $css_file The requested CSS file.
+ * @param Base $css_file The requested CSS file.
*
* @return BaseModel The model object.
*/
- protected function get_model_for_css_file( CSS_File $css_file ) {
- if ( ! $css_file instanceof Post_CSS_File ) {
+ protected function get_model_for_css_file( Base $css_file ) {
+ if ( ! $css_file instanceof Post ) {
return null;
}
$post_id = $css_file->get_post_id();
- if ( $css_file instanceof Post_Preview_CSS ) {
+ if ( $css_file instanceof Post_Preview ) {
$autosave = Utils::get_post_autosave( $post_id );
if ( $autosave ) {
$post_id = $autosave->ID;
* @return string CSS wrapper selector.
*/
public function get_css_wrapper_selector() {
- return 'body.elementor-page-' . $this->post_parent->ID;
+ $document = Plugin::$instance->documents->get( $this->post_parent->ID );
+ return $document->get_css_wrapper_selector();
}
/**
* Description: The most advanced frontend drag & drop page builder. Create high-end, pixel perfect websites at record speeds. Any theme, any page, any design.
* Plugin URI: https://elementor.com/?utm_source=wp-plugins&utm_campaign=plugin-uri&utm_medium=wp-dash
* Author: Elementor.com
- * Version: 2.0.10
+ * Version: 2.2.1
* Author URI: https://elementor.com/?utm_source=wp-plugins&utm_campaign=author-uri&utm_medium=wp-dash
*
* Text Domain: elementor
exit; // Exit if accessed directly.
}
-define( 'ELEMENTOR_VERSION', '2.0.10' );
-define( 'ELEMENTOR_PREVIOUS_STABLE_VERSION', '1.9.8' );
+define( 'ELEMENTOR_VERSION', '2.2.1' );
+define( 'ELEMENTOR_PREVIOUS_STABLE_VERSION', '2.1.8' );
define( 'ELEMENTOR__FILE__', __FILE__ );
define( 'ELEMENTOR_PLUGIN_BASE', plugin_basename( ELEMENTOR__FILE__ ) );
}
define( 'ELEMENTOR_MODULES_PATH', plugin_dir_path( ELEMENTOR__FILE__ ) . '/modules' );
+define( 'ELEMENTOR_ASSETS_PATH', ELEMENTOR_PATH . 'assets/' );
define( 'ELEMENTOR_ASSETS_URL', ELEMENTOR_URL . 'assets/' );
add_action( 'plugins_loaded', 'elementor_load_plugin_textdomain' );
if ( ! version_compare( PHP_VERSION, '5.4', '>=' ) ) {
add_action( 'admin_notices', 'elementor_fail_php_version' );
-} elseif ( ! version_compare( get_bloginfo( 'version' ), '4.6', '>=' ) ) {
+} elseif ( ! version_compare( get_bloginfo( 'version' ), '4.7', '>=' ) ) {
add_action( 'admin_notices', 'elementor_fail_wp_version' );
} else {
require( ELEMENTOR_PATH . 'includes/plugin.php' );
*/
function elementor_fail_php_version() {
/* translators: %s: PHP version */
- $message = sprintf( esc_html__( 'Elementor requires PHP version %s+, plugin is currently NOT ACTIVE.', 'elementor' ), '5.4' );
+ $message = sprintf( esc_html__( 'Elementor requires PHP version %s+, plugin is currently NOT RUNNING.', 'elementor' ), '5.4' );
$html_message = sprintf( '<div class="error">%s</div>', wpautop( $message ) );
echo wp_kses_post( $html_message );
}
*/
function elementor_fail_wp_version() {
/* translators: %s: WordPress version */
- $message = sprintf( esc_html__( 'Elementor requires WordPress version %s+. Because you are using an earlier version, the plugin is currently NOT ACTIVE.', 'elementor' ), '4.6' );
+ $message = sprintf( esc_html__( 'Elementor requires WordPress version %s+. Because you are using an earlier version, the plugin is currently NOT RUNNING.', 'elementor' ), '4.7' );
$html_message = sprintf( '<div class="error">%s</div>', wpautop( $message ) );
echo wp_kses_post( $html_message );
}
--- /dev/null
+<?php
+namespace Elementor;
+
+use Elementor\Core\Base\Document;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly
+}
+
+$document_types = Plugin::$instance->documents->get_document_types();
+
+$types = [];
+
+$selected = get_query_var( 'elementor_library_type' );
+
+foreach ( $document_types as $document_type ) {
+ if ( $document_type::get_property( 'show_in_library' ) ) {
+ /**
+ * @var Document $instance
+ */
+ $instance = new $document_type();
+
+ $types[ $instance->get_name() ] = $document_type::get_title();
+ }
+}
+
+/**
+ * Create new template library dialog types.
+ *
+ * Filters the dialog types when printing new template dialog.
+ *
+ * @since 2.0.0
+ *
+ * @param array $types Types data.
+ * @param Document $document_types Document types.
+ */
+$types = apply_filters( 'elementor/template-library/create_new_dialog_types', $types, $document_types );
+?>
+<script type="text/template" id="tmpl-elementor-new-template">
+ <div id="elementor-new-template__description">
+ <div id="elementor-new-template__description__title"><?php echo __( 'Templates Help You <span>Work Efficiently</span>', 'elementor' ); ?></div>
+ <div id="elementor-new-template__description__content"><?php echo __( 'Use templates to create the different pieces of your site, and reuse them with one click whenever needed.', 'elementor' ); ?></div>
+ <?php
+ /*
+ <div id="elementor-new-template__take_a_tour">
+ <i class="eicon-play-o"></i>
+ <a href="#"><?php echo __( 'Take The Video Tour', 'elementor' ); ?></a>
+ </div>
+ */
+ ?>
+ </div>
+ <form id="elementor-new-template__form" action="<?php esc_url( admin_url( '/edit.php' ) ); ?>">
+ <input type="hidden" name="post_type" value="elementor_library">
+ <input type="hidden" name="action" value="elementor_new_post">
+ <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'elementor_action_new_post' ); ?>">
+ <div id="elementor-new-template__form__title"><?php echo __( 'Choose Template Type', 'elementor' ); ?></div>
+ <div id="elementor-new-template__form__template-type__wrapper" class="elementor-form-field">
+ <label for="elementor-new-template__form__template-type" class="elementor-form-field__label"><?php echo __( 'Select the type of template you want to work on', 'elementor' ); ?></label>
+ <div class="elementor-form-field__select__wrapper">
+ <select id="elementor-new-template__form__template-type" class="elementor-form-field__select" name="template_type" required>
+ <option value=""><?php echo __( 'Select', 'elementor' ); ?>...</option>
+ <?php
+ foreach ( $types as $value => $title ) {
+ printf( '<option value="%1$s" %2$s>%3$s</option>', $value, selected( $selected, $value, false ), $title );
+ }
+ ?>
+ </select>
+ </div>
+ </div>
+ <?php
+ /**
+ * Template library dialog fields.
+ *
+ * Fires after Elementor template library dialog fields are displayed.
+ *
+ * @since 2.0.0
+ */
+ do_action( 'elementor/template-library/create_new_dialog_fields' );
+ ?>
+
+ <div id="elementor-new-template__form__post-title__wrapper" class="elementor-form-field">
+ <label for="elementor-new-template__form__post-title" class="elementor-form-field__label">
+ <?php echo __( 'Name your template', 'elementor' ); ?>
+ </label>
+ <div class="elementor-form-field__text__wrapper">
+ <input type="text" placeholder="<?php echo esc_attr__( 'Enter template name (optional)', 'elementor' ); ?>" id="elementor-new-template__form__post-title" class="elementor-form-field__text" name="post_data[post_title]">
+ </div>
+ </div>
+ <button id="elementor-new-template__form__submit" class="elementor-button elementor-button-success"><?php echo __( 'Create Template', 'elementor' ); ?></button>
+ </form>
+</script>
+++ /dev/null
-<?php
-namespace Elementor;
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit; // Exit if accessed directly.
-}
-
-/**
- * Elementor admin.
- *
- * Elementor admin handler class is responsible for initializing Elementor in
- * WordPress admin.
- *
- * @since 1.0.0
- */
-class Admin {
-
- /**
- * Enqueue admin scripts.
- *
- * Registers all the admin scripts and enqueues them.
- *
- * Fired by `admin_enqueue_scripts` action.
- *
- * @since 1.0.0
- * @access public
- */
- public function enqueue_scripts() {
- $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
-
- wp_register_script(
- 'elementor-dialog',
- ELEMENTOR_ASSETS_URL . 'lib/dialog/dialog' . $suffix . '.js',
- [
- 'jquery-ui-position',
- ],
- '4.2.1',
- true
- );
-
- wp_register_script(
- 'elementor-admin-app',
- ELEMENTOR_ASSETS_URL . 'js/admin' . $suffix . '.js',
- [
- 'jquery',
- ],
- ELEMENTOR_VERSION,
- true
- );
-
- wp_localize_script(
- 'elementor-admin-app',
- 'ElementorAdminConfig',
- [
- 'home_url' => home_url(),
- 'i18n' => [
- 'rollback_confirm' => __( 'Are you sure you want to reinstall previous version?', 'elementor' ),
- 'rollback_to_previous_version' => __( 'Rollback to Previous Version', 'elementor' ),
- 'yes' => __( 'Yes', 'elementor' ),
- 'cancel' => __( 'Cancel', 'elementor' ),
- ],
- ]
- );
-
- wp_enqueue_script( 'elementor-admin-app' );
-
- if ( in_array( get_current_screen()->id, [ 'plugins', 'plugins-network' ], true ) ) {
- add_action( 'admin_footer', [ $this, 'print_deactivate_feedback_dialog' ] );
-
- $this->enqueue_feedback_dialog_scripts();
- }
- }
-
- /**
- * Enqueue admin styles.
- *
- * Registers all the admin styles and enqueues them.
- *
- * Fired by `admin_enqueue_scripts` action.
- *
- * @since 1.0.0
- * @access public
- */
- public function enqueue_styles() {
- $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
-
- $direction_suffix = is_rtl() ? '-rtl' : '';
-
- wp_register_style(
- 'elementor-icons',
- ELEMENTOR_ASSETS_URL . 'lib/eicons/css/elementor-icons' . $suffix . '.css',
- [],
- '3.3.0'
- );
-
- wp_register_style(
- 'elementor-admin-app',
- ELEMENTOR_ASSETS_URL . 'css/admin' . $direction_suffix . $suffix . '.css',
- [
- 'elementor-icons',
- ],
- ELEMENTOR_VERSION
- );
-
- wp_enqueue_style( 'elementor-admin-app' );
-
- // It's for upgrade notice.
- // TODO: enqueue this just if needed.
- add_thickbox();
- }
-
- /**
- * Print switch mode button.
- *
- * Adds a switch button in post edit screen (which has cpt support). To allow
- * the user to switch from the native WordPress editor to Elementor builder.
- *
- * Fired by `edit_form_after_title` action.
- *
- * @since 1.0.0
- * @access public
- *
- * @param \WP_Post $post The current post object.
- */
- public function print_switch_mode_button( $post ) {
- if ( ! User::is_current_user_can_edit( $post->ID ) ) {
- return;
- }
-
- wp_nonce_field( basename( __FILE__ ), '_elementor_edit_mode_nonce' );
- ?>
- <div id="elementor-switch-mode">
- <input id="elementor-switch-mode-input" type="hidden" name="_elementor_post_mode" value="<?php echo Plugin::$instance->db->is_built_with_elementor( $post->ID ); ?>" />
- <button id="elementor-switch-mode-button" type="button" class="button button-primary button-hero">
- <span class="elementor-switch-mode-on"><?php echo __( '← Back to WordPress Editor', 'elementor' ); ?></span>
- <span class="elementor-switch-mode-off">
- <i class="eicon-elementor" aria-hidden="true"></i>
- <?php echo __( 'Edit with Elementor', 'elementor' ); ?>
- </span>
- </button>
- </div>
- <div id="elementor-editor">
- <a id="elementor-go-to-edit-page-link" href="<?php echo Utils::get_edit_link( $post->ID ); ?>">
- <div id="elementor-editor-button" class="button button-primary button-hero">
- <i class="eicon-elementor" aria-hidden="true"></i>
- <?php echo __( 'Edit with Elementor', 'elementor' ); ?>
- </div>
- <div class="elementor-loader-wrapper">
- <div class="elementor-loader">
- <div class="elementor-loader-box"></div>
- <div class="elementor-loader-box"></div>
- <div class="elementor-loader-box"></div>
- <div class="elementor-loader-box"></div>
- </div>
- <div class="elementor-loading-title"><?php echo __( 'Loading', 'elementor' ); ?></div>
- </div>
- </a>
- </div>
- <?php
- }
-
- /**
- * Save post.
- *
- * Flag the post mode when the post is saved.
- *
- * Fired by `save_post` action.
- *
- * @since 1.0.0
- * @access public
- *
- * @param int $post_id Post ID.
- */
- public function save_post( $post_id ) {
- if ( ! isset( $_POST['_elementor_edit_mode_nonce'] ) || ! wp_verify_nonce( $_POST['_elementor_edit_mode_nonce'], basename( __FILE__ ) ) ) {
- return;
- }
-
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
- return;
- }
-
- Plugin::$instance->db->set_is_elementor_page( $post_id, ! empty( $_POST['_elementor_post_mode'] ) );
- }
-
- /**
- * Add edit link in dashboard.
- *
- * Add an edit link to the post/page action links on the post/pages list table.
- *
- * Fired by `post_row_actions` and `page_row_actions` filters.
- *
- * @since 1.0.0
- * @access public
- *
- * @param array $actions An array of row action links.
- * @param \WP_Post $post The post object.
- *
- * @return array An updated array of row action links.
- */
- public function add_edit_in_dashboard( $actions, \WP_Post $post ) {
- if ( User::is_current_user_can_edit( $post->ID ) && Plugin::$instance->db->is_built_with_elementor( $post->ID ) ) {
- $actions['edit_with_elementor'] = sprintf(
- '<a href="%1$s">%2$s</a>',
- Utils::get_edit_link( $post->ID ),
- __( 'Edit with Elementor', 'elementor' )
- );
- }
-
- return $actions;
- }
-
- /**
- * Add Elementor post state.
- *
- * Adds a new "Elementor" post state to the post table.
- *
- * Fired by `display_post_states` filter.
- *
- * @since 1.8.0
- * @access public
- *
- * @param array $post_states An array of post display states.
- * @param \WP_Post $post The current post object.
- *
- * @return array A filtered array of post display states.
- */
- public function add_elementor_post_state( $post_states, $post ) {
- if ( User::is_current_user_can_edit( $post->ID ) && Plugin::$instance->db->is_built_with_elementor( $post->ID ) ) {
- $post_states['elementor'] = __( 'Elementor', 'elementor' );
- }
- return $post_states;
- }
-
- /**
- * Body status classes.
- *
- * Adds CSS classes to the admin body tag.
- *
- * Fired by `admin_body_class` filter.
- *
- * @since 1.0.0
- * @access public
- *
- * @param string $classes Space-separated list of CSS classes.
- *
- * @return string Space-separated list of CSS classes.
- */
- public function body_status_classes( $classes ) {
- global $pagenow;
-
- if ( in_array( $pagenow, [ 'post.php', 'post-new.php' ], true ) && Utils::is_post_type_support() ) {
- $post = get_post();
-
- $mode_class = Plugin::$instance->db->is_built_with_elementor( $post->ID ) ? 'elementor-editor-active' : 'elementor-editor-inactive';
-
- $classes .= ' ' . $mode_class;
- }
-
- return $classes;
- }
-
- /**
- * Plugin action links.
- *
- * Adds action links to the plugin list table
- *
- * Fired by `plugin_action_links` filter.
- *
- * @since 1.0.0
- * @access public
- *
- * @param array $links An array of plugin action links.
- *
- * @return array An array of plugin action links.
- */
- public function plugin_action_links( $links ) {
- $settings_link = sprintf( '<a href="%1$s">%2$s</a>', admin_url( 'admin.php?page=' . Settings::PAGE_ID ), __( 'Settings', 'elementor' ) );
-
- array_unshift( $links, $settings_link );
-
- $links['go_pro'] = sprintf( '<a href="%1$s" target="_blank" class="elementor-plugins-gopro">%2$s</a>', Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=wp-plugins&utm_campaign=gopro&utm_medium=wp-dash' ), __( 'Go Pro', 'elementor' ) );
-
- return $links;
- }
-
- /**
- * Plugin row meta.
- *
- * Adds row meta links to the plugin list table
- *
- * Fired by `plugin_row_meta` filter.
- *
- * @since 1.1.4
- * @access public
- *
- * @param array $plugin_meta An array of the plugin's metadata, including
- * the version, author, author URI, and plugin URI.
- * @param string $plugin_file Path to the plugin file, relative to the plugins
- * directory.
- *
- * @return array An array of plugin row meta links.
- */
- public function plugin_row_meta( $plugin_meta, $plugin_file ) {
- if ( ELEMENTOR_PLUGIN_BASE === $plugin_file ) {
- $row_meta = [
- 'docs' => '<a href="https://go.elementor.com/docs-admin-plugins/" aria-label="' . esc_attr( __( 'View Elementor Documentation', 'elementor' ) ) . '" target="_blank">' . __( 'Docs & FAQs', 'elementor' ) . '</a>',
- 'ideo' => '<a href="https://go.elementor.com/yt-admin-plugins/" aria-label="' . esc_attr( __( 'View Elementor Video Tutorials', 'elementor' ) ) . '" target="_blank">' . __( 'Video Tutorials', 'elementor' ) . '</a>',
- ];
-
- $plugin_meta = array_merge( $plugin_meta, $row_meta );
- }
-
- return $plugin_meta;
- }
-
- /**
- * Admin notices.
- *
- * Add Elementor notices to WordPress admin screen.
- *
- * Fired by `admin_notices` action.
- *
- * @since 1.0.0
- * @access public
- */
- public function admin_notices() {
- $upgrade_notice = Api::get_upgrade_notice();
- if ( empty( $upgrade_notice ) ) {
- return;
- }
-
- if ( ! current_user_can( 'update_plugins' ) ) {
- return;
- }
-
- if ( ! in_array( get_current_screen()->id, [ 'toplevel_page_elementor', 'edit-elementor_library', 'elementor_page_elementor-system-info', 'dashboard' ], true ) ) {
- return;
- }
-
- // Check if have any upgrades.
- $update_plugins = get_site_transient( 'update_plugins' );
- if ( empty( $update_plugins ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ] ) || empty( $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ]->package ) ) {
- return;
- }
- $product = $update_plugins->response[ ELEMENTOR_PLUGIN_BASE ];
-
- // Check if have upgrade notices to show.
- if ( version_compare( ELEMENTOR_VERSION, $upgrade_notice['version'], '>=' ) ) {
- return;
- }
-
- $notice_id = 'upgrade_notice_' . $upgrade_notice['version'];
- if ( User::is_user_notice_viewed( $notice_id ) ) {
- return;
- }
-
- $details_url = self_admin_url( 'plugin-install.php?tab=plugin-information&plugin=' . $product->slug . '§ion=changelog&TB_iframe=true&width=600&height=800' );
- $upgrade_url = wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' . ELEMENTOR_PLUGIN_BASE ), 'upgrade-plugin_' . ELEMENTOR_PLUGIN_BASE );
- ?>
- <div class="notice updated is-dismissible elementor-message elementor-message-dismissed" data-notice_id="<?php echo esc_attr( $notice_id ); ?>">
- <div class="elementor-message-inner">
- <div class="elementor-message-icon">
- <i class="eicon-elementor-square" aria-hidden="true"></i>
- </div>
- <div class="elementor-message-content">
- <strong><?php echo __( 'Update Notification', 'elementor' ); ?></strong>
- <p>
- <?php
- printf(
- /* translators: 1: Details URL, 2: Accessibility text, 3: Version number, 4: Update URL, 5: Accessibility text */
- __( 'There is a new version of Elementor Page Builder available. <a href="%1$s" class="thickbox open-plugin-details-modal" aria-label="%2$s">View version %3$s details</a> or <a href="%4$s" class="update-link" aria-label="%5$s">update now</a>.', 'elementor' ),
- esc_url( $details_url ),
- esc_attr( sprintf(
- /* translators: %s: Elementor version */
- __( 'View Elementor version %s details', 'elementor' ),
- $product->new_version
- ) ),
- $product->new_version,
- esc_url( $upgrade_url ),
- esc_attr( __( 'Update Elementor Now', 'elementor' ) )
- );
- ?>
- </p>
- </div>
- <div class="elementor-message-action">
- <a class="button elementor-button" href="<?php echo $upgrade_url; ?>">
- <i class="dashicons dashicons-update" aria-hidden="true"></i>
- <?php echo __( 'Update Now', 'elementor' ); ?>
- </a>
- </div>
- </div>
- </div>
- <?php
- }
-
- /**
- * Admin footer text.
- *
- * Modifies the "Thank you" text displayed in the admin footer.
- *
- * Fired by `admin_footer_text` filter.
- *
- * @since 1.0.0
- * @access public
- *
- * @param string $footer_text The content that will be printed.
- *
- * @return string The content that will be printed.
- */
- public function admin_footer_text( $footer_text ) {
- $current_screen = get_current_screen();
- $is_elementor_screen = ( $current_screen && false !== strpos( $current_screen->id, 'elementor' ) );
-
- if ( $is_elementor_screen ) {
- $footer_text = sprintf(
- /* translators: 1: Elementor, 2: Link to plugin review */
- __( 'Enjoyed %1$s? Please leave us a %2$s rating. We really appreciate your support!', 'elementor' ),
- '<strong>' . __( 'Elementor', 'elementor' ) . '</strong>',
- '<a href="https://wordpress.org/support/plugin/elementor/reviews/?filter=5#new-post" target="_blank">★★★★★</a>'
- );
- }
-
- return $footer_text;
- }
-
- /**
- * Enqueue feedback dialog scripts.
- *
- * Registers the feedback dialog scripts and enqueues them.
- *
- * @since 1.0.0
- * @access public
- */
- public function enqueue_feedback_dialog_scripts() {
- $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
-
- wp_register_script(
- 'elementor-admin-feedback',
- ELEMENTOR_ASSETS_URL . 'js/admin-feedback' . $suffix . '.js',
- [
- 'jquery',
- 'underscore',
- 'elementor-dialog',
- ],
- ELEMENTOR_VERSION,
- true
- );
-
- wp_enqueue_script( 'elementor-admin-feedback' );
-
- wp_localize_script(
- 'elementor-admin-feedback',
- 'ElementorAdminFeedbackArgs',
- [
- 'is_tracker_opted_in' => Tracker::is_allow_track(),
- 'i18n' => [
- 'submit_n_deactivate' => __( 'Submit & Deactivate', 'elementor' ),
- 'skip_n_deactivate' => __( 'Skip & Deactivate', 'elementor' ),
- ],
- ]
- );
- }
-
- /**
- * Print deactivate feedback dialog.
- *
- * Display a dialog box to ask the user why he deactivated Elementor.
- *
- * Fired by `admin_footer` filter.
- *
- * @since 1.0.0
- * @access public
- */
- public function print_deactivate_feedback_dialog() {
- $deactivate_reasons = [
- 'no_longer_needed' => [
- 'title' => __( 'I no longer need the plugin', 'elementor' ),
- 'input_placeholder' => '',
- ],
- 'found_a_better_plugin' => [
- 'title' => __( 'I found a better plugin', 'elementor' ),
- 'input_placeholder' => __( 'Please share which plugin', 'elementor' ),
- ],
- 'couldnt_get_the_plugin_to_work' => [
- 'title' => __( 'I couldn\'t get the plugin to work', 'elementor' ),
- 'input_placeholder' => '',
- ],
- 'temporary_deactivation' => [
- 'title' => __( 'It\'s a temporary deactivation', 'elementor' ),
- 'input_placeholder' => '',
- ],
- 'other' => [
- 'title' => __( 'Other', 'elementor' ),
- 'input_placeholder' => __( 'Please share the reason', 'elementor' ),
- ],
- ];
-
- ?>
- <div id="elementor-deactivate-feedback-dialog-wrapper">
- <div id="elementor-deactivate-feedback-dialog-header">
- <i class="eicon-elementor-square" aria-hidden="true"></i>
- <span id="elementor-deactivate-feedback-dialog-header-title"><?php echo __( 'Quick Feedback', 'elementor' ); ?></span>
- </div>
- <form id="elementor-deactivate-feedback-dialog-form" method="post">
- <?php
- wp_nonce_field( '_elementor_deactivate_feedback_nonce' );
- ?>
- <input type="hidden" name="action" value="elementor_deactivate_feedback" />
-
- <div id="elementor-deactivate-feedback-dialog-form-caption"><?php echo __( 'If you have a moment, please share why you are deactivating Elementor:', 'elementor' ); ?></div>
- <div id="elementor-deactivate-feedback-dialog-form-body">
- <?php foreach ( $deactivate_reasons as $reason_key => $reason ) : ?>
- <div class="elementor-deactivate-feedback-dialog-input-wrapper">
- <input id="elementor-deactivate-feedback-<?php echo esc_attr( $reason_key ); ?>" class="elementor-deactivate-feedback-dialog-input" type="radio" name="reason_key" value="<?php echo esc_attr( $reason_key ); ?>" />
- <label for="elementor-deactivate-feedback-<?php echo esc_attr( $reason_key ); ?>" class="elementor-deactivate-feedback-dialog-label"><?php echo esc_html( $reason['title'] ); ?></label>
- <?php if ( ! empty( $reason['input_placeholder'] ) ) : ?>
- <input class="elementor-feedback-text" type="text" name="reason_<?php echo esc_attr( $reason_key ); ?>" placeholder="<?php echo esc_attr( $reason['input_placeholder'] ); ?>" />
- <?php endif; ?>
- </div>
- <?php endforeach; ?>
- </div>
- </form>
- </div>
- <?php
- }
-
- /**
- * Register dashboard widgets.
- *
- * Adds a new Elementor widgets to WordPress dashboard.
- *
- * Fired by `wp_dashboard_setup` action.
- *
- * @since 1.9.0
- * @access public
- */
- public function register_dashboard_widgets() {
- wp_add_dashboard_widget( 'e-dashboard-overview', __( 'Elementor Overview', 'elementor' ), [ $this, 'elementor_dashboard_overview_widget' ] );
-
- // Move our widget to top.
- global $wp_meta_boxes;
-
- $dashboard = $wp_meta_boxes['dashboard']['normal']['core'];
- $ours = [
- 'e-dashboard-overview' => $dashboard['e-dashboard-overview'],
- ];
-
- $wp_meta_boxes['dashboard']['normal']['core'] = array_merge( $ours, $dashboard ); // WPCS: override ok.
- }
-
- /**
- * Elementor dashboard widget.
- *
- * Displays the Elementor dashboard widget.
- *
- * Fired by `wp_add_dashboard_widget` function.
- *
- * @since 1.9.0
- * @access public
- */
- public function elementor_dashboard_overview_widget() {
- $elementor_feed = Api::get_feed_data();
-
- $recently_edited_query_args = [
- 'post_type' => 'any',
- 'post_status' => [ 'publish', 'draft' ],
- 'posts_per_page' => '3',
- 'meta_key' => '_elementor_edit_mode',
- 'meta_value' => 'builder',
- 'orderby' => 'modified',
- ];
-
- $recently_edited_query = new \WP_Query( $recently_edited_query_args );
-
- if ( User::is_current_user_can_edit_post_type( 'page' ) ) {
- $create_new_label = __( 'Create New Page', 'elementor' );
- $create_new_cpt = 'page';
- } elseif ( User::is_current_user_can_edit_post_type( 'post' ) ) {
- $create_new_label = __( 'Create New Post', 'elementor' );
- $create_new_cpt = 'post';
- }
- ?>
- <div class="e-dashboard-widget">
- <div class="e-overview__header">
- <div class="e-overview__logo"><i class="eicon-elementor-square"></i></div>
- <div class="e-overview__versions">
- <span class="e-overview__version"><?php echo __( 'Elementor', 'elementor' ); ?> v<?php echo ELEMENTOR_VERSION; ?></span>
- <?php
- /**
- * Elementor dashboard widget after the version.
- *
- * Fires after Elementor version display in the dashboard widget.
- *
- * @since 1.9.0
- */
- do_action( 'elementor/admin/dashboard_overview_widget/after_version' );
- ?>
- </div>
- <?php if ( ! empty( $create_new_cpt ) ) : ?>
- <div class="e-overview__create">
- <a href="<?php echo esc_url( Utils::get_create_new_post_url( $create_new_cpt ) ); ?>" class="button"><span aria-hidden="true" class="dashicons dashicons-plus"></span> <?php echo esc_html( $create_new_label ); ?></a>
- </div>
- <?php endif; ?>
- </div>
- <?php if ( $recently_edited_query->have_posts() ) : ?>
- <div class="e-overview__recently-edited">
- <h3 class="e-overview__heading"><?php echo __( 'Recently Edited', 'elementor' ); ?></h3>
- <ul class="e-overview__posts">
- <?php
- while ( $recently_edited_query->have_posts() ) :
- $recently_edited_query->the_post();
-
- $date = date_i18n( _x( 'M jS', 'Dashboard Overview Widget Recently Date', 'elementor' ), get_the_time( 'U' ) );
- ?>
- <li class="e-overview__post">
- <a href="<?php echo esc_attr( Utils::get_edit_link( get_the_ID() ) ); ?>" class="e-overview__post-link"><?php the_title(); ?> <span class="dashicons dashicons-edit"></span></a> <span><?php echo $date; ?>, <?php the_time(); ?></span>
- </li>
- <?php endwhile; ?>
- </ul>
- </div>
- <?php endif; ?>
- <?php if ( ! empty( $elementor_feed ) ) : ?>
- <div class="e-overview__feed">
- <h3 class="e-overview__heading"><?php echo __( 'News & Updates', 'elementor' ); ?></h3>
- <ul class="e-overview__posts">
- <?php foreach ( $elementor_feed as $feed_item ) : ?>
- <li class="e-overview__post">
- <a href="<?php echo esc_url( $feed_item['url'] ); ?>" class="e-overview__post-link" target="_blank">
- <?php if ( ! empty( $feed_item['badge'] ) ) : ?>
- <span class="e-overview__badge"><?php echo esc_html( $feed_item['badge'] ); ?></span>
- <?php endif; ?>
- <?php echo esc_html( $feed_item['title'] ); ?>
- </a>
- <p class="e-overview__post-description"><?php echo esc_html( $feed_item['excerpt'] ); ?></p>
- </li>
- <?php endforeach; ?>
- </ul>
- </div>
- <?php endif; ?>
- <div class="e-overview__footer">
- <ul>
- <?php foreach ( $this->get_dashboard_overview_widget_footer_actions() as $action_id => $action ) : ?>
- <li class="e-overview__<?php echo esc_attr( $action_id ); ?>"><a href="<?php echo esc_attr( $action['link'] ); ?>" target="_blank"><?php echo esc_html( $action['title'] ); ?> <span class="screen-reader-text"><?php echo __( '(opens in a new window)', 'elementor' ); ?></span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></li>
- <?php endforeach; ?>
- </ul>
- </div>
- </div>
- <?php
- }
-
- /**
- * Ajax elementor deactivate feedback.
- *
- * Send the user feedback when Elementor is deactivated.
- *
- * Fired by `wp_ajax_elementor_deactivate_feedback` action.
- *
- * @since 1.0.0
- * @access public
- */
- public function ajax_elementor_deactivate_feedback() {
- if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], '_elementor_deactivate_feedback_nonce' ) ) {
- wp_send_json_error();
- }
-
- $reason_text = '';
-
- $reason_key = '';
-
- if ( ! empty( $_POST['reason_key'] ) ) {
- $reason_key = $_POST['reason_key'];
- }
-
- if ( ! empty( $_POST[ "reason_{$reason_key}" ] ) ) {
- $reason_text = $_POST[ "reason_{$reason_key}" ];
- }
-
- Api::send_feedback( $reason_key, $reason_text );
-
- wp_send_json_success();
- }
-
- /**
- * Get elementor dashboard overview widget footer actions.
- *
- * Retrieves the footer action links displayed in elementor dashboard widget.
- *
- * @since 1.9.0
- * @access private
- */
- private function get_dashboard_overview_widget_footer_actions() {
- $base_actions = [
- 'blog' => [
- 'title' => __( 'Blog', 'elementor' ),
- 'link' => 'https://go.elementor.com/overview-widget-blog/',
- ],
- 'help' => [
- 'title' => __( 'Help', 'elementor' ),
- 'link' => 'https://go.elementor.com/overview-widget-docs/',
- ],
- ];
-
- $additions_actions = [
- 'go-pro' => [
- 'title' => __( 'Go Pro', 'elementor' ),
- 'link' => Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=wp-overview-widget&utm_campaign=gopro&utm_medium=wp-dash' ),
- ],
- ];
-
- /**
- * Dashboard widget footer actions.
- *
- * Filters the additions actions displayed in Elementor dashboard widget.
- *
- * Developers can add new action links to Elementor dashboard widget
- * footer using this filter.
- *
- * @since 1.9.0
- *
- * @param array $additions_actions Elementor dashboard widget footer actions.
- */
- $additions_actions = apply_filters( 'elementor/admin/dashboard_overview_widget/footer_actions', $additions_actions );
-
- $actions = $base_actions + $additions_actions;
-
- return $actions;
- }
-
- /**
- * Admin action new post.
- *
- * When a new post action is fired the title is set to 'Elementor' and the post ID.
- *
- * Fired by `admin_action_elementor_new_post` action.
- *
- * @since 1.9.0
- * @access public
- */
- public function admin_action_new_post() {
- check_admin_referer( 'elementor_action_new_post' );
-
- if ( empty( $_GET['post_type'] ) ) {
- $post_type = 'post';
- } else {
- $post_type = $_GET['post_type'];
- }
-
- if ( ! User::is_current_user_can_edit_post_type( $post_type ) ) {
- return;
- }
-
- if ( empty( $_GET['template_type'] ) ) {
- $type = 'post';
- } else {
- $type = $_GET['template_type']; // XSS ok.
- }
-
- $post_data = isset( $_GET['post_data'] ) ? $_GET['post_data'] : [];
-
- $meta = [];
-
- /**
- * Create new post meta data.
- *
- * Filters the meta data of any new post created.
- *
- * @since 2.0.0
- *
- * @param array $meta Post meta data.
- */
- $meta = apply_filters( 'elementor/admin/create_new_post/meta', $meta );
-
- $post_data['post_type'] = $post_type;
-
- $document = Plugin::$instance->documents->create( $type, $post_data, $meta );
-
- wp_redirect( $document->get_edit_url() );
- die;
- }
-
- /**
- * Admin constructor.
- *
- * Initializing Elementor in WordPress admin.
- *
- * @since 1.0.0
- * @access public
- */
- public function __construct() {
- add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
- add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_styles' ] );
-
- add_action( 'edit_form_after_title', [ $this, 'print_switch_mode_button' ] );
- add_action( 'save_post', [ $this, 'save_post' ] );
-
- add_filter( 'page_row_actions', [ $this, 'add_edit_in_dashboard' ], 10, 2 );
- add_filter( 'post_row_actions', [ $this, 'add_edit_in_dashboard' ], 10, 2 );
-
- add_filter( 'display_post_states', [ $this, 'add_elementor_post_state' ], 10, 2 );
-
- add_filter( 'plugin_action_links_' . ELEMENTOR_PLUGIN_BASE, [ $this, 'plugin_action_links' ] );
- add_filter( 'plugin_row_meta', [ $this, 'plugin_row_meta' ], 10, 2 );
-
- add_action( 'admin_notices', [ $this, 'admin_notices' ] );
- add_filter( 'admin_body_class', [ $this, 'body_status_classes' ] );
- add_filter( 'admin_footer_text', [ $this, 'admin_footer_text' ] );
-
- // Register Dashboard Widgets.
- add_action( 'wp_dashboard_setup', [ $this, 'register_dashboard_widgets' ] );
-
- // Ajax.
- add_action( 'wp_ajax_elementor_deactivate_feedback', [ $this, 'ajax_elementor_deactivate_feedback' ] );
-
- // Admin Actions
- add_action( 'admin_action_elementor_new_post', [ $this, 'admin_action_new_post' ] );
- }
-}
*/
class Autoloader {
+ const ALIASES_DEPRECATION_RANGE = 0.2;
+
/**
* Classes map.
*
'Control_Base_Units' => 'includes/controls/base-units.php',
'Controls_Manager' => 'includes/managers/controls.php',
'Controls_Stack' => 'includes/base/controls-stack.php',
- 'CSS_File' => 'includes/css-file/css-file.php',
'DB' => 'includes/db.php',
'Debug\Debug' => 'includes/debug/debug.php',
'Editor' => 'includes/editor.php',
'Embed' => 'includes/embed.php',
'Fonts' => 'includes/fonts.php',
'Frontend' => 'includes/frontend.php',
- 'Global_CSS_File' => 'includes/css-file/global-css-file.php',
'Group_Control_Background' => 'includes/controls/groups/background.php',
'Group_Control_Base' => 'includes/controls/groups/base.php',
'Group_Control_Border' => 'includes/controls/groups/border.php',
'Group_Control_Box_Shadow' => 'includes/controls/groups/box-shadow.php',
+ 'Group_Control_Css_Filter' => 'includes/controls/groups/css-filter.php',
'Group_Control_Image_Size' => 'includes/controls/groups/image-size.php',
'Group_Control_Interface' => 'includes/interfaces/group-control.php',
'Group_Control_Text_Shadow' => 'includes/controls/groups/text-shadow.php',
'Images_Manager' => 'includes/managers/image.php',
'Maintenance' => 'includes/maintenance.php',
'Maintenance_Mode' => 'includes/maintenance-mode.php',
- 'Post_CSS_File' => 'includes/css-file/post-css-file.php',
- 'Post_Preview_CSS' => 'includes/css-file/post-preview-css.php',
'Posts_CSS_Manager' => 'includes/managers/css-files.php',
'Preview' => 'includes/preview.php',
- 'Responsive' => 'includes/responsive.php',
'Rollback' => 'includes/rollback.php',
'Scheme_Base' => 'includes/schemes/base.php',
'Scheme_Color' => 'includes/schemes/color.php',
* @var array Classes aliases.
*/
private static $classes_aliases = [
- 'Control_Base' => 'Base_Data_Control',
- 'PageSettings\Manager' => 'Core\Settings\Page\Manager',
- 'Revisions_Manager' => 'Modules\History\Revisions_Manager',
+ 'Control_Base' => [
+ 'replacement' => 'Base_Data_Control',
+ 'version' => '1.6.0',
+ ],
+ 'PageSettings\Manager' => [
+ 'replacement' => 'Core\Settings\Page\Manager',
+ 'version' => '1.6.0',
+ ],
+ 'Revisions_Manager' => [
+ 'replacement' => 'Modules\History\Revisions_Manager',
+ 'version' => '1.7.0',
+ ],
+ 'CSS_File' => [
+ 'replacement' => 'Core\Files\CSS\Base',
+ 'version' => '2.1.0',
+ ],
+ 'Global_CSS_File' => [
+ 'replacement' => 'Core\Files\CSS\Global_CSS',
+ 'version' => '2.1.0',
+ ],
+ 'Post_CSS_File' => [
+ 'replacement' => 'Core\Files\CSS\Post',
+ 'version' => '2.1.0',
+ ],
+ 'Posts_CSS_Manager' => [
+ 'replacement' => 'Core\Files\Manager',
+ 'version' => '2.1.0',
+ ],
+ 'Post_Preview_CSS' => [
+ 'replacement' => 'Core\Files\CSS\Post_Preview',
+ 'version' => '2.1.0',
+ ],
+ 'Responsive' => [
+ 'replacement' => 'Core\Responsive\Responsive',
+ 'version' => '2.1.0',
+ ],
+ 'Admin' => [
+ 'replacement' => 'Core\Admin\Admin',
+ 'version' => '2.2.0',
+ ],
];
/**
// Backward Compatibility: Save old class name for set an alias after the new class is loaded
if ( $has_class_alias ) {
- $relative_class_name = self::$classes_aliases[ $relative_class_name ];
+ $alias_data = self::$classes_aliases[ $relative_class_name ];
+
+ $relative_class_name = $alias_data['replacement'];
}
$final_class_name = __NAMESPACE__ . '\\' . $relative_class_name;
if ( $has_class_alias ) {
class_alias( $final_class_name, $class );
+
+ preg_match( '/^[0-9]+\.[0-9]+/', ELEMENTOR_VERSION, $current_version_as_float );
+
+ $current_version_as_float = (float) $current_version_as_float[0];
+
+ preg_match( '/^[0-9]+\.[0-9]+/', $alias_data['version'], $alias_version_as_float );
+
+ $alias_version_as_float = (float) $alias_version_as_float[0];
+
+ if ( $current_version_as_float - $alias_version_as_float >= self::ALIASES_DEPRECATION_RANGE ) {
+ _deprecated_file( $class, $alias_data['version'], $final_class_name );
+ }
}
}
}
*
* @var string
*/
- private $_id;
+ private $id;
/**
* Parsed Settings.
*
* @var null|array
*/
- private $_settings;
+ private $settings;
+
+ private $active_settings;
+
+ private $parsed_active_settings;
+
+ /**
+ * Parsed Dynamic Settings.
+ *
+ * @access private
+ *
+ * @var null|array
+ */
+ private $parsed_dynamic_settings;
/**
* Raw Data.
*
* @var null|array
*/
- private $_data;
+ private $data;
/**
* The configuration.
*
* @var null|array
*/
- private $_config;
+ private $config;
/**
* Current section.
*
* @var null|array
*/
- private $_current_section;
+ private $current_section;
/**
* Current tab.
*
* @var null|array
*/
- private $_current_tab;
+ private $current_tab;
/**
* Current popover.
*/
private $injection_point;
+
+ /**
+ * Data sanitized.
+ *
+ * @access private
+ *
+ * @var bool
+ */
+ private $settings_sanitized = false;
+
/**
* Get element name.
*
* @return string The ID.
*/
public function get_id() {
- return $this->_id;
+ return $this->id;
}
/**
* @return string The converted ID.
*/
public function get_id_int() {
- return hexdec( $this->_id );
+ return hexdec( $this->id );
}
/**
* Get the type.
*
- * Retrieve the type, e.g. 'stack', 'element', 'widget' etc.
+ * Retrieve the type, e.g. 'stack', 'section', 'widget' etc.
*
* @since 1.4.0
* @access public
* @return null|array Current section.
*/
public function get_current_section() {
- return $this->_current_section;
+ return $this->current_section;
}
/**
* @return null|array Current tab.
*/
public function get_current_tab() {
- return $this->_current_tab;
+ return $this->current_tab;
}
/**
}
if ( empty( $args['type'] ) || ! in_array( $args['type'], [ Controls_Manager::SECTION, Controls_Manager::WP_WIDGET ], true ) ) {
- $target_section_args = $this->_current_section;
+ $target_section_args = $this->current_section;
- $target_tab = $this->_current_tab;
+ $target_tab = $this->current_tab;
if ( $this->injection_point ) {
$target_section_args = $this->injection_point['section'];
* @param array $position {
* The injection position.
*
- * @type string $type Injection type, either `control` or `section`.
- * Default is `control`.
- * @type string $at Where to inject. If `$type` is `control` accepts
- * `before` and `after`. If `$type` is `section`
- * accepts `start` and `end`. Default values based on
- * the `type`.
- * @type string $of Control/Section ID.
+ * @type string $type Injection type, either `control` or `section`.
+ * Default is `control`.
+ * @type string $at Where to inject. If `$type` is `control` accepts
+ * `before` and `after`. If `$type` is `section`
+ * accepts `start` and `end`. Default values based on
+ * the `type`.
+ * @type string $of Control/Section ID.
+ * @type array $fallback Fallback injection position. When the position is
+ * not found it will try to fetch the fallback
+ * position.
* }
*
* @return bool|array Position info.
$target_control_index = $this->get_control_index( $position['of'] );
if ( false === $target_control_index ) {
+ if ( ! empty( $position['fallback'] ) ) {
+ return $this->get_position_info( $position['fallback'] );
+ }
+
return false;
}
* controls
*
* @since 1.4.0
+ * @deprecated 2.1.0
* @access public
*
* @return array Class controls.
* @return array|null The config.
*/
final public function get_config() {
- if ( null === $this->_config ) {
- $this->_config = $this->_get_initial_config();
+ if ( null === $this->config ) {
+ $this->config = $this->_get_initial_config();
}
- return $this->_config;
+ return $this->config;
}
/**
* @return mixed The raw data.
*/
public function get_data( $item = null ) {
- return self::_get_items( $this->_data, $item );
+ if ( ! $this->settings_sanitized && ( ! $item || 'settings' === $item ) ) {
+ $this->data['settings'] = $this->sanitize_settings( $this->data['settings'] );
+
+ $this->settings_sanitized = true;
+ }
+
+ return self::_get_items( $this->data, $item );
}
/**
* @return mixed The settings.
*/
public function get_settings( $setting = null ) {
- return self::_get_items( $this->_settings, $setting );
+ if ( ! $this->settings ) {
+ $this->settings = $this->_get_parsed_settings();
+ }
+
+ return self::_get_items( $this->settings, $setting );
+ }
+
+ public function get_parsed_dynamic_settings( $setting = null ) {
+ if ( null === $this->parsed_dynamic_settings ) {
+ $this->parsed_dynamic_settings = $this->parse_dynamic_settings( $this->get_settings() );
+ }
+
+ return self::_get_items( $this->parsed_dynamic_settings, $setting );
}
/**
* Retrieve the settings from all the active controls.
*
* @since 1.4.0
+ * @since 2.1.0 Added the `controls` and the `settings` parameters.
* @access public
*
+ * @param array $controls Optional. An array of controls. Default is null.
+ * @param array $settings Optional. Controls settings. Default is null.
+ *
* @return array Active settings.
*/
- public function get_active_settings() {
- $settings = $this->get_settings();
+ public function get_active_settings( $settings = null, $controls = null ) {
+ $is_first_request = ! $settings && ! $this->active_settings;
+
+ if ( ! $settings ) {
+ if ( $this->active_settings ) {
+ return $this->active_settings;
+ }
+
+ $settings = $this->get_controls_settings();
+
+ $controls = $this->get_controls();
+ }
+
+ $active_settings = [];
+
+ foreach ( $settings as $setting_key => $setting ) {
+ if ( ! isset( $controls[ $setting_key ] ) ) {
+ $active_settings[ $setting_key ] = $setting;
+
+ continue;
+ }
+
+ $control = $controls[ $setting_key ];
+
+ if ( $this->is_control_visible( $control, $settings ) ) {
+ if ( Controls_Manager::REPEATER === $control['type'] ) {
+ foreach ( $setting as & $item ) {
+ $item = $this->get_active_settings( $item, $control['fields'] );
+ }
+ }
- $active_settings = array_intersect_key( $settings, $this->get_active_controls() );
+ $active_settings[ $setting_key ] = $setting;
+ } else {
+ $active_settings[ $setting_key ] = null;
+ }
+ }
- $settings_mask = array_fill_keys( array_keys( $settings ), null );
+ if ( $is_first_request ) {
+ $this->active_settings = $active_settings;
+ }
- return array_merge( $settings_mask, $active_settings );
+ return $active_settings;
}
/**
* @return array The settings.
*/
public function get_settings_for_display( $setting_key = null ) {
- if ( $setting_key ) {
- $settings = [
- $setting_key => $this->get_settings( $setting_key ),
- ];
- } else {
- $settings = $this->get_active_settings();
- }
-
- $parsed_settings = $this->parse_dynamic_settings( $settings );
-
- if ( $setting_key ) {
- return $parsed_settings[ $setting_key ];
+ if ( ! $this->parsed_active_settings ) {
+ $this->parsed_active_settings = $this->get_active_settings( $this->get_parsed_dynamic_settings(), $this->get_controls() );
}
- return $parsed_settings;
+ return self::_get_items( $this->parsed_active_settings, $setting_key );
}
/**
$values = $this->get_settings();
}
- // Repeater fields
if ( ! empty( $control['conditions'] ) ) {
return Conditions::check( $control['conditions'], $values );
}
$this->add_control( $section_id, $args );
- if ( null !== $this->_current_section ) {
- wp_die( sprintf( 'Elementor: You can\'t start a section before the end of the previous section "%s".', $this->_current_section['section'] ) ); // XSS ok.
+ if ( null !== $this->current_section ) {
+ wp_die( sprintf( 'Elementor: You can\'t start a section before the end of the previous section "%s".', $this->current_section['section'] ) ); // XSS ok.
}
- $this->_current_section = $this->get_section_args( $section_id );
+ $this->current_section = $this->get_section_args( $section_id );
if ( $this->injection_point ) {
- $this->injection_point['section'] = $this->_current_section;
+ $this->injection_point['section'] = $this->current_section;
}
/**
* @access public
*/
public function end_controls_section() {
- $section_name = $this->get_name();
+ $stack_name = $this->get_name();
// Save the current section for the action.
- $current_section = $this->_current_section;
+ $current_section = $this->current_section;
$section_id = $current_section['section'];
$args = [
'tab' => $current_section['tab'],
*
* Fires before Elementor section ends in the editor panel.
*
- * The dynamic portions of the hook name, `$section_name` and `$section_id`, refers to the section name and section ID, respectively.
+ * The dynamic portions of the hook name, `$stack_name` and `$section_id`, refers to the stack name and section ID, respectively.
*
* @since 1.4.0
*
* @param Controls_Stack $this The control.
* @param array $args Section arguments.
*/
- do_action( "elementor/element/{$section_name}/{$section_id}/before_section_end", $this, $args );
+ do_action( "elementor/element/{$stack_name}/{$section_id}/before_section_end", $this, $args );
- $this->_current_section = null;
+ $this->current_section = null;
/**
* After section end.
*
* Fires after Elementor section ends in the editor panel.
*
- * The dynamic portions of the hook name, `$section_name` and `$section_id`, refers to the section name and section ID, respectively.
+ * The dynamic portions of the hook name, `$stack_name` and `$section_id`, refers to the section name and section ID, respectively.
*
* @since 1.4.0
*
* @param Controls_Stack $this The control.
* @param array $args Section arguments.
*/
- do_action( "elementor/element/{$section_name}/{$section_id}/after_section_end", $this, $args );
+ do_action( "elementor/element/{$stack_name}/{$section_id}/after_section_end", $this, $args );
}
/**
* @param string $tabs_id Tabs ID.
*/
public function start_controls_tabs( $tabs_id ) {
- if ( null !== $this->_current_tab ) {
- wp_die( sprintf( 'Elementor: You can\'t start tabs before the end of the previous tabs "%s".', $this->_current_tab['tabs_wrapper'] ) ); // XSS ok.
+ if ( null !== $this->current_tab ) {
+ wp_die( sprintf( 'Elementor: You can\'t start tabs before the end of the previous tabs "%s".', $this->current_tab['tabs_wrapper'] ) ); // XSS ok.
}
$this->add_control(
]
);
- $this->_current_tab = [
+ $this->current_tab = [
'tabs_wrapper' => $tabs_id,
];
if ( $this->injection_point ) {
- $this->injection_point['tab'] = $this->_current_tab;
+ $this->injection_point['tab'] = $this->current_tab;
}
}
* @access public
*/
public function end_controls_tabs() {
- $this->_current_tab = null;
+ $this->current_tab = null;
}
/**
* @param array $args Tab arguments.
*/
public function start_controls_tab( $tab_id, $args ) {
- if ( ! empty( $this->_current_tab['inner_tab'] ) ) {
- wp_die( sprintf( 'Elementor: You can\'t start a tab before the end of the previous tab "%s".', $this->_current_tab['inner_tab'] ) ); // XSS ok.
+ if ( ! empty( $this->current_tab['inner_tab'] ) ) {
+ wp_die( sprintf( 'Elementor: You can\'t start a tab before the end of the previous tab "%s".', $this->current_tab['inner_tab'] ) ); // XSS ok.
}
$args['type'] = Controls_Manager::TAB;
- $args['tabs_wrapper'] = $this->_current_tab['tabs_wrapper'];
+ $args['tabs_wrapper'] = $this->current_tab['tabs_wrapper'];
$this->add_control( $tab_id, $args );
- $this->_current_tab['inner_tab'] = $tab_id;
+ $this->current_tab['inner_tab'] = $tab_id;
if ( $this->injection_point ) {
- $this->injection_point['tab']['inner_tab'] = $this->_current_tab['inner_tab'];
+ $this->injection_point['tab']['inner_tab'] = $this->current_tab['inner_tab'];
}
}
* @access public
*/
public function end_controls_tab() {
- unset( $this->_current_tab['inner_tab'] );
+ unset( $this->current_tab['inner_tab'] );
}
/**
return;
}
?>
- <script type="text/html" id="tmpl-elementor-<?php echo $this->get_type(); ?>-<?php echo esc_attr( $this->get_name() ); ?>-content">
+ <script type="text/html" id="tmpl-elementor-<?php echo esc_attr( $this->get_name() ); ?>-content">
<?php $this->print_template_content( $template_content ); ?>
</script>
<?php
* `$key` is an array. Default is null.
*/
final public function set_settings( $key, $value = null ) {
+ if ( ! $this->settings ) {
+ $this->get_settings();
+ }
+
// strict check if override all settings.
if ( is_array( $key ) ) {
- $this->_settings = $key;
+ $this->settings = $key;
} else {
- $this->_settings[ $key ] = $value;
+ $this->settings[ $key ] = $value;
}
}
* @return array Parsed settings.
*/
protected function _get_parsed_settings() {
- $settings = $this->_data['settings'];
+ $settings = $this->get_data( 'settings' );
foreach ( $this->get_controls() as $control ) {
$control_obj = Plugin::$instance->controls_manager->get_control( $control['type'] );
* Performs data cleaning and sanitization.
*
* @since 2.0.0
+ * @deprecated 2.1.5 Use `Controls_Stack::sanitize_settings` instead
* @access protected
*
* @param array $data Data to sanitize.
* @return array Sanitized data.
*/
protected function sanitize_initial_data( $data, array $controls = [] ) {
- if ( ! $controls ) {
- $controls = $this->get_controls();
- }
+ _deprecated_function( __METHOD__, '2.1.5', 'Controls_Stack::sanitize_settings' );
- $settings = $data['settings'];
-
- foreach ( $controls as $control ) {
- if ( 'repeater' === $control['type'] ) {
- if ( empty( $settings[ $control['name'] ] ) ) {
- continue;
- }
-
- foreach ( $settings[ $control['name'] ] as $index => $repeater_row_data ) {
- $sanitized_row_data = $this->sanitize_initial_data( [
- 'settings' => $repeater_row_data,
- ], $control['fields'] );
-
- $settings[ $control['name'] ][ $index ] = $sanitized_row_data['settings'];
- }
-
- continue;
- }
-
- $is_dynamic = isset( $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] );
-
- if ( ! $is_dynamic ) {
- continue;
- }
-
- $value_to_check = $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ];
-
- $tag_text_data = Plugin::$instance->dynamic_tags->tag_text_to_tag_data( $value_to_check );
-
- if ( ! Plugin::$instance->dynamic_tags->get_tag_info( $tag_text_data['name'] ) ) {
- unset( $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] );
- }
- }
-
- $data['settings'] = $settings;
+ $data['settings'] = $this->sanitize_settings( $data['settings'], $controls );
return $data;
}
* @param array $data Initial data.
*/
protected function _init( $data ) {
- $this->_data = array_merge( $this->get_default_data(), $data );
+ $this->data = array_merge( $this->get_default_data(), $data );
- $this->_id = $data['id'];
+ $this->id = $data['id'];
+ }
- $this->_data = $this->sanitize_initial_data( $this->_data );
+ /**
+ * Sanitize initial data.
+ *
+ * Performs settings cleaning and sanitization.
+ *
+ * @since 2.1.5
+ * @access private
+ *
+ * @param array $settings Settings to sanitize.
+ * @param array $controls Optional. An array of controls. Default is an
+ * empty array.
+ *
+ * @return array Sanitized settings.
+ */
+ private function sanitize_settings( array $settings, array $controls = [] ) {
+ if ( ! $controls ) {
+ $controls = $this->get_controls();
+ }
+
+ foreach ( $controls as $control ) {
+ if ( 'repeater' === $control['type'] ) {
+ if ( empty( $settings[ $control['name'] ] ) ) {
+ continue;
+ }
+
+ foreach ( $settings[ $control['name'] ] as $index => $repeater_row_data ) {
+ $sanitized_row_data = $this->sanitize_settings( $repeater_row_data, $control['fields'] );
- $this->_settings = $this->_get_parsed_settings();
+ $settings[ $control['name'] ][ $index ] = $sanitized_row_data;
+ }
+
+ continue;
+ }
+
+ $is_dynamic = isset( $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] );
+
+ if ( ! $is_dynamic ) {
+ continue;
+ }
+
+ $value_to_check = $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ];
+
+ $tag_text_data = Plugin::$instance->dynamic_tags->tag_text_to_tag_data( $value_to_check );
+
+ if ( ! Plugin::$instance->dynamic_tags->get_tag_info( $tag_text_data['name'] ) ) {
+ unset( $settings[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] );
+ }
+ }
+
+ return $settings;
}
/**
if ( ! Plugin::instance()->role_manager->user_can( 'design' ) ) {
return [];
}
+
if ( null === static::$_edit_tools ) {
self::init_edit_tools();
}
}
}
- /**
- * Get element type.
- *
- * Retrieve the element type, in this case `element`.
- *
- * @since 1.0.0
- * @access public
- * @static
- *
- * @return string Control type.
- */
- public static function get_type() {
- return 'element';
+ final public static function is_edit_buttons_enabled() {
+ return get_option( 'elementor_edit_buttons' );
}
/**
* @return Element_Base Parent element.
*/
public function get_parent() {
- // Todo: _deprecated_function( __METHOD__, '1.7.6', '$this->get_data( 'parent' )' );
+ _deprecated_function( __METHOD__, '1.7.6', __CLASS__ . '::get_data( \'parent\' )' );
return $this->get_data( 'parent' );
}
* @access public
*/
public function print_element() {
- $element_type = static::get_type();
+ $element_type = $this->get_type();
+
+ /**
+ * Before frontend element render.
+ *
+ * Fires before Elementor element is rendered in the frontend.
+ *
+ * @since 2.2.0
+ *
+ * @param Element_Base $this The element.
+ */
+ do_action( 'elementor/frontend/before_render', $this );
/**
* Before frontend element render.
* @since 1.8.0
* @access protected
*/
- protected function render_edit_tools() {}
+ protected function render_edit_tools() {
+ ?>
+ <div class="elementor-element-overlay">
+ <ul class="elementor-editor-element-settings elementor-editor-<?php echo $this->get_type(); ?>-settings">
+ <?php
+ foreach ( self::get_edit_tools() as $edit_tool_name => $edit_tool ) {
+ ?>
+ <li class="elementor-editor-element-setting elementor-editor-element-<?php echo esc_attr( $edit_tool_name ); ?>" title="<?php echo esc_attr( $edit_tool['title'] ); ?>">
+ <i class="eicon-<?php echo esc_attr( $edit_tool['icon'] ); ?>" aria-hidden="true"></i>
+ <span class="elementor-screen-only"><?php echo esc_html( $edit_tool['title'] ); ?></span>
+ </li>
+ <?php } ?>
+ </ul>
+ </div>
+ <?php
+ }
/**
* Is type instance.
$settings = $this->get_active_settings();
- foreach ( self::get_class_controls() as $control ) {
- if ( empty( $settings[ $control['name'] ] ) ) {
+ $controls = $this->get_controls();
+
+ $class_settings = [];
+
+ foreach ( $settings as $setting_key => $setting ) {
+ if ( isset( $controls[ $setting_key ]['prefix_class'] ) ) {
+ $class_settings[ $setting_key ] = $setting;
+ }
+ }
+
+ foreach ( $class_settings as $setting_key => $setting ) {
+ if ( empty( $setting ) && '0' !== $setting ) {
continue;
}
- $this->add_render_attribute( '_wrapper', 'class', $control['prefix_class'] . $settings[ $control['name'] ] );
+ $this->add_render_attribute( '_wrapper', 'class', $controls[ $setting_key ]['prefix_class'] . $setting );
}
if ( ! empty( $settings['animation'] ) || ! empty( $settings['_animation'] ) ) {
protected $_has_template_content = true;
/**
- * Get element type.
+ * Element edit tools.
*
- * Retrieve the element type, in this case `widget`.
+ * Holds all the edit tools of the element. For example: delete, duplicate etc.
*
- * @since 1.0.0
- * @access public
+ * @access protected
* @static
*
- * @return string Control type.
+ * @var array
*/
- public static function get_type() {
- return 'widget';
- }
+ protected static $_edit_tools;
/**
- * Get default edit tools.
+ * Get element type.
*
- * Retrieve the default edit tools of the widget. This method is used to set
- * initial tools - it adds Duplicate and Remove on top of of Edit and Save
- * tools.
+ * Retrieve the element type, in this case `widget`.
*
* @since 1.0.0
- * @access protected
+ * @access public
* @static
*
- * @return array Default edit tools.
+ * @return string The type.
*/
- protected static function get_default_edit_tools() {
- $widget_label = __( 'Widget', 'elementor' );
-
- return [
- 'duplicate' => [
- /* translators: %s: Widget label */
- 'title' => sprintf( __( 'Duplicate %s', 'elementor' ), $widget_label ),
- 'icon' => 'clone',
- ],
- 'remove' => [
- /* translators: %s: Widget label */
- 'title' => sprintf( __( 'Remove %s', 'elementor' ), $widget_label ),
- 'icon' => 'close',
- ],
- ];
+ public static function get_type() {
+ return 'widget';
}
/**
}
}
+ /**
+ * Get default edit tools.
+ *
+ * Retrieve the element default edit tools. Used to set initial tools.
+ * By default the element has no edit tools.
+ *
+ * @since 1.0.0
+ * @access protected
+ * @static
+ *
+ * @return array Default edit tools.
+ */
+ protected static function get_default_edit_tools() {
+ $widget_label = __( 'Widget', 'elementor' );
+
+ $edit_tools = [
+ 'edit' => [
+ 'title' => __( 'Edit', 'elementor' ),
+ 'icon' => 'edit',
+ ],
+ ];
+
+ if ( self::is_edit_buttons_enabled() ) {
+ $edit_tools += [
+ 'duplicate' => [
+ /* translators: %s: Widget label */
+ 'title' => sprintf( __( 'Duplicate %s', 'elementor' ), $widget_label ),
+ 'icon' => 'clone',
+ ],
+ 'remove' => [
+ /* translators: %s: Widget label */
+ 'title' => sprintf( __( 'Remove %s', 'elementor' ), $widget_label ),
+ 'icon' => 'close',
+ ],
+ ];
+ }
+
+ return $edit_tools;
+ }
+
/**
* Register widget skins.
*
'keywords' => $this->get_keywords(),
'categories' => $this->get_categories(),
'html_wrapper_class' => $this->get_html_wrapper_class(),
+ 'show_in_panel' => $this->show_in_panel(),
];
return array_merge( parent::_get_initial_config(), $config );
<?php
}
- /**
- * Render widget edit tools.
- *
- * Used to generate the edit tools HTML.
- *
- * @since 1.8.0
- * @access protected
- */
- protected function render_edit_tools() {
- /* translators: %s: Widget label */
- $edit_title = sprintf( __( 'Edit %s', 'elementor' ), __( 'Widget', 'elementor' ) );
- ?>
- <div class="elementor-element-overlay">
- <ul class="elementor-editor-element-settings elementor-editor-widget-settings">
- <li class="elementor-editor-element-setting elementor-editor-element-trigger" title="<?php echo esc_attr( $edit_title ); ?>">
- <i class="eicon-edit" aria-hidden="true"></i>
- <span class="elementor-screen-only"><?php echo esc_html( $edit_title ); ?></span>
- </li>
- <?php foreach ( self::get_edit_tools() as $edit_tool_name => $edit_tool ) : ?>
- <li class="elementor-editor-element-setting elementor-editor-element-<?php echo esc_attr( $edit_tool_name ); ?>" title="<?php echo esc_attr( $edit_tool['title'] ); ?>">
- <i class="eicon-<?php echo esc_attr( $edit_tool['icon'] ); ?>" aria-hidden="true"></i>
- <span class="elementor-screen-only"><?php echo esc_html( $edit_tool['title'] ); ?></span>
- </li>
- <?php endforeach; ?>
- </ul>
- </div>
- <?php
- }
-
/**
* Parse text editor.
*
self::polylang_compatibility();
- if ( is_admin() ) {
+ if ( is_admin() || defined( 'WP_LOAD_IMPORTERS' ) ) {
add_filter( 'wp_import_post_meta', [ __CLASS__, 'on_wp_import_post_meta' ] );
add_filter( 'wxr_importer.pre_process.post_meta', [ __CLASS__, 'on_wxr_importer_pre_process_post_meta' ] );
}
}
- /**
- * Exit to classic editor.
- *
- * Filters the "Exit To Dashboard URL" and replace it with the classic editor
- * URL.
- *
- * Fired by `elementor/document/urls/exit_to_dashboard` filter.
- *
- * @since 1.9.0
- * @access public
- * @static
- *
- * @param string $exit_url Default exit URL.
- *
- * @return string Classic editor URL.
- */
- public static function exit_to_classic_editor( $exit_url ) {
- $exit_url = add_query_arg( 'classic-editor', '', $exit_url );
-
- return $exit_url;
- }
-
/**
* Add new button to gutenberg.
*
// Gutenberg
if ( function_exists( 'gutenberg_init' ) ) {
add_action( 'admin_print_scripts-edit.php', [ __CLASS__, 'add_new_button_to_gutenberg' ], 11 );
- add_filter( 'elementor/document/urls/exit_to_dashboard', [ __CLASS__, 'exit_to_classic_editor' ] );
}
}
add_action( 'pll_pre_init', function( $polylang ) {
if ( isset( $_REQUEST['post'] ) ) {
$post_language = $polylang->model->post->get_language( $_REQUEST['post'], 'locale' );
- $_REQUEST['lang'] = $post_language->locale;
+ if ( ! empty( $post_language ) ) {
+ $_REQUEST['lang'] = $post_language->locale;
+ }
}
} );
}
// Copy elementor data while polylang creates a translation copy
- add_filter( 'pll_copy_post_metas', [ __CLASS__, 'save_polylang_meta' ], 10 , 4 );
+ add_filter( 'pll_copy_post_metas', [ __CLASS__, 'save_polylang_meta' ], 10, 4 );
}
/**
case '!==':
return $left_value !== $right_value;
case 'in':
- return -1 !== array_search( $left_value, $right_value );
+ return false !== array_search( $left_value, $right_value );
case '!in':
- return -1 === array_search( $left_value, $right_value );
+ return false === array_search( $left_value, $right_value );
case '<':
return $left_value < $right_value;
case '<=':
*/
protected function print_units_template() {
?>
- <# if ( data.size_units.length > 1 ) { #>
+ <# if ( data.size_units && data.size_units.length > 1 ) { #>
<div class="elementor-units-choices">
<# _.each( data.size_units, function( unit ) { #>
<input id="elementor-choose-{{ data._cid + data.name + unit }}" type="radio" name="elementor-choose-{{ data.name }}" data-setting="unit" value="{{ unit }}">
$fields['image'] = [
'label' => _x( 'Image', 'Background Control', 'elementor' ),
'type' => Controls_Manager::MEDIA,
+ 'dynamic' => [
+ 'active' => true,
+ ],
'title' => _x( 'Background Image', 'Background Control', 'elementor' ),
'selectors' => [
'{{SELECTOR}}' => 'background-image: url("{{URL}}");',
'of_type' => 'video',
];
+ $fields['video_start'] = [
+ 'label' => __( 'Start Time', 'elementor' ),
+ 'type' => Controls_Manager::NUMBER,
+ 'description' => __( 'Specify a start time (in seconds)', 'elementor' ),
+ 'placeholder' => 10,
+ 'condition' => [
+ 'background' => [ 'video' ],
+ ],
+ 'of_type' => 'video',
+ ];
+
+ $fields['video_end'] = [
+ 'label' => __( 'End Time', 'elementor' ),
+ 'type' => Controls_Manager::NUMBER,
+ 'description' => __( 'Specify an end time (in seconds)', 'elementor' ),
+ 'placeholder' => 70,
+ 'condition' => [
+ 'background' => [ 'video' ],
+ ],
+ 'of_type' => 'video',
+ ];
+
$fields['video_fallback'] = [
'label' => _x( 'Background Fallback', 'Background Control', 'elementor' ),
'description' => __( 'This cover image will replace the background video on mobile and tablet devices.', 'elementor' ),
$element->add_responsive_control( $id, $field_args, $options );
} else {
- $element->add_control( $id , $field_args, $options );
+ $element->add_control( $id, $field_args, $options );
}
}
$field_args['classes'] = $this->get_base_group_classes() . ' elementor-group-control-' . $control_id;
- if ( ! empty( $args['condition'] ) ) {
- if ( empty( $field_args['condition'] ) ) {
- $field_args['condition'] = [];
- }
+ foreach ( [ 'condition', 'conditions' ] as $condition_type ) {
+ if ( ! empty( $args[ $condition_type ] ) ) {
+ if ( empty( $field_args[ $condition_type ] ) ) {
+ $field_args[ $condition_type ] = [];
+ }
- $field_args['condition'] += $args['condition'];
+ $field_args[ $condition_type ] += $args[ $condition_type ];
+ }
}
return $field_args;
'starter_name' => 'popover_toggle',
'starter_value' => 'custom',
'starter_title' => '',
- 'toggle_type' => 'switcher',
],
];
$control_params = [
'type' => Controls_Manager::POPOVER_TOGGLE,
'label' => $label,
- 'toggle_type' => $popover_options['toggle_type'],
'return_value' => $popover_options['starter_value'],
];
--- /dev/null
+<?php
+namespace Elementor;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+/**
+ * Elementor CSS Filter control.
+ *
+ * A base control for applying css filters. Displays sliders to define
+ * the values of different css filters including blur, brightens, contrast, saturation, .
+ *
+ * @since 2.1.0
+ */
+class Group_Control_Css_Filter extends Group_Control_Base {
+
+ /**
+ * Prepare fields.
+ *
+ * Process css_filter control fields before adding them to `add_control()`.
+ *
+ * @since 2.1.0
+ * @access protected
+ *
+ * @param array $fields CSS Filter control fields.
+ *
+ * @return array Processed fields.
+ */
+ protected static $fields;
+
+ /**
+ * Get CSS filter control type.
+ *
+ * Retrieve the control type, in this case `css-filter`.
+ *
+ * @since 1.0.0
+ * @access public
+ * @static
+ *
+ * @return string Control type.
+ */
+ public static function get_type() {
+ return 'css-filter';
+ }
+
+ /**
+ * Init fields.
+ *
+ * Initialize CSS filter control fields.
+ *
+ * @since 2.1.0
+ * @access protected
+ *
+ * @return array Control fields.
+ */
+
+ protected function init_fields() {
+ $controls = [];
+
+ $controls['filter_type'] = [
+ 'type' => Controls_Manager::HIDDEN,
+ 'default' => 'custom',
+ ];
+
+ $controls['blur'] = [
+ 'label' => _x( 'Blur', 'Filter Control', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'required' => 'true',
+ 'range' => [
+ 'px' => [
+ 'min' => 0,
+ 'max' => 10,
+ 'step' => 0.1,
+ ],
+ ],
+ 'default' => [
+ 'size' => 0,
+ ],
+ 'selectors' => [
+ '{{SELECTOR}}' => 'filter: brightness( {{brightness.SIZE}}% ) contrast( {{contrast.SIZE}}% ) saturate( {{saturate.SIZE}}% ) blur( {{blur.SIZE}}px ) hue-rotate( {{hue.SIZE}}deg )',
+ ],
+ 'condition' => [
+ 'filter_type' => 'custom',
+ ],
+ ];
+
+ $controls['brightness'] = [
+ 'label' => _x( 'Brightness', 'Filter Control', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'render_type' => 'ui',
+ 'required' => 'true',
+ 'default' => [
+ 'size' => 100,
+ ],
+ 'range' => [
+ 'px' => [
+ 'min' => 0,
+ 'max' => 200,
+ ],
+ ],
+ 'separator' => 'none',
+ 'condition' => [
+ 'filter_type' => 'custom',
+ ],
+ ];
+
+ $controls['contrast'] = [
+ 'label' => _x( 'Contrast', 'Filter Control', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'render_type' => 'ui',
+ 'required' => 'true',
+ 'default' => [
+ 'size' => 100,
+ ],
+ 'range' => [
+ 'px' => [
+ 'min' => 0,
+ 'max' => 200,
+ ],
+ ],
+ 'separator' => 'none',
+ 'condition' => [
+ 'filter_type' => 'custom',
+ ],
+ ];
+
+ $controls['saturate'] = [
+ 'label' => _x( 'Saturation', 'Filter Control', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'render_type' => 'ui',
+ 'required' => 'true',
+ 'default' => [
+ 'size' => 100,
+ ],
+ 'range' => [
+ 'px' => [
+ 'min' => 0,
+ 'max' => 200,
+ ],
+ ],
+ 'separator' => 'none',
+ 'condition' => [
+ 'filter_type' => 'custom',
+ ],
+ ];
+
+ $controls['hue'] = [
+ 'label' => _x( 'Hue', 'Filter Control', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'render_type' => 'ui',
+ 'required' => 'true',
+ 'default' => [
+ 'size' => 0,
+ ],
+ 'range' => [
+ 'px' => [
+ 'min' => 0,
+ 'max' => 360,
+ ],
+ ],
+ 'separator' => 'none',
+ 'condition' => [
+ 'filter_type' => 'custom',
+ ],
+ ];
+
+ return $controls;
+ }
+
+
+ protected function prepare_fields( $fields ) {
+ array_walk( $fields, function ( &$field, $field_name ) {
+ if ( in_array( $field_name, [ 'css_filter', 'popover_toggle' ] ) ) {
+ return;
+ }
+
+ $field['condition'] = [
+ 'css_filter' => 'custom',
+ ];
+ } );
+
+ return parent::prepare_fields( $fields );
+ }
+
+ /**
+ * Get default options.
+ *
+ * Retrieve the default options of the CSS filter control. Used to return the
+ * default options while initializing the CSS filter control.
+ *
+ * @since 2.1.0
+ * @access protected
+ *
+ * @return array Default box shadow control options.
+ */
+ protected function get_default_options() {
+ return [
+ 'popover' => [
+ 'starter_name' => 'css_filter',
+ 'starter_title' => _x( 'CSS Filters', 'Filter Control', 'elementor' ),
+ ],
+ ];
+ }
+}
$image_src = self::get_attachment_image_src( $image['id'], $image_size_key, $settings );
if ( ! $image_src && isset( $image['url'] ) ) {
- $image_src = $image['url'] ;
+ $image_src = $image['url'];
}
if ( ! empty( $image_src ) ) {
$fields['line_height'] = [
'label' => _x( 'Line-Height', 'Typography Control', 'elementor' ),
'type' => Controls_Manager::SLIDER,
- 'default' => [
+ 'desktop_default' => [
+ 'unit' => 'em',
+ ],
+ 'tablet_default' => [
+ 'unit' => 'em',
+ ],
+ 'mobile_default' => [
'unit' => 'em',
],
'range' => [
<div class="elementor-panel-alert elementor-panel-alert-danger">
<?php echo __( 'The server does not have ImageMagick or GD installed and/or enabled! Any of these libraries are required for WordPress to be able to resize images. Please contact your server administrator to enable this before continuing.', 'elementor' ); ?>
</div>
- <?php
+ <?php
return;
endif;
?>
* @access public
*/
public function enqueue() {
+ global $wp_version;
+
$suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
wp_enqueue_media();
wp_enqueue_style(
'media',
- admin_url( '/css/media' . $suffix . '.css' )
+ admin_url( '/css/media' . $suffix . '.css' ),
+ [],
+ $wp_version
);
wp_register_script(
'json2',
'imgareaselect',
],
- false,
+ $wp_version,
true
);
<div class="elementor-control-field">
<label class="elementor-control-title">{{{ data.label }}}</label>
<div class="elementor-control-input-wrapper">
- <div class="elementor-control-media elementor-control-tag-area elementor-control-preview-area">
+ <div class="elementor-control-media elementor-control-tag-area elementor-control-preview-area elementor-aspect-ratio-169">
<div class="elementor-control-media-upload-button">
<i class="fa fa-plus-circle" aria-hidden="true"></i>
</div>
- <div class="elementor-control-media-image-area">
- <div class="elementor-control-media-image"></div>
+ <div class="elementor-control-media-area{{{ 'video' === data.media_type ? ' elementor-fit-aspect-ratio' : '' }}}">
+ <# if( 'image' === data.media_type ) { #>
+ <div class="elementor-control-media-image"></div>
+ <# } else if( 'video' === data.media_type ) { #>
+ <video class="elementor-control-media-video" preload="metadata"></video>
+ <i class="fa fa-video-camera"></i>
+ <# } #>
<div class="elementor-control-media-delete"><?php echo __( 'Delete', 'elementor' ); ?></div>
</div>
</div>
protected function get_default_settings() {
return [
'label_block' => true,
+ 'media_type' => 'image',
'dynamic' => [
'categories' => [ TagsModule::IMAGE_CATEGORY ],
'returnType' => 'object',
*/
protected function get_default_settings() {
return [
- 'toggle_type' => 'switcher',
'return_value' => 'yes',
];
}
<i class="eicon-edit" aria-hidden="true"></i>
<span class="elementor-screen-only"><?php echo __( 'Edit', 'elementor' ); ?></span>
</label>
- <# if ( 'switcher' === data.toggle_type ) { #>
- <input id="<?php echo $control_uid; ?>-default" type="radio" name="elementor-choose-{{ data.name }}-{{ data._cid }}" value="">
- <label class="elementor-control-popover-toggle-reset-label tooltip-target" for="<?php echo $control_uid; ?>-default" data-tooltip="<?php echo __( 'Back to default', 'elementor' ); ?>" data-tooltip-pos="s">
- <i class="fa fa-repeat" aria-hidden="true"></i>
- <span class="elementor-screen-only"><?php echo __( 'Back to default', 'elementor' ); ?></span>
- </label>
- <# } #>
+ <input id="<?php echo $control_uid; ?>-default" type="radio" name="elementor-choose-{{ data.name }}-{{ data._cid }}" value="">
+ <label class="elementor-control-popover-toggle-reset-label tooltip-target" for="<?php echo $control_uid; ?>-default" data-tooltip="<?php echo __( 'Back to default', 'elementor' ); ?>" data-tooltip-pos="s">
+ <i class="fa fa-repeat" aria-hidden="true"></i>
+ <span class="elementor-screen-only"><?php echo __( 'Back to default', 'elementor' ); ?></span>
+ </label>
</div>
</div>
<?php
return [
'options' => [],
'multiple' => false,
- 'select2options' => []
+ 'select2options' => [],
];
}
return [
'label_block' => true,
'show_external' => true,
- 'placeholder' => '',
+ 'placeholder' => __( 'Paste URL or type', 'elementor' ),
'dynamic' => [
'categories' => [ TagsModule::URL_CATEGORY ],
'property' => 'url',
<div class="elementor-control-field elementor-control-url-external-{{{ data.show_external ? 'show' : 'hide' }}}">
<label for="<?php echo $control_uid; ?>" class="elementor-control-title">{{{ data.label }}}</label>
<div class="elementor-control-input-wrapper">
- <input id="<?php echo $control_uid; ?>" type="url" class="elementor-control-tag-area elementor-input" data-setting="url" placeholder="{{ data.placeholder }}" />
+ <i class="elementor-control-url-autocomplete-spinner fa fa-spin fa-circle-o-notch" aria-hidden="true"></i>
+ <input id="<?php echo $control_uid; ?>" class="elementor-control-tag-area elementor-input" data-setting="url" placeholder="{{ data.placeholder }}" />
+ <input id="_ajax_linking_nonce" type="hidden" value="<?php echo wp_create_nonce( 'internal-linking' ); ?>" />
+
<label for="<?php echo $more_input_control_uid; ?>" class="elementor-control-url-more tooltip-target" data-tooltip="<?php echo __( 'Link Options', 'elementor' ); ?>">
<i class="fa fa-cog" aria-hidden="true"></i>
</label>
+++ /dev/null
-<?php
-namespace Elementor;
-
-use Elementor\Core\DynamicTags\Manager;
-use Elementor\Core\DynamicTags\Tag;
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit; // Exit if accessed directly.
-}
-
-/**
- * Elementor CSS file.
- *
- * Elementor CSS file handler class is responsible for generating CSS files.
- *
- * @since 1.2.0
- * @abstract
- */
-abstract class CSS_File {
-
- /**
- * Elementor CSS files base folder.
- *
- * Relative folder in the WordPress uploads folder.
- */
- const FILE_BASE_DIR = '/elementor/css';
-
- /**
- * Elementor CSS file name pattern.
- *
- * %s: Base folder; %s: file name
- */
- const FILE_NAME_PATTERN = '%s/%s.css';
-
- /**
- * Elementor CSS file generated status.
- *
- * The parsing result after generating CSS file.
- */
- const CSS_STATUS_FILE = 'file';
-
- /**
- * Elementor inline CSS status.
- *
- * The parsing result after generating inline CSS.
- */
- const CSS_STATUS_INLINE = 'inline';
-
- /**
- * Elementor CSS empty status.
- *
- * The parsing result when an empty CSS returned.
- */
- const CSS_STATUS_EMPTY = 'empty';
-
- /**
- * CSS file path.
- *
- * Holds the CSS file path.
- *
- * @access private
- *
- * @var string
- */
- private $path;
-
- /**
- * CSS file URL.
- *
- * Holds the CSS file URL.
- *
- * @access private
- *
- * @var string
- */
- private $url;
-
- /**
- * CSS.
- *
- * Holds the CSS.
- *
- * @access private
- *
- * @var string
- */
- private $css;
-
- /**
- * Fonts.
- *
- * Holds the list of fonts.
- *
- * @access private
- *
- * @var array
- */
- private $fonts = [];
-
- /**
- * Stylesheet object.
- *
- * Holds the CSS file stylesheet instance.
- *
- * @access protected
- *
- * @var Stylesheet
- */
- protected $stylesheet_obj;
-
- /**
- * Printed.
- *
- * Holds the list of printed files.
- *
- * @access protected
- *
- * @var array
- */
- private static $printed = [];
-
- /**
- * Get CSS file name.
- *
- * Retrieve the CSS file name.
- *
- * @since 1.6.0
- * @access public
- * @abstract
- */
- abstract public function get_name();
-
- /**
- * CSS file constructor.
- *
- * Initializing Elementor CSS file. If using external files, set path and
- * URL, otherwise initiate stylesheet.
- *
- * @since 1.2.0
- * @access public
- */
- public function __construct() {
- if ( $this->use_external_file() ) {
- $this->set_path_and_url();
- }
-
- $this->init_stylesheet();
- }
-
- /**
- * Use external file.
- *
- * Whether to use external CSS file of not. When there are new schemes or settings
- * updates.
- *
- * @since 1.9.0
- * @access protected
- *
- * @return bool True if the CSS requires an update, False otherwise.
- */
- protected function use_external_file() {
- return 'internal' !== get_option( 'elementor_css_print_method' );
- }
-
- /**
- * Update the CSS file.
- *
- * Delete old CSS, parse the CSS, save the new file and update the database.
- *
- * This method also sets the CSS status to be used later on in the render posses.
- *
- * @since 1.2.0
- * @access public
- */
- public function update() {
- $this->parse_css();
-
- $meta = [
- 'time' => time(),
- 'fonts' => array_unique( $this->fonts ),
- ];
-
- if ( empty( $this->css ) ) {
- $this->delete();
-
- $meta['status'] = self::CSS_STATUS_EMPTY;
- $meta['css'] = '';
- } else {
- $file_created = false;
- $use_external_file = $this->use_external_file();
-
- if ( $use_external_file && wp_is_writable( dirname( $this->path ) ) ) {
- $file_created = file_put_contents( $this->path, $this->css );
- }
-
- if ( $file_created ) {
- $meta['status'] = self::CSS_STATUS_FILE;
- } else {
- $meta['status'] = self::CSS_STATUS_INLINE;
- $meta['css'] = $this->css;
- }
- }
-
- $this->update_meta( $meta );
- }
-
- /**
- * Delete the CSS file.
- *
- * If the CSS file exist, delete it.
- *
- * @since 1.2.0
- * @access public
- */
- public function delete() {
- if ( file_exists( $this->path ) ) {
- unlink( $this->path );
- }
- }
-
- /**
- * Enqueue CSS.
- *
- * Either enqueue the CSS file in Elementor or add inline style.
- *
- * This method is also responsible for loading the fonts.
- *
- * @since 1.2.0
- * @access public
- */
- public function enqueue() {
- $handle_id = $this->get_file_handle_id();
-
- if ( isset( self::$printed[ $handle_id ] ) ) {
- return;
- }
-
- self::$printed[ $handle_id ] = true;
-
- $meta = $this->get_meta();
-
- if ( self::CSS_STATUS_EMPTY === $meta['status'] ) {
- return;
- }
-
- // First time after clear cache and etc.
- if ( '' === $meta['status'] || $this->is_update_required() ) {
- $this->update();
-
- $meta = $this->get_meta();
- }
-
- if ( self::CSS_STATUS_INLINE === $meta['status'] ) {
- $dep = $this->get_inline_dependency();
- // If the dependency has already been printed ( like a template in footer )
- if ( wp_styles()->query( $dep, 'done' ) ) {
- printf( '<style id="%1$s">%2$s</style>', $this->get_file_handle_id(), $meta['css'] ); // XSS ok.
- } else {
- wp_add_inline_style( $dep , $meta['css'] );
- }
- } elseif ( self::CSS_STATUS_FILE === $meta['status'] ) { // Re-check if it's not empty after CSS update.
- wp_enqueue_style( $this->get_file_handle_id(), $this->url, $this->get_enqueue_dependencies(), $meta['time'] );
- }
-
- // Handle fonts.
- if ( ! empty( $meta['fonts'] ) ) {
- foreach ( $meta['fonts'] as $font ) {
- Plugin::$instance->frontend->enqueue_font( $font );
- }
- }
-
- $name = $this->get_name();
-
- /**
- * Enqueue CSS file.
- *
- * Fires when CSS file is enqueued on Elementor.
- *
- * The dynamic portion of the hook name, `$name`, refers to the CSS file name.
- *
- * @since 1.9.0
- * @deprecated 2.0.0 Use `elementor/css-file/{$name}/enqueue` action instead.
- * @todo Need to be hard deprecated using `do_action_deprecated()`.
- *
- * @param CSS_File $this The current CSS file.
- */
- do_action( "elementor/{$name}-css-file/enqueue", $this );
-
- /**
- * Enqueue CSS file.
- *
- * Fires when CSS file is enqueued on Elementor.
- *
- * The dynamic portion of the hook name, `$name`, refers to the CSS file name.
- *
- * @since 2.0.0
- *
- * @param CSS_File $this The current CSS file.
- */
- do_action( "elementor/css-file/{$name}/enqueue", $this );
- }
-
- /**
- * Print CSS.
- *
- * Output the final CSS inside the `<style>` tags and all the frontend fonts in
- * use.
- *
- * @since 1.9.4
- * @access public
- */
- public function print_css() {
- echo '<style>' . $this->get_css() . '</style>'; // XSS ok.
- Plugin::$instance->frontend->print_fonts_links();
- }
-
- /**
- * Add control rules.
- *
- * Parse the CSS for all the elements inside any given control.
- *
- * This method recursively renders the CSS for all the selectors in the control.
- *
- * @since 1.2.0
- * @access public
- *
- * @param array $control The controls.
- * @param array $controls_stack The controls stack.
- * @param callable $value_callback Callback function for the value.
- * @param array $placeholders Placeholders.
- * @param array $replacements Replacements.
- *
- * @throws \Exception If no parsed value.
- */
- public function add_control_rules( array $control, array $controls_stack, callable $value_callback, array $placeholders, array $replacements ) {
- $value = call_user_func( $value_callback, $control );
-
- if ( null === $value || empty( $control['selectors'] ) ) {
- return;
- }
-
- foreach ( $control['selectors'] as $selector => $css_property ) {
- try {
- $output_css_property = preg_replace_callback(
- '/\{\{(?:([^.}]+)\.)?([^}]*)}}/', function( $matches ) use ( $control, $value_callback, $controls_stack, $value, $css_property ) {
- $parser_control = $control;
- $value_to_insert = $value;
-
- if ( ! empty( $matches[1] ) ) {
- if ( ! isset( $controls_stack[ $matches[1] ] ) ) {
- return '';
- }
-
- $parser_control = $controls_stack[ $matches[1] ];
- $value_to_insert = call_user_func( $value_callback, $parser_control );
- }
-
- if ( Controls_Manager::FONT === $control['type'] ) {
- $this->fonts[] = $value_to_insert;
- }
-
- /** @var Base_Data_Control $control_obj */
- $control_obj = Plugin::$instance->controls_manager->get_control( $parser_control['type'] );
- $parsed_value = $control_obj->get_style_value( strtolower( $matches[2] ), $value_to_insert );
-
- if ( '' === $parsed_value ) {
- throw new \Exception();
- }
-
- return $parsed_value;
- }, $css_property
- );
- } catch ( \Exception $e ) {
- return;
- }
-
- if ( ! $output_css_property ) {
- continue;
- }
-
- $device_pattern = '/^(?:\([^\)]+\)){1,2}/';
-
- preg_match( $device_pattern, $selector, $device_rules );
-
- $query = [];
-
- if ( $device_rules ) {
- $selector = preg_replace( $device_pattern, '', $selector );
-
- preg_match_all( '/\(([^\)]+)\)/', $device_rules[0], $pure_device_rules );
-
- $pure_device_rules = $pure_device_rules[1];
-
- foreach ( $pure_device_rules as $device_rule ) {
- if ( Element_Base::RESPONSIVE_DESKTOP === $device_rule ) {
- continue;
- }
-
- $device = preg_replace( '/\+$/', '', $device_rule );
-
- $endpoint = $device === $device_rule ? 'max' : 'min';
-
- $query[ $endpoint ] = $device;
- }
- }
-
- $parsed_selector = str_replace( $placeholders, $replacements, $selector );
-
- if ( ! $query && ! empty( $control['responsive'] ) ) {
- $query = array_intersect_key( $control['responsive'], array_flip( [ 'min', 'max' ] ) );
-
- if ( ! empty( $query['max'] ) && Element_Base::RESPONSIVE_DESKTOP === $query['max'] ) {
- unset( $query['max'] );
- }
- }
-
- $this->stylesheet_obj->add_rules( $parsed_selector, $output_css_property, $query );
- }
- }
-
- /**
- * Get the fonts.
- *
- * Retrieve the list of fonts.
- *
- * @since 1.9.0
- * @access public
- *
- * @return array Fonts.
- */
- public function get_fonts() {
- return $this->fonts;
- }
-
- /**
- * Get CSS.
- *
- * Retrieve the CSS. If the CSS is empty, parse it again.
- *
- * @since 1.2.0
- * @access public
- *
- * @return string The CSS.
- */
- public function get_css() {
- if ( empty( $this->css ) ) {
- $this->parse_css();
- }
-
- return $this->css;
- }
-
- /**
- * Get stylesheet.
- *
- * Retrieve the CSS file stylesheet instance.
- *
- * @since 1.2.0
- * @access public
- *
- * @return Stylesheet The stylesheet object.
- */
- public function get_stylesheet() {
- return $this->stylesheet_obj;
- }
-
- /**
- * Get meta data.
- *
- * Retrieve the CSS file meta data. Returns an array of all the data, or if
- * custom property is given it will return the property value, or `null` if
- * the property does not exist.
- *
- * @since 1.2.0
- * @access public
- *
- * @param string $property Optional. Custom meta data property. Default is
- * null.
- *
- * @return array|null An array of all the data, or if custom property is
- * given it will return the property value, or `null` if
- * the property does not exist.
- */
- public function get_meta( $property = null ) {
- $defaults = [
- 'status' => '',
- 'time' => 0,
- ];
-
- $meta = array_merge( $defaults, (array) $this->load_meta() );
-
- if ( $property ) {
- return isset( $meta[ $property ] ) ? $meta[ $property ] : null;
- }
-
- return $meta;
- }
-
- /**
- * Add controls stack style rules.
- *
- * Parse the CSS for all the elements inside any given controls stack.
- *
- * This method recursively renders the CSS for all the child elements in the stack.
- *
- * @since 1.6.0
- * @access public
- *
- * @param Controls_Stack $controls_stack The controls stack.
- * @param array $controls Controls array.
- * @param array $values Values array.
- * @param array $placeholders Placeholders.
- * @param array $replacements Replacements.
- */
- public function add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements ) {
- $all_controls = $controls_stack->get_controls();
-
- $parsed_dynamic_settings = $controls_stack->parse_dynamic_settings( $values, $controls );
-
- foreach ( $controls as $control ) {
- if ( ! empty( $control['style_fields'] ) ) {
- $this->add_repeater_control_style_rules( $controls_stack, $control['style_fields'], $values[ $control['name'] ], $placeholders, $replacements );
- }
-
- if ( ! empty( $control[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] ) ) {
- $this->add_dynamic_control_style_rules( $control, $control[ Manager::DYNAMIC_SETTING_KEY ][ $control['name'] ] );
- }
-
- if ( empty( $control['selectors'] ) ) {
- continue;
- }
-
- $this->add_control_style_rules( $control, $parsed_dynamic_settings, $all_controls, $placeholders, $replacements );
- }
- }
-
- /**
- * Load meta data.
- *
- * Retrieve the CSS file meta data.
- *
- * @since 1.2.0
- * @access protected
- * @abstract
- */
- abstract protected function load_meta();
-
- /**
- * Update meta data.
- *
- * Update the global CSS file meta data.
- *
- * @since 1.2.0
- * @access protected
- * @abstract
- *
- * @param array $meta New meta data.
- */
- abstract protected function update_meta( $meta );
-
- /**
- * Get file handle ID.
- *
- * Retrieve the file handle ID.
- *
- * @since 1.2.0
- * @access protected
- * @abstract
- *
- * @return string CSS file handle ID.
- */
- abstract protected function get_file_handle_id();
-
- /**
- * Render CSS.
- *
- * Parse the CSS.
- *
- * @since 1.2.0
- * @access protected
- * @abstract
- */
- abstract protected function render_css();
-
- /**
- * Get file name.
- *
- * Retrieve the name of the CSS file.
- *
- * @since 1.2.0
- * @access protected
- * @abstract
- *
- * @return string File name.
- */
- abstract protected function get_file_name();
-
- /**
- * Get enqueue dependencies.
- *
- * Retrieve the name of the stylesheet used by `wp_enqueue_style()`.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return array Name of the stylesheet.
- */
- protected function get_enqueue_dependencies() {
- return [];
- }
-
- /**
- * Get inline dependency.
- *
- * Retrieve the name of the stylesheet used by `wp_add_inline_style()`.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return string Name of the stylesheet.
- */
- protected function get_inline_dependency() {
- return '';
- }
-
- /**
- * Is update required.
- *
- * Whether the CSS requires an update. When there are new schemes or settings
- * updates.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return bool True if the CSS requires an update, False otherwise.
- */
- protected function is_update_required() {
- return false;
- }
-
- /**
- * Parse CSS.
- *
- * Parsing the CSS file.
- *
- * @since 1.2.0
- * @access protected
- */
- protected function parse_css() {
- $this->render_css();
-
- $name = $this->get_name();
-
- /**
- * Parse CSS file.
- *
- * Fires when CSS file is parsed on Elementor.
- *
- * The dynamic portion of the hook name, `$name`, refers to the CSS file name.
- *
- * @since 1.2.0
- * @deprecated 2.0.0 Use `elementor/css-file/{$name}/parse` action instead.
- * @todo Need to be hard deprecated using `do_action_deprecated()`.
- *
- * @param CSS_File $this The current CSS file.
- */
- do_action( "elementor/{$name}-css-file/parse", $this );
-
- /**
- * Parse CSS file.
- *
- * Fires when CSS file is parsed on Elementor.
- *
- * The dynamic portion of the hook name, `$name`, refers to the CSS file name.
- *
- * @since 2.0.0
- *
- * @param CSS_File $this The current CSS file.
- */
- do_action( "elementor/css-file/{$name}/parse", $this );
-
- $this->css = $this->stylesheet_obj->__toString();
- }
-
- /**
- * Set path and URL.
- *
- * Define the CSS file path and file URL.
- *
- * @since 1.2.0
- * @access protected
- */
- protected function set_path_and_url() {
- $wp_upload_dir = wp_upload_dir( null, false );
-
- $relative_path = sprintf( self::FILE_NAME_PATTERN, self::FILE_BASE_DIR, $this->get_file_name() );
-
- $this->path = $wp_upload_dir['basedir'] . $relative_path;
- $this->url = set_url_scheme( $wp_upload_dir['baseurl'] . $relative_path );
- }
-
- /**
- * Add control style rules.
- *
- * Register new style rules for the control.
- *
- * @since 1.6.0
- * @access private
- *
- * @param array $control The control.
- * @param array $values Values array.
- * @param array $controls The controls stack.
- * @param array $placeholders Placeholders.
- * @param array $replacements Replacements.
- */
- private function add_control_style_rules( array $control, array $values, array $controls, array $placeholders, array $replacements ) {
- $this->add_control_rules(
- $control, $controls, function( $control ) use ( $values ) {
-
- return $this->get_style_control_value( $control, $values );
- }, $placeholders, $replacements
- );
- }
-
- /**
- * Get style control value.
- *
- * Retrieve the value of the style control for any give control and values.
- *
- * It will retrieve the control name and return the style value.
- *
- * @since 1.6.0
- * @access private
- *
- * @param array $control The control.
- * @param array $values Values array.
- *
- * @return mixed Style control value.
- */
- private function get_style_control_value( array $control, array $values ) {
- $value = $values[ $control['name'] ];
-
- if ( isset( $control['selectors_dictionary'][ $value ] ) ) {
- $value = $control['selectors_dictionary'][ $value ];
- }
-
- if ( ! is_numeric( $value ) && ! is_float( $value ) && empty( $value ) ) {
- return null;
- }
-
- return $value;
- }
-
- /**
- * Init stylesheet.
- *
- * Initialize CSS file stylesheet by creating a new `Stylesheet` object and register new
- * breakpoints for the stylesheet.
- *
- * @since 1.2.0
- * @access private
- */
- private function init_stylesheet() {
- $this->stylesheet_obj = new Stylesheet();
-
- $breakpoints = Responsive::get_breakpoints();
-
- $this->stylesheet_obj
- ->add_device( 'mobile', 0 )
- ->add_device( 'tablet', $breakpoints['md'] )
- ->add_device( 'desktop', $breakpoints['lg'] );
- }
-
- /**
- * Add repeater control style rules.
- *
- * Register new style rules for the repeater control.
- *
- * @since 2.0.0
- * @access private
- *
- * @param Controls_Stack $controls_stack The control stack.
- * @param array $repeater_controls_items The repeater controls items.
- * @param array $repeater_values Repeater values array.
- * @param array $placeholders Placeholders.
- * @param array $replacements Replacements.
- */
- private function add_repeater_control_style_rules( Controls_Stack $controls_stack, array $repeater_controls_items, array $repeater_values, array $placeholders, array $replacements ) {
- $placeholders = array_merge( $placeholders, [ '{{CURRENT_ITEM}}' ] );
-
- foreach ( $repeater_controls_items as $index => $item ) {
- $this->add_controls_stack_style_rules(
- $controls_stack,
- $item,
- $repeater_values[ $index ],
- $placeholders,
- array_merge( $replacements, [ '.elementor-repeater-item-' . $repeater_values[ $index ]['_id'] ] )
- );
- }
- }
-
- /**
- * Add dynamic control style rules.
- *
- * Register new style rules for the dynamic control.
- *
- * @since 2.0.0
- * @access private
- *
- * @param array $control The control.
- * @param string $value The value.
- */
- private function add_dynamic_control_style_rules( array $control, $value ) {
- Plugin::$instance->dynamic_tags->parse_tags_text( $value, $control, function( $id, $name, $settings ) {
- $tag = Plugin::$instance->dynamic_tags->create_tag( $id, $name, $settings );
-
- if ( ! $tag instanceof Tag ) {
- return;
- }
-
- $this->add_controls_stack_style_rules( $tag, $tag->get_style_controls(), $tag->get_active_settings(), [ '{{WRAPPER}}' ], [ '#elementor-tag-' . $id ] );
- } );
- }
-}
+++ /dev/null
-<?php
-namespace Elementor;
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit; // Exit if accessed directly.
-}
-
-/**
- * Elementor global CSS file.
- *
- * Elementor CSS file handler class is responsible for generating the global CSS
- * file.
- *
- * @since 1.2.0
- */
-class Global_CSS_File extends CSS_File {
-
- /**
- * Elementor global CSS file meta key.
- */
- const META_KEY = '_elementor_global_css';
-
- /**
- * Elementor global CSS file handler ID.
- */
- const FILE_HANDLER_ID = 'elementor-global';
-
- /**
- * Get CSS file name.
- *
- * Retrieve the CSS file name.
- *
- * @since 1.6.0
- * @access public
- *
- * @return string CSS file name.
- */
- public function get_name() {
- return 'global';
- }
-
- /**
- * Load meta data.
- *
- * Retrieve the global CSS file meta data.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return array Global CSS file meta data.
- */
- protected function load_meta() {
- return get_option( self::META_KEY );
- }
-
- /**
- * Update meta data.
- *
- * Update the global CSS file meta data.
- *
- * @since 1.2.0
- * @access protected
- *
- * @param string $meta New meta data.
- */
- protected function update_meta( $meta ) {
- update_option( self::META_KEY, $meta );
- }
-
- /**
- * Get file handle ID.
- *
- * Retrieve the handle ID for the global post CSS file.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return string CSS file handle ID.
- */
- protected function get_file_handle_id() {
- return self::FILE_HANDLER_ID;
- }
-
- /**
- * Render CSS.
- *
- * Parse the CSS for all the widgets and all the scheme controls.
- *
- * @since 1.2.0
- * @access protected
- */
- protected function render_css() {
- $this->render_schemes_css();
- }
-
- /**
- * Get file name.
- *
- * Retrieve the name of the global CSS file.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return string File name.
- */
- protected function get_file_name() {
- return 'global';
- }
-
- /**
- * Get inline dependency.
- *
- * Retrieve the name of the stylesheet used by `wp_add_inline_style()`.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return string Name of the stylesheet.
- */
- protected function get_inline_dependency() {
- return 'elementor-frontend';
- }
-
- /**
- * Is update required.
- *
- * Whether the CSS requires an update. When there are new schemes or settings
- * updates.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return bool True if the CSS requires an update, False otherwise.
- */
- protected function is_update_required() {
- $file_last_updated = $this->get_meta( 'time' );
-
- $schemes_last_update = get_option( Scheme_Base::LAST_UPDATED_META );
-
- if ( $file_last_updated < $schemes_last_update ) {
- return true;
- }
-
- $elementor_settings_last_updated = get_option( Settings::UPDATE_TIME_FIELD );
-
- if ( $file_last_updated < $elementor_settings_last_updated ) {
- return true;
- }
-
- return false;
- }
-
- /**
- * Render schemes CSS.
- *
- * Parse the CSS for all the widgets and all the scheme controls.
- *
- * @since 1.2.0
- * @access private
- */
- private function render_schemes_css() {
- $elementor = Plugin::$instance;
-
- foreach ( $elementor->widgets_manager->get_widget_types() as $widget ) {
- $scheme_controls = $widget->get_scheme_controls();
-
- foreach ( $scheme_controls as $control ) {
- $this->add_control_rules(
- $control, $widget->get_controls(), function( $control ) use ( $elementor ) {
- $scheme_value = $elementor->schemes_manager->get_scheme_value( $control['scheme']['type'], $control['scheme']['value'] );
-
- if ( empty( $scheme_value ) ) {
- return null;
- }
-
- if ( ! empty( $control['scheme']['key'] ) ) {
- $scheme_value = $scheme_value[ $control['scheme']['key'] ];
- }
-
- if ( empty( $scheme_value ) ) {
- return null;
- }
-
- return $scheme_value;
- }, [ '{{WRAPPER}}' ], [ '.elementor-widget-' . $widget->get_name() ]
- );
- }
- }
- }
-}
+++ /dev/null
-<?php
-namespace Elementor;
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit; // Exit if accessed directly.
-}
-
-/**
- * Elementor post CSS file.
- *
- * Elementor CSS file handler class is responsible for generating the single
- * post CSS file.
- *
- * @since 1.2.0
- */
-class Post_CSS_File extends CSS_File {
-
- /**
- * Elementor post CSS file meta key.
- */
- const META_KEY = '_elementor_css';
-
- /**
- * Elementor post CSS file prefix.
- */
- const FILE_PREFIX = 'post-';
-
- /**
- * Post ID.
- *
- * Holds the current post ID.
- *
- * @var int
- */
- private $post_id;
-
- /**
- * Post CSS file constructor.
- *
- * Initializing the CSS file of the post. Set the post ID and initiate the stylesheet.
- *
- * @since 1.2.0
- * @access public
- *
- * @param int $post_id Post ID.
- */
- public function __construct( $post_id ) {
- $this->post_id = $post_id;
-
- parent::__construct();
- }
-
- /**
- * Get CSS file name.
- *
- * Retrieve the CSS file name.
- *
- * @since 1.6.0
- * @access public
- *
- * @return string CSS file name.
- */
- public function get_name() {
- return 'post';
- }
-
- /**
- * Get post ID.
- *
- * Retrieve the ID of current post.
- *
- * @since 1.2.0
- * @access public
- *
- * @return int Post ID.
- */
- public function get_post_id() {
- return $this->post_id;
- }
-
- /**
- * Get unique element selector.
- *
- * Retrieve the unique selector for any given element.
- *
- * @since 1.2.0
- * @access public
- *
- * @param Element_Base $element The element.
- *
- * @return string Unique element selector.
- */
- public function get_element_unique_selector( Element_Base $element ) {
- return '.elementor-' . $this->post_id . ' .elementor-element' . $element->get_unique_selector();
- }
-
- /**
- * Load meta data.
- *
- * Retrieve the post CSS file meta data.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return array Post CSS file meta data.
- */
- protected function load_meta() {
- return get_post_meta( $this->post_id, static::META_KEY, true );
- }
-
- /**
- * Update meta data.
- *
- * Update the global CSS file meta data.
- *
- * @since 1.2.0
- * @access protected
- *
- * @param array $meta New meta data.
- */
- protected function update_meta( $meta ) {
- update_post_meta( $this->post_id, static::META_KEY, $meta );
- }
-
- /**
- * Get post data.
- *
- * Retrieve raw post data from the database.
- *
- * @since 1.9.0
- * @access protected
- *
- * @return array Post data.
- */
- protected function get_data() {
- return Plugin::$instance->db->get_plain_editor( $this->post_id );
- }
-
- /**
- * Render CSS.
- *
- * Parse the CSS for all the elements.
- *
- * @since 1.2.0
- * @access protected
- */
- protected function render_css() {
- $data = $this->get_data();
-
- if ( ! empty( $data ) ) {
- foreach ( $data as $element_data ) {
- $element = Plugin::$instance->elements_manager->create_element_instance( $element_data );
-
- if ( ! $element ) {
- continue;
- }
-
- $this->render_styles( $element );
- }
- }
- }
-
- /**
- * Enqueue CSS.
- *
- * Enqueue the post CSS file in Elementor.
- *
- * This method ensures that the post was actually built with elementor before
- * enqueueing the post CSS file.
- *
- * @since 1.2.2
- * @access public
- */
- public function enqueue() {
- if ( ! Plugin::$instance->db->is_built_with_elementor( $this->post_id ) ) {
- return;
- }
-
- parent::enqueue();
- }
-
- /**
- * Add controls-stack style rules.
- *
- * Parse the CSS for all the elements inside any given controls stack.
- *
- * This method recursively renders the CSS for all the child elements in the stack.
- *
- * @since 1.6.0
- * @access public
- *
- * @param Controls_Stack $controls_stack The controls stack.
- * @param array $controls Controls array.
- * @param array $values Values array.
- * @param array $placeholders Placeholders.
- * @param array $replacements Replacements.
- */
- public function add_controls_stack_style_rules( Controls_Stack $controls_stack, array $controls, array $values, array $placeholders, array $replacements ) {
- parent::add_controls_stack_style_rules( $controls_stack, $controls, $values, $placeholders, $replacements );
-
- if ( $controls_stack instanceof Element_Base ) {
- foreach ( $controls_stack->get_children() as $child_element ) {
- $this->render_styles( $child_element );
- }
- }
- }
-
- /**
- * Get enqueue dependencies.
- *
- * Retrieve the name of the stylesheet used by `wp_enqueue_style()`.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return array Name of the stylesheet.
- */
- protected function get_enqueue_dependencies() {
- return [ 'elementor-frontend' ];
- }
-
- /**
- * Get inline dependency.
- *
- * Retrieve the name of the stylesheet used by `wp_add_inline_style()`.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return string Name of the stylesheet.
- */
- protected function get_inline_dependency() {
- return 'elementor-frontend';
- }
-
- /**
- * Get file handle ID.
- *
- * Retrieve the handle ID for the post CSS file.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return string CSS file handle ID.
- */
- protected function get_file_handle_id() {
- return 'elementor-post-' . $this->post_id;
- }
-
- /**
- * Get file name.
- *
- * Retrieve the name of the post CSS file.
- *
- * @since 1.2.0
- * @access protected
- *
- * @return string File name.
- */
- protected function get_file_name() {
- return self::FILE_PREFIX . $this->post_id;
- }
-
- /**
- * Render styles.
- *
- * Parse the CSS for any given element.
- *
- * @since 1.2.0
- * @access protected
- *
- * @param Element_Base $element The element.
- */
- protected function render_styles( Element_Base $element ) {
- /**
- * Before element parse CSS.
- *
- * Fires before the CSS of the element is parsed.
- *
- * @since 1.2.0
- *
- * @param Post_CSS_File $this The post CSS file.
- * @param Element_Base $element The element.
- */
- do_action( 'elementor/element/before_parse_css', $this, $element );
-
- $element_settings = $element->get_settings();
-
- $this->add_controls_stack_style_rules( $element, $element->get_style_controls(), $element_settings, [ '{{ID}}', '{{WRAPPER}}' ], [ $element->get_id(), $this->get_element_unique_selector( $element ) ] );
-
- /**
- * After element parse CSS.
- *
- * Fires after the CSS of the element is parsed.
- *
- * @since 1.2.0
- *
- * @param Post_CSS_File $this The post CSS file.
- * @param Element_Base $element The element.
- */
- do_action( 'elementor/element/parse_css', $this, $element );
- }
-}
+++ /dev/null
-<?php
-namespace Elementor;
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit; // Exit if accessed directly.
-}
-
-/**
- * Elementor post preview CSS file.
- *
- * Elementor CSS file handler class is responsible for generating the post
- * preview CSS file.
- *
- * @since 1.9.0
- */
-class Post_Preview_CSS extends Post_CSS_File {
-
- /**
- * Preview ID.
- *
- * Holds the ID of the current post being previewed.
- *
- * @var int
- */
- private $preview_id;
-
- /**
- * Post preview CSS file constructor.
- *
- * Initializing the CSS file of the post preview. Set the post ID and the
- * parent ID and initiate the stylesheet.
- *
- * @since 1.9.0
- * @access public
- *
- * @param int $post_id Post ID.
- */
- public function __construct( $post_id ) {
- $this->preview_id = $post_id;
-
- $parent_id = wp_get_post_parent_id( $post_id );
-
- parent::__construct( $parent_id );
- }
-
- /**
- * Get data.
- *
- * Retrieve raw post data from the database.
- *
- * @since 1.9.0
- * @access protected
- *
- * @return array Post data.
- */
- protected function get_data() {
- return Plugin::$instance->db->get_plain_editor( $this->preview_id );
- }
-
- /**
- * Get file handle ID.
- *
- * Retrieve the handle ID for the previewed post CSS file.
- *
- * @since 1.9.0
- * @access protected
- *
- * @return string CSS file handle ID.
- */
- protected function get_file_handle_id() {
- return 'elementor-preview-' . $this->preview_id;
- }
-
- /**
- * Get meta data.
- *
- * Retrieve the previewed post CSS file meta data.
- *
- * @since 1.9.0
- * @access public
- *
- * @param string $property Optional. Custom meta data property. Default is
- * null.
- *
- * @return array Previewed post CSS file meta data.
- */
- public function get_meta( $property = null ) {
- // Parse CSS first, to get the fonts list.
- $css = $this->get_css();
-
- $meta = [
- 'status' => self::CSS_STATUS_INLINE,
- 'fonts' => $this->get_fonts(),
- 'css' => $css,
- ];
-
- if ( $property ) {
- return isset( $meta[ $property ] ) ? $meta[ $property ] : null;
- }
-
- return $meta;
- }
-}
* When editing the with Elementor the first time, the current page content
* is parsed into Text Editor Widget that contains the original data.
*
- * @since 1.0.0
+ * @since 2.1.0
* @access public
*
* @param int $post_id Post ID.
*
* @return array Content in Elementor format.
*/
- public function _get_new_editor_from_wp_editor( $post_id ) {
+ public function get_new_editor_from_wp_editor( $post_id ) {
$post = get_post( $post_id );
if ( empty( $post ) || empty( $post->post_content ) ) {
return [];
}
- $text_editor_widget_type = Plugin::$instance->widgets_manager->get_widget_types( 'text-editor' );
+ // Check if it's only a shortcode.
+ preg_match_all( '/' . get_shortcode_regex() . '/', $post->post_content, $matches, PREG_SET_ORDER );
+ if ( ! empty( $matches ) ) {
+ foreach ( $matches as $shortcode ) {
+ if ( trim( $post->post_content ) === $shortcode[0] ) {
+ $widget_type = Plugin::$instance->widgets_manager->get_widget_types( 'shortcode' );
+ $settings = [
+ 'shortcode' => $post->post_content,
+ ];
+ break;
+ }
+ }
+ }
+
+ if ( empty( $widget_type ) ) {
+ $widget_type = Plugin::$instance->widgets_manager->get_widget_types( 'text-editor' );
+ $settings = [
+ 'editor' => $post->post_content,
+ ];
+ }
// TODO: Better coding to start template for editor
return [
'elements' => [
[
'id' => Utils::generate_random_string(),
- 'elType' => $text_editor_widget_type::get_type(),
- 'widgetType' => $text_editor_widget_type->get_name(),
- 'settings' => [
- 'editor' => $post->post_content,
- ],
+ 'elType' => $widget_type::get_type(),
+ 'widgetType' => $widget_type->get_name(),
+ 'settings' => $settings,
],
],
],
];
}
+ /**
+ * Get new editor from WordPress editor.
+ *
+ * When editing the with Elementor the first time, the current page content
+ * is parsed into Text Editor Widget that contains the original data.
+ *
+ * @since 1.0.0
+ * @deprecated 2.1.0 Use `DB::get_new_editor_from_wp_editor()` instead
+ * @access public
+ *
+ * @param int $post_id Post ID.
+ *
+ * @return array Content in Elementor format.
+ */
+ public function _get_new_editor_from_wp_editor( $post_id ) {
+ // TODO: _deprecated_function( __METHOD__, '2.1.0', __CLASS__ . '::get_new_editor_from_wp_editor()' );
+
+ return $this->get_new_editor_from_wp_editor( $post_id );
+ }
+
/**
* Is using Elementor.
*
</head>
<body class="<?php echo implode( ' ', $body_classes ); ?>">
<div id="elementor-editor-wrapper">
+ <div id="elementor-panel" class="elementor-panel"></div>
<div id="elementor-preview">
<div id="elementor-loading">
<div class="elementor-loader-wrapper">
<div class="elementor-loader">
- <div class="elementor-loader-box"></div>
- <div class="elementor-loader-box"></div>
- <div class="elementor-loader-box"></div>
- <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-boxes">
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ </div>
</div>
<div class="elementor-loading-title"><?php echo __( 'Loading', 'elementor' ); ?></div>
</div>
?>
</div>
</div>
- <div id="elementor-panel" class="elementor-panel"></div>
+ <div id="elementor-navigator"></div>
</div>
<?php
wp_footer();
<span class="elementor-screen-only"><?php echo __( 'Close', 'elementor' ); ?></span>
</div>
<div class="elementor-add-new-section">
- <button class="elementor-add-section-button elementor-button"><?php echo __( 'Add New Section', 'elementor' ); ?></button>
- <button class="elementor-add-template-button elementor-button"><?php echo __( 'Add Template', 'elementor' ); ?></button>
- <div class="elementor-add-section-drag-title"><?php echo __( 'Or drag widget here', 'elementor' ); ?></div>
+ <div class="elementor-add-section-area-button elementor-add-section-button" title="<?php echo __( 'Add New Section', 'elementor' ); ?>">
+ <i class="eicon-plus"></i>
+ </div>
+ <div class="elementor-add-section-area-button elementor-add-template-button" title="<?php echo __( 'Add Template', 'elementor' ); ?>">
+ <i class="fa fa-folder"></i>
+ </div>
+ <div class="elementor-add-section-drag-title"><?php echo __( 'Drag widget here', 'elementor' ); ?></div>
</div>
<div class="elementor-select-preset">
<div class="elementor-select-preset-title"><?php echo __( 'Select your Structure', 'elementor' ); ?></div>
--- /dev/null
+<?php
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly
+}
+?>
+<script type="text/template" id="tmpl-elementor-templates-modal__header">
+ <div class="elementor-templates-modal__header__logo-area"></div>
+ <div class="elementor-templates-modal__header__menu-area"></div>
+ <div class="elementor-templates-modal__header__items-area">
+ <div class="elementor-templates-modal__header__close elementor-templates-modal__header__close--{{{ 'skip' === closeType ? 'skip' : 'normal' }}} elementor-templates-modal__header__item">
+ <# if ( 'skip' === closeType ) { #>
+ <span><?php echo __( 'Skip', 'elementor' ); ?></span>
+ <# } #>
+ <i class="eicon-close" aria-hidden="true" title="<?php echo __( 'Close', 'elementor' ); ?>"></i>
+ <span class="elementor-screen-only"><?php echo __( 'Close', 'elementor' ); ?></span>
+ </div>
+ <div id="elementor-template-library-header-tools"></div>
+ </div>
+</script>
+
+<script type="text/template" id="tmpl-elementor-templates-modal__header__logo">
+ <span class="elementor-templates-modal__header__logo__icon-wrapper">
+ <i class="eicon-elementor"></i>
+ </span>
+ <span class="elementor-templates-modal__header__logo__title">{{{ title }}}</span>
+</script>
--- /dev/null
+<?php
+namespace Elementor;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+?>
+<script type="text/template" id="tmpl-elementor-navigator">
+ <div id="elementor-navigator__header">
+ <i id="elementor-navigator__toggle-all" class="eicon-expand" data-elementor-action="expand"></i>
+ <div id="elementor-navigator__header__title"><?php echo __( 'Navigator', 'elementor' ); ?></div>
+ <i id="elementor-navigator__close" class="eicon-close"></i>
+ </div>
+ <div id="elementor-navigator__elements"></div>
+ <div id="elementor-navigator__footer">
+ <i class="eicon-ellipsis-h"></i>
+ </div>
+</script>
+
+<script type="text/template" id="tmpl-elementor-navigator__elements">
+ <# if ( obj.elType ) { #>
+ <div class="elementor-navigator__item">
+ <div class="elementor-navigator__element__list-toggle">
+ <i class="eicon-sort-down"></i>
+ </div>
+ <#
+ if ( icon ) { #>
+ <div class="elementor-navigator__element__element-type">
+ <i class="{{{ icon }}}"></i>
+ </div>
+ <# } #>
+ <div class="elementor-navigator__element__title">
+ <span class="elementor-navigator__element__title__text">{{{ title }}}</span>
+ </div>
+ <# if ( 'column' !== elType ) { #>
+ <div class="elementor-navigator__element__toggle">
+ <i class="eicon-eye"></i>
+ </div>
+ <# } #>
+ </div>
+ <# } #>
+ <div class="elementor-navigator__elements"></div>
+</script>
+
+<script type="text/template" id="tmpl-elementor-navigator__elements--empty">
+ <div class="elementor-empty-view__title"><?php echo __( 'Empty', 'elementor' ); ?></div>
+</script>
+
+<script type="text/template" id="tmpl-elementor-navigator__root--empty">
+ <i class="elementor-nerd-box-icon eicon-nerd" aria-hidden="true"></i>
+ <div class="elementor-nerd-box-title"><?php echo __( 'Easy Navigation is Here!', 'elementor' ); ?></div>
+ <div class="elementor-nerd-box-message"><?php echo __( 'Once you fill your page with content, this window will give you an overview display of all the page elements. This way, you can easily move the different sections, columns, and widgets.', 'elementor' ); ?></div>
+</script>
<script type="text/template" id="tmpl-elementor-panel-categories">
<div id="elementor-panel-categories"></div>
- <div id="elementor-panel-get-pro-elements" class="elementor-panel-nerd-box">
- <i class="elementor-panel-nerd-box-icon eicon-hypster" aria-hidden="true"></i>
- <div class="elementor-panel-nerd-box-message"><?php echo __( 'Get more with Elementor Pro', 'elementor' ); ?></div>
- <a class="elementor-button elementor-button-default elementor-panel-nerd-box-link" target="_blank" href="<?php echo Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=panel-widgets&utm_campaign=gopro&utm_medium=wp-dash' ); ?>"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
+ <div id="elementor-panel-get-pro-elements" class="elementor-nerd-box">
+ <i class="elementor-nerd-box-icon eicon-hypster" aria-hidden="true"></i>
+ <div class="elementor-nerd-box-message"><?php echo __( 'Get more with Elementor Pro', 'elementor' ); ?></div>
+ <a class="elementor-button elementor-button-default elementor-nerd-box-link" target="_blank" href="<?php echo Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=panel-widgets&utm_campaign=gopro&utm_medium=wp-dash' ); ?>"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
</div>
</script>
<script type="text/template" id="tmpl-elementor-panel-elements-category">
- <div class="panel-elements-category-title panel-elements-category-title-{{ name }}">{{{ title }}}</div>
- <div class="panel-elements-category-items"></div>
+ <div class="elementor-panel-category-title">{{{ title }}}</div>
+ <div class="elementor-panel-category-items"></div>
</script>
<script type="text/template" id="tmpl-elementor-panel-element-search">
</script>
<script type="text/template" id="tmpl-elementor-panel-global">
- <div class="elementor-panel-nerd-box">
- <i class="elementor-panel-nerd-box-icon eicon-hypster" aria-hidden="true"></i>
- <div class="elementor-panel-nerd-box-title"><?php echo __( 'Meet Our Global Widget', 'elementor' ); ?></div>
- <div class="elementor-panel-nerd-box-message"><?php echo __( 'With this feature, you can save a widget as global, then add it to multiple areas. All areas will be editable from one single place.', 'elementor' ); ?></div>
- <div class="elementor-panel-nerd-box-message"><?php echo __( 'This feature is only available on Elementor Pro.', 'elementor' ); ?></div>
- <a class="elementor-button elementor-button-default elementor-panel-nerd-box-link" target="_blank" href="<?php echo Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=panel-global&utm_campaign=gopro&utm_medium=wp-dash' ); ?>"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
+ <div class="elementor-nerd-box">
+ <i class="elementor-nerd-box-icon eicon-hypster" aria-hidden="true"></i>
+ <div class="elementor-nerd-box-title"><?php echo __( 'Meet Our Global Widget', 'elementor' ); ?></div>
+ <div class="elementor-nerd-box-message"><?php echo __( 'With this feature, you can save a widget as global, then add it to multiple areas. All areas will be editable from one single place.', 'elementor' ); ?></div>
+ <div class="elementor-nerd-box-message"><?php echo __( 'This feature is only available on Elementor Pro.', 'elementor' ); ?></div>
+ <a class="elementor-button elementor-button-default elementor-nerd-box-link" target="_blank" href="<?php echo Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=panel-global&utm_campaign=gopro&utm_medium=wp-dash' ); ?>"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
</div>
</script>
<?php
namespace Elementor;
+use Elementor\Core\Responsive\Responsive;
+
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
</script>
<script type="text/template" id="tmpl-elementor-panel-footer-content">
- <div id="elementor-panel-footer-settings" class="elementor-panel-footer-tool elementor-leave-open tooltip-target" data-tooltip="<?php esc_attr_e( 'Settings', 'elementor' ); ?>">
+ <div id="elementor-panel-footer-settings" class="elementor-panel-footer-tool elementor-toggle-state elementor-leave-open tooltip-target" data-tooltip="<?php esc_attr_e( 'Settings', 'elementor' ); ?>">
<i class="fa fa-cog" aria-hidden="true"></i>
<span class="elementor-screen-only"><?php printf( esc_html__( '%s Settings', 'elementor' ), $document::get_title() ); ?></span>
</div>
- <div id="elementor-panel-footer-responsive" class="elementor-panel-footer-tool">
+ <div id="elementor-panel-footer-navigator" class="elementor-panel-footer-tool tooltip-target" data-tooltip="<?php esc_attr_e( 'Navigator', 'elementor' ); ?>">
+ <i class="eicon-navigator" aria-hidden="true"></i>
+ <span class="elementor-screen-only"><?php echo __( 'Navigator', 'elementor' ); ?></span>
+ </div>
+ <div id="elementor-panel-footer-history" class="elementor-panel-footer-tool elementor-leave-open tooltip-target elementor-toggle-state" data-tooltip="<?php esc_attr_e( 'History', 'elementor' ); ?>">
+ <i class="fa fa-history" aria-hidden="true"></i>
+ <span class="elementor-screen-only"><?php echo __( 'History', 'elementor' ); ?></span>
+ </div>
+ <div id="elementor-panel-footer-responsive" class="elementor-panel-footer-tool elementor-toggle-state">
<i class="eicon-device-desktop tooltip-target" aria-hidden="true" data-tooltip="<?php esc_attr_e( 'Responsive Mode', 'elementor' ); ?>"></i>
<span class="elementor-screen-only">
<?php echo __( 'Responsive Mode', 'elementor' ); ?>
<div class="elementor-panel-footer-sub-menu-item" data-device-mode="tablet">
<i class="elementor-icon eicon-device-tablet" aria-hidden="true"></i>
<span class="elementor-title"><?php echo __( 'Tablet', 'elementor' ); ?></span>
- <span class="elementor-description"><?php echo __( 'Preview for 768px', 'elementor' ); ?></span>
+ <?php $breakpoints = Responsive::get_breakpoints(); ?>
+ <span class="elementor-description"><?php echo sprintf( __( 'Preview for %s', 'elementor' ), $breakpoints['md'] . 'px' ); ?></span>
</div>
<div class="elementor-panel-footer-sub-menu-item" data-device-mode="mobile">
<i class="elementor-icon eicon-device-mobile" aria-hidden="true"></i>
</div>
</div>
</div>
- <div id="elementor-panel-footer-history" class="elementor-panel-footer-tool elementor-leave-open tooltip-target" data-tooltip="<?php esc_attr_e( 'History', 'elementor' ); ?>">
- <i class="fa fa-history" aria-hidden="true"></i>
- <span class="elementor-screen-only"><?php echo __( 'History', 'elementor' ); ?></span>
- </div>
<div id="elementor-panel-saver-button-preview" class="elementor-panel-footer-tool tooltip-target" data-tooltip="<?php esc_attr_e( 'Preview Changes', 'elementor' ); ?>">
<span id="elementor-panel-saver-button-preview-label">
<i class="fa fa-eye" aria-hidden="true"></i>
</span>
</button>
</div>
- <div id="elementor-panel-saver-save-options" class="elementor-panel-footer-tool" >
+ <div id="elementor-panel-saver-save-options" class="elementor-panel-footer-tool elementor-toggle-state">
<button id="elementor-panel-saver-button-save-options" class="elementor-button elementor-button-success tooltip-target elementor-saver-disabled" data-tooltip="<?php esc_attr_e( 'Save Options', 'elementor' ); ?>">
<i class="fa fa-caret-up" aria-hidden="true"></i>
<span class="elementor-screen-only"><?php echo __( 'Save Options', 'elementor' ); ?></span>
</script>
<script type="text/template" id="tmpl-elementor-panel-schemes-disabled">
- <i class="elementor-panel-nerd-box-icon eicon-nerd" aria-hidden="true"></i>
- <div class="elementor-panel-nerd-box-title">{{{ '<?php echo __( '%s are disabled', 'elementor' ); ?>'.replace( '%s', disabledTitle ) }}}</div>
- <div class="elementor-panel-nerd-box-message"><?php printf( __( 'You can enable it from the <a href="%s" target="_blank">Elementor settings page</a>.', 'elementor' ), Settings::get_url() ); ?></div>
+ <i class="elementor-nerd-box-icon eicon-nerd" aria-hidden="true"></i>
+ <div class="elementor-nerd-box-title">{{{ '<?php echo __( '%s are disabled', 'elementor' ); ?>'.replace( '%s', disabledTitle ) }}}</div>
+ <div class="elementor-nerd-box-message"><?php printf( __( 'You can enable it from the <a href="%s" target="_blank">Elementor settings page</a>.', 'elementor' ), Settings::get_url() ); ?></div>
</script>
<script type="text/template" id="tmpl-elementor-panel-scheme-color-item">
$scheme_fields = array_intersect_key( $typography_fields, array_flip( $scheme_fields_keys ) );
foreach ( $scheme_fields as $option_name => $option ) :
- ?>
+ ?>
<div class="elementor-panel-scheme-typography-item">
<div class="elementor-panel-scheme-item-title elementor-control-title"><?php echo $option['label']; ?></div>
<div class="elementor-panel-scheme-typography-item-value">
</script>
<script type="text/template" id="tmpl-elementor-control-dynamic-cover">
- <div class="elementor-dynamic-cover__settings">
- <i class="fa fa-{{ hasSettings ? 'wrench' : 'database' }}"></i>
- </div>
+ <div class="elementor-dynamic-cover__settings">
+ <i class="fa fa-{{ hasSettings ? 'wrench' : 'database' }}"></i>
+ </div>
<div class="elementor-dynamic-cover__title" title="{{{ title + ' ' + content }}}">{{{ title + ' ' + content }}}</div>
<# if ( isRemovable ) { #>
<div class="elementor-dynamic-cover__remove">
exit; // Exit if accessed directly.
}
?>
-<script type="text/template" id="tmpl-elementor-templates-modal__header">
- <div class="elementor-templates-modal__header__logo-area"></div>
- <div class="elementor-templates-modal__header__menu-area"></div>
- <div class="elementor-templates-modal__header__items-area">
- <div class="elementor-templates-modal__header__close-modal elementor-templates-modal__header__item">
- <i class="eicon-close" aria-hidden="true" title="<?php esc_attr_e( 'Close', 'elementor' ); ?>"></i>
- <span class="elementor-screen-only"><?php echo __( 'Close', 'elementor' ); ?></span>
- </div>
- <div id="elementor-template-library-header-tools"></div>
- </div>
-</script>
-
-<script type="text/template" id="tmpl-elementor-templates-modal__header__logo">
- <span class="elementor-templates-modal__header__logo__icon-wrapper">
- <i class="eicon-elementor"></i>
- </span>
- <span class="elementor-templates-modal__header__logo__title">{{{ title }}}</span>
-</script>
-
<script type="text/template" id="tmpl-elementor-template-library-header-actions">
<div id="elementor-template-library-header-import" class="elementor-templates-modal__header__item">
<i class="eicon-upload-circle-o" aria-hidden="true" title="<?php esc_attr_e( 'Import Template', 'elementor' ); ?>"></i>
<script type="text/template" id="tmpl-elementor-template-library-loading">
<div class="elementor-loader-wrapper">
<div class="elementor-loader">
- <div class="elementor-loader-box"></div>
- <div class="elementor-loader-box"></div>
- <div class="elementor-loader-box"></div>
- <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-boxes">
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ </div>
</div>
<div class="elementor-loading-title"><?php echo __( 'Loading', 'elementor' ); ?></div>
</div>
<?php
namespace Elementor;
+use Elementor\Core\Responsive\Responsive;
use Elementor\Core\Settings\Manager as SettingsManager;
+use Elementor\TemplateLibrary\Source_Local;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
// Tell to WP Cache plugins do not cache this request.
Utils::do_not_cache();
- // Print the panel
- $this->print_panel_html();
+ $this->print_editor_template();
// From the action it's an empty string, from tests its `false`
if ( false !== $die ) {
* Include the wrapper template of the editor.
*
* @since 1.0.0
+ * @deprecated 2.2.0 Use `Editor::print_editor_template` instead
* @access public
*/
public function print_panel_html() {
+ _deprecated_function( __METHOD__, '2.2.0', 'Editor::print_editor_template' );
+
+ $this->print_editor_template();
+ }
+
+ /**
+ * Print Editor Template.
+ *
+ * Include the wrapper template of the editor.
+ *
+ * @since 2.2.0
+ * @access public
+ */
+ public function print_editor_template() {
include( 'editor-templates/editor-wrapper.php' );
}
[
'jquery-ui-position',
],
- '4.2.1',
+ '4.5.0',
true
);
'document' => $document->get_config(),
'autosave_interval' => AUTOSAVE_INTERVAL,
'current_user_can_publish' => $current_user_can_publish,
- 'elements_categories' => $plugin->elements_manager->get_categories(),
'controls' => $plugin->controls_manager->get_controls_data(),
'elements' => $plugin->elements_manager->get_element_types_config(),
'widgets' => $plugin->widgets_manager->get_widget_types_config(),
'docs_elementor_site' => 'https://go.elementor.com/docs/',
'help_the_content_url' => 'https://go.elementor.com/the-content-missing/',
'help_preview_error_url' => 'https://go.elementor.com/preview-not-loaded/',
+ 'help_right_click_url' => 'https://go.elementor.com/meet-right-click/',
'assets_url' => ELEMENTOR_ASSETS_URL,
'locked_user' => $locked_user,
'user' => [
'restrictions' => $plugin->role_manager->get_user_restrictions_array(),
'is_administrator' => current_user_can( 'manage_options' ),
+ 'introduction' => User::is_should_view_introduction(),
],
'is_rtl' => is_rtl(),
'locale' => get_locale(),
- 'viewportBreakpoints' => Responsive::get_breakpoints(),
'rich_editing_enabled' => filter_var( get_user_meta( get_current_user_id(), 'rich_editing', true ), FILTER_VALIDATE_BOOLEAN ),
'page_title_selector' => $page_title_selector,
'tinymceHasCustomConfig' => class_exists( 'Tinymce_Advanced' ),
'settings' => __( 'Settings', 'elementor' ),
// Elements.
- 'inner_section' => __( 'Columns', 'elementor' ),
+ 'inner_section' => __( 'Inner Section', 'elementor' ),
// Control Order.
'asc' => __( 'Ascending order', 'elementor' ),
'server_connection_lost' => __( 'Connection Lost', 'elementor' ),
'unknown_error' => __( 'Unknown Error', 'elementor' ),
+ // Context Menu
+ 'duplicate' => __( 'Duplicate', 'elementor' ),
+ 'copy' => __( 'Copy', 'elementor' ),
+ 'paste' => __( 'Paste', 'elementor' ),
+ 'copy_style' => __( 'Copy Style', 'elementor' ),
+ 'paste_style' => __( 'Paste Style', 'elementor' ),
+ 'reset_style' => __( 'Reset Style', 'elementor' ),
+ 'save_as_global' => __( 'Save as a Global', 'elementor' ),
+ 'save_as_block' => __( 'Save as Template', 'elementor' ),
+ 'new_column' => __( 'Add New Column', 'elementor' ),
+ 'copy_all_content' => __( 'Copy All Content', 'elementor' ),
+ 'delete_all_content' => __( 'Delete All Content', 'elementor' ),
+ 'navigator' => __( 'Navigator', 'elementor' ),
+
+ // Right Click Introduction
+ 'meet_right_click_header' => __( 'Meet Right Click', 'elementor' ),
+ 'meet_right_click_message' => __( 'Now you can access all editing actions using right click.', 'elementor' ),
+ 'got_it' => __( 'Got It', 'elementor' ),
+
// TODO: Remove.
'autosave' => __( 'Autosave', 'elementor' ),
'elementor_docs' => __( 'Documentation', 'elementor' ),
'elementor-icons',
ELEMENTOR_ASSETS_URL . 'lib/eicons/css/elementor-icons' . $suffix . '.css',
[],
- '3.3.0'
+ '3.8.0'
);
wp_register_style(
wp_enqueue_style( 'elementor-editor' );
+ if ( Responsive::has_custom_breakpoints() ) {
+ $breakpoints = Responsive::get_breakpoints();
+
+ wp_add_inline_style( 'elementor-editor', '.elementor-device-tablet #elementor-preview-responsive-wrapper { width: ' . $breakpoints['md'] . 'px; }' );
+ }
+
/**
* After editor enqueue styles.
*
public function __construct() {
add_action( 'admin_action_elementor', [ $this, 'init' ] );
add_action( 'template_redirect', [ $this, 'redirect_to_new_url' ] );
+
+ // Handle autocomplete feature for URL control.
+ add_filter( 'wp_link_query_args', [ $this, 'filter_wp_link_query_args' ] );
+ add_filter( 'wp_link_query', [ $this, 'filter_wp_link_query' ] );
+ }
+
+ public function filter_wp_link_query_args( $query ) {
+ $library_cpt_key = array_search( Source_Local::CPT, $query['post_type'], true );
+ if ( false !== $library_cpt_key ) {
+ unset( $query['post_type'][ $library_cpt_key ] );
+ }
+
+ return $query;
+ }
+
+ public function filter_wp_link_query( $results ) {
+ if ( isset( $_POST['editor'] ) && 'elementor' === $_POST['editor'] ) {
+ $post_type_object = get_post_type_object( 'post' );
+ $post_label = $post_type_object->labels->singular_name;
+
+ foreach ( $results as & $result ) {
+ if ( 'post' === get_post_type( $result['ID'] ) ) {
+ $result['info'] = $post_label;
+ }
+ }
+ }
+
+ return $results;
}
/**
'panel',
'panel-elements',
'repeater',
+ 'library-layout',
'templates',
+ 'navigator',
];
foreach ( $template_names as $template_name ) {
class Element_Column extends Element_Base {
/**
- * Column edit tools.
+ * Element edit tools.
*
- * Holds the column edit tools.
+ * Holds all the edit tools of the element. For example: delete, duplicate etc.
*
- * @since 1.0.0
* @access protected
* @static
*
- * @var array Column edit tools.
+ * @var array
*/
protected static $_edit_tools;
/**
- * Get default edit tools.
+ * Get column name.
*
- * Retrieve the column default edit tools. Used to set initial tools.
+ * Retrieve the column name.
*
* @since 1.0.0
- * @access protected
- * @static
+ * @access public
*
- * @return array Default column edit tools.
+ * @return string Column name.
*/
- protected static function get_default_edit_tools() {
- $column_label = __( 'Column', 'elementor' );
-
- return [
- 'duplicate' => [
- /* translators: %s: Column label */
- 'title' => sprintf( __( 'Duplicate %s', 'elementor' ), $column_label ),
- 'icon' => 'clone',
- ],
- 'add' => [
- /* translators: %s: Column label */
- 'title' => sprintf( __( 'Add %s', 'elementor' ), $column_label ),
- 'icon' => 'plus',
- ],
- 'remove' => [
- /* translators: %s: Column label */
- 'title' => sprintf( __( 'Remove %s', 'elementor' ), $column_label ),
- 'icon' => 'close',
- ],
- ];
+ public function get_name() {
+ return 'column';
}
/**
- * Get column name.
+ * Get element type.
*
- * Retrieve the column name.
+ * Retrieve the element type, in this case `column`.
*
- * @since 1.0.0
+ * @since 2.1.0
* @access public
+ * @static
*
- * @return string Column name.
+ * @return string The type.
*/
- public function get_name() {
+ public static function get_type() {
return 'column';
}
return 'eicon-column';
}
+ /**
+ * Get default edit tools.
+ *
+ * Retrieve the element default edit tools. Used to set initial tools.
+ *
+ * @since 2.1.0
+ * @access protected
+ * @static
+ *
+ * @return array Default edit tools.
+ */
+ protected static function get_default_edit_tools() {
+ $column_label = __( 'Column', 'elementor' );
+
+ $edit_tools = [
+ 'edit' => [
+ 'title' => __( 'Edit', 'elementor' ),
+ 'icon' => 'column',
+ ],
+ ];
+
+ if ( self::is_edit_buttons_enabled() ) {
+ $edit_tools += [
+ 'duplicate' => [
+ /* translators: %s: Column label */
+ 'title' => sprintf( __( 'Duplicate %s', 'elementor' ), $column_label ),
+ 'icon' => 'clone',
+ ],
+ 'add' => [
+ /* translators: %s: Column label */
+ 'title' => sprintf( __( 'Add %s', 'elementor' ), $column_label ),
+ 'icon' => 'plus',
+ ],
+ 'remove' => [
+ /* translators: %s: Column label */
+ 'title' => sprintf( __( 'Remove %s', 'elementor' ), $column_label ),
+ 'icon' => 'close',
+ ],
+ ];
+ }
+
+ return $edit_tools;
+ }
+
/**
* Register column controls.
*
]
);
+ $this->add_control(
+ '_title',
+ [
+ 'label' => __( 'Title', 'elementor' ),
+ 'type' => Controls_Manager::HIDDEN,
+ 'render_type' => 'none',
+ ]
+ );
+
$this->add_responsive_control(
'_inline_size',
[
'div',
'header',
'footer',
+ 'main',
'article',
'section',
'aside',
],
],
'render_type' => 'ui',
+ 'separator' => 'before',
]
);
]
);
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters',
+ 'selector' => '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay',
+ ]
+ );
+
+ $this->add_control(
+ 'overlay_blend_mode',
+ [
+ 'label' => __( 'Blend Mode', 'elementor' ),
+ 'type' => Controls_Manager::SELECT,
+ 'options' => [
+ '' => __( 'Normal', 'elementor' ),
+ 'multiply' => 'Multiply',
+ 'screen' => 'Screen',
+ 'overlay' => 'Overlay',
+ 'darken' => 'Darken',
+ 'lighten' => 'Lighten',
+ 'color-dodge' => 'Color Dodge',
+ 'saturation' => 'Saturation',
+ 'color' => 'Color',
+ 'luminosity' => 'Luminosity',
+ ],
+ 'selectors' => [
+ '{{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay' => 'mix-blend-mode: {{VALUE}}',
+ ],
+ ]
+ );
+
$this->end_controls_tab();
$this->start_controls_tab(
]
);
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters_hover',
+ 'selector' => '{{WRAPPER}}:hover > .elementor-element-populated > .elementor-background-overlay',
+ ]
+ );
+
$this->add_control(
'background_overlay_hover_transition',
[
],
],
'render_type' => 'ui',
+ 'separator' => 'before',
]
);
[
'label' => __( 'Transition Duration', 'elementor' ),
'type' => Controls_Manager::SLIDER,
+ 'separator' => 'before',
'default' => [
'size' => 0.3,
],
'name' => 'background_background',
'operator' => '!==',
'value' => '',
- ], [
+ ],
+ [
'name' => 'border_border',
'operator' => '!==',
'value' => '',
'label' => __( 'Z-Index', 'elementor' ),
'type' => Controls_Manager::NUMBER,
'min' => 0,
- 'placeholder' => 0,
'selectors' => [
'{{WRAPPER}}' => 'z-index: {{VALUE}};',
],
'default' => '',
'title' => __( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ),
'label_block' => false,
+ 'style_transfer' => false,
]
);
]
);
- $this->end_controls_section();
-
- $this->start_controls_section(
- 'section_responsive',
- [
- 'label' => __( 'Responsive', 'elementor' ),
- 'tab' => Controls_Manager::TAB_ADVANCED,
- ]
- );
-
+ // TODO: Backward comparability for deprecated controls
$this->add_control(
'screen_sm',
[
- 'label' => __( 'Mobile Width', 'elementor' ),
- 'type' => Controls_Manager::SELECT,
- 'default' => 'default',
- 'options' => [
- 'default' => __( 'Default', 'elementor' ),
- 'custom' => __( 'Custom', 'elementor' ),
- ],
- 'classes' => 'elementor-control-deprecated',
- 'description' => __( 'Deprecated: Mobile Width control is no longer supported. Please use the Column Width control in the Layout tab instead.', 'elementor' ),
+ 'type' => Controls_Manager::HIDDEN,
]
);
$this->add_control(
'screen_sm_width',
[
- 'label' => __( 'Column Width', 'elementor' ),
- 'type' => Controls_Manager::SELECT,
- 'options' => [
- '10' => '10%',
- '11' => '11%',
- '12' => '12%',
- '14' => '14%',
- '16' => '16%',
- '20' => '20%',
- '25' => '25%',
- '30' => '30%',
- '33' => '33%',
- '40' => '40%',
- '50' => '50%',
- '60' => '60%',
- '66' => '66%',
- '70' => '70%',
- '75' => '75%',
- '80' => '80%',
- '83' => '83%',
- '90' => '90%',
- '100' => '100%',
- ],
- 'default' => '100',
+ 'type' => Controls_Manager::HIDDEN,
'condition' => [
'screen_sm' => [ 'custom' ],
],
'prefix_class' => 'elementor-sm-',
]
);
+ // END Backward comparability
$this->end_controls_section();
?>
<div class="elementor-element-overlay">
<ul class="elementor-editor-element-settings elementor-editor-column-settings">
- <li class="elementor-editor-element-setting elementor-editor-element-trigger" title="<?php echo esc_attr( sprintf( __( 'Edit %s', 'elementor' ), __( 'Column', 'elementor' ) ) ); ?>">
- <i class="eicon-column" aria-hidden="true"></i>
- <span class="elementor-screen-only"><?php printf( __( 'Edit %s', 'elementor' ), __( 'Column', 'elementor' ) ); ?></span>
- </li>
<?php foreach ( self::get_edit_tools() as $edit_tool_name => $edit_tool ) : ?>
<li class="elementor-editor-element-setting elementor-editor-element-<?php echo $edit_tool_name; ?>" title="<?php echo $edit_tool['title']; ?>">
<i class="eicon-<?php echo $edit_tool['icon']; ?>" aria-hidden="true"></i>
* Retrieve the fields from the current repeater control.
*
* @since 1.5.0
+ * @deprecated 2.1.0 Use `Repeater::get_controls()` instead.
* @access public
*
* @return array Repeater fields.
private static $presets = [];
/**
- * Get default edit tools.
+ * Get element type.
*
- * Retrieve the section default edit tools. Used to set initial tools.
+ * Retrieve the element type, in this case `section`.
*
- * @since 1.0.0
- * @access protected
+ * @since 2.1.0
+ * @access public
* @static
*
- * @return array Default section edit tools.
+ * @return string The type.
*/
- protected static function get_default_edit_tools() {
- $section_label = __( 'Section', 'elementor' );
-
- return [
- 'duplicate' => [
- /* translators: %s: Section label */
- 'title' => sprintf( __( 'Duplicate %s', 'elementor' ), $section_label ),
- 'icon' => 'clone',
- ],
- 'add' => [
- /* translators: %s: Section label */
- 'title' => sprintf( __( 'Add %s', 'elementor' ), $section_label ),
- 'icon' => 'plus',
- ],
- 'save' => [
- /* translators: %s: Section label */
- 'title' => sprintf( __( 'Save %s', 'elementor' ), $section_label ),
- 'icon' => 'save',
- ],
- 'remove' => [
- /* translators: %s: Section label */
- 'title' => sprintf( __( 'Remove %s', 'elementor' ), $section_label ),
- 'icon' => 'close',
- ],
- ];
+ public static function get_type() {
+ return 'section';
}
/**
}
}
+ /**
+ * Get default edit tools.
+ *
+ * Retrieve the section default edit tools. Used to set initial tools.
+ *
+ * @since 1.0.0
+ * @access protected
+ * @static
+ *
+ * @return array Default section edit tools.
+ */
+ protected static function get_default_edit_tools() {
+ $section_label = __( 'Section', 'elementor' );
+
+ $edit_tools = [
+ 'add' => [
+ /* translators: %s: Section label */
+ 'title' => sprintf( __( 'Add %s', 'elementor' ), $section_label ),
+ 'icon' => 'plus',
+ ],
+ 'edit' => [
+ /* translators: %s: Section label */
+ 'title' => sprintf( __( 'Edit %s', 'elementor' ), $section_label ),
+ 'icon' => 'handle',
+ ],
+ ];
+
+ if ( self::is_edit_buttons_enabled() ) {
+ $edit_tools += [
+ 'duplicate' => [
+ /* translators: %s: Section label */
+ 'title' => sprintf( __( 'Duplicate %s', 'elementor' ), $section_label ),
+ 'icon' => 'clone',
+ ],
+ ];
+ }
+
+ $edit_tools += [
+ 'remove' => [
+ /* translators: %s: Section label */
+ 'title' => sprintf( __( 'Delete %s', 'elementor' ), $section_label ),
+ 'icon' => 'close',
+ ],
+ ];
+
+ return $edit_tools;
+ }
+
/**
* Get initial config.
*
]
);
+ $this->add_control(
+ '_title',
+ [
+ 'label' => __( 'Title', 'elementor' ),
+ 'type' => Controls_Manager::HIDDEN,
+ 'render_type' => 'none',
+ ]
+ );
+
$this->add_control(
'stretch_section',
[
'default' => '',
'return_value' => 'section-stretched',
'prefix_class' => 'elementor-',
- 'render_type' => 'template',
'hide_in_inner' => true,
'description' => __( 'Stretch the section to the full width of the page using JS.', 'elementor' ) . sprintf( ' <a href="%1$s" target="_blank">%2$s</a>', 'https://go.elementor.com/stretch-section/', __( 'Learn more.', 'elementor' ) ),
+ 'render_type' => 'none',
+ 'frontend_available' => true,
]
);
'size_units' => [ 'px', 'vh' ],
'selectors' => [
'{{WRAPPER}} > .elementor-container' => 'min-height: {{SIZE}}{{UNIT}};',
+ '{{WRAPPER}} > .elementor-container:after' => 'content: ""; min-height: inherit;', // Hack for IE11
],
'condition' => [
'height' => [ 'min-height' ],
'div',
'header',
'footer',
+ 'main',
'article',
'section',
'aside',
'label' => __( 'HTML Tag', 'elementor' ),
'type' => Controls_Manager::SELECT,
'options' => $options,
+ 'separator' => 'before',
]
);
'video_link' => [
'frontend_available' => true,
],
+ 'video_start' => [
+ 'frontend_available' => true,
+ ],
+ 'video_end' => [
+ 'frontend_available' => true,
+ ],
],
]
);
],
],
'render_type' => 'ui',
+ 'separator' => 'before',
]
);
]
);
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters',
+ 'selector' => '{{WRAPPER}} .elementor-background-overlay',
+ ]
+ );
+
+ $this->add_control(
+ 'overlay_blend_mode',
+ [
+ 'label' => __( 'Blend Mode', 'elementor' ),
+ 'type' => Controls_Manager::SELECT,
+ 'options' => [
+ '' => __( 'Normal', 'elementor' ),
+ 'multiply' => 'Multiply',
+ 'screen' => 'Screen',
+ 'overlay' => 'Overlay',
+ 'darken' => 'Darken',
+ 'lighten' => 'Lighten',
+ 'color-dodge' => 'Color Dodge',
+ 'saturation' => 'Saturation',
+ 'color' => 'Color',
+ 'luminosity' => 'Luminosity',
+ ],
+ 'selectors' => [
+ '{{WRAPPER}} > .elementor-background-overlay' => 'mix-blend-mode: {{VALUE}}',
+ ],
+ ]
+ );
+
$this->end_controls_tab();
$this->start_controls_tab(
]
);
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters_hover',
+ 'selector' => '{{WRAPPER}}:hover > .elementor-background-overlay',
+ ]
+ );
+
$this->add_control(
'background_overlay_hover_transition',
[
],
],
'render_type' => 'ui',
+ 'separator' => 'before',
]
);
[
'label' => __( 'Transition Duration', 'elementor' ),
'type' => Controls_Manager::SLIDER,
+ 'separator' => 'before',
'default' => [
'size' => 0.3,
],
'name' => 'background_background',
'operator' => '!==',
'value' => '',
- ], [
+ ],
+ [
'name' => 'border_border',
'operator' => '!==',
'value' => '',
[
'label' => __( 'Width', 'elementor' ),
'type' => Controls_Manager::SLIDER,
- 'units' => [ '%' ],
'default' => [
'unit' => '%',
],
"shape_divider_$side" => array_keys( Shapes::filter_shapes( 'has_flip' ) ),
],
'selectors' => [
- "{{WRAPPER}} > .elementor-shape-$side .elementor-shape-fill" => 'transform: rotateY(180deg)',
+ "{{WRAPPER}} > .elementor-shape-$side svg" => 'transform: translateX(-50%) rotateY(180deg)',
],
]
);
'label' => __( 'Z-Index', 'elementor' ),
'type' => Controls_Manager::NUMBER,
'min' => 0,
- 'placeholder' => 0,
'selectors' => [
'{{WRAPPER}}' => 'z-index: {{VALUE}};',
],
'default' => '',
'title' => __( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ),
'label_block' => false,
+ 'style_transfer' => false,
]
);
]
);
+ $this->add_control(
+ 'reverse_order_tablet',
+ [
+ 'label' => __( 'Reverse Columns', 'elementor' ) . ' (' . __( 'Tablet', 'elementor' ) . ')',
+ 'type' => Controls_Manager::SWITCHER,
+ 'default' => '',
+ 'prefix_class' => 'elementor-',
+ 'return_value' => 'reverse-tablet',
+ ]
+ );
+
$this->add_control(
'reverse_order_mobile',
[
- 'label' => __( 'Reverse Columns', 'elementor' ),
+ 'label' => __( 'Reverse Columns', 'elementor' ) . ' (' . __( 'Mobile', 'elementor' ) . ')',
'type' => Controls_Manager::SWITCHER,
'default' => '',
'prefix_class' => 'elementor-',
'return_value' => 'reverse-mobile',
- 'description' => __( 'Reverse column order - When on mobile, the column order is reversed, so the last column appears on top and vice versa.', 'elementor' ),
]
);
* @access protected
*/
protected function render_edit_tools() {
- /* translators: %s: Section label */
- $edit_title = sprintf( __( 'Edit %s', 'elementor' ), __( 'Section', 'elementor' ) );
?>
<div class="elementor-element-overlay">
<ul class="elementor-editor-element-settings elementor-editor-section-settings">
- <li class="elementor-editor-element-setting elementor-editor-element-trigger elementor-active" title="<?php echo esc_attr( $edit_title ); ?>">
- <i class="eicon-section" aria-hidden="true"></i>
- <span class="elementor-screen-only"><?php echo esc_html( $edit_title ); ?></span>
- </li>
<?php foreach ( self::get_edit_tools() as $edit_tool_name => $edit_tool ) : ?>
<?php if ( 'add' === $edit_tool_name ) : ?>
<# if ( ! isInner ) { #>
*/
protected function _content_template() {
?>
- <div class="elementor-background-video-container elementor-hidden-phone">
- <div class="elementor-background-video-embed"></div>
- <video class="elementor-background-video-hosted" autoplay loop muted></video>
- </div>
- <div class="elementor-background-video-fallback"></div>
+ <# if ( settings.background_video_link ) { #>
+ <div class="elementor-background-video-container elementor-hidden-phone">
+ <div class="elementor-background-video-embed"></div>
+ <video class="elementor-background-video-hosted" autoplay loop muted></video>
+ </div>
+ <# } #>
<div class="elementor-background-overlay"></div>
<div class="elementor-shape elementor-shape-top"></div>
<div class="elementor-shape elementor-shape-bottom"></div>
<video class="elementor-background-video-hosted elementor-html5-video" autoplay loop muted></video>
<?php endif; ?>
</div>
- <?php
+ <?php
endif;
endif;
in_array( $settings['background_overlay_hover_background'], [ 'classic', 'gradient' ], true );
if ( $has_background_overlay ) :
- ?>
+ ?>
<div class="elementor-background-overlay"></div>
- <?php
+ <?php
endif;
if ( $settings['shape_divider_top'] ) {
* @var array Provider URL structure regex.
*/
private static $provider_match_masks = [
- 'youtube' => '/^(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube(?:-nocookie)?\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^\?&\"\'>]+)/',
- 'vimeo' => '/(?:https?:\/\/)?(?:www\.)?(?:player\.)?vimeo\.com\/(?:[a-z]*\/)*([0-9]{6,11})[?]?.*/',
+ 'youtube' => '/^.*(?:youtu\.be\/|youtube(?:-nocookie)?\.com\/(?:(?:watch)?\?(?:.*&)?vi?=|(?:embed|v|vi|user)\/))([^\?&\"\'>]+)/',
+ 'vimeo' => '/^.*vimeo\.com\/(?:[a-z]*\/)*([0-9]{6,11})[?]?.*/',
+ 'dailymotion' => '/^.*dailymotion.com\/(?:video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/',
];
/**
*/
private static $embed_patterns = [
'youtube' => 'https://www.youtube{NO_COOKIE}.com/embed/{VIDEO_ID}?feature=oembed',
- 'vimeo' => 'https://player.vimeo.com/video/{VIDEO_ID}',
+ 'vimeo' => 'https://player.vimeo.com/video/{VIDEO_ID}#t={TIME}',
+ 'dailymotion' => 'https://dailymotion.com/embed/video/{VIDEO_ID}',
];
/**
if ( 'youtube' === $video_properties['provider'] ) {
$replacements['{NO_COOKIE}'] = ! empty( $options['privacy'] ) ? '-nocookie' : '';
+ } elseif ( 'vimeo' === $video_properties['provider'] ) {
+ $time_text = '';
+
+ if ( ! empty( $options['start'] ) ) {
+ $time_text = date( 'H\hi\ms\s', $options['start'] );
+ }
+
+ $replacements['{TIME}'] = $time_text;
}
$embed_pattern = str_replace( array_keys( $replacements ), $replacements, $embed_pattern );
* @return string The embed HTML.
*/
public static function get_embed_html( $video_url, array $embed_url_params = [], array $options = [], array $frame_attributes = [] ) {
- $video_embed_url = self::get_embed_url( $video_url, $embed_url_params, $options );
+ $default_frame_attributes = [
+ 'class' => 'elementor-video-iframe',
+ 'allowfullscreen',
+ ];
+ $video_embed_url = self::get_embed_url( $video_url, $embed_url_params, $options );
if ( ! $video_embed_url ) {
return null;
}
-
- $default_frame_attributes = [
- 'src' => $video_embed_url,
- 'allowfullscreen',
- ];
+ if ( ! $options['lazy_load'] ) {
+ $default_frame_attributes['src'] = $video_embed_url;
+ } else {
+ $default_frame_attributes['data-lazy-load'] = $video_embed_url;
+ }
$frame_attributes = array_merge( $default_frame_attributes, $frame_attributes );
namespace Elementor;
use Elementor\Core\Base\Document;
+use Elementor\Core\Responsive\Files\Frontend as FrontendFile;
+use Elementor\Core\Files\CSS\Global_CSS;
+use Elementor\Core\Files\CSS\Post as Post_CSS;
+use Elementor\Core\Files\CSS\Post_Preview;
+use Elementor\Core\Responsive\Responsive;
use Elementor\Core\Settings\Manager as SettingsManager;
if ( ! defined( 'ABSPATH' ) ) {
*/
private $registered_fonts = [];
- /**
- * Whether the front end mode is active.
- *
- * Used to determine whether we are in front end mode.
- *
- * @since 1.0.0
- * @access private
- *
- * @var bool Whether the front end mode is active. Default is false.
- */
- private $_is_frontend_mode = false;
-
/**
* Whether the page is using Elementor.
*
*/
private $admin_bar_edit_documents = [];
+ /**
+ * @var string[]
+ */
+ private $body_classes = [
+ 'elementor-default',
+ ];
+
/**
* Init.
*
}
$this->post_id = get_the_ID();
- $this->_is_frontend_mode = true;
if ( is_singular() && Plugin::$instance->db->is_built_with_elementor( $this->post_id ) ) {
add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_styles' ] );
}
/**
- * Print elements.
- *
- * Used to generate the element final HTML on the frontend.
- *
- * @since 1.0.0
- * @access protected
- *
- * @param array $elements_data Element data.
+ * @param string|array $class
*/
- protected function _print_elements( $elements_data ) {
- foreach ( $elements_data as $element_data ) {
- $element = Plugin::$instance->elements_manager->create_element_instance( $element_data );
-
- if ( ! $element ) {
- continue;
- }
-
- $element->print_element();
+ public function add_body_class( $class ) {
+ if ( is_array( $class ) ) {
+ $this->body_classes = array_merge( $this->body_classes, $class );
+ } else {
+ $this->body_classes[] = $class;
}
}
* @return array Body tag classes.
*/
public function body_class( $classes = [] ) {
- $classes[] = 'elementor-default';
+ $classes = array_merge( $classes, $this->body_classes );
$id = get_the_ID();
[
'jquery',
],
- '3.4.2',
+ '4.4.3',
true
);
[
'jquery-ui-position',
],
- '4.2.1',
+ '4.5.0',
true
);
'elementor-icons',
ELEMENTOR_ASSETS_URL . 'lib/eicons/css/elementor-icons' . $suffix . '.css',
[],
- '3.3.0'
+ '3.8.0'
);
wp_register_style(
'4.1.4'
);
+ $frontend_file_name = 'frontend' . $direction_suffix . $suffix . '.css';
+
+ $has_custom_file = Responsive::has_custom_breakpoints();
+
+ if ( $has_custom_file ) {
+ $frontend_file = new FrontendFile( 'custom-' . $frontend_file_name, Responsive::get_stylesheet_templates_path() . $frontend_file_name );
+
+ $time = $frontend_file->get_meta( 'time' );
+
+ if ( ! $time ) {
+ $frontend_file->update();
+ }
+
+ $frontend_file_url = $frontend_file->get_url();
+ } else {
+ $frontend_file_url = ELEMENTOR_ASSETS_URL . 'css/' . $frontend_file_name;
+ }
+
wp_register_style(
'elementor-frontend',
- ELEMENTOR_ASSETS_URL . 'css/frontend' . $direction_suffix . $suffix . '.css',
+ $frontend_file_url,
[],
- ELEMENTOR_VERSION
+ $has_custom_file ? null : ELEMENTOR_VERSION
);
/**
wp_enqueue_script( 'elementor-frontend' );
+ $is_preview_mode = Plugin::$instance->preview->is_preview_mode( Plugin::$instance->preview->get_post_id() );
+
$elementor_frontend_config = [
- 'isEditMode' => Plugin::$instance->preview->is_preview_mode(),
+ 'isEditMode' => $is_preview_mode,
'is_rtl' => is_rtl(),
+ 'breakpoints' => Responsive::get_breakpoints(),
'urls' => [
'assets' => ELEMENTOR_ASSETS_URL,
],
];
}
- if ( Plugin::$instance->preview->is_preview_mode() ) {
+ if ( $is_preview_mode ) {
$elements_manager = Plugin::$instance->elements_manager;
$elements_frontend_keys = [
if ( ! Plugin::$instance->preview->is_preview_mode() ) {
$this->parse_global_css_code();
- $css_file = new Post_CSS_File( get_the_ID() );
+ $css_file = new Post_CSS( get_the_ID() );
$css_file->enqueue();
}
}
$fonts_url .= '&subset=' . $subsets[ $locale ];
}
- wp_enqueue_style( 'google-fonts-' . $google_fonts_index, $fonts_url );
+ wp_enqueue_style( 'google-fonts-' . $google_fonts_index, $fonts_url ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
}
if ( ! empty( $google_fonts['early'] ) ) {
$font_url = sprintf( 'https://fonts.googleapis.com/earlyaccess/%s.css', strtolower( str_replace( ' ', '', $current_font ) ) );
- wp_enqueue_style( 'google-earlyaccess-' . $google_fonts_index, $font_url );
+ wp_enqueue_style( 'google-earlyaccess-' . $google_fonts_index, $font_url ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
}
}
* @access protected
*/
protected function parse_global_css_code() {
- $scheme_css_file = new Global_CSS_File();
+ $scheme_css_file = new Global_CSS( 'global.css' );
$scheme_css_file->enqueue();
}
public function apply_builder_in_content( $content ) {
$this->restore_content_filters();
- if ( ! $this->_is_frontend_mode || $this->_is_excerpt ) {
+ if ( Plugin::$instance->preview->is_preview_mode() || $this->_is_excerpt ) {
return $content;
}
if ( ! $this->_is_excerpt ) {
if ( $document->is_autosave() ) {
- $css_file = new Post_Preview_CSS( $document->get_post()->ID );
+ $css_file = new Post_Preview( $document->get_post()->ID );
} else {
- $css_file = new Post_CSS_File( $post_id );
+ $css_file = new Post_CSS( $post_id );
}
$css_file->enqueue();
$css_file->print_css();
}
- ?>
- <div class="<?php echo esc_attr( $document->get_container_classes() ); ?>">
- <div class="elementor-inner">
- <div class="elementor-section-wrap">
- <?php $this->_print_elements( $data ); ?>
- </div>
- </div>
- </div>
- <?php
+ $document->print_elements_with_wrapper( $data );
+
$content = ob_get_clean();
/**
*
* @param int $post_id The post ID.
*
+ * @param bool $with_css Optional. Whether to retrieve the content with CSS
+ * or not. Default is false.
+ *
* @return string The post content.
*/
- public function get_builder_content_for_display( $post_id ) {
+ public function get_builder_content_for_display( $post_id, $with_css = false ) {
if ( ! get_post( $post_id ) ) {
return '';
}
$is_edit_mode = $editor->is_edit_mode();
$editor->set_edit_mode( false );
- $content = $this->get_builder_content( $post_id, $is_edit_mode );
+ $with_css = $with_css ? true : $is_edit_mode;
+
+ $content = $this->get_builder_content( $post_id, $with_css );
// Restore edit mode state
Plugin::$instance->editor->set_edit_mode( $is_edit_mode );
return;
}
+ if ( 'maintenance' === self::get( 'mode' ) ) {
+ $protocol = wp_get_server_protocol();
+ header( "$protocol 503 Service Unavailable", true, 503 );
+ header( 'Content-Type: text/html; charset=utf-8' );
+ header( 'Retry-After: 600' );
+ }
+
// Setup global post for Elementor\frontend so `_has_elementor_in_page = true`.
$GLOBALS['post'] = get_post( self::get( 'template_id' ) ); // WPCS: override ok.
- add_filter( 'template_include', [ $this, 'template_include' ], 1 );
- }
-
- /**
- * Template include.
- *
- * Update the path of the current template before including it. Used to
- * change the "Maintenance Mode" path and the HTTP header data.
- *
- * Fired by `template_include` filter.
- *
- * @since 1.4.0
- * @access public
- *
- * @param string $template The path of the template to include.
- *
- * @return string Updated path of the template to include.
- */
- public function template_include( $template ) {
// Set the template as `$wp_query->current_object` for `wp_title` and etc.
query_posts( [
'p' => self::get( 'template_id' ),
'post_type' => Source_Local::CPT,
] );
-
- if ( 'maintenance' === self::get( 'mode' ) ) {
- $protocol = wp_get_server_protocol();
- header( "$protocol 503 Service Unavailable", true, 503 );
- header( 'Content-Type: text/html; charset=utf-8' );
- header( 'Retry-After: 600' );
- }
-
- return $template;
}
/**
$templates_options[ $template['template_id'] ] = $template['title'];
}
- $template_id = self::get( 'template_id' );
- $edit_url = '';
- if ( $template_id && get_post( $template_id ) ) {
- $edit_url = Utils::get_edit_link( $template_id );
- }
+ ob_start();
- $template_description = sprintf( ' <a target="_blank" class="elementor-edit-template" style="display: none" href="%1$s">%2$s</a>', $edit_url, __( 'Edit Template', 'elementor' ) );
+ $this->print_template_description();
- $template_description .= '<span class="elementor-maintenance-mode-error" style="display: none">' .
- __( 'To enable maintenance mode you have to set a template for the maintenance mode page.', 'elementor' ) .
- '<br>' .
- sprintf(
- /* translators: %s: Create page URL */
- __( 'Select one or go ahead and <a target="_blank" href="%s">create one</a> now.', 'elementor' ), admin_url( 'post-new.php?post_type=' . Source_Local::CPT )
- ) .
- '</span>';
+ $template_description = ob_get_clean();
$tools->add_tab(
'maintenance_mode', [
}
add_filter( 'body_class', [ $this, 'body_class' ] );
- add_action( 'template_redirect', [ $this, 'template_redirect' ], 1 );
+
+ // Priority = 11 that is *after* WP default filter `redirect_canonical` in order to avoid redirection loop.
+ add_action( 'template_redirect', [ $this, 'template_redirect' ], 11 );
+ }
+
+ /**
+ * Print Template Description
+ *
+ * Prints the template description
+ *
+ * @since 2.2.0
+ * @access private
+ */
+ private function print_template_description() {
+ $template_id = self::get( 'template_id' );
+
+ $edit_url = '';
+
+ if ( $template_id && get_post( $template_id ) ) {
+ $edit_url = Plugin::$instance->documents->get( $template_id )->get_edit_url();
+ }
+
+ ?>
+ <a target="_blank" class="elementor-edit-template" style="display: none" href="<?php echo $edit_url; ?>"><?php echo __( 'Edit Template', 'elementor' ); ?></a>
+ <div class="elementor-maintenance-mode-error"><?php echo __( 'To enable maintenance mode you have to set a template for the maintenance mode page.', 'elementor' ); ?></div>
+ <div class="elementor-maintenance-mode-error"><?php echo sprintf( __( 'Select one or go ahead and <a target="_blank" href="%s">create one</a> now.', 'elementor' ), admin_url( 'post-new.php?post_type=' . Source_Local::CPT ) ); ?></div>
+ <?php
}
}
* @access public
* @static
*/
- public static function activation() {
+ public static function activation( $network_wide ) {
wp_clear_scheduled_hook( 'elementor/tracker/send_event' );
wp_schedule_event( time(), 'daily', 'elementor/tracker/send_event' );
flush_rewrite_rules();
+
+ if ( is_multisite() && $network_wide ) {
+ return;
+ }
+
+ set_transient( 'elementor_activation_redirect', true, MINUTE_IN_SECONDS );
}
/**
register_uninstall_hook( ELEMENTOR_PLUGIN_BASE, [ __CLASS__, 'uninstall' ] );
}
}
-
-Maintenance::init();
self::TAB_LAYOUT => __( 'Layout', 'elementor' ),
self::TAB_SETTINGS => __( 'Settings', 'elementor' ),
];
-
- self::$tabs = Utils::apply_filters_deprecated( 'elementor/controls/get_available_tabs_controls', [ self::$tabs ], '1.6.0', '`' . __CLASS__ . '::add_tab( $tab_name, $tab_title )`' );
}
/**
$this->control_groups['typography'] = new Group_Control_Typography();
$this->control_groups['image-size'] = new Group_Control_Image_Size();
$this->control_groups['box-shadow'] = new Group_Control_Box_Shadow();
+ $this->control_groups['css-filter'] = new Group_Control_Css_Filter();
$this->control_groups['text-shadow'] = new Group_Control_Text_Shadow();
/**
foreach ( $this->get_controls() as $name => $control ) {
$controls_data[ $name ] = $control->get_settings();
-
- if ( $control instanceof Base_Data_Control ) {
- $controls_data[ $name ]['default_value'] = $control->get_default_value();
- }
}
return $controls_data;
'custom_css_pro',
[
'type' => self::RAW_HTML,
- 'raw' => '<div class="elementor-panel-nerd-box">' .
- '<i class="elementor-panel-nerd-box-icon eicon-hypster" aria-hidden="true"></i>
- <div class="elementor-panel-nerd-box-title">' .
+ 'raw' => '<div class="elementor-nerd-box">' .
+ '<i class="elementor-nerd-box-icon eicon-hypster" aria-hidden="true"></i>
+ <div class="elementor-nerd-box-title">' .
__( 'Meet Our Custom CSS', 'elementor' ) .
'</div>
- <div class="elementor-panel-nerd-box-message">' .
+ <div class="elementor-nerd-box-message">' .
__( 'Custom CSS lets you add CSS code to any widget, and see it render live right in the editor.', 'elementor' ) .
'</div>
- <div class="elementor-panel-nerd-box-message">' .
+ <div class="elementor-nerd-box-message">' .
__( 'This feature is only available on Elementor Pro.', 'elementor' ) .
'</div>
- <a class="elementor-panel-nerd-box-link elementor-button elementor-button-default elementor-go-pro" href="' . Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=panel-custom-css&utm_campaign=gopro&utm_medium=wp-dash' ) . '" target="_blank">' .
+ <a class="elementor-nerd-box-link elementor-button elementor-button-default elementor-go-pro" href="' . Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=panel-custom-css&utm_campaign=gopro&utm_medium=wp-dash' ) . '" target="_blank">' .
__( 'Go Pro', 'elementor' ) .
'</a>
</div>',
+++ /dev/null
-<?php
-namespace Elementor;
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit; // Exit if accessed directly.
-}
-
-/**
- * Elementor posts CSS manager.
- *
- * Elementor posts CSS manager handler class is responsible for creating custom
- * CSS file for posts.
- *
- * @since 1.2.0
- */
-class Posts_CSS_Manager {
-
- /**
- * Posts CSS manager constructor.
- *
- * Initializing the Elementor posts CSS manager.
- *
- * @since 1.2.0
- * @access public
- */
- public function __construct() {
- $this->init();
- $this->register_actions();
- }
-
- /**
- * Init.
- *
- * Initialize Elementor posts CSS manager and create the css directory, if
- * it doesn't exist.
- *
- * @since 1.2.0
- * @access public
- */
- public function init() {
- $wp_upload_dir = wp_upload_dir( null, false );
-
- $css_path = $wp_upload_dir['basedir'] . CSS_File::FILE_BASE_DIR;
-
- // Create the css directory, if it doesn't exist.
- if ( ! is_dir( $css_path ) ) {
- wp_mkdir_p( $css_path );
- }
- }
-
- /**
- * On post delete.
- *
- * Delete post CSS immediately after a post is deleted from the database.
- *
- * Fired by `deleted_post` action.
- *
- * @since 1.2.0
- * @access public
- *
- * @param string $post_id Post ID.
- */
- public function on_delete_post( $post_id ) {
- if ( ! Utils::is_post_type_support( $post_id ) ) {
- return;
- }
-
- $css_file = new Post_CSS_File( $post_id );
-
- $css_file->delete();
- }
-
- /**
- * On export post meta.
- *
- * When exporting data using WXR, skip post CSS file meta key. This way the
- * export won't contain the post CSS file data used by Elementor.
- *
- * Fired by `wxr_export_skip_postmeta` filter.
- *
- * @since 1.2.0
- * @access public
- *
- * @param bool $skip Whether to skip the current post meta.
- * @param string $meta_key Current meta key.
- *
- * @return bool Whether to skip the post CSS meta.
- */
- public function on_export_post_meta( $skip, $meta_key ) {
- if ( Post_CSS_File::META_KEY === $meta_key ) {
- $skip = true;
- }
-
- return $skip;
- }
-
- /**
- * Clear cache.
- *
- * Delete post meta containing the post CSS file data. And delete the actual
- * CSS files from the upload directory.
- *
- * @since 1.2.0
- * @access public
- *
- * @return array Errors, if had files could not be deleted.
- */
- public function clear_cache() {
- $errors = [];
-
- // Delete post meta.
- global $wpdb;
-
- $wpdb->delete(
- $wpdb->postmeta, [
- 'meta_key' => Post_CSS_File::META_KEY,
- ]
- );
-
- $wpdb->delete(
- $wpdb->options, [
- 'option_name' => Global_CSS_File::META_KEY,
- ]
- );
-
- // Delete files.
- $wp_upload_dir = wp_upload_dir( null, false );
-
- $path = sprintf( '%s%s%s*', $wp_upload_dir['basedir'], CSS_File::FILE_BASE_DIR, '/' );
-
- foreach ( glob( $path ) as $file ) {
- $deleted = unlink( $file );
-
- if ( ! $deleted ) {
- $errors['files'] = 'Cannot delete files cache';
- }
- }
-
- /**
- * Elementor clear CSS files.
- *
- * Fires after Elementor clears CSS files
- *
- * @since 2.0.8
- */
- do_action( 'elementor/css-file/clear_cache' );
-
- return $errors;
- }
-
- /**
- * Register actions.
- *
- * Register filters and actions for the posts CSS manager.
- *
- * @since 1.2.0
- * @access private
- */
- private function register_actions() {
- add_action( 'deleted_post', [ $this, 'on_delete_post' ] );
- add_filter( 'wxr_export_skip_postmeta', [ $this, 'on_export_post_meta' ], 10, 2 );
- }
-}
*
* @param array $return_data The returned data. Default is an empty array.
*/
- $return_data = Utils::apply_filters_deprecated( 'elementor/ajax_save_builder/return_data', [ $return_data, $request['editor_post_id'] ], '2.0.0', 'elementor/documents/ajax_save/return_data' );
+ $return_data = apply_filters_deprecated( 'elementor/ajax_save_builder/return_data', [ $return_data, $request['editor_post_id'] ], '2.0.0', 'elementor/documents/ajax_save/return_data' );
return $return_data;
}
'icon' => 'eicon-font',
],
'pro-elements' => [
- 'title' => __( 'Pro Elements', 'elementor' ),
- 'icon' => 'font',
+ 'title' => __( 'Pro', 'elementor' ),
+ ],
+ 'general' => [
+ 'title' => __( 'General', 'elementor' ),
+ 'icon' => 'eicon-font',
],
'theme-elements' => [
- 'title' => __( 'Theme Elements', 'elementor' ),
- 'icon' => 'font',
+ 'title' => __( 'Site', 'elementor' ),
+ 'active' => false,
],
'woocommerce-elements' => [
- 'title' => __( 'WooCommerce Elements', 'elementor' ),
- 'icon' => 'font',
- ],
- 'general' => [
- 'title' => __( 'General Elements', 'elementor' ),
- 'icon' => 'eicon-font',
+ 'title' => __( 'WooCommerce', 'elementor' ),
+ 'active' => false,
],
];
$this->categories['wordpress'] = [
'title' => __( 'WordPress', 'elementor' ),
'icon' => 'eicon-wordpress',
+ 'active' => false,
];
}
* @access public
*/
public function __construct() {
- add_action( 'wp_ajax_elementor_get_image_details', [ $this, 'get_image_details' ] );
add_action( 'wp_ajax_elementor_get_images_details', [ $this, 'get_images_details' ] );
}
}
$config = [];
foreach ( $this->get_widget_types() as $widget_key => $widget ) {
- if ( ! $widget->show_in_panel() ) {
- continue;
- }
-
$config[ $widget_key ] = $widget->get_config();
}
namespace Elementor;
use Elementor\Core\Ajax_Manager;
+use Elementor\Core\Debug\Inspector;
use Elementor\Core\Documents_Manager;
+use Elementor\Core\Files\Manager as Files_Manager;
use Elementor\Core\Modules_Manager;
use Elementor\Debug\Debug;
use Elementor\Core\Settings\Manager as Settings_Manager;
public $skins_manager;
/**
- * Posts CSS manager.
+ * Files Manager.
*
- * Holds the posts CSS manager.
+ * Holds the files manager.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @var Files_Manager
+ */
+ public $files_manager;
+
+ /**
+ * Files Manager.
+ *
+ * Holds the files manager.
*
* @since 1.0.0
* @access public
+ * @deprecated 2.1.0 Use `Plugin::$files_manager` instead
*
- * @var Posts_CSS_Manager
+ * @var Files_Manager
*/
public $posts_css_manager;
*/
public $beta_testers;
+ /**
+ * @var Inspector
+ * @deprecated 2.1.2 Use $inspector.
+ */
+ public $debugger;
+
+ /**
+ * @var Inspector
+ */
+ public $inspector;
+
/**
* Clone.
*
* @access private
*/
private function init_components() {
+ $this->inspector = new Inspector();
+ $this->debugger = $this->inspector;
+
// Allow all components to use AJAX.
$this->ajax = new Ajax_Manager();
$this->elements_manager = new Elements_Manager();
$this->widgets_manager = new Widgets_Manager();
$this->skins_manager = new Skins_Manager();
- $this->posts_css_manager = new Posts_CSS_Manager();
+ $this->files_manager = new Files_Manager();
+ /*
+ * @TODO: Remove deprecated alias
+ */
+ $this->posts_css_manager = $this->files_manager;
$this->settings = new Settings();
$this->editor = new Editor();
$this->preview = new Preview();
$this->heartbeat = new Heartbeat();
$this->wordpress_widgets_manager = new WordPress_Widgets_Manager();
$this->system_info = new System_Info\Main();
- $this->admin = new Admin();
+ $this->admin = new Core\Admin\Admin();
$this->tools = new Tools();
$this->beta_testers = new Beta_Testers();
private function __construct() {
$this->register_autoloader();
+ Maintenance::init();
Compatibility::register_actions();
add_action( 'init', [ $this, 'init' ], 0 );
$this->post_id = get_the_ID();
+ // Don't redirect to permalink.
+ remove_action( 'template_redirect', 'redirect_canonical' );
+
// Compatibility with Yoast SEO plugin when 'Removes unneeded query variables from the URL' enabled.
// TODO: Move this code to `includes/compatibility.php`.
if ( class_exists( 'WPSEO_Frontend' ) ) {
'elementor-inline-editor',
ELEMENTOR_ASSETS_URL . 'lib/inline-editor/js/inline-editor' . $suffix . '.js',
[],
- '',
+ ELEMENTOR_VERSION,
true
);
+++ /dev/null
-<?php
-namespace Elementor;
-
-if ( ! defined( 'ABSPATH' ) ) {
- exit; // Exit if accessed directly.
-}
-
-/**
- * Elementor responsive.
- *
- * Elementor responsive handler class is responsible for setting up Elementor
- * responsive break points.
- *
- * @since 1.0.0
- */
-class Responsive {
-
- /**
- * The Elementor break point prefix.
- */
- const BREAKPOINT_OPTION_PREFIX = 'elementor_viewport_';
-
- /**
- * Default break points.
- *
- * Holds the default responsive break points.
- *
- * @since 1.0.0
- * @access private
- * @static
- *
- * @var array Default break points.
- */
- private static $_default_breakpoints = [
- 'xs' => 0,
- 'sm' => 480,
- 'md' => 768,
- 'lg' => 1025,
- ];
-
- /**
- * Editable break point keys.
- *
- * Holds the editable break point keys.
- *
- * @since 1.0.0
- * @access private
- * @static
- *
- * @var array Editable break point keys.
- */
- private static $_editable_breakpoints_keys = [
- 'md',
- 'lg',
- ];
-
- /**
- * Get default break points.
- *
- * Retrieve the default responsive break points.
- *
- * @since 1.0.0
- * @access public
- * @static
- *
- * @return array Default break points.
- */
- public static function get_default_breakpoints() {
- return self::$_default_breakpoints;
- }
-
- /**
- * Get editable break points.
- *
- * Retrieve the editable break points.
- *
- * @since 1.0.0
- * @access public
- * @static
- *
- * @return array Editable break points.
- */
- public static function get_editable_breakpoints() {
- return array_intersect_key( self::get_breakpoints(), array_flip( self::$_editable_breakpoints_keys ) );
- }
-
- /**
- * Get break points.
- *
- * Retrieve the responsive break points.
- *
- * @since 1.0.0
- * @access public
- * @static
- *
- * @return array Responsive break points.
- */
- public static function get_breakpoints() {
- return array_reduce(
- array_keys( self::$_default_breakpoints ), function( $new_array, $breakpoint_key ) {
- if ( ! in_array( $breakpoint_key, self::$_editable_breakpoints_keys ) ) {
- $new_array[ $breakpoint_key ] = self::$_default_breakpoints[ $breakpoint_key ];
- } else {
- $saved_option = get_option( self::BREAKPOINT_OPTION_PREFIX . $breakpoint_key );
-
- $new_array[ $breakpoint_key ] = $saved_option ? (int) $saved_option : self::$_default_breakpoints[ $breakpoint_key ];
- }
-
- return $new_array;
- }, []
- );
- }
-}
$defaults = [
'type' => '',
- 'placeholder' => '',
- 'classes' => [],
+ 'attributes' => [],
'std' => '',
'desc' => '',
];
* @param array $field Field data.
*/
private static function text( array $field ) {
- if ( empty( $field['classes'] ) ) {
- $field['classes'] = [ 'regular-text' ];
+ $attributes = [];
+
+ if ( empty( $field['attributes']['class'] ) ) {
+ $field['attributes']['class'] = 'regular-text';
+ }
+
+ foreach ( $field['attributes'] as $attribute_key => $attribute_values ) {
+ $attributes[] = sprintf( '%1$s="%2$s"', $attribute_key, esc_attr( $attribute_values ) );
}
+
+ $attributes = implode( ' ', $attributes );
?>
- <input type="<?php echo esc_attr( $field['type'] ); ?>" class="<?php echo esc_attr( implode( ' ', $field['classes'] ) ); ?>" id="<?php echo esc_attr( $field['id'] ); ?>" name="<?php echo esc_attr( $field['id'] ); ?>" value="<?php echo esc_attr( get_option( $field['id'], $field['std'] ) ); ?>"<?php echo ! empty( $field['placeholder'] ) ? ' placeholder="' . esc_attr( $field['placeholder'] ) . '"' : ''; ?> />
+ <input type="<?php echo esc_attr( $field['type'] ); ?>" id="<?php echo esc_attr( $field['id'] ); ?>" name="<?php echo esc_attr( $field['id'] ); ?>" value="<?php echo esc_attr( get_option( $field['id'], $field['std'] ) ); ?>" <?php echo $attributes; ?>/>
<?php
if ( ! empty( $field['sub_desc'] ) ) :
echo $field['sub_desc'];
?>
<?php if ( ! empty( $field['desc'] ) ) : ?>
<p class="description"><?php echo $field['desc']; ?></p>
- <?php
+ <?php
endif;
}
</label>
<?php if ( ! empty( $field['desc'] ) ) : ?>
<p class="description"><?php echo $field['desc']; ?></p>
- <?php
+ <?php
endif;
}
}
foreach ( $field['options'] as $option_key => $option_value ) :
- ?>
+ ?>
<label>
<input type="checkbox" name="<?php echo $field['id']; ?>[]" value="<?php echo $option_key; ?>"<?php checked( in_array( $option_key, $old_value ), true ); ?> />
<?php echo $option_value; ?>
<?php endforeach; ?>
<?php if ( ! empty( $field['desc'] ) ) : ?>
<p class="description"><?php echo $field['desc']; ?></p>
- <?php
+ <?php
endif;
}
<?php if ( ! empty( $field['desc'] ) ) : ?>
<p class="description"><?php echo $field['desc']; ?></p>
- <?php
+ <?php
endif;
}
*
* @return string Settings page URL.
*/
- public final static function get_url() {
+ final public static function get_url() {
return admin_url( 'admin.php?page=' . static::PAGE_ID );
}
* @access public
*/
public function __construct() {
- add_action( 'admin_init', [ $this, 'register_settings_fields' ] );
+ if ( ! empty( $_POST['option_page'] ) && static::PAGE_ID === $_POST['option_page'] ) {
+ add_action( 'admin_init', [ $this, 'register_settings_fields' ] );
+ }
}
/**
*
* @return array Settings page tabs, sections and fields.
*/
- public final function get_tabs() {
+ final public function get_tabs() {
$this->ensure_tabs();
return $this->tabs;
* @param string $tab_id Tab ID.
* @param array $tab_args Optional. Tab arguments. Default is an empty array.
*/
- public final function add_tab( $tab_id, array $tab_args = [] ) {
+ final public function add_tab( $tab_id, array $tab_args = [] ) {
$this->ensure_tabs();
if ( isset( $this->tabs[ $tab_id ] ) ) {
* @param array $section_args Optional. Section arguments. Default is an
* empty array.
*/
- public final function add_section( $tab_id, $section_id, array $section_args = [] ) {
+ final public function add_section( $tab_id, $section_id, array $section_args = [] ) {
$this->ensure_tabs();
if ( ! isset( $this->tabs[ $tab_id ] ) ) {
* @param string $field_id Field ID.
* @param array $field_args Field arguments.
*/
- public final function add_field( $tab_id, $section_id, $field_id, array $field_args ) {
+ final public function add_field( $tab_id, $section_id, $field_id, array $field_args ) {
$this->ensure_tabs();
if ( ! isset( $this->tabs[ $tab_id ] ) ) {
* @type array $field_args Field arguments.
* }
*/
- public final function add_fields( $tab_id, $section_id, array $fields ) {
+ final public function add_fields( $tab_id, $section_id, array $fields ) {
foreach ( $fields as $field_id => $field_args ) {
$this->add_field( $tab_id, $section_id, $field_id, $field_args );
}
* @since 1.5.0
* @access public
*/
- public final function register_settings_fields() {
+ final public function register_settings_fields() {
$controls_class_name = __NAMESPACE__ . '\Settings_Controls';
$tabs = $this->get_tabs();
* @access public
*/
public function display_settings_page() {
+ $this->register_settings_fields();
+
$tabs = $this->get_tabs();
?>
<div class="wrap">
<?php
namespace Elementor;
+use Elementor\Core\Responsive\Responsive;
use Elementor\Core\Settings\General\Manager as General_Settings_Manager;
use Elementor\Core\Settings\Manager;
* @access public
*/
public function register_knowledge_base_menu() {
+ add_submenu_page(
+ self::PAGE_ID,
+ '',
+ __( 'Getting Started', 'elementor' ),
+ 'manage_options',
+ 'elementor-getting-started',
+ [ $this, 'elementor_getting_started' ]
+ );
+
add_submenu_page(
self::PAGE_ID,
'',
}
}
+ /**
+ * Display settings page.
+ *
+ * Output the content for the getting started page.
+ *
+ * @since 2.2.0
+ * @access public
+ */
+ public function elementor_getting_started() {
+ if ( User::is_current_user_can_edit_post_type( 'page' ) ) {
+ $create_new_label = __( 'Create Your First Page', 'elementor' );
+ $create_new_cpt = 'page';
+ } elseif ( User::is_current_user_can_edit_post_type( 'post' ) ) {
+ $create_new_label = __( 'Create Your First Post', 'elementor' );
+ $create_new_cpt = 'post';
+ }
+
+ ?>
+ <div class="wrap">
+ <div class="e-getting-started">
+ <div class="e-getting-started__box postbox">
+ <div class="e-getting-started__header">
+ <div class="e-getting-started__title">
+ <div class="e-logo-wrapper"><i class="eicon-elementor"></i></div>
+
+ <?php echo __( 'Getting Started', 'elementor' ); ?>
+ </div>
+ <a class="e-getting-started__skip" href="<?php echo esc_url( admin_url() ); ?>">
+ <i class="eicon-close" aria-hidden="true" title="<?php esc_attr_e( 'Skip', 'elementor' ); ?>"></i>
+ <span class="elementor-screen-only"><?php echo __( 'Skip', 'elementor' ); ?></span>
+ </a>
+ </div>
+ <div class="e-getting-started__content">
+ <div class="e-getting-started__content--narrow">
+ <h2><?php echo __( 'Welcome to Elementor', 'elementor' ); ?></h2>
+ <p><?php echo __( 'We recommend you watch this 2 minute getting started video, and then try the editor yourself by dragging and dropping elements to create your first page.', 'elementor' ); ?></p>
+ </div>
+
+ <div class="e-getting-started__video">
+ <iframe width="620" height="350" src="https://www.youtube-nocookie.com/embed/-TPpwuB6dnI?rel=0&controls=1&showinfo=0&modestbranding=1" frameborder="0" allowfullscreen></iframe>
+ </div>
+
+ <div class="e-getting-started__actions e-getting-started__content--narrow">
+ <?php if ( ! empty( $create_new_cpt ) ) : ?>
+ <a href="<?php echo esc_url( Utils::get_create_new_post_url( $create_new_cpt ) ); ?>" class="button button-primary button-hero"><?php echo esc_html( $create_new_label ); ?></a>
+ <?php endif; ?>
+
+ <a href="https://go.elementor.com/getting-started/" target="_blank" class="button button-secondary button-hero"><?php echo __( 'Read the Full Article', 'elementor' ); ?></a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div><!-- /.wrap -->
+ <?php
+ }
+
/**
* Display settings page.
*
<i class="eicon-nerd-chuckle"></i>
<h2><?php echo __( 'Add Your Custom Fonts', 'elementor' ); ?></h2>
<p><?php echo __( 'Custom Fonts allows you to add your self-hosted fonts and use them on your Elementor projects to create a unique brand language.', 'elementor' ); ?></p>
- <a class="elementor-button elementor-button-default elementor-button-go-pro" target="_blank" href="#"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
+ <a class="elementor-button elementor-button-default elementor-button-go-pro" target="_blank" href="<?php echo Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=wp-custom-fonts&utm_campaign=gopro&utm_medium=wp-dash' ); ?>"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
</div>
</div><!-- /.wrap -->
<?php
// Save general settings in one list for a future usage
$this->handle_general_settings_update();
+
+ $this->maybe_remove_all_admin_notices();
}
/**
* @access public
*/
public function update_css_print_method() {
- Plugin::$instance->posts_css_manager->clear_cache();
+ Plugin::$instance->files_manager->clear_cache();
}
/**
protected function create_tabs() {
$validations_class_name = __NAMESPACE__ . '\Settings_Validations';
+ $default_breakpoints = Responsive::get_default_breakpoints();
+
return [
self::TAB_GENERAL => [
'label' => __( 'General', 'elementor' ),
'container_width' => [
'label' => __( 'Content Width', 'elementor' ),
'field_args' => [
- 'type' => 'text',
- 'placeholder' => '1140',
+ 'type' => 'number',
+ 'attributes' => [
+ 'placeholder' => '1140',
+ 'class' => 'medium-text',
+ ],
'sub_desc' => 'px',
- 'class' => 'medium-text',
'desc' => __( 'Sets the default width of the content area (Default: 1140)', 'elementor' ),
],
],
'space_between_widgets' => [
'label' => __( 'Space Between Widgets', 'elementor' ),
'field_args' => [
- 'type' => 'text',
- 'placeholder' => '20',
+ 'type' => 'number',
+ 'attributes' => [
+ 'placeholder' => '20',
+ 'class' => 'medium-text',
+ ],
'sub_desc' => 'px',
- 'class' => 'medium-text',
'desc' => __( 'Sets the default space between widgets (Default: 20)', 'elementor' ),
],
],
'label' => __( 'Stretched Section Fit To', 'elementor' ),
'field_args' => [
'type' => 'text',
- 'placeholder' => 'body',
- 'class' => 'medium-text',
+ 'attributes' => [
+ 'placeholder' => 'body',
+ 'class' => 'medium-text',
+ ],
'desc' => __( 'Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width.', 'elementor' ),
],
],
'label' => __( 'Page Title Selector', 'elementor' ),
'field_args' => [
'type' => 'text',
- 'placeholder' => 'h1.entry-title',
- 'class' => 'medium-text',
+ 'attributes' => [
+ 'placeholder' => 'h1.entry-title',
+ 'class' => 'medium-text',
+ ],
'desc' => __( 'Elementor lets you hide the page title. This works for themes that have "h1.entry-title" selector. If your theme\'s selector is different, please enter it above.', 'elementor' ),
],
],
+ 'viewport_lg' => [
+ 'label' => __( 'Tablet Breakpoint', 'elementor' ),
+ 'field_args' => [
+ 'type' => 'number',
+ 'attributes' => [
+ 'placeholder' => $default_breakpoints['lg'],
+ 'min' => $default_breakpoints['md'] + 1,
+ 'max' => $default_breakpoints['xl'] - 1,
+ 'class' => 'medium-text',
+ ],
+ 'sub_desc' => 'px',
+ /* translators: %d: Breakpoint value */
+ 'desc' => sprintf( __( 'Sets the breakpoint between desktop and tablet devices. Below this breakpoint tablet layout will appear (Default: %dpx).', 'elementor' ), $default_breakpoints['lg'] ),
+ ],
+ ],
+ 'viewport_md' => [
+ 'label' => __( 'Mobile Breakpoint', 'elementor' ),
+ 'field_args' => [
+ 'type' => 'number',
+ 'attributes' => [
+ 'placeholder' => $default_breakpoints['md'],
+ 'min' => $default_breakpoints['sm'] + 1,
+ 'max' => $default_breakpoints['lg'] - 1,
+ 'class' => 'medium-text',
+ ],
+ 'sub_desc' => 'px',
+ /* translators: %d: Breakpoint value */
+ 'desc' => sprintf( __( 'Sets the breakpoint between tablet and mobile devices. Below this breakpoint mobile layout will appear (Default: %dpx).', 'elementor' ), $default_breakpoints['md'] ),
+ ],
+ ],
'global_image_lightbox' => [
'label' => __( 'Image Lightbox', 'elementor' ),
'field_args' => [
'desc' => __( 'For troubleshooting server configuration conflicts.', 'elementor' ),
],
],
+ 'edit_buttons' => [
+ 'label' => __( 'Editing Handles', 'elementor' ),
+ 'field_args' => [
+ 'type' => 'select',
+ 'std' => '',
+ 'options' => [
+ '' => __( 'Hide', 'elementor' ),
+ 'on' => __( 'Show', 'elementor' ),
+ ],
+ 'desc' => __( 'Show editing handles when hovering over the element edit button', 'elementor' ),
+ ],
+ ],
],
],
],
}
}
+ private function maybe_remove_all_admin_notices() {
+ $elementor_pages = [
+ 'elementor-getting-started',
+ 'elementor-role-manager',
+ 'elementor_custom_fonts',
+ 'elementor-license',
+ ];
+
+ if ( empty( $_GET['page'] ) || ! in_array( $_GET['page'], $elementor_pages, true ) ) {
+ return;
+ }
+
+ remove_all_actions( 'admin_notices' );
+ }
+
/**
* Settings page constructor.
*
// Clear CSS Meta after change print method.
add_action( 'add_option_elementor_css_print_method', [ $this, 'update_css_print_method' ] );
add_action( 'update_option_elementor_css_print_method', [ $this, 'update_css_print_method' ] );
- }
+ foreach ( Responsive::get_editable_breakpoints() as $breakpoint_key => $breakpoint ) {
+ foreach ( [ 'add', 'update' ] as $action ) {
+ add_action( "{$action}_option_elementor_viewport_{$breakpoint_key}", [ 'Elementor\Responsive', 'compile_stylesheet_templates' ] );
+ }
+ }
+ }
}
private function get_network_plugins() {
if ( ! $this->plugins ) {
$active_plugins = get_site_option( 'active_sitewide_plugins' );
- $this->plugins = array_intersect_key( get_plugins(), $active_plugins );
+ $this->plugins = array_intersect_key( get_plugins(), $active_plugins );
}
return $this->plugins;
'php_max_input_vars' => 'PHP Max Input Vars',
'php_max_post_size' => 'PHP Max Post Size',
'gd_installed' => 'GD Installed',
+ 'zip_installed' => 'ZIP Installed',
'write_permissions' => 'Write Permissions',
'elementor_library' => 'Elementor Library',
];
];
}
+ /**
+ * Get ZIP installed.
+ *
+ * Whether the ZIP extension is installed.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array {
+ * Report data.
+ *
+ * @type string $value Yes if the ZIP extension is installed, No otherwise.
+ * @type bool $warning Whether to display a warning. True if the ZIP extension is installed, False otherwise.
+ * }
+ */
+ public function get_zip_installed() {
+ $zip_installed = extension_loaded( 'zip' );
+
+ return [
+ 'value' => $zip_installed ? 'Yes' : 'No',
+ 'warning' => ! $zip_installed,
+ ];
+ }
+
/**
* Get MySQL version.
*
if ( in_array( $report_name, [ 'plugins', 'network_plugins', 'mu_plugins' ], true ) ) :
foreach ( $field['value'] as $plugin ) :
- ?>
+ ?>
<tr>
- <td>
- <?php
- if ( $plugin['PluginURI'] ) :
- $plugin_name = "<a href='{$plugin['PluginURI']}'>{$plugin['Name']}</a>";
+ <td><?php
+ if ( $plugin['PluginURI'] ) :
+ $plugin_name = "<a href='{$plugin['PluginURI']}'>{$plugin['Name']}</a>";
else :
$plugin_name = $plugin['Name'];
endif;
endif;
echo $plugin_name;
- ?>
- </td>
- <td>
- <?php
- if ( $plugin['Author'] ) :
- if ( $plugin['AuthorURI'] ) :
- $author = "<a href='{$plugin['AuthorURI']}'>{$plugin['Author']}</a>";
+ ?></td>
+ <td><?php
+ if ( $plugin['Author'] ) :
+ if ( $plugin['AuthorURI'] ) :
+ $author = "<a href='{$plugin['AuthorURI']}'>{$plugin['Author']}</a>";
else :
$author = $plugin['Author'];
endif;
echo "By $author";
endif;
- ?>
- </td>
+ ?></td>
<td></td>
</tr>
- <?php
+ <?php
endforeach;
else :
$warning_class = ! empty( $field['warning'] ) ? ' class="elementor-warning"' : '';
- ?>
+ ?>
<tr<?php echo $warning_class; ?>>
<td><?php echo $field['label']; ?>:</td>
<td><?php echo $field['value']; ?></td>
- <td>
- <?php
- if ( ! empty( $field['recommendation'] ) ) :
- echo $field['recommendation'];
- endif;
- ?>
- </td>
+ <td><?php
+ if ( ! empty( $field['recommendation'] ) ) {
+ echo $field['recommendation'];
+ }
+ ?></td>
</tr>
- <?php
+ <?php
endif;
endforeach;
?>
</tbody>
</table>
</div>
-<?php
+ <?php
endforeach;
public function ajax_elementor_clear_cache() {
check_ajax_referer( 'elementor_clear_cache', '_nonce' );
- Plugin::$instance->posts_css_manager->clear_cache();
+ Plugin::$instance->files_manager->clear_cache();
wp_send_json_success();
}
public function ajax_elementor_replace_url() {
check_ajax_referer( 'elementor_replace_url', '_nonce' );
- $from = ! empty( $_POST['from'] ) ? trim( $_POST['from'] ) : '';
- $to = ! empty( $_POST['to'] ) ? trim( $_POST['to'] ) : '';
+ $from = ! empty( $_POST['from'] ) ? $_POST['from'] : '';
+ $to = ! empty( $_POST['to'] ) ? $_POST['to'] : '';
- $is_valid_urls = ( filter_var( $from, FILTER_VALIDATE_URL ) && filter_var( $to, FILTER_VALIDATE_URL ) );
- if ( ! $is_valid_urls ) {
- wp_send_json_error( __( 'The `from` and `to` URL\'s must be a valid URL', 'elementor' ) );
- }
-
- if ( $from === $to ) {
- wp_send_json_error( __( 'The `from` and `to` URL\'s must be different', 'elementor' ) );
- }
-
- global $wpdb;
-
- // @codingStandardsIgnoreStart cannot use `$wpdb->prepare` because it remove's the backslashes
- $rows_affected = $wpdb->query(
- "UPDATE {$wpdb->postmeta} " .
- "SET `meta_value` = REPLACE(`meta_value`, '" . str_replace( '/', '\\\/', $from ) . "', '" . str_replace( '/', '\\\/', $to ) . "') " .
- "WHERE `meta_key` = '_elementor_data' AND `meta_value` LIKE '[%' ;" ); // meta_value LIKE '[%' are json formatted
- // @codingStandardsIgnoreEnd
-
- if ( false === $rows_affected ) {
- wp_send_json_error( __( 'An error occurred', 'elementor' ) );
- } else {
- Plugin::$instance->posts_css_manager->clear_cache();
- wp_send_json_success( sprintf(
- /* translators: %d: Number of rows */
- _n( '%d row affected.', '%d rows affected.', $rows_affected, 'elementor' ),
- $rows_affected
- ) );
+ try {
+ $results = Utils::replace_urls( $from, $to );
+ wp_send_json_success( $results );
+ } catch ( \Exception $e ) {
+ wp_send_json_error( $e->getMessage() );
}
}
'no' => __( 'Disable', 'elementor' ),
'yes' => __( 'Enable', 'elementor' ),
],
- 'desc' => __( 'Please Note: We do not recommend updating to a beta version on production sites.', 'elementor' ),
+ 'desc' => '<span style="color: red;">' . __( 'Please Note: We do not recommend updating to a beta version on production sites.', 'elementor' ) . '</span>',
],
],
],
* @return mixed Input field.
*/
public static function clear_cache( $input ) {
- Plugin::$instance->posts_css_manager->clear_cache();
+ Plugin::$instance->files_manager->clear_cache();
return $input;
}
* @return string Shape file path.
*/
public static function get_shape_path( $shape, $is_negative = false ) {
+
+ if ( isset( self::$shapes[ $shape ] ) && isset( self::$shapes[ $shape ]['path'] ) ) {
+ return self::$shapes[ $shape ]['path'];
+ }
+
$file_name = $shape;
if ( $is_negative ) {
* @static
*/
private static function init_shapes() {
- self::$shapes = [
+ $native_shapes = [
'mountains' => [
'title' => _x( 'Mountains', 'Shapes', 'elementor' ),
'has_flip' => true,
'has_negative' => true,
],
];
+
+ $additional_shapes = [];
+ /**
+ * Additional shapes.
+ *
+ * Filters the shapes used by Elementor to add additional shapes.
+ *
+ * @since 2.0.1
+ *
+ * @param array $additional_shapes Additional Elementor fonts.
+ */
+ $additional_shapes = apply_filters( 'elementor/shapes/additional_shapes', $additional_shapes );
+
+ self::$shapes = array_merge( $native_shapes, $additional_shapes );
}
}
}
if ( isset( $a_query['min'] ) ) {
- return $a_query['min'] - $b_query['min'];
+ $range = $a_query['min'] - $b_query['min'];
+
+ if ( $range ) {
+ return $range;
+ }
+
+ $a_has_max = isset( $a_query['max'] );
+
+ if ( $a_has_max xor isset( $b_query['max'] ) ) {
+ return $a_has_max ? 1 : -1;
+ }
+
+ if ( ! $a_has_max ) {
+ return 0;
+ }
}
return $b_query['max'] - $a_query['max'];
$upload = wp_upload_bits(
$filename,
- '',
+ null,
$file_content
);
do_action( 'elementor/template-library/before_get_source_data', $args, $source );
- return $source->get_data( $args );
+ $data = $source->get_data( $args );
+
+ do_action( 'elementor/template-library/after_get_source_data', $args, $source );
+
+ return $data;
}
/**
/** @var Source_Local $source */
$source = $this->get_source( 'local' );
- return $source->import_template();
+ return $source->import_template( $_FILES['file']['name'], $_FILES['file']['tmp_name'] );
}
/**
use Elementor\Editor;
use Elementor\Plugin;
use Elementor\Settings;
-use Elementor\User;
use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
return __( 'Local', 'elementor' );
}
- /**
- * Enqueue admin scripts.
- *
- * Registers all the admin scripts and enqueues them.
- *
- * Fired by `admin_enqueue_scripts` action.
- *
- * @since 2.0.0
- * @access public
- */
- public function admin_enqueue_scripts() {
- if ( in_array( get_current_screen()->id, [ 'elementor_library', 'edit-elementor_library' ], true ) ) {
- wp_enqueue_script( 'elementor-dialog' );
- add_action( 'admin_footer', [ $this, 'print_new_template_dialog' ] );
- }
- }
-
- /**
- * Print new template dialog.
- *
- * Used to output the new template dialog.
- *
- * Fired by `admin_footer` action.
- *
- * @since 2.0.0
- * @access public
- */
- public function print_new_template_dialog() {
- $document_types = Plugin::$instance->documents->get_document_types();
- $types = [];
- $selected = get_query_var( 'elementor_library_type' );
-
- foreach ( $document_types as $document_type ) {
- if ( $document_type::get_property( 'show_in_library' ) ) {
- /**
- * @var Document $instance
- */
- $instance = new $document_type();
-
- $types[ $instance->get_name() ] = $document_type::get_title();
- }
- }
-
- /**
- * Create new template library dialog types.
- *
- * Filters the dialog types when printing new template dialog.
- *
- * @since 2.0.0
- *
- * @param array $types Types data.
- * @param Document $document_types Document types.
- */
- $types = apply_filters( 'elementor/template-library/create_new_dialog_types', $types, $document_types );
- ?>
- <div id="elementor-new-template-dialog" style="display: none">
- <div class="elementor-templates-modal__header">
- <div class="elementor-templates-modal__header__logo-area">
- <div class="elementor-templates-modal__header__logo">
- <span class="elementor-templates-modal__header__logo__icon-wrapper">
- <i class="eicon-elementor"></i>
- </span>
- <span><?php echo __( 'New Template', 'elementor' ); ?></span>
- </div>
- </div>
- <div class="elementor-templates-modal__header__items-area">
- <div class="elementor-templates-modal__header__close-modal elementor-templates-modal__header__item">
- <i class="eicon-close" aria-hidden="true" title="Close"></i>
- <span class="elementor-screen-only"><?php echo __( 'Close', 'elementor' ); ?></span>
- </div>
- </div>
- </div>
- <div id="elementor-new-template-dialog-content">
- <div id="elementor-new-template__description">
- <div id="elementor-new-template__description__title"><?php echo __( 'Templates Help You <span>Work Efficiently</span>', 'elementor' ); ?></div>
- <div id="elementor-new-template__description__content"><?php echo __( 'Use templates to create the different pieces of your site, and reuse them with one click whenever needed.', 'elementor' ); ?></div>
- <?php
- /*
- <div id="elementor-new-template__take_a_tour">
- <i class="eicon-play-o"></i>
- <a href="#"><?php echo __( 'Take The Video Tour', 'elementor' ); ?></a>
- </div>
- */
- ?>
- </div>
- <form id="elementor-new-template__form" action="<?php esc_url( admin_url( '/edit.php' ) ); ?>">
- <input type="hidden" name="post_type" value="elementor_library">
- <input type="hidden" name="action" value="elementor_new_post">
- <input type="hidden" name="_wpnonce" value="<?php echo wp_create_nonce( 'elementor_action_new_post' ); ?>">
- <div id="elementor-new-template__form__title"><?php echo __( 'Choose Template Type', 'elementor' ); ?></div>
- <div id="elementor-new-template__form__template-type__wrapper" class="elementor-form-field">
- <label for="elementor-new-template__form__template-type" class="elementor-form-field__label"><?php echo __( 'Select the type of template you want to work on', 'elementor' ); ?></label>
- <div class="elementor-form-field__select__wrapper">
- <select id="elementor-new-template__form__template-type" class="elementor-form-field__select" name="template_type" required>
- <option value=""><?php echo __( 'Select', 'elementor' ); ?>...</option>
- <?php
- foreach ( $types as $value => $title ) {
- printf( '<option value="%1$s" %2$s>%3$s</option>', $value, selected( $selected, $value, false ), $title );
- }
- ?>
- </select>
- </div>
- </div>
- <?php
- /**
- * Template library dialog fields.
- *
- * Fires after Elementor template library dialog fields are displayed.
- *
- * @since 2.0.0
- */
- do_action( 'elementor/template-library/create_new_dialog_fields' );
- ?>
-
- <div id="elementor-new-template__form__post-title__wrapper" class="elementor-form-field">
- <label for="elementor-new-template__form__post-title" class="elementor-form-field__label">
- <?php echo __( 'Name your template', 'elementor' ); ?>
- </label>
- <div class="elementor-form-field__text__wrapper">
- <input type="text" placeholder="<?php echo esc_attr__( 'Enter template name (optional)', 'elementor' ); ?>" id="elementor-new-template__form__post-title" class="elementor-form-field__text" name="post_data[post_title]">
- </div>
- </div>
- <button id="elementor-new-template__form__submit" class="elementor-button elementor-button-success"><?php echo __( 'Create Template', 'elementor' ); ?></button>
- </form>
- </div>
- </div>
- <?php
-
- }
-
/**
* Register local template data.
*
$user = get_user_by( 'id', $post->post_author );
- $page_settings = get_post_meta( $post->ID, PageSettingsManager::META_KEY, true );
+ $page = SettingsManager::get_settings_managers( 'page' )->get_model( $template_id );
+
+ $page_settings = $page->get_data( 'settings' );
$date = strtotime( $post->post_date );
* @since 1.0.0
* @access public
*
+ * @param string $name - The file name
+ * @param string $path - The file path
+ *
* @return \WP_Error|array An array of items on success, 'WP_Error' on failure.
*/
- public function import_template() {
- $import_file = $_FILES['file']['tmp_name'];
-
- if ( empty( $import_file ) ) {
+ public function import_template( $name, $path ) {
+ if ( empty( $path ) ) {
return new \WP_Error( 'file_error', 'Please upload a file to import.' );
}
$items = [];
- $file_extension = pathinfo( $_FILES['file']['name'], PATHINFO_EXTENSION );
+ $file_extension = pathinfo( $name, PATHINFO_EXTENSION );
if ( 'zip' === $file_extension ) {
if ( ! class_exists( '\ZipArchive' ) ) {
$temp_path = $wp_upload_dir['basedir'] . '/' . self::TEMP_FILES_DIR . '/' . uniqid();
- $zip->open( $import_file );
+ $zip->open( $path );
$zip->extractTo( $temp_path );
rmdir( $temp_path );
} else {
- $items[] = $this->import_single_template( $import_file );
+ $items[] = $this->import_single_template( $path );
}
return $items;
$library_screen_id = 'edit-' . self::CPT;
$current_screen = get_current_screen();
- if ( ! isset( $current_screen->id ) || $library_screen_id !== $current_screen->id ) {
+ if ( ! isset( $current_screen->id ) || $library_screen_id !== $current_screen->id || ! empty( $query->query_vars['meta_key'] ) ) {
return;
}
* @access private
*/
private function add_actions() {
- self::add_template_type( 'page' );
- self::add_template_type( 'section' );
-
if ( is_admin() ) {
add_action( 'admin_menu', [ $this, 'register_admin_menu' ], 50 );
- add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueue_scripts' ], 11 );
add_filter( 'post_row_actions', [ $this, 'post_row_actions' ], 10, 2 );
add_action( 'admin_footer', [ $this, 'admin_import_template_form' ] );
add_action( 'save_post', [ $this, 'on_save_post' ], 10, 2 );
// Template type column.
add_action( 'manage_' . self::CPT . '_posts_columns', [ $this, 'admin_columns_headers' ] );
- add_action( 'manage_' . self::CPT . '_posts_custom_column', [ $this, 'admin_columns_content' ] , 10, 2 );
+ add_action( 'manage_' . self::CPT . '_posts_custom_column', [ $this, 'admin_columns_content' ], 10, 2 );
// Template library bulk actions.
add_filter( 'bulk_actions-edit-elementor_library', [ $this, 'admin_add_bulk_export_action' ] );
$offset = 2;
$posts_columns = array_slice( $posts_columns, 0, $offset, true ) + [
- 'elementor_library_type' => __( 'Type', 'elementor' ),
- ] + array_slice( $posts_columns, $offset, null, true );
+ 'elementor_library_type' => __( 'Type', 'elementor' ),
+ ] + array_slice( $posts_columns, $offset, null, true );
return $posts_columns;
}
if ( ! empty( $library_data['templates'] ) ) {
foreach ( $library_data['templates'] as $template_data ) {
- $templates[] = $this->get_item( $template_data );
+ $templates[] = $this->prepare_template( $template_data );
}
}
* @since 1.0.0
* @access public
*
- * @param array $template_data Remote template data.
+ * @param int $template_id The template ID.
*
* @return array Remote template.
*/
- public function get_item( $template_data ) {
- $favorite_templates = $this->get_user_meta( 'favorites' );
+ public function get_item( $template_id ) {
+ $templates = $this->get_items();
- return [
- 'template_id' => $template_data['id'],
- 'source' => $this->get_id(),
- 'type' => $template_data['type'],
- 'subtype' => $template_data['subtype'],
- 'title' => $template_data['title'],
- 'thumbnail' => $template_data['thumbnail'],
- 'date' => $template_data['tmpl_created'],
- 'author' => $template_data['author'],
- 'tags' => json_decode( $template_data['tags'] ),
- 'isPro' => ( '1' === $template_data['is_pro'] ),
- 'popularityIndex' => (int) $template_data['popularity_index'],
- 'trendIndex' => (int) $template_data['trend_index'],
- 'hasPageSettings' => ( '1' === $template_data['has_page_settings'] ),
- 'url' => $template_data['url'],
- 'favorite' => ! empty( $favorite_templates[ $template_data['id'] ] ),
- ];
+ return $templates[ $template_id ];
}
/**
*
* @param array $template_data Remote template data.
*
- * @return bool Return false.
+ * @return \WP_Error
*/
public function save_item( $template_data ) {
- return false;
+ return new \WP_Error( 'invalid_request', 'Cannot save template to a remote source' );
}
/**
*
* @param array $new_data New template data.
*
- * @return bool Return false.
+ * @return \WP_Error
*/
public function update_item( $new_data ) {
- return false;
+ return new \WP_Error( 'invalid_request', 'Cannot update template to a remote source' );
}
/**
*
* @param int $template_id The template ID.
*
- * @return bool Return false.
+ * @return \WP_Error
*/
public function delete_template( $template_id ) {
- return false;
+ return new \WP_Error( 'invalid_request', 'Cannot delete template from a remote source' );
}
/**
*
* @param int $template_id The template ID.
*
- * @return bool Return false.
+ * @return \WP_Error
*/
public function export_template( $template_id ) {
- return false;
+ return new \WP_Error( 'invalid_request', 'Cannot export template from a remote source' );
}
/**
return $data;
}
+
+ private function prepare_template( array $template_data ) {
+ $favorite_templates = $this->get_user_meta( 'favorites' );
+
+ return [
+ 'template_id' => $template_data['id'],
+ 'source' => $this->get_id(),
+ 'type' => $template_data['type'],
+ 'subtype' => $template_data['subtype'],
+ 'title' => $template_data['title'],
+ 'thumbnail' => $template_data['thumbnail'],
+ 'date' => $template_data['tmpl_created'],
+ 'author' => $template_data['author'],
+ 'tags' => json_decode( $template_data['tags'] ),
+ 'isPro' => ( '1' === $template_data['is_pro'] ),
+ 'popularityIndex' => (int) $template_data['popularity_index'],
+ 'trendIndex' => (int) $template_data['trend_index'],
+ 'hasPageSettings' => ( '1' === $template_data['has_page_settings'] ),
+ 'url' => $template_data['url'],
+ 'favorite' => ! empty( $favorite_templates[ $template_data['id'] ] ),
+ ];
+ }
}
*/
private static $_api_url = 'http://my.elementor.com/api/v1/tracker/';
+ private static $notice_shown = false;
+
/**
* Init.
*
return;
}
+ $elementor_pages = new \WP_Query( [
+ 'post_type' => 'any',
+ 'post_status' => 'publish',
+ 'fields' => 'ids',
+ 'update_post_meta_cache' => false,
+ 'update_post_term_cache' => false,
+ 'meta_key' => '_elementor_edit_mode',
+ 'meta_value' => 'builder',
+ ] );
+
+ if ( 2 > $elementor_pages->post_count ) {
+ return;
+ }
+
+ self::$notice_shown = true;
+
// TODO: Skip for development env.
$optin_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_into' ), 'opt_into' );
$optout_url = wp_nonce_url( add_query_arg( 'elementor_tracker', 'opt_out' ), 'opt_out' );
*/
$tracker_description_text = apply_filters( 'elementor/tracker/admin_description_text', $tracker_description_text );
?>
- <div class="updated">
- <p><?php echo esc_html( $tracker_description_text ); ?> <a href="https://go.elementor.com/usage-data-tracking/" target="_blank"><?php echo __( 'Learn more.', 'elementor' ); ?></a></p>
- <p><a href="<?php echo $optin_url; ?>" class="button-primary"><?php echo __( 'Sure! I\'d love to help', 'elementor' ); ?></a> <a href="<?php echo $optout_url; ?>" class="button-secondary"><?php echo __( 'No thanks', 'elementor' ); ?></a></p>
+ <div class="notice updated elementor-message">
+ <div class="elementor-message-inner">
+ <div class="elementor-message-icon">
+ <div class="e-logo-wrapper">
+ <i class="eicon-elementor" aria-hidden="true"></i>
+ </div>
+ </div>
+ <div class="elementor-message-content">
+ <p><?php echo esc_html( $tracker_description_text ); ?> <a href="https://go.elementor.com/usage-data-tracking/" target="_blank"><?php echo __( 'Learn more.', 'elementor' ); ?></a></p>
+ <p class="elementor-message-actions">
+ <a href="<?php echo $optin_url; ?>" class="button button-primary"><?php echo __( 'Sure! I\'d love to help', 'elementor' ); ?></a> <a href="<?php echo $optout_url; ?>" class="button-secondary"><?php echo __( 'No thanks', 'elementor' ); ?></a>
+ </p>
+ </div>
+ </div>
</div>
<?php
}
+ public static function is_notice_shown() {
+ return self::$notice_shown;
+ }
+
/**
* Get installed time.
*
self::check_upgrades( $elementor_version );
- Plugin::$instance->posts_css_manager->clear_cache();
+ Plugin::$instance->files_manager->clear_cache();
update_option( 'elementor_version', ELEMENTOR_VERSION );
}
'2.0.0' => 'upgrade_v200',
'2.0.1' => 'upgrade_v201',
'2.0.10' => 'upgrade_v2010',
+ '2.1.0' => 'upgrade_v210',
];
foreach ( $upgrades as $version => $function ) {
] );
}
}
+
+ private static function upgrade_v210() {
+ global $wpdb;
+
+ // upgrade `video` widget settings (merge providers).
+ $post_ids = $wpdb->get_col(
+ 'SELECT `post_id` FROM `' . $wpdb->postmeta . '` WHERE `meta_key` = "_elementor_data" AND `meta_value` LIKE \'%"widgetType":"video"%\';'
+ );
+
+ if ( empty( $post_ids ) ) {
+ return;
+ }
+
+ foreach ( $post_ids as $post_id ) {
+ $do_update = false;
+ $data = Plugin::$instance->db->get_plain_editor( $post_id );
+ if ( empty( $data ) ) {
+ continue;
+ }
+
+ $data = Plugin::$instance->db->iterate_data( $data, function ( $element ) use ( & $do_update ) {
+ if ( empty( $element['widgetType'] ) || 'video' !== $element['widgetType'] ) {
+ return $element;
+ }
+
+ $replacements = [];
+
+ if ( empty( $element['settings']['video_type'] ) || 'youtube' === $element['settings']['video_type'] ) {
+ $replacements = [
+ 'yt_autoplay' => 'autoplay',
+ 'yt_controls' => 'controls',
+ 'yt_mute' => 'mute',
+ 'yt_showinfo' => 'showinfo',
+ 'yt_rel' => 'rel',
+ 'link' => 'youtube_url',
+ ];
+ } elseif ( 'vimeo' === $element['settings']['video_type'] ) {
+ $replacements = [
+ 'vimeo_autoplay' => 'autoplay',
+ 'vimeo_loop' => 'loop',
+ 'vimeo_color' => 'color',
+ 'vimeo_link' => 'vimeo_url',
+ ];
+ }
+
+ // cleanup old unused settings.
+ unset( $element['settings']['yt_rel_videos'] );
+
+ foreach ( $replacements as $old => $new ) {
+ if ( ! empty( $element['settings'][ $old ] ) ) {
+ $element['settings'][ $new ] = $element['settings'][ $old ];
+ $do_update = true;
+ }
+ }
+
+ return $element;
+ } );
+
+ // Only update if needed.
+ if ( ! $do_update ) {
+ continue;
+ }
+
+ // We need the `wp_slash` in order to avoid the unslashing during the `update_post_meta`
+ $json_value = wp_slash( wp_json_encode( $data ) );
+
+ update_metadata( 'post', $post_id, '_elementor_data', $json_value );
+
+ // Clear WP cache for next step.
+ wp_cache_flush();
+ } // End foreach().
+ }
}
*/
const ADMIN_NOTICES_KEY = 'elementor_admin_notices';
+ const INTRODUCTION_KEY = 'elementor_introduction';
+
+ const INTRODUCTION_VERSION = 2;
+
/**
* Init.
*
*/
public static function init() {
add_action( 'wp_ajax_elementor_set_admin_notice_viewed', [ __CLASS__, 'ajax_set_admin_notice_viewed' ] );
+
+ add_action( 'elementor/ajax/register_actions', [ __CLASS__, 'register_ajax_actions' ] );
+ }
+
+ public static function register_ajax_actions() {
+ Plugin::$instance->ajax->register_ajax_action( 'introduction_viewed', [ __CLASS__, 'set_introduction_viewed' ] );
}
/**
* @return bool Whether the current user can edit the post.
*/
public static function is_current_user_can_edit( $post_id = 0 ) {
- if ( empty( $post_id ) ) {
- $post_id = get_the_ID();
- }
+ $post = get_post( $post_id );
- if ( ! Utils::is_post_type_support( $post_id ) ) {
+ if ( ! $post ) {
return false;
}
return false;
}
- $post_type_object = get_post_type_object( get_post_type( $post_id ) );
- if ( empty( $post_type_object ) ) {
+ if ( ! self::is_current_user_can_edit_post_type( $post->post_type ) ) {
return false;
}
+ $post_type_object = get_post_type_object( $post->post_type );
+
if ( ! isset( $post_type_object->cap->edit_post ) ) {
return false;
}
return false;
}
+ return true;
+ }
+
+ /**
+ * Is current user can access elementor.
+ *
+ * Whether the current user role is not excluded by Elementor Settings.
+ *
+ * @access public
+ * @static
+ *
+ * @return bool True if can access, False otherwise.
+ */
+ public static function is_current_user_in_editing_black_list() {
$user = wp_get_current_user();
$exclude_roles = get_option( 'elementor_exclude_user_roles', [] );
/**
* Is current user can edit post type.
*
- * Whether the current user can edit any given post type.
+ * Whether the current user can edit the given post type.
*
* @since 1.9.0
* @access public
* @static
*
- * @param string The post type slug to check.
+ * @param string $post_type the post type slug to check.
*
- * @return bool True on success, False otherwise.
+ * @return bool True if can edit, False otherwise.
*/
public static function is_current_user_can_edit_post_type( $post_type ) {
- if ( ! post_type_exists( $post_type ) ) {
+ if ( ! self::is_current_user_in_editing_black_list() ) {
return false;
}
- if ( ! post_type_supports( $post_type, 'elementor' ) ) {
+ if ( ! Utils::is_post_type_support( $post_type ) ) {
return false;
}
- $user = wp_get_current_user();
- $exclude_roles = get_option( 'elementor_exclude_user_roles', [] );
+ $post_type_object = get_post_type_object( $post_type );
- $compare_roles = array_intersect( $user->roles, $exclude_roles );
- if ( ! empty( $compare_roles ) ) {
+ if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) {
return false;
}
die;
}
+
+ public static function set_introduction_viewed() {
+ $user_introduction_meta = self::get_introduction_meta();
+
+ if ( ! $user_introduction_meta ) {
+ $user_introduction_meta = [];
+ }
+
+ $user_introduction_meta[ self::INTRODUCTION_VERSION ] = true;
+
+ update_user_meta( get_current_user_id(), self::INTRODUCTION_KEY, $user_introduction_meta );
+ }
+
+ public static function is_should_view_introduction() {
+ $user_introduction_meta = self::get_introduction_meta();
+
+ return empty( $user_introduction_meta[ self::INTRODUCTION_VERSION ] );
+ }
+
+ private static function get_introduction_meta() {
+ return get_user_meta( get_current_user_id(), self::INTRODUCTION_KEY, true );
+ }
}
User::init();
return $wp_preview_url;
}
+ /**
+ * Replace URLs.
+ *
+ * Replace old URLs to new URLs. This method also updates all the Elementor data.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @param $from
+ * @param $to
+ *
+ * @return string
+ * @throws \Exception
+ */
+ public static function replace_urls( $from, $to ) {
+ $from = trim( $from );
+ $to = trim( $to );
+
+ if ( $from === $to ) {
+ throw new \Exception( __( 'The `from` and `to` URL\'s must be different', 'elementor' ) );
+ }
+
+ $is_valid_urls = ( filter_var( $from, FILTER_VALIDATE_URL ) && filter_var( $to, FILTER_VALIDATE_URL ) );
+ if ( ! $is_valid_urls ) {
+ throw new \Exception( __( 'The `from` and `to` URL\'s must be valid URL\'s', 'elementor' ) );
+ }
+
+ global $wpdb;
+
+ // @codingStandardsIgnoreStart cannot use `$wpdb->prepare` because it remove's the backslashes
+ $rows_affected = $wpdb->query(
+ "UPDATE {$wpdb->postmeta} " .
+ "SET `meta_value` = REPLACE(`meta_value`, '" . str_replace( '/', '\\\/', $from ) . "', '" . str_replace( '/', '\\\/', $to ) . "') " .
+ "WHERE `meta_key` = '_elementor_data' AND `meta_value` LIKE '[%' ;" ); // meta_value LIKE '[%' are json formatted
+ // @codingStandardsIgnoreEnd
+
+ if ( false === $rows_affected ) {
+ throw new \Exception( __( 'An error occurred', 'elementor' ) );
+ }
+
+ Plugin::$instance->files_manager->clear_cache();
+
+ return sprintf(
+ /* translators: %d: Number of rows */
+ _n( '%d row affected.', '%d rows affected.', $rows_affected, 'elementor' ),
+ $rows_affected
+ );
+ }
/**
* Get exit to dashboard URL.
}
/**
- * Is post type supports Elementor.
+ * Is post supports Elementor.
*
- * Whether the post type supports editing with Elementor.
+ * Whether the post supports editing with Elementor.
*
* @since 1.0.0
* @access public
*
* @param int $post_id Optional. Post ID. Default is `0`.
*
- * @return string True if post type supports editing with Elementor, false otherwise.
+ * @return string True if post supports editing with Elementor, false otherwise.
*/
- public static function is_post_type_support( $post_id = 0 ) {
+ public static function is_post_support( $post_id = 0 ) {
$post_type = get_post_type( $post_id );
- $is_supported = post_type_supports( $post_type, 'elementor' );
+
+ $is_supported = self::is_post_type_support( $post_type );
/**
* Is post type support.
* Filters whether the post type supports editing with Elementor.
*
* @since 1.0.0
+ * @deprecated 2.2.0 Use `elementor/utils/is_post_support` Instead
*
- * @param bool $is_supported Whether the post type supports editing with Elementor.
- * @param int $post_id Post ID.
- * @param string $post_type Post type.
+ * @param bool $is_supported Whether the post type supports editing with Elementor.
+ * @param int $post_id Post ID.
+ * @param string $post_type Post type.
*/
$is_supported = apply_filters( 'elementor/utils/is_post_type_support', $is_supported, $post_id, $post_type );
+ /**
+ * Is post support.
+ *
+ * Filters whether the post supports editing with Elementor.
+ *
+ * @since 2.2.0
+ *
+ * @param bool $is_supported Whether the post type supports editing with Elementor.
+ * @param int $post_id Post ID.
+ * @param string $post_type Post type.
+ */
+ $is_supported = apply_filters( 'elementor/utils/is_post_support', $is_supported, $post_id, $post_type );
+
return $is_supported;
}
+
+ /**
+ * Is post type supports Elementor.
+ *
+ * Whether the post type supports editing with Elementor.
+ *
+ * @since 2.2.0
+ * @access public
+ * @static
+ *
+ * @param string $post_type Post Type.
+ *
+ * @return string True if post type supports editing with Elementor, false otherwise.
+ */
+ public static function is_post_type_support( $post_type ) {
+ if ( ! post_type_exists( $post_type ) ) {
+ return false;
+ }
+
+ if ( ! post_type_supports( $post_type, 'elementor' ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
/**
* Get placeholder image source.
*
// Create a UTC+- zone if no timezone string exists.
if ( empty( $timezone_string ) ) {
- if ( 0 === $current_offset ) {
- $timezone_string = 'UTC+0';
- } elseif ( $current_offset < 0 ) {
+ if ( $current_offset < 0 ) {
$timezone_string = 'UTC' . $current_offset;
} else {
$timezone_string = 'UTC+' . $current_offset;
* @since 1.0.10
* @access public
* @static
+ * @deprecated 2.1.0 Use `do_action_deprecated()` instead
*
* @param string $tag The name of the action hook.
* @param array $args Array of additional function arguments to be passed to `do_action()`.
* @param string $message Optional. A message regarding the change.
*/
public static function do_action_deprecated( $tag, $args, $version, $replacement = false, $message = null ) {
- // TODO: When minimum required version of Elementor will be 4.6, this method can be replaced by `do_action_deprecated()` function.
- if ( function_exists( 'do_action_deprecated' ) ) { /* WP >= 4.6 */
- do_action_deprecated( $tag, $args, $version, $replacement, $message );
- } else {
- do_action_ref_array( $tag, $args );
- }
+ _deprecated_function( __METHOD__, '2.1.0', 'do_action_deprecated()' );
+
+ do_action_deprecated( $tag, $args, $version, $replacement, $message );
}
/**
* @since 1.0.10
* @access public
* @static
+ * @deprecated 2.1.0 Use `apply_filters_deprecated()` instead
*
* @param string $tag The name of the filter hook.
* @param array $args Array of additional function arguments to be passed to `apply_filters()`.
* @return mixed The filtered value after all hooked functions are applied to it.
*/
public static function apply_filters_deprecated( $tag, $args, $version, $replacement = false, $message = null ) {
- // TODO: When minimum required version of Elementor will be 4.6, this method can be replaced by `apply_filters_deprecated()` function.
- if ( function_exists( 'apply_filters_deprecated' ) ) { /* WP >= 4.6 */
- return apply_filters_deprecated( $tag, $args, $version, $replacement, $message );
- } else {
- return apply_filters_ref_array( $tag, $args );
- }
+ _deprecated_function( __METHOD__, '2.1.0', 'apply_filters_deprecated()' );
+
+ return apply_filters_deprecated( $tag, $args, $version, $replacement, $message );
}
/**
return method_exists( wp_get_theme(), 'get_post_templates' );
}
+
+ public static function array_inject( $array, $key, $insert ) {
+ $length = array_search( $key, array_keys( $array ), true ) + 1;
+
+ return array_slice( $array, 0, $length, true ) +
+ $insert +
+ array_slice( $array, $length, null, true );
+ }
}
return 'eicon-accordion';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'accordion', 'tabs', 'toggle' ];
+ }
+
/**
* Register accordion widget controls.
*
]
);
+ $repeater = new Repeater();
+
+ $repeater->add_control(
+ 'tab_title',
+ [
+ 'label' => __( 'Title & Content', 'elementor' ),
+ 'type' => Controls_Manager::TEXT,
+ 'default' => __( 'Accordion Title', 'elementor' ),
+ 'dynamic' => [
+ 'active' => true,
+ ],
+ 'label_block' => true,
+ ]
+ );
+
+ $repeater->add_control(
+ 'tab_content',
+ [
+ 'label' => __( 'Content', 'elementor' ),
+ 'type' => Controls_Manager::WYSIWYG,
+ 'default' => __( 'Accordion Content', 'elementor' ),
+ 'show_label' => false,
+ ]
+ );
+
$this->add_control(
'tabs',
[
'label' => __( 'Accordion Items', 'elementor' ),
'type' => Controls_Manager::REPEATER,
+ 'fields' => $repeater->get_controls(),
'default' => [
[
'tab_title' => __( 'Accordion #1', 'elementor' ),
- 'tab_content' => __( 'I am item content. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
+ 'tab_content' => __( 'Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
],
[
'tab_title' => __( 'Accordion #2', 'elementor' ),
- 'tab_content' => __( 'I am item content. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
- ],
- ],
- 'fields' => [
- [
- 'name' => 'tab_title',
- 'label' => __( 'Title & Content', 'elementor' ),
- 'type' => Controls_Manager::TEXT,
- 'default' => __( 'Accordion Title' , 'elementor' ),
- 'dynamic' => [
- 'active' => true,
- ],
- 'label_block' => true,
- ],
- [
- 'name' => 'tab_content',
- 'label' => __( 'Content', 'elementor' ),
- 'type' => Controls_Manager::WYSIWYG,
- 'default' => __( 'Accordion Content', 'elementor' ),
- 'show_label' => false,
+ 'tab_content' => __( 'Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
],
],
'title_field' => '{{{ tab_title }}}',
]
);
- $this->add_control(
- 'title_html_tag',
- [
- 'label' => __( 'Title HTML Tag', 'elementor' ),
- 'type' => Controls_Manager::SELECT,
- 'options' => [
- 'h1' => 'H1',
- 'h2' => 'H2',
- 'h3' => 'H3',
- 'h4' => 'H4',
- 'h5' => 'H5',
- 'h6' => 'H6',
- 'div' => 'div',
- ],
- 'default' => 'div',
- 'separator' => 'before',
- ]
- );
-
$this->add_control(
'icon',
[
'label' => __( 'Icon', 'elementor' ),
'type' => Controls_Manager::ICON,
'default' => 'fa fa-plus',
- 'label_block' => true,
+ 'separator' => 'before',
]
);
'label' => __( 'Active Icon', 'elementor' ),
'type' => Controls_Manager::ICON,
'default' => 'fa fa-minus',
- 'label_block' => true,
'condition' => [
'icon!' => '',
],
]
);
+ $this->add_control(
+ 'title_html_tag',
+ [
+ 'label' => __( 'Title HTML Tag', 'elementor' ),
+ 'type' => Controls_Manager::SELECT,
+ 'options' => [
+ 'h1' => 'H1',
+ 'h2' => 'H2',
+ 'h3' => 'H3',
+ 'h4' => 'H4',
+ 'h5' => 'H5',
+ 'h6' => 'H6',
+ 'div' => 'div',
+ ],
+ 'default' => 'div',
+ 'separator' => 'before',
+ ]
+ );
+
$this->end_controls_section();
$this->start_controls_section(
return 'eicon-alert';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'alert', 'notice', 'message' ];
+ }
+
/**
* Register alert widget controls.
*
'warning' => __( 'Warning', 'elementor' ),
'danger' => __( 'Danger', 'elementor' ),
],
+ 'style_transfer' => true,
]
);
<?php
namespace Elementor;
+use Elementor\Modules\DynamicTags\Module as TagsModule;
+
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
return 'eicon-headphones';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'audio', 'player', 'soundcloud', 'embed' ];
+ }
+
/**
* Register audio widget controls.
*
[
'label' => __( 'Link', 'elementor' ),
'type' => Controls_Manager::URL,
+ 'dynamic' => [
+ 'active' => true,
+ 'categories' => [
+ TagsModule::POST_META_CATEGORY,
+ TagsModule::URL_CATEGORY,
+ ],
+ ],
'default' => [
'url' => 'https://soundcloud.com/shchxango/john-coltrane-1963-my-favorite',
],
]
);
+ $this->add_control(
+ 'sc_show_artwork',
+ [
+ 'label' => __( 'Artwork', 'elementor' ),
+ 'type' => Controls_Manager::SWITCHER,
+ 'label_off' => __( 'Hide', 'elementor' ),
+ 'label_on' => __( 'Show', 'elementor' ),
+ 'default' => 'yes',
+ 'condition' => [
+ 'visual' => 'no',
+ ],
+ ]
+ );
+
$this->add_control(
'sc_sharing',
[
<div class="elementor-soundcloud-wrapper">
<?php echo $video_html; ?>
</div>
- <?php
+ <?php
endif;
}
'show_comments',
'show_playcount',
'show_user',
+ 'show_artwork',
];
$params = [];
'type' => Controls_Manager::SELECT,
'default' => 'sm',
'options' => self::get_button_sizes(),
+ 'style_transfer' => true,
]
);
]
);
+ $this->add_control(
+ 'button_css_id',
+ [
+ 'label' => __( 'Button ID', 'elementor' ),
+ 'type' => Controls_Manager::TEXT,
+ 'default' => '',
+ 'title' => __( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ),
+ 'label_block' => false,
+ 'description' => __( 'Please make sure the ID is unique and not used elsewhere on the page this form is displayed. This field allows <code>A-z 0-9</code> & underscore chars without spaces.', 'elementor' ),
+ 'separator' => 'before',
+
+ ]
+ );
+
$this->end_controls_section();
$this->start_controls_section(
$this->add_render_attribute( 'button', 'class', 'elementor-button' );
$this->add_render_attribute( 'button', 'role', 'button' );
+ if ( ! empty( $settings['button_css_id'] ) ) {
+ $this->add_render_attribute( 'button', 'id', $settings['button_css_id'] );
+ }
+
if ( ! empty( $settings['size'] ) ) {
$this->add_render_attribute( 'button', 'class', 'elementor-size-' . $settings['size'] );
}
view.addInlineEditingAttributes( 'text', 'none' );
#>
<div class="elementor-button-wrapper">
- <a class="elementor-button elementor-size-{{ settings.size }} elementor-animation-{{ settings.hover_animation }}" href="{{ settings.link.url }}" role="button">
+ <a id="{{ settings.button_css_id }}" class="elementor-button elementor-size-{{ settings.size }} elementor-animation-{{ settings.hover_animation }}" href="{{ settings.link.url }}" role="button">
<span class="elementor-button-content-wrapper">
<# if ( settings.icon ) { #>
<span class="elementor-button-icon elementor-align-icon-{{ settings.icon_align }}">
]
);
+ $this->add_control(
+ '_title',
+ [
+ 'label' => __( 'Title', 'elementor' ),
+ 'type' => Controls_Manager::HIDDEN,
+ 'render_type' => 'none',
+ ]
+ );
+
$this->add_responsive_control(
'_margin',
[
'label' => __( 'Z-Index', 'elementor' ),
'type' => Controls_Manager::NUMBER,
'min' => 0,
- 'placeholder' => 0,
'selectors' => [
'{{WRAPPER}}' => 'z-index: {{VALUE}};',
],
'default' => '',
'title' => __( 'Add your custom id WITHOUT the Pound key. e.g: my-id', 'elementor' ),
'label_block' => false,
+ 'style_transfer' => false,
]
);
[
'label' => __( 'Transition Duration', 'elementor' ),
'type' => Controls_Manager::SLIDER,
- 'default' => [
- 'size' => 0.3,
- ],
'range' => [
'px' => [
'max' => 3,
],
],
'render_type' => 'ui',
+ 'separator' => 'before',
]
);
[
'label' => __( 'Transition Duration', 'elementor' ),
'type' => Controls_Manager::SLIDER,
- 'default' => [
- 'size' => 0.3,
- ],
+ 'separator' => 'before',
'range' => [
'px' => [
'max' => 3,
return [ 'jquery-numerator' ];
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'counter' ];
+ }
+
/**
* Register counter widget controls.
*
return [ 'basic' ];
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'divider', 'hr', 'line', 'border' ];
+ }
+
/**
* Register divider widget controls.
*
return [ 'basic' ];
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'google', 'map', 'embed' ];
+ }
+
/**
* Register google maps widget controls.
*
$this->add_control(
'zoom',
[
- 'label' => __( 'Zoom Level', 'elementor' ),
+ 'label' => __( 'Zoom', 'elementor' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 10,
'max' => 20,
],
],
+ 'separator' => 'before',
]
);
);
$this->end_controls_section();
+
+ $this->start_controls_section(
+ 'section_map_style',
+ [
+ 'label' => __( 'Map', 'elementor' ),
+ 'tab' => Controls_Manager::TAB_STYLE,
+ ]
+ );
+
+ $this->start_controls_tabs( 'map_filter' );
+
+ $this->start_controls_tab( 'normal',
+ [
+ 'label' => __( 'Normal', 'elementor' ),
+ ]
+ );
+
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters',
+ 'selector' => '{{WRAPPER}} iframe',
+ ]
+ );
+
+ $this->end_controls_tab();
+
+ $this->start_controls_tab( 'hover',
+ [
+ 'label' => __( 'Hover', 'elementor' ),
+ ]
+ );
+
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters_hover',
+ 'selector' => '{{WRAPPER}}:hover iframe',
+ ]
+ );
+
+ $this->add_control(
+ 'hover_transition',
+ [
+ 'label' => __( 'Transition Duration', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'range' => [
+ 'px' => [
+ 'max' => 3,
+ 'step' => 0.1,
+ ],
+ ],
+ 'selectors' => [
+ '{{WRAPPER}} iframe' => 'transition-duration: {{SIZE}}s',
+ ],
+ ]
+ );
+
+ $this->end_controls_tab();
+
+ $this->end_controls_tabs();
+
}
/**
return [ 'basic' ];
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'heading', 'title', 'text' ];
+ }
+
/**
* Register heading widget controls.
*
'dynamic' => [
'active' => true,
],
- 'placeholder' => __( 'https://your-link.com', 'elementor' ),
'default' => [
'url' => '',
],
'value' => Scheme_Color::COLOR_1,
],
'selectors' => [
- '{{WRAPPER}} .elementor-heading-title' => 'color: {{VALUE}};',
+ // Stronger selector to avoid section style from overwriting
+ '{{WRAPPER}}.elementor-widget-heading .elementor-heading-title' => 'color: {{VALUE}};',
],
]
);
]
);
+ $this->add_control(
+ 'blend_mode',
+ [
+ 'label' => __( 'Blend Mode', 'elementor' ),
+ 'type' => Controls_Manager::SELECT,
+ 'options' => [
+ '' => __( 'Normal', 'elementor' ),
+ 'multiply' => 'Multiply',
+ 'screen' => 'Screen',
+ 'overlay' => 'Overlay',
+ 'darken' => 'Darken',
+ 'lighten' => 'Lighten',
+ 'color-dodge' => 'Color Dodge',
+ 'saturation' => 'Saturation',
+ 'color' => 'Color',
+ 'difference' => 'Difference',
+ 'exclusion' => 'Exclusion',
+ 'hue' => 'Hue',
+ 'luminosity' => 'Luminosity',
+ ],
+ 'selectors' => [
+ '{{WRAPPER}} .elementor-heading-title' => 'mix-blend-mode: {{VALUE}}',
+ ],
+ 'separator' => 'none',
+ ]
+ );
+
$this->end_controls_section();
}
<?php
namespace Elementor;
+use Elementor\Modules\DynamicTags\Module as TagsModule;
+
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
return 'eicon-coding';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'html', 'code' ];
+ }
+
/**
* Register HTML widget controls.
*
return 'eicon-icon-box';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'icon box', 'icon' ];
+ }
+
/**
* Register icon box widget controls.
*
$this->add_control(
'icon',
[
- 'label' => __( 'Choose Icon', 'elementor' ),
+ 'label' => __( 'Icon', 'elementor' ),
'type' => Controls_Manager::ICON,
'default' => 'fa fa-star',
]
]
);
+ $this->start_controls_tabs( 'icon_colors' );
+
+ $this->start_controls_tab(
+ 'icon_colors_normal',
+ [
+ 'label' => __( 'Normal', 'elementor' ),
+ ]
+ );
+
$this->add_control(
'primary_color',
[
]
);
+ $this->end_controls_tab();
+
+ $this->start_controls_tab(
+ 'icon_colors_hover',
+ [
+ 'label' => __( 'Hover', 'elementor' ),
+ ]
+ );
+
+ $this->add_control(
+ 'hover_primary_color',
+ [
+ 'label' => __( 'Primary Color', 'elementor' ),
+ 'type' => Controls_Manager::COLOR,
+ 'default' => '',
+ 'selectors' => [
+ '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'background-color: {{VALUE}};',
+ '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover, {{WRAPPER}}.elementor-view-default .elementor-icon:hover' => 'color: {{VALUE}}; border-color: {{VALUE}};',
+ ],
+ ]
+ );
+
+ $this->add_control(
+ 'hover_secondary_color',
+ [
+ 'label' => __( 'Secondary Color', 'elementor' ),
+ 'type' => Controls_Manager::COLOR,
+ 'default' => '',
+ 'condition' => [
+ 'view!' => 'default',
+ ],
+ 'selectors' => [
+ '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover' => 'background-color: {{VALUE}};',
+ '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'color: {{VALUE}};',
+ ],
+ ]
+ );
+
+ $this->add_control(
+ 'hover_animation',
+ [
+ 'label' => __( 'Hover Animation', 'elementor' ),
+ 'type' => Controls_Manager::HOVER_ANIMATION,
+ ]
+ );
+
+ $this->end_controls_tab();
+
+ $this->end_controls_tabs();
+
$this->add_responsive_control(
'icon_space',
[
$this->end_controls_section();
- $this->start_controls_section(
- 'section_hover',
- [
- 'label' => __( 'Icon Hover', 'elementor' ),
- 'tab' => Controls_Manager::TAB_STYLE,
- 'condition' => [
- 'icon!' => '',
- ],
- ]
- );
-
- $this->add_control(
- 'hover_primary_color',
- [
- 'label' => __( 'Primary Color', 'elementor' ),
- 'type' => Controls_Manager::COLOR,
- 'default' => '',
- 'selectors' => [
- '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'background-color: {{VALUE}};',
- '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover, {{WRAPPER}}.elementor-view-default .elementor-icon:hover' => 'color: {{VALUE}}; border-color: {{VALUE}};',
- ],
- ]
- );
-
- $this->add_control(
- 'hover_secondary_color',
- [
- 'label' => __( 'Secondary Color', 'elementor' ),
- 'type' => Controls_Manager::COLOR,
- 'default' => '',
- 'condition' => [
- 'view!' => 'default',
- ],
- 'selectors' => [
- '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover' => 'background-color: {{VALUE}};',
- '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'color: {{VALUE}};',
- ],
- ]
- );
-
- $this->add_control(
- 'hover_animation',
- [
- 'label' => __( 'Hover Animation', 'elementor' ),
- 'type' => Controls_Manager::HOVER_ANIMATION,
- ]
- );
-
- $this->end_controls_section();
-
$this->start_controls_section(
'section_style_content',
[
return 'eicon-bullet-list';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'icon list', 'icon', 'list' ];
+ }
+
/**
* Register icon list widget controls.
*
'render_type' => 'template',
'classes' => 'elementor-control-start-end',
'label_block' => false,
+ 'style_transfer' => true,
+ ]
+ );
+
+ $repeater = new Repeater();
+
+ $repeater->add_control(
+ 'text',
+ [
+ 'label' => __( 'Text', 'elementor' ),
+ 'type' => Controls_Manager::TEXT,
+ 'label_block' => true,
+ 'placeholder' => __( 'List Item', 'elementor' ),
+ 'default' => __( 'List Item', 'elementor' ),
+ ]
+ );
+
+ $repeater->add_control(
+ 'icon',
+ [
+ 'label' => __( 'Icon', 'elementor' ),
+ 'type' => Controls_Manager::ICON,
+ 'label_block' => true,
+ 'default' => 'fa fa-check',
+ ]
+ );
+
+ $repeater->add_control(
+ 'link',
+ [
+ 'label' => __( 'Link', 'elementor' ),
+ 'type' => Controls_Manager::URL,
+ 'label_block' => true,
+ 'placeholder' => __( 'https://your-link.com', 'elementor' ),
]
);
[
'label' => '',
'type' => Controls_Manager::REPEATER,
+ 'fields' => $repeater->get_controls(),
'default' => [
[
'text' => __( 'List Item #1', 'elementor' ),
'icon' => 'fa fa-dot-circle-o',
],
],
- 'fields' => [
- [
- 'name' => 'text',
- 'label' => __( 'Text', 'elementor' ),
- 'type' => Controls_Manager::TEXT,
- 'label_block' => true,
- 'placeholder' => __( 'List Item', 'elementor' ),
- 'default' => __( 'List Item', 'elementor' ),
- ],
- [
- 'name' => 'icon',
- 'label' => __( 'Icon', 'elementor' ),
- 'type' => Controls_Manager::ICON,
- 'label_block' => true,
- 'default' => 'fa fa-check',
- ],
- [
- 'name' => 'link',
- 'label' => __( 'Link', 'elementor' ),
- 'type' => Controls_Manager::URL,
- 'label_block' => true,
- 'placeholder' => __( 'https://your-link.com', 'elementor' ),
- ],
- ],
'title_field' => '<i class="{{ icon }}" aria-hidden="true"></i> {{{ text }}}',
]
);
'selectors' => [
'{{WRAPPER}} .elementor-icon-list-item:not(:last-child):after' => 'content: ""',
],
- 'return_value' => 'yes',
'separator' => 'before',
]
);
[
'label' => __( 'Width', 'elementor' ),
'type' => Controls_Manager::SLIDER,
- 'units' => [ '%' ],
'default' => [
'unit' => '%',
],
return [ 'basic' ];
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'icon' ];
+ }
+
/**
* Register icon widget controls.
*
]
);
+ $this->add_control(
+ 'icon',
+ [
+ 'label' => __( 'Icon', 'elementor' ),
+ 'type' => Controls_Manager::ICON,
+ 'default' => 'fa fa-star',
+ ]
+ );
+
$this->add_control(
'view',
[
]
);
- $this->add_control(
- 'icon',
- [
- 'label' => __( 'Icon', 'elementor' ),
- 'type' => Controls_Manager::ICON,
- 'label_block' => true,
- 'default' => 'fa fa-star',
- ]
- );
-
$this->add_control(
'shape',
[
]
);
+ $this->start_controls_tabs( 'icon_colors' );
+
+ $this->start_controls_tab(
+ 'icon_colors_normal',
+ [
+ 'label' => __( 'Normal', 'elementor' ),
+ ]
+ );
+
$this->add_control(
'primary_color',
[
]
);
+ $this->end_controls_tab();
+
+ $this->start_controls_tab(
+ 'icon_colors_hover',
+ [
+ 'label' => __( 'Hover', 'elementor' ),
+ ]
+ );
+
+ $this->add_control(
+ 'hover_primary_color',
+ [
+ 'label' => __( 'Primary Color', 'elementor' ),
+ 'type' => Controls_Manager::COLOR,
+ 'default' => '',
+ 'selectors' => [
+ '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'background-color: {{VALUE}};',
+ '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover, {{WRAPPER}}.elementor-view-default .elementor-icon:hover' => 'color: {{VALUE}}; border-color: {{VALUE}};',
+ ],
+ ]
+ );
+
+ $this->add_control(
+ 'hover_secondary_color',
+ [
+ 'label' => __( 'Secondary Color', 'elementor' ),
+ 'type' => Controls_Manager::COLOR,
+ 'default' => '',
+ 'condition' => [
+ 'view!' => 'default',
+ ],
+ 'selectors' => [
+ '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover' => 'background-color: {{VALUE}};',
+ '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'color: {{VALUE}};',
+ ],
+ ]
+ );
+
+ $this->add_control(
+ 'hover_animation',
+ [
+ 'label' => __( 'Hover Animation', 'elementor' ),
+ 'type' => Controls_Manager::HOVER_ANIMATION,
+ ]
+ );
+
+ $this->end_controls_tab();
+
+ $this->end_controls_tabs();
+
$this->add_control(
'size',
[
);
$this->end_controls_section();
-
- $this->start_controls_section(
- 'section_hover',
- [
- 'label' => __( 'Icon Hover', 'elementor' ),
- 'tab' => Controls_Manager::TAB_STYLE,
- ]
- );
-
- $this->add_control(
- 'hover_primary_color',
- [
- 'label' => __( 'Primary Color', 'elementor' ),
- 'type' => Controls_Manager::COLOR,
- 'default' => '',
- 'selectors' => [
- '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'background-color: {{VALUE}};',
- '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover, {{WRAPPER}}.elementor-view-default .elementor-icon:hover' => 'color: {{VALUE}}; border-color: {{VALUE}};',
- ],
- ]
- );
-
- $this->add_control(
- 'hover_secondary_color',
- [
- 'label' => __( 'Secondary Color', 'elementor' ),
- 'type' => Controls_Manager::COLOR,
- 'default' => '',
- 'condition' => [
- 'view!' => 'default',
- ],
- 'selectors' => [
- '{{WRAPPER}}.elementor-view-framed .elementor-icon:hover' => 'background-color: {{VALUE}};',
- '{{WRAPPER}}.elementor-view-stacked .elementor-icon:hover' => 'color: {{VALUE}};',
- ],
- ]
- );
-
- $this->add_control(
- 'hover_animation',
- [
- 'label' => __( 'Hover Animation', 'elementor' ),
- 'type' => Controls_Manager::HOVER_ANIMATION,
- ]
- );
-
- $this->end_controls_section();
}
/**
return 'eicon-image-box';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'image', 'photo', 'visual', 'box' ];
+ }
+
/**
* Register image box widget controls.
*
$this->add_responsive_control(
'image_space',
[
- 'label' => __( 'Image Spacing', 'elementor' ),
+ 'label' => __( 'Spacing', 'elementor' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 15,
$this->add_responsive_control(
'image_size',
[
- 'label' => __( 'Image Size', 'elementor' ),
+ 'label' => __( 'Width', 'elementor' ),
'type' => Controls_Manager::SLIDER,
'default' => [
'size' => 30,
]
);
+ $this->add_control(
+ 'hover_animation',
+ [
+ 'label' => __( 'Hover Animation', 'elementor' ),
+ 'type' => Controls_Manager::HOVER_ANIMATION,
+ ]
+ );
+
+ $this->start_controls_tabs( 'image_effects' );
+
+ $this->start_controls_tab( 'normal',
+ [
+ 'label' => __( 'Normal', 'elementor' ),
+ ]
+ );
+
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters',
+ 'selector' => '{{WRAPPER}} .elementor-image-box-img img',
+ ]
+ );
+
$this->add_control(
'image_opacity',
[
'label' => __( 'Opacity', 'elementor' ),
'type' => Controls_Manager::SLIDER,
- 'default' => [
- 'size' => 1,
- ],
'range' => [
'px' => [
'max' => 1,
],
],
'selectors' => [
- '{{WRAPPER}} .elementor-image-box-wrapper .elementor-image-box-img img' => 'opacity: {{SIZE}};',
+ '{{WRAPPER}} .elementor-image-box-img img' => 'opacity: {{SIZE}};',
],
]
);
$this->add_control(
- 'hover_animation',
+ 'background_hover_transition',
[
- 'label' => __( 'Hover Animation', 'elementor' ),
- 'type' => Controls_Manager::HOVER_ANIMATION,
+ 'label' => __( 'Transition Duration', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'default' => [
+ 'size' => 0.3,
+ ],
+ 'range' => [
+ 'px' => [
+ 'max' => 3,
+ 'step' => 0.1,
+ ],
+ ],
+ 'selectors' => [
+ '{{WRAPPER}} .elementor-image-box-img img' => 'transition-duration: {{SIZE}}s',
+ ],
+ ]
+ );
+
+ $this->end_controls_tab();
+
+ $this->start_controls_tab( 'hover',
+ [
+ 'label' => __( 'Hover', 'elementor' ),
+ ]
+ );
+
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters_hover',
+ 'selector' => '{{WRAPPER}}:hover .elementor-image-box-img img',
+ ]
+ );
+
+ $this->add_control(
+ 'image_opacity_hover',
+ [
+ 'label' => __( 'Opacity', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'range' => [
+ 'px' => [
+ 'max' => 1,
+ 'min' => 0.10,
+ 'step' => 0.01,
+ ],
+ ],
+ 'selectors' => [
+ '{{WRAPPER}}:hover .elementor-image-box-img img' => 'opacity: {{SIZE}};',
+ ],
]
);
+ $this->end_controls_tab();
+
+ $this->end_controls_tabs();
+
$this->end_controls_section();
$this->start_controls_section(
return 'eicon-slider-push';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'image', 'photo', 'visual', 'carousel', 'slider' ];
+ }
+
/**
* Retrieve the list of scripts the image carousel widget depended on.
*
return 'eicon-gallery-grid';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'image', 'photo', 'visual', 'gallery' ];
+ }
+
/**
* Add lightbox data to image link.
*
return [ 'basic' ];
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'image', 'photo', 'visual' ];
+ }
+
/**
* Register image widget controls.
*
]
);
+ $this->add_control(
+ 'separator_panel_style',
+ [
+ 'type' => Controls_Manager::DIVIDER,
+ 'style' => 'thick',
+ ]
+ );
+
+ $this->start_controls_tabs( 'image_effects' );
+
+ $this->start_controls_tab( 'normal',
+ [
+ 'label' => __( 'Normal', 'elementor' ),
+ ]
+ );
+
$this->add_control(
'opacity',
[
]
);
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters',
+ 'selector' => '{{WRAPPER}} .elementor-image img',
+ ]
+ );
+
+ $this->end_controls_tab();
+
+ $this->start_controls_tab( 'hover',
+ [
+ 'label' => __( 'Hover', 'elementor' ),
+ ]
+ );
+
+ $this->add_control(
+ 'opacity_hover',
+ [
+ 'label' => __( 'Opacity', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'range' => [
+ 'px' => [
+ 'max' => 1,
+ 'min' => 0.10,
+ 'step' => 0.01,
+ ],
+ ],
+ 'selectors' => [
+ '{{WRAPPER}} .elementor-image:hover img' => 'opacity: {{SIZE}};',
+ ],
+ ]
+ );
+
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters_hover',
+ 'selector' => '{{WRAPPER}} .elementor-image:hover img',
+ ]
+ );
+
+ $this->add_control(
+ 'background_hover_transition',
+ [
+ 'label' => __( 'Transition Duration', 'elementor' ),
+ 'type' => Controls_Manager::SLIDER,
+ 'range' => [
+ 'px' => [
+ 'max' => 3,
+ 'step' => 0.1,
+ ],
+ ],
+ 'selectors' => [
+ '{{WRAPPER}} .elementor-image img' => 'transition-duration: {{SIZE}}s',
+ ],
+ ]
+ );
+
$this->add_control(
'hover_animation',
[
]
);
+ $this->end_controls_tab();
+
+ $this->end_controls_tabs();
+
$this->add_group_control(
Group_Control_Border::get_type(),
[
[
'label' => __( 'Caption', 'elementor' ),
'tab' => Controls_Manager::TAB_STYLE,
+ 'condition' => [
+ 'caption!' => '',
+ ],
]
);
return 'eicon-anchor';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'menu', 'anchor', 'link' ];
+ }
+
/**
* Register menu anchor widget controls.
*
return 'eicon-skill-bar';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'progress', 'bar' ];
+ }
+
/**
* Register progress widget controls.
*
[
'label' => __( 'Title', 'elementor' ),
'type' => Controls_Manager::TEXT,
+ 'dynamic' => [
+ 'active' => true,
+ ],
'placeholder' => __( 'Enter your title', 'elementor' ),
'default' => __( 'My Skill', 'elementor' ),
'label_block' => true,
[
'label' => __( 'Inner Text', 'elementor' ),
'type' => Controls_Manager::TEXT,
+ 'dynamic' => [
+ 'active' => true,
+ ],
'placeholder' => __( 'e.g. Web Designer', 'elementor' ),
'default' => __( 'Web Designer', 'elementor' ),
'label_block' => true,
'data-max' => $settings['percent']['size'],
] );
+ $this->add_render_attribute( 'inner_text', [
+ 'class' => 'elementor-progress-text',
+ ] );
+
+ $this->add_inline_editing_attributes( 'inner_text' );
+
if ( ! empty( $settings['title'] ) ) { ?>
<span class="elementor-title"><?php echo $settings['title']; ?></span>
<?php } ?>
<div <?php echo $this->get_render_attribute_string( 'wrapper' ); ?>>
<div <?php echo $this->get_render_attribute_string( 'progress-bar' ); ?>>
- <span class="elementor-progress-text"><?php echo $settings['inner_text']; ?></span>
+ <span <?php echo $this->get_render_attribute_string( 'inner_text' ); ?>><?php echo $settings['inner_text']; ?></span>
<?php if ( 'hide' !== $settings['display_percentage'] ) { ?>
<span class="elementor-progress-percentage"><?php echo $settings['percent']['size']; ?>%</span>
<?php } ?>
</div>
</div>
- <?php
+ <?php
}
/**
'aria-valuenow': settings.percent.size,
'aria-valuetext': settings.inner_text
} );
- view.addInlineEditingAttributes( 'progressWrapper' );
+
+ view.addRenderAttribute( 'inner_text', {
+ 'class': 'elementor-progress-text'
+ } );
+
+ view.addInlineEditingAttributes( 'inner_text' );
#>
<# if ( settings.title ) { #>
- <span class="elementor-title">{{{ settings.title }}}</span><#
+ <span class="elementor-title">{{{ settings.title }}}</span><#
} #>
<div {{{ view.getRenderAttributeString( 'progressWrapper' ) }}}>
<div class="elementor-progress-bar" data-max="{{ settings.percent.size }}">
- <span class="elementor-progress-text">{{{ settings.inner_text }}}</span>
- <# if ( 'hide' !== settings.display_percentage ) { #>
- <span class="elementor-progress-percentage">{{{ settings.percent.size }}}%</span>
- <# } #>
+ <span {{{ view.getRenderAttributeString( 'inner_text' ) }}}>{{{ settings.inner_text }}}</span>
+ <# if ( 'hide' !== settings.display_percentage ) { #>
+ <span class="elementor-progress-percentage">{{{ settings.percent.size }}}%</span>
+ <# } #>
</div>
</div>
<?php
return 'eicon-shortcode';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'shortcode', 'code' ];
+ }
+
/**
* Whether the reload preview is required or not.
*
[
'label' => __( 'Enter your shortcode', 'elementor' ),
'type' => Controls_Manager::TEXTAREA,
+ 'dynamic' => [
+ 'active' => true,
+ ],
'placeholder' => '[gallery id="123" size="medium"]',
'default' => '',
]
* @access protected
*/
protected function render() {
- $shortcode = $this->get_settings( 'shortcode' );
+ $shortcode = $this->get_settings_for_display( 'shortcode' );
$shortcode = do_shortcode( shortcode_unautop( $shortcode ) );
?>
return 'eicon-sidebar';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'sidebar', 'widget' ];
+ }
+
/**
* Register sidebar widget controls.
*
return 'eicon-social-icons';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'social', 'icon', 'link' ];
+ }
+
/**
* Register social icons widget controls.
*
]
);
+ $repeater = new Repeater();
+
+ $repeater->add_control(
+ 'social',
+ [
+ 'label' => __( 'Icon', 'elementor' ),
+ 'type' => Controls_Manager::ICON,
+ 'label_block' => true,
+ 'default' => 'fa fa-wordpress',
+ 'include' => [
+ 'fa fa-android',
+ 'fa fa-apple',
+ 'fa fa-behance',
+ 'fa fa-bitbucket',
+ 'fa fa-codepen',
+ 'fa fa-delicious',
+ 'fa fa-digg',
+ 'fa fa-dribbble',
+ 'fa fa-envelope',
+ 'fa fa-facebook',
+ 'fa fa-flickr',
+ 'fa fa-foursquare',
+ 'fa fa-github',
+ 'fa fa-google-plus',
+ 'fa fa-houzz',
+ 'fa fa-instagram',
+ 'fa fa-jsfiddle',
+ 'fa fa-linkedin',
+ 'fa fa-medium',
+ 'fa fa-meetup',
+ 'fa fa-mixcloud',
+ 'fa fa-odnoklassniki',
+ 'fa fa-pinterest',
+ 'fa fa-product-hunt',
+ 'fa fa-reddit',
+ 'fa fa-rss',
+ 'fa fa-shopping-cart',
+ 'fa fa-skype',
+ 'fa fa-slideshare',
+ 'fa fa-snapchat',
+ 'fa fa-soundcloud',
+ 'fa fa-spotify',
+ 'fa fa-stack-overflow',
+ 'fa fa-steam',
+ 'fa fa-stumbleupon',
+ 'fa fa-telegram',
+ 'fa fa-thumb-tack',
+ 'fa fa-tripadvisor',
+ 'fa fa-tumblr',
+ 'fa fa-twitch',
+ 'fa fa-twitter',
+ 'fa fa-vimeo',
+ 'fa fa-vk',
+ 'fa fa-weibo',
+ 'fa fa-weixin',
+ 'fa fa-whatsapp',
+ 'fa fa-wordpress',
+ 'fa fa-xing',
+ 'fa fa-yelp',
+ 'fa fa-youtube',
+ 'fa fa-500px',
+ ],
+ ]
+ );
+
+ $repeater->add_control(
+ 'link',
+ [
+ 'label' => __( 'Link', 'elementor' ),
+ 'type' => Controls_Manager::URL,
+ 'label_block' => true,
+ 'default' => [
+ 'is_external' => 'true',
+ ],
+ 'placeholder' => __( 'https://your-link.com', 'elementor' ),
+ ]
+ );
+
$this->add_control(
'social_icon_list',
[
'label' => __( 'Social Icons', 'elementor' ),
'type' => Controls_Manager::REPEATER,
+ 'fields' => $repeater->get_controls(),
'default' => [
[
'social' => 'fa fa-facebook',
'social' => 'fa fa-google-plus',
],
],
- 'fields' => [
- [
- 'name' => 'social',
- 'label' => __( 'Icon', 'elementor' ),
- 'type' => Controls_Manager::ICON,
- 'label_block' => true,
- 'default' => 'fa fa-wordpress',
- 'include' => [
- 'fa fa-apple',
- 'fa fa-behance',
- 'fa fa-bitbucket',
- 'fa fa-codepen',
- 'fa fa-delicious',
- 'fa fa-digg',
- 'fa fa-dribbble',
- 'fa fa-envelope',
- 'fa fa-facebook',
- 'fa fa-flickr',
- 'fa fa-foursquare',
- 'fa fa-github',
- 'fa fa-google-plus',
- 'fa fa-houzz',
- 'fa fa-instagram',
- 'fa fa-jsfiddle',
- 'fa fa-linkedin',
- 'fa fa-medium',
- 'fa fa-odnoklassniki',
- 'fa fa-meetup',
- 'fa fa-pinterest',
- 'fa fa-product-hunt',
- 'fa fa-reddit',
- 'fa fa-rss',
- 'fa fa-shopping-cart',
- 'fa fa-skype',
- 'fa fa-slideshare',
- 'fa fa-snapchat',
- 'fa fa-soundcloud',
- 'fa fa-spotify',
- 'fa fa-stack-overflow',
- 'fa fa-steam',
- 'fa fa-stumbleupon',
- 'fa fa-telegram',
- 'fa fa-tripadvisor',
- 'fa fa-tumblr',
- 'fa fa-twitch',
- 'fa fa-twitter',
- 'fa fa-vimeo',
- 'fa fa-vk',
- 'fa fa-weibo',
- 'fa fa-weixin',
- 'fa fa-whatsapp',
- 'fa fa-wordpress',
- 'fa fa-xing',
- 'fa fa-yelp',
- 'fa fa-youtube',
- 'fa fa-500px',
- ],
- ],
- [
- 'name' => 'link',
- 'label' => __( 'Link', 'elementor' ),
- 'type' => Controls_Manager::URL,
- 'label_block' => true,
- 'default' => [
- 'is_external' => 'true',
- ],
- 'placeholder' => __( 'https://your-link.com', 'elementor' ),
- ],
- ],
'title_field' => '<i class="{{ social }}"></i> {{{ social.replace( \'fa fa-\', \'\' ).replace( \'-\', \' \' ).replace( /\b\w/g, function( letter ){ return letter.toUpperCase() } ) }}}',
]
);
'icon_color' => 'custom',
],
'selectors' => [
- '{{WRAPPER}} .elementor-social-icon' => 'background-color: {{VALUE}};',
+ '{{WRAPPER}} .elementor-social-icon:not(:hover)' => 'background-color: {{VALUE}};',
],
]
);
'icon_color' => 'custom',
],
'selectors' => [
- '{{WRAPPER}} .elementor-social-icon i' => 'color: {{VALUE}};',
+ '{{WRAPPER}} .elementor-social-icon:not(:hover) i' => 'color: {{VALUE}};',
],
]
);
return [ 'basic' ];
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'space' ];
+ }
+
/**
* Register spacer widget controls.
*
return 'eicon-tabs';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'tabs', 'accordion', 'toggle' ];
+ }
+
/**
* Register tabs widget controls.
*
]
);
+ $repeater = new Repeater();
+
+ $repeater->add_control(
+ 'tab_title',
+ [
+ 'label' => __( 'Title & Content', 'elementor' ),
+ 'type' => Controls_Manager::TEXT,
+ 'default' => __( 'Tab Title', 'elementor' ),
+ 'placeholder' => __( 'Tab Title', 'elementor' ),
+ 'label_block' => true,
+ ]
+ );
+
+ $repeater->add_control(
+ 'tab_content',
+ [
+ 'label' => __( 'Content', 'elementor' ),
+ 'default' => __( 'Tab Content', 'elementor' ),
+ 'placeholder' => __( 'Tab Content', 'elementor' ),
+ 'type' => Controls_Manager::WYSIWYG,
+ 'show_label' => false,
+ ]
+ );
+
$this->add_control(
'tabs',
[
'label' => __( 'Tabs Items', 'elementor' ),
'type' => Controls_Manager::REPEATER,
+ 'fields' => $repeater->get_controls(),
'default' => [
[
'tab_title' => __( 'Tab #1', 'elementor' ),
- 'tab_content' => __( 'I am tab content. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
+ 'tab_content' => __( 'Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
],
[
'tab_title' => __( 'Tab #2', 'elementor' ),
- 'tab_content' => __( 'I am tab content. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
- ],
- ],
- 'fields' => [
- [
- 'name' => 'tab_title',
- 'label' => __( 'Title & Content', 'elementor' ),
- 'type' => Controls_Manager::TEXT,
- 'default' => __( 'Tab Title', 'elementor' ),
- 'placeholder' => __( 'Tab Title', 'elementor' ),
- 'label_block' => true,
- ],
- [
- 'name' => 'tab_content',
- 'label' => __( 'Content', 'elementor' ),
- 'default' => __( 'Tab Content', 'elementor' ),
- 'placeholder' => __( 'Tab Content', 'elementor' ),
- 'type' => Controls_Manager::WYSIWYG,
- 'show_label' => false,
+ 'tab_content' => __( 'Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
],
],
'title_field' => '{{{ tab_title }}}',
return 'eicon-testimonial';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'testimonial', 'blockquote' ];
+ }
/**
* Register testimonial widget controls.
'testimonial_image[url]!' => '',
],
'separator' => 'before',
+ 'style_transfer' => true,
]
);
],
],
'label_block' => false,
+ 'style_transfer' => true,
]
);
</div>
<?php endif; ?>
</div>
- <?php
+ <?php
}
/**
</div>
</div>
</div>
- <?php
+ <?php
}
}
return [ 'basic' ];
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'text', 'editor' ];
+ }
+
/**
* Register text editor widget controls.
*
'dynamic' => [
'active' => true,
],
- 'default' => __( 'I am text block. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
+ 'default' => __( 'Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
]
);
$this->add_control(
- 'drop_cap',[
+ 'drop_cap', [
'label' => __( 'Drop Cap', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
'label_off' => __( 'Off', 'elementor' ),
);
$this->add_control(
- 'drop_cap_border_width',[
+ 'drop_cap_border_width', [
'label' => __( 'Border Width', 'elementor' ),
'type' => Controls_Manager::DIMENSIONS,
'selectors' => [
return 'eicon-toggle';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'tabs', 'accordion', 'toggle' ];
+ }
+
/**
* Register toggle widget controls.
*
]
);
+ $repeater = new Repeater();
+
+ $repeater->add_control(
+ 'tab_title',
+ [
+ 'label' => __( 'Title & Content', 'elementor' ),
+ 'type' => Controls_Manager::TEXT,
+ 'default' => __( 'Toggle Title', 'elementor' ),
+ 'label_block' => true,
+ ]
+ );
+
+ $repeater->add_control(
+ 'tab_content',
+ [
+ 'label' => __( 'Content', 'elementor' ),
+ 'type' => Controls_Manager::WYSIWYG,
+ 'default' => __( 'Toggle Content', 'elementor' ),
+ 'show_label' => false,
+ ]
+ );
+
$this->add_control(
'tabs',
[
'label' => __( 'Toggle Items', 'elementor' ),
'type' => Controls_Manager::REPEATER,
+ 'fields' => $repeater->get_controls(),
'default' => [
[
'tab_title' => __( 'Toggle #1', 'elementor' ),
- 'tab_content' => __( 'I am item content. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
+ 'tab_content' => __( 'Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
],
[
'tab_title' => __( 'Toggle #2', 'elementor' ),
- 'tab_content' => __( 'I am item content. Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
- ],
- ],
- 'fields' => [
- [
- 'name' => 'tab_title',
- 'label' => __( 'Title & Content', 'elementor' ),
- 'type' => Controls_Manager::TEXT,
- 'default' => __( 'Toggle Title' , 'elementor' ),
- 'label_block' => true,
- ],
- [
- 'name' => 'tab_content',
- 'label' => __( 'Content', 'elementor' ),
- 'type' => Controls_Manager::WYSIWYG,
- 'default' => __( 'Toggle Content', 'elementor' ),
- 'show_label' => false,
+ 'tab_content' => __( 'Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.', 'elementor' ),
],
],
'title_field' => '{{{ tab_title }}}',
]
);
- $this->add_control(
- 'title_html_tag',
- [
- 'label' => __( 'Title HTML Tag', 'elementor' ),
- 'type' => Controls_Manager::SELECT,
- 'options' => [
- 'h1' => 'H1',
- 'h2' => 'H2',
- 'h3' => 'H3',
- 'h4' => 'H4',
- 'h5' => 'H5',
- 'h6' => 'H6',
- 'div' => 'div',
- ],
- 'default' => 'div',
- 'separator' => 'before',
- ]
- );
-
$this->add_control(
'icon',
[
'label' => __( 'Icon', 'elementor' ),
'type' => Controls_Manager::ICON,
'default' => is_rtl() ? 'fa fa-caret-left' : 'fa fa-caret-right',
- 'label_block' => true,
+ 'separator' => 'before',
]
);
'label' => __( 'Active Icon', 'elementor' ),
'type' => Controls_Manager::ICON,
'default' => 'fa fa-caret-up',
- 'label_block' => true,
'condition' => [
'icon!' => '',
],
]
);
+ $this->add_control(
+ 'title_html_tag',
+ [
+ 'label' => __( 'Title HTML Tag', 'elementor' ),
+ 'type' => Controls_Manager::SELECT,
+ 'options' => [
+ 'h1' => 'H1',
+ 'h2' => 'H2',
+ 'h3' => 'H3',
+ 'h4' => 'H4',
+ 'h5' => 'H5',
+ 'h6' => 'H6',
+ 'div' => 'div',
+ ],
+ 'default' => 'div',
+ 'separator' => 'before',
+ ]
+ );
+
$this->end_controls_section();
$this->start_controls_section(
return [ 'basic' ];
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'video', 'player', 'embed', 'youtube', 'vimeo', 'dailymotion' ];
+ }
+
/**
* Register video widget controls.
*
$this->add_control(
'video_type',
[
- 'label' => __( 'Video Type', 'elementor' ),
+ 'label' => __( 'Source', 'elementor' ),
'type' => Controls_Manager::SELECT,
'default' => 'youtube',
'options' => [
'youtube' => __( 'YouTube', 'elementor' ),
'vimeo' => __( 'Vimeo', 'elementor' ),
+ 'dailymotion' => __( 'Dailymotion', 'elementor' ),
+ 'hosted' => __( 'Self Hosted', 'elementor' ),
],
]
);
$this->add_control(
- 'link',
+ 'youtube_url',
[
- 'label' => __( 'Link', 'elementor' ),
+ 'label' => __( 'URL', 'elementor' ),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
'categories' => [
TagsModule::POST_META_CATEGORY,
+ TagsModule::URL_CATEGORY,
],
],
- 'placeholder' => __( 'Enter your YouTube link', 'elementor' ),
+ 'placeholder' => __( 'Enter your URL', 'elementor' ) . ' (YouTube)',
'default' => 'https://www.youtube.com/watch?v=9uOETcuFjbE',
'label_block' => true,
'condition' => [
);
$this->add_control(
- 'vimeo_link',
+ 'vimeo_url',
[
- 'label' => __( 'Link', 'elementor' ),
+ 'label' => __( 'URL', 'elementor' ),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
'categories' => [
TagsModule::POST_META_CATEGORY,
+ TagsModule::URL_CATEGORY,
],
],
- 'placeholder' => __( 'Enter your Vimeo link', 'elementor' ),
+ 'placeholder' => __( 'Enter your URL', 'elementor' ) . ' (Vimeo)',
'default' => 'https://vimeo.com/235215203',
'label_block' => true,
'condition' => [
);
$this->add_control(
- 'hosted_link',
+ 'dailymotion_url',
[
- 'label' => __( 'Link', 'elementor' ),
+ 'label' => __( 'URL', 'elementor' ),
'type' => Controls_Manager::TEXT,
'dynamic' => [
'active' => true,
'categories' => [
TagsModule::POST_META_CATEGORY,
+ TagsModule::URL_CATEGORY,
],
],
- 'placeholder' => __( 'Enter your video link', 'elementor' ),
- 'default' => '',
+ 'placeholder' => __( 'Enter your URL', 'elementor' ) . ' (Dailymotion)',
+ 'default' => 'https://www.dailymotion.com/video/x6koazf',
'label_block' => true,
+ 'condition' => [
+ 'video_type' => 'dailymotion',
+ ],
+ ]
+ );
+
+ $this->add_control(
+ 'hosted_url',
+ [
+ 'label' => __( 'URL', 'elementor' ),
+ 'type' => Controls_Manager::MEDIA,
+ 'dynamic' => [
+ 'active' => true,
+ 'categories' => [
+ TagsModule::POST_META_CATEGORY,
+ TagsModule::MEDIA_CATEGORY,
+ ],
+ ],
+ 'media_type' => 'video',
'condition' => [
'video_type' => 'hosted',
],
);
$this->add_control(
- 'heading_youtube',
+ 'start',
+ [
+ 'label' => __( 'Start Time', 'elementor' ),
+ 'type' => Controls_Manager::NUMBER,
+ 'description' => __( 'Specify a start time (in seconds)', 'elementor' ),
+ 'condition' => [
+ 'loop' => '',
+ ],
+ ]
+ );
+
+ $this->add_control(
+ 'end',
+ [
+ 'label' => __( 'End Time', 'elementor' ),
+ 'type' => Controls_Manager::NUMBER,
+ 'description' => __( 'Specify an end time (in seconds)', 'elementor' ),
+ 'condition' => [
+ 'loop' => '',
+ 'video_type' => [ 'youtube', 'hosted' ],
+ ],
+ ]
+ );
+
+ $this->add_control(
+ 'video_options',
[
'label' => __( 'Video Options', 'elementor' ),
'type' => Controls_Manager::HEADING,
]
);
- // YouTube.
$this->add_control(
- 'yt_autoplay',
+ 'autoplay',
[
'label' => __( 'Autoplay', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
- 'condition' => [
- 'video_type' => 'youtube',
- ],
]
);
$this->add_control(
- 'yt_rel',
+ 'mute',
[
- 'label' => __( 'Suggested Videos', 'elementor' ),
+ 'label' => __( 'Mute', 'elementor' ),
+ 'type' => Controls_Manager::SWITCHER,
+ ]
+ );
+
+ $this->add_control(
+ 'loop',
+ [
+ 'label' => __( 'Loop', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'Hide', 'elementor' ),
- 'label_on' => __( 'Show', 'elementor' ),
'condition' => [
- 'video_type' => 'youtube',
+ 'video_type!' => 'dailymotion',
],
]
);
$this->add_control(
- 'yt_controls',
+ 'controls',
[
- 'label' => __( 'Player Control', 'elementor' ),
+ 'label' => __( 'Player Controls', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
'label_off' => __( 'Hide', 'elementor' ),
'label_on' => __( 'Show', 'elementor' ),
'default' => 'yes',
'condition' => [
- 'video_type' => 'youtube',
+ 'video_type!' => 'vimeo',
],
]
);
$this->add_control(
- 'yt_showinfo',
+ 'showinfo',
[
- 'label' => __( 'Player Title & Actions', 'elementor' ),
+ 'label' => __( 'Video Info', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
'label_off' => __( 'Hide', 'elementor' ),
'label_on' => __( 'Show', 'elementor' ),
'default' => 'yes',
'condition' => [
- 'video_type' => 'youtube',
+ 'video_type' => [ 'youtube', 'dailymotion' ],
],
]
);
$this->add_control(
- 'yt_mute',
+ 'modestbranding',
[
- 'label' => __( 'Mute', 'elementor' ),
+ 'label' => __( 'Modest Branding', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
'condition' => [
- 'video_type' => 'youtube',
+ 'video_type' => [ 'youtube' ],
+ 'controls' => 'yes',
],
]
);
$this->add_control(
- 'yt_privacy',
+ 'logo',
[
- 'label' => __( 'Privacy Mode', 'elementor' ),
+ 'label' => __( 'Logo', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
- 'description' => __( 'When you turn on privacy mode, YouTube won\'t store information about visitors on your website unless they play the video.', 'elementor' ),
+ 'label_off' => __( 'Hide', 'elementor' ),
+ 'label_on' => __( 'Show', 'elementor' ),
+ 'default' => 'yes',
'condition' => [
- 'video_type' => 'youtube',
+ 'video_type' => [ 'dailymotion' ],
],
]
);
- // Vimeo.
$this->add_control(
- 'vimeo_autoplay',
+ 'color',
[
- 'label' => __( 'Autoplay', 'elementor' ),
+ 'label' => __( 'Controls Color', 'elementor' ),
+ 'type' => Controls_Manager::COLOR,
+ 'default' => '',
+ 'condition' => [
+ 'video_type' => [ 'vimeo', 'dailymotion' ],
+ ],
+ ]
+ );
+
+ // YouTube.
+ $this->add_control(
+ 'rel',
+ [
+ 'label' => __( 'Suggested Videos', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
+ 'label_off' => __( 'Hide', 'elementor' ),
+ 'label_on' => __( 'Show', 'elementor' ),
'condition' => [
- 'video_type' => 'vimeo',
+ 'video_type' => 'youtube',
],
]
);
$this->add_control(
- 'vimeo_loop',
+ 'yt_privacy',
[
- 'label' => __( 'Loop', 'elementor' ),
+ 'label' => __( 'Privacy Mode', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
+ 'description' => __( 'When you turn on privacy mode, YouTube won\'t store information about visitors on your website unless they play the video.', 'elementor' ),
'condition' => [
- 'video_type' => 'vimeo',
+ 'video_type' => 'youtube',
],
]
);
+ // Vimeo.
$this->add_control(
'vimeo_title',
[
);
$this->add_control(
- 'vimeo_color',
+ 'download_button',
[
- 'label' => __( 'Controls Color', 'elementor' ),
- 'type' => Controls_Manager::COLOR,
- 'default' => '',
+ 'label' => __( 'Download Button', 'elementor' ),
+ 'type' => Controls_Manager::SWITCHER,
+ 'label_off' => __( 'Hide', 'elementor' ),
+ 'label_on' => __( 'Show', 'elementor' ),
'condition' => [
- 'video_type' => 'vimeo',
+ 'video_type' => 'hosted',
],
]
);
'default' => [
'url' => Utils::get_placeholder_image_src(),
],
+ 'dynamic' => [
+ 'active' => true,
+ ],
'condition' => [
'show_image_overlay' => 'yes',
],
]
);
+ $this->add_control(
+ 'lazy_load',
+ [
+ 'label' => __( 'Lazy Load', 'elementor' ),
+ 'type' => Controls_Manager::SWITCHER,
+ 'condition' => [
+ 'show_image_overlay' => 'yes',
+ 'video_type!' => 'hosted',
+ ],
+ ]
+ );
+
$this->add_group_control(
Group_Control_Image_Size::get_type(),
[
'label' => __( 'Play Icon', 'elementor' ),
'type' => Controls_Manager::SWITCHER,
'default' => 'yes',
- 'label_off' => __( 'No', 'elementor' ),
- 'label_on' => __( 'Yes', 'elementor' ),
- 'return_value' => 'yes',
'condition' => [
'show_image_overlay' => 'yes',
'image_overlay[url]!' => '',
'type' => Controls_Manager::SELECT,
'options' => [
'169' => '16:9',
+ '219' => '21:9',
'43' => '4:3',
'32' => '3:2',
],
]
);
+ $this->add_group_control(
+ Group_Control_Css_Filter::get_type(),
+ [
+ 'name' => 'css_filters',
+ 'selector' => '{{WRAPPER}} .elementor-wrapper',
+ ]
+ );
+
$this->add_control(
'play_icon_title',
[
'show_image_overlay' => 'yes',
'show_play_icon' => 'yes',
],
+ 'separator' => 'before',
]
);
'selectors' => [
'{{WRAPPER}} .elementor-custom-embed-play i' => 'color: {{VALUE}}',
],
- 'separator' => 'before',
'condition' => [
'show_image_overlay' => 'yes',
'show_play_icon' => 'yes',
[
'label' => __( 'Content Width', 'elementor' ),
'type' => Controls_Manager::SLIDER,
- 'units' => [ '%' ],
'default' => [
'unit' => '%',
],
protected function render() {
$settings = $this->get_settings_for_display();
- $video_link = 'youtube' === $settings['video_type'] ? $settings['link'] : $settings['vimeo_link'];
+ $video_url = $settings[ $settings['video_type'] . '_url' ];
+
+ if ( 'hosted' === $settings['video_type'] ) {
+ $video_url = $this->get_hosted_video_url();
+ }
- if ( empty( $video_link ) ) {
+ if ( empty( $video_url ) ) {
return;
}
- $embed_params = $this->get_embed_params();
+ if ( 'hosted' === $settings['video_type'] ) {
+ ob_start();
- $embed_options = [
- 'privacy' => $settings['yt_privacy'],
- ];
+ $this->render_hosted_video();
- $video_html = Embed::get_embed_html( $video_link, $embed_params, $embed_options );
+ $video_html = ob_get_clean();
+ } else {
+ $embed_params = $this->get_embed_params();
+
+ $embed_options = $this->get_embed_options();
+
+ $video_html = Embed::get_embed_html( $video_url, $embed_params, $embed_options );
+ }
if ( empty( $video_html ) ) {
- echo esc_url( $video_link );
+ echo esc_url( $video_url );
return;
}
$this->add_render_attribute( 'image-overlay', 'class', 'elementor-custom-embed-image-overlay' );
if ( $settings['lightbox'] ) {
+ if ( 'hosted' === $settings['video_type'] ) {
+ $lightbox_url = $video_url;
+ } else {
+ $lightbox_url = Embed::get_embed_url( $video_url, $embed_params, $embed_options );
+ }
+
$lightbox_options = [
'type' => 'video',
- 'url' => Embed::get_embed_url( $video_link, $embed_params, $embed_options ),
+ 'videoType' => $settings['video_type'],
+ 'url' => $lightbox_url,
'modalOptions' => [
'id' => 'elementor-lightbox-' . $this->get_id(),
'entranceAnimation' => $settings['lightbox_content_animation'],
],
];
+ if ( 'hosted' === $settings['video_type'] ) {
+ $lightbox_options['videoParams'] = $this->get_hosted_params();
+ }
+
$this->add_render_attribute( 'image-overlay', [
'data-elementor-open-lightbox' => 'yes',
'data-elementor-lightbox' => wp_json_encode( $lightbox_options ),
</div>
<?php } ?>
</div>
- <?php
+ <?php
}
/**
*/
public function render_plain_content() {
$settings = $this->get_settings_for_display();
- $url = 'youtube' === $settings['video_type'] ? $settings['link'] : $settings['vimeo_link'];
+
+ $url = $settings[ $settings['video_type'] . '_url' ];
echo esc_url( $url );
}
$params = [];
- if ( 'youtube' === $settings['video_type'] ) {
- $youtube_options = [ 'autoplay', 'rel', 'controls', 'showinfo', 'mute' ];
+ if ( $settings['autoplay'] && ! $this->has_image_overlay() ) {
+ $params['autoplay'] = '1';
+ }
- foreach ( $youtube_options as $option ) {
- if ( 'autoplay' === $option && $this->has_image_overlay() ) {
- continue;
- }
+ $params_dictionary = [];
- $value = ( 'yes' === $settings[ 'yt_' . $option ] ) ? '1' : '0';
- $params[ $option ] = $value;
+ if ( 'youtube' === $settings['video_type'] ) {
+ $params_dictionary = [
+ 'loop',
+ 'controls',
+ 'mute',
+ 'showinfo',
+ 'rel',
+ 'modestbranding',
+ ];
+
+ if ( $settings['loop'] ) {
+ $video_properties = Embed::get_video_properties( $settings['youtube_url'] );
+
+ $params['playlist'] = $video_properties['video_id'];
}
+ $params['start'] = $settings['start'];
+
+ $params['end'] = $settings['end'];
+
$params['wmode'] = 'opaque';
- }
+ } elseif ( 'vimeo' === $settings['video_type'] ) {
+ $params_dictionary = [
+ 'loop',
+ 'mute' => 'muted',
+ 'vimeo_title' => 'title',
+ 'vimeo_portrait' => 'portrait',
+ 'vimeo_byline' => 'byline',
+ ];
- if ( 'vimeo' === $settings['video_type'] ) {
- $vimeo_options = [ 'autoplay', 'loop', 'title', 'portrait', 'byline' ];
+ $params['color'] = str_replace( '#', '', $settings['color'] );
- foreach ( $vimeo_options as $option ) {
- if ( 'autoplay' === $option && $this->has_image_overlay() ) {
- continue;
- }
+ $params['autopause'] = '0';
+ } elseif ( 'dailymotion' === $settings['video_type'] ) {
+ $params_dictionary = [
+ 'controls',
+ 'mute',
+ 'showinfo' => 'ui-start-screen-info',
+ 'logo' => 'ui-logo',
+ ];
+
+ $params['ui-highlight'] = str_replace( '#', '', $settings['color'] );
+
+ $params['start'] = $settings['start'];
+
+ $params['endscreen-enable'] = '0';
+ }
+
+ foreach ( $params_dictionary as $key => $param_name ) {
+ $setting_name = $param_name;
- $value = ( 'yes' === $settings[ 'vimeo_' . $option ] ) ? '1' : '0';
- $params[ $option ] = $value;
+ if ( is_string( $key ) ) {
+ $setting_name = $key;
}
- $params['color'] = str_replace( '#', '', $settings['vimeo_color'] );
+ $setting_value = $settings[ $setting_name ] ? '1' : '0';
- $params['autopause'] = '0';
+ $params[ $param_name ] = $setting_value;
}
return $params;
return ! empty( $settings['image_overlay']['url'] ) && 'yes' === $settings['show_image_overlay'];
}
+
+ private function get_embed_options() {
+ $settings = $this->get_settings_for_display();
+
+ $embed_options = [];
+
+ if ( 'youtube' === $settings['video_type'] ) {
+ $embed_options['privacy'] = $settings['yt_privacy'];
+ } elseif ( 'vimeo' === $settings['video_type'] ) {
+ $embed_options['start'] = $settings['start'];
+ }
+
+ $embed_options['lazy_load'] = ! empty( $settings['lazy_load'] );
+
+ return $embed_options;
+ }
+
+ private function get_hosted_params() {
+ $settings = $this->get_settings_for_display();
+
+ $video_params = [];
+
+ foreach ( [ 'autoplay', 'loop', 'controls' ] as $option_name ) {
+ if ( $settings[ $option_name ] ) {
+ $video_params[] = $option_name;
+ }
+ }
+
+ if ( $settings['mute'] ) {
+ $video_params[] = 'muted';
+ }
+
+ if ( ! $settings['download_button'] ) {
+ $video_params[] = 'controlsList="nodownload"';
+ }
+
+ return $video_params;
+ }
+
+ private function get_hosted_video_url() {
+ $settings = $this->get_settings_for_display();
+
+ $video_url = $settings['hosted_url']['url'];
+
+ if ( ! $video_url ) {
+ return '';
+ }
+
+ $video_url .= '#t=';
+
+ if ( $settings['start'] ) {
+ $video_url .= $settings['start'];
+ }
+
+ if ( $settings['end'] ) {
+ $video_url .= ',' . $settings['end'];
+ }
+
+ return $video_url;
+ }
+
+ private function render_hosted_video() {
+ $video_params = $this->get_hosted_params();
+
+ $video_url = $this->get_hosted_video_url();
+ ?>
+ <video class="elementor-video" src="<?php echo esc_url( $video_url ); ?>" <?php echo implode( ' ', $video_params ); ?>></video>
+ <?php
+ }
}
return 'eicon-wordpress';
}
+ /**
+ * Get widget keywords.
+ *
+ * Retrieve the list of keywords the widget belongs to.
+ *
+ * @since 2.1.0
+ * @access public
+ *
+ * @return array Widget keywords.
+ */
+ public function get_keywords() {
+ return [ 'wordpress', 'widget' ];
+ }
+
/**
* Whether the reload preview is required or not.
*
*/
const IMAGE_CATEGORY = 'image';
+ /**
+ * Dynamic tags media category.
+ */
+ const MEDIA_CATEGORY = 'media';
+
/**
* Dynamic tags post meta category.
*/
--- /dev/null
+<?php
+namespace Elementor\Modules\Gutenberg;
+
+use Elementor\Core\Base\Module as BaseModule;
+use Elementor\Plugin;
+use Elementor\User;
+use Elementor\Utils;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+class Module extends BaseModule {
+
+ protected $is_gutenberg_editor_active = false;
+
+ public function get_name() {
+ return 'gutenberg';
+ }
+
+ public static function is_active() {
+ return function_exists( 'the_gutenberg_project' );
+ }
+
+ public function register_elementor_rest_field() {
+ register_rest_field( get_post_types( '', 'names' ),
+ 'gutenberg_elementor_mode', [
+ 'update_callback' => function( $request_value, $object ) {
+ if ( ! User::is_current_user_can_edit( $object->ID ) ) {
+ return false;
+ }
+
+ Plugin::$instance->db->set_is_elementor_page( $object->ID, false );
+
+ return true;
+ },
+ ]
+ );
+ }
+
+ public function enqueue_assets() {
+ $post_id = get_the_ID();
+
+ if ( ! User::is_current_user_can_edit( $post_id ) ) {
+ return;
+ }
+
+ $this->is_gutenberg_editor_active = true;
+
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
+ wp_enqueue_script( 'elementor-gutenberg', ELEMENTOR_ASSETS_URL . 'js/gutenberg' . $suffix . '.js', [ 'jquery' ], ELEMENTOR_VERSION, true );
+
+ $elementor_settings = [
+ 'isElementorMode' => Plugin::$instance->db->is_built_with_elementor( $post_id ),
+ 'editLink' => Utils::get_edit_link( $post_id ),
+ ];
+
+ wp_localize_script( 'elementor-gutenberg', 'ElementorGutenbergSettings', $elementor_settings );
+ }
+
+ public function print_admin_js_template() {
+ if ( ! $this->is_gutenberg_editor_active ) {
+ return;
+ }
+
+ ?>
+ <script id="elementor-gutenberg-button-switch-mode" type="text/html">
+ <div id="elementor-switch-mode">
+ <button id="elementor-switch-mode-button" type="button" class="button button-primary button-large">
+ <span class="elementor-switch-mode-on"><?php echo __( '← Back to WordPress Editor', 'elementor' ); ?></span>
+ <span class="elementor-switch-mode-off">
+ <i class="eicon-elementor-square" aria-hidden="true"></i>
+ <?php echo __( 'Edit with Elementor', 'elementor' ); ?>
+ </span>
+ </button>
+ </div>
+ </script>
+
+ <script id="elementor-gutenberg-panel" type="text/html">
+ <div id="elementor-editor"><a id="elementor-go-to-edit-page-link" href="#">
+ <div id="elementor-editor-button" class="button button-primary button-hero">
+ <i class="eicon-elementor-square" aria-hidden="true"></i>
+ <?php echo __( 'Edit with Elementor', 'elementor' ); ?>
+ </div>
+ <div class="elementor-loader-wrapper">
+ <div class="elementor-loader">
+ <div class="elementor-loader-boxes">
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ <div class="elementor-loader-box"></div>
+ </div>
+ </div>
+ <div class="elementor-loading-title"><?php echo __( 'Loading', 'elementor' ); ?></div>
+ </div>
+ </a></div>
+ </script>
+ <?php
+ }
+
+ public function __construct() {
+ add_action( 'rest_api_init', [ $this, 'register_elementor_rest_field' ] );
+ add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue_assets' ] );
+ add_action( 'admin_footer', [ $this, 'print_admin_js_template' ] );
+ }
+}
// use beforeRender that runs after the collection is exist
onBeforeRender: function() {
if ( this.view.collection && ! this.listenerAttached ) {
- this.view.collection.on( 'update', this.saveCollectionHistory, this );
+ this.view.collection
+ .on( 'update', this.saveCollectionHistory, this )
+ .on( 'reset', this.onDeleteAllContent, this );
this.listenerAttached = true;
}
},
+ onDeleteAllContent: function( collection, event ) {
+ if ( ! elementor.history.history.getActive() ) {
+ // On Redo the History Listener is not active - stop here for better performance.
+ return;
+ }
+
+ var modelsJSON = [];
+
+ _.each( event.previousModels, function( model ) {
+ modelsJSON.push( model.toJSON( { copyHtmlCache: true } ) );
+ } );
+
+ var historyItem = {
+ type: 'remove',
+ elementType: 'section',
+ title: elementor.translate( 'all_content' ),
+ history: {
+ behavior: this,
+ collection: event.previousModels,
+ event: event,
+ models: modelsJSON
+ }
+ };
+
+ elementor.history.history.addItem( historyItem );
+ },
+
saveCollectionHistory: function( collection, event ) {
if ( ! elementor.history.history.getActive() ) {
+ // On Redo the History Listener is not active - stop here for better performance.
return;
}
add: function( models, toView, position ) {
if ( 'section' === models[0].elType ) {
_.each( models, function( model ) {
- model.dontFillEmpty = true;
+ model.allowEmpty = true;
} );
}
+ // Fix for case the iframe has been reloaded and the old `elementor-inner` is not exist.
+ if ( toView.$el.hasClass( 'elementor-inner' ) && toView.$el[0].ownerDocument !== elementor.$previewContents[0] ) {
+ toView = elementor.getPreviewView();
+ }
+
toView.addChildModel( models, { at: position, silent: 0 } );
},
didAction = false,
behavior;
- // Find the new behavior and work with him
- if ( history.behavior.view.model ) {
+ var BaseElementView = require( 'elementor-elements/views/base' );
+
+ // Find the new behavior and work with him.
+ if ( history.behavior.view instanceof BaseElementView ) {
var modelID = history.behavior.view.model.get( 'id' ),
view = elementor.history.history.findView( modelID );
if ( view ) {
} );
// Set at once.
- settings.set( restoredValues );
-
- // Trigger each field for `baseControl.onSettingsExternalChange`
- _.each( history.changed, function( values, key ) {
- settings.trigger( 'change:external:' + key );
- } );
+ settings.setExternalChange( restoredValues );
historyItem.set( 'status', isRedo ? 'not_applied' : 'applied' );
module.exports = Marionette.ItemView.extend( {
template: '#tmpl-elementor-panel-history-no-items',
id: 'elementor-panel-history-no-items',
- className: 'elementor-panel-nerd-box'
+ className: 'elementor-nerd-box'
} );
remove: elementor.translate( 'removed' ),
change: elementor.translate( 'edited' ),
move: elementor.translate( 'moved' ),
- duplicate: elementor.translate( 'duplicated' )
+ paste_style: elementor.translate( 'style_pasted' ),
+ reset_style: elementor.translate( 'style_reset' )
};
var addBehaviors = function( behaviors ) {
var addHotKeys = function() {
var H_KEY = 72,
+ Y_KEY = 89,
Z_KEY = 90;
- elementor.hotKeys.addHotKeyHandler( Z_KEY, 'historyNavigation', {
- isWorthHandling: function( event ) {
- return items.length && ! jQuery( event.target ).is( 'input, textarea, [contenteditable=true]' );
- },
- handle: function( event ) {
- navigate( Z_KEY === event.which && event.shiftKey );
- }
- } );
-
elementor.hotKeys.addHotKeyHandler( H_KEY, 'showHistoryPage', {
isWorthHandling: function( event ) {
return elementor.hotKeys.isControlEvent( event ) && event.shiftKey;
elementor.getPanelView().setPage( 'historyPage' );
}
} );
+
+ var navigationWorthHandling = function( event ) {
+ return items.length && elementor.hotKeys.isControlEvent( event ) && ! jQuery( event.target ).is( 'input, textarea, [contenteditable=true]' );
+ };
+
+ elementor.hotKeys.addHotKeyHandler( Y_KEY, 'historyNavigationRedo', {
+ isWorthHandling: navigationWorthHandling,
+ handle: function( event ) {
+ navigate( true );
+ }
+ } );
+
+ elementor.hotKeys.addHotKeyHandler( Z_KEY, 'historyNavigation', {
+ isWorthHandling: navigationWorthHandling,
+ handle: function( event ) {
+ navigate( event.shiftKey );
+ }
+ } );
};
var onPanelSave = function() {
.on( 'element:before:remove', self.startRemoveElement )
.on( 'element:after:remove', self.endItem )
- .on( 'element:before:duplicate', self.startDuplicateElement )
- .on( 'element:after:duplicate', self.endItem )
+ .on( 'element:before:paste:style', self.startPasteStyle )
+ .on( 'element:after:paste:style', self.endItem )
+
+ .on( 'element:before:reset:style', self.startResetStyle )
+ .on( 'element:after:reset:style', self.endItem )
.on( 'section:before:drop', self.startDropElement )
.on( 'section:after:drop', self.endItem )
// Try scroll to affected element.
if ( item instanceof Backbone.Model && item.get( 'items' ).length ) {
- var oldView = item.get( 'items' ).first().get( 'history' ).behavior.view;
- if ( oldView.model ) {
- viewToScroll = self.findView( oldView.model.get( 'id' ) ) ;
+ var history = item.get( 'items' ).first().get( 'history' );
+
+ if ( history && history.behavior.view.model ) {
+ viewToScroll = self.findView( history.behavior.view.model.get( 'id' ) ) ;
}
}
}
if ( viewToScroll && ! elementor.helpers.isInViewport( viewToScroll.$el[0], elementor.$previewContents.find( 'html' )[0] ) ) {
- elementor.helpers.scrollToView( viewToScroll );
+ elementor.helpers.scrollToView( viewToScroll.$el );
}
if ( item.get( 'editing_started' ) ) {
founded = false;
if ( ! views ) {
- views = elementor.sections.currentView.children;
+ views = elementor.getPreviewView().children;
}
_.each( views._views, function( view ) {
elementor.history.history.startItem( {
type: 'move',
title: self.getModelLabel( model ),
- elementType: model.get( 'elType' )
+ elementType: model.elType || model.get( 'elType' )
} );
};
} );
};
- this.startDuplicateElement = function( model ) {
+ this.startPasteStyle = function( model ) {
+ elementor.history.history.startItem( {
+ type: 'paste_style',
+ title: self.getModelLabel( model ),
+ elementType: model.get( 'elType' )
+ } );
+ };
+
+ this.startResetStyle = function( model ) {
elementor.history.history.startItem( {
- type: 'duplicate',
+ type: 'reset_style',
title: self.getModelLabel( model ),
elementType: model.get( 'elType' )
} );
module.exports = Marionette.ItemView.extend( {
template: '#tmpl-elementor-panel-revisions-no-revisions',
id: 'elementor-panel-revisions-no-revisions',
- className: 'elementor-panel-nerd-box'
+ className: 'elementor-nerd-box'
} );
this.setEditorData = function( data ) {
var collection = elementor.getRegion( 'sections' ).currentView.collection;
+ // Don't track in history.
+ elementor.history.history.setActive( false );
collection.reset( data );
+ elementor.history.history.setActive( true );
};
this.getRevisionDataAsync = function( id, options ) {
this.isRevisionApplied = true;
this.currentPreviewId = null;
+
+ elementor.history.history.getItems().reset();
},
onDiscardClick: function() {
'removed' => __( 'Removed', 'elementor' ),
'edited' => __( 'Edited', 'elementor' ),
'moved' => __( 'Moved', 'elementor' ),
- 'duplicated' => __( 'Duplicated', 'elementor' ),
'editing_started' => __( 'Editing Started', 'elementor' ),
+ 'style_pasted' => __( 'Style Pasted', 'elementor' ),
+ 'style_reset' => __( 'Style Reset', 'elementor' ),
+ 'all_content' => __( 'All Content', 'elementor' ),
],
] );
namespace Elementor\Modules\History;
use Elementor\Core\Base\Document;
+use Elementor\Core\Files\CSS\Post as Post_CSS;
use Elementor\Core\Settings\Manager;
use Elementor\Plugin;
-use Elementor\Post_CSS_File;
use Elementor\Utils;
if ( ! defined( 'ABSPATH' ) ) {
}
/**
- * @since 2.0.0
+ * @since 2.0.0
* @access public
* @static
+ *
+ * @param $post_content
+ * @param $post_id
+ *
+ * @return string
*/
- public static function avoid_delete_auto_save( $post_content ) {
- global $post;
-
+ public static function avoid_delete_auto_save( $post_content, $post_id ) {
// Add a temporary string in order the $post will not be equal to the $autosave
// in edit-form-advanced.php:210
- if ( Plugin::$instance->db->is_built_with_elementor( $post->ID ) ) {
+ if ( $post_id && Plugin::$instance->db->is_built_with_elementor( $post_id ) ) {
$post_content .= '<!-- Created with Elementor -->';
}
if ( ! isset( self::$authors[ $revision->post_author ] ) ) {
self::$authors[ $revision->post_author ] = [
'avatar' => get_avatar( $revision->post_author, 22 ),
- 'display_name' => get_the_author_meta( 'display_name' , $revision->post_author ),
+ 'display_name' => get_the_author_meta( 'display_name', $revision->post_author ),
];
}
* @static
*/
public static function update_autosave( $autosave_data ) {
- $revision_id = $autosave_data['ID'];
-
- Plugin::$instance->db->safe_copy_elementor_meta( $autosave_data['post_parent'], $revision_id );
+ self::save_revision( $autosave_data['ID'] );
}
/**
Plugin::$instance->db->copy_elementor_meta( $revision_id, $parent_id );
- $post_css = new Post_CSS_File( $parent_id );
+ $post_css = new Post_CSS( $parent_id );
$post_css->update();
}
'revisions_disabled_1' => __( 'It looks like the post revision feature is unavailable in your website.', 'elementor' ),
'revisions_disabled_2' => sprintf(
/* translators: %s: Codex URL */
- __( 'Learn more about <a targe="_blank" href="%s">WordPress revisions</a>', 'elementor' ),
+ __( 'Learn more about <a target="_blank" href="%s">WordPress revisions</a>', 'elementor' ),
'https://codex.wordpress.org/Revisions#Revision_Options'
),
],
add_action( 'wp_creating_autosave', [ __CLASS__, 'update_autosave' ] );
// Hack to avoid delete the auto-save revision in WP editor.
- add_filter( 'edit_post_content', [ __CLASS__, 'avoid_delete_auto_save' ] );
+ add_filter( 'edit_post_content', [ __CLASS__, 'avoid_delete_auto_save' ], 10, 2 );
add_action( 'edit_form_after_title', [ __CLASS__, 'remove_temp_post_content' ] );
if ( Utils::is_ajax() ) {
</script>
<script type="text/template" id="tmpl-elementor-panel-history-no-items">
- <i class="elementor-panel-nerd-box-icon eicon-nerd"></i>
- <div class="elementor-panel-nerd-box-title"><?php echo __( 'No History Yet', 'elementor' ); ?></div>
- <div class="elementor-panel-nerd-box-message"><?php echo __( 'Once you start working, you\'ll be able to redo / undo any action you make in the editor.', 'elementor' ); ?></div>
- <div class="elementor-panel-nerd-box-message"><?php echo __( 'Switch to Revisions tab for older versions', 'elementor' ); ?></div>
+ <i class="elementor-nerd-box-icon eicon-nerd"></i>
+ <div class="elementor-nerd-box-title"><?php echo __( 'No History Yet', 'elementor' ); ?></div>
+ <div class="elementor-nerd-box-message"><?php echo __( 'Once you start working, you\'ll be able to redo / undo any action you make in the editor.', 'elementor' ); ?></div>
+ <div class="elementor-nerd-box-message"><?php echo __( 'Switch to Revisions tab for older versions', 'elementor' ); ?></div>
</script>
<script type="text/template" id="tmpl-elementor-panel-history-item">
</script>
<script type="text/template" id="tmpl-elementor-panel-revisions-no-revisions">
- <i class="elementor-panel-nerd-box-icon eicon-nerd" aria-hidden="true"></i>
- <div class="elementor-panel-nerd-box-title"><?php echo __( 'No Revisions Saved Yet', 'elementor' ); ?></div>
- <div class="elementor-panel-nerd-box-message">{{{ elementor.translate( elementor.config.revisions_enabled ? 'no_revisions_1' : 'revisions_disabled_1' ) }}}</div>
- <div class="elementor-panel-nerd-box-message">{{{ elementor.translate( elementor.config.revisions_enabled ? 'no_revisions_2' : 'revisions_disabled_2' ) }}}</div>
+ <i class="elementor-nerd-box-icon eicon-nerd" aria-hidden="true"></i>
+ <div class="elementor-nerd-box-title"><?php echo __( 'No Revisions Saved Yet', 'elementor' ); ?></div>
+ <div class="elementor-nerd-box-message">{{{ elementor.translate( elementor.config.revisions_enabled ? 'no_revisions_1' : 'revisions_disabled_1' ) }}}</div>
+ <div class="elementor-nerd-box-message">{{{ elementor.translate( elementor.config.revisions_enabled ? 'no_revisions_2' : 'revisions_disabled_2' ) }}}</div>
</script>
<script type="text/template" id="tmpl-elementor-panel-revisions-revision-item">
$properties = parent::get_properties();
$properties['show_in_library'] = true;
+ $properties['register_type'] = true;
$properties['library_view'] = 'grid';
$properties['group'] = 'blocks';
return __( 'Page', 'elementor' );
}
+ public function get_css_wrapper_selector() {
+ return 'body.elementor-page-' . $this->get_main_id();
+ }
+
/**
* @since 2.0.0
* @access protected
$template_path = $this->get_template_path( $document->get_meta( '_wp_page_template' ) );
if ( $template_path ) {
$template = $template_path;
+
+ Plugin::$instance->inspector->add_log( 'Page Template', Plugin::$instance->inspector->parse_template_path( $template ), $document->get_edit_url() );
}
}
}
*/
public function add_page_templates( $page_templates, $wp_theme, $post ) {
if ( $post ) {
- $document = Plugin::$instance->documents->get( $post->ID );
+ // FIX ME: Gutenberg not send $post as WP_Post object, just the post ID.
+ $post_id = ! empty( $post->ID ) ? $post->ID : $post;
+
+ $document = Plugin::$instance->documents->get( $post_id );
if ( $document && ! $document::get_property( 'support_wp_page_templates' ) ) {
return $page_templates;
}
$document->start_injection( [
'of' => 'post_status',
+ 'fallback' => [
+ 'of' => 'post_title',
+ ],
] );
$document->add_control(
public function __construct() {
add_action( 'init', [ $this, 'add_wp_templates_support' ] );
- add_filter( 'template_include', [ $this, 'template_include' ] );
+ add_filter( 'template_include', [ $this, 'template_include' ], 11 /* After Plugins/WooCommerce */ );
add_action( 'elementor/documents/register_controls', [ $this, 'action_register_template_control' ] );
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
+
+\Elementor\Plugin::$instance->frontend->add_body_class( 'elementor-template-canvas' );
+
?>
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<?php if ( ! current_theme_supports( 'title-tag' ) ) : ?>
<title><?php echo wp_get_document_title(); ?></title>
<?php endif; ?>
<?php wp_head(); ?>
+ <?php // Keep the following line after `wp_head()` call, to ensure it's not overridden by another templates. ?>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
</head>
<body <?php body_class(); ?>>
<?php
exit; // Exit if accessed directly.
}
+\Elementor\Plugin::$instance->frontend->add_body_class( 'elementor-template-full-width' );
+
get_header();
/**
* Before Header-Footer page template content.
--- /dev/null
+<?php
+namespace Elementor\Modules\WpCli;
+
+use Elementor\Api;
+use Elementor\Plugin;
+use Elementor\TemplateLibrary\Source_Local;
+use Elementor\Utils;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly
+}
+
+/**
+ * Elementor Page Builder cli tools.
+ */
+class Command extends \WP_CLI_Command {
+
+ /**
+ * Flush the Elementor Page Builder CSS Cache.
+ *
+ * [--network]
+ * Flush CSS Cache for all the sites in the network.
+ *
+ * ## EXAMPLES
+ *
+ * 1. wp elementor flush-css
+ * - This will flush the CSS files for elementor page builder.
+ *
+ * 2. wp elementor flush-css --network
+ * - This will flush the CSS files for elementor page builder for all the sites in the network.
+ *
+ * @alias flush-css
+ */
+ public function flush_css( $args, $assoc_args ) {
+ $network = ! empty( $assoc_args['network'] ) && is_multisite();
+
+ if ( $network ) {
+ /** @var \WP_Site[] $blogs */
+ $blogs = get_sites();
+
+ foreach ( $blogs as $keys => $blog ) {
+ // Cast $blog as an array instead of object
+ $blog_id = $blog->blog_id;
+
+ switch_to_blog( $blog_id );
+
+ Plugin::$instance->files_manager->clear_cache();
+
+ \WP_CLI::success( 'Flushed the Elementor CSS Cache for site - ' . get_option( 'home' ) );
+
+ restore_current_blog();
+ }
+ } else {
+ Plugin::$instance->files_manager->clear_cache();
+
+ \WP_CLI::success( 'Flushed the Elementor CSS Cache' );
+ }
+ }
+
+ /**
+ * Replace old URLs with new URLs in all Elementor pages.
+ *
+ * ## EXAMPLES
+ *
+ * 1. wp elementor search-replace <old> <new>
+ * - This will replace all <old> URLs with the <new> URL.
+ *
+ * @alias replace-urls
+ */
+
+ public function replace_urls( $args, $assoc_args ) {
+ if ( empty( $args[0] ) ) {
+ \WP_CLI::error( 'Please set the `old` URL' );
+ }
+
+ if ( empty( $args[1] ) ) {
+ \WP_CLI::error( 'Please set the `new` URL' );
+ }
+
+ try {
+ $results = Utils::replace_urls( $args[0], $args[1] );
+ \WP_CLI::success( $results );
+ } catch ( \Exception $e ) {
+ \WP_CLI::error( $e->getMessage() );
+ }
+ }
+
+ /**
+ * Sync Elementor Library.
+ *
+ * ## EXAMPLES
+ *
+ * 1. wp elementor sync-library
+ * - This will sync the library with Elementor cloud library.
+ *
+ * @alias sync-library
+ */
+ public function sync_library( $args, $assoc_args ) {
+ $data = Api::get_library_data( true );
+
+ if ( empty( $data ) ) {
+ \WP_CLI::error( 'Cannot sync library.' );
+ }
+
+ \WP_CLI::success( 'Library has been synced.' );
+ }
+
+ /**
+ * Import template files to the Library.
+ *
+ * ## EXAMPLES
+ *
+ * 1. wp elementor import-library <file-path>
+ * - This will import a file or a zip of multiple files to the library.
+ *
+ * @alias import-library
+ */
+ public function import_library( $args, $assoc_args ) {
+ if ( empty( $args[0] ) ) {
+ \WP_CLI::error( 'Please set file path.' );
+ }
+
+ if ( ! is_readable( $args[0] ) ) {
+ \WP_CLI::error( 'Cannot read file.' );
+ }
+ /** @var Source_Local $source */
+ $source = Plugin::$instance->templates_manager->get_source( 'local' );
+
+ $imported_items = $source->import_template( basename( $args[0] ), $args[0] );
+
+ if ( empty( $imported_items ) ) {
+ \WP_CLI::error( 'Cannot import.' );
+ }
+
+ \WP_CLI::success( count( $imported_items ) . ' item(s) has been imported.' );
+ }
+}
--- /dev/null
+<?php
+namespace Elementor\Modules\WpCli;
+
+use Elementor\Core\Base\Module as BaseModule;
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly
+}
+
+class Module extends BaseModule {
+
+ /**
+ * Get module name.
+ *
+ * @since 2.0.0
+ * @access public
+ *
+ * @return string Module name.
+ */
+ public function get_name() {
+ return 'wp-cli';
+ }
+
+ public static function is_active() {
+ return defined( 'WP_CLI' ) && WP_CLI;
+ }
+
+ /**
+ *
+ * @since 2.1.0
+ * @access public
+ */
+ public function __construct() {
+ \WP_CLI::add_command( 'elementor', '\Elementor\Modules\WpCli\Command' );
+ }
+}
=== Elementor Page Builder ===
-Contributors: pojo.me, KingYes, ariel.k, jzaltzberg, mati1000, pojosh, bainternet, ramiy, yehudah
+Contributors: elemntor, KingYes, ariel.k, jzaltzberg, mati1000, pojosh, bainternet, ramiy, yehudah
Tags: page builder, editor, landing page, drag-and-drop, elementor, visual editor, wysiwyg, design, maintenance mode, coming soon, under construction, website builder, landing page builder, front-end builder
-Requires at least: 4.6
+Requires at least: 4.7
Tested up to: 4.9
Requires PHP: 5.4
-Stable tag: 2.0.10
+Stable tag: 2.2.1
License: GPLv3
License URI: https://www.gnu.org/licenses/gpl-3.0.html
Instant reaction was a key feature we wanted to achieve. And we did. Instant drag & drop page builder, instant live edit, instant page load. The speed of Elementor is not matched by any other page builder, free or paid. This makes the interface fun and easy to work with, as well as reduces the time it takes to design.
= Live design. Truly live. =
-Never again work on the backend and guess what the frontend will look like. With Elementor page builder, you edit the page and simultaneously see exactly how it looks like. Elementor features live design & inline editing, so the whole process of writing and designing is done directly on the page, with no need to press update or go to preview mode.
+Never again work on the backend and guess what the frontend will look like. With Elementor page builder, you edit the page and simultaneously see exactly how it looks like. Elementor features live design & inline editing, so the whole process of writing and designing is done directly on the page, with no need to press update or go to preview mode. It also works perfectly with or without Gutenberg.
= Surprises you won’t see anywhere else. =
With Elementor's unique features, you can create websites that have that certain 'designer touch'. Among our page builder features are: Box Shadows, Background Overlays, Hover Effects, Headline Effects, Animations, Shape Dividers, Gradient Backgrounds and much more.
== Changelog ==
+= 2.2.1 - 2018-09-03 =
+* Fix: Auto scrolling when clicking on long element ([#5591](https://github.com/pojome/elementor/issues/5591))
+* Fix: Increased number input width besides slider control ([#5521](https://github.com/pojome/elementor/issues/5521))
+* Fix: Typography line-height default unit for all devices ([#5527](https://github.com/pojome/elementor/issues/5527))
+* Fix: Added Navigator compatibility for Role Manager ([#5599](https://github.com/pojome/elementor/issues/5599))
+* Fix: Clear cache via native WordPress methods to support object cache plugins ([#4179](https://github.com/pojome/elementor/issues/4179))
+* Fix: E loader RTL style glitch
+* Fix: History undo after adding a section
+* Fix: Styling issue with Testimonial widget image
+* Fix: Panel elements search error when the user is in `content only` mode
+* Fix: Better Navigator support for safari versions
+
+= 2.2.0 - 2018-08-28 =
+* New: Introducing Navigator Panel ([#1165](https://github.com/pojome/elementor/issues/1165))
+* New: Added Autocomplete URL functionality for Internal Linking ([#255](https://github.com/pojome/elementor/issues/255))
+* New: Added `Cmd/Ctrl + I` hotkey for the Navigator
+* New: Added `Cmd/Ctrl + Shift + V` hotkey for paste style
+* New: Added "Getting Started" page after new installation
+* New: Added reverse columns for tablet screen resolution ([#2070](https://github.com/pojome/elementor/issues/2070))
+* Tweak: Changed the name of Columns widget to Inner Section to reduce confusion
+* Tweak: Added option to restore Editing Handles ([#4981](https://github.com/pojome/elementor/issues/4981))
+* Tweak: Remember Editor panel width in localStorage ([#2414](https://github.com/pojome/elementor/issues/2414))
+* Tweak: Added official color option on hover state in Social Icons Widget ([#2032](https://github.com/pojome/elementor/issues/2032))
+* Tweak: New user interface for CSS Filters control
+* Tweak: Added `Hue` filter to CSS Filters control
+* Tweak: Added a Lazy Load option for the Video widget ([#5189](https://github.com/pojome/elementor/issues/5189))
+* Tweak: Added Mixcloud icon to Social Icons widget ([#5417](https://github.com/pojome/elementor/issues/5417))
+* Tweak: Added an additional aspect ratio (21:9) in Video widget
+* Tweak: Added edit capabilities in the responsive mode
+* Tweak: Removed default transparency on hover button ([#4406](https://github.com/pojome/elementor/issues/4406))
+* Tweak: Redesign `E` loader
+* Tweak: Added `elementor/frontend/before_render` hook to `element-base`
+* Fix: Reverse column bug in responsive columns ([#5421](https://github.com/pojome/elementor/issues/5421))
+* Fix: Compatibility for IE11 by adding IE CSS via JS ([#5510](https://github.com/pojome/elementor/issues/5510), [#5530](https://github.com/pojome/elementor/issues/5530))
+* Fix: IE11 bug in case of `min-height` mixed with `align-items: center`
+* Fix: Resize the columns via the `Column Width` after moving the section ([#5393](https://github.com/pojome/elementor/issues/5393))
+* Fix: Different videos with the same image showing the same video
+* Fix: Inline editing in Progress Bar widget
+
+= 2.1.8 - 2018-08-19 =
+* Fix: Prevent columns from overflowing the grid area in Firefox browser ([#5442](https://github.com/pojome/elementor/issues/5442))
+* Fix: Style glitch in the panel separator
+
+= 2.1.7 - 2018-08-15 =
+* Fix: Avoid copying custom CSS ID when pasting style ([#5416](https://github.com/pojome/elementor/issues/5416))
+* Fix: Responsive CSS for minimal grid utility ([#5375](https://github.com/pojome/elementor/issues/5375))
+* Fix: Make Elementor Canvas compatible with iPhone X landscape orientation
+
+= 2.1.6 - 2018-07-31 =
+* Fix: Removed reference to source map file in Swiper minified file
+* Fix: Element handle style glitch in mobile view
+* Fix: Delete element with hotkey after text editing
+* Fix: Avoid auto focus on the widget panel search field after deleting an element
+
+= 2.1.5 - 2018-07-26 =
+* Tweak: Added `Ctrl/Cmd + Y` for redo action ([#5090](https://github.com/pojome/elementor/issues/5090))
+* Tweak: Clear WP cache in upgrade steps
+* Fix: Corrected conditions for start/end times with loop in Video widget
+* Fix: Padding for first active control in section
+* Fix: Loader styling for some languages
+* Fix: RTL style for Choose control
+* Fix: Possible memory leak by parsing and sanitizing data and settings only when it's necessary
+* Fix: Fixed text selection detection in FireFox
+* Fix: `on-paste` check for Choose control
+* Fix: `fixed` positions for Color Picker
+* Fix: Removed empty space from `elementor/document/urls/edit` hook name ([#5216](https://github.com/pojome/elementor/issues/5216))
+* Fix: Dynamic tags support in Shortcode widget ([#5214](https://github.com/pojome/elementor/issues/5214))
+
+= 2.1.4 - 2018-07-18 =
+* Tweak: Show modified date instead of publish date on Dashboard widget ([#4169](https://github.com/pojome/elementor/issues/4169))
+* Fix: Selector for CSS Filters control in column
+* Fix: CSS Filters for self hosted video
+* Fix: Avoid creating unnecessary CSS for widgets
+* Fix: Added backward comparability for deprecated controls
+* Fix: Color Picker control value change detection
+* Fix: Avoid multiple ready trigger in preview
+* Fix: Save default page template
+
+= 2.1.3 - 2018-07-16 =
+* Tweak: Added CSS filter control for Map, Video, Section and Column
+* Tweak: Added Inspector option in Tools page
+* Tweak: Added Inspector log for Canvas & Full Width templates
+* Tweak: The preview is now loading via plain URL to avoid errors in some server configurations
+* Tweak: Added `print_elements_with_wrapper` method to allow a document to overwrite it's wrapper
+* Tweak: Added action hook `elementor/template-library/after_get_source_data`
+* Fix: Page template missing after import ([#4498](https://github.com/pojome/elementor/issues/4498))
+* Fix: Maintenance Mode override theme template
+* Fix: Removed focus and active states from Hover Animations
+* Fix: Prevent submit forms in the preview
+* Fix: Disable history tracking when restoring a revision
+* Fix: Empty history changes after restoring a revision
+* Fix: Paste style on control with groups
+* Fix: Avoid overwrite `_wp_page_template` in edge cases
+
+= 2.1.2 - 2018-07-08 =
+* Tweak: Set active/inactive category by `'active' => false` (default is `true`)
+* Tweak: Added forms input style compatibility for some themes
+* Fix: XML Demo Import compatibility for admin based imports ([#4947](https://github.com/pojome/elementor/issues/4947))
+* Fix: Set correct `post_id` when call `enqueue_scripts` from preview mode
+* Fix: Conditions not working on dynamic backgrounds
+* Fix: Paste of multiple content in Add Section Area
+* Fix: Set lower priority to `template_include` hook to override 3rd party plugins, e.g. WooCommerce
+* Fix: Hide Save Widget as Global button for old versions
+* Fix: Added RTL style for section with handles inside
+* Deprecated: Restore `get_page` method as hard deprecated ([#4870](https://github.com/pojome/elementor/issues/4870))
+
+= 2.1.1 - 2018-07-03 =
+* Tweak: Compatibility Gutenberg classic editor
+* Fix: Compatibility for PHP < 5.6
+
+= 2.1.0 - 2018-07-03 =
+* New: Introducing Elementor Context Menu
+* New: Copy/Paste elements ([#4151](https://github.com/pojome/elementor/issues/4151))
+* New: Copy/Paste element style ([#1479](https://github.com/pojome/elementor/issues/1479))
+* New: Copy/Paste between pages
+* New: Reset element style
+* New: Added `copy_all_content` option
+* New: Change mobile & tablet breakpoints ([#78](https://github.com/pojome/elementor/issues/78))
+* New: Introducing Elementor WP-CLI integration ([#2161](https://github.com/pojome/elementor/issues/2161))
+* New: Added collapsable panel categories ([#3805](https://github.com/pojome/elementor/issues/3805))
+* New: Added Self hosted videos with HTML5 for Video widget ([#3313](https://github.com/pojome/elementor/issues/3313))
+* New: Added Dailymotion provider for Video widget ([#2285](https://github.com/pojome/elementor/issues/2285))
+* New: Added start/end controls for Video widget ([#3565](https://github.com/pojome/elementor/issues/3565))
+* New: Added new icons to Social Icons widget: Android & Thumbtack ([#4235](https://github.com/pojome/elementor/issues/4235), [#4486](https://github.com/pojome/elementor/issues/4486))
+* New: Hotkey: Ctrl / Cmd + C = Copy
+* New: Hotkey: Ctrl / Cmd + V = Paste
+* Tweak: Added CSS Filter group control ([#3260](https://github.com/pojome/elementor/issues/3260))
+* Tweak: Added CSS Filters to Image & Image Box widgets
+* Tweak: Added compatibility with Gutenberg 3.0.+ ([#2631](https://github.com/pojome/elementor/issues/2631))
+* Tweak: Added CSS ID for Button widget ([#4535](https://github.com/pojome/elementor/issues/4535))
+* Tweak: Added keywords to all widgets for more accurate filtering
+* Tweak: Replace hover section with tabs Icon & Icon Box widgets
+* Tweak: Moved `delete all content` to the page level right click
+* Tweak: When converting content with only a shortcode to Elementor, a shortcode widget used instead of Text Editor widget (#4616)
+* Tweak: Updated Swiper library to v4.3.3 ([#4170](https://github.com/pojome/elementor/issues/4170))
+* Tweak: Added `elementor/shapes/additional_shapes` filter hook to allow custom shape dividers (#4759)
+* Tweak: Added video support to media control ([#4066](https://github.com/pojome/elementor/issues/4066))
+* Tweak: Dropped Support for WP v4.6, now supporting WP v4.7+
+* Fix: The `wpColorPicker` will not be updated after emptying the value
+* Fix: Added fallback for injection position when the injection control does not exist
+* Fix: Focus state behavior in the Repeater control ([#4596](https://github.com/pojome/elementor/issues/4596))
+* Deprecated: `Repeater::get_fields()` is replaced by `Repeater::get_controls()`
+* Deprecated: `Element_Base::get_parent()` is replaced by `Element_Base::get_data( 'parent' )`
+* Deprecated: `get_class_controls` is no longer supported
+* Deprecated: `\Elementor\settings\page\manager::get_page()` is now removed ([#4870](https://github.com/pojome/elementor/issues/4870))
+
+= 2.0.16 - 2018-06-12 =
+* Fix: Dynamic Tag CSS not working on columns & widgets ([#4662](https://github.com/pojome/elementor/issues/4662))
+* Fix: Hide title now also hides Post Title widget
+* Fix: Trigger Elementor ready only once
+
+= 2.0.15 - 2018-06-05 =
+* Fix: Background video in Chrome v67+
+* Fix: CSS glitch in local library modal
+* Fix: CSS glitch with dynamic buttons in a repeater
+* Fix: Divider control on top of controls popover
+* Fix: Conditions check for `in` & `!in`
+* Fix: Prefix class when the value is numeric
+
+= 2.0.14 - 2018-05-29 =
+* Fix: Missing Dynamic Image Background properties on front-end ([#4577](https://github.com/pojome/elementor/issues/4577))
+* Fix: Avoid page settings global `$post` being overwritten by 3rd party plugins ([#4563](https://github.com/pojome/elementor/issues/4563))
+* Fix: Editor won’t load for users without publishing capabilities
+* Fix: Only show Caption style section for Image widget if needed
+
+= 2.0.13 - 2018-05-28 =
+* New: Dynamic Image Backgrounds ([#3971](https://github.com/pojome/elementor/issues/3971))
+* Tweak: Updated Dialog Manager v4.3.2
+* Tweak: Better accessibility for Back to Editor button
+* Tweak: Confusing error message ([#4546](https://github.com/pojome/elementor/issues/4546))
+* Fix: Panel buttons style glitch in edge cases
+* Fix: PHP notice in Polylang compatibility
+* Fix: Editor won't load for users without publishing capabilities
+* Fix: Media queries ordering in CSS file for mixed min and max break points
+* Fix: Improved video background loading method
+
+= 2.0.12 - 2018-05-15 =
+* Tweak: Added new method `add_body_class`
+* Tweak: Set library filter by the document
+* Tweak: Allow 3rd party developers to register documents on init
+* Fix: Set attach uploaded images to the current post
+* Fix: Scroll not working in the library modal ([#4394](https://github.com/pojome/elementor/issues/4394))
+* Fix: Blocks dropdown menu escapes container on scroll ([#3947](https://github.com/pojome/elementor/issues/3947))
+
+= 2.0.11 - 2018-05-09 =
+* Fix: Stronger selector for heading widget color, to avoid section style override ([#4266](https://github.com/pojome/elementor/issues/4266))
+* Fix: style missing when role manager in content only mode
+
= 2.0.10 - 2018-05-08 =
* Fix: Added icon for Dynamic Tag without settings
* Fix: Added offset for anchor scroll section is sticky ([#4323](https://github.com/pojome/elementor/issues/4323))
= 1.9.6 - 2018-02-21 =
* Fix: When selecting a color with alpha, the value is not fully visible ([#3320](https://github.com/pojome/elementor/issues/3320))
* Fix: "Create new Page" button in dashboard widget ([#3491](https://github.com/pojome/elementor/issues/3491))
-* Fix: safe_copy_elementor_meta for editor revisions
+* Fix: `safe_copy_elementor_meta` for editor revisions
* Fix: Clear filters when syncing library
* Fix: Background attachment fixed only on desktop
Changelog
=========
+#### 1.3.2 - Aug 6, 2018
+
+**Improvements**
+
+- Default to an empty string value in conditional fields logic. This allows you to show or hide elements when a field is empty or has not been set yet.
+
+
+#### 1.3.1 - June 12, 2018
+
+**Improvements**
+
+- Format dates, files and arrays when using data variables.
+- Format dates, files and arrays on the submissions overview and submissions details pages.
+- Allow cancelling a form's submit event in JavaScript (with `event.stopPropagation()`) to prevent form submission.
+
+
+#### 1.3.0 - May 28, 2018
+
+**Fixes**
+
+- PHP notice because of namespace import outside of any namespace.
+- Removed usage of PHP 5.4+ feature.
+- Enforce HTTPS in form preview iframe when WP Admin uses HTTPS but public site does not.
+
+**Improvements**
+
+- Hook into GDPR Personal Data Export & Erase functionality. Requires WP 4.9.6.
+- Allow updating stored Submissions with empty values. [Allows clearing out IP address & user agents](https://github.com/ibericode/html-forms-code-snippets/blob/master/do-not-store-ip-address-and-user-agent.php).
+- Internal field should start with underscore to hide it in column view.
+- Add for attribute to generated label element. Allows for simple [multi-step forms](https://github.com/ibericode/html-forms-code-snippets/blob/master/multi-step-form.html).
+
+**Additions**
+
+- Add support for button clicks in conditional element logic.
+
+
#### 1.2.0 - April 24, 2018
**Fixes**
-(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){
+(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, "__esModule", {
key: 'getInitialState',
value: function getInitialState() {
return {
+ formId: document.querySelector('input[name="form_id"]').value,
+ formSlug: document.querySelector('input[name="form[slug]"]').value,
fieldType: "",
fieldLabel: "",
placeholder: "",
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function htmlgenerate(conf) {
- var label = conf.fieldLabel.length && conf.fieldType !== 'submit' ? (0, _preact.h)("label", {}, conf.fieldLabel) : "";
+ var fieldName = namify(conf.fieldLabel);
+ var fieldId = conf.formSlug + '-' + fieldName;
+ var label = conf.fieldLabel.length && conf.fieldType !== 'submit' ? (0, _preact.h)("label", {
+ "for": fieldId
+ }, conf.fieldLabel) : "";
var fieldAttr = void 0,
field = void 0;
default:
fieldAttr = {
type: conf.fieldType,
- name: namify(conf.fieldLabel),
+ name: fieldName,
value: conf.value,
placeholder: conf.placeholder,
- required: conf.required
+ required: conf.required,
+ id: fieldId
};
field = html("input", fieldAttr);
break;
case "textarea":
fieldAttr = {
- name: namify(conf.fieldLabel),
+ name: fieldName,
placeholder: conf.placeholder,
- required: conf.required
+ required: conf.required,
+ id: fieldId
};
field = html("textarea", fieldAttr, conf.value);
break;
case "dropdown":
fieldAttr = {
- name: namify(conf.fieldLabel),
- required: conf.required
+ name: fieldName,
+ required: conf.required,
+ id: fieldId
};
var opts = conf.choices.map(function (choice) {
return html("option", { selected: choice.checked }, choice.label);
field = conf.choices.map(function (choice) {
return html("label", {}, [html("input", {
type: "radio",
- name: namify(conf.fieldLabel),
+ name: fieldName,
value: choice.label,
selected: choice.checked
}), " ", html("span", {}, choice.label)]);
field = conf.choices.map(function (choice) {
return html("label", {}, [html("input", {
type: "checkbox",
- name: namify(conf.fieldLabel) + "[]",
+ name: fieldName + "[]",
value: choice.label,
checked: choice.checked
}), " ", html("span", {}, choice.label)]);
case "file":
fieldAttr = {
type: "file",
- name: namify(conf.fieldLabel),
- required: conf.required
+ name: fieldName,
+ required: conf.required,
+ id: fieldId
};
if (conf['accept']) {
CodeMirror.registerHelper("fold", "xml", function(cm, start) {
var iter = new Iter(cm, start.line, 0);
for (;;) {
- var openTag = toNextTag(iter), end;
- if (!openTag || !(end = toTagEnd(iter)) || iter.line != start.line) return;
+ var openTag = toNextTag(iter)
+ if (!openTag || iter.line != start.line) return
+ var end = toTagEnd(iter)
+ if (!end) return
if (!openTag[1] && end != "selfClose") {
var startPos = Pos(iter.line, iter.ch);
var endPos = findMatchingClose(iter, openTag[2]);
- return endPos && {from: startPos, to: endPos.from};
+ return endPos && cmp(endPos.from, startPos) > 0 ? {from: startPos, to: endPos.from} : null
}
}
});
function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }
+function collapsedSpanAround(line, ch) {
+ var sps = sawCollapsedSpans && line.markedSpans, found;
+ if (sps) { for (var i = 0; i < sps.length; ++i) {
+ var sp = sps[i];
+ if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&
+ (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }
+ } }
+ return found
+}
+
// Test whether there exists a collapsed span that partially
// overlaps (covers the start or end, but not both) of a new span.
// Such overlap is not allowed.
var lineObj = getLine(doc, lineN);
for (;;) {
var found = coordsCharInner(cm, lineObj, lineN, x, y);
- var merged = collapsedSpanAtEnd(lineObj);
- var mergedPos = merged && merged.find(0, true);
- if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))
- { lineN = lineNo(lineObj = mergedPos.to.line); }
- else
- { return found }
+ var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0));
+ if (!collapsed) { return found }
+ var rangeEnd = collapsed.find(1);
+ if (rangeEnd.line == lineN) { return rangeEnd }
+ lineObj = getLine(doc, lineN = rangeEnd.line);
}
}
this.cm = cm;
var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
+ vert.tabIndex = horiz.tabIndex = -1;
place(vert); place(horiz);
on(vert, "scroll", function () {
if ((hist.lastOp == opId ||
hist.lastOrigin == change.origin && change.origin &&
- ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||
+ ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||
change.origin.charAt(0) == "*")) &&
(cur = lastChangeEvent(hist, hist.lastOp == opId))) {
// Merge this change into the last event
// Revert a change stored in a document's history.
function makeChangeFromHistory(doc, type, allowSelectionOnly) {
- if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) { return }
+ var suppress = doc.cm && doc.cm.state.suppressEdits;
+ if (suppress && !allowSelectionOnly) { return }
var hist = doc.history, event, selAfter = doc.sel;
var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;
return
}
selAfter = event;
- }
- else { break }
+ } else if (suppress) {
+ source.push(event);
+ return
+ } else { break }
}
// Build up a reverse change object to add to the opposite history
function replaceRange(doc, code, from, to, origin) {
if (!to) { to = from; }
if (cmp(to, from) < 0) { var assign;
- (assign = [to, from], from = assign[0], to = assign[1], assign); }
+ (assign = [to, from], from = assign[0], to = assign[1]); }
if (typeof code == "string") { code = doc.splitLines(code); }
makeChange(doc, {from: from, to: to, text: code, origin: origin});
}
}
LeafChunk.prototype = {
- chunkSize: function chunkSize() { return this.lines.length },
+ chunkSize: function() { return this.lines.length },
// Remove the n lines at offset 'at'.
- removeInner: function removeInner(at, n) {
+ removeInner: function(at, n) {
var this$1 = this;
for (var i = at, e = at + n; i < e; ++i) {
},
// Helper used to collapse a small branch into a single leaf.
- collapse: function collapse(lines) {
+ collapse: function(lines) {
lines.push.apply(lines, this.lines);
},
// Insert the given array of lines at offset 'at', count them as
// having the given height.
- insertInner: function insertInner(at, lines, height) {
+ insertInner: function(at, lines, height) {
var this$1 = this;
this.height += height;
},
// Used to iterate over a part of the tree.
- iterN: function iterN(at, n, op) {
+ iterN: function(at, n, op) {
var this$1 = this;
for (var e = at + n; at < e; ++at)
}
BranchChunk.prototype = {
- chunkSize: function chunkSize() { return this.size },
+ chunkSize: function() { return this.size },
- removeInner: function removeInner(at, n) {
+ removeInner: function(at, n) {
var this$1 = this;
this.size -= n;
}
},
- collapse: function collapse(lines) {
+ collapse: function(lines) {
var this$1 = this;
for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }
},
- insertInner: function insertInner(at, lines, height) {
+ insertInner: function(at, lines, height) {
var this$1 = this;
this.size += lines.length;
},
// When a node has grown, check whether it should be split.
- maybeSpill: function maybeSpill() {
+ maybeSpill: function() {
if (this.children.length <= 10) { return }
var me = this;
do {
me.parent.maybeSpill();
},
- iterN: function iterN(at, n, op) {
+ iterN: function(at, n, op) {
var this$1 = this;
for (var i = 0; i < this.children.length; ++i) {
this.height = null;
var diff = widgetHeight(this) - oldH;
if (!diff) { return }
- updateLineHeight(line, line.height + diff);
+ if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }
if (cm) {
runInOp(cm, function () {
cm.curOp.forceUpdate = true;
}
return true
});
- signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle));
+ if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); }
return widget
}
// Called when the window resizes
function onResize(cm) {
var d = cm.display;
- if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth)
- { return }
// Might be a text scaling operation, clear size caches.
d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
d.scrollbarsClipped = false;
"Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
"Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
"Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
- fallthrough: "basic"
+ "fallthrough": "basic"
};
// Very basic readline/emacs-style bindings, which are standard on Mac.
keyMap.emacsy = {
"Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
"Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
"Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
- fallthrough: ["basic", "emacsy"]
+ "fallthrough": ["basic", "emacsy"]
};
keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
var dragEnd = operation(cm, function (e) {
if (webkit) { display.scroller.draggable = false; }
cm.state.draggingText = false;
- off(document, "mouseup", dragEnd);
- off(document, "mousemove", mouseMove);
+ off(display.wrapper.ownerDocument, "mouseup", dragEnd);
+ off(display.wrapper.ownerDocument, "mousemove", mouseMove);
off(display.scroller, "dragstart", dragStart);
off(display.scroller, "drop", dragEnd);
if (!moved) {
{ extendSelection(cm.doc, pos, null, null, behavior.extend); }
// Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
if (webkit || ie && ie_version == 9)
- { setTimeout(function () {document.body.focus(); display.input.focus();}, 20); }
+ { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }
else
{ display.input.focus(); }
}
dragEnd.copy = !behavior.moveOnDrag;
// IE's approach to draggable
if (display.scroller.dragDrop) { display.scroller.dragDrop(); }
- on(document, "mouseup", dragEnd);
- on(document, "mousemove", mouseMove);
+ on(display.wrapper.ownerDocument, "mouseup", dragEnd);
+ on(display.wrapper.ownerDocument, "mousemove", mouseMove);
on(display.scroller, "dragstart", dragStart);
on(display.scroller, "drop", dragEnd);
counter = Infinity;
e_preventDefault(e);
display.input.focus();
- off(document, "mousemove", move);
- off(document, "mouseup", up);
+ off(display.wrapper.ownerDocument, "mousemove", move);
+ off(display.wrapper.ownerDocument, "mouseup", up);
doc.history.lastSelOrigin = null;
}
var move = operation(cm, function (e) {
- if (!e_button(e)) { done(e); }
+ if (e.buttons === 0 || !e_button(e)) { done(e); }
else { extend(e); }
});
var up = operation(cm, done);
cm.state.selectingText = up;
- on(document, "mousemove", move);
- on(document, "mouseup", up);
+ on(display.wrapper.ownerDocument, "mousemove", move);
+ on(display.wrapper.ownerDocument, "mouseup", up);
}
// Used when mouse-selecting to adjust the anchor to the proper side
var doc = options.value;
if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }
+ else if (options.mode) { doc.modeOption = options.mode; }
this.doc = doc;
var input = new CodeMirror$1.inputStyles[options.inputStyle](this);
this.showMultipleSelections(info);
};
+ContentEditableInput.prototype.getSelection = function () {
+ return this.cm.display.wrapper.ownerDocument.getSelection()
+};
+
ContentEditableInput.prototype.showPrimarySelection = function () {
- var sel = window.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();
+ var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();
var from = prim.from(), to = prim.to();
if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
};
ContentEditableInput.prototype.rememberSelection = function () {
- var sel = window.getSelection();
+ var sel = this.getSelection();
this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;
this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;
};
ContentEditableInput.prototype.selectionInEditor = function () {
- var sel = window.getSelection();
+ var sel = this.getSelection();
if (!sel.rangeCount) { return false }
var node = sel.getRangeAt(0).commonAncestorContainer;
return contains(this.div, node)
};
ContentEditableInput.prototype.selectionChanged = function () {
- var sel = window.getSelection();
+ var sel = this.getSelection();
return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
};
ContentEditableInput.prototype.pollSelection = function () {
if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }
- var sel = window.getSelection(), cm = this.cm;
+ var sel = this.getSelection(), cm = this.cm;
// On Android Chrome (version 56, at least), backspacing into an
// uneditable block element will put the cursor in that element,
// and then, because it's not editable, hide the virtual keyboard.
};
ContentEditableInput.prototype.onKeyPress = function (e) {
- if (e.charCode == 0) { return }
+ if (e.charCode == 0 || this.composing) { return }
e.preventDefault();
if (!this.cm.isReadOnly())
{ operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }
function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }
function domTextBetween(cm, from, to, fromLine, toLine) {
- var text = "", closing = false, lineSep = cm.doc.lineSeparator();
+ var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;
function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
function close() {
if (closing) {
text += lineSep;
- closing = false;
+ if (extraLinebreak) { text += lineSep; }
+ closing = extraLinebreak = false;
}
}
function addText(str) {
function walk(node) {
if (node.nodeType == 1) {
var cmText = node.getAttribute("cm-text");
- if (cmText != null) {
- addText(cmText || node.textContent.replace(/\u200b/g, ""));
+ if (cmText) {
+ addText(cmText);
return
}
var markerID = node.getAttribute("cm-marker"), range$$1;
return
}
if (node.getAttribute("contenteditable") == "false") { return }
- var isBlock = /^(pre|div|p)$/i.test(node.nodeName);
+ var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);
+ if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }
+
if (isBlock) { close(); }
for (var i = 0; i < node.childNodes.length; i++)
{ walk(node.childNodes[i]); }
+
+ if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }
if (isBlock) { closing = true; }
} else if (node.nodeType == 3) {
- addText(node.nodeValue);
+ addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
}
}
for (;;) {
walk(from);
if (from == to) { break }
from = from.nextSibling;
+ extraLinebreak = false;
}
return text
}
var this$1 = this;
var input = this, cm = this.cm;
+ this.createField(display);
+ var te = this.textarea;
- // Wraps and hides input textarea
- var div = this.wrapper = hiddenTextarea();
- // The semihidden textarea that is focused when the editor is
- // focused, and receives input.
- var te = this.textarea = div.firstChild;
- display.wrapper.insertBefore(div, display.wrapper.firstChild);
+ display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);
// Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
if (ios) { te.style.width = "0px"; }
});
};
+TextareaInput.prototype.createField = function (_display) {
+ // Wraps and hides input textarea
+ this.wrapper = hiddenTextarea();
+ // The semihidden textarea that is focused when the editor is
+ // focused, and receives input.
+ this.textarea = this.wrapper.firstChild;
+};
+
TextareaInput.prototype.prepareSelection = function () {
// Redraw the selection and/or cursor
var cm = this.cm, display = cm.display, doc = cm.doc;
addLegacyProps(CodeMirror$1);
-CodeMirror$1.version = "5.34.0";
+CodeMirror$1.version = "5.39.2";
return CodeMirror$1;
return ret(ch);
} else if (ch == "=" && stream.eat(">")) {
return ret("=>", "operator");
- } else if (ch == "0" && stream.eat(/x/i)) {
- stream.eatWhile(/[\da-f]/i);
- return ret("number", "number");
- } else if (ch == "0" && stream.eat(/o/i)) {
- stream.eatWhile(/[0-7]/i);
- return ret("number", "number");
- } else if (ch == "0" && stream.eat(/b/i)) {
- stream.eatWhile(/[01]/i);
+ } else if (ch == "0" && stream.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i)) {
return ret("number", "number");
} else if (/\d/.test(ch)) {
- stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/);
+ stream.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/);
return ret("number", "number");
} else if (ch == "/") {
if (stream.eat("*")) {
return ret("comment", "comment");
} else if (expressionAllowed(stream, state, 1)) {
readRegexp(stream);
- stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/);
+ stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/);
return ret("regexp", "string-2");
} else {
stream.eat("=");
var kw = keywords[word]
return ret(kw.type, kw.style, word)
}
- if (word == "async" && stream.match(/^(\s|\/\*.*?\*\/)*[\(\w]/, false))
+ if (word == "async" && stream.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/, false))
return ret("async", "keyword", word)
}
return ret("variable", "variable", word)
pass.apply(null, arguments);
return true;
}
+ function inList(name, list) {
+ for (var v = list; v; v = v.next) if (v.name == name) return true
+ return false;
+ }
function register(varname) {
- function inList(list) {
- for (var v = list; v; v = v.next)
- if (v.name == varname) return true;
- return false;
- }
var state = cx.state;
cx.marked = "def";
if (state.context) {
- if (inList(state.localVars)) return;
- state.localVars = {name: varname, next: state.localVars};
+ if (state.lexical.info == "var" && state.context && state.context.block) {
+ // FIXME function decls are also not block scoped
+ var newContext = registerVarScoped(varname, state.context)
+ if (newContext != null) {
+ state.context = newContext
+ return
+ }
+ } else if (!inList(varname, state.localVars)) {
+ state.localVars = new Var(varname, state.localVars)
+ return
+ }
+ }
+ // Fall through means this is global
+ if (parserConfig.globalVars && !inList(varname, state.globalVars))
+ state.globalVars = new Var(varname, state.globalVars)
+ }
+ function registerVarScoped(varname, context) {
+ if (!context) {
+ return null
+ } else if (context.block) {
+ var inner = registerVarScoped(varname, context.prev)
+ if (!inner) return null
+ if (inner == context.prev) return context
+ return new Context(inner, context.vars, true)
+ } else if (inList(varname, context.vars)) {
+ return context
} else {
- if (inList(state.globalVars)) return;
- if (parserConfig.globalVars)
- state.globalVars = {name: varname, next: state.globalVars};
+ return new Context(context.prev, new Var(varname, context.vars), false)
}
}
// Combinators
- var defaultVars = {name: "this", next: {name: "arguments"}};
+ function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }
+ function Var(name, next) { this.name = name; this.next = next }
+
+ var defaultVars = new Var("this", new Var("arguments", null))
function pushcontext() {
- cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};
- cx.state.localVars = defaultVars;
+ cx.state.context = new Context(cx.state.context, cx.state.localVars, false)
+ cx.state.localVars = defaultVars
+ }
+ function pushblockcontext() {
+ cx.state.context = new Context(cx.state.context, cx.state.localVars, true)
+ cx.state.localVars = null
}
function popcontext() {
- cx.state.localVars = cx.state.context.vars;
- cx.state.context = cx.state.context.prev;
+ cx.state.localVars = cx.state.context.vars
+ cx.state.context = cx.state.context.prev
}
+ popcontext.lex = true
function pushlex(type, info) {
var result = function() {
var state = cx.state, indent = state.indented;
function expect(wanted) {
function exp(type) {
if (type == wanted) return cont();
- else if (wanted == ";") return pass();
+ else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass();
else return cont(exp);
};
return exp;
}
function statement(type, value) {
- if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex);
+ if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex);
if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex);
if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex);
if (type == "debugger") return cont(expect(";"));
- if (type == "{") return cont(pushlex("}"), block, poplex);
+ if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext);
if (type == ";") return cont();
if (type == "if") {
if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex)
} else if (isTS && value == "namespace") {
cx.marked = "keyword"
return cont(pushlex("form"), expression, block, poplex)
+ } else if (isTS && value == "abstract") {
+ cx.marked = "keyword"
+ return cont(statement)
} else {
return cont(pushlex("stat"), maybelabel);
}
}
- if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"),
- block, poplex, poplex);
+ if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext,
+ block, poplex, poplex, popcontext);
if (type == "case") return cont(expression, expect(":"));
if (type == "default") return cont(expect(":"));
- if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"),
- statement, poplex, popcontext);
+ if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);
if (type == "export") return cont(pushlex("stat"), afterExport, poplex);
if (type == "import") return cont(pushlex("stat"), afterImport, poplex);
if (type == "async") return cont(statement)
if (value == "@") return cont(expression, statement)
return pass(pushlex("stat"), expression, expect(";"), poplex);
}
+ function maybeCatchBinding(type) {
+ if (type == "(") return cont(funarg, expect(")"))
+ }
function expression(type, value) {
return expressionInner(type, value, false);
}
if (type == "{") return contCommasep(objprop, "}", null, maybeop);
if (type == "quasi") return pass(quasi, maybeop);
if (type == "new") return cont(maybeTarget(noComma));
+ if (type == "import") return cont(expression);
return cont();
}
function maybeexpression(type) {
}
}
function typeexpr(type, value) {
+ if (value == "keyof" || value == "typeof") {
+ cx.marked = "keyword"
+ return cont(value == "keyof" ? typeexpr : expressionNoComma)
+ }
if (type == "variable" || value == "void") {
- if (value == "keyof") {
- cx.marked = "keyword"
- return cont(typeexpr)
- } else {
- cx.marked = "type"
- return cont(afterType)
- }
+ cx.marked = "type"
+ return cont(afterType)
}
if (type == "string" || type == "number" || type == "atom") return cont(afterType);
if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType)
if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType)
if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType)
+ if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr)
}
function maybeReturnType(type) {
if (type == "=>") return cont(typeexpr)
return cont(expression, maybetype, expect("]"), typeprop)
}
}
- function typearg(type) {
- if (type == "variable") return cont(typearg)
- else if (type == ":") return cont(typeexpr)
+ function typearg(type, value) {
+ if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg)
+ if (type == ":") return cont(typeexpr)
+ return pass(typeexpr)
}
function afterType(type, value) {
if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
- if (value == "|" || type == ".") return cont(typeexpr)
+ if (value == "|" || type == "." || value == "&") return cont(typeexpr)
if (type == "[") return cont(expect("]"), afterType)
if (value == "extends" || value == "implements") { cx.marked = "keyword"; return cont(typeexpr) }
}
function maybeelse(type, value) {
if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex);
}
- function forspec(type) {
+ function forspec(type, value) {
+ if (value == "await") return cont(forspec);
if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex);
}
function forspec1(type) {
}
function afterImport(type) {
if (type == "string") return cont();
+ if (type == "(") return pass(expression);
return pass(importSpec, maybeMoreImports, maybeFrom);
}
function importSpec(type, value) {
cc: [],
lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
localVars: parserConfig.localVars,
- context: parserConfig.localVars && {vars: parserConfig.localVars},
+ context: parserConfig.localVars && new Context(null, null, false),
indented: basecolumn || 0
};
if (parserConfig.globalVars && typeof parserConfig.globalVars == "object")
lexical = lexical.prev;
var type = lexical.type, closing = firstChar == type;
- if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0);
+ if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0);
else if (type == "form" && firstChar == "{") return lexical.indented;
else if (type == "form") return lexical.indented + indentUnit;
else if (type == "stat")
stream.next();
}
return style;
- };
+ }
}
+
function doctype(depth) {
return function(stream, state) {
var ch;
},{}],21:[function(require,module,exports){
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global.preactRenderToString = factory());
-}(this, (function () {
-
-var NON_DIMENSION_PROPS = {
- boxFlex: 1, boxFlexGroup: 1, columnCount: 1, fillOpacity: 1, flex: 1, flexGrow: 1,
- flexPositive: 1, flexShrink: 1, flexNegative: 1, fontWeight: 1, lineClamp: 1, lineHeight: 1,
- opacity: 1, order: 1, orphans: 1, strokeOpacity: 1, widows: 1, zIndex: 1, zoom: 1
-};
-
-var ESC = {
- '<': '<',
- '>': '>',
- '"': '"',
- '&': '&'
-};
-
-var objectKeys = Object.keys || function (obj) {
- var keys = [];
- for (var i in obj) {
- if (obj.hasOwnProperty(i)) keys.push(i);
- }return keys;
-};
-
-var encodeEntities = function encodeEntities(s) {
- return String(s).replace(/[<>"&]/g, escapeChar);
-};
-
-var escapeChar = function escapeChar(a) {
- return ESC[a] || a;
-};
-
-var falsey = function falsey(v) {
- return v == null || v === false;
-};
-
-var memoize = function memoize(fn) {
- var mem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- return function (v) {
- return mem[v] || (mem[v] = fn(v));
- };
-};
-
-var indent = function indent(s, char) {
- return String(s).replace(/(\n+)/g, '$1' + (char || '\t'));
-};
-
-var isLargeString = function isLargeString(s, length, ignoreLines) {
- return String(s).length > (length || 40) || !ignoreLines && String(s).indexOf('\n') !== -1 || String(s).indexOf('<') !== -1;
-};
-
-function styleObjToCss(s) {
- var str = '';
- for (var prop in s) {
- var val = s[prop];
- if (val != null) {
- if (str) str += ' ';
- str += jsToCss(prop);
- str += ': ';
- str += val;
- if (typeof val === 'number' && !NON_DIMENSION_PROPS[prop]) {
- str += 'px';
- }
- str += ';';
- }
- }
- return str || undefined;
-}
-
-function hashToClassName(c) {
- var str = '';
- for (var prop in c) {
- if (c[prop]) {
- if (str) str += ' ';
- str += prop;
- }
- }
- return str;
-}
-
-var jsToCss = memoize(function (s) {
- return s.replace(/([A-Z])/g, '-$1').toLowerCase();
-});
-
-function assign(obj, props) {
- for (var i in props) {
- obj[i] = props[i];
- }return obj;
-}
-
-function getNodeProps(vnode) {
- var defaultProps = vnode.nodeName.defaultProps,
- props = assign({}, defaultProps || vnode.attributes);
- if (defaultProps) assign(props, vnode.attributes);
- if (vnode.children) props.children = vnode.children;
- return props;
-}
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-var SHALLOW = { shallow: true };
-
-var UNNAMED = [];
-
-var EMPTY = {};
-
-var VOID_ELEMENTS = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
-
-renderToString.render = renderToString;
-
-var shallowRender = function shallowRender(vnode, context) {
- return renderToString(vnode, context, SHALLOW);
-};
-
-function renderToString(vnode, context, opts, inner, isSvgMode) {
- var _ref = vnode || EMPTY,
- nodeName = _ref.nodeName,
- attributes = _ref.attributes,
- children = _ref.children,
- isComponent = false;
-
- context = context || {};
- opts = opts || {};
-
- var pretty = opts.pretty,
- indentChar = typeof pretty === 'string' ? pretty : '\t';
-
- if (vnode == null || typeof vnode === 'boolean') {
- return '';
- }
-
- if ((typeof vnode === 'undefined' ? 'undefined' : _typeof(vnode)) !== 'object' && !nodeName) {
- return encodeEntities(vnode);
- }
-
- if (typeof nodeName === 'function') {
- isComponent = true;
- if (opts.shallow && (inner || opts.renderRootComponent === false)) {
- nodeName = getComponentName(nodeName);
- } else {
- var props = getNodeProps(vnode),
- rendered = void 0;
-
- if (!nodeName.prototype || typeof nodeName.prototype.render !== 'function') {
- rendered = nodeName(props, context);
- } else {
- var c = new nodeName(props, context);
-
- c._disable = c.__x = true;
- c.props = props;
- c.context = context;
- if (c.componentWillMount) c.componentWillMount();
- rendered = c.render(c.props, c.state, c.context);
-
- if (c.getChildContext) {
- context = assign(assign({}, context), c.getChildContext());
- }
- }
-
- return renderToString(rendered, context, opts, opts.shallowHighOrder !== false);
- }
- }
-
- var s = '',
- html = void 0;
-
- if (attributes) {
- var attrs = objectKeys(attributes);
-
- if (opts && opts.sortAttributes === true) attrs.sort();
-
- for (var i = 0; i < attrs.length; i++) {
- var name = attrs[i],
- v = attributes[name];
- if (name === 'children') continue;
- if (!(opts && opts.allAttributes) && (name === 'key' || name === 'ref')) continue;
-
- if (name === 'className') {
- if (attributes['class']) continue;
- name = 'class';
- } else if (isSvgMode && name.match(/^xlink\:?(.+)/)) {
- name = name.toLowerCase().replace(/^xlink\:?(.+)/, 'xlink:$1');
- }
-
- if (name === 'class' && v && (typeof v === 'undefined' ? 'undefined' : _typeof(v)) === 'object') {
- v = hashToClassName(v);
- } else if (name === 'style' && v && (typeof v === 'undefined' ? 'undefined' : _typeof(v)) === 'object') {
- v = styleObjToCss(v);
- }
-
- var hooked = opts.attributeHook && opts.attributeHook(name, v, context, opts, isComponent);
- if (hooked || hooked === '') {
- s += hooked;
- continue;
- }
-
- if (name === 'dangerouslySetInnerHTML') {
- html = v && v.__html;
- } else if ((v || v === 0 || v === '') && typeof v !== 'function') {
- if (v === true || v === '') {
- v = name;
-
- if (!opts || !opts.xml) {
- s += ' ' + name;
- continue;
- }
- }
- s += ' ' + name + '="' + encodeEntities(v) + '"';
- }
- }
- }
-
- var sub = s.replace(/^\n\s*/, ' ');
- if (sub !== s && !~sub.indexOf('\n')) s = sub;else if (pretty && ~s.indexOf('\n')) s += '\n';
-
- s = '<' + nodeName + s + '>';
-
- if (VOID_ELEMENTS.indexOf(nodeName) > -1) {
- s = s.replace(/>$/, ' />');
- }
-
- if (html) {
- if (pretty && isLargeString(html)) {
- html = '\n' + indentChar + indent(html, indentChar);
- }
- s += html;
- } else {
- var len = children && children.length,
- pieces = [],
- hasLarge = ~s.indexOf('\n');
- for (var _i = 0; _i < len; _i++) {
- var child = children[_i];
- if (!falsey(child)) {
- var childSvgMode = nodeName === 'svg' ? true : nodeName === 'foreignObject' ? false : isSvgMode,
- ret = renderToString(child, context, opts, true, childSvgMode);
- if (!hasLarge && pretty && isLargeString(ret)) hasLarge = true;
- if (ret) pieces.push(ret);
- }
- }
- if (pretty && hasLarge) {
- for (var _i2 = pieces.length; _i2--;) {
- pieces[_i2] = '\n' + indentChar + indent(pieces[_i2], indentChar);
- }
- }
- if (pieces.length) {
- s += pieces.join('');
- } else if (opts && opts.xml) {
- return s.substring(0, s.length - 1) + ' />';
- }
- }
-
- if (VOID_ELEMENTS.indexOf(nodeName) === -1) {
- if (pretty && ~s.indexOf('\n')) s += '\n';
- s += '</' + nodeName + '>';
- }
-
- return s;
-}
-
-function getComponentName(component) {
- return component.displayName || component !== Function && component.name || getFallbackComponentName(component);
-}
-
-function getFallbackComponentName(component) {
- var str = Function.prototype.toString.call(component),
- name = (str.match(/^\s*function\s+([^\( ]+)/) || EMPTY)[1];
- if (!name) {
- var index = -1;
- for (var i = UNNAMED.length; i--;) {
- if (UNNAMED[i] === component) {
- index = i;
- break;
- }
- }
-
- if (index < 0) {
- index = UNNAMED.push(component) - 1;
- }
- name = 'UnnamedComponent' + index;
- }
- return name;
-}
-renderToString.shallowRender = shallowRender;
-
-return renderToString;
-
-})));
+!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e.preactRenderToString=n()}(this,function(){var e=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,n=Object.keys||function(e){var n=[];for(var t in e)e.hasOwnProperty(t)&&n.push(t);return n},t=function(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},r=function(e,n){return String(e).replace(/(\n+)/g,"$1"+(n||"\t"))},o=function(e,n,t){return String(e).length>(n||40)||!t&&-1!==String(e).indexOf("\n")||-1!==String(e).indexOf("<")},i={};function a(n){var t="";for(var r in n){var o=n[r];null!=o&&(t&&(t+=" "),t+=i[r]||(i[r]=r.replace(/([A-Z])/g,"-$1").toLowerCase()),t+=": ",t+=o,"number"==typeof o&&!1===e.test(r)&&(t+="px"),t+=";")}return t||void 0}function l(e,n){for(var t in n)e[t]=n[t];return e}var f={shallow:!0},c=[],u=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/;s.render=s;function s(e,i,f,p,d){if(null==e||"boolean"==typeof e)return"";var h=e.nodeName,g=e.attributes,v=!1;i=i||{};var m,b=(f=f||{}).pretty,y="string"==typeof b?b:"\t";if("object"!=typeof e&&!h)return t(e);if("function"==typeof h){if(v=!0,!f.shallow||!p&&!1!==f.renderRootComponent){var x,w=function(e){var n=e.nodeName.defaultProps,t=l({},n||e.attributes);return n&&l(t,e.attributes),e.children&&(t.children=e.children),t}(e);if(h.prototype&&"function"==typeof h.prototype.render){var k=new h(w,i);k._disable=k.__x=!0,k.props=w,k.context=i,k.componentWillMount&&k.componentWillMount(),x=k.render(k.props,k.state,k.context),k.getChildContext&&(i=l(l({},i),k.getChildContext()))}else x=h(w,i);return s(x,i,f,!1!==f.shallowHighOrder)}h=(m=h).displayName||m!==Function&&m.name||function(e){var n=(Function.prototype.toString.call(e).match(/^\s*function\s+([^( ]+)/)||"")[1];if(!n){for(var t=-1,r=c.length;r--;)if(c[r]===e){t=r;break}t<0&&(t=c.push(e)-1),n="UnnamedComponent"+t}return n}(m)}var O,C="";if(g){var S=n(g);f&&!0===f.sortAttributes&&S.sort();for(var j=0;j<S.length;j++){var $=S[j],_=g[$];if("children"!==$&&(!$.match(/[\s\n\\/='"\0<>]/)&&(f&&f.allAttributes||"key"!==$&&"ref"!==$))){if("className"===$){if(g.class)continue;$="class"}else d&&$.match(/^xlink:?./)&&($=$.toLowerCase().replace(/^xlink:?/,"xlink:"));"style"===$&&_&&"object"==typeof _&&(_=a(_));var H=f.attributeHook&&f.attributeHook($,_,i,f,v);if(H||""===H)C+=H;else if("dangerouslySetInnerHTML"===$)O=_&&_.__html;else if((_||0===_||""===_)&&"function"!=typeof _){if(!(!0!==_&&""!==_||(_=$,f&&f.xml))){C+=" "+$;continue}C+=" "+$+'="'+t(_)+'"'}}}}var N=C.replace(/^\n\s*/," ");if(N===C||~N.indexOf("\n")?b&&~C.indexOf("\n")&&(C+="\n"):C=N,C="<"+h+C+">",h.match(/[\s\n\\/='"\0<>]/))throw C;var A=h.match(u);A&&(C=C.replace(/>$/," />"));var L=[];if(O)b&&o(O)&&(O="\n"+y+r(O,y)),C+=O;else if(e.children){for(var M=~C.indexOf("\n"),R=0;R<e.children.length;R++){var F=e.children[R];if(null!=F&&!1!==F){var P=s(F,i,f,!0,"svg"===h||"foreignObject"!==h&&d);!M&&b&&o(P)&&(M=!0),P&&L.push(P)}}if(b&&M)for(var T=L.length;T--;)L[T]="\n"+y+r(L[T],y)}if(L.length)C+=L.join("");else if(f&&f.xml)return C.substring(0,C.length-1)+" />";return A||(b&&~C.indexOf("\n")&&(C+="\n"),C+="</"+h+">"),C}return s.shallowRender=function(e,n){return s(e,n,f)},s});
},{}],22:[function(require,module,exports){
!function() {
'use strict';
- function VNode() {}
function h(nodeName, attributes) {
var lastSimple, child, simple, i, children = EMPTY_CHILDREN;
for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]);
} else node.removeEventListener(name, eventProxy, useCapture);
(node.__l || (node.__l = {}))[name] = value;
} else if ('list' !== name && 'type' !== name && !isSvg && name in node) {
- setProperty(node, name, null == value ? '' : value);
- if (null == value || !1 === value) node.removeAttribute(name);
+ try {
+ node[name] = null == value ? '' : value;
+ } catch (e) {}
+ if ((null == value || !1 === value) && 'spellcheck' != name) node.removeAttribute(name);
} else {
- var ns = isSvg && name !== (name = name.replace(/^xlink\:?/, ''));
+ var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));
if (null == value || !1 === value) if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase()); else node.removeAttribute(name); else if ('function' != typeof value) if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value); else node.setAttribute(name, value);
}
}
- function setProperty(node, name, value) {
- try {
- node[name] = value;
- } catch (e) {}
- }
function eventProxy(e) {
return this.__l[e.type](options.event && options.event(e) || e);
}
keyed[key] = void 0;
keyedLen--;
}
- } else if (!child && min < childrenLen) for (j = min; j < childrenLen; j++) if (void 0 !== children[j] && isSameNodeType(c = children[j], vchild, isHydrating)) {
+ } else if (min < childrenLen) for (j = min; j < childrenLen; j++) if (void 0 !== children[j] && isSameNodeType(c = children[j], vchild, isHydrating)) {
child = c;
children[j] = void 0;
if (j === childrenLen - 1) childrenLen--;
for (name in old) if ((!attrs || null == attrs[name]) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode);
for (name in attrs) if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);
}
- function collectComponent(component) {
- var name = component.constructor.name;
- (components[name] || (components[name] = [])).push(component);
- }
function createComponent(Ctor, props, context) {
- var inst, list = components[Ctor.name];
+ var inst, i = recyclerComponents.length;
if (Ctor.prototype && Ctor.prototype.render) {
inst = new Ctor(props, context);
Component.call(inst, props, context);
inst.constructor = Ctor;
inst.render = doRender;
}
- if (list) for (var i = list.length; i--; ) if (list[i].constructor === Ctor) {
- inst.__b = list[i].__b;
- list.splice(i, 1);
- break;
+ while (i--) if (recyclerComponents[i].constructor === Ctor) {
+ inst.__b = recyclerComponents[i].__b;
+ recyclerComponents.splice(i, 1);
+ return inst;
}
return inst;
}
function doRender(props, state, context) {
return this.constructor(props, context);
}
- function setComponentProps(component, props, opts, context, mountAll) {
+ function setComponentProps(component, props, renderMode, context, mountAll) {
if (!component.__x) {
component.__x = !0;
- if (component.__r = props.ref) delete props.ref;
- if (component.__k = props.key) delete props.key;
- if (!component.base || mountAll) {
+ component.__r = props.ref;
+ component.__k = props.key;
+ delete props.ref;
+ delete props.key;
+ if (void 0 === component.constructor.getDerivedStateFromProps) if (!component.base || mountAll) {
if (component.componentWillMount) component.componentWillMount();
} else if (component.componentWillReceiveProps) component.componentWillReceiveProps(props, context);
if (context && context !== component.context) {
if (!component.__p) component.__p = component.props;
component.props = props;
component.__x = !1;
- if (0 !== opts) if (1 === opts || !1 !== options.syncComponentUpdates || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component);
+ if (0 !== renderMode) if (1 === renderMode || !1 !== options.syncComponentUpdates || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component);
if (component.__r) component.__r(component);
}
}
- function renderComponent(component, opts, mountAll, isChild) {
+ function renderComponent(component, renderMode, mountAll, isChild) {
if (!component.__x) {
- var rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.__p || props, previousState = component.__s || state, previousContext = component.__c || context, isUpdate = component.base, nextBase = component.__b, initialBase = isUpdate || nextBase, initialChildComponent = component._component, skip = !1;
+ var rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.__p || props, previousState = component.__s || state, previousContext = component.__c || context, isUpdate = component.base, nextBase = component.__b, initialBase = isUpdate || nextBase, initialChildComponent = component._component, skip = !1, snapshot = previousContext;
+ if (component.constructor.getDerivedStateFromProps) {
+ state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));
+ component.state = state;
+ }
if (isUpdate) {
component.props = previousProps;
component.state = previousState;
component.context = previousContext;
- if (2 !== opts && component.shouldComponentUpdate && !1 === component.shouldComponentUpdate(props, state, context)) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context);
+ if (2 !== renderMode && component.shouldComponentUpdate && !1 === component.shouldComponentUpdate(props, state, context)) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context);
component.props = props;
component.state = state;
component.context = context;
if (!skip) {
rendered = component.render(props, state, context);
if (component.getChildContext) context = extend(extend({}, context), component.getChildContext());
+ if (isUpdate && component.getSnapshotBeforeUpdate) snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);
var toUnmount, base, childComponent = rendered && rendered.nodeName;
if ('function' == typeof childComponent) {
var childProps = getNodeProps(rendered);
cbase = initialBase;
toUnmount = initialChildComponent;
if (toUnmount) cbase = component._component = null;
- if (initialBase || 1 === opts) {
+ if (initialBase || 1 === renderMode) {
if (cbase) cbase._component = null;
base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0);
}
}
}
if (!isUpdate || mountAll) mounts.unshift(component); else if (!skip) {
- if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, previousContext);
+ if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, snapshot);
if (options.afterUpdate) options.afterUpdate(component);
}
- if (null != component.__h) while (component.__h.length) component.__h.pop().call(component);
+ while (component.__h.length) component.__h.pop().call(component);
if (!diffLevel && !isChild) flushMounts();
}
}
if (base.__preactattr_ && base.__preactattr_.ref) base.__preactattr_.ref(null);
component.__b = base;
removeNode(base);
- collectComponent(component);
+ recyclerComponents.push(component);
removeChildren(base);
}
if (component.__r) component.__r(null);
this.context = context;
this.props = props;
this.state = this.state || {};
+ this.__h = [];
}
function render(vnode, parent, merge) {
return diff(merge, vnode, {}, !1, parent, !1);
}
+ var VNode = function() {};
var options = {};
var stack = [];
var EMPTY_CHILDREN = [];
var diffLevel = 0;
var isSvgMode = !1;
var hydrating = !1;
- var components = {};
+ var recyclerComponents = [];
extend(Component.prototype, {
setState: function(state, callback) {
- var s = this.state;
- if (!this.__s) this.__s = extend({}, s);
- extend(s, 'function' == typeof state ? state(s, this.props) : state);
- if (callback) (this.__h = this.__h || []).push(callback);
+ var prev = this.__s = this.state;
+ if ('function' == typeof state) state = state(prev, this.props);
+ this.state = extend(extend({}, prev), state);
+ if (callback) this.__h.push(callback);
enqueueRender(this);
},
forceUpdate: function(callback) {
- if (callback) (this.__h = this.__h || []).push(callback);
+ if (callback) this.__h.push(callback);
renderComponent(this, 2);
},
render: function() {}
-!function(){var e=void 0,t=void 0;!function(){function t(r,n,i){function o(l,s){if(!n[l]){if(!r[l]){var c="function"==typeof e&&e;if(!s&&c)return c(l,!0);if(a)return a(l,!0);var u=new Error("Cannot find module '"+l+"'");throw u.code="MODULE_NOT_FOUND",u}var d=n[l]={exports:{}};r[l][0].call(d.exports,function(e){var t=r[l][1][e];return o(t||e)},d,d.exports,t,r,n,i)}return n[l].exports}for(var a="function"==typeof e&&e,l=0;l<i.length;l++)o(i[l]);return o}return t}()({1:[function(e,t,r){"use strict";function n(e){if("A"===e.target.tagName&&e.target.hasAttribute("data-hf-confirm")){confirm(e.target.getAttribute("data-hf-confirm"))||e.preventDefault()}}Object.defineProperty(r,"__esModule",{value:!0}),r.default={init:function(){document.body.addEventListener("click",n,!0)}}},{}],2:[function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}var i=n(e("./tabs.js")),o=n(e("./form-editor.js")),a=n(e("./form-actions.js")),l=n(e("./field-builder.js")),s=n(e("./action-confirmations.js")),c=n(e("tlite"));window.html_forms={},i.default.init(),s.default.init(),document.getElementById("hf-form-editor")&&(o.default.init(),a.default.init(),l.default.init(o.default)),(0,c.default)(function(e){return e.className.indexOf("hf-tooltip")>-1}),window.html_forms.FieldBuilder=l.default,window.html_forms.Editor=o.default,"edit"===hf_options.view&&window.columns.useCheckboxesForHidden()},{"./action-confirmations.js":1,"./field-builder.js":6,"./form-actions.js":8,"./form-editor.js":9,"./tabs.js":10,tlite:23}],3:[function(e,t,r){"use strict";function n(e,t,r,n,i){var o={};return Object.keys(n).forEach(function(e){o[e]=n[e]}),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce(function(r,n){return n(e,t,r)||r},o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(r,"__esModule",{value:!0}),r.FieldBuilder=void 0;var i,o=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),a=e("preact"),l=e("decko"),s=e("./field-configurator.js"),c=(i=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.state={activeField:null},r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,a.Component),o(t,[{key:"handleCancel",value:function(){this.setState({activeField:null})}},{key:"openFieldConfig",value:function(e){var t=this.props.fields[e.target.value];this.state.activeField===t?this.setState({activeField:null}):this.setState({activeField:t})}},{key:"render",value:function(e,t){var r=this,n=e.fields.map(function(e,n){return(0,a.h)("button",{type:"button",value:n,className:"button "+(t.activeField===e?"active":""),onClick:r.openFieldConfig},e.label)}),i=t.activeField?t.activeField.key:"",o=t.activeField?t.activeField.configRows:[];return(0,a.h)("div",{class:"hf-field-builder"},(0,a.h)("h4",null,"Add field"),(0,a.h)("div",{class:"available-fields"},n),(0,a.h)("div",{style:"max-width: 480px;"},(0,a.h)(s.FieldConfigurator,{fieldType:i,rows:o,onCancel:this.handleCancel})),null===t.activeField?(0,a.h)("p",{class:"help",style:"margin-bottom: 0;"},"Use the buttons above to generate your field HTML, or manually modify your form below."):"")}}]),t}(),n(i.prototype,"handleCancel",[l.bind],Object.getOwnPropertyDescriptor(i.prototype,"handleCancel"),i.prototype),n(i.prototype,"openFieldConfig",[l.bind],Object.getOwnPropertyDescriptor(i.prototype,"openFieldConfig"),i.prototype),i);r.FieldBuilder=c},{"./field-configurator.js":4,decko:19,preact:22}],4:[function(e,t,r){"use strict";function n(e,t,r,n,i){var o={};return Object.keys(n).forEach(function(e){o[e]=n[e]}),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=r.slice().reverse().reduce(function(r,n){return n(e,t,r)||r},o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(e,t,o),o=null),o}Object.defineProperty(r,"__esModule",{value:!0}),r.FieldConfigurator=void 0;var i,o=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),a=e("preact"),l=e("decko"),s=e("../field-builder/html.js"),c=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(e("./field-settings.js")),u=function(e){return e&&e.__esModule?e:{default:e}}(e("linkstate")),d=(i=function(e){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.state=r.getInitialState(),r.choiceHandlers={add:r.addChoice,delete:r.deleteChoice,changeLabel:r.changeChoiceLabel,toggleChecked:r.toggleChoiceChecked},r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,a.Component),o(t,[{key:"getInitialState",value:function(){return{fieldType:"",fieldLabel:"",placeholder:"",value:"",wrap:!0,required:!1,choices:[{checked:!1,label:"One"},{checked:!1,label:"Two"}],accept:""}}},{key:"componentWillReceiveProps",value:function(e){var t={fieldType:e.fieldType};"checkbox"===this.state.fieldType&&"checkbox"!==e.fieldType&&(t.choices=this.state.choices.map(function(e,t){return e.checked=!1,e})),this.setState(t)}},{key:"addToForm",value:function(){var e=(0,s.htmlgenerate)(this.state);html_forms.Editor.replaceSelection(e)}},{key:"addChoice",value:function(){var e=this.state.choices;e.push({checked:!1,label:"..."}),this.setState({choices:e})}},{key:"deleteChoice",value:function(e){var t=this.state.choices,r=e.target.parentElement.getAttribute("data-key");t.splice(r,1),this.setState({choices:t})}},{key:"changeChoiceLabel",value:function(e){var t=this.state.choices;t[e.target.parentElement.getAttribute("data-key")].label=e.target.value,this.setState({choices:t})}},{key:"toggleChoiceChecked",value:function(e){var t=this.state.choices,r=e.target.parentElement.getAttribute("data-key");t[r].checked=!t[r].checked,this.setState({choices:t})}},{key:"handleCancel",value:function(){this.setState(this.getInitialState()),this.props.onCancel()}},{key:"render",value:function(e,r){if(0==e.rows.length)return"";for(var n=[],i=0;i<e.rows.length;i++)switch(e.rows[i]){case"label":n.push((0,a.h)(c.Label,{value:r.fieldLabel,onChange:(0,u.default)(this,"fieldLabel")}));break;case"placeholder":n.push((0,a.h)(c.Placeholder,{value:r.placeholder,onChange:(0,u.default)(this,"placeholder")}));break;case"default-value":n.push((0,a.h)(c.DefaultValue,{value:r.value,onChange:(0,u.default)(this,"value")}));break;case"required":n.push((0,a.h)(c.Required,{checked:r.required,onChange:(0,u.default)(this,"required")}));break;case"wrap":n.push((0,a.h)(c.Wrap,{checked:r.wrap,onChange:(0,u.default)(this,"wrap")}));break;case"add-to-form":n.push((0,a.h)(c.AddToForm,{onSubmit:this.addToForm,onCancel:this.handleCancel}));break;case"choices":n.push((0,a.h)(c.Choices,{multiple:"checkbox"===r.fieldType,choices:r.choices,handlers:this.choiceHandlers}));break;case"button-text":n.push((0,a.h)(c.ButtonText,{value:r.value,onChange:(0,u.default)(this,"value")}));break;case"accept":n.push((0,a.h)(c.Accept,{value:r.accept,onChange:(0,u.default)(this,"accept")}))}return(0,a.h)("div",{class:"field-config",onKeyPress:t.handleKeyPress},n)}}],[{key:"handleKeyPress",value:function(e){13===e.keyCode&&e.preventDefault()}}]),t}(),n(i.prototype,"addToForm",[l.bind],Object.getOwnPropertyDescriptor(i.prototype,"addToForm"),i.prototype),n(i.prototype,"addChoice",[l.bind],Object.getOwnPropertyDescriptor(i.prototype,"addChoice"),i.prototype),n(i.prototype,"deleteChoice",[l.bind],Object.getOwnPropertyDescriptor(i.prototype,"deleteChoice"),i.prototype),n(i.prototype,"changeChoiceLabel",[l.bind],Object.getOwnPropertyDescriptor(i.prototype,"changeChoiceLabel"),i.prototype),n(i.prototype,"toggleChoiceChecked",[l.bind],Object.getOwnPropertyDescriptor(i.prototype,"toggleChoiceChecked"),i.prototype),n(i,"handleKeyPress",[l.bind],Object.getOwnPropertyDescriptor(i,"handleKeyPress"),i),n(i.prototype,"handleCancel",[l.bind],Object.getOwnPropertyDescriptor(i.prototype,"handleCancel"),i.prototype),i);r.FieldConfigurator=d},{"../field-builder/html.js":7,"./field-settings.js":5,decko:19,linkstate:20,preact:22}],5:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Accept=r.ButtonText=r.Choices=r.Required=r.Wrap=r.DefaultValue=r.Placeholder=r.Label=r.AddToForm=void 0;var n=e("preact");r.AddToForm=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("button",{class:"button",type:"button",onClick:e.onSubmit},"Add field to form")," ",(0,n.h)("a",{href:"javascript:void(0);",class:"hf-small",style:"vertical-align: middle;",onClick:e.onCancel},"or close field helper"))},r.Label=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-field-label"},"Field label ",(0,n.h)("span",{class:"hf-required"},"*")),(0,n.h)("input",{id:"hf-fg-field-label",type:"text",value:e.value,onChange:e.onChange}))},r.Placeholder=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-placeholder"},"Placeholder ",(0,n.h)("span",{class:"hf-italic hf-pull-right"},"Optional")),(0,n.h)("input",{id:"hf-fg-placeholder",type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Text to show when field has no value."))},r.DefaultValue=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-default-value"},"Default value ",(0,n.h)("span",{class:"hf-italic hf-pull-right"},"Optional")),(0,n.h)("input",{id:"hf-fg-default-value",type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Text to pre-fill this field with."))},r.Wrap=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{class:"inline"},(0,n.h)("input",{type:"checkbox",value:"1",defaultChecked:e.checked,onChange:e.onChange}),"Wrap this field in paragraph tags."))},r.Required=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{class:"inline"},(0,n.h)("input",{type:"checkbox",value:"1",defaultChecked:e.checked,onChange:e.onChange}),"This field is required."))},r.Choices=function(e){var t=e.choices.map(function(t,r){return(0,n.h)("div",{"data-key":r},(0,n.h)("input",{type:e.multiple?"checkbox":"radio",name:"selected",defaultChecked:t.checked,onChange:e.handlers.toggleChecked,title:"Pre-select this choice?"}),(0,n.h)("input",{type:"text",value:t.label,placeholder:"Choice label",style:"width: 80%;",onChange:e.handlers.changeLabel}),(0,n.h)("a",{href:"javascript:void(0);",onClick:e.handlers.delete,style:"text-decoration: none;",title:"Delete choice"},"✕"))});return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",null,"Choices"),t,(0,n.h)("input",{type:e.multiple?"checkbox":"radio",style:"visibility: hidden;"}),(0,n.h)("a",{href:"javascript:void(0);",onClick:e.handlers.add},"Add choice"))},r.ButtonText=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-default-value"},"Button text ",(0,n.h)("span",{class:"hf-required"},"*")),(0,n.h)("input",{id:"hf-fg-default-value",type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Text to show on the button."))},r.Accept=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",null,"Accepted file types"),(0,n.h)("input",{type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Use a comma-separated list of accepted file extensions, eg ",(0,n.h)("code",null,".pdf"),". ",(0,n.h)("br",null),"Leave empty to accept any file type."))}},{preact:22}],6:[function(e,t,r){"use strict";function n(e,t,r){this.key=e,this.label=t,this.configRows=r||[]}function i(){l=(0,o.render)((0,o.h)(a.FieldBuilder,{fields:s}),document.getElementById("hf-field-builder"),l)}Object.defineProperty(r,"__esModule",{value:!0});var o=e("preact"),a=e("./components/field-builder.js"),l=void 0,s=void 0;s=[new n("text","Text",["label","placeholder","default-value","required","wrap","add-to-form"]),new n("email","Email",["label","placeholder","default-value","required","wrap","add-to-form"]),new n("url","URL",["label","placeholder","default-value","required","wrap","add-to-form"]),new n("number","Number",["label","placeholder","default-value","required","wrap","add-to-form"]),new n("date","Date",["label","default-value","required","wrap","add-to-form"]),new n("textarea","Textarea",["label","placeholder","default-value","required","wrap","add-to-form"]),new n("dropdown","Dropdown",["label","choices","required","wrap","add-to-form"]),new n("checkbox","Checkboxes",["label","choices","wrap","add-to-form"]),new n("radio","Radio buttons",["label","choices","wrap","add-to-form"]),new n("submit","Submit button",["button-text","wrap","add-to-form"])],r.default={init:function(){i()},registerField:function(e,t,r){s.push(new n(e,t,r)),i()}}},{"./components/field-builder.js":3,preact:22}],7:[function(e,t,r){"use strict";function n(e,t,r){return(0,a.h)(e,function(e){var t={};for(var r in e)!1!==e[r]&&""!==e[r]&&(t[r]=e[r]);return t}(t),r)}function i(e){return e.replace(/ /g,"_").replace(/[^\w\[\]_]*/g,"").toUpperCase()}Object.defineProperty(r,"__esModule",{value:!0}),r.htmlgenerate=void 0;var o=function(e){return e&&e.__esModule?e:{default:e}}(e("preact-render-to-string")),a=e("preact");r.htmlgenerate=function(e){var t=e.fieldLabel.length&&"submit"!==e.fieldType?(0,a.h)("label",{},e.fieldLabel):"",r=void 0,l=void 0;switch(e.fieldType){case"text":default:l=n("input",r={type:e.fieldType,name:i(e.fieldLabel),value:e.value,placeholder:e.placeholder,required:e.required});break;case"textarea":l=n("textarea",r={name:i(e.fieldLabel),placeholder:e.placeholder,required:e.required},e.value);break;case"dropdown":l=n("select",r={name:i(e.fieldLabel),required:e.required},e.choices.map(function(e){return n("option",{selected:e.checked},e.label)}));break;case"radio":l=e.choices.map(function(t){return n("label",{},[n("input",{type:"radio",name:i(e.fieldLabel),value:t.label,selected:t.checked})," ",n("span",{},t.label)])});break;case"checkbox":l=e.choices.map(function(t){return n("label",{},[n("input",{type:"checkbox",name:i(e.fieldLabel)+"[]",value:t.label,checked:t.checked})," ",n("span",{},t.label)])});break;case"file":r={type:"file",name:i(e.fieldLabel),required:e.required},e.accept&&(r.accept=e.accept),l=n("input",r);break;case"submit":l=n("input",r={type:"submit",value:e.value})}var s="";if(e.wrap){var c=(0,a.h)("p",{},[t,l]);s=(0,o.default)(c,null,{pretty:!0})}else s+=(0,o.default)(t,null,{pretty:!0}),s+="\n",s+=(0,o.default)(l,null,{pretty:!0});return s}},{preact:22,"preact-render-to-string":21}],8:[function(e,t,r){"use strict";function n(e,t){var r=document.createElement("div");r.className="hf-accordion expanded ";var n=document.createElement("h4");n.className="hf-accordion-heading",n.innerHTML=e,r.appendChild(n);var i=document.createElement("div");i.className="hf-accordion-content",i.innerHTML=t,r.appendChild(i);var o=document.createElement("p");o.style.textAlign="right";var a=document.createElement("a");return a.href="javascript:void(0);",a.className="danger",a.innerText="Delete this action",o.appendChild(a),i.appendChild(o),n.addEventListener("click",function(e,t){return function(){var r=null===t.offsetParent;e.className=e.className.replace("expanded","")+(r?" expanded":""),t.style.display=r?"block":"none"}}(r,i)),a.addEventListener("click",function(e){return function(){l.removeChild(e),1===l.childElementCount&&(l.querySelector("#hf-form-actions-empty").style.display="")}}(r)),r}function i(e){var t=e.target||e.srcElement;if("INPUT"===t.tagName){var r=t.getAttribute("data-action-type"),i=a.querySelector("#hf-action-type-"+r+"-template"),o=l.querySelectorAll("div").length-1,s=n(t.value,i.innerHTML.replace(/\$index/g,o));l.appendChild(s),l.querySelector("#hf-form-actions-empty").style.display="none"}}Object.defineProperty(r,"__esModule",{value:!0});var o=void 0,a=void 0,l=void 0;r.default={init:function(){l=document.getElementById("hf-form-actions"),o=document.getElementById("hf-available-form-actions"),a=document.getElementById("hf-form-action-templates"),[].forEach.call(l.querySelectorAll(".hf-action-settings"),function(e){e.parentNode.removeChild(e);var t=e.getAttribute("data-title"),r=e.querySelector(".hf-action-summary");r&&(t+=' — <span class="hf-muted">'+r.innerHTML+"</span>");var i=n(t,e.innerHTML);l.appendChild(i),l.querySelector("#hf-form-actions-empty").style.display="none"}),o.addEventListener("click",i,!0)}}},{}],9:[function(e,t,r){"use strict";function n(){var e=v.contentDocument||v.contentWindow.document;(y=e.querySelector(".hf-fields-wrap"))&&a()}function i(e){return e.name.replace("[]","").replace(/\[(\w+)\]/g,".$1")}function o(){var e=p.querySelectorAll("input[name], select[name], textarea[name], button[name]"),t=function(e){var t={};return e.filter(function(e){return!t.hasOwnProperty(e)&&(t[e]=!0)})}([].map.call(e,function(e){return"["+i(e)+"]"})),r=document.getElementById("wpbody-content");[].forEach.call(document.querySelectorAll(".hf-field-names"),function(e){for(;e.firstChild;)e.removeChild(e.firstChild);t.map(function(e){var t=document.createElement("span");t.style.visibility="hidden",t.innerText=e,r.appendChild(t);var n=t.offsetWidth;r.removeChild(t);var i=document.createElement("input");return i.setAttribute("type","text"),i.style.maxWidth=1.1*n+14+"px",i.setAttribute("value",e),i.setAttribute("readonly",!0),i.setAttribute("onfocus","this.select()"),i}).forEach(function(t,r,n){e.appendChild(t)})})}function a(){var e=f.getValue();e=e.replace(b,function(e,t){return arguments[3]?arguments[3]:""}),y.innerHTML=e,y.dispatchEvent(new Event("hf-refresh"))}function l(){p.innerHTML=f.getValue()}function s(){var e=p.querySelectorAll("[required]"),t=[].map.call(e,i);m.value=t.join(",")}function c(){var e=p.querySelectorAll('input[type="email"]'),t=[].map.call(e,i);g.value=t.join(",")}function u(e,t,r){var n;return function(){var i=this,o=arguments,a=r&&!n;clearTimeout(n),n=setTimeout(function(){n=null,r||e.apply(i,o)},t),a&&e.apply(i,o)}}Object.defineProperty(r,"__esModule",{value:!0});var d=e("codemirror");e("codemirror/mode/xml/xml"),e("codemirror/mode/javascript/javascript"),e("codemirror/mode/css/css"),e("codemirror/mode/htmlmixed/htmlmixed"),e("codemirror/addon/fold/xml-fold"),e("codemirror/addon/edit/matchtags"),e("codemirror/addon/edit/closetag.js");var f=void 0,h=void 0,p=void 0,m=void 0,g=void 0,v=void 0,y=void 0,b=/\{\{ *(\w+)(?:\.([\w\.]+))? *(?:\|\| *(\w+))? *\}\}/g;r.default={init:function(){v=document.getElementById("hf-form-preview"),h=document.getElementById("hf-form-editor"),p=document.createElement("form"),m=document.getElementById("hf-required-fields"),g=document.getElementById("hf-email-fields"),p.innerHTML=h.value,(f=d.fromTextArea(h,{selectionPointer:!0,matchTags:{bothTags:!0},mode:"htmlmixed",htmlMode:!0,autoCloseTags:!0,autoRefresh:!0,styleActiveLine:!0,matchBrackets:!0})).on("changes",u(a,500)),f.on("changes",u(l,100)),f.on("changes",u(o,500)),f.on("blur",a),f.on("blur",l),f.on("blur",o),f.on("blur",s),f.on("blur",c),v.addEventListener("load",n),n(),o()},replaceSelection:function(e){f.replaceSelection(e),f.focus()}}},{codemirror:14,"codemirror/addon/edit/closetag.js":11,"codemirror/addon/edit/matchtags":12,"codemirror/addon/fold/xml-fold":13,"codemirror/mode/css/css":15,"codemirror/mode/htmlmixed/htmlmixed":16,"codemirror/mode/javascript/javascript":17,"codemirror/mode/xml/xml":18}],10:[function(e,t,r){"use strict";function n(e){for(var t=this.getAttribute("data-tab-target"),r=0;r<o.length;r++)o[r].classList.toggle("nav-tab-active",o[r]===this);this.blur();for(var n=0;n<i.length;n++){var a=i[n];a.classList.toggle("hf-tab-active",a.getAttribute("data-tab")===t)}if(document.title=document.title.replace(document.title.split(" - ").shift(),this.innerText+" "),window.history){var l=window.location.href;l=l.replace(/\&tab\=\w+/,""),l+="&tab="+t,window.history.replaceState({tab:t},document.title,l)}e.preventDefault()}Object.defineProperty(r,"__esModule",{value:!0});var i=void 0,o=void 0;r.default={init:function(){i=document.querySelectorAll(".hf-tab"),o=document.querySelectorAll("#hf-tabs-nav a");for(var e=0;e<o.length;e++)o[e].addEventListener("click",n)},open:n}},{}],11:[function(e,r,n){!function(i){"object"==typeof n&&"object"==typeof r?i(e("../../lib/codemirror"),e("../fold/xml-fold")):"function"==typeof t&&t.amd?t(["../../lib/codemirror","../fold/xml-fold"],i):i(CodeMirror)}(function(e){function t(t,r){for(var i=t.listSelections(),o=[],a=r?"/":"</",l=t.getOption("autoCloseTags"),s="object"==typeof l&&l.dontIndentOnSlash,c=0;c<i.length;c++){if(!i[c].empty())return e.Pass;var u=i[c].head,d=t.getTokenAt(u),f=e.innerMode(t.getMode(),d.state),h=f.state;if(r&&("string"==d.type||"<"!=d.string.charAt(0)||d.start!=u.ch-1))return e.Pass;var p;if("xml"!=f.mode.name)if("htmlmixed"==t.getMode().name&&"javascript"==f.mode.name)p=a+"script";else{if("htmlmixed"!=t.getMode().name||"css"!=f.mode.name)return e.Pass;p=a+"style"}else{if(!h.context||!h.context.tagName||n(t,h.context.tagName,u,h))return e.Pass;p=a+h.context.tagName}">"!=t.getLine(u.line).charAt(d.end)&&(p+=">"),o[c]=p}if(t.replaceSelections(o),i=t.listSelections(),!s)for(c=0;c<i.length;c++)(c==i.length-1||i[c].head.line<i[c+1].head.line)&&t.indentLine(i[c].head.line)}function r(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;++r)if(e[r]==t)return r;return-1}function n(t,r,n,i,o){if(!e.scanForClosingTag)return!1;var a=Math.min(t.lastLine()+1,n.line+500),l=e.scanForClosingTag(t,n,null,a);if(!l||l.tag!=r)return!1;for(var s=i.context,c=o?1:0;s&&s.tagName==r;s=s.prev)++c;n=l.to;for(var u=1;u<c;u++){var d=e.scanForClosingTag(t,n,null,a);if(!d||d.tag!=r)return!1;n=d.to}return!0}e.defineOption("autoCloseTags",!1,function(a,l,s){if(s!=e.Init&&s&&a.removeKeyMap("autoCloseTags"),l){var c={name:"autoCloseTags"};("object"!=typeof l||l.whenClosing)&&(c["'/'"]=function(r){return function(r){return r.getOption("disableInput")?e.Pass:t(r,!0)}(r)}),("object"!=typeof l||l.whenOpening)&&(c["'>'"]=function(t){return function(t){if(t.getOption("disableInput"))return e.Pass;for(var a=t.listSelections(),l=[],s=t.getOption("autoCloseTags"),c=0;c<a.length;c++){if(!a[c].empty())return e.Pass;var u=a[c].head,d=t.getTokenAt(u),f=e.innerMode(t.getMode(),d.state),h=f.state;if("xml"!=f.mode.name||!h.tagName)return e.Pass;var p="html"==f.mode.configuration,m="object"==typeof s&&s.dontCloseTags||p&&i,g="object"==typeof s&&s.indentTags||p&&o,v=h.tagName;d.end>u.ch&&(v=v.slice(0,v.length-d.end+u.ch));var y=v.toLowerCase();if(!v||"string"==d.type&&(d.end!=u.ch||!/[\"\']/.test(d.string.charAt(d.string.length-1))||1==d.string.length)||"tag"==d.type&&"closeTag"==h.type||d.string.indexOf("/")==d.string.length-1||m&&r(m,y)>-1||n(t,v,u,h,!0))return e.Pass;var b=g&&r(g,y)>-1;l[c]={indent:b,text:">"+(b?"\n\n":"")+"</"+v+">",newPos:b?e.Pos(u.line+1,0):e.Pos(u.line,u.ch+1)}}var w="object"==typeof s&&s.dontIndentOnAutoClose;for(c=a.length-1;c>=0;c--){var x=l[c];t.replaceRange(x.text,a[c].head,a[c].anchor,"+insert");var k=t.listSelections().slice(0);k[c]={head:x.newPos,anchor:x.newPos},t.setSelections(k),!w&&x.indent&&(t.indentLine(x.newPos.line,null,!0),t.indentLine(x.newPos.line+1,null,!0))}}(t)}),a.addKeyMap(c)}});var i=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],o=["applet","blockquote","body","button","div","dl","fieldset","form","frameset","h1","h2","h3","h4","h5","h6","head","html","iframe","layer","legend","object","ol","p","select","table","ul"];e.commands.closeTag=function(e){return t(e)}})},{"../../lib/codemirror":14,"../fold/xml-fold":13}],12:[function(e,r,n){!function(i){"object"==typeof n&&"object"==typeof r?i(e("../../lib/codemirror"),e("../fold/xml-fold")):"function"==typeof t&&t.amd?t(["../../lib/codemirror","../fold/xml-fold"],i):i(CodeMirror)}(function(e){"use strict";function t(e){e.state.tagHit&&e.state.tagHit.clear(),e.state.tagOther&&e.state.tagOther.clear(),e.state.tagHit=e.state.tagOther=null}function r(r){r.state.failedTagMatch=!1,r.operation(function(){if(t(r),!r.somethingSelected()){var n=r.getCursor(),i=r.getViewport();i.from=Math.min(i.from,n.line),i.to=Math.max(n.line+1,i.to);var o=e.findMatchingTag(r,n,i);if(o){if(r.state.matchBothTags){var a="open"==o.at?o.open:o.close;a&&(r.state.tagHit=r.markText(a.from,a.to,{className:"CodeMirror-matchingtag"}))}var l="close"==o.at?o.open:o.close;l?r.state.tagOther=r.markText(l.from,l.to,{className:"CodeMirror-matchingtag"}):r.state.failedTagMatch=!0}}})}function n(e){e.state.failedTagMatch&&r(e)}e.defineOption("matchTags",!1,function(i,o,a){a&&a!=e.Init&&(i.off("cursorActivity",r),i.off("viewportChange",n),t(i)),o&&(i.state.matchBothTags="object"==typeof o&&o.bothTags,i.on("cursorActivity",r),i.on("viewportChange",n),r(i))}),e.commands.toMatchingTag=function(t){var r=e.findMatchingTag(t,t.getCursor());if(r){var n="close"==r.at?r.open:r.close;n&&t.extendSelection(n.to,n.from)}}})},{"../../lib/codemirror":14,"../fold/xml-fold":13}],13:[function(e,r,n){!function(i){"object"==typeof n&&"object"==typeof r?i(e("../../lib/codemirror")):"function"==typeof t&&t.amd?t(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";function t(e,t,r,n){this.line=t,this.ch=r,this.cm=e,this.text=e.getLine(t),this.min=n?Math.max(n.from,e.firstLine()):e.firstLine(),this.max=n?Math.min(n.to-1,e.lastLine()):e.lastLine()}function r(e,t){var r=e.cm.getTokenTypeAt(d(e.line,t));return r&&/\btag\b/.test(r)}function n(e){if(!(e.line>=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function i(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function o(e){for(;;){var t=e.text.indexOf(">",e.ch);if(-1==t){if(n(e))continue;return}{if(r(e,t+1)){var i=e.text.lastIndexOf("/",t),o=i>-1&&!/\S/.test(e.text.slice(i+1,t));return e.ch=t+1,o?"selfClose":"regular"}e.ch=t+1}}}function a(e){for(;;){var t=e.ch?e.text.lastIndexOf("<",e.ch-1):-1;if(-1==t){if(i(e))continue;return}if(r(e,t+1)){h.lastIndex=t,e.ch=t;var n=h.exec(e.text);if(n&&n.index==t)return n}else e.ch=t}}function l(e){for(;;){h.lastIndex=e.ch;var t=h.exec(e.text);if(!t){if(n(e))continue;return}{if(r(e,t.index+1))return e.ch=t.index+t[0].length,t;e.ch=t.index+1}}}function s(e){for(;;){var t=e.ch?e.text.lastIndexOf(">",e.ch-1):-1;if(-1==t){if(i(e))continue;return}{if(r(e,t+1)){var n=e.text.lastIndexOf("/",t),o=n>-1&&!/\S/.test(e.text.slice(n+1,t));return e.ch=t+1,o?"selfClose":"regular"}e.ch=t}}}function c(e,t){for(var r=[];;){var n,i=l(e),a=e.line,s=e.ch-(i?i[0].length:0);if(!i||!(n=o(e)))return;if("selfClose"!=n)if(i[1]){for(var c=r.length-1;c>=0;--c)if(r[c]==i[2]){r.length=c;break}if(c<0&&(!t||t==i[2]))return{tag:i[2],from:d(a,s),to:d(e.line,e.ch)}}else r.push(i[2])}}function u(e,t){for(var r=[];;){var n=s(e);if(!n)return;if("selfClose"!=n){var i=e.line,o=e.ch,l=a(e);if(!l)return;if(l[1])r.push(l[2]);else{for(var c=r.length-1;c>=0;--c)if(r[c]==l[2]){r.length=c;break}if(c<0&&(!t||t==l[2]))return{tag:l[2],from:d(e.line,e.ch),to:d(i,o)}}}else a(e)}}var d=e.Pos,f="A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",h=new RegExp("<(/?)(["+f+"][A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD-:.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*)","g");e.registerHelper("fold","xml",function(e,r){for(var n=new t(e,r.line,0);;){var i,a=l(n);if(!a||!(i=o(n))||n.line!=r.line)return;if(!a[1]&&"selfClose"!=i){var s=d(n.line,n.ch),u=c(n,a[2]);return u&&{from:s,to:u.from}}}}),e.findMatchingTag=function(e,r,n){var i=new t(e,r.line,r.ch,n);if(-1!=i.text.indexOf(">")||-1!=i.text.indexOf("<")){var l=o(i),s=l&&d(i.line,i.ch),f=l&&a(i);if(l&&f&&!(function(e,t){return e.line-t.line||e.ch-t.ch}(i,r)>0)){var h={from:d(i.line,i.ch),to:s,tag:f[2]};return"selfClose"==l?{open:h,close:null,at:"open"}:f[1]?{open:u(i,f[2]),close:h,at:"close"}:(i=new t(e,s.line,s.ch,n),{open:h,close:c(i,f[2]),at:"open"})}}},e.findEnclosingTag=function(e,r,n,i){for(var o=new t(e,r.line,r.ch,n);;){var a=u(o,i);if(!a)break;var l=c(new t(e,r.line,r.ch,n),a.tag);if(l)return{open:a,close:l}}},e.scanForClosingTag=function(e,r,n,i){return c(new t(e,r.line,r.ch,i?{from:0,to:i}:null),n)}})},{"../../lib/codemirror":14}],14:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?r.exports=i():"function"==typeof t&&t.amd?t(i):e.CodeMirror=i()}(this,function(){"use strict";function e(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function t(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function r(e,r){return t(e).appendChild(r)}function n(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function i(e,t,r,i){var o=n(e,t,r,i);return o.setAttribute("role","presentation"),o}function o(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function a(){var e;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function l(t,r){var n=t.className;e(r).test(n)||(t.className+=(n?" ":"")+r)}function s(t,r){for(var n=t.split(" "),i=0;i<n.length;i++)n[i]&&!e(n[i]).test(r)&&(r+=" "+n[i]);return r}function c(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function u(e,t,r){t||(t={});for(var n in e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function d(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=n||0,a=i||0;;){var l=e.indexOf("\t",o);if(l<0||l>=t)return a+(t-o);a+=l-o,a+=r-a%r,o=l+1}}function f(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}function h(e,t,r){for(var n=0,i=0;;){var o=e.indexOf("\t",n);-1==o&&(o=e.length);var a=o-n;if(o==e.length||i+a>=t)return n+Math.min(a,t-i);if(i+=o-n,i+=r-i%r,n=o+1,i>=t)return n}}function p(e){for(;wo.length<=e;)wo.push(m(wo)+" ");return wo[e]}function m(e){return e[e.length-1]}function g(e,t){for(var r=[],n=0;n<e.length;n++)r[n]=t(e[n],n);return r}function v(){}function y(e,t){var r;return Object.create?r=Object.create(e):(v.prototype=e,r=new v),t&&u(t,r),r}function b(e){return/\w/.test(e)||e>"\80"&&(e.toUpperCase()!=e.toLowerCase()||xo.test(e))}function w(e,t){return t?!!(t.source.indexOf("\\w")>-1&&b(e))||t.test(e):b(e)}function x(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}function k(e){return e.charCodeAt(0)>=768&&ko.test(e)}function C(e,t,r){for(;(r<0?t>0:t<e.length)&&k(e.charAt(t));)t+=r;return t}function S(e,t,r){for(var n=t>r?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}function T(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t<o){r=i;break}t-=o}return r.lines[t]}function L(e,t,r){var n=[],i=t.line;return e.iter(t.line,r.line+1,function(e){var o=e.text;i==r.line&&(o=o.slice(0,r.ch)),i==t.line&&(o=o.slice(t.ch)),n.push(o),++i}),n}function M(e,t,r){var n=[];return e.iter(t,r,function(e){n.push(e.text)}),n}function O(e,t){var r=t-e.height;if(r)for(var n=e;n;n=n.parent)n.height+=r}function N(e){if(null==e.parent)return null;for(var t=e.parent,r=f(t.lines,e),n=t.parent;n;t=n,n=n.parent)for(var i=0;n.children[i]!=t;++i)r+=n.children[i].chunkSize();return r+t.first}function A(e,t){var r=e.first;e:do{for(var n=0;n<e.children.length;++n){var i=e.children[n],o=i.height;if(t<o){e=i;continue e}t-=o,r+=i.chunkSize()}return r}while(!e.lines);for(var a=0;a<e.lines.length;++a){var l=e.lines[a].height;if(t<l)break;t-=l}return r+a}function _(e,t){return t>=e.first&&t<e.first+e.size}function P(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function D(e,t,r){if(void 0===r&&(r=null),!(this instanceof D))return new D(e,t,r);this.line=e,this.ch=t,this.sticky=r}function W(e,t){return e.line-t.line||e.ch-t.ch}function F(e,t){return e.sticky==t.sticky&&0==W(e,t)}function z(e){return D(e.line,e.ch)}function E(e,t){return W(e,t)<0?t:e}function H(e,t){return W(e,t)<0?e:t}function I(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function j(e,t){if(t.line<e.first)return D(e.first,0);var r=e.first+e.size-1;return t.line>r?D(r,T(e,r).text.length):function(e,t){var r=e.ch;return null==r||r>t?D(e.line,t):r<0?D(e.line,0):e}(t,T(e,t.line).text.length)}function B(e,t){for(var r=[],n=0;n<t.length;n++)r[n]=j(e,t[n]);return r}function R(e,t,r){this.marker=e,this.from=t,this.to=r}function q(e,t){if(e)for(var r=0;r<e.length;++r){var n=e[r];if(n.marker==t)return n}}function U(e,t){for(var r,n=0;n<e.length;++n)e[n]!=t&&(r||(r=[])).push(e[n]);return r}function V(e,t){if(t.full)return null;var r=_(e,t.from.line)&&T(e,t.from.line).markedSpans,n=_(e,t.to.line)&&T(e,t.to.line).markedSpans;if(!r&&!n)return null;var i=t.from.ch,o=t.to.ch,a=0==W(t.from,t.to),l=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],a=o.marker;if(null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t)||o.from==t&&"bookmark"==a.type&&(!r||!o.marker.insertLeft)){var l=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);(n||(n=[])).push(new R(a,o.from,l?null:o.to))}}return n}(r,i,a),s=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],a=o.marker;if(null==o.to||(a.inclusiveRight?o.to>=t:o.to>t)||o.from==t&&"bookmark"==a.type&&(!r||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);(n||(n=[])).push(new R(a,l?null:o.from-t,null==o.to?null:o.to-t))}}return n}(n,o,a),c=1==t.text.length,u=m(t.text).length+(c?i:0);if(l)for(var d=0;d<l.length;++d){var f=l[d];if(null==f.to){var h=q(s,f.marker);h?c&&(f.to=null==h.to?null:h.to+u):f.to=i}}if(s)for(var p=0;p<s.length;++p){var g=s[p];if(null!=g.to&&(g.to+=u),null==g.from){q(l,g.marker)||(g.from=u,c&&(l||(l=[])).push(g))}else g.from+=u,c&&(l||(l=[])).push(g)}l&&(l=K(l)),s&&s!=l&&(s=K(s));var v=[l];if(!c){var y,b=t.text.length-2;if(b>0&&l)for(var w=0;w<l.length;++w)null==l[w].to&&(y||(y=[])).push(new R(l[w].marker,null,null));for(var x=0;x<b;++x)v.push(y);v.push(s)}return v}function K(e){for(var t=0;t<e.length;++t){var r=e[t];null!=r.from&&r.from==r.to&&!1!==r.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function G(e){var t=e.markedSpans;if(t){for(var r=0;r<t.length;++r)t[r].marker.detachLine(e);e.markedSpans=null}}function $(e,t){if(t){for(var r=0;r<t.length;++r)t[r].marker.attachLine(e);e.markedSpans=t}}function X(e){return e.inclusiveLeft?-1:0}function Y(e){return e.inclusiveRight?1:0}function Z(e,t){var r=e.lines.length-t.lines.length;if(0!=r)return r;var n=e.find(),i=t.find(),o=W(n.from,i.from)||X(e)-X(t);if(o)return-o;var a=W(n.to,i.to)||Y(e)-Y(t);return a||t.id-e.id}function Q(e,t){var r,n=So&&e.markedSpans;if(n)for(var i=void 0,o=0;o<n.length;++o)(i=n[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!r||Z(r,i.marker)<0)&&(r=i.marker);return r}function J(e){return Q(e,!0)}function ee(e){return Q(e,!1)}function te(e,t,r,n,i){var o=T(e,t),a=So&&o.markedSpans;if(a)for(var l=0;l<a.length;++l){var s=a[l];if(s.marker.collapsed){var c=s.marker.find(0),u=W(c.from,r)||X(s.marker)-X(i),d=W(c.to,n)||Y(s.marker)-Y(i);if(!(u>=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?W(c.to,r)>=0:W(c.to,r)>0)||u>=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?W(c.from,n)<=0:W(c.from,n)<0)))return!0}}}function re(e){for(var t;t=J(e);)e=t.find(-1,!0).line;return e}function ne(e,t){var r=T(e,t),n=re(r);return r==n?t:N(n)}function ie(e,t){if(t>e.lastLine())return t;var r,n=T(e,t);if(!oe(e,n))return t;for(;r=ee(n);)n=r.find(1,!0).line;return N(n)+1}function oe(e,t){var r=So&&t.markedSpans;if(r)for(var n=void 0,i=0;i<r.length;++i)if((n=r[i]).marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&ae(e,t,n))return!0}}function ae(e,t,r){if(null==r.to){var n=r.marker.find(1,!0);return ae(e,n.line,q(n.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if((i=t.markedSpans[o]).marker.collapsed&&!i.marker.widgetNode&&i.from==r.to&&(null==i.to||i.to!=r.from)&&(i.marker.inclusiveLeft||r.marker.inclusiveRight)&&ae(e,t,i))return!0}function le(e){for(var t=0,r=(e=re(e)).parent,n=0;n<r.lines.length;++n){var i=r.lines[n];if(i==e)break;t+=i.height}for(var o=r.parent;o;r=o,o=r.parent)for(var a=0;a<o.children.length;++a){var l=o.children[a];if(l==r)break;t+=l.height}return t}function se(e){if(0==e.height)return 0;for(var t,r=e.text.length,n=e;t=J(n);){var i=t.find(0,!0);n=i.from.line,r+=i.from.ch-i.to.ch}for(n=e;t=ee(n);){var o=t.find(0,!0);r-=n.text.length-o.from.ch,r+=(n=o.to.line).text.length-o.to.ch}return r}function ce(e){var t=e.display,r=e.doc;t.maxLine=T(r,r.first),t.maxLineLength=se(t.maxLine),t.maxLineChanged=!0,r.iter(function(e){var r=se(e);r>t.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}function ue(e,t,r){var n;To=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:To=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:To=i)}return null!=n?n:To}function de(e,t){var r=e.order;return null==r&&(r=e.order=Lo(e.text,t)),r}function fe(e,t){return e._handlers&&e._handlers[t]||Mo}function he(e,t,r){if(e.removeEventListener)e.removeEventListener(t,r,!1);else if(e.detachEvent)e.detachEvent("on"+t,r);else{var n=e._handlers,i=n&&n[t];if(i){var o=f(i,r);o>-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function pe(e,t){var r=fe(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i<r.length;++i)r[i].apply(null,n)}function me(e,t,r){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),pe(e,r||t.type,e,t),xe(t)||t.codemirrorIgnore}function ge(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var r=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),n=0;n<t.length;++n)-1==f(r,t[n])&&r.push(t[n])}function ve(e,t){return fe(e,t).length>0}function ye(e){e.prototype.on=function(e,t){Oo(this,e,t)},e.prototype.off=function(e,t){he(this,e,t)}}function be(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function we(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function xe(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ke(e){be(e),we(e)}function Ce(e){return e.target||e.srcElement}function Se(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),ro&&e.ctrlKey&&1==t&&(t=3),t}function Te(e){if(null==ho){var t=n("span","");r(e,n("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(ho=t.offsetWidth<=1&&t.offsetHeight>2&&!(Ui&&Vi<8))}var i=ho?n("span",""):n("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return i.setAttribute("cm-text",""),i}function Le(e){if(null!=po)return po;var n=r(e,document.createTextNode("AخA")),i=ao(n,0,1).getBoundingClientRect(),o=ao(n,1,2).getBoundingClientRect();return t(e),!(!i||i.left==i.right)&&(po=o.right-i.right<3)}function Me(e){if("string"==typeof e&&Fo.hasOwnProperty(e))e=Fo[e];else if(e&&"string"==typeof e.name&&Fo.hasOwnProperty(e.name)){var t=Fo[e.name];"string"==typeof t&&(t={name:t}),(e=y(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Me("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Me("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Oe(e,t){t=Me(t);var r=Wo[t.name];if(!r)return Oe(e,"text/plain");var n=r(e,t);if(zo.hasOwnProperty(t.name)){var i=zo[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)n[a]=t.modeProps[a];return n}function Ne(e,t){u(t,zo.hasOwnProperty(e)?zo[e]:zo[e]={})}function Ae(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function _e(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Pe(e,t,r){return!e.startState||e.startState(t,r)}function De(e,t,r,n){var i=[e.state.modeGen],o={};Be(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var a=r.state,l=function(n){r.baseTokens=i;var l=e.state.overlays[n],s=1,c=0;r.state=!0,Be(e,t.text,l.mode,r,function(e,t){for(var r=s;c<e;){var n=i[s];n>e&&i.splice(s,1,e,i[s+1],n),s+=2,c=Math.min(e,n)}if(t)if(l.opaque)i.splice(r,s-r,e,"overlay "+t),s=r+2;else for(;r<s;r+=2){var o=i[r+1];i[r+1]=(o?o+" ":"")+"overlay "+t}},o),r.state=a,r.baseTokens=null,r.baseTokenPos=1},s=0;s<e.state.overlays.length;++s)l(s);return{styles:i,classes:o.bgClass||o.textClass?o:null}}function We(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var n=Fe(e,N(t)),i=t.text.length>e.options.maxHighlightLength&&Ae(e.doc.mode,n.state),o=De(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function Fe(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new Io(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,a=r?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;l>a;--l){if(l<=o.first)return o.first;var s=T(o,l-1),c=s.stateAfter;if(c&&(!r||l+(c instanceof Ho?c.lookAhead:0)<=o.modeFrontier))return l;var u=d(s.text,null,e.options.tabSize);(null==i||n>u)&&(i=l-1,n=u)}return i}(e,t,r),a=o>n.first&&T(n,o-1).stateAfter,l=a?Io.fromSaved(n,a,o):new Io(n,Pe(n.mode),o);return n.iter(o,t,function(r){ze(e,r.text,l);var n=l.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&n<i.viewTo?l.save():null,l.nextLine()}),r&&(n.modeFrontier=l.line),l}function ze(e,t,r,n){var i=e.doc.mode,o=new Eo(t,e.options.tabSize,r);for(o.start=o.pos=n||0,""==t&&Ee(i,r.state);!o.eol();)He(i,o,r.state),o.start=o.pos}function Ee(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var r=_e(e,t);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function He(e,t,r,n){for(var i=0;i<10;i++){n&&(n[0]=_e(e,r).mode);var o=e.token(t,r);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}function Ie(e,t,r,n){var i,o,a=e.doc,l=a.mode,s=T(a,(t=j(a,t)).line),c=Fe(e,t.line,r),u=new Eo(s.text,e.options.tabSize,c);for(n&&(o=[]);(n||u.pos<t.ch)&&!u.eol();)u.start=u.pos,i=He(l,u,c.state),n&&o.push(new jo(u,i,Ae(a.mode,c.state)));return n?o:new jo(u,i,c.state)}function je(e,t){if(e)for(;;){var r=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!r)break;e=e.slice(0,r.index)+e.slice(r.index+r[0].length);var n=r[1]?"bgClass":"textClass";null==t[n]?t[n]=r[2]:new RegExp("(?:^|s)"+r[2]+"(?:$|s)").test(t[n])||(t[n]+=" "+r[2])}return e}function Be(e,t,r,n,i,o,a){var l=r.flattenSpans;null==l&&(l=e.options.flattenSpans);var s,c=0,u=null,d=new Eo(t,e.options.tabSize,n),f=e.options.addModeClass&&[null];for(""==t&&je(Ee(r,n.state),o);!d.eol();){if(d.pos>e.options.maxHighlightLength?(l=!1,a&&ze(e,t,n,d.pos),d.pos=t.length,s=null):s=je(He(r,d,n.state,f),o),f){var h=f[0].name;h&&(s="m-"+(s?h+" "+s:h))}if(!l||u!=s){for(;c<d.start;)i(c=Math.min(d.start,c+5e3),u);u=s}d.start=d.pos}for(;c<d.pos;){var p=Math.min(d.pos,c+5e3);i(p,u),c=p}}function Re(e){e.parent=null,G(e)}function qe(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?Uo:qo;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function Ue(e,t){var r=i("span",null,null,Ki?"padding-right: .1px":null),n={pre:i("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(Ui||Ki)&&e.getOption("lineWrapping")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var a=o?t.rest[o-1]:t.line,l=void 0;n.pos=0,n.addToken=Ke,Le(e.display.measure)&&(l=de(a,e.doc.direction))&&(n.addToken=function(e,t){return function(r,n,i,o,a,l,s){i=i?i+" cm-force-border":"cm-force-border";for(var c=r.pos,u=c+n.length;;){for(var d=void 0,f=0;f<t.length&&!((d=t[f]).to>c&&d.from<=c);f++);if(d.to>=u)return e(r,n,i,o,a,l,s);e(r,n.slice(0,d.to-c),i,o,null,l,s),o=null,n=n.slice(d.to-c),c=d.to}}}(n.addToken,l)),n.map=[];!function(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(!n){for(var a=1;a<r.length;a+=2)t.addToken(t,i.slice(o,o=r[a]),qe(r[a+1],t.cm.options));return}for(var l,s,c,u,d,f,h,p=i.length,m=0,g=1,v="",y=0;;){if(y==m){c=u=d=f=s="",h=null,y=1/0;for(var b=[],w=void 0,x=0;x<n.length;++x){var k=n[x],C=k.marker;"bookmark"==C.type&&k.from==m&&C.widgetNode?b.push(C):k.from<=m&&(null==k.to||k.to>m||C.collapsed&&k.to==m&&k.from==m)?(null!=k.to&&k.to!=m&&y>k.to&&(y=k.to,u=""),C.className&&(c+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&k.from==m&&(d+=" "+C.startStyle),C.endStyle&&k.to==y&&(w||(w=[])).push(C.endStyle,k.to),C.title&&!f&&(f=C.title),C.collapsed&&(!h||Z(h.marker,C)<0)&&(h=k)):k.from>m&&y>k.from&&(y=k.from)}if(w)for(var S=0;S<w.length;S+=2)w[S+1]==y&&(u+=" "+w[S]);if(!h||h.from==m)for(var T=0;T<b.length;++T)Ge(t,0,b[T]);if(h&&(h.from||0)==m){if(Ge(t,(null==h.to?p+1:h.to)-m,h.marker,null==h.from),null==h.to)return;h.to==m&&(h=!1)}}if(m>=p)break;for(var L=Math.min(p,y);;){if(v){var M=m+v.length;if(!h){var O=M>L?v.slice(0,L-m):v;t.addToken(t,O,l?l+c:c,d,m+O.length==y?u:"",f,s)}if(M>=L){v=v.slice(L-m),m=L;break}m=M,d=""}v=i.slice(o,o=r[g++]),l=qe(r[g++],t.cm.options)}}}(a,n,We(e,a,t!=e.display.externalMeasured&&N(a))),a.styleClasses&&(a.styleClasses.bgClass&&(n.bgClass=s(a.styleClasses.bgClass,n.bgClass||"")),a.styleClasses.textClass&&(n.textClass=s(a.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Te(e.display.measure))),0==o?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(Ki){var c=n.content.lastChild;(/\bcm-tab\b/.test(c.className)||c.querySelector&&c.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return pe(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=s(n.pre.className,n.textClass||"")),n}function Ve(e){var t=n("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Ke(e,t,r,i,o,a,l){if(t){var s,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!r||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=" "),n+=o,r=" "==o}return n}(t,e.trailingSpace):t,u=e.cm.state.specialChars,d=!1;if(u.test(t)){s=document.createDocumentFragment();for(var f=0;;){u.lastIndex=f;var h=u.exec(t),m=h?h.index-f:t.length-f;if(m){var g=document.createTextNode(c.slice(f,f+m));Ui&&Vi<9?s.appendChild(n("span",[g])):s.appendChild(g),e.map.push(e.pos,e.pos+m,g),e.col+=m,e.pos+=m}if(!h)break;f+=m+1;var v=void 0;if("\t"==h[0]){var y=e.cm.options.tabSize,b=y-e.col%y;(v=s.appendChild(n("span",p(b),"cm-tab"))).setAttribute("role","presentation"),v.setAttribute("cm-text","\t"),e.col+=b}else"\r"==h[0]||"\n"==h[0]?((v=s.appendChild(n("span","\r"==h[0]?"␍":"","cm-invalidchar"))).setAttribute("cm-text",h[0]),e.col+=1):((v=e.cm.options.specialCharPlaceholder(h[0])).setAttribute("cm-text",h[0]),Ui&&Vi<9?s.appendChild(n("span",[v])):s.appendChild(v),e.col+=1);e.map.push(e.pos,e.pos+1,v),e.pos++}}else e.col+=t.length,s=document.createTextNode(c),e.map.push(e.pos,e.pos+t.length,s),Ui&&Vi<9&&(d=!0),e.pos+=t.length;if(e.trailingSpace=32==c.charCodeAt(t.length-1),r||i||o||d||l){var w=r||"";i&&(w+=i),o&&(w+=o);var x=n("span",[s],w,l);return a&&(x.title=a),e.content.appendChild(x)}e.content.appendChild(s)}}function Ge(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function $e(e,t,r){this.line=t,this.rest=function(e){for(var t,r;t=ee(e);)e=t.find(1,!0).line,(r||(r=[])).push(e);return r}(t),this.size=this.rest?N(m(this.rest))-r+1:1,this.node=this.text=null,this.hidden=oe(e,t)}function Xe(e,t,r){for(var n,i=[],o=t;o<r;o=n){var a=new $e(e.doc,T(e.doc,o),o);n=o+a.size,i.push(a)}return i}function Ye(e,t){var r=fe(e,t);if(r.length){var n,i=Array.prototype.slice.call(arguments,2);Vo?n=Vo.delayedCallbacks:Ko?n=Ko:(n=Ko=[],setTimeout(Ze,0));for(var o=function(e){n.push(function(){return r[e].apply(null,i)})},a=0;a<r.length;++a)o(a)}}function Ze(){var e=Ko;Ko=null;for(var t=0;t<e.length;++t)e[t]()}function Qe(e,t,r,n){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?function(e,t){var r=t.text.className,n=et(e,t);t.text==t.node&&(t.node=n.pre);t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,tt(e,t)):r&&(t.text.className=r)}(e,t):"gutter"==o?rt(e,t,r,n):"class"==o?tt(e,t):"widget"==o&&function(e,t,r){t.alignable&&(t.alignable=null);for(var n=t.node.firstChild,i=void 0;n;n=i)i=n.nextSibling,"CodeMirror-linewidget"==n.className&&t.node.removeChild(n);it(e,t,r)}(e,t,n)}t.changes=null}function Je(e){return e.node==e.text&&(e.node=n("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),Ui&&Vi<8&&(e.node.style.zIndex=2)),e.node}function et(e,t){var r=e.display.externalMeasured;return r&&r.line==t.line?(e.display.externalMeasured=null,t.measure=r.measure,r.built):Ue(e,t)}function tt(e,t){!function(e,t){var r=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(r&&(r+=" CodeMirror-linebackground"),t.background)r?t.background.className=r:(t.background.parentNode.removeChild(t.background),t.background=null);else if(r){var i=Je(t);t.background=i.insertBefore(n("div",null,r),i.firstChild),e.display.input.setUneditable(t.background)}}(e,t),t.line.wrapClass?Je(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var r=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=r||""}function rt(e,t,r,i){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var o=Je(t);t.gutterBackground=n("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px; width: "+i.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),o.insertBefore(t.gutterBackground,t.text)}var a=t.line.gutterMarkers;if(e.options.lineNumbers||a){var l=Je(t),s=t.gutter=n("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?i.fixedPos:-i.gutterTotalWidth)+"px");if(e.display.input.setUneditable(s),l.insertBefore(s,t.text),t.line.gutterClass&&(s.className+=" "+t.line.gutterClass),!e.options.lineNumbers||a&&a["CodeMirror-linenumbers"]||(t.lineNumber=s.appendChild(n("div",P(e.options,r),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+i.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),a)for(var c=0;c<e.options.gutters.length;++c){var u=e.options.gutters[c],d=a.hasOwnProperty(u)&&a[u];d&&s.appendChild(n("div",[d],"CodeMirror-gutter-elt","left: "+i.gutterLeft[u]+"px; width: "+i.gutterWidth[u]+"px"))}}}function nt(e,t,r,n){var i=et(e,t);return t.text=t.node=i.pre,i.bgClass&&(t.bgClass=i.bgClass),i.textClass&&(t.textClass=i.textClass),tt(e,t),rt(e,t,r,n),it(e,t,n),t.node}function it(e,t,r){if(ot(e,t.line,t,r,!0),t.rest)for(var n=0;n<t.rest.length;n++)ot(e,t.rest[n],t,r,!1)}function ot(e,t,r,i,o){if(t.widgets)for(var a=Je(r),l=0,s=t.widgets;l<s.length;++l){var c=s[l],u=n("div",[c.node],"CodeMirror-linewidget");c.handleMouseEvents||u.setAttribute("cm-ignore-events","true"),function(e,t,r,n){if(e.noHScroll){(r.alignable||(r.alignable=[])).push(t);var i=n.wrapperWidth;t.style.left=n.fixedPos+"px",e.coverGutter||(i-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+"px"))}(c,u,r,i),e.display.input.setUneditable(u),o&&c.above?a.insertBefore(u,r.gutter||r.text):a.appendChild(u),Ye(c,"redraw")}}function at(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!o(document.body,e.node)){var i="position: relative;";e.coverGutter&&(i+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(i+="width: "+t.display.wrapper.clientWidth+"px;"),r(t.display.measure,n("div",[e.node],null,i))}return e.height=e.node.parentNode.offsetHeight}function lt(e,t){for(var r=Ce(t);r!=e.wrapper;r=r.parentNode)if(!r||1==r.nodeType&&"true"==r.getAttribute("cm-ignore-events")||r.parentNode==e.sizer&&r!=e.mover)return!0}function st(e){return e.lineSpace.offsetTop}function ct(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function ut(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=r(e.measure,n("pre","x")),i=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,o={left:parseInt(i.paddingLeft),right:parseInt(i.paddingRight)};return isNaN(o.left)||isNaN(o.right)||(e.cachedPaddingH=o),o}function dt(e){return mo-e.display.nativeBarWidth}function ft(e){return e.display.scroller.clientWidth-dt(e)-e.display.barWidth}function ht(e){return e.display.scroller.clientHeight-dt(e)-e.display.barHeight}function pt(e,t,r){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var n=0;n<e.rest.length;n++)if(e.rest[n]==t)return{map:e.measure.maps[n],cache:e.measure.caches[n]};for(var i=0;i<e.rest.length;i++)if(N(e.rest[i])>r)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function mt(e,t,r,n){return yt(e,vt(e,t),r,n)}function gt(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[Ut(e,t)];var r=e.display.externalMeasured;return r&&t>=r.lineN&&t<r.lineN+r.size?r:void 0}function vt(e,t){var n=N(t),i=gt(e,n);i&&!i.text?i=null:i&&i.changes&&(Qe(e,i,n,It(e)),e.curOp.forceUpdate=!0),i||(i=function(e,t){var n=N(t=re(t)),i=e.display.externalMeasured=new $e(e.doc,t,n);i.lineN=n;var o=i.built=Ue(e,i);return i.text=o.pre,r(e.display.lineMeasure,o.pre),i}(e,t));var o=pt(i,t,n);return{line:t,view:i,rect:null,map:o.map,cache:o.cache,before:o.before,hasHeights:!1}}function yt(e,t,i,o,a){t.before&&(i=-1);var l,s=i+(o||"");return t.cache.hasOwnProperty(s)?l=t.cache[s]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(!function(e,t,r){var n=e.options.lineWrapping,i=n&&ft(e);if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[];if(n){t.measure.width=i;for(var a=t.text.firstChild.getClientRects(),l=0;l<a.length-1;l++){var s=a[l],c=a[l+1];Math.abs(s.bottom-c.bottom)>2&&o.push((s.bottom+c.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(l=function(e,t,i,o){var a,l=bt(t.map,i,o),s=l.node,c=l.start,u=l.end,d=l.collapse;if(3==s.nodeType){for(var f=0;f<4;f++){for(;c&&k(t.line.text.charAt(l.coverStart+c));)--c;for(;l.coverStart+u<l.coverEnd&&k(t.line.text.charAt(l.coverStart+u));)++u;if((a=Ui&&Vi<9&&0==c&&u==l.coverEnd-l.coverStart?s.parentNode.getBoundingClientRect():wt(ao(s,c,u).getClientRects(),o)).left||a.right||0==c)break;u=c,c-=1,d="right"}Ui&&Vi<11&&(a=function(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!function(e){if(null!=Do)return Do;var t=r(e,n("span","x")),i=t.getBoundingClientRect(),o=ao(t,0,1).getBoundingClientRect();return Do=Math.abs(i.left-o.left)>1}(e))return t;var i=screen.logicalXDPI/screen.deviceXDPI,o=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*i,right:t.right*i,top:t.top*o,bottom:t.bottom*o}}(e.display.measure,a))}else{c>0&&(d=o="right");var h;a=e.options.lineWrapping&&(h=s.getClientRects()).length>1?h["right"==o?h.length-1:0]:s.getBoundingClientRect()}if(Ui&&Vi<9&&!c&&(!a||!a.left&&!a.right)){var p=s.parentNode.getClientRects()[0];a=p?{left:p.left,right:p.left+Ht(e.display),top:p.top,bottom:p.bottom}:Go}for(var m=a.top-t.rect.top,g=a.bottom-t.rect.top,v=(m+g)/2,y=t.view.measure.heights,b=0;b<y.length-1&&!(v<y[b]);b++);var w=b?y[b-1]:0,x=y[b],C={left:("right"==d?a.right:a.left)-t.rect.left,right:("left"==d?a.left:a.right)-t.rect.left,top:w,bottom:x};a.left||a.right||(C.bogus=!0);e.options.singleCursorHeightPerLine||(C.rtop=m,C.rbottom=g);return C}(e,t,i,o)).bogus||(t.cache[s]=l)),{left:l.left,right:l.right,top:a?l.rtop:l.top,bottom:a?l.rbottom:l.bottom}}function bt(e,t,r){for(var n,i,o,a,l,s,c=0;c<e.length;c+=3)if(l=e[c],s=e[c+1],t<l?(i=0,o=1,a="left"):t<s?o=(i=t-l)+1:(c==e.length-3||t==s&&e[c+3]>t)&&(i=(o=s-l)-1,t>=s&&(a="right")),null!=i){if(n=e[c+2],l==s&&r==(n.insertLeft?"left":"right")&&(a=r),"left"==r&&0==i)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)n=e[2+(c-=3)],a="left";if("right"==r&&i==s-l)for(;c<e.length-3&&e[c+3]==e[c+4]&&!e[c+5].insertLeft;)n=e[(c+=3)+2],a="right";break}return{node:n,start:i,end:o,collapse:a,coverStart:l,coverEnd:s}}function wt(e,t){var r=Go;if("left"==t)for(var n=0;n<e.length&&(r=e[n]).left==r.right;n++);else for(var i=e.length-1;i>=0&&(r=e[i]).left==r.right;i--);return r}function xt(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function kt(e){e.display.externalMeasure=null,t(e.display.lineMeasure);for(var r=0;r<e.display.view.length;r++)xt(e.display.view[r])}function Ct(e){kt(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function St(){return $i&&eo?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function Tt(){return $i&&eo?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function Lt(e){var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;++r)e.widgets[r].above&&(t+=at(e.widgets[r]));return t}function Mt(e,t,r,n,i){if(!i){var o=Lt(t);r.top+=o,r.bottom+=o}if("line"==n)return r;n||(n="local");var a=le(t);if("local"==n?a+=st(e.display):a-=e.display.viewOffset,"page"==n||"window"==n){var l=e.display.lineSpace.getBoundingClientRect();a+=l.top+("window"==n?0:Tt());var s=l.left+("window"==n?0:St());r.left+=s,r.right+=s}return r.top+=a,r.bottom+=a,r}function Ot(e,t,r){if("div"==r)return t;var n=t.left,i=t.top;if("page"==r)n-=St(),i-=Tt();else if("local"==r||!r){var o=e.display.sizer.getBoundingClientRect();n+=o.left,i+=o.top}var a=e.display.lineSpace.getBoundingClientRect();return{left:n-a.left,top:i-a.top}}function Nt(e,t,r,n,i){return n||(n=T(e.doc,t.line)),Mt(e,n,mt(e,n,t.ch,i),r)}function At(e,t,r,n,i,o){function a(t,a){var l=yt(e,i,t,a?"right":"left",o);return a?l.left=l.right:l.right=l.left,Mt(e,n,l,r)}function l(e,t,r){var n=1==s[t].level;return a(r?e-1:e,n!=r)}n=n||T(e.doc,t.line),i||(i=vt(e,n));var s=de(n,e.doc.direction),c=t.ch,u=t.sticky;if(c>=n.text.length?(c=n.text.length,u="before"):c<=0&&(c=0,u="after"),!s)return a("before"==u?c-1:c,"before"==u);var d=ue(s,c,u),f=To,h=l(c,d,"before"==u);return null!=f&&(h.other=l(c,f,"before"!=u)),h}function _t(e,t){var r=0;t=j(e.doc,t),e.options.lineWrapping||(r=Ht(e.display)*t.ch);var n=T(e.doc,t.line),i=le(n)+st(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function Pt(e,t,r,n,i){var o=D(e,t,r);return o.xRel=i,n&&(o.outside=!0),o}function Dt(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return Pt(n.first,0,null,!0,-1);var i=A(n,r),o=n.first+n.size-1;if(i>o)return Pt(n.first+n.size-1,T(n,o).text.length,null,!0,1);t<0&&(t=0);for(var a=T(n,i);;){var l=function(e,t,r,n,i){i-=le(t);var o=vt(e,t),a=Lt(t),l=0,s=t.text.length,c=!0,u=de(t,e.doc.direction);if(u){var d=(e.options.lineWrapping?function(e,t,r,n,i,o,a){var l=Wt(e,t,n,a),s=l.begin,c=l.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,d=null,f=0;f<i.length;f++){var h=i[f];if(!(h.from>=c||h.to<=s)){var p=1!=h.level,m=yt(e,n,p?Math.min(c,h.to)-1:Math.max(s,h.from)).right,g=m<o?o-m+1e9:m-o;(!u||d>g)&&(u=h,d=g)}}u||(u=i[i.length-1]);u.from<s&&(u={from:s,to:u.to,level:u.level});u.to>c&&(u={from:u.from,to:c,level:u.level});return u}:function(e,t,r,n,i,o,a){var l=S(function(l){var s=i[l],c=1!=s.level;return zt(At(e,D(r,c?s.to:s.from,c?"before":"after"),"line",t,n),o,a,!0)},0,i.length-1),s=i[l];if(l>0){var c=1!=s.level,u=At(e,D(r,c?s.from:s.to,c?"after":"before"),"line",t,n);zt(u,o,a,!0)&&u.top>a&&(s=i[l-1])}return s})(e,t,r,o,u,n,i);c=1!=d.level,l=c?d.from:d.to-1,s=c?d.to:d.from-1}var f,h,p=null,m=null,g=S(function(t){var r=yt(e,o,t);return r.top+=a,r.bottom+=a,!!zt(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,m=r),!0)},l,s),v=!1;if(m){var y=n-m.left<m.right-n,b=y==c;g=p+(b?0:1),h=b?"after":"before",f=y?m.left:m.right}else{c||g!=s&&g!=l||g++,h=0==g?"after":g==t.text.length?"before":yt(e,o,g-(c?1:0)).bottom+a<=i==c?"after":"before";var w=At(e,D(r,g,h),"line",t,o);f=w.left,v=i<w.top||i>=w.bottom}return g=C(t.text,g,1),Pt(r,g,h,v,n-f)}(e,a,i,t,r),s=ee(a),c=s&&s.find(0,!0);if(!s||!(l.ch>c.from.ch||l.ch==c.from.ch&&l.xRel>0))return l;i=N(a=c.to.line)}}function Wt(e,t,r,n){n-=Lt(t);var i=t.text.length,o=S(function(t){return yt(e,r,t-1).bottom<=n},i,0);return i=S(function(t){return yt(e,r,t).top>n},o,i),{begin:o,end:i}}function Ft(e,t,r,n){r||(r=vt(e,t));return Wt(e,t,r,Mt(e,t,yt(e,r,n),"line").top)}function zt(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function Et(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Ro){Ro=n("pre");for(var i=0;i<49;++i)Ro.appendChild(document.createTextNode("x")),Ro.appendChild(n("br"));Ro.appendChild(document.createTextNode("x"))}r(e.measure,Ro);var o=Ro.offsetHeight/50;return o>3&&(e.cachedTextHeight=o),t(e.measure),o||1}function Ht(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=n("span","xxxxxxxxxx"),i=n("pre",[t]);r(e.measure,i);var o=t.getBoundingClientRect(),a=(o.right-o.left)/10;return a>2&&(e.cachedCharWidth=a),a||10}function It(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a)r[e.options.gutters[a]]=o.offsetLeft+o.clientLeft+i,n[e.options.gutters[a]]=o.clientWidth;return{fixedPos:jt(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function jt(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function Bt(e){var t=Et(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/Ht(e.display)-3);return function(i){if(oe(e.doc,i))return 0;var o=0;if(i.widgets)for(var a=0;a<i.widgets.length;a++)i.widgets[a].height&&(o+=i.widgets[a].height);return r?o+(Math.ceil(i.text.length/n)||1)*t:o+t}}function Rt(e){var t=e.doc,r=Bt(e);t.iter(function(e){var t=r(e);t!=e.height&&O(e,t)})}function qt(e,t,r,n){var i=e.display;if(!r&&"true"==Ce(t).getAttribute("cm-not-content"))return null;var o,a,l=i.lineSpace.getBoundingClientRect();try{o=t.clientX-l.left,a=t.clientY-l.top}catch(t){return null}var s,c=Dt(e,o,a);if(n&&1==c.xRel&&(s=T(e.doc,c.line).text).length==c.ch){var u=d(s,s.length,e.options.tabSize)-s.length;c=D(c.line,Math.max(0,Math.round((o-ut(e.display).left)/Ht(e.display))-u))}return c}function Ut(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;n<r.length;n++)if((t-=r[n].size)<0)return n}function Vt(e){e.display.input.showSelection(e.display.input.prepareSelection())}function Kt(e,t){void 0===t&&(t=!0);for(var r=e.doc,i={},o=i.cursors=document.createDocumentFragment(),a=i.selection=document.createDocumentFragment(),l=0;l<r.sel.ranges.length;l++)if(t||l!=r.sel.primIndex){var s=r.sel.ranges[l];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var c=s.empty();(c||e.options.showCursorWhenSelecting)&&Gt(e,s.head,o),c||function(e,t,r){function i(e,t,r,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),s.appendChild(n("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==r?d-e:r)+"px;\n height: "+(i-t)+"px"))}function o(t,r,n){function o(r,n){return Nt(e,D(t,r),"div",h,n)}function a(t,r,n){var i=Ft(e,h,null,t),a="ltr"==r==("after"==n)?"left":"right",l="after"==n?i.begin:i.end-(/\s/.test(h.text.charAt(i.end-1))?2:1);return o(l,a)[a]}var s,c,h=T(l,t),p=h.text.length,m=de(h,l.direction);return function(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var a=e[o];(a.from<r&&a.to>t||t==r&&a.to==t)&&(n(Math.max(a.from,t),Math.min(a.to,r),1==a.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(m,r||0,null==n?p:n,function(e,t,l,h){var g="ltr"==l,v=o(e,g?"left":"right"),y=o(t-1,g?"right":"left"),b=null==r&&0==e,w=null==n&&t==p,x=0==h,k=!m||h==m.length-1;if(y.top-v.top<=3){var C=(f?b:w)&&x,S=(f?w:b)&&k,T=C?u:(g?v:y).left,L=S?d:(g?y:v).right;i(T,v.top,L-T,v.bottom)}else{var M,O,N,A;g?(M=f&&b&&x?u:v.left,O=f?d:a(e,l,"before"),N=f?u:a(t,l,"after"),A=f&&w&&k?d:y.right):(M=f?a(e,l,"before"):u,O=!f&&b&&x?d:v.right,N=!f&&w&&k?u:y.left,A=f?a(t,l,"after"):d),i(M,v.top,O-M,v.bottom),v.bottom<y.top&&i(u,v.bottom,null,y.top),i(N,y.top,A-N,y.bottom)}(!s||$t(v,s)<0)&&(s=v),$t(y,s)<0&&(s=y),(!c||$t(v,c)<0)&&(c=v),$t(y,c)<0&&(c=y)}),{start:s,end:c}}var a=e.display,l=e.doc,s=document.createDocumentFragment(),c=ut(e.display),u=c.left,d=Math.max(a.sizerWidth,ft(e)-a.sizer.offsetLeft)-c.right,f="ltr"==l.direction;var h=t.from(),p=t.to();if(h.line==p.line)o(h.line,h.ch,p.ch);else{var m=T(l,h.line),g=T(l,p.line),v=re(m)==re(g),y=o(h.line,h.ch,v?m.text.length+1:null).end,b=o(p.line,v?0:null,p.ch).start;v&&(y.top<b.top-2?(i(y.right,y.top,null,y.bottom),i(u,b.top,b.left,b.bottom)):i(y.right,y.top,b.left-y.right,y.bottom)),y.bottom<b.top&&i(u,y.bottom,null,b.top)}r.appendChild(s)}(e,s,a)}}return i}function Gt(e,t,r){var i=At(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),o=r.appendChild(n("div"," ","CodeMirror-cursor"));if(o.style.left=i.left+"px",o.style.top=i.top+"px",o.style.height=Math.max(0,i.bottom-i.top)*e.options.cursorHeight+"px",i.other){var a=r.appendChild(n("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));a.style.display="",a.style.left=i.other.left+"px",a.style.top=i.other.top+"px",a.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function $t(e,t){return e.top-t.top||e.left-t.left}function Xt(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var r=!0;t.cursorDiv.style.visibility="",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Yt(e){e.state.focused||(e.display.input.focus(),Qt(e))}function Zt(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Jt(e))},100)}function Qt(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(pe(e,"focus",e,t),e.state.focused=!0,l(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),Ki&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),Xt(e))}function Jt(e,t){e.state.delayingBlurEvent||(e.state.focused&&(pe(e,"blur",e,t),e.state.focused=!1,co(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function er(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n<t.view.length;n++){var i=t.view[n],o=void 0;if(!i.hidden){if(Ui&&Vi<8){var a=i.node.offsetTop+i.node.offsetHeight;o=a-r,r=a}else{var l=i.node.getBoundingClientRect();o=l.bottom-l.top}var s=i.line.height-o;if(o<2&&(o=Et(t)),(s>.005||s<-.005)&&(O(i.line,o),tr(i.line),i.rest))for(var c=0;c<i.rest.length;c++)tr(i.rest[c])}}}function tr(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var r=e.widgets[t],n=r.node.parentNode;n&&(r.height=n.offsetHeight)}}function rr(e,t,r){var n=r&&null!=r.top?Math.max(0,r.top):e.scroller.scrollTop;n=Math.floor(n-st(e));var i=r&&null!=r.bottom?r.bottom:n+e.wrapper.clientHeight,o=A(t,n),a=A(t,i);if(r&&r.ensure){var l=r.ensure.from.line,s=r.ensure.to.line;l<o?(o=l,a=A(t,le(T(t,l))+e.wrapper.clientHeight)):Math.min(s,t.lastLine())>=a&&(o=A(t,le(T(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function nr(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=jt(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",a=0;a<r.length;a++)if(!r[a].hidden){e.options.fixedGutter&&(r[a].gutter&&(r[a].gutter.style.left=o),r[a].gutterBackground&&(r[a].gutterBackground.style.left=o));var l=r[a].alignable;if(l)for(var s=0;s<l.length;s++)l[s].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=n+i+"px")}}function ir(e){if(!e.options.lineNumbers)return!1;var t=e.doc,r=P(e.options,t.first+t.size-1),i=e.display;if(r.length!=i.lineNumChars){var o=i.measure.appendChild(n("div",[n("div",r)],"CodeMirror-linenumber CodeMirror-gutter-elt")),a=o.firstChild.offsetWidth,l=o.offsetWidth-a;return i.lineGutter.style.width="",i.lineNumInnerWidth=Math.max(a,i.lineGutter.offsetWidth-l)+1,i.lineNumWidth=i.lineNumInnerWidth+l,i.lineNumChars=i.lineNumInnerWidth?r.length:-1,i.lineGutter.style.width=i.lineNumWidth+"px",Wr(e),!0}return!1}function or(e,t){var r=e.display,n=Et(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=ht(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var l=e.doc.height+ct(r),s=t.top<n,c=t.bottom>l-n;if(t.top<i)a.scrollTop=s?0:t.top;else if(t.bottom>i+o){var u=Math.min(t.top,(c?l:t.bottom)-o);u!=i&&(a.scrollTop=u)}var d=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,f=ft(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),h=t.right-t.left>f;return h&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.left<d?a.scrollLeft=Math.max(0,t.left-(h?0:10)):t.right>f+d-3&&(a.scrollLeft=t.right+(h?0:10)-f),a}function ar(e,t){null!=t&&(cr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function lr(e){cr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function sr(e,t,r){null==t&&null==r||cr(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function cr(e){var t=e.curOp.scrollToPos;if(t){e.curOp.scrollToPos=null;ur(e,_t(e,t.from),_t(e,t.to),t.margin)}}function ur(e,t,r,n){var i=or(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});sr(e,i.scrollLeft,i.scrollTop)}function dr(e,t){Math.abs(e.doc.scrollTop-t)<2||(ji||Dr(e,{top:t}),fr(e,t,!0),ji&&Dr(e),Nr(e,100))}function fr(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function hr(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,nr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function pr(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+ct(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+dt(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}function mr(e,t){t||(t=pr(e));var r=e.display.barWidth,n=e.display.barHeight;gr(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&er(e),gr(e,pr(e)),r=e.display.barWidth,n=e.display.barHeight}function gr(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}function vr(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&co(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Yo[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),Oo(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,r){"horizontal"==r?hr(e,t):dr(e,t)},e),e.display.scrollbars.addClass&&l(e.display.wrapper,e.display.scrollbars.addClass)}function yr(e){e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Zo},function(e){Vo?Vo.ops.push(e):e.ownsGroup=Vo={ops:[e],delayedCallbacks:[]}}(e.curOp)}function br(e){!function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r<t.length;r++)t[r].call(null);for(var n=0;n<e.ops.length;n++){var i=e.ops[n];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(r<t.length)}(r)}finally{Vo=null,t(r)}}(e.curOp,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;!function(e){for(var t=e.ops,r=0;r<t.length;r++)!function(e){var t=e.cm,r=t.display;(function(e){var t=e.display;!t.scrollbarsClipped&&t.scroller.offsetWidth&&(t.nativeBarWidth=t.scroller.offsetWidth-t.scroller.clientWidth,t.heightForcer.style.height=dt(e)+"px",t.sizer.style.marginBottom=-t.nativeBarWidth+"px",t.sizer.style.borderRightWidth=dt(e)+"px",t.scrollbarsClipped=!0)})(t),e.updateMaxLine&&ce(t);e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<r.viewFrom||e.scrollToPos.to.line>=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new Qo(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}(t[r]);for(var i=0;i<t.length;i++)!function(e){e.updatedDisplay=e.mustUpdate&&_r(e.cm,e.update)}(t[i]);for(var o=0;o<t.length;o++)!function(e){var t=e.cm,r=t.display;e.updatedDisplay&&er(t);e.barMeasure=pr(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=mt(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+dt(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-ft(t)));(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}(t[o]);for(var l=0;l<t.length;l++)!function(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&hr(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var r=e.focus&&e.focus==a();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r);(e.updatedDisplay||e.startHeight!=t.doc.height)&&mr(t,e.barMeasure);e.updatedDisplay&&Fr(t,e.barMeasure);e.selectionChanged&&Xt(t);t.state.focused&&e.updateInput&&t.display.input.reset(e.typing);r&&Yt(e.cm)}(t[l]);for(var s=0;s<t.length;s++)!function(e){var t=e.cm,r=t.display,i=t.doc;e.updatedDisplay&&Pr(t,e.update);null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null);null!=e.scrollTop&&fr(t,e.scrollTop,e.forceScroll);null!=e.scrollLeft&&hr(t,e.scrollLeft,!0,!0);if(e.scrollToPos){var o=function(e,t,r,n){null==n&&(n=0);var i;e.options.lineWrapping||t!=r||(r="before"==(t=t.ch?D(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?D(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var a=!1,l=At(e,t),s=r&&r!=t?At(e,r):l,c=or(e,i={left:Math.min(l.left,s.left),top:Math.min(l.top,s.top)-n,right:Math.max(l.left,s.left),bottom:Math.max(l.bottom,s.bottom)+n}),u=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=c.scrollTop&&(dr(e,c.scrollTop),Math.abs(e.doc.scrollTop-u)>1&&(a=!0)),null!=c.scrollLeft&&(hr(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return i}(t,j(i,e.scrollToPos.from),j(i,e.scrollToPos.to),e.scrollToPos.margin);!function(e,t){if(!me(e,"scrollCursorIntoView")){var r=e.display,i=r.sizer.getBoundingClientRect(),o=null;if(t.top+i.top<0?o=!0:t.bottom+i.top>(window.innerHeight||document.documentElement.clientHeight)&&(o=!1),null!=o&&!Qi){var a=n("div","",null,"position: absolute;\n top: "+(t.top-r.viewOffset-st(e.display))+"px;\n height: "+(t.bottom-t.top+dt(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(a),a.scrollIntoView(o),e.display.lineSpace.removeChild(a)}}}(t,o)}var a=e.maybeHiddenMarkers,l=e.maybeUnhiddenMarkers;if(a)for(var s=0;s<a.length;++s)a[s].lines.length||pe(a[s],"hide");if(l)for(var c=0;c<l.length;++c)l[c].lines.length&&pe(l[c],"unhide");r.wrapper.offsetHeight&&(i.scrollTop=t.display.scroller.scrollTop);e.changeObjs&&pe(t,"changes",t,e.changeObjs);e.update&&e.update.finish()}(t[s])}(e)})}function wr(e,t){if(e.curOp)return t();yr(e);try{return t()}finally{br(e)}}function xr(e,t){return function(){if(e.curOp)return t.apply(e,arguments);yr(e);try{return t.apply(e,arguments)}finally{br(e)}}}function kr(e){return function(){if(this.curOp)return e.apply(this,arguments);yr(this);try{return e.apply(this,arguments)}finally{br(this)}}}function Cr(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);yr(t);try{return e.apply(this,arguments)}finally{br(t)}}}function Sr(e,t,r,n){null==t&&(t=e.doc.first),null==r&&(r=e.doc.first+e.doc.size),n||(n=0);var i=e.display;if(n&&r<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)So&&ne(e.doc,t)<i.viewTo&&Lr(e);else if(r<=i.viewFrom)So&&ie(e.doc,r+n)>i.viewFrom?Lr(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)Lr(e);else if(t<=i.viewFrom){var o=Mr(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):Lr(e)}else if(r>=i.viewTo){var a=Mr(e,t,t,-1);a?(i.view=i.view.slice(0,a.index),i.viewTo=a.lineN):Lr(e)}else{var l=Mr(e,t,t,-1),s=Mr(e,r,r+n,1);l&&s?(i.view=i.view.slice(0,l.index).concat(Xe(e,l.lineN,s.lineN)).concat(i.view.slice(s.index)),i.viewTo+=n):Lr(e)}var c=i.externalMeasured;c&&(r<c.lineN?c.lineN+=n:t<c.lineN+c.size&&(i.externalMeasured=null))}function Tr(e,t,r){e.curOp.viewChanged=!0;var n=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(n.externalMeasured=null),!(t<n.viewFrom||t>=n.viewTo)){var o=n.view[Ut(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==f(a,r)&&a.push(r)}}}function Lr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Mr(e,t,r,n){var i,o=Ut(e,t),a=e.display.view;if(!So||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var l=e.display.viewFrom,s=0;s<o;s++)l+=a[s].size;if(l!=t){if(n>0){if(o==a.length-1)return null;i=l+a[o].size-t,o++}else i=l-t;t+=i,r+=i}for(;ne(e.doc,r)!=r;){if(o==(n<0?0:a.length-1))return null;r+=n*a[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function Or(e){for(var t=e.display.view,r=0,n=0;n<t.length;n++){var i=t[n];i.hidden||i.node&&!i.changes||++r}return r}function Nr(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,c(Ar,e))}function Ar(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var r=+new Date+e.options.workTime,n=Fe(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var a=o.styles,l=o.text.length>e.options.maxHighlightLength?Ae(t.mode,n.state):null,s=De(e,o,n,!0);l&&(n.state=l),o.styles=s.styles;var c=o.styleClasses,u=s.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var d=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),f=0;!d&&f<a.length;++f)d=a[f]!=o.styles[f];d&&i.push(n.line),o.stateAfter=n.save(),n.nextLine()}else o.text.length<=e.options.maxHighlightLength&&ze(e,o.text,n),o.stateAfter=n.line%5==0?n.save():null,n.nextLine();if(+new Date>r)return Nr(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&wr(e,function(){for(var t=0;t<i.length;t++)Tr(e,i[t],"text")})}}function _r(e,r){var n=e.display,i=e.doc;if(r.editorIsHidden)return Lr(e),!1;if(!r.force&&r.visible.from>=n.viewFrom&&r.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==Or(e))return!1;ir(e)&&(Lr(e),r.dims=It(e));var l=i.first+i.size,s=Math.max(r.visible.from-e.options.viewportMargin,i.first),c=Math.min(l,r.visible.to+e.options.viewportMargin);n.viewFrom<s&&s-n.viewFrom<20&&(s=Math.max(i.first,n.viewFrom)),n.viewTo>c&&n.viewTo-c<20&&(c=Math.min(l,n.viewTo)),So&&(s=ne(e.doc,s),c=ie(e.doc,c));var u=s!=n.viewFrom||c!=n.viewTo||n.lastWrapHeight!=r.wrapperHeight||n.lastWrapWidth!=r.wrapperWidth;!function(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=Xe(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=Xe(e,t,n.viewFrom).concat(n.view):n.viewFrom<t&&(n.view=n.view.slice(Ut(e,t))),n.viewFrom=t,n.viewTo<r?n.view=n.view.concat(Xe(e,n.viewTo,r)):n.viewTo>r&&(n.view=n.view.slice(0,Ut(e,r)))),n.viewTo=r}(e,s,c),n.viewOffset=le(T(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var d=Or(e);if(!u&&0==d&&!r.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var h=function(e){if(e.hasFocus())return null;var t=a();if(!t||!o(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&o(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return d>4&&(n.lineDiv.style.display="none"),function(e,r,n){function i(t){var r=t.nextSibling;return Ki&&ro&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}var o=e.display,a=e.options.lineNumbers,l=o.lineDiv,s=l.firstChild;for(var c=o.view,u=o.viewFrom,d=0;d<c.length;d++){var h=c[d];if(h.hidden);else if(h.node&&h.node.parentNode==l){for(;s!=h.node;)s=i(s);var p=a&&null!=r&&r<=u&&h.lineNumber;h.changes&&(f(h.changes,"gutter")>-1&&(p=!1),Qe(e,h,u,n)),p&&(t(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(P(e.options,u)))),s=h.node.nextSibling}else{var m=nt(e,h,u,n);l.insertBefore(m,s)}u+=h.size}for(;s;)s=i(s)}(e,n.updateLineNumbers,r.dims),d>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=a()&&(e.activeElt.focus(),e.anchorNode&&o(document.body,e.anchorNode)&&o(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(h),t(n.cursorDiv),t(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,u&&(n.lastWrapHeight=r.wrapperHeight,n.lastWrapWidth=r.wrapperWidth,Nr(e,400)),n.updateLineNumbers=null,!0}function Pr(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=ft(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+ct(e.display)-ht(e),r.top)}),t.visible=rr(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&_r(e,t);n=!1){er(e);var i=pr(e);Vt(e),mr(e,i),Fr(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function Dr(e,t){var r=new Qo(e,t);if(_r(e,r)){er(e),Pr(e,r);var n=pr(e);Vt(e),mr(e,n),Fr(e,n),r.finish()}}function Wr(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function Fr(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+dt(e)+"px"}function zr(e){var r=e.display.gutters,i=e.options.gutters;t(r);for(var o=0;o<i.length;++o){var a=i[o],l=r.appendChild(n("div",null,"CodeMirror-gutter "+a));"CodeMirror-linenumbers"==a&&(e.display.lineGutter=l,l.style.width=(e.display.lineNumWidth||1)+"px")}r.style.display=o?"":"none",Wr(e)}function Er(e){var t=f(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}function Hr(e){var t=e.wheelDeltaX,r=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==r&&e.detail&&e.axis==e.VERTICAL_AXIS?r=e.detail:null==r&&(r=e.wheelDelta),{x:t,y:r}}function Ir(e){var t=Hr(e);return t.x*=ea,t.y*=ea,t}function jr(e,t){var r=Hr(t),n=r.x,i=r.y,o=e.display,a=o.scroller,l=a.scrollWidth>a.clientWidth,s=a.scrollHeight>a.clientHeight;if(n&&l||i&&s){if(i&&ro&&Ki)e:for(var c=t.target,u=o.view;c!=a;c=c.parentNode)for(var d=0;d<u.length;d++)if(u[d].node==c){e.display.currentWheelTarget=c;break e}if(n&&!ji&&!Xi&&null!=ea)return i&&s&&dr(e,Math.max(0,a.scrollTop+i*ea)),hr(e,Math.max(0,a.scrollLeft+n*ea)),(!i||i&&s)&&be(t),void(o.wheelStartX=null);if(i&&null!=ea){var f=i*ea,h=e.doc.scrollTop,p=h+o.wrapper.clientHeight;f<0?h=Math.max(0,h+f-50):p=Math.min(e.doc.height,p+f+50),Dr(e,{top:h,bottom:p})}Jo<20&&(null==o.wheelStartX?(o.wheelStartX=a.scrollLeft,o.wheelStartY=a.scrollTop,o.wheelDX=n,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=a.scrollLeft-o.wheelStartX,t=a.scrollTop-o.wheelStartY,r=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,r&&(ea=(ea*Jo+r)/(Jo+1),++Jo)}},200)):(o.wheelDX+=n,o.wheelDY+=i))}}function Br(e,t){var r=e[t];e.sort(function(e,t){return W(e.from(),t.from())}),t=f(e,r);for(var n=1;n<e.length;n++){var i=e[n],o=e[n-1];if(W(o.to(),i.from())>=0){var a=H(o.from(),i.from()),l=E(o.to(),i.to()),s=o.empty()?i.from()==i.head:o.from()==o.head;n<=t&&--t,e.splice(--n,2,new ra(s?l:a,s?a:l))}}return new ta(e,t)}function Rr(e,t){return new ta([new ra(e,t||e)],0)}function qr(e){return e.text?D(e.from.line+e.text.length-1,m(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Ur(e,t){if(W(e,t.from)<0)return e;if(W(e,t.to)<=0)return qr(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=qr(t).ch-t.to.ch),D(r,n)}function Vr(e,t){for(var r=[],n=0;n<e.sel.ranges.length;n++){var i=e.sel.ranges[n];r.push(new ra(Ur(i.anchor,t),Ur(i.head,t)))}return Br(r,e.sel.primIndex)}function Kr(e,t,r){return e.line==t.line?D(r.line,e.ch-t.ch+r.ch):D(r.line+(e.line-t.line),e.ch)}function Gr(e){e.doc.mode=Oe(e.options,e.doc.modeOption),$r(e)}function $r(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Nr(e,100),e.state.modeGen++,e.curOp&&Sr(e)}function Xr(e,t){return 0==t.from.ch&&0==t.to.ch&&""==m(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Yr(e,t,r,n){function i(e){return r?r[e]:null}function o(e,r,i){!function(e,t,r,n){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),G(e),$(e,r);var i=n?n(e):1;i!=e.height&&O(e,i)}(e,r,i,n),Ye(e,"change",e,t)}function a(e,t){for(var r=[],o=e;o<t;++o)r.push(new Bo(c[o],i(o),n));return r}var l=t.from,s=t.to,c=t.text,u=T(e,l.line),d=T(e,s.line),f=m(c),h=i(c.length-1),p=s.line-l.line;if(t.full)e.insert(0,a(0,c.length)),e.remove(c.length,e.size-c.length);else if(Xr(e,t)){var g=a(0,c.length-1);o(d,d.text,h),p&&e.remove(l.line,p),g.length&&e.insert(l.line,g)}else if(u==d)if(1==c.length)o(u,u.text.slice(0,l.ch)+f+u.text.slice(s.ch),h);else{var v=a(1,c.length-1);v.push(new Bo(f+u.text.slice(s.ch),h,n)),o(u,u.text.slice(0,l.ch)+c[0],i(0)),e.insert(l.line+1,v)}else if(1==c.length)o(u,u.text.slice(0,l.ch)+c[0]+d.text.slice(s.ch),i(0)),e.remove(l.line+1,p);else{o(u,u.text.slice(0,l.ch)+c[0],i(0)),o(d,f+d.text.slice(s.ch),h);var y=a(1,c.length-1);p>1&&e.remove(l.line+1,p-1),e.insert(l.line+1,y)}Ye(e,"change",e,t)}function Zr(e,t,r){function n(e,i,o){if(e.linked)for(var a=0;a<e.linked.length;++a){var l=e.linked[a];if(l.doc!=i){var s=o&&l.sharedHist;r&&!s||(t(l.doc,s),n(l.doc,e,s))}}}n(e,null,!0)}function Qr(e,t){if(t.cm)throw new Error("This document is already in use.");e.doc=t,t.cm=e,Rt(e),Gr(e),Jr(e),e.options.lineWrapping||ce(e),e.options.mode=t.modeOption,Sr(e)}function Jr(e){("rtl"==e.doc.direction?l:co)(e.display.lineDiv,"CodeMirror-rtl")}function en(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function tn(e,t){var r={from:z(t.from),to:qr(t),text:L(e,t.from,t.to)};return ln(e,r,t.from.line,t.to.line+1),Zr(e,function(e){return ln(e,r,t.from.line,t.to.line+1)},!0),r}function rn(e){for(;e.length;){if(!m(e).ranges)break;e.pop()}}function nn(e,t,r,n){var i=e.history;i.undone.length=0;var o,a,l=+new Date;if((i.lastOp==n||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&e.cm&&i.lastModTime>l-e.cm.options.historyEventDelay||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(rn(e.done),m(e.done)):e.done.length&&!m(e.done).ranges?m(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),m(e.done)):void 0}(i,i.lastOp==n)))a=m(o.changes),0==W(t.from,t.to)&&0==W(t.from,a.to)?a.to=qr(t):o.changes.push(tn(e,t));else{var s=m(i.done);for(s&&s.ranges||an(e.sel,i.done),o={changes:[tn(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=l,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,a||pe(e,"historyAdded")}function on(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,m(i.done),t))?i.done[i.done.length-1]=t:an(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&rn(i.undone)}function an(e,t){var r=m(t);r&&r.ranges&&r.equals(e)||t.push(e)}function ln(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o})}function sn(e){if(!e)return null;for(var t,r=0;r<e.length;++r)e[r].marker.explicitlyCleared?t||(t=e.slice(0,r)):t&&t.push(e[r]);return t?t.length?t:null:e}function cn(e,t){var r=function(e,t){var r=t["spans_"+e.id];if(!r)return null;for(var n=[],i=0;i<t.text.length;++i)n.push(sn(r[i]));return n}(e,t),n=V(e,t);if(!r)return n;if(!n)return r;for(var i=0;i<r.length;++i){var o=r[i],a=n[i];if(o&&a)e:for(var l=0;l<a.length;++l){for(var s=a[l],c=0;c<o.length;++c)if(o[c].marker==s.marker)continue e;o.push(s)}else a&&(r[i]=a)}return r}function un(e,t,r){for(var n=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)n.push(r?ta.prototype.deepCopy.call(o):o);else{var a=o.changes,l=[];n.push({changes:l});for(var s=0;s<a.length;++s){var c=a[s],u=void 0;if(l.push({from:c.from,to:c.to,text:c.text}),t)for(var d in c)(u=d.match(/^spans_(\d+)$/))&&f(t,Number(u[1]))>-1&&(m(l)[d]=c[d],delete c[d])}}}return n}function dn(e,t,r,n){if(n){var i=e.anchor;if(r){var o=W(t,i)<0;o!=W(r,i)<0?(i=t,t=r):o!=W(t,r)<0&&(t=r)}return new ra(i,t)}return new ra(r||t,t)}function fn(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),vn(e,new ta([dn(e.sel.primary(),t,r,i)],0),n)}function hn(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)n[o]=dn(e.sel.ranges[o],t[o],null,i);vn(e,Br(n,e.sel.primIndex),r)}function pn(e,t,r,n){var i=e.sel.ranges.slice(0);i[t]=r,vn(e,Br(i,e.sel.primIndex),n)}function mn(e,t,r,n){vn(e,Rr(t,r),n)}function gn(e,t,r){var n=e.history.done,i=m(n);i&&i.ranges?(n[n.length-1]=t,yn(e,t,r)):vn(e,t,r)}function vn(e,t,r){yn(e,t,r),on(e,e.sel,e.cm?e.cm.curOp.id:NaN,r)}function yn(e,t,r){(ve(e,"beforeSelectionChange")||e.cm&&ve(e.cm,"beforeSelectionChange"))&&(t=function(e,t,r){var n={ranges:t.ranges,update:function(t){this.ranges=[];for(var r=0;r<t.length;r++)this.ranges[r]=new ra(j(e,t[r].anchor),j(e,t[r].head))},origin:r&&r.origin};return pe(e,"beforeSelectionChange",e,n),e.cm&&pe(e.cm,"beforeSelectionChange",e.cm,n),n.ranges!=t.ranges?Br(n.ranges,n.ranges.length-1):t}(e,t,r));bn(e,xn(e,t,r&&r.bias||(W(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),r&&!1===r.scroll||!e.cm||lr(e.cm)}function bn(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,ge(e.cm)),Ye(e,"cursorActivity",e))}function wn(e){bn(e,xn(e,e.sel,null,!1))}function xn(e,t,r,n){for(var i,o=0;o<t.ranges.length;o++){var a=t.ranges[o],l=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],s=Cn(e,a.anchor,l&&l.anchor,r,n),c=Cn(e,a.head,l&&l.head,r,n);(i||s!=a.anchor||c!=a.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new ra(s,c))}return i?Br(i,t.primIndex):t}function kn(e,t,r,n,i){var o=T(e,t.line);if(o.markedSpans)for(var a=0;a<o.markedSpans.length;++a){var l=o.markedSpans[a],s=l.marker;if((null==l.from||(s.inclusiveLeft?l.from<=t.ch:l.from<t.ch))&&(null==l.to||(s.inclusiveRight?l.to>=t.ch:l.to>t.ch))){if(i&&(pe(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(r){var c=s.find(n<0?1:-1),u=void 0;if((n<0?s.inclusiveRight:s.inclusiveLeft)&&(c=Sn(e,c,-n,c&&c.line==t.line?o:null)),c&&c.line==t.line&&(u=W(c,r))&&(n<0?u<0:u>0))return kn(e,c,t,n,i)}var d=s.find(n<0?-1:1);return(n<0?s.inclusiveLeft:s.inclusiveRight)&&(d=Sn(e,d,n,d.line==t.line?o:null)),d?kn(e,d,t,n,i):null}}return t}function Cn(e,t,r,n,i){var o=n||1,a=kn(e,t,r,o,i)||!i&&kn(e,t,r,o,!0)||kn(e,t,r,-o,i)||!i&&kn(e,t,r,-o,!0);return a||(e.cantEdit=!0,D(e.first,0))}function Sn(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?j(e,D(t.line-1)):null:r>0&&t.ch==(n||T(e,t.line)).text.length?t.line<e.first+e.size-1?D(t.line+1,0):null:new D(t.line,t.ch+r)}function Tn(e){e.setSelection(D(e.firstLine(),0),D(e.lastLine()),vo)}function Ln(e,t,r){var n={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return n.canceled=!0}};return r&&(n.update=function(t,r,i,o){t&&(n.from=j(e,t)),r&&(n.to=j(e,r)),i&&(n.text=i),void 0!==o&&(n.origin=o)}),pe(e,"beforeChange",e,n),e.cm&&pe(e.cm,"beforeChange",e.cm,n),n.canceled?null:{from:n.from,to:n.to,text:n.text,origin:n.origin}}function Mn(e,t,r){if(e.cm){if(!e.cm.curOp)return xr(e.cm,Mn)(e,t,r);if(e.cm.state.suppressEdits)return}if(!(ve(e,"beforeChange")||e.cm&&ve(e.cm,"beforeChange"))||(t=Ln(e,t,!0))){var n=Co&&!r&&function(e,t,r){var n=null;if(e.iter(t.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var r=e.markedSpans[t].marker;!r.readOnly||n&&-1!=f(n,r)||(n||(n=[])).push(r)}}),!n)return null;for(var i=[{from:t,to:r}],o=0;o<n.length;++o)for(var a=n[o],l=a.find(0),s=0;s<i.length;++s){var c=i[s];if(!(W(c.to,l.from)<0||W(c.from,l.to)>0)){var u=[s,1],d=W(c.from,l.from),h=W(c.to,l.to);(d<0||!a.inclusiveLeft&&!d)&&u.push({from:c.from,to:l.from}),(h>0||!a.inclusiveRight&&!h)&&u.push({from:l.to,to:c.to}),i.splice.apply(i,u),s+=u.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)On(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else On(e,t)}}function On(e,t){if(1!=t.text.length||""!=t.text[0]||0!=W(t.from,t.to)){var r=Vr(e,t);nn(e,t,r,e.cm?e.cm.curOp.id:NaN),_n(e,t,r,V(e,t));var n=[];Zr(e,function(e,r){r||-1!=f(n,e.history)||(Fn(e.history,t),n.push(e.history)),_n(e,t,null,V(e,t))})}}function Nn(e,t,r){if(!e.cm||!e.cm.state.suppressEdits||r){for(var n,i=e.history,o=e.sel,a="undo"==t?i.done:i.undone,l="undo"==t?i.undone:i.done,s=0;s<a.length&&(n=a[s],r?!n.ranges||n.equals(e.sel):n.ranges);s++);if(s!=a.length){for(i.lastOrigin=i.lastSelOrigin=null;(n=a.pop()).ranges;){if(an(n,l),r&&!n.equals(e.sel))return void vn(e,n,{clearRedo:!1});o=n}var c=[];an(o,l),l.push({changes:c,generation:i.generation}),i.generation=n.generation||++i.maxGeneration;for(var u=ve(e,"beforeChange")||e.cm&&ve(e.cm,"beforeChange"),d=function(r){var i=n.changes[r];if(i.origin=t,u&&!Ln(e,i,!1))return a.length=0,{};c.push(tn(e,i));var o=r?Vr(e,i):m(a);_n(e,i,o,cn(e,i)),!r&&e.cm&&e.cm.scrollIntoView({from:i.from,to:qr(i)});var l=[];Zr(e,function(e,t){t||-1!=f(l,e.history)||(Fn(e.history,i),l.push(e.history)),_n(e,i,null,cn(e,i))})},h=n.changes.length-1;h>=0;--h){var p=d(h);if(p)return p.v}}}}function An(e,t){if(0!=t&&(e.first+=t,e.sel=new ta(g(e.sel.ranges,function(e){return new ra(D(e.anchor.line+t,e.anchor.ch),D(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){Sr(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;n<r.viewTo;n++)Tr(e.cm,n,"gutter")}}function _n(e,t,r,n){if(e.cm&&!e.cm.curOp)return xr(e.cm,_n)(e,t,r,n);if(t.to.line<e.first)An(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);An(e,i),t={from:D(e.first,0),to:D(t.to.line+i,t.to.ch),text:[m(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:D(o,T(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=L(e,t.from,t.to),r||(r=Vr(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,a=t.to,l=!1,s=o.line;e.options.lineWrapping||(s=N(re(T(n,o.line))),n.iter(s,a.line+1,function(e){if(e==i.maxLine)return l=!0,!0}));n.sel.contains(t.from,t.to)>-1&&ge(e);Yr(n,t,r,Bt(e)),e.options.lineWrapping||(n.iter(s,o.line+t.text.length,function(e){var t=se(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,l=!1)}),l&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var r=e.first,n=t-1;n>r;n--){var i=T(e,n).stateAfter;if(i&&(!(i instanceof Ho)||n+i.lookAhead<t)){r=n+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,r)}})(n,o.line),Nr(e,400);var c=t.text.length-(a.line-o.line)-1;t.full?Sr(e):o.line!=a.line||1!=t.text.length||Xr(e.doc,t)?Sr(e,o.line,a.line+1,c):Tr(e,o.line,"text");var u=ve(e,"changes"),d=ve(e,"change");if(d||u){var f={from:o,to:a,text:t.text,removed:t.removed,origin:t.origin};d&&Ye(e,"change",e,f),u&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(f)}e.display.selForContextMenu=null}(e.cm,t,n):Yr(e,t,n),yn(e,r,vo)}}function Pn(e,t,r,n,i){if(n||(n=r),W(n,r)<0){var o;r=(o=[n,r])[0],n=o[1]}"string"==typeof t&&(t=e.splitLines(t)),Mn(e,{from:r,to:n,text:t,origin:i})}function Dn(e,t,r,n){r<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function Wn(e,t,r,n){for(var i=0;i<e.length;++i){var o=e[i],a=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var l=0;l<o.ranges.length;l++)Dn(o.ranges[l].anchor,t,r,n),Dn(o.ranges[l].head,t,r,n)}else{for(var s=0;s<o.changes.length;++s){var c=o.changes[s];if(r<c.from.line)c.from=D(c.from.line+n,c.from.ch),c.to=D(c.to.line+n,c.to.ch);else if(t<=c.to.line){a=!1;break}}a||(e.splice(0,i+1),i=0)}}}function Fn(e,t){var r=t.from.line,n=t.to.line,i=t.text.length-(n-r)-1;Wn(e.done,r,n,i),Wn(e.undone,r,n,i)}function zn(e,t,r,n){var i=t,o=t;return"number"==typeof t?o=T(e,I(e,t)):i=N(t),null==i?null:(n(o,i)&&e.cm&&Tr(e.cm,i,r),o)}function En(e){this.lines=e,this.parent=null;for(var t=0,r=0;r<e.length;++r)e[r].parent=this,t+=e[r].height;this.height=t}function Hn(e){this.children=e;for(var t=0,r=0,n=0;n<e.length;++n){var i=e[n];t+=i.chunkSize(),r+=i.height,i.parent=this}this.size=t,this.height=r,this.parent=null}function In(e,t,r){le(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&ar(e,r)}function jn(e,t,r,n,o){if(n&&n.shared)return function(e,t,r,n,i){(n=u(n)).shared=!1;var o=[jn(e,t,r,n,i)],a=o[0],l=n.widgetNode;return Zr(e,function(e){l&&(n.widgetNode=l.cloneNode(!0)),o.push(jn(e,j(e,t),j(e,r),n,i));for(var s=0;s<e.linked.length;++s)if(e.linked[s].isParent)return;a=m(o)}),new aa(o,a)}(e,t,r,n,o);if(e.cm&&!e.cm.curOp)return xr(e.cm,jn)(e,t,r,n,o);var a=new oa(e,o),l=W(t,r);if(n&&u(n,a,!1),l>0||0==l&&!1!==a.clearWhenEmpty)return a;if(a.replacedWith&&(a.collapsed=!0,a.widgetNode=i("span",[a.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||a.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(a.widgetNode.insertLeft=!0)),a.collapsed){if(te(e,t.line,t,r,a)||t.line!=r.line&&te(e,r.line,t,r,a))throw new Error("Inserting collapsed marker partially overlapping an existing one");So=!0}a.addToHistory&&nn(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var s,c=t.line,d=e.cm;if(e.iter(c,r.line+1,function(e){d&&a.collapsed&&!d.options.lineWrapping&&re(e)==d.display.maxLine&&(s=!0),a.collapsed&&c!=t.line&&O(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new R(a,c==t.line?t.ch:null,c==r.line?r.ch:null)),++c}),a.collapsed&&e.iter(t.line,r.line+1,function(t){oe(e,t)&&O(t,0)}),a.clearOnEnter&&Oo(a,"beforeCursorEnter",function(){return a.clear()}),a.readOnly&&(Co=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),a.collapsed&&(a.id=++ia,a.atomic=!0),d){if(s&&(d.curOp.updateMaxLine=!0),a.collapsed)Sr(d,t.line,r.line+1);else if(a.className||a.title||a.startStyle||a.endStyle||a.css)for(var f=t.line;f<=r.line;f++)Tr(d,f,"text");a.atomic&&wn(d.doc),Ye(d,"markerAdded",d,a)}return a}function Bn(e){return e.findMarks(D(e.first,0),e.clipPos(D(e.lastLine())),function(e){return e.parent})}function Rn(e){for(var t=function(t){var r=e[t],n=[r.primary.doc];Zr(r.primary.doc,function(e){return n.push(e)});for(var i=0;i<r.markers.length;i++){var o=r.markers[i];-1==f(n,o.doc)&&(o.parent=null,r.markers.splice(i--,1))}},r=0;r<e.length;r++)t(r)}function qn(e){var t=this;if(Un(t),!me(t,e)&&!lt(t.display,e)){be(e),Ui&&(ca=+new Date);var r=qt(t,e,!0),n=e.dataTransfer.files;if(r&&!t.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),a=0,l=function(e,n){if(!t.options.allowDropFileTypes||-1!=f(t.options.allowDropFileTypes,e.type)){var l=new FileReader;l.onload=xr(t,function(){var e=l.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),o[n]=e,++a==i){var s={from:r=j(t.doc,r),to:r,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:"paste"};Mn(t.doc,s),gn(t.doc,Rr(r,qr(s)))}}),l.readAsText(e)}},s=0;s<i;++s)l(n[s],s);else{if(t.state.draggingText&&t.doc.sel.contains(r)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var c=e.dataTransfer.getData("Text");if(c){var u;if(t.state.draggingText&&!t.state.draggingText.copy&&(u=t.listSelections()),yn(t.doc,Rr(r,r)),u)for(var d=0;d<u.length;++d)Pn(t.doc,"",u[d].anchor,u[d].head,"drag");t.replaceSelection(c,"around","paste"),t.display.input.focus()}}catch(e){}}}}function Un(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Vn(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName("CodeMirror"),r=0;r<t.length;r++){var n=t[r].CodeMirror;n&&e(n)}}function Kn(){ua||(!function(){var e;Oo(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,Vn(Gn)},100))}),Oo(window,"blur",function(){return Vn(Jt)})}(),ua=!0)}function Gn(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}function $n(e){var t=e.split(/-(?!$)/);e=t[t.length-1];for(var r,n,i,o,a=0;a<t.length-1;a++){var l=t[a];if(/^(cmd|meta|m)$/i.test(l))o=!0;else if(/^a(lt)?$/i.test(l))r=!0;else if(/^(c|ctrl|control)$/i.test(l))n=!0;else{if(!/^s(hift)?$/i.test(l))throw new Error("Unrecognized modifier name: "+l);i=!0}}return r&&(e="Alt-"+e),n&&(e="Ctrl-"+e),o&&(e="Cmd-"+e),i&&(e="Shift-"+e),e}function Xn(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if("..."==n){delete e[r];continue}for(var i=g(r.split(" "),$n),o=0;o<i.length;o++){var a=void 0,l=void 0;o==i.length-1?(l=i.join(" "),a=n):(l=i.slice(0,o+1).join(" "),a="...");var s=t[l];if(s){if(s!=a)throw new Error("Inconsistent bindings for "+l)}else t[l]=a}delete e[r]}for(var c in t)e[c]=t[c];return e}function Yn(e,t,r,n){var i=(t=ei(t)).call?t.call(e,n):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&r(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return Yn(e,t.fallthrough,r,n);for(var o=0;o<t.fallthrough.length;o++){var a=Yn(e,t.fallthrough[o],r,n);if(a)return a}}}function Zn(e){var t="string"==typeof e?e:da[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function Qn(e,t,r){var n=e;return t.altKey&&"Alt"!=n&&(e="Alt-"+e),(lo?t.metaKey:t.ctrlKey)&&"Ctrl"!=n&&(e="Ctrl-"+e),(lo?t.ctrlKey:t.metaKey)&&"Cmd"!=n&&(e="Cmd-"+e),!r&&t.shiftKey&&"Shift"!=n&&(e="Shift-"+e),e}function Jn(e,t){if(Xi&&34==e.keyCode&&e.char)return!1;var r=da[e.keyCode];return null!=r&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(r=e.code),Qn(r,e,t))}function ei(e){return"string"==typeof e?ma[e]:e}function ti(e,t){for(var r=e.doc.sel.ranges,n=[],i=0;i<r.length;i++){for(var o=t(r[i]);n.length&&W(o.from,m(n).to)<=0;){var a=n.pop();if(W(a.from,o.from)<0){o.from=a.from;break}}n.push(o)}wr(e,function(){for(var t=n.length-1;t>=0;t--)Pn(e.doc,"",n[t].from,n[t].to,"+delete");lr(e)})}function ri(e,t,r){var n=C(e.text,t+r,r);return n<0||n>e.text.length?null:n}function ni(e,t,r){var n=ri(e,t.ch,r);return null==n?null:new D(t.line,n,r<0?"after":"before")}function ii(e,t,r,n,i){if(e){var o=de(r,t.doc.direction);if(o){var a,l=i<0?m(o):o[0],s=i<0==(1==l.level)?"after":"before";if(l.level>0||"rtl"==t.doc.direction){var c=vt(t,r);a=i<0?r.text.length-1:0;var u=yt(t,c,a).top;a=S(function(e){return yt(t,c,e).top==u},i<0==(1==l.level)?l.from:l.to-1,a),"before"==s&&(a=ri(r,a,1))}else a=i<0?l.to:l.from;return new D(n,a,s)}}return new D(n,i<0?r.text.length:0,i<0?"before":"after")}function oi(e,t){var r=T(e.doc,t),n=re(r);return n!=r&&(t=N(n)),ii(!0,e,n,t,1)}function ai(e,t){var r=T(e.doc,t),n=function(e){for(var t;t=ee(e);)e=t.find(1,!0).line;return e}(r);return n!=r&&(t=N(n)),ii(!0,e,r,t,-1)}function li(e,t){var r=oi(e,t.line),n=T(e.doc,r.line),i=de(n,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,n.text.search(/\S/)),a=t.line==r.line&&t.ch<=o&&t.ch;return D(r.line,a?0:o,r.sticky)}return r}function si(e,t,r){if("string"==typeof t&&!(t=ga[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r&&(e.display.shift=!1),i=t(e)!=go}finally{e.display.shift=n,e.state.suppressEdits=!1}return i}function ci(e,t,r,n){var i=e.state.keySeq;if(i){if(Zn(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:va.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),ui(e,i+" "+t,r,n))return!0}return ui(e,t,r,n)}function ui(e,t,r,n){var i=function(e,t,r){for(var n=0;n<e.state.keyMaps.length;n++){var i=Yn(t,e.state.keyMaps[n],r,e);if(i)return i}return e.options.extraKeys&&Yn(t,e.options.extraKeys,r,e)||Yn(t,e.options.keyMap,r,e)}(e,t,n);return"multi"==i&&(e.state.keySeq=t),"handled"==i&&Ye(e,"keyHandled",e,t,r),"handled"!=i&&"multi"!=i||(be(r),Xt(e)),!!i}function di(e,t){var r=Jn(t,!0);return!!r&&(t.shiftKey&&!e.state.keySeq?ci(e,"Shift-"+r,t,function(t){return si(e,t,!0)})||ci(e,r,t,function(t){if("string"==typeof t?/^go[A-Z]/.test(t):t.motion)return si(e,t)}):ci(e,r,t,function(t){return si(e,t)}))}function fi(e){if(this.curOp.focus=a(),!me(this,e)){Ui&&Vi<11&&27==e.keyCode&&(e.returnValue=!1);var t=e.keyCode;this.display.shift=16==t||e.shiftKey;var r=di(this,e);Xi&&(ya=r?t:null,!r&&88==t&&!Po&&(ro?e.metaKey:e.ctrlKey)&&this.replaceSelection("",null,"cut")),18!=t||/\bCodeMirror-crosshair\b/.test(this.display.lineDiv.className)||function(e){function t(e){18!=e.keyCode&&e.altKey||(co(r,"CodeMirror-crosshair"),he(document,"keyup",t),he(document,"mouseover",t))}var r=e.display.lineDiv;l(r,"CodeMirror-crosshair");Oo(document,"keyup",t),Oo(document,"mouseover",t)}(this)}}function hi(e){16==e.keyCode&&(this.doc.sel.shift=!1),me(this,e)}function pi(e){if(!(lt(this.display,e)||me(this,e)||e.ctrlKey&&!e.altKey||ro&&e.metaKey)){var t=e.keyCode,r=e.charCode;if(Xi&&t==ya)return ya=null,void be(e);if(!Xi||e.which&&!(e.which<10)||!di(this,e)){var n=String.fromCharCode(null==r?t:r);"\b"!=n&&(function(e,t,r){return ci(e,"'"+r+"'",t,function(t){return si(e,t,!0)})}(this,e,n)||this.display.input.onKeyPress(e))}}}function mi(e){var t=this.display;if(!(me(this,e)||t.activeTouch&&t.input.supportsTouch()))if(t.input.ensurePolled(),t.shift=e.shiftKey,lt(t,e))Ki||(t.scroller.draggable=!1,setTimeout(function(){return t.scroller.draggable=!0},100));else if(!yi(this,e)){var r=qt(this,e),n=Se(e),i=r?function(e,t){var r=+new Date;return xa&&xa.compare(r,e,t)?(wa=xa=null,"triple"):wa&&wa.compare(r,e,t)?(xa=new ba(r,e,t),wa=null,"double"):(wa=new ba(r,e,t),xa=null,"single")}(r,n):"single";window.focus(),1==n&&this.state.selectingText&&this.state.selectingText(e),r&&function(e,t,r,n,i){var o="Click";"double"==n?o="Double"+o:"triple"==n&&(o="Triple"+o);return o=(1==t?"Left":2==t?"Middle":"Right")+o,ci(e,Qn(o,i),i,function(t){if("string"==typeof t&&(t=ga[t]),!t)return!1;var n=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n=t(e,r)!=go}finally{e.state.suppressEdits=!1}return n})}(this,n,r,i,e)||(1==n?r?function(e,t,r,n){Ui?setTimeout(c(Yt,e),0):e.curOp.focus=a();var i,o=function(e,t,r){var n=e.getOption("configureMouse"),i=n?n(e,t,r):{};if(null==i.unit){var o=no?r.shiftKey&&r.metaKey:r.altKey;i.unit=o?"rectangle":"single"==t?"char":"double"==t?"word":"line"}(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||r.shiftKey);null==i.addNew&&(i.addNew=ro?r.metaKey:r.ctrlKey);null==i.moveOnDrag&&(i.moveOnDrag=!(ro?r.altKey:r.ctrlKey));return i}(e,r,n),l=e.doc.sel;e.options.dragDrop&&No&&!e.isReadOnly()&&"single"==r&&(i=l.contains(t))>-1&&(W((i=l.ranges[i]).from(),t)<0||t.xRel>0)&&(W(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,a=xr(e,function(t){Ki&&(i.scroller.draggable=!1),e.state.draggingText=!1,he(document,"mouseup",a),he(document,"mousemove",l),he(i.scroller,"dragstart",s),he(i.scroller,"drop",a),o||(be(t),n.addNew||fn(e.doc,r,null,null,n.extend),Ki||Ui&&9==Vi?setTimeout(function(){document.body.focus(),i.input.focus()},20):i.input.focus())}),l=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},s=function(){return o=!0};Ki&&(i.scroller.draggable=!0);e.state.draggingText=a,a.copy=!n.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop();Oo(document,"mouseup",a),Oo(document,"mousemove",l),Oo(i.scroller,"dragstart",s),Oo(i.scroller,"drop",a),Zt(e),setTimeout(function(){return i.input.focus()},20)}(e,n,t,o):function(e,t,r,n){function i(t){if(0!=W(v,t))if(v=t,"rectangle"==n.unit){for(var i=[],o=e.options.tabSize,a=d(T(c,r.line).text,r.ch,o),l=d(T(c,t.line).text,t.ch,o),s=Math.min(a,l),m=Math.max(a,l),g=Math.min(r.line,t.line),y=Math.min(e.lastLine(),Math.max(r.line,t.line));g<=y;g++){var b=T(c,g).text,w=h(b,s,o);s==m?i.push(new ra(D(g,w),D(g,w))):b.length>w&&i.push(new ra(D(g,w),D(g,h(b,m,o))))}i.length||i.push(new ra(r,r)),vn(c,Br(p.ranges.slice(0,f).concat(i),f),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var x,k=u,C=gi(e,t,n.unit),S=k.anchor;W(C.anchor,S)>0?(x=C.head,S=H(k.from(),C.anchor)):(x=C.anchor,S=E(k.to(),C.head));var L=p.ranges.slice(0);L[f]=function(e,t){var r=t.anchor,n=t.head,i=T(e.doc,r.line);if(0==W(r,n)&&r.sticky==n.sticky)return t;var o=de(i);if(!o)return t;var a=ue(o,r.ch,r.sticky),l=o[a];if(l.from!=r.ch&&l.to!=r.ch)return t;var s=a+(l.from==r.ch==(1!=l.level)?0:1);if(0==s||s==o.length)return t;var c;if(n.line!=r.line)c=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var u=ue(o,n.ch,n.sticky),d=u-a||(n.ch-r.ch)*(1==l.level?-1:1);c=u==s-1||u==s?d<0:d>0}var f=o[s+(c?-1:0)],h=c==(1==f.level),p=h?f.from:f.to,m=h?"after":"before";return r.ch==p&&r.sticky==m?t:new ra(new D(r.line,p,m),n)}(e,new ra(j(c,S),x)),vn(c,Br(L,f),yo)}}function o(t){var r=++b,l=qt(e,t,!0,"rectangle"==n.unit);if(l)if(0!=W(l,v)){e.curOp.focus=a(),i(l);var u=rr(s,c);(l.line>=u.to||l.line<u.from)&&setTimeout(xr(e,function(){b==r&&o(t)}),150)}else{var d=t.clientY<y.top?-20:t.clientY>y.bottom?20:0;d&&setTimeout(xr(e,function(){b==r&&(s.scroller.scrollTop+=d,o(t))}),50)}}function l(t){e.state.selectingText=!1,b=1/0,be(t),s.input.focus(),he(document,"mousemove",w),he(document,"mouseup",x),c.history.lastSelOrigin=null}var s=e.display,c=e.doc;be(t);var u,f,p=c.sel,m=p.ranges;n.addNew&&!n.extend?(f=c.sel.contains(r),u=f>-1?m[f]:new ra(r,r)):(u=c.sel.primary(),f=c.sel.primIndex);if("rectangle"==n.unit)n.addNew||(u=new ra(r,r)),r=qt(e,t,!0,!0),f=-1;else{var g=gi(e,r,n.unit);u=n.extend?dn(u,g.anchor,g.head,n.extend):g}n.addNew?-1==f?(f=m.length,vn(c,Br(m.concat([u]),f),{scroll:!1,origin:"*mouse"})):m.length>1&&m[f].empty()&&"char"==n.unit&&!n.extend?(vn(c,Br(m.slice(0,f).concat(m.slice(f+1)),0),{scroll:!1,origin:"*mouse"}),p=c.sel):pn(c,f,u,yo):(f=0,vn(c,new ta([u],0),yo),p=c.sel);var v=r;var y=s.wrapper.getBoundingClientRect(),b=0;var w=xr(e,function(e){Se(e)?o(e):l(e)}),x=xr(e,l);e.state.selectingText=x,Oo(document,"mousemove",w),Oo(document,"mouseup",x)}(e,n,t,o)}(this,r,i,e):Ce(e)==t.scroller&&be(e):2==n?(r&&fn(this.doc,r),setTimeout(function(){return t.input.focus()},20)):3==n&&(so?bi(this,e):Zt(this)))}}function gi(e,t,r){if("char"==r)return new ra(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new ra(D(t.line,0),j(e.doc,D(t.line+1,0)));var n=r(e,t);return new ra(n.from,n.to)}function vi(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&be(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!ve(e,r))return xe(t);o-=l.top-a.viewOffset;for(var s=0;s<e.options.gutters.length;++s){var c=a.gutters.childNodes[s];if(c&&c.getBoundingClientRect().right>=i){return pe(e,r,e,A(e.doc,o),e.options.gutters[s],t),xe(t)}}}function yi(e,t){return vi(e,t,"gutterClick",!0)}function bi(e,t){lt(e.display,t)||function(e,t){if(!ve(e,"gutterContextMenu"))return!1;return vi(e,t,"gutterContextMenu",!1)}(e,t)||me(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function wi(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Ct(e)}function xi(e){zr(e),Sr(e),nr(e)}function ki(e,t,r){if(!t!=!(r&&r!=ka)){var n=e.display.dragFunctions,i=t?Oo:he;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function Ci(e){e.options.lineWrapping?(l(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(co(e.display.wrapper,"CodeMirror-wrap"),ce(e)),Rt(e),Sr(e),Ct(e),setTimeout(function(){return mr(e)},100)}function Si(e,t){var o=this;if(!(this instanceof Si))return new Si(e,t);this.options=t=t?u(t):{},u(Ca,t,!1),Er(t);var a=t.value;"string"==typeof a&&(a=new sa(a,t.mode,null,t.lineSeparator,t.direction)),this.doc=a;var l=new Si.inputStyles[t.inputStyle](this),s=this.display=new function(e,t,r){this.input=r,this.scrollbarFiller=n("div",null,"CodeMirror-scrollbar-filler"),this.scrollbarFiller.setAttribute("cm-not-content","true"),this.gutterFiller=n("div",null,"CodeMirror-gutter-filler"),this.gutterFiller.setAttribute("cm-not-content","true"),this.lineDiv=i("div",null,"CodeMirror-code"),this.selectionDiv=n("div",null,null,"position: relative; z-index: 1"),this.cursorDiv=n("div",null,"CodeMirror-cursors"),this.measure=n("div",null,"CodeMirror-measure"),this.lineMeasure=n("div",null,"CodeMirror-measure"),this.lineSpace=i("div",[this.measure,this.lineMeasure,this.selectionDiv,this.cursorDiv,this.lineDiv],null,"position: relative; outline: none");var o=i("div",[this.lineSpace],"CodeMirror-lines");this.mover=n("div",[o],null,"position: relative"),this.sizer=n("div",[this.mover],"CodeMirror-sizer"),this.sizerWidth=null,this.heightForcer=n("div",null,null,"position: absolute; height: "+mo+"px; width: 1px;"),this.gutters=n("div",null,"CodeMirror-gutters"),this.lineGutter=null,this.scroller=n("div",[this.sizer,this.heightForcer,this.gutters],"CodeMirror-scroll"),this.scroller.setAttribute("tabIndex","-1"),this.wrapper=n("div",[this.scrollbarFiller,this.gutterFiller,this.scroller],"CodeMirror"),Ui&&Vi<8&&(this.gutters.style.zIndex=-1,this.scroller.style.paddingRight=0),Ki||ji&&to||(this.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(this.wrapper):e(this.wrapper)),this.viewFrom=this.viewTo=t.first,this.reportedViewFrom=this.reportedViewTo=t.first,this.view=[],this.renderedView=null,this.externalMeasured=null,this.viewOffset=0,this.lastWrapHeight=this.lastWrapWidth=0,this.updateLineNumbers=null,this.nativeBarWidth=this.barHeight=this.barWidth=0,this.scrollbarsClipped=!1,this.lineNumWidth=this.lineNumInnerWidth=this.lineNumChars=null,this.alignWidgets=!1,this.cachedCharWidth=this.cachedTextHeight=this.cachedPaddingH=null,this.maxLine=null,this.maxLineLength=0,this.maxLineChanged=!1,this.wheelDX=this.wheelDY=this.wheelStartX=this.wheelStartY=null,this.shift=!1,this.selForContextMenu=null,this.activeTouch=null,r.init(this)}(e,a,l);s.wrapper.CodeMirror=this,zr(this),wi(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),vr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new fo,keySeq:null,specialChars:null},t.autofocus&&!to&&s.input.focus(),Ui&&Vi<11&&setTimeout(function(){return o.display.input.reset(!0)},20),function(e){function t(){o.activeTouch&&(a=setTimeout(function(){return o.activeTouch=null},1e3),(l=o.activeTouch).end=+new Date)}function i(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}var o=e.display;Oo(o.scroller,"mousedown",xr(e,mi)),Oo(o.scroller,"dblclick",Ui&&Vi<11?xr(e,function(t){if(!me(e,t)){var r=qt(e,t);if(r&&!yi(e,t)&&!lt(e.display,t)){be(t);var n=e.findWordAt(r);fn(e.doc,n.anchor,n.head)}}}):function(t){return me(e,t)||be(t)});so||Oo(o.scroller,"contextmenu",function(t){return bi(e,t)});var a,l={end:0};Oo(o.scroller,"touchstart",function(t){if(!me(e,t)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(t)&&!yi(e,t)){o.input.ensurePolled(),clearTimeout(a);var r=+new Date;o.activeTouch={start:r,moved:!1,prev:r-l.end<=300?l:null},1==t.touches.length&&(o.activeTouch.left=t.touches[0].pageX,o.activeTouch.top=t.touches[0].pageY)}}),Oo(o.scroller,"touchmove",function(){o.activeTouch&&(o.activeTouch.moved=!0)}),Oo(o.scroller,"touchend",function(r){var n=o.activeTouch;if(n&&!lt(o,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var a,l=e.coordsChar(o.activeTouch,"page");a=!n.prev||i(n,n.prev)?new ra(l,l):!n.prev.prev||i(n,n.prev.prev)?e.findWordAt(l):new ra(D(l.line,0),j(e.doc,D(l.line+1,0))),e.setSelection(a.anchor,a.head),e.focus(),be(r)}t()}),Oo(o.scroller,"touchcancel",t),Oo(o.scroller,"scroll",function(){o.scroller.clientHeight&&(dr(e,o.scroller.scrollTop),hr(e,o.scroller.scrollLeft,!0),pe(e,"scroll",e))}),Oo(o.scroller,"mousewheel",function(t){return jr(e,t)}),Oo(o.scroller,"DOMMouseScroll",function(t){return jr(e,t)}),Oo(o.wrapper,"scroll",function(){return o.wrapper.scrollTop=o.wrapper.scrollLeft=0}),o.dragFunctions={enter:function(t){me(e,t)||ke(t)},over:function(t){me(e,t)||(!function(e,t){var i=qt(e,t);if(i){var o=document.createDocumentFragment();Gt(e,i,o),e.display.dragCursor||(e.display.dragCursor=n("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),r(e.display.dragCursor,o)}}(e,t),ke(t))},start:function(t){return function(e,t){if(Ui&&(!e.state.draggingText||+new Date-ca<100))ke(t);else if(!me(e,t)&&!lt(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!Yi)){var r=n("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",Xi&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),Xi&&r.parentNode.removeChild(r)}}(e,t)},drop:xr(e,qn),leave:function(t){me(e,t)||Un(e)}};var s=o.input.getField();Oo(s,"keyup",function(t){return hi.call(e,t)}),Oo(s,"keydown",xr(e,fi)),Oo(s,"keypress",xr(e,pi)),Oo(s,"focus",function(t){return Qt(e,t)}),Oo(s,"blur",function(t){return Jt(e,t)})}(this),Kn(),yr(this),this.curOp.forceUpdate=!0,Qr(this,a),t.autofocus&&!to||this.hasFocus()?setTimeout(c(Qt,this),20):Jt(this);for(var d in Sa)Sa.hasOwnProperty(d)&&Sa[d](o,t[d],ka);ir(this),t.finishInit&&t.finishInit(this);for(var f=0;f<Ta.length;++f)Ta[f](o);br(this),Ki&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(s.lineDiv).textRendering&&(s.lineDiv.style.textRendering="auto")}function Ti(e,t,r,n){var i,o=e.doc;null==r&&(r="add"),"smart"==r&&(o.mode.indent?i=Fe(e,t).state:r="prev");var a=e.options.tabSize,l=T(o,t),s=d(l.text,null,a);l.stateAfter&&(l.stateAfter=null);var c,u=l.text.match(/^\s*/)[0];if(n||/\S/.test(l.text)){if("smart"==r&&((c=o.mode.indent(i,l.text.slice(u.length),l.text))==go||c>150)){if(!n)return;r="prev"}}else c=0,r="not";"prev"==r?c=t>o.first?d(T(o,t-1).text,null,a):0:"add"==r?c=s+e.options.indentUnit:"subtract"==r?c=s-e.options.indentUnit:"number"==typeof r&&(c=s+r),c=Math.max(0,c);var f="",h=0;if(e.options.indentWithTabs)for(var m=Math.floor(c/a);m;--m)h+=a,f+="\t";if(h<c&&(f+=p(c-h)),f!=u)return Pn(o,f,D(t,0),D(t,u.length),"+input"),l.stateAfter=null,!0;for(var g=0;g<o.sel.ranges.length;g++){var v=o.sel.ranges[g];if(v.head.line==t&&v.head.ch<u.length){var y=D(t,u.length);pn(o,g,new ra(y,y));break}}}function Li(e){La=e}function Mi(e,t,r,n,i){var o=e.doc;e.display.shift=!1,n||(n=o.sel);var a=e.state.pasteIncoming||"paste"==i,l=Ao(t),s=null;if(a&&n.ranges.length>1)if(La&&La.text.join("\n")==t){if(n.ranges.length%La.text.length==0){s=[];for(var c=0;c<La.text.length;c++)s.push(o.splitLines(La.text[c]))}}else l.length==n.ranges.length&&e.options.pasteLinesPerSelection&&(s=g(l,function(e){return[e]}));for(var u,d=n.ranges.length-1;d>=0;d--){var f=n.ranges[d],h=f.from(),p=f.to();f.empty()&&(r&&r>0?h=D(h.line,h.ch-r):e.state.overwrite&&!a?p=D(p.line,Math.min(T(o,p.line).text.length,p.ch+m(l).length)):La&&La.lineWise&&La.text.join("\n")==t&&(h=p=D(h.line,0))),u=e.curOp.updateInput;var v={from:h,to:p,text:s?s[d%s.length]:l,origin:i||(a?"paste":e.state.cutIncoming?"cut":"+input")};Mn(e.doc,v),Ye(e,"inputRead",e,v)}t&&!a&&Ni(e,t),lr(e),e.curOp.updateInput=u,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Oi(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||wr(t,function(){return Mi(t,r,0,null,"paste")}),!0}function Ni(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),a=!1;if(o.electricChars){for(var l=0;l<o.electricChars.length;l++)if(t.indexOf(o.electricChars.charAt(l))>-1){a=Ti(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(T(e.doc,i.head.line).text.slice(0,i.head.ch))&&(a=Ti(e,i.head.line,"smart"));a&&Ye(e,"electricInput",e,i.head.line)}}}function Ai(e){for(var t=[],r=[],n=0;n<e.doc.sel.ranges.length;n++){var i=e.doc.sel.ranges[n].head.line,o={anchor:D(i,0),head:D(i+1,0)};r.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:r}}function _i(e,t){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck",!!t)}function Pi(){var e=n("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=n("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return Ki?e.style.width="1000px":e.setAttribute("wrap","off"),Ji&&(e.style.border="1px solid black"),_i(e),t}function Di(e,t,r,n,i){function o(n){var o;if(null==(o=i?function(e,t,r,n){var i=de(t,e.doc.direction);if(!i)return ni(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=ue(i,r.ch,r.sticky),a=i[o];if("ltr"==e.doc.direction&&a.level%2==0&&(n>0?a.to>r.ch:a.from<r.ch))return ni(t,r,n);var l,s=function(e,r){return ri(t,e instanceof D?e.ch:e,r)},c=function(r){return e.options.lineWrapping?(l=l||vt(e,t),Ft(e,t,l,r)):{begin:0,end:t.text.length}},u=c("before"==r.sticky?s(r,-1):r.ch);if("rtl"==e.doc.direction||1==a.level){var d=1==a.level==n<0,f=s(r,d?1:-1);if(null!=f&&(d?f<=a.to&&f<=u.end:f>=a.from&&f>=u.begin)){var h=d?"before":"after";return new D(r.line,f,h)}}var p=function(e,t,n){for(var o=function(e,t){return t?new D(r.line,s(e,1),"before"):new D(r.line,e,"after")};e>=0&&e<i.length;e+=t){var a=i[e],l=t>0==(1!=a.level),c=l?n.begin:s(n.end,-1);if(a.from<=c&&c<a.to)return o(c,l);if(c=l?a.from:s(a.to,-1),n.begin<=c&&c<n.end)return o(c,l)}},m=p(o+n,n,u);if(m)return m;var g=n>0?u.end:s(u.begin,-1);return null==g||n>0&&g==t.text.length||!(m=p(n>0?0:i.length-1,n,c(g)))?null:m}(e.cm,s,t,r):ni(s,t,r))){if(n||!function(){var n=t.line+r;return!(n<e.first||n>=e.first+e.size)&&(t=new D(n,t.ch,t.sticky),s=T(e,n))}())return!1;t=ii(i,e.cm,s,t.line,r)}else t=o;return!0}var a=t,l=r,s=T(e,t.line);if("char"==n)o();else if("column"==n)o(!0);else if("word"==n||"group"==n)for(var c=null,u="group"==n,d=e.cm&&e.cm.getHelper(t,"wordChars"),f=!0;!(r<0)||o(!f);f=!1){var h=s.text.charAt(t.ch)||"\n",p=w(h,d)?"w":u&&"\n"==h?"n":!u||/\s/.test(h)?null:"p";if(!u||f||p||(p="s"),c&&c!=p){r<0&&(r=1,o(),t.sticky="after");break}if(p&&(c=p),r>0&&!o(!f))break}var m=Cn(e,t,a,l,!0);return F(a,m)&&(m.hitSide=!0),m}function Wi(e,t,r,n){var i,o=e.doc,a=t.left;if("page"==n){var l=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),s=Math.max(l-.5*Et(e.display),3);i=(r>0?t.bottom:t.top)+r*s}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(var c;(c=Dt(e,a,i)).outside;){if(r<0?i<=0:i>=o.height){c.hitSide=!0;break}i+=5*r}return c}function Fi(e,t){var r=gt(e,t.line);if(!r||r.hidden)return null;var n=T(e.doc,t.line),i=pt(r,n,t.line),o=de(n,e.doc.direction),a="left";if(o){a=ue(o,t.ch)%2?"right":"left"}var l=bt(i.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function zi(e,t){return t&&(e.bad=!0),e}function Ei(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return zi(e.clipPos(D(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var a=e.display.view[i];if(a.node==n)return function(e,t,r){function n(t,r,n){for(var i=-1;i<(d?d.length:0);i++)for(var o=i<0?u.map:d[i],a=0;a<o.length;a+=3){var l=o[a+2];if(l==t||l==r){var s=N(i<0?e.line:e.rest[i]),c=o[a]+n;return(n<0||l!=t)&&(c=o[a+(n?1:0)]),D(s,c)}}}var i=e.text.firstChild,a=!1;if(!t||!o(i,t))return zi(D(N(e.line),0),!0);if(t==i&&(a=!0,t=i.childNodes[r],r=0,!t)){var l=e.rest?m(e.rest):e.line;return zi(D(N(l),l.text.length),a)}var s=3==t.nodeType?t:null,c=t;s||1!=t.childNodes.length||3!=t.firstChild.nodeType||(s=t.firstChild,r&&(r=s.nodeValue.length));for(;c.parentNode!=i;)c=c.parentNode;var u=e.measure,d=u.maps;var f=n(s,c,r);if(f)return zi(f,a);for(var h=c.nextSibling,p=s?s.nodeValue.length-r:0;h;h=h.nextSibling){if(f=n(h,h.firstChild,0))return zi(D(f.line,f.ch-p),a);p+=h.textContent.length}for(var g=c.previousSibling,v=r;g;g=g.previousSibling){if(f=n(g,g.firstChild,-1))return zi(D(f.line,f.ch+v),a);v+=g.textContent.length}}(a,t,r)}}var Hi=navigator.userAgent,Ii=navigator.platform,ji=/gecko\/\d/i.test(Hi),Bi=/MSIE \d/.test(Hi),Ri=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(Hi),qi=/Edge\/(\d+)/.exec(Hi),Ui=Bi||Ri||qi,Vi=Ui&&(Bi?document.documentMode||6:+(qi||Ri)[1]),Ki=!qi&&/WebKit\//.test(Hi),Gi=Ki&&/Qt\/\d+\.\d+/.test(Hi),$i=!qi&&/Chrome\//.test(Hi),Xi=/Opera\//.test(Hi),Yi=/Apple Computer/.test(navigator.vendor),Zi=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(Hi),Qi=/PhantomJS/.test(Hi),Ji=!qi&&/AppleWebKit/.test(Hi)&&/Mobile\/\w+/.test(Hi),eo=/Android/.test(Hi),to=Ji||eo||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(Hi),ro=Ji||/Mac/.test(Ii),no=/\bCrOS\b/.test(Hi),io=/win/i.test(Ii),oo=Xi&&Hi.match(/Version\/(\d*\.\d*)/);oo&&(oo=Number(oo[1])),oo&&oo>=15&&(Xi=!1,Ki=!0);var ao,lo=ro&&(Gi||Xi&&(null==oo||oo<12.11)),so=ji||Ui&&Vi>=9,co=function(t,r){var n=t.className,i=e(r).exec(n);if(i){var o=n.slice(i.index+i[0].length);t.className=n.slice(0,i.index)+(o?i[1]+o:"")}};ao=document.createRange?function(e,t,r,n){var i=document.createRange();return i.setEnd(n||e,r),i.setStart(e,t),i}:function(e,t,r){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(e){return n}return n.collapse(!0),n.moveEnd("character",r),n.moveStart("character",t),n};var uo=function(e){e.select()};Ji?uo=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:Ui&&(uo=function(e){try{e.select()}catch(e){}});var fo=function(){this.id=null};fo.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var ho,po,mo=30,go={toString:function(){return"CodeMirror.Pass"}},vo={scroll:!1},yo={origin:"*mouse"},bo={origin:"+move"},wo=[""],xo=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,ko=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,Co=!1,So=!1,To=null,Lo=function(){function e(e){return e<=247?r.charAt(e):1424<=e&&e<=1524?"R":1536<=e&&e<=1785?n.charAt(e-1536):1774<=e&&e<=2220?"r":8192<=e&&e<=8203?"w":8204==e?"b":"L"}function t(e,t,r){this.level=e,this.from=t,this.to=r}var r="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",n="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111",i=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,o=/[stwN]/,a=/[LRr]/,l=/[Lb1n]/,s=/[1n]/;return function(r,n){var c="ltr"==n?"L":"R";if(0==r.length||"ltr"==n&&!i.test(r))return!1;for(var u=r.length,d=[],f=0;f<u;++f)d.push(e(r.charCodeAt(f)));for(var h=0,p=c;h<u;++h){var g=d[h];"m"==g?d[h]=p:p=g}for(var v=0,y=c;v<u;++v){var b=d[v];"1"==b&&"r"==y?d[v]="n":a.test(b)&&(y=b,"r"==b&&(d[v]="R"))}for(var w=1,x=d[0];w<u-1;++w){var k=d[w];"+"==k&&"1"==x&&"1"==d[w+1]?d[w]="1":","!=k||x!=d[w+1]||"1"!=x&&"n"!=x||(d[w]=x),x=k}for(var C=0;C<u;++C){var S=d[C];if(","==S)d[C]="N";else if("%"==S){var T=void 0;for(T=C+1;T<u&&"%"==d[T];++T);for(var L=C&&"!"==d[C-1]||T<u&&"1"==d[T]?"1":"N",M=C;M<T;++M)d[M]=L;C=T-1}}for(var O=0,N=c;O<u;++O){var A=d[O];"L"==N&&"1"==A?d[O]="L":a.test(A)&&(N=A)}for(var _=0;_<u;++_)if(o.test(d[_])){var P=void 0;for(P=_+1;P<u&&o.test(d[P]);++P);for(var D="L"==(_?d[_-1]:c),W=D==("L"==(P<u?d[P]:c))?D?"L":"R":c,F=_;F<P;++F)d[F]=W;_=P-1}for(var z,E=[],H=0;H<u;)if(l.test(d[H])){var I=H;for(++H;H<u&&l.test(d[H]);++H);E.push(new t(0,I,H))}else{var j=H,B=E.length;for(++H;H<u&&"L"!=d[H];++H);for(var R=j;R<H;)if(s.test(d[R])){j<R&&E.splice(B,0,new t(1,j,R));var q=R;for(++R;R<H&&s.test(d[R]);++R);E.splice(B,0,new t(2,q,R)),j=R}else++R;j<H&&E.splice(B,0,new t(1,j,H))}return"ltr"==n&&(1==E[0].level&&(z=r.match(/^\s+/))&&(E[0].from=z[0].length,E.unshift(new t(0,0,z[0].length))),1==m(E).level&&(z=r.match(/\s+$/))&&(m(E).to-=z[0].length,E.push(new t(0,u-z[0].length,u)))),"rtl"==n?E.reverse():E}}(),Mo=[],Oo=function(e,t,r){if(e.addEventListener)e.addEventListener(t,r,!1);else if(e.attachEvent)e.attachEvent("on"+t,r);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||Mo).concat(r)}},No=function(){if(Ui&&Vi<9)return!1;var e=n("div");return"draggable"in e||"dragDrop"in e}(),Ao=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),a=o.indexOf("\r");-1!=a?(r.push(o.slice(0,a)),t+=a+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},_o=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Po=function(){var e=n("div");return"oncopy"in e||(e.setAttribute("oncopy","return;"),"function"==typeof e.oncopy)}(),Do=null,Wo={},Fo={},zo={},Eo=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};Eo.prototype.eol=function(){return this.pos>=this.string.length},Eo.prototype.sol=function(){return this.pos==this.lineStart},Eo.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Eo.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Eo.prototype.eat=function(e){var t=this.string.charAt(this.pos);if("string"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},Eo.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},Eo.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Eo.prototype.skipToEnd=function(){this.pos=this.string.length},Eo.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Eo.prototype.backUp=function(e){this.pos-=e},Eo.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=d(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?d(this.string,this.lineStart,this.tabSize):0)},Eo.prototype.indentation=function(){return d(this.string,null,this.tabSize)-(this.lineStart?d(this.string,this.lineStart,this.tabSize):0)},Eo.prototype.match=function(e,t,r){if("string"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&n.index>0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Eo.prototype.current=function(){return this.string.slice(this.start,this.pos)},Eo.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Eo.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Eo.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var Ho=function(e,t){this.state=e,this.lookAhead=t},Io=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};Io.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Io.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},Io.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Io.fromSaved=function(e,t,r){return t instanceof Ho?new Io(e,Ae(e.mode,t.state),r,t.lookAhead):new Io(e,Ae(e.mode,t),r)},Io.prototype.save=function(e){var t=!1!==e?Ae(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new Ho(t,this.maxLookAhead):t};var jo=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r},Bo=function(e,t,r){this.text=e,$(this,t),this.height=r?r(this):1};Bo.prototype.lineNo=function(){return N(this)},ye(Bo);var Ro,qo={},Uo={},Vo=null,Ko=null,Go={left:0,right:0,top:0,bottom:0},$o=function(e,t,r){this.cm=r;var i=this.vert=n("div",[n("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=n("div",[n("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");e(i),e(o),Oo(i,"scroll",function(){i.clientHeight&&t(i.scrollTop,"vertical")}),Oo(o,"scroll",function(){o.clientWidth&&t(o.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,Ui&&Vi<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};$o.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},$o.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},$o.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},$o.prototype.zeroWidthHack=function(){var e=ro&&!Zi?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new fo,this.disableVert=new fo},$o.prototype.enableZeroWidthBar=function(e,t,r){function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,n)}e.style.pointerEvents="auto",t.set(1e3,n)},$o.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Xo=function(){};Xo.prototype.update=function(){return{bottom:0,right:0}},Xo.prototype.setScrollLeft=function(){},Xo.prototype.setScrollTop=function(){},Xo.prototype.clear=function(){};var Yo={native:$o,null:Xo},Zo=0,Qo=function(e,t,r){var n=e.display;this.viewport=t,this.visible=rr(n,e.doc,t),this.editorIsHidden=!n.wrapper.offsetWidth,this.wrapperHeight=n.wrapper.clientHeight,this.wrapperWidth=n.wrapper.clientWidth,this.oldDisplayWidth=ft(e),this.force=r,this.dims=It(e),this.events=[]};Qo.prototype.signal=function(e,t){ve(e,t)&&this.events.push(arguments)},Qo.prototype.finish=function(){for(var e=0;e<this.events.length;e++)pe.apply(null,this.events[e])};var Jo=0,ea=null;Ui?ea=-.53:ji?ea=15:$i?ea=-.7:Yi&&(ea=-1/3);var ta=function(e,t){this.ranges=e,this.primIndex=t};ta.prototype.primary=function(){return this.ranges[this.primIndex]},ta.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var r=this.ranges[t],n=e.ranges[t];if(!F(r.anchor,n.anchor)||!F(r.head,n.head))return!1}return!0},ta.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new ra(z(this.ranges[t].anchor),z(this.ranges[t].head));return new ta(e,this.primIndex)},ta.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},ta.prototype.contains=function(e,t){t||(t=e);for(var r=0;r<this.ranges.length;r++){var n=this.ranges[r];if(W(t,n.from())>=0&&W(e,n.to())<=0)return r}return-1};var ra=function(e,t){this.anchor=e,this.head=t};ra.prototype.from=function(){return H(this.anchor,this.head)},ra.prototype.to=function(){return E(this.anchor,this.head)},ra.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},En.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var r=e,n=e+t;r<n;++r){var i=this.lines[r];this.height-=i.height,Re(i),Ye(i,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,r){this.height+=r,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var n=0;n<t.length;++n)t[n].parent=this},iterN:function(e,t,r){for(var n=e+t;e<n;++e)if(r(this.lines[e]))return!0}},Hn.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var r=0;r<this.children.length;++r){var n=this.children[r],i=n.chunkSize();if(e<i){var o=Math.min(t,i-e),a=n.height;if(n.removeInner(e,o),this.height-=a-n.height,i==o&&(this.children.splice(r--,1),n.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof En))){var l=[];this.collapse(l),this.children=[new En(l)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,r){this.size+=t.length,this.height+=r;for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,r),i.lines&&i.lines.length>50){for(var a=i.lines.length%25+25,l=a;l<i.lines.length;){var s=new En(i.lines.slice(l,l+=25));i.height-=s.height,this.children.splice(++n,0,s),s.parent=this}i.lines=i.lines.slice(0,a),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=new Hn(e.children.splice(e.children.length-5,5));if(e.parent){e.size-=t.size,e.height-=t.height;var r=f(e.parent.children,e);e.parent.children.splice(r+1,0,t)}else{var n=new Hn(e.children);n.parent=e,e.children=[n,t],e=n}t.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<o){var a=Math.min(t,o-e);if(i.iterN(e,a,r))return!0;if(0==(t-=a))break;e=0}else e-=o}}};var na=function(e,t,r){if(r)for(var n in r)r.hasOwnProperty(n)&&(this[n]=r[n]);this.doc=e,this.node=t};na.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,r=this.line,n=N(r);if(null!=n&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(r.widgets=null);var o=at(this);O(r,Math.max(0,r.height-o)),e&&(wr(e,function(){In(e,r,-o),Tr(e,n,"widget")}),Ye(e,"lineWidgetCleared",e,this,n))}},na.prototype.changed=function(){var e=this,t=this.height,r=this.doc.cm,n=this.line;this.height=null;var i=at(this)-t;i&&(O(n,n.height+i),r&&wr(r,function(){r.curOp.forceUpdate=!0,In(r,n,i),Ye(r,"lineWidgetChanged",r,e,N(n))}))},ye(na);var ia=0,oa=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++ia};oa.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&yr(e),ve(this,"clear")){var r=this.find();r&&Ye(this,"clear",r.from,r.to)}for(var n=null,i=null,o=0;o<this.lines.length;++o){var a=this.lines[o],l=q(a.markedSpans,this);e&&!this.collapsed?Tr(e,N(a),"text"):e&&(null!=l.to&&(i=N(a)),null!=l.from&&(n=N(a))),a.markedSpans=U(a.markedSpans,l),null==l.from&&this.collapsed&&!oe(this.doc,a)&&e&&O(a,Et(e.display))}if(e&&this.collapsed&&!e.options.lineWrapping)for(var s=0;s<this.lines.length;++s){var c=re(this.lines[s]),u=se(c);u>e.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=u,e.display.maxLineChanged=!0)}null!=n&&e&&this.collapsed&&Sr(e,n,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&wn(e.doc)),e&&Ye(e,"markerCleared",e,this,n,i),t&&br(e),this.parent&&this.parent.clear()}},oa.prototype.find=function(e,t){null==e&&"bookmark"==this.type&&(e=1);for(var r,n,i=0;i<this.lines.length;++i){var o=this.lines[i],a=q(o.markedSpans,this);if(null!=a.from&&(r=D(t?o:N(o),a.from),-1==e))return r;if(null!=a.to&&(n=D(t?o:N(o),a.to),1==e))return n}return r&&{from:r,to:n}},oa.prototype.changed=function(){var e=this,t=this.find(-1,!0),r=this,n=this.doc.cm;t&&n&&wr(n,function(){var i=t.line,o=N(t.line),a=gt(n,o);if(a&&(xt(a),n.curOp.selectionChanged=n.curOp.forceUpdate=!0),n.curOp.updateMaxLine=!0,!oe(r.doc,i)&&null!=r.height){var l=r.height;r.height=null;var s=at(r)-l;s&&O(i,i.height+s)}Ye(n,"markerChanged",n,e)})},oa.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=f(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},oa.prototype.detachLine=function(e){if(this.lines.splice(f(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},ye(oa);var aa=function(e,t){this.markers=e,this.primary=t;for(var r=0;r<e.length;++r)e[r].parent=this};aa.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();Ye(this,"clear")}},aa.prototype.find=function(e,t){return this.primary.find(e,t)},ye(aa);var la=0,sa=function(e,t,r,n,i){if(!(this instanceof sa))return new sa(e,t,r,n,i);null==r&&(r=0),Hn.call(this,[new En([new Bo("",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=r;var o=D(r,0);this.sel=Rr(o),this.history=new en(null),this.id=++la,this.modeOption=t,this.lineSep=n,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),Yr(this,{from:o,to:o,text:e}),vn(this,Rr(o),vo)};sa.prototype=y(Hn.prototype,{constructor:sa,iter:function(e,t,r){r?this.iterN(e-this.first,t-e,r):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var r=0,n=0;n<t.length;++n)r+=t[n].height;this.insertInner(e-this.first,t,r)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=M(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Cr(function(e){var t=D(this.first,0),r=this.first+this.size-1;Mn(this,{from:t,to:D(r,T(this,r).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&sr(this.cm,0,0),vn(this,Rr(t),vo)}),replaceRange:function(e,t,r,n){Pn(this,e,t=j(this,t),r=r?j(this,r):t,n)},getRange:function(e,t,r){var n=L(this,j(this,e),j(this,t));return!1===r?n:n.join(r||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(_(this,e))return T(this,e)},getLineNumber:function(e){return N(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=T(this,e)),re(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return j(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Cr(function(e,t,r){mn(this,j(this,"number"==typeof e?D(e,t||0):e),null,r)}),setSelection:Cr(function(e,t,r){mn(this,j(this,e),j(this,t||e),r)}),extendSelection:Cr(function(e,t,r){fn(this,j(this,e),t&&j(this,t),r)}),extendSelections:Cr(function(e,t){hn(this,B(this,e),t)}),extendSelectionsBy:Cr(function(e,t){hn(this,B(this,g(this.sel.ranges,e)),t)}),setSelections:Cr(function(e,t,r){if(e.length){for(var n=[],i=0;i<e.length;i++)n[i]=new ra(j(this,e[i].anchor),j(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),vn(this,Br(n,t),r)}}),addSelection:Cr(function(e,t,r){var n=this.sel.ranges.slice(0);n.push(new ra(j(this,e),j(this,t||e))),vn(this,Br(n,n.length-1),r)}),getSelection:function(e){for(var t,r=this.sel.ranges,n=0;n<r.length;n++){var i=L(this,r[n].from(),r[n].to());t=t?t.concat(i):i}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],r=this.sel.ranges,n=0;n<r.length;n++){var i=L(this,r[n].from(),r[n].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[n]=i}return t},replaceSelection:function(e,t,r){for(var n=[],i=0;i<this.sel.ranges.length;i++)n[i]=e;this.replaceSelections(n,t,r||"+input")},replaceSelections:Cr(function(e,t,r){for(var n=[],i=this.sel,o=0;o<i.ranges.length;o++){var a=i.ranges[o];n[o]={from:a.from(),to:a.to(),text:this.splitLines(e[o]),origin:r}}for(var l=t&&"end"!=t&&function(e,t,r){for(var n=[],i=D(e.first,0),o=i,a=0;a<t.length;a++){var l=t[a],s=Kr(l.from,i,o),c=Kr(qr(l),i,o);if(i=l.to,o=c,"around"==r){var u=e.sel.ranges[a],d=W(u.head,u.anchor)<0;n[a]=new ra(d?c:s,d?s:c)}else n[a]=new ra(s,s)}return new ta(n,e.sel.primIndex)}(this,n,t),s=n.length-1;s>=0;s--)Mn(this,n[s]);l?gn(this,l):this.cm&&lr(this.cm)}),undo:Cr(function(){Nn(this,"undo")}),redo:Cr(function(){Nn(this,"redo")}),undoSelection:Cr(function(){Nn(this,"undo",!0)}),redoSelection:Cr(function(){Nn(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++r;return{undo:t,redo:r}},clearHistory:function(){this.history=new en(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:un(this.history.done),undone:un(this.history.undone)}},setHistory:function(e){var t=this.history=new en(this.history.maxGeneration);t.done=un(e.done.slice(0),null,!0),t.undone=un(e.undone.slice(0),null,!0)},setGutterMarker:Cr(function(e,t,r){return zn(this,e,"gutter",function(e){var n=e.gutterMarkers||(e.gutterMarkers={});return n[t]=r,!r&&x(n)&&(e.gutterMarkers=null),!0})}),clearGutter:Cr(function(e){var t=this;this.iter(function(r){r.gutterMarkers&&r.gutterMarkers[e]&&zn(t,r,"gutter",function(){return r.gutterMarkers[e]=null,x(r.gutterMarkers)&&(r.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!_(this,e))return null;if(t=e,!(e=T(this,e)))return null}else if(null==(t=N(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Cr(function(t,r,n){return zn(this,t,"gutter"==r?"gutter":"class",function(t){var i="text"==r?"textClass":"background"==r?"bgClass":"gutter"==r?"gutterClass":"wrapClass";if(t[i]){if(e(n).test(t[i]))return!1;t[i]+=" "+n}else t[i]=n;return!0})}),removeLineClass:Cr(function(t,r,n){return zn(this,t,"gutter"==r?"gutter":"class",function(t){var i="text"==r?"textClass":"background"==r?"bgClass":"gutter"==r?"gutterClass":"wrapClass",o=t[i];if(!o)return!1;if(null==n)t[i]=null;else{var a=o.match(e(n));if(!a)return!1;var l=a.index+a[0].length;t[i]=o.slice(0,a.index)+(a.index&&l!=o.length?" ":"")+o.slice(l)||null}return!0})}),addLineWidget:Cr(function(e,t,r){return function(e,t,r,n){var i=new na(e,r,n),o=e.cm;return o&&i.noHScroll&&(o.display.alignWidgets=!0),zn(e,t,"widget",function(t){var r=t.widgets||(t.widgets=[]);if(null==i.insertAt?r.push(i):r.splice(Math.min(r.length-1,Math.max(0,i.insertAt)),0,i),i.line=t,o&&!oe(e,t)){var n=le(t)<e.scrollTop;O(t,t.height+at(i)),n&&ar(o,i.height),o.curOp.forceUpdate=!0}return!0}),Ye(o,"lineWidgetAdded",o,i,"number"==typeof t?t:N(t)),i}(this,e,t,r)}),removeLineWidget:function(e){e.clear()},markText:function(e,t,r){return jn(this,j(this,e),j(this,t),r,r&&r.type||"range")},setBookmark:function(e,t){var r={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return e=j(this,e),jn(this,e,e,r,"bookmark")},findMarksAt:function(e){var t=[],r=T(this,(e=j(this,e)).line).markedSpans;if(r)for(var n=0;n<r.length;++n){var i=r[n];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=j(this,e),t=j(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var a=o.markedSpans;if(a)for(var l=0;l<a.length;l++){var s=a[l];null!=s.to&&i==e.line&&e.ch>=s.to||null==s.from&&i!=e.line||null!=s.from&&i==t.line&&s.from>=t.ch||r&&!r(s.marker)||n.push(s.marker.parent||s.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;n<r.length;++n)null!=r[n].from&&e.push(r[n].marker)}),e},posFromIndex:function(e){var t,r=this.first,n=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+n;if(o>e)return t=e,!0;e-=o,++r}),j(this,D(r,t))},indexFromPos:function(e){var t=(e=j(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var r=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+r}),t},copy:function(e){var t=new sa(M(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,r=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<r&&(r=e.to);var n=new sa(M(this,t,r),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r],i=n.find(),o=e.clipPos(i.from),a=e.clipPos(i.to);if(W(o,a)){var l=jn(e,o,a,n.primary,n.primary.type);n.markers.push(l),l.parent=n}}}(n,Bn(this)),n},unlinkDoc:function(e){if(e instanceof Si&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),Rn(Bn(this));break}}if(e.history==this.history){var r=[e.id];Zr(e,function(e){return r.push(e.id)},!0),e.history=new en(null),e.history.done=un(this.history.done,r),e.history.undone=un(this.history.undone,r)}},iterLinkedDocs:function(e){Zr(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):Ao(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:Cr(function(e){"rtl"!=e&&(e="ltr"),e!=this.direction&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&function(e){wr(e,function(){Jr(e),Sr(e)})}(this.cm))})}),sa.prototype.eachLine=sa.prototype.iter;for(var ca=0,ua=!1,da={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},fa=0;fa<10;fa++)da[fa+48]=da[fa+96]=String(fa);for(var ha=65;ha<=90;ha++)da[ha]=String.fromCharCode(ha);for(var pa=1;pa<=12;pa++)da[pa+111]=da[pa+63235]="F"+pa;var ma={};ma.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},ma.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},ma.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},ma.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},ma.default=ro?ma.macDefault:ma.pcDefault;var ga={selectAll:Tn,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),vo)},killLine:function(e){return ti(e,function(t){if(t.empty()){var r=T(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line<e.lastLine()?{from:t.head,to:D(t.head.line+1,0)}:{from:t.head,to:D(t.head.line,r)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return ti(e,function(t){return{from:D(t.from().line,0),to:j(e.doc,D(t.to().line+1,0))}})},delLineLeft:function(e){return ti(e,function(e){return{from:D(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return ti(e,function(t){var r=e.charCoords(t.head,"div").top+5;return{from:e.coordsChar({left:0,top:r},"div"),to:t.from()}})},delWrappedLineRight:function(e){return ti(e,function(t){var r=e.charCoords(t.head,"div").top+5,n=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},"div");return{from:t.from(),to:n}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(D(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(D(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return oi(e,t.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return li(e,t.head)},{origin:"+move",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return ai(e,t.head.line)},{origin:"+move",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},"div")},bo)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5;return e.coordsChar({left:0,top:r},"div")},bo)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,"div").top+5,n=e.coordsChar({left:0,top:r},"div");return n.ch<e.getLine(n.line).search(/\S/)?li(e,t.head):n},bo)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"char")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],r=e.listSelections(),n=e.options.tabSize,i=0;i<r.length;i++){var o=r[i].from(),a=d(e.getLine(o.line),o.ch,n);t.push(p(n-a%n))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(e){return wr(e,function(){for(var t=e.listSelections(),r=[],n=0;n<t.length;n++)if(t[n].empty()){var i=t[n].head,o=T(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new D(i.line,i.ch-1)),i.ch>0)i=new D(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),D(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var a=T(e.doc,i.line-1).text;a&&(i=new D(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),D(i.line-1,a.length-1),i,"+transpose"))}r.push(new ra(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return wr(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n<t.length;n++)e.indentLine(t[n].from().line,null,!0);lr(e)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}},va=new fo,ya=null,ba=function(e,t,r){this.time=e,this.pos=t,this.button=r};ba.prototype.compare=function(e,t,r){return this.time+400>e&&0==W(t,this.pos)&&r==this.button};var wa,xa,ka={toString:function(){return"CodeMirror.Init"}},Ca={},Sa={};Si.defaults=Ca,Si.optionHandlers=Sa;var Ta=[];Si.defineInitHook=function(e){return Ta.push(e)};var La=null,Ma=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new fo,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};Ma.prototype.init=function(e){function t(e){if(!me(i,e)){if(i.somethingSelected())Li({lineWise:!1,text:i.getSelections()}),"cut"==e.type&&i.replaceSelection("",null,"cut");else{if(!i.options.lineWiseCopyCut)return;var t=Ai(i);Li({lineWise:!0,text:t.text}),"cut"==e.type&&i.operation(function(){i.setSelections(t.ranges,0,vo),i.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var r=La.text.join("\n");if(e.clipboardData.setData("Text",r),e.clipboardData.getData("Text")==r)return void e.preventDefault()}var a=Pi(),l=a.firstChild;i.display.lineSpace.insertBefore(a,i.display.lineSpace.firstChild),l.value=La.text.join("\n");var s=document.activeElement;uo(l),setTimeout(function(){i.display.lineSpace.removeChild(a),s.focus(),s==o&&n.showPrimarySelection()},50)}}var r=this,n=this,i=n.cm,o=n.div=e.lineDiv;_i(o,i.options.spellcheck),Oo(o,"paste",function(e){me(i,e)||Oi(e,i)||Vi<=11&&setTimeout(xr(i,function(){return r.updateFromDOM()}),20)}),Oo(o,"compositionstart",function(e){r.composing={data:e.data,done:!1}}),Oo(o,"compositionupdate",function(e){r.composing||(r.composing={data:e.data,done:!1})}),Oo(o,"compositionend",function(e){r.composing&&(e.data!=r.composing.data&&r.readFromDOMSoon(),r.composing.done=!0)}),Oo(o,"touchstart",function(){return n.forceCompositionEnd()}),Oo(o,"input",function(){r.composing||r.readFromDOMSoon()}),Oo(o,"copy",t),Oo(o,"cut",t)},Ma.prototype.prepareSelection=function(){var e=Kt(this.cm,!1);return e.focus=this.cm.state.focused,e},Ma.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Ma.prototype.showPrimarySelection=function(){var e=window.getSelection(),t=this.cm,r=t.doc.sel.primary(),n=r.from(),i=r.to();if(t.display.viewTo==t.display.viewFrom||n.line>=t.display.viewTo||i.line<t.display.viewFrom)e.removeAllRanges();else{var o=Ei(t,e.anchorNode,e.anchorOffset),a=Ei(t,e.focusNode,e.focusOffset);if(!o||o.bad||!a||a.bad||0!=W(H(o,a),n)||0!=W(E(o,a),i)){var l=t.display.view,s=n.line>=t.display.viewFrom&&Fi(t,n)||{node:l[0].measure.map[2],offset:0},c=i.line<t.display.viewTo&&Fi(t,i);if(!c){var u=l[l.length-1].measure,d=u.maps?u.maps[u.maps.length-1]:u.map;c={node:d[d.length-1],offset:d[d.length-2]-d[d.length-3]}}if(s&&c){var f,h=e.rangeCount&&e.getRangeAt(0);try{f=ao(s.node,s.offset,c.offset,c.node)}catch(e){}f&&(!ji&&t.state.focused?(e.collapse(s.node,s.offset),f.collapsed||(e.removeAllRanges(),e.addRange(f))):(e.removeAllRanges(),e.addRange(f)),h&&null==e.anchorNode?e.addRange(h):ji&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Ma.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},Ma.prototype.showMultipleSelections=function(e){r(this.cm.display.cursorDiv,e.cursors),r(this.cm.display.selectionDiv,e.selection)},Ma.prototype.rememberSelection=function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Ma.prototype.selectionInEditor=function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return o(this.div,t)},Ma.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Ma.prototype.blur=function(){this.div.blur()},Ma.prototype.getField=function(){return this.div},Ma.prototype.supportsTouch=function(){return!0},Ma.prototype.receivedFocus=function(){function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))}var t=this;this.selectionInEditor()?this.pollSelection():wr(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,e)},Ma.prototype.selectionChanged=function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Ma.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;if(eo&&$i&&this.cm.options.gutters.length&&function(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}(e.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var r=Ei(t,e.anchorNode,e.anchorOffset),n=Ei(t,e.focusNode,e.focusOffset);r&&n&&wr(t,function(){vn(t.doc,Rr(r,n),vo),(r.bad||n.bad)&&(t.curOp.selectionChanged=!0)})}}},Ma.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e=this.cm,t=e.display,r=e.doc.sel.primary(),n=r.from(),i=r.to();if(0==n.ch&&n.line>e.firstLine()&&(n=D(n.line-1,T(e.doc,n.line-1).length)),i.ch==T(e.doc,i.line).text.length&&i.line<e.lastLine()&&(i=D(i.line+1,0)),n.line<t.viewFrom||i.line>t.viewTo-1)return!1;var o,a,l;n.line==t.viewFrom||0==(o=Ut(e,n.line))?(a=N(t.view[0].line),l=t.view[0].node):(a=N(t.view[o].line),l=t.view[o-1].node.nextSibling);var s,c,u=Ut(e,i.line);if(u==t.view.length-1?(s=t.viewTo-1,c=t.lineDiv.lastChild):(s=N(t.view[u+1].line)-1,c=t.view[u+1].node.previousSibling),!l)return!1;for(var d=e.doc.splitLines(function(e,t,r,n,i){function o(){c&&(s+=u,c=!1)}function a(e){e&&(o(),s+=e)}function l(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(null!=r)return void a(r||t.textContent.replace(/\u200b/g,""));var s,d=t.getAttribute("cm-marker");if(d){var f=e.findMarks(D(n,0),D(i+1,0),function(e){return function(t){return t.id==e}}(+d));return void(f.length&&(s=f[0].find(0))&&a(L(e.doc,s.from,s.to).join(u)))}if("false"==t.getAttribute("contenteditable"))return;var h=/^(pre|div|p)$/i.test(t.nodeName);h&&o();for(var p=0;p<t.childNodes.length;p++)l(t.childNodes[p]);h&&(c=!0)}else 3==t.nodeType&&a(t.nodeValue)}for(var s="",c=!1,u=e.doc.lineSeparator();l(t),t!=r;)t=t.nextSibling;return s}(e,l,c,a,s)),f=L(e.doc,D(a,0),D(s,T(e.doc,s).text.length));d.length>1&&f.length>1;)if(m(d)==m(f))d.pop(),f.pop(),s--;else{if(d[0]!=f[0])break;d.shift(),f.shift(),a++}for(var h=0,p=0,g=d[0],v=f[0],y=Math.min(g.length,v.length);h<y&&g.charCodeAt(h)==v.charCodeAt(h);)++h;for(var b=m(d),w=m(f),x=Math.min(b.length-(1==d.length?h:0),w.length-(1==f.length?h:0));p<x&&b.charCodeAt(b.length-p-1)==w.charCodeAt(w.length-p-1);)++p;if(1==d.length&&1==f.length&&a==n.line)for(;h&&h>n.ch&&b.charCodeAt(b.length-p-1)==w.charCodeAt(w.length-p-1);)h--,p++;d[d.length-1]=b.slice(0,b.length-p).replace(/^\u200b+/,""),d[0]=d[0].slice(h).replace(/\u200b+$/,"");var k=D(a,h),C=D(s,f.length?m(f).length-p:0);return d.length>1||d[0]||W(k,C)?(Pn(e.doc,d,k,C,"+input"),!0):void 0},Ma.prototype.ensurePolled=function(){this.forceCompositionEnd()},Ma.prototype.reset=function(){this.forceCompositionEnd()},Ma.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Ma.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Ma.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||wr(this.cm,function(){return Sr(e.cm)})},Ma.prototype.setUneditable=function(e){e.contentEditable="false"},Ma.prototype.onKeyPress=function(e){0!=e.charCode&&(e.preventDefault(),this.cm.isReadOnly()||xr(this.cm,Mi)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Ma.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Ma.prototype.onContextMenu=function(){},Ma.prototype.resetPosition=function(){},Ma.prototype.needsContentAttribute=!0;var Oa=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new fo,this.hasSelection=!1,this.composing=null};Oa.prototype.init=function(e){function t(e){if(!me(i,e)){if(i.somethingSelected())Li({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=Ai(i);Li({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,vo):(n.prevInput="",a.value=t.text.join("\n"),uo(a))}"cut"==e.type&&(i.state.cutIncoming=!0)}}var r=this,n=this,i=this.cm,o=this.wrapper=Pi(),a=this.textarea=o.firstChild;e.wrapper.insertBefore(o,e.wrapper.firstChild),Ji&&(a.style.width="0px"),Oo(a,"input",function(){Ui&&Vi>=9&&r.hasSelection&&(r.hasSelection=null),n.poll()}),Oo(a,"paste",function(e){me(i,e)||Oi(e,i)||(i.state.pasteIncoming=!0,n.fastPoll())}),Oo(a,"cut",t),Oo(a,"copy",t),Oo(e.scroller,"paste",function(t){lt(e,t)||me(i,t)||(i.state.pasteIncoming=!0,n.focus())}),Oo(e.lineSpace,"selectstart",function(t){lt(e,t)||be(t)}),Oo(a,"compositionstart",function(){var e=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}}),Oo(a,"compositionend",function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)})},Oa.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=Kt(e);if(e.options.moveInputWithCursor){var i=At(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+a.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+a.left-o.left))}return n},Oa.prototype.showSelection=function(e){var t=this.cm.display;r(t.cursorDiv,e.cursors),r(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Oa.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&uo(this.textarea),Ui&&Vi>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",Ui&&Vi>=9&&(this.hasSelection=null))}},Oa.prototype.getField=function(){return this.textarea},Oa.prototype.supportsTouch=function(){return!1},Oa.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!to||a()!=this.textarea))try{this.textarea.focus()}catch(e){}},Oa.prototype.blur=function(){this.textarea.blur()},Oa.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Oa.prototype.receivedFocus=function(){this.slowPoll()},Oa.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Oa.prototype.fastPoll=function(){function e(){r.poll()||t?(r.pollingFast=!1,r.slowPoll()):(t=!0,r.polling.set(60,e))}var t=!1,r=this;r.pollingFast=!0,r.polling.set(20,e)},Oa.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||_o(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(Ui&&Vi>=9&&this.hasSelection===i||ro&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n=""),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,l=Math.min(n.length,i.length);a<l&&n.charCodeAt(a)==i.charCodeAt(a);)++a;return wr(t,function(){Mi(t,i.slice(a),n.length-a,null,e.composing?"*compose":null),i.length>1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Oa.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Oa.prototype.onKeyPress=function(){Ui&&Vi>=9&&(this.hasSelection=null),this.fastPoll()},Oa.prototype.onContextMenu=function(e){function t(){if(null!=a.selectionStart){var e=i.somethingSelected(),t=""+(e?a.value:"");a.value="⇚",a.value=t,n.prevInput=e?"":"",a.selectionStart=1,a.selectionEnd=t.length,o.selForContextMenu=i.doc.sel}}function r(){if(n.contextMenuPending=!1,n.wrapper.style.cssText=u,a.style.cssText=c,Ui&&Vi<9&&o.scrollbars.setScrollTop(o.scroller.scrollTop=s),null!=a.selectionStart){(!Ui||Ui&&Vi<9)&&t();var e=0,r=function(){o.selForContextMenu==i.doc.sel&&0==a.selectionStart&&a.selectionEnd>0&&""==n.prevInput?xr(i,Tn)(i):e++<10?o.detectingSelectAll=setTimeout(r,500):(o.selForContextMenu=null,o.input.reset())};o.detectingSelectAll=setTimeout(r,200)}}var n=this,i=n.cm,o=i.display,a=n.textarea,l=qt(i,e),s=o.scroller.scrollTop;if(l&&!Xi){i.options.resetSelectionOnContextMenu&&-1==i.doc.sel.contains(l)&&xr(i,vn)(i.doc,Rr(l),vo);var c=a.style.cssText,u=n.wrapper.style.cssText;n.wrapper.style.cssText="position: absolute";var d=n.wrapper.getBoundingClientRect();a.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-d.top-5)+"px; left: "+(e.clientX-d.left-5)+"px;\n z-index: 1000; background: "+(Ui?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var f;if(Ki&&(f=window.scrollY),o.input.focus(),Ki&&window.scrollTo(null,f),o.input.reset(),i.somethingSelected()||(a.value=n.prevInput=" "),n.contextMenuPending=!0,o.selForContextMenu=i.doc.sel,clearTimeout(o.detectingSelectAll),Ui&&Vi>=9&&t(),so){ke(e);var h=function(){he(window,"mouseup",h),setTimeout(r,20)};Oo(window,"mouseup",h)}else setTimeout(r,50)}},Oa.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},Oa.prototype.setUneditable=function(){},Oa.prototype.needsContentAttribute=!1,function(e){function t(t,n,i,o){e.defaults[t]=n,i&&(r[t]=o?function(e,t,r){r!=ka&&i(e,t,r)}:i)}var r=e.optionHandlers;e.defineOption=t,e.Init=ka,t("value","",function(e,t){return e.setValue(t)},!0),t("mode",null,function(e,t){e.doc.modeOption=t,Gr(e)},!0),t("indentUnit",2,Gr,!0),t("indentWithTabs",!1),t("smartIndent",!0),t("tabSize",4,function(e){$r(e),Ct(e),Sr(e)},!0),t("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(D(n,o))}n++});for(var i=r.length-1;i>=0;i--)Pn(e.doc,t,r[i],D(r[i].line,r[i].ch+t.length))}}),t("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=ka&&e.refresh()}),t("specialCharPlaceholder",Ve,function(e){return e.refresh()},!0),t("electricChars",!0),t("inputStyle",to?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),t("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),t("rtlMoveVisually",!io),t("wholeLineUpdateBefore",!0),t("theme","default",function(e){wi(e),xi(e)},!0),t("keyMap","default",function(e,t,r){var n=ei(t),i=r!=ka&&ei(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),t("extraKeys",null),t("configureMouse",null),t("lineWrapping",!1,Ci,!0),t("gutters",[],function(e){Er(e.options),xi(e)},!0),t("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?jt(e.display)+"px":"0",e.refresh()},!0),t("coverGutterNextToScrollbar",!1,function(e){return mr(e)},!0),t("scrollbarStyle","native",function(e){vr(e),mr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),t("lineNumbers",!1,function(e){Er(e.options),xi(e)},!0),t("firstLineNumber",1,xi,!0),t("lineNumberFormatter",function(e){return e},xi,!0),t("showCursorWhenSelecting",!1,Vt,!0),t("resetSelectionOnContextMenu",!0),t("lineWiseCopyCut",!0),t("pasteLinesPerSelection",!0),t("readOnly",!1,function(e,t){"nocursor"==t&&(Jt(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),t("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),t("dragDrop",!0,ki),t("allowDropFileTypes",null),t("cursorBlinkRate",530),t("cursorScrollMargin",0),t("cursorHeight",1,Vt,!0),t("singleCursorHeightPerLine",!0,Vt,!0),t("workTime",100),t("workDelay",100),t("flattenSpans",!0,$r,!0),t("addModeClass",!1,$r,!0),t("pollInterval",100),t("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),t("historyEventDelay",1250),t("viewportMargin",10,function(e){return e.refresh()},!0),t("maxHighlightLength",1e4,$r,!0),t("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),t("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),t("autofocus",null),t("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0)}(Si),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&xr(this,t[e])(this,r,i),pe(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](ei(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;r<t.length;++r)if(t[r]==e||t[r].name==e)return t.splice(r,1),!0},addOverlay:kr(function(t,r){var n=t.token?t:e.getMode(this.options,t);if(n.startState)throw new Error("Overlays may not be stateful.");!function(e,t,r){for(var n=0,i=r(t);n<e.length&&r(e[n])<=i;)n++;e.splice(n,0,t)}(this.state.overlays,{mode:n,modeSpec:t,opaque:r&&r.opaque,priority:r&&r.priority||0},function(e){return e.priority}),this.state.modeGen++,Sr(this)}),removeOverlay:kr(function(e){for(var t=this.state.overlays,r=0;r<t.length;++r){var n=t[r].modeSpec;if(n==e||"string"==typeof e&&n.name==e)return t.splice(r,1),this.state.modeGen++,void Sr(this)}}),indentLine:kr(function(e,t,r){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),_(this.doc,e)&&Ti(this,e,t,r)}),indentSelection:kr(function(e){for(var t=this.doc.sel.ranges,r=-1,n=0;n<t.length;n++){var i=t[n];if(i.empty())i.head.line>r&&(Ti(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&lr(this));else{var o=i.from(),a=i.to(),l=Math.max(r,o.line);r=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;s<r;++s)Ti(this,s,e);var c=this.doc.sel.ranges;0==o.ch&&t.length==c.length&&c[n].from().ch>0&&pn(this.doc,n,new ra(o,c[n].to()),vo)}}}),getTokenAt:function(e,t){return Ie(this,e,t)},getLineTokens:function(e,t){return Ie(this,D(e),t,!0)},getTokenTypeAt:function(e){e=j(this.doc,e);var t,r=We(this,T(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var a=n+i>>1;if((a?r[2*a-1]:0)>=o)i=a;else{if(!(r[2*a+1]<o)){t=r[2*a+2];break}n=a+1}}var l=t?t.indexOf("overlay "):-1;return l<0?t:0==l?null:t.slice(0,l-1)},getModeAt:function(t){var r=this.doc.mode;return r.innerMode?e.innerMode(r,this.getTokenAt(t).state).mode:r},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var n=[];if(!r.hasOwnProperty(t))return n;var i=r[t],o=this.getModeAt(e);if("string"==typeof o[t])i[o[t]]&&n.push(i[o[t]]);else if(o[t])for(var a=0;a<o[t].length;a++){var l=i[o[t][a]];l&&n.push(l)}else o.helperType&&i[o.helperType]?n.push(i[o.helperType]):i[o.name]&&n.push(i[o.name]);for(var s=0;s<i._global.length;s++){var c=i._global[s];c.pred(o,this)&&-1==f(n,c.val)&&n.push(c.val)}return n},getStateAfter:function(e,t){var r=this.doc;return e=I(r,null==e?r.first+r.size-1:e),Fe(this,e+1,t).state},cursorCoords:function(e,t){var r,n=this.doc.sel.primary();return r=null==e?n.head:"object"==typeof e?j(this.doc,e):e?n.from():n.to(),At(this,r,t||"page")},charCoords:function(e,t){return Nt(this,j(this.doc,e),t||"page")},coordsChar:function(e,t){return e=Ot(this,e,t||"page"),Dt(this,e.left,e.top)},lineAtHeight:function(e,t){return e=Ot(this,{top:e,left:0},t||"page").top,A(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,r){var n,i=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,i=!0),n=T(this.doc,e)}else n=e;return Mt(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-le(n):0)},defaultTextHeight:function(){return Et(this.display)},defaultCharWidth:function(){return Ht(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o=this.display,a=(e=At(this,j(this.doc,e))).bottom,l=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),o.sizer.appendChild(t),"over"==n)a=e.top;else if("above"==n||"near"==n){var s=Math.max(o.wrapper.clientHeight,this.doc.height),c=Math.max(o.sizer.clientWidth,o.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>s)&&e.top>t.offsetHeight?a=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=s&&(a=e.bottom),l+t.offsetWidth>c&&(l=c-t.offsetWidth)}t.style.top=a+"px",t.style.left=t.style.right="","right"==i?(l=o.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?l=0:"middle"==i&&(l=(o.sizer.clientWidth-t.offsetWidth)/2),t.style.left=l+"px"),r&&function(e,t){var r=or(e,t);null!=r.scrollTop&&dr(e,r.scrollTop),null!=r.scrollLeft&&hr(e,r.scrollLeft)}(this,{left:l,top:a,right:l+t.offsetWidth,bottom:a+t.offsetHeight})},triggerOnKeyDown:kr(fi),triggerOnKeyPress:kr(pi),triggerOnKeyUp:hi,triggerOnMouseDown:kr(mi),execCommand:function(e){if(ga.hasOwnProperty(e))return ga[e].call(null,this)},triggerElectric:kr(function(e){Ni(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=j(this.doc,e),a=0;a<t&&!(o=Di(this.doc,o,i,r,n)).hitSide;++a);return o},moveH:kr(function(e,t){var r=this;this.extendSelectionsBy(function(n){return r.display.shift||r.doc.extend||n.empty()?Di(r.doc,n.head,e,t,r.options.rtlMoveVisually):e<0?n.from():n.to()},bo)}),deleteH:kr(function(e,t){var r=this.doc.sel,n=this.doc;r.somethingSelected()?n.replaceSelection("",null,"+delete"):ti(this,function(r){var i=Di(n,r.head,e,t,!1);return e<0?{from:i,to:r.head}:{from:r.head,to:i}})}),findPosV:function(e,t,r,n){var i=1,o=n;t<0&&(i=-1,t=-t);for(var a=j(this.doc,e),l=0;l<t;++l){var s=At(this,a,"div");if(null==o?o=s.left:s.left=o,(a=Wi(this,s,i,r)).hitSide)break}return a},moveV:kr(function(e,t){var r=this,n=this.doc,i=[],o=!this.display.shift&&!n.extend&&n.sel.somethingSelected();if(n.extendSelectionsBy(function(a){if(o)return e<0?a.from():a.to();var l=At(r,a.head,"div");null!=a.goalColumn&&(l.left=a.goalColumn),i.push(l.left);var s=Wi(r,l,e,t);return"page"==t&&a==n.sel.primary()&&ar(r,Nt(r,s,"div").top-l.top),s},bo),i.length)for(var a=0;a<n.sel.ranges.length;a++)n.sel.ranges[a].goalColumn=i[a]}),findWordAt:function(e){var t=T(this.doc,e.line).text,r=e.ch,n=e.ch;if(t){var i=this.getHelper(e,"wordChars");"before"!=e.sticky&&n!=t.length||!r?++n:--r;for(var o=t.charAt(r),a=w(o,i)?function(e){return w(e,i)}:/\s/.test(o)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!w(e)};r>0&&a(t.charAt(r-1));)--r;for(;n<t.length&&a(t.charAt(n));)++n}return new ra(D(e.line,r),D(e.line,n))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?l(this.display.cursorDiv,"CodeMirror-overwrite"):co(this.display.cursorDiv,"CodeMirror-overwrite"),pe(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==a()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:kr(function(e,t){sr(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-dt(this)-this.display.barHeight,width:e.scrollWidth-dt(this)-this.display.barWidth,clientHeight:ht(this),clientWidth:ft(this)}},scrollIntoView:kr(function(e,t){null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:D(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?function(e,t){cr(e),e.curOp.scrollToPos=t}(this,e):ur(this,e.from,e.to,e.margin)}),setSize:kr(function(e,t){var r=this,n=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&kt(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Tr(r,i,"widget");break}++i}),this.curOp.forceUpdate=!0,pe(this,"refresh",this)}),operation:function(e){return wr(this,e)},startOperation:function(){return yr(this)},endOperation:function(){return br(this)},refresh:kr(function(){var e=this.display.cachedTextHeight;Sr(this),this.curOp.forceUpdate=!0,Ct(this),sr(this,this.doc.scrollLeft,this.doc.scrollTop),Wr(this),(null==e||Math.abs(e-Et(this.display))>.5)&&Rt(this),pe(this,"refresh",this)}),swapDoc:kr(function(e){var t=this.doc;return t.cm=null,Qr(this,e),Ct(this),this.display.input.reset(),sr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,Ye(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},ye(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Si);var Na="iter insert remove copy getEditor constructor".split(" ");for(var Aa in sa.prototype)sa.prototype.hasOwnProperty(Aa)&&f(Na,Aa)<0&&(Si.prototype[Aa]=function(e){return function(){return e.apply(this.doc,arguments)}}(sa.prototype[Aa]));return ye(sa),Si.inputStyles={textarea:Oa,contenteditable:Ma},Si.defineMode=function(e){Si.defaults.mode||"null"==e||(Si.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Wo[e]=t}.apply(this,arguments)},Si.defineMIME=function(e,t){Fo[e]=t},Si.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Si.defineMIME("text/plain","null"),Si.defineExtension=function(e,t){Si.prototype[e]=t},Si.defineDocExtension=function(e,t){sa.prototype[e]=t},Si.fromTextArea=function(e,t){function r(){e.value=s.getValue()}if(t=t?u(t):{},t.value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=a();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}var i;if(e.form&&(Oo(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var l=o.submit=function(){r(),o.submit=i,o.submit(),o.submit=l}}catch(e){}}t.finishInit=function(t){t.save=r,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,r(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display="",e.form&&(he(e.form,"submit",r),"function"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display="none";var s=Si(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=he,e.on=Oo,e.wheelEventPixels=Ir,e.Doc=sa,e.splitLines=Ao,e.countColumn=d,e.findColumn=h,e.isWordChar=b,e.Pass=go,e.signal=pe,e.Line=Bo,e.changeEnd=qr,e.scrollbarModel=Yo,e.Pos=D,e.cmpPos=W,e.modes=Wo,e.mimeModes=Fo,e.resolveMode=Me,e.getMode=Oe,e.modeExtensions=zo,e.extendMode=Ne,e.copyState=Ae,e.startState=Pe,e.innerMode=_e,e.commands=ga,e.keyMap=ma,e.keyName=Jn,e.isModifierKey=Zn,e.lookupKey=Yn,e.normalizeKeyMap=Xn,e.StringStream=Eo,e.SharedTextMarker=aa,e.TextMarker=oa,e.LineWidget=na,e.e_preventDefault=be,e.e_stopPropagation=we,e.e_stop=ke,e.addClass=l,e.contains=o,e.rmClass=co,e.keyNames=da}(Si),Si.version="5.34.0",Si})},{}],15:[function(e,r,n){!function(i){"object"==typeof n&&"object"==typeof r?i(e("../../lib/codemirror")):"function"==typeof t&&t.amd?t(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";function t(e){for(var t={},r=0;r<e.length;++r)t[e[r].toLowerCase()]=!0;return t}function r(e,t){for(var r,n=!1;null!=(r=e.next());){if(n&&"/"==r){t.tokenize=null;break}n="*"==r}return["comment","comment"]}e.defineMode("css",function(t,r){function n(e,t){return h=t,e}function i(e){return function(t,r){for(var i,o=!1;null!=(i=t.next());){if(i==e&&!o){")"==e&&t.backUp(1);break}o=!o&&"\\"==i}return(i==e||!o&&")"!=e)&&(r.tokenize=null),n("string","string")}}function o(e,t){return e.next(),e.match(/\s*[\"\')]/,!1)?t.tokenize=null:t.tokenize=i(")"),n(null,"(")}function a(e,t,r){this.type=e,this.indent=t,this.prev=r}function l(e,t,r,n){return e.context=new a(r,t.indentation()+(!1===n?0:m),e.context),r}function s(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function c(e,t,r){return A[r.context.type](e,t,r)}function u(e,t,r,n){for(var i=n||1;i>0;i--)r.context=r.context.prev;return c(e,t,r)}function d(e){var t=e.current().toLowerCase();p=L.hasOwnProperty(t)?"atom":T.hasOwnProperty(t)?"keyword":"variable"}var f=r.inline;r.propertyKeywords||(r=e.resolveMode("text/css"));var h,p,m=t.indentUnit,g=r.tokenHooks,v=r.documentTypes||{},y=r.mediaTypes||{},b=r.mediaFeatures||{},w=r.mediaValueKeywords||{},x=r.propertyKeywords||{},k=r.nonStandardPropertyKeywords||{},C=r.fontProperties||{},S=r.counterDescriptors||{},T=r.colorKeywords||{},L=r.valueKeywords||{},M=r.allowNested,O=r.lineComment,N=!0===r.supportsAtComponent,A={};return A.top=function(e,t,r){if("{"==e)return l(r,t,"block");if("}"==e&&r.context.prev)return s(r);if(N&&/@component/i.test(e))return l(r,t,"atComponentBlock");if(/^@(-moz-)?document$/i.test(e))return l(r,t,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return l(r,t,"atBlock");if(/^@(font-face|counter-style)/i.test(e))return r.stateArg=e,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return"keyframes";if(e&&"@"==e.charAt(0))return l(r,t,"at");if("hash"==e)p="builtin";else if("word"==e)p="tag";else{if("variable-definition"==e)return"maybeprop";if("interpolation"==e)return l(r,t,"interpolation");if(":"==e)return"pseudo";if(M&&"("==e)return l(r,t,"parens")}return r.context.type},A.block=function(e,t,r){if("word"==e){var n=t.current().toLowerCase();return x.hasOwnProperty(n)?(p="property","maybeprop"):k.hasOwnProperty(n)?(p="string-2","maybeprop"):M?(p=t.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(p+=" error","maybeprop")}return"meta"==e?"block":M||"hash"!=e&&"qualifier"!=e?A.top(e,t,r):(p="error","block")},A.maybeprop=function(e,t,r){return":"==e?l(r,t,"prop"):c(e,t,r)},A.prop=function(e,t,r){if(";"==e)return s(r);if("{"==e&&M)return l(r,t,"propBlock");if("}"==e||"{"==e)return u(e,t,r);if("("==e)return l(r,t,"parens");if("hash"!=e||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())){if("word"==e)d(t);else if("interpolation"==e)return l(r,t,"interpolation")}else p+=" error";return"prop"},A.propBlock=function(e,t,r){return"}"==e?s(r):"word"==e?(p="property","maybeprop"):r.context.type},A.parens=function(e,t,r){return"{"==e||"}"==e?u(e,t,r):")"==e?s(r):"("==e?l(r,t,"parens"):"interpolation"==e?l(r,t,"interpolation"):("word"==e&&d(t),"parens")},A.pseudo=function(e,t,r){return"meta"==e?"pseudo":"word"==e?(p="variable-3",r.context.type):c(e,t,r)},A.documentTypes=function(e,t,r){return"word"==e&&v.hasOwnProperty(t.current())?(p="tag",r.context.type):A.atBlock(e,t,r)},A.atBlock=function(e,t,r){if("("==e)return l(r,t,"atBlock_parens");if("}"==e||";"==e)return u(e,t,r);if("{"==e)return s(r)&&l(r,t,M?"block":"top");if("interpolation"==e)return l(r,t,"interpolation");if("word"==e){var n=t.current().toLowerCase();p="only"==n||"not"==n||"and"==n||"or"==n?"keyword":y.hasOwnProperty(n)?"attribute":b.hasOwnProperty(n)?"property":w.hasOwnProperty(n)?"keyword":x.hasOwnProperty(n)?"property":k.hasOwnProperty(n)?"string-2":L.hasOwnProperty(n)?"atom":T.hasOwnProperty(n)?"keyword":"error"}return r.context.type},A.atComponentBlock=function(e,t,r){return"}"==e?u(e,t,r):"{"==e?s(r)&&l(r,t,M?"block":"top",!1):("word"==e&&(p="error"),r.context.type)},A.atBlock_parens=function(e,t,r){return")"==e?s(r):"{"==e||"}"==e?u(e,t,r,2):A.atBlock(e,t,r)},A.restricted_atBlock_before=function(e,t,r){return"{"==e?l(r,t,"restricted_atBlock"):"word"==e&&"@counter-style"==r.stateArg?(p="variable","restricted_atBlock_before"):c(e,t,r)},A.restricted_atBlock=function(e,t,r){return"}"==e?(r.stateArg=null,s(r)):"word"==e?(p="@font-face"==r.stateArg&&!C.hasOwnProperty(t.current().toLowerCase())||"@counter-style"==r.stateArg&&!S.hasOwnProperty(t.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},A.keyframes=function(e,t,r){return"word"==e?(p="variable","keyframes"):"{"==e?l(r,t,"top"):c(e,t,r)},A.at=function(e,t,r){return";"==e?s(r):"{"==e||"}"==e?u(e,t,r):("word"==e?p="tag":"hash"==e&&(p="builtin"),"at")},A.interpolation=function(e,t,r){return"}"==e?s(r):"{"==e||";"==e?u(e,t,r):("word"==e?p="variable":"variable"!=e&&"("!=e&&")"!=e&&(p="error"),"interpolation")},{startState:function(e){return{tokenize:null,state:f?"block":"top",stateArg:null,context:new a(f?"block":"top",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var r=(t.tokenize||function(e,t){var r=e.next();if(g[r]){var a=g[r](e,t);if(!1!==a)return a}return"@"==r?(e.eatWhile(/[\w\\\-]/),n("def",e.current())):"="==r||("~"==r||"|"==r)&&e.eat("=")?n(null,"compare"):'"'==r||"'"==r?(t.tokenize=i(r),t.tokenize(e,t)):"#"==r?(e.eatWhile(/[\w\\\-]/),n("atom","hash")):"!"==r?(e.match(/^\s*\w*/),n("keyword","important")):/\d/.test(r)||"."==r&&e.eat(/\d/)?(e.eatWhile(/[\w.%]/),n("number","unit")):"-"!==r?/[,+>*\/]/.test(r)?n(null,"select-op"):"."==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?n("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(r)?n(null,r):("u"==r||"U"==r)&&e.match(/rl(-prefix)?\(/i)||("d"==r||"D"==r)&&e.match("omain(",!0,!0)||("r"==r||"R"==r)&&e.match("egexp(",!0,!0)?(e.backUp(1),t.tokenize=o,n("property","word")):/[\w\\\-]/.test(r)?(e.eatWhile(/[\w\\\-]/),n("property","word")):n(null,null):/[\d.]/.test(e.peek())?(e.eatWhile(/[\w.%]/),n("number","unit")):e.match(/^-[\w\\\-]+/)?(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?n("variable-2","variable-definition"):n("variable-2","variable")):e.match(/^\w+-/)?n("meta","meta"):void 0})(e,t);return r&&"object"==typeof r&&(h=r[1],r=r[0]),p=r,"comment"!=h&&(t.state=A[t.state](h,e,t)),p},indent:function(e,t){var r=e.context,n=t&&t.charAt(0),i=r.indent;return"prop"!=r.type||"}"!=n&&")"!=n||(r=r.prev),r.prev&&("}"!=n||"block"!=r.type&&"top"!=r.type&&"interpolation"!=r.type&&"restricted_atBlock"!=r.type?(")"!=n||"parens"!=r.type&&"atBlock_parens"!=r.type)&&("{"!=n||"at"!=r.type&&"atBlock"!=r.type)||(i=Math.max(0,r.indent-m)):i=(r=r.prev).indent),i},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:O,fold:"brace"}});var n=["domain","regexp","url","url-prefix"],i=t(n),o=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],a=t(o),l=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],s=t(l),c=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],u=t(c),d=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],f=t(d),h=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],p=t(h),m=t(["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]),g=t(["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"]),v=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],y=t(v),b=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],w=t(b),x=n.concat(o).concat(l).concat(c).concat(d).concat(h).concat(v).concat(b);e.registerHelper("hintWords","css",x),e.defineMIME("text/css",{documentTypes:i,mediaTypes:a,mediaFeatures:s,mediaValueKeywords:u,propertyKeywords:f,nonStandardPropertyKeywords:p,fontProperties:m,counterDescriptors:g,colorKeywords:y,valueKeywords:w,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=r,r(e,t))}},name:"css"}),e.defineMIME("text/x-scss",{mediaTypes:a,mediaFeatures:s,mediaValueKeywords:u,propertyKeywords:f,nonStandardPropertyKeywords:p,colorKeywords:y,valueKeywords:w,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=r,r(e,t)):["operator","operator"]},":":function(e){return!!e.match(/\s*\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\w-]+/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(e){return!!e.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),e.defineMIME("text/x-less",{mediaTypes:a,mediaFeatures:s,mediaValueKeywords:u,propertyKeywords:f,nonStandardPropertyKeywords:p,colorKeywords:y,valueKeywords:w,fontProperties:m,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=r,r(e,t)):["operator","operator"]},"@":function(e){return e.eat("{")?[null,"interpolation"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),e.defineMIME("text/x-gss",{documentTypes:i,mediaTypes:a,mediaFeatures:s,propertyKeywords:f,nonStandardPropertyKeywords:p,fontProperties:m,counterDescriptors:g,colorKeywords:y,valueKeywords:w,supportsAtComponent:!0,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=r,r(e,t))}},name:"css",helperType:"gss"})})},{"../../lib/codemirror":14}],16:[function(e,r,n){!function(i){"object"==typeof n&&"object"==typeof r?i(e("../../lib/codemirror"),e("../xml/xml"),e("../javascript/javascript"),e("../css/css")):"function"==typeof t&&t.amd?t(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],i):i(CodeMirror)}(function(e){"use strict";function t(e,t){var r=e.match(function(e){var t=o[e];return t||(o[e]=new RegExp("\\s+"+e+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"))}(t));return r?/^\s*(.*?)\s*$/.exec(r[2])[1]:""}function r(e,t){return new RegExp((t?"^":"")+"</s*"+e+"s*>","i")}function n(e,t){for(var r in e)for(var n=t[r]||(t[r]=[]),i=e[r],o=i.length-1;o>=0;o--)n.unshift(i[o])}var i={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]},o={};e.defineMode("htmlmixed",function(o,a){function l(n,i){var a,u=s.token(n,i.htmlState),d=/\btag\b/.test(u);if(d&&!/[<>\s\/]/.test(n.current())&&(a=i.htmlState.tagName&&i.htmlState.tagName.toLowerCase())&&c.hasOwnProperty(a))i.inTag=a+" ";else if(i.inTag&&d&&/>$/.test(n.current())){var f=/^([\S]+) (.*)/.exec(i.inTag);i.inTag=null;var h=">"==n.current()&&function(e,r){for(var n=0;n<e.length;n++){var i=e[n];if(!i[0]||i[1].test(t(r,i[0])))return i[2]}}(c[f[1]],f[2]),p=e.getMode(o,h),m=r(f[1],!0),g=r(f[1],!1);i.token=function(e,t){return e.match(m,!1)?(t.token=l,t.localState=t.localMode=null,null):function(e,t,r){var n=e.current(),i=n.search(t);return i>-1?e.backUp(n.length-i):n.match(/<\/?$/)&&(e.backUp(n.length),e.match(t,!1)||e.match(n)),r}(e,g,t.localMode.token(e,t.localState))},i.localMode=p,i.localState=e.startState(p,s.indent(i.htmlState,""))}else i.inTag&&(i.inTag+=n.current(),n.eol()&&(i.inTag+=" "));return u}var s=e.getMode(o,{name:"xml",htmlMode:!0,multilineTagIndentFactor:a.multilineTagIndentFactor,multilineTagIndentPastTag:a.multilineTagIndentPastTag}),c={},u=a&&a.tags,d=a&&a.scriptTypes;if(n(i,c),u&&n(u,c),d)for(var f=d.length-1;f>=0;f--)c.script.unshift(["type",d[f].matches,d[f].mode]);return{startState:function(){return{token:l,inTag:null,localMode:null,localState:null,htmlState:e.startState(s)}},copyState:function(t){var r;return t.localState&&(r=e.copyState(t.localMode,t.localState)),{token:t.token,inTag:t.inTag,localMode:t.localMode,localState:r,htmlState:e.copyState(s,t.htmlState)}},token:function(e,t){return t.token(e,t)},indent:function(t,r,n){return!t.localMode||/^\s*<\//.test(r)?s.indent(t.htmlState,r):t.localMode.indent?t.localMode.indent(t.localState,r,n):e.Pass},innerMode:function(e){return{state:e.localState||e.htmlState,mode:e.localMode||s}}}},"xml","javascript","css"),e.defineMIME("text/html","htmlmixed")})},{"../../lib/codemirror":14,"../css/css":15,"../javascript/javascript":17,"../xml/xml":18}],17:[function(e,r,n){!function(i){"object"==typeof n&&"object"==typeof r?i(e("../../lib/codemirror")):"function"==typeof t&&t.amd?t(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";e.defineMode("javascript",function(t,r){function n(e,t,r){return Me=e,Oe=r,t}function i(e,t){var r=e.next();if('"'==r||"'"==r)return t.tokenize=function(e){return function(t,r){var o,a=!1;if(_e&&"@"==t.peek()&&t.match(Ee))return r.tokenize=i,n("jsonld-keyword","meta");for(;null!=(o=t.next())&&(o!=e||a);)a=!a&&"\\"==o;return a||(r.tokenize=i),n("string","string")}}(r),t.tokenize(e,t);if("."==r&&e.match(/^\d+(?:[eE][+\-]?\d+)?/))return n("number","number");if("."==r&&e.match(".."))return n("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(r))return n(r);if("="==r&&e.eat(">"))return n("=>","operator");if("0"==r&&e.eat(/x/i))return e.eatWhile(/[\da-f]/i),n("number","number");if("0"==r&&e.eat(/o/i))return e.eatWhile(/[0-7]/i),n("number","number");if("0"==r&&e.eat(/b/i))return e.eatWhile(/[01]/i),n("number","number");if(/\d/.test(r))return e.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),n("number","number");if("/"==r)return e.eat("*")?(t.tokenize=o,o(e,t)):e.eat("/")?(e.skipToEnd(),n("comment","comment")):Le(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/),n("regexp","string-2")):(e.eat("="),n("operator","operator",e.current()));if("`"==r)return t.tokenize=a,a(e,t);if("#"==r)return e.skipToEnd(),n("error","error");if(ze.test(r))return">"==r&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=r&&"="!=r||e.eat("="):/[<>*+\-]/.test(r)&&(e.eat(r),">"==r&&e.eat(r))),n("operator","operator",e.current());if(We.test(r)){e.eatWhile(We);var l=e.current();if("."!=t.lastType){if(Fe.propertyIsEnumerable(l)){var s=Fe[l];return n(s.type,s.style,l)}if("async"==l&&e.match(/^(\s|\/\*.*?\*\/)*[\(\w]/,!1))return n("async","keyword",l)}return n("variable","variable",l)}}function o(e,t){for(var r,o=!1;r=e.next();){if("/"==r&&o){t.tokenize=i;break}o="*"==r}return n("comment","comment")}function a(e,t){for(var r,o=!1;null!=(r=e.next());){if(!o&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=i;break}o=!o&&"\\"==r}return n("quasi","string-2",e.current())}function l(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf("=>",e.start);if(!(r<0)){if(De){var n=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var i=0,o=!1,a=r-1;a>=0;--a){var l=e.string.charAt(a),s=He.indexOf(l);if(s>=0&&s<3){if(!i){++a;break}if(0==--i){"("==l&&(o=!0);break}}else if(s>=3&&s<6)++i;else if(We.test(l))o=!0;else{if(/["'\/]/.test(l))return;if(o&&!i){++a;break}}}o&&!i&&(t.fatArrowAt=a)}}function s(e,t,r,n,i,o){this.indented=e,this.column=t,this.type=r,this.prev=i,this.info=o,null!=n&&(this.align=n)}function c(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}function u(){for(var e=arguments.length-1;e>=0;e--)je.cc.push(arguments[e])}function d(){return u.apply(null,arguments),!0}function f(e){function t(t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}var n=je.state;if(je.marked="def",n.context){if(t(n.localVars))return;n.localVars={name:e,next:n.localVars}}else{if(t(n.globalVars))return;r.globalVars&&(n.globalVars={name:e,next:n.globalVars})}}function h(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function p(){je.state.context={prev:je.state.context,vars:je.state.localVars},je.state.localVars=Be}function m(){je.state.localVars=je.state.context.vars,je.state.context=je.state.context.prev}function g(e,t){var r=function(){var r=je.state,n=r.indented;if("stat"==r.lexical.type)n=r.lexical.indented;else for(var i=r.lexical;i&&")"==i.type&&i.align;i=i.prev)n=i.indented;r.lexical=new s(n,je.stream.column(),e,null,r.lexical,t)};return r.lex=!0,r}function v(){var e=je.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function y(e){function t(r){return r==e?d():";"==e?u():d(t)}return t}function b(e,t){return"var"==e?d(g("vardef",t.length),Q,y(";"),v):"keyword a"==e?d(g("form"),k,b,v):"keyword b"==e?d(g("form"),b,v):"keyword d"==e?je.stream.match(/^\s*$/,!1)?d():d(g("stat"),S,y(";"),v):"debugger"==e?d(y(";")):"{"==e?d(g("}"),j,v):";"==e?d():"if"==e?("else"==je.state.lexical.info&&je.state.cc[je.state.cc.length-1]==v&&je.state.cc.pop()(),d(g("form"),k,b,v,ne)):"function"==e?d(ce):"for"==e?d(g("form"),ie,b,v):"class"==e||De&&"interface"==t?(je.marked="keyword",d(g("form"),fe,v)):"variable"==e?De&&"declare"==t?(je.marked="keyword",d(b)):De&&("module"==t||"enum"==t||"type"==t)&&je.stream.match(/^\s*\w/,!1)?(je.marked="keyword","enum"==t?d(Se):"type"==t?d(U,y("operator"),U,y(";")):d(g("form"),J,y("{"),g("}"),j,v,v)):De&&"namespace"==t?(je.marked="keyword",d(g("form"),w,j,v)):d(g("stat"),D):"switch"==e?d(g("form"),k,y("{"),g("}","switch"),j,v,v):"case"==e?d(w,y(":")):"default"==e?d(y(":")):"catch"==e?d(g("form"),p,y("("),ue,y(")"),b,v,m):"export"==e?d(g("stat"),ge,v):"import"==e?d(g("stat"),ye,v):"async"==e?d(b):"@"==t?d(w,b):u(g("stat"),w,y(";"),v)}function w(e,t){return C(e,t,!1)}function x(e,t){return C(e,t,!0)}function k(e){return"("!=e?u():d(g(")"),w,y(")"),v)}function C(e,t,r){if(je.state.fatArrowAt==je.stream.start){var n=r?A:N;if("("==e)return d(p,g(")"),H(ue,")"),v,y("=>"),n,m);if("variable"==e)return u(p,J,y("=>"),n,m)}var i=r?L:T;return Ie.hasOwnProperty(e)?d(i):"function"==e?d(ce,i):"class"==e||De&&"interface"==t?(je.marked="keyword",d(g("form"),de,v)):"keyword c"==e||"async"==e?d(r?x:w):"("==e?d(g(")"),S,y(")"),v,i):"operator"==e||"spread"==e?d(r?x:w):"["==e?d(g("]"),Ce,v,i):"{"==e?I(F,"}",null,i):"quasi"==e?u(M,i):"new"==e?d(function(e){return function(t){return"."==t?d(e?P:_):"variable"==t&&De?d(X,e?L:T):u(e?x:w)}}(r)):d()}function S(e){return e.match(/[;\}\)\],]/)?u():u(w)}function T(e,t){return","==e?d(w):L(e,t,!1)}function L(e,t,r){var n=0==r?T:L,i=0==r?w:x;return"=>"==e?d(p,r?A:N,m):"operator"==e?/\+\+|--/.test(t)||De&&"!"==t?d(n):De&&"<"==t&&je.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?d(g(">"),H(U,">"),v,n):"?"==t?d(w,y(":"),i):d(i):"quasi"==e?u(M,n):";"!=e?"("==e?I(x,")","call",n):"."==e?d(W,n):"["==e?d(g("]"),S,y("]"),v,n):De&&"as"==t?(je.marked="keyword",d(U,n)):"regexp"==e?(je.state.lastType=je.marked="operator",je.stream.backUp(je.stream.pos-je.stream.start-1),d(i)):void 0:void 0}function M(e,t){return"quasi"!=e?u():"${"!=t.slice(t.length-2)?d(M):d(w,O)}function O(e){if("}"==e)return je.marked="string-2",je.state.tokenize=a,d(M)}function N(e){return l(je.stream,je.state),u("{"==e?b:w)}function A(e){return l(je.stream,je.state),u("{"==e?b:x)}function _(e,t){if("target"==t)return je.marked="keyword",d(T)}function P(e,t){if("target"==t)return je.marked="keyword",d(L)}function D(e){return":"==e?d(v,b):u(T,y(";"),v)}function W(e){if("variable"==e)return je.marked="property",d()}function F(e,t){if("async"==e)return je.marked="property",d(F);if("variable"==e||"keyword"==je.style){if(je.marked="property","get"==t||"set"==t)return d(z);var r;return De&&je.state.fatArrowAt==je.stream.start&&(r=je.stream.match(/^\s*:\s*/,!1))&&(je.state.fatArrowAt=je.stream.pos+r[0].length),d(E)}return"number"==e||"string"==e?(je.marked=_e?"property":je.style+" property",d(E)):"jsonld-keyword"==e?d(E):De&&h(t)?(je.marked="keyword",d(F)):"["==e?d(w,B,y("]"),E):"spread"==e?d(x,E):"*"==t?(je.marked="keyword",d(F)):":"==e?u(E):void 0}function z(e){return"variable"!=e?u(E):(je.marked="property",d(ce))}function E(e){return":"==e?d(x):"("==e?u(ce):void 0}function H(e,t,r){function n(i,o){if(r?r.indexOf(i)>-1:","==i){var a=je.state.lexical;return"call"==a.info&&(a.pos=(a.pos||0)+1),d(function(r,n){return r==t||n==t?u():u(e)},n)}return i==t||o==t?d():d(y(t))}return function(r,i){return r==t||i==t?d():u(e,n)}}function I(e,t,r){for(var n=3;n<arguments.length;n++)je.cc.push(arguments[n]);return d(g(t,r),H(e,t),v)}function j(e){return"}"==e?d():u(b,j)}function B(e,t){if(De){if(":"==e)return d(U);if("?"==t)return d(B)}}function R(e){if(De&&":"==e)return je.stream.match(/^\s*\w+\s+is\b/,!1)?d(w,q,U):d(U)}function q(e,t){if("is"==t)return je.marked="keyword",d()}function U(e,t){return"variable"==e||"void"==t?"keyof"==t?(je.marked="keyword",d(U)):(je.marked="type",d($)):"string"==e||"number"==e||"atom"==e?d($):"["==e?d(g("]"),H(U,"]",","),v,$):"{"==e?d(g("}"),H(K,"}",",;"),v,$):"("==e?d(H(G,")"),V):void 0}function V(e){if("=>"==e)return d(U)}function K(e,t){return"variable"==e||"keyword"==je.style?(je.marked="property",d(K)):"?"==t?d(K):":"==e?d(U):"["==e?d(w,B,y("]"),K):void 0}function G(e){return"variable"==e?d(G):":"==e?d(U):void 0}function $(e,t){return"<"==t?d(g(">"),H(U,">"),v,$):"|"==t||"."==e?d(U):"["==e?d(y("]"),$):"extends"==t||"implements"==t?(je.marked="keyword",d(U)):void 0}function X(e,t){if("<"==t)return d(g(">"),H(U,">"),v,$)}function Y(){return u(U,Z)}function Z(e,t){if("="==t)return d(U)}function Q(e,t){return"enum"==t?(je.marked="keyword",d(Se)):u(J,B,te,re)}function J(e,t){return De&&h(t)?(je.marked="keyword",d(J)):"variable"==e?(f(t),d()):"spread"==e?d(J):"["==e?I(J,"]"):"{"==e?I(ee,"}"):void 0}function ee(e,t){return"variable"!=e||je.stream.match(/^\s*:/,!1)?("variable"==e&&(je.marked="property"),"spread"==e?d(J):"}"==e?u():d(y(":"),J,te)):(f(t),d(te))}function te(e,t){if("="==t)return d(x)}function re(e){if(","==e)return d(Q)}function ne(e,t){if("keyword b"==e&&"else"==t)return d(g("form","else"),b,v)}function ie(e){if("("==e)return d(g(")"),oe,y(")"),v)}function oe(e){return"var"==e?d(Q,y(";"),le):";"==e?d(le):"variable"==e?d(ae):u(w,y(";"),le)}function ae(e,t){return"in"==t||"of"==t?(je.marked="keyword",d(w)):d(T,le)}function le(e,t){return";"==e?d(se):"in"==t||"of"==t?(je.marked="keyword",d(w)):u(w,y(";"),se)}function se(e){")"!=e&&d(w)}function ce(e,t){return"*"==t?(je.marked="keyword",d(ce)):"variable"==e?(f(t),d(ce)):"("==e?d(p,g(")"),H(ue,")"),v,R,b,m):De&&"<"==t?d(g(">"),H(Y,">"),v,ce):void 0}function ue(e,t){return"@"==t&&d(w,ue),"spread"==e?d(ue):De&&h(t)?(je.marked="keyword",d(ue)):u(J,B,te)}function de(e,t){return"variable"==e?fe(e,t):he(e,t)}function fe(e,t){if("variable"==e)return f(t),d(he)}function he(e,t){return"<"==t?d(g(">"),H(Y,">"),v,he):"extends"==t||"implements"==t||De&&","==e?("implements"==t&&(je.marked="keyword"),d(De?U:w,he)):"{"==e?d(g("}"),pe,v):void 0}function pe(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||De&&h(t))&&je.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(je.marked="keyword",d(pe)):"variable"==e||"keyword"==je.style?(je.marked="property",d(De?me:ce,pe)):"["==e?d(w,B,y("]"),De?me:ce,pe):"*"==t?(je.marked="keyword",d(pe)):";"==e?d(pe):"}"==e?d():"@"==t?d(w,pe):void 0}function me(e,t){return"?"==t?d(me):":"==e?d(U,te):"="==t?d(x):u(ce)}function ge(e,t){return"*"==t?(je.marked="keyword",d(ke,y(";"))):"default"==t?(je.marked="keyword",d(w,y(";"))):"{"==e?d(H(ve,"}"),ke,y(";")):u(b)}function ve(e,t){return"as"==t?(je.marked="keyword",d(y("variable"))):"variable"==e?u(x,ve):void 0}function ye(e){return"string"==e?d():u(be,we,ke)}function be(e,t){return"{"==e?I(be,"}"):("variable"==e&&f(t),"*"==t&&(je.marked="keyword"),d(xe))}function we(e){if(","==e)return d(be,we)}function xe(e,t){if("as"==t)return je.marked="keyword",d(be)}function ke(e,t){if("from"==t)return je.marked="keyword",d(w)}function Ce(e){return"]"==e?d():u(H(x,"]"))}function Se(){return u(g("form"),J,y("{"),g("}"),H(Te,"}"),v,v)}function Te(){return u(J,te)}function Le(e,t,r){return t.tokenize==i&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}var Me,Oe,Ne=t.indentUnit,Ae=r.statementIndent,_e=r.jsonld,Pe=r.json||_e,De=r.typescript,We=r.wordCharacters||/[\w$\xa1-\uffff]/,Fe=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),r=e("keyword b"),n=e("keyword c"),i=e("keyword d"),o=e("operator"),a={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:i,break:i,continue:i,new:e("new"),delete:n,void:n,throw:n,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:o,typeof:o,instanceof:o,true:a,false:a,null:a,undefined:a,NaN:a,Infinity:a,this:e("this"),class:e("class"),super:e("atom"),yield:n,export:e("export"),import:e("import"),extends:n,await:n}}(),ze=/[+\-*&%=<>!?|~^@]/,Ee=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,He="([{}])",Ie={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0},je={state:null,column:null,marked:null,cc:null},Be={name:"this",next:{name:"arguments"}};return v.lex=!0,{startState:function(e){var t={tokenize:i,lastType:"sof",cc:[],lexical:new s((e||0)-Ne,0,"block",!1),localVars:r.localVars,context:r.localVars&&{vars:r.localVars},indented:e||0};return r.globalVars&&"object"==typeof r.globalVars&&(t.globalVars=r.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),l(e,t)),t.tokenize!=o&&e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"==Me?r:(t.lastType="operator"!=Me||"++"!=Oe&&"--"!=Oe?Me:"incdec",function(e,t,r,n,i){var o=e.cc;for(je.state=e,je.stream=i,je.marked=null,je.cc=o,je.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((o.length?o.pop():Pe?w:b)(r,n)){for(;o.length&&o[o.length-1].lex;)o.pop()();return je.marked?je.marked:"variable"==r&&c(e,n)?"variable-2":t}}(t,r,Me,Oe,e))},indent:function(t,n){if(t.tokenize==o)return e.Pass;if(t.tokenize!=i)return 0;var a,l=n&&n.charAt(0),s=t.lexical;if(!/^\s*else\b/.test(n))for(var c=t.cc.length-1;c>=0;--c){var u=t.cc[c];if(u==v)s=s.prev;else if(u!=ne)break}for(;("stat"==s.type||"form"==s.type)&&("}"==l||(a=t.cc[t.cc.length-1])&&(a==T||a==L)&&!/^[,\.=+\-*:?[\(]/.test(n));)s=s.prev;Ae&&")"==s.type&&"stat"==s.prev.type&&(s=s.prev);var d=s.type,f=l==d;return"vardef"==d?s.indented+("operator"==t.lastType||","==t.lastType?s.info+1:0):"form"==d&&"{"==l?s.indented:"form"==d?s.indented+Ne:"stat"==d?s.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||ze.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,n)?Ae||Ne:0):"switch"!=s.info||f||0==r.doubleIndentSwitch?s.align?s.column+(f?0:1):s.indented+(f?0:Ne):s.indented+(/^(?:case|default)\b/.test(n)?Ne:2*Ne)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:Pe?null:"/*",blockCommentEnd:Pe?null:"*/",blockCommentContinue:Pe?null:" * ",lineComment:Pe?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:Pe?"json":"javascript",jsonldMode:_e,jsonMode:Pe,expressionAllowed:Le,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=w&&t!=x||e.cc.pop()}}}),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})})},{"../../lib/codemirror":14}],18:[function(e,r,n){!function(i){"object"==typeof n&&"object"==typeof r?i(e("../../lib/codemirror")):"function"==typeof t&&t.amd?t(["../../lib/codemirror"],i):i(CodeMirror)}(function(e){"use strict";var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},r={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};e.defineMode("xml",function(n,i){function o(e,t){function r(r){return t.tokenize=r,r(e,t)}var n=e.next();if("<"==n)return e.eat("!")?e.eat("[")?e.match("CDATA[")?r(l("atom","]]>")):null:e.match("--")?r(l("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),r(s(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=l("meta","?>"),"meta"):(S=e.eat("/")?"closeTag":"openTag",t.tokenize=a,"tag bracket");if("&"==n){return(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error"}return e.eatWhile(/[^&<]/),null}function a(e,t){var r=e.next();if(">"==r||"/"==r&&e.eat(">"))return t.tokenize=o,S=">"==r?"endTag":"selfcloseTag","tag bracket";if("="==r)return S="equals",null;if("<"==r){t.tokenize=o,t.state=d,t.tagName=t.tagStart=null;var n=t.tokenize(e,t);return n?n+" tag error":"tag error"}return/[\'\"]/.test(r)?(t.tokenize=function(e){var t=function(t,r){for(;!t.eol();)if(t.next()==e){r.tokenize=a;break}return"string"};return t.isInAttribute=!0,t}(r),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function l(e,t){return function(r,n){for(;!r.eol();){if(r.match(t)){n.tokenize=o;break}r.next()}return e}}function s(e){return function(t,r){for(var n;null!=(n=t.next());){if("<"==n)return r.tokenize=s(e+1),r.tokenize(t,r);if(">"==n){if(1==e){r.tokenize=o;break}return r.tokenize=s(e-1),r.tokenize(t,r)}}return"meta"}}function c(e){e.context&&(e.context=e.context.prev)}function u(e,t){for(var r;;){if(!e.context)return;if(r=e.context.tagName,!x.contextGrabbers.hasOwnProperty(r)||!x.contextGrabbers[r].hasOwnProperty(t))return;c(e)}}function d(e,t,r){return"openTag"==e?(r.tagStart=t.column(),f):"closeTag"==e?h:d}function f(e,t,r){return"word"==e?(r.tagName=t.current(),T="tag",g):x.allowMissingTagName&&"endTag"==e?(T="tag bracket",g(e,t,r)):(T="error",f)}function h(e,t,r){if("word"==e){var n=t.current();return r.context&&r.context.tagName!=n&&x.implicitlyClosed.hasOwnProperty(r.context.tagName)&&c(r),r.context&&r.context.tagName==n||!1===x.matchClosing?(T="tag",p):(T="tag error",m)}return x.allowMissingTagName&&"endTag"==e?(T="tag bracket",p(e,t,r)):(T="error",m)}function p(e,t,r){return"endTag"!=e?(T="error",p):(c(r),d)}function m(e,t,r){return T="error",p(e,0,r)}function g(e,t,r){if("word"==e)return T="attribute",v;if("endTag"==e||"selfcloseTag"==e){var n=r.tagName,i=r.tagStart;return r.tagName=r.tagStart=null,"selfcloseTag"==e||x.autoSelfClosers.hasOwnProperty(n)?u(r,n):(u(r,n),r.context=new function(e,t,r){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=r,(x.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}(r,n,i==r.indented)),d}return T="error",g}function v(e,t,r){return"equals"==e?y:(x.allowMissing||(T="error"),g(e,0,r))}function y(e,t,r){return"string"==e?b:"word"==e&&x.allowUnquoted?(T="string",g):(T="error",g(e,0,r))}function b(e,t,r){return"string"==e?b:g(e,0,r)}var w=n.indentUnit,x={},k=i.htmlMode?t:r;for(var C in k)x[C]=k[C];for(var C in i)x[C]=i[C];var S,T;return o.isInText=!0,{startState:function(e){var t={tokenize:o,state:d,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;S=null;var r=t.tokenize(e,t);return(r||S)&&"comment"!=r&&(T=null,t.state=t.state(S||r,e,t),T&&(r="error"==T?r+" error":T)),r},indent:function(t,r,n){var i=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+w;if(i&&i.noIndent)return e.Pass;if(t.tokenize!=a&&t.tokenize!=o)return n?n.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==x.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+w*(x.multilineTagIndentFactor||1);if(x.alignCDATA&&/<!\[CDATA\[/.test(r))return 0;var l=r&&/^<(\/)?([\w_:\.-]*)/.exec(r);if(l&&l[1])for(;i;){if(i.tagName==l[2]){i=i.prev;break}if(!x.implicitlyClosed.hasOwnProperty(i.tagName))break;i=i.prev}else if(l)for(;i;){var s=x.contextGrabbers[i.tagName];if(!s||!s.hasOwnProperty(l[2]))break;i=i.prev}for(;i&&i.prev&&!i.startOfLine;)i=i.prev;return i?i.indent+w:t.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:x.htmlMode?"html":"xml",helperType:x.htmlMode?"html":"xml",skipAttribute:function(e){e.state==y&&(e.state=g)}}}),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})})},{"../../lib/codemirror":14}],19:[function(e,r,n){!function(e,r){if("function"==typeof t&&t.amd)t(["exports"],r);else if(void 0!==n)r(n);else{var i={};r(i),e.decko=i}}(this,function(e){"use strict";function t(e,t){var r=(t=t||e.decorate||function(e){return function(t){return"function"==typeof t?e(t):function(r,n,i){i.value=e(i.value,t,r,n,i)}}}(e))();return function(){for(var n=arguments.length,i=Array(n),o=0;o<n;o++)i[o]=arguments[o];var a=i.length;return(a<2?t:a>2?r:e).apply(void 0,i)}}e.__esModule=!0;var r={},n=Object.prototype.hasOwnProperty,i=function(e,t){if("function"==typeof t){var r=e;e=t,t=r}var n=t&&t.delay||t||0,i=void 0,o=void 0,a=void 0;return function(){for(var t=arguments.length,r=Array(t),l=0;l<t;l++)r[l]=arguments[l];i=r,o=this,a||(a=setTimeout(function(){e.apply(o,i),i=o=a=null},n))}},o=function(e,t,r){var n=r.value;return{configurable:!0,get:function(){var e=n.bind(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e}}},a=t(function(e){var t=arguments.length<=1||void 0===arguments[1]?r:arguments[1],i=t.cache||{};return function(){for(var r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=arguments[a];var l=String(o[0]);return!1===t.caseSensitive&&(l=l.toLowerCase()),n.call(i,l)?i[l]:i[l]=e.apply(this,o)}}),l=t(i),s=t(function(e,t){return e.bind(t)},function(){return o});e.memoize=a,e.debounce=l,e.bind=s,e.default={memoize:a,debounce:l,bind:s}})},{}],20:[function(e,t,r){t.exports=function(e,t,r){var n=t.split("."),i=e.__lsc||(e.__lsc={});return i[t+r]||(i[t+r]=function(t){for(var i=t&&t.target||this,o={},a=o,l="string"==typeof r?function(e,t,r,n){for(n=0,t=t.split?t.split("."):t;e&&n<t.length;)e=e[t[n++]];return void 0===e?r:e}(t,r):i.nodeName?i.type.match(/^che|rad/)?i.checked:i.value:t,s=0;s<n.length-1;s++)a=a[n[s]]||(a[n[s]]=!s&&e.state[n[s]]||{});a[n[s]]=l,e.setState(o)})}},{}],21:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?r.exports=i():"function"==typeof t&&t.amd?t(i):e.preactRenderToString=i()}(this,function(){function e(e){var t="";for(var r in e){var n=e[r];null!=n&&(t&&(t+=" "),t+=f(r),t+=": ",t+=n,"number"!=typeof n||i[r]||(t+="px"),t+=";")}return t||void 0}function t(e){var t="";for(var r in e)e[r]&&(t&&(t+=" "),t+=r);return t}function r(e,t){for(var r in t)e[r]=t[r];return e}function n(i,o,s,f,p){var y=i||g,b=y.nodeName,w=y.attributes,x=y.children,k=!1;o=o||{};var C=(s=s||{}).pretty,S="string"==typeof C?C:"\t";if(null==i||"boolean"==typeof i)return"";if("object"!==(void 0===i?"undefined":h(i))&&!b)return l(i);if("function"==typeof b){if(k=!0,!s.shallow||!f&&!1!==s.renderRootComponent){var T=function(e){var t=e.nodeName.defaultProps,n=r({},t||e.attributes);return t&&r(n,e.attributes),e.children&&(n.children=e.children),n}(i),L=void 0;if(b.prototype&&"function"==typeof b.prototype.render){var M=new b(T,o);M._disable=M.__x=!0,M.props=T,M.context=o,M.componentWillMount&&M.componentWillMount(),L=M.render(M.props,M.state,M.context),M.getChildContext&&(o=r(r({},o),M.getChildContext()))}else L=b(T,o);return n(L,o,s,!1!==s.shallowHighOrder)}b=function(e){return e.displayName||e!==Function&&e.name||function(e){var t=(Function.prototype.toString.call(e).match(/^\s*function\s+([^\( ]+)/)||g)[1];if(!t){for(var r=-1,n=m.length;n--;)if(m[n]===e){r=n;break}r<0&&(r=m.push(e)-1),t="UnnamedComponent"+r}return t}(e)}(b)}var O="",N=void 0;if(w){var A=a(w);s&&!0===s.sortAttributes&&A.sort();for(var _=0;_<A.length;_++){var P=A[_],D=w[P];if("children"!==P&&(s&&s.allAttributes||"key"!==P&&"ref"!==P)){if("className"===P){if(w.class)continue;P="class"}else p&&P.match(/^xlink\:?(.+)/)&&(P=P.toLowerCase().replace(/^xlink\:?(.+)/,"xlink:$1"));"class"===P&&D&&"object"===(void 0===D?"undefined":h(D))?D=t(D):"style"===P&&D&&"object"===(void 0===D?"undefined":h(D))&&(D=e(D));var W=s.attributeHook&&s.attributeHook(P,D,o,s,k);if(W||""===W)O+=W;else if("dangerouslySetInnerHTML"===P)N=D&&D.__html;else if((D||0===D||""===D)&&"function"!=typeof D){if(!(!0!==D&&""!==D||(D=P,s&&s.xml))){O+=" "+P;continue}O+=" "+P+'="'+l(D)+'"'}}}}var F=O.replace(/^\n\s*/," ");if(F===O||~F.indexOf("\n")?C&&~O.indexOf("\n")&&(O+="\n"):O=F,O="<"+b+O+">",v.indexOf(b)>-1&&(O=O.replace(/>$/," />")),N)C&&d(N)&&(N="\n"+S+u(N,S)),O+=N;else{for(var z=x&&x.length,E=[],H=~O.indexOf("\n"),I=0;I<z;I++){var j=x[I];if(!c(j)){var B=n(j,o,s,!0,"svg"===b||"foreignObject"!==b&&p);!H&&C&&d(B)&&(H=!0),B&&E.push(B)}}if(C&&H)for(var R=E.length;R--;)E[R]="\n"+S+u(E[R],S);if(E.length)O+=E.join("");else if(s&&s.xml)return O.substring(0,O.length-1)+" />"}return-1===v.indexOf(b)&&(C&&~O.indexOf("\n")&&(O+="\n"),O+="</"+b+">"),O}var i={boxFlex:1,boxFlexGroup:1,columnCount:1,fillOpacity:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,fontWeight:1,lineClamp:1,lineHeight:1,opacity:1,order:1,orphans:1,strokeOpacity:1,widows:1,zIndex:1,zoom:1},o={"<":"<",">":">",'"':""","&":"&"},a=Object.keys||function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r);return t},l=function(e){return String(e).replace(/[<>"&]/g,s)},s=function(e){return o[e]||e},c=function(e){return null==e||!1===e},u=function(e,t){return String(e).replace(/(\n+)/g,"$1"+(t||"\t"))},d=function(e,t,r){return String(e).length>(t||40)||!r&&-1!==String(e).indexOf("\n")||-1!==String(e).indexOf("<")},f=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(r){return t[r]||(t[r]=e(r))}}(function(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}),h="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},p={shallow:!0},m=[],g={},v=["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"];n.render=n;return n.shallowRender=function(e,t){return n(e,t,p)},n})},{}],22:[function(e,t,r){!function(){"use strict";function e(e,t){var r,n,i,o,a=S;for(o=arguments.length;o-- >2;)C.push(arguments[o]);for(t&&null!=t.children&&(C.length||C.push(t.children),delete t.children);C.length;)if((n=C.pop())&&void 0!==n.pop)for(o=n.length;o--;)C.push(n[o]);else"boolean"==typeof n&&(n=null),(i="function"!=typeof e)&&(null==n?n="":"number"==typeof n?n=String(n):"string"!=typeof n&&(i=!1)),i&&r?a[a.length-1]+=n:a===S?a=[n]:a.push(n),r=i;var l=new function(){};return l.nodeName=e,l.children=a,l.attributes=null==t?void 0:t,l.key=null==t?void 0:t.key,void 0!==k.vnode&&k.vnode(l),l}function r(e,t){for(var r in t)e[r]=t[r];return e}function n(e){!e.__d&&(e.__d=!0)&&1==M.push(e)&&(k.debounceRendering||T)(i)}function i(){var e,t=M;for(M=[];e=t.pop();)e.__d&&b(e)}function o(e,t,r){return"string"==typeof t||"number"==typeof t?void 0!==e.splitText:"string"==typeof t.nodeName?!e._componentConstructor&&a(e,t.nodeName):r||e._componentConstructor===t.nodeName}function a(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function l(e){var t=r({},e.attributes);t.children=e.children;var n=e.nodeName.defaultProps;if(void 0!==n)for(var i in n)void 0===t[i]&&(t[i]=n[i]);return t}function s(e){var t=e.parentNode;t&&t.removeChild(e)}function c(e,t,r,n,i){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)r&&r(null),n&&n(e);else if("class"!==t||i)if("style"===t){if(n&&"string"!=typeof n&&"string"!=typeof r||(e.style.cssText=n||""),n&&"object"==typeof n){if("string"!=typeof r)for(var o in r)o in n||(e.style[o]="");for(var o in n)e.style[o]="number"==typeof n[o]&&!1===L.test(o)?n[o]+"px":n[o]}}else if("dangerouslySetInnerHTML"===t)n&&(e.innerHTML=n.__html||"");else if("o"==t[0]&&"n"==t[1]){var a=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),n?r||e.addEventListener(t,u,a):e.removeEventListener(t,u,a),(e.__l||(e.__l={}))[t]=n}else if("list"!==t&&"type"!==t&&!i&&t in e)!function(e,t,r){try{e[t]=r}catch(e){}}(e,t,null==n?"":n),null!=n&&!1!==n||e.removeAttribute(t);else{var l=i&&t!==(t=t.replace(/^xlink\:?/,""));null==n||!1===n?l?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof n&&(l?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),n):e.setAttribute(t,n))}else e.className=n||""}function u(e){return this.__l[e.type](k.event&&k.event(e)||e)}function d(){for(var e;e=O.pop();)k.afterMount&&k.afterMount(e),e.componentDidMount&&e.componentDidMount()}function f(e,t,r,n,i,o){N++||(A=null!=i&&void 0!==i.ownerSVGElement,_=null!=e&&!("__preactattr_"in e));var a=h(e,t,r,n,o);return i&&a.parentNode!==i&&i.appendChild(a),--N||(_=!1,o||d()),a}function h(e,t,r,n,i){var u=e,d=A;if(null!=t&&"boolean"!=typeof t||(t=""),"string"==typeof t||"number"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||i)?e.nodeValue!=t&&(e.nodeValue=t):(u=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(u,e),p(e,!0))),u.__preactattr_=!0,u;var f=t.nodeName;if("function"==typeof f)return function(e,t,r,n){var i=e&&e._component,o=i,a=e,s=i&&e._componentConstructor===t.nodeName,c=s,u=l(t);for(;i&&!c&&(i=i.__u);)c=i.constructor===t.nodeName;i&&c&&(!n||i._component)?(y(i,u,3,r,n),e=i.base):(o&&!s&&(w(o),e=a=null),i=g(t.nodeName,u,r),e&&!i.__b&&(i.__b=e,a=null),y(i,u,1,r,n),e=i.base,a&&e!==a&&(a._component=null,p(a,!1)));return e}(e,t,r,n);if(A="svg"===f||"foreignObject"!==f&&A,f=String(f),(!e||!a(e,f))&&(u=function(e,t){var r=t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e);return r.__n=e,r}(f,A),e)){for(;e.firstChild;)u.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(u,e),p(e,!0)}var m=u.firstChild,v=u.__preactattr_,b=t.children;if(null==v){v=u.__preactattr_={};for(var x=u.attributes,k=x.length;k--;)v[x[k].name]=x[k].value}return!_&&b&&1===b.length&&"string"==typeof b[0]&&null!=m&&void 0!==m.splitText&&null==m.nextSibling?m.nodeValue!=b[0]&&(m.nodeValue=b[0]):(b&&b.length||null!=m)&&function(e,t,r,n,i){var a,l,c,u,d,f=e.childNodes,m=[],g={},v=0,y=0,b=f.length,w=0,x=t?t.length:0;if(0!==b)for(var k=0;k<b;k++){var C=f[k],S=C.__preactattr_,T=x&&S?C._component?C._component.__k:S.key:null;null!=T?(v++,g[T]=C):(S||(void 0!==C.splitText?!i||C.nodeValue.trim():i))&&(m[w++]=C)}if(0!==x)for(var k=0;k<x;k++){u=t[k],d=null;var T=u.key;if(null!=T)v&&void 0!==g[T]&&(d=g[T],g[T]=void 0,v--);else if(!d&&y<w)for(a=y;a<w;a++)if(void 0!==m[a]&&o(l=m[a],u,i)){d=l,m[a]=void 0,a===w-1&&w--,a===y&&y++;break}d=h(d,u,r,n),c=f[k],d&&d!==e&&d!==c&&(null==c?e.appendChild(d):d===c.nextSibling?s(c):e.insertBefore(d,c))}if(v)for(var k in g)void 0!==g[k]&&p(g[k],!1);for(;y<=w;)void 0!==(d=m[w--])&&p(d,!1)}(u,b,r,n,_||null!=v.dangerouslySetInnerHTML),function(e,t,r){var n;for(n in r)t&&null!=t[n]||null==r[n]||c(e,n,r[n],r[n]=void 0,A);for(n in t)"children"===n||"innerHTML"===n||n in r&&t[n]===("value"===n||"checked"===n?e[n]:r[n])||c(e,n,r[n],r[n]=t[n],A)}(u,t.attributes,v),A=d,u}function p(e,t){var r=e._component;r?w(r):(null!=e.__preactattr_&&e.__preactattr_.ref&&e.__preactattr_.ref(null),!1!==t&&null!=e.__preactattr_||s(e),m(e))}function m(e){for(e=e.lastChild;e;){var t=e.previousSibling;p(e,!0),e=t}}function g(e,t,r){var n,i=P[e.name];if(e.prototype&&e.prototype.render?(n=new e(t,r),x.call(n,t,r)):((n=new x(t,r)).constructor=e,n.render=v),i)for(var o=i.length;o--;)if(i[o].constructor===e){n.__b=i[o].__b,i.splice(o,1);break}return n}function v(e,t,r){return this.constructor(e,r)}function y(e,t,r,i,o){e.__x||(e.__x=!0,(e.__r=t.ref)&&delete t.ref,(e.__k=t.key)&&delete t.key,!e.base||o?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,i),i&&i!==e.context&&(e.__c||(e.__c=e.context),e.context=i),e.__p||(e.__p=e.props),e.props=t,e.__x=!1,0!==r&&(1!==r&&!1===k.syncComponentUpdates&&e.base?n(e):b(e,1,o)),e.__r&&e.__r(e))}function b(e,t,n,i){if(!e.__x){var o,a,s,c=e.props,u=e.state,h=e.context,m=e.__p||c,v=e.__s||u,x=e.__c||h,C=e.base,S=e.__b,T=C||S,L=e._component,M=!1;if(C&&(e.props=m,e.state=v,e.context=x,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(c,u,h)?M=!0:e.componentWillUpdate&&e.componentWillUpdate(c,u,h),e.props=c,e.state=u,e.context=h),e.__p=e.__s=e.__c=e.__b=null,e.__d=!1,!M){o=e.render(c,u,h),e.getChildContext&&(h=r(r({},h),e.getChildContext()));var A,_,P=o&&o.nodeName;if("function"==typeof P){var D=l(o);(a=L)&&a.constructor===P&&D.key==a.__k?y(a,D,1,h,!1):(A=a,e._component=a=g(P,D,h),a.__b=a.__b||S,a.__u=e,y(a,D,0,h,!1),b(a,1,n,!0)),_=a.base}else s=T,(A=L)&&(s=e._component=null),(T||1===t)&&(s&&(s._component=null),_=f(s,o,h,n||!C,T&&T.parentNode,!0));if(T&&_!==T&&a!==L){var W=T.parentNode;W&&_!==W&&(W.replaceChild(_,T),A||(T._component=null,p(T,!1)))}if(A&&w(A),e.base=_,_&&!i){for(var F=e,z=e;z=z.__u;)(F=z).base=_;_._component=F,_._componentConstructor=F.constructor}}if(!C||n?O.unshift(e):M||(e.componentDidUpdate&&e.componentDidUpdate(m,v,x),k.afterUpdate&&k.afterUpdate(e)),null!=e.__h)for(;e.__h.length;)e.__h.pop().call(e);N||i||d()}}function w(e){k.beforeUnmount&&k.beforeUnmount(e);var t=e.base;e.__x=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var r=e._component;r?w(r):t&&(t.__preactattr_&&t.__preactattr_.ref&&t.__preactattr_.ref(null),e.__b=t,s(t),function(e){var t=e.constructor.name;(P[t]||(P[t]=[])).push(e)}(e),m(t)),e.__r&&e.__r(null)}function x(e,t){this.__d=!0,this.context=t,this.props=e,this.state=this.state||{}}var k={},C=[],S=[],T="function"==typeof Promise?Promise.resolve().then.bind(Promise.resolve()):setTimeout,L=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,M=[],O=[],N=0,A=!1,_=!1,P={};r(x.prototype,{setState:function(e,t){var i=this.state;this.__s||(this.__s=r({},i)),r(i,"function"==typeof e?e(i,this.props):e),t&&(this.__h=this.__h||[]).push(t),n(this)},forceUpdate:function(e){e&&(this.__h=this.__h||[]).push(e),b(this,2)},render:function(){}});var D={h:e,createElement:e,cloneElement:function(t,n){return e(t.nodeName,r(r({},t.attributes),n),arguments.length>2?[].slice.call(arguments,2):t.children)},Component:x,render:function(e,t,r){return f(r,e,{},!1,t,!1)},rerender:i,options:k};void 0!==t?t.exports=D:self.preact=D}()},{}],23:[function(e,t,r){function n(e){document.addEventListener("mouseover",function(t){var r=t.target,i=e(r);i||(i=(r=r.parentElement)&&e(r)),i&&n.show(r,i,!0)})}n.show=function(e,t,r){var i="data-tlite";t=t||{},(e.tooltip||function(e,t){function o(){n.hide(e,!0)}function a(){l||(l=function(e,t,r){function n(){i.className="tlite tlite-"+a+l;var t=e.offsetTop,r=e.offsetLeft;i.offsetParent===e&&(t=r=0);var n=e.offsetWidth,o=e.offsetHeight,s=i.offsetHeight,c=i.offsetWidth,u=r+n/2;i.style.top=("s"===a?t-s-10:"n"===a?t+o+10:t+o/2-s/2)+"px",i.style.left=("w"===l?r:"e"===l?r+n-c:"w"===a?r+n+10:"e"===a?r-c-10:u-c/2)+"px"}var i=document.createElement("span"),o=r.grav||e.getAttribute("data-tlite")||"n";i.innerHTML=t,e.appendChild(i);var a=o[0]||"",l=o[1]||"";n();var s=i.getBoundingClientRect();return"s"===a&&s.top<0?(a="n",n()):"n"===a&&s.bottom>window.innerHeight?(a="s",n()):"e"===a&&s.left<0?(a="w",n()):"w"===a&&s.right>window.innerWidth&&(a="e",n()),i.className+=" tlite-visible",i}(e,c,t))}var l,s,c;return e.addEventListener("mousedown",o),e.addEventListener("mouseleave",o),e.tooltip={show:function(){c=e.title||e.getAttribute(i)||c,e.title="",e.setAttribute(i,""),c&&!s&&(s=setTimeout(a,r?150:1))},hide:function(e){if(r===e){s=clearTimeout(s);var t=l&&l.parentNode;t&&t.removeChild(l),l=void 0}}}}(e,t)).show()},n.hide=function(e,t){e.tooltip&&e.tooltip.hide(t)},void 0!==t&&t.exports&&(t.exports=n)},{}]},{},[2])}();
+!function(){var o=void 0;!function o(a,l,s){function c(t,e){if(!l[t]){if(!a[t]){var r=!1;if(!e&&r)return r(t,!0);if(u)return u(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var i=l[t]={exports:{}};a[t][0].call(i.exports,function(e){return c(a[t][1][e]||e)},i,i.exports,o,a,l,s)}return l[t].exports}for(var u=!1,e=0;e<s.length;e++)c(s[e]);return c}({1:[function(e,t,r){"use strict";function n(e){"A"===e.target.tagName&&(e.target.hasAttribute("data-hf-confirm")&&(confirm(e.target.getAttribute("data-hf-confirm"))||e.preventDefault()))}Object.defineProperty(r,"__esModule",{value:!0}),r.default={init:function(){document.body.addEventListener("click",n,!0)}}},{}],2:[function(e,t,r){"use strict";var n=c(e("./tabs.js")),i=c(e("./form-editor.js")),o=c(e("./form-actions.js")),a=c(e("./field-builder.js")),l=c(e("./action-confirmations.js")),s=c(e("tlite"));function c(e){return e&&e.__esModule?e:{default:e}}window.html_forms={},n.default.init(),l.default.init(),document.getElementById("hf-form-editor")&&(i.default.init(),o.default.init(),a.default.init(i.default)),(0,s.default)(function(e){return-1<e.className.indexOf("hf-tooltip")}),window.html_forms.FieldBuilder=a.default,window.html_forms.Editor=i.default,"edit"===hf_options.view&&window.columns.useCheckboxesForHidden()},{"./action-confirmations.js":1,"./field-builder.js":6,"./form-actions.js":8,"./form-editor.js":9,"./tabs.js":10,tlite:23}],3:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.FieldBuilder=void 0;var n,i=function(){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}}(),a=e("preact"),o=e("decko"),l=e("./field-configurator.js");function s(r,n,e,t,i){var o={};return Object.keys(t).forEach(function(e){o[e]=t[e]}),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=e.slice().reverse().reduce(function(e,t){return t(r,n,e)||e},o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(r,n,o),o=null),o}var c=(s((n=function(e){function r(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r);var t=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return t.state={activeField:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,a.Component),i(r,[{key:"handleCancel",value:function(){this.setState({activeField:null})}},{key:"openFieldConfig",value:function(e){var t=this.props.fields[e.target.value];this.state.activeField===t?this.setState({activeField:null}):this.setState({activeField:t})}},{key:"render",value:function(e,r){var n=this,t=e.fields.map(function(e,t){return(0,a.h)("button",{type:"button",value:t,className:"button "+(r.activeField===e?"active":""),onClick:n.openFieldConfig},e.label)}),i=r.activeField?r.activeField.key:"",o=r.activeField?r.activeField.configRows:[];return(0,a.h)("div",{class:"hf-field-builder"},(0,a.h)("h4",null,"Add field"),(0,a.h)("div",{class:"available-fields"},t),(0,a.h)("div",{style:"max-width: 480px;"},(0,a.h)(l.FieldConfigurator,{fieldType:i,rows:o,onCancel:this.handleCancel})),null===r.activeField?(0,a.h)("p",{class:"help",style:"margin-bottom: 0;"},"Use the buttons above to generate your field HTML, or manually modify your form below."):"")}}]),r}()).prototype,"handleCancel",[o.bind],Object.getOwnPropertyDescriptor(n.prototype,"handleCancel"),n.prototype),s(n.prototype,"openFieldConfig",[o.bind],Object.getOwnPropertyDescriptor(n.prototype,"openFieldConfig"),n.prototype),n);r.FieldBuilder=c},{"./field-configurator.js":4,decko:19,preact:22}],4:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.FieldConfigurator=void 0;var n,i,o=function(){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}}(),a=e("preact"),l=e("decko"),s=e("../field-builder/html.js"),c=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}}(e("./field-settings.js")),u=e("linkstate"),d=(i=u)&&i.__esModule?i:{default:i};function f(r,n,e,t,i){var o={};return Object.keys(t).forEach(function(e){o[e]=t[e]}),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=e.slice().reverse().reduce(function(e,t){return t(r,n,e)||e},o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(r,n,o),o=null),o}var h=(f((n=function(e){function i(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i);var t=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,e));return t.state=t.getInitialState(),t.choiceHandlers={add:t.addChoice,delete:t.deleteChoice,changeLabel:t.changeChoiceLabel,toggleChecked:t.toggleChoiceChecked},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(i,a.Component),o(i,[{key:"getInitialState",value:function(){return{formId:document.querySelector('input[name="form_id"]').value,formSlug:document.querySelector('input[name="form[slug]"]').value,fieldType:"",fieldLabel:"",placeholder:"",value:"",wrap:!0,required:!1,choices:[{checked:!1,label:"One"},{checked:!1,label:"Two"}],accept:""}}},{key:"componentWillReceiveProps",value:function(e){var t={fieldType:e.fieldType};"checkbox"===this.state.fieldType&&"checkbox"!==e.fieldType&&(t.choices=this.state.choices.map(function(e,t){return e.checked=!1,e})),this.setState(t)}},{key:"addToForm",value:function(){var e=(0,s.htmlgenerate)(this.state);html_forms.Editor.replaceSelection(e)}},{key:"addChoice",value:function(){var e=this.state.choices;e.push({checked:!1,label:"..."}),this.setState({choices:e})}},{key:"deleteChoice",value:function(e){var t=this.state.choices,r=e.target.parentElement.getAttribute("data-key");t.splice(r,1),this.setState({choices:t})}},{key:"changeChoiceLabel",value:function(e){var t=this.state.choices;t[e.target.parentElement.getAttribute("data-key")].label=e.target.value,this.setState({choices:t})}},{key:"toggleChoiceChecked",value:function(e){var t=this.state.choices,r=e.target.parentElement.getAttribute("data-key");t[r].checked=!t[r].checked,this.setState({choices:t})}},{key:"handleCancel",value:function(){this.setState(this.getInitialState()),this.props.onCancel()}},{key:"render",value:function(e,t){if(0==e.rows.length)return"";for(var r=[],n=0;n<e.rows.length;n++)switch(e.rows[n]){case"label":r.push((0,a.h)(c.Label,{value:t.fieldLabel,onChange:(0,d.default)(this,"fieldLabel")}));break;case"placeholder":r.push((0,a.h)(c.Placeholder,{value:t.placeholder,onChange:(0,d.default)(this,"placeholder")}));break;case"default-value":r.push((0,a.h)(c.DefaultValue,{value:t.value,onChange:(0,d.default)(this,"value")}));break;case"required":r.push((0,a.h)(c.Required,{checked:t.required,onChange:(0,d.default)(this,"required")}));break;case"wrap":r.push((0,a.h)(c.Wrap,{checked:t.wrap,onChange:(0,d.default)(this,"wrap")}));break;case"add-to-form":r.push((0,a.h)(c.AddToForm,{onSubmit:this.addToForm,onCancel:this.handleCancel}));break;case"choices":r.push((0,a.h)(c.Choices,{multiple:"checkbox"===t.fieldType,choices:t.choices,handlers:this.choiceHandlers}));break;case"button-text":r.push((0,a.h)(c.ButtonText,{value:t.value,onChange:(0,d.default)(this,"value")}));break;case"accept":r.push((0,a.h)(c.Accept,{value:t.accept,onChange:(0,d.default)(this,"accept")}))}return(0,a.h)("div",{class:"field-config",onKeyPress:i.handleKeyPress},r)}}],[{key:"handleKeyPress",value:function(e){13===e.keyCode&&e.preventDefault()}}]),i}()).prototype,"addToForm",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"addToForm"),n.prototype),f(n.prototype,"addChoice",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"addChoice"),n.prototype),f(n.prototype,"deleteChoice",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"deleteChoice"),n.prototype),f(n.prototype,"changeChoiceLabel",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"changeChoiceLabel"),n.prototype),f(n.prototype,"toggleChoiceChecked",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"toggleChoiceChecked"),n.prototype),f(n,"handleKeyPress",[l.bind],Object.getOwnPropertyDescriptor(n,"handleKeyPress"),n),f(n.prototype,"handleCancel",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"handleCancel"),n.prototype),n);r.FieldConfigurator=h},{"../field-builder/html.js":7,"./field-settings.js":5,decko:19,linkstate:20,preact:22}],5:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Accept=r.ButtonText=r.Choices=r.Required=r.Wrap=r.DefaultValue=r.Placeholder=r.Label=r.AddToForm=void 0;var n=e("preact");r.AddToForm=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("button",{class:"button",type:"button",onClick:e.onSubmit},"Add field to form")," ",(0,n.h)("a",{href:"javascript:void(0);",class:"hf-small",style:"vertical-align: middle;",onClick:e.onCancel},"or close field helper"))},r.Label=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-field-label"},"Field label ",(0,n.h)("span",{class:"hf-required"},"*")),(0,n.h)("input",{id:"hf-fg-field-label",type:"text",value:e.value,onChange:e.onChange}))},r.Placeholder=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-placeholder"},"Placeholder ",(0,n.h)("span",{class:"hf-italic hf-pull-right"},"Optional")),(0,n.h)("input",{id:"hf-fg-placeholder",type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Text to show when field has no value."))},r.DefaultValue=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-default-value"},"Default value ",(0,n.h)("span",{class:"hf-italic hf-pull-right"},"Optional")),(0,n.h)("input",{id:"hf-fg-default-value",type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Text to pre-fill this field with."))},r.Wrap=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{class:"inline"},(0,n.h)("input",{type:"checkbox",value:"1",defaultChecked:e.checked,onChange:e.onChange}),"Wrap this field in paragraph tags."))},r.Required=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{class:"inline"},(0,n.h)("input",{type:"checkbox",value:"1",defaultChecked:e.checked,onChange:e.onChange}),"This field is required."))},r.Choices=function(r){var e=r.choices.map(function(e,t){return(0,n.h)("div",{"data-key":t},(0,n.h)("input",{type:r.multiple?"checkbox":"radio",name:"selected",defaultChecked:e.checked,onChange:r.handlers.toggleChecked,title:"Pre-select this choice?"}),(0,n.h)("input",{type:"text",value:e.label,placeholder:"Choice label",style:"width: 80%;",onChange:r.handlers.changeLabel}),(0,n.h)("a",{href:"javascript:void(0);",onClick:r.handlers.delete,style:"text-decoration: none;",title:"Delete choice"},"✕"))});return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",null,"Choices"),e,(0,n.h)("input",{type:r.multiple?"checkbox":"radio",style:"visibility: hidden;"}),(0,n.h)("a",{href:"javascript:void(0);",onClick:r.handlers.add},"Add choice"))},r.ButtonText=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-default-value"},"Button text ",(0,n.h)("span",{class:"hf-required"},"*")),(0,n.h)("input",{id:"hf-fg-default-value",type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Text to show on the button."))},r.Accept=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",null,"Accepted file types"),(0,n.h)("input",{type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Use a comma-separated list of accepted file extensions, eg ",(0,n.h)("code",null,".pdf"),". ",(0,n.h)("br",null),"Leave empty to accept any file type."))}},{preact:22}],6:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=e("preact"),i=e("./components/field-builder.js"),o=void 0,a=void 0;function l(e,t,r){this.key=e,this.label=t,this.configRows=r||[]}function s(){o=(0,n.render)((0,n.h)(i.FieldBuilder,{fields:a}),document.getElementById("hf-field-builder"),o)}a=[new l("text","Text",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("email","Email",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("url","URL",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("number","Number",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("date","Date",["label","default-value","required","wrap","add-to-form"]),new l("textarea","Textarea",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("dropdown","Dropdown",["label","choices","required","wrap","add-to-form"]),new l("checkbox","Checkboxes",["label","choices","wrap","add-to-form"]),new l("radio","Radio buttons",["label","choices","wrap","add-to-form"]),new l("submit","Submit button",["button-text","wrap","add-to-form"])],r.default={init:function(){s()},registerField:function(e,t,r){a.push(new l(e,t,r)),s()}}},{"./components/field-builder.js":3,preact:22}],7:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.htmlgenerate=void 0;var n,i=e("preact-render-to-string"),s=(n=i)&&n.__esModule?n:{default:n},c=e("preact");function u(e,t,r){return(0,c.h)(e,function(e){var t={};for(var r in e)!1!==e[r]&&""!==e[r]&&(t[r]=e[r]);return t}(t),r)}r.htmlgenerate=function(e){var t=e.fieldLabel.replace(/ /g,"_").replace(/[^\w\[\]_]*/g,"").toUpperCase(),r=e.formSlug+"-"+t,n=e.fieldLabel.length&&"submit"!==e.fieldType?(0,c.h)("label",{for:r},e.fieldLabel):"",i=void 0,o=void 0;switch(e.fieldType){case"text":default:o=u("input",i={type:e.fieldType,name:t,value:e.value,placeholder:e.placeholder,required:e.required,id:r});break;case"textarea":o=u("textarea",i={name:t,placeholder:e.placeholder,required:e.required,id:r},e.value);break;case"dropdown":o=u("select",i={name:t,required:e.required,id:r},e.choices.map(function(e){return u("option",{selected:e.checked},e.label)}));break;case"radio":o=e.choices.map(function(e){return u("label",{},[u("input",{type:"radio",name:t,value:e.label,selected:e.checked})," ",u("span",{},e.label)])});break;case"checkbox":o=e.choices.map(function(e){return u("label",{},[u("input",{type:"checkbox",name:t+"[]",value:e.label,checked:e.checked})," ",u("span",{},e.label)])});break;case"file":i={type:"file",name:t,required:e.required,id:r},e.accept&&(i.accept=e.accept),o=u("input",i);break;case"submit":o=u("input",i={type:"submit",value:e.value})}var a="";if(e.wrap){var l=(0,c.h)("p",{},[n,o]);a=(0,s.default)(l,null,{pretty:!0})}else a+=(0,s.default)(n,null,{pretty:!0}),a+="\n",a+=(0,s.default)(o,null,{pretty:!0});return a}},{preact:22,"preact-render-to-string":21}],8:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=void 0,a=void 0,u=void 0;function l(e,t){var r=document.createElement("div");r.className="hf-accordion expanded ";var n=document.createElement("h4");n.className="hf-accordion-heading",n.innerHTML=e,r.appendChild(n);var i=document.createElement("div");i.className="hf-accordion-content",i.innerHTML=t,r.appendChild(i);var o=document.createElement("p");o.style.textAlign="right";var a,l,s,c=document.createElement("a");return c.href="javascript:void(0);",c.className="danger",c.innerText="Delete this action",o.appendChild(c),i.appendChild(o),n.addEventListener("click",(a=r,l=i,function(){var e=null===l.offsetParent;a.className=a.className.replace("expanded","")+(e?" expanded":""),l.style.display=e?"block":"none"})),c.addEventListener("click",(s=r,function(){u.removeChild(s),1===u.childElementCount&&(u.querySelector("#hf-form-actions-empty").style.display="")})),r}function i(e){var t=e.target||e.srcElement;if("INPUT"===t.tagName){var r=t.getAttribute("data-action-type"),n=a.querySelector("#hf-action-type-"+r+"-template"),i=u.querySelectorAll("div").length-1,o=l(t.value,n.innerHTML.replace(/\$index/g,i));u.appendChild(o),u.querySelector("#hf-form-actions-empty").style.display="none"}}r.default={init:function(){u=document.getElementById("hf-form-actions"),n=document.getElementById("hf-available-form-actions"),a=document.getElementById("hf-form-action-templates"),[].forEach.call(u.querySelectorAll(".hf-action-settings"),function(e){e.parentNode.removeChild(e);var t=e.getAttribute("data-title"),r=e.querySelector(".hf-action-summary");r&&(t+=' — <span class="hf-muted">'+r.innerHTML+"</span>");var n=l(t,e.innerHTML);u.appendChild(n),u.querySelector("#hf-form-actions-empty").style.display="none"}),n.addEventListener("click",i,!0)}}},{}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=e("codemirror");e("codemirror/mode/xml/xml"),e("codemirror/mode/javascript/javascript"),e("codemirror/mode/css/css"),e("codemirror/mode/htmlmixed/htmlmixed"),e("codemirror/addon/fold/xml-fold"),e("codemirror/addon/edit/matchtags"),e("codemirror/addon/edit/closetag.js");var i=void 0,o=void 0,a=void 0,l=void 0,s=void 0,c=void 0,u=void 0,d=/\{\{ *(\w+)(?:\.([\w\.]+))? *(?:\|\| *(\w+))? *\}\}/g;function f(){var e=c.contentDocument||c.contentWindow.document;(u=e.querySelector(".hf-fields-wrap"))&&m()}function h(e){return e.name.replace("[]","").replace(/\[(\w+)\]/g,".$1")}function p(){var e,t,r=a.querySelectorAll("input[name], select[name], textarea[name], button[name]"),i=(e=[].map.call(r,function(e){return"["+h(e)+"]"}),t={},e.filter(function(e){return!t.hasOwnProperty(e)&&(t[e]=!0)})),o=document.getElementById("wpbody-content");[].forEach.call(document.querySelectorAll(".hf-field-names"),function(n){for(;n.firstChild;)n.removeChild(n.firstChild);i.map(function(e){var t=document.createElement("span");t.style.visibility="hidden",t.innerText=e,o.appendChild(t);var r=t.offsetWidth;o.removeChild(t);var n=document.createElement("input");return n.setAttribute("type","text"),n.style.maxWidth=1.1*r+14+"px",n.setAttribute("value",e),n.setAttribute("readonly",!0),n.setAttribute("onfocus","this.select()"),n}).forEach(function(e,t,r){n.appendChild(e)})})}function m(){var e=i.getValue();e=e.replace(d,function(e,t){return arguments[3]?arguments[3]:""}),u.innerHTML=e,u.dispatchEvent(new Event("hf-refresh"))}function g(){a.innerHTML=i.getValue()}function v(){var e=a.querySelectorAll("[required]"),t=[].map.call(e,h);l.value=t.join(",")}function y(){var e=a.querySelectorAll('input[type="email"]'),t=[].map.call(e,h);s.value=t.join(",")}function b(n,i,o){var a;return function(){var e=this,t=arguments,r=o&&!a;clearTimeout(a),a=setTimeout(function(){a=null,o||n.apply(e,t)},i),r&&n.apply(e,t)}}r.default={init:function(){c=document.getElementById("hf-form-preview"),o=document.getElementById("hf-form-editor"),a=document.createElement("form"),l=document.getElementById("hf-required-fields"),s=document.getElementById("hf-email-fields"),a.innerHTML=o.value,(i=n.fromTextArea(o,{selectionPointer:!0,matchTags:{bothTags:!0},mode:"htmlmixed",htmlMode:!0,autoCloseTags:!0,autoRefresh:!0,styleActiveLine:!0,matchBrackets:!0})).on("changes",b(m,500)),i.on("changes",b(g,100)),i.on("changes",b(p,500)),i.on("blur",m),i.on("blur",g),i.on("blur",p),i.on("blur",v),i.on("blur",y),c.addEventListener("load",f),f(),p()},replaceSelection:function(e){i.replaceSelection(e),i.focus()}}},{codemirror:14,"codemirror/addon/edit/closetag.js":11,"codemirror/addon/edit/matchtags":12,"codemirror/addon/fold/xml-fold":13,"codemirror/mode/css/css":15,"codemirror/mode/htmlmixed/htmlmixed":16,"codemirror/mode/javascript/javascript":17,"codemirror/mode/xml/xml":18}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a=void 0,l=void 0;function n(e){for(var t=this.getAttribute("data-tab-target"),r=0;r<l.length;r++)l[r].classList.toggle("nav-tab-active",l[r]===this);this.blur();for(var n=0;n<a.length;n++){var i=a[n];i.classList.toggle("hf-tab-active",i.getAttribute("data-tab")===t)}if(document.title=document.title.replace(document.title.split(" - ").shift(),this.innerText+" "),window.history){var o=window.location.href;o=o.replace(/\&tab\=\w+/,""),o+="&tab="+t,window.history.replaceState({tab:t},document.title,o)}e.preventDefault()}r.default={init:function(){a=document.querySelectorAll(".hf-tab"),l=document.querySelectorAll("#hf-tabs-nav a");for(var e=0;e<l.length;e++)l[e].addEventListener("click",n)},open:n}},{}],11:[function(e,t,r){var n;n=function(y){y.defineOption("autoCloseTags",!1,function(e,t,r){if(r!=y.Init&&r&&e.removeKeyMap("autoCloseTags"),t){var n={name:"autoCloseTags"};("object"!=typeof t||t.whenClosing)&&(n["'/'"]=function(e){return(t=e).getOption("disableInput")?y.Pass:i(t,!0);var t}),("object"!=typeof t||t.whenOpening)&&(n["'>'"]=function(e){return function(e){if(e.getOption("disableInput"))return y.Pass;for(var t=e.listSelections(),r=[],n=e.getOption("autoCloseTags"),i=0;i<t.length;i++){if(!t[i].empty())return y.Pass;var o=t[i].head,a=e.getTokenAt(o),l=y.innerMode(e.getMode(),a.state),s=l.state;if("xml"!=l.mode.name||!s.tagName)return y.Pass;var c="html"==l.mode.configuration,u="object"==typeof n&&n.dontCloseTags||c&&b,d="object"==typeof n&&n.indentTags||c&&w,f=s.tagName;a.end>o.ch&&(f=f.slice(0,f.length-a.end+o.ch));var h=f.toLowerCase();if(!f||"string"==a.type&&(a.end!=o.ch||!/[\"\']/.test(a.string.charAt(a.string.length-1))||1==a.string.length)||"tag"==a.type&&"closeTag"==s.type||a.string.indexOf("/")==a.string.length-1||u&&-1<x(u,h)||k(e,f,o,s,!0))return y.Pass;var p=d&&-1<x(d,h);r[i]={indent:p,text:">"+(p?"\n\n":"")+"</"+f+">",newPos:p?y.Pos(o.line+1,0):y.Pos(o.line,o.ch+1)}}for(var m="object"==typeof n&&n.dontIndentOnAutoClose,i=t.length-1;0<=i;i--){var g=r[i];e.replaceRange(g.text,t[i].head,t[i].anchor,"+insert");var v=e.listSelections().slice(0);v[i]={head:g.newPos,anchor:g.newPos},e.setSelections(v),!m&&g.indent&&(e.indentLine(g.newPos.line,null,!0),e.indentLine(g.newPos.line+1,null,!0))}}(e)}),e.addKeyMap(n)}});var b=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],w=["applet","blockquote","body","button","div","dl","fieldset","form","frameset","h1","h2","h3","h4","h5","h6","head","html","iframe","layer","legend","object","ol","p","select","table","ul"];function i(e,t){for(var r=e.listSelections(),n=[],i=t?"/":"</",o=e.getOption("autoCloseTags"),a="object"==typeof o&&o.dontIndentOnSlash,l=0;l<r.length;l++){if(!r[l].empty())return y.Pass;var s,c=r[l].head,u=e.getTokenAt(c),d=y.innerMode(e.getMode(),u.state),f=d.state;if(t&&("string"==u.type||"<"!=u.string.charAt(0)||u.start!=c.ch-1))return y.Pass;if("xml"!=d.mode.name)if("htmlmixed"==e.getMode().name&&"javascript"==d.mode.name)s=i+"script";else{if("htmlmixed"!=e.getMode().name||"css"!=d.mode.name)return y.Pass;s=i+"style"}else{if(!f.context||!f.context.tagName||k(e,f.context.tagName,c,f))return y.Pass;s=i+f.context.tagName}">"!=e.getLine(c.line).charAt(u.end)&&(s+=">"),n[l]=s}if(e.replaceSelections(n),r=e.listSelections(),!a)for(l=0;l<r.length;l++)(l==r.length-1||r[l].head.line<r[l+1].head.line)&&e.indentLine(r[l].head.line)}function x(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;++r)if(e[r]==t)return r;return-1}function k(e,t,r,n,i){if(!y.scanForClosingTag)return!1;var o=Math.min(e.lastLine()+1,r.line+500),a=y.scanForClosingTag(e,r,null,o);if(!a||a.tag!=t)return!1;for(var l=n.context,s=i?1:0;l&&l.tagName==t;l=l.prev)++s;r=a.to;for(var c=1;c<s;c++){var u=y.scanForClosingTag(e,r,null,o);if(!u||u.tag!=t)return!1;r=u.to}return!0}y.commands.closeTag=function(e){return i(e)}},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror"),e("../fold/xml-fold")):"function"==typeof o&&o.amd?o(["../../lib/codemirror","../fold/xml-fold"],n):n(CodeMirror)},{"../../lib/codemirror":14,"../fold/xml-fold":13}],12:[function(e,t,r){var n;n=function(a){"use strict";function l(e){e.state.tagHit&&e.state.tagHit.clear(),e.state.tagOther&&e.state.tagOther.clear(),e.state.tagHit=e.state.tagOther=null}function n(o){o.state.failedTagMatch=!1,o.operation(function(){if(l(o),!o.somethingSelected()){var e=o.getCursor(),t=o.getViewport();t.from=Math.min(t.from,e.line),t.to=Math.max(e.line+1,t.to);var r=a.findMatchingTag(o,e,t);if(r){if(o.state.matchBothTags){var n="open"==r.at?r.open:r.close;n&&(o.state.tagHit=o.markText(n.from,n.to,{className:"CodeMirror-matchingtag"}))}var i="close"==r.at?r.open:r.close;i?o.state.tagOther=o.markText(i.from,i.to,{className:"CodeMirror-matchingtag"}):o.state.failedTagMatch=!0}}})}function i(e){e.state.failedTagMatch&&n(e)}a.defineOption("matchTags",!1,function(e,t,r){r&&r!=a.Init&&(e.off("cursorActivity",n),e.off("viewportChange",i),l(e)),t&&(e.state.matchBothTags="object"==typeof t&&t.bothTags,e.on("cursorActivity",n),e.on("viewportChange",i),n(e))}),a.commands.toMatchingTag=function(e){var t=a.findMatchingTag(e,e.getCursor());if(t){var r="close"==t.at?t.open:t.close;r&&e.extendSelection(r.to,r.from)}}},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror"),e("../fold/xml-fold")):"function"==typeof o&&o.amd?o(["../../lib/codemirror","../fold/xml-fold"],n):n(CodeMirror)},{"../../lib/codemirror":14,"../fold/xml-fold":13}],13:[function(e,t,r){var n;n=function(e){"use strict";var s=e.Pos;function c(e,t){return e.line-t.line||e.ch-t.ch}var t="A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",n=new RegExp("<(/?)(["+t+"][A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD-:.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*)","g");function u(e,t,r,n){this.line=t,this.ch=r,this.cm=e,this.text=e.getLine(t),this.min=n?Math.max(n.from,e.firstLine()):e.firstLine(),this.max=n?Math.min(n.to-1,e.lastLine()):e.lastLine()}function i(e,t){var r=e.cm.getTokenTypeAt(s(e.line,t));return r&&/\btag\b/.test(r)}function o(e){if(!(e.line>=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function a(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function d(e){for(;;){var t=e.text.indexOf(">",e.ch);if(-1==t){if(o(e))continue;return}if(i(e,t+1)){var r=e.text.lastIndexOf("/",t),n=-1<r&&!/\S/.test(e.text.slice(r+1,t));return e.ch=t+1,n?"selfClose":"regular"}e.ch=t+1}}function f(e){for(;;){var t=e.ch?e.text.lastIndexOf("<",e.ch-1):-1;if(-1==t){if(a(e))continue;return}if(i(e,t+1)){n.lastIndex=t,e.ch=t;var r=n.exec(e.text);if(r&&r.index==t)return r}else e.ch=t}}function h(e){for(;;){n.lastIndex=e.ch;var t=n.exec(e.text);if(!t){if(o(e))continue;return}if(i(e,t.index+1))return e.ch=t.index+t[0].length,t;e.ch=t.index+1}}function p(e){for(;;){var t=e.ch?e.text.lastIndexOf(">",e.ch-1):-1;if(-1==t){if(a(e))continue;return}if(i(e,t+1)){var r=e.text.lastIndexOf("/",t),n=-1<r&&!/\S/.test(e.text.slice(r+1,t));return e.ch=t+1,n?"selfClose":"regular"}e.ch=t}}function m(e,t){for(var r=[];;){var n,i=h(e),o=e.line,a=e.ch-(i?i[0].length:0);if(!i||!(n=d(e)))return;if("selfClose"!=n)if(i[1]){for(var l=r.length-1;0<=l;--l)if(r[l]==i[2]){r.length=l;break}if(l<0&&(!t||t==i[2]))return{tag:i[2],from:s(o,a),to:s(e.line,e.ch)}}else r.push(i[2])}}function g(e,t){for(var r=[];;){var n=p(e);if(!n)return;if("selfClose"!=n){var i=e.line,o=e.ch,a=f(e);if(!a)return;if(a[1])r.push(a[2]);else{for(var l=r.length-1;0<=l;--l)if(r[l]==a[2]){r.length=l;break}if(l<0&&(!t||t==a[2]))return{tag:a[2],from:s(e.line,e.ch),to:s(i,o)}}}else f(e)}}e.registerHelper("fold","xml",function(e,t){for(var r=new u(e,t.line,0);;){var n=h(r);if(!n||r.line!=t.line)return;var i=d(r);if(!i)return;if(!n[1]&&"selfClose"!=i){var o=s(r.line,r.ch),a=m(r,n[2]);return a&&0<c(a.from,o)?{from:o,to:a.from}:null}}}),e.findMatchingTag=function(e,t,r){var n=new u(e,t.line,t.ch,r);if(-1!=n.text.indexOf(">")||-1!=n.text.indexOf("<")){var i=d(n),o=i&&s(n.line,n.ch),a=i&&f(n);if(i&&a&&!(0<c(n,t))){var l={from:s(n.line,n.ch),to:o,tag:a[2]};return"selfClose"==i?{open:l,close:null,at:"open"}:a[1]?{open:g(n,a[2]),close:l,at:"close"}:{open:l,close:m(n=new u(e,o.line,o.ch,r),a[2]),at:"open"}}}},e.findEnclosingTag=function(e,t,r,n){for(var i=new u(e,t.line,t.ch,r);;){var o=g(i,n);if(!o)break;var a=m(new u(e,t.line,t.ch,r),o.tag);if(a)return{open:o,close:a}}},e.scanForClosingTag=function(e,t,r,n){return m(new u(e,t.line,t.ch,n?{from:0,to:n}:null),r)}},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror")):"function"==typeof o&&o.amd?o(["../../lib/codemirror"],n):n(CodeMirror)},{"../../lib/codemirror":14}],14:[function(e,t,r){var n,i;n=this,i=function(){"use strict";var e=navigator.userAgent,t=navigator.platform,m=/gecko\/\d/i.test(e),r=/MSIE \d/.test(e),n=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),i=/Edge\/(\d+)/.exec(e),x=r||n||i,k=x&&(r?document.documentMode||6:+(i||n)[1]),b=!i&&/WebKit\//.test(e),o=b&&/Qt\/\d+\.\d+/.test(e),a=!i&&/Chrome\//.test(e),g=/Opera\//.test(e),s=/Apple Computer/.test(navigator.vendor),l=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),c=/PhantomJS/.test(e),u=!i&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),d=/Android/.test(e),f=u||d||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),w=u||/Mac/.test(t),h=/\bCrOS\b/.test(e),p=/win/i.test(t),v=g&&e.match(/Version\/(\d*\.\d*)/);v&&(v=Number(v[1])),v&&15<=v&&(b=!(g=!1));var y=w&&(o||g&&(null==v||v<12.11)),C=m||x&&9<=k;function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var T,L=function(e,t){var r=e.className,n=S(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:"")}};function M(e){for(var t=e.childNodes.length;0<t;--t)e.removeChild(e.firstChild);return e}function O(e,t){return M(e).appendChild(t)}function A(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function N(e,t,r,n){var i=A(e,t,r,n);return i.setAttribute("role","presentation"),i}function D(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function P(){var t;try{t=document.activeElement}catch(e){t=document.body||null}for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;return t}function _(e,t){var r=e.className;S(t).test(r)||(e.className+=(r?" ":"")+t)}function F(e,t){for(var r=e.split(" "),n=0;n<r.length;n++)r[n]&&!S(r[n]).test(t)&&(t+=" "+r[n]);return t}T=document.createRange?function(e,t,r,n){var i=document.createRange();return i.setEnd(n||e,r),i.setStart(e,t),i}:function(e,t,r){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(e){return n}return n.collapse(!0),n.moveEnd("character",r),n.moveStart("character",t),n};var W=function(e){e.select()};function z(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function E(e,t,r){for(var n in t||(t={}),e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function H(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=n||0,a=i||0;;){var l=e.indexOf("\t",o);if(l<0||t<=l)return a+(t-o);a+=l-o,a+=r-a%r,o=l+1}}u?W=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:x&&(W=function(e){try{e.select()}catch(e){}});var I=function(){this.id=null};function j(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}I.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var B=30,R={toString:function(){return"CodeMirror.Pass"}},q={scroll:!1},U={origin:"*mouse"},V={origin:"+move"};function K(e,t,r){for(var n=0,i=0;;){var o=e.indexOf("\t",n);-1==o&&(o=e.length);var a=o-n;if(o==e.length||t<=i+a)return n+Math.min(a,t-i);if(i+=o-n,n=o+1,t<=(i+=r-i%r))return n}}var G=[""];function $(e){for(;G.length<=e;)G.push(X(G)+" ");return G[e]}function X(e){return e[e.length-1]}function Y(e,t){for(var r=[],n=0;n<e.length;n++)r[n]=t(e[n],n);return r}function Z(){}function Q(e,t){var r;return Object.create?r=Object.create(e):(Z.prototype=e,r=new Z),t&&E(t,r),r}var J=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function ee(e){return/\w/.test(e)||"\80"<e&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(-1<t.source.indexOf("\\w")&&ee(e))||t.test(e):ee(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ie(e){return 768<=e.charCodeAt(0)&&ne.test(e)}function oe(e,t,r){for(;(r<0?0<t:t<e.length)&&ie(e.charAt(t));)t+=r;return t}function ae(e,t,r){for(var n=r<t?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}function le(e,t,r){var n=this;this.input=r,n.scrollbarFiller=A("div",null,"CodeMirror-scrollbar-filler"),n.scrollbarFiller.setAttribute("cm-not-content","true"),n.gutterFiller=A("div",null,"CodeMirror-gutter-filler"),n.gutterFiller.setAttribute("cm-not-content","true"),n.lineDiv=N("div",null,"CodeMirror-code"),n.selectionDiv=A("div",null,null,"position: relative; z-index: 1"),n.cursorDiv=A("div",null,"CodeMirror-cursors"),n.measure=A("div",null,"CodeMirror-measure"),n.lineMeasure=A("div",null,"CodeMirror-measure"),n.lineSpace=N("div",[n.measure,n.lineMeasure,n.selectionDiv,n.cursorDiv,n.lineDiv],null,"position: relative; outline: none");var i=N("div",[n.lineSpace],"CodeMirror-lines");n.mover=A("div",[i],null,"position: relative"),n.sizer=A("div",[n.mover],"CodeMirror-sizer"),n.sizerWidth=null,n.heightForcer=A("div",null,null,"position: absolute; height: "+B+"px; width: 1px;"),n.gutters=A("div",null,"CodeMirror-gutters"),n.lineGutter=null,n.scroller=A("div",[n.sizer,n.heightForcer,n.gutters],"CodeMirror-scroll"),n.scroller.setAttribute("tabIndex","-1"),n.wrapper=A("div",[n.scrollbarFiller,n.gutterFiller,n.scroller],"CodeMirror"),x&&k<8&&(n.gutters.style.zIndex=-1,n.scroller.style.paddingRight=0),b||m&&f||(n.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(n.wrapper):e(n.wrapper)),n.viewFrom=n.viewTo=t.first,n.reportedViewFrom=n.reportedViewTo=t.first,n.view=[],n.renderedView=null,n.externalMeasured=null,n.viewOffset=0,n.lastWrapHeight=n.lastWrapWidth=0,n.updateLineNumbers=null,n.nativeBarWidth=n.barHeight=n.barWidth=0,n.scrollbarsClipped=!1,n.lineNumWidth=n.lineNumInnerWidth=n.lineNumChars=null,n.alignWidgets=!1,n.cachedCharWidth=n.cachedTextHeight=n.cachedPaddingH=null,n.maxLine=null,n.maxLineLength=0,n.maxLineChanged=!1,n.wheelDX=n.wheelDY=n.wheelStartX=n.wheelStartY=null,n.shift=!1,n.selForContextMenu=null,n.activeTouch=null,r.init(n)}function se(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t<o){r=i;break}t-=o}return r.lines[t]}function ce(e,r,n){var i=[],o=r.line;return e.iter(r.line,n.line+1,function(e){var t=e.text;o==n.line&&(t=t.slice(0,n.ch)),o==r.line&&(t=t.slice(r.ch)),i.push(t),++o}),i}function ue(e,t,r){var n=[];return e.iter(t,r,function(e){n.push(e.text)}),n}function de(e,t){var r=t-e.height;if(r)for(var n=e;n;n=n.parent)n.height+=r}function fe(e){if(null==e.parent)return null;for(var t=e.parent,r=j(t.lines,e),n=t.parent;n;n=(t=n).parent)for(var i=0;n.children[i]!=t;++i)r+=n.children[i].chunkSize();return r+t.first}function he(e,t){var r=e.first;e:do{for(var n=0;n<e.children.length;++n){var i=e.children[n],o=i.height;if(t<o){e=i;continue e}t-=o,r+=i.chunkSize()}return r}while(!e.lines);for(var a=0;a<e.lines.length;++a){var l=e.lines[a].height;if(t<l)break;t-=l}return r+a}function pe(e,t){return t>=e.first&&t<e.first+e.size}function me(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function ge(e,t,r){if(void 0===r&&(r=null),!(this instanceof ge))return new ge(e,t,r);this.line=e,this.ch=t,this.sticky=r}function ve(e,t){return e.line-t.line||e.ch-t.ch}function ye(e,t){return e.sticky==t.sticky&&0==ve(e,t)}function be(e){return ge(e.line,e.ch)}function we(e,t){return ve(e,t)<0?t:e}function xe(e,t){return ve(e,t)<0?e:t}function ke(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function Ce(e,t){if(t.line<e.first)return ge(e.first,0);var r,n,i,o=e.first+e.size-1;return t.line>o?ge(o,se(e,o).text.length):(n=se(e,(r=t).line).text.length,null==(i=r.ch)||n<i?ge(r.line,n):i<0?ge(r.line,0):r)}function Se(e,t){for(var r=[],n=0;n<t.length;n++)r[n]=Ce(e,t[n]);return r}var Te=!1,Le=!1;function Me(e,t,r){this.marker=e,this.from=t,this.to=r}function Oe(e,t){if(e)for(var r=0;r<e.length;++r){var n=e[r];if(n.marker==t)return n}}function Ne(e,t){for(var r,n=0;n<e.length;++n)e[n]!=t&&(r||(r=[])).push(e[n]);return r}function Ae(e,t){if(t.full)return null;var r=pe(e,t.from.line)&&se(e,t.from.line).markedSpans,n=pe(e,t.to.line)&&se(e,t.to.line).markedSpans;if(!r&&!n)return null;var i=t.from.ch,o=t.to.ch,a=0==ve(t.from,t.to),l=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],a=o.marker;if(null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t)||o.from==t&&"bookmark"==a.type&&(!r||!o.marker.insertLeft)){var l=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);(n||(n=[])).push(new Me(a,o.from,l?null:o.to))}}return n}(r,i,a),s=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],a=o.marker;if(null==o.to||(a.inclusiveRight?o.to>=t:o.to>t)||o.from==t&&"bookmark"==a.type&&(!r||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);(n||(n=[])).push(new Me(a,l?null:o.from-t,null==o.to?null:o.to-t))}}return n}(n,o,a),c=1==t.text.length,u=X(t.text).length+(c?i:0);if(l)for(var d=0;d<l.length;++d){var f=l[d];if(null==f.to){var h=Oe(s,f.marker);h?c&&(f.to=null==h.to?null:h.to+u):f.to=i}}if(s)for(var p=0;p<s.length;++p){var m=s[p];if(null!=m.to&&(m.to+=u),null==m.from)Oe(l,m.marker)||(m.from=u,c&&(l||(l=[])).push(m));else m.from+=u,c&&(l||(l=[])).push(m)}l&&(l=De(l)),s&&s!=l&&(s=De(s));var g=[l];if(!c){var v,y=t.text.length-2;if(0<y&&l)for(var b=0;b<l.length;++b)null==l[b].to&&(v||(v=[])).push(new Me(l[b].marker,null,null));for(var w=0;w<y;++w)g.push(v);g.push(s)}return g}function De(e){for(var t=0;t<e.length;++t){var r=e[t];null!=r.from&&r.from==r.to&&!1!==r.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function Pe(e){var t=e.markedSpans;if(t){for(var r=0;r<t.length;++r)t[r].marker.detachLine(e);e.markedSpans=null}}function _e(e,t){if(t){for(var r=0;r<t.length;++r)t[r].marker.attachLine(e);e.markedSpans=t}}function Fe(e){return e.inclusiveLeft?-1:0}function We(e){return e.inclusiveRight?1:0}function ze(e,t){var r=e.lines.length-t.lines.length;if(0!=r)return r;var n=e.find(),i=t.find(),o=ve(n.from,i.from)||Fe(e)-Fe(t);if(o)return-o;var a=ve(n.to,i.to)||We(e)-We(t);return a||t.id-e.id}function Ee(e,t){var r,n=Le&&e.markedSpans;if(n)for(var i=void 0,o=0;o<n.length;++o)(i=n[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!r||ze(r,i.marker)<0)&&(r=i.marker);return r}function He(e){return Ee(e,!0)}function Ie(e){return Ee(e,!1)}function je(e,t){var r,n=Le&&e.markedSpans;if(n)for(var i=0;i<n.length;++i){var o=n[i];o.marker.collapsed&&(null==o.from||o.from<t)&&(null==o.to||o.to>t)&&(!r||ze(r,o.marker)<0)&&(r=o.marker)}return r}function Be(e,t,r,n,i){var o=se(e,t),a=Le&&o.markedSpans;if(a)for(var l=0;l<a.length;++l){var s=a[l];if(s.marker.collapsed){var c=s.marker.find(0),u=ve(c.from,r)||Fe(s.marker)-Fe(i),d=ve(c.to,n)||We(s.marker)-We(i);if(!(0<=u&&d<=0||u<=0&&0<=d)&&(u<=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?0<=ve(c.to,r):0<ve(c.to,r))||0<=u&&(s.marker.inclusiveRight&&i.inclusiveLeft?ve(c.from,n)<=0:ve(c.from,n)<0)))return!0}}}function Re(e){for(var t;t=He(e);)e=t.find(-1,!0).line;return e}function qe(e,t){var r=se(e,t),n=Re(r);return r==n?t:fe(n)}function Ue(e,t){if(t>e.lastLine())return t;var r,n=se(e,t);if(!Ve(e,n))return t;for(;r=Ie(n);)n=r.find(1,!0).line;return fe(n)+1}function Ve(e,t){var r=Le&&t.markedSpans;if(r)for(var n=void 0,i=0;i<r.length;++i)if((n=r[i]).marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&Ke(e,t,n))return!0}}function Ke(e,t,r){if(null==r.to){var n=r.marker.find(1,!0);return Ke(e,n.line,Oe(n.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if((i=t.markedSpans[o]).marker.collapsed&&!i.marker.widgetNode&&i.from==r.to&&(null==i.to||i.to!=r.from)&&(i.marker.inclusiveLeft||r.marker.inclusiveRight)&&Ke(e,t,i))return!0}function Ge(e){for(var t=0,r=(e=Re(e)).parent,n=0;n<r.lines.length;++n){var i=r.lines[n];if(i==e)break;t+=i.height}for(var o=r.parent;o;o=(r=o).parent)for(var a=0;a<o.children.length;++a){var l=o.children[a];if(l==r)break;t+=l.height}return t}function $e(e){if(0==e.height)return 0;for(var t,r=e.text.length,n=e;t=He(n);){var i=t.find(0,!0);n=i.from.line,r+=i.from.ch-i.to.ch}for(n=e;t=Ie(n);){var o=t.find(0,!0);r-=n.text.length-o.from.ch,r+=(n=o.to.line).text.length-o.to.ch}return r}function Xe(e){var r=e.display,t=e.doc;r.maxLine=se(t,t.first),r.maxLineLength=$e(r.maxLine),r.maxLineChanged=!0,t.iter(function(e){var t=$e(e);t>r.maxLineLength&&(r.maxLineLength=t,r.maxLine=e)})}var Ye=null;function Ze(e,t,r){var n;Ye=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:Ye=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:Ye=i)}return null!=n?n:Ye}var Qe=function(){var E="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",H="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";var I=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,j=/[stwN]/,B=/[LRr]/,R=/[Lb1n]/,q=/[1n]/;function U(e,t,r){this.level=e,this.from=t,this.to=r}return function(e,t){var r="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!I.test(e))return!1;for(var n,i=e.length,o=[],a=0;a<i;++a)o.push((n=e.charCodeAt(a))<=247?E.charAt(n):1424<=n&&n<=1524?"R":1536<=n&&n<=1785?H.charAt(n-1536):1774<=n&&n<=2220?"r":8192<=n&&n<=8203?"w":8204==n?"b":"L");for(var l=0,s=r;l<i;++l){var c=o[l];"m"==c?o[l]=s:s=c}for(var u=0,d=r;u<i;++u){var f=o[u];"1"==f&&"r"==d?o[u]="n":B.test(f)&&"r"==(d=f)&&(o[u]="R")}for(var h=1,p=o[0];h<i-1;++h){var m=o[h];"+"==m&&"1"==p&&"1"==o[h+1]?o[h]="1":","!=m||p!=o[h+1]||"1"!=p&&"n"!=p||(o[h]=p),p=m}for(var g=0;g<i;++g){var v=o[g];if(","==v)o[g]="N";else if("%"==v){var y=void 0;for(y=g+1;y<i&&"%"==o[y];++y);for(var b=g&&"!"==o[g-1]||y<i&&"1"==o[y]?"1":"N",w=g;w<y;++w)o[w]=b;g=y-1}}for(var x=0,k=r;x<i;++x){var C=o[x];"L"==k&&"1"==C?o[x]="L":B.test(C)&&(k=C)}for(var S=0;S<i;++S)if(j.test(o[S])){var T=void 0;for(T=S+1;T<i&&j.test(o[T]);++T);for(var L="L"==(S?o[S-1]:r),M=L==("L"==(T<i?o[T]:r))?L?"L":"R":r,O=S;O<T;++O)o[O]=M;S=T-1}for(var N,A=[],D=0;D<i;)if(R.test(o[D])){var P=D;for(++D;D<i&&R.test(o[D]);++D);A.push(new U(0,P,D))}else{var _=D,F=A.length;for(++D;D<i&&"L"!=o[D];++D);for(var W=_;W<D;)if(q.test(o[W])){_<W&&A.splice(F,0,new U(1,_,W));var z=W;for(++W;W<D&&q.test(o[W]);++W);A.splice(F,0,new U(2,z,W)),_=W}else++W;_<D&&A.splice(F,0,new U(1,_,D))}return"ltr"==t&&(1==A[0].level&&(N=e.match(/^\s+/))&&(A[0].from=N[0].length,A.unshift(new U(0,0,N[0].length))),1==X(A).level&&(N=e.match(/\s+$/))&&(X(A).to-=N[0].length,A.push(new U(0,i-N[0].length,i)))),"rtl"==t?A.reverse():A}}();function Je(e,t){var r=e.order;return null==r&&(r=e.order=Qe(e.text,t)),r}var et=[],tt=function(e,t,r){if(e.addEventListener)e.addEventListener(t,r,!1);else if(e.attachEvent)e.attachEvent("on"+t,r);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||et).concat(r)}};function rt(e,t){return e._handlers&&e._handlers[t]||et}function nt(e,t,r){if(e.removeEventListener)e.removeEventListener(t,r,!1);else if(e.detachEvent)e.detachEvent("on"+t,r);else{var n=e._handlers,i=n&&n[t];if(i){var o=j(i,r);-1<o&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function it(e,t){var r=rt(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i<r.length;++i)r[i].apply(null,n)}function ot(e,t,r){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),it(e,r||t.type,e,t),dt(t)||t.codemirrorIgnore}function at(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var r=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),n=0;n<t.length;++n)-1==j(r,t[n])&&r.push(t[n])}function lt(e,t){return 0<rt(e,t).length}function st(e){e.prototype.on=function(e,t){tt(this,e,t)},e.prototype.off=function(e,t){nt(this,e,t)}}function ct(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function ut(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function dt(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ft(e){ct(e),ut(e)}function ht(e){return e.target||e.srcElement}function pt(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),w&&e.ctrlKey&&1==t&&(t=3),t}var mt,gt,vt=function(){if(x&&k<9)return!1;var e=A("div");return"draggable"in e||"dragDrop"in e}();function yt(e){if(null==mt){var t=A("span","");O(e,A("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(mt=t.offsetWidth<=1&&2<t.offsetHeight&&!(x&&k<8))}var r=mt?A("span",""):A("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function bt(e){if(null!=gt)return gt;var t=O(e,document.createTextNode("AخA")),r=T(t,0,1).getBoundingClientRect(),n=T(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(gt=n.right-r.right<3)}var wt,xt=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),a=o.indexOf("\r");-1!=a?(r.push(o.slice(0,a)),t+=a+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},kt=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Ct="oncopy"in(wt=A("div"))||(wt.setAttribute("oncopy","return;"),"function"==typeof wt.oncopy),St=null;var Tt={},Lt={};function Mt(e){if("string"==typeof e&&Lt.hasOwnProperty(e))e=Lt[e];else if(e&&"string"==typeof e.name&&Lt.hasOwnProperty(e.name)){var t=Lt[e.name];"string"==typeof t&&(t={name:t}),(e=Q(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Mt("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Mt("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Ot(e,t){t=Mt(t);var r=Tt[t.name];if(!r)return Ot(e,"text/plain");var n=r(e,t);if(Nt.hasOwnProperty(t.name)){var i=Nt[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)n[a]=t.modeProps[a];return n}var Nt={};function At(e,t){E(t,Nt.hasOwnProperty(e)?Nt[e]:Nt[e]={})}function Dt(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Pt(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function _t(e,t,r){return!e.startState||e.startState(t,r)}var Ft=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};Ft.prototype.eol=function(){return this.pos>=this.string.length},Ft.prototype.sol=function(){return this.pos==this.lineStart},Ft.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ft.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Ft.prototype.eat=function(e){var t=this.string.charAt(this.pos);if("string"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},Ft.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},Ft.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ft.prototype.skipToEnd=function(){this.pos=this.string.length},Ft.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(-1<t)return this.pos=t,!0},Ft.prototype.backUp=function(e){this.pos-=e},Ft.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=H(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?H(this.string,this.lineStart,this.tabSize):0)},Ft.prototype.indentation=function(){return H(this.string,null,this.tabSize)-(this.lineStart?H(this.string,this.lineStart,this.tabSize):0)},Ft.prototype.match=function(e,t,r){if("string"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&0<n.index?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Ft.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ft.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ft.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ft.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var Wt=function(e,t){this.state=e,this.lookAhead=t},zt=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function Et(t,r,n,e){var s=[t.state.modeGen],i={};Kt(t,r.text,t.doc.mode,n,function(e,t){return s.push(e,t)},i,e);for(var c=n.state,o=function(e){n.baseTokens=s;var o=t.state.overlays[e],a=1,l=0;n.state=!0,Kt(t,r.text,o.mode,n,function(e,t){for(var r=a;l<e;){var n=s[a];e<n&&s.splice(a,1,e,s[a+1],n),a+=2,l=Math.min(e,n)}if(t)if(o.opaque)s.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;r<a;r+=2){var i=s[r+1];s[r+1]=(i?i+" ":"")+"overlay "+t}},i),n.state=c,n.baseTokens=null,n.baseTokenPos=1},a=0;a<t.state.overlays.length;++a)o(a);return{styles:s,classes:i.bgClass||i.textClass?i:null}}function Ht(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var n=It(e,fe(t)),i=t.text.length>e.options.maxHighlightLength&&Dt(e.doc.mode,n.state),o=Et(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function It(r,n,e){var t=r.doc,i=r.display;if(!t.mode.startState)return new zt(t,!0,n);var o=function(e,t,r){for(var n,i,o=e.doc,a=r?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;a<l;--l){if(l<=o.first)return o.first;var s=se(o,l-1),c=s.stateAfter;if(c&&(!r||l+(c instanceof Wt?c.lookAhead:0)<=o.modeFrontier))return l;var u=H(s.text,null,e.options.tabSize);(null==i||u<n)&&(i=l-1,n=u)}return i}(r,n,e),a=o>t.first&&se(t,o-1).stateAfter,l=a?zt.fromSaved(t,a,o):new zt(t,_t(t.mode),o);return t.iter(o,n,function(e){jt(r,e.text,l);var t=l.line;e.stateAfter=t==n-1||t%5==0||t>=i.viewFrom&&t<i.viewTo?l.save():null,l.nextLine()}),e&&(t.modeFrontier=l.line),l}function jt(e,t,r,n){var i=e.doc.mode,o=new Ft(t,e.options.tabSize,r);for(o.start=o.pos=n||0,""==t&&Bt(i,r.state);!o.eol();)Rt(i,o,r.state),o.start=o.pos}function Bt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var r=Pt(e,t);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Rt(e,t,r,n){for(var i=0;i<10;i++){n&&(n[0]=Pt(e,r).mode);var o=e.token(t,r);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}zt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},zt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},zt.prototype.nextLine=function(){this.line++,0<this.maxLookAhead&&this.maxLookAhead--},zt.fromSaved=function(e,t,r){return t instanceof Wt?new zt(e,Dt(e.mode,t.state),r,t.lookAhead):new zt(e,Dt(e.mode,t),r)},zt.prototype.save=function(e){var t=!1!==e?Dt(this.doc.mode,this.state):this.state;return 0<this.maxLookAhead?new Wt(t,this.maxLookAhead):t};var qt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function Ut(e,t,r,n){var i,o,a=e.doc,l=a.mode,s=se(a,(t=Ce(a,t)).line),c=It(e,t.line,r),u=new Ft(s.text,e.options.tabSize,c);for(n&&(o=[]);(n||u.pos<t.ch)&&!u.eol();)u.start=u.pos,i=Rt(l,u,c.state),n&&o.push(new qt(u,i,Dt(a.mode,c.state)));return n?o:new qt(u,i,c.state)}function Vt(e,t){if(e)for(;;){var r=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!r)break;e=e.slice(0,r.index)+e.slice(r.index+r[0].length);var n=r[1]?"bgClass":"textClass";null==t[n]?t[n]=r[2]:new RegExp("(?:^|s)"+r[2]+"(?:$|s)").test(t[n])||(t[n]+=" "+r[2])}return e}function Kt(e,t,r,n,i,o,a){var l=r.flattenSpans;null==l&&(l=e.options.flattenSpans);var s,c=0,u=null,d=new Ft(t,e.options.tabSize,n),f=e.options.addModeClass&&[null];for(""==t&&Vt(Bt(r,n.state),o);!d.eol();){if(d.pos>e.options.maxHighlightLength?(l=!1,a&&jt(e,t,n,d.pos),d.pos=t.length,s=null):s=Vt(Rt(r,d,n.state,f),o),f){var h=f[0].name;h&&(s="m-"+(s?h+" "+s:h))}if(!l||u!=s){for(;c<d.start;)i(c=Math.min(d.start,c+5e3),u);u=s}d.start=d.pos}for(;c<d.pos;){var p=Math.min(d.pos,c+5e3);i(p,u),c=p}}var Gt=function(e,t,r){this.text=e,_e(this,t),this.height=r?r(this):1};Gt.prototype.lineNo=function(){return fe(this)},st(Gt);var $t={},Xt={};function Yt(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?Xt:$t;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function Zt(e,t){var r=N("span",null,null,b?"padding-right: .1px":null),n={pre:N("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(x||b)&&e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,a=void 0;n.pos=0,n.addToken=Jt,bt(e.display.measure)&&(a=Je(o,e.doc.direction))&&(n.addToken=er(n.addToken,a)),n.map=[],rr(o,n,Ht(e,o,t!=e.display.externalMeasured&&fe(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||"")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(yt(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(b){var l=n.content.lastChild;(/\bcm-tab\b/.test(l.className)||l.querySelector&&l.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return it(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function Qt(e){var t=A("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Jt(e,t,r,n,i,o,a){if(t){var l,s=e.splitSpaces?function(e,t){if(1<e.length&&!/ /.test(e))return e;for(var r=t,n="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!r||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=" "),n+=o,r=" "==o}return n}(t,e.trailingSpace):t,c=e.cm.state.specialChars,u=!1;if(c.test(t)){l=document.createDocumentFragment();for(var d=0;;){c.lastIndex=d;var f=c.exec(t),h=f?f.index-d:t.length-d;if(h){var p=document.createTextNode(s.slice(d,d+h));x&&k<9?l.appendChild(A("span",[p])):l.appendChild(p),e.map.push(e.pos,e.pos+h,p),e.col+=h,e.pos+=h}if(!f)break;d+=h+1;var m=void 0;if("\t"==f[0]){var g=e.cm.options.tabSize,v=g-e.col%g;(m=l.appendChild(A("span",$(v),"cm-tab"))).setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),e.col+=v}else"\r"==f[0]||"\n"==f[0]?(m=l.appendChild(A("span","\r"==f[0]?"␍":"","cm-invalidchar"))).setAttribute("cm-text",f[0]):((m=e.cm.options.specialCharPlaceholder(f[0])).setAttribute("cm-text",f[0]),x&&k<9?l.appendChild(A("span",[m])):l.appendChild(m)),e.col+=1;e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,l=document.createTextNode(s),e.map.push(e.pos,e.pos+t.length,l),x&&k<9&&(u=!0),e.pos+=t.length;if(e.trailingSpace=32==s.charCodeAt(t.length-1),r||n||i||u||a){var y=r||"";n&&(y+=n),i&&(y+=i);var b=A("span",[l],y,a);return o&&(b.title=o),e.content.appendChild(b)}e.content.appendChild(l)}}function er(d,f){return function(e,t,r,n,i,o,a){r=r?r+" cm-force-border":"cm-force-border";for(var l=e.pos,s=l+t.length;;){for(var c=void 0,u=0;u<f.length&&!((c=f[u]).to>l&&c.from<=l);u++);if(c.to>=s)return d(e,t,r,n,i,o,a);d(e,t.slice(0,c.to-l),r,n,null,o,a),n=null,t=t.slice(c.to-l),l=c.to}}}function tr(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function rr(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var a,l,s,c,u,d,f,h=i.length,p=0,m=1,g="",v=0;;){if(v==p){s=c=u=d=l="",f=null,v=1/0;for(var y=[],b=void 0,w=0;w<n.length;++w){var x=n[w],k=x.marker;"bookmark"==k.type&&x.from==p&&k.widgetNode?y.push(k):x.from<=p&&(null==x.to||x.to>p||k.collapsed&&x.to==p&&x.from==p)?(null!=x.to&&x.to!=p&&v>x.to&&(v=x.to,c=""),k.className&&(s+=" "+k.className),k.css&&(l=(l?l+";":"")+k.css),k.startStyle&&x.from==p&&(u+=" "+k.startStyle),k.endStyle&&x.to==v&&(b||(b=[])).push(k.endStyle,x.to),k.title&&!d&&(d=k.title),k.collapsed&&(!f||ze(f.marker,k)<0)&&(f=x)):x.from>p&&v>x.from&&(v=x.from)}if(b)for(var C=0;C<b.length;C+=2)b[C+1]==v&&(c+=" "+b[C]);if(!f||f.from==p)for(var S=0;S<y.length;++S)tr(t,0,y[S]);if(f&&(f.from||0)==p){if(tr(t,(null==f.to?h+1:f.to)-p,f.marker,null==f.from),null==f.to)return;f.to==p&&(f=!1)}}if(h<=p)break;for(var T=Math.min(h,v);;){if(g){var L=p+g.length;if(!f){var M=T<L?g.slice(0,T-p):g;t.addToken(t,M,a?a+s:s,u,p+M.length==v?c:"",d,l)}if(T<=L){g=g.slice(T-p),p=T;break}p=L,u=""}g=i.slice(o,o=r[m++]),a=Yt(r[m++],t.cm.options)}}else for(var O=1;O<r.length;O+=2)t.addToken(t,i.slice(o,o=r[O]),Yt(r[O+1],t.cm.options))}function nr(e,t,r){this.line=t,this.rest=function(e){for(var t,r;t=Ie(e);)e=t.find(1,!0).line,(r||(r=[])).push(e);return r}(t),this.size=this.rest?fe(X(this.rest))-r+1:1,this.node=this.text=null,this.hidden=Ve(e,t)}function ir(e,t,r){for(var n,i=[],o=t;o<r;o=n){var a=new nr(e.doc,se(e.doc,o),o);n=o+a.size,i.push(a)}return i}var or=null;var ar=null;function lr(e,t){var r=rt(e,t);if(r.length){var n,i=Array.prototype.slice.call(arguments,2);or?n=or.delayedCallbacks:ar?n=ar:(n=ar=[],setTimeout(sr,0));for(var o=function(e){n.push(function(){return r[e].apply(null,i)})},a=0;a<r.length;++a)o(a)}}function sr(){var e=ar;ar=null;for(var t=0;t<e.length;++t)e[t]()}function cr(e,t,r,n){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?fr(e,t):"gutter"==o?pr(e,t,r,n):"class"==o?hr(e,t):"widget"==o&&mr(e,t,n)}t.changes=null}function ur(e){return e.node==e.text&&(e.node=A("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),x&&k<8&&(e.node.style.zIndex=2)),e.node}function dr(e,t){var r=e.display.externalMeasured;return r&&r.line==t.line?(e.display.externalMeasured=null,t.measure=r.measure,r.built):Zt(e,t)}function fr(e,t){var r=t.text.className,n=dr(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,hr(e,t)):r&&(t.text.className=r)}function hr(e,t){!function(e,t){var r=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(r&&(r+=" CodeMirror-linebackground"),t.background)r?t.background.className=r:(t.background.parentNode.removeChild(t.background),t.background=null);else if(r){var n=ur(t);t.background=n.insertBefore(A("div",null,r),n.firstChild),e.display.input.setUneditable(t.background)}}(e,t),t.line.wrapClass?ur(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var r=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=r||""}function pr(e,t,r,n){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var i=ur(t);t.gutterBackground=A("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+"px; width: "+n.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),i.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var a=ur(t),l=t.gutter=A("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+"px");if(e.display.input.setUneditable(l),a.insertBefore(l,t.text),t.line.gutterClass&&(l.className+=" "+t.line.gutterClass),!e.options.lineNumbers||o&&o["CodeMirror-linenumbers"]||(t.lineNumber=l.appendChild(A("div",me(e.options,r),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+n.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),o)for(var s=0;s<e.options.gutters.length;++s){var c=e.options.gutters[s],u=o.hasOwnProperty(c)&&o[c];u&&l.appendChild(A("div",[u],"CodeMirror-gutter-elt","left: "+n.gutterLeft[c]+"px; width: "+n.gutterWidth[c]+"px"))}}}function mr(e,t,r){t.alignable&&(t.alignable=null);for(var n=t.node.firstChild,i=void 0;n;n=i)i=n.nextSibling,"CodeMirror-linewidget"==n.className&&t.node.removeChild(n);gr(e,t,r)}function gr(e,t,r){if(vr(e,t.line,t,r,!0),t.rest)for(var n=0;n<t.rest.length;n++)vr(e,t.rest[n],t,r,!1)}function vr(e,t,r,n,i){if(t.widgets)for(var o=ur(r),a=0,l=t.widgets;a<l.length;++a){var s=l[a],c=A("div",[s.node],"CodeMirror-linewidget");s.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),yr(s,c,r,n),e.display.input.setUneditable(c),i&&s.above?o.insertBefore(c,r.gutter||r.text):o.appendChild(c),lr(s,"redraw")}}function yr(e,t,r,n){if(e.noHScroll){(r.alignable||(r.alignable=[])).push(t);var i=n.wrapperWidth;t.style.left=n.fixedPos+"px",e.coverGutter||(i-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+"px"))}function br(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!D(document.body,e.node)){var r="position: relative;";e.coverGutter&&(r+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(r+="width: "+t.display.wrapper.clientWidth+"px;"),O(t.display.measure,A("div",[e.node],null,r))}return e.height=e.node.parentNode.offsetHeight}function wr(e,t){for(var r=ht(t);r!=e.wrapper;r=r.parentNode)if(!r||1==r.nodeType&&"true"==r.getAttribute("cm-ignore-events")||r.parentNode==e.sizer&&r!=e.mover)return!0}function xr(e){return e.lineSpace.offsetTop}function kr(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Cr(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=O(e.measure,A("pre","x")),r=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,n={left:parseInt(r.paddingLeft),right:parseInt(r.paddingRight)};return isNaN(n.left)||isNaN(n.right)||(e.cachedPaddingH=n),n}function Sr(e){return B-e.display.nativeBarWidth}function Tr(e){return e.display.scroller.clientWidth-Sr(e)-e.display.barWidth}function Lr(e){return e.display.scroller.clientHeight-Sr(e)-e.display.barHeight}function Mr(e,t,r){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var n=0;n<e.rest.length;n++)if(e.rest[n]==t)return{map:e.measure.maps[n],cache:e.measure.caches[n]};for(var i=0;i<e.rest.length;i++)if(fe(e.rest[i])>r)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Or(e,t,r,n){return Dr(e,Ar(e,t),r,n)}function Nr(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[ln(e,t)];var r=e.display.externalMeasured;return r&&t>=r.lineN&&t<r.lineN+r.size?r:void 0}function Ar(e,t){var r=fe(t),n=Nr(e,r);n&&!n.text?n=null:n&&n.changes&&(cr(e,n,r,tn(e)),e.curOp.forceUpdate=!0),n||(n=function(e,t){var r=fe(t=Re(t)),n=e.display.externalMeasured=new nr(e.doc,t,r);n.lineN=r;var i=n.built=Zt(e,n);return n.text=i.pre,O(e.display.lineMeasure,i.pre),n}(e,t));var i=Mr(n,t,r);return{line:t,view:n,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function Dr(e,t,r,n,i){t.before&&(r=-1);var o,a=r+(n||"");return t.cache.hasOwnProperty(a)?o=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(!function(e,t,r){var n=e.options.lineWrapping,i=n&&Tr(e);if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[];if(n){t.measure.width=i;for(var a=t.text.firstChild.getClientRects(),l=0;l<a.length-1;l++){var s=a[l],c=a[l+1];2<Math.abs(s.bottom-c.bottom)&&o.push((s.bottom+c.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Fr(t.map,r,n),a=o.node,l=o.start,s=o.end,c=o.collapse;if(3==a.nodeType){for(var u=0;u<4;u++){for(;l&&ie(t.line.text.charAt(o.coverStart+l));)--l;for(;o.coverStart+s<o.coverEnd&&ie(t.line.text.charAt(o.coverStart+s));)++s;if((i=x&&k<9&&0==l&&s==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():Wr(T(a,l,s).getClientRects(),n)).left||i.right||0==l)break;s=l,l-=1,c="right"}x&&k<11&&(i=function(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!function(e){if(null!=St)return St;var t=O(e,A("span","x")),r=t.getBoundingClientRect(),n=T(t,0,1).getBoundingClientRect();return St=1<Math.abs(r.left-n.left)}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;0<l&&(c=n="right"),i=e.options.lineWrapping&&1<(d=a.getClientRects()).length?d["right"==n?d.length-1:0]:a.getBoundingClientRect()}if(x&&k<9&&!l&&(!i||!i.left&&!i.right)){var f=a.parentNode.getClientRects()[0];i=f?{left:f.left,right:f.left+en(e.display),top:f.top,bottom:f.bottom}:_r}for(var h=i.top-t.rect.top,p=i.bottom-t.rect.top,m=(h+p)/2,g=t.view.measure.heights,v=0;v<g.length-1&&!(m<g[v]);v++);var y=v?g[v-1]:0,b=g[v],w={left:("right"==c?i.right:i.left)-t.rect.left,right:("left"==c?i.left:i.right)-t.rect.left,top:y,bottom:b};i.left||i.right||(w.bogus=!0);e.options.singleCursorHeightPerLine||(w.rtop=h,w.rbottom=p);return w}(e,t,r,n)).bogus||(t.cache[a]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var Pr,_r={left:0,right:0,top:0,bottom:0};function Fr(e,t,r){for(var n,i,o,a,l,s,c=0;c<e.length;c+=3)if(l=e[c],s=e[c+1],t<l?(i=0,o=1,a="left"):t<s?o=(i=t-l)+1:(c==e.length-3||t==s&&e[c+3]>t)&&(i=(o=s-l)-1,s<=t&&(a="right")),null!=i){if(n=e[c+2],l==s&&r==(n.insertLeft?"left":"right")&&(a=r),"left"==r&&0==i)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)n=e[2+(c-=3)],a="left";if("right"==r&&i==s-l)for(;c<e.length-3&&e[c+3]==e[c+4]&&!e[c+5].insertLeft;)n=e[(c+=3)+2],a="right";break}return{node:n,start:i,end:o,collapse:a,coverStart:l,coverEnd:s}}function Wr(e,t){var r=_r;if("left"==t)for(var n=0;n<e.length&&(r=e[n]).left==r.right;n++);else for(var i=e.length-1;0<=i&&(r=e[i]).left==r.right;i--);return r}function zr(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function Er(e){e.display.externalMeasure=null,M(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)zr(e.display.view[t])}function Hr(e){Er(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function Ir(){return a&&d?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function jr(){return a&&d?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function Br(e){var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;++r)e.widgets[r].above&&(t+=br(e.widgets[r]));return t}function Rr(e,t,r,n,i){if(!i){var o=Br(t);r.top+=o,r.bottom+=o}if("line"==n)return r;n||(n="local");var a=Ge(t);if("local"==n?a+=xr(e.display):a-=e.display.viewOffset,"page"==n||"window"==n){var l=e.display.lineSpace.getBoundingClientRect();a+=l.top+("window"==n?0:jr());var s=l.left+("window"==n?0:Ir());r.left+=s,r.right+=s}return r.top+=a,r.bottom+=a,r}function qr(e,t,r){if("div"==r)return t;var n=t.left,i=t.top;if("page"==r)n-=Ir(),i-=jr();else if("local"==r||!r){var o=e.display.sizer.getBoundingClientRect();n+=o.left,i+=o.top}var a=e.display.lineSpace.getBoundingClientRect();return{left:n-a.left,top:i-a.top}}function Ur(e,t,r,n,i){return n||(n=se(e.doc,t.line)),Rr(e,n,Or(e,n,t.ch,i),r)}function Vr(n,e,i,o,a,l){function s(e,t){var r=Dr(n,a,e,t?"right":"left",l);return t?r.left=r.right:r.right=r.left,Rr(n,o,r,i)}o=o||se(n.doc,e.line),a||(a=Ar(n,o));var c=Je(o,n.doc.direction),t=e.ch,r=e.sticky;if(t>=o.text.length?(t=o.text.length,r="before"):t<=0&&(t=0,r="after"),!c)return s("before"==r?t-1:t,"before"==r);function u(e,t,r){return s(r?e-1:e,1==c[t].level!=r)}var d=Ze(c,t,r),f=Ye,h=u(t,d,"before"==r);return null!=f&&(h.other=u(t,f,"before"!=r)),h}function Kr(e,t){var r=0;t=Ce(e.doc,t),e.options.lineWrapping||(r=en(e.display)*t.ch);var n=se(e.doc,t.line),i=Ge(n)+xr(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function Gr(e,t,r,n,i){var o=ge(e,t,r);return o.xRel=i,n&&(o.outside=!0),o}function $r(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return Gr(n.first,0,null,!0,-1);var i=he(n,r),o=n.first+n.size-1;if(o<i)return Gr(n.first+n.size-1,se(n,o).text.length,null,!0,1);t<0&&(t=0);for(var a=se(n,i);;){var l=Qr(e,a,i,t,r),s=je(a,l.ch+(0<l.xRel?1:0));if(!s)return l;var c=s.find(1);if(c.line==i)return c;a=se(n,i=c.line)}}function Xr(t,e,r,n){n-=Br(e);var i=e.text.length,o=ae(function(e){return Dr(t,r,e-1).bottom<=n},i,0);return{begin:o,end:i=ae(function(e){return Dr(t,r,e).top>n},o,i)}}function Yr(e,t,r,n){return r||(r=Ar(e,t)),Xr(e,t,r,Rr(e,t,Dr(e,r,n),"line").top)}function Zr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function Qr(r,e,t,n,i){i-=Ge(e);var o=Ar(r,e),a=Br(e),l=0,s=e.text.length,c=!0,u=Je(e,r.doc.direction);if(u){var d=(r.options.lineWrapping?function(e,t,r,n,i,o,a){var l=Xr(e,t,n,a),s=l.begin,c=l.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,d=null,f=0;f<i.length;f++){var h=i[f];if(!(h.from>=c||h.to<=s)){var p=1!=h.level,m=Dr(e,n,p?Math.min(c,h.to)-1:Math.max(s,h.from)).right,g=m<o?o-m+1e9:m-o;(!u||g<d)&&(u=h,d=g)}}u||(u=i[i.length-1]);u.from<s&&(u={from:s,to:u.to,level:u.level});u.to>c&&(u={from:u.from,to:c,level:u.level});return u}:function(n,i,o,a,l,s,c){var e=ae(function(e){var t=l[e],r=1!=t.level;return Zr(Vr(n,ge(o,r?t.to:t.from,r?"before":"after"),"line",i,a),s,c,!0)},0,l.length-1),t=l[e];if(0<e){var r=1!=t.level,u=Vr(n,ge(o,r?t.from:t.to,r?"after":"before"),"line",i,a);Zr(u,s,c,!0)&&u.top>c&&(t=l[e-1])}return t})(r,e,t,o,u,n,i);l=(c=1!=d.level)?d.from:d.to-1,s=c?d.to:d.from-1}var f,h,p=null,m=null,g=ae(function(e){var t=Dr(r,o,e);return t.top+=a,t.bottom+=a,!!Zr(t,n,i,!1)&&(t.top<=i&&t.left<=n&&(p=e,m=t),!0)},l,s),v=!1;if(m){var y=n-m.left<m.right-n,b=y==c;g=p+(b?0:1),h=b?"after":"before",f=y?m.left:m.right}else{c||g!=s&&g!=l||g++,h=0==g?"after":g==e.text.length?"before":Dr(r,o,g-(c?1:0)).bottom+a<=i==c?"after":"before";var w=Vr(r,ge(t,g,h),"line",e,o);f=w.left,v=i<w.top||i>=w.bottom}return Gr(t,g=oe(e.text,g,1),h,v,n-f)}function Jr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Pr){Pr=A("pre");for(var t=0;t<49;++t)Pr.appendChild(document.createTextNode("x")),Pr.appendChild(A("br"));Pr.appendChild(document.createTextNode("x"))}O(e.measure,Pr);var r=Pr.offsetHeight/50;return 3<r&&(e.cachedTextHeight=r),M(e.measure),r||1}function en(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=A("span","xxxxxxxxxx"),r=A("pre",[t]);O(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return 2<i&&(e.cachedCharWidth=i),i||10}function tn(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a)r[e.options.gutters[a]]=o.offsetLeft+o.clientLeft+i,n[e.options.gutters[a]]=o.clientWidth;return{fixedPos:rn(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function rn(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function nn(n){var i=Jr(n.display),o=n.options.lineWrapping,a=o&&Math.max(5,n.display.scroller.clientWidth/en(n.display)-3);return function(e){if(Ve(n.doc,e))return 0;var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;r++)e.widgets[r].height&&(t+=e.widgets[r].height);return o?t+(Math.ceil(e.text.length/a)||1)*i:t+i}}function on(e){var t=e.doc,r=nn(e);t.iter(function(e){var t=r(e);t!=e.height&&de(e,t)})}function an(e,t,r,n){var i=e.display;if(!r&&"true"==ht(t).getAttribute("cm-not-content"))return null;var o,a,l=i.lineSpace.getBoundingClientRect();try{o=t.clientX-l.left,a=t.clientY-l.top}catch(t){return null}var s,c=$r(e,o,a);if(n&&1==c.xRel&&(s=se(e.doc,c.line).text).length==c.ch){var u=H(s,s.length,e.options.tabSize)-s.length;c=ge(c.line,Math.max(0,Math.round((o-Cr(e.display).left)/en(e.display))-u))}return c}function ln(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;n<r.length;n++)if((t-=r[n].size)<0)return n}function sn(e){e.display.input.showSelection(e.display.input.prepareSelection())}function cn(e,t){void 0===t&&(t=!0);for(var r=e.doc,n={},i=n.cursors=document.createDocumentFragment(),o=n.selection=document.createDocumentFragment(),a=0;a<r.sel.ranges.length;a++)if(t||a!=r.sel.primIndex){var l=r.sel.ranges[a];if(!(l.from().line>=e.display.viewTo||l.to().line<e.display.viewFrom)){var s=l.empty();(s||e.options.showCursorWhenSelecting)&&un(e,l.head,i),s||fn(e,l,o)}}return n}function un(e,t,r){var n=Vr(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),i=r.appendChild(A("div"," ","CodeMirror-cursor"));if(i.style.left=n.left+"px",i.style.top=n.top+"px",i.style.height=Math.max(0,n.bottom-n.top)*e.options.cursorHeight+"px",n.other){var o=r.appendChild(A("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));o.style.display="",o.style.left=n.other.left+"px",o.style.top=n.other.top+"px",o.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function dn(e,t){return e.top-t.top||e.left-t.left}function fn(a,e,t){var r=a.display,n=a.doc,i=document.createDocumentFragment(),o=Cr(a.display),L=o.left,M=Math.max(r.sizerWidth,Tr(a)-r.sizer.offsetLeft)-o.right,O="ltr"==n.direction;function N(e,t,r,n){t<0&&(t=0),t=Math.round(t),n=Math.round(n),i.appendChild(A("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==r?M-e:r)+"px;\n height: "+(n-t)+"px"))}function l(r,y,b){var w,x,o=se(n,r),k=o.text.length;function C(e,t){return Ur(a,ge(r,e),"div",o,t)}function S(e,t,r){var n=Yr(a,o,null,e),i="ltr"==t==("after"==r)?"left":"right";return C("after"==r?n.begin:n.end-(/\s/.test(o.text.charAt(n.end-1))?2:1),i)[i]}var T=Je(o,n.direction);return function(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var a=e[o];(a.from<r&&a.to>t||t==r&&a.to==t)&&(n(Math.max(a.from,t),Math.min(a.to,r),1==a.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(T,y||0,null==b?k:b,function(e,t,r,n){var i="ltr"==r,o=C(e,i?"left":"right"),a=C(t-1,i?"right":"left"),l=null==y&&0==e,s=null==b&&t==k,c=0==n,u=!T||n==T.length-1;if(a.top-o.top<=3){var d=(O?s:l)&&u,f=(O?l:s)&&c?L:(i?o:a).left,h=d?M:(i?a:o).right;N(f,o.top,h-f,o.bottom)}else{var p,m,g,v;i?(p=O&&l&&c?L:o.left,m=O?M:S(e,r,"before"),g=O?L:S(t,r,"after"),v=O&&s&&u?M:a.right):(p=O?S(e,r,"before"):L,m=!O&&l&&c?M:o.right,g=!O&&s&&u?L:a.left,v=O?S(t,r,"after"):M),N(p,o.top,m-p,o.bottom),o.bottom<a.top&&N(L,o.bottom,null,a.top),N(g,a.top,v-g,a.bottom)}(!w||dn(o,w)<0)&&(w=o),dn(a,w)<0&&(w=a),(!x||dn(o,x)<0)&&(x=o),dn(a,x)<0&&(x=a)}),{start:w,end:x}}var s=e.from(),c=e.to();if(s.line==c.line)l(s.line,s.ch,c.ch);else{var u=se(n,s.line),d=se(n,c.line),f=Re(u)==Re(d),h=l(s.line,s.ch,f?u.text.length+1:null).end,p=l(c.line,f?0:null,c.ch).start;f&&(h.top<p.top-2?(N(h.right,h.top,null,h.bottom),N(L,p.top,p.left,p.bottom)):N(h.right,h.top,p.left-h.right,h.bottom)),h.bottom<p.top&&N(L,h.bottom,null,p.top)}t.appendChild(i)}function hn(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var r=!0;t.cursorDiv.style.visibility="",0<e.options.cursorBlinkRate?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function pn(e){e.state.focused||(e.display.input.focus(),gn(e))}function mn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,vn(e))},100)}function gn(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(it(e,"focus",e,t),e.state.focused=!0,_(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),b&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),hn(e))}function vn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(it(e,"blur",e,t),e.state.focused=!1,L(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function yn(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n<t.view.length;n++){var i=t.view[n],o=void 0;if(!i.hidden){if(x&&k<8){var a=i.node.offsetTop+i.node.offsetHeight;o=a-r,r=a}else{var l=i.node.getBoundingClientRect();o=l.bottom-l.top}var s=i.line.height-o;if(o<2&&(o=Jr(t)),(.005<s||s<-.005)&&(de(i.line,o),bn(i.line),i.rest))for(var c=0;c<i.rest.length;c++)bn(i.rest[c])}}}function bn(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var r=e.widgets[t],n=r.node.parentNode;n&&(r.height=n.offsetHeight)}}function wn(e,t,r){var n=r&&null!=r.top?Math.max(0,r.top):e.scroller.scrollTop;n=Math.floor(n-xr(e));var i=r&&null!=r.bottom?r.bottom:n+e.wrapper.clientHeight,o=he(t,n),a=he(t,i);if(r&&r.ensure){var l=r.ensure.from.line,s=r.ensure.to.line;l<o?a=he(t,Ge(se(t,o=l))+e.wrapper.clientHeight):Math.min(s,t.lastLine())>=a&&(o=he(t,Ge(se(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function xn(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=rn(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",a=0;a<r.length;a++)if(!r[a].hidden){e.options.fixedGutter&&(r[a].gutter&&(r[a].gutter.style.left=o),r[a].gutterBackground&&(r[a].gutterBackground.style.left=o));var l=r[a].alignable;if(l)for(var s=0;s<l.length;s++)l[s].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=n+i+"px")}}function kn(e){if(!e.options.lineNumbers)return!1;var t=e.doc,r=me(e.options,t.first+t.size-1),n=e.display;if(r.length!=n.lineNumChars){var i=n.measure.appendChild(A("div",[A("div",r)],"CodeMirror-linenumber CodeMirror-gutter-elt")),o=i.firstChild.offsetWidth,a=i.offsetWidth-o;return n.lineGutter.style.width="",n.lineNumInnerWidth=Math.max(o,n.lineGutter.offsetWidth-a)+1,n.lineNumWidth=n.lineNumInnerWidth+a,n.lineNumChars=n.lineNumInnerWidth?r.length:-1,n.lineGutter.style.width=n.lineNumWidth+"px",li(e),!0}return!1}function Cn(e,t){var r=e.display,n=Jr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Lr(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var l=e.doc.height+kr(r),s=t.top<n,c=t.bottom>l-n;if(t.top<i)a.scrollTop=s?0:t.top;else if(t.bottom>i+o){var u=Math.min(t.top,(c?l:t.bottom)-o);u!=i&&(a.scrollTop=u)}var d=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,f=Tr(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),h=t.right-t.left>f;return h&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.left<d?a.scrollLeft=Math.max(0,t.left-(h?0:10)):t.right>f+d-3&&(a.scrollLeft=t.right+(h?0:10)-f),a}function Sn(e,t){null!=t&&(Mn(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Tn(e){Mn(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Ln(e,t,r){null==t&&null==r||Mn(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function Mn(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,On(e,Kr(e,t.from),Kr(e,t.to),t.margin))}function On(e,t,r,n){var i=Cn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Ln(e,i.scrollLeft,i.scrollTop)}function Nn(e,t){Math.abs(e.doc.scrollTop-t)<2||(m||ai(e,{top:t}),An(e,t,!0),m&&ai(e),ti(e,100))}function An(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Dn(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,xn(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Pn(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+kr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Sr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var _n=function(e,t,r){this.cm=r;var n=this.vert=A("div",[A("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=A("div",[A("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=i.tabIndex=-1,e(n),e(i),tt(n,"scroll",function(){n.clientHeight&&t(n.scrollTop,"vertical")}),tt(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,x&&k<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};_n.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&0<e.clientHeight&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},_n.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},_n.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},_n.prototype.zeroWidthHack=function(){var e=w&&!l?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new I,this.disableVert=new I},_n.prototype.enableZeroWidthBar=function(r,n,i){r.style.pointerEvents="auto",n.set(1e3,function e(){var t=r.getBoundingClientRect();("vert"==i?document.elementFromPoint(t.right-1,(t.top+t.bottom)/2):document.elementFromPoint((t.right+t.left)/2,t.bottom-1))!=r?r.style.pointerEvents="none":n.set(1e3,e)})},_n.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Fn=function(){};function Wn(e,t){t||(t=Pn(e));var r=e.display.barWidth,n=e.display.barHeight;zn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&yn(e),zn(e,Pn(e)),r=e.display.barWidth,n=e.display.barHeight}function zn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}Fn.prototype.update=function(){return{bottom:0,right:0}},Fn.prototype.setScrollLeft=function(){},Fn.prototype.setScrollTop=function(){},Fn.prototype.clear=function(){};var En={native:_n,null:Fn};function Hn(r){r.display.scrollbars&&(r.display.scrollbars.clear(),r.display.scrollbars.addClass&&L(r.display.wrapper,r.display.scrollbars.addClass)),r.display.scrollbars=new En[r.options.scrollbarStyle](function(e){r.display.wrapper.insertBefore(e,r.display.scrollbarFiller),tt(e,"mousedown",function(){r.state.focused&&setTimeout(function(){return r.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,t){"horizontal"==t?Dn(r,e):Nn(r,e)},r),r.display.scrollbars.addClass&&_(r.display.wrapper,r.display.scrollbars.addClass)}var In=0;function jn(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++In},t=e.curOp,or?or.ops.push(t):t.ownsGroup=or={ops:[t],delayedCallbacks:[]}}function Bn(e){!function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r<t.length;r++)t[r].call(null);for(var n=0;n<e.ops.length;n++){var i=e.ops[n];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(r<t.length)}(r)}finally{or=null,t(r)}}(e.curOp,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;!function(e){for(var t=e.ops,r=0;r<t.length;r++)Rn(t[r]);for(var n=0;n<t.length;n++)(i=t[n]).updatedDisplay=i.mustUpdate&&ii(i.cm,i.update);var i;for(var o=0;o<t.length;o++)qn(t[o]);for(var a=0;a<t.length;a++)Un(t[a]);for(var l=0;l<t.length;l++)Vn(t[l])}(e)})}function Rn(e){var t,r,n=e.cm,i=n.display;!(r=(t=n).display).scrollbarsClipped&&r.scroller.offsetWidth&&(r.nativeBarWidth=r.scroller.offsetWidth-r.scroller.clientWidth,r.heightForcer.style.height=Sr(t)+"px",r.sizer.style.marginBottom=-r.nativeBarWidth+"px",r.sizer.style.borderRightWidth=Sr(t)+"px",r.scrollbarsClipped=!0),e.updateMaxLine&&Xe(n),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<i.viewFrom||e.scrollToPos.to.line>=i.viewTo)||i.maxLineChanged&&n.options.lineWrapping,e.update=e.mustUpdate&&new ni(n,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function qn(e){var t=e.cm,r=t.display;e.updatedDisplay&&yn(t),e.barMeasure=Pn(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Or(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Sr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Tr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function Un(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&Dn(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var r=e.focus&&e.focus==P();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r),(e.updatedDisplay||e.startHeight!=t.doc.height)&&Wn(t,e.barMeasure),e.updatedDisplay&&si(t,e.barMeasure),e.selectionChanged&&hn(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),r&&pn(e.cm)}function Vn(e){var t=e.cm,r=t.display,n=t.doc;(e.updatedDisplay&&oi(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e.scrollTop&&An(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&Dn(t,e.scrollLeft,!0,!0),e.scrollToPos)&&function(e,t){if(!ot(e,"scrollCursorIntoView")){var r=e.display,n=r.sizer.getBoundingClientRect(),i=null;if(t.top+n.top<0?i=!0:t.bottom+n.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!c){var o=A("div","",null,"position: absolute;\n top: "+(t.top-r.viewOffset-xr(e.display))+"px;\n height: "+(t.bottom-t.top+Sr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r="before"==(t=t.ch?ge(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?ge(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var a=!1,l=Vr(e,t),s=r&&r!=t?Vr(e,r):l,c=Cn(e,i={left:Math.min(l.left,s.left),top:Math.min(l.top,s.top)-n,right:Math.max(l.left,s.left),bottom:Math.max(l.bottom,s.bottom)+n}),u=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=c.scrollTop&&(Nn(e,c.scrollTop),1<Math.abs(e.doc.scrollTop-u)&&(a=!0)),null!=c.scrollLeft&&(Dn(e,c.scrollLeft),1<Math.abs(e.doc.scrollLeft-d)&&(a=!0)),!a)break}return i}(t,Ce(n,e.scrollToPos.from),Ce(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var a=0;a<i.length;++a)i[a].lines.length||it(i[a],"hide");if(o)for(var l=0;l<o.length;++l)o[l].lines.length&&it(o[l],"unhide");r.wrapper.offsetHeight&&(n.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&it(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function Kn(e,t){if(e.curOp)return t();jn(e);try{return t()}finally{Bn(e)}}function Gn(e,t){return function(){if(e.curOp)return t.apply(e,arguments);jn(e);try{return t.apply(e,arguments)}finally{Bn(e)}}}function $n(e){return function(){if(this.curOp)return e.apply(this,arguments);jn(this);try{return e.apply(this,arguments)}finally{Bn(this)}}}function Xn(t){return function(){var e=this.cm;if(!e||e.curOp)return t.apply(this,arguments);jn(e);try{return t.apply(this,arguments)}finally{Bn(e)}}}function Yn(e,t,r,n){null==t&&(t=e.doc.first),null==r&&(r=e.doc.first+e.doc.size),n||(n=0);var i=e.display;if(n&&r<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Le&&qe(e.doc,t)<i.viewTo&&Qn(e);else if(r<=i.viewFrom)Le&&Ue(e.doc,r+n)>i.viewFrom?Qn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)Qn(e);else if(t<=i.viewFrom){var o=Jn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):Qn(e)}else if(r>=i.viewTo){var a=Jn(e,t,t,-1);a?(i.view=i.view.slice(0,a.index),i.viewTo=a.lineN):Qn(e)}else{var l=Jn(e,t,t,-1),s=Jn(e,r,r+n,1);l&&s?(i.view=i.view.slice(0,l.index).concat(ir(e,l.lineN,s.lineN)).concat(i.view.slice(s.index)),i.viewTo+=n):Qn(e)}var c=i.externalMeasured;c&&(r<c.lineN?c.lineN+=n:t<c.lineN+c.size&&(i.externalMeasured=null))}function Zn(e,t,r){e.curOp.viewChanged=!0;var n=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(n.externalMeasured=null),!(t<n.viewFrom||t>=n.viewTo)){var o=n.view[ln(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==j(a,r)&&a.push(r)}}}function Qn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Jn(e,t,r,n){var i,o=ln(e,t),a=e.display.view;if(!Le||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var l=e.display.viewFrom,s=0;s<o;s++)l+=a[s].size;if(l!=t){if(0<n){if(o==a.length-1)return null;i=l+a[o].size-t,o++}else i=l-t;t+=i,r+=i}for(;qe(e.doc,r)!=r;){if(o==(n<0?0:a.length-1))return null;r+=n*a[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function ei(e){for(var t=e.display.view,r=0,n=0;n<t.length;n++){var i=t[n];i.hidden||i.node&&!i.changes||++r}return r}function ti(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,z(ri,e))}function ri(s){var c=s.doc;if(!(c.highlightFrontier>=s.display.viewTo)){var u=+new Date+s.options.workTime,d=It(s,c.highlightFrontier),f=[];c.iter(d.line,Math.min(c.first+c.size,s.display.viewTo+500),function(e){if(d.line>=s.display.viewFrom){var t=e.styles,r=e.text.length>s.options.maxHighlightLength?Dt(c.mode,d.state):null,n=Et(s,e,d,!0);r&&(d.state=r),e.styles=n.styles;var i=e.styleClasses,o=n.classes;o?e.styleClasses=o:i&&(e.styleClasses=null);for(var a=!t||t.length!=e.styles.length||i!=o&&(!i||!o||i.bgClass!=o.bgClass||i.textClass!=o.textClass),l=0;!a&&l<t.length;++l)a=t[l]!=e.styles[l];a&&f.push(d.line),e.stateAfter=d.save(),d.nextLine()}else e.text.length<=s.options.maxHighlightLength&&jt(s,e.text,d),e.stateAfter=d.line%5==0?d.save():null,d.nextLine();if(+new Date>u)return ti(s,s.options.workDelay),!0}),c.highlightFrontier=d.line,c.modeFrontier=Math.max(c.modeFrontier,d.line),f.length&&Kn(s,function(){for(var e=0;e<f.length;e++)Zn(s,f[e],"text")})}}var ni=function(e,t,r){var n=e.display;this.viewport=t,this.visible=wn(n,e.doc,t),this.editorIsHidden=!n.wrapper.offsetWidth,this.wrapperHeight=n.wrapper.clientHeight,this.wrapperWidth=n.wrapper.clientWidth,this.oldDisplayWidth=Tr(e),this.force=r,this.dims=tn(e),this.events=[]};function ii(e,t){var r=e.display,n=e.doc;if(t.editorIsHidden)return Qn(e),!1;if(!t.force&&t.visible.from>=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==ei(e))return!1;kn(e)&&(Qn(e),t.dims=tn(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),a=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFrom<o&&o-r.viewFrom<20&&(o=Math.max(n.first,r.viewFrom)),r.viewTo>a&&r.viewTo-a<20&&(a=Math.min(i,r.viewTo)),Le&&(o=qe(e.doc,o),a=Ue(e.doc,a));var l,s,c,u,d=o!=r.viewFrom||a!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;s=o,c=a,0==(u=(l=e).display).view.length||s>=u.viewTo||c<=u.viewFrom?(u.view=ir(l,s,c),u.viewFrom=s):(u.viewFrom>s?u.view=ir(l,s,u.viewFrom).concat(u.view):u.viewFrom<s&&(u.view=u.view.slice(ln(l,s))),u.viewFrom=s,u.viewTo<c?u.view=u.view.concat(ir(l,u.viewTo,c)):u.viewTo>c&&(u.view=u.view.slice(0,ln(l,c)))),u.viewTo=c,r.viewOffset=Ge(se(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var f=ei(e);if(!d&&0==f&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var h=function(e){if(e.hasFocus())return null;var t=P();if(!t||!D(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&D(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return 4<f&&(r.lineDiv.style.display="none"),function(r,e,t){var n=r.display,i=r.options.lineNumbers,o=n.lineDiv,a=o.firstChild;function l(e){var t=e.nextSibling;return b&&w&&r.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),t}for(var s=n.view,c=n.viewFrom,u=0;u<s.length;u++){var d=s[u];if(d.hidden);else if(d.node&&d.node.parentNode==o){for(;a!=d.node;)a=l(a);var f=i&&null!=e&&e<=c&&d.lineNumber;d.changes&&(-1<j(d.changes,"gutter")&&(f=!1),cr(r,d,c,t)),f&&(M(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(me(r.options,c)))),a=d.node.nextSibling}else{var h=(g=c,v=t,void 0,y=dr(p=r,m=d),m.text=m.node=y.pre,y.bgClass&&(m.bgClass=y.bgClass),y.textClass&&(m.textClass=y.textClass),hr(p,m),pr(p,m,g,v),gr(p,m,v),m.node);o.insertBefore(h,a)}c+=d.size}var p,m,g,v,y;for(;a;)a=l(a)}(e,r.updateLineNumbers,t.dims),4<f&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=P()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(h),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,d&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,ti(e,400)),!(r.updateLineNumbers=null)}function oi(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Tr(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+kr(e.display)-Lr(e),r.top)}),t.visible=wn(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ii(e,t);n=!1){yn(e);var i=Pn(e);sn(e),Wn(e,i),si(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function ai(e,t){var r=new ni(e,t);if(ii(e,r)){yn(e),oi(e,r);var n=Pn(e);sn(e),Wn(e,n),si(e,n),r.finish()}}function li(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function si(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Sr(e)+"px"}function ci(e){var t=e.display.gutters,r=e.options.gutters;M(t);for(var n=0;n<r.length;++n){var i=r[n],o=t.appendChild(A("div",null,"CodeMirror-gutter "+i));"CodeMirror-linenumbers"==i&&((e.display.lineGutter=o).style.width=(e.display.lineNumWidth||1)+"px")}t.style.display=n?"":"none",li(e)}function ui(e){var t=j(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):-1<t&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}ni.prototype.signal=function(e,t){lt(e,t)&&this.events.push(arguments)},ni.prototype.finish=function(){for(var e=0;e<this.events.length;e++)it.apply(null,this.events[e])};var di=0,fi=null;function hi(e){var t=e.wheelDeltaX,r=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==r&&e.detail&&e.axis==e.VERTICAL_AXIS?r=e.detail:null==r&&(r=e.wheelDelta),{x:t,y:r}}function pi(e){var t=hi(e);return t.x*=fi,t.y*=fi,t}function mi(e,t){var r=hi(t),n=r.x,i=r.y,o=e.display,a=o.scroller,l=a.scrollWidth>a.clientWidth,s=a.scrollHeight>a.clientHeight;if(n&&l||i&&s){if(i&&w&&b)e:for(var c=t.target,u=o.view;c!=a;c=c.parentNode)for(var d=0;d<u.length;d++)if(u[d].node==c){e.display.currentWheelTarget=c;break e}if(n&&!m&&!g&&null!=fi)return i&&s&&Nn(e,Math.max(0,a.scrollTop+i*fi)),Dn(e,Math.max(0,a.scrollLeft+n*fi)),(!i||i&&s)&&ct(t),void(o.wheelStartX=null);if(i&&null!=fi){var f=i*fi,h=e.doc.scrollTop,p=h+o.wrapper.clientHeight;f<0?h=Math.max(0,h+f-50):p=Math.min(e.doc.height,p+f+50),ai(e,{top:h,bottom:p})}di<20&&(null==o.wheelStartX?(o.wheelStartX=a.scrollLeft,o.wheelStartY=a.scrollTop,o.wheelDX=n,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=a.scrollLeft-o.wheelStartX,t=a.scrollTop-o.wheelStartY,r=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,r&&(fi=(fi*di+r)/(di+1),++di)}},200)):(o.wheelDX+=n,o.wheelDY+=i))}}x?fi=-.53:m?fi=15:a?fi=-.7:s&&(fi=-1/3);var gi=function(e,t){this.ranges=e,this.primIndex=t};gi.prototype.primary=function(){return this.ranges[this.primIndex]},gi.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var r=this.ranges[t],n=e.ranges[t];if(!ye(r.anchor,n.anchor)||!ye(r.head,n.head))return!1}return!0},gi.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new vi(be(this.ranges[t].anchor),be(this.ranges[t].head));return new gi(e,this.primIndex)},gi.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},gi.prototype.contains=function(e,t){t||(t=e);for(var r=0;r<this.ranges.length;r++){var n=this.ranges[r];if(0<=ve(t,n.from())&&ve(e,n.to())<=0)return r}return-1};var vi=function(e,t){this.anchor=e,this.head=t};function yi(e,t){var r=e[t];e.sort(function(e,t){return ve(e.from(),t.from())}),t=j(e,r);for(var n=1;n<e.length;n++){var i=e[n],o=e[n-1];if(0<=ve(o.to(),i.from())){var a=xe(o.from(),i.from()),l=we(o.to(),i.to()),s=o.empty()?i.from()==i.head:o.from()==o.head;n<=t&&--t,e.splice(--n,2,new vi(s?l:a,s?a:l))}}return new gi(e,t)}function bi(e,t){return new gi([new vi(e,t||e)],0)}function wi(e){return e.text?ge(e.from.line+e.text.length-1,X(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function xi(e,t){if(ve(e,t.from)<0)return e;if(ve(e,t.to)<=0)return wi(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=wi(t).ch-t.to.ch),ge(r,n)}function ki(e,t){for(var r=[],n=0;n<e.sel.ranges.length;n++){var i=e.sel.ranges[n];r.push(new vi(xi(i.anchor,t),xi(i.head,t)))}return yi(r,e.sel.primIndex)}function Ci(e,t,r){return e.line==t.line?ge(r.line,e.ch-t.ch+r.ch):ge(r.line+(e.line-t.line),e.ch)}function Si(e){e.doc.mode=Ot(e.options,e.doc.modeOption),Ti(e)}function Ti(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,ti(e,100),e.state.modeGen++,e.curOp&&Yn(e)}function Li(e,t){return 0==t.from.ch&&0==t.to.ch&&""==X(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Mi(e,n,t,i){function o(e){return t?t[e]:null}function r(e,t,r){!function(e,t,r,n){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),Pe(e),_e(e,r);var i=n?n(e):1;i!=e.height&&de(e,i)}(e,t,r,i),lr(e,"change",e,n)}function a(e,t){for(var r=[],n=e;n<t;++n)r.push(new Gt(c[n],o(n),i));return r}var l=n.from,s=n.to,c=n.text,u=se(e,l.line),d=se(e,s.line),f=X(c),h=o(c.length-1),p=s.line-l.line;if(n.full)e.insert(0,a(0,c.length)),e.remove(c.length,e.size-c.length);else if(Li(e,n)){var m=a(0,c.length-1);r(d,d.text,h),p&&e.remove(l.line,p),m.length&&e.insert(l.line,m)}else if(u==d)if(1==c.length)r(u,u.text.slice(0,l.ch)+f+u.text.slice(s.ch),h);else{var g=a(1,c.length-1);g.push(new Gt(f+u.text.slice(s.ch),h,i)),r(u,u.text.slice(0,l.ch)+c[0],o(0)),e.insert(l.line+1,g)}else if(1==c.length)r(u,u.text.slice(0,l.ch)+c[0]+d.text.slice(s.ch),o(0)),e.remove(l.line+1,p);else{r(u,u.text.slice(0,l.ch)+c[0],o(0)),r(d,f+d.text.slice(s.ch),h);var v=a(1,c.length-1);1<p&&e.remove(l.line+1,p-1),e.insert(l.line+1,v)}lr(e,"change",e,n)}function Oi(e,l,s){!function e(t,r,n){if(t.linked)for(var i=0;i<t.linked.length;++i){var o=t.linked[i];if(o.doc!=r){var a=n&&o.sharedHist;s&&!a||(l(o.doc,a),e(o.doc,t,a))}}}(e,null,!0)}function Ni(e,t){if(t.cm)throw new Error("This document is already in use.");on((e.doc=t).cm=e),Si(e),Ai(e),e.options.lineWrapping||Xe(e),e.options.mode=t.modeOption,Yn(e)}function Ai(e){("rtl"==e.doc.direction?_:L)(e.display.lineDiv,"CodeMirror-rtl")}function Di(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function Pi(e,t){var r={from:be(t.from),to:wi(t),text:ce(e,t.from,t.to)};return Ei(e,r,t.from.line,t.to.line+1),Oi(e,function(e){return Ei(e,r,t.from.line,t.to.line+1)},!0),r}function _i(e){for(;e.length;){if(!X(e).ranges)break;e.pop()}}function Fi(e,t,r,n){var i=e.history;i.undone.length=0;var o,a,l,s=+new Date;if((i.lastOp==n||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&i.lastModTime>s-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=(l=i).lastOp==n?(_i(l.done),X(l.done)):l.done.length&&!X(l.done).ranges?X(l.done):1<l.done.length&&!l.done[l.done.length-2].ranges?(l.done.pop(),X(l.done)):void 0))a=X(o.changes),0==ve(t.from,t.to)&&0==ve(t.from,a.to)?a.to=wi(t):o.changes.push(Pi(e,t));else{var c=X(i.done);for(c&&c.ranges||zi(e.sel,i.done),o={changes:[Pi(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,a||it(e,"historyAdded")}function Wi(e,t,r,n){var i,o,a,l,s,c=e.history,u=n&&n.origin;r==c.lastSelOp||u&&c.lastSelOrigin==u&&(c.lastModTime==c.lastSelTime&&c.lastOrigin==u||(i=e,o=u,a=X(c.done),l=t,"*"==(s=o.charAt(0))||"+"==s&&a.ranges.length==l.ranges.length&&a.somethingSelected()==l.somethingSelected()&&new Date-i.history.lastSelTime<=(i.cm?i.cm.options.historyEventDelay:500)))?c.done[c.done.length-1]=t:zi(t,c.done),c.lastSelTime=+new Date,c.lastSelOrigin=u,c.lastSelOp=r,n&&!1!==n.clearRedo&&_i(c.undone)}function zi(e,t){var r=X(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Ei(t,r,e,n){var i=r["spans_"+t.id],o=0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,n),function(e){e.markedSpans&&((i||(i=r["spans_"+t.id]={}))[o]=e.markedSpans),++o})}function Hi(e){if(!e)return null;for(var t,r=0;r<e.length;++r)e[r].marker.explicitlyCleared?t||(t=e.slice(0,r)):t&&t.push(e[r]);return t?t.length?t:null:e}function Ii(e,t){var r=function(e,t){var r=t["spans_"+e.id];if(!r)return null;for(var n=[],i=0;i<t.text.length;++i)n.push(Hi(r[i]));return n}(e,t),n=Ae(e,t);if(!r)return n;if(!n)return r;for(var i=0;i<r.length;++i){var o=r[i],a=n[i];if(o&&a)e:for(var l=0;l<a.length;++l){for(var s=a[l],c=0;c<o.length;++c)if(o[c].marker==s.marker)continue e;o.push(s)}else a&&(r[i]=a)}return r}function ji(e,t,r){for(var n=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)n.push(r?gi.prototype.deepCopy.call(o):o);else{var a=o.changes,l=[];n.push({changes:l});for(var s=0;s<a.length;++s){var c=a[s],u=void 0;if(l.push({from:c.from,to:c.to,text:c.text}),t)for(var d in c)(u=d.match(/^spans_(\d+)$/))&&-1<j(t,Number(u[1]))&&(X(l)[d]=c[d],delete c[d])}}}return n}function Bi(e,t,r,n){if(n){var i=e.anchor;if(r){var o=ve(t,i)<0;o!=ve(r,i)<0?(i=t,t=r):o!=ve(t,r)<0&&(t=r)}return new vi(i,t)}return new vi(r||t,t)}function Ri(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),Gi(e,new gi([Bi(e.sel.primary(),t,r,i)],0),n)}function qi(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)n[o]=Bi(e.sel.ranges[o],t[o],null,i);Gi(e,yi(n,e.sel.primIndex),r)}function Ui(e,t,r,n){var i=e.sel.ranges.slice(0);i[t]=r,Gi(e,yi(i,e.sel.primIndex),n)}function Vi(e,t,r,n){Gi(e,bi(t,r),n)}function Ki(e,t,r){var n=e.history.done,i=X(n);i&&i.ranges?$i(e,n[n.length-1]=t,r):Gi(e,t,r)}function Gi(e,t,r){$i(e,t,r),Wi(e,e.sel,e.cm?e.cm.curOp.id:NaN,r)}function $i(e,t,r){var n,i,o,a;(lt(e,"beforeSelectionChange")||e.cm&<(e.cm,"beforeSelectionChange"))&&(n=e,o=r,a={ranges:(i=t).ranges,update:function(e){this.ranges=[];for(var t=0;t<e.length;t++)this.ranges[t]=new vi(Ce(n,e[t].anchor),Ce(n,e[t].head))},origin:o&&o.origin},it(n,"beforeSelectionChange",n,a),n.cm&&it(n.cm,"beforeSelectionChange",n.cm,a),t=a.ranges!=i.ranges?yi(a.ranges,a.ranges.length-1):i),Xi(e,Zi(e,t,r&&r.bias||(ve(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),r&&!1===r.scroll||!e.cm||Tn(e.cm)}function Xi(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,at(e.cm)),lr(e,"cursorActivity",e))}function Yi(e){Xi(e,Zi(e,e.sel,null,!1))}function Zi(e,t,r,n){for(var i,o=0;o<t.ranges.length;o++){var a=t.ranges[o],l=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],s=Ji(e,a.anchor,l&&l.anchor,r,n),c=Ji(e,a.head,l&&l.head,r,n);(i||s!=a.anchor||c!=a.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new vi(s,c))}return i?yi(i,t.primIndex):t}function Qi(e,t,r,n,i){var o=se(e,t.line);if(o.markedSpans)for(var a=0;a<o.markedSpans.length;++a){var l=o.markedSpans[a],s=l.marker;if((null==l.from||(s.inclusiveLeft?l.from<=t.ch:l.from<t.ch))&&(null==l.to||(s.inclusiveRight?l.to>=t.ch:l.to>t.ch))){if(i&&(it(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(r){var c=s.find(n<0?1:-1),u=void 0;if((n<0?s.inclusiveRight:s.inclusiveLeft)&&(c=eo(e,c,-n,c&&c.line==t.line?o:null)),c&&c.line==t.line&&(u=ve(c,r))&&(n<0?u<0:0<u))return Qi(e,c,t,n,i)}var d=s.find(n<0?-1:1);return(n<0?s.inclusiveLeft:s.inclusiveRight)&&(d=eo(e,d,n,d.line==t.line?o:null)),d?Qi(e,d,t,n,i):null}}return t}function Ji(e,t,r,n,i){var o=n||1,a=Qi(e,t,r,o,i)||!i&&Qi(e,t,r,o,!0)||Qi(e,t,r,-o,i)||!i&&Qi(e,t,r,-o,!0);return a||(e.cantEdit=!0,ge(e.first,0))}function eo(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?Ce(e,ge(t.line-1)):null:0<r&&t.ch==(n||se(e,t.line)).text.length?t.line<e.first+e.size-1?ge(t.line+1,0):null:new ge(t.line,t.ch+r)}function to(e){e.setSelection(ge(e.firstLine(),0),ge(e.lastLine()),q)}function ro(i,e,t){var o={canceled:!1,from:e.from,to:e.to,text:e.text,origin:e.origin,cancel:function(){return o.canceled=!0}};return t&&(o.update=function(e,t,r,n){e&&(o.from=Ce(i,e)),t&&(o.to=Ce(i,t)),r&&(o.text=r),void 0!==n&&(o.origin=n)}),it(i,"beforeChange",i,o),i.cm&&it(i.cm,"beforeChange",i.cm,o),o.canceled?null:{from:o.from,to:o.to,text:o.text,origin:o.origin}}function no(e,t,r){if(e.cm){if(!e.cm.curOp)return Gn(e.cm,no)(e,t,r);if(e.cm.state.suppressEdits)return}if(!(lt(e,"beforeChange")||e.cm&<(e.cm,"beforeChange"))||(t=ro(e,t,!0))){var n=Te&&!r&&function(e,t,r){var n=null;if(e.iter(t.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var r=e.markedSpans[t].marker;!r.readOnly||n&&-1!=j(n,r)||(n||(n=[])).push(r)}}),!n)return null;for(var i=[{from:t,to:r}],o=0;o<n.length;++o)for(var a=n[o],l=a.find(0),s=0;s<i.length;++s){var c=i[s];if(!(ve(c.to,l.from)<0||0<ve(c.from,l.to))){var u=[s,1],d=ve(c.from,l.from),f=ve(c.to,l.to);(d<0||!a.inclusiveLeft&&!d)&&u.push({from:c.from,to:l.from}),(0<f||!a.inclusiveRight&&!f)&&u.push({from:l.to,to:c.to}),i.splice.apply(i,u),s+=u.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;0<=i;--i)io(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else io(e,t)}}function io(e,r){if(1!=r.text.length||""!=r.text[0]||0!=ve(r.from,r.to)){var t=ki(e,r);Fi(e,r,t,e.cm?e.cm.curOp.id:NaN),lo(e,r,t,Ae(e,r));var n=[];Oi(e,function(e,t){t||-1!=j(n,e.history)||(fo(e.history,r),n.push(e.history)),lo(e,r,null,Ae(e,r))})}}function oo(i,o,e){var t=i.cm&&i.cm.state.suppressEdits;if(!t||e){for(var a,r=i.history,n=i.sel,l="undo"==o?r.done:r.undone,s="undo"==o?r.undone:r.done,c=0;c<l.length&&(a=l[c],e?!a.ranges||a.equals(i.sel):a.ranges);c++);if(c!=l.length){for(r.lastOrigin=r.lastSelOrigin=null;;){if(!(a=l.pop()).ranges){if(t)return void l.push(a);break}if(zi(a,s),e&&!a.equals(i.sel))return void Gi(i,a,{clearRedo:!1});n=a}var u=[];zi(n,s),s.push({changes:u,generation:r.generation}),r.generation=a.generation||++r.maxGeneration;for(var d=lt(i,"beforeChange")||i.cm&<(i.cm,"beforeChange"),f=function(e){var r=a.changes[e];if(r.origin=o,d&&!ro(i,r,!1))return l.length=0,{};u.push(Pi(i,r));var t=e?ki(i,r):X(l);lo(i,r,t,Ii(i,r)),!e&&i.cm&&i.cm.scrollIntoView({from:r.from,to:wi(r)});var n=[];Oi(i,function(e,t){t||-1!=j(n,e.history)||(fo(e.history,r),n.push(e.history)),lo(e,r,null,Ii(e,r))})},h=a.changes.length-1;0<=h;--h){var p=f(h);if(p)return p.v}}}}function ao(e,t){if(0!=t&&(e.first+=t,e.sel=new gi(Y(e.sel.ranges,function(e){return new vi(ge(e.anchor.line+t,e.anchor.ch),ge(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){Yn(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;n<r.viewTo;n++)Zn(e.cm,n,"gutter")}}function lo(e,t,r,n){if(e.cm&&!e.cm.curOp)return Gn(e.cm,lo)(e,t,r,n);if(t.to.line<e.first)ao(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);ao(e,i),t={from:ge(e.first,0),to:ge(t.to.line+i,t.to.ch),text:[X(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:ge(o,se(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ce(e,t.from,t.to),r||(r=ki(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,a=t.to,l=!1,s=o.line;e.options.lineWrapping||(s=fe(Re(se(n,o.line))),n.iter(s,a.line+1,function(e){if(e==i.maxLine)return l=!0}));-1<n.sel.contains(t.from,t.to)&&at(e);Mi(n,t,r,nn(e)),e.options.lineWrapping||(n.iter(s,o.line+t.text.length,function(e){var t=$e(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,l=!1)}),l&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var r=e.first,n=t-1;r<n;n--){var i=se(e,n).stateAfter;if(i&&(!(i instanceof Wt)||n+i.lookAhead<t)){r=n+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,r)}})(n,o.line),ti(e,400);var c=t.text.length-(a.line-o.line)-1;t.full?Yn(e):o.line!=a.line||1!=t.text.length||Li(e.doc,t)?Yn(e,o.line,a.line+1,c):Zn(e,o.line,"text");var u=lt(e,"changes"),d=lt(e,"change");if(d||u){var f={from:o,to:a,text:t.text,removed:t.removed,origin:t.origin};d&&lr(e,"change",e,f),u&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(f)}e.display.selForContextMenu=null}(e.cm,t,n):Mi(e,t,n),$i(e,r,q)}}function so(e,t,r,n,i){var o;(n||(n=r),ve(n,r)<0)&&(r=(o=[n,r])[0],n=o[1]);"string"==typeof t&&(t=e.splitLines(t)),no(e,{from:r,to:n,text:t,origin:i})}function co(e,t,r,n){r<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function uo(e,t,r,n){for(var i=0;i<e.length;++i){var o=e[i],a=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var l=0;l<o.ranges.length;l++)co(o.ranges[l].anchor,t,r,n),co(o.ranges[l].head,t,r,n)}else{for(var s=0;s<o.changes.length;++s){var c=o.changes[s];if(r<c.from.line)c.from=ge(c.from.line+n,c.from.ch),c.to=ge(c.to.line+n,c.to.ch);else if(t<=c.to.line){a=!1;break}}a||(e.splice(0,i+1),i=0)}}}function fo(e,t){var r=t.from.line,n=t.to.line,i=t.text.length-(n-r)-1;uo(e.done,r,n,i),uo(e.undone,r,n,i)}function ho(e,t,r,n){var i=t,o=t;return"number"==typeof t?o=se(e,ke(e,t)):i=fe(t),null==i?null:(n(o,i)&&e.cm&&Zn(e.cm,i,r),o)}function po(e){this.lines=e,this.parent=null;for(var t=0,r=0;r<e.length;++r)e[r].parent=this,t+=e[r].height;this.height=t}function mo(e){this.children=e;for(var t=0,r=0,n=0;n<e.length;++n){var i=e[n];t+=i.chunkSize(),r+=i.height,i.parent=this}this.size=t,this.height=r,this.parent=null}vi.prototype.from=function(){return xe(this.anchor,this.head)},vi.prototype.to=function(){return we(this.anchor,this.head)},vi.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},po.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var r,n=e,i=e+t;n<i;++n){var o=this.lines[n];this.height-=o.height,(r=o).parent=null,Pe(r),lr(o,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,r){this.height+=r,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var n=0;n<t.length;++n)t[n].parent=this},iterN:function(e,t,r){for(var n=e+t;e<n;++e)if(r(this.lines[e]))return!0}},mo.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var r=0;r<this.children.length;++r){var n=this.children[r],i=n.chunkSize();if(e<i){var o=Math.min(t,i-e),a=n.height;if(n.removeInner(e,o),this.height-=a-n.height,i==o&&(this.children.splice(r--,1),n.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(1<this.children.length||!(this.children[0]instanceof po))){var l=[];this.collapse(l),this.children=[new po(l)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,r){this.size+=t.length,this.height+=r;for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,r),i.lines&&50<i.lines.length){for(var a=i.lines.length%25+25,l=a;l<i.lines.length;){var s=new po(i.lines.slice(l,l+=25));i.height-=s.height,this.children.splice(++n,0,s),s.parent=this}i.lines=i.lines.slice(0,a),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=new mo(e.children.splice(e.children.length-5,5));if(e.parent){e.size-=t.size,e.height-=t.height;var r=j(e.parent.children,e);e.parent.children.splice(r+1,0,t)}else{var n=new mo(e.children);(n.parent=e).children=[n,t],e=n}t.parent=e.parent}while(10<e.children.length);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<o){var a=Math.min(t,o-e);if(i.iterN(e,a,r))return!0;if(0==(t-=a))break;e=0}else e-=o}}};var go=function(e,t,r){if(r)for(var n in r)r.hasOwnProperty(n)&&(this[n]=r[n]);this.doc=e,this.node=t};function vo(e,t,r){Ge(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Sn(e,r)}go.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,r=this.line,n=fe(r);if(null!=n&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(r.widgets=null);var o=br(this);de(r,Math.max(0,r.height-o)),e&&(Kn(e,function(){vo(e,r,-o),Zn(e,n,"widget")}),lr(e,"lineWidgetCleared",e,this,n))}},go.prototype.changed=function(){var e=this,t=this.height,r=this.doc.cm,n=this.line;this.height=null;var i=br(this)-t;i&&(Ve(this.doc,n)||de(n,n.height+i),r&&Kn(r,function(){r.curOp.forceUpdate=!0,vo(r,n,i),lr(r,"lineWidgetChanged",r,e,fe(n))}))},st(go);var yo=0,bo=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++yo};function wo(t,n,i,e,r){if(e&&e.shared)return function(e,r,n,i,o){(i=E(i)).shared=!1;var a=[wo(e,r,n,i,o)],l=a[0],s=i.widgetNode;return Oi(e,function(e){s&&(i.widgetNode=s.cloneNode(!0)),a.push(wo(e,Ce(e,r),Ce(e,n),i,o));for(var t=0;t<e.linked.length;++t)if(e.linked[t].isParent)return;l=X(a)}),new xo(a,l)}(t,n,i,e,r);if(t.cm&&!t.cm.curOp)return Gn(t.cm,wo)(t,n,i,e,r);var o=new bo(t,r),a=ve(n,i);if(e&&E(e,o,!1),0<a||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=N("span",[o.replacedWith],"CodeMirror-widget"),e.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),e.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Be(t,n.line,n,i,o)||n.line!=i.line&&Be(t,i.line,n,i,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Le=!0}o.addToHistory&&Fi(t,{from:n,to:i,origin:"markText"},t.sel,NaN);var l,s=n.line,c=t.cm;if(t.iter(s,i.line+1,function(e){var t,r;c&&o.collapsed&&!c.options.lineWrapping&&Re(e)==c.display.maxLine&&(l=!0),o.collapsed&&s!=n.line&&de(e,0),t=e,r=new Me(o,s==n.line?n.ch:null,s==i.line?i.ch:null),t.markedSpans=t.markedSpans?t.markedSpans.concat([r]):[r],r.marker.attachLine(t),++s}),o.collapsed&&t.iter(n.line,i.line+1,function(e){Ve(t,e)&&de(e,0)}),o.clearOnEnter&&tt(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(Te=!0,(t.history.done.length||t.history.undone.length)&&t.clearHistory()),o.collapsed&&(o.id=++yo,o.atomic=!0),c){if(l&&(c.curOp.updateMaxLine=!0),o.collapsed)Yn(c,n.line,i.line+1);else if(o.className||o.title||o.startStyle||o.endStyle||o.css)for(var u=n.line;u<=i.line;u++)Zn(c,u,"text");o.atomic&&Yi(c.doc),lr(c,"markerAdded",c,o)}return o}bo.prototype.clear=function(){var e=this;if(!this.explicitlyCleared){var t=this.doc.cm,r=t&&!t.curOp;if(r&&jn(t),lt(this,"clear")){var n=this.find();n&&lr(this,"clear",n.from,n.to)}for(var i=null,o=null,a=0;a<this.lines.length;++a){var l=e.lines[a],s=Oe(l.markedSpans,e);t&&!e.collapsed?Zn(t,fe(l),"text"):t&&(null!=s.to&&(o=fe(l)),null!=s.from&&(i=fe(l))),l.markedSpans=Ne(l.markedSpans,s),null==s.from&&e.collapsed&&!Ve(e.doc,l)&&t&&de(l,Jr(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var c=0;c<this.lines.length;++c){var u=Re(e.lines[c]),d=$e(u);d>t.display.maxLineLength&&(t.display.maxLine=u,t.display.maxLineLength=d,t.display.maxLineChanged=!0)}null!=i&&t&&this.collapsed&&Yn(t,i,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Yi(t.doc)),t&&lr(t,"markerCleared",t,this,i,o),r&&Bn(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(e,t){var r,n;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i<this.lines.length;++i){var o=this.lines[i],a=Oe(o.markedSpans,this);if(null!=a.from&&(r=ge(t?o:fe(o),a.from),-1==e))return r;if(null!=a.to&&(n=ge(t?o:fe(o),a.to),1==e))return n}return r&&{from:r,to:n}},bo.prototype.changed=function(){var o=this,a=this.find(-1,!0),l=this,s=this.doc.cm;a&&s&&Kn(s,function(){var e=a.line,t=fe(a.line),r=Nr(s,t);if(r&&(zr(r),s.curOp.selectionChanged=s.curOp.forceUpdate=!0),s.curOp.updateMaxLine=!0,!Ve(l.doc,e)&&null!=l.height){var n=l.height;l.height=null;var i=br(l)-n;i&&de(e,e.height+i)}lr(s,"markerChanged",s,o)})},bo.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=j(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},bo.prototype.detachLine=function(e){if(this.lines.splice(j(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},st(bo);var xo=function(e,t){this.markers=e,this.primary=t;for(var r=0;r<e.length;++r)e[r].parent=this};function ko(e){return e.findMarks(ge(e.first,0),e.clipPos(ge(e.lastLine())),function(e){return e.parent})}function Co(o){for(var e=function(e){var t=o[e],r=[t.primary.doc];Oi(t.primary.doc,function(e){return r.push(e)});for(var n=0;n<t.markers.length;n++){var i=t.markers[n];-1==j(r,i.doc)&&(i.parent=null,t.markers.splice(n--,1))}},t=0;t<o.length;t++)e(t)}xo.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();lr(this,"clear")}},xo.prototype.find=function(e,t){return this.primary.find(e,t)},st(xo);var So=0,To=function(e,t,r,n,i){if(!(this instanceof To))return new To(e,t,r,n,i);null==r&&(r=0),mo.call(this,[new po([new Gt("",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=r;var o=ge(r,0);this.sel=bi(o),this.history=new Di(null),this.id=++So,this.modeOption=t,this.lineSep=n,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),Mi(this,{from:o,to:o,text:e}),Gi(this,bi(o),q)};To.prototype=Q(mo.prototype,{constructor:To,iter:function(e,t,r){r?this.iterN(e-this.first,t-e,r):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var r=0,n=0;n<t.length;++n)r+=t[n].height;this.insertInner(e-this.first,t,r)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=ue(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Xn(function(e){var t=ge(this.first,0),r=this.first+this.size-1;no(this,{from:t,to:ge(r,se(this,r).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&Ln(this.cm,0,0),Gi(this,bi(t),q)}),replaceRange:function(e,t,r,n){so(this,e,t=Ce(this,t),r=r?Ce(this,r):t,n)},getRange:function(e,t,r){var n=ce(this,Ce(this,e),Ce(this,t));return!1===r?n:n.join(r||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(pe(this,e))return se(this,e)},getLineNumber:function(e){return fe(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=se(this,e)),Re(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return Ce(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Xn(function(e,t,r){Vi(this,Ce(this,"number"==typeof e?ge(e,t||0):e),null,r)}),setSelection:Xn(function(e,t,r){Vi(this,Ce(this,e),Ce(this,t||e),r)}),extendSelection:Xn(function(e,t,r){Ri(this,Ce(this,e),t&&Ce(this,t),r)}),extendSelections:Xn(function(e,t){qi(this,Se(this,e),t)}),extendSelectionsBy:Xn(function(e,t){qi(this,Se(this,Y(this.sel.ranges,e)),t)}),setSelections:Xn(function(e,t,r){if(e.length){for(var n=[],i=0;i<e.length;i++)n[i]=new vi(Ce(this,e[i].anchor),Ce(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),Gi(this,yi(n,t),r)}}),addSelection:Xn(function(e,t,r){var n=this.sel.ranges.slice(0);n.push(new vi(Ce(this,e),Ce(this,t||e))),Gi(this,yi(n,n.length-1),r)}),getSelection:function(e){for(var t,r=this.sel.ranges,n=0;n<r.length;n++){var i=ce(this,r[n].from(),r[n].to());t=t?t.concat(i):i}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],r=this.sel.ranges,n=0;n<r.length;n++){var i=ce(this,r[n].from(),r[n].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[n]=i}return t},replaceSelection:function(e,t,r){for(var n=[],i=0;i<this.sel.ranges.length;i++)n[i]=e;this.replaceSelections(n,t,r||"+input")},replaceSelections:Xn(function(e,t,r){for(var n=[],i=this.sel,o=0;o<i.ranges.length;o++){var a=i.ranges[o];n[o]={from:a.from(),to:a.to(),text:this.splitLines(e[o]),origin:r}}for(var l=t&&"end"!=t&&function(e,t,r){for(var n=[],i=ge(e.first,0),o=i,a=0;a<t.length;a++){var l=t[a],s=Ci(l.from,i,o),c=Ci(wi(l),i,o);if(i=l.to,o=c,"around"==r){var u=e.sel.ranges[a],d=ve(u.head,u.anchor)<0;n[a]=new vi(d?c:s,d?s:c)}else n[a]=new vi(s,s)}return new gi(n,e.sel.primIndex)}(this,n,t),s=n.length-1;0<=s;s--)no(this,n[s]);l?Ki(this,l):this.cm&&Tn(this.cm)}),undo:Xn(function(){oo(this,"undo")}),redo:Xn(function(){oo(this,"redo")}),undoSelection:Xn(function(){oo(this,"undo",!0)}),redoSelection:Xn(function(){oo(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++r;return{undo:t,redo:r}},clearHistory:function(){this.history=new Di(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:ji(this.history.done),undone:ji(this.history.undone)}},setHistory:function(e){var t=this.history=new Di(this.history.maxGeneration);t.done=ji(e.done.slice(0),null,!0),t.undone=ji(e.undone.slice(0),null,!0)},setGutterMarker:Xn(function(e,r,n){return ho(this,e,"gutter",function(e){var t=e.gutterMarkers||(e.gutterMarkers={});return!(t[r]=n)&&re(t)&&(e.gutterMarkers=null),!0})}),clearGutter:Xn(function(t){var r=this;this.iter(function(e){e.gutterMarkers&&e.gutterMarkers[t]&&ho(r,e,"gutter",function(){return e.gutterMarkers[t]=null,re(e.gutterMarkers)&&(e.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!pe(this,e))return null;if(!(e=se(this,t=e)))return null}else if(null==(t=fe(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Xn(function(e,r,n){return ho(this,e,"gutter"==r?"gutter":"class",function(e){var t="text"==r?"textClass":"background"==r?"bgClass":"gutter"==r?"gutterClass":"wrapClass";if(e[t]){if(S(n).test(e[t]))return!1;e[t]+=" "+n}else e[t]=n;return!0})}),removeLineClass:Xn(function(e,o,a){return ho(this,e,"gutter"==o?"gutter":"class",function(e){var t="text"==o?"textClass":"background"==o?"bgClass":"gutter"==o?"gutterClass":"wrapClass",r=e[t];if(!r)return!1;if(null==a)e[t]=null;else{var n=r.match(S(a));if(!n)return!1;var i=n.index+n[0].length;e[t]=r.slice(0,n.index)+(n.index&&i!=r.length?" ":"")+r.slice(i)||null}return!0})}),addLineWidget:Xn(function(e,t,r){return i=e,o=new go(n=this,t,r),(a=n.cm)&&o.noHScroll&&(a.display.alignWidgets=!0),ho(n,i,"widget",function(e){var t=e.widgets||(e.widgets=[]);if(null==o.insertAt?t.push(o):t.splice(Math.min(t.length-1,Math.max(0,o.insertAt)),0,o),o.line=e,a&&!Ve(n,e)){var r=Ge(e)<n.scrollTop;de(e,e.height+br(o)),r&&Sn(a,o.height),a.curOp.forceUpdate=!0}return!0}),a&&lr(a,"lineWidgetAdded",a,o,"number"==typeof i?i:fe(i)),o;var n,i,o,a}),removeLineWidget:function(e){e.clear()},markText:function(e,t,r){return wo(this,Ce(this,e),Ce(this,t),r,r&&r.type||"range")},setBookmark:function(e,t){var r={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return wo(this,e=Ce(this,e),e,r,"bookmark")},findMarksAt:function(e){var t=[],r=se(this,(e=Ce(this,e)).line).markedSpans;if(r)for(var n=0;n<r.length;++n){var i=r[n];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,a){i=Ce(this,i),o=Ce(this,o);var l=[],s=i.line;return this.iter(i.line,o.line+1,function(e){var t=e.markedSpans;if(t)for(var r=0;r<t.length;r++){var n=t[r];null!=n.to&&s==i.line&&i.ch>=n.to||null==n.from&&s!=i.line||null!=n.from&&s==o.line&&n.from>=o.ch||a&&!a(n.marker)||l.push(n.marker.parent||n.marker)}++s}),l},getAllMarks:function(){var n=[];return this.iter(function(e){var t=e.markedSpans;if(t)for(var r=0;r<t.length;++r)null!=t[r].from&&n.push(t[r].marker)}),n},posFromIndex:function(r){var n,i=this.first,o=this.lineSeparator().length;return this.iter(function(e){var t=e.text.length+o;if(r<t)return n=r,!0;r-=t,++i}),Ce(this,ge(i,n))},indexFromPos:function(e){var t=(e=Ce(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var r=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+r}),t},copy:function(e){var t=new To(ue(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,r=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<r&&(r=e.to);var n=new To(ue(this,t,r),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r],i=n.find(),o=e.clipPos(i.from),a=e.clipPos(i.to);if(ve(o,a)){var l=wo(e,o,a,n.primary,n.primary.type);n.markers.push(l),l.parent=n}}}(n,ko(this)),n},unlinkDoc:function(e){if(e instanceof ka&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),Co(ko(this));break}}if(e.history==this.history){var r=[e.id];Oi(e,function(e){return r.push(e.id)},!0),e.history=new Di(null),e.history.done=ji(this.history.done,r),e.history.undone=ji(this.history.undone,r)}},iterLinkedDocs:function(e){Oi(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):xt(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:Xn(function(e){var t;("rtl"!=e&&(e="ltr"),e!=this.direction)&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&Kn(t=this.cm,function(){Ai(t),Yn(t)}))})}),To.prototype.eachLine=To.prototype.iter;var Lo=0;function Mo(e){var i=this;if(Oo(i),!ot(i,e)&&!wr(i.display,e)){ct(e),x&&(Lo=+new Date);var o=an(i,e,!0),t=e.dataTransfer.files;if(o&&!i.isReadOnly())if(t&&t.length&&window.FileReader&&window.File)for(var a=t.length,l=Array(a),s=0,r=function(e,r){if(!i.options.allowDropFileTypes||-1!=j(i.options.allowDropFileTypes,e.type)){var n=new FileReader;n.onload=Gn(i,function(){var e=n.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),l[r]=e,++s==a){var t={from:o=Ce(i.doc,o),to:o,text:i.doc.splitLines(l.join(i.doc.lineSeparator())),origin:"paste"};no(i.doc,t),Ki(i.doc,bi(o,wi(t)))}}),n.readAsText(e)}},n=0;n<a;++n)r(t[n],n);else{if(i.state.draggingText&&-1<i.doc.sel.contains(o))return i.state.draggingText(e),void setTimeout(function(){return i.display.input.focus()},20);try{var c=e.dataTransfer.getData("Text");if(c){var u;if(i.state.draggingText&&!i.state.draggingText.copy&&(u=i.listSelections()),$i(i.doc,bi(o,o)),u)for(var d=0;d<u.length;++d)so(i.doc,"",u[d].anchor,u[d].head,"drag");i.replaceSelection(c,"around","paste"),i.display.input.focus()}}catch(e){}}}}function Oo(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function No(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName("CodeMirror"),r=0;r<t.length;r++){var n=t[r].CodeMirror;n&&e(n)}}var Ao=!1;function Do(){var e;Ao||(tt(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,No(Po)},100))}),tt(window,"blur",function(){return No(vn)}),Ao=!0)}function Po(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var _o={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},Fo=0;Fo<10;Fo++)_o[Fo+48]=_o[Fo+96]=String(Fo);for(var Wo=65;Wo<=90;Wo++)_o[Wo]=String.fromCharCode(Wo);for(var zo=1;zo<=12;zo++)_o[zo+111]=_o[zo+63235]="F"+zo;var Eo={};function Ho(e){var t,r,n,i,o=e.split(/-(?!$)/);e=o[o.length-1];for(var a=0;a<o.length-1;a++){var l=o[a];if(/^(cmd|meta|m)$/i.test(l))i=!0;else if(/^a(lt)?$/i.test(l))t=!0;else if(/^(c|ctrl|control)$/i.test(l))r=!0;else{if(!/^s(hift)?$/i.test(l))throw new Error("Unrecognized modifier name: "+l);n=!0}}return t&&(e="Alt-"+e),r&&(e="Ctrl-"+e),i&&(e="Cmd-"+e),n&&(e="Shift-"+e),e}function Io(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if("..."==n){delete e[r];continue}for(var i=Y(r.split(" "),Ho),o=0;o<i.length;o++){var a=void 0,l=void 0;o==i.length-1?(l=i.join(" "),a=n):(l=i.slice(0,o+1).join(" "),a="...");var s=t[l];if(s){if(s!=a)throw new Error("Inconsistent bindings for "+l)}else t[l]=a}delete e[r]}for(var c in t)e[c]=t[c];return e}function jo(e,t,r,n){var i=(t=Uo(t)).call?t.call(e,n):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&r(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return jo(e,t.fallthrough,r,n);for(var o=0;o<t.fallthrough.length;o++){var a=jo(e,t.fallthrough[o],r,n);if(a)return a}}}function Bo(e){var t="string"==typeof e?e:_o[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function Ro(e,t,r){var n=e;return t.altKey&&"Alt"!=n&&(e="Alt-"+e),(y?t.metaKey:t.ctrlKey)&&"Ctrl"!=n&&(e="Ctrl-"+e),(y?t.ctrlKey:t.metaKey)&&"Cmd"!=n&&(e="Cmd-"+e),!r&&t.shiftKey&&"Shift"!=n&&(e="Shift-"+e),e}function qo(e,t){if(g&&34==e.keyCode&&e.char)return!1;var r=_o[e.keyCode];return null!=r&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(r=e.code),Ro(r,e,t))}function Uo(e){return"string"==typeof e?Eo[e]:e}function Vo(t,e){for(var r=t.doc.sel.ranges,n=[],i=0;i<r.length;i++){for(var o=e(r[i]);n.length&&ve(o.from,X(n).to)<=0;){var a=n.pop();if(ve(a.from,o.from)<0){o.from=a.from;break}}n.push(o)}Kn(t,function(){for(var e=n.length-1;0<=e;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");Tn(t)})}function Ko(e,t,r){var n=oe(e.text,t+r,r);return n<0||n>e.text.length?null:n}function Go(e,t,r){var n=Ko(e,t.ch,r);return null==n?null:new ge(t.line,n,r<0?"after":"before")}function $o(e,t,r,n,i){if(e){var o=Je(r,t.doc.direction);if(o){var a,l=i<0?X(o):o[0],s=i<0==(1==l.level)?"after":"before";if(0<l.level||"rtl"==t.doc.direction){var c=Ar(t,r);a=i<0?r.text.length-1:0;var u=Dr(t,c,a).top;a=ae(function(e){return Dr(t,c,e).top==u},i<0==(1==l.level)?l.from:l.to-1,a),"before"==s&&(a=Ko(r,a,1))}else a=i<0?l.to:l.from;return new ge(n,a,s)}}return new ge(n,i<0?r.text.length:0,i<0?"before":"after")}Eo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Eo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Eo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Eo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Eo.default=w?Eo.macDefault:Eo.pcDefault;var Xo={selectAll:to,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),q)},killLine:function(r){return Vo(r,function(e){if(e.empty()){var t=se(r.doc,e.head.line).text.length;return e.head.ch==t&&e.head.line<r.lastLine()?{from:e.head,to:ge(e.head.line+1,0)}:{from:e.head,to:ge(e.head.line,t)}}return{from:e.from(),to:e.to()}})},deleteLine:function(t){return Vo(t,function(e){return{from:ge(e.from().line,0),to:Ce(t.doc,ge(e.to().line+1,0))}})},delLineLeft:function(e){return Vo(e,function(e){return{from:ge(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(r){return Vo(r,function(e){var t=r.charCoords(e.head,"div").top+5;return{from:r.coordsChar({left:0,top:t},"div"),to:e.from()}})},delWrappedLineRight:function(n){return Vo(n,function(e){var t=n.charCoords(e.head,"div").top+5,r=n.coordsChar({left:n.display.lineDiv.offsetWidth+100,top:t},"div");return{from:e.from(),to:r}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(ge(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(ge(e.lastLine()))},goLineStart:function(t){return t.extendSelectionsBy(function(e){return Yo(t,e.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(t){return t.extendSelectionsBy(function(e){return Zo(t,e.head)},{origin:"+move",bias:1})},goLineEnd:function(t){return t.extendSelectionsBy(function(e){return function(e,t){var r=se(e.doc,t),n=function(e){for(var t;t=Ie(e);)e=t.find(1,!0).line;return e}(r);n!=r&&(t=fe(n));return $o(!0,e,r,t,-1)}(t,e.head.line)},{origin:"+move",bias:-1})},goLineRight:function(r){return r.extendSelectionsBy(function(e){var t=r.cursorCoords(e.head,"div").top+5;return r.coordsChar({left:r.display.lineDiv.offsetWidth+100,top:t},"div")},V)},goLineLeft:function(r){return r.extendSelectionsBy(function(e){var t=r.cursorCoords(e.head,"div").top+5;return r.coordsChar({left:0,top:t},"div")},V)},goLineLeftSmart:function(n){return n.extendSelectionsBy(function(e){var t=n.cursorCoords(e.head,"div").top+5,r=n.coordsChar({left:0,top:t},"div");return r.ch<n.getLine(r.line).search(/\S/)?Zo(n,e.head):r},V)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"char")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],r=e.listSelections(),n=e.options.tabSize,i=0;i<r.length;i++){var o=r[i].from(),a=H(e.getLine(o.line),o.ch,n);t.push($(n-a%n))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(a){return Kn(a,function(){for(var e=a.listSelections(),t=[],r=0;r<e.length;r++)if(e[r].empty()){var n=e[r].head,i=se(a.doc,n.line).text;if(i)if(n.ch==i.length&&(n=new ge(n.line,n.ch-1)),0<n.ch)n=new ge(n.line,n.ch+1),a.replaceRange(i.charAt(n.ch-1)+i.charAt(n.ch-2),ge(n.line,n.ch-2),n,"+transpose");else if(n.line>a.doc.first){var o=se(a.doc,n.line-1).text;o&&(n=new ge(n.line,1),a.replaceRange(i.charAt(0)+a.doc.lineSeparator()+o.charAt(o.length-1),ge(n.line-1,o.length-1),n,"+transpose"))}t.push(new vi(n,n))}a.setSelections(t)})},newlineAndIndent:function(n){return Kn(n,function(){for(var e=n.listSelections(),t=e.length-1;0<=t;t--)n.replaceRange(n.doc.lineSeparator(),e[t].anchor,e[t].head,"+input");e=n.listSelections();for(var r=0;r<e.length;r++)n.indentLine(e[r].from().line,null,!0);Tn(n)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function Yo(e,t){var r=se(e.doc,t),n=Re(r);return n!=r&&(t=fe(n)),$o(!0,e,n,t,1)}function Zo(e,t){var r=Yo(e,t.line),n=se(e.doc,r.line),i=Je(n,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,n.text.search(/\S/)),a=t.line==r.line&&t.ch<=o&&t.ch;return ge(r.line,a?0:o,r.sticky)}return r}function Qo(e,t,r){if("string"==typeof t&&!(t=Xo[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r&&(e.display.shift=!1),i=t(e)!=R}finally{e.display.shift=n,e.state.suppressEdits=!1}return i}var Jo=new I;function ea(e,t,r,n){var i=e.state.keySeq;if(i){if(Bo(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:Jo.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),ta(e,i+" "+t,r,n))return!0}return ta(e,t,r,n)}function ta(e,t,r,n){var i=function(e,t,r){for(var n=0;n<e.state.keyMaps.length;n++){var i=jo(t,e.state.keyMaps[n],r,e);if(i)return i}return e.options.extraKeys&&jo(t,e.options.extraKeys,r,e)||jo(t,e.options.keyMap,r,e)}(e,t,n);return"multi"==i&&(e.state.keySeq=t),"handled"==i&&lr(e,"keyHandled",e,t,r),"handled"!=i&&"multi"!=i||(ct(r),hn(e)),!!i}function ra(t,e){var r=qo(e,!0);return!!r&&(e.shiftKey&&!t.state.keySeq?ea(t,"Shift-"+r,e,function(e){return Qo(t,e,!0)})||ea(t,r,e,function(e){if("string"==typeof e?/^go[A-Z]/.test(e):e.motion)return Qo(t,e)}):ea(t,r,e,function(e){return Qo(t,e)}))}var na=null;function ia(e){var t=this;if(t.curOp.focus=P(),!ot(t,e)){x&&k<11&&27==e.keyCode&&(e.returnValue=!1);var r=e.keyCode;t.display.shift=16==r||e.shiftKey;var n=ra(t,e);g&&(na=n?r:null,!n&&88==r&&!Ct&&(w?e.metaKey:e.ctrlKey)&&t.replaceSelection("",null,"cut")),18!=r||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||function(e){var t=e.display.lineDiv;function r(e){18!=e.keyCode&&e.altKey||(L(t,"CodeMirror-crosshair"),nt(document,"keyup",r),nt(document,"mouseover",r))}_(t,"CodeMirror-crosshair"),tt(document,"keyup",r),tt(document,"mouseover",r)}(t)}}function oa(e){16==e.keyCode&&(this.doc.sel.shift=!1),ot(this,e)}function aa(e){var t=this;if(!(wr(t.display,e)||ot(t,e)||e.ctrlKey&&!e.altKey||w&&e.metaKey)){var r=e.keyCode,n=e.charCode;if(g&&r==na)return na=null,void ct(e);if(!g||e.which&&!(e.which<10)||!ra(t,e)){var i,o=String.fromCharCode(null==n?r:n);if("\b"!=o)if(!ea(i=t,"'"+o+"'",e,function(e){return Qo(i,e,!0)}))t.display.input.onKeyPress(e)}}}var la,sa,ca=function(e,t,r){this.time=e,this.pos=t,this.button=r};function ua(e){var t=this,r=t.display;if(!(ot(t,e)||r.activeTouch&&r.input.supportsTouch()))if(r.input.ensurePolled(),r.shift=e.shiftKey,wr(r,e))b||(r.scroller.draggable=!1,setTimeout(function(){return r.scroller.draggable=!0},100));else if(!ha(t,e)){var n,i,o,a=an(t,e),l=pt(e),s=a?(n=a,i=l,o=+new Date,sa&&sa.compare(o,n,i)?(la=sa=null,"triple"):la&&la.compare(o,n,i)?(sa=new ca(o,n,i),la=null,"double"):(la=new ca(o,n,i),sa=null,"single")):"single";window.focus(),1==l&&t.state.selectingText&&t.state.selectingText(e),a&&function(r,e,n,t,i){var o="Click";"double"==t?o="Double"+o:"triple"==t&&(o="Triple"+o);return ea(r,Ro(o=(1==e?"Left":2==e?"Middle":"Right")+o,i),i,function(e){if("string"==typeof e&&(e=Xo[e]),!e)return!1;var t=!1;try{r.isReadOnly()&&(r.state.suppressEdits=!0),t=e(r,n)!=R}finally{r.state.suppressEdits=!1}return t})}(t,l,a,s,e)||(1==l?a?function(e,t,r,n){x?setTimeout(z(pn,e),0):e.curOp.focus=P();var i,o=function(e,t,r){var n=e.getOption("configureMouse"),i=n?n(e,t,r):{};if(null==i.unit){var o=h?r.shiftKey&&r.metaKey:r.altKey;i.unit=o?"rectangle":"single"==t?"char":"double"==t?"word":"line"}(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||r.shiftKey);null==i.addNew&&(i.addNew=w?r.metaKey:r.ctrlKey);null==i.moveOnDrag&&(i.moveOnDrag=!(w?r.altKey:r.ctrlKey));return i}(e,r,n),a=e.doc.sel;e.options.dragDrop&&vt&&!e.isReadOnly()&&"single"==r&&-1<(i=a.contains(t))&&(ve((i=a.ranges[i]).from(),t)<0||0<t.xRel)&&(0<ve(i.to(),t)||t.xRel<0)?function(t,r,n,i){var o=t.display,a=!1,l=Gn(t,function(e){b&&(o.scroller.draggable=!1),t.state.draggingText=!1,nt(o.wrapper.ownerDocument,"mouseup",l),nt(o.wrapper.ownerDocument,"mousemove",s),nt(o.scroller,"dragstart",c),nt(o.scroller,"drop",l),a||(ct(e),i.addNew||Ri(t.doc,n,null,null,i.extend),b||x&&9==k?setTimeout(function(){o.wrapper.ownerDocument.body.focus(),o.input.focus()},20):o.input.focus())}),s=function(e){a=a||10<=Math.abs(r.clientX-e.clientX)+Math.abs(r.clientY-e.clientY)},c=function(){return a=!0};b&&(o.scroller.draggable=!0);(t.state.draggingText=l).copy=!i.moveOnDrag,o.scroller.dragDrop&&o.scroller.dragDrop();tt(o.wrapper.ownerDocument,"mouseup",l),tt(o.wrapper.ownerDocument,"mousemove",s),tt(o.scroller,"dragstart",c),tt(o.scroller,"drop",l),mn(t),setTimeout(function(){return o.input.focus()},20)}(e,n,t,o):function(g,e,v,y){var a=g.display,b=g.doc;ct(e);var w,x,k=b.sel,t=k.ranges;y.addNew&&!y.extend?(x=b.sel.contains(v),w=-1<x?t[x]:new vi(v,v)):(w=b.sel.primary(),x=b.sel.primIndex);if("rectangle"==y.unit)y.addNew||(w=new vi(v,v)),v=an(g,e,!0,!0),x=-1;else{var r=da(g,v,y.unit);w=y.extend?Bi(w,r.anchor,r.head,y.extend):r}y.addNew?-1==x?(x=t.length,Gi(b,yi(t.concat([w]),x),{scroll:!1,origin:"*mouse"})):1<t.length&&t[x].empty()&&"char"==y.unit&&!y.extend?(Gi(b,yi(t.slice(0,x).concat(t.slice(x+1)),0),{scroll:!1,origin:"*mouse"}),k=b.sel):Ui(b,x,w,U):(Gi(b,new gi([w],x=0),U),k=b.sel);var C=v;function l(e){if(0!=ve(C,e))if(C=e,"rectangle"==y.unit){for(var t=[],r=g.options.tabSize,n=H(se(b,v.line).text,v.ch,r),i=H(se(b,e.line).text,e.ch,r),o=Math.min(n,i),a=Math.max(n,i),l=Math.min(v.line,e.line),s=Math.min(g.lastLine(),Math.max(v.line,e.line));l<=s;l++){var c=se(b,l).text,u=K(c,o,r);o==a?t.push(new vi(ge(l,u),ge(l,u))):c.length>u&&t.push(new vi(ge(l,u),ge(l,K(c,a,r))))}t.length||t.push(new vi(v,v)),Gi(b,yi(k.ranges.slice(0,x).concat(t),x),{origin:"*mouse",scroll:!1}),g.scrollIntoView(e)}else{var d,f=w,h=da(g,e,y.unit),p=f.anchor;0<ve(h.anchor,p)?(d=h.head,p=xe(f.from(),h.anchor)):(d=h.anchor,p=we(f.to(),h.head));var m=k.ranges.slice(0);m[x]=function(e,t){var r=t.anchor,n=t.head,i=se(e.doc,r.line);if(0==ve(r,n)&&r.sticky==n.sticky)return t;var o=Je(i);if(!o)return t;var a=Ze(o,r.ch,r.sticky),l=o[a];if(l.from!=r.ch&&l.to!=r.ch)return t;var s,c=a+(l.from==r.ch==(1!=l.level)?0:1);if(0==c||c==o.length)return t;if(n.line!=r.line)s=0<(n.line-r.line)*("ltr"==e.doc.direction?1:-1);else{var u=Ze(o,n.ch,n.sticky),d=u-a||(n.ch-r.ch)*(1==l.level?-1:1);s=u==c-1||u==c?d<0:0<d}var f=o[c+(s?-1:0)],h=s==(1==f.level),p=h?f.from:f.to,m=h?"after":"before";return r.ch==p&&r.sticky==m?t:new vi(new ge(r.line,p,m),n)}(g,new vi(Ce(b,p),d)),Gi(b,yi(m,x),U)}}var s=a.wrapper.getBoundingClientRect(),c=0;function n(e){g.state.selectingText=!1,c=1/0,ct(e),a.input.focus(),nt(a.wrapper.ownerDocument,"mousemove",i),nt(a.wrapper.ownerDocument,"mouseup",o),b.history.lastSelOrigin=null}var i=Gn(g,function(e){0!==e.buttons&&pt(e)?function e(t){var r=++c;var n=an(g,t,!0,"rectangle"==y.unit);if(!n)return;if(0!=ve(n,C)){g.curOp.focus=P(),l(n);var i=wn(a,b);(n.line>=i.to||n.line<i.from)&&setTimeout(Gn(g,function(){c==r&&e(t)}),150)}else{var o=t.clientY<s.top?-20:t.clientY>s.bottom?20:0;o&&setTimeout(Gn(g,function(){c==r&&(a.scroller.scrollTop+=o,e(t))}),50)}}(e):n(e)}),o=Gn(g,n);g.state.selectingText=o,tt(a.wrapper.ownerDocument,"mousemove",i),tt(a.wrapper.ownerDocument,"mouseup",o)}(e,n,t,o)}(t,a,s,e):ht(e)==r.scroller&&ct(e):2==l?(a&&Ri(t.doc,a),setTimeout(function(){return r.input.focus()},20)):3==l&&(C?pa(t,e):mn(t)))}}function da(e,t,r){if("char"==r)return new vi(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new vi(ge(t.line,0),Ce(e.doc,ge(t.line+1,0)));var n=r(e,t);return new vi(n.from,n.to)}function fa(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&ct(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!lt(e,r))return dt(t);o-=l.top-a.viewOffset;for(var s=0;s<e.options.gutters.length;++s){var c=a.gutters.childNodes[s];if(c&&c.getBoundingClientRect().right>=i)return it(e,r,e,he(e.doc,o),e.options.gutters[s],t),dt(t)}}function ha(e,t){return fa(e,t,"gutterClick",!0)}function pa(e,t){wr(e.display,t)||function(e,t){if(!lt(e,"gutterContextMenu"))return!1;return fa(e,t,"gutterContextMenu",!1)}(e,t)||ot(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function ma(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Hr(e)}ca.prototype.compare=function(e,t,r){return this.time+400>e&&0==ve(t,this.pos)&&r==this.button};var ga={toString:function(){return"CodeMirror.Init"}},va={},ya={};function ba(e){ci(e),Yn(e),xn(e)}function wa(e,t,r){if(!t!=!(r&&r!=ga)){var n=e.display.dragFunctions,i=t?tt:nt;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function xa(e){e.options.lineWrapping?(_(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(L(e.display.wrapper,"CodeMirror-wrap"),Xe(e)),on(e),Yn(e),Hr(e),setTimeout(function(){return Wn(e)},100)}function ka(e,t){var r=this;if(!(this instanceof ka))return new ka(e,t);this.options=t=t?E(t):{},E(va,t,!1),ui(t);var n=t.value;"string"==typeof n?n=new To(n,t.mode,null,t.lineSeparator,t.direction):t.mode&&(n.modeOption=t.mode),this.doc=n;var i=new ka.inputStyles[t.inputStyle](this),o=this.display=new le(e,n,i);for(var a in ci(o.wrapper.CodeMirror=this),ma(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Hn(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new I,keySeq:null,specialChars:null},t.autofocus&&!f&&o.input.focus(),x&&k<11&&setTimeout(function(){return r.display.input.reset(!0)},20),function(i){var o=i.display;tt(o.scroller,"mousedown",Gn(i,ua)),tt(o.scroller,"dblclick",x&&k<11?Gn(i,function(e){if(!ot(i,e)){var t=an(i,e);if(t&&!ha(i,e)&&!wr(i.display,e)){ct(e);var r=i.findWordAt(t);Ri(i.doc,r.anchor,r.head)}}}):function(e){return ot(i,e)||ct(e)});C||tt(o.scroller,"contextmenu",function(e){return pa(i,e)});var r,n={end:0};function a(){o.activeTouch&&(r=setTimeout(function(){return o.activeTouch=null},1e3),(n=o.activeTouch).end=+new Date)}function l(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return 400<r*r+n*n}tt(o.scroller,"touchstart",function(e){if(!ot(i,e)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(e)&&!ha(i,e)){o.input.ensurePolled(),clearTimeout(r);var t=+new Date;o.activeTouch={start:t,moved:!1,prev:t-n.end<=300?n:null},1==e.touches.length&&(o.activeTouch.left=e.touches[0].pageX,o.activeTouch.top=e.touches[0].pageY)}}),tt(o.scroller,"touchmove",function(){o.activeTouch&&(o.activeTouch.moved=!0)}),tt(o.scroller,"touchend",function(e){var t=o.activeTouch;if(t&&!wr(o,e)&&null!=t.left&&!t.moved&&new Date-t.start<300){var r,n=i.coordsChar(o.activeTouch,"page");r=!t.prev||l(t,t.prev)?new vi(n,n):!t.prev.prev||l(t,t.prev.prev)?i.findWordAt(n):new vi(ge(n.line,0),Ce(i.doc,ge(n.line+1,0))),i.setSelection(r.anchor,r.head),i.focus(),ct(e)}a()}),tt(o.scroller,"touchcancel",a),tt(o.scroller,"scroll",function(){o.scroller.clientHeight&&(Nn(i,o.scroller.scrollTop),Dn(i,o.scroller.scrollLeft,!0),it(i,"scroll",i))}),tt(o.scroller,"mousewheel",function(e){return mi(i,e)}),tt(o.scroller,"DOMMouseScroll",function(e){return mi(i,e)}),tt(o.wrapper,"scroll",function(){return o.wrapper.scrollTop=o.wrapper.scrollLeft=0}),o.dragFunctions={enter:function(e){ot(i,e)||ft(e)},over:function(e){ot(i,e)||(!function(e,t){var r=an(e,t);if(r){var n=document.createDocumentFragment();un(e,r,n),e.display.dragCursor||(e.display.dragCursor=A("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),O(e.display.dragCursor,n)}}(i,e),ft(e))},start:function(e){return function(e,t){if(x&&(!e.state.draggingText||+new Date-Lo<100))ft(t);else if(!ot(e,t)&&!wr(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!s)){var r=A("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",g&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),g&&r.parentNode.removeChild(r)}}(i,e)},drop:Gn(i,Mo),leave:function(e){ot(i,e)||Oo(i)}};var e=o.input.getField();tt(e,"keyup",function(e){return oa.call(i,e)}),tt(e,"keydown",Gn(i,ia)),tt(e,"keypress",Gn(i,aa)),tt(e,"focus",function(e){return gn(i,e)}),tt(e,"blur",function(e){return vn(i,e)})}(this),Do(),jn(this),this.curOp.forceUpdate=!0,Ni(this,n),t.autofocus&&!f||this.hasFocus()?setTimeout(z(gn,this),20):vn(this),ya)ya.hasOwnProperty(a)&&ya[a](r,t[a],ga);kn(this),t.finishInit&&t.finishInit(this);for(var l=0;l<Ca.length;++l)Ca[l](r);Bn(this),b&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering="auto")}ka.defaults=va,ka.optionHandlers=ya;var Ca=[];function Sa(e,t,r,n){var i,o=e.doc;null==r&&(r="add"),"smart"==r&&(o.mode.indent?i=It(e,t).state:r="prev");var a=e.options.tabSize,l=se(o,t),s=H(l.text,null,a);l.stateAfter&&(l.stateAfter=null);var c,u=l.text.match(/^\s*/)[0];if(n||/\S/.test(l.text)){if("smart"==r&&((c=o.mode.indent(i,l.text.slice(u.length),l.text))==R||150<c)){if(!n)return;r="prev"}}else c=0,r="not";"prev"==r?c=t>o.first?H(se(o,t-1).text,null,a):0:"add"==r?c=s+e.options.indentUnit:"subtract"==r?c=s-e.options.indentUnit:"number"==typeof r&&(c=s+r),c=Math.max(0,c);var d="",f=0;if(e.options.indentWithTabs)for(var h=Math.floor(c/a);h;--h)f+=a,d+="\t";if(f<c&&(d+=$(c-f)),d!=u)return so(o,d,ge(t,0),ge(t,u.length),"+input"),!(l.stateAfter=null);for(var p=0;p<o.sel.ranges.length;p++){var m=o.sel.ranges[p];if(m.head.line==t&&m.head.ch<u.length){var g=ge(t,u.length);Ui(o,p,new vi(g,g));break}}}ka.defineInitHook=function(e){return Ca.push(e)};var Ta=null;function La(e){Ta=e}function Ma(e,t,r,n,i){var o=e.doc;e.display.shift=!1,n||(n=o.sel);var a,l=e.state.pasteIncoming||"paste"==i,s=xt(t),c=null;if(l&&1<n.ranges.length)if(Ta&&Ta.text.join("\n")==t){if(n.ranges.length%Ta.text.length==0){c=[];for(var u=0;u<Ta.text.length;u++)c.push(o.splitLines(Ta.text[u]))}}else s.length==n.ranges.length&&e.options.pasteLinesPerSelection&&(c=Y(s,function(e){return[e]}));for(var d=n.ranges.length-1;0<=d;d--){var f=n.ranges[d],h=f.from(),p=f.to();f.empty()&&(r&&0<r?h=ge(h.line,h.ch-r):e.state.overwrite&&!l?p=ge(p.line,Math.min(se(o,p.line).text.length,p.ch+X(s).length)):Ta&&Ta.lineWise&&Ta.text.join("\n")==t&&(h=p=ge(h.line,0))),a=e.curOp.updateInput;var m={from:h,to:p,text:c?c[d%c.length]:s,origin:i||(l?"paste":e.state.cutIncoming?"cut":"+input")};no(e.doc,m),lr(e,"inputRead",e,m)}t&&!l&&Na(e,t),Tn(e),e.curOp.updateInput=a,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Oa(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Kn(t,function(){return Ma(t,r,0,null,"paste")}),!0}function Na(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;0<=n;n--){var i=r.ranges[n];if(!(100<i.head.ch||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),a=!1;if(o.electricChars){for(var l=0;l<o.electricChars.length;l++)if(-1<t.indexOf(o.electricChars.charAt(l))){a=Sa(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(se(e.doc,i.head.line).text.slice(0,i.head.ch))&&(a=Sa(e,i.head.line,"smart"));a&&lr(e,"electricInput",e,i.head.line)}}}function Aa(e){for(var t=[],r=[],n=0;n<e.doc.sel.ranges.length;n++){var i=e.doc.sel.ranges[n].head.line,o={anchor:ge(i,0),head:ge(i+1,0)};r.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:r}}function Da(e,t){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck",!!t)}function Pa(){var e=A("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=A("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return b?e.style.width="1000px":e.setAttribute("wrap","off"),u&&(e.style.border="1px solid black"),Da(e),t}function _a(n,i,o,e,a){var t=i,r=o,l=se(n,i.line);function s(e){var t,r;if(null==(t=a?function(t,r,l,e){var s=Je(r,t.doc.direction);if(!s)return Go(r,l,e);l.ch>=r.text.length?(l.ch=r.text.length,l.sticky="before"):l.ch<=0&&(l.ch=0,l.sticky="after");var n=Ze(s,l.ch,l.sticky),i=s[n];if("ltr"==t.doc.direction&&i.level%2==0&&(0<e?i.to>l.ch:i.from<l.ch))return Go(r,l,e);var o,c=function(e,t){return Ko(r,e instanceof ge?e.ch:e,t)},a=function(e){return t.options.lineWrapping?(o=o||Ar(t,r),Yr(t,r,o,e)):{begin:0,end:r.text.length}},u=a("before"==l.sticky?c(l,-1):l.ch);if("rtl"==t.doc.direction||1==i.level){var d=1==i.level==e<0,f=c(l,d?1:-1);if(null!=f&&(d?f<=i.to&&f<=u.end:f>=i.from&&f>=u.begin)){var h=d?"before":"after";return new ge(l.line,f,h)}}var p=function(e,t,r){for(var n=function(e,t){return t?new ge(l.line,c(e,1),"before"):new ge(l.line,e,"after")};0<=e&&e<s.length;e+=t){var i=s[e],o=0<t==(1!=i.level),a=o?r.begin:c(r.end,-1);if(i.from<=a&&a<i.to)return n(a,o);if(a=o?i.from:c(i.to,-1),r.begin<=a&&a<r.end)return n(a,o)}},m=p(n+e,e,u);if(m)return m;var g=0<e?u.end:c(u.begin,-1);return null==g||0<e&&g==r.text.length||!(m=p(0<e?0:s.length-1,e,a(g)))?null:m}(n.cm,l,i,o):Go(l,i,o))){if(e||(r=i.line+o)<n.first||r>=n.first+n.size||(i=new ge(r,i.ch,i.sticky),!(l=se(n,r))))return!1;i=$o(a,n.cm,l,i.line,o)}else i=t;return!0}if("char"==e)s();else if("column"==e)s(!0);else if("word"==e||"group"==e)for(var c=null,u="group"==e,d=n.cm&&n.cm.getHelper(i,"wordChars"),f=!0;!(o<0)||s(!f);f=!1){var h=l.text.charAt(i.ch)||"\n",p=te(h,d)?"w":u&&"\n"==h?"n":!u||/\s/.test(h)?null:"p";if(!u||f||p||(p="s"),c&&c!=p){o<0&&(o=1,s(),i.sticky="after");break}if(p&&(c=p),0<o&&!s(!f))break}var m=Ji(n,i,t,r,!0);return ye(t,m)&&(m.hitSide=!0),m}function Fa(e,t,r,n){var i,o,a=e.doc,l=t.left;if("page"==n){var s=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(s-.5*Jr(e.display),3);i=(0<r?t.bottom:t.top)+r*c}else"line"==n&&(i=0<r?t.bottom+3:t.top-3);for(;(o=$r(e,l,i)).outside;){if(r<0?i<=0:i>=a.height){o.hitSide=!0;break}i+=5*r}return o}var Wa=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new I,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function za(e,t){var r=Nr(e,t.line);if(!r||r.hidden)return null;var n=se(e.doc,t.line),i=Mr(r,n,t.line),o=Je(n,e.doc.direction),a="left";o&&(a=Ze(o,t.ch)%2?"right":"left");var l=Fr(i.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function Ea(e,t){return t&&(e.bad=!0),e}function Ha(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return Ea(e.clipPos(ge(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==n)return Ia(o,t,r)}}function Ia(c,e,t){var r=c.text.firstChild,n=!1;if(!e||!D(r,e))return Ea(ge(fe(c.line),0),!0);if(e==r&&(n=!0,e=r.childNodes[t],t=0,!e)){var i=c.rest?X(c.rest):c.line;return Ea(ge(fe(i),i.text.length),n)}var o=3==e.nodeType?e:null,a=e;for(o||1!=e.childNodes.length||3!=e.firstChild.nodeType||(o=e.firstChild,t&&(t=o.nodeValue.length));a.parentNode!=r;)a=a.parentNode;var u=c.measure,d=u.maps;function l(e,t,r){for(var n=-1;n<(d?d.length:0);n++)for(var i=n<0?u.map:d[n],o=0;o<i.length;o+=3){var a=i[o+2];if(a==e||a==t){var l=fe(n<0?c.line:c.rest[n]),s=i[o]+r;return(r<0||a!=e)&&(s=i[o+(r?1:0)]),ge(l,s)}}}var s=l(o,a,t);if(s)return Ea(s,n);for(var f=a.nextSibling,h=o?o.nodeValue.length-t:0;f;f=f.nextSibling){if(s=l(f,f.firstChild,0))return Ea(ge(s.line,s.ch-h),n);h+=f.textContent.length}for(var p=a.previousSibling,m=t;p;p=p.previousSibling){if(s=l(p,p.firstChild,-1))return Ea(ge(s.line,s.ch+m),n);m+=p.textContent.length}}Wa.prototype.init=function(e){var t=this,a=this,l=a.cm,s=a.div=e.lineDiv;function r(e){if(!ot(l,e)){if(l.somethingSelected())La({lineWise:!1,text:l.getSelections()}),"cut"==e.type&&l.replaceSelection("",null,"cut");else{if(!l.options.lineWiseCopyCut)return;var t=Aa(l);La({lineWise:!0,text:t.text}),"cut"==e.type&&l.operation(function(){l.setSelections(t.ranges,0,q),l.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var r=Ta.text.join("\n");if(e.clipboardData.setData("Text",r),e.clipboardData.getData("Text")==r)return void e.preventDefault()}var n=Pa(),i=n.firstChild;l.display.lineSpace.insertBefore(n,l.display.lineSpace.firstChild),i.value=Ta.text.join("\n");var o=document.activeElement;W(i),setTimeout(function(){l.display.lineSpace.removeChild(n),o.focus(),o==s&&a.showPrimarySelection()},50)}}Da(s,l.options.spellcheck),tt(s,"paste",function(e){ot(l,e)||Oa(e,l)||k<=11&&setTimeout(Gn(l,function(){return t.updateFromDOM()}),20)}),tt(s,"compositionstart",function(e){t.composing={data:e.data,done:!1}}),tt(s,"compositionupdate",function(e){t.composing||(t.composing={data:e.data,done:!1})}),tt(s,"compositionend",function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),tt(s,"touchstart",function(){return a.forceCompositionEnd()}),tt(s,"input",function(){t.composing||t.readFromDOMSoon()}),tt(s,"copy",r),tt(s,"cut",r)},Wa.prototype.prepareSelection=function(){var e=cn(this.cm,!1);return e.focus=this.cm.state.focused,e},Wa.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Wa.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Wa.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,r=t.doc.sel.primary(),n=r.from(),i=r.to();if(t.display.viewTo==t.display.viewFrom||n.line>=t.display.viewTo||i.line<t.display.viewFrom)e.removeAllRanges();else{var o=Ha(t,e.anchorNode,e.anchorOffset),a=Ha(t,e.focusNode,e.focusOffset);if(!o||o.bad||!a||a.bad||0!=ve(xe(o,a),n)||0!=ve(we(o,a),i)){var l=t.display.view,s=n.line>=t.display.viewFrom&&za(t,n)||{node:l[0].measure.map[2],offset:0},c=i.line<t.display.viewTo&&za(t,i);if(!c){var u=l[l.length-1].measure,d=u.maps?u.maps[u.maps.length-1]:u.map;c={node:d[d.length-1],offset:d[d.length-2]-d[d.length-3]}}if(s&&c){var f,h=e.rangeCount&&e.getRangeAt(0);try{f=T(s.node,s.offset,c.offset,c.node)}catch(e){}f&&(!m&&t.state.focused?(e.collapse(s.node,s.offset),f.collapsed||(e.removeAllRanges(),e.addRange(f))):(e.removeAllRanges(),e.addRange(f)),h&&null==e.anchorNode?e.addRange(h):m&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Wa.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},Wa.prototype.showMultipleSelections=function(e){O(this.cm.display.cursorDiv,e.cursors),O(this.cm.display.selectionDiv,e.selection)},Wa.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Wa.prototype.selectionInEditor=function(){var e=this.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return D(this.div,t)},Wa.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Wa.prototype.blur=function(){this.div.blur()},Wa.prototype.getField=function(){return this.div},Wa.prototype.supportsTouch=function(){return!0},Wa.prototype.receivedFocus=function(){var t=this;this.selectionInEditor()?this.pollSelection():Kn(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))})},Wa.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Wa.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=this.getSelection(),t=this.cm;if(d&&a&&this.cm.options.gutters.length&&function(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}(e.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var r=Ha(t,e.anchorNode,e.anchorOffset),n=Ha(t,e.focusNode,e.focusOffset);r&&n&&Kn(t,function(){Gi(t.doc,bi(r,n),q),(r.bad||n.bad)&&(t.curOp.selectionChanged=!0)})}}},Wa.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t,r,n=this.cm,i=n.display,o=n.doc.sel.primary(),a=o.from(),l=o.to();if(0==a.ch&&a.line>n.firstLine()&&(a=ge(a.line-1,se(n.doc,a.line-1).length)),l.ch==se(n.doc,l.line).text.length&&l.line<n.lastLine()&&(l=ge(l.line+1,0)),a.line<i.viewFrom||l.line>i.viewTo-1)return!1;a.line==i.viewFrom||0==(e=ln(n,a.line))?(t=fe(i.view[0].line),r=i.view[0].node):(t=fe(i.view[e].line),r=i.view[e-1].node.nextSibling);var s,c,u=ln(n,l.line);if(u==i.view.length-1?(s=i.viewTo-1,c=i.lineDiv.lastChild):(s=fe(i.view[u+1].line)-1,c=i.view[u+1].node.previousSibling),!r)return!1;for(var d=n.doc.splitLines(function(s,e,t,c,u){var r="",d=!1,f=s.doc.lineSeparator(),h=!1;function p(){d&&(r+=f,h&&(r+=f),d=h=!1)}function m(e){e&&(p(),r+=e)}function g(e){if(1==e.nodeType){var t=e.getAttribute("cm-text");if(t)return void m(t);var r,n=e.getAttribute("cm-marker");if(n){var i=s.findMarks(ge(c,0),ge(u+1,0),(l=+n,function(e){return e.id==l}));return void(i.length&&(r=i[0].find(0))&&m(ce(s.doc,r.from,r.to).join(f)))}if("false"==e.getAttribute("contenteditable"))return;var o=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;o&&p();for(var a=0;a<e.childNodes.length;a++)g(e.childNodes[a]);/^(pre|p)$/i.test(e.nodeName)&&(h=!0),o&&(d=!0)}else 3==e.nodeType&&m(e.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "));var l}for(;g(e),e!=t;)e=e.nextSibling,h=!1;return r}(n,r,c,t,s)),f=ce(n.doc,ge(t,0),ge(s,se(n.doc,s).text.length));1<d.length&&1<f.length;)if(X(d)==X(f))d.pop(),f.pop(),s--;else{if(d[0]!=f[0])break;d.shift(),f.shift(),t++}for(var h=0,p=0,m=d[0],g=f[0],v=Math.min(m.length,g.length);h<v&&m.charCodeAt(h)==g.charCodeAt(h);)++h;for(var y=X(d),b=X(f),w=Math.min(y.length-(1==d.length?h:0),b.length-(1==f.length?h:0));p<w&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)++p;if(1==d.length&&1==f.length&&t==a.line)for(;h&&h>a.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)h--,p++;d[d.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),d[0]=d[0].slice(h).replace(/\u200b+$/,"");var x=ge(t,h),k=ge(s,f.length?X(f).length-p:0);return 1<d.length||d[0]||ve(x,k)?(so(n.doc,d,x,k,"+input"),!0):void 0},Wa.prototype.ensurePolled=function(){this.forceCompositionEnd()},Wa.prototype.reset=function(){this.forceCompositionEnd()},Wa.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Wa.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Wa.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Kn(this.cm,function(){return Yn(e.cm)})},Wa.prototype.setUneditable=function(e){e.contentEditable="false"},Wa.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Gn(this.cm,Ma)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Wa.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Wa.prototype.onContextMenu=function(){},Wa.prototype.resetPosition=function(){},Wa.prototype.needsContentAttribute=!0;var ja,Ba,Ra,qa=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new I,this.hasSelection=!1,this.composing=null};qa.prototype.init=function(t){var e=this,r=this,n=this.cm;this.createField(t);var i=this.textarea;function o(e){if(!ot(n,e)){if(n.somethingSelected())La({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Aa(n);La({lineWise:!0,text:t.text}),"cut"==e.type?n.setSelections(t.ranges,null,q):(r.prevInput="",i.value=t.text.join("\n"),W(i))}"cut"==e.type&&(n.state.cutIncoming=!0)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),u&&(i.style.width="0px"),tt(i,"input",function(){x&&9<=k&&e.hasSelection&&(e.hasSelection=null),r.poll()}),tt(i,"paste",function(e){ot(n,e)||Oa(e,n)||(n.state.pasteIncoming=!0,r.fastPoll())}),tt(i,"cut",o),tt(i,"copy",o),tt(t.scroller,"paste",function(e){wr(t,e)||ot(n,e)||(n.state.pasteIncoming=!0,r.focus())}),tt(t.lineSpace,"selectstart",function(e){wr(t,e)||ct(e)}),tt(i,"compositionstart",function(){var e=n.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor("to"),{className:"CodeMirror-composing"})}}),tt(i,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},qa.prototype.createField=function(e){this.wrapper=Pa(),this.textarea=this.wrapper.firstChild},qa.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=cn(e);if(e.options.moveInputWithCursor){var i=Vr(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+a.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+a.left-o.left))}return n},qa.prototype.showSelection=function(e){var t=this.cm.display;O(t.cursorDiv,e.cursors),O(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},qa.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&W(this.textarea),x&&9<=k&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",x&&9<=k&&(this.hasSelection=null))}},qa.prototype.getField=function(){return this.textarea},qa.prototype.supportsTouch=function(){return!1},qa.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!f||P()!=this.textarea))try{this.textarea.focus()}catch(e){}},qa.prototype.blur=function(){this.textarea.blur()},qa.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},qa.prototype.receivedFocus=function(){this.slowPoll()},qa.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},qa.prototype.fastPoll=function(){var t=!1,r=this;r.pollingFast=!0,r.polling.set(20,function e(){r.poll()||t?(r.pollingFast=!1,r.slowPoll()):(t=!0,r.polling.set(60,e))})},qa.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||kt(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(x&&9<=k&&this.hasSelection===i||w&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n=""),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,l=Math.min(n.length,i.length);a<l&&n.charCodeAt(a)==i.charCodeAt(a);)++a;return Kn(t,function(){Ma(t,i.slice(a),n.length-a,null,e.composing?"*compose":null),1e3<i.length||-1<i.indexOf("\n")?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},qa.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},qa.prototype.onKeyPress=function(){x&&9<=k&&(this.hasSelection=null),this.fastPoll()},qa.prototype.onContextMenu=function(e){var r=this,n=r.cm,i=n.display,o=r.textarea,t=an(n,e),a=i.scroller.scrollTop;if(t&&!g){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(t)&&Gn(n,Gi)(n.doc,bi(t),q);var l=o.style.cssText,s=r.wrapper.style.cssText;r.wrapper.style.cssText="position: absolute";var c,u=r.wrapper.getBoundingClientRect();if(o.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-u.top-5)+"px; left: "+(e.clientX-u.left-5)+"px;\n z-index: 1000; background: "+(x?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",b&&(c=window.scrollY),i.input.focus(),b&&window.scrollTo(null,c),i.input.reset(),n.somethingSelected()||(o.value=r.prevInput=" "),r.contextMenuPending=!0,i.selForContextMenu=n.doc.sel,clearTimeout(i.detectingSelectAll),x&&9<=k&&f(),C){ft(e);var d=function(){nt(window,"mouseup",d),setTimeout(h,20)};tt(window,"mouseup",d)}else setTimeout(h,50)}function f(){if(null!=o.selectionStart){var e=n.somethingSelected(),t=""+(e?o.value:"");o.value="⇚",o.value=t,r.prevInput=e?"":"",o.selectionStart=1,o.selectionEnd=t.length,i.selForContextMenu=n.doc.sel}}function h(){if(r.contextMenuPending=!1,r.wrapper.style.cssText=s,o.style.cssText=l,x&&k<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=a),null!=o.selectionStart){(!x||x&&k<9)&&f();var e=0,t=function(){i.selForContextMenu==n.doc.sel&&0==o.selectionStart&&0<o.selectionEnd&&""==r.prevInput?Gn(n,to)(n):e++<10?i.detectingSelectAll=setTimeout(t,500):(i.selForContextMenu=null,i.input.reset())};i.detectingSelectAll=setTimeout(t,200)}}},qa.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},qa.prototype.setUneditable=function(){},qa.prototype.needsContentAttribute=!1,function(i){var o=i.optionHandlers;function e(e,t,n,r){i.defaults[e]=t,n&&(o[e]=r?function(e,t,r){r!=ga&&n(e,t,r)}:n)}i.defineOption=e,i.Init=ga,e("value","",function(e,t){return e.setValue(t)},!0),e("mode",null,function(e,t){e.doc.modeOption=t,Si(e)},!0),e("indentUnit",2,Si,!0),e("indentWithTabs",!1),e("smartIndent",!0),e("tabSize",4,function(e){Ti(e),Hr(e),Yn(e)},!0),e("lineSeparator",null,function(e,n){if(e.doc.lineSep=n){var i=[],o=e.doc.first;e.doc.iter(function(e){for(var t=0;;){var r=e.text.indexOf(n,t);if(-1==r)break;t=r+n.length,i.push(ge(o,r))}o++});for(var t=i.length-1;0<=t;t--)so(e.doc,n,i[t],ge(i[t].line,i[t].ch+n.length))}}),e("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=ga&&e.refresh()}),e("specialCharPlaceholder",Qt,function(e){return e.refresh()},!0),e("electricChars",!0),e("inputStyle",f?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),e("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),e("rtlMoveVisually",!p),e("wholeLineUpdateBefore",!0),e("theme","default",function(e){ma(e),ba(e)},!0),e("keyMap","default",function(e,t,r){var n=Uo(t),i=r!=ga&&Uo(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),e("extraKeys",null),e("configureMouse",null),e("lineWrapping",!1,xa,!0),e("gutters",[],function(e){ui(e.options),ba(e)},!0),e("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?rn(e.display)+"px":"0",e.refresh()},!0),e("coverGutterNextToScrollbar",!1,function(e){return Wn(e)},!0),e("scrollbarStyle","native",function(e){Hn(e),Wn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),e("lineNumbers",!1,function(e){ui(e.options),ba(e)},!0),e("firstLineNumber",1,ba,!0),e("lineNumberFormatter",function(e){return e},ba,!0),e("showCursorWhenSelecting",!1,sn,!0),e("resetSelectionOnContextMenu",!0),e("lineWiseCopyCut",!0),e("pasteLinesPerSelection",!0),e("readOnly",!1,function(e,t){"nocursor"==t&&(vn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),e("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),e("dragDrop",!0,wa),e("allowDropFileTypes",null),e("cursorBlinkRate",530),e("cursorScrollMargin",0),e("cursorHeight",1,sn,!0),e("singleCursorHeightPerLine",!0,sn,!0),e("workTime",100),e("workDelay",100),e("flattenSpans",!0,Ti,!0),e("addModeClass",!1,Ti,!0),e("pollInterval",100),e("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),e("historyEventDelay",1250),e("viewportMargin",10,function(e){return e.refresh()},!0),e("maxHighlightLength",1e4,Ti,!0),e("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),e("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),e("autofocus",null),e("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0)}(ka),Ba=(ja=ka).optionHandlers,Ra=ja.helpers={},ja.prototype={constructor:ja,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var r=this.options,n=r[e];r[e]==t&&"mode"!=e||(r[e]=t,Ba.hasOwnProperty(e)&&Gn(this,Ba[e])(this,t,n),it(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Uo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;r<t.length;++r)if(t[r]==e||t[r].name==e)return t.splice(r,1),!0},addOverlay:$n(function(e,t){var r=e.token?e:ja.getMode(this.options,e);if(r.startState)throw new Error("Overlays may not be stateful.");!function(e,t,r){for(var n=0,i=r(t);n<e.length&&r(e[n])<=i;)n++;e.splice(n,0,t)}(this.state.overlays,{mode:r,modeSpec:e,opaque:t&&t.opaque,priority:t&&t.priority||0},function(e){return e.priority}),this.state.modeGen++,Yn(this)}),removeOverlay:$n(function(e){for(var t=this.state.overlays,r=0;r<t.length;++r){var n=t[r].modeSpec;if(n==e||"string"==typeof e&&n.name==e)return t.splice(r,1),this.state.modeGen++,void Yn(this)}}),indentLine:$n(function(e,t,r){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),pe(this.doc,e)&&Sa(this,e,t,r)}),indentSelection:$n(function(e){for(var t=this.doc.sel.ranges,r=-1,n=0;n<t.length;n++){var i=t[n];if(i.empty())i.head.line>r&&(Sa(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&Tn(this));else{var o=i.from(),a=i.to(),l=Math.max(r,o.line);r=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;s<r;++s)Sa(this,s,e);var c=this.doc.sel.ranges;0==o.ch&&t.length==c.length&&0<c[n].from().ch&&Ui(this.doc,n,new vi(o,c[n].to()),q)}}}),getTokenAt:function(e,t){return Ut(this,e,t)},getLineTokens:function(e,t){return Ut(this,ge(e),t,!0)},getTokenTypeAt:function(e){e=Ce(this.doc,e);var t,r=Ht(this,se(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var a=n+i>>1;if((a?r[2*a-1]:0)>=o)i=a;else{if(!(r[2*a+1]<o)){t=r[2*a+2];break}n=a+1}}var l=t?t.indexOf("overlay "):-1;return l<0?t:0==l?null:t.slice(0,l-1)},getModeAt:function(e){var t=this.doc.mode;return t.innerMode?ja.innerMode(t,this.getTokenAt(e).state).mode:t},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var r=[];if(!Ra.hasOwnProperty(t))return r;var n=Ra[t],i=this.getModeAt(e);if("string"==typeof i[t])n[i[t]]&&r.push(n[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var a=n[i[t][o]];a&&r.push(a)}else i.helperType&&n[i.helperType]?r.push(n[i.helperType]):n[i.name]&&r.push(n[i.name]);for(var l=0;l<n._global.length;l++){var s=n._global[l];s.pred(i,this)&&-1==j(r,s.val)&&r.push(s.val)}return r},getStateAfter:function(e,t){var r=this.doc;return It(this,(e=ke(r,null==e?r.first+r.size-1:e))+1,t).state},cursorCoords:function(e,t){var r=this.doc.sel.primary();return Vr(this,null==e?r.head:"object"==typeof e?Ce(this.doc,e):e?r.from():r.to(),t||"page")},charCoords:function(e,t){return Ur(this,Ce(this.doc,e),t||"page")},coordsChar:function(e,t){return $r(this,(e=qr(this,e,t||"page")).left,e.top)},lineAtHeight:function(e,t){return e=qr(this,{top:e,left:0},t||"page").top,he(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,r){var n,i=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:o<e&&(e=o,i=!0),n=se(this.doc,e)}else n=e;return Rr(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-Ge(n):0)},defaultTextHeight:function(){return Jr(this.display)},defaultCharWidth:function(){return en(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,a,l,s=this.display,c=(e=Vr(this,Ce(this.doc,e))).bottom,u=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),s.sizer.appendChild(t),"over"==n)c=e.top;else if("above"==n||"near"==n){var d=Math.max(s.wrapper.clientHeight,this.doc.height),f=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>d)&&e.top>t.offsetHeight?c=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=d&&(c=e.bottom),u+t.offsetWidth>f&&(u=f-t.offsetWidth)}t.style.top=c+"px",t.style.left=t.style.right="","right"==i?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),r&&(o=this,a={left:u,top:c,right:u+t.offsetWidth,bottom:c+t.offsetHeight},null!=(l=Cn(o,a)).scrollTop&&Nn(o,l.scrollTop),null!=l.scrollLeft&&Dn(o,l.scrollLeft))},triggerOnKeyDown:$n(ia),triggerOnKeyPress:$n(aa),triggerOnKeyUp:oa,triggerOnMouseDown:$n(ua),execCommand:function(e){if(Xo.hasOwnProperty(e))return Xo[e].call(null,this)},triggerElectric:$n(function(e){Na(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=Ce(this.doc,e),a=0;a<t&&!(o=_a(this.doc,o,i,r,n)).hitSide;++a);return o},moveH:$n(function(t,r){var n=this;this.extendSelectionsBy(function(e){return n.display.shift||n.doc.extend||e.empty()?_a(n.doc,e.head,t,r,n.options.rtlMoveVisually):t<0?e.from():e.to()},V)}),deleteH:$n(function(r,n){var e=this.doc.sel,i=this.doc;e.somethingSelected()?i.replaceSelection("",null,"+delete"):Vo(this,function(e){var t=_a(i,e.head,r,n,!1);return r<0?{from:t,to:e.head}:{from:e.head,to:t}})}),findPosV:function(e,t,r,n){var i=1,o=n;t<0&&(i=-1,t=-t);for(var a=Ce(this.doc,e),l=0;l<t;++l){var s=Vr(this,a,"div");if(null==o?o=s.left:s.left=o,(a=Fa(this,s,i,r)).hitSide)break}return a},moveV:$n(function(n,i){var o=this,a=this.doc,l=[],s=!this.display.shift&&!a.extend&&a.sel.somethingSelected();if(a.extendSelectionsBy(function(e){if(s)return n<0?e.from():e.to();var t=Vr(o,e.head,"div");null!=e.goalColumn&&(t.left=e.goalColumn),l.push(t.left);var r=Fa(o,t,n,i);return"page"==i&&e==a.sel.primary()&&Sn(o,Ur(o,r,"div").top-t.top),r},V),l.length)for(var e=0;e<a.sel.ranges.length;e++)a.sel.ranges[e].goalColumn=l[e]}),findWordAt:function(e){var t=se(this.doc,e.line).text,r=e.ch,n=e.ch;if(t){var i=this.getHelper(e,"wordChars");"before"!=e.sticky&&n!=t.length||!r?++n:--r;for(var o=t.charAt(r),a=te(o,i)?function(e){return te(e,i)}:/\s/.test(o)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!te(e)};0<r&&a(t.charAt(r-1));)--r;for(;n<t.length&&a(t.charAt(n));)++n}return new vi(ge(e.line,r),ge(e.line,n))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?_(this.display.cursorDiv,"CodeMirror-overwrite"):L(this.display.cursorDiv,"CodeMirror-overwrite"),it(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==P()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:$n(function(e,t){Ln(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Sr(this)-this.display.barHeight,width:e.scrollWidth-Sr(this)-this.display.barWidth,clientHeight:Lr(this),clientWidth:Tr(this)}},scrollIntoView:$n(function(e,t){var r,n;null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:ge(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?(n=e,Mn(r=this),r.curOp.scrollToPos=n):On(this,e.from,e.to,e.margin)}),setSize:$n(function(e,t){var r=this,n=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&Er(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Zn(r,i,"widget");break}++i}),this.curOp.forceUpdate=!0,it(this,"refresh",this)}),operation:function(e){return Kn(this,e)},startOperation:function(){return jn(this)},endOperation:function(){return Bn(this)},refresh:$n(function(){var e=this.display.cachedTextHeight;Yn(this),this.curOp.forceUpdate=!0,Hr(this),Ln(this,this.doc.scrollLeft,this.doc.scrollTop),li(this),(null==e||.5<Math.abs(e-Jr(this.display)))&&on(this),it(this,"refresh",this)}),swapDoc:$n(function(e){var t=this.doc;return t.cm=null,Ni(this,e),Hr(this),this.display.input.reset(),Ln(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,lr(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},st(ja),ja.registerHelper=function(e,t,r){Ra.hasOwnProperty(e)||(Ra[e]=ja[e]={_global:[]}),Ra[e][t]=r},ja.registerGlobalHelper=function(e,t,r,n){ja.registerHelper(e,t,n),Ra[e]._global.push({pred:r,val:n})};var Ua,Va="iter insert remove copy getEditor constructor".split(" ");for(var Ka in To.prototype)To.prototype.hasOwnProperty(Ka)&&j(Va,Ka)<0&&(ka.prototype[Ka]=function(e){return function(){return e.apply(this.doc,arguments)}}(To.prototype[Ka]));return st(To),ka.inputStyles={textarea:qa,contenteditable:Wa},ka.defineMode=function(e){ka.defaults.mode||"null"==e||(ka.defaults.mode=e),function(e,t){2<arguments.length&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Tt[e]=t}.apply(this,arguments)},ka.defineMIME=function(e,t){Lt[e]=t},ka.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),ka.defineMIME("text/plain","null"),ka.defineExtension=function(e,t){ka.prototype[e]=t},ka.defineDocExtension=function(e,t){To.prototype[e]=t},ka.fromTextArea=function(t,e){if((e=e?E(e):{}).value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var r=P();e.autofocus=r==t||null!=t.getAttribute("autofocus")&&r==document.body}function n(){t.value=l.getValue()}var i;if(t.form&&(tt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var o=t.form;i=o.submit;try{var a=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=a}}catch(e){}}e.finishInit=function(e){e.save=n,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,n(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(nt(t.form,"submit",n),"function"==typeof t.form.submit&&(t.form.submit=i))}},t.style.display="none";var l=ka(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return l},(Ua=ka).off=nt,Ua.on=tt,Ua.wheelEventPixels=pi,Ua.Doc=To,Ua.splitLines=xt,Ua.countColumn=H,Ua.findColumn=K,Ua.isWordChar=ee,Ua.Pass=R,Ua.signal=it,Ua.Line=Gt,Ua.changeEnd=wi,Ua.scrollbarModel=En,Ua.Pos=ge,Ua.cmpPos=ve,Ua.modes=Tt,Ua.mimeModes=Lt,Ua.resolveMode=Mt,Ua.getMode=Ot,Ua.modeExtensions=Nt,Ua.extendMode=At,Ua.copyState=Dt,Ua.startState=_t,Ua.innerMode=Pt,Ua.commands=Xo,Ua.keyMap=Eo,Ua.keyName=qo,Ua.isModifierKey=Bo,Ua.lookupKey=jo,Ua.normalizeKeyMap=Io,Ua.StringStream=Ft,Ua.SharedTextMarker=xo,Ua.TextMarker=bo,Ua.LineWidget=go,Ua.e_preventDefault=ct,Ua.e_stopPropagation=ut,Ua.e_stop=ft,Ua.addClass=_,Ua.contains=D,Ua.rmClass=L,Ua.keyNames=_o,ka.version="5.39.2",ka},"object"==typeof r&&void 0!==t?t.exports=i():"function"==typeof o&&o.amd?o(i):n.CodeMirror=i()},{}],15:[function(e,t,r){var n;n=function(A){"use strict";function e(e){for(var t={},r=0;r<e.length;++r)t[e[r].toLowerCase()]=!0;return t}A.defineMode("css",function(e,t){var r=t.inline;t.propertyKeywords||(t=A.resolveMode("text/css"));var n,i,o=e.indentUnit,a=t.tokenHooks,l=t.documentTypes||{},s=t.mediaTypes||{},c=t.mediaFeatures||{},u=t.mediaValueKeywords||{},d=t.propertyKeywords||{},f=t.nonStandardPropertyKeywords||{},h=t.fontProperties||{},p=t.counterDescriptors||{},m=t.colorKeywords||{},g=t.valueKeywords||{},v=t.allowNested,y=t.lineComment,b=!0===t.supportsAtComponent;function w(e,t){return n=t,e}function x(i){return function(e,t){for(var r,n=!1;null!=(r=e.next());){if(r==i&&!n){")"==i&&e.backUp(1);break}n=!n&&"\\"==r}return(r==i||!n&&")"!=i)&&(t.tokenize=null),w("string","string")}}function k(e,t){return e.next(),e.match(/\s*[\"\')]/,!1)?t.tokenize=null:t.tokenize=x(")"),w(null,"(")}function C(e,t,r){this.type=e,this.indent=t,this.prev=r}function S(e,t,r,n){return e.context=new C(r,t.indentation()+(!1===n?0:o),e.context),r}function T(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function L(e,t,r){return N[r.context.type](e,t,r)}function M(e,t,r,n){for(var i=n||1;0<i;i--)r.context=r.context.prev;return L(e,t,r)}function O(e){var t=e.current().toLowerCase();i=g.hasOwnProperty(t)?"atom":m.hasOwnProperty(t)?"keyword":"variable"}var N={top:function(e,t,r){if("{"==e)return S(r,t,"block");if("}"==e&&r.context.prev)return T(r);if(b&&/@component/i.test(e))return S(r,t,"atComponentBlock");if(/^@(-moz-)?document$/i.test(e))return S(r,t,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return S(r,t,"atBlock");if(/^@(font-face|counter-style)/i.test(e))return r.stateArg=e,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return"keyframes";if(e&&"@"==e.charAt(0))return S(r,t,"at");if("hash"==e)i="builtin";else if("word"==e)i="tag";else{if("variable-definition"==e)return"maybeprop";if("interpolation"==e)return S(r,t,"interpolation");if(":"==e)return"pseudo";if(v&&"("==e)return S(r,t,"parens")}return r.context.type},block:function(e,t,r){if("word"==e){var n=t.current().toLowerCase();return d.hasOwnProperty(n)?(i="property","maybeprop"):f.hasOwnProperty(n)?(i="string-2","maybeprop"):v?(i=t.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(i+=" error","maybeprop")}return"meta"==e?"block":v||"hash"!=e&&"qualifier"!=e?N.top(e,t,r):(i="error","block")},maybeprop:function(e,t,r){return":"==e?S(r,t,"prop"):L(e,t,r)},prop:function(e,t,r){if(";"==e)return T(r);if("{"==e&&v)return S(r,t,"propBlock");if("}"==e||"{"==e)return M(e,t,r);if("("==e)return S(r,t,"parens");if("hash"!=e||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())){if("word"==e)O(t);else if("interpolation"==e)return S(r,t,"interpolation")}else i+=" error";return"prop"},propBlock:function(e,t,r){return"}"==e?T(r):"word"==e?(i="property","maybeprop"):r.context.type},parens:function(e,t,r){return"{"==e||"}"==e?M(e,t,r):")"==e?T(r):"("==e?S(r,t,"parens"):"interpolation"==e?S(r,t,"interpolation"):("word"==e&&O(t),"parens")},pseudo:function(e,t,r){return"meta"==e?"pseudo":"word"==e?(i="variable-3",r.context.type):L(e,t,r)},documentTypes:function(e,t,r){return"word"==e&&l.hasOwnProperty(t.current())?(i="tag",r.context.type):N.atBlock(e,t,r)},atBlock:function(e,t,r){if("("==e)return S(r,t,"atBlock_parens");if("}"==e||";"==e)return M(e,t,r);if("{"==e)return T(r)&&S(r,t,v?"block":"top");if("interpolation"==e)return S(r,t,"interpolation");if("word"==e){var n=t.current().toLowerCase();i="only"==n||"not"==n||"and"==n||"or"==n?"keyword":s.hasOwnProperty(n)?"attribute":c.hasOwnProperty(n)?"property":u.hasOwnProperty(n)?"keyword":d.hasOwnProperty(n)?"property":f.hasOwnProperty(n)?"string-2":g.hasOwnProperty(n)?"atom":m.hasOwnProperty(n)?"keyword":"error"}return r.context.type},atComponentBlock:function(e,t,r){return"}"==e?M(e,t,r):"{"==e?T(r)&&S(r,t,v?"block":"top",!1):("word"==e&&(i="error"),r.context.type)},atBlock_parens:function(e,t,r){return")"==e?T(r):"{"==e||"}"==e?M(e,t,r,2):N.atBlock(e,t,r)},restricted_atBlock_before:function(e,t,r){return"{"==e?S(r,t,"restricted_atBlock"):"word"==e&&"@counter-style"==r.stateArg?(i="variable","restricted_atBlock_before"):L(e,t,r)},restricted_atBlock:function(e,t,r){return"}"==e?(r.stateArg=null,T(r)):"word"==e?(i="@font-face"==r.stateArg&&!h.hasOwnProperty(t.current().toLowerCase())||"@counter-style"==r.stateArg&&!p.hasOwnProperty(t.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(e,t,r){return"word"==e?(i="variable","keyframes"):"{"==e?S(r,t,"top"):L(e,t,r)},at:function(e,t,r){return";"==e?T(r):"{"==e||"}"==e?M(e,t,r):("word"==e?i="tag":"hash"==e&&(i="builtin"),"at")},interpolation:function(e,t,r){return"}"==e?T(r):"{"==e||";"==e?M(e,t,r):("word"==e?i="variable":"variable"!=e&&"("!=e&&")"!=e&&(i="error"),"interpolation")}};return{startState:function(e){return{tokenize:null,state:r?"block":"top",stateArg:null,context:new C(r?"block":"top",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var r=(t.tokenize||function(e,t){var r=e.next();if(a[r]){var n=a[r](e,t);if(!1!==n)return n}return"@"==r?(e.eatWhile(/[\w\\\-]/),w("def",e.current())):"="==r||("~"==r||"|"==r)&&e.eat("=")?w(null,"compare"):'"'==r||"'"==r?(t.tokenize=x(r),t.tokenize(e,t)):"#"==r?(e.eatWhile(/[\w\\\-]/),w("atom","hash")):"!"==r?(e.match(/^\s*\w*/),w("keyword","important")):/\d/.test(r)||"."==r&&e.eat(/\d/)?(e.eatWhile(/[\w.%]/),w("number","unit")):"-"!==r?/[,+>*\/]/.test(r)?w(null,"select-op"):"."==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?w("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(r)?w(null,r):("u"==r||"U"==r)&&e.match(/rl(-prefix)?\(/i)||("d"==r||"D"==r)&&e.match("omain(",!0,!0)||("r"==r||"R"==r)&&e.match("egexp(",!0,!0)?(e.backUp(1),t.tokenize=k,w("property","word")):/[\w\\\-]/.test(r)?(e.eatWhile(/[\w\\\-]/),w("property","word")):w(null,null):/[\d.]/.test(e.peek())?(e.eatWhile(/[\w.%]/),w("number","unit")):e.match(/^-[\w\\\-]+/)?(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?w("variable-2","variable-definition"):w("variable-2","variable")):e.match(/^\w+-/)?w("meta","meta"):void 0})(e,t);return r&&"object"==typeof r&&(n=r[1],r=r[0]),i=r,"comment"!=n&&(t.state=N[t.state](n,e,t)),i},indent:function(e,t){var r=e.context,n=t&&t.charAt(0),i=r.indent;return"prop"!=r.type||"}"!=n&&")"!=n||(r=r.prev),r.prev&&("}"!=n||"block"!=r.type&&"top"!=r.type&&"interpolation"!=r.type&&"restricted_atBlock"!=r.type?(")"!=n||"parens"!=r.type&&"atBlock_parens"!=r.type)&&("{"!=n||"at"!=r.type&&"atBlock"!=r.type)||(i=Math.max(0,r.indent-o)):i=(r=r.prev).indent),i},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:y,fold:"brace"}});var t=["domain","regexp","url","url-prefix"],r=e(t),n=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],i=e(n),o=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],a=e(o),l=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],s=e(l),c=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],u=e(c),d=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],f=e(d),h=e(["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]),p=e(["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"]),m=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],g=e(m),v=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],y=e(v),b=t.concat(n).concat(o).concat(l).concat(c).concat(d).concat(m).concat(v);function w(e,t){for(var r,n=!1;null!=(r=e.next());){if(n&&"/"==r){t.tokenize=null;break}n="*"==r}return["comment","comment"]}A.registerHelper("hintWords","css",b),A.defineMIME("text/css",{documentTypes:r,mediaTypes:i,mediaFeatures:a,mediaValueKeywords:s,propertyKeywords:u,nonStandardPropertyKeywords:f,fontProperties:h,counterDescriptors:p,colorKeywords:g,valueKeywords:y,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=w)(e,t)}},name:"css"}),A.defineMIME("text/x-scss",{mediaTypes:i,mediaFeatures:a,mediaValueKeywords:s,propertyKeywords:u,nonStandardPropertyKeywords:f,colorKeywords:g,valueKeywords:y,fontProperties:h,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=w)(e,t):["operator","operator"]},":":function(e){return!!e.match(/\s*\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\w-]+/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(e){return!!e.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),A.defineMIME("text/x-less",{mediaTypes:i,mediaFeatures:a,mediaValueKeywords:s,propertyKeywords:u,nonStandardPropertyKeywords:f,colorKeywords:g,valueKeywords:y,fontProperties:h,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=w)(e,t):["operator","operator"]},"@":function(e){return e.eat("{")?[null,"interpolation"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),A.defineMIME("text/x-gss",{documentTypes:r,mediaTypes:i,mediaFeatures:a,propertyKeywords:u,nonStandardPropertyKeywords:f,fontProperties:h,counterDescriptors:p,colorKeywords:g,valueKeywords:y,supportsAtComponent:!0,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=w)(e,t)}},name:"css",helperType:"gss"})},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror")):"function"==typeof o&&o.amd?o(["../../lib/codemirror"],n):n(CodeMirror)},{"../../lib/codemirror":14}],16:[function(e,t,r){var n;n=function(p){"use strict";var i={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};var o={};function m(e,t){var r,n=e.match(o[r=t]||(o[r]=new RegExp("\\s+"+r+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*")));return n?/^\s*(.*?)\s*$/.exec(n[2])[1]:""}function g(e,t){return new RegExp((t?"^":"")+"</s*"+e+"s*>","i")}function a(e,t){for(var r in e)for(var n=t[r]||(t[r]=[]),i=e[r],o=i.length-1;0<=o;o--)n.unshift(i[o])}p.defineMode("htmlmixed",function(u,e){var d=p.getMode(u,{name:"xml",htmlMode:!0,multilineTagIndentFactor:e.multilineTagIndentFactor,multilineTagIndentPastTag:e.multilineTagIndentPastTag}),f={},t=e&&e.tags,r=e&&e.scriptTypes;if(a(i,f),t&&a(t,f),r)for(var n=r.length-1;0<=n;n--)f.script.unshift(["type",r[n].matches,r[n].mode]);function h(e,t){var r,n=d.token(e,t.htmlState),i=/\btag\b/.test(n);if(i&&!/[<>\s\/]/.test(e.current())&&(r=t.htmlState.tagName&&t.htmlState.tagName.toLowerCase())&&f.hasOwnProperty(r))t.inTag=r+" ";else if(t.inTag&&i&&/>$/.test(e.current())){var o=/^([\S]+) (.*)/.exec(t.inTag);t.inTag=null;var a=">"==e.current()&&function(e,t){for(var r=0;r<e.length;r++){var n=e[r];if(!n[0]||n[1].test(m(t,n[0])))return n[2]}}(f[o[1]],o[2]),l=p.getMode(u,a),s=g(o[1],!0),c=g(o[1],!1);t.token=function(e,t){return e.match(s,!1)?(t.token=h,t.localState=t.localMode=null,null):(r=e,n=c,i=t.localMode.token(e,t.localState),o=r.current(),-1<(a=o.search(n))?r.backUp(o.length-a):o.match(/<\/?$/)&&(r.backUp(o.length),r.match(n,!1)||r.match(o)),i);var r,n,i,o,a},t.localMode=l,t.localState=p.startState(l,d.indent(t.htmlState,""))}else t.inTag&&(t.inTag+=e.current(),e.eol()&&(t.inTag+=" "));return n}return{startState:function(){return{token:h,inTag:null,localMode:null,localState:null,htmlState:p.startState(d)}},copyState:function(e){var t;return e.localState&&(t=p.copyState(e.localMode,e.localState)),{token:e.token,inTag:e.inTag,localMode:e.localMode,localState:t,htmlState:p.copyState(d,e.htmlState)}},token:function(e,t){return t.token(e,t)},indent:function(e,t,r){return!e.localMode||/^\s*<\//.test(t)?d.indent(e.htmlState,t):e.localMode.indent?e.localMode.indent(e.localState,t,r):p.Pass},innerMode:function(e){return{state:e.localState||e.htmlState,mode:e.localMode||d}}}},"xml","javascript","css"),p.defineMIME("text/html","htmlmixed")},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror"),e("../xml/xml"),e("../javascript/javascript"),e("../css/css")):"function"==typeof o&&o.amd?o(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],n):n(CodeMirror)},{"../../lib/codemirror":14,"../css/css":15,"../javascript/javascript":17,"../xml/xml":18}],17:[function(e,t,r){var n;n=function(Ke){"use strict";Ke.defineMode("javascript",function(e,d){var n,i,f=e.indentUnit,h=d.statementIndent,a=d.jsonld,l=d.json||a,c=d.typescript,u=d.wordCharacters||/[\w$\xa1-\uffff]/,s=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),r=e("keyword b"),n=e("keyword c"),i=e("keyword d"),o=e("operator"),a={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:i,break:i,continue:i,new:e("new"),delete:n,void:n,throw:n,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:o,typeof:o,instanceof:o,true:a,false:a,null:a,undefined:a,NaN:a,Infinity:a,this:e("this"),class:e("class"),super:e("atom"),yield:n,export:e("export"),import:e("import"),extends:n,await:n}}(),p=/[+\-*&%=<>!?|~^@]/,m=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function g(e,t,r){return n=e,i=r,t}function v(e,t){var i,r=e.next();if('"'==r||"'"==r)return t.tokenize=(i=r,function(e,t){var r,n=!1;if(a&&"@"==e.peek()&&e.match(m))return t.tokenize=v,g("jsonld-keyword","meta");for(;null!=(r=e.next())&&(r!=i||n);)n=!n&&"\\"==r;return n||(t.tokenize=v),g("string","string")}),t.tokenize(e,t);if("."==r&&e.match(/^\d+(?:[eE][+\-]?\d+)?/))return g("number","number");if("."==r&&e.match(".."))return g("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(r))return g(r);if("="==r&&e.eat(">"))return g("=>","operator");if("0"==r&&e.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i))return g("number","number");if(/\d/.test(r))return e.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/),g("number","number");if("/"==r)return e.eat("*")?(t.tokenize=y)(e,t):e.eat("/")?(e.skipToEnd(),g("comment","comment")):Ve(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),g("regexp","string-2")):(e.eat("="),g("operator","operator",e.current()));if("`"==r)return(t.tokenize=b)(e,t);if("#"==r)return e.skipToEnd(),g("error","error");if(p.test(r))return">"==r&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=r&&"="!=r||e.eat("="):/[<>*+\-]/.test(r)&&(e.eat(r),">"==r&&e.eat(r))),g("operator","operator",e.current());if(u.test(r)){e.eatWhile(u);var n=e.current();if("."!=t.lastType){if(s.propertyIsEnumerable(n)){var o=s[n];return g(o.type,o.style,n)}if("async"==n&&e.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return g("async","keyword",n)}return g("variable","variable",n)}}function y(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=v;break}n="*"==r}return g("comment","comment")}function b(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=v;break}n=!n&&"\\"==r}return g("quasi","string-2",e.current())}var w="([{}])";function o(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf("=>",e.start);if(!(r<0)){if(c){var n=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var i=0,o=!1,a=r-1;0<=a;--a){var l=e.string.charAt(a),s=w.indexOf(l);if(0<=s&&s<3){if(!i){++a;break}if(0==--i){"("==l&&(o=!0);break}}else if(3<=s&&s<6)++i;else if(u.test(l))o=!0;else{if(/["'\/]/.test(l))return;if(o&&!i){++a;break}}}o&&!i&&(t.fatArrowAt=a)}}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function k(e,t,r,n,i,o){this.indented=e,this.column=t,this.type=r,this.prev=i,this.info=o,null!=n&&(this.align=n)}function C(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var S={state:null,column:null,marked:null,cc:null};function T(){for(var e=arguments.length-1;0<=e;e--)S.cc.push(arguments[e])}function L(){return T.apply(null,arguments),!0}function M(e,t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}function r(e){var t=S.state;if(S.marked="def",t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var r=function e(t,r){{if(r){if(r.block){var n=e(t,r.prev);return n?n==r.prev?r:new N(n,r.vars,!0):null}return M(t,r.vars)?r:new N(r.prev,new A(t,r.vars),!1)}return null}}(e,t.context);if(null!=r)return void(t.context=r)}else if(!M(e,t.localVars))return void(t.localVars=new A(e,t.localVars));d.globalVars&&!M(e,t.globalVars)&&(t.globalVars=new A(e,t.globalVars))}function O(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function N(e,t,r){this.prev=e,this.vars=t,this.block=r}function A(e,t){this.name=e,this.next=t}var t=new A("this",new A("arguments",null));function D(){S.state.context=new N(S.state.context,S.state.localVars,!1),S.state.localVars=t}function P(){S.state.context=new N(S.state.context,S.state.localVars,!0),S.state.localVars=null}function _(){S.state.localVars=S.state.context.vars,S.state.context=S.state.context.prev}function F(n,i){var e=function(){var e=S.state,t=e.indented;if("stat"==e.lexical.type)t=e.lexical.indented;else for(var r=e.lexical;r&&")"==r.type&&r.align;r=r.prev)t=r.indented;e.lexical=new k(t,S.stream.column(),n,null,e.lexical,i)};return e.lex=!0,e}function W(){var e=S.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function z(r){return function e(t){return t==r?L():";"==r||"}"==t||")"==t||"]"==t?T():L(e)}}function E(e,t){return"var"==e?L(F("vardef",t),ve,z(";"),W):"keyword a"==e?L(F("form"),B,E,W):"keyword b"==e?L(F("form"),E,W):"keyword d"==e?S.stream.match(/^\s*$/,!1)?L():L(F("stat"),q,z(";"),W):"debugger"==e?L(z(";")):"{"==e?L(F("}"),P,oe,W,_):";"==e?L():"if"==e?("else"==S.state.lexical.info&&S.state.cc[S.state.cc.length-1]==W&&S.state.cc.pop()(),L(F("form"),B,E,W,ke)):"function"==e?L(Oe):"for"==e?L(F("form"),Ce,E,W):"class"==e||c&&"interface"==t?(S.marked="keyword",L(F("form"),De,W)):"variable"==e?c&&"declare"==t?(S.marked="keyword",L(E)):c&&("module"==t||"enum"==t||"type"==t)&&S.stream.match(/^\s*\w/,!1)?(S.marked="keyword","enum"==t?L(qe):"type"==t?L(ce,z("operator"),ce,z(";")):L(F("form"),ye,z("{"),F("}"),oe,W,W)):c&&"namespace"==t?(S.marked="keyword",L(F("form"),I,oe,W)):c&&"abstract"==t?(S.marked="keyword",L(E)):L(F("stat"),Q):"switch"==e?L(F("form"),B,z("{"),F("}","switch"),P,oe,W,W,_):"case"==e?L(I,z(":")):"default"==e?L(z(":")):"catch"==e?L(F("form"),D,H,E,W,_):"export"==e?L(F("stat"),We,W):"import"==e?L(F("stat"),Ee,W):"async"==e?L(E):"@"==t?L(I,E):T(F("stat"),I,z(";"),W)}function H(e){if("("==e)return L(Ne,z(")"))}function I(e,t){return R(e,t,!1)}function j(e,t){return R(e,t,!0)}function B(e){return"("!=e?T():L(F(")"),I,z(")"),W)}function R(e,t,r){if(S.state.fatArrowAt==S.stream.start){var n=r?X:$;if("("==e)return L(D,F(")"),ne(Ne,")"),W,z("=>"),n,_);if("variable"==e)return T(D,ye,z("=>"),n,_)}var i,o=r?V:U;return x.hasOwnProperty(e)?L(o):"function"==e?L(Oe,o):"class"==e||c&&"interface"==t?(S.marked="keyword",L(F("form"),Ae,W)):"keyword c"==e||"async"==e?L(r?j:I):"("==e?L(F(")"),q,z(")"),W,o):"operator"==e||"spread"==e?L(r?j:I):"["==e?L(F("]"),Re,W,o):"{"==e?ie(ee,"}",null,o):"quasi"==e?T(K,o):"new"==e?L((i=r,function(e){return"."==e?L(i?Z:Y):"variable"==e&&c?L(pe,i?V:U):T(i?j:I)})):"import"==e?L(I):L()}function q(e){return e.match(/[;\}\)\],]/)?T():T(I)}function U(e,t){return","==e?L(I):V(e,t,!1)}function V(e,t,r){var n=0==r?U:V,i=0==r?I:j;return"=>"==e?L(D,r?X:$,_):"operator"==e?/\+\+|--/.test(t)||c&&"!"==t?L(n):c&&"<"==t&&S.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?L(F(">"),ne(ce,">"),W,n):"?"==t?L(I,z(":"),i):L(i):"quasi"==e?T(K,n):";"!=e?"("==e?ie(j,")","call",n):"."==e?L(J,n):"["==e?L(F("]"),q,z("]"),W,n):c&&"as"==t?(S.marked="keyword",L(ce,n)):"regexp"==e?(S.state.lastType=S.marked="operator",S.stream.backUp(S.stream.pos-S.stream.start-1),L(i)):void 0:void 0}function K(e,t){return"quasi"!=e?T():"${"!=t.slice(t.length-2)?L(K):L(I,G)}function G(e){if("}"==e)return S.marked="string-2",S.state.tokenize=b,L(K)}function $(e){return o(S.stream,S.state),T("{"==e?E:I)}function X(e){return o(S.stream,S.state),T("{"==e?E:j)}function Y(e,t){if("target"==t)return S.marked="keyword",L(U)}function Z(e,t){if("target"==t)return S.marked="keyword",L(V)}function Q(e){return":"==e?L(W,E):T(U,z(";"),W)}function J(e){if("variable"==e)return S.marked="property",L()}function ee(e,t){if("async"==e)return S.marked="property",L(ee);if("variable"==e||"keyword"==S.style){return S.marked="property","get"==t||"set"==t?L(te):(c&&S.state.fatArrowAt==S.stream.start&&(r=S.stream.match(/^\s*:\s*/,!1))&&(S.state.fatArrowAt=S.stream.pos+r[0].length),L(re));var r}else{if("number"==e||"string"==e)return S.marked=a?"property":S.style+" property",L(re);if("jsonld-keyword"==e)return L(re);if(c&&O(t))return S.marked="keyword",L(ee);if("["==e)return L(I,ae,z("]"),re);if("spread"==e)return L(j,re);if("*"==t)return S.marked="keyword",L(ee);if(":"==e)return T(re)}}function te(e){return"variable"!=e?T(re):(S.marked="property",L(Oe))}function re(e){return":"==e?L(j):"("==e?T(Oe):void 0}function ne(n,i,o){function a(e,t){if(o?-1<o.indexOf(e):","==e){var r=S.state.lexical;return"call"==r.info&&(r.pos=(r.pos||0)+1),L(function(e,t){return e==i||t==i?T():T(n)},a)}return e==i||t==i?L():L(z(i))}return function(e,t){return e==i||t==i?L():T(n,a)}}function ie(e,t,r){for(var n=3;n<arguments.length;n++)S.cc.push(arguments[n]);return L(F(t,r),ne(e,t),W)}function oe(e){return"}"==e?L():T(E,oe)}function ae(e,t){if(c){if(":"==e)return L(ce);if("?"==t)return L(ae)}}function le(e){if(c&&":"==e)return S.stream.match(/^\s*\w+\s+is\b/,!1)?L(I,se,ce):L(ce)}function se(e,t){if("is"==t)return S.marked="keyword",L()}function ce(e,t){return"keyof"==t||"typeof"==t?(S.marked="keyword",L("keyof"==t?ce:j)):"variable"==e||"void"==t?(S.marked="type",L(he)):"string"==e||"number"==e||"atom"==e?L(he):"["==e?L(F("]"),ne(ce,"]",","),W,he):"{"==e?L(F("}"),ne(de,"}",",;"),W,he):"("==e?L(ne(fe,")"),ue):"<"==e?L(ne(ce,">"),ce):void 0}function ue(e){if("=>"==e)return L(ce)}function de(e,t){return"variable"==e||"keyword"==S.style?(S.marked="property",L(de)):"?"==t?L(de):":"==e?L(ce):"["==e?L(I,ae,z("]"),de):void 0}function fe(e,t){return"variable"==e&&S.stream.match(/^\s*[?:]/,!1)||"?"==t?L(fe):":"==e?L(ce):T(ce)}function he(e,t){return"<"==t?L(F(">"),ne(ce,">"),W,he):"|"==t||"."==e||"&"==t?L(ce):"["==e?L(z("]"),he):"extends"==t||"implements"==t?(S.marked="keyword",L(ce)):void 0}function pe(e,t){if("<"==t)return L(F(">"),ne(ce,">"),W,he)}function me(){return T(ce,ge)}function ge(e,t){if("="==t)return L(ce)}function ve(e,t){return"enum"==t?(S.marked="keyword",L(qe)):T(ye,ae,we,xe)}function ye(e,t){return c&&O(t)?(S.marked="keyword",L(ye)):"variable"==e?(r(t),L()):"spread"==e?L(ye):"["==e?ie(ye,"]"):"{"==e?ie(be,"}"):void 0}function be(e,t){return"variable"!=e||S.stream.match(/^\s*:/,!1)?("variable"==e&&(S.marked="property"),"spread"==e?L(ye):"}"==e?T():L(z(":"),ye,we)):(r(t),L(we))}function we(e,t){if("="==t)return L(j)}function xe(e){if(","==e)return L(ve)}function ke(e,t){if("keyword b"==e&&"else"==t)return L(F("form","else"),E,W)}function Ce(e,t){return"await"==t?L(Ce):"("==e?L(F(")"),Se,z(")"),W):void 0}function Se(e){return"var"==e?L(ve,z(";"),Le):";"==e?L(Le):"variable"==e?L(Te):T(I,z(";"),Le)}function Te(e,t){return"in"==t||"of"==t?(S.marked="keyword",L(I)):L(U,Le)}function Le(e,t){return";"==e?L(Me):"in"==t||"of"==t?(S.marked="keyword",L(I)):T(I,z(";"),Me)}function Me(e){")"!=e&&L(I)}function Oe(e,t){return"*"==t?(S.marked="keyword",L(Oe)):"variable"==e?(r(t),L(Oe)):"("==e?L(D,F(")"),ne(Ne,")"),W,le,E,_):c&&"<"==t?L(F(">"),ne(me,">"),W,Oe):void 0}function Ne(e,t){return"@"==t&&L(I,Ne),"spread"==e?L(Ne):c&&O(t)?(S.marked="keyword",L(Ne)):T(ye,ae,we)}function Ae(e,t){return"variable"==e?De(e,t):Pe(e,t)}function De(e,t){if("variable"==e)return r(t),L(Pe)}function Pe(e,t){return"<"==t?L(F(">"),ne(me,">"),W,Pe):"extends"==t||"implements"==t||c&&","==e?("implements"==t&&(S.marked="keyword"),L(c?ce:I,Pe)):"{"==e?L(F("}"),_e,W):void 0}function _e(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||c&&O(t))&&S.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(S.marked="keyword",L(_e)):"variable"==e||"keyword"==S.style?(S.marked="property",L(c?Fe:Oe,_e)):"["==e?L(I,ae,z("]"),c?Fe:Oe,_e):"*"==t?(S.marked="keyword",L(_e)):";"==e?L(_e):"}"==e?L():"@"==t?L(I,_e):void 0}function Fe(e,t){return"?"==t?L(Fe):":"==e?L(ce,we):"="==t?L(j):T(Oe)}function We(e,t){return"*"==t?(S.marked="keyword",L(Be,z(";"))):"default"==t?(S.marked="keyword",L(I,z(";"))):"{"==e?L(ne(ze,"}"),Be,z(";")):T(E)}function ze(e,t){return"as"==t?(S.marked="keyword",L(z("variable"))):"variable"==e?T(j,ze):void 0}function Ee(e){return"string"==e?L():"("==e?T(I):T(He,Ie,Be)}function He(e,t){return"{"==e?ie(He,"}"):("variable"==e&&r(t),"*"==t&&(S.marked="keyword"),L(je))}function Ie(e){if(","==e)return L(He,Ie)}function je(e,t){if("as"==t)return S.marked="keyword",L(He)}function Be(e,t){if("from"==t)return S.marked="keyword",L(I)}function Re(e){return"]"==e?L():T(ne(j,"]"))}function qe(){return T(F("form"),ye,z("{"),F("}"),ne(Ue,"}"),W,W)}function Ue(){return T(ye,we)}function Ve(e,t,r){return t.tokenize==v&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return W.lex=_.lex=!0,{startState:function(e){var t={tokenize:v,lastType:"sof",cc:[],lexical:new k((e||0)-f,0,"block",!1),localVars:d.localVars,context:d.localVars&&new N(null,null,!1),indented:e||0};return d.globalVars&&"object"==typeof d.globalVars&&(t.globalVars=d.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),o(e,t)),t.tokenize!=y&&e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"==n?r:(t.lastType="operator"!=n||"++"!=i&&"--"!=i?n:"incdec",function(e,t,r,n,i){var o=e.cc;for(S.state=e,S.stream=i,S.marked=null,S.cc=o,S.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((o.length?o.pop():l?I:E)(r,n)){for(;o.length&&o[o.length-1].lex;)o.pop()();return S.marked?S.marked:"variable"==r&&C(e,n)?"variable-2":t}}(t,r,n,i,e))},indent:function(e,t){if(e.tokenize==y)return Ke.Pass;if(e.tokenize!=v)return 0;var r,n=t&&t.charAt(0),i=e.lexical;if(!/^\s*else\b/.test(t))for(var o=e.cc.length-1;0<=o;--o){var a=e.cc[o];if(a==W)i=i.prev;else if(a!=ke)break}for(;("stat"==i.type||"form"==i.type)&&("}"==n||(r=e.cc[e.cc.length-1])&&(r==U||r==V)&&!/^[,\.=+\-*:?[\(]/.test(t));)i=i.prev;h&&")"==i.type&&"stat"==i.prev.type&&(i=i.prev);var l,s,c=i.type,u=n==c;return"vardef"==c?i.indented+("operator"==e.lastType||","==e.lastType?i.info.length+1:0):"form"==c&&"{"==n?i.indented:"form"==c?i.indented+f:"stat"==c?i.indented+(s=t,"operator"==(l=e).lastType||","==l.lastType||p.test(s.charAt(0))||/[,.]/.test(s.charAt(0))?h||f:0):"switch"!=i.info||u||0==d.doubleIndentSwitch?i.align?i.column+(u?0:1):i.indented+(u?0:f):i.indented+(/^(?:case|default)\b/.test(t)?f:2*f)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:a,jsonMode:l,expressionAllowed:Ve,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=I&&t!=j||e.cc.pop()}}}),Ke.registerHelper("wordChars","javascript",/[\w$]/),Ke.defineMIME("text/javascript","javascript"),Ke.defineMIME("text/ecmascript","javascript"),Ke.defineMIME("application/javascript","javascript"),Ke.defineMIME("application/x-javascript","javascript"),Ke.defineMIME("application/ecmascript","javascript"),Ke.defineMIME("application/json",{name:"javascript",json:!0}),Ke.defineMIME("application/x-json",{name:"javascript",json:!0}),Ke.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),Ke.defineMIME("text/typescript",{name:"javascript",typescript:!0}),Ke.defineMIME("application/typescript",{name:"javascript",typescript:!0})},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror")):"function"==typeof o&&o.amd?o(["../../lib/codemirror"],n):n(CodeMirror)},{"../../lib/codemirror":14}],18:[function(e,t,r){var n;n=function(C){"use strict";var S={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},T={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};C.defineMode("xml",function(e,t){var a,o,l=e.indentUnit,s={},r=t.htmlMode?S:T;for(var n in r)s[n]=r[n];for(var n in t)s[n]=t[n];function c(t,r){function e(e){return(r.tokenize=e)(t,r)}var n=t.next();return"<"==n?t.eat("!")?t.eat("[")?t.match("CDATA[")?e(i("atom","]]>")):null:t.match("--")?e(i("comment","--\x3e")):t.match("DOCTYPE",!0,!0)?(t.eatWhile(/[\w\._\-]/),e(function n(i){return function(e,t){for(var r;null!=(r=e.next());){if("<"==r)return t.tokenize=n(i+1),t.tokenize(e,t);if(">"==r){if(1==i){t.tokenize=c;break}return t.tokenize=n(i-1),t.tokenize(e,t)}}return"meta"}}(1))):null:t.eat("?")?(t.eatWhile(/[\w\._\-]/),r.tokenize=i("meta","?>"),"meta"):(a=t.eat("/")?"closeTag":"openTag",r.tokenize=u,"tag bracket"):"&"==n?(t.eat("#")?t.eat("x")?t.eatWhile(/[a-fA-F\d]/)&&t.eat(";"):t.eatWhile(/[\d]/)&&t.eat(";"):t.eatWhile(/[\w\.\-:]/)&&t.eat(";"))?"atom":"error":(t.eatWhile(/[^&<]/),null)}function u(e,t){var r,n,i=e.next();if(">"==i||"/"==i&&e.eat(">"))return t.tokenize=c,a=">"==i?"endTag":"selfcloseTag","tag bracket";if("="==i)return a="equals",null;if("<"==i){t.tokenize=c,t.state=p,t.tagName=t.tagStart=null;var o=t.tokenize(e,t);return o?o+" tag error":"tag error"}return/[\'\"]/.test(i)?(t.tokenize=(r=i,(n=function(e,t){for(;!e.eol();)if(e.next()==r){t.tokenize=u;break}return"string"}).isInAttribute=!0,n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function i(r,n){return function(e,t){for(;!e.eol();){if(e.match(n)){t.tokenize=c;break}e.next()}return r}}function d(e,t,r){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=r,(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function f(e){e.context&&(e.context=e.context.prev)}function h(e,t){for(var r;;){if(!e.context)return;if(r=e.context.tagName,!s.contextGrabbers.hasOwnProperty(r)||!s.contextGrabbers[r].hasOwnProperty(t))return;f(e)}}function p(e,t,r){return"openTag"==e?(r.tagStart=t.column(),m):"closeTag"==e?g:p}function m(e,t,r){return"word"==e?(r.tagName=t.current(),o="tag",b):s.allowMissingTagName&&"endTag"==e?(o="tag bracket",b(e,t,r)):(o="error",m)}function g(e,t,r){if("word"==e){var n=t.current();return r.context&&r.context.tagName!=n&&s.implicitlyClosed.hasOwnProperty(r.context.tagName)&&f(r),r.context&&r.context.tagName==n||!1===s.matchClosing?(o="tag",v):(o="tag error",y)}return s.allowMissingTagName&&"endTag"==e?(o="tag bracket",v(e,t,r)):(o="error",y)}function v(e,t,r){return"endTag"!=e?(o="error",v):(f(r),p)}function y(e,t,r){return o="error",v(e,0,r)}function b(e,t,r){if("word"==e)return o="attribute",w;if("endTag"==e||"selfcloseTag"==e){var n=r.tagName,i=r.tagStart;return r.tagName=r.tagStart=null,"selfcloseTag"==e||s.autoSelfClosers.hasOwnProperty(n)?h(r,n):(h(r,n),r.context=new d(r,n,i==r.indented)),p}return o="error",b}function w(e,t,r){return"equals"==e?x:(s.allowMissing||(o="error"),b(e,0,r))}function x(e,t,r){return"string"==e?k:"word"==e&&s.allowUnquoted?(o="string",b):(o="error",b(e,0,r))}function k(e,t,r){return"string"==e?k:b(e,0,r)}return c.isInText=!0,{startState:function(e){var t={tokenize:c,state:p,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;a=null;var r=t.tokenize(e,t);return(r||a)&&"comment"!=r&&(o=null,t.state=t.state(a||r,e,t),o&&(r="error"==o?r+" error":o)),r},indent:function(e,t,r){var n=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+l;if(n&&n.noIndent)return C.Pass;if(e.tokenize!=u&&e.tokenize!=c)return r?r.match(/^(\s*)/)[0].length:0;if(e.tagName)return!1!==s.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+l*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/<!\[CDATA\[/.test(t))return 0;var i=t&&/^<(\/)?([\w_:\.-]*)/.exec(t);if(i&&i[1])for(;n;){if(n.tagName==i[2]){n=n.prev;break}if(!s.implicitlyClosed.hasOwnProperty(n.tagName))break;n=n.prev}else if(i)for(;n;){var o=s.contextGrabbers[n.tagName];if(!o||!o.hasOwnProperty(i[2]))break;n=n.prev}for(;n&&n.prev&&!n.startOfLine;)n=n.prev;return n?n.indent+l:e.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(e){e.state==x&&(e.state=b)}}}),C.defineMIME("text/xml","xml"),C.defineMIME("application/xml","xml"),C.mimeModes.hasOwnProperty("text/html")||C.defineMIME("text/html",{name:"xml",htmlMode:!0})},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror")):"function"==typeof o&&o.amd?o(["../../lib/codemirror"],n):n(CodeMirror)},{"../../lib/codemirror":14}],19:[function(e,t,n){!function(e,t){if("function"==typeof o&&o.amd)o(["exports"],t);else if(void 0!==n)t(n);else{var r={};t(r),e.decko=r}}(this,function(e){"use strict";e.__esModule=!0;var t={},l=Object.prototype.hasOwnProperty,r=function(n,e){if("function"==typeof e){var t=n;n=e,e=t}var i=e&&e.delay||e||0,o=void 0,a=void 0,l=void 0;return function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];o=t,a=this,l||(l=setTimeout(function(){n.apply(a,o),o=a=l=null},i))}},n=function(e,t,r){var n=r.value;return{configurable:!0,get:function(){var e=n.bind(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e}}},i=s(function(i){var o=arguments.length<=1||void 0===arguments[1]?t:arguments[1],a=o.cache||{};return function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=String(t[0]);return!1===o.caseSensitive&&(n=n.toLowerCase()),l.call(a,n)?a[n]:a[n]=i.apply(this,t)}}),o=s(r),a=s(function(e,t){return e.bind(t)},function(){return n});function s(i,o){var a,l=(o=o||i.decorate||(a=i,function(n){return"function"==typeof n?a(n):function(e,t,r){r.value=a(r.value,n,e,t,r)}}))();return function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=t.length;return(n<2?o:2<n?l:i).apply(void 0,t)}}e.memoize=i,e.debounce=o,e.bind=a,e.default={memoize:i,debounce:o,bind:a}})},{}],20:[function(e,t,r){t.exports=function(a,e,l){var s=e.split("."),t=a.__lsc||(a.__lsc={});return t[e+l]||(t[e+l]=function(e){for(var t=e&&e.target||this,r={},n=r,i="string"==typeof l?function(e,t,r,n){for(n=0,t=t.split?t.split("."):t;e&&n<t.length;)e=e[t[n++]];return void 0===e?r:e}(e,l):t.nodeName?t.type.match(/^che|rad/)?t.checked:t.value:e,o=0;o<s.length-1;o++)n=n[s[o]]||(n[s[o]]=!o&&a.state[s[o]]||{});n[s[o]]=i,a.setState(r)})}},{}],21:[function(e,t,r){var n,i;n=this,i=function(){var i=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,P=Object.keys||function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r);return t},_=function(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},F=function(e,t){return String(e).replace(/(\n+)/g,"$1"+(t||"\t"))},W=function(e,t,r){return String(e).length>(t||40)||!r&&-1!==String(e).indexOf("\n")||-1!==String(e).indexOf("<")},o={};function z(e){var t="";for(var r in e){var n=e[r];null!=n&&(t&&(t+=" "),t+=o[r]||(o[r]=r.replace(/([A-Z])/g,"-$1").toLowerCase()),t+=": ",t+=n,"number"==typeof n&&!1===i.test(r)&&(t+="px"),t+=";")}return t||void 0}function E(e,t){for(var r in t)e[r]=t[r];return e}var r={shallow:!0},H=[],I=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/;function j(e,t,r,n,i){if(null==e||"boolean"==typeof e)return"";var o=e.nodeName,a=e.attributes,l=!1;t=t||{};var s,c,u,d,f=(r=r||{}).pretty,h="string"==typeof f?f:"\t";if("object"!=typeof e&&!o)return _(e);if("function"==typeof o){if(l=!0,!r.shallow||!n&&!1!==r.renderRootComponent){var p,m=(u=(c=e).nodeName.defaultProps,d=E({},u||c.attributes),u&&E(d,c.attributes),c.children&&(d.children=c.children),d);if(o.prototype&&"function"==typeof o.prototype.render){var g=new o(m,t);g._disable=g.__x=!0,g.props=m,g.context=t,g.componentWillMount&&g.componentWillMount(),p=g.render(g.props,g.state,g.context),g.getChildContext&&(t=E(E({},t),g.getChildContext()))}else p=o(m,t);return j(p,t,r,!1!==r.shallowHighOrder)}o=(s=o).displayName||s!==Function&&s.name||function(e){var t=(Function.prototype.toString.call(e).match(/^\s*function\s+([^( ]+)/)||"")[1];if(!t){for(var r=-1,n=H.length;n--;)if(H[n]===e){r=n;break}r<0&&(r=H.push(e)-1),t="UnnamedComponent"+r}return t}(s)}var v,y="";if(a){var b=P(a);r&&!0===r.sortAttributes&&b.sort();for(var w=0;w<b.length;w++){var x=b[w],k=a[x];if("children"!==x&&!x.match(/[\s\n\\/='"\0<>]/)&&(r&&r.allAttributes||"key"!==x&&"ref"!==x)){if("className"===x){if(a.class)continue;x="class"}else i&&x.match(/^xlink:?./)&&(x=x.toLowerCase().replace(/^xlink:?/,"xlink:"));"style"===x&&k&&"object"==typeof k&&(k=z(k));var C=r.attributeHook&&r.attributeHook(x,k,t,r,l);if(C||""===C)y+=C;else if("dangerouslySetInnerHTML"===x)v=k&&k.__html;else if((k||0===k||""===k)&&"function"!=typeof k){if(!(!0!==k&&""!==k||(k=x,r&&r.xml))){y+=" "+x;continue}y+=" "+x+'="'+_(k)+'"'}}}}var S=y.replace(/^\n\s*/," ");if(S===y||~S.indexOf("\n")?f&&~y.indexOf("\n")&&(y+="\n"):y=S,y="<"+o+y+">",o.match(/[\s\n\\/='"\0<>]/))throw y;var T=o.match(I);T&&(y=y.replace(/>$/," />"));var L=[];if(v)f&&W(v)&&(v="\n"+h+F(v,h)),y+=v;else if(e.children){for(var M=~y.indexOf("\n"),O=0;O<e.children.length;O++){var N=e.children[O];if(null!=N&&!1!==N){var A=j(N,t,r,!0,"svg"===o||"foreignObject"!==o&&i);!M&&f&&W(A)&&(M=!0),A&&L.push(A)}}if(f&&M)for(var D=L.length;D--;)L[D]="\n"+h+F(L[D],h)}if(L.length)y+=L.join("");else if(r&&r.xml)return y.substring(0,y.length-1)+" />";return T||(f&&~y.indexOf("\n")&&(y+="\n"),y+="</"+o+">"),y}return(j.render=j).shallowRender=function(e,t){return j(e,t,r)},j},"object"==typeof r&&void 0!==t?t.exports=i():"function"==typeof o&&o.amd?o(i):n.preactRenderToString=i()},{}],22:[function(e,y,t){!function(){"use strict";function r(e,t){var r,n,i,o,a=d;for(o=arguments.length;2<o--;)u.push(arguments[o]);for(t&&null!=t.children&&(u.length||u.push(t.children),delete t.children);u.length;)if((n=u.pop())&&void 0!==n.pop)for(o=n.length;o--;)u.push(n[o]);else"boolean"==typeof n&&(n=null),(i="function"!=typeof e)&&(null==n?n="":"number"==typeof n?n=String(n):"string"!=typeof n&&(i=!1)),i&&r?a[a.length-1]+=n:a===d?a=[n]:a.push(n),r=i;var l=new c;return l.nodeName=e,l.children=a,l.attributes=null==t?void 0:t,l.key=null==t?void 0:t.key,void 0!==E.vnode&&E.vnode(l),l}function L(e,t){for(var r in t)e[r]=t[r];return e}function o(e){!e.__d&&(e.__d=!0)&&1==h.push(e)&&(E.debounceRendering||i)(t)}function t(){var e,t=h;for(h=[];e=t.pop();)e.__d&&W(e)}function T(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function M(e){var t=L({},e.attributes);t.children=e.children;var r=e.nodeName.defaultProps;if(void 0!==r)for(var n in r)void 0===t[n]&&(t[n]=r[n]);return t}function O(e){var t=e.parentNode;t&&t.removeChild(e)}function m(e,t,r,n,i){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)r&&r(null),n&&n(e);else if("class"!==t||i)if("style"===t){if(n&&"string"!=typeof n&&"string"!=typeof r||(e.style.cssText=n||""),n&&"object"==typeof n){if("string"!=typeof r)for(var o in r)o in n||(e.style[o]="");for(var o in n)e.style[o]="number"==typeof n[o]&&!1===f.test(o)?n[o]+"px":n[o]}}else if("dangerouslySetInnerHTML"===t)n&&(e.innerHTML=n.__html||"");else if("o"==t[0]&&"n"==t[1]){var a=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),n?r||e.addEventListener(t,s,a):e.removeEventListener(t,s,a),(e.__l||(e.__l={}))[t]=n}else if("list"!==t&&"type"!==t&&!i&&t in e){try{e[t]=null==n?"":n}catch(e){}null!=n&&!1!==n||"spellcheck"==t||e.removeAttribute(t)}else{var l=i&&t!==(t=t.replace(/^xlink:?/,""));null==n||!1===n?l?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof n&&(l?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),n):e.setAttribute(t,n))}else e.className=n||""}function s(e){return this.__l[e.type](E.event&&E.event(e)||e)}function N(){for(var e;e=H.pop();)E.afterMount&&E.afterMount(e),e.componentDidMount&&e.componentDidMount()}function A(e,t,r,n,i,o){I++||(g=null!=i&&void 0!==i.ownerSVGElement,v=null!=e&&!("__preactattr_"in e));var a=D(e,t,r,n,o);return i&&a.parentNode!==i&&i.appendChild(a),--I||(v=!1,o||N()),a}function D(e,t,r,n,i){var o=e,a=g;if(null!=t&&"boolean"!=typeof t||(t=""),"string"==typeof t||"number"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||i)?e.nodeValue!=t&&(e.nodeValue=t):(o=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(o,e),P(e,!0))),o.__preactattr_=!0,o;var l,s,c=t.nodeName;if("function"==typeof c)return function(e,t,r,n){var i=e&&e._component,o=i,a=e,l=i&&e._componentConstructor===t.nodeName,s=l,c=M(t);for(;i&&!s&&(i=i.__u);)s=i.constructor===t.nodeName;i&&s&&(!n||i._component)?(F(i,c,3,r,n),e=i.base):(o&&!l&&(z(o),e=a=null),i=_(t.nodeName,c,r),e&&!i.__b&&(i.__b=e,a=null),F(i,c,1,r,n),e=i.base,a&&e!==a&&(a._component=null,P(a,!1)));return e}(e,t,r,n);if(g="svg"===c||"foreignObject"!==c&&g,c=String(c),(!e||!T(e,c))&&(l=c,(s=g?document.createElementNS("http://www.w3.org/2000/svg",l):document.createElement(l)).__n=l,o=s,e)){for(;e.firstChild;)o.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(o,e),P(e,!0)}var u=o.firstChild,d=o.__preactattr_,f=t.children;if(null==d){d=o.__preactattr_={};for(var h=o.attributes,p=h.length;p--;)d[h[p].name]=h[p].value}return!v&&f&&1===f.length&&"string"==typeof f[0]&&null!=u&&void 0!==u.splitText&&null==u.nextSibling?u.nodeValue!=f[0]&&(u.nodeValue=f[0]):(f&&f.length||null!=u)&&function(e,t,r,n,i){var o,a,l,s,c,u=e.childNodes,d=[],f={},h=0,p=0,m=u.length,g=0,v=t?t.length:0;if(0!==m)for(var y=0;y<m;y++){var b=u[y],w=b.__preactattr_,x=v&&w?b._component?b._component.__k:w.key:null;null!=x?(h++,f[x]=b):(w||(void 0!==b.splitText?!i||b.nodeValue.trim():i))&&(d[g++]=b)}if(0!==v)for(var y=0;y<v;y++){s=t[y],c=null;var x=s.key;if(null!=x)h&&void 0!==f[x]&&(c=f[x],f[x]=void 0,h--);else if(p<g)for(o=p;o<g;o++)if(void 0!==d[o]&&(k=a=d[o],S=i,"string"==typeof(C=s)||"number"==typeof C?void 0!==k.splitText:"string"==typeof C.nodeName?!k._componentConstructor&&T(k,C.nodeName):S||k._componentConstructor===C.nodeName)){c=a,d[o]=void 0,o===g-1&&g--,o===p&&p++;break}c=D(c,s,r,n),l=u[y],c&&c!==e&&c!==l&&(null==l?e.appendChild(c):c===l.nextSibling?O(l):e.insertBefore(c,l))}var k,C,S;if(h)for(var y in f)void 0!==f[y]&&P(f[y],!1);for(;p<=g;)void 0!==(c=d[g--])&&P(c,!1)}(o,f,r,n,v||null!=d.dangerouslySetInnerHTML),function(e,t,r){var n;for(n in r)t&&null!=t[n]||null==r[n]||m(e,n,r[n],r[n]=void 0,g);for(n in t)"children"===n||"innerHTML"===n||n in r&&t[n]===("value"===n||"checked"===n?e[n]:r[n])||m(e,n,r[n],r[n]=t[n],g)}(o,t.attributes,d),g=a,o}function P(e,t){var r=e._component;r?z(r):(null!=e.__preactattr_&&e.__preactattr_.ref&&e.__preactattr_.ref(null),!1!==t&&null!=e.__preactattr_||O(e),n(e))}function n(e){for(e=e.lastChild;e;){var t=e.previousSibling;P(e,!0),e=t}}function _(e,t,r){var n,i=p.length;for(e.prototype&&e.prototype.render?(n=new e(t,r),l.call(n,t,r)):((n=new l(t,r)).constructor=e,n.render=a);i--;)if(p[i].constructor===e)return n.__b=p[i].__b,p.splice(i,1),n;return n}function a(e,t,r){return this.constructor(e,r)}function F(e,t,r,n,i){e.__x||(e.__x=!0,e.__r=t.ref,e.__k=t.key,delete t.ref,delete t.key,void 0===e.constructor.getDerivedStateFromProps&&(!e.base||i?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,n)),n&&n!==e.context&&(e.__c||(e.__c=e.context),e.context=n),e.__p||(e.__p=e.props),e.props=t,e.__x=!1,0!==r&&(1!==r&&!1===E.syncComponentUpdates&&e.base?o(e):W(e,1,i)),e.__r&&e.__r(e))}function W(e,t,r,n){if(!e.__x){var i,o,a,l=e.props,s=e.state,c=e.context,u=e.__p||l,d=e.__s||s,f=e.__c||c,h=e.base,p=e.__b,m=h||p,g=e._component,v=!1,y=f;if(e.constructor.getDerivedStateFromProps&&(s=L(L({},s),e.constructor.getDerivedStateFromProps(l,s)),e.state=s),h&&(e.props=u,e.state=d,e.context=f,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(l,s,c)?v=!0:e.componentWillUpdate&&e.componentWillUpdate(l,s,c),e.props=l,e.state=s,e.context=c),e.__p=e.__s=e.__c=e.__b=null,e.__d=!1,!v){i=e.render(l,s,c),e.getChildContext&&(c=L(L({},c),e.getChildContext())),h&&e.getSnapshotBeforeUpdate&&(y=e.getSnapshotBeforeUpdate(u,d));var b,w,x=i&&i.nodeName;if("function"==typeof x){var k=M(i);(o=g)&&o.constructor===x&&k.key==o.__k?F(o,k,1,c,!1):(b=o,e._component=o=_(x,k,c),o.__b=o.__b||p,o.__u=e,F(o,k,0,c,!1),W(o,1,r,!0)),w=o.base}else a=m,(b=g)&&(a=e._component=null),(m||1===t)&&(a&&(a._component=null),w=A(a,i,c,r||!h,m&&m.parentNode,!0));if(m&&w!==m&&o!==g){var C=m.parentNode;C&&w!==C&&(C.replaceChild(w,m),b||(m._component=null,P(m,!1)))}if(b&&z(b),(e.base=w)&&!n){for(var S=e,T=e;T=T.__u;)(S=T).base=w;w._component=S,w._componentConstructor=S.constructor}}for(!h||r?H.unshift(e):v||(e.componentDidUpdate&&e.componentDidUpdate(u,d,y),E.afterUpdate&&E.afterUpdate(e));e.__h.length;)e.__h.pop().call(e);I||n||N()}}function z(e){E.beforeUnmount&&E.beforeUnmount(e);var t=e.base;e.__x=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var r=e._component;r?z(r):t&&(t.__preactattr_&&t.__preactattr_.ref&&t.__preactattr_.ref(null),O(e.__b=t),p.push(e),n(t)),e.__r&&e.__r(null)}function l(e,t){this.__d=!0,this.context=t,this.props=e,this.state=this.state||{},this.__h=[]}var c=function(){},E={},u=[],d=[],i="function"==typeof Promise?Promise.resolve().then.bind(Promise.resolve()):setTimeout,f=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,h=[],H=[],I=0,g=!1,v=!1,p=[];L(l.prototype,{setState:function(e,t){var r=this.__s=this.state;"function"==typeof e&&(e=e(r,this.props)),this.state=L(L({},r),e),t&&this.__h.push(t),o(this)},forceUpdate:function(e){e&&this.__h.push(e),W(this,2)},render:function(){}});var e={h:r,createElement:r,cloneElement:function(e,t){return r(e.nodeName,L(L({},e.attributes),t),2<arguments.length?[].slice.call(arguments,2):e.children)},Component:l,render:function(e,t,r){return A(r,e,{},!1,t,!1)},rerender:t,options:E};void 0!==y?y.exports=e:self.preact=e}()},{}],23:[function(e,t,r){function c(n){document.addEventListener("mouseover",function(e){var t=e.target,r=n(t);r||(r=(t=t.parentElement)&&n(t)),r&&c.show(t,r,!0)})}c.show=function(e,t,l){var s="data-tlite";t=t||{},(e.tooltip||function(e,t){var r,n,i;function o(){c.hide(e,!0)}function a(){r||(r=function(l,e,t){var s=document.createElement("span"),r=t.grav||l.getAttribute("data-tlite")||"n";s.innerHTML=e,l.appendChild(s);var c=r[0]||"",u=r[1]||"";function n(){s.className="tlite tlite-"+c+u;var e=l.offsetTop,t=l.offsetLeft;s.offsetParent===l&&(e=t=0);var r=l.offsetWidth,n=l.offsetHeight,i=s.offsetHeight,o=s.offsetWidth,a=t+r/2;s.style.top=("s"===c?e-i-10:"n"===c?e+n+10:e+n/2-i/2)+"px",s.style.left=("w"===u?t:"e"===u?t+r-o:"w"===c?t+r+10:"e"===c?t-o-10:a-o/2)+"px"}n();var i=s.getBoundingClientRect();"s"===c&&i.top<0?(c="n",n()):"n"===c&&i.bottom>window.innerHeight?(c="s",n()):"e"===c&&i.left<0?(c="w",n()):"w"===c&&i.right>window.innerWidth&&(c="e",n());return s.className+=" tlite-visible",s}(e,i,t))}return e.addEventListener("mousedown",o),e.addEventListener("mouseleave",o),e.tooltip={show:function(){i=e.title||e.getAttribute(s)||i,e.title="",e.setAttribute(s,""),i&&!n&&(n=setTimeout(a,l?150:1))},hide:function(e){if(l===e){n=clearTimeout(n);var t=r&&r.parentNode;t&&t.removeChild(r),r=void 0}}}}(e,t)).show()},c.hide=function(e,t){e.tooltip&&e.tooltip.hide(t)},void 0!==t&&t.exports&&(t.exports=c)},{}]},{},[2])}();
//# sourceMappingURL=admin.min.js.map
-{"version":3,"sources":["admin.js"],"names":["require","undefined","define","e","t","n","r","s","o","u","a","i","f","Error","code","l","exports","call","length","1","module","handleClickEvent","target","tagName","hasAttribute","confirm","getAttribute","preventDefault","Object","defineProperty","value","default","init","document","body","addEventListener","2","_interopRequireDefault","obj","__esModule","_tabs2","_formEditor2","_formActions2","_fieldBuilder2","_actionConfirmations2","_tlite2","window","html_forms","getElementById","el","className","indexOf","FieldBuilder","Editor","hf_options","view","columns","useCheckboxesForHidden","./action-confirmations.js","./field-builder.js","./form-actions.js","./form-editor.js","./tabs.js","tlite","3","_applyDecoratedDescriptor","property","decorators","descriptor","context","desc","forEach","key","enumerable","configurable","initializer","writable","slice","reverse","reduce","decorator","_class","_createClass","defineProperties","props","Constructor","protoProps","staticProps","prototype","_preact","_decko","_fieldConfigurator","_Component","instance","TypeError","_classCallCheck","this","_this","self","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","state","activeField","subClass","superClass","create","constructor","setPrototypeOf","_inherits","Component","setState","field","fields","_this2","fieldButtons","map","h","type","onClick","openFieldConfig","label","fieldType","rows","configRows","class","style","FieldConfigurator","onCancel","handleCancel","bind","getOwnPropertyDescriptor","./field-configurator.js","decko","preact","4","_html","FS","newObj","hasOwnProperty","_interopRequireWildcard","_linkstate2","getInitialState","choiceHandlers","add","addChoice","delete","deleteChoice","changeLabel","changeChoiceLabel","toggleChecked","toggleChoiceChecked","fieldLabel","placeholder","wrap","required","choices","checked","accept","newState","c","html","htmlgenerate","replaceSelection","arr","push","index","parentElement","splice","formFields","Label","onChange","Placeholder","DefaultValue","Required","Wrap","AddToForm","onSubmit","addToForm","Choices","multiple","handlers","ButtonText","Accept","onKeyPress","handleKeyPress","keyCode","../field-builder/html.js","./field-settings.js","linkstate","5","href","for","id","defaultChecked","choiceFields","choice","k","data-key","name","title","6","Field","mount","rootElement","render","_fieldBuilder","registerField","./components/field-builder.js","7","tag","attr","children","propName","filterEmptyObjectValues","namify","str","replace","toUpperCase","_preactRenderToString2","conf","fieldAttr","selected","tmpl","pretty","preact-render-to-string","8","createAccordion","headingHTML","contentHTML","createElement","heading","innerHTML","appendChild","content","deleteWrap","textAlign","deleteLink","innerText","show","offsetParent","display","createToggleActionHandler","actions","removeChild","childElementCount","querySelector","createDeleteActionHandler","addAction","srcElement","actionType","actionTemplate","actionTemplates","querySelectorAll","availableActions","parentNode","summary","9","setPreviewDom","frameContent","previewFrame","contentDocument","contentWindow","previewDom","updatePreview","getFieldVariableName","updateFieldVariables","dom","fieldVariables","seen","filter","item","uniq","wpbody","firstChild","sizeEl","visibility","width","offsetWidth","setAttribute","maxWidth","vel","markup","editor","getValue","templateRegex","m","arguments","dispatchEvent","Event","updateShadowDOM","updateRequiredFields","fieldNames","requiredFieldsInput","join","updateEmailFields","emailFieldsInput","debounce","func","wait","immediate","timeout","args","callNow","clearTimeout","setTimeout","apply","CodeMirror","element","fromTextArea","selectionPointer","matchTags","bothTags","mode","htmlMode","autoCloseTags","autoRefresh","styleActiveLine","matchBrackets","on","focus","codemirror","codemirror/addon/edit/closetag.js","codemirror/addon/edit/matchtags","codemirror/addon/fold/xml-fold","codemirror/mode/css/css","codemirror/mode/htmlmixed/htmlmixed","codemirror/mode/javascript/javascript","codemirror/mode/xml/xml","10","open","tabTarget","tabNavs","classList","toggle","blur","_i","tabs","tab","split","shift","history","newUrl","location","replaceState","11","mod","amd","autoCloseCurrent","cm","typingSlash","ranges","listSelections","replacements","head","opt","getOption","dontIndentOnAutoClose","dontIndentOnSlash","empty","Pass","pos","tok","getTokenAt","inner","innerMode","getMode","string","charAt","start","ch","replacement","closingTagExists","getLine","line","end","replaceSelections","indentLine","collection","elt","newTag","scanForClosingTag","Math","min","lastLine","nextClose","cx","onCx","prev","to","next","defineOption","val","old","Init","removeKeyMap","whenClosing","autoCloseSlash","whenOpening","configuration","dontCloseTags","htmlDontClose","indentTags","htmlIndent","lowerTagName","toLowerCase","test","indent","text","newPos","Pos","info","replaceRange","anchor","sel","setSelections","autoCloseGT","addKeyMap","commands","closeTag","../../lib/codemirror","../fold/xml-fold","12","clear","tagHit","tagOther","doMatchTags","failedTagMatch","operation","somethingSelected","cur","getCursor","range","getViewport","from","max","match","findMatchingTag","matchBothTags","hit","at","close","markText","other","maybeUpdateMatch","off","toMatchingTag","found","extendSelection","13","Iter","firstLine","tagAt","iter","getTokenTypeAt","nextLine","prevLine","toTagEnd","gt","lastSlash","lastIndexOf","selfClose","toTagStart","lt","xmlTagStart","lastIndex","exec","toNextTag","toPrevTag","findMatchingClose","stack","startLine","startCh","findMatchingOpen","endLine","endCh","nameStartChar","RegExp","registerHelper","openTag","startPos","endPos","b","cmp","here","findEnclosingTag","14","global","factory","classTest","cls","removeChildren","count","childNodes","removeChildrenAndAdd","parent","cssText","createTextNode","eltP","contains","child","nodeType","host","activeElt","activeElement","shadowRoot","addClass","node","current","joinClasses","as","Array","copyObj","overwrite","prop","countColumn","tabSize","startIndex","startValue","search","nextTab","array","findColumn","goal","col","skipped","spaceStr","spaceStrs","lst","out","nothing","createObj","base","inst","isWordCharBasic","nonASCIISingleCaseWordChar","isWordChar","helper","source","isEmpty","isExtendingChar","charCodeAt","extendingChars","skipExtendingChars","dir","findFirst","pred","midF","mid","ceil","floor","doc","first","size","chunk","lines","sz","chunkSize","getBetween","getLines","updateLineHeight","height","diff","lineNo","no","lineAtHeight","outer","i$1","lh","isLine","lineNumberFor","options","String","lineNumberFormatter","firstLineNumber","sticky","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","clipPos","last","linelen","clipToLen","clipPosArray","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","stretchSpansOverChange","change","full","oldFirst","markedSpans","oldLast","isInsert","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansBefore","startsBefore","markedSpansAfter","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","i$2","i$3","clearWhenEmpty","detachMarkedSpans","detachLine","attachMarkedSpans","attachLine","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","find","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sawCollapsedSpans","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","conflictingCollapsedRange","lineNo$$1","visualLine","merged","visualLineNo","lineN","vis","visualLineEndNo","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","p","lineLength","len","found$1","findMaxLine","d","maxLine","maxLineLength","maxLineChanged","getBidiPartAt","order","bidiOther","getOrder","direction","bidiOrdering","getHandlers","emitter","_handlers","noHandlers","removeEventListener","detachEvent","map$$1","concat","signal","signalDOMEvent","override","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","set","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","e_button","which","button","mac","ctrlKey","zeroWidthElement","measure","zwspSupported","offsetHeight","ie","ie_version","hasBadBidiRects","badBidiRects","txt","r0","getBoundingClientRect","r1","left","right","resolveMode","spec","mimeModes","mfactory","modes","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","nstate","startState","a1","a2","highlightLine","forceToEnd","st","modeGen","lineClasses","runMode","loop","baseTokens","overlay","overlays","i_end","opaque","baseTokenPos","styles","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","result","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","Context","minindent","minline","lim","after","SavedContext","lookAhead","indented","findStartLine","saved","fromSaved","processLine","viewFrom","viewTo","startAt","stream","StringStream","callBlankLine","eol","readToken","blankLine","token","takeToken","asArray","tokens","Token","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","cleanUpLine","interpretTokenStyle","cache","styleToClassCacheWithMode","styleToClassCache","buildLineContent","lineView","webkit","builder","pre","trailingSpace","splitSpaces","rest","addToken","buildToken","startStyle","endStyle","css","part","buildTokenBadBidi","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","Infinity","foundBookmarks","endStyles","j","j$1","j$2","buildCollapsedSpan","upto","tokenText","insertLineContent","externalMeasured","maps","caches","lastChild","defaultSpecialCharPlaceholder","toString","displayText","trailingBefore","spaceBefore","special","specialChars","mustWrap","createDocumentFragment","txt$1","tabWidth","specialCharPlaceholder","fullStyle","ignoreWidget","widget","input","needsContentAttribute","setUneditable","LineView","visualLineContinued","hidden","buildViewArray","nextPos","signalLater","list","operationGroup","delayedCallbacks","orphanDelayedCallbacks","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","built","getLineContent","replaceChild","updateLineClasses","updateLineText","updateLineGutter","alignable","nextSibling","insertLineWidgets","updateLineWidgets","ensureLineWrapped","zIndex","ext","background","insertBefore","updateLineBackground","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","markers","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","gutters","gutterWidth","buildLineElement","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","noHScroll","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","positionLineWidget","above","widgetHeight","parentStyle","wrapper","clientWidth","eventInWidget","sizer","mover","paddingTop","lineSpace","offsetTop","paddingVert","paddingH","cachedPaddingH","getComputedStyle","currentStyle","data","parseInt","paddingRight","isNaN","scrollGap","scrollerGap","nativeBarWidth","displayWidth","scroller","barWidth","displayHeight","clientHeight","barHeight","mapFromLineView","before","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","lineMeasure","updateExternalMeasurement","rect","hasHeights","prepared","varHeight","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","abs","bottom","top","ensureLineHeights","place","nodeAndOffsetInLineMap","collapse","coverStart","coverEnd","getUsefulRect","screen","logicalXDPI","deviceXDPI","badZoomedRects","normal","fromRange","hasBadZoomedRects","scaleX","scaleY","logicalYDPI","deviceYDPI","maybeUpdateRectForZooming","rSpan","charWidth","nullRect","rtop","rbot","bot","bogus","singleCursorHeightPerLine","rbottom","measureCharInner","mStart","mEnd","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","cachedCharWidth","cachedTextHeight","lineNumChars","pageScrollX","chrome","android","pageXOffset","documentElement","scrollLeft","pageScrollY","marginTop","pageYOffset","scrollTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","viewOffset","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","get","getBidi","partPos","invert","level","estimateCoords","PosWithInfo","outside","xRel","coordsChar","y","widgetHeight$$1","begin","ltr","_lineNo","ref","wrappedLineExtent","closestDist","endX","dist","boxIsAfter","baseX","chAround","boxAround","box","atLeft","atStart","coordsCharInner","mergedPos","wrappedLineExtentChar","textHeight","measureText","clientLeft","offsetLeft","compensateForHScroll","estimateHeight","th","perLine","widgetsHeight","estimateLineHeights","est","estHeight","posFromMouse","liberal","forRect","space","clientX","clientY","colDiff","round","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","selection","primIndex","range$$1","showCursorWhenSelecting","drawSelectionCursor","fragment","rightSide","drawForLine","fromArg","toArg","wrapX","side","extent","lineLen","iterateBidiSections","fromPos","toPos","openStart","openEnd","openLeft","docLTR","openRight","leftSide","topLeft","topRight","botLeft","botRight","cmpCoords","padding","sizerWidth","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","drawSelectionRange","cursor","cursorHeight","otherCursor","restartBlink","focused","clearInterval","blinker","cursorDiv","cursorBlinkRate","setInterval","ensureFocus","onFocus","delayBlurEvent","delayingBlurEvent","onBlur","readOnly","selForContextMenu","reset","receivedFocus","rmClass","updateHeightsInViewport","prevBottom","lineDiv","updateWidgetHeight","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","alignHorizontally","alignWidgets","comp","gutterW","align","maybeUpdateLineNumberWidth","innerW","lineGutter","lineNumInnerWidth","lineNumWidth","updateGutterSpace","calculateScrollPos","snapMargin","screentop","docBottom","atTop","atBottom","newTop","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","scrollToPos","margin","cursorScrollMargin","scrollToCoords","scrollToCoordsRange","sPos","updateScrollTop","gecko","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","setScrollLeft","isScroller","scrollWidth","measureForScrollbars","docH","viewHeight","viewWidth","barLeft","docHeight","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","update","paddingBottom","heightForcer","borderBottom","scrollbarFiller","coverGutterNextToScrollbar","gutterFiller","initScrollbars","scrollbarModel","scrollbarStyle","axis","startOperation","viewChanged","updateInput","typing","changeObjs","cursorActivityCalled","selectionChanged","updateMaxLine","nextOpId","op","ops","ownsGroup","pushOperation","endOperation","endCb","group","callbacks","fireCallbacksForOps","finishOperation","scrollbarsClipped","marginBottom","borderRightWidth","maybeClipScrollbars","mustUpdate","DisplayUpdate","endOperation_R1","updatedDisplay","updateDisplayIfNeeded","endOperation_W1","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","endOperation_R2","minWidth","takeFocus","setDocumentHeight","endOperation_W2","i$4","postUpdateDisplay","wheelStartX","wheelStartY","limit","changed","endCoords","scrollPos","startTop","startLeft","scrollPosIntoView","doScroll","innerHeight","phantom","scrollNode","scrollIntoView","maybeScrollWindow","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","endOperation_finish","endOperations","runInOp","methodOp","docMethodOp","regChange","lendiff","updateLineNumbers","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","countDirtyView","dirty","time","highlight","highlightWorker","Date","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","editorIsHidden","force","visible","renderedView","viewportMargin","different","lastWrapHeight","wrapperHeight","lastWrapWidth","adjustView","toUpdate","selSnapshot","hasFocus","active","getSelection","anchorNode","extend","anchorOffset","focusNode","focusOffset","selectionSnapshot","updateNumbersFrom","rm","currentWheelTarget","container","updateNumber","patchDisplay","snapshot","createRange","setEnd","removeAllRanges","addRange","restoreSelection","selectionDiv","minHeight","oldDisplayWidth","reportedViewFrom","reportedViewTo","updateGutters","specs","gElt","setGuttersForLineNumbers","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","wheelPixelsPerUnit","onScrollWheel","scroll","canScrollX","canScrollY","presto","pixels","wheelSamples","wheelDX","wheelDY","movedX","movedY","sample","normalizeSelection","prim","sort","inv","Range","Selection","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","estimateHeight$$1","spansFor","updateLine","linesFor","Line","lastText","lastSpans","nlines","insert","remove","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","History","startGen","done","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","pop","addChangeToHistory","selAfter","opId","hist","origin","historyEventDelay","lastChangeEvent","pushSelectionToHistory","addSelectionToHistory","selectionEventCanBeMerged","clearRedo","dest","equals","existing","removeClearedSpans","explicitlyCleared","mergeOldSpans","getOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","events","newGroup","instantiateSel","copy","event","deepCopy","newChanges","Number","extendRange","posBefore","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","setSelectionReplaceHistory","setSelectionNoUndo","NaN","filterSelectionChange","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","atomic","near","movePos","far","cantEdit","selectAll","sel_dontScroll","filterChange","canceled","cancel","makeChange","ignoreReadOnly","suppressEdits","sawReadOnlySpans","mark","parts","mk","newParts","dfrom","dto","removeReadOnlyRanges","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","antiChanges","returned","v","shiftDoc","distance","removed","recomputeMaxLength","checkWidthStart","retreatFrontier","changesHandler","changeHandler","makeChangeSingleDocInEditor","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","adjustScrollWhenAboveVisible","cloneNode","isParent","SharedTextMarker","markTextShared","TextMarker","replacedWith","addToHistory","curLine","addMarkedSpan","clearOnEnter","clearHistory","nextMarkerId","findSharedMarkers","findMarks","detachSharedMarkers","subMarker","onDrop","clearDragCursor","lastDrop","files","dataTransfer","isReadOnly","FileReader","File","read","loadFile","file","allowDropFileTypes","reader","onload","lineSeparator","readAsText","draggingText","text$1","getData","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","ensureGlobalHandlers","globalsRegistered","resizeTimer","onResize","registerGlobalHandlers","setSize","normalizeKeyName","alt","ctrl","cmd","normalizeKeyMap","keymap","keyname","keys","lookupKey","getKeyMap","fallthrough","isModifierKey","keyNames","addModifierNames","noShift","altKey","flipCtrlCmd","metaKey","shiftKey","keyName","altGraphKey","keyMap","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","lineStart","visual","lineEnd","visualLineEnd","lineStartSmart","firstNonWS","inWS","doHandleBinding","bound","dropShift","ensurePolled","prevShift","dispatchKey","seq","keySeq","stopSeq","dispatchKeyInner","keyMaps","extraKeys","lookupKeyForEditor","handleKeyBinding","motion","onKeyDown","handled","lastStoppedKey","hasCopyEvent","up","showCrossHair","onKeyUp","charCode","fromCharCode","handleCharBinding","onMouseDown","activeTouch","supportsTouch","draggable","clickInGutter","repeat","now","lastDoubleClick","compare","lastClick","PastClick","clickRepeat","selectingText","handleMappedButton","contained","behavior","option","unit","chromeOS","addNew","moveOnDrag","configureMouse","dragDrop","dragAndDrop","moved","dragEnd","mouseMove","dragStart","e2","leftButtonStartDrag","extendTo","lastPos","startCol","posCol","leftPos","startSel","ourIndex","oldRange","ourRange","rangeForUnit","ranges$1","anchorLine","boundary","headIndex","usePart","bidiSimplify","sel_mouse","curCount","counter","editorSize","move","leftButtonSelect","leftButtonDown","captureRightClick","onContextMenu","findWordAt","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","guttersChanged","dragDropChanged","funcs","dragFunctions","enter","over","leave","drop","wrappingChanged","CodeMirror$1","this$1","defaults","Doc","inputStyles","inputStyle","mobile","pasteIncoming","cutIncoming","Delayed","autofocus","finishTouch","touchFinished","prevTouch","farAway","touch","word","radiusX","radiusY","isMouseLikeTouchEvent","pageX","pageY","frag","onDragOver","setData","effectAllowed","setDragImage","safari","img","src","_top","onDragStart","inp","getField","registerEventHandlers","optionHandlers","finishInit","initHooks","textRendering","how","aggressive","curSpace","indentation","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","setLastCopied","newLastCopied","lastCopied","applyTextInput","inserted","deleted","paste","textLines","splitLinesAuto","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","getRange","disableBrowserMagic","spellcheck","hiddenTextarea","te","div","ios","border","findPosH","moveOnce","boundToLine","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","res","nextCh","moveVisually","findNextLine","origDir","sawType","getHelper","hitSide","findPosV","pageSize","moveAmount","posToDOM","badPos","bad","domToPos","lineNode","textNode","topNode","curNode","nodeValue","textContent","previousSibling","dist$1","locateNodeInLineView","userAgent","navigator","platform","ie_upto10","ie_11up","edge","documentMode","qtwebkit","vendor","mac_geMountainLion","windows","presto_version","endNode","setStart","createTextRange","moveToElementText","moveEnd","moveStart","selectInput","select","selectionStart","selectionEnd","_e","ms","sel_move","charType","lowTypes","arabicTypes","BidiSpan","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","outerType","types","type$1","prev$1","type$2","type$3","i$5","cur$1","type$4","i$6","end$1","replace$1","i$7","nstart","unshift","attachEvent","nl","rt","hasSelection","ownerDocument","compareEndPoints","oncopy","lineOracle","lastColumnPos","lastColumnValue","sol","peek","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","pattern","consume","caseInsensitive","cased","substr","hideFirstChars","oracle","baseToken","maxLookAhead","NativeScrollbars","vert","horiz","checkedZeroWidth","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","delay","maybeDisable","elementFromPoint","NullScrollbars","native","null","there","removeInner","insertInner","iterN","oldHeight","remaining","leaf","maybeSpill","me","sibling","myIndex","used","LineWidget","oldH","withOp","dHeight","nextDocId","lineSep","cleanGeneration","setValue","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","setCursor","extendSelectionsBy","addSelection","getSelections","dup","newSel","hint","oldPrev","newPrev","computeReplacedSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","addLineWidget","insertAt","aboveVisible","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","mFrom","mTo","subMark","copySharedMarkers","unlinkDoc","splitIds","iterLinkedDocs","getEditor","setDirection","directionChanged","eachLine","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","93","106","107","109","110","111","127","145","173","186","187","188","189","190","191","192","219","220","221","222","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","basic","Left","Right","Up","Down","End","Home","PageUp","PageDown","Delete","Backspace","Shift-Backspace","Tab","Shift-Tab","Enter","Insert","Esc","pcDefault","Ctrl-A","Ctrl-D","Ctrl-Z","Shift-Ctrl-Z","Ctrl-Y","Ctrl-Home","Ctrl-End","Ctrl-Up","Ctrl-Down","Ctrl-Left","Ctrl-Right","Alt-Left","Alt-Right","Ctrl-Backspace","Ctrl-Delete","Ctrl-S","Ctrl-F","Ctrl-G","Shift-Ctrl-G","Shift-Ctrl-F","Shift-Ctrl-R","Ctrl-[","Ctrl-]","Ctrl-U","Shift-Ctrl-U","Alt-U","emacsy","Ctrl-B","Ctrl-P","Ctrl-N","Alt-F","Alt-B","Ctrl-E","Ctrl-V","Shift-Ctrl-V","Ctrl-H","Alt-D","Alt-Backspace","Ctrl-K","Ctrl-T","Ctrl-O","macDefault","Cmd-A","Cmd-D","Cmd-Z","Shift-Cmd-Z","Cmd-Y","Cmd-Home","Cmd-Up","Cmd-End","Cmd-Down","Cmd-Left","Cmd-Right","Ctrl-Alt-Backspace","Alt-Delete","Cmd-S","Cmd-F","Cmd-G","Shift-Cmd-G","Cmd-Alt-F","Shift-Cmd-Alt-F","Cmd-[","Cmd-]","Cmd-Backspace","Cmd-Delete","Cmd-U","Shift-Cmd-U","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","goLineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","openLine","toggleOverwrite","defineInitHook","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","poll","pollSelection","pollInterval","scan","isInGutter","triggerOnKeyDown","pollContent","fromIndex","fromNode","toNode","toIndex","newText","closing","addText","walk","cmText","markerID","recognizeMarker","isBlock","nodeName","domTextBetween","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","readOnlyChanged","resetPosition","TextareaInput","prevInput","pollingFast","prepareCopyCut","textarea","fastPoll","moveInputWithCursor","headPos","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","prepareSelectAllHack","extval","rehide","oldWrapperCSS","oldCSS","detectingSelectAll","resetSelectionOnContextMenu","wrapperBox","oldScrollY","scrollY","scrollTo","mouseup","disabled","deflt","notOnInit","newBreaks","refresh","getInputField","detach","attach","integer","tabIndex","defineOptions","helpers","setOption","getDoc","addOverlay","score","priority","insertSorted","modeSpec","removeOverlay","newRanges","getLineTokens","getHelpers","help","_global","getStateAfter","defaultTextHeight","defaultCharWidth","addWidget","vspace","hspace","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","amount","rtlMoveVisually","goalColumn","goals","startChar","check","getScrollInfo","scrollToRange","interpret","swapDoc","getWrapperElement","getScrollerElement","getGutterElement","registerGlobalHelper","predicate","addEditorMethods","dontDelegate","method","contenteditable","defineMode","dependencies","defineMIME","mime","defineExtension","defineDocExtension","tabindex","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","cmpPos","addLegacyProps","version","15","keySet","tokenCComment","maybeEnd","tokenize","config","parserConfig","ret","tp","tokenString","quote","escaped","tokenParenthesized","pushContext","popContext","pass","states","popAndPass","wordAsValue","valueKeywords","colorKeywords","inline","propertyKeywords","tokenHooks","documentTypes","mediaTypes","mediaFeatures","mediaValueKeywords","nonStandardPropertyKeywords","fontProperties","counterDescriptors","allowNested","lineComment","supportsAtComponent","stateArg","block","maybeprop","propBlock","_stream","parens","pseudo","atBlock","atComponentBlock","atBlock_parens","restricted_atBlock_before","restricted_atBlock","keyframes","interpolation","textAfter","blockCommentStart","blockCommentEnd","blockCommentContinue","fold","documentTypes_","mediaTypes_","mediaFeatures_","mediaValueKeywords_","propertyKeywords_","nonStandardPropertyKeywords_","colorKeywords_","valueKeywords_","allWords","/",":","$","#","@","&","getAttrValue","regexp","attrRegexpCache","getAttrRegexp","getTagRegexp","anchored","addTags","defaultTags","script","htmlState","tags","inTag","tagInfo","tagText","findMatchingMode","endTagA","endTag","localState","localMode","pat","maybeBackup","multilineTagIndentFactor","multilineTagIndentPastTag","configTags","configScript","scriptTypes","matches","local","../css/css","../javascript/javascript","../xml/xml","cont","tokenBase","jsonldMode","isJsonldKeyword","tokenComment","expressionAllowed","inSet","readRegexp","tokenQuasi","isOperatorChar","lexical","wordRE","lastType","keywords","propertyIsEnumerable","kw","findFatArrow","fatArrowAt","arrow","isTS","depth","sawSomething","bracket","brackets","JSLexical","inScope","varname","localVars","vars","cc","register","inList","marked","globalVars","isModifier","pushcontext","defaultVars","popcontext","pushlex","lex","poplex","expect","wanted","exp","statement","vardef","parenExpr","maybeexpression","maybeelse","functiondef","forspec","enumdef","typeexpr","expression","maybelabel","funarg","afterExport","afterImport","expressionInner","expressionNoComma","noComma","arrowBodyNoComma","arrowBody","commasep","maybeop","maybeoperatorNoComma","maybeoperatorComma","atomicTypes","classExpression","arrayLiteral","contCommasep","objprop","quasi","targetNoComma","maybeTypeArgs","maybeTarget","expr","continueQuasi","_","getterSetter","afterprop","maybetype","what","sep","proceed","mayberettype","isKW","afterType","typeprop","typearg","maybeReturnType","typeparam","maybeTypeDefault","maybeAssign","vardefCont","proppattern","_type","forspec1","forspec2","formaybeinof","forspec3","classNameAfter","classBody","classfield","maybeFrom","exportField","importSpec","maybeMoreImports","maybeAs","enummember","statementIndent","jsonld","jsonMode","json","typescript","wordCharacters","A","B","C","D","operator","atom","if","while","with","else","do","try","finally","return","break","continue","new","void","throw","debugger","var","const","let","function","catch","switch","case","in","typeof","instanceof","true","false","super","yield","export","import","extends","await","number","variable","jsonld-keyword","basecolumn","parseJS","firstChar","isContinuedStatement","doubleIndentSwitch","closeBrackets","skipExpression","htmlConfig","autoSelfClosers","area","br","command","embed","frame","hr","keygen","link","meta","param","track","wbr","menuitem","implicitlyClosed","dd","li","optgroup","rp","tbody","td","tfoot","tr","contextGrabbers","dt","address","article","aside","blockquote","dl","fieldset","footer","h1","h2","h3","h4","h5","h6","header","hgroup","menu","nav","ol","section","table","ul","thead","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","inText","chain","parser","inBlock","doctype","baseState","tagStart","closure","isInAttribute","inAttribute","stringStartCol","terminator","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","setStyle","attrState","matchClosing","closeState","closeStateErr","attrEqState","startOfLine","noIndent","attrValueState","attrContinuedState","isInText","baseIndent","fullLine","alignCDATA","tagAfter","grabbers","skipAttribute","multiMethod","deco","decorate","fn","_len3","_key3","EMPTY","HOP","fns","opts","timer","_len2","_key2","_ref","memoize","_len","_key","caseSensitive","__lsc","dlv","21","preactRenderToString","styleObjToCss","jsToCss","NON_DIMENSION_PROPS","hashToClassName","renderToString","vnode","isSvgMode","attributes","isComponent","indentChar","_typeof","encodeEntities","shallow","renderRootComponent","defaultProps","getNodeProps","rendered","_disable","__x","componentWillMount","getChildContext","shallowHighOrder","component","displayName","Function","UNNAMED","getFallbackComponentName","getComponentName","attrs","objectKeys","sortAttributes","allAttributes","hooked","attributeHook","__html","xml","VOID_ELEMENTS","isLargeString","pieces","hasLarge","falsey","_i2","substring","boxFlex","boxFlexGroup","columnCount","fillOpacity","flex","flexGrow","flexPositive","flexShrink","flexNegative","fontWeight","lineClamp","lineHeight","opacity","orphans","strokeOpacity","widows","zoom","ESC","<",">","\"","escapeChar","char","ignoreLines","mem","Symbol","iterator","SHALLOW","shallowRender","22","lastSimple","simple","EMPTY_CHILDREN","enqueueRender","__d","items","debounceRendering","defer","rerender","renderComponent","isSameNodeType","hydrating","splitText","_componentConstructor","isNamedNode","__n","removeNode","setAccessor","isSvg","IS_NON_DIMENSIONAL","useCapture","eventProxy","__l","setProperty","removeAttribute","ns","removeAttributeNS","setAttributeNS","flushMounts","mounts","afterMount","componentDidMount","mountAll","componentRoot","diffLevel","ownerSVGElement","idiff","prevSvgMode","_component","recollectNodeTree","__preactattr_","vnodeName","originalComponent","oldDom","isDirectOwner","isOwner","__u","setComponentProps","unmountComponent","createComponent","__b","buildComponentFromVNode","createElementNS","createNode","fc","vchildren","isHydrating","vchild","originalChildren","keyed","keyedLen","childrenLen","vlen","_child","__k","trim","innerDiffNode","dangerouslySetInnerHTML","diffAttributes","unmountOnly","Ctor","components","doRender","__r","componentWillReceiveProps","__c","__p","syncComponentUpdates","isChild","cbase","previousProps","previousState","__s","previousContext","isUpdate","nextBase","initialBase","initialChildComponent","shouldComponentUpdate","componentWillUpdate","toUnmount","childComponent","childProps","baseParent","componentRef","componentDidUpdate","afterUpdate","__h","beforeUnmount","componentWillUnmount","collectComponent","Promise","resolve","then","callback","cloneElement","merge","23","getTooltipOpts","isAuto","fallbackAttrib","tooltip","autoHide","hide","fadeIn","tooltipEl","positionTooltip","vertGrav","horzGrav","tooltipHeight","tooltipWidth","centerEl","grav","innerWidth","createTooltip","showTimer","isAutoHiding","Tooltip"],"mappings":"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","file":"admin.min.js","sourcesContent":["(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction init() {\n document.body.addEventListener('click', handleClickEvent, true);\n}\n\nfunction handleClickEvent(e) {\n if (e.target.tagName !== 'A') {\n return;\n }\n\n if (e.target.hasAttribute('data-hf-confirm')) {\n var sure = confirm(e.target.getAttribute('data-hf-confirm'));\n\n if (!sure) {\n e.preventDefault();\n }\n }\n}\n\nexports.default = {\n init: init\n};\n\n},{}],2:[function(require,module,exports){\n'use strict';\n\nvar _tabs = require('./tabs.js');\n\nvar _tabs2 = _interopRequireDefault(_tabs);\n\nvar _formEditor = require('./form-editor.js');\n\nvar _formEditor2 = _interopRequireDefault(_formEditor);\n\nvar _formActions = require('./form-actions.js');\n\nvar _formActions2 = _interopRequireDefault(_formActions);\n\nvar _fieldBuilder = require('./field-builder.js');\n\nvar _fieldBuilder2 = _interopRequireDefault(_fieldBuilder);\n\nvar _actionConfirmations = require('./action-confirmations.js');\n\nvar _actionConfirmations2 = _interopRequireDefault(_actionConfirmations);\n\nvar _tlite = require('tlite');\n\nvar _tlite2 = _interopRequireDefault(_tlite);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nwindow.html_forms = {};\n\n// init the various components\n_tabs2.default.init();\n_actionConfirmations2.default.init();\n\nif (document.getElementById('hf-form-editor')) {\n _formEditor2.default.init();\n _formActions2.default.init();\n _fieldBuilder2.default.init(_formEditor2.default);\n}\n\n(0, _tlite2.default)(function (el) {\n return el.className.indexOf('hf-tooltip') > -1;\n});\n\nwindow.html_forms.FieldBuilder = _fieldBuilder2.default;\nwindow.html_forms.Editor = _formEditor2.default;\n\n// tell WP common.js to override the method used for determining hidden columns (screen options)\nif (hf_options.view === 'edit') {\n window.columns.useCheckboxesForHidden();\n}\n\n},{\"./action-confirmations.js\":1,\"./field-builder.js\":6,\"./form-actions.js\":8,\"./form-editor.js\":9,\"./tabs.js\":10,\"tlite\":23}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldBuilder = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _desc, _value, _class;\n\nvar _preact = require('preact');\n\nvar _decko = require('decko');\n\nvar _fieldConfigurator = require('./field-configurator.js');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nvar FieldBuilder = (_class = function (_Component) {\n _inherits(FieldBuilder, _Component);\n\n function FieldBuilder(props) {\n _classCallCheck(this, FieldBuilder);\n\n var _this = _possibleConstructorReturn(this, (FieldBuilder.__proto__ || Object.getPrototypeOf(FieldBuilder)).call(this, props));\n\n _this.state = {\n activeField: null\n };\n return _this;\n }\n\n _createClass(FieldBuilder, [{\n key: 'handleCancel',\n value: function handleCancel() {\n this.setState({\n activeField: null\n });\n }\n }, {\n key: 'openFieldConfig',\n value: function openFieldConfig(e) {\n var field = this.props.fields[e.target.value];\n\n if (this.state.activeField === field) {\n this.setState({ activeField: null });\n } else {\n this.setState({ activeField: field });\n }\n }\n }, {\n key: 'render',\n value: function render(props, state) {\n var _this2 = this;\n\n var fieldButtons = props.fields.map(function (f, i) {\n return (0, _preact.h)(\n 'button',\n { type: 'button', value: i, className: \"button \" + (state.activeField === f ? \"active\" : \"\"), onClick: _this2.openFieldConfig },\n f.label\n );\n });\n var fieldType = state.activeField ? state.activeField.key : \"\";\n var rows = state.activeField ? state.activeField.configRows : [];\n\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-field-builder' },\n (0, _preact.h)(\n 'h4',\n null,\n 'Add field'\n ),\n (0, _preact.h)(\n 'div',\n { 'class': 'available-fields' },\n fieldButtons\n ),\n (0, _preact.h)(\n 'div',\n { style: 'max-width: 480px;' },\n (0, _preact.h)(_fieldConfigurator.FieldConfigurator, { fieldType: fieldType, rows: rows, onCancel: this.handleCancel })\n ),\n state.activeField === null ? (0, _preact.h)(\n 'p',\n { 'class': 'help', style: 'margin-bottom: 0;' },\n 'Use the buttons above to generate your field HTML, or manually modify your form below.'\n ) : \"\"\n );\n }\n }]);\n\n return FieldBuilder;\n}(_preact.Component), (_applyDecoratedDescriptor(_class.prototype, 'handleCancel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'handleCancel'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'openFieldConfig', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'openFieldConfig'), _class.prototype)), _class);\nexports.FieldBuilder = FieldBuilder;\n\n},{\"./field-configurator.js\":4,\"decko\":19,\"preact\":22}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldConfigurator = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _desc, _value, _class;\n\nvar _preact = require('preact');\n\nvar _decko = require('decko');\n\nvar _html = require('../field-builder/html.js');\n\nvar _fieldSettings = require('./field-settings.js');\n\nvar FS = _interopRequireWildcard(_fieldSettings);\n\nvar _linkstate = require('linkstate');\n\nvar _linkstate2 = _interopRequireDefault(_linkstate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nvar FieldConfigurator = (_class = function (_Component) {\n _inherits(FieldConfigurator, _Component);\n\n function FieldConfigurator(props) {\n _classCallCheck(this, FieldConfigurator);\n\n var _this = _possibleConstructorReturn(this, (FieldConfigurator.__proto__ || Object.getPrototypeOf(FieldConfigurator)).call(this, props));\n\n _this.state = _this.getInitialState();\n _this.choiceHandlers = {\n \"add\": _this.addChoice,\n \"delete\": _this.deleteChoice,\n \"changeLabel\": _this.changeChoiceLabel,\n \"toggleChecked\": _this.toggleChoiceChecked\n };\n return _this;\n }\n\n _createClass(FieldConfigurator, [{\n key: 'getInitialState',\n value: function getInitialState() {\n return {\n fieldType: \"\",\n fieldLabel: \"\",\n placeholder: \"\",\n value: \"\",\n wrap: true,\n required: false,\n choices: [{\n checked: false,\n label: \"One\"\n }, {\n checked: false,\n label: \"Two\"\n }],\n accept: ''\n };\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(props) {\n var newState = { fieldType: props.fieldType };\n\n // when changing from field that accepts multiple values to single-value field, reset all pre-selections \n if (this.state.fieldType === 'checkbox' && props.fieldType !== 'checkbox') {\n newState.choices = this.state.choices.map(function (c, i) {\n c.checked = false;\n return c;\n });\n }\n this.setState(newState);\n }\n }, {\n key: 'addToForm',\n value: function addToForm() {\n var html = (0, _html.htmlgenerate)(this.state);\n html_forms.Editor.replaceSelection(html);\n }\n }, {\n key: 'addChoice',\n value: function addChoice() {\n var arr = this.state.choices;\n arr.push({ checked: false, label: \"...\" });\n this.setState({ choices: arr });\n }\n }, {\n key: 'deleteChoice',\n value: function deleteChoice(e) {\n var arr = this.state.choices;\n var index = e.target.parentElement.getAttribute('data-key');\n arr.splice(index, 1);\n this.setState({ choices: arr });\n }\n }, {\n key: 'changeChoiceLabel',\n value: function changeChoiceLabel(e) {\n var arr = this.state.choices;\n var index = e.target.parentElement.getAttribute('data-key');\n arr[index].label = e.target.value;\n this.setState({ choices: arr });\n }\n }, {\n key: 'toggleChoiceChecked',\n value: function toggleChoiceChecked(e) {\n var arr = this.state.choices;\n var index = e.target.parentElement.getAttribute('data-key');\n arr[index].checked = !arr[index].checked;\n this.setState({ choices: arr });\n }\n }, {\n key: 'handleCancel',\n value: function handleCancel() {\n // revert back to initial state\n this.setState(this.getInitialState());\n this.props.onCancel();\n }\n }, {\n key: 'render',\n value: function render(props, state) {\n if (props.rows.length == 0) {\n return \"\";\n }\n\n var formFields = [];\n\n for (var i = 0; i < props.rows.length; i++) {\n switch (props.rows[i]) {\n case \"label\":\n formFields.push((0, _preact.h)(FS.Label, { value: state.fieldLabel, onChange: (0, _linkstate2.default)(this, 'fieldLabel') }));\n break;\n\n case \"placeholder\":\n formFields.push((0, _preact.h)(FS.Placeholder, { value: state.placeholder, onChange: (0, _linkstate2.default)(this, 'placeholder') }));\n break;\n\n case \"default-value\":\n formFields.push((0, _preact.h)(FS.DefaultValue, { value: state.value, onChange: (0, _linkstate2.default)(this, 'value') }));\n break;\n\n case \"required\":\n formFields.push((0, _preact.h)(FS.Required, { checked: state.required, onChange: (0, _linkstate2.default)(this, 'required') }));\n break;\n\n case \"wrap\":\n formFields.push((0, _preact.h)(FS.Wrap, { checked: state.wrap, onChange: (0, _linkstate2.default)(this, 'wrap') }));\n break;\n\n case \"add-to-form\":\n formFields.push((0, _preact.h)(FS.AddToForm, { onSubmit: this.addToForm, onCancel: this.handleCancel }));\n break;\n\n case \"choices\":\n formFields.push((0, _preact.h)(FS.Choices, { multiple: state.fieldType === 'checkbox', choices: state.choices, handlers: this.choiceHandlers }));\n break;\n\n case \"button-text\":\n formFields.push((0, _preact.h)(FS.ButtonText, { value: state.value, onChange: (0, _linkstate2.default)(this, 'value') }));\n break;\n\n case \"accept\":\n formFields.push((0, _preact.h)(FS.Accept, { value: state.accept, onChange: (0, _linkstate2.default)(this, 'accept') }));\n break;\n\n }\n }\n\n return (0, _preact.h)(\n 'div',\n { 'class': 'field-config', onKeyPress: FieldConfigurator.handleKeyPress },\n formFields\n );\n }\n }], [{\n key: 'handleKeyPress',\n value: function handleKeyPress(e) {\n // stop RETURN from submitting the parent form.\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n }\n }]);\n\n return FieldConfigurator;\n}(_preact.Component), (_applyDecoratedDescriptor(_class.prototype, 'addToForm', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'addToForm'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'addChoice', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'addChoice'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'deleteChoice', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'deleteChoice'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'changeChoiceLabel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'changeChoiceLabel'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'toggleChoiceChecked', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'toggleChoiceChecked'), _class.prototype), _applyDecoratedDescriptor(_class, 'handleKeyPress', [_decko.bind], Object.getOwnPropertyDescriptor(_class, 'handleKeyPress'), _class), _applyDecoratedDescriptor(_class.prototype, 'handleCancel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'handleCancel'), _class.prototype)), _class);\nexports.FieldConfigurator = FieldConfigurator;\n\n},{\"../field-builder/html.js\":7,\"./field-settings.js\":5,\"decko\":19,\"linkstate\":20,\"preact\":22}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Accept = exports.ButtonText = exports.Choices = exports.Required = exports.Wrap = exports.DefaultValue = exports.Placeholder = exports.Label = exports.AddToForm = undefined;\n\nvar _preact = require('preact');\n\nfunction AddToForm(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'button',\n { 'class': 'button', type: 'button', onClick: props.onSubmit },\n 'Add field to form'\n ),\n ' \\xA0 ',\n (0, _preact.h)(\n 'a',\n { href: 'javascript:void(0);', 'class': 'hf-small', style: 'vertical-align: middle;', onClick: props.onCancel },\n 'or close field helper'\n )\n );\n}\n\nfunction Label(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-field-label' },\n 'Field label ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-required' },\n '*'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-field-label', type: 'text', value: props.value, onChange: props.onChange })\n );\n}\n\nfunction Placeholder(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-placeholder' },\n 'Placeholder ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-italic hf-pull-right' },\n 'Optional'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-placeholder', type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Text to show when field has no value.'\n )\n );\n}\n\nfunction ButtonText(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-default-value' },\n 'Button text ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-required' },\n '*'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-default-value', type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Text to show on the button.'\n )\n );\n}\n\nfunction DefaultValue(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-default-value' },\n 'Default value ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-italic hf-pull-right' },\n 'Optional'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-default-value', type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Text to pre-fill this field with.'\n )\n );\n}\n\nfunction Wrap(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'class': 'inline' },\n (0, _preact.h)('input', { type: 'checkbox', value: '1', defaultChecked: props.checked, onChange: props.onChange }),\n 'Wrap this field in paragraph tags.'\n )\n );\n}\n\nfunction Required(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'class': 'inline' },\n (0, _preact.h)('input', { type: 'checkbox', value: '1', defaultChecked: props.checked, onChange: props.onChange }),\n 'This field is required.'\n )\n );\n}\n\nfunction Choices(props) {\n var choiceFields = props.choices.map(function (choice, k) {\n return (0, _preact.h)(\n 'div',\n { 'data-key': k },\n (0, _preact.h)('input', { type: props.multiple ? \"checkbox\" : \"radio\", name: 'selected', defaultChecked: choice.checked, onChange: props.handlers.toggleChecked, title: 'Pre-select this choice?' }),\n (0, _preact.h)('input', { type: 'text', value: choice.label, placeholder: 'Choice label', style: 'width: 80%;', onChange: props.handlers.changeLabel }),\n (0, _preact.h)(\n 'a',\n { href: 'javascript:void(0);', onClick: props.handlers.delete, style: 'text-decoration: none;', title: 'Delete choice' },\n '\\u2715'\n )\n );\n });\n\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n null,\n 'Choices'\n ),\n choiceFields,\n (0, _preact.h)('input', { type: props.multiple ? \"checkbox\" : \"radio\", style: 'visibility: hidden;' }),\n (0, _preact.h)(\n 'a',\n { href: 'javascript:void(0);', onClick: props.handlers.add },\n 'Add choice'\n )\n );\n}\n\nfunction Accept(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n null,\n 'Accepted file types'\n ),\n (0, _preact.h)('input', { type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Use a comma-separated list of accepted file extensions, eg ',\n (0, _preact.h)(\n 'code',\n null,\n '.pdf'\n ),\n '. ',\n (0, _preact.h)('br', null),\n 'Leave empty to accept any file type.'\n )\n );\n}\n\nexports.AddToForm = AddToForm;\nexports.Label = Label;\nexports.Placeholder = Placeholder;\nexports.DefaultValue = DefaultValue;\nexports.Wrap = Wrap;\nexports.Required = Required;\nexports.Choices = Choices;\nexports.ButtonText = ButtonText;\nexports.Accept = Accept;\n\n},{\"preact\":22}],6:[function(require,module,exports){\n'use strict';\n\n// imports\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _preact = require('preact');\n\nvar _fieldBuilder = require('./components/field-builder.js');\n\n// vars\nvar rootElement = void 0;\nvar Editor = void 0;\nvar fields = void 0;\n\n// functions\nfunction Field(key, label, configRows) {\n this.key = key;\n this.label = label;\n this.configRows = configRows || [];\n}\n\nfunction mount() {\n rootElement = (0, _preact.render)((0, _preact.h)(_fieldBuilder.FieldBuilder, { fields: fields }), document.getElementById('hf-field-builder'), rootElement);\n}\n\n// bootstrap\nfields = [new Field(\"text\", \"Text\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"email\", \"Email\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"url\", \"URL\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"number\", \"Number\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"date\", \"Date\", [\"label\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"textarea\", \"Textarea\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"dropdown\", \"Dropdown\", [\"label\", \"choices\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"checkbox\", \"Checkboxes\", [\"label\", \"choices\", \"wrap\", \"add-to-form\"]), new Field(\"radio\", \"Radio buttons\", [\"label\", \"choices\", \"wrap\", \"add-to-form\"]), new Field(\"submit\", \"Submit button\", [\"button-text\", \"wrap\", \"add-to-form\"])];\n\nexports.default = {\n init: function init() {\n mount();\n },\n\n registerField: function registerField(key, label, configRows) {\n fields.push(new Field(key, label, configRows));\n mount();\n }\n};\n\n},{\"./components/field-builder.js\":3,\"preact\":22}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.htmlgenerate = undefined;\n\nvar _preactRenderToString = require('preact-render-to-string');\n\nvar _preactRenderToString2 = _interopRequireDefault(_preactRenderToString);\n\nvar _preact = require('preact');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction htmlgenerate(conf) {\n var label = conf.fieldLabel.length && conf.fieldType !== 'submit' ? (0, _preact.h)(\"label\", {}, conf.fieldLabel) : \"\";\n var fieldAttr = void 0,\n field = void 0;\n\n switch (conf.fieldType) {\n case \"text\":\n default:\n fieldAttr = {\n type: conf.fieldType,\n name: namify(conf.fieldLabel),\n value: conf.value,\n placeholder: conf.placeholder,\n required: conf.required\n };\n field = html(\"input\", fieldAttr);\n break;\n case \"textarea\":\n fieldAttr = {\n name: namify(conf.fieldLabel),\n placeholder: conf.placeholder,\n required: conf.required\n };\n field = html(\"textarea\", fieldAttr, conf.value);\n break;\n\n case \"dropdown\":\n fieldAttr = {\n name: namify(conf.fieldLabel),\n required: conf.required\n };\n var opts = conf.choices.map(function (choice) {\n return html(\"option\", { selected: choice.checked }, choice.label);\n });\n field = html(\"select\", fieldAttr, opts);\n break;\n\n case \"radio\":\n field = conf.choices.map(function (choice) {\n return html(\"label\", {}, [html(\"input\", {\n type: \"radio\",\n name: namify(conf.fieldLabel),\n value: choice.label,\n selected: choice.checked\n }), \" \", html(\"span\", {}, choice.label)]);\n });\n break;\n\n case \"checkbox\":\n field = conf.choices.map(function (choice) {\n return html(\"label\", {}, [html(\"input\", {\n type: \"checkbox\",\n name: namify(conf.fieldLabel) + \"[]\",\n value: choice.label,\n checked: choice.checked\n }), \" \", html(\"span\", {}, choice.label)]);\n });\n break;\n\n case \"file\":\n fieldAttr = {\n type: \"file\",\n name: namify(conf.fieldLabel),\n required: conf.required\n };\n\n if (conf['accept']) {\n fieldAttr['accept'] = conf['accept'];\n }\n\n field = html(\"input\", fieldAttr);\n break;\n\n case \"submit\":\n fieldAttr = {\n type: \"submit\",\n value: conf.value\n };\n field = html(\"input\", fieldAttr);\n break;\n\n }\n\n var str = \"\";\n if (conf.wrap) {\n var tmpl = (0, _preact.h)(\"p\", {}, [label, field]);\n str = (0, _preactRenderToString2.default)(tmpl, null, { pretty: true });\n } else {\n str += (0, _preactRenderToString2.default)(label, null, { pretty: true });\n str += \"\\n\";\n str += (0, _preactRenderToString2.default)(field, null, { pretty: true });\n }\n\n return str;\n}\n\nfunction html(tag, attr, children) {\n return (0, _preact.h)(tag, filterEmptyObjectValues(attr), children);\n}\n\nfunction namify(str) {\n return str.replace(/ /g, '_').replace(/[^\\w\\[\\]_]*/g, \"\").toUpperCase();\n}\n\nfunction filterEmptyObjectValues(obj) {\n var newObj = {};\n for (var propName in obj) {\n if (obj[propName] !== false && obj[propName] !== \"\") {\n newObj[propName] = obj[propName];\n }\n }\n return newObj;\n}\n\nexports.htmlgenerate = htmlgenerate;\n\n},{\"preact\":22,\"preact-render-to-string\":21}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar availableActions = void 0,\n actionTemplates = void 0,\n actions = void 0;\n\nfunction init() {\n actions = document.getElementById('hf-form-actions');\n availableActions = document.getElementById('hf-available-form-actions');\n actionTemplates = document.getElementById('hf-form-action-templates');\n\n // turn settings into accordions\n [].forEach.call(actions.querySelectorAll('.hf-action-settings'), function (el) {\n el.parentNode.removeChild(el);\n\n var heading = el.getAttribute('data-title');\n var summary = el.querySelector('.hf-action-summary');\n if (summary) {\n heading += ' — <span class=\"hf-muted\">' + summary.innerHTML + '</span>';\n }\n var wrap = createAccordion(heading, el.innerHTML);\n actions.appendChild(wrap);\n\n actions.querySelector('#hf-form-actions-empty').style.display = 'none';\n });\n\n availableActions.addEventListener('click', addAction, true);\n}\n\nfunction createAccordion(headingHTML, contentHTML) {\n var wrap = document.createElement('div');\n wrap.className = \"hf-accordion expanded \";\n\n var heading = document.createElement('h4');\n heading.className = \"hf-accordion-heading\";\n heading.innerHTML = headingHTML;\n wrap.appendChild(heading);\n\n var content = document.createElement('div');\n content.className = \"hf-accordion-content\";\n content.innerHTML = contentHTML;\n wrap.appendChild(content);\n\n var deleteWrap = document.createElement('p');\n deleteWrap.style.textAlign = 'right';\n var deleteLink = document.createElement('a');\n deleteLink.href = 'javascript:void(0);';\n deleteLink.className = \"danger\";\n deleteLink.innerText = 'Delete this action';\n deleteWrap.appendChild(deleteLink);\n content.appendChild(deleteWrap);\n\n // bind handlers\n heading.addEventListener('click', createToggleActionHandler(wrap, content));\n deleteLink.addEventListener('click', createDeleteActionHandler(wrap));\n return wrap;\n}\n\nfunction addAction(e) {\n var el = e.target || e.srcElement;\n if (el.tagName !== 'INPUT') {\n return;\n }\n\n var actionType = el.getAttribute('data-action-type');\n var actionTemplate = actionTemplates.querySelector('#hf-action-type-' + actionType + '-template');\n\n // append HTML to actions wrapper\n var index = actions.querySelectorAll('div').length - 1;\n var wrap = createAccordion(el.value, actionTemplate.innerHTML.replace(/\\$index/g, index));\n actions.appendChild(wrap);\n\n // hide \"no form actions\" message\n actions.querySelector('#hf-form-actions-empty').style.display = 'none';\n}\n\nfunction createDeleteActionHandler(wrap) {\n return function () {\n actions.removeChild(wrap);\n\n if (actions.childElementCount === 1) {\n actions.querySelector('#hf-form-actions-empty').style.display = '';\n }\n };\n}\n\nfunction createToggleActionHandler(wrap, content) {\n return function () {\n var show = content.offsetParent === null;\n wrap.className = wrap.className.replace('expanded', '') + (show ? ' expanded' : '');\n content.style.display = show ? 'block' : 'none';\n };\n}\n\nexports.default = { init: init };\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\n// load CodeMirror & plugins\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CodeMirror = require('codemirror');\nrequire('codemirror/mode/xml/xml');\nrequire('codemirror/mode/javascript/javascript');\nrequire('codemirror/mode/css/css');\nrequire('codemirror/mode/htmlmixed/htmlmixed');\nrequire('codemirror/addon/fold/xml-fold');\nrequire('codemirror/addon/edit/matchtags');\nrequire('codemirror/addon/edit/closetag.js');\n\nvar editor = void 0,\n element = void 0,\n dom = void 0,\n requiredFieldsInput = void 0,\n emailFieldsInput = void 0,\n previewFrame = void 0,\n previewDom = void 0;\nvar templateRegex = /\\{\\{ *(\\w+)(?:\\.([\\w\\.]+))? *(?:\\|\\| *(\\w+))? *\\}\\}/g;\n\nfunction init() {\n previewFrame = document.getElementById('hf-form-preview');\n element = document.getElementById('hf-form-editor');\n dom = document.createElement('form');\n requiredFieldsInput = document.getElementById('hf-required-fields');\n emailFieldsInput = document.getElementById('hf-email-fields');\n\n dom.innerHTML = element.value;\n editor = CodeMirror.fromTextArea(element, {\n selectionPointer: true,\n matchTags: { bothTags: true },\n mode: \"htmlmixed\",\n htmlMode: true,\n autoCloseTags: true,\n autoRefresh: true,\n styleActiveLine: true,\n matchBrackets: true\n });\n\n editor.on('changes', debounce(updatePreview, 500));\n editor.on('changes', debounce(updateShadowDOM, 100));\n editor.on('changes', debounce(updateFieldVariables, 500));\n editor.on('blur', updatePreview);\n editor.on('blur', updateShadowDOM);\n editor.on('blur', updateFieldVariables);\n editor.on('blur', updateRequiredFields);\n editor.on('blur', updateEmailFields);\n\n previewFrame.addEventListener('load', setPreviewDom);\n setPreviewDom();\n updateFieldVariables();\n}\n\nfunction setPreviewDom() {\n var frameContent = previewFrame.contentDocument || previewFrame.contentWindow.document;\n previewDom = frameContent.querySelector('.hf-fields-wrap');\n\n if (previewDom) {\n updatePreview();\n }\n}\n\nfunction getFieldVariableName(f) {\n return f.name.replace('[]', '').replace(/\\[(\\w+)\\]/g, '.$1');\n}\n\nfunction updateFieldVariables() {\n var fields = dom.querySelectorAll('input[name], select[name], textarea[name], button[name]');\n var fieldVariables = uniq([].map.call(fields, function (f) {\n return '[' + getFieldVariableName(f) + ']';\n }));\n var wpbody = document.getElementById('wpbody-content');\n\n [].forEach.call(document.querySelectorAll('.hf-field-names'), function (el) {\n // remove existing variables\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n\n var variableElements = fieldVariables.map(function (n) {\n // measure width of actual font size for prettiness\n var sizeEl = document.createElement('span');\n sizeEl.style.visibility = 'hidden';\n sizeEl.innerText = n;\n wpbody.appendChild(sizeEl);\n var width = sizeEl.offsetWidth;\n wpbody.removeChild(sizeEl);\n\n // add input el\n var el = document.createElement('input');\n el.setAttribute('type', 'text');\n el.style.maxWidth = width * 1.1 + 14 + 'px';\n el.setAttribute('value', n);\n el.setAttribute('readonly', true);\n el.setAttribute('onfocus', 'this.select()');\n return el;\n });\n\n variableElements.forEach(function (vel, i, arr) {\n el.appendChild(vel);\n });\n });\n}\n\nfunction updatePreview() {\n var markup = editor.getValue();\n\n // replace template tags\n markup = markup.replace(templateRegex, function (s, m) {\n if (arguments[3]) {\n return arguments[3];\n }\n\n return '';\n });\n\n // update dom\n previewDom.innerHTML = markup;\n previewDom.dispatchEvent(new Event('hf-refresh'));\n}\n\nfunction updateShadowDOM() {\n dom.innerHTML = editor.getValue();\n}\n\nfunction updateRequiredFields() {\n var fields = dom.querySelectorAll('[required]');\n var fieldNames = [].map.call(fields, getFieldVariableName);\n requiredFieldsInput.value = fieldNames.join(',');\n}\n\nfunction updateEmailFields() {\n var fields = dom.querySelectorAll('input[type=\"email\"]');\n var fieldNames = [].map.call(fields, getFieldVariableName);\n emailFieldsInput.value = fieldNames.join(',');\n}\n\nfunction replaceSelection(str) {\n editor.replaceSelection(str);\n editor.focus();\n}\n\nfunction debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this,\n args = arguments;\n var later = function later() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n};\n\nfunction uniq(a) {\n var seen = {};\n return a.filter(function (item) {\n return seen.hasOwnProperty(item) ? false : seen[item] = true;\n });\n}\n\nexports.default = {\n init: init,\n replaceSelection: replaceSelection\n};\n\n},{\"codemirror\":14,\"codemirror/addon/edit/closetag.js\":11,\"codemirror/addon/edit/matchtags\":12,\"codemirror/addon/fold/xml-fold\":13,\"codemirror/mode/css/css\":15,\"codemirror/mode/htmlmixed/htmlmixed\":16,\"codemirror/mode/javascript/javascript\":17,\"codemirror/mode/xml/xml\":18}],10:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar tabs = void 0,\n tabNavs = void 0;\n\nfunction init() {\n tabs = document.querySelectorAll('.hf-tab');\n tabNavs = document.querySelectorAll('#hf-tabs-nav a');\n for (var i = 0; i < tabNavs.length; i++) {\n tabNavs[i].addEventListener('click', open);\n }\n};\n\nfunction open(e) {\n var tabTarget = this.getAttribute('data-tab-target');\n for (var i = 0; i < tabNavs.length; i++) {\n tabNavs[i].classList.toggle('nav-tab-active', tabNavs[i] === this);\n }\n this.blur();\n\n for (var _i = 0; _i < tabs.length; _i++) {\n var tab = tabs[_i];\n tab.classList.toggle('hf-tab-active', tab.getAttribute('data-tab') === tabTarget);\n }\n\n document.title = document.title.replace(document.title.split(' - ').shift(), this.innerText + \" \");\n\n if (window.history) {\n var newUrl = window.location.href;\n newUrl = newUrl.replace(/\\&tab\\=\\w+/, \"\");\n newUrl += \"&tab=\" + tabTarget;\n\n window.history.replaceState({ tab: tabTarget }, document.title, newUrl);\n }\n\n e.preventDefault();\n};\n\nexports.default = {\n init: init,\n open: open\n};\n\n},{}],11:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n/**\n * Tag-closer extension for CodeMirror.\n *\n * This extension adds an \"autoCloseTags\" option that can be set to\n * either true to get the default behavior, or an object to further\n * configure its behavior.\n *\n * These are supported options:\n *\n * `whenClosing` (default true)\n * Whether to autoclose when the '/' of a closing tag is typed.\n * `whenOpening` (default true)\n * Whether to autoclose the tag when the final '>' of an opening\n * tag is typed.\n * `dontCloseTags` (default is empty tags for HTML, none for XML)\n * An array of tag names that should not be autoclosed.\n * `indentTags` (default is block tags for HTML, none for XML)\n * An array of tag names that should, when opened, cause a\n * blank line to be added inside the tag, and the blank line and\n * closing line to be indented.\n *\n * See demos/closetag.html for a usage example.\n */\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n CodeMirror.defineOption(\"autoCloseTags\", false, function(cm, val, old) {\n if (old != CodeMirror.Init && old)\n cm.removeKeyMap(\"autoCloseTags\");\n if (!val) return;\n var map = {name: \"autoCloseTags\"};\n if (typeof val != \"object\" || val.whenClosing)\n map[\"'/'\"] = function(cm) { return autoCloseSlash(cm); };\n if (typeof val != \"object\" || val.whenOpening)\n map[\"'>'\"] = function(cm) { return autoCloseGT(cm); };\n cm.addKeyMap(map);\n });\n\n var htmlDontClose = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\",\n \"source\", \"track\", \"wbr\"];\n var htmlIndent = [\"applet\", \"blockquote\", \"body\", \"button\", \"div\", \"dl\", \"fieldset\", \"form\", \"frameset\", \"h1\", \"h2\", \"h3\", \"h4\",\n \"h5\", \"h6\", \"head\", \"html\", \"iframe\", \"layer\", \"legend\", \"object\", \"ol\", \"p\", \"select\", \"table\", \"ul\"];\n\n function autoCloseGT(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n var ranges = cm.listSelections(), replacements = [];\n var opt = cm.getOption(\"autoCloseTags\");\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n if (inner.mode.name != \"xml\" || !state.tagName) return CodeMirror.Pass;\n\n var html = inner.mode.configuration == \"html\";\n var dontCloseTags = (typeof opt == \"object\" && opt.dontCloseTags) || (html && htmlDontClose);\n var indentTags = (typeof opt == \"object\" && opt.indentTags) || (html && htmlIndent);\n\n var tagName = state.tagName;\n if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch);\n var lowerTagName = tagName.toLowerCase();\n // Don't process the '>' at the end of an end-tag or self-closing tag\n if (!tagName ||\n tok.type == \"string\" && (tok.end != pos.ch || !/[\\\"\\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) ||\n tok.type == \"tag\" && state.type == \"closeTag\" ||\n tok.string.indexOf(\"/\") == (tok.string.length - 1) || // match something like <someTagName />\n dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 ||\n closingTagExists(cm, tagName, pos, state, true))\n return CodeMirror.Pass;\n\n var indent = indentTags && indexOf(indentTags, lowerTagName) > -1;\n replacements[i] = {indent: indent,\n text: \">\" + (indent ? \"\\n\\n\" : \"\") + \"</\" + tagName + \">\",\n newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)};\n }\n\n var dontIndentOnAutoClose = (typeof opt == \"object\" && opt.dontIndentOnAutoClose);\n for (var i = ranges.length - 1; i >= 0; i--) {\n var info = replacements[i];\n cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, \"+insert\");\n var sel = cm.listSelections().slice(0);\n sel[i] = {head: info.newPos, anchor: info.newPos};\n cm.setSelections(sel);\n if (!dontIndentOnAutoClose && info.indent) {\n cm.indentLine(info.newPos.line, null, true);\n cm.indentLine(info.newPos.line + 1, null, true);\n }\n }\n }\n\n function autoCloseCurrent(cm, typingSlash) {\n var ranges = cm.listSelections(), replacements = [];\n var head = typingSlash ? \"/\" : \"</\";\n var opt = cm.getOption(\"autoCloseTags\");\n var dontIndentOnAutoClose = (typeof opt == \"object\" && opt.dontIndentOnSlash);\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n if (typingSlash && (tok.type == \"string\" || tok.string.charAt(0) != \"<\" ||\n tok.start != pos.ch - 1))\n return CodeMirror.Pass;\n // Kludge to get around the fact that we are not in XML mode\n // when completing in JS/CSS snippet in htmlmixed mode. Does not\n // work for other XML embedded languages (there is no general\n // way to go from a mixed mode to its current XML state).\n var replacement;\n if (inner.mode.name != \"xml\") {\n if (cm.getMode().name == \"htmlmixed\" && inner.mode.name == \"javascript\")\n replacement = head + \"script\";\n else if (cm.getMode().name == \"htmlmixed\" && inner.mode.name == \"css\")\n replacement = head + \"style\";\n else\n return CodeMirror.Pass;\n } else {\n if (!state.context || !state.context.tagName ||\n closingTagExists(cm, state.context.tagName, pos, state))\n return CodeMirror.Pass;\n replacement = head + state.context.tagName;\n }\n if (cm.getLine(pos.line).charAt(tok.end) != \">\") replacement += \">\";\n replacements[i] = replacement;\n }\n cm.replaceSelections(replacements);\n ranges = cm.listSelections();\n if (!dontIndentOnAutoClose) {\n for (var i = 0; i < ranges.length; i++)\n if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line)\n cm.indentLine(ranges[i].head.line);\n }\n }\n\n function autoCloseSlash(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n return autoCloseCurrent(cm, true);\n }\n\n CodeMirror.commands.closeTag = function(cm) { return autoCloseCurrent(cm); };\n\n function indexOf(collection, elt) {\n if (collection.indexOf) return collection.indexOf(elt);\n for (var i = 0, e = collection.length; i < e; ++i)\n if (collection[i] == elt) return i;\n return -1;\n }\n\n // If xml-fold is loaded, we use its functionality to try and verify\n // whether a given tag is actually unclosed.\n function closingTagExists(cm, tagName, pos, state, newTag) {\n if (!CodeMirror.scanForClosingTag) return false;\n var end = Math.min(cm.lastLine() + 1, pos.line + 500);\n var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end);\n if (!nextClose || nextClose.tag != tagName) return false;\n var cx = state.context;\n // If the immediate wrapping context contains onCx instances of\n // the same tag, a closing tag only exists if there are at least\n // that many closing tags of that type following.\n for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx;\n pos = nextClose.to;\n for (var i = 1; i < onCx; i++) {\n var next = CodeMirror.scanForClosingTag(cm, pos, null, end);\n if (!next || next.tag != tagName) return false;\n pos = next.to;\n }\n return true;\n }\n});\n\n},{\"../../lib/codemirror\":14,\"../fold/xml-fold\":13}],12:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"matchTags\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init) {\n cm.off(\"cursorActivity\", doMatchTags);\n cm.off(\"viewportChange\", maybeUpdateMatch);\n clear(cm);\n }\n if (val) {\n cm.state.matchBothTags = typeof val == \"object\" && val.bothTags;\n cm.on(\"cursorActivity\", doMatchTags);\n cm.on(\"viewportChange\", maybeUpdateMatch);\n doMatchTags(cm);\n }\n });\n\n function clear(cm) {\n if (cm.state.tagHit) cm.state.tagHit.clear();\n if (cm.state.tagOther) cm.state.tagOther.clear();\n cm.state.tagHit = cm.state.tagOther = null;\n }\n\n function doMatchTags(cm) {\n cm.state.failedTagMatch = false;\n cm.operation(function() {\n clear(cm);\n if (cm.somethingSelected()) return;\n var cur = cm.getCursor(), range = cm.getViewport();\n range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to);\n var match = CodeMirror.findMatchingTag(cm, cur, range);\n if (!match) return;\n if (cm.state.matchBothTags) {\n var hit = match.at == \"open\" ? match.open : match.close;\n if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: \"CodeMirror-matchingtag\"});\n }\n var other = match.at == \"close\" ? match.open : match.close;\n if (other)\n cm.state.tagOther = cm.markText(other.from, other.to, {className: \"CodeMirror-matchingtag\"});\n else\n cm.state.failedTagMatch = true;\n });\n }\n\n function maybeUpdateMatch(cm) {\n if (cm.state.failedTagMatch) doMatchTags(cm);\n }\n\n CodeMirror.commands.toMatchingTag = function(cm) {\n var found = CodeMirror.findMatchingTag(cm, cm.getCursor());\n if (found) {\n var other = found.at == \"close\" ? found.open : found.close;\n if (other) cm.extendSelection(other.to, other.from);\n }\n };\n});\n\n},{\"../../lib/codemirror\":14,\"../fold/xml-fold\":13}],13:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var Pos = CodeMirror.Pos;\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }\n\n var nameStartChar = \"A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n var nameChar = nameStartChar + \"\\-\\:\\.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n var xmlTagStart = new RegExp(\"<(/?)([\" + nameStartChar + \"][\" + nameChar + \"]*)\", \"g\");\n\n function Iter(cm, line, ch, range) {\n this.line = line; this.ch = ch;\n this.cm = cm; this.text = cm.getLine(line);\n this.min = range ? Math.max(range.from, cm.firstLine()) : cm.firstLine();\n this.max = range ? Math.min(range.to - 1, cm.lastLine()) : cm.lastLine();\n }\n\n function tagAt(iter, ch) {\n var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch));\n return type && /\\btag\\b/.test(type);\n }\n\n function nextLine(iter) {\n if (iter.line >= iter.max) return;\n iter.ch = 0;\n iter.text = iter.cm.getLine(++iter.line);\n return true;\n }\n function prevLine(iter) {\n if (iter.line <= iter.min) return;\n iter.text = iter.cm.getLine(--iter.line);\n iter.ch = iter.text.length;\n return true;\n }\n\n function toTagEnd(iter) {\n for (;;) {\n var gt = iter.text.indexOf(\">\", iter.ch);\n if (gt == -1) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n function toTagStart(iter) {\n for (;;) {\n var lt = iter.ch ? iter.text.lastIndexOf(\"<\", iter.ch - 1) : -1;\n if (lt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; }\n xmlTagStart.lastIndex = lt;\n iter.ch = lt;\n var match = xmlTagStart.exec(iter.text);\n if (match && match.index == lt) return match;\n }\n }\n\n function toNextTag(iter) {\n for (;;) {\n xmlTagStart.lastIndex = iter.ch;\n var found = xmlTagStart.exec(iter.text);\n if (!found) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; }\n iter.ch = found.index + found[0].length;\n return found;\n }\n }\n function toPrevTag(iter) {\n for (;;) {\n var gt = iter.ch ? iter.text.lastIndexOf(\">\", iter.ch - 1) : -1;\n if (gt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n\n function findMatchingClose(iter, tag) {\n var stack = [];\n for (;;) {\n var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0);\n if (!next || !(end = toTagEnd(iter))) return;\n if (end == \"selfClose\") continue;\n if (next[1]) { // closing tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == next[2])) return {\n tag: next[2],\n from: Pos(startLine, startCh),\n to: Pos(iter.line, iter.ch)\n };\n } else { // opening tag\n stack.push(next[2]);\n }\n }\n }\n function findMatchingOpen(iter, tag) {\n var stack = [];\n for (;;) {\n var prev = toPrevTag(iter);\n if (!prev) return;\n if (prev == \"selfClose\") { toTagStart(iter); continue; }\n var endLine = iter.line, endCh = iter.ch;\n var start = toTagStart(iter);\n if (!start) return;\n if (start[1]) { // closing tag\n stack.push(start[2]);\n } else { // opening tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == start[2])) return {\n tag: start[2],\n from: Pos(iter.line, iter.ch),\n to: Pos(endLine, endCh)\n };\n }\n }\n }\n\n CodeMirror.registerHelper(\"fold\", \"xml\", function(cm, start) {\n var iter = new Iter(cm, start.line, 0);\n for (;;) {\n var openTag = toNextTag(iter), end;\n if (!openTag || !(end = toTagEnd(iter)) || iter.line != start.line) return;\n if (!openTag[1] && end != \"selfClose\") {\n var startPos = Pos(iter.line, iter.ch);\n var endPos = findMatchingClose(iter, openTag[2]);\n return endPos && {from: startPos, to: endPos.from};\n }\n }\n });\n CodeMirror.findMatchingTag = function(cm, pos, range) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n if (iter.text.indexOf(\">\") == -1 && iter.text.indexOf(\"<\") == -1) return;\n var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch);\n var start = end && toTagStart(iter);\n if (!end || !start || cmp(iter, pos) > 0) return;\n var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]};\n if (end == \"selfClose\") return {open: here, close: null, at: \"open\"};\n\n if (start[1]) { // closing tag\n return {open: findMatchingOpen(iter, start[2]), close: here, at: \"close\"};\n } else { // opening tag\n iter = new Iter(cm, to.line, to.ch, range);\n return {open: here, close: findMatchingClose(iter, start[2]), at: \"open\"};\n }\n };\n\n CodeMirror.findEnclosingTag = function(cm, pos, range, tag) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n for (;;) {\n var open = findMatchingOpen(iter, tag);\n if (!open) break;\n var forward = new Iter(cm, pos.line, pos.ch, range);\n var close = findMatchingClose(forward, open.tag);\n if (close) return {open: open, close: close};\n }\n };\n\n // Used by addon/edit/closetag.js\n CodeMirror.scanForClosingTag = function(cm, pos, name, end) {\n var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);\n return findMatchingClose(iter, name);\n };\n});\n\n},{\"../../lib/codemirror\":14}],14:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// This is CodeMirror (http://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n// Kludges for bugs and behavior differences that can't be feature\n// detected are enabled based on userAgent etc sniffing.\nvar userAgent = navigator.userAgent;\nvar platform = navigator.platform;\n\nvar gecko = /gecko\\/\\d/i.test(userAgent);\nvar ie_upto10 = /MSIE \\d/.test(userAgent);\nvar ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\nvar edge = /Edge\\/(\\d+)/.exec(userAgent);\nvar ie = ie_upto10 || ie_11up || edge;\nvar ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\nvar webkit = !edge && /WebKit\\//.test(userAgent);\nvar qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\nvar chrome = !edge && /Chrome\\//.test(userAgent);\nvar presto = /Opera\\//.test(userAgent);\nvar safari = /Apple Computer/.test(navigator.vendor);\nvar mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\nvar phantom = /PhantomJS/.test(userAgent);\n\nvar ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\nvar android = /Android/.test(userAgent);\n// This is woefully incomplete. Suggestions for alternative methods welcome.\nvar mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\nvar mac = ios || /Mac/.test(platform);\nvar chromeOS = /\\bCrOS\\b/.test(userAgent);\nvar windows = /win/i.test(platform);\n\nvar presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\nif (presto_version) { presto_version = Number(presto_version[1]); }\nif (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n// Some browsers use the wrong event properties to signal cmd/ctrl on OS X\nvar flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\nvar captureRightClick = gecko || (ie && ie_version >= 9);\n\nfunction classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\nvar rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n};\n\nfunction removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n}\n\nfunction removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n}\n\nfunction elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n}\n// wrapper for elt, which removes the elt from the accessibility tree\nfunction eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n}\n\nvar range;\nif (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n}; }\nelse { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n}; }\n\nfunction contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n}\n\nfunction activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n try {\n activeElement = document.activeElement;\n } catch(e) {\n activeElement = document.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n}\n\nfunction addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n}\nfunction joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n}\n\nvar selectInput = function(node) { node.select(); };\nif (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\nelse if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\nfunction bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n}\n\nfunction copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n}\n\nvar Delayed = function() {this.id = null;};\nDelayed.prototype.set = function (ms, f) {\n clearTimeout(this.id);\n this.id = setTimeout(f, ms);\n};\n\nfunction indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n}\n\n// Number of pixels added to scroller and sizer to hide scrollbar\nvar scrollerGap = 30;\n\n// Returned or thrown by various protocols to signal 'I'm not\n// handling this'.\nvar Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n// Reused option objects for setSelection & friends\nvar sel_dontScroll = {scroll: false};\nvar sel_mouse = {origin: \"*mouse\"};\nvar sel_move = {origin: \"+move\"};\n\n// The inverse of countColumn -- find the offset that corresponds to\n// a particular column.\nfunction findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n}\n\nvar spaceStrs = [\"\"];\nfunction spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n}\n\nfunction lst(arr) { return arr[arr.length-1] }\n\nfunction map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n}\n\nfunction insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n}\n\nfunction nothing() {}\n\nfunction createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n}\n\nvar nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nfunction isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n}\nfunction isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n}\n\nfunction isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n}\n\n// Extending unicode characters. A series of a non-extending char +\n// any number of extending chars is treated as a single unit as far\n// as editing and measuring is concerned. This is not fully correct,\n// since some scripts/fonts/browsers also treat other configurations\n// of code points as a group.\nvar extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\nfunction isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\nfunction skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n}\n\n// Returns the value from the range [`from`; `to`] that satisfies\n// `pred` and is closest to `from`. Assumes that at least `to`\n// satisfies `pred`. Supports `from` being greater than `to`.\nfunction findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n}\n\n// The display handles the DOM integration, both for input reading\n// and content drawing. It holds references to DOM nodes and\n// display-related state.\n\nfunction Display(place, doc, input) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n input.init(d);\n}\n\n// Find the line object corresponding to the given line number.\nfunction getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n}\n\n// Get the part of a document between two positions, as an array of\n// strings.\nfunction getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n}\n// Get the lines between from and to, as array of strings.\nfunction getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n}\n\n// Update the height of a line, propagating the height change\n// upwards to parent nodes.\nfunction updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n}\n\n// Given a line object, find its line number by walking up through\n// its parent links.\nfunction lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n}\n\n// Find the line at the given vertical position, using the height\n// information in the document tree.\nfunction lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n}\n\nfunction isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\nfunction lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n}\n\n// A Pos instance represents a position within the text.\nfunction Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n}\n\n// Compare two positions, return 0 if they are the same, a negative\n// number when a is less, and a positive number otherwise.\nfunction cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\nfunction equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\nfunction copyPos(x) {return Pos(x.line, x.ch)}\nfunction maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\nfunction minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n// Most of the external API clips given positions to make sure they\n// actually exist within the document.\nfunction clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\nfunction clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n}\nfunction clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n}\nfunction clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n}\n\n// Optimize some code when these features are not used.\nvar sawReadOnlySpans = false;\nvar sawCollapsedSpans = false;\n\nfunction seeReadOnlySpans() {\n sawReadOnlySpans = true;\n}\n\nfunction seeCollapsedSpans() {\n sawCollapsedSpans = true;\n}\n\n// TEXTMARKER SPANS\n\nfunction MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n}\n\n// Search an array of spans for a span matching the given marker.\nfunction getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n}\n// Remove a span from an array, returning undefined if no spans are\n// left (we don't store arrays for lines without spans).\nfunction removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n}\n// Add a span to a line.\nfunction addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n}\n\n// Used for the algorithm that adjusts markers for a change in the\n// document. These functions cut an array of spans at a given\n// character position, returning an array of remaining chunks (or\n// undefined if nothing remains).\nfunction markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n}\nfunction markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n}\n\n// Given a change object, compute the new set of marker spans that\n// cover the line in which the change took place. Removes spans\n// entirely within the change, reconnects spans belonging to the\n// same marker that appear on both sides of the change, and cuts off\n// spans partially within the change. Returns an array of span\n// arrays with one element for each line in (after) the change.\nfunction stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n}\n\n// Remove spans that are empty and don't have a clearWhenEmpty\n// option of false.\nfunction clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n}\n\n// Used to 'clip' out readOnly ranges when making a change.\nfunction removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n}\n\n// Connect or disconnect spans from a line.\nfunction detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n}\nfunction attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n}\n\n// Helpers used when computing which overlapping collapsed span\n// counts as the larger one.\nfunction extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\nfunction extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n// Returns a number indicating which of two overlapping collapsed\n// spans is larger (and thus includes the other). Falls back to\n// comparing ids when the spans cover exactly the same range.\nfunction compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n}\n\n// Find out whether a line ends or starts in a collapsed span. If\n// so, return the marker for that span.\nfunction collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n}\nfunction collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\nfunction collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n// Test whether there exists a collapsed span that partially\n// overlaps (covers the start or end, but not both) of a new span.\n// Such overlap is not allowed.\nfunction conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {\n var line = getLine(doc, lineNo$$1);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n}\n\n// A visual line is a line as drawn on the screen. Folding, for\n// example, can cause multiple logical lines to appear on the same\n// visual line. This finds the start of the visual line that the\n// given line is part of (usually that is the line itself).\nfunction visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n}\n\nfunction visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n}\n\n// Returns an array of logical lines that continue the visual line\n// started by the argument, or undefined if there are no such lines.\nfunction visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n}\n\n// Get the line number of the start of the visual line that the\n// given line number is part of.\nfunction visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n}\n\n// Get the line number of the start of the next visual line after\n// the given line.\nfunction visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n}\n\n// Compute whether a line is hidden. Lines count as hidden when they\n// are part of a visual line that starts with another line, or when\n// they are entirely covered by collapsed, non-widget span.\nfunction lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n}\nfunction lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n}\n\n// Find the height above the given line.\nfunction heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n}\n\n// Compute the character length of a line, taking into account\n// collapsed ranges (see markText) that might hide parts, and join\n// other lines onto it.\nfunction lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n}\n\n// Find the longest line in the document.\nfunction findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n}\n\n// BIDI HELPERS\n\nfunction iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n}\n\nvar bidiOther = null;\nfunction getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n}\n\n// Bidirectional ordering algorithm\n// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n// that this (partially) implements.\n\n// One-char codes used for character types:\n// L (L): Left-to-Right\n// R (R): Right-to-Left\n// r (AL): Right-to-Left Arabic\n// 1 (EN): European Number\n// + (ES): European Number Separator\n// % (ET): European Number Terminator\n// n (AN): Arabic Number\n// , (CS): Common Number Separator\n// m (NSM): Non-Spacing Mark\n// b (BN): Boundary Neutral\n// s (B): Paragraph Separator\n// t (S): Segment Separator\n// w (WS): Whitespace\n// N (ON): Other Neutrals\n\n// Returns null if characters are ordered as they appear\n// (left-to-right), or an array of sections ({from, to, level}\n// objects) in the order in which they occur visually.\nvar bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n})();\n\n// Get the bidi ordering for the given line (and cache it). Returns\n// false for lines that are fully left-to-right, and an array of\n// BidiSpan objects otherwise.\nfunction getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n}\n\n// EVENT HANDLING\n\n// Lightweight event framework. on/off also work on DOM nodes,\n// registering native DOM handlers.\n\nvar noHandlers = [];\n\nvar on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers || (emitter._handlers = {});\n map$$1[type] = (map$$1[type] || noHandlers).concat(f);\n }\n};\n\nfunction getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n}\n\nfunction off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n}\n\nfunction signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n}\n\n// The DOM events that CodeMirror handles can be overridden by\n// registering a (non-DOM) handler on the editor for the event name,\n// and preventDefault-ing the event in that handler.\nfunction signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n}\n\nfunction signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n}\n\nfunction hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n}\n\n// Add on and off methods to a constructor's prototype, to make\n// registering events on such objects more convenient.\nfunction eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n}\n\n// Due to the fact that we still support jurassic IE versions, some\n// compatibility wrappers are needed.\n\nfunction e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n}\nfunction e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n}\nfunction e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n}\nfunction e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\nfunction e_target(e) {return e.target || e.srcElement}\nfunction e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n}\n\n// Detect drag-and-drop\nvar dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n}();\n\nvar zwspSupported;\nfunction zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n}\n\n// Feature-detect IE's crummy client rect reporting for bidi text\nvar badBidiRects;\nfunction hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n}\n\n// See if \"\".split is the broken IE version, if so, provide an\n// alternative way to split lines.\nvar splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n} : function (string) { return string.split(/\\r\\n?|\\n/); };\n\nvar hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n} : function (te) {\n var range$$1;\n try {range$$1 = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range$$1 || range$$1.parentElement() != te) { return false }\n return range$$1.compareEndPoints(\"StartToEnd\", range$$1) != 0\n};\n\nvar hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n})();\n\nvar badZoomedRects = null;\nfunction hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n}\n\n// Known modes, by name and by MIME\nvar modes = {};\nvar mimeModes = {};\n\n// Extra arguments are stored as the mode's dependencies, which is\n// used by (legacy) mechanisms like loadmode.js to automatically\n// load a mode. (Preferred mechanism is the require/define calls.)\nfunction defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n}\n\nfunction defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n}\n\n// Given a MIME type, a {name, ...options} config object, or a name\n// string, return a mode config object.\nfunction resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n}\n\n// Given a mode spec (anything that resolveMode accepts), find and\n// initialize an actual mode object.\nfunction getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n}\n\n// This can be used to attach properties to mode objects from\n// outside the actual mode definition.\nvar modeExtensions = {};\nfunction extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n}\n\nfunction copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n}\n\n// Given a mode and a state (for that mode), find the inner mode and\n// state at the position that the state refers to.\nfunction innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n}\n\nfunction startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n}\n\n// STRING STREAM\n\n// Fed to the mode parsers, provides helper functions to make\n// parsers more succinct.\n\nvar StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n};\n\nStringStream.prototype.eol = function () {return this.pos >= this.string.length};\nStringStream.prototype.sol = function () {return this.pos == this.lineStart};\nStringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\nStringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n};\nStringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n};\nStringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n};\nStringStream.prototype.eatSpace = function () {\n var this$1 = this;\n\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }\n return this.pos > start\n};\nStringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\nStringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n};\nStringStream.prototype.backUp = function (n) {this.pos -= n;};\nStringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n};\nStringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n};\nStringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n};\nStringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\nStringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n};\nStringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n};\nStringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n};\n\nvar SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n};\n\nvar Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n};\n\nContext.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n};\n\nContext.prototype.baseToken = function (n) {\n var this$1 = this;\n\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this$1.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n};\n\nContext.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n};\n\nContext.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n};\n\nContext.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n};\n\n\n// Compute a style array (an array starting with a mode generation\n// -- for invalidation -- followed by pairs of end positions and\n// style strings), which is used to highlight the tokens on the\n// line.\nfunction highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n}\n\nfunction getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n}\n\nfunction getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n}\n\n// Lightweight form of highlight -- proceed over this line and\n// update state, but don't save a style array. Used for lines that\n// aren't currently visible.\nfunction processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n}\n\nfunction callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n}\n\nfunction readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n}\n\nvar Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n};\n\n// Utility for getTokenAt and getLineTokens\nfunction takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n}\n\nfunction extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n}\n\n// Run the given mode's parser over a line, calling f for each token.\nfunction runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n}\n\n// Finds the line to start with when starting a parse. Tries to\n// find a line with a stateAfter, so that it can start with a\n// valid state. If that fails, it returns the line with the\n// smallest indentation, which tends to need the least context to\n// parse correctly.\nfunction findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n}\n\nfunction retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n}\n\n// LINE DATA STRUCTURE\n\n// Line objects. These hold state related to a line, including\n// highlighting info (the styles array).\nvar Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n};\n\nLine.prototype.lineNo = function () { return lineNo(this) };\neventMixin(Line);\n\n// Change the content (text, markers) of a line. Automatically\n// invalidates cached information and tries to re-estimate the\n// line's height.\nfunction updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n}\n\n// Detach a line from the document tree and its markers.\nfunction cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n}\n\n// Convert a style as returned by a mode (either null, or a string\n// containing one or more styles) to a CSS style. This is cached,\n// and also looks for line-wide styles.\nvar styleToClassCache = {};\nvar styleToClassCacheWithMode = {};\nfunction interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n}\n\n// Render the DOM representation of the text of a line. Also builds\n// up a 'line map', which points at the DOM nodes that represent\n// specific stretches of text, and is used by the measuring code.\n// The returned object contains the DOM node, this map, and\n// information about line-wide styles that were set by the mode.\nfunction buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: (ie || webkit) && cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n}\n\nfunction defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n}\n\n// Build up the DOM representation for a single token, and add it to\n// the line map. Takes care to render special characters separately.\nfunction buildToken(builder, text, style, startStyle, endStyle, title, css) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (title) { token.title = title; }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n}\n\nfunction splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n}\n\n// Work around nonsense dimensions being reported for stretches of\n// right-to-left text.\nfunction buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, title, css) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n}\n\nfunction buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n}\n\n// Outputs a number of spans to make up a line, taking highlighting\n// and marked text into account.\nfunction insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = title = css = \"\";\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n if (m.title && !title) { title = m.title; }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", title, css);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n}\n\n\n// These objects are used to represent the visible (currently drawn)\n// part of the document. A LineView may correspond to multiple\n// logical lines, if those are connected by collapsed ranges.\nfunction LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n}\n\n// Create a range of LineView objects for the given lines.\nfunction buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n}\n\nvar operationGroup = null;\n\nfunction pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n}\n\nfunction fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n}\n\nfunction finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n}\n\nvar orphanDelayedCallbacks = null;\n\n// Often, we want to signal events at a point where we are in the\n// middle of some work, but don't want the handler to start calling\n// other methods on the editor, which might be in an inconsistent\n// state or simply not expect any other events to happen.\n// signalLater looks whether there are any handlers, and schedules\n// them to be executed when the last operation ends, or, if no\n// operation is active, when a timeout fires.\nfunction signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n}\n\nfunction fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n}\n\n// When an aspect of a line changes, a string is added to\n// lineView.changes. This updates the relevant part of the line's\n// DOM structure.\nfunction updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n}\n\n// Lines with gutter elements, widgets or a background class need to\n// be wrapped, and have the extra elements added to the wrapper div\nfunction ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n}\n\nfunction updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n}\n\n// Wrapper around buildLineContent which will reuse the structure\n// in display.externalMeasured when possible.\nfunction getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n}\n\n// Redraw the line's text. Interacts with the background and text\n// classes because the mode may output tokens that influence these\n// classes.\nfunction updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n}\n\nfunction updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n}\n\nfunction updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {\n var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n}\n\nfunction updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (node.className == \"CodeMirror-linewidget\")\n { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n}\n\n// Build a line's DOM representation from scratch\nfunction buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n}\n\n// A lineView may contain multiple logical lines (when merged by\n// collapsed spans). The widgets for all of them need to be drawn.\nfunction insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n}\n\nfunction insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n}\n\nfunction positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n}\n\nfunction widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n}\n\n// Return true when the given mouse event happened in a widget\nfunction eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n}\n\n// POSITION MEASUREMENT\n\nfunction paddingTop(display) {return display.lineSpace.offsetTop}\nfunction paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\nfunction paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n}\n\nfunction scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\nfunction displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n}\nfunction displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n}\n\n// Ensure the lineView.wrapping.heights array is populated. This is\n// an array of bottom offsets for the lines that make up a drawn\n// line. When lineWrapping is on, there might be more than one\n// height.\nfunction ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n}\n\n// Find a line map (mapping character offsets to text nodes) and a\n// measurement cache for the given line number. (A line view might\n// contain multiple lines when collapsed ranges are present.)\nfunction mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n}\n\n// Render a line into the hidden node display.externalMeasured. Used\n// when measurement is needed for a line that's not in the viewport.\nfunction updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n}\n\n// Get a {top, bottom, left, right} box (in line-local coordinates)\n// for a given character.\nfunction measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n}\n\n// Find a line view that corresponds to the given line number.\nfunction findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n}\n\n// Measurement can be split in two steps, the set-up work that\n// applies to the whole line, and the measurement of the actual\n// character. Functions like coordsChar, that need to do a lot of\n// measurements in a row, can thus ensure that the set-up work is\n// only done once.\nfunction prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n}\n\n// Given a prepared measurement object, measures the position of an\n// actual character (or fetches it from the cache).\nfunction measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n}\n\nvar nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\nfunction nodeAndOffsetInLineMap(map$$1, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map$$1.length; i += 3) {\n mStart = map$$1[i];\n mEnd = map$$1[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map$$1[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {\n node = map$$1[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {\n node = map$$1[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n}\n\nfunction getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n}\n\nfunction measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n}\n\n// Work around problem with bounding client rects on ranges being\n// returned incorrectly when zoomed on IE10 and below.\nfunction maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n}\n\nfunction clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n}\n\nfunction clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n}\n\nfunction clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n}\n\nfunction pageScrollX() {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n}\nfunction pageScrollY() {\n if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n return window.pageYOffset || (document.documentElement || document.body).scrollTop\n}\n\nfunction widgetTopHeight(lineObj) {\n var height = 0;\n if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n { height += widgetHeight(lineObj.widgets[i]); } } }\n return height\n}\n\n// Converts a {top, bottom, left, right} box from line-local\n// coordinates into another coordinate system. Context may be one of\n// \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n// or \"page\".\nfunction intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n}\n\n// Coverts a box from \"div\" coords to another coordinate system.\n// Context may be \"window\", \"page\", \"div\", or \"local\"./null.\nfunction fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n}\n\nfunction charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n}\n\n// Returns a box for a given cursor position, which may have an\n// 'other' property containing the position of the secondary cursor\n// on a bidi boundary.\n// A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n// and after `char - 1` in writing order of `char - 1`\n// A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n// and before `char` in writing order of `char`\n// Examples (upper-case letters are RTL, lower-case are LTR):\n// Pos(0, 1, ...)\n// before after\n// ab a|b a|b\n// aB a|B aB|\n// Ab |Ab A|b\n// AB B|A B|A\n// Every position after the last character on a line is considered to stick\n// to the last character on the line.\nfunction cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n}\n\n// Used to cheaply estimate the coordinates for a position. Used for\n// intermediate scroll updates.\nfunction estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n}\n\n// Positions returned by coordsChar contain some extra information.\n// xRel is the relative x position of the input coordinates compared\n// to the found position (so xRel > 0 means the coordinates are to\n// the right of the character position, for example). When outside\n// is true, that means the coordinates lie outside the line's\n// vertical range.\nfunction PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = true; }\n return pos\n}\n\n// Compute the character position closest to the given coordinates.\n// Input must be lineSpace-local (\"div\" coordinate system).\nfunction coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var merged = collapsedSpanAtEnd(lineObj);\n var mergedPos = merged && merged.find(0, true);\n if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))\n { lineN = lineNo(lineObj = mergedPos.to.line); }\n else\n { return found }\n }\n}\n\nfunction wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n}\n\nfunction wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n}\n\n// Returns true if the given side of a box is after the given\n// coordinates, in top-to-bottom, left-to-right order.\nfunction boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n}\n\nfunction coordsCharInner(cm, lineObj, lineNo$$1, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight$$1 = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top || y >= coords.bottom;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)\n}\n\nfunction coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n}\n\nfunction coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n}\n\nvar measureText;\n// Compute the default text height.\nfunction textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n}\n\n// Compute the default character width.\nfunction charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor]);\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n}\n\n// Do a bulk-read of the DOM positions and sizes needed to draw the\n// view, so that we don't interleave reading and writing to the DOM.\nfunction getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[cm.options.gutters[i]] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n}\n\n// Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n// but using getBoundingClientRect to get a sub-pixel-accurate\n// result.\nfunction compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n}\n\n// Returns a function that estimates the height of a line, to use as\n// first approximation until the line becomes visible (and is thus\n// properly measurable).\nfunction estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n}\n\nfunction estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n}\n\n// Given a mouse event, find the corresponding position. If liberal\n// is false, it checks whether a gutter or scrollbar was clicked,\n// and returns null if it was. forRect is used by rectangular\n// selections, and tries to estimate a character position even for\n// coordinates beyond the right of the text.\nfunction posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n}\n\n// Find the view element corresponding to a given line. Return null\n// when the line isn't visible.\nfunction findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n}\n\nfunction updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n}\n\nfunction prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range$$1 = doc.sel.ranges[i];\n if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }\n var collapsed = range$$1.empty();\n if (collapsed || cm.options.showCursorWhenSelecting)\n { drawSelectionCursor(cm, range$$1.head, curFragment); }\n if (!collapsed)\n { drawSelectionRange(cm, range$$1, selFragment); }\n }\n return result\n}\n\n// Draws a cursor for the given range\nfunction drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n}\n\nfunction cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n// Draws the given range as a highlighted selection\nfunction drawSelectionRange(cm, range$$1, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range$$1.from(), sTo = range$$1.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n}\n\n// Cursor-blinking\nfunction restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\"; },\n cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n}\n\nfunction ensureFocus(cm) {\n if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n}\n\nfunction delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n onBlur(cm);\n } }, 100);\n}\n\nfunction onFocus(cm, e) {\n if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n}\nfunction onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n}\n\n// Read the actual heights of the rendered lines, and update their\n// stored heights to match.\nfunction updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], height = (void 0);\n if (cur.hidden) { continue }\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n }\n var diff = cur.line.height - height;\n if (height < 2) { height = textHeight(display); }\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n }\n}\n\n// Read and store the height of line widgets associated with the\n// given line.\nfunction updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n}\n\n// Compute the lines that are visible in a given viewport (defaults\n// the the current scroll position). viewport may contain top,\n// height, and ensure (see op.scrollToPos) properties.\nfunction visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n}\n\n// Re-align line numbers and gutter marks to compensate for\n// horizontal scrolling.\nfunction alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n}\n\n// Used to ensure that the line number gutter is still the right\n// size for the current document size. Returns true when an update\n// is needed.\nfunction maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm);\n return true\n }\n return false\n}\n\n// SCROLLING THINGS INTO VIEW\n\n// If an editor sits on the top or bottom of the window, partially\n// scrolled out of view, this ensures that the cursor is visible.\nfunction maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n}\n\n// Scroll a given position into view (immediately), verifying that\n// it actually became visible (as line heights are accurately\n// measured, the position of something may 'drift' during drawing).\nfunction scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n}\n\n// Scroll a given set of coordinates into view (immediately).\nfunction scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n}\n\n// Calculate a new scroll position needed to scroll the given\n// rectangle into view. Returns an object with scrollTop and\n// scrollLeft properties. When these are undefined, the\n// vertical/horizontal position does not need to be adjusted.\nfunction calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n}\n\n// Store a relative adjustment to the scroll position in the current\n// operation (to be applied when the operation finishes).\nfunction addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n}\n\n// Make sure that at the end of the operation the current cursor is\n// shown.\nfunction ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n}\n\nfunction scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n}\n\nfunction scrollToRange(cm, range$$1) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range$$1;\n}\n\n// When an operation has its scrollToPos property set, and another\n// scroll action is applied before the end of the operation, this\n// 'simulates' scrolling that position into view in a cheap way, so\n// that the effect of intermediate scroll commands is not ignored.\nfunction resolveScrollToPos(cm) {\n var range$$1 = cm.curOp.scrollToPos;\n if (range$$1) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);\n scrollToCoordsRange(cm, from, to, range$$1.margin);\n }\n}\n\nfunction scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n}\n\n// Sync the scrollable area and scrollbars, ensure the viewport\n// covers the visible area.\nfunction updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n}\n\nfunction setScrollTop(cm, val, forceScroll) {\n val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n}\n\n// Sync scroller and scrollbar, ensure the gutter elements are\n// aligned.\nfunction setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n}\n\n// SCROLLBARS\n\n// Prepare DOM reads needed to update the scrollbars. Done in one\n// shot to minimize update/measure roundtrips.\nfunction measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n}\n\nvar NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n};\n\nNativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n};\n\nNativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n};\n\nNativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n};\n\nNativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n};\n\nNativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt$$1 = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt$$1 != bar) { bar.style.pointerEvents = \"none\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n};\n\nNativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n};\n\nvar NullScrollbars = function () {};\n\nNullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\nNullScrollbars.prototype.setScrollLeft = function () {};\nNullScrollbars.prototype.setScrollTop = function () {};\nNullScrollbars.prototype.clear = function () {};\n\nfunction updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n}\n\n// Re-synchronize the fake scrollbars with the actual size of the\n// content.\nfunction updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n}\n\nvar scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\nfunction initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n}\n\n// Operations are used to wrap a series of changes to the editor\n// state in such a way that each change won't have to update the\n// cursor and display (which would be awkward, slow, and\n// error-prone). Instead, display updates are batched and then all\n// combined and executed at once.\n\nvar nextOpId = 0;\n// Start a new operation.\nfunction startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: null, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId // Unique ID\n };\n pushOperation(cm.curOp);\n}\n\n// Finish an operation, updating the display and signalling delayed events\nfunction endOperation(cm) {\n var op = cm.curOp;\n finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n });\n}\n\n// The DOM updates done when an operation finishes are batched so\n// that the minimum number of relayouts are required.\nfunction endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n}\n\nfunction endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n}\n\nfunction endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n}\n\nfunction endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n}\n\nfunction endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n}\n\nfunction endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n}\n\n// Run the given function in an operation\nfunction runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n}\n// Wraps a function in an operation. Returns the wrapped function.\nfunction operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n}\n// Used to add methods to editor and doc instances, wrapping them in\n// operations.\nfunction methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n}\nfunction docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n}\n\n// Updates the display.view data structure for a given change to the\n// document. From and to are in pre-change coordinates. Lendiff is\n// the amount of lines added or subtracted by the change. This is\n// used for changes that span multiple lines, or change the way\n// lines are divided into visual lines. regLineChange (below)\n// registers single-line changes.\nfunction regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n}\n\n// Register a change to a single line. Type must be one of \"text\",\n// \"gutter\", \"class\", \"widget\"\nfunction regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n}\n\n// Clear the view.\nfunction resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n}\n\nfunction viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n}\n\n// Force the view to cover a given range, adding empty view element\n// or clipping off existing ones as needed.\nfunction adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n}\n\n// Count the number of lines in the view whose DOM representation is\n// out of date (or nonexistent).\nfunction countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n}\n\n// HIGHLIGHT WORKER\n\nfunction startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n}\n\nfunction highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n}\n\n// DISPLAY DRAWING\n\nvar DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n};\n\nDisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n};\nDisplayUpdate.prototype.finish = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this$1.events[i]); }\n};\n\nfunction maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n}\n\nfunction selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt();\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = window.getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n}\n\nfunction restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n snapshot.activeElt.focus();\n if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(), range$$1 = document.createRange();\n range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range$$1.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range$$1);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n}\n\n// Does the actual updating of the line display. Bails out\n// (returning false) when there is nothing to be done and forced is\n// false.\nfunction updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n}\n\nfunction postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n}\n\nfunction updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n}\n\n// Sync the actual display DOM structure with display.view, removing\n// nodes for lines that are no longer in view, and creating the ones\n// that are not there yet, and updating the ones that are out of\n// date.\nfunction patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) {\n } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n}\n\nfunction updateGutterSpace(cm) {\n var width = cm.display.gutters.offsetWidth;\n cm.display.sizer.style.marginLeft = width + \"px\";\n}\n\nfunction setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n}\n\n// Rebuild the gutter elements, ensure the margin to the left of the\n// code matches their width.\nfunction updateGutters(cm) {\n var gutters = cm.display.gutters, specs = cm.options.gutters;\n removeChildren(gutters);\n var i = 0;\n for (; i < specs.length; ++i) {\n var gutterClass = specs[i];\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n if (gutterClass == \"CodeMirror-linenumbers\") {\n cm.display.lineGutter = gElt;\n gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = i ? \"\" : \"none\";\n updateGutterSpace(cm);\n}\n\n// Make sure the gutters options contains the element\n// \"CodeMirror-linenumbers\" when the lineNumbers option is true.\nfunction setGuttersForLineNumbers(options) {\n var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n if (found == -1 && options.lineNumbers) {\n options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n } else if (found > -1 && !options.lineNumbers) {\n options.gutters = options.gutters.slice(0);\n options.gutters.splice(found, 1);\n }\n}\n\n// Since the delta values reported on mouse wheel events are\n// unstandardized between browsers and even browser versions, and\n// generally horribly unpredictable, this code starts by measuring\n// the scroll effect that the first few mouse wheel events have,\n// and, from that, detects the way it can convert deltas to pixel\n// offsets afterwards.\n//\n// The reason we want to know the amount a wheel event will scroll\n// is that it gives us a chance to update the display before the\n// actual scrolling happens, reducing flickering.\n\nvar wheelSamples = 0;\nvar wheelPixelsPerUnit = null;\n// Fill in a browser-detected starting value on browsers where we\n// know one. These don't have to be accurate -- the result of them\n// being wrong would just be a slight flicker on the first wheel\n// scroll (if it is large enough).\nif (ie) { wheelPixelsPerUnit = -.53; }\nelse if (gecko) { wheelPixelsPerUnit = 15; }\nelse if (chrome) { wheelPixelsPerUnit = -.7; }\nelse if (safari) { wheelPixelsPerUnit = -1/3; }\n\nfunction wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n}\nfunction wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n}\n\nfunction onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n}\n\n// Selection objects are immutable. A new one is created every time\n// the selection changes. A selection is one or more non-overlapping\n// (and non-touching) ranges, sorted, and an integer that indicates\n// which one is the primary selection (the one that's scrolled into\n// view, that getCursor returns, etc).\nvar Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n};\n\nSelection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\nSelection.prototype.equals = function (other) {\n var this$1 = this;\n\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this$1.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n};\n\nSelection.prototype.deepCopy = function () {\n var this$1 = this;\n\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n};\n\nSelection.prototype.somethingSelected = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this$1.ranges[i].empty()) { return true } }\n return false\n};\n\nSelection.prototype.contains = function (pos, end) {\n var this$1 = this;\n\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this$1.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n};\n\nvar Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n};\n\nRange.prototype.from = function () { return minPos(this.anchor, this.head) };\nRange.prototype.to = function () { return maxPos(this.anchor, this.head) };\nRange.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n// Take an unsorted, potentially overlapping set of ranges, and\n// build a selection out of it. 'Consumes' ranges array (modifying\n// it).\nfunction normalizeSelection(ranges, primIndex) {\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n if (cmp(prev.to(), cur.from()) >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n}\n\nfunction simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n}\n\n// Compute the position of the end of a change (its 'to' property\n// refers to the pre-change end).\nfunction changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n}\n\n// Adjust a position to refer to the post-change position of the\n// same text, or the end of the change if the change covers it.\nfunction adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n}\n\nfunction computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(out, doc.sel.primIndex)\n}\n\nfunction offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n}\n\n// Used by replaceSelections to allow moving the selection to the\n// start or around the replaced test. Hint may be \"start\" or \"around\".\nfunction computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n}\n\n// Used to get the editor into a consistent state again when options change.\n\nfunction loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n}\n\nfunction resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n}\n\n// DOCUMENT DATA STRUCTURE\n\n// By default, updates that start and end at the beginning of a line\n// are treated specially, in order to make the association of line\n// widgets and marker elements with the text behave more intuitive.\nfunction isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n}\n\n// Perform a change on the document data structure.\nfunction updateDoc(doc, change, markedSpans, estimateHeight$$1) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight$$1);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n}\n\n// Call f for all linked documents.\nfunction linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n}\n\n// Attach a document to an editor.\nfunction attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n}\n\nfunction setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n}\n\nfunction directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n}\n\nfunction History(startGen) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = startGen || 1;\n}\n\n// Create a history change event from an updateDoc-style change\n// object.\nfunction historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n}\n\n// Pop all selection events off the end of a history array. Stop at\n// a change event.\nfunction clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n}\n\n// Find the top change event in the history. Pop off selection\n// events that are in the way.\nfunction lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n}\n\n// Register a change in the history. Merges changes that are within\n// a single operation, or are close together with an origin that\n// allows merging (starting with \"+\") into a single event.\nfunction addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n}\n\nfunction selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n}\n\n// Called whenever the selection changes, sets the new selection as\n// the pending selection in the history, and pushes the old pending\n// selection into the 'done' array when it was significantly\n// different (in number of selected ranges, emptiness, or time).\nfunction addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n}\n\nfunction pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n}\n\n// Used to store marked span information in the history.\nfunction attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n}\n\n// When un/re-doing restores text containing marked spans, those\n// that have been explicitly cleared should not be restored.\nfunction removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n}\n\n// Retrieve and filter the old marked spans stored in a change event.\nfunction getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n}\n\n// Used for un/re-doing changes from the history. Combines the\n// result of computing the existing spans with the set of spans that\n// existed in the history (so that deleting around a span and then\n// undoing brings back the span).\nfunction mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n}\n\n// Used both to provide a JSON-safe object in .getHistory, and, when\n// detaching a document, to split the history in two\nfunction copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n}\n\n// The 'scroll' parameter given to many of these indicated whether\n// the new cursor position should be scrolled into view after\n// modifying the selection.\n\n// If shift is held or the extend flag is set, extends a range to\n// include a given position (and optionally a second position).\n// Otherwise, simply returns the range between the given positions.\n// Used for cursor motion and such.\nfunction extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n}\n\n// Extend the primary selection range, discard the rest.\nfunction extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n}\n\n// Extend all selections (pos is an array of selections with length\n// equal the number of selections)\nfunction extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n}\n\n// Updates a single range in the selection.\nfunction replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);\n}\n\n// Reset the selection to a single range.\nfunction setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n}\n\n// Give beforeSelectionChange handlers a change to influence a\n// selection update.\nfunction filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n var this$1 = this;\n\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n}\n\nfunction setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n}\n\n// Set a new selection.\nfunction setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n}\n\nfunction setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm)\n { ensureCursorVisible(doc.cm); }\n}\n\nfunction setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n}\n\n// Verify that the selection does not partially select any atomic\n// marked ranges.\nfunction reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n}\n\n// Return a selection that does not partially select any atomic\n// ranges.\nfunction skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(out, sel.primIndex) : sel\n}\n\nfunction skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n}\n\n// Ensure a given position is not inside an atomic range.\nfunction skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n}\n\nfunction movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n}\n\nfunction selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n}\n\n// UPDATING\n\n// Allow \"beforeChange\" event handlers to influence a change\nfunction filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) { return null }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n}\n\n// Apply a change to a document, and add it to the document's\n// history, and propagating it to all linked documents.\nfunction makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n}\n\nfunction makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n}\n\n// Revert a change stored in a document's history.\nfunction makeChangeFromHistory(doc, type, allowSelectionOnly) {\n if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n }\n else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n}\n\n// Sub-views need their line numbers shifted when text is added\n// above or below them in the parent document.\nfunction shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n}\n\n// More lower-level change function, handling only a single document\n// (not linked ones).\nfunction makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n}\n\n// Handle the interaction of a change to a document with the editor\n// that this document is part of.\nfunction makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n}\n\nfunction replaceRange(doc, code, from, to, origin) {\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { var assign;\n (assign = [to, from], from = assign[0], to = assign[1], assign); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n}\n\n// Rebasing/resetting history to deal with externally-sourced changes\n\nfunction rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n}\n\n// Tries to rebase an array of history events given a change in the\n// document. If the change touches the same lines as the event, the\n// event, and everything 'behind' it, is discarded. If the change is\n// before the event, the event's positions are updated. Uses a\n// copy-on-write scheme for the positions, to avoid having to\n// reallocate them all on every rebase, but also avoid problems with\n// shared position objects being unsafely updated.\nfunction rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n}\n\nfunction rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n}\n\n// Utility for applying a change to a line by handle or number,\n// returning the number and optionally registering the line as\n// changed.\nfunction changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n}\n\n// The document is represented as a BTree consisting of leaves, with\n// chunk of lines in them, and branches, with up to ten leaves or\n// other branch nodes below them. The top node is always a branch\n// node, and is the document object itself (meaning it has\n// additional methods and properties).\n//\n// All nodes have parent links. The tree is used both to go from\n// line numbers to line objects, and to go from objects to numbers.\n// It also indexes by height, and is used to convert between height\n// and line object, and to find the total height of the document.\n//\n// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\nfunction LeafChunk(lines) {\n var this$1 = this;\n\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this$1;\n height += lines[i].height;\n }\n this.height = height;\n}\n\nLeafChunk.prototype = {\n chunkSize: function chunkSize() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function removeInner(at, n) {\n var this$1 = this;\n\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this$1.lines[i];\n this$1.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function collapse(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function insertInner(at, lines, height) {\n var this$1 = this;\n\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function iterN(at, n, op) {\n var this$1 = this;\n\n for (var e = at + n; at < e; ++at)\n { if (op(this$1.lines[at])) { return true } }\n }\n};\n\nfunction BranchChunk(children) {\n var this$1 = this;\n\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this$1;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n}\n\nBranchChunk.prototype = {\n chunkSize: function chunkSize() { return this.size },\n\n removeInner: function removeInner(at, n) {\n var this$1 = this;\n\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this$1.height -= oldHeight - child.height;\n if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function collapse(lines) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }\n },\n\n insertInner: function insertInner(at, lines, height) {\n var this$1 = this;\n\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this$1.children.splice(++i, 0, leaf);\n leaf.parent = this$1;\n }\n child.lines = child.lines.slice(0, remaining);\n this$1.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function maybeSpill() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function iterN(at, n, op) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n};\n\n// Line widgets are block elements displayed above or below a line.\n\nvar LineWidget = function(doc, node, options) {\n var this$1 = this;\n\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this$1[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n};\n\nLineWidget.prototype.clear = function () {\n var this$1 = this;\n\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n};\n\nLineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n updateLineHeight(line, line.height + diff);\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n};\neventMixin(LineWidget);\n\nfunction adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n}\n\nfunction addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle));\n return widget\n}\n\n// TEXTMARKERS\n\n// Created with markText and setBookmark methods. A TextMarker is a\n// handle that can be used to clear or find a marked position in the\n// document. Line objects hold arrays (markedSpans) containing\n// {from, to, marker} object pointing to such marker objects, and\n// indicating that such a marker is present on that line. Multiple\n// lines may point to the same marker when it spans across lines.\n// The spans will have null for their from/to properties when the\n// marker continues beyond the start/end of the line. Markers have\n// links back to the lines they currently touch.\n\n// Collapsed markers have unique ids, in order to be able to order\n// them, which is needed for uniquely determining an outer marker\n// when they overlap (they may nest, but not partially overlap).\nvar nextMarkerId = 0;\n\nvar TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n};\n\n// Clear the marker.\nTextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n};\n\n// Find the position of the marker in the document. Returns a {from,\n// to} object by default. Side can be passed to get a specific side\n// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n// Pos objects returned contain a line object, rather than a line\n// number (used to prevent looking up the same line twice).\nTextMarker.prototype.find = function (side, lineObj) {\n var this$1 = this;\n\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n};\n\n// Signals that the marker's widget changed, and surrounding layout\n// should be recomputed.\nTextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n};\n\nTextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n};\n\nTextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n};\neventMixin(TextMarker);\n\n// Create a marker, wire it up to the right lines, and\nfunction markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null));\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n}\n\n// SHARED TEXTMARKERS\n\n// A shared marker spans multiple linked documents. It is\n// implemented as a meta-marker-object controlling multiple normal\n// markers.\nvar SharedTextMarker = function(markers, primary) {\n var this$1 = this;\n\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this$1; }\n};\n\nSharedTextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this$1.markers[i].clear(); }\n signalLater(this, \"clear\");\n};\n\nSharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n};\neventMixin(SharedTextMarker);\n\nfunction markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n}\n\nfunction findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n}\n\nfunction copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n}\n\nfunction detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n}\n\nvar nextDocId = 0;\nvar Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n};\n\nDoc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range$$1 = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range$$1.head; }\n else if (start == \"anchor\") { pos = range$$1.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range$$1.to(); }\n else { pos = range$$1.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n var this$1 = this;\n\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this$1, ranges[i].anchor),\n clipPos(this$1, ranges[i].head)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var this$1 = this;\n\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var this$1 = this;\n\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var this$1 = this;\n\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range$$1 = sel.ranges[i];\n changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this$1, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history.maxGeneration);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo$$1 = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||\n span.from == null && lineNo$$1 != from.line ||\n span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo$$1;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo$$1;\n });\n return clipPos(this, Pos(lineNo$$1, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n var this$1 = this;\n\n if (other instanceof CodeMirror$1) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this$1.linked[i];\n if (link.doc != other) { continue }\n this$1.linked.splice(i, 1);\n other.unlinkDoc(this$1);\n detachSharedMarkers(findSharedMarkers(this$1));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n});\n\n// Public alias.\nDoc.prototype.eachLine = Doc.prototype.iter;\n\n// Kludge to work around strange IE behavior where it'll sometimes\n// re-fire a series of drag-related events right after the drop (#1551)\nvar lastDrop = 0;\n\nfunction onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var loadFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1)\n { return }\n\n var reader = new FileReader;\n reader.onload = operation(cm, function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) { content = \"\"; }\n text[i] = content;\n if (++read == n) {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n }\n });\n reader.readAsText(file);\n };\n for (var i = 0; i < n; ++i) { loadFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e){}\n }\n}\n\nfunction onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n}\n\nfunction onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n}\n\nfunction clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n}\n\n// These must be handled carefully, because naively registering a\n// handler for each editor will cause the editors to never be\n// garbage collected.\n\nfunction forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\");\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { f(cm); }\n }\n}\n\nvar globalsRegistered = false;\nfunction ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n}\nfunction registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n}\n// Called when the window resizes\nfunction onResize(cm) {\n var d = cm.display;\n if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth)\n { return }\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n}\n\nvar keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 127: \"Delete\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n};\n\n// Number keys\nfor (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n// Alphabetic keys\nfor (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n// Function keys\nfor (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\nvar keyMap = {};\n\nkeyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n};\n// Note that the save and find-related commands aren't defined by\n// default. User code or addons can define them. Unknown commands\n// are simply ignored.\nkeyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n fallthrough: \"basic\"\n};\n// Very basic readline/emacs-style bindings, which are standard on Mac.\nkeyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n};\nkeyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n fallthrough: [\"basic\", \"emacsy\"]\n};\nkeyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n// KEYMAP DISPATCH\n\nfunction normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n}\n\n// This is a kludge to keep keymaps mostly working as raw objects\n// (backwards compatibility) while at the same time support features\n// like normalization and multi-stroke key bindings. It compiles a\n// new normalized keymap, and then updates the old object to reflect\n// this.\nfunction normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n}\n\nfunction lookupKey(key, map$$1, handle, context) {\n map$$1 = getKeyMap(map$$1);\n var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map$$1.fallthrough) {\n if (Object.prototype.toString.call(map$$1.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map$$1.fallthrough, handle, context) }\n for (var i = 0; i < map$$1.fallthrough.length; i++) {\n var result = lookupKey(key, map$$1.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n}\n\n// Modifier key presses don't count as 'real' key presses for the\n// purpose of keymap fallthrough.\nfunction isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n}\n\nfunction addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n}\n\n// Look up the name of a key as indicated by an event object.\nfunction keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n}\n\nfunction getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n}\n\n// Helper for deleting text near the selection(s), used to implement\n// backspace, delete, and similar functionality.\nfunction deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n}\n\nfunction moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n}\n\nfunction moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n}\n\nfunction endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n}\n\nfunction moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n}\n\n// Commands are parameter-less actions that can be performed on an\n// editor, mostly used for keybindings.\nvar commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"char\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n};\n\n\nfunction lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n}\nfunction lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n}\nfunction lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(0, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n}\n\n// Run a handler that was bound to a key.\nfunction doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n}\n\nfunction lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n}\n\n// Note that, despite the name, this function is also used to check\n// for bound mouse clicks.\n\nvar stopSeq = new Delayed;\n\nfunction dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n}\n\nfunction dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n}\n\n// Handle a key from the keydown event.\nfunction handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n}\n\n// Handle a key from the keypress event\nfunction handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n}\n\nvar lastStoppedKey = null;\nfunction onKeyDown(e) {\n var cm = this;\n cm.curOp.focus = activeElt();\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n}\n\nfunction showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n}\n\nfunction onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n}\n\nfunction onKeyPress(e) {\n var cm = this;\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n}\n\nvar DOUBLECLICK_DELAY = 400;\n\nvar PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n};\n\nPastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n};\n\nvar lastClick;\nvar lastDoubleClick;\nfunction clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n}\n\n// A mouse down can be a single click, double click, triple click,\n// start of selection drag, start of text drag, new cursor\n// (ctrl-click), rectangle drag (alt-drag), or xwin\n// middle-click-paste. Or it might be a click on something we should\n// not interfere with, such as a scrollbar or widget.\nfunction onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { onContextMenu(cm, e); }\n else { delayBlurEvent(cm); }\n }\n}\n\nfunction handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n}\n\nfunction configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n}\n\nfunction leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n}\n\n// Start a text drag. When it ends, see if any dragging actually\n// happen, and treat as a click if it didn't.\nfunction leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n off(document, \"mouseup\", dragEnd);\n off(document, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if (webkit || ie && ie_version == 9)\n { setTimeout(function () {document.body.focus(); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n on(document, \"mouseup\", dragEnd);\n on(document, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n delayBlurEvent(cm);\n setTimeout(function () { return display.input.focus(); }, 20);\n}\n\nfunction rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n}\n\n// Normal selection, as opposed to text dragging.\nfunction leftButtonSelect(cm, event, start, behavior) {\n var display = cm.display, doc = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range$$1 = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }\n else\n { ourRange = range$$1; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range$$1 = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range$$1.anchor, anchor) > 0) {\n head = range$$1.head;\n anchor = minPos(oldRange.from(), range$$1.anchor);\n } else {\n head = range$$1.anchor;\n anchor = maxPos(oldRange.to(), range$$1.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n e_preventDefault(e);\n display.input.focus();\n off(document, \"mousemove\", move);\n off(document, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (!e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(document, \"mousemove\", move);\n on(document, \"mouseup\", up);\n}\n\n// Used when mouse-selecting to adjust the anchor to the proper side\n// of a bidi jump depending on the visual position of the head.\nfunction bidiSimplify(cm, range$$1) {\n var anchor = range$$1.anchor;\n var head = range$$1.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }\n var order = getOrder(anchorLine);\n if (!order) { return range$$1 }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range$$1 }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)\n}\n\n\n// Determines whether an event happened in the gutter, and fires the\n// handlers for the corresponding event.\nfunction gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.options.gutters.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.options.gutters[i];\n signal(cm, type, cm, line, gutter, e);\n return e_defaultPrevented(e)\n }\n }\n}\n\nfunction clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n}\n\n// CONTEXT MENU HANDLING\n\n// To make the context menu work, we need to briefly unhide the\n// textarea (making it as unobtrusive as possible) to let the\n// right-click take effect on it.\nfunction onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n cm.display.input.onContextMenu(e);\n}\n\nfunction contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n}\n\nfunction themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n}\n\nvar Init = {toString: function(){return \"CodeMirror.Init\"}};\n\nvar defaults = {};\nvar optionHandlers = {};\n\nfunction defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n guttersChanged(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"firstLineNumber\", 1, guttersChanged, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, guttersChanged, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n}\n\nfunction guttersChanged(cm) {\n updateGutters(cm);\n regChange(cm);\n alignHorizontally(cm);\n}\n\nfunction dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n}\n\nfunction wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n}\n\n// A CodeMirror instance represents an editor. This is the object\n// that user code is usually dealing with.\n\nfunction CodeMirror$1(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror$1)) { return new CodeMirror$1(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n setGuttersForLineNumbers(options);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n this.doc = doc;\n\n var input = new CodeMirror$1.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input);\n display.wrapper.CodeMirror = this;\n updateGutters(this);\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(bind(onFocus, this), 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this$1, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n}\n\n// The default configuration options.\nCodeMirror$1.defaults = defaults;\n// Functions to run when options are changed.\nCodeMirror$1.optionHandlers = optionHandlers;\n\n// Attach the necessary event handlers when initializing the editor\nfunction registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n if (!captureRightClick) { on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); }); }\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n}\n\nvar initHooks = [];\nCodeMirror$1.defineInitHook = function (f) { return initHooks.push(f); };\n\n// Indent the given line. The how parameter can be \"smart\",\n// \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n// (typically set to true for forced single-line indents), empty\n// lines are not indented, and places where the mode returns Pass\n// are left alone.\nfunction indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n}\n\n// This will be set to a {lineWise: bool, text: [string]} object, so\n// that, when pasting, we know what kind of selections the copied\n// text was made out of.\nvar lastCopied = null;\n\nfunction setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n}\n\nfunction applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var paste = cm.state.pasteIncoming || origin == \"paste\";\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range$$1 = sel.ranges[i$1];\n var from = range$$1.from(), to = range$$1.to();\n if (range$$1.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted)\n { from = to = Pos(from.line, 0); }\n }\n updateInput = cm.curOp.updateInput;\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n cm.curOp.updateInput = updateInput;\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = false;\n}\n\nfunction handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput)\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n}\n\nfunction triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range$$1 = sel.ranges[i];\n if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }\n var mode = cm.getModeAt(range$$1.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range$$1.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))\n { indented = indentLine(cm, range$$1.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range$$1.head.line); }\n }\n}\n\nfunction copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n}\n\nfunction disableBrowserMagic(field, spellcheck) {\n field.setAttribute(\"autocorrect\", \"off\");\n field.setAttribute(\"autocapitalize\", \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n}\n\nfunction hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n disableBrowserMagic(te);\n return div\n}\n\n// The publicly visible API. Note that methodOp(f) means\n// 'wrap f in an operation, performed on its `this` parameter'.\n\n// This is not the complete set of editor methods. Most of the\n// methods defined on the Doc type are also injected into\n// CodeMirror.prototype, for backwards compatibility and\n// convenience.\n\nvar addEditorMethods = function(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){window.focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map$$1, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map$$1));\n },\n removeKeyMap: function(map$$1) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map$$1 || maps[i].name == map$$1) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var this$1 = this;\n\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this$1.state.modeGen++;\n regChange(this$1);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var this$1 = this;\n\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range$$1 = ranges[i];\n if (!range$$1.empty()) {\n var from = range$$1.from(), to = range$$1.to();\n var start = Math.max(end, from.line);\n end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this$1, j, how); }\n var newRanges = this$1.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range$$1.head.line > end) {\n indentLine(this$1, range$$1.head.line, how, true);\n end = range$$1.head.line;\n if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var this$1 = this;\n\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range$$1 = this.doc.sel.primary();\n if (start == null) { pos = range$$1.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range$$1.from() : range$$1.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var this$1 = this;\n\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this$1.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range$$1) {\n if (this$1.display.shift || this$1.doc.extend || range$$1.empty())\n { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range$$1) {\n var other = findPosH(doc, range$$1.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var this$1 = this;\n\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this$1, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this$1, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range$$1) {\n if (collapse)\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n var headPos = cursorCoords(this$1, range$$1.head, \"div\");\n if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range$$1 == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt() },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range$$1, margin) {\n if (range$$1 == null) {\n range$$1 = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range$$1 == \"number\") {\n range$$1 = {from: Pos(range$$1, 0), to: null};\n } else if (range$$1.from == null) {\n range$$1 = {from: range$$1, to: null};\n }\n if (!range$$1.to) { range$$1.to = range$$1.from; }\n range$$1.margin = margin || 0;\n\n if (range$$1.from.line != null) {\n scrollToRange(this, range$$1);\n } else {\n scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo$$1 = this.display.viewFrom;\n this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, \"widget\"); break } } }\n ++lineNo$$1;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n};\n\n// Used for horizontal relative motion. Dir is -1 or 1 (left or\n// right), unit can be \"char\", \"column\" (like char, but doesn't\n// cross line boundaries), \"word\" (across next word), or \"group\" (to\n// the start of next group of word or non-word-non-whitespace\n// chars). The visually param controls whether, in right-to-left\n// text, direction 1 means to move towards the next index in the\n// string, or towards the character to the right of the current\n// position. The resulting position will have a hitSide=true\n// property if it reached the end of the document.\nfunction findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n function findNextLine() {\n var l = pos.line + dir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n}\n\n// For relative vertical movement. Dir may be -1 or 1. Unit can be\n// \"page\" or \"line\". The resulting position will have a hitSide=true\n// property if it reached the end of the document.\nfunction findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n}\n\n// CONTENTEDITABLE INPUT STYLE\n\nvar ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n};\n\nContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n disableBrowserMagic(div, cm.options.spellcheck);\n\n on(div, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = document.activeElement;\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n};\n\nContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = this.cm.state.focused;\n return result\n};\n\nContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n};\n\nContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = window.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n};\n\nContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n};\n\nContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n};\n\nContentEditableInput.prototype.rememberSelection = function () {\n var sel = window.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n};\n\nContentEditableInput.prototype.selectionInEditor = function () {\n var sel = window.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n};\n\nContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor())\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n};\nContentEditableInput.prototype.blur = function () { this.div.blur(); };\nContentEditableInput.prototype.getField = function () { return this.div };\n\nContentEditableInput.prototype.supportsTouch = function () { return true };\n\nContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n if (this.selectionInEditor())\n { this.pollSelection(); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n};\n\nContentEditableInput.prototype.selectionChanged = function () {\n var sel = window.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n};\n\nContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = window.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n};\n\nContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n};\n\nContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n};\nContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n};\nContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n};\nContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n};\n\nContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n};\n\nContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n};\n\nContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n};\n\nContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n};\n\nContentEditableInput.prototype.onContextMenu = function () {};\nContentEditableInput.prototype.resetPosition = function () {};\n\nContentEditableInput.prototype.needsContentAttribute = true;\n\nfunction posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n}\n\nfunction isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n}\n\nfunction badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\nfunction domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator();\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n closing = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText != null) {\n addText(cmText || node.textContent.replace(/\\u200b/g, \"\"));\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range$$1;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range$$1 = found[0].find(0)))\n { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p)$/i.test(node.nodeName);\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue);\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n }\n return text\n}\n\nfunction domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n}\n\nfunction locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map$$1 = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map$$1.length; j += 3) {\n var curNode = map$$1[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map$$1[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n}\n\n// TEXTAREA INPUT STYLE\n\nvar TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n};\n\nTextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n\n // Wraps and hides input textarea\n var div = this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n var te = this.textarea = div.firstChild;\n display.wrapper.insertBefore(div, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = true;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = true; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n cm.state.pasteIncoming = true;\n input.focus();\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n};\n\nTextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n};\n\nTextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n};\n\n// Reset the input to correspond to the selection (or to be empty,\n// when not typing and nothing is selected)\nTextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) { return }\n var cm = this.cm;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n};\n\nTextareaInput.prototype.getField = function () { return this.textarea };\n\nTextareaInput.prototype.supportsTouch = function () { return false };\n\nTextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n};\n\nTextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\nTextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n};\n\nTextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n// Poll for input changes, using the normal rate of polling. This\n// runs as long as the editor is focused.\nTextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n};\n\n// When an event has just come in that is likely to add or change\n// something in the input textarea, we poll faster, to ensure that\n// the change appears on the screen quickly.\nTextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n};\n\n// Read input from the textarea, and update the document to match.\n// When something is selected, it is present in the textarea, and\n// selected (unless it is huge, in which case a placeholder is\n// used). When nothing is selected, the cursor sits after previously\n// seen text (can be empty), which is stored in prevInput (we must\n// not reset the textarea when typing, because that breaks IME).\nTextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n};\n\nTextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n};\n\nTextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n};\n\nTextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n input.wrapper.style.cssText = \"position: absolute\";\n var wrapperBox = input.wrapper.getBoundingClientRect();\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { window.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = true;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n};\n\nTextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n};\n\nTextareaInput.prototype.setUneditable = function () {};\n\nTextareaInput.prototype.needsContentAttribute = false;\n\nfunction fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror$1(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n}\n\nfunction addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n}\n\n// EDITOR CONSTRUCTOR\n\ndefineOptions(CodeMirror$1);\n\naddEditorMethods(CodeMirror$1);\n\n// Set up methods on CodeMirror's prototype to redirect to the editor's document.\nvar dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\nfor (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror$1.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\neventMixin(Doc);\n\n// INPUT HANDLING\n\nCodeMirror$1.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n// MODE DEFINITION AND QUERYING\n\n// Extra arguments are stored as the mode's dependencies, which is\n// used by (legacy) mechanisms like loadmode.js to automatically\n// load a mode. (Preferred mechanism is the require/define calls.)\nCodeMirror$1.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror$1.defaults.mode && name != \"null\") { CodeMirror$1.defaults.mode = name; }\n defineMode.apply(this, arguments);\n};\n\nCodeMirror$1.defineMIME = defineMIME;\n\n// Minimal default mode.\nCodeMirror$1.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\nCodeMirror$1.defineMIME(\"text/plain\", \"null\");\n\n// EXTENSIONS\n\nCodeMirror$1.defineExtension = function (name, func) {\n CodeMirror$1.prototype[name] = func;\n};\nCodeMirror$1.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n};\n\nCodeMirror$1.fromTextArea = fromTextArea;\n\naddLegacyProps(CodeMirror$1);\n\nCodeMirror$1.version = \"5.34.0\";\n\nreturn CodeMirror$1;\n\n})));\n\n},{}],15:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"css\", function(config, parserConfig) {\n var inline = parserConfig.inline\n if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode(\"text/css\");\n\n var indentUnit = config.indentUnit,\n tokenHooks = parserConfig.tokenHooks,\n documentTypes = parserConfig.documentTypes || {},\n mediaTypes = parserConfig.mediaTypes || {},\n mediaFeatures = parserConfig.mediaFeatures || {},\n mediaValueKeywords = parserConfig.mediaValueKeywords || {},\n propertyKeywords = parserConfig.propertyKeywords || {},\n nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},\n fontProperties = parserConfig.fontProperties || {},\n counterDescriptors = parserConfig.counterDescriptors || {},\n colorKeywords = parserConfig.colorKeywords || {},\n valueKeywords = parserConfig.valueKeywords || {},\n allowNested = parserConfig.allowNested,\n lineComment = parserConfig.lineComment,\n supportsAtComponent = parserConfig.supportsAtComponent === true;\n\n var type, override;\n function ret(style, tp) { type = tp; return style; }\n\n // Tokenizers\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (tokenHooks[ch]) {\n var result = tokenHooks[ch](stream, state);\n if (result !== false) return result;\n }\n if (ch == \"@\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"def\", stream.current());\n } else if (ch == \"=\" || (ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) {\n return ret(null, \"compare\");\n } else if (ch == \"\\\"\" || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \"#\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"atom\", \"hash\");\n } else if (ch == \"!\") {\n stream.match(/^\\s*\\w*/);\n return ret(\"keyword\", \"important\");\n } else if (/\\d/.test(ch) || ch == \".\" && stream.eat(/\\d/)) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (ch === \"-\") {\n if (/[\\d.]/.test(stream.peek())) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (stream.match(/^-[\\w\\\\\\-]+/)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false))\n return ret(\"variable-2\", \"variable-definition\");\n return ret(\"variable-2\", \"variable\");\n } else if (stream.match(/^\\w+-/)) {\n return ret(\"meta\", \"meta\");\n }\n } else if (/[,+>*\\/]/.test(ch)) {\n return ret(null, \"select-op\");\n } else if (ch == \".\" && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {\n return ret(\"qualifier\", \"qualifier\");\n } else if (/[:;{}\\[\\]\\(\\)]/.test(ch)) {\n return ret(null, ch);\n } else if (((ch == \"u\" || ch == \"U\") && stream.match(/rl(-prefix)?\\(/i)) ||\n ((ch == \"d\" || ch == \"D\") && stream.match(\"omain(\", true, true)) ||\n ((ch == \"r\" || ch == \"R\") && stream.match(\"egexp(\", true, true))) {\n stream.backUp(1);\n state.tokenize = tokenParenthesized;\n return ret(\"property\", \"word\");\n } else if (/[\\w\\\\\\-]/.test(ch)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"property\", \"word\");\n } else {\n return ret(null, null);\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, ch;\n while ((ch = stream.next()) != null) {\n if (ch == quote && !escaped) {\n if (quote == \")\") stream.backUp(1);\n break;\n }\n escaped = !escaped && ch == \"\\\\\";\n }\n if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenParenthesized(stream, state) {\n stream.next(); // Must be '('\n if (!stream.match(/\\s*[\\\"\\')]/, false))\n state.tokenize = tokenString(\")\");\n else\n state.tokenize = null;\n return ret(null, \"(\");\n }\n\n // Context management\n\n function Context(type, indent, prev) {\n this.type = type;\n this.indent = indent;\n this.prev = prev;\n }\n\n function pushContext(state, stream, type, indent) {\n state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);\n return type;\n }\n\n function popContext(state) {\n if (state.context.prev)\n state.context = state.context.prev;\n return state.context.type;\n }\n\n function pass(type, stream, state) {\n return states[state.context.type](type, stream, state);\n }\n function popAndPass(type, stream, state, n) {\n for (var i = n || 1; i > 0; i--)\n state.context = state.context.prev;\n return pass(type, stream, state);\n }\n\n // Parser\n\n function wordAsValue(stream) {\n var word = stream.current().toLowerCase();\n if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"variable\";\n }\n\n var states = {};\n\n states.top = function(type, stream, state) {\n if (type == \"{\") {\n return pushContext(state, stream, \"block\");\n } else if (type == \"}\" && state.context.prev) {\n return popContext(state);\n } else if (supportsAtComponent && /@component/i.test(type)) {\n return pushContext(state, stream, \"atComponentBlock\");\n } else if (/^@(-moz-)?document$/i.test(type)) {\n return pushContext(state, stream, \"documentTypes\");\n } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {\n return pushContext(state, stream, \"atBlock\");\n } else if (/^@(font-face|counter-style)/i.test(type)) {\n state.stateArg = type;\n return \"restricted_atBlock_before\";\n } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {\n return \"keyframes\";\n } else if (type && type.charAt(0) == \"@\") {\n return pushContext(state, stream, \"at\");\n } else if (type == \"hash\") {\n override = \"builtin\";\n } else if (type == \"word\") {\n override = \"tag\";\n } else if (type == \"variable-definition\") {\n return \"maybeprop\";\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n } else if (type == \":\") {\n return \"pseudo\";\n } else if (allowNested && type == \"(\") {\n return pushContext(state, stream, \"parens\");\n }\n return state.context.type;\n };\n\n states.block = function(type, stream, state) {\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (propertyKeywords.hasOwnProperty(word)) {\n override = \"property\";\n return \"maybeprop\";\n } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {\n override = \"string-2\";\n return \"maybeprop\";\n } else if (allowNested) {\n override = stream.match(/^\\s*:(?:\\s|$)/, false) ? \"property\" : \"tag\";\n return \"block\";\n } else {\n override += \" error\";\n return \"maybeprop\";\n }\n } else if (type == \"meta\") {\n return \"block\";\n } else if (!allowNested && (type == \"hash\" || type == \"qualifier\")) {\n override = \"error\";\n return \"block\";\n } else {\n return states.top(type, stream, state);\n }\n };\n\n states.maybeprop = function(type, stream, state) {\n if (type == \":\") return pushContext(state, stream, \"prop\");\n return pass(type, stream, state);\n };\n\n states.prop = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" && allowNested) return pushContext(state, stream, \"propBlock\");\n if (type == \"}\" || type == \"{\") return popAndPass(type, stream, state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n\n if (type == \"hash\" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) {\n override += \" error\";\n } else if (type == \"word\") {\n wordAsValue(stream);\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n }\n return \"prop\";\n };\n\n states.propBlock = function(type, _stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"word\") { override = \"property\"; return \"maybeprop\"; }\n return state.context.type;\n };\n\n states.parens = function(type, stream, state) {\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \")\") return popContext(state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n if (type == \"word\") wordAsValue(stream);\n return \"parens\";\n };\n\n states.pseudo = function(type, stream, state) {\n if (type == \"meta\") return \"pseudo\";\n\n if (type == \"word\") {\n override = \"variable-3\";\n return state.context.type;\n }\n return pass(type, stream, state);\n };\n\n states.documentTypes = function(type, stream, state) {\n if (type == \"word\" && documentTypes.hasOwnProperty(stream.current())) {\n override = \"tag\";\n return state.context.type;\n } else {\n return states.atBlock(type, stream, state);\n }\n };\n\n states.atBlock = function(type, stream, state) {\n if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n if (type == \"}\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"{\") return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\");\n\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (word == \"only\" || word == \"not\" || word == \"and\" || word == \"or\")\n override = \"keyword\";\n else if (mediaTypes.hasOwnProperty(word))\n override = \"attribute\";\n else if (mediaFeatures.hasOwnProperty(word))\n override = \"property\";\n else if (mediaValueKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else if (propertyKeywords.hasOwnProperty(word))\n override = \"property\";\n else if (nonStandardPropertyKeywords.hasOwnProperty(word))\n override = \"string-2\";\n else if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"error\";\n }\n return state.context.type;\n };\n\n states.atComponentBlock = function(type, stream, state) {\n if (type == \"}\")\n return popAndPass(type, stream, state);\n if (type == \"{\")\n return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\", false);\n if (type == \"word\")\n override = \"error\";\n return state.context.type;\n };\n\n states.atBlock_parens = function(type, stream, state) {\n if (type == \")\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state, 2);\n return states.atBlock(type, stream, state);\n };\n\n states.restricted_atBlock_before = function(type, stream, state) {\n if (type == \"{\")\n return pushContext(state, stream, \"restricted_atBlock\");\n if (type == \"word\" && state.stateArg == \"@counter-style\") {\n override = \"variable\";\n return \"restricted_atBlock_before\";\n }\n return pass(type, stream, state);\n };\n\n states.restricted_atBlock = function(type, stream, state) {\n if (type == \"}\") {\n state.stateArg = null;\n return popContext(state);\n }\n if (type == \"word\") {\n if ((state.stateArg == \"@font-face\" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||\n (state.stateArg == \"@counter-style\" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))\n override = \"error\";\n else\n override = \"property\";\n return \"maybeprop\";\n }\n return \"restricted_atBlock\";\n };\n\n states.keyframes = function(type, stream, state) {\n if (type == \"word\") { override = \"variable\"; return \"keyframes\"; }\n if (type == \"{\") return pushContext(state, stream, \"top\");\n return pass(type, stream, state);\n };\n\n states.at = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"tag\";\n else if (type == \"hash\") override = \"builtin\";\n return \"at\";\n };\n\n states.interpolation = function(type, stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"{\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"variable\";\n else if (type != \"variable\" && type != \"(\" && type != \")\") override = \"error\";\n return \"interpolation\";\n };\n\n return {\n startState: function(base) {\n return {tokenize: null,\n state: inline ? \"block\" : \"top\",\n stateArg: null,\n context: new Context(inline ? \"block\" : \"top\", base || 0, null)};\n },\n\n token: function(stream, state) {\n if (!state.tokenize && stream.eatSpace()) return null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style && typeof style == \"object\") {\n type = style[1];\n style = style[0];\n }\n override = style;\n if (type != \"comment\")\n state.state = states[state.state](type, stream, state);\n return override;\n },\n\n indent: function(state, textAfter) {\n var cx = state.context, ch = textAfter && textAfter.charAt(0);\n var indent = cx.indent;\n if (cx.type == \"prop\" && (ch == \"}\" || ch == \")\")) cx = cx.prev;\n if (cx.prev) {\n if (ch == \"}\" && (cx.type == \"block\" || cx.type == \"top\" ||\n cx.type == \"interpolation\" || cx.type == \"restricted_atBlock\")) {\n // Resume indentation from parent context.\n cx = cx.prev;\n indent = cx.indent;\n } else if (ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") ||\n ch == \"{\" && (cx.type == \"at\" || cx.type == \"atBlock\")) {\n // Dedent relative to current context.\n indent = Math.max(0, cx.indent - indentUnit);\n }\n }\n return indent;\n },\n\n electricChars: \"}\",\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n blockCommentContinue: \" * \",\n lineComment: lineComment,\n fold: \"brace\"\n };\n});\n\n function keySet(array) {\n var keys = {};\n for (var i = 0; i < array.length; ++i) {\n keys[array[i].toLowerCase()] = true;\n }\n return keys;\n }\n\n var documentTypes_ = [\n \"domain\", \"regexp\", \"url\", \"url-prefix\"\n ], documentTypes = keySet(documentTypes_);\n\n var mediaTypes_ = [\n \"all\", \"aural\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\",\n \"tty\", \"tv\", \"embossed\"\n ], mediaTypes = keySet(mediaTypes_);\n\n var mediaFeatures_ = [\n \"width\", \"min-width\", \"max-width\", \"height\", \"min-height\", \"max-height\",\n \"device-width\", \"min-device-width\", \"max-device-width\", \"device-height\",\n \"min-device-height\", \"max-device-height\", \"aspect-ratio\",\n \"min-aspect-ratio\", \"max-aspect-ratio\", \"device-aspect-ratio\",\n \"min-device-aspect-ratio\", \"max-device-aspect-ratio\", \"color\", \"min-color\",\n \"max-color\", \"color-index\", \"min-color-index\", \"max-color-index\",\n \"monochrome\", \"min-monochrome\", \"max-monochrome\", \"resolution\",\n \"min-resolution\", \"max-resolution\", \"scan\", \"grid\", \"orientation\",\n \"device-pixel-ratio\", \"min-device-pixel-ratio\", \"max-device-pixel-ratio\",\n \"pointer\", \"any-pointer\", \"hover\", \"any-hover\"\n ], mediaFeatures = keySet(mediaFeatures_);\n\n var mediaValueKeywords_ = [\n \"landscape\", \"portrait\", \"none\", \"coarse\", \"fine\", \"on-demand\", \"hover\",\n \"interlace\", \"progressive\"\n ], mediaValueKeywords = keySet(mediaValueKeywords_);\n\n var propertyKeywords_ = [\n \"align-content\", \"align-items\", \"align-self\", \"alignment-adjust\",\n \"alignment-baseline\", \"anchor-point\", \"animation\", \"animation-delay\",\n \"animation-direction\", \"animation-duration\", \"animation-fill-mode\",\n \"animation-iteration-count\", \"animation-name\", \"animation-play-state\",\n \"animation-timing-function\", \"appearance\", \"azimuth\", \"backface-visibility\",\n \"background\", \"background-attachment\", \"background-blend-mode\", \"background-clip\",\n \"background-color\", \"background-image\", \"background-origin\", \"background-position\",\n \"background-repeat\", \"background-size\", \"baseline-shift\", \"binding\",\n \"bleed\", \"bookmark-label\", \"bookmark-level\", \"bookmark-state\",\n \"bookmark-target\", \"border\", \"border-bottom\", \"border-bottom-color\",\n \"border-bottom-left-radius\", \"border-bottom-right-radius\",\n \"border-bottom-style\", \"border-bottom-width\", \"border-collapse\",\n \"border-color\", \"border-image\", \"border-image-outset\",\n \"border-image-repeat\", \"border-image-slice\", \"border-image-source\",\n \"border-image-width\", \"border-left\", \"border-left-color\",\n \"border-left-style\", \"border-left-width\", \"border-radius\", \"border-right\",\n \"border-right-color\", \"border-right-style\", \"border-right-width\",\n \"border-spacing\", \"border-style\", \"border-top\", \"border-top-color\",\n \"border-top-left-radius\", \"border-top-right-radius\", \"border-top-style\",\n \"border-top-width\", \"border-width\", \"bottom\", \"box-decoration-break\",\n \"box-shadow\", \"box-sizing\", \"break-after\", \"break-before\", \"break-inside\",\n \"caption-side\", \"caret-color\", \"clear\", \"clip\", \"color\", \"color-profile\", \"column-count\",\n \"column-fill\", \"column-gap\", \"column-rule\", \"column-rule-color\",\n \"column-rule-style\", \"column-rule-width\", \"column-span\", \"column-width\",\n \"columns\", \"content\", \"counter-increment\", \"counter-reset\", \"crop\", \"cue\",\n \"cue-after\", \"cue-before\", \"cursor\", \"direction\", \"display\",\n \"dominant-baseline\", \"drop-initial-after-adjust\",\n \"drop-initial-after-align\", \"drop-initial-before-adjust\",\n \"drop-initial-before-align\", \"drop-initial-size\", \"drop-initial-value\",\n \"elevation\", \"empty-cells\", \"fit\", \"fit-position\", \"flex\", \"flex-basis\",\n \"flex-direction\", \"flex-flow\", \"flex-grow\", \"flex-shrink\", \"flex-wrap\",\n \"float\", \"float-offset\", \"flow-from\", \"flow-into\", \"font\", \"font-feature-settings\",\n \"font-family\", \"font-kerning\", \"font-language-override\", \"font-size\", \"font-size-adjust\",\n \"font-stretch\", \"font-style\", \"font-synthesis\", \"font-variant\",\n \"font-variant-alternates\", \"font-variant-caps\", \"font-variant-east-asian\",\n \"font-variant-ligatures\", \"font-variant-numeric\", \"font-variant-position\",\n \"font-weight\", \"grid\", \"grid-area\", \"grid-auto-columns\", \"grid-auto-flow\",\n \"grid-auto-rows\", \"grid-column\", \"grid-column-end\", \"grid-column-gap\",\n \"grid-column-start\", \"grid-gap\", \"grid-row\", \"grid-row-end\", \"grid-row-gap\",\n \"grid-row-start\", \"grid-template\", \"grid-template-areas\", \"grid-template-columns\",\n \"grid-template-rows\", \"hanging-punctuation\", \"height\", \"hyphens\",\n \"icon\", \"image-orientation\", \"image-rendering\", \"image-resolution\",\n \"inline-box-align\", \"justify-content\", \"justify-items\", \"justify-self\", \"left\", \"letter-spacing\",\n \"line-break\", \"line-height\", \"line-stacking\", \"line-stacking-ruby\",\n \"line-stacking-shift\", \"line-stacking-strategy\", \"list-style\",\n \"list-style-image\", \"list-style-position\", \"list-style-type\", \"margin\",\n \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\",\n \"marks\", \"marquee-direction\", \"marquee-loop\",\n \"marquee-play-count\", \"marquee-speed\", \"marquee-style\", \"max-height\",\n \"max-width\", \"min-height\", \"min-width\", \"move-to\", \"nav-down\", \"nav-index\",\n \"nav-left\", \"nav-right\", \"nav-up\", \"object-fit\", \"object-position\",\n \"opacity\", \"order\", \"orphans\", \"outline\",\n \"outline-color\", \"outline-offset\", \"outline-style\", \"outline-width\",\n \"overflow\", \"overflow-style\", \"overflow-wrap\", \"overflow-x\", \"overflow-y\",\n \"padding\", \"padding-bottom\", \"padding-left\", \"padding-right\", \"padding-top\",\n \"page\", \"page-break-after\", \"page-break-before\", \"page-break-inside\",\n \"page-policy\", \"pause\", \"pause-after\", \"pause-before\", \"perspective\",\n \"perspective-origin\", \"pitch\", \"pitch-range\", \"place-content\", \"place-items\", \"place-self\", \"play-during\", \"position\",\n \"presentation-level\", \"punctuation-trim\", \"quotes\", \"region-break-after\",\n \"region-break-before\", \"region-break-inside\", \"region-fragment\",\n \"rendering-intent\", \"resize\", \"rest\", \"rest-after\", \"rest-before\", \"richness\",\n \"right\", \"rotation\", \"rotation-point\", \"ruby-align\", \"ruby-overhang\",\n \"ruby-position\", \"ruby-span\", \"shape-image-threshold\", \"shape-inside\", \"shape-margin\",\n \"shape-outside\", \"size\", \"speak\", \"speak-as\", \"speak-header\",\n \"speak-numeral\", \"speak-punctuation\", \"speech-rate\", \"stress\", \"string-set\",\n \"tab-size\", \"table-layout\", \"target\", \"target-name\", \"target-new\",\n \"target-position\", \"text-align\", \"text-align-last\", \"text-decoration\",\n \"text-decoration-color\", \"text-decoration-line\", \"text-decoration-skip\",\n \"text-decoration-style\", \"text-emphasis\", \"text-emphasis-color\",\n \"text-emphasis-position\", \"text-emphasis-style\", \"text-height\",\n \"text-indent\", \"text-justify\", \"text-outline\", \"text-overflow\", \"text-shadow\",\n \"text-size-adjust\", \"text-space-collapse\", \"text-transform\", \"text-underline-position\",\n \"text-wrap\", \"top\", \"transform\", \"transform-origin\", \"transform-style\",\n \"transition\", \"transition-delay\", \"transition-duration\",\n \"transition-property\", \"transition-timing-function\", \"unicode-bidi\",\n \"user-select\", \"vertical-align\", \"visibility\", \"voice-balance\", \"voice-duration\",\n \"voice-family\", \"voice-pitch\", \"voice-range\", \"voice-rate\", \"voice-stress\",\n \"voice-volume\", \"volume\", \"white-space\", \"widows\", \"width\", \"will-change\", \"word-break\",\n \"word-spacing\", \"word-wrap\", \"z-index\",\n // SVG-specific\n \"clip-path\", \"clip-rule\", \"mask\", \"enable-background\", \"filter\", \"flood-color\",\n \"flood-opacity\", \"lighting-color\", \"stop-color\", \"stop-opacity\", \"pointer-events\",\n \"color-interpolation\", \"color-interpolation-filters\",\n \"color-rendering\", \"fill\", \"fill-opacity\", \"fill-rule\", \"image-rendering\",\n \"marker\", \"marker-end\", \"marker-mid\", \"marker-start\", \"shape-rendering\", \"stroke\",\n \"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-linecap\", \"stroke-linejoin\",\n \"stroke-miterlimit\", \"stroke-opacity\", \"stroke-width\", \"text-rendering\",\n \"baseline-shift\", \"dominant-baseline\", \"glyph-orientation-horizontal\",\n \"glyph-orientation-vertical\", \"text-anchor\", \"writing-mode\"\n ], propertyKeywords = keySet(propertyKeywords_);\n\n var nonStandardPropertyKeywords_ = [\n \"scrollbar-arrow-color\", \"scrollbar-base-color\", \"scrollbar-dark-shadow-color\",\n \"scrollbar-face-color\", \"scrollbar-highlight-color\", \"scrollbar-shadow-color\",\n \"scrollbar-3d-light-color\", \"scrollbar-track-color\", \"shape-inside\",\n \"searchfield-cancel-button\", \"searchfield-decoration\", \"searchfield-results-button\",\n \"searchfield-results-decoration\", \"zoom\"\n ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);\n\n var fontProperties_ = [\n \"font-family\", \"src\", \"unicode-range\", \"font-variant\", \"font-feature-settings\",\n \"font-stretch\", \"font-weight\", \"font-style\"\n ], fontProperties = keySet(fontProperties_);\n\n var counterDescriptors_ = [\n \"additive-symbols\", \"fallback\", \"negative\", \"pad\", \"prefix\", \"range\",\n \"speak-as\", \"suffix\", \"symbols\", \"system\"\n ], counterDescriptors = keySet(counterDescriptors_);\n\n var colorKeywords_ = [\n \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n \"whitesmoke\", \"yellow\", \"yellowgreen\"\n ], colorKeywords = keySet(colorKeywords_);\n\n var valueKeywords_ = [\n \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"afar\",\n \"after-white-space\", \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\",\n \"always\", \"amharic\", \"amharic-abegede\", \"antialiased\", \"appworkspace\",\n \"arabic-indic\", \"armenian\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\", \"avoid-page\",\n \"avoid-region\", \"background\", \"backwards\", \"baseline\", \"below\", \"bidi-override\", \"binary\",\n \"bengali\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"cambodian\",\n \"capitalize\", \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\",\n \"cell\", \"center\", \"checkbox\", \"circle\", \"cjk-decimal\", \"cjk-earthly-branch\",\n \"cjk-heavenly-stem\", \"cjk-ideographic\", \"clear\", \"clip\", \"close-quote\",\n \"col-resize\", \"collapse\", \"color\", \"color-burn\", \"color-dodge\", \"column\", \"column-reverse\",\n \"compact\", \"condensed\", \"contain\", \"content\", \"contents\",\n \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\", \"crop\",\n \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\",\n \"destination-in\", \"destination-out\", \"destination-over\", \"devanagari\", \"difference\",\n \"disc\", \"discard\", \"disclosure-closed\", \"disclosure-open\", \"document\",\n \"dot-dash\", \"dot-dot-dash\",\n \"dotted\", \"double\", \"down\", \"e-resize\", \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\",\n \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\", \"ethiopic\", \"ethiopic-abegede\",\n \"ethiopic-abegede-am-et\", \"ethiopic-abegede-gez\", \"ethiopic-abegede-ti-er\",\n \"ethiopic-abegede-ti-et\", \"ethiopic-halehame-aa-er\",\n \"ethiopic-halehame-aa-et\", \"ethiopic-halehame-am-et\",\n \"ethiopic-halehame-gez\", \"ethiopic-halehame-om-et\",\n \"ethiopic-halehame-sid-et\", \"ethiopic-halehame-so-et\",\n \"ethiopic-halehame-ti-er\", \"ethiopic-halehame-ti-et\", \"ethiopic-halehame-tig\",\n \"ethiopic-numeric\", \"ew-resize\", \"exclusion\", \"expanded\", \"extends\", \"extra-condensed\",\n \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\",\n \"forwards\", \"from\", \"geometricPrecision\", \"georgian\", \"graytext\", \"grid\", \"groove\",\n \"gujarati\", \"gurmukhi\", \"hand\", \"hangul\", \"hangul-consonant\", \"hard-light\", \"hebrew\",\n \"help\", \"hidden\", \"hide\", \"higher\", \"highlight\", \"highlighttext\",\n \"hiragana\", \"hiragana-iroha\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\",\n \"infobackground\", \"infotext\", \"inherit\", \"initial\", \"inline\", \"inline-axis\",\n \"inline-block\", \"inline-flex\", \"inline-grid\", \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\",\n \"italic\", \"japanese-formal\", \"japanese-informal\", \"justify\", \"kannada\",\n \"katakana\", \"katakana-iroha\", \"keep-all\", \"khmer\",\n \"korean-hangul-formal\", \"korean-hanja-formal\", \"korean-hanja-informal\",\n \"landscape\", \"lao\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\",\n \"line-through\", \"linear\", \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\",\n \"local\", \"logical\", \"loud\", \"lower\", \"lower-alpha\", \"lower-armenian\",\n \"lower-greek\", \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\",\n \"lower-roman\", \"lowercase\", \"ltr\", \"luminosity\", \"malayalam\", \"match\", \"matrix\", \"matrix3d\",\n \"media-controls-background\", \"media-current-time-display\",\n \"media-fullscreen-button\", \"media-mute-button\", \"media-play-button\",\n \"media-return-to-realtime-button\", \"media-rewind-button\",\n \"media-seek-back-button\", \"media-seek-forward-button\", \"media-slider\",\n \"media-sliderthumb\", \"media-time-remaining-display\", \"media-volume-slider\",\n \"media-volume-slider-container\", \"media-volume-sliderthumb\", \"medium\",\n \"menu\", \"menulist\", \"menulist-button\", \"menulist-text\",\n \"menulist-textfield\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n \"mix\", \"mongolian\", \"monospace\", \"move\", \"multiple\", \"multiply\", \"myanmar\", \"n-resize\",\n \"narrower\", \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\",\n \"no-open-quote\", \"no-repeat\", \"none\", \"normal\", \"not-allowed\", \"nowrap\",\n \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\", \"oblique\", \"octal\", \"opacity\", \"open-quote\",\n \"optimizeLegibility\", \"optimizeSpeed\", \"oriya\", \"oromo\", \"outset\",\n \"outside\", \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\",\n \"painted\", \"page\", \"paused\", \"persian\", \"perspective\", \"plus-darker\", \"plus-lighter\",\n \"pointer\", \"polygon\", \"portrait\", \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\",\n \"progress\", \"push-button\", \"radial-gradient\", \"radio\", \"read-only\",\n \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\",\n \"relative\", \"repeat\", \"repeating-linear-gradient\",\n \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\",\n \"rotateZ\", \"round\", \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\",\n \"s-resize\", \"sans-serif\", \"saturation\", \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\",\n \"scroll\", \"scrollbar\", \"scroll-position\", \"se-resize\", \"searchfield\",\n \"searchfield-cancel-button\", \"searchfield-decoration\",\n \"searchfield-results-button\", \"searchfield-results-decoration\", \"self-start\", \"self-end\",\n \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\", \"sidama\",\n \"simp-chinese-formal\", \"simp-chinese-informal\", \"single\",\n \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\",\n \"small\", \"small-caps\", \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"somali\",\n \"source-atop\", \"source-in\", \"source-out\", \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\",\n \"square-button\", \"start\", \"static\", \"status-bar\", \"stretch\", \"stroke\", \"sub\",\n \"subpixel-antialiased\", \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\",\n \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\",\n \"table-footer-group\", \"table-header-group\", \"table-row\", \"table-row-group\",\n \"tamil\",\n \"telugu\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thai\",\n \"thick\", \"thin\", \"threeddarkshadow\", \"threedface\", \"threedhighlight\",\n \"threedlightshadow\", \"threedshadow\", \"tibetan\", \"tigre\", \"tigrinya-er\",\n \"tigrinya-er-abegede\", \"tigrinya-et\", \"tigrinya-et-abegede\", \"to\", \"top\",\n \"trad-chinese-formal\", \"trad-chinese-informal\", \"transform\",\n \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\",\n \"transparent\", \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unset\", \"up\",\n \"upper-alpha\", \"upper-armenian\", \"upper-greek\", \"upper-hexadecimal\",\n \"upper-latin\", \"upper-norwegian\", \"upper-roman\", \"uppercase\", \"urdu\", \"url\",\n \"var\", \"vertical\", \"vertical-text\", \"visible\", \"visibleFill\", \"visiblePainted\",\n \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\",\n \"window\", \"windowframe\", \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\",\n \"xx-large\", \"xx-small\"\n ], valueKeywords = keySet(valueKeywords_);\n\n var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)\n .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)\n .concat(valueKeywords_);\n CodeMirror.registerHelper(\"hintWords\", \"css\", allWords);\n\n function tokenCComment(stream, state) {\n var maybeEnd = false, ch;\n while ((ch = stream.next()) != null) {\n if (maybeEnd && ch == \"/\") {\n state.tokenize = null;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return [\"comment\", \"comment\"];\n }\n\n CodeMirror.defineMIME(\"text/css\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\"\n });\n\n CodeMirror.defineMIME(\"text/x-scss\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \":\": function(stream) {\n if (stream.match(/\\s*\\{/, false))\n return [null, null]\n return false;\n },\n \"$\": function(stream) {\n stream.match(/^[\\w-]+/);\n if (stream.match(/^\\s*:/, false))\n return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"#\": function(stream) {\n if (!stream.eat(\"{\")) return false;\n return [null, \"interpolation\"];\n }\n },\n name: \"css\",\n helperType: \"scss\"\n });\n\n CodeMirror.defineMIME(\"text/x-less\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \"@\": function(stream) {\n if (stream.eat(\"{\")) return [null, \"interpolation\"];\n if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i, false)) return false;\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false))\n return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"&\": function() {\n return [\"atom\", \"atom\"];\n }\n },\n name: \"css\",\n helperType: \"less\"\n });\n\n CodeMirror.defineMIME(\"text/x-gss\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n supportsAtComponent: true,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\",\n helperType: \"gss\"\n });\n\n});\n\n},{\"../../lib/codemirror\":14}],16:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../javascript/javascript\"), require(\"../css/css\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../javascript/javascript\", \"../css/css\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var defaultTags = {\n script: [\n [\"lang\", /(javascript|babel)/i, \"javascript\"],\n [\"type\", /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, \"javascript\"],\n [\"type\", /./, \"text/plain\"],\n [null, null, \"javascript\"]\n ],\n style: [\n [\"lang\", /^css$/i, \"css\"],\n [\"type\", /^(text\\/)?(x-)?(stylesheet|css)$/i, \"css\"],\n [\"type\", /./, \"text/plain\"],\n [null, null, \"css\"]\n ]\n };\n\n function maybeBackup(stream, pat, style) {\n var cur = stream.current(), close = cur.search(pat);\n if (close > -1) {\n stream.backUp(cur.length - close);\n } else if (cur.match(/<\\/?$/)) {\n stream.backUp(cur.length);\n if (!stream.match(pat, false)) stream.match(cur);\n }\n return style;\n }\n\n var attrRegexpCache = {};\n function getAttrRegexp(attr) {\n var regexp = attrRegexpCache[attr];\n if (regexp) return regexp;\n return attrRegexpCache[attr] = new RegExp(\"\\\\s+\" + attr + \"\\\\s*=\\\\s*('|\\\")?([^'\\\"]+)('|\\\")?\\\\s*\");\n }\n\n function getAttrValue(text, attr) {\n var match = text.match(getAttrRegexp(attr))\n return match ? /^\\s*(.*?)\\s*$/.exec(match[2])[1] : \"\"\n }\n\n function getTagRegexp(tagName, anchored) {\n return new RegExp((anchored ? \"^\" : \"\") + \"<\\/\\s*\" + tagName + \"\\s*>\", \"i\");\n }\n\n function addTags(from, to) {\n for (var tag in from) {\n var dest = to[tag] || (to[tag] = []);\n var source = from[tag];\n for (var i = source.length - 1; i >= 0; i--)\n dest.unshift(source[i])\n }\n }\n\n function findMatchingMode(tagInfo, tagText) {\n for (var i = 0; i < tagInfo.length; i++) {\n var spec = tagInfo[i];\n if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2];\n }\n }\n\n CodeMirror.defineMode(\"htmlmixed\", function (config, parserConfig) {\n var htmlMode = CodeMirror.getMode(config, {\n name: \"xml\",\n htmlMode: true,\n multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,\n multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag\n });\n\n var tags = {};\n var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes;\n addTags(defaultTags, tags);\n if (configTags) addTags(configTags, tags);\n if (configScript) for (var i = configScript.length - 1; i >= 0; i--)\n tags.script.unshift([\"type\", configScript[i].matches, configScript[i].mode])\n\n function html(stream, state) {\n var style = htmlMode.token(stream, state.htmlState), tag = /\\btag\\b/.test(style), tagName\n if (tag && !/[<>\\s\\/]/.test(stream.current()) &&\n (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) &&\n tags.hasOwnProperty(tagName)) {\n state.inTag = tagName + \" \"\n } else if (state.inTag && tag && />$/.test(stream.current())) {\n var inTag = /^([\\S]+) (.*)/.exec(state.inTag)\n state.inTag = null\n var modeSpec = stream.current() == \">\" && findMatchingMode(tags[inTag[1]], inTag[2])\n var mode = CodeMirror.getMode(config, modeSpec)\n var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false);\n state.token = function (stream, state) {\n if (stream.match(endTagA, false)) {\n state.token = html;\n state.localState = state.localMode = null;\n return null;\n }\n return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState));\n };\n state.localMode = mode;\n state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, \"\"));\n } else if (state.inTag) {\n state.inTag += stream.current()\n if (stream.eol()) state.inTag += \" \"\n }\n return style;\n };\n\n return {\n startState: function () {\n var state = CodeMirror.startState(htmlMode);\n return {token: html, inTag: null, localMode: null, localState: null, htmlState: state};\n },\n\n copyState: function (state) {\n var local;\n if (state.localState) {\n local = CodeMirror.copyState(state.localMode, state.localState);\n }\n return {token: state.token, inTag: state.inTag,\n localMode: state.localMode, localState: local,\n htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};\n },\n\n token: function (stream, state) {\n return state.token(stream, state);\n },\n\n indent: function (state, textAfter, line) {\n if (!state.localMode || /^\\s*<\\//.test(textAfter))\n return htmlMode.indent(state.htmlState, textAfter);\n else if (state.localMode.indent)\n return state.localMode.indent(state.localState, textAfter, line);\n else\n return CodeMirror.Pass;\n },\n\n innerMode: function (state) {\n return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode};\n }\n };\n }, \"xml\", \"javascript\", \"css\");\n\n CodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\n});\n\n},{\"../../lib/codemirror\":14,\"../css/css\":15,\"../javascript/javascript\":17,\"../xml/xml\":18}],17:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n var indentUnit = config.indentUnit;\n var statementIndent = parserConfig.statementIndent;\n var jsonldMode = parserConfig.jsonld;\n var jsonMode = parserConfig.json || jsonldMode;\n var isTS = parserConfig.typescript;\n var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n // Tokenizer\n\n var keywords = function(){\n function kw(type) {return {type: type, style: \"keyword\"};}\n var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\"), D = kw(\"keyword d\");\n var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n return {\n \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n \"return\": D, \"break\": D, \"continue\": D, \"new\": kw(\"new\"), \"delete\": C, \"void\": C, \"throw\": C,\n \"debugger\": kw(\"debugger\"), \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n \"this\": kw(\"this\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C,\n \"await\": C\n };\n }();\n\n var isOperatorChar = /[+\\-*&%=<>!?|~^@]/;\n var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n function readRegexp(stream) {\n var escaped = false, next, inSet = false;\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (next == \"/\" && !inSet) return;\n if (next == \"[\") inSet = true;\n else if (inSet && next == \"]\") inSet = false;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n }\n\n // Used as scratch variables to communicate multiple values without\n // consing up tons of objects.\n var type, content;\n function ret(tp, style, cont) {\n type = tp; content = cont;\n return style;\n }\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n return ret(\"number\", \"number\");\n } else if (ch == \".\" && stream.match(\"..\")) {\n return ret(\"spread\", \"meta\");\n } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n return ret(ch);\n } else if (ch == \"=\" && stream.eat(\">\")) {\n return ret(\"=>\", \"operator\");\n } else if (ch == \"0\" && stream.eat(/x/i)) {\n stream.eatWhile(/[\\da-f]/i);\n return ret(\"number\", \"number\");\n } else if (ch == \"0\" && stream.eat(/o/i)) {\n stream.eatWhile(/[0-7]/i);\n return ret(\"number\", \"number\");\n } else if (ch == \"0\" && stream.eat(/b/i)) {\n stream.eatWhile(/[01]/i);\n return ret(\"number\", \"number\");\n } else if (/\\d/.test(ch)) {\n stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\n return ret(\"number\", \"number\");\n } else if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n } else if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (expressionAllowed(stream, state, 1)) {\n readRegexp(stream);\n stream.match(/^\\b(([gimyu])(?![gimyu]*\\2))+\\b/);\n return ret(\"regexp\", \"string-2\");\n } else {\n stream.eat(\"=\");\n return ret(\"operator\", \"operator\", stream.current());\n }\n } else if (ch == \"`\") {\n state.tokenize = tokenQuasi;\n return tokenQuasi(stream, state);\n } else if (ch == \"#\") {\n stream.skipToEnd();\n return ret(\"error\", \"error\");\n } else if (isOperatorChar.test(ch)) {\n if (ch != \">\" || !state.lexical || state.lexical.type != \">\") {\n if (stream.eat(\"=\")) {\n if (ch == \"!\" || ch == \"=\") stream.eat(\"=\")\n } else if (/[<>*+\\-]/.test(ch)) {\n stream.eat(ch)\n if (ch == \">\") stream.eat(ch)\n }\n }\n return ret(\"operator\", \"operator\", stream.current());\n } else if (wordRE.test(ch)) {\n stream.eatWhile(wordRE);\n var word = stream.current()\n if (state.lastType != \".\") {\n if (keywords.propertyIsEnumerable(word)) {\n var kw = keywords[word]\n return ret(kw.type, kw.style, word)\n }\n if (word == \"async\" && stream.match(/^(\\s|\\/\\*.*?\\*\\/)*[\\(\\w]/, false))\n return ret(\"async\", \"keyword\", word)\n }\n return ret(\"variable\", \"variable\", word)\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next;\n if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n state.tokenize = tokenBase;\n return ret(\"jsonld-keyword\", \"meta\");\n }\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) break;\n escaped = !escaped && next == \"\\\\\";\n }\n if (!escaped) state.tokenize = tokenBase;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return ret(\"comment\", \"comment\");\n }\n\n function tokenQuasi(stream, state) {\n var escaped = false, next;\n while ((next = stream.next()) != null) {\n if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n return ret(\"quasi\", \"string-2\", stream.current());\n }\n\n var brackets = \"([{}])\";\n // This is a crude lookahead trick to try and notice that we're\n // parsing the argument patterns for a fat-arrow function before we\n // actually hit the arrow token. It only works if the arrow is on\n // the same line as the arguments and there's no strange noise\n // (comments) in between. Fallback is to only notice when we hit the\n // arrow, and not declare the arguments as locals for the arrow\n // body.\n function findFatArrow(stream, state) {\n if (state.fatArrowAt) state.fatArrowAt = null;\n var arrow = stream.string.indexOf(\"=>\", stream.start);\n if (arrow < 0) return;\n\n if (isTS) { // Try to skip TypeScript return type declarations after the arguments\n var m = /:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(stream.string.slice(stream.start, arrow))\n if (m) arrow = m.index\n }\n\n var depth = 0, sawSomething = false;\n for (var pos = arrow - 1; pos >= 0; --pos) {\n var ch = stream.string.charAt(pos);\n var bracket = brackets.indexOf(ch);\n if (bracket >= 0 && bracket < 3) {\n if (!depth) { ++pos; break; }\n if (--depth == 0) { if (ch == \"(\") sawSomething = true; break; }\n } else if (bracket >= 3 && bracket < 6) {\n ++depth;\n } else if (wordRE.test(ch)) {\n sawSomething = true;\n } else if (/[\"'\\/]/.test(ch)) {\n return;\n } else if (sawSomething && !depth) {\n ++pos;\n break;\n }\n }\n if (sawSomething && !depth) state.fatArrowAt = pos;\n }\n\n // Parser\n\n var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n function JSLexical(indented, column, type, align, prev, info) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.prev = prev;\n this.info = info;\n if (align != null) this.align = align;\n }\n\n function inScope(state, varname) {\n for (var v = state.localVars; v; v = v.next)\n if (v.name == varname) return true;\n for (var cx = state.context; cx; cx = cx.prev) {\n for (var v = cx.vars; v; v = v.next)\n if (v.name == varname) return true;\n }\n }\n\n function parseJS(state, style, type, content, stream) {\n var cc = state.cc;\n // Communicate our context to the combinators.\n // (Less wasteful than consing up a hundred closures on every call.)\n cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;\n\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = true;\n\n while(true) {\n var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n if (combinator(type, content)) {\n while(cc.length && cc[cc.length - 1].lex)\n cc.pop()();\n if (cx.marked) return cx.marked;\n if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n return style;\n }\n }\n }\n\n // Combinator utils\n\n var cx = {state: null, column: null, marked: null, cc: null};\n function pass() {\n for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n }\n function cont() {\n pass.apply(null, arguments);\n return true;\n }\n function register(varname) {\n function inList(list) {\n for (var v = list; v; v = v.next)\n if (v.name == varname) return true;\n return false;\n }\n var state = cx.state;\n cx.marked = \"def\";\n if (state.context) {\n if (inList(state.localVars)) return;\n state.localVars = {name: varname, next: state.localVars};\n } else {\n if (inList(state.globalVars)) return;\n if (parserConfig.globalVars)\n state.globalVars = {name: varname, next: state.globalVars};\n }\n }\n\n function isModifier(name) {\n return name == \"public\" || name == \"private\" || name == \"protected\" || name == \"abstract\" || name == \"readonly\"\n }\n\n // Combinators\n\n var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\n function pushcontext() {\n cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\n cx.state.localVars = defaultVars;\n }\n function popcontext() {\n cx.state.localVars = cx.state.context.vars;\n cx.state.context = cx.state.context.prev;\n }\n function pushlex(type, info) {\n var result = function() {\n var state = cx.state, indent = state.indented;\n if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n indent = outer.indented;\n state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n };\n result.lex = true;\n return result;\n }\n function poplex() {\n var state = cx.state;\n if (state.lexical.prev) {\n if (state.lexical.type == \")\")\n state.indented = state.lexical.indented;\n state.lexical = state.lexical.prev;\n }\n }\n poplex.lex = true;\n\n function expect(wanted) {\n function exp(type) {\n if (type == wanted) return cont();\n else if (wanted == \";\") return pass();\n else return cont(exp);\n };\n return exp;\n }\n\n function statement(type, value) {\n if (type == \"var\") return cont(pushlex(\"vardef\", value.length), vardef, expect(\";\"), poplex);\n if (type == \"keyword a\") return cont(pushlex(\"form\"), parenExpr, statement, poplex);\n if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n if (type == \"keyword d\") return cx.stream.match(/^\\s*$/, false) ? cont() : cont(pushlex(\"stat\"), maybeexpression, expect(\";\"), poplex);\n if (type == \"debugger\") return cont(expect(\";\"));\n if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\n if (type == \";\") return cont();\n if (type == \"if\") {\n if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n cx.state.cc.pop()();\n return cont(pushlex(\"form\"), parenExpr, statement, poplex, maybeelse);\n }\n if (type == \"function\") return cont(functiondef);\n if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), className, poplex); }\n if (type == \"variable\") {\n if (isTS && value == \"declare\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else if (isTS && (value == \"module\" || value == \"enum\" || value == \"type\") && cx.stream.match(/^\\s*\\w/, false)) {\n cx.marked = \"keyword\"\n if (value == \"enum\") return cont(enumdef);\n else if (value == \"type\") return cont(typeexpr, expect(\"operator\"), typeexpr, expect(\";\"));\n else return cont(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), block, poplex, poplex)\n } else if (isTS && value == \"namespace\") {\n cx.marked = \"keyword\"\n return cont(pushlex(\"form\"), expression, block, poplex)\n } else {\n return cont(pushlex(\"stat\"), maybelabel);\n }\n }\n if (type == \"switch\") return cont(pushlex(\"form\"), parenExpr, expect(\"{\"), pushlex(\"}\", \"switch\"),\n block, poplex, poplex);\n if (type == \"case\") return cont(expression, expect(\":\"));\n if (type == \"default\") return cont(expect(\":\"));\n if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\n statement, poplex, popcontext);\n if (type == \"export\") return cont(pushlex(\"stat\"), afterExport, poplex);\n if (type == \"import\") return cont(pushlex(\"stat\"), afterImport, poplex);\n if (type == \"async\") return cont(statement)\n if (value == \"@\") return cont(expression, statement)\n return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n }\n function expression(type, value) {\n return expressionInner(type, value, false);\n }\n function expressionNoComma(type, value) {\n return expressionInner(type, value, true);\n }\n function parenExpr(type) {\n if (type != \"(\") return pass()\n return cont(pushlex(\")\"), expression, expect(\")\"), poplex)\n }\n function expressionInner(type, value, noComma) {\n if (cx.state.fatArrowAt == cx.stream.start) {\n var body = noComma ? arrowBodyNoComma : arrowBody;\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, expect(\"=>\"), body, popcontext);\n else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n }\n\n var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n if (type == \"function\") return cont(functiondef, maybeop);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), classExpression, poplex); }\n if (type == \"keyword c\" || type == \"async\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeop);\n if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n if (type == \"quasi\") return pass(quasi, maybeop);\n if (type == \"new\") return cont(maybeTarget(noComma));\n return cont();\n }\n function maybeexpression(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expression);\n }\n\n function maybeoperatorComma(type, value) {\n if (type == \",\") return cont(expression);\n return maybeoperatorNoComma(type, value, false);\n }\n function maybeoperatorNoComma(type, value, noComma) {\n var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n var expr = noComma == false ? expression : expressionNoComma;\n if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n if (type == \"operator\") {\n if (/\\+\\+|--/.test(value) || isTS && value == \"!\") return cont(me);\n if (isTS && value == \"<\" && cx.stream.match(/^([^>]|<.*?>)*>\\s*\\(/, false))\n return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, me);\n if (value == \"?\") return cont(expression, expect(\":\"), expr);\n return cont(expr);\n }\n if (type == \"quasi\") { return pass(quasi, me); }\n if (type == \";\") return;\n if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n if (type == \".\") return cont(property, me);\n if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n if (isTS && value == \"as\") { cx.marked = \"keyword\"; return cont(typeexpr, me) }\n if (type == \"regexp\") {\n cx.state.lastType = cx.marked = \"operator\"\n cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)\n return cont(expr)\n }\n }\n function quasi(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n return cont(expression, continueQuasi);\n }\n function continueQuasi(type) {\n if (type == \"}\") {\n cx.marked = \"string-2\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasi);\n }\n }\n function arrowBody(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expression);\n }\n function arrowBodyNoComma(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expressionNoComma);\n }\n function maybeTarget(noComma) {\n return function(type) {\n if (type == \".\") return cont(noComma ? targetNoComma : target);\n else if (type == \"variable\" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)\n else return pass(noComma ? expressionNoComma : expression);\n };\n }\n function target(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorComma); }\n }\n function targetNoComma(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorNoComma); }\n }\n function maybelabel(type) {\n if (type == \":\") return cont(poplex, statement);\n return pass(maybeoperatorComma, expect(\";\"), poplex);\n }\n function property(type) {\n if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n }\n function objprop(type, value) {\n if (type == \"async\") {\n cx.marked = \"property\";\n return cont(objprop);\n } else if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(getterSetter);\n var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params\n if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\\s*:\\s*/, false)))\n cx.state.fatArrowAt = cx.stream.pos + m[0].length\n return cont(afterprop);\n } else if (type == \"number\" || type == \"string\") {\n cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n return cont(afterprop);\n } else if (type == \"jsonld-keyword\") {\n return cont(afterprop);\n } else if (isTS && isModifier(value)) {\n cx.marked = \"keyword\"\n return cont(objprop)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), afterprop);\n } else if (type == \"spread\") {\n return cont(expressionNoComma, afterprop);\n } else if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(objprop);\n } else if (type == \":\") {\n return pass(afterprop)\n }\n }\n function getterSetter(type) {\n if (type != \"variable\") return pass(afterprop);\n cx.marked = \"property\";\n return cont(functiondef);\n }\n function afterprop(type) {\n if (type == \":\") return cont(expressionNoComma);\n if (type == \"(\") return pass(functiondef);\n }\n function commasep(what, end, sep) {\n function proceed(type, value) {\n if (sep ? sep.indexOf(type) > -1 : type == \",\") {\n var lex = cx.state.lexical;\n if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n return cont(function(type, value) {\n if (type == end || value == end) return pass()\n return pass(what)\n }, proceed);\n }\n if (type == end || value == end) return cont();\n return cont(expect(end));\n }\n return function(type, value) {\n if (type == end || value == end) return cont();\n return pass(what, proceed);\n };\n }\n function contCommasep(what, end, info) {\n for (var i = 3; i < arguments.length; i++)\n cx.cc.push(arguments[i]);\n return cont(pushlex(end, info), commasep(what, end), poplex);\n }\n function block(type) {\n if (type == \"}\") return cont();\n return pass(statement, block);\n }\n function maybetype(type, value) {\n if (isTS) {\n if (type == \":\") return cont(typeexpr);\n if (value == \"?\") return cont(maybetype);\n }\n }\n function mayberettype(type) {\n if (isTS && type == \":\") {\n if (cx.stream.match(/^\\s*\\w+\\s+is\\b/, false)) return cont(expression, isKW, typeexpr)\n else return cont(typeexpr)\n }\n }\n function isKW(_, value) {\n if (value == \"is\") {\n cx.marked = \"keyword\"\n return cont()\n }\n }\n function typeexpr(type, value) {\n if (type == \"variable\" || value == \"void\") {\n if (value == \"keyof\") {\n cx.marked = \"keyword\"\n return cont(typeexpr)\n } else {\n cx.marked = \"type\"\n return cont(afterType)\n }\n }\n if (type == \"string\" || type == \"number\" || type == \"atom\") return cont(afterType);\n if (type == \"[\") return cont(pushlex(\"]\"), commasep(typeexpr, \"]\", \",\"), poplex, afterType)\n if (type == \"{\") return cont(pushlex(\"}\"), commasep(typeprop, \"}\", \",;\"), poplex, afterType)\n if (type == \"(\") return cont(commasep(typearg, \")\"), maybeReturnType)\n }\n function maybeReturnType(type) {\n if (type == \"=>\") return cont(typeexpr)\n }\n function typeprop(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\"\n return cont(typeprop)\n } else if (value == \"?\") {\n return cont(typeprop)\n } else if (type == \":\") {\n return cont(typeexpr)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), typeprop)\n }\n }\n function typearg(type) {\n if (type == \"variable\") return cont(typearg)\n else if (type == \":\") return cont(typeexpr)\n }\n function afterType(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n if (value == \"|\" || type == \".\") return cont(typeexpr)\n if (type == \"[\") return cont(expect(\"]\"), afterType)\n if (value == \"extends\" || value == \"implements\") { cx.marked = \"keyword\"; return cont(typeexpr) }\n }\n function maybeTypeArgs(_, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n }\n function typeparam() {\n return pass(typeexpr, maybeTypeDefault)\n }\n function maybeTypeDefault(_, value) {\n if (value == \"=\") return cont(typeexpr)\n }\n function vardef(_, value) {\n if (value == \"enum\") {cx.marked = \"keyword\"; return cont(enumdef)}\n return pass(pattern, maybetype, maybeAssign, vardefCont);\n }\n function pattern(type, value) {\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(pattern) }\n if (type == \"variable\") { register(value); return cont(); }\n if (type == \"spread\") return cont(pattern);\n if (type == \"[\") return contCommasep(pattern, \"]\");\n if (type == \"{\") return contCommasep(proppattern, \"}\");\n }\n function proppattern(type, value) {\n if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n register(value);\n return cont(maybeAssign);\n }\n if (type == \"variable\") cx.marked = \"property\";\n if (type == \"spread\") return cont(pattern);\n if (type == \"}\") return pass();\n return cont(expect(\":\"), pattern, maybeAssign);\n }\n function maybeAssign(_type, value) {\n if (value == \"=\") return cont(expressionNoComma);\n }\n function vardefCont(type) {\n if (type == \",\") return cont(vardef);\n }\n function maybeelse(type, value) {\n if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n }\n function forspec(type) {\n if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n }\n function forspec1(type) {\n if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n if (type == \";\") return cont(forspec2);\n if (type == \"variable\") return cont(formaybeinof);\n return pass(expression, expect(\";\"), forspec2);\n }\n function formaybeinof(_type, value) {\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return cont(maybeoperatorComma, forspec2);\n }\n function forspec2(type, value) {\n if (type == \";\") return cont(forspec3);\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return pass(expression, expect(\";\"), forspec3);\n }\n function forspec3(type) {\n if (type != \")\") cont(expression);\n }\n function functiondef(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n if (type == \"variable\") {register(value); return cont(functiondef);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, statement, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondef)\n }\n function funarg(type, value) {\n if (value == \"@\") cont(expression, funarg)\n if (type == \"spread\") return cont(funarg);\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(funarg); }\n return pass(pattern, maybetype, maybeAssign);\n }\n function classExpression(type, value) {\n // Class expressions may have an optional name.\n if (type == \"variable\") return className(type, value);\n return classNameAfter(type, value);\n }\n function className(type, value) {\n if (type == \"variable\") {register(value); return cont(classNameAfter);}\n }\n function classNameAfter(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, classNameAfter)\n if (value == \"extends\" || value == \"implements\" || (isTS && type == \",\")) {\n if (value == \"implements\") cx.marked = \"keyword\";\n return cont(isTS ? typeexpr : expression, classNameAfter);\n }\n if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n }\n function classBody(type, value) {\n if (type == \"async\" ||\n (type == \"variable\" &&\n (value == \"static\" || value == \"get\" || value == \"set\" || (isTS && isModifier(value))) &&\n cx.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/, false))) {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n return cont(isTS ? classfield : functiondef, classBody);\n }\n if (type == \"[\")\n return cont(expression, maybetype, expect(\"]\"), isTS ? classfield : functiondef, classBody)\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \";\") return cont(classBody);\n if (type == \"}\") return cont();\n if (value == \"@\") return cont(expression, classBody)\n }\n function classfield(type, value) {\n if (value == \"?\") return cont(classfield)\n if (type == \":\") return cont(typeexpr, maybeAssign)\n if (value == \"=\") return cont(expressionNoComma)\n return pass(functiondef)\n }\n function afterExport(type, value) {\n if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n if (type == \"{\") return cont(commasep(exportField, \"}\"), maybeFrom, expect(\";\"));\n return pass(statement);\n }\n function exportField(type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(expect(\"variable\")); }\n if (type == \"variable\") return pass(expressionNoComma, exportField);\n }\n function afterImport(type) {\n if (type == \"string\") return cont();\n return pass(importSpec, maybeMoreImports, maybeFrom);\n }\n function importSpec(type, value) {\n if (type == \"{\") return contCommasep(importSpec, \"}\");\n if (type == \"variable\") register(value);\n if (value == \"*\") cx.marked = \"keyword\";\n return cont(maybeAs);\n }\n function maybeMoreImports(type) {\n if (type == \",\") return cont(importSpec, maybeMoreImports)\n }\n function maybeAs(_type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(importSpec); }\n }\n function maybeFrom(_type, value) {\n if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n }\n function arrayLiteral(type) {\n if (type == \"]\") return cont();\n return pass(commasep(expressionNoComma, \"]\"));\n }\n function enumdef() {\n return pass(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), commasep(enummember, \"}\"), poplex, poplex)\n }\n function enummember() {\n return pass(pattern, maybeAssign);\n }\n\n function isContinuedStatement(state, textAfter) {\n return state.lastType == \"operator\" || state.lastType == \",\" ||\n isOperatorChar.test(textAfter.charAt(0)) ||\n /[,.]/.test(textAfter.charAt(0));\n }\n\n function expressionAllowed(stream, state, backUp) {\n return state.tokenize == tokenBase &&\n /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(state.lastType) ||\n (state.lastType == \"quasi\" && /\\{\\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))\n }\n\n // Interface\n\n return {\n startState: function(basecolumn) {\n var state = {\n tokenize: tokenBase,\n lastType: \"sof\",\n cc: [],\n lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n localVars: parserConfig.localVars,\n context: parserConfig.localVars && {vars: parserConfig.localVars},\n indented: basecolumn || 0\n };\n if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n state.globalVars = parserConfig.globalVars;\n return state;\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = false;\n state.indented = stream.indentation();\n findFatArrow(stream, state);\n }\n if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n if (type == \"comment\") return style;\n state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n return parseJS(state, style, type, content, stream);\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize == tokenComment) return CodeMirror.Pass;\n if (state.tokenize != tokenBase) return 0;\n var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top\n // Kludge to prevent 'maybelse' from blocking lexical scope pops\n if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n var c = state.cc[i];\n if (c == poplex) lexical = lexical.prev;\n else if (c != maybeelse) break;\n }\n while ((lexical.type == \"stat\" || lexical.type == \"form\") &&\n (firstChar == \"}\" || ((top = state.cc[state.cc.length - 1]) &&\n (top == maybeoperatorComma || top == maybeoperatorNoComma) &&\n !/^[,\\.=+\\-*:?[\\(]/.test(textAfter))))\n lexical = lexical.prev;\n if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n lexical = lexical.prev;\n var type = lexical.type, closing = firstChar == type;\n\n if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info + 1 : 0);\n else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n else if (type == \"form\") return lexical.indented + indentUnit;\n else if (type == \"stat\")\n return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);\n else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n else return lexical.indented + (closing ? 0 : indentUnit);\n },\n\n electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n blockCommentStart: jsonMode ? null : \"/*\",\n blockCommentEnd: jsonMode ? null : \"*/\",\n blockCommentContinue: jsonMode ? null : \" * \",\n lineComment: jsonMode ? null : \"//\",\n fold: \"brace\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n\n helperType: jsonMode ? \"json\" : \"javascript\",\n jsonldMode: jsonldMode,\n jsonMode: jsonMode,\n\n expressionAllowed: expressionAllowed,\n\n skipExpression: function(state) {\n var top = state.cc[state.cc.length - 1]\n if (top == expression || top == expressionNoComma) state.cc.pop()\n }\n };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n\n},{\"../../lib/codemirror\":14}],18:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n}\n\nvar xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n var indentUnit = editorConf.indentUnit\n var config = {}\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n for (var prop in defaults) config[prop] = defaults[prop]\n for (var prop in config_) config[prop] = config_[prop]\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n };\n }\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName;\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n popContext(state);\n if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n config.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function(baseIndent) {\n var state = {tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null, tagStart: null,\n context: null}\n if (baseIndent != null) state.baseIndent = baseIndent\n return state\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n if (tagAfter && tagAfter[1]) { // Closing tag spotted\n while (context) {\n if (context.tagName == tagAfter[2]) {\n context = context.prev;\n break;\n } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n context = context.prev;\n } else {\n break;\n }\n }\n } else if (tagAfter) { // Opening tag spotted\n while (context) {\n var grabbers = config.contextGrabbers[context.tagName];\n if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n context = context.prev;\n else\n break;\n }\n }\n while (context && context.prev && !context.startOfLine)\n context = context.prev;\n if (context) return context.indent + indentUnit;\n else return state.baseIndent || 0;\n },\n\n electricInput: /<\\/[\\s\\w:]+>$/,\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n\n skipAttribute: function(state) {\n if (state.state == attrValueState)\n state.state = attrState\n }\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n\n},{\"../../lib/codemirror\":14}],19:[function(require,module,exports){\n(function(global,factory){if(typeof define === 'function' && define.amd){define(['exports'],factory);}else if(typeof exports !== 'undefined'){factory(exports);}else {var mod={exports:{}};factory(mod.exports);global.decko = mod.exports;}})(this,function(exports){'use strict';exports.__esModule = true;var EMPTY={};var HOP=Object.prototype.hasOwnProperty;var fns={memoize:function memoize(fn){var opt=arguments.length <= 1 || arguments[1] === undefined?EMPTY:arguments[1];var cache=opt.cache || {};return function(){for(var _len=arguments.length,a=Array(_len),_key=0;_key < _len;_key++) {a[_key] = arguments[_key];}var k=String(a[0]);if(opt.caseSensitive === false)k = k.toLowerCase();return HOP.call(cache,k)?cache[k]:cache[k] = fn.apply(this,a);};},debounce:function debounce(fn,opts){if(typeof opts === 'function'){var p=fn;fn = opts;opts = p;}var delay=opts && opts.delay || opts || 0,args=undefined,context=undefined,timer=undefined;return function(){for(var _len2=arguments.length,a=Array(_len2),_key2=0;_key2 < _len2;_key2++) {a[_key2] = arguments[_key2];}args = a;context = this;if(!timer)timer = setTimeout(function(){fn.apply(context,args);args = context = timer = null;},delay);};},bind:function bind(target,key,_ref){var fn=_ref.value;return {configurable:true,get:function get(){var value=fn.bind(this);Object.defineProperty(this,key,{value:value,configurable:true,writable:true});return value;}};}};var memoize=multiMethod(fns.memoize),debounce=multiMethod(fns.debounce),bind=multiMethod(function(f,c){return f.bind(c);},function(){return fns.bind;});exports.memoize = memoize;exports.debounce = debounce;exports.bind = bind;exports['default'] = {memoize:memoize,debounce:debounce,bind:bind};function multiMethod(inner,deco){deco = deco || inner.decorate || decorator(inner);var d=deco();return function(){for(var _len3=arguments.length,args=Array(_len3),_key3=0;_key3 < _len3;_key3++) {args[_key3] = arguments[_key3];}var l=args.length;return (l < 2?deco:l > 2?d:inner).apply(undefined,args);};}function decorator(fn){return function(opt){return typeof opt === 'function'?fn(opt):function(target,key,desc){desc.value = fn(desc.value,opt,target,key,desc);};};}});\n\n\n},{}],20:[function(require,module,exports){\nfunction dlv(t,e,n,l){for(l=0,e=e.split?e.split(\".\"):e;t&&l<e.length;)t=t[e[l++]];return void 0===t?n:t}function linkState(t,e,n){var l=e.split(\".\"),r=t.__lsc||(t.__lsc={});return r[e+n]||(r[e+n]=function(e){for(var r=e&&e.target||this,a={},i=a,o=\"string\"==typeof n?dlv(e,n):r.nodeName?r.type.match(/^che|rad/)?r.checked:r.value:e,s=0;s<l.length-1;s++)i=i[l[s]]||(i[l[s]]=!s&&t.state[l[s]]||{});i[l[s]]=o,t.setState(a)})}module.exports=linkState;\n\n\n},{}],21:[function(require,module,exports){\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.preactRenderToString = factory());\n}(this, (function () {\n\nvar NON_DIMENSION_PROPS = {\n\tboxFlex: 1, boxFlexGroup: 1, columnCount: 1, fillOpacity: 1, flex: 1, flexGrow: 1,\n\tflexPositive: 1, flexShrink: 1, flexNegative: 1, fontWeight: 1, lineClamp: 1, lineHeight: 1,\n\topacity: 1, order: 1, orphans: 1, strokeOpacity: 1, widows: 1, zIndex: 1, zoom: 1\n};\n\nvar ESC = {\n\t'<': '<',\n\t'>': '>',\n\t'\"': '"',\n\t'&': '&'\n};\n\nvar objectKeys = Object.keys || function (obj) {\n\tvar keys = [];\n\tfor (var i in obj) {\n\t\tif (obj.hasOwnProperty(i)) keys.push(i);\n\t}return keys;\n};\n\nvar encodeEntities = function encodeEntities(s) {\n\treturn String(s).replace(/[<>\"&]/g, escapeChar);\n};\n\nvar escapeChar = function escapeChar(a) {\n\treturn ESC[a] || a;\n};\n\nvar falsey = function falsey(v) {\n\treturn v == null || v === false;\n};\n\nvar memoize = function memoize(fn) {\n\tvar mem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\treturn function (v) {\n\t\treturn mem[v] || (mem[v] = fn(v));\n\t};\n};\n\nvar indent = function indent(s, char) {\n\treturn String(s).replace(/(\\n+)/g, '$1' + (char || '\\t'));\n};\n\nvar isLargeString = function isLargeString(s, length, ignoreLines) {\n\treturn String(s).length > (length || 40) || !ignoreLines && String(s).indexOf('\\n') !== -1 || String(s).indexOf('<') !== -1;\n};\n\nfunction styleObjToCss(s) {\n\tvar str = '';\n\tfor (var prop in s) {\n\t\tvar val = s[prop];\n\t\tif (val != null) {\n\t\t\tif (str) str += ' ';\n\t\t\tstr += jsToCss(prop);\n\t\t\tstr += ': ';\n\t\t\tstr += val;\n\t\t\tif (typeof val === 'number' && !NON_DIMENSION_PROPS[prop]) {\n\t\t\t\tstr += 'px';\n\t\t\t}\n\t\t\tstr += ';';\n\t\t}\n\t}\n\treturn str || undefined;\n}\n\nfunction hashToClassName(c) {\n\tvar str = '';\n\tfor (var prop in c) {\n\t\tif (c[prop]) {\n\t\t\tif (str) str += ' ';\n\t\t\tstr += prop;\n\t\t}\n\t}\n\treturn str;\n}\n\nvar jsToCss = memoize(function (s) {\n\treturn s.replace(/([A-Z])/g, '-$1').toLowerCase();\n});\n\nfunction assign(obj, props) {\n\tfor (var i in props) {\n\t\tobj[i] = props[i];\n\t}return obj;\n}\n\nfunction getNodeProps(vnode) {\n\tvar defaultProps = vnode.nodeName.defaultProps,\n\t props = assign({}, defaultProps || vnode.attributes);\n\tif (defaultProps) assign(props, vnode.attributes);\n\tif (vnode.children) props.children = vnode.children;\n\treturn props;\n}\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar SHALLOW = { shallow: true };\n\nvar UNNAMED = [];\n\nvar EMPTY = {};\n\nvar VOID_ELEMENTS = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n\nrenderToString.render = renderToString;\n\nvar shallowRender = function shallowRender(vnode, context) {\n\treturn renderToString(vnode, context, SHALLOW);\n};\n\nfunction renderToString(vnode, context, opts, inner, isSvgMode) {\n\tvar _ref = vnode || EMPTY,\n\t nodeName = _ref.nodeName,\n\t attributes = _ref.attributes,\n\t children = _ref.children,\n\t isComponent = false;\n\n\tcontext = context || {};\n\topts = opts || {};\n\n\tvar pretty = opts.pretty,\n\t indentChar = typeof pretty === 'string' ? pretty : '\\t';\n\n\tif (vnode == null || typeof vnode === 'boolean') {\n\t\treturn '';\n\t}\n\n\tif ((typeof vnode === 'undefined' ? 'undefined' : _typeof(vnode)) !== 'object' && !nodeName) {\n\t\treturn encodeEntities(vnode);\n\t}\n\n\tif (typeof nodeName === 'function') {\n\t\tisComponent = true;\n\t\tif (opts.shallow && (inner || opts.renderRootComponent === false)) {\n\t\t\tnodeName = getComponentName(nodeName);\n\t\t} else {\n\t\t\tvar props = getNodeProps(vnode),\n\t\t\t rendered = void 0;\n\n\t\t\tif (!nodeName.prototype || typeof nodeName.prototype.render !== 'function') {\n\t\t\t\trendered = nodeName(props, context);\n\t\t\t} else {\n\t\t\t\tvar c = new nodeName(props, context);\n\n\t\t\t\tc._disable = c.__x = true;\n\t\t\t\tc.props = props;\n\t\t\t\tc.context = context;\n\t\t\t\tif (c.componentWillMount) c.componentWillMount();\n\t\t\t\trendered = c.render(c.props, c.state, c.context);\n\n\t\t\t\tif (c.getChildContext) {\n\t\t\t\t\tcontext = assign(assign({}, context), c.getChildContext());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn renderToString(rendered, context, opts, opts.shallowHighOrder !== false);\n\t\t}\n\t}\n\n\tvar s = '',\n\t html = void 0;\n\n\tif (attributes) {\n\t\tvar attrs = objectKeys(attributes);\n\n\t\tif (opts && opts.sortAttributes === true) attrs.sort();\n\n\t\tfor (var i = 0; i < attrs.length; i++) {\n\t\t\tvar name = attrs[i],\n\t\t\t v = attributes[name];\n\t\t\tif (name === 'children') continue;\n\t\t\tif (!(opts && opts.allAttributes) && (name === 'key' || name === 'ref')) continue;\n\n\t\t\tif (name === 'className') {\n\t\t\t\tif (attributes['class']) continue;\n\t\t\t\tname = 'class';\n\t\t\t} else if (isSvgMode && name.match(/^xlink\\:?(.+)/)) {\n\t\t\t\tname = name.toLowerCase().replace(/^xlink\\:?(.+)/, 'xlink:$1');\n\t\t\t}\n\n\t\t\tif (name === 'class' && v && (typeof v === 'undefined' ? 'undefined' : _typeof(v)) === 'object') {\n\t\t\t\tv = hashToClassName(v);\n\t\t\t} else if (name === 'style' && v && (typeof v === 'undefined' ? 'undefined' : _typeof(v)) === 'object') {\n\t\t\t\tv = styleObjToCss(v);\n\t\t\t}\n\n\t\t\tvar hooked = opts.attributeHook && opts.attributeHook(name, v, context, opts, isComponent);\n\t\t\tif (hooked || hooked === '') {\n\t\t\t\ts += hooked;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (name === 'dangerouslySetInnerHTML') {\n\t\t\t\thtml = v && v.__html;\n\t\t\t} else if ((v || v === 0 || v === '') && typeof v !== 'function') {\n\t\t\t\tif (v === true || v === '') {\n\t\t\t\t\tv = name;\n\n\t\t\t\t\tif (!opts || !opts.xml) {\n\t\t\t\t\t\ts += ' ' + name;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ts += ' ' + name + '=\"' + encodeEntities(v) + '\"';\n\t\t\t}\n\t\t}\n\t}\n\n\tvar sub = s.replace(/^\\n\\s*/, ' ');\n\tif (sub !== s && !~sub.indexOf('\\n')) s = sub;else if (pretty && ~s.indexOf('\\n')) s += '\\n';\n\n\ts = '<' + nodeName + s + '>';\n\n\tif (VOID_ELEMENTS.indexOf(nodeName) > -1) {\n\t\ts = s.replace(/>$/, ' />');\n\t}\n\n\tif (html) {\n\t\tif (pretty && isLargeString(html)) {\n\t\t\thtml = '\\n' + indentChar + indent(html, indentChar);\n\t\t}\n\t\ts += html;\n\t} else {\n\t\tvar len = children && children.length,\n\t\t pieces = [],\n\t\t hasLarge = ~s.indexOf('\\n');\n\t\tfor (var _i = 0; _i < len; _i++) {\n\t\t\tvar child = children[_i];\n\t\t\tif (!falsey(child)) {\n\t\t\t\tvar childSvgMode = nodeName === 'svg' ? true : nodeName === 'foreignObject' ? false : isSvgMode,\n\t\t\t\t ret = renderToString(child, context, opts, true, childSvgMode);\n\t\t\t\tif (!hasLarge && pretty && isLargeString(ret)) hasLarge = true;\n\t\t\t\tif (ret) pieces.push(ret);\n\t\t\t}\n\t\t}\n\t\tif (pretty && hasLarge) {\n\t\t\tfor (var _i2 = pieces.length; _i2--;) {\n\t\t\t\tpieces[_i2] = '\\n' + indentChar + indent(pieces[_i2], indentChar);\n\t\t\t}\n\t\t}\n\t\tif (pieces.length) {\n\t\t\ts += pieces.join('');\n\t\t} else if (opts && opts.xml) {\n\t\t\treturn s.substring(0, s.length - 1) + ' />';\n\t\t}\n\t}\n\n\tif (VOID_ELEMENTS.indexOf(nodeName) === -1) {\n\t\tif (pretty && ~s.indexOf('\\n')) s += '\\n';\n\t\ts += '</' + nodeName + '>';\n\t}\n\n\treturn s;\n}\n\nfunction getComponentName(component) {\n\treturn component.displayName || component !== Function && component.name || getFallbackComponentName(component);\n}\n\nfunction getFallbackComponentName(component) {\n\tvar str = Function.prototype.toString.call(component),\n\t name = (str.match(/^\\s*function\\s+([^\\( ]+)/) || EMPTY)[1];\n\tif (!name) {\n\t\tvar index = -1;\n\t\tfor (var i = UNNAMED.length; i--;) {\n\t\t\tif (UNNAMED[i] === component) {\n\t\t\t\tindex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (index < 0) {\n\t\t\tindex = UNNAMED.push(component) - 1;\n\t\t}\n\t\tname = 'UnnamedComponent' + index;\n\t}\n\treturn name;\n}\nrenderToString.shallowRender = shallowRender;\n\nreturn renderToString;\n\n})));\n\n\n},{}],22:[function(require,module,exports){\n!function() {\n 'use strict';\n function VNode() {}\n function h(nodeName, attributes) {\n var lastSimple, child, simple, i, children = EMPTY_CHILDREN;\n for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]);\n if (attributes && null != attributes.children) {\n if (!stack.length) stack.push(attributes.children);\n delete attributes.children;\n }\n while (stack.length) if ((child = stack.pop()) && void 0 !== child.pop) for (i = child.length; i--; ) stack.push(child[i]); else {\n if ('boolean' == typeof child) child = null;\n if (simple = 'function' != typeof nodeName) if (null == child) child = ''; else if ('number' == typeof child) child = String(child); else if ('string' != typeof child) simple = !1;\n if (simple && lastSimple) children[children.length - 1] += child; else if (children === EMPTY_CHILDREN) children = [ child ]; else children.push(child);\n lastSimple = simple;\n }\n var p = new VNode();\n p.nodeName = nodeName;\n p.children = children;\n p.attributes = null == attributes ? void 0 : attributes;\n p.key = null == attributes ? void 0 : attributes.key;\n if (void 0 !== options.vnode) options.vnode(p);\n return p;\n }\n function extend(obj, props) {\n for (var i in props) obj[i] = props[i];\n return obj;\n }\n function cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n }\n function enqueueRender(component) {\n if (!component.__d && (component.__d = !0) && 1 == items.push(component)) (options.debounceRendering || defer)(rerender);\n }\n function rerender() {\n var p, list = items;\n items = [];\n while (p = list.pop()) if (p.__d) renderComponent(p);\n }\n function isSameNodeType(node, vnode, hydrating) {\n if ('string' == typeof vnode || 'number' == typeof vnode) return void 0 !== node.splitText;\n if ('string' == typeof vnode.nodeName) return !node._componentConstructor && isNamedNode(node, vnode.nodeName); else return hydrating || node._componentConstructor === vnode.nodeName;\n }\n function isNamedNode(node, nodeName) {\n return node.__n === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n }\n function getNodeProps(vnode) {\n var props = extend({}, vnode.attributes);\n props.children = vnode.children;\n var defaultProps = vnode.nodeName.defaultProps;\n if (void 0 !== defaultProps) for (var i in defaultProps) if (void 0 === props[i]) props[i] = defaultProps[i];\n return props;\n }\n function createNode(nodeName, isSvg) {\n var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n node.__n = nodeName;\n return node;\n }\n function removeNode(node) {\n var parentNode = node.parentNode;\n if (parentNode) parentNode.removeChild(node);\n }\n function setAccessor(node, name, old, value, isSvg) {\n if ('className' === name) name = 'class';\n if ('key' === name) ; else if ('ref' === name) {\n if (old) old(null);\n if (value) value(node);\n } else if ('class' === name && !isSvg) node.className = value || ''; else if ('style' === name) {\n if (!value || 'string' == typeof value || 'string' == typeof old) node.style.cssText = value || '';\n if (value && 'object' == typeof value) {\n if ('string' != typeof old) for (var i in old) if (!(i in value)) node.style[i] = '';\n for (var i in value) node.style[i] = 'number' == typeof value[i] && !1 === IS_NON_DIMENSIONAL.test(i) ? value[i] + 'px' : value[i];\n }\n } else if ('dangerouslySetInnerHTML' === name) {\n if (value) node.innerHTML = value.__html || '';\n } else if ('o' == name[0] && 'n' == name[1]) {\n var useCapture = name !== (name = name.replace(/Capture$/, ''));\n name = name.toLowerCase().substring(2);\n if (value) {\n if (!old) node.addEventListener(name, eventProxy, useCapture);\n } else node.removeEventListener(name, eventProxy, useCapture);\n (node.__l || (node.__l = {}))[name] = value;\n } else if ('list' !== name && 'type' !== name && !isSvg && name in node) {\n setProperty(node, name, null == value ? '' : value);\n if (null == value || !1 === value) node.removeAttribute(name);\n } else {\n var ns = isSvg && name !== (name = name.replace(/^xlink\\:?/, ''));\n if (null == value || !1 === value) if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase()); else node.removeAttribute(name); else if ('function' != typeof value) if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value); else node.setAttribute(name, value);\n }\n }\n function setProperty(node, name, value) {\n try {\n node[name] = value;\n } catch (e) {}\n }\n function eventProxy(e) {\n return this.__l[e.type](options.event && options.event(e) || e);\n }\n function flushMounts() {\n var c;\n while (c = mounts.pop()) {\n if (options.afterMount) options.afterMount(c);\n if (c.componentDidMount) c.componentDidMount();\n }\n }\n function diff(dom, vnode, context, mountAll, parent, componentRoot) {\n if (!diffLevel++) {\n isSvgMode = null != parent && void 0 !== parent.ownerSVGElement;\n hydrating = null != dom && !('__preactattr_' in dom);\n }\n var ret = idiff(dom, vnode, context, mountAll, componentRoot);\n if (parent && ret.parentNode !== parent) parent.appendChild(ret);\n if (!--diffLevel) {\n hydrating = !1;\n if (!componentRoot) flushMounts();\n }\n return ret;\n }\n function idiff(dom, vnode, context, mountAll, componentRoot) {\n var out = dom, prevSvgMode = isSvgMode;\n if (null == vnode || 'boolean' == typeof vnode) vnode = '';\n if ('string' == typeof vnode || 'number' == typeof vnode) {\n if (dom && void 0 !== dom.splitText && dom.parentNode && (!dom._component || componentRoot)) {\n if (dom.nodeValue != vnode) dom.nodeValue = vnode;\n } else {\n out = document.createTextNode(vnode);\n if (dom) {\n if (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n recollectNodeTree(dom, !0);\n }\n }\n out.__preactattr_ = !0;\n return out;\n }\n var vnodeName = vnode.nodeName;\n if ('function' == typeof vnodeName) return buildComponentFromVNode(dom, vnode, context, mountAll);\n isSvgMode = 'svg' === vnodeName ? !0 : 'foreignObject' === vnodeName ? !1 : isSvgMode;\n vnodeName = String(vnodeName);\n if (!dom || !isNamedNode(dom, vnodeName)) {\n out = createNode(vnodeName, isSvgMode);\n if (dom) {\n while (dom.firstChild) out.appendChild(dom.firstChild);\n if (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n recollectNodeTree(dom, !0);\n }\n }\n var fc = out.firstChild, props = out.__preactattr_, vchildren = vnode.children;\n if (null == props) {\n props = out.__preactattr_ = {};\n for (var a = out.attributes, i = a.length; i--; ) props[a[i].name] = a[i].value;\n }\n if (!hydrating && vchildren && 1 === vchildren.length && 'string' == typeof vchildren[0] && null != fc && void 0 !== fc.splitText && null == fc.nextSibling) {\n if (fc.nodeValue != vchildren[0]) fc.nodeValue = vchildren[0];\n } else if (vchildren && vchildren.length || null != fc) innerDiffNode(out, vchildren, context, mountAll, hydrating || null != props.dangerouslySetInnerHTML);\n diffAttributes(out, vnode.attributes, props);\n isSvgMode = prevSvgMode;\n return out;\n }\n function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n var j, c, f, vchild, child, originalChildren = dom.childNodes, children = [], keyed = {}, keyedLen = 0, min = 0, len = originalChildren.length, childrenLen = 0, vlen = vchildren ? vchildren.length : 0;\n if (0 !== len) for (var i = 0; i < len; i++) {\n var _child = originalChildren[i], props = _child.__preactattr_, key = vlen && props ? _child._component ? _child._component.__k : props.key : null;\n if (null != key) {\n keyedLen++;\n keyed[key] = _child;\n } else if (props || (void 0 !== _child.splitText ? isHydrating ? _child.nodeValue.trim() : !0 : isHydrating)) children[childrenLen++] = _child;\n }\n if (0 !== vlen) for (var i = 0; i < vlen; i++) {\n vchild = vchildren[i];\n child = null;\n var key = vchild.key;\n if (null != key) {\n if (keyedLen && void 0 !== keyed[key]) {\n child = keyed[key];\n keyed[key] = void 0;\n keyedLen--;\n }\n } else if (!child && min < childrenLen) for (j = min; j < childrenLen; j++) if (void 0 !== children[j] && isSameNodeType(c = children[j], vchild, isHydrating)) {\n child = c;\n children[j] = void 0;\n if (j === childrenLen - 1) childrenLen--;\n if (j === min) min++;\n break;\n }\n child = idiff(child, vchild, context, mountAll);\n f = originalChildren[i];\n if (child && child !== dom && child !== f) if (null == f) dom.appendChild(child); else if (child === f.nextSibling) removeNode(f); else dom.insertBefore(child, f);\n }\n if (keyedLen) for (var i in keyed) if (void 0 !== keyed[i]) recollectNodeTree(keyed[i], !1);\n while (min <= childrenLen) if (void 0 !== (child = children[childrenLen--])) recollectNodeTree(child, !1);\n }\n function recollectNodeTree(node, unmountOnly) {\n var component = node._component;\n if (component) unmountComponent(component); else {\n if (null != node.__preactattr_ && node.__preactattr_.ref) node.__preactattr_.ref(null);\n if (!1 === unmountOnly || null == node.__preactattr_) removeNode(node);\n removeChildren(node);\n }\n }\n function removeChildren(node) {\n node = node.lastChild;\n while (node) {\n var next = node.previousSibling;\n recollectNodeTree(node, !0);\n node = next;\n }\n }\n function diffAttributes(dom, attrs, old) {\n var name;\n for (name in old) if ((!attrs || null == attrs[name]) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode);\n for (name in attrs) if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n }\n function collectComponent(component) {\n var name = component.constructor.name;\n (components[name] || (components[name] = [])).push(component);\n }\n function createComponent(Ctor, props, context) {\n var inst, list = components[Ctor.name];\n if (Ctor.prototype && Ctor.prototype.render) {\n inst = new Ctor(props, context);\n Component.call(inst, props, context);\n } else {\n inst = new Component(props, context);\n inst.constructor = Ctor;\n inst.render = doRender;\n }\n if (list) for (var i = list.length; i--; ) if (list[i].constructor === Ctor) {\n inst.__b = list[i].__b;\n list.splice(i, 1);\n break;\n }\n return inst;\n }\n function doRender(props, state, context) {\n return this.constructor(props, context);\n }\n function setComponentProps(component, props, opts, context, mountAll) {\n if (!component.__x) {\n component.__x = !0;\n if (component.__r = props.ref) delete props.ref;\n if (component.__k = props.key) delete props.key;\n if (!component.base || mountAll) {\n if (component.componentWillMount) component.componentWillMount();\n } else if (component.componentWillReceiveProps) component.componentWillReceiveProps(props, context);\n if (context && context !== component.context) {\n if (!component.__c) component.__c = component.context;\n component.context = context;\n }\n if (!component.__p) component.__p = component.props;\n component.props = props;\n component.__x = !1;\n if (0 !== opts) if (1 === opts || !1 !== options.syncComponentUpdates || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component);\n if (component.__r) component.__r(component);\n }\n }\n function renderComponent(component, opts, mountAll, isChild) {\n if (!component.__x) {\n var rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.__p || props, previousState = component.__s || state, previousContext = component.__c || context, isUpdate = component.base, nextBase = component.__b, initialBase = isUpdate || nextBase, initialChildComponent = component._component, skip = !1;\n if (isUpdate) {\n component.props = previousProps;\n component.state = previousState;\n component.context = previousContext;\n if (2 !== opts && component.shouldComponentUpdate && !1 === component.shouldComponentUpdate(props, state, context)) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context);\n component.props = props;\n component.state = state;\n component.context = context;\n }\n component.__p = component.__s = component.__c = component.__b = null;\n component.__d = !1;\n if (!skip) {\n rendered = component.render(props, state, context);\n if (component.getChildContext) context = extend(extend({}, context), component.getChildContext());\n var toUnmount, base, childComponent = rendered && rendered.nodeName;\n if ('function' == typeof childComponent) {\n var childProps = getNodeProps(rendered);\n inst = initialChildComponent;\n if (inst && inst.constructor === childComponent && childProps.key == inst.__k) setComponentProps(inst, childProps, 1, context, !1); else {\n toUnmount = inst;\n component._component = inst = createComponent(childComponent, childProps, context);\n inst.__b = inst.__b || nextBase;\n inst.__u = component;\n setComponentProps(inst, childProps, 0, context, !1);\n renderComponent(inst, 1, mountAll, !0);\n }\n base = inst.base;\n } else {\n cbase = initialBase;\n toUnmount = initialChildComponent;\n if (toUnmount) cbase = component._component = null;\n if (initialBase || 1 === opts) {\n if (cbase) cbase._component = null;\n base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0);\n }\n }\n if (initialBase && base !== initialBase && inst !== initialChildComponent) {\n var baseParent = initialBase.parentNode;\n if (baseParent && base !== baseParent) {\n baseParent.replaceChild(base, initialBase);\n if (!toUnmount) {\n initialBase._component = null;\n recollectNodeTree(initialBase, !1);\n }\n }\n }\n if (toUnmount) unmountComponent(toUnmount);\n component.base = base;\n if (base && !isChild) {\n var componentRef = component, t = component;\n while (t = t.__u) (componentRef = t).base = base;\n base._component = componentRef;\n base._componentConstructor = componentRef.constructor;\n }\n }\n if (!isUpdate || mountAll) mounts.unshift(component); else if (!skip) {\n if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, previousContext);\n if (options.afterUpdate) options.afterUpdate(component);\n }\n if (null != component.__h) while (component.__h.length) component.__h.pop().call(component);\n if (!diffLevel && !isChild) flushMounts();\n }\n }\n function buildComponentFromVNode(dom, vnode, context, mountAll) {\n var c = dom && dom._component, originalComponent = c, oldDom = dom, isDirectOwner = c && dom._componentConstructor === vnode.nodeName, isOwner = isDirectOwner, props = getNodeProps(vnode);\n while (c && !isOwner && (c = c.__u)) isOwner = c.constructor === vnode.nodeName;\n if (c && isOwner && (!mountAll || c._component)) {\n setComponentProps(c, props, 3, context, mountAll);\n dom = c.base;\n } else {\n if (originalComponent && !isDirectOwner) {\n unmountComponent(originalComponent);\n dom = oldDom = null;\n }\n c = createComponent(vnode.nodeName, props, context);\n if (dom && !c.__b) {\n c.__b = dom;\n oldDom = null;\n }\n setComponentProps(c, props, 1, context, mountAll);\n dom = c.base;\n if (oldDom && dom !== oldDom) {\n oldDom._component = null;\n recollectNodeTree(oldDom, !1);\n }\n }\n return dom;\n }\n function unmountComponent(component) {\n if (options.beforeUnmount) options.beforeUnmount(component);\n var base = component.base;\n component.__x = !0;\n if (component.componentWillUnmount) component.componentWillUnmount();\n component.base = null;\n var inner = component._component;\n if (inner) unmountComponent(inner); else if (base) {\n if (base.__preactattr_ && base.__preactattr_.ref) base.__preactattr_.ref(null);\n component.__b = base;\n removeNode(base);\n collectComponent(component);\n removeChildren(base);\n }\n if (component.__r) component.__r(null);\n }\n function Component(props, context) {\n this.__d = !0;\n this.context = context;\n this.props = props;\n this.state = this.state || {};\n }\n function render(vnode, parent, merge) {\n return diff(merge, vnode, {}, !1, parent, !1);\n }\n var options = {};\n var stack = [];\n var EMPTY_CHILDREN = [];\n var defer = 'function' == typeof Promise ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n var items = [];\n var mounts = [];\n var diffLevel = 0;\n var isSvgMode = !1;\n var hydrating = !1;\n var components = {};\n extend(Component.prototype, {\n setState: function(state, callback) {\n var s = this.state;\n if (!this.__s) this.__s = extend({}, s);\n extend(s, 'function' == typeof state ? state(s, this.props) : state);\n if (callback) (this.__h = this.__h || []).push(callback);\n enqueueRender(this);\n },\n forceUpdate: function(callback) {\n if (callback) (this.__h = this.__h || []).push(callback);\n renderComponent(this, 2);\n },\n render: function() {}\n });\n var preact = {\n h: h,\n createElement: h,\n cloneElement: cloneElement,\n Component: Component,\n render: render,\n rerender: rerender,\n options: options\n };\n if ('undefined' != typeof module) module.exports = preact; else self.preact = preact;\n}();\n\n},{}],23:[function(require,module,exports){\nfunction tlite(getTooltipOpts) {\n document.addEventListener('mouseover', function (e) {\n var el = e.target;\n var opts = getTooltipOpts(el);\n\n if (!opts) {\n el = el.parentElement;\n opts = el && getTooltipOpts(el);\n }\n\n opts && tlite.show(el, opts, true);\n });\n}\n\ntlite.show = function (el, opts, isAuto) {\n var fallbackAttrib = 'data-tlite';\n opts = opts || {};\n\n (el.tooltip || Tooltip(el, opts)).show();\n\n function Tooltip(el, opts) {\n var tooltipEl;\n var showTimer;\n var text;\n\n el.addEventListener('mousedown', autoHide);\n el.addEventListener('mouseleave', autoHide);\n\n function show() {\n text = el.title || el.getAttribute(fallbackAttrib) || text;\n el.title = '';\n el.setAttribute(fallbackAttrib, '');\n text && !showTimer && (showTimer = setTimeout(fadeIn, isAuto ? 150 : 1))\n }\n\n function autoHide() {\n tlite.hide(el, true);\n }\n\n function hide(isAutoHiding) {\n if (isAuto === isAutoHiding) {\n showTimer = clearTimeout(showTimer);\n var parent = tooltipEl && tooltipEl.parentNode;\n parent && parent.removeChild(tooltipEl);\n tooltipEl = undefined;\n }\n }\n\n function fadeIn() {\n if (!tooltipEl) {\n tooltipEl = createTooltip(el, text, opts);\n }\n }\n\n return el.tooltip = {\n show: show,\n hide: hide\n };\n }\n\n function createTooltip(el, text, opts) {\n var tooltipEl = document.createElement('span');\n var grav = opts.grav || el.getAttribute('data-tlite') || 'n';\n\n tooltipEl.innerHTML = text;\n\n el.appendChild(tooltipEl);\n\n var vertGrav = grav[0] || '';\n var horzGrav = grav[1] || '';\n\n function positionTooltip() {\n tooltipEl.className = 'tlite ' + 'tlite-' + vertGrav + horzGrav;\n\n var arrowSize = 10;\n var top = el.offsetTop;\n var left = el.offsetLeft;\n\n if (tooltipEl.offsetParent === el) {\n top = left = 0;\n }\n\n var width = el.offsetWidth;\n var height = el.offsetHeight;\n var tooltipHeight = tooltipEl.offsetHeight;\n var tooltipWidth = tooltipEl.offsetWidth;\n var centerEl = left + (width / 2);\n\n tooltipEl.style.top = (\n vertGrav === 's' ? (top - tooltipHeight - arrowSize) :\n vertGrav === 'n' ? (top + height + arrowSize) :\n (top + (height / 2) - (tooltipHeight / 2))\n ) + 'px';\n\n tooltipEl.style.left = (\n horzGrav === 'w' ? left :\n horzGrav === 'e' ? left + width - tooltipWidth :\n vertGrav === 'w' ? (left + width + arrowSize) :\n vertGrav === 'e' ? (left - tooltipWidth - arrowSize) :\n (centerEl - tooltipWidth / 2)\n ) + 'px';\n }\n\n positionTooltip();\n\n var rect = tooltipEl.getBoundingClientRect();\n\n if (vertGrav === 's' && rect.top < 0) {\n vertGrav = 'n';\n positionTooltip();\n } else if (vertGrav === 'n' && rect.bottom > window.innerHeight) {\n vertGrav = 's';\n positionTooltip();\n } else if (vertGrav === 'e' && rect.left < 0) {\n vertGrav = 'w';\n positionTooltip();\n } else if (vertGrav === 'w' && rect.right > window.innerWidth) {\n vertGrav = 'e';\n positionTooltip();\n }\n\n tooltipEl.className += ' tlite-visible';\n\n return tooltipEl;\n }\n};\n\ntlite.hide = function (el, isAuto) {\n el.tooltip && el.tooltip.hide(isAuto);\n};\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = tlite;\n}\n\n},{}]},{},[2]);\n; })();"]}
\ No newline at end of file
+{"version":3,"sources":["admin.js"],"names":["define","undefined","r","e","n","t","o","i","f","c","u","a","Error","code","p","exports","call","length","1","require","module","handleClickEvent","target","tagName","hasAttribute","confirm","getAttribute","preventDefault","Object","defineProperty","value","default","init","document","body","addEventListener","2","_tabs2","_interopRequireDefault","_formEditor2","_formActions2","_fieldBuilder2","_actionConfirmations2","_tlite2","obj","__esModule","window","html_forms","getElementById","el","className","indexOf","FieldBuilder","Editor","hf_options","view","columns","useCheckboxesForHidden","./action-confirmations.js","./field-builder.js","./form-actions.js","./form-editor.js","./tabs.js","tlite","3","_class","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","key","Constructor","protoProps","staticProps","prototype","_preact","_decko","_fieldConfigurator","_applyDecoratedDescriptor","property","decorators","context","desc","forEach","initializer","slice","reverse","reduce","decorator","_Component","instance","TypeError","_classCallCheck","this","_this","self","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","state","activeField","subClass","superClass","create","constructor","setPrototypeOf","_inherits","Component","setState","field","fields","_this2","fieldButtons","map","h","type","onClick","openFieldConfig","label","fieldType","rows","configRows","class","style","FieldConfigurator","onCancel","handleCancel","bind","getOwnPropertyDescriptor","./field-configurator.js","decko","preact","4","_html","FS","newObj","hasOwnProperty","_interopRequireWildcard","_linkstate","_linkstate2","getInitialState","choiceHandlers","add","addChoice","delete","deleteChoice","changeLabel","changeChoiceLabel","toggleChecked","toggleChoiceChecked","formId","querySelector","formSlug","fieldLabel","placeholder","wrap","required","choices","checked","accept","newState","html","htmlgenerate","replaceSelection","arr","push","index","parentElement","splice","formFields","Label","onChange","Placeholder","DefaultValue","Required","Wrap","AddToForm","onSubmit","addToForm","Choices","multiple","handlers","ButtonText","Accept","onKeyPress","handleKeyPress","keyCode","../field-builder/html.js","./field-settings.js","linkstate","5","href","for","id","defaultChecked","choiceFields","choice","k","data-key","name","title","6","_fieldBuilder","rootElement","Field","mount","render","registerField","./components/field-builder.js","7","_preactRenderToString","_preactRenderToString2","tag","attr","children","propName","filterEmptyObjectValues","conf","fieldName","replace","toUpperCase","fieldId","fieldAttr","selected","str","tmpl","pretty","preact-render-to-string","8","availableActions","actionTemplates","actions","createAccordion","headingHTML","contentHTML","createElement","heading","innerHTML","appendChild","content","deleteWrap","textAlign","deleteLink","innerText","show","offsetParent","display","removeChild","childElementCount","addAction","srcElement","actionType","actionTemplate","querySelectorAll","parentNode","summary","9","CodeMirror","editor","element","dom","requiredFieldsInput","emailFieldsInput","previewFrame","previewDom","templateRegex","setPreviewDom","frameContent","contentDocument","contentWindow","updatePreview","getFieldVariableName","updateFieldVariables","seen","fieldVariables","filter","item","wpbody","firstChild","sizeEl","visibility","width","offsetWidth","setAttribute","maxWidth","vel","markup","getValue","s","m","arguments","dispatchEvent","Event","updateShadowDOM","updateRequiredFields","fieldNames","join","updateEmailFields","debounce","func","wait","immediate","timeout","args","callNow","clearTimeout","setTimeout","apply","fromTextArea","selectionPointer","matchTags","bothTags","mode","htmlMode","autoCloseTags","autoRefresh","styleActiveLine","matchBrackets","on","focus","codemirror","codemirror/addon/edit/closetag.js","codemirror/addon/edit/matchtags","codemirror/addon/fold/xml-fold","codemirror/mode/css/css","codemirror/mode/htmlmixed/htmlmixed","codemirror/mode/javascript/javascript","codemirror/mode/xml/xml","10","tabs","tabNavs","open","tabTarget","classList","toggle","blur","_i","tab","split","shift","history","newUrl","location","replaceState","11","mod","defineOption","cm","val","old","Init","removeKeyMap","whenClosing","getOption","Pass","autoCloseCurrent","whenOpening","ranges","listSelections","replacements","opt","empty","pos","head","tok","getTokenAt","inner","innerMode","getMode","configuration","dontCloseTags","htmlDontClose","indentTags","htmlIndent","end","ch","lowerTagName","toLowerCase","test","string","charAt","closingTagExists","indent","text","newPos","Pos","line","dontIndentOnAutoClose","info","replaceRange","anchor","sel","setSelections","indentLine","autoCloseGT","addKeyMap","typingSlash","dontIndentOnSlash","replacement","start","getLine","replaceSelections","collection","elt","newTag","scanForClosingTag","Math","min","lastLine","nextClose","cx","onCx","prev","to","next","commands","closeTag","amd","../../lib/codemirror","../fold/xml-fold","12","clear","tagHit","tagOther","doMatchTags","failedTagMatch","operation","somethingSelected","cur","getCursor","range","getViewport","from","max","match","findMatchingTag","matchBothTags","hit","at","close","markText","other","maybeUpdateMatch","off","toMatchingTag","found","extendSelection","13","cmp","b","nameStartChar","xmlTagStart","RegExp","Iter","firstLine","tagAt","iter","getTokenTypeAt","nextLine","prevLine","toTagEnd","gt","lastSlash","lastIndexOf","selfClose","toTagStart","lt","lastIndex","exec","toNextTag","toPrevTag","findMatchingClose","stack","startLine","startCh","findMatchingOpen","endLine","endCh","registerHelper","openTag","startPos","endPos","here","findEnclosingTag","14","global","factory","userAgent","navigator","platform","gecko","ie_upto10","ie_11up","edge","ie","ie_version","documentMode","webkit","qtwebkit","chrome","presto","safari","vendor","mac_geMountainLion","phantom","ios","android","mobile","mac","chromeOS","windows","presto_version","Number","flipCtrlCmd","captureRightClick","classTest","cls","rmClass","node","current","after","removeChildren","count","childNodes","removeChildrenAndAdd","parent","cssText","createTextNode","eltP","contains","child","nodeType","host","activeElt","activeElement","shadowRoot","addClass","joinClasses","as","createRange","endNode","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","Array","copyObj","overwrite","prop","countColumn","tabSize","startIndex","startValue","search","nextTab","selectionStart","selectionEnd","_e","Delayed","array","set","ms","scrollerGap","toString","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","col","skipped","spaceStrs","spaceStr","lst","out","nothing","createObj","base","inst","nonASCIISingleCaseWordChar","isWordCharBasic","isWordChar","helper","source","isEmpty","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","dir","findFirst","pred","midF","mid","ceil","floor","Display","place","doc","input","d","scrollbarFiller","gutterFiller","lineDiv","selectionDiv","cursorDiv","measure","lineMeasure","lineSpace","lines","mover","sizer","sizerWidth","heightForcer","gutters","lineGutter","scroller","wrapper","zIndex","paddingRight","draggable","viewFrom","viewTo","first","reportedViewFrom","reportedViewTo","renderedView","externalMeasured","viewOffset","lastWrapHeight","lastWrapWidth","updateLineNumbers","nativeBarWidth","barHeight","barWidth","scrollbarsClipped","lineNumWidth","lineNumInnerWidth","lineNumChars","alignWidgets","cachedCharWidth","cachedTextHeight","cachedPaddingH","maxLine","maxLineLength","maxLineChanged","wheelDX","wheelDY","wheelStartX","wheelStartY","selForContextMenu","activeTouch","size","chunk","sz","chunkSize","getBetween","getLines","updateLineHeight","height","diff","lineNo","no","lineAtHeight","outer","i$1","lh","isLine","l","lineNumberFor","options","String","lineNumberFormatter","firstLineNumber","sticky","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","clipPos","linelen","last","clipPosArray","sawReadOnlySpans","sawCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","stretchSpansOverChange","change","full","oldFirst","markedSpans","oldLast","isInsert","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansBefore","startsBefore","markedSpansAfter","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","i$2","i$3","clearWhenEmpty","detachMarkedSpans","detachLine","attachMarkedSpans","attachLine","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","find","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","lineNo$$1","visualLine","merged","visualLineNo","lineN","vis","visualLineEndNo","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","lineLength","len","found$1","findMaxLine","bidiOther","getBidiPartAt","order","bidiOrdering","lowTypes","arabicTypes","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","level","direction","outerType","types","type$1","prev$1","type$2","i$4","type$3","j","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","i$7","j$2","nstart","unshift","getOrder","noHandlers","emitter","attachEvent","map$$1","_handlers","concat","getHandlers","removeEventListener","detachEvent","signal","signalDOMEvent","override","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","offsetHeight","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","left","right","splitLinesAuto","result","nl","rt","hasSelection","getSelection","te","range$$1","ownerDocument","selection","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","modes","mimeModes","resolveMode","spec","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","nstate","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","eol","sol","peek","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","substr","hideFirstChars","lookAhead","oracle","baseToken","SavedContext","Context","maxLookAhead","baseTokens","baseTokenPos","highlightLine","forceToEnd","st","modeGen","lineClasses","runMode","loop","overlay","overlays","i_end","opaque","styles","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","minindent","minline","lim","indented","findStartLine","saved","fromSaved","processLine","startAt","stream","callBlankLine","readToken","blankLine","token","copy","Token","takeToken","asArray","tokens","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","Line","estimateHeight","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","maps","caches","lastChild","defaultSpecialCharPlaceholder","startStyle","endStyle","css","displayText","trailingBefore","spaceBefore","special","specialChars","mustWrap","createDocumentFragment","txt$1","tabWidth","specialCharPlaceholder","fullStyle","part","buildCollapsedSpan","ignoreWidget","widget","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","Infinity","foundBookmarks","endStyles","upto","tokenText","LineView","visualLineContinued","hidden","buildViewArray","nextPos","operationGroup","orphanDelayedCallbacks","signalLater","list","delayedCallbacks","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","getLineContent","ext","built","background","insertBefore","updateLineBackground","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","markers","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","gutterWidth","alignable","nextSibling","insertLineWidgets","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","positionLineWidget","above","noHScroll","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","widgetHeight","parentStyle","clientWidth","eventInWidget","paddingTop","offsetTop","paddingVert","paddingH","getComputedStyle","currentStyle","data","parseInt","isNaN","scrollGap","displayWidth","displayHeight","clientHeight","mapFromLineView","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","updateExternalMeasurement","rect","hasHeights","prepared","varHeight","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","abs","bottom","top","ensureLineHeights","nodeAndOffsetInLineMap","coverStart","coverEnd","getUsefulRect","screen","logicalXDPI","deviceXDPI","normal","fromRange","hasBadZoomedRects","scaleX","scaleY","logicalYDPI","deviceYDPI","maybeUpdateRectForZooming","rSpan","charWidth","nullRect","rtop","rbot","bot","bogus","singleCursorHeightPerLine","rbottom","measureCharInner","measureText","mStart","mEnd","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","pageScrollX","pageXOffset","documentElement","scrollLeft","pageScrollY","marginTop","pageYOffset","scrollTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","get","getBidi","partPos","invert","estimateCoords","PosWithInfo","outside","xRel","coordsChar","y","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","box","widgetHeight$$1","ltr","_lineNo","ref","closestDist","endX","dist","baseX","chAround","boxAround","atLeft","atStart","textHeight","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","estHeight","posFromMouse","liberal","forRect","space","clientX","clientY","colDiff","round","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","primIndex","showCursorWhenSelecting","drawSelectionCursor","drawSelectionRange","cursor","cursorHeight","otherCursor","cmpCoords","fragment","padding","leftSide","rightSide","docLTR","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","iterateBidiSections","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorBlinkRate","setInterval","ensureFocus","onFocus","delayBlurEvent","delayingBlurEvent","onBlur","readOnly","reset","receivedFocus","updateHeightsInViewport","prevBottom","updateWidgetHeight","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","alignHorizontally","comp","gutterW","align","maybeUpdateLineNumberWidth","innerW","updateGutterSpace","calculateScrollPos","snapMargin","screentop","docBottom","atTop","atBottom","newTop","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","scrollToPos","margin","cursorScrollMargin","scrollToCoords","scrollToCoordsRange","sPos","updateScrollTop","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","setScrollLeft","isScroller","scrollWidth","measureForScrollbars","docH","viewHeight","viewWidth","barLeft","docHeight","NativeScrollbars","vert","horiz","tabIndex","checkedZeroWidth","minHeight","minWidth","update","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","delay","maybeDisable","elementFromPoint","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","borderBottom","coverGutterNextToScrollbar","scrollbarModel","native","null","initScrollbars","scrollbarStyle","axis","nextOpId","startOperation","op","viewChanged","updateInput","typing","changeObjs","cursorActivityCalled","selectionChanged","updateMaxLine","ops","ownsGroup","endOperation","endCb","group","callbacks","fireCallbacksForOps","finishOperation","endOperation_R1","updatedDisplay","mustUpdate","updateDisplayIfNeeded","endOperation_R2","endOperation_W2","endOperation_finish","endOperations","marginBottom","borderRightWidth","DisplayUpdate","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","doScroll","innerHeight","scrollNode","scrollIntoView","maybeScrollWindow","limit","changed","endCoords","scrollPos","startTop","startLeft","scrollPosIntoView","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","methodOp","docMethodOp","regChange","lendiff","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","countDirtyView","dirty","time","highlight","highlightWorker","Date","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","viewportMargin","different","toUpdate","selSnapshot","hasFocus","active","anchorNode","extend","anchorOffset","focusNode","focusOffset","selectionSnapshot","updateNumbersFrom","container","rm","currentWheelTarget","updateNumber","patchDisplay","snapshot","removeAllRanges","addRange","restoreSelection","updateGutters","specs","gElt","setGuttersForLineNumbers","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","there","deepCopy","Range","normalizeSelection","prim","sort","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","estimateHeight$$1","spansFor","updateLine","linesFor","lastText","lastSpans","nlines","insert","remove","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","History","startGen","done","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","pop","addChangeToHistory","selAfter","opId","hist","historyEventDelay","pushSelectionToHistory","addSelectionToHistory","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","mergeOldSpans","getOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","event","newChanges","extendRange","posBefore","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","setSelectionReplaceHistory","setSelectionNoUndo","NaN","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","atomic","near","movePos","far","cantEdit","selectAll","filterChange","canceled","cancel","makeChange","ignoreReadOnly","suppressEdits","mark","parts","mk","newParts","dfrom","dto","removeReadOnlyRanges","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","returned","v","shiftDoc","distance","removed","recomputeMaxLength","checkWidthStart","retreatFrontier","changesHandler","changeHandler","makeChangeSingleDocInEditor","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","oldHeight","remaining","leaf","maybeSpill","me","sibling","myIndex","used","LineWidget","adjustScrollWhenAboveVisible","this$1","oldH","nextMarkerId","TextMarker","cloneNode","isParent","SharedTextMarker","markTextShared","replacedWith","addToHistory","curLine","clearOnEnter","clearHistory","withOp","visual","dHeight","findSharedMarkers","findMarks","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","lineSeparator","setValue","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","setCursor","extendSelectionsBy","addSelection","getSelections","dup","newSel","hint","oldPrev","newPrev","computeReplacedSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","addLineWidget","insertAt","aboveVisible","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","mFrom","mTo","subMark","copySharedMarkers","unlinkDoc","CodeMirror$1","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","read","loadFile","file","allowDropFileTypes","reader","onload","readAsText","draggingText","text$1","getData","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","globalsRegistered","ensureGlobalHandlers","resizeTimer","onResize","setSize","keyNames","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","93","106","107","109","110","111","127","145","173","186","187","188","189","190","191","192","219","220","221","222","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","fromCharCode","keyMap","normalizeKeyName","alt","ctrl","cmd","normalizeKeyMap","keymap","keyname","keys","lookupKey","getKeyMap","fallthrough","isModifierKey","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","basic","Left","Right","Up","Down","End","Home","PageUp","PageDown","Delete","Backspace","Shift-Backspace","Tab","Shift-Tab","Enter","Insert","Esc","pcDefault","Ctrl-A","Ctrl-D","Ctrl-Z","Shift-Ctrl-Z","Ctrl-Y","Ctrl-Home","Ctrl-End","Ctrl-Up","Ctrl-Down","Ctrl-Left","Ctrl-Right","Alt-Left","Alt-Right","Ctrl-Backspace","Ctrl-Delete","Ctrl-S","Ctrl-F","Ctrl-G","Shift-Ctrl-G","Shift-Ctrl-F","Shift-Ctrl-R","Ctrl-[","Ctrl-]","Ctrl-U","Shift-Ctrl-U","Alt-U","emacsy","Ctrl-B","Ctrl-P","Ctrl-N","Alt-F","Alt-B","Ctrl-E","Ctrl-V","Shift-Ctrl-V","Ctrl-H","Alt-D","Alt-Backspace","Ctrl-K","Ctrl-T","Ctrl-O","macDefault","Cmd-A","Cmd-D","Cmd-Z","Shift-Cmd-Z","Cmd-Y","Cmd-Home","Cmd-Up","Cmd-End","Cmd-Down","Cmd-Left","Cmd-Right","Ctrl-Alt-Backspace","Alt-Delete","Cmd-S","Cmd-F","Cmd-G","Shift-Cmd-G","Cmd-Alt-F","Shift-Cmd-Alt-F","Cmd-[","Cmd-]","Cmd-Backspace","Cmd-Delete","Cmd-U","Shift-Cmd-U","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","visualLineEnd","lineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","openLine","toggleOverwrite","firstNonWS","inWS","doHandleBinding","bound","dropShift","ensurePolled","prevShift","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","keyMaps","extraKeys","lookupKeyForEditor","handleKeyBinding","motion","lastStoppedKey","onKeyDown","handled","up","showCrossHair","onKeyUp","charCode","lastClick","lastDoubleClick","PastClick","onMouseDown","supportsTouch","clickInGutter","now","repeat","compare","selectingText","handleMappedButton","contained","behavior","option","unit","addNew","moveOnDrag","configureMouse","dragDrop","moved","dragEnd","mouseMove","dragStart","e2","leftButtonStartDrag","ourRange","ourIndex","startSel","rangeForUnit","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","anchorLine","boundary","headIndex","usePart","bidiSimplify","editorSize","counter","move","buttons","curCount","leftButtonSelect","leftButtonDown","onContextMenu","findWordAt","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","defaults","optionHandlers","guttersChanged","dragDropChanged","funcs","dragFunctions","enter","over","leave","drop","wrappingChanged","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","word","touchFinished","prevTouch","finishTouch","farAway","touch","radiusX","radiusY","isMouseLikeTouchEvent","pageX","pageY","frag","onDragOver","setData","effectAllowed","setDragImage","img","src","_top","onDragStart","inp","getField","registerEventHandlers","finishInit","initHooks","textRendering","how","aggressive","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","spellcheck","hiddenTextarea","border","findPosH","origDir","moveOnce","boundToLine","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","res","nextCh","moveVisually","sawType","getHelper","hitSide","findPosV","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","badPos","bad","domToPos","lineNode","locateNodeInLineView","textNode","topNode","nodeValue","curNode","textContent","previousSibling","dist$1","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","pollSelection","pollInterval","poll","scan","isInGutter","triggerOnKeyDown","pollContent","fromIndex","fromNode","toNode","toIndex","newText","closing","extraLinebreak","addText","walk","cmText","markerID","isBlock","nodeName","domTextBetween","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","readOnlyChanged","resetPosition","helpers","TextareaInput","prevInput","pollingFast","createField","textarea","prepareCopyCut","fastPoll","_display","moveInputWithCursor","headPos","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldCSS","oldWrapperCSS","oldScrollY","wrapperBox","scrollY","scrollTo","detectingSelectAll","prepareSelectAllHack","mouseup","rehide","extval","disabled","deflt","notOnInit","newBreaks","refresh","getInputField","detach","attach","integer","defineOptions","setOption","getDoc","addOverlay","score","priority","insertSorted","modeSpec","removeOverlay","newRanges","getLineTokens","getHelpers","help","_global","getStateAfter","defaultTextHeight","defaultCharWidth","addWidget","vspace","hspace","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","amount","rtlMoveVisually","goalColumn","goals","startChar","check","getScrollInfo","interpret","swapDoc","getWrapperElement","getScrollerElement","getGutterElement","registerGlobalHelper","predicate","dontDelegate","method","contenteditable","defineMode","dependencies","defineMIME","mime","defineExtension","defineDocExtension","tabindex","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","cmpPos","version","15","keySet","config","parserConfig","inline","propertyKeywords","tokenHooks","documentTypes","mediaTypes","mediaFeatures","mediaValueKeywords","nonStandardPropertyKeywords","fontProperties","counterDescriptors","colorKeywords","valueKeywords","allowNested","lineComment","supportsAtComponent","ret","tp","tokenString","quote","escaped","tokenize","tokenParenthesized","pushContext","popContext","pass","states","popAndPass","wordAsValue","stateArg","block","maybeprop","propBlock","_stream","parens","pseudo","atBlock","atComponentBlock","atBlock_parens","restricted_atBlock_before","restricted_atBlock","keyframes","interpolation","textAfter","blockCommentStart","blockCommentEnd","blockCommentContinue","fold","documentTypes_","mediaTypes_","mediaFeatures_","mediaValueKeywords_","propertyKeywords_","nonStandardPropertyKeywords_","colorKeywords_","valueKeywords_","allWords","tokenCComment","maybeEnd","/",":","$","#","@","&","defaultTags","script","attrRegexpCache","getAttrValue","getTagRegexp","anchored","addTags","multilineTagIndentFactor","multilineTagIndentPastTag","tags","configTags","configScript","scriptTypes","matches","htmlState","inTag","tagInfo","tagText","findMatchingMode","endTagA","endTag","localState","localMode","pat","local","../css/css","../javascript/javascript","../xml/xml","statementIndent","jsonldMode","jsonld","jsonMode","json","isTS","typescript","wordRE","wordCharacters","keywords","kw","A","B","C","D","operator","atom","if","while","with","else","do","try","finally","return","break","continue","new","void","throw","debugger","var","const","let","function","catch","switch","case","in","typeof","instanceof","true","false","super","yield","export","import","extends","await","isOperatorChar","isJsonldKeyword","cont","tokenBase","tokenComment","expressionAllowed","inSet","readRegexp","tokenQuasi","lexical","lastType","propertyIsEnumerable","brackets","findFatArrow","fatArrowAt","arrow","depth","sawSomething","bracket","atomicTypes","number","variable","regexp","jsonld-keyword","JSLexical","inScope","varname","localVars","vars","marked","cc","inList","register","newContext","registerVarScoped","Var","globalVars","isModifier","defaultVars","pushcontext","pushblockcontext","popcontext","pushlex","lex","poplex","expect","wanted","exp","statement","vardef","parenExpr","maybeexpression","maybeelse","functiondef","forspec","enumdef","typeexpr","expression","maybelabel","maybeCatchBinding","afterExport","afterImport","funarg","expressionInner","expressionNoComma","noComma","arrowBodyNoComma","arrowBody","commasep","maybeop","maybeoperatorNoComma","maybeoperatorComma","classExpression","arrayLiteral","contCommasep","objprop","quasi","targetNoComma","maybeTypeArgs","expr","continueQuasi","_","getterSetter","afterprop","maybetype","what","sep","proceed","mayberettype","isKW","afterType","typeprop","typearg","maybeReturnType","typeparam","maybeTypeDefault","maybeAssign","vardefCont","proppattern","_type","forspec1","forspec2","formaybeinof","forspec3","classNameAfter","classBody","classfield","maybeFrom","exportField","importSpec","maybeMoreImports","maybeAs","enummember","basecolumn","parseJS","firstChar","doubleIndentSwitch","closeBrackets","skipExpression","htmlConfig","autoSelfClosers","area","br","command","embed","frame","hr","keygen","link","meta","param","track","wbr","menuitem","implicitlyClosed","dd","li","optgroup","rp","tbody","td","tfoot","tr","contextGrabbers","dt","address","article","aside","blockquote","dl","fieldset","footer","h1","h2","h3","h4","h5","h6","header","hgroup","menu","nav","ol","section","table","ul","thead","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","setStyle","inText","chain","parser","inBlock","doctype","closure","baseState","tagStart","isInAttribute","stringStartCol","terminator","startOfLine","noIndent","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","attrEqState","attrValueState","attrContinuedState","isInText","baseIndent","fullLine","alignCDATA","tagAfter","grabbers","skipAttribute","EMPTY","HOP","fns","fn","opts","timer","_len2","_key2","_ref","memoize","multiMethod","_len","_key","caseSensitive","deco","decorate","_len3","_key3","__lsc","dlv","21","shallow","attributes","renderRootComponent","defaultProps","_disable","__x","componentWillMount","getChildContext","shallowHighOrder","displayName","Function","O","S","sortAttributes","allAttributes","H","attributeHook","__html","xml","N","L","M","R","F","P","T","substring","shallowRender","preactRenderToString","22","lastSimple","simple","EMPTY_CHILDREN","VNode","vnode","enqueueRender","component","__d","items","debounceRendering","defer","rerender","renderComponent","isNamedNode","__n","getNodeProps","removeNode","setAccessor","isSvg","IS_NON_DIMENSIONAL","useCapture","eventProxy","__l","removeAttribute","ns","removeAttributeNS","setAttributeNS","flushMounts","mounts","afterMount","componentDidMount","mountAll","componentRoot","diffLevel","isSvgMode","ownerSVGElement","hydrating","idiff","prevSvgMode","splitText","_component","recollectNodeTree","__preactattr_","vnodeName","originalComponent","oldDom","isDirectOwner","_componentConstructor","isOwner","__u","setComponentProps","unmountComponent","createComponent","__b","buildComponentFromVNode","createElementNS","fc","vchildren","isHydrating","vchild","originalChildren","keyed","keyedLen","childrenLen","vlen","_child","__k","trim","innerDiffNode","dangerouslySetInnerHTML","attrs","diffAttributes","unmountOnly","Ctor","recyclerComponents","doRender","renderMode","__r","getDerivedStateFromProps","componentWillReceiveProps","__c","__p","syncComponentUpdates","isChild","rendered","cbase","previousProps","previousState","__s","previousContext","isUpdate","nextBase","initialBase","initialChildComponent","shouldComponentUpdate","componentWillUpdate","getSnapshotBeforeUpdate","toUnmount","childComponent","childProps","baseParent","componentRef","componentDidUpdate","afterUpdate","__h","beforeUnmount","componentWillUnmount","Promise","resolve","then","callback","cloneElement","merge","23","getTooltipOpts","isAuto","fallbackAttrib","tooltip","tooltipEl","showTimer","autoHide","hide","fadeIn","grav","vertGrav","horzGrav","positionTooltip","tooltipHeight","tooltipWidth","centerEl","innerWidth","createTooltip","isAutoHiding","Tooltip"],"mappings":"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","file":"admin.min.js","sourcesContent":["(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction init() {\n document.body.addEventListener('click', handleClickEvent, true);\n}\n\nfunction handleClickEvent(e) {\n if (e.target.tagName !== 'A') {\n return;\n }\n\n if (e.target.hasAttribute('data-hf-confirm')) {\n var sure = confirm(e.target.getAttribute('data-hf-confirm'));\n\n if (!sure) {\n e.preventDefault();\n }\n }\n}\n\nexports.default = {\n init: init\n};\n\n},{}],2:[function(require,module,exports){\n'use strict';\n\nvar _tabs = require('./tabs.js');\n\nvar _tabs2 = _interopRequireDefault(_tabs);\n\nvar _formEditor = require('./form-editor.js');\n\nvar _formEditor2 = _interopRequireDefault(_formEditor);\n\nvar _formActions = require('./form-actions.js');\n\nvar _formActions2 = _interopRequireDefault(_formActions);\n\nvar _fieldBuilder = require('./field-builder.js');\n\nvar _fieldBuilder2 = _interopRequireDefault(_fieldBuilder);\n\nvar _actionConfirmations = require('./action-confirmations.js');\n\nvar _actionConfirmations2 = _interopRequireDefault(_actionConfirmations);\n\nvar _tlite = require('tlite');\n\nvar _tlite2 = _interopRequireDefault(_tlite);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nwindow.html_forms = {};\n\n// init the various components\n_tabs2.default.init();\n_actionConfirmations2.default.init();\n\nif (document.getElementById('hf-form-editor')) {\n _formEditor2.default.init();\n _formActions2.default.init();\n _fieldBuilder2.default.init(_formEditor2.default);\n}\n\n(0, _tlite2.default)(function (el) {\n return el.className.indexOf('hf-tooltip') > -1;\n});\n\nwindow.html_forms.FieldBuilder = _fieldBuilder2.default;\nwindow.html_forms.Editor = _formEditor2.default;\n\n// tell WP common.js to override the method used for determining hidden columns (screen options)\nif (hf_options.view === 'edit') {\n window.columns.useCheckboxesForHidden();\n}\n\n},{\"./action-confirmations.js\":1,\"./field-builder.js\":6,\"./form-actions.js\":8,\"./form-editor.js\":9,\"./tabs.js\":10,\"tlite\":23}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldBuilder = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _desc, _value, _class;\n\nvar _preact = require('preact');\n\nvar _decko = require('decko');\n\nvar _fieldConfigurator = require('./field-configurator.js');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nvar FieldBuilder = (_class = function (_Component) {\n _inherits(FieldBuilder, _Component);\n\n function FieldBuilder(props) {\n _classCallCheck(this, FieldBuilder);\n\n var _this = _possibleConstructorReturn(this, (FieldBuilder.__proto__ || Object.getPrototypeOf(FieldBuilder)).call(this, props));\n\n _this.state = {\n activeField: null\n };\n return _this;\n }\n\n _createClass(FieldBuilder, [{\n key: 'handleCancel',\n value: function handleCancel() {\n this.setState({\n activeField: null\n });\n }\n }, {\n key: 'openFieldConfig',\n value: function openFieldConfig(e) {\n var field = this.props.fields[e.target.value];\n\n if (this.state.activeField === field) {\n this.setState({ activeField: null });\n } else {\n this.setState({ activeField: field });\n }\n }\n }, {\n key: 'render',\n value: function render(props, state) {\n var _this2 = this;\n\n var fieldButtons = props.fields.map(function (f, i) {\n return (0, _preact.h)(\n 'button',\n { type: 'button', value: i, className: \"button \" + (state.activeField === f ? \"active\" : \"\"), onClick: _this2.openFieldConfig },\n f.label\n );\n });\n var fieldType = state.activeField ? state.activeField.key : \"\";\n var rows = state.activeField ? state.activeField.configRows : [];\n\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-field-builder' },\n (0, _preact.h)(\n 'h4',\n null,\n 'Add field'\n ),\n (0, _preact.h)(\n 'div',\n { 'class': 'available-fields' },\n fieldButtons\n ),\n (0, _preact.h)(\n 'div',\n { style: 'max-width: 480px;' },\n (0, _preact.h)(_fieldConfigurator.FieldConfigurator, { fieldType: fieldType, rows: rows, onCancel: this.handleCancel })\n ),\n state.activeField === null ? (0, _preact.h)(\n 'p',\n { 'class': 'help', style: 'margin-bottom: 0;' },\n 'Use the buttons above to generate your field HTML, or manually modify your form below.'\n ) : \"\"\n );\n }\n }]);\n\n return FieldBuilder;\n}(_preact.Component), (_applyDecoratedDescriptor(_class.prototype, 'handleCancel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'handleCancel'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'openFieldConfig', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'openFieldConfig'), _class.prototype)), _class);\nexports.FieldBuilder = FieldBuilder;\n\n},{\"./field-configurator.js\":4,\"decko\":19,\"preact\":22}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldConfigurator = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _desc, _value, _class;\n\nvar _preact = require('preact');\n\nvar _decko = require('decko');\n\nvar _html = require('../field-builder/html.js');\n\nvar _fieldSettings = require('./field-settings.js');\n\nvar FS = _interopRequireWildcard(_fieldSettings);\n\nvar _linkstate = require('linkstate');\n\nvar _linkstate2 = _interopRequireDefault(_linkstate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nvar FieldConfigurator = (_class = function (_Component) {\n _inherits(FieldConfigurator, _Component);\n\n function FieldConfigurator(props) {\n _classCallCheck(this, FieldConfigurator);\n\n var _this = _possibleConstructorReturn(this, (FieldConfigurator.__proto__ || Object.getPrototypeOf(FieldConfigurator)).call(this, props));\n\n _this.state = _this.getInitialState();\n _this.choiceHandlers = {\n \"add\": _this.addChoice,\n \"delete\": _this.deleteChoice,\n \"changeLabel\": _this.changeChoiceLabel,\n \"toggleChecked\": _this.toggleChoiceChecked\n };\n return _this;\n }\n\n _createClass(FieldConfigurator, [{\n key: 'getInitialState',\n value: function getInitialState() {\n return {\n formId: document.querySelector('input[name=\"form_id\"]').value,\n formSlug: document.querySelector('input[name=\"form[slug]\"]').value,\n fieldType: \"\",\n fieldLabel: \"\",\n placeholder: \"\",\n value: \"\",\n wrap: true,\n required: false,\n choices: [{\n checked: false,\n label: \"One\"\n }, {\n checked: false,\n label: \"Two\"\n }],\n accept: ''\n };\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(props) {\n var newState = { fieldType: props.fieldType };\n\n // when changing from field that accepts multiple values to single-value field, reset all pre-selections \n if (this.state.fieldType === 'checkbox' && props.fieldType !== 'checkbox') {\n newState.choices = this.state.choices.map(function (c, i) {\n c.checked = false;\n return c;\n });\n }\n this.setState(newState);\n }\n }, {\n key: 'addToForm',\n value: function addToForm() {\n var html = (0, _html.htmlgenerate)(this.state);\n html_forms.Editor.replaceSelection(html);\n }\n }, {\n key: 'addChoice',\n value: function addChoice() {\n var arr = this.state.choices;\n arr.push({ checked: false, label: \"...\" });\n this.setState({ choices: arr });\n }\n }, {\n key: 'deleteChoice',\n value: function deleteChoice(e) {\n var arr = this.state.choices;\n var index = e.target.parentElement.getAttribute('data-key');\n arr.splice(index, 1);\n this.setState({ choices: arr });\n }\n }, {\n key: 'changeChoiceLabel',\n value: function changeChoiceLabel(e) {\n var arr = this.state.choices;\n var index = e.target.parentElement.getAttribute('data-key');\n arr[index].label = e.target.value;\n this.setState({ choices: arr });\n }\n }, {\n key: 'toggleChoiceChecked',\n value: function toggleChoiceChecked(e) {\n var arr = this.state.choices;\n var index = e.target.parentElement.getAttribute('data-key');\n arr[index].checked = !arr[index].checked;\n this.setState({ choices: arr });\n }\n }, {\n key: 'handleCancel',\n value: function handleCancel() {\n // revert back to initial state\n this.setState(this.getInitialState());\n this.props.onCancel();\n }\n }, {\n key: 'render',\n value: function render(props, state) {\n if (props.rows.length == 0) {\n return \"\";\n }\n\n var formFields = [];\n\n for (var i = 0; i < props.rows.length; i++) {\n switch (props.rows[i]) {\n case \"label\":\n formFields.push((0, _preact.h)(FS.Label, { value: state.fieldLabel, onChange: (0, _linkstate2.default)(this, 'fieldLabel') }));\n break;\n\n case \"placeholder\":\n formFields.push((0, _preact.h)(FS.Placeholder, { value: state.placeholder, onChange: (0, _linkstate2.default)(this, 'placeholder') }));\n break;\n\n case \"default-value\":\n formFields.push((0, _preact.h)(FS.DefaultValue, { value: state.value, onChange: (0, _linkstate2.default)(this, 'value') }));\n break;\n\n case \"required\":\n formFields.push((0, _preact.h)(FS.Required, { checked: state.required, onChange: (0, _linkstate2.default)(this, 'required') }));\n break;\n\n case \"wrap\":\n formFields.push((0, _preact.h)(FS.Wrap, { checked: state.wrap, onChange: (0, _linkstate2.default)(this, 'wrap') }));\n break;\n\n case \"add-to-form\":\n formFields.push((0, _preact.h)(FS.AddToForm, { onSubmit: this.addToForm, onCancel: this.handleCancel }));\n break;\n\n case \"choices\":\n formFields.push((0, _preact.h)(FS.Choices, { multiple: state.fieldType === 'checkbox', choices: state.choices, handlers: this.choiceHandlers }));\n break;\n\n case \"button-text\":\n formFields.push((0, _preact.h)(FS.ButtonText, { value: state.value, onChange: (0, _linkstate2.default)(this, 'value') }));\n break;\n\n case \"accept\":\n formFields.push((0, _preact.h)(FS.Accept, { value: state.accept, onChange: (0, _linkstate2.default)(this, 'accept') }));\n break;\n\n }\n }\n\n return (0, _preact.h)(\n 'div',\n { 'class': 'field-config', onKeyPress: FieldConfigurator.handleKeyPress },\n formFields\n );\n }\n }], [{\n key: 'handleKeyPress',\n value: function handleKeyPress(e) {\n // stop RETURN from submitting the parent form.\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n }\n }]);\n\n return FieldConfigurator;\n}(_preact.Component), (_applyDecoratedDescriptor(_class.prototype, 'addToForm', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'addToForm'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'addChoice', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'addChoice'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'deleteChoice', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'deleteChoice'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'changeChoiceLabel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'changeChoiceLabel'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'toggleChoiceChecked', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'toggleChoiceChecked'), _class.prototype), _applyDecoratedDescriptor(_class, 'handleKeyPress', [_decko.bind], Object.getOwnPropertyDescriptor(_class, 'handleKeyPress'), _class), _applyDecoratedDescriptor(_class.prototype, 'handleCancel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'handleCancel'), _class.prototype)), _class);\nexports.FieldConfigurator = FieldConfigurator;\n\n},{\"../field-builder/html.js\":7,\"./field-settings.js\":5,\"decko\":19,\"linkstate\":20,\"preact\":22}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Accept = exports.ButtonText = exports.Choices = exports.Required = exports.Wrap = exports.DefaultValue = exports.Placeholder = exports.Label = exports.AddToForm = undefined;\n\nvar _preact = require('preact');\n\nfunction AddToForm(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'button',\n { 'class': 'button', type: 'button', onClick: props.onSubmit },\n 'Add field to form'\n ),\n ' \\xA0 ',\n (0, _preact.h)(\n 'a',\n { href: 'javascript:void(0);', 'class': 'hf-small', style: 'vertical-align: middle;', onClick: props.onCancel },\n 'or close field helper'\n )\n );\n}\n\nfunction Label(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-field-label' },\n 'Field label ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-required' },\n '*'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-field-label', type: 'text', value: props.value, onChange: props.onChange })\n );\n}\n\nfunction Placeholder(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-placeholder' },\n 'Placeholder ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-italic hf-pull-right' },\n 'Optional'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-placeholder', type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Text to show when field has no value.'\n )\n );\n}\n\nfunction ButtonText(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-default-value' },\n 'Button text ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-required' },\n '*'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-default-value', type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Text to show on the button.'\n )\n );\n}\n\nfunction DefaultValue(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-default-value' },\n 'Default value ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-italic hf-pull-right' },\n 'Optional'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-default-value', type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Text to pre-fill this field with.'\n )\n );\n}\n\nfunction Wrap(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'class': 'inline' },\n (0, _preact.h)('input', { type: 'checkbox', value: '1', defaultChecked: props.checked, onChange: props.onChange }),\n 'Wrap this field in paragraph tags.'\n )\n );\n}\n\nfunction Required(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'class': 'inline' },\n (0, _preact.h)('input', { type: 'checkbox', value: '1', defaultChecked: props.checked, onChange: props.onChange }),\n 'This field is required.'\n )\n );\n}\n\nfunction Choices(props) {\n var choiceFields = props.choices.map(function (choice, k) {\n return (0, _preact.h)(\n 'div',\n { 'data-key': k },\n (0, _preact.h)('input', { type: props.multiple ? \"checkbox\" : \"radio\", name: 'selected', defaultChecked: choice.checked, onChange: props.handlers.toggleChecked, title: 'Pre-select this choice?' }),\n (0, _preact.h)('input', { type: 'text', value: choice.label, placeholder: 'Choice label', style: 'width: 80%;', onChange: props.handlers.changeLabel }),\n (0, _preact.h)(\n 'a',\n { href: 'javascript:void(0);', onClick: props.handlers.delete, style: 'text-decoration: none;', title: 'Delete choice' },\n '\\u2715'\n )\n );\n });\n\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n null,\n 'Choices'\n ),\n choiceFields,\n (0, _preact.h)('input', { type: props.multiple ? \"checkbox\" : \"radio\", style: 'visibility: hidden;' }),\n (0, _preact.h)(\n 'a',\n { href: 'javascript:void(0);', onClick: props.handlers.add },\n 'Add choice'\n )\n );\n}\n\nfunction Accept(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n null,\n 'Accepted file types'\n ),\n (0, _preact.h)('input', { type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Use a comma-separated list of accepted file extensions, eg ',\n (0, _preact.h)(\n 'code',\n null,\n '.pdf'\n ),\n '. ',\n (0, _preact.h)('br', null),\n 'Leave empty to accept any file type.'\n )\n );\n}\n\nexports.AddToForm = AddToForm;\nexports.Label = Label;\nexports.Placeholder = Placeholder;\nexports.DefaultValue = DefaultValue;\nexports.Wrap = Wrap;\nexports.Required = Required;\nexports.Choices = Choices;\nexports.ButtonText = ButtonText;\nexports.Accept = Accept;\n\n},{\"preact\":22}],6:[function(require,module,exports){\n'use strict';\n\n// imports\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _preact = require('preact');\n\nvar _fieldBuilder = require('./components/field-builder.js');\n\n// vars\nvar rootElement = void 0;\nvar Editor = void 0;\nvar fields = void 0;\n\n// functions\nfunction Field(key, label, configRows) {\n this.key = key;\n this.label = label;\n this.configRows = configRows || [];\n}\n\nfunction mount() {\n rootElement = (0, _preact.render)((0, _preact.h)(_fieldBuilder.FieldBuilder, { fields: fields }), document.getElementById('hf-field-builder'), rootElement);\n}\n\n// bootstrap\nfields = [new Field(\"text\", \"Text\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"email\", \"Email\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"url\", \"URL\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"number\", \"Number\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"date\", \"Date\", [\"label\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"textarea\", \"Textarea\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"dropdown\", \"Dropdown\", [\"label\", \"choices\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"checkbox\", \"Checkboxes\", [\"label\", \"choices\", \"wrap\", \"add-to-form\"]), new Field(\"radio\", \"Radio buttons\", [\"label\", \"choices\", \"wrap\", \"add-to-form\"]), new Field(\"submit\", \"Submit button\", [\"button-text\", \"wrap\", \"add-to-form\"])];\n\nexports.default = {\n init: function init() {\n mount();\n },\n\n registerField: function registerField(key, label, configRows) {\n fields.push(new Field(key, label, configRows));\n mount();\n }\n};\n\n},{\"./components/field-builder.js\":3,\"preact\":22}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.htmlgenerate = undefined;\n\nvar _preactRenderToString = require('preact-render-to-string');\n\nvar _preactRenderToString2 = _interopRequireDefault(_preactRenderToString);\n\nvar _preact = require('preact');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction htmlgenerate(conf) {\n var fieldName = namify(conf.fieldLabel);\n var fieldId = conf.formSlug + '-' + fieldName;\n var label = conf.fieldLabel.length && conf.fieldType !== 'submit' ? (0, _preact.h)(\"label\", {\n \"for\": fieldId\n }, conf.fieldLabel) : \"\";\n var fieldAttr = void 0,\n field = void 0;\n\n switch (conf.fieldType) {\n case \"text\":\n default:\n fieldAttr = {\n type: conf.fieldType,\n name: fieldName,\n value: conf.value,\n placeholder: conf.placeholder,\n required: conf.required,\n id: fieldId\n };\n field = html(\"input\", fieldAttr);\n break;\n case \"textarea\":\n fieldAttr = {\n name: fieldName,\n placeholder: conf.placeholder,\n required: conf.required,\n id: fieldId\n };\n field = html(\"textarea\", fieldAttr, conf.value);\n break;\n\n case \"dropdown\":\n fieldAttr = {\n name: fieldName,\n required: conf.required,\n id: fieldId\n };\n var opts = conf.choices.map(function (choice) {\n return html(\"option\", { selected: choice.checked }, choice.label);\n });\n field = html(\"select\", fieldAttr, opts);\n break;\n\n case \"radio\":\n field = conf.choices.map(function (choice) {\n return html(\"label\", {}, [html(\"input\", {\n type: \"radio\",\n name: fieldName,\n value: choice.label,\n selected: choice.checked\n }), \" \", html(\"span\", {}, choice.label)]);\n });\n break;\n\n case \"checkbox\":\n field = conf.choices.map(function (choice) {\n return html(\"label\", {}, [html(\"input\", {\n type: \"checkbox\",\n name: fieldName + \"[]\",\n value: choice.label,\n checked: choice.checked\n }), \" \", html(\"span\", {}, choice.label)]);\n });\n break;\n\n case \"file\":\n fieldAttr = {\n type: \"file\",\n name: fieldName,\n required: conf.required,\n id: fieldId\n };\n\n if (conf['accept']) {\n fieldAttr['accept'] = conf['accept'];\n }\n\n field = html(\"input\", fieldAttr);\n break;\n\n case \"submit\":\n fieldAttr = {\n type: \"submit\",\n value: conf.value\n };\n field = html(\"input\", fieldAttr);\n break;\n\n }\n\n var str = \"\";\n if (conf.wrap) {\n var tmpl = (0, _preact.h)(\"p\", {}, [label, field]);\n str = (0, _preactRenderToString2.default)(tmpl, null, { pretty: true });\n } else {\n str += (0, _preactRenderToString2.default)(label, null, { pretty: true });\n str += \"\\n\";\n str += (0, _preactRenderToString2.default)(field, null, { pretty: true });\n }\n\n return str;\n}\n\nfunction html(tag, attr, children) {\n return (0, _preact.h)(tag, filterEmptyObjectValues(attr), children);\n}\n\nfunction namify(str) {\n return str.replace(/ /g, '_').replace(/[^\\w\\[\\]_]*/g, \"\").toUpperCase();\n}\n\nfunction filterEmptyObjectValues(obj) {\n var newObj = {};\n for (var propName in obj) {\n if (obj[propName] !== false && obj[propName] !== \"\") {\n newObj[propName] = obj[propName];\n }\n }\n return newObj;\n}\n\nexports.htmlgenerate = htmlgenerate;\n\n},{\"preact\":22,\"preact-render-to-string\":21}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar availableActions = void 0,\n actionTemplates = void 0,\n actions = void 0;\n\nfunction init() {\n actions = document.getElementById('hf-form-actions');\n availableActions = document.getElementById('hf-available-form-actions');\n actionTemplates = document.getElementById('hf-form-action-templates');\n\n // turn settings into accordions\n [].forEach.call(actions.querySelectorAll('.hf-action-settings'), function (el) {\n el.parentNode.removeChild(el);\n\n var heading = el.getAttribute('data-title');\n var summary = el.querySelector('.hf-action-summary');\n if (summary) {\n heading += ' — <span class=\"hf-muted\">' + summary.innerHTML + '</span>';\n }\n var wrap = createAccordion(heading, el.innerHTML);\n actions.appendChild(wrap);\n\n actions.querySelector('#hf-form-actions-empty').style.display = 'none';\n });\n\n availableActions.addEventListener('click', addAction, true);\n}\n\nfunction createAccordion(headingHTML, contentHTML) {\n var wrap = document.createElement('div');\n wrap.className = \"hf-accordion expanded \";\n\n var heading = document.createElement('h4');\n heading.className = \"hf-accordion-heading\";\n heading.innerHTML = headingHTML;\n wrap.appendChild(heading);\n\n var content = document.createElement('div');\n content.className = \"hf-accordion-content\";\n content.innerHTML = contentHTML;\n wrap.appendChild(content);\n\n var deleteWrap = document.createElement('p');\n deleteWrap.style.textAlign = 'right';\n var deleteLink = document.createElement('a');\n deleteLink.href = 'javascript:void(0);';\n deleteLink.className = \"danger\";\n deleteLink.innerText = 'Delete this action';\n deleteWrap.appendChild(deleteLink);\n content.appendChild(deleteWrap);\n\n // bind handlers\n heading.addEventListener('click', createToggleActionHandler(wrap, content));\n deleteLink.addEventListener('click', createDeleteActionHandler(wrap));\n return wrap;\n}\n\nfunction addAction(e) {\n var el = e.target || e.srcElement;\n if (el.tagName !== 'INPUT') {\n return;\n }\n\n var actionType = el.getAttribute('data-action-type');\n var actionTemplate = actionTemplates.querySelector('#hf-action-type-' + actionType + '-template');\n\n // append HTML to actions wrapper\n var index = actions.querySelectorAll('div').length - 1;\n var wrap = createAccordion(el.value, actionTemplate.innerHTML.replace(/\\$index/g, index));\n actions.appendChild(wrap);\n\n // hide \"no form actions\" message\n actions.querySelector('#hf-form-actions-empty').style.display = 'none';\n}\n\nfunction createDeleteActionHandler(wrap) {\n return function () {\n actions.removeChild(wrap);\n\n if (actions.childElementCount === 1) {\n actions.querySelector('#hf-form-actions-empty').style.display = '';\n }\n };\n}\n\nfunction createToggleActionHandler(wrap, content) {\n return function () {\n var show = content.offsetParent === null;\n wrap.className = wrap.className.replace('expanded', '') + (show ? ' expanded' : '');\n content.style.display = show ? 'block' : 'none';\n };\n}\n\nexports.default = { init: init };\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\n// load CodeMirror & plugins\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CodeMirror = require('codemirror');\nrequire('codemirror/mode/xml/xml');\nrequire('codemirror/mode/javascript/javascript');\nrequire('codemirror/mode/css/css');\nrequire('codemirror/mode/htmlmixed/htmlmixed');\nrequire('codemirror/addon/fold/xml-fold');\nrequire('codemirror/addon/edit/matchtags');\nrequire('codemirror/addon/edit/closetag.js');\n\nvar editor = void 0,\n element = void 0,\n dom = void 0,\n requiredFieldsInput = void 0,\n emailFieldsInput = void 0,\n previewFrame = void 0,\n previewDom = void 0;\nvar templateRegex = /\\{\\{ *(\\w+)(?:\\.([\\w\\.]+))? *(?:\\|\\| *(\\w+))? *\\}\\}/g;\n\nfunction init() {\n previewFrame = document.getElementById('hf-form-preview');\n element = document.getElementById('hf-form-editor');\n dom = document.createElement('form');\n requiredFieldsInput = document.getElementById('hf-required-fields');\n emailFieldsInput = document.getElementById('hf-email-fields');\n\n dom.innerHTML = element.value;\n editor = CodeMirror.fromTextArea(element, {\n selectionPointer: true,\n matchTags: { bothTags: true },\n mode: \"htmlmixed\",\n htmlMode: true,\n autoCloseTags: true,\n autoRefresh: true,\n styleActiveLine: true,\n matchBrackets: true\n });\n\n editor.on('changes', debounce(updatePreview, 500));\n editor.on('changes', debounce(updateShadowDOM, 100));\n editor.on('changes', debounce(updateFieldVariables, 500));\n editor.on('blur', updatePreview);\n editor.on('blur', updateShadowDOM);\n editor.on('blur', updateFieldVariables);\n editor.on('blur', updateRequiredFields);\n editor.on('blur', updateEmailFields);\n\n previewFrame.addEventListener('load', setPreviewDom);\n setPreviewDom();\n updateFieldVariables();\n}\n\nfunction setPreviewDom() {\n var frameContent = previewFrame.contentDocument || previewFrame.contentWindow.document;\n previewDom = frameContent.querySelector('.hf-fields-wrap');\n\n if (previewDom) {\n updatePreview();\n }\n}\n\nfunction getFieldVariableName(f) {\n return f.name.replace('[]', '').replace(/\\[(\\w+)\\]/g, '.$1');\n}\n\nfunction updateFieldVariables() {\n var fields = dom.querySelectorAll('input[name], select[name], textarea[name], button[name]');\n var fieldVariables = uniq([].map.call(fields, function (f) {\n return '[' + getFieldVariableName(f) + ']';\n }));\n var wpbody = document.getElementById('wpbody-content');\n\n [].forEach.call(document.querySelectorAll('.hf-field-names'), function (el) {\n // remove existing variables\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n\n var variableElements = fieldVariables.map(function (n) {\n // measure width of actual font size for prettiness\n var sizeEl = document.createElement('span');\n sizeEl.style.visibility = 'hidden';\n sizeEl.innerText = n;\n wpbody.appendChild(sizeEl);\n var width = sizeEl.offsetWidth;\n wpbody.removeChild(sizeEl);\n\n // add input el\n var el = document.createElement('input');\n el.setAttribute('type', 'text');\n el.style.maxWidth = width * 1.1 + 14 + 'px';\n el.setAttribute('value', n);\n el.setAttribute('readonly', true);\n el.setAttribute('onfocus', 'this.select()');\n return el;\n });\n\n variableElements.forEach(function (vel, i, arr) {\n el.appendChild(vel);\n });\n });\n}\n\nfunction updatePreview() {\n var markup = editor.getValue();\n\n // replace template tags\n markup = markup.replace(templateRegex, function (s, m) {\n if (arguments[3]) {\n return arguments[3];\n }\n\n return '';\n });\n\n // update dom\n previewDom.innerHTML = markup;\n previewDom.dispatchEvent(new Event('hf-refresh'));\n}\n\nfunction updateShadowDOM() {\n dom.innerHTML = editor.getValue();\n}\n\nfunction updateRequiredFields() {\n var fields = dom.querySelectorAll('[required]');\n var fieldNames = [].map.call(fields, getFieldVariableName);\n requiredFieldsInput.value = fieldNames.join(',');\n}\n\nfunction updateEmailFields() {\n var fields = dom.querySelectorAll('input[type=\"email\"]');\n var fieldNames = [].map.call(fields, getFieldVariableName);\n emailFieldsInput.value = fieldNames.join(',');\n}\n\nfunction replaceSelection(str) {\n editor.replaceSelection(str);\n editor.focus();\n}\n\nfunction debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this,\n args = arguments;\n var later = function later() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n};\n\nfunction uniq(a) {\n var seen = {};\n return a.filter(function (item) {\n return seen.hasOwnProperty(item) ? false : seen[item] = true;\n });\n}\n\nexports.default = {\n init: init,\n replaceSelection: replaceSelection\n};\n\n},{\"codemirror\":14,\"codemirror/addon/edit/closetag.js\":11,\"codemirror/addon/edit/matchtags\":12,\"codemirror/addon/fold/xml-fold\":13,\"codemirror/mode/css/css\":15,\"codemirror/mode/htmlmixed/htmlmixed\":16,\"codemirror/mode/javascript/javascript\":17,\"codemirror/mode/xml/xml\":18}],10:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar tabs = void 0,\n tabNavs = void 0;\n\nfunction init() {\n tabs = document.querySelectorAll('.hf-tab');\n tabNavs = document.querySelectorAll('#hf-tabs-nav a');\n for (var i = 0; i < tabNavs.length; i++) {\n tabNavs[i].addEventListener('click', open);\n }\n};\n\nfunction open(e) {\n var tabTarget = this.getAttribute('data-tab-target');\n for (var i = 0; i < tabNavs.length; i++) {\n tabNavs[i].classList.toggle('nav-tab-active', tabNavs[i] === this);\n }\n this.blur();\n\n for (var _i = 0; _i < tabs.length; _i++) {\n var tab = tabs[_i];\n tab.classList.toggle('hf-tab-active', tab.getAttribute('data-tab') === tabTarget);\n }\n\n document.title = document.title.replace(document.title.split(' - ').shift(), this.innerText + \" \");\n\n if (window.history) {\n var newUrl = window.location.href;\n newUrl = newUrl.replace(/\\&tab\\=\\w+/, \"\");\n newUrl += \"&tab=\" + tabTarget;\n\n window.history.replaceState({ tab: tabTarget }, document.title, newUrl);\n }\n\n e.preventDefault();\n};\n\nexports.default = {\n init: init,\n open: open\n};\n\n},{}],11:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n/**\n * Tag-closer extension for CodeMirror.\n *\n * This extension adds an \"autoCloseTags\" option that can be set to\n * either true to get the default behavior, or an object to further\n * configure its behavior.\n *\n * These are supported options:\n *\n * `whenClosing` (default true)\n * Whether to autoclose when the '/' of a closing tag is typed.\n * `whenOpening` (default true)\n * Whether to autoclose the tag when the final '>' of an opening\n * tag is typed.\n * `dontCloseTags` (default is empty tags for HTML, none for XML)\n * An array of tag names that should not be autoclosed.\n * `indentTags` (default is block tags for HTML, none for XML)\n * An array of tag names that should, when opened, cause a\n * blank line to be added inside the tag, and the blank line and\n * closing line to be indented.\n *\n * See demos/closetag.html for a usage example.\n */\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n CodeMirror.defineOption(\"autoCloseTags\", false, function(cm, val, old) {\n if (old != CodeMirror.Init && old)\n cm.removeKeyMap(\"autoCloseTags\");\n if (!val) return;\n var map = {name: \"autoCloseTags\"};\n if (typeof val != \"object\" || val.whenClosing)\n map[\"'/'\"] = function(cm) { return autoCloseSlash(cm); };\n if (typeof val != \"object\" || val.whenOpening)\n map[\"'>'\"] = function(cm) { return autoCloseGT(cm); };\n cm.addKeyMap(map);\n });\n\n var htmlDontClose = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\",\n \"source\", \"track\", \"wbr\"];\n var htmlIndent = [\"applet\", \"blockquote\", \"body\", \"button\", \"div\", \"dl\", \"fieldset\", \"form\", \"frameset\", \"h1\", \"h2\", \"h3\", \"h4\",\n \"h5\", \"h6\", \"head\", \"html\", \"iframe\", \"layer\", \"legend\", \"object\", \"ol\", \"p\", \"select\", \"table\", \"ul\"];\n\n function autoCloseGT(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n var ranges = cm.listSelections(), replacements = [];\n var opt = cm.getOption(\"autoCloseTags\");\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n if (inner.mode.name != \"xml\" || !state.tagName) return CodeMirror.Pass;\n\n var html = inner.mode.configuration == \"html\";\n var dontCloseTags = (typeof opt == \"object\" && opt.dontCloseTags) || (html && htmlDontClose);\n var indentTags = (typeof opt == \"object\" && opt.indentTags) || (html && htmlIndent);\n\n var tagName = state.tagName;\n if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch);\n var lowerTagName = tagName.toLowerCase();\n // Don't process the '>' at the end of an end-tag or self-closing tag\n if (!tagName ||\n tok.type == \"string\" && (tok.end != pos.ch || !/[\\\"\\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) ||\n tok.type == \"tag\" && state.type == \"closeTag\" ||\n tok.string.indexOf(\"/\") == (tok.string.length - 1) || // match something like <someTagName />\n dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 ||\n closingTagExists(cm, tagName, pos, state, true))\n return CodeMirror.Pass;\n\n var indent = indentTags && indexOf(indentTags, lowerTagName) > -1;\n replacements[i] = {indent: indent,\n text: \">\" + (indent ? \"\\n\\n\" : \"\") + \"</\" + tagName + \">\",\n newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)};\n }\n\n var dontIndentOnAutoClose = (typeof opt == \"object\" && opt.dontIndentOnAutoClose);\n for (var i = ranges.length - 1; i >= 0; i--) {\n var info = replacements[i];\n cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, \"+insert\");\n var sel = cm.listSelections().slice(0);\n sel[i] = {head: info.newPos, anchor: info.newPos};\n cm.setSelections(sel);\n if (!dontIndentOnAutoClose && info.indent) {\n cm.indentLine(info.newPos.line, null, true);\n cm.indentLine(info.newPos.line + 1, null, true);\n }\n }\n }\n\n function autoCloseCurrent(cm, typingSlash) {\n var ranges = cm.listSelections(), replacements = [];\n var head = typingSlash ? \"/\" : \"</\";\n var opt = cm.getOption(\"autoCloseTags\");\n var dontIndentOnAutoClose = (typeof opt == \"object\" && opt.dontIndentOnSlash);\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n if (typingSlash && (tok.type == \"string\" || tok.string.charAt(0) != \"<\" ||\n tok.start != pos.ch - 1))\n return CodeMirror.Pass;\n // Kludge to get around the fact that we are not in XML mode\n // when completing in JS/CSS snippet in htmlmixed mode. Does not\n // work for other XML embedded languages (there is no general\n // way to go from a mixed mode to its current XML state).\n var replacement;\n if (inner.mode.name != \"xml\") {\n if (cm.getMode().name == \"htmlmixed\" && inner.mode.name == \"javascript\")\n replacement = head + \"script\";\n else if (cm.getMode().name == \"htmlmixed\" && inner.mode.name == \"css\")\n replacement = head + \"style\";\n else\n return CodeMirror.Pass;\n } else {\n if (!state.context || !state.context.tagName ||\n closingTagExists(cm, state.context.tagName, pos, state))\n return CodeMirror.Pass;\n replacement = head + state.context.tagName;\n }\n if (cm.getLine(pos.line).charAt(tok.end) != \">\") replacement += \">\";\n replacements[i] = replacement;\n }\n cm.replaceSelections(replacements);\n ranges = cm.listSelections();\n if (!dontIndentOnAutoClose) {\n for (var i = 0; i < ranges.length; i++)\n if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line)\n cm.indentLine(ranges[i].head.line);\n }\n }\n\n function autoCloseSlash(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n return autoCloseCurrent(cm, true);\n }\n\n CodeMirror.commands.closeTag = function(cm) { return autoCloseCurrent(cm); };\n\n function indexOf(collection, elt) {\n if (collection.indexOf) return collection.indexOf(elt);\n for (var i = 0, e = collection.length; i < e; ++i)\n if (collection[i] == elt) return i;\n return -1;\n }\n\n // If xml-fold is loaded, we use its functionality to try and verify\n // whether a given tag is actually unclosed.\n function closingTagExists(cm, tagName, pos, state, newTag) {\n if (!CodeMirror.scanForClosingTag) return false;\n var end = Math.min(cm.lastLine() + 1, pos.line + 500);\n var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end);\n if (!nextClose || nextClose.tag != tagName) return false;\n var cx = state.context;\n // If the immediate wrapping context contains onCx instances of\n // the same tag, a closing tag only exists if there are at least\n // that many closing tags of that type following.\n for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx;\n pos = nextClose.to;\n for (var i = 1; i < onCx; i++) {\n var next = CodeMirror.scanForClosingTag(cm, pos, null, end);\n if (!next || next.tag != tagName) return false;\n pos = next.to;\n }\n return true;\n }\n});\n\n},{\"../../lib/codemirror\":14,\"../fold/xml-fold\":13}],12:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"matchTags\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init) {\n cm.off(\"cursorActivity\", doMatchTags);\n cm.off(\"viewportChange\", maybeUpdateMatch);\n clear(cm);\n }\n if (val) {\n cm.state.matchBothTags = typeof val == \"object\" && val.bothTags;\n cm.on(\"cursorActivity\", doMatchTags);\n cm.on(\"viewportChange\", maybeUpdateMatch);\n doMatchTags(cm);\n }\n });\n\n function clear(cm) {\n if (cm.state.tagHit) cm.state.tagHit.clear();\n if (cm.state.tagOther) cm.state.tagOther.clear();\n cm.state.tagHit = cm.state.tagOther = null;\n }\n\n function doMatchTags(cm) {\n cm.state.failedTagMatch = false;\n cm.operation(function() {\n clear(cm);\n if (cm.somethingSelected()) return;\n var cur = cm.getCursor(), range = cm.getViewport();\n range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to);\n var match = CodeMirror.findMatchingTag(cm, cur, range);\n if (!match) return;\n if (cm.state.matchBothTags) {\n var hit = match.at == \"open\" ? match.open : match.close;\n if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: \"CodeMirror-matchingtag\"});\n }\n var other = match.at == \"close\" ? match.open : match.close;\n if (other)\n cm.state.tagOther = cm.markText(other.from, other.to, {className: \"CodeMirror-matchingtag\"});\n else\n cm.state.failedTagMatch = true;\n });\n }\n\n function maybeUpdateMatch(cm) {\n if (cm.state.failedTagMatch) doMatchTags(cm);\n }\n\n CodeMirror.commands.toMatchingTag = function(cm) {\n var found = CodeMirror.findMatchingTag(cm, cm.getCursor());\n if (found) {\n var other = found.at == \"close\" ? found.open : found.close;\n if (other) cm.extendSelection(other.to, other.from);\n }\n };\n});\n\n},{\"../../lib/codemirror\":14,\"../fold/xml-fold\":13}],13:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var Pos = CodeMirror.Pos;\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }\n\n var nameStartChar = \"A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n var nameChar = nameStartChar + \"\\-\\:\\.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n var xmlTagStart = new RegExp(\"<(/?)([\" + nameStartChar + \"][\" + nameChar + \"]*)\", \"g\");\n\n function Iter(cm, line, ch, range) {\n this.line = line; this.ch = ch;\n this.cm = cm; this.text = cm.getLine(line);\n this.min = range ? Math.max(range.from, cm.firstLine()) : cm.firstLine();\n this.max = range ? Math.min(range.to - 1, cm.lastLine()) : cm.lastLine();\n }\n\n function tagAt(iter, ch) {\n var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch));\n return type && /\\btag\\b/.test(type);\n }\n\n function nextLine(iter) {\n if (iter.line >= iter.max) return;\n iter.ch = 0;\n iter.text = iter.cm.getLine(++iter.line);\n return true;\n }\n function prevLine(iter) {\n if (iter.line <= iter.min) return;\n iter.text = iter.cm.getLine(--iter.line);\n iter.ch = iter.text.length;\n return true;\n }\n\n function toTagEnd(iter) {\n for (;;) {\n var gt = iter.text.indexOf(\">\", iter.ch);\n if (gt == -1) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n function toTagStart(iter) {\n for (;;) {\n var lt = iter.ch ? iter.text.lastIndexOf(\"<\", iter.ch - 1) : -1;\n if (lt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; }\n xmlTagStart.lastIndex = lt;\n iter.ch = lt;\n var match = xmlTagStart.exec(iter.text);\n if (match && match.index == lt) return match;\n }\n }\n\n function toNextTag(iter) {\n for (;;) {\n xmlTagStart.lastIndex = iter.ch;\n var found = xmlTagStart.exec(iter.text);\n if (!found) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; }\n iter.ch = found.index + found[0].length;\n return found;\n }\n }\n function toPrevTag(iter) {\n for (;;) {\n var gt = iter.ch ? iter.text.lastIndexOf(\">\", iter.ch - 1) : -1;\n if (gt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n\n function findMatchingClose(iter, tag) {\n var stack = [];\n for (;;) {\n var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0);\n if (!next || !(end = toTagEnd(iter))) return;\n if (end == \"selfClose\") continue;\n if (next[1]) { // closing tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == next[2])) return {\n tag: next[2],\n from: Pos(startLine, startCh),\n to: Pos(iter.line, iter.ch)\n };\n } else { // opening tag\n stack.push(next[2]);\n }\n }\n }\n function findMatchingOpen(iter, tag) {\n var stack = [];\n for (;;) {\n var prev = toPrevTag(iter);\n if (!prev) return;\n if (prev == \"selfClose\") { toTagStart(iter); continue; }\n var endLine = iter.line, endCh = iter.ch;\n var start = toTagStart(iter);\n if (!start) return;\n if (start[1]) { // closing tag\n stack.push(start[2]);\n } else { // opening tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == start[2])) return {\n tag: start[2],\n from: Pos(iter.line, iter.ch),\n to: Pos(endLine, endCh)\n };\n }\n }\n }\n\n CodeMirror.registerHelper(\"fold\", \"xml\", function(cm, start) {\n var iter = new Iter(cm, start.line, 0);\n for (;;) {\n var openTag = toNextTag(iter)\n if (!openTag || iter.line != start.line) return\n var end = toTagEnd(iter)\n if (!end) return\n if (!openTag[1] && end != \"selfClose\") {\n var startPos = Pos(iter.line, iter.ch);\n var endPos = findMatchingClose(iter, openTag[2]);\n return endPos && cmp(endPos.from, startPos) > 0 ? {from: startPos, to: endPos.from} : null\n }\n }\n });\n CodeMirror.findMatchingTag = function(cm, pos, range) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n if (iter.text.indexOf(\">\") == -1 && iter.text.indexOf(\"<\") == -1) return;\n var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch);\n var start = end && toTagStart(iter);\n if (!end || !start || cmp(iter, pos) > 0) return;\n var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]};\n if (end == \"selfClose\") return {open: here, close: null, at: \"open\"};\n\n if (start[1]) { // closing tag\n return {open: findMatchingOpen(iter, start[2]), close: here, at: \"close\"};\n } else { // opening tag\n iter = new Iter(cm, to.line, to.ch, range);\n return {open: here, close: findMatchingClose(iter, start[2]), at: \"open\"};\n }\n };\n\n CodeMirror.findEnclosingTag = function(cm, pos, range, tag) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n for (;;) {\n var open = findMatchingOpen(iter, tag);\n if (!open) break;\n var forward = new Iter(cm, pos.line, pos.ch, range);\n var close = findMatchingClose(forward, open.tag);\n if (close) return {open: open, close: close};\n }\n };\n\n // Used by addon/edit/closetag.js\n CodeMirror.scanForClosingTag = function(cm, pos, name, end) {\n var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);\n return findMatchingClose(iter, name);\n };\n});\n\n},{\"../../lib/codemirror\":14}],14:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// This is CodeMirror (http://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n// Kludges for bugs and behavior differences that can't be feature\n// detected are enabled based on userAgent etc sniffing.\nvar userAgent = navigator.userAgent;\nvar platform = navigator.platform;\n\nvar gecko = /gecko\\/\\d/i.test(userAgent);\nvar ie_upto10 = /MSIE \\d/.test(userAgent);\nvar ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\nvar edge = /Edge\\/(\\d+)/.exec(userAgent);\nvar ie = ie_upto10 || ie_11up || edge;\nvar ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\nvar webkit = !edge && /WebKit\\//.test(userAgent);\nvar qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\nvar chrome = !edge && /Chrome\\//.test(userAgent);\nvar presto = /Opera\\//.test(userAgent);\nvar safari = /Apple Computer/.test(navigator.vendor);\nvar mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\nvar phantom = /PhantomJS/.test(userAgent);\n\nvar ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\nvar android = /Android/.test(userAgent);\n// This is woefully incomplete. Suggestions for alternative methods welcome.\nvar mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\nvar mac = ios || /Mac/.test(platform);\nvar chromeOS = /\\bCrOS\\b/.test(userAgent);\nvar windows = /win/i.test(platform);\n\nvar presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\nif (presto_version) { presto_version = Number(presto_version[1]); }\nif (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n// Some browsers use the wrong event properties to signal cmd/ctrl on OS X\nvar flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\nvar captureRightClick = gecko || (ie && ie_version >= 9);\n\nfunction classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\nvar rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n};\n\nfunction removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n}\n\nfunction removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n}\n\nfunction elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n}\n// wrapper for elt, which removes the elt from the accessibility tree\nfunction eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n}\n\nvar range;\nif (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n}; }\nelse { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n}; }\n\nfunction contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n}\n\nfunction activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n try {\n activeElement = document.activeElement;\n } catch(e) {\n activeElement = document.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n}\n\nfunction addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n}\nfunction joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n}\n\nvar selectInput = function(node) { node.select(); };\nif (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\nelse if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\nfunction bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n}\n\nfunction copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n}\n\nvar Delayed = function() {this.id = null;};\nDelayed.prototype.set = function (ms, f) {\n clearTimeout(this.id);\n this.id = setTimeout(f, ms);\n};\n\nfunction indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n}\n\n// Number of pixels added to scroller and sizer to hide scrollbar\nvar scrollerGap = 30;\n\n// Returned or thrown by various protocols to signal 'I'm not\n// handling this'.\nvar Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n// Reused option objects for setSelection & friends\nvar sel_dontScroll = {scroll: false};\nvar sel_mouse = {origin: \"*mouse\"};\nvar sel_move = {origin: \"+move\"};\n\n// The inverse of countColumn -- find the offset that corresponds to\n// a particular column.\nfunction findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n}\n\nvar spaceStrs = [\"\"];\nfunction spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n}\n\nfunction lst(arr) { return arr[arr.length-1] }\n\nfunction map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n}\n\nfunction insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n}\n\nfunction nothing() {}\n\nfunction createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n}\n\nvar nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nfunction isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n}\nfunction isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n}\n\nfunction isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n}\n\n// Extending unicode characters. A series of a non-extending char +\n// any number of extending chars is treated as a single unit as far\n// as editing and measuring is concerned. This is not fully correct,\n// since some scripts/fonts/browsers also treat other configurations\n// of code points as a group.\nvar extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\nfunction isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\nfunction skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n}\n\n// Returns the value from the range [`from`; `to`] that satisfies\n// `pred` and is closest to `from`. Assumes that at least `to`\n// satisfies `pred`. Supports `from` being greater than `to`.\nfunction findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n}\n\n// The display handles the DOM integration, both for input reading\n// and content drawing. It holds references to DOM nodes and\n// display-related state.\n\nfunction Display(place, doc, input) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n input.init(d);\n}\n\n// Find the line object corresponding to the given line number.\nfunction getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n}\n\n// Get the part of a document between two positions, as an array of\n// strings.\nfunction getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n}\n// Get the lines between from and to, as array of strings.\nfunction getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n}\n\n// Update the height of a line, propagating the height change\n// upwards to parent nodes.\nfunction updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n}\n\n// Given a line object, find its line number by walking up through\n// its parent links.\nfunction lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n}\n\n// Find the line at the given vertical position, using the height\n// information in the document tree.\nfunction lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n}\n\nfunction isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\nfunction lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n}\n\n// A Pos instance represents a position within the text.\nfunction Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n}\n\n// Compare two positions, return 0 if they are the same, a negative\n// number when a is less, and a positive number otherwise.\nfunction cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\nfunction equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\nfunction copyPos(x) {return Pos(x.line, x.ch)}\nfunction maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\nfunction minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n// Most of the external API clips given positions to make sure they\n// actually exist within the document.\nfunction clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\nfunction clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n}\nfunction clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n}\nfunction clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n}\n\n// Optimize some code when these features are not used.\nvar sawReadOnlySpans = false;\nvar sawCollapsedSpans = false;\n\nfunction seeReadOnlySpans() {\n sawReadOnlySpans = true;\n}\n\nfunction seeCollapsedSpans() {\n sawCollapsedSpans = true;\n}\n\n// TEXTMARKER SPANS\n\nfunction MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n}\n\n// Search an array of spans for a span matching the given marker.\nfunction getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n}\n// Remove a span from an array, returning undefined if no spans are\n// left (we don't store arrays for lines without spans).\nfunction removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n}\n// Add a span to a line.\nfunction addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n}\n\n// Used for the algorithm that adjusts markers for a change in the\n// document. These functions cut an array of spans at a given\n// character position, returning an array of remaining chunks (or\n// undefined if nothing remains).\nfunction markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n}\nfunction markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n}\n\n// Given a change object, compute the new set of marker spans that\n// cover the line in which the change took place. Removes spans\n// entirely within the change, reconnects spans belonging to the\n// same marker that appear on both sides of the change, and cuts off\n// spans partially within the change. Returns an array of span\n// arrays with one element for each line in (after) the change.\nfunction stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n}\n\n// Remove spans that are empty and don't have a clearWhenEmpty\n// option of false.\nfunction clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n}\n\n// Used to 'clip' out readOnly ranges when making a change.\nfunction removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n}\n\n// Connect or disconnect spans from a line.\nfunction detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n}\nfunction attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n}\n\n// Helpers used when computing which overlapping collapsed span\n// counts as the larger one.\nfunction extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\nfunction extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n// Returns a number indicating which of two overlapping collapsed\n// spans is larger (and thus includes the other). Falls back to\n// comparing ids when the spans cover exactly the same range.\nfunction compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n}\n\n// Find out whether a line ends or starts in a collapsed span. If\n// so, return the marker for that span.\nfunction collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n}\nfunction collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\nfunction collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\nfunction collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n}\n\n// Test whether there exists a collapsed span that partially\n// overlaps (covers the start or end, but not both) of a new span.\n// Such overlap is not allowed.\nfunction conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {\n var line = getLine(doc, lineNo$$1);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n}\n\n// A visual line is a line as drawn on the screen. Folding, for\n// example, can cause multiple logical lines to appear on the same\n// visual line. This finds the start of the visual line that the\n// given line is part of (usually that is the line itself).\nfunction visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n}\n\nfunction visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n}\n\n// Returns an array of logical lines that continue the visual line\n// started by the argument, or undefined if there are no such lines.\nfunction visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n}\n\n// Get the line number of the start of the visual line that the\n// given line number is part of.\nfunction visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n}\n\n// Get the line number of the start of the next visual line after\n// the given line.\nfunction visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n}\n\n// Compute whether a line is hidden. Lines count as hidden when they\n// are part of a visual line that starts with another line, or when\n// they are entirely covered by collapsed, non-widget span.\nfunction lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n}\nfunction lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n}\n\n// Find the height above the given line.\nfunction heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n}\n\n// Compute the character length of a line, taking into account\n// collapsed ranges (see markText) that might hide parts, and join\n// other lines onto it.\nfunction lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n}\n\n// Find the longest line in the document.\nfunction findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n}\n\n// BIDI HELPERS\n\nfunction iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n}\n\nvar bidiOther = null;\nfunction getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n}\n\n// Bidirectional ordering algorithm\n// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n// that this (partially) implements.\n\n// One-char codes used for character types:\n// L (L): Left-to-Right\n// R (R): Right-to-Left\n// r (AL): Right-to-Left Arabic\n// 1 (EN): European Number\n// + (ES): European Number Separator\n// % (ET): European Number Terminator\n// n (AN): Arabic Number\n// , (CS): Common Number Separator\n// m (NSM): Non-Spacing Mark\n// b (BN): Boundary Neutral\n// s (B): Paragraph Separator\n// t (S): Segment Separator\n// w (WS): Whitespace\n// N (ON): Other Neutrals\n\n// Returns null if characters are ordered as they appear\n// (left-to-right), or an array of sections ({from, to, level}\n// objects) in the order in which they occur visually.\nvar bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n})();\n\n// Get the bidi ordering for the given line (and cache it). Returns\n// false for lines that are fully left-to-right, and an array of\n// BidiSpan objects otherwise.\nfunction getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n}\n\n// EVENT HANDLING\n\n// Lightweight event framework. on/off also work on DOM nodes,\n// registering native DOM handlers.\n\nvar noHandlers = [];\n\nvar on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers || (emitter._handlers = {});\n map$$1[type] = (map$$1[type] || noHandlers).concat(f);\n }\n};\n\nfunction getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n}\n\nfunction off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n}\n\nfunction signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n}\n\n// The DOM events that CodeMirror handles can be overridden by\n// registering a (non-DOM) handler on the editor for the event name,\n// and preventDefault-ing the event in that handler.\nfunction signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n}\n\nfunction signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n}\n\nfunction hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n}\n\n// Add on and off methods to a constructor's prototype, to make\n// registering events on such objects more convenient.\nfunction eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n}\n\n// Due to the fact that we still support jurassic IE versions, some\n// compatibility wrappers are needed.\n\nfunction e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n}\nfunction e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n}\nfunction e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n}\nfunction e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\nfunction e_target(e) {return e.target || e.srcElement}\nfunction e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n}\n\n// Detect drag-and-drop\nvar dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n}();\n\nvar zwspSupported;\nfunction zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n}\n\n// Feature-detect IE's crummy client rect reporting for bidi text\nvar badBidiRects;\nfunction hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n}\n\n// See if \"\".split is the broken IE version, if so, provide an\n// alternative way to split lines.\nvar splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n} : function (string) { return string.split(/\\r\\n?|\\n/); };\n\nvar hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n} : function (te) {\n var range$$1;\n try {range$$1 = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range$$1 || range$$1.parentElement() != te) { return false }\n return range$$1.compareEndPoints(\"StartToEnd\", range$$1) != 0\n};\n\nvar hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n})();\n\nvar badZoomedRects = null;\nfunction hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n}\n\n// Known modes, by name and by MIME\nvar modes = {};\nvar mimeModes = {};\n\n// Extra arguments are stored as the mode's dependencies, which is\n// used by (legacy) mechanisms like loadmode.js to automatically\n// load a mode. (Preferred mechanism is the require/define calls.)\nfunction defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n}\n\nfunction defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n}\n\n// Given a MIME type, a {name, ...options} config object, or a name\n// string, return a mode config object.\nfunction resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n}\n\n// Given a mode spec (anything that resolveMode accepts), find and\n// initialize an actual mode object.\nfunction getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n}\n\n// This can be used to attach properties to mode objects from\n// outside the actual mode definition.\nvar modeExtensions = {};\nfunction extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n}\n\nfunction copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n}\n\n// Given a mode and a state (for that mode), find the inner mode and\n// state at the position that the state refers to.\nfunction innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n}\n\nfunction startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n}\n\n// STRING STREAM\n\n// Fed to the mode parsers, provides helper functions to make\n// parsers more succinct.\n\nvar StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n};\n\nStringStream.prototype.eol = function () {return this.pos >= this.string.length};\nStringStream.prototype.sol = function () {return this.pos == this.lineStart};\nStringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\nStringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n};\nStringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n};\nStringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n};\nStringStream.prototype.eatSpace = function () {\n var this$1 = this;\n\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }\n return this.pos > start\n};\nStringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\nStringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n};\nStringStream.prototype.backUp = function (n) {this.pos -= n;};\nStringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n};\nStringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n};\nStringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n};\nStringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\nStringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n};\nStringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n};\nStringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n};\n\nvar SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n};\n\nvar Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n};\n\nContext.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n};\n\nContext.prototype.baseToken = function (n) {\n var this$1 = this;\n\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this$1.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n};\n\nContext.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n};\n\nContext.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n};\n\nContext.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n};\n\n\n// Compute a style array (an array starting with a mode generation\n// -- for invalidation -- followed by pairs of end positions and\n// style strings), which is used to highlight the tokens on the\n// line.\nfunction highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n}\n\nfunction getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n}\n\nfunction getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n}\n\n// Lightweight form of highlight -- proceed over this line and\n// update state, but don't save a style array. Used for lines that\n// aren't currently visible.\nfunction processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n}\n\nfunction callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n}\n\nfunction readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n}\n\nvar Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n};\n\n// Utility for getTokenAt and getLineTokens\nfunction takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n}\n\nfunction extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n}\n\n// Run the given mode's parser over a line, calling f for each token.\nfunction runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n}\n\n// Finds the line to start with when starting a parse. Tries to\n// find a line with a stateAfter, so that it can start with a\n// valid state. If that fails, it returns the line with the\n// smallest indentation, which tends to need the least context to\n// parse correctly.\nfunction findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n}\n\nfunction retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n}\n\n// LINE DATA STRUCTURE\n\n// Line objects. These hold state related to a line, including\n// highlighting info (the styles array).\nvar Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n};\n\nLine.prototype.lineNo = function () { return lineNo(this) };\neventMixin(Line);\n\n// Change the content (text, markers) of a line. Automatically\n// invalidates cached information and tries to re-estimate the\n// line's height.\nfunction updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n}\n\n// Detach a line from the document tree and its markers.\nfunction cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n}\n\n// Convert a style as returned by a mode (either null, or a string\n// containing one or more styles) to a CSS style. This is cached,\n// and also looks for line-wide styles.\nvar styleToClassCache = {};\nvar styleToClassCacheWithMode = {};\nfunction interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n}\n\n// Render the DOM representation of the text of a line. Also builds\n// up a 'line map', which points at the DOM nodes that represent\n// specific stretches of text, and is used by the measuring code.\n// The returned object contains the DOM node, this map, and\n// information about line-wide styles that were set by the mode.\nfunction buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: (ie || webkit) && cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n}\n\nfunction defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n}\n\n// Build up the DOM representation for a single token, and add it to\n// the line map. Takes care to render special characters separately.\nfunction buildToken(builder, text, style, startStyle, endStyle, title, css) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (title) { token.title = title; }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n}\n\nfunction splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n}\n\n// Work around nonsense dimensions being reported for stretches of\n// right-to-left text.\nfunction buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, title, css) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n}\n\nfunction buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n}\n\n// Outputs a number of spans to make up a line, taking highlighting\n// and marked text into account.\nfunction insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = title = css = \"\";\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n if (m.title && !title) { title = m.title; }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", title, css);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n}\n\n\n// These objects are used to represent the visible (currently drawn)\n// part of the document. A LineView may correspond to multiple\n// logical lines, if those are connected by collapsed ranges.\nfunction LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n}\n\n// Create a range of LineView objects for the given lines.\nfunction buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n}\n\nvar operationGroup = null;\n\nfunction pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n}\n\nfunction fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n}\n\nfunction finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n}\n\nvar orphanDelayedCallbacks = null;\n\n// Often, we want to signal events at a point where we are in the\n// middle of some work, but don't want the handler to start calling\n// other methods on the editor, which might be in an inconsistent\n// state or simply not expect any other events to happen.\n// signalLater looks whether there are any handlers, and schedules\n// them to be executed when the last operation ends, or, if no\n// operation is active, when a timeout fires.\nfunction signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n}\n\nfunction fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n}\n\n// When an aspect of a line changes, a string is added to\n// lineView.changes. This updates the relevant part of the line's\n// DOM structure.\nfunction updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n}\n\n// Lines with gutter elements, widgets or a background class need to\n// be wrapped, and have the extra elements added to the wrapper div\nfunction ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n}\n\nfunction updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n}\n\n// Wrapper around buildLineContent which will reuse the structure\n// in display.externalMeasured when possible.\nfunction getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n}\n\n// Redraw the line's text. Interacts with the background and text\n// classes because the mode may output tokens that influence these\n// classes.\nfunction updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n}\n\nfunction updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n}\n\nfunction updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {\n var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n}\n\nfunction updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (node.className == \"CodeMirror-linewidget\")\n { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n}\n\n// Build a line's DOM representation from scratch\nfunction buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n}\n\n// A lineView may contain multiple logical lines (when merged by\n// collapsed spans). The widgets for all of them need to be drawn.\nfunction insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n}\n\nfunction insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n}\n\nfunction positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n}\n\nfunction widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n}\n\n// Return true when the given mouse event happened in a widget\nfunction eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n}\n\n// POSITION MEASUREMENT\n\nfunction paddingTop(display) {return display.lineSpace.offsetTop}\nfunction paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\nfunction paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n}\n\nfunction scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\nfunction displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n}\nfunction displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n}\n\n// Ensure the lineView.wrapping.heights array is populated. This is\n// an array of bottom offsets for the lines that make up a drawn\n// line. When lineWrapping is on, there might be more than one\n// height.\nfunction ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n}\n\n// Find a line map (mapping character offsets to text nodes) and a\n// measurement cache for the given line number. (A line view might\n// contain multiple lines when collapsed ranges are present.)\nfunction mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n}\n\n// Render a line into the hidden node display.externalMeasured. Used\n// when measurement is needed for a line that's not in the viewport.\nfunction updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n}\n\n// Get a {top, bottom, left, right} box (in line-local coordinates)\n// for a given character.\nfunction measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n}\n\n// Find a line view that corresponds to the given line number.\nfunction findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n}\n\n// Measurement can be split in two steps, the set-up work that\n// applies to the whole line, and the measurement of the actual\n// character. Functions like coordsChar, that need to do a lot of\n// measurements in a row, can thus ensure that the set-up work is\n// only done once.\nfunction prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n}\n\n// Given a prepared measurement object, measures the position of an\n// actual character (or fetches it from the cache).\nfunction measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n}\n\nvar nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\nfunction nodeAndOffsetInLineMap(map$$1, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map$$1.length; i += 3) {\n mStart = map$$1[i];\n mEnd = map$$1[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map$$1[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {\n node = map$$1[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {\n node = map$$1[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n}\n\nfunction getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n}\n\nfunction measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n}\n\n// Work around problem with bounding client rects on ranges being\n// returned incorrectly when zoomed on IE10 and below.\nfunction maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n}\n\nfunction clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n}\n\nfunction clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n}\n\nfunction clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n}\n\nfunction pageScrollX() {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n}\nfunction pageScrollY() {\n if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n return window.pageYOffset || (document.documentElement || document.body).scrollTop\n}\n\nfunction widgetTopHeight(lineObj) {\n var height = 0;\n if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n { height += widgetHeight(lineObj.widgets[i]); } } }\n return height\n}\n\n// Converts a {top, bottom, left, right} box from line-local\n// coordinates into another coordinate system. Context may be one of\n// \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n// or \"page\".\nfunction intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n}\n\n// Coverts a box from \"div\" coords to another coordinate system.\n// Context may be \"window\", \"page\", \"div\", or \"local\"./null.\nfunction fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n}\n\nfunction charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n}\n\n// Returns a box for a given cursor position, which may have an\n// 'other' property containing the position of the secondary cursor\n// on a bidi boundary.\n// A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n// and after `char - 1` in writing order of `char - 1`\n// A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n// and before `char` in writing order of `char`\n// Examples (upper-case letters are RTL, lower-case are LTR):\n// Pos(0, 1, ...)\n// before after\n// ab a|b a|b\n// aB a|B aB|\n// Ab |Ab A|b\n// AB B|A B|A\n// Every position after the last character on a line is considered to stick\n// to the last character on the line.\nfunction cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n}\n\n// Used to cheaply estimate the coordinates for a position. Used for\n// intermediate scroll updates.\nfunction estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n}\n\n// Positions returned by coordsChar contain some extra information.\n// xRel is the relative x position of the input coordinates compared\n// to the found position (so xRel > 0 means the coordinates are to\n// the right of the character position, for example). When outside\n// is true, that means the coordinates lie outside the line's\n// vertical range.\nfunction PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = true; }\n return pos\n}\n\n// Compute the character position closest to the given coordinates.\n// Input must be lineSpace-local (\"div\" coordinate system).\nfunction coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0));\n if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n}\n\nfunction wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n}\n\nfunction wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n}\n\n// Returns true if the given side of a box is after the given\n// coordinates, in top-to-bottom, left-to-right order.\nfunction boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n}\n\nfunction coordsCharInner(cm, lineObj, lineNo$$1, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight$$1 = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top || y >= coords.bottom;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)\n}\n\nfunction coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n}\n\nfunction coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n}\n\nvar measureText;\n// Compute the default text height.\nfunction textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n}\n\n// Compute the default character width.\nfunction charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor]);\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n}\n\n// Do a bulk-read of the DOM positions and sizes needed to draw the\n// view, so that we don't interleave reading and writing to the DOM.\nfunction getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[cm.options.gutters[i]] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n}\n\n// Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n// but using getBoundingClientRect to get a sub-pixel-accurate\n// result.\nfunction compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n}\n\n// Returns a function that estimates the height of a line, to use as\n// first approximation until the line becomes visible (and is thus\n// properly measurable).\nfunction estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n}\n\nfunction estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n}\n\n// Given a mouse event, find the corresponding position. If liberal\n// is false, it checks whether a gutter or scrollbar was clicked,\n// and returns null if it was. forRect is used by rectangular\n// selections, and tries to estimate a character position even for\n// coordinates beyond the right of the text.\nfunction posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n}\n\n// Find the view element corresponding to a given line. Return null\n// when the line isn't visible.\nfunction findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n}\n\nfunction updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n}\n\nfunction prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range$$1 = doc.sel.ranges[i];\n if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }\n var collapsed = range$$1.empty();\n if (collapsed || cm.options.showCursorWhenSelecting)\n { drawSelectionCursor(cm, range$$1.head, curFragment); }\n if (!collapsed)\n { drawSelectionRange(cm, range$$1, selFragment); }\n }\n return result\n}\n\n// Draws a cursor for the given range\nfunction drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n}\n\nfunction cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n// Draws the given range as a highlighted selection\nfunction drawSelectionRange(cm, range$$1, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range$$1.from(), sTo = range$$1.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n}\n\n// Cursor-blinking\nfunction restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\"; },\n cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n}\n\nfunction ensureFocus(cm) {\n if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n}\n\nfunction delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n onBlur(cm);\n } }, 100);\n}\n\nfunction onFocus(cm, e) {\n if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n}\nfunction onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n}\n\n// Read the actual heights of the rendered lines, and update their\n// stored heights to match.\nfunction updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], height = (void 0);\n if (cur.hidden) { continue }\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n }\n var diff = cur.line.height - height;\n if (height < 2) { height = textHeight(display); }\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n }\n}\n\n// Read and store the height of line widgets associated with the\n// given line.\nfunction updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n}\n\n// Compute the lines that are visible in a given viewport (defaults\n// the the current scroll position). viewport may contain top,\n// height, and ensure (see op.scrollToPos) properties.\nfunction visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n}\n\n// Re-align line numbers and gutter marks to compensate for\n// horizontal scrolling.\nfunction alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n}\n\n// Used to ensure that the line number gutter is still the right\n// size for the current document size. Returns true when an update\n// is needed.\nfunction maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm);\n return true\n }\n return false\n}\n\n// SCROLLING THINGS INTO VIEW\n\n// If an editor sits on the top or bottom of the window, partially\n// scrolled out of view, this ensures that the cursor is visible.\nfunction maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n}\n\n// Scroll a given position into view (immediately), verifying that\n// it actually became visible (as line heights are accurately\n// measured, the position of something may 'drift' during drawing).\nfunction scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n}\n\n// Scroll a given set of coordinates into view (immediately).\nfunction scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n}\n\n// Calculate a new scroll position needed to scroll the given\n// rectangle into view. Returns an object with scrollTop and\n// scrollLeft properties. When these are undefined, the\n// vertical/horizontal position does not need to be adjusted.\nfunction calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n}\n\n// Store a relative adjustment to the scroll position in the current\n// operation (to be applied when the operation finishes).\nfunction addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n}\n\n// Make sure that at the end of the operation the current cursor is\n// shown.\nfunction ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n}\n\nfunction scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n}\n\nfunction scrollToRange(cm, range$$1) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range$$1;\n}\n\n// When an operation has its scrollToPos property set, and another\n// scroll action is applied before the end of the operation, this\n// 'simulates' scrolling that position into view in a cheap way, so\n// that the effect of intermediate scroll commands is not ignored.\nfunction resolveScrollToPos(cm) {\n var range$$1 = cm.curOp.scrollToPos;\n if (range$$1) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);\n scrollToCoordsRange(cm, from, to, range$$1.margin);\n }\n}\n\nfunction scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n}\n\n// Sync the scrollable area and scrollbars, ensure the viewport\n// covers the visible area.\nfunction updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n}\n\nfunction setScrollTop(cm, val, forceScroll) {\n val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n}\n\n// Sync scroller and scrollbar, ensure the gutter elements are\n// aligned.\nfunction setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n}\n\n// SCROLLBARS\n\n// Prepare DOM reads needed to update the scrollbars. Done in one\n// shot to minimize update/measure roundtrips.\nfunction measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n}\n\nvar NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n};\n\nNativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n};\n\nNativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n};\n\nNativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n};\n\nNativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n};\n\nNativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt$$1 = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt$$1 != bar) { bar.style.pointerEvents = \"none\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n};\n\nNativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n};\n\nvar NullScrollbars = function () {};\n\nNullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\nNullScrollbars.prototype.setScrollLeft = function () {};\nNullScrollbars.prototype.setScrollTop = function () {};\nNullScrollbars.prototype.clear = function () {};\n\nfunction updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n}\n\n// Re-synchronize the fake scrollbars with the actual size of the\n// content.\nfunction updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n}\n\nvar scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\nfunction initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n}\n\n// Operations are used to wrap a series of changes to the editor\n// state in such a way that each change won't have to update the\n// cursor and display (which would be awkward, slow, and\n// error-prone). Instead, display updates are batched and then all\n// combined and executed at once.\n\nvar nextOpId = 0;\n// Start a new operation.\nfunction startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: null, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId // Unique ID\n };\n pushOperation(cm.curOp);\n}\n\n// Finish an operation, updating the display and signalling delayed events\nfunction endOperation(cm) {\n var op = cm.curOp;\n finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n });\n}\n\n// The DOM updates done when an operation finishes are batched so\n// that the minimum number of relayouts are required.\nfunction endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n}\n\nfunction endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n}\n\nfunction endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n}\n\nfunction endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n}\n\nfunction endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n}\n\nfunction endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n}\n\n// Run the given function in an operation\nfunction runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n}\n// Wraps a function in an operation. Returns the wrapped function.\nfunction operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n}\n// Used to add methods to editor and doc instances, wrapping them in\n// operations.\nfunction methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n}\nfunction docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n}\n\n// Updates the display.view data structure for a given change to the\n// document. From and to are in pre-change coordinates. Lendiff is\n// the amount of lines added or subtracted by the change. This is\n// used for changes that span multiple lines, or change the way\n// lines are divided into visual lines. regLineChange (below)\n// registers single-line changes.\nfunction regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n}\n\n// Register a change to a single line. Type must be one of \"text\",\n// \"gutter\", \"class\", \"widget\"\nfunction regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n}\n\n// Clear the view.\nfunction resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n}\n\nfunction viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n}\n\n// Force the view to cover a given range, adding empty view element\n// or clipping off existing ones as needed.\nfunction adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n}\n\n// Count the number of lines in the view whose DOM representation is\n// out of date (or nonexistent).\nfunction countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n}\n\n// HIGHLIGHT WORKER\n\nfunction startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n}\n\nfunction highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n}\n\n// DISPLAY DRAWING\n\nvar DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n};\n\nDisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n};\nDisplayUpdate.prototype.finish = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this$1.events[i]); }\n};\n\nfunction maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n}\n\nfunction selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt();\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = window.getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n}\n\nfunction restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n snapshot.activeElt.focus();\n if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(), range$$1 = document.createRange();\n range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range$$1.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range$$1);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n}\n\n// Does the actual updating of the line display. Bails out\n// (returning false) when there is nothing to be done and forced is\n// false.\nfunction updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n}\n\nfunction postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n}\n\nfunction updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n}\n\n// Sync the actual display DOM structure with display.view, removing\n// nodes for lines that are no longer in view, and creating the ones\n// that are not there yet, and updating the ones that are out of\n// date.\nfunction patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) {\n } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n}\n\nfunction updateGutterSpace(cm) {\n var width = cm.display.gutters.offsetWidth;\n cm.display.sizer.style.marginLeft = width + \"px\";\n}\n\nfunction setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n}\n\n// Rebuild the gutter elements, ensure the margin to the left of the\n// code matches their width.\nfunction updateGutters(cm) {\n var gutters = cm.display.gutters, specs = cm.options.gutters;\n removeChildren(gutters);\n var i = 0;\n for (; i < specs.length; ++i) {\n var gutterClass = specs[i];\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n if (gutterClass == \"CodeMirror-linenumbers\") {\n cm.display.lineGutter = gElt;\n gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = i ? \"\" : \"none\";\n updateGutterSpace(cm);\n}\n\n// Make sure the gutters options contains the element\n// \"CodeMirror-linenumbers\" when the lineNumbers option is true.\nfunction setGuttersForLineNumbers(options) {\n var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n if (found == -1 && options.lineNumbers) {\n options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n } else if (found > -1 && !options.lineNumbers) {\n options.gutters = options.gutters.slice(0);\n options.gutters.splice(found, 1);\n }\n}\n\n// Since the delta values reported on mouse wheel events are\n// unstandardized between browsers and even browser versions, and\n// generally horribly unpredictable, this code starts by measuring\n// the scroll effect that the first few mouse wheel events have,\n// and, from that, detects the way it can convert deltas to pixel\n// offsets afterwards.\n//\n// The reason we want to know the amount a wheel event will scroll\n// is that it gives us a chance to update the display before the\n// actual scrolling happens, reducing flickering.\n\nvar wheelSamples = 0;\nvar wheelPixelsPerUnit = null;\n// Fill in a browser-detected starting value on browsers where we\n// know one. These don't have to be accurate -- the result of them\n// being wrong would just be a slight flicker on the first wheel\n// scroll (if it is large enough).\nif (ie) { wheelPixelsPerUnit = -.53; }\nelse if (gecko) { wheelPixelsPerUnit = 15; }\nelse if (chrome) { wheelPixelsPerUnit = -.7; }\nelse if (safari) { wheelPixelsPerUnit = -1/3; }\n\nfunction wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n}\nfunction wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n}\n\nfunction onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n}\n\n// Selection objects are immutable. A new one is created every time\n// the selection changes. A selection is one or more non-overlapping\n// (and non-touching) ranges, sorted, and an integer that indicates\n// which one is the primary selection (the one that's scrolled into\n// view, that getCursor returns, etc).\nvar Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n};\n\nSelection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\nSelection.prototype.equals = function (other) {\n var this$1 = this;\n\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this$1.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n};\n\nSelection.prototype.deepCopy = function () {\n var this$1 = this;\n\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n};\n\nSelection.prototype.somethingSelected = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this$1.ranges[i].empty()) { return true } }\n return false\n};\n\nSelection.prototype.contains = function (pos, end) {\n var this$1 = this;\n\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this$1.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n};\n\nvar Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n};\n\nRange.prototype.from = function () { return minPos(this.anchor, this.head) };\nRange.prototype.to = function () { return maxPos(this.anchor, this.head) };\nRange.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n// Take an unsorted, potentially overlapping set of ranges, and\n// build a selection out of it. 'Consumes' ranges array (modifying\n// it).\nfunction normalizeSelection(ranges, primIndex) {\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n if (cmp(prev.to(), cur.from()) >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n}\n\nfunction simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n}\n\n// Compute the position of the end of a change (its 'to' property\n// refers to the pre-change end).\nfunction changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n}\n\n// Adjust a position to refer to the post-change position of the\n// same text, or the end of the change if the change covers it.\nfunction adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n}\n\nfunction computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(out, doc.sel.primIndex)\n}\n\nfunction offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n}\n\n// Used by replaceSelections to allow moving the selection to the\n// start or around the replaced test. Hint may be \"start\" or \"around\".\nfunction computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n}\n\n// Used to get the editor into a consistent state again when options change.\n\nfunction loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n}\n\nfunction resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n}\n\n// DOCUMENT DATA STRUCTURE\n\n// By default, updates that start and end at the beginning of a line\n// are treated specially, in order to make the association of line\n// widgets and marker elements with the text behave more intuitive.\nfunction isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n}\n\n// Perform a change on the document data structure.\nfunction updateDoc(doc, change, markedSpans, estimateHeight$$1) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight$$1);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n}\n\n// Call f for all linked documents.\nfunction linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n}\n\n// Attach a document to an editor.\nfunction attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n}\n\nfunction setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n}\n\nfunction directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n}\n\nfunction History(startGen) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = startGen || 1;\n}\n\n// Create a history change event from an updateDoc-style change\n// object.\nfunction historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n}\n\n// Pop all selection events off the end of a history array. Stop at\n// a change event.\nfunction clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n}\n\n// Find the top change event in the history. Pop off selection\n// events that are in the way.\nfunction lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n}\n\n// Register a change in the history. Merges changes that are within\n// a single operation, or are close together with an origin that\n// allows merging (starting with \"+\") into a single event.\nfunction addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n}\n\nfunction selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n}\n\n// Called whenever the selection changes, sets the new selection as\n// the pending selection in the history, and pushes the old pending\n// selection into the 'done' array when it was significantly\n// different (in number of selected ranges, emptiness, or time).\nfunction addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n}\n\nfunction pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n}\n\n// Used to store marked span information in the history.\nfunction attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n}\n\n// When un/re-doing restores text containing marked spans, those\n// that have been explicitly cleared should not be restored.\nfunction removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n}\n\n// Retrieve and filter the old marked spans stored in a change event.\nfunction getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n}\n\n// Used for un/re-doing changes from the history. Combines the\n// result of computing the existing spans with the set of spans that\n// existed in the history (so that deleting around a span and then\n// undoing brings back the span).\nfunction mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n}\n\n// Used both to provide a JSON-safe object in .getHistory, and, when\n// detaching a document, to split the history in two\nfunction copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n}\n\n// The 'scroll' parameter given to many of these indicated whether\n// the new cursor position should be scrolled into view after\n// modifying the selection.\n\n// If shift is held or the extend flag is set, extends a range to\n// include a given position (and optionally a second position).\n// Otherwise, simply returns the range between the given positions.\n// Used for cursor motion and such.\nfunction extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n}\n\n// Extend the primary selection range, discard the rest.\nfunction extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n}\n\n// Extend all selections (pos is an array of selections with length\n// equal the number of selections)\nfunction extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n}\n\n// Updates a single range in the selection.\nfunction replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);\n}\n\n// Reset the selection to a single range.\nfunction setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n}\n\n// Give beforeSelectionChange handlers a change to influence a\n// selection update.\nfunction filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n var this$1 = this;\n\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n}\n\nfunction setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n}\n\n// Set a new selection.\nfunction setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n}\n\nfunction setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm)\n { ensureCursorVisible(doc.cm); }\n}\n\nfunction setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n}\n\n// Verify that the selection does not partially select any atomic\n// marked ranges.\nfunction reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n}\n\n// Return a selection that does not partially select any atomic\n// ranges.\nfunction skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(out, sel.primIndex) : sel\n}\n\nfunction skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n}\n\n// Ensure a given position is not inside an atomic range.\nfunction skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n}\n\nfunction movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n}\n\nfunction selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n}\n\n// UPDATING\n\n// Allow \"beforeChange\" event handlers to influence a change\nfunction filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) { return null }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n}\n\n// Apply a change to a document, and add it to the document's\n// history, and propagating it to all linked documents.\nfunction makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n}\n\nfunction makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n}\n\n// Revert a change stored in a document's history.\nfunction makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n}\n\n// Sub-views need their line numbers shifted when text is added\n// above or below them in the parent document.\nfunction shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n}\n\n// More lower-level change function, handling only a single document\n// (not linked ones).\nfunction makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n}\n\n// Handle the interaction of a change to a document with the editor\n// that this document is part of.\nfunction makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n}\n\nfunction replaceRange(doc, code, from, to, origin) {\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { var assign;\n (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n}\n\n// Rebasing/resetting history to deal with externally-sourced changes\n\nfunction rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n}\n\n// Tries to rebase an array of history events given a change in the\n// document. If the change touches the same lines as the event, the\n// event, and everything 'behind' it, is discarded. If the change is\n// before the event, the event's positions are updated. Uses a\n// copy-on-write scheme for the positions, to avoid having to\n// reallocate them all on every rebase, but also avoid problems with\n// shared position objects being unsafely updated.\nfunction rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n}\n\nfunction rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n}\n\n// Utility for applying a change to a line by handle or number,\n// returning the number and optionally registering the line as\n// changed.\nfunction changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n}\n\n// The document is represented as a BTree consisting of leaves, with\n// chunk of lines in them, and branches, with up to ten leaves or\n// other branch nodes below them. The top node is always a branch\n// node, and is the document object itself (meaning it has\n// additional methods and properties).\n//\n// All nodes have parent links. The tree is used both to go from\n// line numbers to line objects, and to go from objects to numbers.\n// It also indexes by height, and is used to convert between height\n// and line object, and to find the total height of the document.\n//\n// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\nfunction LeafChunk(lines) {\n var this$1 = this;\n\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this$1;\n height += lines[i].height;\n }\n this.height = height;\n}\n\nLeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n var this$1 = this;\n\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this$1.lines[i];\n this$1.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n var this$1 = this;\n\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n var this$1 = this;\n\n for (var e = at + n; at < e; ++at)\n { if (op(this$1.lines[at])) { return true } }\n }\n};\n\nfunction BranchChunk(children) {\n var this$1 = this;\n\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this$1;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n}\n\nBranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n var this$1 = this;\n\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this$1.height -= oldHeight - child.height;\n if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function(lines) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n var this$1 = this;\n\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this$1.children.splice(++i, 0, leaf);\n leaf.parent = this$1;\n }\n child.lines = child.lines.slice(0, remaining);\n this$1.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n};\n\n// Line widgets are block elements displayed above or below a line.\n\nvar LineWidget = function(doc, node, options) {\n var this$1 = this;\n\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this$1[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n};\n\nLineWidget.prototype.clear = function () {\n var this$1 = this;\n\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n};\n\nLineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n};\neventMixin(LineWidget);\n\nfunction adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n}\n\nfunction addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n}\n\n// TEXTMARKERS\n\n// Created with markText and setBookmark methods. A TextMarker is a\n// handle that can be used to clear or find a marked position in the\n// document. Line objects hold arrays (markedSpans) containing\n// {from, to, marker} object pointing to such marker objects, and\n// indicating that such a marker is present on that line. Multiple\n// lines may point to the same marker when it spans across lines.\n// The spans will have null for their from/to properties when the\n// marker continues beyond the start/end of the line. Markers have\n// links back to the lines they currently touch.\n\n// Collapsed markers have unique ids, in order to be able to order\n// them, which is needed for uniquely determining an outer marker\n// when they overlap (they may nest, but not partially overlap).\nvar nextMarkerId = 0;\n\nvar TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n};\n\n// Clear the marker.\nTextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n};\n\n// Find the position of the marker in the document. Returns a {from,\n// to} object by default. Side can be passed to get a specific side\n// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n// Pos objects returned contain a line object, rather than a line\n// number (used to prevent looking up the same line twice).\nTextMarker.prototype.find = function (side, lineObj) {\n var this$1 = this;\n\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n};\n\n// Signals that the marker's widget changed, and surrounding layout\n// should be recomputed.\nTextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n};\n\nTextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n};\n\nTextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n};\neventMixin(TextMarker);\n\n// Create a marker, wire it up to the right lines, and\nfunction markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null));\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n}\n\n// SHARED TEXTMARKERS\n\n// A shared marker spans multiple linked documents. It is\n// implemented as a meta-marker-object controlling multiple normal\n// markers.\nvar SharedTextMarker = function(markers, primary) {\n var this$1 = this;\n\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this$1; }\n};\n\nSharedTextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this$1.markers[i].clear(); }\n signalLater(this, \"clear\");\n};\n\nSharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n};\neventMixin(SharedTextMarker);\n\nfunction markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n}\n\nfunction findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n}\n\nfunction copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n}\n\nfunction detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n}\n\nvar nextDocId = 0;\nvar Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n};\n\nDoc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range$$1 = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range$$1.head; }\n else if (start == \"anchor\") { pos = range$$1.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range$$1.to(); }\n else { pos = range$$1.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n var this$1 = this;\n\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this$1, ranges[i].anchor),\n clipPos(this$1, ranges[i].head)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var this$1 = this;\n\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var this$1 = this;\n\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var this$1 = this;\n\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range$$1 = sel.ranges[i];\n changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this$1, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history.maxGeneration);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo$$1 = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||\n span.from == null && lineNo$$1 != from.line ||\n span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo$$1;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo$$1;\n });\n return clipPos(this, Pos(lineNo$$1, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n var this$1 = this;\n\n if (other instanceof CodeMirror$1) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this$1.linked[i];\n if (link.doc != other) { continue }\n this$1.linked.splice(i, 1);\n other.unlinkDoc(this$1);\n detachSharedMarkers(findSharedMarkers(this$1));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n});\n\n// Public alias.\nDoc.prototype.eachLine = Doc.prototype.iter;\n\n// Kludge to work around strange IE behavior where it'll sometimes\n// re-fire a series of drag-related events right after the drop (#1551)\nvar lastDrop = 0;\n\nfunction onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var loadFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1)\n { return }\n\n var reader = new FileReader;\n reader.onload = operation(cm, function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) { content = \"\"; }\n text[i] = content;\n if (++read == n) {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n }\n });\n reader.readAsText(file);\n };\n for (var i = 0; i < n; ++i) { loadFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e){}\n }\n}\n\nfunction onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n}\n\nfunction onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n}\n\nfunction clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n}\n\n// These must be handled carefully, because naively registering a\n// handler for each editor will cause the editors to never be\n// garbage collected.\n\nfunction forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\");\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { f(cm); }\n }\n}\n\nvar globalsRegistered = false;\nfunction ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n}\nfunction registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n}\n// Called when the window resizes\nfunction onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n}\n\nvar keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 127: \"Delete\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n};\n\n// Number keys\nfor (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n// Alphabetic keys\nfor (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n// Function keys\nfor (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\nvar keyMap = {};\n\nkeyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n};\n// Note that the save and find-related commands aren't defined by\n// default. User code or addons can define them. Unknown commands\n// are simply ignored.\nkeyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n};\n// Very basic readline/emacs-style bindings, which are standard on Mac.\nkeyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n};\nkeyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n};\nkeyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n// KEYMAP DISPATCH\n\nfunction normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n}\n\n// This is a kludge to keep keymaps mostly working as raw objects\n// (backwards compatibility) while at the same time support features\n// like normalization and multi-stroke key bindings. It compiles a\n// new normalized keymap, and then updates the old object to reflect\n// this.\nfunction normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n}\n\nfunction lookupKey(key, map$$1, handle, context) {\n map$$1 = getKeyMap(map$$1);\n var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map$$1.fallthrough) {\n if (Object.prototype.toString.call(map$$1.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map$$1.fallthrough, handle, context) }\n for (var i = 0; i < map$$1.fallthrough.length; i++) {\n var result = lookupKey(key, map$$1.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n}\n\n// Modifier key presses don't count as 'real' key presses for the\n// purpose of keymap fallthrough.\nfunction isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n}\n\nfunction addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n}\n\n// Look up the name of a key as indicated by an event object.\nfunction keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n}\n\nfunction getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n}\n\n// Helper for deleting text near the selection(s), used to implement\n// backspace, delete, and similar functionality.\nfunction deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n}\n\nfunction moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n}\n\nfunction moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n}\n\nfunction endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n}\n\nfunction moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n}\n\n// Commands are parameter-less actions that can be performed on an\n// editor, mostly used for keybindings.\nvar commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"char\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n};\n\n\nfunction lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n}\nfunction lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n}\nfunction lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(0, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n}\n\n// Run a handler that was bound to a key.\nfunction doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n}\n\nfunction lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n}\n\n// Note that, despite the name, this function is also used to check\n// for bound mouse clicks.\n\nvar stopSeq = new Delayed;\n\nfunction dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n}\n\nfunction dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n}\n\n// Handle a key from the keydown event.\nfunction handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n}\n\n// Handle a key from the keypress event\nfunction handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n}\n\nvar lastStoppedKey = null;\nfunction onKeyDown(e) {\n var cm = this;\n cm.curOp.focus = activeElt();\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n}\n\nfunction showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n}\n\nfunction onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n}\n\nfunction onKeyPress(e) {\n var cm = this;\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n}\n\nvar DOUBLECLICK_DELAY = 400;\n\nvar PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n};\n\nPastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n};\n\nvar lastClick;\nvar lastDoubleClick;\nfunction clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n}\n\n// A mouse down can be a single click, double click, triple click,\n// start of selection drag, start of text drag, new cursor\n// (ctrl-click), rectangle drag (alt-drag), or xwin\n// middle-click-paste. Or it might be a click on something we should\n// not interfere with, such as a scrollbar or widget.\nfunction onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { onContextMenu(cm, e); }\n else { delayBlurEvent(cm); }\n }\n}\n\nfunction handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n}\n\nfunction configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n}\n\nfunction leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n}\n\n// Start a text drag. When it ends, see if any dragging actually\n// happen, and treat as a click if it didn't.\nfunction leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if (webkit || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n delayBlurEvent(cm);\n setTimeout(function () { return display.input.focus(); }, 20);\n}\n\nfunction rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n}\n\n// Normal selection, as opposed to text dragging.\nfunction leftButtonSelect(cm, event, start, behavior) {\n var display = cm.display, doc = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range$$1 = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }\n else\n { ourRange = range$$1; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range$$1 = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range$$1.anchor, anchor) > 0) {\n head = range$$1.head;\n anchor = minPos(oldRange.from(), range$$1.anchor);\n } else {\n head = range$$1.anchor;\n anchor = maxPos(oldRange.to(), range$$1.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n e_preventDefault(e);\n display.input.focus();\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n}\n\n// Used when mouse-selecting to adjust the anchor to the proper side\n// of a bidi jump depending on the visual position of the head.\nfunction bidiSimplify(cm, range$$1) {\n var anchor = range$$1.anchor;\n var head = range$$1.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }\n var order = getOrder(anchorLine);\n if (!order) { return range$$1 }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range$$1 }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)\n}\n\n\n// Determines whether an event happened in the gutter, and fires the\n// handlers for the corresponding event.\nfunction gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.options.gutters.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.options.gutters[i];\n signal(cm, type, cm, line, gutter, e);\n return e_defaultPrevented(e)\n }\n }\n}\n\nfunction clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n}\n\n// CONTEXT MENU HANDLING\n\n// To make the context menu work, we need to briefly unhide the\n// textarea (making it as unobtrusive as possible) to let the\n// right-click take effect on it.\nfunction onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n cm.display.input.onContextMenu(e);\n}\n\nfunction contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n}\n\nfunction themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n}\n\nvar Init = {toString: function(){return \"CodeMirror.Init\"}};\n\nvar defaults = {};\nvar optionHandlers = {};\n\nfunction defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n guttersChanged(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"firstLineNumber\", 1, guttersChanged, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, guttersChanged, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n}\n\nfunction guttersChanged(cm) {\n updateGutters(cm);\n regChange(cm);\n alignHorizontally(cm);\n}\n\nfunction dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n}\n\nfunction wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n}\n\n// A CodeMirror instance represents an editor. This is the object\n// that user code is usually dealing with.\n\nfunction CodeMirror$1(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror$1)) { return new CodeMirror$1(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n setGuttersForLineNumbers(options);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\n var input = new CodeMirror$1.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input);\n display.wrapper.CodeMirror = this;\n updateGutters(this);\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(bind(onFocus, this), 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this$1, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n}\n\n// The default configuration options.\nCodeMirror$1.defaults = defaults;\n// Functions to run when options are changed.\nCodeMirror$1.optionHandlers = optionHandlers;\n\n// Attach the necessary event handlers when initializing the editor\nfunction registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n if (!captureRightClick) { on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); }); }\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n}\n\nvar initHooks = [];\nCodeMirror$1.defineInitHook = function (f) { return initHooks.push(f); };\n\n// Indent the given line. The how parameter can be \"smart\",\n// \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n// (typically set to true for forced single-line indents), empty\n// lines are not indented, and places where the mode returns Pass\n// are left alone.\nfunction indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n}\n\n// This will be set to a {lineWise: bool, text: [string]} object, so\n// that, when pasting, we know what kind of selections the copied\n// text was made out of.\nvar lastCopied = null;\n\nfunction setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n}\n\nfunction applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var paste = cm.state.pasteIncoming || origin == \"paste\";\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range$$1 = sel.ranges[i$1];\n var from = range$$1.from(), to = range$$1.to();\n if (range$$1.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted)\n { from = to = Pos(from.line, 0); }\n }\n updateInput = cm.curOp.updateInput;\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n cm.curOp.updateInput = updateInput;\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = false;\n}\n\nfunction handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput)\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n}\n\nfunction triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range$$1 = sel.ranges[i];\n if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }\n var mode = cm.getModeAt(range$$1.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range$$1.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))\n { indented = indentLine(cm, range$$1.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range$$1.head.line); }\n }\n}\n\nfunction copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n}\n\nfunction disableBrowserMagic(field, spellcheck) {\n field.setAttribute(\"autocorrect\", \"off\");\n field.setAttribute(\"autocapitalize\", \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n}\n\nfunction hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n disableBrowserMagic(te);\n return div\n}\n\n// The publicly visible API. Note that methodOp(f) means\n// 'wrap f in an operation, performed on its `this` parameter'.\n\n// This is not the complete set of editor methods. Most of the\n// methods defined on the Doc type are also injected into\n// CodeMirror.prototype, for backwards compatibility and\n// convenience.\n\nvar addEditorMethods = function(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){window.focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map$$1, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map$$1));\n },\n removeKeyMap: function(map$$1) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map$$1 || maps[i].name == map$$1) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var this$1 = this;\n\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this$1.state.modeGen++;\n regChange(this$1);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var this$1 = this;\n\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range$$1 = ranges[i];\n if (!range$$1.empty()) {\n var from = range$$1.from(), to = range$$1.to();\n var start = Math.max(end, from.line);\n end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this$1, j, how); }\n var newRanges = this$1.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range$$1.head.line > end) {\n indentLine(this$1, range$$1.head.line, how, true);\n end = range$$1.head.line;\n if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var this$1 = this;\n\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range$$1 = this.doc.sel.primary();\n if (start == null) { pos = range$$1.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range$$1.from() : range$$1.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var this$1 = this;\n\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this$1.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range$$1) {\n if (this$1.display.shift || this$1.doc.extend || range$$1.empty())\n { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range$$1) {\n var other = findPosH(doc, range$$1.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var this$1 = this;\n\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this$1, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this$1, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range$$1) {\n if (collapse)\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n var headPos = cursorCoords(this$1, range$$1.head, \"div\");\n if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range$$1 == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt() },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range$$1, margin) {\n if (range$$1 == null) {\n range$$1 = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range$$1 == \"number\") {\n range$$1 = {from: Pos(range$$1, 0), to: null};\n } else if (range$$1.from == null) {\n range$$1 = {from: range$$1, to: null};\n }\n if (!range$$1.to) { range$$1.to = range$$1.from; }\n range$$1.margin = margin || 0;\n\n if (range$$1.from.line != null) {\n scrollToRange(this, range$$1);\n } else {\n scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo$$1 = this.display.viewFrom;\n this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, \"widget\"); break } } }\n ++lineNo$$1;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n};\n\n// Used for horizontal relative motion. Dir is -1 or 1 (left or\n// right), unit can be \"char\", \"column\" (like char, but doesn't\n// cross line boundaries), \"word\" (across next word), or \"group\" (to\n// the start of next group of word or non-word-non-whitespace\n// chars). The visually param controls whether, in right-to-left\n// text, direction 1 means to move towards the next index in the\n// string, or towards the character to the right of the current\n// position. The resulting position will have a hitSide=true\n// property if it reached the end of the document.\nfunction findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n function findNextLine() {\n var l = pos.line + dir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n}\n\n// For relative vertical movement. Dir may be -1 or 1. Unit can be\n// \"page\" or \"line\". The resulting position will have a hitSide=true\n// property if it reached the end of the document.\nfunction findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n}\n\n// CONTENTEDITABLE INPUT STYLE\n\nvar ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n};\n\nContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n disableBrowserMagic(div, cm.options.spellcheck);\n\n on(div, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = document.activeElement;\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n};\n\nContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = this.cm.state.focused;\n return result\n};\n\nContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n};\n\nContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection()\n};\n\nContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n};\n\nContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n};\n\nContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n};\n\nContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n};\n\nContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n};\n\nContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor())\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n};\nContentEditableInput.prototype.blur = function () { this.div.blur(); };\nContentEditableInput.prototype.getField = function () { return this.div };\n\nContentEditableInput.prototype.supportsTouch = function () { return true };\n\nContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n if (this.selectionInEditor())\n { this.pollSelection(); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n};\n\nContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n};\n\nContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n};\n\nContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n};\n\nContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n};\nContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n};\nContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n};\nContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n};\n\nContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n};\n\nContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n};\n\nContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n};\n\nContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n};\n\nContentEditableInput.prototype.onContextMenu = function () {};\nContentEditableInput.prototype.resetPosition = function () {};\n\nContentEditableInput.prototype.needsContentAttribute = true;\n\nfunction posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n}\n\nfunction isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n}\n\nfunction badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\nfunction domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range$$1;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range$$1 = found[0].find(0)))\n { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n}\n\nfunction domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n}\n\nfunction locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map$$1 = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map$$1.length; j += 3) {\n var curNode = map$$1[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map$$1[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n}\n\n// TEXTAREA INPUT STYLE\n\nvar TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n};\n\nTextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = true;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = true; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n cm.state.pasteIncoming = true;\n input.focus();\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n};\n\nTextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n};\n\nTextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n};\n\nTextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n};\n\n// Reset the input to correspond to the selection (or to be empty,\n// when not typing and nothing is selected)\nTextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) { return }\n var cm = this.cm;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n};\n\nTextareaInput.prototype.getField = function () { return this.textarea };\n\nTextareaInput.prototype.supportsTouch = function () { return false };\n\nTextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n};\n\nTextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\nTextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n};\n\nTextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n// Poll for input changes, using the normal rate of polling. This\n// runs as long as the editor is focused.\nTextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n};\n\n// When an event has just come in that is likely to add or change\n// something in the input textarea, we poll faster, to ensure that\n// the change appears on the screen quickly.\nTextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n};\n\n// Read input from the textarea, and update the document to match.\n// When something is selected, it is present in the textarea, and\n// selected (unless it is huge, in which case a placeholder is\n// used). When nothing is selected, the cursor sits after previously\n// seen text (can be empty), which is stored in prevInput (we must\n// not reset the textarea when typing, because that breaks IME).\nTextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n};\n\nTextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n};\n\nTextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n};\n\nTextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n input.wrapper.style.cssText = \"position: absolute\";\n var wrapperBox = input.wrapper.getBoundingClientRect();\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { window.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = true;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n};\n\nTextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n};\n\nTextareaInput.prototype.setUneditable = function () {};\n\nTextareaInput.prototype.needsContentAttribute = false;\n\nfunction fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror$1(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n}\n\nfunction addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n}\n\n// EDITOR CONSTRUCTOR\n\ndefineOptions(CodeMirror$1);\n\naddEditorMethods(CodeMirror$1);\n\n// Set up methods on CodeMirror's prototype to redirect to the editor's document.\nvar dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\nfor (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror$1.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\neventMixin(Doc);\n\n// INPUT HANDLING\n\nCodeMirror$1.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n// MODE DEFINITION AND QUERYING\n\n// Extra arguments are stored as the mode's dependencies, which is\n// used by (legacy) mechanisms like loadmode.js to automatically\n// load a mode. (Preferred mechanism is the require/define calls.)\nCodeMirror$1.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror$1.defaults.mode && name != \"null\") { CodeMirror$1.defaults.mode = name; }\n defineMode.apply(this, arguments);\n};\n\nCodeMirror$1.defineMIME = defineMIME;\n\n// Minimal default mode.\nCodeMirror$1.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\nCodeMirror$1.defineMIME(\"text/plain\", \"null\");\n\n// EXTENSIONS\n\nCodeMirror$1.defineExtension = function (name, func) {\n CodeMirror$1.prototype[name] = func;\n};\nCodeMirror$1.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n};\n\nCodeMirror$1.fromTextArea = fromTextArea;\n\naddLegacyProps(CodeMirror$1);\n\nCodeMirror$1.version = \"5.39.2\";\n\nreturn CodeMirror$1;\n\n})));\n\n},{}],15:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"css\", function(config, parserConfig) {\n var inline = parserConfig.inline\n if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode(\"text/css\");\n\n var indentUnit = config.indentUnit,\n tokenHooks = parserConfig.tokenHooks,\n documentTypes = parserConfig.documentTypes || {},\n mediaTypes = parserConfig.mediaTypes || {},\n mediaFeatures = parserConfig.mediaFeatures || {},\n mediaValueKeywords = parserConfig.mediaValueKeywords || {},\n propertyKeywords = parserConfig.propertyKeywords || {},\n nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},\n fontProperties = parserConfig.fontProperties || {},\n counterDescriptors = parserConfig.counterDescriptors || {},\n colorKeywords = parserConfig.colorKeywords || {},\n valueKeywords = parserConfig.valueKeywords || {},\n allowNested = parserConfig.allowNested,\n lineComment = parserConfig.lineComment,\n supportsAtComponent = parserConfig.supportsAtComponent === true;\n\n var type, override;\n function ret(style, tp) { type = tp; return style; }\n\n // Tokenizers\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (tokenHooks[ch]) {\n var result = tokenHooks[ch](stream, state);\n if (result !== false) return result;\n }\n if (ch == \"@\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"def\", stream.current());\n } else if (ch == \"=\" || (ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) {\n return ret(null, \"compare\");\n } else if (ch == \"\\\"\" || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \"#\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"atom\", \"hash\");\n } else if (ch == \"!\") {\n stream.match(/^\\s*\\w*/);\n return ret(\"keyword\", \"important\");\n } else if (/\\d/.test(ch) || ch == \".\" && stream.eat(/\\d/)) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (ch === \"-\") {\n if (/[\\d.]/.test(stream.peek())) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (stream.match(/^-[\\w\\\\\\-]+/)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false))\n return ret(\"variable-2\", \"variable-definition\");\n return ret(\"variable-2\", \"variable\");\n } else if (stream.match(/^\\w+-/)) {\n return ret(\"meta\", \"meta\");\n }\n } else if (/[,+>*\\/]/.test(ch)) {\n return ret(null, \"select-op\");\n } else if (ch == \".\" && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {\n return ret(\"qualifier\", \"qualifier\");\n } else if (/[:;{}\\[\\]\\(\\)]/.test(ch)) {\n return ret(null, ch);\n } else if (((ch == \"u\" || ch == \"U\") && stream.match(/rl(-prefix)?\\(/i)) ||\n ((ch == \"d\" || ch == \"D\") && stream.match(\"omain(\", true, true)) ||\n ((ch == \"r\" || ch == \"R\") && stream.match(\"egexp(\", true, true))) {\n stream.backUp(1);\n state.tokenize = tokenParenthesized;\n return ret(\"property\", \"word\");\n } else if (/[\\w\\\\\\-]/.test(ch)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"property\", \"word\");\n } else {\n return ret(null, null);\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, ch;\n while ((ch = stream.next()) != null) {\n if (ch == quote && !escaped) {\n if (quote == \")\") stream.backUp(1);\n break;\n }\n escaped = !escaped && ch == \"\\\\\";\n }\n if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenParenthesized(stream, state) {\n stream.next(); // Must be '('\n if (!stream.match(/\\s*[\\\"\\')]/, false))\n state.tokenize = tokenString(\")\");\n else\n state.tokenize = null;\n return ret(null, \"(\");\n }\n\n // Context management\n\n function Context(type, indent, prev) {\n this.type = type;\n this.indent = indent;\n this.prev = prev;\n }\n\n function pushContext(state, stream, type, indent) {\n state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);\n return type;\n }\n\n function popContext(state) {\n if (state.context.prev)\n state.context = state.context.prev;\n return state.context.type;\n }\n\n function pass(type, stream, state) {\n return states[state.context.type](type, stream, state);\n }\n function popAndPass(type, stream, state, n) {\n for (var i = n || 1; i > 0; i--)\n state.context = state.context.prev;\n return pass(type, stream, state);\n }\n\n // Parser\n\n function wordAsValue(stream) {\n var word = stream.current().toLowerCase();\n if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"variable\";\n }\n\n var states = {};\n\n states.top = function(type, stream, state) {\n if (type == \"{\") {\n return pushContext(state, stream, \"block\");\n } else if (type == \"}\" && state.context.prev) {\n return popContext(state);\n } else if (supportsAtComponent && /@component/i.test(type)) {\n return pushContext(state, stream, \"atComponentBlock\");\n } else if (/^@(-moz-)?document$/i.test(type)) {\n return pushContext(state, stream, \"documentTypes\");\n } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {\n return pushContext(state, stream, \"atBlock\");\n } else if (/^@(font-face|counter-style)/i.test(type)) {\n state.stateArg = type;\n return \"restricted_atBlock_before\";\n } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {\n return \"keyframes\";\n } else if (type && type.charAt(0) == \"@\") {\n return pushContext(state, stream, \"at\");\n } else if (type == \"hash\") {\n override = \"builtin\";\n } else if (type == \"word\") {\n override = \"tag\";\n } else if (type == \"variable-definition\") {\n return \"maybeprop\";\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n } else if (type == \":\") {\n return \"pseudo\";\n } else if (allowNested && type == \"(\") {\n return pushContext(state, stream, \"parens\");\n }\n return state.context.type;\n };\n\n states.block = function(type, stream, state) {\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (propertyKeywords.hasOwnProperty(word)) {\n override = \"property\";\n return \"maybeprop\";\n } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {\n override = \"string-2\";\n return \"maybeprop\";\n } else if (allowNested) {\n override = stream.match(/^\\s*:(?:\\s|$)/, false) ? \"property\" : \"tag\";\n return \"block\";\n } else {\n override += \" error\";\n return \"maybeprop\";\n }\n } else if (type == \"meta\") {\n return \"block\";\n } else if (!allowNested && (type == \"hash\" || type == \"qualifier\")) {\n override = \"error\";\n return \"block\";\n } else {\n return states.top(type, stream, state);\n }\n };\n\n states.maybeprop = function(type, stream, state) {\n if (type == \":\") return pushContext(state, stream, \"prop\");\n return pass(type, stream, state);\n };\n\n states.prop = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" && allowNested) return pushContext(state, stream, \"propBlock\");\n if (type == \"}\" || type == \"{\") return popAndPass(type, stream, state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n\n if (type == \"hash\" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) {\n override += \" error\";\n } else if (type == \"word\") {\n wordAsValue(stream);\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n }\n return \"prop\";\n };\n\n states.propBlock = function(type, _stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"word\") { override = \"property\"; return \"maybeprop\"; }\n return state.context.type;\n };\n\n states.parens = function(type, stream, state) {\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \")\") return popContext(state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n if (type == \"word\") wordAsValue(stream);\n return \"parens\";\n };\n\n states.pseudo = function(type, stream, state) {\n if (type == \"meta\") return \"pseudo\";\n\n if (type == \"word\") {\n override = \"variable-3\";\n return state.context.type;\n }\n return pass(type, stream, state);\n };\n\n states.documentTypes = function(type, stream, state) {\n if (type == \"word\" && documentTypes.hasOwnProperty(stream.current())) {\n override = \"tag\";\n return state.context.type;\n } else {\n return states.atBlock(type, stream, state);\n }\n };\n\n states.atBlock = function(type, stream, state) {\n if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n if (type == \"}\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"{\") return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\");\n\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (word == \"only\" || word == \"not\" || word == \"and\" || word == \"or\")\n override = \"keyword\";\n else if (mediaTypes.hasOwnProperty(word))\n override = \"attribute\";\n else if (mediaFeatures.hasOwnProperty(word))\n override = \"property\";\n else if (mediaValueKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else if (propertyKeywords.hasOwnProperty(word))\n override = \"property\";\n else if (nonStandardPropertyKeywords.hasOwnProperty(word))\n override = \"string-2\";\n else if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"error\";\n }\n return state.context.type;\n };\n\n states.atComponentBlock = function(type, stream, state) {\n if (type == \"}\")\n return popAndPass(type, stream, state);\n if (type == \"{\")\n return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\", false);\n if (type == \"word\")\n override = \"error\";\n return state.context.type;\n };\n\n states.atBlock_parens = function(type, stream, state) {\n if (type == \")\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state, 2);\n return states.atBlock(type, stream, state);\n };\n\n states.restricted_atBlock_before = function(type, stream, state) {\n if (type == \"{\")\n return pushContext(state, stream, \"restricted_atBlock\");\n if (type == \"word\" && state.stateArg == \"@counter-style\") {\n override = \"variable\";\n return \"restricted_atBlock_before\";\n }\n return pass(type, stream, state);\n };\n\n states.restricted_atBlock = function(type, stream, state) {\n if (type == \"}\") {\n state.stateArg = null;\n return popContext(state);\n }\n if (type == \"word\") {\n if ((state.stateArg == \"@font-face\" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||\n (state.stateArg == \"@counter-style\" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))\n override = \"error\";\n else\n override = \"property\";\n return \"maybeprop\";\n }\n return \"restricted_atBlock\";\n };\n\n states.keyframes = function(type, stream, state) {\n if (type == \"word\") { override = \"variable\"; return \"keyframes\"; }\n if (type == \"{\") return pushContext(state, stream, \"top\");\n return pass(type, stream, state);\n };\n\n states.at = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"tag\";\n else if (type == \"hash\") override = \"builtin\";\n return \"at\";\n };\n\n states.interpolation = function(type, stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"{\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"variable\";\n else if (type != \"variable\" && type != \"(\" && type != \")\") override = \"error\";\n return \"interpolation\";\n };\n\n return {\n startState: function(base) {\n return {tokenize: null,\n state: inline ? \"block\" : \"top\",\n stateArg: null,\n context: new Context(inline ? \"block\" : \"top\", base || 0, null)};\n },\n\n token: function(stream, state) {\n if (!state.tokenize && stream.eatSpace()) return null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style && typeof style == \"object\") {\n type = style[1];\n style = style[0];\n }\n override = style;\n if (type != \"comment\")\n state.state = states[state.state](type, stream, state);\n return override;\n },\n\n indent: function(state, textAfter) {\n var cx = state.context, ch = textAfter && textAfter.charAt(0);\n var indent = cx.indent;\n if (cx.type == \"prop\" && (ch == \"}\" || ch == \")\")) cx = cx.prev;\n if (cx.prev) {\n if (ch == \"}\" && (cx.type == \"block\" || cx.type == \"top\" ||\n cx.type == \"interpolation\" || cx.type == \"restricted_atBlock\")) {\n // Resume indentation from parent context.\n cx = cx.prev;\n indent = cx.indent;\n } else if (ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") ||\n ch == \"{\" && (cx.type == \"at\" || cx.type == \"atBlock\")) {\n // Dedent relative to current context.\n indent = Math.max(0, cx.indent - indentUnit);\n }\n }\n return indent;\n },\n\n electricChars: \"}\",\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n blockCommentContinue: \" * \",\n lineComment: lineComment,\n fold: \"brace\"\n };\n});\n\n function keySet(array) {\n var keys = {};\n for (var i = 0; i < array.length; ++i) {\n keys[array[i].toLowerCase()] = true;\n }\n return keys;\n }\n\n var documentTypes_ = [\n \"domain\", \"regexp\", \"url\", \"url-prefix\"\n ], documentTypes = keySet(documentTypes_);\n\n var mediaTypes_ = [\n \"all\", \"aural\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\",\n \"tty\", \"tv\", \"embossed\"\n ], mediaTypes = keySet(mediaTypes_);\n\n var mediaFeatures_ = [\n \"width\", \"min-width\", \"max-width\", \"height\", \"min-height\", \"max-height\",\n \"device-width\", \"min-device-width\", \"max-device-width\", \"device-height\",\n \"min-device-height\", \"max-device-height\", \"aspect-ratio\",\n \"min-aspect-ratio\", \"max-aspect-ratio\", \"device-aspect-ratio\",\n \"min-device-aspect-ratio\", \"max-device-aspect-ratio\", \"color\", \"min-color\",\n \"max-color\", \"color-index\", \"min-color-index\", \"max-color-index\",\n \"monochrome\", \"min-monochrome\", \"max-monochrome\", \"resolution\",\n \"min-resolution\", \"max-resolution\", \"scan\", \"grid\", \"orientation\",\n \"device-pixel-ratio\", \"min-device-pixel-ratio\", \"max-device-pixel-ratio\",\n \"pointer\", \"any-pointer\", \"hover\", \"any-hover\"\n ], mediaFeatures = keySet(mediaFeatures_);\n\n var mediaValueKeywords_ = [\n \"landscape\", \"portrait\", \"none\", \"coarse\", \"fine\", \"on-demand\", \"hover\",\n \"interlace\", \"progressive\"\n ], mediaValueKeywords = keySet(mediaValueKeywords_);\n\n var propertyKeywords_ = [\n \"align-content\", \"align-items\", \"align-self\", \"alignment-adjust\",\n \"alignment-baseline\", \"anchor-point\", \"animation\", \"animation-delay\",\n \"animation-direction\", \"animation-duration\", \"animation-fill-mode\",\n \"animation-iteration-count\", \"animation-name\", \"animation-play-state\",\n \"animation-timing-function\", \"appearance\", \"azimuth\", \"backface-visibility\",\n \"background\", \"background-attachment\", \"background-blend-mode\", \"background-clip\",\n \"background-color\", \"background-image\", \"background-origin\", \"background-position\",\n \"background-repeat\", \"background-size\", \"baseline-shift\", \"binding\",\n \"bleed\", \"bookmark-label\", \"bookmark-level\", \"bookmark-state\",\n \"bookmark-target\", \"border\", \"border-bottom\", \"border-bottom-color\",\n \"border-bottom-left-radius\", \"border-bottom-right-radius\",\n \"border-bottom-style\", \"border-bottom-width\", \"border-collapse\",\n \"border-color\", \"border-image\", \"border-image-outset\",\n \"border-image-repeat\", \"border-image-slice\", \"border-image-source\",\n \"border-image-width\", \"border-left\", \"border-left-color\",\n \"border-left-style\", \"border-left-width\", \"border-radius\", \"border-right\",\n \"border-right-color\", \"border-right-style\", \"border-right-width\",\n \"border-spacing\", \"border-style\", \"border-top\", \"border-top-color\",\n \"border-top-left-radius\", \"border-top-right-radius\", \"border-top-style\",\n \"border-top-width\", \"border-width\", \"bottom\", \"box-decoration-break\",\n \"box-shadow\", \"box-sizing\", \"break-after\", \"break-before\", \"break-inside\",\n \"caption-side\", \"caret-color\", \"clear\", \"clip\", \"color\", \"color-profile\", \"column-count\",\n \"column-fill\", \"column-gap\", \"column-rule\", \"column-rule-color\",\n \"column-rule-style\", \"column-rule-width\", \"column-span\", \"column-width\",\n \"columns\", \"content\", \"counter-increment\", \"counter-reset\", \"crop\", \"cue\",\n \"cue-after\", \"cue-before\", \"cursor\", \"direction\", \"display\",\n \"dominant-baseline\", \"drop-initial-after-adjust\",\n \"drop-initial-after-align\", \"drop-initial-before-adjust\",\n \"drop-initial-before-align\", \"drop-initial-size\", \"drop-initial-value\",\n \"elevation\", \"empty-cells\", \"fit\", \"fit-position\", \"flex\", \"flex-basis\",\n \"flex-direction\", \"flex-flow\", \"flex-grow\", \"flex-shrink\", \"flex-wrap\",\n \"float\", \"float-offset\", \"flow-from\", \"flow-into\", \"font\", \"font-feature-settings\",\n \"font-family\", \"font-kerning\", \"font-language-override\", \"font-size\", \"font-size-adjust\",\n \"font-stretch\", \"font-style\", \"font-synthesis\", \"font-variant\",\n \"font-variant-alternates\", \"font-variant-caps\", \"font-variant-east-asian\",\n \"font-variant-ligatures\", \"font-variant-numeric\", \"font-variant-position\",\n \"font-weight\", \"grid\", \"grid-area\", \"grid-auto-columns\", \"grid-auto-flow\",\n \"grid-auto-rows\", \"grid-column\", \"grid-column-end\", \"grid-column-gap\",\n \"grid-column-start\", \"grid-gap\", \"grid-row\", \"grid-row-end\", \"grid-row-gap\",\n \"grid-row-start\", \"grid-template\", \"grid-template-areas\", \"grid-template-columns\",\n \"grid-template-rows\", \"hanging-punctuation\", \"height\", \"hyphens\",\n \"icon\", \"image-orientation\", \"image-rendering\", \"image-resolution\",\n \"inline-box-align\", \"justify-content\", \"justify-items\", \"justify-self\", \"left\", \"letter-spacing\",\n \"line-break\", \"line-height\", \"line-stacking\", \"line-stacking-ruby\",\n \"line-stacking-shift\", \"line-stacking-strategy\", \"list-style\",\n \"list-style-image\", \"list-style-position\", \"list-style-type\", \"margin\",\n \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\",\n \"marks\", \"marquee-direction\", \"marquee-loop\",\n \"marquee-play-count\", \"marquee-speed\", \"marquee-style\", \"max-height\",\n \"max-width\", \"min-height\", \"min-width\", \"move-to\", \"nav-down\", \"nav-index\",\n \"nav-left\", \"nav-right\", \"nav-up\", \"object-fit\", \"object-position\",\n \"opacity\", \"order\", \"orphans\", \"outline\",\n \"outline-color\", \"outline-offset\", \"outline-style\", \"outline-width\",\n \"overflow\", \"overflow-style\", \"overflow-wrap\", \"overflow-x\", \"overflow-y\",\n \"padding\", \"padding-bottom\", \"padding-left\", \"padding-right\", \"padding-top\",\n \"page\", \"page-break-after\", \"page-break-before\", \"page-break-inside\",\n \"page-policy\", \"pause\", \"pause-after\", \"pause-before\", \"perspective\",\n \"perspective-origin\", \"pitch\", \"pitch-range\", \"place-content\", \"place-items\", \"place-self\", \"play-during\", \"position\",\n \"presentation-level\", \"punctuation-trim\", \"quotes\", \"region-break-after\",\n \"region-break-before\", \"region-break-inside\", \"region-fragment\",\n \"rendering-intent\", \"resize\", \"rest\", \"rest-after\", \"rest-before\", \"richness\",\n \"right\", \"rotation\", \"rotation-point\", \"ruby-align\", \"ruby-overhang\",\n \"ruby-position\", \"ruby-span\", \"shape-image-threshold\", \"shape-inside\", \"shape-margin\",\n \"shape-outside\", \"size\", \"speak\", \"speak-as\", \"speak-header\",\n \"speak-numeral\", \"speak-punctuation\", \"speech-rate\", \"stress\", \"string-set\",\n \"tab-size\", \"table-layout\", \"target\", \"target-name\", \"target-new\",\n \"target-position\", \"text-align\", \"text-align-last\", \"text-decoration\",\n \"text-decoration-color\", \"text-decoration-line\", \"text-decoration-skip\",\n \"text-decoration-style\", \"text-emphasis\", \"text-emphasis-color\",\n \"text-emphasis-position\", \"text-emphasis-style\", \"text-height\",\n \"text-indent\", \"text-justify\", \"text-outline\", \"text-overflow\", \"text-shadow\",\n \"text-size-adjust\", \"text-space-collapse\", \"text-transform\", \"text-underline-position\",\n \"text-wrap\", \"top\", \"transform\", \"transform-origin\", \"transform-style\",\n \"transition\", \"transition-delay\", \"transition-duration\",\n \"transition-property\", \"transition-timing-function\", \"unicode-bidi\",\n \"user-select\", \"vertical-align\", \"visibility\", \"voice-balance\", \"voice-duration\",\n \"voice-family\", \"voice-pitch\", \"voice-range\", \"voice-rate\", \"voice-stress\",\n \"voice-volume\", \"volume\", \"white-space\", \"widows\", \"width\", \"will-change\", \"word-break\",\n \"word-spacing\", \"word-wrap\", \"z-index\",\n // SVG-specific\n \"clip-path\", \"clip-rule\", \"mask\", \"enable-background\", \"filter\", \"flood-color\",\n \"flood-opacity\", \"lighting-color\", \"stop-color\", \"stop-opacity\", \"pointer-events\",\n \"color-interpolation\", \"color-interpolation-filters\",\n \"color-rendering\", \"fill\", \"fill-opacity\", \"fill-rule\", \"image-rendering\",\n \"marker\", \"marker-end\", \"marker-mid\", \"marker-start\", \"shape-rendering\", \"stroke\",\n \"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-linecap\", \"stroke-linejoin\",\n \"stroke-miterlimit\", \"stroke-opacity\", \"stroke-width\", \"text-rendering\",\n \"baseline-shift\", \"dominant-baseline\", \"glyph-orientation-horizontal\",\n \"glyph-orientation-vertical\", \"text-anchor\", \"writing-mode\"\n ], propertyKeywords = keySet(propertyKeywords_);\n\n var nonStandardPropertyKeywords_ = [\n \"scrollbar-arrow-color\", \"scrollbar-base-color\", \"scrollbar-dark-shadow-color\",\n \"scrollbar-face-color\", \"scrollbar-highlight-color\", \"scrollbar-shadow-color\",\n \"scrollbar-3d-light-color\", \"scrollbar-track-color\", \"shape-inside\",\n \"searchfield-cancel-button\", \"searchfield-decoration\", \"searchfield-results-button\",\n \"searchfield-results-decoration\", \"zoom\"\n ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);\n\n var fontProperties_ = [\n \"font-family\", \"src\", \"unicode-range\", \"font-variant\", \"font-feature-settings\",\n \"font-stretch\", \"font-weight\", \"font-style\"\n ], fontProperties = keySet(fontProperties_);\n\n var counterDescriptors_ = [\n \"additive-symbols\", \"fallback\", \"negative\", \"pad\", \"prefix\", \"range\",\n \"speak-as\", \"suffix\", \"symbols\", \"system\"\n ], counterDescriptors = keySet(counterDescriptors_);\n\n var colorKeywords_ = [\n \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n \"whitesmoke\", \"yellow\", \"yellowgreen\"\n ], colorKeywords = keySet(colorKeywords_);\n\n var valueKeywords_ = [\n \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"afar\",\n \"after-white-space\", \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\",\n \"always\", \"amharic\", \"amharic-abegede\", \"antialiased\", \"appworkspace\",\n \"arabic-indic\", \"armenian\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\", \"avoid-page\",\n \"avoid-region\", \"background\", \"backwards\", \"baseline\", \"below\", \"bidi-override\", \"binary\",\n \"bengali\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"cambodian\",\n \"capitalize\", \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\",\n \"cell\", \"center\", \"checkbox\", \"circle\", \"cjk-decimal\", \"cjk-earthly-branch\",\n \"cjk-heavenly-stem\", \"cjk-ideographic\", \"clear\", \"clip\", \"close-quote\",\n \"col-resize\", \"collapse\", \"color\", \"color-burn\", \"color-dodge\", \"column\", \"column-reverse\",\n \"compact\", \"condensed\", \"contain\", \"content\", \"contents\",\n \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\", \"crop\",\n \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\",\n \"destination-in\", \"destination-out\", \"destination-over\", \"devanagari\", \"difference\",\n \"disc\", \"discard\", \"disclosure-closed\", \"disclosure-open\", \"document\",\n \"dot-dash\", \"dot-dot-dash\",\n \"dotted\", \"double\", \"down\", \"e-resize\", \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\",\n \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\", \"ethiopic\", \"ethiopic-abegede\",\n \"ethiopic-abegede-am-et\", \"ethiopic-abegede-gez\", \"ethiopic-abegede-ti-er\",\n \"ethiopic-abegede-ti-et\", \"ethiopic-halehame-aa-er\",\n \"ethiopic-halehame-aa-et\", \"ethiopic-halehame-am-et\",\n \"ethiopic-halehame-gez\", \"ethiopic-halehame-om-et\",\n \"ethiopic-halehame-sid-et\", \"ethiopic-halehame-so-et\",\n \"ethiopic-halehame-ti-er\", \"ethiopic-halehame-ti-et\", \"ethiopic-halehame-tig\",\n \"ethiopic-numeric\", \"ew-resize\", \"exclusion\", \"expanded\", \"extends\", \"extra-condensed\",\n \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\",\n \"forwards\", \"from\", \"geometricPrecision\", \"georgian\", \"graytext\", \"grid\", \"groove\",\n \"gujarati\", \"gurmukhi\", \"hand\", \"hangul\", \"hangul-consonant\", \"hard-light\", \"hebrew\",\n \"help\", \"hidden\", \"hide\", \"higher\", \"highlight\", \"highlighttext\",\n \"hiragana\", \"hiragana-iroha\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\",\n \"infobackground\", \"infotext\", \"inherit\", \"initial\", \"inline\", \"inline-axis\",\n \"inline-block\", \"inline-flex\", \"inline-grid\", \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\",\n \"italic\", \"japanese-formal\", \"japanese-informal\", \"justify\", \"kannada\",\n \"katakana\", \"katakana-iroha\", \"keep-all\", \"khmer\",\n \"korean-hangul-formal\", \"korean-hanja-formal\", \"korean-hanja-informal\",\n \"landscape\", \"lao\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\",\n \"line-through\", \"linear\", \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\",\n \"local\", \"logical\", \"loud\", \"lower\", \"lower-alpha\", \"lower-armenian\",\n \"lower-greek\", \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\",\n \"lower-roman\", \"lowercase\", \"ltr\", \"luminosity\", \"malayalam\", \"match\", \"matrix\", \"matrix3d\",\n \"media-controls-background\", \"media-current-time-display\",\n \"media-fullscreen-button\", \"media-mute-button\", \"media-play-button\",\n \"media-return-to-realtime-button\", \"media-rewind-button\",\n \"media-seek-back-button\", \"media-seek-forward-button\", \"media-slider\",\n \"media-sliderthumb\", \"media-time-remaining-display\", \"media-volume-slider\",\n \"media-volume-slider-container\", \"media-volume-sliderthumb\", \"medium\",\n \"menu\", \"menulist\", \"menulist-button\", \"menulist-text\",\n \"menulist-textfield\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n \"mix\", \"mongolian\", \"monospace\", \"move\", \"multiple\", \"multiply\", \"myanmar\", \"n-resize\",\n \"narrower\", \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\",\n \"no-open-quote\", \"no-repeat\", \"none\", \"normal\", \"not-allowed\", \"nowrap\",\n \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\", \"oblique\", \"octal\", \"opacity\", \"open-quote\",\n \"optimizeLegibility\", \"optimizeSpeed\", \"oriya\", \"oromo\", \"outset\",\n \"outside\", \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\",\n \"painted\", \"page\", \"paused\", \"persian\", \"perspective\", \"plus-darker\", \"plus-lighter\",\n \"pointer\", \"polygon\", \"portrait\", \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\",\n \"progress\", \"push-button\", \"radial-gradient\", \"radio\", \"read-only\",\n \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\",\n \"relative\", \"repeat\", \"repeating-linear-gradient\",\n \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\",\n \"rotateZ\", \"round\", \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\",\n \"s-resize\", \"sans-serif\", \"saturation\", \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\",\n \"scroll\", \"scrollbar\", \"scroll-position\", \"se-resize\", \"searchfield\",\n \"searchfield-cancel-button\", \"searchfield-decoration\",\n \"searchfield-results-button\", \"searchfield-results-decoration\", \"self-start\", \"self-end\",\n \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\", \"sidama\",\n \"simp-chinese-formal\", \"simp-chinese-informal\", \"single\",\n \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\",\n \"small\", \"small-caps\", \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"somali\",\n \"source-atop\", \"source-in\", \"source-out\", \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\",\n \"square-button\", \"start\", \"static\", \"status-bar\", \"stretch\", \"stroke\", \"sub\",\n \"subpixel-antialiased\", \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\",\n \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\",\n \"table-footer-group\", \"table-header-group\", \"table-row\", \"table-row-group\",\n \"tamil\",\n \"telugu\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thai\",\n \"thick\", \"thin\", \"threeddarkshadow\", \"threedface\", \"threedhighlight\",\n \"threedlightshadow\", \"threedshadow\", \"tibetan\", \"tigre\", \"tigrinya-er\",\n \"tigrinya-er-abegede\", \"tigrinya-et\", \"tigrinya-et-abegede\", \"to\", \"top\",\n \"trad-chinese-formal\", \"trad-chinese-informal\", \"transform\",\n \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\",\n \"transparent\", \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unset\", \"up\",\n \"upper-alpha\", \"upper-armenian\", \"upper-greek\", \"upper-hexadecimal\",\n \"upper-latin\", \"upper-norwegian\", \"upper-roman\", \"uppercase\", \"urdu\", \"url\",\n \"var\", \"vertical\", \"vertical-text\", \"visible\", \"visibleFill\", \"visiblePainted\",\n \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\",\n \"window\", \"windowframe\", \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\",\n \"xx-large\", \"xx-small\"\n ], valueKeywords = keySet(valueKeywords_);\n\n var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)\n .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)\n .concat(valueKeywords_);\n CodeMirror.registerHelper(\"hintWords\", \"css\", allWords);\n\n function tokenCComment(stream, state) {\n var maybeEnd = false, ch;\n while ((ch = stream.next()) != null) {\n if (maybeEnd && ch == \"/\") {\n state.tokenize = null;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return [\"comment\", \"comment\"];\n }\n\n CodeMirror.defineMIME(\"text/css\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\"\n });\n\n CodeMirror.defineMIME(\"text/x-scss\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \":\": function(stream) {\n if (stream.match(/\\s*\\{/, false))\n return [null, null]\n return false;\n },\n \"$\": function(stream) {\n stream.match(/^[\\w-]+/);\n if (stream.match(/^\\s*:/, false))\n return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"#\": function(stream) {\n if (!stream.eat(\"{\")) return false;\n return [null, \"interpolation\"];\n }\n },\n name: \"css\",\n helperType: \"scss\"\n });\n\n CodeMirror.defineMIME(\"text/x-less\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \"@\": function(stream) {\n if (stream.eat(\"{\")) return [null, \"interpolation\"];\n if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i, false)) return false;\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false))\n return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"&\": function() {\n return [\"atom\", \"atom\"];\n }\n },\n name: \"css\",\n helperType: \"less\"\n });\n\n CodeMirror.defineMIME(\"text/x-gss\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n supportsAtComponent: true,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\",\n helperType: \"gss\"\n });\n\n});\n\n},{\"../../lib/codemirror\":14}],16:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../javascript/javascript\"), require(\"../css/css\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../javascript/javascript\", \"../css/css\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var defaultTags = {\n script: [\n [\"lang\", /(javascript|babel)/i, \"javascript\"],\n [\"type\", /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, \"javascript\"],\n [\"type\", /./, \"text/plain\"],\n [null, null, \"javascript\"]\n ],\n style: [\n [\"lang\", /^css$/i, \"css\"],\n [\"type\", /^(text\\/)?(x-)?(stylesheet|css)$/i, \"css\"],\n [\"type\", /./, \"text/plain\"],\n [null, null, \"css\"]\n ]\n };\n\n function maybeBackup(stream, pat, style) {\n var cur = stream.current(), close = cur.search(pat);\n if (close > -1) {\n stream.backUp(cur.length - close);\n } else if (cur.match(/<\\/?$/)) {\n stream.backUp(cur.length);\n if (!stream.match(pat, false)) stream.match(cur);\n }\n return style;\n }\n\n var attrRegexpCache = {};\n function getAttrRegexp(attr) {\n var regexp = attrRegexpCache[attr];\n if (regexp) return regexp;\n return attrRegexpCache[attr] = new RegExp(\"\\\\s+\" + attr + \"\\\\s*=\\\\s*('|\\\")?([^'\\\"]+)('|\\\")?\\\\s*\");\n }\n\n function getAttrValue(text, attr) {\n var match = text.match(getAttrRegexp(attr))\n return match ? /^\\s*(.*?)\\s*$/.exec(match[2])[1] : \"\"\n }\n\n function getTagRegexp(tagName, anchored) {\n return new RegExp((anchored ? \"^\" : \"\") + \"<\\/\\s*\" + tagName + \"\\s*>\", \"i\");\n }\n\n function addTags(from, to) {\n for (var tag in from) {\n var dest = to[tag] || (to[tag] = []);\n var source = from[tag];\n for (var i = source.length - 1; i >= 0; i--)\n dest.unshift(source[i])\n }\n }\n\n function findMatchingMode(tagInfo, tagText) {\n for (var i = 0; i < tagInfo.length; i++) {\n var spec = tagInfo[i];\n if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2];\n }\n }\n\n CodeMirror.defineMode(\"htmlmixed\", function (config, parserConfig) {\n var htmlMode = CodeMirror.getMode(config, {\n name: \"xml\",\n htmlMode: true,\n multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,\n multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag\n });\n\n var tags = {};\n var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes;\n addTags(defaultTags, tags);\n if (configTags) addTags(configTags, tags);\n if (configScript) for (var i = configScript.length - 1; i >= 0; i--)\n tags.script.unshift([\"type\", configScript[i].matches, configScript[i].mode])\n\n function html(stream, state) {\n var style = htmlMode.token(stream, state.htmlState), tag = /\\btag\\b/.test(style), tagName\n if (tag && !/[<>\\s\\/]/.test(stream.current()) &&\n (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) &&\n tags.hasOwnProperty(tagName)) {\n state.inTag = tagName + \" \"\n } else if (state.inTag && tag && />$/.test(stream.current())) {\n var inTag = /^([\\S]+) (.*)/.exec(state.inTag)\n state.inTag = null\n var modeSpec = stream.current() == \">\" && findMatchingMode(tags[inTag[1]], inTag[2])\n var mode = CodeMirror.getMode(config, modeSpec)\n var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false);\n state.token = function (stream, state) {\n if (stream.match(endTagA, false)) {\n state.token = html;\n state.localState = state.localMode = null;\n return null;\n }\n return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState));\n };\n state.localMode = mode;\n state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, \"\"));\n } else if (state.inTag) {\n state.inTag += stream.current()\n if (stream.eol()) state.inTag += \" \"\n }\n return style;\n };\n\n return {\n startState: function () {\n var state = CodeMirror.startState(htmlMode);\n return {token: html, inTag: null, localMode: null, localState: null, htmlState: state};\n },\n\n copyState: function (state) {\n var local;\n if (state.localState) {\n local = CodeMirror.copyState(state.localMode, state.localState);\n }\n return {token: state.token, inTag: state.inTag,\n localMode: state.localMode, localState: local,\n htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};\n },\n\n token: function (stream, state) {\n return state.token(stream, state);\n },\n\n indent: function (state, textAfter, line) {\n if (!state.localMode || /^\\s*<\\//.test(textAfter))\n return htmlMode.indent(state.htmlState, textAfter);\n else if (state.localMode.indent)\n return state.localMode.indent(state.localState, textAfter, line);\n else\n return CodeMirror.Pass;\n },\n\n innerMode: function (state) {\n return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode};\n }\n };\n }, \"xml\", \"javascript\", \"css\");\n\n CodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\n});\n\n},{\"../../lib/codemirror\":14,\"../css/css\":15,\"../javascript/javascript\":17,\"../xml/xml\":18}],17:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n var indentUnit = config.indentUnit;\n var statementIndent = parserConfig.statementIndent;\n var jsonldMode = parserConfig.jsonld;\n var jsonMode = parserConfig.json || jsonldMode;\n var isTS = parserConfig.typescript;\n var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n // Tokenizer\n\n var keywords = function(){\n function kw(type) {return {type: type, style: \"keyword\"};}\n var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\"), D = kw(\"keyword d\");\n var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n return {\n \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n \"return\": D, \"break\": D, \"continue\": D, \"new\": kw(\"new\"), \"delete\": C, \"void\": C, \"throw\": C,\n \"debugger\": kw(\"debugger\"), \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n \"this\": kw(\"this\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C,\n \"await\": C\n };\n }();\n\n var isOperatorChar = /[+\\-*&%=<>!?|~^@]/;\n var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n function readRegexp(stream) {\n var escaped = false, next, inSet = false;\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (next == \"/\" && !inSet) return;\n if (next == \"[\") inSet = true;\n else if (inSet && next == \"]\") inSet = false;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n }\n\n // Used as scratch variables to communicate multiple values without\n // consing up tons of objects.\n var type, content;\n function ret(tp, style, cont) {\n type = tp; content = cont;\n return style;\n }\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n return ret(\"number\", \"number\");\n } else if (ch == \".\" && stream.match(\"..\")) {\n return ret(\"spread\", \"meta\");\n } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n return ret(ch);\n } else if (ch == \"=\" && stream.eat(\">\")) {\n return ret(\"=>\", \"operator\");\n } else if (ch == \"0\" && stream.match(/^(?:x[\\da-f]+|o[0-7]+|b[01]+)n?/i)) {\n return ret(\"number\", \"number\");\n } else if (/\\d/.test(ch)) {\n stream.match(/^\\d*(?:n|(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?/);\n return ret(\"number\", \"number\");\n } else if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n } else if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (expressionAllowed(stream, state, 1)) {\n readRegexp(stream);\n stream.match(/^\\b(([gimyus])(?![gimyus]*\\2))+\\b/);\n return ret(\"regexp\", \"string-2\");\n } else {\n stream.eat(\"=\");\n return ret(\"operator\", \"operator\", stream.current());\n }\n } else if (ch == \"`\") {\n state.tokenize = tokenQuasi;\n return tokenQuasi(stream, state);\n } else if (ch == \"#\") {\n stream.skipToEnd();\n return ret(\"error\", \"error\");\n } else if (isOperatorChar.test(ch)) {\n if (ch != \">\" || !state.lexical || state.lexical.type != \">\") {\n if (stream.eat(\"=\")) {\n if (ch == \"!\" || ch == \"=\") stream.eat(\"=\")\n } else if (/[<>*+\\-]/.test(ch)) {\n stream.eat(ch)\n if (ch == \">\") stream.eat(ch)\n }\n }\n return ret(\"operator\", \"operator\", stream.current());\n } else if (wordRE.test(ch)) {\n stream.eatWhile(wordRE);\n var word = stream.current()\n if (state.lastType != \".\") {\n if (keywords.propertyIsEnumerable(word)) {\n var kw = keywords[word]\n return ret(kw.type, kw.style, word)\n }\n if (word == \"async\" && stream.match(/^(\\s|\\/\\*.*?\\*\\/)*[\\[\\(\\w]/, false))\n return ret(\"async\", \"keyword\", word)\n }\n return ret(\"variable\", \"variable\", word)\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next;\n if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n state.tokenize = tokenBase;\n return ret(\"jsonld-keyword\", \"meta\");\n }\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) break;\n escaped = !escaped && next == \"\\\\\";\n }\n if (!escaped) state.tokenize = tokenBase;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return ret(\"comment\", \"comment\");\n }\n\n function tokenQuasi(stream, state) {\n var escaped = false, next;\n while ((next = stream.next()) != null) {\n if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n return ret(\"quasi\", \"string-2\", stream.current());\n }\n\n var brackets = \"([{}])\";\n // This is a crude lookahead trick to try and notice that we're\n // parsing the argument patterns for a fat-arrow function before we\n // actually hit the arrow token. It only works if the arrow is on\n // the same line as the arguments and there's no strange noise\n // (comments) in between. Fallback is to only notice when we hit the\n // arrow, and not declare the arguments as locals for the arrow\n // body.\n function findFatArrow(stream, state) {\n if (state.fatArrowAt) state.fatArrowAt = null;\n var arrow = stream.string.indexOf(\"=>\", stream.start);\n if (arrow < 0) return;\n\n if (isTS) { // Try to skip TypeScript return type declarations after the arguments\n var m = /:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(stream.string.slice(stream.start, arrow))\n if (m) arrow = m.index\n }\n\n var depth = 0, sawSomething = false;\n for (var pos = arrow - 1; pos >= 0; --pos) {\n var ch = stream.string.charAt(pos);\n var bracket = brackets.indexOf(ch);\n if (bracket >= 0 && bracket < 3) {\n if (!depth) { ++pos; break; }\n if (--depth == 0) { if (ch == \"(\") sawSomething = true; break; }\n } else if (bracket >= 3 && bracket < 6) {\n ++depth;\n } else if (wordRE.test(ch)) {\n sawSomething = true;\n } else if (/[\"'\\/]/.test(ch)) {\n return;\n } else if (sawSomething && !depth) {\n ++pos;\n break;\n }\n }\n if (sawSomething && !depth) state.fatArrowAt = pos;\n }\n\n // Parser\n\n var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n function JSLexical(indented, column, type, align, prev, info) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.prev = prev;\n this.info = info;\n if (align != null) this.align = align;\n }\n\n function inScope(state, varname) {\n for (var v = state.localVars; v; v = v.next)\n if (v.name == varname) return true;\n for (var cx = state.context; cx; cx = cx.prev) {\n for (var v = cx.vars; v; v = v.next)\n if (v.name == varname) return true;\n }\n }\n\n function parseJS(state, style, type, content, stream) {\n var cc = state.cc;\n // Communicate our context to the combinators.\n // (Less wasteful than consing up a hundred closures on every call.)\n cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;\n\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = true;\n\n while(true) {\n var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n if (combinator(type, content)) {\n while(cc.length && cc[cc.length - 1].lex)\n cc.pop()();\n if (cx.marked) return cx.marked;\n if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n return style;\n }\n }\n }\n\n // Combinator utils\n\n var cx = {state: null, column: null, marked: null, cc: null};\n function pass() {\n for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n }\n function cont() {\n pass.apply(null, arguments);\n return true;\n }\n function inList(name, list) {\n for (var v = list; v; v = v.next) if (v.name == name) return true\n return false;\n }\n function register(varname) {\n var state = cx.state;\n cx.marked = \"def\";\n if (state.context) {\n if (state.lexical.info == \"var\" && state.context && state.context.block) {\n // FIXME function decls are also not block scoped\n var newContext = registerVarScoped(varname, state.context)\n if (newContext != null) {\n state.context = newContext\n return\n }\n } else if (!inList(varname, state.localVars)) {\n state.localVars = new Var(varname, state.localVars)\n return\n }\n }\n // Fall through means this is global\n if (parserConfig.globalVars && !inList(varname, state.globalVars))\n state.globalVars = new Var(varname, state.globalVars)\n }\n function registerVarScoped(varname, context) {\n if (!context) {\n return null\n } else if (context.block) {\n var inner = registerVarScoped(varname, context.prev)\n if (!inner) return null\n if (inner == context.prev) return context\n return new Context(inner, context.vars, true)\n } else if (inList(varname, context.vars)) {\n return context\n } else {\n return new Context(context.prev, new Var(varname, context.vars), false)\n }\n }\n\n function isModifier(name) {\n return name == \"public\" || name == \"private\" || name == \"protected\" || name == \"abstract\" || name == \"readonly\"\n }\n\n // Combinators\n\n function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }\n function Var(name, next) { this.name = name; this.next = next }\n\n var defaultVars = new Var(\"this\", new Var(\"arguments\", null))\n function pushcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, false)\n cx.state.localVars = defaultVars\n }\n function pushblockcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, true)\n cx.state.localVars = null\n }\n function popcontext() {\n cx.state.localVars = cx.state.context.vars\n cx.state.context = cx.state.context.prev\n }\n popcontext.lex = true\n function pushlex(type, info) {\n var result = function() {\n var state = cx.state, indent = state.indented;\n if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n indent = outer.indented;\n state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n };\n result.lex = true;\n return result;\n }\n function poplex() {\n var state = cx.state;\n if (state.lexical.prev) {\n if (state.lexical.type == \")\")\n state.indented = state.lexical.indented;\n state.lexical = state.lexical.prev;\n }\n }\n poplex.lex = true;\n\n function expect(wanted) {\n function exp(type) {\n if (type == wanted) return cont();\n else if (wanted == \";\" || type == \"}\" || type == \")\" || type == \"]\") return pass();\n else return cont(exp);\n };\n return exp;\n }\n\n function statement(type, value) {\n if (type == \"var\") return cont(pushlex(\"vardef\", value), vardef, expect(\";\"), poplex);\n if (type == \"keyword a\") return cont(pushlex(\"form\"), parenExpr, statement, poplex);\n if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n if (type == \"keyword d\") return cx.stream.match(/^\\s*$/, false) ? cont() : cont(pushlex(\"stat\"), maybeexpression, expect(\";\"), poplex);\n if (type == \"debugger\") return cont(expect(\";\"));\n if (type == \"{\") return cont(pushlex(\"}\"), pushblockcontext, block, poplex, popcontext);\n if (type == \";\") return cont();\n if (type == \"if\") {\n if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n cx.state.cc.pop()();\n return cont(pushlex(\"form\"), parenExpr, statement, poplex, maybeelse);\n }\n if (type == \"function\") return cont(functiondef);\n if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), className, poplex); }\n if (type == \"variable\") {\n if (isTS && value == \"declare\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else if (isTS && (value == \"module\" || value == \"enum\" || value == \"type\") && cx.stream.match(/^\\s*\\w/, false)) {\n cx.marked = \"keyword\"\n if (value == \"enum\") return cont(enumdef);\n else if (value == \"type\") return cont(typeexpr, expect(\"operator\"), typeexpr, expect(\";\"));\n else return cont(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), block, poplex, poplex)\n } else if (isTS && value == \"namespace\") {\n cx.marked = \"keyword\"\n return cont(pushlex(\"form\"), expression, block, poplex)\n } else if (isTS && value == \"abstract\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else {\n return cont(pushlex(\"stat\"), maybelabel);\n }\n }\n if (type == \"switch\") return cont(pushlex(\"form\"), parenExpr, expect(\"{\"), pushlex(\"}\", \"switch\"), pushblockcontext,\n block, poplex, poplex, popcontext);\n if (type == \"case\") return cont(expression, expect(\":\"));\n if (type == \"default\") return cont(expect(\":\"));\n if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);\n if (type == \"export\") return cont(pushlex(\"stat\"), afterExport, poplex);\n if (type == \"import\") return cont(pushlex(\"stat\"), afterImport, poplex);\n if (type == \"async\") return cont(statement)\n if (value == \"@\") return cont(expression, statement)\n return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n }\n function maybeCatchBinding(type) {\n if (type == \"(\") return cont(funarg, expect(\")\"))\n }\n function expression(type, value) {\n return expressionInner(type, value, false);\n }\n function expressionNoComma(type, value) {\n return expressionInner(type, value, true);\n }\n function parenExpr(type) {\n if (type != \"(\") return pass()\n return cont(pushlex(\")\"), expression, expect(\")\"), poplex)\n }\n function expressionInner(type, value, noComma) {\n if (cx.state.fatArrowAt == cx.stream.start) {\n var body = noComma ? arrowBodyNoComma : arrowBody;\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, expect(\"=>\"), body, popcontext);\n else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n }\n\n var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n if (type == \"function\") return cont(functiondef, maybeop);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), classExpression, poplex); }\n if (type == \"keyword c\" || type == \"async\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeop);\n if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n if (type == \"quasi\") return pass(quasi, maybeop);\n if (type == \"new\") return cont(maybeTarget(noComma));\n if (type == \"import\") return cont(expression);\n return cont();\n }\n function maybeexpression(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expression);\n }\n\n function maybeoperatorComma(type, value) {\n if (type == \",\") return cont(expression);\n return maybeoperatorNoComma(type, value, false);\n }\n function maybeoperatorNoComma(type, value, noComma) {\n var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n var expr = noComma == false ? expression : expressionNoComma;\n if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n if (type == \"operator\") {\n if (/\\+\\+|--/.test(value) || isTS && value == \"!\") return cont(me);\n if (isTS && value == \"<\" && cx.stream.match(/^([^>]|<.*?>)*>\\s*\\(/, false))\n return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, me);\n if (value == \"?\") return cont(expression, expect(\":\"), expr);\n return cont(expr);\n }\n if (type == \"quasi\") { return pass(quasi, me); }\n if (type == \";\") return;\n if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n if (type == \".\") return cont(property, me);\n if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n if (isTS && value == \"as\") { cx.marked = \"keyword\"; return cont(typeexpr, me) }\n if (type == \"regexp\") {\n cx.state.lastType = cx.marked = \"operator\"\n cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)\n return cont(expr)\n }\n }\n function quasi(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n return cont(expression, continueQuasi);\n }\n function continueQuasi(type) {\n if (type == \"}\") {\n cx.marked = \"string-2\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasi);\n }\n }\n function arrowBody(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expression);\n }\n function arrowBodyNoComma(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expressionNoComma);\n }\n function maybeTarget(noComma) {\n return function(type) {\n if (type == \".\") return cont(noComma ? targetNoComma : target);\n else if (type == \"variable\" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)\n else return pass(noComma ? expressionNoComma : expression);\n };\n }\n function target(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorComma); }\n }\n function targetNoComma(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorNoComma); }\n }\n function maybelabel(type) {\n if (type == \":\") return cont(poplex, statement);\n return pass(maybeoperatorComma, expect(\";\"), poplex);\n }\n function property(type) {\n if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n }\n function objprop(type, value) {\n if (type == \"async\") {\n cx.marked = \"property\";\n return cont(objprop);\n } else if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(getterSetter);\n var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params\n if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\\s*:\\s*/, false)))\n cx.state.fatArrowAt = cx.stream.pos + m[0].length\n return cont(afterprop);\n } else if (type == \"number\" || type == \"string\") {\n cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n return cont(afterprop);\n } else if (type == \"jsonld-keyword\") {\n return cont(afterprop);\n } else if (isTS && isModifier(value)) {\n cx.marked = \"keyword\"\n return cont(objprop)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), afterprop);\n } else if (type == \"spread\") {\n return cont(expressionNoComma, afterprop);\n } else if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(objprop);\n } else if (type == \":\") {\n return pass(afterprop)\n }\n }\n function getterSetter(type) {\n if (type != \"variable\") return pass(afterprop);\n cx.marked = \"property\";\n return cont(functiondef);\n }\n function afterprop(type) {\n if (type == \":\") return cont(expressionNoComma);\n if (type == \"(\") return pass(functiondef);\n }\n function commasep(what, end, sep) {\n function proceed(type, value) {\n if (sep ? sep.indexOf(type) > -1 : type == \",\") {\n var lex = cx.state.lexical;\n if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n return cont(function(type, value) {\n if (type == end || value == end) return pass()\n return pass(what)\n }, proceed);\n }\n if (type == end || value == end) return cont();\n return cont(expect(end));\n }\n return function(type, value) {\n if (type == end || value == end) return cont();\n return pass(what, proceed);\n };\n }\n function contCommasep(what, end, info) {\n for (var i = 3; i < arguments.length; i++)\n cx.cc.push(arguments[i]);\n return cont(pushlex(end, info), commasep(what, end), poplex);\n }\n function block(type) {\n if (type == \"}\") return cont();\n return pass(statement, block);\n }\n function maybetype(type, value) {\n if (isTS) {\n if (type == \":\") return cont(typeexpr);\n if (value == \"?\") return cont(maybetype);\n }\n }\n function mayberettype(type) {\n if (isTS && type == \":\") {\n if (cx.stream.match(/^\\s*\\w+\\s+is\\b/, false)) return cont(expression, isKW, typeexpr)\n else return cont(typeexpr)\n }\n }\n function isKW(_, value) {\n if (value == \"is\") {\n cx.marked = \"keyword\"\n return cont()\n }\n }\n function typeexpr(type, value) {\n if (value == \"keyof\" || value == \"typeof\") {\n cx.marked = \"keyword\"\n return cont(value == \"keyof\" ? typeexpr : expressionNoComma)\n }\n if (type == \"variable\" || value == \"void\") {\n cx.marked = \"type\"\n return cont(afterType)\n }\n if (type == \"string\" || type == \"number\" || type == \"atom\") return cont(afterType);\n if (type == \"[\") return cont(pushlex(\"]\"), commasep(typeexpr, \"]\", \",\"), poplex, afterType)\n if (type == \"{\") return cont(pushlex(\"}\"), commasep(typeprop, \"}\", \",;\"), poplex, afterType)\n if (type == \"(\") return cont(commasep(typearg, \")\"), maybeReturnType)\n if (type == \"<\") return cont(commasep(typeexpr, \">\"), typeexpr)\n }\n function maybeReturnType(type) {\n if (type == \"=>\") return cont(typeexpr)\n }\n function typeprop(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\"\n return cont(typeprop)\n } else if (value == \"?\") {\n return cont(typeprop)\n } else if (type == \":\") {\n return cont(typeexpr)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), typeprop)\n }\n }\n function typearg(type, value) {\n if (type == \"variable\" && cx.stream.match(/^\\s*[?:]/, false) || value == \"?\") return cont(typearg)\n if (type == \":\") return cont(typeexpr)\n return pass(typeexpr)\n }\n function afterType(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n if (value == \"|\" || type == \".\" || value == \"&\") return cont(typeexpr)\n if (type == \"[\") return cont(expect(\"]\"), afterType)\n if (value == \"extends\" || value == \"implements\") { cx.marked = \"keyword\"; return cont(typeexpr) }\n }\n function maybeTypeArgs(_, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n }\n function typeparam() {\n return pass(typeexpr, maybeTypeDefault)\n }\n function maybeTypeDefault(_, value) {\n if (value == \"=\") return cont(typeexpr)\n }\n function vardef(_, value) {\n if (value == \"enum\") {cx.marked = \"keyword\"; return cont(enumdef)}\n return pass(pattern, maybetype, maybeAssign, vardefCont);\n }\n function pattern(type, value) {\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(pattern) }\n if (type == \"variable\") { register(value); return cont(); }\n if (type == \"spread\") return cont(pattern);\n if (type == \"[\") return contCommasep(pattern, \"]\");\n if (type == \"{\") return contCommasep(proppattern, \"}\");\n }\n function proppattern(type, value) {\n if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n register(value);\n return cont(maybeAssign);\n }\n if (type == \"variable\") cx.marked = \"property\";\n if (type == \"spread\") return cont(pattern);\n if (type == \"}\") return pass();\n return cont(expect(\":\"), pattern, maybeAssign);\n }\n function maybeAssign(_type, value) {\n if (value == \"=\") return cont(expressionNoComma);\n }\n function vardefCont(type) {\n if (type == \",\") return cont(vardef);\n }\n function maybeelse(type, value) {\n if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n }\n function forspec(type, value) {\n if (value == \"await\") return cont(forspec);\n if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n }\n function forspec1(type) {\n if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n if (type == \";\") return cont(forspec2);\n if (type == \"variable\") return cont(formaybeinof);\n return pass(expression, expect(\";\"), forspec2);\n }\n function formaybeinof(_type, value) {\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return cont(maybeoperatorComma, forspec2);\n }\n function forspec2(type, value) {\n if (type == \";\") return cont(forspec3);\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return pass(expression, expect(\";\"), forspec3);\n }\n function forspec3(type) {\n if (type != \")\") cont(expression);\n }\n function functiondef(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n if (type == \"variable\") {register(value); return cont(functiondef);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, statement, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondef)\n }\n function funarg(type, value) {\n if (value == \"@\") cont(expression, funarg)\n if (type == \"spread\") return cont(funarg);\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(funarg); }\n return pass(pattern, maybetype, maybeAssign);\n }\n function classExpression(type, value) {\n // Class expressions may have an optional name.\n if (type == \"variable\") return className(type, value);\n return classNameAfter(type, value);\n }\n function className(type, value) {\n if (type == \"variable\") {register(value); return cont(classNameAfter);}\n }\n function classNameAfter(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, classNameAfter)\n if (value == \"extends\" || value == \"implements\" || (isTS && type == \",\")) {\n if (value == \"implements\") cx.marked = \"keyword\";\n return cont(isTS ? typeexpr : expression, classNameAfter);\n }\n if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n }\n function classBody(type, value) {\n if (type == \"async\" ||\n (type == \"variable\" &&\n (value == \"static\" || value == \"get\" || value == \"set\" || (isTS && isModifier(value))) &&\n cx.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/, false))) {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n return cont(isTS ? classfield : functiondef, classBody);\n }\n if (type == \"[\")\n return cont(expression, maybetype, expect(\"]\"), isTS ? classfield : functiondef, classBody)\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \";\") return cont(classBody);\n if (type == \"}\") return cont();\n if (value == \"@\") return cont(expression, classBody)\n }\n function classfield(type, value) {\n if (value == \"?\") return cont(classfield)\n if (type == \":\") return cont(typeexpr, maybeAssign)\n if (value == \"=\") return cont(expressionNoComma)\n return pass(functiondef)\n }\n function afterExport(type, value) {\n if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n if (type == \"{\") return cont(commasep(exportField, \"}\"), maybeFrom, expect(\";\"));\n return pass(statement);\n }\n function exportField(type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(expect(\"variable\")); }\n if (type == \"variable\") return pass(expressionNoComma, exportField);\n }\n function afterImport(type) {\n if (type == \"string\") return cont();\n if (type == \"(\") return pass(expression);\n return pass(importSpec, maybeMoreImports, maybeFrom);\n }\n function importSpec(type, value) {\n if (type == \"{\") return contCommasep(importSpec, \"}\");\n if (type == \"variable\") register(value);\n if (value == \"*\") cx.marked = \"keyword\";\n return cont(maybeAs);\n }\n function maybeMoreImports(type) {\n if (type == \",\") return cont(importSpec, maybeMoreImports)\n }\n function maybeAs(_type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(importSpec); }\n }\n function maybeFrom(_type, value) {\n if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n }\n function arrayLiteral(type) {\n if (type == \"]\") return cont();\n return pass(commasep(expressionNoComma, \"]\"));\n }\n function enumdef() {\n return pass(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), commasep(enummember, \"}\"), poplex, poplex)\n }\n function enummember() {\n return pass(pattern, maybeAssign);\n }\n\n function isContinuedStatement(state, textAfter) {\n return state.lastType == \"operator\" || state.lastType == \",\" ||\n isOperatorChar.test(textAfter.charAt(0)) ||\n /[,.]/.test(textAfter.charAt(0));\n }\n\n function expressionAllowed(stream, state, backUp) {\n return state.tokenize == tokenBase &&\n /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(state.lastType) ||\n (state.lastType == \"quasi\" && /\\{\\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))\n }\n\n // Interface\n\n return {\n startState: function(basecolumn) {\n var state = {\n tokenize: tokenBase,\n lastType: \"sof\",\n cc: [],\n lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n localVars: parserConfig.localVars,\n context: parserConfig.localVars && new Context(null, null, false),\n indented: basecolumn || 0\n };\n if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n state.globalVars = parserConfig.globalVars;\n return state;\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = false;\n state.indented = stream.indentation();\n findFatArrow(stream, state);\n }\n if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n if (type == \"comment\") return style;\n state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n return parseJS(state, style, type, content, stream);\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize == tokenComment) return CodeMirror.Pass;\n if (state.tokenize != tokenBase) return 0;\n var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top\n // Kludge to prevent 'maybelse' from blocking lexical scope pops\n if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n var c = state.cc[i];\n if (c == poplex) lexical = lexical.prev;\n else if (c != maybeelse) break;\n }\n while ((lexical.type == \"stat\" || lexical.type == \"form\") &&\n (firstChar == \"}\" || ((top = state.cc[state.cc.length - 1]) &&\n (top == maybeoperatorComma || top == maybeoperatorNoComma) &&\n !/^[,\\.=+\\-*:?[\\(]/.test(textAfter))))\n lexical = lexical.prev;\n if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n lexical = lexical.prev;\n var type = lexical.type, closing = firstChar == type;\n\n if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info.length + 1 : 0);\n else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n else if (type == \"form\") return lexical.indented + indentUnit;\n else if (type == \"stat\")\n return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);\n else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n else return lexical.indented + (closing ? 0 : indentUnit);\n },\n\n electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n blockCommentStart: jsonMode ? null : \"/*\",\n blockCommentEnd: jsonMode ? null : \"*/\",\n blockCommentContinue: jsonMode ? null : \" * \",\n lineComment: jsonMode ? null : \"//\",\n fold: \"brace\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n\n helperType: jsonMode ? \"json\" : \"javascript\",\n jsonldMode: jsonldMode,\n jsonMode: jsonMode,\n\n expressionAllowed: expressionAllowed,\n\n skipExpression: function(state) {\n var top = state.cc[state.cc.length - 1]\n if (top == expression || top == expressionNoComma) state.cc.pop()\n }\n };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n\n},{\"../../lib/codemirror\":14}],18:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n}\n\nvar xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n var indentUnit = editorConf.indentUnit\n var config = {}\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n for (var prop in defaults) config[prop] = defaults[prop]\n for (var prop in config_) config[prop] = config_[prop]\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n }\n }\n\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName;\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n popContext(state);\n if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n config.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function(baseIndent) {\n var state = {tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null, tagStart: null,\n context: null}\n if (baseIndent != null) state.baseIndent = baseIndent\n return state\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n if (tagAfter && tagAfter[1]) { // Closing tag spotted\n while (context) {\n if (context.tagName == tagAfter[2]) {\n context = context.prev;\n break;\n } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n context = context.prev;\n } else {\n break;\n }\n }\n } else if (tagAfter) { // Opening tag spotted\n while (context) {\n var grabbers = config.contextGrabbers[context.tagName];\n if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n context = context.prev;\n else\n break;\n }\n }\n while (context && context.prev && !context.startOfLine)\n context = context.prev;\n if (context) return context.indent + indentUnit;\n else return state.baseIndent || 0;\n },\n\n electricInput: /<\\/[\\s\\w:]+>$/,\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n\n skipAttribute: function(state) {\n if (state.state == attrValueState)\n state.state = attrState\n }\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n\n},{\"../../lib/codemirror\":14}],19:[function(require,module,exports){\n(function(global,factory){if(typeof define === 'function' && define.amd){define(['exports'],factory);}else if(typeof exports !== 'undefined'){factory(exports);}else {var mod={exports:{}};factory(mod.exports);global.decko = mod.exports;}})(this,function(exports){'use strict';exports.__esModule = true;var EMPTY={};var HOP=Object.prototype.hasOwnProperty;var fns={memoize:function memoize(fn){var opt=arguments.length <= 1 || arguments[1] === undefined?EMPTY:arguments[1];var cache=opt.cache || {};return function(){for(var _len=arguments.length,a=Array(_len),_key=0;_key < _len;_key++) {a[_key] = arguments[_key];}var k=String(a[0]);if(opt.caseSensitive === false)k = k.toLowerCase();return HOP.call(cache,k)?cache[k]:cache[k] = fn.apply(this,a);};},debounce:function debounce(fn,opts){if(typeof opts === 'function'){var p=fn;fn = opts;opts = p;}var delay=opts && opts.delay || opts || 0,args=undefined,context=undefined,timer=undefined;return function(){for(var _len2=arguments.length,a=Array(_len2),_key2=0;_key2 < _len2;_key2++) {a[_key2] = arguments[_key2];}args = a;context = this;if(!timer)timer = setTimeout(function(){fn.apply(context,args);args = context = timer = null;},delay);};},bind:function bind(target,key,_ref){var fn=_ref.value;return {configurable:true,get:function get(){var value=fn.bind(this);Object.defineProperty(this,key,{value:value,configurable:true,writable:true});return value;}};}};var memoize=multiMethod(fns.memoize),debounce=multiMethod(fns.debounce),bind=multiMethod(function(f,c){return f.bind(c);},function(){return fns.bind;});exports.memoize = memoize;exports.debounce = debounce;exports.bind = bind;exports['default'] = {memoize:memoize,debounce:debounce,bind:bind};function multiMethod(inner,deco){deco = deco || inner.decorate || decorator(inner);var d=deco();return function(){for(var _len3=arguments.length,args=Array(_len3),_key3=0;_key3 < _len3;_key3++) {args[_key3] = arguments[_key3];}var l=args.length;return (l < 2?deco:l > 2?d:inner).apply(undefined,args);};}function decorator(fn){return function(opt){return typeof opt === 'function'?fn(opt):function(target,key,desc){desc.value = fn(desc.value,opt,target,key,desc);};};}});\n\n\n},{}],20:[function(require,module,exports){\nfunction dlv(t,e,n,l){for(l=0,e=e.split?e.split(\".\"):e;t&&l<e.length;)t=t[e[l++]];return void 0===t?n:t}function linkState(t,e,n){var l=e.split(\".\"),r=t.__lsc||(t.__lsc={});return r[e+n]||(r[e+n]=function(e){for(var r=e&&e.target||this,a={},i=a,o=\"string\"==typeof n?dlv(e,n):r.nodeName?r.type.match(/^che|rad/)?r.checked:r.value:e,s=0;s<l.length-1;s++)i=i[l[s]]||(i[l[s]]=!s&&t.state[l[s]]||{});i[l[s]]=o,t.setState(a)})}module.exports=linkState;\n\n\n},{}],21:[function(require,module,exports){\n!function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):e.preactRenderToString=n()}(this,function(){var e=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,n=Object.keys||function(e){var n=[];for(var t in e)e.hasOwnProperty(t)&&n.push(t);return n},t=function(e){return String(e).replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\").replace(/\"/g,\""\")},r=function(e,n){return String(e).replace(/(\\n+)/g,\"$1\"+(n||\"\\t\"))},o=function(e,n,t){return String(e).length>(n||40)||!t&&-1!==String(e).indexOf(\"\\n\")||-1!==String(e).indexOf(\"<\")},i={};function a(n){var t=\"\";for(var r in n){var o=n[r];null!=o&&(t&&(t+=\" \"),t+=i[r]||(i[r]=r.replace(/([A-Z])/g,\"-$1\").toLowerCase()),t+=\": \",t+=o,\"number\"==typeof o&&!1===e.test(r)&&(t+=\"px\"),t+=\";\")}return t||void 0}function l(e,n){for(var t in n)e[t]=n[t];return e}var f={shallow:!0},c=[],u=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/;s.render=s;function s(e,i,f,p,d){if(null==e||\"boolean\"==typeof e)return\"\";var h=e.nodeName,g=e.attributes,v=!1;i=i||{};var m,b=(f=f||{}).pretty,y=\"string\"==typeof b?b:\"\\t\";if(\"object\"!=typeof e&&!h)return t(e);if(\"function\"==typeof h){if(v=!0,!f.shallow||!p&&!1!==f.renderRootComponent){var x,w=function(e){var n=e.nodeName.defaultProps,t=l({},n||e.attributes);return n&&l(t,e.attributes),e.children&&(t.children=e.children),t}(e);if(h.prototype&&\"function\"==typeof h.prototype.render){var k=new h(w,i);k._disable=k.__x=!0,k.props=w,k.context=i,k.componentWillMount&&k.componentWillMount(),x=k.render(k.props,k.state,k.context),k.getChildContext&&(i=l(l({},i),k.getChildContext()))}else x=h(w,i);return s(x,i,f,!1!==f.shallowHighOrder)}h=(m=h).displayName||m!==Function&&m.name||function(e){var n=(Function.prototype.toString.call(e).match(/^\\s*function\\s+([^( ]+)/)||\"\")[1];if(!n){for(var t=-1,r=c.length;r--;)if(c[r]===e){t=r;break}t<0&&(t=c.push(e)-1),n=\"UnnamedComponent\"+t}return n}(m)}var O,C=\"\";if(g){var S=n(g);f&&!0===f.sortAttributes&&S.sort();for(var j=0;j<S.length;j++){var $=S[j],_=g[$];if(\"children\"!==$&&(!$.match(/[\\s\\n\\\\/='\"\\0<>]/)&&(f&&f.allAttributes||\"key\"!==$&&\"ref\"!==$))){if(\"className\"===$){if(g.class)continue;$=\"class\"}else d&&$.match(/^xlink:?./)&&($=$.toLowerCase().replace(/^xlink:?/,\"xlink:\"));\"style\"===$&&_&&\"object\"==typeof _&&(_=a(_));var H=f.attributeHook&&f.attributeHook($,_,i,f,v);if(H||\"\"===H)C+=H;else if(\"dangerouslySetInnerHTML\"===$)O=_&&_.__html;else if((_||0===_||\"\"===_)&&\"function\"!=typeof _){if(!(!0!==_&&\"\"!==_||(_=$,f&&f.xml))){C+=\" \"+$;continue}C+=\" \"+$+'=\"'+t(_)+'\"'}}}}var N=C.replace(/^\\n\\s*/,\" \");if(N===C||~N.indexOf(\"\\n\")?b&&~C.indexOf(\"\\n\")&&(C+=\"\\n\"):C=N,C=\"<\"+h+C+\">\",h.match(/[\\s\\n\\\\/='\"\\0<>]/))throw C;var A=h.match(u);A&&(C=C.replace(/>$/,\" />\"));var L=[];if(O)b&&o(O)&&(O=\"\\n\"+y+r(O,y)),C+=O;else if(e.children){for(var M=~C.indexOf(\"\\n\"),R=0;R<e.children.length;R++){var F=e.children[R];if(null!=F&&!1!==F){var P=s(F,i,f,!0,\"svg\"===h||\"foreignObject\"!==h&&d);!M&&b&&o(P)&&(M=!0),P&&L.push(P)}}if(b&&M)for(var T=L.length;T--;)L[T]=\"\\n\"+y+r(L[T],y)}if(L.length)C+=L.join(\"\");else if(f&&f.xml)return C.substring(0,C.length-1)+\" />\";return A||(b&&~C.indexOf(\"\\n\")&&(C+=\"\\n\"),C+=\"</\"+h+\">\"),C}return s.shallowRender=function(e,n){return s(e,n,f)},s});\n\n\n},{}],22:[function(require,module,exports){\n!function() {\n 'use strict';\n function h(nodeName, attributes) {\n var lastSimple, child, simple, i, children = EMPTY_CHILDREN;\n for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]);\n if (attributes && null != attributes.children) {\n if (!stack.length) stack.push(attributes.children);\n delete attributes.children;\n }\n while (stack.length) if ((child = stack.pop()) && void 0 !== child.pop) for (i = child.length; i--; ) stack.push(child[i]); else {\n if ('boolean' == typeof child) child = null;\n if (simple = 'function' != typeof nodeName) if (null == child) child = ''; else if ('number' == typeof child) child = String(child); else if ('string' != typeof child) simple = !1;\n if (simple && lastSimple) children[children.length - 1] += child; else if (children === EMPTY_CHILDREN) children = [ child ]; else children.push(child);\n lastSimple = simple;\n }\n var p = new VNode();\n p.nodeName = nodeName;\n p.children = children;\n p.attributes = null == attributes ? void 0 : attributes;\n p.key = null == attributes ? void 0 : attributes.key;\n if (void 0 !== options.vnode) options.vnode(p);\n return p;\n }\n function extend(obj, props) {\n for (var i in props) obj[i] = props[i];\n return obj;\n }\n function cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n }\n function enqueueRender(component) {\n if (!component.__d && (component.__d = !0) && 1 == items.push(component)) (options.debounceRendering || defer)(rerender);\n }\n function rerender() {\n var p, list = items;\n items = [];\n while (p = list.pop()) if (p.__d) renderComponent(p);\n }\n function isSameNodeType(node, vnode, hydrating) {\n if ('string' == typeof vnode || 'number' == typeof vnode) return void 0 !== node.splitText;\n if ('string' == typeof vnode.nodeName) return !node._componentConstructor && isNamedNode(node, vnode.nodeName); else return hydrating || node._componentConstructor === vnode.nodeName;\n }\n function isNamedNode(node, nodeName) {\n return node.__n === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n }\n function getNodeProps(vnode) {\n var props = extend({}, vnode.attributes);\n props.children = vnode.children;\n var defaultProps = vnode.nodeName.defaultProps;\n if (void 0 !== defaultProps) for (var i in defaultProps) if (void 0 === props[i]) props[i] = defaultProps[i];\n return props;\n }\n function createNode(nodeName, isSvg) {\n var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n node.__n = nodeName;\n return node;\n }\n function removeNode(node) {\n var parentNode = node.parentNode;\n if (parentNode) parentNode.removeChild(node);\n }\n function setAccessor(node, name, old, value, isSvg) {\n if ('className' === name) name = 'class';\n if ('key' === name) ; else if ('ref' === name) {\n if (old) old(null);\n if (value) value(node);\n } else if ('class' === name && !isSvg) node.className = value || ''; else if ('style' === name) {\n if (!value || 'string' == typeof value || 'string' == typeof old) node.style.cssText = value || '';\n if (value && 'object' == typeof value) {\n if ('string' != typeof old) for (var i in old) if (!(i in value)) node.style[i] = '';\n for (var i in value) node.style[i] = 'number' == typeof value[i] && !1 === IS_NON_DIMENSIONAL.test(i) ? value[i] + 'px' : value[i];\n }\n } else if ('dangerouslySetInnerHTML' === name) {\n if (value) node.innerHTML = value.__html || '';\n } else if ('o' == name[0] && 'n' == name[1]) {\n var useCapture = name !== (name = name.replace(/Capture$/, ''));\n name = name.toLowerCase().substring(2);\n if (value) {\n if (!old) node.addEventListener(name, eventProxy, useCapture);\n } else node.removeEventListener(name, eventProxy, useCapture);\n (node.__l || (node.__l = {}))[name] = value;\n } else if ('list' !== name && 'type' !== name && !isSvg && name in node) {\n try {\n node[name] = null == value ? '' : value;\n } catch (e) {}\n if ((null == value || !1 === value) && 'spellcheck' != name) node.removeAttribute(name);\n } else {\n var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n if (null == value || !1 === value) if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase()); else node.removeAttribute(name); else if ('function' != typeof value) if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value); else node.setAttribute(name, value);\n }\n }\n function eventProxy(e) {\n return this.__l[e.type](options.event && options.event(e) || e);\n }\n function flushMounts() {\n var c;\n while (c = mounts.pop()) {\n if (options.afterMount) options.afterMount(c);\n if (c.componentDidMount) c.componentDidMount();\n }\n }\n function diff(dom, vnode, context, mountAll, parent, componentRoot) {\n if (!diffLevel++) {\n isSvgMode = null != parent && void 0 !== parent.ownerSVGElement;\n hydrating = null != dom && !('__preactattr_' in dom);\n }\n var ret = idiff(dom, vnode, context, mountAll, componentRoot);\n if (parent && ret.parentNode !== parent) parent.appendChild(ret);\n if (!--diffLevel) {\n hydrating = !1;\n if (!componentRoot) flushMounts();\n }\n return ret;\n }\n function idiff(dom, vnode, context, mountAll, componentRoot) {\n var out = dom, prevSvgMode = isSvgMode;\n if (null == vnode || 'boolean' == typeof vnode) vnode = '';\n if ('string' == typeof vnode || 'number' == typeof vnode) {\n if (dom && void 0 !== dom.splitText && dom.parentNode && (!dom._component || componentRoot)) {\n if (dom.nodeValue != vnode) dom.nodeValue = vnode;\n } else {\n out = document.createTextNode(vnode);\n if (dom) {\n if (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n recollectNodeTree(dom, !0);\n }\n }\n out.__preactattr_ = !0;\n return out;\n }\n var vnodeName = vnode.nodeName;\n if ('function' == typeof vnodeName) return buildComponentFromVNode(dom, vnode, context, mountAll);\n isSvgMode = 'svg' === vnodeName ? !0 : 'foreignObject' === vnodeName ? !1 : isSvgMode;\n vnodeName = String(vnodeName);\n if (!dom || !isNamedNode(dom, vnodeName)) {\n out = createNode(vnodeName, isSvgMode);\n if (dom) {\n while (dom.firstChild) out.appendChild(dom.firstChild);\n if (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n recollectNodeTree(dom, !0);\n }\n }\n var fc = out.firstChild, props = out.__preactattr_, vchildren = vnode.children;\n if (null == props) {\n props = out.__preactattr_ = {};\n for (var a = out.attributes, i = a.length; i--; ) props[a[i].name] = a[i].value;\n }\n if (!hydrating && vchildren && 1 === vchildren.length && 'string' == typeof vchildren[0] && null != fc && void 0 !== fc.splitText && null == fc.nextSibling) {\n if (fc.nodeValue != vchildren[0]) fc.nodeValue = vchildren[0];\n } else if (vchildren && vchildren.length || null != fc) innerDiffNode(out, vchildren, context, mountAll, hydrating || null != props.dangerouslySetInnerHTML);\n diffAttributes(out, vnode.attributes, props);\n isSvgMode = prevSvgMode;\n return out;\n }\n function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n var j, c, f, vchild, child, originalChildren = dom.childNodes, children = [], keyed = {}, keyedLen = 0, min = 0, len = originalChildren.length, childrenLen = 0, vlen = vchildren ? vchildren.length : 0;\n if (0 !== len) for (var i = 0; i < len; i++) {\n var _child = originalChildren[i], props = _child.__preactattr_, key = vlen && props ? _child._component ? _child._component.__k : props.key : null;\n if (null != key) {\n keyedLen++;\n keyed[key] = _child;\n } else if (props || (void 0 !== _child.splitText ? isHydrating ? _child.nodeValue.trim() : !0 : isHydrating)) children[childrenLen++] = _child;\n }\n if (0 !== vlen) for (var i = 0; i < vlen; i++) {\n vchild = vchildren[i];\n child = null;\n var key = vchild.key;\n if (null != key) {\n if (keyedLen && void 0 !== keyed[key]) {\n child = keyed[key];\n keyed[key] = void 0;\n keyedLen--;\n }\n } else if (min < childrenLen) for (j = min; j < childrenLen; j++) if (void 0 !== children[j] && isSameNodeType(c = children[j], vchild, isHydrating)) {\n child = c;\n children[j] = void 0;\n if (j === childrenLen - 1) childrenLen--;\n if (j === min) min++;\n break;\n }\n child = idiff(child, vchild, context, mountAll);\n f = originalChildren[i];\n if (child && child !== dom && child !== f) if (null == f) dom.appendChild(child); else if (child === f.nextSibling) removeNode(f); else dom.insertBefore(child, f);\n }\n if (keyedLen) for (var i in keyed) if (void 0 !== keyed[i]) recollectNodeTree(keyed[i], !1);\n while (min <= childrenLen) if (void 0 !== (child = children[childrenLen--])) recollectNodeTree(child, !1);\n }\n function recollectNodeTree(node, unmountOnly) {\n var component = node._component;\n if (component) unmountComponent(component); else {\n if (null != node.__preactattr_ && node.__preactattr_.ref) node.__preactattr_.ref(null);\n if (!1 === unmountOnly || null == node.__preactattr_) removeNode(node);\n removeChildren(node);\n }\n }\n function removeChildren(node) {\n node = node.lastChild;\n while (node) {\n var next = node.previousSibling;\n recollectNodeTree(node, !0);\n node = next;\n }\n }\n function diffAttributes(dom, attrs, old) {\n var name;\n for (name in old) if ((!attrs || null == attrs[name]) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode);\n for (name in attrs) if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n }\n function createComponent(Ctor, props, context) {\n var inst, i = recyclerComponents.length;\n if (Ctor.prototype && Ctor.prototype.render) {\n inst = new Ctor(props, context);\n Component.call(inst, props, context);\n } else {\n inst = new Component(props, context);\n inst.constructor = Ctor;\n inst.render = doRender;\n }\n while (i--) if (recyclerComponents[i].constructor === Ctor) {\n inst.__b = recyclerComponents[i].__b;\n recyclerComponents.splice(i, 1);\n return inst;\n }\n return inst;\n }\n function doRender(props, state, context) {\n return this.constructor(props, context);\n }\n function setComponentProps(component, props, renderMode, context, mountAll) {\n if (!component.__x) {\n component.__x = !0;\n component.__r = props.ref;\n component.__k = props.key;\n delete props.ref;\n delete props.key;\n if (void 0 === component.constructor.getDerivedStateFromProps) if (!component.base || mountAll) {\n if (component.componentWillMount) component.componentWillMount();\n } else if (component.componentWillReceiveProps) component.componentWillReceiveProps(props, context);\n if (context && context !== component.context) {\n if (!component.__c) component.__c = component.context;\n component.context = context;\n }\n if (!component.__p) component.__p = component.props;\n component.props = props;\n component.__x = !1;\n if (0 !== renderMode) if (1 === renderMode || !1 !== options.syncComponentUpdates || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component);\n if (component.__r) component.__r(component);\n }\n }\n function renderComponent(component, renderMode, mountAll, isChild) {\n if (!component.__x) {\n var rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.__p || props, previousState = component.__s || state, previousContext = component.__c || context, isUpdate = component.base, nextBase = component.__b, initialBase = isUpdate || nextBase, initialChildComponent = component._component, skip = !1, snapshot = previousContext;\n if (component.constructor.getDerivedStateFromProps) {\n state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n component.state = state;\n }\n if (isUpdate) {\n component.props = previousProps;\n component.state = previousState;\n component.context = previousContext;\n if (2 !== renderMode && component.shouldComponentUpdate && !1 === component.shouldComponentUpdate(props, state, context)) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context);\n component.props = props;\n component.state = state;\n component.context = context;\n }\n component.__p = component.__s = component.__c = component.__b = null;\n component.__d = !1;\n if (!skip) {\n rendered = component.render(props, state, context);\n if (component.getChildContext) context = extend(extend({}, context), component.getChildContext());\n if (isUpdate && component.getSnapshotBeforeUpdate) snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n var toUnmount, base, childComponent = rendered && rendered.nodeName;\n if ('function' == typeof childComponent) {\n var childProps = getNodeProps(rendered);\n inst = initialChildComponent;\n if (inst && inst.constructor === childComponent && childProps.key == inst.__k) setComponentProps(inst, childProps, 1, context, !1); else {\n toUnmount = inst;\n component._component = inst = createComponent(childComponent, childProps, context);\n inst.__b = inst.__b || nextBase;\n inst.__u = component;\n setComponentProps(inst, childProps, 0, context, !1);\n renderComponent(inst, 1, mountAll, !0);\n }\n base = inst.base;\n } else {\n cbase = initialBase;\n toUnmount = initialChildComponent;\n if (toUnmount) cbase = component._component = null;\n if (initialBase || 1 === renderMode) {\n if (cbase) cbase._component = null;\n base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0);\n }\n }\n if (initialBase && base !== initialBase && inst !== initialChildComponent) {\n var baseParent = initialBase.parentNode;\n if (baseParent && base !== baseParent) {\n baseParent.replaceChild(base, initialBase);\n if (!toUnmount) {\n initialBase._component = null;\n recollectNodeTree(initialBase, !1);\n }\n }\n }\n if (toUnmount) unmountComponent(toUnmount);\n component.base = base;\n if (base && !isChild) {\n var componentRef = component, t = component;\n while (t = t.__u) (componentRef = t).base = base;\n base._component = componentRef;\n base._componentConstructor = componentRef.constructor;\n }\n }\n if (!isUpdate || mountAll) mounts.unshift(component); else if (!skip) {\n if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, snapshot);\n if (options.afterUpdate) options.afterUpdate(component);\n }\n while (component.__h.length) component.__h.pop().call(component);\n if (!diffLevel && !isChild) flushMounts();\n }\n }\n function buildComponentFromVNode(dom, vnode, context, mountAll) {\n var c = dom && dom._component, originalComponent = c, oldDom = dom, isDirectOwner = c && dom._componentConstructor === vnode.nodeName, isOwner = isDirectOwner, props = getNodeProps(vnode);\n while (c && !isOwner && (c = c.__u)) isOwner = c.constructor === vnode.nodeName;\n if (c && isOwner && (!mountAll || c._component)) {\n setComponentProps(c, props, 3, context, mountAll);\n dom = c.base;\n } else {\n if (originalComponent && !isDirectOwner) {\n unmountComponent(originalComponent);\n dom = oldDom = null;\n }\n c = createComponent(vnode.nodeName, props, context);\n if (dom && !c.__b) {\n c.__b = dom;\n oldDom = null;\n }\n setComponentProps(c, props, 1, context, mountAll);\n dom = c.base;\n if (oldDom && dom !== oldDom) {\n oldDom._component = null;\n recollectNodeTree(oldDom, !1);\n }\n }\n return dom;\n }\n function unmountComponent(component) {\n if (options.beforeUnmount) options.beforeUnmount(component);\n var base = component.base;\n component.__x = !0;\n if (component.componentWillUnmount) component.componentWillUnmount();\n component.base = null;\n var inner = component._component;\n if (inner) unmountComponent(inner); else if (base) {\n if (base.__preactattr_ && base.__preactattr_.ref) base.__preactattr_.ref(null);\n component.__b = base;\n removeNode(base);\n recyclerComponents.push(component);\n removeChildren(base);\n }\n if (component.__r) component.__r(null);\n }\n function Component(props, context) {\n this.__d = !0;\n this.context = context;\n this.props = props;\n this.state = this.state || {};\n this.__h = [];\n }\n function render(vnode, parent, merge) {\n return diff(merge, vnode, {}, !1, parent, !1);\n }\n var VNode = function() {};\n var options = {};\n var stack = [];\n var EMPTY_CHILDREN = [];\n var defer = 'function' == typeof Promise ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n var items = [];\n var mounts = [];\n var diffLevel = 0;\n var isSvgMode = !1;\n var hydrating = !1;\n var recyclerComponents = [];\n extend(Component.prototype, {\n setState: function(state, callback) {\n var prev = this.__s = this.state;\n if ('function' == typeof state) state = state(prev, this.props);\n this.state = extend(extend({}, prev), state);\n if (callback) this.__h.push(callback);\n enqueueRender(this);\n },\n forceUpdate: function(callback) {\n if (callback) this.__h.push(callback);\n renderComponent(this, 2);\n },\n render: function() {}\n });\n var preact = {\n h: h,\n createElement: h,\n cloneElement: cloneElement,\n Component: Component,\n render: render,\n rerender: rerender,\n options: options\n };\n if ('undefined' != typeof module) module.exports = preact; else self.preact = preact;\n}();\n\n},{}],23:[function(require,module,exports){\nfunction tlite(getTooltipOpts) {\n document.addEventListener('mouseover', function (e) {\n var el = e.target;\n var opts = getTooltipOpts(el);\n\n if (!opts) {\n el = el.parentElement;\n opts = el && getTooltipOpts(el);\n }\n\n opts && tlite.show(el, opts, true);\n });\n}\n\ntlite.show = function (el, opts, isAuto) {\n var fallbackAttrib = 'data-tlite';\n opts = opts || {};\n\n (el.tooltip || Tooltip(el, opts)).show();\n\n function Tooltip(el, opts) {\n var tooltipEl;\n var showTimer;\n var text;\n\n el.addEventListener('mousedown', autoHide);\n el.addEventListener('mouseleave', autoHide);\n\n function show() {\n text = el.title || el.getAttribute(fallbackAttrib) || text;\n el.title = '';\n el.setAttribute(fallbackAttrib, '');\n text && !showTimer && (showTimer = setTimeout(fadeIn, isAuto ? 150 : 1))\n }\n\n function autoHide() {\n tlite.hide(el, true);\n }\n\n function hide(isAutoHiding) {\n if (isAuto === isAutoHiding) {\n showTimer = clearTimeout(showTimer);\n var parent = tooltipEl && tooltipEl.parentNode;\n parent && parent.removeChild(tooltipEl);\n tooltipEl = undefined;\n }\n }\n\n function fadeIn() {\n if (!tooltipEl) {\n tooltipEl = createTooltip(el, text, opts);\n }\n }\n\n return el.tooltip = {\n show: show,\n hide: hide\n };\n }\n\n function createTooltip(el, text, opts) {\n var tooltipEl = document.createElement('span');\n var grav = opts.grav || el.getAttribute('data-tlite') || 'n';\n\n tooltipEl.innerHTML = text;\n\n el.appendChild(tooltipEl);\n\n var vertGrav = grav[0] || '';\n var horzGrav = grav[1] || '';\n\n function positionTooltip() {\n tooltipEl.className = 'tlite ' + 'tlite-' + vertGrav + horzGrav;\n\n var arrowSize = 10;\n var top = el.offsetTop;\n var left = el.offsetLeft;\n\n if (tooltipEl.offsetParent === el) {\n top = left = 0;\n }\n\n var width = el.offsetWidth;\n var height = el.offsetHeight;\n var tooltipHeight = tooltipEl.offsetHeight;\n var tooltipWidth = tooltipEl.offsetWidth;\n var centerEl = left + (width / 2);\n\n tooltipEl.style.top = (\n vertGrav === 's' ? (top - tooltipHeight - arrowSize) :\n vertGrav === 'n' ? (top + height + arrowSize) :\n (top + (height / 2) - (tooltipHeight / 2))\n ) + 'px';\n\n tooltipEl.style.left = (\n horzGrav === 'w' ? left :\n horzGrav === 'e' ? left + width - tooltipWidth :\n vertGrav === 'w' ? (left + width + arrowSize) :\n vertGrav === 'e' ? (left - tooltipWidth - arrowSize) :\n (centerEl - tooltipWidth / 2)\n ) + 'px';\n }\n\n positionTooltip();\n\n var rect = tooltipEl.getBoundingClientRect();\n\n if (vertGrav === 's' && rect.top < 0) {\n vertGrav = 'n';\n positionTooltip();\n } else if (vertGrav === 'n' && rect.bottom > window.innerHeight) {\n vertGrav = 's';\n positionTooltip();\n } else if (vertGrav === 'e' && rect.left < 0) {\n vertGrav = 'w';\n positionTooltip();\n } else if (vertGrav === 'w' && rect.right > window.innerWidth) {\n vertGrav = 'e';\n positionTooltip();\n }\n\n tooltipEl.className += ' tlite-visible';\n\n return tooltipEl;\n }\n};\n\ntlite.hide = function (el, isAuto) {\n el.tooltip && el.tooltip.hide(isAuto);\n};\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = tlite;\n}\n\n},{}]},{},[2]);\n; })();"]}
\ No newline at end of file
-(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){
+(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
-function getFieldValues(form, fieldName) {
+function getFieldValues(form, fieldName, evt) {
var values = [];
- var inputs = form.querySelectorAll('input[name="' + fieldName + '"], select[name="' + fieldName + '"], textarea[name="' + fieldName + '"]');
+ var inputs = form.querySelectorAll('input[name="' + fieldName + '"], select[name="' + fieldName + '"], textarea[name="' + fieldName + '"], button[name="' + fieldName + '"]');
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
- var type = input.getAttribute("type");
+ var type = input.getAttribute("type").toLowerCase();
if ((type === "radio" || type === "checkbox") && !input.checked) {
continue;
}
+ // ignore buttons which are not clicked (in case there's more than one button with same name)
+ if (type === 'button' || type === 'submit' || input.tagName === 'BUTTON') {
+ if ((!evt || evt.target !== input) && form.dataset[fieldName] !== input.value) {
+ continue;
+ }
+
+ form.dataset[fieldName] = input.value;
+ }
+
values.push(input.value);
}
+ // default to an empty string
+ // can be used to show or hide an element when a field is empty or has not been set
+ // Usage: data-show-if="FIELDNAME:"
+ if (values.length == 0) {
+ values.push("");
+ }
+
return values;
}
return null;
}
-function toggleElement(el) {
+function toggleElement(el, evt) {
var show = !!el.getAttribute('data-show-if');
var conditions = show ? el.getAttribute('data-show-if').split(':') : el.getAttribute('data-hide-if').split(':');
var fieldName = conditions[0];
var expectedValues = (conditions.length > 1 ? conditions[1] : "*").split('|');
var form = findForm(el);
- var values = getFieldValues(form, fieldName);
+ var values = getFieldValues(form, fieldName, evt);
// determine whether condition is met
var conditionMet = false;
}
}
+ console.log("Expected values: ", expectedValues);
+ console.log("Actual values: ", values);
+ console.log("Condition met: ", conditionMet);
+
// toggle element display
if (show) {
el.style.display = conditionMet ? '' : 'none';
var form = evt.target.form;
var elements = form.querySelectorAll('[data-show-if], [data-hide-if]');
- [].forEach.call(elements, toggleElement);
+ [].forEach.call(elements, function (el) {
+ return toggleElement(el, evt);
+ });
}
exports.default = {
'init': function init() {
+ document.addEventListener('click', handleInputEvent, true);
document.addEventListener('keyup', handleInputEvent, true);
document.addEventListener('change', handleInputEvent, true);
document.addEventListener('hf-refresh', evaluate, true);
function handleSubmitEvents(e) {
var formEl = e.target;
-
- // only act on html-forms
if (formEl.className.indexOf('hf-form') < 0) {
return;
}
+ // always prevent default (because regular submit doesn't work for HTML Forms)
e.preventDefault();
submitForm(formEl);
}
var formData = new FormData(formEl);
[].forEach.call(formEl.querySelectorAll('[data-was-required=true]'), function (el) {
- formData.append('was_required[]', el.getAttribute('name'));
+ formData.append('_was_required[]', el.getAttribute('name'));
});
var request = new XMLHttpRequest();
};
}
-document.addEventListener('submit', handleSubmitEvents, true);
+document.addEventListener('submit', handleSubmitEvents, false); // useCapture=false to ensure we bubble upwards (and thus can cancel propagation)
_conditionality2.default.init();
_formPrefiller2.default.init();
window.html_forms = {
- 'on': events.on.bind(events)
+ 'on': events.on.bind(events),
+ 'submit': submitForm
};
},{"./conditionality.js":1,"./form-loading-indicator.js":2,"./form-prefiller.js":3,"./polyfills/custom-event.js":4,"es5-shim":6,"wolfy87-eventemitter":8}],6:[function(require,module,exports){
* @param basename string Optional basename which is added to `name` attributes
*/
var populate = function( form, data, basename) {
+
for(var key in data) {
+
+ if( ! data.hasOwnProperty( key ) ) {
+ continue;
+ }
+
var name = key;
var value = data[key];
},{}],8:[function(require,module,exports){
/*!
- * EventEmitter v5.2.4 - git.io/ee
+ * EventEmitter v5.2.5 - git.io/ee
* Unlicense - http://unlicense.org/
* Oliver Caldwell - http://oli.me.uk/
* @preserve
else {
exports.EventEmitter = EventEmitter;
}
-}(this || {}));
+}(typeof window !== 'undefined' ? window : this || {}));
},{}]},{},[5]);
; })();
\ No newline at end of file
-!function(){var t=void 0,e=void 0;!function(){function e(r,n,i){function o(s,u){if(!n[s]){if(!r[s]){var l="function"==typeof t&&t;if(!u&&l)return l(s,!0);if(a)return a(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var f=n[s]={exports:{}};r[s][0].call(f.exports,function(t){var e=r[s][1][t];return o(e||t)},f,f.exports,e,r,n,i)}return n[s].exports}for(var a="function"==typeof t&&t,s=0;s<i.length;s++)o(i[s]);return o}return e}()({1:[function(t,e,r){"use strict";function n(t){for(var e=!!t.getAttribute("data-show-if"),r=e?t.getAttribute("data-show-if").split(":"):t.getAttribute("data-hide-if").split(":"),n=r[0],i=(r.length>1?r[1]:"*").split("|"),o=function(t,e){for(var r=[],n=t.querySelectorAll('input[name="'+e+'"], select[name="'+e+'"], textarea[name="'+e+'"]'),i=0;i<n.length;i++){var o=n[i],a=o.getAttribute("type");("radio"!==a&&"checkbox"!==a||o.checked)&&r.push(o.value)}return r}(function(t){for(var e=t;e.parentElement;)if("FORM"===(e=e.parentElement).tagName)return e;return null}(t),n),a=!1,s=0;s<o.length;s++){var u=o[s];if(a=i.indexOf(u)>-1||i.indexOf("*")>-1&&u.length>0)break}t.style.display=e?a?"":"none":a?"none":"";var l=t.querySelectorAll("input, select, textarea");[].forEach.call(l,function(t){(a||e)&&t.getAttribute("data-was-required")&&(t.required=!0,t.removeAttribute("data-was-required")),a&&e||!t.required||(t.setAttribute("data-was-required","true"),t.required=!1)})}function i(){var t=document.querySelectorAll(".hf-form [data-show-if], .hf-form [data-hide-if]");[].forEach.call(t,n)}function o(t){if(t.target&&t.target.form&&!(t.target.form.className.indexOf("hf-form")<0)){var e=t.target.form.querySelectorAll("[data-show-if], [data-hide-if]");[].forEach.call(e,n)}}Object.defineProperty(r,"__esModule",{value:!0}),r.default={init:function(){document.addEventListener("keyup",o,!0),document.addEventListener("change",o,!0),document.addEventListener("hf-refresh",i,!0),window.addEventListener("load",i),i()}}},{}],2:[function(t,e,r){"use strict";function n(t){return t.innerHTML?t.innerHTML:t.value}function i(t,e){t.innerHTML?t.innerHTML=e:t.value=e}function o(t){this.form=t,this.button=t.querySelector('input[type="submit"], button[type="submit"]'),this.loadingInterval=0,this.character="·",this.button&&(this.originalButton=this.button.cloneNode(!0))}o.prototype.setCharacter=function(t){this.character=t},o.prototype.start=function(){if(this.button){var t=this.button.getAttribute("data-loading-text");if(t)return void i(this.button,t);var e=window.getComputedStyle(this.button);this.button.style.width=e.width,i(this.button,this.character),this.loadingInterval=window.setInterval(this.tick.bind(this),500)}else this.form.style.opacity="0.5"},o.prototype.tick=function(){var t=n(this.button),e=this.character;i(this.button,t.length>=5?e:t+" "+e)},o.prototype.stop=function(){if(this.button){this.button.style.width=this.originalButton.style.width;var t=n(this.originalButton);i(this.button,t),window.clearInterval(this.loadingInterval)}else this.form.style.opacity=""},e.exports=o},{}],3:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){i=!0,o=t}finally{try{!n&&s.return&&s.return()}finally{if(i)throw o}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=t("populate.js");r.default={init:function(){var t=[].filter.call(document.forms,function(t){return t.className.indexOf("hf-form")>-1});if(t){var e=function(t){var e=new URLSearchParams(t),r={},i=!0,o=!1,a=void 0;try{for(var s,u=e.entries()[Symbol.iterator]();!(i=(s=u.next()).done);i=!0){var l=n(s.value,2),c=l[0],f=l[1];if("[]"===c.substr(c.length-2)){var h=c.substr(0,c.length-2);r[h]=r[h]||[],r[h].push(f)}else r[c]=f}}catch(t){o=!0,a=t}finally{try{!i&&u.return&&u.return()}finally{if(o)throw a}}return r}(window.location.search);t.forEach(function(t){i(t,e)})}}}},{"populate.js":7}],4:[function(t,e,r){"use strict";!function(){function t(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var r=document.createEvent("CustomEvent");return r.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),r}if("function"==typeof window.CustomEvent)return!1;t.prototype=window.Event.prototype,window.CustomEvent=t}()},{}],5:[function(t,e,r){"use strict";function n(t){return t&&t.__esModule?t:{default:t}}function i(t,e){e.dispatchEvent(new CustomEvent("hf-"+t)),l.emit(t,[e])}var o=n(t("./form-prefiller.js")),a=n(t("./conditionality.js"));t("./polyfills/custom-event.js");t("es5-shim");var s=t("./form-loading-indicator.js"),u=window.hf_js_vars||{ajax_url:window.location.href},l=new(t("wolfy87-eventemitter"));document.addEventListener("submit",function(t){var e=t.target;e.className.indexOf("hf-form")<0||(t.preventDefault(),function(t){(function(t){var e=t.querySelectorAll(".hf-message");[].forEach.call(e,function(t){t.parentNode.removeChild(t)})})(t),i("submit",t);var e=new FormData(t);[].forEach.call(t.querySelectorAll("[data-was-required=true]"),function(t){e.append("was_required[]",t.getAttribute("name"))});var r=new XMLHttpRequest;r.onreadystatechange=function(t){var e=new s(t);return e.start(),function(){if(4===this.readyState){var r=void 0;if(e.stop(),this.status>=200&&this.status<400){try{r=JSON.parse(this.responseText)}catch(t){return void console.log('HTML Forms: failed to parse AJAX response.\n\nError: "'+t+'"')}i("submitted",t),r.error?i("error",t):i("success",t),r.message&&function(t,e){var r=document.createElement("p");r.className="hf-message hf-message-"+e.type,r.innerHTML=e.text,t.insertBefore(r,t.lastElementChild.nextElementSibling)}(t,r.message),r.hide_form&&(t.querySelector(".hf-fields-wrap").style.display="none"),r.redirect_url&&(window.location=r.redirect_url),r.error||t.reset()}else console.log(this.responseText)}}}(t),r.open("POST",u.ajax_url,!0),r.setRequestHeader("X-Requested-With","XMLHttpRequest"),r.send(e),r=null}(e))},!0),a.default.init(),o.default.init(),window.html_forms={on:l.on.bind(l)}},{"./conditionality.js":1,"./form-loading-indicator.js":2,"./form-prefiller.js":3,"./polyfills/custom-event.js":4,"es5-shim":6,"wolfy87-eventemitter":8}],6:[function(t,r,n){!function(t,i){"use strict";"function"==typeof e&&e.amd?e(i):"object"==typeof n?r.exports=i():t.returnExports=i()}(this,function(){var t,e=Array,r=e.prototype,n=Object,i=n.prototype,o=Function,a=o.prototype,s=String,u=s.prototype,l=Number,c=l.prototype,f=r.slice,h=r.splice,p=r.push,d=r.unshift,v=r.concat,y=r.join,g=a.call,b=a.apply,w=Math.max,m=Math.min,E=i.toString,x="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,S=Function.prototype.toString,T=/^\s*class /,D=function(t){try{var e=S.call(t).replace(/\/\/.*\n/g,"").replace(/\/\*[.\s\S]*\*\//g,"").replace(/\n/gm," ").replace(/ {2}/g," ");return T.test(e)}catch(t){return!1}},O=function(t){if(!t)return!1;if("function"!=typeof t&&"object"!=typeof t)return!1;if(x)return function(t){try{return!D(t)&&(S.call(t),!0)}catch(t){return!1}}(t);if(D(t))return!1;var e=E.call(t);return"[object Function]"===e||"[object GeneratorFunction]"===e},j=RegExp.prototype.exec;t=function(t){return"object"==typeof t&&(x?function(t){try{return j.call(t),!0}catch(t){return!1}}(t):"[object RegExp]"===E.call(t))};var M,A=String.prototype.valueOf;M=function(t){return"string"==typeof t||"object"==typeof t&&(x?function(t){try{return A.call(t),!0}catch(t){return!1}}(t):"[object String]"===E.call(t))};var L=n.defineProperty&&function(){try{var t={};n.defineProperty(t,"x",{enumerable:!1,value:t});for(var e in t)return!1;return t.x===t}catch(t){return!1}}(),I=function(t){var e;return e=L?function(t,e,r,i){!i&&e in t||n.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:!0,value:r})}:function(t,e,r,n){!n&&e in t||(t[e]=r)},function(r,n,i){for(var o in n)t.call(n,o)&&e(r,o,n[o],i)}}(i.hasOwnProperty),N=function(t){var e=typeof t;return null===t||"object"!==e&&"function"!==e},R=l.isNaN||function(t){return t!=t},k=function(t){var e=+t;return R(e)?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e},F=function(t){var e,r,n;if(N(t))return t;if(r=t.valueOf,O(r)&&(e=r.call(t),N(e)))return e;if(n=t.toString,O(n)&&(e=n.call(t),N(e)))return e;throw new TypeError},C=function(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return n(t)},_=function(t){return t>>>0},P=function(){};I(a,{bind:function(t){var e=this;if(!O(e))throw new TypeError("Function.prototype.bind called on incompatible "+e);for(var r,i=f.call(arguments,1),a=w(0,e.length-i.length),s=[],u=0;u<a;u++)p.call(s,"$"+u);return r=o("binder","return function ("+y.call(s,",")+"){ return binder.apply(this, arguments); }")(function(){if(this instanceof r){var o=b.call(e,this,v.call(i,f.call(arguments)));return n(o)===o?o:this}return b.call(e,t,v.call(i,f.call(arguments)))}),e.prototype&&(P.prototype=e.prototype,r.prototype=new P,P.prototype=null),r}});var $=g.bind(i.hasOwnProperty),q=g.bind(i.toString),U=g.bind(f),J=b.bind(f);if("object"==typeof document&&document&&document.documentElement)try{U(document.documentElement.childNodes)}catch(t){var H=U,Z=J;U=function(t){for(var e=[],r=t.length;r-- >0;)e[r]=t[r];return Z(e,H(arguments,1))},J=function(t,e){return Z(U(t),e)}}var z=g.bind(u.slice),B=g.bind(u.split),G=g.bind(u.indexOf),V=g.bind(p),Y=g.bind(i.propertyIsEnumerable),X=g.bind(r.sort),W=e.isArray||function(t){return"[object Array]"===q(t)},K=1!==[].unshift(0);I(r,{unshift:function(){return d.apply(this,arguments),this.length}},K),I(e,{isArray:W});var Q=n("a"),tt="a"!==Q[0]||!(0 in Q),et=function(t){var e=!0,r=!0,n=!1;if(t)try{t.call("foo",function(t,r,n){"object"!=typeof n&&(e=!1)}),t.call([1],function(){"use strict";r="string"==typeof this},"x")}catch(t){n=!0}return!!t&&!n&&e&&r};I(r,{forEach:function(t){var e,r=C(this),n=tt&&M(this)?B(this,""):r,i=-1,o=_(n.length);if(arguments.length>1&&(e=arguments[1]),!O(t))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++i<o;)i in n&&(void 0===e?t(n[i],i,r):t.call(e,n[i],i,r))}},!et(r.forEach)),I(r,{map:function(t){var r,n=C(this),i=tt&&M(this)?B(this,""):n,o=_(i.length),a=e(o);if(arguments.length>1&&(r=arguments[1]),!O(t))throw new TypeError("Array.prototype.map callback must be a function");for(var s=0;s<o;s++)s in i&&(a[s]=void 0===r?t(i[s],s,n):t.call(r,i[s],s,n));return a}},!et(r.map)),I(r,{filter:function(t){var e,r,n=C(this),i=tt&&M(this)?B(this,""):n,o=_(i.length),a=[];if(arguments.length>1&&(r=arguments[1]),!O(t))throw new TypeError("Array.prototype.filter callback must be a function");for(var s=0;s<o;s++)s in i&&(e=i[s],(void 0===r?t(e,s,n):t.call(r,e,s,n))&&V(a,e));return a}},!et(r.filter)),I(r,{every:function(t){var e,r=C(this),n=tt&&M(this)?B(this,""):r,i=_(n.length);if(arguments.length>1&&(e=arguments[1]),!O(t))throw new TypeError("Array.prototype.every callback must be a function");for(var o=0;o<i;o++)if(o in n&&!(void 0===e?t(n[o],o,r):t.call(e,n[o],o,r)))return!1;return!0}},!et(r.every)),I(r,{some:function(t){var e,r=C(this),n=tt&&M(this)?B(this,""):r,i=_(n.length);if(arguments.length>1&&(e=arguments[1]),!O(t))throw new TypeError("Array.prototype.some callback must be a function");for(var o=0;o<i;o++)if(o in n&&(void 0===e?t(n[o],o,r):t.call(e,n[o],o,r)))return!0;return!1}},!et(r.some));var rt=!1;r.reduce&&(rt="object"==typeof r.reduce.call("es5",function(t,e,r,n){return n})),I(r,{reduce:function(t){var e=C(this),r=tt&&M(this)?B(this,""):e,n=_(r.length);if(!O(t))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===n&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var i,o=0;if(arguments.length>=2)i=arguments[1];else for(;;){if(o in r){i=r[o++];break}if(++o>=n)throw new TypeError("reduce of empty array with no initial value")}for(;o<n;o++)o in r&&(i=t(i,r[o],o,e));return i}},!rt);var nt=!1;r.reduceRight&&(nt="object"==typeof r.reduceRight.call("es5",function(t,e,r,n){return n})),I(r,{reduceRight:function(t){var e=C(this),r=tt&&M(this)?B(this,""):e,n=_(r.length);if(!O(t))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===n&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var i,o=n-1;if(arguments.length>=2)i=arguments[1];else for(;;){if(o in r){i=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}if(o<0)return i;do{o in r&&(i=t(i,r[o],o,e))}while(o--);return i}},!nt);var it=r.indexOf&&-1!==[0,1].indexOf(1,2);I(r,{indexOf:function(t){var e=tt&&M(this)?B(this,""):C(this),r=_(e.length);if(0===r)return-1;var n=0;for(arguments.length>1&&(n=k(arguments[1])),n=n>=0?n:w(0,r+n);n<r;n++)if(n in e&&e[n]===t)return n;return-1}},it);var ot=r.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);I(r,{lastIndexOf:function(t){var e=tt&&M(this)?B(this,""):C(this),r=_(e.length);if(0===r)return-1;var n=r-1;for(arguments.length>1&&(n=m(n,k(arguments[1]))),n=n>=0?n:r-Math.abs(n);n>=0;n--)if(n in e&&t===e[n])return n;return-1}},ot);var at=function(){var t=[1,2],e=t.splice();return 2===t.length&&W(e)&&0===e.length}();I(r,{splice:function(t,e){return 0===arguments.length?[]:h.apply(this,arguments)}},!at);var st=function(){var t={};return r.splice.call(t,0,0,1),1===t.length}();I(r,{splice:function(t,e){if(0===arguments.length)return[];var r=arguments;return this.length=w(k(this.length),0),arguments.length>0&&"number"!=typeof e&&((r=U(arguments)).length<2?V(r,this.length-t):r[1]=k(e)),h.apply(this,r)}},!st);var ut=function(){var t=new e(1e5);return t[8]="x",t.splice(1,1),7===t.indexOf("x")}(),lt=function(){var t=[];return t[256]="a",t.splice(257,0,"b"),"a"===t[256]}();I(r,{splice:function(t,e){for(var r,n=C(this),i=[],o=_(n.length),a=k(t),u=a<0?w(o+a,0):m(a,o),l=m(w(k(e),0),o-u),c=0;c<l;)r=s(u+c),$(n,r)&&(i[c]=n[r]),c+=1;var f,h=U(arguments,2),p=h.length;if(p<l){c=u;for(var d=o-l;c<d;)r=s(c+l),f=s(c+p),$(n,r)?n[f]=n[r]:delete n[f],c+=1;c=o;for(var v=o-l+p;c>v;)delete n[c-1],c-=1}else if(p>l)for(c=o-l;c>u;)r=s(c+l-1),f=s(c+p-1),$(n,r)?n[f]=n[r]:delete n[f],c-=1;c=u;for(var y=0;y<h.length;++y)n[c]=h[y],c+=1;return n.length=o-l+p,i}},!ut||!lt);var ct,ft=r.join;try{ct="1,2,3"!==Array.prototype.join.call("123",",")}catch(t){ct=!0}ct&&I(r,{join:function(t){var e=void 0===t?",":t;return ft.call(M(this)?B(this,""):this,e)}},ct);var ht="1,2"!==[1,2].join(void 0);ht&&I(r,{join:function(t){var e=void 0===t?",":t;return ft.call(this,e)}},ht);var pt=function(t){for(var e=C(this),r=_(e.length),n=0;n<arguments.length;)e[r+n]=arguments[n],n+=1;return e.length=r+n,r+n},dt=function(){var t={};return 1!==Array.prototype.push.call(t,void 0)||1!==t.length||void 0!==t[0]||!$(t,0)}();I(r,{push:function(t){return W(this)?p.apply(this,arguments):pt.apply(this,arguments)}},dt);var vt=function(){var t=[];return 1!==t.push(void 0)||1!==t.length||void 0!==t[0]||!$(t,0)}();I(r,{push:pt},vt),I(r,{slice:function(t,e){var r=M(this)?B(this,""):this;return J(r,arguments)}},tt);var yt=function(){try{[1,2].sort(null)}catch(t){try{[1,2].sort({})}catch(t){return!1}}return!0}(),gt=function(){try{return[1,2].sort(/a/),!1}catch(t){}return!0}(),bt=function(){try{return[1,2].sort(void 0),!0}catch(t){}return!1}();I(r,{sort:function(t){if(void 0===t)return X(this);if(!O(t))throw new TypeError("Array.prototype.sort callback must be a function");return X(this,t)}},yt||!bt||!gt);var wt=!Y({toString:null},"toString"),mt=Y(function(){},"prototype"),Et=!$("x","0"),xt=function(t){var e=t.constructor;return e&&e.prototype===t},St={$window:!0,$console:!0,$parent:!0,$self:!0,$frame:!0,$frames:!0,$frameElement:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$external:!0,$width:!0,$height:!0,$top:!0,$localStorage:!0},Tt=function(){if("undefined"==typeof window)return!1;for(var t in window)try{!St["$"+t]&&$(window,t)&&null!==window[t]&&"object"==typeof window[t]&&xt(window[t])}catch(t){return!0}return!1}(),Dt=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Ot=Dt.length,jt=function(t){return"[object Arguments]"===q(t)},Mt=jt(arguments)?jt:function(t){return null!==t&&"object"==typeof t&&"number"==typeof t.length&&t.length>=0&&!W(t)&&O(t.callee)};I(n,{keys:function(t){var e=O(t),r=Mt(t),n=null!==t&&"object"==typeof t,i=n&&M(t);if(!n&&!e&&!r)throw new TypeError("Object.keys called on a non-object");var o=[],a=mt&&e;if(i&&Et||r)for(var u=0;u<t.length;++u)V(o,s(u));if(!r)for(var l in t)a&&"prototype"===l||!$(t,l)||V(o,s(l));if(wt)for(var c=function(t){if("undefined"==typeof window||!Tt)return xt(t);try{return xt(t)}catch(t){return!1}}(t),f=0;f<Ot;f++){var h=Dt[f];c&&"constructor"===h||!$(t,h)||V(o,h)}return o}});var At=n.keys&&function(){return 2===n.keys(arguments).length}(1,2),Lt=n.keys&&function(){var t=n.keys(arguments);return 1!==arguments.length||1!==t.length||1!==t[0]}(1),It=n.keys;I(n,{keys:function(t){return Mt(t)?It(U(t)):It(t)}},!At||Lt);var Nt,Rt,kt=0!==new Date(-0xc782b5b342b24).getUTCMonth(),Ft=new Date(-0x55d318d56a724),Ct=new Date(14496624e5),_t="Mon, 01 Jan -45875 11:59:59 GMT"!==Ft.toUTCString();Ft.getTimezoneOffset()<-720?(Nt="Tue Jan 02 -45875"!==Ft.toDateString(),Rt=!/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(Ct))):(Nt="Mon Jan 01 -45875"!==Ft.toDateString(),Rt=!/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(Ct)));var Pt=g.bind(Date.prototype.getFullYear),$t=g.bind(Date.prototype.getMonth),qt=g.bind(Date.prototype.getDate),Ut=g.bind(Date.prototype.getUTCFullYear),Jt=g.bind(Date.prototype.getUTCMonth),Ht=g.bind(Date.prototype.getUTCDate),Zt=g.bind(Date.prototype.getUTCDay),zt=g.bind(Date.prototype.getUTCHours),Bt=g.bind(Date.prototype.getUTCMinutes),Gt=g.bind(Date.prototype.getUTCSeconds),Vt=g.bind(Date.prototype.getUTCMilliseconds),Yt=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],Xt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Wt=function(t,e){return qt(new Date(e,t,0))};I(Date.prototype,{getFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Pt(this);return t<0&&$t(this)>11?t+1:t},getMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Pt(this),e=$t(this);return t<0&&e>11?0:e},getDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Pt(this),e=$t(this),r=qt(this);if(t<0&&e>11){if(12===e)return r;return Wt(0,t+1)-r+1}return r},getUTCFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Ut(this);return t<0&&Jt(this)>11?t+1:t},getUTCMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Ut(this),e=Jt(this);return t<0&&e>11?0:e},getUTCDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Ut(this),e=Jt(this),r=Ht(this);if(t<0&&e>11){if(12===e)return r;return Wt(0,t+1)-r+1}return r}},kt),I(Date.prototype,{toUTCString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Zt(this),e=Ht(this),r=Jt(this),n=Ut(this),i=zt(this),o=Bt(this),a=Gt(this);return Yt[t]+", "+(e<10?"0"+e:e)+" "+Xt[r]+" "+n+" "+(i<10?"0"+i:i)+":"+(o<10?"0"+o:o)+":"+(a<10?"0"+a:a)+" GMT"}},kt||_t),I(Date.prototype,{toDateString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=this.getDay(),e=this.getDate(),r=this.getMonth(),n=this.getFullYear();return Yt[t]+" "+Xt[r]+" "+(e<10?"0"+e:e)+" "+n}},kt||Nt),(kt||Rt)&&(Date.prototype.toString=function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=this.getDay(),e=this.getDate(),r=this.getMonth(),n=this.getFullYear(),i=this.getHours(),o=this.getMinutes(),a=this.getSeconds(),s=this.getTimezoneOffset(),u=Math.floor(Math.abs(s)/60),l=Math.floor(Math.abs(s)%60);return Yt[t]+" "+Xt[r]+" "+(e<10?"0"+e:e)+" "+n+" "+(i<10?"0"+i:i)+":"+(o<10?"0"+o:o)+":"+(a<10?"0"+a:a)+" GMT"+(s>0?"-":"+")+(u<10?"0"+u:u)+(l<10?"0"+l:l)},L&&n.defineProperty(Date.prototype,"toString",{configurable:!0,enumerable:!1,writable:!0}));var Kt=Date.prototype.toISOString&&-1===new Date(-621987552e5).toISOString().indexOf("-000001"),Qt=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString(),te=g.bind(Date.prototype.getTime);I(Date.prototype,{toISOString:function(){if(!isFinite(this)||!isFinite(te(this)))throw new RangeError("Date.prototype.toISOString called on non-finite value.");var t=Ut(this),e=Jt(this);t+=Math.floor(e/12);var r=[(e=(e%12+12)%12)+1,Ht(this),zt(this),Bt(this),Gt(this)];t=(t<0?"-":t>9999?"+":"")+z("00000"+Math.abs(t),0<=t&&t<=9999?-4:-6);for(var n=0;n<r.length;++n)r[n]=z("00"+r[n],-2);return t+"-"+U(r,0,2).join("-")+"T"+U(r,2).join(":")+"."+z("000"+Vt(this),-3)+"Z"}},Kt||Qt);(function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(-621987552e5).toJSON().indexOf("-000001")&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(t){return!1}})()||(Date.prototype.toJSON=function(t){var e=n(this),r=F(e);if("number"==typeof r&&!isFinite(r))return null;var i=e.toISOString;if(!O(i))throw new TypeError("toISOString property is not callable");return i.call(e)});var ee=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),re=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z"));if(isNaN(Date.parse("2000-01-01T00:00:00.000Z"))||re||!ee){var ne=Math.pow(2,31)-1,ie=R(new Date(1970,0,1,0,0,0,ne+1).getTime());Date=function(t){var e=function(r,n,i,o,a,u,l){var c,f=arguments.length;if(this instanceof t){var h=u,p=l;if(ie&&f>=7&&l>ne){var d=Math.floor(l/ne)*ne,v=Math.floor(d/1e3);h+=v,p-=1e3*v}c=1===f&&s(r)===r?new t(e.parse(r)):f>=7?new t(r,n,i,o,a,h,p):f>=6?new t(r,n,i,o,a,h):f>=5?new t(r,n,i,o,a):f>=4?new t(r,n,i,o):f>=3?new t(r,n,i):f>=2?new t(r,n):f>=1?new t(r instanceof t?+r:r):new t}else c=t.apply(this,arguments);return N(c)||I(c,{constructor:e},!0),c},r=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),n=[0,31,59,90,120,151,181,212,243,273,304,334,365],i=function(t,e){var r=e>1?1:0;return n[e]+Math.floor((t-1969+r)/4)-Math.floor((t-1901+r)/100)+Math.floor((t-1601+r)/400)+365*(t-1970)};for(var o in t)$(t,o)&&(e[o]=t[o]);I(e,{now:t.now,UTC:t.UTC},!0),e.prototype=t.prototype,I(e.prototype,{constructor:e},!0);return I(e,{parse:function(e){var n=r.exec(e);if(n){var o,a=l(n[1]),s=l(n[2]||1)-1,u=l(n[3]||1)-1,c=l(n[4]||0),f=l(n[5]||0),h=l(n[6]||0),p=Math.floor(1e3*l(n[7]||0)),d=Boolean(n[4]&&!n[8]),v="-"===n[9]?1:-1,y=l(n[10]||0),g=l(n[11]||0);return c<(f>0||h>0||p>0?24:25)&&f<60&&h<60&&p<1e3&&s>-1&&s<12&&y<24&&g<60&&u>-1&&u<i(a,s+1)-i(a,s)&&(o=60*(24*(i(a,s)+u)+c+y*v),o=1e3*(60*(o+f+g*v)+h)+p,d&&(o=function(e){var r=0,n=e;if(ie&&n>ne){var i=Math.floor(n/ne)*ne,o=Math.floor(i/1e3);r+=o,n-=1e3*o}return l(new t(1970,0,1,0,0,r,n))}(o)),-864e13<=o&&o<=864e13)?o:NaN}return t.parse.apply(this,arguments)}}),e}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var oe=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0)),ae={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(t,e){for(var r=-1,n=e;++r<ae.size;)n+=t*ae.data[r],ae.data[r]=n%ae.base,n=Math.floor(n/ae.base)},divide:function(t){for(var e=ae.size,r=0;--e>=0;)r+=ae.data[e],ae.data[e]=Math.floor(r/t),r=r%t*ae.base},numToString:function(){for(var t=ae.size,e="";--t>=0;)if(""!==e||0===t||0!==ae.data[t]){var r=s(ae.data[t]);""===e?e=r:e+=z("0000000",0,7-r.length)+r}return e},pow:function t(e,r,n){return 0===r?n:r%2==1?t(e,r-1,n*e):t(e*e,r/2,n)},log:function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}};I(c,{toFixed:function(t){var e,r,n,i,o,a,u,c;if(e=l(t),(e=R(e)?0:Math.floor(e))<0||e>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(r=l(this),R(r))return"NaN";if(r<=-1e21||r>=1e21)return s(r);if(n="",r<0&&(n="-",r=-r),i="0",r>1e-21)if(o=ae.log(r*ae.pow(2,69,1))-69,a=o<0?r*ae.pow(2,-o,1):r/ae.pow(2,o,1),a*=4503599627370496,(o=52-o)>0){for(ae.multiply(0,a),u=e;u>=7;)ae.multiply(1e7,0),u-=7;for(ae.multiply(ae.pow(10,u,1),0),u=o-1;u>=23;)ae.divide(1<<23),u-=23;ae.divide(1<<u),ae.multiply(1,1),ae.divide(2),i=ae.numToString()}else ae.multiply(0,a),ae.multiply(1<<-o,0),i=ae.numToString()+z("0.00000000000000000000",2,2+e);return i=e>0?(c=i.length)<=e?n+z("0.0000000000000000000",0,e-c+2)+i:n+z(i,0,c-e)+"."+z(i,c-e):n+i}},oe);var se=function(){try{return"1"===1..toPrecision(void 0)}catch(t){return!0}}(),ue=c.toPrecision;I(c,{toPrecision:function(t){return void 0===t?ue.call(this):ue.call(this,t)}},se),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?function(){var e=void 0===/()??/.exec("")[1],r=Math.pow(2,32)-1;u.split=function(n,i){var o=String(this);if(void 0===n&&0===i)return[];if(!t(n))return B(this,n,i);var a,s,u,l,c=[],f=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),h=0,d=new RegExp(n.source,f+"g");e||(a=new RegExp("^"+d.source+"$(?!\\s)",f));var v=void 0===i?r:_(i);for(s=d.exec(o);s&&!((u=s.index+s[0].length)>h&&(V(c,z(o,h,s.index)),!e&&s.length>1&&s[0].replace(a,function(){for(var t=1;t<arguments.length-2;t++)void 0===arguments[t]&&(s[t]=void 0)}),s.length>1&&s.index<o.length&&p.apply(c,U(s,1)),l=s[0].length,h=u,c.length>=v));)d.lastIndex===s.index&&d.lastIndex++,s=d.exec(o);return h===o.length?!l&&d.test("")||V(c,""):V(c,z(o,h)),c.length>v?U(c,0,v):c}}():"0".split(void 0,0).length&&(u.split=function(t,e){return void 0===t&&0===e?[]:B(this,t,e)});var le=u.replace;(function(){var t=[];return"x".replace(/x(.)?/g,function(e,r){V(t,r)}),1===t.length&&void 0===t[0]})()||(u.replace=function(e,r){var n=O(r),i=t(e)&&/\)[*?]/.test(e.source);if(n&&i){return le.call(this,e,function(t){var n=arguments.length,i=e.lastIndex;e.lastIndex=0;var o=e.exec(t)||[];return e.lastIndex=i,V(o,arguments[n-2],arguments[n-1]),r.apply(this,o)})}return le.call(this,e,r)});var ce=u.substr,fe="".substr&&"b"!=="0b".substr(-1);I(u,{substr:function(t,e){var r=t;return t<0&&(r=w(this.length+t,0)),ce.call(this,r,e)}},fe);var he="\t\n\v\f\r \u2028\u2029\ufeff",pe="["+he+"]",de=new RegExp("^"+pe+pe+"*"),ve=new RegExp(pe+pe+"*$"),ye=u.trim&&(he.trim()||!"".trim());I(u,{trim:function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");return s(this).replace(de,"").replace(ve,"")}},ye);var ge=g.bind(String.prototype.trim),be=u.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);I(u,{lastIndexOf:function(t){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");for(var e=s(this),r=s(t),n=arguments.length>1?l(arguments[1]):NaN,i=R(n)?1/0:k(n),o=m(w(i,0),e.length),a=r.length,u=o+a;u>0;){u=w(0,u-a);var c=G(z(e,u,o+a),r);if(-1!==c)return u+c}return-1}},be);var we=u.lastIndexOf;if(I(u,{lastIndexOf:function(t){return we.apply(this,arguments)}},1!==u.lastIndexOf.length),8===parseInt(he+"08")&&22===parseInt(he+"0x16")||(parseInt=function(t){var e=/^[-+]?0[xX]/;return function(r,n){var i=ge(String(r)),o=l(n)||(e.test(i)?16:10);return t(i,o)}}(parseInt)),1/parseFloat("-0")!=-1/0&&(parseFloat=function(t){return function(e){var r=ge(String(e)),n=t(r);return 0===n&&"-"===z(r,0,1)?-0:n}}(parseFloat)),"RangeError: test"!==String(new RangeError("test"))){Error.prototype.toString=function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");var t=this.name;void 0===t?t="Error":"string"!=typeof t&&(t=s(t));var e=this.message;return void 0===e?e="":"string"!=typeof e&&(e=s(e)),t?e?t+": "+e:t:e}}if(L){var me=function(t,e){if(Y(t,e)){var r=Object.getOwnPropertyDescriptor(t,e);r.configurable&&(r.enumerable=!1,Object.defineProperty(t,e,r))}};me(Error.prototype,"message"),""!==Error.prototype.message&&(Error.prototype.message=""),me(Error.prototype,"name")}if("/a/gim"!==String(/a/gim)){RegExp.prototype.toString=function(){var t="/"+this.source+"/";return this.global&&(t+="g"),this.ignoreCase&&(t+="i"),this.multiline&&(t+="m"),t}}})},{}],7:[function(t,r,n){!function(t){var n=function(t,e,r){for(var i in e){var o=i,a=e[i];if(void 0===a&&(a=""),null===a&&(a=""),void 0!==r&&(o=r+"["+i+"]"),a.constructor===Array)o+="[]";else if("object"==typeof a){n(t,a,o);continue}var s=t.elements.namedItem(o);if(s){switch(s.type||s[0].type){default:s.value=a;break;case"radio":case"checkbox":for(var u=0;u<s.length;u++)s[u].checked=a.indexOf(s[u].value)>-1;break;case"select-multiple":for(var l=a.constructor==Array?a:[a],c=0;c<s.options.length;c++)s.options[c].selected|=l.indexOf(s.options[c].value)>-1;break;case"select":case"select-one":s.value=a.toString()||a;break;case"date":s.value=new Date(a).toISOString().split("T")[0]}}}};"function"==typeof e&&"object"==typeof e.amd&&e.amd?e(function(){return n}):void 0!==r&&r.exports?r.exports=n:t.populate=n}(this)},{}],8:[function(t,r,n){!function(t){"use strict";function n(){}function i(t,e){for(var r=t.length;r--;)if(t[r].listener===e)return r;return-1}function o(t){return function(){return this[t].apply(this,arguments)}}function a(t){return"function"==typeof t||t instanceof RegExp||!(!t||"object"!=typeof t)&&a(t.listener)}var s=n.prototype,u=t.EventEmitter;s.getListeners=function(t){var e,r,n=this._getEvents();if(t instanceof RegExp){e={};for(r in n)n.hasOwnProperty(r)&&t.test(r)&&(e[r]=n[r])}else e=n[t]||(n[t]=[]);return e},s.flattenListeners=function(t){var e,r=[];for(e=0;e<t.length;e+=1)r.push(t[e].listener);return r},s.getListenersAsObject=function(t){var e,r=this.getListeners(t);return r instanceof Array&&((e={})[t]=r),e||r},s.addListener=function(t,e){if(!a(e))throw new TypeError("listener must be a function");var r,n=this.getListenersAsObject(t),o="object"==typeof e;for(r in n)n.hasOwnProperty(r)&&-1===i(n[r],e)&&n[r].push(o?e:{listener:e,once:!1});return this},s.on=o("addListener"),s.addOnceListener=function(t,e){return this.addListener(t,{listener:e,once:!0})},s.once=o("addOnceListener"),s.defineEvent=function(t){return this.getListeners(t),this},s.defineEvents=function(t){for(var e=0;e<t.length;e+=1)this.defineEvent(t[e]);return this},s.removeListener=function(t,e){var r,n,o=this.getListenersAsObject(t);for(n in o)o.hasOwnProperty(n)&&-1!==(r=i(o[n],e))&&o[n].splice(r,1);return this},s.off=o("removeListener"),s.addListeners=function(t,e){return this.manipulateListeners(!1,t,e)},s.removeListeners=function(t,e){return this.manipulateListeners(!0,t,e)},s.manipulateListeners=function(t,e,r){var n,i,o=t?this.removeListener:this.addListener,a=t?this.removeListeners:this.addListeners;if("object"!=typeof e||e instanceof RegExp)for(n=r.length;n--;)o.call(this,e,r[n]);else for(n in e)e.hasOwnProperty(n)&&(i=e[n])&&("function"==typeof i?o.call(this,n,i):a.call(this,n,i));return this},s.removeEvent=function(t){var e,r=typeof t,n=this._getEvents();if("string"===r)delete n[t];else if(t instanceof RegExp)for(e in n)n.hasOwnProperty(e)&&t.test(e)&&delete n[e];else delete this._events;return this},s.removeAllListeners=o("removeEvent"),s.emitEvent=function(t,e){var r,n,i,o,a=this.getListenersAsObject(t);for(o in a)if(a.hasOwnProperty(o))for(r=a[o].slice(0),i=0;i<r.length;i++)!0===(n=r[i]).once&&this.removeListener(t,n.listener),n.listener.apply(this,e||[])===this._getOnceReturnValue()&&this.removeListener(t,n.listener);return this},s.trigger=o("emitEvent"),s.emit=function(t){var e=Array.prototype.slice.call(arguments,1);return this.emitEvent(t,e)},s.setOnceReturnValue=function(t){return this._onceReturnValue=t,this},s._getOnceReturnValue=function(){return!this.hasOwnProperty("_onceReturnValue")||this._onceReturnValue},s._getEvents=function(){return this._events||(this._events={})},n.noConflict=function(){return t.EventEmitter=u,n},"function"==typeof e&&e.amd?e(function(){return n}):"object"==typeof r&&r.exports?r.exports=n:t.EventEmitter=n}(this||{})},{}]},{},[5])}();
+!function(){var s=void 0;!function o(a,s,u){function l(e,t){if(!s[e]){if(!a[e]){var r=!1;if(!t&&r)return r(e,!0);if(c)return c(e,!0);var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}var i=s[e]={exports:{}};a[e][0].call(i.exports,function(t){return l(a[e][1][t]||t)},i,i.exports,o,a,s,u)}return s[e].exports}for(var c=!1,t=0;t<u.length;t++)l(u[t]);return l}({1:[function(t,e,r){"use strict";function n(t,e){for(var r=!!t.getAttribute("data-show-if"),n=r?t.getAttribute("data-show-if").split(":"):t.getAttribute("data-hide-if").split(":"),i=n[0],o=(1<n.length?n[1]:"*").split("|"),a=function(t,e,r){for(var n=[],i=t.querySelectorAll('input[name="'+e+'"], select[name="'+e+'"], textarea[name="'+e+'"], button[name="'+e+'"]'),o=0;o<i.length;o++){var a=i[o],s=a.getAttribute("type").toLowerCase();if("radio"!==s&&"checkbox"!==s||a.checked){if("button"===s||"submit"===s||"BUTTON"===a.tagName){if((!r||r.target!==a)&&t.dataset[e]!==a.value)continue;t.dataset[e]=a.value}n.push(a.value)}}return 0==n.length&&n.push(""),n}(function(t){for(var e=t;e.parentElement;)if("FORM"===(e=e.parentElement).tagName)return e;return null}(t),i,e),s=!1,u=0;u<a.length;u++){var l=a[u];if(s=-1<o.indexOf(l)||-1<o.indexOf("*")&&0<l.length)break}console.log("Expected values: ",o),console.log("Actual values: ",a),console.log("Condition met: ",s),t.style.display=r?s?"":"none":s?"none":"";var c=t.querySelectorAll("input, select, textarea");[].forEach.call(c,function(t){(s||r)&&t.getAttribute("data-was-required")&&(t.required=!0,t.removeAttribute("data-was-required")),s&&r||!t.required||(t.setAttribute("data-was-required","true"),t.required=!1)})}function i(){var t=document.querySelectorAll(".hf-form [data-show-if], .hf-form [data-hide-if]");[].forEach.call(t,n)}function o(e){if(e.target&&e.target.form&&!(e.target.form.className.indexOf("hf-form")<0)){var t=e.target.form.querySelectorAll("[data-show-if], [data-hide-if]");[].forEach.call(t,function(t){return n(t,e)})}}Object.defineProperty(r,"__esModule",{value:!0}),r.default={init:function(){document.addEventListener("click",o,!0),document.addEventListener("keyup",o,!0),document.addEventListener("change",o,!0),document.addEventListener("hf-refresh",i,!0),window.addEventListener("load",i),i()}}},{}],2:[function(t,e,r){"use strict";function n(t){return t.innerHTML?t.innerHTML:t.value}function i(t,e){t.innerHTML?t.innerHTML=e:t.value=e}function o(t){this.form=t,this.button=t.querySelector('input[type="submit"], button[type="submit"]'),this.loadingInterval=0,this.character="·",this.button&&(this.originalButton=this.button.cloneNode(!0))}o.prototype.setCharacter=function(t){this.character=t},o.prototype.start=function(){if(this.button){var t=this.button.getAttribute("data-loading-text");if(t)return void i(this.button,t);var e=window.getComputedStyle(this.button);this.button.style.width=e.width,i(this.button,this.character),this.loadingInterval=window.setInterval(this.tick.bind(this),500)}else this.form.style.opacity="0.5"},o.prototype.tick=function(){var t=n(this.button),e=this.character;i(this.button,5<=t.length?e:t+" "+e)},o.prototype.stop=function(){if(this.button){this.button.style.width=this.originalButton.style.width;var t=n(this.originalButton);i(this.button,t),window.clearInterval(this.loadingInterval)}else this.form.style.opacity=""},e.exports=o},{}],3:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var h=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){i=!0,o=t}finally{try{!n&&s.return&&s.return()}finally{if(i)throw o}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")},n=t("populate.js");r.default={init:function(){var t=[].filter.call(document.forms,function(t){return-1<t.className.indexOf("hf-form")});if(t){var e=function(t){var e=new URLSearchParams(t),r={},n=!0,i=!1,o=void 0;try{for(var a,s=e.entries()[Symbol.iterator]();!(n=(a=s.next()).done);n=!0){var u=h(a.value,2),l=u[0],c=u[1];if("[]"===l.substr(l.length-2)){var f=l.substr(0,l.length-2);r[f]=r[f]||[],r[f].push(c)}else r[l]=c}}catch(t){i=!0,o=t}finally{try{!n&&s.return&&s.return()}finally{if(i)throw o}}return r}(window.location.search);t.forEach(function(t){n(t,e)})}}}},{"populate.js":7}],4:[function(t,e,r){"use strict";!function(){if("function"==typeof window.CustomEvent)return;function t(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var r=document.createEvent("CustomEvent");return r.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),r}t.prototype=window.Event.prototype,window.CustomEvent=t}()},{}],5:[function(t,e,r){"use strict";var n=o(t("./form-prefiller.js")),i=o(t("./conditionality.js"));function o(t){return t&&t.__esModule?t:{default:t}}t("./polyfills/custom-event.js");t("es5-shim");var a=t("./form-loading-indicator.js"),s=window.hf_js_vars||{ajax_url:window.location.href},u=new(t("wolfy87-eventemitter"));function l(t){var e;e=t.querySelectorAll(".hf-message"),[].forEach.call(e,function(t){t.parentNode.removeChild(t)}),c("submit",t);var r=new FormData(t);[].forEach.call(t.querySelectorAll("[data-was-required=true]"),function(t){r.append("_was_required[]",t.getAttribute("name"))});var i,o,n=new XMLHttpRequest;n.onreadystatechange=((o=new a(i=t)).start(),function(){if(4===this.readyState){var t=void 0;if(o.stop(),200<=this.status&&this.status<400){try{t=JSON.parse(this.responseText)}catch(t){return void console.log('HTML Forms: failed to parse AJAX response.\n\nError: "'+t+'"')}c("submitted",i),t.error?c("error",i):c("success",i),t.message&&(e=i,r=t.message,(n=document.createElement("p")).className="hf-message hf-message-"+r.type,n.innerHTML=r.text,e.insertBefore(n,e.lastElementChild.nextElementSibling)),t.hide_form&&(i.querySelector(".hf-fields-wrap").style.display="none"),t.redirect_url&&(window.location=t.redirect_url),t.error||i.reset()}else console.log(this.responseText)}var e,r,n}),n.open("POST",s.ajax_url,!0),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(r),n=null}function c(t,e){e.dispatchEvent(new CustomEvent("hf-"+t)),u.emit(t,[e])}document.addEventListener("submit",function(t){var e=t.target;e.className.indexOf("hf-form")<0||(t.preventDefault(),l(e))},!1),i.default.init(),n.default.init(),window.html_forms={on:u.on.bind(u),submit:l}},{"./conditionality.js":1,"./form-loading-indicator.js":2,"./form-prefiller.js":3,"./polyfills/custom-event.js":4,"es5-shim":6,"wolfy87-eventemitter":8}],6:[function(t,r,n){!function(t,e){"use strict";"function"==typeof s&&s.amd?s(e):"object"==typeof n?r.exports=e():t.returnExports=e()}(this,function(){var h,p,s=Array,t=s.prototype,u=Object,e=u.prototype,l=Function,r=l.prototype,g=String,n=g.prototype,b=Number,i=b.prototype,c=t.slice,o=t.splice,d=t.push,a=t.unshift,f=t.concat,v=t.join,y=r.call,w=r.apply,m=Math.max,E=Math.min,x=e.toString,T="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,S=Function.prototype.toString,D=/^\s*class /,O=function(t){try{var e=S.call(t).replace(/\/\/.*\n/g,"").replace(/\/\*[.\s\S]*\*\//g,"").replace(/\n/gm," ").replace(/ {2}/g," ");return D.test(e)}catch(t){return!1}},j=function(t){if(!t)return!1;if("function"!=typeof t&&"object"!=typeof t)return!1;if(T)return function(t){try{return!O(t)&&(S.call(t),!0)}catch(t){return!1}}(t);if(O(t))return!1;var e=x.call(t);return"[object Function]"===e||"[object GeneratorFunction]"===e},M=RegExp.prototype.exec;h=function(t){return"object"==typeof t&&(T?function(t){try{return M.call(t),!0}catch(t){return!1}}(t):"[object RegExp]"===x.call(t))};var A=String.prototype.valueOf;p=function(t){return"string"==typeof t||"object"==typeof t&&(T?function(t){try{return A.call(t),!0}catch(t){return!1}}(t):"[object String]"===x.call(t))};var L,I,N=u.defineProperty&&function(){try{var t={};for(var e in u.defineProperty(t,"x",{enumerable:!1,value:t}),t)return!1;return t.x===t}catch(t){return!1}}(),k=(L=e.hasOwnProperty,I=N?function(t,e,r,n){!n&&e in t||u.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:!0,value:r})}:function(t,e,r,n){!n&&e in t||(t[e]=r)},function(t,e,r){for(var n in e)L.call(e,n)&&I(t,n,e[n],r)}),R=function(t){var e=typeof t;return null===t||"object"!==e&&"function"!==e},C=b.isNaN||function(t){return t!=t},F=function(t){var e=+t;return C(e)?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(0<e||-1)*Math.floor(Math.abs(e))),e},_=function(t){var e,r,n;if(R(t))return t;if(r=t.valueOf,j(r)&&(e=r.call(t),R(e)))return e;if(n=t.toString,j(n)&&(e=n.call(t),R(e)))return e;throw new TypeError},P=function(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return u(t)},$=function(t){return t>>>0},q=function(){};k(r,{bind:function(e){var r=this;if(!j(r))throw new TypeError("Function.prototype.bind called on incompatible "+r);for(var n,i=c.call(arguments,1),t=m(0,r.length-i.length),o=[],a=0;a<t;a++)d.call(o,"$"+a);return n=l("binder","return function ("+v.call(o,",")+"){ return binder.apply(this, arguments); }")(function(){if(this instanceof n){var t=w.call(r,this,f.call(i,c.call(arguments)));return u(t)===t?t:this}return w.call(r,e,f.call(i,c.call(arguments)))}),r.prototype&&(q.prototype=r.prototype,n.prototype=new q,q.prototype=null),n}});var U=y.bind(e.hasOwnProperty),J=y.bind(e.toString),H=y.bind(c),Z=w.bind(c);if("object"==typeof document&&document&&document.documentElement)try{H(document.documentElement.childNodes)}catch(t){var B=H,z=Z;H=function(t){for(var e=[],r=t.length;0<r--;)e[r]=t[r];return z(e,B(arguments,1))},Z=function(t,e){return z(H(t),e)}}var G=y.bind(n.slice),V=y.bind(n.split),Y=y.bind(n.indexOf),X=y.bind(d),W=y.bind(e.propertyIsEnumerable),K=y.bind(t.sort),Q=s.isArray||function(t){return"[object Array]"===J(t)},tt=1!==[].unshift(0);k(t,{unshift:function(){return a.apply(this,arguments),this.length}},tt),k(s,{isArray:Q});var et=u("a"),rt="a"!==et[0]||!(0 in et),nt=function(t){var n=!0,e=!0,r=!1;if(t)try{t.call("foo",function(t,e,r){"object"!=typeof r&&(n=!1)}),t.call([1],function(){"use strict";e="string"==typeof this},"x")}catch(t){r=!0}return!!t&&!r&&n&&e};k(t,{forEach:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=-1,o=$(n.length);if(1<arguments.length&&(e=arguments[1]),!j(t))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++i<o;)i in n&&(void 0===e?t(n[i],i,r):t.call(e,n[i],i,r))}},!nt(t.forEach)),k(t,{map:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=$(n.length),o=s(i);if(1<arguments.length&&(e=arguments[1]),!j(t))throw new TypeError("Array.prototype.map callback must be a function");for(var a=0;a<i;a++)a in n&&(o[a]=void 0===e?t(n[a],a,r):t.call(e,n[a],a,r));return o}},!nt(t.map)),k(t,{filter:function(t){var e,r,n=P(this),i=rt&&p(this)?V(this,""):n,o=$(i.length),a=[];if(1<arguments.length&&(r=arguments[1]),!j(t))throw new TypeError("Array.prototype.filter callback must be a function");for(var s=0;s<o;s++)s in i&&(e=i[s],(void 0===r?t(e,s,n):t.call(r,e,s,n))&&X(a,e));return a}},!nt(t.filter)),k(t,{every:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=$(n.length);if(1<arguments.length&&(e=arguments[1]),!j(t))throw new TypeError("Array.prototype.every callback must be a function");for(var o=0;o<i;o++)if(o in n&&!(void 0===e?t(n[o],o,r):t.call(e,n[o],o,r)))return!1;return!0}},!nt(t.every)),k(t,{some:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=$(n.length);if(1<arguments.length&&(e=arguments[1]),!j(t))throw new TypeError("Array.prototype.some callback must be a function");for(var o=0;o<i;o++)if(o in n&&(void 0===e?t(n[o],o,r):t.call(e,n[o],o,r)))return!0;return!1}},!nt(t.some));var it=!1;t.reduce&&(it="object"==typeof t.reduce.call("es5",function(t,e,r,n){return n})),k(t,{reduce:function(t){var e=P(this),r=rt&&p(this)?V(this,""):e,n=$(r.length);if(!j(t))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===n&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var i,o=0;if(2<=arguments.length)i=arguments[1];else for(;;){if(o in r){i=r[o++];break}if(++o>=n)throw new TypeError("reduce of empty array with no initial value")}for(;o<n;o++)o in r&&(i=t(i,r[o],o,e));return i}},!it);var ot=!1;t.reduceRight&&(ot="object"==typeof t.reduceRight.call("es5",function(t,e,r,n){return n})),k(t,{reduceRight:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=$(n.length);if(!j(t))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===i&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var o=i-1;if(2<=arguments.length)e=arguments[1];else for(;;){if(o in n){e=n[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}if(o<0)return e;for(;o in n&&(e=t(e,n[o],o,r)),o--;);return e}},!ot);var at=t.indexOf&&-1!==[0,1].indexOf(1,2);k(t,{indexOf:function(t){var e=rt&&p(this)?V(this,""):P(this),r=$(e.length);if(0===r)return-1;var n=0;for(1<arguments.length&&(n=F(arguments[1])),n=0<=n?n:m(0,r+n);n<r;n++)if(n in e&&e[n]===t)return n;return-1}},at);var st=t.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);k(t,{lastIndexOf:function(t){var e=rt&&p(this)?V(this,""):P(this),r=$(e.length);if(0===r)return-1;var n=r-1;for(1<arguments.length&&(n=E(n,F(arguments[1]))),n=0<=n?n:r-Math.abs(n);0<=n;n--)if(n in e&&t===e[n])return n;return-1}},st);var ut,lt,ct=(lt=(ut=[1,2]).splice(),2===ut.length&&Q(lt)&&0===lt.length);k(t,{splice:function(t,e){return 0===arguments.length?[]:o.apply(this,arguments)}},!ct);var ft,ht=(ft={},t.splice.call(ft,0,0,1),1===ft.length);k(t,{splice:function(t,e){if(0===arguments.length)return[];var r=arguments;return this.length=m(F(this.length),0),0<arguments.length&&"number"!=typeof e&&((r=H(arguments)).length<2?X(r,this.length-t):r[1]=F(e)),o.apply(this,r)}},!ht);var pt,dt,vt=((pt=new s(1e5))[8]="x",pt.splice(1,1),7===pt.indexOf("x")),yt=((dt=[])[256]="a",dt.splice(257,0,"b"),"a"===dt[256]);k(t,{splice:function(t,e){for(var r,n=P(this),i=[],o=$(n.length),a=F(t),s=a<0?m(o+a,0):E(a,o),u=E(m(F(e),0),o-s),l=0;l<u;)r=g(s+l),U(n,r)&&(i[l]=n[r]),l+=1;var c,f=H(arguments,2),h=f.length;if(h<u){l=s;for(var p=o-u;l<p;)r=g(l+u),c=g(l+h),U(n,r)?n[c]=n[r]:delete n[c],l+=1;for(var d=(l=o)-u+h;d<l;)delete n[l-1],l-=1}else if(u<h)for(l=o-u;s<l;)r=g(l+u-1),c=g(l+h-1),U(n,r)?n[c]=n[r]:delete n[c],l-=1;l=s;for(var v=0;v<f.length;++v)n[l]=f[v],l+=1;return n.length=o-u+h,i}},!vt||!yt);var gt,bt=t.join;try{gt="1,2,3"!==Array.prototype.join.call("123",",")}catch(t){gt=!0}gt&&k(t,{join:function(t){var e=void 0===t?",":t;return bt.call(p(this)?V(this,""):this,e)}},gt);var wt="1,2"!==[1,2].join(void 0);wt&&k(t,{join:function(t){var e=void 0===t?",":t;return bt.call(this,e)}},wt);var mt,Et=function(t){for(var e=P(this),r=$(e.length),n=0;n<arguments.length;)e[r+n]=arguments[n],n+=1;return e.length=r+n,r+n},xt=(mt={},1!==Array.prototype.push.call(mt,void 0)||1!==mt.length||void 0!==mt[0]||!U(mt,0));k(t,{push:function(t){return Q(this)?d.apply(this,arguments):Et.apply(this,arguments)}},xt);var Tt,St=1!==(Tt=[]).push(void 0)||1!==Tt.length||void 0!==Tt[0]||!U(Tt,0);k(t,{push:Et},St),k(t,{slice:function(t,e){var r=p(this)?V(this,""):this;return Z(r,arguments)}},rt);var Dt=function(){try{[1,2].sort(null)}catch(t){try{[1,2].sort({})}catch(t){return!1}}return!0}(),Ot=function(){try{return[1,2].sort(/a/),!1}catch(t){}return!0}(),jt=function(){try{return[1,2].sort(void 0),!0}catch(t){}return!1}();k(t,{sort:function(t){if(void 0===t)return K(this);if(!j(t))throw new TypeError("Array.prototype.sort callback must be a function");return K(this,t)}},Dt||!jt||!Ot);var Mt=!W({toString:null},"toString"),At=W(function(){},"prototype"),Lt=!U("x","0"),It=function(t){var e=t.constructor;return e&&e.prototype===t},Nt={$window:!0,$console:!0,$parent:!0,$self:!0,$frame:!0,$frames:!0,$frameElement:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$external:!0,$width:!0,$height:!0,$top:!0,$localStorage:!0},kt=function(){if("undefined"==typeof window)return!1;for(var t in window)try{!Nt["$"+t]&&U(window,t)&&null!==window[t]&&"object"==typeof window[t]&&It(window[t])}catch(t){return!0}return!1}(),Rt=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Ct=Rt.length,Ft=function(t){return"[object Arguments]"===J(t)},_t=Ft(arguments)?Ft:function(t){return null!==t&&"object"==typeof t&&"number"==typeof t.length&&0<=t.length&&!Q(t)&&j(t.callee)};k(u,{keys:function(t){var e=j(t),r=_t(t),n=null!==t&&"object"==typeof t,i=n&&p(t);if(!n&&!e&&!r)throw new TypeError("Object.keys called on a non-object");var o=[],a=At&&e;if(i&&Lt||r)for(var s=0;s<t.length;++s)X(o,g(s));if(!r)for(var u in t)a&&"prototype"===u||!U(t,u)||X(o,g(u));if(Mt)for(var l=function(t){if("undefined"==typeof window||!kt)return It(t);try{return It(t)}catch(t){return!1}}(t),c=0;c<Ct;c++){var f=Rt[c];l&&"constructor"===f||!U(t,f)||X(o,f)}return o}});var Pt=u.keys&&function(){return 2===u.keys(arguments).length}(1,2),$t=u.keys&&function(){var t=u.keys(arguments);return 1!==arguments.length||1!==t.length||1!==t[0]}(1),qt=u.keys;k(u,{keys:function(t){return _t(t)?qt(H(t)):qt(t)}},!Pt||$t);var Ut,Jt,Ht=0!==new Date(-0xc782b5b342b24).getUTCMonth(),Zt=new Date(-0x55d318d56a724),Bt=new Date(14496624e5),zt="Mon, 01 Jan -45875 11:59:59 GMT"!==Zt.toUTCString();Zt.getTimezoneOffset()<-720?(Ut="Tue Jan 02 -45875"!==Zt.toDateString(),Jt=!/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(Bt))):(Ut="Mon Jan 01 -45875"!==Zt.toDateString(),Jt=!/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(Bt)));var Gt=y.bind(Date.prototype.getFullYear),Vt=y.bind(Date.prototype.getMonth),Yt=y.bind(Date.prototype.getDate),Xt=y.bind(Date.prototype.getUTCFullYear),Wt=y.bind(Date.prototype.getUTCMonth),Kt=y.bind(Date.prototype.getUTCDate),Qt=y.bind(Date.prototype.getUTCDay),te=y.bind(Date.prototype.getUTCHours),ee=y.bind(Date.prototype.getUTCMinutes),re=y.bind(Date.prototype.getUTCSeconds),ne=y.bind(Date.prototype.getUTCMilliseconds),ie=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],oe=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],ae=function(t,e){return Yt(new Date(e,t,0))};k(Date.prototype,{getFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Gt(this);return t<0&&11<Vt(this)?t+1:t},getMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Gt(this),e=Vt(this);return t<0&&11<e?0:e},getDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Gt(this),e=Vt(this),r=Yt(this);return t<0&&11<e?12===e?r:ae(0,t+1)-r+1:r},getUTCFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Xt(this);return t<0&&11<Wt(this)?t+1:t},getUTCMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Xt(this),e=Wt(this);return t<0&&11<e?0:e},getUTCDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Xt(this),e=Wt(this),r=Kt(this);return t<0&&11<e?12===e?r:ae(0,t+1)-r+1:r}},Ht),k(Date.prototype,{toUTCString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Qt(this),e=Kt(this),r=Wt(this),n=Xt(this),i=te(this),o=ee(this),a=re(this);return ie[t]+", "+(e<10?"0"+e:e)+" "+oe[r]+" "+n+" "+(i<10?"0"+i:i)+":"+(o<10?"0"+o:o)+":"+(a<10?"0"+a:a)+" GMT"}},Ht||zt),k(Date.prototype,{toDateString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=this.getDay(),e=this.getDate(),r=this.getMonth(),n=this.getFullYear();return ie[t]+" "+oe[r]+" "+(e<10?"0"+e:e)+" "+n}},Ht||Ut),(Ht||Jt)&&(Date.prototype.toString=function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=this.getDay(),e=this.getDate(),r=this.getMonth(),n=this.getFullYear(),i=this.getHours(),o=this.getMinutes(),a=this.getSeconds(),s=this.getTimezoneOffset(),u=Math.floor(Math.abs(s)/60),l=Math.floor(Math.abs(s)%60);return ie[t]+" "+oe[r]+" "+(e<10?"0"+e:e)+" "+n+" "+(i<10?"0"+i:i)+":"+(o<10?"0"+o:o)+":"+(a<10?"0"+a:a)+" GMT"+(0<s?"-":"+")+(u<10?"0"+u:u)+(l<10?"0"+l:l)},N&&u.defineProperty(Date.prototype,"toString",{configurable:!0,enumerable:!1,writable:!0}));var se=-621987552e5,ue="-000001",le=Date.prototype.toISOString&&-1===new Date(se).toISOString().indexOf(ue),ce=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString(),fe=y.bind(Date.prototype.getTime);k(Date.prototype,{toISOString:function(){if(!isFinite(this)||!isFinite(fe(this)))throw new RangeError("Date.prototype.toISOString called on non-finite value.");var t=Xt(this),e=Wt(this);t+=Math.floor(e/12);var r=[(e=(e%12+12)%12)+1,Kt(this),te(this),ee(this),re(this)];t=(t<0?"-":9999<t?"+":"")+G("00000"+Math.abs(t),0<=t&&t<=9999?-4:-6);for(var n=0;n<r.length;++n)r[n]=G("00"+r[n],-2);return t+"-"+H(r,0,2).join("-")+"T"+H(r,2).join(":")+"."+G("000"+ne(this),-3)+"Z"}},le||ce),function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(se).toJSON().indexOf(ue)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(t){return!1}}()||(Date.prototype.toJSON=function(t){var e=u(this),r=_(e);if("number"==typeof r&&!isFinite(r))return null;var n=e.toISOString;if(!j(n))throw new TypeError("toISOString property is not callable");return n.call(e)});var he=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),pe=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z"));if(isNaN(Date.parse("2000-01-01T00:00:00.000Z"))||pe||!he){var de=Math.pow(2,31)-1,ve=C(new Date(1970,0,1,0,0,0,de+1).getTime());Date=function(d){var p=function(t,e,r,n,i,o,a){var s,u=arguments.length;if(this instanceof d){var l=o,c=a;if(ve&&7<=u&&de<a){var f=Math.floor(a/de)*de,h=Math.floor(f/1e3);l+=h,c-=1e3*h}s=1===u&&g(t)===t?new d(p.parse(t)):7<=u?new d(t,e,r,n,i,l,c):6<=u?new d(t,e,r,n,i,l):5<=u?new d(t,e,r,n,i):4<=u?new d(t,e,r,n):3<=u?new d(t,e,r):2<=u?new d(t,e):1<=u?new d(t instanceof d?+t:t):new d}else s=d.apply(this,arguments);return R(s)||k(s,{constructor:p},!0),s},v=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),n=[0,31,59,90,120,151,181,212,243,273,304,334,365],y=function(t,e){var r=1<e?1:0;return n[e]+Math.floor((t-1969+r)/4)-Math.floor((t-1901+r)/100)+Math.floor((t-1601+r)/400)+365*(t-1970)};for(var t in d)U(d,t)&&(p[t]=d[t]);k(p,{now:d.now,UTC:d.UTC},!0),p.prototype=d.prototype,k(p.prototype,{constructor:p},!0);return k(p,{parse:function(t){var e=v.exec(t);if(e){var r,n=b(e[1]),i=b(e[2]||1)-1,o=b(e[3]||1)-1,a=b(e[4]||0),s=b(e[5]||0),u=b(e[6]||0),l=Math.floor(1e3*b(e[7]||0)),c=Boolean(e[4]&&!e[8]),f="-"===e[9]?1:-1,h=b(e[10]||0),p=b(e[11]||0);return a<(0<s||0<u||0<l?24:25)&&s<60&&u<60&&l<1e3&&-1<i&&i<12&&h<24&&p<60&&-1<o&&o<y(n,i+1)-y(n,i)&&(r=1e3*(60*((r=60*(24*(y(n,i)+o)+a+h*f))+s+p*f)+u)+l,c&&(r=function(t){var e=0,r=t;if(ve&&de<r){var n=Math.floor(r/de)*de,i=Math.floor(n/1e3);e+=i,r-=1e3*i}return b(new d(1970,0,1,0,0,e,r))}(r)),-864e13<=r&&r<=864e13)?r:NaN}return d.parse.apply(this,arguments)}}),p}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var ye=i.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0)),ge={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(t,e){for(var r=-1,n=e;++r<ge.size;)n+=t*ge.data[r],ge.data[r]=n%ge.base,n=Math.floor(n/ge.base)},divide:function(t){for(var e=ge.size,r=0;0<=--e;)r+=ge.data[e],ge.data[e]=Math.floor(r/t),r=r%t*ge.base},numToString:function(){for(var t=ge.size,e="";0<=--t;)if(""!==e||0===t||0!==ge.data[t]){var r=g(ge.data[t]);""===e?e=r:e+=G("0000000",0,7-r.length)+r}return e},pow:function t(e,r,n){return 0===r?n:r%2==1?t(e,r-1,n*e):t(e*e,r/2,n)},log:function(t){for(var e=0,r=t;4096<=r;)e+=12,r/=4096;for(;2<=r;)e+=1,r/=2;return e}};k(i,{toFixed:function(t){var e,r,n,i,o,a,s,u;if(e=b(t),(e=C(e)?0:Math.floor(e))<0||20<e)throw new RangeError("Number.toFixed called with invalid number of decimals");if(r=b(this),C(r))return"NaN";if(r<=-1e21||1e21<=r)return g(r);if(n="",r<0&&(n="-",r=-r),i="0",1e-21<r)if(a=(o=ge.log(r*ge.pow(2,69,1))-69)<0?r*ge.pow(2,-o,1):r/ge.pow(2,o,1),a*=4503599627370496,0<(o=52-o)){for(ge.multiply(0,a),s=e;7<=s;)ge.multiply(1e7,0),s-=7;for(ge.multiply(ge.pow(10,s,1),0),s=o-1;23<=s;)ge.divide(1<<23),s-=23;ge.divide(1<<s),ge.multiply(1,1),ge.divide(2),i=ge.numToString()}else ge.multiply(0,a),ge.multiply(1<<-o,0),i=ge.numToString()+G("0.00000000000000000000",2,2+e);return i=0<e?(u=i.length)<=e?n+G("0.0000000000000000000",0,e-u+2)+i:n+G(i,0,u-e)+"."+G(i,u-e):n+i}},ye);var be,we,me=function(){try{return"1"===1..toPrecision(void 0)}catch(t){return!0}}(),Ee=i.toPrecision;k(i,{toPrecision:function(t){return void 0===t?Ee.call(this):Ee.call(this,t)}},me),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||1<".".split(/()()/).length?(be=void 0===/()??/.exec("")[1],we=Math.pow(2,32)-1,n.split=function(t,e){var r=String(this);if(void 0===t&&0===e)return[];if(!h(t))return V(this,t,e);var n,i,o,a,s=[],u=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,c=new RegExp(t.source,u+"g");be||(n=new RegExp("^"+c.source+"$(?!\\s)",u));var f=void 0===e?we:$(e);for(i=c.exec(r);i&&!(l<(o=i.index+i[0].length)&&(X(s,G(r,l,i.index)),!be&&1<i.length&&i[0].replace(n,function(){for(var t=1;t<arguments.length-2;t++)void 0===arguments[t]&&(i[t]=void 0)}),1<i.length&&i.index<r.length&&d.apply(s,H(i,1)),a=i[0].length,l=o,f<=s.length));)c.lastIndex===i.index&&c.lastIndex++,i=c.exec(r);return l===r.length?!a&&c.test("")||X(s,""):X(s,G(r,l)),f<s.length?H(s,0,f):s}):"0".split(void 0,0).length&&(n.split=function(t,e){return void 0===t&&0===e?[]:V(this,t,e)});var xe,Te=n.replace;(xe=[],"x".replace(/x(.)?/g,function(t,e){X(xe,e)}),1===xe.length&&void 0===xe[0])||(n.replace=function(i,o){var t=j(o),e=h(i)&&/\)[*?]/.test(i.source);if(t&&e){return Te.call(this,i,function(t){var e=arguments.length,r=i.lastIndex;i.lastIndex=0;var n=i.exec(t)||[];return i.lastIndex=r,X(n,arguments[e-2],arguments[e-1]),o.apply(this,n)})}return Te.call(this,i,o)});var Se=n.substr,De="".substr&&"b"!=="0b".substr(-1);k(n,{substr:function(t,e){var r=t;return t<0&&(r=m(this.length+t,0)),Se.call(this,r,e)}},De);var Oe="\t\n\v\f\r \u2028\u2029\ufeff",je="["+Oe+"]",Me=new RegExp("^"+je+je+"*"),Ae=new RegExp(je+je+"*$"),Le=n.trim&&(Oe.trim()||!"".trim());k(n,{trim:function(){if(null==this)throw new TypeError("can't convert "+this+" to object");return g(this).replace(Me,"").replace(Ae,"")}},Le);var Ie=y.bind(String.prototype.trim),Ne=n.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);k(n,{lastIndexOf:function(t){if(null==this)throw new TypeError("can't convert "+this+" to object");for(var e=g(this),r=g(t),n=1<arguments.length?b(arguments[1]):NaN,i=C(n)?1/0:F(n),o=E(m(i,0),e.length),a=r.length,s=o+a;0<s;){s=m(0,s-a);var u=Y(G(e,s,o+a),r);if(-1!==u)return s+u}return-1}},Ne);var ke,Re,Ce,Fe=n.lastIndexOf;if(k(n,{lastIndexOf:function(t){return Fe.apply(this,arguments)}},1!==n.lastIndexOf.length),8===parseInt(Oe+"08")&&22===parseInt(Oe+"0x16")||(parseInt=(ke=parseInt,Re=/^[-+]?0[xX]/,function(t,e){var r=Ie(String(t)),n=b(e)||(Re.test(r)?16:10);return ke(r,n)})),1/parseFloat("-0")!=-1/0&&(parseFloat=(Ce=parseFloat,function(t){var e=Ie(String(t)),r=Ce(e);return 0===r&&"-"===G(e,0,1)?-0:r})),"RangeError: test"!==String(new RangeError("test"))){Error.prototype.toString=function(){if(null==this)throw new TypeError("can't convert "+this+" to object");var t=this.name;void 0===t?t="Error":"string"!=typeof t&&(t=g(t));var e=this.message;return void 0===e?e="":"string"!=typeof e&&(e=g(e)),t?e?t+": "+e:t:e}}if(N){var _e=function(t,e){if(W(t,e)){var r=Object.getOwnPropertyDescriptor(t,e);r.configurable&&(r.enumerable=!1,Object.defineProperty(t,e,r))}};_e(Error.prototype,"message"),""!==Error.prototype.message&&(Error.prototype.message=""),_e(Error.prototype,"name")}if("/a/gim"!==String(/a/gim)){RegExp.prototype.toString=function(){var t="/"+this.source+"/";return this.global&&(t+="g"),this.ignoreCase&&(t+="i"),this.multiline&&(t+="m"),t}}})},{}],7:[function(t,e,r){var n,c;n=this,c=function(t,e,r){for(var n in e)if(e.hasOwnProperty(n)){var i=n,o=e[n];if(void 0===o&&(o=""),null===o&&(o=""),void 0!==r&&(i=r+"["+n+"]"),o.constructor===Array)i+="[]";else if("object"==typeof o){c(t,o,i);continue}var a=t.elements.namedItem(i);if(a)switch(a.type||a[0].type){default:a.value=o;break;case"radio":case"checkbox":for(var s=0;s<a.length;s++)a[s].checked=-1<o.indexOf(a[s].value);break;case"select-multiple":for(var u=o.constructor==Array?o:[o],l=0;l<a.options.length;l++)a.options[l].selected|=-1<u.indexOf(a.options[l].value);break;case"select":case"select-one":a.value=o.toString()||o;break;case"date":a.value=new Date(o).toISOString().split("T")[0]}}},"function"==typeof s&&"object"==typeof s.amd&&s.amd?s(function(){return c}):void 0!==e&&e.exports?e.exports=c:n.populate=c},{}],8:[function(t,a,e){!function(t){"use strict";function e(){}var r=e.prototype,n=t.EventEmitter;function o(t,e){for(var r=t.length;r--;)if(t[r].listener===e)return r;return-1}function i(t){return function(){return this[t].apply(this,arguments)}}r.getListeners=function(t){var e,r,n=this._getEvents();if(t instanceof RegExp)for(r in e={},n)n.hasOwnProperty(r)&&t.test(r)&&(e[r]=n[r]);else e=n[t]||(n[t]=[]);return e},r.flattenListeners=function(t){var e,r=[];for(e=0;e<t.length;e+=1)r.push(t[e].listener);return r},r.getListenersAsObject=function(t){var e,r=this.getListeners(t);return r instanceof Array&&((e={})[t]=r),e||r},r.addListener=function(t,e){if(!function t(e){return"function"==typeof e||e instanceof RegExp||!(!e||"object"!=typeof e)&&t(e.listener)}(e))throw new TypeError("listener must be a function");var r,n=this.getListenersAsObject(t),i="object"==typeof e;for(r in n)n.hasOwnProperty(r)&&-1===o(n[r],e)&&n[r].push(i?e:{listener:e,once:!1});return this},r.on=i("addListener"),r.addOnceListener=function(t,e){return this.addListener(t,{listener:e,once:!0})},r.once=i("addOnceListener"),r.defineEvent=function(t){return this.getListeners(t),this},r.defineEvents=function(t){for(var e=0;e<t.length;e+=1)this.defineEvent(t[e]);return this},r.removeListener=function(t,e){var r,n,i=this.getListenersAsObject(t);for(n in i)i.hasOwnProperty(n)&&-1!==(r=o(i[n],e))&&i[n].splice(r,1);return this},r.off=i("removeListener"),r.addListeners=function(t,e){return this.manipulateListeners(!1,t,e)},r.removeListeners=function(t,e){return this.manipulateListeners(!0,t,e)},r.manipulateListeners=function(t,e,r){var n,i,o=t?this.removeListener:this.addListener,a=t?this.removeListeners:this.addListeners;if("object"!=typeof e||e instanceof RegExp)for(n=r.length;n--;)o.call(this,e,r[n]);else for(n in e)e.hasOwnProperty(n)&&(i=e[n])&&("function"==typeof i?o.call(this,n,i):a.call(this,n,i));return this},r.removeEvent=function(t){var e,r=typeof t,n=this._getEvents();if("string"===r)delete n[t];else if(t instanceof RegExp)for(e in n)n.hasOwnProperty(e)&&t.test(e)&&delete n[e];else delete this._events;return this},r.removeAllListeners=i("removeEvent"),r.emitEvent=function(t,e){var r,n,i,o,a=this.getListenersAsObject(t);for(o in a)if(a.hasOwnProperty(o))for(r=a[o].slice(0),i=0;i<r.length;i++)!0===(n=r[i]).once&&this.removeListener(t,n.listener),n.listener.apply(this,e||[])===this._getOnceReturnValue()&&this.removeListener(t,n.listener);return this},r.trigger=i("emitEvent"),r.emit=function(t){var e=Array.prototype.slice.call(arguments,1);return this.emitEvent(t,e)},r.setOnceReturnValue=function(t){return this._onceReturnValue=t,this},r._getOnceReturnValue=function(){return!this.hasOwnProperty("_onceReturnValue")||this._onceReturnValue},r._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return t.EventEmitter=n,e},"function"==typeof s&&s.amd?s(function(){return e}):"object"==typeof a&&a.exports?a.exports=e:t.EventEmitter=e}("undefined"!=typeof window?window:this||{})},{}]},{},[5])}();
//# sourceMappingURL=public.min.js.map
-{"version":3,"sources":["public.js"],"names":["require","undefined","define","e","t","n","r","s","o","u","a","i","f","Error","code","l","exports","call","length","1","module","toggleElement","el","show","getAttribute","conditions","split","fieldName","expectedValues","values","form","inputs","querySelectorAll","input","type","checked","push","value","getFieldValues","element","bubbleElement","parentElement","tagName","findForm","conditionMet","indexOf","style","display","forEach","required","removeAttribute","setAttribute","evaluate","elements","document","handleInputEvent","evt","target","className","Object","defineProperty","default","init","addEventListener","window","2","getButtonText","button","innerHTML","setButtonText","text","Loader","formElement","this","querySelector","loadingInterval","character","originalButton","cloneNode","prototype","setCharacter","c","start","loadingText","styles","getComputedStyle","width","setInterval","tick","bind","opacity","loadingChar","stop","clearInterval","3","_slicedToArray","arr","Array","isArray","Symbol","iterator","_arr","_n","_d","_e","_s","_i","next","done","err","sliceIterator","TypeError","populate","forms","filter","data","q","params","URLSearchParams","obj","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","entries","_step$value","name","substr","arrName","return","parseUrlParams","location","search","populate.js","4","CustomEvent","event","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","5","_interopRequireDefault","__esModule","emitEvent","eventName","dispatchEvent","events","emit","_formPrefiller2","_conditionality2","vars","hf_js_vars","ajax_url","href","formEl","preventDefault","messageElements","parentNode","removeChild","cleanFormMessages","formData","FormData","append","request","XMLHttpRequest","onreadystatechange","loader","readyState","response","status","JSON","parse","responseText","error","console","log","message","txtElement","createElement","insertBefore","lastElementChild","nextElementSibling","addFormMessage","hide_form","redirect_url","reset","createRequestHandler","open","setRequestHeader","send","submitForm","html_forms","on","./conditionality.js","./form-loading-indicator.js","./form-prefiller.js","./polyfills/custom-event.js","es5-shim","wolfy87-eventemitter","6","root","factory","amd","returnExports","isRegex","$Array","ArrayPrototype","$Object","ObjectPrototype","$Function","Function","FunctionPrototype","$String","String","StringPrototype","$Number","Number","NumberPrototype","array_slice","slice","array_splice","splice","array_push","array_unshift","unshift","array_concat","concat","array_join","join","apply","max","Math","min","to_string","toString","hasToStringTag","toStringTag","fnToStr","constructorRegex","isES6ClassFn","spaceStripped","replace","test","isCallable","tryFunctionObject","strClass","regexExec","RegExp","exec","tryRegexExec","isString","strValue","valueOf","tryStringObject","supportsDescriptors","enumerable","_","x","defineProperties","has","object","method","forceAssign","configurable","writable","map","hasOwnProperty","isPrimitive","isActualNaN","isNaN","ES","num","floor","abs","val","toStr","Empty","that","bound","args","arguments","boundLength","boundArgs","result","owns","arraySlice","arraySliceApply","documentElement","childNodes","origArraySlice","origArraySliceApply","strSlice","strSplit","strIndexOf","pushCall","isEnum","propertyIsEnumerable","arraySort","sort","hasUnshiftReturnValueBug","boxedString","splitString","properlyBoxesContext","properlyBoxesNonStrict","properlyBoxesStrict","threwException","__","context","callbackfn","T","self","every","some","reduceCoercesToObject","reduce","___","list","reduceRightCoercesToObject","reduceRight","hasFirefox2IndexOfBug","searchElement","hasFirefox2LastIndexOfBug","lastIndexOf","spliceNoopReturnsEmptyArray","deleteCount","spliceWorksWithEmptyObject","spliceWorksWithLargeSparseArrays","spliceWorksWithSmallSparseArrays","from","O","A","len","relativeStart","actualStart","actualDeleteCount","k","to","items","itemCount","maxK","minK","hasStringJoinBug","originalJoin","separator","sep","hasJoinUndefinedBug","pushShim","item","pushIsNotGeneric","pushUndefinedIsWeird","end","sortIgnoresNonFunctions","e2","sortThrowsOnRegex","sortIgnoresUndefined","compareFn","hasDontEnumBug","hasProtoEnumBug","hasStringEnumBug","equalsConstructorPrototype","ctor","constructor","excludedKeys","$window","$console","$parent","$self","$frame","$frames","$frameElement","$webkitIndexedDB","$webkitStorageInfo","$external","$width","$height","$top","$localStorage","hasAutomationEqualityBug","dontEnums","dontEnumsLength","isStandardArguments","isArguments","callee","keys","isFn","isArgs","isObject","isStr","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","j","dontEnum","keysWorksWithArguments","keysHasArgumentsLengthBug","argKeys","originalKeys","hasToDateStringFormatBug","hasToStringFormatBug","hasNegativeMonthYearBug","Date","getUTCMonth","aNegativeTestDate","aPositiveTestDate","hasToUTCStringFormatBug","toUTCString","getTimezoneOffset","toDateString","originalGetFullYear","getFullYear","originalGetMonth","getMonth","originalGetDate","getDate","originalGetUTCFullYear","getUTCFullYear","originalGetUTCMonth","originalGetUTCDate","getUTCDate","originalGetUTCDay","getUTCDay","originalGetUTCHours","getUTCHours","originalGetUTCMinutes","getUTCMinutes","originalGetUTCSeconds","getUTCSeconds","originalGetUTCMilliseconds","getUTCMilliseconds","dayName","monthName","daysInMonth","month","year","date","day","hour","minute","second","getDay","getHours","getMinutes","getSeconds","timezoneOffset","hoursOffset","minutesOffset","hasNegativeDateBug","toISOString","hasSafari51DateBug","getTime","isFinite","RangeError","toJSON","NaN","key","tv","toISO","supportsExtendedYears","acceptsInvalidDates","maxSafeUnsigned32Bit","pow","hasSafariSignedIntBug","NativeDate","DateShim","Y","M","D","h","m","ms","seconds","millis","msToShift","sToShift","isoDateExpression","months","dayFromMonth","now","UTC","string","match","millisecond","isLocalTime","Boolean","signOffset","hourOffset","minuteOffset","toUTC","hasToFixedBugs","toFixed","toFixedHelpers","base","size","multiply","c2","divide","numToString","acc","x2","fractionDigits","z","hasToPrecisionUndefinedBug","toPrecision","originalToPrecision","precision","compliantExecNpcg","maxSafe32BitInt","limit","separator2","lastIndex","lastLength","output","flags","ignoreCase","multiline","unicode","sticky","lastLastIndex","separatorCopy","source","splitLimit","index","str_replace","groups","group","searchValue","replaceValue","hasCapturingGroups","originalLastIndex","string_substr","hasNegativeSubstrBug","normalizedStart","ws","wsRegexChars","trimBeginRegexp","trimEndRegexp","hasTrimWhitespaceBug","trim","hasLastIndexBug","searchString","S","searchStr","numPos","pos","Infinity","searchLen","originalLastIndexOf","parseInt","origParseInt","hexRegex","str","radix","defaultedRadix","parseFloat","origParseFloat","inputString","msg","ensureNonEnumerable","prop","desc","getOwnPropertyDescriptor","global","7","basename","namedItem","options","selected","8","EventEmitter","indexOfListener","listeners","listener","alias","isValidListener","proto","originalGlobalValue","getListeners","_getEvents","flattenListeners","flatListeners","getListenersAsObject","addListener","listenerIsWrapped","once","addOnceListener","defineEvent","defineEvents","evts","removeListener","off","addListeners","manipulateListeners","removeListeners","remove","single","multiple","removeEvent","_events","removeAllListeners","listenersMap","_getOnceReturnValue","trigger","setOnceReturnValue","_onceReturnValue","noConflict"],"mappings":"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","file":"public.min.js","sourcesContent":["(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction getFieldValues(form, fieldName) {\n var values = [];\n var inputs = form.querySelectorAll('input[name=\"' + fieldName + '\"], select[name=\"' + fieldName + '\"], textarea[name=\"' + fieldName + '\"]');\n\n for (var i = 0; i < inputs.length; i++) {\n var input = inputs[i];\n var type = input.getAttribute(\"type\");\n\n if ((type === \"radio\" || type === \"checkbox\") && !input.checked) {\n continue;\n }\n\n values.push(input.value);\n }\n\n return values;\n}\n\nfunction findForm(element) {\n var bubbleElement = element;\n\n while (bubbleElement.parentElement) {\n bubbleElement = bubbleElement.parentElement;\n\n if (bubbleElement.tagName === 'FORM') {\n return bubbleElement;\n }\n }\n\n return null;\n}\n\nfunction toggleElement(el) {\n var show = !!el.getAttribute('data-show-if');\n var conditions = show ? el.getAttribute('data-show-if').split(':') : el.getAttribute('data-hide-if').split(':');\n var fieldName = conditions[0];\n var expectedValues = (conditions.length > 1 ? conditions[1] : \"*\").split('|');\n var form = findForm(el);\n var values = getFieldValues(form, fieldName);\n\n // determine whether condition is met\n var conditionMet = false;\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n\n // condition is met when value is in array of expected values OR expected values contains a wildcard and value is not empty\n conditionMet = expectedValues.indexOf(value) > -1 || expectedValues.indexOf('*') > -1 && value.length > 0;\n\n if (conditionMet) {\n break;\n }\n }\n\n // toggle element display\n if (show) {\n el.style.display = conditionMet ? '' : 'none';\n } else {\n el.style.display = conditionMet ? 'none' : '';\n }\n\n // find all inputs inside this element and toggle [required] attr (to prevent HTML5 validation on hidden elements)\n var inputs = el.querySelectorAll('input, select, textarea');\n [].forEach.call(inputs, function (el) {\n if ((conditionMet || show) && el.getAttribute('data-was-required')) {\n el.required = true;\n el.removeAttribute('data-was-required');\n }\n\n if ((!conditionMet || !show) && el.required) {\n el.setAttribute('data-was-required', \"true\");\n el.required = false;\n }\n });\n}\n\n// evaluate conditional elements globally\nfunction evaluate() {\n var elements = document.querySelectorAll('.hf-form [data-show-if], .hf-form [data-hide-if]');\n [].forEach.call(elements, toggleElement);\n}\n\n// re-evaluate conditional elements for change events on forms\nfunction handleInputEvent(evt) {\n if (!evt.target || !evt.target.form || evt.target.form.className.indexOf('hf-form') < 0) {\n return;\n }\n\n var form = evt.target.form;\n var elements = form.querySelectorAll('[data-show-if], [data-hide-if]');\n [].forEach.call(elements, toggleElement);\n}\n\nexports.default = {\n 'init': function init() {\n document.addEventListener('keyup', handleInputEvent, true);\n document.addEventListener('change', handleInputEvent, true);\n document.addEventListener('hf-refresh', evaluate, true);\n window.addEventListener('load', evaluate);\n evaluate();\n }\n};\n\n},{}],2:[function(require,module,exports){\n'use strict';\n\nfunction getButtonText(button) {\n return button.innerHTML ? button.innerHTML : button.value;\n}\n\nfunction setButtonText(button, text) {\n button.innerHTML ? button.innerHTML = text : button.value = text;\n}\n\nfunction Loader(formElement) {\n this.form = formElement;\n this.button = formElement.querySelector('input[type=\"submit\"], button[type=\"submit\"]');\n this.loadingInterval = 0;\n this.character = '\\xB7';\n\n if (this.button) {\n this.originalButton = this.button.cloneNode(true);\n }\n}\n\nLoader.prototype.setCharacter = function (c) {\n this.character = c;\n};\n\nLoader.prototype.start = function () {\n if (this.button) {\n // loading text\n var loadingText = this.button.getAttribute('data-loading-text');\n if (loadingText) {\n setButtonText(this.button, loadingText);\n return;\n }\n\n // Show AJAX loader\n var styles = window.getComputedStyle(this.button);\n this.button.style.width = styles.width;\n setButtonText(this.button, this.character);\n this.loadingInterval = window.setInterval(this.tick.bind(this), 500);\n } else {\n this.form.style.opacity = '0.5';\n }\n};\n\nLoader.prototype.tick = function () {\n // count chars, start over at 5\n var text = getButtonText(this.button);\n var loadingChar = this.character;\n setButtonText(this.button, text.length >= 5 ? loadingChar : text + \" \" + loadingChar);\n};\n\nLoader.prototype.stop = function () {\n if (this.button) {\n this.button.style.width = this.originalButton.style.width;\n var text = getButtonText(this.originalButton);\n setButtonText(this.button, text);\n window.clearInterval(this.loadingInterval);\n } else {\n this.form.style.opacity = '';\n }\n};\n\nmodule.exports = Loader;\n\n},{}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar populate = require('populate.js');\n\n// parse ?query=string with array support. no nesting.\nfunction parseUrlParams(q) {\n\tvar params = new URLSearchParams(q);\n\tvar obj = {};\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = params.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _step$value = _slicedToArray(_step.value, 2),\n\t\t\t name = _step$value[0],\n\t\t\t value = _step$value[1];\n\n\t\t\tif (name.substr(name.length - 2) === \"[]\") {\n\t\t\t\tvar arrName = name.substr(0, name.length - 2);\n\t\t\t\tobj[arrName] = obj[arrName] || [];\n\t\t\t\tobj[arrName].push(value);\n\t\t\t} else {\n\t\t\t\tobj[name] = value;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn obj;\n}\n\nfunction init() {\n\t// only act on form elements outputted by HTML Forms\n\tvar forms = [].filter.call(document.forms, function (f) {\n\t\treturn f.className.indexOf('hf-form') > -1;\n\t});\n\tif (!forms) {\n\t\treturn;\n\t}\n\n\t// fill each form with data from URL params\n\tvar data = parseUrlParams(window.location.search);\n\tforms.forEach(function (f) {\n\t\tpopulate(f, data);\n\t});\n}\n\nexports.default = { init: init };\n\n},{\"populate.js\":7}],4:[function(require,module,exports){\n\"use strict\";\n\n/* window.CustomEvent polyfill for IE */\n(function () {\n if (typeof window.CustomEvent === \"function\") return false;\n\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n\n window.CustomEvent = CustomEvent;\n})();\n\n},{}],5:[function(require,module,exports){\n\"use strict\";\n\nvar _formPrefiller = require('./form-prefiller.js');\n\nvar _formPrefiller2 = _interopRequireDefault(_formPrefiller);\n\nvar _conditionality = require('./conditionality.js');\n\nvar _conditionality2 = _interopRequireDefault(_conditionality);\n\nrequire('./polyfills/custom-event.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar shim = require('es5-shim');\nvar Loader = require('./form-loading-indicator.js');\nvar vars = window.hf_js_vars || { ajax_url: window.location.href };\nvar EventEmitter = require('wolfy87-eventemitter');\nvar events = new EventEmitter();\n\nfunction cleanFormMessages(formEl) {\n var messageElements = formEl.querySelectorAll('.hf-message');\n [].forEach.call(messageElements, function (el) {\n el.parentNode.removeChild(el);\n });\n}\n\nfunction addFormMessage(formEl, message) {\n var txtElement = document.createElement('p');\n txtElement.className = 'hf-message hf-message-' + message.type;\n txtElement.innerHTML = message.text;\n formEl.insertBefore(txtElement, formEl.lastElementChild.nextElementSibling);\n}\n\nfunction handleSubmitEvents(e) {\n var formEl = e.target;\n\n // only act on html-forms\n if (formEl.className.indexOf('hf-form') < 0) {\n return;\n }\n\n e.preventDefault();\n submitForm(formEl);\n}\n\nfunction submitForm(formEl) {\n cleanFormMessages(formEl);\n emitEvent('submit', formEl);\n\n var formData = new FormData(formEl);\n [].forEach.call(formEl.querySelectorAll('[data-was-required=true]'), function (el) {\n formData.append('was_required[]', el.getAttribute('name'));\n });\n\n var request = new XMLHttpRequest();\n request.onreadystatechange = createRequestHandler(formEl);\n request.open('POST', vars.ajax_url, true);\n request.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n request.send(formData);\n request = null;\n}\n\nfunction emitEvent(eventName, element) {\n // browser event API: formElement.on('hf-success', ..)\n element.dispatchEvent(new CustomEvent(\"hf-\" + eventName));\n\n // custom events API: html_forms.on('success', ..)\n events.emit(eventName, [element]);\n}\n\nfunction createRequestHandler(formEl) {\n var loader = new Loader(formEl);\n loader.start();\n\n return function () {\n // are we done?\n if (this.readyState === 4) {\n var response = void 0;\n loader.stop();\n\n if (this.status >= 200 && this.status < 400) {\n try {\n response = JSON.parse(this.responseText);\n } catch (error) {\n console.log('HTML Forms: failed to parse AJAX response.\\n\\nError: \"' + error + '\"');\n return;\n }\n\n emitEvent('submitted', formEl);\n\n if (response.error) {\n emitEvent('error', formEl);\n } else {\n emitEvent('success', formEl);\n }\n\n // Show form message\n if (response.message) {\n addFormMessage(formEl, response.message);\n }\n\n // Should we hide form?\n if (response.hide_form) {\n formEl.querySelector('.hf-fields-wrap').style.display = 'none';\n }\n\n // Should we redirect?\n if (response.redirect_url) {\n window.location = response.redirect_url;\n }\n\n // clear form\n if (!response.error) {\n formEl.reset();\n }\n } else {\n // Server error :(\n console.log(this.responseText);\n }\n }\n };\n}\n\ndocument.addEventListener('submit', handleSubmitEvents, true);\n_conditionality2.default.init();\n_formPrefiller2.default.init();\n\nwindow.html_forms = {\n 'on': events.on.bind(events)\n};\n\n},{\"./conditionality.js\":1,\"./form-loading-indicator.js\":2,\"./form-prefiller.js\":3,\"./polyfills/custom-event.js\":4,\"es5-shim\":6,\"wolfy87-eventemitter\":8}],6:[function(require,module,exports){\n/*!\n * https://github.com/es-shims/es5-shim\n * @license es5-shim Copyright 2009-2015 by contributors, MIT License\n * see https://github.com/es-shims/es5-shim/blob/master/LICENSE\n */\n\n// vim: ts=4 sts=4 sw=4 expandtab\n\n// Add semicolon to prevent IIFE from being passed as argument to concatenated code.\n;\n\n// UMD (Universal Module Definition)\n// see https://github.com/umdjs/umd/blob/master/templates/returnExports.js\n(function (root, factory) {\n 'use strict';\n\n /* global define, exports, module */\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like enviroments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.returnExports = factory();\n }\n}(this, function () {\n /**\n * Brings an environment as close to ECMAScript 5 compliance\n * as is possible with the facilities of erstwhile engines.\n *\n * Annotated ES5: http://es5.github.com/ (specific links below)\n * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf\n * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/\n */\n\n // Shortcut to an often accessed properties, in order to avoid multiple\n // dereference that costs universally. This also holds a reference to known-good\n // functions.\n var $Array = Array;\n var ArrayPrototype = $Array.prototype;\n var $Object = Object;\n var ObjectPrototype = $Object.prototype;\n var $Function = Function;\n var FunctionPrototype = $Function.prototype;\n var $String = String;\n var StringPrototype = $String.prototype;\n var $Number = Number;\n var NumberPrototype = $Number.prototype;\n var array_slice = ArrayPrototype.slice;\n var array_splice = ArrayPrototype.splice;\n var array_push = ArrayPrototype.push;\n var array_unshift = ArrayPrototype.unshift;\n var array_concat = ArrayPrototype.concat;\n var array_join = ArrayPrototype.join;\n var call = FunctionPrototype.call;\n var apply = FunctionPrototype.apply;\n var max = Math.max;\n var min = Math.min;\n\n // Having a toString local variable name breaks in Opera so use to_string.\n var to_string = ObjectPrototype.toString;\n\n /* global Symbol */\n /* eslint-disable one-var-declaration-per-line, no-redeclare, max-statements-per-line */\n var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, constructorRegex = /^\\s*class /, isES6ClassFn = function isES6ClassFn(value) { try { var fnStr = fnToStr.call(value); var singleStripped = fnStr.replace(/\\/\\/.*\\n/g, ''); var multiStripped = singleStripped.replace(/\\/\\*[.\\s\\S]*\\*\\//g, ''); var spaceStripped = multiStripped.replace(/\\n/mg, ' ').replace(/ {2}/g, ' '); return constructorRegex.test(spaceStripped); } catch (e) { return false; /* not a function */ } }, tryFunctionObject = function tryFunctionObject(value) { try { if (isES6ClassFn(value)) { return false; } fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]', isCallable = function isCallable(value) { if (!value) { return false; } if (typeof value !== 'function' && typeof value !== 'object') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } if (isES6ClassFn(value)) { return false; } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };\n\n var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };\n var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };\n /* eslint-enable one-var-declaration-per-line, no-redeclare, max-statements-per-line */\n\n /* inlined from http://npmjs.com/define-properties */\n var supportsDescriptors = $Object.defineProperty && (function () {\n try {\n var obj = {};\n $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });\n for (var _ in obj) { // jscs:ignore disallowUnusedVariables\n return false;\n }\n return obj.x === obj;\n } catch (e) { /* this is ES3 */\n return false;\n }\n }());\n var defineProperties = (function (has) {\n // Define configurable, writable, and non-enumerable props\n // if they don't exist.\n var defineProperty;\n if (supportsDescriptors) {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) {\n return;\n }\n $Object.defineProperty(object, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: method\n });\n };\n } else {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) {\n return;\n }\n object[name] = method;\n };\n }\n return function defineProperties(object, map, forceAssign) {\n for (var name in map) {\n if (has.call(map, name)) {\n defineProperty(object, name, map[name], forceAssign);\n }\n }\n };\n }(ObjectPrototype.hasOwnProperty));\n\n //\n // Util\n // ======\n //\n\n /* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */\n var isPrimitive = function isPrimitive(input) {\n var type = typeof input;\n return input === null || (type !== 'object' && type !== 'function');\n };\n\n var isActualNaN = $Number.isNaN || function isActualNaN(x) {\n return x !== x;\n };\n\n var ES = {\n // ES5 9.4\n // http://es5.github.com/#x9.4\n // http://jsperf.com/to-integer\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */\n ToInteger: function ToInteger(num) {\n var n = +num;\n if (isActualNaN(n)) {\n n = 0;\n } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n },\n\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */\n ToPrimitive: function ToPrimitive(input) {\n var val, valueOf, toStr;\n if (isPrimitive(input)) {\n return input;\n }\n valueOf = input.valueOf;\n if (isCallable(valueOf)) {\n val = valueOf.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n toStr = input.toString;\n if (isCallable(toStr)) {\n val = toStr.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n throw new TypeError();\n },\n\n // ES5 9.9\n // http://es5.github.com/#x9.9\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */\n ToObject: function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \" + o + ' to object');\n }\n return $Object(o);\n },\n\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */\n ToUint32: function ToUint32(x) {\n return x >>> 0;\n }\n };\n\n //\n // Function\n // ========\n //\n\n // ES-5 15.3.4.5\n // http://es5.github.com/#x15.3.4.5\n\n var Empty = function Empty() {};\n\n defineProperties(FunctionPrototype, {\n bind: function bind(that) { // .length is 1\n // 1. Let Target be the this value.\n var target = this;\n // 2. If IsCallable(Target) is false, throw a TypeError exception.\n if (!isCallable(target)) {\n throw new TypeError('Function.prototype.bind called on incompatible ' + target);\n }\n // 3. Let A be a new (possibly empty) internal list of all of the\n // argument values provided after thisArg (arg1, arg2 etc), in order.\n // XXX slicedArgs will stand in for \"A\" if used\n var args = array_slice.call(arguments, 1); // for normal call\n // 4. Let F be a new native ECMAScript object.\n // 11. Set the [[Prototype]] internal property of F to the standard\n // built-in Function prototype object as specified in 15.3.3.1.\n // 12. Set the [[Call]] internal property of F as described in\n // 15.3.4.5.1.\n // 13. Set the [[Construct]] internal property of F as described in\n // 15.3.4.5.2.\n // 14. Set the [[HasInstance]] internal property of F as described in\n // 15.3.4.5.3.\n var bound;\n var binder = function () {\n\n if (this instanceof bound) {\n // 15.3.4.5.2 [[Construct]]\n // When the [[Construct]] internal method of a function object,\n // F that was created using the bind function is called with a\n // list of arguments ExtraArgs, the following steps are taken:\n // 1. Let target be the value of F's [[TargetFunction]]\n // internal property.\n // 2. If target has no [[Construct]] internal method, a\n // TypeError exception is thrown.\n // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Construct]] internal\n // method of target providing args as the arguments.\n\n var result = apply.call(\n target,\n this,\n array_concat.call(args, array_slice.call(arguments))\n );\n if ($Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n // 15.3.4.5.1 [[Call]]\n // When the [[Call]] internal method of a function object, F,\n // which was created using the bind function is called with a\n // this value and a list of arguments ExtraArgs, the following\n // steps are taken:\n // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 2. Let boundThis be the value of F's [[BoundThis]] internal\n // property.\n // 3. Let target be the value of F's [[TargetFunction]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Call]] internal method\n // of target providing boundThis as the this value and\n // providing args as the arguments.\n\n // equiv: target.call(this, ...boundArgs, ...args)\n return apply.call(\n target,\n that,\n array_concat.call(args, array_slice.call(arguments))\n );\n\n }\n\n };\n\n // 15. If the [[Class]] internal property of Target is \"Function\", then\n // a. Let L be the length property of Target minus the length of A.\n // b. Set the length own property of F to either 0 or L, whichever is\n // larger.\n // 16. Else set the length own property of F to 0.\n\n var boundLength = max(0, target.length - args.length);\n\n // 17. Set the attributes of the length own property of F to the values\n // specified in 15.3.5.1.\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n array_push.call(boundArgs, '$' + i);\n }\n\n // XXX Build a dynamic function with desired amount of arguments is the only\n // way to set the length property of a function.\n // In environments where Content Security Policies enabled (Chrome extensions,\n // for ex.) all use of eval or Function costructor throws an exception.\n // However in all of these environments Function.prototype.bind exists\n // and so this code will never be executed.\n bound = $Function('binder', 'return function (' + array_join.call(boundArgs, ',') + '){ return binder.apply(this, arguments); }')(binder);\n\n if (target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n // Clean up dangling references.\n Empty.prototype = null;\n }\n\n // TODO\n // 18. Set the [[Extensible]] internal property of F to true.\n\n // TODO\n // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\n // 20. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\n // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\n // false.\n // 21. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\n // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\n // and false.\n\n // TODO\n // NOTE Function objects created using Function.prototype.bind do not\n // have a prototype property or the [[Code]], [[FormalParameters]], and\n // [[Scope]] internal properties.\n // XXX can't delete prototype in pure-js.\n\n // 22. Return F.\n return bound;\n }\n });\n\n // _Please note: Shortcuts are defined after `Function.prototype.bind` as we\n // use it in defining shortcuts.\n var owns = call.bind(ObjectPrototype.hasOwnProperty);\n var toStr = call.bind(ObjectPrototype.toString);\n var arraySlice = call.bind(array_slice);\n var arraySliceApply = apply.bind(array_slice);\n /* globals document */\n if (typeof document === 'object' && document && document.documentElement) {\n try {\n arraySlice(document.documentElement.childNodes);\n } catch (e) {\n var origArraySlice = arraySlice;\n var origArraySliceApply = arraySliceApply;\n arraySlice = function arraySliceIE(arr) {\n var r = [];\n var i = arr.length;\n while (i-- > 0) {\n r[i] = arr[i];\n }\n return origArraySliceApply(r, origArraySlice(arguments, 1));\n };\n arraySliceApply = function arraySliceApplyIE(arr, args) {\n return origArraySliceApply(arraySlice(arr), args);\n };\n }\n }\n var strSlice = call.bind(StringPrototype.slice);\n var strSplit = call.bind(StringPrototype.split);\n var strIndexOf = call.bind(StringPrototype.indexOf);\n var pushCall = call.bind(array_push);\n var isEnum = call.bind(ObjectPrototype.propertyIsEnumerable);\n var arraySort = call.bind(ArrayPrototype.sort);\n\n //\n // Array\n // =====\n //\n\n var isArray = $Array.isArray || function isArray(obj) {\n return toStr(obj) === '[object Array]';\n };\n\n // ES5 15.4.4.12\n // http://es5.github.com/#x15.4.4.13\n // Return len+argCount.\n // [bugfix, ielt8]\n // IE < 8 bug: [].unshift(0) === undefined but should be \"1\"\n var hasUnshiftReturnValueBug = [].unshift(0) !== 1;\n defineProperties(ArrayPrototype, {\n unshift: function () {\n array_unshift.apply(this, arguments);\n return this.length;\n }\n }, hasUnshiftReturnValueBug);\n\n // ES5 15.4.3.2\n // http://es5.github.com/#x15.4.3.2\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\n defineProperties($Array, { isArray: isArray });\n\n // The IsCallable() check in the Array functions\n // has been replaced with a strict check on the\n // internal class of the object to trap cases where\n // the provided function was actually a regular\n // expression literal, which in V8 and\n // JavaScriptCore is a typeof \"function\". Only in\n // V8 are regular expression literals permitted as\n // reduce parameters, so it is desirable in the\n // general case for the shim to match the more\n // strict and common behavior of rejecting regular\n // expressions.\n\n // ES5 15.4.4.18\n // http://es5.github.com/#x15.4.4.18\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach\n\n // Check failure of by-index access of string characters (IE < 9)\n // and failure of `0 in boxedString` (Rhino)\n var boxedString = $Object('a');\n var splitString = boxedString[0] !== 'a' || !(0 in boxedString);\n\n var properlyBoxesContext = function properlyBoxed(method) {\n // Check node 0.6.21 bug where third parameter is not boxed\n var properlyBoxesNonStrict = true;\n var properlyBoxesStrict = true;\n var threwException = false;\n if (method) {\n try {\n method.call('foo', function (_, __, context) {\n if (typeof context !== 'object') {\n properlyBoxesNonStrict = false;\n }\n });\n\n method.call([1], function () {\n 'use strict';\n\n properlyBoxesStrict = typeof this === 'string';\n }, 'x');\n } catch (e) {\n threwException = true;\n }\n }\n return !!method && !threwException && properlyBoxesNonStrict && properlyBoxesStrict;\n };\n\n defineProperties(ArrayPrototype, {\n forEach: function forEach(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var i = -1;\n var length = ES.ToUint32(self.length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.forEach callback must be a function');\n }\n\n while (++i < length) {\n if (i in self) {\n // Invoke the callback function with call, passing arguments:\n // context, property value, property key, thisArg object\n if (typeof T === 'undefined') {\n callbackfn(self[i], i, object);\n } else {\n callbackfn.call(T, self[i], i, object);\n }\n }\n }\n }\n }, !properlyBoxesContext(ArrayPrototype.forEach));\n\n // ES5 15.4.4.19\n // http://es5.github.com/#x15.4.4.19\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map\n defineProperties(ArrayPrototype, {\n map: function map(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var result = $Array(length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.map callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n if (typeof T === 'undefined') {\n result[i] = callbackfn(self[i], i, object);\n } else {\n result[i] = callbackfn.call(T, self[i], i, object);\n }\n }\n }\n return result;\n }\n }, !properlyBoxesContext(ArrayPrototype.map));\n\n // ES5 15.4.4.20\n // http://es5.github.com/#x15.4.4.20\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter\n defineProperties(ArrayPrototype, {\n filter: function filter(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var result = [];\n var value;\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.filter callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {\n pushCall(result, value);\n }\n }\n }\n return result;\n }\n }, !properlyBoxesContext(ArrayPrototype.filter));\n\n // ES5 15.4.4.16\n // http://es5.github.com/#x15.4.4.16\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every\n defineProperties(ArrayPrototype, {\n every: function every(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.every callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {\n return false;\n }\n }\n return true;\n }\n }, !properlyBoxesContext(ArrayPrototype.every));\n\n // ES5 15.4.4.17\n // http://es5.github.com/#x15.4.4.17\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some\n defineProperties(ArrayPrototype, {\n some: function some(callbackfn/*, thisArg */) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.some callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {\n return true;\n }\n }\n return false;\n }\n }, !properlyBoxesContext(ArrayPrototype.some));\n\n // ES5 15.4.4.21\n // http://es5.github.com/#x15.4.4.21\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce\n var reduceCoercesToObject = false;\n if (ArrayPrototype.reduce) {\n reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) {\n return list;\n }) === 'object';\n }\n defineProperties(ArrayPrototype, {\n reduce: function reduce(callbackfn/*, initialValue*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.reduce callback must be a function');\n }\n\n // no value to return if no initial value and an empty array\n if (length === 0 && arguments.length === 1) {\n throw new TypeError('reduce of empty array with no initial value');\n }\n\n var i = 0;\n var result;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n\n // if array contains no values, no initial value to return\n if (++i >= length) {\n throw new TypeError('reduce of empty array with no initial value');\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = callbackfn(result, self[i], i, object);\n }\n }\n\n return result;\n }\n }, !reduceCoercesToObject);\n\n // ES5 15.4.4.22\n // http://es5.github.com/#x15.4.4.22\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight\n var reduceRightCoercesToObject = false;\n if (ArrayPrototype.reduceRight) {\n reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) {\n return list;\n }) === 'object';\n }\n defineProperties(ArrayPrototype, {\n reduceRight: function reduceRight(callbackfn/*, initial*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.reduceRight callback must be a function');\n }\n\n // no value to return if no initial value, empty array\n if (length === 0 && arguments.length === 1) {\n throw new TypeError('reduceRight of empty array with no initial value');\n }\n\n var result;\n var i = length - 1;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n\n // if array contains no values, no initial value to return\n if (--i < 0) {\n throw new TypeError('reduceRight of empty array with no initial value');\n }\n } while (true);\n }\n\n if (i < 0) {\n return result;\n }\n\n do {\n if (i in self) {\n result = callbackfn(result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n }\n }, !reduceRightCoercesToObject);\n\n // ES5 15.4.4.14\n // http://es5.github.com/#x15.4.4.14\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\n var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;\n defineProperties(ArrayPrototype, {\n indexOf: function indexOf(searchElement/*, fromIndex */) {\n var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);\n var length = ES.ToUint32(self.length);\n\n if (length === 0) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = ES.ToInteger(arguments[1]);\n }\n\n // handle negative indices\n i = i >= 0 ? i : max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === searchElement) {\n return i;\n }\n }\n return -1;\n }\n }, hasFirefox2IndexOfBug);\n\n // ES5 15.4.4.15\n // http://es5.github.com/#x15.4.4.15\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;\n defineProperties(ArrayPrototype, {\n lastIndexOf: function lastIndexOf(searchElement/*, fromIndex */) {\n var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);\n var length = ES.ToUint32(self.length);\n\n if (length === 0) {\n return -1;\n }\n var i = length - 1;\n if (arguments.length > 1) {\n i = min(i, ES.ToInteger(arguments[1]));\n }\n // handle negative indices\n i = i >= 0 ? i : length - Math.abs(i);\n for (; i >= 0; i--) {\n if (i in self && searchElement === self[i]) {\n return i;\n }\n }\n return -1;\n }\n }, hasFirefox2LastIndexOfBug);\n\n // ES5 15.4.4.12\n // http://es5.github.com/#x15.4.4.12\n var spliceNoopReturnsEmptyArray = (function () {\n var a = [1, 2];\n var result = a.splice();\n return a.length === 2 && isArray(result) && result.length === 0;\n }());\n defineProperties(ArrayPrototype, {\n // Safari 5.0 bug where .splice() returns undefined\n splice: function splice(start, deleteCount) {\n if (arguments.length === 0) {\n return [];\n } else {\n return array_splice.apply(this, arguments);\n }\n }\n }, !spliceNoopReturnsEmptyArray);\n\n var spliceWorksWithEmptyObject = (function () {\n var obj = {};\n ArrayPrototype.splice.call(obj, 0, 0, 1);\n return obj.length === 1;\n }());\n defineProperties(ArrayPrototype, {\n splice: function splice(start, deleteCount) {\n if (arguments.length === 0) {\n return [];\n }\n var args = arguments;\n this.length = max(ES.ToInteger(this.length), 0);\n if (arguments.length > 0 && typeof deleteCount !== 'number') {\n args = arraySlice(arguments);\n if (args.length < 2) {\n pushCall(args, this.length - start);\n } else {\n args[1] = ES.ToInteger(deleteCount);\n }\n }\n return array_splice.apply(this, args);\n }\n }, !spliceWorksWithEmptyObject);\n var spliceWorksWithLargeSparseArrays = (function () {\n // Per https://github.com/es-shims/es5-shim/issues/295\n // Safari 7/8 breaks with sparse arrays of size 1e5 or greater\n var arr = new $Array(1e5);\n // note: the index MUST be 8 or larger or the test will false pass\n arr[8] = 'x';\n arr.splice(1, 1);\n // note: this test must be defined *after* the indexOf shim\n // per https://github.com/es-shims/es5-shim/issues/313\n return arr.indexOf('x') === 7;\n }());\n var spliceWorksWithSmallSparseArrays = (function () {\n // Per https://github.com/es-shims/es5-shim/issues/295\n // Opera 12.15 breaks on this, no idea why.\n var n = 256;\n var arr = [];\n arr[n] = 'a';\n arr.splice(n + 1, 0, 'b');\n return arr[n] === 'a';\n }());\n defineProperties(ArrayPrototype, {\n splice: function splice(start, deleteCount) {\n var O = ES.ToObject(this);\n var A = [];\n var len = ES.ToUint32(O.length);\n var relativeStart = ES.ToInteger(start);\n var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);\n var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);\n\n var k = 0;\n var from;\n while (k < actualDeleteCount) {\n from = $String(actualStart + k);\n if (owns(O, from)) {\n A[k] = O[from];\n }\n k += 1;\n }\n\n var items = arraySlice(arguments, 2);\n var itemCount = items.length;\n var to;\n if (itemCount < actualDeleteCount) {\n k = actualStart;\n var maxK = len - actualDeleteCount;\n while (k < maxK) {\n from = $String(k + actualDeleteCount);\n to = $String(k + itemCount);\n if (owns(O, from)) {\n O[to] = O[from];\n } else {\n delete O[to];\n }\n k += 1;\n }\n k = len;\n var minK = len - actualDeleteCount + itemCount;\n while (k > minK) {\n delete O[k - 1];\n k -= 1;\n }\n } else if (itemCount > actualDeleteCount) {\n k = len - actualDeleteCount;\n while (k > actualStart) {\n from = $String(k + actualDeleteCount - 1);\n to = $String(k + itemCount - 1);\n if (owns(O, from)) {\n O[to] = O[from];\n } else {\n delete O[to];\n }\n k -= 1;\n }\n }\n k = actualStart;\n for (var i = 0; i < items.length; ++i) {\n O[k] = items[i];\n k += 1;\n }\n O.length = len - actualDeleteCount + itemCount;\n\n return A;\n }\n }, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);\n\n var originalJoin = ArrayPrototype.join;\n var hasStringJoinBug;\n try {\n hasStringJoinBug = Array.prototype.join.call('123', ',') !== '1,2,3';\n } catch (e) {\n hasStringJoinBug = true;\n }\n if (hasStringJoinBug) {\n defineProperties(ArrayPrototype, {\n join: function join(separator) {\n var sep = typeof separator === 'undefined' ? ',' : separator;\n return originalJoin.call(isString(this) ? strSplit(this, '') : this, sep);\n }\n }, hasStringJoinBug);\n }\n\n var hasJoinUndefinedBug = [1, 2].join(undefined) !== '1,2';\n if (hasJoinUndefinedBug) {\n defineProperties(ArrayPrototype, {\n join: function join(separator) {\n var sep = typeof separator === 'undefined' ? ',' : separator;\n return originalJoin.call(this, sep);\n }\n }, hasJoinUndefinedBug);\n }\n\n var pushShim = function push(item) {\n var O = ES.ToObject(this);\n var n = ES.ToUint32(O.length);\n var i = 0;\n while (i < arguments.length) {\n O[n + i] = arguments[i];\n i += 1;\n }\n O.length = n + i;\n return n + i;\n };\n\n var pushIsNotGeneric = (function () {\n var obj = {};\n var result = Array.prototype.push.call(obj, undefined);\n return result !== 1 || obj.length !== 1 || typeof obj[0] !== 'undefined' || !owns(obj, 0);\n }());\n defineProperties(ArrayPrototype, {\n push: function push(item) {\n if (isArray(this)) {\n return array_push.apply(this, arguments);\n }\n return pushShim.apply(this, arguments);\n }\n }, pushIsNotGeneric);\n\n // This fixes a very weird bug in Opera 10.6 when pushing `undefined\n var pushUndefinedIsWeird = (function () {\n var arr = [];\n var result = arr.push(undefined);\n return result !== 1 || arr.length !== 1 || typeof arr[0] !== 'undefined' || !owns(arr, 0);\n }());\n defineProperties(ArrayPrototype, { push: pushShim }, pushUndefinedIsWeird);\n\n // ES5 15.2.3.14\n // http://es5.github.io/#x15.4.4.10\n // Fix boxed string bug\n defineProperties(ArrayPrototype, {\n slice: function (start, end) {\n var arr = isString(this) ? strSplit(this, '') : this;\n return arraySliceApply(arr, arguments);\n }\n }, splitString);\n\n var sortIgnoresNonFunctions = (function () {\n try {\n [1, 2].sort(null);\n } catch (e) {\n try {\n [1, 2].sort({});\n } catch (e2) {\n return false;\n }\n }\n return true;\n }());\n var sortThrowsOnRegex = (function () {\n // this is a problem in Firefox 4, in which `typeof /a/ === 'function'`\n try {\n [1, 2].sort(/a/);\n return false;\n } catch (e) {}\n return true;\n }());\n var sortIgnoresUndefined = (function () {\n // applies in IE 8, for one.\n try {\n [1, 2].sort(undefined);\n return true;\n } catch (e) {}\n return false;\n }());\n defineProperties(ArrayPrototype, {\n sort: function sort(compareFn) {\n if (typeof compareFn === 'undefined') {\n return arraySort(this);\n }\n if (!isCallable(compareFn)) {\n throw new TypeError('Array.prototype.sort callback must be a function');\n }\n return arraySort(this, compareFn);\n }\n }, sortIgnoresNonFunctions || !sortIgnoresUndefined || !sortThrowsOnRegex);\n\n //\n // Object\n // ======\n //\n\n // ES5 15.2.3.14\n // http://es5.github.com/#x15.2.3.14\n\n // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\n var hasDontEnumBug = !isEnum({ 'toString': null }, 'toString'); // jscs:ignore disallowQuotedKeysInObjects\n var hasProtoEnumBug = isEnum(function () {}, 'prototype');\n var hasStringEnumBug = !owns('x', '0');\n var equalsConstructorPrototype = function (o) {\n var ctor = o.constructor;\n return ctor && ctor.prototype === o;\n };\n var excludedKeys = {\n $window: true,\n $console: true,\n $parent: true,\n $self: true,\n $frame: true,\n $frames: true,\n $frameElement: true,\n $webkitIndexedDB: true,\n $webkitStorageInfo: true,\n $external: true,\n $width: true,\n $height: true,\n $top: true,\n $localStorage: true\n };\n var hasAutomationEqualityBug = (function () {\n /* globals window */\n if (typeof window === 'undefined') {\n return false;\n }\n for (var k in window) {\n try {\n if (!excludedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {\n equalsConstructorPrototype(window[k]);\n }\n } catch (e) {\n return true;\n }\n }\n return false;\n }());\n var equalsConstructorPrototypeIfNotBuggy = function (object) {\n if (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n return equalsConstructorPrototype(object);\n }\n try {\n return equalsConstructorPrototype(object);\n } catch (e) {\n return false;\n }\n };\n var dontEnums = [\n 'toString',\n 'toLocaleString',\n 'valueOf',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'constructor'\n ];\n var dontEnumsLength = dontEnums.length;\n\n // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js\n // can be replaced with require('is-arguments') if we ever use a build process instead\n var isStandardArguments = function isArguments(value) {\n return toStr(value) === '[object Arguments]';\n };\n var isLegacyArguments = function isArguments(value) {\n return value !== null\n && typeof value === 'object'\n && typeof value.length === 'number'\n && value.length >= 0\n && !isArray(value)\n && isCallable(value.callee);\n };\n var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;\n\n defineProperties($Object, {\n keys: function keys(object) {\n var isFn = isCallable(object);\n var isArgs = isArguments(object);\n var isObject = object !== null && typeof object === 'object';\n var isStr = isObject && isString(object);\n\n if (!isObject && !isFn && !isArgs) {\n throw new TypeError('Object.keys called on a non-object');\n }\n\n var theKeys = [];\n var skipProto = hasProtoEnumBug && isFn;\n if ((isStr && hasStringEnumBug) || isArgs) {\n for (var i = 0; i < object.length; ++i) {\n pushCall(theKeys, $String(i));\n }\n }\n\n if (!isArgs) {\n for (var name in object) {\n if (!(skipProto && name === 'prototype') && owns(object, name)) {\n pushCall(theKeys, $String(name));\n }\n }\n }\n\n if (hasDontEnumBug) {\n var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n for (var j = 0; j < dontEnumsLength; j++) {\n var dontEnum = dontEnums[j];\n if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {\n pushCall(theKeys, dontEnum);\n }\n }\n }\n return theKeys;\n }\n });\n\n var keysWorksWithArguments = $Object.keys && (function () {\n // Safari 5.0 bug\n return $Object.keys(arguments).length === 2;\n }(1, 2));\n var keysHasArgumentsLengthBug = $Object.keys && (function () {\n var argKeys = $Object.keys(arguments);\n return arguments.length !== 1 || argKeys.length !== 1 || argKeys[0] !== 1;\n }(1));\n var originalKeys = $Object.keys;\n defineProperties($Object, {\n keys: function keys(object) {\n if (isArguments(object)) {\n return originalKeys(arraySlice(object));\n } else {\n return originalKeys(object);\n }\n }\n }, !keysWorksWithArguments || keysHasArgumentsLengthBug);\n\n //\n // Date\n // ====\n //\n\n var hasNegativeMonthYearBug = new Date(-3509827329600292).getUTCMonth() !== 0;\n var aNegativeTestDate = new Date(-1509842289600292);\n var aPositiveTestDate = new Date(1449662400000);\n var hasToUTCStringFormatBug = aNegativeTestDate.toUTCString() !== 'Mon, 01 Jan -45875 11:59:59 GMT';\n var hasToDateStringFormatBug;\n var hasToStringFormatBug;\n var timeZoneOffset = aNegativeTestDate.getTimezoneOffset();\n if (timeZoneOffset < -720) {\n hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Tue Jan 02 -45875';\n hasToStringFormatBug = !(/^Thu Dec 10 2015 \\d\\d:\\d\\d:\\d\\d GMT[-+]\\d\\d\\d\\d(?: |$)/).test(String(aPositiveTestDate));\n } else {\n hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Mon Jan 01 -45875';\n hasToStringFormatBug = !(/^Wed Dec 09 2015 \\d\\d:\\d\\d:\\d\\d GMT[-+]\\d\\d\\d\\d(?: |$)/).test(String(aPositiveTestDate));\n }\n\n var originalGetFullYear = call.bind(Date.prototype.getFullYear);\n var originalGetMonth = call.bind(Date.prototype.getMonth);\n var originalGetDate = call.bind(Date.prototype.getDate);\n var originalGetUTCFullYear = call.bind(Date.prototype.getUTCFullYear);\n var originalGetUTCMonth = call.bind(Date.prototype.getUTCMonth);\n var originalGetUTCDate = call.bind(Date.prototype.getUTCDate);\n var originalGetUTCDay = call.bind(Date.prototype.getUTCDay);\n var originalGetUTCHours = call.bind(Date.prototype.getUTCHours);\n var originalGetUTCMinutes = call.bind(Date.prototype.getUTCMinutes);\n var originalGetUTCSeconds = call.bind(Date.prototype.getUTCSeconds);\n var originalGetUTCMilliseconds = call.bind(Date.prototype.getUTCMilliseconds);\n var dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n var monthName = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n var daysInMonth = function daysInMonth(month, year) {\n return originalGetDate(new Date(year, month, 0));\n };\n\n defineProperties(Date.prototype, {\n getFullYear: function getFullYear() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetFullYear(this);\n if (year < 0 && originalGetMonth(this) > 11) {\n return year + 1;\n }\n return year;\n },\n getMonth: function getMonth() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetFullYear(this);\n var month = originalGetMonth(this);\n if (year < 0 && month > 11) {\n return 0;\n }\n return month;\n },\n getDate: function getDate() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetFullYear(this);\n var month = originalGetMonth(this);\n var date = originalGetDate(this);\n if (year < 0 && month > 11) {\n if (month === 12) {\n return date;\n }\n var days = daysInMonth(0, year + 1);\n return (days - date) + 1;\n }\n return date;\n },\n getUTCFullYear: function getUTCFullYear() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetUTCFullYear(this);\n if (year < 0 && originalGetUTCMonth(this) > 11) {\n return year + 1;\n }\n return year;\n },\n getUTCMonth: function getUTCMonth() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetUTCFullYear(this);\n var month = originalGetUTCMonth(this);\n if (year < 0 && month > 11) {\n return 0;\n }\n return month;\n },\n getUTCDate: function getUTCDate() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetUTCFullYear(this);\n var month = originalGetUTCMonth(this);\n var date = originalGetUTCDate(this);\n if (year < 0 && month > 11) {\n if (month === 12) {\n return date;\n }\n var days = daysInMonth(0, year + 1);\n return (days - date) + 1;\n }\n return date;\n }\n }, hasNegativeMonthYearBug);\n\n defineProperties(Date.prototype, {\n toUTCString: function toUTCString() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var day = originalGetUTCDay(this);\n var date = originalGetUTCDate(this);\n var month = originalGetUTCMonth(this);\n var year = originalGetUTCFullYear(this);\n var hour = originalGetUTCHours(this);\n var minute = originalGetUTCMinutes(this);\n var second = originalGetUTCSeconds(this);\n return dayName[day] + ', '\n + (date < 10 ? '0' + date : date) + ' '\n + monthName[month] + ' '\n + year + ' '\n + (hour < 10 ? '0' + hour : hour) + ':'\n + (minute < 10 ? '0' + minute : minute) + ':'\n + (second < 10 ? '0' + second : second) + ' GMT';\n }\n }, hasNegativeMonthYearBug || hasToUTCStringFormatBug);\n\n // Opera 12 has `,`\n defineProperties(Date.prototype, {\n toDateString: function toDateString() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var day = this.getDay();\n var date = this.getDate();\n var month = this.getMonth();\n var year = this.getFullYear();\n return dayName[day] + ' '\n + monthName[month] + ' '\n + (date < 10 ? '0' + date : date) + ' '\n + year;\n }\n }, hasNegativeMonthYearBug || hasToDateStringFormatBug);\n\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\n if (hasNegativeMonthYearBug || hasToStringFormatBug) {\n Date.prototype.toString = function toString() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var day = this.getDay();\n var date = this.getDate();\n var month = this.getMonth();\n var year = this.getFullYear();\n var hour = this.getHours();\n var minute = this.getMinutes();\n var second = this.getSeconds();\n var timezoneOffset = this.getTimezoneOffset();\n var hoursOffset = Math.floor(Math.abs(timezoneOffset) / 60);\n var minutesOffset = Math.floor(Math.abs(timezoneOffset) % 60);\n return dayName[day] + ' '\n + monthName[month] + ' '\n + (date < 10 ? '0' + date : date) + ' '\n + year + ' '\n + (hour < 10 ? '0' + hour : hour) + ':'\n + (minute < 10 ? '0' + minute : minute) + ':'\n + (second < 10 ? '0' + second : second) + ' GMT'\n + (timezoneOffset > 0 ? '-' : '+')\n + (hoursOffset < 10 ? '0' + hoursOffset : hoursOffset)\n + (minutesOffset < 10 ? '0' + minutesOffset : minutesOffset);\n };\n if (supportsDescriptors) {\n $Object.defineProperty(Date.prototype, 'toString', {\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n }\n\n // ES5 15.9.5.43\n // http://es5.github.com/#x15.9.5.43\n // This function returns a String value represent the instance in time\n // represented by this Date object. The format of the String is the Date Time\n // string format defined in 15.9.1.15. All fields are present in the String.\n // The time zone is always UTC, denoted by the suffix Z. If the time value of\n // this object is not a finite Number a RangeError exception is thrown.\n var negativeDate = -62198755200000;\n var negativeYearString = '-000001';\n var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1; // eslint-disable-line max-len\n var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';\n\n var getTime = call.bind(Date.prototype.getTime);\n\n defineProperties(Date.prototype, {\n toISOString: function toISOString() {\n if (!isFinite(this) || !isFinite(getTime(this))) {\n // Adope Photoshop requires the second check.\n throw new RangeError('Date.prototype.toISOString called on non-finite value.');\n }\n\n var year = originalGetUTCFullYear(this);\n\n var month = originalGetUTCMonth(this);\n // see https://github.com/es-shims/es5-shim/issues/111\n year += Math.floor(month / 12);\n month = ((month % 12) + 12) % 12;\n\n // the date time string format is specified in 15.9.1.15.\n var result = [\n month + 1,\n originalGetUTCDate(this),\n originalGetUTCHours(this),\n originalGetUTCMinutes(this),\n originalGetUTCSeconds(this)\n ];\n year = (\n (year < 0 ? '-' : (year > 9999 ? '+' : ''))\n + strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)\n );\n\n for (var i = 0; i < result.length; ++i) {\n // pad months, days, hours, minutes, and seconds to have two digits.\n result[i] = strSlice('00' + result[i], -2);\n }\n // pad milliseconds to have three digits.\n return (\n year + '-' + arraySlice(result, 0, 2).join('-')\n + 'T' + arraySlice(result, 2).join(':') + '.'\n + strSlice('000' + originalGetUTCMilliseconds(this), -3) + 'Z'\n );\n }\n }, hasNegativeDateBug || hasSafari51DateBug);\n\n // ES5 15.9.5.44\n // http://es5.github.com/#x15.9.5.44\n // This function provides a String representation of a Date object for use by\n // JSON.stringify (15.12.3).\n var dateToJSONIsSupported = (function () {\n try {\n return Date.prototype.toJSON\n && new Date(NaN).toJSON() === null\n && new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1\n && Date.prototype.toJSON.call({ // generic\n toISOString: function () { return true; }\n });\n } catch (e) {\n return false;\n }\n }());\n if (!dateToJSONIsSupported) {\n Date.prototype.toJSON = function toJSON(key) {\n // When the toJSON method is called with argument key, the following\n // steps are taken:\n\n // 1. Let O be the result of calling ToObject, giving it the this\n // value as its argument.\n // 2. Let tv be ES.ToPrimitive(O, hint Number).\n var O = $Object(this);\n var tv = ES.ToPrimitive(O);\n // 3. If tv is a Number and is not finite, return null.\n if (typeof tv === 'number' && !isFinite(tv)) {\n return null;\n }\n // 4. Let toISO be the result of calling the [[Get]] internal method of\n // O with argument \"toISOString\".\n var toISO = O.toISOString;\n // 5. If IsCallable(toISO) is false, throw a TypeError exception.\n if (!isCallable(toISO)) {\n throw new TypeError('toISOString property is not callable');\n }\n // 6. Return the result of calling the [[Call]] internal method of\n // toISO with O as the this value and an empty argument list.\n return toISO.call(O);\n\n // NOTE 1 The argument is ignored.\n\n // NOTE 2 The toJSON function is intentionally generic; it does not\n // require that its this value be a Date object. Therefore, it can be\n // transferred to other kinds of objects for use as a method. However,\n // it does require that any such object have a toISOString method. An\n // object is free to use the argument key to filter its\n // stringification.\n };\n }\n\n // ES5 15.9.4.2\n // http://es5.github.com/#x15.9.4.2\n // based on work shared by Daniel Friesen (dantman)\n // http://gist.github.com/303249\n var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;\n var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));\n var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));\n if (doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {\n // XXX global assignment won't work in embeddings that use\n // an alternate object for the context.\n /* global Date: true */\n var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1;\n var hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());\n // eslint-disable-next-line no-implicit-globals, no-global-assign\n Date = (function (NativeDate) {\n // Date.length === 7\n var DateShim = function Date(Y, M, D, h, m, s, ms) {\n var length = arguments.length;\n var date;\n if (this instanceof NativeDate) {\n var seconds = s;\n var millis = ms;\n if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {\n // work around a Safari 8/9 bug where it treats the seconds as signed\n var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;\n var sToShift = Math.floor(msToShift / 1e3);\n seconds += sToShift;\n millis -= sToShift * 1e3;\n }\n date = length === 1 && $String(Y) === Y // isString(Y)\n // We explicitly pass it through parse:\n ? new NativeDate(DateShim.parse(Y))\n // We have to manually make calls depending on argument\n // length here\n : length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis)\n : length >= 6 ? new NativeDate(Y, M, D, h, m, seconds)\n : length >= 5 ? new NativeDate(Y, M, D, h, m)\n : length >= 4 ? new NativeDate(Y, M, D, h)\n : length >= 3 ? new NativeDate(Y, M, D)\n : length >= 2 ? new NativeDate(Y, M)\n : length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y)\n : new NativeDate();\n } else {\n date = NativeDate.apply(this, arguments);\n }\n if (!isPrimitive(date)) {\n // Prevent mixups with unfixed Date object\n defineProperties(date, { constructor: DateShim }, true);\n }\n return date;\n };\n\n // 15.9.1.15 Date Time String Format.\n var isoDateExpression = new RegExp('^'\n + '(\\\\d{4}|[+-]\\\\d{6})' // four-digit year capture or sign + 6-digit extended year\n + '(?:-(\\\\d{2})' // optional month capture\n + '(?:-(\\\\d{2})' // optional day capture\n + '(?:' // capture hours:minutes:seconds.milliseconds\n + 'T(\\\\d{2})' // hours capture\n + ':(\\\\d{2})' // minutes capture\n + '(?:' // optional :seconds.milliseconds\n + ':(\\\\d{2})' // seconds capture\n + '(?:(\\\\.\\\\d{1,}))?' // milliseconds capture\n + ')?'\n + '(' // capture UTC offset component\n + 'Z|' // UTC capture\n + '(?:' // offset specifier +/-hours:minutes\n + '([-+])' // sign capture\n + '(\\\\d{2})' // hours offset capture\n + ':(\\\\d{2})' // minutes offset capture\n + ')'\n + ')?)?)?)?'\n + '$');\n\n var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n\n var dayFromMonth = function dayFromMonth(year, month) {\n var t = month > 1 ? 1 : 0;\n return (\n months[month]\n + Math.floor((year - 1969 + t) / 4)\n - Math.floor((year - 1901 + t) / 100)\n + Math.floor((year - 1601 + t) / 400)\n + (365 * (year - 1970))\n );\n };\n\n var toUTC = function toUTC(t) {\n var s = 0;\n var ms = t;\n if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {\n // work around a Safari 8/9 bug where it treats the seconds as signed\n var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;\n var sToShift = Math.floor(msToShift / 1e3);\n s += sToShift;\n ms -= sToShift * 1e3;\n }\n return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));\n };\n\n // Copy any custom methods a 3rd party library may have added\n for (var key in NativeDate) {\n if (owns(NativeDate, key)) {\n DateShim[key] = NativeDate[key];\n }\n }\n\n // Copy \"native\" methods explicitly; they may be non-enumerable\n defineProperties(DateShim, {\n now: NativeDate.now,\n UTC: NativeDate.UTC\n }, true);\n DateShim.prototype = NativeDate.prototype;\n defineProperties(DateShim.prototype, { constructor: DateShim }, true);\n\n // Upgrade Date.parse to handle simplified ISO 8601 strings\n var parseShim = function parse(string) {\n var match = isoDateExpression.exec(string);\n if (match) {\n // parse months, days, hours, minutes, seconds, and milliseconds\n // provide default values if necessary\n // parse the UTC offset component\n var year = $Number(match[1]),\n month = $Number(match[2] || 1) - 1,\n day = $Number(match[3] || 1) - 1,\n hour = $Number(match[4] || 0),\n minute = $Number(match[5] || 0),\n second = $Number(match[6] || 0),\n millisecond = Math.floor($Number(match[7] || 0) * 1000),\n // When time zone is missed, local offset should be used\n // (ES 5.1 bug)\n // see https://bugs.ecmascript.org/show_bug.cgi?id=112\n isLocalTime = Boolean(match[4] && !match[8]),\n signOffset = match[9] === '-' ? 1 : -1,\n hourOffset = $Number(match[10] || 0),\n minuteOffset = $Number(match[11] || 0),\n result;\n var hasMinutesOrSecondsOrMilliseconds = minute > 0 || second > 0 || millisecond > 0;\n if (\n hour < (hasMinutesOrSecondsOrMilliseconds ? 24 : 25)\n && minute < 60 && second < 60 && millisecond < 1000\n && month > -1 && month < 12 && hourOffset < 24\n && minuteOffset < 60 // detect invalid offsets\n && day > -1\n && day < (dayFromMonth(year, month + 1) - dayFromMonth(year, month))\n ) {\n result = (\n ((dayFromMonth(year, month) + day) * 24)\n + hour\n + (hourOffset * signOffset)\n ) * 60;\n result = ((\n ((result + minute + (minuteOffset * signOffset)) * 60)\n + second\n ) * 1000) + millisecond;\n if (isLocalTime) {\n result = toUTC(result);\n }\n if (-8.64e15 <= result && result <= 8.64e15) {\n return result;\n }\n }\n return NaN;\n }\n return NativeDate.parse.apply(this, arguments);\n };\n defineProperties(DateShim, { parse: parseShim });\n\n return DateShim;\n }(Date));\n /* global Date: false */\n }\n\n // ES5 15.9.4.4\n // http://es5.github.com/#x15.9.4.4\n if (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n }\n\n //\n // Number\n // ======\n //\n\n // ES5.1 15.7.4.5\n // http://es5.github.com/#x15.7.4.5\n var hasToFixedBugs = NumberPrototype.toFixed && (\n (0.00008).toFixed(3) !== '0.000'\n || (0.9).toFixed(0) !== '1'\n || (1.255).toFixed(2) !== '1.25'\n || (1000000000000000128).toFixed(0) !== '1000000000000000128'\n );\n\n var toFixedHelpers = {\n base: 1e7,\n size: 6,\n data: [0, 0, 0, 0, 0, 0],\n multiply: function multiply(n, c) {\n var i = -1;\n var c2 = c;\n while (++i < toFixedHelpers.size) {\n c2 += n * toFixedHelpers.data[i];\n toFixedHelpers.data[i] = c2 % toFixedHelpers.base;\n c2 = Math.floor(c2 / toFixedHelpers.base);\n }\n },\n divide: function divide(n) {\n var i = toFixedHelpers.size;\n var c = 0;\n while (--i >= 0) {\n c += toFixedHelpers.data[i];\n toFixedHelpers.data[i] = Math.floor(c / n);\n c = (c % n) * toFixedHelpers.base;\n }\n },\n numToString: function numToString() {\n var i = toFixedHelpers.size;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {\n var t = $String(toFixedHelpers.data[i]);\n if (s === '') {\n s = t;\n } else {\n s += strSlice('0000000', 0, 7 - t.length) + t;\n }\n }\n }\n return s;\n },\n pow: function pow(x, n, acc) {\n return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));\n },\n log: function log(x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n }\n return n;\n }\n };\n\n var toFixedShim = function toFixed(fractionDigits) {\n var f, x, s, m, e, z, j, k;\n\n // Test for NaN and round fractionDigits down\n f = $Number(fractionDigits);\n f = isActualNaN(f) ? 0 : Math.floor(f);\n\n if (f < 0 || f > 20) {\n throw new RangeError('Number.toFixed called with invalid number of decimals');\n }\n\n x = $Number(this);\n\n if (isActualNaN(x)) {\n return 'NaN';\n }\n\n // If it is too big or small, return the string value of the number\n if (x <= -1e21 || x >= 1e21) {\n return $String(x);\n }\n\n s = '';\n\n if (x < 0) {\n s = '-';\n x = -x;\n }\n\n m = '0';\n\n if (x > 1e-21) {\n // 1e-21 < x < 1e21\n // -70 < log2(x) < 70\n e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;\n z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));\n z *= 0x10000000000000; // Math.pow(2, 52);\n e = 52 - e;\n\n // -18 < e < 122\n // x = z / 2 ^ e\n if (e > 0) {\n toFixedHelpers.multiply(0, z);\n j = f;\n\n while (j >= 7) {\n toFixedHelpers.multiply(1e7, 0);\n j -= 7;\n }\n\n toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);\n j = e - 1;\n\n while (j >= 23) {\n toFixedHelpers.divide(1 << 23);\n j -= 23;\n }\n\n toFixedHelpers.divide(1 << j);\n toFixedHelpers.multiply(1, 1);\n toFixedHelpers.divide(2);\n m = toFixedHelpers.numToString();\n } else {\n toFixedHelpers.multiply(0, z);\n toFixedHelpers.multiply(1 << (-e), 0);\n m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);\n }\n }\n\n if (f > 0) {\n k = m.length;\n\n if (k <= f) {\n m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;\n } else {\n m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);\n }\n } else {\n m = s + m;\n }\n\n return m;\n };\n defineProperties(NumberPrototype, { toFixed: toFixedShim }, hasToFixedBugs);\n\n var hasToPrecisionUndefinedBug = (function () {\n try {\n return 1.0.toPrecision(undefined) === '1';\n } catch (e) {\n return true;\n }\n }());\n var originalToPrecision = NumberPrototype.toPrecision;\n defineProperties(NumberPrototype, {\n toPrecision: function toPrecision(precision) {\n return typeof precision === 'undefined' ? originalToPrecision.call(this) : originalToPrecision.call(this, precision);\n }\n }, hasToPrecisionUndefinedBug);\n\n //\n // String\n // ======\n //\n\n // ES5 15.5.4.14\n // http://es5.github.com/#x15.5.4.14\n\n // [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]\n // Many browsers do not split properly with regular expressions or they\n // do not perform the split correctly under obscure conditions.\n // See http://blog.stevenlevithan.com/archives/cross-browser-split\n // I've tested in many browsers and this seems to cover the deviant ones:\n // 'ab'.split(/(?:ab)*/) should be [\"\", \"\"], not [\"\"]\n // '.'.split(/(.?)(.?)/) should be [\"\", \".\", \"\", \"\"], not [\"\", \"\"]\n // 'tesst'.split(/(s)*/) should be [\"t\", undefined, \"e\", \"s\", \"t\"], not\n // [undefined, \"t\", undefined, \"e\", ...]\n // ''.split(/.?/) should be [], not [\"\"]\n // '.'.split(/()()/) should be [\".\"], not [\"\", \"\", \".\"]\n\n if (\n 'ab'.split(/(?:ab)*/).length !== 2\n || '.'.split(/(.?)(.?)/).length !== 4\n || 'tesst'.split(/(s)*/)[1] === 't'\n || 'test'.split(/(?:)/, -1).length !== 4\n || ''.split(/.?/).length\n || '.'.split(/()()/).length > 1\n ) {\n (function () {\n var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group\n var maxSafe32BitInt = Math.pow(2, 32) - 1;\n\n StringPrototype.split = function (separator, limit) {\n var string = String(this);\n if (typeof separator === 'undefined' && limit === 0) {\n return [];\n }\n\n // If `separator` is not a regex, use native split\n if (!isRegex(separator)) {\n return strSplit(this, separator, limit);\n }\n\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '')\n + (separator.multiline ? 'm' : '')\n + (separator.unicode ? 'u' : '') // in ES6\n + (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6\n lastLastIndex = 0,\n // Make `global` and avoid `lastIndex` issues by working with a copy\n separator2, match, lastIndex, lastLength;\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n if (!compliantExecNpcg) {\n // Doesn't need flags gy, but they don't hurt\n separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n }\n /* Values for `limit`, per the spec:\n * If undefined: 4294967295 // maxSafe32BitInt\n * If 0, Infinity, or NaN: 0\n * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n * If other: Type-convert, then use the above rules\n */\n var splitLimit = typeof limit === 'undefined' ? maxSafe32BitInt : ES.ToUint32(limit);\n match = separatorCopy.exec(string);\n while (match) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0].length;\n if (lastIndex > lastLastIndex) {\n pushCall(output, strSlice(string, lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for\n // nonparticipating capturing groups\n if (!compliantExecNpcg && match.length > 1) {\n /* eslint-disable no-loop-func */\n match[0].replace(separator2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (typeof arguments[i] === 'undefined') {\n match[i] = void 0;\n }\n }\n });\n /* eslint-enable no-loop-func */\n }\n if (match.length > 1 && match.index < string.length) {\n array_push.apply(output, arraySlice(match, 1));\n }\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= splitLimit) {\n break;\n }\n }\n if (separatorCopy.lastIndex === match.index) {\n separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n match = separatorCopy.exec(string);\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) {\n pushCall(output, '');\n }\n } else {\n pushCall(output, strSlice(string, lastLastIndex));\n }\n return output.length > splitLimit ? arraySlice(output, 0, splitLimit) : output;\n };\n }());\n\n // [bugfix, chrome]\n // If separator is undefined, then the result array contains just one String,\n // which is the this value (converted to a String). If limit is not undefined,\n // then the output array is truncated so that it contains no more than limit\n // elements.\n // \"0\".split(undefined, 0) -> []\n } else if ('0'.split(void 0, 0).length) {\n StringPrototype.split = function split(separator, limit) {\n if (typeof separator === 'undefined' && limit === 0) {\n return [];\n }\n return strSplit(this, separator, limit);\n };\n }\n\n var str_replace = StringPrototype.replace;\n var replaceReportsGroupsCorrectly = (function () {\n var groups = [];\n 'x'.replace(/x(.)?/g, function (match, group) {\n pushCall(groups, group);\n });\n return groups.length === 1 && typeof groups[0] === 'undefined';\n }());\n\n if (!replaceReportsGroupsCorrectly) {\n StringPrototype.replace = function replace(searchValue, replaceValue) {\n var isFn = isCallable(replaceValue);\n var hasCapturingGroups = isRegex(searchValue) && (/\\)[*?]/).test(searchValue.source);\n if (!isFn || !hasCapturingGroups) {\n return str_replace.call(this, searchValue, replaceValue);\n } else {\n var wrappedReplaceValue = function (match) {\n var length = arguments.length;\n var originalLastIndex = searchValue.lastIndex;\n searchValue.lastIndex = 0;\n var args = searchValue.exec(match) || [];\n searchValue.lastIndex = originalLastIndex;\n pushCall(args, arguments[length - 2], arguments[length - 1]);\n return replaceValue.apply(this, args);\n };\n return str_replace.call(this, searchValue, wrappedReplaceValue);\n }\n };\n }\n\n // ECMA-262, 3rd B.2.3\n // Not an ECMAScript standard, although ECMAScript 3rd Edition has a\n // non-normative section suggesting uniform semantics and it should be\n // normalized across all browsers\n // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE\n var string_substr = StringPrototype.substr;\n var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';\n defineProperties(StringPrototype, {\n substr: function substr(start, length) {\n var normalizedStart = start;\n if (start < 0) {\n normalizedStart = max(this.length + start, 0);\n }\n return string_substr.call(this, normalizedStart, length);\n }\n }, hasNegativeSubstrBug);\n\n // ES5 15.5.4.20\n // whitespace from: http://es5.github.io/#x15.5.4.20\n var ws = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003'\n + '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028'\n + '\\u2029\\uFEFF';\n var zeroWidth = '\\u200b';\n var wsRegexChars = '[' + ws + ']';\n var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');\n var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');\n var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());\n defineProperties(StringPrototype, {\n // http://blog.stevenlevithan.com/archives/faster-trim-javascript\n // http://perfectionkills.com/whitespace-deviations/\n trim: function trim() {\n if (typeof this === 'undefined' || this === null) {\n throw new TypeError(\"can't convert \" + this + ' to object');\n }\n return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');\n }\n }, hasTrimWhitespaceBug);\n var trim = call.bind(String.prototype.trim);\n\n var hasLastIndexBug = StringPrototype.lastIndexOf && 'abcあい'.lastIndexOf('あい', 2) !== -1;\n defineProperties(StringPrototype, {\n lastIndexOf: function lastIndexOf(searchString) {\n if (typeof this === 'undefined' || this === null) {\n throw new TypeError(\"can't convert \" + this + ' to object');\n }\n var S = $String(this);\n var searchStr = $String(searchString);\n var numPos = arguments.length > 1 ? $Number(arguments[1]) : NaN;\n var pos = isActualNaN(numPos) ? Infinity : ES.ToInteger(numPos);\n var start = min(max(pos, 0), S.length);\n var searchLen = searchStr.length;\n var k = start + searchLen;\n while (k > 0) {\n k = max(0, k - searchLen);\n var index = strIndexOf(strSlice(S, k, start + searchLen), searchStr);\n if (index !== -1) {\n return k + index;\n }\n }\n return -1;\n }\n }, hasLastIndexBug);\n\n var originalLastIndexOf = StringPrototype.lastIndexOf;\n defineProperties(StringPrototype, {\n lastIndexOf: function lastIndexOf(searchString) {\n return originalLastIndexOf.apply(this, arguments);\n }\n }, StringPrototype.lastIndexOf.length !== 1);\n\n // ES-5 15.1.2.2\n // eslint-disable-next-line radix\n if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {\n /* global parseInt: true */\n parseInt = (function (origParseInt) {\n var hexRegex = /^[-+]?0[xX]/;\n return function parseInt(str, radix) {\n if (typeof str === 'symbol') {\n // handle Symbols in node 8.3/8.4\n // eslint-disable-next-line no-implicit-coercion, no-unused-expressions\n '' + str; // jscs:ignore disallowImplicitTypeConversion\n }\n\n var string = trim(String(str));\n var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);\n return origParseInt(string, defaultedRadix);\n };\n }(parseInt));\n }\n\n // https://es5.github.io/#x15.1.2.3\n if (1 / parseFloat('-0') !== -Infinity) {\n /* global parseFloat: true */\n parseFloat = (function (origParseFloat) {\n return function parseFloat(string) {\n var inputString = trim(String(string));\n var result = origParseFloat(inputString);\n return result === 0 && strSlice(inputString, 0, 1) === '-' ? -0 : result;\n };\n }(parseFloat));\n }\n\n if (String(new RangeError('test')) !== 'RangeError: test') {\n var errorToStringShim = function toString() {\n if (typeof this === 'undefined' || this === null) {\n throw new TypeError(\"can't convert \" + this + ' to object');\n }\n var name = this.name;\n if (typeof name === 'undefined') {\n name = 'Error';\n } else if (typeof name !== 'string') {\n name = $String(name);\n }\n var msg = this.message;\n if (typeof msg === 'undefined') {\n msg = '';\n } else if (typeof msg !== 'string') {\n msg = $String(msg);\n }\n if (!name) {\n return msg;\n }\n if (!msg) {\n return name;\n }\n return name + ': ' + msg;\n };\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\n Error.prototype.toString = errorToStringShim;\n }\n\n if (supportsDescriptors) {\n var ensureNonEnumerable = function (obj, prop) {\n if (isEnum(obj, prop)) {\n var desc = Object.getOwnPropertyDescriptor(obj, prop);\n if (desc.configurable) {\n desc.enumerable = false;\n Object.defineProperty(obj, prop, desc);\n }\n }\n };\n ensureNonEnumerable(Error.prototype, 'message');\n if (Error.prototype.message !== '') {\n Error.prototype.message = '';\n }\n ensureNonEnumerable(Error.prototype, 'name');\n }\n\n if (String(/a/mig) !== '/a/gim') {\n var regexToString = function toString() {\n var str = '/' + this.source + '/';\n if (this.global) {\n str += 'g';\n }\n if (this.ignoreCase) {\n str += 'i';\n }\n if (this.multiline) {\n str += 'm';\n }\n return str;\n };\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\n RegExp.prototype.toString = regexToString;\n }\n}));\n\n},{}],7:[function(require,module,exports){\n/*! populate.js v1.0.2 by @dannyvankooten | MIT license */\n;(function(root) {\n\n\t/**\n\t * Populate form fields from a JSON object.\n\t *\n\t * @param form object The form element containing your input fields.\n\t * @param data array JSON data to populate the fields with.\n\t * @param basename string Optional basename which is added to `name` attributes\n\t */\n\tvar populate = function( form, data, basename) {\n\t\tfor(var key in data) {\n\t\t\tvar name = key;\n\t\t\tvar value = data[key];\n\n if ('undefined' === typeof value) {\n value = '';\n }\n\n if (null === value) {\n value = '';\n }\n\n\t\t\t// handle array name attributes\n\t\t\tif(typeof(basename) !== \"undefined\") {\n\t\t\t\tname = basename + \"[\" + key + \"]\";\n\t\t\t}\n\n\t\t\tif(value.constructor === Array) {\n\t\t\t\tname += '[]';\n\t\t\t} else if(typeof value == \"object\") {\n\t\t\t\tpopulate( form, value, name);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// only proceed if element is set\n\t\t\tvar element = form.elements.namedItem( name );\n\t\t\tif( ! element ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar type = element.type || element[0].type;\n\n\t\t\tswitch(type ) {\n\t\t\t\tdefault:\n\t\t\t\t\telement.value = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'radio':\n\t\t\t\tcase 'checkbox':\n\t\t\t\t\tfor( var j=0; j < element.length; j++ ) {\n\t\t\t\t\t\telement[j].checked = ( value.indexOf(element[j].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select-multiple':\n\t\t\t\t\tvar values = value.constructor == Array ? value : [value];\n\n\t\t\t\t\tfor(var k = 0; k < element.options.length; k++) {\n\t\t\t\t\t\telement.options[k].selected |= (values.indexOf(element.options[k].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select':\n\t\t\t\tcase 'select-one':\n\t\t\t\t\telement.value = value.toString() || value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n \t\t\t\telement.value = new Date(value).toISOString().split('T')[0];\t\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t// Play nice with AMD, CommonJS or a plain global object.\n\tif ( typeof define == 'function' && typeof define.amd == 'object' && define.amd ) {\n\t\tdefine(function() {\n\t\t\treturn populate;\n\t\t});\n\t}\telse if ( typeof module !== 'undefined' && module.exports ) {\n\t\tmodule.exports = populate;\n\t} else {\n\t\troot.populate = populate;\n\t}\n\n}(this));\n\n},{}],8:[function(require,module,exports){\n/*!\n * EventEmitter v5.2.4 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function (exports) {\n 'use strict';\n\n /**\n * Class for managing events.\n * Can be extended to provide event functionality in other classes.\n *\n * @class EventEmitter Manages event registering and emitting.\n */\n function EventEmitter() {}\n\n // Shortcuts to improve speed and size\n var proto = EventEmitter.prototype;\n var originalGlobalValue = exports.EventEmitter;\n\n /**\n * Finds the index of the listener for the event in its storage array.\n *\n * @param {Function[]} listeners Array of listeners to search through.\n * @param {Function} listener Method to look for.\n * @return {Number} Index of the specified listener, -1 if not found\n * @api private\n */\n function indexOfListener(listeners, listener) {\n var i = listeners.length;\n while (i--) {\n if (listeners[i].listener === listener) {\n return i;\n }\n }\n\n return -1;\n }\n\n /**\n * Alias a method while keeping the context correct, to allow for overwriting of target method.\n *\n * @param {String} name The name of the target method.\n * @return {Function} The aliased method\n * @api private\n */\n function alias(name) {\n return function aliasClosure() {\n return this[name].apply(this, arguments);\n };\n }\n\n /**\n * Returns the listener array for the specified event.\n * Will initialise the event object and listener arrays if required.\n * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n * Each property in the object response is an array of listener functions.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Function[]|Object} All listener functions for the event.\n */\n proto.getListeners = function getListeners(evt) {\n var events = this._getEvents();\n var response;\n var key;\n\n // Return a concatenated array of all matching events if\n // the selector is a regular expression.\n if (evt instanceof RegExp) {\n response = {};\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n response[key] = events[key];\n }\n }\n }\n else {\n response = events[evt] || (events[evt] = []);\n }\n\n return response;\n };\n\n /**\n * Takes a list of listener objects and flattens it into a list of listener functions.\n *\n * @param {Object[]} listeners Raw listener objects.\n * @return {Function[]} Just the listener functions.\n */\n proto.flattenListeners = function flattenListeners(listeners) {\n var flatListeners = [];\n var i;\n\n for (i = 0; i < listeners.length; i += 1) {\n flatListeners.push(listeners[i].listener);\n }\n\n return flatListeners;\n };\n\n /**\n * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Object} All listener functions for an event in an object.\n */\n proto.getListenersAsObject = function getListenersAsObject(evt) {\n var listeners = this.getListeners(evt);\n var response;\n\n if (listeners instanceof Array) {\n response = {};\n response[evt] = listeners;\n }\n\n return response || listeners;\n };\n\n function isValidListener (listener) {\n if (typeof listener === 'function' || listener instanceof RegExp) {\n return true\n } else if (listener && typeof listener === 'object') {\n return isValidListener(listener.listener)\n } else {\n return false\n }\n }\n\n /**\n * Adds a listener function to the specified event.\n * The listener will not be added if it is a duplicate.\n * If the listener returns true then it will be removed after it is called.\n * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListener = function addListener(evt, listener) {\n if (!isValidListener(listener)) {\n throw new TypeError('listener must be a function');\n }\n\n var listeners = this.getListenersAsObject(evt);\n var listenerIsWrapped = typeof listener === 'object';\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n listeners[key].push(listenerIsWrapped ? listener : {\n listener: listener,\n once: false\n });\n }\n }\n\n return this;\n };\n\n /**\n * Alias of addListener\n */\n proto.on = alias('addListener');\n\n /**\n * Semi-alias of addListener. It will add a listener that will be\n * automatically removed after its first execution.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addOnceListener = function addOnceListener(evt, listener) {\n return this.addListener(evt, {\n listener: listener,\n once: true\n });\n };\n\n /**\n * Alias of addOnceListener.\n */\n proto.once = alias('addOnceListener');\n\n /**\n * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n * You need to tell it what event names should be matched by a regex.\n *\n * @param {String} evt Name of the event to create.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvent = function defineEvent(evt) {\n this.getListeners(evt);\n return this;\n };\n\n /**\n * Uses defineEvent to define multiple events.\n *\n * @param {String[]} evts An array of event names to define.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvents = function defineEvents(evts) {\n for (var i = 0; i < evts.length; i += 1) {\n this.defineEvent(evts[i]);\n }\n return this;\n };\n\n /**\n * Removes a listener function from the specified event.\n * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to remove the listener from.\n * @param {Function} listener Method to remove from the event.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListener = function removeListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var index;\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key)) {\n index = indexOfListener(listeners[key], listener);\n\n if (index !== -1) {\n listeners[key].splice(index, 1);\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of removeListener\n */\n proto.off = alias('removeListener');\n\n /**\n * Adds listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n * You can also pass it a regular expression to add the array of listeners to all events that match it.\n * Yeah, this function does quite a bit. That's probably a bad thing.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListeners = function addListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(false, evt, listeners);\n };\n\n /**\n * Removes listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be removed.\n * You can also pass it a regular expression to remove the listeners from all events that match it.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListeners = function removeListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(true, evt, listeners);\n };\n\n /**\n * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n * The first argument will determine if the listeners are removed (true) or added (false).\n * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added/removed.\n * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n *\n * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n var i;\n var value;\n var single = remove ? this.removeListener : this.addListener;\n var multiple = remove ? this.removeListeners : this.addListeners;\n\n // If evt is an object then pass each of its properties to this method\n if (typeof evt === 'object' && !(evt instanceof RegExp)) {\n for (i in evt) {\n if (evt.hasOwnProperty(i) && (value = evt[i])) {\n // Pass the single listener straight through to the singular method\n if (typeof value === 'function') {\n single.call(this, i, value);\n }\n else {\n // Otherwise pass back to the multiple function\n multiple.call(this, i, value);\n }\n }\n }\n }\n else {\n // So evt must be a string\n // And listeners must be an array of listeners\n // Loop over it and pass each one to the multiple method\n i = listeners.length;\n while (i--) {\n single.call(this, evt, listeners[i]);\n }\n }\n\n return this;\n };\n\n /**\n * Removes all listeners from a specified event.\n * If you do not specify an event then all listeners will be removed.\n * That means every event will be emptied.\n * You can also pass a regex to remove all events that match it.\n *\n * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeEvent = function removeEvent(evt) {\n var type = typeof evt;\n var events = this._getEvents();\n var key;\n\n // Remove different things depending on the state of evt\n if (type === 'string') {\n // Remove all listeners for the specified event\n delete events[evt];\n }\n else if (evt instanceof RegExp) {\n // Remove all events matching the regex.\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n delete events[key];\n }\n }\n }\n else {\n // Remove all listeners in all events\n delete this._events;\n }\n\n return this;\n };\n\n /**\n * Alias of removeEvent.\n *\n * Added to mirror the node API.\n */\n proto.removeAllListeners = alias('removeEvent');\n\n /**\n * Emits an event of your choice.\n * When emitted, every listener attached to that event will be executed.\n * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n * So they will not arrive within the array on the other side, they will be separate.\n * You can also pass a regular expression to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {Array} [args] Optional array of arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emitEvent = function emitEvent(evt, args) {\n var listenersMap = this.getListenersAsObject(evt);\n var listeners;\n var listener;\n var i;\n var key;\n var response;\n\n for (key in listenersMap) {\n if (listenersMap.hasOwnProperty(key)) {\n listeners = listenersMap[key].slice(0);\n\n for (i = 0; i < listeners.length; i++) {\n // If the listener returns true then it shall be removed from the event\n // The function is executed either with a basic call or an apply if there is an args array\n listener = listeners[i];\n\n if (listener.once === true) {\n this.removeListener(evt, listener.listener);\n }\n\n response = listener.listener.apply(this, args || []);\n\n if (response === this._getOnceReturnValue()) {\n this.removeListener(evt, listener.listener);\n }\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of emitEvent\n */\n proto.trigger = alias('emitEvent');\n\n /**\n * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {...*} Optional additional arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emit = function emit(evt) {\n var args = Array.prototype.slice.call(arguments, 1);\n return this.emitEvent(evt, args);\n };\n\n /**\n * Sets the current value to check against when executing listeners. If a\n * listeners return value matches the one set here then it will be removed\n * after execution. This value defaults to true.\n *\n * @param {*} value The new value to check for when executing listeners.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.setOnceReturnValue = function setOnceReturnValue(value) {\n this._onceReturnValue = value;\n return this;\n };\n\n /**\n * Fetches the current value to check against when executing listeners. If\n * the listeners return value matches this one then it should be removed\n * automatically. It will return true by default.\n *\n * @return {*|Boolean} The current value to check for or the default, true.\n * @api private\n */\n proto._getOnceReturnValue = function _getOnceReturnValue() {\n if (this.hasOwnProperty('_onceReturnValue')) {\n return this._onceReturnValue;\n }\n else {\n return true;\n }\n };\n\n /**\n * Fetches the events object and creates one if required.\n *\n * @return {Object} The events storage object.\n * @api private\n */\n proto._getEvents = function _getEvents() {\n return this._events || (this._events = {});\n };\n\n /**\n * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n *\n * @return {Function} Non conflicting EventEmitter class.\n */\n EventEmitter.noConflict = function noConflict() {\n exports.EventEmitter = originalGlobalValue;\n return EventEmitter;\n };\n\n // Expose the class either via AMD, CommonJS or the global object\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return EventEmitter;\n });\n }\n else if (typeof module === 'object' && module.exports){\n module.exports = EventEmitter;\n }\n else {\n exports.EventEmitter = EventEmitter;\n }\n}(this || {}));\n\n},{}]},{},[5]);\n; })();"]}
\ No newline at end of file
+{"version":3,"sources":["public.js"],"names":["define","undefined","r","e","n","t","o","i","f","c","u","a","Error","code","p","exports","call","length","1","require","module","toggleElement","el","evt","show","getAttribute","conditions","split","fieldName","expectedValues","values","form","inputs","querySelectorAll","input","type","toLowerCase","checked","tagName","target","dataset","value","push","getFieldValues","element","bubbleElement","parentElement","findForm","conditionMet","indexOf","console","log","style","display","forEach","required","removeAttribute","setAttribute","evaluate","elements","document","handleInputEvent","className","Object","defineProperty","default","init","addEventListener","window","2","getButtonText","button","innerHTML","setButtonText","text","Loader","formElement","this","querySelector","loadingInterval","character","originalButton","cloneNode","prototype","setCharacter","start","loadingText","styles","getComputedStyle","width","setInterval","tick","bind","opacity","loadingChar","stop","clearInterval","3","_slicedToArray","arr","Array","isArray","Symbol","iterator","_arr","_n","_d","_e","_s","_i","next","done","err","sliceIterator","TypeError","populate","forms","filter","data","q","params","URLSearchParams","obj","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","entries","_step$value","name","substr","arrName","return","parseUrlParams","location","search","populate.js","4","CustomEvent","event","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","5","_formPrefiller2","_interopRequireDefault","_conditionality2","__esModule","vars","hf_js_vars","ajax_url","href","events","submitForm","formEl","messageElements","parentNode","removeChild","emitEvent","formData","FormData","append","loader","request","XMLHttpRequest","onreadystatechange","readyState","response","status","JSON","parse","responseText","error","message","txtElement","createElement","insertBefore","lastElementChild","nextElementSibling","hide_form","redirect_url","reset","open","setRequestHeader","send","eventName","dispatchEvent","emit","preventDefault","html_forms","on","submit","./conditionality.js","./form-loading-indicator.js","./form-prefiller.js","./polyfills/custom-event.js","es5-shim","wolfy87-eventemitter","6","root","factory","amd","returnExports","isRegex","isString","$Array","ArrayPrototype","$Object","ObjectPrototype","$Function","Function","FunctionPrototype","$String","String","StringPrototype","$Number","Number","NumberPrototype","array_slice","slice","array_splice","splice","array_push","array_unshift","unshift","array_concat","concat","array_join","join","apply","max","Math","min","to_string","toString","hasToStringTag","toStringTag","fnToStr","constructorRegex","isES6ClassFn","spaceStripped","replace","test","isCallable","tryFunctionObject","strClass","regexExec","RegExp","exec","tryRegexExec","strValue","valueOf","tryStringObject","has","supportsDescriptors","_","enumerable","x","defineProperties","hasOwnProperty","object","method","forceAssign","configurable","writable","map","isPrimitive","isActualNaN","isNaN","ES","num","floor","abs","val","toStr","Empty","that","bound","args","arguments","boundLength","boundArgs","result","owns","arraySlice","arraySliceApply","documentElement","childNodes","origArraySlice","origArraySliceApply","strSlice","strSplit","strIndexOf","pushCall","isEnum","propertyIsEnumerable","arraySort","sort","hasUnshiftReturnValueBug","boxedString","splitString","properlyBoxesContext","properlyBoxesNonStrict","properlyBoxesStrict","threwException","__","context","callbackfn","T","self","every","some","reduceCoercesToObject","reduce","___","list","reduceRightCoercesToObject","reduceRight","hasFirefox2IndexOfBug","searchElement","hasFirefox2LastIndexOfBug","lastIndexOf","spliceNoopReturnsEmptyArray","deleteCount","spliceWorksWithEmptyObject","spliceWorksWithLargeSparseArrays","spliceWorksWithSmallSparseArrays","from","O","A","len","relativeStart","actualStart","actualDeleteCount","k","to","items","itemCount","maxK","minK","hasStringJoinBug","originalJoin","separator","sep","hasJoinUndefinedBug","pushShim","item","pushIsNotGeneric","pushUndefinedIsWeird","end","sortIgnoresNonFunctions","e2","sortThrowsOnRegex","sortIgnoresUndefined","compareFn","hasDontEnumBug","hasProtoEnumBug","hasStringEnumBug","equalsConstructorPrototype","ctor","constructor","excludedKeys","$window","$console","$parent","$self","$frame","$frames","$frameElement","$webkitIndexedDB","$webkitStorageInfo","$external","$width","$height","$top","$localStorage","hasAutomationEqualityBug","dontEnums","dontEnumsLength","isStandardArguments","isArguments","callee","keys","isFn","isArgs","isObject","isStr","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","j","dontEnum","keysWorksWithArguments","keysHasArgumentsLengthBug","argKeys","originalKeys","hasToDateStringFormatBug","hasToStringFormatBug","hasNegativeMonthYearBug","Date","getUTCMonth","aNegativeTestDate","aPositiveTestDate","hasToUTCStringFormatBug","toUTCString","getTimezoneOffset","toDateString","originalGetFullYear","getFullYear","originalGetMonth","getMonth","originalGetDate","getDate","originalGetUTCFullYear","getUTCFullYear","originalGetUTCMonth","originalGetUTCDate","getUTCDate","originalGetUTCDay","getUTCDay","originalGetUTCHours","getUTCHours","originalGetUTCMinutes","getUTCMinutes","originalGetUTCSeconds","getUTCSeconds","originalGetUTCMilliseconds","getUTCMilliseconds","dayName","monthName","daysInMonth","month","year","date","day","hour","minute","second","getDay","getHours","getMinutes","getSeconds","timezoneOffset","hoursOffset","minutesOffset","negativeDate","negativeYearString","hasNegativeDateBug","toISOString","hasSafari51DateBug","getTime","isFinite","RangeError","toJSON","NaN","key","tv","toISO","supportsExtendedYears","acceptsInvalidDates","maxSafeUnsigned32Bit","pow","hasSafariSignedIntBug","NativeDate","DateShim","Y","M","D","h","m","s","ms","seconds","millis","msToShift","sToShift","isoDateExpression","months","dayFromMonth","now","UTC","string","match","millisecond","isLocalTime","Boolean","signOffset","hourOffset","minuteOffset","toUTC","hasToFixedBugs","toFixed","toFixedHelpers","base","size","multiply","c2","divide","numToString","acc","x2","fractionDigits","z","compliantExecNpcg","maxSafe32BitInt","hasToPrecisionUndefinedBug","toPrecision","originalToPrecision","precision","limit","separator2","lastIndex","lastLength","output","flags","ignoreCase","multiline","unicode","sticky","lastLastIndex","separatorCopy","source","splitLimit","index","groups","str_replace","group","searchValue","replaceValue","hasCapturingGroups","originalLastIndex","string_substr","hasNegativeSubstrBug","normalizedStart","ws","wsRegexChars","trimBeginRegexp","trimEndRegexp","hasTrimWhitespaceBug","trim","hasLastIndexBug","searchString","S","searchStr","numPos","pos","Infinity","searchLen","origParseInt","hexRegex","origParseFloat","originalLastIndexOf","parseInt","str","radix","defaultedRadix","parseFloat","inputString","msg","ensureNonEnumerable","prop","desc","getOwnPropertyDescriptor","global","7","basename","namedItem","options","selected","8","EventEmitter","proto","originalGlobalValue","indexOfListener","listeners","listener","alias","getListeners","_getEvents","flattenListeners","flatListeners","getListenersAsObject","addListener","isValidListener","listenerIsWrapped","once","addOnceListener","defineEvent","defineEvents","evts","removeListener","off","addListeners","manipulateListeners","removeListeners","remove","single","multiple","removeEvent","_events","removeAllListeners","listenersMap","_getOnceReturnValue","trigger","setOnceReturnValue","_onceReturnValue","noConflict"],"mappings":"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","file":"public.min.js","sourcesContent":["(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction getFieldValues(form, fieldName, evt) {\n var values = [];\n var inputs = form.querySelectorAll('input[name=\"' + fieldName + '\"], select[name=\"' + fieldName + '\"], textarea[name=\"' + fieldName + '\"], button[name=\"' + fieldName + '\"]');\n\n for (var i = 0; i < inputs.length; i++) {\n var input = inputs[i];\n var type = input.getAttribute(\"type\").toLowerCase();\n\n if ((type === \"radio\" || type === \"checkbox\") && !input.checked) {\n continue;\n }\n\n // ignore buttons which are not clicked (in case there's more than one button with same name)\n if (type === 'button' || type === 'submit' || input.tagName === 'BUTTON') {\n if ((!evt || evt.target !== input) && form.dataset[fieldName] !== input.value) {\n continue;\n }\n\n form.dataset[fieldName] = input.value;\n }\n\n values.push(input.value);\n }\n\n // default to an empty string\n // can be used to show or hide an element when a field is empty or has not been set \n // Usage: data-show-if=\"FIELDNAME:\"\n if (values.length == 0) {\n values.push(\"\");\n }\n\n return values;\n}\n\nfunction findForm(element) {\n var bubbleElement = element;\n\n while (bubbleElement.parentElement) {\n bubbleElement = bubbleElement.parentElement;\n\n if (bubbleElement.tagName === 'FORM') {\n return bubbleElement;\n }\n }\n\n return null;\n}\n\nfunction toggleElement(el, evt) {\n var show = !!el.getAttribute('data-show-if');\n var conditions = show ? el.getAttribute('data-show-if').split(':') : el.getAttribute('data-hide-if').split(':');\n var fieldName = conditions[0];\n var expectedValues = (conditions.length > 1 ? conditions[1] : \"*\").split('|');\n var form = findForm(el);\n var values = getFieldValues(form, fieldName, evt);\n\n // determine whether condition is met\n var conditionMet = false;\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n\n // condition is met when value is in array of expected values OR expected values contains a wildcard and value is not empty\n conditionMet = expectedValues.indexOf(value) > -1 || expectedValues.indexOf('*') > -1 && value.length > 0;\n\n if (conditionMet) {\n break;\n }\n }\n\n console.log(\"Expected values: \", expectedValues);\n console.log(\"Actual values: \", values);\n console.log(\"Condition met: \", conditionMet);\n\n // toggle element display\n if (show) {\n el.style.display = conditionMet ? '' : 'none';\n } else {\n el.style.display = conditionMet ? 'none' : '';\n }\n\n // find all inputs inside this element and toggle [required] attr (to prevent HTML5 validation on hidden elements)\n var inputs = el.querySelectorAll('input, select, textarea');\n [].forEach.call(inputs, function (el) {\n if ((conditionMet || show) && el.getAttribute('data-was-required')) {\n el.required = true;\n el.removeAttribute('data-was-required');\n }\n\n if ((!conditionMet || !show) && el.required) {\n el.setAttribute('data-was-required', \"true\");\n el.required = false;\n }\n });\n}\n\n// evaluate conditional elements globally\nfunction evaluate() {\n var elements = document.querySelectorAll('.hf-form [data-show-if], .hf-form [data-hide-if]');\n [].forEach.call(elements, toggleElement);\n}\n\n// re-evaluate conditional elements for change events on forms\nfunction handleInputEvent(evt) {\n if (!evt.target || !evt.target.form || evt.target.form.className.indexOf('hf-form') < 0) {\n return;\n }\n\n var form = evt.target.form;\n var elements = form.querySelectorAll('[data-show-if], [data-hide-if]');\n [].forEach.call(elements, function (el) {\n return toggleElement(el, evt);\n });\n}\n\nexports.default = {\n 'init': function init() {\n document.addEventListener('click', handleInputEvent, true);\n document.addEventListener('keyup', handleInputEvent, true);\n document.addEventListener('change', handleInputEvent, true);\n document.addEventListener('hf-refresh', evaluate, true);\n window.addEventListener('load', evaluate);\n evaluate();\n }\n};\n\n},{}],2:[function(require,module,exports){\n'use strict';\n\nfunction getButtonText(button) {\n return button.innerHTML ? button.innerHTML : button.value;\n}\n\nfunction setButtonText(button, text) {\n button.innerHTML ? button.innerHTML = text : button.value = text;\n}\n\nfunction Loader(formElement) {\n this.form = formElement;\n this.button = formElement.querySelector('input[type=\"submit\"], button[type=\"submit\"]');\n this.loadingInterval = 0;\n this.character = '\\xB7';\n\n if (this.button) {\n this.originalButton = this.button.cloneNode(true);\n }\n}\n\nLoader.prototype.setCharacter = function (c) {\n this.character = c;\n};\n\nLoader.prototype.start = function () {\n if (this.button) {\n // loading text\n var loadingText = this.button.getAttribute('data-loading-text');\n if (loadingText) {\n setButtonText(this.button, loadingText);\n return;\n }\n\n // Show AJAX loader\n var styles = window.getComputedStyle(this.button);\n this.button.style.width = styles.width;\n setButtonText(this.button, this.character);\n this.loadingInterval = window.setInterval(this.tick.bind(this), 500);\n } else {\n this.form.style.opacity = '0.5';\n }\n};\n\nLoader.prototype.tick = function () {\n // count chars, start over at 5\n var text = getButtonText(this.button);\n var loadingChar = this.character;\n setButtonText(this.button, text.length >= 5 ? loadingChar : text + \" \" + loadingChar);\n};\n\nLoader.prototype.stop = function () {\n if (this.button) {\n this.button.style.width = this.originalButton.style.width;\n var text = getButtonText(this.originalButton);\n setButtonText(this.button, text);\n window.clearInterval(this.loadingInterval);\n } else {\n this.form.style.opacity = '';\n }\n};\n\nmodule.exports = Loader;\n\n},{}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar populate = require('populate.js');\n\n// parse ?query=string with array support. no nesting.\nfunction parseUrlParams(q) {\n\tvar params = new URLSearchParams(q);\n\tvar obj = {};\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = params.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _step$value = _slicedToArray(_step.value, 2),\n\t\t\t name = _step$value[0],\n\t\t\t value = _step$value[1];\n\n\t\t\tif (name.substr(name.length - 2) === \"[]\") {\n\t\t\t\tvar arrName = name.substr(0, name.length - 2);\n\t\t\t\tobj[arrName] = obj[arrName] || [];\n\t\t\t\tobj[arrName].push(value);\n\t\t\t} else {\n\t\t\t\tobj[name] = value;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn obj;\n}\n\nfunction init() {\n\t// only act on form elements outputted by HTML Forms\n\tvar forms = [].filter.call(document.forms, function (f) {\n\t\treturn f.className.indexOf('hf-form') > -1;\n\t});\n\tif (!forms) {\n\t\treturn;\n\t}\n\n\t// fill each form with data from URL params\n\tvar data = parseUrlParams(window.location.search);\n\tforms.forEach(function (f) {\n\t\tpopulate(f, data);\n\t});\n}\n\nexports.default = { init: init };\n\n},{\"populate.js\":7}],4:[function(require,module,exports){\n\"use strict\";\n\n/* window.CustomEvent polyfill for IE */\n(function () {\n if (typeof window.CustomEvent === \"function\") return false;\n\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n\n window.CustomEvent = CustomEvent;\n})();\n\n},{}],5:[function(require,module,exports){\n\"use strict\";\n\nvar _formPrefiller = require('./form-prefiller.js');\n\nvar _formPrefiller2 = _interopRequireDefault(_formPrefiller);\n\nvar _conditionality = require('./conditionality.js');\n\nvar _conditionality2 = _interopRequireDefault(_conditionality);\n\nrequire('./polyfills/custom-event.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar shim = require('es5-shim');\nvar Loader = require('./form-loading-indicator.js');\nvar vars = window.hf_js_vars || { ajax_url: window.location.href };\nvar EventEmitter = require('wolfy87-eventemitter');\nvar events = new EventEmitter();\n\nfunction cleanFormMessages(formEl) {\n var messageElements = formEl.querySelectorAll('.hf-message');\n [].forEach.call(messageElements, function (el) {\n el.parentNode.removeChild(el);\n });\n}\n\nfunction addFormMessage(formEl, message) {\n var txtElement = document.createElement('p');\n txtElement.className = 'hf-message hf-message-' + message.type;\n txtElement.innerHTML = message.text;\n formEl.insertBefore(txtElement, formEl.lastElementChild.nextElementSibling);\n}\n\nfunction handleSubmitEvents(e) {\n var formEl = e.target;\n if (formEl.className.indexOf('hf-form') < 0) {\n return;\n }\n\n // always prevent default (because regular submit doesn't work for HTML Forms)\n e.preventDefault();\n submitForm(formEl);\n}\n\nfunction submitForm(formEl) {\n cleanFormMessages(formEl);\n emitEvent('submit', formEl);\n\n var formData = new FormData(formEl);\n [].forEach.call(formEl.querySelectorAll('[data-was-required=true]'), function (el) {\n formData.append('_was_required[]', el.getAttribute('name'));\n });\n\n var request = new XMLHttpRequest();\n request.onreadystatechange = createRequestHandler(formEl);\n request.open('POST', vars.ajax_url, true);\n request.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n request.send(formData);\n request = null;\n}\n\nfunction emitEvent(eventName, element) {\n // browser event API: formElement.on('hf-success', ..)\n element.dispatchEvent(new CustomEvent(\"hf-\" + eventName));\n\n // custom events API: html_forms.on('success', ..)\n events.emit(eventName, [element]);\n}\n\nfunction createRequestHandler(formEl) {\n var loader = new Loader(formEl);\n loader.start();\n\n return function () {\n // are we done?\n if (this.readyState === 4) {\n var response = void 0;\n loader.stop();\n\n if (this.status >= 200 && this.status < 400) {\n try {\n response = JSON.parse(this.responseText);\n } catch (error) {\n console.log('HTML Forms: failed to parse AJAX response.\\n\\nError: \"' + error + '\"');\n return;\n }\n\n emitEvent('submitted', formEl);\n\n if (response.error) {\n emitEvent('error', formEl);\n } else {\n emitEvent('success', formEl);\n }\n\n // Show form message\n if (response.message) {\n addFormMessage(formEl, response.message);\n }\n\n // Should we hide form?\n if (response.hide_form) {\n formEl.querySelector('.hf-fields-wrap').style.display = 'none';\n }\n\n // Should we redirect?\n if (response.redirect_url) {\n window.location = response.redirect_url;\n }\n\n // clear form\n if (!response.error) {\n formEl.reset();\n }\n } else {\n // Server error :(\n console.log(this.responseText);\n }\n }\n };\n}\n\ndocument.addEventListener('submit', handleSubmitEvents, false); // useCapture=false to ensure we bubble upwards (and thus can cancel propagation)\n_conditionality2.default.init();\n_formPrefiller2.default.init();\n\nwindow.html_forms = {\n 'on': events.on.bind(events),\n 'submit': submitForm\n};\n\n},{\"./conditionality.js\":1,\"./form-loading-indicator.js\":2,\"./form-prefiller.js\":3,\"./polyfills/custom-event.js\":4,\"es5-shim\":6,\"wolfy87-eventemitter\":8}],6:[function(require,module,exports){\n/*!\n * https://github.com/es-shims/es5-shim\n * @license es5-shim Copyright 2009-2015 by contributors, MIT License\n * see https://github.com/es-shims/es5-shim/blob/master/LICENSE\n */\n\n// vim: ts=4 sts=4 sw=4 expandtab\n\n// Add semicolon to prevent IIFE from being passed as argument to concatenated code.\n;\n\n// UMD (Universal Module Definition)\n// see https://github.com/umdjs/umd/blob/master/templates/returnExports.js\n(function (root, factory) {\n 'use strict';\n\n /* global define, exports, module */\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like enviroments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.returnExports = factory();\n }\n}(this, function () {\n /**\n * Brings an environment as close to ECMAScript 5 compliance\n * as is possible with the facilities of erstwhile engines.\n *\n * Annotated ES5: http://es5.github.com/ (specific links below)\n * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf\n * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/\n */\n\n // Shortcut to an often accessed properties, in order to avoid multiple\n // dereference that costs universally. This also holds a reference to known-good\n // functions.\n var $Array = Array;\n var ArrayPrototype = $Array.prototype;\n var $Object = Object;\n var ObjectPrototype = $Object.prototype;\n var $Function = Function;\n var FunctionPrototype = $Function.prototype;\n var $String = String;\n var StringPrototype = $String.prototype;\n var $Number = Number;\n var NumberPrototype = $Number.prototype;\n var array_slice = ArrayPrototype.slice;\n var array_splice = ArrayPrototype.splice;\n var array_push = ArrayPrototype.push;\n var array_unshift = ArrayPrototype.unshift;\n var array_concat = ArrayPrototype.concat;\n var array_join = ArrayPrototype.join;\n var call = FunctionPrototype.call;\n var apply = FunctionPrototype.apply;\n var max = Math.max;\n var min = Math.min;\n\n // Having a toString local variable name breaks in Opera so use to_string.\n var to_string = ObjectPrototype.toString;\n\n /* global Symbol */\n /* eslint-disable one-var-declaration-per-line, no-redeclare, max-statements-per-line */\n var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, constructorRegex = /^\\s*class /, isES6ClassFn = function isES6ClassFn(value) { try { var fnStr = fnToStr.call(value); var singleStripped = fnStr.replace(/\\/\\/.*\\n/g, ''); var multiStripped = singleStripped.replace(/\\/\\*[.\\s\\S]*\\*\\//g, ''); var spaceStripped = multiStripped.replace(/\\n/mg, ' ').replace(/ {2}/g, ' '); return constructorRegex.test(spaceStripped); } catch (e) { return false; /* not a function */ } }, tryFunctionObject = function tryFunctionObject(value) { try { if (isES6ClassFn(value)) { return false; } fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]', isCallable = function isCallable(value) { if (!value) { return false; } if (typeof value !== 'function' && typeof value !== 'object') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } if (isES6ClassFn(value)) { return false; } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };\n\n var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };\n var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };\n /* eslint-enable one-var-declaration-per-line, no-redeclare, max-statements-per-line */\n\n /* inlined from http://npmjs.com/define-properties */\n var supportsDescriptors = $Object.defineProperty && (function () {\n try {\n var obj = {};\n $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });\n for (var _ in obj) { // jscs:ignore disallowUnusedVariables\n return false;\n }\n return obj.x === obj;\n } catch (e) { /* this is ES3 */\n return false;\n }\n }());\n var defineProperties = (function (has) {\n // Define configurable, writable, and non-enumerable props\n // if they don't exist.\n var defineProperty;\n if (supportsDescriptors) {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) {\n return;\n }\n $Object.defineProperty(object, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: method\n });\n };\n } else {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) {\n return;\n }\n object[name] = method;\n };\n }\n return function defineProperties(object, map, forceAssign) {\n for (var name in map) {\n if (has.call(map, name)) {\n defineProperty(object, name, map[name], forceAssign);\n }\n }\n };\n }(ObjectPrototype.hasOwnProperty));\n\n //\n // Util\n // ======\n //\n\n /* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */\n var isPrimitive = function isPrimitive(input) {\n var type = typeof input;\n return input === null || (type !== 'object' && type !== 'function');\n };\n\n var isActualNaN = $Number.isNaN || function isActualNaN(x) {\n return x !== x;\n };\n\n var ES = {\n // ES5 9.4\n // http://es5.github.com/#x9.4\n // http://jsperf.com/to-integer\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */\n ToInteger: function ToInteger(num) {\n var n = +num;\n if (isActualNaN(n)) {\n n = 0;\n } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n },\n\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */\n ToPrimitive: function ToPrimitive(input) {\n var val, valueOf, toStr;\n if (isPrimitive(input)) {\n return input;\n }\n valueOf = input.valueOf;\n if (isCallable(valueOf)) {\n val = valueOf.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n toStr = input.toString;\n if (isCallable(toStr)) {\n val = toStr.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n throw new TypeError();\n },\n\n // ES5 9.9\n // http://es5.github.com/#x9.9\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */\n ToObject: function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \" + o + ' to object');\n }\n return $Object(o);\n },\n\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */\n ToUint32: function ToUint32(x) {\n return x >>> 0;\n }\n };\n\n //\n // Function\n // ========\n //\n\n // ES-5 15.3.4.5\n // http://es5.github.com/#x15.3.4.5\n\n var Empty = function Empty() {};\n\n defineProperties(FunctionPrototype, {\n bind: function bind(that) { // .length is 1\n // 1. Let Target be the this value.\n var target = this;\n // 2. If IsCallable(Target) is false, throw a TypeError exception.\n if (!isCallable(target)) {\n throw new TypeError('Function.prototype.bind called on incompatible ' + target);\n }\n // 3. Let A be a new (possibly empty) internal list of all of the\n // argument values provided after thisArg (arg1, arg2 etc), in order.\n // XXX slicedArgs will stand in for \"A\" if used\n var args = array_slice.call(arguments, 1); // for normal call\n // 4. Let F be a new native ECMAScript object.\n // 11. Set the [[Prototype]] internal property of F to the standard\n // built-in Function prototype object as specified in 15.3.3.1.\n // 12. Set the [[Call]] internal property of F as described in\n // 15.3.4.5.1.\n // 13. Set the [[Construct]] internal property of F as described in\n // 15.3.4.5.2.\n // 14. Set the [[HasInstance]] internal property of F as described in\n // 15.3.4.5.3.\n var bound;\n var binder = function () {\n\n if (this instanceof bound) {\n // 15.3.4.5.2 [[Construct]]\n // When the [[Construct]] internal method of a function object,\n // F that was created using the bind function is called with a\n // list of arguments ExtraArgs, the following steps are taken:\n // 1. Let target be the value of F's [[TargetFunction]]\n // internal property.\n // 2. If target has no [[Construct]] internal method, a\n // TypeError exception is thrown.\n // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Construct]] internal\n // method of target providing args as the arguments.\n\n var result = apply.call(\n target,\n this,\n array_concat.call(args, array_slice.call(arguments))\n );\n if ($Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n // 15.3.4.5.1 [[Call]]\n // When the [[Call]] internal method of a function object, F,\n // which was created using the bind function is called with a\n // this value and a list of arguments ExtraArgs, the following\n // steps are taken:\n // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 2. Let boundThis be the value of F's [[BoundThis]] internal\n // property.\n // 3. Let target be the value of F's [[TargetFunction]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Call]] internal method\n // of target providing boundThis as the this value and\n // providing args as the arguments.\n\n // equiv: target.call(this, ...boundArgs, ...args)\n return apply.call(\n target,\n that,\n array_concat.call(args, array_slice.call(arguments))\n );\n\n }\n\n };\n\n // 15. If the [[Class]] internal property of Target is \"Function\", then\n // a. Let L be the length property of Target minus the length of A.\n // b. Set the length own property of F to either 0 or L, whichever is\n // larger.\n // 16. Else set the length own property of F to 0.\n\n var boundLength = max(0, target.length - args.length);\n\n // 17. Set the attributes of the length own property of F to the values\n // specified in 15.3.5.1.\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n array_push.call(boundArgs, '$' + i);\n }\n\n // XXX Build a dynamic function with desired amount of arguments is the only\n // way to set the length property of a function.\n // In environments where Content Security Policies enabled (Chrome extensions,\n // for ex.) all use of eval or Function costructor throws an exception.\n // However in all of these environments Function.prototype.bind exists\n // and so this code will never be executed.\n bound = $Function('binder', 'return function (' + array_join.call(boundArgs, ',') + '){ return binder.apply(this, arguments); }')(binder);\n\n if (target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n // Clean up dangling references.\n Empty.prototype = null;\n }\n\n // TODO\n // 18. Set the [[Extensible]] internal property of F to true.\n\n // TODO\n // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\n // 20. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\n // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\n // false.\n // 21. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\n // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\n // and false.\n\n // TODO\n // NOTE Function objects created using Function.prototype.bind do not\n // have a prototype property or the [[Code]], [[FormalParameters]], and\n // [[Scope]] internal properties.\n // XXX can't delete prototype in pure-js.\n\n // 22. Return F.\n return bound;\n }\n });\n\n // _Please note: Shortcuts are defined after `Function.prototype.bind` as we\n // use it in defining shortcuts.\n var owns = call.bind(ObjectPrototype.hasOwnProperty);\n var toStr = call.bind(ObjectPrototype.toString);\n var arraySlice = call.bind(array_slice);\n var arraySliceApply = apply.bind(array_slice);\n /* globals document */\n if (typeof document === 'object' && document && document.documentElement) {\n try {\n arraySlice(document.documentElement.childNodes);\n } catch (e) {\n var origArraySlice = arraySlice;\n var origArraySliceApply = arraySliceApply;\n arraySlice = function arraySliceIE(arr) {\n var r = [];\n var i = arr.length;\n while (i-- > 0) {\n r[i] = arr[i];\n }\n return origArraySliceApply(r, origArraySlice(arguments, 1));\n };\n arraySliceApply = function arraySliceApplyIE(arr, args) {\n return origArraySliceApply(arraySlice(arr), args);\n };\n }\n }\n var strSlice = call.bind(StringPrototype.slice);\n var strSplit = call.bind(StringPrototype.split);\n var strIndexOf = call.bind(StringPrototype.indexOf);\n var pushCall = call.bind(array_push);\n var isEnum = call.bind(ObjectPrototype.propertyIsEnumerable);\n var arraySort = call.bind(ArrayPrototype.sort);\n\n //\n // Array\n // =====\n //\n\n var isArray = $Array.isArray || function isArray(obj) {\n return toStr(obj) === '[object Array]';\n };\n\n // ES5 15.4.4.12\n // http://es5.github.com/#x15.4.4.13\n // Return len+argCount.\n // [bugfix, ielt8]\n // IE < 8 bug: [].unshift(0) === undefined but should be \"1\"\n var hasUnshiftReturnValueBug = [].unshift(0) !== 1;\n defineProperties(ArrayPrototype, {\n unshift: function () {\n array_unshift.apply(this, arguments);\n return this.length;\n }\n }, hasUnshiftReturnValueBug);\n\n // ES5 15.4.3.2\n // http://es5.github.com/#x15.4.3.2\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\n defineProperties($Array, { isArray: isArray });\n\n // The IsCallable() check in the Array functions\n // has been replaced with a strict check on the\n // internal class of the object to trap cases where\n // the provided function was actually a regular\n // expression literal, which in V8 and\n // JavaScriptCore is a typeof \"function\". Only in\n // V8 are regular expression literals permitted as\n // reduce parameters, so it is desirable in the\n // general case for the shim to match the more\n // strict and common behavior of rejecting regular\n // expressions.\n\n // ES5 15.4.4.18\n // http://es5.github.com/#x15.4.4.18\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach\n\n // Check failure of by-index access of string characters (IE < 9)\n // and failure of `0 in boxedString` (Rhino)\n var boxedString = $Object('a');\n var splitString = boxedString[0] !== 'a' || !(0 in boxedString);\n\n var properlyBoxesContext = function properlyBoxed(method) {\n // Check node 0.6.21 bug where third parameter is not boxed\n var properlyBoxesNonStrict = true;\n var properlyBoxesStrict = true;\n var threwException = false;\n if (method) {\n try {\n method.call('foo', function (_, __, context) {\n if (typeof context !== 'object') {\n properlyBoxesNonStrict = false;\n }\n });\n\n method.call([1], function () {\n 'use strict';\n\n properlyBoxesStrict = typeof this === 'string';\n }, 'x');\n } catch (e) {\n threwException = true;\n }\n }\n return !!method && !threwException && properlyBoxesNonStrict && properlyBoxesStrict;\n };\n\n defineProperties(ArrayPrototype, {\n forEach: function forEach(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var i = -1;\n var length = ES.ToUint32(self.length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.forEach callback must be a function');\n }\n\n while (++i < length) {\n if (i in self) {\n // Invoke the callback function with call, passing arguments:\n // context, property value, property key, thisArg object\n if (typeof T === 'undefined') {\n callbackfn(self[i], i, object);\n } else {\n callbackfn.call(T, self[i], i, object);\n }\n }\n }\n }\n }, !properlyBoxesContext(ArrayPrototype.forEach));\n\n // ES5 15.4.4.19\n // http://es5.github.com/#x15.4.4.19\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map\n defineProperties(ArrayPrototype, {\n map: function map(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var result = $Array(length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.map callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n if (typeof T === 'undefined') {\n result[i] = callbackfn(self[i], i, object);\n } else {\n result[i] = callbackfn.call(T, self[i], i, object);\n }\n }\n }\n return result;\n }\n }, !properlyBoxesContext(ArrayPrototype.map));\n\n // ES5 15.4.4.20\n // http://es5.github.com/#x15.4.4.20\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter\n defineProperties(ArrayPrototype, {\n filter: function filter(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var result = [];\n var value;\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.filter callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {\n pushCall(result, value);\n }\n }\n }\n return result;\n }\n }, !properlyBoxesContext(ArrayPrototype.filter));\n\n // ES5 15.4.4.16\n // http://es5.github.com/#x15.4.4.16\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every\n defineProperties(ArrayPrototype, {\n every: function every(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.every callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {\n return false;\n }\n }\n return true;\n }\n }, !properlyBoxesContext(ArrayPrototype.every));\n\n // ES5 15.4.4.17\n // http://es5.github.com/#x15.4.4.17\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some\n defineProperties(ArrayPrototype, {\n some: function some(callbackfn/*, thisArg */) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.some callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {\n return true;\n }\n }\n return false;\n }\n }, !properlyBoxesContext(ArrayPrototype.some));\n\n // ES5 15.4.4.21\n // http://es5.github.com/#x15.4.4.21\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce\n var reduceCoercesToObject = false;\n if (ArrayPrototype.reduce) {\n reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) {\n return list;\n }) === 'object';\n }\n defineProperties(ArrayPrototype, {\n reduce: function reduce(callbackfn/*, initialValue*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.reduce callback must be a function');\n }\n\n // no value to return if no initial value and an empty array\n if (length === 0 && arguments.length === 1) {\n throw new TypeError('reduce of empty array with no initial value');\n }\n\n var i = 0;\n var result;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n\n // if array contains no values, no initial value to return\n if (++i >= length) {\n throw new TypeError('reduce of empty array with no initial value');\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = callbackfn(result, self[i], i, object);\n }\n }\n\n return result;\n }\n }, !reduceCoercesToObject);\n\n // ES5 15.4.4.22\n // http://es5.github.com/#x15.4.4.22\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight\n var reduceRightCoercesToObject = false;\n if (ArrayPrototype.reduceRight) {\n reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) {\n return list;\n }) === 'object';\n }\n defineProperties(ArrayPrototype, {\n reduceRight: function reduceRight(callbackfn/*, initial*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.reduceRight callback must be a function');\n }\n\n // no value to return if no initial value, empty array\n if (length === 0 && arguments.length === 1) {\n throw new TypeError('reduceRight of empty array with no initial value');\n }\n\n var result;\n var i = length - 1;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n\n // if array contains no values, no initial value to return\n if (--i < 0) {\n throw new TypeError('reduceRight of empty array with no initial value');\n }\n } while (true);\n }\n\n if (i < 0) {\n return result;\n }\n\n do {\n if (i in self) {\n result = callbackfn(result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n }\n }, !reduceRightCoercesToObject);\n\n // ES5 15.4.4.14\n // http://es5.github.com/#x15.4.4.14\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\n var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;\n defineProperties(ArrayPrototype, {\n indexOf: function indexOf(searchElement/*, fromIndex */) {\n var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);\n var length = ES.ToUint32(self.length);\n\n if (length === 0) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = ES.ToInteger(arguments[1]);\n }\n\n // handle negative indices\n i = i >= 0 ? i : max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === searchElement) {\n return i;\n }\n }\n return -1;\n }\n }, hasFirefox2IndexOfBug);\n\n // ES5 15.4.4.15\n // http://es5.github.com/#x15.4.4.15\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;\n defineProperties(ArrayPrototype, {\n lastIndexOf: function lastIndexOf(searchElement/*, fromIndex */) {\n var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);\n var length = ES.ToUint32(self.length);\n\n if (length === 0) {\n return -1;\n }\n var i = length - 1;\n if (arguments.length > 1) {\n i = min(i, ES.ToInteger(arguments[1]));\n }\n // handle negative indices\n i = i >= 0 ? i : length - Math.abs(i);\n for (; i >= 0; i--) {\n if (i in self && searchElement === self[i]) {\n return i;\n }\n }\n return -1;\n }\n }, hasFirefox2LastIndexOfBug);\n\n // ES5 15.4.4.12\n // http://es5.github.com/#x15.4.4.12\n var spliceNoopReturnsEmptyArray = (function () {\n var a = [1, 2];\n var result = a.splice();\n return a.length === 2 && isArray(result) && result.length === 0;\n }());\n defineProperties(ArrayPrototype, {\n // Safari 5.0 bug where .splice() returns undefined\n splice: function splice(start, deleteCount) {\n if (arguments.length === 0) {\n return [];\n } else {\n return array_splice.apply(this, arguments);\n }\n }\n }, !spliceNoopReturnsEmptyArray);\n\n var spliceWorksWithEmptyObject = (function () {\n var obj = {};\n ArrayPrototype.splice.call(obj, 0, 0, 1);\n return obj.length === 1;\n }());\n defineProperties(ArrayPrototype, {\n splice: function splice(start, deleteCount) {\n if (arguments.length === 0) {\n return [];\n }\n var args = arguments;\n this.length = max(ES.ToInteger(this.length), 0);\n if (arguments.length > 0 && typeof deleteCount !== 'number') {\n args = arraySlice(arguments);\n if (args.length < 2) {\n pushCall(args, this.length - start);\n } else {\n args[1] = ES.ToInteger(deleteCount);\n }\n }\n return array_splice.apply(this, args);\n }\n }, !spliceWorksWithEmptyObject);\n var spliceWorksWithLargeSparseArrays = (function () {\n // Per https://github.com/es-shims/es5-shim/issues/295\n // Safari 7/8 breaks with sparse arrays of size 1e5 or greater\n var arr = new $Array(1e5);\n // note: the index MUST be 8 or larger or the test will false pass\n arr[8] = 'x';\n arr.splice(1, 1);\n // note: this test must be defined *after* the indexOf shim\n // per https://github.com/es-shims/es5-shim/issues/313\n return arr.indexOf('x') === 7;\n }());\n var spliceWorksWithSmallSparseArrays = (function () {\n // Per https://github.com/es-shims/es5-shim/issues/295\n // Opera 12.15 breaks on this, no idea why.\n var n = 256;\n var arr = [];\n arr[n] = 'a';\n arr.splice(n + 1, 0, 'b');\n return arr[n] === 'a';\n }());\n defineProperties(ArrayPrototype, {\n splice: function splice(start, deleteCount) {\n var O = ES.ToObject(this);\n var A = [];\n var len = ES.ToUint32(O.length);\n var relativeStart = ES.ToInteger(start);\n var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);\n var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);\n\n var k = 0;\n var from;\n while (k < actualDeleteCount) {\n from = $String(actualStart + k);\n if (owns(O, from)) {\n A[k] = O[from];\n }\n k += 1;\n }\n\n var items = arraySlice(arguments, 2);\n var itemCount = items.length;\n var to;\n if (itemCount < actualDeleteCount) {\n k = actualStart;\n var maxK = len - actualDeleteCount;\n while (k < maxK) {\n from = $String(k + actualDeleteCount);\n to = $String(k + itemCount);\n if (owns(O, from)) {\n O[to] = O[from];\n } else {\n delete O[to];\n }\n k += 1;\n }\n k = len;\n var minK = len - actualDeleteCount + itemCount;\n while (k > minK) {\n delete O[k - 1];\n k -= 1;\n }\n } else if (itemCount > actualDeleteCount) {\n k = len - actualDeleteCount;\n while (k > actualStart) {\n from = $String(k + actualDeleteCount - 1);\n to = $String(k + itemCount - 1);\n if (owns(O, from)) {\n O[to] = O[from];\n } else {\n delete O[to];\n }\n k -= 1;\n }\n }\n k = actualStart;\n for (var i = 0; i < items.length; ++i) {\n O[k] = items[i];\n k += 1;\n }\n O.length = len - actualDeleteCount + itemCount;\n\n return A;\n }\n }, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);\n\n var originalJoin = ArrayPrototype.join;\n var hasStringJoinBug;\n try {\n hasStringJoinBug = Array.prototype.join.call('123', ',') !== '1,2,3';\n } catch (e) {\n hasStringJoinBug = true;\n }\n if (hasStringJoinBug) {\n defineProperties(ArrayPrototype, {\n join: function join(separator) {\n var sep = typeof separator === 'undefined' ? ',' : separator;\n return originalJoin.call(isString(this) ? strSplit(this, '') : this, sep);\n }\n }, hasStringJoinBug);\n }\n\n var hasJoinUndefinedBug = [1, 2].join(undefined) !== '1,2';\n if (hasJoinUndefinedBug) {\n defineProperties(ArrayPrototype, {\n join: function join(separator) {\n var sep = typeof separator === 'undefined' ? ',' : separator;\n return originalJoin.call(this, sep);\n }\n }, hasJoinUndefinedBug);\n }\n\n var pushShim = function push(item) {\n var O = ES.ToObject(this);\n var n = ES.ToUint32(O.length);\n var i = 0;\n while (i < arguments.length) {\n O[n + i] = arguments[i];\n i += 1;\n }\n O.length = n + i;\n return n + i;\n };\n\n var pushIsNotGeneric = (function () {\n var obj = {};\n var result = Array.prototype.push.call(obj, undefined);\n return result !== 1 || obj.length !== 1 || typeof obj[0] !== 'undefined' || !owns(obj, 0);\n }());\n defineProperties(ArrayPrototype, {\n push: function push(item) {\n if (isArray(this)) {\n return array_push.apply(this, arguments);\n }\n return pushShim.apply(this, arguments);\n }\n }, pushIsNotGeneric);\n\n // This fixes a very weird bug in Opera 10.6 when pushing `undefined\n var pushUndefinedIsWeird = (function () {\n var arr = [];\n var result = arr.push(undefined);\n return result !== 1 || arr.length !== 1 || typeof arr[0] !== 'undefined' || !owns(arr, 0);\n }());\n defineProperties(ArrayPrototype, { push: pushShim }, pushUndefinedIsWeird);\n\n // ES5 15.2.3.14\n // http://es5.github.io/#x15.4.4.10\n // Fix boxed string bug\n defineProperties(ArrayPrototype, {\n slice: function (start, end) {\n var arr = isString(this) ? strSplit(this, '') : this;\n return arraySliceApply(arr, arguments);\n }\n }, splitString);\n\n var sortIgnoresNonFunctions = (function () {\n try {\n [1, 2].sort(null);\n } catch (e) {\n try {\n [1, 2].sort({});\n } catch (e2) {\n return false;\n }\n }\n return true;\n }());\n var sortThrowsOnRegex = (function () {\n // this is a problem in Firefox 4, in which `typeof /a/ === 'function'`\n try {\n [1, 2].sort(/a/);\n return false;\n } catch (e) {}\n return true;\n }());\n var sortIgnoresUndefined = (function () {\n // applies in IE 8, for one.\n try {\n [1, 2].sort(undefined);\n return true;\n } catch (e) {}\n return false;\n }());\n defineProperties(ArrayPrototype, {\n sort: function sort(compareFn) {\n if (typeof compareFn === 'undefined') {\n return arraySort(this);\n }\n if (!isCallable(compareFn)) {\n throw new TypeError('Array.prototype.sort callback must be a function');\n }\n return arraySort(this, compareFn);\n }\n }, sortIgnoresNonFunctions || !sortIgnoresUndefined || !sortThrowsOnRegex);\n\n //\n // Object\n // ======\n //\n\n // ES5 15.2.3.14\n // http://es5.github.com/#x15.2.3.14\n\n // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\n var hasDontEnumBug = !isEnum({ 'toString': null }, 'toString'); // jscs:ignore disallowQuotedKeysInObjects\n var hasProtoEnumBug = isEnum(function () {}, 'prototype');\n var hasStringEnumBug = !owns('x', '0');\n var equalsConstructorPrototype = function (o) {\n var ctor = o.constructor;\n return ctor && ctor.prototype === o;\n };\n var excludedKeys = {\n $window: true,\n $console: true,\n $parent: true,\n $self: true,\n $frame: true,\n $frames: true,\n $frameElement: true,\n $webkitIndexedDB: true,\n $webkitStorageInfo: true,\n $external: true,\n $width: true,\n $height: true,\n $top: true,\n $localStorage: true\n };\n var hasAutomationEqualityBug = (function () {\n /* globals window */\n if (typeof window === 'undefined') {\n return false;\n }\n for (var k in window) {\n try {\n if (!excludedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {\n equalsConstructorPrototype(window[k]);\n }\n } catch (e) {\n return true;\n }\n }\n return false;\n }());\n var equalsConstructorPrototypeIfNotBuggy = function (object) {\n if (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n return equalsConstructorPrototype(object);\n }\n try {\n return equalsConstructorPrototype(object);\n } catch (e) {\n return false;\n }\n };\n var dontEnums = [\n 'toString',\n 'toLocaleString',\n 'valueOf',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'constructor'\n ];\n var dontEnumsLength = dontEnums.length;\n\n // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js\n // can be replaced with require('is-arguments') if we ever use a build process instead\n var isStandardArguments = function isArguments(value) {\n return toStr(value) === '[object Arguments]';\n };\n var isLegacyArguments = function isArguments(value) {\n return value !== null\n && typeof value === 'object'\n && typeof value.length === 'number'\n && value.length >= 0\n && !isArray(value)\n && isCallable(value.callee);\n };\n var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;\n\n defineProperties($Object, {\n keys: function keys(object) {\n var isFn = isCallable(object);\n var isArgs = isArguments(object);\n var isObject = object !== null && typeof object === 'object';\n var isStr = isObject && isString(object);\n\n if (!isObject && !isFn && !isArgs) {\n throw new TypeError('Object.keys called on a non-object');\n }\n\n var theKeys = [];\n var skipProto = hasProtoEnumBug && isFn;\n if ((isStr && hasStringEnumBug) || isArgs) {\n for (var i = 0; i < object.length; ++i) {\n pushCall(theKeys, $String(i));\n }\n }\n\n if (!isArgs) {\n for (var name in object) {\n if (!(skipProto && name === 'prototype') && owns(object, name)) {\n pushCall(theKeys, $String(name));\n }\n }\n }\n\n if (hasDontEnumBug) {\n var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n for (var j = 0; j < dontEnumsLength; j++) {\n var dontEnum = dontEnums[j];\n if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {\n pushCall(theKeys, dontEnum);\n }\n }\n }\n return theKeys;\n }\n });\n\n var keysWorksWithArguments = $Object.keys && (function () {\n // Safari 5.0 bug\n return $Object.keys(arguments).length === 2;\n }(1, 2));\n var keysHasArgumentsLengthBug = $Object.keys && (function () {\n var argKeys = $Object.keys(arguments);\n return arguments.length !== 1 || argKeys.length !== 1 || argKeys[0] !== 1;\n }(1));\n var originalKeys = $Object.keys;\n defineProperties($Object, {\n keys: function keys(object) {\n if (isArguments(object)) {\n return originalKeys(arraySlice(object));\n } else {\n return originalKeys(object);\n }\n }\n }, !keysWorksWithArguments || keysHasArgumentsLengthBug);\n\n //\n // Date\n // ====\n //\n\n var hasNegativeMonthYearBug = new Date(-3509827329600292).getUTCMonth() !== 0;\n var aNegativeTestDate = new Date(-1509842289600292);\n var aPositiveTestDate = new Date(1449662400000);\n var hasToUTCStringFormatBug = aNegativeTestDate.toUTCString() !== 'Mon, 01 Jan -45875 11:59:59 GMT';\n var hasToDateStringFormatBug;\n var hasToStringFormatBug;\n var timeZoneOffset = aNegativeTestDate.getTimezoneOffset();\n if (timeZoneOffset < -720) {\n hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Tue Jan 02 -45875';\n hasToStringFormatBug = !(/^Thu Dec 10 2015 \\d\\d:\\d\\d:\\d\\d GMT[-+]\\d\\d\\d\\d(?: |$)/).test(String(aPositiveTestDate));\n } else {\n hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Mon Jan 01 -45875';\n hasToStringFormatBug = !(/^Wed Dec 09 2015 \\d\\d:\\d\\d:\\d\\d GMT[-+]\\d\\d\\d\\d(?: |$)/).test(String(aPositiveTestDate));\n }\n\n var originalGetFullYear = call.bind(Date.prototype.getFullYear);\n var originalGetMonth = call.bind(Date.prototype.getMonth);\n var originalGetDate = call.bind(Date.prototype.getDate);\n var originalGetUTCFullYear = call.bind(Date.prototype.getUTCFullYear);\n var originalGetUTCMonth = call.bind(Date.prototype.getUTCMonth);\n var originalGetUTCDate = call.bind(Date.prototype.getUTCDate);\n var originalGetUTCDay = call.bind(Date.prototype.getUTCDay);\n var originalGetUTCHours = call.bind(Date.prototype.getUTCHours);\n var originalGetUTCMinutes = call.bind(Date.prototype.getUTCMinutes);\n var originalGetUTCSeconds = call.bind(Date.prototype.getUTCSeconds);\n var originalGetUTCMilliseconds = call.bind(Date.prototype.getUTCMilliseconds);\n var dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n var monthName = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n var daysInMonth = function daysInMonth(month, year) {\n return originalGetDate(new Date(year, month, 0));\n };\n\n defineProperties(Date.prototype, {\n getFullYear: function getFullYear() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetFullYear(this);\n if (year < 0 && originalGetMonth(this) > 11) {\n return year + 1;\n }\n return year;\n },\n getMonth: function getMonth() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetFullYear(this);\n var month = originalGetMonth(this);\n if (year < 0 && month > 11) {\n return 0;\n }\n return month;\n },\n getDate: function getDate() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetFullYear(this);\n var month = originalGetMonth(this);\n var date = originalGetDate(this);\n if (year < 0 && month > 11) {\n if (month === 12) {\n return date;\n }\n var days = daysInMonth(0, year + 1);\n return (days - date) + 1;\n }\n return date;\n },\n getUTCFullYear: function getUTCFullYear() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetUTCFullYear(this);\n if (year < 0 && originalGetUTCMonth(this) > 11) {\n return year + 1;\n }\n return year;\n },\n getUTCMonth: function getUTCMonth() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetUTCFullYear(this);\n var month = originalGetUTCMonth(this);\n if (year < 0 && month > 11) {\n return 0;\n }\n return month;\n },\n getUTCDate: function getUTCDate() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetUTCFullYear(this);\n var month = originalGetUTCMonth(this);\n var date = originalGetUTCDate(this);\n if (year < 0 && month > 11) {\n if (month === 12) {\n return date;\n }\n var days = daysInMonth(0, year + 1);\n return (days - date) + 1;\n }\n return date;\n }\n }, hasNegativeMonthYearBug);\n\n defineProperties(Date.prototype, {\n toUTCString: function toUTCString() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var day = originalGetUTCDay(this);\n var date = originalGetUTCDate(this);\n var month = originalGetUTCMonth(this);\n var year = originalGetUTCFullYear(this);\n var hour = originalGetUTCHours(this);\n var minute = originalGetUTCMinutes(this);\n var second = originalGetUTCSeconds(this);\n return dayName[day] + ', '\n + (date < 10 ? '0' + date : date) + ' '\n + monthName[month] + ' '\n + year + ' '\n + (hour < 10 ? '0' + hour : hour) + ':'\n + (minute < 10 ? '0' + minute : minute) + ':'\n + (second < 10 ? '0' + second : second) + ' GMT';\n }\n }, hasNegativeMonthYearBug || hasToUTCStringFormatBug);\n\n // Opera 12 has `,`\n defineProperties(Date.prototype, {\n toDateString: function toDateString() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var day = this.getDay();\n var date = this.getDate();\n var month = this.getMonth();\n var year = this.getFullYear();\n return dayName[day] + ' '\n + monthName[month] + ' '\n + (date < 10 ? '0' + date : date) + ' '\n + year;\n }\n }, hasNegativeMonthYearBug || hasToDateStringFormatBug);\n\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\n if (hasNegativeMonthYearBug || hasToStringFormatBug) {\n Date.prototype.toString = function toString() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var day = this.getDay();\n var date = this.getDate();\n var month = this.getMonth();\n var year = this.getFullYear();\n var hour = this.getHours();\n var minute = this.getMinutes();\n var second = this.getSeconds();\n var timezoneOffset = this.getTimezoneOffset();\n var hoursOffset = Math.floor(Math.abs(timezoneOffset) / 60);\n var minutesOffset = Math.floor(Math.abs(timezoneOffset) % 60);\n return dayName[day] + ' '\n + monthName[month] + ' '\n + (date < 10 ? '0' + date : date) + ' '\n + year + ' '\n + (hour < 10 ? '0' + hour : hour) + ':'\n + (minute < 10 ? '0' + minute : minute) + ':'\n + (second < 10 ? '0' + second : second) + ' GMT'\n + (timezoneOffset > 0 ? '-' : '+')\n + (hoursOffset < 10 ? '0' + hoursOffset : hoursOffset)\n + (minutesOffset < 10 ? '0' + minutesOffset : minutesOffset);\n };\n if (supportsDescriptors) {\n $Object.defineProperty(Date.prototype, 'toString', {\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n }\n\n // ES5 15.9.5.43\n // http://es5.github.com/#x15.9.5.43\n // This function returns a String value represent the instance in time\n // represented by this Date object. The format of the String is the Date Time\n // string format defined in 15.9.1.15. All fields are present in the String.\n // The time zone is always UTC, denoted by the suffix Z. If the time value of\n // this object is not a finite Number a RangeError exception is thrown.\n var negativeDate = -62198755200000;\n var negativeYearString = '-000001';\n var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1; // eslint-disable-line max-len\n var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';\n\n var getTime = call.bind(Date.prototype.getTime);\n\n defineProperties(Date.prototype, {\n toISOString: function toISOString() {\n if (!isFinite(this) || !isFinite(getTime(this))) {\n // Adope Photoshop requires the second check.\n throw new RangeError('Date.prototype.toISOString called on non-finite value.');\n }\n\n var year = originalGetUTCFullYear(this);\n\n var month = originalGetUTCMonth(this);\n // see https://github.com/es-shims/es5-shim/issues/111\n year += Math.floor(month / 12);\n month = ((month % 12) + 12) % 12;\n\n // the date time string format is specified in 15.9.1.15.\n var result = [\n month + 1,\n originalGetUTCDate(this),\n originalGetUTCHours(this),\n originalGetUTCMinutes(this),\n originalGetUTCSeconds(this)\n ];\n year = (\n (year < 0 ? '-' : (year > 9999 ? '+' : ''))\n + strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)\n );\n\n for (var i = 0; i < result.length; ++i) {\n // pad months, days, hours, minutes, and seconds to have two digits.\n result[i] = strSlice('00' + result[i], -2);\n }\n // pad milliseconds to have three digits.\n return (\n year + '-' + arraySlice(result, 0, 2).join('-')\n + 'T' + arraySlice(result, 2).join(':') + '.'\n + strSlice('000' + originalGetUTCMilliseconds(this), -3) + 'Z'\n );\n }\n }, hasNegativeDateBug || hasSafari51DateBug);\n\n // ES5 15.9.5.44\n // http://es5.github.com/#x15.9.5.44\n // This function provides a String representation of a Date object for use by\n // JSON.stringify (15.12.3).\n var dateToJSONIsSupported = (function () {\n try {\n return Date.prototype.toJSON\n && new Date(NaN).toJSON() === null\n && new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1\n && Date.prototype.toJSON.call({ // generic\n toISOString: function () { return true; }\n });\n } catch (e) {\n return false;\n }\n }());\n if (!dateToJSONIsSupported) {\n Date.prototype.toJSON = function toJSON(key) {\n // When the toJSON method is called with argument key, the following\n // steps are taken:\n\n // 1. Let O be the result of calling ToObject, giving it the this\n // value as its argument.\n // 2. Let tv be ES.ToPrimitive(O, hint Number).\n var O = $Object(this);\n var tv = ES.ToPrimitive(O);\n // 3. If tv is a Number and is not finite, return null.\n if (typeof tv === 'number' && !isFinite(tv)) {\n return null;\n }\n // 4. Let toISO be the result of calling the [[Get]] internal method of\n // O with argument \"toISOString\".\n var toISO = O.toISOString;\n // 5. If IsCallable(toISO) is false, throw a TypeError exception.\n if (!isCallable(toISO)) {\n throw new TypeError('toISOString property is not callable');\n }\n // 6. Return the result of calling the [[Call]] internal method of\n // toISO with O as the this value and an empty argument list.\n return toISO.call(O);\n\n // NOTE 1 The argument is ignored.\n\n // NOTE 2 The toJSON function is intentionally generic; it does not\n // require that its this value be a Date object. Therefore, it can be\n // transferred to other kinds of objects for use as a method. However,\n // it does require that any such object have a toISOString method. An\n // object is free to use the argument key to filter its\n // stringification.\n };\n }\n\n // ES5 15.9.4.2\n // http://es5.github.com/#x15.9.4.2\n // based on work shared by Daniel Friesen (dantman)\n // http://gist.github.com/303249\n var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;\n var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));\n var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));\n if (doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {\n // XXX global assignment won't work in embeddings that use\n // an alternate object for the context.\n /* global Date: true */\n var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1;\n var hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());\n // eslint-disable-next-line no-implicit-globals, no-global-assign\n Date = (function (NativeDate) {\n // Date.length === 7\n var DateShim = function Date(Y, M, D, h, m, s, ms) {\n var length = arguments.length;\n var date;\n if (this instanceof NativeDate) {\n var seconds = s;\n var millis = ms;\n if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {\n // work around a Safari 8/9 bug where it treats the seconds as signed\n var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;\n var sToShift = Math.floor(msToShift / 1e3);\n seconds += sToShift;\n millis -= sToShift * 1e3;\n }\n date = length === 1 && $String(Y) === Y // isString(Y)\n // We explicitly pass it through parse:\n ? new NativeDate(DateShim.parse(Y))\n // We have to manually make calls depending on argument\n // length here\n : length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis)\n : length >= 6 ? new NativeDate(Y, M, D, h, m, seconds)\n : length >= 5 ? new NativeDate(Y, M, D, h, m)\n : length >= 4 ? new NativeDate(Y, M, D, h)\n : length >= 3 ? new NativeDate(Y, M, D)\n : length >= 2 ? new NativeDate(Y, M)\n : length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y)\n : new NativeDate();\n } else {\n date = NativeDate.apply(this, arguments);\n }\n if (!isPrimitive(date)) {\n // Prevent mixups with unfixed Date object\n defineProperties(date, { constructor: DateShim }, true);\n }\n return date;\n };\n\n // 15.9.1.15 Date Time String Format.\n var isoDateExpression = new RegExp('^'\n + '(\\\\d{4}|[+-]\\\\d{6})' // four-digit year capture or sign + 6-digit extended year\n + '(?:-(\\\\d{2})' // optional month capture\n + '(?:-(\\\\d{2})' // optional day capture\n + '(?:' // capture hours:minutes:seconds.milliseconds\n + 'T(\\\\d{2})' // hours capture\n + ':(\\\\d{2})' // minutes capture\n + '(?:' // optional :seconds.milliseconds\n + ':(\\\\d{2})' // seconds capture\n + '(?:(\\\\.\\\\d{1,}))?' // milliseconds capture\n + ')?'\n + '(' // capture UTC offset component\n + 'Z|' // UTC capture\n + '(?:' // offset specifier +/-hours:minutes\n + '([-+])' // sign capture\n + '(\\\\d{2})' // hours offset capture\n + ':(\\\\d{2})' // minutes offset capture\n + ')'\n + ')?)?)?)?'\n + '$');\n\n var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n\n var dayFromMonth = function dayFromMonth(year, month) {\n var t = month > 1 ? 1 : 0;\n return (\n months[month]\n + Math.floor((year - 1969 + t) / 4)\n - Math.floor((year - 1901 + t) / 100)\n + Math.floor((year - 1601 + t) / 400)\n + (365 * (year - 1970))\n );\n };\n\n var toUTC = function toUTC(t) {\n var s = 0;\n var ms = t;\n if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {\n // work around a Safari 8/9 bug where it treats the seconds as signed\n var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;\n var sToShift = Math.floor(msToShift / 1e3);\n s += sToShift;\n ms -= sToShift * 1e3;\n }\n return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));\n };\n\n // Copy any custom methods a 3rd party library may have added\n for (var key in NativeDate) {\n if (owns(NativeDate, key)) {\n DateShim[key] = NativeDate[key];\n }\n }\n\n // Copy \"native\" methods explicitly; they may be non-enumerable\n defineProperties(DateShim, {\n now: NativeDate.now,\n UTC: NativeDate.UTC\n }, true);\n DateShim.prototype = NativeDate.prototype;\n defineProperties(DateShim.prototype, { constructor: DateShim }, true);\n\n // Upgrade Date.parse to handle simplified ISO 8601 strings\n var parseShim = function parse(string) {\n var match = isoDateExpression.exec(string);\n if (match) {\n // parse months, days, hours, minutes, seconds, and milliseconds\n // provide default values if necessary\n // parse the UTC offset component\n var year = $Number(match[1]),\n month = $Number(match[2] || 1) - 1,\n day = $Number(match[3] || 1) - 1,\n hour = $Number(match[4] || 0),\n minute = $Number(match[5] || 0),\n second = $Number(match[6] || 0),\n millisecond = Math.floor($Number(match[7] || 0) * 1000),\n // When time zone is missed, local offset should be used\n // (ES 5.1 bug)\n // see https://bugs.ecmascript.org/show_bug.cgi?id=112\n isLocalTime = Boolean(match[4] && !match[8]),\n signOffset = match[9] === '-' ? 1 : -1,\n hourOffset = $Number(match[10] || 0),\n minuteOffset = $Number(match[11] || 0),\n result;\n var hasMinutesOrSecondsOrMilliseconds = minute > 0 || second > 0 || millisecond > 0;\n if (\n hour < (hasMinutesOrSecondsOrMilliseconds ? 24 : 25)\n && minute < 60 && second < 60 && millisecond < 1000\n && month > -1 && month < 12 && hourOffset < 24\n && minuteOffset < 60 // detect invalid offsets\n && day > -1\n && day < (dayFromMonth(year, month + 1) - dayFromMonth(year, month))\n ) {\n result = (\n ((dayFromMonth(year, month) + day) * 24)\n + hour\n + (hourOffset * signOffset)\n ) * 60;\n result = ((\n ((result + minute + (minuteOffset * signOffset)) * 60)\n + second\n ) * 1000) + millisecond;\n if (isLocalTime) {\n result = toUTC(result);\n }\n if (-8.64e15 <= result && result <= 8.64e15) {\n return result;\n }\n }\n return NaN;\n }\n return NativeDate.parse.apply(this, arguments);\n };\n defineProperties(DateShim, { parse: parseShim });\n\n return DateShim;\n }(Date));\n /* global Date: false */\n }\n\n // ES5 15.9.4.4\n // http://es5.github.com/#x15.9.4.4\n if (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n }\n\n //\n // Number\n // ======\n //\n\n // ES5.1 15.7.4.5\n // http://es5.github.com/#x15.7.4.5\n var hasToFixedBugs = NumberPrototype.toFixed && (\n (0.00008).toFixed(3) !== '0.000'\n || (0.9).toFixed(0) !== '1'\n || (1.255).toFixed(2) !== '1.25'\n || (1000000000000000128).toFixed(0) !== '1000000000000000128'\n );\n\n var toFixedHelpers = {\n base: 1e7,\n size: 6,\n data: [0, 0, 0, 0, 0, 0],\n multiply: function multiply(n, c) {\n var i = -1;\n var c2 = c;\n while (++i < toFixedHelpers.size) {\n c2 += n * toFixedHelpers.data[i];\n toFixedHelpers.data[i] = c2 % toFixedHelpers.base;\n c2 = Math.floor(c2 / toFixedHelpers.base);\n }\n },\n divide: function divide(n) {\n var i = toFixedHelpers.size;\n var c = 0;\n while (--i >= 0) {\n c += toFixedHelpers.data[i];\n toFixedHelpers.data[i] = Math.floor(c / n);\n c = (c % n) * toFixedHelpers.base;\n }\n },\n numToString: function numToString() {\n var i = toFixedHelpers.size;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {\n var t = $String(toFixedHelpers.data[i]);\n if (s === '') {\n s = t;\n } else {\n s += strSlice('0000000', 0, 7 - t.length) + t;\n }\n }\n }\n return s;\n },\n pow: function pow(x, n, acc) {\n return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));\n },\n log: function log(x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n }\n return n;\n }\n };\n\n var toFixedShim = function toFixed(fractionDigits) {\n var f, x, s, m, e, z, j, k;\n\n // Test for NaN and round fractionDigits down\n f = $Number(fractionDigits);\n f = isActualNaN(f) ? 0 : Math.floor(f);\n\n if (f < 0 || f > 20) {\n throw new RangeError('Number.toFixed called with invalid number of decimals');\n }\n\n x = $Number(this);\n\n if (isActualNaN(x)) {\n return 'NaN';\n }\n\n // If it is too big or small, return the string value of the number\n if (x <= -1e21 || x >= 1e21) {\n return $String(x);\n }\n\n s = '';\n\n if (x < 0) {\n s = '-';\n x = -x;\n }\n\n m = '0';\n\n if (x > 1e-21) {\n // 1e-21 < x < 1e21\n // -70 < log2(x) < 70\n e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;\n z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));\n z *= 0x10000000000000; // Math.pow(2, 52);\n e = 52 - e;\n\n // -18 < e < 122\n // x = z / 2 ^ e\n if (e > 0) {\n toFixedHelpers.multiply(0, z);\n j = f;\n\n while (j >= 7) {\n toFixedHelpers.multiply(1e7, 0);\n j -= 7;\n }\n\n toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);\n j = e - 1;\n\n while (j >= 23) {\n toFixedHelpers.divide(1 << 23);\n j -= 23;\n }\n\n toFixedHelpers.divide(1 << j);\n toFixedHelpers.multiply(1, 1);\n toFixedHelpers.divide(2);\n m = toFixedHelpers.numToString();\n } else {\n toFixedHelpers.multiply(0, z);\n toFixedHelpers.multiply(1 << (-e), 0);\n m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);\n }\n }\n\n if (f > 0) {\n k = m.length;\n\n if (k <= f) {\n m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;\n } else {\n m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);\n }\n } else {\n m = s + m;\n }\n\n return m;\n };\n defineProperties(NumberPrototype, { toFixed: toFixedShim }, hasToFixedBugs);\n\n var hasToPrecisionUndefinedBug = (function () {\n try {\n return 1.0.toPrecision(undefined) === '1';\n } catch (e) {\n return true;\n }\n }());\n var originalToPrecision = NumberPrototype.toPrecision;\n defineProperties(NumberPrototype, {\n toPrecision: function toPrecision(precision) {\n return typeof precision === 'undefined' ? originalToPrecision.call(this) : originalToPrecision.call(this, precision);\n }\n }, hasToPrecisionUndefinedBug);\n\n //\n // String\n // ======\n //\n\n // ES5 15.5.4.14\n // http://es5.github.com/#x15.5.4.14\n\n // [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]\n // Many browsers do not split properly with regular expressions or they\n // do not perform the split correctly under obscure conditions.\n // See http://blog.stevenlevithan.com/archives/cross-browser-split\n // I've tested in many browsers and this seems to cover the deviant ones:\n // 'ab'.split(/(?:ab)*/) should be [\"\", \"\"], not [\"\"]\n // '.'.split(/(.?)(.?)/) should be [\"\", \".\", \"\", \"\"], not [\"\", \"\"]\n // 'tesst'.split(/(s)*/) should be [\"t\", undefined, \"e\", \"s\", \"t\"], not\n // [undefined, \"t\", undefined, \"e\", ...]\n // ''.split(/.?/) should be [], not [\"\"]\n // '.'.split(/()()/) should be [\".\"], not [\"\", \"\", \".\"]\n\n if (\n 'ab'.split(/(?:ab)*/).length !== 2\n || '.'.split(/(.?)(.?)/).length !== 4\n || 'tesst'.split(/(s)*/)[1] === 't'\n || 'test'.split(/(?:)/, -1).length !== 4\n || ''.split(/.?/).length\n || '.'.split(/()()/).length > 1\n ) {\n (function () {\n var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group\n var maxSafe32BitInt = Math.pow(2, 32) - 1;\n\n StringPrototype.split = function (separator, limit) {\n var string = String(this);\n if (typeof separator === 'undefined' && limit === 0) {\n return [];\n }\n\n // If `separator` is not a regex, use native split\n if (!isRegex(separator)) {\n return strSplit(this, separator, limit);\n }\n\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '')\n + (separator.multiline ? 'm' : '')\n + (separator.unicode ? 'u' : '') // in ES6\n + (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6\n lastLastIndex = 0,\n // Make `global` and avoid `lastIndex` issues by working with a copy\n separator2, match, lastIndex, lastLength;\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n if (!compliantExecNpcg) {\n // Doesn't need flags gy, but they don't hurt\n separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n }\n /* Values for `limit`, per the spec:\n * If undefined: 4294967295 // maxSafe32BitInt\n * If 0, Infinity, or NaN: 0\n * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n * If other: Type-convert, then use the above rules\n */\n var splitLimit = typeof limit === 'undefined' ? maxSafe32BitInt : ES.ToUint32(limit);\n match = separatorCopy.exec(string);\n while (match) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0].length;\n if (lastIndex > lastLastIndex) {\n pushCall(output, strSlice(string, lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for\n // nonparticipating capturing groups\n if (!compliantExecNpcg && match.length > 1) {\n /* eslint-disable no-loop-func */\n match[0].replace(separator2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (typeof arguments[i] === 'undefined') {\n match[i] = void 0;\n }\n }\n });\n /* eslint-enable no-loop-func */\n }\n if (match.length > 1 && match.index < string.length) {\n array_push.apply(output, arraySlice(match, 1));\n }\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= splitLimit) {\n break;\n }\n }\n if (separatorCopy.lastIndex === match.index) {\n separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n match = separatorCopy.exec(string);\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) {\n pushCall(output, '');\n }\n } else {\n pushCall(output, strSlice(string, lastLastIndex));\n }\n return output.length > splitLimit ? arraySlice(output, 0, splitLimit) : output;\n };\n }());\n\n // [bugfix, chrome]\n // If separator is undefined, then the result array contains just one String,\n // which is the this value (converted to a String). If limit is not undefined,\n // then the output array is truncated so that it contains no more than limit\n // elements.\n // \"0\".split(undefined, 0) -> []\n } else if ('0'.split(void 0, 0).length) {\n StringPrototype.split = function split(separator, limit) {\n if (typeof separator === 'undefined' && limit === 0) {\n return [];\n }\n return strSplit(this, separator, limit);\n };\n }\n\n var str_replace = StringPrototype.replace;\n var replaceReportsGroupsCorrectly = (function () {\n var groups = [];\n 'x'.replace(/x(.)?/g, function (match, group) {\n pushCall(groups, group);\n });\n return groups.length === 1 && typeof groups[0] === 'undefined';\n }());\n\n if (!replaceReportsGroupsCorrectly) {\n StringPrototype.replace = function replace(searchValue, replaceValue) {\n var isFn = isCallable(replaceValue);\n var hasCapturingGroups = isRegex(searchValue) && (/\\)[*?]/).test(searchValue.source);\n if (!isFn || !hasCapturingGroups) {\n return str_replace.call(this, searchValue, replaceValue);\n } else {\n var wrappedReplaceValue = function (match) {\n var length = arguments.length;\n var originalLastIndex = searchValue.lastIndex;\n searchValue.lastIndex = 0;\n var args = searchValue.exec(match) || [];\n searchValue.lastIndex = originalLastIndex;\n pushCall(args, arguments[length - 2], arguments[length - 1]);\n return replaceValue.apply(this, args);\n };\n return str_replace.call(this, searchValue, wrappedReplaceValue);\n }\n };\n }\n\n // ECMA-262, 3rd B.2.3\n // Not an ECMAScript standard, although ECMAScript 3rd Edition has a\n // non-normative section suggesting uniform semantics and it should be\n // normalized across all browsers\n // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE\n var string_substr = StringPrototype.substr;\n var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';\n defineProperties(StringPrototype, {\n substr: function substr(start, length) {\n var normalizedStart = start;\n if (start < 0) {\n normalizedStart = max(this.length + start, 0);\n }\n return string_substr.call(this, normalizedStart, length);\n }\n }, hasNegativeSubstrBug);\n\n // ES5 15.5.4.20\n // whitespace from: http://es5.github.io/#x15.5.4.20\n var ws = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003'\n + '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028'\n + '\\u2029\\uFEFF';\n var zeroWidth = '\\u200b';\n var wsRegexChars = '[' + ws + ']';\n var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');\n var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');\n var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());\n defineProperties(StringPrototype, {\n // http://blog.stevenlevithan.com/archives/faster-trim-javascript\n // http://perfectionkills.com/whitespace-deviations/\n trim: function trim() {\n if (typeof this === 'undefined' || this === null) {\n throw new TypeError(\"can't convert \" + this + ' to object');\n }\n return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');\n }\n }, hasTrimWhitespaceBug);\n var trim = call.bind(String.prototype.trim);\n\n var hasLastIndexBug = StringPrototype.lastIndexOf && 'abcあい'.lastIndexOf('あい', 2) !== -1;\n defineProperties(StringPrototype, {\n lastIndexOf: function lastIndexOf(searchString) {\n if (typeof this === 'undefined' || this === null) {\n throw new TypeError(\"can't convert \" + this + ' to object');\n }\n var S = $String(this);\n var searchStr = $String(searchString);\n var numPos = arguments.length > 1 ? $Number(arguments[1]) : NaN;\n var pos = isActualNaN(numPos) ? Infinity : ES.ToInteger(numPos);\n var start = min(max(pos, 0), S.length);\n var searchLen = searchStr.length;\n var k = start + searchLen;\n while (k > 0) {\n k = max(0, k - searchLen);\n var index = strIndexOf(strSlice(S, k, start + searchLen), searchStr);\n if (index !== -1) {\n return k + index;\n }\n }\n return -1;\n }\n }, hasLastIndexBug);\n\n var originalLastIndexOf = StringPrototype.lastIndexOf;\n defineProperties(StringPrototype, {\n lastIndexOf: function lastIndexOf(searchString) {\n return originalLastIndexOf.apply(this, arguments);\n }\n }, StringPrototype.lastIndexOf.length !== 1);\n\n // ES-5 15.1.2.2\n // eslint-disable-next-line radix\n if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {\n /* global parseInt: true */\n parseInt = (function (origParseInt) {\n var hexRegex = /^[-+]?0[xX]/;\n return function parseInt(str, radix) {\n if (typeof str === 'symbol') {\n // handle Symbols in node 8.3/8.4\n // eslint-disable-next-line no-implicit-coercion, no-unused-expressions\n '' + str; // jscs:ignore disallowImplicitTypeConversion\n }\n\n var string = trim(String(str));\n var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);\n return origParseInt(string, defaultedRadix);\n };\n }(parseInt));\n }\n\n // https://es5.github.io/#x15.1.2.3\n if (1 / parseFloat('-0') !== -Infinity) {\n /* global parseFloat: true */\n parseFloat = (function (origParseFloat) {\n return function parseFloat(string) {\n var inputString = trim(String(string));\n var result = origParseFloat(inputString);\n return result === 0 && strSlice(inputString, 0, 1) === '-' ? -0 : result;\n };\n }(parseFloat));\n }\n\n if (String(new RangeError('test')) !== 'RangeError: test') {\n var errorToStringShim = function toString() {\n if (typeof this === 'undefined' || this === null) {\n throw new TypeError(\"can't convert \" + this + ' to object');\n }\n var name = this.name;\n if (typeof name === 'undefined') {\n name = 'Error';\n } else if (typeof name !== 'string') {\n name = $String(name);\n }\n var msg = this.message;\n if (typeof msg === 'undefined') {\n msg = '';\n } else if (typeof msg !== 'string') {\n msg = $String(msg);\n }\n if (!name) {\n return msg;\n }\n if (!msg) {\n return name;\n }\n return name + ': ' + msg;\n };\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\n Error.prototype.toString = errorToStringShim;\n }\n\n if (supportsDescriptors) {\n var ensureNonEnumerable = function (obj, prop) {\n if (isEnum(obj, prop)) {\n var desc = Object.getOwnPropertyDescriptor(obj, prop);\n if (desc.configurable) {\n desc.enumerable = false;\n Object.defineProperty(obj, prop, desc);\n }\n }\n };\n ensureNonEnumerable(Error.prototype, 'message');\n if (Error.prototype.message !== '') {\n Error.prototype.message = '';\n }\n ensureNonEnumerable(Error.prototype, 'name');\n }\n\n if (String(/a/mig) !== '/a/gim') {\n var regexToString = function toString() {\n var str = '/' + this.source + '/';\n if (this.global) {\n str += 'g';\n }\n if (this.ignoreCase) {\n str += 'i';\n }\n if (this.multiline) {\n str += 'm';\n }\n return str;\n };\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\n RegExp.prototype.toString = regexToString;\n }\n}));\n\n},{}],7:[function(require,module,exports){\n/*! populate.js v1.0.2 by @dannyvankooten | MIT license */\n;(function(root) {\n\n\t/**\n\t * Populate form fields from a JSON object.\n\t *\n\t * @param form object The form element containing your input fields.\n\t * @param data array JSON data to populate the fields with.\n\t * @param basename string Optional basename which is added to `name` attributes\n\t */\n\tvar populate = function( form, data, basename) {\n\n\t\tfor(var key in data) {\n\n\t\t\tif( ! data.hasOwnProperty( key ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar name = key;\n\t\t\tvar value = data[key];\n\n if ('undefined' === typeof value) {\n value = '';\n }\n\n if (null === value) {\n value = '';\n }\n\n\t\t\t// handle array name attributes\n\t\t\tif(typeof(basename) !== \"undefined\") {\n\t\t\t\tname = basename + \"[\" + key + \"]\";\n\t\t\t}\n\n\t\t\tif(value.constructor === Array) {\n\t\t\t\tname += '[]';\n\t\t\t} else if(typeof value == \"object\") {\n\t\t\t\tpopulate( form, value, name);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// only proceed if element is set\n\t\t\tvar element = form.elements.namedItem( name );\n\t\t\tif( ! element ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar type = element.type || element[0].type;\n\n\t\t\tswitch(type ) {\n\t\t\t\tdefault:\n\t\t\t\t\telement.value = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'radio':\n\t\t\t\tcase 'checkbox':\n\t\t\t\t\tfor( var j=0; j < element.length; j++ ) {\n\t\t\t\t\t\telement[j].checked = ( value.indexOf(element[j].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select-multiple':\n\t\t\t\t\tvar values = value.constructor == Array ? value : [value];\n\n\t\t\t\t\tfor(var k = 0; k < element.options.length; k++) {\n\t\t\t\t\t\telement.options[k].selected |= (values.indexOf(element.options[k].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select':\n\t\t\t\tcase 'select-one':\n\t\t\t\t\telement.value = value.toString() || value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n \t\t\t\telement.value = new Date(value).toISOString().split('T')[0];\t\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t// Play nice with AMD, CommonJS or a plain global object.\n\tif ( typeof define == 'function' && typeof define.amd == 'object' && define.amd ) {\n\t\tdefine(function() {\n\t\t\treturn populate;\n\t\t});\n\t}\telse if ( typeof module !== 'undefined' && module.exports ) {\n\t\tmodule.exports = populate;\n\t} else {\n\t\troot.populate = populate;\n\t}\n\n}(this));\n\n},{}],8:[function(require,module,exports){\n/*!\n * EventEmitter v5.2.5 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function (exports) {\n 'use strict';\n\n /**\n * Class for managing events.\n * Can be extended to provide event functionality in other classes.\n *\n * @class EventEmitter Manages event registering and emitting.\n */\n function EventEmitter() {}\n\n // Shortcuts to improve speed and size\n var proto = EventEmitter.prototype;\n var originalGlobalValue = exports.EventEmitter;\n\n /**\n * Finds the index of the listener for the event in its storage array.\n *\n * @param {Function[]} listeners Array of listeners to search through.\n * @param {Function} listener Method to look for.\n * @return {Number} Index of the specified listener, -1 if not found\n * @api private\n */\n function indexOfListener(listeners, listener) {\n var i = listeners.length;\n while (i--) {\n if (listeners[i].listener === listener) {\n return i;\n }\n }\n\n return -1;\n }\n\n /**\n * Alias a method while keeping the context correct, to allow for overwriting of target method.\n *\n * @param {String} name The name of the target method.\n * @return {Function} The aliased method\n * @api private\n */\n function alias(name) {\n return function aliasClosure() {\n return this[name].apply(this, arguments);\n };\n }\n\n /**\n * Returns the listener array for the specified event.\n * Will initialise the event object and listener arrays if required.\n * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n * Each property in the object response is an array of listener functions.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Function[]|Object} All listener functions for the event.\n */\n proto.getListeners = function getListeners(evt) {\n var events = this._getEvents();\n var response;\n var key;\n\n // Return a concatenated array of all matching events if\n // the selector is a regular expression.\n if (evt instanceof RegExp) {\n response = {};\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n response[key] = events[key];\n }\n }\n }\n else {\n response = events[evt] || (events[evt] = []);\n }\n\n return response;\n };\n\n /**\n * Takes a list of listener objects and flattens it into a list of listener functions.\n *\n * @param {Object[]} listeners Raw listener objects.\n * @return {Function[]} Just the listener functions.\n */\n proto.flattenListeners = function flattenListeners(listeners) {\n var flatListeners = [];\n var i;\n\n for (i = 0; i < listeners.length; i += 1) {\n flatListeners.push(listeners[i].listener);\n }\n\n return flatListeners;\n };\n\n /**\n * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Object} All listener functions for an event in an object.\n */\n proto.getListenersAsObject = function getListenersAsObject(evt) {\n var listeners = this.getListeners(evt);\n var response;\n\n if (listeners instanceof Array) {\n response = {};\n response[evt] = listeners;\n }\n\n return response || listeners;\n };\n\n function isValidListener (listener) {\n if (typeof listener === 'function' || listener instanceof RegExp) {\n return true\n } else if (listener && typeof listener === 'object') {\n return isValidListener(listener.listener)\n } else {\n return false\n }\n }\n\n /**\n * Adds a listener function to the specified event.\n * The listener will not be added if it is a duplicate.\n * If the listener returns true then it will be removed after it is called.\n * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListener = function addListener(evt, listener) {\n if (!isValidListener(listener)) {\n throw new TypeError('listener must be a function');\n }\n\n var listeners = this.getListenersAsObject(evt);\n var listenerIsWrapped = typeof listener === 'object';\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n listeners[key].push(listenerIsWrapped ? listener : {\n listener: listener,\n once: false\n });\n }\n }\n\n return this;\n };\n\n /**\n * Alias of addListener\n */\n proto.on = alias('addListener');\n\n /**\n * Semi-alias of addListener. It will add a listener that will be\n * automatically removed after its first execution.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addOnceListener = function addOnceListener(evt, listener) {\n return this.addListener(evt, {\n listener: listener,\n once: true\n });\n };\n\n /**\n * Alias of addOnceListener.\n */\n proto.once = alias('addOnceListener');\n\n /**\n * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n * You need to tell it what event names should be matched by a regex.\n *\n * @param {String} evt Name of the event to create.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvent = function defineEvent(evt) {\n this.getListeners(evt);\n return this;\n };\n\n /**\n * Uses defineEvent to define multiple events.\n *\n * @param {String[]} evts An array of event names to define.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvents = function defineEvents(evts) {\n for (var i = 0; i < evts.length; i += 1) {\n this.defineEvent(evts[i]);\n }\n return this;\n };\n\n /**\n * Removes a listener function from the specified event.\n * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to remove the listener from.\n * @param {Function} listener Method to remove from the event.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListener = function removeListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var index;\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key)) {\n index = indexOfListener(listeners[key], listener);\n\n if (index !== -1) {\n listeners[key].splice(index, 1);\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of removeListener\n */\n proto.off = alias('removeListener');\n\n /**\n * Adds listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n * You can also pass it a regular expression to add the array of listeners to all events that match it.\n * Yeah, this function does quite a bit. That's probably a bad thing.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListeners = function addListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(false, evt, listeners);\n };\n\n /**\n * Removes listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be removed.\n * You can also pass it a regular expression to remove the listeners from all events that match it.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListeners = function removeListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(true, evt, listeners);\n };\n\n /**\n * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n * The first argument will determine if the listeners are removed (true) or added (false).\n * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added/removed.\n * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n *\n * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n var i;\n var value;\n var single = remove ? this.removeListener : this.addListener;\n var multiple = remove ? this.removeListeners : this.addListeners;\n\n // If evt is an object then pass each of its properties to this method\n if (typeof evt === 'object' && !(evt instanceof RegExp)) {\n for (i in evt) {\n if (evt.hasOwnProperty(i) && (value = evt[i])) {\n // Pass the single listener straight through to the singular method\n if (typeof value === 'function') {\n single.call(this, i, value);\n }\n else {\n // Otherwise pass back to the multiple function\n multiple.call(this, i, value);\n }\n }\n }\n }\n else {\n // So evt must be a string\n // And listeners must be an array of listeners\n // Loop over it and pass each one to the multiple method\n i = listeners.length;\n while (i--) {\n single.call(this, evt, listeners[i]);\n }\n }\n\n return this;\n };\n\n /**\n * Removes all listeners from a specified event.\n * If you do not specify an event then all listeners will be removed.\n * That means every event will be emptied.\n * You can also pass a regex to remove all events that match it.\n *\n * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeEvent = function removeEvent(evt) {\n var type = typeof evt;\n var events = this._getEvents();\n var key;\n\n // Remove different things depending on the state of evt\n if (type === 'string') {\n // Remove all listeners for the specified event\n delete events[evt];\n }\n else if (evt instanceof RegExp) {\n // Remove all events matching the regex.\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n delete events[key];\n }\n }\n }\n else {\n // Remove all listeners in all events\n delete this._events;\n }\n\n return this;\n };\n\n /**\n * Alias of removeEvent.\n *\n * Added to mirror the node API.\n */\n proto.removeAllListeners = alias('removeEvent');\n\n /**\n * Emits an event of your choice.\n * When emitted, every listener attached to that event will be executed.\n * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n * So they will not arrive within the array on the other side, they will be separate.\n * You can also pass a regular expression to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {Array} [args] Optional array of arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emitEvent = function emitEvent(evt, args) {\n var listenersMap = this.getListenersAsObject(evt);\n var listeners;\n var listener;\n var i;\n var key;\n var response;\n\n for (key in listenersMap) {\n if (listenersMap.hasOwnProperty(key)) {\n listeners = listenersMap[key].slice(0);\n\n for (i = 0; i < listeners.length; i++) {\n // If the listener returns true then it shall be removed from the event\n // The function is executed either with a basic call or an apply if there is an args array\n listener = listeners[i];\n\n if (listener.once === true) {\n this.removeListener(evt, listener.listener);\n }\n\n response = listener.listener.apply(this, args || []);\n\n if (response === this._getOnceReturnValue()) {\n this.removeListener(evt, listener.listener);\n }\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of emitEvent\n */\n proto.trigger = alias('emitEvent');\n\n /**\n * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {...*} Optional additional arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emit = function emit(evt) {\n var args = Array.prototype.slice.call(arguments, 1);\n return this.emitEvent(evt, args);\n };\n\n /**\n * Sets the current value to check against when executing listeners. If a\n * listeners return value matches the one set here then it will be removed\n * after execution. This value defaults to true.\n *\n * @param {*} value The new value to check for when executing listeners.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.setOnceReturnValue = function setOnceReturnValue(value) {\n this._onceReturnValue = value;\n return this;\n };\n\n /**\n * Fetches the current value to check against when executing listeners. If\n * the listeners return value matches this one then it should be removed\n * automatically. It will return true by default.\n *\n * @return {*|Boolean} The current value to check for or the default, true.\n * @api private\n */\n proto._getOnceReturnValue = function _getOnceReturnValue() {\n if (this.hasOwnProperty('_onceReturnValue')) {\n return this._onceReturnValue;\n }\n else {\n return true;\n }\n };\n\n /**\n * Fetches the events object and creates one if required.\n *\n * @return {Object} The events storage object.\n * @api private\n */\n proto._getEvents = function _getEvents() {\n return this._events || (this._events = {});\n };\n\n /**\n * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n *\n * @return {Function} Non conflicting EventEmitter class.\n */\n EventEmitter.noConflict = function noConflict() {\n exports.EventEmitter = originalGlobalValue;\n return EventEmitter;\n };\n\n // Expose the class either via AMD, CommonJS or the global object\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return EventEmitter;\n });\n }\n else if (typeof module === 'object' && module.exports){\n module.exports = EventEmitter;\n }\n else {\n exports.EventEmitter = EventEmitter;\n }\n}(typeof window !== 'undefined' ? window : this || {}));\n\n},{}]},{},[5]);\n; })();"]}
\ No newline at end of file
Plugin Name: HTML Forms
Plugin URI: https://www.htmlforms.io/#utm_source=wp-plugin&utm_medium=html-forms&utm_campaign=plugins-page
Description: Not just another forms plugin. Simple and flexible.
-Version: 1.2.0
+Version: 1.3.2
Author: ibericode
Author URI: https://ibericode.com/
License: GPL v3
$admin = new Admin\Admin( __FILE__ );
$admin->hook();
}
+
+ $gdpr = new Admin\GDPR();
+ $gdpr->hook();
}
}
}
-define( 'HTML_FORMS_VERSION', '1.2.0' );
+define( 'HTML_FORMS_VERSION', '1.3.2' );
if( ! function_exists( 'hf_get_form' ) ) {
require __DIR__ . '/vendor/autoload.php';
msgid "No form found with slug %s"
msgstr ""
-#: src/functions.php:56
+#: src/functions.php:55
msgid "Thank you! We will be in touch soon."
msgstr ""
-#: src/functions.php:57
+#: src/functions.php:56
msgid "Sorry, that email address looks invalid."
msgstr ""
-#: src/functions.php:58
+#: src/functions.php:57
msgid "Please fill in the required fields."
msgstr ""
-#: src/functions.php:59
+#: src/functions.php:58
msgid "Oops. An error occurred."
msgstr ""
msgid "Send"
msgstr ""
+#: src/Admin/GDPR.php:36
+msgid "Form submissions"
+msgstr ""
+
#: src/Admin/Table.php:110
msgid "Form"
msgstr ""
"requires": true,
"lockfileVersion": 1,
"dependencies": {
- "@browserify/acorn5-object-spread": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@browserify/acorn5-object-spread/-/acorn5-object-spread-5.0.1.tgz",
- "integrity": "sha512-sFCUPzgeEjdq3rinwy4TFXtak2YZdhqpj6MdNusxkdTFr9TXAUEYK4YQSamR8Joqt/yii1drgl5hk8q/AtJDKA==",
- "dev": true,
- "requires": {
- "acorn": "5.4.1"
- },
- "dependencies": {
- "acorn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz",
- "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==",
- "dev": true
- }
- }
- },
"@gulp-sourcemaps/identity-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.1.tgz",
- "integrity": "sha1-z6I7xYQPkQTOMqZedNt+epdLvuE=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz",
+ "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==",
"dev": true,
"requires": {
- "acorn": "5.4.1",
- "css": "2.2.1",
- "normalize-path": "2.1.1",
- "source-map": "0.5.7",
- "through2": "2.0.3"
+ "acorn": "^5.0.3",
+ "css": "^2.2.1",
+ "normalize-path": "^2.1.1",
+ "source-map": "^0.6.0",
+ "through2": "^2.0.3"
},
"dependencies": {
"acorn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz",
- "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+ "dev": true
+ },
+ "atob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "css": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz",
+ "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "source-map": "^0.1.38",
+ "source-map-resolve": "^0.5.1",
+ "urix": "^0.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "decode-uri-component": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "resolve-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "urix": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
}
},
"@gulp-sourcemaps/map-sources": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
"integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
"dev": true,
"requires": {
- "normalize-path": "2.1.1",
- "through2": "2.0.3"
+ "normalize-path": "^2.0.1",
+ "through2": "^2.0.3"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
}
},
"JSONStream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz",
- "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.3.tgz",
+ "integrity": "sha512-3Sp6WZZ/lXl+nTDoGpGWHEpTnnC6X5fnkolYZR6nwIfzbxxvA8utPWe1gCt7i0m9uVGsSz2IS8K8mJ7HmlduMg==",
"dev": true,
"requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "dependencies": {
+ "through": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ }
}
},
"abbrev": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true
},
- "acorn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
- "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=",
- "dev": true
+ "acorn-dynamic-import": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
+ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+ "dev": true
+ }
+ }
},
"acorn-node": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz",
- "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.5.2.tgz",
+ "integrity": "sha512-krFKvw/d1F17AN3XZbybIUzEY4YEPNiGo05AfP3dBlfVKrMHETKpgjpuZkSF8qDNt9UkQcqj7am8yJLseklCMg==",
"dev": true,
"requires": {
- "acorn": "5.4.1",
- "xtend": "4.0.1"
+ "acorn": "^5.7.1",
+ "acorn-dynamic-import": "^3.0.0",
+ "xtend": "^4.0.1"
},
"dependencies": {
"acorn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz",
- "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
}
},
+ "ajv": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0"
+ }
+ },
"amdefine": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
"dev": true
},
"ansi-colors": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.0.1.tgz",
- "integrity": "sha512-yopkAU0ZD/WQ56Tms3xLn6jRuX3SyUMAVi0FdmDIbmmnHW3jHiI1sQFdUl3gfVddjnrsP3Y6ywFKvCRopvoVIA==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
"dev": true,
"requires": {
- "ansi-wrap": "0.1.0"
+ "ansi-wrap": "^0.1.0"
+ },
+ "dependencies": {
+ "ansi-wrap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ }
}
},
- "ansi-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
- "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
- "dev": true
+ "ansi-gray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ },
+ "dependencies": {
+ "ansi-wrap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ }
+ }
},
"ansi-styles": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
"integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
"dev": true
},
- "ansi-wrap": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
- "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
- "dev": true
- },
"aproba": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"dev": true
},
"archy": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
"integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
"dev": true
},
- "are-we-there-yet": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
- "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
- "dev": true,
- "requires": {
- "delegates": "1.0.0",
- "readable-stream": "2.3.3"
- }
- },
- "arr-diff": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
"arr-flatten": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"dev": true
},
- "arr-union": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
"array-differ": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
"integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
"dev": true
},
"array-each": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
"integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
"dev": true
},
- "array-filter": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
- "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
- "dev": true
- },
"array-find-index": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
"integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
"dev": true
},
- "array-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
- "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
- "dev": true
- },
- "array-reduce": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
- "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
- "dev": true
- },
"array-slice": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
"dev": true
},
- "array-union": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
- "dev": true,
- "requires": {
- "array-uniq": "1.0.3"
- }
- },
"array-uniq": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
"integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
"dev": true
},
- "arrify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
- "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
- "dev": true
- },
- "asn1": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
- "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
- "dev": true
- },
- "asn1.js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz",
- "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==",
- "dev": true,
- "requires": {
- "bn.js": "4.11.8",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
- }
- },
- "assert": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
- "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
- "dev": true,
- "requires": {
- "util": "0.10.3"
- }
- },
- "assert-plus": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
- "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "array-unique": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
"assign-symbols": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
"dev": true
},
- "astw": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz",
- "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=",
- "dev": true,
- "requires": {
- "acorn": "4.0.13"
- }
- },
- "async-foreach": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
- "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
- "dev": true
- },
- "asynckit": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
- "dev": true
- },
- "atob": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz",
- "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=",
- "dev": true
- },
- "aws-sign2": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
- "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
- "dev": true
- },
"aws4": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
- "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
+ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
"dev": true
},
- "babel-code-frame": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "esutils": "2.0.2",
- "js-tokens": "3.0.2"
+ "babel-core": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
},
"dependencies": {
- "ansi-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
},
- "chalk": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "babel-generator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
"dev": true,
"requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "has-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "strip-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "supports-color": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
}
- }
- }
- },
- "babel-core": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
- "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
- "dev": true,
- "requires": {
- "babel-code-frame": "6.26.0",
- "babel-generator": "6.26.0",
- "babel-helpers": "6.24.1",
- "babel-messages": "6.23.0",
- "babel-register": "6.26.0",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0",
- "babylon": "6.18.0",
- "convert-source-map": "1.5.0",
- "debug": "2.6.9",
- "json5": "0.5.1",
- "lodash": "4.17.4",
- "minimatch": "3.0.4",
- "path-is-absolute": "1.0.1",
- "private": "0.1.8",
- "slash": "1.0.0",
- "source-map": "0.5.7"
- },
- "dependencies": {
- "convert-source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz",
- "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=",
- "dev": true
- },
- "lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
- "dev": true
- },
- "source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "babel-generator": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
- "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
- "dev": true,
- "requires": {
- "babel-messages": "6.23.0",
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0",
- "detect-indent": "4.0.0",
- "jsesc": "1.3.0",
- "lodash": "4.17.4",
- "source-map": "0.5.7",
- "trim-right": "1.0.1"
- },
- "dependencies": {
- "lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
- "dev": true
- }
- }
- },
- "babel-helpers": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
- "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0"
- }
- },
- "babel-messages": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
- "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0"
- }
- },
- "babel-plugin-transform-decorators-legacy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz",
- "integrity": "sha1-dBtY9sW86eYCfgiC2cmU8E82aSU=",
- "dev": true,
- "requires": {
- "babel-plugin-syntax-decorators": "6.13.0",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
},
- "babel-code-frame": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
- "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "babel-helpers": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "esutils": "2.0.2",
- "js-tokens": "3.0.2"
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
}
},
"babel-messages": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
"integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0"
+ "babel-runtime": "^6.22.0"
}
},
- "babel-plugin-syntax-decorators": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
- "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
- "dev": true
+ "babel-register": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ }
},
"babel-runtime": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "2.5.1",
- "regenerator-runtime": "0.11.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
"babel-template": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
"integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0",
- "babylon": "6.18.0",
- "lodash": "4.17.4"
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
}
},
"babel-traverse": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
"integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true,
"requires": {
- "babel-code-frame": "6.26.0",
- "babel-messages": "6.23.0",
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0",
- "babylon": "6.18.0",
- "debug": "2.6.9",
- "globals": "9.18.0",
- "invariant": "2.2.2",
- "lodash": "4.17.4"
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
}
},
"babel-types": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "esutils": "2.0.2",
- "lodash": "4.17.4",
- "to-fast-properties": "1.0.3"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
"babylon": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
- "chalk": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- },
"core-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
- "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
"dev": true
},
"debug": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"ms": "2.0.0"
}
},
+ "detect-indent": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
"esutils": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"dev": true
},
"globals": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
},
- "has-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "home-or-tmp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
}
},
"invariant": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
- "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"dev": true,
"requires": {
- "loose-envify": "1.3.1"
+ "loose-envify": "^1.0.0"
}
},
"js-tokens": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
},
+ "json5": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
"lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
},
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
"ms": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
+ "private": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
"regenerator-runtime": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
- "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
},
- "strip-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "repeating": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "is-finite": "^1.0.0"
}
},
- "supports-color": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
+ },
+ "source-map-support": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
}
}
},
- "babel-plugin-transform-react-jsx": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
- "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "babel-helper-builder-react-jsx": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
"dev": true,
"requires": {
- "babel-helper-builder-react-jsx": "6.26.0",
- "babel-plugin-syntax-jsx": "6.18.0",
- "babel-runtime": "6.26.0"
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "esutils": "^2.0.2"
},
"dependencies": {
- "babel-helper-builder-react-jsx": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
- "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0",
- "esutils": "2.0.2"
- }
- },
- "babel-plugin-syntax-jsx": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
- "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
- "dev": true
- },
"babel-runtime": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "2.5.1",
- "regenerator-runtime": "0.11.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
"babel-types": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "esutils": "2.0.2",
- "lodash": "4.17.4",
- "to-fast-properties": "1.0.3"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
"core-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
- "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
"dev": true
},
"esutils": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"dev": true
},
"lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
},
"regenerator-runtime": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
- "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
}
}
},
- "babel-preset-es2015": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
- "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "babel-helper-call-delegate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
"dev": true,
"requires": {
- "babel-plugin-check-es2015-constants": "6.22.0",
- "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
- "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
- "babel-plugin-transform-es2015-block-scoping": "6.26.0",
- "babel-plugin-transform-es2015-classes": "6.24.1",
- "babel-plugin-transform-es2015-computed-properties": "6.24.1",
- "babel-plugin-transform-es2015-destructuring": "6.23.0",
- "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
- "babel-plugin-transform-es2015-for-of": "6.23.0",
- "babel-plugin-transform-es2015-function-name": "6.24.1",
- "babel-plugin-transform-es2015-literals": "6.22.0",
- "babel-plugin-transform-es2015-modules-amd": "6.24.1",
- "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
- "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
- "babel-plugin-transform-es2015-modules-umd": "6.24.1",
- "babel-plugin-transform-es2015-object-super": "6.24.1",
- "babel-plugin-transform-es2015-parameters": "6.24.1",
- "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
- "babel-plugin-transform-es2015-spread": "6.22.0",
- "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
- "babel-plugin-transform-es2015-template-literals": "6.22.0",
- "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
- "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
- "babel-plugin-transform-regenerator": "6.26.0"
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
},
"dependencies": {
- "ansi-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
"babel-code-frame": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
- "chalk": "1.1.3",
- "esutils": "2.0.2",
- "js-tokens": "3.0.2"
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
}
},
- "babel-helper-call-delegate": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
- "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
- "babel-helper-hoist-variables": "6.24.1",
- "babel-runtime": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0"
+ "babel-runtime": "^6.22.0"
}
},
- "babel-helper-define-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
- "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "babel-helper-function-name": "6.24.1",
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0",
- "lodash": "4.17.4"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
- "babel-helper-function-name": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
- "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true,
"requires": {
- "babel-helper-get-function-arity": "6.24.1",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0"
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
}
},
- "babel-helper-get-function-arity": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
- "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
- "babel-helper-hoist-variables": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
- "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0"
- }
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
},
- "babel-helper-optimise-call-expression": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
- "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0"
- }
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
},
- "babel-helper-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
- "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0",
- "lodash": "4.17.4"
+ "ms": "2.0.0"
}
},
- "babel-helper-replace-supers": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
- "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
- "dev": true,
- "requires": {
- "babel-helper-optimise-call-expression": "6.24.1",
- "babel-messages": "6.23.0",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0"
- }
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
},
- "babel-messages": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
- "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0"
- }
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
},
- "babel-plugin-check-es2015-constants": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
- "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0"
+ "loose-envify": "^1.0.0"
}
},
- "babel-plugin-transform-es2015-arrow-functions": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
- "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0"
- }
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
},
- "babel-plugin-transform-es2015-block-scoped-functions": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
- "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0"
- }
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
},
- "babel-plugin-transform-es2015-block-scoping": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
- "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0",
- "lodash": "4.17.4"
- }
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
},
- "babel-plugin-transform-es2015-classes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
- "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "babel-helper-define-map": "6.26.0",
- "babel-helper-function-name": "6.24.1",
- "babel-helper-optimise-call-expression": "6.24.1",
- "babel-helper-replace-supers": "6.24.1",
- "babel-messages": "6.23.0",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
- "babel-plugin-transform-es2015-computed-properties": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
- "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
- "babel-plugin-transform-es2015-destructuring": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
- "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0"
- }
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
},
- "babel-plugin-transform-es2015-duplicate-keys": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
- "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0"
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
}
},
- "babel-plugin-transform-es2015-for-of": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
- "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0"
+ "babel-runtime": "^6.22.0"
}
},
- "babel-plugin-transform-es2015-function-name": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
- "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "babel-helper-function-name": "6.24.1",
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
- "babel-plugin-transform-es2015-literals": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
- "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0"
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
}
},
- "babel-plugin-transform-es2015-modules-amd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
- "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true,
"requires": {
- "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0"
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
}
},
- "babel-plugin-transform-es2015-modules-commonjs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
- "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-plugin-transform-strict-mode": "6.24.1",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0",
- "babel-types": "6.26.0"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
- "babel-plugin-transform-es2015-modules-systemjs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
- "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
- "dev": true,
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
"requires": {
- "babel-helper-hoist-variables": "6.24.1",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0"
+ "ms": "2.0.0"
}
},
- "babel-plugin-transform-es2015-modules-umd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
- "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"dev": true,
"requires": {
- "babel-plugin-transform-es2015-modules-amd": "6.24.1",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0"
+ "loose-envify": "^1.0.0"
}
},
- "babel-plugin-transform-es2015-object-super": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
- "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "babel-helper-replace-supers": "6.24.1",
- "babel-runtime": "6.26.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
- "babel-plugin-transform-es2015-parameters": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
- "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-helper-call-delegate": "6.24.1",
- "babel-helper-get-function-arity": "6.24.1",
- "babel-runtime": "6.26.0",
- "babel-template": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
- "babel-plugin-transform-es2015-shorthand-properties": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
- "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
- "babel-plugin-transform-es2015-spread": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
- "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
- "babel-plugin-transform-es2015-sticky-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
- "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "babel-helper-regex": "6.26.0",
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
- "babel-plugin-transform-es2015-template-literals": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
- "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
- "babel-plugin-transform-es2015-typeof-symbol": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
- "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
- "babel-plugin-transform-es2015-unicode-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
- "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-helper-regex": "6.26.0",
- "babel-runtime": "6.26.0",
- "regexpu-core": "2.0.0"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
- "babel-plugin-transform-regenerator": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
- "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
- "regenerator-transform": "0.10.1"
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
}
},
- "babel-plugin-transform-strict-mode": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
- "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0"
+ "babel-runtime": "^6.22.0"
}
},
"babel-runtime": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "core-js": "2.5.1",
- "regenerator-runtime": "0.11.0"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
"babel-template": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
"integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0",
- "babylon": "6.18.0",
- "lodash": "4.17.4"
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
}
},
"babel-traverse": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
"integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true,
"requires": {
- "babel-code-frame": "6.26.0",
- "babel-messages": "6.23.0",
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0",
- "babylon": "6.18.0",
- "debug": "2.6.9",
- "globals": "9.18.0",
- "invariant": "2.2.2",
- "lodash": "4.17.4"
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
}
},
"babel-types": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
"integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "esutils": "2.0.2",
- "lodash": "4.17.4",
- "to-fast-properties": "1.0.3"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
"babylon": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
- "chalk": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- },
"core-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz",
- "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
"dev": true
},
"debug": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
}
},
"esutils": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
"integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"dev": true
},
"globals": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
},
- "has-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
"invariant": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
- "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"dev": true,
"requires": {
- "loose-envify": "1.3.1"
+ "loose-envify": "^1.0.0"
}
},
"js-tokens": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
},
- "jsesc": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
- "dev": true
- },
"lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
},
"ms": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
- "private": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
+ }
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
},
- "regenerate": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
- "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
"dev": true
},
"regenerator-runtime": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
- "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
+ }
+ }
+ },
+ "babel-plugin-syntax-decorators": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+ "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
+ "dev": true
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
+ "dev": true
+ },
+ "babel-plugin-transform-decorators-legacy": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz",
+ "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-decorators": "^6.1.18",
+ "babel-runtime": "^6.2.0",
+ "babel-template": "^6.3.0"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
},
- "regenerator-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
- "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0",
- "private": "0.1.8"
+ "babel-runtime": "^6.22.0"
}
},
- "regexpu-core": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
- "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "regenerate": "1.3.3",
- "regjsgen": "0.2.0",
- "regjsparser": "0.1.5"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
- "regjsgen": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
- "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
- "dev": true
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
},
- "regjsparser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
- "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
"dev": true,
"requires": {
- "jsesc": "0.5.0"
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
}
},
- "strip-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
}
},
- "supports-color": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
- }
- }
- },
- "babel-register": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
- "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
- "dev": true,
- "requires": {
- "babel-core": "6.26.0",
- "babel-runtime": "6.26.0",
- "core-js": "2.5.3",
- "home-or-tmp": "2.0.0",
- "lodash": "4.17.4",
- "mkdirp": "0.5.1",
- "source-map-support": "0.4.18"
- },
- "dependencies": {
- "lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
"dev": true
- }
- }
- },
- "babel-runtime": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
- "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
- "dev": true,
- "requires": {
- "core-js": "2.5.3",
- "regenerator-runtime": "0.11.1"
- }
- },
- "babel-template": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
- "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0",
- "babylon": "6.18.0",
- "lodash": "4.17.4"
- },
- "dependencies": {
- "lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
"dev": true
- }
- }
- },
- "babel-traverse": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
- "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
- "dev": true,
- "requires": {
- "babel-code-frame": "6.26.0",
- "babel-messages": "6.23.0",
- "babel-runtime": "6.26.0",
- "babel-types": "6.26.0",
- "babylon": "6.18.0",
- "debug": "2.6.9",
- "globals": "9.18.0",
- "invariant": "2.2.2",
- "lodash": "4.17.4"
- },
- "dependencies": {
- "lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
"dev": true
- }
- }
- },
- "babel-types": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
- "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
- "dev": true,
- "requires": {
- "babel-runtime": "6.26.0",
- "esutils": "2.0.2",
- "lodash": "4.17.4",
- "to-fast-properties": "1.0.3"
- },
- "dependencies": {
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
"lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
"dev": true
- }
- }
- },
- "babelify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babelify/-/babelify-8.0.0.tgz",
- "integrity": "sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw==",
- "dev": true
- },
- "babylon": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
- "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "base64-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
- "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==",
- "dev": true
- },
- "bcrypt-pbkdf": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
- "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
- "dev": true,
- "optional": true,
- "requires": {
- "tweetnacl": "0.14.5"
- }
- },
- "beeper": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
- "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
- "dev": true
- },
- "binaryextensions": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz",
- "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U=",
- "dev": true
- },
- "bl": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz",
- "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=",
- "dev": true,
- "requires": {
- "readable-stream": "2.3.3"
- }
- },
- "block-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
- "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3"
- }
- },
- "bn.js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
- "dev": true
- },
- "boom": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
- "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
- "dev": true,
- "requires": {
- "hoek": "2.16.3"
- }
- },
- "brace-expansion": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
- "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
- "dev": true,
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "brorand": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
- "dev": true
- },
- "browser-pack": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.4.tgz",
- "integrity": "sha512-Q4Rvn7P6ObyWfc4stqLWHtG1MJ8vVtjgT24Zbu+8UTzxYuZouqZsmNRRTFVMY/Ux0eIKv1d+JWzsInTX+fdHPQ==",
- "dev": true,
- "requires": {
- "JSONStream": "1.3.2",
- "combine-source-map": "0.8.0",
- "defined": "1.0.0",
- "safe-buffer": "5.1.1",
- "through2": "2.0.3",
- "umd": "3.0.1"
- }
- },
- "browser-resolve": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz",
- "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=",
- "dev": true,
- "requires": {
- "resolve": "1.1.7"
- },
- "dependencies": {
- "resolve": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
- "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
- }
- }
- },
- "browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.0.0.tgz",
- "integrity": "sha512-+tpc/lBPrDSM/5DOPtKWCRvFDvC66lUKUmjft6JevGS/mhWJwrh/KZ+LsVqzkbTmrjeqAsGDbIQSMZCHPCzUPg==",
- "dev": true,
- "requires": {
- "JSONStream": "1.3.2",
- "assert": "1.4.1",
- "browser-pack": "6.0.4",
- "browser-resolve": "1.11.2",
- "browserify-zlib": "0.2.0",
- "buffer": "5.0.8",
- "cached-path-relative": "1.0.1",
- "concat-stream": "1.6.0",
- "console-browserify": "1.1.0",
- "constants-browserify": "1.0.0",
- "crypto-browserify": "3.12.0",
- "defined": "1.0.0",
- "deps-sort": "2.0.0",
- "domain-browser": "1.2.0",
- "duplexer2": "0.1.4",
- "events": "2.0.0",
- "glob": "7.1.2",
- "has": "1.0.1",
- "htmlescape": "1.1.1",
- "https-browserify": "1.0.0",
- "inherits": "2.0.3",
- "insert-module-globals": "7.0.1",
- "labeled-stream-splicer": "2.0.0",
- "mkdirp": "0.5.1",
- "module-deps": "6.0.0",
- "os-browserify": "0.3.0",
- "parents": "1.0.1",
- "path-browserify": "0.0.0",
- "process": "0.11.10",
- "punycode": "1.4.1",
- "querystring-es3": "0.2.1",
- "read-only-stream": "2.0.0",
- "readable-stream": "2.3.3",
- "resolve": "1.5.0",
- "shasum": "1.0.2",
- "shell-quote": "1.6.1",
- "stream-browserify": "2.0.1",
- "stream-http": "2.8.0",
- "string_decoder": "1.0.3",
- "subarg": "1.0.0",
- "syntax-error": "1.4.0",
- "through2": "2.0.3",
- "timers-browserify": "1.4.2",
- "tty-browserify": "0.0.1",
- "url": "0.11.0",
- "util": "0.10.3",
- "vm-browserify": "0.0.4",
- "xtend": "4.0.1"
- }
- },
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz",
- "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==",
- "dev": true,
- "requires": {
- "buffer-xor": "1.0.3",
- "cipher-base": "1.0.4",
- "create-hash": "1.1.3",
- "evp_bytestokey": "1.0.3",
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
- }
- },
- "browserify-cipher": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz",
- "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=",
- "dev": true,
- "requires": {
- "browserify-aes": "1.1.1",
- "browserify-des": "1.0.0",
- "evp_bytestokey": "1.0.3"
- }
- },
- "browserify-des": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz",
- "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=",
- "dev": true,
- "requires": {
- "cipher-base": "1.0.4",
- "des.js": "1.0.0",
- "inherits": "2.0.3"
- }
- },
- "browserify-rsa": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
- "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
- "dev": true,
- "requires": {
- "bn.js": "4.11.8",
- "randombytes": "2.0.6"
- }
- },
- "browserify-sign": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
- "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
- "dev": true,
- "requires": {
- "bn.js": "4.11.8",
- "browserify-rsa": "4.0.1",
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "elliptic": "6.4.0",
- "inherits": "2.0.3",
- "parse-asn1": "5.1.0"
- }
- },
- "browserify-zlib": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
- "dev": true,
- "requires": {
- "pako": "1.0.6"
- }
- },
- "buffer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz",
- "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==",
- "dev": true,
- "requires": {
- "base64-js": "1.2.1",
- "ieee754": "1.1.8"
- }
- },
- "buffer-xor": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
- "dev": true
- },
- "builtin-modules": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
- "dev": true
- },
- "builtin-status-codes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
- "dev": true
- },
- "cached-path-relative": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
- "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
- "dev": true
- },
- "camelcase-keys": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
- "dev": true,
- "requires": {
- "camelcase": "2.1.1",
- "map-obj": "1.0.1"
- },
- "dependencies": {
- "camelcase": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
}
}
},
- "caseless": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
- "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
- "dev": true
- },
- "chalk": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
"dev": true,
"requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
+ "babel-runtime": "^6.22.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
- "has-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
},
- "strip-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
},
- "supports-color": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
"dev": true
}
}
},
- "cipher-base": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
- }
- },
- "clean-css": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
- "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
"dev": true,
"requires": {
- "commander": "2.8.1",
- "source-map": "0.4.4"
+ "babel-runtime": "^6.22.0"
},
"dependencies": {
- "source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
}
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
}
}
},
- "cliui": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
"dev": true,
"requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wrap-ansi": "2.1.0"
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
},
"dependencies": {
- "ansi-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
},
- "strip-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "babel-runtime": "^6.22.0"
}
- }
- }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "^6.24.1",
+ "babel-helper-function-name": "^6.24.1",
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
+ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-types": "^6.26.0"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "^6.24.1",
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "regexpu-core": "^2.0.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-react-jsx": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-react-jsx": "^6.24.1",
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.10.0"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-es2015": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "^6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
+ "babel-plugin-transform-es2015-classes": "^6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "^6.22.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
+ "babel-plugin-transform-es2015-for-of": "^6.22.0",
+ "babel-plugin-transform-es2015-function-name": "^6.24.1",
+ "babel-plugin-transform-es2015-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
+ "babel-plugin-transform-es2015-object-super": "^6.24.1",
+ "babel-plugin-transform-es2015-parameters": "^6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-spread": "^6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
+ "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
+ "babel-plugin-transform-regenerator": "^6.24.1"
+ }
+ },
+ "babelify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babelify/-/babelify-8.0.0.tgz",
+ "integrity": "sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ },
+ "dependencies": {
+ "tweetnacl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "beeper": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "bl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
+ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "block-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "concat-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ }
+ }
+ },
+ "braces": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-pack": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "umd": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.2.tgz",
+ "integrity": "sha512-fMES05wq1Oukts6ksGUU2TMVHHp06LyQt0SIwbXIHm7waSrQmNBZePsU0iM/4f94zbvb/wHma+D1YrdzWYnF/A==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "^5.0.2",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp": "^0.5.0",
+ "module-deps": "^6.0.0",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^2.0.0",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "array-filter": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+ "dev": true
+ },
+ "array-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "dev": true
+ },
+ "array-reduce": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "bn.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "browser-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-rsa": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz",
+ "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "create-ecdh": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "crypto-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "deps-sort": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
+ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "shasum": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "diffie-hellman": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "duplexer2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "elliptic": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "hash-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "insert-module-globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz",
+ "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "labeled-stream-splicer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "isarray": "^2.0.4",
+ "stream-splicer": "^2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz",
+ "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==",
+ "dev": true
+ }
+ }
+ },
+ "miller-rabin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "os-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "dev": true
+ },
+ "parse-asn1": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
+ }
+ },
+ "path-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "dev": true
+ },
+ "pbkdf2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
+ "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "process": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
+ "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "querystring": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "read-only-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "ripemd160": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "shell-quote": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "dev": true,
+ "requires": {
+ "array-filter": "~0.0.0",
+ "array-map": "~0.0.0",
+ "array-reduce": "~0.0.0",
+ "jsonify": "~0.0.0"
+ }
+ },
+ "stream-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-splicer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
+ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz",
+ "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "buffer-from": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
+ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "cached-path-relative": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
+ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "cipher-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "arr-union": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz",
+ "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^1.0.6",
+ "through2": "^2.0.1"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
},
- "clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
- "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "co": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
"dev": true
},
- "clone-buffer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
- "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "code-point-at": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "codemirror": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.39.2.tgz",
+ "integrity": "sha512-mchBy0kQ1Wggi+e58SmoLgKO4nG7s/BqNg6/6TRbhsnXI/KRG+fKAvRQ1LLhZZ6ZtUoDQ0dl5aMhE+IkSRh60Q=="
+ },
+ "collection-visit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-support": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "combine-source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "lodash.memoize": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "component-emitter": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "typedarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ },
+ "dependencies": {
+ "date-now": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ }
+ }
+ },
+ "convert-source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
"dev": true
},
- "clone-stats": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
- "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "copy-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true
},
- "cloneable-readable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz",
- "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=",
+ "create-hash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "ripemd160": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "create-hmac": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ripemd160": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ }
+ }
+ },
+ "d": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "^0.10.9"
+ },
+ "dependencies": {
+ "es5-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
+ "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "1"
+ }
+ },
+ "es6-iterator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ }
+ }
+ },
+ "dateformat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "get-stdin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "meow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "object-assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ }
+ }
+ },
+ "debug-fabulous": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz",
+ "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "process-nextick-args": "1.0.7",
- "through2": "2.0.3"
+ "debug": "3.X",
+ "memoizee": "0.4.X",
+ "object-assign": "4.X"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "es6-weak-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.14",
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "event-emitter": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "is-promise": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "lru-queue": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+ "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "~0.10.2"
+ }
+ },
+ "memoizee": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz",
+ "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.30",
+ "es6-weak-map": "^2.0.2",
+ "event-emitter": "^0.3.5",
+ "is-promise": "^2.1",
+ "lru-queue": "0.1",
+ "next-tick": "1",
+ "timers-ext": "^0.1.2"
+ }
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "timers-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz",
+ "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==",
+ "dev": true,
+ "requires": {
+ "es5-ext": "~0.10.14",
+ "next-tick": "1"
+ }
+ }
}
},
- "code-point-at": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "decamelize": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
},
- "codemirror": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.34.0.tgz",
- "integrity": "sha512-7ke9DJB350sChxq1skTmotVZsJtiJo1ihC41rq8IyOMZv47Z1AQygoevWHs0PJTw2eBphmB7gA3AbPrVrnfwPw=="
+ "decko": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz",
+ "integrity": "sha1-/UPHNelnuAEzBohKVvvmZZlraBc="
},
- "combine-source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
- "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "defaults": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
"dev": true,
"requires": {
- "convert-source-map": "1.1.3",
- "inline-source-map": "0.6.2",
- "lodash.memoize": "3.0.4",
- "source-map": "0.5.7"
+ "clone": "^1.0.2"
}
},
- "combined-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
- "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
"requires": {
- "delayed-stream": "1.0.0"
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
}
},
- "commander": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
- "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
- "dev": true,
- "requires": {
- "graceful-readlink": "1.0.1"
- }
+ "defined": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
},
- "concat-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "delegates": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"dev": true
},
- "concat-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz",
- "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3",
- "typedarray": "0.0.6"
- }
+ "deprecated": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+ "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "dev": true
},
- "console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
- "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "des.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
"dev": true,
"requires": {
- "date-now": "0.1.4"
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
}
},
- "console-control-strings": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "detect-file": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
"dev": true
},
- "constants-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
- "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
- "dev": true
+ "detective": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz",
+ "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.3.0",
+ "defined": "^1.0.0"
+ }
},
- "convert-source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
- "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "domain-browser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
"dev": true
},
- "core-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz",
- "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=",
+ "duplexer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
"dev": true
},
- "core-util-is": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "end-of-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
"dev": true
},
- "create-ecdh": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz",
- "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=",
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "elliptic": "6.4.0"
+ "is-arrayish": "^0.2.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ }
}
},
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz",
- "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=",
+ "es5-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
+ "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
"dev": true,
"requires": {
- "cipher-base": "1.0.4",
- "inherits": "2.0.3",
- "ripemd160": "2.0.1",
- "sha.js": "2.4.10"
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "1"
+ },
+ "dependencies": {
+ "es6-iterator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ }
}
},
- "create-hmac": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz",
- "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=",
- "dev": true,
- "requires": {
- "cipher-base": "1.0.4",
- "create-hash": "1.1.3",
- "inherits": "2.0.3",
- "ripemd160": "2.0.1",
- "safe-buffer": "5.1.1",
- "sha.js": "2.4.10"
- }
+ "es5-shim": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.10.tgz",
+ "integrity": "sha512-vmryBdqKRO8Ei9LJ4yyEk/EOmAOGIagcHDYPpTAi6pot4IMHS1AC2q5cTKPmydpijg2iX8DVmCuqgrNxIWj8Yg=="
+ },
+ "escape-string-regexp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
},
- "cross-spawn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
- "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "event-stream": {
+ "version": "1.3.2",
+ "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
+ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
"dev": true,
"requires": {
- "lru-cache": "4.1.1",
- "which": "1.3.0"
+ "duplexer": "~0.1.1",
+ "from": "~0",
+ "map-stream": "~0.1.0",
+ "pause-stream": "0.0.11",
+ "split": "0.3",
+ "stream-combiner": "~0.0.4",
+ "through": "~2.3.1"
+ },
+ "dependencies": {
+ "map-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
+ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ }
}
},
- "cryptiles": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
- "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "events": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
+ "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
"dev": true,
"requires": {
- "boom": "2.10.1"
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
- "crypto-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "expand-brackets": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
- "browserify-cipher": "1.0.0",
- "browserify-sign": "4.0.4",
- "create-ecdh": "4.0.0",
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "diffie-hellman": "5.0.2",
- "inherits": "2.0.3",
- "pbkdf2": "3.0.14",
- "public-encrypt": "4.0.0",
- "randombytes": "2.0.6",
- "randomfill": "1.0.3"
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
}
},
- "css": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz",
- "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=",
+ "extglob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "source-map": "0.1.43",
- "source-map-resolve": "0.3.1",
- "urix": "0.1.0"
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
},
"dependencies": {
- "source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
- "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
}
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
}
}
},
- "currently-unhandled": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "fancy-log": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
"dev": true,
"requires": {
- "array-find-index": "1.0.2"
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "time-stamp": "^1.0.0"
}
},
- "d": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
- "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
- "dev": true,
- "requires": {
- "es5-ext": "0.10.38"
- }
+ "fast-deep-equal": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
},
- "dashdash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "fill-range": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0"
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
},
"dependencies": {
- "assert-plus": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
"dev": true
}
}
},
- "date-now": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
- "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "find-index": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+ "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
"dev": true
},
- "dateformat": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
- "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
- "dev": true,
- "requires": {
- "get-stdin": "4.0.1",
- "meow": "3.7.0"
- }
- },
- "debug": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "find-up": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pinkie": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ }
}
},
- "debug-fabulous": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.0.0.tgz",
- "integrity": "sha512-dsd50qQ1atDeurcxL7XOjPp4nZCGZzWIONDujDXzl1atSyC3hMbZD+v6440etw+Vt0Pr8ce4TQzHfX3KZM05Mw==",
+ "findup-sync": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
"dev": true,
"requires": {
- "debug": "3.1.0",
- "memoizee": "0.4.11",
- "object-assign": "4.1.1"
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
},
"dependencies": {
- "debug": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
- "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "is-extglob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
- "ms": "2.0.0"
+ "is-extglob": "^2.1.0"
}
}
}
},
- "decko": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz",
- "integrity": "sha1-/UPHNelnuAEzBohKVvvmZZlraBc="
- },
- "defaults": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "fined": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
"dev": true,
"requires": {
- "clone": "1.0.3"
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ },
+ "dependencies": {
+ "expand-tilde": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
}
},
- "defined": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
- "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "first-chunk-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
"dev": true
},
- "delayed-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "flagged-respawn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
+ "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
"dev": true
},
- "delegates": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "for-in": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
"dev": true
},
- "deps-sort": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
- "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
+ "for-own": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
- "shasum": "1.0.2",
- "subarg": "1.0.0",
- "through2": "2.0.3"
+ "for-in": "^1.0.1"
}
},
- "des.js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
- "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "fragment-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
+ "map-cache": "^0.2.2"
+ },
+ "dependencies": {
+ "map-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ }
}
},
- "detect-indent": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
- "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
- "dev": true,
- "requires": {
- "repeating": "2.0.1"
- }
+ "from": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+ "dev": true
},
- "detect-newline": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
- "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "fs.realpath": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
- "detective": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/detective/-/detective-5.0.2.tgz",
- "integrity": "sha512-NUsLoezj4wb9o7vpxS9F3L5vcO87ceyRBcl48op06YFNwkyIEY997JpSCA5lDlDuDc6JxOtaL5qfK3muoWxpMA==",
+ "fstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
"dev": true,
"requires": {
- "@browserify/acorn5-object-spread": "5.0.1",
- "acorn": "5.4.1",
- "defined": "1.0.0"
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
},
"dependencies": {
- "acorn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz",
- "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==",
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
+ },
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "rimraf": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
}
}
},
- "diffie-hellman": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz",
- "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=",
+ "function-bind": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gaze": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
+ "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "miller-rabin": "4.0.1",
- "randombytes": "2.0.6"
+ "globule": "^1.0.0"
}
},
- "dir-glob": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
- "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+ "get-assigned-identifiers": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
"dev": true,
"requires": {
- "arrify": "1.0.1",
- "path-type": "3.0.0"
+ "glob": "^4.3.1",
+ "glob2base": "^0.0.12",
+ "minimatch": "^2.0.1",
+ "ordered-read-streams": "^0.1.0",
+ "through2": "^0.6.1",
+ "unique-stream": "^1.0.0"
},
"dependencies": {
- "path-type": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
"dev": true,
"requires": {
- "pify": "3.0.0"
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
}
},
- "pify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
}
},
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true
- },
- "duplexer2": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
- "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "glob-watcher": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
"dev": true,
"requires": {
- "readable-stream": "2.3.3"
+ "gaze": "^0.5.1"
+ },
+ "dependencies": {
+ "gaze": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true,
+ "requires": {
+ "globule": "~0.1.0"
+ }
+ },
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "~1.2.0",
+ "minimatch": "~0.2.11"
+ }
+ },
+ "globule": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "requires": {
+ "glob": "~3.1.21",
+ "lodash": "~1.0.1",
+ "minimatch": "~0.2.11"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ }
+ },
+ "sigmund": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ }
}
},
- "ecc-jsbn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
- "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "glob2base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
"dev": true,
- "optional": true,
"requires": {
- "jsbn": "0.1.1"
+ "find-index": "^0.1.1"
}
},
- "elliptic": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
- "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "global-modules": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "brorand": "1.1.0",
- "hash.js": "1.1.3",
- "hmac-drbg": "1.0.1",
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0",
- "minimalistic-crypto-utils": "1.0.1"
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "dependencies": {
+ "is-windows": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ }
}
},
- "error-ex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
- "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "global-prefix": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
"dev": true,
"requires": {
- "is-arrayish": "0.2.1"
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "dependencies": {
+ "expand-tilde": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "ini": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ }
}
},
- "es5-ext": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz",
- "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==",
+ "globule": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
+ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
"dev": true,
"requires": {
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
+ "glob": "~7.1.1",
+ "lodash": "~4.17.4",
+ "minimatch": "~3.0.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
}
},
- "es5-shim": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.10.tgz",
- "integrity": "sha512-vmryBdqKRO8Ei9LJ4yyEk/EOmAOGIagcHDYPpTAi6pot4IMHS1AC2q5cTKPmydpijg2iX8DVmCuqgrNxIWj8Yg=="
- },
- "es6-iterator": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "glogg": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.38",
- "es6-symbol": "3.1.1"
+ "sparkles": "^1.0.0"
}
},
- "es6-symbol": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
- "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
- "dev": true,
- "requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.38"
- }
+ "graceful-readlink": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
},
- "es6-weak-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
- "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "gulp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.38",
- "es6-iterator": "2.0.3",
- "es6-symbol": "3.1.1"
+ "archy": "^1.0.0",
+ "chalk": "^1.0.0",
+ "deprecated": "^0.0.1",
+ "gulp-util": "^3.0.0",
+ "interpret": "^1.0.0",
+ "liftoff": "^2.1.0",
+ "orchestrator": "^0.3.0",
+ "pretty-hrtime": "^1.0.0",
+ "semver": "^4.1.0",
+ "tildify": "^1.0.0",
+ "v8flags": "^2.0.2",
+ "vinyl-fs": "^0.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ }
}
},
- "escape-string-regexp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "esutils": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
- "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
- "dev": true
- },
- "event-emitter": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
- "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "gulp-babel": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-7.0.1.tgz",
+ "integrity": "sha512-UqHS3AdxZyJCRxqnAX603Dj3k/Wx6hzcgmav3QcxvsIFq3Y8ZkU7iXd0O+JwD5ivqCc6o0r1S7tCB/xxLnuSNw==",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.38"
+ "plugin-error": "^1.0.1",
+ "replace-ext": "0.0.1",
+ "through2": "^2.0.0",
+ "vinyl-sourcemaps-apply": "^0.2.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.1"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
}
},
- "event-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
- "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
+ "gulp-cssmin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-cssmin/-/gulp-cssmin-0.2.0.tgz",
+ "integrity": "sha1-h6s8ad05sg1dljVcZQStakR7HnI=",
"dev": true,
"requires": {
- "duplexer": "0.1.1",
- "from": "0.1.7",
- "map-stream": "0.1.0",
- "pause-stream": "0.0.11",
- "split": "0.3.3",
- "stream-combiner": "0.0.4",
- "through": "2.3.8"
+ "clean-css": "^3.1.9",
+ "filesize": "~2.0.0",
+ "graceful-fs": "~4.1.4",
+ "gulp-rename": "~1.1.0",
+ "gulp-util": "~2.2.0",
+ "map-stream": "0.0.4",
+ "temp-write": "~0.1.0"
},
"dependencies": {
- "duplexer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
- "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+ "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^1.1.0",
+ "escape-string-regexp": "^1.0.0",
+ "has-ansi": "^0.1.0",
+ "strip-ansi": "^0.3.0",
+ "supports-color": "^0.2.0"
+ }
+ },
+ "clean-css": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
+ "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+ "dev": true,
+ "requires": {
+ "commander": "2.8.x",
+ "source-map": "0.4.x"
+ }
+ },
+ "clone-stats": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "commander": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.1.9"
+ }
+ },
+ "filesize": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-2.0.4.tgz",
+ "integrity": "sha1-eAWUHGD83+Y/RtfqNYxZreEcEyU=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "gulp-rename": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.1.0.tgz",
+ "integrity": "sha1-kwkKqvTThsB/IFOKaIjxXvunJ6E=",
+ "dev": true,
+ "requires": {
+ "map-stream": ">=0.0.4"
+ }
+ },
+ "gulp-util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
+ "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
+ "dev": true,
+ "requires": {
+ "chalk": "^0.5.0",
+ "dateformat": "^1.0.7-1.2.3",
+ "lodash._reinterpolate": "^2.4.1",
+ "lodash.template": "^2.4.1",
+ "minimist": "^0.2.0",
+ "multipipe": "^0.1.0",
+ "through2": "^0.5.0",
+ "vinyl": "^0.2.1"
+ }
+ },
+ "has-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^0.2.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "lodash._escapehtmlchar": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz",
+ "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=",
+ "dev": true,
+ "requires": {
+ "lodash._htmlescapes": "~2.4.1"
+ }
+ },
+ "lodash._escapestringchar": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz",
+ "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=",
+ "dev": true
+ },
+ "lodash._htmlescapes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz",
+ "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=",
+ "dev": true
+ },
+ "lodash._isnative": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
+ "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=",
+ "dev": true
+ },
+ "lodash._objecttypes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
+ "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+ "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
+ "dev": true
+ },
+ "lodash._reunescapedhtml": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz",
+ "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=",
+ "dev": true,
+ "requires": {
+ "lodash._htmlescapes": "~2.4.1",
+ "lodash.keys": "~2.4.1"
+ }
+ },
+ "lodash._shimkeys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
+ "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
+ "dev": true,
+ "requires": {
+ "lodash._objecttypes": "~2.4.1"
+ }
+ },
+ "lodash.defaults": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz",
+ "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=",
+ "dev": true,
+ "requires": {
+ "lodash._objecttypes": "~2.4.1",
+ "lodash.keys": "~2.4.1"
+ }
+ },
+ "lodash.escape": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+ "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+ "dev": true,
+ "requires": {
+ "lodash._escapehtmlchar": "~2.4.1",
+ "lodash._reunescapedhtml": "~2.4.1",
+ "lodash.keys": "~2.4.1"
+ }
+ },
+ "lodash.isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
+ "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
+ "dev": true,
+ "requires": {
+ "lodash._objecttypes": "~2.4.1"
+ }
+ },
+ "lodash.keys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+ "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+ "dev": true,
+ "requires": {
+ "lodash._isnative": "~2.4.1",
+ "lodash._shimkeys": "~2.4.1",
+ "lodash.isobject": "~2.4.1"
+ }
+ },
+ "lodash.template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+ "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+ "dev": true,
+ "requires": {
+ "lodash._escapestringchar": "~2.4.1",
+ "lodash._reinterpolate": "~2.4.1",
+ "lodash.defaults": "~2.4.1",
+ "lodash.escape": "~2.4.1",
+ "lodash.keys": "~2.4.1",
+ "lodash.templatesettings": "~2.4.1",
+ "lodash.values": "~2.4.1"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+ "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~2.4.1",
+ "lodash.escape": "~2.4.1"
+ }
+ },
+ "lodash.values": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
+ "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
+ "dev": true,
+ "requires": {
+ "lodash.keys": "~2.4.1"
+ }
+ },
+ "map-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.4.tgz",
+ "integrity": "sha1-XsbekCE+9sey65Nn6a3o2k79tos=",
"dev": true
},
- "from": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
- "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+ "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
"dev": true
},
- "map-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
- "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+ "multipipe": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
},
- "pause-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
- "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
"dev": true,
"requires": {
- "through": "2.3.8"
+ "ansi-regex": "^0.2.1"
}
},
- "split": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
- "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+ "supports-color": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+ "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
+ "dev": true
+ },
+ "temp-write": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-0.1.1.tgz",
+ "integrity": "sha1-C2Rng43Xf79/YqDJPah5cy/9qTI=",
"dev": true,
"requires": {
- "through": "2.3.8"
+ "graceful-fs": "~2.0.0",
+ "tempfile": "~0.1.2"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz",
+ "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=",
+ "dev": true
+ }
}
},
- "stream-combiner": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
- "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
+ "tempfile": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.3.tgz",
+ "integrity": "sha1-fWtxAEcznTn4RzJ6BW2t8YMQMBA=",
"dev": true,
"requires": {
- "duplexer": "0.1.1"
+ "uuid": "~1.4.0"
}
},
- "through": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+ "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.0.17",
+ "xtend": "~3.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ }
+ }
+ },
+ "uuid": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz",
+ "integrity": "sha1-RTAZ9oaWam34PNxSROfJkOzDMvw=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+ "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+ "dev": true,
+ "requires": {
+ "clone-stats": "~0.0.1"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
"dev": true
}
}
},
- "events": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/events/-/events-2.0.0.tgz",
- "integrity": "sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg==",
- "dev": true
- },
- "evp_bytestokey": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "requires": {
- "md5.js": "1.3.4",
- "safe-buffer": "5.1.1"
- }
- },
- "expand-tilde": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "1.0.1"
- }
- },
- "extend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
- "dev": true
- },
- "extend-shallow": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "1.0.0",
- "is-extendable": "1.0.1"
- }
- },
- "extsprintf": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "dev": true
- },
- "filesize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-2.0.4.tgz",
- "integrity": "sha1-eAWUHGD83+Y/RtfqNYxZreEcEyU=",
- "dev": true
- },
- "find-up": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "2.1.0",
- "pinkie-promise": "2.0.1"
- }
- },
- "fined": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
- "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
- "dev": true,
- "requires": {
- "expand-tilde": "2.0.2",
- "is-plain-object": "2.0.4",
- "object.defaults": "1.1.0",
- "object.pick": "1.3.0",
- "parse-filepath": "1.0.1"
- }
- },
- "first-chunk-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
- "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
- "dev": true
- },
- "for-in": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "for-own": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
- "dev": true,
- "requires": {
- "for-in": "1.0.2"
- }
- },
- "forever-agent": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "dev": true
- },
- "form-data": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
- "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
- "dev": true,
- "requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.5",
- "mime-types": "2.1.17"
- }
- },
- "fs.realpath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fstream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
- "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "gulp-insert": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-insert/-/gulp-insert-0.5.0.tgz",
+ "integrity": "sha1-MjE/E+SiPPWsylzl8MCAkjx3hgI=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.2"
+ "streamqueue": "0.0.6"
}
},
- "function-bind": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "gulp-rename": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
+ "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
"dev": true
},
- "gauge": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "gulp-replace": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.6.1.tgz",
+ "integrity": "sha1-Eb+Mj85TPjPi9qjy9DC5VboL4GY=",
"dev": true,
"requires": {
- "aproba": "1.2.0",
- "console-control-strings": "1.1.0",
- "has-unicode": "2.0.1",
- "object-assign": "4.1.1",
- "signal-exit": "3.0.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wide-align": "1.1.2"
+ "istextorbinary": "1.0.2",
+ "readable-stream": "^2.0.1",
+ "replacestream": "^4.0.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "binaryextensions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz",
+ "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U=",
"dev": true
},
- "strip-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "istextorbinary": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz",
+ "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "binaryextensions": "~1.0.0",
+ "textextensions": "~1.0.0"
}
- }
- }
- },
- "gaze": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
- "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
- "dev": true,
- "requires": {
- "globule": "1.2.0"
- }
- },
- "generate-function": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
- "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
- "dev": true
- },
- "generate-object-property": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
- "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
- "dev": true,
- "requires": {
- "is-property": "1.0.2"
- }
- },
- "get-caller-file": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
- "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
- "dev": true
- },
- "get-stdin": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
- "dev": true
- },
- "getpass": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dev": true,
- "requires": {
- "assert-plus": "1.0.0"
- },
- "dependencies": {
- "assert-plus": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ },
+ "object-assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"dev": true
- }
- }
- },
- "glob": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
- "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "globals": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
- "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
- "dev": true
- },
- "globby": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
- "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
- "dev": true,
- "requires": {
- "array-union": "1.0.2",
- "dir-glob": "2.0.0",
- "glob": "7.1.2",
- "ignore": "3.3.7",
- "pify": "3.0.0",
- "slash": "1.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
- }
- }
- },
- "globule": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
- "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
- "dev": true,
- "requires": {
- "glob": "7.1.2",
- "lodash": "4.17.4",
- "minimatch": "3.0.4"
- },
- "dependencies": {
- "lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "replacestream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
+ "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.3",
+ "object-assign": "^4.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "textextensions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-1.0.2.tgz",
+ "integrity": "sha1-ZUhjk+4fK7A5pgy7oFsLaL2VAdI=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
}
}
},
- "glogg": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz",
- "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=",
- "dev": true,
- "requires": {
- "sparkles": "1.0.0"
- }
- },
- "graceful-fs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
- "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
- "dev": true
- },
- "graceful-readlink": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
- "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
- "dev": true
- },
- "gulp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
- "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
- "dev": true,
- "requires": {
- "archy": "1.0.0",
- "chalk": "1.1.3",
- "deprecated": "0.0.1",
- "gulp-util": "3.0.8",
- "interpret": "1.0.4",
- "liftoff": "2.3.0",
- "minimist": "1.2.0",
- "orchestrator": "0.3.8",
- "pretty-hrtime": "1.0.3",
- "semver": "4.3.6",
- "tildify": "1.2.0",
- "v8flags": "2.1.1",
- "vinyl-fs": "0.3.14"
+ "gulp-sass": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-4.0.1.tgz",
+ "integrity": "sha512-OMQEgWNggpog8Tc5v1MuI6eo+5iiPkVeLL76iBhDoEEScLUPfZlpvzmgTnLkpcqdrNodZxpz5qcv6mS2rulk3g==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.0",
+ "lodash.clonedeep": "^4.3.2",
+ "node-sass": "^4.8.3",
+ "plugin-error": "^1.0.1",
+ "replace-ext": "^1.0.0",
+ "strip-ansi": "^4.0.0",
+ "through2": "^2.0.0",
+ "vinyl-sourcemaps-apply": "^0.2.0"
},
"dependencies": {
- "arr-diff": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
- "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "are-we-there-yet": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "asn1": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"dev": true,
"requires": {
- "arr-flatten": "1.1.0"
+ "safer-buffer": "~2.1.0"
}
},
- "array-unique": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
- "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "async-foreach": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
"dev": true
},
- "braces": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
- "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+ "boom": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"requires": {
- "expand-range": "1.8.2",
- "preserve": "0.2.0",
- "repeat-element": "1.1.2"
+ "hoek": "2.x.x"
}
},
- "clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
- "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "camelcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
"dev": true
},
- "clone-stats": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
- "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "camelcase-keys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "caseless": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"dev": true
},
- "deprecated": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
- "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "chalk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cliui": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
+ "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.1"
+ }
+ },
+ "color-name": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
"dev": true
},
- "detect-file": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz",
- "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=",
+ "combined-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
"dev": true,
"requires": {
- "fs-exists-sync": "0.1.0"
+ "delayed-stream": "~1.0.0"
}
},
- "end-of-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
- "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+ "console-control-strings": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
"dev": true,
"requires": {
- "once": "1.3.3"
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
}
},
- "expand-brackets": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
- "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+ "cryptiles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"dev": true,
"requires": {
- "is-posix-bracket": "0.1.1"
+ "boom": "2.x.x"
}
},
- "expand-range": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
- "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+ "dashdash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"dev": true,
"requires": {
- "fill-range": "2.2.3"
+ "assert-plus": "^1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
}
},
- "expand-tilde": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz",
- "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=",
+ "delayed-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"dev": true,
+ "optional": true,
"requires": {
- "os-homedir": "1.0.2"
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
}
},
"extend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
- "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "gauge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "get-stdin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
"dev": true
},
- "extglob": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
- "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+ "har-validator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true,
+ "requires": {
+ "ajv": "^4.9.1",
+ "har-schema": "^1.0.5"
+ }
+ },
+ "has-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "ansi-regex": "^2.0.0"
}
},
- "filename-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
- "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+ "has-flag": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-unicode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"dev": true
},
- "fill-range": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
- "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+ "hawk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
"dev": true,
"requires": {
- "is-number": "2.1.0",
- "isobject": "2.1.0",
- "randomatic": "1.1.7",
- "repeat-element": "1.1.2",
- "repeat-string": "1.6.1"
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
}
},
- "find-index": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
- "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+ "hoek": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
"dev": true
},
- "findup-sync": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz",
- "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=",
+ "http-signature": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
"dev": true,
"requires": {
- "detect-file": "0.1.0",
- "is-glob": "2.0.1",
- "micromatch": "2.3.11",
- "resolve-dir": "0.1.1"
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
},
- "flagged-respawn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz",
- "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=",
+ "in-publish": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+ "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz",
+ "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==",
+ "dev": true
+ },
+ "jsbn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "json-stringify-safe": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.mergewith": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
+ "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==",
"dev": true
},
- "for-own": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
- "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "lru-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "meow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
"dev": true,
"requires": {
- "for-in": "1.0.2"
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
}
},
- "fs-exists-sync": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz",
- "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=",
+ "mime-db": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
+ "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
"dev": true
},
- "gaze": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
- "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "mime-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
+ "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
"dev": true,
"requires": {
- "globule": "0.1.0"
+ "mime-db": "~1.35.0"
}
},
- "glob": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
- "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "2.0.10",
- "once": "1.3.3"
+ "brace-expansion": "^1.1.7"
}
},
- "glob-base": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
- "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"dev": true,
"requires": {
- "glob-parent": "2.0.0",
- "is-glob": "2.0.1"
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
}
},
- "glob-parent": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
- "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+ "nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
+ "dev": true
+ },
+ "node-gyp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz",
+ "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==",
"dev": true,
"requires": {
- "is-glob": "2.0.1"
+ "fstream": "^1.0.0",
+ "glob": "^7.0.3",
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "^0.5.0",
+ "nopt": "2 || 3",
+ "npmlog": "0 || 1 || 2 || 3 || 4",
+ "osenv": "0",
+ "request": ">=2.9.0 <2.82.0",
+ "rimraf": "2",
+ "semver": "~5.3.0",
+ "tar": "^2.0.0",
+ "which": "1"
+ },
+ "dependencies": {
+ "request": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.1.1",
+ "har-validator": "~4.2.1",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "oauth-sign": "~0.8.1",
+ "performance-now": "^0.2.0",
+ "qs": "~6.4.0",
+ "safe-buffer": "^5.0.1",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.0.0"
+ }
+ },
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "node-sass": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.2.tgz",
+ "integrity": "sha512-LdxoJLZutx0aQXHtWIYwJKMj+9pTjneTcLWJgzf2XbGu0q5pRNqW5QvFCEdm3mc5rJOdru/mzln5d0EZLacf6g==",
+ "dev": true,
+ "requires": {
+ "async-foreach": "^0.1.3",
+ "chalk": "^1.1.1",
+ "cross-spawn": "^3.0.0",
+ "gaze": "^1.0.0",
+ "get-stdin": "^4.0.1",
+ "glob": "^7.0.3",
+ "in-publish": "^2.0.0",
+ "lodash.assign": "^4.2.0",
+ "lodash.clonedeep": "^4.3.2",
+ "lodash.mergewith": "^4.6.0",
+ "meow": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "nan": "^2.10.0",
+ "node-gyp": "^3.3.1",
+ "npmlog": "^4.0.0",
+ "request": "2.87.0",
+ "sass-graph": "^2.2.4",
+ "stdout-stream": "^1.4.0",
+ "true-case-path": "^1.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
}
},
- "glob-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
- "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+ "nopt": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"dev": true,
"requires": {
- "glob": "4.5.3",
- "glob2base": "0.0.12",
- "minimatch": "2.0.10",
- "ordered-read-streams": "0.1.0",
- "through2": "0.6.5",
- "unique-stream": "1.0.0"
+ "abbrev": "1"
}
},
- "glob-watcher": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
- "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+ "normalize-package-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
"dev": true,
"requires": {
- "gaze": "0.5.2"
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
}
},
- "glob2base": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
- "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+ "npmlog": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
"dev": true,
"requires": {
- "find-index": "0.1.1"
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
}
},
- "global-modules": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz",
- "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=",
+ "oauth-sign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
"dev": true,
"requires": {
- "global-prefix": "0.1.5",
- "is-windows": "0.2.0"
+ "lcid": "^1.0.0"
}
},
- "global-prefix": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz",
- "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=",
+ "osenv": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
"dev": true,
"requires": {
- "homedir-polyfill": "1.0.1",
- "ini": "1.3.4",
- "is-windows": "0.2.0",
- "which": "1.3.0"
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
}
},
- "globule": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
- "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "qs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "glob": "3.1.21",
- "lodash": "1.0.2",
- "minimatch": "0.2.14"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "replace-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "request": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
+ "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.6.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.1",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.1",
+ "har-validator": "~5.0.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.17",
+ "oauth-sign": "~0.8.2",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.1",
+ "safe-buffer": "^5.1.1",
+ "tough-cookie": "~2.3.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.1.0"
},
"dependencies": {
- "glob": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
- "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "ajv": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
"dev": true,
"requires": {
- "graceful-fs": "1.2.3",
- "inherits": "1.0.2",
- "minimatch": "0.2.14"
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
}
},
- "graceful-fs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
- "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
},
- "inherits": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
- "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
+ "aws-sign2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
+ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
+ "dev": true
+ },
+ "form-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "har-schema": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
"dev": true
},
- "minimatch": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
- "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "har-validator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.1.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"dev": true,
"requires": {
- "lru-cache": "2.7.3",
- "sigmund": "1.0.1"
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
}
+ },
+ "performance-now": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "qs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
}
}
},
- "graceful-fs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
- "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
- "dev": true,
- "requires": {
- "natives": "1.1.0"
- }
- },
- "inherits": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- },
- "ini": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
- "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
- "dev": true
- },
- "is-buffer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "require-directory": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
"dev": true
},
- "is-equal-shallow": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
- "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+ "rimraf": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": {
- "is-primitive": "2.0.0"
+ "glob": "^7.0.5"
}
},
- "is-extendable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
- "is-glob": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+ "sass-graph": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
"dev": true,
"requires": {
- "is-extglob": "1.0.0"
+ "glob": "^7.0.0",
+ "lodash": "^4.0.0",
+ "scss-tokenizer": "^0.2.3",
+ "yargs": "^7.0.0"
}
},
- "is-number": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
- "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "scss-tokenizer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
"dev": true,
"requires": {
- "kind-of": "3.2.2"
+ "js-base64": "^2.1.8",
+ "source-map": "^0.4.2"
}
},
- "is-posix-bracket": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
- "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
- "dev": true
- },
- "is-primitive": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
- "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
- "dev": true
- },
- "is-windows": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
- "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
"dev": true
},
- "isarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "set-blocking": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"dev": true
},
- "isexe": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "signal-exit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"dev": true
},
- "isobject": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
"dev": true,
"requires": {
- "isarray": "1.0.0"
+ "amdefine": ">=0.0.4"
}
},
- "kind-of": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "spdx-correct": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
"dev": true,
"requires": {
- "is-buffer": "1.1.6"
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
}
},
- "liftoff": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz",
- "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=",
+ "spdx-expression-parse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
"dev": true,
"requires": {
- "extend": "3.0.1",
- "findup-sync": "0.4.3",
- "fined": "1.1.0",
- "flagged-respawn": "0.3.2",
- "lodash.isplainobject": "4.0.6",
- "lodash.isstring": "4.0.1",
- "lodash.mapvalues": "4.6.0",
- "rechoir": "0.6.2",
- "resolve": "1.5.0"
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
}
},
- "lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
- "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
- "dev": true
- },
- "lodash.isplainobject": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
- "dev": true
- },
- "lodash.isstring": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=",
+ "spdx-license-ids": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
"dev": true
},
- "lodash.mapvalues": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
- "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=",
- "dev": true
- },
- "lru-cache": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
- "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
- "dev": true
+ "sshpk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
},
- "micromatch": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
- "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+ "stdout-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
+ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
"dev": true,
"requires": {
- "arr-diff": "2.0.0",
- "array-unique": "0.2.1",
- "braces": "1.8.5",
- "expand-brackets": "0.1.5",
- "extglob": "0.3.2",
- "filename-regex": "2.0.1",
- "is-extglob": "1.0.0",
- "is-glob": "2.0.1",
- "kind-of": "3.2.2",
- "normalize-path": "2.1.1",
- "object.omit": "2.0.1",
- "parse-glob": "3.0.4",
- "regex-cache": "0.4.4"
+ "readable-stream": "^2.0.1"
}
},
- "minimatch": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
- "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "brace-expansion": "1.1.8"
+ "safe-buffer": "~5.1.0"
}
},
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "stringstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
+ "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
"dev": true
},
- "mkdirp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"dev": true,
"requires": {
- "minimist": "0.0.8"
+ "ansi-regex": "^3.0.0"
},
"dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
}
}
},
- "natives": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz",
- "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=",
- "dev": true
- },
- "normalize-path": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "supports-color": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "remove-trailing-separator": "1.1.0"
+ "has-flag": "^3.0.0"
}
},
- "object.omit": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "tar": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
"dev": true,
"requires": {
- "for-own": "0.1.5",
- "is-extendable": "0.1.1"
+ "block-stream": "*",
+ "fstream": "^1.0.2",
+ "inherits": "2"
}
},
- "once": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
- "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
}
},
- "orchestrator": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
- "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "tough-cookie": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
"dev": true,
"requires": {
- "end-of-stream": "0.1.5",
- "sequencify": "0.0.7",
- "stream-consume": "0.1.0"
+ "punycode": "^1.4.1"
}
},
- "ordered-read-streams": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
- "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
- "dev": true
- },
- "parse-glob": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
- "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+ "tunnel-agent": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"requires": {
- "glob-base": "0.3.0",
- "is-dotfile": "1.0.3",
- "is-extglob": "1.0.0",
- "is-glob": "2.0.1"
+ "safe-buffer": "^5.0.1"
}
},
- "preserve": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
- "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+ "tweetnacl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
"dev": true
},
- "randomatic": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz",
- "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==",
+ "validate-npm-package-license": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
"requires": {
- "is-number": "3.0.0",
- "kind-of": "4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
- }
- },
- "kind-of": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "1.1.6"
- }
- }
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
}
},
- "readable-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "vinyl-sourcemaps-apply": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "source-map": "^0.5.1"
},
"dependencies": {
- "isarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
}
}
},
- "rechoir": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "wrap-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
"dev": true,
"requires": {
- "resolve": "1.5.0"
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
}
},
- "regex-cache": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
- "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==",
- "dev": true,
- "requires": {
- "is-equal-shallow": "0.1.3"
- }
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
},
- "repeat-element": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
- "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "y18n": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
"dev": true
},
- "repeat-string": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "yallist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
"dev": true
},
- "resolve": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
- "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "yargs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
"dev": true,
"requires": {
- "path-parse": "1.0.5"
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
}
},
- "resolve-dir": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz",
- "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=",
+ "yargs-parser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
"dev": true,
"requires": {
- "expand-tilde": "1.2.2",
- "global-modules": "0.2.3"
+ "camelcase": "^3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
}
- },
- "semver": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
- "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
- "dev": true
- },
- "sequencify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
- "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ }
+ }
+ },
+ "gulp-sourcemaps": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz",
+ "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=",
+ "dev": true,
+ "requires": {
+ "@gulp-sourcemaps/identity-map": "1.X",
+ "@gulp-sourcemaps/map-sources": "1.X",
+ "acorn": "5.X",
+ "convert-source-map": "1.X",
+ "css": "2.X",
+ "debug-fabulous": "1.X",
+ "detect-newline": "2.X",
+ "graceful-fs": "4.X",
+ "source-map": "~0.6.0",
+ "strip-bom-string": "1.X",
+ "through2": "2.X"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
"dev": true
},
- "stream-consume": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz",
- "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=",
+ "atob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
"dev": true
},
- "string_decoder": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
- "through2": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
- "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "css": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz",
+ "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "4.0.1"
+ "inherits": "^2.0.1",
+ "source-map": "^0.1.38",
+ "source-map-resolve": "^0.5.1",
+ "urix": "^0.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
}
},
- "user-home": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
- "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "decode-uri-component": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
- "v8flags": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
- "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
- "dev": true,
- "requires": {
- "user-home": "1.1.1"
- }
- },
- "vinyl": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
- "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
- "dev": true,
- "requires": {
- "clone": "0.2.0",
- "clone-stats": "0.0.1"
- }
+ "detect-newline": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "dev": true
},
- "vinyl-fs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
- "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
- "dev": true,
- "requires": {
- "defaults": "1.0.3",
- "glob-stream": "3.1.18",
- "glob-watcher": "0.0.6",
- "graceful-fs": "3.0.11",
- "mkdirp": "0.5.1",
- "strip-bom": "1.0.0",
- "through2": "0.6.5",
- "vinyl": "0.4.6"
- }
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
},
- "which": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
- "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
- "dev": true,
- "requires": {
- "isexe": "2.0.0"
- }
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
},
- "xtend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
- }
- }
- },
- "gulp-babel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-7.0.1.tgz",
- "integrity": "sha512-UqHS3AdxZyJCRxqnAX603Dj3k/Wx6hzcgmav3QcxvsIFq3Y8ZkU7iXd0O+JwD5ivqCc6o0r1S7tCB/xxLnuSNw==",
- "dev": true,
- "requires": {
- "plugin-error": "1.0.1",
- "replace-ext": "0.0.1",
- "through2": "2.0.3",
- "vinyl-sourcemaps-apply": "0.2.1"
- },
- "dependencies": {
- "replace-ext": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
- "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
- }
- }
- },
- "gulp-cssmin": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-cssmin/-/gulp-cssmin-0.2.0.tgz",
- "integrity": "sha1-h6s8ad05sg1dljVcZQStakR7HnI=",
- "dev": true,
- "requires": {
- "clean-css": "3.4.28",
- "filesize": "2.0.4",
- "graceful-fs": "4.1.11",
- "gulp-rename": "1.1.0",
- "gulp-util": "2.2.20",
- "map-stream": "0.0.4",
- "temp-write": "0.1.1"
- },
- "dependencies": {
- "chalk": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
- "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
- "dev": true,
- "requires": {
- "ansi-styles": "1.1.0",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "0.1.0",
- "strip-ansi": "0.3.0",
- "supports-color": "0.2.0"
- }
},
- "gulp-rename": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.1.0.tgz",
- "integrity": "sha1-kwkKqvTThsB/IFOKaIjxXvunJ6E=",
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "map-stream": "0.0.4"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "gulp-util": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
- "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
- "dev": true,
- "requires": {
- "chalk": "0.5.1",
- "dateformat": "1.0.12",
- "lodash._reinterpolate": "2.4.1",
- "lodash.template": "2.4.1",
- "minimist": "0.2.0",
- "multipipe": "0.1.2",
- "through2": "0.5.1",
- "vinyl": "0.2.3"
- }
+ "resolve-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
},
- "isarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
- "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
- "readable-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "source-map-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
}
},
- "string_decoder": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "source-map-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
"dev": true
},
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"through2": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
- "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"dev": true,
"requires": {
- "readable-stream": "1.0.34",
- "xtend": "3.0.0"
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
}
},
+ "urix": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
"xtend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
- "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
}
},
- "gulp-insert": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-insert/-/gulp-insert-0.5.0.tgz",
- "integrity": "sha1-MjE/E+SiPPWsylzl8MCAkjx3hgI=",
+ "gulp-streamify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-streamify/-/gulp-streamify-1.0.2.tgz",
+ "integrity": "sha1-ANazgU1IbAiPeHOO0HZqvBY4nk0=",
"dev": true,
"requires": {
- "readable-stream": "1.1.14",
- "streamqueue": "0.0.6"
+ "plexer": "1.0.1"
},
"dependencies": {
"inherits": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
- "isarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
- "dev": true
+ "isstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
- "readable-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dev": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
- }
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
},
- "streamqueue": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-0.0.6.tgz",
- "integrity": "sha1-ZvX17JTpuK8knkrsLdH3Qb/pTeM=",
- "dev": true,
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"requires": {
- "readable-stream": "1.1.14"
+ "inherits": "~2.0.3",
+ "process-nextick-args": "~1.0.6",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.0.3"
}
},
- "string_decoder": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
}
}
},
- "gulp-rename": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
- "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
- "dev": true
- },
- "gulp-replace": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.6.1.tgz",
- "integrity": "sha1-Eb+Mj85TPjPi9qjy9DC5VboL4GY=",
- "dev": true,
- "requires": {
- "istextorbinary": "1.0.2",
- "readable-stream": "2.3.3",
- "replacestream": "4.0.3"
- }
- },
- "gulp-sass": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-3.1.0.tgz",
- "integrity": "sha1-U9xLaKH13f5EJKtMJHZVJpqLdLc=",
- "dev": true,
- "requires": {
- "gulp-util": "3.0.8",
- "lodash.clonedeep": "4.5.0",
- "node-sass": "4.7.2",
- "through2": "2.0.3",
- "vinyl-sourcemaps-apply": "0.2.1"
- }
- },
- "gulp-sourcemaps": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz",
- "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=",
- "dev": true,
- "requires": {
- "@gulp-sourcemaps/identity-map": "1.0.1",
- "@gulp-sourcemaps/map-sources": "1.0.0",
- "acorn": "5.4.1",
- "convert-source-map": "1.1.3",
- "css": "2.2.1",
- "debug-fabulous": "1.0.0",
- "detect-newline": "2.1.0",
- "graceful-fs": "4.1.11",
- "source-map": "0.6.1",
- "strip-bom-string": "1.0.0",
- "through2": "2.0.3"
+ "gulp-uglify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.1.tgz",
+ "integrity": "sha512-KVffbGY9d4Wv90bW/B1KZJyunLMyfHTBbilpDvmcrj5Go0/a1G3uVpt+1gRBWSw/11dqR3coJ1oWNTt1AiXuWQ==",
+ "dev": true,
+ "requires": {
+ "gulplog": "^1.0.0",
+ "has-gulplog": "^0.1.0",
+ "lodash": "^4.13.1",
+ "make-error-cause": "^1.1.1",
+ "safe-buffer": "^5.1.2",
+ "through2": "^2.0.0",
+ "uglify-js": "^3.0.5",
+ "vinyl-sourcemaps-apply": "^0.2.0"
},
"dependencies": {
- "acorn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz",
- "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==",
+ "commander": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
+ "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
"dev": true
},
- "source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
- }
- }
- },
- "gulp-streamify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-streamify/-/gulp-streamify-1.0.2.tgz",
- "integrity": "sha1-ANazgU1IbAiPeHOO0HZqvBY4nk0=",
- "dev": true,
- "requires": {
- "plexer": "1.0.1"
- },
- "dependencies": {
+ },
+ "has-gulplog": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
"inherits": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
- "isstream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
- "plexer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/plexer/-/plexer-1.0.1.tgz",
- "integrity": "sha1-qAG2Ur+BRXOXlepNO/CvlGwwwN0=",
- "dev": true,
- "requires": {
- "isstream": "0.1.2",
- "readable-stream": "2.3.3"
- }
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
},
"process-nextick-args": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
},
"readable-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
"safe-buffer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "uglify-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.6.tgz",
+ "integrity": "sha512-O1D7L6WcOzS1qW2ehopEm4cWm5yA6bQBozlks8jO8ODxYCy4zv+bR/la4Lwp01tpkYGNonnpXvUpYtrvSu8Yzg==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.16.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
}
},
- "gulp-uglify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.0.tgz",
- "integrity": "sha1-DfAzHXKg0wLj434QlIXd3zPG0co=",
- "dev": true,
- "requires": {
- "gulplog": "1.0.0",
- "has-gulplog": "0.1.0",
- "lodash": "4.17.4",
- "make-error-cause": "1.2.2",
- "through2": "2.0.3",
- "uglify-js": "3.2.2",
- "vinyl-sourcemaps-apply": "0.2.1"
- }
- },
"gulp-util": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
"integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
"dev": true,
"requires": {
- "array-differ": "1.0.0",
- "array-uniq": "1.0.3",
- "beeper": "1.1.1",
- "chalk": "1.1.3",
- "dateformat": "2.2.0",
- "fancy-log": "1.3.0",
- "gulplog": "1.0.0",
- "has-gulplog": "0.1.0",
- "lodash._reescape": "3.0.0",
- "lodash._reevaluate": "3.0.0",
- "lodash._reinterpolate": "3.0.0",
- "lodash.template": "3.6.2",
- "minimist": "1.2.0",
- "multipipe": "0.1.2",
- "object-assign": "3.0.0",
+ "array-differ": "^1.0.0",
+ "array-uniq": "^1.0.2",
+ "beeper": "^1.0.0",
+ "chalk": "^1.0.0",
+ "dateformat": "^2.0.0",
+ "fancy-log": "^1.1.0",
+ "gulplog": "^1.0.0",
+ "has-gulplog": "^0.1.0",
+ "lodash._reescape": "^3.0.0",
+ "lodash._reevaluate": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.template": "^3.0.0",
+ "multipipe": "^0.1.2",
+ "object-assign": "^3.0.0",
"replace-ext": "0.0.1",
- "through2": "2.0.3",
- "vinyl": "0.5.3"
+ "through2": "^2.0.0",
+ "vinyl": "^0.5.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "ansi-styles": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
- "dev": true
- },
"clone-stats": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
"integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
"dev": true
},
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
"dateformat": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
"integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
"dev": true
},
"duplexer2": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
"integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
"dev": true,
"requires": {
- "readable-stream": "1.1.14"
- }
- },
- "fancy-log": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz",
- "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "time-stamp": "1.1.0"
- },
- "dependencies": {
- "chalk": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- }
- }
- },
- "has-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
+ "readable-stream": "~1.1.9"
}
},
"has-gulplog": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
"integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
"dev": true,
"requires": {
- "sparkles": "1.0.0"
+ "sparkles": "^1.0.0"
}
},
"inherits": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
"dev": true
},
"isarray": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
"dev": true
},
- "lodash._basecopy": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
- "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
- "dev": true
- },
- "lodash._basetostring": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
- "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
- "dev": true
- },
- "lodash._basevalues": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
- "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
- "dev": true
- },
- "lodash._getnative": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
- "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
- "dev": true
- },
- "lodash._isiterateecall": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
- "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
- "dev": true
- },
- "lodash._reescape": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
- "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
- "dev": true
- },
- "lodash._reevaluate": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
- "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
- "dev": true
- },
"lodash._reinterpolate": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
"integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
"dev": true
},
- "lodash._root": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
- "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
- "dev": true
- },
"lodash.escape": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
"integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
"dev": true,
"requires": {
- "lodash._root": "3.0.1"
+ "lodash._root": "^3.0.0"
}
},
- "lodash.isarguments": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
- "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
- "dev": true
- },
- "lodash.isarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
- "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
- "dev": true
- },
"lodash.keys": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
"integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
"dev": true,
"requires": {
- "lodash._getnative": "3.9.1",
- "lodash.isarguments": "3.1.0",
- "lodash.isarray": "3.0.4"
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
}
},
- "lodash.restparam": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
- "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
- "dev": true
- },
"lodash.template": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
"integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
"dev": true,
"requires": {
- "lodash._basecopy": "3.0.1",
- "lodash._basetostring": "3.0.1",
- "lodash._basevalues": "3.0.0",
- "lodash._isiterateecall": "3.0.9",
- "lodash._reinterpolate": "3.0.0",
- "lodash.escape": "3.2.0",
- "lodash.keys": "3.1.2",
- "lodash.restparam": "3.6.1",
- "lodash.templatesettings": "3.1.1"
+ "lodash._basecopy": "^3.0.0",
+ "lodash._basetostring": "^3.0.0",
+ "lodash._basevalues": "^3.0.0",
+ "lodash._isiterateecall": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0",
+ "lodash.keys": "^3.0.0",
+ "lodash.restparam": "^3.0.0",
+ "lodash.templatesettings": "^3.0.0"
}
},
"lodash.templatesettings": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
"integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
"dev": true,
"requires": {
- "lodash._reinterpolate": "3.0.0",
- "lodash.escape": "3.2.0"
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0"
}
},
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
- },
"multipipe": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
"integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
"dev": true,
}
},
"object-assign": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
"integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
"dev": true
},
"process-nextick-args": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
- "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
},
"readable-stream": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
"isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "string_decoder": "~0.10.x"
}
},
- "replace-ext": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
- "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
- "dev": true
- },
"safe-buffer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"string_decoder": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- },
- "strip-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "supports-color": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
"dev": true
},
"through2": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
"integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"dev": true,
"requires": {
- "readable-stream": "2.3.3",
- "xtend": "4.0.1"
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
},
"dependencies": {
"isarray": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
"dev": true
},
"readable-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
"string_decoder": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "safe-buffer": "~5.1.0"
}
}
}
},
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
"vinyl": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
"integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
"dev": true,
"requires": {
- "clone": "1.0.3",
- "clone-stats": "0.0.1",
+ "clone": "^1.0.0",
+ "clone-stats": "^0.0.1",
"replace-ext": "0.0.1"
}
},
"xtend": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
},
"gulp-wp-pot": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/gulp-wp-pot/-/gulp-wp-pot-2.1.0.tgz",
- "integrity": "sha512-JozAEdOX4CtLaOG8jltOQ+18N9qzyj0JY2r7KrD3sCSckYdayBpqRZzk0OKt4TtX+OCN6Fa2c7YulkXUpqxpXw==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-wp-pot/-/gulp-wp-pot-2.3.2.tgz",
+ "integrity": "sha512-D3KCb/jlQypfTZ6UsoOagAkEQneaza5VRT9Y9gWeztgnNmUIbI2ycKfzCfyJXvgFn25kya87XUp8RKv2fba8Qg==",
"dev": true,
"requires": {
- "plugin-error": "1.0.1",
- "through2": "2.0.3",
- "vinyl": "2.1.0",
- "wp-pot": "1.4.0"
+ "plugin-error": "^1.0.1",
+ "through2": "^2.0.3",
+ "vinyl": "^2.2.0",
+ "wp-pot": "^1.6.1"
},
"dependencies": {
"clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
- "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
"dev": true
},
- "clone-stats": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
- "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "replace-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
"vinyl": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
- "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
+ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
"dev": true,
"requires": {
- "clone": "2.1.1",
- "clone-buffer": "1.0.0",
- "clone-stats": "1.0.0",
- "cloneable-readable": "1.0.0",
- "remove-trailing-separator": "1.1.0",
- "replace-ext": "1.0.0"
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
}
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
}
}
},
"gulplog": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
"integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
"dev": true,
"requires": {
- "glogg": "1.0.0"
+ "glogg": "^1.0.0"
}
},
- "har-validator": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
- "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
- "dev": true,
- "requires": {
- "chalk": "1.1.3",
- "commander": "2.12.2",
- "is-my-json-valid": "2.16.1",
- "pinkie-promise": "2.0.1"
- },
- "dependencies": {
- "commander": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz",
- "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==",
- "dev": true
- }
- }
+ "har-schema": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true
},
"has": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
- "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
- "function-bind": "1.1.1"
+ "function-bind": "^1.1.1"
}
},
- "has-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
- "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+ "has-glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz",
+ "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=",
"dev": true,
"requires": {
- "ansi-regex": "0.2.1"
+ "is-glob": "^3.0.0"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
}
},
- "has-gulplog": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
- "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "has-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
"dev": true,
"requires": {
- "sparkles": "1.0.0"
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
}
},
- "has-unicode": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
- "dev": true
- },
- "hash-base": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz",
- "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=",
+ "has-values": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
"dev": true,
"requires": {
- "inherits": "2.0.3"
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
"hash.js": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
"integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "minimalistic-assert": "1.0.0"
- }
- },
- "hawk": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
- "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
- "dev": true,
- "requires": {
- "boom": "2.10.1",
- "cryptiles": "2.0.5",
- "hoek": "2.16.3",
- "sntp": "1.0.9"
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
}
},
"hmac-drbg": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"dev": true,
"requires": {
- "hash.js": "1.1.3",
- "minimalistic-assert": "1.0.0",
- "minimalistic-crypto-utils": "1.0.1"
- }
- },
- "hoek": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
- "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
- "dev": true
- },
- "home-or-tmp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
- "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
- "dev": true,
- "requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
}
},
"homedir-polyfill": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
"integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
"dev": true,
"requires": {
- "parse-passwd": "1.0.0"
+ "parse-passwd": "^1.0.0"
}
},
- "hosted-git-info": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
- "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
- "dev": true
- },
"htmlescape": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
"integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
"dev": true
},
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
- "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
- "dev": true,
- "requires": {
- "assert-plus": "0.2.0",
- "jsprim": "1.4.1",
- "sshpk": "1.13.1"
- }
- },
"https-browserify": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
"dev": true
},
"ieee754": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz",
- "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=",
- "dev": true
- },
- "ignore": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
- "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==",
- "dev": true
- },
- "in-publish": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
- "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
- "dev": true
- },
- "indent-string": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
- "dev": true,
- "requires": {
- "repeating": "2.0.1"
- }
- },
- "indexof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
- "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz",
+ "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==",
"dev": true
},
"inflight": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
+ "once": "^1.3.0",
+ "wrappy": "1"
}
},
- "inherits": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "interpret": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
"dev": true
},
- "inline-source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
- "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
- "dev": true,
- "requires": {
- "source-map": "0.5.7"
- }
+ "invert-kv": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
},
- "insert-module-globals": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz",
- "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=",
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
"dev": true,
"requires": {
- "JSONStream": "1.3.2",
- "combine-source-map": "0.7.2",
- "concat-stream": "1.5.2",
- "is-buffer": "1.1.6",
- "lexical-scope": "1.2.0",
- "process": "0.11.10",
- "through2": "2.0.3",
- "xtend": "4.0.1"
+ "kind-of": "^3.0.2"
},
"dependencies": {
- "combine-source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz",
- "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=",
- "dev": true,
- "requires": {
- "convert-source-map": "1.1.3",
- "inline-source-map": "0.6.2",
- "lodash.memoize": "3.0.4",
- "source-map": "0.5.7"
- }
- },
- "concat-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
- "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.0.6",
- "typedarray": "0.0.6"
- }
- },
- "readable-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
- "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "string_decoder": "0.10.31",
- "util-deprecate": "1.0.2"
+ "is-buffer": "^1.1.5"
}
- },
- "string_decoder": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
}
}
},
- "interpret": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz",
- "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=",
+ "is-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
"dev": true
},
- "invariant": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
- "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "is-builtin-module": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
"dev": true,
"requires": {
- "loose-envify": "1.3.1"
+ "builtin-modules": "^1.0.0"
}
},
- "invert-kv": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
- },
- "is-absolute": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz",
- "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=",
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
"dev": true,
"requires": {
- "is-relative": "0.2.1",
- "is-windows": "0.2.0"
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
- "is-arrayish": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-buffer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-builtin-module": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
- "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
"dev": true,
"requires": {
- "builtin-modules": "1.1.1"
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
}
},
- "is-dotfile": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
- "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
- "dev": true
- },
"is-extendable": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
"requires": {
- "is-plain-object": "2.0.4"
+ "is-plain-object": "^2.0.4"
+ },
+ "dependencies": {
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
}
},
- "is-extglob": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "dev": true
- },
"is-finite": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
"integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
+ "number-is-nan": "^1.0.0"
}
},
"is-fullwidth-code-point": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"dev": true,
"requires": {
- "number-is-nan": "1.0.1"
- }
- },
- "is-my-json-valid": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz",
- "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==",
- "dev": true,
- "requires": {
- "generate-function": "2.0.0",
- "generate-object-property": "1.2.0",
- "jsonpointer": "4.0.1",
- "xtend": "4.0.1"
- }
- },
- "is-plain-object": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "3.0.1"
- }
- },
- "is-promise": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
- "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
- "dev": true
- },
- "is-property": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
- "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
- "dev": true
- },
- "is-relative": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz",
- "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=",
- "dev": true,
- "requires": {
- "is-unc-path": "0.1.2"
- }
- },
- "is-typedarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
- "dev": true
- },
- "is-unc-path": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz",
- "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=",
- "dev": true,
- "requires": {
- "unc-path-regex": "0.1.2"
+ "number-is-nan": "^1.0.0"
}
},
- "is-utf8": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
- },
- "is-windows": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
- "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
- "dev": true
- },
- "isarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isexe": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "isstream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
- "dev": true
- },
- "istextorbinary": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz",
- "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8=",
+ "is-number": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
- "binaryextensions": "1.0.1",
- "textextensions": "1.0.2"
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
- "js-base64": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.0.tgz",
- "integrity": "sha512-Wehd+7Pf9tFvGb+ydPm9TjYjV8X1YHOVyG8QyELZxEMqOhemVwGRmoG8iQ/soqI3n8v4xn59zaLxiCJiaaRzKA==",
- "dev": true
- },
- "js-tokens": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
- "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "is-valid-glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+ "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
"dev": true
},
- "jsbn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
- "dev": true,
- "optional": true
- },
"jsesc": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
"dev": true
},
- "json-schema": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
- "dev": true
- },
- "json-stable-stringify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
- "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
- "dev": true,
- "requires": {
- "jsonify": "0.0.0"
- }
- },
- "json-stringify-safe": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
- "dev": true
- },
- "json5": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
- "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
- "dev": true
- },
- "jsonify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
- "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "json-schema-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
"dev": true
},
"jsonparse": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
"dev": true
},
- "jsonpointer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
- "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
- "dev": true
- },
"jsprim": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
"dev": true,
},
"dependencies": {
"assert-plus": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"dev": true
- }
- }
- },
- "labeled-stream-splicer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz",
- "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "stream-splicer": "2.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "extsprintf": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"dev": true
+ },
+ "verror": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
}
}
},
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
"lcid": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
"dev": true,
"requires": {
- "invert-kv": "1.0.0"
+ "invert-kv": "^1.0.0"
}
},
- "lexical-scope": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz",
- "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=",
+ "liftoff": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
"dev": true,
"requires": {
- "astw": "2.2.0"
+ "extend": "^3.0.0",
+ "findup-sync": "^2.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ },
+ "dependencies": {
+ "extend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
}
},
"linkstate": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/linkstate/-/linkstate-1.1.1.tgz",
"integrity": "sha512-5SICdxQG9FpWk44wSEoM2WOCUNuYfClp10t51XAIV5E7vUILF/dTYxf0vJw6bW2dUd2wcQon+LkNtRijpNLrig=="
},
"load-json-file": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "parse-json": "2.2.0",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1",
- "strip-bom": "2.0.0"
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
},
"dependencies": {
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "pify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
"strip-bom": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
"dev": true,
"requires": {
- "is-utf8": "0.2.1"
+ "is-utf8": "^0.2.0"
}
}
}
},
- "lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "lodash._basecopy": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
"dev": true
},
- "lodash._escapehtmlchar": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz",
- "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=",
- "dev": true,
- "requires": {
- "lodash._htmlescapes": "2.4.1"
- }
- },
- "lodash._escapestringchar": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz",
- "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=",
+ "lodash._basetostring": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
"dev": true
},
- "lodash._htmlescapes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz",
- "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=",
+ "lodash._basevalues": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
"dev": true
},
- "lodash._isnative": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
- "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=",
+ "lodash._getnative": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
"dev": true
},
- "lodash._objecttypes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
- "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=",
+ "lodash._isiterateecall": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
"dev": true
},
- "lodash._reinterpolate": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
- "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
+ "lodash._reescape": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
"dev": true
},
- "lodash._reunescapedhtml": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz",
- "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=",
- "dev": true,
- "requires": {
- "lodash._htmlescapes": "2.4.1",
- "lodash.keys": "2.4.1"
- }
- },
- "lodash._shimkeys": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
- "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
- "dev": true,
- "requires": {
- "lodash._objecttypes": "2.4.1"
- }
- },
- "lodash.assign": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "lodash._reevaluate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
"dev": true
},
- "lodash.clonedeep": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "lodash._root": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
"dev": true
},
- "lodash.defaults": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz",
- "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=",
- "dev": true,
- "requires": {
- "lodash._objecttypes": "2.4.1",
- "lodash.keys": "2.4.1"
- }
- },
- "lodash.escape": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
- "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
- "dev": true,
- "requires": {
- "lodash._escapehtmlchar": "2.4.1",
- "lodash._reunescapedhtml": "2.4.1",
- "lodash.keys": "2.4.1"
- }
- },
- "lodash.isobject": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
- "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
- "dev": true,
- "requires": {
- "lodash._objecttypes": "2.4.1"
- }
- },
- "lodash.keys": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
- "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
- "dev": true,
- "requires": {
- "lodash._isnative": "2.4.1",
- "lodash._shimkeys": "2.4.1",
- "lodash.isobject": "2.4.1"
- }
- },
- "lodash.memoize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
- "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "lodash.isarguments": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
"dev": true
},
- "lodash.mergewith": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz",
- "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=",
+ "lodash.isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
"dev": true
},
- "lodash.template": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
- "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
- "dev": true,
- "requires": {
- "lodash._escapestringchar": "2.4.1",
- "lodash._reinterpolate": "2.4.1",
- "lodash.defaults": "2.4.1",
- "lodash.escape": "2.4.1",
- "lodash.keys": "2.4.1",
- "lodash.templatesettings": "2.4.1",
- "lodash.values": "2.4.1"
- }
- },
- "lodash.templatesettings": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
- "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
- "dev": true,
- "requires": {
- "lodash._reinterpolate": "2.4.1",
- "lodash.escape": "2.4.1"
- }
- },
- "lodash.values": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
- "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
- "dev": true,
- "requires": {
- "lodash.keys": "2.4.1"
- }
+ "lodash.restparam": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
},
"loose-envify": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
"integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
"dev": true,
"requires": {
- "js-tokens": "3.0.2"
+ "js-tokens": "^3.0.0"
},
"dependencies": {
"js-tokens": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
"dev": true
}
},
"loud-rejection": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
"integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
"dev": true,
"requires": {
- "currently-unhandled": "0.4.1",
- "signal-exit": "3.0.2"
- }
- },
- "lru-cache": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
- "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
- "dev": true,
- "requires": {
- "pseudomap": "1.0.2",
- "yallist": "2.1.2"
- }
- },
- "lru-queue": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
- "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
- "dev": true,
- "requires": {
- "es5-ext": "0.10.38"
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ },
+ "dependencies": {
+ "currently-unhandled": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "signal-exit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ }
}
},
"make-error": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz",
- "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz",
+ "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==",
"dev": true
},
"make-error-cause": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz",
"integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
"dev": true,
"requires": {
- "make-error": "1.3.0"
+ "make-error": "^1.2.0"
}
},
- "map-cache": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
+ "make-iterator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
},
"map-obj": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
"integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
"dev": true
},
- "map-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.4.tgz",
- "integrity": "sha1-XsbekCE+9sey65Nn6a3o2k79tos=",
- "dev": true
- },
- "md5.js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
- "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
- "dev": true,
- "requires": {
- "hash-base": "3.0.4",
- "inherits": "2.0.3"
- },
- "dependencies": {
- "hash-base": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
- }
- }
- }
- },
- "memoizee": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.11.tgz",
- "integrity": "sha1-vemBdmPJ5A/bKk6hw2cpYIeujI8=",
+ "map-visit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
"dev": true,
"requires": {
- "d": "1.0.0",
- "es5-ext": "0.10.38",
- "es6-weak-map": "2.0.2",
- "event-emitter": "0.3.5",
- "is-promise": "2.1.0",
- "lru-queue": "0.1.0",
- "next-tick": "1.0.0",
- "timers-ext": "0.1.2"
+ "object-visit": "^1.0.0"
}
},
- "meow": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "micromatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"requires": {
- "camelcase-keys": "2.1.0",
- "decamelize": "1.2.0",
- "loud-rejection": "1.6.0",
- "map-obj": "1.0.1",
- "minimist": "1.2.0",
- "normalize-package-data": "2.4.0",
- "object-assign": "4.1.1",
- "read-pkg-up": "1.0.1",
- "redent": "1.0.0",
- "trim-newlines": "1.0.0"
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
},
"dependencies": {
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "arr-diff": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
"dev": true
},
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
- "dev": true
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
}
}
},
- "miller-rabin": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "requires": {
- "bn.js": "4.11.8",
- "brorand": "1.1.0"
- }
- },
- "mime-db": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
- "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
- "dev": true
- },
- "mime-types": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
- "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
- "dev": true,
- "requires": {
- "mime-db": "1.30.0"
- }
- },
"minimalistic-assert": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
- "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
"dev": true
},
"minimalistic-crypto-utils": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
"integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
"dev": true
},
- "minimatch": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "1.1.8"
- },
- "dependencies": {
- "brace-expansion": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
- "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
- "dev": true,
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- }
- }
- }
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": true
- },
- "mkdirp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
"dev": true,
"requires": {
- "minimist": "0.0.8"
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
}
},
"module-deps": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.0.0.tgz",
- "integrity": "sha512-BKsMhJJENEM4dTgqq2MDTTHXRHcNUFegoAwlG4HO4VMdUyMcJDKgfgI+MOv6tR5Iv8G3MKZFgsSiyP3ZoosRMw==",
- "dev": true,
- "requires": {
- "JSONStream": "1.3.2",
- "browser-resolve": "1.11.2",
- "cached-path-relative": "1.0.1",
- "concat-stream": "1.6.0",
- "defined": "1.0.0",
- "detective": "5.0.2",
- "duplexer2": "0.1.4",
- "inherits": "2.0.3",
- "parents": "1.0.1",
- "readable-stream": "2.3.3",
- "resolve": "1.5.0",
- "stream-combiner2": "1.1.1",
- "subarg": "1.0.0",
- "through2": "2.0.3",
- "xtend": "4.0.1"
- }
- },
- "ms": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "multipipe": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
- "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
- "dev": true,
- "requires": {
- "duplexer2": "0.0.2"
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.1.0.tgz",
+ "integrity": "sha512-NPs5N511VD1rrVJihSso/LiBShRbJALYBKzDW91uZYy7BpjnO4bGnZL3HjZ9yKcFdZUWwaYjDz9zxbuP7vKMuQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^1.7.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.0.2",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
},
"dependencies": {
+ "browser-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
"duplexer2": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
- "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
"dev": true,
"requires": {
- "readable-stream": "1.1.14"
+ "readable-stream": "^2.0.2"
}
},
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
"isarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
"dev": true
},
"readable-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "0.0.1",
- "string_decoder": "0.10.31"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"string_decoder": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
}
},
- "nan": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz",
- "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=",
- "dev": true
- },
- "next-tick": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
- "dev": true
- },
- "node-gyp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz",
- "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=",
+ "nanomatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
"requires": {
- "fstream": "1.0.11",
- "glob": "7.1.2",
- "graceful-fs": "4.1.11",
- "minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "nopt": "3.0.6",
- "npmlog": "4.1.2",
- "osenv": "0.1.4",
- "request": "2.79.0",
- "rimraf": "2.6.2",
- "semver": "5.3.0",
- "tar": "2.2.1",
- "which": "1.3.0"
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
},
"dependencies": {
- "semver": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "arr-diff": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
"dev": true
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
}
}
},
- "node-sass": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz",
- "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==",
- "dev": true,
- "requires": {
- "async-foreach": "0.1.3",
- "chalk": "1.1.3",
- "cross-spawn": "3.0.1",
- "gaze": "1.1.2",
- "get-stdin": "4.0.1",
- "glob": "7.1.2",
- "in-publish": "2.0.0",
- "lodash.assign": "4.2.0",
- "lodash.clonedeep": "4.5.0",
- "lodash.mergewith": "4.6.0",
- "meow": "3.7.0",
- "mkdirp": "0.5.1",
- "nan": "2.8.0",
- "node-gyp": "3.6.2",
- "npmlog": "4.1.2",
- "request": "2.79.0",
- "sass-graph": "2.2.4",
- "stdout-stream": "1.4.0",
- "true-case-path": "1.0.2"
- }
+ "natives": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz",
+ "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==",
+ "dev": true
},
- "nopt": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
- "dev": true,
- "requires": {
- "abbrev": "1.1.1"
- }
+ "next-tick": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
},
- "normalize-package-data": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
- "dev": true,
- "requires": {
- "hosted-git-info": "2.5.0",
- "is-builtin-module": "1.0.0",
- "semver": "5.4.1",
- "validate-npm-package-license": "3.0.1"
- }
+ "number-is-nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
},
- "normalize-path": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "object-copy": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
"dev": true,
"requires": {
- "remove-trailing-separator": "1.1.0"
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
- "npmlog": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "object-visit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
"dev": true,
"requires": {
- "are-we-there-yet": "1.1.4",
- "console-control-strings": "1.1.0",
- "gauge": "2.7.4",
- "set-blocking": "2.0.0"
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
}
},
- "number-is-nan": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "oauth-sign": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
- "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
- "dev": true
- },
- "object-assign": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
"object.defaults": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
"integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
"dev": true,
"requires": {
- "array-each": "1.0.1",
- "array-slice": "1.1.0",
- "for-own": "1.0.0",
- "isobject": "3.0.1"
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
}
},
"object.pick": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
"dev": true,
"requires": {
- "isobject": "3.0.1"
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
}
},
"once": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
- "wrappy": "1.0.2"
+ "wrappy": "1"
+ }
+ },
+ "orchestrator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "~0.1.5",
+ "sequencify": "~0.0.7",
+ "stream-consume": "~0.1.0"
}
},
- "os-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "ordered-read-streams": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+ "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
"dev": true
},
"os-homedir": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
"integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"dev": true
},
- "os-locale": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "requires": {
- "lcid": "1.0.0"
- }
- },
"os-tmpdir": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"dev": true
},
- "osenv": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
- "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
- "dev": true,
- "requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
- }
- },
- "pako": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
- "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
- "dev": true
- },
"parents": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
"integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
"dev": true,
"requires": {
- "path-platform": "0.11.15"
- }
- },
- "parse-asn1": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz",
- "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=",
- "dev": true,
- "requires": {
- "asn1.js": "4.9.2",
- "browserify-aes": "1.1.1",
- "create-hash": "1.1.3",
- "evp_bytestokey": "1.0.3",
- "pbkdf2": "3.0.14"
+ "path-platform": "~0.11.15"
+ },
+ "dependencies": {
+ "path-platform": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
+ "dev": true
+ }
}
},
"parse-filepath": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz",
"integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=",
"dev": true,
"requires": {
- "is-absolute": "0.2.6",
- "map-cache": "0.2.2",
- "path-root": "0.1.1"
- }
- },
- "parse-json": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "1.3.1"
+ "is-absolute": "^0.2.3",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ },
+ "dependencies": {
+ "is-absolute": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz",
+ "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=",
+ "dev": true,
+ "requires": {
+ "is-relative": "^0.2.1",
+ "is-windows": "^0.2.0"
+ }
+ },
+ "is-relative": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz",
+ "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^0.1.1"
+ }
+ },
+ "is-unc-path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz",
+ "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.0"
+ }
+ },
+ "is-windows": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
+ "dev": true
+ },
+ "map-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "path-root": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ }
}
},
"parse-passwd": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
"dev": true
},
- "path-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
- "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+ "pascalcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
"dev": true
},
- "path-exists": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "2.0.1"
- }
- },
"path-is-absolute": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"path-parse": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz",
- "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=",
- "dev": true
- },
- "path-platform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
- "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
- "dev": true
- },
- "path-root": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
- "dev": true,
- "requires": {
- "path-root-regex": "0.1.2"
- }
- },
- "path-root-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
"path-sort": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/path-sort/-/path-sort-0.1.0.tgz",
"integrity": "sha1-ywF11Oy/paGP5nTMbXIL/hXguAU=",
"dev": true
},
"path-type": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
"dev": true,
"requires": {
- "graceful-fs": "4.1.11",
- "pify": "2.3.0",
- "pinkie-promise": "2.0.1"
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "pify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ }
}
},
- "pbkdf2": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz",
- "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==",
+ "pause-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
"dev": true,
"requires": {
- "create-hash": "1.1.3",
- "create-hmac": "1.1.6",
- "ripemd160": "2.0.1",
- "safe-buffer": "5.1.1",
- "sha.js": "2.4.10"
+ "through": "~2.3"
+ },
+ "dependencies": {
+ "through": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ }
}
},
- "php-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-2.2.0.tgz",
- "integrity": "sha1-ZzhPClkz2770C+qwqzHQuMWC/4g=",
- "dev": true
- },
- "pify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "performance-now": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
"dev": true
},
- "pinkie": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "php-parser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.0.0-alpha2.tgz",
+ "integrity": "sha1-bcORysgJ5UFzjxxz9uy52ECjiEA=",
"dev": true
},
- "pinkie-promise": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "plexer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/plexer/-/plexer-1.0.1.tgz",
+ "integrity": "sha1-qAG2Ur+BRXOXlepNO/CvlGwwwN0=",
"dev": true,
"requires": {
- "pinkie": "2.0.4"
+ "isstream": "^0.1.2",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
}
},
"plugin-error": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
"integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
"dev": true,
"requires": {
- "ansi-colors": "1.0.1",
- "arr-diff": "4.0.0",
- "arr-union": "3.1.0",
- "extend-shallow": "3.0.2"
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
}
},
"populate.js": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/populate.js/-/populate.js-1.0.3.tgz",
"integrity": "sha1-UcIkwQswqEtellLF8zDdMxzVGJY="
},
+ "posix-character-classes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
"preact": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/preact/-/preact-8.2.7.tgz",
- "integrity": "sha512-m34Ke8U32HyKRVzUOCAcaiIBLR2ye6syiuRclU5DxyixDPDFqdLbIElhERBrF6gDbPKQR+Vpv5bZ9CCbvN6pdQ=="
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-8.3.0.tgz",
+ "integrity": "sha512-yhP68bOZMWaNjfKig0xeL59H9TRShxCoLEUVnvKXfSqLK67EDYev7GVgAhKHmATK/HpnGw6SjSooVvEJgeAUDQ=="
},
"preact-render-to-string": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-3.7.0.tgz",
- "integrity": "sha1-fbQXdFS8ATleDQHWrAe8XoOOMe4=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-3.8.0.tgz",
+ "integrity": "sha512-3MWFFWP686dk3ksGmg5ZzuFJIM8xqWhPWa4P/sRvG8q6PedQ5U5h4/rhkCzVceK5Vy/8ZXPJeATjtGJuT2aGyQ==",
"requires": {
- "pretty-format": "3.8.0"
- },
- "dependencies": {
- "pretty-format": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
- "integrity": "sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U="
- }
+ "pretty-format": "^3.5.1"
}
},
+ "pretty-format": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
+ "integrity": "sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U="
+ },
"pretty-hrtime": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
"integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
"dev": true
},
- "private": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
- "dev": true
- },
- "process": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true
- },
"process-nextick-args": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
"dev": true
},
"pseudomap": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
"dev": true
},
- "public-encrypt": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz",
- "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=",
+ "randombytes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
"dev": true,
"requires": {
- "bn.js": "4.11.8",
- "browserify-rsa": "4.0.1",
- "create-hash": "1.1.3",
- "parse-asn1": "5.1.0",
- "randombytes": "2.0.6"
+ "safe-buffer": "^5.1.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
- "punycode": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
- "dev": true
- },
- "qs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz",
- "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=",
- "dev": true
- },
- "querystring": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
- "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
- "dev": true
- },
- "querystring-es3": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
- "dev": true
+ "randomfill": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ },
+ "dependencies": {
+ "randombytes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
},
- "randombytes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
- "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "read-pkg": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ }
}
},
- "randomfill": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz",
- "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==",
+ "read-pkg-up": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
"dev": true,
"requires": {
- "randombytes": "2.0.6",
- "safe-buffer": "5.1.1"
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
}
},
- "read-only-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
- "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "rechoir": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
"dev": true,
"requires": {
- "readable-stream": "2.3.3"
+ "resolve": "^1.1.6"
}
},
- "read-pkg": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "redent": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
"dev": true,
"requires": {
- "load-json-file": "1.1.0",
- "normalize-package-data": "2.4.0",
- "path-type": "1.1.0"
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ },
+ "dependencies": {
+ "indent-string": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "repeating": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ }
}
},
- "read-pkg-up": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "regenerate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
"dev": true,
"requires": {
- "find-up": "1.1.2",
- "read-pkg": "1.1.0"
+ "babel-runtime": "^6.18.0",
+ "babel-types": "^6.19.0",
+ "private": "^0.1.6"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "private": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
}
},
- "readable-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
- "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "regex-not": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
"requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "1.0.7",
- "safe-buffer": "5.1.1",
- "string_decoder": "1.0.3",
- "util-deprecate": "1.0.2"
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
}
},
- "redent": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "regexpu-core": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
"dev": true,
"requires": {
- "indent-string": "2.1.0",
- "strip-indent": "1.0.1"
+ "regenerate": "^1.2.1",
+ "regjsgen": "^0.2.0",
+ "regjsparser": "^0.1.4"
}
},
- "regenerator-runtime": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
- "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
- "dev": true
- },
- "remove-trailing-separator": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "regjsgen": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
"dev": true
},
- "repeating": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "regjsparser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
"dev": true,
"requires": {
- "is-finite": "1.0.2"
- }
- },
- "replace-ext": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
- "dev": true
- },
- "replacestream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
- "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
- "dev": true,
- "requires": {
- "escape-string-regexp": "1.0.5",
- "object-assign": "4.1.1",
- "readable-stream": "2.3.3"
- }
- },
- "request": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz",
- "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=",
- "dev": true,
- "requires": {
- "aws-sign2": "0.6.0",
- "aws4": "1.6.0",
- "caseless": "0.11.0",
- "combined-stream": "1.0.5",
- "extend": "3.0.1",
- "forever-agent": "0.6.1",
- "form-data": "2.1.4",
- "har-validator": "2.0.6",
- "hawk": "3.1.3",
- "http-signature": "1.1.1",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.17",
- "oauth-sign": "0.8.2",
- "qs": "6.3.2",
- "stringstream": "0.0.5",
- "tough-cookie": "2.3.3",
- "tunnel-agent": "0.4.3",
- "uuid": "3.1.0"
+ "jsesc": "~0.5.0"
},
"dependencies": {
- "uuid": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
- "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
+ "jsesc": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
"dev": true
}
}
},
- "require-directory": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "remove-trailing-separator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
"dev": true
},
"require-main-filename": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
"dev": true
},
"resolve": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
- "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
"dev": true,
"requires": {
- "path-parse": "1.0.5"
+ "path-parse": "^1.0.5"
}
},
- "resolve-url": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "rimraf": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
- "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "resolve-dir": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
"dev": true,
"requires": {
- "glob": "7.1.2"
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "dependencies": {
+ "expand-tilde": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ }
}
},
- "ripemd160": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz",
- "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=",
+ "ret": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"dev": true,
"requires": {
- "hash-base": "2.0.2",
- "inherits": "2.0.3"
+ "ret": "~0.1.10"
}
},
- "safe-buffer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "safer-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
- "sass-graph": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
- "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
- "dev": true,
- "requires": {
- "glob": "7.1.2",
- "lodash": "4.17.4",
- "scss-tokenizer": "0.2.3",
- "yargs": "7.1.0"
- },
- "dependencies": {
- "lodash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
- "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
- "dev": true
- }
- }
+ "sequencify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+ "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ "dev": true
},
- "scss-tokenizer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
- "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "set-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
"dev": true,
"requires": {
- "js-base64": "2.4.0",
- "source-map": "0.4.4"
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
},
"dependencies": {
- "source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
- "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
"requires": {
- "amdefine": "1.0.1"
+ "isobject": "^3.0.1"
}
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
}
}
},
- "semver": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
- "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
- "dev": true
- },
- "set-blocking": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
"sha.js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz",
- "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "safe-buffer": "5.1.1"
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
"shasum": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
"integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
"dev": true,
"requires": {
- "json-stable-stringify": "0.0.1",
- "sha.js": "2.4.10"
- }
- },
- "shell-quote": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
- "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
- "dev": true,
- "requires": {
- "array-filter": "0.0.1",
- "array-map": "0.0.0",
- "array-reduce": "0.0.0",
- "jsonify": "0.0.0"
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ },
+ "dependencies": {
+ "json-stable-stringify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "dev": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "jsonify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ }
}
},
- "sigmund": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
- "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
- "dev": true
- },
- "signal-exit": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
- "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "simple-concat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
+ "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
"dev": true
},
"slash": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
"dev": true
},
- "sntp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
- "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "snapdragon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
"dev": true,
"requires": {
- "hoek": "2.16.3"
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "atob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "map-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "urix": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ }
}
},
- "source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "source-map-resolve": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz",
- "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=",
+ "snapdragon-node": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"dev": true,
"requires": {
- "atob": "1.1.3",
- "resolve-url": "0.2.1",
- "source-map-url": "0.3.0",
- "urix": "0.1.0"
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
}
},
- "source-map-support": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
- "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "snapdragon-util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
"dev": true,
"requires": {
- "source-map": "0.5.7"
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
}
},
- "source-map-url": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz",
- "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=",
- "dev": true
- },
- "sparkles": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
- "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=",
- "dev": true
- },
- "spdx-correct": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
- "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
+ "sntp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"dev": true,
"requires": {
- "spdx-license-ids": "1.2.2"
+ "hoek": "2.x.x"
+ },
+ "dependencies": {
+ "hoek": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ }
}
},
- "spdx-expression-parse": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz",
- "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=",
+ "sparkles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
"dev": true
},
- "spdx-license-ids": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
- "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
+ "spdx-exceptions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
"dev": true
},
- "sshpk": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
- "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "split": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
"dev": true,
"requires": {
- "asn1": "0.2.3",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.1",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.1",
- "getpass": "0.1.7",
- "jsbn": "0.1.1",
- "tweetnacl": "0.14.5"
+ "through": "2"
},
"dependencies": {
- "assert-plus": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "through": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
}
}
},
- "stdout-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
- "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
+ "split-string": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
+ }
+ },
+ "static-extend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
"dev": true,
"requires": {
- "readable-stream": "2.3.3"
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
}
},
- "stream-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
- "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "stream-combiner": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
"dev": true,
"requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3"
+ "duplexer": "~0.1.1"
}
},
"stream-combiner2": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
"integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
"dev": true,
"requires": {
- "duplexer2": "0.1.4",
- "readable-stream": "2.3.3"
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
}
},
+ "stream-consume": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+ "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+ "dev": true
+ },
"stream-http": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz",
- "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
"dev": true,
"requires": {
- "builtin-status-codes": "3.0.0",
- "inherits": "2.0.3",
- "readable-stream": "2.3.3",
- "to-arraybuffer": "1.0.1",
- "xtend": "4.0.1"
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "builtin-status-codes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
}
},
- "stream-splicer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
- "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
- "dev": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.3"
- }
+ "streamqueue": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-0.0.6.tgz",
+ "integrity": "sha1-ZvX17JTpuK8knkrsLdH3Qb/pTeM=",
+ "dev": true
},
"string-width": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"dev": true,
"requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
},
"dependencies": {
"ansi-regex": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"strip-ansi": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
}
}
}
},
- "string_decoder": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
- "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
+ "strip-bom": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
"dev": true,
"requires": {
- "safe-buffer": "5.1.1"
+ "first-chunk-stream": "^1.0.0",
+ "is-utf8": "^0.2.0"
},
"dependencies": {
- "safe-buffer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "is-utf8": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
}
}
},
- "stringstream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
- "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
- "dev": true
- },
- "strip-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
- "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
- "dev": true,
- "requires": {
- "ansi-regex": "0.2.1"
- }
- },
- "strip-bom": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
- "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
- "dev": true,
- "requires": {
- "first-chunk-stream": "1.0.0",
- "is-utf8": "0.2.1"
- }
- },
"strip-bom-string": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
"integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
"dev": true
},
"strip-indent": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
"integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
"dev": true,
"requires": {
- "get-stdin": "4.0.1"
- }
- },
- "subarg": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
- "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
- "dev": true,
- "requires": {
- "minimist": "1.2.0"
+ "get-stdin": "^4.0.1"
},
"dependencies": {
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "get-stdin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true
}
}
},
- "supports-color": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
- "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
+ "subarg": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
"dev": true
},
"syntax-error": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
"integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
"dev": true,
"requires": {
- "acorn-node": "1.3.0"
- }
- },
- "tar": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
- "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
- "dev": true,
- "requires": {
- "block-stream": "0.0.9",
- "fstream": "1.0.11",
- "inherits": "2.0.3"
- }
- },
- "temp-write": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-0.1.1.tgz",
- "integrity": "sha1-C2Rng43Xf79/YqDJPah5cy/9qTI=",
- "dev": true,
- "requires": {
- "graceful-fs": "2.0.3",
- "tempfile": "0.1.3"
- },
- "dependencies": {
- "graceful-fs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz",
- "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=",
- "dev": true
- }
- }
- },
- "tempfile": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.3.tgz",
- "integrity": "sha1-fWtxAEcznTn4RzJ6BW2t8YMQMBA=",
- "dev": true,
- "requires": {
- "uuid": "1.4.2"
- }
- },
- "textextensions": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-1.0.2.tgz",
- "integrity": "sha1-ZUhjk+4fK7A5pgy7oFsLaL2VAdI=",
- "dev": true
- },
- "through": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "dev": true
- },
- "through2": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
- "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
- "dev": true,
- "requires": {
- "readable-stream": "2.3.3",
- "xtend": "4.0.1"
+ "acorn-node": "^1.2.0"
}
},
"tildify": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
"integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
"dev": true,
"requires": {
- "os-homedir": "1.0.2"
+ "os-homedir": "^1.0.0"
}
},
"time-stamp": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
"integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
"dev": true
},
"timers-browserify": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
"integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
"dev": true,
"requires": {
- "process": "0.11.10"
- }
- },
- "timers-ext": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz",
- "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=",
- "dev": true,
- "requires": {
- "es5-ext": "0.10.38",
- "next-tick": "1.0.0"
+ "process": "~0.11.0"
+ },
+ "dependencies": {
+ "process": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ }
}
},
"tlite": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/tlite/-/tlite-0.1.7.tgz",
"integrity": "sha512-E5cGJJX28pKd5oXMPrOLe5ddCwUeGrRZD3dQcn71pnQyQVOMbmx+2K+9OpchEnX6e0lK0oOJn9eOqYHCsPIxTg=="
},
"to-arraybuffer": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
"integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
"dev": true
},
"to-fast-properties": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
"dev": true
},
- "tough-cookie": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz",
- "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=",
+ "to-object-path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
"dev": true,
"requires": {
- "punycode": "1.4.1"
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
}
},
"trim-newlines": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
"integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
"dev": true
},
"trim-right": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
"dev": true
},
"true-case-path": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz",
"integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=",
"dev": true,
"requires": {
- "glob": "6.0.4"
+ "glob": "^6.0.4"
},
"dependencies": {
"glob": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
"integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
"dev": true,
"requires": {
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
}
}
}
},
"tty-browserify": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
"integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
"dev": true
},
- "tunnel-agent": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
- "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
- "dev": true
- },
- "tweetnacl": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "undeclared-identifiers": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz",
+ "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==",
"dev": true,
- "optional": true
- },
- "typedarray": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
+ "requires": {
+ "acorn-node": "^1.3.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
},
- "uglify-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.2.2.tgz",
- "integrity": "sha512-++1NO/zZIEdWf6cDIGceSJQPX31SqIpbVAHwFG5+240MtZqPG/NIPoinj8zlXQtAfMBqEt1Jyv2FiLP3n9gVhQ==",
+ "union-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
"dev": true,
"requires": {
- "commander": "2.12.2",
- "source-map": "0.6.1"
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
},
"dependencies": {
- "commander": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz",
- "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==",
+ "arr-union": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"dev": true
},
- "source-map": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
"dev": true
+ },
+ "set-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
}
}
},
- "umd": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz",
- "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=",
- "dev": true
- },
- "unc-path-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
- "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
- "dev": true
- },
"unique-stream": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
"integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
"dev": true
},
- "urix": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "unset-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "use": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "user-home": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
"dev": true
},
- "url": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
- "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "v8flags": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
"dev": true,
"requires": {
- "punycode": "1.3.2",
- "querystring": "0.2.0"
- },
- "dependencies": {
- "punycode": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
- "dev": true
- }
+ "user-home": "^1.1.1"
}
},
- "util": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "vinyl-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz",
+ "integrity": "sha1-lsGjR5uMU5JULGEgKQE7Wyf4i78=",
"dev": true,
"requires": {
- "inherits": "2.0.1"
+ "bl": "^1.2.1",
+ "through2": "^2.0.3"
},
"dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
"inherits": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
}
}
},
- "util-deprecate": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "uuid": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz",
- "integrity": "sha1-RTAZ9oaWam34PNxSROfJkOzDMvw=",
- "dev": true
- },
- "validate-npm-package-license": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
- "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
- "dev": true,
- "requires": {
- "spdx-correct": "1.0.2",
- "spdx-expression-parse": "1.0.4"
- }
- },
- "verror": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "vinyl-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
"dev": true,
"requires": {
- "assert-plus": "1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "1.3.0"
+ "defaults": "^1.0.0",
+ "glob-stream": "^3.1.5",
+ "glob-watcher": "^0.0.6",
+ "graceful-fs": "^3.0.0",
+ "mkdirp": "^0.5.0",
+ "strip-bom": "^1.0.0",
+ "through2": "^0.6.1",
+ "vinyl": "^0.4.0"
},
"dependencies": {
- "assert-plus": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "clone": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
"dev": true
},
"core-util-is": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+ "dev": true,
+ "requires": {
+ "natives": "^1.1.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "vinyl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "^0.2.0",
+ "clone-stats": "^0.0.1"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
}
}
},
- "vinyl": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
- "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
- "dev": true,
- "requires": {
- "clone-stats": "0.0.1"
- }
- },
- "vinyl-buffer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz",
- "integrity": "sha1-lsGjR5uMU5JULGEgKQE7Wyf4i78=",
- "dev": true,
- "requires": {
- "bl": "1.2.1",
- "through2": "2.0.3"
- }
- },
"vinyl-source-stream": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-2.0.0.tgz",
"integrity": "sha1-84pa+53R6Ttl1VBGmsYYKsT1S44=",
"dev": true,
"requires": {
- "through2": "2.0.3",
- "vinyl": "2.1.0"
+ "through2": "^2.0.3",
+ "vinyl": "^2.1.0"
},
"dependencies": {
"clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz",
- "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
"dev": true
},
- "clone-stats": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
- "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "replace-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true
},
"vinyl": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz",
- "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
+ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
"dev": true,
"requires": {
- "clone": "2.1.1",
- "clone-buffer": "1.0.0",
- "clone-stats": "1.0.0",
- "cloneable-readable": "1.0.0",
- "remove-trailing-separator": "1.1.0",
- "replace-ext": "1.0.0"
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
}
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
}
}
},
- "vinyl-sourcemaps-apply": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
- "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
- "dev": true,
- "requires": {
- "source-map": "0.5.7"
- }
- },
"vm-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
- "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
- "dev": true,
- "requires": {
- "indexof": "0.0.1"
- }
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
+ "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
+ "dev": true
},
"which": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
"integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
"dev": true,
"requires": {
- "isexe": "2.0.0"
+ "isexe": "^2.0.0"
+ },
+ "dependencies": {
+ "isexe": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ }
}
},
"which-module": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
"integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
"dev": true
},
"wide-align": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
"integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
"dev": true,
"requires": {
- "string-width": "1.0.2"
+ "string-width": "^1.0.2"
}
},
"wolfy87-eventemitter": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.4.tgz",
- "integrity": "sha512-yUOUSIzZxqBeu6VdnigqYHwwjy5N3CRX5XSHh/YcVpy+Qsx+HkHaEWdmdyAr3NvyBYDraOa5EfNIbu47T5QzIA=="
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.5.tgz",
+ "integrity": "sha512-1Og5JkuMNZfZcDn76HM1ktUqG8MOMWKpaGdExM1pcTloUNSBkx4Mti3/jRKSTt1vI3P7S8BTkFogqMbc7m3A7Q=="
},
"wp-pot": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/wp-pot/-/wp-pot-1.4.0.tgz",
- "integrity": "sha512-3s8RZvpcpUj8KkOSl5dplnB//kcovv5i3fSDXOuxtO9GuxHVUN/DO4ToivekohsTLTLGP0Ci18C+J2pWwKL1JA==",
- "dev": true,
- "requires": {
- "globby": "7.1.1",
- "path-sort": "0.1.0",
- "php-parser": "2.2.0"
- }
- },
- "wrap-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/wp-pot/-/wp-pot-1.6.1.tgz",
+ "integrity": "sha512-rB57DFGxERyghmCOm1H+cioxq4Cu2HksvtwZJuJOKPB0dYbbfpLerGJ6CPQ1VV7VQp67OcwCzBSuFc7S2rd13A==",
"dev": true,
"requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1"
+ "matched": "^2.0.1",
+ "path-sort": "^0.1.0",
+ "php-parser": "3.0.0-alpha2"
},
"dependencies": {
- "ansi-regex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "arr-union": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
"dev": true
},
- "strip-ansi": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "matched": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/matched/-/matched-2.0.1.tgz",
+ "integrity": "sha512-2aidSwg5/8qzUSFx2HuU3tIwY0yyRKA126l67CWIBHhXZlCvA8jjD7C7DqvuTJNzNbbmK/ETRFx3aNEgOFjuzA==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "glob": "^7.1.2",
+ "has-glob": "^1.0.0",
+ "is-valid-glob": "^1.0.0",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "ansi-regex": "2.1.1"
+ "brace-expansion": "^1.1.7"
}
}
}
},
"wrappy": {
- "version": "1.2.0",
+ "version": "1.3.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
- },
- "xtend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
- "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
- "dev": true
- },
- "y18n": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
- "dev": true
- },
- "yallist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
- "dev": true
- },
- "yargs": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
- "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
- "dev": true,
- "requires": {
- "camelcase": "3.0.0",
- "cliui": "3.2.0",
- "decamelize": "1.2.0",
- "get-caller-file": "1.0.2",
- "os-locale": "1.4.0",
- "read-pkg-up": "1.0.1",
- "require-directory": "2.1.1",
- "require-main-filename": "1.0.1",
- "set-blocking": "2.0.0",
- "string-width": "1.0.2",
- "which-module": "1.0.0",
- "y18n": "3.2.1",
- "yargs-parser": "5.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- }
- }
- },
- "yargs-parser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
- "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
- "dev": true,
- "requires": {
- "camelcase": "3.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- }
- }
}
}
}
Donate link: https://htmlforms.io/#utm_source=wp-plugin-repo&utm_medium=html-forms&utm_campaign=donate-link
Tags: form, contact form, email, contact, contact form 7
Requires at least: 4.5
-Tested up to: 4.9.5
-Stable tag: 1.2.0
+Tested up to: 4.9.8
+Stable tag: 1.3.2
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Requires PHP: 5.3
== Changelog ==
+#### 1.3.2 - Aug 6, 2018
+
+**Improvements**
+
+- Default to an empty string value in conditional fields logic. This allows you to show or hide elements when a field is empty or has not been set yet.
+
+
+#### 1.3.1 - June 12, 2018
+
+**Improvements**
+
+- Format dates, files and arrays when using data variables.
+- Format dates, files and arrays on the submissions overview and submissions details pages.
+- Allow cancelling a form's submit event in JavaScript (with `event.stopPropagation()`) to prevent form submission.
+
+
+#### 1.3.0 - May 28, 2018
+
+**Fixes**
+
+- PHP notice because of namespace import outside of any namespace.
+- Removed usage of PHP 5.4+ feature.
+- Enforce HTTPS in form preview iframe when WP Admin uses HTTPS but public site does not.
+
+**Improvements**
+
+- Hook into GDPR Personal Data Export & Erase functionality. Requires WP 4.9.6.
+- Allow updating stored Submissions with empty values. [Allows clearing out IP address & user agents](https://github.com/ibericode/html-forms-code-snippets/blob/master/do-not-store-ip-address-and-user-agent.php).
+- Internal field should start with underscore to hide it in column view.
+- Add for attribute to generated label element. Allows for simple [multi-step forms](https://github.com/ibericode/html-forms-code-snippets/blob/master/multi-step-form.html).
+
+**Additions**
+
+- Add support for button clicks in conditional element logic.
+
+
#### 1.2.0 - April 24, 2018
**Fixes**
if( $html_email ) {
$headers[] = 'Content-Type: text/html';
$message = nl2br( $message );
- }
+ }
if( ! empty( $settings['from'] ) ) {
$from = hf_replace_data_variables($settings['from'], $submission->data);
public function tab_fields( Form $form ) {
$form_preview_url = add_query_arg( array(
'hf_preview_form' => $form->ID,
- ), get_option( 'home' ) );
+ ), site_url( '/', 'admin' ) );
require dirname( $this->plugin_file ) . '/views/tab-fields.php';
}
--- /dev/null
+<?php
+
+namespace HTML_Forms\Admin;
+
+use HTML_Forms\Submission;
+
+class GDPR {
+ public function hook() {
+ add_filter( 'wp_privacy_personal_data_exporters', array( $this, 'register_exporter' ), 90 );
+ add_filter( 'wp_privacy_personal_data_erasers', array( $this, 'register_eraser' ), 90 );
+ }
+
+ public function register_exporter( $exporters ) {
+ $exporters['html-forms'] = array(
+ 'exporter_friendly_name' => 'HTML Forms',
+ 'callback' => array( $this, 'export' ),
+ );
+ return $exporters;
+ }
+
+ public function register_eraser( $erasers ) {
+ $erasers['html-forms'] = array(
+ 'eraser_friendly_name' => 'HTML Forms',
+ 'callback' => array( $this, 'erase' ),
+ );
+ return $erasers;
+ }
+
+ public function export( $email_address, $page = 1 ) {
+ $submissions = $this->find_submissions_for_email_address( $email_address );
+ $data_to_export = array();
+
+ foreach( $submissions as $s ) {
+ $data_to_export[] = array(
+ 'group_id' => 'html_forms_submissions',
+ 'group_label' => __( 'Form submissions', 'html-forms' ),
+ 'item_id' => sprintf( 'html-forms-submission-%d', $s->id ),
+ 'data' => $this->export_submission( $s ),
+ );
+ }
+
+ return array(
+ 'data' => $data_to_export,
+ 'done' => true,
+ );
+ }
+
+ public function export_submission( Submission $submission ) {
+ $data = array(
+ array(
+ 'name' => 'Submitted at',
+ 'value' => $submission->submitted_at,
+ )
+ );
+
+ if( ! empty( $submission->ip_address ) ) {
+ $data[] = array(
+ 'name' => 'IP address',
+ 'value' => $submission->ip_address,
+ );
+ }
+
+ if( ! empty( $submission->user_agent ) ) {
+ $data[] = array(
+ 'name' => 'User agent',
+ 'value' => $submission->user_agent,
+ );
+ }
+
+ foreach( $submission->data as $field => $value ) {
+ $data[] = array(
+ 'name' => $field,
+ 'value' => is_array( $value ) ? join( ', ', $value ) : $value,
+ );
+ }
+
+ return $data;
+ }
+
+ public function erase( $email_address, $page = 1 ) {
+ global $wpdb;
+ $table = $wpdb->prefix .'hf_submissions';
+
+ $items_removed = false;
+ $submissions = $this->find_submissions_for_email_address( $email_address );
+ foreach( $submissions as $submission ) {
+ $wpdb->delete( $table, array( 'id' => $submission->id ) );
+ $items_removed = true;
+ }
+
+ return array(
+ 'items_removed' => $items_removed,
+ 'items_retained' => false,
+ 'messages' => array(),
+ 'done' => true,
+ );
+ }
+
+ private function find_submissions_for_email_address( $email_address ) {
+ global $wpdb;
+ $table = $wpdb->prefix .'hf_submissions';
+ $like = '%"' . $email_address . '"%';
+ $results = $wpdb->get_results( $wpdb->prepare( "SELECT s.* FROM {$table} s WHERE s.data LIKE %s ORDER BY s.submitted_at DESC", $like ), OBJECT_K );
+
+ $submissions = array();
+ foreach( $results as $key => $object ) {
+ $submission = Submission::from_object( $object );
+ $submissions[$key] = $submission;
+ }
+
+ return $submissions;
+ }
+}
+++ /dev/null
-<?php
-
-namespace HTML_Forms;
-
-class Submission {
- public $id;
- public $form_id;
- public $data = array();
- public $ip_address = '';
- public $user_agent = '';
- public $referer_url = '';
- public $submitted_at;
-
- public function save() {
- global $wpdb;
- $table = $wpdb->prefix .'hf_submissions';
-
- $data = array(
- 'data' => json_encode( $this->data ),
- 'form_id' => $this->form_id,
- );
-
- foreach( array( 'ip_address', 'user_agent', 'submitted_at', 'referer_url' ) as $prop ) {
- if( ! empty( $this->$prop ) ) {
- $data[ $prop ] = $this->$prop;
- }
- }
-
- if( ! empty( $this->id ) ) {
- $wpdb->update( $table, $data, array( 'id' => $this->id ) );
- return;
- }
-
- // insert new row
- $num_rows = $wpdb->insert( $table, $data );
- if( $num_rows > 0 ) {
- $this->id = $wpdb->insert_id;
- }
- }
-
- /**
- * @param $object
- * @return Submission
- */
- public static function from_object( $object ) {
- $data = empty( $object->data ) ? array() : (array) json_decode( $object->data, true );
-
- $submission = new Submission();
- $submission->id = (int) $object->id;
- $submission->form_id = (int) $object->form_id;
- $submission->data = $data;
- $submission->ip_address = (string) $object->ip_address;
- $submission->user_agent = (string) $object->user_agent;
- $submission->referer_url = (string) $object->referer_url;
- $submission->submitted_at = $object->submitted_at;
- return $submission;
- }
-
-}
return 'spam';
}
- $was_required = (array) hf_array_get( $data, 'was_required', array() );
+ $was_required = (array) hf_array_get( $data, '_was_required', array() );
$required_fields = $form->get_required_fields();
foreach ($required_fields as $field_name) {
$value = hf_array_get( $data, $field_name );
ob_end_clean();
}
- http_response_code(200);
+ status_header(200);
require dirname( $this->plugin_file ) . '/views/form-preview.php';
exit;
});
--- /dev/null
+<?php
+
+namespace HTML_Forms;
+
+class Submission {
+ public $id;
+ public $form_id;
+ public $data = array();
+ public $ip_address = '';
+ public $user_agent = '';
+ public $referer_url = '';
+ public $submitted_at;
+
+ public function save() {
+ global $wpdb;
+ $table = $wpdb->prefix .'hf_submissions';
+
+ $data = array(
+ 'data' => json_encode( $this->data ),
+ 'form_id' => $this->form_id,
+ );
+
+ foreach( array( 'ip_address', 'user_agent', 'submitted_at', 'referer_url' ) as $prop ) {
+ $data[ $prop ] = $this->$prop;
+ }
+
+ if( ! empty( $this->id ) ) {
+ $wpdb->update( $table, $data, array( 'id' => $this->id ) );
+ return;
+ }
+
+ // insert new row
+ $num_rows = $wpdb->insert( $table, $data );
+ if( $num_rows > 0 ) {
+ $this->id = $wpdb->insert_id;
+ }
+ }
+
+ /**
+ * @param $object
+ * @return Submission
+ */
+ public static function from_object( $object ) {
+ $data = empty( $object->data ) ? array() : (array) json_decode( $object->data, true );
+
+ $submission = new Submission();
+ $submission->id = (int) $object->id;
+ $submission->form_id = (int) $object->form_id;
+ $submission->data = $data;
+ $submission->ip_address = (string) $object->ip_address;
+ $submission->user_agent = (string) $object->user_agent;
+ $submission->referer_url = (string) $object->referer_url;
+ $submission->submitted_at = $object->submitted_at;
+ return $submission;
+ }
+
+}
$string = preg_replace_callback( '/\[([a-zA-Z0-9\-\._]+)\]/', function( $matches ) use ( $data ) {
$key = $matches[1];
$replacement = hf_array_get( $data, $key, '' );
- $replacement = is_array( $replacement ) ? join( ', ', $replacement ) : $replacement;
+ $replacement = hf_field_value( $replacement );
return $replacement;
}, $string );
return $string;
-}
+}
/**
-* Poor man's file object, compatible with serialization..
+* Returns an escaped and formatted field value. Detects file-, array- and date-types.
+*
+* Caveat: if value is a file, an HTML string is returned (which means email action should use "Content-Type: html" when it includes a file field).
*
+* @param string $value
+* @param int $limit
+* @return string
+* @since 1.3.1
+*/
+function hf_field_value( $value, $limit = 0 ) {
+ if( $value === '' ) {
+ return $value;
+ }
+
+ if( hf_is_file( $value ) ) {
+ $file_url = isset( $value['url'] ) ? $value['url'] : '';
+ if( isset( $value['attachment_id'] ) ) {
+ $file_url = admin_url( sprintf( 'post.php?action=edit&post=%d', $value['attachment_id'] ) );
+ }
+ $short_name = substr( $value['name'], 0, 20 );
+ $suffix = strlen( $value['name'] ) > 20 ? '...' : '';
+ return sprintf( '<a href="%s">%s%s</a> (%s)', esc_attr( $file_url ), esc_html( $short_name ), esc_html( $suffix ), hf_human_filesize( $value['size'] ) );
+ }
+
+ if( hf_is_date( $value ) ) {
+ $date_format = get_option( 'date_format' );
+ return date( $date_format, strtotime( $value ) );
+ }
+
+ // join array-values with comma
+ if( is_array( $value ) ) {
+ $value = join( ', ', $value );
+ }
+
+ // limit string to certain length
+ $value = esc_html( $value );
+ if( $limit > 0 ) {
+ return sprintf( '%s%s', substr( $value, 0, $limit ), strlen( $value ) > $limit ? '...' : '' );
+ }
+
+ return $value;
+}
+
+/**
+* Returns true if value is a "file"
+* @return bool
+*/
+function hf_is_file( $value ) {
+ return is_array( $value )
+ && isset( $value['name'] )
+ && isset( $value['size'] )
+ && isset( $value['type'] );
+}
+
+/**
+* Returns true if value looks like a date-string submitted from a <input type="date">
* @return bool
+* @since 1.3.1
*/
-function hf_is_file( $file ) {
- return isset( $file['name'] ) && isset( $file['size'] ) && isset( $file['type'] );
+function hf_is_date( $value ) {
+ return is_string( $value )
+ && strlen( $value ) === 10
+ && preg_match( '/\d{2,4}[-\/]\d{2}[-\/]\d{2,4}/', $value ) > 0
+ && ( $timestamp = strtotime($value) )
+ && $timestamp != false;
}
/**
--- /dev/null
+Changelog
+=========
+
+#### 1.3.2 - Aug 6, 2018
+
+**Improvements**
+
+- Default to an empty string value in conditional fields logic. This allows you to show or hide elements when a field is empty or has not been set yet.
+
+
+#### 1.3.1 - June 12, 2018
+
+**Improvements**
+
+- Format dates, files and arrays when using data variables.
+- Format dates, files and arrays on the submissions overview and submissions details pages.
+- Allow cancelling a form's submit event in JavaScript (with `event.stopPropagation()`) to prevent form submission.
+
+
+#### 1.3.0 - May 28, 2018
+
+**Fixes**
+
+- PHP notice because of namespace import outside of any namespace.
+- Removed usage of PHP 5.4+ feature.
+- Enforce HTTPS in form preview iframe when WP Admin uses HTTPS but public site does not.
+
+**Improvements**
+
+- Hook into GDPR Personal Data Export & Erase functionality. Requires WP 4.9.6.
+- Allow updating stored Submissions with empty values. [Allows clearing out IP address & user agents](https://github.com/ibericode/html-forms-code-snippets/blob/master/do-not-store-ip-address-and-user-agent.php).
+- Internal field should start with underscore to hide it in column view.
+- Add for attribute to generated label element. Allows for simple [multi-step forms](https://github.com/ibericode/html-forms-code-snippets/blob/master/multi-step-form.html).
+
+**Additions**
+
+- Add support for button clicks in conditional element logic.
+
+
+#### 1.2.0 - April 24, 2018
+
+**Fixes**
+
+- Remove use of short-array syntax, which is only available in PHP 5.4 or later.
+
+**Improvements**
+
+- You can now hide columns on the submissions tab using screen options (in the top right corner).
+- You can now disable saving submissions on a per-form basis.
+- Allow pre-checking multiple checkboxes when using the field helper
+- Fields with matching URL parameter names will automatically be prefilled.
+- Use SVG icon in admin menu.
+
+**Additions**
+
+- Add simple action for subscribing to MailChimp. Requires [MailChimp for WordPress](https://wordpress.org/plugins/mailchimp-for-wp/).
+
+
+#### 1.1.5 - April 9, 2018
+
+**Fixes**
+
+- Conditionally hidden fields are now ignored in server-side required field validation too. Thanks [Jeroen Sormani](https://github.com/JeroenSormani)!
+
+**Improvements**
+
+- Added foundational stuff for being able to handle file uploads.
+
+**Additions**
+
+- Added `hf_process_form` action to execute code before the form actions run.
+
+
+#### 1.1.4 - March 28, 2018
+
+**Fixes**
+
+- Ensure form is fully functional in live preview.
+- Show all forms on the forms overview page (limit was 5).
+- Parse field variables in custom email headers. Thanks [Jeroen Sormani](https://github.com/JeroenSormani)!
+
+**Improvements**
+
+- You can now [bind JavaScript events](https://kb.htmlforms.io/javascript-events/) using the default browser API, eg `document.getElementById('hf-form-5').addEventListener('hf-success', ..);`
+- Only load JavaScript file on pages with a form on it.
+- Don't add line-breaks in HTML generated by the Field Builder.
+- [Conditional elements](https://kb.htmlforms.io/conditional-elements/) now accept wildcard values: `*`
+- Available field variables in email action settings are now clickable.
+
+**Additions**
+
+- Added several action & filter hooks to enable advanced functionality in [HTML Forms Premium](https://www.htmlforms.io/premium-features/).
+
+
+#### 1.1.3 - February 12, 2018
+
+**Fixes**
+
+- Form preview was not working when WPML was activated.
+
+**Improvements**
+
+- Improved theme compatibility for the form preview.
+- Print submission details as JSON instead of PHP object.
+- Form messages are now added to the element as data attributes, so they can be used in JavaScript event callbacks.
+
+**Additions**
+
+- [Conditional logic](https://kb.htmlforms.io/conditional-elements/) now accepts multiple values, separated by the |-character.
+
+
+#### 1.1.2 - January 18, 2018
+
+**Fixes**
+
+- Conditional elements visible in form preview.
+- WP_List_Table issue on forms overview page.
+
+**Improvements**
+
+- Allow disabling submission storage through a global setting.
+- Hide submissions tab when submission storage is disabled.
+- Prevent PHP notice if `$_SERVER` global is missing properties.
+- Update JavaScript dependencies.
+
+**Additions**
+
+- Filter: `hf_ignored_field_names`
+
+
+#### 1.1.1 - December 21, 2017
+
+**Fixes**
+
+- Incorrect role capability for administrators.
+
+
+#### 1.1 - December 21, 2017
+
+**Fixes**
+
+- JavaScript error in some older browser when submitting the form.
+
+**Improvements**
+
+- Use custom user capability base for editing & viewing forms.
+- Delay form response until a later hook so other plugins get a chance to hook in.
+- Disable client-side validation for conditional fields marked as required.
+
+**Additions**
+
+- Added live preview to the form editor.
+
+
+#### 1.0.6 - December 11, 2017
+
+**Fixes**
+
+- Array replacements in email message were showing "Array" instead of a comma separated list of values.
+- Don't reset form when there are errors. Thanks [Jeroen Sormani](https://github.com/JeroenSormani)!
+
+**Additions**
+
+- You can now use certain [template variables](https://kb.htmlforms.io/template-variables/) in the form content which will be dynamically replaced.
+- Added `hf_validate_form_{$form_slug}` filter hook.
+- Added `hf_form_{$form_slug}_success` action hook.
+
+
+#### 1.0.5 - November 18, 2017
+
+**Fixes**
+
+- Could not save more than one "Email" action.
+
+
+#### 1.0.4 - November 10, 2017
+
+**Fixes**
+
+- Incompatibility with PHP versions before 5.6.
+- Data variables could not be placed on the same line.
+
+**Improvements**
+
+- Clear output buffer before sending AJAX response to prevent issues with response parsing.
+
+**Additions**
+
+- Added `hf_form_message_{$code}` filter hook.
+
+
+
+#### 1.0.3 - November 6, 2017
+
+**Additions**
+
+- Added [support for conditional elements](https://kb.htmlforms.io/conditional-elements/) by using `data-show-if` and `data-hide-if` attributes.
+
+**Improvements**
+
+- Accept `id` argument in `[hf_form]` shortcode.
+- Catch errors in shortcode's `slug` attribute.
+- Allow changing form slug after initial form is saved.
+
+**Fixes**
+
+- Fixes stylesheet URL when option to load stylesheet is toggled.
+
+
+
+#### 1.0.2 - October 30, 2017
+
+**Fixes**
+
+- Form validation always failing when form has 0 required fields.
+
+**Improvements**
+
+- Fake success response when honeypot validation fails.
+- Validate request by comparing size of POST array with number of form fields.
+- Ensure submit button never has label element when using the field helper.
+- Optimize URL generation of asset files on frontend.
+
+**Additions**
+
+- Added `hf_validate_form_request_size` filter hook.
+
+
+#### 1.0.1 - October 28, 2017
+
+**Improvements**
+- Added SVG admin menu icon.
+- Field names are now sanitized before they are saved in the database.
+- Submit button was missing for default form fields.
+- Unneeded `<form>` tags are now stripped from the form before saving.
+
+**Additions**
+- Added `data-title` and `data-slug` attributes to the `<form>` element on the frontend.
+
+
+#### 1.0 - October 25, 2017
+
+Introducing a first version of HTML Forms, a different approach to forms for WordPress sites.
+
+
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
\ No newline at end of file
--- /dev/null
+## Must
+
+## Should
+- Visual editing for email action message body.
+- Insert form field references via dropdown.
+- Paginate form submissions
+- Add `date` and `number` specific attributes to these fields in the field builder.
+- Function to register static forms (for theme developers).
+ - HTML template placeholders (for theme developers).
+- Allow sorting submission columns.
+- Require user to be logged in (w/ message for guests) (see Gravity Forms)
+- Action: Subscribe to MailChimp
+- Action: Webhook
+
+
+## Could
+- Form widget.
+- Leave email message blank for an automagic email (see Statamic)
+- Option to process form actions in background.
+- Better browser-compat field for [type="date"] fields.
+
+## Would
+- Delete individual form submissions.
--- /dev/null
+.hf-tab {
+ display: none;
+ background: inherit;
+ border: none;
+ font-weight: initial; }
+ .hf-tab.hf-tab-active {
+ display: block; }
+ .hf-tab h2 {
+ margin-top: 20px; }
+
+.hf-accordion {
+ border: 1px solid #e5e5e5;
+ margin-bottom: 6px; }
+
+.hf-accordion-heading {
+ color: #555555;
+ background-color: #fff;
+ border-bottom: 1px solid #eeeeee;
+ padding: 10px 10px 11px 14px;
+ line-height: 21px;
+ cursor: pointer;
+ position: relative;
+ margin: 0;
+ font-size: 14px; }
+ .hf-accordion-heading:hover {
+ color: #23282d;
+ background: #f5f5f5; }
+ .hf-accordion-heading:after {
+ content: '\f140';
+ font: normal 20px/1 'dashicons';
+ float: right;
+ right: 20px; }
+
+.hf-accordion.expanded .hf-accordion-heading:after {
+ content: "\f142"; }
+
+.hf-accordion-content {
+ padding: 20px;
+ background: #fff; }
+
+.hf-action-summary {
+ display: none; }
+
+.hf-field-builder {
+ border: 1px solid #ccc;
+ padding: 20px;
+ background: #fff; }
+ .hf-field-builder h4:first-of-type {
+ margin-top: 0; }
+ .hf-field-builder label {
+ display: block;
+ font-weight: bold; }
+ .hf-field-builder label.inline,
+ .hf-field-builder label span {
+ font-weight: normal; }
+ .hf-field-builder input + .help {
+ margin-top: 0; }
+ .hf-field-builder input[type="text"] {
+ width: 100%; }
+ .hf-field-builder .available-fields button {
+ margin-bottom: 4px;
+ margin-right: 4px; }
+ .hf-field-builder .field-config *:last-child {
+ margin-bottom: 0; }
+
+.hf-column:hover .hf-column-menu {
+ display: block; }
+
+.hf-column-menu {
+ display: none;
+ float: right;
+ position: relative; }
+ .hf-column-menu .submenu-toggle:after {
+ content: "\f333";
+ font: normal 20px/1 'dashicons';
+ float: right;
+ right: 20px; }
+ .hf-column-menu .submenu {
+ border: 1px solid #e1e1e1;
+ display: none;
+ position: absolute;
+ top: 20px;
+ right: 0;
+ min-width: 140px;
+ background: white; }
+ .hf-column-menu .submenu a {
+ font-size: 12px;
+ padding: 2px 4px;
+ text-align: right;
+ display: block;
+ border-bottom: 1px dotted #e1e1e1; }
+ .hf-column-menu:hover .submenu {
+ display: block; }
+
+#hf-form-preview {
+ border: 1px solid #ddd;
+ height: 520px;
+ /* codemirror + padding */
+ width: 100%;
+ border-left-width: 0; }
+
+@media (max-width: 1217px) {
+ #hf-form-preview {
+ border-left-width: 1px; } }
+
+.hf-tiny-margin {
+ margin-top: 10px;
+ margin-bottom: 10px; }
+
+.hf-small-margin {
+ margin-top: 20px;
+ margin-bottom: 20px; }
+
+.hf-medium-margin {
+ margin-top: 40px;
+ margin-bottom: 40px; }
+
+.hf-well {
+ background: white;
+ padding: 20px;
+ border: 1px solid #ddd; }
+
+.hf-danger,
+.danger {
+ color: #a00; }
+
+.hf-clear,
+.clear {
+ clear: both; }
+
+.hf-italic {
+ font-style: italic; }
+
+.hf-small {
+ font-size: 90%; }
+
+.pull-right,
+.hf-pull-right {
+ float: right; }
+
+.hf-required {
+ color: indianred;
+ font-size: 110%; }
+
+.hf-muted {
+ font-weight: normal;
+ font-size: 90%;
+ color: #999; }
+
+.hf-row {
+ display: flex;
+ flex-wrap: wrap; }
+
+.hf-col {
+ flex-basis: 0;
+ flex-grow: 1; }
+
+.hf-col-1 {
+ width: 16.66667%; }
+
+.hf-col-2 {
+ width: 33.33333%; }
+
+.hf-col-3 {
+ width: 50%; }
+
+.hf-col-4 {
+ width: 66.66667%; }
+
+/* BASICS */
+/* Codemirror */
+.CodeMirror {
+ font-family: monospace;
+ color: black;
+ border: 1px solid #ddd;
+ padding: 10px;
+ min-height: 500px;
+ font-weight: normal;
+ height: 500px; }
+
+.CodeMirror-empty {
+ color: #999; }
+
+/* PADDING */
+.CodeMirror-lines {
+ padding: 4px 0;
+ /* Vertical padding around content */ }
+
+.CodeMirror pre {
+ padding: 0 4px;
+ /* Horizontal padding of content */ }
+
+.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+ background-color: white;
+ /* The little square between H and V scrollbars */ }
+
+/* GUTTER */
+.CodeMirror-gutters {
+ border-right: 1px solid #ddd;
+ background-color: #f7f7f7;
+ white-space: nowrap; }
+
+.CodeMirror-linenumber {
+ padding: 0 3px 0 5px;
+ min-width: 20px;
+ text-align: right;
+ color: #999;
+ white-space: nowrap; }
+
+.CodeMirror-guttermarker {
+ color: black; }
+
+.CodeMirror-guttermarker-subtle {
+ color: #999; }
+
+/* CURSOR */
+.CodeMirror-cursor {
+ border-left: 1px solid black;
+ border-right: none;
+ width: 0; }
+
+/* Shown when moving in bi-directional text */
+.CodeMirror div.CodeMirror-secondarycursor {
+ border-left: 1px solid silver; }
+
+.cm-fat-cursor .CodeMirror-cursor {
+ width: auto;
+ border: 0;
+ background: #7e7; }
+
+.cm-fat-cursor div.CodeMirror-cursors {
+ z-index: 1; }
+
+.cm-animate-fat-cursor {
+ width: auto;
+ border: 0;
+ -webkit-animation: blink 1.06s steps(1) infinite;
+ -moz-animation: blink 1.06s steps(1) infinite;
+ animation: blink 1.06s steps(1) infinite;
+ background-color: #7e7; }
+
+@-moz-keyframes blink {
+ 0% { }
+ 50% {
+ background-color: transparent; }
+ 100% { } }
+
+@-webkit-keyframes blink {
+ 0% { }
+ 50% {
+ background-color: transparent; }
+ 100% { } }
+
+@keyframes blink {
+ 0% { }
+ 50% {
+ background-color: transparent; }
+ 100% { } }
+
+/* Can style cursor different in overwrite (non-insert) mode */
+.cm-tab {
+ display: inline-block;
+ text-decoration: inherit; }
+
+.CodeMirror-ruler {
+ border-left: 1px solid #ccc;
+ position: absolute; }
+
+/* DEFAULT THEME */
+.cm-s-default .cm-header {
+ color: blue; }
+
+.cm-s-default .cm-quote {
+ color: #090; }
+
+.cm-negative {
+ color: #d44; }
+
+.cm-positive {
+ color: #292; }
+
+.cm-header, .cm-strong {
+ font-weight: bold; }
+
+.cm-em {
+ font-style: italic; }
+
+.cm-link {
+ text-decoration: underline; }
+
+.cm-strikethrough {
+ text-decoration: line-through; }
+
+.cm-s-default .cm-keyword {
+ color: #708; }
+
+.cm-s-default .cm-atom {
+ color: #219; }
+
+.cm-s-default .cm-number {
+ color: #164; }
+
+.cm-s-default .cm-def {
+ color: #00f; }
+
+.cm-s-default .cm-variable-2 {
+ color: #05a; }
+
+.cm-s-default .cm-variable-3 {
+ color: #085; }
+
+.cm-s-default .cm-comment {
+ color: #a50; }
+
+.cm-s-default .cm-string {
+ color: #a11; }
+
+.cm-s-default .cm-string-2 {
+ color: #f50; }
+
+.cm-s-default .cm-meta {
+ color: #555; }
+
+.cm-s-default .cm-qualifier {
+ color: #555; }
+
+.cm-s-default .cm-builtin {
+ color: #30a; }
+
+.cm-s-default .cm-bracket {
+ color: #997; }
+
+.cm-s-default .cm-tag {
+ color: #170; }
+
+.cm-s-default .cm-attribute {
+ color: #00c; }
+
+.cm-s-default .cm-hr {
+ color: #999; }
+
+.cm-s-default .cm-link {
+ color: #00c; }
+
+.cm-s-default .cm-error {
+ color: #f00; }
+
+.cm-invalidchar {
+ color: #f00; }
+
+.CodeMirror-composing {
+ border-bottom: 2px solid; }
+
+/* Default styles for common addons */
+div.CodeMirror span.CodeMirror-matchingbracket {
+ color: #0f0; }
+
+div.CodeMirror span.CodeMirror-nonmatchingbracket {
+ color: #f22; }
+
+.CodeMirror-matchingtag {
+ background: rgba(255, 150, 0, 0.3); }
+
+.CodeMirror-activeline-background {
+ background: #e8f2ff; }
+
+/* STOP */
+/* The rest of this file contains styles related to the mechanics of
+ the editor. You probably shouldn't touch them. */
+.CodeMirror {
+ position: relative;
+ overflow: hidden;
+ background: white; }
+
+.CodeMirror-scroll {
+ overflow: scroll !important;
+ /* Things will break if this is overridden */
+ /* 30px is the magic margin used to hide the element's real scrollbars */
+ /* See overflow: hidden in .CodeMirror */
+ margin-bottom: -30px;
+ margin-right: -30px;
+ padding-bottom: 30px;
+ height: 100%;
+ outline: none;
+ /* Prevent dragging from highlighting the element */
+ position: relative; }
+
+.CodeMirror-sizer {
+ position: relative;
+ border-right: 30px solid transparent; }
+
+/* The fake, visible scrollbars. Used to force redraw during scrolling
+ before actual scrolling happens, thus preventing shaking and
+ flickering artifacts. */
+.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
+ position: absolute;
+ z-index: 6;
+ display: none; }
+
+.CodeMirror-vscrollbar {
+ right: 0;
+ top: 0;
+ overflow-x: hidden;
+ overflow-y: scroll; }
+
+.CodeMirror-hscrollbar {
+ bottom: 0;
+ left: 0;
+ overflow-y: hidden;
+ overflow-x: scroll; }
+
+.CodeMirror-scrollbar-filler {
+ right: 0;
+ bottom: 0; }
+
+.CodeMirror-gutter-filler {
+ left: 0;
+ bottom: 0; }
+
+.CodeMirror-gutters {
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 3; }
+
+.CodeMirror-gutter {
+ white-space: normal;
+ height: 100%;
+ display: inline-block;
+ vertical-align: top;
+ margin-bottom: -30px;
+ /* Hack to make IE7 behave */
+ *zoom: 1;
+ *display: inline; }
+
+.CodeMirror-gutter-wrapper {
+ position: absolute;
+ z-index: 4;
+ background: none !important;
+ border: none !important; }
+
+.CodeMirror-gutter-background {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ z-index: 4; }
+
+.CodeMirror-gutter-elt {
+ position: absolute;
+ cursor: default;
+ z-index: 4; }
+
+.CodeMirror-gutter-wrapper {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none; }
+
+.CodeMirror-lines {
+ cursor: text;
+ min-height: 1px;
+ /* prevents collapsing before first draw */ }
+
+.CodeMirror pre {
+ /* Reset some styles that the rest of the page might have set */
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ border-radius: 0;
+ border-width: 0;
+ background: transparent;
+ font-family: inherit;
+ font-size: inherit;
+ margin: 0;
+ white-space: pre;
+ word-wrap: normal;
+ line-height: inherit;
+ color: inherit;
+ z-index: 2;
+ position: relative;
+ overflow: visible;
+ -webkit-tap-highlight-color: transparent; }
+
+.CodeMirror-wrap pre {
+ word-wrap: break-word;
+ white-space: pre-wrap;
+ word-break: normal; }
+
+.CodeMirror-linebackground {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ z-index: 0; }
+
+.CodeMirror-linewidget {
+ position: relative;
+ z-index: 2;
+ overflow: auto; }
+
+.CodeMirror-code {
+ outline: none; }
+
+/* Force content-box sizing for the elements where we expect it */
+.CodeMirror-scroll,
+.CodeMirror-sizer,
+.CodeMirror-gutter,
+.CodeMirror-gutters,
+.CodeMirror-linenumber {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box; }
+
+.CodeMirror-measure {
+ position: absolute;
+ width: 100%;
+ height: 0;
+ overflow: hidden;
+ visibility: hidden; }
+
+.CodeMirror-cursor {
+ position: absolute; }
+
+.CodeMirror-measure pre {
+ position: static; }
+
+div.CodeMirror-cursors {
+ visibility: hidden;
+ position: relative;
+ z-index: 3; }
+
+div.CodeMirror-dragcursors {
+ visibility: visible; }
+
+.CodeMirror-focused div.CodeMirror-cursors {
+ visibility: visible; }
+
+.CodeMirror-selected {
+ background: #d9d9d9; }
+
+.CodeMirror-focused .CodeMirror-selected {
+ background: #d7d4f0; }
+
+.CodeMirror-crosshair {
+ cursor: crosshair; }
+
+.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection {
+ background: #d7d4f0; }
+
+.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection {
+ background: #d7d4f0; }
+
+.cm-searching {
+ background: #ffa;
+ background: rgba(255, 255, 0, 0.4); }
+
+/* IE7 hack to prevent it from returning funny offsetTops on the spans */
+.CodeMirror span {
+ *vertical-align: text-bottom; }
+
+/* Used to force a border model for a node */
+.cm-force-border {
+ padding-right: .1px; }
+
+@media print {
+ /* Hide the cursor when printing */
+ .CodeMirror div.CodeMirror-cursors {
+ visibility: hidden; } }
+
+/* See issue #2901 */
+.cm-tab-wrap-hack:after {
+ content: ''; }
+
+/* Help users use markselection to safely style text background */
+span.CodeMirror-selectedtext {
+ background: none; }
+
+.tlite {
+ background: #111;
+ color: white;
+ font-family: sans-serif;
+ font-size: 0.8rem;
+ font-weight: normal;
+ text-decoration: none;
+ text-align: left;
+ padding: 0.6em 0.75rem;
+ border-radius: 4px;
+ position: absolute;
+ opacity: 0;
+ visibility: hidden;
+ transition: opacity 0.4s;
+ white-space: nowrap;
+ box-shadow: 0 0.5rem 1rem -0.5rem black;
+ z-index: 1000;
+ -webkit-backface-visibility: hidden; }
+
+.tlite-table td,
+.tlite-table th {
+ position: relative; }
+
+.tlite-visible {
+ visibility: visible;
+ opacity: 0.9; }
+
+.tlite::before {
+ content: ' ';
+ display: block;
+ background: inherit;
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ transform: rotate(45deg); }
+
+.tlite-n::before {
+ top: -3px;
+ left: 50%;
+ margin-left: -5px; }
+
+.tlite-nw::before {
+ top: -3px;
+ left: 10px; }
+
+.tlite-ne::before {
+ top: -3px;
+ right: 10px; }
+
+.tlite-s::before {
+ bottom: -3px;
+ left: 50%;
+ margin-left: -5px; }
+
+.tlite-se::before {
+ bottom: -3px;
+ right: 10px; }
+
+.tlite-sw::before {
+ bottom: -3px;
+ left: 10px; }
+
+.tlite-w::before {
+ left: -3px;
+ top: 50%;
+ margin-top: -5px; }
+
+.tlite-e::before {
+ right: -3px;
+ top: 50%;
+ margin-top: -5px; }
--- /dev/null
+.hf-tab{display:none;background:inherit;border:none;font-weight:initial}.hf-tab.hf-tab-active{display:block}.hf-tab h2{margin-top:20px}.hf-field-builder h4:first-of-type,.hf-field-builder input+.help{margin-top:0}.hf-accordion{border:1px solid #e5e5e5;margin-bottom:6px}.hf-accordion-heading{color:#555;background-color:#fff;border-bottom:1px solid #eee;padding:10px 10px 11px 14px;line-height:21px;cursor:pointer;position:relative;margin:0;font-size:14px}.hf-accordion-heading:hover{color:#23282d;background:#f5f5f5}.hf-accordion-heading:after{content:'\f140';font:400 20px/1 dashicons;float:right;right:20px}.hf-accordion.expanded .hf-accordion-heading:after{content:"\f142"}.hf-accordion-content{padding:20px;background:#fff}.hf-action-summary{display:none}.hf-field-builder{border:1px solid #ccc;padding:20px;background:#fff}.hf-field-builder label{display:block;font-weight:700}.hf-field-builder label span,.hf-field-builder label.inline{font-weight:400}.hf-field-builder input[type=text]{width:100%}.hf-field-builder .available-fields button{margin-bottom:4px;margin-right:4px}.hf-field-builder .field-config :last-child{margin-bottom:0}.hf-column:hover .hf-column-menu{display:block}.hf-column-menu{display:none;float:right;position:relative}.hf-column-menu .submenu-toggle:after{content:"\f333";font:400 20px/1 dashicons;float:right;right:20px}.CodeMirror,.hf-muted,.tlite{font-weight:400}.cm-em,.hf-italic{font-style:italic}.hf-column-menu .submenu{border:1px solid #e1e1e1;display:none;position:absolute;top:20px;right:0;min-width:140px;background:#fff}.hf-column-menu .submenu a{font-size:12px;padding:2px 4px;text-align:right;display:block;border-bottom:1px dotted #e1e1e1}.hf-column-menu:hover .submenu{display:block}#hf-form-preview{border:1px solid #ddd;height:520px;width:100%;border-left-width:0}@media (max-width:1217px){#hf-form-preview{border-left-width:1px}}.CodeMirror,.hf-well{border:1px solid #ddd}.hf-tiny-margin{margin-top:10px;margin-bottom:10px}.hf-small-margin{margin-top:20px;margin-bottom:20px}.hf-medium-margin{margin-top:40px;margin-bottom:40px}.hf-well{background:#fff;padding:20px}.danger,.hf-danger{color:#a00}.clear,.hf-clear{clear:both}.hf-small{font-size:90%}.hf-pull-right,.pull-right{float:right}.hf-required{color:#cd5c5c;font-size:110%}.hf-muted{font-size:90%;color:#999}.hf-row{display:flex;flex-wrap:wrap}.hf-col{flex-basis:0;flex-grow:1}.hf-col-1{width:16.66667%}.hf-col-2{width:33.33333%}.hf-col-3{width:50%}.hf-col-4{width:66.66667%}.CodeMirror{font-family:monospace;color:#000;padding:10px;min-height:500px;height:500px}.CodeMirror-empty{color:#999}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.tlite{background:#111;color:#fff;font-family:sans-serif;font-size:.8rem;text-decoration:none;text-align:left;padding:.6em .75rem;border-radius:4px;position:absolute;opacity:0;visibility:hidden;transition:opacity .4s;white-space:nowrap;box-shadow:0 .5rem 1rem -.5rem #000;z-index:1000;-webkit-backface-visibility:hidden}.tlite-table td,.tlite-table th{position:relative}.tlite-visible{visibility:visible;opacity:.9}.tlite::before{content:' ';display:block;background:inherit;width:10px;height:10px;position:absolute;transform:rotate(45deg)}.tlite-n::before{top:-3px;left:50%;margin-left:-5px}.tlite-nw::before{top:-3px;left:10px}.tlite-ne::before{top:-3px;right:10px}.tlite-s::before{bottom:-3px;left:50%;margin-left:-5px}.tlite-se::before{bottom:-3px;right:10px}.tlite-sw::before{bottom:-3px;left:10px}.tlite-w::before{left:-3px;top:50%;margin-top:-5px}.tlite-e::before{right:-3px;top:50%;margin-top:-5px}
+/*# sourceMappingURL=admin.min.css.map */
--- /dev/null
+{"version":3,"names":[],"mappings":"","sources":["admin.css"],"sourcesContent":[".hf-tab {\n display: none;\n background: inherit;\n border: none;\n font-weight: initial; }\n .hf-tab.hf-tab-active {\n display: block; }\n .hf-tab h2 {\n margin-top: 20px; }\n\n.hf-accordion {\n border: 1px solid #e5e5e5;\n margin-bottom: 6px; }\n\n.hf-accordion-heading {\n color: #555555;\n background-color: #fff;\n border-bottom: 1px solid #eeeeee;\n padding: 10px 10px 11px 14px;\n line-height: 21px;\n cursor: pointer;\n position: relative;\n margin: 0;\n font-size: 14px; }\n .hf-accordion-heading:hover {\n color: #23282d;\n background: #f5f5f5; }\n .hf-accordion-heading:after {\n content: '\\f140';\n font: normal 20px/1 'dashicons';\n float: right;\n right: 20px; }\n\n.hf-accordion.expanded .hf-accordion-heading:after {\n content: \"\\f142\"; }\n\n.hf-accordion-content {\n padding: 20px;\n background: #fff; }\n\n.hf-action-summary {\n display: none; }\n\n.hf-field-builder {\n border: 1px solid #ccc;\n padding: 20px;\n background: #fff; }\n .hf-field-builder h4:first-of-type {\n margin-top: 0; }\n .hf-field-builder label {\n display: block;\n font-weight: bold; }\n .hf-field-builder label.inline,\n .hf-field-builder label span {\n font-weight: normal; }\n .hf-field-builder input + .help {\n margin-top: 0; }\n .hf-field-builder input[type=\"text\"] {\n width: 100%; }\n .hf-field-builder .available-fields button {\n margin-bottom: 4px;\n margin-right: 4px; }\n .hf-field-builder .field-config *:last-child {\n margin-bottom: 0; }\n\n.hf-column:hover .hf-column-menu {\n display: block; }\n\n.hf-column-menu {\n display: none;\n float: right;\n position: relative; }\n .hf-column-menu .submenu-toggle:after {\n content: \"\\f333\";\n font: normal 20px/1 'dashicons';\n float: right;\n right: 20px; }\n .hf-column-menu .submenu {\n border: 1px solid #e1e1e1;\n display: none;\n position: absolute;\n top: 20px;\n right: 0;\n min-width: 140px;\n background: white; }\n .hf-column-menu .submenu a {\n font-size: 12px;\n padding: 2px 4px;\n text-align: right;\n display: block;\n border-bottom: 1px dotted #e1e1e1; }\n .hf-column-menu:hover .submenu {\n display: block; }\n\n#hf-form-preview {\n border: 1px solid #ddd;\n height: 520px;\n /* codemirror + padding */\n width: 100%;\n border-left-width: 0; }\n\n@media (max-width: 1217px) {\n #hf-form-preview {\n border-left-width: 1px; } }\n\n.hf-tiny-margin {\n margin-top: 10px;\n margin-bottom: 10px; }\n\n.hf-small-margin {\n margin-top: 20px;\n margin-bottom: 20px; }\n\n.hf-medium-margin {\n margin-top: 40px;\n margin-bottom: 40px; }\n\n.hf-well {\n background: white;\n padding: 20px;\n border: 1px solid #ddd; }\n\n.hf-danger,\n.danger {\n color: #a00; }\n\n.hf-clear,\n.clear {\n clear: both; }\n\n.hf-italic {\n font-style: italic; }\n\n.hf-small {\n font-size: 90%; }\n\n.pull-right,\n.hf-pull-right {\n float: right; }\n\n.hf-required {\n color: indianred;\n font-size: 110%; }\n\n.hf-muted {\n font-weight: normal;\n font-size: 90%;\n color: #999; }\n\n.hf-row {\n display: flex;\n flex-wrap: wrap; }\n\n.hf-col {\n flex-basis: 0;\n flex-grow: 1; }\n\n.hf-col-1 {\n width: 16.66667%; }\n\n.hf-col-2 {\n width: 33.33333%; }\n\n.hf-col-3 {\n width: 50%; }\n\n.hf-col-4 {\n width: 66.66667%; }\n\n/* BASICS */\n/* Codemirror */\n.CodeMirror {\n font-family: monospace;\n color: black;\n border: 1px solid #ddd;\n padding: 10px;\n min-height: 500px;\n font-weight: normal;\n height: 500px; }\n\n.CodeMirror-empty {\n color: #999; }\n\n/* PADDING */\n.CodeMirror-lines {\n padding: 4px 0;\n /* Vertical padding around content */ }\n\n.CodeMirror pre {\n padding: 0 4px;\n /* Horizontal padding of content */ }\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n background-color: white;\n /* The little square between H and V scrollbars */ }\n\n/* GUTTER */\n.CodeMirror-gutters {\n border-right: 1px solid #ddd;\n background-color: #f7f7f7;\n white-space: nowrap; }\n\n.CodeMirror-linenumber {\n padding: 0 3px 0 5px;\n min-width: 20px;\n text-align: right;\n color: #999;\n white-space: nowrap; }\n\n.CodeMirror-guttermarker {\n color: black; }\n\n.CodeMirror-guttermarker-subtle {\n color: #999; }\n\n/* CURSOR */\n.CodeMirror-cursor {\n border-left: 1px solid black;\n border-right: none;\n width: 0; }\n\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n border-left: 1px solid silver; }\n\n.cm-fat-cursor .CodeMirror-cursor {\n width: auto;\n border: 0;\n background: #7e7; }\n\n.cm-fat-cursor div.CodeMirror-cursors {\n z-index: 1; }\n\n.cm-animate-fat-cursor {\n width: auto;\n border: 0;\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n background-color: #7e7; }\n\n@-moz-keyframes blink {\n 0% { }\n 50% {\n background-color: transparent; }\n 100% { } }\n\n@-webkit-keyframes blink {\n 0% { }\n 50% {\n background-color: transparent; }\n 100% { } }\n\n@keyframes blink {\n 0% { }\n 50% {\n background-color: transparent; }\n 100% { } }\n\n/* Can style cursor different in overwrite (non-insert) mode */\n.cm-tab {\n display: inline-block;\n text-decoration: inherit; }\n\n.CodeMirror-ruler {\n border-left: 1px solid #ccc;\n position: absolute; }\n\n/* DEFAULT THEME */\n.cm-s-default .cm-header {\n color: blue; }\n\n.cm-s-default .cm-quote {\n color: #090; }\n\n.cm-negative {\n color: #d44; }\n\n.cm-positive {\n color: #292; }\n\n.cm-header, .cm-strong {\n font-weight: bold; }\n\n.cm-em {\n font-style: italic; }\n\n.cm-link {\n text-decoration: underline; }\n\n.cm-strikethrough {\n text-decoration: line-through; }\n\n.cm-s-default .cm-keyword {\n color: #708; }\n\n.cm-s-default .cm-atom {\n color: #219; }\n\n.cm-s-default .cm-number {\n color: #164; }\n\n.cm-s-default .cm-def {\n color: #00f; }\n\n.cm-s-default .cm-variable-2 {\n color: #05a; }\n\n.cm-s-default .cm-variable-3 {\n color: #085; }\n\n.cm-s-default .cm-comment {\n color: #a50; }\n\n.cm-s-default .cm-string {\n color: #a11; }\n\n.cm-s-default .cm-string-2 {\n color: #f50; }\n\n.cm-s-default .cm-meta {\n color: #555; }\n\n.cm-s-default .cm-qualifier {\n color: #555; }\n\n.cm-s-default .cm-builtin {\n color: #30a; }\n\n.cm-s-default .cm-bracket {\n color: #997; }\n\n.cm-s-default .cm-tag {\n color: #170; }\n\n.cm-s-default .cm-attribute {\n color: #00c; }\n\n.cm-s-default .cm-hr {\n color: #999; }\n\n.cm-s-default .cm-link {\n color: #00c; }\n\n.cm-s-default .cm-error {\n color: #f00; }\n\n.cm-invalidchar {\n color: #f00; }\n\n.CodeMirror-composing {\n border-bottom: 2px solid; }\n\n/* Default styles for common addons */\ndiv.CodeMirror span.CodeMirror-matchingbracket {\n color: #0f0; }\n\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {\n color: #f22; }\n\n.CodeMirror-matchingtag {\n background: rgba(255, 150, 0, 0.3); }\n\n.CodeMirror-activeline-background {\n background: #e8f2ff; }\n\n/* STOP */\n/* The rest of this file contains styles related to the mechanics of\n the editor. You probably shouldn't touch them. */\n.CodeMirror {\n position: relative;\n overflow: hidden;\n background: white; }\n\n.CodeMirror-scroll {\n overflow: scroll !important;\n /* Things will break if this is overridden */\n /* 30px is the magic margin used to hide the element's real scrollbars */\n /* See overflow: hidden in .CodeMirror */\n margin-bottom: -30px;\n margin-right: -30px;\n padding-bottom: 30px;\n height: 100%;\n outline: none;\n /* Prevent dragging from highlighting the element */\n position: relative; }\n\n.CodeMirror-sizer {\n position: relative;\n border-right: 30px solid transparent; }\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n before actual scrolling happens, thus preventing shaking and\n flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n position: absolute;\n z-index: 6;\n display: none; }\n\n.CodeMirror-vscrollbar {\n right: 0;\n top: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n\n.CodeMirror-hscrollbar {\n bottom: 0;\n left: 0;\n overflow-y: hidden;\n overflow-x: scroll; }\n\n.CodeMirror-scrollbar-filler {\n right: 0;\n bottom: 0; }\n\n.CodeMirror-gutter-filler {\n left: 0;\n bottom: 0; }\n\n.CodeMirror-gutters {\n position: absolute;\n left: 0;\n top: 0;\n z-index: 3; }\n\n.CodeMirror-gutter {\n white-space: normal;\n height: 100%;\n display: inline-block;\n vertical-align: top;\n margin-bottom: -30px;\n /* Hack to make IE7 behave */\n *zoom: 1;\n *display: inline; }\n\n.CodeMirror-gutter-wrapper {\n position: absolute;\n z-index: 4;\n background: none !important;\n border: none !important; }\n\n.CodeMirror-gutter-background {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 4; }\n\n.CodeMirror-gutter-elt {\n position: absolute;\n cursor: default;\n z-index: 4; }\n\n.CodeMirror-gutter-wrapper {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none; }\n\n.CodeMirror-lines {\n cursor: text;\n min-height: 1px;\n /* prevents collapsing before first draw */ }\n\n.CodeMirror pre {\n /* Reset some styles that the rest of the page might have set */\n -moz-border-radius: 0;\n -webkit-border-radius: 0;\n border-radius: 0;\n border-width: 0;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n line-height: inherit;\n color: inherit;\n z-index: 2;\n position: relative;\n overflow: visible;\n -webkit-tap-highlight-color: transparent; }\n\n.CodeMirror-wrap pre {\n word-wrap: break-word;\n white-space: pre-wrap;\n word-break: normal; }\n\n.CodeMirror-linebackground {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n z-index: 0; }\n\n.CodeMirror-linewidget {\n position: relative;\n z-index: 2;\n overflow: auto; }\n\n.CodeMirror-code {\n outline: none; }\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n -moz-box-sizing: content-box;\n box-sizing: content-box; }\n\n.CodeMirror-measure {\n position: absolute;\n width: 100%;\n height: 0;\n overflow: hidden;\n visibility: hidden; }\n\n.CodeMirror-cursor {\n position: absolute; }\n\n.CodeMirror-measure pre {\n position: static; }\n\ndiv.CodeMirror-cursors {\n visibility: hidden;\n position: relative;\n z-index: 3; }\n\ndiv.CodeMirror-dragcursors {\n visibility: visible; }\n\n.CodeMirror-focused div.CodeMirror-cursors {\n visibility: visible; }\n\n.CodeMirror-selected {\n background: #d9d9d9; }\n\n.CodeMirror-focused .CodeMirror-selected {\n background: #d7d4f0; }\n\n.CodeMirror-crosshair {\n cursor: crosshair; }\n\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection {\n background: #d7d4f0; }\n\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection {\n background: #d7d4f0; }\n\n.cm-searching {\n background: #ffa;\n background: rgba(255, 255, 0, 0.4); }\n\n/* IE7 hack to prevent it from returning funny offsetTops on the spans */\n.CodeMirror span {\n *vertical-align: text-bottom; }\n\n/* Used to force a border model for a node */\n.cm-force-border {\n padding-right: .1px; }\n\n@media print {\n /* Hide the cursor when printing */\n .CodeMirror div.CodeMirror-cursors {\n visibility: hidden; } }\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after {\n content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext {\n background: none; }\n\n.tlite {\n background: #111;\n color: white;\n font-family: sans-serif;\n font-size: 0.8rem;\n font-weight: normal;\n text-decoration: none;\n text-align: left;\n padding: 0.6em 0.75rem;\n border-radius: 4px;\n position: absolute;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.4s;\n white-space: nowrap;\n box-shadow: 0 0.5rem 1rem -0.5rem black;\n z-index: 1000;\n -webkit-backface-visibility: hidden; }\n\n.tlite-table td,\n.tlite-table th {\n position: relative; }\n\n.tlite-visible {\n visibility: visible;\n opacity: 0.9; }\n\n.tlite::before {\n content: ' ';\n display: block;\n background: inherit;\n width: 10px;\n height: 10px;\n position: absolute;\n transform: rotate(45deg); }\n\n.tlite-n::before {\n top: -3px;\n left: 50%;\n margin-left: -5px; }\n\n.tlite-nw::before {\n top: -3px;\n left: 10px; }\n\n.tlite-ne::before {\n top: -3px;\n right: 10px; }\n\n.tlite-s::before {\n bottom: -3px;\n left: 50%;\n margin-left: -5px; }\n\n.tlite-se::before {\n bottom: -3px;\n right: 10px; }\n\n.tlite-sw::before {\n bottom: -3px;\n left: 10px; }\n\n.tlite-w::before {\n left: -3px;\n top: 50%;\n margin-top: -5px; }\n\n.tlite-e::before {\n right: -3px;\n top: 50%;\n margin-top: -5px; }\n"],"file":"admin.min.css"}
\ No newline at end of file
--- /dev/null
+.hf-form label {
+ clear: both;
+ float: none;
+ display: block;
+ font-weight: bold;
+ margin-bottom: 1px; }
+
+.hf-form label + label {
+ font-weight: normal; }
+
+.hf-form input[type="text"],
+.hf-form input[type="email"],
+.hf-form input[type="url"],
+.hf-form input[type="date"],
+.hf-form input[type="number"],
+.hf-form select,
+.hf-form textarea {
+ clear: both;
+ float: none;
+ padding: 4px 8px; }
+
+.hf-message {
+ padding: .75rem 1.25rem;
+ margin-bottom: 1rem;
+ border: 1px solid transparent; }
+
+.hf-message-success {
+ background-color: #dff0d8;
+ border-color: #d0e9c6;
+ color: #3c763d; }
+
+.hf-message-warning {
+ background-color: #fcf8e3;
+ border-color: #faf2cc;
+ color: #8a6d3b; }
--- /dev/null
+.hf-form label{clear:both;float:none;display:block;font-weight:700;margin-bottom:1px}.hf-form label+label{font-weight:400}.hf-form input[type=text],.hf-form input[type=email],.hf-form input[type=url],.hf-form input[type=date],.hf-form input[type=number],.hf-form select,.hf-form textarea{clear:both;float:none;padding:4px 8px}.hf-message{padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent}.hf-message-success{background-color:#dff0d8;border-color:#d0e9c6;color:#3c763d}.hf-message-warning{background-color:#fcf8e3;border-color:#faf2cc;color:#8a6d3b}
+/*# sourceMappingURL=forms.min.css.map */
--- /dev/null
+{"version":3,"names":[],"mappings":"","sources":["forms.css"],"sourcesContent":[".hf-form label {\n clear: both;\n float: none;\n display: block;\n font-weight: bold;\n margin-bottom: 1px; }\n\n.hf-form label + label {\n font-weight: normal; }\n\n.hf-form input[type=\"text\"],\n.hf-form input[type=\"email\"],\n.hf-form input[type=\"url\"],\n.hf-form input[type=\"date\"],\n.hf-form input[type=\"number\"],\n.hf-form select,\n.hf-form textarea {\n clear: both;\n float: none;\n padding: 4px 8px; }\n\n.hf-message {\n padding: .75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent; }\n\n.hf-message-success {\n background-color: #dff0d8;\n border-color: #d0e9c6;\n color: #3c763d; }\n\n.hf-message-warning {\n background-color: #fcf8e3;\n border-color: #faf2cc;\n color: #8a6d3b; }\n"],"file":"forms.min.css"}
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg viewBox="0 0 256 256" height="14.0pt" width="14.0pt" xmlns="http://www.w3.org/2000/svg" version="1.1">
+<path d="M 0.00 0.00 L 256.00 0.00 L 256.00 256.00 L 0.00 256.00 L 0.00 0.00 Z" fill="#E4418B" />
+<path d="M 204.35 69.21 C 203.77 73.67 203.16 78.13 202.56 82.58 C 196.71 80.63 189.33 79.77 184.62 84.62 C 179.42 90.19 179.57 99.23 179.60 106.34 C 185.65 106.36 191.69 106.34 197.74 106.35 C 197.76 110.70 197.76 115.04 197.75 119.39 C 191.75 119.42 185.76 119.39 179.77 119.41 C 179.74 142.60 179.76 165.80 179.75 188.99 C 173.95 189.01 168.15 189.01 162.35 188.99 C 162.35 165.80 162.35 142.60 162.34 119.41 C 158.65 119.41 154.95 119.39 151.25 119.39 C 151.24 115.05 151.24 110.70 151.26 106.35 C 154.94 106.36 158.63 106.34 162.32 106.34 C 162.39 97.78 162.65 89.48 166.65 81.68 C 169.40 76.21 173.97 71.97 179.60 69.55 C 187.52 66.20 196.29 66.45 204.35 69.21 Z" fill="#ffffff" />
+<path d="M 56.01 74.10 C 61.80 74.09 67.60 74.09 73.40 74.10 C 73.42 89.90 73.38 105.70 73.41 121.50 C 89.01 121.50 104.60 121.51 120.19 121.49 C 120.22 105.69 120.19 89.90 120.20 74.10 C 126.00 74.09 131.80 74.09 137.60 74.11 C 137.60 112.40 137.60 150.69 137.60 188.99 C 131.80 189.01 126.00 189.01 120.20 188.99 C 120.19 171.60 120.22 154.20 120.19 136.81 C 104.60 136.79 89.00 136.79 73.41 136.81 C 73.38 154.20 73.41 171.60 73.40 188.99 C 67.60 189.01 61.80 189.00 56.00 189.00 C 56.00 150.70 55.99 112.40 56.01 74.10 Z" fill="#ffffff" /></svg>
--- /dev/null
+(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+function init() {
+ document.body.addEventListener('click', handleClickEvent, true);
+}
+
+function handleClickEvent(e) {
+ if (e.target.tagName !== 'A') {
+ return;
+ }
+
+ if (e.target.hasAttribute('data-hf-confirm')) {
+ var sure = confirm(e.target.getAttribute('data-hf-confirm'));
+
+ if (!sure) {
+ e.preventDefault();
+ }
+ }
+}
+
+exports.default = {
+ init: init
+};
+
+},{}],2:[function(require,module,exports){
+'use strict';
+
+var _tabs = require('./tabs.js');
+
+var _tabs2 = _interopRequireDefault(_tabs);
+
+var _formEditor = require('./form-editor.js');
+
+var _formEditor2 = _interopRequireDefault(_formEditor);
+
+var _formActions = require('./form-actions.js');
+
+var _formActions2 = _interopRequireDefault(_formActions);
+
+var _fieldBuilder = require('./field-builder.js');
+
+var _fieldBuilder2 = _interopRequireDefault(_fieldBuilder);
+
+var _actionConfirmations = require('./action-confirmations.js');
+
+var _actionConfirmations2 = _interopRequireDefault(_actionConfirmations);
+
+var _tlite = require('tlite');
+
+var _tlite2 = _interopRequireDefault(_tlite);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+window.html_forms = {};
+
+// init the various components
+_tabs2.default.init();
+_actionConfirmations2.default.init();
+
+if (document.getElementById('hf-form-editor')) {
+ _formEditor2.default.init();
+ _formActions2.default.init();
+ _fieldBuilder2.default.init(_formEditor2.default);
+}
+
+(0, _tlite2.default)(function (el) {
+ return el.className.indexOf('hf-tooltip') > -1;
+});
+
+window.html_forms.FieldBuilder = _fieldBuilder2.default;
+window.html_forms.Editor = _formEditor2.default;
+
+// tell WP common.js to override the method used for determining hidden columns (screen options)
+if (hf_options.view === 'edit') {
+ window.columns.useCheckboxesForHidden();
+}
+
+},{"./action-confirmations.js":1,"./field-builder.js":6,"./form-actions.js":8,"./form-editor.js":9,"./tabs.js":10,"tlite":23}],3:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.FieldBuilder = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _desc, _value, _class;
+
+var _preact = require('preact');
+
+var _decko = require('decko');
+
+var _fieldConfigurator = require('./field-configurator.js');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
+ var desc = {};
+ Object['ke' + 'ys'](descriptor).forEach(function (key) {
+ desc[key] = descriptor[key];
+ });
+ desc.enumerable = !!desc.enumerable;
+ desc.configurable = !!desc.configurable;
+
+ if ('value' in desc || desc.initializer) {
+ desc.writable = true;
+ }
+
+ desc = decorators.slice().reverse().reduce(function (desc, decorator) {
+ return decorator(target, property, desc) || desc;
+ }, desc);
+
+ if (context && desc.initializer !== void 0) {
+ desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
+ desc.initializer = undefined;
+ }
+
+ if (desc.initializer === void 0) {
+ Object['define' + 'Property'](target, property, desc);
+ desc = null;
+ }
+
+ return desc;
+}
+
+var FieldBuilder = (_class = function (_Component) {
+ _inherits(FieldBuilder, _Component);
+
+ function FieldBuilder(props) {
+ _classCallCheck(this, FieldBuilder);
+
+ var _this = _possibleConstructorReturn(this, (FieldBuilder.__proto__ || Object.getPrototypeOf(FieldBuilder)).call(this, props));
+
+ _this.state = {
+ activeField: null
+ };
+ return _this;
+ }
+
+ _createClass(FieldBuilder, [{
+ key: 'handleCancel',
+ value: function handleCancel() {
+ this.setState({
+ activeField: null
+ });
+ }
+ }, {
+ key: 'openFieldConfig',
+ value: function openFieldConfig(e) {
+ var field = this.props.fields[e.target.value];
+
+ if (this.state.activeField === field) {
+ this.setState({ activeField: null });
+ } else {
+ this.setState({ activeField: field });
+ }
+ }
+ }, {
+ key: 'render',
+ value: function render(props, state) {
+ var _this2 = this;
+
+ var fieldButtons = props.fields.map(function (f, i) {
+ return (0, _preact.h)(
+ 'button',
+ { type: 'button', value: i, className: "button " + (state.activeField === f ? "active" : ""), onClick: _this2.openFieldConfig },
+ f.label
+ );
+ });
+ var fieldType = state.activeField ? state.activeField.key : "";
+ var rows = state.activeField ? state.activeField.configRows : [];
+
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-field-builder' },
+ (0, _preact.h)(
+ 'h4',
+ null,
+ 'Add field'
+ ),
+ (0, _preact.h)(
+ 'div',
+ { 'class': 'available-fields' },
+ fieldButtons
+ ),
+ (0, _preact.h)(
+ 'div',
+ { style: 'max-width: 480px;' },
+ (0, _preact.h)(_fieldConfigurator.FieldConfigurator, { fieldType: fieldType, rows: rows, onCancel: this.handleCancel })
+ ),
+ state.activeField === null ? (0, _preact.h)(
+ 'p',
+ { 'class': 'help', style: 'margin-bottom: 0;' },
+ 'Use the buttons above to generate your field HTML, or manually modify your form below.'
+ ) : ""
+ );
+ }
+ }]);
+
+ return FieldBuilder;
+}(_preact.Component), (_applyDecoratedDescriptor(_class.prototype, 'handleCancel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'handleCancel'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'openFieldConfig', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'openFieldConfig'), _class.prototype)), _class);
+exports.FieldBuilder = FieldBuilder;
+
+},{"./field-configurator.js":4,"decko":19,"preact":22}],4:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.FieldConfigurator = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _desc, _value, _class;
+
+var _preact = require('preact');
+
+var _decko = require('decko');
+
+var _html = require('../field-builder/html.js');
+
+var _fieldSettings = require('./field-settings.js');
+
+var FS = _interopRequireWildcard(_fieldSettings);
+
+var _linkstate = require('linkstate');
+
+var _linkstate2 = _interopRequireDefault(_linkstate);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {
+ var desc = {};
+ Object['ke' + 'ys'](descriptor).forEach(function (key) {
+ desc[key] = descriptor[key];
+ });
+ desc.enumerable = !!desc.enumerable;
+ desc.configurable = !!desc.configurable;
+
+ if ('value' in desc || desc.initializer) {
+ desc.writable = true;
+ }
+
+ desc = decorators.slice().reverse().reduce(function (desc, decorator) {
+ return decorator(target, property, desc) || desc;
+ }, desc);
+
+ if (context && desc.initializer !== void 0) {
+ desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
+ desc.initializer = undefined;
+ }
+
+ if (desc.initializer === void 0) {
+ Object['define' + 'Property'](target, property, desc);
+ desc = null;
+ }
+
+ return desc;
+}
+
+var FieldConfigurator = (_class = function (_Component) {
+ _inherits(FieldConfigurator, _Component);
+
+ function FieldConfigurator(props) {
+ _classCallCheck(this, FieldConfigurator);
+
+ var _this = _possibleConstructorReturn(this, (FieldConfigurator.__proto__ || Object.getPrototypeOf(FieldConfigurator)).call(this, props));
+
+ _this.state = _this.getInitialState();
+ _this.choiceHandlers = {
+ "add": _this.addChoice,
+ "delete": _this.deleteChoice,
+ "changeLabel": _this.changeChoiceLabel,
+ "toggleChecked": _this.toggleChoiceChecked
+ };
+ return _this;
+ }
+
+ _createClass(FieldConfigurator, [{
+ key: 'getInitialState',
+ value: function getInitialState() {
+ return {
+ formId: document.querySelector('input[name="form_id"]').value,
+ formSlug: document.querySelector('input[name="form[slug]"]').value,
+ fieldType: "",
+ fieldLabel: "",
+ placeholder: "",
+ value: "",
+ wrap: true,
+ required: false,
+ choices: [{
+ checked: false,
+ label: "One"
+ }, {
+ checked: false,
+ label: "Two"
+ }],
+ accept: ''
+ };
+ }
+ }, {
+ key: 'componentWillReceiveProps',
+ value: function componentWillReceiveProps(props) {
+ var newState = { fieldType: props.fieldType };
+
+ // when changing from field that accepts multiple values to single-value field, reset all pre-selections
+ if (this.state.fieldType === 'checkbox' && props.fieldType !== 'checkbox') {
+ newState.choices = this.state.choices.map(function (c, i) {
+ c.checked = false;
+ return c;
+ });
+ }
+ this.setState(newState);
+ }
+ }, {
+ key: 'addToForm',
+ value: function addToForm() {
+ var html = (0, _html.htmlgenerate)(this.state);
+ html_forms.Editor.replaceSelection(html);
+ }
+ }, {
+ key: 'addChoice',
+ value: function addChoice() {
+ var arr = this.state.choices;
+ arr.push({ checked: false, label: "..." });
+ this.setState({ choices: arr });
+ }
+ }, {
+ key: 'deleteChoice',
+ value: function deleteChoice(e) {
+ var arr = this.state.choices;
+ var index = e.target.parentElement.getAttribute('data-key');
+ arr.splice(index, 1);
+ this.setState({ choices: arr });
+ }
+ }, {
+ key: 'changeChoiceLabel',
+ value: function changeChoiceLabel(e) {
+ var arr = this.state.choices;
+ var index = e.target.parentElement.getAttribute('data-key');
+ arr[index].label = e.target.value;
+ this.setState({ choices: arr });
+ }
+ }, {
+ key: 'toggleChoiceChecked',
+ value: function toggleChoiceChecked(e) {
+ var arr = this.state.choices;
+ var index = e.target.parentElement.getAttribute('data-key');
+ arr[index].checked = !arr[index].checked;
+ this.setState({ choices: arr });
+ }
+ }, {
+ key: 'handleCancel',
+ value: function handleCancel() {
+ // revert back to initial state
+ this.setState(this.getInitialState());
+ this.props.onCancel();
+ }
+ }, {
+ key: 'render',
+ value: function render(props, state) {
+ if (props.rows.length == 0) {
+ return "";
+ }
+
+ var formFields = [];
+
+ for (var i = 0; i < props.rows.length; i++) {
+ switch (props.rows[i]) {
+ case "label":
+ formFields.push((0, _preact.h)(FS.Label, { value: state.fieldLabel, onChange: (0, _linkstate2.default)(this, 'fieldLabel') }));
+ break;
+
+ case "placeholder":
+ formFields.push((0, _preact.h)(FS.Placeholder, { value: state.placeholder, onChange: (0, _linkstate2.default)(this, 'placeholder') }));
+ break;
+
+ case "default-value":
+ formFields.push((0, _preact.h)(FS.DefaultValue, { value: state.value, onChange: (0, _linkstate2.default)(this, 'value') }));
+ break;
+
+ case "required":
+ formFields.push((0, _preact.h)(FS.Required, { checked: state.required, onChange: (0, _linkstate2.default)(this, 'required') }));
+ break;
+
+ case "wrap":
+ formFields.push((0, _preact.h)(FS.Wrap, { checked: state.wrap, onChange: (0, _linkstate2.default)(this, 'wrap') }));
+ break;
+
+ case "add-to-form":
+ formFields.push((0, _preact.h)(FS.AddToForm, { onSubmit: this.addToForm, onCancel: this.handleCancel }));
+ break;
+
+ case "choices":
+ formFields.push((0, _preact.h)(FS.Choices, { multiple: state.fieldType === 'checkbox', choices: state.choices, handlers: this.choiceHandlers }));
+ break;
+
+ case "button-text":
+ formFields.push((0, _preact.h)(FS.ButtonText, { value: state.value, onChange: (0, _linkstate2.default)(this, 'value') }));
+ break;
+
+ case "accept":
+ formFields.push((0, _preact.h)(FS.Accept, { value: state.accept, onChange: (0, _linkstate2.default)(this, 'accept') }));
+ break;
+
+ }
+ }
+
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'field-config', onKeyPress: FieldConfigurator.handleKeyPress },
+ formFields
+ );
+ }
+ }], [{
+ key: 'handleKeyPress',
+ value: function handleKeyPress(e) {
+ // stop RETURN from submitting the parent form.
+ if (e.keyCode === 13) {
+ e.preventDefault();
+ }
+ }
+ }]);
+
+ return FieldConfigurator;
+}(_preact.Component), (_applyDecoratedDescriptor(_class.prototype, 'addToForm', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'addToForm'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'addChoice', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'addChoice'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'deleteChoice', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'deleteChoice'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'changeChoiceLabel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'changeChoiceLabel'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'toggleChoiceChecked', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'toggleChoiceChecked'), _class.prototype), _applyDecoratedDescriptor(_class, 'handleKeyPress', [_decko.bind], Object.getOwnPropertyDescriptor(_class, 'handleKeyPress'), _class), _applyDecoratedDescriptor(_class.prototype, 'handleCancel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'handleCancel'), _class.prototype)), _class);
+exports.FieldConfigurator = FieldConfigurator;
+
+},{"../field-builder/html.js":7,"./field-settings.js":5,"decko":19,"linkstate":20,"preact":22}],5:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.Accept = exports.ButtonText = exports.Choices = exports.Required = exports.Wrap = exports.DefaultValue = exports.Placeholder = exports.Label = exports.AddToForm = undefined;
+
+var _preact = require('preact');
+
+function AddToForm(props) {
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-small-margin' },
+ (0, _preact.h)(
+ 'button',
+ { 'class': 'button', type: 'button', onClick: props.onSubmit },
+ 'Add field to form'
+ ),
+ ' \xA0 ',
+ (0, _preact.h)(
+ 'a',
+ { href: 'javascript:void(0);', 'class': 'hf-small', style: 'vertical-align: middle;', onClick: props.onCancel },
+ 'or close field helper'
+ )
+ );
+}
+
+function Label(props) {
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-small-margin' },
+ (0, _preact.h)(
+ 'label',
+ { 'for': 'hf-fg-field-label' },
+ 'Field label ',
+ (0, _preact.h)(
+ 'span',
+ { 'class': 'hf-required' },
+ '*'
+ )
+ ),
+ (0, _preact.h)('input', { id: 'hf-fg-field-label', type: 'text', value: props.value, onChange: props.onChange })
+ );
+}
+
+function Placeholder(props) {
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-small-margin' },
+ (0, _preact.h)(
+ 'label',
+ { 'for': 'hf-fg-placeholder' },
+ 'Placeholder ',
+ (0, _preact.h)(
+ 'span',
+ { 'class': 'hf-italic hf-pull-right' },
+ 'Optional'
+ )
+ ),
+ (0, _preact.h)('input', { id: 'hf-fg-placeholder', type: 'text', value: props.value, onChange: props.onChange }),
+ (0, _preact.h)(
+ 'p',
+ { 'class': 'help' },
+ 'Text to show when field has no value.'
+ )
+ );
+}
+
+function ButtonText(props) {
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-small-margin' },
+ (0, _preact.h)(
+ 'label',
+ { 'for': 'hf-fg-default-value' },
+ 'Button text ',
+ (0, _preact.h)(
+ 'span',
+ { 'class': 'hf-required' },
+ '*'
+ )
+ ),
+ (0, _preact.h)('input', { id: 'hf-fg-default-value', type: 'text', value: props.value, onChange: props.onChange }),
+ (0, _preact.h)(
+ 'p',
+ { 'class': 'help' },
+ 'Text to show on the button.'
+ )
+ );
+}
+
+function DefaultValue(props) {
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-small-margin' },
+ (0, _preact.h)(
+ 'label',
+ { 'for': 'hf-fg-default-value' },
+ 'Default value ',
+ (0, _preact.h)(
+ 'span',
+ { 'class': 'hf-italic hf-pull-right' },
+ 'Optional'
+ )
+ ),
+ (0, _preact.h)('input', { id: 'hf-fg-default-value', type: 'text', value: props.value, onChange: props.onChange }),
+ (0, _preact.h)(
+ 'p',
+ { 'class': 'help' },
+ 'Text to pre-fill this field with.'
+ )
+ );
+}
+
+function Wrap(props) {
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-small-margin' },
+ (0, _preact.h)(
+ 'label',
+ { 'class': 'inline' },
+ (0, _preact.h)('input', { type: 'checkbox', value: '1', defaultChecked: props.checked, onChange: props.onChange }),
+ 'Wrap this field in paragraph tags.'
+ )
+ );
+}
+
+function Required(props) {
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-small-margin' },
+ (0, _preact.h)(
+ 'label',
+ { 'class': 'inline' },
+ (0, _preact.h)('input', { type: 'checkbox', value: '1', defaultChecked: props.checked, onChange: props.onChange }),
+ 'This field is required.'
+ )
+ );
+}
+
+function Choices(props) {
+ var choiceFields = props.choices.map(function (choice, k) {
+ return (0, _preact.h)(
+ 'div',
+ { 'data-key': k },
+ (0, _preact.h)('input', { type: props.multiple ? "checkbox" : "radio", name: 'selected', defaultChecked: choice.checked, onChange: props.handlers.toggleChecked, title: 'Pre-select this choice?' }),
+ (0, _preact.h)('input', { type: 'text', value: choice.label, placeholder: 'Choice label', style: 'width: 80%;', onChange: props.handlers.changeLabel }),
+ (0, _preact.h)(
+ 'a',
+ { href: 'javascript:void(0);', onClick: props.handlers.delete, style: 'text-decoration: none;', title: 'Delete choice' },
+ '\u2715'
+ )
+ );
+ });
+
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-small-margin' },
+ (0, _preact.h)(
+ 'label',
+ null,
+ 'Choices'
+ ),
+ choiceFields,
+ (0, _preact.h)('input', { type: props.multiple ? "checkbox" : "radio", style: 'visibility: hidden;' }),
+ (0, _preact.h)(
+ 'a',
+ { href: 'javascript:void(0);', onClick: props.handlers.add },
+ 'Add choice'
+ )
+ );
+}
+
+function Accept(props) {
+ return (0, _preact.h)(
+ 'div',
+ { 'class': 'hf-small-margin' },
+ (0, _preact.h)(
+ 'label',
+ null,
+ 'Accepted file types'
+ ),
+ (0, _preact.h)('input', { type: 'text', value: props.value, onChange: props.onChange }),
+ (0, _preact.h)(
+ 'p',
+ { 'class': 'help' },
+ 'Use a comma-separated list of accepted file extensions, eg ',
+ (0, _preact.h)(
+ 'code',
+ null,
+ '.pdf'
+ ),
+ '. ',
+ (0, _preact.h)('br', null),
+ 'Leave empty to accept any file type.'
+ )
+ );
+}
+
+exports.AddToForm = AddToForm;
+exports.Label = Label;
+exports.Placeholder = Placeholder;
+exports.DefaultValue = DefaultValue;
+exports.Wrap = Wrap;
+exports.Required = Required;
+exports.Choices = Choices;
+exports.ButtonText = ButtonText;
+exports.Accept = Accept;
+
+},{"preact":22}],6:[function(require,module,exports){
+'use strict';
+
+// imports
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _preact = require('preact');
+
+var _fieldBuilder = require('./components/field-builder.js');
+
+// vars
+var rootElement = void 0;
+var Editor = void 0;
+var fields = void 0;
+
+// functions
+function Field(key, label, configRows) {
+ this.key = key;
+ this.label = label;
+ this.configRows = configRows || [];
+}
+
+function mount() {
+ rootElement = (0, _preact.render)((0, _preact.h)(_fieldBuilder.FieldBuilder, { fields: fields }), document.getElementById('hf-field-builder'), rootElement);
+}
+
+// bootstrap
+fields = [new Field("text", "Text", ["label", "placeholder", "default-value", "required", "wrap", "add-to-form"]), new Field("email", "Email", ["label", "placeholder", "default-value", "required", "wrap", "add-to-form"]), new Field("url", "URL", ["label", "placeholder", "default-value", "required", "wrap", "add-to-form"]), new Field("number", "Number", ["label", "placeholder", "default-value", "required", "wrap", "add-to-form"]), new Field("date", "Date", ["label", "default-value", "required", "wrap", "add-to-form"]), new Field("textarea", "Textarea", ["label", "placeholder", "default-value", "required", "wrap", "add-to-form"]), new Field("dropdown", "Dropdown", ["label", "choices", "required", "wrap", "add-to-form"]), new Field("checkbox", "Checkboxes", ["label", "choices", "wrap", "add-to-form"]), new Field("radio", "Radio buttons", ["label", "choices", "wrap", "add-to-form"]), new Field("submit", "Submit button", ["button-text", "wrap", "add-to-form"])];
+
+exports.default = {
+ init: function init() {
+ mount();
+ },
+
+ registerField: function registerField(key, label, configRows) {
+ fields.push(new Field(key, label, configRows));
+ mount();
+ }
+};
+
+},{"./components/field-builder.js":3,"preact":22}],7:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.htmlgenerate = undefined;
+
+var _preactRenderToString = require('preact-render-to-string');
+
+var _preactRenderToString2 = _interopRequireDefault(_preactRenderToString);
+
+var _preact = require('preact');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function htmlgenerate(conf) {
+ var fieldName = namify(conf.fieldLabel);
+ var fieldId = conf.formSlug + '-' + fieldName;
+ var label = conf.fieldLabel.length && conf.fieldType !== 'submit' ? (0, _preact.h)("label", {
+ "for": fieldId
+ }, conf.fieldLabel) : "";
+ var fieldAttr = void 0,
+ field = void 0;
+
+ switch (conf.fieldType) {
+ case "text":
+ default:
+ fieldAttr = {
+ type: conf.fieldType,
+ name: fieldName,
+ value: conf.value,
+ placeholder: conf.placeholder,
+ required: conf.required,
+ id: fieldId
+ };
+ field = html("input", fieldAttr);
+ break;
+ case "textarea":
+ fieldAttr = {
+ name: fieldName,
+ placeholder: conf.placeholder,
+ required: conf.required,
+ id: fieldId
+ };
+ field = html("textarea", fieldAttr, conf.value);
+ break;
+
+ case "dropdown":
+ fieldAttr = {
+ name: fieldName,
+ required: conf.required,
+ id: fieldId
+ };
+ var opts = conf.choices.map(function (choice) {
+ return html("option", { selected: choice.checked }, choice.label);
+ });
+ field = html("select", fieldAttr, opts);
+ break;
+
+ case "radio":
+ field = conf.choices.map(function (choice) {
+ return html("label", {}, [html("input", {
+ type: "radio",
+ name: fieldName,
+ value: choice.label,
+ selected: choice.checked
+ }), " ", html("span", {}, choice.label)]);
+ });
+ break;
+
+ case "checkbox":
+ field = conf.choices.map(function (choice) {
+ return html("label", {}, [html("input", {
+ type: "checkbox",
+ name: fieldName + "[]",
+ value: choice.label,
+ checked: choice.checked
+ }), " ", html("span", {}, choice.label)]);
+ });
+ break;
+
+ case "file":
+ fieldAttr = {
+ type: "file",
+ name: fieldName,
+ required: conf.required,
+ id: fieldId
+ };
+
+ if (conf['accept']) {
+ fieldAttr['accept'] = conf['accept'];
+ }
+
+ field = html("input", fieldAttr);
+ break;
+
+ case "submit":
+ fieldAttr = {
+ type: "submit",
+ value: conf.value
+ };
+ field = html("input", fieldAttr);
+ break;
+
+ }
+
+ var str = "";
+ if (conf.wrap) {
+ var tmpl = (0, _preact.h)("p", {}, [label, field]);
+ str = (0, _preactRenderToString2.default)(tmpl, null, { pretty: true });
+ } else {
+ str += (0, _preactRenderToString2.default)(label, null, { pretty: true });
+ str += "\n";
+ str += (0, _preactRenderToString2.default)(field, null, { pretty: true });
+ }
+
+ return str;
+}
+
+function html(tag, attr, children) {
+ return (0, _preact.h)(tag, filterEmptyObjectValues(attr), children);
+}
+
+function namify(str) {
+ return str.replace(/ /g, '_').replace(/[^\w\[\]_]*/g, "").toUpperCase();
+}
+
+function filterEmptyObjectValues(obj) {
+ var newObj = {};
+ for (var propName in obj) {
+ if (obj[propName] !== false && obj[propName] !== "") {
+ newObj[propName] = obj[propName];
+ }
+ }
+ return newObj;
+}
+
+exports.htmlgenerate = htmlgenerate;
+
+},{"preact":22,"preact-render-to-string":21}],8:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var availableActions = void 0,
+ actionTemplates = void 0,
+ actions = void 0;
+
+function init() {
+ actions = document.getElementById('hf-form-actions');
+ availableActions = document.getElementById('hf-available-form-actions');
+ actionTemplates = document.getElementById('hf-form-action-templates');
+
+ // turn settings into accordions
+ [].forEach.call(actions.querySelectorAll('.hf-action-settings'), function (el) {
+ el.parentNode.removeChild(el);
+
+ var heading = el.getAttribute('data-title');
+ var summary = el.querySelector('.hf-action-summary');
+ if (summary) {
+ heading += ' — <span class="hf-muted">' + summary.innerHTML + '</span>';
+ }
+ var wrap = createAccordion(heading, el.innerHTML);
+ actions.appendChild(wrap);
+
+ actions.querySelector('#hf-form-actions-empty').style.display = 'none';
+ });
+
+ availableActions.addEventListener('click', addAction, true);
+}
+
+function createAccordion(headingHTML, contentHTML) {
+ var wrap = document.createElement('div');
+ wrap.className = "hf-accordion expanded ";
+
+ var heading = document.createElement('h4');
+ heading.className = "hf-accordion-heading";
+ heading.innerHTML = headingHTML;
+ wrap.appendChild(heading);
+
+ var content = document.createElement('div');
+ content.className = "hf-accordion-content";
+ content.innerHTML = contentHTML;
+ wrap.appendChild(content);
+
+ var deleteWrap = document.createElement('p');
+ deleteWrap.style.textAlign = 'right';
+ var deleteLink = document.createElement('a');
+ deleteLink.href = 'javascript:void(0);';
+ deleteLink.className = "danger";
+ deleteLink.innerText = 'Delete this action';
+ deleteWrap.appendChild(deleteLink);
+ content.appendChild(deleteWrap);
+
+ // bind handlers
+ heading.addEventListener('click', createToggleActionHandler(wrap, content));
+ deleteLink.addEventListener('click', createDeleteActionHandler(wrap));
+ return wrap;
+}
+
+function addAction(e) {
+ var el = e.target || e.srcElement;
+ if (el.tagName !== 'INPUT') {
+ return;
+ }
+
+ var actionType = el.getAttribute('data-action-type');
+ var actionTemplate = actionTemplates.querySelector('#hf-action-type-' + actionType + '-template');
+
+ // append HTML to actions wrapper
+ var index = actions.querySelectorAll('div').length - 1;
+ var wrap = createAccordion(el.value, actionTemplate.innerHTML.replace(/\$index/g, index));
+ actions.appendChild(wrap);
+
+ // hide "no form actions" message
+ actions.querySelector('#hf-form-actions-empty').style.display = 'none';
+}
+
+function createDeleteActionHandler(wrap) {
+ return function () {
+ actions.removeChild(wrap);
+
+ if (actions.childElementCount === 1) {
+ actions.querySelector('#hf-form-actions-empty').style.display = '';
+ }
+ };
+}
+
+function createToggleActionHandler(wrap, content) {
+ return function () {
+ var show = content.offsetParent === null;
+ wrap.className = wrap.className.replace('expanded', '') + (show ? ' expanded' : '');
+ content.style.display = show ? 'block' : 'none';
+ };
+}
+
+exports.default = { init: init };
+
+},{}],9:[function(require,module,exports){
+'use strict';
+
+// load CodeMirror & plugins
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var CodeMirror = require('codemirror');
+require('codemirror/mode/xml/xml');
+require('codemirror/mode/javascript/javascript');
+require('codemirror/mode/css/css');
+require('codemirror/mode/htmlmixed/htmlmixed');
+require('codemirror/addon/fold/xml-fold');
+require('codemirror/addon/edit/matchtags');
+require('codemirror/addon/edit/closetag.js');
+
+var editor = void 0,
+ element = void 0,
+ dom = void 0,
+ requiredFieldsInput = void 0,
+ emailFieldsInput = void 0,
+ previewFrame = void 0,
+ previewDom = void 0;
+var templateRegex = /\{\{ *(\w+)(?:\.([\w\.]+))? *(?:\|\| *(\w+))? *\}\}/g;
+
+function init() {
+ previewFrame = document.getElementById('hf-form-preview');
+ element = document.getElementById('hf-form-editor');
+ dom = document.createElement('form');
+ requiredFieldsInput = document.getElementById('hf-required-fields');
+ emailFieldsInput = document.getElementById('hf-email-fields');
+
+ dom.innerHTML = element.value;
+ editor = CodeMirror.fromTextArea(element, {
+ selectionPointer: true,
+ matchTags: { bothTags: true },
+ mode: "htmlmixed",
+ htmlMode: true,
+ autoCloseTags: true,
+ autoRefresh: true,
+ styleActiveLine: true,
+ matchBrackets: true
+ });
+
+ editor.on('changes', debounce(updatePreview, 500));
+ editor.on('changes', debounce(updateShadowDOM, 100));
+ editor.on('changes', debounce(updateFieldVariables, 500));
+ editor.on('blur', updatePreview);
+ editor.on('blur', updateShadowDOM);
+ editor.on('blur', updateFieldVariables);
+ editor.on('blur', updateRequiredFields);
+ editor.on('blur', updateEmailFields);
+
+ previewFrame.addEventListener('load', setPreviewDom);
+ setPreviewDom();
+ updateFieldVariables();
+}
+
+function setPreviewDom() {
+ var frameContent = previewFrame.contentDocument || previewFrame.contentWindow.document;
+ previewDom = frameContent.querySelector('.hf-fields-wrap');
+
+ if (previewDom) {
+ updatePreview();
+ }
+}
+
+function getFieldVariableName(f) {
+ return f.name.replace('[]', '').replace(/\[(\w+)\]/g, '.$1');
+}
+
+function updateFieldVariables() {
+ var fields = dom.querySelectorAll('input[name], select[name], textarea[name], button[name]');
+ var fieldVariables = uniq([].map.call(fields, function (f) {
+ return '[' + getFieldVariableName(f) + ']';
+ }));
+ var wpbody = document.getElementById('wpbody-content');
+
+ [].forEach.call(document.querySelectorAll('.hf-field-names'), function (el) {
+ // remove existing variables
+ while (el.firstChild) {
+ el.removeChild(el.firstChild);
+ }
+
+ var variableElements = fieldVariables.map(function (n) {
+ // measure width of actual font size for prettiness
+ var sizeEl = document.createElement('span');
+ sizeEl.style.visibility = 'hidden';
+ sizeEl.innerText = n;
+ wpbody.appendChild(sizeEl);
+ var width = sizeEl.offsetWidth;
+ wpbody.removeChild(sizeEl);
+
+ // add input el
+ var el = document.createElement('input');
+ el.setAttribute('type', 'text');
+ el.style.maxWidth = width * 1.1 + 14 + 'px';
+ el.setAttribute('value', n);
+ el.setAttribute('readonly', true);
+ el.setAttribute('onfocus', 'this.select()');
+ return el;
+ });
+
+ variableElements.forEach(function (vel, i, arr) {
+ el.appendChild(vel);
+ });
+ });
+}
+
+function updatePreview() {
+ var markup = editor.getValue();
+
+ // replace template tags
+ markup = markup.replace(templateRegex, function (s, m) {
+ if (arguments[3]) {
+ return arguments[3];
+ }
+
+ return '';
+ });
+
+ // update dom
+ previewDom.innerHTML = markup;
+ previewDom.dispatchEvent(new Event('hf-refresh'));
+}
+
+function updateShadowDOM() {
+ dom.innerHTML = editor.getValue();
+}
+
+function updateRequiredFields() {
+ var fields = dom.querySelectorAll('[required]');
+ var fieldNames = [].map.call(fields, getFieldVariableName);
+ requiredFieldsInput.value = fieldNames.join(',');
+}
+
+function updateEmailFields() {
+ var fields = dom.querySelectorAll('input[type="email"]');
+ var fieldNames = [].map.call(fields, getFieldVariableName);
+ emailFieldsInput.value = fieldNames.join(',');
+}
+
+function replaceSelection(str) {
+ editor.replaceSelection(str);
+ editor.focus();
+}
+
+function debounce(func, wait, immediate) {
+ var timeout;
+ return function () {
+ var context = this,
+ args = arguments;
+ var later = function later() {
+ timeout = null;
+ if (!immediate) func.apply(context, args);
+ };
+ var callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) func.apply(context, args);
+ };
+};
+
+function uniq(a) {
+ var seen = {};
+ return a.filter(function (item) {
+ return seen.hasOwnProperty(item) ? false : seen[item] = true;
+ });
+}
+
+exports.default = {
+ init: init,
+ replaceSelection: replaceSelection
+};
+
+},{"codemirror":14,"codemirror/addon/edit/closetag.js":11,"codemirror/addon/edit/matchtags":12,"codemirror/addon/fold/xml-fold":13,"codemirror/mode/css/css":15,"codemirror/mode/htmlmixed/htmlmixed":16,"codemirror/mode/javascript/javascript":17,"codemirror/mode/xml/xml":18}],10:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+var tabs = void 0,
+ tabNavs = void 0;
+
+function init() {
+ tabs = document.querySelectorAll('.hf-tab');
+ tabNavs = document.querySelectorAll('#hf-tabs-nav a');
+ for (var i = 0; i < tabNavs.length; i++) {
+ tabNavs[i].addEventListener('click', open);
+ }
+};
+
+function open(e) {
+ var tabTarget = this.getAttribute('data-tab-target');
+ for (var i = 0; i < tabNavs.length; i++) {
+ tabNavs[i].classList.toggle('nav-tab-active', tabNavs[i] === this);
+ }
+ this.blur();
+
+ for (var _i = 0; _i < tabs.length; _i++) {
+ var tab = tabs[_i];
+ tab.classList.toggle('hf-tab-active', tab.getAttribute('data-tab') === tabTarget);
+ }
+
+ document.title = document.title.replace(document.title.split(' - ').shift(), this.innerText + " ");
+
+ if (window.history) {
+ var newUrl = window.location.href;
+ newUrl = newUrl.replace(/\&tab\=\w+/, "");
+ newUrl += "&tab=" + tabTarget;
+
+ window.history.replaceState({ tab: tabTarget }, document.title, newUrl);
+ }
+
+ e.preventDefault();
+};
+
+exports.default = {
+ init: init,
+ open: open
+};
+
+},{}],11:[function(require,module,exports){
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+/**
+ * Tag-closer extension for CodeMirror.
+ *
+ * This extension adds an "autoCloseTags" option that can be set to
+ * either true to get the default behavior, or an object to further
+ * configure its behavior.
+ *
+ * These are supported options:
+ *
+ * `whenClosing` (default true)
+ * Whether to autoclose when the '/' of a closing tag is typed.
+ * `whenOpening` (default true)
+ * Whether to autoclose the tag when the final '>' of an opening
+ * tag is typed.
+ * `dontCloseTags` (default is empty tags for HTML, none for XML)
+ * An array of tag names that should not be autoclosed.
+ * `indentTags` (default is block tags for HTML, none for XML)
+ * An array of tag names that should, when opened, cause a
+ * blank line to be added inside the tag, and the blank line and
+ * closing line to be indented.
+ *
+ * See demos/closetag.html for a usage example.
+ */
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"), require("../fold/xml-fold"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror", "../fold/xml-fold"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ CodeMirror.defineOption("autoCloseTags", false, function(cm, val, old) {
+ if (old != CodeMirror.Init && old)
+ cm.removeKeyMap("autoCloseTags");
+ if (!val) return;
+ var map = {name: "autoCloseTags"};
+ if (typeof val != "object" || val.whenClosing)
+ map["'/'"] = function(cm) { return autoCloseSlash(cm); };
+ if (typeof val != "object" || val.whenOpening)
+ map["'>'"] = function(cm) { return autoCloseGT(cm); };
+ cm.addKeyMap(map);
+ });
+
+ var htmlDontClose = ["area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param",
+ "source", "track", "wbr"];
+ var htmlIndent = ["applet", "blockquote", "body", "button", "div", "dl", "fieldset", "form", "frameset", "h1", "h2", "h3", "h4",
+ "h5", "h6", "head", "html", "iframe", "layer", "legend", "object", "ol", "p", "select", "table", "ul"];
+
+ function autoCloseGT(cm) {
+ if (cm.getOption("disableInput")) return CodeMirror.Pass;
+ var ranges = cm.listSelections(), replacements = [];
+ var opt = cm.getOption("autoCloseTags");
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) return CodeMirror.Pass;
+ var pos = ranges[i].head, tok = cm.getTokenAt(pos);
+ var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;
+ if (inner.mode.name != "xml" || !state.tagName) return CodeMirror.Pass;
+
+ var html = inner.mode.configuration == "html";
+ var dontCloseTags = (typeof opt == "object" && opt.dontCloseTags) || (html && htmlDontClose);
+ var indentTags = (typeof opt == "object" && opt.indentTags) || (html && htmlIndent);
+
+ var tagName = state.tagName;
+ if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch);
+ var lowerTagName = tagName.toLowerCase();
+ // Don't process the '>' at the end of an end-tag or self-closing tag
+ if (!tagName ||
+ tok.type == "string" && (tok.end != pos.ch || !/[\"\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) ||
+ tok.type == "tag" && state.type == "closeTag" ||
+ tok.string.indexOf("/") == (tok.string.length - 1) || // match something like <someTagName />
+ dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 ||
+ closingTagExists(cm, tagName, pos, state, true))
+ return CodeMirror.Pass;
+
+ var indent = indentTags && indexOf(indentTags, lowerTagName) > -1;
+ replacements[i] = {indent: indent,
+ text: ">" + (indent ? "\n\n" : "") + "</" + tagName + ">",
+ newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)};
+ }
+
+ var dontIndentOnAutoClose = (typeof opt == "object" && opt.dontIndentOnAutoClose);
+ for (var i = ranges.length - 1; i >= 0; i--) {
+ var info = replacements[i];
+ cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, "+insert");
+ var sel = cm.listSelections().slice(0);
+ sel[i] = {head: info.newPos, anchor: info.newPos};
+ cm.setSelections(sel);
+ if (!dontIndentOnAutoClose && info.indent) {
+ cm.indentLine(info.newPos.line, null, true);
+ cm.indentLine(info.newPos.line + 1, null, true);
+ }
+ }
+ }
+
+ function autoCloseCurrent(cm, typingSlash) {
+ var ranges = cm.listSelections(), replacements = [];
+ var head = typingSlash ? "/" : "</";
+ var opt = cm.getOption("autoCloseTags");
+ var dontIndentOnAutoClose = (typeof opt == "object" && opt.dontIndentOnSlash);
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) return CodeMirror.Pass;
+ var pos = ranges[i].head, tok = cm.getTokenAt(pos);
+ var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;
+ if (typingSlash && (tok.type == "string" || tok.string.charAt(0) != "<" ||
+ tok.start != pos.ch - 1))
+ return CodeMirror.Pass;
+ // Kludge to get around the fact that we are not in XML mode
+ // when completing in JS/CSS snippet in htmlmixed mode. Does not
+ // work for other XML embedded languages (there is no general
+ // way to go from a mixed mode to its current XML state).
+ var replacement;
+ if (inner.mode.name != "xml") {
+ if (cm.getMode().name == "htmlmixed" && inner.mode.name == "javascript")
+ replacement = head + "script";
+ else if (cm.getMode().name == "htmlmixed" && inner.mode.name == "css")
+ replacement = head + "style";
+ else
+ return CodeMirror.Pass;
+ } else {
+ if (!state.context || !state.context.tagName ||
+ closingTagExists(cm, state.context.tagName, pos, state))
+ return CodeMirror.Pass;
+ replacement = head + state.context.tagName;
+ }
+ if (cm.getLine(pos.line).charAt(tok.end) != ">") replacement += ">";
+ replacements[i] = replacement;
+ }
+ cm.replaceSelections(replacements);
+ ranges = cm.listSelections();
+ if (!dontIndentOnAutoClose) {
+ for (var i = 0; i < ranges.length; i++)
+ if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line)
+ cm.indentLine(ranges[i].head.line);
+ }
+ }
+
+ function autoCloseSlash(cm) {
+ if (cm.getOption("disableInput")) return CodeMirror.Pass;
+ return autoCloseCurrent(cm, true);
+ }
+
+ CodeMirror.commands.closeTag = function(cm) { return autoCloseCurrent(cm); };
+
+ function indexOf(collection, elt) {
+ if (collection.indexOf) return collection.indexOf(elt);
+ for (var i = 0, e = collection.length; i < e; ++i)
+ if (collection[i] == elt) return i;
+ return -1;
+ }
+
+ // If xml-fold is loaded, we use its functionality to try and verify
+ // whether a given tag is actually unclosed.
+ function closingTagExists(cm, tagName, pos, state, newTag) {
+ if (!CodeMirror.scanForClosingTag) return false;
+ var end = Math.min(cm.lastLine() + 1, pos.line + 500);
+ var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end);
+ if (!nextClose || nextClose.tag != tagName) return false;
+ var cx = state.context;
+ // If the immediate wrapping context contains onCx instances of
+ // the same tag, a closing tag only exists if there are at least
+ // that many closing tags of that type following.
+ for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx;
+ pos = nextClose.to;
+ for (var i = 1; i < onCx; i++) {
+ var next = CodeMirror.scanForClosingTag(cm, pos, null, end);
+ if (!next || next.tag != tagName) return false;
+ pos = next.to;
+ }
+ return true;
+ }
+});
+
+},{"../../lib/codemirror":14,"../fold/xml-fold":13}],12:[function(require,module,exports){
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"), require("../fold/xml-fold"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror", "../fold/xml-fold"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ CodeMirror.defineOption("matchTags", false, function(cm, val, old) {
+ if (old && old != CodeMirror.Init) {
+ cm.off("cursorActivity", doMatchTags);
+ cm.off("viewportChange", maybeUpdateMatch);
+ clear(cm);
+ }
+ if (val) {
+ cm.state.matchBothTags = typeof val == "object" && val.bothTags;
+ cm.on("cursorActivity", doMatchTags);
+ cm.on("viewportChange", maybeUpdateMatch);
+ doMatchTags(cm);
+ }
+ });
+
+ function clear(cm) {
+ if (cm.state.tagHit) cm.state.tagHit.clear();
+ if (cm.state.tagOther) cm.state.tagOther.clear();
+ cm.state.tagHit = cm.state.tagOther = null;
+ }
+
+ function doMatchTags(cm) {
+ cm.state.failedTagMatch = false;
+ cm.operation(function() {
+ clear(cm);
+ if (cm.somethingSelected()) return;
+ var cur = cm.getCursor(), range = cm.getViewport();
+ range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to);
+ var match = CodeMirror.findMatchingTag(cm, cur, range);
+ if (!match) return;
+ if (cm.state.matchBothTags) {
+ var hit = match.at == "open" ? match.open : match.close;
+ if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: "CodeMirror-matchingtag"});
+ }
+ var other = match.at == "close" ? match.open : match.close;
+ if (other)
+ cm.state.tagOther = cm.markText(other.from, other.to, {className: "CodeMirror-matchingtag"});
+ else
+ cm.state.failedTagMatch = true;
+ });
+ }
+
+ function maybeUpdateMatch(cm) {
+ if (cm.state.failedTagMatch) doMatchTags(cm);
+ }
+
+ CodeMirror.commands.toMatchingTag = function(cm) {
+ var found = CodeMirror.findMatchingTag(cm, cm.getCursor());
+ if (found) {
+ var other = found.at == "close" ? found.open : found.close;
+ if (other) cm.extendSelection(other.to, other.from);
+ }
+ };
+});
+
+},{"../../lib/codemirror":14,"../fold/xml-fold":13}],13:[function(require,module,exports){
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ var Pos = CodeMirror.Pos;
+ function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }
+
+ var nameStartChar = "A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
+ var nameChar = nameStartChar + "\-\:\.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
+ var xmlTagStart = new RegExp("<(/?)([" + nameStartChar + "][" + nameChar + "]*)", "g");
+
+ function Iter(cm, line, ch, range) {
+ this.line = line; this.ch = ch;
+ this.cm = cm; this.text = cm.getLine(line);
+ this.min = range ? Math.max(range.from, cm.firstLine()) : cm.firstLine();
+ this.max = range ? Math.min(range.to - 1, cm.lastLine()) : cm.lastLine();
+ }
+
+ function tagAt(iter, ch) {
+ var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch));
+ return type && /\btag\b/.test(type);
+ }
+
+ function nextLine(iter) {
+ if (iter.line >= iter.max) return;
+ iter.ch = 0;
+ iter.text = iter.cm.getLine(++iter.line);
+ return true;
+ }
+ function prevLine(iter) {
+ if (iter.line <= iter.min) return;
+ iter.text = iter.cm.getLine(--iter.line);
+ iter.ch = iter.text.length;
+ return true;
+ }
+
+ function toTagEnd(iter) {
+ for (;;) {
+ var gt = iter.text.indexOf(">", iter.ch);
+ if (gt == -1) { if (nextLine(iter)) continue; else return; }
+ if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; }
+ var lastSlash = iter.text.lastIndexOf("/", gt);
+ var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt));
+ iter.ch = gt + 1;
+ return selfClose ? "selfClose" : "regular";
+ }
+ }
+ function toTagStart(iter) {
+ for (;;) {
+ var lt = iter.ch ? iter.text.lastIndexOf("<", iter.ch - 1) : -1;
+ if (lt == -1) { if (prevLine(iter)) continue; else return; }
+ if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; }
+ xmlTagStart.lastIndex = lt;
+ iter.ch = lt;
+ var match = xmlTagStart.exec(iter.text);
+ if (match && match.index == lt) return match;
+ }
+ }
+
+ function toNextTag(iter) {
+ for (;;) {
+ xmlTagStart.lastIndex = iter.ch;
+ var found = xmlTagStart.exec(iter.text);
+ if (!found) { if (nextLine(iter)) continue; else return; }
+ if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; }
+ iter.ch = found.index + found[0].length;
+ return found;
+ }
+ }
+ function toPrevTag(iter) {
+ for (;;) {
+ var gt = iter.ch ? iter.text.lastIndexOf(">", iter.ch - 1) : -1;
+ if (gt == -1) { if (prevLine(iter)) continue; else return; }
+ if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; }
+ var lastSlash = iter.text.lastIndexOf("/", gt);
+ var selfClose = lastSlash > -1 && !/\S/.test(iter.text.slice(lastSlash + 1, gt));
+ iter.ch = gt + 1;
+ return selfClose ? "selfClose" : "regular";
+ }
+ }
+
+ function findMatchingClose(iter, tag) {
+ var stack = [];
+ for (;;) {
+ var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0);
+ if (!next || !(end = toTagEnd(iter))) return;
+ if (end == "selfClose") continue;
+ if (next[1]) { // closing tag
+ for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) {
+ stack.length = i;
+ break;
+ }
+ if (i < 0 && (!tag || tag == next[2])) return {
+ tag: next[2],
+ from: Pos(startLine, startCh),
+ to: Pos(iter.line, iter.ch)
+ };
+ } else { // opening tag
+ stack.push(next[2]);
+ }
+ }
+ }
+ function findMatchingOpen(iter, tag) {
+ var stack = [];
+ for (;;) {
+ var prev = toPrevTag(iter);
+ if (!prev) return;
+ if (prev == "selfClose") { toTagStart(iter); continue; }
+ var endLine = iter.line, endCh = iter.ch;
+ var start = toTagStart(iter);
+ if (!start) return;
+ if (start[1]) { // closing tag
+ stack.push(start[2]);
+ } else { // opening tag
+ for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) {
+ stack.length = i;
+ break;
+ }
+ if (i < 0 && (!tag || tag == start[2])) return {
+ tag: start[2],
+ from: Pos(iter.line, iter.ch),
+ to: Pos(endLine, endCh)
+ };
+ }
+ }
+ }
+
+ CodeMirror.registerHelper("fold", "xml", function(cm, start) {
+ var iter = new Iter(cm, start.line, 0);
+ for (;;) {
+ var openTag = toNextTag(iter)
+ if (!openTag || iter.line != start.line) return
+ var end = toTagEnd(iter)
+ if (!end) return
+ if (!openTag[1] && end != "selfClose") {
+ var startPos = Pos(iter.line, iter.ch);
+ var endPos = findMatchingClose(iter, openTag[2]);
+ return endPos && cmp(endPos.from, startPos) > 0 ? {from: startPos, to: endPos.from} : null
+ }
+ }
+ });
+ CodeMirror.findMatchingTag = function(cm, pos, range) {
+ var iter = new Iter(cm, pos.line, pos.ch, range);
+ if (iter.text.indexOf(">") == -1 && iter.text.indexOf("<") == -1) return;
+ var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch);
+ var start = end && toTagStart(iter);
+ if (!end || !start || cmp(iter, pos) > 0) return;
+ var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]};
+ if (end == "selfClose") return {open: here, close: null, at: "open"};
+
+ if (start[1]) { // closing tag
+ return {open: findMatchingOpen(iter, start[2]), close: here, at: "close"};
+ } else { // opening tag
+ iter = new Iter(cm, to.line, to.ch, range);
+ return {open: here, close: findMatchingClose(iter, start[2]), at: "open"};
+ }
+ };
+
+ CodeMirror.findEnclosingTag = function(cm, pos, range, tag) {
+ var iter = new Iter(cm, pos.line, pos.ch, range);
+ for (;;) {
+ var open = findMatchingOpen(iter, tag);
+ if (!open) break;
+ var forward = new Iter(cm, pos.line, pos.ch, range);
+ var close = findMatchingClose(forward, open.tag);
+ if (close) return {open: open, close: close};
+ }
+ };
+
+ // Used by addon/edit/closetag.js
+ CodeMirror.scanForClosingTag = function(cm, pos, name, end) {
+ var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);
+ return findMatchingClose(iter, name);
+ };
+});
+
+},{"../../lib/codemirror":14}],14:[function(require,module,exports){
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+// This is CodeMirror (http://codemirror.net), a code editor
+// implemented in JavaScript on top of the browser's DOM.
+//
+// You can find some technical background for some of the code below
+// at http://marijnhaverbeke.nl/blog/#cm-internals .
+
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define(factory) :
+ (global.CodeMirror = factory());
+}(this, (function () { 'use strict';
+
+// Kludges for bugs and behavior differences that can't be feature
+// detected are enabled based on userAgent etc sniffing.
+var userAgent = navigator.userAgent;
+var platform = navigator.platform;
+
+var gecko = /gecko\/\d/i.test(userAgent);
+var ie_upto10 = /MSIE \d/.test(userAgent);
+var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent);
+var edge = /Edge\/(\d+)/.exec(userAgent);
+var ie = ie_upto10 || ie_11up || edge;
+var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);
+var webkit = !edge && /WebKit\//.test(userAgent);
+var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent);
+var chrome = !edge && /Chrome\//.test(userAgent);
+var presto = /Opera\//.test(userAgent);
+var safari = /Apple Computer/.test(navigator.vendor);
+var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);
+var phantom = /PhantomJS/.test(userAgent);
+
+var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent);
+var android = /Android/.test(userAgent);
+// This is woefully incomplete. Suggestions for alternative methods welcome.
+var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);
+var mac = ios || /Mac/.test(platform);
+var chromeOS = /\bCrOS\b/.test(userAgent);
+var windows = /win/i.test(platform);
+
+var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/);
+if (presto_version) { presto_version = Number(presto_version[1]); }
+if (presto_version && presto_version >= 15) { presto = false; webkit = true; }
+// Some browsers use the wrong event properties to signal cmd/ctrl on OS X
+var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
+var captureRightClick = gecko || (ie && ie_version >= 9);
+
+function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") }
+
+var rmClass = function(node, cls) {
+ var current = node.className;
+ var match = classTest(cls).exec(current);
+ if (match) {
+ var after = current.slice(match.index + match[0].length);
+ node.className = current.slice(0, match.index) + (after ? match[1] + after : "");
+ }
+};
+
+function removeChildren(e) {
+ for (var count = e.childNodes.length; count > 0; --count)
+ { e.removeChild(e.firstChild); }
+ return e
+}
+
+function removeChildrenAndAdd(parent, e) {
+ return removeChildren(parent).appendChild(e)
+}
+
+function elt(tag, content, className, style) {
+ var e = document.createElement(tag);
+ if (className) { e.className = className; }
+ if (style) { e.style.cssText = style; }
+ if (typeof content == "string") { e.appendChild(document.createTextNode(content)); }
+ else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }
+ return e
+}
+// wrapper for elt, which removes the elt from the accessibility tree
+function eltP(tag, content, className, style) {
+ var e = elt(tag, content, className, style);
+ e.setAttribute("role", "presentation");
+ return e
+}
+
+var range;
+if (document.createRange) { range = function(node, start, end, endNode) {
+ var r = document.createRange();
+ r.setEnd(endNode || node, end);
+ r.setStart(node, start);
+ return r
+}; }
+else { range = function(node, start, end) {
+ var r = document.body.createTextRange();
+ try { r.moveToElementText(node.parentNode); }
+ catch(e) { return r }
+ r.collapse(true);
+ r.moveEnd("character", end);
+ r.moveStart("character", start);
+ return r
+}; }
+
+function contains(parent, child) {
+ if (child.nodeType == 3) // Android browser always returns false when child is a textnode
+ { child = child.parentNode; }
+ if (parent.contains)
+ { return parent.contains(child) }
+ do {
+ if (child.nodeType == 11) { child = child.host; }
+ if (child == parent) { return true }
+ } while (child = child.parentNode)
+}
+
+function activeElt() {
+ // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement.
+ // IE < 10 will throw when accessed while the page is loading or in an iframe.
+ // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.
+ var activeElement;
+ try {
+ activeElement = document.activeElement;
+ } catch(e) {
+ activeElement = document.body || null;
+ }
+ while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)
+ { activeElement = activeElement.shadowRoot.activeElement; }
+ return activeElement
+}
+
+function addClass(node, cls) {
+ var current = node.className;
+ if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls; }
+}
+function joinClasses(a, b) {
+ var as = a.split(" ");
+ for (var i = 0; i < as.length; i++)
+ { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i]; } }
+ return b
+}
+
+var selectInput = function(node) { node.select(); };
+if (ios) // Mobile Safari apparently has a bug where select() is broken.
+ { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }
+else if (ie) // Suppress mysterious IE10 errors
+ { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }
+
+function bind(f) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function(){return f.apply(null, args)}
+}
+
+function copyObj(obj, target, overwrite) {
+ if (!target) { target = {}; }
+ for (var prop in obj)
+ { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))
+ { target[prop] = obj[prop]; } }
+ return target
+}
+
+// Counts the column offset in a string, taking tabs into account.
+// Used mostly to find indentation.
+function countColumn(string, end, tabSize, startIndex, startValue) {
+ if (end == null) {
+ end = string.search(/[^\s\u00a0]/);
+ if (end == -1) { end = string.length; }
+ }
+ for (var i = startIndex || 0, n = startValue || 0;;) {
+ var nextTab = string.indexOf("\t", i);
+ if (nextTab < 0 || nextTab >= end)
+ { return n + (end - i) }
+ n += nextTab - i;
+ n += tabSize - (n % tabSize);
+ i = nextTab + 1;
+ }
+}
+
+var Delayed = function() {this.id = null;};
+Delayed.prototype.set = function (ms, f) {
+ clearTimeout(this.id);
+ this.id = setTimeout(f, ms);
+};
+
+function indexOf(array, elt) {
+ for (var i = 0; i < array.length; ++i)
+ { if (array[i] == elt) { return i } }
+ return -1
+}
+
+// Number of pixels added to scroller and sizer to hide scrollbar
+var scrollerGap = 30;
+
+// Returned or thrown by various protocols to signal 'I'm not
+// handling this'.
+var Pass = {toString: function(){return "CodeMirror.Pass"}};
+
+// Reused option objects for setSelection & friends
+var sel_dontScroll = {scroll: false};
+var sel_mouse = {origin: "*mouse"};
+var sel_move = {origin: "+move"};
+
+// The inverse of countColumn -- find the offset that corresponds to
+// a particular column.
+function findColumn(string, goal, tabSize) {
+ for (var pos = 0, col = 0;;) {
+ var nextTab = string.indexOf("\t", pos);
+ if (nextTab == -1) { nextTab = string.length; }
+ var skipped = nextTab - pos;
+ if (nextTab == string.length || col + skipped >= goal)
+ { return pos + Math.min(skipped, goal - col) }
+ col += nextTab - pos;
+ col += tabSize - (col % tabSize);
+ pos = nextTab + 1;
+ if (col >= goal) { return pos }
+ }
+}
+
+var spaceStrs = [""];
+function spaceStr(n) {
+ while (spaceStrs.length <= n)
+ { spaceStrs.push(lst(spaceStrs) + " "); }
+ return spaceStrs[n]
+}
+
+function lst(arr) { return arr[arr.length-1] }
+
+function map(array, f) {
+ var out = [];
+ for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }
+ return out
+}
+
+function insertSorted(array, value, score) {
+ var pos = 0, priority = score(value);
+ while (pos < array.length && score(array[pos]) <= priority) { pos++; }
+ array.splice(pos, 0, value);
+}
+
+function nothing() {}
+
+function createObj(base, props) {
+ var inst;
+ if (Object.create) {
+ inst = Object.create(base);
+ } else {
+ nothing.prototype = base;
+ inst = new nothing();
+ }
+ if (props) { copyObj(props, inst); }
+ return inst
+}
+
+var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
+function isWordCharBasic(ch) {
+ return /\w/.test(ch) || ch > "\x80" &&
+ (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))
+}
+function isWordChar(ch, helper) {
+ if (!helper) { return isWordCharBasic(ch) }
+ if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true }
+ return helper.test(ch)
+}
+
+function isEmpty(obj) {
+ for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }
+ return true
+}
+
+// Extending unicode characters. A series of a non-extending char +
+// any number of extending chars is treated as a single unit as far
+// as editing and measuring is concerned. This is not fully correct,
+// since some scripts/fonts/browsers also treat other configurations
+// of code points as a group.
+var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
+function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }
+
+// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.
+function skipExtendingChars(str, pos, dir) {
+ while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }
+ return pos
+}
+
+// Returns the value from the range [`from`; `to`] that satisfies
+// `pred` and is closest to `from`. Assumes that at least `to`
+// satisfies `pred`. Supports `from` being greater than `to`.
+function findFirst(pred, from, to) {
+ // At any point we are certain `to` satisfies `pred`, don't know
+ // whether `from` does.
+ var dir = from > to ? -1 : 1;
+ for (;;) {
+ if (from == to) { return from }
+ var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);
+ if (mid == from) { return pred(mid) ? from : to }
+ if (pred(mid)) { to = mid; }
+ else { from = mid + dir; }
+ }
+}
+
+// The display handles the DOM integration, both for input reading
+// and content drawing. It holds references to DOM nodes and
+// display-related state.
+
+function Display(place, doc, input) {
+ var d = this;
+ this.input = input;
+
+ // Covers bottom-right square when both scrollbars are present.
+ d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
+ d.scrollbarFiller.setAttribute("cm-not-content", "true");
+ // Covers bottom of gutter when coverGutterNextToScrollbar is on
+ // and h scrollbar is present.
+ d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
+ d.gutterFiller.setAttribute("cm-not-content", "true");
+ // Will contain the actual code, positioned to cover the viewport.
+ d.lineDiv = eltP("div", null, "CodeMirror-code");
+ // Elements are added to these to represent selection and cursors.
+ d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
+ d.cursorDiv = elt("div", null, "CodeMirror-cursors");
+ // A visibility: hidden element used to find the size of things.
+ d.measure = elt("div", null, "CodeMirror-measure");
+ // When lines outside of the viewport are measured, they are drawn in this.
+ d.lineMeasure = elt("div", null, "CodeMirror-measure");
+ // Wraps everything that needs to exist inside the vertically-padded coordinate system
+ d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],
+ null, "position: relative; outline: none");
+ var lines = eltP("div", [d.lineSpace], "CodeMirror-lines");
+ // Moved around its parent to cover visible view.
+ d.mover = elt("div", [lines], null, "position: relative");
+ // Set to the height of the document, allowing scrolling.
+ d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
+ d.sizerWidth = null;
+ // Behavior of elts with overflow: auto and padding is
+ // inconsistent across browsers. This is used to ensure the
+ // scrollable area is big enough.
+ d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;");
+ // Will contain the gutters, if any.
+ d.gutters = elt("div", null, "CodeMirror-gutters");
+ d.lineGutter = null;
+ // Actual scrollable element.
+ d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
+ d.scroller.setAttribute("tabIndex", "-1");
+ // The element in which the editor lives.
+ d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
+
+ // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
+ if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
+ if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }
+
+ if (place) {
+ if (place.appendChild) { place.appendChild(d.wrapper); }
+ else { place(d.wrapper); }
+ }
+
+ // Current rendered range (may be bigger than the view window).
+ d.viewFrom = d.viewTo = doc.first;
+ d.reportedViewFrom = d.reportedViewTo = doc.first;
+ // Information about the rendered lines.
+ d.view = [];
+ d.renderedView = null;
+ // Holds info about a single rendered line when it was rendered
+ // for measurement, while not in view.
+ d.externalMeasured = null;
+ // Empty space (in pixels) above the view
+ d.viewOffset = 0;
+ d.lastWrapHeight = d.lastWrapWidth = 0;
+ d.updateLineNumbers = null;
+
+ d.nativeBarWidth = d.barHeight = d.barWidth = 0;
+ d.scrollbarsClipped = false;
+
+ // Used to only resize the line number gutter when necessary (when
+ // the amount of lines crosses a boundary that makes its width change)
+ d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
+ // Set to true when a non-horizontal-scrolling line widget is
+ // added. As an optimization, line widget aligning is skipped when
+ // this is false.
+ d.alignWidgets = false;
+
+ d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
+
+ // Tracks the maximum line length so that the horizontal scrollbar
+ // can be kept static when scrolling.
+ d.maxLine = null;
+ d.maxLineLength = 0;
+ d.maxLineChanged = false;
+
+ // Used for measuring wheel scrolling granularity
+ d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
+
+ // True when shift is held down.
+ d.shift = false;
+
+ // Used to track whether anything happened since the context menu
+ // was opened.
+ d.selForContextMenu = null;
+
+ d.activeTouch = null;
+
+ input.init(d);
+}
+
+// Find the line object corresponding to the given line number.
+function getLine(doc, n) {
+ n -= doc.first;
+ if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") }
+ var chunk = doc;
+ while (!chunk.lines) {
+ for (var i = 0;; ++i) {
+ var child = chunk.children[i], sz = child.chunkSize();
+ if (n < sz) { chunk = child; break }
+ n -= sz;
+ }
+ }
+ return chunk.lines[n]
+}
+
+// Get the part of a document between two positions, as an array of
+// strings.
+function getBetween(doc, start, end) {
+ var out = [], n = start.line;
+ doc.iter(start.line, end.line + 1, function (line) {
+ var text = line.text;
+ if (n == end.line) { text = text.slice(0, end.ch); }
+ if (n == start.line) { text = text.slice(start.ch); }
+ out.push(text);
+ ++n;
+ });
+ return out
+}
+// Get the lines between from and to, as array of strings.
+function getLines(doc, from, to) {
+ var out = [];
+ doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value
+ return out
+}
+
+// Update the height of a line, propagating the height change
+// upwards to parent nodes.
+function updateLineHeight(line, height) {
+ var diff = height - line.height;
+ if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }
+}
+
+// Given a line object, find its line number by walking up through
+// its parent links.
+function lineNo(line) {
+ if (line.parent == null) { return null }
+ var cur = line.parent, no = indexOf(cur.lines, line);
+ for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {
+ for (var i = 0;; ++i) {
+ if (chunk.children[i] == cur) { break }
+ no += chunk.children[i].chunkSize();
+ }
+ }
+ return no + cur.first
+}
+
+// Find the line at the given vertical position, using the height
+// information in the document tree.
+function lineAtHeight(chunk, h) {
+ var n = chunk.first;
+ outer: do {
+ for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
+ var child = chunk.children[i$1], ch = child.height;
+ if (h < ch) { chunk = child; continue outer }
+ h -= ch;
+ n += child.chunkSize();
+ }
+ return n
+ } while (!chunk.lines)
+ var i = 0;
+ for (; i < chunk.lines.length; ++i) {
+ var line = chunk.lines[i], lh = line.height;
+ if (h < lh) { break }
+ h -= lh;
+ }
+ return n + i
+}
+
+function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}
+
+function lineNumberFor(options, i) {
+ return String(options.lineNumberFormatter(i + options.firstLineNumber))
+}
+
+// A Pos instance represents a position within the text.
+function Pos(line, ch, sticky) {
+ if ( sticky === void 0 ) sticky = null;
+
+ if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }
+ this.line = line;
+ this.ch = ch;
+ this.sticky = sticky;
+}
+
+// Compare two positions, return 0 if they are the same, a negative
+// number when a is less, and a positive number otherwise.
+function cmp(a, b) { return a.line - b.line || a.ch - b.ch }
+
+function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }
+
+function copyPos(x) {return Pos(x.line, x.ch)}
+function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }
+function minPos(a, b) { return cmp(a, b) < 0 ? a : b }
+
+// Most of the external API clips given positions to make sure they
+// actually exist within the document.
+function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}
+function clipPos(doc, pos) {
+ if (pos.line < doc.first) { return Pos(doc.first, 0) }
+ var last = doc.first + doc.size - 1;
+ if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }
+ return clipToLen(pos, getLine(doc, pos.line).text.length)
+}
+function clipToLen(pos, linelen) {
+ var ch = pos.ch;
+ if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }
+ else if (ch < 0) { return Pos(pos.line, 0) }
+ else { return pos }
+}
+function clipPosArray(doc, array) {
+ var out = [];
+ for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }
+ return out
+}
+
+// Optimize some code when these features are not used.
+var sawReadOnlySpans = false;
+var sawCollapsedSpans = false;
+
+function seeReadOnlySpans() {
+ sawReadOnlySpans = true;
+}
+
+function seeCollapsedSpans() {
+ sawCollapsedSpans = true;
+}
+
+// TEXTMARKER SPANS
+
+function MarkedSpan(marker, from, to) {
+ this.marker = marker;
+ this.from = from; this.to = to;
+}
+
+// Search an array of spans for a span matching the given marker.
+function getMarkedSpanFor(spans, marker) {
+ if (spans) { for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i];
+ if (span.marker == marker) { return span }
+ } }
+}
+// Remove a span from an array, returning undefined if no spans are
+// left (we don't store arrays for lines without spans).
+function removeMarkedSpan(spans, span) {
+ var r;
+ for (var i = 0; i < spans.length; ++i)
+ { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }
+ return r
+}
+// Add a span to a line.
+function addMarkedSpan(line, span) {
+ line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
+ span.marker.attachLine(line);
+}
+
+// Used for the algorithm that adjusts markers for a change in the
+// document. These functions cut an array of spans at a given
+// character position, returning an array of remaining chunks (or
+// undefined if nothing remains).
+function markedSpansBefore(old, startCh, isInsert) {
+ var nw;
+ if (old) { for (var i = 0; i < old.length; ++i) {
+ var span = old[i], marker = span.marker;
+ var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
+ if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
+ var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));
+ }
+ } }
+ return nw
+}
+function markedSpansAfter(old, endCh, isInsert) {
+ var nw;
+ if (old) { for (var i = 0; i < old.length; ++i) {
+ var span = old[i], marker = span.marker;
+ var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
+ if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
+ var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,
+ span.to == null ? null : span.to - endCh));
+ }
+ } }
+ return nw
+}
+
+// Given a change object, compute the new set of marker spans that
+// cover the line in which the change took place. Removes spans
+// entirely within the change, reconnects spans belonging to the
+// same marker that appear on both sides of the change, and cuts off
+// spans partially within the change. Returns an array of span
+// arrays with one element for each line in (after) the change.
+function stretchSpansOverChange(doc, change) {
+ if (change.full) { return null }
+ var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
+ var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
+ if (!oldFirst && !oldLast) { return null }
+
+ var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;
+ // Get the spans that 'stick out' on both sides
+ var first = markedSpansBefore(oldFirst, startCh, isInsert);
+ var last = markedSpansAfter(oldLast, endCh, isInsert);
+
+ // Next, merge those two ends
+ var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
+ if (first) {
+ // Fix up .to properties of first
+ for (var i = 0; i < first.length; ++i) {
+ var span = first[i];
+ if (span.to == null) {
+ var found = getMarkedSpanFor(last, span.marker);
+ if (!found) { span.to = startCh; }
+ else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }
+ }
+ }
+ }
+ if (last) {
+ // Fix up .from in last (or move them into first in case of sameLine)
+ for (var i$1 = 0; i$1 < last.length; ++i$1) {
+ var span$1 = last[i$1];
+ if (span$1.to != null) { span$1.to += offset; }
+ if (span$1.from == null) {
+ var found$1 = getMarkedSpanFor(first, span$1.marker);
+ if (!found$1) {
+ span$1.from = offset;
+ if (sameLine) { (first || (first = [])).push(span$1); }
+ }
+ } else {
+ span$1.from += offset;
+ if (sameLine) { (first || (first = [])).push(span$1); }
+ }
+ }
+ }
+ // Make sure we didn't create any zero-length spans
+ if (first) { first = clearEmptySpans(first); }
+ if (last && last != first) { last = clearEmptySpans(last); }
+
+ var newMarkers = [first];
+ if (!sameLine) {
+ // Fill gap with whole-line-spans
+ var gap = change.text.length - 2, gapMarkers;
+ if (gap > 0 && first)
+ { for (var i$2 = 0; i$2 < first.length; ++i$2)
+ { if (first[i$2].to == null)
+ { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }
+ for (var i$3 = 0; i$3 < gap; ++i$3)
+ { newMarkers.push(gapMarkers); }
+ newMarkers.push(last);
+ }
+ return newMarkers
+}
+
+// Remove spans that are empty and don't have a clearWhenEmpty
+// option of false.
+function clearEmptySpans(spans) {
+ for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i];
+ if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)
+ { spans.splice(i--, 1); }
+ }
+ if (!spans.length) { return null }
+ return spans
+}
+
+// Used to 'clip' out readOnly ranges when making a change.
+function removeReadOnlyRanges(doc, from, to) {
+ var markers = null;
+ doc.iter(from.line, to.line + 1, function (line) {
+ if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+ var mark = line.markedSpans[i].marker;
+ if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))
+ { (markers || (markers = [])).push(mark); }
+ } }
+ });
+ if (!markers) { return null }
+ var parts = [{from: from, to: to}];
+ for (var i = 0; i < markers.length; ++i) {
+ var mk = markers[i], m = mk.find(0);
+ for (var j = 0; j < parts.length; ++j) {
+ var p = parts[j];
+ if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }
+ var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);
+ if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)
+ { newParts.push({from: p.from, to: m.from}); }
+ if (dto > 0 || !mk.inclusiveRight && !dto)
+ { newParts.push({from: m.to, to: p.to}); }
+ parts.splice.apply(parts, newParts);
+ j += newParts.length - 3;
+ }
+ }
+ return parts
+}
+
+// Connect or disconnect spans from a line.
+function detachMarkedSpans(line) {
+ var spans = line.markedSpans;
+ if (!spans) { return }
+ for (var i = 0; i < spans.length; ++i)
+ { spans[i].marker.detachLine(line); }
+ line.markedSpans = null;
+}
+function attachMarkedSpans(line, spans) {
+ if (!spans) { return }
+ for (var i = 0; i < spans.length; ++i)
+ { spans[i].marker.attachLine(line); }
+ line.markedSpans = spans;
+}
+
+// Helpers used when computing which overlapping collapsed span
+// counts as the larger one.
+function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }
+function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }
+
+// Returns a number indicating which of two overlapping collapsed
+// spans is larger (and thus includes the other). Falls back to
+// comparing ids when the spans cover exactly the same range.
+function compareCollapsedMarkers(a, b) {
+ var lenDiff = a.lines.length - b.lines.length;
+ if (lenDiff != 0) { return lenDiff }
+ var aPos = a.find(), bPos = b.find();
+ var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);
+ if (fromCmp) { return -fromCmp }
+ var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);
+ if (toCmp) { return toCmp }
+ return b.id - a.id
+}
+
+// Find out whether a line ends or starts in a collapsed span. If
+// so, return the marker for that span.
+function collapsedSpanAtSide(line, start) {
+ var sps = sawCollapsedSpans && line.markedSpans, found;
+ if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+ sp = sps[i];
+ if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&
+ (!found || compareCollapsedMarkers(found, sp.marker) < 0))
+ { found = sp.marker; }
+ } }
+ return found
+}
+function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }
+function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }
+
+function collapsedSpanAround(line, ch) {
+ var sps = sawCollapsedSpans && line.markedSpans, found;
+ if (sps) { for (var i = 0; i < sps.length; ++i) {
+ var sp = sps[i];
+ if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&
+ (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }
+ } }
+ return found
+}
+
+// Test whether there exists a collapsed span that partially
+// overlaps (covers the start or end, but not both) of a new span.
+// Such overlap is not allowed.
+function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {
+ var line = getLine(doc, lineNo$$1);
+ var sps = sawCollapsedSpans && line.markedSpans;
+ if (sps) { for (var i = 0; i < sps.length; ++i) {
+ var sp = sps[i];
+ if (!sp.marker.collapsed) { continue }
+ var found = sp.marker.find(0);
+ var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
+ var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
+ if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }
+ if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||
+ fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))
+ { return true }
+ } }
+}
+
+// A visual line is a line as drawn on the screen. Folding, for
+// example, can cause multiple logical lines to appear on the same
+// visual line. This finds the start of the visual line that the
+// given line is part of (usually that is the line itself).
+function visualLine(line) {
+ var merged;
+ while (merged = collapsedSpanAtStart(line))
+ { line = merged.find(-1, true).line; }
+ return line
+}
+
+function visualLineEnd(line) {
+ var merged;
+ while (merged = collapsedSpanAtEnd(line))
+ { line = merged.find(1, true).line; }
+ return line
+}
+
+// Returns an array of logical lines that continue the visual line
+// started by the argument, or undefined if there are no such lines.
+function visualLineContinued(line) {
+ var merged, lines;
+ while (merged = collapsedSpanAtEnd(line)) {
+ line = merged.find(1, true).line
+ ;(lines || (lines = [])).push(line);
+ }
+ return lines
+}
+
+// Get the line number of the start of the visual line that the
+// given line number is part of.
+function visualLineNo(doc, lineN) {
+ var line = getLine(doc, lineN), vis = visualLine(line);
+ if (line == vis) { return lineN }
+ return lineNo(vis)
+}
+
+// Get the line number of the start of the next visual line after
+// the given line.
+function visualLineEndNo(doc, lineN) {
+ if (lineN > doc.lastLine()) { return lineN }
+ var line = getLine(doc, lineN), merged;
+ if (!lineIsHidden(doc, line)) { return lineN }
+ while (merged = collapsedSpanAtEnd(line))
+ { line = merged.find(1, true).line; }
+ return lineNo(line) + 1
+}
+
+// Compute whether a line is hidden. Lines count as hidden when they
+// are part of a visual line that starts with another line, or when
+// they are entirely covered by collapsed, non-widget span.
+function lineIsHidden(doc, line) {
+ var sps = sawCollapsedSpans && line.markedSpans;
+ if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {
+ sp = sps[i];
+ if (!sp.marker.collapsed) { continue }
+ if (sp.from == null) { return true }
+ if (sp.marker.widgetNode) { continue }
+ if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))
+ { return true }
+ } }
+}
+function lineIsHiddenInner(doc, line, span) {
+ if (span.to == null) {
+ var end = span.marker.find(1, true);
+ return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))
+ }
+ if (span.marker.inclusiveRight && span.to == line.text.length)
+ { return true }
+ for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {
+ sp = line.markedSpans[i];
+ if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&
+ (sp.to == null || sp.to != span.from) &&
+ (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&
+ lineIsHiddenInner(doc, line, sp)) { return true }
+ }
+}
+
+// Find the height above the given line.
+function heightAtLine(lineObj) {
+ lineObj = visualLine(lineObj);
+
+ var h = 0, chunk = lineObj.parent;
+ for (var i = 0; i < chunk.lines.length; ++i) {
+ var line = chunk.lines[i];
+ if (line == lineObj) { break }
+ else { h += line.height; }
+ }
+ for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {
+ for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
+ var cur = p.children[i$1];
+ if (cur == chunk) { break }
+ else { h += cur.height; }
+ }
+ }
+ return h
+}
+
+// Compute the character length of a line, taking into account
+// collapsed ranges (see markText) that might hide parts, and join
+// other lines onto it.
+function lineLength(line) {
+ if (line.height == 0) { return 0 }
+ var len = line.text.length, merged, cur = line;
+ while (merged = collapsedSpanAtStart(cur)) {
+ var found = merged.find(0, true);
+ cur = found.from.line;
+ len += found.from.ch - found.to.ch;
+ }
+ cur = line;
+ while (merged = collapsedSpanAtEnd(cur)) {
+ var found$1 = merged.find(0, true);
+ len -= cur.text.length - found$1.from.ch;
+ cur = found$1.to.line;
+ len += cur.text.length - found$1.to.ch;
+ }
+ return len
+}
+
+// Find the longest line in the document.
+function findMaxLine(cm) {
+ var d = cm.display, doc = cm.doc;
+ d.maxLine = getLine(doc, doc.first);
+ d.maxLineLength = lineLength(d.maxLine);
+ d.maxLineChanged = true;
+ doc.iter(function (line) {
+ var len = lineLength(line);
+ if (len > d.maxLineLength) {
+ d.maxLineLength = len;
+ d.maxLine = line;
+ }
+ });
+}
+
+// BIDI HELPERS
+
+function iterateBidiSections(order, from, to, f) {
+ if (!order) { return f(from, to, "ltr", 0) }
+ var found = false;
+ for (var i = 0; i < order.length; ++i) {
+ var part = order[i];
+ if (part.from < to && part.to > from || from == to && part.to == from) {
+ f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i);
+ found = true;
+ }
+ }
+ if (!found) { f(from, to, "ltr"); }
+}
+
+var bidiOther = null;
+function getBidiPartAt(order, ch, sticky) {
+ var found;
+ bidiOther = null;
+ for (var i = 0; i < order.length; ++i) {
+ var cur = order[i];
+ if (cur.from < ch && cur.to > ch) { return i }
+ if (cur.to == ch) {
+ if (cur.from != cur.to && sticky == "before") { found = i; }
+ else { bidiOther = i; }
+ }
+ if (cur.from == ch) {
+ if (cur.from != cur.to && sticky != "before") { found = i; }
+ else { bidiOther = i; }
+ }
+ }
+ return found != null ? found : bidiOther
+}
+
+// Bidirectional ordering algorithm
+// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm
+// that this (partially) implements.
+
+// One-char codes used for character types:
+// L (L): Left-to-Right
+// R (R): Right-to-Left
+// r (AL): Right-to-Left Arabic
+// 1 (EN): European Number
+// + (ES): European Number Separator
+// % (ET): European Number Terminator
+// n (AN): Arabic Number
+// , (CS): Common Number Separator
+// m (NSM): Non-Spacing Mark
+// b (BN): Boundary Neutral
+// s (B): Paragraph Separator
+// t (S): Segment Separator
+// w (WS): Whitespace
+// N (ON): Other Neutrals
+
+// Returns null if characters are ordered as they appear
+// (left-to-right), or an array of sections ({from, to, level}
+// objects) in the order in which they occur visually.
+var bidiOrdering = (function() {
+ // Character types for codepoints 0 to 0xff
+ var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";
+ // Character types for codepoints 0x600 to 0x6f9
+ var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
+ function charType(code) {
+ if (code <= 0xf7) { return lowTypes.charAt(code) }
+ else if (0x590 <= code && code <= 0x5f4) { return "R" }
+ else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }
+ else if (0x6ee <= code && code <= 0x8ac) { return "r" }
+ else if (0x2000 <= code && code <= 0x200b) { return "w" }
+ else if (code == 0x200c) { return "b" }
+ else { return "L" }
+ }
+
+ var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
+ var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;
+
+ function BidiSpan(level, from, to) {
+ this.level = level;
+ this.from = from; this.to = to;
+ }
+
+ return function(str, direction) {
+ var outerType = direction == "ltr" ? "L" : "R";
+
+ if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false }
+ var len = str.length, types = [];
+ for (var i = 0; i < len; ++i)
+ { types.push(charType(str.charCodeAt(i))); }
+
+ // W1. Examine each non-spacing mark (NSM) in the level run, and
+ // change the type of the NSM to the type of the previous
+ // character. If the NSM is at the start of the level run, it will
+ // get the type of sor.
+ for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
+ var type = types[i$1];
+ if (type == "m") { types[i$1] = prev; }
+ else { prev = type; }
+ }
+
+ // W2. Search backwards from each instance of a European number
+ // until the first strong type (R, L, AL, or sor) is found. If an
+ // AL is found, change the type of the European number to Arabic
+ // number.
+ // W3. Change all ALs to R.
+ for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
+ var type$1 = types[i$2];
+ if (type$1 == "1" && cur == "r") { types[i$2] = "n"; }
+ else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R"; } }
+ }
+
+ // W4. A single European separator between two European numbers
+ // changes to a European number. A single common separator between
+ // two numbers of the same type changes to that type.
+ for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
+ var type$2 = types[i$3];
+ if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1"; }
+ else if (type$2 == "," && prev$1 == types[i$3+1] &&
+ (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1; }
+ prev$1 = type$2;
+ }
+
+ // W5. A sequence of European terminators adjacent to European
+ // numbers changes to all European numbers.
+ // W6. Otherwise, separators and terminators change to Other
+ // Neutral.
+ for (var i$4 = 0; i$4 < len; ++i$4) {
+ var type$3 = types[i$4];
+ if (type$3 == ",") { types[i$4] = "N"; }
+ else if (type$3 == "%") {
+ var end = (void 0);
+ for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
+ var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N";
+ for (var j = i$4; j < end; ++j) { types[j] = replace; }
+ i$4 = end - 1;
+ }
+ }
+
+ // W7. Search backwards from each instance of a European number
+ // until the first strong type (R, L, or sor) is found. If an L is
+ // found, then change the type of the European number to L.
+ for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
+ var type$4 = types[i$5];
+ if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L"; }
+ else if (isStrong.test(type$4)) { cur$1 = type$4; }
+ }
+
+ // N1. A sequence of neutrals takes the direction of the
+ // surrounding strong text if the text on both sides has the same
+ // direction. European and Arabic numbers act as if they were R in
+ // terms of their influence on neutrals. Start-of-level-run (sor)
+ // and end-of-level-run (eor) are used at level run boundaries.
+ // N2. Any remaining neutrals take the embedding direction.
+ for (var i$6 = 0; i$6 < len; ++i$6) {
+ if (isNeutral.test(types[i$6])) {
+ var end$1 = (void 0);
+ for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
+ var before = (i$6 ? types[i$6-1] : outerType) == "L";
+ var after = (end$1 < len ? types[end$1] : outerType) == "L";
+ var replace$1 = before == after ? (before ? "L" : "R") : outerType;
+ for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }
+ i$6 = end$1 - 1;
+ }
+ }
+
+ // Here we depart from the documented algorithm, in order to avoid
+ // building up an actual levels array. Since there are only three
+ // levels (0, 1, 2) in an implementation that doesn't take
+ // explicit embedding into account, we can build up the order on
+ // the fly, without following the level-based algorithm.
+ var order = [], m;
+ for (var i$7 = 0; i$7 < len;) {
+ if (countsAsLeft.test(types[i$7])) {
+ var start = i$7;
+ for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
+ order.push(new BidiSpan(0, start, i$7));
+ } else {
+ var pos = i$7, at = order.length;
+ for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
+ for (var j$2 = pos; j$2 < i$7;) {
+ if (countsAsNum.test(types[j$2])) {
+ if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }
+ var nstart = j$2;
+ for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
+ order.splice(at, 0, new BidiSpan(2, nstart, j$2));
+ pos = j$2;
+ } else { ++j$2; }
+ }
+ if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }
+ }
+ }
+ if (direction == "ltr") {
+ if (order[0].level == 1 && (m = str.match(/^\s+/))) {
+ order[0].from = m[0].length;
+ order.unshift(new BidiSpan(0, 0, m[0].length));
+ }
+ if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
+ lst(order).to -= m[0].length;
+ order.push(new BidiSpan(0, len - m[0].length, len));
+ }
+ }
+
+ return direction == "rtl" ? order.reverse() : order
+ }
+})();
+
+// Get the bidi ordering for the given line (and cache it). Returns
+// false for lines that are fully left-to-right, and an array of
+// BidiSpan objects otherwise.
+function getOrder(line, direction) {
+ var order = line.order;
+ if (order == null) { order = line.order = bidiOrdering(line.text, direction); }
+ return order
+}
+
+// EVENT HANDLING
+
+// Lightweight event framework. on/off also work on DOM nodes,
+// registering native DOM handlers.
+
+var noHandlers = [];
+
+var on = function(emitter, type, f) {
+ if (emitter.addEventListener) {
+ emitter.addEventListener(type, f, false);
+ } else if (emitter.attachEvent) {
+ emitter.attachEvent("on" + type, f);
+ } else {
+ var map$$1 = emitter._handlers || (emitter._handlers = {});
+ map$$1[type] = (map$$1[type] || noHandlers).concat(f);
+ }
+};
+
+function getHandlers(emitter, type) {
+ return emitter._handlers && emitter._handlers[type] || noHandlers
+}
+
+function off(emitter, type, f) {
+ if (emitter.removeEventListener) {
+ emitter.removeEventListener(type, f, false);
+ } else if (emitter.detachEvent) {
+ emitter.detachEvent("on" + type, f);
+ } else {
+ var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];
+ if (arr) {
+ var index = indexOf(arr, f);
+ if (index > -1)
+ { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }
+ }
+ }
+}
+
+function signal(emitter, type /*, values...*/) {
+ var handlers = getHandlers(emitter, type);
+ if (!handlers.length) { return }
+ var args = Array.prototype.slice.call(arguments, 2);
+ for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }
+}
+
+// The DOM events that CodeMirror handles can be overridden by
+// registering a (non-DOM) handler on the editor for the event name,
+// and preventDefault-ing the event in that handler.
+function signalDOMEvent(cm, e, override) {
+ if (typeof e == "string")
+ { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }
+ signal(cm, override || e.type, cm, e);
+ return e_defaultPrevented(e) || e.codemirrorIgnore
+}
+
+function signalCursorActivity(cm) {
+ var arr = cm._handlers && cm._handlers.cursorActivity;
+ if (!arr) { return }
+ var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);
+ for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)
+ { set.push(arr[i]); } }
+}
+
+function hasHandler(emitter, type) {
+ return getHandlers(emitter, type).length > 0
+}
+
+// Add on and off methods to a constructor's prototype, to make
+// registering events on such objects more convenient.
+function eventMixin(ctor) {
+ ctor.prototype.on = function(type, f) {on(this, type, f);};
+ ctor.prototype.off = function(type, f) {off(this, type, f);};
+}
+
+// Due to the fact that we still support jurassic IE versions, some
+// compatibility wrappers are needed.
+
+function e_preventDefault(e) {
+ if (e.preventDefault) { e.preventDefault(); }
+ else { e.returnValue = false; }
+}
+function e_stopPropagation(e) {
+ if (e.stopPropagation) { e.stopPropagation(); }
+ else { e.cancelBubble = true; }
+}
+function e_defaultPrevented(e) {
+ return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false
+}
+function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}
+
+function e_target(e) {return e.target || e.srcElement}
+function e_button(e) {
+ var b = e.which;
+ if (b == null) {
+ if (e.button & 1) { b = 1; }
+ else if (e.button & 2) { b = 3; }
+ else if (e.button & 4) { b = 2; }
+ }
+ if (mac && e.ctrlKey && b == 1) { b = 3; }
+ return b
+}
+
+// Detect drag-and-drop
+var dragAndDrop = function() {
+ // There is *some* kind of drag-and-drop support in IE6-8, but I
+ // couldn't get it to work yet.
+ if (ie && ie_version < 9) { return false }
+ var div = elt('div');
+ return "draggable" in div || "dragDrop" in div
+}();
+
+var zwspSupported;
+function zeroWidthElement(measure) {
+ if (zwspSupported == null) {
+ var test = elt("span", "\u200b");
+ removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
+ if (measure.firstChild.offsetHeight != 0)
+ { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }
+ }
+ var node = zwspSupported ? elt("span", "\u200b") :
+ elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
+ node.setAttribute("cm-text", "");
+ return node
+}
+
+// Feature-detect IE's crummy client rect reporting for bidi text
+var badBidiRects;
+function hasBadBidiRects(measure) {
+ if (badBidiRects != null) { return badBidiRects }
+ var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"));
+ var r0 = range(txt, 0, 1).getBoundingClientRect();
+ var r1 = range(txt, 1, 2).getBoundingClientRect();
+ removeChildren(measure);
+ if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)
+ return badBidiRects = (r1.right - r0.right < 3)
+}
+
+// See if "".split is the broken IE version, if so, provide an
+// alternative way to split lines.
+var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) {
+ var pos = 0, result = [], l = string.length;
+ while (pos <= l) {
+ var nl = string.indexOf("\n", pos);
+ if (nl == -1) { nl = string.length; }
+ var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
+ var rt = line.indexOf("\r");
+ if (rt != -1) {
+ result.push(line.slice(0, rt));
+ pos += rt + 1;
+ } else {
+ result.push(line);
+ pos = nl + 1;
+ }
+ }
+ return result
+} : function (string) { return string.split(/\r\n?|\n/); };
+
+var hasSelection = window.getSelection ? function (te) {
+ try { return te.selectionStart != te.selectionEnd }
+ catch(e) { return false }
+} : function (te) {
+ var range$$1;
+ try {range$$1 = te.ownerDocument.selection.createRange();}
+ catch(e) {}
+ if (!range$$1 || range$$1.parentElement() != te) { return false }
+ return range$$1.compareEndPoints("StartToEnd", range$$1) != 0
+};
+
+var hasCopyEvent = (function () {
+ var e = elt("div");
+ if ("oncopy" in e) { return true }
+ e.setAttribute("oncopy", "return;");
+ return typeof e.oncopy == "function"
+})();
+
+var badZoomedRects = null;
+function hasBadZoomedRects(measure) {
+ if (badZoomedRects != null) { return badZoomedRects }
+ var node = removeChildrenAndAdd(measure, elt("span", "x"));
+ var normal = node.getBoundingClientRect();
+ var fromRange = range(node, 0, 1).getBoundingClientRect();
+ return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1
+}
+
+// Known modes, by name and by MIME
+var modes = {};
+var mimeModes = {};
+
+// Extra arguments are stored as the mode's dependencies, which is
+// used by (legacy) mechanisms like loadmode.js to automatically
+// load a mode. (Preferred mechanism is the require/define calls.)
+function defineMode(name, mode) {
+ if (arguments.length > 2)
+ { mode.dependencies = Array.prototype.slice.call(arguments, 2); }
+ modes[name] = mode;
+}
+
+function defineMIME(mime, spec) {
+ mimeModes[mime] = spec;
+}
+
+// Given a MIME type, a {name, ...options} config object, or a name
+// string, return a mode config object.
+function resolveMode(spec) {
+ if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
+ spec = mimeModes[spec];
+ } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
+ var found = mimeModes[spec.name];
+ if (typeof found == "string") { found = {name: found}; }
+ spec = createObj(found, spec);
+ spec.name = found.name;
+ } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) {
+ return resolveMode("application/xml")
+ } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) {
+ return resolveMode("application/json")
+ }
+ if (typeof spec == "string") { return {name: spec} }
+ else { return spec || {name: "null"} }
+}
+
+// Given a mode spec (anything that resolveMode accepts), find and
+// initialize an actual mode object.
+function getMode(options, spec) {
+ spec = resolveMode(spec);
+ var mfactory = modes[spec.name];
+ if (!mfactory) { return getMode(options, "text/plain") }
+ var modeObj = mfactory(options, spec);
+ if (modeExtensions.hasOwnProperty(spec.name)) {
+ var exts = modeExtensions[spec.name];
+ for (var prop in exts) {
+ if (!exts.hasOwnProperty(prop)) { continue }
+ if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop]; }
+ modeObj[prop] = exts[prop];
+ }
+ }
+ modeObj.name = spec.name;
+ if (spec.helperType) { modeObj.helperType = spec.helperType; }
+ if (spec.modeProps) { for (var prop$1 in spec.modeProps)
+ { modeObj[prop$1] = spec.modeProps[prop$1]; } }
+
+ return modeObj
+}
+
+// This can be used to attach properties to mode objects from
+// outside the actual mode definition.
+var modeExtensions = {};
+function extendMode(mode, properties) {
+ var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});
+ copyObj(properties, exts);
+}
+
+function copyState(mode, state) {
+ if (state === true) { return state }
+ if (mode.copyState) { return mode.copyState(state) }
+ var nstate = {};
+ for (var n in state) {
+ var val = state[n];
+ if (val instanceof Array) { val = val.concat([]); }
+ nstate[n] = val;
+ }
+ return nstate
+}
+
+// Given a mode and a state (for that mode), find the inner mode and
+// state at the position that the state refers to.
+function innerMode(mode, state) {
+ var info;
+ while (mode.innerMode) {
+ info = mode.innerMode(state);
+ if (!info || info.mode == mode) { break }
+ state = info.state;
+ mode = info.mode;
+ }
+ return info || {mode: mode, state: state}
+}
+
+function startState(mode, a1, a2) {
+ return mode.startState ? mode.startState(a1, a2) : true
+}
+
+// STRING STREAM
+
+// Fed to the mode parsers, provides helper functions to make
+// parsers more succinct.
+
+var StringStream = function(string, tabSize, lineOracle) {
+ this.pos = this.start = 0;
+ this.string = string;
+ this.tabSize = tabSize || 8;
+ this.lastColumnPos = this.lastColumnValue = 0;
+ this.lineStart = 0;
+ this.lineOracle = lineOracle;
+};
+
+StringStream.prototype.eol = function () {return this.pos >= this.string.length};
+StringStream.prototype.sol = function () {return this.pos == this.lineStart};
+StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};
+StringStream.prototype.next = function () {
+ if (this.pos < this.string.length)
+ { return this.string.charAt(this.pos++) }
+};
+StringStream.prototype.eat = function (match) {
+ var ch = this.string.charAt(this.pos);
+ var ok;
+ if (typeof match == "string") { ok = ch == match; }
+ else { ok = ch && (match.test ? match.test(ch) : match(ch)); }
+ if (ok) {++this.pos; return ch}
+};
+StringStream.prototype.eatWhile = function (match) {
+ var start = this.pos;
+ while (this.eat(match)){}
+ return this.pos > start
+};
+StringStream.prototype.eatSpace = function () {
+ var this$1 = this;
+
+ var start = this.pos;
+ while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }
+ return this.pos > start
+};
+StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};
+StringStream.prototype.skipTo = function (ch) {
+ var found = this.string.indexOf(ch, this.pos);
+ if (found > -1) {this.pos = found; return true}
+};
+StringStream.prototype.backUp = function (n) {this.pos -= n;};
+StringStream.prototype.column = function () {
+ if (this.lastColumnPos < this.start) {
+ this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
+ this.lastColumnPos = this.start;
+ }
+ return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+};
+StringStream.prototype.indentation = function () {
+ return countColumn(this.string, null, this.tabSize) -
+ (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)
+};
+StringStream.prototype.match = function (pattern, consume, caseInsensitive) {
+ if (typeof pattern == "string") {
+ var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };
+ var substr = this.string.substr(this.pos, pattern.length);
+ if (cased(substr) == cased(pattern)) {
+ if (consume !== false) { this.pos += pattern.length; }
+ return true
+ }
+ } else {
+ var match = this.string.slice(this.pos).match(pattern);
+ if (match && match.index > 0) { return null }
+ if (match && consume !== false) { this.pos += match[0].length; }
+ return match
+ }
+};
+StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};
+StringStream.prototype.hideFirstChars = function (n, inner) {
+ this.lineStart += n;
+ try { return inner() }
+ finally { this.lineStart -= n; }
+};
+StringStream.prototype.lookAhead = function (n) {
+ var oracle = this.lineOracle;
+ return oracle && oracle.lookAhead(n)
+};
+StringStream.prototype.baseToken = function () {
+ var oracle = this.lineOracle;
+ return oracle && oracle.baseToken(this.pos)
+};
+
+var SavedContext = function(state, lookAhead) {
+ this.state = state;
+ this.lookAhead = lookAhead;
+};
+
+var Context = function(doc, state, line, lookAhead) {
+ this.state = state;
+ this.doc = doc;
+ this.line = line;
+ this.maxLookAhead = lookAhead || 0;
+ this.baseTokens = null;
+ this.baseTokenPos = 1;
+};
+
+Context.prototype.lookAhead = function (n) {
+ var line = this.doc.getLine(this.line + n);
+ if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }
+ return line
+};
+
+Context.prototype.baseToken = function (n) {
+ var this$1 = this;
+
+ if (!this.baseTokens) { return null }
+ while (this.baseTokens[this.baseTokenPos] <= n)
+ { this$1.baseTokenPos += 2; }
+ var type = this.baseTokens[this.baseTokenPos + 1];
+ return {type: type && type.replace(/( |^)overlay .*/, ""),
+ size: this.baseTokens[this.baseTokenPos] - n}
+};
+
+Context.prototype.nextLine = function () {
+ this.line++;
+ if (this.maxLookAhead > 0) { this.maxLookAhead--; }
+};
+
+Context.fromSaved = function (doc, saved, line) {
+ if (saved instanceof SavedContext)
+ { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }
+ else
+ { return new Context(doc, copyState(doc.mode, saved), line) }
+};
+
+Context.prototype.save = function (copy) {
+ var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;
+ return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state
+};
+
+
+// Compute a style array (an array starting with a mode generation
+// -- for invalidation -- followed by pairs of end positions and
+// style strings), which is used to highlight the tokens on the
+// line.
+function highlightLine(cm, line, context, forceToEnd) {
+ // A styles array always starts with a number identifying the
+ // mode/overlays that it is based on (for easy invalidation).
+ var st = [cm.state.modeGen], lineClasses = {};
+ // Compute the base array of styles
+ runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },
+ lineClasses, forceToEnd);
+ var state = context.state;
+
+ // Run overlays, adjust style array.
+ var loop = function ( o ) {
+ context.baseTokens = st;
+ var overlay = cm.state.overlays[o], i = 1, at = 0;
+ context.state = true;
+ runMode(cm, line.text, overlay.mode, context, function (end, style) {
+ var start = i;
+ // Ensure there's a token end at the current position, and that i points at it
+ while (at < end) {
+ var i_end = st[i];
+ if (i_end > end)
+ { st.splice(i, 1, end, st[i+1], i_end); }
+ i += 2;
+ at = Math.min(end, i_end);
+ }
+ if (!style) { return }
+ if (overlay.opaque) {
+ st.splice(start, i - start, end, "overlay " + style);
+ i = start + 2;
+ } else {
+ for (; start < i; start += 2) {
+ var cur = st[start+1];
+ st[start+1] = (cur ? cur + " " : "") + "overlay " + style;
+ }
+ }
+ }, lineClasses);
+ context.state = state;
+ context.baseTokens = null;
+ context.baseTokenPos = 1;
+ };
+
+ for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );
+
+ return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}
+}
+
+function getLineStyles(cm, line, updateFrontier) {
+ if (!line.styles || line.styles[0] != cm.state.modeGen) {
+ var context = getContextBefore(cm, lineNo(line));
+ var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);
+ var result = highlightLine(cm, line, context);
+ if (resetState) { context.state = resetState; }
+ line.stateAfter = context.save(!resetState);
+ line.styles = result.styles;
+ if (result.classes) { line.styleClasses = result.classes; }
+ else if (line.styleClasses) { line.styleClasses = null; }
+ if (updateFrontier === cm.doc.highlightFrontier)
+ { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }
+ }
+ return line.styles
+}
+
+function getContextBefore(cm, n, precise) {
+ var doc = cm.doc, display = cm.display;
+ if (!doc.mode.startState) { return new Context(doc, true, n) }
+ var start = findStartLine(cm, n, precise);
+ var saved = start > doc.first && getLine(doc, start - 1).stateAfter;
+ var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);
+
+ doc.iter(start, n, function (line) {
+ processLine(cm, line.text, context);
+ var pos = context.line;
+ line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;
+ context.nextLine();
+ });
+ if (precise) { doc.modeFrontier = context.line; }
+ return context
+}
+
+// Lightweight form of highlight -- proceed over this line and
+// update state, but don't save a style array. Used for lines that
+// aren't currently visible.
+function processLine(cm, text, context, startAt) {
+ var mode = cm.doc.mode;
+ var stream = new StringStream(text, cm.options.tabSize, context);
+ stream.start = stream.pos = startAt || 0;
+ if (text == "") { callBlankLine(mode, context.state); }
+ while (!stream.eol()) {
+ readToken(mode, stream, context.state);
+ stream.start = stream.pos;
+ }
+}
+
+function callBlankLine(mode, state) {
+ if (mode.blankLine) { return mode.blankLine(state) }
+ if (!mode.innerMode) { return }
+ var inner = innerMode(mode, state);
+ if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }
+}
+
+function readToken(mode, stream, state, inner) {
+ for (var i = 0; i < 10; i++) {
+ if (inner) { inner[0] = innerMode(mode, state).mode; }
+ var style = mode.token(stream, state);
+ if (stream.pos > stream.start) { return style }
+ }
+ throw new Error("Mode " + mode.name + " failed to advance stream.")
+}
+
+var Token = function(stream, type, state) {
+ this.start = stream.start; this.end = stream.pos;
+ this.string = stream.current();
+ this.type = type || null;
+ this.state = state;
+};
+
+// Utility for getTokenAt and getLineTokens
+function takeToken(cm, pos, precise, asArray) {
+ var doc = cm.doc, mode = doc.mode, style;
+ pos = clipPos(doc, pos);
+ var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);
+ var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;
+ if (asArray) { tokens = []; }
+ while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
+ stream.start = stream.pos;
+ style = readToken(mode, stream, context.state);
+ if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }
+ }
+ return asArray ? tokens : new Token(stream, style, context.state)
+}
+
+function extractLineClasses(type, output) {
+ if (type) { for (;;) {
+ var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/);
+ if (!lineClass) { break }
+ type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);
+ var prop = lineClass[1] ? "bgClass" : "textClass";
+ if (output[prop] == null)
+ { output[prop] = lineClass[2]; }
+ else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop]))
+ { output[prop] += " " + lineClass[2]; }
+ } }
+ return type
+}
+
+// Run the given mode's parser over a line, calling f for each token.
+function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {
+ var flattenSpans = mode.flattenSpans;
+ if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }
+ var curStart = 0, curStyle = null;
+ var stream = new StringStream(text, cm.options.tabSize, context), style;
+ var inner = cm.options.addModeClass && [null];
+ if (text == "") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }
+ while (!stream.eol()) {
+ if (stream.pos > cm.options.maxHighlightLength) {
+ flattenSpans = false;
+ if (forceToEnd) { processLine(cm, text, context, stream.pos); }
+ stream.pos = text.length;
+ style = null;
+ } else {
+ style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);
+ }
+ if (inner) {
+ var mName = inner[0].name;
+ if (mName) { style = "m-" + (style ? mName + " " + style : mName); }
+ }
+ if (!flattenSpans || curStyle != style) {
+ while (curStart < stream.start) {
+ curStart = Math.min(stream.start, curStart + 5000);
+ f(curStart, curStyle);
+ }
+ curStyle = style;
+ }
+ stream.start = stream.pos;
+ }
+ while (curStart < stream.pos) {
+ // Webkit seems to refuse to render text nodes longer than 57444
+ // characters, and returns inaccurate measurements in nodes
+ // starting around 5000 chars.
+ var pos = Math.min(stream.pos, curStart + 5000);
+ f(pos, curStyle);
+ curStart = pos;
+ }
+}
+
+// Finds the line to start with when starting a parse. Tries to
+// find a line with a stateAfter, so that it can start with a
+// valid state. If that fails, it returns the line with the
+// smallest indentation, which tends to need the least context to
+// parse correctly.
+function findStartLine(cm, n, precise) {
+ var minindent, minline, doc = cm.doc;
+ var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
+ for (var search = n; search > lim; --search) {
+ if (search <= doc.first) { return doc.first }
+ var line = getLine(doc, search - 1), after = line.stateAfter;
+ if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))
+ { return search }
+ var indented = countColumn(line.text, null, cm.options.tabSize);
+ if (minline == null || minindent > indented) {
+ minline = search - 1;
+ minindent = indented;
+ }
+ }
+ return minline
+}
+
+function retreatFrontier(doc, n) {
+ doc.modeFrontier = Math.min(doc.modeFrontier, n);
+ if (doc.highlightFrontier < n - 10) { return }
+ var start = doc.first;
+ for (var line = n - 1; line > start; line--) {
+ var saved = getLine(doc, line).stateAfter;
+ // change is on 3
+ // state on line 1 looked ahead 2 -- so saw 3
+ // test 1 + 2 < 3 should cover this
+ if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {
+ start = line + 1;
+ break
+ }
+ }
+ doc.highlightFrontier = Math.min(doc.highlightFrontier, start);
+}
+
+// LINE DATA STRUCTURE
+
+// Line objects. These hold state related to a line, including
+// highlighting info (the styles array).
+var Line = function(text, markedSpans, estimateHeight) {
+ this.text = text;
+ attachMarkedSpans(this, markedSpans);
+ this.height = estimateHeight ? estimateHeight(this) : 1;
+};
+
+Line.prototype.lineNo = function () { return lineNo(this) };
+eventMixin(Line);
+
+// Change the content (text, markers) of a line. Automatically
+// invalidates cached information and tries to re-estimate the
+// line's height.
+function updateLine(line, text, markedSpans, estimateHeight) {
+ line.text = text;
+ if (line.stateAfter) { line.stateAfter = null; }
+ if (line.styles) { line.styles = null; }
+ if (line.order != null) { line.order = null; }
+ detachMarkedSpans(line);
+ attachMarkedSpans(line, markedSpans);
+ var estHeight = estimateHeight ? estimateHeight(line) : 1;
+ if (estHeight != line.height) { updateLineHeight(line, estHeight); }
+}
+
+// Detach a line from the document tree and its markers.
+function cleanUpLine(line) {
+ line.parent = null;
+ detachMarkedSpans(line);
+}
+
+// Convert a style as returned by a mode (either null, or a string
+// containing one or more styles) to a CSS style. This is cached,
+// and also looks for line-wide styles.
+var styleToClassCache = {};
+var styleToClassCacheWithMode = {};
+function interpretTokenStyle(style, options) {
+ if (!style || /^\s*$/.test(style)) { return null }
+ var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;
+ return cache[style] ||
+ (cache[style] = style.replace(/\S+/g, "cm-$&"))
+}
+
+// Render the DOM representation of the text of a line. Also builds
+// up a 'line map', which points at the DOM nodes that represent
+// specific stretches of text, and is used by the measuring code.
+// The returned object contains the DOM node, this map, and
+// information about line-wide styles that were set by the mode.
+function buildLineContent(cm, lineView) {
+ // The padding-right forces the element to have a 'border', which
+ // is needed on Webkit to be able to get line-level bounding
+ // rectangles for it (in measureChar).
+ var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null);
+ var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content,
+ col: 0, pos: 0, cm: cm,
+ trailingSpace: false,
+ splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")};
+ lineView.measure = {};
+
+ // Iterate over the logical lines that make up this visual line.
+ for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
+ var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);
+ builder.pos = 0;
+ builder.addToken = buildToken;
+ // Optionally wire in some hacks into the token-rendering
+ // algorithm, to deal with browser quirks.
+ if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))
+ { builder.addToken = buildTokenBadBidi(builder.addToken, order); }
+ builder.map = [];
+ var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);
+ insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));
+ if (line.styleClasses) {
+ if (line.styleClasses.bgClass)
+ { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || ""); }
+ if (line.styleClasses.textClass)
+ { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || ""); }
+ }
+
+ // Ensure at least a single node is present, for measuring.
+ if (builder.map.length == 0)
+ { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }
+
+ // Store the map and a cache object for the current logical line
+ if (i == 0) {
+ lineView.measure.map = builder.map;
+ lineView.measure.cache = {};
+ } else {
+ (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)
+ ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});
+ }
+ }
+
+ // See issue #2901
+ if (webkit) {
+ var last = builder.content.lastChild;
+ if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab")))
+ { builder.content.className = "cm-tab-wrap-hack"; }
+ }
+
+ signal(cm, "renderLine", cm, lineView.line, builder.pre);
+ if (builder.pre.className)
+ { builder.textClass = joinClasses(builder.pre.className, builder.textClass || ""); }
+
+ return builder
+}
+
+function defaultSpecialCharPlaceholder(ch) {
+ var token = elt("span", "\u2022", "cm-invalidchar");
+ token.title = "\\u" + ch.charCodeAt(0).toString(16);
+ token.setAttribute("aria-label", token.title);
+ return token
+}
+
+// Build up the DOM representation for a single token, and add it to
+// the line map. Takes care to render special characters separately.
+function buildToken(builder, text, style, startStyle, endStyle, title, css) {
+ if (!text) { return }
+ var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;
+ var special = builder.cm.state.specialChars, mustWrap = false;
+ var content;
+ if (!special.test(text)) {
+ builder.col += text.length;
+ content = document.createTextNode(displayText);
+ builder.map.push(builder.pos, builder.pos + text.length, content);
+ if (ie && ie_version < 9) { mustWrap = true; }
+ builder.pos += text.length;
+ } else {
+ content = document.createDocumentFragment();
+ var pos = 0;
+ while (true) {
+ special.lastIndex = pos;
+ var m = special.exec(text);
+ var skipped = m ? m.index - pos : text.length - pos;
+ if (skipped) {
+ var txt = document.createTextNode(displayText.slice(pos, pos + skipped));
+ if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])); }
+ else { content.appendChild(txt); }
+ builder.map.push(builder.pos, builder.pos + skipped, txt);
+ builder.col += skipped;
+ builder.pos += skipped;
+ }
+ if (!m) { break }
+ pos += skipped + 1;
+ var txt$1 = (void 0);
+ if (m[0] == "\t") {
+ var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
+ txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
+ txt$1.setAttribute("role", "presentation");
+ txt$1.setAttribute("cm-text", "\t");
+ builder.col += tabWidth;
+ } else if (m[0] == "\r" || m[0] == "\n") {
+ txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"));
+ txt$1.setAttribute("cm-text", m[0]);
+ builder.col += 1;
+ } else {
+ txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);
+ txt$1.setAttribute("cm-text", m[0]);
+ if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])); }
+ else { content.appendChild(txt$1); }
+ builder.col += 1;
+ }
+ builder.map.push(builder.pos, builder.pos + 1, txt$1);
+ builder.pos++;
+ }
+ }
+ builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;
+ if (style || startStyle || endStyle || mustWrap || css) {
+ var fullStyle = style || "";
+ if (startStyle) { fullStyle += startStyle; }
+ if (endStyle) { fullStyle += endStyle; }
+ var token = elt("span", [content], fullStyle, css);
+ if (title) { token.title = title; }
+ return builder.content.appendChild(token)
+ }
+ builder.content.appendChild(content);
+}
+
+function splitSpaces(text, trailingBefore) {
+ if (text.length > 1 && !/ /.test(text)) { return text }
+ var spaceBefore = trailingBefore, result = "";
+ for (var i = 0; i < text.length; i++) {
+ var ch = text.charAt(i);
+ if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))
+ { ch = "\u00a0"; }
+ result += ch;
+ spaceBefore = ch == " ";
+ }
+ return result
+}
+
+// Work around nonsense dimensions being reported for stretches of
+// right-to-left text.
+function buildTokenBadBidi(inner, order) {
+ return function (builder, text, style, startStyle, endStyle, title, css) {
+ style = style ? style + " cm-force-border" : "cm-force-border";
+ var start = builder.pos, end = start + text.length;
+ for (;;) {
+ // Find the part that overlaps with the start of this text
+ var part = (void 0);
+ for (var i = 0; i < order.length; i++) {
+ part = order[i];
+ if (part.to > start && part.from <= start) { break }
+ }
+ if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) }
+ inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css);
+ startStyle = null;
+ text = text.slice(part.to - start);
+ start = part.to;
+ }
+ }
+}
+
+function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
+ var widget = !ignoreWidget && marker.widgetNode;
+ if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }
+ if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
+ if (!widget)
+ { widget = builder.content.appendChild(document.createElement("span")); }
+ widget.setAttribute("cm-marker", marker.id);
+ }
+ if (widget) {
+ builder.cm.display.input.setUneditable(widget);
+ builder.content.appendChild(widget);
+ }
+ builder.pos += size;
+ builder.trailingSpace = false;
+}
+
+// Outputs a number of spans to make up a line, taking highlighting
+// and marked text into account.
+function insertLineContent(line, builder, styles) {
+ var spans = line.markedSpans, allText = line.text, at = 0;
+ if (!spans) {
+ for (var i$1 = 1; i$1 < styles.length; i$1+=2)
+ { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }
+ return
+ }
+
+ var len = allText.length, pos = 0, i = 1, text = "", style, css;
+ var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;
+ for (;;) {
+ if (nextChange == pos) { // Update current marker set
+ spanStyle = spanEndStyle = spanStartStyle = title = css = "";
+ collapsed = null; nextChange = Infinity;
+ var foundBookmarks = [], endStyles = (void 0);
+ for (var j = 0; j < spans.length; ++j) {
+ var sp = spans[j], m = sp.marker;
+ if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
+ foundBookmarks.push(m);
+ } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
+ if (sp.to != null && sp.to != pos && nextChange > sp.to) {
+ nextChange = sp.to;
+ spanEndStyle = "";
+ }
+ if (m.className) { spanStyle += " " + m.className; }
+ if (m.css) { css = (css ? css + ";" : "") + m.css; }
+ if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle; }
+ if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }
+ if (m.title && !title) { title = m.title; }
+ if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))
+ { collapsed = sp; }
+ } else if (sp.from > pos && nextChange > sp.from) {
+ nextChange = sp.from;
+ }
+ }
+ if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)
+ { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1]; } } }
+
+ if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)
+ { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }
+ if (collapsed && (collapsed.from || 0) == pos) {
+ buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,
+ collapsed.marker, collapsed.from == null);
+ if (collapsed.to == null) { return }
+ if (collapsed.to == pos) { collapsed = false; }
+ }
+ }
+ if (pos >= len) { break }
+
+ var upto = Math.min(len, nextChange);
+ while (true) {
+ if (text) {
+ var end = pos + text.length;
+ if (!collapsed) {
+ var tokenText = end > upto ? text.slice(0, upto - pos) : text;
+ builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,
+ spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css);
+ }
+ if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}
+ pos = end;
+ spanStartStyle = "";
+ }
+ text = allText.slice(at, at = styles[i++]);
+ style = interpretTokenStyle(styles[i++], builder.cm.options);
+ }
+ }
+}
+
+
+// These objects are used to represent the visible (currently drawn)
+// part of the document. A LineView may correspond to multiple
+// logical lines, if those are connected by collapsed ranges.
+function LineView(doc, line, lineN) {
+ // The starting line
+ this.line = line;
+ // Continuing lines, if any
+ this.rest = visualLineContinued(line);
+ // Number of logical lines in this visual line
+ this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;
+ this.node = this.text = null;
+ this.hidden = lineIsHidden(doc, line);
+}
+
+// Create a range of LineView objects for the given lines.
+function buildViewArray(cm, from, to) {
+ var array = [], nextPos;
+ for (var pos = from; pos < to; pos = nextPos) {
+ var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);
+ nextPos = pos + view.size;
+ array.push(view);
+ }
+ return array
+}
+
+var operationGroup = null;
+
+function pushOperation(op) {
+ if (operationGroup) {
+ operationGroup.ops.push(op);
+ } else {
+ op.ownsGroup = operationGroup = {
+ ops: [op],
+ delayedCallbacks: []
+ };
+ }
+}
+
+function fireCallbacksForOps(group) {
+ // Calls delayed callbacks and cursorActivity handlers until no
+ // new ones appear
+ var callbacks = group.delayedCallbacks, i = 0;
+ do {
+ for (; i < callbacks.length; i++)
+ { callbacks[i].call(null); }
+ for (var j = 0; j < group.ops.length; j++) {
+ var op = group.ops[j];
+ if (op.cursorActivityHandlers)
+ { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)
+ { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }
+ }
+ } while (i < callbacks.length)
+}
+
+function finishOperation(op, endCb) {
+ var group = op.ownsGroup;
+ if (!group) { return }
+
+ try { fireCallbacksForOps(group); }
+ finally {
+ operationGroup = null;
+ endCb(group);
+ }
+}
+
+var orphanDelayedCallbacks = null;
+
+// Often, we want to signal events at a point where we are in the
+// middle of some work, but don't want the handler to start calling
+// other methods on the editor, which might be in an inconsistent
+// state or simply not expect any other events to happen.
+// signalLater looks whether there are any handlers, and schedules
+// them to be executed when the last operation ends, or, if no
+// operation is active, when a timeout fires.
+function signalLater(emitter, type /*, values...*/) {
+ var arr = getHandlers(emitter, type);
+ if (!arr.length) { return }
+ var args = Array.prototype.slice.call(arguments, 2), list;
+ if (operationGroup) {
+ list = operationGroup.delayedCallbacks;
+ } else if (orphanDelayedCallbacks) {
+ list = orphanDelayedCallbacks;
+ } else {
+ list = orphanDelayedCallbacks = [];
+ setTimeout(fireOrphanDelayed, 0);
+ }
+ var loop = function ( i ) {
+ list.push(function () { return arr[i].apply(null, args); });
+ };
+
+ for (var i = 0; i < arr.length; ++i)
+ loop( i );
+}
+
+function fireOrphanDelayed() {
+ var delayed = orphanDelayedCallbacks;
+ orphanDelayedCallbacks = null;
+ for (var i = 0; i < delayed.length; ++i) { delayed[i](); }
+}
+
+// When an aspect of a line changes, a string is added to
+// lineView.changes. This updates the relevant part of the line's
+// DOM structure.
+function updateLineForChanges(cm, lineView, lineN, dims) {
+ for (var j = 0; j < lineView.changes.length; j++) {
+ var type = lineView.changes[j];
+ if (type == "text") { updateLineText(cm, lineView); }
+ else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims); }
+ else if (type == "class") { updateLineClasses(cm, lineView); }
+ else if (type == "widget") { updateLineWidgets(cm, lineView, dims); }
+ }
+ lineView.changes = null;
+}
+
+// Lines with gutter elements, widgets or a background class need to
+// be wrapped, and have the extra elements added to the wrapper div
+function ensureLineWrapped(lineView) {
+ if (lineView.node == lineView.text) {
+ lineView.node = elt("div", null, null, "position: relative");
+ if (lineView.text.parentNode)
+ { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }
+ lineView.node.appendChild(lineView.text);
+ if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }
+ }
+ return lineView.node
+}
+
+function updateLineBackground(cm, lineView) {
+ var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
+ if (cls) { cls += " CodeMirror-linebackground"; }
+ if (lineView.background) {
+ if (cls) { lineView.background.className = cls; }
+ else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }
+ } else if (cls) {
+ var wrap = ensureLineWrapped(lineView);
+ lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
+ cm.display.input.setUneditable(lineView.background);
+ }
+}
+
+// Wrapper around buildLineContent which will reuse the structure
+// in display.externalMeasured when possible.
+function getLineContent(cm, lineView) {
+ var ext = cm.display.externalMeasured;
+ if (ext && ext.line == lineView.line) {
+ cm.display.externalMeasured = null;
+ lineView.measure = ext.measure;
+ return ext.built
+ }
+ return buildLineContent(cm, lineView)
+}
+
+// Redraw the line's text. Interacts with the background and text
+// classes because the mode may output tokens that influence these
+// classes.
+function updateLineText(cm, lineView) {
+ var cls = lineView.text.className;
+ var built = getLineContent(cm, lineView);
+ if (lineView.text == lineView.node) { lineView.node = built.pre; }
+ lineView.text.parentNode.replaceChild(built.pre, lineView.text);
+ lineView.text = built.pre;
+ if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
+ lineView.bgClass = built.bgClass;
+ lineView.textClass = built.textClass;
+ updateLineClasses(cm, lineView);
+ } else if (cls) {
+ lineView.text.className = cls;
+ }
+}
+
+function updateLineClasses(cm, lineView) {
+ updateLineBackground(cm, lineView);
+ if (lineView.line.wrapClass)
+ { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }
+ else if (lineView.node != lineView.text)
+ { lineView.node.className = ""; }
+ var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
+ lineView.text.className = textClass || "";
+}
+
+function updateLineGutter(cm, lineView, lineN, dims) {
+ if (lineView.gutter) {
+ lineView.node.removeChild(lineView.gutter);
+ lineView.gutter = null;
+ }
+ if (lineView.gutterBackground) {
+ lineView.node.removeChild(lineView.gutterBackground);
+ lineView.gutterBackground = null;
+ }
+ if (lineView.line.gutterClass) {
+ var wrap = ensureLineWrapped(lineView);
+ lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass,
+ ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px"));
+ cm.display.input.setUneditable(lineView.gutterBackground);
+ wrap.insertBefore(lineView.gutterBackground, lineView.text);
+ }
+ var markers = lineView.line.gutterMarkers;
+ if (cm.options.lineNumbers || markers) {
+ var wrap$1 = ensureLineWrapped(lineView);
+ var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px"));
+ cm.display.input.setUneditable(gutterWrap);
+ wrap$1.insertBefore(gutterWrap, lineView.text);
+ if (lineView.line.gutterClass)
+ { gutterWrap.className += " " + lineView.line.gutterClass; }
+ if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"]))
+ { lineView.lineNumber = gutterWrap.appendChild(
+ elt("div", lineNumberFor(cm.options, lineN),
+ "CodeMirror-linenumber CodeMirror-gutter-elt",
+ ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))); }
+ if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {
+ var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];
+ if (found)
+ { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt",
+ ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))); }
+ } }
+ }
+}
+
+function updateLineWidgets(cm, lineView, dims) {
+ if (lineView.alignable) { lineView.alignable = null; }
+ for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {
+ next = node.nextSibling;
+ if (node.className == "CodeMirror-linewidget")
+ { lineView.node.removeChild(node); }
+ }
+ insertLineWidgets(cm, lineView, dims);
+}
+
+// Build a line's DOM representation from scratch
+function buildLineElement(cm, lineView, lineN, dims) {
+ var built = getLineContent(cm, lineView);
+ lineView.text = lineView.node = built.pre;
+ if (built.bgClass) { lineView.bgClass = built.bgClass; }
+ if (built.textClass) { lineView.textClass = built.textClass; }
+
+ updateLineClasses(cm, lineView);
+ updateLineGutter(cm, lineView, lineN, dims);
+ insertLineWidgets(cm, lineView, dims);
+ return lineView.node
+}
+
+// A lineView may contain multiple logical lines (when merged by
+// collapsed spans). The widgets for all of them need to be drawn.
+function insertLineWidgets(cm, lineView, dims) {
+ insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);
+ if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+ { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }
+}
+
+function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
+ if (!line.widgets) { return }
+ var wrap = ensureLineWrapped(lineView);
+ for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
+ var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget");
+ if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true"); }
+ positionLineWidget(widget, node, lineView, dims);
+ cm.display.input.setUneditable(node);
+ if (allowAbove && widget.above)
+ { wrap.insertBefore(node, lineView.gutter || lineView.text); }
+ else
+ { wrap.appendChild(node); }
+ signalLater(widget, "redraw");
+ }
+}
+
+function positionLineWidget(widget, node, lineView, dims) {
+ if (widget.noHScroll) {
+ (lineView.alignable || (lineView.alignable = [])).push(node);
+ var width = dims.wrapperWidth;
+ node.style.left = dims.fixedPos + "px";
+ if (!widget.coverGutter) {
+ width -= dims.gutterTotalWidth;
+ node.style.paddingLeft = dims.gutterTotalWidth + "px";
+ }
+ node.style.width = width + "px";
+ }
+ if (widget.coverGutter) {
+ node.style.zIndex = 5;
+ node.style.position = "relative";
+ if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px"; }
+ }
+}
+
+function widgetHeight(widget) {
+ if (widget.height != null) { return widget.height }
+ var cm = widget.doc.cm;
+ if (!cm) { return 0 }
+ if (!contains(document.body, widget.node)) {
+ var parentStyle = "position: relative;";
+ if (widget.coverGutter)
+ { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;"; }
+ if (widget.noHScroll)
+ { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;"; }
+ removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle));
+ }
+ return widget.height = widget.node.parentNode.offsetHeight
+}
+
+// Return true when the given mouse event happened in a widget
+function eventInWidget(display, e) {
+ for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
+ if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") ||
+ (n.parentNode == display.sizer && n != display.mover))
+ { return true }
+ }
+}
+
+// POSITION MEASUREMENT
+
+function paddingTop(display) {return display.lineSpace.offsetTop}
+function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}
+function paddingH(display) {
+ if (display.cachedPaddingH) { return display.cachedPaddingH }
+ var e = removeChildrenAndAdd(display.measure, elt("pre", "x"));
+ var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
+ var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};
+ if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }
+ return data
+}
+
+function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }
+function displayWidth(cm) {
+ return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth
+}
+function displayHeight(cm) {
+ return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight
+}
+
+// Ensure the lineView.wrapping.heights array is populated. This is
+// an array of bottom offsets for the lines that make up a drawn
+// line. When lineWrapping is on, there might be more than one
+// height.
+function ensureLineHeights(cm, lineView, rect) {
+ var wrapping = cm.options.lineWrapping;
+ var curWidth = wrapping && displayWidth(cm);
+ if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
+ var heights = lineView.measure.heights = [];
+ if (wrapping) {
+ lineView.measure.width = curWidth;
+ var rects = lineView.text.firstChild.getClientRects();
+ for (var i = 0; i < rects.length - 1; i++) {
+ var cur = rects[i], next = rects[i + 1];
+ if (Math.abs(cur.bottom - next.bottom) > 2)
+ { heights.push((cur.bottom + next.top) / 2 - rect.top); }
+ }
+ }
+ heights.push(rect.bottom - rect.top);
+ }
+}
+
+// Find a line map (mapping character offsets to text nodes) and a
+// measurement cache for the given line number. (A line view might
+// contain multiple lines when collapsed ranges are present.)
+function mapFromLineView(lineView, line, lineN) {
+ if (lineView.line == line)
+ { return {map: lineView.measure.map, cache: lineView.measure.cache} }
+ for (var i = 0; i < lineView.rest.length; i++)
+ { if (lineView.rest[i] == line)
+ { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }
+ for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)
+ { if (lineNo(lineView.rest[i$1]) > lineN)
+ { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }
+}
+
+// Render a line into the hidden node display.externalMeasured. Used
+// when measurement is needed for a line that's not in the viewport.
+function updateExternalMeasurement(cm, line) {
+ line = visualLine(line);
+ var lineN = lineNo(line);
+ var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
+ view.lineN = lineN;
+ var built = view.built = buildLineContent(cm, view);
+ view.text = built.pre;
+ removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
+ return view
+}
+
+// Get a {top, bottom, left, right} box (in line-local coordinates)
+// for a given character.
+function measureChar(cm, line, ch, bias) {
+ return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)
+}
+
+// Find a line view that corresponds to the given line number.
+function findViewForLine(cm, lineN) {
+ if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)
+ { return cm.display.view[findViewIndex(cm, lineN)] }
+ var ext = cm.display.externalMeasured;
+ if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)
+ { return ext }
+}
+
+// Measurement can be split in two steps, the set-up work that
+// applies to the whole line, and the measurement of the actual
+// character. Functions like coordsChar, that need to do a lot of
+// measurements in a row, can thus ensure that the set-up work is
+// only done once.
+function prepareMeasureForLine(cm, line) {
+ var lineN = lineNo(line);
+ var view = findViewForLine(cm, lineN);
+ if (view && !view.text) {
+ view = null;
+ } else if (view && view.changes) {
+ updateLineForChanges(cm, view, lineN, getDimensions(cm));
+ cm.curOp.forceUpdate = true;
+ }
+ if (!view)
+ { view = updateExternalMeasurement(cm, line); }
+
+ var info = mapFromLineView(view, line, lineN);
+ return {
+ line: line, view: view, rect: null,
+ map: info.map, cache: info.cache, before: info.before,
+ hasHeights: false
+ }
+}
+
+// Given a prepared measurement object, measures the position of an
+// actual character (or fetches it from the cache).
+function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
+ if (prepared.before) { ch = -1; }
+ var key = ch + (bias || ""), found;
+ if (prepared.cache.hasOwnProperty(key)) {
+ found = prepared.cache[key];
+ } else {
+ if (!prepared.rect)
+ { prepared.rect = prepared.view.text.getBoundingClientRect(); }
+ if (!prepared.hasHeights) {
+ ensureLineHeights(cm, prepared.view, prepared.rect);
+ prepared.hasHeights = true;
+ }
+ found = measureCharInner(cm, prepared, ch, bias);
+ if (!found.bogus) { prepared.cache[key] = found; }
+ }
+ return {left: found.left, right: found.right,
+ top: varHeight ? found.rtop : found.top,
+ bottom: varHeight ? found.rbottom : found.bottom}
+}
+
+var nullRect = {left: 0, right: 0, top: 0, bottom: 0};
+
+function nodeAndOffsetInLineMap(map$$1, ch, bias) {
+ var node, start, end, collapse, mStart, mEnd;
+ // First, search the line map for the text node corresponding to,
+ // or closest to, the target character.
+ for (var i = 0; i < map$$1.length; i += 3) {
+ mStart = map$$1[i];
+ mEnd = map$$1[i + 1];
+ if (ch < mStart) {
+ start = 0; end = 1;
+ collapse = "left";
+ } else if (ch < mEnd) {
+ start = ch - mStart;
+ end = start + 1;
+ } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {
+ end = mEnd - mStart;
+ start = end - 1;
+ if (ch >= mEnd) { collapse = "right"; }
+ }
+ if (start != null) {
+ node = map$$1[i + 2];
+ if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right"))
+ { collapse = bias; }
+ if (bias == "left" && start == 0)
+ { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {
+ node = map$$1[(i -= 3) + 2];
+ collapse = "left";
+ } }
+ if (bias == "right" && start == mEnd - mStart)
+ { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {
+ node = map$$1[(i += 3) + 2];
+ collapse = "right";
+ } }
+ break
+ }
+ }
+ return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}
+}
+
+function getUsefulRect(rects, bias) {
+ var rect = nullRect;
+ if (bias == "left") { for (var i = 0; i < rects.length; i++) {
+ if ((rect = rects[i]).left != rect.right) { break }
+ } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
+ if ((rect = rects[i$1]).left != rect.right) { break }
+ } }
+ return rect
+}
+
+function measureCharInner(cm, prepared, ch, bias) {
+ var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);
+ var node = place.node, start = place.start, end = place.end, collapse = place.collapse;
+
+ var rect;
+ if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
+ for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned
+ while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }
+ while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }
+ if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)
+ { rect = node.parentNode.getBoundingClientRect(); }
+ else
+ { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }
+ if (rect.left || rect.right || start == 0) { break }
+ end = start;
+ start = start - 1;
+ collapse = "right";
+ }
+ if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }
+ } else { // If it is a widget, simply get the box for the whole widget.
+ if (start > 0) { collapse = bias = "right"; }
+ var rects;
+ if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)
+ { rect = rects[bias == "right" ? rects.length - 1 : 0]; }
+ else
+ { rect = node.getBoundingClientRect(); }
+ }
+ if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
+ var rSpan = node.parentNode.getClientRects()[0];
+ if (rSpan)
+ { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }
+ else
+ { rect = nullRect; }
+ }
+
+ var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;
+ var mid = (rtop + rbot) / 2;
+ var heights = prepared.view.measure.heights;
+ var i = 0;
+ for (; i < heights.length - 1; i++)
+ { if (mid < heights[i]) { break } }
+ var top = i ? heights[i - 1] : 0, bot = heights[i];
+ var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
+ right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
+ top: top, bottom: bot};
+ if (!rect.left && !rect.right) { result.bogus = true; }
+ if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }
+
+ return result
+}
+
+// Work around problem with bounding client rects on ranges being
+// returned incorrectly when zoomed on IE10 and below.
+function maybeUpdateRectForZooming(measure, rect) {
+ if (!window.screen || screen.logicalXDPI == null ||
+ screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))
+ { return rect }
+ var scaleX = screen.logicalXDPI / screen.deviceXDPI;
+ var scaleY = screen.logicalYDPI / screen.deviceYDPI;
+ return {left: rect.left * scaleX, right: rect.right * scaleX,
+ top: rect.top * scaleY, bottom: rect.bottom * scaleY}
+}
+
+function clearLineMeasurementCacheFor(lineView) {
+ if (lineView.measure) {
+ lineView.measure.cache = {};
+ lineView.measure.heights = null;
+ if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)
+ { lineView.measure.caches[i] = {}; } }
+ }
+}
+
+function clearLineMeasurementCache(cm) {
+ cm.display.externalMeasure = null;
+ removeChildren(cm.display.lineMeasure);
+ for (var i = 0; i < cm.display.view.length; i++)
+ { clearLineMeasurementCacheFor(cm.display.view[i]); }
+}
+
+function clearCaches(cm) {
+ clearLineMeasurementCache(cm);
+ cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
+ if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }
+ cm.display.lineNumChars = null;
+}
+
+function pageScrollX() {
+ // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206
+ // which causes page_Offset and bounding client rects to use
+ // different reference viewports and invalidate our calculations.
+ if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }
+ return window.pageXOffset || (document.documentElement || document.body).scrollLeft
+}
+function pageScrollY() {
+ if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }
+ return window.pageYOffset || (document.documentElement || document.body).scrollTop
+}
+
+function widgetTopHeight(lineObj) {
+ var height = 0;
+ if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)
+ { height += widgetHeight(lineObj.widgets[i]); } } }
+ return height
+}
+
+// Converts a {top, bottom, left, right} box from line-local
+// coordinates into another coordinate system. Context may be one of
+// "line", "div" (display.lineDiv), "local"./null (editor), "window",
+// or "page".
+function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
+ if (!includeWidgets) {
+ var height = widgetTopHeight(lineObj);
+ rect.top += height; rect.bottom += height;
+ }
+ if (context == "line") { return rect }
+ if (!context) { context = "local"; }
+ var yOff = heightAtLine(lineObj);
+ if (context == "local") { yOff += paddingTop(cm.display); }
+ else { yOff -= cm.display.viewOffset; }
+ if (context == "page" || context == "window") {
+ var lOff = cm.display.lineSpace.getBoundingClientRect();
+ yOff += lOff.top + (context == "window" ? 0 : pageScrollY());
+ var xOff = lOff.left + (context == "window" ? 0 : pageScrollX());
+ rect.left += xOff; rect.right += xOff;
+ }
+ rect.top += yOff; rect.bottom += yOff;
+ return rect
+}
+
+// Coverts a box from "div" coords to another coordinate system.
+// Context may be "window", "page", "div", or "local"./null.
+function fromCoordSystem(cm, coords, context) {
+ if (context == "div") { return coords }
+ var left = coords.left, top = coords.top;
+ // First move into "page" coordinate system
+ if (context == "page") {
+ left -= pageScrollX();
+ top -= pageScrollY();
+ } else if (context == "local" || !context) {
+ var localBox = cm.display.sizer.getBoundingClientRect();
+ left += localBox.left;
+ top += localBox.top;
+ }
+
+ var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
+ return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}
+}
+
+function charCoords(cm, pos, context, lineObj, bias) {
+ if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }
+ return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)
+}
+
+// Returns a box for a given cursor position, which may have an
+// 'other' property containing the position of the secondary cursor
+// on a bidi boundary.
+// A cursor Pos(line, char, "before") is on the same visual line as `char - 1`
+// and after `char - 1` in writing order of `char - 1`
+// A cursor Pos(line, char, "after") is on the same visual line as `char`
+// and before `char` in writing order of `char`
+// Examples (upper-case letters are RTL, lower-case are LTR):
+// Pos(0, 1, ...)
+// before after
+// ab a|b a|b
+// aB a|B aB|
+// Ab |Ab A|b
+// AB B|A B|A
+// Every position after the last character on a line is considered to stick
+// to the last character on the line.
+function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
+ lineObj = lineObj || getLine(cm.doc, pos.line);
+ if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
+ function get(ch, right) {
+ var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight);
+ if (right) { m.left = m.right; } else { m.right = m.left; }
+ return intoCoordSystem(cm, lineObj, m, context)
+ }
+ var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;
+ if (ch >= lineObj.text.length) {
+ ch = lineObj.text.length;
+ sticky = "before";
+ } else if (ch <= 0) {
+ ch = 0;
+ sticky = "after";
+ }
+ if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") }
+
+ function getBidi(ch, partPos, invert) {
+ var part = order[partPos], right = part.level == 1;
+ return get(invert ? ch - 1 : ch, right != invert)
+ }
+ var partPos = getBidiPartAt(order, ch, sticky);
+ var other = bidiOther;
+ var val = getBidi(ch, partPos, sticky == "before");
+ if (other != null) { val.other = getBidi(ch, other, sticky != "before"); }
+ return val
+}
+
+// Used to cheaply estimate the coordinates for a position. Used for
+// intermediate scroll updates.
+function estimateCoords(cm, pos) {
+ var left = 0;
+ pos = clipPos(cm.doc, pos);
+ if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }
+ var lineObj = getLine(cm.doc, pos.line);
+ var top = heightAtLine(lineObj) + paddingTop(cm.display);
+ return {left: left, right: left, top: top, bottom: top + lineObj.height}
+}
+
+// Positions returned by coordsChar contain some extra information.
+// xRel is the relative x position of the input coordinates compared
+// to the found position (so xRel > 0 means the coordinates are to
+// the right of the character position, for example). When outside
+// is true, that means the coordinates lie outside the line's
+// vertical range.
+function PosWithInfo(line, ch, sticky, outside, xRel) {
+ var pos = Pos(line, ch, sticky);
+ pos.xRel = xRel;
+ if (outside) { pos.outside = true; }
+ return pos
+}
+
+// Compute the character position closest to the given coordinates.
+// Input must be lineSpace-local ("div" coordinate system).
+function coordsChar(cm, x, y) {
+ var doc = cm.doc;
+ y += cm.display.viewOffset;
+ if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }
+ var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
+ if (lineN > last)
+ { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }
+ if (x < 0) { x = 0; }
+
+ var lineObj = getLine(doc, lineN);
+ for (;;) {
+ var found = coordsCharInner(cm, lineObj, lineN, x, y);
+ var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0));
+ if (!collapsed) { return found }
+ var rangeEnd = collapsed.find(1);
+ if (rangeEnd.line == lineN) { return rangeEnd }
+ lineObj = getLine(doc, lineN = rangeEnd.line);
+ }
+}
+
+function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
+ y -= widgetTopHeight(lineObj);
+ var end = lineObj.text.length;
+ var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);
+ end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);
+ return {begin: begin, end: end}
+}
+
+function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
+ if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }
+ var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top;
+ return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)
+}
+
+// Returns true if the given side of a box is after the given
+// coordinates, in top-to-bottom, left-to-right order.
+function boxIsAfter(box, x, y, left) {
+ return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x
+}
+
+function coordsCharInner(cm, lineObj, lineNo$$1, x, y) {
+ // Move y into line-local coordinate space
+ y -= heightAtLine(lineObj);
+ var preparedMeasure = prepareMeasureForLine(cm, lineObj);
+ // When directly calling `measureCharPrepared`, we have to adjust
+ // for the widgets at this line.
+ var widgetHeight$$1 = widgetTopHeight(lineObj);
+ var begin = 0, end = lineObj.text.length, ltr = true;
+
+ var order = getOrder(lineObj, cm.doc.direction);
+ // If the line isn't plain left-to-right text, first figure out
+ // which bidi section the coordinates fall into.
+ if (order) {
+ var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)
+ (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);
+ ltr = part.level != 1;
+ // The awkward -1 offsets are needed because findFirst (called
+ // on these below) will treat its first bound as inclusive,
+ // second as exclusive, but we want to actually address the
+ // characters in the part's range
+ begin = ltr ? part.from : part.to - 1;
+ end = ltr ? part.to : part.from - 1;
+ }
+
+ // A binary search to find the first character whose bounding box
+ // starts after the coordinates. If we run across any whose box wrap
+ // the coordinates, store that.
+ var chAround = null, boxAround = null;
+ var ch = findFirst(function (ch) {
+ var box = measureCharPrepared(cm, preparedMeasure, ch);
+ box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;
+ if (!boxIsAfter(box, x, y, false)) { return false }
+ if (box.top <= y && box.left <= x) {
+ chAround = ch;
+ boxAround = box;
+ }
+ return true
+ }, begin, end);
+
+ var baseX, sticky, outside = false;
+ // If a box around the coordinates was found, use that
+ if (boxAround) {
+ // Distinguish coordinates nearer to the left or right side of the box
+ var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;
+ ch = chAround + (atStart ? 0 : 1);
+ sticky = atStart ? "after" : "before";
+ baseX = atLeft ? boxAround.left : boxAround.right;
+ } else {
+ // (Adjust for extended bound, if necessary.)
+ if (!ltr && (ch == end || ch == begin)) { ch++; }
+ // To determine which side to associate with, get the box to the
+ // left of the character and compare it's vertical position to the
+ // coordinates
+ sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" :
+ (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?
+ "after" : "before";
+ // Now get accurate coordinates for this place, in order to get a
+ // base X position
+ var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), "line", lineObj, preparedMeasure);
+ baseX = coords.left;
+ outside = y < coords.top || y >= coords.bottom;
+ }
+
+ ch = skipExtendingChars(lineObj.text, ch, 1);
+ return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)
+}
+
+function coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {
+ // Bidi parts are sorted left-to-right, and in a non-line-wrapping
+ // situation, we can take this ordering to correspond to the visual
+ // ordering. This finds the first part whose end is after the given
+ // coordinates.
+ var index = findFirst(function (i) {
+ var part = order[i], ltr = part.level != 1;
+ return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? "before" : "after"),
+ "line", lineObj, preparedMeasure), x, y, true)
+ }, 0, order.length - 1);
+ var part = order[index];
+ // If this isn't the first part, the part's start is also after
+ // the coordinates, and the coordinates aren't on the same line as
+ // that start, move one part back.
+ if (index > 0) {
+ var ltr = part.level != 1;
+ var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? "after" : "before"),
+ "line", lineObj, preparedMeasure);
+ if (boxIsAfter(start, x, y, true) && start.top > y)
+ { part = order[index - 1]; }
+ }
+ return part
+}
+
+function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {
+ // In a wrapped line, rtl text on wrapping boundaries can do things
+ // that don't correspond to the ordering in our `order` array at
+ // all, so a binary search doesn't work, and we want to return a
+ // part that only spans one line so that the binary search in
+ // coordsCharInner is safe. As such, we first find the extent of the
+ // wrapped line, and then do a flat search in which we discard any
+ // spans that aren't on the line.
+ var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);
+ var begin = ref.begin;
+ var end = ref.end;
+ if (/\s/.test(lineObj.text.charAt(end - 1))) { end--; }
+ var part = null, closestDist = null;
+ for (var i = 0; i < order.length; i++) {
+ var p = order[i];
+ if (p.from >= end || p.to <= begin) { continue }
+ var ltr = p.level != 1;
+ var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;
+ // Weigh against spans ending before this, so that they are only
+ // picked if nothing ends after
+ var dist = endX < x ? x - endX + 1e9 : endX - x;
+ if (!part || closestDist > dist) {
+ part = p;
+ closestDist = dist;
+ }
+ }
+ if (!part) { part = order[order.length - 1]; }
+ // Clip the part to the wrapped line.
+ if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }
+ if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }
+ return part
+}
+
+var measureText;
+// Compute the default text height.
+function textHeight(display) {
+ if (display.cachedTextHeight != null) { return display.cachedTextHeight }
+ if (measureText == null) {
+ measureText = elt("pre");
+ // Measure a bunch of lines, for browsers that compute
+ // fractional heights.
+ for (var i = 0; i < 49; ++i) {
+ measureText.appendChild(document.createTextNode("x"));
+ measureText.appendChild(elt("br"));
+ }
+ measureText.appendChild(document.createTextNode("x"));
+ }
+ removeChildrenAndAdd(display.measure, measureText);
+ var height = measureText.offsetHeight / 50;
+ if (height > 3) { display.cachedTextHeight = height; }
+ removeChildren(display.measure);
+ return height || 1
+}
+
+// Compute the default character width.
+function charWidth(display) {
+ if (display.cachedCharWidth != null) { return display.cachedCharWidth }
+ var anchor = elt("span", "xxxxxxxxxx");
+ var pre = elt("pre", [anchor]);
+ removeChildrenAndAdd(display.measure, pre);
+ var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;
+ if (width > 2) { display.cachedCharWidth = width; }
+ return width || 10
+}
+
+// Do a bulk-read of the DOM positions and sizes needed to draw the
+// view, so that we don't interleave reading and writing to the DOM.
+function getDimensions(cm) {
+ var d = cm.display, left = {}, width = {};
+ var gutterLeft = d.gutters.clientLeft;
+ for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {
+ left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;
+ width[cm.options.gutters[i]] = n.clientWidth;
+ }
+ return {fixedPos: compensateForHScroll(d),
+ gutterTotalWidth: d.gutters.offsetWidth,
+ gutterLeft: left,
+ gutterWidth: width,
+ wrapperWidth: d.wrapper.clientWidth}
+}
+
+// Computes display.scroller.scrollLeft + display.gutters.offsetWidth,
+// but using getBoundingClientRect to get a sub-pixel-accurate
+// result.
+function compensateForHScroll(display) {
+ return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left
+}
+
+// Returns a function that estimates the height of a line, to use as
+// first approximation until the line becomes visible (and is thus
+// properly measurable).
+function estimateHeight(cm) {
+ var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
+ var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
+ return function (line) {
+ if (lineIsHidden(cm.doc, line)) { return 0 }
+
+ var widgetsHeight = 0;
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {
+ if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }
+ } }
+
+ if (wrapping)
+ { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }
+ else
+ { return widgetsHeight + th }
+ }
+}
+
+function estimateLineHeights(cm) {
+ var doc = cm.doc, est = estimateHeight(cm);
+ doc.iter(function (line) {
+ var estHeight = est(line);
+ if (estHeight != line.height) { updateLineHeight(line, estHeight); }
+ });
+}
+
+// Given a mouse event, find the corresponding position. If liberal
+// is false, it checks whether a gutter or scrollbar was clicked,
+// and returns null if it was. forRect is used by rectangular
+// selections, and tries to estimate a character position even for
+// coordinates beyond the right of the text.
+function posFromMouse(cm, e, liberal, forRect) {
+ var display = cm.display;
+ if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null }
+
+ var x, y, space = display.lineSpace.getBoundingClientRect();
+ // Fails unpredictably on IE[67] when mouse is dragged around quickly.
+ try { x = e.clientX - space.left; y = e.clientY - space.top; }
+ catch (e) { return null }
+ var coords = coordsChar(cm, x, y), line;
+ if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
+ var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;
+ coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));
+ }
+ return coords
+}
+
+// Find the view element corresponding to a given line. Return null
+// when the line isn't visible.
+function findViewIndex(cm, n) {
+ if (n >= cm.display.viewTo) { return null }
+ n -= cm.display.viewFrom;
+ if (n < 0) { return null }
+ var view = cm.display.view;
+ for (var i = 0; i < view.length; i++) {
+ n -= view[i].size;
+ if (n < 0) { return i }
+ }
+}
+
+function updateSelection(cm) {
+ cm.display.input.showSelection(cm.display.input.prepareSelection());
+}
+
+function prepareSelection(cm, primary) {
+ if ( primary === void 0 ) primary = true;
+
+ var doc = cm.doc, result = {};
+ var curFragment = result.cursors = document.createDocumentFragment();
+ var selFragment = result.selection = document.createDocumentFragment();
+
+ for (var i = 0; i < doc.sel.ranges.length; i++) {
+ if (!primary && i == doc.sel.primIndex) { continue }
+ var range$$1 = doc.sel.ranges[i];
+ if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }
+ var collapsed = range$$1.empty();
+ if (collapsed || cm.options.showCursorWhenSelecting)
+ { drawSelectionCursor(cm, range$$1.head, curFragment); }
+ if (!collapsed)
+ { drawSelectionRange(cm, range$$1, selFragment); }
+ }
+ return result
+}
+
+// Draws a cursor for the given range
+function drawSelectionCursor(cm, head, output) {
+ var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine);
+
+ var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
+ cursor.style.left = pos.left + "px";
+ cursor.style.top = pos.top + "px";
+ cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
+
+ if (pos.other) {
+ // Secondary cursor, shown when on a 'jump' in bi-directional text
+ var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
+ otherCursor.style.display = "";
+ otherCursor.style.left = pos.other.left + "px";
+ otherCursor.style.top = pos.other.top + "px";
+ otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
+ }
+}
+
+function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }
+
+// Draws the given range as a highlighted selection
+function drawSelectionRange(cm, range$$1, output) {
+ var display = cm.display, doc = cm.doc;
+ var fragment = document.createDocumentFragment();
+ var padding = paddingH(cm.display), leftSide = padding.left;
+ var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;
+ var docLTR = doc.direction == "ltr";
+
+ function add(left, top, width, bottom) {
+ if (top < 0) { top = 0; }
+ top = Math.round(top);
+ bottom = Math.round(bottom);
+ fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px")));
+ }
+
+ function drawForLine(line, fromArg, toArg) {
+ var lineObj = getLine(doc, line);
+ var lineLen = lineObj.text.length;
+ var start, end;
+ function coords(ch, bias) {
+ return charCoords(cm, Pos(line, ch), "div", lineObj, bias)
+ }
+
+ function wrapX(pos, dir, side) {
+ var extent = wrappedLineExtentChar(cm, lineObj, null, pos);
+ var prop = (dir == "ltr") == (side == "after") ? "left" : "right";
+ var ch = side == "after" ? extent.begin : extent.end - (/\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);
+ return coords(ch, prop)[prop]
+ }
+
+ var order = getOrder(lineObj, doc.direction);
+ iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
+ var ltr = dir == "ltr";
+ var fromPos = coords(from, ltr ? "left" : "right");
+ var toPos = coords(to - 1, ltr ? "right" : "left");
+
+ var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;
+ var first = i == 0, last = !order || i == order.length - 1;
+ if (toPos.top - fromPos.top <= 3) { // Single line
+ var openLeft = (docLTR ? openStart : openEnd) && first;
+ var openRight = (docLTR ? openEnd : openStart) && last;
+ var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;
+ var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;
+ add(left, fromPos.top, right - left, fromPos.bottom);
+ } else { // Multiple lines
+ var topLeft, topRight, botLeft, botRight;
+ if (ltr) {
+ topLeft = docLTR && openStart && first ? leftSide : fromPos.left;
+ topRight = docLTR ? rightSide : wrapX(from, dir, "before");
+ botLeft = docLTR ? leftSide : wrapX(to, dir, "after");
+ botRight = docLTR && openEnd && last ? rightSide : toPos.right;
+ } else {
+ topLeft = !docLTR ? leftSide : wrapX(from, dir, "before");
+ topRight = !docLTR && openStart && first ? rightSide : fromPos.right;
+ botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;
+ botRight = !docLTR ? rightSide : wrapX(to, dir, "after");
+ }
+ add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);
+ if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }
+ add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);
+ }
+
+ if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }
+ if (cmpCoords(toPos, start) < 0) { start = toPos; }
+ if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }
+ if (cmpCoords(toPos, end) < 0) { end = toPos; }
+ });
+ return {start: start, end: end}
+ }
+
+ var sFrom = range$$1.from(), sTo = range$$1.to();
+ if (sFrom.line == sTo.line) {
+ drawForLine(sFrom.line, sFrom.ch, sTo.ch);
+ } else {
+ var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
+ var singleVLine = visualLine(fromLine) == visualLine(toLine);
+ var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
+ var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
+ if (singleVLine) {
+ if (leftEnd.top < rightStart.top - 2) {
+ add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
+ add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
+ } else {
+ add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
+ }
+ }
+ if (leftEnd.bottom < rightStart.top)
+ { add(leftSide, leftEnd.bottom, null, rightStart.top); }
+ }
+
+ output.appendChild(fragment);
+}
+
+// Cursor-blinking
+function restartBlink(cm) {
+ if (!cm.state.focused) { return }
+ var display = cm.display;
+ clearInterval(display.blinker);
+ var on = true;
+ display.cursorDiv.style.visibility = "";
+ if (cm.options.cursorBlinkRate > 0)
+ { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; },
+ cm.options.cursorBlinkRate); }
+ else if (cm.options.cursorBlinkRate < 0)
+ { display.cursorDiv.style.visibility = "hidden"; }
+}
+
+function ensureFocus(cm) {
+ if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }
+}
+
+function delayBlurEvent(cm) {
+ cm.state.delayingBlurEvent = true;
+ setTimeout(function () { if (cm.state.delayingBlurEvent) {
+ cm.state.delayingBlurEvent = false;
+ onBlur(cm);
+ } }, 100);
+}
+
+function onFocus(cm, e) {
+ if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }
+
+ if (cm.options.readOnly == "nocursor") { return }
+ if (!cm.state.focused) {
+ signal(cm, "focus", cm, e);
+ cm.state.focused = true;
+ addClass(cm.display.wrapper, "CodeMirror-focused");
+ // This test prevents this from firing when a context
+ // menu is closed (since the input reset would kill the
+ // select-all detection hack)
+ if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
+ cm.display.input.reset();
+ if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730
+ }
+ cm.display.input.receivedFocus();
+ }
+ restartBlink(cm);
+}
+function onBlur(cm, e) {
+ if (cm.state.delayingBlurEvent) { return }
+
+ if (cm.state.focused) {
+ signal(cm, "blur", cm, e);
+ cm.state.focused = false;
+ rmClass(cm.display.wrapper, "CodeMirror-focused");
+ }
+ clearInterval(cm.display.blinker);
+ setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);
+}
+
+// Read the actual heights of the rendered lines, and update their
+// stored heights to match.
+function updateHeightsInViewport(cm) {
+ var display = cm.display;
+ var prevBottom = display.lineDiv.offsetTop;
+ for (var i = 0; i < display.view.length; i++) {
+ var cur = display.view[i], height = (void 0);
+ if (cur.hidden) { continue }
+ if (ie && ie_version < 8) {
+ var bot = cur.node.offsetTop + cur.node.offsetHeight;
+ height = bot - prevBottom;
+ prevBottom = bot;
+ } else {
+ var box = cur.node.getBoundingClientRect();
+ height = box.bottom - box.top;
+ }
+ var diff = cur.line.height - height;
+ if (height < 2) { height = textHeight(display); }
+ if (diff > .005 || diff < -.005) {
+ updateLineHeight(cur.line, height);
+ updateWidgetHeight(cur.line);
+ if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)
+ { updateWidgetHeight(cur.rest[j]); } }
+ }
+ }
+}
+
+// Read and store the height of line widgets associated with the
+// given line.
+function updateWidgetHeight(line) {
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {
+ var w = line.widgets[i], parent = w.node.parentNode;
+ if (parent) { w.height = parent.offsetHeight; }
+ } }
+}
+
+// Compute the lines that are visible in a given viewport (defaults
+// the the current scroll position). viewport may contain top,
+// height, and ensure (see op.scrollToPos) properties.
+function visibleLines(display, doc, viewport) {
+ var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;
+ top = Math.floor(top - paddingTop(display));
+ var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;
+
+ var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
+ // Ensure is a {from: {line, ch}, to: {line, ch}} object, and
+ // forces those lines into the viewport (if possible).
+ if (viewport && viewport.ensure) {
+ var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;
+ if (ensureFrom < from) {
+ from = ensureFrom;
+ to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);
+ } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
+ from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);
+ to = ensureTo;
+ }
+ }
+ return {from: from, to: Math.max(to, from + 1)}
+}
+
+// Re-align line numbers and gutter marks to compensate for
+// horizontal scrolling.
+function alignHorizontally(cm) {
+ var display = cm.display, view = display.view;
+ if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }
+ var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
+ var gutterW = display.gutters.offsetWidth, left = comp + "px";
+ for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {
+ if (cm.options.fixedGutter) {
+ if (view[i].gutter)
+ { view[i].gutter.style.left = left; }
+ if (view[i].gutterBackground)
+ { view[i].gutterBackground.style.left = left; }
+ }
+ var align = view[i].alignable;
+ if (align) { for (var j = 0; j < align.length; j++)
+ { align[j].style.left = left; } }
+ } }
+ if (cm.options.fixedGutter)
+ { display.gutters.style.left = (comp + gutterW) + "px"; }
+}
+
+// Used to ensure that the line number gutter is still the right
+// size for the current document size. Returns true when an update
+// is needed.
+function maybeUpdateLineNumberWidth(cm) {
+ if (!cm.options.lineNumbers) { return false }
+ var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
+ if (last.length != display.lineNumChars) {
+ var test = display.measure.appendChild(elt("div", [elt("div", last)],
+ "CodeMirror-linenumber CodeMirror-gutter-elt"));
+ var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
+ display.lineGutter.style.width = "";
+ display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;
+ display.lineNumWidth = display.lineNumInnerWidth + padding;
+ display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
+ display.lineGutter.style.width = display.lineNumWidth + "px";
+ updateGutterSpace(cm);
+ return true
+ }
+ return false
+}
+
+// SCROLLING THINGS INTO VIEW
+
+// If an editor sits on the top or bottom of the window, partially
+// scrolled out of view, this ensures that the cursor is visible.
+function maybeScrollWindow(cm, rect) {
+ if (signalDOMEvent(cm, "scrollCursorIntoView")) { return }
+
+ var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;
+ if (rect.top + box.top < 0) { doScroll = true; }
+ else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }
+ if (doScroll != null && !phantom) {
+ var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;"));
+ cm.display.lineSpace.appendChild(scrollNode);
+ scrollNode.scrollIntoView(doScroll);
+ cm.display.lineSpace.removeChild(scrollNode);
+ }
+}
+
+// Scroll a given position into view (immediately), verifying that
+// it actually became visible (as line heights are accurately
+// measured, the position of something may 'drift' during drawing).
+function scrollPosIntoView(cm, pos, end, margin) {
+ if (margin == null) { margin = 0; }
+ var rect;
+ if (!cm.options.lineWrapping && pos == end) {
+ // Set pos and end to the cursor positions around the character pos sticks to
+ // If pos.sticky == "before", that is around pos.ch - 1, otherwise around pos.ch
+ // If pos == Pos(_, 0, "before"), pos and end are unchanged
+ pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos;
+ end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos;
+ }
+ for (var limit = 0; limit < 5; limit++) {
+ var changed = false;
+ var coords = cursorCoords(cm, pos);
+ var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);
+ rect = {left: Math.min(coords.left, endCoords.left),
+ top: Math.min(coords.top, endCoords.top) - margin,
+ right: Math.max(coords.left, endCoords.left),
+ bottom: Math.max(coords.bottom, endCoords.bottom) + margin};
+ var scrollPos = calculateScrollPos(cm, rect);
+ var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
+ if (scrollPos.scrollTop != null) {
+ updateScrollTop(cm, scrollPos.scrollTop);
+ if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }
+ }
+ if (scrollPos.scrollLeft != null) {
+ setScrollLeft(cm, scrollPos.scrollLeft);
+ if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }
+ }
+ if (!changed) { break }
+ }
+ return rect
+}
+
+// Scroll a given set of coordinates into view (immediately).
+function scrollIntoView(cm, rect) {
+ var scrollPos = calculateScrollPos(cm, rect);
+ if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }
+ if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }
+}
+
+// Calculate a new scroll position needed to scroll the given
+// rectangle into view. Returns an object with scrollTop and
+// scrollLeft properties. When these are undefined, the
+// vertical/horizontal position does not need to be adjusted.
+function calculateScrollPos(cm, rect) {
+ var display = cm.display, snapMargin = textHeight(cm.display);
+ if (rect.top < 0) { rect.top = 0; }
+ var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;
+ var screen = displayHeight(cm), result = {};
+ if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }
+ var docBottom = cm.doc.height + paddingVert(display);
+ var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;
+ if (rect.top < screentop) {
+ result.scrollTop = atTop ? 0 : rect.top;
+ } else if (rect.bottom > screentop + screen) {
+ var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);
+ if (newTop != screentop) { result.scrollTop = newTop; }
+ }
+
+ var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;
+ var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);
+ var tooWide = rect.right - rect.left > screenw;
+ if (tooWide) { rect.right = rect.left + screenw; }
+ if (rect.left < 10)
+ { result.scrollLeft = 0; }
+ else if (rect.left < screenleft)
+ { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }
+ else if (rect.right > screenw + screenleft - 3)
+ { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }
+ return result
+}
+
+// Store a relative adjustment to the scroll position in the current
+// operation (to be applied when the operation finishes).
+function addToScrollTop(cm, top) {
+ if (top == null) { return }
+ resolveScrollToPos(cm);
+ cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;
+}
+
+// Make sure that at the end of the operation the current cursor is
+// shown.
+function ensureCursorVisible(cm) {
+ resolveScrollToPos(cm);
+ var cur = cm.getCursor();
+ cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};
+}
+
+function scrollToCoords(cm, x, y) {
+ if (x != null || y != null) { resolveScrollToPos(cm); }
+ if (x != null) { cm.curOp.scrollLeft = x; }
+ if (y != null) { cm.curOp.scrollTop = y; }
+}
+
+function scrollToRange(cm, range$$1) {
+ resolveScrollToPos(cm);
+ cm.curOp.scrollToPos = range$$1;
+}
+
+// When an operation has its scrollToPos property set, and another
+// scroll action is applied before the end of the operation, this
+// 'simulates' scrolling that position into view in a cheap way, so
+// that the effect of intermediate scroll commands is not ignored.
+function resolveScrollToPos(cm) {
+ var range$$1 = cm.curOp.scrollToPos;
+ if (range$$1) {
+ cm.curOp.scrollToPos = null;
+ var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);
+ scrollToCoordsRange(cm, from, to, range$$1.margin);
+ }
+}
+
+function scrollToCoordsRange(cm, from, to, margin) {
+ var sPos = calculateScrollPos(cm, {
+ left: Math.min(from.left, to.left),
+ top: Math.min(from.top, to.top) - margin,
+ right: Math.max(from.right, to.right),
+ bottom: Math.max(from.bottom, to.bottom) + margin
+ });
+ scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);
+}
+
+// Sync the scrollable area and scrollbars, ensure the viewport
+// covers the visible area.
+function updateScrollTop(cm, val) {
+ if (Math.abs(cm.doc.scrollTop - val) < 2) { return }
+ if (!gecko) { updateDisplaySimple(cm, {top: val}); }
+ setScrollTop(cm, val, true);
+ if (gecko) { updateDisplaySimple(cm); }
+ startWorker(cm, 100);
+}
+
+function setScrollTop(cm, val, forceScroll) {
+ val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);
+ if (cm.display.scroller.scrollTop == val && !forceScroll) { return }
+ cm.doc.scrollTop = val;
+ cm.display.scrollbars.setScrollTop(val);
+ if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }
+}
+
+// Sync scroller and scrollbar, ensure the gutter elements are
+// aligned.
+function setScrollLeft(cm, val, isScroller, forceScroll) {
+ val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);
+ if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }
+ cm.doc.scrollLeft = val;
+ alignHorizontally(cm);
+ if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }
+ cm.display.scrollbars.setScrollLeft(val);
+}
+
+// SCROLLBARS
+
+// Prepare DOM reads needed to update the scrollbars. Done in one
+// shot to minimize update/measure roundtrips.
+function measureForScrollbars(cm) {
+ var d = cm.display, gutterW = d.gutters.offsetWidth;
+ var docH = Math.round(cm.doc.height + paddingVert(cm.display));
+ return {
+ clientHeight: d.scroller.clientHeight,
+ viewHeight: d.wrapper.clientHeight,
+ scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,
+ viewWidth: d.wrapper.clientWidth,
+ barLeft: cm.options.fixedGutter ? gutterW : 0,
+ docHeight: docH,
+ scrollHeight: docH + scrollGap(cm) + d.barHeight,
+ nativeBarWidth: d.nativeBarWidth,
+ gutterWidth: gutterW
+ }
+}
+
+var NativeScrollbars = function(place, scroll, cm) {
+ this.cm = cm;
+ var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
+ var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
+ vert.tabIndex = horiz.tabIndex = -1;
+ place(vert); place(horiz);
+
+ on(vert, "scroll", function () {
+ if (vert.clientHeight) { scroll(vert.scrollTop, "vertical"); }
+ });
+ on(horiz, "scroll", function () {
+ if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal"); }
+ });
+
+ this.checkedZeroWidth = false;
+ // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
+ if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px"; }
+};
+
+NativeScrollbars.prototype.update = function (measure) {
+ var needsH = measure.scrollWidth > measure.clientWidth + 1;
+ var needsV = measure.scrollHeight > measure.clientHeight + 1;
+ var sWidth = measure.nativeBarWidth;
+
+ if (needsV) {
+ this.vert.style.display = "block";
+ this.vert.style.bottom = needsH ? sWidth + "px" : "0";
+ var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);
+ // A bug in IE8 can cause this value to be negative, so guard it.
+ this.vert.firstChild.style.height =
+ Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px";
+ } else {
+ this.vert.style.display = "";
+ this.vert.firstChild.style.height = "0";
+ }
+
+ if (needsH) {
+ this.horiz.style.display = "block";
+ this.horiz.style.right = needsV ? sWidth + "px" : "0";
+ this.horiz.style.left = measure.barLeft + "px";
+ var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);
+ this.horiz.firstChild.style.width =
+ Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px";
+ } else {
+ this.horiz.style.display = "";
+ this.horiz.firstChild.style.width = "0";
+ }
+
+ if (!this.checkedZeroWidth && measure.clientHeight > 0) {
+ if (sWidth == 0) { this.zeroWidthHack(); }
+ this.checkedZeroWidth = true;
+ }
+
+ return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}
+};
+
+NativeScrollbars.prototype.setScrollLeft = function (pos) {
+ if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }
+ if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz"); }
+};
+
+NativeScrollbars.prototype.setScrollTop = function (pos) {
+ if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }
+ if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert"); }
+};
+
+NativeScrollbars.prototype.zeroWidthHack = function () {
+ var w = mac && !mac_geMountainLion ? "12px" : "18px";
+ this.horiz.style.height = this.vert.style.width = w;
+ this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none";
+ this.disableHoriz = new Delayed;
+ this.disableVert = new Delayed;
+};
+
+NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {
+ bar.style.pointerEvents = "auto";
+ function maybeDisable() {
+ // To find out whether the scrollbar is still visible, we
+ // check whether the element under the pixel in the bottom
+ // right corner of the scrollbar box is the scrollbar box
+ // itself (when the bar is still visible) or its filler child
+ // (when the bar is hidden). If it is still visible, we keep
+ // it enabled, if it's hidden, we disable pointer events.
+ var box = bar.getBoundingClientRect();
+ var elt$$1 = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)
+ : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);
+ if (elt$$1 != bar) { bar.style.pointerEvents = "none"; }
+ else { delay.set(1000, maybeDisable); }
+ }
+ delay.set(1000, maybeDisable);
+};
+
+NativeScrollbars.prototype.clear = function () {
+ var parent = this.horiz.parentNode;
+ parent.removeChild(this.horiz);
+ parent.removeChild(this.vert);
+};
+
+var NullScrollbars = function () {};
+
+NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };
+NullScrollbars.prototype.setScrollLeft = function () {};
+NullScrollbars.prototype.setScrollTop = function () {};
+NullScrollbars.prototype.clear = function () {};
+
+function updateScrollbars(cm, measure) {
+ if (!measure) { measure = measureForScrollbars(cm); }
+ var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;
+ updateScrollbarsInner(cm, measure);
+ for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
+ if (startWidth != cm.display.barWidth && cm.options.lineWrapping)
+ { updateHeightsInViewport(cm); }
+ updateScrollbarsInner(cm, measureForScrollbars(cm));
+ startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;
+ }
+}
+
+// Re-synchronize the fake scrollbars with the actual size of the
+// content.
+function updateScrollbarsInner(cm, measure) {
+ var d = cm.display;
+ var sizes = d.scrollbars.update(measure);
+
+ d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px";
+ d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px";
+ d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent";
+
+ if (sizes.right && sizes.bottom) {
+ d.scrollbarFiller.style.display = "block";
+ d.scrollbarFiller.style.height = sizes.bottom + "px";
+ d.scrollbarFiller.style.width = sizes.right + "px";
+ } else { d.scrollbarFiller.style.display = ""; }
+ if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
+ d.gutterFiller.style.display = "block";
+ d.gutterFiller.style.height = sizes.bottom + "px";
+ d.gutterFiller.style.width = measure.gutterWidth + "px";
+ } else { d.gutterFiller.style.display = ""; }
+}
+
+var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars};
+
+function initScrollbars(cm) {
+ if (cm.display.scrollbars) {
+ cm.display.scrollbars.clear();
+ if (cm.display.scrollbars.addClass)
+ { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
+ }
+
+ cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
+ cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);
+ // Prevent clicks in the scrollbars from killing focus
+ on(node, "mousedown", function () {
+ if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }
+ });
+ node.setAttribute("cm-not-content", "true");
+ }, function (pos, axis) {
+ if (axis == "horizontal") { setScrollLeft(cm, pos); }
+ else { updateScrollTop(cm, pos); }
+ }, cm);
+ if (cm.display.scrollbars.addClass)
+ { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }
+}
+
+// Operations are used to wrap a series of changes to the editor
+// state in such a way that each change won't have to update the
+// cursor and display (which would be awkward, slow, and
+// error-prone). Instead, display updates are batched and then all
+// combined and executed at once.
+
+var nextOpId = 0;
+// Start a new operation.
+function startOperation(cm) {
+ cm.curOp = {
+ cm: cm,
+ viewChanged: false, // Flag that indicates that lines might need to be redrawn
+ startHeight: cm.doc.height, // Used to detect need to update scrollbar
+ forceUpdate: false, // Used to force a redraw
+ updateInput: null, // Whether to reset the input textarea
+ typing: false, // Whether this reset should be careful to leave existing text (for compositing)
+ changeObjs: null, // Accumulated changes, for firing change events
+ cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on
+ cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already
+ selectionChanged: false, // Whether the selection needs to be redrawn
+ updateMaxLine: false, // Set when the widest line needs to be determined anew
+ scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet
+ scrollToPos: null, // Used to scroll to a specific position
+ focus: false,
+ id: ++nextOpId // Unique ID
+ };
+ pushOperation(cm.curOp);
+}
+
+// Finish an operation, updating the display and signalling delayed events
+function endOperation(cm) {
+ var op = cm.curOp;
+ finishOperation(op, function (group) {
+ for (var i = 0; i < group.ops.length; i++)
+ { group.ops[i].cm.curOp = null; }
+ endOperations(group);
+ });
+}
+
+// The DOM updates done when an operation finishes are batched so
+// that the minimum number of relayouts are required.
+function endOperations(group) {
+ var ops = group.ops;
+ for (var i = 0; i < ops.length; i++) // Read DOM
+ { endOperation_R1(ops[i]); }
+ for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)
+ { endOperation_W1(ops[i$1]); }
+ for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM
+ { endOperation_R2(ops[i$2]); }
+ for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)
+ { endOperation_W2(ops[i$3]); }
+ for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM
+ { endOperation_finish(ops[i$4]); }
+}
+
+function endOperation_R1(op) {
+ var cm = op.cm, display = cm.display;
+ maybeClipScrollbars(cm);
+ if (op.updateMaxLine) { findMaxLine(cm); }
+
+ op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||
+ op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||
+ op.scrollToPos.to.line >= display.viewTo) ||
+ display.maxLineChanged && cm.options.lineWrapping;
+ op.update = op.mustUpdate &&
+ new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);
+}
+
+function endOperation_W1(op) {
+ op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);
+}
+
+function endOperation_R2(op) {
+ var cm = op.cm, display = cm.display;
+ if (op.updatedDisplay) { updateHeightsInViewport(cm); }
+
+ op.barMeasure = measureForScrollbars(cm);
+
+ // If the max line changed since it was last measured, measure it,
+ // and ensure the document's width matches it.
+ // updateDisplay_W2 will use these properties to do the actual resizing
+ if (display.maxLineChanged && !cm.options.lineWrapping) {
+ op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;
+ cm.display.sizerWidth = op.adjustWidthTo;
+ op.barMeasure.scrollWidth =
+ Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);
+ op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));
+ }
+
+ if (op.updatedDisplay || op.selectionChanged)
+ { op.preparedSelection = display.input.prepareSelection(); }
+}
+
+function endOperation_W2(op) {
+ var cm = op.cm;
+
+ if (op.adjustWidthTo != null) {
+ cm.display.sizer.style.minWidth = op.adjustWidthTo + "px";
+ if (op.maxScrollLeft < cm.doc.scrollLeft)
+ { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }
+ cm.display.maxLineChanged = false;
+ }
+
+ var takeFocus = op.focus && op.focus == activeElt();
+ if (op.preparedSelection)
+ { cm.display.input.showSelection(op.preparedSelection, takeFocus); }
+ if (op.updatedDisplay || op.startHeight != cm.doc.height)
+ { updateScrollbars(cm, op.barMeasure); }
+ if (op.updatedDisplay)
+ { setDocumentHeight(cm, op.barMeasure); }
+
+ if (op.selectionChanged) { restartBlink(cm); }
+
+ if (cm.state.focused && op.updateInput)
+ { cm.display.input.reset(op.typing); }
+ if (takeFocus) { ensureFocus(op.cm); }
+}
+
+function endOperation_finish(op) {
+ var cm = op.cm, display = cm.display, doc = cm.doc;
+
+ if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }
+
+ // Abort mouse wheel delta measurement, when scrolling explicitly
+ if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))
+ { display.wheelStartX = display.wheelStartY = null; }
+
+ // Propagate the scroll position to the actual DOM scroller
+ if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }
+
+ if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }
+ // If we need to scroll a specific position into view, do so.
+ if (op.scrollToPos) {
+ var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
+ clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);
+ maybeScrollWindow(cm, rect);
+ }
+
+ // Fire events for markers that are hidden/unidden by editing or
+ // undoing
+ var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
+ if (hidden) { for (var i = 0; i < hidden.length; ++i)
+ { if (!hidden[i].lines.length) { signal(hidden[i], "hide"); } } }
+ if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)
+ { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide"); } } }
+
+ if (display.wrapper.offsetHeight)
+ { doc.scrollTop = cm.display.scroller.scrollTop; }
+
+ // Fire change events, and delayed event handlers
+ if (op.changeObjs)
+ { signal(cm, "changes", cm, op.changeObjs); }
+ if (op.update)
+ { op.update.finish(); }
+}
+
+// Run the given function in an operation
+function runInOp(cm, f) {
+ if (cm.curOp) { return f() }
+ startOperation(cm);
+ try { return f() }
+ finally { endOperation(cm); }
+}
+// Wraps a function in an operation. Returns the wrapped function.
+function operation(cm, f) {
+ return function() {
+ if (cm.curOp) { return f.apply(cm, arguments) }
+ startOperation(cm);
+ try { return f.apply(cm, arguments) }
+ finally { endOperation(cm); }
+ }
+}
+// Used to add methods to editor and doc instances, wrapping them in
+// operations.
+function methodOp(f) {
+ return function() {
+ if (this.curOp) { return f.apply(this, arguments) }
+ startOperation(this);
+ try { return f.apply(this, arguments) }
+ finally { endOperation(this); }
+ }
+}
+function docMethodOp(f) {
+ return function() {
+ var cm = this.cm;
+ if (!cm || cm.curOp) { return f.apply(this, arguments) }
+ startOperation(cm);
+ try { return f.apply(this, arguments) }
+ finally { endOperation(cm); }
+ }
+}
+
+// Updates the display.view data structure for a given change to the
+// document. From and to are in pre-change coordinates. Lendiff is
+// the amount of lines added or subtracted by the change. This is
+// used for changes that span multiple lines, or change the way
+// lines are divided into visual lines. regLineChange (below)
+// registers single-line changes.
+function regChange(cm, from, to, lendiff) {
+ if (from == null) { from = cm.doc.first; }
+ if (to == null) { to = cm.doc.first + cm.doc.size; }
+ if (!lendiff) { lendiff = 0; }
+
+ var display = cm.display;
+ if (lendiff && to < display.viewTo &&
+ (display.updateLineNumbers == null || display.updateLineNumbers > from))
+ { display.updateLineNumbers = from; }
+
+ cm.curOp.viewChanged = true;
+
+ if (from >= display.viewTo) { // Change after
+ if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)
+ { resetView(cm); }
+ } else if (to <= display.viewFrom) { // Change before
+ if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
+ resetView(cm);
+ } else {
+ display.viewFrom += lendiff;
+ display.viewTo += lendiff;
+ }
+ } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap
+ resetView(cm);
+ } else if (from <= display.viewFrom) { // Top overlap
+ var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
+ if (cut) {
+ display.view = display.view.slice(cut.index);
+ display.viewFrom = cut.lineN;
+ display.viewTo += lendiff;
+ } else {
+ resetView(cm);
+ }
+ } else if (to >= display.viewTo) { // Bottom overlap
+ var cut$1 = viewCuttingPoint(cm, from, from, -1);
+ if (cut$1) {
+ display.view = display.view.slice(0, cut$1.index);
+ display.viewTo = cut$1.lineN;
+ } else {
+ resetView(cm);
+ }
+ } else { // Gap in the middle
+ var cutTop = viewCuttingPoint(cm, from, from, -1);
+ var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
+ if (cutTop && cutBot) {
+ display.view = display.view.slice(0, cutTop.index)
+ .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))
+ .concat(display.view.slice(cutBot.index));
+ display.viewTo += lendiff;
+ } else {
+ resetView(cm);
+ }
+ }
+
+ var ext = display.externalMeasured;
+ if (ext) {
+ if (to < ext.lineN)
+ { ext.lineN += lendiff; }
+ else if (from < ext.lineN + ext.size)
+ { display.externalMeasured = null; }
+ }
+}
+
+// Register a change to a single line. Type must be one of "text",
+// "gutter", "class", "widget"
+function regLineChange(cm, line, type) {
+ cm.curOp.viewChanged = true;
+ var display = cm.display, ext = cm.display.externalMeasured;
+ if (ext && line >= ext.lineN && line < ext.lineN + ext.size)
+ { display.externalMeasured = null; }
+
+ if (line < display.viewFrom || line >= display.viewTo) { return }
+ var lineView = display.view[findViewIndex(cm, line)];
+ if (lineView.node == null) { return }
+ var arr = lineView.changes || (lineView.changes = []);
+ if (indexOf(arr, type) == -1) { arr.push(type); }
+}
+
+// Clear the view.
+function resetView(cm) {
+ cm.display.viewFrom = cm.display.viewTo = cm.doc.first;
+ cm.display.view = [];
+ cm.display.viewOffset = 0;
+}
+
+function viewCuttingPoint(cm, oldN, newN, dir) {
+ var index = findViewIndex(cm, oldN), diff, view = cm.display.view;
+ if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)
+ { return {index: index, lineN: newN} }
+ var n = cm.display.viewFrom;
+ for (var i = 0; i < index; i++)
+ { n += view[i].size; }
+ if (n != oldN) {
+ if (dir > 0) {
+ if (index == view.length - 1) { return null }
+ diff = (n + view[index].size) - oldN;
+ index++;
+ } else {
+ diff = n - oldN;
+ }
+ oldN += diff; newN += diff;
+ }
+ while (visualLineNo(cm.doc, newN) != newN) {
+ if (index == (dir < 0 ? 0 : view.length - 1)) { return null }
+ newN += dir * view[index - (dir < 0 ? 1 : 0)].size;
+ index += dir;
+ }
+ return {index: index, lineN: newN}
+}
+
+// Force the view to cover a given range, adding empty view element
+// or clipping off existing ones as needed.
+function adjustView(cm, from, to) {
+ var display = cm.display, view = display.view;
+ if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
+ display.view = buildViewArray(cm, from, to);
+ display.viewFrom = from;
+ } else {
+ if (display.viewFrom > from)
+ { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }
+ else if (display.viewFrom < from)
+ { display.view = display.view.slice(findViewIndex(cm, from)); }
+ display.viewFrom = from;
+ if (display.viewTo < to)
+ { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }
+ else if (display.viewTo > to)
+ { display.view = display.view.slice(0, findViewIndex(cm, to)); }
+ }
+ display.viewTo = to;
+}
+
+// Count the number of lines in the view whose DOM representation is
+// out of date (or nonexistent).
+function countDirtyView(cm) {
+ var view = cm.display.view, dirty = 0;
+ for (var i = 0; i < view.length; i++) {
+ var lineView = view[i];
+ if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }
+ }
+ return dirty
+}
+
+// HIGHLIGHT WORKER
+
+function startWorker(cm, time) {
+ if (cm.doc.highlightFrontier < cm.display.viewTo)
+ { cm.state.highlight.set(time, bind(highlightWorker, cm)); }
+}
+
+function highlightWorker(cm) {
+ var doc = cm.doc;
+ if (doc.highlightFrontier >= cm.display.viewTo) { return }
+ var end = +new Date + cm.options.workTime;
+ var context = getContextBefore(cm, doc.highlightFrontier);
+ var changedLines = [];
+
+ doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
+ if (context.line >= cm.display.viewFrom) { // Visible
+ var oldStyles = line.styles;
+ var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;
+ var highlighted = highlightLine(cm, line, context, true);
+ if (resetState) { context.state = resetState; }
+ line.styles = highlighted.styles;
+ var oldCls = line.styleClasses, newCls = highlighted.classes;
+ if (newCls) { line.styleClasses = newCls; }
+ else if (oldCls) { line.styleClasses = null; }
+ var ischange = !oldStyles || oldStyles.length != line.styles.length ||
+ oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
+ for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }
+ if (ischange) { changedLines.push(context.line); }
+ line.stateAfter = context.save();
+ context.nextLine();
+ } else {
+ if (line.text.length <= cm.options.maxHighlightLength)
+ { processLine(cm, line.text, context); }
+ line.stateAfter = context.line % 5 == 0 ? context.save() : null;
+ context.nextLine();
+ }
+ if (+new Date > end) {
+ startWorker(cm, cm.options.workDelay);
+ return true
+ }
+ });
+ doc.highlightFrontier = context.line;
+ doc.modeFrontier = Math.max(doc.modeFrontier, context.line);
+ if (changedLines.length) { runInOp(cm, function () {
+ for (var i = 0; i < changedLines.length; i++)
+ { regLineChange(cm, changedLines[i], "text"); }
+ }); }
+}
+
+// DISPLAY DRAWING
+
+var DisplayUpdate = function(cm, viewport, force) {
+ var display = cm.display;
+
+ this.viewport = viewport;
+ // Store some values that we'll need later (but don't want to force a relayout for)
+ this.visible = visibleLines(display, cm.doc, viewport);
+ this.editorIsHidden = !display.wrapper.offsetWidth;
+ this.wrapperHeight = display.wrapper.clientHeight;
+ this.wrapperWidth = display.wrapper.clientWidth;
+ this.oldDisplayWidth = displayWidth(cm);
+ this.force = force;
+ this.dims = getDimensions(cm);
+ this.events = [];
+};
+
+DisplayUpdate.prototype.signal = function (emitter, type) {
+ if (hasHandler(emitter, type))
+ { this.events.push(arguments); }
+};
+DisplayUpdate.prototype.finish = function () {
+ var this$1 = this;
+
+ for (var i = 0; i < this.events.length; i++)
+ { signal.apply(null, this$1.events[i]); }
+};
+
+function maybeClipScrollbars(cm) {
+ var display = cm.display;
+ if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
+ display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;
+ display.heightForcer.style.height = scrollGap(cm) + "px";
+ display.sizer.style.marginBottom = -display.nativeBarWidth + "px";
+ display.sizer.style.borderRightWidth = scrollGap(cm) + "px";
+ display.scrollbarsClipped = true;
+ }
+}
+
+function selectionSnapshot(cm) {
+ if (cm.hasFocus()) { return null }
+ var active = activeElt();
+ if (!active || !contains(cm.display.lineDiv, active)) { return null }
+ var result = {activeElt: active};
+ if (window.getSelection) {
+ var sel = window.getSelection();
+ if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {
+ result.anchorNode = sel.anchorNode;
+ result.anchorOffset = sel.anchorOffset;
+ result.focusNode = sel.focusNode;
+ result.focusOffset = sel.focusOffset;
+ }
+ }
+ return result
+}
+
+function restoreSelection(snapshot) {
+ if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }
+ snapshot.activeElt.focus();
+ if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {
+ var sel = window.getSelection(), range$$1 = document.createRange();
+ range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);
+ range$$1.collapse(false);
+ sel.removeAllRanges();
+ sel.addRange(range$$1);
+ sel.extend(snapshot.focusNode, snapshot.focusOffset);
+ }
+}
+
+// Does the actual updating of the line display. Bails out
+// (returning false) when there is nothing to be done and forced is
+// false.
+function updateDisplayIfNeeded(cm, update) {
+ var display = cm.display, doc = cm.doc;
+
+ if (update.editorIsHidden) {
+ resetView(cm);
+ return false
+ }
+
+ // Bail out if the visible area is already rendered and nothing changed.
+ if (!update.force &&
+ update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
+ display.renderedView == display.view && countDirtyView(cm) == 0)
+ { return false }
+
+ if (maybeUpdateLineNumberWidth(cm)) {
+ resetView(cm);
+ update.dims = getDimensions(cm);
+ }
+
+ // Compute a suitable new viewport (from & to)
+ var end = doc.first + doc.size;
+ var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);
+ var to = Math.min(end, update.visible.to + cm.options.viewportMargin);
+ if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }
+ if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }
+ if (sawCollapsedSpans) {
+ from = visualLineNo(cm.doc, from);
+ to = visualLineEndNo(cm.doc, to);
+ }
+
+ var different = from != display.viewFrom || to != display.viewTo ||
+ display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;
+ adjustView(cm, from, to);
+
+ display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
+ // Position the mover div to align with the current scroll position
+ cm.display.mover.style.top = display.viewOffset + "px";
+
+ var toUpdate = countDirtyView(cm);
+ if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&
+ (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))
+ { return false }
+
+ // For big changes, we hide the enclosing element during the
+ // update, since that speeds up the operations on most browsers.
+ var selSnapshot = selectionSnapshot(cm);
+ if (toUpdate > 4) { display.lineDiv.style.display = "none"; }
+ patchDisplay(cm, display.updateLineNumbers, update.dims);
+ if (toUpdate > 4) { display.lineDiv.style.display = ""; }
+ display.renderedView = display.view;
+ // There might have been a widget with a focused element that got
+ // hidden or updated, if so re-focus it.
+ restoreSelection(selSnapshot);
+
+ // Prevent selection and cursors from interfering with the scroll
+ // width and height.
+ removeChildren(display.cursorDiv);
+ removeChildren(display.selectionDiv);
+ display.gutters.style.height = display.sizer.style.minHeight = 0;
+
+ if (different) {
+ display.lastWrapHeight = update.wrapperHeight;
+ display.lastWrapWidth = update.wrapperWidth;
+ startWorker(cm, 400);
+ }
+
+ display.updateLineNumbers = null;
+
+ return true
+}
+
+function postUpdateDisplay(cm, update) {
+ var viewport = update.viewport;
+
+ for (var first = true;; first = false) {
+ if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
+ // Clip forced viewport to actual scrollable area.
+ if (viewport && viewport.top != null)
+ { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }
+ // Updated line heights might result in the drawn area not
+ // actually covering the viewport. Keep looping until it does.
+ update.visible = visibleLines(cm.display, cm.doc, viewport);
+ if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)
+ { break }
+ }
+ if (!updateDisplayIfNeeded(cm, update)) { break }
+ updateHeightsInViewport(cm);
+ var barMeasure = measureForScrollbars(cm);
+ updateSelection(cm);
+ updateScrollbars(cm, barMeasure);
+ setDocumentHeight(cm, barMeasure);
+ update.force = false;
+ }
+
+ update.signal(cm, "update", cm);
+ if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
+ update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
+ cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;
+ }
+}
+
+function updateDisplaySimple(cm, viewport) {
+ var update = new DisplayUpdate(cm, viewport);
+ if (updateDisplayIfNeeded(cm, update)) {
+ updateHeightsInViewport(cm);
+ postUpdateDisplay(cm, update);
+ var barMeasure = measureForScrollbars(cm);
+ updateSelection(cm);
+ updateScrollbars(cm, barMeasure);
+ setDocumentHeight(cm, barMeasure);
+ update.finish();
+ }
+}
+
+// Sync the actual display DOM structure with display.view, removing
+// nodes for lines that are no longer in view, and creating the ones
+// that are not there yet, and updating the ones that are out of
+// date.
+function patchDisplay(cm, updateNumbersFrom, dims) {
+ var display = cm.display, lineNumbers = cm.options.lineNumbers;
+ var container = display.lineDiv, cur = container.firstChild;
+
+ function rm(node) {
+ var next = node.nextSibling;
+ // Works around a throw-scroll bug in OS X Webkit
+ if (webkit && mac && cm.display.currentWheelTarget == node)
+ { node.style.display = "none"; }
+ else
+ { node.parentNode.removeChild(node); }
+ return next
+ }
+
+ var view = display.view, lineN = display.viewFrom;
+ // Loop over the elements in the view, syncing cur (the DOM nodes
+ // in display.lineDiv) with the view as we go.
+ for (var i = 0; i < view.length; i++) {
+ var lineView = view[i];
+ if (lineView.hidden) {
+ } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet
+ var node = buildLineElement(cm, lineView, lineN, dims);
+ container.insertBefore(node, cur);
+ } else { // Already drawn
+ while (cur != lineView.node) { cur = rm(cur); }
+ var updateNumber = lineNumbers && updateNumbersFrom != null &&
+ updateNumbersFrom <= lineN && lineView.lineNumber;
+ if (lineView.changes) {
+ if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false; }
+ updateLineForChanges(cm, lineView, lineN, dims);
+ }
+ if (updateNumber) {
+ removeChildren(lineView.lineNumber);
+ lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
+ }
+ cur = lineView.node.nextSibling;
+ }
+ lineN += lineView.size;
+ }
+ while (cur) { cur = rm(cur); }
+}
+
+function updateGutterSpace(cm) {
+ var width = cm.display.gutters.offsetWidth;
+ cm.display.sizer.style.marginLeft = width + "px";
+}
+
+function setDocumentHeight(cm, measure) {
+ cm.display.sizer.style.minHeight = measure.docHeight + "px";
+ cm.display.heightForcer.style.top = measure.docHeight + "px";
+ cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px";
+}
+
+// Rebuild the gutter elements, ensure the margin to the left of the
+// code matches their width.
+function updateGutters(cm) {
+ var gutters = cm.display.gutters, specs = cm.options.gutters;
+ removeChildren(gutters);
+ var i = 0;
+ for (; i < specs.length; ++i) {
+ var gutterClass = specs[i];
+ var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass));
+ if (gutterClass == "CodeMirror-linenumbers") {
+ cm.display.lineGutter = gElt;
+ gElt.style.width = (cm.display.lineNumWidth || 1) + "px";
+ }
+ }
+ gutters.style.display = i ? "" : "none";
+ updateGutterSpace(cm);
+}
+
+// Make sure the gutters options contains the element
+// "CodeMirror-linenumbers" when the lineNumbers option is true.
+function setGuttersForLineNumbers(options) {
+ var found = indexOf(options.gutters, "CodeMirror-linenumbers");
+ if (found == -1 && options.lineNumbers) {
+ options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]);
+ } else if (found > -1 && !options.lineNumbers) {
+ options.gutters = options.gutters.slice(0);
+ options.gutters.splice(found, 1);
+ }
+}
+
+// Since the delta values reported on mouse wheel events are
+// unstandardized between browsers and even browser versions, and
+// generally horribly unpredictable, this code starts by measuring
+// the scroll effect that the first few mouse wheel events have,
+// and, from that, detects the way it can convert deltas to pixel
+// offsets afterwards.
+//
+// The reason we want to know the amount a wheel event will scroll
+// is that it gives us a chance to update the display before the
+// actual scrolling happens, reducing flickering.
+
+var wheelSamples = 0;
+var wheelPixelsPerUnit = null;
+// Fill in a browser-detected starting value on browsers where we
+// know one. These don't have to be accurate -- the result of them
+// being wrong would just be a slight flicker on the first wheel
+// scroll (if it is large enough).
+if (ie) { wheelPixelsPerUnit = -.53; }
+else if (gecko) { wheelPixelsPerUnit = 15; }
+else if (chrome) { wheelPixelsPerUnit = -.7; }
+else if (safari) { wheelPixelsPerUnit = -1/3; }
+
+function wheelEventDelta(e) {
+ var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
+ if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }
+ if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }
+ else if (dy == null) { dy = e.wheelDelta; }
+ return {x: dx, y: dy}
+}
+function wheelEventPixels(e) {
+ var delta = wheelEventDelta(e);
+ delta.x *= wheelPixelsPerUnit;
+ delta.y *= wheelPixelsPerUnit;
+ return delta
+}
+
+function onScrollWheel(cm, e) {
+ var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;
+
+ var display = cm.display, scroll = display.scroller;
+ // Quit if there's nothing to scroll here
+ var canScrollX = scroll.scrollWidth > scroll.clientWidth;
+ var canScrollY = scroll.scrollHeight > scroll.clientHeight;
+ if (!(dx && canScrollX || dy && canScrollY)) { return }
+
+ // Webkit browsers on OS X abort momentum scrolls when the target
+ // of the scroll event is removed from the scrollable element.
+ // This hack (see related code in patchDisplay) makes sure the
+ // element is kept around.
+ if (dy && mac && webkit) {
+ outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
+ for (var i = 0; i < view.length; i++) {
+ if (view[i].node == cur) {
+ cm.display.currentWheelTarget = cur;
+ break outer
+ }
+ }
+ }
+ }
+
+ // On some browsers, horizontal scrolling will cause redraws to
+ // happen before the gutter has been realigned, causing it to
+ // wriggle around in a most unseemly way. When we have an
+ // estimated pixels/delta value, we just handle horizontal
+ // scrolling entirely here. It'll be slightly off from native, but
+ // better than glitching out.
+ if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {
+ if (dy && canScrollY)
+ { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }
+ setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));
+ // Only prevent default scrolling if vertical scrolling is
+ // actually possible. Otherwise, it causes vertical scroll
+ // jitter on OSX trackpads when deltaX is small and deltaY
+ // is large (issue #3579)
+ if (!dy || (dy && canScrollY))
+ { e_preventDefault(e); }
+ display.wheelStartX = null; // Abort measurement, if in progress
+ return
+ }
+
+ // 'Project' the visible viewport to cover the area that is being
+ // scrolled into view (if we know enough to estimate it).
+ if (dy && wheelPixelsPerUnit != null) {
+ var pixels = dy * wheelPixelsPerUnit;
+ var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
+ if (pixels < 0) { top = Math.max(0, top + pixels - 50); }
+ else { bot = Math.min(cm.doc.height, bot + pixels + 50); }
+ updateDisplaySimple(cm, {top: top, bottom: bot});
+ }
+
+ if (wheelSamples < 20) {
+ if (display.wheelStartX == null) {
+ display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;
+ display.wheelDX = dx; display.wheelDY = dy;
+ setTimeout(function () {
+ if (display.wheelStartX == null) { return }
+ var movedX = scroll.scrollLeft - display.wheelStartX;
+ var movedY = scroll.scrollTop - display.wheelStartY;
+ var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||
+ (movedX && display.wheelDX && movedX / display.wheelDX);
+ display.wheelStartX = display.wheelStartY = null;
+ if (!sample) { return }
+ wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
+ ++wheelSamples;
+ }, 200);
+ } else {
+ display.wheelDX += dx; display.wheelDY += dy;
+ }
+ }
+}
+
+// Selection objects are immutable. A new one is created every time
+// the selection changes. A selection is one or more non-overlapping
+// (and non-touching) ranges, sorted, and an integer that indicates
+// which one is the primary selection (the one that's scrolled into
+// view, that getCursor returns, etc).
+var Selection = function(ranges, primIndex) {
+ this.ranges = ranges;
+ this.primIndex = primIndex;
+};
+
+Selection.prototype.primary = function () { return this.ranges[this.primIndex] };
+
+Selection.prototype.equals = function (other) {
+ var this$1 = this;
+
+ if (other == this) { return true }
+ if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }
+ for (var i = 0; i < this.ranges.length; i++) {
+ var here = this$1.ranges[i], there = other.ranges[i];
+ if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }
+ }
+ return true
+};
+
+Selection.prototype.deepCopy = function () {
+ var this$1 = this;
+
+ var out = [];
+ for (var i = 0; i < this.ranges.length; i++)
+ { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }
+ return new Selection(out, this.primIndex)
+};
+
+Selection.prototype.somethingSelected = function () {
+ var this$1 = this;
+
+ for (var i = 0; i < this.ranges.length; i++)
+ { if (!this$1.ranges[i].empty()) { return true } }
+ return false
+};
+
+Selection.prototype.contains = function (pos, end) {
+ var this$1 = this;
+
+ if (!end) { end = pos; }
+ for (var i = 0; i < this.ranges.length; i++) {
+ var range = this$1.ranges[i];
+ if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)
+ { return i }
+ }
+ return -1
+};
+
+var Range = function(anchor, head) {
+ this.anchor = anchor; this.head = head;
+};
+
+Range.prototype.from = function () { return minPos(this.anchor, this.head) };
+Range.prototype.to = function () { return maxPos(this.anchor, this.head) };
+Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };
+
+// Take an unsorted, potentially overlapping set of ranges, and
+// build a selection out of it. 'Consumes' ranges array (modifying
+// it).
+function normalizeSelection(ranges, primIndex) {
+ var prim = ranges[primIndex];
+ ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });
+ primIndex = indexOf(ranges, prim);
+ for (var i = 1; i < ranges.length; i++) {
+ var cur = ranges[i], prev = ranges[i - 1];
+ if (cmp(prev.to(), cur.from()) >= 0) {
+ var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
+ var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
+ if (i <= primIndex) { --primIndex; }
+ ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
+ }
+ }
+ return new Selection(ranges, primIndex)
+}
+
+function simpleSelection(anchor, head) {
+ return new Selection([new Range(anchor, head || anchor)], 0)
+}
+
+// Compute the position of the end of a change (its 'to' property
+// refers to the pre-change end).
+function changeEnd(change) {
+ if (!change.text) { return change.to }
+ return Pos(change.from.line + change.text.length - 1,
+ lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))
+}
+
+// Adjust a position to refer to the post-change position of the
+// same text, or the end of the change if the change covers it.
+function adjustForChange(pos, change) {
+ if (cmp(pos, change.from) < 0) { return pos }
+ if (cmp(pos, change.to) <= 0) { return changeEnd(change) }
+
+ var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
+ if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }
+ return Pos(line, ch)
+}
+
+function computeSelAfterChange(doc, change) {
+ var out = [];
+ for (var i = 0; i < doc.sel.ranges.length; i++) {
+ var range = doc.sel.ranges[i];
+ out.push(new Range(adjustForChange(range.anchor, change),
+ adjustForChange(range.head, change)));
+ }
+ return normalizeSelection(out, doc.sel.primIndex)
+}
+
+function offsetPos(pos, old, nw) {
+ if (pos.line == old.line)
+ { return Pos(nw.line, pos.ch - old.ch + nw.ch) }
+ else
+ { return Pos(nw.line + (pos.line - old.line), pos.ch) }
+}
+
+// Used by replaceSelections to allow moving the selection to the
+// start or around the replaced test. Hint may be "start" or "around".
+function computeReplacedSel(doc, changes, hint) {
+ var out = [];
+ var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;
+ for (var i = 0; i < changes.length; i++) {
+ var change = changes[i];
+ var from = offsetPos(change.from, oldPrev, newPrev);
+ var to = offsetPos(changeEnd(change), oldPrev, newPrev);
+ oldPrev = change.to;
+ newPrev = to;
+ if (hint == "around") {
+ var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;
+ out[i] = new Range(inv ? to : from, inv ? from : to);
+ } else {
+ out[i] = new Range(from, from);
+ }
+ }
+ return new Selection(out, doc.sel.primIndex)
+}
+
+// Used to get the editor into a consistent state again when options change.
+
+function loadMode(cm) {
+ cm.doc.mode = getMode(cm.options, cm.doc.modeOption);
+ resetModeState(cm);
+}
+
+function resetModeState(cm) {
+ cm.doc.iter(function (line) {
+ if (line.stateAfter) { line.stateAfter = null; }
+ if (line.styles) { line.styles = null; }
+ });
+ cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;
+ startWorker(cm, 100);
+ cm.state.modeGen++;
+ if (cm.curOp) { regChange(cm); }
+}
+
+// DOCUMENT DATA STRUCTURE
+
+// By default, updates that start and end at the beginning of a line
+// are treated specially, in order to make the association of line
+// widgets and marker elements with the text behave more intuitive.
+function isWholeLineUpdate(doc, change) {
+ return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" &&
+ (!doc.cm || doc.cm.options.wholeLineUpdateBefore)
+}
+
+// Perform a change on the document data structure.
+function updateDoc(doc, change, markedSpans, estimateHeight$$1) {
+ function spansFor(n) {return markedSpans ? markedSpans[n] : null}
+ function update(line, text, spans) {
+ updateLine(line, text, spans, estimateHeight$$1);
+ signalLater(line, "change", line, change);
+ }
+ function linesFor(start, end) {
+ var result = [];
+ for (var i = start; i < end; ++i)
+ { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }
+ return result
+ }
+
+ var from = change.from, to = change.to, text = change.text;
+ var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
+ var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
+
+ // Adjust the line structure
+ if (change.full) {
+ doc.insert(0, linesFor(0, text.length));
+ doc.remove(text.length, doc.size - text.length);
+ } else if (isWholeLineUpdate(doc, change)) {
+ // This is a whole-line replace. Treated specially to make
+ // sure line objects move the way they are supposed to.
+ var added = linesFor(0, text.length - 1);
+ update(lastLine, lastLine.text, lastSpans);
+ if (nlines) { doc.remove(from.line, nlines); }
+ if (added.length) { doc.insert(from.line, added); }
+ } else if (firstLine == lastLine) {
+ if (text.length == 1) {
+ update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
+ } else {
+ var added$1 = linesFor(1, text.length - 1);
+ added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
+ doc.insert(from.line + 1, added$1);
+ }
+ } else if (text.length == 1) {
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
+ doc.remove(from.line + 1, nlines);
+ } else {
+ update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
+ update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
+ var added$2 = linesFor(1, text.length - 1);
+ if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }
+ doc.insert(from.line + 1, added$2);
+ }
+
+ signalLater(doc, "change", doc, change);
+}
+
+// Call f for all linked documents.
+function linkedDocs(doc, f, sharedHistOnly) {
+ function propagate(doc, skip, sharedHist) {
+ if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {
+ var rel = doc.linked[i];
+ if (rel.doc == skip) { continue }
+ var shared = sharedHist && rel.sharedHist;
+ if (sharedHistOnly && !shared) { continue }
+ f(rel.doc, shared);
+ propagate(rel.doc, doc, shared);
+ } }
+ }
+ propagate(doc, null, true);
+}
+
+// Attach a document to an editor.
+function attachDoc(cm, doc) {
+ if (doc.cm) { throw new Error("This document is already in use.") }
+ cm.doc = doc;
+ doc.cm = cm;
+ estimateLineHeights(cm);
+ loadMode(cm);
+ setDirectionClass(cm);
+ if (!cm.options.lineWrapping) { findMaxLine(cm); }
+ cm.options.mode = doc.modeOption;
+ regChange(cm);
+}
+
+function setDirectionClass(cm) {
+ (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl");
+}
+
+function directionChanged(cm) {
+ runInOp(cm, function () {
+ setDirectionClass(cm);
+ regChange(cm);
+ });
+}
+
+function History(startGen) {
+ // Arrays of change events and selections. Doing something adds an
+ // event to done and clears undo. Undoing moves events from done
+ // to undone, redoing moves them in the other direction.
+ this.done = []; this.undone = [];
+ this.undoDepth = Infinity;
+ // Used to track when changes can be merged into a single undo
+ // event
+ this.lastModTime = this.lastSelTime = 0;
+ this.lastOp = this.lastSelOp = null;
+ this.lastOrigin = this.lastSelOrigin = null;
+ // Used by the isClean() method
+ this.generation = this.maxGeneration = startGen || 1;
+}
+
+// Create a history change event from an updateDoc-style change
+// object.
+function historyChangeFromChange(doc, change) {
+ var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};
+ attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
+ linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);
+ return histChange
+}
+
+// Pop all selection events off the end of a history array. Stop at
+// a change event.
+function clearSelectionEvents(array) {
+ while (array.length) {
+ var last = lst(array);
+ if (last.ranges) { array.pop(); }
+ else { break }
+ }
+}
+
+// Find the top change event in the history. Pop off selection
+// events that are in the way.
+function lastChangeEvent(hist, force) {
+ if (force) {
+ clearSelectionEvents(hist.done);
+ return lst(hist.done)
+ } else if (hist.done.length && !lst(hist.done).ranges) {
+ return lst(hist.done)
+ } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
+ hist.done.pop();
+ return lst(hist.done)
+ }
+}
+
+// Register a change in the history. Merges changes that are within
+// a single operation, or are close together with an origin that
+// allows merging (starting with "+") into a single event.
+function addChangeToHistory(doc, change, selAfter, opId) {
+ var hist = doc.history;
+ hist.undone.length = 0;
+ var time = +new Date, cur;
+ var last;
+
+ if ((hist.lastOp == opId ||
+ hist.lastOrigin == change.origin && change.origin &&
+ ((change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||
+ change.origin.charAt(0) == "*")) &&
+ (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
+ // Merge this change into the last event
+ last = lst(cur.changes);
+ if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
+ // Optimized case for simple insertion -- don't want to add
+ // new changesets for every character typed
+ last.to = changeEnd(change);
+ } else {
+ // Add new sub-event
+ cur.changes.push(historyChangeFromChange(doc, change));
+ }
+ } else {
+ // Can not be merged, start a new event.
+ var before = lst(hist.done);
+ if (!before || !before.ranges)
+ { pushSelectionToHistory(doc.sel, hist.done); }
+ cur = {changes: [historyChangeFromChange(doc, change)],
+ generation: hist.generation};
+ hist.done.push(cur);
+ while (hist.done.length > hist.undoDepth) {
+ hist.done.shift();
+ if (!hist.done[0].ranges) { hist.done.shift(); }
+ }
+ }
+ hist.done.push(selAfter);
+ hist.generation = ++hist.maxGeneration;
+ hist.lastModTime = hist.lastSelTime = time;
+ hist.lastOp = hist.lastSelOp = opId;
+ hist.lastOrigin = hist.lastSelOrigin = change.origin;
+
+ if (!last) { signal(doc, "historyAdded"); }
+}
+
+function selectionEventCanBeMerged(doc, origin, prev, sel) {
+ var ch = origin.charAt(0);
+ return ch == "*" ||
+ ch == "+" &&
+ prev.ranges.length == sel.ranges.length &&
+ prev.somethingSelected() == sel.somethingSelected() &&
+ new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)
+}
+
+// Called whenever the selection changes, sets the new selection as
+// the pending selection in the history, and pushes the old pending
+// selection into the 'done' array when it was significantly
+// different (in number of selected ranges, emptiness, or time).
+function addSelectionToHistory(doc, sel, opId, options) {
+ var hist = doc.history, origin = options && options.origin;
+
+ // A new event is started when the previous origin does not match
+ // the current, or the origins don't allow matching. Origins
+ // starting with * are always merged, those starting with + are
+ // merged when similar and close together in time.
+ if (opId == hist.lastSelOp ||
+ (origin && hist.lastSelOrigin == origin &&
+ (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||
+ selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))
+ { hist.done[hist.done.length - 1] = sel; }
+ else
+ { pushSelectionToHistory(sel, hist.done); }
+
+ hist.lastSelTime = +new Date;
+ hist.lastSelOrigin = origin;
+ hist.lastSelOp = opId;
+ if (options && options.clearRedo !== false)
+ { clearSelectionEvents(hist.undone); }
+}
+
+function pushSelectionToHistory(sel, dest) {
+ var top = lst(dest);
+ if (!(top && top.ranges && top.equals(sel)))
+ { dest.push(sel); }
+}
+
+// Used to store marked span information in the history.
+function attachLocalSpans(doc, change, from, to) {
+ var existing = change["spans_" + doc.id], n = 0;
+ doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
+ if (line.markedSpans)
+ { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans; }
+ ++n;
+ });
+}
+
+// When un/re-doing restores text containing marked spans, those
+// that have been explicitly cleared should not be restored.
+function removeClearedSpans(spans) {
+ if (!spans) { return null }
+ var out;
+ for (var i = 0; i < spans.length; ++i) {
+ if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }
+ else if (out) { out.push(spans[i]); }
+ }
+ return !out ? spans : out.length ? out : null
+}
+
+// Retrieve and filter the old marked spans stored in a change event.
+function getOldSpans(doc, change) {
+ var found = change["spans_" + doc.id];
+ if (!found) { return null }
+ var nw = [];
+ for (var i = 0; i < change.text.length; ++i)
+ { nw.push(removeClearedSpans(found[i])); }
+ return nw
+}
+
+// Used for un/re-doing changes from the history. Combines the
+// result of computing the existing spans with the set of spans that
+// existed in the history (so that deleting around a span and then
+// undoing brings back the span).
+function mergeOldSpans(doc, change) {
+ var old = getOldSpans(doc, change);
+ var stretched = stretchSpansOverChange(doc, change);
+ if (!old) { return stretched }
+ if (!stretched) { return old }
+
+ for (var i = 0; i < old.length; ++i) {
+ var oldCur = old[i], stretchCur = stretched[i];
+ if (oldCur && stretchCur) {
+ spans: for (var j = 0; j < stretchCur.length; ++j) {
+ var span = stretchCur[j];
+ for (var k = 0; k < oldCur.length; ++k)
+ { if (oldCur[k].marker == span.marker) { continue spans } }
+ oldCur.push(span);
+ }
+ } else if (stretchCur) {
+ old[i] = stretchCur;
+ }
+ }
+ return old
+}
+
+// Used both to provide a JSON-safe object in .getHistory, and, when
+// detaching a document, to split the history in two
+function copyHistoryArray(events, newGroup, instantiateSel) {
+ var copy = [];
+ for (var i = 0; i < events.length; ++i) {
+ var event = events[i];
+ if (event.ranges) {
+ copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);
+ continue
+ }
+ var changes = event.changes, newChanges = [];
+ copy.push({changes: newChanges});
+ for (var j = 0; j < changes.length; ++j) {
+ var change = changes[j], m = (void 0);
+ newChanges.push({from: change.from, to: change.to, text: change.text});
+ if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) {
+ if (indexOf(newGroup, Number(m[1])) > -1) {
+ lst(newChanges)[prop] = change[prop];
+ delete change[prop];
+ }
+ } } }
+ }
+ }
+ return copy
+}
+
+// The 'scroll' parameter given to many of these indicated whether
+// the new cursor position should be scrolled into view after
+// modifying the selection.
+
+// If shift is held or the extend flag is set, extends a range to
+// include a given position (and optionally a second position).
+// Otherwise, simply returns the range between the given positions.
+// Used for cursor motion and such.
+function extendRange(range, head, other, extend) {
+ if (extend) {
+ var anchor = range.anchor;
+ if (other) {
+ var posBefore = cmp(head, anchor) < 0;
+ if (posBefore != (cmp(other, anchor) < 0)) {
+ anchor = head;
+ head = other;
+ } else if (posBefore != (cmp(head, other) < 0)) {
+ head = other;
+ }
+ }
+ return new Range(anchor, head)
+ } else {
+ return new Range(other || head, head)
+ }
+}
+
+// Extend the primary selection range, discard the rest.
+function extendSelection(doc, head, other, options, extend) {
+ if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }
+ setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);
+}
+
+// Extend all selections (pos is an array of selections with length
+// equal the number of selections)
+function extendSelections(doc, heads, options) {
+ var out = [];
+ var extend = doc.cm && (doc.cm.display.shift || doc.extend);
+ for (var i = 0; i < doc.sel.ranges.length; i++)
+ { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }
+ var newSel = normalizeSelection(out, doc.sel.primIndex);
+ setSelection(doc, newSel, options);
+}
+
+// Updates a single range in the selection.
+function replaceOneSelection(doc, i, range, options) {
+ var ranges = doc.sel.ranges.slice(0);
+ ranges[i] = range;
+ setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);
+}
+
+// Reset the selection to a single range.
+function setSimpleSelection(doc, anchor, head, options) {
+ setSelection(doc, simpleSelection(anchor, head), options);
+}
+
+// Give beforeSelectionChange handlers a change to influence a
+// selection update.
+function filterSelectionChange(doc, sel, options) {
+ var obj = {
+ ranges: sel.ranges,
+ update: function(ranges) {
+ var this$1 = this;
+
+ this.ranges = [];
+ for (var i = 0; i < ranges.length; i++)
+ { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),
+ clipPos(doc, ranges[i].head)); }
+ },
+ origin: options && options.origin
+ };
+ signal(doc, "beforeSelectionChange", doc, obj);
+ if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj); }
+ if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) }
+ else { return sel }
+}
+
+function setSelectionReplaceHistory(doc, sel, options) {
+ var done = doc.history.done, last = lst(done);
+ if (last && last.ranges) {
+ done[done.length - 1] = sel;
+ setSelectionNoUndo(doc, sel, options);
+ } else {
+ setSelection(doc, sel, options);
+ }
+}
+
+// Set a new selection.
+function setSelection(doc, sel, options) {
+ setSelectionNoUndo(doc, sel, options);
+ addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
+}
+
+function setSelectionNoUndo(doc, sel, options) {
+ if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange"))
+ { sel = filterSelectionChange(doc, sel, options); }
+
+ var bias = options && options.bias ||
+ (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
+ setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
+
+ if (!(options && options.scroll === false) && doc.cm)
+ { ensureCursorVisible(doc.cm); }
+}
+
+function setSelectionInner(doc, sel) {
+ if (sel.equals(doc.sel)) { return }
+
+ doc.sel = sel;
+
+ if (doc.cm) {
+ doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true;
+ signalCursorActivity(doc.cm);
+ }
+ signalLater(doc, "cursorActivity", doc);
+}
+
+// Verify that the selection does not partially select any atomic
+// marked ranges.
+function reCheckSelection(doc) {
+ setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));
+}
+
+// Return a selection that does not partially select any atomic
+// ranges.
+function skipAtomicInSelection(doc, sel, bias, mayClear) {
+ var out;
+ for (var i = 0; i < sel.ranges.length; i++) {
+ var range = sel.ranges[i];
+ var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];
+ var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);
+ var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);
+ if (out || newAnchor != range.anchor || newHead != range.head) {
+ if (!out) { out = sel.ranges.slice(0, i); }
+ out[i] = new Range(newAnchor, newHead);
+ }
+ }
+ return out ? normalizeSelection(out, sel.primIndex) : sel
+}
+
+function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
+ var line = getLine(doc, pos.line);
+ if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {
+ var sp = line.markedSpans[i], m = sp.marker;
+ if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&
+ (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
+ if (mayClear) {
+ signal(m, "beforeCursorEnter");
+ if (m.explicitlyCleared) {
+ if (!line.markedSpans) { break }
+ else {--i; continue}
+ }
+ }
+ if (!m.atomic) { continue }
+
+ if (oldPos) {
+ var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);
+ if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)
+ { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }
+ if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))
+ { return skipAtomicInner(doc, near, pos, dir, mayClear) }
+ }
+
+ var far = m.find(dir < 0 ? -1 : 1);
+ if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)
+ { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }
+ return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null
+ }
+ } }
+ return pos
+}
+
+// Ensure a given position is not inside an atomic range.
+function skipAtomic(doc, pos, oldPos, bias, mayClear) {
+ var dir = bias || 1;
+ var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||
+ (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||
+ skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||
+ (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));
+ if (!found) {
+ doc.cantEdit = true;
+ return Pos(doc.first, 0)
+ }
+ return found
+}
+
+function movePos(doc, pos, dir, line) {
+ if (dir < 0 && pos.ch == 0) {
+ if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }
+ else { return null }
+ } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
+ if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }
+ else { return null }
+ } else {
+ return new Pos(pos.line, pos.ch + dir)
+ }
+}
+
+function selectAll(cm) {
+ cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);
+}
+
+// UPDATING
+
+// Allow "beforeChange" event handlers to influence a change
+function filterChange(doc, change, update) {
+ var obj = {
+ canceled: false,
+ from: change.from,
+ to: change.to,
+ text: change.text,
+ origin: change.origin,
+ cancel: function () { return obj.canceled = true; }
+ };
+ if (update) { obj.update = function (from, to, text, origin) {
+ if (from) { obj.from = clipPos(doc, from); }
+ if (to) { obj.to = clipPos(doc, to); }
+ if (text) { obj.text = text; }
+ if (origin !== undefined) { obj.origin = origin; }
+ }; }
+ signal(doc, "beforeChange", doc, obj);
+ if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj); }
+
+ if (obj.canceled) { return null }
+ return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}
+}
+
+// Apply a change to a document, and add it to the document's
+// history, and propagating it to all linked documents.
+function makeChange(doc, change, ignoreReadOnly) {
+ if (doc.cm) {
+ if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }
+ if (doc.cm.state.suppressEdits) { return }
+ }
+
+ if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
+ change = filterChange(doc, change, true);
+ if (!change) { return }
+ }
+
+ // Possibly split or suppress the update based on the presence
+ // of read-only spans in its range.
+ var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
+ if (split) {
+ for (var i = split.length - 1; i >= 0; --i)
+ { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text, origin: change.origin}); }
+ } else {
+ makeChangeInner(doc, change);
+ }
+}
+
+function makeChangeInner(doc, change) {
+ if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return }
+ var selAfter = computeSelAfterChange(doc, change);
+ addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
+
+ makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
+ var rebased = [];
+
+ linkedDocs(doc, function (doc, sharedHist) {
+ if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+ rebaseHist(doc.history, change);
+ rebased.push(doc.history);
+ }
+ makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
+ });
+}
+
+// Revert a change stored in a document's history.
+function makeChangeFromHistory(doc, type, allowSelectionOnly) {
+ var suppress = doc.cm && doc.cm.state.suppressEdits;
+ if (suppress && !allowSelectionOnly) { return }
+
+ var hist = doc.history, event, selAfter = doc.sel;
+ var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;
+
+ // Verify that there is a useable event (so that ctrl-z won't
+ // needlessly clear selection events)
+ var i = 0;
+ for (; i < source.length; i++) {
+ event = source[i];
+ if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)
+ { break }
+ }
+ if (i == source.length) { return }
+ hist.lastOrigin = hist.lastSelOrigin = null;
+
+ for (;;) {
+ event = source.pop();
+ if (event.ranges) {
+ pushSelectionToHistory(event, dest);
+ if (allowSelectionOnly && !event.equals(doc.sel)) {
+ setSelection(doc, event, {clearRedo: false});
+ return
+ }
+ selAfter = event;
+ } else if (suppress) {
+ source.push(event);
+ return
+ } else { break }
+ }
+
+ // Build up a reverse change object to add to the opposite history
+ // stack (redo when undoing, and vice versa).
+ var antiChanges = [];
+ pushSelectionToHistory(selAfter, dest);
+ dest.push({changes: antiChanges, generation: hist.generation});
+ hist.generation = event.generation || ++hist.maxGeneration;
+
+ var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
+
+ var loop = function ( i ) {
+ var change = event.changes[i];
+ change.origin = type;
+ if (filter && !filterChange(doc, change, false)) {
+ source.length = 0;
+ return {}
+ }
+
+ antiChanges.push(historyChangeFromChange(doc, change));
+
+ var after = i ? computeSelAfterChange(doc, change) : lst(source);
+ makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
+ if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }
+ var rebased = [];
+
+ // Propagate to the linked documents
+ linkedDocs(doc, function (doc, sharedHist) {
+ if (!sharedHist && indexOf(rebased, doc.history) == -1) {
+ rebaseHist(doc.history, change);
+ rebased.push(doc.history);
+ }
+ makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
+ });
+ };
+
+ for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
+ var returned = loop( i$1 );
+
+ if ( returned ) return returned.v;
+ }
+}
+
+// Sub-views need their line numbers shifted when text is added
+// above or below them in the parent document.
+function shiftDoc(doc, distance) {
+ if (distance == 0) { return }
+ doc.first += distance;
+ doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(
+ Pos(range.anchor.line + distance, range.anchor.ch),
+ Pos(range.head.line + distance, range.head.ch)
+ ); }), doc.sel.primIndex);
+ if (doc.cm) {
+ regChange(doc.cm, doc.first, doc.first - distance, distance);
+ for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)
+ { regLineChange(doc.cm, l, "gutter"); }
+ }
+}
+
+// More lower-level change function, handling only a single document
+// (not linked ones).
+function makeChangeSingleDoc(doc, change, selAfter, spans) {
+ if (doc.cm && !doc.cm.curOp)
+ { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }
+
+ if (change.to.line < doc.first) {
+ shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
+ return
+ }
+ if (change.from.line > doc.lastLine()) { return }
+
+ // Clip the change to the size of this doc
+ if (change.from.line < doc.first) {
+ var shift = change.text.length - 1 - (doc.first - change.from.line);
+ shiftDoc(doc, shift);
+ change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),
+ text: [lst(change.text)], origin: change.origin};
+ }
+ var last = doc.lastLine();
+ if (change.to.line > last) {
+ change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),
+ text: [change.text[0]], origin: change.origin};
+ }
+
+ change.removed = getBetween(doc, change.from, change.to);
+
+ if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }
+ if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }
+ else { updateDoc(doc, change, spans); }
+ setSelectionNoUndo(doc, selAfter, sel_dontScroll);
+}
+
+// Handle the interaction of a change to a document with the editor
+// that this document is part of.
+function makeChangeSingleDocInEditor(cm, change, spans) {
+ var doc = cm.doc, display = cm.display, from = change.from, to = change.to;
+
+ var recomputeMaxLength = false, checkWidthStart = from.line;
+ if (!cm.options.lineWrapping) {
+ checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));
+ doc.iter(checkWidthStart, to.line + 1, function (line) {
+ if (line == display.maxLine) {
+ recomputeMaxLength = true;
+ return true
+ }
+ });
+ }
+
+ if (doc.sel.contains(change.from, change.to) > -1)
+ { signalCursorActivity(cm); }
+
+ updateDoc(doc, change, spans, estimateHeight(cm));
+
+ if (!cm.options.lineWrapping) {
+ doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
+ var len = lineLength(line);
+ if (len > display.maxLineLength) {
+ display.maxLine = line;
+ display.maxLineLength = len;
+ display.maxLineChanged = true;
+ recomputeMaxLength = false;
+ }
+ });
+ if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }
+ }
+
+ retreatFrontier(doc, from.line);
+ startWorker(cm, 400);
+
+ var lendiff = change.text.length - (to.line - from.line) - 1;
+ // Remember that these lines changed, for updating the display
+ if (change.full)
+ { regChange(cm); }
+ else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))
+ { regLineChange(cm, from.line, "text"); }
+ else
+ { regChange(cm, from.line, to.line + 1, lendiff); }
+
+ var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change");
+ if (changeHandler || changesHandler) {
+ var obj = {
+ from: from, to: to,
+ text: change.text,
+ removed: change.removed,
+ origin: change.origin
+ };
+ if (changeHandler) { signalLater(cm, "change", cm, obj); }
+ if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }
+ }
+ cm.display.selForContextMenu = null;
+}
+
+function replaceRange(doc, code, from, to, origin) {
+ if (!to) { to = from; }
+ if (cmp(to, from) < 0) { var assign;
+ (assign = [to, from], from = assign[0], to = assign[1]); }
+ if (typeof code == "string") { code = doc.splitLines(code); }
+ makeChange(doc, {from: from, to: to, text: code, origin: origin});
+}
+
+// Rebasing/resetting history to deal with externally-sourced changes
+
+function rebaseHistSelSingle(pos, from, to, diff) {
+ if (to < pos.line) {
+ pos.line += diff;
+ } else if (from < pos.line) {
+ pos.line = from;
+ pos.ch = 0;
+ }
+}
+
+// Tries to rebase an array of history events given a change in the
+// document. If the change touches the same lines as the event, the
+// event, and everything 'behind' it, is discarded. If the change is
+// before the event, the event's positions are updated. Uses a
+// copy-on-write scheme for the positions, to avoid having to
+// reallocate them all on every rebase, but also avoid problems with
+// shared position objects being unsafely updated.
+function rebaseHistArray(array, from, to, diff) {
+ for (var i = 0; i < array.length; ++i) {
+ var sub = array[i], ok = true;
+ if (sub.ranges) {
+ if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }
+ for (var j = 0; j < sub.ranges.length; j++) {
+ rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);
+ rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);
+ }
+ continue
+ }
+ for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
+ var cur = sub.changes[j$1];
+ if (to < cur.from.line) {
+ cur.from = Pos(cur.from.line + diff, cur.from.ch);
+ cur.to = Pos(cur.to.line + diff, cur.to.ch);
+ } else if (from <= cur.to.line) {
+ ok = false;
+ break
+ }
+ }
+ if (!ok) {
+ array.splice(0, i + 1);
+ i = 0;
+ }
+ }
+}
+
+function rebaseHist(hist, change) {
+ var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
+ rebaseHistArray(hist.done, from, to, diff);
+ rebaseHistArray(hist.undone, from, to, diff);
+}
+
+// Utility for applying a change to a line by handle or number,
+// returning the number and optionally registering the line as
+// changed.
+function changeLine(doc, handle, changeType, op) {
+ var no = handle, line = handle;
+ if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)); }
+ else { no = lineNo(handle); }
+ if (no == null) { return null }
+ if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }
+ return line
+}
+
+// The document is represented as a BTree consisting of leaves, with
+// chunk of lines in them, and branches, with up to ten leaves or
+// other branch nodes below them. The top node is always a branch
+// node, and is the document object itself (meaning it has
+// additional methods and properties).
+//
+// All nodes have parent links. The tree is used both to go from
+// line numbers to line objects, and to go from objects to numbers.
+// It also indexes by height, and is used to convert between height
+// and line object, and to find the total height of the document.
+//
+// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html
+
+function LeafChunk(lines) {
+ var this$1 = this;
+
+ this.lines = lines;
+ this.parent = null;
+ var height = 0;
+ for (var i = 0; i < lines.length; ++i) {
+ lines[i].parent = this$1;
+ height += lines[i].height;
+ }
+ this.height = height;
+}
+
+LeafChunk.prototype = {
+ chunkSize: function() { return this.lines.length },
+
+ // Remove the n lines at offset 'at'.
+ removeInner: function(at, n) {
+ var this$1 = this;
+
+ for (var i = at, e = at + n; i < e; ++i) {
+ var line = this$1.lines[i];
+ this$1.height -= line.height;
+ cleanUpLine(line);
+ signalLater(line, "delete");
+ }
+ this.lines.splice(at, n);
+ },
+
+ // Helper used to collapse a small branch into a single leaf.
+ collapse: function(lines) {
+ lines.push.apply(lines, this.lines);
+ },
+
+ // Insert the given array of lines at offset 'at', count them as
+ // having the given height.
+ insertInner: function(at, lines, height) {
+ var this$1 = this;
+
+ this.height += height;
+ this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
+ for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }
+ },
+
+ // Used to iterate over a part of the tree.
+ iterN: function(at, n, op) {
+ var this$1 = this;
+
+ for (var e = at + n; at < e; ++at)
+ { if (op(this$1.lines[at])) { return true } }
+ }
+};
+
+function BranchChunk(children) {
+ var this$1 = this;
+
+ this.children = children;
+ var size = 0, height = 0;
+ for (var i = 0; i < children.length; ++i) {
+ var ch = children[i];
+ size += ch.chunkSize(); height += ch.height;
+ ch.parent = this$1;
+ }
+ this.size = size;
+ this.height = height;
+ this.parent = null;
+}
+
+BranchChunk.prototype = {
+ chunkSize: function() { return this.size },
+
+ removeInner: function(at, n) {
+ var this$1 = this;
+
+ this.size -= n;
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this$1.children[i], sz = child.chunkSize();
+ if (at < sz) {
+ var rm = Math.min(n, sz - at), oldHeight = child.height;
+ child.removeInner(at, rm);
+ this$1.height -= oldHeight - child.height;
+ if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }
+ if ((n -= rm) == 0) { break }
+ at = 0;
+ } else { at -= sz; }
+ }
+ // If the result is smaller than 25 lines, ensure that it is a
+ // single leaf node.
+ if (this.size - n < 25 &&
+ (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
+ var lines = [];
+ this.collapse(lines);
+ this.children = [new LeafChunk(lines)];
+ this.children[0].parent = this;
+ }
+ },
+
+ collapse: function(lines) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }
+ },
+
+ insertInner: function(at, lines, height) {
+ var this$1 = this;
+
+ this.size += lines.length;
+ this.height += height;
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this$1.children[i], sz = child.chunkSize();
+ if (at <= sz) {
+ child.insertInner(at, lines, height);
+ if (child.lines && child.lines.length > 50) {
+ // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.
+ // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.
+ var remaining = child.lines.length % 25 + 25;
+ for (var pos = remaining; pos < child.lines.length;) {
+ var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));
+ child.height -= leaf.height;
+ this$1.children.splice(++i, 0, leaf);
+ leaf.parent = this$1;
+ }
+ child.lines = child.lines.slice(0, remaining);
+ this$1.maybeSpill();
+ }
+ break
+ }
+ at -= sz;
+ }
+ },
+
+ // When a node has grown, check whether it should be split.
+ maybeSpill: function() {
+ if (this.children.length <= 10) { return }
+ var me = this;
+ do {
+ var spilled = me.children.splice(me.children.length - 5, 5);
+ var sibling = new BranchChunk(spilled);
+ if (!me.parent) { // Become the parent node
+ var copy = new BranchChunk(me.children);
+ copy.parent = me;
+ me.children = [copy, sibling];
+ me = copy;
+ } else {
+ me.size -= sibling.size;
+ me.height -= sibling.height;
+ var myIndex = indexOf(me.parent.children, me);
+ me.parent.children.splice(myIndex + 1, 0, sibling);
+ }
+ sibling.parent = me.parent;
+ } while (me.children.length > 10)
+ me.parent.maybeSpill();
+ },
+
+ iterN: function(at, n, op) {
+ var this$1 = this;
+
+ for (var i = 0; i < this.children.length; ++i) {
+ var child = this$1.children[i], sz = child.chunkSize();
+ if (at < sz) {
+ var used = Math.min(n, sz - at);
+ if (child.iterN(at, used, op)) { return true }
+ if ((n -= used) == 0) { break }
+ at = 0;
+ } else { at -= sz; }
+ }
+ }
+};
+
+// Line widgets are block elements displayed above or below a line.
+
+var LineWidget = function(doc, node, options) {
+ var this$1 = this;
+
+ if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))
+ { this$1[opt] = options[opt]; } } }
+ this.doc = doc;
+ this.node = node;
+};
+
+LineWidget.prototype.clear = function () {
+ var this$1 = this;
+
+ var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);
+ if (no == null || !ws) { return }
+ for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }
+ if (!ws.length) { line.widgets = null; }
+ var height = widgetHeight(this);
+ updateLineHeight(line, Math.max(0, line.height - height));
+ if (cm) {
+ runInOp(cm, function () {
+ adjustScrollWhenAboveVisible(cm, line, -height);
+ regLineChange(cm, no, "widget");
+ });
+ signalLater(cm, "lineWidgetCleared", cm, this, no);
+ }
+};
+
+LineWidget.prototype.changed = function () {
+ var this$1 = this;
+
+ var oldH = this.height, cm = this.doc.cm, line = this.line;
+ this.height = null;
+ var diff = widgetHeight(this) - oldH;
+ if (!diff) { return }
+ if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }
+ if (cm) {
+ runInOp(cm, function () {
+ cm.curOp.forceUpdate = true;
+ adjustScrollWhenAboveVisible(cm, line, diff);
+ signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line));
+ });
+ }
+};
+eventMixin(LineWidget);
+
+function adjustScrollWhenAboveVisible(cm, line, diff) {
+ if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))
+ { addToScrollTop(cm, diff); }
+}
+
+function addLineWidget(doc, handle, node, options) {
+ var widget = new LineWidget(doc, node, options);
+ var cm = doc.cm;
+ if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }
+ changeLine(doc, handle, "widget", function (line) {
+ var widgets = line.widgets || (line.widgets = []);
+ if (widget.insertAt == null) { widgets.push(widget); }
+ else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }
+ widget.line = line;
+ if (cm && !lineIsHidden(doc, line)) {
+ var aboveVisible = heightAtLine(line) < doc.scrollTop;
+ updateLineHeight(line, line.height + widgetHeight(widget));
+ if (aboveVisible) { addToScrollTop(cm, widget.height); }
+ cm.curOp.forceUpdate = true;
+ }
+ return true
+ });
+ if (cm) { signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)); }
+ return widget
+}
+
+// TEXTMARKERS
+
+// Created with markText and setBookmark methods. A TextMarker is a
+// handle that can be used to clear or find a marked position in the
+// document. Line objects hold arrays (markedSpans) containing
+// {from, to, marker} object pointing to such marker objects, and
+// indicating that such a marker is present on that line. Multiple
+// lines may point to the same marker when it spans across lines.
+// The spans will have null for their from/to properties when the
+// marker continues beyond the start/end of the line. Markers have
+// links back to the lines they currently touch.
+
+// Collapsed markers have unique ids, in order to be able to order
+// them, which is needed for uniquely determining an outer marker
+// when they overlap (they may nest, but not partially overlap).
+var nextMarkerId = 0;
+
+var TextMarker = function(doc, type) {
+ this.lines = [];
+ this.type = type;
+ this.doc = doc;
+ this.id = ++nextMarkerId;
+};
+
+// Clear the marker.
+TextMarker.prototype.clear = function () {
+ var this$1 = this;
+
+ if (this.explicitlyCleared) { return }
+ var cm = this.doc.cm, withOp = cm && !cm.curOp;
+ if (withOp) { startOperation(cm); }
+ if (hasHandler(this, "clear")) {
+ var found = this.find();
+ if (found) { signalLater(this, "clear", found.from, found.to); }
+ }
+ var min = null, max = null;
+ for (var i = 0; i < this.lines.length; ++i) {
+ var line = this$1.lines[i];
+ var span = getMarkedSpanFor(line.markedSpans, this$1);
+ if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text"); }
+ else if (cm) {
+ if (span.to != null) { max = lineNo(line); }
+ if (span.from != null) { min = lineNo(line); }
+ }
+ line.markedSpans = removeMarkedSpan(line.markedSpans, span);
+ if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)
+ { updateLineHeight(line, textHeight(cm.display)); }
+ }
+ if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
+ var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);
+ if (len > cm.display.maxLineLength) {
+ cm.display.maxLine = visual;
+ cm.display.maxLineLength = len;
+ cm.display.maxLineChanged = true;
+ }
+ } }
+
+ if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }
+ this.lines.length = 0;
+ this.explicitlyCleared = true;
+ if (this.atomic && this.doc.cantEdit) {
+ this.doc.cantEdit = false;
+ if (cm) { reCheckSelection(cm.doc); }
+ }
+ if (cm) { signalLater(cm, "markerCleared", cm, this, min, max); }
+ if (withOp) { endOperation(cm); }
+ if (this.parent) { this.parent.clear(); }
+};
+
+// Find the position of the marker in the document. Returns a {from,
+// to} object by default. Side can be passed to get a specific side
+// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the
+// Pos objects returned contain a line object, rather than a line
+// number (used to prevent looking up the same line twice).
+TextMarker.prototype.find = function (side, lineObj) {
+ var this$1 = this;
+
+ if (side == null && this.type == "bookmark") { side = 1; }
+ var from, to;
+ for (var i = 0; i < this.lines.length; ++i) {
+ var line = this$1.lines[i];
+ var span = getMarkedSpanFor(line.markedSpans, this$1);
+ if (span.from != null) {
+ from = Pos(lineObj ? line : lineNo(line), span.from);
+ if (side == -1) { return from }
+ }
+ if (span.to != null) {
+ to = Pos(lineObj ? line : lineNo(line), span.to);
+ if (side == 1) { return to }
+ }
+ }
+ return from && {from: from, to: to}
+};
+
+// Signals that the marker's widget changed, and surrounding layout
+// should be recomputed.
+TextMarker.prototype.changed = function () {
+ var this$1 = this;
+
+ var pos = this.find(-1, true), widget = this, cm = this.doc.cm;
+ if (!pos || !cm) { return }
+ runInOp(cm, function () {
+ var line = pos.line, lineN = lineNo(pos.line);
+ var view = findViewForLine(cm, lineN);
+ if (view) {
+ clearLineMeasurementCacheFor(view);
+ cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;
+ }
+ cm.curOp.updateMaxLine = true;
+ if (!lineIsHidden(widget.doc, line) && widget.height != null) {
+ var oldHeight = widget.height;
+ widget.height = null;
+ var dHeight = widgetHeight(widget) - oldHeight;
+ if (dHeight)
+ { updateLineHeight(line, line.height + dHeight); }
+ }
+ signalLater(cm, "markerChanged", cm, this$1);
+ });
+};
+
+TextMarker.prototype.attachLine = function (line) {
+ if (!this.lines.length && this.doc.cm) {
+ var op = this.doc.cm.curOp;
+ if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)
+ { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }
+ }
+ this.lines.push(line);
+};
+
+TextMarker.prototype.detachLine = function (line) {
+ this.lines.splice(indexOf(this.lines, line), 1);
+ if (!this.lines.length && this.doc.cm) {
+ var op = this.doc.cm.curOp;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
+ }
+};
+eventMixin(TextMarker);
+
+// Create a marker, wire it up to the right lines, and
+function markText(doc, from, to, options, type) {
+ // Shared markers (across linked documents) are handled separately
+ // (markTextShared will call out to this again, once per
+ // document).
+ if (options && options.shared) { return markTextShared(doc, from, to, options, type) }
+ // Ensure we are in an operation.
+ if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }
+
+ var marker = new TextMarker(doc, type), diff = cmp(from, to);
+ if (options) { copyObj(options, marker, false); }
+ // Don't connect empty markers unless clearWhenEmpty is false
+ if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)
+ { return marker }
+ if (marker.replacedWith) {
+ // Showing up as a widget implies collapsed (widget replaces text)
+ marker.collapsed = true;
+ marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget");
+ if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true"); }
+ if (options.insertLeft) { marker.widgetNode.insertLeft = true; }
+ }
+ if (marker.collapsed) {
+ if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||
+ from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))
+ { throw new Error("Inserting collapsed marker partially overlapping an existing one") }
+ seeCollapsedSpans();
+ }
+
+ if (marker.addToHistory)
+ { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN); }
+
+ var curLine = from.line, cm = doc.cm, updateMaxLine;
+ doc.iter(curLine, to.line + 1, function (line) {
+ if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)
+ { updateMaxLine = true; }
+ if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }
+ addMarkedSpan(line, new MarkedSpan(marker,
+ curLine == from.line ? from.ch : null,
+ curLine == to.line ? to.ch : null));
+ ++curLine;
+ });
+ // lineIsHidden depends on the presence of the spans, so needs a second pass
+ if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {
+ if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }
+ }); }
+
+ if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }); }
+
+ if (marker.readOnly) {
+ seeReadOnlySpans();
+ if (doc.history.done.length || doc.history.undone.length)
+ { doc.clearHistory(); }
+ }
+ if (marker.collapsed) {
+ marker.id = ++nextMarkerId;
+ marker.atomic = true;
+ }
+ if (cm) {
+ // Sync editor state
+ if (updateMaxLine) { cm.curOp.updateMaxLine = true; }
+ if (marker.collapsed)
+ { regChange(cm, from.line, to.line + 1); }
+ else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)
+ { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text"); } }
+ if (marker.atomic) { reCheckSelection(cm.doc); }
+ signalLater(cm, "markerAdded", cm, marker);
+ }
+ return marker
+}
+
+// SHARED TEXTMARKERS
+
+// A shared marker spans multiple linked documents. It is
+// implemented as a meta-marker-object controlling multiple normal
+// markers.
+var SharedTextMarker = function(markers, primary) {
+ var this$1 = this;
+
+ this.markers = markers;
+ this.primary = primary;
+ for (var i = 0; i < markers.length; ++i)
+ { markers[i].parent = this$1; }
+};
+
+SharedTextMarker.prototype.clear = function () {
+ var this$1 = this;
+
+ if (this.explicitlyCleared) { return }
+ this.explicitlyCleared = true;
+ for (var i = 0; i < this.markers.length; ++i)
+ { this$1.markers[i].clear(); }
+ signalLater(this, "clear");
+};
+
+SharedTextMarker.prototype.find = function (side, lineObj) {
+ return this.primary.find(side, lineObj)
+};
+eventMixin(SharedTextMarker);
+
+function markTextShared(doc, from, to, options, type) {
+ options = copyObj(options);
+ options.shared = false;
+ var markers = [markText(doc, from, to, options, type)], primary = markers[0];
+ var widget = options.widgetNode;
+ linkedDocs(doc, function (doc) {
+ if (widget) { options.widgetNode = widget.cloneNode(true); }
+ markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
+ for (var i = 0; i < doc.linked.length; ++i)
+ { if (doc.linked[i].isParent) { return } }
+ primary = lst(markers);
+ });
+ return new SharedTextMarker(markers, primary)
+}
+
+function findSharedMarkers(doc) {
+ return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })
+}
+
+function copySharedMarkers(doc, markers) {
+ for (var i = 0; i < markers.length; i++) {
+ var marker = markers[i], pos = marker.find();
+ var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);
+ if (cmp(mFrom, mTo)) {
+ var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);
+ marker.markers.push(subMark);
+ subMark.parent = marker;
+ }
+ }
+}
+
+function detachSharedMarkers(markers) {
+ var loop = function ( i ) {
+ var marker = markers[i], linked = [marker.primary.doc];
+ linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });
+ for (var j = 0; j < marker.markers.length; j++) {
+ var subMarker = marker.markers[j];
+ if (indexOf(linked, subMarker.doc) == -1) {
+ subMarker.parent = null;
+ marker.markers.splice(j--, 1);
+ }
+ }
+ };
+
+ for (var i = 0; i < markers.length; i++) loop( i );
+}
+
+var nextDocId = 0;
+var Doc = function(text, mode, firstLine, lineSep, direction) {
+ if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }
+ if (firstLine == null) { firstLine = 0; }
+
+ BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
+ this.first = firstLine;
+ this.scrollTop = this.scrollLeft = 0;
+ this.cantEdit = false;
+ this.cleanGeneration = 1;
+ this.modeFrontier = this.highlightFrontier = firstLine;
+ var start = Pos(firstLine, 0);
+ this.sel = simpleSelection(start);
+ this.history = new History(null);
+ this.id = ++nextDocId;
+ this.modeOption = mode;
+ this.lineSep = lineSep;
+ this.direction = (direction == "rtl") ? "rtl" : "ltr";
+ this.extend = false;
+
+ if (typeof text == "string") { text = this.splitLines(text); }
+ updateDoc(this, {from: start, to: start, text: text});
+ setSelection(this, simpleSelection(start), sel_dontScroll);
+};
+
+Doc.prototype = createObj(BranchChunk.prototype, {
+ constructor: Doc,
+ // Iterate over the document. Supports two forms -- with only one
+ // argument, it calls that for each line in the document. With
+ // three, it iterates over the range given by the first two (with
+ // the second being non-inclusive).
+ iter: function(from, to, op) {
+ if (op) { this.iterN(from - this.first, to - from, op); }
+ else { this.iterN(this.first, this.first + this.size, from); }
+ },
+
+ // Non-public interface for adding and removing lines.
+ insert: function(at, lines) {
+ var height = 0;
+ for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }
+ this.insertInner(at - this.first, lines, height);
+ },
+ remove: function(at, n) { this.removeInner(at - this.first, n); },
+
+ // From here, the methods are part of the public interface. Most
+ // are also available from CodeMirror (editor) instances.
+
+ getValue: function(lineSep) {
+ var lines = getLines(this, this.first, this.first + this.size);
+ if (lineSep === false) { return lines }
+ return lines.join(lineSep || this.lineSeparator())
+ },
+ setValue: docMethodOp(function(code) {
+ var top = Pos(this.first, 0), last = this.first + this.size - 1;
+ makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),
+ text: this.splitLines(code), origin: "setValue", full: true}, true);
+ if (this.cm) { scrollToCoords(this.cm, 0, 0); }
+ setSelection(this, simpleSelection(top), sel_dontScroll);
+ }),
+ replaceRange: function(code, from, to, origin) {
+ from = clipPos(this, from);
+ to = to ? clipPos(this, to) : from;
+ replaceRange(this, code, from, to, origin);
+ },
+ getRange: function(from, to, lineSep) {
+ var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
+ if (lineSep === false) { return lines }
+ return lines.join(lineSep || this.lineSeparator())
+ },
+
+ getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},
+
+ getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},
+ getLineNumber: function(line) {return lineNo(line)},
+
+ getLineHandleVisualStart: function(line) {
+ if (typeof line == "number") { line = getLine(this, line); }
+ return visualLine(line)
+ },
+
+ lineCount: function() {return this.size},
+ firstLine: function() {return this.first},
+ lastLine: function() {return this.first + this.size - 1},
+
+ clipPos: function(pos) {return clipPos(this, pos)},
+
+ getCursor: function(start) {
+ var range$$1 = this.sel.primary(), pos;
+ if (start == null || start == "head") { pos = range$$1.head; }
+ else if (start == "anchor") { pos = range$$1.anchor; }
+ else if (start == "end" || start == "to" || start === false) { pos = range$$1.to(); }
+ else { pos = range$$1.from(); }
+ return pos
+ },
+ listSelections: function() { return this.sel.ranges },
+ somethingSelected: function() {return this.sel.somethingSelected()},
+
+ setCursor: docMethodOp(function(line, ch, options) {
+ setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options);
+ }),
+ setSelection: docMethodOp(function(anchor, head, options) {
+ setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);
+ }),
+ extendSelection: docMethodOp(function(head, other, options) {
+ extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);
+ }),
+ extendSelections: docMethodOp(function(heads, options) {
+ extendSelections(this, clipPosArray(this, heads), options);
+ }),
+ extendSelectionsBy: docMethodOp(function(f, options) {
+ var heads = map(this.sel.ranges, f);
+ extendSelections(this, clipPosArray(this, heads), options);
+ }),
+ setSelections: docMethodOp(function(ranges, primary, options) {
+ var this$1 = this;
+
+ if (!ranges.length) { return }
+ var out = [];
+ for (var i = 0; i < ranges.length; i++)
+ { out[i] = new Range(clipPos(this$1, ranges[i].anchor),
+ clipPos(this$1, ranges[i].head)); }
+ if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }
+ setSelection(this, normalizeSelection(out, primary), options);
+ }),
+ addSelection: docMethodOp(function(anchor, head, options) {
+ var ranges = this.sel.ranges.slice(0);
+ ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));
+ setSelection(this, normalizeSelection(ranges, ranges.length - 1), options);
+ }),
+
+ getSelection: function(lineSep) {
+ var this$1 = this;
+
+ var ranges = this.sel.ranges, lines;
+ for (var i = 0; i < ranges.length; i++) {
+ var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());
+ lines = lines ? lines.concat(sel) : sel;
+ }
+ if (lineSep === false) { return lines }
+ else { return lines.join(lineSep || this.lineSeparator()) }
+ },
+ getSelections: function(lineSep) {
+ var this$1 = this;
+
+ var parts = [], ranges = this.sel.ranges;
+ for (var i = 0; i < ranges.length; i++) {
+ var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());
+ if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }
+ parts[i] = sel;
+ }
+ return parts
+ },
+ replaceSelection: function(code, collapse, origin) {
+ var dup = [];
+ for (var i = 0; i < this.sel.ranges.length; i++)
+ { dup[i] = code; }
+ this.replaceSelections(dup, collapse, origin || "+input");
+ },
+ replaceSelections: docMethodOp(function(code, collapse, origin) {
+ var this$1 = this;
+
+ var changes = [], sel = this.sel;
+ for (var i = 0; i < sel.ranges.length; i++) {
+ var range$$1 = sel.ranges[i];
+ changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};
+ }
+ var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse);
+ for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)
+ { makeChange(this$1, changes[i$1]); }
+ if (newSel) { setSelectionReplaceHistory(this, newSel); }
+ else if (this.cm) { ensureCursorVisible(this.cm); }
+ }),
+ undo: docMethodOp(function() {makeChangeFromHistory(this, "undo");}),
+ redo: docMethodOp(function() {makeChangeFromHistory(this, "redo");}),
+ undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true);}),
+ redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true);}),
+
+ setExtending: function(val) {this.extend = val;},
+ getExtending: function() {return this.extend},
+
+ historySize: function() {
+ var hist = this.history, done = 0, undone = 0;
+ for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }
+ for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }
+ return {undo: done, redo: undone}
+ },
+ clearHistory: function() {this.history = new History(this.history.maxGeneration);},
+
+ markClean: function() {
+ this.cleanGeneration = this.changeGeneration(true);
+ },
+ changeGeneration: function(forceSplit) {
+ if (forceSplit)
+ { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }
+ return this.history.generation
+ },
+ isClean: function (gen) {
+ return this.history.generation == (gen || this.cleanGeneration)
+ },
+
+ getHistory: function() {
+ return {done: copyHistoryArray(this.history.done),
+ undone: copyHistoryArray(this.history.undone)}
+ },
+ setHistory: function(histData) {
+ var hist = this.history = new History(this.history.maxGeneration);
+ hist.done = copyHistoryArray(histData.done.slice(0), null, true);
+ hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
+ },
+
+ setGutterMarker: docMethodOp(function(line, gutterID, value) {
+ return changeLine(this, line, "gutter", function (line) {
+ var markers = line.gutterMarkers || (line.gutterMarkers = {});
+ markers[gutterID] = value;
+ if (!value && isEmpty(markers)) { line.gutterMarkers = null; }
+ return true
+ })
+ }),
+
+ clearGutter: docMethodOp(function(gutterID) {
+ var this$1 = this;
+
+ this.iter(function (line) {
+ if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
+ changeLine(this$1, line, "gutter", function () {
+ line.gutterMarkers[gutterID] = null;
+ if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }
+ return true
+ });
+ }
+ });
+ }),
+
+ lineInfo: function(line) {
+ var n;
+ if (typeof line == "number") {
+ if (!isLine(this, line)) { return null }
+ n = line;
+ line = getLine(this, line);
+ if (!line) { return null }
+ } else {
+ n = lineNo(line);
+ if (n == null) { return null }
+ }
+ return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,
+ textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,
+ widgets: line.widgets}
+ },
+
+ addLineClass: docMethodOp(function(handle, where, cls) {
+ return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+ var prop = where == "text" ? "textClass"
+ : where == "background" ? "bgClass"
+ : where == "gutter" ? "gutterClass" : "wrapClass";
+ if (!line[prop]) { line[prop] = cls; }
+ else if (classTest(cls).test(line[prop])) { return false }
+ else { line[prop] += " " + cls; }
+ return true
+ })
+ }),
+ removeLineClass: docMethodOp(function(handle, where, cls) {
+ return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
+ var prop = where == "text" ? "textClass"
+ : where == "background" ? "bgClass"
+ : where == "gutter" ? "gutterClass" : "wrapClass";
+ var cur = line[prop];
+ if (!cur) { return false }
+ else if (cls == null) { line[prop] = null; }
+ else {
+ var found = cur.match(classTest(cls));
+ if (!found) { return false }
+ var end = found.index + found[0].length;
+ line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
+ }
+ return true
+ })
+ }),
+
+ addLineWidget: docMethodOp(function(handle, node, options) {
+ return addLineWidget(this, handle, node, options)
+ }),
+ removeLineWidget: function(widget) { widget.clear(); },
+
+ markText: function(from, to, options) {
+ return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range")
+ },
+ setBookmark: function(pos, options) {
+ var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),
+ insertLeft: options && options.insertLeft,
+ clearWhenEmpty: false, shared: options && options.shared,
+ handleMouseEvents: options && options.handleMouseEvents};
+ pos = clipPos(this, pos);
+ return markText(this, pos, pos, realOpts, "bookmark")
+ },
+ findMarksAt: function(pos) {
+ pos = clipPos(this, pos);
+ var markers = [], spans = getLine(this, pos.line).markedSpans;
+ if (spans) { for (var i = 0; i < spans.length; ++i) {
+ var span = spans[i];
+ if ((span.from == null || span.from <= pos.ch) &&
+ (span.to == null || span.to >= pos.ch))
+ { markers.push(span.marker.parent || span.marker); }
+ } }
+ return markers
+ },
+ findMarks: function(from, to, filter) {
+ from = clipPos(this, from); to = clipPos(this, to);
+ var found = [], lineNo$$1 = from.line;
+ this.iter(from.line, to.line + 1, function (line) {
+ var spans = line.markedSpans;
+ if (spans) { for (var i = 0; i < spans.length; i++) {
+ var span = spans[i];
+ if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||
+ span.from == null && lineNo$$1 != from.line ||
+ span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&
+ (!filter || filter(span.marker)))
+ { found.push(span.marker.parent || span.marker); }
+ } }
+ ++lineNo$$1;
+ });
+ return found
+ },
+ getAllMarks: function() {
+ var markers = [];
+ this.iter(function (line) {
+ var sps = line.markedSpans;
+ if (sps) { for (var i = 0; i < sps.length; ++i)
+ { if (sps[i].from != null) { markers.push(sps[i].marker); } } }
+ });
+ return markers
+ },
+
+ posFromIndex: function(off) {
+ var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;
+ this.iter(function (line) {
+ var sz = line.text.length + sepSize;
+ if (sz > off) { ch = off; return true }
+ off -= sz;
+ ++lineNo$$1;
+ });
+ return clipPos(this, Pos(lineNo$$1, ch))
+ },
+ indexFromPos: function (coords) {
+ coords = clipPos(this, coords);
+ var index = coords.ch;
+ if (coords.line < this.first || coords.ch < 0) { return 0 }
+ var sepSize = this.lineSeparator().length;
+ this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value
+ index += line.text.length + sepSize;
+ });
+ return index
+ },
+
+ copy: function(copyHistory) {
+ var doc = new Doc(getLines(this, this.first, this.first + this.size),
+ this.modeOption, this.first, this.lineSep, this.direction);
+ doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;
+ doc.sel = this.sel;
+ doc.extend = false;
+ if (copyHistory) {
+ doc.history.undoDepth = this.history.undoDepth;
+ doc.setHistory(this.getHistory());
+ }
+ return doc
+ },
+
+ linkedDoc: function(options) {
+ if (!options) { options = {}; }
+ var from = this.first, to = this.first + this.size;
+ if (options.from != null && options.from > from) { from = options.from; }
+ if (options.to != null && options.to < to) { to = options.to; }
+ var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);
+ if (options.sharedHist) { copy.history = this.history
+ ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});
+ copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];
+ copySharedMarkers(copy, findSharedMarkers(this));
+ return copy
+ },
+ unlinkDoc: function(other) {
+ var this$1 = this;
+
+ if (other instanceof CodeMirror$1) { other = other.doc; }
+ if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {
+ var link = this$1.linked[i];
+ if (link.doc != other) { continue }
+ this$1.linked.splice(i, 1);
+ other.unlinkDoc(this$1);
+ detachSharedMarkers(findSharedMarkers(this$1));
+ break
+ } }
+ // If the histories were shared, split them again
+ if (other.history == this.history) {
+ var splitIds = [other.id];
+ linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);
+ other.history = new History(null);
+ other.history.done = copyHistoryArray(this.history.done, splitIds);
+ other.history.undone = copyHistoryArray(this.history.undone, splitIds);
+ }
+ },
+ iterLinkedDocs: function(f) {linkedDocs(this, f);},
+
+ getMode: function() {return this.mode},
+ getEditor: function() {return this.cm},
+
+ splitLines: function(str) {
+ if (this.lineSep) { return str.split(this.lineSep) }
+ return splitLinesAuto(str)
+ },
+ lineSeparator: function() { return this.lineSep || "\n" },
+
+ setDirection: docMethodOp(function (dir) {
+ if (dir != "rtl") { dir = "ltr"; }
+ if (dir == this.direction) { return }
+ this.direction = dir;
+ this.iter(function (line) { return line.order = null; });
+ if (this.cm) { directionChanged(this.cm); }
+ })
+});
+
+// Public alias.
+Doc.prototype.eachLine = Doc.prototype.iter;
+
+// Kludge to work around strange IE behavior where it'll sometimes
+// re-fire a series of drag-related events right after the drop (#1551)
+var lastDrop = 0;
+
+function onDrop(e) {
+ var cm = this;
+ clearDragCursor(cm);
+ if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))
+ { return }
+ e_preventDefault(e);
+ if (ie) { lastDrop = +new Date; }
+ var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
+ if (!pos || cm.isReadOnly()) { return }
+ // Might be a file drop, in which case we simply extract the text
+ // and insert it.
+ if (files && files.length && window.FileReader && window.File) {
+ var n = files.length, text = Array(n), read = 0;
+ var loadFile = function (file, i) {
+ if (cm.options.allowDropFileTypes &&
+ indexOf(cm.options.allowDropFileTypes, file.type) == -1)
+ { return }
+
+ var reader = new FileReader;
+ reader.onload = operation(cm, function () {
+ var content = reader.result;
+ if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = ""; }
+ text[i] = content;
+ if (++read == n) {
+ pos = clipPos(cm.doc, pos);
+ var change = {from: pos, to: pos,
+ text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),
+ origin: "paste"};
+ makeChange(cm.doc, change);
+ setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));
+ }
+ });
+ reader.readAsText(file);
+ };
+ for (var i = 0; i < n; ++i) { loadFile(files[i], i); }
+ } else { // Normal drop
+ // Don't do a replace if the drop happened inside of the selected text.
+ if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
+ cm.state.draggingText(e);
+ // Ensure the editor is re-focused
+ setTimeout(function () { return cm.display.input.focus(); }, 20);
+ return
+ }
+ try {
+ var text$1 = e.dataTransfer.getData("Text");
+ if (text$1) {
+ var selected;
+ if (cm.state.draggingText && !cm.state.draggingText.copy)
+ { selected = cm.listSelections(); }
+ setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));
+ if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)
+ { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag"); } }
+ cm.replaceSelection(text$1, "around", "paste");
+ cm.display.input.focus();
+ }
+ }
+ catch(e){}
+ }
+}
+
+function onDragStart(cm, e) {
+ if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }
+ if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }
+
+ e.dataTransfer.setData("Text", cm.getSelection());
+ e.dataTransfer.effectAllowed = "copyMove";
+
+ // Use dummy image instead of default browsers image.
+ // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.
+ if (e.dataTransfer.setDragImage && !safari) {
+ var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
+ img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
+ if (presto) {
+ img.width = img.height = 1;
+ cm.display.wrapper.appendChild(img);
+ // Force a relayout, or Opera won't use our image for some obscure reason
+ img._top = img.offsetTop;
+ }
+ e.dataTransfer.setDragImage(img, 0, 0);
+ if (presto) { img.parentNode.removeChild(img); }
+ }
+}
+
+function onDragOver(cm, e) {
+ var pos = posFromMouse(cm, e);
+ if (!pos) { return }
+ var frag = document.createDocumentFragment();
+ drawSelectionCursor(cm, pos, frag);
+ if (!cm.display.dragCursor) {
+ cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors");
+ cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);
+ }
+ removeChildrenAndAdd(cm.display.dragCursor, frag);
+}
+
+function clearDragCursor(cm) {
+ if (cm.display.dragCursor) {
+ cm.display.lineSpace.removeChild(cm.display.dragCursor);
+ cm.display.dragCursor = null;
+ }
+}
+
+// These must be handled carefully, because naively registering a
+// handler for each editor will cause the editors to never be
+// garbage collected.
+
+function forEachCodeMirror(f) {
+ if (!document.getElementsByClassName) { return }
+ var byClass = document.getElementsByClassName("CodeMirror");
+ for (var i = 0; i < byClass.length; i++) {
+ var cm = byClass[i].CodeMirror;
+ if (cm) { f(cm); }
+ }
+}
+
+var globalsRegistered = false;
+function ensureGlobalHandlers() {
+ if (globalsRegistered) { return }
+ registerGlobalHandlers();
+ globalsRegistered = true;
+}
+function registerGlobalHandlers() {
+ // When the window resizes, we need to refresh active editors.
+ var resizeTimer;
+ on(window, "resize", function () {
+ if (resizeTimer == null) { resizeTimer = setTimeout(function () {
+ resizeTimer = null;
+ forEachCodeMirror(onResize);
+ }, 100); }
+ });
+ // When the window loses focus, we want to show the editor as blurred
+ on(window, "blur", function () { return forEachCodeMirror(onBlur); });
+}
+// Called when the window resizes
+function onResize(cm) {
+ var d = cm.display;
+ // Might be a text scaling operation, clear size caches.
+ d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
+ d.scrollbarsClipped = false;
+ cm.setSize();
+}
+
+var keyNames = {
+ 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt",
+ 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End",
+ 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert",
+ 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod",
+ 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", 145: "ScrollLock",
+ 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\",
+ 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete",
+ 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
+};
+
+// Number keys
+for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }
+// Alphabetic keys
+for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }
+// Function keys
+for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2; }
+
+var keyMap = {};
+
+keyMap.basic = {
+ "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown",
+ "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown",
+ "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore",
+ "Tab": "defaultTab", "Shift-Tab": "indentAuto",
+ "Enter": "newlineAndIndent", "Insert": "toggleOverwrite",
+ "Esc": "singleSelection"
+};
+// Note that the save and find-related commands aren't defined by
+// default. User code or addons can define them. Unknown commands
+// are simply ignored.
+keyMap.pcDefault = {
+ "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo",
+ "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown",
+ "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd",
+ "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find",
+ "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll",
+ "Ctrl-[": "indentLess", "Ctrl-]": "indentMore",
+ "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection",
+ "fallthrough": "basic"
+};
+// Very basic readline/emacs-style bindings, which are standard on Mac.
+keyMap.emacsy = {
+ "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown",
+ "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd",
+ "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore",
+ "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars",
+ "Ctrl-O": "openLine"
+};
+keyMap.macDefault = {
+ "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo",
+ "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft",
+ "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore",
+ "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find",
+ "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll",
+ "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight",
+ "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd",
+ "fallthrough": ["basic", "emacsy"]
+};
+keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
+
+// KEYMAP DISPATCH
+
+function normalizeKeyName(name) {
+ var parts = name.split(/-(?!$)/);
+ name = parts[parts.length - 1];
+ var alt, ctrl, shift, cmd;
+ for (var i = 0; i < parts.length - 1; i++) {
+ var mod = parts[i];
+ if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }
+ else if (/^a(lt)?$/i.test(mod)) { alt = true; }
+ else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }
+ else if (/^s(hift)?$/i.test(mod)) { shift = true; }
+ else { throw new Error("Unrecognized modifier name: " + mod) }
+ }
+ if (alt) { name = "Alt-" + name; }
+ if (ctrl) { name = "Ctrl-" + name; }
+ if (cmd) { name = "Cmd-" + name; }
+ if (shift) { name = "Shift-" + name; }
+ return name
+}
+
+// This is a kludge to keep keymaps mostly working as raw objects
+// (backwards compatibility) while at the same time support features
+// like normalization and multi-stroke key bindings. It compiles a
+// new normalized keymap, and then updates the old object to reflect
+// this.
+function normalizeKeyMap(keymap) {
+ var copy = {};
+ for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {
+ var value = keymap[keyname];
+ if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }
+ if (value == "...") { delete keymap[keyname]; continue }
+
+ var keys = map(keyname.split(" "), normalizeKeyName);
+ for (var i = 0; i < keys.length; i++) {
+ var val = (void 0), name = (void 0);
+ if (i == keys.length - 1) {
+ name = keys.join(" ");
+ val = value;
+ } else {
+ name = keys.slice(0, i + 1).join(" ");
+ val = "...";
+ }
+ var prev = copy[name];
+ if (!prev) { copy[name] = val; }
+ else if (prev != val) { throw new Error("Inconsistent bindings for " + name) }
+ }
+ delete keymap[keyname];
+ } }
+ for (var prop in copy) { keymap[prop] = copy[prop]; }
+ return keymap
+}
+
+function lookupKey(key, map$$1, handle, context) {
+ map$$1 = getKeyMap(map$$1);
+ var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];
+ if (found === false) { return "nothing" }
+ if (found === "...") { return "multi" }
+ if (found != null && handle(found)) { return "handled" }
+
+ if (map$$1.fallthrough) {
+ if (Object.prototype.toString.call(map$$1.fallthrough) != "[object Array]")
+ { return lookupKey(key, map$$1.fallthrough, handle, context) }
+ for (var i = 0; i < map$$1.fallthrough.length; i++) {
+ var result = lookupKey(key, map$$1.fallthrough[i], handle, context);
+ if (result) { return result }
+ }
+ }
+}
+
+// Modifier key presses don't count as 'real' key presses for the
+// purpose of keymap fallthrough.
+function isModifierKey(value) {
+ var name = typeof value == "string" ? value : keyNames[value.keyCode];
+ return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod"
+}
+
+function addModifierNames(name, event, noShift) {
+ var base = name;
+ if (event.altKey && base != "Alt") { name = "Alt-" + name; }
+ if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name; }
+ if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name; }
+ if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name; }
+ return name
+}
+
+// Look up the name of a key as indicated by an event object.
+function keyName(event, noShift) {
+ if (presto && event.keyCode == 34 && event["char"]) { return false }
+ var name = keyNames[event.keyCode];
+ if (name == null || event.altGraphKey) { return false }
+ // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,
+ // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)
+ if (event.keyCode == 3 && event.code) { name = event.code; }
+ return addModifierNames(name, event, noShift)
+}
+
+function getKeyMap(val) {
+ return typeof val == "string" ? keyMap[val] : val
+}
+
+// Helper for deleting text near the selection(s), used to implement
+// backspace, delete, and similar functionality.
+function deleteNearSelection(cm, compute) {
+ var ranges = cm.doc.sel.ranges, kill = [];
+ // Build up a set of ranges to kill first, merging overlapping
+ // ranges.
+ for (var i = 0; i < ranges.length; i++) {
+ var toKill = compute(ranges[i]);
+ while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
+ var replaced = kill.pop();
+ if (cmp(replaced.from, toKill.from) < 0) {
+ toKill.from = replaced.from;
+ break
+ }
+ }
+ kill.push(toKill);
+ }
+ // Next, remove those actual ranges.
+ runInOp(cm, function () {
+ for (var i = kill.length - 1; i >= 0; i--)
+ { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete"); }
+ ensureCursorVisible(cm);
+ });
+}
+
+function moveCharLogically(line, ch, dir) {
+ var target = skipExtendingChars(line.text, ch + dir, dir);
+ return target < 0 || target > line.text.length ? null : target
+}
+
+function moveLogically(line, start, dir) {
+ var ch = moveCharLogically(line, start.ch, dir);
+ return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before")
+}
+
+function endOfLine(visually, cm, lineObj, lineNo, dir) {
+ if (visually) {
+ var order = getOrder(lineObj, cm.doc.direction);
+ if (order) {
+ var part = dir < 0 ? lst(order) : order[0];
+ var moveInStorageOrder = (dir < 0) == (part.level == 1);
+ var sticky = moveInStorageOrder ? "after" : "before";
+ var ch;
+ // With a wrapped rtl chunk (possibly spanning multiple bidi parts),
+ // it could be that the last bidi part is not on the last visual line,
+ // since visual lines contain content order-consecutive chunks.
+ // Thus, in rtl, we are looking for the first (content-order) character
+ // in the rtl chunk that is on the last line (that is, the same line
+ // as the last (content-order) character).
+ if (part.level > 0 || cm.doc.direction == "rtl") {
+ var prep = prepareMeasureForLine(cm, lineObj);
+ ch = dir < 0 ? lineObj.text.length - 1 : 0;
+ var targetTop = measureCharPrepared(cm, prep, ch).top;
+ ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);
+ if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1); }
+ } else { ch = dir < 0 ? part.to : part.from; }
+ return new Pos(lineNo, ch, sticky)
+ }
+ }
+ return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after")
+}
+
+function moveVisually(cm, line, start, dir) {
+ var bidi = getOrder(line, cm.doc.direction);
+ if (!bidi) { return moveLogically(line, start, dir) }
+ if (start.ch >= line.text.length) {
+ start.ch = line.text.length;
+ start.sticky = "before";
+ } else if (start.ch <= 0) {
+ start.ch = 0;
+ start.sticky = "after";
+ }
+ var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];
+ if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {
+ // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,
+ // nothing interesting happens.
+ return moveLogically(line, start, dir)
+ }
+
+ var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };
+ var prep;
+ var getWrappedLineExtent = function (ch) {
+ if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }
+ prep = prep || prepareMeasureForLine(cm, line);
+ return wrappedLineExtentChar(cm, line, prep, ch)
+ };
+ var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch);
+
+ if (cm.doc.direction == "rtl" || part.level == 1) {
+ var moveInStorageOrder = (part.level == 1) == (dir < 0);
+ var ch = mv(start, moveInStorageOrder ? 1 : -1);
+ if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {
+ // Case 2: We move within an rtl part or in an rtl editor on the same visual line
+ var sticky = moveInStorageOrder ? "before" : "after";
+ return new Pos(start.line, ch, sticky)
+ }
+ }
+
+ // Case 3: Could not move within this bidi part in this visual line, so leave
+ // the current bidi part
+
+ var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {
+ var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder
+ ? new Pos(start.line, mv(ch, 1), "before")
+ : new Pos(start.line, ch, "after"); };
+
+ for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {
+ var part = bidi[partPos];
+ var moveInStorageOrder = (dir > 0) == (part.level != 1);
+ var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);
+ if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }
+ ch = moveInStorageOrder ? part.from : mv(part.to, -1);
+ if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }
+ }
+ };
+
+ // Case 3a: Look for other bidi parts on the same visual line
+ var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);
+ if (res) { return res }
+
+ // Case 3b: Look for other bidi parts on the next visual line
+ var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);
+ if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {
+ res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));
+ if (res) { return res }
+ }
+
+ // Case 4: Nowhere to move
+ return null
+}
+
+// Commands are parameter-less actions that can be performed on an
+// editor, mostly used for keybindings.
+var commands = {
+ selectAll: selectAll,
+ singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); },
+ killLine: function (cm) { return deleteNearSelection(cm, function (range) {
+ if (range.empty()) {
+ var len = getLine(cm.doc, range.head.line).text.length;
+ if (range.head.ch == len && range.head.line < cm.lastLine())
+ { return {from: range.head, to: Pos(range.head.line + 1, 0)} }
+ else
+ { return {from: range.head, to: Pos(range.head.line, len)} }
+ } else {
+ return {from: range.from(), to: range.to()}
+ }
+ }); },
+ deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+ from: Pos(range.from().line, 0),
+ to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
+ }); }); },
+ delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({
+ from: Pos(range.from().line, 0), to: range.from()
+ }); }); },
+ delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5;
+ var leftPos = cm.coordsChar({left: 0, top: top}, "div");
+ return {from: leftPos, to: range.from()}
+ }); },
+ delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {
+ var top = cm.charCoords(range.head, "div").top + 5;
+ var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div");
+ return {from: range.from(), to: rightPos }
+ }); },
+ undo: function (cm) { return cm.undo(); },
+ redo: function (cm) { return cm.redo(); },
+ undoSelection: function (cm) { return cm.undoSelection(); },
+ redoSelection: function (cm) { return cm.redoSelection(); },
+ goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },
+ goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },
+ goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },
+ {origin: "+move", bias: 1}
+ ); },
+ goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },
+ {origin: "+move", bias: 1}
+ ); },
+ goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },
+ {origin: "+move", bias: -1}
+ ); },
+ goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.cursorCoords(range.head, "div").top + 5;
+ return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div")
+ }, sel_move); },
+ goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.cursorCoords(range.head, "div").top + 5;
+ return cm.coordsChar({left: 0, top: top}, "div")
+ }, sel_move); },
+ goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {
+ var top = cm.cursorCoords(range.head, "div").top + 5;
+ var pos = cm.coordsChar({left: 0, top: top}, "div");
+ if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) }
+ return pos
+ }, sel_move); },
+ goLineUp: function (cm) { return cm.moveV(-1, "line"); },
+ goLineDown: function (cm) { return cm.moveV(1, "line"); },
+ goPageUp: function (cm) { return cm.moveV(-1, "page"); },
+ goPageDown: function (cm) { return cm.moveV(1, "page"); },
+ goCharLeft: function (cm) { return cm.moveH(-1, "char"); },
+ goCharRight: function (cm) { return cm.moveH(1, "char"); },
+ goColumnLeft: function (cm) { return cm.moveH(-1, "column"); },
+ goColumnRight: function (cm) { return cm.moveH(1, "column"); },
+ goWordLeft: function (cm) { return cm.moveH(-1, "word"); },
+ goGroupRight: function (cm) { return cm.moveH(1, "group"); },
+ goGroupLeft: function (cm) { return cm.moveH(-1, "group"); },
+ goWordRight: function (cm) { return cm.moveH(1, "word"); },
+ delCharBefore: function (cm) { return cm.deleteH(-1, "char"); },
+ delCharAfter: function (cm) { return cm.deleteH(1, "char"); },
+ delWordBefore: function (cm) { return cm.deleteH(-1, "word"); },
+ delWordAfter: function (cm) { return cm.deleteH(1, "word"); },
+ delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); },
+ delGroupAfter: function (cm) { return cm.deleteH(1, "group"); },
+ indentAuto: function (cm) { return cm.indentSelection("smart"); },
+ indentMore: function (cm) { return cm.indentSelection("add"); },
+ indentLess: function (cm) { return cm.indentSelection("subtract"); },
+ insertTab: function (cm) { return cm.replaceSelection("\t"); },
+ insertSoftTab: function (cm) {
+ var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;
+ for (var i = 0; i < ranges.length; i++) {
+ var pos = ranges[i].from();
+ var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);
+ spaces.push(spaceStr(tabSize - col % tabSize));
+ }
+ cm.replaceSelections(spaces);
+ },
+ defaultTab: function (cm) {
+ if (cm.somethingSelected()) { cm.indentSelection("add"); }
+ else { cm.execCommand("insertTab"); }
+ },
+ // Swap the two chars left and right of each selection's head.
+ // Move cursor behind the two swapped characters afterwards.
+ //
+ // Doesn't consider line feeds a character.
+ // Doesn't scan more than one line above to find a character.
+ // Doesn't do anything on an empty line.
+ // Doesn't do anything with non-empty selections.
+ transposeChars: function (cm) { return runInOp(cm, function () {
+ var ranges = cm.listSelections(), newSel = [];
+ for (var i = 0; i < ranges.length; i++) {
+ if (!ranges[i].empty()) { continue }
+ var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;
+ if (line) {
+ if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }
+ if (cur.ch > 0) {
+ cur = new Pos(cur.line, cur.ch + 1);
+ cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),
+ Pos(cur.line, cur.ch - 2), cur, "+transpose");
+ } else if (cur.line > cm.doc.first) {
+ var prev = getLine(cm.doc, cur.line - 1).text;
+ if (prev) {
+ cur = new Pos(cur.line, 1);
+ cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +
+ prev.charAt(prev.length - 1),
+ Pos(cur.line - 1, prev.length - 1), cur, "+transpose");
+ }
+ }
+ }
+ newSel.push(new Range(cur, cur));
+ }
+ cm.setSelections(newSel);
+ }); },
+ newlineAndIndent: function (cm) { return runInOp(cm, function () {
+ var sels = cm.listSelections();
+ for (var i = sels.length - 1; i >= 0; i--)
+ { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input"); }
+ sels = cm.listSelections();
+ for (var i$1 = 0; i$1 < sels.length; i$1++)
+ { cm.indentLine(sels[i$1].from().line, null, true); }
+ ensureCursorVisible(cm);
+ }); },
+ openLine: function (cm) { return cm.replaceSelection("\n", "start"); },
+ toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }
+};
+
+
+function lineStart(cm, lineN) {
+ var line = getLine(cm.doc, lineN);
+ var visual = visualLine(line);
+ if (visual != line) { lineN = lineNo(visual); }
+ return endOfLine(true, cm, visual, lineN, 1)
+}
+function lineEnd(cm, lineN) {
+ var line = getLine(cm.doc, lineN);
+ var visual = visualLineEnd(line);
+ if (visual != line) { lineN = lineNo(visual); }
+ return endOfLine(true, cm, line, lineN, -1)
+}
+function lineStartSmart(cm, pos) {
+ var start = lineStart(cm, pos.line);
+ var line = getLine(cm.doc, start.line);
+ var order = getOrder(line, cm.doc.direction);
+ if (!order || order[0].level == 0) {
+ var firstNonWS = Math.max(0, line.text.search(/\S/));
+ var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;
+ return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)
+ }
+ return start
+}
+
+// Run a handler that was bound to a key.
+function doHandleBinding(cm, bound, dropShift) {
+ if (typeof bound == "string") {
+ bound = commands[bound];
+ if (!bound) { return false }
+ }
+ // Ensure previous input has been read, so that the handler sees a
+ // consistent view of the document
+ cm.display.input.ensurePolled();
+ var prevShift = cm.display.shift, done = false;
+ try {
+ if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
+ if (dropShift) { cm.display.shift = false; }
+ done = bound(cm) != Pass;
+ } finally {
+ cm.display.shift = prevShift;
+ cm.state.suppressEdits = false;
+ }
+ return done
+}
+
+function lookupKeyForEditor(cm, name, handle) {
+ for (var i = 0; i < cm.state.keyMaps.length; i++) {
+ var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);
+ if (result) { return result }
+ }
+ return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))
+ || lookupKey(name, cm.options.keyMap, handle, cm)
+}
+
+// Note that, despite the name, this function is also used to check
+// for bound mouse clicks.
+
+var stopSeq = new Delayed;
+
+function dispatchKey(cm, name, e, handle) {
+ var seq = cm.state.keySeq;
+ if (seq) {
+ if (isModifierKey(name)) { return "handled" }
+ if (/\'$/.test(name))
+ { cm.state.keySeq = null; }
+ else
+ { stopSeq.set(50, function () {
+ if (cm.state.keySeq == seq) {
+ cm.state.keySeq = null;
+ cm.display.input.reset();
+ }
+ }); }
+ if (dispatchKeyInner(cm, seq + " " + name, e, handle)) { return true }
+ }
+ return dispatchKeyInner(cm, name, e, handle)
+}
+
+function dispatchKeyInner(cm, name, e, handle) {
+ var result = lookupKeyForEditor(cm, name, handle);
+
+ if (result == "multi")
+ { cm.state.keySeq = name; }
+ if (result == "handled")
+ { signalLater(cm, "keyHandled", cm, name, e); }
+
+ if (result == "handled" || result == "multi") {
+ e_preventDefault(e);
+ restartBlink(cm);
+ }
+
+ return !!result
+}
+
+// Handle a key from the keydown event.
+function handleKeyBinding(cm, e) {
+ var name = keyName(e, true);
+ if (!name) { return false }
+
+ if (e.shiftKey && !cm.state.keySeq) {
+ // First try to resolve full name (including 'Shift-'). Failing
+ // that, see if there is a cursor-motion command (starting with
+ // 'go') bound to the keyname without 'Shift-'.
+ return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); })
+ || dispatchKey(cm, name, e, function (b) {
+ if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion)
+ { return doHandleBinding(cm, b) }
+ })
+ } else {
+ return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })
+ }
+}
+
+// Handle a key from the keypress event
+function handleCharBinding(cm, e, ch) {
+ return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); })
+}
+
+var lastStoppedKey = null;
+function onKeyDown(e) {
+ var cm = this;
+ cm.curOp.focus = activeElt();
+ if (signalDOMEvent(cm, e)) { return }
+ // IE does strange things with escape.
+ if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }
+ var code = e.keyCode;
+ cm.display.shift = code == 16 || e.shiftKey;
+ var handled = handleKeyBinding(cm, e);
+ if (presto) {
+ lastStoppedKey = handled ? code : null;
+ // Opera has no cut event... we try to at least catch the key combo
+ if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))
+ { cm.replaceSelection("", null, "cut"); }
+ }
+
+ // Turn mouse into crosshair when Alt is held on Mac.
+ if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
+ { showCrossHair(cm); }
+}
+
+function showCrossHair(cm) {
+ var lineDiv = cm.display.lineDiv;
+ addClass(lineDiv, "CodeMirror-crosshair");
+
+ function up(e) {
+ if (e.keyCode == 18 || !e.altKey) {
+ rmClass(lineDiv, "CodeMirror-crosshair");
+ off(document, "keyup", up);
+ off(document, "mouseover", up);
+ }
+ }
+ on(document, "keyup", up);
+ on(document, "mouseover", up);
+}
+
+function onKeyUp(e) {
+ if (e.keyCode == 16) { this.doc.sel.shift = false; }
+ signalDOMEvent(this, e);
+}
+
+function onKeyPress(e) {
+ var cm = this;
+ if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }
+ var keyCode = e.keyCode, charCode = e.charCode;
+ if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}
+ if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }
+ var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
+ // Some browsers fire keypress events for backspace
+ if (ch == "\x08") { return }
+ if (handleCharBinding(cm, e, ch)) { return }
+ cm.display.input.onKeyPress(e);
+}
+
+var DOUBLECLICK_DELAY = 400;
+
+var PastClick = function(time, pos, button) {
+ this.time = time;
+ this.pos = pos;
+ this.button = button;
+};
+
+PastClick.prototype.compare = function (time, pos, button) {
+ return this.time + DOUBLECLICK_DELAY > time &&
+ cmp(pos, this.pos) == 0 && button == this.button
+};
+
+var lastClick;
+var lastDoubleClick;
+function clickRepeat(pos, button) {
+ var now = +new Date;
+ if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {
+ lastClick = lastDoubleClick = null;
+ return "triple"
+ } else if (lastClick && lastClick.compare(now, pos, button)) {
+ lastDoubleClick = new PastClick(now, pos, button);
+ lastClick = null;
+ return "double"
+ } else {
+ lastClick = new PastClick(now, pos, button);
+ lastDoubleClick = null;
+ return "single"
+ }
+}
+
+// A mouse down can be a single click, double click, triple click,
+// start of selection drag, start of text drag, new cursor
+// (ctrl-click), rectangle drag (alt-drag), or xwin
+// middle-click-paste. Or it might be a click on something we should
+// not interfere with, such as a scrollbar or widget.
+function onMouseDown(e) {
+ var cm = this, display = cm.display;
+ if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }
+ display.input.ensurePolled();
+ display.shift = e.shiftKey;
+
+ if (eventInWidget(display, e)) {
+ if (!webkit) {
+ // Briefly turn off draggability, to allow widgets to do
+ // normal dragging things.
+ display.scroller.draggable = false;
+ setTimeout(function () { return display.scroller.draggable = true; }, 100);
+ }
+ return
+ }
+ if (clickInGutter(cm, e)) { return }
+ var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single";
+ window.focus();
+
+ // #3261: make sure, that we're not starting a second selection
+ if (button == 1 && cm.state.selectingText)
+ { cm.state.selectingText(e); }
+
+ if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }
+
+ if (button == 1) {
+ if (pos) { leftButtonDown(cm, pos, repeat, e); }
+ else if (e_target(e) == display.scroller) { e_preventDefault(e); }
+ } else if (button == 2) {
+ if (pos) { extendSelection(cm.doc, pos); }
+ setTimeout(function () { return display.input.focus(); }, 20);
+ } else if (button == 3) {
+ if (captureRightClick) { onContextMenu(cm, e); }
+ else { delayBlurEvent(cm); }
+ }
+}
+
+function handleMappedButton(cm, button, pos, repeat, event) {
+ var name = "Click";
+ if (repeat == "double") { name = "Double" + name; }
+ else if (repeat == "triple") { name = "Triple" + name; }
+ name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name;
+
+ return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {
+ if (typeof bound == "string") { bound = commands[bound]; }
+ if (!bound) { return false }
+ var done = false;
+ try {
+ if (cm.isReadOnly()) { cm.state.suppressEdits = true; }
+ done = bound(cm, pos) != Pass;
+ } finally {
+ cm.state.suppressEdits = false;
+ }
+ return done
+ })
+}
+
+function configureMouse(cm, repeat, event) {
+ var option = cm.getOption("configureMouse");
+ var value = option ? option(cm, repeat, event) : {};
+ if (value.unit == null) {
+ var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;
+ value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line";
+ }
+ if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }
+ if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }
+ if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }
+ return value
+}
+
+function leftButtonDown(cm, pos, repeat, event) {
+ if (ie) { setTimeout(bind(ensureFocus, cm), 0); }
+ else { cm.curOp.focus = activeElt(); }
+
+ var behavior = configureMouse(cm, repeat, event);
+
+ var sel = cm.doc.sel, contained;
+ if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&
+ repeat == "single" && (contained = sel.contains(pos)) > -1 &&
+ (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&
+ (cmp(contained.to(), pos) > 0 || pos.xRel < 0))
+ { leftButtonStartDrag(cm, event, pos, behavior); }
+ else
+ { leftButtonSelect(cm, event, pos, behavior); }
+}
+
+// Start a text drag. When it ends, see if any dragging actually
+// happen, and treat as a click if it didn't.
+function leftButtonStartDrag(cm, event, pos, behavior) {
+ var display = cm.display, moved = false;
+ var dragEnd = operation(cm, function (e) {
+ if (webkit) { display.scroller.draggable = false; }
+ cm.state.draggingText = false;
+ off(display.wrapper.ownerDocument, "mouseup", dragEnd);
+ off(display.wrapper.ownerDocument, "mousemove", mouseMove);
+ off(display.scroller, "dragstart", dragStart);
+ off(display.scroller, "drop", dragEnd);
+ if (!moved) {
+ e_preventDefault(e);
+ if (!behavior.addNew)
+ { extendSelection(cm.doc, pos, null, null, behavior.extend); }
+ // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)
+ if (webkit || ie && ie_version == 9)
+ { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }
+ else
+ { display.input.focus(); }
+ }
+ });
+ var mouseMove = function(e2) {
+ moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;
+ };
+ var dragStart = function () { return moved = true; };
+ // Let the drag handler handle this.
+ if (webkit) { display.scroller.draggable = true; }
+ cm.state.draggingText = dragEnd;
+ dragEnd.copy = !behavior.moveOnDrag;
+ // IE's approach to draggable
+ if (display.scroller.dragDrop) { display.scroller.dragDrop(); }
+ on(display.wrapper.ownerDocument, "mouseup", dragEnd);
+ on(display.wrapper.ownerDocument, "mousemove", mouseMove);
+ on(display.scroller, "dragstart", dragStart);
+ on(display.scroller, "drop", dragEnd);
+
+ delayBlurEvent(cm);
+ setTimeout(function () { return display.input.focus(); }, 20);
+}
+
+function rangeForUnit(cm, pos, unit) {
+ if (unit == "char") { return new Range(pos, pos) }
+ if (unit == "word") { return cm.findWordAt(pos) }
+ if (unit == "line") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }
+ var result = unit(cm, pos);
+ return new Range(result.from, result.to)
+}
+
+// Normal selection, as opposed to text dragging.
+function leftButtonSelect(cm, event, start, behavior) {
+ var display = cm.display, doc = cm.doc;
+ e_preventDefault(event);
+
+ var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;
+ if (behavior.addNew && !behavior.extend) {
+ ourIndex = doc.sel.contains(start);
+ if (ourIndex > -1)
+ { ourRange = ranges[ourIndex]; }
+ else
+ { ourRange = new Range(start, start); }
+ } else {
+ ourRange = doc.sel.primary();
+ ourIndex = doc.sel.primIndex;
+ }
+
+ if (behavior.unit == "rectangle") {
+ if (!behavior.addNew) { ourRange = new Range(start, start); }
+ start = posFromMouse(cm, event, true, true);
+ ourIndex = -1;
+ } else {
+ var range$$1 = rangeForUnit(cm, start, behavior.unit);
+ if (behavior.extend)
+ { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }
+ else
+ { ourRange = range$$1; }
+ }
+
+ if (!behavior.addNew) {
+ ourIndex = 0;
+ setSelection(doc, new Selection([ourRange], 0), sel_mouse);
+ startSel = doc.sel;
+ } else if (ourIndex == -1) {
+ ourIndex = ranges.length;
+ setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),
+ {scroll: false, origin: "*mouse"});
+ } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
+ setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),
+ {scroll: false, origin: "*mouse"});
+ startSel = doc.sel;
+ } else {
+ replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);
+ }
+
+ var lastPos = start;
+ function extendTo(pos) {
+ if (cmp(lastPos, pos) == 0) { return }
+ lastPos = pos;
+
+ if (behavior.unit == "rectangle") {
+ var ranges = [], tabSize = cm.options.tabSize;
+ var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);
+ var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);
+ var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);
+ for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));
+ line <= end; line++) {
+ var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);
+ if (left == right)
+ { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }
+ else if (text.length > leftPos)
+ { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }
+ }
+ if (!ranges.length) { ranges.push(new Range(start, start)); }
+ setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),
+ {origin: "*mouse", scroll: false});
+ cm.scrollIntoView(pos);
+ } else {
+ var oldRange = ourRange;
+ var range$$1 = rangeForUnit(cm, pos, behavior.unit);
+ var anchor = oldRange.anchor, head;
+ if (cmp(range$$1.anchor, anchor) > 0) {
+ head = range$$1.head;
+ anchor = minPos(oldRange.from(), range$$1.anchor);
+ } else {
+ head = range$$1.anchor;
+ anchor = maxPos(oldRange.to(), range$$1.head);
+ }
+ var ranges$1 = startSel.ranges.slice(0);
+ ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));
+ setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse);
+ }
+ }
+
+ var editorSize = display.wrapper.getBoundingClientRect();
+ // Used to ensure timeout re-tries don't fire when another extend
+ // happened in the meantime (clearTimeout isn't reliable -- at
+ // least on Chrome, the timeouts still happen even when cleared,
+ // if the clear happens after their scheduled firing time).
+ var counter = 0;
+
+ function extend(e) {
+ var curCount = ++counter;
+ var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle");
+ if (!cur) { return }
+ if (cmp(cur, lastPos) != 0) {
+ cm.curOp.focus = activeElt();
+ extendTo(cur);
+ var visible = visibleLines(display, doc);
+ if (cur.line >= visible.to || cur.line < visible.from)
+ { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }
+ } else {
+ var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
+ if (outside) { setTimeout(operation(cm, function () {
+ if (counter != curCount) { return }
+ display.scroller.scrollTop += outside;
+ extend(e);
+ }), 50); }
+ }
+ }
+
+ function done(e) {
+ cm.state.selectingText = false;
+ counter = Infinity;
+ e_preventDefault(e);
+ display.input.focus();
+ off(display.wrapper.ownerDocument, "mousemove", move);
+ off(display.wrapper.ownerDocument, "mouseup", up);
+ doc.history.lastSelOrigin = null;
+ }
+
+ var move = operation(cm, function (e) {
+ if (e.buttons === 0 || !e_button(e)) { done(e); }
+ else { extend(e); }
+ });
+ var up = operation(cm, done);
+ cm.state.selectingText = up;
+ on(display.wrapper.ownerDocument, "mousemove", move);
+ on(display.wrapper.ownerDocument, "mouseup", up);
+}
+
+// Used when mouse-selecting to adjust the anchor to the proper side
+// of a bidi jump depending on the visual position of the head.
+function bidiSimplify(cm, range$$1) {
+ var anchor = range$$1.anchor;
+ var head = range$$1.head;
+ var anchorLine = getLine(cm.doc, anchor.line);
+ if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }
+ var order = getOrder(anchorLine);
+ if (!order) { return range$$1 }
+ var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];
+ if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }
+ var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);
+ if (boundary == 0 || boundary == order.length) { return range$$1 }
+
+ // Compute the relative visual position of the head compared to the
+ // anchor (<0 is to the left, >0 to the right)
+ var leftSide;
+ if (head.line != anchor.line) {
+ leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0;
+ } else {
+ var headIndex = getBidiPartAt(order, head.ch, head.sticky);
+ var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);
+ if (headIndex == boundary - 1 || headIndex == boundary)
+ { leftSide = dir < 0; }
+ else
+ { leftSide = dir > 0; }
+ }
+
+ var usePart = order[boundary + (leftSide ? -1 : 0)];
+ var from = leftSide == (usePart.level == 1);
+ var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before";
+ return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)
+}
+
+
+// Determines whether an event happened in the gutter, and fires the
+// handlers for the corresponding event.
+function gutterEvent(cm, e, type, prevent) {
+ var mX, mY;
+ if (e.touches) {
+ mX = e.touches[0].clientX;
+ mY = e.touches[0].clientY;
+ } else {
+ try { mX = e.clientX; mY = e.clientY; }
+ catch(e) { return false }
+ }
+ if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }
+ if (prevent) { e_preventDefault(e); }
+
+ var display = cm.display;
+ var lineBox = display.lineDiv.getBoundingClientRect();
+
+ if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }
+ mY -= lineBox.top - display.viewOffset;
+
+ for (var i = 0; i < cm.options.gutters.length; ++i) {
+ var g = display.gutters.childNodes[i];
+ if (g && g.getBoundingClientRect().right >= mX) {
+ var line = lineAtHeight(cm.doc, mY);
+ var gutter = cm.options.gutters[i];
+ signal(cm, type, cm, line, gutter, e);
+ return e_defaultPrevented(e)
+ }
+ }
+}
+
+function clickInGutter(cm, e) {
+ return gutterEvent(cm, e, "gutterClick", true)
+}
+
+// CONTEXT MENU HANDLING
+
+// To make the context menu work, we need to briefly unhide the
+// textarea (making it as unobtrusive as possible) to let the
+// right-click take effect on it.
+function onContextMenu(cm, e) {
+ if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }
+ if (signalDOMEvent(cm, e, "contextmenu")) { return }
+ cm.display.input.onContextMenu(e);
+}
+
+function contextMenuInGutter(cm, e) {
+ if (!hasHandler(cm, "gutterContextMenu")) { return false }
+ return gutterEvent(cm, e, "gutterContextMenu", false)
+}
+
+function themeChanged(cm) {
+ cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") +
+ cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
+ clearCaches(cm);
+}
+
+var Init = {toString: function(){return "CodeMirror.Init"}};
+
+var defaults = {};
+var optionHandlers = {};
+
+function defineOptions(CodeMirror) {
+ var optionHandlers = CodeMirror.optionHandlers;
+
+ function option(name, deflt, handle, notOnInit) {
+ CodeMirror.defaults[name] = deflt;
+ if (handle) { optionHandlers[name] =
+ notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }
+ }
+
+ CodeMirror.defineOption = option;
+
+ // Passed to option handlers when there is no old value.
+ CodeMirror.Init = Init;
+
+ // These two are, on init, called from the constructor because they
+ // have to be initialized before the editor can start at all.
+ option("value", "", function (cm, val) { return cm.setValue(val); }, true);
+ option("mode", null, function (cm, val) {
+ cm.doc.modeOption = val;
+ loadMode(cm);
+ }, true);
+
+ option("indentUnit", 2, loadMode, true);
+ option("indentWithTabs", false);
+ option("smartIndent", true);
+ option("tabSize", 4, function (cm) {
+ resetModeState(cm);
+ clearCaches(cm);
+ regChange(cm);
+ }, true);
+
+ option("lineSeparator", null, function (cm, val) {
+ cm.doc.lineSep = val;
+ if (!val) { return }
+ var newBreaks = [], lineNo = cm.doc.first;
+ cm.doc.iter(function (line) {
+ for (var pos = 0;;) {
+ var found = line.text.indexOf(val, pos);
+ if (found == -1) { break }
+ pos = found + val.length;
+ newBreaks.push(Pos(lineNo, found));
+ }
+ lineNo++;
+ });
+ for (var i = newBreaks.length - 1; i >= 0; i--)
+ { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }
+ });
+ option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) {
+ cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
+ if (old != Init) { cm.refresh(); }
+ });
+ option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);
+ option("electricChars", true);
+ option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
+ throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME
+ }, true);
+ option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);
+ option("rtlMoveVisually", !windows);
+ option("wholeLineUpdateBefore", true);
+
+ option("theme", "default", function (cm) {
+ themeChanged(cm);
+ guttersChanged(cm);
+ }, true);
+ option("keyMap", "default", function (cm, val, old) {
+ var next = getKeyMap(val);
+ var prev = old != Init && getKeyMap(old);
+ if (prev && prev.detach) { prev.detach(cm, next); }
+ if (next.attach) { next.attach(cm, prev || null); }
+ });
+ option("extraKeys", null);
+ option("configureMouse", null);
+
+ option("lineWrapping", false, wrappingChanged, true);
+ option("gutters", [], function (cm) {
+ setGuttersForLineNumbers(cm.options);
+ guttersChanged(cm);
+ }, true);
+ option("fixedGutter", true, function (cm, val) {
+ cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
+ cm.refresh();
+ }, true);
+ option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true);
+ option("scrollbarStyle", "native", function (cm) {
+ initScrollbars(cm);
+ updateScrollbars(cm);
+ cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);
+ cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);
+ }, true);
+ option("lineNumbers", false, function (cm) {
+ setGuttersForLineNumbers(cm.options);
+ guttersChanged(cm);
+ }, true);
+ option("firstLineNumber", 1, guttersChanged, true);
+ option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true);
+ option("showCursorWhenSelecting", false, updateSelection, true);
+
+ option("resetSelectionOnContextMenu", true);
+ option("lineWiseCopyCut", true);
+ option("pasteLinesPerSelection", true);
+
+ option("readOnly", false, function (cm, val) {
+ if (val == "nocursor") {
+ onBlur(cm);
+ cm.display.input.blur();
+ }
+ cm.display.input.readOnlyChanged(val);
+ });
+ option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);
+ option("dragDrop", true, dragDropChanged);
+ option("allowDropFileTypes", null);
+
+ option("cursorBlinkRate", 530);
+ option("cursorScrollMargin", 0);
+ option("cursorHeight", 1, updateSelection, true);
+ option("singleCursorHeightPerLine", true, updateSelection, true);
+ option("workTime", 100);
+ option("workDelay", 100);
+ option("flattenSpans", true, resetModeState, true);
+ option("addModeClass", false, resetModeState, true);
+ option("pollInterval", 100);
+ option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });
+ option("historyEventDelay", 1250);
+ option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true);
+ option("maxHighlightLength", 10000, resetModeState, true);
+ option("moveInputWithCursor", true, function (cm, val) {
+ if (!val) { cm.display.input.resetPosition(); }
+ });
+
+ option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; });
+ option("autofocus", null);
+ option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true);
+}
+
+function guttersChanged(cm) {
+ updateGutters(cm);
+ regChange(cm);
+ alignHorizontally(cm);
+}
+
+function dragDropChanged(cm, value, old) {
+ var wasOn = old && old != Init;
+ if (!value != !wasOn) {
+ var funcs = cm.display.dragFunctions;
+ var toggle = value ? on : off;
+ toggle(cm.display.scroller, "dragstart", funcs.start);
+ toggle(cm.display.scroller, "dragenter", funcs.enter);
+ toggle(cm.display.scroller, "dragover", funcs.over);
+ toggle(cm.display.scroller, "dragleave", funcs.leave);
+ toggle(cm.display.scroller, "drop", funcs.drop);
+ }
+}
+
+function wrappingChanged(cm) {
+ if (cm.options.lineWrapping) {
+ addClass(cm.display.wrapper, "CodeMirror-wrap");
+ cm.display.sizer.style.minWidth = "";
+ cm.display.sizerWidth = null;
+ } else {
+ rmClass(cm.display.wrapper, "CodeMirror-wrap");
+ findMaxLine(cm);
+ }
+ estimateLineHeights(cm);
+ regChange(cm);
+ clearCaches(cm);
+ setTimeout(function () { return updateScrollbars(cm); }, 100);
+}
+
+// A CodeMirror instance represents an editor. This is the object
+// that user code is usually dealing with.
+
+function CodeMirror$1(place, options) {
+ var this$1 = this;
+
+ if (!(this instanceof CodeMirror$1)) { return new CodeMirror$1(place, options) }
+
+ this.options = options = options ? copyObj(options) : {};
+ // Determine effective options based on given values and defaults.
+ copyObj(defaults, options, false);
+ setGuttersForLineNumbers(options);
+
+ var doc = options.value;
+ if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }
+ else if (options.mode) { doc.modeOption = options.mode; }
+ this.doc = doc;
+
+ var input = new CodeMirror$1.inputStyles[options.inputStyle](this);
+ var display = this.display = new Display(place, doc, input);
+ display.wrapper.CodeMirror = this;
+ updateGutters(this);
+ themeChanged(this);
+ if (options.lineWrapping)
+ { this.display.wrapper.className += " CodeMirror-wrap"; }
+ initScrollbars(this);
+
+ this.state = {
+ keyMaps: [], // stores maps added by addKeyMap
+ overlays: [], // highlighting overlays, as added by addOverlay
+ modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info
+ overwrite: false,
+ delayingBlurEvent: false,
+ focused: false,
+ suppressEdits: false, // used to disable editing during key handlers when in readOnly mode
+ pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll
+ selectingText: false,
+ draggingText: false,
+ highlight: new Delayed(), // stores highlight worker timeout
+ keySeq: null, // Unfinished key sequence
+ specialChars: null
+ };
+
+ if (options.autofocus && !mobile) { display.input.focus(); }
+
+ // Override magic textarea content restore that IE sometimes does
+ // on our hidden textarea on reload
+ if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }
+
+ registerEventHandlers(this);
+ ensureGlobalHandlers();
+
+ startOperation(this);
+ this.curOp.forceUpdate = true;
+ attachDoc(this, doc);
+
+ if ((options.autofocus && !mobile) || this.hasFocus())
+ { setTimeout(bind(onFocus, this), 20); }
+ else
+ { onBlur(this); }
+
+ for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))
+ { optionHandlers[opt](this$1, options[opt], Init); } }
+ maybeUpdateLineNumberWidth(this);
+ if (options.finishInit) { options.finishInit(this); }
+ for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }
+ endOperation(this);
+ // Suppress optimizelegibility in Webkit, since it breaks text
+ // measuring on line wrapping boundaries.
+ if (webkit && options.lineWrapping &&
+ getComputedStyle(display.lineDiv).textRendering == "optimizelegibility")
+ { display.lineDiv.style.textRendering = "auto"; }
+}
+
+// The default configuration options.
+CodeMirror$1.defaults = defaults;
+// Functions to run when options are changed.
+CodeMirror$1.optionHandlers = optionHandlers;
+
+// Attach the necessary event handlers when initializing the editor
+function registerEventHandlers(cm) {
+ var d = cm.display;
+ on(d.scroller, "mousedown", operation(cm, onMouseDown));
+ // Older IE's will not fire a second mousedown for a double click
+ if (ie && ie_version < 11)
+ { on(d.scroller, "dblclick", operation(cm, function (e) {
+ if (signalDOMEvent(cm, e)) { return }
+ var pos = posFromMouse(cm, e);
+ if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }
+ e_preventDefault(e);
+ var word = cm.findWordAt(pos);
+ extendSelection(cm.doc, word.anchor, word.head);
+ })); }
+ else
+ { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }
+ // Some browsers fire contextmenu *after* opening the menu, at
+ // which point we can't mess with it anymore. Context menu is
+ // handled in onMouseDown for these browsers.
+ if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }); }
+
+ // Used to suppress mouse event handling when a touch happens
+ var touchFinished, prevTouch = {end: 0};
+ function finishTouch() {
+ if (d.activeTouch) {
+ touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);
+ prevTouch = d.activeTouch;
+ prevTouch.end = +new Date;
+ }
+ }
+ function isMouseLikeTouchEvent(e) {
+ if (e.touches.length != 1) { return false }
+ var touch = e.touches[0];
+ return touch.radiusX <= 1 && touch.radiusY <= 1
+ }
+ function farAway(touch, other) {
+ if (other.left == null) { return true }
+ var dx = other.left - touch.left, dy = other.top - touch.top;
+ return dx * dx + dy * dy > 20 * 20
+ }
+ on(d.scroller, "touchstart", function (e) {
+ if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {
+ d.input.ensurePolled();
+ clearTimeout(touchFinished);
+ var now = +new Date;
+ d.activeTouch = {start: now, moved: false,
+ prev: now - prevTouch.end <= 300 ? prevTouch : null};
+ if (e.touches.length == 1) {
+ d.activeTouch.left = e.touches[0].pageX;
+ d.activeTouch.top = e.touches[0].pageY;
+ }
+ }
+ });
+ on(d.scroller, "touchmove", function () {
+ if (d.activeTouch) { d.activeTouch.moved = true; }
+ });
+ on(d.scroller, "touchend", function (e) {
+ var touch = d.activeTouch;
+ if (touch && !eventInWidget(d, e) && touch.left != null &&
+ !touch.moved && new Date - touch.start < 300) {
+ var pos = cm.coordsChar(d.activeTouch, "page"), range;
+ if (!touch.prev || farAway(touch, touch.prev)) // Single tap
+ { range = new Range(pos, pos); }
+ else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap
+ { range = cm.findWordAt(pos); }
+ else // Triple tap
+ { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }
+ cm.setSelection(range.anchor, range.head);
+ cm.focus();
+ e_preventDefault(e);
+ }
+ finishTouch();
+ });
+ on(d.scroller, "touchcancel", finishTouch);
+
+ // Sync scrolling between fake scrollbars and real scrollable
+ // area, ensure viewport is updated when scrolling.
+ on(d.scroller, "scroll", function () {
+ if (d.scroller.clientHeight) {
+ updateScrollTop(cm, d.scroller.scrollTop);
+ setScrollLeft(cm, d.scroller.scrollLeft, true);
+ signal(cm, "scroll", cm);
+ }
+ });
+
+ // Listen to wheel events in order to try and update the viewport on time.
+ on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); });
+ on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); });
+
+ // Prevent wrapper from ever scrolling
+ on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });
+
+ d.dragFunctions = {
+ enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},
+ over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},
+ start: function (e) { return onDragStart(cm, e); },
+ drop: operation(cm, onDrop),
+ leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}
+ };
+
+ var inp = d.input.getField();
+ on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); });
+ on(inp, "keydown", operation(cm, onKeyDown));
+ on(inp, "keypress", operation(cm, onKeyPress));
+ on(inp, "focus", function (e) { return onFocus(cm, e); });
+ on(inp, "blur", function (e) { return onBlur(cm, e); });
+}
+
+var initHooks = [];
+CodeMirror$1.defineInitHook = function (f) { return initHooks.push(f); };
+
+// Indent the given line. The how parameter can be "smart",
+// "add"/null, "subtract", or "prev". When aggressive is false
+// (typically set to true for forced single-line indents), empty
+// lines are not indented, and places where the mode returns Pass
+// are left alone.
+function indentLine(cm, n, how, aggressive) {
+ var doc = cm.doc, state;
+ if (how == null) { how = "add"; }
+ if (how == "smart") {
+ // Fall back to "prev" when the mode doesn't have an indentation
+ // method.
+ if (!doc.mode.indent) { how = "prev"; }
+ else { state = getContextBefore(cm, n).state; }
+ }
+
+ var tabSize = cm.options.tabSize;
+ var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
+ if (line.stateAfter) { line.stateAfter = null; }
+ var curSpaceString = line.text.match(/^\s*/)[0], indentation;
+ if (!aggressive && !/\S/.test(line.text)) {
+ indentation = 0;
+ how = "not";
+ } else if (how == "smart") {
+ indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
+ if (indentation == Pass || indentation > 150) {
+ if (!aggressive) { return }
+ how = "prev";
+ }
+ }
+ if (how == "prev") {
+ if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }
+ else { indentation = 0; }
+ } else if (how == "add") {
+ indentation = curSpace + cm.options.indentUnit;
+ } else if (how == "subtract") {
+ indentation = curSpace - cm.options.indentUnit;
+ } else if (typeof how == "number") {
+ indentation = curSpace + how;
+ }
+ indentation = Math.max(0, indentation);
+
+ var indentString = "", pos = 0;
+ if (cm.options.indentWithTabs)
+ { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t";} }
+ if (pos < indentation) { indentString += spaceStr(indentation - pos); }
+
+ if (indentString != curSpaceString) {
+ replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
+ line.stateAfter = null;
+ return true
+ } else {
+ // Ensure that, if the cursor was in the whitespace at the start
+ // of the line, it is moved to the end of that space.
+ for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
+ var range = doc.sel.ranges[i$1];
+ if (range.head.line == n && range.head.ch < curSpaceString.length) {
+ var pos$1 = Pos(n, curSpaceString.length);
+ replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));
+ break
+ }
+ }
+ }
+}
+
+// This will be set to a {lineWise: bool, text: [string]} object, so
+// that, when pasting, we know what kind of selections the copied
+// text was made out of.
+var lastCopied = null;
+
+function setLastCopied(newLastCopied) {
+ lastCopied = newLastCopied;
+}
+
+function applyTextInput(cm, inserted, deleted, sel, origin) {
+ var doc = cm.doc;
+ cm.display.shift = false;
+ if (!sel) { sel = doc.sel; }
+
+ var paste = cm.state.pasteIncoming || origin == "paste";
+ var textLines = splitLinesAuto(inserted), multiPaste = null;
+ // When pasting N lines into N selections, insert one line per selection
+ if (paste && sel.ranges.length > 1) {
+ if (lastCopied && lastCopied.text.join("\n") == inserted) {
+ if (sel.ranges.length % lastCopied.text.length == 0) {
+ multiPaste = [];
+ for (var i = 0; i < lastCopied.text.length; i++)
+ { multiPaste.push(doc.splitLines(lastCopied.text[i])); }
+ }
+ } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {
+ multiPaste = map(textLines, function (l) { return [l]; });
+ }
+ }
+
+ var updateInput;
+ // Normal behavior is to insert the new text into every selection
+ for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
+ var range$$1 = sel.ranges[i$1];
+ var from = range$$1.from(), to = range$$1.to();
+ if (range$$1.empty()) {
+ if (deleted && deleted > 0) // Handle deletion
+ { from = Pos(from.line, from.ch - deleted); }
+ else if (cm.state.overwrite && !paste) // Handle overwrite
+ { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }
+ else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted)
+ { from = to = Pos(from.line, 0); }
+ }
+ updateInput = cm.curOp.updateInput;
+ var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
+ origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")};
+ makeChange(cm.doc, changeEvent);
+ signalLater(cm, "inputRead", cm, changeEvent);
+ }
+ if (inserted && !paste)
+ { triggerElectric(cm, inserted); }
+
+ ensureCursorVisible(cm);
+ cm.curOp.updateInput = updateInput;
+ cm.curOp.typing = true;
+ cm.state.pasteIncoming = cm.state.cutIncoming = false;
+}
+
+function handlePaste(e, cm) {
+ var pasted = e.clipboardData && e.clipboardData.getData("Text");
+ if (pasted) {
+ e.preventDefault();
+ if (!cm.isReadOnly() && !cm.options.disableInput)
+ { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }); }
+ return true
+ }
+}
+
+function triggerElectric(cm, inserted) {
+ // When an 'electric' character is inserted, immediately trigger a reindent
+ if (!cm.options.electricChars || !cm.options.smartIndent) { return }
+ var sel = cm.doc.sel;
+
+ for (var i = sel.ranges.length - 1; i >= 0; i--) {
+ var range$$1 = sel.ranges[i];
+ if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }
+ var mode = cm.getModeAt(range$$1.head);
+ var indented = false;
+ if (mode.electricChars) {
+ for (var j = 0; j < mode.electricChars.length; j++)
+ { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
+ indented = indentLine(cm, range$$1.head.line, "smart");
+ break
+ } }
+ } else if (mode.electricInput) {
+ if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))
+ { indented = indentLine(cm, range$$1.head.line, "smart"); }
+ }
+ if (indented) { signalLater(cm, "electricInput", cm, range$$1.head.line); }
+ }
+}
+
+function copyableRanges(cm) {
+ var text = [], ranges = [];
+ for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
+ var line = cm.doc.sel.ranges[i].head.line;
+ var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};
+ ranges.push(lineRange);
+ text.push(cm.getRange(lineRange.anchor, lineRange.head));
+ }
+ return {text: text, ranges: ranges}
+}
+
+function disableBrowserMagic(field, spellcheck) {
+ field.setAttribute("autocorrect", "off");
+ field.setAttribute("autocapitalize", "off");
+ field.setAttribute("spellcheck", !!spellcheck);
+}
+
+function hiddenTextarea() {
+ var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none");
+ var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
+ // The textarea is kept positioned near the cursor to prevent the
+ // fact that it'll be scrolled into view on input from scrolling
+ // our fake cursor out of view. On webkit, when wrap=off, paste is
+ // very slow. So make the area wide instead.
+ if (webkit) { te.style.width = "1000px"; }
+ else { te.setAttribute("wrap", "off"); }
+ // If border: 0; -- iOS fails to open keyboard (issue #1287)
+ if (ios) { te.style.border = "1px solid black"; }
+ disableBrowserMagic(te);
+ return div
+}
+
+// The publicly visible API. Note that methodOp(f) means
+// 'wrap f in an operation, performed on its `this` parameter'.
+
+// This is not the complete set of editor methods. Most of the
+// methods defined on the Doc type are also injected into
+// CodeMirror.prototype, for backwards compatibility and
+// convenience.
+
+var addEditorMethods = function(CodeMirror) {
+ var optionHandlers = CodeMirror.optionHandlers;
+
+ var helpers = CodeMirror.helpers = {};
+
+ CodeMirror.prototype = {
+ constructor: CodeMirror,
+ focus: function(){window.focus(); this.display.input.focus();},
+
+ setOption: function(option, value) {
+ var options = this.options, old = options[option];
+ if (options[option] == value && option != "mode") { return }
+ options[option] = value;
+ if (optionHandlers.hasOwnProperty(option))
+ { operation(this, optionHandlers[option])(this, value, old); }
+ signal(this, "optionChange", this, option);
+ },
+
+ getOption: function(option) {return this.options[option]},
+ getDoc: function() {return this.doc},
+
+ addKeyMap: function(map$$1, bottom) {
+ this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map$$1));
+ },
+ removeKeyMap: function(map$$1) {
+ var maps = this.state.keyMaps;
+ for (var i = 0; i < maps.length; ++i)
+ { if (maps[i] == map$$1 || maps[i].name == map$$1) {
+ maps.splice(i, 1);
+ return true
+ } }
+ },
+
+ addOverlay: methodOp(function(spec, options) {
+ var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
+ if (mode.startState) { throw new Error("Overlays may not be stateful.") }
+ insertSorted(this.state.overlays,
+ {mode: mode, modeSpec: spec, opaque: options && options.opaque,
+ priority: (options && options.priority) || 0},
+ function (overlay) { return overlay.priority; });
+ this.state.modeGen++;
+ regChange(this);
+ }),
+ removeOverlay: methodOp(function(spec) {
+ var this$1 = this;
+
+ var overlays = this.state.overlays;
+ for (var i = 0; i < overlays.length; ++i) {
+ var cur = overlays[i].modeSpec;
+ if (cur == spec || typeof spec == "string" && cur.name == spec) {
+ overlays.splice(i, 1);
+ this$1.state.modeGen++;
+ regChange(this$1);
+ return
+ }
+ }
+ }),
+
+ indentLine: methodOp(function(n, dir, aggressive) {
+ if (typeof dir != "string" && typeof dir != "number") {
+ if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev"; }
+ else { dir = dir ? "add" : "subtract"; }
+ }
+ if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }
+ }),
+ indentSelection: methodOp(function(how) {
+ var this$1 = this;
+
+ var ranges = this.doc.sel.ranges, end = -1;
+ for (var i = 0; i < ranges.length; i++) {
+ var range$$1 = ranges[i];
+ if (!range$$1.empty()) {
+ var from = range$$1.from(), to = range$$1.to();
+ var start = Math.max(end, from.line);
+ end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;
+ for (var j = start; j < end; ++j)
+ { indentLine(this$1, j, how); }
+ var newRanges = this$1.doc.sel.ranges;
+ if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)
+ { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }
+ } else if (range$$1.head.line > end) {
+ indentLine(this$1, range$$1.head.line, how, true);
+ end = range$$1.head.line;
+ if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }
+ }
+ }
+ }),
+
+ // Fetch the parser token for a given character. Useful for hacks
+ // that want to inspect the mode state (say, for completion).
+ getTokenAt: function(pos, precise) {
+ return takeToken(this, pos, precise)
+ },
+
+ getLineTokens: function(line, precise) {
+ return takeToken(this, Pos(line), precise, true)
+ },
+
+ getTokenTypeAt: function(pos) {
+ pos = clipPos(this.doc, pos);
+ var styles = getLineStyles(this, getLine(this.doc, pos.line));
+ var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
+ var type;
+ if (ch == 0) { type = styles[2]; }
+ else { for (;;) {
+ var mid = (before + after) >> 1;
+ if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }
+ else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }
+ else { type = styles[mid * 2 + 2]; break }
+ } }
+ var cut = type ? type.indexOf("overlay ") : -1;
+ return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)
+ },
+
+ getModeAt: function(pos) {
+ var mode = this.doc.mode;
+ if (!mode.innerMode) { return mode }
+ return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode
+ },
+
+ getHelper: function(pos, type) {
+ return this.getHelpers(pos, type)[0]
+ },
+
+ getHelpers: function(pos, type) {
+ var this$1 = this;
+
+ var found = [];
+ if (!helpers.hasOwnProperty(type)) { return found }
+ var help = helpers[type], mode = this.getModeAt(pos);
+ if (typeof mode[type] == "string") {
+ if (help[mode[type]]) { found.push(help[mode[type]]); }
+ } else if (mode[type]) {
+ for (var i = 0; i < mode[type].length; i++) {
+ var val = help[mode[type][i]];
+ if (val) { found.push(val); }
+ }
+ } else if (mode.helperType && help[mode.helperType]) {
+ found.push(help[mode.helperType]);
+ } else if (help[mode.name]) {
+ found.push(help[mode.name]);
+ }
+ for (var i$1 = 0; i$1 < help._global.length; i$1++) {
+ var cur = help._global[i$1];
+ if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)
+ { found.push(cur.val); }
+ }
+ return found
+ },
+
+ getStateAfter: function(line, precise) {
+ var doc = this.doc;
+ line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);
+ return getContextBefore(this, line + 1, precise).state
+ },
+
+ cursorCoords: function(start, mode) {
+ var pos, range$$1 = this.doc.sel.primary();
+ if (start == null) { pos = range$$1.head; }
+ else if (typeof start == "object") { pos = clipPos(this.doc, start); }
+ else { pos = start ? range$$1.from() : range$$1.to(); }
+ return cursorCoords(this, pos, mode || "page")
+ },
+
+ charCoords: function(pos, mode) {
+ return charCoords(this, clipPos(this.doc, pos), mode || "page")
+ },
+
+ coordsChar: function(coords, mode) {
+ coords = fromCoordSystem(this, coords, mode || "page");
+ return coordsChar(this, coords.left, coords.top)
+ },
+
+ lineAtHeight: function(height, mode) {
+ height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top;
+ return lineAtHeight(this.doc, height + this.display.viewOffset)
+ },
+ heightAtLine: function(line, mode, includeWidgets) {
+ var end = false, lineObj;
+ if (typeof line == "number") {
+ var last = this.doc.first + this.doc.size - 1;
+ if (line < this.doc.first) { line = this.doc.first; }
+ else if (line > last) { line = last; end = true; }
+ lineObj = getLine(this.doc, line);
+ } else {
+ lineObj = line;
+ }
+ return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top +
+ (end ? this.doc.height - heightAtLine(lineObj) : 0)
+ },
+
+ defaultTextHeight: function() { return textHeight(this.display) },
+ defaultCharWidth: function() { return charWidth(this.display) },
+
+ getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},
+
+ addWidget: function(pos, node, scroll, vert, horiz) {
+ var display = this.display;
+ pos = cursorCoords(this, clipPos(this.doc, pos));
+ var top = pos.bottom, left = pos.left;
+ node.style.position = "absolute";
+ node.setAttribute("cm-ignore-events", "true");
+ this.display.input.setUneditable(node);
+ display.sizer.appendChild(node);
+ if (vert == "over") {
+ top = pos.top;
+ } else if (vert == "above" || vert == "near") {
+ var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),
+ hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
+ // Default to positioning above (if specified and possible); otherwise default to positioning below
+ if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)
+ { top = pos.top - node.offsetHeight; }
+ else if (pos.bottom + node.offsetHeight <= vspace)
+ { top = pos.bottom; }
+ if (left + node.offsetWidth > hspace)
+ { left = hspace - node.offsetWidth; }
+ }
+ node.style.top = top + "px";
+ node.style.left = node.style.right = "";
+ if (horiz == "right") {
+ left = display.sizer.clientWidth - node.offsetWidth;
+ node.style.right = "0px";
+ } else {
+ if (horiz == "left") { left = 0; }
+ else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }
+ node.style.left = left + "px";
+ }
+ if (scroll)
+ { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }
+ },
+
+ triggerOnKeyDown: methodOp(onKeyDown),
+ triggerOnKeyPress: methodOp(onKeyPress),
+ triggerOnKeyUp: onKeyUp,
+ triggerOnMouseDown: methodOp(onMouseDown),
+
+ execCommand: function(cmd) {
+ if (commands.hasOwnProperty(cmd))
+ { return commands[cmd].call(null, this) }
+ },
+
+ triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),
+
+ findPosH: function(from, amount, unit, visually) {
+ var this$1 = this;
+
+ var dir = 1;
+ if (amount < 0) { dir = -1; amount = -amount; }
+ var cur = clipPos(this.doc, from);
+ for (var i = 0; i < amount; ++i) {
+ cur = findPosH(this$1.doc, cur, dir, unit, visually);
+ if (cur.hitSide) { break }
+ }
+ return cur
+ },
+
+ moveH: methodOp(function(dir, unit) {
+ var this$1 = this;
+
+ this.extendSelectionsBy(function (range$$1) {
+ if (this$1.display.shift || this$1.doc.extend || range$$1.empty())
+ { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }
+ else
+ { return dir < 0 ? range$$1.from() : range$$1.to() }
+ }, sel_move);
+ }),
+
+ deleteH: methodOp(function(dir, unit) {
+ var sel = this.doc.sel, doc = this.doc;
+ if (sel.somethingSelected())
+ { doc.replaceSelection("", null, "+delete"); }
+ else
+ { deleteNearSelection(this, function (range$$1) {
+ var other = findPosH(doc, range$$1.head, dir, unit, false);
+ return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}
+ }); }
+ }),
+
+ findPosV: function(from, amount, unit, goalColumn) {
+ var this$1 = this;
+
+ var dir = 1, x = goalColumn;
+ if (amount < 0) { dir = -1; amount = -amount; }
+ var cur = clipPos(this.doc, from);
+ for (var i = 0; i < amount; ++i) {
+ var coords = cursorCoords(this$1, cur, "div");
+ if (x == null) { x = coords.left; }
+ else { coords.left = x; }
+ cur = findPosV(this$1, coords, dir, unit);
+ if (cur.hitSide) { break }
+ }
+ return cur
+ },
+
+ moveV: methodOp(function(dir, unit) {
+ var this$1 = this;
+
+ var doc = this.doc, goals = [];
+ var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();
+ doc.extendSelectionsBy(function (range$$1) {
+ if (collapse)
+ { return dir < 0 ? range$$1.from() : range$$1.to() }
+ var headPos = cursorCoords(this$1, range$$1.head, "div");
+ if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }
+ goals.push(headPos.left);
+ var pos = findPosV(this$1, headPos, dir, unit);
+ if (unit == "page" && range$$1 == doc.sel.primary())
+ { addToScrollTop(this$1, charCoords(this$1, pos, "div").top - headPos.top); }
+ return pos
+ }, sel_move);
+ if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)
+ { doc.sel.ranges[i].goalColumn = goals[i]; } }
+ }),
+
+ // Find the word at the given position (as returned by coordsChar).
+ findWordAt: function(pos) {
+ var doc = this.doc, line = getLine(doc, pos.line).text;
+ var start = pos.ch, end = pos.ch;
+ if (line) {
+ var helper = this.getHelper(pos, "wordChars");
+ if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end; }
+ var startChar = line.charAt(start);
+ var check = isWordChar(startChar, helper)
+ ? function (ch) { return isWordChar(ch, helper); }
+ : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); }
+ : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); };
+ while (start > 0 && check(line.charAt(start - 1))) { --start; }
+ while (end < line.length && check(line.charAt(end))) { ++end; }
+ }
+ return new Range(Pos(pos.line, start), Pos(pos.line, end))
+ },
+
+ toggleOverwrite: function(value) {
+ if (value != null && value == this.state.overwrite) { return }
+ if (this.state.overwrite = !this.state.overwrite)
+ { addClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
+ else
+ { rmClass(this.display.cursorDiv, "CodeMirror-overwrite"); }
+
+ signal(this, "overwriteToggle", this, this.state.overwrite);
+ },
+ hasFocus: function() { return this.display.input.getField() == activeElt() },
+ isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },
+
+ scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),
+ getScrollInfo: function() {
+ var scroller = this.display.scroller;
+ return {left: scroller.scrollLeft, top: scroller.scrollTop,
+ height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
+ width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
+ clientHeight: displayHeight(this), clientWidth: displayWidth(this)}
+ },
+
+ scrollIntoView: methodOp(function(range$$1, margin) {
+ if (range$$1 == null) {
+ range$$1 = {from: this.doc.sel.primary().head, to: null};
+ if (margin == null) { margin = this.options.cursorScrollMargin; }
+ } else if (typeof range$$1 == "number") {
+ range$$1 = {from: Pos(range$$1, 0), to: null};
+ } else if (range$$1.from == null) {
+ range$$1 = {from: range$$1, to: null};
+ }
+ if (!range$$1.to) { range$$1.to = range$$1.from; }
+ range$$1.margin = margin || 0;
+
+ if (range$$1.from.line != null) {
+ scrollToRange(this, range$$1);
+ } else {
+ scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);
+ }
+ }),
+
+ setSize: methodOp(function(width, height) {
+ var this$1 = this;
+
+ var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; };
+ if (width != null) { this.display.wrapper.style.width = interpret(width); }
+ if (height != null) { this.display.wrapper.style.height = interpret(height); }
+ if (this.options.lineWrapping) { clearLineMeasurementCache(this); }
+ var lineNo$$1 = this.display.viewFrom;
+ this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {
+ if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)
+ { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, "widget"); break } } }
+ ++lineNo$$1;
+ });
+ this.curOp.forceUpdate = true;
+ signal(this, "refresh", this);
+ }),
+
+ operation: function(f){return runInOp(this, f)},
+ startOperation: function(){return startOperation(this)},
+ endOperation: function(){return endOperation(this)},
+
+ refresh: methodOp(function() {
+ var oldHeight = this.display.cachedTextHeight;
+ regChange(this);
+ this.curOp.forceUpdate = true;
+ clearCaches(this);
+ scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);
+ updateGutterSpace(this);
+ if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)
+ { estimateLineHeights(this); }
+ signal(this, "refresh", this);
+ }),
+
+ swapDoc: methodOp(function(doc) {
+ var old = this.doc;
+ old.cm = null;
+ attachDoc(this, doc);
+ clearCaches(this);
+ this.display.input.reset();
+ scrollToCoords(this, doc.scrollLeft, doc.scrollTop);
+ this.curOp.forceScroll = true;
+ signalLater(this, "swapDoc", this, old);
+ return old
+ }),
+
+ getInputField: function(){return this.display.input.getField()},
+ getWrapperElement: function(){return this.display.wrapper},
+ getScrollerElement: function(){return this.display.scroller},
+ getGutterElement: function(){return this.display.gutters}
+ };
+ eventMixin(CodeMirror);
+
+ CodeMirror.registerHelper = function(type, name, value) {
+ if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }
+ helpers[type][name] = value;
+ };
+ CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {
+ CodeMirror.registerHelper(type, name, value);
+ helpers[type]._global.push({pred: predicate, val: value});
+ };
+};
+
+// Used for horizontal relative motion. Dir is -1 or 1 (left or
+// right), unit can be "char", "column" (like char, but doesn't
+// cross line boundaries), "word" (across next word), or "group" (to
+// the start of next group of word or non-word-non-whitespace
+// chars). The visually param controls whether, in right-to-left
+// text, direction 1 means to move towards the next index in the
+// string, or towards the character to the right of the current
+// position. The resulting position will have a hitSide=true
+// property if it reached the end of the document.
+function findPosH(doc, pos, dir, unit, visually) {
+ var oldPos = pos;
+ var origDir = dir;
+ var lineObj = getLine(doc, pos.line);
+ function findNextLine() {
+ var l = pos.line + dir;
+ if (l < doc.first || l >= doc.first + doc.size) { return false }
+ pos = new Pos(l, pos.ch, pos.sticky);
+ return lineObj = getLine(doc, l)
+ }
+ function moveOnce(boundToLine) {
+ var next;
+ if (visually) {
+ next = moveVisually(doc.cm, lineObj, pos, dir);
+ } else {
+ next = moveLogically(lineObj, pos, dir);
+ }
+ if (next == null) {
+ if (!boundToLine && findNextLine())
+ { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }
+ else
+ { return false }
+ } else {
+ pos = next;
+ }
+ return true
+ }
+
+ if (unit == "char") {
+ moveOnce();
+ } else if (unit == "column") {
+ moveOnce(true);
+ } else if (unit == "word" || unit == "group") {
+ var sawType = null, group = unit == "group";
+ var helper = doc.cm && doc.cm.getHelper(pos, "wordChars");
+ for (var first = true;; first = false) {
+ if (dir < 0 && !moveOnce(!first)) { break }
+ var cur = lineObj.text.charAt(pos.ch) || "\n";
+ var type = isWordChar(cur, helper) ? "w"
+ : group && cur == "\n" ? "n"
+ : !group || /\s/.test(cur) ? null
+ : "p";
+ if (group && !first && !type) { type = "s"; }
+ if (sawType && sawType != type) {
+ if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after";}
+ break
+ }
+
+ if (type) { sawType = type; }
+ if (dir > 0 && !moveOnce(!first)) { break }
+ }
+ }
+ var result = skipAtomic(doc, pos, oldPos, origDir, true);
+ if (equalCursorPos(oldPos, result)) { result.hitSide = true; }
+ return result
+}
+
+// For relative vertical movement. Dir may be -1 or 1. Unit can be
+// "page" or "line". The resulting position will have a hitSide=true
+// property if it reached the end of the document.
+function findPosV(cm, pos, dir, unit) {
+ var doc = cm.doc, x = pos.left, y;
+ if (unit == "page") {
+ var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);
+ var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);
+ y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;
+
+ } else if (unit == "line") {
+ y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
+ }
+ var target;
+ for (;;) {
+ target = coordsChar(cm, x, y);
+ if (!target.outside) { break }
+ if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }
+ y += dir * 5;
+ }
+ return target
+}
+
+// CONTENTEDITABLE INPUT STYLE
+
+var ContentEditableInput = function(cm) {
+ this.cm = cm;
+ this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;
+ this.polling = new Delayed();
+ this.composing = null;
+ this.gracePeriod = false;
+ this.readDOMTimeout = null;
+};
+
+ContentEditableInput.prototype.init = function (display) {
+ var this$1 = this;
+
+ var input = this, cm = input.cm;
+ var div = input.div = display.lineDiv;
+ disableBrowserMagic(div, cm.options.spellcheck);
+
+ on(div, "paste", function (e) {
+ if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+ // IE doesn't fire input events, so we schedule a read for the pasted content in this way
+ if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }
+ });
+
+ on(div, "compositionstart", function (e) {
+ this$1.composing = {data: e.data, done: false};
+ });
+ on(div, "compositionupdate", function (e) {
+ if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }
+ });
+ on(div, "compositionend", function (e) {
+ if (this$1.composing) {
+ if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }
+ this$1.composing.done = true;
+ }
+ });
+
+ on(div, "touchstart", function () { return input.forceCompositionEnd(); });
+
+ on(div, "input", function () {
+ if (!this$1.composing) { this$1.readFromDOMSoon(); }
+ });
+
+ function onCopyCut(e) {
+ if (signalDOMEvent(cm, e)) { return }
+ if (cm.somethingSelected()) {
+ setLastCopied({lineWise: false, text: cm.getSelections()});
+ if (e.type == "cut") { cm.replaceSelection("", null, "cut"); }
+ } else if (!cm.options.lineWiseCopyCut) {
+ return
+ } else {
+ var ranges = copyableRanges(cm);
+ setLastCopied({lineWise: true, text: ranges.text});
+ if (e.type == "cut") {
+ cm.operation(function () {
+ cm.setSelections(ranges.ranges, 0, sel_dontScroll);
+ cm.replaceSelection("", null, "cut");
+ });
+ }
+ }
+ if (e.clipboardData) {
+ e.clipboardData.clearData();
+ var content = lastCopied.text.join("\n");
+ // iOS exposes the clipboard API, but seems to discard content inserted into it
+ e.clipboardData.setData("Text", content);
+ if (e.clipboardData.getData("Text") == content) {
+ e.preventDefault();
+ return
+ }
+ }
+ // Old-fashioned briefly-focus-a-textarea hack
+ var kludge = hiddenTextarea(), te = kludge.firstChild;
+ cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
+ te.value = lastCopied.text.join("\n");
+ var hadFocus = document.activeElement;
+ selectInput(te);
+ setTimeout(function () {
+ cm.display.lineSpace.removeChild(kludge);
+ hadFocus.focus();
+ if (hadFocus == div) { input.showPrimarySelection(); }
+ }, 50);
+ }
+ on(div, "copy", onCopyCut);
+ on(div, "cut", onCopyCut);
+};
+
+ContentEditableInput.prototype.prepareSelection = function () {
+ var result = prepareSelection(this.cm, false);
+ result.focus = this.cm.state.focused;
+ return result
+};
+
+ContentEditableInput.prototype.showSelection = function (info, takeFocus) {
+ if (!info || !this.cm.display.view.length) { return }
+ if (info.focus || takeFocus) { this.showPrimarySelection(); }
+ this.showMultipleSelections(info);
+};
+
+ContentEditableInput.prototype.getSelection = function () {
+ return this.cm.display.wrapper.ownerDocument.getSelection()
+};
+
+ContentEditableInput.prototype.showPrimarySelection = function () {
+ var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();
+ var from = prim.from(), to = prim.to();
+
+ if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
+ sel.removeAllRanges();
+ return
+ }
+
+ var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
+ var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);
+ if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&
+ cmp(minPos(curAnchor, curFocus), from) == 0 &&
+ cmp(maxPos(curAnchor, curFocus), to) == 0)
+ { return }
+
+ var view = cm.display.view;
+ var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||
+ {node: view[0].measure.map[2], offset: 0};
+ var end = to.line < cm.display.viewTo && posToDOM(cm, to);
+ if (!end) {
+ var measure = view[view.length - 1].measure;
+ var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;
+ end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};
+ }
+
+ if (!start || !end) {
+ sel.removeAllRanges();
+ return
+ }
+
+ var old = sel.rangeCount && sel.getRangeAt(0), rng;
+ try { rng = range(start.node, start.offset, end.offset, end.node); }
+ catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible
+ if (rng) {
+ if (!gecko && cm.state.focused) {
+ sel.collapse(start.node, start.offset);
+ if (!rng.collapsed) {
+ sel.removeAllRanges();
+ sel.addRange(rng);
+ }
+ } else {
+ sel.removeAllRanges();
+ sel.addRange(rng);
+ }
+ if (old && sel.anchorNode == null) { sel.addRange(old); }
+ else if (gecko) { this.startGracePeriod(); }
+ }
+ this.rememberSelection();
+};
+
+ContentEditableInput.prototype.startGracePeriod = function () {
+ var this$1 = this;
+
+ clearTimeout(this.gracePeriod);
+ this.gracePeriod = setTimeout(function () {
+ this$1.gracePeriod = false;
+ if (this$1.selectionChanged())
+ { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }
+ }, 20);
+};
+
+ContentEditableInput.prototype.showMultipleSelections = function (info) {
+ removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);
+ removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);
+};
+
+ContentEditableInput.prototype.rememberSelection = function () {
+ var sel = this.getSelection();
+ this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;
+ this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;
+};
+
+ContentEditableInput.prototype.selectionInEditor = function () {
+ var sel = this.getSelection();
+ if (!sel.rangeCount) { return false }
+ var node = sel.getRangeAt(0).commonAncestorContainer;
+ return contains(this.div, node)
+};
+
+ContentEditableInput.prototype.focus = function () {
+ if (this.cm.options.readOnly != "nocursor") {
+ if (!this.selectionInEditor())
+ { this.showSelection(this.prepareSelection(), true); }
+ this.div.focus();
+ }
+};
+ContentEditableInput.prototype.blur = function () { this.div.blur(); };
+ContentEditableInput.prototype.getField = function () { return this.div };
+
+ContentEditableInput.prototype.supportsTouch = function () { return true };
+
+ContentEditableInput.prototype.receivedFocus = function () {
+ var input = this;
+ if (this.selectionInEditor())
+ { this.pollSelection(); }
+ else
+ { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }
+
+ function poll() {
+ if (input.cm.state.focused) {
+ input.pollSelection();
+ input.polling.set(input.cm.options.pollInterval, poll);
+ }
+ }
+ this.polling.set(this.cm.options.pollInterval, poll);
+};
+
+ContentEditableInput.prototype.selectionChanged = function () {
+ var sel = this.getSelection();
+ return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||
+ sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset
+};
+
+ContentEditableInput.prototype.pollSelection = function () {
+ if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }
+ var sel = this.getSelection(), cm = this.cm;
+ // On Android Chrome (version 56, at least), backspacing into an
+ // uneditable block element will put the cursor in that element,
+ // and then, because it's not editable, hide the virtual keyboard.
+ // Because Android doesn't allow us to actually detect backspace
+ // presses in a sane way, this code checks for when that happens
+ // and simulates a backspace press in this case.
+ if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {
+ this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs});
+ this.blur();
+ this.focus();
+ return
+ }
+ if (this.composing) { return }
+ this.rememberSelection();
+ var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
+ var head = domToPos(cm, sel.focusNode, sel.focusOffset);
+ if (anchor && head) { runInOp(cm, function () {
+ setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);
+ if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }
+ }); }
+};
+
+ContentEditableInput.prototype.pollContent = function () {
+ if (this.readDOMTimeout != null) {
+ clearTimeout(this.readDOMTimeout);
+ this.readDOMTimeout = null;
+ }
+
+ var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();
+ var from = sel.from(), to = sel.to();
+ if (from.ch == 0 && from.line > cm.firstLine())
+ { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }
+ if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())
+ { to = Pos(to.line + 1, 0); }
+ if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }
+
+ var fromIndex, fromLine, fromNode;
+ if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
+ fromLine = lineNo(display.view[0].line);
+ fromNode = display.view[0].node;
+ } else {
+ fromLine = lineNo(display.view[fromIndex].line);
+ fromNode = display.view[fromIndex - 1].node.nextSibling;
+ }
+ var toIndex = findViewIndex(cm, to.line);
+ var toLine, toNode;
+ if (toIndex == display.view.length - 1) {
+ toLine = display.viewTo - 1;
+ toNode = display.lineDiv.lastChild;
+ } else {
+ toLine = lineNo(display.view[toIndex + 1].line) - 1;
+ toNode = display.view[toIndex + 1].node.previousSibling;
+ }
+
+ if (!fromNode) { return false }
+ var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));
+ var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));
+ while (newText.length > 1 && oldText.length > 1) {
+ if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }
+ else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }
+ else { break }
+ }
+
+ var cutFront = 0, cutEnd = 0;
+ var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);
+ while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))
+ { ++cutFront; }
+ var newBot = lst(newText), oldBot = lst(oldText);
+ var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),
+ oldBot.length - (oldText.length == 1 ? cutFront : 0));
+ while (cutEnd < maxCutEnd &&
+ newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))
+ { ++cutEnd; }
+ // Try to move start of change to start of selection if ambiguous
+ if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {
+ while (cutFront && cutFront > from.ch &&
+ newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
+ cutFront--;
+ cutEnd++;
+ }
+ }
+
+ newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "");
+ newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "");
+
+ var chFrom = Pos(fromLine, cutFront);
+ var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);
+ if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
+ replaceRange(cm.doc, newText, chFrom, chTo, "+input");
+ return true
+ }
+};
+
+ContentEditableInput.prototype.ensurePolled = function () {
+ this.forceCompositionEnd();
+};
+ContentEditableInput.prototype.reset = function () {
+ this.forceCompositionEnd();
+};
+ContentEditableInput.prototype.forceCompositionEnd = function () {
+ if (!this.composing) { return }
+ clearTimeout(this.readDOMTimeout);
+ this.composing = null;
+ this.updateFromDOM();
+ this.div.blur();
+ this.div.focus();
+};
+ContentEditableInput.prototype.readFromDOMSoon = function () {
+ var this$1 = this;
+
+ if (this.readDOMTimeout != null) { return }
+ this.readDOMTimeout = setTimeout(function () {
+ this$1.readDOMTimeout = null;
+ if (this$1.composing) {
+ if (this$1.composing.done) { this$1.composing = null; }
+ else { return }
+ }
+ this$1.updateFromDOM();
+ }, 80);
+};
+
+ContentEditableInput.prototype.updateFromDOM = function () {
+ var this$1 = this;
+
+ if (this.cm.isReadOnly() || !this.pollContent())
+ { runInOp(this.cm, function () { return regChange(this$1.cm); }); }
+};
+
+ContentEditableInput.prototype.setUneditable = function (node) {
+ node.contentEditable = "false";
+};
+
+ContentEditableInput.prototype.onKeyPress = function (e) {
+ if (e.charCode == 0 || this.composing) { return }
+ e.preventDefault();
+ if (!this.cm.isReadOnly())
+ { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }
+};
+
+ContentEditableInput.prototype.readOnlyChanged = function (val) {
+ this.div.contentEditable = String(val != "nocursor");
+};
+
+ContentEditableInput.prototype.onContextMenu = function () {};
+ContentEditableInput.prototype.resetPosition = function () {};
+
+ContentEditableInput.prototype.needsContentAttribute = true;
+
+function posToDOM(cm, pos) {
+ var view = findViewForLine(cm, pos.line);
+ if (!view || view.hidden) { return null }
+ var line = getLine(cm.doc, pos.line);
+ var info = mapFromLineView(view, line, pos.line);
+
+ var order = getOrder(line, cm.doc.direction), side = "left";
+ if (order) {
+ var partPos = getBidiPartAt(order, pos.ch);
+ side = partPos % 2 ? "right" : "left";
+ }
+ var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);
+ result.offset = result.collapse == "right" ? result.end : result.start;
+ return result
+}
+
+function isInGutter(node) {
+ for (var scan = node; scan; scan = scan.parentNode)
+ { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }
+ return false
+}
+
+function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }
+
+function domTextBetween(cm, from, to, fromLine, toLine) {
+ var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;
+ function recognizeMarker(id) { return function (marker) { return marker.id == id; } }
+ function close() {
+ if (closing) {
+ text += lineSep;
+ if (extraLinebreak) { text += lineSep; }
+ closing = extraLinebreak = false;
+ }
+ }
+ function addText(str) {
+ if (str) {
+ close();
+ text += str;
+ }
+ }
+ function walk(node) {
+ if (node.nodeType == 1) {
+ var cmText = node.getAttribute("cm-text");
+ if (cmText) {
+ addText(cmText);
+ return
+ }
+ var markerID = node.getAttribute("cm-marker"), range$$1;
+ if (markerID) {
+ var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));
+ if (found.length && (range$$1 = found[0].find(0)))
+ { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }
+ return
+ }
+ if (node.getAttribute("contenteditable") == "false") { return }
+ var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);
+ if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }
+
+ if (isBlock) { close(); }
+ for (var i = 0; i < node.childNodes.length; i++)
+ { walk(node.childNodes[i]); }
+
+ if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }
+ if (isBlock) { closing = true; }
+ } else if (node.nodeType == 3) {
+ addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
+ }
+ }
+ for (;;) {
+ walk(from);
+ if (from == to) { break }
+ from = from.nextSibling;
+ extraLinebreak = false;
+ }
+ return text
+}
+
+function domToPos(cm, node, offset) {
+ var lineNode;
+ if (node == cm.display.lineDiv) {
+ lineNode = cm.display.lineDiv.childNodes[offset];
+ if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }
+ node = null; offset = 0;
+ } else {
+ for (lineNode = node;; lineNode = lineNode.parentNode) {
+ if (!lineNode || lineNode == cm.display.lineDiv) { return null }
+ if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }
+ }
+ }
+ for (var i = 0; i < cm.display.view.length; i++) {
+ var lineView = cm.display.view[i];
+ if (lineView.node == lineNode)
+ { return locateNodeInLineView(lineView, node, offset) }
+ }
+}
+
+function locateNodeInLineView(lineView, node, offset) {
+ var wrapper = lineView.text.firstChild, bad = false;
+ if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }
+ if (node == wrapper) {
+ bad = true;
+ node = wrapper.childNodes[offset];
+ offset = 0;
+ if (!node) {
+ var line = lineView.rest ? lst(lineView.rest) : lineView.line;
+ return badPos(Pos(lineNo(line), line.text.length), bad)
+ }
+ }
+
+ var textNode = node.nodeType == 3 ? node : null, topNode = node;
+ if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
+ textNode = node.firstChild;
+ if (offset) { offset = textNode.nodeValue.length; }
+ }
+ while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }
+ var measure = lineView.measure, maps = measure.maps;
+
+ function find(textNode, topNode, offset) {
+ for (var i = -1; i < (maps ? maps.length : 0); i++) {
+ var map$$1 = i < 0 ? measure.map : maps[i];
+ for (var j = 0; j < map$$1.length; j += 3) {
+ var curNode = map$$1[j + 2];
+ if (curNode == textNode || curNode == topNode) {
+ var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);
+ var ch = map$$1[j] + offset;
+ if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }
+ return Pos(line, ch)
+ }
+ }
+ }
+ }
+ var found = find(textNode, topNode, offset);
+ if (found) { return badPos(found, bad) }
+
+ // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems
+ for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
+ found = find(after, after.firstChild, 0);
+ if (found)
+ { return badPos(Pos(found.line, found.ch - dist), bad) }
+ else
+ { dist += after.textContent.length; }
+ }
+ for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
+ found = find(before, before.firstChild, -1);
+ if (found)
+ { return badPos(Pos(found.line, found.ch + dist$1), bad) }
+ else
+ { dist$1 += before.textContent.length; }
+ }
+}
+
+// TEXTAREA INPUT STYLE
+
+var TextareaInput = function(cm) {
+ this.cm = cm;
+ // See input.poll and input.reset
+ this.prevInput = "";
+
+ // Flag that indicates whether we expect input to appear real soon
+ // now (after some event like 'keypress' or 'input') and are
+ // polling intensively.
+ this.pollingFast = false;
+ // Self-resetting timeout for the poller
+ this.polling = new Delayed();
+ // Used to work around IE issue with selection being forgotten when focus moves away from textarea
+ this.hasSelection = false;
+ this.composing = null;
+};
+
+TextareaInput.prototype.init = function (display) {
+ var this$1 = this;
+
+ var input = this, cm = this.cm;
+ this.createField(display);
+ var te = this.textarea;
+
+ display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);
+
+ // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)
+ if (ios) { te.style.width = "0px"; }
+
+ on(te, "input", function () {
+ if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }
+ input.poll();
+ });
+
+ on(te, "paste", function (e) {
+ if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }
+
+ cm.state.pasteIncoming = true;
+ input.fastPoll();
+ });
+
+ function prepareCopyCut(e) {
+ if (signalDOMEvent(cm, e)) { return }
+ if (cm.somethingSelected()) {
+ setLastCopied({lineWise: false, text: cm.getSelections()});
+ } else if (!cm.options.lineWiseCopyCut) {
+ return
+ } else {
+ var ranges = copyableRanges(cm);
+ setLastCopied({lineWise: true, text: ranges.text});
+ if (e.type == "cut") {
+ cm.setSelections(ranges.ranges, null, sel_dontScroll);
+ } else {
+ input.prevInput = "";
+ te.value = ranges.text.join("\n");
+ selectInput(te);
+ }
+ }
+ if (e.type == "cut") { cm.state.cutIncoming = true; }
+ }
+ on(te, "cut", prepareCopyCut);
+ on(te, "copy", prepareCopyCut);
+
+ on(display.scroller, "paste", function (e) {
+ if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }
+ cm.state.pasteIncoming = true;
+ input.focus();
+ });
+
+ // Prevent normal selection in the editor (we handle our own)
+ on(display.lineSpace, "selectstart", function (e) {
+ if (!eventInWidget(display, e)) { e_preventDefault(e); }
+ });
+
+ on(te, "compositionstart", function () {
+ var start = cm.getCursor("from");
+ if (input.composing) { input.composing.range.clear(); }
+ input.composing = {
+ start: start,
+ range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"})
+ };
+ });
+ on(te, "compositionend", function () {
+ if (input.composing) {
+ input.poll();
+ input.composing.range.clear();
+ input.composing = null;
+ }
+ });
+};
+
+TextareaInput.prototype.createField = function (_display) {
+ // Wraps and hides input textarea
+ this.wrapper = hiddenTextarea();
+ // The semihidden textarea that is focused when the editor is
+ // focused, and receives input.
+ this.textarea = this.wrapper.firstChild;
+};
+
+TextareaInput.prototype.prepareSelection = function () {
+ // Redraw the selection and/or cursor
+ var cm = this.cm, display = cm.display, doc = cm.doc;
+ var result = prepareSelection(cm);
+
+ // Move the hidden textarea near the cursor to prevent scrolling artifacts
+ if (cm.options.moveInputWithCursor) {
+ var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
+ var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
+ result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,
+ headPos.top + lineOff.top - wrapOff.top));
+ result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,
+ headPos.left + lineOff.left - wrapOff.left));
+ }
+
+ return result
+};
+
+TextareaInput.prototype.showSelection = function (drawn) {
+ var cm = this.cm, display = cm.display;
+ removeChildrenAndAdd(display.cursorDiv, drawn.cursors);
+ removeChildrenAndAdd(display.selectionDiv, drawn.selection);
+ if (drawn.teTop != null) {
+ this.wrapper.style.top = drawn.teTop + "px";
+ this.wrapper.style.left = drawn.teLeft + "px";
+ }
+};
+
+// Reset the input to correspond to the selection (or to be empty,
+// when not typing and nothing is selected)
+TextareaInput.prototype.reset = function (typing) {
+ if (this.contextMenuPending || this.composing) { return }
+ var cm = this.cm;
+ if (cm.somethingSelected()) {
+ this.prevInput = "";
+ var content = cm.getSelection();
+ this.textarea.value = content;
+ if (cm.state.focused) { selectInput(this.textarea); }
+ if (ie && ie_version >= 9) { this.hasSelection = content; }
+ } else if (!typing) {
+ this.prevInput = this.textarea.value = "";
+ if (ie && ie_version >= 9) { this.hasSelection = null; }
+ }
+};
+
+TextareaInput.prototype.getField = function () { return this.textarea };
+
+TextareaInput.prototype.supportsTouch = function () { return false };
+
+TextareaInput.prototype.focus = function () {
+ if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) {
+ try { this.textarea.focus(); }
+ catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM
+ }
+};
+
+TextareaInput.prototype.blur = function () { this.textarea.blur(); };
+
+TextareaInput.prototype.resetPosition = function () {
+ this.wrapper.style.top = this.wrapper.style.left = 0;
+};
+
+TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };
+
+// Poll for input changes, using the normal rate of polling. This
+// runs as long as the editor is focused.
+TextareaInput.prototype.slowPoll = function () {
+ var this$1 = this;
+
+ if (this.pollingFast) { return }
+ this.polling.set(this.cm.options.pollInterval, function () {
+ this$1.poll();
+ if (this$1.cm.state.focused) { this$1.slowPoll(); }
+ });
+};
+
+// When an event has just come in that is likely to add or change
+// something in the input textarea, we poll faster, to ensure that
+// the change appears on the screen quickly.
+TextareaInput.prototype.fastPoll = function () {
+ var missed = false, input = this;
+ input.pollingFast = true;
+ function p() {
+ var changed = input.poll();
+ if (!changed && !missed) {missed = true; input.polling.set(60, p);}
+ else {input.pollingFast = false; input.slowPoll();}
+ }
+ input.polling.set(20, p);
+};
+
+// Read input from the textarea, and update the document to match.
+// When something is selected, it is present in the textarea, and
+// selected (unless it is huge, in which case a placeholder is
+// used). When nothing is selected, the cursor sits after previously
+// seen text (can be empty), which is stored in prevInput (we must
+// not reset the textarea when typing, because that breaks IME).
+TextareaInput.prototype.poll = function () {
+ var this$1 = this;
+
+ var cm = this.cm, input = this.textarea, prevInput = this.prevInput;
+ // Since this is called a *lot*, try to bail out as cheaply as
+ // possible when it is clear that nothing happened. hasSelection
+ // will be the case when there is a lot of text in the textarea,
+ // in which case reading its value would be expensive.
+ if (this.contextMenuPending || !cm.state.focused ||
+ (hasSelection(input) && !prevInput && !this.composing) ||
+ cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)
+ { return false }
+
+ var text = input.value;
+ // If nothing changed, bail.
+ if (text == prevInput && !cm.somethingSelected()) { return false }
+ // Work around nonsensical selection resetting in IE9/10, and
+ // inexplicable appearance of private area unicode characters on
+ // some key combos in Mac (#2689).
+ if (ie && ie_version >= 9 && this.hasSelection === text ||
+ mac && /[\uf700-\uf7ff]/.test(text)) {
+ cm.display.input.reset();
+ return false
+ }
+
+ if (cm.doc.sel == cm.display.selForContextMenu) {
+ var first = text.charCodeAt(0);
+ if (first == 0x200b && !prevInput) { prevInput = "\u200b"; }
+ if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") }
+ }
+ // Find the part of the input that is actually new
+ var same = 0, l = Math.min(prevInput.length, text.length);
+ while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }
+
+ runInOp(cm, function () {
+ applyTextInput(cm, text.slice(same), prevInput.length - same,
+ null, this$1.composing ? "*compose" : null);
+
+ // Don't leave long text in the textarea, since it makes further polling slow
+ if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = ""; }
+ else { this$1.prevInput = text; }
+
+ if (this$1.composing) {
+ this$1.composing.range.clear();
+ this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"),
+ {className: "CodeMirror-composing"});
+ }
+ });
+ return true
+};
+
+TextareaInput.prototype.ensurePolled = function () {
+ if (this.pollingFast && this.poll()) { this.pollingFast = false; }
+};
+
+TextareaInput.prototype.onKeyPress = function () {
+ if (ie && ie_version >= 9) { this.hasSelection = null; }
+ this.fastPoll();
+};
+
+TextareaInput.prototype.onContextMenu = function (e) {
+ var input = this, cm = input.cm, display = cm.display, te = input.textarea;
+ var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
+ if (!pos || presto) { return } // Opera is difficult.
+
+ // Reset the current text selection only if the click is done outside of the selection
+ // and 'resetSelectionOnContextMenu' option is true.
+ var reset = cm.options.resetSelectionOnContextMenu;
+ if (reset && cm.doc.sel.contains(pos) == -1)
+ { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }
+
+ var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;
+ input.wrapper.style.cssText = "position: absolute";
+ var wrapperBox = input.wrapper.getBoundingClientRect();
+ te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";
+ var oldScrollY;
+ if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)
+ display.input.focus();
+ if (webkit) { window.scrollTo(null, oldScrollY); }
+ display.input.reset();
+ // Adds "Select all" to context menu in FF
+ if (!cm.somethingSelected()) { te.value = input.prevInput = " "; }
+ input.contextMenuPending = true;
+ display.selForContextMenu = cm.doc.sel;
+ clearTimeout(display.detectingSelectAll);
+
+ // Select-all will be greyed out if there's nothing to select, so
+ // this adds a zero-width space so that we can later check whether
+ // it got selected.
+ function prepareSelectAllHack() {
+ if (te.selectionStart != null) {
+ var selected = cm.somethingSelected();
+ var extval = "\u200b" + (selected ? te.value : "");
+ te.value = "\u21da"; // Used to catch context-menu undo
+ te.value = extval;
+ input.prevInput = selected ? "" : "\u200b";
+ te.selectionStart = 1; te.selectionEnd = extval.length;
+ // Re-set this, in case some other handler touched the
+ // selection in the meantime.
+ display.selForContextMenu = cm.doc.sel;
+ }
+ }
+ function rehide() {
+ input.contextMenuPending = false;
+ input.wrapper.style.cssText = oldWrapperCSS;
+ te.style.cssText = oldCSS;
+ if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }
+
+ // Try to detect the user choosing select-all
+ if (te.selectionStart != null) {
+ if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }
+ var i = 0, poll = function () {
+ if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&
+ te.selectionEnd > 0 && input.prevInput == "\u200b") {
+ operation(cm, selectAll)(cm);
+ } else if (i++ < 10) {
+ display.detectingSelectAll = setTimeout(poll, 500);
+ } else {
+ display.selForContextMenu = null;
+ display.input.reset();
+ }
+ };
+ display.detectingSelectAll = setTimeout(poll, 200);
+ }
+ }
+
+ if (ie && ie_version >= 9) { prepareSelectAllHack(); }
+ if (captureRightClick) {
+ e_stop(e);
+ var mouseup = function () {
+ off(window, "mouseup", mouseup);
+ setTimeout(rehide, 20);
+ };
+ on(window, "mouseup", mouseup);
+ } else {
+ setTimeout(rehide, 50);
+ }
+};
+
+TextareaInput.prototype.readOnlyChanged = function (val) {
+ if (!val) { this.reset(); }
+ this.textarea.disabled = val == "nocursor";
+};
+
+TextareaInput.prototype.setUneditable = function () {};
+
+TextareaInput.prototype.needsContentAttribute = false;
+
+function fromTextArea(textarea, options) {
+ options = options ? copyObj(options) : {};
+ options.value = textarea.value;
+ if (!options.tabindex && textarea.tabIndex)
+ { options.tabindex = textarea.tabIndex; }
+ if (!options.placeholder && textarea.placeholder)
+ { options.placeholder = textarea.placeholder; }
+ // Set autofocus to true if this textarea is focused, or if it has
+ // autofocus and no other element is focused.
+ if (options.autofocus == null) {
+ var hasFocus = activeElt();
+ options.autofocus = hasFocus == textarea ||
+ textarea.getAttribute("autofocus") != null && hasFocus == document.body;
+ }
+
+ function save() {textarea.value = cm.getValue();}
+
+ var realSubmit;
+ if (textarea.form) {
+ on(textarea.form, "submit", save);
+ // Deplorable hack to make the submit method do the right thing.
+ if (!options.leaveSubmitMethodAlone) {
+ var form = textarea.form;
+ realSubmit = form.submit;
+ try {
+ var wrappedSubmit = form.submit = function () {
+ save();
+ form.submit = realSubmit;
+ form.submit();
+ form.submit = wrappedSubmit;
+ };
+ } catch(e) {}
+ }
+ }
+
+ options.finishInit = function (cm) {
+ cm.save = save;
+ cm.getTextArea = function () { return textarea; };
+ cm.toTextArea = function () {
+ cm.toTextArea = isNaN; // Prevent this from being ran twice
+ save();
+ textarea.parentNode.removeChild(cm.getWrapperElement());
+ textarea.style.display = "";
+ if (textarea.form) {
+ off(textarea.form, "submit", save);
+ if (typeof textarea.form.submit == "function")
+ { textarea.form.submit = realSubmit; }
+ }
+ };
+ };
+
+ textarea.style.display = "none";
+ var cm = CodeMirror$1(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },
+ options);
+ return cm
+}
+
+function addLegacyProps(CodeMirror) {
+ CodeMirror.off = off;
+ CodeMirror.on = on;
+ CodeMirror.wheelEventPixels = wheelEventPixels;
+ CodeMirror.Doc = Doc;
+ CodeMirror.splitLines = splitLinesAuto;
+ CodeMirror.countColumn = countColumn;
+ CodeMirror.findColumn = findColumn;
+ CodeMirror.isWordChar = isWordCharBasic;
+ CodeMirror.Pass = Pass;
+ CodeMirror.signal = signal;
+ CodeMirror.Line = Line;
+ CodeMirror.changeEnd = changeEnd;
+ CodeMirror.scrollbarModel = scrollbarModel;
+ CodeMirror.Pos = Pos;
+ CodeMirror.cmpPos = cmp;
+ CodeMirror.modes = modes;
+ CodeMirror.mimeModes = mimeModes;
+ CodeMirror.resolveMode = resolveMode;
+ CodeMirror.getMode = getMode;
+ CodeMirror.modeExtensions = modeExtensions;
+ CodeMirror.extendMode = extendMode;
+ CodeMirror.copyState = copyState;
+ CodeMirror.startState = startState;
+ CodeMirror.innerMode = innerMode;
+ CodeMirror.commands = commands;
+ CodeMirror.keyMap = keyMap;
+ CodeMirror.keyName = keyName;
+ CodeMirror.isModifierKey = isModifierKey;
+ CodeMirror.lookupKey = lookupKey;
+ CodeMirror.normalizeKeyMap = normalizeKeyMap;
+ CodeMirror.StringStream = StringStream;
+ CodeMirror.SharedTextMarker = SharedTextMarker;
+ CodeMirror.TextMarker = TextMarker;
+ CodeMirror.LineWidget = LineWidget;
+ CodeMirror.e_preventDefault = e_preventDefault;
+ CodeMirror.e_stopPropagation = e_stopPropagation;
+ CodeMirror.e_stop = e_stop;
+ CodeMirror.addClass = addClass;
+ CodeMirror.contains = contains;
+ CodeMirror.rmClass = rmClass;
+ CodeMirror.keyNames = keyNames;
+}
+
+// EDITOR CONSTRUCTOR
+
+defineOptions(CodeMirror$1);
+
+addEditorMethods(CodeMirror$1);
+
+// Set up methods on CodeMirror's prototype to redirect to the editor's document.
+var dontDelegate = "iter insert remove copy getEditor constructor".split(" ");
+for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)
+ { CodeMirror$1.prototype[prop] = (function(method) {
+ return function() {return method.apply(this.doc, arguments)}
+ })(Doc.prototype[prop]); } }
+
+eventMixin(Doc);
+
+// INPUT HANDLING
+
+CodeMirror$1.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput};
+
+// MODE DEFINITION AND QUERYING
+
+// Extra arguments are stored as the mode's dependencies, which is
+// used by (legacy) mechanisms like loadmode.js to automatically
+// load a mode. (Preferred mechanism is the require/define calls.)
+CodeMirror$1.defineMode = function(name/*, mode, …*/) {
+ if (!CodeMirror$1.defaults.mode && name != "null") { CodeMirror$1.defaults.mode = name; }
+ defineMode.apply(this, arguments);
+};
+
+CodeMirror$1.defineMIME = defineMIME;
+
+// Minimal default mode.
+CodeMirror$1.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });
+CodeMirror$1.defineMIME("text/plain", "null");
+
+// EXTENSIONS
+
+CodeMirror$1.defineExtension = function (name, func) {
+ CodeMirror$1.prototype[name] = func;
+};
+CodeMirror$1.defineDocExtension = function (name, func) {
+ Doc.prototype[name] = func;
+};
+
+CodeMirror$1.fromTextArea = fromTextArea;
+
+addLegacyProps(CodeMirror$1);
+
+CodeMirror$1.version = "5.39.2";
+
+return CodeMirror$1;
+
+})));
+
+},{}],15:[function(require,module,exports){
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("css", function(config, parserConfig) {
+ var inline = parserConfig.inline
+ if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css");
+
+ var indentUnit = config.indentUnit,
+ tokenHooks = parserConfig.tokenHooks,
+ documentTypes = parserConfig.documentTypes || {},
+ mediaTypes = parserConfig.mediaTypes || {},
+ mediaFeatures = parserConfig.mediaFeatures || {},
+ mediaValueKeywords = parserConfig.mediaValueKeywords || {},
+ propertyKeywords = parserConfig.propertyKeywords || {},
+ nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},
+ fontProperties = parserConfig.fontProperties || {},
+ counterDescriptors = parserConfig.counterDescriptors || {},
+ colorKeywords = parserConfig.colorKeywords || {},
+ valueKeywords = parserConfig.valueKeywords || {},
+ allowNested = parserConfig.allowNested,
+ lineComment = parserConfig.lineComment,
+ supportsAtComponent = parserConfig.supportsAtComponent === true;
+
+ var type, override;
+ function ret(style, tp) { type = tp; return style; }
+
+ // Tokenizers
+
+ function tokenBase(stream, state) {
+ var ch = stream.next();
+ if (tokenHooks[ch]) {
+ var result = tokenHooks[ch](stream, state);
+ if (result !== false) return result;
+ }
+ if (ch == "@") {
+ stream.eatWhile(/[\w\\\-]/);
+ return ret("def", stream.current());
+ } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) {
+ return ret(null, "compare");
+ } else if (ch == "\"" || ch == "'") {
+ state.tokenize = tokenString(ch);
+ return state.tokenize(stream, state);
+ } else if (ch == "#") {
+ stream.eatWhile(/[\w\\\-]/);
+ return ret("atom", "hash");
+ } else if (ch == "!") {
+ stream.match(/^\s*\w*/);
+ return ret("keyword", "important");
+ } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) {
+ stream.eatWhile(/[\w.%]/);
+ return ret("number", "unit");
+ } else if (ch === "-") {
+ if (/[\d.]/.test(stream.peek())) {
+ stream.eatWhile(/[\w.%]/);
+ return ret("number", "unit");
+ } else if (stream.match(/^-[\w\\\-]+/)) {
+ stream.eatWhile(/[\w\\\-]/);
+ if (stream.match(/^\s*:/, false))
+ return ret("variable-2", "variable-definition");
+ return ret("variable-2", "variable");
+ } else if (stream.match(/^\w+-/)) {
+ return ret("meta", "meta");
+ }
+ } else if (/[,+>*\/]/.test(ch)) {
+ return ret(null, "select-op");
+ } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {
+ return ret("qualifier", "qualifier");
+ } else if (/[:;{}\[\]\(\)]/.test(ch)) {
+ return ret(null, ch);
+ } else if (((ch == "u" || ch == "U") && stream.match(/rl(-prefix)?\(/i)) ||
+ ((ch == "d" || ch == "D") && stream.match("omain(", true, true)) ||
+ ((ch == "r" || ch == "R") && stream.match("egexp(", true, true))) {
+ stream.backUp(1);
+ state.tokenize = tokenParenthesized;
+ return ret("property", "word");
+ } else if (/[\w\\\-]/.test(ch)) {
+ stream.eatWhile(/[\w\\\-]/);
+ return ret("property", "word");
+ } else {
+ return ret(null, null);
+ }
+ }
+
+ function tokenString(quote) {
+ return function(stream, state) {
+ var escaped = false, ch;
+ while ((ch = stream.next()) != null) {
+ if (ch == quote && !escaped) {
+ if (quote == ")") stream.backUp(1);
+ break;
+ }
+ escaped = !escaped && ch == "\\";
+ }
+ if (ch == quote || !escaped && quote != ")") state.tokenize = null;
+ return ret("string", "string");
+ };
+ }
+
+ function tokenParenthesized(stream, state) {
+ stream.next(); // Must be '('
+ if (!stream.match(/\s*[\"\')]/, false))
+ state.tokenize = tokenString(")");
+ else
+ state.tokenize = null;
+ return ret(null, "(");
+ }
+
+ // Context management
+
+ function Context(type, indent, prev) {
+ this.type = type;
+ this.indent = indent;
+ this.prev = prev;
+ }
+
+ function pushContext(state, stream, type, indent) {
+ state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);
+ return type;
+ }
+
+ function popContext(state) {
+ if (state.context.prev)
+ state.context = state.context.prev;
+ return state.context.type;
+ }
+
+ function pass(type, stream, state) {
+ return states[state.context.type](type, stream, state);
+ }
+ function popAndPass(type, stream, state, n) {
+ for (var i = n || 1; i > 0; i--)
+ state.context = state.context.prev;
+ return pass(type, stream, state);
+ }
+
+ // Parser
+
+ function wordAsValue(stream) {
+ var word = stream.current().toLowerCase();
+ if (valueKeywords.hasOwnProperty(word))
+ override = "atom";
+ else if (colorKeywords.hasOwnProperty(word))
+ override = "keyword";
+ else
+ override = "variable";
+ }
+
+ var states = {};
+
+ states.top = function(type, stream, state) {
+ if (type == "{") {
+ return pushContext(state, stream, "block");
+ } else if (type == "}" && state.context.prev) {
+ return popContext(state);
+ } else if (supportsAtComponent && /@component/i.test(type)) {
+ return pushContext(state, stream, "atComponentBlock");
+ } else if (/^@(-moz-)?document$/i.test(type)) {
+ return pushContext(state, stream, "documentTypes");
+ } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {
+ return pushContext(state, stream, "atBlock");
+ } else if (/^@(font-face|counter-style)/i.test(type)) {
+ state.stateArg = type;
+ return "restricted_atBlock_before";
+ } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {
+ return "keyframes";
+ } else if (type && type.charAt(0) == "@") {
+ return pushContext(state, stream, "at");
+ } else if (type == "hash") {
+ override = "builtin";
+ } else if (type == "word") {
+ override = "tag";
+ } else if (type == "variable-definition") {
+ return "maybeprop";
+ } else if (type == "interpolation") {
+ return pushContext(state, stream, "interpolation");
+ } else if (type == ":") {
+ return "pseudo";
+ } else if (allowNested && type == "(") {
+ return pushContext(state, stream, "parens");
+ }
+ return state.context.type;
+ };
+
+ states.block = function(type, stream, state) {
+ if (type == "word") {
+ var word = stream.current().toLowerCase();
+ if (propertyKeywords.hasOwnProperty(word)) {
+ override = "property";
+ return "maybeprop";
+ } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {
+ override = "string-2";
+ return "maybeprop";
+ } else if (allowNested) {
+ override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag";
+ return "block";
+ } else {
+ override += " error";
+ return "maybeprop";
+ }
+ } else if (type == "meta") {
+ return "block";
+ } else if (!allowNested && (type == "hash" || type == "qualifier")) {
+ override = "error";
+ return "block";
+ } else {
+ return states.top(type, stream, state);
+ }
+ };
+
+ states.maybeprop = function(type, stream, state) {
+ if (type == ":") return pushContext(state, stream, "prop");
+ return pass(type, stream, state);
+ };
+
+ states.prop = function(type, stream, state) {
+ if (type == ";") return popContext(state);
+ if (type == "{" && allowNested) return pushContext(state, stream, "propBlock");
+ if (type == "}" || type == "{") return popAndPass(type, stream, state);
+ if (type == "(") return pushContext(state, stream, "parens");
+
+ if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) {
+ override += " error";
+ } else if (type == "word") {
+ wordAsValue(stream);
+ } else if (type == "interpolation") {
+ return pushContext(state, stream, "interpolation");
+ }
+ return "prop";
+ };
+
+ states.propBlock = function(type, _stream, state) {
+ if (type == "}") return popContext(state);
+ if (type == "word") { override = "property"; return "maybeprop"; }
+ return state.context.type;
+ };
+
+ states.parens = function(type, stream, state) {
+ if (type == "{" || type == "}") return popAndPass(type, stream, state);
+ if (type == ")") return popContext(state);
+ if (type == "(") return pushContext(state, stream, "parens");
+ if (type == "interpolation") return pushContext(state, stream, "interpolation");
+ if (type == "word") wordAsValue(stream);
+ return "parens";
+ };
+
+ states.pseudo = function(type, stream, state) {
+ if (type == "meta") return "pseudo";
+
+ if (type == "word") {
+ override = "variable-3";
+ return state.context.type;
+ }
+ return pass(type, stream, state);
+ };
+
+ states.documentTypes = function(type, stream, state) {
+ if (type == "word" && documentTypes.hasOwnProperty(stream.current())) {
+ override = "tag";
+ return state.context.type;
+ } else {
+ return states.atBlock(type, stream, state);
+ }
+ };
+
+ states.atBlock = function(type, stream, state) {
+ if (type == "(") return pushContext(state, stream, "atBlock_parens");
+ if (type == "}" || type == ";") return popAndPass(type, stream, state);
+ if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top");
+
+ if (type == "interpolation") return pushContext(state, stream, "interpolation");
+
+ if (type == "word") {
+ var word = stream.current().toLowerCase();
+ if (word == "only" || word == "not" || word == "and" || word == "or")
+ override = "keyword";
+ else if (mediaTypes.hasOwnProperty(word))
+ override = "attribute";
+ else if (mediaFeatures.hasOwnProperty(word))
+ override = "property";
+ else if (mediaValueKeywords.hasOwnProperty(word))
+ override = "keyword";
+ else if (propertyKeywords.hasOwnProperty(word))
+ override = "property";
+ else if (nonStandardPropertyKeywords.hasOwnProperty(word))
+ override = "string-2";
+ else if (valueKeywords.hasOwnProperty(word))
+ override = "atom";
+ else if (colorKeywords.hasOwnProperty(word))
+ override = "keyword";
+ else
+ override = "error";
+ }
+ return state.context.type;
+ };
+
+ states.atComponentBlock = function(type, stream, state) {
+ if (type == "}")
+ return popAndPass(type, stream, state);
+ if (type == "{")
+ return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false);
+ if (type == "word")
+ override = "error";
+ return state.context.type;
+ };
+
+ states.atBlock_parens = function(type, stream, state) {
+ if (type == ")") return popContext(state);
+ if (type == "{" || type == "}") return popAndPass(type, stream, state, 2);
+ return states.atBlock(type, stream, state);
+ };
+
+ states.restricted_atBlock_before = function(type, stream, state) {
+ if (type == "{")
+ return pushContext(state, stream, "restricted_atBlock");
+ if (type == "word" && state.stateArg == "@counter-style") {
+ override = "variable";
+ return "restricted_atBlock_before";
+ }
+ return pass(type, stream, state);
+ };
+
+ states.restricted_atBlock = function(type, stream, state) {
+ if (type == "}") {
+ state.stateArg = null;
+ return popContext(state);
+ }
+ if (type == "word") {
+ if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||
+ (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))
+ override = "error";
+ else
+ override = "property";
+ return "maybeprop";
+ }
+ return "restricted_atBlock";
+ };
+
+ states.keyframes = function(type, stream, state) {
+ if (type == "word") { override = "variable"; return "keyframes"; }
+ if (type == "{") return pushContext(state, stream, "top");
+ return pass(type, stream, state);
+ };
+
+ states.at = function(type, stream, state) {
+ if (type == ";") return popContext(state);
+ if (type == "{" || type == "}") return popAndPass(type, stream, state);
+ if (type == "word") override = "tag";
+ else if (type == "hash") override = "builtin";
+ return "at";
+ };
+
+ states.interpolation = function(type, stream, state) {
+ if (type == "}") return popContext(state);
+ if (type == "{" || type == ";") return popAndPass(type, stream, state);
+ if (type == "word") override = "variable";
+ else if (type != "variable" && type != "(" && type != ")") override = "error";
+ return "interpolation";
+ };
+
+ return {
+ startState: function(base) {
+ return {tokenize: null,
+ state: inline ? "block" : "top",
+ stateArg: null,
+ context: new Context(inline ? "block" : "top", base || 0, null)};
+ },
+
+ token: function(stream, state) {
+ if (!state.tokenize && stream.eatSpace()) return null;
+ var style = (state.tokenize || tokenBase)(stream, state);
+ if (style && typeof style == "object") {
+ type = style[1];
+ style = style[0];
+ }
+ override = style;
+ if (type != "comment")
+ state.state = states[state.state](type, stream, state);
+ return override;
+ },
+
+ indent: function(state, textAfter) {
+ var cx = state.context, ch = textAfter && textAfter.charAt(0);
+ var indent = cx.indent;
+ if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev;
+ if (cx.prev) {
+ if (ch == "}" && (cx.type == "block" || cx.type == "top" ||
+ cx.type == "interpolation" || cx.type == "restricted_atBlock")) {
+ // Resume indentation from parent context.
+ cx = cx.prev;
+ indent = cx.indent;
+ } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") ||
+ ch == "{" && (cx.type == "at" || cx.type == "atBlock")) {
+ // Dedent relative to current context.
+ indent = Math.max(0, cx.indent - indentUnit);
+ }
+ }
+ return indent;
+ },
+
+ electricChars: "}",
+ blockCommentStart: "/*",
+ blockCommentEnd: "*/",
+ blockCommentContinue: " * ",
+ lineComment: lineComment,
+ fold: "brace"
+ };
+});
+
+ function keySet(array) {
+ var keys = {};
+ for (var i = 0; i < array.length; ++i) {
+ keys[array[i].toLowerCase()] = true;
+ }
+ return keys;
+ }
+
+ var documentTypes_ = [
+ "domain", "regexp", "url", "url-prefix"
+ ], documentTypes = keySet(documentTypes_);
+
+ var mediaTypes_ = [
+ "all", "aural", "braille", "handheld", "print", "projection", "screen",
+ "tty", "tv", "embossed"
+ ], mediaTypes = keySet(mediaTypes_);
+
+ var mediaFeatures_ = [
+ "width", "min-width", "max-width", "height", "min-height", "max-height",
+ "device-width", "min-device-width", "max-device-width", "device-height",
+ "min-device-height", "max-device-height", "aspect-ratio",
+ "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio",
+ "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color",
+ "max-color", "color-index", "min-color-index", "max-color-index",
+ "monochrome", "min-monochrome", "max-monochrome", "resolution",
+ "min-resolution", "max-resolution", "scan", "grid", "orientation",
+ "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio",
+ "pointer", "any-pointer", "hover", "any-hover"
+ ], mediaFeatures = keySet(mediaFeatures_);
+
+ var mediaValueKeywords_ = [
+ "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover",
+ "interlace", "progressive"
+ ], mediaValueKeywords = keySet(mediaValueKeywords_);
+
+ var propertyKeywords_ = [
+ "align-content", "align-items", "align-self", "alignment-adjust",
+ "alignment-baseline", "anchor-point", "animation", "animation-delay",
+ "animation-direction", "animation-duration", "animation-fill-mode",
+ "animation-iteration-count", "animation-name", "animation-play-state",
+ "animation-timing-function", "appearance", "azimuth", "backface-visibility",
+ "background", "background-attachment", "background-blend-mode", "background-clip",
+ "background-color", "background-image", "background-origin", "background-position",
+ "background-repeat", "background-size", "baseline-shift", "binding",
+ "bleed", "bookmark-label", "bookmark-level", "bookmark-state",
+ "bookmark-target", "border", "border-bottom", "border-bottom-color",
+ "border-bottom-left-radius", "border-bottom-right-radius",
+ "border-bottom-style", "border-bottom-width", "border-collapse",
+ "border-color", "border-image", "border-image-outset",
+ "border-image-repeat", "border-image-slice", "border-image-source",
+ "border-image-width", "border-left", "border-left-color",
+ "border-left-style", "border-left-width", "border-radius", "border-right",
+ "border-right-color", "border-right-style", "border-right-width",
+ "border-spacing", "border-style", "border-top", "border-top-color",
+ "border-top-left-radius", "border-top-right-radius", "border-top-style",
+ "border-top-width", "border-width", "bottom", "box-decoration-break",
+ "box-shadow", "box-sizing", "break-after", "break-before", "break-inside",
+ "caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count",
+ "column-fill", "column-gap", "column-rule", "column-rule-color",
+ "column-rule-style", "column-rule-width", "column-span", "column-width",
+ "columns", "content", "counter-increment", "counter-reset", "crop", "cue",
+ "cue-after", "cue-before", "cursor", "direction", "display",
+ "dominant-baseline", "drop-initial-after-adjust",
+ "drop-initial-after-align", "drop-initial-before-adjust",
+ "drop-initial-before-align", "drop-initial-size", "drop-initial-value",
+ "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis",
+ "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap",
+ "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings",
+ "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust",
+ "font-stretch", "font-style", "font-synthesis", "font-variant",
+ "font-variant-alternates", "font-variant-caps", "font-variant-east-asian",
+ "font-variant-ligatures", "font-variant-numeric", "font-variant-position",
+ "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow",
+ "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap",
+ "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap",
+ "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns",
+ "grid-template-rows", "hanging-punctuation", "height", "hyphens",
+ "icon", "image-orientation", "image-rendering", "image-resolution",
+ "inline-box-align", "justify-content", "justify-items", "justify-self", "left", "letter-spacing",
+ "line-break", "line-height", "line-stacking", "line-stacking-ruby",
+ "line-stacking-shift", "line-stacking-strategy", "list-style",
+ "list-style-image", "list-style-position", "list-style-type", "margin",
+ "margin-bottom", "margin-left", "margin-right", "margin-top",
+ "marks", "marquee-direction", "marquee-loop",
+ "marquee-play-count", "marquee-speed", "marquee-style", "max-height",
+ "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index",
+ "nav-left", "nav-right", "nav-up", "object-fit", "object-position",
+ "opacity", "order", "orphans", "outline",
+ "outline-color", "outline-offset", "outline-style", "outline-width",
+ "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y",
+ "padding", "padding-bottom", "padding-left", "padding-right", "padding-top",
+ "page", "page-break-after", "page-break-before", "page-break-inside",
+ "page-policy", "pause", "pause-after", "pause-before", "perspective",
+ "perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position",
+ "presentation-level", "punctuation-trim", "quotes", "region-break-after",
+ "region-break-before", "region-break-inside", "region-fragment",
+ "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness",
+ "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang",
+ "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin",
+ "shape-outside", "size", "speak", "speak-as", "speak-header",
+ "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set",
+ "tab-size", "table-layout", "target", "target-name", "target-new",
+ "target-position", "text-align", "text-align-last", "text-decoration",
+ "text-decoration-color", "text-decoration-line", "text-decoration-skip",
+ "text-decoration-style", "text-emphasis", "text-emphasis-color",
+ "text-emphasis-position", "text-emphasis-style", "text-height",
+ "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow",
+ "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position",
+ "text-wrap", "top", "transform", "transform-origin", "transform-style",
+ "transition", "transition-delay", "transition-duration",
+ "transition-property", "transition-timing-function", "unicode-bidi",
+ "user-select", "vertical-align", "visibility", "voice-balance", "voice-duration",
+ "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress",
+ "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break",
+ "word-spacing", "word-wrap", "z-index",
+ // SVG-specific
+ "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color",
+ "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events",
+ "color-interpolation", "color-interpolation-filters",
+ "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering",
+ "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke",
+ "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin",
+ "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering",
+ "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal",
+ "glyph-orientation-vertical", "text-anchor", "writing-mode"
+ ], propertyKeywords = keySet(propertyKeywords_);
+
+ var nonStandardPropertyKeywords_ = [
+ "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color",
+ "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color",
+ "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside",
+ "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button",
+ "searchfield-results-decoration", "zoom"
+ ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);
+
+ var fontProperties_ = [
+ "font-family", "src", "unicode-range", "font-variant", "font-feature-settings",
+ "font-stretch", "font-weight", "font-style"
+ ], fontProperties = keySet(fontProperties_);
+
+ var counterDescriptors_ = [
+ "additive-symbols", "fallback", "negative", "pad", "prefix", "range",
+ "speak-as", "suffix", "symbols", "system"
+ ], counterDescriptors = keySet(counterDescriptors_);
+
+ var colorKeywords_ = [
+ "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige",
+ "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown",
+ "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue",
+ "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod",
+ "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen",
+ "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen",
+ "darkslateblue", "darkslategray", "darkturquoise", "darkviolet",
+ "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick",
+ "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite",
+ "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew",
+ "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender",
+ "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral",
+ "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink",
+ "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray",
+ "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta",
+ "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple",
+ "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise",
+ "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin",
+ "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered",
+ "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred",
+ "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue",
+ "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown",
+ "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue",
+ "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan",
+ "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white",
+ "whitesmoke", "yellow", "yellowgreen"
+ ], colorKeywords = keySet(colorKeywords_);
+
+ var valueKeywords_ = [
+ "above", "absolute", "activeborder", "additive", "activecaption", "afar",
+ "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate",
+ "always", "amharic", "amharic-abegede", "antialiased", "appworkspace",
+ "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page",
+ "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary",
+ "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box",
+ "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel",
+ "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian",
+ "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret",
+ "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch",
+ "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote",
+ "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse",
+ "compact", "condensed", "contain", "content", "contents",
+ "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop",
+ "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal",
+ "decimal-leading-zero", "default", "default-button", "dense", "destination-atop",
+ "destination-in", "destination-out", "destination-over", "devanagari", "difference",
+ "disc", "discard", "disclosure-closed", "disclosure-open", "document",
+ "dot-dash", "dot-dot-dash",
+ "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out",
+ "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede",
+ "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er",
+ "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er",
+ "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et",
+ "ethiopic-halehame-gez", "ethiopic-halehame-om-et",
+ "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et",
+ "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig",
+ "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed",
+ "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes",
+ "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove",
+ "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew",
+ "help", "hidden", "hide", "higher", "highlight", "highlighttext",
+ "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore",
+ "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite",
+ "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis",
+ "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert",
+ "italic", "japanese-formal", "japanese-informal", "justify", "kannada",
+ "katakana", "katakana-iroha", "keep-all", "khmer",
+ "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal",
+ "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten",
+ "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem",
+ "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian",
+ "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian",
+ "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d",
+ "media-controls-background", "media-current-time-display",
+ "media-fullscreen-button", "media-mute-button", "media-play-button",
+ "media-return-to-realtime-button", "media-rewind-button",
+ "media-seek-back-button", "media-seek-forward-button", "media-slider",
+ "media-sliderthumb", "media-time-remaining-display", "media-volume-slider",
+ "media-volume-slider-container", "media-volume-sliderthumb", "medium",
+ "menu", "menulist", "menulist-button", "menulist-text",
+ "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic",
+ "mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize",
+ "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop",
+ "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap",
+ "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote",
+ "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset",
+ "outside", "outside-shape", "overlay", "overline", "padding", "padding-box",
+ "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter",
+ "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d",
+ "progress", "push-button", "radial-gradient", "radio", "read-only",
+ "read-write", "read-write-plaintext-only", "rectangle", "region",
+ "relative", "repeat", "repeating-linear-gradient",
+ "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse",
+ "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY",
+ "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running",
+ "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen",
+ "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield",
+ "searchfield-cancel-button", "searchfield-decoration",
+ "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end",
+ "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama",
+ "simp-chinese-formal", "simp-chinese-informal", "single",
+ "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal",
+ "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow",
+ "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali",
+ "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square",
+ "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub",
+ "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table",
+ "table-caption", "table-cell", "table-column", "table-column-group",
+ "table-footer-group", "table-header-group", "table-row", "table-row-group",
+ "tamil",
+ "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai",
+ "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight",
+ "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er",
+ "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top",
+ "trad-chinese-formal", "trad-chinese-informal", "transform",
+ "translate", "translate3d", "translateX", "translateY", "translateZ",
+ "transparent", "ultra-condensed", "ultra-expanded", "underline", "unset", "up",
+ "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal",
+ "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url",
+ "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted",
+ "visibleStroke", "visual", "w-resize", "wait", "wave", "wider",
+ "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor",
+ "xx-large", "xx-small"
+ ], valueKeywords = keySet(valueKeywords_);
+
+ var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)
+ .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)
+ .concat(valueKeywords_);
+ CodeMirror.registerHelper("hintWords", "css", allWords);
+
+ function tokenCComment(stream, state) {
+ var maybeEnd = false, ch;
+ while ((ch = stream.next()) != null) {
+ if (maybeEnd && ch == "/") {
+ state.tokenize = null;
+ break;
+ }
+ maybeEnd = (ch == "*");
+ }
+ return ["comment", "comment"];
+ }
+
+ CodeMirror.defineMIME("text/css", {
+ documentTypes: documentTypes,
+ mediaTypes: mediaTypes,
+ mediaFeatures: mediaFeatures,
+ mediaValueKeywords: mediaValueKeywords,
+ propertyKeywords: propertyKeywords,
+ nonStandardPropertyKeywords: nonStandardPropertyKeywords,
+ fontProperties: fontProperties,
+ counterDescriptors: counterDescriptors,
+ colorKeywords: colorKeywords,
+ valueKeywords: valueKeywords,
+ tokenHooks: {
+ "/": function(stream, state) {
+ if (!stream.eat("*")) return false;
+ state.tokenize = tokenCComment;
+ return tokenCComment(stream, state);
+ }
+ },
+ name: "css"
+ });
+
+ CodeMirror.defineMIME("text/x-scss", {
+ mediaTypes: mediaTypes,
+ mediaFeatures: mediaFeatures,
+ mediaValueKeywords: mediaValueKeywords,
+ propertyKeywords: propertyKeywords,
+ nonStandardPropertyKeywords: nonStandardPropertyKeywords,
+ colorKeywords: colorKeywords,
+ valueKeywords: valueKeywords,
+ fontProperties: fontProperties,
+ allowNested: true,
+ lineComment: "//",
+ tokenHooks: {
+ "/": function(stream, state) {
+ if (stream.eat("/")) {
+ stream.skipToEnd();
+ return ["comment", "comment"];
+ } else if (stream.eat("*")) {
+ state.tokenize = tokenCComment;
+ return tokenCComment(stream, state);
+ } else {
+ return ["operator", "operator"];
+ }
+ },
+ ":": function(stream) {
+ if (stream.match(/\s*\{/, false))
+ return [null, null]
+ return false;
+ },
+ "$": function(stream) {
+ stream.match(/^[\w-]+/);
+ if (stream.match(/^\s*:/, false))
+ return ["variable-2", "variable-definition"];
+ return ["variable-2", "variable"];
+ },
+ "#": function(stream) {
+ if (!stream.eat("{")) return false;
+ return [null, "interpolation"];
+ }
+ },
+ name: "css",
+ helperType: "scss"
+ });
+
+ CodeMirror.defineMIME("text/x-less", {
+ mediaTypes: mediaTypes,
+ mediaFeatures: mediaFeatures,
+ mediaValueKeywords: mediaValueKeywords,
+ propertyKeywords: propertyKeywords,
+ nonStandardPropertyKeywords: nonStandardPropertyKeywords,
+ colorKeywords: colorKeywords,
+ valueKeywords: valueKeywords,
+ fontProperties: fontProperties,
+ allowNested: true,
+ lineComment: "//",
+ tokenHooks: {
+ "/": function(stream, state) {
+ if (stream.eat("/")) {
+ stream.skipToEnd();
+ return ["comment", "comment"];
+ } else if (stream.eat("*")) {
+ state.tokenize = tokenCComment;
+ return tokenCComment(stream, state);
+ } else {
+ return ["operator", "operator"];
+ }
+ },
+ "@": function(stream) {
+ if (stream.eat("{")) return [null, "interpolation"];
+ if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false;
+ stream.eatWhile(/[\w\\\-]/);
+ if (stream.match(/^\s*:/, false))
+ return ["variable-2", "variable-definition"];
+ return ["variable-2", "variable"];
+ },
+ "&": function() {
+ return ["atom", "atom"];
+ }
+ },
+ name: "css",
+ helperType: "less"
+ });
+
+ CodeMirror.defineMIME("text/x-gss", {
+ documentTypes: documentTypes,
+ mediaTypes: mediaTypes,
+ mediaFeatures: mediaFeatures,
+ propertyKeywords: propertyKeywords,
+ nonStandardPropertyKeywords: nonStandardPropertyKeywords,
+ fontProperties: fontProperties,
+ counterDescriptors: counterDescriptors,
+ colorKeywords: colorKeywords,
+ valueKeywords: valueKeywords,
+ supportsAtComponent: true,
+ tokenHooks: {
+ "/": function(stream, state) {
+ if (!stream.eat("*")) return false;
+ state.tokenize = tokenCComment;
+ return tokenCComment(stream, state);
+ }
+ },
+ name: "css",
+ helperType: "gss"
+ });
+
+});
+
+},{"../../lib/codemirror":14}],16:[function(require,module,exports){
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+ "use strict";
+
+ var defaultTags = {
+ script: [
+ ["lang", /(javascript|babel)/i, "javascript"],
+ ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, "javascript"],
+ ["type", /./, "text/plain"],
+ [null, null, "javascript"]
+ ],
+ style: [
+ ["lang", /^css$/i, "css"],
+ ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"],
+ ["type", /./, "text/plain"],
+ [null, null, "css"]
+ ]
+ };
+
+ function maybeBackup(stream, pat, style) {
+ var cur = stream.current(), close = cur.search(pat);
+ if (close > -1) {
+ stream.backUp(cur.length - close);
+ } else if (cur.match(/<\/?$/)) {
+ stream.backUp(cur.length);
+ if (!stream.match(pat, false)) stream.match(cur);
+ }
+ return style;
+ }
+
+ var attrRegexpCache = {};
+ function getAttrRegexp(attr) {
+ var regexp = attrRegexpCache[attr];
+ if (regexp) return regexp;
+ return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*");
+ }
+
+ function getAttrValue(text, attr) {
+ var match = text.match(getAttrRegexp(attr))
+ return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : ""
+ }
+
+ function getTagRegexp(tagName, anchored) {
+ return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i");
+ }
+
+ function addTags(from, to) {
+ for (var tag in from) {
+ var dest = to[tag] || (to[tag] = []);
+ var source = from[tag];
+ for (var i = source.length - 1; i >= 0; i--)
+ dest.unshift(source[i])
+ }
+ }
+
+ function findMatchingMode(tagInfo, tagText) {
+ for (var i = 0; i < tagInfo.length; i++) {
+ var spec = tagInfo[i];
+ if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2];
+ }
+ }
+
+ CodeMirror.defineMode("htmlmixed", function (config, parserConfig) {
+ var htmlMode = CodeMirror.getMode(config, {
+ name: "xml",
+ htmlMode: true,
+ multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,
+ multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag
+ });
+
+ var tags = {};
+ var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes;
+ addTags(defaultTags, tags);
+ if (configTags) addTags(configTags, tags);
+ if (configScript) for (var i = configScript.length - 1; i >= 0; i--)
+ tags.script.unshift(["type", configScript[i].matches, configScript[i].mode])
+
+ function html(stream, state) {
+ var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName
+ if (tag && !/[<>\s\/]/.test(stream.current()) &&
+ (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) &&
+ tags.hasOwnProperty(tagName)) {
+ state.inTag = tagName + " "
+ } else if (state.inTag && tag && />$/.test(stream.current())) {
+ var inTag = /^([\S]+) (.*)/.exec(state.inTag)
+ state.inTag = null
+ var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2])
+ var mode = CodeMirror.getMode(config, modeSpec)
+ var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false);
+ state.token = function (stream, state) {
+ if (stream.match(endTagA, false)) {
+ state.token = html;
+ state.localState = state.localMode = null;
+ return null;
+ }
+ return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState));
+ };
+ state.localMode = mode;
+ state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, ""));
+ } else if (state.inTag) {
+ state.inTag += stream.current()
+ if (stream.eol()) state.inTag += " "
+ }
+ return style;
+ };
+
+ return {
+ startState: function () {
+ var state = CodeMirror.startState(htmlMode);
+ return {token: html, inTag: null, localMode: null, localState: null, htmlState: state};
+ },
+
+ copyState: function (state) {
+ var local;
+ if (state.localState) {
+ local = CodeMirror.copyState(state.localMode, state.localState);
+ }
+ return {token: state.token, inTag: state.inTag,
+ localMode: state.localMode, localState: local,
+ htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};
+ },
+
+ token: function (stream, state) {
+ return state.token(stream, state);
+ },
+
+ indent: function (state, textAfter, line) {
+ if (!state.localMode || /^\s*<\//.test(textAfter))
+ return htmlMode.indent(state.htmlState, textAfter);
+ else if (state.localMode.indent)
+ return state.localMode.indent(state.localState, textAfter, line);
+ else
+ return CodeMirror.Pass;
+ },
+
+ innerMode: function (state) {
+ return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode};
+ }
+ };
+ }, "xml", "javascript", "css");
+
+ CodeMirror.defineMIME("text/html", "htmlmixed");
+});
+
+},{"../../lib/codemirror":14,"../css/css":15,"../javascript/javascript":17,"../xml/xml":18}],17:[function(require,module,exports){
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+CodeMirror.defineMode("javascript", function(config, parserConfig) {
+ var indentUnit = config.indentUnit;
+ var statementIndent = parserConfig.statementIndent;
+ var jsonldMode = parserConfig.jsonld;
+ var jsonMode = parserConfig.json || jsonldMode;
+ var isTS = parserConfig.typescript;
+ var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/;
+
+ // Tokenizer
+
+ var keywords = function(){
+ function kw(type) {return {type: type, style: "keyword"};}
+ var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"), D = kw("keyword d");
+ var operator = kw("operator"), atom = {type: "atom", style: "atom"};
+
+ return {
+ "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
+ "return": D, "break": D, "continue": D, "new": kw("new"), "delete": C, "void": C, "throw": C,
+ "debugger": kw("debugger"), "var": kw("var"), "const": kw("var"), "let": kw("var"),
+ "function": kw("function"), "catch": kw("catch"),
+ "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
+ "in": operator, "typeof": operator, "instanceof": operator,
+ "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom,
+ "this": kw("this"), "class": kw("class"), "super": kw("atom"),
+ "yield": C, "export": kw("export"), "import": kw("import"), "extends": C,
+ "await": C
+ };
+ }();
+
+ var isOperatorChar = /[+\-*&%=<>!?|~^@]/;
+ var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;
+
+ function readRegexp(stream) {
+ var escaped = false, next, inSet = false;
+ while ((next = stream.next()) != null) {
+ if (!escaped) {
+ if (next == "/" && !inSet) return;
+ if (next == "[") inSet = true;
+ else if (inSet && next == "]") inSet = false;
+ }
+ escaped = !escaped && next == "\\";
+ }
+ }
+
+ // Used as scratch variables to communicate multiple values without
+ // consing up tons of objects.
+ var type, content;
+ function ret(tp, style, cont) {
+ type = tp; content = cont;
+ return style;
+ }
+ function tokenBase(stream, state) {
+ var ch = stream.next();
+ if (ch == '"' || ch == "'") {
+ state.tokenize = tokenString(ch);
+ return state.tokenize(stream, state);
+ } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) {
+ return ret("number", "number");
+ } else if (ch == "." && stream.match("..")) {
+ return ret("spread", "meta");
+ } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
+ return ret(ch);
+ } else if (ch == "=" && stream.eat(">")) {
+ return ret("=>", "operator");
+ } else if (ch == "0" && stream.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i)) {
+ return ret("number", "number");
+ } else if (/\d/.test(ch)) {
+ stream.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/);
+ return ret("number", "number");
+ } else if (ch == "/") {
+ if (stream.eat("*")) {
+ state.tokenize = tokenComment;
+ return tokenComment(stream, state);
+ } else if (stream.eat("/")) {
+ stream.skipToEnd();
+ return ret("comment", "comment");
+ } else if (expressionAllowed(stream, state, 1)) {
+ readRegexp(stream);
+ stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/);
+ return ret("regexp", "string-2");
+ } else {
+ stream.eat("=");
+ return ret("operator", "operator", stream.current());
+ }
+ } else if (ch == "`") {
+ state.tokenize = tokenQuasi;
+ return tokenQuasi(stream, state);
+ } else if (ch == "#") {
+ stream.skipToEnd();
+ return ret("error", "error");
+ } else if (isOperatorChar.test(ch)) {
+ if (ch != ">" || !state.lexical || state.lexical.type != ">") {
+ if (stream.eat("=")) {
+ if (ch == "!" || ch == "=") stream.eat("=")
+ } else if (/[<>*+\-]/.test(ch)) {
+ stream.eat(ch)
+ if (ch == ">") stream.eat(ch)
+ }
+ }
+ return ret("operator", "operator", stream.current());
+ } else if (wordRE.test(ch)) {
+ stream.eatWhile(wordRE);
+ var word = stream.current()
+ if (state.lastType != ".") {
+ if (keywords.propertyIsEnumerable(word)) {
+ var kw = keywords[word]
+ return ret(kw.type, kw.style, word)
+ }
+ if (word == "async" && stream.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/, false))
+ return ret("async", "keyword", word)
+ }
+ return ret("variable", "variable", word)
+ }
+ }
+
+ function tokenString(quote) {
+ return function(stream, state) {
+ var escaped = false, next;
+ if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){
+ state.tokenize = tokenBase;
+ return ret("jsonld-keyword", "meta");
+ }
+ while ((next = stream.next()) != null) {
+ if (next == quote && !escaped) break;
+ escaped = !escaped && next == "\\";
+ }
+ if (!escaped) state.tokenize = tokenBase;
+ return ret("string", "string");
+ };
+ }
+
+ function tokenComment(stream, state) {
+ var maybeEnd = false, ch;
+ while (ch = stream.next()) {
+ if (ch == "/" && maybeEnd) {
+ state.tokenize = tokenBase;
+ break;
+ }
+ maybeEnd = (ch == "*");
+ }
+ return ret("comment", "comment");
+ }
+
+ function tokenQuasi(stream, state) {
+ var escaped = false, next;
+ while ((next = stream.next()) != null) {
+ if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) {
+ state.tokenize = tokenBase;
+ break;
+ }
+ escaped = !escaped && next == "\\";
+ }
+ return ret("quasi", "string-2", stream.current());
+ }
+
+ var brackets = "([{}])";
+ // This is a crude lookahead trick to try and notice that we're
+ // parsing the argument patterns for a fat-arrow function before we
+ // actually hit the arrow token. It only works if the arrow is on
+ // the same line as the arguments and there's no strange noise
+ // (comments) in between. Fallback is to only notice when we hit the
+ // arrow, and not declare the arguments as locals for the arrow
+ // body.
+ function findFatArrow(stream, state) {
+ if (state.fatArrowAt) state.fatArrowAt = null;
+ var arrow = stream.string.indexOf("=>", stream.start);
+ if (arrow < 0) return;
+
+ if (isTS) { // Try to skip TypeScript return type declarations after the arguments
+ var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow))
+ if (m) arrow = m.index
+ }
+
+ var depth = 0, sawSomething = false;
+ for (var pos = arrow - 1; pos >= 0; --pos) {
+ var ch = stream.string.charAt(pos);
+ var bracket = brackets.indexOf(ch);
+ if (bracket >= 0 && bracket < 3) {
+ if (!depth) { ++pos; break; }
+ if (--depth == 0) { if (ch == "(") sawSomething = true; break; }
+ } else if (bracket >= 3 && bracket < 6) {
+ ++depth;
+ } else if (wordRE.test(ch)) {
+ sawSomething = true;
+ } else if (/["'\/]/.test(ch)) {
+ return;
+ } else if (sawSomething && !depth) {
+ ++pos;
+ break;
+ }
+ }
+ if (sawSomething && !depth) state.fatArrowAt = pos;
+ }
+
+ // Parser
+
+ var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true};
+
+ function JSLexical(indented, column, type, align, prev, info) {
+ this.indented = indented;
+ this.column = column;
+ this.type = type;
+ this.prev = prev;
+ this.info = info;
+ if (align != null) this.align = align;
+ }
+
+ function inScope(state, varname) {
+ for (var v = state.localVars; v; v = v.next)
+ if (v.name == varname) return true;
+ for (var cx = state.context; cx; cx = cx.prev) {
+ for (var v = cx.vars; v; v = v.next)
+ if (v.name == varname) return true;
+ }
+ }
+
+ function parseJS(state, style, type, content, stream) {
+ var cc = state.cc;
+ // Communicate our context to the combinators.
+ // (Less wasteful than consing up a hundred closures on every call.)
+ cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;
+
+ if (!state.lexical.hasOwnProperty("align"))
+ state.lexical.align = true;
+
+ while(true) {
+ var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
+ if (combinator(type, content)) {
+ while(cc.length && cc[cc.length - 1].lex)
+ cc.pop()();
+ if (cx.marked) return cx.marked;
+ if (type == "variable" && inScope(state, content)) return "variable-2";
+ return style;
+ }
+ }
+ }
+
+ // Combinator utils
+
+ var cx = {state: null, column: null, marked: null, cc: null};
+ function pass() {
+ for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
+ }
+ function cont() {
+ pass.apply(null, arguments);
+ return true;
+ }
+ function inList(name, list) {
+ for (var v = list; v; v = v.next) if (v.name == name) return true
+ return false;
+ }
+ function register(varname) {
+ var state = cx.state;
+ cx.marked = "def";
+ if (state.context) {
+ if (state.lexical.info == "var" && state.context && state.context.block) {
+ // FIXME function decls are also not block scoped
+ var newContext = registerVarScoped(varname, state.context)
+ if (newContext != null) {
+ state.context = newContext
+ return
+ }
+ } else if (!inList(varname, state.localVars)) {
+ state.localVars = new Var(varname, state.localVars)
+ return
+ }
+ }
+ // Fall through means this is global
+ if (parserConfig.globalVars && !inList(varname, state.globalVars))
+ state.globalVars = new Var(varname, state.globalVars)
+ }
+ function registerVarScoped(varname, context) {
+ if (!context) {
+ return null
+ } else if (context.block) {
+ var inner = registerVarScoped(varname, context.prev)
+ if (!inner) return null
+ if (inner == context.prev) return context
+ return new Context(inner, context.vars, true)
+ } else if (inList(varname, context.vars)) {
+ return context
+ } else {
+ return new Context(context.prev, new Var(varname, context.vars), false)
+ }
+ }
+
+ function isModifier(name) {
+ return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly"
+ }
+
+ // Combinators
+
+ function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }
+ function Var(name, next) { this.name = name; this.next = next }
+
+ var defaultVars = new Var("this", new Var("arguments", null))
+ function pushcontext() {
+ cx.state.context = new Context(cx.state.context, cx.state.localVars, false)
+ cx.state.localVars = defaultVars
+ }
+ function pushblockcontext() {
+ cx.state.context = new Context(cx.state.context, cx.state.localVars, true)
+ cx.state.localVars = null
+ }
+ function popcontext() {
+ cx.state.localVars = cx.state.context.vars
+ cx.state.context = cx.state.context.prev
+ }
+ popcontext.lex = true
+ function pushlex(type, info) {
+ var result = function() {
+ var state = cx.state, indent = state.indented;
+ if (state.lexical.type == "stat") indent = state.lexical.indented;
+ else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev)
+ indent = outer.indented;
+ state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
+ };
+ result.lex = true;
+ return result;
+ }
+ function poplex() {
+ var state = cx.state;
+ if (state.lexical.prev) {
+ if (state.lexical.type == ")")
+ state.indented = state.lexical.indented;
+ state.lexical = state.lexical.prev;
+ }
+ }
+ poplex.lex = true;
+
+ function expect(wanted) {
+ function exp(type) {
+ if (type == wanted) return cont();
+ else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass();
+ else return cont(exp);
+ };
+ return exp;
+ }
+
+ function statement(type, value) {
+ if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex);
+ if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex);
+ if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
+ if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex);
+ if (type == "debugger") return cont(expect(";"));
+ if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext);
+ if (type == ";") return cont();
+ if (type == "if") {
+ if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex)
+ cx.state.cc.pop()();
+ return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse);
+ }
+ if (type == "function") return cont(functiondef);
+ if (type == "for") return cont(pushlex("form"), forspec, statement, poplex);
+ if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), className, poplex); }
+ if (type == "variable") {
+ if (isTS && value == "declare") {
+ cx.marked = "keyword"
+ return cont(statement)
+ } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) {
+ cx.marked = "keyword"
+ if (value == "enum") return cont(enumdef);
+ else if (value == "type") return cont(typeexpr, expect("operator"), typeexpr, expect(";"));
+ else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex)
+ } else if (isTS && value == "namespace") {
+ cx.marked = "keyword"
+ return cont(pushlex("form"), expression, block, poplex)
+ } else if (isTS && value == "abstract") {
+ cx.marked = "keyword"
+ return cont(statement)
+ } else {
+ return cont(pushlex("stat"), maybelabel);
+ }
+ }
+ if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext,
+ block, poplex, poplex, popcontext);
+ if (type == "case") return cont(expression, expect(":"));
+ if (type == "default") return cont(expect(":"));
+ if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);
+ if (type == "export") return cont(pushlex("stat"), afterExport, poplex);
+ if (type == "import") return cont(pushlex("stat"), afterImport, poplex);
+ if (type == "async") return cont(statement)
+ if (value == "@") return cont(expression, statement)
+ return pass(pushlex("stat"), expression, expect(";"), poplex);
+ }
+ function maybeCatchBinding(type) {
+ if (type == "(") return cont(funarg, expect(")"))
+ }
+ function expression(type, value) {
+ return expressionInner(type, value, false);
+ }
+ function expressionNoComma(type, value) {
+ return expressionInner(type, value, true);
+ }
+ function parenExpr(type) {
+ if (type != "(") return pass()
+ return cont(pushlex(")"), expression, expect(")"), poplex)
+ }
+ function expressionInner(type, value, noComma) {
+ if (cx.state.fatArrowAt == cx.stream.start) {
+ var body = noComma ? arrowBodyNoComma : arrowBody;
+ if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext);
+ else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext);
+ }
+
+ var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
+ if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
+ if (type == "function") return cont(functiondef, maybeop);
+ if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), classExpression, poplex); }
+ if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression);
+ if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop);
+ if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression);
+ if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop);
+ if (type == "{") return contCommasep(objprop, "}", null, maybeop);
+ if (type == "quasi") return pass(quasi, maybeop);
+ if (type == "new") return cont(maybeTarget(noComma));
+ if (type == "import") return cont(expression);
+ return cont();
+ }
+ function maybeexpression(type) {
+ if (type.match(/[;\}\)\],]/)) return pass();
+ return pass(expression);
+ }
+
+ function maybeoperatorComma(type, value) {
+ if (type == ",") return cont(expression);
+ return maybeoperatorNoComma(type, value, false);
+ }
+ function maybeoperatorNoComma(type, value, noComma) {
+ var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
+ var expr = noComma == false ? expression : expressionNoComma;
+ if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);
+ if (type == "operator") {
+ if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me);
+ if (isTS && value == "<" && cx.stream.match(/^([^>]|<.*?>)*>\s*\(/, false))
+ return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me);
+ if (value == "?") return cont(expression, expect(":"), expr);
+ return cont(expr);
+ }
+ if (type == "quasi") { return pass(quasi, me); }
+ if (type == ";") return;
+ if (type == "(") return contCommasep(expressionNoComma, ")", "call", me);
+ if (type == ".") return cont(property, me);
+ if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me);
+ if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) }
+ if (type == "regexp") {
+ cx.state.lastType = cx.marked = "operator"
+ cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)
+ return cont(expr)
+ }
+ }
+ function quasi(type, value) {
+ if (type != "quasi") return pass();
+ if (value.slice(value.length - 2) != "${") return cont(quasi);
+ return cont(expression, continueQuasi);
+ }
+ function continueQuasi(type) {
+ if (type == "}") {
+ cx.marked = "string-2";
+ cx.state.tokenize = tokenQuasi;
+ return cont(quasi);
+ }
+ }
+ function arrowBody(type) {
+ findFatArrow(cx.stream, cx.state);
+ return pass(type == "{" ? statement : expression);
+ }
+ function arrowBodyNoComma(type) {
+ findFatArrow(cx.stream, cx.state);
+ return pass(type == "{" ? statement : expressionNoComma);
+ }
+ function maybeTarget(noComma) {
+ return function(type) {
+ if (type == ".") return cont(noComma ? targetNoComma : target);
+ else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)
+ else return pass(noComma ? expressionNoComma : expression);
+ };
+ }
+ function target(_, value) {
+ if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); }
+ }
+ function targetNoComma(_, value) {
+ if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); }
+ }
+ function maybelabel(type) {
+ if (type == ":") return cont(poplex, statement);
+ return pass(maybeoperatorComma, expect(";"), poplex);
+ }
+ function property(type) {
+ if (type == "variable") {cx.marked = "property"; return cont();}
+ }
+ function objprop(type, value) {
+ if (type == "async") {
+ cx.marked = "property";
+ return cont(objprop);
+ } else if (type == "variable" || cx.style == "keyword") {
+ cx.marked = "property";
+ if (value == "get" || value == "set") return cont(getterSetter);
+ var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params
+ if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false)))
+ cx.state.fatArrowAt = cx.stream.pos + m[0].length
+ return cont(afterprop);
+ } else if (type == "number" || type == "string") {
+ cx.marked = jsonldMode ? "property" : (cx.style + " property");
+ return cont(afterprop);
+ } else if (type == "jsonld-keyword") {
+ return cont(afterprop);
+ } else if (isTS && isModifier(value)) {
+ cx.marked = "keyword"
+ return cont(objprop)
+ } else if (type == "[") {
+ return cont(expression, maybetype, expect("]"), afterprop);
+ } else if (type == "spread") {
+ return cont(expressionNoComma, afterprop);
+ } else if (value == "*") {
+ cx.marked = "keyword";
+ return cont(objprop);
+ } else if (type == ":") {
+ return pass(afterprop)
+ }
+ }
+ function getterSetter(type) {
+ if (type != "variable") return pass(afterprop);
+ cx.marked = "property";
+ return cont(functiondef);
+ }
+ function afterprop(type) {
+ if (type == ":") return cont(expressionNoComma);
+ if (type == "(") return pass(functiondef);
+ }
+ function commasep(what, end, sep) {
+ function proceed(type, value) {
+ if (sep ? sep.indexOf(type) > -1 : type == ",") {
+ var lex = cx.state.lexical;
+ if (lex.info == "call") lex.pos = (lex.pos || 0) + 1;
+ return cont(function(type, value) {
+ if (type == end || value == end) return pass()
+ return pass(what)
+ }, proceed);
+ }
+ if (type == end || value == end) return cont();
+ return cont(expect(end));
+ }
+ return function(type, value) {
+ if (type == end || value == end) return cont();
+ return pass(what, proceed);
+ };
+ }
+ function contCommasep(what, end, info) {
+ for (var i = 3; i < arguments.length; i++)
+ cx.cc.push(arguments[i]);
+ return cont(pushlex(end, info), commasep(what, end), poplex);
+ }
+ function block(type) {
+ if (type == "}") return cont();
+ return pass(statement, block);
+ }
+ function maybetype(type, value) {
+ if (isTS) {
+ if (type == ":") return cont(typeexpr);
+ if (value == "?") return cont(maybetype);
+ }
+ }
+ function mayberettype(type) {
+ if (isTS && type == ":") {
+ if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr)
+ else return cont(typeexpr)
+ }
+ }
+ function isKW(_, value) {
+ if (value == "is") {
+ cx.marked = "keyword"
+ return cont()
+ }
+ }
+ function typeexpr(type, value) {
+ if (value == "keyof" || value == "typeof") {
+ cx.marked = "keyword"
+ return cont(value == "keyof" ? typeexpr : expressionNoComma)
+ }
+ if (type == "variable" || value == "void") {
+ cx.marked = "type"
+ return cont(afterType)
+ }
+ if (type == "string" || type == "number" || type == "atom") return cont(afterType);
+ if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType)
+ if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType)
+ if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType)
+ if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr)
+ }
+ function maybeReturnType(type) {
+ if (type == "=>") return cont(typeexpr)
+ }
+ function typeprop(type, value) {
+ if (type == "variable" || cx.style == "keyword") {
+ cx.marked = "property"
+ return cont(typeprop)
+ } else if (value == "?") {
+ return cont(typeprop)
+ } else if (type == ":") {
+ return cont(typeexpr)
+ } else if (type == "[") {
+ return cont(expression, maybetype, expect("]"), typeprop)
+ }
+ }
+ function typearg(type, value) {
+ if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg)
+ if (type == ":") return cont(typeexpr)
+ return pass(typeexpr)
+ }
+ function afterType(type, value) {
+ if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
+ if (value == "|" || type == "." || value == "&") return cont(typeexpr)
+ if (type == "[") return cont(expect("]"), afterType)
+ if (value == "extends" || value == "implements") { cx.marked = "keyword"; return cont(typeexpr) }
+ }
+ function maybeTypeArgs(_, value) {
+ if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
+ }
+ function typeparam() {
+ return pass(typeexpr, maybeTypeDefault)
+ }
+ function maybeTypeDefault(_, value) {
+ if (value == "=") return cont(typeexpr)
+ }
+ function vardef(_, value) {
+ if (value == "enum") {cx.marked = "keyword"; return cont(enumdef)}
+ return pass(pattern, maybetype, maybeAssign, vardefCont);
+ }
+ function pattern(type, value) {
+ if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(pattern) }
+ if (type == "variable") { register(value); return cont(); }
+ if (type == "spread") return cont(pattern);
+ if (type == "[") return contCommasep(pattern, "]");
+ if (type == "{") return contCommasep(proppattern, "}");
+ }
+ function proppattern(type, value) {
+ if (type == "variable" && !cx.stream.match(/^\s*:/, false)) {
+ register(value);
+ return cont(maybeAssign);
+ }
+ if (type == "variable") cx.marked = "property";
+ if (type == "spread") return cont(pattern);
+ if (type == "}") return pass();
+ return cont(expect(":"), pattern, maybeAssign);
+ }
+ function maybeAssign(_type, value) {
+ if (value == "=") return cont(expressionNoComma);
+ }
+ function vardefCont(type) {
+ if (type == ",") return cont(vardef);
+ }
+ function maybeelse(type, value) {
+ if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex);
+ }
+ function forspec(type, value) {
+ if (value == "await") return cont(forspec);
+ if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex);
+ }
+ function forspec1(type) {
+ if (type == "var") return cont(vardef, expect(";"), forspec2);
+ if (type == ";") return cont(forspec2);
+ if (type == "variable") return cont(formaybeinof);
+ return pass(expression, expect(";"), forspec2);
+ }
+ function formaybeinof(_type, value) {
+ if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
+ return cont(maybeoperatorComma, forspec2);
+ }
+ function forspec2(type, value) {
+ if (type == ";") return cont(forspec3);
+ if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
+ return pass(expression, expect(";"), forspec3);
+ }
+ function forspec3(type) {
+ if (type != ")") cont(expression);
+ }
+ function functiondef(type, value) {
+ if (value == "*") {cx.marked = "keyword"; return cont(functiondef);}
+ if (type == "variable") {register(value); return cont(functiondef);}
+ if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext);
+ if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef)
+ }
+ function funarg(type, value) {
+ if (value == "@") cont(expression, funarg)
+ if (type == "spread") return cont(funarg);
+ if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(funarg); }
+ return pass(pattern, maybetype, maybeAssign);
+ }
+ function classExpression(type, value) {
+ // Class expressions may have an optional name.
+ if (type == "variable") return className(type, value);
+ return classNameAfter(type, value);
+ }
+ function className(type, value) {
+ if (type == "variable") {register(value); return cont(classNameAfter);}
+ }
+ function classNameAfter(type, value) {
+ if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter)
+ if (value == "extends" || value == "implements" || (isTS && type == ",")) {
+ if (value == "implements") cx.marked = "keyword";
+ return cont(isTS ? typeexpr : expression, classNameAfter);
+ }
+ if (type == "{") return cont(pushlex("}"), classBody, poplex);
+ }
+ function classBody(type, value) {
+ if (type == "async" ||
+ (type == "variable" &&
+ (value == "static" || value == "get" || value == "set" || (isTS && isModifier(value))) &&
+ cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) {
+ cx.marked = "keyword";
+ return cont(classBody);
+ }
+ if (type == "variable" || cx.style == "keyword") {
+ cx.marked = "property";
+ return cont(isTS ? classfield : functiondef, classBody);
+ }
+ if (type == "[")
+ return cont(expression, maybetype, expect("]"), isTS ? classfield : functiondef, classBody)
+ if (value == "*") {
+ cx.marked = "keyword";
+ return cont(classBody);
+ }
+ if (type == ";") return cont(classBody);
+ if (type == "}") return cont();
+ if (value == "@") return cont(expression, classBody)
+ }
+ function classfield(type, value) {
+ if (value == "?") return cont(classfield)
+ if (type == ":") return cont(typeexpr, maybeAssign)
+ if (value == "=") return cont(expressionNoComma)
+ return pass(functiondef)
+ }
+ function afterExport(type, value) {
+ if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); }
+ if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); }
+ if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";"));
+ return pass(statement);
+ }
+ function exportField(type, value) {
+ if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); }
+ if (type == "variable") return pass(expressionNoComma, exportField);
+ }
+ function afterImport(type) {
+ if (type == "string") return cont();
+ if (type == "(") return pass(expression);
+ return pass(importSpec, maybeMoreImports, maybeFrom);
+ }
+ function importSpec(type, value) {
+ if (type == "{") return contCommasep(importSpec, "}");
+ if (type == "variable") register(value);
+ if (value == "*") cx.marked = "keyword";
+ return cont(maybeAs);
+ }
+ function maybeMoreImports(type) {
+ if (type == ",") return cont(importSpec, maybeMoreImports)
+ }
+ function maybeAs(_type, value) {
+ if (value == "as") { cx.marked = "keyword"; return cont(importSpec); }
+ }
+ function maybeFrom(_type, value) {
+ if (value == "from") { cx.marked = "keyword"; return cont(expression); }
+ }
+ function arrayLiteral(type) {
+ if (type == "]") return cont();
+ return pass(commasep(expressionNoComma, "]"));
+ }
+ function enumdef() {
+ return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex)
+ }
+ function enummember() {
+ return pass(pattern, maybeAssign);
+ }
+
+ function isContinuedStatement(state, textAfter) {
+ return state.lastType == "operator" || state.lastType == "," ||
+ isOperatorChar.test(textAfter.charAt(0)) ||
+ /[,.]/.test(textAfter.charAt(0));
+ }
+
+ function expressionAllowed(stream, state, backUp) {
+ return state.tokenize == tokenBase &&
+ /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) ||
+ (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))
+ }
+
+ // Interface
+
+ return {
+ startState: function(basecolumn) {
+ var state = {
+ tokenize: tokenBase,
+ lastType: "sof",
+ cc: [],
+ lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
+ localVars: parserConfig.localVars,
+ context: parserConfig.localVars && new Context(null, null, false),
+ indented: basecolumn || 0
+ };
+ if (parserConfig.globalVars && typeof parserConfig.globalVars == "object")
+ state.globalVars = parserConfig.globalVars;
+ return state;
+ },
+
+ token: function(stream, state) {
+ if (stream.sol()) {
+ if (!state.lexical.hasOwnProperty("align"))
+ state.lexical.align = false;
+ state.indented = stream.indentation();
+ findFatArrow(stream, state);
+ }
+ if (state.tokenize != tokenComment && stream.eatSpace()) return null;
+ var style = state.tokenize(stream, state);
+ if (type == "comment") return style;
+ state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type;
+ return parseJS(state, style, type, content, stream);
+ },
+
+ indent: function(state, textAfter) {
+ if (state.tokenize == tokenComment) return CodeMirror.Pass;
+ if (state.tokenize != tokenBase) return 0;
+ var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top
+ // Kludge to prevent 'maybelse' from blocking lexical scope pops
+ if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {
+ var c = state.cc[i];
+ if (c == poplex) lexical = lexical.prev;
+ else if (c != maybeelse) break;
+ }
+ while ((lexical.type == "stat" || lexical.type == "form") &&
+ (firstChar == "}" || ((top = state.cc[state.cc.length - 1]) &&
+ (top == maybeoperatorComma || top == maybeoperatorNoComma) &&
+ !/^[,\.=+\-*:?[\(]/.test(textAfter))))
+ lexical = lexical.prev;
+ if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat")
+ lexical = lexical.prev;
+ var type = lexical.type, closing = firstChar == type;
+
+ if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0);
+ else if (type == "form" && firstChar == "{") return lexical.indented;
+ else if (type == "form") return lexical.indented + indentUnit;
+ else if (type == "stat")
+ return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);
+ else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false)
+ return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
+ else if (lexical.align) return lexical.column + (closing ? 0 : 1);
+ else return lexical.indented + (closing ? 0 : indentUnit);
+ },
+
+ electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
+ blockCommentStart: jsonMode ? null : "/*",
+ blockCommentEnd: jsonMode ? null : "*/",
+ blockCommentContinue: jsonMode ? null : " * ",
+ lineComment: jsonMode ? null : "//",
+ fold: "brace",
+ closeBrackets: "()[]{}''\"\"``",
+
+ helperType: jsonMode ? "json" : "javascript",
+ jsonldMode: jsonldMode,
+ jsonMode: jsonMode,
+
+ expressionAllowed: expressionAllowed,
+
+ skipExpression: function(state) {
+ var top = state.cc[state.cc.length - 1]
+ if (top == expression || top == expressionNoComma) state.cc.pop()
+ }
+ };
+});
+
+CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/);
+
+CodeMirror.defineMIME("text/javascript", "javascript");
+CodeMirror.defineMIME("text/ecmascript", "javascript");
+CodeMirror.defineMIME("application/javascript", "javascript");
+CodeMirror.defineMIME("application/x-javascript", "javascript");
+CodeMirror.defineMIME("application/ecmascript", "javascript");
+CodeMirror.defineMIME("application/json", {name: "javascript", json: true});
+CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true});
+CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true});
+CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true });
+CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true });
+
+});
+
+},{"../../lib/codemirror":14}],18:[function(require,module,exports){
+// CodeMirror, copyright (c) by Marijn Haverbeke and others
+// Distributed under an MIT license: http://codemirror.net/LICENSE
+
+(function(mod) {
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
+ mod(require("../../lib/codemirror"));
+ else if (typeof define == "function" && define.amd) // AMD
+ define(["../../lib/codemirror"], mod);
+ else // Plain browser env
+ mod(CodeMirror);
+})(function(CodeMirror) {
+"use strict";
+
+var htmlConfig = {
+ autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,
+ 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,
+ 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,
+ 'track': true, 'wbr': true, 'menuitem': true},
+ implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,
+ 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,
+ 'th': true, 'tr': true},
+ contextGrabbers: {
+ 'dd': {'dd': true, 'dt': true},
+ 'dt': {'dd': true, 'dt': true},
+ 'li': {'li': true},
+ 'option': {'option': true, 'optgroup': true},
+ 'optgroup': {'optgroup': true},
+ 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,
+ 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,
+ 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,
+ 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,
+ 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},
+ 'rp': {'rp': true, 'rt': true},
+ 'rt': {'rp': true, 'rt': true},
+ 'tbody': {'tbody': true, 'tfoot': true},
+ 'td': {'td': true, 'th': true},
+ 'tfoot': {'tbody': true},
+ 'th': {'td': true, 'th': true},
+ 'thead': {'tbody': true, 'tfoot': true},
+ 'tr': {'tr': true}
+ },
+ doNotIndent: {"pre": true},
+ allowUnquoted: true,
+ allowMissing: true,
+ caseFold: true
+}
+
+var xmlConfig = {
+ autoSelfClosers: {},
+ implicitlyClosed: {},
+ contextGrabbers: {},
+ doNotIndent: {},
+ allowUnquoted: false,
+ allowMissing: false,
+ allowMissingTagName: false,
+ caseFold: false
+}
+
+CodeMirror.defineMode("xml", function(editorConf, config_) {
+ var indentUnit = editorConf.indentUnit
+ var config = {}
+ var defaults = config_.htmlMode ? htmlConfig : xmlConfig
+ for (var prop in defaults) config[prop] = defaults[prop]
+ for (var prop in config_) config[prop] = config_[prop]
+
+ // Return variables for tokenizers
+ var type, setStyle;
+
+ function inText(stream, state) {
+ function chain(parser) {
+ state.tokenize = parser;
+ return parser(stream, state);
+ }
+
+ var ch = stream.next();
+ if (ch == "<") {
+ if (stream.eat("!")) {
+ if (stream.eat("[")) {
+ if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>"));
+ else return null;
+ } else if (stream.match("--")) {
+ return chain(inBlock("comment", "-->"));
+ } else if (stream.match("DOCTYPE", true, true)) {
+ stream.eatWhile(/[\w\._\-]/);
+ return chain(doctype(1));
+ } else {
+ return null;
+ }
+ } else if (stream.eat("?")) {
+ stream.eatWhile(/[\w\._\-]/);
+ state.tokenize = inBlock("meta", "?>");
+ return "meta";
+ } else {
+ type = stream.eat("/") ? "closeTag" : "openTag";
+ state.tokenize = inTag;
+ return "tag bracket";
+ }
+ } else if (ch == "&") {
+ var ok;
+ if (stream.eat("#")) {
+ if (stream.eat("x")) {
+ ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";");
+ } else {
+ ok = stream.eatWhile(/[\d]/) && stream.eat(";");
+ }
+ } else {
+ ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";");
+ }
+ return ok ? "atom" : "error";
+ } else {
+ stream.eatWhile(/[^&<]/);
+ return null;
+ }
+ }
+ inText.isInText = true;
+
+ function inTag(stream, state) {
+ var ch = stream.next();
+ if (ch == ">" || (ch == "/" && stream.eat(">"))) {
+ state.tokenize = inText;
+ type = ch == ">" ? "endTag" : "selfcloseTag";
+ return "tag bracket";
+ } else if (ch == "=") {
+ type = "equals";
+ return null;
+ } else if (ch == "<") {
+ state.tokenize = inText;
+ state.state = baseState;
+ state.tagName = state.tagStart = null;
+ var next = state.tokenize(stream, state);
+ return next ? next + " tag error" : "tag error";
+ } else if (/[\'\"]/.test(ch)) {
+ state.tokenize = inAttribute(ch);
+ state.stringStartCol = stream.column();
+ return state.tokenize(stream, state);
+ } else {
+ stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/);
+ return "word";
+ }
+ }
+
+ function inAttribute(quote) {
+ var closure = function(stream, state) {
+ while (!stream.eol()) {
+ if (stream.next() == quote) {
+ state.tokenize = inTag;
+ break;
+ }
+ }
+ return "string";
+ };
+ closure.isInAttribute = true;
+ return closure;
+ }
+
+ function inBlock(style, terminator) {
+ return function(stream, state) {
+ while (!stream.eol()) {
+ if (stream.match(terminator)) {
+ state.tokenize = inText;
+ break;
+ }
+ stream.next();
+ }
+ return style;
+ }
+ }
+
+ function doctype(depth) {
+ return function(stream, state) {
+ var ch;
+ while ((ch = stream.next()) != null) {
+ if (ch == "<") {
+ state.tokenize = doctype(depth + 1);
+ return state.tokenize(stream, state);
+ } else if (ch == ">") {
+ if (depth == 1) {
+ state.tokenize = inText;
+ break;
+ } else {
+ state.tokenize = doctype(depth - 1);
+ return state.tokenize(stream, state);
+ }
+ }
+ }
+ return "meta";
+ };
+ }
+
+ function Context(state, tagName, startOfLine) {
+ this.prev = state.context;
+ this.tagName = tagName;
+ this.indent = state.indented;
+ this.startOfLine = startOfLine;
+ if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))
+ this.noIndent = true;
+ }
+ function popContext(state) {
+ if (state.context) state.context = state.context.prev;
+ }
+ function maybePopContext(state, nextTagName) {
+ var parentTagName;
+ while (true) {
+ if (!state.context) {
+ return;
+ }
+ parentTagName = state.context.tagName;
+ if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||
+ !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {
+ return;
+ }
+ popContext(state);
+ }
+ }
+
+ function baseState(type, stream, state) {
+ if (type == "openTag") {
+ state.tagStart = stream.column();
+ return tagNameState;
+ } else if (type == "closeTag") {
+ return closeTagNameState;
+ } else {
+ return baseState;
+ }
+ }
+ function tagNameState(type, stream, state) {
+ if (type == "word") {
+ state.tagName = stream.current();
+ setStyle = "tag";
+ return attrState;
+ } else if (config.allowMissingTagName && type == "endTag") {
+ setStyle = "tag bracket";
+ return attrState(type, stream, state);
+ } else {
+ setStyle = "error";
+ return tagNameState;
+ }
+ }
+ function closeTagNameState(type, stream, state) {
+ if (type == "word") {
+ var tagName = stream.current();
+ if (state.context && state.context.tagName != tagName &&
+ config.implicitlyClosed.hasOwnProperty(state.context.tagName))
+ popContext(state);
+ if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {
+ setStyle = "tag";
+ return closeState;
+ } else {
+ setStyle = "tag error";
+ return closeStateErr;
+ }
+ } else if (config.allowMissingTagName && type == "endTag") {
+ setStyle = "tag bracket";
+ return closeState(type, stream, state);
+ } else {
+ setStyle = "error";
+ return closeStateErr;
+ }
+ }
+
+ function closeState(type, _stream, state) {
+ if (type != "endTag") {
+ setStyle = "error";
+ return closeState;
+ }
+ popContext(state);
+ return baseState;
+ }
+ function closeStateErr(type, stream, state) {
+ setStyle = "error";
+ return closeState(type, stream, state);
+ }
+
+ function attrState(type, _stream, state) {
+ if (type == "word") {
+ setStyle = "attribute";
+ return attrEqState;
+ } else if (type == "endTag" || type == "selfcloseTag") {
+ var tagName = state.tagName, tagStart = state.tagStart;
+ state.tagName = state.tagStart = null;
+ if (type == "selfcloseTag" ||
+ config.autoSelfClosers.hasOwnProperty(tagName)) {
+ maybePopContext(state, tagName);
+ } else {
+ maybePopContext(state, tagName);
+ state.context = new Context(state, tagName, tagStart == state.indented);
+ }
+ return baseState;
+ }
+ setStyle = "error";
+ return attrState;
+ }
+ function attrEqState(type, stream, state) {
+ if (type == "equals") return attrValueState;
+ if (!config.allowMissing) setStyle = "error";
+ return attrState(type, stream, state);
+ }
+ function attrValueState(type, stream, state) {
+ if (type == "string") return attrContinuedState;
+ if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;}
+ setStyle = "error";
+ return attrState(type, stream, state);
+ }
+ function attrContinuedState(type, stream, state) {
+ if (type == "string") return attrContinuedState;
+ return attrState(type, stream, state);
+ }
+
+ return {
+ startState: function(baseIndent) {
+ var state = {tokenize: inText,
+ state: baseState,
+ indented: baseIndent || 0,
+ tagName: null, tagStart: null,
+ context: null}
+ if (baseIndent != null) state.baseIndent = baseIndent
+ return state
+ },
+
+ token: function(stream, state) {
+ if (!state.tagName && stream.sol())
+ state.indented = stream.indentation();
+
+ if (stream.eatSpace()) return null;
+ type = null;
+ var style = state.tokenize(stream, state);
+ if ((style || type) && style != "comment") {
+ setStyle = null;
+ state.state = state.state(type || style, stream, state);
+ if (setStyle)
+ style = setStyle == "error" ? style + " error" : setStyle;
+ }
+ return style;
+ },
+
+ indent: function(state, textAfter, fullLine) {
+ var context = state.context;
+ // Indent multi-line strings (e.g. css).
+ if (state.tokenize.isInAttribute) {
+ if (state.tagStart == state.indented)
+ return state.stringStartCol + 1;
+ else
+ return state.indented + indentUnit;
+ }
+ if (context && context.noIndent) return CodeMirror.Pass;
+ if (state.tokenize != inTag && state.tokenize != inText)
+ return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0;
+ // Indent the starts of attribute names.
+ if (state.tagName) {
+ if (config.multilineTagIndentPastTag !== false)
+ return state.tagStart + state.tagName.length + 2;
+ else
+ return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);
+ }
+ if (config.alignCDATA && /<!\[CDATA\[/.test(textAfter)) return 0;
+ var tagAfter = textAfter && /^<(\/)?([\w_:\.-]*)/.exec(textAfter);
+ if (tagAfter && tagAfter[1]) { // Closing tag spotted
+ while (context) {
+ if (context.tagName == tagAfter[2]) {
+ context = context.prev;
+ break;
+ } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {
+ context = context.prev;
+ } else {
+ break;
+ }
+ }
+ } else if (tagAfter) { // Opening tag spotted
+ while (context) {
+ var grabbers = config.contextGrabbers[context.tagName];
+ if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))
+ context = context.prev;
+ else
+ break;
+ }
+ }
+ while (context && context.prev && !context.startOfLine)
+ context = context.prev;
+ if (context) return context.indent + indentUnit;
+ else return state.baseIndent || 0;
+ },
+
+ electricInput: /<\/[\s\w:]+>$/,
+ blockCommentStart: "<!--",
+ blockCommentEnd: "-->",
+
+ configuration: config.htmlMode ? "html" : "xml",
+ helperType: config.htmlMode ? "html" : "xml",
+
+ skipAttribute: function(state) {
+ if (state.state == attrValueState)
+ state.state = attrState
+ }
+ };
+});
+
+CodeMirror.defineMIME("text/xml", "xml");
+CodeMirror.defineMIME("application/xml", "xml");
+if (!CodeMirror.mimeModes.hasOwnProperty("text/html"))
+ CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true});
+
+});
+
+},{"../../lib/codemirror":14}],19:[function(require,module,exports){
+(function(global,factory){if(typeof define === 'function' && define.amd){define(['exports'],factory);}else if(typeof exports !== 'undefined'){factory(exports);}else {var mod={exports:{}};factory(mod.exports);global.decko = mod.exports;}})(this,function(exports){'use strict';exports.__esModule = true;var EMPTY={};var HOP=Object.prototype.hasOwnProperty;var fns={memoize:function memoize(fn){var opt=arguments.length <= 1 || arguments[1] === undefined?EMPTY:arguments[1];var cache=opt.cache || {};return function(){for(var _len=arguments.length,a=Array(_len),_key=0;_key < _len;_key++) {a[_key] = arguments[_key];}var k=String(a[0]);if(opt.caseSensitive === false)k = k.toLowerCase();return HOP.call(cache,k)?cache[k]:cache[k] = fn.apply(this,a);};},debounce:function debounce(fn,opts){if(typeof opts === 'function'){var p=fn;fn = opts;opts = p;}var delay=opts && opts.delay || opts || 0,args=undefined,context=undefined,timer=undefined;return function(){for(var _len2=arguments.length,a=Array(_len2),_key2=0;_key2 < _len2;_key2++) {a[_key2] = arguments[_key2];}args = a;context = this;if(!timer)timer = setTimeout(function(){fn.apply(context,args);args = context = timer = null;},delay);};},bind:function bind(target,key,_ref){var fn=_ref.value;return {configurable:true,get:function get(){var value=fn.bind(this);Object.defineProperty(this,key,{value:value,configurable:true,writable:true});return value;}};}};var memoize=multiMethod(fns.memoize),debounce=multiMethod(fns.debounce),bind=multiMethod(function(f,c){return f.bind(c);},function(){return fns.bind;});exports.memoize = memoize;exports.debounce = debounce;exports.bind = bind;exports['default'] = {memoize:memoize,debounce:debounce,bind:bind};function multiMethod(inner,deco){deco = deco || inner.decorate || decorator(inner);var d=deco();return function(){for(var _len3=arguments.length,args=Array(_len3),_key3=0;_key3 < _len3;_key3++) {args[_key3] = arguments[_key3];}var l=args.length;return (l < 2?deco:l > 2?d:inner).apply(undefined,args);};}function decorator(fn){return function(opt){return typeof opt === 'function'?fn(opt):function(target,key,desc){desc.value = fn(desc.value,opt,target,key,desc);};};}});
+
+
+},{}],20:[function(require,module,exports){
+function dlv(t,e,n,l){for(l=0,e=e.split?e.split("."):e;t&&l<e.length;)t=t[e[l++]];return void 0===t?n:t}function linkState(t,e,n){var l=e.split("."),r=t.__lsc||(t.__lsc={});return r[e+n]||(r[e+n]=function(e){for(var r=e&&e.target||this,a={},i=a,o="string"==typeof n?dlv(e,n):r.nodeName?r.type.match(/^che|rad/)?r.checked:r.value:e,s=0;s<l.length-1;s++)i=i[l[s]]||(i[l[s]]=!s&&t.state[l[s]]||{});i[l[s]]=o,t.setState(a)})}module.exports=linkState;
+
+
+},{}],21:[function(require,module,exports){
+!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e.preactRenderToString=n()}(this,function(){var e=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,n=Object.keys||function(e){var n=[];for(var t in e)e.hasOwnProperty(t)&&n.push(t);return n},t=function(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},r=function(e,n){return String(e).replace(/(\n+)/g,"$1"+(n||"\t"))},o=function(e,n,t){return String(e).length>(n||40)||!t&&-1!==String(e).indexOf("\n")||-1!==String(e).indexOf("<")},i={};function a(n){var t="";for(var r in n){var o=n[r];null!=o&&(t&&(t+=" "),t+=i[r]||(i[r]=r.replace(/([A-Z])/g,"-$1").toLowerCase()),t+=": ",t+=o,"number"==typeof o&&!1===e.test(r)&&(t+="px"),t+=";")}return t||void 0}function l(e,n){for(var t in n)e[t]=n[t];return e}var f={shallow:!0},c=[],u=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/;s.render=s;function s(e,i,f,p,d){if(null==e||"boolean"==typeof e)return"";var h=e.nodeName,g=e.attributes,v=!1;i=i||{};var m,b=(f=f||{}).pretty,y="string"==typeof b?b:"\t";if("object"!=typeof e&&!h)return t(e);if("function"==typeof h){if(v=!0,!f.shallow||!p&&!1!==f.renderRootComponent){var x,w=function(e){var n=e.nodeName.defaultProps,t=l({},n||e.attributes);return n&&l(t,e.attributes),e.children&&(t.children=e.children),t}(e);if(h.prototype&&"function"==typeof h.prototype.render){var k=new h(w,i);k._disable=k.__x=!0,k.props=w,k.context=i,k.componentWillMount&&k.componentWillMount(),x=k.render(k.props,k.state,k.context),k.getChildContext&&(i=l(l({},i),k.getChildContext()))}else x=h(w,i);return s(x,i,f,!1!==f.shallowHighOrder)}h=(m=h).displayName||m!==Function&&m.name||function(e){var n=(Function.prototype.toString.call(e).match(/^\s*function\s+([^( ]+)/)||"")[1];if(!n){for(var t=-1,r=c.length;r--;)if(c[r]===e){t=r;break}t<0&&(t=c.push(e)-1),n="UnnamedComponent"+t}return n}(m)}var O,C="";if(g){var S=n(g);f&&!0===f.sortAttributes&&S.sort();for(var j=0;j<S.length;j++){var $=S[j],_=g[$];if("children"!==$&&(!$.match(/[\s\n\\/='"\0<>]/)&&(f&&f.allAttributes||"key"!==$&&"ref"!==$))){if("className"===$){if(g.class)continue;$="class"}else d&&$.match(/^xlink:?./)&&($=$.toLowerCase().replace(/^xlink:?/,"xlink:"));"style"===$&&_&&"object"==typeof _&&(_=a(_));var H=f.attributeHook&&f.attributeHook($,_,i,f,v);if(H||""===H)C+=H;else if("dangerouslySetInnerHTML"===$)O=_&&_.__html;else if((_||0===_||""===_)&&"function"!=typeof _){if(!(!0!==_&&""!==_||(_=$,f&&f.xml))){C+=" "+$;continue}C+=" "+$+'="'+t(_)+'"'}}}}var N=C.replace(/^\n\s*/," ");if(N===C||~N.indexOf("\n")?b&&~C.indexOf("\n")&&(C+="\n"):C=N,C="<"+h+C+">",h.match(/[\s\n\\/='"\0<>]/))throw C;var A=h.match(u);A&&(C=C.replace(/>$/," />"));var L=[];if(O)b&&o(O)&&(O="\n"+y+r(O,y)),C+=O;else if(e.children){for(var M=~C.indexOf("\n"),R=0;R<e.children.length;R++){var F=e.children[R];if(null!=F&&!1!==F){var P=s(F,i,f,!0,"svg"===h||"foreignObject"!==h&&d);!M&&b&&o(P)&&(M=!0),P&&L.push(P)}}if(b&&M)for(var T=L.length;T--;)L[T]="\n"+y+r(L[T],y)}if(L.length)C+=L.join("");else if(f&&f.xml)return C.substring(0,C.length-1)+" />";return A||(b&&~C.indexOf("\n")&&(C+="\n"),C+="</"+h+">"),C}return s.shallowRender=function(e,n){return s(e,n,f)},s});
+
+
+},{}],22:[function(require,module,exports){
+!function() {
+ 'use strict';
+ function h(nodeName, attributes) {
+ var lastSimple, child, simple, i, children = EMPTY_CHILDREN;
+ for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]);
+ if (attributes && null != attributes.children) {
+ if (!stack.length) stack.push(attributes.children);
+ delete attributes.children;
+ }
+ while (stack.length) if ((child = stack.pop()) && void 0 !== child.pop) for (i = child.length; i--; ) stack.push(child[i]); else {
+ if ('boolean' == typeof child) child = null;
+ if (simple = 'function' != typeof nodeName) if (null == child) child = ''; else if ('number' == typeof child) child = String(child); else if ('string' != typeof child) simple = !1;
+ if (simple && lastSimple) children[children.length - 1] += child; else if (children === EMPTY_CHILDREN) children = [ child ]; else children.push(child);
+ lastSimple = simple;
+ }
+ var p = new VNode();
+ p.nodeName = nodeName;
+ p.children = children;
+ p.attributes = null == attributes ? void 0 : attributes;
+ p.key = null == attributes ? void 0 : attributes.key;
+ if (void 0 !== options.vnode) options.vnode(p);
+ return p;
+ }
+ function extend(obj, props) {
+ for (var i in props) obj[i] = props[i];
+ return obj;
+ }
+ function cloneElement(vnode, props) {
+ return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);
+ }
+ function enqueueRender(component) {
+ if (!component.__d && (component.__d = !0) && 1 == items.push(component)) (options.debounceRendering || defer)(rerender);
+ }
+ function rerender() {
+ var p, list = items;
+ items = [];
+ while (p = list.pop()) if (p.__d) renderComponent(p);
+ }
+ function isSameNodeType(node, vnode, hydrating) {
+ if ('string' == typeof vnode || 'number' == typeof vnode) return void 0 !== node.splitText;
+ if ('string' == typeof vnode.nodeName) return !node._componentConstructor && isNamedNode(node, vnode.nodeName); else return hydrating || node._componentConstructor === vnode.nodeName;
+ }
+ function isNamedNode(node, nodeName) {
+ return node.__n === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();
+ }
+ function getNodeProps(vnode) {
+ var props = extend({}, vnode.attributes);
+ props.children = vnode.children;
+ var defaultProps = vnode.nodeName.defaultProps;
+ if (void 0 !== defaultProps) for (var i in defaultProps) if (void 0 === props[i]) props[i] = defaultProps[i];
+ return props;
+ }
+ function createNode(nodeName, isSvg) {
+ var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);
+ node.__n = nodeName;
+ return node;
+ }
+ function removeNode(node) {
+ var parentNode = node.parentNode;
+ if (parentNode) parentNode.removeChild(node);
+ }
+ function setAccessor(node, name, old, value, isSvg) {
+ if ('className' === name) name = 'class';
+ if ('key' === name) ; else if ('ref' === name) {
+ if (old) old(null);
+ if (value) value(node);
+ } else if ('class' === name && !isSvg) node.className = value || ''; else if ('style' === name) {
+ if (!value || 'string' == typeof value || 'string' == typeof old) node.style.cssText = value || '';
+ if (value && 'object' == typeof value) {
+ if ('string' != typeof old) for (var i in old) if (!(i in value)) node.style[i] = '';
+ for (var i in value) node.style[i] = 'number' == typeof value[i] && !1 === IS_NON_DIMENSIONAL.test(i) ? value[i] + 'px' : value[i];
+ }
+ } else if ('dangerouslySetInnerHTML' === name) {
+ if (value) node.innerHTML = value.__html || '';
+ } else if ('o' == name[0] && 'n' == name[1]) {
+ var useCapture = name !== (name = name.replace(/Capture$/, ''));
+ name = name.toLowerCase().substring(2);
+ if (value) {
+ if (!old) node.addEventListener(name, eventProxy, useCapture);
+ } else node.removeEventListener(name, eventProxy, useCapture);
+ (node.__l || (node.__l = {}))[name] = value;
+ } else if ('list' !== name && 'type' !== name && !isSvg && name in node) {
+ try {
+ node[name] = null == value ? '' : value;
+ } catch (e) {}
+ if ((null == value || !1 === value) && 'spellcheck' != name) node.removeAttribute(name);
+ } else {
+ var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));
+ if (null == value || !1 === value) if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase()); else node.removeAttribute(name); else if ('function' != typeof value) if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value); else node.setAttribute(name, value);
+ }
+ }
+ function eventProxy(e) {
+ return this.__l[e.type](options.event && options.event(e) || e);
+ }
+ function flushMounts() {
+ var c;
+ while (c = mounts.pop()) {
+ if (options.afterMount) options.afterMount(c);
+ if (c.componentDidMount) c.componentDidMount();
+ }
+ }
+ function diff(dom, vnode, context, mountAll, parent, componentRoot) {
+ if (!diffLevel++) {
+ isSvgMode = null != parent && void 0 !== parent.ownerSVGElement;
+ hydrating = null != dom && !('__preactattr_' in dom);
+ }
+ var ret = idiff(dom, vnode, context, mountAll, componentRoot);
+ if (parent && ret.parentNode !== parent) parent.appendChild(ret);
+ if (!--diffLevel) {
+ hydrating = !1;
+ if (!componentRoot) flushMounts();
+ }
+ return ret;
+ }
+ function idiff(dom, vnode, context, mountAll, componentRoot) {
+ var out = dom, prevSvgMode = isSvgMode;
+ if (null == vnode || 'boolean' == typeof vnode) vnode = '';
+ if ('string' == typeof vnode || 'number' == typeof vnode) {
+ if (dom && void 0 !== dom.splitText && dom.parentNode && (!dom._component || componentRoot)) {
+ if (dom.nodeValue != vnode) dom.nodeValue = vnode;
+ } else {
+ out = document.createTextNode(vnode);
+ if (dom) {
+ if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
+ recollectNodeTree(dom, !0);
+ }
+ }
+ out.__preactattr_ = !0;
+ return out;
+ }
+ var vnodeName = vnode.nodeName;
+ if ('function' == typeof vnodeName) return buildComponentFromVNode(dom, vnode, context, mountAll);
+ isSvgMode = 'svg' === vnodeName ? !0 : 'foreignObject' === vnodeName ? !1 : isSvgMode;
+ vnodeName = String(vnodeName);
+ if (!dom || !isNamedNode(dom, vnodeName)) {
+ out = createNode(vnodeName, isSvgMode);
+ if (dom) {
+ while (dom.firstChild) out.appendChild(dom.firstChild);
+ if (dom.parentNode) dom.parentNode.replaceChild(out, dom);
+ recollectNodeTree(dom, !0);
+ }
+ }
+ var fc = out.firstChild, props = out.__preactattr_, vchildren = vnode.children;
+ if (null == props) {
+ props = out.__preactattr_ = {};
+ for (var a = out.attributes, i = a.length; i--; ) props[a[i].name] = a[i].value;
+ }
+ if (!hydrating && vchildren && 1 === vchildren.length && 'string' == typeof vchildren[0] && null != fc && void 0 !== fc.splitText && null == fc.nextSibling) {
+ if (fc.nodeValue != vchildren[0]) fc.nodeValue = vchildren[0];
+ } else if (vchildren && vchildren.length || null != fc) innerDiffNode(out, vchildren, context, mountAll, hydrating || null != props.dangerouslySetInnerHTML);
+ diffAttributes(out, vnode.attributes, props);
+ isSvgMode = prevSvgMode;
+ return out;
+ }
+ function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {
+ var j, c, f, vchild, child, originalChildren = dom.childNodes, children = [], keyed = {}, keyedLen = 0, min = 0, len = originalChildren.length, childrenLen = 0, vlen = vchildren ? vchildren.length : 0;
+ if (0 !== len) for (var i = 0; i < len; i++) {
+ var _child = originalChildren[i], props = _child.__preactattr_, key = vlen && props ? _child._component ? _child._component.__k : props.key : null;
+ if (null != key) {
+ keyedLen++;
+ keyed[key] = _child;
+ } else if (props || (void 0 !== _child.splitText ? isHydrating ? _child.nodeValue.trim() : !0 : isHydrating)) children[childrenLen++] = _child;
+ }
+ if (0 !== vlen) for (var i = 0; i < vlen; i++) {
+ vchild = vchildren[i];
+ child = null;
+ var key = vchild.key;
+ if (null != key) {
+ if (keyedLen && void 0 !== keyed[key]) {
+ child = keyed[key];
+ keyed[key] = void 0;
+ keyedLen--;
+ }
+ } else if (min < childrenLen) for (j = min; j < childrenLen; j++) if (void 0 !== children[j] && isSameNodeType(c = children[j], vchild, isHydrating)) {
+ child = c;
+ children[j] = void 0;
+ if (j === childrenLen - 1) childrenLen--;
+ if (j === min) min++;
+ break;
+ }
+ child = idiff(child, vchild, context, mountAll);
+ f = originalChildren[i];
+ if (child && child !== dom && child !== f) if (null == f) dom.appendChild(child); else if (child === f.nextSibling) removeNode(f); else dom.insertBefore(child, f);
+ }
+ if (keyedLen) for (var i in keyed) if (void 0 !== keyed[i]) recollectNodeTree(keyed[i], !1);
+ while (min <= childrenLen) if (void 0 !== (child = children[childrenLen--])) recollectNodeTree(child, !1);
+ }
+ function recollectNodeTree(node, unmountOnly) {
+ var component = node._component;
+ if (component) unmountComponent(component); else {
+ if (null != node.__preactattr_ && node.__preactattr_.ref) node.__preactattr_.ref(null);
+ if (!1 === unmountOnly || null == node.__preactattr_) removeNode(node);
+ removeChildren(node);
+ }
+ }
+ function removeChildren(node) {
+ node = node.lastChild;
+ while (node) {
+ var next = node.previousSibling;
+ recollectNodeTree(node, !0);
+ node = next;
+ }
+ }
+ function diffAttributes(dom, attrs, old) {
+ var name;
+ for (name in old) if ((!attrs || null == attrs[name]) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode);
+ for (name in attrs) if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);
+ }
+ function createComponent(Ctor, props, context) {
+ var inst, i = recyclerComponents.length;
+ if (Ctor.prototype && Ctor.prototype.render) {
+ inst = new Ctor(props, context);
+ Component.call(inst, props, context);
+ } else {
+ inst = new Component(props, context);
+ inst.constructor = Ctor;
+ inst.render = doRender;
+ }
+ while (i--) if (recyclerComponents[i].constructor === Ctor) {
+ inst.__b = recyclerComponents[i].__b;
+ recyclerComponents.splice(i, 1);
+ return inst;
+ }
+ return inst;
+ }
+ function doRender(props, state, context) {
+ return this.constructor(props, context);
+ }
+ function setComponentProps(component, props, renderMode, context, mountAll) {
+ if (!component.__x) {
+ component.__x = !0;
+ component.__r = props.ref;
+ component.__k = props.key;
+ delete props.ref;
+ delete props.key;
+ if (void 0 === component.constructor.getDerivedStateFromProps) if (!component.base || mountAll) {
+ if (component.componentWillMount) component.componentWillMount();
+ } else if (component.componentWillReceiveProps) component.componentWillReceiveProps(props, context);
+ if (context && context !== component.context) {
+ if (!component.__c) component.__c = component.context;
+ component.context = context;
+ }
+ if (!component.__p) component.__p = component.props;
+ component.props = props;
+ component.__x = !1;
+ if (0 !== renderMode) if (1 === renderMode || !1 !== options.syncComponentUpdates || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component);
+ if (component.__r) component.__r(component);
+ }
+ }
+ function renderComponent(component, renderMode, mountAll, isChild) {
+ if (!component.__x) {
+ var rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.__p || props, previousState = component.__s || state, previousContext = component.__c || context, isUpdate = component.base, nextBase = component.__b, initialBase = isUpdate || nextBase, initialChildComponent = component._component, skip = !1, snapshot = previousContext;
+ if (component.constructor.getDerivedStateFromProps) {
+ state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));
+ component.state = state;
+ }
+ if (isUpdate) {
+ component.props = previousProps;
+ component.state = previousState;
+ component.context = previousContext;
+ if (2 !== renderMode && component.shouldComponentUpdate && !1 === component.shouldComponentUpdate(props, state, context)) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context);
+ component.props = props;
+ component.state = state;
+ component.context = context;
+ }
+ component.__p = component.__s = component.__c = component.__b = null;
+ component.__d = !1;
+ if (!skip) {
+ rendered = component.render(props, state, context);
+ if (component.getChildContext) context = extend(extend({}, context), component.getChildContext());
+ if (isUpdate && component.getSnapshotBeforeUpdate) snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);
+ var toUnmount, base, childComponent = rendered && rendered.nodeName;
+ if ('function' == typeof childComponent) {
+ var childProps = getNodeProps(rendered);
+ inst = initialChildComponent;
+ if (inst && inst.constructor === childComponent && childProps.key == inst.__k) setComponentProps(inst, childProps, 1, context, !1); else {
+ toUnmount = inst;
+ component._component = inst = createComponent(childComponent, childProps, context);
+ inst.__b = inst.__b || nextBase;
+ inst.__u = component;
+ setComponentProps(inst, childProps, 0, context, !1);
+ renderComponent(inst, 1, mountAll, !0);
+ }
+ base = inst.base;
+ } else {
+ cbase = initialBase;
+ toUnmount = initialChildComponent;
+ if (toUnmount) cbase = component._component = null;
+ if (initialBase || 1 === renderMode) {
+ if (cbase) cbase._component = null;
+ base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0);
+ }
+ }
+ if (initialBase && base !== initialBase && inst !== initialChildComponent) {
+ var baseParent = initialBase.parentNode;
+ if (baseParent && base !== baseParent) {
+ baseParent.replaceChild(base, initialBase);
+ if (!toUnmount) {
+ initialBase._component = null;
+ recollectNodeTree(initialBase, !1);
+ }
+ }
+ }
+ if (toUnmount) unmountComponent(toUnmount);
+ component.base = base;
+ if (base && !isChild) {
+ var componentRef = component, t = component;
+ while (t = t.__u) (componentRef = t).base = base;
+ base._component = componentRef;
+ base._componentConstructor = componentRef.constructor;
+ }
+ }
+ if (!isUpdate || mountAll) mounts.unshift(component); else if (!skip) {
+ if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, snapshot);
+ if (options.afterUpdate) options.afterUpdate(component);
+ }
+ while (component.__h.length) component.__h.pop().call(component);
+ if (!diffLevel && !isChild) flushMounts();
+ }
+ }
+ function buildComponentFromVNode(dom, vnode, context, mountAll) {
+ var c = dom && dom._component, originalComponent = c, oldDom = dom, isDirectOwner = c && dom._componentConstructor === vnode.nodeName, isOwner = isDirectOwner, props = getNodeProps(vnode);
+ while (c && !isOwner && (c = c.__u)) isOwner = c.constructor === vnode.nodeName;
+ if (c && isOwner && (!mountAll || c._component)) {
+ setComponentProps(c, props, 3, context, mountAll);
+ dom = c.base;
+ } else {
+ if (originalComponent && !isDirectOwner) {
+ unmountComponent(originalComponent);
+ dom = oldDom = null;
+ }
+ c = createComponent(vnode.nodeName, props, context);
+ if (dom && !c.__b) {
+ c.__b = dom;
+ oldDom = null;
+ }
+ setComponentProps(c, props, 1, context, mountAll);
+ dom = c.base;
+ if (oldDom && dom !== oldDom) {
+ oldDom._component = null;
+ recollectNodeTree(oldDom, !1);
+ }
+ }
+ return dom;
+ }
+ function unmountComponent(component) {
+ if (options.beforeUnmount) options.beforeUnmount(component);
+ var base = component.base;
+ component.__x = !0;
+ if (component.componentWillUnmount) component.componentWillUnmount();
+ component.base = null;
+ var inner = component._component;
+ if (inner) unmountComponent(inner); else if (base) {
+ if (base.__preactattr_ && base.__preactattr_.ref) base.__preactattr_.ref(null);
+ component.__b = base;
+ removeNode(base);
+ recyclerComponents.push(component);
+ removeChildren(base);
+ }
+ if (component.__r) component.__r(null);
+ }
+ function Component(props, context) {
+ this.__d = !0;
+ this.context = context;
+ this.props = props;
+ this.state = this.state || {};
+ this.__h = [];
+ }
+ function render(vnode, parent, merge) {
+ return diff(merge, vnode, {}, !1, parent, !1);
+ }
+ var VNode = function() {};
+ var options = {};
+ var stack = [];
+ var EMPTY_CHILDREN = [];
+ var defer = 'function' == typeof Promise ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;
+ var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
+ var items = [];
+ var mounts = [];
+ var diffLevel = 0;
+ var isSvgMode = !1;
+ var hydrating = !1;
+ var recyclerComponents = [];
+ extend(Component.prototype, {
+ setState: function(state, callback) {
+ var prev = this.__s = this.state;
+ if ('function' == typeof state) state = state(prev, this.props);
+ this.state = extend(extend({}, prev), state);
+ if (callback) this.__h.push(callback);
+ enqueueRender(this);
+ },
+ forceUpdate: function(callback) {
+ if (callback) this.__h.push(callback);
+ renderComponent(this, 2);
+ },
+ render: function() {}
+ });
+ var preact = {
+ h: h,
+ createElement: h,
+ cloneElement: cloneElement,
+ Component: Component,
+ render: render,
+ rerender: rerender,
+ options: options
+ };
+ if ('undefined' != typeof module) module.exports = preact; else self.preact = preact;
+}();
+
+},{}],23:[function(require,module,exports){
+function tlite(getTooltipOpts) {
+ document.addEventListener('mouseover', function (e) {
+ var el = e.target;
+ var opts = getTooltipOpts(el);
+
+ if (!opts) {
+ el = el.parentElement;
+ opts = el && getTooltipOpts(el);
+ }
+
+ opts && tlite.show(el, opts, true);
+ });
+}
+
+tlite.show = function (el, opts, isAuto) {
+ var fallbackAttrib = 'data-tlite';
+ opts = opts || {};
+
+ (el.tooltip || Tooltip(el, opts)).show();
+
+ function Tooltip(el, opts) {
+ var tooltipEl;
+ var showTimer;
+ var text;
+
+ el.addEventListener('mousedown', autoHide);
+ el.addEventListener('mouseleave', autoHide);
+
+ function show() {
+ text = el.title || el.getAttribute(fallbackAttrib) || text;
+ el.title = '';
+ el.setAttribute(fallbackAttrib, '');
+ text && !showTimer && (showTimer = setTimeout(fadeIn, isAuto ? 150 : 1))
+ }
+
+ function autoHide() {
+ tlite.hide(el, true);
+ }
+
+ function hide(isAutoHiding) {
+ if (isAuto === isAutoHiding) {
+ showTimer = clearTimeout(showTimer);
+ var parent = tooltipEl && tooltipEl.parentNode;
+ parent && parent.removeChild(tooltipEl);
+ tooltipEl = undefined;
+ }
+ }
+
+ function fadeIn() {
+ if (!tooltipEl) {
+ tooltipEl = createTooltip(el, text, opts);
+ }
+ }
+
+ return el.tooltip = {
+ show: show,
+ hide: hide
+ };
+ }
+
+ function createTooltip(el, text, opts) {
+ var tooltipEl = document.createElement('span');
+ var grav = opts.grav || el.getAttribute('data-tlite') || 'n';
+
+ tooltipEl.innerHTML = text;
+
+ el.appendChild(tooltipEl);
+
+ var vertGrav = grav[0] || '';
+ var horzGrav = grav[1] || '';
+
+ function positionTooltip() {
+ tooltipEl.className = 'tlite ' + 'tlite-' + vertGrav + horzGrav;
+
+ var arrowSize = 10;
+ var top = el.offsetTop;
+ var left = el.offsetLeft;
+
+ if (tooltipEl.offsetParent === el) {
+ top = left = 0;
+ }
+
+ var width = el.offsetWidth;
+ var height = el.offsetHeight;
+ var tooltipHeight = tooltipEl.offsetHeight;
+ var tooltipWidth = tooltipEl.offsetWidth;
+ var centerEl = left + (width / 2);
+
+ tooltipEl.style.top = (
+ vertGrav === 's' ? (top - tooltipHeight - arrowSize) :
+ vertGrav === 'n' ? (top + height + arrowSize) :
+ (top + (height / 2) - (tooltipHeight / 2))
+ ) + 'px';
+
+ tooltipEl.style.left = (
+ horzGrav === 'w' ? left :
+ horzGrav === 'e' ? left + width - tooltipWidth :
+ vertGrav === 'w' ? (left + width + arrowSize) :
+ vertGrav === 'e' ? (left - tooltipWidth - arrowSize) :
+ (centerEl - tooltipWidth / 2)
+ ) + 'px';
+ }
+
+ positionTooltip();
+
+ var rect = tooltipEl.getBoundingClientRect();
+
+ if (vertGrav === 's' && rect.top < 0) {
+ vertGrav = 'n';
+ positionTooltip();
+ } else if (vertGrav === 'n' && rect.bottom > window.innerHeight) {
+ vertGrav = 's';
+ positionTooltip();
+ } else if (vertGrav === 'e' && rect.left < 0) {
+ vertGrav = 'w';
+ positionTooltip();
+ } else if (vertGrav === 'w' && rect.right > window.innerWidth) {
+ vertGrav = 'e';
+ positionTooltip();
+ }
+
+ tooltipEl.className += ' tlite-visible';
+
+ return tooltipEl;
+ }
+};
+
+tlite.hide = function (el, isAuto) {
+ el.tooltip && el.tooltip.hide(isAuto);
+};
+
+if (typeof module !== 'undefined' && module.exports) {
+ module.exports = tlite;
+}
+
+},{}]},{},[2]);
+; })();
\ No newline at end of file
--- /dev/null
+!function(){var o=void 0;!function o(a,l,s){function c(t,e){if(!l[t]){if(!a[t]){var r=!1;if(!e&&r)return r(t,!0);if(u)return u(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var i=l[t]={exports:{}};a[t][0].call(i.exports,function(e){return c(a[t][1][e]||e)},i,i.exports,o,a,l,s)}return l[t].exports}for(var u=!1,e=0;e<s.length;e++)c(s[e]);return c}({1:[function(e,t,r){"use strict";function n(e){"A"===e.target.tagName&&(e.target.hasAttribute("data-hf-confirm")&&(confirm(e.target.getAttribute("data-hf-confirm"))||e.preventDefault()))}Object.defineProperty(r,"__esModule",{value:!0}),r.default={init:function(){document.body.addEventListener("click",n,!0)}}},{}],2:[function(e,t,r){"use strict";var n=c(e("./tabs.js")),i=c(e("./form-editor.js")),o=c(e("./form-actions.js")),a=c(e("./field-builder.js")),l=c(e("./action-confirmations.js")),s=c(e("tlite"));function c(e){return e&&e.__esModule?e:{default:e}}window.html_forms={},n.default.init(),l.default.init(),document.getElementById("hf-form-editor")&&(i.default.init(),o.default.init(),a.default.init(i.default)),(0,s.default)(function(e){return-1<e.className.indexOf("hf-tooltip")}),window.html_forms.FieldBuilder=a.default,window.html_forms.Editor=i.default,"edit"===hf_options.view&&window.columns.useCheckboxesForHidden()},{"./action-confirmations.js":1,"./field-builder.js":6,"./form-actions.js":8,"./form-editor.js":9,"./tabs.js":10,tlite:23}],3:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.FieldBuilder=void 0;var n,i=function(){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}}(),a=e("preact"),o=e("decko"),l=e("./field-configurator.js");function s(r,n,e,t,i){var o={};return Object.keys(t).forEach(function(e){o[e]=t[e]}),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=e.slice().reverse().reduce(function(e,t){return t(r,n,e)||e},o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(r,n,o),o=null),o}var c=(s((n=function(e){function r(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r);var t=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,e));return t.state={activeField:null},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,a.Component),i(r,[{key:"handleCancel",value:function(){this.setState({activeField:null})}},{key:"openFieldConfig",value:function(e){var t=this.props.fields[e.target.value];this.state.activeField===t?this.setState({activeField:null}):this.setState({activeField:t})}},{key:"render",value:function(e,r){var n=this,t=e.fields.map(function(e,t){return(0,a.h)("button",{type:"button",value:t,className:"button "+(r.activeField===e?"active":""),onClick:n.openFieldConfig},e.label)}),i=r.activeField?r.activeField.key:"",o=r.activeField?r.activeField.configRows:[];return(0,a.h)("div",{class:"hf-field-builder"},(0,a.h)("h4",null,"Add field"),(0,a.h)("div",{class:"available-fields"},t),(0,a.h)("div",{style:"max-width: 480px;"},(0,a.h)(l.FieldConfigurator,{fieldType:i,rows:o,onCancel:this.handleCancel})),null===r.activeField?(0,a.h)("p",{class:"help",style:"margin-bottom: 0;"},"Use the buttons above to generate your field HTML, or manually modify your form below."):"")}}]),r}()).prototype,"handleCancel",[o.bind],Object.getOwnPropertyDescriptor(n.prototype,"handleCancel"),n.prototype),s(n.prototype,"openFieldConfig",[o.bind],Object.getOwnPropertyDescriptor(n.prototype,"openFieldConfig"),n.prototype),n);r.FieldBuilder=c},{"./field-configurator.js":4,decko:19,preact:22}],4:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.FieldConfigurator=void 0;var n,i,o=function(){function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}}(),a=e("preact"),l=e("decko"),s=e("../field-builder/html.js"),c=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}}(e("./field-settings.js")),u=e("linkstate"),d=(i=u)&&i.__esModule?i:{default:i};function f(r,n,e,t,i){var o={};return Object.keys(t).forEach(function(e){o[e]=t[e]}),o.enumerable=!!o.enumerable,o.configurable=!!o.configurable,("value"in o||o.initializer)&&(o.writable=!0),o=e.slice().reverse().reduce(function(e,t){return t(r,n,e)||e},o),i&&void 0!==o.initializer&&(o.value=o.initializer?o.initializer.call(i):void 0,o.initializer=void 0),void 0===o.initializer&&(Object.defineProperty(r,n,o),o=null),o}var h=(f((n=function(e){function i(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i);var t=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,e));return t.state=t.getInitialState(),t.choiceHandlers={add:t.addChoice,delete:t.deleteChoice,changeLabel:t.changeChoiceLabel,toggleChecked:t.toggleChoiceChecked},t}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(i,a.Component),o(i,[{key:"getInitialState",value:function(){return{formId:document.querySelector('input[name="form_id"]').value,formSlug:document.querySelector('input[name="form[slug]"]').value,fieldType:"",fieldLabel:"",placeholder:"",value:"",wrap:!0,required:!1,choices:[{checked:!1,label:"One"},{checked:!1,label:"Two"}],accept:""}}},{key:"componentWillReceiveProps",value:function(e){var t={fieldType:e.fieldType};"checkbox"===this.state.fieldType&&"checkbox"!==e.fieldType&&(t.choices=this.state.choices.map(function(e,t){return e.checked=!1,e})),this.setState(t)}},{key:"addToForm",value:function(){var e=(0,s.htmlgenerate)(this.state);html_forms.Editor.replaceSelection(e)}},{key:"addChoice",value:function(){var e=this.state.choices;e.push({checked:!1,label:"..."}),this.setState({choices:e})}},{key:"deleteChoice",value:function(e){var t=this.state.choices,r=e.target.parentElement.getAttribute("data-key");t.splice(r,1),this.setState({choices:t})}},{key:"changeChoiceLabel",value:function(e){var t=this.state.choices;t[e.target.parentElement.getAttribute("data-key")].label=e.target.value,this.setState({choices:t})}},{key:"toggleChoiceChecked",value:function(e){var t=this.state.choices,r=e.target.parentElement.getAttribute("data-key");t[r].checked=!t[r].checked,this.setState({choices:t})}},{key:"handleCancel",value:function(){this.setState(this.getInitialState()),this.props.onCancel()}},{key:"render",value:function(e,t){if(0==e.rows.length)return"";for(var r=[],n=0;n<e.rows.length;n++)switch(e.rows[n]){case"label":r.push((0,a.h)(c.Label,{value:t.fieldLabel,onChange:(0,d.default)(this,"fieldLabel")}));break;case"placeholder":r.push((0,a.h)(c.Placeholder,{value:t.placeholder,onChange:(0,d.default)(this,"placeholder")}));break;case"default-value":r.push((0,a.h)(c.DefaultValue,{value:t.value,onChange:(0,d.default)(this,"value")}));break;case"required":r.push((0,a.h)(c.Required,{checked:t.required,onChange:(0,d.default)(this,"required")}));break;case"wrap":r.push((0,a.h)(c.Wrap,{checked:t.wrap,onChange:(0,d.default)(this,"wrap")}));break;case"add-to-form":r.push((0,a.h)(c.AddToForm,{onSubmit:this.addToForm,onCancel:this.handleCancel}));break;case"choices":r.push((0,a.h)(c.Choices,{multiple:"checkbox"===t.fieldType,choices:t.choices,handlers:this.choiceHandlers}));break;case"button-text":r.push((0,a.h)(c.ButtonText,{value:t.value,onChange:(0,d.default)(this,"value")}));break;case"accept":r.push((0,a.h)(c.Accept,{value:t.accept,onChange:(0,d.default)(this,"accept")}))}return(0,a.h)("div",{class:"field-config",onKeyPress:i.handleKeyPress},r)}}],[{key:"handleKeyPress",value:function(e){13===e.keyCode&&e.preventDefault()}}]),i}()).prototype,"addToForm",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"addToForm"),n.prototype),f(n.prototype,"addChoice",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"addChoice"),n.prototype),f(n.prototype,"deleteChoice",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"deleteChoice"),n.prototype),f(n.prototype,"changeChoiceLabel",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"changeChoiceLabel"),n.prototype),f(n.prototype,"toggleChoiceChecked",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"toggleChoiceChecked"),n.prototype),f(n,"handleKeyPress",[l.bind],Object.getOwnPropertyDescriptor(n,"handleKeyPress"),n),f(n.prototype,"handleCancel",[l.bind],Object.getOwnPropertyDescriptor(n.prototype,"handleCancel"),n.prototype),n);r.FieldConfigurator=h},{"../field-builder/html.js":7,"./field-settings.js":5,decko:19,linkstate:20,preact:22}],5:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.Accept=r.ButtonText=r.Choices=r.Required=r.Wrap=r.DefaultValue=r.Placeholder=r.Label=r.AddToForm=void 0;var n=e("preact");r.AddToForm=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("button",{class:"button",type:"button",onClick:e.onSubmit},"Add field to form")," ",(0,n.h)("a",{href:"javascript:void(0);",class:"hf-small",style:"vertical-align: middle;",onClick:e.onCancel},"or close field helper"))},r.Label=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-field-label"},"Field label ",(0,n.h)("span",{class:"hf-required"},"*")),(0,n.h)("input",{id:"hf-fg-field-label",type:"text",value:e.value,onChange:e.onChange}))},r.Placeholder=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-placeholder"},"Placeholder ",(0,n.h)("span",{class:"hf-italic hf-pull-right"},"Optional")),(0,n.h)("input",{id:"hf-fg-placeholder",type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Text to show when field has no value."))},r.DefaultValue=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-default-value"},"Default value ",(0,n.h)("span",{class:"hf-italic hf-pull-right"},"Optional")),(0,n.h)("input",{id:"hf-fg-default-value",type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Text to pre-fill this field with."))},r.Wrap=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{class:"inline"},(0,n.h)("input",{type:"checkbox",value:"1",defaultChecked:e.checked,onChange:e.onChange}),"Wrap this field in paragraph tags."))},r.Required=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{class:"inline"},(0,n.h)("input",{type:"checkbox",value:"1",defaultChecked:e.checked,onChange:e.onChange}),"This field is required."))},r.Choices=function(r){var e=r.choices.map(function(e,t){return(0,n.h)("div",{"data-key":t},(0,n.h)("input",{type:r.multiple?"checkbox":"radio",name:"selected",defaultChecked:e.checked,onChange:r.handlers.toggleChecked,title:"Pre-select this choice?"}),(0,n.h)("input",{type:"text",value:e.label,placeholder:"Choice label",style:"width: 80%;",onChange:r.handlers.changeLabel}),(0,n.h)("a",{href:"javascript:void(0);",onClick:r.handlers.delete,style:"text-decoration: none;",title:"Delete choice"},"✕"))});return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",null,"Choices"),e,(0,n.h)("input",{type:r.multiple?"checkbox":"radio",style:"visibility: hidden;"}),(0,n.h)("a",{href:"javascript:void(0);",onClick:r.handlers.add},"Add choice"))},r.ButtonText=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",{for:"hf-fg-default-value"},"Button text ",(0,n.h)("span",{class:"hf-required"},"*")),(0,n.h)("input",{id:"hf-fg-default-value",type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Text to show on the button."))},r.Accept=function(e){return(0,n.h)("div",{class:"hf-small-margin"},(0,n.h)("label",null,"Accepted file types"),(0,n.h)("input",{type:"text",value:e.value,onChange:e.onChange}),(0,n.h)("p",{class:"help"},"Use a comma-separated list of accepted file extensions, eg ",(0,n.h)("code",null,".pdf"),". ",(0,n.h)("br",null),"Leave empty to accept any file type."))}},{preact:22}],6:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=e("preact"),i=e("./components/field-builder.js"),o=void 0,a=void 0;function l(e,t,r){this.key=e,this.label=t,this.configRows=r||[]}function s(){o=(0,n.render)((0,n.h)(i.FieldBuilder,{fields:a}),document.getElementById("hf-field-builder"),o)}a=[new l("text","Text",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("email","Email",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("url","URL",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("number","Number",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("date","Date",["label","default-value","required","wrap","add-to-form"]),new l("textarea","Textarea",["label","placeholder","default-value","required","wrap","add-to-form"]),new l("dropdown","Dropdown",["label","choices","required","wrap","add-to-form"]),new l("checkbox","Checkboxes",["label","choices","wrap","add-to-form"]),new l("radio","Radio buttons",["label","choices","wrap","add-to-form"]),new l("submit","Submit button",["button-text","wrap","add-to-form"])],r.default={init:function(){s()},registerField:function(e,t,r){a.push(new l(e,t,r)),s()}}},{"./components/field-builder.js":3,preact:22}],7:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.htmlgenerate=void 0;var n,i=e("preact-render-to-string"),s=(n=i)&&n.__esModule?n:{default:n},c=e("preact");function u(e,t,r){return(0,c.h)(e,function(e){var t={};for(var r in e)!1!==e[r]&&""!==e[r]&&(t[r]=e[r]);return t}(t),r)}r.htmlgenerate=function(e){var t=e.fieldLabel.replace(/ /g,"_").replace(/[^\w\[\]_]*/g,"").toUpperCase(),r=e.formSlug+"-"+t,n=e.fieldLabel.length&&"submit"!==e.fieldType?(0,c.h)("label",{for:r},e.fieldLabel):"",i=void 0,o=void 0;switch(e.fieldType){case"text":default:o=u("input",i={type:e.fieldType,name:t,value:e.value,placeholder:e.placeholder,required:e.required,id:r});break;case"textarea":o=u("textarea",i={name:t,placeholder:e.placeholder,required:e.required,id:r},e.value);break;case"dropdown":o=u("select",i={name:t,required:e.required,id:r},e.choices.map(function(e){return u("option",{selected:e.checked},e.label)}));break;case"radio":o=e.choices.map(function(e){return u("label",{},[u("input",{type:"radio",name:t,value:e.label,selected:e.checked})," ",u("span",{},e.label)])});break;case"checkbox":o=e.choices.map(function(e){return u("label",{},[u("input",{type:"checkbox",name:t+"[]",value:e.label,checked:e.checked})," ",u("span",{},e.label)])});break;case"file":i={type:"file",name:t,required:e.required,id:r},e.accept&&(i.accept=e.accept),o=u("input",i);break;case"submit":o=u("input",i={type:"submit",value:e.value})}var a="";if(e.wrap){var l=(0,c.h)("p",{},[n,o]);a=(0,s.default)(l,null,{pretty:!0})}else a+=(0,s.default)(n,null,{pretty:!0}),a+="\n",a+=(0,s.default)(o,null,{pretty:!0});return a}},{preact:22,"preact-render-to-string":21}],8:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=void 0,a=void 0,u=void 0;function l(e,t){var r=document.createElement("div");r.className="hf-accordion expanded ";var n=document.createElement("h4");n.className="hf-accordion-heading",n.innerHTML=e,r.appendChild(n);var i=document.createElement("div");i.className="hf-accordion-content",i.innerHTML=t,r.appendChild(i);var o=document.createElement("p");o.style.textAlign="right";var a,l,s,c=document.createElement("a");return c.href="javascript:void(0);",c.className="danger",c.innerText="Delete this action",o.appendChild(c),i.appendChild(o),n.addEventListener("click",(a=r,l=i,function(){var e=null===l.offsetParent;a.className=a.className.replace("expanded","")+(e?" expanded":""),l.style.display=e?"block":"none"})),c.addEventListener("click",(s=r,function(){u.removeChild(s),1===u.childElementCount&&(u.querySelector("#hf-form-actions-empty").style.display="")})),r}function i(e){var t=e.target||e.srcElement;if("INPUT"===t.tagName){var r=t.getAttribute("data-action-type"),n=a.querySelector("#hf-action-type-"+r+"-template"),i=u.querySelectorAll("div").length-1,o=l(t.value,n.innerHTML.replace(/\$index/g,i));u.appendChild(o),u.querySelector("#hf-form-actions-empty").style.display="none"}}r.default={init:function(){u=document.getElementById("hf-form-actions"),n=document.getElementById("hf-available-form-actions"),a=document.getElementById("hf-form-action-templates"),[].forEach.call(u.querySelectorAll(".hf-action-settings"),function(e){e.parentNode.removeChild(e);var t=e.getAttribute("data-title"),r=e.querySelector(".hf-action-summary");r&&(t+=' — <span class="hf-muted">'+r.innerHTML+"</span>");var n=l(t,e.innerHTML);u.appendChild(n),u.querySelector("#hf-form-actions-empty").style.display="none"}),n.addEventListener("click",i,!0)}}},{}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=e("codemirror");e("codemirror/mode/xml/xml"),e("codemirror/mode/javascript/javascript"),e("codemirror/mode/css/css"),e("codemirror/mode/htmlmixed/htmlmixed"),e("codemirror/addon/fold/xml-fold"),e("codemirror/addon/edit/matchtags"),e("codemirror/addon/edit/closetag.js");var i=void 0,o=void 0,a=void 0,l=void 0,s=void 0,c=void 0,u=void 0,d=/\{\{ *(\w+)(?:\.([\w\.]+))? *(?:\|\| *(\w+))? *\}\}/g;function f(){var e=c.contentDocument||c.contentWindow.document;(u=e.querySelector(".hf-fields-wrap"))&&m()}function h(e){return e.name.replace("[]","").replace(/\[(\w+)\]/g,".$1")}function p(){var e,t,r=a.querySelectorAll("input[name], select[name], textarea[name], button[name]"),i=(e=[].map.call(r,function(e){return"["+h(e)+"]"}),t={},e.filter(function(e){return!t.hasOwnProperty(e)&&(t[e]=!0)})),o=document.getElementById("wpbody-content");[].forEach.call(document.querySelectorAll(".hf-field-names"),function(n){for(;n.firstChild;)n.removeChild(n.firstChild);i.map(function(e){var t=document.createElement("span");t.style.visibility="hidden",t.innerText=e,o.appendChild(t);var r=t.offsetWidth;o.removeChild(t);var n=document.createElement("input");return n.setAttribute("type","text"),n.style.maxWidth=1.1*r+14+"px",n.setAttribute("value",e),n.setAttribute("readonly",!0),n.setAttribute("onfocus","this.select()"),n}).forEach(function(e,t,r){n.appendChild(e)})})}function m(){var e=i.getValue();e=e.replace(d,function(e,t){return arguments[3]?arguments[3]:""}),u.innerHTML=e,u.dispatchEvent(new Event("hf-refresh"))}function g(){a.innerHTML=i.getValue()}function v(){var e=a.querySelectorAll("[required]"),t=[].map.call(e,h);l.value=t.join(",")}function y(){var e=a.querySelectorAll('input[type="email"]'),t=[].map.call(e,h);s.value=t.join(",")}function b(n,i,o){var a;return function(){var e=this,t=arguments,r=o&&!a;clearTimeout(a),a=setTimeout(function(){a=null,o||n.apply(e,t)},i),r&&n.apply(e,t)}}r.default={init:function(){c=document.getElementById("hf-form-preview"),o=document.getElementById("hf-form-editor"),a=document.createElement("form"),l=document.getElementById("hf-required-fields"),s=document.getElementById("hf-email-fields"),a.innerHTML=o.value,(i=n.fromTextArea(o,{selectionPointer:!0,matchTags:{bothTags:!0},mode:"htmlmixed",htmlMode:!0,autoCloseTags:!0,autoRefresh:!0,styleActiveLine:!0,matchBrackets:!0})).on("changes",b(m,500)),i.on("changes",b(g,100)),i.on("changes",b(p,500)),i.on("blur",m),i.on("blur",g),i.on("blur",p),i.on("blur",v),i.on("blur",y),c.addEventListener("load",f),f(),p()},replaceSelection:function(e){i.replaceSelection(e),i.focus()}}},{codemirror:14,"codemirror/addon/edit/closetag.js":11,"codemirror/addon/edit/matchtags":12,"codemirror/addon/fold/xml-fold":13,"codemirror/mode/css/css":15,"codemirror/mode/htmlmixed/htmlmixed":16,"codemirror/mode/javascript/javascript":17,"codemirror/mode/xml/xml":18}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var a=void 0,l=void 0;function n(e){for(var t=this.getAttribute("data-tab-target"),r=0;r<l.length;r++)l[r].classList.toggle("nav-tab-active",l[r]===this);this.blur();for(var n=0;n<a.length;n++){var i=a[n];i.classList.toggle("hf-tab-active",i.getAttribute("data-tab")===t)}if(document.title=document.title.replace(document.title.split(" - ").shift(),this.innerText+" "),window.history){var o=window.location.href;o=o.replace(/\&tab\=\w+/,""),o+="&tab="+t,window.history.replaceState({tab:t},document.title,o)}e.preventDefault()}r.default={init:function(){a=document.querySelectorAll(".hf-tab"),l=document.querySelectorAll("#hf-tabs-nav a");for(var e=0;e<l.length;e++)l[e].addEventListener("click",n)},open:n}},{}],11:[function(e,t,r){var n;n=function(y){y.defineOption("autoCloseTags",!1,function(e,t,r){if(r!=y.Init&&r&&e.removeKeyMap("autoCloseTags"),t){var n={name:"autoCloseTags"};("object"!=typeof t||t.whenClosing)&&(n["'/'"]=function(e){return(t=e).getOption("disableInput")?y.Pass:i(t,!0);var t}),("object"!=typeof t||t.whenOpening)&&(n["'>'"]=function(e){return function(e){if(e.getOption("disableInput"))return y.Pass;for(var t=e.listSelections(),r=[],n=e.getOption("autoCloseTags"),i=0;i<t.length;i++){if(!t[i].empty())return y.Pass;var o=t[i].head,a=e.getTokenAt(o),l=y.innerMode(e.getMode(),a.state),s=l.state;if("xml"!=l.mode.name||!s.tagName)return y.Pass;var c="html"==l.mode.configuration,u="object"==typeof n&&n.dontCloseTags||c&&b,d="object"==typeof n&&n.indentTags||c&&w,f=s.tagName;a.end>o.ch&&(f=f.slice(0,f.length-a.end+o.ch));var h=f.toLowerCase();if(!f||"string"==a.type&&(a.end!=o.ch||!/[\"\']/.test(a.string.charAt(a.string.length-1))||1==a.string.length)||"tag"==a.type&&"closeTag"==s.type||a.string.indexOf("/")==a.string.length-1||u&&-1<x(u,h)||k(e,f,o,s,!0))return y.Pass;var p=d&&-1<x(d,h);r[i]={indent:p,text:">"+(p?"\n\n":"")+"</"+f+">",newPos:p?y.Pos(o.line+1,0):y.Pos(o.line,o.ch+1)}}for(var m="object"==typeof n&&n.dontIndentOnAutoClose,i=t.length-1;0<=i;i--){var g=r[i];e.replaceRange(g.text,t[i].head,t[i].anchor,"+insert");var v=e.listSelections().slice(0);v[i]={head:g.newPos,anchor:g.newPos},e.setSelections(v),!m&&g.indent&&(e.indentLine(g.newPos.line,null,!0),e.indentLine(g.newPos.line+1,null,!0))}}(e)}),e.addKeyMap(n)}});var b=["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"],w=["applet","blockquote","body","button","div","dl","fieldset","form","frameset","h1","h2","h3","h4","h5","h6","head","html","iframe","layer","legend","object","ol","p","select","table","ul"];function i(e,t){for(var r=e.listSelections(),n=[],i=t?"/":"</",o=e.getOption("autoCloseTags"),a="object"==typeof o&&o.dontIndentOnSlash,l=0;l<r.length;l++){if(!r[l].empty())return y.Pass;var s,c=r[l].head,u=e.getTokenAt(c),d=y.innerMode(e.getMode(),u.state),f=d.state;if(t&&("string"==u.type||"<"!=u.string.charAt(0)||u.start!=c.ch-1))return y.Pass;if("xml"!=d.mode.name)if("htmlmixed"==e.getMode().name&&"javascript"==d.mode.name)s=i+"script";else{if("htmlmixed"!=e.getMode().name||"css"!=d.mode.name)return y.Pass;s=i+"style"}else{if(!f.context||!f.context.tagName||k(e,f.context.tagName,c,f))return y.Pass;s=i+f.context.tagName}">"!=e.getLine(c.line).charAt(u.end)&&(s+=">"),n[l]=s}if(e.replaceSelections(n),r=e.listSelections(),!a)for(l=0;l<r.length;l++)(l==r.length-1||r[l].head.line<r[l+1].head.line)&&e.indentLine(r[l].head.line)}function x(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;++r)if(e[r]==t)return r;return-1}function k(e,t,r,n,i){if(!y.scanForClosingTag)return!1;var o=Math.min(e.lastLine()+1,r.line+500),a=y.scanForClosingTag(e,r,null,o);if(!a||a.tag!=t)return!1;for(var l=n.context,s=i?1:0;l&&l.tagName==t;l=l.prev)++s;r=a.to;for(var c=1;c<s;c++){var u=y.scanForClosingTag(e,r,null,o);if(!u||u.tag!=t)return!1;r=u.to}return!0}y.commands.closeTag=function(e){return i(e)}},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror"),e("../fold/xml-fold")):"function"==typeof o&&o.amd?o(["../../lib/codemirror","../fold/xml-fold"],n):n(CodeMirror)},{"../../lib/codemirror":14,"../fold/xml-fold":13}],12:[function(e,t,r){var n;n=function(a){"use strict";function l(e){e.state.tagHit&&e.state.tagHit.clear(),e.state.tagOther&&e.state.tagOther.clear(),e.state.tagHit=e.state.tagOther=null}function n(o){o.state.failedTagMatch=!1,o.operation(function(){if(l(o),!o.somethingSelected()){var e=o.getCursor(),t=o.getViewport();t.from=Math.min(t.from,e.line),t.to=Math.max(e.line+1,t.to);var r=a.findMatchingTag(o,e,t);if(r){if(o.state.matchBothTags){var n="open"==r.at?r.open:r.close;n&&(o.state.tagHit=o.markText(n.from,n.to,{className:"CodeMirror-matchingtag"}))}var i="close"==r.at?r.open:r.close;i?o.state.tagOther=o.markText(i.from,i.to,{className:"CodeMirror-matchingtag"}):o.state.failedTagMatch=!0}}})}function i(e){e.state.failedTagMatch&&n(e)}a.defineOption("matchTags",!1,function(e,t,r){r&&r!=a.Init&&(e.off("cursorActivity",n),e.off("viewportChange",i),l(e)),t&&(e.state.matchBothTags="object"==typeof t&&t.bothTags,e.on("cursorActivity",n),e.on("viewportChange",i),n(e))}),a.commands.toMatchingTag=function(e){var t=a.findMatchingTag(e,e.getCursor());if(t){var r="close"==t.at?t.open:t.close;r&&e.extendSelection(r.to,r.from)}}},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror"),e("../fold/xml-fold")):"function"==typeof o&&o.amd?o(["../../lib/codemirror","../fold/xml-fold"],n):n(CodeMirror)},{"../../lib/codemirror":14,"../fold/xml-fold":13}],13:[function(e,t,r){var n;n=function(e){"use strict";var s=e.Pos;function c(e,t){return e.line-t.line||e.ch-t.ch}var t="A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",n=new RegExp("<(/?)(["+t+"][A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD-:.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*)","g");function u(e,t,r,n){this.line=t,this.ch=r,this.cm=e,this.text=e.getLine(t),this.min=n?Math.max(n.from,e.firstLine()):e.firstLine(),this.max=n?Math.min(n.to-1,e.lastLine()):e.lastLine()}function i(e,t){var r=e.cm.getTokenTypeAt(s(e.line,t));return r&&/\btag\b/.test(r)}function o(e){if(!(e.line>=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function a(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function d(e){for(;;){var t=e.text.indexOf(">",e.ch);if(-1==t){if(o(e))continue;return}if(i(e,t+1)){var r=e.text.lastIndexOf("/",t),n=-1<r&&!/\S/.test(e.text.slice(r+1,t));return e.ch=t+1,n?"selfClose":"regular"}e.ch=t+1}}function f(e){for(;;){var t=e.ch?e.text.lastIndexOf("<",e.ch-1):-1;if(-1==t){if(a(e))continue;return}if(i(e,t+1)){n.lastIndex=t,e.ch=t;var r=n.exec(e.text);if(r&&r.index==t)return r}else e.ch=t}}function h(e){for(;;){n.lastIndex=e.ch;var t=n.exec(e.text);if(!t){if(o(e))continue;return}if(i(e,t.index+1))return e.ch=t.index+t[0].length,t;e.ch=t.index+1}}function p(e){for(;;){var t=e.ch?e.text.lastIndexOf(">",e.ch-1):-1;if(-1==t){if(a(e))continue;return}if(i(e,t+1)){var r=e.text.lastIndexOf("/",t),n=-1<r&&!/\S/.test(e.text.slice(r+1,t));return e.ch=t+1,n?"selfClose":"regular"}e.ch=t}}function m(e,t){for(var r=[];;){var n,i=h(e),o=e.line,a=e.ch-(i?i[0].length:0);if(!i||!(n=d(e)))return;if("selfClose"!=n)if(i[1]){for(var l=r.length-1;0<=l;--l)if(r[l]==i[2]){r.length=l;break}if(l<0&&(!t||t==i[2]))return{tag:i[2],from:s(o,a),to:s(e.line,e.ch)}}else r.push(i[2])}}function g(e,t){for(var r=[];;){var n=p(e);if(!n)return;if("selfClose"!=n){var i=e.line,o=e.ch,a=f(e);if(!a)return;if(a[1])r.push(a[2]);else{for(var l=r.length-1;0<=l;--l)if(r[l]==a[2]){r.length=l;break}if(l<0&&(!t||t==a[2]))return{tag:a[2],from:s(e.line,e.ch),to:s(i,o)}}}else f(e)}}e.registerHelper("fold","xml",function(e,t){for(var r=new u(e,t.line,0);;){var n=h(r);if(!n||r.line!=t.line)return;var i=d(r);if(!i)return;if(!n[1]&&"selfClose"!=i){var o=s(r.line,r.ch),a=m(r,n[2]);return a&&0<c(a.from,o)?{from:o,to:a.from}:null}}}),e.findMatchingTag=function(e,t,r){var n=new u(e,t.line,t.ch,r);if(-1!=n.text.indexOf(">")||-1!=n.text.indexOf("<")){var i=d(n),o=i&&s(n.line,n.ch),a=i&&f(n);if(i&&a&&!(0<c(n,t))){var l={from:s(n.line,n.ch),to:o,tag:a[2]};return"selfClose"==i?{open:l,close:null,at:"open"}:a[1]?{open:g(n,a[2]),close:l,at:"close"}:{open:l,close:m(n=new u(e,o.line,o.ch,r),a[2]),at:"open"}}}},e.findEnclosingTag=function(e,t,r,n){for(var i=new u(e,t.line,t.ch,r);;){var o=g(i,n);if(!o)break;var a=m(new u(e,t.line,t.ch,r),o.tag);if(a)return{open:o,close:a}}},e.scanForClosingTag=function(e,t,r,n){return m(new u(e,t.line,t.ch,n?{from:0,to:n}:null),r)}},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror")):"function"==typeof o&&o.amd?o(["../../lib/codemirror"],n):n(CodeMirror)},{"../../lib/codemirror":14}],14:[function(e,t,r){var n,i;n=this,i=function(){"use strict";var e=navigator.userAgent,t=navigator.platform,m=/gecko\/\d/i.test(e),r=/MSIE \d/.test(e),n=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),i=/Edge\/(\d+)/.exec(e),x=r||n||i,k=x&&(r?document.documentMode||6:+(i||n)[1]),b=!i&&/WebKit\//.test(e),o=b&&/Qt\/\d+\.\d+/.test(e),a=!i&&/Chrome\//.test(e),g=/Opera\//.test(e),s=/Apple Computer/.test(navigator.vendor),l=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),c=/PhantomJS/.test(e),u=!i&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),d=/Android/.test(e),f=u||d||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),w=u||/Mac/.test(t),h=/\bCrOS\b/.test(e),p=/win/i.test(t),v=g&&e.match(/Version\/(\d*\.\d*)/);v&&(v=Number(v[1])),v&&15<=v&&(b=!(g=!1));var y=w&&(o||g&&(null==v||v<12.11)),C=m||x&&9<=k;function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var T,L=function(e,t){var r=e.className,n=S(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:"")}};function M(e){for(var t=e.childNodes.length;0<t;--t)e.removeChild(e.firstChild);return e}function O(e,t){return M(e).appendChild(t)}function A(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function N(e,t,r,n){var i=A(e,t,r,n);return i.setAttribute("role","presentation"),i}function D(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function P(){var t;try{t=document.activeElement}catch(e){t=document.body||null}for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;return t}function _(e,t){var r=e.className;S(t).test(r)||(e.className+=(r?" ":"")+t)}function F(e,t){for(var r=e.split(" "),n=0;n<r.length;n++)r[n]&&!S(r[n]).test(t)&&(t+=" "+r[n]);return t}T=document.createRange?function(e,t,r,n){var i=document.createRange();return i.setEnd(n||e,r),i.setStart(e,t),i}:function(e,t,r){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(e){return n}return n.collapse(!0),n.moveEnd("character",r),n.moveStart("character",t),n};var W=function(e){e.select()};function z(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function E(e,t,r){for(var n in t||(t={}),e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function H(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\s\u00a0]/))&&(t=e.length);for(var o=n||0,a=i||0;;){var l=e.indexOf("\t",o);if(l<0||t<=l)return a+(t-o);a+=l-o,a+=r-a%r,o=l+1}}u?W=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:x&&(W=function(e){try{e.select()}catch(e){}});var I=function(){this.id=null};function j(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}I.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var B=30,R={toString:function(){return"CodeMirror.Pass"}},q={scroll:!1},U={origin:"*mouse"},V={origin:"+move"};function K(e,t,r){for(var n=0,i=0;;){var o=e.indexOf("\t",n);-1==o&&(o=e.length);var a=o-n;if(o==e.length||t<=i+a)return n+Math.min(a,t-i);if(i+=o-n,n=o+1,t<=(i+=r-i%r))return n}}var G=[""];function $(e){for(;G.length<=e;)G.push(X(G)+" ");return G[e]}function X(e){return e[e.length-1]}function Y(e,t){for(var r=[],n=0;n<e.length;n++)r[n]=t(e[n],n);return r}function Z(){}function Q(e,t){var r;return Object.create?r=Object.create(e):(Z.prototype=e,r=new Z),t&&E(t,r),r}var J=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function ee(e){return/\w/.test(e)||"\80"<e&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(-1<t.source.indexOf("\\w")&&ee(e))||t.test(e):ee(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ie(e){return 768<=e.charCodeAt(0)&&ne.test(e)}function oe(e,t,r){for(;(r<0?0<t:t<e.length)&&ie(e.charAt(t));)t+=r;return t}function ae(e,t,r){for(var n=r<t?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}function le(e,t,r){var n=this;this.input=r,n.scrollbarFiller=A("div",null,"CodeMirror-scrollbar-filler"),n.scrollbarFiller.setAttribute("cm-not-content","true"),n.gutterFiller=A("div",null,"CodeMirror-gutter-filler"),n.gutterFiller.setAttribute("cm-not-content","true"),n.lineDiv=N("div",null,"CodeMirror-code"),n.selectionDiv=A("div",null,null,"position: relative; z-index: 1"),n.cursorDiv=A("div",null,"CodeMirror-cursors"),n.measure=A("div",null,"CodeMirror-measure"),n.lineMeasure=A("div",null,"CodeMirror-measure"),n.lineSpace=N("div",[n.measure,n.lineMeasure,n.selectionDiv,n.cursorDiv,n.lineDiv],null,"position: relative; outline: none");var i=N("div",[n.lineSpace],"CodeMirror-lines");n.mover=A("div",[i],null,"position: relative"),n.sizer=A("div",[n.mover],"CodeMirror-sizer"),n.sizerWidth=null,n.heightForcer=A("div",null,null,"position: absolute; height: "+B+"px; width: 1px;"),n.gutters=A("div",null,"CodeMirror-gutters"),n.lineGutter=null,n.scroller=A("div",[n.sizer,n.heightForcer,n.gutters],"CodeMirror-scroll"),n.scroller.setAttribute("tabIndex","-1"),n.wrapper=A("div",[n.scrollbarFiller,n.gutterFiller,n.scroller],"CodeMirror"),x&&k<8&&(n.gutters.style.zIndex=-1,n.scroller.style.paddingRight=0),b||m&&f||(n.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(n.wrapper):e(n.wrapper)),n.viewFrom=n.viewTo=t.first,n.reportedViewFrom=n.reportedViewTo=t.first,n.view=[],n.renderedView=null,n.externalMeasured=null,n.viewOffset=0,n.lastWrapHeight=n.lastWrapWidth=0,n.updateLineNumbers=null,n.nativeBarWidth=n.barHeight=n.barWidth=0,n.scrollbarsClipped=!1,n.lineNumWidth=n.lineNumInnerWidth=n.lineNumChars=null,n.alignWidgets=!1,n.cachedCharWidth=n.cachedTextHeight=n.cachedPaddingH=null,n.maxLine=null,n.maxLineLength=0,n.maxLineChanged=!1,n.wheelDX=n.wheelDY=n.wheelStartX=n.wheelStartY=null,n.shift=!1,n.selForContextMenu=null,n.activeTouch=null,r.init(n)}function se(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t<o){r=i;break}t-=o}return r.lines[t]}function ce(e,r,n){var i=[],o=r.line;return e.iter(r.line,n.line+1,function(e){var t=e.text;o==n.line&&(t=t.slice(0,n.ch)),o==r.line&&(t=t.slice(r.ch)),i.push(t),++o}),i}function ue(e,t,r){var n=[];return e.iter(t,r,function(e){n.push(e.text)}),n}function de(e,t){var r=t-e.height;if(r)for(var n=e;n;n=n.parent)n.height+=r}function fe(e){if(null==e.parent)return null;for(var t=e.parent,r=j(t.lines,e),n=t.parent;n;n=(t=n).parent)for(var i=0;n.children[i]!=t;++i)r+=n.children[i].chunkSize();return r+t.first}function he(e,t){var r=e.first;e:do{for(var n=0;n<e.children.length;++n){var i=e.children[n],o=i.height;if(t<o){e=i;continue e}t-=o,r+=i.chunkSize()}return r}while(!e.lines);for(var a=0;a<e.lines.length;++a){var l=e.lines[a].height;if(t<l)break;t-=l}return r+a}function pe(e,t){return t>=e.first&&t<e.first+e.size}function me(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function ge(e,t,r){if(void 0===r&&(r=null),!(this instanceof ge))return new ge(e,t,r);this.line=e,this.ch=t,this.sticky=r}function ve(e,t){return e.line-t.line||e.ch-t.ch}function ye(e,t){return e.sticky==t.sticky&&0==ve(e,t)}function be(e){return ge(e.line,e.ch)}function we(e,t){return ve(e,t)<0?t:e}function xe(e,t){return ve(e,t)<0?e:t}function ke(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function Ce(e,t){if(t.line<e.first)return ge(e.first,0);var r,n,i,o=e.first+e.size-1;return t.line>o?ge(o,se(e,o).text.length):(n=se(e,(r=t).line).text.length,null==(i=r.ch)||n<i?ge(r.line,n):i<0?ge(r.line,0):r)}function Se(e,t){for(var r=[],n=0;n<t.length;n++)r[n]=Ce(e,t[n]);return r}var Te=!1,Le=!1;function Me(e,t,r){this.marker=e,this.from=t,this.to=r}function Oe(e,t){if(e)for(var r=0;r<e.length;++r){var n=e[r];if(n.marker==t)return n}}function Ne(e,t){for(var r,n=0;n<e.length;++n)e[n]!=t&&(r||(r=[])).push(e[n]);return r}function Ae(e,t){if(t.full)return null;var r=pe(e,t.from.line)&&se(e,t.from.line).markedSpans,n=pe(e,t.to.line)&&se(e,t.to.line).markedSpans;if(!r&&!n)return null;var i=t.from.ch,o=t.to.ch,a=0==ve(t.from,t.to),l=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],a=o.marker;if(null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t)||o.from==t&&"bookmark"==a.type&&(!r||!o.marker.insertLeft)){var l=null==o.to||(a.inclusiveRight?o.to>=t:o.to>t);(n||(n=[])).push(new Me(a,o.from,l?null:o.to))}}return n}(r,i,a),s=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],a=o.marker;if(null==o.to||(a.inclusiveRight?o.to>=t:o.to>t)||o.from==t&&"bookmark"==a.type&&(!r||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from<t);(n||(n=[])).push(new Me(a,l?null:o.from-t,null==o.to?null:o.to-t))}}return n}(n,o,a),c=1==t.text.length,u=X(t.text).length+(c?i:0);if(l)for(var d=0;d<l.length;++d){var f=l[d];if(null==f.to){var h=Oe(s,f.marker);h?c&&(f.to=null==h.to?null:h.to+u):f.to=i}}if(s)for(var p=0;p<s.length;++p){var m=s[p];if(null!=m.to&&(m.to+=u),null==m.from)Oe(l,m.marker)||(m.from=u,c&&(l||(l=[])).push(m));else m.from+=u,c&&(l||(l=[])).push(m)}l&&(l=De(l)),s&&s!=l&&(s=De(s));var g=[l];if(!c){var v,y=t.text.length-2;if(0<y&&l)for(var b=0;b<l.length;++b)null==l[b].to&&(v||(v=[])).push(new Me(l[b].marker,null,null));for(var w=0;w<y;++w)g.push(v);g.push(s)}return g}function De(e){for(var t=0;t<e.length;++t){var r=e[t];null!=r.from&&r.from==r.to&&!1!==r.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function Pe(e){var t=e.markedSpans;if(t){for(var r=0;r<t.length;++r)t[r].marker.detachLine(e);e.markedSpans=null}}function _e(e,t){if(t){for(var r=0;r<t.length;++r)t[r].marker.attachLine(e);e.markedSpans=t}}function Fe(e){return e.inclusiveLeft?-1:0}function We(e){return e.inclusiveRight?1:0}function ze(e,t){var r=e.lines.length-t.lines.length;if(0!=r)return r;var n=e.find(),i=t.find(),o=ve(n.from,i.from)||Fe(e)-Fe(t);if(o)return-o;var a=ve(n.to,i.to)||We(e)-We(t);return a||t.id-e.id}function Ee(e,t){var r,n=Le&&e.markedSpans;if(n)for(var i=void 0,o=0;o<n.length;++o)(i=n[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!r||ze(r,i.marker)<0)&&(r=i.marker);return r}function He(e){return Ee(e,!0)}function Ie(e){return Ee(e,!1)}function je(e,t){var r,n=Le&&e.markedSpans;if(n)for(var i=0;i<n.length;++i){var o=n[i];o.marker.collapsed&&(null==o.from||o.from<t)&&(null==o.to||o.to>t)&&(!r||ze(r,o.marker)<0)&&(r=o.marker)}return r}function Be(e,t,r,n,i){var o=se(e,t),a=Le&&o.markedSpans;if(a)for(var l=0;l<a.length;++l){var s=a[l];if(s.marker.collapsed){var c=s.marker.find(0),u=ve(c.from,r)||Fe(s.marker)-Fe(i),d=ve(c.to,n)||We(s.marker)-We(i);if(!(0<=u&&d<=0||u<=0&&0<=d)&&(u<=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?0<=ve(c.to,r):0<ve(c.to,r))||0<=u&&(s.marker.inclusiveRight&&i.inclusiveLeft?ve(c.from,n)<=0:ve(c.from,n)<0)))return!0}}}function Re(e){for(var t;t=He(e);)e=t.find(-1,!0).line;return e}function qe(e,t){var r=se(e,t),n=Re(r);return r==n?t:fe(n)}function Ue(e,t){if(t>e.lastLine())return t;var r,n=se(e,t);if(!Ve(e,n))return t;for(;r=Ie(n);)n=r.find(1,!0).line;return fe(n)+1}function Ve(e,t){var r=Le&&t.markedSpans;if(r)for(var n=void 0,i=0;i<r.length;++i)if((n=r[i]).marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&Ke(e,t,n))return!0}}function Ke(e,t,r){if(null==r.to){var n=r.marker.find(1,!0);return Ke(e,n.line,Oe(n.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if((i=t.markedSpans[o]).marker.collapsed&&!i.marker.widgetNode&&i.from==r.to&&(null==i.to||i.to!=r.from)&&(i.marker.inclusiveLeft||r.marker.inclusiveRight)&&Ke(e,t,i))return!0}function Ge(e){for(var t=0,r=(e=Re(e)).parent,n=0;n<r.lines.length;++n){var i=r.lines[n];if(i==e)break;t+=i.height}for(var o=r.parent;o;o=(r=o).parent)for(var a=0;a<o.children.length;++a){var l=o.children[a];if(l==r)break;t+=l.height}return t}function $e(e){if(0==e.height)return 0;for(var t,r=e.text.length,n=e;t=He(n);){var i=t.find(0,!0);n=i.from.line,r+=i.from.ch-i.to.ch}for(n=e;t=Ie(n);){var o=t.find(0,!0);r-=n.text.length-o.from.ch,r+=(n=o.to.line).text.length-o.to.ch}return r}function Xe(e){var r=e.display,t=e.doc;r.maxLine=se(t,t.first),r.maxLineLength=$e(r.maxLine),r.maxLineChanged=!0,t.iter(function(e){var t=$e(e);t>r.maxLineLength&&(r.maxLineLength=t,r.maxLine=e)})}var Ye=null;function Ze(e,t,r){var n;Ye=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:Ye=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:Ye=i)}return null!=n?n:Ye}var Qe=function(){var E="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",H="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";var I=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,j=/[stwN]/,B=/[LRr]/,R=/[Lb1n]/,q=/[1n]/;function U(e,t,r){this.level=e,this.from=t,this.to=r}return function(e,t){var r="ltr"==t?"L":"R";if(0==e.length||"ltr"==t&&!I.test(e))return!1;for(var n,i=e.length,o=[],a=0;a<i;++a)o.push((n=e.charCodeAt(a))<=247?E.charAt(n):1424<=n&&n<=1524?"R":1536<=n&&n<=1785?H.charAt(n-1536):1774<=n&&n<=2220?"r":8192<=n&&n<=8203?"w":8204==n?"b":"L");for(var l=0,s=r;l<i;++l){var c=o[l];"m"==c?o[l]=s:s=c}for(var u=0,d=r;u<i;++u){var f=o[u];"1"==f&&"r"==d?o[u]="n":B.test(f)&&"r"==(d=f)&&(o[u]="R")}for(var h=1,p=o[0];h<i-1;++h){var m=o[h];"+"==m&&"1"==p&&"1"==o[h+1]?o[h]="1":","!=m||p!=o[h+1]||"1"!=p&&"n"!=p||(o[h]=p),p=m}for(var g=0;g<i;++g){var v=o[g];if(","==v)o[g]="N";else if("%"==v){var y=void 0;for(y=g+1;y<i&&"%"==o[y];++y);for(var b=g&&"!"==o[g-1]||y<i&&"1"==o[y]?"1":"N",w=g;w<y;++w)o[w]=b;g=y-1}}for(var x=0,k=r;x<i;++x){var C=o[x];"L"==k&&"1"==C?o[x]="L":B.test(C)&&(k=C)}for(var S=0;S<i;++S)if(j.test(o[S])){var T=void 0;for(T=S+1;T<i&&j.test(o[T]);++T);for(var L="L"==(S?o[S-1]:r),M=L==("L"==(T<i?o[T]:r))?L?"L":"R":r,O=S;O<T;++O)o[O]=M;S=T-1}for(var N,A=[],D=0;D<i;)if(R.test(o[D])){var P=D;for(++D;D<i&&R.test(o[D]);++D);A.push(new U(0,P,D))}else{var _=D,F=A.length;for(++D;D<i&&"L"!=o[D];++D);for(var W=_;W<D;)if(q.test(o[W])){_<W&&A.splice(F,0,new U(1,_,W));var z=W;for(++W;W<D&&q.test(o[W]);++W);A.splice(F,0,new U(2,z,W)),_=W}else++W;_<D&&A.splice(F,0,new U(1,_,D))}return"ltr"==t&&(1==A[0].level&&(N=e.match(/^\s+/))&&(A[0].from=N[0].length,A.unshift(new U(0,0,N[0].length))),1==X(A).level&&(N=e.match(/\s+$/))&&(X(A).to-=N[0].length,A.push(new U(0,i-N[0].length,i)))),"rtl"==t?A.reverse():A}}();function Je(e,t){var r=e.order;return null==r&&(r=e.order=Qe(e.text,t)),r}var et=[],tt=function(e,t,r){if(e.addEventListener)e.addEventListener(t,r,!1);else if(e.attachEvent)e.attachEvent("on"+t,r);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||et).concat(r)}};function rt(e,t){return e._handlers&&e._handlers[t]||et}function nt(e,t,r){if(e.removeEventListener)e.removeEventListener(t,r,!1);else if(e.detachEvent)e.detachEvent("on"+t,r);else{var n=e._handlers,i=n&&n[t];if(i){var o=j(i,r);-1<o&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function it(e,t){var r=rt(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i<r.length;++i)r[i].apply(null,n)}function ot(e,t,r){return"string"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),it(e,r||t.type,e,t),dt(t)||t.codemirrorIgnore}function at(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var r=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),n=0;n<t.length;++n)-1==j(r,t[n])&&r.push(t[n])}function lt(e,t){return 0<rt(e,t).length}function st(e){e.prototype.on=function(e,t){tt(this,e,t)},e.prototype.off=function(e,t){nt(this,e,t)}}function ct(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function ut(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function dt(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ft(e){ct(e),ut(e)}function ht(e){return e.target||e.srcElement}function pt(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),w&&e.ctrlKey&&1==t&&(t=3),t}var mt,gt,vt=function(){if(x&&k<9)return!1;var e=A("div");return"draggable"in e||"dragDrop"in e}();function yt(e){if(null==mt){var t=A("span","");O(e,A("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(mt=t.offsetWidth<=1&&2<t.offsetHeight&&!(x&&k<8))}var r=mt?A("span",""):A("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function bt(e){if(null!=gt)return gt;var t=O(e,document.createTextNode("AخA")),r=T(t,0,1).getBoundingClientRect(),n=T(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(gt=n.right-r.right<3)}var wt,xt=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),a=o.indexOf("\r");-1!=a?(r.push(o.slice(0,a)),t+=a+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},kt=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Ct="oncopy"in(wt=A("div"))||(wt.setAttribute("oncopy","return;"),"function"==typeof wt.oncopy),St=null;var Tt={},Lt={};function Mt(e){if("string"==typeof e&&Lt.hasOwnProperty(e))e=Lt[e];else if(e&&"string"==typeof e.name&&Lt.hasOwnProperty(e.name)){var t=Lt[e.name];"string"==typeof t&&(t={name:t}),(e=Q(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Mt("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Mt("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Ot(e,t){t=Mt(t);var r=Tt[t.name];if(!r)return Ot(e,"text/plain");var n=r(e,t);if(Nt.hasOwnProperty(t.name)){var i=Nt[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)n[a]=t.modeProps[a];return n}var Nt={};function At(e,t){E(t,Nt.hasOwnProperty(e)?Nt[e]:Nt[e]={})}function Dt(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Pt(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function _t(e,t,r){return!e.startState||e.startState(t,r)}var Ft=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};Ft.prototype.eol=function(){return this.pos>=this.string.length},Ft.prototype.sol=function(){return this.pos==this.lineStart},Ft.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ft.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Ft.prototype.eat=function(e){var t=this.string.charAt(this.pos);if("string"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},Ft.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},Ft.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ft.prototype.skipToEnd=function(){this.pos=this.string.length},Ft.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(-1<t)return this.pos=t,!0},Ft.prototype.backUp=function(e){this.pos-=e},Ft.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=H(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?H(this.string,this.lineStart,this.tabSize):0)},Ft.prototype.indentation=function(){return H(this.string,null,this.tabSize)-(this.lineStart?H(this.string,this.lineStart,this.tabSize):0)},Ft.prototype.match=function(e,t,r){if("string"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&0<n.index?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Ft.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ft.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ft.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ft.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var Wt=function(e,t){this.state=e,this.lookAhead=t},zt=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function Et(t,r,n,e){var s=[t.state.modeGen],i={};Kt(t,r.text,t.doc.mode,n,function(e,t){return s.push(e,t)},i,e);for(var c=n.state,o=function(e){n.baseTokens=s;var o=t.state.overlays[e],a=1,l=0;n.state=!0,Kt(t,r.text,o.mode,n,function(e,t){for(var r=a;l<e;){var n=s[a];e<n&&s.splice(a,1,e,s[a+1],n),a+=2,l=Math.min(e,n)}if(t)if(o.opaque)s.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;r<a;r+=2){var i=s[r+1];s[r+1]=(i?i+" ":"")+"overlay "+t}},i),n.state=c,n.baseTokens=null,n.baseTokenPos=1},a=0;a<t.state.overlays.length;++a)o(a);return{styles:s,classes:i.bgClass||i.textClass?i:null}}function Ht(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var n=It(e,fe(t)),i=t.text.length>e.options.maxHighlightLength&&Dt(e.doc.mode,n.state),o=Et(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function It(r,n,e){var t=r.doc,i=r.display;if(!t.mode.startState)return new zt(t,!0,n);var o=function(e,t,r){for(var n,i,o=e.doc,a=r?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;a<l;--l){if(l<=o.first)return o.first;var s=se(o,l-1),c=s.stateAfter;if(c&&(!r||l+(c instanceof Wt?c.lookAhead:0)<=o.modeFrontier))return l;var u=H(s.text,null,e.options.tabSize);(null==i||u<n)&&(i=l-1,n=u)}return i}(r,n,e),a=o>t.first&&se(t,o-1).stateAfter,l=a?zt.fromSaved(t,a,o):new zt(t,_t(t.mode),o);return t.iter(o,n,function(e){jt(r,e.text,l);var t=l.line;e.stateAfter=t==n-1||t%5==0||t>=i.viewFrom&&t<i.viewTo?l.save():null,l.nextLine()}),e&&(t.modeFrontier=l.line),l}function jt(e,t,r,n){var i=e.doc.mode,o=new Ft(t,e.options.tabSize,r);for(o.start=o.pos=n||0,""==t&&Bt(i,r.state);!o.eol();)Rt(i,o,r.state),o.start=o.pos}function Bt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var r=Pt(e,t);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Rt(e,t,r,n){for(var i=0;i<10;i++){n&&(n[0]=Pt(e,r).mode);var o=e.token(t,r);if(t.pos>t.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}zt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},zt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},zt.prototype.nextLine=function(){this.line++,0<this.maxLookAhead&&this.maxLookAhead--},zt.fromSaved=function(e,t,r){return t instanceof Wt?new zt(e,Dt(e.mode,t.state),r,t.lookAhead):new zt(e,Dt(e.mode,t),r)},zt.prototype.save=function(e){var t=!1!==e?Dt(this.doc.mode,this.state):this.state;return 0<this.maxLookAhead?new Wt(t,this.maxLookAhead):t};var qt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function Ut(e,t,r,n){var i,o,a=e.doc,l=a.mode,s=se(a,(t=Ce(a,t)).line),c=It(e,t.line,r),u=new Ft(s.text,e.options.tabSize,c);for(n&&(o=[]);(n||u.pos<t.ch)&&!u.eol();)u.start=u.pos,i=Rt(l,u,c.state),n&&o.push(new qt(u,i,Dt(a.mode,c.state)));return n?o:new qt(u,i,c.state)}function Vt(e,t){if(e)for(;;){var r=e.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!r)break;e=e.slice(0,r.index)+e.slice(r.index+r[0].length);var n=r[1]?"bgClass":"textClass";null==t[n]?t[n]=r[2]:new RegExp("(?:^|s)"+r[2]+"(?:$|s)").test(t[n])||(t[n]+=" "+r[2])}return e}function Kt(e,t,r,n,i,o,a){var l=r.flattenSpans;null==l&&(l=e.options.flattenSpans);var s,c=0,u=null,d=new Ft(t,e.options.tabSize,n),f=e.options.addModeClass&&[null];for(""==t&&Vt(Bt(r,n.state),o);!d.eol();){if(d.pos>e.options.maxHighlightLength?(l=!1,a&&jt(e,t,n,d.pos),d.pos=t.length,s=null):s=Vt(Rt(r,d,n.state,f),o),f){var h=f[0].name;h&&(s="m-"+(s?h+" "+s:h))}if(!l||u!=s){for(;c<d.start;)i(c=Math.min(d.start,c+5e3),u);u=s}d.start=d.pos}for(;c<d.pos;){var p=Math.min(d.pos,c+5e3);i(p,u),c=p}}var Gt=function(e,t,r){this.text=e,_e(this,t),this.height=r?r(this):1};Gt.prototype.lineNo=function(){return fe(this)},st(Gt);var $t={},Xt={};function Yt(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?Xt:$t;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function Zt(e,t){var r=N("span",null,null,b?"padding-right: .1px":null),n={pre:N("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(x||b)&&e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,a=void 0;n.pos=0,n.addToken=Jt,bt(e.display.measure)&&(a=Je(o,e.doc.direction))&&(n.addToken=er(n.addToken,a)),n.map=[],rr(o,n,Ht(e,o,t!=e.display.externalMeasured&&fe(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||"")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(yt(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(b){var l=n.content.lastChild;(/\bcm-tab\b/.test(l.className)||l.querySelector&&l.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return it(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function Qt(e){var t=A("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Jt(e,t,r,n,i,o,a){if(t){var l,s=e.splitSpaces?function(e,t){if(1<e.length&&!/ /.test(e))return e;for(var r=t,n="",i=0;i<e.length;i++){var o=e.charAt(i);" "!=o||!r||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=" "),n+=o,r=" "==o}return n}(t,e.trailingSpace):t,c=e.cm.state.specialChars,u=!1;if(c.test(t)){l=document.createDocumentFragment();for(var d=0;;){c.lastIndex=d;var f=c.exec(t),h=f?f.index-d:t.length-d;if(h){var p=document.createTextNode(s.slice(d,d+h));x&&k<9?l.appendChild(A("span",[p])):l.appendChild(p),e.map.push(e.pos,e.pos+h,p),e.col+=h,e.pos+=h}if(!f)break;d+=h+1;var m=void 0;if("\t"==f[0]){var g=e.cm.options.tabSize,v=g-e.col%g;(m=l.appendChild(A("span",$(v),"cm-tab"))).setAttribute("role","presentation"),m.setAttribute("cm-text","\t"),e.col+=v}else"\r"==f[0]||"\n"==f[0]?(m=l.appendChild(A("span","\r"==f[0]?"␍":"","cm-invalidchar"))).setAttribute("cm-text",f[0]):((m=e.cm.options.specialCharPlaceholder(f[0])).setAttribute("cm-text",f[0]),x&&k<9?l.appendChild(A("span",[m])):l.appendChild(m)),e.col+=1;e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,l=document.createTextNode(s),e.map.push(e.pos,e.pos+t.length,l),x&&k<9&&(u=!0),e.pos+=t.length;if(e.trailingSpace=32==s.charCodeAt(t.length-1),r||n||i||u||a){var y=r||"";n&&(y+=n),i&&(y+=i);var b=A("span",[l],y,a);return o&&(b.title=o),e.content.appendChild(b)}e.content.appendChild(l)}}function er(d,f){return function(e,t,r,n,i,o,a){r=r?r+" cm-force-border":"cm-force-border";for(var l=e.pos,s=l+t.length;;){for(var c=void 0,u=0;u<f.length&&!((c=f[u]).to>l&&c.from<=l);u++);if(c.to>=s)return d(e,t,r,n,i,o,a);d(e,t.slice(0,c.to-l),r,n,null,o,a),n=null,t=t.slice(c.to-l),l=c.to}}}function tr(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function rr(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var a,l,s,c,u,d,f,h=i.length,p=0,m=1,g="",v=0;;){if(v==p){s=c=u=d=l="",f=null,v=1/0;for(var y=[],b=void 0,w=0;w<n.length;++w){var x=n[w],k=x.marker;"bookmark"==k.type&&x.from==p&&k.widgetNode?y.push(k):x.from<=p&&(null==x.to||x.to>p||k.collapsed&&x.to==p&&x.from==p)?(null!=x.to&&x.to!=p&&v>x.to&&(v=x.to,c=""),k.className&&(s+=" "+k.className),k.css&&(l=(l?l+";":"")+k.css),k.startStyle&&x.from==p&&(u+=" "+k.startStyle),k.endStyle&&x.to==v&&(b||(b=[])).push(k.endStyle,x.to),k.title&&!d&&(d=k.title),k.collapsed&&(!f||ze(f.marker,k)<0)&&(f=x)):x.from>p&&v>x.from&&(v=x.from)}if(b)for(var C=0;C<b.length;C+=2)b[C+1]==v&&(c+=" "+b[C]);if(!f||f.from==p)for(var S=0;S<y.length;++S)tr(t,0,y[S]);if(f&&(f.from||0)==p){if(tr(t,(null==f.to?h+1:f.to)-p,f.marker,null==f.from),null==f.to)return;f.to==p&&(f=!1)}}if(h<=p)break;for(var T=Math.min(h,v);;){if(g){var L=p+g.length;if(!f){var M=T<L?g.slice(0,T-p):g;t.addToken(t,M,a?a+s:s,u,p+M.length==v?c:"",d,l)}if(T<=L){g=g.slice(T-p),p=T;break}p=L,u=""}g=i.slice(o,o=r[m++]),a=Yt(r[m++],t.cm.options)}}else for(var O=1;O<r.length;O+=2)t.addToken(t,i.slice(o,o=r[O]),Yt(r[O+1],t.cm.options))}function nr(e,t,r){this.line=t,this.rest=function(e){for(var t,r;t=Ie(e);)e=t.find(1,!0).line,(r||(r=[])).push(e);return r}(t),this.size=this.rest?fe(X(this.rest))-r+1:1,this.node=this.text=null,this.hidden=Ve(e,t)}function ir(e,t,r){for(var n,i=[],o=t;o<r;o=n){var a=new nr(e.doc,se(e.doc,o),o);n=o+a.size,i.push(a)}return i}var or=null;var ar=null;function lr(e,t){var r=rt(e,t);if(r.length){var n,i=Array.prototype.slice.call(arguments,2);or?n=or.delayedCallbacks:ar?n=ar:(n=ar=[],setTimeout(sr,0));for(var o=function(e){n.push(function(){return r[e].apply(null,i)})},a=0;a<r.length;++a)o(a)}}function sr(){var e=ar;ar=null;for(var t=0;t<e.length;++t)e[t]()}function cr(e,t,r,n){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];"text"==o?fr(e,t):"gutter"==o?pr(e,t,r,n):"class"==o?hr(e,t):"widget"==o&&mr(e,t,n)}t.changes=null}function ur(e){return e.node==e.text&&(e.node=A("div",null,null,"position: relative"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),x&&k<8&&(e.node.style.zIndex=2)),e.node}function dr(e,t){var r=e.display.externalMeasured;return r&&r.line==t.line?(e.display.externalMeasured=null,t.measure=r.measure,r.built):Zt(e,t)}function fr(e,t){var r=t.text.className,n=dr(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,hr(e,t)):r&&(t.text.className=r)}function hr(e,t){!function(e,t){var r=t.bgClass?t.bgClass+" "+(t.line.bgClass||""):t.line.bgClass;if(r&&(r+=" CodeMirror-linebackground"),t.background)r?t.background.className=r:(t.background.parentNode.removeChild(t.background),t.background=null);else if(r){var n=ur(t);t.background=n.insertBefore(A("div",null,r),n.firstChild),e.display.input.setUneditable(t.background)}}(e,t),t.line.wrapClass?ur(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className="");var r=t.textClass?t.textClass+" "+(t.line.textClass||""):t.line.textClass;t.text.className=r||""}function pr(e,t,r,n){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var i=ur(t);t.gutterBackground=A("div",null,"CodeMirror-gutter-background "+t.line.gutterClass,"left: "+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+"px; width: "+n.gutterTotalWidth+"px"),e.display.input.setUneditable(t.gutterBackground),i.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var a=ur(t),l=t.gutter=A("div",null,"CodeMirror-gutter-wrapper","left: "+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+"px");if(e.display.input.setUneditable(l),a.insertBefore(l,t.text),t.line.gutterClass&&(l.className+=" "+t.line.gutterClass),!e.options.lineNumbers||o&&o["CodeMirror-linenumbers"]||(t.lineNumber=l.appendChild(A("div",me(e.options,r),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+n.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+e.display.lineNumInnerWidth+"px"))),o)for(var s=0;s<e.options.gutters.length;++s){var c=e.options.gutters[s],u=o.hasOwnProperty(c)&&o[c];u&&l.appendChild(A("div",[u],"CodeMirror-gutter-elt","left: "+n.gutterLeft[c]+"px; width: "+n.gutterWidth[c]+"px"))}}}function mr(e,t,r){t.alignable&&(t.alignable=null);for(var n=t.node.firstChild,i=void 0;n;n=i)i=n.nextSibling,"CodeMirror-linewidget"==n.className&&t.node.removeChild(n);gr(e,t,r)}function gr(e,t,r){if(vr(e,t.line,t,r,!0),t.rest)for(var n=0;n<t.rest.length;n++)vr(e,t.rest[n],t,r,!1)}function vr(e,t,r,n,i){if(t.widgets)for(var o=ur(r),a=0,l=t.widgets;a<l.length;++a){var s=l[a],c=A("div",[s.node],"CodeMirror-linewidget");s.handleMouseEvents||c.setAttribute("cm-ignore-events","true"),yr(s,c,r,n),e.display.input.setUneditable(c),i&&s.above?o.insertBefore(c,r.gutter||r.text):o.appendChild(c),lr(s,"redraw")}}function yr(e,t,r,n){if(e.noHScroll){(r.alignable||(r.alignable=[])).push(t);var i=n.wrapperWidth;t.style.left=n.fixedPos+"px",e.coverGutter||(i-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+"px"),t.style.width=i+"px"}e.coverGutter&&(t.style.zIndex=5,t.style.position="relative",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+"px"))}function br(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!D(document.body,e.node)){var r="position: relative;";e.coverGutter&&(r+="margin-left: -"+t.display.gutters.offsetWidth+"px;"),e.noHScroll&&(r+="width: "+t.display.wrapper.clientWidth+"px;"),O(t.display.measure,A("div",[e.node],null,r))}return e.height=e.node.parentNode.offsetHeight}function wr(e,t){for(var r=ht(t);r!=e.wrapper;r=r.parentNode)if(!r||1==r.nodeType&&"true"==r.getAttribute("cm-ignore-events")||r.parentNode==e.sizer&&r!=e.mover)return!0}function xr(e){return e.lineSpace.offsetTop}function kr(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function Cr(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=O(e.measure,A("pre","x")),r=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,n={left:parseInt(r.paddingLeft),right:parseInt(r.paddingRight)};return isNaN(n.left)||isNaN(n.right)||(e.cachedPaddingH=n),n}function Sr(e){return B-e.display.nativeBarWidth}function Tr(e){return e.display.scroller.clientWidth-Sr(e)-e.display.barWidth}function Lr(e){return e.display.scroller.clientHeight-Sr(e)-e.display.barHeight}function Mr(e,t,r){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var n=0;n<e.rest.length;n++)if(e.rest[n]==t)return{map:e.measure.maps[n],cache:e.measure.caches[n]};for(var i=0;i<e.rest.length;i++)if(fe(e.rest[i])>r)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Or(e,t,r,n){return Dr(e,Ar(e,t),r,n)}function Nr(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[ln(e,t)];var r=e.display.externalMeasured;return r&&t>=r.lineN&&t<r.lineN+r.size?r:void 0}function Ar(e,t){var r=fe(t),n=Nr(e,r);n&&!n.text?n=null:n&&n.changes&&(cr(e,n,r,tn(e)),e.curOp.forceUpdate=!0),n||(n=function(e,t){var r=fe(t=Re(t)),n=e.display.externalMeasured=new nr(e.doc,t,r);n.lineN=r;var i=n.built=Zt(e,n);return n.text=i.pre,O(e.display.lineMeasure,i.pre),n}(e,t));var i=Mr(n,t,r);return{line:t,view:n,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function Dr(e,t,r,n,i){t.before&&(r=-1);var o,a=r+(n||"");return t.cache.hasOwnProperty(a)?o=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(!function(e,t,r){var n=e.options.lineWrapping,i=n&&Tr(e);if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[];if(n){t.measure.width=i;for(var a=t.text.firstChild.getClientRects(),l=0;l<a.length-1;l++){var s=a[l],c=a[l+1];2<Math.abs(s.bottom-c.bottom)&&o.push((s.bottom+c.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Fr(t.map,r,n),a=o.node,l=o.start,s=o.end,c=o.collapse;if(3==a.nodeType){for(var u=0;u<4;u++){for(;l&&ie(t.line.text.charAt(o.coverStart+l));)--l;for(;o.coverStart+s<o.coverEnd&&ie(t.line.text.charAt(o.coverStart+s));)++s;if((i=x&&k<9&&0==l&&s==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():Wr(T(a,l,s).getClientRects(),n)).left||i.right||0==l)break;s=l,l-=1,c="right"}x&&k<11&&(i=function(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!function(e){if(null!=St)return St;var t=O(e,A("span","x")),r=t.getBoundingClientRect(),n=T(t,0,1).getBoundingClientRect();return St=1<Math.abs(r.left-n.left)}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;0<l&&(c=n="right"),i=e.options.lineWrapping&&1<(d=a.getClientRects()).length?d["right"==n?d.length-1:0]:a.getBoundingClientRect()}if(x&&k<9&&!l&&(!i||!i.left&&!i.right)){var f=a.parentNode.getClientRects()[0];i=f?{left:f.left,right:f.left+en(e.display),top:f.top,bottom:f.bottom}:_r}for(var h=i.top-t.rect.top,p=i.bottom-t.rect.top,m=(h+p)/2,g=t.view.measure.heights,v=0;v<g.length-1&&!(m<g[v]);v++);var y=v?g[v-1]:0,b=g[v],w={left:("right"==c?i.right:i.left)-t.rect.left,right:("left"==c?i.left:i.right)-t.rect.left,top:y,bottom:b};i.left||i.right||(w.bogus=!0);e.options.singleCursorHeightPerLine||(w.rtop=h,w.rbottom=p);return w}(e,t,r,n)).bogus||(t.cache[a]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var Pr,_r={left:0,right:0,top:0,bottom:0};function Fr(e,t,r){for(var n,i,o,a,l,s,c=0;c<e.length;c+=3)if(l=e[c],s=e[c+1],t<l?(i=0,o=1,a="left"):t<s?o=(i=t-l)+1:(c==e.length-3||t==s&&e[c+3]>t)&&(i=(o=s-l)-1,s<=t&&(a="right")),null!=i){if(n=e[c+2],l==s&&r==(n.insertLeft?"left":"right")&&(a=r),"left"==r&&0==i)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)n=e[2+(c-=3)],a="left";if("right"==r&&i==s-l)for(;c<e.length-3&&e[c+3]==e[c+4]&&!e[c+5].insertLeft;)n=e[(c+=3)+2],a="right";break}return{node:n,start:i,end:o,collapse:a,coverStart:l,coverEnd:s}}function Wr(e,t){var r=_r;if("left"==t)for(var n=0;n<e.length&&(r=e[n]).left==r.right;n++);else for(var i=e.length-1;0<=i&&(r=e[i]).left==r.right;i--);return r}function zr(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function Er(e){e.display.externalMeasure=null,M(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)zr(e.display.view[t])}function Hr(e){Er(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function Ir(){return a&&d?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function jr(){return a&&d?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function Br(e){var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;++r)e.widgets[r].above&&(t+=br(e.widgets[r]));return t}function Rr(e,t,r,n,i){if(!i){var o=Br(t);r.top+=o,r.bottom+=o}if("line"==n)return r;n||(n="local");var a=Ge(t);if("local"==n?a+=xr(e.display):a-=e.display.viewOffset,"page"==n||"window"==n){var l=e.display.lineSpace.getBoundingClientRect();a+=l.top+("window"==n?0:jr());var s=l.left+("window"==n?0:Ir());r.left+=s,r.right+=s}return r.top+=a,r.bottom+=a,r}function qr(e,t,r){if("div"==r)return t;var n=t.left,i=t.top;if("page"==r)n-=Ir(),i-=jr();else if("local"==r||!r){var o=e.display.sizer.getBoundingClientRect();n+=o.left,i+=o.top}var a=e.display.lineSpace.getBoundingClientRect();return{left:n-a.left,top:i-a.top}}function Ur(e,t,r,n,i){return n||(n=se(e.doc,t.line)),Rr(e,n,Or(e,n,t.ch,i),r)}function Vr(n,e,i,o,a,l){function s(e,t){var r=Dr(n,a,e,t?"right":"left",l);return t?r.left=r.right:r.right=r.left,Rr(n,o,r,i)}o=o||se(n.doc,e.line),a||(a=Ar(n,o));var c=Je(o,n.doc.direction),t=e.ch,r=e.sticky;if(t>=o.text.length?(t=o.text.length,r="before"):t<=0&&(t=0,r="after"),!c)return s("before"==r?t-1:t,"before"==r);function u(e,t,r){return s(r?e-1:e,1==c[t].level!=r)}var d=Ze(c,t,r),f=Ye,h=u(t,d,"before"==r);return null!=f&&(h.other=u(t,f,"before"!=r)),h}function Kr(e,t){var r=0;t=Ce(e.doc,t),e.options.lineWrapping||(r=en(e.display)*t.ch);var n=se(e.doc,t.line),i=Ge(n)+xr(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function Gr(e,t,r,n,i){var o=ge(e,t,r);return o.xRel=i,n&&(o.outside=!0),o}function $r(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return Gr(n.first,0,null,!0,-1);var i=he(n,r),o=n.first+n.size-1;if(o<i)return Gr(n.first+n.size-1,se(n,o).text.length,null,!0,1);t<0&&(t=0);for(var a=se(n,i);;){var l=Qr(e,a,i,t,r),s=je(a,l.ch+(0<l.xRel?1:0));if(!s)return l;var c=s.find(1);if(c.line==i)return c;a=se(n,i=c.line)}}function Xr(t,e,r,n){n-=Br(e);var i=e.text.length,o=ae(function(e){return Dr(t,r,e-1).bottom<=n},i,0);return{begin:o,end:i=ae(function(e){return Dr(t,r,e).top>n},o,i)}}function Yr(e,t,r,n){return r||(r=Ar(e,t)),Xr(e,t,r,Rr(e,t,Dr(e,r,n),"line").top)}function Zr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function Qr(r,e,t,n,i){i-=Ge(e);var o=Ar(r,e),a=Br(e),l=0,s=e.text.length,c=!0,u=Je(e,r.doc.direction);if(u){var d=(r.options.lineWrapping?function(e,t,r,n,i,o,a){var l=Xr(e,t,n,a),s=l.begin,c=l.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,d=null,f=0;f<i.length;f++){var h=i[f];if(!(h.from>=c||h.to<=s)){var p=1!=h.level,m=Dr(e,n,p?Math.min(c,h.to)-1:Math.max(s,h.from)).right,g=m<o?o-m+1e9:m-o;(!u||g<d)&&(u=h,d=g)}}u||(u=i[i.length-1]);u.from<s&&(u={from:s,to:u.to,level:u.level});u.to>c&&(u={from:u.from,to:c,level:u.level});return u}:function(n,i,o,a,l,s,c){var e=ae(function(e){var t=l[e],r=1!=t.level;return Zr(Vr(n,ge(o,r?t.to:t.from,r?"before":"after"),"line",i,a),s,c,!0)},0,l.length-1),t=l[e];if(0<e){var r=1!=t.level,u=Vr(n,ge(o,r?t.from:t.to,r?"after":"before"),"line",i,a);Zr(u,s,c,!0)&&u.top>c&&(t=l[e-1])}return t})(r,e,t,o,u,n,i);l=(c=1!=d.level)?d.from:d.to-1,s=c?d.to:d.from-1}var f,h,p=null,m=null,g=ae(function(e){var t=Dr(r,o,e);return t.top+=a,t.bottom+=a,!!Zr(t,n,i,!1)&&(t.top<=i&&t.left<=n&&(p=e,m=t),!0)},l,s),v=!1;if(m){var y=n-m.left<m.right-n,b=y==c;g=p+(b?0:1),h=b?"after":"before",f=y?m.left:m.right}else{c||g!=s&&g!=l||g++,h=0==g?"after":g==e.text.length?"before":Dr(r,o,g-(c?1:0)).bottom+a<=i==c?"after":"before";var w=Vr(r,ge(t,g,h),"line",e,o);f=w.left,v=i<w.top||i>=w.bottom}return Gr(t,g=oe(e.text,g,1),h,v,n-f)}function Jr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Pr){Pr=A("pre");for(var t=0;t<49;++t)Pr.appendChild(document.createTextNode("x")),Pr.appendChild(A("br"));Pr.appendChild(document.createTextNode("x"))}O(e.measure,Pr);var r=Pr.offsetHeight/50;return 3<r&&(e.cachedTextHeight=r),M(e.measure),r||1}function en(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=A("span","xxxxxxxxxx"),r=A("pre",[t]);O(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return 2<i&&(e.cachedCharWidth=i),i||10}function tn(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a)r[e.options.gutters[a]]=o.offsetLeft+o.clientLeft+i,n[e.options.gutters[a]]=o.clientWidth;return{fixedPos:rn(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function rn(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function nn(n){var i=Jr(n.display),o=n.options.lineWrapping,a=o&&Math.max(5,n.display.scroller.clientWidth/en(n.display)-3);return function(e){if(Ve(n.doc,e))return 0;var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;r++)e.widgets[r].height&&(t+=e.widgets[r].height);return o?t+(Math.ceil(e.text.length/a)||1)*i:t+i}}function on(e){var t=e.doc,r=nn(e);t.iter(function(e){var t=r(e);t!=e.height&&de(e,t)})}function an(e,t,r,n){var i=e.display;if(!r&&"true"==ht(t).getAttribute("cm-not-content"))return null;var o,a,l=i.lineSpace.getBoundingClientRect();try{o=t.clientX-l.left,a=t.clientY-l.top}catch(t){return null}var s,c=$r(e,o,a);if(n&&1==c.xRel&&(s=se(e.doc,c.line).text).length==c.ch){var u=H(s,s.length,e.options.tabSize)-s.length;c=ge(c.line,Math.max(0,Math.round((o-Cr(e.display).left)/en(e.display))-u))}return c}function ln(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;n<r.length;n++)if((t-=r[n].size)<0)return n}function sn(e){e.display.input.showSelection(e.display.input.prepareSelection())}function cn(e,t){void 0===t&&(t=!0);for(var r=e.doc,n={},i=n.cursors=document.createDocumentFragment(),o=n.selection=document.createDocumentFragment(),a=0;a<r.sel.ranges.length;a++)if(t||a!=r.sel.primIndex){var l=r.sel.ranges[a];if(!(l.from().line>=e.display.viewTo||l.to().line<e.display.viewFrom)){var s=l.empty();(s||e.options.showCursorWhenSelecting)&&un(e,l.head,i),s||fn(e,l,o)}}return n}function un(e,t,r){var n=Vr(e,t,"div",null,null,!e.options.singleCursorHeightPerLine),i=r.appendChild(A("div"," ","CodeMirror-cursor"));if(i.style.left=n.left+"px",i.style.top=n.top+"px",i.style.height=Math.max(0,n.bottom-n.top)*e.options.cursorHeight+"px",n.other){var o=r.appendChild(A("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));o.style.display="",o.style.left=n.other.left+"px",o.style.top=n.other.top+"px",o.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function dn(e,t){return e.top-t.top||e.left-t.left}function fn(a,e,t){var r=a.display,n=a.doc,i=document.createDocumentFragment(),o=Cr(a.display),L=o.left,M=Math.max(r.sizerWidth,Tr(a)-r.sizer.offsetLeft)-o.right,O="ltr"==n.direction;function N(e,t,r,n){t<0&&(t=0),t=Math.round(t),n=Math.round(n),i.appendChild(A("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==r?M-e:r)+"px;\n height: "+(n-t)+"px"))}function l(r,y,b){var w,x,o=se(n,r),k=o.text.length;function C(e,t){return Ur(a,ge(r,e),"div",o,t)}function S(e,t,r){var n=Yr(a,o,null,e),i="ltr"==t==("after"==r)?"left":"right";return C("after"==r?n.begin:n.end-(/\s/.test(o.text.charAt(n.end-1))?2:1),i)[i]}var T=Je(o,n.direction);return function(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;o<e.length;++o){var a=e[o];(a.from<r&&a.to>t||t==r&&a.to==t)&&(n(Math.max(a.from,t),Math.min(a.to,r),1==a.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(T,y||0,null==b?k:b,function(e,t,r,n){var i="ltr"==r,o=C(e,i?"left":"right"),a=C(t-1,i?"right":"left"),l=null==y&&0==e,s=null==b&&t==k,c=0==n,u=!T||n==T.length-1;if(a.top-o.top<=3){var d=(O?s:l)&&u,f=(O?l:s)&&c?L:(i?o:a).left,h=d?M:(i?a:o).right;N(f,o.top,h-f,o.bottom)}else{var p,m,g,v;i?(p=O&&l&&c?L:o.left,m=O?M:S(e,r,"before"),g=O?L:S(t,r,"after"),v=O&&s&&u?M:a.right):(p=O?S(e,r,"before"):L,m=!O&&l&&c?M:o.right,g=!O&&s&&u?L:a.left,v=O?S(t,r,"after"):M),N(p,o.top,m-p,o.bottom),o.bottom<a.top&&N(L,o.bottom,null,a.top),N(g,a.top,v-g,a.bottom)}(!w||dn(o,w)<0)&&(w=o),dn(a,w)<0&&(w=a),(!x||dn(o,x)<0)&&(x=o),dn(a,x)<0&&(x=a)}),{start:w,end:x}}var s=e.from(),c=e.to();if(s.line==c.line)l(s.line,s.ch,c.ch);else{var u=se(n,s.line),d=se(n,c.line),f=Re(u)==Re(d),h=l(s.line,s.ch,f?u.text.length+1:null).end,p=l(c.line,f?0:null,c.ch).start;f&&(h.top<p.top-2?(N(h.right,h.top,null,h.bottom),N(L,p.top,p.left,p.bottom)):N(h.right,h.top,p.left-h.right,h.bottom)),h.bottom<p.top&&N(L,h.bottom,null,p.top)}t.appendChild(i)}function hn(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var r=!0;t.cursorDiv.style.visibility="",0<e.options.cursorBlinkRate?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function pn(e){e.state.focused||(e.display.input.focus(),gn(e))}function mn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,vn(e))},100)}function gn(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(it(e,"focus",e,t),e.state.focused=!0,_(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),b&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),hn(e))}function vn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(it(e,"blur",e,t),e.state.focused=!1,L(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function yn(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n<t.view.length;n++){var i=t.view[n],o=void 0;if(!i.hidden){if(x&&k<8){var a=i.node.offsetTop+i.node.offsetHeight;o=a-r,r=a}else{var l=i.node.getBoundingClientRect();o=l.bottom-l.top}var s=i.line.height-o;if(o<2&&(o=Jr(t)),(.005<s||s<-.005)&&(de(i.line,o),bn(i.line),i.rest))for(var c=0;c<i.rest.length;c++)bn(i.rest[c])}}}function bn(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var r=e.widgets[t],n=r.node.parentNode;n&&(r.height=n.offsetHeight)}}function wn(e,t,r){var n=r&&null!=r.top?Math.max(0,r.top):e.scroller.scrollTop;n=Math.floor(n-xr(e));var i=r&&null!=r.bottom?r.bottom:n+e.wrapper.clientHeight,o=he(t,n),a=he(t,i);if(r&&r.ensure){var l=r.ensure.from.line,s=r.ensure.to.line;l<o?a=he(t,Ge(se(t,o=l))+e.wrapper.clientHeight):Math.min(s,t.lastLine())>=a&&(o=he(t,Ge(se(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function xn(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=rn(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",a=0;a<r.length;a++)if(!r[a].hidden){e.options.fixedGutter&&(r[a].gutter&&(r[a].gutter.style.left=o),r[a].gutterBackground&&(r[a].gutterBackground.style.left=o));var l=r[a].alignable;if(l)for(var s=0;s<l.length;s++)l[s].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=n+i+"px")}}function kn(e){if(!e.options.lineNumbers)return!1;var t=e.doc,r=me(e.options,t.first+t.size-1),n=e.display;if(r.length!=n.lineNumChars){var i=n.measure.appendChild(A("div",[A("div",r)],"CodeMirror-linenumber CodeMirror-gutter-elt")),o=i.firstChild.offsetWidth,a=i.offsetWidth-o;return n.lineGutter.style.width="",n.lineNumInnerWidth=Math.max(o,n.lineGutter.offsetWidth-a)+1,n.lineNumWidth=n.lineNumInnerWidth+a,n.lineNumChars=n.lineNumInnerWidth?r.length:-1,n.lineGutter.style.width=n.lineNumWidth+"px",li(e),!0}return!1}function Cn(e,t){var r=e.display,n=Jr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Lr(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var l=e.doc.height+kr(r),s=t.top<n,c=t.bottom>l-n;if(t.top<i)a.scrollTop=s?0:t.top;else if(t.bottom>i+o){var u=Math.min(t.top,(c?l:t.bottom)-o);u!=i&&(a.scrollTop=u)}var d=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,f=Tr(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),h=t.right-t.left>f;return h&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.left<d?a.scrollLeft=Math.max(0,t.left-(h?0:10)):t.right>f+d-3&&(a.scrollLeft=t.right+(h?0:10)-f),a}function Sn(e,t){null!=t&&(Mn(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Tn(e){Mn(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Ln(e,t,r){null==t&&null==r||Mn(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function Mn(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,On(e,Kr(e,t.from),Kr(e,t.to),t.margin))}function On(e,t,r,n){var i=Cn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Ln(e,i.scrollLeft,i.scrollTop)}function Nn(e,t){Math.abs(e.doc.scrollTop-t)<2||(m||ai(e,{top:t}),An(e,t,!0),m&&ai(e),ti(e,100))}function An(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Dn(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,xn(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Pn(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+kr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Sr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var _n=function(e,t,r){this.cm=r;var n=this.vert=A("div",[A("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=A("div",[A("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=i.tabIndex=-1,e(n),e(i),tt(n,"scroll",function(){n.clientHeight&&t(n.scrollTop,"vertical")}),tt(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,x&&k<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};_n.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&0<e.clientHeight&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},_n.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},_n.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},_n.prototype.zeroWidthHack=function(){var e=w&&!l?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new I,this.disableVert=new I},_n.prototype.enableZeroWidthBar=function(r,n,i){r.style.pointerEvents="auto",n.set(1e3,function e(){var t=r.getBoundingClientRect();("vert"==i?document.elementFromPoint(t.right-1,(t.top+t.bottom)/2):document.elementFromPoint((t.right+t.left)/2,t.bottom-1))!=r?r.style.pointerEvents="none":n.set(1e3,e)})},_n.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Fn=function(){};function Wn(e,t){t||(t=Pn(e));var r=e.display.barWidth,n=e.display.barHeight;zn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&yn(e),zn(e,Pn(e)),r=e.display.barWidth,n=e.display.barHeight}function zn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}Fn.prototype.update=function(){return{bottom:0,right:0}},Fn.prototype.setScrollLeft=function(){},Fn.prototype.setScrollTop=function(){},Fn.prototype.clear=function(){};var En={native:_n,null:Fn};function Hn(r){r.display.scrollbars&&(r.display.scrollbars.clear(),r.display.scrollbars.addClass&&L(r.display.wrapper,r.display.scrollbars.addClass)),r.display.scrollbars=new En[r.options.scrollbarStyle](function(e){r.display.wrapper.insertBefore(e,r.display.scrollbarFiller),tt(e,"mousedown",function(){r.state.focused&&setTimeout(function(){return r.display.input.focus()},0)}),e.setAttribute("cm-not-content","true")},function(e,t){"horizontal"==t?Dn(r,e):Nn(r,e)},r),r.display.scrollbars.addClass&&_(r.display.wrapper,r.display.scrollbars.addClass)}var In=0;function jn(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++In},t=e.curOp,or?or.ops.push(t):t.ownsGroup=or={ops:[t],delayedCallbacks:[]}}function Bn(e){!function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r<t.length;r++)t[r].call(null);for(var n=0;n<e.ops.length;n++){var i=e.ops[n];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(r<t.length)}(r)}finally{or=null,t(r)}}(e.curOp,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;!function(e){for(var t=e.ops,r=0;r<t.length;r++)Rn(t[r]);for(var n=0;n<t.length;n++)(i=t[n]).updatedDisplay=i.mustUpdate&&ii(i.cm,i.update);var i;for(var o=0;o<t.length;o++)qn(t[o]);for(var a=0;a<t.length;a++)Un(t[a]);for(var l=0;l<t.length;l++)Vn(t[l])}(e)})}function Rn(e){var t,r,n=e.cm,i=n.display;!(r=(t=n).display).scrollbarsClipped&&r.scroller.offsetWidth&&(r.nativeBarWidth=r.scroller.offsetWidth-r.scroller.clientWidth,r.heightForcer.style.height=Sr(t)+"px",r.sizer.style.marginBottom=-r.nativeBarWidth+"px",r.sizer.style.borderRightWidth=Sr(t)+"px",r.scrollbarsClipped=!0),e.updateMaxLine&&Xe(n),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<i.viewFrom||e.scrollToPos.to.line>=i.viewTo)||i.maxLineChanged&&n.options.lineWrapping,e.update=e.mustUpdate&&new ni(n,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function qn(e){var t=e.cm,r=t.display;e.updatedDisplay&&yn(t),e.barMeasure=Pn(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Or(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Sr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Tr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function Un(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft<t.doc.scrollLeft&&Dn(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var r=e.focus&&e.focus==P();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r),(e.updatedDisplay||e.startHeight!=t.doc.height)&&Wn(t,e.barMeasure),e.updatedDisplay&&si(t,e.barMeasure),e.selectionChanged&&hn(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),r&&pn(e.cm)}function Vn(e){var t=e.cm,r=t.display,n=t.doc;(e.updatedDisplay&&oi(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e.scrollTop&&An(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&Dn(t,e.scrollLeft,!0,!0),e.scrollToPos)&&function(e,t){if(!ot(e,"scrollCursorIntoView")){var r=e.display,n=r.sizer.getBoundingClientRect(),i=null;if(t.top+n.top<0?i=!0:t.bottom+n.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!c){var o=A("div","",null,"position: absolute;\n top: "+(t.top-r.viewOffset-xr(e.display))+"px;\n height: "+(t.bottom-t.top+Sr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r="before"==(t=t.ch?ge(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?ge(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var a=!1,l=Vr(e,t),s=r&&r!=t?Vr(e,r):l,c=Cn(e,i={left:Math.min(l.left,s.left),top:Math.min(l.top,s.top)-n,right:Math.max(l.left,s.left),bottom:Math.max(l.bottom,s.bottom)+n}),u=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=c.scrollTop&&(Nn(e,c.scrollTop),1<Math.abs(e.doc.scrollTop-u)&&(a=!0)),null!=c.scrollLeft&&(Dn(e,c.scrollLeft),1<Math.abs(e.doc.scrollLeft-d)&&(a=!0)),!a)break}return i}(t,Ce(n,e.scrollToPos.from),Ce(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var a=0;a<i.length;++a)i[a].lines.length||it(i[a],"hide");if(o)for(var l=0;l<o.length;++l)o[l].lines.length&&it(o[l],"unhide");r.wrapper.offsetHeight&&(n.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&it(t,"changes",t,e.changeObjs),e.update&&e.update.finish()}function Kn(e,t){if(e.curOp)return t();jn(e);try{return t()}finally{Bn(e)}}function Gn(e,t){return function(){if(e.curOp)return t.apply(e,arguments);jn(e);try{return t.apply(e,arguments)}finally{Bn(e)}}}function $n(e){return function(){if(this.curOp)return e.apply(this,arguments);jn(this);try{return e.apply(this,arguments)}finally{Bn(this)}}}function Xn(t){return function(){var e=this.cm;if(!e||e.curOp)return t.apply(this,arguments);jn(e);try{return t.apply(this,arguments)}finally{Bn(e)}}}function Yn(e,t,r,n){null==t&&(t=e.doc.first),null==r&&(r=e.doc.first+e.doc.size),n||(n=0);var i=e.display;if(n&&r<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Le&&qe(e.doc,t)<i.viewTo&&Qn(e);else if(r<=i.viewFrom)Le&&Ue(e.doc,r+n)>i.viewFrom?Qn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)Qn(e);else if(t<=i.viewFrom){var o=Jn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):Qn(e)}else if(r>=i.viewTo){var a=Jn(e,t,t,-1);a?(i.view=i.view.slice(0,a.index),i.viewTo=a.lineN):Qn(e)}else{var l=Jn(e,t,t,-1),s=Jn(e,r,r+n,1);l&&s?(i.view=i.view.slice(0,l.index).concat(ir(e,l.lineN,s.lineN)).concat(i.view.slice(s.index)),i.viewTo+=n):Qn(e)}var c=i.externalMeasured;c&&(r<c.lineN?c.lineN+=n:t<c.lineN+c.size&&(i.externalMeasured=null))}function Zn(e,t,r){e.curOp.viewChanged=!0;var n=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(n.externalMeasured=null),!(t<n.viewFrom||t>=n.viewTo)){var o=n.view[ln(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==j(a,r)&&a.push(r)}}}function Qn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Jn(e,t,r,n){var i,o=ln(e,t),a=e.display.view;if(!Le||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var l=e.display.viewFrom,s=0;s<o;s++)l+=a[s].size;if(l!=t){if(0<n){if(o==a.length-1)return null;i=l+a[o].size-t,o++}else i=l-t;t+=i,r+=i}for(;qe(e.doc,r)!=r;){if(o==(n<0?0:a.length-1))return null;r+=n*a[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function ei(e){for(var t=e.display.view,r=0,n=0;n<t.length;n++){var i=t[n];i.hidden||i.node&&!i.changes||++r}return r}function ti(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,z(ri,e))}function ri(s){var c=s.doc;if(!(c.highlightFrontier>=s.display.viewTo)){var u=+new Date+s.options.workTime,d=It(s,c.highlightFrontier),f=[];c.iter(d.line,Math.min(c.first+c.size,s.display.viewTo+500),function(e){if(d.line>=s.display.viewFrom){var t=e.styles,r=e.text.length>s.options.maxHighlightLength?Dt(c.mode,d.state):null,n=Et(s,e,d,!0);r&&(d.state=r),e.styles=n.styles;var i=e.styleClasses,o=n.classes;o?e.styleClasses=o:i&&(e.styleClasses=null);for(var a=!t||t.length!=e.styles.length||i!=o&&(!i||!o||i.bgClass!=o.bgClass||i.textClass!=o.textClass),l=0;!a&&l<t.length;++l)a=t[l]!=e.styles[l];a&&f.push(d.line),e.stateAfter=d.save(),d.nextLine()}else e.text.length<=s.options.maxHighlightLength&&jt(s,e.text,d),e.stateAfter=d.line%5==0?d.save():null,d.nextLine();if(+new Date>u)return ti(s,s.options.workDelay),!0}),c.highlightFrontier=d.line,c.modeFrontier=Math.max(c.modeFrontier,d.line),f.length&&Kn(s,function(){for(var e=0;e<f.length;e++)Zn(s,f[e],"text")})}}var ni=function(e,t,r){var n=e.display;this.viewport=t,this.visible=wn(n,e.doc,t),this.editorIsHidden=!n.wrapper.offsetWidth,this.wrapperHeight=n.wrapper.clientHeight,this.wrapperWidth=n.wrapper.clientWidth,this.oldDisplayWidth=Tr(e),this.force=r,this.dims=tn(e),this.events=[]};function ii(e,t){var r=e.display,n=e.doc;if(t.editorIsHidden)return Qn(e),!1;if(!t.force&&t.visible.from>=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==ei(e))return!1;kn(e)&&(Qn(e),t.dims=tn(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),a=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFrom<o&&o-r.viewFrom<20&&(o=Math.max(n.first,r.viewFrom)),r.viewTo>a&&r.viewTo-a<20&&(a=Math.min(i,r.viewTo)),Le&&(o=qe(e.doc,o),a=Ue(e.doc,a));var l,s,c,u,d=o!=r.viewFrom||a!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;s=o,c=a,0==(u=(l=e).display).view.length||s>=u.viewTo||c<=u.viewFrom?(u.view=ir(l,s,c),u.viewFrom=s):(u.viewFrom>s?u.view=ir(l,s,u.viewFrom).concat(u.view):u.viewFrom<s&&(u.view=u.view.slice(ln(l,s))),u.viewFrom=s,u.viewTo<c?u.view=u.view.concat(ir(l,u.viewTo,c)):u.viewTo>c&&(u.view=u.view.slice(0,ln(l,c)))),u.viewTo=c,r.viewOffset=Ge(se(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var f=ei(e);if(!d&&0==f&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var h=function(e){if(e.hasFocus())return null;var t=P();if(!t||!D(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&D(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return 4<f&&(r.lineDiv.style.display="none"),function(r,e,t){var n=r.display,i=r.options.lineNumbers,o=n.lineDiv,a=o.firstChild;function l(e){var t=e.nextSibling;return b&&w&&r.display.currentWheelTarget==e?e.style.display="none":e.parentNode.removeChild(e),t}for(var s=n.view,c=n.viewFrom,u=0;u<s.length;u++){var d=s[u];if(d.hidden);else if(d.node&&d.node.parentNode==o){for(;a!=d.node;)a=l(a);var f=i&&null!=e&&e<=c&&d.lineNumber;d.changes&&(-1<j(d.changes,"gutter")&&(f=!1),cr(r,d,c,t)),f&&(M(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(me(r.options,c)))),a=d.node.nextSibling}else{var h=(g=c,v=t,void 0,y=dr(p=r,m=d),m.text=m.node=y.pre,y.bgClass&&(m.bgClass=y.bgClass),y.textClass&&(m.textClass=y.textClass),hr(p,m),pr(p,m,g,v),gr(p,m,v),m.node);o.insertBefore(h,a)}c+=d.size}var p,m,g,v,y;for(;a;)a=l(a)}(e,r.updateLineNumbers,t.dims),4<f&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=P()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(h),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,d&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,ti(e,400)),!(r.updateLineNumbers=null)}function oi(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Tr(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+kr(e.display)-Lr(e),r.top)}),t.visible=wn(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ii(e,t);n=!1){yn(e);var i=Pn(e);sn(e),Wn(e,i),si(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function ai(e,t){var r=new ni(e,t);if(ii(e,r)){yn(e),oi(e,r);var n=Pn(e);sn(e),Wn(e,n),si(e,n),r.finish()}}function li(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+"px"}function si(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Sr(e)+"px"}function ci(e){var t=e.display.gutters,r=e.options.gutters;M(t);for(var n=0;n<r.length;++n){var i=r[n],o=t.appendChild(A("div",null,"CodeMirror-gutter "+i));"CodeMirror-linenumbers"==i&&((e.display.lineGutter=o).style.width=(e.display.lineNumWidth||1)+"px")}t.style.display=n?"":"none",li(e)}function ui(e){var t=j(e.gutters,"CodeMirror-linenumbers");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat(["CodeMirror-linenumbers"]):-1<t&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}ni.prototype.signal=function(e,t){lt(e,t)&&this.events.push(arguments)},ni.prototype.finish=function(){for(var e=0;e<this.events.length;e++)it.apply(null,this.events[e])};var di=0,fi=null;function hi(e){var t=e.wheelDeltaX,r=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==r&&e.detail&&e.axis==e.VERTICAL_AXIS?r=e.detail:null==r&&(r=e.wheelDelta),{x:t,y:r}}function pi(e){var t=hi(e);return t.x*=fi,t.y*=fi,t}function mi(e,t){var r=hi(t),n=r.x,i=r.y,o=e.display,a=o.scroller,l=a.scrollWidth>a.clientWidth,s=a.scrollHeight>a.clientHeight;if(n&&l||i&&s){if(i&&w&&b)e:for(var c=t.target,u=o.view;c!=a;c=c.parentNode)for(var d=0;d<u.length;d++)if(u[d].node==c){e.display.currentWheelTarget=c;break e}if(n&&!m&&!g&&null!=fi)return i&&s&&Nn(e,Math.max(0,a.scrollTop+i*fi)),Dn(e,Math.max(0,a.scrollLeft+n*fi)),(!i||i&&s)&&ct(t),void(o.wheelStartX=null);if(i&&null!=fi){var f=i*fi,h=e.doc.scrollTop,p=h+o.wrapper.clientHeight;f<0?h=Math.max(0,h+f-50):p=Math.min(e.doc.height,p+f+50),ai(e,{top:h,bottom:p})}di<20&&(null==o.wheelStartX?(o.wheelStartX=a.scrollLeft,o.wheelStartY=a.scrollTop,o.wheelDX=n,o.wheelDY=i,setTimeout(function(){if(null!=o.wheelStartX){var e=a.scrollLeft-o.wheelStartX,t=a.scrollTop-o.wheelStartY,r=t&&o.wheelDY&&t/o.wheelDY||e&&o.wheelDX&&e/o.wheelDX;o.wheelStartX=o.wheelStartY=null,r&&(fi=(fi*di+r)/(di+1),++di)}},200)):(o.wheelDX+=n,o.wheelDY+=i))}}x?fi=-.53:m?fi=15:a?fi=-.7:s&&(fi=-1/3);var gi=function(e,t){this.ranges=e,this.primIndex=t};gi.prototype.primary=function(){return this.ranges[this.primIndex]},gi.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var r=this.ranges[t],n=e.ranges[t];if(!ye(r.anchor,n.anchor)||!ye(r.head,n.head))return!1}return!0},gi.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new vi(be(this.ranges[t].anchor),be(this.ranges[t].head));return new gi(e,this.primIndex)},gi.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},gi.prototype.contains=function(e,t){t||(t=e);for(var r=0;r<this.ranges.length;r++){var n=this.ranges[r];if(0<=ve(t,n.from())&&ve(e,n.to())<=0)return r}return-1};var vi=function(e,t){this.anchor=e,this.head=t};function yi(e,t){var r=e[t];e.sort(function(e,t){return ve(e.from(),t.from())}),t=j(e,r);for(var n=1;n<e.length;n++){var i=e[n],o=e[n-1];if(0<=ve(o.to(),i.from())){var a=xe(o.from(),i.from()),l=we(o.to(),i.to()),s=o.empty()?i.from()==i.head:o.from()==o.head;n<=t&&--t,e.splice(--n,2,new vi(s?l:a,s?a:l))}}return new gi(e,t)}function bi(e,t){return new gi([new vi(e,t||e)],0)}function wi(e){return e.text?ge(e.from.line+e.text.length-1,X(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function xi(e,t){if(ve(e,t.from)<0)return e;if(ve(e,t.to)<=0)return wi(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=wi(t).ch-t.to.ch),ge(r,n)}function ki(e,t){for(var r=[],n=0;n<e.sel.ranges.length;n++){var i=e.sel.ranges[n];r.push(new vi(xi(i.anchor,t),xi(i.head,t)))}return yi(r,e.sel.primIndex)}function Ci(e,t,r){return e.line==t.line?ge(r.line,e.ch-t.ch+r.ch):ge(r.line+(e.line-t.line),e.ch)}function Si(e){e.doc.mode=Ot(e.options,e.doc.modeOption),Ti(e)}function Ti(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,ti(e,100),e.state.modeGen++,e.curOp&&Yn(e)}function Li(e,t){return 0==t.from.ch&&0==t.to.ch&&""==X(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function Mi(e,n,t,i){function o(e){return t?t[e]:null}function r(e,t,r){!function(e,t,r,n){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),Pe(e),_e(e,r);var i=n?n(e):1;i!=e.height&&de(e,i)}(e,t,r,i),lr(e,"change",e,n)}function a(e,t){for(var r=[],n=e;n<t;++n)r.push(new Gt(c[n],o(n),i));return r}var l=n.from,s=n.to,c=n.text,u=se(e,l.line),d=se(e,s.line),f=X(c),h=o(c.length-1),p=s.line-l.line;if(n.full)e.insert(0,a(0,c.length)),e.remove(c.length,e.size-c.length);else if(Li(e,n)){var m=a(0,c.length-1);r(d,d.text,h),p&&e.remove(l.line,p),m.length&&e.insert(l.line,m)}else if(u==d)if(1==c.length)r(u,u.text.slice(0,l.ch)+f+u.text.slice(s.ch),h);else{var g=a(1,c.length-1);g.push(new Gt(f+u.text.slice(s.ch),h,i)),r(u,u.text.slice(0,l.ch)+c[0],o(0)),e.insert(l.line+1,g)}else if(1==c.length)r(u,u.text.slice(0,l.ch)+c[0]+d.text.slice(s.ch),o(0)),e.remove(l.line+1,p);else{r(u,u.text.slice(0,l.ch)+c[0],o(0)),r(d,f+d.text.slice(s.ch),h);var v=a(1,c.length-1);1<p&&e.remove(l.line+1,p-1),e.insert(l.line+1,v)}lr(e,"change",e,n)}function Oi(e,l,s){!function e(t,r,n){if(t.linked)for(var i=0;i<t.linked.length;++i){var o=t.linked[i];if(o.doc!=r){var a=n&&o.sharedHist;s&&!a||(l(o.doc,a),e(o.doc,t,a))}}}(e,null,!0)}function Ni(e,t){if(t.cm)throw new Error("This document is already in use.");on((e.doc=t).cm=e),Si(e),Ai(e),e.options.lineWrapping||Xe(e),e.options.mode=t.modeOption,Yn(e)}function Ai(e){("rtl"==e.doc.direction?_:L)(e.display.lineDiv,"CodeMirror-rtl")}function Di(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function Pi(e,t){var r={from:be(t.from),to:wi(t),text:ce(e,t.from,t.to)};return Ei(e,r,t.from.line,t.to.line+1),Oi(e,function(e){return Ei(e,r,t.from.line,t.to.line+1)},!0),r}function _i(e){for(;e.length;){if(!X(e).ranges)break;e.pop()}}function Fi(e,t,r,n){var i=e.history;i.undone.length=0;var o,a,l,s=+new Date;if((i.lastOp==n||i.lastOrigin==t.origin&&t.origin&&("+"==t.origin.charAt(0)&&i.lastModTime>s-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=(l=i).lastOp==n?(_i(l.done),X(l.done)):l.done.length&&!X(l.done).ranges?X(l.done):1<l.done.length&&!l.done[l.done.length-2].ranges?(l.done.pop(),X(l.done)):void 0))a=X(o.changes),0==ve(t.from,t.to)&&0==ve(t.from,a.to)?a.to=wi(t):o.changes.push(Pi(e,t));else{var c=X(i.done);for(c&&c.ranges||zi(e.sel,i.done),o={changes:[Pi(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,a||it(e,"historyAdded")}function Wi(e,t,r,n){var i,o,a,l,s,c=e.history,u=n&&n.origin;r==c.lastSelOp||u&&c.lastSelOrigin==u&&(c.lastModTime==c.lastSelTime&&c.lastOrigin==u||(i=e,o=u,a=X(c.done),l=t,"*"==(s=o.charAt(0))||"+"==s&&a.ranges.length==l.ranges.length&&a.somethingSelected()==l.somethingSelected()&&new Date-i.history.lastSelTime<=(i.cm?i.cm.options.historyEventDelay:500)))?c.done[c.done.length-1]=t:zi(t,c.done),c.lastSelTime=+new Date,c.lastSelOrigin=u,c.lastSelOp=r,n&&!1!==n.clearRedo&&_i(c.undone)}function zi(e,t){var r=X(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Ei(t,r,e,n){var i=r["spans_"+t.id],o=0;t.iter(Math.max(t.first,e),Math.min(t.first+t.size,n),function(e){e.markedSpans&&((i||(i=r["spans_"+t.id]={}))[o]=e.markedSpans),++o})}function Hi(e){if(!e)return null;for(var t,r=0;r<e.length;++r)e[r].marker.explicitlyCleared?t||(t=e.slice(0,r)):t&&t.push(e[r]);return t?t.length?t:null:e}function Ii(e,t){var r=function(e,t){var r=t["spans_"+e.id];if(!r)return null;for(var n=[],i=0;i<t.text.length;++i)n.push(Hi(r[i]));return n}(e,t),n=Ae(e,t);if(!r)return n;if(!n)return r;for(var i=0;i<r.length;++i){var o=r[i],a=n[i];if(o&&a)e:for(var l=0;l<a.length;++l){for(var s=a[l],c=0;c<o.length;++c)if(o[c].marker==s.marker)continue e;o.push(s)}else a&&(r[i]=a)}return r}function ji(e,t,r){for(var n=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)n.push(r?gi.prototype.deepCopy.call(o):o);else{var a=o.changes,l=[];n.push({changes:l});for(var s=0;s<a.length;++s){var c=a[s],u=void 0;if(l.push({from:c.from,to:c.to,text:c.text}),t)for(var d in c)(u=d.match(/^spans_(\d+)$/))&&-1<j(t,Number(u[1]))&&(X(l)[d]=c[d],delete c[d])}}}return n}function Bi(e,t,r,n){if(n){var i=e.anchor;if(r){var o=ve(t,i)<0;o!=ve(r,i)<0?(i=t,t=r):o!=ve(t,r)<0&&(t=r)}return new vi(i,t)}return new vi(r||t,t)}function Ri(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),Gi(e,new gi([Bi(e.sel.primary(),t,r,i)],0),n)}function qi(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)n[o]=Bi(e.sel.ranges[o],t[o],null,i);Gi(e,yi(n,e.sel.primIndex),r)}function Ui(e,t,r,n){var i=e.sel.ranges.slice(0);i[t]=r,Gi(e,yi(i,e.sel.primIndex),n)}function Vi(e,t,r,n){Gi(e,bi(t,r),n)}function Ki(e,t,r){var n=e.history.done,i=X(n);i&&i.ranges?$i(e,n[n.length-1]=t,r):Gi(e,t,r)}function Gi(e,t,r){$i(e,t,r),Wi(e,e.sel,e.cm?e.cm.curOp.id:NaN,r)}function $i(e,t,r){var n,i,o,a;(lt(e,"beforeSelectionChange")||e.cm&<(e.cm,"beforeSelectionChange"))&&(n=e,o=r,a={ranges:(i=t).ranges,update:function(e){this.ranges=[];for(var t=0;t<e.length;t++)this.ranges[t]=new vi(Ce(n,e[t].anchor),Ce(n,e[t].head))},origin:o&&o.origin},it(n,"beforeSelectionChange",n,a),n.cm&&it(n.cm,"beforeSelectionChange",n.cm,a),t=a.ranges!=i.ranges?yi(a.ranges,a.ranges.length-1):i),Xi(e,Zi(e,t,r&&r.bias||(ve(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),r&&!1===r.scroll||!e.cm||Tn(e.cm)}function Xi(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,at(e.cm)),lr(e,"cursorActivity",e))}function Yi(e){Xi(e,Zi(e,e.sel,null,!1))}function Zi(e,t,r,n){for(var i,o=0;o<t.ranges.length;o++){var a=t.ranges[o],l=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],s=Ji(e,a.anchor,l&&l.anchor,r,n),c=Ji(e,a.head,l&&l.head,r,n);(i||s!=a.anchor||c!=a.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new vi(s,c))}return i?yi(i,t.primIndex):t}function Qi(e,t,r,n,i){var o=se(e,t.line);if(o.markedSpans)for(var a=0;a<o.markedSpans.length;++a){var l=o.markedSpans[a],s=l.marker;if((null==l.from||(s.inclusiveLeft?l.from<=t.ch:l.from<t.ch))&&(null==l.to||(s.inclusiveRight?l.to>=t.ch:l.to>t.ch))){if(i&&(it(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(r){var c=s.find(n<0?1:-1),u=void 0;if((n<0?s.inclusiveRight:s.inclusiveLeft)&&(c=eo(e,c,-n,c&&c.line==t.line?o:null)),c&&c.line==t.line&&(u=ve(c,r))&&(n<0?u<0:0<u))return Qi(e,c,t,n,i)}var d=s.find(n<0?-1:1);return(n<0?s.inclusiveLeft:s.inclusiveRight)&&(d=eo(e,d,n,d.line==t.line?o:null)),d?Qi(e,d,t,n,i):null}}return t}function Ji(e,t,r,n,i){var o=n||1,a=Qi(e,t,r,o,i)||!i&&Qi(e,t,r,o,!0)||Qi(e,t,r,-o,i)||!i&&Qi(e,t,r,-o,!0);return a||(e.cantEdit=!0,ge(e.first,0))}function eo(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?Ce(e,ge(t.line-1)):null:0<r&&t.ch==(n||se(e,t.line)).text.length?t.line<e.first+e.size-1?ge(t.line+1,0):null:new ge(t.line,t.ch+r)}function to(e){e.setSelection(ge(e.firstLine(),0),ge(e.lastLine()),q)}function ro(i,e,t){var o={canceled:!1,from:e.from,to:e.to,text:e.text,origin:e.origin,cancel:function(){return o.canceled=!0}};return t&&(o.update=function(e,t,r,n){e&&(o.from=Ce(i,e)),t&&(o.to=Ce(i,t)),r&&(o.text=r),void 0!==n&&(o.origin=n)}),it(i,"beforeChange",i,o),i.cm&&it(i.cm,"beforeChange",i.cm,o),o.canceled?null:{from:o.from,to:o.to,text:o.text,origin:o.origin}}function no(e,t,r){if(e.cm){if(!e.cm.curOp)return Gn(e.cm,no)(e,t,r);if(e.cm.state.suppressEdits)return}if(!(lt(e,"beforeChange")||e.cm&<(e.cm,"beforeChange"))||(t=ro(e,t,!0))){var n=Te&&!r&&function(e,t,r){var n=null;if(e.iter(t.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var r=e.markedSpans[t].marker;!r.readOnly||n&&-1!=j(n,r)||(n||(n=[])).push(r)}}),!n)return null;for(var i=[{from:t,to:r}],o=0;o<n.length;++o)for(var a=n[o],l=a.find(0),s=0;s<i.length;++s){var c=i[s];if(!(ve(c.to,l.from)<0||0<ve(c.from,l.to))){var u=[s,1],d=ve(c.from,l.from),f=ve(c.to,l.to);(d<0||!a.inclusiveLeft&&!d)&&u.push({from:c.from,to:l.from}),(0<f||!a.inclusiveRight&&!f)&&u.push({from:l.to,to:c.to}),i.splice.apply(i,u),s+=u.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;0<=i;--i)io(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else io(e,t)}}function io(e,r){if(1!=r.text.length||""!=r.text[0]||0!=ve(r.from,r.to)){var t=ki(e,r);Fi(e,r,t,e.cm?e.cm.curOp.id:NaN),lo(e,r,t,Ae(e,r));var n=[];Oi(e,function(e,t){t||-1!=j(n,e.history)||(fo(e.history,r),n.push(e.history)),lo(e,r,null,Ae(e,r))})}}function oo(i,o,e){var t=i.cm&&i.cm.state.suppressEdits;if(!t||e){for(var a,r=i.history,n=i.sel,l="undo"==o?r.done:r.undone,s="undo"==o?r.undone:r.done,c=0;c<l.length&&(a=l[c],e?!a.ranges||a.equals(i.sel):a.ranges);c++);if(c!=l.length){for(r.lastOrigin=r.lastSelOrigin=null;;){if(!(a=l.pop()).ranges){if(t)return void l.push(a);break}if(zi(a,s),e&&!a.equals(i.sel))return void Gi(i,a,{clearRedo:!1});n=a}var u=[];zi(n,s),s.push({changes:u,generation:r.generation}),r.generation=a.generation||++r.maxGeneration;for(var d=lt(i,"beforeChange")||i.cm&<(i.cm,"beforeChange"),f=function(e){var r=a.changes[e];if(r.origin=o,d&&!ro(i,r,!1))return l.length=0,{};u.push(Pi(i,r));var t=e?ki(i,r):X(l);lo(i,r,t,Ii(i,r)),!e&&i.cm&&i.cm.scrollIntoView({from:r.from,to:wi(r)});var n=[];Oi(i,function(e,t){t||-1!=j(n,e.history)||(fo(e.history,r),n.push(e.history)),lo(e,r,null,Ii(e,r))})},h=a.changes.length-1;0<=h;--h){var p=f(h);if(p)return p.v}}}}function ao(e,t){if(0!=t&&(e.first+=t,e.sel=new gi(Y(e.sel.ranges,function(e){return new vi(ge(e.anchor.line+t,e.anchor.ch),ge(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){Yn(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;n<r.viewTo;n++)Zn(e.cm,n,"gutter")}}function lo(e,t,r,n){if(e.cm&&!e.cm.curOp)return Gn(e.cm,lo)(e,t,r,n);if(t.to.line<e.first)ao(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);ao(e,i),t={from:ge(e.first,0),to:ge(t.to.line+i,t.to.ch),text:[X(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:ge(o,se(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ce(e,t.from,t.to),r||(r=ki(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,a=t.to,l=!1,s=o.line;e.options.lineWrapping||(s=fe(Re(se(n,o.line))),n.iter(s,a.line+1,function(e){if(e==i.maxLine)return l=!0}));-1<n.sel.contains(t.from,t.to)&&at(e);Mi(n,t,r,nn(e)),e.options.lineWrapping||(n.iter(s,o.line+t.text.length,function(e){var t=$e(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,l=!1)}),l&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var r=e.first,n=t-1;r<n;n--){var i=se(e,n).stateAfter;if(i&&(!(i instanceof Wt)||n+i.lookAhead<t)){r=n+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,r)}})(n,o.line),ti(e,400);var c=t.text.length-(a.line-o.line)-1;t.full?Yn(e):o.line!=a.line||1!=t.text.length||Li(e.doc,t)?Yn(e,o.line,a.line+1,c):Zn(e,o.line,"text");var u=lt(e,"changes"),d=lt(e,"change");if(d||u){var f={from:o,to:a,text:t.text,removed:t.removed,origin:t.origin};d&&lr(e,"change",e,f),u&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(f)}e.display.selForContextMenu=null}(e.cm,t,n):Mi(e,t,n),$i(e,r,q)}}function so(e,t,r,n,i){var o;(n||(n=r),ve(n,r)<0)&&(r=(o=[n,r])[0],n=o[1]);"string"==typeof t&&(t=e.splitLines(t)),no(e,{from:r,to:n,text:t,origin:i})}function co(e,t,r,n){r<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function uo(e,t,r,n){for(var i=0;i<e.length;++i){var o=e[i],a=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var l=0;l<o.ranges.length;l++)co(o.ranges[l].anchor,t,r,n),co(o.ranges[l].head,t,r,n)}else{for(var s=0;s<o.changes.length;++s){var c=o.changes[s];if(r<c.from.line)c.from=ge(c.from.line+n,c.from.ch),c.to=ge(c.to.line+n,c.to.ch);else if(t<=c.to.line){a=!1;break}}a||(e.splice(0,i+1),i=0)}}}function fo(e,t){var r=t.from.line,n=t.to.line,i=t.text.length-(n-r)-1;uo(e.done,r,n,i),uo(e.undone,r,n,i)}function ho(e,t,r,n){var i=t,o=t;return"number"==typeof t?o=se(e,ke(e,t)):i=fe(t),null==i?null:(n(o,i)&&e.cm&&Zn(e.cm,i,r),o)}function po(e){this.lines=e,this.parent=null;for(var t=0,r=0;r<e.length;++r)e[r].parent=this,t+=e[r].height;this.height=t}function mo(e){this.children=e;for(var t=0,r=0,n=0;n<e.length;++n){var i=e[n];t+=i.chunkSize(),r+=i.height,i.parent=this}this.size=t,this.height=r,this.parent=null}vi.prototype.from=function(){return xe(this.anchor,this.head)},vi.prototype.to=function(){return we(this.anchor,this.head)},vi.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},po.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var r,n=e,i=e+t;n<i;++n){var o=this.lines[n];this.height-=o.height,(r=o).parent=null,Pe(r),lr(o,"delete")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,r){this.height+=r,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var n=0;n<t.length;++n)t[n].parent=this},iterN:function(e,t,r){for(var n=e+t;e<n;++e)if(r(this.lines[e]))return!0}},mo.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var r=0;r<this.children.length;++r){var n=this.children[r],i=n.chunkSize();if(e<i){var o=Math.min(t,i-e),a=n.height;if(n.removeInner(e,o),this.height-=a-n.height,i==o&&(this.children.splice(r--,1),n.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(1<this.children.length||!(this.children[0]instanceof po))){var l=[];this.collapse(l),this.children=[new po(l)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,r){this.size+=t.length,this.height+=r;for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,r),i.lines&&50<i.lines.length){for(var a=i.lines.length%25+25,l=a;l<i.lines.length;){var s=new po(i.lines.slice(l,l+=25));i.height-=s.height,this.children.splice(++n,0,s),s.parent=this}i.lines=i.lines.slice(0,a),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=new mo(e.children.splice(e.children.length-5,5));if(e.parent){e.size-=t.size,e.height-=t.height;var r=j(e.parent.children,e);e.parent.children.splice(r+1,0,t)}else{var n=new mo(e.children);(n.parent=e).children=[n,t],e=n}t.parent=e.parent}while(10<e.children.length);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<o){var a=Math.min(t,o-e);if(i.iterN(e,a,r))return!0;if(0==(t-=a))break;e=0}else e-=o}}};var go=function(e,t,r){if(r)for(var n in r)r.hasOwnProperty(n)&&(this[n]=r[n]);this.doc=e,this.node=t};function vo(e,t,r){Ge(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Sn(e,r)}go.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,r=this.line,n=fe(r);if(null!=n&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(r.widgets=null);var o=br(this);de(r,Math.max(0,r.height-o)),e&&(Kn(e,function(){vo(e,r,-o),Zn(e,n,"widget")}),lr(e,"lineWidgetCleared",e,this,n))}},go.prototype.changed=function(){var e=this,t=this.height,r=this.doc.cm,n=this.line;this.height=null;var i=br(this)-t;i&&(Ve(this.doc,n)||de(n,n.height+i),r&&Kn(r,function(){r.curOp.forceUpdate=!0,vo(r,n,i),lr(r,"lineWidgetChanged",r,e,fe(n))}))},st(go);var yo=0,bo=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++yo};function wo(t,n,i,e,r){if(e&&e.shared)return function(e,r,n,i,o){(i=E(i)).shared=!1;var a=[wo(e,r,n,i,o)],l=a[0],s=i.widgetNode;return Oi(e,function(e){s&&(i.widgetNode=s.cloneNode(!0)),a.push(wo(e,Ce(e,r),Ce(e,n),i,o));for(var t=0;t<e.linked.length;++t)if(e.linked[t].isParent)return;l=X(a)}),new xo(a,l)}(t,n,i,e,r);if(t.cm&&!t.cm.curOp)return Gn(t.cm,wo)(t,n,i,e,r);var o=new bo(t,r),a=ve(n,i);if(e&&E(e,o,!1),0<a||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=N("span",[o.replacedWith],"CodeMirror-widget"),e.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),e.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Be(t,n.line,n,i,o)||n.line!=i.line&&Be(t,i.line,n,i,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Le=!0}o.addToHistory&&Fi(t,{from:n,to:i,origin:"markText"},t.sel,NaN);var l,s=n.line,c=t.cm;if(t.iter(s,i.line+1,function(e){var t,r;c&&o.collapsed&&!c.options.lineWrapping&&Re(e)==c.display.maxLine&&(l=!0),o.collapsed&&s!=n.line&&de(e,0),t=e,r=new Me(o,s==n.line?n.ch:null,s==i.line?i.ch:null),t.markedSpans=t.markedSpans?t.markedSpans.concat([r]):[r],r.marker.attachLine(t),++s}),o.collapsed&&t.iter(n.line,i.line+1,function(e){Ve(t,e)&&de(e,0)}),o.clearOnEnter&&tt(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(Te=!0,(t.history.done.length||t.history.undone.length)&&t.clearHistory()),o.collapsed&&(o.id=++yo,o.atomic=!0),c){if(l&&(c.curOp.updateMaxLine=!0),o.collapsed)Yn(c,n.line,i.line+1);else if(o.className||o.title||o.startStyle||o.endStyle||o.css)for(var u=n.line;u<=i.line;u++)Zn(c,u,"text");o.atomic&&Yi(c.doc),lr(c,"markerAdded",c,o)}return o}bo.prototype.clear=function(){var e=this;if(!this.explicitlyCleared){var t=this.doc.cm,r=t&&!t.curOp;if(r&&jn(t),lt(this,"clear")){var n=this.find();n&&lr(this,"clear",n.from,n.to)}for(var i=null,o=null,a=0;a<this.lines.length;++a){var l=e.lines[a],s=Oe(l.markedSpans,e);t&&!e.collapsed?Zn(t,fe(l),"text"):t&&(null!=s.to&&(o=fe(l)),null!=s.from&&(i=fe(l))),l.markedSpans=Ne(l.markedSpans,s),null==s.from&&e.collapsed&&!Ve(e.doc,l)&&t&&de(l,Jr(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var c=0;c<this.lines.length;++c){var u=Re(e.lines[c]),d=$e(u);d>t.display.maxLineLength&&(t.display.maxLine=u,t.display.maxLineLength=d,t.display.maxLineChanged=!0)}null!=i&&t&&this.collapsed&&Yn(t,i,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&Yi(t.doc)),t&&lr(t,"markerCleared",t,this,i,o),r&&Bn(t),this.parent&&this.parent.clear()}},bo.prototype.find=function(e,t){var r,n;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i<this.lines.length;++i){var o=this.lines[i],a=Oe(o.markedSpans,this);if(null!=a.from&&(r=ge(t?o:fe(o),a.from),-1==e))return r;if(null!=a.to&&(n=ge(t?o:fe(o),a.to),1==e))return n}return r&&{from:r,to:n}},bo.prototype.changed=function(){var o=this,a=this.find(-1,!0),l=this,s=this.doc.cm;a&&s&&Kn(s,function(){var e=a.line,t=fe(a.line),r=Nr(s,t);if(r&&(zr(r),s.curOp.selectionChanged=s.curOp.forceUpdate=!0),s.curOp.updateMaxLine=!0,!Ve(l.doc,e)&&null!=l.height){var n=l.height;l.height=null;var i=br(l)-n;i&&de(e,e.height+i)}lr(s,"markerChanged",s,o)})},bo.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=j(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},bo.prototype.detachLine=function(e){if(this.lines.splice(j(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},st(bo);var xo=function(e,t){this.markers=e,this.primary=t;for(var r=0;r<e.length;++r)e[r].parent=this};function ko(e){return e.findMarks(ge(e.first,0),e.clipPos(ge(e.lastLine())),function(e){return e.parent})}function Co(o){for(var e=function(e){var t=o[e],r=[t.primary.doc];Oi(t.primary.doc,function(e){return r.push(e)});for(var n=0;n<t.markers.length;n++){var i=t.markers[n];-1==j(r,i.doc)&&(i.parent=null,t.markers.splice(n--,1))}},t=0;t<o.length;t++)e(t)}xo.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();lr(this,"clear")}},xo.prototype.find=function(e,t){return this.primary.find(e,t)},st(xo);var So=0,To=function(e,t,r,n,i){if(!(this instanceof To))return new To(e,t,r,n,i);null==r&&(r=0),mo.call(this,[new po([new Gt("",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=r;var o=ge(r,0);this.sel=bi(o),this.history=new Di(null),this.id=++So,this.modeOption=t,this.lineSep=n,this.direction="rtl"==i?"rtl":"ltr",this.extend=!1,"string"==typeof e&&(e=this.splitLines(e)),Mi(this,{from:o,to:o,text:e}),Gi(this,bi(o),q)};To.prototype=Q(mo.prototype,{constructor:To,iter:function(e,t,r){r?this.iterN(e-this.first,t-e,r):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var r=0,n=0;n<t.length;++n)r+=t[n].height;this.insertInner(e-this.first,t,r)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=ue(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Xn(function(e){var t=ge(this.first,0),r=this.first+this.size-1;no(this,{from:t,to:ge(r,se(this,r).text.length),text:this.splitLines(e),origin:"setValue",full:!0},!0),this.cm&&Ln(this.cm,0,0),Gi(this,bi(t),q)}),replaceRange:function(e,t,r,n){so(this,e,t=Ce(this,t),r=r?Ce(this,r):t,n)},getRange:function(e,t,r){var n=ce(this,Ce(this,e),Ce(this,t));return!1===r?n:n.join(r||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(pe(this,e))return se(this,e)},getLineNumber:function(e){return fe(e)},getLineHandleVisualStart:function(e){return"number"==typeof e&&(e=se(this,e)),Re(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return Ce(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||"head"==e?t.head:"anchor"==e?t.anchor:"end"==e||"to"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Xn(function(e,t,r){Vi(this,Ce(this,"number"==typeof e?ge(e,t||0):e),null,r)}),setSelection:Xn(function(e,t,r){Vi(this,Ce(this,e),Ce(this,t||e),r)}),extendSelection:Xn(function(e,t,r){Ri(this,Ce(this,e),t&&Ce(this,t),r)}),extendSelections:Xn(function(e,t){qi(this,Se(this,e),t)}),extendSelectionsBy:Xn(function(e,t){qi(this,Se(this,Y(this.sel.ranges,e)),t)}),setSelections:Xn(function(e,t,r){if(e.length){for(var n=[],i=0;i<e.length;i++)n[i]=new vi(Ce(this,e[i].anchor),Ce(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),Gi(this,yi(n,t),r)}}),addSelection:Xn(function(e,t,r){var n=this.sel.ranges.slice(0);n.push(new vi(Ce(this,e),Ce(this,t||e))),Gi(this,yi(n,n.length-1),r)}),getSelection:function(e){for(var t,r=this.sel.ranges,n=0;n<r.length;n++){var i=ce(this,r[n].from(),r[n].to());t=t?t.concat(i):i}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],r=this.sel.ranges,n=0;n<r.length;n++){var i=ce(this,r[n].from(),r[n].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[n]=i}return t},replaceSelection:function(e,t,r){for(var n=[],i=0;i<this.sel.ranges.length;i++)n[i]=e;this.replaceSelections(n,t,r||"+input")},replaceSelections:Xn(function(e,t,r){for(var n=[],i=this.sel,o=0;o<i.ranges.length;o++){var a=i.ranges[o];n[o]={from:a.from(),to:a.to(),text:this.splitLines(e[o]),origin:r}}for(var l=t&&"end"!=t&&function(e,t,r){for(var n=[],i=ge(e.first,0),o=i,a=0;a<t.length;a++){var l=t[a],s=Ci(l.from,i,o),c=Ci(wi(l),i,o);if(i=l.to,o=c,"around"==r){var u=e.sel.ranges[a],d=ve(u.head,u.anchor)<0;n[a]=new vi(d?c:s,d?s:c)}else n[a]=new vi(s,s)}return new gi(n,e.sel.primIndex)}(this,n,t),s=n.length-1;0<=s;s--)no(this,n[s]);l?Ki(this,l):this.cm&&Tn(this.cm)}),undo:Xn(function(){oo(this,"undo")}),redo:Xn(function(){oo(this,"redo")}),undoSelection:Xn(function(){oo(this,"undo",!0)}),redoSelection:Xn(function(){oo(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++r;return{undo:t,redo:r}},clearHistory:function(){this.history=new Di(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:ji(this.history.done),undone:ji(this.history.undone)}},setHistory:function(e){var t=this.history=new Di(this.history.maxGeneration);t.done=ji(e.done.slice(0),null,!0),t.undone=ji(e.undone.slice(0),null,!0)},setGutterMarker:Xn(function(e,r,n){return ho(this,e,"gutter",function(e){var t=e.gutterMarkers||(e.gutterMarkers={});return!(t[r]=n)&&re(t)&&(e.gutterMarkers=null),!0})}),clearGutter:Xn(function(t){var r=this;this.iter(function(e){e.gutterMarkers&&e.gutterMarkers[t]&&ho(r,e,"gutter",function(){return e.gutterMarkers[t]=null,re(e.gutterMarkers)&&(e.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if("number"==typeof e){if(!pe(this,e))return null;if(!(e=se(this,t=e)))return null}else if(null==(t=fe(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Xn(function(e,r,n){return ho(this,e,"gutter"==r?"gutter":"class",function(e){var t="text"==r?"textClass":"background"==r?"bgClass":"gutter"==r?"gutterClass":"wrapClass";if(e[t]){if(S(n).test(e[t]))return!1;e[t]+=" "+n}else e[t]=n;return!0})}),removeLineClass:Xn(function(e,o,a){return ho(this,e,"gutter"==o?"gutter":"class",function(e){var t="text"==o?"textClass":"background"==o?"bgClass":"gutter"==o?"gutterClass":"wrapClass",r=e[t];if(!r)return!1;if(null==a)e[t]=null;else{var n=r.match(S(a));if(!n)return!1;var i=n.index+n[0].length;e[t]=r.slice(0,n.index)+(n.index&&i!=r.length?" ":"")+r.slice(i)||null}return!0})}),addLineWidget:Xn(function(e,t,r){return i=e,o=new go(n=this,t,r),(a=n.cm)&&o.noHScroll&&(a.display.alignWidgets=!0),ho(n,i,"widget",function(e){var t=e.widgets||(e.widgets=[]);if(null==o.insertAt?t.push(o):t.splice(Math.min(t.length-1,Math.max(0,o.insertAt)),0,o),o.line=e,a&&!Ve(n,e)){var r=Ge(e)<n.scrollTop;de(e,e.height+br(o)),r&&Sn(a,o.height),a.curOp.forceUpdate=!0}return!0}),a&&lr(a,"lineWidgetAdded",a,o,"number"==typeof i?i:fe(i)),o;var n,i,o,a}),removeLineWidget:function(e){e.clear()},markText:function(e,t,r){return wo(this,Ce(this,e),Ce(this,t),r,r&&r.type||"range")},setBookmark:function(e,t){var r={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return wo(this,e=Ce(this,e),e,r,"bookmark")},findMarksAt:function(e){var t=[],r=se(this,(e=Ce(this,e)).line).markedSpans;if(r)for(var n=0;n<r.length;++n){var i=r[n];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(i,o,a){i=Ce(this,i),o=Ce(this,o);var l=[],s=i.line;return this.iter(i.line,o.line+1,function(e){var t=e.markedSpans;if(t)for(var r=0;r<t.length;r++){var n=t[r];null!=n.to&&s==i.line&&i.ch>=n.to||null==n.from&&s!=i.line||null!=n.from&&s==o.line&&n.from>=o.ch||a&&!a(n.marker)||l.push(n.marker.parent||n.marker)}++s}),l},getAllMarks:function(){var n=[];return this.iter(function(e){var t=e.markedSpans;if(t)for(var r=0;r<t.length;++r)null!=t[r].from&&n.push(t[r].marker)}),n},posFromIndex:function(r){var n,i=this.first,o=this.lineSeparator().length;return this.iter(function(e){var t=e.text.length+o;if(r<t)return n=r,!0;r-=t,++i}),Ce(this,ge(i,n))},indexFromPos:function(e){var t=(e=Ce(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var r=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+r}),t},copy:function(e){var t=new To(ue(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,r=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<r&&(r=e.to);var n=new To(ue(this,t,r),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r],i=n.find(),o=e.clipPos(i.from),a=e.clipPos(i.to);if(ve(o,a)){var l=wo(e,o,a,n.primary,n.primary.type);n.markers.push(l),l.parent=n}}}(n,ko(this)),n},unlinkDoc:function(e){if(e instanceof ka&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),Co(ko(this));break}}if(e.history==this.history){var r=[e.id];Oi(e,function(e){return r.push(e.id)},!0),e.history=new Di(null),e.history.done=ji(this.history.done,r),e.history.undone=ji(this.history.undone,r)}},iterLinkedDocs:function(e){Oi(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):xt(e)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:Xn(function(e){var t;("rtl"!=e&&(e="ltr"),e!=this.direction)&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&Kn(t=this.cm,function(){Ai(t),Yn(t)}))})}),To.prototype.eachLine=To.prototype.iter;var Lo=0;function Mo(e){var i=this;if(Oo(i),!ot(i,e)&&!wr(i.display,e)){ct(e),x&&(Lo=+new Date);var o=an(i,e,!0),t=e.dataTransfer.files;if(o&&!i.isReadOnly())if(t&&t.length&&window.FileReader&&window.File)for(var a=t.length,l=Array(a),s=0,r=function(e,r){if(!i.options.allowDropFileTypes||-1!=j(i.options.allowDropFileTypes,e.type)){var n=new FileReader;n.onload=Gn(i,function(){var e=n.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(e)&&(e=""),l[r]=e,++s==a){var t={from:o=Ce(i.doc,o),to:o,text:i.doc.splitLines(l.join(i.doc.lineSeparator())),origin:"paste"};no(i.doc,t),Ki(i.doc,bi(o,wi(t)))}}),n.readAsText(e)}},n=0;n<a;++n)r(t[n],n);else{if(i.state.draggingText&&-1<i.doc.sel.contains(o))return i.state.draggingText(e),void setTimeout(function(){return i.display.input.focus()},20);try{var c=e.dataTransfer.getData("Text");if(c){var u;if(i.state.draggingText&&!i.state.draggingText.copy&&(u=i.listSelections()),$i(i.doc,bi(o,o)),u)for(var d=0;d<u.length;++d)so(i.doc,"",u[d].anchor,u[d].head,"drag");i.replaceSelection(c,"around","paste"),i.display.input.focus()}}catch(e){}}}}function Oo(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function No(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName("CodeMirror"),r=0;r<t.length;r++){var n=t[r].CodeMirror;n&&e(n)}}var Ao=!1;function Do(){var e;Ao||(tt(window,"resize",function(){null==e&&(e=setTimeout(function(){e=null,No(Po)},100))}),tt(window,"blur",function(){return No(vn)}),Ao=!0)}function Po(e){var t=e.display;t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize()}for(var _o={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",127:"Delete",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},Fo=0;Fo<10;Fo++)_o[Fo+48]=_o[Fo+96]=String(Fo);for(var Wo=65;Wo<=90;Wo++)_o[Wo]=String.fromCharCode(Wo);for(var zo=1;zo<=12;zo++)_o[zo+111]=_o[zo+63235]="F"+zo;var Eo={};function Ho(e){var t,r,n,i,o=e.split(/-(?!$)/);e=o[o.length-1];for(var a=0;a<o.length-1;a++){var l=o[a];if(/^(cmd|meta|m)$/i.test(l))i=!0;else if(/^a(lt)?$/i.test(l))t=!0;else if(/^(c|ctrl|control)$/i.test(l))r=!0;else{if(!/^s(hift)?$/i.test(l))throw new Error("Unrecognized modifier name: "+l);n=!0}}return t&&(e="Alt-"+e),r&&(e="Ctrl-"+e),i&&(e="Cmd-"+e),n&&(e="Shift-"+e),e}function Io(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if("..."==n){delete e[r];continue}for(var i=Y(r.split(" "),Ho),o=0;o<i.length;o++){var a=void 0,l=void 0;o==i.length-1?(l=i.join(" "),a=n):(l=i.slice(0,o+1).join(" "),a="...");var s=t[l];if(s){if(s!=a)throw new Error("Inconsistent bindings for "+l)}else t[l]=a}delete e[r]}for(var c in t)e[c]=t[c];return e}function jo(e,t,r,n){var i=(t=Uo(t)).call?t.call(e,n):t[e];if(!1===i)return"nothing";if("..."===i)return"multi";if(null!=i&&r(i))return"handled";if(t.fallthrough){if("[object Array]"!=Object.prototype.toString.call(t.fallthrough))return jo(e,t.fallthrough,r,n);for(var o=0;o<t.fallthrough.length;o++){var a=jo(e,t.fallthrough[o],r,n);if(a)return a}}}function Bo(e){var t="string"==typeof e?e:_o[e.keyCode];return"Ctrl"==t||"Alt"==t||"Shift"==t||"Mod"==t}function Ro(e,t,r){var n=e;return t.altKey&&"Alt"!=n&&(e="Alt-"+e),(y?t.metaKey:t.ctrlKey)&&"Ctrl"!=n&&(e="Ctrl-"+e),(y?t.ctrlKey:t.metaKey)&&"Cmd"!=n&&(e="Cmd-"+e),!r&&t.shiftKey&&"Shift"!=n&&(e="Shift-"+e),e}function qo(e,t){if(g&&34==e.keyCode&&e.char)return!1;var r=_o[e.keyCode];return null!=r&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(r=e.code),Ro(r,e,t))}function Uo(e){return"string"==typeof e?Eo[e]:e}function Vo(t,e){for(var r=t.doc.sel.ranges,n=[],i=0;i<r.length;i++){for(var o=e(r[i]);n.length&&ve(o.from,X(n).to)<=0;){var a=n.pop();if(ve(a.from,o.from)<0){o.from=a.from;break}}n.push(o)}Kn(t,function(){for(var e=n.length-1;0<=e;e--)so(t.doc,"",n[e].from,n[e].to,"+delete");Tn(t)})}function Ko(e,t,r){var n=oe(e.text,t+r,r);return n<0||n>e.text.length?null:n}function Go(e,t,r){var n=Ko(e,t.ch,r);return null==n?null:new ge(t.line,n,r<0?"after":"before")}function $o(e,t,r,n,i){if(e){var o=Je(r,t.doc.direction);if(o){var a,l=i<0?X(o):o[0],s=i<0==(1==l.level)?"after":"before";if(0<l.level||"rtl"==t.doc.direction){var c=Ar(t,r);a=i<0?r.text.length-1:0;var u=Dr(t,c,a).top;a=ae(function(e){return Dr(t,c,e).top==u},i<0==(1==l.level)?l.from:l.to-1,a),"before"==s&&(a=Ko(r,a,1))}else a=i<0?l.to:l.from;return new ge(n,a,s)}}return new ge(n,i<0?r.text.length:0,i<0?"before":"after")}Eo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Eo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Eo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Eo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Eo.default=w?Eo.macDefault:Eo.pcDefault;var Xo={selectAll:to,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),q)},killLine:function(r){return Vo(r,function(e){if(e.empty()){var t=se(r.doc,e.head.line).text.length;return e.head.ch==t&&e.head.line<r.lastLine()?{from:e.head,to:ge(e.head.line+1,0)}:{from:e.head,to:ge(e.head.line,t)}}return{from:e.from(),to:e.to()}})},deleteLine:function(t){return Vo(t,function(e){return{from:ge(e.from().line,0),to:Ce(t.doc,ge(e.to().line+1,0))}})},delLineLeft:function(e){return Vo(e,function(e){return{from:ge(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(r){return Vo(r,function(e){var t=r.charCoords(e.head,"div").top+5;return{from:r.coordsChar({left:0,top:t},"div"),to:e.from()}})},delWrappedLineRight:function(n){return Vo(n,function(e){var t=n.charCoords(e.head,"div").top+5,r=n.coordsChar({left:n.display.lineDiv.offsetWidth+100,top:t},"div");return{from:e.from(),to:r}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(ge(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(ge(e.lastLine()))},goLineStart:function(t){return t.extendSelectionsBy(function(e){return Yo(t,e.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(t){return t.extendSelectionsBy(function(e){return Zo(t,e.head)},{origin:"+move",bias:1})},goLineEnd:function(t){return t.extendSelectionsBy(function(e){return function(e,t){var r=se(e.doc,t),n=function(e){for(var t;t=Ie(e);)e=t.find(1,!0).line;return e}(r);n!=r&&(t=fe(n));return $o(!0,e,r,t,-1)}(t,e.head.line)},{origin:"+move",bias:-1})},goLineRight:function(r){return r.extendSelectionsBy(function(e){var t=r.cursorCoords(e.head,"div").top+5;return r.coordsChar({left:r.display.lineDiv.offsetWidth+100,top:t},"div")},V)},goLineLeft:function(r){return r.extendSelectionsBy(function(e){var t=r.cursorCoords(e.head,"div").top+5;return r.coordsChar({left:0,top:t},"div")},V)},goLineLeftSmart:function(n){return n.extendSelectionsBy(function(e){var t=n.cursorCoords(e.head,"div").top+5,r=n.coordsChar({left:0,top:t},"div");return r.ch<n.getLine(r.line).search(/\S/)?Zo(n,e.head):r},V)},goLineUp:function(e){return e.moveV(-1,"line")},goLineDown:function(e){return e.moveV(1,"line")},goPageUp:function(e){return e.moveV(-1,"page")},goPageDown:function(e){return e.moveV(1,"page")},goCharLeft:function(e){return e.moveH(-1,"char")},goCharRight:function(e){return e.moveH(1,"char")},goColumnLeft:function(e){return e.moveH(-1,"column")},goColumnRight:function(e){return e.moveH(1,"column")},goWordLeft:function(e){return e.moveH(-1,"word")},goGroupRight:function(e){return e.moveH(1,"group")},goGroupLeft:function(e){return e.moveH(-1,"group")},goWordRight:function(e){return e.moveH(1,"word")},delCharBefore:function(e){return e.deleteH(-1,"char")},delCharAfter:function(e){return e.deleteH(1,"char")},delWordBefore:function(e){return e.deleteH(-1,"word")},delWordAfter:function(e){return e.deleteH(1,"word")},delGroupBefore:function(e){return e.deleteH(-1,"group")},delGroupAfter:function(e){return e.deleteH(1,"group")},indentAuto:function(e){return e.indentSelection("smart")},indentMore:function(e){return e.indentSelection("add")},indentLess:function(e){return e.indentSelection("subtract")},insertTab:function(e){return e.replaceSelection("\t")},insertSoftTab:function(e){for(var t=[],r=e.listSelections(),n=e.options.tabSize,i=0;i<r.length;i++){var o=r[i].from(),a=H(e.getLine(o.line),o.ch,n);t.push($(n-a%n))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection("add"):e.execCommand("insertTab")},transposeChars:function(a){return Kn(a,function(){for(var e=a.listSelections(),t=[],r=0;r<e.length;r++)if(e[r].empty()){var n=e[r].head,i=se(a.doc,n.line).text;if(i)if(n.ch==i.length&&(n=new ge(n.line,n.ch-1)),0<n.ch)n=new ge(n.line,n.ch+1),a.replaceRange(i.charAt(n.ch-1)+i.charAt(n.ch-2),ge(n.line,n.ch-2),n,"+transpose");else if(n.line>a.doc.first){var o=se(a.doc,n.line-1).text;o&&(n=new ge(n.line,1),a.replaceRange(i.charAt(0)+a.doc.lineSeparator()+o.charAt(o.length-1),ge(n.line-1,o.length-1),n,"+transpose"))}t.push(new vi(n,n))}a.setSelections(t)})},newlineAndIndent:function(n){return Kn(n,function(){for(var e=n.listSelections(),t=e.length-1;0<=t;t--)n.replaceRange(n.doc.lineSeparator(),e[t].anchor,e[t].head,"+input");e=n.listSelections();for(var r=0;r<e.length;r++)n.indentLine(e[r].from().line,null,!0);Tn(n)})},openLine:function(e){return e.replaceSelection("\n","start")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function Yo(e,t){var r=se(e.doc,t),n=Re(r);return n!=r&&(t=fe(n)),$o(!0,e,n,t,1)}function Zo(e,t){var r=Yo(e,t.line),n=se(e.doc,r.line),i=Je(n,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,n.text.search(/\S/)),a=t.line==r.line&&t.ch<=o&&t.ch;return ge(r.line,a?0:o,r.sticky)}return r}function Qo(e,t,r){if("string"==typeof t&&!(t=Xo[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r&&(e.display.shift=!1),i=t(e)!=R}finally{e.display.shift=n,e.state.suppressEdits=!1}return i}var Jo=new I;function ea(e,t,r,n){var i=e.state.keySeq;if(i){if(Bo(t))return"handled";if(/\'$/.test(t)?e.state.keySeq=null:Jo.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),ta(e,i+" "+t,r,n))return!0}return ta(e,t,r,n)}function ta(e,t,r,n){var i=function(e,t,r){for(var n=0;n<e.state.keyMaps.length;n++){var i=jo(t,e.state.keyMaps[n],r,e);if(i)return i}return e.options.extraKeys&&jo(t,e.options.extraKeys,r,e)||jo(t,e.options.keyMap,r,e)}(e,t,n);return"multi"==i&&(e.state.keySeq=t),"handled"==i&&lr(e,"keyHandled",e,t,r),"handled"!=i&&"multi"!=i||(ct(r),hn(e)),!!i}function ra(t,e){var r=qo(e,!0);return!!r&&(e.shiftKey&&!t.state.keySeq?ea(t,"Shift-"+r,e,function(e){return Qo(t,e,!0)})||ea(t,r,e,function(e){if("string"==typeof e?/^go[A-Z]/.test(e):e.motion)return Qo(t,e)}):ea(t,r,e,function(e){return Qo(t,e)}))}var na=null;function ia(e){var t=this;if(t.curOp.focus=P(),!ot(t,e)){x&&k<11&&27==e.keyCode&&(e.returnValue=!1);var r=e.keyCode;t.display.shift=16==r||e.shiftKey;var n=ra(t,e);g&&(na=n?r:null,!n&&88==r&&!Ct&&(w?e.metaKey:e.ctrlKey)&&t.replaceSelection("",null,"cut")),18!=r||/\bCodeMirror-crosshair\b/.test(t.display.lineDiv.className)||function(e){var t=e.display.lineDiv;function r(e){18!=e.keyCode&&e.altKey||(L(t,"CodeMirror-crosshair"),nt(document,"keyup",r),nt(document,"mouseover",r))}_(t,"CodeMirror-crosshair"),tt(document,"keyup",r),tt(document,"mouseover",r)}(t)}}function oa(e){16==e.keyCode&&(this.doc.sel.shift=!1),ot(this,e)}function aa(e){var t=this;if(!(wr(t.display,e)||ot(t,e)||e.ctrlKey&&!e.altKey||w&&e.metaKey)){var r=e.keyCode,n=e.charCode;if(g&&r==na)return na=null,void ct(e);if(!g||e.which&&!(e.which<10)||!ra(t,e)){var i,o=String.fromCharCode(null==n?r:n);if("\b"!=o)if(!ea(i=t,"'"+o+"'",e,function(e){return Qo(i,e,!0)}))t.display.input.onKeyPress(e)}}}var la,sa,ca=function(e,t,r){this.time=e,this.pos=t,this.button=r};function ua(e){var t=this,r=t.display;if(!(ot(t,e)||r.activeTouch&&r.input.supportsTouch()))if(r.input.ensurePolled(),r.shift=e.shiftKey,wr(r,e))b||(r.scroller.draggable=!1,setTimeout(function(){return r.scroller.draggable=!0},100));else if(!ha(t,e)){var n,i,o,a=an(t,e),l=pt(e),s=a?(n=a,i=l,o=+new Date,sa&&sa.compare(o,n,i)?(la=sa=null,"triple"):la&&la.compare(o,n,i)?(sa=new ca(o,n,i),la=null,"double"):(la=new ca(o,n,i),sa=null,"single")):"single";window.focus(),1==l&&t.state.selectingText&&t.state.selectingText(e),a&&function(r,e,n,t,i){var o="Click";"double"==t?o="Double"+o:"triple"==t&&(o="Triple"+o);return ea(r,Ro(o=(1==e?"Left":2==e?"Middle":"Right")+o,i),i,function(e){if("string"==typeof e&&(e=Xo[e]),!e)return!1;var t=!1;try{r.isReadOnly()&&(r.state.suppressEdits=!0),t=e(r,n)!=R}finally{r.state.suppressEdits=!1}return t})}(t,l,a,s,e)||(1==l?a?function(e,t,r,n){x?setTimeout(z(pn,e),0):e.curOp.focus=P();var i,o=function(e,t,r){var n=e.getOption("configureMouse"),i=n?n(e,t,r):{};if(null==i.unit){var o=h?r.shiftKey&&r.metaKey:r.altKey;i.unit=o?"rectangle":"single"==t?"char":"double"==t?"word":"line"}(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||r.shiftKey);null==i.addNew&&(i.addNew=w?r.metaKey:r.ctrlKey);null==i.moveOnDrag&&(i.moveOnDrag=!(w?r.altKey:r.ctrlKey));return i}(e,r,n),a=e.doc.sel;e.options.dragDrop&&vt&&!e.isReadOnly()&&"single"==r&&-1<(i=a.contains(t))&&(ve((i=a.ranges[i]).from(),t)<0||0<t.xRel)&&(0<ve(i.to(),t)||t.xRel<0)?function(t,r,n,i){var o=t.display,a=!1,l=Gn(t,function(e){b&&(o.scroller.draggable=!1),t.state.draggingText=!1,nt(o.wrapper.ownerDocument,"mouseup",l),nt(o.wrapper.ownerDocument,"mousemove",s),nt(o.scroller,"dragstart",c),nt(o.scroller,"drop",l),a||(ct(e),i.addNew||Ri(t.doc,n,null,null,i.extend),b||x&&9==k?setTimeout(function(){o.wrapper.ownerDocument.body.focus(),o.input.focus()},20):o.input.focus())}),s=function(e){a=a||10<=Math.abs(r.clientX-e.clientX)+Math.abs(r.clientY-e.clientY)},c=function(){return a=!0};b&&(o.scroller.draggable=!0);(t.state.draggingText=l).copy=!i.moveOnDrag,o.scroller.dragDrop&&o.scroller.dragDrop();tt(o.wrapper.ownerDocument,"mouseup",l),tt(o.wrapper.ownerDocument,"mousemove",s),tt(o.scroller,"dragstart",c),tt(o.scroller,"drop",l),mn(t),setTimeout(function(){return o.input.focus()},20)}(e,n,t,o):function(g,e,v,y){var a=g.display,b=g.doc;ct(e);var w,x,k=b.sel,t=k.ranges;y.addNew&&!y.extend?(x=b.sel.contains(v),w=-1<x?t[x]:new vi(v,v)):(w=b.sel.primary(),x=b.sel.primIndex);if("rectangle"==y.unit)y.addNew||(w=new vi(v,v)),v=an(g,e,!0,!0),x=-1;else{var r=da(g,v,y.unit);w=y.extend?Bi(w,r.anchor,r.head,y.extend):r}y.addNew?-1==x?(x=t.length,Gi(b,yi(t.concat([w]),x),{scroll:!1,origin:"*mouse"})):1<t.length&&t[x].empty()&&"char"==y.unit&&!y.extend?(Gi(b,yi(t.slice(0,x).concat(t.slice(x+1)),0),{scroll:!1,origin:"*mouse"}),k=b.sel):Ui(b,x,w,U):(Gi(b,new gi([w],x=0),U),k=b.sel);var C=v;function l(e){if(0!=ve(C,e))if(C=e,"rectangle"==y.unit){for(var t=[],r=g.options.tabSize,n=H(se(b,v.line).text,v.ch,r),i=H(se(b,e.line).text,e.ch,r),o=Math.min(n,i),a=Math.max(n,i),l=Math.min(v.line,e.line),s=Math.min(g.lastLine(),Math.max(v.line,e.line));l<=s;l++){var c=se(b,l).text,u=K(c,o,r);o==a?t.push(new vi(ge(l,u),ge(l,u))):c.length>u&&t.push(new vi(ge(l,u),ge(l,K(c,a,r))))}t.length||t.push(new vi(v,v)),Gi(b,yi(k.ranges.slice(0,x).concat(t),x),{origin:"*mouse",scroll:!1}),g.scrollIntoView(e)}else{var d,f=w,h=da(g,e,y.unit),p=f.anchor;0<ve(h.anchor,p)?(d=h.head,p=xe(f.from(),h.anchor)):(d=h.anchor,p=we(f.to(),h.head));var m=k.ranges.slice(0);m[x]=function(e,t){var r=t.anchor,n=t.head,i=se(e.doc,r.line);if(0==ve(r,n)&&r.sticky==n.sticky)return t;var o=Je(i);if(!o)return t;var a=Ze(o,r.ch,r.sticky),l=o[a];if(l.from!=r.ch&&l.to!=r.ch)return t;var s,c=a+(l.from==r.ch==(1!=l.level)?0:1);if(0==c||c==o.length)return t;if(n.line!=r.line)s=0<(n.line-r.line)*("ltr"==e.doc.direction?1:-1);else{var u=Ze(o,n.ch,n.sticky),d=u-a||(n.ch-r.ch)*(1==l.level?-1:1);s=u==c-1||u==c?d<0:0<d}var f=o[c+(s?-1:0)],h=s==(1==f.level),p=h?f.from:f.to,m=h?"after":"before";return r.ch==p&&r.sticky==m?t:new vi(new ge(r.line,p,m),n)}(g,new vi(Ce(b,p),d)),Gi(b,yi(m,x),U)}}var s=a.wrapper.getBoundingClientRect(),c=0;function n(e){g.state.selectingText=!1,c=1/0,ct(e),a.input.focus(),nt(a.wrapper.ownerDocument,"mousemove",i),nt(a.wrapper.ownerDocument,"mouseup",o),b.history.lastSelOrigin=null}var i=Gn(g,function(e){0!==e.buttons&&pt(e)?function e(t){var r=++c;var n=an(g,t,!0,"rectangle"==y.unit);if(!n)return;if(0!=ve(n,C)){g.curOp.focus=P(),l(n);var i=wn(a,b);(n.line>=i.to||n.line<i.from)&&setTimeout(Gn(g,function(){c==r&&e(t)}),150)}else{var o=t.clientY<s.top?-20:t.clientY>s.bottom?20:0;o&&setTimeout(Gn(g,function(){c==r&&(a.scroller.scrollTop+=o,e(t))}),50)}}(e):n(e)}),o=Gn(g,n);g.state.selectingText=o,tt(a.wrapper.ownerDocument,"mousemove",i),tt(a.wrapper.ownerDocument,"mouseup",o)}(e,n,t,o)}(t,a,s,e):ht(e)==r.scroller&&ct(e):2==l?(a&&Ri(t.doc,a),setTimeout(function(){return r.input.focus()},20)):3==l&&(C?pa(t,e):mn(t)))}}function da(e,t,r){if("char"==r)return new vi(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new vi(ge(t.line,0),Ce(e.doc,ge(t.line+1,0)));var n=r(e,t);return new vi(n.from,n.to)}function fa(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&ct(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!lt(e,r))return dt(t);o-=l.top-a.viewOffset;for(var s=0;s<e.options.gutters.length;++s){var c=a.gutters.childNodes[s];if(c&&c.getBoundingClientRect().right>=i)return it(e,r,e,he(e.doc,o),e.options.gutters[s],t),dt(t)}}function ha(e,t){return fa(e,t,"gutterClick",!0)}function pa(e,t){wr(e.display,t)||function(e,t){if(!lt(e,"gutterContextMenu"))return!1;return fa(e,t,"gutterContextMenu",!1)}(e,t)||ot(e,t,"contextmenu")||e.display.input.onContextMenu(t)}function ma(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Hr(e)}ca.prototype.compare=function(e,t,r){return this.time+400>e&&0==ve(t,this.pos)&&r==this.button};var ga={toString:function(){return"CodeMirror.Init"}},va={},ya={};function ba(e){ci(e),Yn(e),xn(e)}function wa(e,t,r){if(!t!=!(r&&r!=ga)){var n=e.display.dragFunctions,i=t?tt:nt;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function xa(e){e.options.lineWrapping?(_(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(L(e.display.wrapper,"CodeMirror-wrap"),Xe(e)),on(e),Yn(e),Hr(e),setTimeout(function(){return Wn(e)},100)}function ka(e,t){var r=this;if(!(this instanceof ka))return new ka(e,t);this.options=t=t?E(t):{},E(va,t,!1),ui(t);var n=t.value;"string"==typeof n?n=new To(n,t.mode,null,t.lineSeparator,t.direction):t.mode&&(n.modeOption=t.mode),this.doc=n;var i=new ka.inputStyles[t.inputStyle](this),o=this.display=new le(e,n,i);for(var a in ci(o.wrapper.CodeMirror=this),ma(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Hn(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new I,keySeq:null,specialChars:null},t.autofocus&&!f&&o.input.focus(),x&&k<11&&setTimeout(function(){return r.display.input.reset(!0)},20),function(i){var o=i.display;tt(o.scroller,"mousedown",Gn(i,ua)),tt(o.scroller,"dblclick",x&&k<11?Gn(i,function(e){if(!ot(i,e)){var t=an(i,e);if(t&&!ha(i,e)&&!wr(i.display,e)){ct(e);var r=i.findWordAt(t);Ri(i.doc,r.anchor,r.head)}}}):function(e){return ot(i,e)||ct(e)});C||tt(o.scroller,"contextmenu",function(e){return pa(i,e)});var r,n={end:0};function a(){o.activeTouch&&(r=setTimeout(function(){return o.activeTouch=null},1e3),(n=o.activeTouch).end=+new Date)}function l(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return 400<r*r+n*n}tt(o.scroller,"touchstart",function(e){if(!ot(i,e)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(e)&&!ha(i,e)){o.input.ensurePolled(),clearTimeout(r);var t=+new Date;o.activeTouch={start:t,moved:!1,prev:t-n.end<=300?n:null},1==e.touches.length&&(o.activeTouch.left=e.touches[0].pageX,o.activeTouch.top=e.touches[0].pageY)}}),tt(o.scroller,"touchmove",function(){o.activeTouch&&(o.activeTouch.moved=!0)}),tt(o.scroller,"touchend",function(e){var t=o.activeTouch;if(t&&!wr(o,e)&&null!=t.left&&!t.moved&&new Date-t.start<300){var r,n=i.coordsChar(o.activeTouch,"page");r=!t.prev||l(t,t.prev)?new vi(n,n):!t.prev.prev||l(t,t.prev.prev)?i.findWordAt(n):new vi(ge(n.line,0),Ce(i.doc,ge(n.line+1,0))),i.setSelection(r.anchor,r.head),i.focus(),ct(e)}a()}),tt(o.scroller,"touchcancel",a),tt(o.scroller,"scroll",function(){o.scroller.clientHeight&&(Nn(i,o.scroller.scrollTop),Dn(i,o.scroller.scrollLeft,!0),it(i,"scroll",i))}),tt(o.scroller,"mousewheel",function(e){return mi(i,e)}),tt(o.scroller,"DOMMouseScroll",function(e){return mi(i,e)}),tt(o.wrapper,"scroll",function(){return o.wrapper.scrollTop=o.wrapper.scrollLeft=0}),o.dragFunctions={enter:function(e){ot(i,e)||ft(e)},over:function(e){ot(i,e)||(!function(e,t){var r=an(e,t);if(r){var n=document.createDocumentFragment();un(e,r,n),e.display.dragCursor||(e.display.dragCursor=A("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),O(e.display.dragCursor,n)}}(i,e),ft(e))},start:function(e){return function(e,t){if(x&&(!e.state.draggingText||+new Date-Lo<100))ft(t);else if(!ot(e,t)&&!wr(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!s)){var r=A("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",g&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),g&&r.parentNode.removeChild(r)}}(i,e)},drop:Gn(i,Mo),leave:function(e){ot(i,e)||Oo(i)}};var e=o.input.getField();tt(e,"keyup",function(e){return oa.call(i,e)}),tt(e,"keydown",Gn(i,ia)),tt(e,"keypress",Gn(i,aa)),tt(e,"focus",function(e){return gn(i,e)}),tt(e,"blur",function(e){return vn(i,e)})}(this),Do(),jn(this),this.curOp.forceUpdate=!0,Ni(this,n),t.autofocus&&!f||this.hasFocus()?setTimeout(z(gn,this),20):vn(this),ya)ya.hasOwnProperty(a)&&ya[a](r,t[a],ga);kn(this),t.finishInit&&t.finishInit(this);for(var l=0;l<Ca.length;++l)Ca[l](r);Bn(this),b&&t.lineWrapping&&"optimizelegibility"==getComputedStyle(o.lineDiv).textRendering&&(o.lineDiv.style.textRendering="auto")}ka.defaults=va,ka.optionHandlers=ya;var Ca=[];function Sa(e,t,r,n){var i,o=e.doc;null==r&&(r="add"),"smart"==r&&(o.mode.indent?i=It(e,t).state:r="prev");var a=e.options.tabSize,l=se(o,t),s=H(l.text,null,a);l.stateAfter&&(l.stateAfter=null);var c,u=l.text.match(/^\s*/)[0];if(n||/\S/.test(l.text)){if("smart"==r&&((c=o.mode.indent(i,l.text.slice(u.length),l.text))==R||150<c)){if(!n)return;r="prev"}}else c=0,r="not";"prev"==r?c=t>o.first?H(se(o,t-1).text,null,a):0:"add"==r?c=s+e.options.indentUnit:"subtract"==r?c=s-e.options.indentUnit:"number"==typeof r&&(c=s+r),c=Math.max(0,c);var d="",f=0;if(e.options.indentWithTabs)for(var h=Math.floor(c/a);h;--h)f+=a,d+="\t";if(f<c&&(d+=$(c-f)),d!=u)return so(o,d,ge(t,0),ge(t,u.length),"+input"),!(l.stateAfter=null);for(var p=0;p<o.sel.ranges.length;p++){var m=o.sel.ranges[p];if(m.head.line==t&&m.head.ch<u.length){var g=ge(t,u.length);Ui(o,p,new vi(g,g));break}}}ka.defineInitHook=function(e){return Ca.push(e)};var Ta=null;function La(e){Ta=e}function Ma(e,t,r,n,i){var o=e.doc;e.display.shift=!1,n||(n=o.sel);var a,l=e.state.pasteIncoming||"paste"==i,s=xt(t),c=null;if(l&&1<n.ranges.length)if(Ta&&Ta.text.join("\n")==t){if(n.ranges.length%Ta.text.length==0){c=[];for(var u=0;u<Ta.text.length;u++)c.push(o.splitLines(Ta.text[u]))}}else s.length==n.ranges.length&&e.options.pasteLinesPerSelection&&(c=Y(s,function(e){return[e]}));for(var d=n.ranges.length-1;0<=d;d--){var f=n.ranges[d],h=f.from(),p=f.to();f.empty()&&(r&&0<r?h=ge(h.line,h.ch-r):e.state.overwrite&&!l?p=ge(p.line,Math.min(se(o,p.line).text.length,p.ch+X(s).length)):Ta&&Ta.lineWise&&Ta.text.join("\n")==t&&(h=p=ge(h.line,0))),a=e.curOp.updateInput;var m={from:h,to:p,text:c?c[d%c.length]:s,origin:i||(l?"paste":e.state.cutIncoming?"cut":"+input")};no(e.doc,m),lr(e,"inputRead",e,m)}t&&!l&&Na(e,t),Tn(e),e.curOp.updateInput=a,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Oa(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Kn(t,function(){return Ma(t,r,0,null,"paste")}),!0}function Na(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;0<=n;n--){var i=r.ranges[n];if(!(100<i.head.ch||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),a=!1;if(o.electricChars){for(var l=0;l<o.electricChars.length;l++)if(-1<t.indexOf(o.electricChars.charAt(l))){a=Sa(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(se(e.doc,i.head.line).text.slice(0,i.head.ch))&&(a=Sa(e,i.head.line,"smart"));a&&lr(e,"electricInput",e,i.head.line)}}}function Aa(e){for(var t=[],r=[],n=0;n<e.doc.sel.ranges.length;n++){var i=e.doc.sel.ranges[n].head.line,o={anchor:ge(i,0),head:ge(i+1,0)};r.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:r}}function Da(e,t){e.setAttribute("autocorrect","off"),e.setAttribute("autocapitalize","off"),e.setAttribute("spellcheck",!!t)}function Pa(){var e=A("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none"),t=A("div",[e],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return b?e.style.width="1000px":e.setAttribute("wrap","off"),u&&(e.style.border="1px solid black"),Da(e),t}function _a(n,i,o,e,a){var t=i,r=o,l=se(n,i.line);function s(e){var t,r;if(null==(t=a?function(t,r,l,e){var s=Je(r,t.doc.direction);if(!s)return Go(r,l,e);l.ch>=r.text.length?(l.ch=r.text.length,l.sticky="before"):l.ch<=0&&(l.ch=0,l.sticky="after");var n=Ze(s,l.ch,l.sticky),i=s[n];if("ltr"==t.doc.direction&&i.level%2==0&&(0<e?i.to>l.ch:i.from<l.ch))return Go(r,l,e);var o,c=function(e,t){return Ko(r,e instanceof ge?e.ch:e,t)},a=function(e){return t.options.lineWrapping?(o=o||Ar(t,r),Yr(t,r,o,e)):{begin:0,end:r.text.length}},u=a("before"==l.sticky?c(l,-1):l.ch);if("rtl"==t.doc.direction||1==i.level){var d=1==i.level==e<0,f=c(l,d?1:-1);if(null!=f&&(d?f<=i.to&&f<=u.end:f>=i.from&&f>=u.begin)){var h=d?"before":"after";return new ge(l.line,f,h)}}var p=function(e,t,r){for(var n=function(e,t){return t?new ge(l.line,c(e,1),"before"):new ge(l.line,e,"after")};0<=e&&e<s.length;e+=t){var i=s[e],o=0<t==(1!=i.level),a=o?r.begin:c(r.end,-1);if(i.from<=a&&a<i.to)return n(a,o);if(a=o?i.from:c(i.to,-1),r.begin<=a&&a<r.end)return n(a,o)}},m=p(n+e,e,u);if(m)return m;var g=0<e?u.end:c(u.begin,-1);return null==g||0<e&&g==r.text.length||!(m=p(0<e?0:s.length-1,e,a(g)))?null:m}(n.cm,l,i,o):Go(l,i,o))){if(e||(r=i.line+o)<n.first||r>=n.first+n.size||(i=new ge(r,i.ch,i.sticky),!(l=se(n,r))))return!1;i=$o(a,n.cm,l,i.line,o)}else i=t;return!0}if("char"==e)s();else if("column"==e)s(!0);else if("word"==e||"group"==e)for(var c=null,u="group"==e,d=n.cm&&n.cm.getHelper(i,"wordChars"),f=!0;!(o<0)||s(!f);f=!1){var h=l.text.charAt(i.ch)||"\n",p=te(h,d)?"w":u&&"\n"==h?"n":!u||/\s/.test(h)?null:"p";if(!u||f||p||(p="s"),c&&c!=p){o<0&&(o=1,s(),i.sticky="after");break}if(p&&(c=p),0<o&&!s(!f))break}var m=Ji(n,i,t,r,!0);return ye(t,m)&&(m.hitSide=!0),m}function Fa(e,t,r,n){var i,o,a=e.doc,l=t.left;if("page"==n){var s=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(s-.5*Jr(e.display),3);i=(0<r?t.bottom:t.top)+r*c}else"line"==n&&(i=0<r?t.bottom+3:t.top-3);for(;(o=$r(e,l,i)).outside;){if(r<0?i<=0:i>=a.height){o.hitSide=!0;break}i+=5*r}return o}var Wa=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new I,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function za(e,t){var r=Nr(e,t.line);if(!r||r.hidden)return null;var n=se(e.doc,t.line),i=Mr(r,n,t.line),o=Je(n,e.doc.direction),a="left";o&&(a=Ze(o,t.ch)%2?"right":"left");var l=Fr(i.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function Ea(e,t){return t&&(e.bad=!0),e}function Ha(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return Ea(e.clipPos(ge(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==n)return Ia(o,t,r)}}function Ia(c,e,t){var r=c.text.firstChild,n=!1;if(!e||!D(r,e))return Ea(ge(fe(c.line),0),!0);if(e==r&&(n=!0,e=r.childNodes[t],t=0,!e)){var i=c.rest?X(c.rest):c.line;return Ea(ge(fe(i),i.text.length),n)}var o=3==e.nodeType?e:null,a=e;for(o||1!=e.childNodes.length||3!=e.firstChild.nodeType||(o=e.firstChild,t&&(t=o.nodeValue.length));a.parentNode!=r;)a=a.parentNode;var u=c.measure,d=u.maps;function l(e,t,r){for(var n=-1;n<(d?d.length:0);n++)for(var i=n<0?u.map:d[n],o=0;o<i.length;o+=3){var a=i[o+2];if(a==e||a==t){var l=fe(n<0?c.line:c.rest[n]),s=i[o]+r;return(r<0||a!=e)&&(s=i[o+(r?1:0)]),ge(l,s)}}}var s=l(o,a,t);if(s)return Ea(s,n);for(var f=a.nextSibling,h=o?o.nodeValue.length-t:0;f;f=f.nextSibling){if(s=l(f,f.firstChild,0))return Ea(ge(s.line,s.ch-h),n);h+=f.textContent.length}for(var p=a.previousSibling,m=t;p;p=p.previousSibling){if(s=l(p,p.firstChild,-1))return Ea(ge(s.line,s.ch+m),n);m+=p.textContent.length}}Wa.prototype.init=function(e){var t=this,a=this,l=a.cm,s=a.div=e.lineDiv;function r(e){if(!ot(l,e)){if(l.somethingSelected())La({lineWise:!1,text:l.getSelections()}),"cut"==e.type&&l.replaceSelection("",null,"cut");else{if(!l.options.lineWiseCopyCut)return;var t=Aa(l);La({lineWise:!0,text:t.text}),"cut"==e.type&&l.operation(function(){l.setSelections(t.ranges,0,q),l.replaceSelection("",null,"cut")})}if(e.clipboardData){e.clipboardData.clearData();var r=Ta.text.join("\n");if(e.clipboardData.setData("Text",r),e.clipboardData.getData("Text")==r)return void e.preventDefault()}var n=Pa(),i=n.firstChild;l.display.lineSpace.insertBefore(n,l.display.lineSpace.firstChild),i.value=Ta.text.join("\n");var o=document.activeElement;W(i),setTimeout(function(){l.display.lineSpace.removeChild(n),o.focus(),o==s&&a.showPrimarySelection()},50)}}Da(s,l.options.spellcheck),tt(s,"paste",function(e){ot(l,e)||Oa(e,l)||k<=11&&setTimeout(Gn(l,function(){return t.updateFromDOM()}),20)}),tt(s,"compositionstart",function(e){t.composing={data:e.data,done:!1}}),tt(s,"compositionupdate",function(e){t.composing||(t.composing={data:e.data,done:!1})}),tt(s,"compositionend",function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),tt(s,"touchstart",function(){return a.forceCompositionEnd()}),tt(s,"input",function(){t.composing||t.readFromDOMSoon()}),tt(s,"copy",r),tt(s,"cut",r)},Wa.prototype.prepareSelection=function(){var e=cn(this.cm,!1);return e.focus=this.cm.state.focused,e},Wa.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Wa.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},Wa.prototype.showPrimarySelection=function(){var e=this.getSelection(),t=this.cm,r=t.doc.sel.primary(),n=r.from(),i=r.to();if(t.display.viewTo==t.display.viewFrom||n.line>=t.display.viewTo||i.line<t.display.viewFrom)e.removeAllRanges();else{var o=Ha(t,e.anchorNode,e.anchorOffset),a=Ha(t,e.focusNode,e.focusOffset);if(!o||o.bad||!a||a.bad||0!=ve(xe(o,a),n)||0!=ve(we(o,a),i)){var l=t.display.view,s=n.line>=t.display.viewFrom&&za(t,n)||{node:l[0].measure.map[2],offset:0},c=i.line<t.display.viewTo&&za(t,i);if(!c){var u=l[l.length-1].measure,d=u.maps?u.maps[u.maps.length-1]:u.map;c={node:d[d.length-1],offset:d[d.length-2]-d[d.length-3]}}if(s&&c){var f,h=e.rangeCount&&e.getRangeAt(0);try{f=T(s.node,s.offset,c.offset,c.node)}catch(e){}f&&(!m&&t.state.focused?(e.collapse(s.node,s.offset),f.collapsed||(e.removeAllRanges(),e.addRange(f))):(e.removeAllRanges(),e.addRange(f)),h&&null==e.anchorNode?e.addRange(h):m&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Wa.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},Wa.prototype.showMultipleSelections=function(e){O(this.cm.display.cursorDiv,e.cursors),O(this.cm.display.selectionDiv,e.selection)},Wa.prototype.rememberSelection=function(){var e=this.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Wa.prototype.selectionInEditor=function(){var e=this.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return D(this.div,t)},Wa.prototype.focus=function(){"nocursor"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Wa.prototype.blur=function(){this.div.blur()},Wa.prototype.getField=function(){return this.div},Wa.prototype.supportsTouch=function(){return!0},Wa.prototype.receivedFocus=function(){var t=this;this.selectionInEditor()?this.pollSelection():Kn(this.cm,function(){return t.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,function e(){t.cm.state.focused&&(t.pollSelection(),t.polling.set(t.cm.options.pollInterval,e))})},Wa.prototype.selectionChanged=function(){var e=this.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Wa.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=this.getSelection(),t=this.cm;if(d&&a&&this.cm.options.gutters.length&&function(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}(e.anchorNode))return this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var r=Ha(t,e.anchorNode,e.anchorOffset),n=Ha(t,e.focusNode,e.focusOffset);r&&n&&Kn(t,function(){Gi(t.doc,bi(r,n),q),(r.bad||n.bad)&&(t.curOp.selectionChanged=!0)})}}},Wa.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t,r,n=this.cm,i=n.display,o=n.doc.sel.primary(),a=o.from(),l=o.to();if(0==a.ch&&a.line>n.firstLine()&&(a=ge(a.line-1,se(n.doc,a.line-1).length)),l.ch==se(n.doc,l.line).text.length&&l.line<n.lastLine()&&(l=ge(l.line+1,0)),a.line<i.viewFrom||l.line>i.viewTo-1)return!1;a.line==i.viewFrom||0==(e=ln(n,a.line))?(t=fe(i.view[0].line),r=i.view[0].node):(t=fe(i.view[e].line),r=i.view[e-1].node.nextSibling);var s,c,u=ln(n,l.line);if(u==i.view.length-1?(s=i.viewTo-1,c=i.lineDiv.lastChild):(s=fe(i.view[u+1].line)-1,c=i.view[u+1].node.previousSibling),!r)return!1;for(var d=n.doc.splitLines(function(s,e,t,c,u){var r="",d=!1,f=s.doc.lineSeparator(),h=!1;function p(){d&&(r+=f,h&&(r+=f),d=h=!1)}function m(e){e&&(p(),r+=e)}function g(e){if(1==e.nodeType){var t=e.getAttribute("cm-text");if(t)return void m(t);var r,n=e.getAttribute("cm-marker");if(n){var i=s.findMarks(ge(c,0),ge(u+1,0),(l=+n,function(e){return e.id==l}));return void(i.length&&(r=i[0].find(0))&&m(ce(s.doc,r.from,r.to).join(f)))}if("false"==e.getAttribute("contenteditable"))return;var o=/^(pre|div|p|li|table|br)$/i.test(e.nodeName);if(!/^br$/i.test(e.nodeName)&&0==e.textContent.length)return;o&&p();for(var a=0;a<e.childNodes.length;a++)g(e.childNodes[a]);/^(pre|p)$/i.test(e.nodeName)&&(h=!0),o&&(d=!0)}else 3==e.nodeType&&m(e.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "));var l}for(;g(e),e!=t;)e=e.nextSibling,h=!1;return r}(n,r,c,t,s)),f=ce(n.doc,ge(t,0),ge(s,se(n.doc,s).text.length));1<d.length&&1<f.length;)if(X(d)==X(f))d.pop(),f.pop(),s--;else{if(d[0]!=f[0])break;d.shift(),f.shift(),t++}for(var h=0,p=0,m=d[0],g=f[0],v=Math.min(m.length,g.length);h<v&&m.charCodeAt(h)==g.charCodeAt(h);)++h;for(var y=X(d),b=X(f),w=Math.min(y.length-(1==d.length?h:0),b.length-(1==f.length?h:0));p<w&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)++p;if(1==d.length&&1==f.length&&t==a.line)for(;h&&h>a.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)h--,p++;d[d.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),d[0]=d[0].slice(h).replace(/\u200b+$/,"");var x=ge(t,h),k=ge(s,f.length?X(f).length-p:0);return 1<d.length||d[0]||ve(x,k)?(so(n.doc,d,x,k,"+input"),!0):void 0},Wa.prototype.ensurePolled=function(){this.forceCompositionEnd()},Wa.prototype.reset=function(){this.forceCompositionEnd()},Wa.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Wa.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Wa.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Kn(this.cm,function(){return Yn(e.cm)})},Wa.prototype.setUneditable=function(e){e.contentEditable="false"},Wa.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Gn(this.cm,Ma)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Wa.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Wa.prototype.onContextMenu=function(){},Wa.prototype.resetPosition=function(){},Wa.prototype.needsContentAttribute=!0;var ja,Ba,Ra,qa=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new I,this.hasSelection=!1,this.composing=null};qa.prototype.init=function(t){var e=this,r=this,n=this.cm;this.createField(t);var i=this.textarea;function o(e){if(!ot(n,e)){if(n.somethingSelected())La({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Aa(n);La({lineWise:!0,text:t.text}),"cut"==e.type?n.setSelections(t.ranges,null,q):(r.prevInput="",i.value=t.text.join("\n"),W(i))}"cut"==e.type&&(n.state.cutIncoming=!0)}}t.wrapper.insertBefore(this.wrapper,t.wrapper.firstChild),u&&(i.style.width="0px"),tt(i,"input",function(){x&&9<=k&&e.hasSelection&&(e.hasSelection=null),r.poll()}),tt(i,"paste",function(e){ot(n,e)||Oa(e,n)||(n.state.pasteIncoming=!0,r.fastPoll())}),tt(i,"cut",o),tt(i,"copy",o),tt(t.scroller,"paste",function(e){wr(t,e)||ot(n,e)||(n.state.pasteIncoming=!0,r.focus())}),tt(t.lineSpace,"selectstart",function(e){wr(t,e)||ct(e)}),tt(i,"compositionstart",function(){var e=n.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor("to"),{className:"CodeMirror-composing"})}}),tt(i,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},qa.prototype.createField=function(e){this.wrapper=Pa(),this.textarea=this.wrapper.firstChild},qa.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=cn(e);if(e.options.moveInputWithCursor){var i=Vr(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+a.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+a.left-o.left))}return n},qa.prototype.showSelection=function(e){var t=this.cm.display;O(t.cursorDiv,e.cursors),O(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},qa.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&W(this.textarea),x&&9<=k&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",x&&9<=k&&(this.hasSelection=null))}},qa.prototype.getField=function(){return this.textarea},qa.prototype.supportsTouch=function(){return!1},qa.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!f||P()!=this.textarea))try{this.textarea.focus()}catch(e){}},qa.prototype.blur=function(){this.textarea.blur()},qa.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},qa.prototype.receivedFocus=function(){this.slowPoll()},qa.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},qa.prototype.fastPoll=function(){var t=!1,r=this;r.pollingFast=!0,r.polling.set(20,function e(){r.poll()||t?(r.pollingFast=!1,r.slowPoll()):(t=!0,r.polling.set(60,e))})},qa.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||kt(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(x&&9<=k&&this.hasSelection===i||w&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n=""),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,l=Math.min(n.length,i.length);a<l&&n.charCodeAt(a)==i.charCodeAt(a);)++a;return Kn(t,function(){Ma(t,i.slice(a),n.length-a,null,e.composing?"*compose":null),1e3<i.length||-1<i.indexOf("\n")?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},qa.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},qa.prototype.onKeyPress=function(){x&&9<=k&&(this.hasSelection=null),this.fastPoll()},qa.prototype.onContextMenu=function(e){var r=this,n=r.cm,i=n.display,o=r.textarea,t=an(n,e),a=i.scroller.scrollTop;if(t&&!g){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(t)&&Gn(n,Gi)(n.doc,bi(t),q);var l=o.style.cssText,s=r.wrapper.style.cssText;r.wrapper.style.cssText="position: absolute";var c,u=r.wrapper.getBoundingClientRect();if(o.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-u.top-5)+"px; left: "+(e.clientX-u.left-5)+"px;\n z-index: 1000; background: "+(x?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",b&&(c=window.scrollY),i.input.focus(),b&&window.scrollTo(null,c),i.input.reset(),n.somethingSelected()||(o.value=r.prevInput=" "),r.contextMenuPending=!0,i.selForContextMenu=n.doc.sel,clearTimeout(i.detectingSelectAll),x&&9<=k&&f(),C){ft(e);var d=function(){nt(window,"mouseup",d),setTimeout(h,20)};tt(window,"mouseup",d)}else setTimeout(h,50)}function f(){if(null!=o.selectionStart){var e=n.somethingSelected(),t=""+(e?o.value:"");o.value="⇚",o.value=t,r.prevInput=e?"":"",o.selectionStart=1,o.selectionEnd=t.length,i.selForContextMenu=n.doc.sel}}function h(){if(r.contextMenuPending=!1,r.wrapper.style.cssText=s,o.style.cssText=l,x&&k<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=a),null!=o.selectionStart){(!x||x&&k<9)&&f();var e=0,t=function(){i.selForContextMenu==n.doc.sel&&0==o.selectionStart&&0<o.selectionEnd&&""==r.prevInput?Gn(n,to)(n):e++<10?i.detectingSelectAll=setTimeout(t,500):(i.selForContextMenu=null,i.input.reset())};i.detectingSelectAll=setTimeout(t,200)}}},qa.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e},qa.prototype.setUneditable=function(){},qa.prototype.needsContentAttribute=!1,function(i){var o=i.optionHandlers;function e(e,t,n,r){i.defaults[e]=t,n&&(o[e]=r?function(e,t,r){r!=ga&&n(e,t,r)}:n)}i.defineOption=e,i.Init=ga,e("value","",function(e,t){return e.setValue(t)},!0),e("mode",null,function(e,t){e.doc.modeOption=t,Si(e)},!0),e("indentUnit",2,Si,!0),e("indentWithTabs",!1),e("smartIndent",!0),e("tabSize",4,function(e){Ti(e),Hr(e),Yn(e)},!0),e("lineSeparator",null,function(e,n){if(e.doc.lineSep=n){var i=[],o=e.doc.first;e.doc.iter(function(e){for(var t=0;;){var r=e.text.indexOf(n,t);if(-1==r)break;t=r+n.length,i.push(ge(o,r))}o++});for(var t=i.length-1;0<=t;t--)so(e.doc,n,i[t],ge(i[t].line,i[t].ch+n.length))}}),e("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=ga&&e.refresh()}),e("specialCharPlaceholder",Qt,function(e){return e.refresh()},!0),e("electricChars",!0),e("inputStyle",f?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),e("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),e("rtlMoveVisually",!p),e("wholeLineUpdateBefore",!0),e("theme","default",function(e){ma(e),ba(e)},!0),e("keyMap","default",function(e,t,r){var n=Uo(t),i=r!=ga&&Uo(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),e("extraKeys",null),e("configureMouse",null),e("lineWrapping",!1,xa,!0),e("gutters",[],function(e){ui(e.options),ba(e)},!0),e("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?rn(e.display)+"px":"0",e.refresh()},!0),e("coverGutterNextToScrollbar",!1,function(e){return Wn(e)},!0),e("scrollbarStyle","native",function(e){Hn(e),Wn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),e("lineNumbers",!1,function(e){ui(e.options),ba(e)},!0),e("firstLineNumber",1,ba,!0),e("lineNumberFormatter",function(e){return e},ba,!0),e("showCursorWhenSelecting",!1,sn,!0),e("resetSelectionOnContextMenu",!0),e("lineWiseCopyCut",!0),e("pasteLinesPerSelection",!0),e("readOnly",!1,function(e,t){"nocursor"==t&&(vn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),e("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),e("dragDrop",!0,wa),e("allowDropFileTypes",null),e("cursorBlinkRate",530),e("cursorScrollMargin",0),e("cursorHeight",1,sn,!0),e("singleCursorHeightPerLine",!0,sn,!0),e("workTime",100),e("workDelay",100),e("flattenSpans",!0,Ti,!0),e("addModeClass",!1,Ti,!0),e("pollInterval",100),e("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),e("historyEventDelay",1250),e("viewportMargin",10,function(e){return e.refresh()},!0),e("maxHighlightLength",1e4,Ti,!0),e("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),e("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),e("autofocus",null),e("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0)}(ka),Ba=(ja=ka).optionHandlers,Ra=ja.helpers={},ja.prototype={constructor:ja,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var r=this.options,n=r[e];r[e]==t&&"mode"!=e||(r[e]=t,Ba.hasOwnProperty(e)&&Gn(this,Ba[e])(this,t,n),it(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Uo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;r<t.length;++r)if(t[r]==e||t[r].name==e)return t.splice(r,1),!0},addOverlay:$n(function(e,t){var r=e.token?e:ja.getMode(this.options,e);if(r.startState)throw new Error("Overlays may not be stateful.");!function(e,t,r){for(var n=0,i=r(t);n<e.length&&r(e[n])<=i;)n++;e.splice(n,0,t)}(this.state.overlays,{mode:r,modeSpec:e,opaque:t&&t.opaque,priority:t&&t.priority||0},function(e){return e.priority}),this.state.modeGen++,Yn(this)}),removeOverlay:$n(function(e){for(var t=this.state.overlays,r=0;r<t.length;++r){var n=t[r].modeSpec;if(n==e||"string"==typeof e&&n.name==e)return t.splice(r,1),this.state.modeGen++,void Yn(this)}}),indentLine:$n(function(e,t,r){"string"!=typeof t&&"number"!=typeof t&&(t=null==t?this.options.smartIndent?"smart":"prev":t?"add":"subtract"),pe(this.doc,e)&&Sa(this,e,t,r)}),indentSelection:$n(function(e){for(var t=this.doc.sel.ranges,r=-1,n=0;n<t.length;n++){var i=t[n];if(i.empty())i.head.line>r&&(Sa(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&Tn(this));else{var o=i.from(),a=i.to(),l=Math.max(r,o.line);r=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;s<r;++s)Sa(this,s,e);var c=this.doc.sel.ranges;0==o.ch&&t.length==c.length&&0<c[n].from().ch&&Ui(this.doc,n,new vi(o,c[n].to()),q)}}}),getTokenAt:function(e,t){return Ut(this,e,t)},getLineTokens:function(e,t){return Ut(this,ge(e),t,!0)},getTokenTypeAt:function(e){e=Ce(this.doc,e);var t,r=Ht(this,se(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var a=n+i>>1;if((a?r[2*a-1]:0)>=o)i=a;else{if(!(r[2*a+1]<o)){t=r[2*a+2];break}n=a+1}}var l=t?t.indexOf("overlay "):-1;return l<0?t:0==l?null:t.slice(0,l-1)},getModeAt:function(e){var t=this.doc.mode;return t.innerMode?ja.innerMode(t,this.getTokenAt(e).state).mode:t},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var r=[];if(!Ra.hasOwnProperty(t))return r;var n=Ra[t],i=this.getModeAt(e);if("string"==typeof i[t])n[i[t]]&&r.push(n[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var a=n[i[t][o]];a&&r.push(a)}else i.helperType&&n[i.helperType]?r.push(n[i.helperType]):n[i.name]&&r.push(n[i.name]);for(var l=0;l<n._global.length;l++){var s=n._global[l];s.pred(i,this)&&-1==j(r,s.val)&&r.push(s.val)}return r},getStateAfter:function(e,t){var r=this.doc;return It(this,(e=ke(r,null==e?r.first+r.size-1:e))+1,t).state},cursorCoords:function(e,t){var r=this.doc.sel.primary();return Vr(this,null==e?r.head:"object"==typeof e?Ce(this.doc,e):e?r.from():r.to(),t||"page")},charCoords:function(e,t){return Ur(this,Ce(this.doc,e),t||"page")},coordsChar:function(e,t){return $r(this,(e=qr(this,e,t||"page")).left,e.top)},lineAtHeight:function(e,t){return e=qr(this,{top:e,left:0},t||"page").top,he(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,r){var n,i=!1;if("number"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:o<e&&(e=o,i=!0),n=se(this.doc,e)}else n=e;return Rr(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-Ge(n):0)},defaultTextHeight:function(){return Jr(this.display)},defaultCharWidth:function(){return en(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,a,l,s=this.display,c=(e=Vr(this,Ce(this.doc,e))).bottom,u=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),s.sizer.appendChild(t),"over"==n)c=e.top;else if("above"==n||"near"==n){var d=Math.max(s.wrapper.clientHeight,this.doc.height),f=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>d)&&e.top>t.offsetHeight?c=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=d&&(c=e.bottom),u+t.offsetWidth>f&&(u=f-t.offsetWidth)}t.style.top=c+"px",t.style.left=t.style.right="","right"==i?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),r&&(o=this,a={left:u,top:c,right:u+t.offsetWidth,bottom:c+t.offsetHeight},null!=(l=Cn(o,a)).scrollTop&&Nn(o,l.scrollTop),null!=l.scrollLeft&&Dn(o,l.scrollLeft))},triggerOnKeyDown:$n(ia),triggerOnKeyPress:$n(aa),triggerOnKeyUp:oa,triggerOnMouseDown:$n(ua),execCommand:function(e){if(Xo.hasOwnProperty(e))return Xo[e].call(null,this)},triggerElectric:$n(function(e){Na(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=Ce(this.doc,e),a=0;a<t&&!(o=_a(this.doc,o,i,r,n)).hitSide;++a);return o},moveH:$n(function(t,r){var n=this;this.extendSelectionsBy(function(e){return n.display.shift||n.doc.extend||e.empty()?_a(n.doc,e.head,t,r,n.options.rtlMoveVisually):t<0?e.from():e.to()},V)}),deleteH:$n(function(r,n){var e=this.doc.sel,i=this.doc;e.somethingSelected()?i.replaceSelection("",null,"+delete"):Vo(this,function(e){var t=_a(i,e.head,r,n,!1);return r<0?{from:t,to:e.head}:{from:e.head,to:t}})}),findPosV:function(e,t,r,n){var i=1,o=n;t<0&&(i=-1,t=-t);for(var a=Ce(this.doc,e),l=0;l<t;++l){var s=Vr(this,a,"div");if(null==o?o=s.left:s.left=o,(a=Fa(this,s,i,r)).hitSide)break}return a},moveV:$n(function(n,i){var o=this,a=this.doc,l=[],s=!this.display.shift&&!a.extend&&a.sel.somethingSelected();if(a.extendSelectionsBy(function(e){if(s)return n<0?e.from():e.to();var t=Vr(o,e.head,"div");null!=e.goalColumn&&(t.left=e.goalColumn),l.push(t.left);var r=Fa(o,t,n,i);return"page"==i&&e==a.sel.primary()&&Sn(o,Ur(o,r,"div").top-t.top),r},V),l.length)for(var e=0;e<a.sel.ranges.length;e++)a.sel.ranges[e].goalColumn=l[e]}),findWordAt:function(e){var t=se(this.doc,e.line).text,r=e.ch,n=e.ch;if(t){var i=this.getHelper(e,"wordChars");"before"!=e.sticky&&n!=t.length||!r?++n:--r;for(var o=t.charAt(r),a=te(o,i)?function(e){return te(e,i)}:/\s/.test(o)?function(e){return/\s/.test(e)}:function(e){return!/\s/.test(e)&&!te(e)};0<r&&a(t.charAt(r-1));)--r;for(;n<t.length&&a(t.charAt(n));)++n}return new vi(ge(e.line,r),ge(e.line,n))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?_(this.display.cursorDiv,"CodeMirror-overwrite"):L(this.display.cursorDiv,"CodeMirror-overwrite"),it(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==P()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:$n(function(e,t){Ln(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Sr(this)-this.display.barHeight,width:e.scrollWidth-Sr(this)-this.display.barWidth,clientHeight:Lr(this),clientWidth:Tr(this)}},scrollIntoView:$n(function(e,t){var r,n;null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):"number"==typeof e?e={from:ge(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?(n=e,Mn(r=this),r.curOp.scrollToPos=n):On(this,e.from,e.to,e.margin)}),setSize:$n(function(e,t){var r=this,n=function(e){return"number"==typeof e||/^\d+$/.test(String(e))?e+"px":e};null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&Er(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){Zn(r,i,"widget");break}++i}),this.curOp.forceUpdate=!0,it(this,"refresh",this)}),operation:function(e){return Kn(this,e)},startOperation:function(){return jn(this)},endOperation:function(){return Bn(this)},refresh:$n(function(){var e=this.display.cachedTextHeight;Yn(this),this.curOp.forceUpdate=!0,Hr(this),Ln(this,this.doc.scrollLeft,this.doc.scrollTop),li(this),(null==e||.5<Math.abs(e-Jr(this.display)))&&on(this),it(this,"refresh",this)}),swapDoc:$n(function(e){var t=this.doc;return t.cm=null,Ni(this,e),Hr(this),this.display.input.reset(),Ln(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,lr(this,"swapDoc",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},st(ja),ja.registerHelper=function(e,t,r){Ra.hasOwnProperty(e)||(Ra[e]=ja[e]={_global:[]}),Ra[e][t]=r},ja.registerGlobalHelper=function(e,t,r,n){ja.registerHelper(e,t,n),Ra[e]._global.push({pred:r,val:n})};var Ua,Va="iter insert remove copy getEditor constructor".split(" ");for(var Ka in To.prototype)To.prototype.hasOwnProperty(Ka)&&j(Va,Ka)<0&&(ka.prototype[Ka]=function(e){return function(){return e.apply(this.doc,arguments)}}(To.prototype[Ka]));return st(To),ka.inputStyles={textarea:qa,contenteditable:Wa},ka.defineMode=function(e){ka.defaults.mode||"null"==e||(ka.defaults.mode=e),function(e,t){2<arguments.length&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Tt[e]=t}.apply(this,arguments)},ka.defineMIME=function(e,t){Lt[e]=t},ka.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),ka.defineMIME("text/plain","null"),ka.defineExtension=function(e,t){ka.prototype[e]=t},ka.defineDocExtension=function(e,t){To.prototype[e]=t},ka.fromTextArea=function(t,e){if((e=e?E(e):{}).value=t.value,!e.tabindex&&t.tabIndex&&(e.tabindex=t.tabIndex),!e.placeholder&&t.placeholder&&(e.placeholder=t.placeholder),null==e.autofocus){var r=P();e.autofocus=r==t||null!=t.getAttribute("autofocus")&&r==document.body}function n(){t.value=l.getValue()}var i;if(t.form&&(tt(t.form,"submit",n),!e.leaveSubmitMethodAlone)){var o=t.form;i=o.submit;try{var a=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=a}}catch(e){}}e.finishInit=function(e){e.save=n,e.getTextArea=function(){return t},e.toTextArea=function(){e.toTextArea=isNaN,n(),t.parentNode.removeChild(e.getWrapperElement()),t.style.display="",t.form&&(nt(t.form,"submit",n),"function"==typeof t.form.submit&&(t.form.submit=i))}},t.style.display="none";var l=ka(function(e){return t.parentNode.insertBefore(e,t.nextSibling)},e);return l},(Ua=ka).off=nt,Ua.on=tt,Ua.wheelEventPixels=pi,Ua.Doc=To,Ua.splitLines=xt,Ua.countColumn=H,Ua.findColumn=K,Ua.isWordChar=ee,Ua.Pass=R,Ua.signal=it,Ua.Line=Gt,Ua.changeEnd=wi,Ua.scrollbarModel=En,Ua.Pos=ge,Ua.cmpPos=ve,Ua.modes=Tt,Ua.mimeModes=Lt,Ua.resolveMode=Mt,Ua.getMode=Ot,Ua.modeExtensions=Nt,Ua.extendMode=At,Ua.copyState=Dt,Ua.startState=_t,Ua.innerMode=Pt,Ua.commands=Xo,Ua.keyMap=Eo,Ua.keyName=qo,Ua.isModifierKey=Bo,Ua.lookupKey=jo,Ua.normalizeKeyMap=Io,Ua.StringStream=Ft,Ua.SharedTextMarker=xo,Ua.TextMarker=bo,Ua.LineWidget=go,Ua.e_preventDefault=ct,Ua.e_stopPropagation=ut,Ua.e_stop=ft,Ua.addClass=_,Ua.contains=D,Ua.rmClass=L,Ua.keyNames=_o,ka.version="5.39.2",ka},"object"==typeof r&&void 0!==t?t.exports=i():"function"==typeof o&&o.amd?o(i):n.CodeMirror=i()},{}],15:[function(e,t,r){var n;n=function(A){"use strict";function e(e){for(var t={},r=0;r<e.length;++r)t[e[r].toLowerCase()]=!0;return t}A.defineMode("css",function(e,t){var r=t.inline;t.propertyKeywords||(t=A.resolveMode("text/css"));var n,i,o=e.indentUnit,a=t.tokenHooks,l=t.documentTypes||{},s=t.mediaTypes||{},c=t.mediaFeatures||{},u=t.mediaValueKeywords||{},d=t.propertyKeywords||{},f=t.nonStandardPropertyKeywords||{},h=t.fontProperties||{},p=t.counterDescriptors||{},m=t.colorKeywords||{},g=t.valueKeywords||{},v=t.allowNested,y=t.lineComment,b=!0===t.supportsAtComponent;function w(e,t){return n=t,e}function x(i){return function(e,t){for(var r,n=!1;null!=(r=e.next());){if(r==i&&!n){")"==i&&e.backUp(1);break}n=!n&&"\\"==r}return(r==i||!n&&")"!=i)&&(t.tokenize=null),w("string","string")}}function k(e,t){return e.next(),e.match(/\s*[\"\')]/,!1)?t.tokenize=null:t.tokenize=x(")"),w(null,"(")}function C(e,t,r){this.type=e,this.indent=t,this.prev=r}function S(e,t,r,n){return e.context=new C(r,t.indentation()+(!1===n?0:o),e.context),r}function T(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function L(e,t,r){return N[r.context.type](e,t,r)}function M(e,t,r,n){for(var i=n||1;0<i;i--)r.context=r.context.prev;return L(e,t,r)}function O(e){var t=e.current().toLowerCase();i=g.hasOwnProperty(t)?"atom":m.hasOwnProperty(t)?"keyword":"variable"}var N={top:function(e,t,r){if("{"==e)return S(r,t,"block");if("}"==e&&r.context.prev)return T(r);if(b&&/@component/i.test(e))return S(r,t,"atComponentBlock");if(/^@(-moz-)?document$/i.test(e))return S(r,t,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return S(r,t,"atBlock");if(/^@(font-face|counter-style)/i.test(e))return r.stateArg=e,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return"keyframes";if(e&&"@"==e.charAt(0))return S(r,t,"at");if("hash"==e)i="builtin";else if("word"==e)i="tag";else{if("variable-definition"==e)return"maybeprop";if("interpolation"==e)return S(r,t,"interpolation");if(":"==e)return"pseudo";if(v&&"("==e)return S(r,t,"parens")}return r.context.type},block:function(e,t,r){if("word"==e){var n=t.current().toLowerCase();return d.hasOwnProperty(n)?(i="property","maybeprop"):f.hasOwnProperty(n)?(i="string-2","maybeprop"):v?(i=t.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(i+=" error","maybeprop")}return"meta"==e?"block":v||"hash"!=e&&"qualifier"!=e?N.top(e,t,r):(i="error","block")},maybeprop:function(e,t,r){return":"==e?S(r,t,"prop"):L(e,t,r)},prop:function(e,t,r){if(";"==e)return T(r);if("{"==e&&v)return S(r,t,"propBlock");if("}"==e||"{"==e)return M(e,t,r);if("("==e)return S(r,t,"parens");if("hash"!=e||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())){if("word"==e)O(t);else if("interpolation"==e)return S(r,t,"interpolation")}else i+=" error";return"prop"},propBlock:function(e,t,r){return"}"==e?T(r):"word"==e?(i="property","maybeprop"):r.context.type},parens:function(e,t,r){return"{"==e||"}"==e?M(e,t,r):")"==e?T(r):"("==e?S(r,t,"parens"):"interpolation"==e?S(r,t,"interpolation"):("word"==e&&O(t),"parens")},pseudo:function(e,t,r){return"meta"==e?"pseudo":"word"==e?(i="variable-3",r.context.type):L(e,t,r)},documentTypes:function(e,t,r){return"word"==e&&l.hasOwnProperty(t.current())?(i="tag",r.context.type):N.atBlock(e,t,r)},atBlock:function(e,t,r){if("("==e)return S(r,t,"atBlock_parens");if("}"==e||";"==e)return M(e,t,r);if("{"==e)return T(r)&&S(r,t,v?"block":"top");if("interpolation"==e)return S(r,t,"interpolation");if("word"==e){var n=t.current().toLowerCase();i="only"==n||"not"==n||"and"==n||"or"==n?"keyword":s.hasOwnProperty(n)?"attribute":c.hasOwnProperty(n)?"property":u.hasOwnProperty(n)?"keyword":d.hasOwnProperty(n)?"property":f.hasOwnProperty(n)?"string-2":g.hasOwnProperty(n)?"atom":m.hasOwnProperty(n)?"keyword":"error"}return r.context.type},atComponentBlock:function(e,t,r){return"}"==e?M(e,t,r):"{"==e?T(r)&&S(r,t,v?"block":"top",!1):("word"==e&&(i="error"),r.context.type)},atBlock_parens:function(e,t,r){return")"==e?T(r):"{"==e||"}"==e?M(e,t,r,2):N.atBlock(e,t,r)},restricted_atBlock_before:function(e,t,r){return"{"==e?S(r,t,"restricted_atBlock"):"word"==e&&"@counter-style"==r.stateArg?(i="variable","restricted_atBlock_before"):L(e,t,r)},restricted_atBlock:function(e,t,r){return"}"==e?(r.stateArg=null,T(r)):"word"==e?(i="@font-face"==r.stateArg&&!h.hasOwnProperty(t.current().toLowerCase())||"@counter-style"==r.stateArg&&!p.hasOwnProperty(t.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(e,t,r){return"word"==e?(i="variable","keyframes"):"{"==e?S(r,t,"top"):L(e,t,r)},at:function(e,t,r){return";"==e?T(r):"{"==e||"}"==e?M(e,t,r):("word"==e?i="tag":"hash"==e&&(i="builtin"),"at")},interpolation:function(e,t,r){return"}"==e?T(r):"{"==e||";"==e?M(e,t,r):("word"==e?i="variable":"variable"!=e&&"("!=e&&")"!=e&&(i="error"),"interpolation")}};return{startState:function(e){return{tokenize:null,state:r?"block":"top",stateArg:null,context:new C(r?"block":"top",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var r=(t.tokenize||function(e,t){var r=e.next();if(a[r]){var n=a[r](e,t);if(!1!==n)return n}return"@"==r?(e.eatWhile(/[\w\\\-]/),w("def",e.current())):"="==r||("~"==r||"|"==r)&&e.eat("=")?w(null,"compare"):'"'==r||"'"==r?(t.tokenize=x(r),t.tokenize(e,t)):"#"==r?(e.eatWhile(/[\w\\\-]/),w("atom","hash")):"!"==r?(e.match(/^\s*\w*/),w("keyword","important")):/\d/.test(r)||"."==r&&e.eat(/\d/)?(e.eatWhile(/[\w.%]/),w("number","unit")):"-"!==r?/[,+>*\/]/.test(r)?w(null,"select-op"):"."==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?w("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(r)?w(null,r):("u"==r||"U"==r)&&e.match(/rl(-prefix)?\(/i)||("d"==r||"D"==r)&&e.match("omain(",!0,!0)||("r"==r||"R"==r)&&e.match("egexp(",!0,!0)?(e.backUp(1),t.tokenize=k,w("property","word")):/[\w\\\-]/.test(r)?(e.eatWhile(/[\w\\\-]/),w("property","word")):w(null,null):/[\d.]/.test(e.peek())?(e.eatWhile(/[\w.%]/),w("number","unit")):e.match(/^-[\w\\\-]+/)?(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?w("variable-2","variable-definition"):w("variable-2","variable")):e.match(/^\w+-/)?w("meta","meta"):void 0})(e,t);return r&&"object"==typeof r&&(n=r[1],r=r[0]),i=r,"comment"!=n&&(t.state=N[t.state](n,e,t)),i},indent:function(e,t){var r=e.context,n=t&&t.charAt(0),i=r.indent;return"prop"!=r.type||"}"!=n&&")"!=n||(r=r.prev),r.prev&&("}"!=n||"block"!=r.type&&"top"!=r.type&&"interpolation"!=r.type&&"restricted_atBlock"!=r.type?(")"!=n||"parens"!=r.type&&"atBlock_parens"!=r.type)&&("{"!=n||"at"!=r.type&&"atBlock"!=r.type)||(i=Math.max(0,r.indent-o)):i=(r=r.prev).indent),i},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:y,fold:"brace"}});var t=["domain","regexp","url","url-prefix"],r=e(t),n=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],i=e(n),o=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],a=e(o),l=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],s=e(l),c=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],u=e(c),d=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],f=e(d),h=e(["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]),p=e(["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"]),m=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],g=e(m),v=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],y=e(v),b=t.concat(n).concat(o).concat(l).concat(c).concat(d).concat(m).concat(v);function w(e,t){for(var r,n=!1;null!=(r=e.next());){if(n&&"/"==r){t.tokenize=null;break}n="*"==r}return["comment","comment"]}A.registerHelper("hintWords","css",b),A.defineMIME("text/css",{documentTypes:r,mediaTypes:i,mediaFeatures:a,mediaValueKeywords:s,propertyKeywords:u,nonStandardPropertyKeywords:f,fontProperties:h,counterDescriptors:p,colorKeywords:g,valueKeywords:y,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=w)(e,t)}},name:"css"}),A.defineMIME("text/x-scss",{mediaTypes:i,mediaFeatures:a,mediaValueKeywords:s,propertyKeywords:u,nonStandardPropertyKeywords:f,colorKeywords:g,valueKeywords:y,fontProperties:h,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=w)(e,t):["operator","operator"]},":":function(e){return!!e.match(/\s*\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\w-]+/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(e){return!!e.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),A.defineMIME("text/x-less",{mediaTypes:i,mediaFeatures:a,mediaValueKeywords:s,propertyKeywords:u,nonStandardPropertyKeywords:f,colorKeywords:g,valueKeywords:y,fontProperties:h,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=w)(e,t):["operator","operator"]},"@":function(e){return e.eat("{")?[null,"interpolation"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),A.defineMIME("text/x-gss",{documentTypes:r,mediaTypes:i,mediaFeatures:a,propertyKeywords:u,nonStandardPropertyKeywords:f,fontProperties:h,counterDescriptors:p,colorKeywords:g,valueKeywords:y,supportsAtComponent:!0,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=w)(e,t)}},name:"css",helperType:"gss"})},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror")):"function"==typeof o&&o.amd?o(["../../lib/codemirror"],n):n(CodeMirror)},{"../../lib/codemirror":14}],16:[function(e,t,r){var n;n=function(p){"use strict";var i={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};var o={};function m(e,t){var r,n=e.match(o[r=t]||(o[r]=new RegExp("\\s+"+r+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*")));return n?/^\s*(.*?)\s*$/.exec(n[2])[1]:""}function g(e,t){return new RegExp((t?"^":"")+"</s*"+e+"s*>","i")}function a(e,t){for(var r in e)for(var n=t[r]||(t[r]=[]),i=e[r],o=i.length-1;0<=o;o--)n.unshift(i[o])}p.defineMode("htmlmixed",function(u,e){var d=p.getMode(u,{name:"xml",htmlMode:!0,multilineTagIndentFactor:e.multilineTagIndentFactor,multilineTagIndentPastTag:e.multilineTagIndentPastTag}),f={},t=e&&e.tags,r=e&&e.scriptTypes;if(a(i,f),t&&a(t,f),r)for(var n=r.length-1;0<=n;n--)f.script.unshift(["type",r[n].matches,r[n].mode]);function h(e,t){var r,n=d.token(e,t.htmlState),i=/\btag\b/.test(n);if(i&&!/[<>\s\/]/.test(e.current())&&(r=t.htmlState.tagName&&t.htmlState.tagName.toLowerCase())&&f.hasOwnProperty(r))t.inTag=r+" ";else if(t.inTag&&i&&/>$/.test(e.current())){var o=/^([\S]+) (.*)/.exec(t.inTag);t.inTag=null;var a=">"==e.current()&&function(e,t){for(var r=0;r<e.length;r++){var n=e[r];if(!n[0]||n[1].test(m(t,n[0])))return n[2]}}(f[o[1]],o[2]),l=p.getMode(u,a),s=g(o[1],!0),c=g(o[1],!1);t.token=function(e,t){return e.match(s,!1)?(t.token=h,t.localState=t.localMode=null,null):(r=e,n=c,i=t.localMode.token(e,t.localState),o=r.current(),-1<(a=o.search(n))?r.backUp(o.length-a):o.match(/<\/?$/)&&(r.backUp(o.length),r.match(n,!1)||r.match(o)),i);var r,n,i,o,a},t.localMode=l,t.localState=p.startState(l,d.indent(t.htmlState,""))}else t.inTag&&(t.inTag+=e.current(),e.eol()&&(t.inTag+=" "));return n}return{startState:function(){return{token:h,inTag:null,localMode:null,localState:null,htmlState:p.startState(d)}},copyState:function(e){var t;return e.localState&&(t=p.copyState(e.localMode,e.localState)),{token:e.token,inTag:e.inTag,localMode:e.localMode,localState:t,htmlState:p.copyState(d,e.htmlState)}},token:function(e,t){return t.token(e,t)},indent:function(e,t,r){return!e.localMode||/^\s*<\//.test(t)?d.indent(e.htmlState,t):e.localMode.indent?e.localMode.indent(e.localState,t,r):p.Pass},innerMode:function(e){return{state:e.localState||e.htmlState,mode:e.localMode||d}}}},"xml","javascript","css"),p.defineMIME("text/html","htmlmixed")},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror"),e("../xml/xml"),e("../javascript/javascript"),e("../css/css")):"function"==typeof o&&o.amd?o(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],n):n(CodeMirror)},{"../../lib/codemirror":14,"../css/css":15,"../javascript/javascript":17,"../xml/xml":18}],17:[function(e,t,r){var n;n=function(Ke){"use strict";Ke.defineMode("javascript",function(e,d){var n,i,f=e.indentUnit,h=d.statementIndent,a=d.jsonld,l=d.json||a,c=d.typescript,u=d.wordCharacters||/[\w$\xa1-\uffff]/,s=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),r=e("keyword b"),n=e("keyword c"),i=e("keyword d"),o=e("operator"),a={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:i,break:i,continue:i,new:e("new"),delete:n,void:n,throw:n,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:o,typeof:o,instanceof:o,true:a,false:a,null:a,undefined:a,NaN:a,Infinity:a,this:e("this"),class:e("class"),super:e("atom"),yield:n,export:e("export"),import:e("import"),extends:n,await:n}}(),p=/[+\-*&%=<>!?|~^@]/,m=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function g(e,t,r){return n=e,i=r,t}function v(e,t){var i,r=e.next();if('"'==r||"'"==r)return t.tokenize=(i=r,function(e,t){var r,n=!1;if(a&&"@"==e.peek()&&e.match(m))return t.tokenize=v,g("jsonld-keyword","meta");for(;null!=(r=e.next())&&(r!=i||n);)n=!n&&"\\"==r;return n||(t.tokenize=v),g("string","string")}),t.tokenize(e,t);if("."==r&&e.match(/^\d+(?:[eE][+\-]?\d+)?/))return g("number","number");if("."==r&&e.match(".."))return g("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(r))return g(r);if("="==r&&e.eat(">"))return g("=>","operator");if("0"==r&&e.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i))return g("number","number");if(/\d/.test(r))return e.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/),g("number","number");if("/"==r)return e.eat("*")?(t.tokenize=y)(e,t):e.eat("/")?(e.skipToEnd(),g("comment","comment")):Ve(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),g("regexp","string-2")):(e.eat("="),g("operator","operator",e.current()));if("`"==r)return(t.tokenize=b)(e,t);if("#"==r)return e.skipToEnd(),g("error","error");if(p.test(r))return">"==r&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=r&&"="!=r||e.eat("="):/[<>*+\-]/.test(r)&&(e.eat(r),">"==r&&e.eat(r))),g("operator","operator",e.current());if(u.test(r)){e.eatWhile(u);var n=e.current();if("."!=t.lastType){if(s.propertyIsEnumerable(n)){var o=s[n];return g(o.type,o.style,n)}if("async"==n&&e.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,!1))return g("async","keyword",n)}return g("variable","variable",n)}}function y(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=v;break}n="*"==r}return g("comment","comment")}function b(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=v;break}n=!n&&"\\"==r}return g("quasi","string-2",e.current())}var w="([{}])";function o(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf("=>",e.start);if(!(r<0)){if(c){var n=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var i=0,o=!1,a=r-1;0<=a;--a){var l=e.string.charAt(a),s=w.indexOf(l);if(0<=s&&s<3){if(!i){++a;break}if(0==--i){"("==l&&(o=!0);break}}else if(3<=s&&s<6)++i;else if(u.test(l))o=!0;else{if(/["'\/]/.test(l))return;if(o&&!i){++a;break}}}o&&!i&&(t.fatArrowAt=a)}}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function k(e,t,r,n,i,o){this.indented=e,this.column=t,this.type=r,this.prev=i,this.info=o,null!=n&&(this.align=n)}function C(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var S={state:null,column:null,marked:null,cc:null};function T(){for(var e=arguments.length-1;0<=e;e--)S.cc.push(arguments[e])}function L(){return T.apply(null,arguments),!0}function M(e,t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}function r(e){var t=S.state;if(S.marked="def",t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var r=function e(t,r){{if(r){if(r.block){var n=e(t,r.prev);return n?n==r.prev?r:new N(n,r.vars,!0):null}return M(t,r.vars)?r:new N(r.prev,new A(t,r.vars),!1)}return null}}(e,t.context);if(null!=r)return void(t.context=r)}else if(!M(e,t.localVars))return void(t.localVars=new A(e,t.localVars));d.globalVars&&!M(e,t.globalVars)&&(t.globalVars=new A(e,t.globalVars))}function O(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function N(e,t,r){this.prev=e,this.vars=t,this.block=r}function A(e,t){this.name=e,this.next=t}var t=new A("this",new A("arguments",null));function D(){S.state.context=new N(S.state.context,S.state.localVars,!1),S.state.localVars=t}function P(){S.state.context=new N(S.state.context,S.state.localVars,!0),S.state.localVars=null}function _(){S.state.localVars=S.state.context.vars,S.state.context=S.state.context.prev}function F(n,i){var e=function(){var e=S.state,t=e.indented;if("stat"==e.lexical.type)t=e.lexical.indented;else for(var r=e.lexical;r&&")"==r.type&&r.align;r=r.prev)t=r.indented;e.lexical=new k(t,S.stream.column(),n,null,e.lexical,i)};return e.lex=!0,e}function W(){var e=S.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function z(r){return function e(t){return t==r?L():";"==r||"}"==t||")"==t||"]"==t?T():L(e)}}function E(e,t){return"var"==e?L(F("vardef",t),ve,z(";"),W):"keyword a"==e?L(F("form"),B,E,W):"keyword b"==e?L(F("form"),E,W):"keyword d"==e?S.stream.match(/^\s*$/,!1)?L():L(F("stat"),q,z(";"),W):"debugger"==e?L(z(";")):"{"==e?L(F("}"),P,oe,W,_):";"==e?L():"if"==e?("else"==S.state.lexical.info&&S.state.cc[S.state.cc.length-1]==W&&S.state.cc.pop()(),L(F("form"),B,E,W,ke)):"function"==e?L(Oe):"for"==e?L(F("form"),Ce,E,W):"class"==e||c&&"interface"==t?(S.marked="keyword",L(F("form"),De,W)):"variable"==e?c&&"declare"==t?(S.marked="keyword",L(E)):c&&("module"==t||"enum"==t||"type"==t)&&S.stream.match(/^\s*\w/,!1)?(S.marked="keyword","enum"==t?L(qe):"type"==t?L(ce,z("operator"),ce,z(";")):L(F("form"),ye,z("{"),F("}"),oe,W,W)):c&&"namespace"==t?(S.marked="keyword",L(F("form"),I,oe,W)):c&&"abstract"==t?(S.marked="keyword",L(E)):L(F("stat"),Q):"switch"==e?L(F("form"),B,z("{"),F("}","switch"),P,oe,W,W,_):"case"==e?L(I,z(":")):"default"==e?L(z(":")):"catch"==e?L(F("form"),D,H,E,W,_):"export"==e?L(F("stat"),We,W):"import"==e?L(F("stat"),Ee,W):"async"==e?L(E):"@"==t?L(I,E):T(F("stat"),I,z(";"),W)}function H(e){if("("==e)return L(Ne,z(")"))}function I(e,t){return R(e,t,!1)}function j(e,t){return R(e,t,!0)}function B(e){return"("!=e?T():L(F(")"),I,z(")"),W)}function R(e,t,r){if(S.state.fatArrowAt==S.stream.start){var n=r?X:$;if("("==e)return L(D,F(")"),ne(Ne,")"),W,z("=>"),n,_);if("variable"==e)return T(D,ye,z("=>"),n,_)}var i,o=r?V:U;return x.hasOwnProperty(e)?L(o):"function"==e?L(Oe,o):"class"==e||c&&"interface"==t?(S.marked="keyword",L(F("form"),Ae,W)):"keyword c"==e||"async"==e?L(r?j:I):"("==e?L(F(")"),q,z(")"),W,o):"operator"==e||"spread"==e?L(r?j:I):"["==e?L(F("]"),Re,W,o):"{"==e?ie(ee,"}",null,o):"quasi"==e?T(K,o):"new"==e?L((i=r,function(e){return"."==e?L(i?Z:Y):"variable"==e&&c?L(pe,i?V:U):T(i?j:I)})):"import"==e?L(I):L()}function q(e){return e.match(/[;\}\)\],]/)?T():T(I)}function U(e,t){return","==e?L(I):V(e,t,!1)}function V(e,t,r){var n=0==r?U:V,i=0==r?I:j;return"=>"==e?L(D,r?X:$,_):"operator"==e?/\+\+|--/.test(t)||c&&"!"==t?L(n):c&&"<"==t&&S.stream.match(/^([^>]|<.*?>)*>\s*\(/,!1)?L(F(">"),ne(ce,">"),W,n):"?"==t?L(I,z(":"),i):L(i):"quasi"==e?T(K,n):";"!=e?"("==e?ie(j,")","call",n):"."==e?L(J,n):"["==e?L(F("]"),q,z("]"),W,n):c&&"as"==t?(S.marked="keyword",L(ce,n)):"regexp"==e?(S.state.lastType=S.marked="operator",S.stream.backUp(S.stream.pos-S.stream.start-1),L(i)):void 0:void 0}function K(e,t){return"quasi"!=e?T():"${"!=t.slice(t.length-2)?L(K):L(I,G)}function G(e){if("}"==e)return S.marked="string-2",S.state.tokenize=b,L(K)}function $(e){return o(S.stream,S.state),T("{"==e?E:I)}function X(e){return o(S.stream,S.state),T("{"==e?E:j)}function Y(e,t){if("target"==t)return S.marked="keyword",L(U)}function Z(e,t){if("target"==t)return S.marked="keyword",L(V)}function Q(e){return":"==e?L(W,E):T(U,z(";"),W)}function J(e){if("variable"==e)return S.marked="property",L()}function ee(e,t){if("async"==e)return S.marked="property",L(ee);if("variable"==e||"keyword"==S.style){return S.marked="property","get"==t||"set"==t?L(te):(c&&S.state.fatArrowAt==S.stream.start&&(r=S.stream.match(/^\s*:\s*/,!1))&&(S.state.fatArrowAt=S.stream.pos+r[0].length),L(re));var r}else{if("number"==e||"string"==e)return S.marked=a?"property":S.style+" property",L(re);if("jsonld-keyword"==e)return L(re);if(c&&O(t))return S.marked="keyword",L(ee);if("["==e)return L(I,ae,z("]"),re);if("spread"==e)return L(j,re);if("*"==t)return S.marked="keyword",L(ee);if(":"==e)return T(re)}}function te(e){return"variable"!=e?T(re):(S.marked="property",L(Oe))}function re(e){return":"==e?L(j):"("==e?T(Oe):void 0}function ne(n,i,o){function a(e,t){if(o?-1<o.indexOf(e):","==e){var r=S.state.lexical;return"call"==r.info&&(r.pos=(r.pos||0)+1),L(function(e,t){return e==i||t==i?T():T(n)},a)}return e==i||t==i?L():L(z(i))}return function(e,t){return e==i||t==i?L():T(n,a)}}function ie(e,t,r){for(var n=3;n<arguments.length;n++)S.cc.push(arguments[n]);return L(F(t,r),ne(e,t),W)}function oe(e){return"}"==e?L():T(E,oe)}function ae(e,t){if(c){if(":"==e)return L(ce);if("?"==t)return L(ae)}}function le(e){if(c&&":"==e)return S.stream.match(/^\s*\w+\s+is\b/,!1)?L(I,se,ce):L(ce)}function se(e,t){if("is"==t)return S.marked="keyword",L()}function ce(e,t){return"keyof"==t||"typeof"==t?(S.marked="keyword",L("keyof"==t?ce:j)):"variable"==e||"void"==t?(S.marked="type",L(he)):"string"==e||"number"==e||"atom"==e?L(he):"["==e?L(F("]"),ne(ce,"]",","),W,he):"{"==e?L(F("}"),ne(de,"}",",;"),W,he):"("==e?L(ne(fe,")"),ue):"<"==e?L(ne(ce,">"),ce):void 0}function ue(e){if("=>"==e)return L(ce)}function de(e,t){return"variable"==e||"keyword"==S.style?(S.marked="property",L(de)):"?"==t?L(de):":"==e?L(ce):"["==e?L(I,ae,z("]"),de):void 0}function fe(e,t){return"variable"==e&&S.stream.match(/^\s*[?:]/,!1)||"?"==t?L(fe):":"==e?L(ce):T(ce)}function he(e,t){return"<"==t?L(F(">"),ne(ce,">"),W,he):"|"==t||"."==e||"&"==t?L(ce):"["==e?L(z("]"),he):"extends"==t||"implements"==t?(S.marked="keyword",L(ce)):void 0}function pe(e,t){if("<"==t)return L(F(">"),ne(ce,">"),W,he)}function me(){return T(ce,ge)}function ge(e,t){if("="==t)return L(ce)}function ve(e,t){return"enum"==t?(S.marked="keyword",L(qe)):T(ye,ae,we,xe)}function ye(e,t){return c&&O(t)?(S.marked="keyword",L(ye)):"variable"==e?(r(t),L()):"spread"==e?L(ye):"["==e?ie(ye,"]"):"{"==e?ie(be,"}"):void 0}function be(e,t){return"variable"!=e||S.stream.match(/^\s*:/,!1)?("variable"==e&&(S.marked="property"),"spread"==e?L(ye):"}"==e?T():L(z(":"),ye,we)):(r(t),L(we))}function we(e,t){if("="==t)return L(j)}function xe(e){if(","==e)return L(ve)}function ke(e,t){if("keyword b"==e&&"else"==t)return L(F("form","else"),E,W)}function Ce(e,t){return"await"==t?L(Ce):"("==e?L(F(")"),Se,z(")"),W):void 0}function Se(e){return"var"==e?L(ve,z(";"),Le):";"==e?L(Le):"variable"==e?L(Te):T(I,z(";"),Le)}function Te(e,t){return"in"==t||"of"==t?(S.marked="keyword",L(I)):L(U,Le)}function Le(e,t){return";"==e?L(Me):"in"==t||"of"==t?(S.marked="keyword",L(I)):T(I,z(";"),Me)}function Me(e){")"!=e&&L(I)}function Oe(e,t){return"*"==t?(S.marked="keyword",L(Oe)):"variable"==e?(r(t),L(Oe)):"("==e?L(D,F(")"),ne(Ne,")"),W,le,E,_):c&&"<"==t?L(F(">"),ne(me,">"),W,Oe):void 0}function Ne(e,t){return"@"==t&&L(I,Ne),"spread"==e?L(Ne):c&&O(t)?(S.marked="keyword",L(Ne)):T(ye,ae,we)}function Ae(e,t){return"variable"==e?De(e,t):Pe(e,t)}function De(e,t){if("variable"==e)return r(t),L(Pe)}function Pe(e,t){return"<"==t?L(F(">"),ne(me,">"),W,Pe):"extends"==t||"implements"==t||c&&","==e?("implements"==t&&(S.marked="keyword"),L(c?ce:I,Pe)):"{"==e?L(F("}"),_e,W):void 0}function _e(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||c&&O(t))&&S.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(S.marked="keyword",L(_e)):"variable"==e||"keyword"==S.style?(S.marked="property",L(c?Fe:Oe,_e)):"["==e?L(I,ae,z("]"),c?Fe:Oe,_e):"*"==t?(S.marked="keyword",L(_e)):";"==e?L(_e):"}"==e?L():"@"==t?L(I,_e):void 0}function Fe(e,t){return"?"==t?L(Fe):":"==e?L(ce,we):"="==t?L(j):T(Oe)}function We(e,t){return"*"==t?(S.marked="keyword",L(Be,z(";"))):"default"==t?(S.marked="keyword",L(I,z(";"))):"{"==e?L(ne(ze,"}"),Be,z(";")):T(E)}function ze(e,t){return"as"==t?(S.marked="keyword",L(z("variable"))):"variable"==e?T(j,ze):void 0}function Ee(e){return"string"==e?L():"("==e?T(I):T(He,Ie,Be)}function He(e,t){return"{"==e?ie(He,"}"):("variable"==e&&r(t),"*"==t&&(S.marked="keyword"),L(je))}function Ie(e){if(","==e)return L(He,Ie)}function je(e,t){if("as"==t)return S.marked="keyword",L(He)}function Be(e,t){if("from"==t)return S.marked="keyword",L(I)}function Re(e){return"]"==e?L():T(ne(j,"]"))}function qe(){return T(F("form"),ye,z("{"),F("}"),ne(Ue,"}"),W,W)}function Ue(){return T(ye,we)}function Ve(e,t,r){return t.tokenize==v&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return W.lex=_.lex=!0,{startState:function(e){var t={tokenize:v,lastType:"sof",cc:[],lexical:new k((e||0)-f,0,"block",!1),localVars:d.localVars,context:d.localVars&&new N(null,null,!1),indented:e||0};return d.globalVars&&"object"==typeof d.globalVars&&(t.globalVars=d.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),o(e,t)),t.tokenize!=y&&e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"==n?r:(t.lastType="operator"!=n||"++"!=i&&"--"!=i?n:"incdec",function(e,t,r,n,i){var o=e.cc;for(S.state=e,S.stream=i,S.marked=null,S.cc=o,S.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((o.length?o.pop():l?I:E)(r,n)){for(;o.length&&o[o.length-1].lex;)o.pop()();return S.marked?S.marked:"variable"==r&&C(e,n)?"variable-2":t}}(t,r,n,i,e))},indent:function(e,t){if(e.tokenize==y)return Ke.Pass;if(e.tokenize!=v)return 0;var r,n=t&&t.charAt(0),i=e.lexical;if(!/^\s*else\b/.test(t))for(var o=e.cc.length-1;0<=o;--o){var a=e.cc[o];if(a==W)i=i.prev;else if(a!=ke)break}for(;("stat"==i.type||"form"==i.type)&&("}"==n||(r=e.cc[e.cc.length-1])&&(r==U||r==V)&&!/^[,\.=+\-*:?[\(]/.test(t));)i=i.prev;h&&")"==i.type&&"stat"==i.prev.type&&(i=i.prev);var l,s,c=i.type,u=n==c;return"vardef"==c?i.indented+("operator"==e.lastType||","==e.lastType?i.info.length+1:0):"form"==c&&"{"==n?i.indented:"form"==c?i.indented+f:"stat"==c?i.indented+(s=t,"operator"==(l=e).lastType||","==l.lastType||p.test(s.charAt(0))||/[,.]/.test(s.charAt(0))?h||f:0):"switch"!=i.info||u||0==d.doubleIndentSwitch?i.align?i.column+(u?0:1):i.indented+(u?0:f):i.indented+(/^(?:case|default)\b/.test(t)?f:2*f)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:l?null:"/*",blockCommentEnd:l?null:"*/",blockCommentContinue:l?null:" * ",lineComment:l?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:l?"json":"javascript",jsonldMode:a,jsonMode:l,expressionAllowed:Ve,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=I&&t!=j||e.cc.pop()}}}),Ke.registerHelper("wordChars","javascript",/[\w$]/),Ke.defineMIME("text/javascript","javascript"),Ke.defineMIME("text/ecmascript","javascript"),Ke.defineMIME("application/javascript","javascript"),Ke.defineMIME("application/x-javascript","javascript"),Ke.defineMIME("application/ecmascript","javascript"),Ke.defineMIME("application/json",{name:"javascript",json:!0}),Ke.defineMIME("application/x-json",{name:"javascript",json:!0}),Ke.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),Ke.defineMIME("text/typescript",{name:"javascript",typescript:!0}),Ke.defineMIME("application/typescript",{name:"javascript",typescript:!0})},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror")):"function"==typeof o&&o.amd?o(["../../lib/codemirror"],n):n(CodeMirror)},{"../../lib/codemirror":14}],18:[function(e,t,r){var n;n=function(C){"use strict";var S={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},T={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};C.defineMode("xml",function(e,t){var a,o,l=e.indentUnit,s={},r=t.htmlMode?S:T;for(var n in r)s[n]=r[n];for(var n in t)s[n]=t[n];function c(t,r){function e(e){return(r.tokenize=e)(t,r)}var n=t.next();return"<"==n?t.eat("!")?t.eat("[")?t.match("CDATA[")?e(i("atom","]]>")):null:t.match("--")?e(i("comment","--\x3e")):t.match("DOCTYPE",!0,!0)?(t.eatWhile(/[\w\._\-]/),e(function n(i){return function(e,t){for(var r;null!=(r=e.next());){if("<"==r)return t.tokenize=n(i+1),t.tokenize(e,t);if(">"==r){if(1==i){t.tokenize=c;break}return t.tokenize=n(i-1),t.tokenize(e,t)}}return"meta"}}(1))):null:t.eat("?")?(t.eatWhile(/[\w\._\-]/),r.tokenize=i("meta","?>"),"meta"):(a=t.eat("/")?"closeTag":"openTag",r.tokenize=u,"tag bracket"):"&"==n?(t.eat("#")?t.eat("x")?t.eatWhile(/[a-fA-F\d]/)&&t.eat(";"):t.eatWhile(/[\d]/)&&t.eat(";"):t.eatWhile(/[\w\.\-:]/)&&t.eat(";"))?"atom":"error":(t.eatWhile(/[^&<]/),null)}function u(e,t){var r,n,i=e.next();if(">"==i||"/"==i&&e.eat(">"))return t.tokenize=c,a=">"==i?"endTag":"selfcloseTag","tag bracket";if("="==i)return a="equals",null;if("<"==i){t.tokenize=c,t.state=p,t.tagName=t.tagStart=null;var o=t.tokenize(e,t);return o?o+" tag error":"tag error"}return/[\'\"]/.test(i)?(t.tokenize=(r=i,(n=function(e,t){for(;!e.eol();)if(e.next()==r){t.tokenize=u;break}return"string"}).isInAttribute=!0,n),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function i(r,n){return function(e,t){for(;!e.eol();){if(e.match(n)){t.tokenize=c;break}e.next()}return r}}function d(e,t,r){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=r,(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function f(e){e.context&&(e.context=e.context.prev)}function h(e,t){for(var r;;){if(!e.context)return;if(r=e.context.tagName,!s.contextGrabbers.hasOwnProperty(r)||!s.contextGrabbers[r].hasOwnProperty(t))return;f(e)}}function p(e,t,r){return"openTag"==e?(r.tagStart=t.column(),m):"closeTag"==e?g:p}function m(e,t,r){return"word"==e?(r.tagName=t.current(),o="tag",b):s.allowMissingTagName&&"endTag"==e?(o="tag bracket",b(e,t,r)):(o="error",m)}function g(e,t,r){if("word"==e){var n=t.current();return r.context&&r.context.tagName!=n&&s.implicitlyClosed.hasOwnProperty(r.context.tagName)&&f(r),r.context&&r.context.tagName==n||!1===s.matchClosing?(o="tag",v):(o="tag error",y)}return s.allowMissingTagName&&"endTag"==e?(o="tag bracket",v(e,t,r)):(o="error",y)}function v(e,t,r){return"endTag"!=e?(o="error",v):(f(r),p)}function y(e,t,r){return o="error",v(e,0,r)}function b(e,t,r){if("word"==e)return o="attribute",w;if("endTag"==e||"selfcloseTag"==e){var n=r.tagName,i=r.tagStart;return r.tagName=r.tagStart=null,"selfcloseTag"==e||s.autoSelfClosers.hasOwnProperty(n)?h(r,n):(h(r,n),r.context=new d(r,n,i==r.indented)),p}return o="error",b}function w(e,t,r){return"equals"==e?x:(s.allowMissing||(o="error"),b(e,0,r))}function x(e,t,r){return"string"==e?k:"word"==e&&s.allowUnquoted?(o="string",b):(o="error",b(e,0,r))}function k(e,t,r){return"string"==e?k:b(e,0,r)}return c.isInText=!0,{startState:function(e){var t={tokenize:c,state:p,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;a=null;var r=t.tokenize(e,t);return(r||a)&&"comment"!=r&&(o=null,t.state=t.state(a||r,e,t),o&&(r="error"==o?r+" error":o)),r},indent:function(e,t,r){var n=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+l;if(n&&n.noIndent)return C.Pass;if(e.tokenize!=u&&e.tokenize!=c)return r?r.match(/^(\s*)/)[0].length:0;if(e.tagName)return!1!==s.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+l*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/<!\[CDATA\[/.test(t))return 0;var i=t&&/^<(\/)?([\w_:\.-]*)/.exec(t);if(i&&i[1])for(;n;){if(n.tagName==i[2]){n=n.prev;break}if(!s.implicitlyClosed.hasOwnProperty(n.tagName))break;n=n.prev}else if(i)for(;n;){var o=s.contextGrabbers[n.tagName];if(!o||!o.hasOwnProperty(i[2]))break;n=n.prev}for(;n&&n.prev&&!n.startOfLine;)n=n.prev;return n?n.indent+l:e.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(e){e.state==x&&(e.state=b)}}}),C.defineMIME("text/xml","xml"),C.defineMIME("application/xml","xml"),C.mimeModes.hasOwnProperty("text/html")||C.defineMIME("text/html",{name:"xml",htmlMode:!0})},"object"==typeof r&&"object"==typeof t?n(e("../../lib/codemirror")):"function"==typeof o&&o.amd?o(["../../lib/codemirror"],n):n(CodeMirror)},{"../../lib/codemirror":14}],19:[function(e,t,n){!function(e,t){if("function"==typeof o&&o.amd)o(["exports"],t);else if(void 0!==n)t(n);else{var r={};t(r),e.decko=r}}(this,function(e){"use strict";e.__esModule=!0;var t={},l=Object.prototype.hasOwnProperty,r=function(n,e){if("function"==typeof e){var t=n;n=e,e=t}var i=e&&e.delay||e||0,o=void 0,a=void 0,l=void 0;return function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];o=t,a=this,l||(l=setTimeout(function(){n.apply(a,o),o=a=l=null},i))}},n=function(e,t,r){var n=r.value;return{configurable:!0,get:function(){var e=n.bind(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e}}},i=s(function(i){var o=arguments.length<=1||void 0===arguments[1]?t:arguments[1],a=o.cache||{};return function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=String(t[0]);return!1===o.caseSensitive&&(n=n.toLowerCase()),l.call(a,n)?a[n]:a[n]=i.apply(this,t)}}),o=s(r),a=s(function(e,t){return e.bind(t)},function(){return n});function s(i,o){var a,l=(o=o||i.decorate||(a=i,function(n){return"function"==typeof n?a(n):function(e,t,r){r.value=a(r.value,n,e,t,r)}}))();return function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];var n=t.length;return(n<2?o:2<n?l:i).apply(void 0,t)}}e.memoize=i,e.debounce=o,e.bind=a,e.default={memoize:i,debounce:o,bind:a}})},{}],20:[function(e,t,r){t.exports=function(a,e,l){var s=e.split("."),t=a.__lsc||(a.__lsc={});return t[e+l]||(t[e+l]=function(e){for(var t=e&&e.target||this,r={},n=r,i="string"==typeof l?function(e,t,r,n){for(n=0,t=t.split?t.split("."):t;e&&n<t.length;)e=e[t[n++]];return void 0===e?r:e}(e,l):t.nodeName?t.type.match(/^che|rad/)?t.checked:t.value:e,o=0;o<s.length-1;o++)n=n[s[o]]||(n[s[o]]=!o&&a.state[s[o]]||{});n[s[o]]=i,a.setState(r)})}},{}],21:[function(e,t,r){var n,i;n=this,i=function(){var i=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,P=Object.keys||function(e){var t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r);return t},_=function(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")},F=function(e,t){return String(e).replace(/(\n+)/g,"$1"+(t||"\t"))},W=function(e,t,r){return String(e).length>(t||40)||!r&&-1!==String(e).indexOf("\n")||-1!==String(e).indexOf("<")},o={};function z(e){var t="";for(var r in e){var n=e[r];null!=n&&(t&&(t+=" "),t+=o[r]||(o[r]=r.replace(/([A-Z])/g,"-$1").toLowerCase()),t+=": ",t+=n,"number"==typeof n&&!1===i.test(r)&&(t+="px"),t+=";")}return t||void 0}function E(e,t){for(var r in t)e[r]=t[r];return e}var r={shallow:!0},H=[],I=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/;function j(e,t,r,n,i){if(null==e||"boolean"==typeof e)return"";var o=e.nodeName,a=e.attributes,l=!1;t=t||{};var s,c,u,d,f=(r=r||{}).pretty,h="string"==typeof f?f:"\t";if("object"!=typeof e&&!o)return _(e);if("function"==typeof o){if(l=!0,!r.shallow||!n&&!1!==r.renderRootComponent){var p,m=(u=(c=e).nodeName.defaultProps,d=E({},u||c.attributes),u&&E(d,c.attributes),c.children&&(d.children=c.children),d);if(o.prototype&&"function"==typeof o.prototype.render){var g=new o(m,t);g._disable=g.__x=!0,g.props=m,g.context=t,g.componentWillMount&&g.componentWillMount(),p=g.render(g.props,g.state,g.context),g.getChildContext&&(t=E(E({},t),g.getChildContext()))}else p=o(m,t);return j(p,t,r,!1!==r.shallowHighOrder)}o=(s=o).displayName||s!==Function&&s.name||function(e){var t=(Function.prototype.toString.call(e).match(/^\s*function\s+([^( ]+)/)||"")[1];if(!t){for(var r=-1,n=H.length;n--;)if(H[n]===e){r=n;break}r<0&&(r=H.push(e)-1),t="UnnamedComponent"+r}return t}(s)}var v,y="";if(a){var b=P(a);r&&!0===r.sortAttributes&&b.sort();for(var w=0;w<b.length;w++){var x=b[w],k=a[x];if("children"!==x&&!x.match(/[\s\n\\/='"\0<>]/)&&(r&&r.allAttributes||"key"!==x&&"ref"!==x)){if("className"===x){if(a.class)continue;x="class"}else i&&x.match(/^xlink:?./)&&(x=x.toLowerCase().replace(/^xlink:?/,"xlink:"));"style"===x&&k&&"object"==typeof k&&(k=z(k));var C=r.attributeHook&&r.attributeHook(x,k,t,r,l);if(C||""===C)y+=C;else if("dangerouslySetInnerHTML"===x)v=k&&k.__html;else if((k||0===k||""===k)&&"function"!=typeof k){if(!(!0!==k&&""!==k||(k=x,r&&r.xml))){y+=" "+x;continue}y+=" "+x+'="'+_(k)+'"'}}}}var S=y.replace(/^\n\s*/," ");if(S===y||~S.indexOf("\n")?f&&~y.indexOf("\n")&&(y+="\n"):y=S,y="<"+o+y+">",o.match(/[\s\n\\/='"\0<>]/))throw y;var T=o.match(I);T&&(y=y.replace(/>$/," />"));var L=[];if(v)f&&W(v)&&(v="\n"+h+F(v,h)),y+=v;else if(e.children){for(var M=~y.indexOf("\n"),O=0;O<e.children.length;O++){var N=e.children[O];if(null!=N&&!1!==N){var A=j(N,t,r,!0,"svg"===o||"foreignObject"!==o&&i);!M&&f&&W(A)&&(M=!0),A&&L.push(A)}}if(f&&M)for(var D=L.length;D--;)L[D]="\n"+h+F(L[D],h)}if(L.length)y+=L.join("");else if(r&&r.xml)return y.substring(0,y.length-1)+" />";return T||(f&&~y.indexOf("\n")&&(y+="\n"),y+="</"+o+">"),y}return(j.render=j).shallowRender=function(e,t){return j(e,t,r)},j},"object"==typeof r&&void 0!==t?t.exports=i():"function"==typeof o&&o.amd?o(i):n.preactRenderToString=i()},{}],22:[function(e,y,t){!function(){"use strict";function r(e,t){var r,n,i,o,a=d;for(o=arguments.length;2<o--;)u.push(arguments[o]);for(t&&null!=t.children&&(u.length||u.push(t.children),delete t.children);u.length;)if((n=u.pop())&&void 0!==n.pop)for(o=n.length;o--;)u.push(n[o]);else"boolean"==typeof n&&(n=null),(i="function"!=typeof e)&&(null==n?n="":"number"==typeof n?n=String(n):"string"!=typeof n&&(i=!1)),i&&r?a[a.length-1]+=n:a===d?a=[n]:a.push(n),r=i;var l=new c;return l.nodeName=e,l.children=a,l.attributes=null==t?void 0:t,l.key=null==t?void 0:t.key,void 0!==E.vnode&&E.vnode(l),l}function L(e,t){for(var r in t)e[r]=t[r];return e}function o(e){!e.__d&&(e.__d=!0)&&1==h.push(e)&&(E.debounceRendering||i)(t)}function t(){var e,t=h;for(h=[];e=t.pop();)e.__d&&W(e)}function T(e,t){return e.__n===t||e.nodeName.toLowerCase()===t.toLowerCase()}function M(e){var t=L({},e.attributes);t.children=e.children;var r=e.nodeName.defaultProps;if(void 0!==r)for(var n in r)void 0===t[n]&&(t[n]=r[n]);return t}function O(e){var t=e.parentNode;t&&t.removeChild(e)}function m(e,t,r,n,i){if("className"===t&&(t="class"),"key"===t);else if("ref"===t)r&&r(null),n&&n(e);else if("class"!==t||i)if("style"===t){if(n&&"string"!=typeof n&&"string"!=typeof r||(e.style.cssText=n||""),n&&"object"==typeof n){if("string"!=typeof r)for(var o in r)o in n||(e.style[o]="");for(var o in n)e.style[o]="number"==typeof n[o]&&!1===f.test(o)?n[o]+"px":n[o]}}else if("dangerouslySetInnerHTML"===t)n&&(e.innerHTML=n.__html||"");else if("o"==t[0]&&"n"==t[1]){var a=t!==(t=t.replace(/Capture$/,""));t=t.toLowerCase().substring(2),n?r||e.addEventListener(t,s,a):e.removeEventListener(t,s,a),(e.__l||(e.__l={}))[t]=n}else if("list"!==t&&"type"!==t&&!i&&t in e){try{e[t]=null==n?"":n}catch(e){}null!=n&&!1!==n||"spellcheck"==t||e.removeAttribute(t)}else{var l=i&&t!==(t=t.replace(/^xlink:?/,""));null==n||!1===n?l?e.removeAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase()):e.removeAttribute(t):"function"!=typeof n&&(l?e.setAttributeNS("http://www.w3.org/1999/xlink",t.toLowerCase(),n):e.setAttribute(t,n))}else e.className=n||""}function s(e){return this.__l[e.type](E.event&&E.event(e)||e)}function N(){for(var e;e=H.pop();)E.afterMount&&E.afterMount(e),e.componentDidMount&&e.componentDidMount()}function A(e,t,r,n,i,o){I++||(g=null!=i&&void 0!==i.ownerSVGElement,v=null!=e&&!("__preactattr_"in e));var a=D(e,t,r,n,o);return i&&a.parentNode!==i&&i.appendChild(a),--I||(v=!1,o||N()),a}function D(e,t,r,n,i){var o=e,a=g;if(null!=t&&"boolean"!=typeof t||(t=""),"string"==typeof t||"number"==typeof t)return e&&void 0!==e.splitText&&e.parentNode&&(!e._component||i)?e.nodeValue!=t&&(e.nodeValue=t):(o=document.createTextNode(t),e&&(e.parentNode&&e.parentNode.replaceChild(o,e),P(e,!0))),o.__preactattr_=!0,o;var l,s,c=t.nodeName;if("function"==typeof c)return function(e,t,r,n){var i=e&&e._component,o=i,a=e,l=i&&e._componentConstructor===t.nodeName,s=l,c=M(t);for(;i&&!s&&(i=i.__u);)s=i.constructor===t.nodeName;i&&s&&(!n||i._component)?(F(i,c,3,r,n),e=i.base):(o&&!l&&(z(o),e=a=null),i=_(t.nodeName,c,r),e&&!i.__b&&(i.__b=e,a=null),F(i,c,1,r,n),e=i.base,a&&e!==a&&(a._component=null,P(a,!1)));return e}(e,t,r,n);if(g="svg"===c||"foreignObject"!==c&&g,c=String(c),(!e||!T(e,c))&&(l=c,(s=g?document.createElementNS("http://www.w3.org/2000/svg",l):document.createElement(l)).__n=l,o=s,e)){for(;e.firstChild;)o.appendChild(e.firstChild);e.parentNode&&e.parentNode.replaceChild(o,e),P(e,!0)}var u=o.firstChild,d=o.__preactattr_,f=t.children;if(null==d){d=o.__preactattr_={};for(var h=o.attributes,p=h.length;p--;)d[h[p].name]=h[p].value}return!v&&f&&1===f.length&&"string"==typeof f[0]&&null!=u&&void 0!==u.splitText&&null==u.nextSibling?u.nodeValue!=f[0]&&(u.nodeValue=f[0]):(f&&f.length||null!=u)&&function(e,t,r,n,i){var o,a,l,s,c,u=e.childNodes,d=[],f={},h=0,p=0,m=u.length,g=0,v=t?t.length:0;if(0!==m)for(var y=0;y<m;y++){var b=u[y],w=b.__preactattr_,x=v&&w?b._component?b._component.__k:w.key:null;null!=x?(h++,f[x]=b):(w||(void 0!==b.splitText?!i||b.nodeValue.trim():i))&&(d[g++]=b)}if(0!==v)for(var y=0;y<v;y++){s=t[y],c=null;var x=s.key;if(null!=x)h&&void 0!==f[x]&&(c=f[x],f[x]=void 0,h--);else if(p<g)for(o=p;o<g;o++)if(void 0!==d[o]&&(k=a=d[o],S=i,"string"==typeof(C=s)||"number"==typeof C?void 0!==k.splitText:"string"==typeof C.nodeName?!k._componentConstructor&&T(k,C.nodeName):S||k._componentConstructor===C.nodeName)){c=a,d[o]=void 0,o===g-1&&g--,o===p&&p++;break}c=D(c,s,r,n),l=u[y],c&&c!==e&&c!==l&&(null==l?e.appendChild(c):c===l.nextSibling?O(l):e.insertBefore(c,l))}var k,C,S;if(h)for(var y in f)void 0!==f[y]&&P(f[y],!1);for(;p<=g;)void 0!==(c=d[g--])&&P(c,!1)}(o,f,r,n,v||null!=d.dangerouslySetInnerHTML),function(e,t,r){var n;for(n in r)t&&null!=t[n]||null==r[n]||m(e,n,r[n],r[n]=void 0,g);for(n in t)"children"===n||"innerHTML"===n||n in r&&t[n]===("value"===n||"checked"===n?e[n]:r[n])||m(e,n,r[n],r[n]=t[n],g)}(o,t.attributes,d),g=a,o}function P(e,t){var r=e._component;r?z(r):(null!=e.__preactattr_&&e.__preactattr_.ref&&e.__preactattr_.ref(null),!1!==t&&null!=e.__preactattr_||O(e),n(e))}function n(e){for(e=e.lastChild;e;){var t=e.previousSibling;P(e,!0),e=t}}function _(e,t,r){var n,i=p.length;for(e.prototype&&e.prototype.render?(n=new e(t,r),l.call(n,t,r)):((n=new l(t,r)).constructor=e,n.render=a);i--;)if(p[i].constructor===e)return n.__b=p[i].__b,p.splice(i,1),n;return n}function a(e,t,r){return this.constructor(e,r)}function F(e,t,r,n,i){e.__x||(e.__x=!0,e.__r=t.ref,e.__k=t.key,delete t.ref,delete t.key,void 0===e.constructor.getDerivedStateFromProps&&(!e.base||i?e.componentWillMount&&e.componentWillMount():e.componentWillReceiveProps&&e.componentWillReceiveProps(t,n)),n&&n!==e.context&&(e.__c||(e.__c=e.context),e.context=n),e.__p||(e.__p=e.props),e.props=t,e.__x=!1,0!==r&&(1!==r&&!1===E.syncComponentUpdates&&e.base?o(e):W(e,1,i)),e.__r&&e.__r(e))}function W(e,t,r,n){if(!e.__x){var i,o,a,l=e.props,s=e.state,c=e.context,u=e.__p||l,d=e.__s||s,f=e.__c||c,h=e.base,p=e.__b,m=h||p,g=e._component,v=!1,y=f;if(e.constructor.getDerivedStateFromProps&&(s=L(L({},s),e.constructor.getDerivedStateFromProps(l,s)),e.state=s),h&&(e.props=u,e.state=d,e.context=f,2!==t&&e.shouldComponentUpdate&&!1===e.shouldComponentUpdate(l,s,c)?v=!0:e.componentWillUpdate&&e.componentWillUpdate(l,s,c),e.props=l,e.state=s,e.context=c),e.__p=e.__s=e.__c=e.__b=null,e.__d=!1,!v){i=e.render(l,s,c),e.getChildContext&&(c=L(L({},c),e.getChildContext())),h&&e.getSnapshotBeforeUpdate&&(y=e.getSnapshotBeforeUpdate(u,d));var b,w,x=i&&i.nodeName;if("function"==typeof x){var k=M(i);(o=g)&&o.constructor===x&&k.key==o.__k?F(o,k,1,c,!1):(b=o,e._component=o=_(x,k,c),o.__b=o.__b||p,o.__u=e,F(o,k,0,c,!1),W(o,1,r,!0)),w=o.base}else a=m,(b=g)&&(a=e._component=null),(m||1===t)&&(a&&(a._component=null),w=A(a,i,c,r||!h,m&&m.parentNode,!0));if(m&&w!==m&&o!==g){var C=m.parentNode;C&&w!==C&&(C.replaceChild(w,m),b||(m._component=null,P(m,!1)))}if(b&&z(b),(e.base=w)&&!n){for(var S=e,T=e;T=T.__u;)(S=T).base=w;w._component=S,w._componentConstructor=S.constructor}}for(!h||r?H.unshift(e):v||(e.componentDidUpdate&&e.componentDidUpdate(u,d,y),E.afterUpdate&&E.afterUpdate(e));e.__h.length;)e.__h.pop().call(e);I||n||N()}}function z(e){E.beforeUnmount&&E.beforeUnmount(e);var t=e.base;e.__x=!0,e.componentWillUnmount&&e.componentWillUnmount(),e.base=null;var r=e._component;r?z(r):t&&(t.__preactattr_&&t.__preactattr_.ref&&t.__preactattr_.ref(null),O(e.__b=t),p.push(e),n(t)),e.__r&&e.__r(null)}function l(e,t){this.__d=!0,this.context=t,this.props=e,this.state=this.state||{},this.__h=[]}var c=function(){},E={},u=[],d=[],i="function"==typeof Promise?Promise.resolve().then.bind(Promise.resolve()):setTimeout,f=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,h=[],H=[],I=0,g=!1,v=!1,p=[];L(l.prototype,{setState:function(e,t){var r=this.__s=this.state;"function"==typeof e&&(e=e(r,this.props)),this.state=L(L({},r),e),t&&this.__h.push(t),o(this)},forceUpdate:function(e){e&&this.__h.push(e),W(this,2)},render:function(){}});var e={h:r,createElement:r,cloneElement:function(e,t){return r(e.nodeName,L(L({},e.attributes),t),2<arguments.length?[].slice.call(arguments,2):e.children)},Component:l,render:function(e,t,r){return A(r,e,{},!1,t,!1)},rerender:t,options:E};void 0!==y?y.exports=e:self.preact=e}()},{}],23:[function(e,t,r){function c(n){document.addEventListener("mouseover",function(e){var t=e.target,r=n(t);r||(r=(t=t.parentElement)&&n(t)),r&&c.show(t,r,!0)})}c.show=function(e,t,l){var s="data-tlite";t=t||{},(e.tooltip||function(e,t){var r,n,i;function o(){c.hide(e,!0)}function a(){r||(r=function(l,e,t){var s=document.createElement("span"),r=t.grav||l.getAttribute("data-tlite")||"n";s.innerHTML=e,l.appendChild(s);var c=r[0]||"",u=r[1]||"";function n(){s.className="tlite tlite-"+c+u;var e=l.offsetTop,t=l.offsetLeft;s.offsetParent===l&&(e=t=0);var r=l.offsetWidth,n=l.offsetHeight,i=s.offsetHeight,o=s.offsetWidth,a=t+r/2;s.style.top=("s"===c?e-i-10:"n"===c?e+n+10:e+n/2-i/2)+"px",s.style.left=("w"===u?t:"e"===u?t+r-o:"w"===c?t+r+10:"e"===c?t-o-10:a-o/2)+"px"}n();var i=s.getBoundingClientRect();"s"===c&&i.top<0?(c="n",n()):"n"===c&&i.bottom>window.innerHeight?(c="s",n()):"e"===c&&i.left<0?(c="w",n()):"w"===c&&i.right>window.innerWidth&&(c="e",n());return s.className+=" tlite-visible",s}(e,i,t))}return e.addEventListener("mousedown",o),e.addEventListener("mouseleave",o),e.tooltip={show:function(){i=e.title||e.getAttribute(s)||i,e.title="",e.setAttribute(s,""),i&&!n&&(n=setTimeout(a,l?150:1))},hide:function(e){if(l===e){n=clearTimeout(n);var t=r&&r.parentNode;t&&t.removeChild(r),r=void 0}}}}(e,t)).show()},c.hide=function(e,t){e.tooltip&&e.tooltip.hide(t)},void 0!==t&&t.exports&&(t.exports=c)},{}]},{},[2])}();
+//# sourceMappingURL=admin.min.js.map
--- /dev/null
+{"version":3,"sources":["admin.js"],"names":["define","undefined","r","e","n","t","o","i","f","c","u","a","Error","code","p","exports","call","length","1","require","module","handleClickEvent","target","tagName","hasAttribute","confirm","getAttribute","preventDefault","Object","defineProperty","value","default","init","document","body","addEventListener","2","_tabs2","_interopRequireDefault","_formEditor2","_formActions2","_fieldBuilder2","_actionConfirmations2","_tlite2","obj","__esModule","window","html_forms","getElementById","el","className","indexOf","FieldBuilder","Editor","hf_options","view","columns","useCheckboxesForHidden","./action-confirmations.js","./field-builder.js","./form-actions.js","./form-editor.js","./tabs.js","tlite","3","_class","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","key","Constructor","protoProps","staticProps","prototype","_preact","_decko","_fieldConfigurator","_applyDecoratedDescriptor","property","decorators","context","desc","forEach","initializer","slice","reverse","reduce","decorator","_Component","instance","TypeError","_classCallCheck","this","_this","self","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","state","activeField","subClass","superClass","create","constructor","setPrototypeOf","_inherits","Component","setState","field","fields","_this2","fieldButtons","map","h","type","onClick","openFieldConfig","label","fieldType","rows","configRows","class","style","FieldConfigurator","onCancel","handleCancel","bind","getOwnPropertyDescriptor","./field-configurator.js","decko","preact","4","_html","FS","newObj","hasOwnProperty","_interopRequireWildcard","_linkstate","_linkstate2","getInitialState","choiceHandlers","add","addChoice","delete","deleteChoice","changeLabel","changeChoiceLabel","toggleChecked","toggleChoiceChecked","formId","querySelector","formSlug","fieldLabel","placeholder","wrap","required","choices","checked","accept","newState","html","htmlgenerate","replaceSelection","arr","push","index","parentElement","splice","formFields","Label","onChange","Placeholder","DefaultValue","Required","Wrap","AddToForm","onSubmit","addToForm","Choices","multiple","handlers","ButtonText","Accept","onKeyPress","handleKeyPress","keyCode","../field-builder/html.js","./field-settings.js","linkstate","5","href","for","id","defaultChecked","choiceFields","choice","k","data-key","name","title","6","_fieldBuilder","rootElement","Field","mount","render","registerField","./components/field-builder.js","7","_preactRenderToString","_preactRenderToString2","tag","attr","children","propName","filterEmptyObjectValues","conf","fieldName","replace","toUpperCase","fieldId","fieldAttr","selected","str","tmpl","pretty","preact-render-to-string","8","availableActions","actionTemplates","actions","createAccordion","headingHTML","contentHTML","createElement","heading","innerHTML","appendChild","content","deleteWrap","textAlign","deleteLink","innerText","show","offsetParent","display","removeChild","childElementCount","addAction","srcElement","actionType","actionTemplate","querySelectorAll","parentNode","summary","9","CodeMirror","editor","element","dom","requiredFieldsInput","emailFieldsInput","previewFrame","previewDom","templateRegex","setPreviewDom","frameContent","contentDocument","contentWindow","updatePreview","getFieldVariableName","updateFieldVariables","seen","fieldVariables","filter","item","wpbody","firstChild","sizeEl","visibility","width","offsetWidth","setAttribute","maxWidth","vel","markup","getValue","s","m","arguments","dispatchEvent","Event","updateShadowDOM","updateRequiredFields","fieldNames","join","updateEmailFields","debounce","func","wait","immediate","timeout","args","callNow","clearTimeout","setTimeout","apply","fromTextArea","selectionPointer","matchTags","bothTags","mode","htmlMode","autoCloseTags","autoRefresh","styleActiveLine","matchBrackets","on","focus","codemirror","codemirror/addon/edit/closetag.js","codemirror/addon/edit/matchtags","codemirror/addon/fold/xml-fold","codemirror/mode/css/css","codemirror/mode/htmlmixed/htmlmixed","codemirror/mode/javascript/javascript","codemirror/mode/xml/xml","10","tabs","tabNavs","open","tabTarget","classList","toggle","blur","_i","tab","split","shift","history","newUrl","location","replaceState","11","mod","defineOption","cm","val","old","Init","removeKeyMap","whenClosing","getOption","Pass","autoCloseCurrent","whenOpening","ranges","listSelections","replacements","opt","empty","pos","head","tok","getTokenAt","inner","innerMode","getMode","configuration","dontCloseTags","htmlDontClose","indentTags","htmlIndent","end","ch","lowerTagName","toLowerCase","test","string","charAt","closingTagExists","indent","text","newPos","Pos","line","dontIndentOnAutoClose","info","replaceRange","anchor","sel","setSelections","indentLine","autoCloseGT","addKeyMap","typingSlash","dontIndentOnSlash","replacement","start","getLine","replaceSelections","collection","elt","newTag","scanForClosingTag","Math","min","lastLine","nextClose","cx","onCx","prev","to","next","commands","closeTag","amd","../../lib/codemirror","../fold/xml-fold","12","clear","tagHit","tagOther","doMatchTags","failedTagMatch","operation","somethingSelected","cur","getCursor","range","getViewport","from","max","match","findMatchingTag","matchBothTags","hit","at","close","markText","other","maybeUpdateMatch","off","toMatchingTag","found","extendSelection","13","cmp","b","nameStartChar","xmlTagStart","RegExp","Iter","firstLine","tagAt","iter","getTokenTypeAt","nextLine","prevLine","toTagEnd","gt","lastSlash","lastIndexOf","selfClose","toTagStart","lt","lastIndex","exec","toNextTag","toPrevTag","findMatchingClose","stack","startLine","startCh","findMatchingOpen","endLine","endCh","registerHelper","openTag","startPos","endPos","here","findEnclosingTag","14","global","factory","userAgent","navigator","platform","gecko","ie_upto10","ie_11up","edge","ie","ie_version","documentMode","webkit","qtwebkit","chrome","presto","safari","vendor","mac_geMountainLion","phantom","ios","android","mobile","mac","chromeOS","windows","presto_version","Number","flipCtrlCmd","captureRightClick","classTest","cls","rmClass","node","current","after","removeChildren","count","childNodes","removeChildrenAndAdd","parent","cssText","createTextNode","eltP","contains","child","nodeType","host","activeElt","activeElement","shadowRoot","addClass","joinClasses","as","createRange","endNode","setEnd","setStart","createTextRange","moveToElementText","collapse","moveEnd","moveStart","selectInput","select","Array","copyObj","overwrite","prop","countColumn","tabSize","startIndex","startValue","search","nextTab","selectionStart","selectionEnd","_e","Delayed","array","set","ms","scrollerGap","toString","sel_dontScroll","scroll","sel_mouse","origin","sel_move","findColumn","goal","col","skipped","spaceStrs","spaceStr","lst","out","nothing","createObj","base","inst","nonASCIISingleCaseWordChar","isWordCharBasic","isWordChar","helper","source","isEmpty","extendingChars","isExtendingChar","charCodeAt","skipExtendingChars","dir","findFirst","pred","midF","mid","ceil","floor","Display","place","doc","input","d","scrollbarFiller","gutterFiller","lineDiv","selectionDiv","cursorDiv","measure","lineMeasure","lineSpace","lines","mover","sizer","sizerWidth","heightForcer","gutters","lineGutter","scroller","wrapper","zIndex","paddingRight","draggable","viewFrom","viewTo","first","reportedViewFrom","reportedViewTo","renderedView","externalMeasured","viewOffset","lastWrapHeight","lastWrapWidth","updateLineNumbers","nativeBarWidth","barHeight","barWidth","scrollbarsClipped","lineNumWidth","lineNumInnerWidth","lineNumChars","alignWidgets","cachedCharWidth","cachedTextHeight","cachedPaddingH","maxLine","maxLineLength","maxLineChanged","wheelDX","wheelDY","wheelStartX","wheelStartY","selForContextMenu","activeTouch","size","chunk","sz","chunkSize","getBetween","getLines","updateLineHeight","height","diff","lineNo","no","lineAtHeight","outer","i$1","lh","isLine","l","lineNumberFor","options","String","lineNumberFormatter","firstLineNumber","sticky","equalCursorPos","copyPos","x","maxPos","minPos","clipLine","clipPos","linelen","last","clipPosArray","sawReadOnlySpans","sawCollapsedSpans","MarkedSpan","marker","getMarkedSpanFor","spans","span","removeMarkedSpan","stretchSpansOverChange","change","full","oldFirst","markedSpans","oldLast","isInsert","nw","inclusiveLeft","insertLeft","endsAfter","inclusiveRight","markedSpansBefore","startsBefore","markedSpansAfter","sameLine","offset","span$1","clearEmptySpans","newMarkers","gapMarkers","gap","i$2","i$3","clearWhenEmpty","detachMarkedSpans","detachLine","attachMarkedSpans","attachLine","extraLeft","extraRight","compareCollapsedMarkers","lenDiff","aPos","find","bPos","fromCmp","toCmp","collapsedSpanAtSide","sps","sp","collapsed","collapsedSpanAtStart","collapsedSpanAtEnd","collapsedSpanAround","conflictingCollapsedRange","lineNo$$1","visualLine","merged","visualLineNo","lineN","vis","visualLineEndNo","lineIsHidden","widgetNode","lineIsHiddenInner","heightAtLine","lineObj","lineLength","len","found$1","findMaxLine","bidiOther","getBidiPartAt","order","bidiOrdering","lowTypes","arabicTypes","bidiRE","isNeutral","isStrong","countsAsLeft","countsAsNum","BidiSpan","level","direction","outerType","types","type$1","prev$1","type$2","i$4","type$3","j","i$5","cur$1","type$4","i$6","end$1","before","replace$1","j$1","i$7","j$2","nstart","unshift","getOrder","noHandlers","emitter","attachEvent","map$$1","_handlers","concat","getHandlers","removeEventListener","detachEvent","signal","signalDOMEvent","override","defaultPrevented","e_defaultPrevented","codemirrorIgnore","signalCursorActivity","cursorActivity","curOp","cursorActivityHandlers","hasHandler","eventMixin","ctor","e_preventDefault","returnValue","e_stopPropagation","stopPropagation","cancelBubble","e_stop","e_target","e_button","which","button","ctrlKey","zwspSupported","badBidiRects","dragAndDrop","div","zeroWidthElement","offsetHeight","hasBadBidiRects","txt","r0","getBoundingClientRect","r1","left","right","splitLinesAuto","result","nl","rt","hasSelection","getSelection","te","range$$1","ownerDocument","selection","compareEndPoints","hasCopyEvent","oncopy","badZoomedRects","modes","mimeModes","resolveMode","spec","mfactory","modeObj","modeExtensions","exts","helperType","modeProps","prop$1","extendMode","properties","copyState","nstate","startState","a1","a2","StringStream","lineOracle","lastColumnPos","lastColumnValue","lineStart","eol","sol","peek","eat","eatWhile","eatSpace","skipToEnd","skipTo","backUp","column","indentation","pattern","consume","caseInsensitive","cased","substr","hideFirstChars","lookAhead","oracle","baseToken","SavedContext","Context","maxLookAhead","baseTokens","baseTokenPos","highlightLine","forceToEnd","st","modeGen","lineClasses","runMode","loop","overlay","overlays","i_end","opaque","styles","classes","bgClass","textClass","getLineStyles","updateFrontier","getContextBefore","resetState","maxHighlightLength","stateAfter","save","styleClasses","highlightFrontier","modeFrontier","precise","minindent","minline","lim","indented","findStartLine","saved","fromSaved","processLine","startAt","stream","callBlankLine","readToken","blankLine","token","copy","Token","takeToken","asArray","tokens","extractLineClasses","output","lineClass","flattenSpans","curStart","curStyle","addModeClass","mName","Line","estimateHeight","styleToClassCache","styleToClassCacheWithMode","interpretTokenStyle","cache","buildLineContent","lineView","builder","pre","trailingSpace","splitSpaces","rest","addToken","buildToken","buildTokenBadBidi","insertLineContent","maps","caches","lastChild","defaultSpecialCharPlaceholder","startStyle","endStyle","css","displayText","trailingBefore","spaceBefore","special","specialChars","mustWrap","createDocumentFragment","txt$1","tabWidth","specialCharPlaceholder","fullStyle","part","buildCollapsedSpan","ignoreWidget","widget","needsContentAttribute","setUneditable","allText","spanStyle","spanEndStyle","spanStartStyle","nextChange","Infinity","foundBookmarks","endStyles","upto","tokenText","LineView","visualLineContinued","hidden","buildViewArray","nextPos","operationGroup","orphanDelayedCallbacks","signalLater","list","delayedCallbacks","fireOrphanDelayed","delayed","updateLineForChanges","dims","changes","updateLineText","updateLineGutter","updateLineClasses","updateLineWidgets","ensureLineWrapped","replaceChild","getLineContent","ext","built","background","insertBefore","updateLineBackground","wrapClass","gutter","gutterBackground","gutterClass","fixedGutter","fixedPos","gutterTotalWidth","markers","gutterMarkers","lineNumbers","wrap$1","gutterWrap","lineNumber","gutterLeft","gutterWidth","alignable","nextSibling","insertLineWidgets","insertLineWidgetsFor","allowAbove","widgets","ws","handleMouseEvents","positionLineWidget","above","noHScroll","wrapperWidth","coverGutter","paddingLeft","position","marginLeft","widgetHeight","parentStyle","clientWidth","eventInWidget","paddingTop","offsetTop","paddingVert","paddingH","getComputedStyle","currentStyle","data","parseInt","isNaN","scrollGap","displayWidth","displayHeight","clientHeight","mapFromLineView","measureChar","bias","measureCharPrepared","prepareMeasureForLine","findViewForLine","findViewIndex","getDimensions","forceUpdate","updateExternalMeasurement","rect","hasHeights","prepared","varHeight","wrapping","lineWrapping","curWidth","heights","rects","getClientRects","abs","bottom","top","ensureLineHeights","nodeAndOffsetInLineMap","coverStart","coverEnd","getUsefulRect","screen","logicalXDPI","deviceXDPI","normal","fromRange","hasBadZoomedRects","scaleX","scaleY","logicalYDPI","deviceYDPI","maybeUpdateRectForZooming","rSpan","charWidth","nullRect","rtop","rbot","bot","bogus","singleCursorHeightPerLine","rbottom","measureCharInner","measureText","mStart","mEnd","clearLineMeasurementCacheFor","clearLineMeasurementCache","externalMeasure","clearCaches","pageScrollX","pageXOffset","documentElement","scrollLeft","pageScrollY","marginTop","pageYOffset","scrollTop","widgetTopHeight","intoCoordSystem","includeWidgets","yOff","lOff","xOff","fromCoordSystem","coords","localBox","lineSpaceBox","charCoords","cursorCoords","preparedMeasure","get","getBidi","partPos","invert","estimateCoords","PosWithInfo","outside","xRel","coordsChar","y","coordsCharInner","rangeEnd","wrappedLineExtent","begin","wrappedLineExtentChar","boxIsAfter","box","widgetHeight$$1","ltr","_lineNo","ref","closestDist","endX","dist","baseX","chAround","boxAround","atLeft","atStart","textHeight","clientLeft","offsetLeft","compensateForHScroll","th","perLine","widgetsHeight","estimateLineHeights","est","estHeight","posFromMouse","liberal","forRect","space","clientX","clientY","colDiff","round","updateSelection","showSelection","prepareSelection","primary","curFragment","cursors","selFragment","primIndex","showCursorWhenSelecting","drawSelectionCursor","drawSelectionRange","cursor","cursorHeight","otherCursor","cmpCoords","fragment","padding","leftSide","rightSide","docLTR","drawForLine","fromArg","toArg","lineLen","wrapX","side","extent","iterateBidiSections","fromPos","toPos","openStart","openEnd","openRight","topLeft","topRight","botLeft","botRight","sFrom","sTo","fromLine","toLine","singleVLine","leftEnd","rightStart","restartBlink","focused","clearInterval","blinker","cursorBlinkRate","setInterval","ensureFocus","onFocus","delayBlurEvent","delayingBlurEvent","onBlur","readOnly","reset","receivedFocus","updateHeightsInViewport","prevBottom","updateWidgetHeight","w","visibleLines","viewport","ensure","ensureFrom","ensureTo","alignHorizontally","comp","gutterW","align","maybeUpdateLineNumberWidth","innerW","updateGutterSpace","calculateScrollPos","snapMargin","screentop","docBottom","atTop","atBottom","newTop","screenleft","screenw","tooWide","addToScrollTop","resolveScrollToPos","ensureCursorVisible","scrollToPos","margin","cursorScrollMargin","scrollToCoords","scrollToCoordsRange","sPos","updateScrollTop","updateDisplaySimple","setScrollTop","startWorker","forceScroll","scrollHeight","scrollbars","setScrollLeft","isScroller","scrollWidth","measureForScrollbars","docH","viewHeight","viewWidth","barLeft","docHeight","NativeScrollbars","vert","horiz","tabIndex","checkedZeroWidth","minHeight","minWidth","update","needsH","needsV","sWidth","totalHeight","totalWidth","zeroWidthHack","disableHoriz","enableZeroWidthBar","disableVert","pointerEvents","bar","delay","maybeDisable","elementFromPoint","NullScrollbars","updateScrollbars","startWidth","startHeight","updateScrollbarsInner","sizes","paddingBottom","borderBottom","coverGutterNextToScrollbar","scrollbarModel","native","null","initScrollbars","scrollbarStyle","axis","nextOpId","startOperation","op","viewChanged","updateInput","typing","changeObjs","cursorActivityCalled","selectionChanged","updateMaxLine","ops","ownsGroup","endOperation","endCb","group","callbacks","fireCallbacksForOps","finishOperation","endOperation_R1","updatedDisplay","mustUpdate","updateDisplayIfNeeded","endOperation_R2","endOperation_W2","endOperation_finish","endOperations","marginBottom","borderRightWidth","DisplayUpdate","barMeasure","adjustWidthTo","maxScrollLeft","preparedSelection","takeFocus","setDocumentHeight","postUpdateDisplay","doScroll","innerHeight","scrollNode","scrollIntoView","maybeScrollWindow","limit","changed","endCoords","scrollPos","startTop","startLeft","scrollPosIntoView","maybeHiddenMarkers","unhidden","maybeUnhiddenMarkers","finish","runInOp","methodOp","docMethodOp","regChange","lendiff","resetView","cut","viewCuttingPoint","cut$1","cutTop","cutBot","regLineChange","oldN","newN","countDirtyView","dirty","time","highlight","highlightWorker","Date","workTime","changedLines","oldStyles","highlighted","oldCls","newCls","ischange","workDelay","force","visible","editorIsHidden","wrapperHeight","oldDisplayWidth","events","viewportMargin","different","toUpdate","selSnapshot","hasFocus","active","anchorNode","extend","anchorOffset","focusNode","focusOffset","selectionSnapshot","updateNumbersFrom","container","rm","currentWheelTarget","updateNumber","patchDisplay","snapshot","removeAllRanges","addRange","restoreSelection","updateGutters","specs","gElt","setGuttersForLineNumbers","wheelSamples","wheelPixelsPerUnit","wheelEventDelta","dx","wheelDeltaX","dy","wheelDeltaY","detail","HORIZONTAL_AXIS","VERTICAL_AXIS","wheelDelta","wheelEventPixels","delta","onScrollWheel","canScrollX","canScrollY","pixels","movedX","movedY","sample","Selection","equals","there","deepCopy","Range","normalizeSelection","prim","sort","inv","simpleSelection","changeEnd","adjustForChange","computeSelAfterChange","offsetPos","loadMode","modeOption","resetModeState","isWholeLineUpdate","wholeLineUpdateBefore","updateDoc","estimateHeight$$1","spansFor","updateLine","linesFor","lastText","lastSpans","nlines","insert","remove","added","added$1","added$2","linkedDocs","sharedHistOnly","propagate","skip","sharedHist","linked","rel","shared","attachDoc","setDirectionClass","History","startGen","done","undone","undoDepth","lastModTime","lastSelTime","lastOp","lastSelOp","lastOrigin","lastSelOrigin","generation","maxGeneration","historyChangeFromChange","histChange","attachLocalSpans","clearSelectionEvents","pop","addChangeToHistory","selAfter","opId","hist","historyEventDelay","pushSelectionToHistory","addSelectionToHistory","clearRedo","dest","existing","removeClearedSpans","explicitlyCleared","mergeOldSpans","getOldSpans","stretched","oldCur","stretchCur","copyHistoryArray","newGroup","instantiateSel","event","newChanges","extendRange","posBefore","setSelection","extendSelections","heads","replaceOneSelection","setSimpleSelection","setSelectionReplaceHistory","setSelectionNoUndo","NaN","setSelectionInner","skipAtomicInSelection","reCheckSelection","mayClear","newAnchor","skipAtomic","newHead","skipAtomicInner","oldPos","atomic","near","movePos","far","cantEdit","selectAll","filterChange","canceled","cancel","makeChange","ignoreReadOnly","suppressEdits","mark","parts","mk","newParts","dfrom","dto","removeReadOnlyRanges","makeChangeInner","makeChangeSingleDoc","rebased","rebaseHist","makeChangeFromHistory","allowSelectionOnly","suppress","antiChanges","returned","v","shiftDoc","distance","removed","recomputeMaxLength","checkWidthStart","retreatFrontier","changesHandler","changeHandler","makeChangeSingleDocInEditor","assign","splitLines","rebaseHistSelSingle","rebaseHistArray","sub","ok","copied","changeLine","handle","changeType","LeafChunk","BranchChunk","removeInner","insertInner","iterN","oldHeight","remaining","leaf","maybeSpill","me","sibling","myIndex","used","LineWidget","adjustScrollWhenAboveVisible","this$1","oldH","nextMarkerId","TextMarker","cloneNode","isParent","SharedTextMarker","markTextShared","replacedWith","addToHistory","curLine","clearOnEnter","clearHistory","withOp","visual","dHeight","findSharedMarkers","findMarks","detachSharedMarkers","subMarker","nextDocId","Doc","lineSep","cleanGeneration","lineSeparator","setValue","getRange","getLineHandle","getLineNumber","getLineHandleVisualStart","lineCount","setCursor","extendSelectionsBy","addSelection","getSelections","dup","newSel","hint","oldPrev","newPrev","computeReplacedSel","undo","redo","undoSelection","redoSelection","setExtending","getExtending","historySize","markClean","changeGeneration","forceSplit","isClean","gen","getHistory","setHistory","histData","setGutterMarker","gutterID","clearGutter","lineInfo","addLineClass","where","removeLineClass","addLineWidget","insertAt","aboveVisible","removeLineWidget","setBookmark","realOpts","findMarksAt","getAllMarks","posFromIndex","sepSize","indexFromPos","copyHistory","linkedDoc","mFrom","mTo","subMark","copySharedMarkers","unlinkDoc","CodeMirror$1","splitIds","iterLinkedDocs","getEditor","setDirection","eachLine","lastDrop","onDrop","clearDragCursor","files","dataTransfer","isReadOnly","FileReader","File","read","loadFile","file","allowDropFileTypes","reader","onload","readAsText","draggingText","text$1","getData","dragCursor","forEachCodeMirror","getElementsByClassName","byClass","globalsRegistered","ensureGlobalHandlers","resizeTimer","onResize","setSize","keyNames","16","17","18","19","20","27","32","33","34","35","36","37","38","39","40","44","45","46","59","61","91","92","93","106","107","109","110","111","127","145","173","186","187","188","189","190","191","192","219","220","221","222","63232","63233","63234","63235","63272","63273","63275","63276","63277","63302","fromCharCode","keyMap","normalizeKeyName","alt","ctrl","cmd","normalizeKeyMap","keymap","keyname","keys","lookupKey","getKeyMap","fallthrough","isModifierKey","addModifierNames","noShift","altKey","metaKey","shiftKey","keyName","altGraphKey","deleteNearSelection","compute","kill","toKill","replaced","moveCharLogically","moveLogically","endOfLine","visually","prep","targetTop","basic","Left","Right","Up","Down","End","Home","PageUp","PageDown","Delete","Backspace","Shift-Backspace","Tab","Shift-Tab","Enter","Insert","Esc","pcDefault","Ctrl-A","Ctrl-D","Ctrl-Z","Shift-Ctrl-Z","Ctrl-Y","Ctrl-Home","Ctrl-End","Ctrl-Up","Ctrl-Down","Ctrl-Left","Ctrl-Right","Alt-Left","Alt-Right","Ctrl-Backspace","Ctrl-Delete","Ctrl-S","Ctrl-F","Ctrl-G","Shift-Ctrl-G","Shift-Ctrl-F","Shift-Ctrl-R","Ctrl-[","Ctrl-]","Ctrl-U","Shift-Ctrl-U","Alt-U","emacsy","Ctrl-B","Ctrl-P","Ctrl-N","Alt-F","Alt-B","Ctrl-E","Ctrl-V","Shift-Ctrl-V","Ctrl-H","Alt-D","Alt-Backspace","Ctrl-K","Ctrl-T","Ctrl-O","macDefault","Cmd-A","Cmd-D","Cmd-Z","Shift-Cmd-Z","Cmd-Y","Cmd-Home","Cmd-Up","Cmd-End","Cmd-Down","Cmd-Left","Cmd-Right","Ctrl-Alt-Backspace","Alt-Delete","Cmd-S","Cmd-F","Cmd-G","Shift-Cmd-G","Cmd-Alt-F","Shift-Cmd-Alt-F","Cmd-[","Cmd-]","Cmd-Backspace","Cmd-Delete","Cmd-U","Shift-Cmd-U","singleSelection","killLine","deleteLine","delLineLeft","delWrappedLineLeft","delWrappedLineRight","rightPos","goDocStart","goDocEnd","goLineStart","goLineStartSmart","lineStartSmart","goLineEnd","visualLineEnd","lineEnd","goLineRight","goLineLeft","goLineLeftSmart","goLineUp","moveV","goLineDown","goPageUp","goPageDown","goCharLeft","moveH","goCharRight","goColumnLeft","goColumnRight","goWordLeft","goGroupRight","goGroupLeft","goWordRight","delCharBefore","deleteH","delCharAfter","delWordBefore","delWordAfter","delGroupBefore","delGroupAfter","indentAuto","indentSelection","indentMore","indentLess","insertTab","insertSoftTab","spaces","defaultTab","execCommand","transposeChars","newlineAndIndent","sels","openLine","toggleOverwrite","firstNonWS","inWS","doHandleBinding","bound","dropShift","ensurePolled","prevShift","stopSeq","dispatchKey","seq","keySeq","dispatchKeyInner","keyMaps","extraKeys","lookupKeyForEditor","handleKeyBinding","motion","lastStoppedKey","onKeyDown","handled","up","showCrossHair","onKeyUp","charCode","lastClick","lastDoubleClick","PastClick","onMouseDown","supportsTouch","clickInGutter","now","repeat","compare","selectingText","handleMappedButton","contained","behavior","option","unit","addNew","moveOnDrag","configureMouse","dragDrop","moved","dragEnd","mouseMove","dragStart","e2","leftButtonStartDrag","ourRange","ourIndex","startSel","rangeForUnit","lastPos","extendTo","startCol","posCol","leftPos","oldRange","ranges$1","anchorLine","boundary","headIndex","usePart","bidiSimplify","editorSize","counter","move","buttons","curCount","leftButtonSelect","leftButtonDown","onContextMenu","findWordAt","gutterEvent","prevent","mX","mY","touches","lineBox","g","contextMenuInGutter","themeChanged","theme","defaults","optionHandlers","guttersChanged","dragDropChanged","funcs","dragFunctions","enter","over","leave","drop","wrappingChanged","inputStyles","inputStyle","pasteIncoming","cutIncoming","autofocus","word","touchFinished","prevTouch","finishTouch","farAway","touch","radiusX","radiusY","isMouseLikeTouchEvent","pageX","pageY","frag","onDragOver","setData","effectAllowed","setDragImage","img","src","_top","onDragStart","inp","getField","registerEventHandlers","finishInit","initHooks","textRendering","how","aggressive","curSpace","curSpaceString","indentUnit","indentString","indentWithTabs","pos$1","defineInitHook","lastCopied","setLastCopied","newLastCopied","applyTextInput","inserted","deleted","paste","textLines","multiPaste","pasteLinesPerSelection","lineWise","changeEvent","triggerElectric","handlePaste","pasted","clipboardData","disableInput","electricChars","smartIndent","getModeAt","electricInput","copyableRanges","lineRange","disableBrowserMagic","spellcheck","hiddenTextarea","border","findPosH","origDir","moveOnce","boundToLine","bidi","mv","getWrappedLineExtent","moveInStorageOrder","searchInVisualLine","getRes","res","nextCh","moveVisually","sawType","getHelper","hitSide","findPosV","pageSize","moveAmount","ContentEditableInput","lastAnchorNode","lastAnchorOffset","lastFocusNode","lastFocusOffset","polling","composing","gracePeriod","readDOMTimeout","posToDOM","badPos","bad","domToPos","lineNode","locateNodeInLineView","textNode","topNode","nodeValue","curNode","textContent","previousSibling","dist$1","onCopyCut","lineWiseCopyCut","clearData","kludge","hadFocus","showPrimarySelection","updateFromDOM","readFromDOMSoon","forceCompositionEnd","showMultipleSelections","curAnchor","curFocus","rng","rangeCount","getRangeAt","startGracePeriod","rememberSelection","selectionInEditor","commonAncestorContainer","pollSelection","pollInterval","poll","scan","isInGutter","triggerOnKeyDown","pollContent","fromIndex","fromNode","toNode","toIndex","newText","closing","extraLinebreak","addText","walk","cmText","markerID","isBlock","nodeName","domTextBetween","oldText","cutFront","cutEnd","oldTop","maxCutFront","newBot","oldBot","maxCutEnd","chFrom","chTo","contentEditable","readOnlyChanged","resetPosition","helpers","TextareaInput","prevInput","pollingFast","createField","textarea","prepareCopyCut","fastPoll","_display","moveInputWithCursor","headPos","wrapOff","lineOff","teTop","teLeft","drawn","contextMenuPending","slowPoll","missed","same","resetSelectionOnContextMenu","oldCSS","oldWrapperCSS","oldScrollY","wrapperBox","scrollY","scrollTo","detectingSelectAll","prepareSelectAllHack","mouseup","rehide","extval","disabled","deflt","notOnInit","newBreaks","refresh","getInputField","detach","attach","integer","defineOptions","setOption","getDoc","addOverlay","score","priority","insertSorted","modeSpec","removeOverlay","newRanges","getLineTokens","getHelpers","help","_global","getStateAfter","defaultTextHeight","defaultCharWidth","addWidget","vspace","hspace","triggerOnKeyPress","triggerOnKeyUp","triggerOnMouseDown","amount","rtlMoveVisually","goalColumn","goals","startChar","check","getScrollInfo","interpret","swapDoc","getWrapperElement","getScrollerElement","getGutterElement","registerGlobalHelper","predicate","dontDelegate","method","contenteditable","defineMode","dependencies","defineMIME","mime","defineExtension","defineDocExtension","tabindex","realSubmit","form","leaveSubmitMethodAlone","submit","wrappedSubmit","getTextArea","toTextArea","cmpPos","version","15","keySet","config","parserConfig","inline","propertyKeywords","tokenHooks","documentTypes","mediaTypes","mediaFeatures","mediaValueKeywords","nonStandardPropertyKeywords","fontProperties","counterDescriptors","colorKeywords","valueKeywords","allowNested","lineComment","supportsAtComponent","ret","tp","tokenString","quote","escaped","tokenize","tokenParenthesized","pushContext","popContext","pass","states","popAndPass","wordAsValue","stateArg","block","maybeprop","propBlock","_stream","parens","pseudo","atBlock","atComponentBlock","atBlock_parens","restricted_atBlock_before","restricted_atBlock","keyframes","interpolation","textAfter","blockCommentStart","blockCommentEnd","blockCommentContinue","fold","documentTypes_","mediaTypes_","mediaFeatures_","mediaValueKeywords_","propertyKeywords_","nonStandardPropertyKeywords_","colorKeywords_","valueKeywords_","allWords","tokenCComment","maybeEnd","/",":","$","#","@","&","defaultTags","script","attrRegexpCache","getAttrValue","getTagRegexp","anchored","addTags","multilineTagIndentFactor","multilineTagIndentPastTag","tags","configTags","configScript","scriptTypes","matches","htmlState","inTag","tagInfo","tagText","findMatchingMode","endTagA","endTag","localState","localMode","pat","local","../css/css","../javascript/javascript","../xml/xml","statementIndent","jsonldMode","jsonld","jsonMode","json","isTS","typescript","wordRE","wordCharacters","keywords","kw","A","B","C","D","operator","atom","if","while","with","else","do","try","finally","return","break","continue","new","void","throw","debugger","var","const","let","function","catch","switch","case","in","typeof","instanceof","true","false","super","yield","export","import","extends","await","isOperatorChar","isJsonldKeyword","cont","tokenBase","tokenComment","expressionAllowed","inSet","readRegexp","tokenQuasi","lexical","lastType","propertyIsEnumerable","brackets","findFatArrow","fatArrowAt","arrow","depth","sawSomething","bracket","atomicTypes","number","variable","regexp","jsonld-keyword","JSLexical","inScope","varname","localVars","vars","marked","cc","inList","register","newContext","registerVarScoped","Var","globalVars","isModifier","defaultVars","pushcontext","pushblockcontext","popcontext","pushlex","lex","poplex","expect","wanted","exp","statement","vardef","parenExpr","maybeexpression","maybeelse","functiondef","forspec","enumdef","typeexpr","expression","maybelabel","maybeCatchBinding","afterExport","afterImport","funarg","expressionInner","expressionNoComma","noComma","arrowBodyNoComma","arrowBody","commasep","maybeop","maybeoperatorNoComma","maybeoperatorComma","classExpression","arrayLiteral","contCommasep","objprop","quasi","targetNoComma","maybeTypeArgs","expr","continueQuasi","_","getterSetter","afterprop","maybetype","what","sep","proceed","mayberettype","isKW","afterType","typeprop","typearg","maybeReturnType","typeparam","maybeTypeDefault","maybeAssign","vardefCont","proppattern","_type","forspec1","forspec2","formaybeinof","forspec3","classNameAfter","classBody","classfield","maybeFrom","exportField","importSpec","maybeMoreImports","maybeAs","enummember","basecolumn","parseJS","firstChar","doubleIndentSwitch","closeBrackets","skipExpression","htmlConfig","autoSelfClosers","area","br","command","embed","frame","hr","keygen","link","meta","param","track","wbr","menuitem","implicitlyClosed","dd","li","optgroup","rp","tbody","td","tfoot","tr","contextGrabbers","dt","address","article","aside","blockquote","dl","fieldset","footer","h1","h2","h3","h4","h5","h6","header","hgroup","menu","nav","ol","section","table","ul","thead","doNotIndent","allowUnquoted","allowMissing","caseFold","xmlConfig","allowMissingTagName","editorConf","config_","setStyle","inText","chain","parser","inBlock","doctype","closure","baseState","tagStart","isInAttribute","stringStartCol","terminator","startOfLine","noIndent","maybePopContext","nextTagName","parentTagName","tagNameState","closeTagNameState","attrState","matchClosing","closeState","closeStateErr","attrEqState","attrValueState","attrContinuedState","isInText","baseIndent","fullLine","alignCDATA","tagAfter","grabbers","skipAttribute","EMPTY","HOP","fns","fn","opts","timer","_len2","_key2","_ref","memoize","multiMethod","_len","_key","caseSensitive","deco","decorate","_len3","_key3","__lsc","dlv","21","shallow","attributes","renderRootComponent","defaultProps","_disable","__x","componentWillMount","getChildContext","shallowHighOrder","displayName","Function","O","S","sortAttributes","allAttributes","H","attributeHook","__html","xml","N","L","M","R","F","P","T","substring","shallowRender","preactRenderToString","22","lastSimple","simple","EMPTY_CHILDREN","VNode","vnode","enqueueRender","component","__d","items","debounceRendering","defer","rerender","renderComponent","isNamedNode","__n","getNodeProps","removeNode","setAccessor","isSvg","IS_NON_DIMENSIONAL","useCapture","eventProxy","__l","removeAttribute","ns","removeAttributeNS","setAttributeNS","flushMounts","mounts","afterMount","componentDidMount","mountAll","componentRoot","diffLevel","isSvgMode","ownerSVGElement","hydrating","idiff","prevSvgMode","splitText","_component","recollectNodeTree","__preactattr_","vnodeName","originalComponent","oldDom","isDirectOwner","_componentConstructor","isOwner","__u","setComponentProps","unmountComponent","createComponent","__b","buildComponentFromVNode","createElementNS","fc","vchildren","isHydrating","vchild","originalChildren","keyed","keyedLen","childrenLen","vlen","_child","__k","trim","innerDiffNode","dangerouslySetInnerHTML","attrs","diffAttributes","unmountOnly","Ctor","recyclerComponents","doRender","renderMode","__r","getDerivedStateFromProps","componentWillReceiveProps","__c","__p","syncComponentUpdates","isChild","rendered","cbase","previousProps","previousState","__s","previousContext","isUpdate","nextBase","initialBase","initialChildComponent","shouldComponentUpdate","componentWillUpdate","getSnapshotBeforeUpdate","toUnmount","childComponent","childProps","baseParent","componentRef","componentDidUpdate","afterUpdate","__h","beforeUnmount","componentWillUnmount","Promise","resolve","then","callback","cloneElement","merge","23","getTooltipOpts","isAuto","fallbackAttrib","tooltip","tooltipEl","showTimer","autoHide","hide","fadeIn","grav","vertGrav","horzGrav","positionTooltip","tooltipHeight","tooltipWidth","centerEl","innerWidth","createTooltip","isAutoHiding","Tooltip"],"mappings":"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","file":"admin.min.js","sourcesContent":["(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction init() {\n document.body.addEventListener('click', handleClickEvent, true);\n}\n\nfunction handleClickEvent(e) {\n if (e.target.tagName !== 'A') {\n return;\n }\n\n if (e.target.hasAttribute('data-hf-confirm')) {\n var sure = confirm(e.target.getAttribute('data-hf-confirm'));\n\n if (!sure) {\n e.preventDefault();\n }\n }\n}\n\nexports.default = {\n init: init\n};\n\n},{}],2:[function(require,module,exports){\n'use strict';\n\nvar _tabs = require('./tabs.js');\n\nvar _tabs2 = _interopRequireDefault(_tabs);\n\nvar _formEditor = require('./form-editor.js');\n\nvar _formEditor2 = _interopRequireDefault(_formEditor);\n\nvar _formActions = require('./form-actions.js');\n\nvar _formActions2 = _interopRequireDefault(_formActions);\n\nvar _fieldBuilder = require('./field-builder.js');\n\nvar _fieldBuilder2 = _interopRequireDefault(_fieldBuilder);\n\nvar _actionConfirmations = require('./action-confirmations.js');\n\nvar _actionConfirmations2 = _interopRequireDefault(_actionConfirmations);\n\nvar _tlite = require('tlite');\n\nvar _tlite2 = _interopRequireDefault(_tlite);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nwindow.html_forms = {};\n\n// init the various components\n_tabs2.default.init();\n_actionConfirmations2.default.init();\n\nif (document.getElementById('hf-form-editor')) {\n _formEditor2.default.init();\n _formActions2.default.init();\n _fieldBuilder2.default.init(_formEditor2.default);\n}\n\n(0, _tlite2.default)(function (el) {\n return el.className.indexOf('hf-tooltip') > -1;\n});\n\nwindow.html_forms.FieldBuilder = _fieldBuilder2.default;\nwindow.html_forms.Editor = _formEditor2.default;\n\n// tell WP common.js to override the method used for determining hidden columns (screen options)\nif (hf_options.view === 'edit') {\n window.columns.useCheckboxesForHidden();\n}\n\n},{\"./action-confirmations.js\":1,\"./field-builder.js\":6,\"./form-actions.js\":8,\"./form-editor.js\":9,\"./tabs.js\":10,\"tlite\":23}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldBuilder = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _desc, _value, _class;\n\nvar _preact = require('preact');\n\nvar _decko = require('decko');\n\nvar _fieldConfigurator = require('./field-configurator.js');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nvar FieldBuilder = (_class = function (_Component) {\n _inherits(FieldBuilder, _Component);\n\n function FieldBuilder(props) {\n _classCallCheck(this, FieldBuilder);\n\n var _this = _possibleConstructorReturn(this, (FieldBuilder.__proto__ || Object.getPrototypeOf(FieldBuilder)).call(this, props));\n\n _this.state = {\n activeField: null\n };\n return _this;\n }\n\n _createClass(FieldBuilder, [{\n key: 'handleCancel',\n value: function handleCancel() {\n this.setState({\n activeField: null\n });\n }\n }, {\n key: 'openFieldConfig',\n value: function openFieldConfig(e) {\n var field = this.props.fields[e.target.value];\n\n if (this.state.activeField === field) {\n this.setState({ activeField: null });\n } else {\n this.setState({ activeField: field });\n }\n }\n }, {\n key: 'render',\n value: function render(props, state) {\n var _this2 = this;\n\n var fieldButtons = props.fields.map(function (f, i) {\n return (0, _preact.h)(\n 'button',\n { type: 'button', value: i, className: \"button \" + (state.activeField === f ? \"active\" : \"\"), onClick: _this2.openFieldConfig },\n f.label\n );\n });\n var fieldType = state.activeField ? state.activeField.key : \"\";\n var rows = state.activeField ? state.activeField.configRows : [];\n\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-field-builder' },\n (0, _preact.h)(\n 'h4',\n null,\n 'Add field'\n ),\n (0, _preact.h)(\n 'div',\n { 'class': 'available-fields' },\n fieldButtons\n ),\n (0, _preact.h)(\n 'div',\n { style: 'max-width: 480px;' },\n (0, _preact.h)(_fieldConfigurator.FieldConfigurator, { fieldType: fieldType, rows: rows, onCancel: this.handleCancel })\n ),\n state.activeField === null ? (0, _preact.h)(\n 'p',\n { 'class': 'help', style: 'margin-bottom: 0;' },\n 'Use the buttons above to generate your field HTML, or manually modify your form below.'\n ) : \"\"\n );\n }\n }]);\n\n return FieldBuilder;\n}(_preact.Component), (_applyDecoratedDescriptor(_class.prototype, 'handleCancel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'handleCancel'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'openFieldConfig', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'openFieldConfig'), _class.prototype)), _class);\nexports.FieldBuilder = FieldBuilder;\n\n},{\"./field-configurator.js\":4,\"decko\":19,\"preact\":22}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FieldConfigurator = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _desc, _value, _class;\n\nvar _preact = require('preact');\n\nvar _decko = require('decko');\n\nvar _html = require('../field-builder/html.js');\n\nvar _fieldSettings = require('./field-settings.js');\n\nvar FS = _interopRequireWildcard(_fieldSettings);\n\nvar _linkstate = require('linkstate');\n\nvar _linkstate2 = _interopRequireDefault(_linkstate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object['ke' + 'ys'](descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n\n if (desc.initializer === void 0) {\n Object['define' + 'Property'](target, property, desc);\n desc = null;\n }\n\n return desc;\n}\n\nvar FieldConfigurator = (_class = function (_Component) {\n _inherits(FieldConfigurator, _Component);\n\n function FieldConfigurator(props) {\n _classCallCheck(this, FieldConfigurator);\n\n var _this = _possibleConstructorReturn(this, (FieldConfigurator.__proto__ || Object.getPrototypeOf(FieldConfigurator)).call(this, props));\n\n _this.state = _this.getInitialState();\n _this.choiceHandlers = {\n \"add\": _this.addChoice,\n \"delete\": _this.deleteChoice,\n \"changeLabel\": _this.changeChoiceLabel,\n \"toggleChecked\": _this.toggleChoiceChecked\n };\n return _this;\n }\n\n _createClass(FieldConfigurator, [{\n key: 'getInitialState',\n value: function getInitialState() {\n return {\n formId: document.querySelector('input[name=\"form_id\"]').value,\n formSlug: document.querySelector('input[name=\"form[slug]\"]').value,\n fieldType: \"\",\n fieldLabel: \"\",\n placeholder: \"\",\n value: \"\",\n wrap: true,\n required: false,\n choices: [{\n checked: false,\n label: \"One\"\n }, {\n checked: false,\n label: \"Two\"\n }],\n accept: ''\n };\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(props) {\n var newState = { fieldType: props.fieldType };\n\n // when changing from field that accepts multiple values to single-value field, reset all pre-selections \n if (this.state.fieldType === 'checkbox' && props.fieldType !== 'checkbox') {\n newState.choices = this.state.choices.map(function (c, i) {\n c.checked = false;\n return c;\n });\n }\n this.setState(newState);\n }\n }, {\n key: 'addToForm',\n value: function addToForm() {\n var html = (0, _html.htmlgenerate)(this.state);\n html_forms.Editor.replaceSelection(html);\n }\n }, {\n key: 'addChoice',\n value: function addChoice() {\n var arr = this.state.choices;\n arr.push({ checked: false, label: \"...\" });\n this.setState({ choices: arr });\n }\n }, {\n key: 'deleteChoice',\n value: function deleteChoice(e) {\n var arr = this.state.choices;\n var index = e.target.parentElement.getAttribute('data-key');\n arr.splice(index, 1);\n this.setState({ choices: arr });\n }\n }, {\n key: 'changeChoiceLabel',\n value: function changeChoiceLabel(e) {\n var arr = this.state.choices;\n var index = e.target.parentElement.getAttribute('data-key');\n arr[index].label = e.target.value;\n this.setState({ choices: arr });\n }\n }, {\n key: 'toggleChoiceChecked',\n value: function toggleChoiceChecked(e) {\n var arr = this.state.choices;\n var index = e.target.parentElement.getAttribute('data-key');\n arr[index].checked = !arr[index].checked;\n this.setState({ choices: arr });\n }\n }, {\n key: 'handleCancel',\n value: function handleCancel() {\n // revert back to initial state\n this.setState(this.getInitialState());\n this.props.onCancel();\n }\n }, {\n key: 'render',\n value: function render(props, state) {\n if (props.rows.length == 0) {\n return \"\";\n }\n\n var formFields = [];\n\n for (var i = 0; i < props.rows.length; i++) {\n switch (props.rows[i]) {\n case \"label\":\n formFields.push((0, _preact.h)(FS.Label, { value: state.fieldLabel, onChange: (0, _linkstate2.default)(this, 'fieldLabel') }));\n break;\n\n case \"placeholder\":\n formFields.push((0, _preact.h)(FS.Placeholder, { value: state.placeholder, onChange: (0, _linkstate2.default)(this, 'placeholder') }));\n break;\n\n case \"default-value\":\n formFields.push((0, _preact.h)(FS.DefaultValue, { value: state.value, onChange: (0, _linkstate2.default)(this, 'value') }));\n break;\n\n case \"required\":\n formFields.push((0, _preact.h)(FS.Required, { checked: state.required, onChange: (0, _linkstate2.default)(this, 'required') }));\n break;\n\n case \"wrap\":\n formFields.push((0, _preact.h)(FS.Wrap, { checked: state.wrap, onChange: (0, _linkstate2.default)(this, 'wrap') }));\n break;\n\n case \"add-to-form\":\n formFields.push((0, _preact.h)(FS.AddToForm, { onSubmit: this.addToForm, onCancel: this.handleCancel }));\n break;\n\n case \"choices\":\n formFields.push((0, _preact.h)(FS.Choices, { multiple: state.fieldType === 'checkbox', choices: state.choices, handlers: this.choiceHandlers }));\n break;\n\n case \"button-text\":\n formFields.push((0, _preact.h)(FS.ButtonText, { value: state.value, onChange: (0, _linkstate2.default)(this, 'value') }));\n break;\n\n case \"accept\":\n formFields.push((0, _preact.h)(FS.Accept, { value: state.accept, onChange: (0, _linkstate2.default)(this, 'accept') }));\n break;\n\n }\n }\n\n return (0, _preact.h)(\n 'div',\n { 'class': 'field-config', onKeyPress: FieldConfigurator.handleKeyPress },\n formFields\n );\n }\n }], [{\n key: 'handleKeyPress',\n value: function handleKeyPress(e) {\n // stop RETURN from submitting the parent form.\n if (e.keyCode === 13) {\n e.preventDefault();\n }\n }\n }]);\n\n return FieldConfigurator;\n}(_preact.Component), (_applyDecoratedDescriptor(_class.prototype, 'addToForm', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'addToForm'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'addChoice', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'addChoice'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'deleteChoice', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'deleteChoice'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'changeChoiceLabel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'changeChoiceLabel'), _class.prototype), _applyDecoratedDescriptor(_class.prototype, 'toggleChoiceChecked', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'toggleChoiceChecked'), _class.prototype), _applyDecoratedDescriptor(_class, 'handleKeyPress', [_decko.bind], Object.getOwnPropertyDescriptor(_class, 'handleKeyPress'), _class), _applyDecoratedDescriptor(_class.prototype, 'handleCancel', [_decko.bind], Object.getOwnPropertyDescriptor(_class.prototype, 'handleCancel'), _class.prototype)), _class);\nexports.FieldConfigurator = FieldConfigurator;\n\n},{\"../field-builder/html.js\":7,\"./field-settings.js\":5,\"decko\":19,\"linkstate\":20,\"preact\":22}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Accept = exports.ButtonText = exports.Choices = exports.Required = exports.Wrap = exports.DefaultValue = exports.Placeholder = exports.Label = exports.AddToForm = undefined;\n\nvar _preact = require('preact');\n\nfunction AddToForm(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'button',\n { 'class': 'button', type: 'button', onClick: props.onSubmit },\n 'Add field to form'\n ),\n ' \\xA0 ',\n (0, _preact.h)(\n 'a',\n { href: 'javascript:void(0);', 'class': 'hf-small', style: 'vertical-align: middle;', onClick: props.onCancel },\n 'or close field helper'\n )\n );\n}\n\nfunction Label(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-field-label' },\n 'Field label ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-required' },\n '*'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-field-label', type: 'text', value: props.value, onChange: props.onChange })\n );\n}\n\nfunction Placeholder(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-placeholder' },\n 'Placeholder ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-italic hf-pull-right' },\n 'Optional'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-placeholder', type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Text to show when field has no value.'\n )\n );\n}\n\nfunction ButtonText(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-default-value' },\n 'Button text ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-required' },\n '*'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-default-value', type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Text to show on the button.'\n )\n );\n}\n\nfunction DefaultValue(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'for': 'hf-fg-default-value' },\n 'Default value ',\n (0, _preact.h)(\n 'span',\n { 'class': 'hf-italic hf-pull-right' },\n 'Optional'\n )\n ),\n (0, _preact.h)('input', { id: 'hf-fg-default-value', type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Text to pre-fill this field with.'\n )\n );\n}\n\nfunction Wrap(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'class': 'inline' },\n (0, _preact.h)('input', { type: 'checkbox', value: '1', defaultChecked: props.checked, onChange: props.onChange }),\n 'Wrap this field in paragraph tags.'\n )\n );\n}\n\nfunction Required(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n { 'class': 'inline' },\n (0, _preact.h)('input', { type: 'checkbox', value: '1', defaultChecked: props.checked, onChange: props.onChange }),\n 'This field is required.'\n )\n );\n}\n\nfunction Choices(props) {\n var choiceFields = props.choices.map(function (choice, k) {\n return (0, _preact.h)(\n 'div',\n { 'data-key': k },\n (0, _preact.h)('input', { type: props.multiple ? \"checkbox\" : \"radio\", name: 'selected', defaultChecked: choice.checked, onChange: props.handlers.toggleChecked, title: 'Pre-select this choice?' }),\n (0, _preact.h)('input', { type: 'text', value: choice.label, placeholder: 'Choice label', style: 'width: 80%;', onChange: props.handlers.changeLabel }),\n (0, _preact.h)(\n 'a',\n { href: 'javascript:void(0);', onClick: props.handlers.delete, style: 'text-decoration: none;', title: 'Delete choice' },\n '\\u2715'\n )\n );\n });\n\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n null,\n 'Choices'\n ),\n choiceFields,\n (0, _preact.h)('input', { type: props.multiple ? \"checkbox\" : \"radio\", style: 'visibility: hidden;' }),\n (0, _preact.h)(\n 'a',\n { href: 'javascript:void(0);', onClick: props.handlers.add },\n 'Add choice'\n )\n );\n}\n\nfunction Accept(props) {\n return (0, _preact.h)(\n 'div',\n { 'class': 'hf-small-margin' },\n (0, _preact.h)(\n 'label',\n null,\n 'Accepted file types'\n ),\n (0, _preact.h)('input', { type: 'text', value: props.value, onChange: props.onChange }),\n (0, _preact.h)(\n 'p',\n { 'class': 'help' },\n 'Use a comma-separated list of accepted file extensions, eg ',\n (0, _preact.h)(\n 'code',\n null,\n '.pdf'\n ),\n '. ',\n (0, _preact.h)('br', null),\n 'Leave empty to accept any file type.'\n )\n );\n}\n\nexports.AddToForm = AddToForm;\nexports.Label = Label;\nexports.Placeholder = Placeholder;\nexports.DefaultValue = DefaultValue;\nexports.Wrap = Wrap;\nexports.Required = Required;\nexports.Choices = Choices;\nexports.ButtonText = ButtonText;\nexports.Accept = Accept;\n\n},{\"preact\":22}],6:[function(require,module,exports){\n'use strict';\n\n// imports\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _preact = require('preact');\n\nvar _fieldBuilder = require('./components/field-builder.js');\n\n// vars\nvar rootElement = void 0;\nvar Editor = void 0;\nvar fields = void 0;\n\n// functions\nfunction Field(key, label, configRows) {\n this.key = key;\n this.label = label;\n this.configRows = configRows || [];\n}\n\nfunction mount() {\n rootElement = (0, _preact.render)((0, _preact.h)(_fieldBuilder.FieldBuilder, { fields: fields }), document.getElementById('hf-field-builder'), rootElement);\n}\n\n// bootstrap\nfields = [new Field(\"text\", \"Text\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"email\", \"Email\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"url\", \"URL\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"number\", \"Number\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"date\", \"Date\", [\"label\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"textarea\", \"Textarea\", [\"label\", \"placeholder\", \"default-value\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"dropdown\", \"Dropdown\", [\"label\", \"choices\", \"required\", \"wrap\", \"add-to-form\"]), new Field(\"checkbox\", \"Checkboxes\", [\"label\", \"choices\", \"wrap\", \"add-to-form\"]), new Field(\"radio\", \"Radio buttons\", [\"label\", \"choices\", \"wrap\", \"add-to-form\"]), new Field(\"submit\", \"Submit button\", [\"button-text\", \"wrap\", \"add-to-form\"])];\n\nexports.default = {\n init: function init() {\n mount();\n },\n\n registerField: function registerField(key, label, configRows) {\n fields.push(new Field(key, label, configRows));\n mount();\n }\n};\n\n},{\"./components/field-builder.js\":3,\"preact\":22}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.htmlgenerate = undefined;\n\nvar _preactRenderToString = require('preact-render-to-string');\n\nvar _preactRenderToString2 = _interopRequireDefault(_preactRenderToString);\n\nvar _preact = require('preact');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction htmlgenerate(conf) {\n var fieldName = namify(conf.fieldLabel);\n var fieldId = conf.formSlug + '-' + fieldName;\n var label = conf.fieldLabel.length && conf.fieldType !== 'submit' ? (0, _preact.h)(\"label\", {\n \"for\": fieldId\n }, conf.fieldLabel) : \"\";\n var fieldAttr = void 0,\n field = void 0;\n\n switch (conf.fieldType) {\n case \"text\":\n default:\n fieldAttr = {\n type: conf.fieldType,\n name: fieldName,\n value: conf.value,\n placeholder: conf.placeholder,\n required: conf.required,\n id: fieldId\n };\n field = html(\"input\", fieldAttr);\n break;\n case \"textarea\":\n fieldAttr = {\n name: fieldName,\n placeholder: conf.placeholder,\n required: conf.required,\n id: fieldId\n };\n field = html(\"textarea\", fieldAttr, conf.value);\n break;\n\n case \"dropdown\":\n fieldAttr = {\n name: fieldName,\n required: conf.required,\n id: fieldId\n };\n var opts = conf.choices.map(function (choice) {\n return html(\"option\", { selected: choice.checked }, choice.label);\n });\n field = html(\"select\", fieldAttr, opts);\n break;\n\n case \"radio\":\n field = conf.choices.map(function (choice) {\n return html(\"label\", {}, [html(\"input\", {\n type: \"radio\",\n name: fieldName,\n value: choice.label,\n selected: choice.checked\n }), \" \", html(\"span\", {}, choice.label)]);\n });\n break;\n\n case \"checkbox\":\n field = conf.choices.map(function (choice) {\n return html(\"label\", {}, [html(\"input\", {\n type: \"checkbox\",\n name: fieldName + \"[]\",\n value: choice.label,\n checked: choice.checked\n }), \" \", html(\"span\", {}, choice.label)]);\n });\n break;\n\n case \"file\":\n fieldAttr = {\n type: \"file\",\n name: fieldName,\n required: conf.required,\n id: fieldId\n };\n\n if (conf['accept']) {\n fieldAttr['accept'] = conf['accept'];\n }\n\n field = html(\"input\", fieldAttr);\n break;\n\n case \"submit\":\n fieldAttr = {\n type: \"submit\",\n value: conf.value\n };\n field = html(\"input\", fieldAttr);\n break;\n\n }\n\n var str = \"\";\n if (conf.wrap) {\n var tmpl = (0, _preact.h)(\"p\", {}, [label, field]);\n str = (0, _preactRenderToString2.default)(tmpl, null, { pretty: true });\n } else {\n str += (0, _preactRenderToString2.default)(label, null, { pretty: true });\n str += \"\\n\";\n str += (0, _preactRenderToString2.default)(field, null, { pretty: true });\n }\n\n return str;\n}\n\nfunction html(tag, attr, children) {\n return (0, _preact.h)(tag, filterEmptyObjectValues(attr), children);\n}\n\nfunction namify(str) {\n return str.replace(/ /g, '_').replace(/[^\\w\\[\\]_]*/g, \"\").toUpperCase();\n}\n\nfunction filterEmptyObjectValues(obj) {\n var newObj = {};\n for (var propName in obj) {\n if (obj[propName] !== false && obj[propName] !== \"\") {\n newObj[propName] = obj[propName];\n }\n }\n return newObj;\n}\n\nexports.htmlgenerate = htmlgenerate;\n\n},{\"preact\":22,\"preact-render-to-string\":21}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar availableActions = void 0,\n actionTemplates = void 0,\n actions = void 0;\n\nfunction init() {\n actions = document.getElementById('hf-form-actions');\n availableActions = document.getElementById('hf-available-form-actions');\n actionTemplates = document.getElementById('hf-form-action-templates');\n\n // turn settings into accordions\n [].forEach.call(actions.querySelectorAll('.hf-action-settings'), function (el) {\n el.parentNode.removeChild(el);\n\n var heading = el.getAttribute('data-title');\n var summary = el.querySelector('.hf-action-summary');\n if (summary) {\n heading += ' — <span class=\"hf-muted\">' + summary.innerHTML + '</span>';\n }\n var wrap = createAccordion(heading, el.innerHTML);\n actions.appendChild(wrap);\n\n actions.querySelector('#hf-form-actions-empty').style.display = 'none';\n });\n\n availableActions.addEventListener('click', addAction, true);\n}\n\nfunction createAccordion(headingHTML, contentHTML) {\n var wrap = document.createElement('div');\n wrap.className = \"hf-accordion expanded \";\n\n var heading = document.createElement('h4');\n heading.className = \"hf-accordion-heading\";\n heading.innerHTML = headingHTML;\n wrap.appendChild(heading);\n\n var content = document.createElement('div');\n content.className = \"hf-accordion-content\";\n content.innerHTML = contentHTML;\n wrap.appendChild(content);\n\n var deleteWrap = document.createElement('p');\n deleteWrap.style.textAlign = 'right';\n var deleteLink = document.createElement('a');\n deleteLink.href = 'javascript:void(0);';\n deleteLink.className = \"danger\";\n deleteLink.innerText = 'Delete this action';\n deleteWrap.appendChild(deleteLink);\n content.appendChild(deleteWrap);\n\n // bind handlers\n heading.addEventListener('click', createToggleActionHandler(wrap, content));\n deleteLink.addEventListener('click', createDeleteActionHandler(wrap));\n return wrap;\n}\n\nfunction addAction(e) {\n var el = e.target || e.srcElement;\n if (el.tagName !== 'INPUT') {\n return;\n }\n\n var actionType = el.getAttribute('data-action-type');\n var actionTemplate = actionTemplates.querySelector('#hf-action-type-' + actionType + '-template');\n\n // append HTML to actions wrapper\n var index = actions.querySelectorAll('div').length - 1;\n var wrap = createAccordion(el.value, actionTemplate.innerHTML.replace(/\\$index/g, index));\n actions.appendChild(wrap);\n\n // hide \"no form actions\" message\n actions.querySelector('#hf-form-actions-empty').style.display = 'none';\n}\n\nfunction createDeleteActionHandler(wrap) {\n return function () {\n actions.removeChild(wrap);\n\n if (actions.childElementCount === 1) {\n actions.querySelector('#hf-form-actions-empty').style.display = '';\n }\n };\n}\n\nfunction createToggleActionHandler(wrap, content) {\n return function () {\n var show = content.offsetParent === null;\n wrap.className = wrap.className.replace('expanded', '') + (show ? ' expanded' : '');\n content.style.display = show ? 'block' : 'none';\n };\n}\n\nexports.default = { init: init };\n\n},{}],9:[function(require,module,exports){\n'use strict';\n\n// load CodeMirror & plugins\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar CodeMirror = require('codemirror');\nrequire('codemirror/mode/xml/xml');\nrequire('codemirror/mode/javascript/javascript');\nrequire('codemirror/mode/css/css');\nrequire('codemirror/mode/htmlmixed/htmlmixed');\nrequire('codemirror/addon/fold/xml-fold');\nrequire('codemirror/addon/edit/matchtags');\nrequire('codemirror/addon/edit/closetag.js');\n\nvar editor = void 0,\n element = void 0,\n dom = void 0,\n requiredFieldsInput = void 0,\n emailFieldsInput = void 0,\n previewFrame = void 0,\n previewDom = void 0;\nvar templateRegex = /\\{\\{ *(\\w+)(?:\\.([\\w\\.]+))? *(?:\\|\\| *(\\w+))? *\\}\\}/g;\n\nfunction init() {\n previewFrame = document.getElementById('hf-form-preview');\n element = document.getElementById('hf-form-editor');\n dom = document.createElement('form');\n requiredFieldsInput = document.getElementById('hf-required-fields');\n emailFieldsInput = document.getElementById('hf-email-fields');\n\n dom.innerHTML = element.value;\n editor = CodeMirror.fromTextArea(element, {\n selectionPointer: true,\n matchTags: { bothTags: true },\n mode: \"htmlmixed\",\n htmlMode: true,\n autoCloseTags: true,\n autoRefresh: true,\n styleActiveLine: true,\n matchBrackets: true\n });\n\n editor.on('changes', debounce(updatePreview, 500));\n editor.on('changes', debounce(updateShadowDOM, 100));\n editor.on('changes', debounce(updateFieldVariables, 500));\n editor.on('blur', updatePreview);\n editor.on('blur', updateShadowDOM);\n editor.on('blur', updateFieldVariables);\n editor.on('blur', updateRequiredFields);\n editor.on('blur', updateEmailFields);\n\n previewFrame.addEventListener('load', setPreviewDom);\n setPreviewDom();\n updateFieldVariables();\n}\n\nfunction setPreviewDom() {\n var frameContent = previewFrame.contentDocument || previewFrame.contentWindow.document;\n previewDom = frameContent.querySelector('.hf-fields-wrap');\n\n if (previewDom) {\n updatePreview();\n }\n}\n\nfunction getFieldVariableName(f) {\n return f.name.replace('[]', '').replace(/\\[(\\w+)\\]/g, '.$1');\n}\n\nfunction updateFieldVariables() {\n var fields = dom.querySelectorAll('input[name], select[name], textarea[name], button[name]');\n var fieldVariables = uniq([].map.call(fields, function (f) {\n return '[' + getFieldVariableName(f) + ']';\n }));\n var wpbody = document.getElementById('wpbody-content');\n\n [].forEach.call(document.querySelectorAll('.hf-field-names'), function (el) {\n // remove existing variables\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n\n var variableElements = fieldVariables.map(function (n) {\n // measure width of actual font size for prettiness\n var sizeEl = document.createElement('span');\n sizeEl.style.visibility = 'hidden';\n sizeEl.innerText = n;\n wpbody.appendChild(sizeEl);\n var width = sizeEl.offsetWidth;\n wpbody.removeChild(sizeEl);\n\n // add input el\n var el = document.createElement('input');\n el.setAttribute('type', 'text');\n el.style.maxWidth = width * 1.1 + 14 + 'px';\n el.setAttribute('value', n);\n el.setAttribute('readonly', true);\n el.setAttribute('onfocus', 'this.select()');\n return el;\n });\n\n variableElements.forEach(function (vel, i, arr) {\n el.appendChild(vel);\n });\n });\n}\n\nfunction updatePreview() {\n var markup = editor.getValue();\n\n // replace template tags\n markup = markup.replace(templateRegex, function (s, m) {\n if (arguments[3]) {\n return arguments[3];\n }\n\n return '';\n });\n\n // update dom\n previewDom.innerHTML = markup;\n previewDom.dispatchEvent(new Event('hf-refresh'));\n}\n\nfunction updateShadowDOM() {\n dom.innerHTML = editor.getValue();\n}\n\nfunction updateRequiredFields() {\n var fields = dom.querySelectorAll('[required]');\n var fieldNames = [].map.call(fields, getFieldVariableName);\n requiredFieldsInput.value = fieldNames.join(',');\n}\n\nfunction updateEmailFields() {\n var fields = dom.querySelectorAll('input[type=\"email\"]');\n var fieldNames = [].map.call(fields, getFieldVariableName);\n emailFieldsInput.value = fieldNames.join(',');\n}\n\nfunction replaceSelection(str) {\n editor.replaceSelection(str);\n editor.focus();\n}\n\nfunction debounce(func, wait, immediate) {\n var timeout;\n return function () {\n var context = this,\n args = arguments;\n var later = function later() {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n var callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n};\n\nfunction uniq(a) {\n var seen = {};\n return a.filter(function (item) {\n return seen.hasOwnProperty(item) ? false : seen[item] = true;\n });\n}\n\nexports.default = {\n init: init,\n replaceSelection: replaceSelection\n};\n\n},{\"codemirror\":14,\"codemirror/addon/edit/closetag.js\":11,\"codemirror/addon/edit/matchtags\":12,\"codemirror/addon/fold/xml-fold\":13,\"codemirror/mode/css/css\":15,\"codemirror/mode/htmlmixed/htmlmixed\":16,\"codemirror/mode/javascript/javascript\":17,\"codemirror/mode/xml/xml\":18}],10:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar tabs = void 0,\n tabNavs = void 0;\n\nfunction init() {\n tabs = document.querySelectorAll('.hf-tab');\n tabNavs = document.querySelectorAll('#hf-tabs-nav a');\n for (var i = 0; i < tabNavs.length; i++) {\n tabNavs[i].addEventListener('click', open);\n }\n};\n\nfunction open(e) {\n var tabTarget = this.getAttribute('data-tab-target');\n for (var i = 0; i < tabNavs.length; i++) {\n tabNavs[i].classList.toggle('nav-tab-active', tabNavs[i] === this);\n }\n this.blur();\n\n for (var _i = 0; _i < tabs.length; _i++) {\n var tab = tabs[_i];\n tab.classList.toggle('hf-tab-active', tab.getAttribute('data-tab') === tabTarget);\n }\n\n document.title = document.title.replace(document.title.split(' - ').shift(), this.innerText + \" \");\n\n if (window.history) {\n var newUrl = window.location.href;\n newUrl = newUrl.replace(/\\&tab\\=\\w+/, \"\");\n newUrl += \"&tab=\" + tabTarget;\n\n window.history.replaceState({ tab: tabTarget }, document.title, newUrl);\n }\n\n e.preventDefault();\n};\n\nexports.default = {\n init: init,\n open: open\n};\n\n},{}],11:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n/**\n * Tag-closer extension for CodeMirror.\n *\n * This extension adds an \"autoCloseTags\" option that can be set to\n * either true to get the default behavior, or an object to further\n * configure its behavior.\n *\n * These are supported options:\n *\n * `whenClosing` (default true)\n * Whether to autoclose when the '/' of a closing tag is typed.\n * `whenOpening` (default true)\n * Whether to autoclose the tag when the final '>' of an opening\n * tag is typed.\n * `dontCloseTags` (default is empty tags for HTML, none for XML)\n * An array of tag names that should not be autoclosed.\n * `indentTags` (default is block tags for HTML, none for XML)\n * An array of tag names that should, when opened, cause a\n * blank line to be added inside the tag, and the blank line and\n * closing line to be indented.\n *\n * See demos/closetag.html for a usage example.\n */\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n CodeMirror.defineOption(\"autoCloseTags\", false, function(cm, val, old) {\n if (old != CodeMirror.Init && old)\n cm.removeKeyMap(\"autoCloseTags\");\n if (!val) return;\n var map = {name: \"autoCloseTags\"};\n if (typeof val != \"object\" || val.whenClosing)\n map[\"'/'\"] = function(cm) { return autoCloseSlash(cm); };\n if (typeof val != \"object\" || val.whenOpening)\n map[\"'>'\"] = function(cm) { return autoCloseGT(cm); };\n cm.addKeyMap(map);\n });\n\n var htmlDontClose = [\"area\", \"base\", \"br\", \"col\", \"command\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"param\",\n \"source\", \"track\", \"wbr\"];\n var htmlIndent = [\"applet\", \"blockquote\", \"body\", \"button\", \"div\", \"dl\", \"fieldset\", \"form\", \"frameset\", \"h1\", \"h2\", \"h3\", \"h4\",\n \"h5\", \"h6\", \"head\", \"html\", \"iframe\", \"layer\", \"legend\", \"object\", \"ol\", \"p\", \"select\", \"table\", \"ul\"];\n\n function autoCloseGT(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n var ranges = cm.listSelections(), replacements = [];\n var opt = cm.getOption(\"autoCloseTags\");\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n if (inner.mode.name != \"xml\" || !state.tagName) return CodeMirror.Pass;\n\n var html = inner.mode.configuration == \"html\";\n var dontCloseTags = (typeof opt == \"object\" && opt.dontCloseTags) || (html && htmlDontClose);\n var indentTags = (typeof opt == \"object\" && opt.indentTags) || (html && htmlIndent);\n\n var tagName = state.tagName;\n if (tok.end > pos.ch) tagName = tagName.slice(0, tagName.length - tok.end + pos.ch);\n var lowerTagName = tagName.toLowerCase();\n // Don't process the '>' at the end of an end-tag or self-closing tag\n if (!tagName ||\n tok.type == \"string\" && (tok.end != pos.ch || !/[\\\"\\']/.test(tok.string.charAt(tok.string.length - 1)) || tok.string.length == 1) ||\n tok.type == \"tag\" && state.type == \"closeTag\" ||\n tok.string.indexOf(\"/\") == (tok.string.length - 1) || // match something like <someTagName />\n dontCloseTags && indexOf(dontCloseTags, lowerTagName) > -1 ||\n closingTagExists(cm, tagName, pos, state, true))\n return CodeMirror.Pass;\n\n var indent = indentTags && indexOf(indentTags, lowerTagName) > -1;\n replacements[i] = {indent: indent,\n text: \">\" + (indent ? \"\\n\\n\" : \"\") + \"</\" + tagName + \">\",\n newPos: indent ? CodeMirror.Pos(pos.line + 1, 0) : CodeMirror.Pos(pos.line, pos.ch + 1)};\n }\n\n var dontIndentOnAutoClose = (typeof opt == \"object\" && opt.dontIndentOnAutoClose);\n for (var i = ranges.length - 1; i >= 0; i--) {\n var info = replacements[i];\n cm.replaceRange(info.text, ranges[i].head, ranges[i].anchor, \"+insert\");\n var sel = cm.listSelections().slice(0);\n sel[i] = {head: info.newPos, anchor: info.newPos};\n cm.setSelections(sel);\n if (!dontIndentOnAutoClose && info.indent) {\n cm.indentLine(info.newPos.line, null, true);\n cm.indentLine(info.newPos.line + 1, null, true);\n }\n }\n }\n\n function autoCloseCurrent(cm, typingSlash) {\n var ranges = cm.listSelections(), replacements = [];\n var head = typingSlash ? \"/\" : \"</\";\n var opt = cm.getOption(\"autoCloseTags\");\n var dontIndentOnAutoClose = (typeof opt == \"object\" && opt.dontIndentOnSlash);\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) return CodeMirror.Pass;\n var pos = ranges[i].head, tok = cm.getTokenAt(pos);\n var inner = CodeMirror.innerMode(cm.getMode(), tok.state), state = inner.state;\n if (typingSlash && (tok.type == \"string\" || tok.string.charAt(0) != \"<\" ||\n tok.start != pos.ch - 1))\n return CodeMirror.Pass;\n // Kludge to get around the fact that we are not in XML mode\n // when completing in JS/CSS snippet in htmlmixed mode. Does not\n // work for other XML embedded languages (there is no general\n // way to go from a mixed mode to its current XML state).\n var replacement;\n if (inner.mode.name != \"xml\") {\n if (cm.getMode().name == \"htmlmixed\" && inner.mode.name == \"javascript\")\n replacement = head + \"script\";\n else if (cm.getMode().name == \"htmlmixed\" && inner.mode.name == \"css\")\n replacement = head + \"style\";\n else\n return CodeMirror.Pass;\n } else {\n if (!state.context || !state.context.tagName ||\n closingTagExists(cm, state.context.tagName, pos, state))\n return CodeMirror.Pass;\n replacement = head + state.context.tagName;\n }\n if (cm.getLine(pos.line).charAt(tok.end) != \">\") replacement += \">\";\n replacements[i] = replacement;\n }\n cm.replaceSelections(replacements);\n ranges = cm.listSelections();\n if (!dontIndentOnAutoClose) {\n for (var i = 0; i < ranges.length; i++)\n if (i == ranges.length - 1 || ranges[i].head.line < ranges[i + 1].head.line)\n cm.indentLine(ranges[i].head.line);\n }\n }\n\n function autoCloseSlash(cm) {\n if (cm.getOption(\"disableInput\")) return CodeMirror.Pass;\n return autoCloseCurrent(cm, true);\n }\n\n CodeMirror.commands.closeTag = function(cm) { return autoCloseCurrent(cm); };\n\n function indexOf(collection, elt) {\n if (collection.indexOf) return collection.indexOf(elt);\n for (var i = 0, e = collection.length; i < e; ++i)\n if (collection[i] == elt) return i;\n return -1;\n }\n\n // If xml-fold is loaded, we use its functionality to try and verify\n // whether a given tag is actually unclosed.\n function closingTagExists(cm, tagName, pos, state, newTag) {\n if (!CodeMirror.scanForClosingTag) return false;\n var end = Math.min(cm.lastLine() + 1, pos.line + 500);\n var nextClose = CodeMirror.scanForClosingTag(cm, pos, null, end);\n if (!nextClose || nextClose.tag != tagName) return false;\n var cx = state.context;\n // If the immediate wrapping context contains onCx instances of\n // the same tag, a closing tag only exists if there are at least\n // that many closing tags of that type following.\n for (var onCx = newTag ? 1 : 0; cx && cx.tagName == tagName; cx = cx.prev) ++onCx;\n pos = nextClose.to;\n for (var i = 1; i < onCx; i++) {\n var next = CodeMirror.scanForClosingTag(cm, pos, null, end);\n if (!next || next.tag != tagName) return false;\n pos = next.to;\n }\n return true;\n }\n});\n\n},{\"../../lib/codemirror\":14,\"../fold/xml-fold\":13}],12:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../fold/xml-fold\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../fold/xml-fold\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n CodeMirror.defineOption(\"matchTags\", false, function(cm, val, old) {\n if (old && old != CodeMirror.Init) {\n cm.off(\"cursorActivity\", doMatchTags);\n cm.off(\"viewportChange\", maybeUpdateMatch);\n clear(cm);\n }\n if (val) {\n cm.state.matchBothTags = typeof val == \"object\" && val.bothTags;\n cm.on(\"cursorActivity\", doMatchTags);\n cm.on(\"viewportChange\", maybeUpdateMatch);\n doMatchTags(cm);\n }\n });\n\n function clear(cm) {\n if (cm.state.tagHit) cm.state.tagHit.clear();\n if (cm.state.tagOther) cm.state.tagOther.clear();\n cm.state.tagHit = cm.state.tagOther = null;\n }\n\n function doMatchTags(cm) {\n cm.state.failedTagMatch = false;\n cm.operation(function() {\n clear(cm);\n if (cm.somethingSelected()) return;\n var cur = cm.getCursor(), range = cm.getViewport();\n range.from = Math.min(range.from, cur.line); range.to = Math.max(cur.line + 1, range.to);\n var match = CodeMirror.findMatchingTag(cm, cur, range);\n if (!match) return;\n if (cm.state.matchBothTags) {\n var hit = match.at == \"open\" ? match.open : match.close;\n if (hit) cm.state.tagHit = cm.markText(hit.from, hit.to, {className: \"CodeMirror-matchingtag\"});\n }\n var other = match.at == \"close\" ? match.open : match.close;\n if (other)\n cm.state.tagOther = cm.markText(other.from, other.to, {className: \"CodeMirror-matchingtag\"});\n else\n cm.state.failedTagMatch = true;\n });\n }\n\n function maybeUpdateMatch(cm) {\n if (cm.state.failedTagMatch) doMatchTags(cm);\n }\n\n CodeMirror.commands.toMatchingTag = function(cm) {\n var found = CodeMirror.findMatchingTag(cm, cm.getCursor());\n if (found) {\n var other = found.at == \"close\" ? found.open : found.close;\n if (other) cm.extendSelection(other.to, other.from);\n }\n };\n});\n\n},{\"../../lib/codemirror\":14,\"../fold/xml-fold\":13}],13:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var Pos = CodeMirror.Pos;\n function cmp(a, b) { return a.line - b.line || a.ch - b.ch; }\n\n var nameStartChar = \"A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n var nameChar = nameStartChar + \"\\-\\:\\.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n var xmlTagStart = new RegExp(\"<(/?)([\" + nameStartChar + \"][\" + nameChar + \"]*)\", \"g\");\n\n function Iter(cm, line, ch, range) {\n this.line = line; this.ch = ch;\n this.cm = cm; this.text = cm.getLine(line);\n this.min = range ? Math.max(range.from, cm.firstLine()) : cm.firstLine();\n this.max = range ? Math.min(range.to - 1, cm.lastLine()) : cm.lastLine();\n }\n\n function tagAt(iter, ch) {\n var type = iter.cm.getTokenTypeAt(Pos(iter.line, ch));\n return type && /\\btag\\b/.test(type);\n }\n\n function nextLine(iter) {\n if (iter.line >= iter.max) return;\n iter.ch = 0;\n iter.text = iter.cm.getLine(++iter.line);\n return true;\n }\n function prevLine(iter) {\n if (iter.line <= iter.min) return;\n iter.text = iter.cm.getLine(--iter.line);\n iter.ch = iter.text.length;\n return true;\n }\n\n function toTagEnd(iter) {\n for (;;) {\n var gt = iter.text.indexOf(\">\", iter.ch);\n if (gt == -1) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt + 1; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n function toTagStart(iter) {\n for (;;) {\n var lt = iter.ch ? iter.text.lastIndexOf(\"<\", iter.ch - 1) : -1;\n if (lt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, lt + 1)) { iter.ch = lt; continue; }\n xmlTagStart.lastIndex = lt;\n iter.ch = lt;\n var match = xmlTagStart.exec(iter.text);\n if (match && match.index == lt) return match;\n }\n }\n\n function toNextTag(iter) {\n for (;;) {\n xmlTagStart.lastIndex = iter.ch;\n var found = xmlTagStart.exec(iter.text);\n if (!found) { if (nextLine(iter)) continue; else return; }\n if (!tagAt(iter, found.index + 1)) { iter.ch = found.index + 1; continue; }\n iter.ch = found.index + found[0].length;\n return found;\n }\n }\n function toPrevTag(iter) {\n for (;;) {\n var gt = iter.ch ? iter.text.lastIndexOf(\">\", iter.ch - 1) : -1;\n if (gt == -1) { if (prevLine(iter)) continue; else return; }\n if (!tagAt(iter, gt + 1)) { iter.ch = gt; continue; }\n var lastSlash = iter.text.lastIndexOf(\"/\", gt);\n var selfClose = lastSlash > -1 && !/\\S/.test(iter.text.slice(lastSlash + 1, gt));\n iter.ch = gt + 1;\n return selfClose ? \"selfClose\" : \"regular\";\n }\n }\n\n function findMatchingClose(iter, tag) {\n var stack = [];\n for (;;) {\n var next = toNextTag(iter), end, startLine = iter.line, startCh = iter.ch - (next ? next[0].length : 0);\n if (!next || !(end = toTagEnd(iter))) return;\n if (end == \"selfClose\") continue;\n if (next[1]) { // closing tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == next[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == next[2])) return {\n tag: next[2],\n from: Pos(startLine, startCh),\n to: Pos(iter.line, iter.ch)\n };\n } else { // opening tag\n stack.push(next[2]);\n }\n }\n }\n function findMatchingOpen(iter, tag) {\n var stack = [];\n for (;;) {\n var prev = toPrevTag(iter);\n if (!prev) return;\n if (prev == \"selfClose\") { toTagStart(iter); continue; }\n var endLine = iter.line, endCh = iter.ch;\n var start = toTagStart(iter);\n if (!start) return;\n if (start[1]) { // closing tag\n stack.push(start[2]);\n } else { // opening tag\n for (var i = stack.length - 1; i >= 0; --i) if (stack[i] == start[2]) {\n stack.length = i;\n break;\n }\n if (i < 0 && (!tag || tag == start[2])) return {\n tag: start[2],\n from: Pos(iter.line, iter.ch),\n to: Pos(endLine, endCh)\n };\n }\n }\n }\n\n CodeMirror.registerHelper(\"fold\", \"xml\", function(cm, start) {\n var iter = new Iter(cm, start.line, 0);\n for (;;) {\n var openTag = toNextTag(iter)\n if (!openTag || iter.line != start.line) return\n var end = toTagEnd(iter)\n if (!end) return\n if (!openTag[1] && end != \"selfClose\") {\n var startPos = Pos(iter.line, iter.ch);\n var endPos = findMatchingClose(iter, openTag[2]);\n return endPos && cmp(endPos.from, startPos) > 0 ? {from: startPos, to: endPos.from} : null\n }\n }\n });\n CodeMirror.findMatchingTag = function(cm, pos, range) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n if (iter.text.indexOf(\">\") == -1 && iter.text.indexOf(\"<\") == -1) return;\n var end = toTagEnd(iter), to = end && Pos(iter.line, iter.ch);\n var start = end && toTagStart(iter);\n if (!end || !start || cmp(iter, pos) > 0) return;\n var here = {from: Pos(iter.line, iter.ch), to: to, tag: start[2]};\n if (end == \"selfClose\") return {open: here, close: null, at: \"open\"};\n\n if (start[1]) { // closing tag\n return {open: findMatchingOpen(iter, start[2]), close: here, at: \"close\"};\n } else { // opening tag\n iter = new Iter(cm, to.line, to.ch, range);\n return {open: here, close: findMatchingClose(iter, start[2]), at: \"open\"};\n }\n };\n\n CodeMirror.findEnclosingTag = function(cm, pos, range, tag) {\n var iter = new Iter(cm, pos.line, pos.ch, range);\n for (;;) {\n var open = findMatchingOpen(iter, tag);\n if (!open) break;\n var forward = new Iter(cm, pos.line, pos.ch, range);\n var close = findMatchingClose(forward, open.tag);\n if (close) return {open: open, close: close};\n }\n };\n\n // Used by addon/edit/closetag.js\n CodeMirror.scanForClosingTag = function(cm, pos, name, end) {\n var iter = new Iter(cm, pos.line, pos.ch, end ? {from: 0, to: end} : null);\n return findMatchingClose(iter, name);\n };\n});\n\n},{\"../../lib/codemirror\":14}],14:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// This is CodeMirror (http://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n// Kludges for bugs and behavior differences that can't be feature\n// detected are enabled based on userAgent etc sniffing.\nvar userAgent = navigator.userAgent;\nvar platform = navigator.platform;\n\nvar gecko = /gecko\\/\\d/i.test(userAgent);\nvar ie_upto10 = /MSIE \\d/.test(userAgent);\nvar ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\nvar edge = /Edge\\/(\\d+)/.exec(userAgent);\nvar ie = ie_upto10 || ie_11up || edge;\nvar ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\nvar webkit = !edge && /WebKit\\//.test(userAgent);\nvar qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\nvar chrome = !edge && /Chrome\\//.test(userAgent);\nvar presto = /Opera\\//.test(userAgent);\nvar safari = /Apple Computer/.test(navigator.vendor);\nvar mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\nvar phantom = /PhantomJS/.test(userAgent);\n\nvar ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\\/\\w+/.test(userAgent);\nvar android = /Android/.test(userAgent);\n// This is woefully incomplete. Suggestions for alternative methods welcome.\nvar mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\nvar mac = ios || /Mac/.test(platform);\nvar chromeOS = /\\bCrOS\\b/.test(userAgent);\nvar windows = /win/i.test(platform);\n\nvar presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\nif (presto_version) { presto_version = Number(presto_version[1]); }\nif (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n// Some browsers use the wrong event properties to signal cmd/ctrl on OS X\nvar flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\nvar captureRightClick = gecko || (ie && ie_version >= 9);\n\nfunction classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\nvar rmClass = function(node, cls) {\n var current = node.className;\n var match = classTest(cls).exec(current);\n if (match) {\n var after = current.slice(match.index + match[0].length);\n node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n }\n};\n\nfunction removeChildren(e) {\n for (var count = e.childNodes.length; count > 0; --count)\n { e.removeChild(e.firstChild); }\n return e\n}\n\nfunction removeChildrenAndAdd(parent, e) {\n return removeChildren(parent).appendChild(e)\n}\n\nfunction elt(tag, content, className, style) {\n var e = document.createElement(tag);\n if (className) { e.className = className; }\n if (style) { e.style.cssText = style; }\n if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n return e\n}\n// wrapper for elt, which removes the elt from the accessibility tree\nfunction eltP(tag, content, className, style) {\n var e = elt(tag, content, className, style);\n e.setAttribute(\"role\", \"presentation\");\n return e\n}\n\nvar range;\nif (document.createRange) { range = function(node, start, end, endNode) {\n var r = document.createRange();\n r.setEnd(endNode || node, end);\n r.setStart(node, start);\n return r\n}; }\nelse { range = function(node, start, end) {\n var r = document.body.createTextRange();\n try { r.moveToElementText(node.parentNode); }\n catch(e) { return r }\n r.collapse(true);\n r.moveEnd(\"character\", end);\n r.moveStart(\"character\", start);\n return r\n}; }\n\nfunction contains(parent, child) {\n if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n { child = child.parentNode; }\n if (parent.contains)\n { return parent.contains(child) }\n do {\n if (child.nodeType == 11) { child = child.host; }\n if (child == parent) { return true }\n } while (child = child.parentNode)\n}\n\nfunction activeElt() {\n // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n // IE < 10 will throw when accessed while the page is loading or in an iframe.\n // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n var activeElement;\n try {\n activeElement = document.activeElement;\n } catch(e) {\n activeElement = document.body || null;\n }\n while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n { activeElement = activeElement.shadowRoot.activeElement; }\n return activeElement\n}\n\nfunction addClass(node, cls) {\n var current = node.className;\n if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n}\nfunction joinClasses(a, b) {\n var as = a.split(\" \");\n for (var i = 0; i < as.length; i++)\n { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n return b\n}\n\nvar selectInput = function(node) { node.select(); };\nif (ios) // Mobile Safari apparently has a bug where select() is broken.\n { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\nelse if (ie) // Suppress mysterious IE10 errors\n { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\nfunction bind(f) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function(){return f.apply(null, args)}\n}\n\nfunction copyObj(obj, target, overwrite) {\n if (!target) { target = {}; }\n for (var prop in obj)\n { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n { target[prop] = obj[prop]; } }\n return target\n}\n\n// Counts the column offset in a string, taking tabs into account.\n// Used mostly to find indentation.\nfunction countColumn(string, end, tabSize, startIndex, startValue) {\n if (end == null) {\n end = string.search(/[^\\s\\u00a0]/);\n if (end == -1) { end = string.length; }\n }\n for (var i = startIndex || 0, n = startValue || 0;;) {\n var nextTab = string.indexOf(\"\\t\", i);\n if (nextTab < 0 || nextTab >= end)\n { return n + (end - i) }\n n += nextTab - i;\n n += tabSize - (n % tabSize);\n i = nextTab + 1;\n }\n}\n\nvar Delayed = function() {this.id = null;};\nDelayed.prototype.set = function (ms, f) {\n clearTimeout(this.id);\n this.id = setTimeout(f, ms);\n};\n\nfunction indexOf(array, elt) {\n for (var i = 0; i < array.length; ++i)\n { if (array[i] == elt) { return i } }\n return -1\n}\n\n// Number of pixels added to scroller and sizer to hide scrollbar\nvar scrollerGap = 30;\n\n// Returned or thrown by various protocols to signal 'I'm not\n// handling this'.\nvar Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n// Reused option objects for setSelection & friends\nvar sel_dontScroll = {scroll: false};\nvar sel_mouse = {origin: \"*mouse\"};\nvar sel_move = {origin: \"+move\"};\n\n// The inverse of countColumn -- find the offset that corresponds to\n// a particular column.\nfunction findColumn(string, goal, tabSize) {\n for (var pos = 0, col = 0;;) {\n var nextTab = string.indexOf(\"\\t\", pos);\n if (nextTab == -1) { nextTab = string.length; }\n var skipped = nextTab - pos;\n if (nextTab == string.length || col + skipped >= goal)\n { return pos + Math.min(skipped, goal - col) }\n col += nextTab - pos;\n col += tabSize - (col % tabSize);\n pos = nextTab + 1;\n if (col >= goal) { return pos }\n }\n}\n\nvar spaceStrs = [\"\"];\nfunction spaceStr(n) {\n while (spaceStrs.length <= n)\n { spaceStrs.push(lst(spaceStrs) + \" \"); }\n return spaceStrs[n]\n}\n\nfunction lst(arr) { return arr[arr.length-1] }\n\nfunction map(array, f) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n return out\n}\n\nfunction insertSorted(array, value, score) {\n var pos = 0, priority = score(value);\n while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n array.splice(pos, 0, value);\n}\n\nfunction nothing() {}\n\nfunction createObj(base, props) {\n var inst;\n if (Object.create) {\n inst = Object.create(base);\n } else {\n nothing.prototype = base;\n inst = new nothing();\n }\n if (props) { copyObj(props, inst); }\n return inst\n}\n\nvar nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\nfunction isWordCharBasic(ch) {\n return /\\w/.test(ch) || ch > \"\\x80\" &&\n (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n}\nfunction isWordChar(ch, helper) {\n if (!helper) { return isWordCharBasic(ch) }\n if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n return helper.test(ch)\n}\n\nfunction isEmpty(obj) {\n for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n return true\n}\n\n// Extending unicode characters. A series of a non-extending char +\n// any number of extending chars is treated as a single unit as far\n// as editing and measuring is concerned. This is not fully correct,\n// since some scripts/fonts/browsers also treat other configurations\n// of code points as a group.\nvar extendingChars = /[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;\nfunction isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\nfunction skipExtendingChars(str, pos, dir) {\n while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n return pos\n}\n\n// Returns the value from the range [`from`; `to`] that satisfies\n// `pred` and is closest to `from`. Assumes that at least `to`\n// satisfies `pred`. Supports `from` being greater than `to`.\nfunction findFirst(pred, from, to) {\n // At any point we are certain `to` satisfies `pred`, don't know\n // whether `from` does.\n var dir = from > to ? -1 : 1;\n for (;;) {\n if (from == to) { return from }\n var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n if (mid == from) { return pred(mid) ? from : to }\n if (pred(mid)) { to = mid; }\n else { from = mid + dir; }\n }\n}\n\n// The display handles the DOM integration, both for input reading\n// and content drawing. It holds references to DOM nodes and\n// display-related state.\n\nfunction Display(place, doc, input) {\n var d = this;\n this.input = input;\n\n // Covers bottom-right square when both scrollbars are present.\n d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n // Covers bottom of gutter when coverGutterNextToScrollbar is on\n // and h scrollbar is present.\n d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n // Will contain the actual code, positioned to cover the viewport.\n d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n // Elements are added to these to represent selection and cursors.\n d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n // A visibility: hidden element used to find the size of things.\n d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n // When lines outside of the viewport are measured, they are drawn in this.\n d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n // Wraps everything that needs to exist inside the vertically-padded coordinate system\n d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n null, \"position: relative; outline: none\");\n var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n // Moved around its parent to cover visible view.\n d.mover = elt(\"div\", [lines], null, \"position: relative\");\n // Set to the height of the document, allowing scrolling.\n d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n d.sizerWidth = null;\n // Behavior of elts with overflow: auto and padding is\n // inconsistent across browsers. This is used to ensure the\n // scrollable area is big enough.\n d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n // Will contain the gutters, if any.\n d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n d.lineGutter = null;\n // Actual scrollable element.\n d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n d.scroller.setAttribute(\"tabIndex\", \"-1\");\n // The element in which the editor lives.\n d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n if (place) {\n if (place.appendChild) { place.appendChild(d.wrapper); }\n else { place(d.wrapper); }\n }\n\n // Current rendered range (may be bigger than the view window).\n d.viewFrom = d.viewTo = doc.first;\n d.reportedViewFrom = d.reportedViewTo = doc.first;\n // Information about the rendered lines.\n d.view = [];\n d.renderedView = null;\n // Holds info about a single rendered line when it was rendered\n // for measurement, while not in view.\n d.externalMeasured = null;\n // Empty space (in pixels) above the view\n d.viewOffset = 0;\n d.lastWrapHeight = d.lastWrapWidth = 0;\n d.updateLineNumbers = null;\n\n d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n d.scrollbarsClipped = false;\n\n // Used to only resize the line number gutter when necessary (when\n // the amount of lines crosses a boundary that makes its width change)\n d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n // Set to true when a non-horizontal-scrolling line widget is\n // added. As an optimization, line widget aligning is skipped when\n // this is false.\n d.alignWidgets = false;\n\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n // Tracks the maximum line length so that the horizontal scrollbar\n // can be kept static when scrolling.\n d.maxLine = null;\n d.maxLineLength = 0;\n d.maxLineChanged = false;\n\n // Used for measuring wheel scrolling granularity\n d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n // True when shift is held down.\n d.shift = false;\n\n // Used to track whether anything happened since the context menu\n // was opened.\n d.selForContextMenu = null;\n\n d.activeTouch = null;\n\n input.init(d);\n}\n\n// Find the line object corresponding to the given line number.\nfunction getLine(doc, n) {\n n -= doc.first;\n if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n var chunk = doc;\n while (!chunk.lines) {\n for (var i = 0;; ++i) {\n var child = chunk.children[i], sz = child.chunkSize();\n if (n < sz) { chunk = child; break }\n n -= sz;\n }\n }\n return chunk.lines[n]\n}\n\n// Get the part of a document between two positions, as an array of\n// strings.\nfunction getBetween(doc, start, end) {\n var out = [], n = start.line;\n doc.iter(start.line, end.line + 1, function (line) {\n var text = line.text;\n if (n == end.line) { text = text.slice(0, end.ch); }\n if (n == start.line) { text = text.slice(start.ch); }\n out.push(text);\n ++n;\n });\n return out\n}\n// Get the lines between from and to, as array of strings.\nfunction getLines(doc, from, to) {\n var out = [];\n doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n return out\n}\n\n// Update the height of a line, propagating the height change\n// upwards to parent nodes.\nfunction updateLineHeight(line, height) {\n var diff = height - line.height;\n if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n}\n\n// Given a line object, find its line number by walking up through\n// its parent links.\nfunction lineNo(line) {\n if (line.parent == null) { return null }\n var cur = line.parent, no = indexOf(cur.lines, line);\n for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n for (var i = 0;; ++i) {\n if (chunk.children[i] == cur) { break }\n no += chunk.children[i].chunkSize();\n }\n }\n return no + cur.first\n}\n\n// Find the line at the given vertical position, using the height\n// information in the document tree.\nfunction lineAtHeight(chunk, h) {\n var n = chunk.first;\n outer: do {\n for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n var child = chunk.children[i$1], ch = child.height;\n if (h < ch) { chunk = child; continue outer }\n h -= ch;\n n += child.chunkSize();\n }\n return n\n } while (!chunk.lines)\n var i = 0;\n for (; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i], lh = line.height;\n if (h < lh) { break }\n h -= lh;\n }\n return n + i\n}\n\nfunction isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\nfunction lineNumberFor(options, i) {\n return String(options.lineNumberFormatter(i + options.firstLineNumber))\n}\n\n// A Pos instance represents a position within the text.\nfunction Pos(line, ch, sticky) {\n if ( sticky === void 0 ) sticky = null;\n\n if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n this.line = line;\n this.ch = ch;\n this.sticky = sticky;\n}\n\n// Compare two positions, return 0 if they are the same, a negative\n// number when a is less, and a positive number otherwise.\nfunction cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\nfunction equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\nfunction copyPos(x) {return Pos(x.line, x.ch)}\nfunction maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\nfunction minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n// Most of the external API clips given positions to make sure they\n// actually exist within the document.\nfunction clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\nfunction clipPos(doc, pos) {\n if (pos.line < doc.first) { return Pos(doc.first, 0) }\n var last = doc.first + doc.size - 1;\n if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n return clipToLen(pos, getLine(doc, pos.line).text.length)\n}\nfunction clipToLen(pos, linelen) {\n var ch = pos.ch;\n if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n else if (ch < 0) { return Pos(pos.line, 0) }\n else { return pos }\n}\nfunction clipPosArray(doc, array) {\n var out = [];\n for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n return out\n}\n\n// Optimize some code when these features are not used.\nvar sawReadOnlySpans = false;\nvar sawCollapsedSpans = false;\n\nfunction seeReadOnlySpans() {\n sawReadOnlySpans = true;\n}\n\nfunction seeCollapsedSpans() {\n sawCollapsedSpans = true;\n}\n\n// TEXTMARKER SPANS\n\nfunction MarkedSpan(marker, from, to) {\n this.marker = marker;\n this.from = from; this.to = to;\n}\n\n// Search an array of spans for a span matching the given marker.\nfunction getMarkedSpanFor(spans, marker) {\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.marker == marker) { return span }\n } }\n}\n// Remove a span from an array, returning undefined if no spans are\n// left (we don't store arrays for lines without spans).\nfunction removeMarkedSpan(spans, span) {\n var r;\n for (var i = 0; i < spans.length; ++i)\n { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n return r\n}\n// Add a span to a line.\nfunction addMarkedSpan(line, span) {\n line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n span.marker.attachLine(line);\n}\n\n// Used for the algorithm that adjusts markers for a change in the\n// document. These functions cut an array of spans at a given\n// character position, returning an array of remaining chunks (or\n// undefined if nothing remains).\nfunction markedSpansBefore(old, startCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n }\n } }\n return nw\n}\nfunction markedSpansAfter(old, endCh, isInsert) {\n var nw;\n if (old) { for (var i = 0; i < old.length; ++i) {\n var span = old[i], marker = span.marker;\n var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n span.to == null ? null : span.to - endCh));\n }\n } }\n return nw\n}\n\n// Given a change object, compute the new set of marker spans that\n// cover the line in which the change took place. Removes spans\n// entirely within the change, reconnects spans belonging to the\n// same marker that appear on both sides of the change, and cuts off\n// spans partially within the change. Returns an array of span\n// arrays with one element for each line in (after) the change.\nfunction stretchSpansOverChange(doc, change) {\n if (change.full) { return null }\n var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n if (!oldFirst && !oldLast) { return null }\n\n var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n // Get the spans that 'stick out' on both sides\n var first = markedSpansBefore(oldFirst, startCh, isInsert);\n var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n // Next, merge those two ends\n var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n if (first) {\n // Fix up .to properties of first\n for (var i = 0; i < first.length; ++i) {\n var span = first[i];\n if (span.to == null) {\n var found = getMarkedSpanFor(last, span.marker);\n if (!found) { span.to = startCh; }\n else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n }\n }\n }\n if (last) {\n // Fix up .from in last (or move them into first in case of sameLine)\n for (var i$1 = 0; i$1 < last.length; ++i$1) {\n var span$1 = last[i$1];\n if (span$1.to != null) { span$1.to += offset; }\n if (span$1.from == null) {\n var found$1 = getMarkedSpanFor(first, span$1.marker);\n if (!found$1) {\n span$1.from = offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n } else {\n span$1.from += offset;\n if (sameLine) { (first || (first = [])).push(span$1); }\n }\n }\n }\n // Make sure we didn't create any zero-length spans\n if (first) { first = clearEmptySpans(first); }\n if (last && last != first) { last = clearEmptySpans(last); }\n\n var newMarkers = [first];\n if (!sameLine) {\n // Fill gap with whole-line-spans\n var gap = change.text.length - 2, gapMarkers;\n if (gap > 0 && first)\n { for (var i$2 = 0; i$2 < first.length; ++i$2)\n { if (first[i$2].to == null)\n { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n for (var i$3 = 0; i$3 < gap; ++i$3)\n { newMarkers.push(gapMarkers); }\n newMarkers.push(last);\n }\n return newMarkers\n}\n\n// Remove spans that are empty and don't have a clearWhenEmpty\n// option of false.\nfunction clearEmptySpans(spans) {\n for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n { spans.splice(i--, 1); }\n }\n if (!spans.length) { return null }\n return spans\n}\n\n// Used to 'clip' out readOnly ranges when making a change.\nfunction removeReadOnlyRanges(doc, from, to) {\n var markers = null;\n doc.iter(from.line, to.line + 1, function (line) {\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var mark = line.markedSpans[i].marker;\n if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n { (markers || (markers = [])).push(mark); }\n } }\n });\n if (!markers) { return null }\n var parts = [{from: from, to: to}];\n for (var i = 0; i < markers.length; ++i) {\n var mk = markers[i], m = mk.find(0);\n for (var j = 0; j < parts.length; ++j) {\n var p = parts[j];\n if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n { newParts.push({from: p.from, to: m.from}); }\n if (dto > 0 || !mk.inclusiveRight && !dto)\n { newParts.push({from: m.to, to: p.to}); }\n parts.splice.apply(parts, newParts);\n j += newParts.length - 3;\n }\n }\n return parts\n}\n\n// Connect or disconnect spans from a line.\nfunction detachMarkedSpans(line) {\n var spans = line.markedSpans;\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.detachLine(line); }\n line.markedSpans = null;\n}\nfunction attachMarkedSpans(line, spans) {\n if (!spans) { return }\n for (var i = 0; i < spans.length; ++i)\n { spans[i].marker.attachLine(line); }\n line.markedSpans = spans;\n}\n\n// Helpers used when computing which overlapping collapsed span\n// counts as the larger one.\nfunction extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\nfunction extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n// Returns a number indicating which of two overlapping collapsed\n// spans is larger (and thus includes the other). Falls back to\n// comparing ids when the spans cover exactly the same range.\nfunction compareCollapsedMarkers(a, b) {\n var lenDiff = a.lines.length - b.lines.length;\n if (lenDiff != 0) { return lenDiff }\n var aPos = a.find(), bPos = b.find();\n var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n if (fromCmp) { return -fromCmp }\n var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n if (toCmp) { return toCmp }\n return b.id - a.id\n}\n\n// Find out whether a line ends or starts in a collapsed span. If\n// so, return the marker for that span.\nfunction collapsedSpanAtSide(line, start) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n { found = sp.marker; }\n } }\n return found\n}\nfunction collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\nfunction collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\nfunction collapsedSpanAround(line, ch) {\n var sps = sawCollapsedSpans && line.markedSpans, found;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n } }\n return found\n}\n\n// Test whether there exists a collapsed span that partially\n// overlaps (covers the start or end, but not both) of a new span.\n// Such overlap is not allowed.\nfunction conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {\n var line = getLine(doc, lineNo$$1);\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i) {\n var sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n var found = sp.marker.find(0);\n var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n { return true }\n } }\n}\n\n// A visual line is a line as drawn on the screen. Folding, for\n// example, can cause multiple logical lines to appear on the same\n// visual line. This finds the start of the visual line that the\n// given line is part of (usually that is the line itself).\nfunction visualLine(line) {\n var merged;\n while (merged = collapsedSpanAtStart(line))\n { line = merged.find(-1, true).line; }\n return line\n}\n\nfunction visualLineEnd(line) {\n var merged;\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return line\n}\n\n// Returns an array of logical lines that continue the visual line\n// started by the argument, or undefined if there are no such lines.\nfunction visualLineContinued(line) {\n var merged, lines;\n while (merged = collapsedSpanAtEnd(line)) {\n line = merged.find(1, true).line\n ;(lines || (lines = [])).push(line);\n }\n return lines\n}\n\n// Get the line number of the start of the visual line that the\n// given line number is part of.\nfunction visualLineNo(doc, lineN) {\n var line = getLine(doc, lineN), vis = visualLine(line);\n if (line == vis) { return lineN }\n return lineNo(vis)\n}\n\n// Get the line number of the start of the next visual line after\n// the given line.\nfunction visualLineEndNo(doc, lineN) {\n if (lineN > doc.lastLine()) { return lineN }\n var line = getLine(doc, lineN), merged;\n if (!lineIsHidden(doc, line)) { return lineN }\n while (merged = collapsedSpanAtEnd(line))\n { line = merged.find(1, true).line; }\n return lineNo(line) + 1\n}\n\n// Compute whether a line is hidden. Lines count as hidden when they\n// are part of a visual line that starts with another line, or when\n// they are entirely covered by collapsed, non-widget span.\nfunction lineIsHidden(doc, line) {\n var sps = sawCollapsedSpans && line.markedSpans;\n if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n sp = sps[i];\n if (!sp.marker.collapsed) { continue }\n if (sp.from == null) { return true }\n if (sp.marker.widgetNode) { continue }\n if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n { return true }\n } }\n}\nfunction lineIsHiddenInner(doc, line, span) {\n if (span.to == null) {\n var end = span.marker.find(1, true);\n return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n }\n if (span.marker.inclusiveRight && span.to == line.text.length)\n { return true }\n for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n sp = line.markedSpans[i];\n if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n (sp.to == null || sp.to != span.from) &&\n (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n lineIsHiddenInner(doc, line, sp)) { return true }\n }\n}\n\n// Find the height above the given line.\nfunction heightAtLine(lineObj) {\n lineObj = visualLine(lineObj);\n\n var h = 0, chunk = lineObj.parent;\n for (var i = 0; i < chunk.lines.length; ++i) {\n var line = chunk.lines[i];\n if (line == lineObj) { break }\n else { h += line.height; }\n }\n for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n var cur = p.children[i$1];\n if (cur == chunk) { break }\n else { h += cur.height; }\n }\n }\n return h\n}\n\n// Compute the character length of a line, taking into account\n// collapsed ranges (see markText) that might hide parts, and join\n// other lines onto it.\nfunction lineLength(line) {\n if (line.height == 0) { return 0 }\n var len = line.text.length, merged, cur = line;\n while (merged = collapsedSpanAtStart(cur)) {\n var found = merged.find(0, true);\n cur = found.from.line;\n len += found.from.ch - found.to.ch;\n }\n cur = line;\n while (merged = collapsedSpanAtEnd(cur)) {\n var found$1 = merged.find(0, true);\n len -= cur.text.length - found$1.from.ch;\n cur = found$1.to.line;\n len += cur.text.length - found$1.to.ch;\n }\n return len\n}\n\n// Find the longest line in the document.\nfunction findMaxLine(cm) {\n var d = cm.display, doc = cm.doc;\n d.maxLine = getLine(doc, doc.first);\n d.maxLineLength = lineLength(d.maxLine);\n d.maxLineChanged = true;\n doc.iter(function (line) {\n var len = lineLength(line);\n if (len > d.maxLineLength) {\n d.maxLineLength = len;\n d.maxLine = line;\n }\n });\n}\n\n// BIDI HELPERS\n\nfunction iterateBidiSections(order, from, to, f) {\n if (!order) { return f(from, to, \"ltr\", 0) }\n var found = false;\n for (var i = 0; i < order.length; ++i) {\n var part = order[i];\n if (part.from < to && part.to > from || from == to && part.to == from) {\n f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n found = true;\n }\n }\n if (!found) { f(from, to, \"ltr\"); }\n}\n\nvar bidiOther = null;\nfunction getBidiPartAt(order, ch, sticky) {\n var found;\n bidiOther = null;\n for (var i = 0; i < order.length; ++i) {\n var cur = order[i];\n if (cur.from < ch && cur.to > ch) { return i }\n if (cur.to == ch) {\n if (cur.from != cur.to && sticky == \"before\") { found = i; }\n else { bidiOther = i; }\n }\n if (cur.from == ch) {\n if (cur.from != cur.to && sticky != \"before\") { found = i; }\n else { bidiOther = i; }\n }\n }\n return found != null ? found : bidiOther\n}\n\n// Bidirectional ordering algorithm\n// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n// that this (partially) implements.\n\n// One-char codes used for character types:\n// L (L): Left-to-Right\n// R (R): Right-to-Left\n// r (AL): Right-to-Left Arabic\n// 1 (EN): European Number\n// + (ES): European Number Separator\n// % (ET): European Number Terminator\n// n (AN): Arabic Number\n// , (CS): Common Number Separator\n// m (NSM): Non-Spacing Mark\n// b (BN): Boundary Neutral\n// s (B): Paragraph Separator\n// t (S): Segment Separator\n// w (WS): Whitespace\n// N (ON): Other Neutrals\n\n// Returns null if characters are ordered as they appear\n// (left-to-right), or an array of sections ({from, to, level}\n// objects) in the order in which they occur visually.\nvar bidiOrdering = (function() {\n // Character types for codepoints 0 to 0xff\n var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n // Character types for codepoints 0x600 to 0x6f9\n var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n function charType(code) {\n if (code <= 0xf7) { return lowTypes.charAt(code) }\n else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n else if (code == 0x200c) { return \"b\" }\n else { return \"L\" }\n }\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n function BidiSpan(level, from, to) {\n this.level = level;\n this.from = from; this.to = to;\n }\n\n return function(str, direction) {\n var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n var len = str.length, types = [];\n for (var i = 0; i < len; ++i)\n { types.push(charType(str.charCodeAt(i))); }\n\n // W1. Examine each non-spacing mark (NSM) in the level run, and\n // change the type of the NSM to the type of the previous\n // character. If the NSM is at the start of the level run, it will\n // get the type of sor.\n for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n var type = types[i$1];\n if (type == \"m\") { types[i$1] = prev; }\n else { prev = type; }\n }\n\n // W2. Search backwards from each instance of a European number\n // until the first strong type (R, L, AL, or sor) is found. If an\n // AL is found, change the type of the European number to Arabic\n // number.\n // W3. Change all ALs to R.\n for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n var type$1 = types[i$2];\n if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n }\n\n // W4. A single European separator between two European numbers\n // changes to a European number. A single common separator between\n // two numbers of the same type changes to that type.\n for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n var type$2 = types[i$3];\n if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n prev$1 = type$2;\n }\n\n // W5. A sequence of European terminators adjacent to European\n // numbers changes to all European numbers.\n // W6. Otherwise, separators and terminators change to Other\n // Neutral.\n for (var i$4 = 0; i$4 < len; ++i$4) {\n var type$3 = types[i$4];\n if (type$3 == \",\") { types[i$4] = \"N\"; }\n else if (type$3 == \"%\") {\n var end = (void 0);\n for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n for (var j = i$4; j < end; ++j) { types[j] = replace; }\n i$4 = end - 1;\n }\n }\n\n // W7. Search backwards from each instance of a European number\n // until the first strong type (R, L, or sor) is found. If an L is\n // found, then change the type of the European number to L.\n for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n var type$4 = types[i$5];\n if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n else if (isStrong.test(type$4)) { cur$1 = type$4; }\n }\n\n // N1. A sequence of neutrals takes the direction of the\n // surrounding strong text if the text on both sides has the same\n // direction. European and Arabic numbers act as if they were R in\n // terms of their influence on neutrals. Start-of-level-run (sor)\n // and end-of-level-run (eor) are used at level run boundaries.\n // N2. Any remaining neutrals take the embedding direction.\n for (var i$6 = 0; i$6 < len; ++i$6) {\n if (isNeutral.test(types[i$6])) {\n var end$1 = (void 0);\n for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n i$6 = end$1 - 1;\n }\n }\n\n // Here we depart from the documented algorithm, in order to avoid\n // building up an actual levels array. Since there are only three\n // levels (0, 1, 2) in an implementation that doesn't take\n // explicit embedding into account, we can build up the order on\n // the fly, without following the level-based algorithm.\n var order = [], m;\n for (var i$7 = 0; i$7 < len;) {\n if (countsAsLeft.test(types[i$7])) {\n var start = i$7;\n for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n order.push(new BidiSpan(0, start, i$7));\n } else {\n var pos = i$7, at = order.length;\n for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n for (var j$2 = pos; j$2 < i$7;) {\n if (countsAsNum.test(types[j$2])) {\n if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); }\n var nstart = j$2;\n for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n pos = j$2;\n } else { ++j$2; }\n }\n if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n }\n }\n if (direction == \"ltr\") {\n if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n order[0].from = m[0].length;\n order.unshift(new BidiSpan(0, 0, m[0].length));\n }\n if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n lst(order).to -= m[0].length;\n order.push(new BidiSpan(0, len - m[0].length, len));\n }\n }\n\n return direction == \"rtl\" ? order.reverse() : order\n }\n})();\n\n// Get the bidi ordering for the given line (and cache it). Returns\n// false for lines that are fully left-to-right, and an array of\n// BidiSpan objects otherwise.\nfunction getOrder(line, direction) {\n var order = line.order;\n if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n return order\n}\n\n// EVENT HANDLING\n\n// Lightweight event framework. on/off also work on DOM nodes,\n// registering native DOM handlers.\n\nvar noHandlers = [];\n\nvar on = function(emitter, type, f) {\n if (emitter.addEventListener) {\n emitter.addEventListener(type, f, false);\n } else if (emitter.attachEvent) {\n emitter.attachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers || (emitter._handlers = {});\n map$$1[type] = (map$$1[type] || noHandlers).concat(f);\n }\n};\n\nfunction getHandlers(emitter, type) {\n return emitter._handlers && emitter._handlers[type] || noHandlers\n}\n\nfunction off(emitter, type, f) {\n if (emitter.removeEventListener) {\n emitter.removeEventListener(type, f, false);\n } else if (emitter.detachEvent) {\n emitter.detachEvent(\"on\" + type, f);\n } else {\n var map$$1 = emitter._handlers, arr = map$$1 && map$$1[type];\n if (arr) {\n var index = indexOf(arr, f);\n if (index > -1)\n { map$$1[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n }\n }\n}\n\nfunction signal(emitter, type /*, values...*/) {\n var handlers = getHandlers(emitter, type);\n if (!handlers.length) { return }\n var args = Array.prototype.slice.call(arguments, 2);\n for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n}\n\n// The DOM events that CodeMirror handles can be overridden by\n// registering a (non-DOM) handler on the editor for the event name,\n// and preventDefault-ing the event in that handler.\nfunction signalDOMEvent(cm, e, override) {\n if (typeof e == \"string\")\n { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n signal(cm, override || e.type, cm, e);\n return e_defaultPrevented(e) || e.codemirrorIgnore\n}\n\nfunction signalCursorActivity(cm) {\n var arr = cm._handlers && cm._handlers.cursorActivity;\n if (!arr) { return }\n var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n { set.push(arr[i]); } }\n}\n\nfunction hasHandler(emitter, type) {\n return getHandlers(emitter, type).length > 0\n}\n\n// Add on and off methods to a constructor's prototype, to make\n// registering events on such objects more convenient.\nfunction eventMixin(ctor) {\n ctor.prototype.on = function(type, f) {on(this, type, f);};\n ctor.prototype.off = function(type, f) {off(this, type, f);};\n}\n\n// Due to the fact that we still support jurassic IE versions, some\n// compatibility wrappers are needed.\n\nfunction e_preventDefault(e) {\n if (e.preventDefault) { e.preventDefault(); }\n else { e.returnValue = false; }\n}\nfunction e_stopPropagation(e) {\n if (e.stopPropagation) { e.stopPropagation(); }\n else { e.cancelBubble = true; }\n}\nfunction e_defaultPrevented(e) {\n return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n}\nfunction e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\nfunction e_target(e) {return e.target || e.srcElement}\nfunction e_button(e) {\n var b = e.which;\n if (b == null) {\n if (e.button & 1) { b = 1; }\n else if (e.button & 2) { b = 3; }\n else if (e.button & 4) { b = 2; }\n }\n if (mac && e.ctrlKey && b == 1) { b = 3; }\n return b\n}\n\n// Detect drag-and-drop\nvar dragAndDrop = function() {\n // There is *some* kind of drag-and-drop support in IE6-8, but I\n // couldn't get it to work yet.\n if (ie && ie_version < 9) { return false }\n var div = elt('div');\n return \"draggable\" in div || \"dragDrop\" in div\n}();\n\nvar zwspSupported;\nfunction zeroWidthElement(measure) {\n if (zwspSupported == null) {\n var test = elt(\"span\", \"\\u200b\");\n removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n if (measure.firstChild.offsetHeight != 0)\n { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n }\n var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n node.setAttribute(\"cm-text\", \"\");\n return node\n}\n\n// Feature-detect IE's crummy client rect reporting for bidi text\nvar badBidiRects;\nfunction hasBadBidiRects(measure) {\n if (badBidiRects != null) { return badBidiRects }\n var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n var r0 = range(txt, 0, 1).getBoundingClientRect();\n var r1 = range(txt, 1, 2).getBoundingClientRect();\n removeChildren(measure);\n if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n return badBidiRects = (r1.right - r0.right < 3)\n}\n\n// See if \"\".split is the broken IE version, if so, provide an\n// alternative way to split lines.\nvar splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n var pos = 0, result = [], l = string.length;\n while (pos <= l) {\n var nl = string.indexOf(\"\\n\", pos);\n if (nl == -1) { nl = string.length; }\n var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n var rt = line.indexOf(\"\\r\");\n if (rt != -1) {\n result.push(line.slice(0, rt));\n pos += rt + 1;\n } else {\n result.push(line);\n pos = nl + 1;\n }\n }\n return result\n} : function (string) { return string.split(/\\r\\n?|\\n/); };\n\nvar hasSelection = window.getSelection ? function (te) {\n try { return te.selectionStart != te.selectionEnd }\n catch(e) { return false }\n} : function (te) {\n var range$$1;\n try {range$$1 = te.ownerDocument.selection.createRange();}\n catch(e) {}\n if (!range$$1 || range$$1.parentElement() != te) { return false }\n return range$$1.compareEndPoints(\"StartToEnd\", range$$1) != 0\n};\n\nvar hasCopyEvent = (function () {\n var e = elt(\"div\");\n if (\"oncopy\" in e) { return true }\n e.setAttribute(\"oncopy\", \"return;\");\n return typeof e.oncopy == \"function\"\n})();\n\nvar badZoomedRects = null;\nfunction hasBadZoomedRects(measure) {\n if (badZoomedRects != null) { return badZoomedRects }\n var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n var normal = node.getBoundingClientRect();\n var fromRange = range(node, 0, 1).getBoundingClientRect();\n return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n}\n\n// Known modes, by name and by MIME\nvar modes = {};\nvar mimeModes = {};\n\n// Extra arguments are stored as the mode's dependencies, which is\n// used by (legacy) mechanisms like loadmode.js to automatically\n// load a mode. (Preferred mechanism is the require/define calls.)\nfunction defineMode(name, mode) {\n if (arguments.length > 2)\n { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n modes[name] = mode;\n}\n\nfunction defineMIME(mime, spec) {\n mimeModes[mime] = spec;\n}\n\n// Given a MIME type, a {name, ...options} config object, or a name\n// string, return a mode config object.\nfunction resolveMode(spec) {\n if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n spec = mimeModes[spec];\n } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n var found = mimeModes[spec.name];\n if (typeof found == \"string\") { found = {name: found}; }\n spec = createObj(found, spec);\n spec.name = found.name;\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n return resolveMode(\"application/xml\")\n } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n return resolveMode(\"application/json\")\n }\n if (typeof spec == \"string\") { return {name: spec} }\n else { return spec || {name: \"null\"} }\n}\n\n// Given a mode spec (anything that resolveMode accepts), find and\n// initialize an actual mode object.\nfunction getMode(options, spec) {\n spec = resolveMode(spec);\n var mfactory = modes[spec.name];\n if (!mfactory) { return getMode(options, \"text/plain\") }\n var modeObj = mfactory(options, spec);\n if (modeExtensions.hasOwnProperty(spec.name)) {\n var exts = modeExtensions[spec.name];\n for (var prop in exts) {\n if (!exts.hasOwnProperty(prop)) { continue }\n if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n modeObj[prop] = exts[prop];\n }\n }\n modeObj.name = spec.name;\n if (spec.helperType) { modeObj.helperType = spec.helperType; }\n if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n return modeObj\n}\n\n// This can be used to attach properties to mode objects from\n// outside the actual mode definition.\nvar modeExtensions = {};\nfunction extendMode(mode, properties) {\n var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n copyObj(properties, exts);\n}\n\nfunction copyState(mode, state) {\n if (state === true) { return state }\n if (mode.copyState) { return mode.copyState(state) }\n var nstate = {};\n for (var n in state) {\n var val = state[n];\n if (val instanceof Array) { val = val.concat([]); }\n nstate[n] = val;\n }\n return nstate\n}\n\n// Given a mode and a state (for that mode), find the inner mode and\n// state at the position that the state refers to.\nfunction innerMode(mode, state) {\n var info;\n while (mode.innerMode) {\n info = mode.innerMode(state);\n if (!info || info.mode == mode) { break }\n state = info.state;\n mode = info.mode;\n }\n return info || {mode: mode, state: state}\n}\n\nfunction startState(mode, a1, a2) {\n return mode.startState ? mode.startState(a1, a2) : true\n}\n\n// STRING STREAM\n\n// Fed to the mode parsers, provides helper functions to make\n// parsers more succinct.\n\nvar StringStream = function(string, tabSize, lineOracle) {\n this.pos = this.start = 0;\n this.string = string;\n this.tabSize = tabSize || 8;\n this.lastColumnPos = this.lastColumnValue = 0;\n this.lineStart = 0;\n this.lineOracle = lineOracle;\n};\n\nStringStream.prototype.eol = function () {return this.pos >= this.string.length};\nStringStream.prototype.sol = function () {return this.pos == this.lineStart};\nStringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\nStringStream.prototype.next = function () {\n if (this.pos < this.string.length)\n { return this.string.charAt(this.pos++) }\n};\nStringStream.prototype.eat = function (match) {\n var ch = this.string.charAt(this.pos);\n var ok;\n if (typeof match == \"string\") { ok = ch == match; }\n else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n if (ok) {++this.pos; return ch}\n};\nStringStream.prototype.eatWhile = function (match) {\n var start = this.pos;\n while (this.eat(match)){}\n return this.pos > start\n};\nStringStream.prototype.eatSpace = function () {\n var this$1 = this;\n\n var start = this.pos;\n while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos; }\n return this.pos > start\n};\nStringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\nStringStream.prototype.skipTo = function (ch) {\n var found = this.string.indexOf(ch, this.pos);\n if (found > -1) {this.pos = found; return true}\n};\nStringStream.prototype.backUp = function (n) {this.pos -= n;};\nStringStream.prototype.column = function () {\n if (this.lastColumnPos < this.start) {\n this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n this.lastColumnPos = this.start;\n }\n return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n};\nStringStream.prototype.indentation = function () {\n return countColumn(this.string, null, this.tabSize) -\n (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n};\nStringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n if (typeof pattern == \"string\") {\n var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n var substr = this.string.substr(this.pos, pattern.length);\n if (cased(substr) == cased(pattern)) {\n if (consume !== false) { this.pos += pattern.length; }\n return true\n }\n } else {\n var match = this.string.slice(this.pos).match(pattern);\n if (match && match.index > 0) { return null }\n if (match && consume !== false) { this.pos += match[0].length; }\n return match\n }\n};\nStringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\nStringStream.prototype.hideFirstChars = function (n, inner) {\n this.lineStart += n;\n try { return inner() }\n finally { this.lineStart -= n; }\n};\nStringStream.prototype.lookAhead = function (n) {\n var oracle = this.lineOracle;\n return oracle && oracle.lookAhead(n)\n};\nStringStream.prototype.baseToken = function () {\n var oracle = this.lineOracle;\n return oracle && oracle.baseToken(this.pos)\n};\n\nvar SavedContext = function(state, lookAhead) {\n this.state = state;\n this.lookAhead = lookAhead;\n};\n\nvar Context = function(doc, state, line, lookAhead) {\n this.state = state;\n this.doc = doc;\n this.line = line;\n this.maxLookAhead = lookAhead || 0;\n this.baseTokens = null;\n this.baseTokenPos = 1;\n};\n\nContext.prototype.lookAhead = function (n) {\n var line = this.doc.getLine(this.line + n);\n if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n return line\n};\n\nContext.prototype.baseToken = function (n) {\n var this$1 = this;\n\n if (!this.baseTokens) { return null }\n while (this.baseTokens[this.baseTokenPos] <= n)\n { this$1.baseTokenPos += 2; }\n var type = this.baseTokens[this.baseTokenPos + 1];\n return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n size: this.baseTokens[this.baseTokenPos] - n}\n};\n\nContext.prototype.nextLine = function () {\n this.line++;\n if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n};\n\nContext.fromSaved = function (doc, saved, line) {\n if (saved instanceof SavedContext)\n { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n else\n { return new Context(doc, copyState(doc.mode, saved), line) }\n};\n\nContext.prototype.save = function (copy) {\n var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n};\n\n\n// Compute a style array (an array starting with a mode generation\n// -- for invalidation -- followed by pairs of end positions and\n// style strings), which is used to highlight the tokens on the\n// line.\nfunction highlightLine(cm, line, context, forceToEnd) {\n // A styles array always starts with a number identifying the\n // mode/overlays that it is based on (for easy invalidation).\n var st = [cm.state.modeGen], lineClasses = {};\n // Compute the base array of styles\n runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n lineClasses, forceToEnd);\n var state = context.state;\n\n // Run overlays, adjust style array.\n var loop = function ( o ) {\n context.baseTokens = st;\n var overlay = cm.state.overlays[o], i = 1, at = 0;\n context.state = true;\n runMode(cm, line.text, overlay.mode, context, function (end, style) {\n var start = i;\n // Ensure there's a token end at the current position, and that i points at it\n while (at < end) {\n var i_end = st[i];\n if (i_end > end)\n { st.splice(i, 1, end, st[i+1], i_end); }\n i += 2;\n at = Math.min(end, i_end);\n }\n if (!style) { return }\n if (overlay.opaque) {\n st.splice(start, i - start, end, \"overlay \" + style);\n i = start + 2;\n } else {\n for (; start < i; start += 2) {\n var cur = st[start+1];\n st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n }\n }\n }, lineClasses);\n context.state = state;\n context.baseTokens = null;\n context.baseTokenPos = 1;\n };\n\n for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n}\n\nfunction getLineStyles(cm, line, updateFrontier) {\n if (!line.styles || line.styles[0] != cm.state.modeGen) {\n var context = getContextBefore(cm, lineNo(line));\n var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n var result = highlightLine(cm, line, context);\n if (resetState) { context.state = resetState; }\n line.stateAfter = context.save(!resetState);\n line.styles = result.styles;\n if (result.classes) { line.styleClasses = result.classes; }\n else if (line.styleClasses) { line.styleClasses = null; }\n if (updateFrontier === cm.doc.highlightFrontier)\n { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n }\n return line.styles\n}\n\nfunction getContextBefore(cm, n, precise) {\n var doc = cm.doc, display = cm.display;\n if (!doc.mode.startState) { return new Context(doc, true, n) }\n var start = findStartLine(cm, n, precise);\n var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n doc.iter(start, n, function (line) {\n processLine(cm, line.text, context);\n var pos = context.line;\n line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n context.nextLine();\n });\n if (precise) { doc.modeFrontier = context.line; }\n return context\n}\n\n// Lightweight form of highlight -- proceed over this line and\n// update state, but don't save a style array. Used for lines that\n// aren't currently visible.\nfunction processLine(cm, text, context, startAt) {\n var mode = cm.doc.mode;\n var stream = new StringStream(text, cm.options.tabSize, context);\n stream.start = stream.pos = startAt || 0;\n if (text == \"\") { callBlankLine(mode, context.state); }\n while (!stream.eol()) {\n readToken(mode, stream, context.state);\n stream.start = stream.pos;\n }\n}\n\nfunction callBlankLine(mode, state) {\n if (mode.blankLine) { return mode.blankLine(state) }\n if (!mode.innerMode) { return }\n var inner = innerMode(mode, state);\n if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n}\n\nfunction readToken(mode, stream, state, inner) {\n for (var i = 0; i < 10; i++) {\n if (inner) { inner[0] = innerMode(mode, state).mode; }\n var style = mode.token(stream, state);\n if (stream.pos > stream.start) { return style }\n }\n throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n}\n\nvar Token = function(stream, type, state) {\n this.start = stream.start; this.end = stream.pos;\n this.string = stream.current();\n this.type = type || null;\n this.state = state;\n};\n\n// Utility for getTokenAt and getLineTokens\nfunction takeToken(cm, pos, precise, asArray) {\n var doc = cm.doc, mode = doc.mode, style;\n pos = clipPos(doc, pos);\n var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n if (asArray) { tokens = []; }\n while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n stream.start = stream.pos;\n style = readToken(mode, stream, context.state);\n if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n }\n return asArray ? tokens : new Token(stream, style, context.state)\n}\n\nfunction extractLineClasses(type, output) {\n if (type) { for (;;) {\n var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n if (!lineClass) { break }\n type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n if (output[prop] == null)\n { output[prop] = lineClass[2]; }\n else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n { output[prop] += \" \" + lineClass[2]; }\n } }\n return type\n}\n\n// Run the given mode's parser over a line, calling f for each token.\nfunction runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n var flattenSpans = mode.flattenSpans;\n if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n var curStart = 0, curStyle = null;\n var stream = new StringStream(text, cm.options.tabSize, context), style;\n var inner = cm.options.addModeClass && [null];\n if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n while (!stream.eol()) {\n if (stream.pos > cm.options.maxHighlightLength) {\n flattenSpans = false;\n if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n stream.pos = text.length;\n style = null;\n } else {\n style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n }\n if (inner) {\n var mName = inner[0].name;\n if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n }\n if (!flattenSpans || curStyle != style) {\n while (curStart < stream.start) {\n curStart = Math.min(stream.start, curStart + 5000);\n f(curStart, curStyle);\n }\n curStyle = style;\n }\n stream.start = stream.pos;\n }\n while (curStart < stream.pos) {\n // Webkit seems to refuse to render text nodes longer than 57444\n // characters, and returns inaccurate measurements in nodes\n // starting around 5000 chars.\n var pos = Math.min(stream.pos, curStart + 5000);\n f(pos, curStyle);\n curStart = pos;\n }\n}\n\n// Finds the line to start with when starting a parse. Tries to\n// find a line with a stateAfter, so that it can start with a\n// valid state. If that fails, it returns the line with the\n// smallest indentation, which tends to need the least context to\n// parse correctly.\nfunction findStartLine(cm, n, precise) {\n var minindent, minline, doc = cm.doc;\n var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n for (var search = n; search > lim; --search) {\n if (search <= doc.first) { return doc.first }\n var line = getLine(doc, search - 1), after = line.stateAfter;\n if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n { return search }\n var indented = countColumn(line.text, null, cm.options.tabSize);\n if (minline == null || minindent > indented) {\n minline = search - 1;\n minindent = indented;\n }\n }\n return minline\n}\n\nfunction retreatFrontier(doc, n) {\n doc.modeFrontier = Math.min(doc.modeFrontier, n);\n if (doc.highlightFrontier < n - 10) { return }\n var start = doc.first;\n for (var line = n - 1; line > start; line--) {\n var saved = getLine(doc, line).stateAfter;\n // change is on 3\n // state on line 1 looked ahead 2 -- so saw 3\n // test 1 + 2 < 3 should cover this\n if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n start = line + 1;\n break\n }\n }\n doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n}\n\n// LINE DATA STRUCTURE\n\n// Line objects. These hold state related to a line, including\n// highlighting info (the styles array).\nvar Line = function(text, markedSpans, estimateHeight) {\n this.text = text;\n attachMarkedSpans(this, markedSpans);\n this.height = estimateHeight ? estimateHeight(this) : 1;\n};\n\nLine.prototype.lineNo = function () { return lineNo(this) };\neventMixin(Line);\n\n// Change the content (text, markers) of a line. Automatically\n// invalidates cached information and tries to re-estimate the\n// line's height.\nfunction updateLine(line, text, markedSpans, estimateHeight) {\n line.text = text;\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n if (line.order != null) { line.order = null; }\n detachMarkedSpans(line);\n attachMarkedSpans(line, markedSpans);\n var estHeight = estimateHeight ? estimateHeight(line) : 1;\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n}\n\n// Detach a line from the document tree and its markers.\nfunction cleanUpLine(line) {\n line.parent = null;\n detachMarkedSpans(line);\n}\n\n// Convert a style as returned by a mode (either null, or a string\n// containing one or more styles) to a CSS style. This is cached,\n// and also looks for line-wide styles.\nvar styleToClassCache = {};\nvar styleToClassCacheWithMode = {};\nfunction interpretTokenStyle(style, options) {\n if (!style || /^\\s*$/.test(style)) { return null }\n var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n return cache[style] ||\n (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n}\n\n// Render the DOM representation of the text of a line. Also builds\n// up a 'line map', which points at the DOM nodes that represent\n// specific stretches of text, and is used by the measuring code.\n// The returned object contains the DOM node, this map, and\n// information about line-wide styles that were set by the mode.\nfunction buildLineContent(cm, lineView) {\n // The padding-right forces the element to have a 'border', which\n // is needed on Webkit to be able to get line-level bounding\n // rectangles for it (in measureChar).\n var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n col: 0, pos: 0, cm: cm,\n trailingSpace: false,\n splitSpaces: (ie || webkit) && cm.getOption(\"lineWrapping\")};\n lineView.measure = {};\n\n // Iterate over the logical lines that make up this visual line.\n for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n builder.pos = 0;\n builder.addToken = buildToken;\n // Optionally wire in some hacks into the token-rendering\n // algorithm, to deal with browser quirks.\n if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n builder.map = [];\n var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n if (line.styleClasses) {\n if (line.styleClasses.bgClass)\n { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n if (line.styleClasses.textClass)\n { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n }\n\n // Ensure at least a single node is present, for measuring.\n if (builder.map.length == 0)\n { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n // Store the map and a cache object for the current logical line\n if (i == 0) {\n lineView.measure.map = builder.map;\n lineView.measure.cache = {};\n } else {\n (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n }\n }\n\n // See issue #2901\n if (webkit) {\n var last = builder.content.lastChild;\n if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n { builder.content.className = \"cm-tab-wrap-hack\"; }\n }\n\n signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n if (builder.pre.className)\n { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n return builder\n}\n\nfunction defaultSpecialCharPlaceholder(ch) {\n var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n token.setAttribute(\"aria-label\", token.title);\n return token\n}\n\n// Build up the DOM representation for a single token, and add it to\n// the line map. Takes care to render special characters separately.\nfunction buildToken(builder, text, style, startStyle, endStyle, title, css) {\n if (!text) { return }\n var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n var special = builder.cm.state.specialChars, mustWrap = false;\n var content;\n if (!special.test(text)) {\n builder.col += text.length;\n content = document.createTextNode(displayText);\n builder.map.push(builder.pos, builder.pos + text.length, content);\n if (ie && ie_version < 9) { mustWrap = true; }\n builder.pos += text.length;\n } else {\n content = document.createDocumentFragment();\n var pos = 0;\n while (true) {\n special.lastIndex = pos;\n var m = special.exec(text);\n var skipped = m ? m.index - pos : text.length - pos;\n if (skipped) {\n var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n else { content.appendChild(txt); }\n builder.map.push(builder.pos, builder.pos + skipped, txt);\n builder.col += skipped;\n builder.pos += skipped;\n }\n if (!m) { break }\n pos += skipped + 1;\n var txt$1 = (void 0);\n if (m[0] == \"\\t\") {\n var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n txt$1.setAttribute(\"role\", \"presentation\");\n txt$1.setAttribute(\"cm-text\", \"\\t\");\n builder.col += tabWidth;\n } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n txt$1.setAttribute(\"cm-text\", m[0]);\n builder.col += 1;\n } else {\n txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n txt$1.setAttribute(\"cm-text\", m[0]);\n if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n else { content.appendChild(txt$1); }\n builder.col += 1;\n }\n builder.map.push(builder.pos, builder.pos + 1, txt$1);\n builder.pos++;\n }\n }\n builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n if (style || startStyle || endStyle || mustWrap || css) {\n var fullStyle = style || \"\";\n if (startStyle) { fullStyle += startStyle; }\n if (endStyle) { fullStyle += endStyle; }\n var token = elt(\"span\", [content], fullStyle, css);\n if (title) { token.title = title; }\n return builder.content.appendChild(token)\n }\n builder.content.appendChild(content);\n}\n\nfunction splitSpaces(text, trailingBefore) {\n if (text.length > 1 && !/ /.test(text)) { return text }\n var spaceBefore = trailingBefore, result = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n { ch = \"\\u00a0\"; }\n result += ch;\n spaceBefore = ch == \" \";\n }\n return result\n}\n\n// Work around nonsense dimensions being reported for stretches of\n// right-to-left text.\nfunction buildTokenBadBidi(inner, order) {\n return function (builder, text, style, startStyle, endStyle, title, css) {\n style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n var start = builder.pos, end = start + text.length;\n for (;;) {\n // Find the part that overlaps with the start of this text\n var part = (void 0);\n for (var i = 0; i < order.length; i++) {\n part = order[i];\n if (part.to > start && part.from <= start) { break }\n }\n if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) }\n inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css);\n startStyle = null;\n text = text.slice(part.to - start);\n start = part.to;\n }\n }\n}\n\nfunction buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n var widget = !ignoreWidget && marker.widgetNode;\n if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n if (!widget)\n { widget = builder.content.appendChild(document.createElement(\"span\")); }\n widget.setAttribute(\"cm-marker\", marker.id);\n }\n if (widget) {\n builder.cm.display.input.setUneditable(widget);\n builder.content.appendChild(widget);\n }\n builder.pos += size;\n builder.trailingSpace = false;\n}\n\n// Outputs a number of spans to make up a line, taking highlighting\n// and marked text into account.\nfunction insertLineContent(line, builder, styles) {\n var spans = line.markedSpans, allText = line.text, at = 0;\n if (!spans) {\n for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n return\n }\n\n var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed;\n for (;;) {\n if (nextChange == pos) { // Update current marker set\n spanStyle = spanEndStyle = spanStartStyle = title = css = \"\";\n collapsed = null; nextChange = Infinity;\n var foundBookmarks = [], endStyles = (void 0);\n for (var j = 0; j < spans.length; ++j) {\n var sp = spans[j], m = sp.marker;\n if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n foundBookmarks.push(m);\n } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n nextChange = sp.to;\n spanEndStyle = \"\";\n }\n if (m.className) { spanStyle += \" \" + m.className; }\n if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n if (m.title && !title) { title = m.title; }\n if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n { collapsed = sp; }\n } else if (sp.from > pos && nextChange > sp.from) {\n nextChange = sp.from;\n }\n }\n if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n if (collapsed && (collapsed.from || 0) == pos) {\n buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n collapsed.marker, collapsed.from == null);\n if (collapsed.to == null) { return }\n if (collapsed.to == pos) { collapsed = false; }\n }\n }\n if (pos >= len) { break }\n\n var upto = Math.min(len, nextChange);\n while (true) {\n if (text) {\n var end = pos + text.length;\n if (!collapsed) {\n var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", title, css);\n }\n if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n pos = end;\n spanStartStyle = \"\";\n }\n text = allText.slice(at, at = styles[i++]);\n style = interpretTokenStyle(styles[i++], builder.cm.options);\n }\n }\n}\n\n\n// These objects are used to represent the visible (currently drawn)\n// part of the document. A LineView may correspond to multiple\n// logical lines, if those are connected by collapsed ranges.\nfunction LineView(doc, line, lineN) {\n // The starting line\n this.line = line;\n // Continuing lines, if any\n this.rest = visualLineContinued(line);\n // Number of logical lines in this visual line\n this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n this.node = this.text = null;\n this.hidden = lineIsHidden(doc, line);\n}\n\n// Create a range of LineView objects for the given lines.\nfunction buildViewArray(cm, from, to) {\n var array = [], nextPos;\n for (var pos = from; pos < to; pos = nextPos) {\n var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n nextPos = pos + view.size;\n array.push(view);\n }\n return array\n}\n\nvar operationGroup = null;\n\nfunction pushOperation(op) {\n if (operationGroup) {\n operationGroup.ops.push(op);\n } else {\n op.ownsGroup = operationGroup = {\n ops: [op],\n delayedCallbacks: []\n };\n }\n}\n\nfunction fireCallbacksForOps(group) {\n // Calls delayed callbacks and cursorActivity handlers until no\n // new ones appear\n var callbacks = group.delayedCallbacks, i = 0;\n do {\n for (; i < callbacks.length; i++)\n { callbacks[i].call(null); }\n for (var j = 0; j < group.ops.length; j++) {\n var op = group.ops[j];\n if (op.cursorActivityHandlers)\n { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n }\n } while (i < callbacks.length)\n}\n\nfunction finishOperation(op, endCb) {\n var group = op.ownsGroup;\n if (!group) { return }\n\n try { fireCallbacksForOps(group); }\n finally {\n operationGroup = null;\n endCb(group);\n }\n}\n\nvar orphanDelayedCallbacks = null;\n\n// Often, we want to signal events at a point where we are in the\n// middle of some work, but don't want the handler to start calling\n// other methods on the editor, which might be in an inconsistent\n// state or simply not expect any other events to happen.\n// signalLater looks whether there are any handlers, and schedules\n// them to be executed when the last operation ends, or, if no\n// operation is active, when a timeout fires.\nfunction signalLater(emitter, type /*, values...*/) {\n var arr = getHandlers(emitter, type);\n if (!arr.length) { return }\n var args = Array.prototype.slice.call(arguments, 2), list;\n if (operationGroup) {\n list = operationGroup.delayedCallbacks;\n } else if (orphanDelayedCallbacks) {\n list = orphanDelayedCallbacks;\n } else {\n list = orphanDelayedCallbacks = [];\n setTimeout(fireOrphanDelayed, 0);\n }\n var loop = function ( i ) {\n list.push(function () { return arr[i].apply(null, args); });\n };\n\n for (var i = 0; i < arr.length; ++i)\n loop( i );\n}\n\nfunction fireOrphanDelayed() {\n var delayed = orphanDelayedCallbacks;\n orphanDelayedCallbacks = null;\n for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n}\n\n// When an aspect of a line changes, a string is added to\n// lineView.changes. This updates the relevant part of the line's\n// DOM structure.\nfunction updateLineForChanges(cm, lineView, lineN, dims) {\n for (var j = 0; j < lineView.changes.length; j++) {\n var type = lineView.changes[j];\n if (type == \"text\") { updateLineText(cm, lineView); }\n else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n else if (type == \"class\") { updateLineClasses(cm, lineView); }\n else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n }\n lineView.changes = null;\n}\n\n// Lines with gutter elements, widgets or a background class need to\n// be wrapped, and have the extra elements added to the wrapper div\nfunction ensureLineWrapped(lineView) {\n if (lineView.node == lineView.text) {\n lineView.node = elt(\"div\", null, null, \"position: relative\");\n if (lineView.text.parentNode)\n { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n lineView.node.appendChild(lineView.text);\n if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n }\n return lineView.node\n}\n\nfunction updateLineBackground(cm, lineView) {\n var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n if (cls) { cls += \" CodeMirror-linebackground\"; }\n if (lineView.background) {\n if (cls) { lineView.background.className = cls; }\n else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n } else if (cls) {\n var wrap = ensureLineWrapped(lineView);\n lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n cm.display.input.setUneditable(lineView.background);\n }\n}\n\n// Wrapper around buildLineContent which will reuse the structure\n// in display.externalMeasured when possible.\nfunction getLineContent(cm, lineView) {\n var ext = cm.display.externalMeasured;\n if (ext && ext.line == lineView.line) {\n cm.display.externalMeasured = null;\n lineView.measure = ext.measure;\n return ext.built\n }\n return buildLineContent(cm, lineView)\n}\n\n// Redraw the line's text. Interacts with the background and text\n// classes because the mode may output tokens that influence these\n// classes.\nfunction updateLineText(cm, lineView) {\n var cls = lineView.text.className;\n var built = getLineContent(cm, lineView);\n if (lineView.text == lineView.node) { lineView.node = built.pre; }\n lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n lineView.text = built.pre;\n if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n lineView.bgClass = built.bgClass;\n lineView.textClass = built.textClass;\n updateLineClasses(cm, lineView);\n } else if (cls) {\n lineView.text.className = cls;\n }\n}\n\nfunction updateLineClasses(cm, lineView) {\n updateLineBackground(cm, lineView);\n if (lineView.line.wrapClass)\n { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n else if (lineView.node != lineView.text)\n { lineView.node.className = \"\"; }\n var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n lineView.text.className = textClass || \"\";\n}\n\nfunction updateLineGutter(cm, lineView, lineN, dims) {\n if (lineView.gutter) {\n lineView.node.removeChild(lineView.gutter);\n lineView.gutter = null;\n }\n if (lineView.gutterBackground) {\n lineView.node.removeChild(lineView.gutterBackground);\n lineView.gutterBackground = null;\n }\n if (lineView.line.gutterClass) {\n var wrap = ensureLineWrapped(lineView);\n lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(lineView.gutterBackground);\n wrap.insertBefore(lineView.gutterBackground, lineView.text);\n }\n var markers = lineView.line.gutterMarkers;\n if (cm.options.lineNumbers || markers) {\n var wrap$1 = ensureLineWrapped(lineView);\n var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n cm.display.input.setUneditable(gutterWrap);\n wrap$1.insertBefore(gutterWrap, lineView.text);\n if (lineView.line.gutterClass)\n { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n { lineView.lineNumber = gutterWrap.appendChild(\n elt(\"div\", lineNumberFor(cm.options, lineN),\n \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) {\n var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id];\n if (found)\n { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n } }\n }\n}\n\nfunction updateLineWidgets(cm, lineView, dims) {\n if (lineView.alignable) { lineView.alignable = null; }\n for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n next = node.nextSibling;\n if (node.className == \"CodeMirror-linewidget\")\n { lineView.node.removeChild(node); }\n }\n insertLineWidgets(cm, lineView, dims);\n}\n\n// Build a line's DOM representation from scratch\nfunction buildLineElement(cm, lineView, lineN, dims) {\n var built = getLineContent(cm, lineView);\n lineView.text = lineView.node = built.pre;\n if (built.bgClass) { lineView.bgClass = built.bgClass; }\n if (built.textClass) { lineView.textClass = built.textClass; }\n\n updateLineClasses(cm, lineView);\n updateLineGutter(cm, lineView, lineN, dims);\n insertLineWidgets(cm, lineView, dims);\n return lineView.node\n}\n\n// A lineView may contain multiple logical lines (when merged by\n// collapsed spans). The widgets for all of them need to be drawn.\nfunction insertLineWidgets(cm, lineView, dims) {\n insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n}\n\nfunction insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n if (!line.widgets) { return }\n var wrap = ensureLineWrapped(lineView);\n for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\");\n if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n positionLineWidget(widget, node, lineView, dims);\n cm.display.input.setUneditable(node);\n if (allowAbove && widget.above)\n { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n else\n { wrap.appendChild(node); }\n signalLater(widget, \"redraw\");\n }\n}\n\nfunction positionLineWidget(widget, node, lineView, dims) {\n if (widget.noHScroll) {\n (lineView.alignable || (lineView.alignable = [])).push(node);\n var width = dims.wrapperWidth;\n node.style.left = dims.fixedPos + \"px\";\n if (!widget.coverGutter) {\n width -= dims.gutterTotalWidth;\n node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n }\n node.style.width = width + \"px\";\n }\n if (widget.coverGutter) {\n node.style.zIndex = 5;\n node.style.position = \"relative\";\n if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n }\n}\n\nfunction widgetHeight(widget) {\n if (widget.height != null) { return widget.height }\n var cm = widget.doc.cm;\n if (!cm) { return 0 }\n if (!contains(document.body, widget.node)) {\n var parentStyle = \"position: relative;\";\n if (widget.coverGutter)\n { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n if (widget.noHScroll)\n { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n }\n return widget.height = widget.node.parentNode.offsetHeight\n}\n\n// Return true when the given mouse event happened in a widget\nfunction eventInWidget(display, e) {\n for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n (n.parentNode == display.sizer && n != display.mover))\n { return true }\n }\n}\n\n// POSITION MEASUREMENT\n\nfunction paddingTop(display) {return display.lineSpace.offsetTop}\nfunction paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\nfunction paddingH(display) {\n if (display.cachedPaddingH) { return display.cachedPaddingH }\n var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\"));\n var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n return data\n}\n\nfunction scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\nfunction displayWidth(cm) {\n return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n}\nfunction displayHeight(cm) {\n return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n}\n\n// Ensure the lineView.wrapping.heights array is populated. This is\n// an array of bottom offsets for the lines that make up a drawn\n// line. When lineWrapping is on, there might be more than one\n// height.\nfunction ensureLineHeights(cm, lineView, rect) {\n var wrapping = cm.options.lineWrapping;\n var curWidth = wrapping && displayWidth(cm);\n if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n var heights = lineView.measure.heights = [];\n if (wrapping) {\n lineView.measure.width = curWidth;\n var rects = lineView.text.firstChild.getClientRects();\n for (var i = 0; i < rects.length - 1; i++) {\n var cur = rects[i], next = rects[i + 1];\n if (Math.abs(cur.bottom - next.bottom) > 2)\n { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n }\n }\n heights.push(rect.bottom - rect.top);\n }\n}\n\n// Find a line map (mapping character offsets to text nodes) and a\n// measurement cache for the given line number. (A line view might\n// contain multiple lines when collapsed ranges are present.)\nfunction mapFromLineView(lineView, line, lineN) {\n if (lineView.line == line)\n { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n for (var i = 0; i < lineView.rest.length; i++)\n { if (lineView.rest[i] == line)\n { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n { if (lineNo(lineView.rest[i$1]) > lineN)\n { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n}\n\n// Render a line into the hidden node display.externalMeasured. Used\n// when measurement is needed for a line that's not in the viewport.\nfunction updateExternalMeasurement(cm, line) {\n line = visualLine(line);\n var lineN = lineNo(line);\n var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n view.lineN = lineN;\n var built = view.built = buildLineContent(cm, view);\n view.text = built.pre;\n removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n return view\n}\n\n// Get a {top, bottom, left, right} box (in line-local coordinates)\n// for a given character.\nfunction measureChar(cm, line, ch, bias) {\n return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n}\n\n// Find a line view that corresponds to the given line number.\nfunction findViewForLine(cm, lineN) {\n if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n { return cm.display.view[findViewIndex(cm, lineN)] }\n var ext = cm.display.externalMeasured;\n if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n { return ext }\n}\n\n// Measurement can be split in two steps, the set-up work that\n// applies to the whole line, and the measurement of the actual\n// character. Functions like coordsChar, that need to do a lot of\n// measurements in a row, can thus ensure that the set-up work is\n// only done once.\nfunction prepareMeasureForLine(cm, line) {\n var lineN = lineNo(line);\n var view = findViewForLine(cm, lineN);\n if (view && !view.text) {\n view = null;\n } else if (view && view.changes) {\n updateLineForChanges(cm, view, lineN, getDimensions(cm));\n cm.curOp.forceUpdate = true;\n }\n if (!view)\n { view = updateExternalMeasurement(cm, line); }\n\n var info = mapFromLineView(view, line, lineN);\n return {\n line: line, view: view, rect: null,\n map: info.map, cache: info.cache, before: info.before,\n hasHeights: false\n }\n}\n\n// Given a prepared measurement object, measures the position of an\n// actual character (or fetches it from the cache).\nfunction measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n if (prepared.before) { ch = -1; }\n var key = ch + (bias || \"\"), found;\n if (prepared.cache.hasOwnProperty(key)) {\n found = prepared.cache[key];\n } else {\n if (!prepared.rect)\n { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n if (!prepared.hasHeights) {\n ensureLineHeights(cm, prepared.view, prepared.rect);\n prepared.hasHeights = true;\n }\n found = measureCharInner(cm, prepared, ch, bias);\n if (!found.bogus) { prepared.cache[key] = found; }\n }\n return {left: found.left, right: found.right,\n top: varHeight ? found.rtop : found.top,\n bottom: varHeight ? found.rbottom : found.bottom}\n}\n\nvar nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\nfunction nodeAndOffsetInLineMap(map$$1, ch, bias) {\n var node, start, end, collapse, mStart, mEnd;\n // First, search the line map for the text node corresponding to,\n // or closest to, the target character.\n for (var i = 0; i < map$$1.length; i += 3) {\n mStart = map$$1[i];\n mEnd = map$$1[i + 1];\n if (ch < mStart) {\n start = 0; end = 1;\n collapse = \"left\";\n } else if (ch < mEnd) {\n start = ch - mStart;\n end = start + 1;\n } else if (i == map$$1.length - 3 || ch == mEnd && map$$1[i + 3] > ch) {\n end = mEnd - mStart;\n start = end - 1;\n if (ch >= mEnd) { collapse = \"right\"; }\n }\n if (start != null) {\n node = map$$1[i + 2];\n if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n { collapse = bias; }\n if (bias == \"left\" && start == 0)\n { while (i && map$$1[i - 2] == map$$1[i - 3] && map$$1[i - 1].insertLeft) {\n node = map$$1[(i -= 3) + 2];\n collapse = \"left\";\n } }\n if (bias == \"right\" && start == mEnd - mStart)\n { while (i < map$$1.length - 3 && map$$1[i + 3] == map$$1[i + 4] && !map$$1[i + 5].insertLeft) {\n node = map$$1[(i += 3) + 2];\n collapse = \"right\";\n } }\n break\n }\n }\n return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n}\n\nfunction getUsefulRect(rects, bias) {\n var rect = nullRect;\n if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n if ((rect = rects[i]).left != rect.right) { break }\n } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n if ((rect = rects[i$1]).left != rect.right) { break }\n } }\n return rect\n}\n\nfunction measureCharInner(cm, prepared, ch, bias) {\n var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n var rect;\n if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n { rect = node.parentNode.getBoundingClientRect(); }\n else\n { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n if (rect.left || rect.right || start == 0) { break }\n end = start;\n start = start - 1;\n collapse = \"right\";\n }\n if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n } else { // If it is a widget, simply get the box for the whole widget.\n if (start > 0) { collapse = bias = \"right\"; }\n var rects;\n if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n else\n { rect = node.getBoundingClientRect(); }\n }\n if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n var rSpan = node.parentNode.getClientRects()[0];\n if (rSpan)\n { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n else\n { rect = nullRect; }\n }\n\n var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n var mid = (rtop + rbot) / 2;\n var heights = prepared.view.measure.heights;\n var i = 0;\n for (; i < heights.length - 1; i++)\n { if (mid < heights[i]) { break } }\n var top = i ? heights[i - 1] : 0, bot = heights[i];\n var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n top: top, bottom: bot};\n if (!rect.left && !rect.right) { result.bogus = true; }\n if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n return result\n}\n\n// Work around problem with bounding client rects on ranges being\n// returned incorrectly when zoomed on IE10 and below.\nfunction maybeUpdateRectForZooming(measure, rect) {\n if (!window.screen || screen.logicalXDPI == null ||\n screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n { return rect }\n var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n return {left: rect.left * scaleX, right: rect.right * scaleX,\n top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n}\n\nfunction clearLineMeasurementCacheFor(lineView) {\n if (lineView.measure) {\n lineView.measure.cache = {};\n lineView.measure.heights = null;\n if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n { lineView.measure.caches[i] = {}; } }\n }\n}\n\nfunction clearLineMeasurementCache(cm) {\n cm.display.externalMeasure = null;\n removeChildren(cm.display.lineMeasure);\n for (var i = 0; i < cm.display.view.length; i++)\n { clearLineMeasurementCacheFor(cm.display.view[i]); }\n}\n\nfunction clearCaches(cm) {\n clearLineMeasurementCache(cm);\n cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n cm.display.lineNumChars = null;\n}\n\nfunction pageScrollX() {\n // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n // which causes page_Offset and bounding client rects to use\n // different reference viewports and invalidate our calculations.\n if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n}\nfunction pageScrollY() {\n if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n return window.pageYOffset || (document.documentElement || document.body).scrollTop\n}\n\nfunction widgetTopHeight(lineObj) {\n var height = 0;\n if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n { height += widgetHeight(lineObj.widgets[i]); } } }\n return height\n}\n\n// Converts a {top, bottom, left, right} box from line-local\n// coordinates into another coordinate system. Context may be one of\n// \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n// or \"page\".\nfunction intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n if (!includeWidgets) {\n var height = widgetTopHeight(lineObj);\n rect.top += height; rect.bottom += height;\n }\n if (context == \"line\") { return rect }\n if (!context) { context = \"local\"; }\n var yOff = heightAtLine(lineObj);\n if (context == \"local\") { yOff += paddingTop(cm.display); }\n else { yOff -= cm.display.viewOffset; }\n if (context == \"page\" || context == \"window\") {\n var lOff = cm.display.lineSpace.getBoundingClientRect();\n yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n rect.left += xOff; rect.right += xOff;\n }\n rect.top += yOff; rect.bottom += yOff;\n return rect\n}\n\n// Coverts a box from \"div\" coords to another coordinate system.\n// Context may be \"window\", \"page\", \"div\", or \"local\"./null.\nfunction fromCoordSystem(cm, coords, context) {\n if (context == \"div\") { return coords }\n var left = coords.left, top = coords.top;\n // First move into \"page\" coordinate system\n if (context == \"page\") {\n left -= pageScrollX();\n top -= pageScrollY();\n } else if (context == \"local\" || !context) {\n var localBox = cm.display.sizer.getBoundingClientRect();\n left += localBox.left;\n top += localBox.top;\n }\n\n var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n}\n\nfunction charCoords(cm, pos, context, lineObj, bias) {\n if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n}\n\n// Returns a box for a given cursor position, which may have an\n// 'other' property containing the position of the secondary cursor\n// on a bidi boundary.\n// A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n// and after `char - 1` in writing order of `char - 1`\n// A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n// and before `char` in writing order of `char`\n// Examples (upper-case letters are RTL, lower-case are LTR):\n// Pos(0, 1, ...)\n// before after\n// ab a|b a|b\n// aB a|B aB|\n// Ab |Ab A|b\n// AB B|A B|A\n// Every position after the last character on a line is considered to stick\n// to the last character on the line.\nfunction cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n lineObj = lineObj || getLine(cm.doc, pos.line);\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n function get(ch, right) {\n var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n if (right) { m.left = m.right; } else { m.right = m.left; }\n return intoCoordSystem(cm, lineObj, m, context)\n }\n var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n if (ch >= lineObj.text.length) {\n ch = lineObj.text.length;\n sticky = \"before\";\n } else if (ch <= 0) {\n ch = 0;\n sticky = \"after\";\n }\n if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n function getBidi(ch, partPos, invert) {\n var part = order[partPos], right = part.level == 1;\n return get(invert ? ch - 1 : ch, right != invert)\n }\n var partPos = getBidiPartAt(order, ch, sticky);\n var other = bidiOther;\n var val = getBidi(ch, partPos, sticky == \"before\");\n if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n return val\n}\n\n// Used to cheaply estimate the coordinates for a position. Used for\n// intermediate scroll updates.\nfunction estimateCoords(cm, pos) {\n var left = 0;\n pos = clipPos(cm.doc, pos);\n if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n var lineObj = getLine(cm.doc, pos.line);\n var top = heightAtLine(lineObj) + paddingTop(cm.display);\n return {left: left, right: left, top: top, bottom: top + lineObj.height}\n}\n\n// Positions returned by coordsChar contain some extra information.\n// xRel is the relative x position of the input coordinates compared\n// to the found position (so xRel > 0 means the coordinates are to\n// the right of the character position, for example). When outside\n// is true, that means the coordinates lie outside the line's\n// vertical range.\nfunction PosWithInfo(line, ch, sticky, outside, xRel) {\n var pos = Pos(line, ch, sticky);\n pos.xRel = xRel;\n if (outside) { pos.outside = true; }\n return pos\n}\n\n// Compute the character position closest to the given coordinates.\n// Input must be lineSpace-local (\"div\" coordinate system).\nfunction coordsChar(cm, x, y) {\n var doc = cm.doc;\n y += cm.display.viewOffset;\n if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) }\n var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n if (lineN > last)\n { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) }\n if (x < 0) { x = 0; }\n\n var lineObj = getLine(doc, lineN);\n for (;;) {\n var found = coordsCharInner(cm, lineObj, lineN, x, y);\n var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 ? 1 : 0));\n if (!collapsed) { return found }\n var rangeEnd = collapsed.find(1);\n if (rangeEnd.line == lineN) { return rangeEnd }\n lineObj = getLine(doc, lineN = rangeEnd.line);\n }\n}\n\nfunction wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n y -= widgetTopHeight(lineObj);\n var end = lineObj.text.length;\n var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n return {begin: begin, end: end}\n}\n\nfunction wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n}\n\n// Returns true if the given side of a box is after the given\n// coordinates, in top-to-bottom, left-to-right order.\nfunction boxIsAfter(box, x, y, left) {\n return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n}\n\nfunction coordsCharInner(cm, lineObj, lineNo$$1, x, y) {\n // Move y into line-local coordinate space\n y -= heightAtLine(lineObj);\n var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n // When directly calling `measureCharPrepared`, we have to adjust\n // for the widgets at this line.\n var widgetHeight$$1 = widgetTopHeight(lineObj);\n var begin = 0, end = lineObj.text.length, ltr = true;\n\n var order = getOrder(lineObj, cm.doc.direction);\n // If the line isn't plain left-to-right text, first figure out\n // which bidi section the coordinates fall into.\n if (order) {\n var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n (cm, lineObj, lineNo$$1, preparedMeasure, order, x, y);\n ltr = part.level != 1;\n // The awkward -1 offsets are needed because findFirst (called\n // on these below) will treat its first bound as inclusive,\n // second as exclusive, but we want to actually address the\n // characters in the part's range\n begin = ltr ? part.from : part.to - 1;\n end = ltr ? part.to : part.from - 1;\n }\n\n // A binary search to find the first character whose bounding box\n // starts after the coordinates. If we run across any whose box wrap\n // the coordinates, store that.\n var chAround = null, boxAround = null;\n var ch = findFirst(function (ch) {\n var box = measureCharPrepared(cm, preparedMeasure, ch);\n box.top += widgetHeight$$1; box.bottom += widgetHeight$$1;\n if (!boxIsAfter(box, x, y, false)) { return false }\n if (box.top <= y && box.left <= x) {\n chAround = ch;\n boxAround = box;\n }\n return true\n }, begin, end);\n\n var baseX, sticky, outside = false;\n // If a box around the coordinates was found, use that\n if (boxAround) {\n // Distinguish coordinates nearer to the left or right side of the box\n var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n ch = chAround + (atStart ? 0 : 1);\n sticky = atStart ? \"after\" : \"before\";\n baseX = atLeft ? boxAround.left : boxAround.right;\n } else {\n // (Adjust for extended bound, if necessary.)\n if (!ltr && (ch == end || ch == begin)) { ch++; }\n // To determine which side to associate with, get the box to the\n // left of the character and compare it's vertical position to the\n // coordinates\n sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight$$1 <= y) == ltr ?\n \"after\" : \"before\";\n // Now get accurate coordinates for this place, in order to get a\n // base X position\n var coords = cursorCoords(cm, Pos(lineNo$$1, ch, sticky), \"line\", lineObj, preparedMeasure);\n baseX = coords.left;\n outside = y < coords.top || y >= coords.bottom;\n }\n\n ch = skipExtendingChars(lineObj.text, ch, 1);\n return PosWithInfo(lineNo$$1, ch, sticky, outside, x - baseX)\n}\n\nfunction coordsBidiPart(cm, lineObj, lineNo$$1, preparedMeasure, order, x, y) {\n // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n // situation, we can take this ordering to correspond to the visual\n // ordering. This finds the first part whose end is after the given\n // coordinates.\n var index = findFirst(function (i) {\n var part = order[i], ltr = part.level != 1;\n return boxIsAfter(cursorCoords(cm, Pos(lineNo$$1, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n \"line\", lineObj, preparedMeasure), x, y, true)\n }, 0, order.length - 1);\n var part = order[index];\n // If this isn't the first part, the part's start is also after\n // the coordinates, and the coordinates aren't on the same line as\n // that start, move one part back.\n if (index > 0) {\n var ltr = part.level != 1;\n var start = cursorCoords(cm, Pos(lineNo$$1, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n \"line\", lineObj, preparedMeasure);\n if (boxIsAfter(start, x, y, true) && start.top > y)\n { part = order[index - 1]; }\n }\n return part\n}\n\nfunction coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n // In a wrapped line, rtl text on wrapping boundaries can do things\n // that don't correspond to the ordering in our `order` array at\n // all, so a binary search doesn't work, and we want to return a\n // part that only spans one line so that the binary search in\n // coordsCharInner is safe. As such, we first find the extent of the\n // wrapped line, and then do a flat search in which we discard any\n // spans that aren't on the line.\n var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n var begin = ref.begin;\n var end = ref.end;\n if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n var part = null, closestDist = null;\n for (var i = 0; i < order.length; i++) {\n var p = order[i];\n if (p.from >= end || p.to <= begin) { continue }\n var ltr = p.level != 1;\n var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n // Weigh against spans ending before this, so that they are only\n // picked if nothing ends after\n var dist = endX < x ? x - endX + 1e9 : endX - x;\n if (!part || closestDist > dist) {\n part = p;\n closestDist = dist;\n }\n }\n if (!part) { part = order[order.length - 1]; }\n // Clip the part to the wrapped line.\n if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n return part\n}\n\nvar measureText;\n// Compute the default text height.\nfunction textHeight(display) {\n if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n if (measureText == null) {\n measureText = elt(\"pre\");\n // Measure a bunch of lines, for browsers that compute\n // fractional heights.\n for (var i = 0; i < 49; ++i) {\n measureText.appendChild(document.createTextNode(\"x\"));\n measureText.appendChild(elt(\"br\"));\n }\n measureText.appendChild(document.createTextNode(\"x\"));\n }\n removeChildrenAndAdd(display.measure, measureText);\n var height = measureText.offsetHeight / 50;\n if (height > 3) { display.cachedTextHeight = height; }\n removeChildren(display.measure);\n return height || 1\n}\n\n// Compute the default character width.\nfunction charWidth(display) {\n if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n var anchor = elt(\"span\", \"xxxxxxxxxx\");\n var pre = elt(\"pre\", [anchor]);\n removeChildrenAndAdd(display.measure, pre);\n var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n if (width > 2) { display.cachedCharWidth = width; }\n return width || 10\n}\n\n// Do a bulk-read of the DOM positions and sizes needed to draw the\n// view, so that we don't interleave reading and writing to the DOM.\nfunction getDimensions(cm) {\n var d = cm.display, left = {}, width = {};\n var gutterLeft = d.gutters.clientLeft;\n for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;\n width[cm.options.gutters[i]] = n.clientWidth;\n }\n return {fixedPos: compensateForHScroll(d),\n gutterTotalWidth: d.gutters.offsetWidth,\n gutterLeft: left,\n gutterWidth: width,\n wrapperWidth: d.wrapper.clientWidth}\n}\n\n// Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n// but using getBoundingClientRect to get a sub-pixel-accurate\n// result.\nfunction compensateForHScroll(display) {\n return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n}\n\n// Returns a function that estimates the height of a line, to use as\n// first approximation until the line becomes visible (and is thus\n// properly measurable).\nfunction estimateHeight(cm) {\n var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n return function (line) {\n if (lineIsHidden(cm.doc, line)) { return 0 }\n\n var widgetsHeight = 0;\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n } }\n\n if (wrapping)\n { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n else\n { return widgetsHeight + th }\n }\n}\n\nfunction estimateLineHeights(cm) {\n var doc = cm.doc, est = estimateHeight(cm);\n doc.iter(function (line) {\n var estHeight = est(line);\n if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n });\n}\n\n// Given a mouse event, find the corresponding position. If liberal\n// is false, it checks whether a gutter or scrollbar was clicked,\n// and returns null if it was. forRect is used by rectangular\n// selections, and tries to estimate a character position even for\n// coordinates beyond the right of the text.\nfunction posFromMouse(cm, e, liberal, forRect) {\n var display = cm.display;\n if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n var x, y, space = display.lineSpace.getBoundingClientRect();\n // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n try { x = e.clientX - space.left; y = e.clientY - space.top; }\n catch (e) { return null }\n var coords = coordsChar(cm, x, y), line;\n if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n }\n return coords\n}\n\n// Find the view element corresponding to a given line. Return null\n// when the line isn't visible.\nfunction findViewIndex(cm, n) {\n if (n >= cm.display.viewTo) { return null }\n n -= cm.display.viewFrom;\n if (n < 0) { return null }\n var view = cm.display.view;\n for (var i = 0; i < view.length; i++) {\n n -= view[i].size;\n if (n < 0) { return i }\n }\n}\n\nfunction updateSelection(cm) {\n cm.display.input.showSelection(cm.display.input.prepareSelection());\n}\n\nfunction prepareSelection(cm, primary) {\n if ( primary === void 0 ) primary = true;\n\n var doc = cm.doc, result = {};\n var curFragment = result.cursors = document.createDocumentFragment();\n var selFragment = result.selection = document.createDocumentFragment();\n\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n if (!primary && i == doc.sel.primIndex) { continue }\n var range$$1 = doc.sel.ranges[i];\n if (range$$1.from().line >= cm.display.viewTo || range$$1.to().line < cm.display.viewFrom) { continue }\n var collapsed = range$$1.empty();\n if (collapsed || cm.options.showCursorWhenSelecting)\n { drawSelectionCursor(cm, range$$1.head, curFragment); }\n if (!collapsed)\n { drawSelectionRange(cm, range$$1, selFragment); }\n }\n return result\n}\n\n// Draws a cursor for the given range\nfunction drawSelectionCursor(cm, head, output) {\n var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n cursor.style.left = pos.left + \"px\";\n cursor.style.top = pos.top + \"px\";\n cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n if (pos.other) {\n // Secondary cursor, shown when on a 'jump' in bi-directional text\n var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n otherCursor.style.display = \"\";\n otherCursor.style.left = pos.other.left + \"px\";\n otherCursor.style.top = pos.other.top + \"px\";\n otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n }\n}\n\nfunction cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n// Draws the given range as a highlighted selection\nfunction drawSelectionRange(cm, range$$1, output) {\n var display = cm.display, doc = cm.doc;\n var fragment = document.createDocumentFragment();\n var padding = paddingH(cm.display), leftSide = padding.left;\n var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n var docLTR = doc.direction == \"ltr\";\n\n function add(left, top, width, bottom) {\n if (top < 0) { top = 0; }\n top = Math.round(top);\n bottom = Math.round(bottom);\n fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n height: \" + (bottom - top) + \"px\")));\n }\n\n function drawForLine(line, fromArg, toArg) {\n var lineObj = getLine(doc, line);\n var lineLen = lineObj.text.length;\n var start, end;\n function coords(ch, bias) {\n return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n }\n\n function wrapX(pos, dir, side) {\n var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n return coords(ch, prop)[prop]\n }\n\n var order = getOrder(lineObj, doc.direction);\n iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n var ltr = dir == \"ltr\";\n var fromPos = coords(from, ltr ? \"left\" : \"right\");\n var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n var first = i == 0, last = !order || i == order.length - 1;\n if (toPos.top - fromPos.top <= 3) { // Single line\n var openLeft = (docLTR ? openStart : openEnd) && first;\n var openRight = (docLTR ? openEnd : openStart) && last;\n var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n add(left, fromPos.top, right - left, fromPos.bottom);\n } else { // Multiple lines\n var topLeft, topRight, botLeft, botRight;\n if (ltr) {\n topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n } else {\n topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n }\n add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n }\n\n if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n if (cmpCoords(toPos, start) < 0) { start = toPos; }\n if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n if (cmpCoords(toPos, end) < 0) { end = toPos; }\n });\n return {start: start, end: end}\n }\n\n var sFrom = range$$1.from(), sTo = range$$1.to();\n if (sFrom.line == sTo.line) {\n drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n } else {\n var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n var singleVLine = visualLine(fromLine) == visualLine(toLine);\n var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n if (singleVLine) {\n if (leftEnd.top < rightStart.top - 2) {\n add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n } else {\n add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n }\n }\n if (leftEnd.bottom < rightStart.top)\n { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n }\n\n output.appendChild(fragment);\n}\n\n// Cursor-blinking\nfunction restartBlink(cm) {\n if (!cm.state.focused) { return }\n var display = cm.display;\n clearInterval(display.blinker);\n var on = true;\n display.cursorDiv.style.visibility = \"\";\n if (cm.options.cursorBlinkRate > 0)\n { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\"; },\n cm.options.cursorBlinkRate); }\n else if (cm.options.cursorBlinkRate < 0)\n { display.cursorDiv.style.visibility = \"hidden\"; }\n}\n\nfunction ensureFocus(cm) {\n if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm); }\n}\n\nfunction delayBlurEvent(cm) {\n cm.state.delayingBlurEvent = true;\n setTimeout(function () { if (cm.state.delayingBlurEvent) {\n cm.state.delayingBlurEvent = false;\n onBlur(cm);\n } }, 100);\n}\n\nfunction onFocus(cm, e) {\n if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false; }\n\n if (cm.options.readOnly == \"nocursor\") { return }\n if (!cm.state.focused) {\n signal(cm, \"focus\", cm, e);\n cm.state.focused = true;\n addClass(cm.display.wrapper, \"CodeMirror-focused\");\n // This test prevents this from firing when a context\n // menu is closed (since the input reset would kill the\n // select-all detection hack)\n if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n cm.display.input.reset();\n if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n }\n cm.display.input.receivedFocus();\n }\n restartBlink(cm);\n}\nfunction onBlur(cm, e) {\n if (cm.state.delayingBlurEvent) { return }\n\n if (cm.state.focused) {\n signal(cm, \"blur\", cm, e);\n cm.state.focused = false;\n rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n }\n clearInterval(cm.display.blinker);\n setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n}\n\n// Read the actual heights of the rendered lines, and update their\n// stored heights to match.\nfunction updateHeightsInViewport(cm) {\n var display = cm.display;\n var prevBottom = display.lineDiv.offsetTop;\n for (var i = 0; i < display.view.length; i++) {\n var cur = display.view[i], height = (void 0);\n if (cur.hidden) { continue }\n if (ie && ie_version < 8) {\n var bot = cur.node.offsetTop + cur.node.offsetHeight;\n height = bot - prevBottom;\n prevBottom = bot;\n } else {\n var box = cur.node.getBoundingClientRect();\n height = box.bottom - box.top;\n }\n var diff = cur.line.height - height;\n if (height < 2) { height = textHeight(display); }\n if (diff > .005 || diff < -.005) {\n updateLineHeight(cur.line, height);\n updateWidgetHeight(cur.line);\n if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n { updateWidgetHeight(cur.rest[j]); } }\n }\n }\n}\n\n// Read and store the height of line widgets associated with the\n// given line.\nfunction updateWidgetHeight(line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n var w = line.widgets[i], parent = w.node.parentNode;\n if (parent) { w.height = parent.offsetHeight; }\n } }\n}\n\n// Compute the lines that are visible in a given viewport (defaults\n// the the current scroll position). viewport may contain top,\n// height, and ensure (see op.scrollToPos) properties.\nfunction visibleLines(display, doc, viewport) {\n var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n top = Math.floor(top - paddingTop(display));\n var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n // forces those lines into the viewport (if possible).\n if (viewport && viewport.ensure) {\n var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n if (ensureFrom < from) {\n from = ensureFrom;\n to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n to = ensureTo;\n }\n }\n return {from: from, to: Math.max(to, from + 1)}\n}\n\n// Re-align line numbers and gutter marks to compensate for\n// horizontal scrolling.\nfunction alignHorizontally(cm) {\n var display = cm.display, view = display.view;\n if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n if (cm.options.fixedGutter) {\n if (view[i].gutter)\n { view[i].gutter.style.left = left; }\n if (view[i].gutterBackground)\n { view[i].gutterBackground.style.left = left; }\n }\n var align = view[i].alignable;\n if (align) { for (var j = 0; j < align.length; j++)\n { align[j].style.left = left; } }\n } }\n if (cm.options.fixedGutter)\n { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n}\n\n// Used to ensure that the line number gutter is still the right\n// size for the current document size. Returns true when an update\n// is needed.\nfunction maybeUpdateLineNumberWidth(cm) {\n if (!cm.options.lineNumbers) { return false }\n var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n if (last.length != display.lineNumChars) {\n var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n display.lineGutter.style.width = \"\";\n display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n display.lineNumWidth = display.lineNumInnerWidth + padding;\n display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n display.lineGutter.style.width = display.lineNumWidth + \"px\";\n updateGutterSpace(cm);\n return true\n }\n return false\n}\n\n// SCROLLING THINGS INTO VIEW\n\n// If an editor sits on the top or bottom of the window, partially\n// scrolled out of view, this ensures that the cursor is visible.\nfunction maybeScrollWindow(cm, rect) {\n if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n if (rect.top + box.top < 0) { doScroll = true; }\n else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n if (doScroll != null && !phantom) {\n var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n cm.display.lineSpace.appendChild(scrollNode);\n scrollNode.scrollIntoView(doScroll);\n cm.display.lineSpace.removeChild(scrollNode);\n }\n}\n\n// Scroll a given position into view (immediately), verifying that\n// it actually became visible (as line heights are accurately\n// measured, the position of something may 'drift' during drawing).\nfunction scrollPosIntoView(cm, pos, end, margin) {\n if (margin == null) { margin = 0; }\n var rect;\n if (!cm.options.lineWrapping && pos == end) {\n // Set pos and end to the cursor positions around the character pos sticks to\n // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n }\n for (var limit = 0; limit < 5; limit++) {\n var changed = false;\n var coords = cursorCoords(cm, pos);\n var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n rect = {left: Math.min(coords.left, endCoords.left),\n top: Math.min(coords.top, endCoords.top) - margin,\n right: Math.max(coords.left, endCoords.left),\n bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n var scrollPos = calculateScrollPos(cm, rect);\n var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n if (scrollPos.scrollTop != null) {\n updateScrollTop(cm, scrollPos.scrollTop);\n if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n }\n if (scrollPos.scrollLeft != null) {\n setScrollLeft(cm, scrollPos.scrollLeft);\n if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n }\n if (!changed) { break }\n }\n return rect\n}\n\n// Scroll a given set of coordinates into view (immediately).\nfunction scrollIntoView(cm, rect) {\n var scrollPos = calculateScrollPos(cm, rect);\n if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n}\n\n// Calculate a new scroll position needed to scroll the given\n// rectangle into view. Returns an object with scrollTop and\n// scrollLeft properties. When these are undefined, the\n// vertical/horizontal position does not need to be adjusted.\nfunction calculateScrollPos(cm, rect) {\n var display = cm.display, snapMargin = textHeight(cm.display);\n if (rect.top < 0) { rect.top = 0; }\n var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n var screen = displayHeight(cm), result = {};\n if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n var docBottom = cm.doc.height + paddingVert(display);\n var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n if (rect.top < screentop) {\n result.scrollTop = atTop ? 0 : rect.top;\n } else if (rect.bottom > screentop + screen) {\n var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n if (newTop != screentop) { result.scrollTop = newTop; }\n }\n\n var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0);\n var tooWide = rect.right - rect.left > screenw;\n if (tooWide) { rect.right = rect.left + screenw; }\n if (rect.left < 10)\n { result.scrollLeft = 0; }\n else if (rect.left < screenleft)\n { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)); }\n else if (rect.right > screenw + screenleft - 3)\n { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n return result\n}\n\n// Store a relative adjustment to the scroll position in the current\n// operation (to be applied when the operation finishes).\nfunction addToScrollTop(cm, top) {\n if (top == null) { return }\n resolveScrollToPos(cm);\n cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n}\n\n// Make sure that at the end of the operation the current cursor is\n// shown.\nfunction ensureCursorVisible(cm) {\n resolveScrollToPos(cm);\n var cur = cm.getCursor();\n cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n}\n\nfunction scrollToCoords(cm, x, y) {\n if (x != null || y != null) { resolveScrollToPos(cm); }\n if (x != null) { cm.curOp.scrollLeft = x; }\n if (y != null) { cm.curOp.scrollTop = y; }\n}\n\nfunction scrollToRange(cm, range$$1) {\n resolveScrollToPos(cm);\n cm.curOp.scrollToPos = range$$1;\n}\n\n// When an operation has its scrollToPos property set, and another\n// scroll action is applied before the end of the operation, this\n// 'simulates' scrolling that position into view in a cheap way, so\n// that the effect of intermediate scroll commands is not ignored.\nfunction resolveScrollToPos(cm) {\n var range$$1 = cm.curOp.scrollToPos;\n if (range$$1) {\n cm.curOp.scrollToPos = null;\n var from = estimateCoords(cm, range$$1.from), to = estimateCoords(cm, range$$1.to);\n scrollToCoordsRange(cm, from, to, range$$1.margin);\n }\n}\n\nfunction scrollToCoordsRange(cm, from, to, margin) {\n var sPos = calculateScrollPos(cm, {\n left: Math.min(from.left, to.left),\n top: Math.min(from.top, to.top) - margin,\n right: Math.max(from.right, to.right),\n bottom: Math.max(from.bottom, to.bottom) + margin\n });\n scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n}\n\n// Sync the scrollable area and scrollbars, ensure the viewport\n// covers the visible area.\nfunction updateScrollTop(cm, val) {\n if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n setScrollTop(cm, val, true);\n if (gecko) { updateDisplaySimple(cm); }\n startWorker(cm, 100);\n}\n\nfunction setScrollTop(cm, val, forceScroll) {\n val = Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val);\n if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n cm.doc.scrollTop = val;\n cm.display.scrollbars.setScrollTop(val);\n if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n}\n\n// Sync scroller and scrollbar, ensure the gutter elements are\n// aligned.\nfunction setScrollLeft(cm, val, isScroller, forceScroll) {\n val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth);\n if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n cm.doc.scrollLeft = val;\n alignHorizontally(cm);\n if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n cm.display.scrollbars.setScrollLeft(val);\n}\n\n// SCROLLBARS\n\n// Prepare DOM reads needed to update the scrollbars. Done in one\n// shot to minimize update/measure roundtrips.\nfunction measureForScrollbars(cm) {\n var d = cm.display, gutterW = d.gutters.offsetWidth;\n var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n return {\n clientHeight: d.scroller.clientHeight,\n viewHeight: d.wrapper.clientHeight,\n scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n viewWidth: d.wrapper.clientWidth,\n barLeft: cm.options.fixedGutter ? gutterW : 0,\n docHeight: docH,\n scrollHeight: docH + scrollGap(cm) + d.barHeight,\n nativeBarWidth: d.nativeBarWidth,\n gutterWidth: gutterW\n }\n}\n\nvar NativeScrollbars = function(place, scroll, cm) {\n this.cm = cm;\n var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n vert.tabIndex = horiz.tabIndex = -1;\n place(vert); place(horiz);\n\n on(vert, \"scroll\", function () {\n if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n });\n on(horiz, \"scroll\", function () {\n if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n });\n\n this.checkedZeroWidth = false;\n // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n};\n\nNativeScrollbars.prototype.update = function (measure) {\n var needsH = measure.scrollWidth > measure.clientWidth + 1;\n var needsV = measure.scrollHeight > measure.clientHeight + 1;\n var sWidth = measure.nativeBarWidth;\n\n if (needsV) {\n this.vert.style.display = \"block\";\n this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n // A bug in IE8 can cause this value to be negative, so guard it.\n this.vert.firstChild.style.height =\n Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n } else {\n this.vert.style.display = \"\";\n this.vert.firstChild.style.height = \"0\";\n }\n\n if (needsH) {\n this.horiz.style.display = \"block\";\n this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n this.horiz.style.left = measure.barLeft + \"px\";\n var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n this.horiz.firstChild.style.width =\n Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n } else {\n this.horiz.style.display = \"\";\n this.horiz.firstChild.style.width = \"0\";\n }\n\n if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n if (sWidth == 0) { this.zeroWidthHack(); }\n this.checkedZeroWidth = true;\n }\n\n return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n};\n\nNativeScrollbars.prototype.setScrollLeft = function (pos) {\n if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n};\n\nNativeScrollbars.prototype.setScrollTop = function (pos) {\n if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n};\n\nNativeScrollbars.prototype.zeroWidthHack = function () {\n var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n this.horiz.style.height = this.vert.style.width = w;\n this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n this.disableHoriz = new Delayed;\n this.disableVert = new Delayed;\n};\n\nNativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n bar.style.pointerEvents = \"auto\";\n function maybeDisable() {\n // To find out whether the scrollbar is still visible, we\n // check whether the element under the pixel in the bottom\n // right corner of the scrollbar box is the scrollbar box\n // itself (when the bar is still visible) or its filler child\n // (when the bar is hidden). If it is still visible, we keep\n // it enabled, if it's hidden, we disable pointer events.\n var box = bar.getBoundingClientRect();\n var elt$$1 = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n if (elt$$1 != bar) { bar.style.pointerEvents = \"none\"; }\n else { delay.set(1000, maybeDisable); }\n }\n delay.set(1000, maybeDisable);\n};\n\nNativeScrollbars.prototype.clear = function () {\n var parent = this.horiz.parentNode;\n parent.removeChild(this.horiz);\n parent.removeChild(this.vert);\n};\n\nvar NullScrollbars = function () {};\n\nNullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\nNullScrollbars.prototype.setScrollLeft = function () {};\nNullScrollbars.prototype.setScrollTop = function () {};\nNullScrollbars.prototype.clear = function () {};\n\nfunction updateScrollbars(cm, measure) {\n if (!measure) { measure = measureForScrollbars(cm); }\n var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n updateScrollbarsInner(cm, measure);\n for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n { updateHeightsInViewport(cm); }\n updateScrollbarsInner(cm, measureForScrollbars(cm));\n startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n }\n}\n\n// Re-synchronize the fake scrollbars with the actual size of the\n// content.\nfunction updateScrollbarsInner(cm, measure) {\n var d = cm.display;\n var sizes = d.scrollbars.update(measure);\n\n d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n if (sizes.right && sizes.bottom) {\n d.scrollbarFiller.style.display = \"block\";\n d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n d.scrollbarFiller.style.width = sizes.right + \"px\";\n } else { d.scrollbarFiller.style.display = \"\"; }\n if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n d.gutterFiller.style.display = \"block\";\n d.gutterFiller.style.height = sizes.bottom + \"px\";\n d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n } else { d.gutterFiller.style.display = \"\"; }\n}\n\nvar scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\nfunction initScrollbars(cm) {\n if (cm.display.scrollbars) {\n cm.display.scrollbars.clear();\n if (cm.display.scrollbars.addClass)\n { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n }\n\n cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n // Prevent clicks in the scrollbars from killing focus\n on(node, \"mousedown\", function () {\n if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n });\n node.setAttribute(\"cm-not-content\", \"true\");\n }, function (pos, axis) {\n if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n else { updateScrollTop(cm, pos); }\n }, cm);\n if (cm.display.scrollbars.addClass)\n { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n}\n\n// Operations are used to wrap a series of changes to the editor\n// state in such a way that each change won't have to update the\n// cursor and display (which would be awkward, slow, and\n// error-prone). Instead, display updates are batched and then all\n// combined and executed at once.\n\nvar nextOpId = 0;\n// Start a new operation.\nfunction startOperation(cm) {\n cm.curOp = {\n cm: cm,\n viewChanged: false, // Flag that indicates that lines might need to be redrawn\n startHeight: cm.doc.height, // Used to detect need to update scrollbar\n forceUpdate: false, // Used to force a redraw\n updateInput: null, // Whether to reset the input textarea\n typing: false, // Whether this reset should be careful to leave existing text (for compositing)\n changeObjs: null, // Accumulated changes, for firing change events\n cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n selectionChanged: false, // Whether the selection needs to be redrawn\n updateMaxLine: false, // Set when the widest line needs to be determined anew\n scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n scrollToPos: null, // Used to scroll to a specific position\n focus: false,\n id: ++nextOpId // Unique ID\n };\n pushOperation(cm.curOp);\n}\n\n// Finish an operation, updating the display and signalling delayed events\nfunction endOperation(cm) {\n var op = cm.curOp;\n finishOperation(op, function (group) {\n for (var i = 0; i < group.ops.length; i++)\n { group.ops[i].cm.curOp = null; }\n endOperations(group);\n });\n}\n\n// The DOM updates done when an operation finishes are batched so\n// that the minimum number of relayouts are required.\nfunction endOperations(group) {\n var ops = group.ops;\n for (var i = 0; i < ops.length; i++) // Read DOM\n { endOperation_R1(ops[i]); }\n for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n { endOperation_W1(ops[i$1]); }\n for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n { endOperation_R2(ops[i$2]); }\n for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n { endOperation_W2(ops[i$3]); }\n for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n { endOperation_finish(ops[i$4]); }\n}\n\nfunction endOperation_R1(op) {\n var cm = op.cm, display = cm.display;\n maybeClipScrollbars(cm);\n if (op.updateMaxLine) { findMaxLine(cm); }\n\n op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n op.scrollToPos.to.line >= display.viewTo) ||\n display.maxLineChanged && cm.options.lineWrapping;\n op.update = op.mustUpdate &&\n new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n}\n\nfunction endOperation_W1(op) {\n op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n}\n\nfunction endOperation_R2(op) {\n var cm = op.cm, display = cm.display;\n if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n op.barMeasure = measureForScrollbars(cm);\n\n // If the max line changed since it was last measured, measure it,\n // and ensure the document's width matches it.\n // updateDisplay_W2 will use these properties to do the actual resizing\n if (display.maxLineChanged && !cm.options.lineWrapping) {\n op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n cm.display.sizerWidth = op.adjustWidthTo;\n op.barMeasure.scrollWidth =\n Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n }\n\n if (op.updatedDisplay || op.selectionChanged)\n { op.preparedSelection = display.input.prepareSelection(); }\n}\n\nfunction endOperation_W2(op) {\n var cm = op.cm;\n\n if (op.adjustWidthTo != null) {\n cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n if (op.maxScrollLeft < cm.doc.scrollLeft)\n { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n cm.display.maxLineChanged = false;\n }\n\n var takeFocus = op.focus && op.focus == activeElt();\n if (op.preparedSelection)\n { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n if (op.updatedDisplay || op.startHeight != cm.doc.height)\n { updateScrollbars(cm, op.barMeasure); }\n if (op.updatedDisplay)\n { setDocumentHeight(cm, op.barMeasure); }\n\n if (op.selectionChanged) { restartBlink(cm); }\n\n if (cm.state.focused && op.updateInput)\n { cm.display.input.reset(op.typing); }\n if (takeFocus) { ensureFocus(op.cm); }\n}\n\nfunction endOperation_finish(op) {\n var cm = op.cm, display = cm.display, doc = cm.doc;\n\n if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n // Abort mouse wheel delta measurement, when scrolling explicitly\n if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n { display.wheelStartX = display.wheelStartY = null; }\n\n // Propagate the scroll position to the actual DOM scroller\n if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n // If we need to scroll a specific position into view, do so.\n if (op.scrollToPos) {\n var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n maybeScrollWindow(cm, rect);\n }\n\n // Fire events for markers that are hidden/unidden by editing or\n // undoing\n var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n if (hidden) { for (var i = 0; i < hidden.length; ++i)\n { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n if (display.wrapper.offsetHeight)\n { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n // Fire change events, and delayed event handlers\n if (op.changeObjs)\n { signal(cm, \"changes\", cm, op.changeObjs); }\n if (op.update)\n { op.update.finish(); }\n}\n\n// Run the given function in an operation\nfunction runInOp(cm, f) {\n if (cm.curOp) { return f() }\n startOperation(cm);\n try { return f() }\n finally { endOperation(cm); }\n}\n// Wraps a function in an operation. Returns the wrapped function.\nfunction operation(cm, f) {\n return function() {\n if (cm.curOp) { return f.apply(cm, arguments) }\n startOperation(cm);\n try { return f.apply(cm, arguments) }\n finally { endOperation(cm); }\n }\n}\n// Used to add methods to editor and doc instances, wrapping them in\n// operations.\nfunction methodOp(f) {\n return function() {\n if (this.curOp) { return f.apply(this, arguments) }\n startOperation(this);\n try { return f.apply(this, arguments) }\n finally { endOperation(this); }\n }\n}\nfunction docMethodOp(f) {\n return function() {\n var cm = this.cm;\n if (!cm || cm.curOp) { return f.apply(this, arguments) }\n startOperation(cm);\n try { return f.apply(this, arguments) }\n finally { endOperation(cm); }\n }\n}\n\n// Updates the display.view data structure for a given change to the\n// document. From and to are in pre-change coordinates. Lendiff is\n// the amount of lines added or subtracted by the change. This is\n// used for changes that span multiple lines, or change the way\n// lines are divided into visual lines. regLineChange (below)\n// registers single-line changes.\nfunction regChange(cm, from, to, lendiff) {\n if (from == null) { from = cm.doc.first; }\n if (to == null) { to = cm.doc.first + cm.doc.size; }\n if (!lendiff) { lendiff = 0; }\n\n var display = cm.display;\n if (lendiff && to < display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers > from))\n { display.updateLineNumbers = from; }\n\n cm.curOp.viewChanged = true;\n\n if (from >= display.viewTo) { // Change after\n if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n { resetView(cm); }\n } else if (to <= display.viewFrom) { // Change before\n if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n resetView(cm);\n } else {\n display.viewFrom += lendiff;\n display.viewTo += lendiff;\n }\n } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n resetView(cm);\n } else if (from <= display.viewFrom) { // Top overlap\n var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cut) {\n display.view = display.view.slice(cut.index);\n display.viewFrom = cut.lineN;\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n } else if (to >= display.viewTo) { // Bottom overlap\n var cut$1 = viewCuttingPoint(cm, from, from, -1);\n if (cut$1) {\n display.view = display.view.slice(0, cut$1.index);\n display.viewTo = cut$1.lineN;\n } else {\n resetView(cm);\n }\n } else { // Gap in the middle\n var cutTop = viewCuttingPoint(cm, from, from, -1);\n var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n if (cutTop && cutBot) {\n display.view = display.view.slice(0, cutTop.index)\n .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n .concat(display.view.slice(cutBot.index));\n display.viewTo += lendiff;\n } else {\n resetView(cm);\n }\n }\n\n var ext = display.externalMeasured;\n if (ext) {\n if (to < ext.lineN)\n { ext.lineN += lendiff; }\n else if (from < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n }\n}\n\n// Register a change to a single line. Type must be one of \"text\",\n// \"gutter\", \"class\", \"widget\"\nfunction regLineChange(cm, line, type) {\n cm.curOp.viewChanged = true;\n var display = cm.display, ext = cm.display.externalMeasured;\n if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n { display.externalMeasured = null; }\n\n if (line < display.viewFrom || line >= display.viewTo) { return }\n var lineView = display.view[findViewIndex(cm, line)];\n if (lineView.node == null) { return }\n var arr = lineView.changes || (lineView.changes = []);\n if (indexOf(arr, type) == -1) { arr.push(type); }\n}\n\n// Clear the view.\nfunction resetView(cm) {\n cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n cm.display.view = [];\n cm.display.viewOffset = 0;\n}\n\nfunction viewCuttingPoint(cm, oldN, newN, dir) {\n var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n { return {index: index, lineN: newN} }\n var n = cm.display.viewFrom;\n for (var i = 0; i < index; i++)\n { n += view[i].size; }\n if (n != oldN) {\n if (dir > 0) {\n if (index == view.length - 1) { return null }\n diff = (n + view[index].size) - oldN;\n index++;\n } else {\n diff = n - oldN;\n }\n oldN += diff; newN += diff;\n }\n while (visualLineNo(cm.doc, newN) != newN) {\n if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n index += dir;\n }\n return {index: index, lineN: newN}\n}\n\n// Force the view to cover a given range, adding empty view element\n// or clipping off existing ones as needed.\nfunction adjustView(cm, from, to) {\n var display = cm.display, view = display.view;\n if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n display.view = buildViewArray(cm, from, to);\n display.viewFrom = from;\n } else {\n if (display.viewFrom > from)\n { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n else if (display.viewFrom < from)\n { display.view = display.view.slice(findViewIndex(cm, from)); }\n display.viewFrom = from;\n if (display.viewTo < to)\n { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n else if (display.viewTo > to)\n { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n }\n display.viewTo = to;\n}\n\n// Count the number of lines in the view whose DOM representation is\n// out of date (or nonexistent).\nfunction countDirtyView(cm) {\n var view = cm.display.view, dirty = 0;\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n }\n return dirty\n}\n\n// HIGHLIGHT WORKER\n\nfunction startWorker(cm, time) {\n if (cm.doc.highlightFrontier < cm.display.viewTo)\n { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n}\n\nfunction highlightWorker(cm) {\n var doc = cm.doc;\n if (doc.highlightFrontier >= cm.display.viewTo) { return }\n var end = +new Date + cm.options.workTime;\n var context = getContextBefore(cm, doc.highlightFrontier);\n var changedLines = [];\n\n doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n if (context.line >= cm.display.viewFrom) { // Visible\n var oldStyles = line.styles;\n var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n var highlighted = highlightLine(cm, line, context, true);\n if (resetState) { context.state = resetState; }\n line.styles = highlighted.styles;\n var oldCls = line.styleClasses, newCls = highlighted.classes;\n if (newCls) { line.styleClasses = newCls; }\n else if (oldCls) { line.styleClasses = null; }\n var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n if (ischange) { changedLines.push(context.line); }\n line.stateAfter = context.save();\n context.nextLine();\n } else {\n if (line.text.length <= cm.options.maxHighlightLength)\n { processLine(cm, line.text, context); }\n line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n context.nextLine();\n }\n if (+new Date > end) {\n startWorker(cm, cm.options.workDelay);\n return true\n }\n });\n doc.highlightFrontier = context.line;\n doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n if (changedLines.length) { runInOp(cm, function () {\n for (var i = 0; i < changedLines.length; i++)\n { regLineChange(cm, changedLines[i], \"text\"); }\n }); }\n}\n\n// DISPLAY DRAWING\n\nvar DisplayUpdate = function(cm, viewport, force) {\n var display = cm.display;\n\n this.viewport = viewport;\n // Store some values that we'll need later (but don't want to force a relayout for)\n this.visible = visibleLines(display, cm.doc, viewport);\n this.editorIsHidden = !display.wrapper.offsetWidth;\n this.wrapperHeight = display.wrapper.clientHeight;\n this.wrapperWidth = display.wrapper.clientWidth;\n this.oldDisplayWidth = displayWidth(cm);\n this.force = force;\n this.dims = getDimensions(cm);\n this.events = [];\n};\n\nDisplayUpdate.prototype.signal = function (emitter, type) {\n if (hasHandler(emitter, type))\n { this.events.push(arguments); }\n};\nDisplayUpdate.prototype.finish = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.events.length; i++)\n { signal.apply(null, this$1.events[i]); }\n};\n\nfunction maybeClipScrollbars(cm) {\n var display = cm.display;\n if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n display.heightForcer.style.height = scrollGap(cm) + \"px\";\n display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n display.scrollbarsClipped = true;\n }\n}\n\nfunction selectionSnapshot(cm) {\n if (cm.hasFocus()) { return null }\n var active = activeElt();\n if (!active || !contains(cm.display.lineDiv, active)) { return null }\n var result = {activeElt: active};\n if (window.getSelection) {\n var sel = window.getSelection();\n if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n result.anchorNode = sel.anchorNode;\n result.anchorOffset = sel.anchorOffset;\n result.focusNode = sel.focusNode;\n result.focusOffset = sel.focusOffset;\n }\n }\n return result\n}\n\nfunction restoreSelection(snapshot) {\n if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n snapshot.activeElt.focus();\n if (snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n var sel = window.getSelection(), range$$1 = document.createRange();\n range$$1.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n range$$1.collapse(false);\n sel.removeAllRanges();\n sel.addRange(range$$1);\n sel.extend(snapshot.focusNode, snapshot.focusOffset);\n }\n}\n\n// Does the actual updating of the line display. Bails out\n// (returning false) when there is nothing to be done and forced is\n// false.\nfunction updateDisplayIfNeeded(cm, update) {\n var display = cm.display, doc = cm.doc;\n\n if (update.editorIsHidden) {\n resetView(cm);\n return false\n }\n\n // Bail out if the visible area is already rendered and nothing changed.\n if (!update.force &&\n update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n display.renderedView == display.view && countDirtyView(cm) == 0)\n { return false }\n\n if (maybeUpdateLineNumberWidth(cm)) {\n resetView(cm);\n update.dims = getDimensions(cm);\n }\n\n // Compute a suitable new viewport (from & to)\n var end = doc.first + doc.size;\n var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n if (sawCollapsedSpans) {\n from = visualLineNo(cm.doc, from);\n to = visualLineEndNo(cm.doc, to);\n }\n\n var different = from != display.viewFrom || to != display.viewTo ||\n display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n adjustView(cm, from, to);\n\n display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n // Position the mover div to align with the current scroll position\n cm.display.mover.style.top = display.viewOffset + \"px\";\n\n var toUpdate = countDirtyView(cm);\n if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n { return false }\n\n // For big changes, we hide the enclosing element during the\n // update, since that speeds up the operations on most browsers.\n var selSnapshot = selectionSnapshot(cm);\n if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n patchDisplay(cm, display.updateLineNumbers, update.dims);\n if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n display.renderedView = display.view;\n // There might have been a widget with a focused element that got\n // hidden or updated, if so re-focus it.\n restoreSelection(selSnapshot);\n\n // Prevent selection and cursors from interfering with the scroll\n // width and height.\n removeChildren(display.cursorDiv);\n removeChildren(display.selectionDiv);\n display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n if (different) {\n display.lastWrapHeight = update.wrapperHeight;\n display.lastWrapWidth = update.wrapperWidth;\n startWorker(cm, 400);\n }\n\n display.updateLineNumbers = null;\n\n return true\n}\n\nfunction postUpdateDisplay(cm, update) {\n var viewport = update.viewport;\n\n for (var first = true;; first = false) {\n if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n // Clip forced viewport to actual scrollable area.\n if (viewport && viewport.top != null)\n { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n // Updated line heights might result in the drawn area not\n // actually covering the viewport. Keep looping until it does.\n update.visible = visibleLines(cm.display, cm.doc, viewport);\n if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n { break }\n }\n if (!updateDisplayIfNeeded(cm, update)) { break }\n updateHeightsInViewport(cm);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.force = false;\n }\n\n update.signal(cm, \"update\", cm);\n if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n }\n}\n\nfunction updateDisplaySimple(cm, viewport) {\n var update = new DisplayUpdate(cm, viewport);\n if (updateDisplayIfNeeded(cm, update)) {\n updateHeightsInViewport(cm);\n postUpdateDisplay(cm, update);\n var barMeasure = measureForScrollbars(cm);\n updateSelection(cm);\n updateScrollbars(cm, barMeasure);\n setDocumentHeight(cm, barMeasure);\n update.finish();\n }\n}\n\n// Sync the actual display DOM structure with display.view, removing\n// nodes for lines that are no longer in view, and creating the ones\n// that are not there yet, and updating the ones that are out of\n// date.\nfunction patchDisplay(cm, updateNumbersFrom, dims) {\n var display = cm.display, lineNumbers = cm.options.lineNumbers;\n var container = display.lineDiv, cur = container.firstChild;\n\n function rm(node) {\n var next = node.nextSibling;\n // Works around a throw-scroll bug in OS X Webkit\n if (webkit && mac && cm.display.currentWheelTarget == node)\n { node.style.display = \"none\"; }\n else\n { node.parentNode.removeChild(node); }\n return next\n }\n\n var view = display.view, lineN = display.viewFrom;\n // Loop over the elements in the view, syncing cur (the DOM nodes\n // in display.lineDiv) with the view as we go.\n for (var i = 0; i < view.length; i++) {\n var lineView = view[i];\n if (lineView.hidden) {\n } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n var node = buildLineElement(cm, lineView, lineN, dims);\n container.insertBefore(node, cur);\n } else { // Already drawn\n while (cur != lineView.node) { cur = rm(cur); }\n var updateNumber = lineNumbers && updateNumbersFrom != null &&\n updateNumbersFrom <= lineN && lineView.lineNumber;\n if (lineView.changes) {\n if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n updateLineForChanges(cm, lineView, lineN, dims);\n }\n if (updateNumber) {\n removeChildren(lineView.lineNumber);\n lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n }\n cur = lineView.node.nextSibling;\n }\n lineN += lineView.size;\n }\n while (cur) { cur = rm(cur); }\n}\n\nfunction updateGutterSpace(cm) {\n var width = cm.display.gutters.offsetWidth;\n cm.display.sizer.style.marginLeft = width + \"px\";\n}\n\nfunction setDocumentHeight(cm, measure) {\n cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n}\n\n// Rebuild the gutter elements, ensure the margin to the left of the\n// code matches their width.\nfunction updateGutters(cm) {\n var gutters = cm.display.gutters, specs = cm.options.gutters;\n removeChildren(gutters);\n var i = 0;\n for (; i < specs.length; ++i) {\n var gutterClass = specs[i];\n var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + gutterClass));\n if (gutterClass == \"CodeMirror-linenumbers\") {\n cm.display.lineGutter = gElt;\n gElt.style.width = (cm.display.lineNumWidth || 1) + \"px\";\n }\n }\n gutters.style.display = i ? \"\" : \"none\";\n updateGutterSpace(cm);\n}\n\n// Make sure the gutters options contains the element\n// \"CodeMirror-linenumbers\" when the lineNumbers option is true.\nfunction setGuttersForLineNumbers(options) {\n var found = indexOf(options.gutters, \"CodeMirror-linenumbers\");\n if (found == -1 && options.lineNumbers) {\n options.gutters = options.gutters.concat([\"CodeMirror-linenumbers\"]);\n } else if (found > -1 && !options.lineNumbers) {\n options.gutters = options.gutters.slice(0);\n options.gutters.splice(found, 1);\n }\n}\n\n// Since the delta values reported on mouse wheel events are\n// unstandardized between browsers and even browser versions, and\n// generally horribly unpredictable, this code starts by measuring\n// the scroll effect that the first few mouse wheel events have,\n// and, from that, detects the way it can convert deltas to pixel\n// offsets afterwards.\n//\n// The reason we want to know the amount a wheel event will scroll\n// is that it gives us a chance to update the display before the\n// actual scrolling happens, reducing flickering.\n\nvar wheelSamples = 0;\nvar wheelPixelsPerUnit = null;\n// Fill in a browser-detected starting value on browsers where we\n// know one. These don't have to be accurate -- the result of them\n// being wrong would just be a slight flicker on the first wheel\n// scroll (if it is large enough).\nif (ie) { wheelPixelsPerUnit = -.53; }\nelse if (gecko) { wheelPixelsPerUnit = 15; }\nelse if (chrome) { wheelPixelsPerUnit = -.7; }\nelse if (safari) { wheelPixelsPerUnit = -1/3; }\n\nfunction wheelEventDelta(e) {\n var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n else if (dy == null) { dy = e.wheelDelta; }\n return {x: dx, y: dy}\n}\nfunction wheelEventPixels(e) {\n var delta = wheelEventDelta(e);\n delta.x *= wheelPixelsPerUnit;\n delta.y *= wheelPixelsPerUnit;\n return delta\n}\n\nfunction onScrollWheel(cm, e) {\n var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n\n var display = cm.display, scroll = display.scroller;\n // Quit if there's nothing to scroll here\n var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n // Webkit browsers on OS X abort momentum scrolls when the target\n // of the scroll event is removed from the scrollable element.\n // This hack (see related code in patchDisplay) makes sure the\n // element is kept around.\n if (dy && mac && webkit) {\n outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n for (var i = 0; i < view.length; i++) {\n if (view[i].node == cur) {\n cm.display.currentWheelTarget = cur;\n break outer\n }\n }\n }\n }\n\n // On some browsers, horizontal scrolling will cause redraws to\n // happen before the gutter has been realigned, causing it to\n // wriggle around in a most unseemly way. When we have an\n // estimated pixels/delta value, we just handle horizontal\n // scrolling entirely here. It'll be slightly off from native, but\n // better than glitching out.\n if (dx && !gecko && !presto && wheelPixelsPerUnit != null) {\n if (dy && canScrollY)\n { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * wheelPixelsPerUnit)); }\n setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * wheelPixelsPerUnit));\n // Only prevent default scrolling if vertical scrolling is\n // actually possible. Otherwise, it causes vertical scroll\n // jitter on OSX trackpads when deltaX is small and deltaY\n // is large (issue #3579)\n if (!dy || (dy && canScrollY))\n { e_preventDefault(e); }\n display.wheelStartX = null; // Abort measurement, if in progress\n return\n }\n\n // 'Project' the visible viewport to cover the area that is being\n // scrolled into view (if we know enough to estimate it).\n if (dy && wheelPixelsPerUnit != null) {\n var pixels = dy * wheelPixelsPerUnit;\n var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n updateDisplaySimple(cm, {top: top, bottom: bot});\n }\n\n if (wheelSamples < 20) {\n if (display.wheelStartX == null) {\n display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n display.wheelDX = dx; display.wheelDY = dy;\n setTimeout(function () {\n if (display.wheelStartX == null) { return }\n var movedX = scroll.scrollLeft - display.wheelStartX;\n var movedY = scroll.scrollTop - display.wheelStartY;\n var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n (movedX && display.wheelDX && movedX / display.wheelDX);\n display.wheelStartX = display.wheelStartY = null;\n if (!sample) { return }\n wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n ++wheelSamples;\n }, 200);\n } else {\n display.wheelDX += dx; display.wheelDY += dy;\n }\n }\n}\n\n// Selection objects are immutable. A new one is created every time\n// the selection changes. A selection is one or more non-overlapping\n// (and non-touching) ranges, sorted, and an integer that indicates\n// which one is the primary selection (the one that's scrolled into\n// view, that getCursor returns, etc).\nvar Selection = function(ranges, primIndex) {\n this.ranges = ranges;\n this.primIndex = primIndex;\n};\n\nSelection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\nSelection.prototype.equals = function (other) {\n var this$1 = this;\n\n if (other == this) { return true }\n if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n for (var i = 0; i < this.ranges.length; i++) {\n var here = this$1.ranges[i], there = other.ranges[i];\n if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n }\n return true\n};\n\nSelection.prototype.deepCopy = function () {\n var this$1 = this;\n\n var out = [];\n for (var i = 0; i < this.ranges.length; i++)\n { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)); }\n return new Selection(out, this.primIndex)\n};\n\nSelection.prototype.somethingSelected = function () {\n var this$1 = this;\n\n for (var i = 0; i < this.ranges.length; i++)\n { if (!this$1.ranges[i].empty()) { return true } }\n return false\n};\n\nSelection.prototype.contains = function (pos, end) {\n var this$1 = this;\n\n if (!end) { end = pos; }\n for (var i = 0; i < this.ranges.length; i++) {\n var range = this$1.ranges[i];\n if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n { return i }\n }\n return -1\n};\n\nvar Range = function(anchor, head) {\n this.anchor = anchor; this.head = head;\n};\n\nRange.prototype.from = function () { return minPos(this.anchor, this.head) };\nRange.prototype.to = function () { return maxPos(this.anchor, this.head) };\nRange.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n// Take an unsorted, potentially overlapping set of ranges, and\n// build a selection out of it. 'Consumes' ranges array (modifying\n// it).\nfunction normalizeSelection(ranges, primIndex) {\n var prim = ranges[primIndex];\n ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n primIndex = indexOf(ranges, prim);\n for (var i = 1; i < ranges.length; i++) {\n var cur = ranges[i], prev = ranges[i - 1];\n if (cmp(prev.to(), cur.from()) >= 0) {\n var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n if (i <= primIndex) { --primIndex; }\n ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n }\n }\n return new Selection(ranges, primIndex)\n}\n\nfunction simpleSelection(anchor, head) {\n return new Selection([new Range(anchor, head || anchor)], 0)\n}\n\n// Compute the position of the end of a change (its 'to' property\n// refers to the pre-change end).\nfunction changeEnd(change) {\n if (!change.text) { return change.to }\n return Pos(change.from.line + change.text.length - 1,\n lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n}\n\n// Adjust a position to refer to the post-change position of the\n// same text, or the end of the change if the change covers it.\nfunction adjustForChange(pos, change) {\n if (cmp(pos, change.from) < 0) { return pos }\n if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n return Pos(line, ch)\n}\n\nfunction computeSelAfterChange(doc, change) {\n var out = [];\n for (var i = 0; i < doc.sel.ranges.length; i++) {\n var range = doc.sel.ranges[i];\n out.push(new Range(adjustForChange(range.anchor, change),\n adjustForChange(range.head, change)));\n }\n return normalizeSelection(out, doc.sel.primIndex)\n}\n\nfunction offsetPos(pos, old, nw) {\n if (pos.line == old.line)\n { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n else\n { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n}\n\n// Used by replaceSelections to allow moving the selection to the\n// start or around the replaced test. Hint may be \"start\" or \"around\".\nfunction computeReplacedSel(doc, changes, hint) {\n var out = [];\n var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n for (var i = 0; i < changes.length; i++) {\n var change = changes[i];\n var from = offsetPos(change.from, oldPrev, newPrev);\n var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n oldPrev = change.to;\n newPrev = to;\n if (hint == \"around\") {\n var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n out[i] = new Range(inv ? to : from, inv ? from : to);\n } else {\n out[i] = new Range(from, from);\n }\n }\n return new Selection(out, doc.sel.primIndex)\n}\n\n// Used to get the editor into a consistent state again when options change.\n\nfunction loadMode(cm) {\n cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n resetModeState(cm);\n}\n\nfunction resetModeState(cm) {\n cm.doc.iter(function (line) {\n if (line.stateAfter) { line.stateAfter = null; }\n if (line.styles) { line.styles = null; }\n });\n cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n startWorker(cm, 100);\n cm.state.modeGen++;\n if (cm.curOp) { regChange(cm); }\n}\n\n// DOCUMENT DATA STRUCTURE\n\n// By default, updates that start and end at the beginning of a line\n// are treated specially, in order to make the association of line\n// widgets and marker elements with the text behave more intuitive.\nfunction isWholeLineUpdate(doc, change) {\n return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n}\n\n// Perform a change on the document data structure.\nfunction updateDoc(doc, change, markedSpans, estimateHeight$$1) {\n function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n function update(line, text, spans) {\n updateLine(line, text, spans, estimateHeight$$1);\n signalLater(line, \"change\", line, change);\n }\n function linesFor(start, end) {\n var result = [];\n for (var i = start; i < end; ++i)\n { result.push(new Line(text[i], spansFor(i), estimateHeight$$1)); }\n return result\n }\n\n var from = change.from, to = change.to, text = change.text;\n var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n // Adjust the line structure\n if (change.full) {\n doc.insert(0, linesFor(0, text.length));\n doc.remove(text.length, doc.size - text.length);\n } else if (isWholeLineUpdate(doc, change)) {\n // This is a whole-line replace. Treated specially to make\n // sure line objects move the way they are supposed to.\n var added = linesFor(0, text.length - 1);\n update(lastLine, lastLine.text, lastSpans);\n if (nlines) { doc.remove(from.line, nlines); }\n if (added.length) { doc.insert(from.line, added); }\n } else if (firstLine == lastLine) {\n if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n } else {\n var added$1 = linesFor(1, text.length - 1);\n added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight$$1));\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n doc.insert(from.line + 1, added$1);\n }\n } else if (text.length == 1) {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n doc.remove(from.line + 1, nlines);\n } else {\n update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n var added$2 = linesFor(1, text.length - 1);\n if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n doc.insert(from.line + 1, added$2);\n }\n\n signalLater(doc, \"change\", doc, change);\n}\n\n// Call f for all linked documents.\nfunction linkedDocs(doc, f, sharedHistOnly) {\n function propagate(doc, skip, sharedHist) {\n if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n var rel = doc.linked[i];\n if (rel.doc == skip) { continue }\n var shared = sharedHist && rel.sharedHist;\n if (sharedHistOnly && !shared) { continue }\n f(rel.doc, shared);\n propagate(rel.doc, doc, shared);\n } }\n }\n propagate(doc, null, true);\n}\n\n// Attach a document to an editor.\nfunction attachDoc(cm, doc) {\n if (doc.cm) { throw new Error(\"This document is already in use.\") }\n cm.doc = doc;\n doc.cm = cm;\n estimateLineHeights(cm);\n loadMode(cm);\n setDirectionClass(cm);\n if (!cm.options.lineWrapping) { findMaxLine(cm); }\n cm.options.mode = doc.modeOption;\n regChange(cm);\n}\n\nfunction setDirectionClass(cm) {\n (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n}\n\nfunction directionChanged(cm) {\n runInOp(cm, function () {\n setDirectionClass(cm);\n regChange(cm);\n });\n}\n\nfunction History(startGen) {\n // Arrays of change events and selections. Doing something adds an\n // event to done and clears undo. Undoing moves events from done\n // to undone, redoing moves them in the other direction.\n this.done = []; this.undone = [];\n this.undoDepth = Infinity;\n // Used to track when changes can be merged into a single undo\n // event\n this.lastModTime = this.lastSelTime = 0;\n this.lastOp = this.lastSelOp = null;\n this.lastOrigin = this.lastSelOrigin = null;\n // Used by the isClean() method\n this.generation = this.maxGeneration = startGen || 1;\n}\n\n// Create a history change event from an updateDoc-style change\n// object.\nfunction historyChangeFromChange(doc, change) {\n var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n return histChange\n}\n\n// Pop all selection events off the end of a history array. Stop at\n// a change event.\nfunction clearSelectionEvents(array) {\n while (array.length) {\n var last = lst(array);\n if (last.ranges) { array.pop(); }\n else { break }\n }\n}\n\n// Find the top change event in the history. Pop off selection\n// events that are in the way.\nfunction lastChangeEvent(hist, force) {\n if (force) {\n clearSelectionEvents(hist.done);\n return lst(hist.done)\n } else if (hist.done.length && !lst(hist.done).ranges) {\n return lst(hist.done)\n } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n hist.done.pop();\n return lst(hist.done)\n }\n}\n\n// Register a change in the history. Merges changes that are within\n// a single operation, or are close together with an origin that\n// allows merging (starting with \"+\") into a single event.\nfunction addChangeToHistory(doc, change, selAfter, opId) {\n var hist = doc.history;\n hist.undone.length = 0;\n var time = +new Date, cur;\n var last;\n\n if ((hist.lastOp == opId ||\n hist.lastOrigin == change.origin && change.origin &&\n ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n change.origin.charAt(0) == \"*\")) &&\n (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n // Merge this change into the last event\n last = lst(cur.changes);\n if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n // Optimized case for simple insertion -- don't want to add\n // new changesets for every character typed\n last.to = changeEnd(change);\n } else {\n // Add new sub-event\n cur.changes.push(historyChangeFromChange(doc, change));\n }\n } else {\n // Can not be merged, start a new event.\n var before = lst(hist.done);\n if (!before || !before.ranges)\n { pushSelectionToHistory(doc.sel, hist.done); }\n cur = {changes: [historyChangeFromChange(doc, change)],\n generation: hist.generation};\n hist.done.push(cur);\n while (hist.done.length > hist.undoDepth) {\n hist.done.shift();\n if (!hist.done[0].ranges) { hist.done.shift(); }\n }\n }\n hist.done.push(selAfter);\n hist.generation = ++hist.maxGeneration;\n hist.lastModTime = hist.lastSelTime = time;\n hist.lastOp = hist.lastSelOp = opId;\n hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n if (!last) { signal(doc, \"historyAdded\"); }\n}\n\nfunction selectionEventCanBeMerged(doc, origin, prev, sel) {\n var ch = origin.charAt(0);\n return ch == \"*\" ||\n ch == \"+\" &&\n prev.ranges.length == sel.ranges.length &&\n prev.somethingSelected() == sel.somethingSelected() &&\n new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n}\n\n// Called whenever the selection changes, sets the new selection as\n// the pending selection in the history, and pushes the old pending\n// selection into the 'done' array when it was significantly\n// different (in number of selected ranges, emptiness, or time).\nfunction addSelectionToHistory(doc, sel, opId, options) {\n var hist = doc.history, origin = options && options.origin;\n\n // A new event is started when the previous origin does not match\n // the current, or the origins don't allow matching. Origins\n // starting with * are always merged, those starting with + are\n // merged when similar and close together in time.\n if (opId == hist.lastSelOp ||\n (origin && hist.lastSelOrigin == origin &&\n (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n { hist.done[hist.done.length - 1] = sel; }\n else\n { pushSelectionToHistory(sel, hist.done); }\n\n hist.lastSelTime = +new Date;\n hist.lastSelOrigin = origin;\n hist.lastSelOp = opId;\n if (options && options.clearRedo !== false)\n { clearSelectionEvents(hist.undone); }\n}\n\nfunction pushSelectionToHistory(sel, dest) {\n var top = lst(dest);\n if (!(top && top.ranges && top.equals(sel)))\n { dest.push(sel); }\n}\n\n// Used to store marked span information in the history.\nfunction attachLocalSpans(doc, change, from, to) {\n var existing = change[\"spans_\" + doc.id], n = 0;\n doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n if (line.markedSpans)\n { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n ++n;\n });\n}\n\n// When un/re-doing restores text containing marked spans, those\n// that have been explicitly cleared should not be restored.\nfunction removeClearedSpans(spans) {\n if (!spans) { return null }\n var out;\n for (var i = 0; i < spans.length; ++i) {\n if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n else if (out) { out.push(spans[i]); }\n }\n return !out ? spans : out.length ? out : null\n}\n\n// Retrieve and filter the old marked spans stored in a change event.\nfunction getOldSpans(doc, change) {\n var found = change[\"spans_\" + doc.id];\n if (!found) { return null }\n var nw = [];\n for (var i = 0; i < change.text.length; ++i)\n { nw.push(removeClearedSpans(found[i])); }\n return nw\n}\n\n// Used for un/re-doing changes from the history. Combines the\n// result of computing the existing spans with the set of spans that\n// existed in the history (so that deleting around a span and then\n// undoing brings back the span).\nfunction mergeOldSpans(doc, change) {\n var old = getOldSpans(doc, change);\n var stretched = stretchSpansOverChange(doc, change);\n if (!old) { return stretched }\n if (!stretched) { return old }\n\n for (var i = 0; i < old.length; ++i) {\n var oldCur = old[i], stretchCur = stretched[i];\n if (oldCur && stretchCur) {\n spans: for (var j = 0; j < stretchCur.length; ++j) {\n var span = stretchCur[j];\n for (var k = 0; k < oldCur.length; ++k)\n { if (oldCur[k].marker == span.marker) { continue spans } }\n oldCur.push(span);\n }\n } else if (stretchCur) {\n old[i] = stretchCur;\n }\n }\n return old\n}\n\n// Used both to provide a JSON-safe object in .getHistory, and, when\n// detaching a document, to split the history in two\nfunction copyHistoryArray(events, newGroup, instantiateSel) {\n var copy = [];\n for (var i = 0; i < events.length; ++i) {\n var event = events[i];\n if (event.ranges) {\n copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n continue\n }\n var changes = event.changes, newChanges = [];\n copy.push({changes: newChanges});\n for (var j = 0; j < changes.length; ++j) {\n var change = changes[j], m = (void 0);\n newChanges.push({from: change.from, to: change.to, text: change.text});\n if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n if (indexOf(newGroup, Number(m[1])) > -1) {\n lst(newChanges)[prop] = change[prop];\n delete change[prop];\n }\n } } }\n }\n }\n return copy\n}\n\n// The 'scroll' parameter given to many of these indicated whether\n// the new cursor position should be scrolled into view after\n// modifying the selection.\n\n// If shift is held or the extend flag is set, extends a range to\n// include a given position (and optionally a second position).\n// Otherwise, simply returns the range between the given positions.\n// Used for cursor motion and such.\nfunction extendRange(range, head, other, extend) {\n if (extend) {\n var anchor = range.anchor;\n if (other) {\n var posBefore = cmp(head, anchor) < 0;\n if (posBefore != (cmp(other, anchor) < 0)) {\n anchor = head;\n head = other;\n } else if (posBefore != (cmp(head, other) < 0)) {\n head = other;\n }\n }\n return new Range(anchor, head)\n } else {\n return new Range(other || head, head)\n }\n}\n\n// Extend the primary selection range, discard the rest.\nfunction extendSelection(doc, head, other, options, extend) {\n if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n}\n\n// Extend all selections (pos is an array of selections with length\n// equal the number of selections)\nfunction extendSelections(doc, heads, options) {\n var out = [];\n var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n for (var i = 0; i < doc.sel.ranges.length; i++)\n { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n var newSel = normalizeSelection(out, doc.sel.primIndex);\n setSelection(doc, newSel, options);\n}\n\n// Updates a single range in the selection.\nfunction replaceOneSelection(doc, i, range, options) {\n var ranges = doc.sel.ranges.slice(0);\n ranges[i] = range;\n setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);\n}\n\n// Reset the selection to a single range.\nfunction setSimpleSelection(doc, anchor, head, options) {\n setSelection(doc, simpleSelection(anchor, head), options);\n}\n\n// Give beforeSelectionChange handlers a change to influence a\n// selection update.\nfunction filterSelectionChange(doc, sel, options) {\n var obj = {\n ranges: sel.ranges,\n update: function(ranges) {\n var this$1 = this;\n\n this.ranges = [];\n for (var i = 0; i < ranges.length; i++)\n { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n clipPos(doc, ranges[i].head)); }\n },\n origin: options && options.origin\n };\n signal(doc, \"beforeSelectionChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) }\n else { return sel }\n}\n\nfunction setSelectionReplaceHistory(doc, sel, options) {\n var done = doc.history.done, last = lst(done);\n if (last && last.ranges) {\n done[done.length - 1] = sel;\n setSelectionNoUndo(doc, sel, options);\n } else {\n setSelection(doc, sel, options);\n }\n}\n\n// Set a new selection.\nfunction setSelection(doc, sel, options) {\n setSelectionNoUndo(doc, sel, options);\n addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n}\n\nfunction setSelectionNoUndo(doc, sel, options) {\n if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n { sel = filterSelectionChange(doc, sel, options); }\n\n var bias = options && options.bias ||\n (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n if (!(options && options.scroll === false) && doc.cm)\n { ensureCursorVisible(doc.cm); }\n}\n\nfunction setSelectionInner(doc, sel) {\n if (sel.equals(doc.sel)) { return }\n\n doc.sel = sel;\n\n if (doc.cm) {\n doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true;\n signalCursorActivity(doc.cm);\n }\n signalLater(doc, \"cursorActivity\", doc);\n}\n\n// Verify that the selection does not partially select any atomic\n// marked ranges.\nfunction reCheckSelection(doc) {\n setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n}\n\n// Return a selection that does not partially select any atomic\n// ranges.\nfunction skipAtomicInSelection(doc, sel, bias, mayClear) {\n var out;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range = sel.ranges[i];\n var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n if (out || newAnchor != range.anchor || newHead != range.head) {\n if (!out) { out = sel.ranges.slice(0, i); }\n out[i] = new Range(newAnchor, newHead);\n }\n }\n return out ? normalizeSelection(out, sel.primIndex) : sel\n}\n\nfunction skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n var line = getLine(doc, pos.line);\n if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n var sp = line.markedSpans[i], m = sp.marker;\n if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n if (mayClear) {\n signal(m, \"beforeCursorEnter\");\n if (m.explicitlyCleared) {\n if (!line.markedSpans) { break }\n else {--i; continue}\n }\n }\n if (!m.atomic) { continue }\n\n if (oldPos) {\n var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft)\n { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n }\n\n var far = m.find(dir < 0 ? -1 : 1);\n if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight)\n { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n }\n } }\n return pos\n}\n\n// Ensure a given position is not inside an atomic range.\nfunction skipAtomic(doc, pos, oldPos, bias, mayClear) {\n var dir = bias || 1;\n var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n if (!found) {\n doc.cantEdit = true;\n return Pos(doc.first, 0)\n }\n return found\n}\n\nfunction movePos(doc, pos, dir, line) {\n if (dir < 0 && pos.ch == 0) {\n if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n else { return null }\n } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n else { return null }\n } else {\n return new Pos(pos.line, pos.ch + dir)\n }\n}\n\nfunction selectAll(cm) {\n cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n}\n\n// UPDATING\n\n// Allow \"beforeChange\" event handlers to influence a change\nfunction filterChange(doc, change, update) {\n var obj = {\n canceled: false,\n from: change.from,\n to: change.to,\n text: change.text,\n origin: change.origin,\n cancel: function () { return obj.canceled = true; }\n };\n if (update) { obj.update = function (from, to, text, origin) {\n if (from) { obj.from = clipPos(doc, from); }\n if (to) { obj.to = clipPos(doc, to); }\n if (text) { obj.text = text; }\n if (origin !== undefined) { obj.origin = origin; }\n }; }\n signal(doc, \"beforeChange\", doc, obj);\n if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n if (obj.canceled) { return null }\n return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n}\n\n// Apply a change to a document, and add it to the document's\n// history, and propagating it to all linked documents.\nfunction makeChange(doc, change, ignoreReadOnly) {\n if (doc.cm) {\n if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n if (doc.cm.state.suppressEdits) { return }\n }\n\n if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n change = filterChange(doc, change, true);\n if (!change) { return }\n }\n\n // Possibly split or suppress the update based on the presence\n // of read-only spans in its range.\n var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n if (split) {\n for (var i = split.length - 1; i >= 0; --i)\n { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n } else {\n makeChangeInner(doc, change);\n }\n}\n\nfunction makeChangeInner(doc, change) {\n if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n var selAfter = computeSelAfterChange(doc, change);\n addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n var rebased = [];\n\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n });\n}\n\n// Revert a change stored in a document's history.\nfunction makeChangeFromHistory(doc, type, allowSelectionOnly) {\n var suppress = doc.cm && doc.cm.state.suppressEdits;\n if (suppress && !allowSelectionOnly) { return }\n\n var hist = doc.history, event, selAfter = doc.sel;\n var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n // Verify that there is a useable event (so that ctrl-z won't\n // needlessly clear selection events)\n var i = 0;\n for (; i < source.length; i++) {\n event = source[i];\n if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n { break }\n }\n if (i == source.length) { return }\n hist.lastOrigin = hist.lastSelOrigin = null;\n\n for (;;) {\n event = source.pop();\n if (event.ranges) {\n pushSelectionToHistory(event, dest);\n if (allowSelectionOnly && !event.equals(doc.sel)) {\n setSelection(doc, event, {clearRedo: false});\n return\n }\n selAfter = event;\n } else if (suppress) {\n source.push(event);\n return\n } else { break }\n }\n\n // Build up a reverse change object to add to the opposite history\n // stack (redo when undoing, and vice versa).\n var antiChanges = [];\n pushSelectionToHistory(selAfter, dest);\n dest.push({changes: antiChanges, generation: hist.generation});\n hist.generation = event.generation || ++hist.maxGeneration;\n\n var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n var loop = function ( i ) {\n var change = event.changes[i];\n change.origin = type;\n if (filter && !filterChange(doc, change, false)) {\n source.length = 0;\n return {}\n }\n\n antiChanges.push(historyChangeFromChange(doc, change));\n\n var after = i ? computeSelAfterChange(doc, change) : lst(source);\n makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n var rebased = [];\n\n // Propagate to the linked documents\n linkedDocs(doc, function (doc, sharedHist) {\n if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n rebaseHist(doc.history, change);\n rebased.push(doc.history);\n }\n makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n });\n };\n\n for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n var returned = loop( i$1 );\n\n if ( returned ) return returned.v;\n }\n}\n\n// Sub-views need their line numbers shifted when text is added\n// above or below them in the parent document.\nfunction shiftDoc(doc, distance) {\n if (distance == 0) { return }\n doc.first += distance;\n doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n Pos(range.anchor.line + distance, range.anchor.ch),\n Pos(range.head.line + distance, range.head.ch)\n ); }), doc.sel.primIndex);\n if (doc.cm) {\n regChange(doc.cm, doc.first, doc.first - distance, distance);\n for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n { regLineChange(doc.cm, l, \"gutter\"); }\n }\n}\n\n// More lower-level change function, handling only a single document\n// (not linked ones).\nfunction makeChangeSingleDoc(doc, change, selAfter, spans) {\n if (doc.cm && !doc.cm.curOp)\n { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n if (change.to.line < doc.first) {\n shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n return\n }\n if (change.from.line > doc.lastLine()) { return }\n\n // Clip the change to the size of this doc\n if (change.from.line < doc.first) {\n var shift = change.text.length - 1 - (doc.first - change.from.line);\n shiftDoc(doc, shift);\n change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n text: [lst(change.text)], origin: change.origin};\n }\n var last = doc.lastLine();\n if (change.to.line > last) {\n change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n text: [change.text[0]], origin: change.origin};\n }\n\n change.removed = getBetween(doc, change.from, change.to);\n\n if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n else { updateDoc(doc, change, spans); }\n setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n}\n\n// Handle the interaction of a change to a document with the editor\n// that this document is part of.\nfunction makeChangeSingleDocInEditor(cm, change, spans) {\n var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n var recomputeMaxLength = false, checkWidthStart = from.line;\n if (!cm.options.lineWrapping) {\n checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n doc.iter(checkWidthStart, to.line + 1, function (line) {\n if (line == display.maxLine) {\n recomputeMaxLength = true;\n return true\n }\n });\n }\n\n if (doc.sel.contains(change.from, change.to) > -1)\n { signalCursorActivity(cm); }\n\n updateDoc(doc, change, spans, estimateHeight(cm));\n\n if (!cm.options.lineWrapping) {\n doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n var len = lineLength(line);\n if (len > display.maxLineLength) {\n display.maxLine = line;\n display.maxLineLength = len;\n display.maxLineChanged = true;\n recomputeMaxLength = false;\n }\n });\n if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n }\n\n retreatFrontier(doc, from.line);\n startWorker(cm, 400);\n\n var lendiff = change.text.length - (to.line - from.line) - 1;\n // Remember that these lines changed, for updating the display\n if (change.full)\n { regChange(cm); }\n else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n { regLineChange(cm, from.line, \"text\"); }\n else\n { regChange(cm, from.line, to.line + 1, lendiff); }\n\n var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n if (changeHandler || changesHandler) {\n var obj = {\n from: from, to: to,\n text: change.text,\n removed: change.removed,\n origin: change.origin\n };\n if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n }\n cm.display.selForContextMenu = null;\n}\n\nfunction replaceRange(doc, code, from, to, origin) {\n if (!to) { to = from; }\n if (cmp(to, from) < 0) { var assign;\n (assign = [to, from], from = assign[0], to = assign[1]); }\n if (typeof code == \"string\") { code = doc.splitLines(code); }\n makeChange(doc, {from: from, to: to, text: code, origin: origin});\n}\n\n// Rebasing/resetting history to deal with externally-sourced changes\n\nfunction rebaseHistSelSingle(pos, from, to, diff) {\n if (to < pos.line) {\n pos.line += diff;\n } else if (from < pos.line) {\n pos.line = from;\n pos.ch = 0;\n }\n}\n\n// Tries to rebase an array of history events given a change in the\n// document. If the change touches the same lines as the event, the\n// event, and everything 'behind' it, is discarded. If the change is\n// before the event, the event's positions are updated. Uses a\n// copy-on-write scheme for the positions, to avoid having to\n// reallocate them all on every rebase, but also avoid problems with\n// shared position objects being unsafely updated.\nfunction rebaseHistArray(array, from, to, diff) {\n for (var i = 0; i < array.length; ++i) {\n var sub = array[i], ok = true;\n if (sub.ranges) {\n if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n for (var j = 0; j < sub.ranges.length; j++) {\n rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n }\n continue\n }\n for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n var cur = sub.changes[j$1];\n if (to < cur.from.line) {\n cur.from = Pos(cur.from.line + diff, cur.from.ch);\n cur.to = Pos(cur.to.line + diff, cur.to.ch);\n } else if (from <= cur.to.line) {\n ok = false;\n break\n }\n }\n if (!ok) {\n array.splice(0, i + 1);\n i = 0;\n }\n }\n}\n\nfunction rebaseHist(hist, change) {\n var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n rebaseHistArray(hist.done, from, to, diff);\n rebaseHistArray(hist.undone, from, to, diff);\n}\n\n// Utility for applying a change to a line by handle or number,\n// returning the number and optionally registering the line as\n// changed.\nfunction changeLine(doc, handle, changeType, op) {\n var no = handle, line = handle;\n if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n else { no = lineNo(handle); }\n if (no == null) { return null }\n if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n return line\n}\n\n// The document is represented as a BTree consisting of leaves, with\n// chunk of lines in them, and branches, with up to ten leaves or\n// other branch nodes below them. The top node is always a branch\n// node, and is the document object itself (meaning it has\n// additional methods and properties).\n//\n// All nodes have parent links. The tree is used both to go from\n// line numbers to line objects, and to go from objects to numbers.\n// It also indexes by height, and is used to convert between height\n// and line object, and to find the total height of the document.\n//\n// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\nfunction LeafChunk(lines) {\n var this$1 = this;\n\n this.lines = lines;\n this.parent = null;\n var height = 0;\n for (var i = 0; i < lines.length; ++i) {\n lines[i].parent = this$1;\n height += lines[i].height;\n }\n this.height = height;\n}\n\nLeafChunk.prototype = {\n chunkSize: function() { return this.lines.length },\n\n // Remove the n lines at offset 'at'.\n removeInner: function(at, n) {\n var this$1 = this;\n\n for (var i = at, e = at + n; i < e; ++i) {\n var line = this$1.lines[i];\n this$1.height -= line.height;\n cleanUpLine(line);\n signalLater(line, \"delete\");\n }\n this.lines.splice(at, n);\n },\n\n // Helper used to collapse a small branch into a single leaf.\n collapse: function(lines) {\n lines.push.apply(lines, this.lines);\n },\n\n // Insert the given array of lines at offset 'at', count them as\n // having the given height.\n insertInner: function(at, lines, height) {\n var this$1 = this;\n\n this.height += height;\n this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1; }\n },\n\n // Used to iterate over a part of the tree.\n iterN: function(at, n, op) {\n var this$1 = this;\n\n for (var e = at + n; at < e; ++at)\n { if (op(this$1.lines[at])) { return true } }\n }\n};\n\nfunction BranchChunk(children) {\n var this$1 = this;\n\n this.children = children;\n var size = 0, height = 0;\n for (var i = 0; i < children.length; ++i) {\n var ch = children[i];\n size += ch.chunkSize(); height += ch.height;\n ch.parent = this$1;\n }\n this.size = size;\n this.height = height;\n this.parent = null;\n}\n\nBranchChunk.prototype = {\n chunkSize: function() { return this.size },\n\n removeInner: function(at, n) {\n var this$1 = this;\n\n this.size -= n;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var rm = Math.min(n, sz - at), oldHeight = child.height;\n child.removeInner(at, rm);\n this$1.height -= oldHeight - child.height;\n if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null; }\n if ((n -= rm) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n // If the result is smaller than 25 lines, ensure that it is a\n // single leaf node.\n if (this.size - n < 25 &&\n (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n var lines = [];\n this.collapse(lines);\n this.children = [new LeafChunk(lines)];\n this.children[0].parent = this;\n }\n },\n\n collapse: function(lines) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines); }\n },\n\n insertInner: function(at, lines, height) {\n var this$1 = this;\n\n this.size += lines.length;\n this.height += height;\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at <= sz) {\n child.insertInner(at, lines, height);\n if (child.lines && child.lines.length > 50) {\n // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n var remaining = child.lines.length % 25 + 25;\n for (var pos = remaining; pos < child.lines.length;) {\n var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n child.height -= leaf.height;\n this$1.children.splice(++i, 0, leaf);\n leaf.parent = this$1;\n }\n child.lines = child.lines.slice(0, remaining);\n this$1.maybeSpill();\n }\n break\n }\n at -= sz;\n }\n },\n\n // When a node has grown, check whether it should be split.\n maybeSpill: function() {\n if (this.children.length <= 10) { return }\n var me = this;\n do {\n var spilled = me.children.splice(me.children.length - 5, 5);\n var sibling = new BranchChunk(spilled);\n if (!me.parent) { // Become the parent node\n var copy = new BranchChunk(me.children);\n copy.parent = me;\n me.children = [copy, sibling];\n me = copy;\n } else {\n me.size -= sibling.size;\n me.height -= sibling.height;\n var myIndex = indexOf(me.parent.children, me);\n me.parent.children.splice(myIndex + 1, 0, sibling);\n }\n sibling.parent = me.parent;\n } while (me.children.length > 10)\n me.parent.maybeSpill();\n },\n\n iterN: function(at, n, op) {\n var this$1 = this;\n\n for (var i = 0; i < this.children.length; ++i) {\n var child = this$1.children[i], sz = child.chunkSize();\n if (at < sz) {\n var used = Math.min(n, sz - at);\n if (child.iterN(at, used, op)) { return true }\n if ((n -= used) == 0) { break }\n at = 0;\n } else { at -= sz; }\n }\n }\n};\n\n// Line widgets are block elements displayed above or below a line.\n\nvar LineWidget = function(doc, node, options) {\n var this$1 = this;\n\n if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n { this$1[opt] = options[opt]; } } }\n this.doc = doc;\n this.node = node;\n};\n\nLineWidget.prototype.clear = function () {\n var this$1 = this;\n\n var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n if (no == null || !ws) { return }\n for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1); } }\n if (!ws.length) { line.widgets = null; }\n var height = widgetHeight(this);\n updateLineHeight(line, Math.max(0, line.height - height));\n if (cm) {\n runInOp(cm, function () {\n adjustScrollWhenAboveVisible(cm, line, -height);\n regLineChange(cm, no, \"widget\");\n });\n signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n }\n};\n\nLineWidget.prototype.changed = function () {\n var this$1 = this;\n\n var oldH = this.height, cm = this.doc.cm, line = this.line;\n this.height = null;\n var diff = widgetHeight(this) - oldH;\n if (!diff) { return }\n if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n if (cm) {\n runInOp(cm, function () {\n cm.curOp.forceUpdate = true;\n adjustScrollWhenAboveVisible(cm, line, diff);\n signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n });\n }\n};\neventMixin(LineWidget);\n\nfunction adjustScrollWhenAboveVisible(cm, line, diff) {\n if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n { addToScrollTop(cm, diff); }\n}\n\nfunction addLineWidget(doc, handle, node, options) {\n var widget = new LineWidget(doc, node, options);\n var cm = doc.cm;\n if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n changeLine(doc, handle, \"widget\", function (line) {\n var widgets = line.widgets || (line.widgets = []);\n if (widget.insertAt == null) { widgets.push(widget); }\n else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget); }\n widget.line = line;\n if (cm && !lineIsHidden(doc, line)) {\n var aboveVisible = heightAtLine(line) < doc.scrollTop;\n updateLineHeight(line, line.height + widgetHeight(widget));\n if (aboveVisible) { addToScrollTop(cm, widget.height); }\n cm.curOp.forceUpdate = true;\n }\n return true\n });\n if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n return widget\n}\n\n// TEXTMARKERS\n\n// Created with markText and setBookmark methods. A TextMarker is a\n// handle that can be used to clear or find a marked position in the\n// document. Line objects hold arrays (markedSpans) containing\n// {from, to, marker} object pointing to such marker objects, and\n// indicating that such a marker is present on that line. Multiple\n// lines may point to the same marker when it spans across lines.\n// The spans will have null for their from/to properties when the\n// marker continues beyond the start/end of the line. Markers have\n// links back to the lines they currently touch.\n\n// Collapsed markers have unique ids, in order to be able to order\n// them, which is needed for uniquely determining an outer marker\n// when they overlap (they may nest, but not partially overlap).\nvar nextMarkerId = 0;\n\nvar TextMarker = function(doc, type) {\n this.lines = [];\n this.type = type;\n this.doc = doc;\n this.id = ++nextMarkerId;\n};\n\n// Clear the marker.\nTextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n var cm = this.doc.cm, withOp = cm && !cm.curOp;\n if (withOp) { startOperation(cm); }\n if (hasHandler(this, \"clear\")) {\n var found = this.find();\n if (found) { signalLater(this, \"clear\", found.from, found.to); }\n }\n var min = null, max = null;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n else if (cm) {\n if (span.to != null) { max = lineNo(line); }\n if (span.from != null) { min = lineNo(line); }\n }\n line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm)\n { updateLineHeight(line, textHeight(cm.display)); }\n }\n if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual);\n if (len > cm.display.maxLineLength) {\n cm.display.maxLine = visual;\n cm.display.maxLineLength = len;\n cm.display.maxLineChanged = true;\n }\n } }\n\n if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n this.lines.length = 0;\n this.explicitlyCleared = true;\n if (this.atomic && this.doc.cantEdit) {\n this.doc.cantEdit = false;\n if (cm) { reCheckSelection(cm.doc); }\n }\n if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n if (withOp) { endOperation(cm); }\n if (this.parent) { this.parent.clear(); }\n};\n\n// Find the position of the marker in the document. Returns a {from,\n// to} object by default. Side can be passed to get a specific side\n// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n// Pos objects returned contain a line object, rather than a line\n// number (used to prevent looking up the same line twice).\nTextMarker.prototype.find = function (side, lineObj) {\n var this$1 = this;\n\n if (side == null && this.type == \"bookmark\") { side = 1; }\n var from, to;\n for (var i = 0; i < this.lines.length; ++i) {\n var line = this$1.lines[i];\n var span = getMarkedSpanFor(line.markedSpans, this$1);\n if (span.from != null) {\n from = Pos(lineObj ? line : lineNo(line), span.from);\n if (side == -1) { return from }\n }\n if (span.to != null) {\n to = Pos(lineObj ? line : lineNo(line), span.to);\n if (side == 1) { return to }\n }\n }\n return from && {from: from, to: to}\n};\n\n// Signals that the marker's widget changed, and surrounding layout\n// should be recomputed.\nTextMarker.prototype.changed = function () {\n var this$1 = this;\n\n var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n if (!pos || !cm) { return }\n runInOp(cm, function () {\n var line = pos.line, lineN = lineNo(pos.line);\n var view = findViewForLine(cm, lineN);\n if (view) {\n clearLineMeasurementCacheFor(view);\n cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n }\n cm.curOp.updateMaxLine = true;\n if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n var oldHeight = widget.height;\n widget.height = null;\n var dHeight = widgetHeight(widget) - oldHeight;\n if (dHeight)\n { updateLineHeight(line, line.height + dHeight); }\n }\n signalLater(cm, \"markerChanged\", cm, this$1);\n });\n};\n\nTextMarker.prototype.attachLine = function (line) {\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;\n if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n }\n this.lines.push(line);\n};\n\nTextMarker.prototype.detachLine = function (line) {\n this.lines.splice(indexOf(this.lines, line), 1);\n if (!this.lines.length && this.doc.cm) {\n var op = this.doc.cm.curOp;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n }\n};\neventMixin(TextMarker);\n\n// Create a marker, wire it up to the right lines, and\nfunction markText(doc, from, to, options, type) {\n // Shared markers (across linked documents) are handled separately\n // (markTextShared will call out to this again, once per\n // document).\n if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n // Ensure we are in an operation.\n if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n var marker = new TextMarker(doc, type), diff = cmp(from, to);\n if (options) { copyObj(options, marker, false); }\n // Don't connect empty markers unless clearWhenEmpty is false\n if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n { return marker }\n if (marker.replacedWith) {\n // Showing up as a widget implies collapsed (widget replaces text)\n marker.collapsed = true;\n marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n }\n if (marker.collapsed) {\n if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n seeCollapsedSpans();\n }\n\n if (marker.addToHistory)\n { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n var curLine = from.line, cm = doc.cm, updateMaxLine;\n doc.iter(curLine, to.line + 1, function (line) {\n if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n { updateMaxLine = true; }\n if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n addMarkedSpan(line, new MarkedSpan(marker,\n curLine == from.line ? from.ch : null,\n curLine == to.line ? to.ch : null));\n ++curLine;\n });\n // lineIsHidden depends on the presence of the spans, so needs a second pass\n if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n }); }\n\n if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n if (marker.readOnly) {\n seeReadOnlySpans();\n if (doc.history.done.length || doc.history.undone.length)\n { doc.clearHistory(); }\n }\n if (marker.collapsed) {\n marker.id = ++nextMarkerId;\n marker.atomic = true;\n }\n if (cm) {\n // Sync editor state\n if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n if (marker.collapsed)\n { regChange(cm, from.line, to.line + 1); }\n else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css)\n { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n if (marker.atomic) { reCheckSelection(cm.doc); }\n signalLater(cm, \"markerAdded\", cm, marker);\n }\n return marker\n}\n\n// SHARED TEXTMARKERS\n\n// A shared marker spans multiple linked documents. It is\n// implemented as a meta-marker-object controlling multiple normal\n// markers.\nvar SharedTextMarker = function(markers, primary) {\n var this$1 = this;\n\n this.markers = markers;\n this.primary = primary;\n for (var i = 0; i < markers.length; ++i)\n { markers[i].parent = this$1; }\n};\n\nSharedTextMarker.prototype.clear = function () {\n var this$1 = this;\n\n if (this.explicitlyCleared) { return }\n this.explicitlyCleared = true;\n for (var i = 0; i < this.markers.length; ++i)\n { this$1.markers[i].clear(); }\n signalLater(this, \"clear\");\n};\n\nSharedTextMarker.prototype.find = function (side, lineObj) {\n return this.primary.find(side, lineObj)\n};\neventMixin(SharedTextMarker);\n\nfunction markTextShared(doc, from, to, options, type) {\n options = copyObj(options);\n options.shared = false;\n var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n var widget = options.widgetNode;\n linkedDocs(doc, function (doc) {\n if (widget) { options.widgetNode = widget.cloneNode(true); }\n markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n for (var i = 0; i < doc.linked.length; ++i)\n { if (doc.linked[i].isParent) { return } }\n primary = lst(markers);\n });\n return new SharedTextMarker(markers, primary)\n}\n\nfunction findSharedMarkers(doc) {\n return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n}\n\nfunction copySharedMarkers(doc, markers) {\n for (var i = 0; i < markers.length; i++) {\n var marker = markers[i], pos = marker.find();\n var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n if (cmp(mFrom, mTo)) {\n var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n marker.markers.push(subMark);\n subMark.parent = marker;\n }\n }\n}\n\nfunction detachSharedMarkers(markers) {\n var loop = function ( i ) {\n var marker = markers[i], linked = [marker.primary.doc];\n linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n for (var j = 0; j < marker.markers.length; j++) {\n var subMarker = marker.markers[j];\n if (indexOf(linked, subMarker.doc) == -1) {\n subMarker.parent = null;\n marker.markers.splice(j--, 1);\n }\n }\n };\n\n for (var i = 0; i < markers.length; i++) loop( i );\n}\n\nvar nextDocId = 0;\nvar Doc = function(text, mode, firstLine, lineSep, direction) {\n if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n if (firstLine == null) { firstLine = 0; }\n\n BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n this.first = firstLine;\n this.scrollTop = this.scrollLeft = 0;\n this.cantEdit = false;\n this.cleanGeneration = 1;\n this.modeFrontier = this.highlightFrontier = firstLine;\n var start = Pos(firstLine, 0);\n this.sel = simpleSelection(start);\n this.history = new History(null);\n this.id = ++nextDocId;\n this.modeOption = mode;\n this.lineSep = lineSep;\n this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n this.extend = false;\n\n if (typeof text == \"string\") { text = this.splitLines(text); }\n updateDoc(this, {from: start, to: start, text: text});\n setSelection(this, simpleSelection(start), sel_dontScroll);\n};\n\nDoc.prototype = createObj(BranchChunk.prototype, {\n constructor: Doc,\n // Iterate over the document. Supports two forms -- with only one\n // argument, it calls that for each line in the document. With\n // three, it iterates over the range given by the first two (with\n // the second being non-inclusive).\n iter: function(from, to, op) {\n if (op) { this.iterN(from - this.first, to - from, op); }\n else { this.iterN(this.first, this.first + this.size, from); }\n },\n\n // Non-public interface for adding and removing lines.\n insert: function(at, lines) {\n var height = 0;\n for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n this.insertInner(at - this.first, lines, height);\n },\n remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n // From here, the methods are part of the public interface. Most\n // are also available from CodeMirror (editor) instances.\n\n getValue: function(lineSep) {\n var lines = getLines(this, this.first, this.first + this.size);\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n setValue: docMethodOp(function(code) {\n var top = Pos(this.first, 0), last = this.first + this.size - 1;\n makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n setSelection(this, simpleSelection(top), sel_dontScroll);\n }),\n replaceRange: function(code, from, to, origin) {\n from = clipPos(this, from);\n to = to ? clipPos(this, to) : from;\n replaceRange(this, code, from, to, origin);\n },\n getRange: function(from, to, lineSep) {\n var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n if (lineSep === false) { return lines }\n return lines.join(lineSep || this.lineSeparator())\n },\n\n getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n getLineNumber: function(line) {return lineNo(line)},\n\n getLineHandleVisualStart: function(line) {\n if (typeof line == \"number\") { line = getLine(this, line); }\n return visualLine(line)\n },\n\n lineCount: function() {return this.size},\n firstLine: function() {return this.first},\n lastLine: function() {return this.first + this.size - 1},\n\n clipPos: function(pos) {return clipPos(this, pos)},\n\n getCursor: function(start) {\n var range$$1 = this.sel.primary(), pos;\n if (start == null || start == \"head\") { pos = range$$1.head; }\n else if (start == \"anchor\") { pos = range$$1.anchor; }\n else if (start == \"end\" || start == \"to\" || start === false) { pos = range$$1.to(); }\n else { pos = range$$1.from(); }\n return pos\n },\n listSelections: function() { return this.sel.ranges },\n somethingSelected: function() {return this.sel.somethingSelected()},\n\n setCursor: docMethodOp(function(line, ch, options) {\n setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n }),\n setSelection: docMethodOp(function(anchor, head, options) {\n setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n }),\n extendSelection: docMethodOp(function(head, other, options) {\n extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n }),\n extendSelections: docMethodOp(function(heads, options) {\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n extendSelectionsBy: docMethodOp(function(f, options) {\n var heads = map(this.sel.ranges, f);\n extendSelections(this, clipPosArray(this, heads), options);\n }),\n setSelections: docMethodOp(function(ranges, primary, options) {\n var this$1 = this;\n\n if (!ranges.length) { return }\n var out = [];\n for (var i = 0; i < ranges.length; i++)\n { out[i] = new Range(clipPos(this$1, ranges[i].anchor),\n clipPos(this$1, ranges[i].head)); }\n if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n setSelection(this, normalizeSelection(out, primary), options);\n }),\n addSelection: docMethodOp(function(anchor, head, options) {\n var ranges = this.sel.ranges.slice(0);\n ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n setSelection(this, normalizeSelection(ranges, ranges.length - 1), options);\n }),\n\n getSelection: function(lineSep) {\n var this$1 = this;\n\n var ranges = this.sel.ranges, lines;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n lines = lines ? lines.concat(sel) : sel;\n }\n if (lineSep === false) { return lines }\n else { return lines.join(lineSep || this.lineSeparator()) }\n },\n getSelections: function(lineSep) {\n var this$1 = this;\n\n var parts = [], ranges = this.sel.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var sel = getBetween(this$1, ranges[i].from(), ranges[i].to());\n if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()); }\n parts[i] = sel;\n }\n return parts\n },\n replaceSelection: function(code, collapse, origin) {\n var dup = [];\n for (var i = 0; i < this.sel.ranges.length; i++)\n { dup[i] = code; }\n this.replaceSelections(dup, collapse, origin || \"+input\");\n },\n replaceSelections: docMethodOp(function(code, collapse, origin) {\n var this$1 = this;\n\n var changes = [], sel = this.sel;\n for (var i = 0; i < sel.ranges.length; i++) {\n var range$$1 = sel.ranges[i];\n changes[i] = {from: range$$1.from(), to: range$$1.to(), text: this$1.splitLines(code[i]), origin: origin};\n }\n var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n { makeChange(this$1, changes[i$1]); }\n if (newSel) { setSelectionReplaceHistory(this, newSel); }\n else if (this.cm) { ensureCursorVisible(this.cm); }\n }),\n undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n setExtending: function(val) {this.extend = val;},\n getExtending: function() {return this.extend},\n\n historySize: function() {\n var hist = this.history, done = 0, undone = 0;\n for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n return {undo: done, redo: undone}\n },\n clearHistory: function() {this.history = new History(this.history.maxGeneration);},\n\n markClean: function() {\n this.cleanGeneration = this.changeGeneration(true);\n },\n changeGeneration: function(forceSplit) {\n if (forceSplit)\n { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n return this.history.generation\n },\n isClean: function (gen) {\n return this.history.generation == (gen || this.cleanGeneration)\n },\n\n getHistory: function() {\n return {done: copyHistoryArray(this.history.done),\n undone: copyHistoryArray(this.history.undone)}\n },\n setHistory: function(histData) {\n var hist = this.history = new History(this.history.maxGeneration);\n hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n },\n\n setGutterMarker: docMethodOp(function(line, gutterID, value) {\n return changeLine(this, line, \"gutter\", function (line) {\n var markers = line.gutterMarkers || (line.gutterMarkers = {});\n markers[gutterID] = value;\n if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n return true\n })\n }),\n\n clearGutter: docMethodOp(function(gutterID) {\n var this$1 = this;\n\n this.iter(function (line) {\n if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n changeLine(this$1, line, \"gutter\", function () {\n line.gutterMarkers[gutterID] = null;\n if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n return true\n });\n }\n });\n }),\n\n lineInfo: function(line) {\n var n;\n if (typeof line == \"number\") {\n if (!isLine(this, line)) { return null }\n n = line;\n line = getLine(this, line);\n if (!line) { return null }\n } else {\n n = lineNo(line);\n if (n == null) { return null }\n }\n return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n widgets: line.widgets}\n },\n\n addLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n if (!line[prop]) { line[prop] = cls; }\n else if (classTest(cls).test(line[prop])) { return false }\n else { line[prop] += \" \" + cls; }\n return true\n })\n }),\n removeLineClass: docMethodOp(function(handle, where, cls) {\n return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n var prop = where == \"text\" ? \"textClass\"\n : where == \"background\" ? \"bgClass\"\n : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n var cur = line[prop];\n if (!cur) { return false }\n else if (cls == null) { line[prop] = null; }\n else {\n var found = cur.match(classTest(cls));\n if (!found) { return false }\n var end = found.index + found[0].length;\n line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n }\n return true\n })\n }),\n\n addLineWidget: docMethodOp(function(handle, node, options) {\n return addLineWidget(this, handle, node, options)\n }),\n removeLineWidget: function(widget) { widget.clear(); },\n\n markText: function(from, to, options) {\n return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n },\n setBookmark: function(pos, options) {\n var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n insertLeft: options && options.insertLeft,\n clearWhenEmpty: false, shared: options && options.shared,\n handleMouseEvents: options && options.handleMouseEvents};\n pos = clipPos(this, pos);\n return markText(this, pos, pos, realOpts, \"bookmark\")\n },\n findMarksAt: function(pos) {\n pos = clipPos(this, pos);\n var markers = [], spans = getLine(this, pos.line).markedSpans;\n if (spans) { for (var i = 0; i < spans.length; ++i) {\n var span = spans[i];\n if ((span.from == null || span.from <= pos.ch) &&\n (span.to == null || span.to >= pos.ch))\n { markers.push(span.marker.parent || span.marker); }\n } }\n return markers\n },\n findMarks: function(from, to, filter) {\n from = clipPos(this, from); to = clipPos(this, to);\n var found = [], lineNo$$1 = from.line;\n this.iter(from.line, to.line + 1, function (line) {\n var spans = line.markedSpans;\n if (spans) { for (var i = 0; i < spans.length; i++) {\n var span = spans[i];\n if (!(span.to != null && lineNo$$1 == from.line && from.ch >= span.to ||\n span.from == null && lineNo$$1 != from.line ||\n span.from != null && lineNo$$1 == to.line && span.from >= to.ch) &&\n (!filter || filter(span.marker)))\n { found.push(span.marker.parent || span.marker); }\n } }\n ++lineNo$$1;\n });\n return found\n },\n getAllMarks: function() {\n var markers = [];\n this.iter(function (line) {\n var sps = line.markedSpans;\n if (sps) { for (var i = 0; i < sps.length; ++i)\n { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n });\n return markers\n },\n\n posFromIndex: function(off) {\n var ch, lineNo$$1 = this.first, sepSize = this.lineSeparator().length;\n this.iter(function (line) {\n var sz = line.text.length + sepSize;\n if (sz > off) { ch = off; return true }\n off -= sz;\n ++lineNo$$1;\n });\n return clipPos(this, Pos(lineNo$$1, ch))\n },\n indexFromPos: function (coords) {\n coords = clipPos(this, coords);\n var index = coords.ch;\n if (coords.line < this.first || coords.ch < 0) { return 0 }\n var sepSize = this.lineSeparator().length;\n this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n index += line.text.length + sepSize;\n });\n return index\n },\n\n copy: function(copyHistory) {\n var doc = new Doc(getLines(this, this.first, this.first + this.size),\n this.modeOption, this.first, this.lineSep, this.direction);\n doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n doc.sel = this.sel;\n doc.extend = false;\n if (copyHistory) {\n doc.history.undoDepth = this.history.undoDepth;\n doc.setHistory(this.getHistory());\n }\n return doc\n },\n\n linkedDoc: function(options) {\n if (!options) { options = {}; }\n var from = this.first, to = this.first + this.size;\n if (options.from != null && options.from > from) { from = options.from; }\n if (options.to != null && options.to < to) { to = options.to; }\n var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n if (options.sharedHist) { copy.history = this.history\n ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n copySharedMarkers(copy, findSharedMarkers(this));\n return copy\n },\n unlinkDoc: function(other) {\n var this$1 = this;\n\n if (other instanceof CodeMirror$1) { other = other.doc; }\n if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n var link = this$1.linked[i];\n if (link.doc != other) { continue }\n this$1.linked.splice(i, 1);\n other.unlinkDoc(this$1);\n detachSharedMarkers(findSharedMarkers(this$1));\n break\n } }\n // If the histories were shared, split them again\n if (other.history == this.history) {\n var splitIds = [other.id];\n linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n other.history = new History(null);\n other.history.done = copyHistoryArray(this.history.done, splitIds);\n other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n }\n },\n iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n getMode: function() {return this.mode},\n getEditor: function() {return this.cm},\n\n splitLines: function(str) {\n if (this.lineSep) { return str.split(this.lineSep) }\n return splitLinesAuto(str)\n },\n lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n setDirection: docMethodOp(function (dir) {\n if (dir != \"rtl\") { dir = \"ltr\"; }\n if (dir == this.direction) { return }\n this.direction = dir;\n this.iter(function (line) { return line.order = null; });\n if (this.cm) { directionChanged(this.cm); }\n })\n});\n\n// Public alias.\nDoc.prototype.eachLine = Doc.prototype.iter;\n\n// Kludge to work around strange IE behavior where it'll sometimes\n// re-fire a series of drag-related events right after the drop (#1551)\nvar lastDrop = 0;\n\nfunction onDrop(e) {\n var cm = this;\n clearDragCursor(cm);\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n { return }\n e_preventDefault(e);\n if (ie) { lastDrop = +new Date; }\n var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n if (!pos || cm.isReadOnly()) { return }\n // Might be a file drop, in which case we simply extract the text\n // and insert it.\n if (files && files.length && window.FileReader && window.File) {\n var n = files.length, text = Array(n), read = 0;\n var loadFile = function (file, i) {\n if (cm.options.allowDropFileTypes &&\n indexOf(cm.options.allowDropFileTypes, file.type) == -1)\n { return }\n\n var reader = new FileReader;\n reader.onload = operation(cm, function () {\n var content = reader.result;\n if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) { content = \"\"; }\n text[i] = content;\n if (++read == n) {\n pos = clipPos(cm.doc, pos);\n var change = {from: pos, to: pos,\n text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())),\n origin: \"paste\"};\n makeChange(cm.doc, change);\n setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n }\n });\n reader.readAsText(file);\n };\n for (var i = 0; i < n; ++i) { loadFile(files[i], i); }\n } else { // Normal drop\n // Don't do a replace if the drop happened inside of the selected text.\n if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n cm.state.draggingText(e);\n // Ensure the editor is re-focused\n setTimeout(function () { return cm.display.input.focus(); }, 20);\n return\n }\n try {\n var text$1 = e.dataTransfer.getData(\"Text\");\n if (text$1) {\n var selected;\n if (cm.state.draggingText && !cm.state.draggingText.copy)\n { selected = cm.listSelections(); }\n setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n cm.replaceSelection(text$1, \"around\", \"paste\");\n cm.display.input.focus();\n }\n }\n catch(e){}\n }\n}\n\nfunction onDragStart(cm, e) {\n if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n e.dataTransfer.setData(\"Text\", cm.getSelection());\n e.dataTransfer.effectAllowed = \"copyMove\";\n\n // Use dummy image instead of default browsers image.\n // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n if (e.dataTransfer.setDragImage && !safari) {\n var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n if (presto) {\n img.width = img.height = 1;\n cm.display.wrapper.appendChild(img);\n // Force a relayout, or Opera won't use our image for some obscure reason\n img._top = img.offsetTop;\n }\n e.dataTransfer.setDragImage(img, 0, 0);\n if (presto) { img.parentNode.removeChild(img); }\n }\n}\n\nfunction onDragOver(cm, e) {\n var pos = posFromMouse(cm, e);\n if (!pos) { return }\n var frag = document.createDocumentFragment();\n drawSelectionCursor(cm, pos, frag);\n if (!cm.display.dragCursor) {\n cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n }\n removeChildrenAndAdd(cm.display.dragCursor, frag);\n}\n\nfunction clearDragCursor(cm) {\n if (cm.display.dragCursor) {\n cm.display.lineSpace.removeChild(cm.display.dragCursor);\n cm.display.dragCursor = null;\n }\n}\n\n// These must be handled carefully, because naively registering a\n// handler for each editor will cause the editors to never be\n// garbage collected.\n\nfunction forEachCodeMirror(f) {\n if (!document.getElementsByClassName) { return }\n var byClass = document.getElementsByClassName(\"CodeMirror\");\n for (var i = 0; i < byClass.length; i++) {\n var cm = byClass[i].CodeMirror;\n if (cm) { f(cm); }\n }\n}\n\nvar globalsRegistered = false;\nfunction ensureGlobalHandlers() {\n if (globalsRegistered) { return }\n registerGlobalHandlers();\n globalsRegistered = true;\n}\nfunction registerGlobalHandlers() {\n // When the window resizes, we need to refresh active editors.\n var resizeTimer;\n on(window, \"resize\", function () {\n if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n resizeTimer = null;\n forEachCodeMirror(onResize);\n }, 100); }\n });\n // When the window loses focus, we want to show the editor as blurred\n on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n}\n// Called when the window resizes\nfunction onResize(cm) {\n var d = cm.display;\n // Might be a text scaling operation, clear size caches.\n d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n d.scrollbarsClipped = false;\n cm.setSize();\n}\n\nvar keyNames = {\n 3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n 19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n 36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n 46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n 106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 127: \"Delete\", 145: \"ScrollLock\",\n 173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n 221: \"]\", 222: \"'\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n 63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n};\n\n// Number keys\nfor (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n// Alphabetic keys\nfor (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n// Function keys\nfor (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\nvar keyMap = {};\n\nkeyMap.basic = {\n \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n \"Esc\": \"singleSelection\"\n};\n// Note that the save and find-related commands aren't defined by\n// default. User code or addons can define them. Unknown commands\n// are simply ignored.\nkeyMap.pcDefault = {\n \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n \"fallthrough\": \"basic\"\n};\n// Very basic readline/emacs-style bindings, which are standard on Mac.\nkeyMap.emacsy = {\n \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\n \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\", \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\",\n \"Alt-D\": \"delWordAfter\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\",\n \"Ctrl-O\": \"openLine\"\n};\nkeyMap.macDefault = {\n \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n \"fallthrough\": [\"basic\", \"emacsy\"]\n};\nkeyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n// KEYMAP DISPATCH\n\nfunction normalizeKeyName(name) {\n var parts = name.split(/-(?!$)/);\n name = parts[parts.length - 1];\n var alt, ctrl, shift, cmd;\n for (var i = 0; i < parts.length - 1; i++) {\n var mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n }\n if (alt) { name = \"Alt-\" + name; }\n if (ctrl) { name = \"Ctrl-\" + name; }\n if (cmd) { name = \"Cmd-\" + name; }\n if (shift) { name = \"Shift-\" + name; }\n return name\n}\n\n// This is a kludge to keep keymaps mostly working as raw objects\n// (backwards compatibility) while at the same time support features\n// like normalization and multi-stroke key bindings. It compiles a\n// new normalized keymap, and then updates the old object to reflect\n// this.\nfunction normalizeKeyMap(keymap) {\n var copy = {};\n for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n var value = keymap[keyname];\n if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n if (value == \"...\") { delete keymap[keyname]; continue }\n\n var keys = map(keyname.split(\" \"), normalizeKeyName);\n for (var i = 0; i < keys.length; i++) {\n var val = (void 0), name = (void 0);\n if (i == keys.length - 1) {\n name = keys.join(\" \");\n val = value;\n } else {\n name = keys.slice(0, i + 1).join(\" \");\n val = \"...\";\n }\n var prev = copy[name];\n if (!prev) { copy[name] = val; }\n else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n }\n delete keymap[keyname];\n } }\n for (var prop in copy) { keymap[prop] = copy[prop]; }\n return keymap\n}\n\nfunction lookupKey(key, map$$1, handle, context) {\n map$$1 = getKeyMap(map$$1);\n var found = map$$1.call ? map$$1.call(key, context) : map$$1[key];\n if (found === false) { return \"nothing\" }\n if (found === \"...\") { return \"multi\" }\n if (found != null && handle(found)) { return \"handled\" }\n\n if (map$$1.fallthrough) {\n if (Object.prototype.toString.call(map$$1.fallthrough) != \"[object Array]\")\n { return lookupKey(key, map$$1.fallthrough, handle, context) }\n for (var i = 0; i < map$$1.fallthrough.length; i++) {\n var result = lookupKey(key, map$$1.fallthrough[i], handle, context);\n if (result) { return result }\n }\n }\n}\n\n// Modifier key presses don't count as 'real' key presses for the\n// purpose of keymap fallthrough.\nfunction isModifierKey(value) {\n var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n}\n\nfunction addModifierNames(name, event, noShift) {\n var base = name;\n if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Cmd\") { name = \"Cmd-\" + name; }\n if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n return name\n}\n\n// Look up the name of a key as indicated by an event object.\nfunction keyName(event, noShift) {\n if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n var name = keyNames[event.keyCode];\n if (name == null || event.altGraphKey) { return false }\n // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n if (event.keyCode == 3 && event.code) { name = event.code; }\n return addModifierNames(name, event, noShift)\n}\n\nfunction getKeyMap(val) {\n return typeof val == \"string\" ? keyMap[val] : val\n}\n\n// Helper for deleting text near the selection(s), used to implement\n// backspace, delete, and similar functionality.\nfunction deleteNearSelection(cm, compute) {\n var ranges = cm.doc.sel.ranges, kill = [];\n // Build up a set of ranges to kill first, merging overlapping\n // ranges.\n for (var i = 0; i < ranges.length; i++) {\n var toKill = compute(ranges[i]);\n while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n var replaced = kill.pop();\n if (cmp(replaced.from, toKill.from) < 0) {\n toKill.from = replaced.from;\n break\n }\n }\n kill.push(toKill);\n }\n // Next, remove those actual ranges.\n runInOp(cm, function () {\n for (var i = kill.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n ensureCursorVisible(cm);\n });\n}\n\nfunction moveCharLogically(line, ch, dir) {\n var target = skipExtendingChars(line.text, ch + dir, dir);\n return target < 0 || target > line.text.length ? null : target\n}\n\nfunction moveLogically(line, start, dir) {\n var ch = moveCharLogically(line, start.ch, dir);\n return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n}\n\nfunction endOfLine(visually, cm, lineObj, lineNo, dir) {\n if (visually) {\n var order = getOrder(lineObj, cm.doc.direction);\n if (order) {\n var part = dir < 0 ? lst(order) : order[0];\n var moveInStorageOrder = (dir < 0) == (part.level == 1);\n var sticky = moveInStorageOrder ? \"after\" : \"before\";\n var ch;\n // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n // it could be that the last bidi part is not on the last visual line,\n // since visual lines contain content order-consecutive chunks.\n // Thus, in rtl, we are looking for the first (content-order) character\n // in the rtl chunk that is on the last line (that is, the same line\n // as the last (content-order) character).\n if (part.level > 0 || cm.doc.direction == \"rtl\") {\n var prep = prepareMeasureForLine(cm, lineObj);\n ch = dir < 0 ? lineObj.text.length - 1 : 0;\n var targetTop = measureCharPrepared(cm, prep, ch).top;\n ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n } else { ch = dir < 0 ? part.to : part.from; }\n return new Pos(lineNo, ch, sticky)\n }\n }\n return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n}\n\nfunction moveVisually(cm, line, start, dir) {\n var bidi = getOrder(line, cm.doc.direction);\n if (!bidi) { return moveLogically(line, start, dir) }\n if (start.ch >= line.text.length) {\n start.ch = line.text.length;\n start.sticky = \"before\";\n } else if (start.ch <= 0) {\n start.ch = 0;\n start.sticky = \"after\";\n }\n var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n // nothing interesting happens.\n return moveLogically(line, start, dir)\n }\n\n var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n var prep;\n var getWrappedLineExtent = function (ch) {\n if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n prep = prep || prepareMeasureForLine(cm, line);\n return wrappedLineExtentChar(cm, line, prep, ch)\n };\n var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n if (cm.doc.direction == \"rtl\" || part.level == 1) {\n var moveInStorageOrder = (part.level == 1) == (dir < 0);\n var ch = mv(start, moveInStorageOrder ? 1 : -1);\n if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n var sticky = moveInStorageOrder ? \"before\" : \"after\";\n return new Pos(start.line, ch, sticky)\n }\n }\n\n // Case 3: Could not move within this bidi part in this visual line, so leave\n // the current bidi part\n\n var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n ? new Pos(start.line, mv(ch, 1), \"before\")\n : new Pos(start.line, ch, \"after\"); };\n\n for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n var part = bidi[partPos];\n var moveInStorageOrder = (dir > 0) == (part.level != 1);\n var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n }\n };\n\n // Case 3a: Look for other bidi parts on the same visual line\n var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n if (res) { return res }\n\n // Case 3b: Look for other bidi parts on the next visual line\n var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n if (res) { return res }\n }\n\n // Case 4: Nowhere to move\n return null\n}\n\n// Commands are parameter-less actions that can be performed on an\n// editor, mostly used for keybindings.\nvar commands = {\n selectAll: selectAll,\n singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n if (range.empty()) {\n var len = getLine(cm.doc, range.head.line).text.length;\n if (range.head.ch == len && range.head.line < cm.lastLine())\n { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n else\n { return {from: range.head, to: Pos(range.head.line, len)} }\n } else {\n return {from: range.from(), to: range.to()}\n }\n }); },\n deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0),\n to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n }); }); },\n delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n from: Pos(range.from().line, 0), to: range.from()\n }); }); },\n delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n return {from: leftPos, to: range.from()}\n }); },\n delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n var top = cm.charCoords(range.head, \"div\").top + 5;\n var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n return {from: range.from(), to: rightPos }\n }); },\n undo: function (cm) { return cm.undo(); },\n redo: function (cm) { return cm.redo(); },\n undoSelection: function (cm) { return cm.undoSelection(); },\n redoSelection: function (cm) { return cm.redoSelection(); },\n goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n {origin: \"+move\", bias: 1}\n ); },\n goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n {origin: \"+move\", bias: -1}\n ); },\n goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n }, sel_move); },\n goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n return cm.coordsChar({left: 0, top: top}, \"div\")\n }, sel_move); },\n goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n var top = cm.cursorCoords(range.head, \"div\").top + 5;\n var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n return pos\n }, sel_move); },\n goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n delCharBefore: function (cm) { return cm.deleteH(-1, \"char\"); },\n delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n insertSoftTab: function (cm) {\n var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].from();\n var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n spaces.push(spaceStr(tabSize - col % tabSize));\n }\n cm.replaceSelections(spaces);\n },\n defaultTab: function (cm) {\n if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n else { cm.execCommand(\"insertTab\"); }\n },\n // Swap the two chars left and right of each selection's head.\n // Move cursor behind the two swapped characters afterwards.\n //\n // Doesn't consider line feeds a character.\n // Doesn't scan more than one line above to find a character.\n // Doesn't do anything on an empty line.\n // Doesn't do anything with non-empty selections.\n transposeChars: function (cm) { return runInOp(cm, function () {\n var ranges = cm.listSelections(), newSel = [];\n for (var i = 0; i < ranges.length; i++) {\n if (!ranges[i].empty()) { continue }\n var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n if (line) {\n if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n if (cur.ch > 0) {\n cur = new Pos(cur.line, cur.ch + 1);\n cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n } else if (cur.line > cm.doc.first) {\n var prev = getLine(cm.doc, cur.line - 1).text;\n if (prev) {\n cur = new Pos(cur.line, 1);\n cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n prev.charAt(prev.length - 1),\n Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n }\n }\n }\n newSel.push(new Range(cur, cur));\n }\n cm.setSelections(newSel);\n }); },\n newlineAndIndent: function (cm) { return runInOp(cm, function () {\n var sels = cm.listSelections();\n for (var i = sels.length - 1; i >= 0; i--)\n { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n sels = cm.listSelections();\n for (var i$1 = 0; i$1 < sels.length; i$1++)\n { cm.indentLine(sels[i$1].from().line, null, true); }\n ensureCursorVisible(cm);\n }); },\n openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n};\n\n\nfunction lineStart(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLine(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, visual, lineN, 1)\n}\nfunction lineEnd(cm, lineN) {\n var line = getLine(cm.doc, lineN);\n var visual = visualLineEnd(line);\n if (visual != line) { lineN = lineNo(visual); }\n return endOfLine(true, cm, line, lineN, -1)\n}\nfunction lineStartSmart(cm, pos) {\n var start = lineStart(cm, pos.line);\n var line = getLine(cm.doc, start.line);\n var order = getOrder(line, cm.doc.direction);\n if (!order || order[0].level == 0) {\n var firstNonWS = Math.max(0, line.text.search(/\\S/));\n var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n }\n return start\n}\n\n// Run a handler that was bound to a key.\nfunction doHandleBinding(cm, bound, dropShift) {\n if (typeof bound == \"string\") {\n bound = commands[bound];\n if (!bound) { return false }\n }\n // Ensure previous input has been read, so that the handler sees a\n // consistent view of the document\n cm.display.input.ensurePolled();\n var prevShift = cm.display.shift, done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n if (dropShift) { cm.display.shift = false; }\n done = bound(cm) != Pass;\n } finally {\n cm.display.shift = prevShift;\n cm.state.suppressEdits = false;\n }\n return done\n}\n\nfunction lookupKeyForEditor(cm, name, handle) {\n for (var i = 0; i < cm.state.keyMaps.length; i++) {\n var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n if (result) { return result }\n }\n return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n || lookupKey(name, cm.options.keyMap, handle, cm)\n}\n\n// Note that, despite the name, this function is also used to check\n// for bound mouse clicks.\n\nvar stopSeq = new Delayed;\n\nfunction dispatchKey(cm, name, e, handle) {\n var seq = cm.state.keySeq;\n if (seq) {\n if (isModifierKey(name)) { return \"handled\" }\n if (/\\'$/.test(name))\n { cm.state.keySeq = null; }\n else\n { stopSeq.set(50, function () {\n if (cm.state.keySeq == seq) {\n cm.state.keySeq = null;\n cm.display.input.reset();\n }\n }); }\n if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n }\n return dispatchKeyInner(cm, name, e, handle)\n}\n\nfunction dispatchKeyInner(cm, name, e, handle) {\n var result = lookupKeyForEditor(cm, name, handle);\n\n if (result == \"multi\")\n { cm.state.keySeq = name; }\n if (result == \"handled\")\n { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n if (result == \"handled\" || result == \"multi\") {\n e_preventDefault(e);\n restartBlink(cm);\n }\n\n return !!result\n}\n\n// Handle a key from the keydown event.\nfunction handleKeyBinding(cm, e) {\n var name = keyName(e, true);\n if (!name) { return false }\n\n if (e.shiftKey && !cm.state.keySeq) {\n // First try to resolve full name (including 'Shift-'). Failing\n // that, see if there is a cursor-motion command (starting with\n // 'go') bound to the keyname without 'Shift-'.\n return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n || dispatchKey(cm, name, e, function (b) {\n if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n { return doHandleBinding(cm, b) }\n })\n } else {\n return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n }\n}\n\n// Handle a key from the keypress event\nfunction handleCharBinding(cm, e, ch) {\n return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n}\n\nvar lastStoppedKey = null;\nfunction onKeyDown(e) {\n var cm = this;\n cm.curOp.focus = activeElt();\n if (signalDOMEvent(cm, e)) { return }\n // IE does strange things with escape.\n if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n var code = e.keyCode;\n cm.display.shift = code == 16 || e.shiftKey;\n var handled = handleKeyBinding(cm, e);\n if (presto) {\n lastStoppedKey = handled ? code : null;\n // Opera has no cut event... we try to at least catch the key combo\n if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n { cm.replaceSelection(\"\", null, \"cut\"); }\n }\n\n // Turn mouse into crosshair when Alt is held on Mac.\n if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n { showCrossHair(cm); }\n}\n\nfunction showCrossHair(cm) {\n var lineDiv = cm.display.lineDiv;\n addClass(lineDiv, \"CodeMirror-crosshair\");\n\n function up(e) {\n if (e.keyCode == 18 || !e.altKey) {\n rmClass(lineDiv, \"CodeMirror-crosshair\");\n off(document, \"keyup\", up);\n off(document, \"mouseover\", up);\n }\n }\n on(document, \"keyup\", up);\n on(document, \"mouseover\", up);\n}\n\nfunction onKeyUp(e) {\n if (e.keyCode == 16) { this.doc.sel.shift = false; }\n signalDOMEvent(this, e);\n}\n\nfunction onKeyPress(e) {\n var cm = this;\n if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n var keyCode = e.keyCode, charCode = e.charCode;\n if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n // Some browsers fire keypress events for backspace\n if (ch == \"\\x08\") { return }\n if (handleCharBinding(cm, e, ch)) { return }\n cm.display.input.onKeyPress(e);\n}\n\nvar DOUBLECLICK_DELAY = 400;\n\nvar PastClick = function(time, pos, button) {\n this.time = time;\n this.pos = pos;\n this.button = button;\n};\n\nPastClick.prototype.compare = function (time, pos, button) {\n return this.time + DOUBLECLICK_DELAY > time &&\n cmp(pos, this.pos) == 0 && button == this.button\n};\n\nvar lastClick;\nvar lastDoubleClick;\nfunction clickRepeat(pos, button) {\n var now = +new Date;\n if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n lastClick = lastDoubleClick = null;\n return \"triple\"\n } else if (lastClick && lastClick.compare(now, pos, button)) {\n lastDoubleClick = new PastClick(now, pos, button);\n lastClick = null;\n return \"double\"\n } else {\n lastClick = new PastClick(now, pos, button);\n lastDoubleClick = null;\n return \"single\"\n }\n}\n\n// A mouse down can be a single click, double click, triple click,\n// start of selection drag, start of text drag, new cursor\n// (ctrl-click), rectangle drag (alt-drag), or xwin\n// middle-click-paste. Or it might be a click on something we should\n// not interfere with, such as a scrollbar or widget.\nfunction onMouseDown(e) {\n var cm = this, display = cm.display;\n if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n display.input.ensurePolled();\n display.shift = e.shiftKey;\n\n if (eventInWidget(display, e)) {\n if (!webkit) {\n // Briefly turn off draggability, to allow widgets to do\n // normal dragging things.\n display.scroller.draggable = false;\n setTimeout(function () { return display.scroller.draggable = true; }, 100);\n }\n return\n }\n if (clickInGutter(cm, e)) { return }\n var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n window.focus();\n\n // #3261: make sure, that we're not starting a second selection\n if (button == 1 && cm.state.selectingText)\n { cm.state.selectingText(e); }\n\n if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n if (button == 1) {\n if (pos) { leftButtonDown(cm, pos, repeat, e); }\n else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n } else if (button == 2) {\n if (pos) { extendSelection(cm.doc, pos); }\n setTimeout(function () { return display.input.focus(); }, 20);\n } else if (button == 3) {\n if (captureRightClick) { onContextMenu(cm, e); }\n else { delayBlurEvent(cm); }\n }\n}\n\nfunction handleMappedButton(cm, button, pos, repeat, event) {\n var name = \"Click\";\n if (repeat == \"double\") { name = \"Double\" + name; }\n else if (repeat == \"triple\") { name = \"Triple\" + name; }\n name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {\n if (typeof bound == \"string\") { bound = commands[bound]; }\n if (!bound) { return false }\n var done = false;\n try {\n if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n done = bound(cm, pos) != Pass;\n } finally {\n cm.state.suppressEdits = false;\n }\n return done\n })\n}\n\nfunction configureMouse(cm, repeat, event) {\n var option = cm.getOption(\"configureMouse\");\n var value = option ? option(cm, repeat, event) : {};\n if (value.unit == null) {\n var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n }\n if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n return value\n}\n\nfunction leftButtonDown(cm, pos, repeat, event) {\n if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n else { cm.curOp.focus = activeElt(); }\n\n var behavior = configureMouse(cm, repeat, event);\n\n var sel = cm.doc.sel, contained;\n if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n { leftButtonStartDrag(cm, event, pos, behavior); }\n else\n { leftButtonSelect(cm, event, pos, behavior); }\n}\n\n// Start a text drag. When it ends, see if any dragging actually\n// happen, and treat as a click if it didn't.\nfunction leftButtonStartDrag(cm, event, pos, behavior) {\n var display = cm.display, moved = false;\n var dragEnd = operation(cm, function (e) {\n if (webkit) { display.scroller.draggable = false; }\n cm.state.draggingText = false;\n off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n off(display.scroller, \"dragstart\", dragStart);\n off(display.scroller, \"drop\", dragEnd);\n if (!moved) {\n e_preventDefault(e);\n if (!behavior.addNew)\n { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n if (webkit || ie && ie_version == 9)\n { setTimeout(function () {display.wrapper.ownerDocument.body.focus(); display.input.focus();}, 20); }\n else\n { display.input.focus(); }\n }\n });\n var mouseMove = function(e2) {\n moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n };\n var dragStart = function () { return moved = true; };\n // Let the drag handler handle this.\n if (webkit) { display.scroller.draggable = true; }\n cm.state.draggingText = dragEnd;\n dragEnd.copy = !behavior.moveOnDrag;\n // IE's approach to draggable\n if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n on(display.scroller, \"dragstart\", dragStart);\n on(display.scroller, \"drop\", dragEnd);\n\n delayBlurEvent(cm);\n setTimeout(function () { return display.input.focus(); }, 20);\n}\n\nfunction rangeForUnit(cm, pos, unit) {\n if (unit == \"char\") { return new Range(pos, pos) }\n if (unit == \"word\") { return cm.findWordAt(pos) }\n if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n var result = unit(cm, pos);\n return new Range(result.from, result.to)\n}\n\n// Normal selection, as opposed to text dragging.\nfunction leftButtonSelect(cm, event, start, behavior) {\n var display = cm.display, doc = cm.doc;\n e_preventDefault(event);\n\n var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n if (behavior.addNew && !behavior.extend) {\n ourIndex = doc.sel.contains(start);\n if (ourIndex > -1)\n { ourRange = ranges[ourIndex]; }\n else\n { ourRange = new Range(start, start); }\n } else {\n ourRange = doc.sel.primary();\n ourIndex = doc.sel.primIndex;\n }\n\n if (behavior.unit == \"rectangle\") {\n if (!behavior.addNew) { ourRange = new Range(start, start); }\n start = posFromMouse(cm, event, true, true);\n ourIndex = -1;\n } else {\n var range$$1 = rangeForUnit(cm, start, behavior.unit);\n if (behavior.extend)\n { ourRange = extendRange(ourRange, range$$1.anchor, range$$1.head, behavior.extend); }\n else\n { ourRange = range$$1; }\n }\n\n if (!behavior.addNew) {\n ourIndex = 0;\n setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n startSel = doc.sel;\n } else if (ourIndex == -1) {\n ourIndex = ranges.length;\n setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex),\n {scroll: false, origin: \"*mouse\"});\n } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n {scroll: false, origin: \"*mouse\"});\n startSel = doc.sel;\n } else {\n replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n }\n\n var lastPos = start;\n function extendTo(pos) {\n if (cmp(lastPos, pos) == 0) { return }\n lastPos = pos;\n\n if (behavior.unit == \"rectangle\") {\n var ranges = [], tabSize = cm.options.tabSize;\n var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n line <= end; line++) {\n var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n if (left == right)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n else if (text.length > leftPos)\n { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n }\n if (!ranges.length) { ranges.push(new Range(start, start)); }\n setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n {origin: \"*mouse\", scroll: false});\n cm.scrollIntoView(pos);\n } else {\n var oldRange = ourRange;\n var range$$1 = rangeForUnit(cm, pos, behavior.unit);\n var anchor = oldRange.anchor, head;\n if (cmp(range$$1.anchor, anchor) > 0) {\n head = range$$1.head;\n anchor = minPos(oldRange.from(), range$$1.anchor);\n } else {\n head = range$$1.anchor;\n anchor = maxPos(oldRange.to(), range$$1.head);\n }\n var ranges$1 = startSel.ranges.slice(0);\n ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse);\n }\n }\n\n var editorSize = display.wrapper.getBoundingClientRect();\n // Used to ensure timeout re-tries don't fire when another extend\n // happened in the meantime (clearTimeout isn't reliable -- at\n // least on Chrome, the timeouts still happen even when cleared,\n // if the clear happens after their scheduled firing time).\n var counter = 0;\n\n function extend(e) {\n var curCount = ++counter;\n var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n if (!cur) { return }\n if (cmp(cur, lastPos) != 0) {\n cm.curOp.focus = activeElt();\n extendTo(cur);\n var visible = visibleLines(display, doc);\n if (cur.line >= visible.to || cur.line < visible.from)\n { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n } else {\n var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n if (outside) { setTimeout(operation(cm, function () {\n if (counter != curCount) { return }\n display.scroller.scrollTop += outside;\n extend(e);\n }), 50); }\n }\n }\n\n function done(e) {\n cm.state.selectingText = false;\n counter = Infinity;\n e_preventDefault(e);\n display.input.focus();\n off(display.wrapper.ownerDocument, \"mousemove\", move);\n off(display.wrapper.ownerDocument, \"mouseup\", up);\n doc.history.lastSelOrigin = null;\n }\n\n var move = operation(cm, function (e) {\n if (e.buttons === 0 || !e_button(e)) { done(e); }\n else { extend(e); }\n });\n var up = operation(cm, done);\n cm.state.selectingText = up;\n on(display.wrapper.ownerDocument, \"mousemove\", move);\n on(display.wrapper.ownerDocument, \"mouseup\", up);\n}\n\n// Used when mouse-selecting to adjust the anchor to the proper side\n// of a bidi jump depending on the visual position of the head.\nfunction bidiSimplify(cm, range$$1) {\n var anchor = range$$1.anchor;\n var head = range$$1.head;\n var anchorLine = getLine(cm.doc, anchor.line);\n if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range$$1 }\n var order = getOrder(anchorLine);\n if (!order) { return range$$1 }\n var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n if (part.from != anchor.ch && part.to != anchor.ch) { return range$$1 }\n var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n if (boundary == 0 || boundary == order.length) { return range$$1 }\n\n // Compute the relative visual position of the head compared to the\n // anchor (<0 is to the left, >0 to the right)\n var leftSide;\n if (head.line != anchor.line) {\n leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n } else {\n var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n if (headIndex == boundary - 1 || headIndex == boundary)\n { leftSide = dir < 0; }\n else\n { leftSide = dir > 0; }\n }\n\n var usePart = order[boundary + (leftSide ? -1 : 0)];\n var from = leftSide == (usePart.level == 1);\n var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n return anchor.ch == ch && anchor.sticky == sticky ? range$$1 : new Range(new Pos(anchor.line, ch, sticky), head)\n}\n\n\n// Determines whether an event happened in the gutter, and fires the\n// handlers for the corresponding event.\nfunction gutterEvent(cm, e, type, prevent) {\n var mX, mY;\n if (e.touches) {\n mX = e.touches[0].clientX;\n mY = e.touches[0].clientY;\n } else {\n try { mX = e.clientX; mY = e.clientY; }\n catch(e) { return false }\n }\n if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n if (prevent) { e_preventDefault(e); }\n\n var display = cm.display;\n var lineBox = display.lineDiv.getBoundingClientRect();\n\n if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n mY -= lineBox.top - display.viewOffset;\n\n for (var i = 0; i < cm.options.gutters.length; ++i) {\n var g = display.gutters.childNodes[i];\n if (g && g.getBoundingClientRect().right >= mX) {\n var line = lineAtHeight(cm.doc, mY);\n var gutter = cm.options.gutters[i];\n signal(cm, type, cm, line, gutter, e);\n return e_defaultPrevented(e)\n }\n }\n}\n\nfunction clickInGutter(cm, e) {\n return gutterEvent(cm, e, \"gutterClick\", true)\n}\n\n// CONTEXT MENU HANDLING\n\n// To make the context menu work, we need to briefly unhide the\n// textarea (making it as unobtrusive as possible) to let the\n// right-click take effect on it.\nfunction onContextMenu(cm, e) {\n if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n cm.display.input.onContextMenu(e);\n}\n\nfunction contextMenuInGutter(cm, e) {\n if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n return gutterEvent(cm, e, \"gutterContextMenu\", false)\n}\n\nfunction themeChanged(cm) {\n cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n clearCaches(cm);\n}\n\nvar Init = {toString: function(){return \"CodeMirror.Init\"}};\n\nvar defaults = {};\nvar optionHandlers = {};\n\nfunction defineOptions(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n function option(name, deflt, handle, notOnInit) {\n CodeMirror.defaults[name] = deflt;\n if (handle) { optionHandlers[name] =\n notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n }\n\n CodeMirror.defineOption = option;\n\n // Passed to option handlers when there is no old value.\n CodeMirror.Init = Init;\n\n // These two are, on init, called from the constructor because they\n // have to be initialized before the editor can start at all.\n option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n option(\"mode\", null, function (cm, val) {\n cm.doc.modeOption = val;\n loadMode(cm);\n }, true);\n\n option(\"indentUnit\", 2, loadMode, true);\n option(\"indentWithTabs\", false);\n option(\"smartIndent\", true);\n option(\"tabSize\", 4, function (cm) {\n resetModeState(cm);\n clearCaches(cm);\n regChange(cm);\n }, true);\n\n option(\"lineSeparator\", null, function (cm, val) {\n cm.doc.lineSep = val;\n if (!val) { return }\n var newBreaks = [], lineNo = cm.doc.first;\n cm.doc.iter(function (line) {\n for (var pos = 0;;) {\n var found = line.text.indexOf(val, pos);\n if (found == -1) { break }\n pos = found + val.length;\n newBreaks.push(Pos(lineNo, found));\n }\n lineNo++;\n });\n for (var i = newBreaks.length - 1; i >= 0; i--)\n { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n });\n option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g, function (cm, val, old) {\n cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n if (old != Init) { cm.refresh(); }\n });\n option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n option(\"electricChars\", true);\n option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n }, true);\n option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n option(\"rtlMoveVisually\", !windows);\n option(\"wholeLineUpdateBefore\", true);\n\n option(\"theme\", \"default\", function (cm) {\n themeChanged(cm);\n guttersChanged(cm);\n }, true);\n option(\"keyMap\", \"default\", function (cm, val, old) {\n var next = getKeyMap(val);\n var prev = old != Init && getKeyMap(old);\n if (prev && prev.detach) { prev.detach(cm, next); }\n if (next.attach) { next.attach(cm, prev || null); }\n });\n option(\"extraKeys\", null);\n option(\"configureMouse\", null);\n\n option(\"lineWrapping\", false, wrappingChanged, true);\n option(\"gutters\", [], function (cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"fixedGutter\", true, function (cm, val) {\n cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n cm.refresh();\n }, true);\n option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n option(\"scrollbarStyle\", \"native\", function (cm) {\n initScrollbars(cm);\n updateScrollbars(cm);\n cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n }, true);\n option(\"lineNumbers\", false, function (cm) {\n setGuttersForLineNumbers(cm.options);\n guttersChanged(cm);\n }, true);\n option(\"firstLineNumber\", 1, guttersChanged, true);\n option(\"lineNumberFormatter\", function (integer) { return integer; }, guttersChanged, true);\n option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n option(\"resetSelectionOnContextMenu\", true);\n option(\"lineWiseCopyCut\", true);\n option(\"pasteLinesPerSelection\", true);\n\n option(\"readOnly\", false, function (cm, val) {\n if (val == \"nocursor\") {\n onBlur(cm);\n cm.display.input.blur();\n }\n cm.display.input.readOnlyChanged(val);\n });\n option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n option(\"dragDrop\", true, dragDropChanged);\n option(\"allowDropFileTypes\", null);\n\n option(\"cursorBlinkRate\", 530);\n option(\"cursorScrollMargin\", 0);\n option(\"cursorHeight\", 1, updateSelection, true);\n option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n option(\"workTime\", 100);\n option(\"workDelay\", 100);\n option(\"flattenSpans\", true, resetModeState, true);\n option(\"addModeClass\", false, resetModeState, true);\n option(\"pollInterval\", 100);\n option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n option(\"historyEventDelay\", 1250);\n option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n option(\"maxHighlightLength\", 10000, resetModeState, true);\n option(\"moveInputWithCursor\", true, function (cm, val) {\n if (!val) { cm.display.input.resetPosition(); }\n });\n\n option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n option(\"autofocus\", null);\n option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n}\n\nfunction guttersChanged(cm) {\n updateGutters(cm);\n regChange(cm);\n alignHorizontally(cm);\n}\n\nfunction dragDropChanged(cm, value, old) {\n var wasOn = old && old != Init;\n if (!value != !wasOn) {\n var funcs = cm.display.dragFunctions;\n var toggle = value ? on : off;\n toggle(cm.display.scroller, \"dragstart\", funcs.start);\n toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n toggle(cm.display.scroller, \"dragover\", funcs.over);\n toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n toggle(cm.display.scroller, \"drop\", funcs.drop);\n }\n}\n\nfunction wrappingChanged(cm) {\n if (cm.options.lineWrapping) {\n addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n cm.display.sizer.style.minWidth = \"\";\n cm.display.sizerWidth = null;\n } else {\n rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n findMaxLine(cm);\n }\n estimateLineHeights(cm);\n regChange(cm);\n clearCaches(cm);\n setTimeout(function () { return updateScrollbars(cm); }, 100);\n}\n\n// A CodeMirror instance represents an editor. This is the object\n// that user code is usually dealing with.\n\nfunction CodeMirror$1(place, options) {\n var this$1 = this;\n\n if (!(this instanceof CodeMirror$1)) { return new CodeMirror$1(place, options) }\n\n this.options = options = options ? copyObj(options) : {};\n // Determine effective options based on given values and defaults.\n copyObj(defaults, options, false);\n setGuttersForLineNumbers(options);\n\n var doc = options.value;\n if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n else if (options.mode) { doc.modeOption = options.mode; }\n this.doc = doc;\n\n var input = new CodeMirror$1.inputStyles[options.inputStyle](this);\n var display = this.display = new Display(place, doc, input);\n display.wrapper.CodeMirror = this;\n updateGutters(this);\n themeChanged(this);\n if (options.lineWrapping)\n { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n initScrollbars(this);\n\n this.state = {\n keyMaps: [], // stores maps added by addKeyMap\n overlays: [], // highlighting overlays, as added by addOverlay\n modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info\n overwrite: false,\n delayingBlurEvent: false,\n focused: false,\n suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll\n selectingText: false,\n draggingText: false,\n highlight: new Delayed(), // stores highlight worker timeout\n keySeq: null, // Unfinished key sequence\n specialChars: null\n };\n\n if (options.autofocus && !mobile) { display.input.focus(); }\n\n // Override magic textarea content restore that IE sometimes does\n // on our hidden textarea on reload\n if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n registerEventHandlers(this);\n ensureGlobalHandlers();\n\n startOperation(this);\n this.curOp.forceUpdate = true;\n attachDoc(this, doc);\n\n if ((options.autofocus && !mobile) || this.hasFocus())\n { setTimeout(bind(onFocus, this), 20); }\n else\n { onBlur(this); }\n\n for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n { optionHandlers[opt](this$1, options[opt], Init); } }\n maybeUpdateLineNumberWidth(this);\n if (options.finishInit) { options.finishInit(this); }\n for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1); }\n endOperation(this);\n // Suppress optimizelegibility in Webkit, since it breaks text\n // measuring on line wrapping boundaries.\n if (webkit && options.lineWrapping &&\n getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n { display.lineDiv.style.textRendering = \"auto\"; }\n}\n\n// The default configuration options.\nCodeMirror$1.defaults = defaults;\n// Functions to run when options are changed.\nCodeMirror$1.optionHandlers = optionHandlers;\n\n// Attach the necessary event handlers when initializing the editor\nfunction registerEventHandlers(cm) {\n var d = cm.display;\n on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n // Older IE's will not fire a second mousedown for a double click\n if (ie && ie_version < 11)\n { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n if (signalDOMEvent(cm, e)) { return }\n var pos = posFromMouse(cm, e);\n if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n e_preventDefault(e);\n var word = cm.findWordAt(pos);\n extendSelection(cm.doc, word.anchor, word.head);\n })); }\n else\n { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n // Some browsers fire contextmenu *after* opening the menu, at\n // which point we can't mess with it anymore. Context menu is\n // handled in onMouseDown for these browsers.\n if (!captureRightClick) { on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); }); }\n\n // Used to suppress mouse event handling when a touch happens\n var touchFinished, prevTouch = {end: 0};\n function finishTouch() {\n if (d.activeTouch) {\n touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n prevTouch = d.activeTouch;\n prevTouch.end = +new Date;\n }\n }\n function isMouseLikeTouchEvent(e) {\n if (e.touches.length != 1) { return false }\n var touch = e.touches[0];\n return touch.radiusX <= 1 && touch.radiusY <= 1\n }\n function farAway(touch, other) {\n if (other.left == null) { return true }\n var dx = other.left - touch.left, dy = other.top - touch.top;\n return dx * dx + dy * dy > 20 * 20\n }\n on(d.scroller, \"touchstart\", function (e) {\n if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n d.input.ensurePolled();\n clearTimeout(touchFinished);\n var now = +new Date;\n d.activeTouch = {start: now, moved: false,\n prev: now - prevTouch.end <= 300 ? prevTouch : null};\n if (e.touches.length == 1) {\n d.activeTouch.left = e.touches[0].pageX;\n d.activeTouch.top = e.touches[0].pageY;\n }\n }\n });\n on(d.scroller, \"touchmove\", function () {\n if (d.activeTouch) { d.activeTouch.moved = true; }\n });\n on(d.scroller, \"touchend\", function (e) {\n var touch = d.activeTouch;\n if (touch && !eventInWidget(d, e) && touch.left != null &&\n !touch.moved && new Date - touch.start < 300) {\n var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n { range = new Range(pos, pos); }\n else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n { range = cm.findWordAt(pos); }\n else // Triple tap\n { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n cm.setSelection(range.anchor, range.head);\n cm.focus();\n e_preventDefault(e);\n }\n finishTouch();\n });\n on(d.scroller, \"touchcancel\", finishTouch);\n\n // Sync scrolling between fake scrollbars and real scrollable\n // area, ensure viewport is updated when scrolling.\n on(d.scroller, \"scroll\", function () {\n if (d.scroller.clientHeight) {\n updateScrollTop(cm, d.scroller.scrollTop);\n setScrollLeft(cm, d.scroller.scrollLeft, true);\n signal(cm, \"scroll\", cm);\n }\n });\n\n // Listen to wheel events in order to try and update the viewport on time.\n on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n // Prevent wrapper from ever scrolling\n on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n d.dragFunctions = {\n enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n start: function (e) { return onDragStart(cm, e); },\n drop: operation(cm, onDrop),\n leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n };\n\n var inp = d.input.getField();\n on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n on(inp, \"keydown\", operation(cm, onKeyDown));\n on(inp, \"keypress\", operation(cm, onKeyPress));\n on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n}\n\nvar initHooks = [];\nCodeMirror$1.defineInitHook = function (f) { return initHooks.push(f); };\n\n// Indent the given line. The how parameter can be \"smart\",\n// \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n// (typically set to true for forced single-line indents), empty\n// lines are not indented, and places where the mode returns Pass\n// are left alone.\nfunction indentLine(cm, n, how, aggressive) {\n var doc = cm.doc, state;\n if (how == null) { how = \"add\"; }\n if (how == \"smart\") {\n // Fall back to \"prev\" when the mode doesn't have an indentation\n // method.\n if (!doc.mode.indent) { how = \"prev\"; }\n else { state = getContextBefore(cm, n).state; }\n }\n\n var tabSize = cm.options.tabSize;\n var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n if (line.stateAfter) { line.stateAfter = null; }\n var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n if (!aggressive && !/\\S/.test(line.text)) {\n indentation = 0;\n how = \"not\";\n } else if (how == \"smart\") {\n indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n if (indentation == Pass || indentation > 150) {\n if (!aggressive) { return }\n how = \"prev\";\n }\n }\n if (how == \"prev\") {\n if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n else { indentation = 0; }\n } else if (how == \"add\") {\n indentation = curSpace + cm.options.indentUnit;\n } else if (how == \"subtract\") {\n indentation = curSpace - cm.options.indentUnit;\n } else if (typeof how == \"number\") {\n indentation = curSpace + how;\n }\n indentation = Math.max(0, indentation);\n\n var indentString = \"\", pos = 0;\n if (cm.options.indentWithTabs)\n { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n if (indentString != curSpaceString) {\n replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n line.stateAfter = null;\n return true\n } else {\n // Ensure that, if the cursor was in the whitespace at the start\n // of the line, it is moved to the end of that space.\n for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n var range = doc.sel.ranges[i$1];\n if (range.head.line == n && range.head.ch < curSpaceString.length) {\n var pos$1 = Pos(n, curSpaceString.length);\n replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n break\n }\n }\n }\n}\n\n// This will be set to a {lineWise: bool, text: [string]} object, so\n// that, when pasting, we know what kind of selections the copied\n// text was made out of.\nvar lastCopied = null;\n\nfunction setLastCopied(newLastCopied) {\n lastCopied = newLastCopied;\n}\n\nfunction applyTextInput(cm, inserted, deleted, sel, origin) {\n var doc = cm.doc;\n cm.display.shift = false;\n if (!sel) { sel = doc.sel; }\n\n var paste = cm.state.pasteIncoming || origin == \"paste\";\n var textLines = splitLinesAuto(inserted), multiPaste = null;\n // When pasting N lines into N selections, insert one line per selection\n if (paste && sel.ranges.length > 1) {\n if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n if (sel.ranges.length % lastCopied.text.length == 0) {\n multiPaste = [];\n for (var i = 0; i < lastCopied.text.length; i++)\n { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n }\n } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n multiPaste = map(textLines, function (l) { return [l]; });\n }\n }\n\n var updateInput;\n // Normal behavior is to insert the new text into every selection\n for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n var range$$1 = sel.ranges[i$1];\n var from = range$$1.from(), to = range$$1.to();\n if (range$$1.empty()) {\n if (deleted && deleted > 0) // Handle deletion\n { from = Pos(from.line, from.ch - deleted); }\n else if (cm.state.overwrite && !paste) // Handle overwrite\n { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n else if (lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == inserted)\n { from = to = Pos(from.line, 0); }\n }\n updateInput = cm.curOp.updateInput;\n var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n origin: origin || (paste ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\")};\n makeChange(cm.doc, changeEvent);\n signalLater(cm, \"inputRead\", cm, changeEvent);\n }\n if (inserted && !paste)\n { triggerElectric(cm, inserted); }\n\n ensureCursorVisible(cm);\n cm.curOp.updateInput = updateInput;\n cm.curOp.typing = true;\n cm.state.pasteIncoming = cm.state.cutIncoming = false;\n}\n\nfunction handlePaste(e, cm) {\n var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n if (pasted) {\n e.preventDefault();\n if (!cm.isReadOnly() && !cm.options.disableInput)\n { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n return true\n }\n}\n\nfunction triggerElectric(cm, inserted) {\n // When an 'electric' character is inserted, immediately trigger a reindent\n if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n var sel = cm.doc.sel;\n\n for (var i = sel.ranges.length - 1; i >= 0; i--) {\n var range$$1 = sel.ranges[i];\n if (range$$1.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range$$1.head.line)) { continue }\n var mode = cm.getModeAt(range$$1.head);\n var indented = false;\n if (mode.electricChars) {\n for (var j = 0; j < mode.electricChars.length; j++)\n { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n indented = indentLine(cm, range$$1.head.line, \"smart\");\n break\n } }\n } else if (mode.electricInput) {\n if (mode.electricInput.test(getLine(cm.doc, range$$1.head.line).text.slice(0, range$$1.head.ch)))\n { indented = indentLine(cm, range$$1.head.line, \"smart\"); }\n }\n if (indented) { signalLater(cm, \"electricInput\", cm, range$$1.head.line); }\n }\n}\n\nfunction copyableRanges(cm) {\n var text = [], ranges = [];\n for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n var line = cm.doc.sel.ranges[i].head.line;\n var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n ranges.push(lineRange);\n text.push(cm.getRange(lineRange.anchor, lineRange.head));\n }\n return {text: text, ranges: ranges}\n}\n\nfunction disableBrowserMagic(field, spellcheck) {\n field.setAttribute(\"autocorrect\", \"off\");\n field.setAttribute(\"autocapitalize\", \"off\");\n field.setAttribute(\"spellcheck\", !!spellcheck);\n}\n\nfunction hiddenTextarea() {\n var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\");\n var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n // The textarea is kept positioned near the cursor to prevent the\n // fact that it'll be scrolled into view on input from scrolling\n // our fake cursor out of view. On webkit, when wrap=off, paste is\n // very slow. So make the area wide instead.\n if (webkit) { te.style.width = \"1000px\"; }\n else { te.setAttribute(\"wrap\", \"off\"); }\n // If border: 0; -- iOS fails to open keyboard (issue #1287)\n if (ios) { te.style.border = \"1px solid black\"; }\n disableBrowserMagic(te);\n return div\n}\n\n// The publicly visible API. Note that methodOp(f) means\n// 'wrap f in an operation, performed on its `this` parameter'.\n\n// This is not the complete set of editor methods. Most of the\n// methods defined on the Doc type are also injected into\n// CodeMirror.prototype, for backwards compatibility and\n// convenience.\n\nvar addEditorMethods = function(CodeMirror) {\n var optionHandlers = CodeMirror.optionHandlers;\n\n var helpers = CodeMirror.helpers = {};\n\n CodeMirror.prototype = {\n constructor: CodeMirror,\n focus: function(){window.focus(); this.display.input.focus();},\n\n setOption: function(option, value) {\n var options = this.options, old = options[option];\n if (options[option] == value && option != \"mode\") { return }\n options[option] = value;\n if (optionHandlers.hasOwnProperty(option))\n { operation(this, optionHandlers[option])(this, value, old); }\n signal(this, \"optionChange\", this, option);\n },\n\n getOption: function(option) {return this.options[option]},\n getDoc: function() {return this.doc},\n\n addKeyMap: function(map$$1, bottom) {\n this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map$$1));\n },\n removeKeyMap: function(map$$1) {\n var maps = this.state.keyMaps;\n for (var i = 0; i < maps.length; ++i)\n { if (maps[i] == map$$1 || maps[i].name == map$$1) {\n maps.splice(i, 1);\n return true\n } }\n },\n\n addOverlay: methodOp(function(spec, options) {\n var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n insertSorted(this.state.overlays,\n {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n priority: (options && options.priority) || 0},\n function (overlay) { return overlay.priority; });\n this.state.modeGen++;\n regChange(this);\n }),\n removeOverlay: methodOp(function(spec) {\n var this$1 = this;\n\n var overlays = this.state.overlays;\n for (var i = 0; i < overlays.length; ++i) {\n var cur = overlays[i].modeSpec;\n if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n overlays.splice(i, 1);\n this$1.state.modeGen++;\n regChange(this$1);\n return\n }\n }\n }),\n\n indentLine: methodOp(function(n, dir, aggressive) {\n if (typeof dir != \"string\" && typeof dir != \"number\") {\n if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n else { dir = dir ? \"add\" : \"subtract\"; }\n }\n if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n }),\n indentSelection: methodOp(function(how) {\n var this$1 = this;\n\n var ranges = this.doc.sel.ranges, end = -1;\n for (var i = 0; i < ranges.length; i++) {\n var range$$1 = ranges[i];\n if (!range$$1.empty()) {\n var from = range$$1.from(), to = range$$1.to();\n var start = Math.max(end, from.line);\n end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n for (var j = start; j < end; ++j)\n { indentLine(this$1, j, how); }\n var newRanges = this$1.doc.sel.ranges;\n if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n } else if (range$$1.head.line > end) {\n indentLine(this$1, range$$1.head.line, how, true);\n end = range$$1.head.line;\n if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1); }\n }\n }\n }),\n\n // Fetch the parser token for a given character. Useful for hacks\n // that want to inspect the mode state (say, for completion).\n getTokenAt: function(pos, precise) {\n return takeToken(this, pos, precise)\n },\n\n getLineTokens: function(line, precise) {\n return takeToken(this, Pos(line), precise, true)\n },\n\n getTokenTypeAt: function(pos) {\n pos = clipPos(this.doc, pos);\n var styles = getLineStyles(this, getLine(this.doc, pos.line));\n var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n var type;\n if (ch == 0) { type = styles[2]; }\n else { for (;;) {\n var mid = (before + after) >> 1;\n if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n else { type = styles[mid * 2 + 2]; break }\n } }\n var cut = type ? type.indexOf(\"overlay \") : -1;\n return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n },\n\n getModeAt: function(pos) {\n var mode = this.doc.mode;\n if (!mode.innerMode) { return mode }\n return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n },\n\n getHelper: function(pos, type) {\n return this.getHelpers(pos, type)[0]\n },\n\n getHelpers: function(pos, type) {\n var this$1 = this;\n\n var found = [];\n if (!helpers.hasOwnProperty(type)) { return found }\n var help = helpers[type], mode = this.getModeAt(pos);\n if (typeof mode[type] == \"string\") {\n if (help[mode[type]]) { found.push(help[mode[type]]); }\n } else if (mode[type]) {\n for (var i = 0; i < mode[type].length; i++) {\n var val = help[mode[type][i]];\n if (val) { found.push(val); }\n }\n } else if (mode.helperType && help[mode.helperType]) {\n found.push(help[mode.helperType]);\n } else if (help[mode.name]) {\n found.push(help[mode.name]);\n }\n for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n var cur = help._global[i$1];\n if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1)\n { found.push(cur.val); }\n }\n return found\n },\n\n getStateAfter: function(line, precise) {\n var doc = this.doc;\n line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n return getContextBefore(this, line + 1, precise).state\n },\n\n cursorCoords: function(start, mode) {\n var pos, range$$1 = this.doc.sel.primary();\n if (start == null) { pos = range$$1.head; }\n else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n else { pos = start ? range$$1.from() : range$$1.to(); }\n return cursorCoords(this, pos, mode || \"page\")\n },\n\n charCoords: function(pos, mode) {\n return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n },\n\n coordsChar: function(coords, mode) {\n coords = fromCoordSystem(this, coords, mode || \"page\");\n return coordsChar(this, coords.left, coords.top)\n },\n\n lineAtHeight: function(height, mode) {\n height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n return lineAtHeight(this.doc, height + this.display.viewOffset)\n },\n heightAtLine: function(line, mode, includeWidgets) {\n var end = false, lineObj;\n if (typeof line == \"number\") {\n var last = this.doc.first + this.doc.size - 1;\n if (line < this.doc.first) { line = this.doc.first; }\n else if (line > last) { line = last; end = true; }\n lineObj = getLine(this.doc, line);\n } else {\n lineObj = line;\n }\n return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n (end ? this.doc.height - heightAtLine(lineObj) : 0)\n },\n\n defaultTextHeight: function() { return textHeight(this.display) },\n defaultCharWidth: function() { return charWidth(this.display) },\n\n getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n addWidget: function(pos, node, scroll, vert, horiz) {\n var display = this.display;\n pos = cursorCoords(this, clipPos(this.doc, pos));\n var top = pos.bottom, left = pos.left;\n node.style.position = \"absolute\";\n node.setAttribute(\"cm-ignore-events\", \"true\");\n this.display.input.setUneditable(node);\n display.sizer.appendChild(node);\n if (vert == \"over\") {\n top = pos.top;\n } else if (vert == \"above\" || vert == \"near\") {\n var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n // Default to positioning above (if specified and possible); otherwise default to positioning below\n if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n { top = pos.top - node.offsetHeight; }\n else if (pos.bottom + node.offsetHeight <= vspace)\n { top = pos.bottom; }\n if (left + node.offsetWidth > hspace)\n { left = hspace - node.offsetWidth; }\n }\n node.style.top = top + \"px\";\n node.style.left = node.style.right = \"\";\n if (horiz == \"right\") {\n left = display.sizer.clientWidth - node.offsetWidth;\n node.style.right = \"0px\";\n } else {\n if (horiz == \"left\") { left = 0; }\n else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n node.style.left = left + \"px\";\n }\n if (scroll)\n { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n },\n\n triggerOnKeyDown: methodOp(onKeyDown),\n triggerOnKeyPress: methodOp(onKeyPress),\n triggerOnKeyUp: onKeyUp,\n triggerOnMouseDown: methodOp(onMouseDown),\n\n execCommand: function(cmd) {\n if (commands.hasOwnProperty(cmd))\n { return commands[cmd].call(null, this) }\n },\n\n triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n findPosH: function(from, amount, unit, visually) {\n var this$1 = this;\n\n var dir = 1;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n cur = findPosH(this$1.doc, cur, dir, unit, visually);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveH: methodOp(function(dir, unit) {\n var this$1 = this;\n\n this.extendSelectionsBy(function (range$$1) {\n if (this$1.display.shift || this$1.doc.extend || range$$1.empty())\n { return findPosH(this$1.doc, range$$1.head, dir, unit, this$1.options.rtlMoveVisually) }\n else\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n }, sel_move);\n }),\n\n deleteH: methodOp(function(dir, unit) {\n var sel = this.doc.sel, doc = this.doc;\n if (sel.somethingSelected())\n { doc.replaceSelection(\"\", null, \"+delete\"); }\n else\n { deleteNearSelection(this, function (range$$1) {\n var other = findPosH(doc, range$$1.head, dir, unit, false);\n return dir < 0 ? {from: other, to: range$$1.head} : {from: range$$1.head, to: other}\n }); }\n }),\n\n findPosV: function(from, amount, unit, goalColumn) {\n var this$1 = this;\n\n var dir = 1, x = goalColumn;\n if (amount < 0) { dir = -1; amount = -amount; }\n var cur = clipPos(this.doc, from);\n for (var i = 0; i < amount; ++i) {\n var coords = cursorCoords(this$1, cur, \"div\");\n if (x == null) { x = coords.left; }\n else { coords.left = x; }\n cur = findPosV(this$1, coords, dir, unit);\n if (cur.hitSide) { break }\n }\n return cur\n },\n\n moveV: methodOp(function(dir, unit) {\n var this$1 = this;\n\n var doc = this.doc, goals = [];\n var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n doc.extendSelectionsBy(function (range$$1) {\n if (collapse)\n { return dir < 0 ? range$$1.from() : range$$1.to() }\n var headPos = cursorCoords(this$1, range$$1.head, \"div\");\n if (range$$1.goalColumn != null) { headPos.left = range$$1.goalColumn; }\n goals.push(headPos.left);\n var pos = findPosV(this$1, headPos, dir, unit);\n if (unit == \"page\" && range$$1 == doc.sel.primary())\n { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n return pos\n }, sel_move);\n if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n { doc.sel.ranges[i].goalColumn = goals[i]; } }\n }),\n\n // Find the word at the given position (as returned by coordsChar).\n findWordAt: function(pos) {\n var doc = this.doc, line = getLine(doc, pos.line).text;\n var start = pos.ch, end = pos.ch;\n if (line) {\n var helper = this.getHelper(pos, \"wordChars\");\n if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n var startChar = line.charAt(start);\n var check = isWordChar(startChar, helper)\n ? function (ch) { return isWordChar(ch, helper); }\n : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n while (start > 0 && check(line.charAt(start - 1))) { --start; }\n while (end < line.length && check(line.charAt(end))) { ++end; }\n }\n return new Range(Pos(pos.line, start), Pos(pos.line, end))\n },\n\n toggleOverwrite: function(value) {\n if (value != null && value == this.state.overwrite) { return }\n if (this.state.overwrite = !this.state.overwrite)\n { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n else\n { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n signal(this, \"overwriteToggle\", this, this.state.overwrite);\n },\n hasFocus: function() { return this.display.input.getField() == activeElt() },\n isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n getScrollInfo: function() {\n var scroller = this.display.scroller;\n return {left: scroller.scrollLeft, top: scroller.scrollTop,\n height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n },\n\n scrollIntoView: methodOp(function(range$$1, margin) {\n if (range$$1 == null) {\n range$$1 = {from: this.doc.sel.primary().head, to: null};\n if (margin == null) { margin = this.options.cursorScrollMargin; }\n } else if (typeof range$$1 == \"number\") {\n range$$1 = {from: Pos(range$$1, 0), to: null};\n } else if (range$$1.from == null) {\n range$$1 = {from: range$$1, to: null};\n }\n if (!range$$1.to) { range$$1.to = range$$1.from; }\n range$$1.margin = margin || 0;\n\n if (range$$1.from.line != null) {\n scrollToRange(this, range$$1);\n } else {\n scrollToCoordsRange(this, range$$1.from, range$$1.to, range$$1.margin);\n }\n }),\n\n setSize: methodOp(function(width, height) {\n var this$1 = this;\n\n var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n if (width != null) { this.display.wrapper.style.width = interpret(width); }\n if (height != null) { this.display.wrapper.style.height = interpret(height); }\n if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n var lineNo$$1 = this.display.viewFrom;\n this.doc.iter(lineNo$$1, this.display.viewTo, function (line) {\n if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo$$1, \"widget\"); break } } }\n ++lineNo$$1;\n });\n this.curOp.forceUpdate = true;\n signal(this, \"refresh\", this);\n }),\n\n operation: function(f){return runInOp(this, f)},\n startOperation: function(){return startOperation(this)},\n endOperation: function(){return endOperation(this)},\n\n refresh: methodOp(function() {\n var oldHeight = this.display.cachedTextHeight;\n regChange(this);\n this.curOp.forceUpdate = true;\n clearCaches(this);\n scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n updateGutterSpace(this);\n if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n { estimateLineHeights(this); }\n signal(this, \"refresh\", this);\n }),\n\n swapDoc: methodOp(function(doc) {\n var old = this.doc;\n old.cm = null;\n attachDoc(this, doc);\n clearCaches(this);\n this.display.input.reset();\n scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n this.curOp.forceScroll = true;\n signalLater(this, \"swapDoc\", this, old);\n return old\n }),\n\n getInputField: function(){return this.display.input.getField()},\n getWrapperElement: function(){return this.display.wrapper},\n getScrollerElement: function(){return this.display.scroller},\n getGutterElement: function(){return this.display.gutters}\n };\n eventMixin(CodeMirror);\n\n CodeMirror.registerHelper = function(type, name, value) {\n if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n helpers[type][name] = value;\n };\n CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n CodeMirror.registerHelper(type, name, value);\n helpers[type]._global.push({pred: predicate, val: value});\n };\n};\n\n// Used for horizontal relative motion. Dir is -1 or 1 (left or\n// right), unit can be \"char\", \"column\" (like char, but doesn't\n// cross line boundaries), \"word\" (across next word), or \"group\" (to\n// the start of next group of word or non-word-non-whitespace\n// chars). The visually param controls whether, in right-to-left\n// text, direction 1 means to move towards the next index in the\n// string, or towards the character to the right of the current\n// position. The resulting position will have a hitSide=true\n// property if it reached the end of the document.\nfunction findPosH(doc, pos, dir, unit, visually) {\n var oldPos = pos;\n var origDir = dir;\n var lineObj = getLine(doc, pos.line);\n function findNextLine() {\n var l = pos.line + dir;\n if (l < doc.first || l >= doc.first + doc.size) { return false }\n pos = new Pos(l, pos.ch, pos.sticky);\n return lineObj = getLine(doc, l)\n }\n function moveOnce(boundToLine) {\n var next;\n if (visually) {\n next = moveVisually(doc.cm, lineObj, pos, dir);\n } else {\n next = moveLogically(lineObj, pos, dir);\n }\n if (next == null) {\n if (!boundToLine && findNextLine())\n { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir); }\n else\n { return false }\n } else {\n pos = next;\n }\n return true\n }\n\n if (unit == \"char\") {\n moveOnce();\n } else if (unit == \"column\") {\n moveOnce(true);\n } else if (unit == \"word\" || unit == \"group\") {\n var sawType = null, group = unit == \"group\";\n var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n for (var first = true;; first = false) {\n if (dir < 0 && !moveOnce(!first)) { break }\n var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n var type = isWordChar(cur, helper) ? \"w\"\n : group && cur == \"\\n\" ? \"n\"\n : !group || /\\s/.test(cur) ? null\n : \"p\";\n if (group && !first && !type) { type = \"s\"; }\n if (sawType && sawType != type) {\n if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n break\n }\n\n if (type) { sawType = type; }\n if (dir > 0 && !moveOnce(!first)) { break }\n }\n }\n var result = skipAtomic(doc, pos, oldPos, origDir, true);\n if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n return result\n}\n\n// For relative vertical movement. Dir may be -1 or 1. Unit can be\n// \"page\" or \"line\". The resulting position will have a hitSide=true\n// property if it reached the end of the document.\nfunction findPosV(cm, pos, dir, unit) {\n var doc = cm.doc, x = pos.left, y;\n if (unit == \"page\") {\n var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n } else if (unit == \"line\") {\n y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n }\n var target;\n for (;;) {\n target = coordsChar(cm, x, y);\n if (!target.outside) { break }\n if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n y += dir * 5;\n }\n return target\n}\n\n// CONTENTEDITABLE INPUT STYLE\n\nvar ContentEditableInput = function(cm) {\n this.cm = cm;\n this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n this.polling = new Delayed();\n this.composing = null;\n this.gracePeriod = false;\n this.readDOMTimeout = null;\n};\n\nContentEditableInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = input.cm;\n var div = input.div = display.lineDiv;\n disableBrowserMagic(div, cm.options.spellcheck);\n\n on(div, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n });\n\n on(div, \"compositionstart\", function (e) {\n this$1.composing = {data: e.data, done: false};\n });\n on(div, \"compositionupdate\", function (e) {\n if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n });\n on(div, \"compositionend\", function (e) {\n if (this$1.composing) {\n if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n this$1.composing.done = true;\n }\n });\n\n on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n on(div, \"input\", function () {\n if (!this$1.composing) { this$1.readFromDOMSoon(); }\n });\n\n function onCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.operation(function () {\n cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n cm.replaceSelection(\"\", null, \"cut\");\n });\n }\n }\n if (e.clipboardData) {\n e.clipboardData.clearData();\n var content = lastCopied.text.join(\"\\n\");\n // iOS exposes the clipboard API, but seems to discard content inserted into it\n e.clipboardData.setData(\"Text\", content);\n if (e.clipboardData.getData(\"Text\") == content) {\n e.preventDefault();\n return\n }\n }\n // Old-fashioned briefly-focus-a-textarea hack\n var kludge = hiddenTextarea(), te = kludge.firstChild;\n cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n te.value = lastCopied.text.join(\"\\n\");\n var hadFocus = document.activeElement;\n selectInput(te);\n setTimeout(function () {\n cm.display.lineSpace.removeChild(kludge);\n hadFocus.focus();\n if (hadFocus == div) { input.showPrimarySelection(); }\n }, 50);\n }\n on(div, \"copy\", onCopyCut);\n on(div, \"cut\", onCopyCut);\n};\n\nContentEditableInput.prototype.prepareSelection = function () {\n var result = prepareSelection(this.cm, false);\n result.focus = this.cm.state.focused;\n return result\n};\n\nContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n if (!info || !this.cm.display.view.length) { return }\n if (info.focus || takeFocus) { this.showPrimarySelection(); }\n this.showMultipleSelections(info);\n};\n\nContentEditableInput.prototype.getSelection = function () {\n return this.cm.display.wrapper.ownerDocument.getSelection()\n};\n\nContentEditableInput.prototype.showPrimarySelection = function () {\n var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n var from = prim.from(), to = prim.to();\n\n if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n sel.removeAllRanges();\n return\n }\n\n var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n cmp(minPos(curAnchor, curFocus), from) == 0 &&\n cmp(maxPos(curAnchor, curFocus), to) == 0)\n { return }\n\n var view = cm.display.view;\n var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n {node: view[0].measure.map[2], offset: 0};\n var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n if (!end) {\n var measure = view[view.length - 1].measure;\n var map$$1 = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n end = {node: map$$1[map$$1.length - 1], offset: map$$1[map$$1.length - 2] - map$$1[map$$1.length - 3]};\n }\n\n if (!start || !end) {\n sel.removeAllRanges();\n return\n }\n\n var old = sel.rangeCount && sel.getRangeAt(0), rng;\n try { rng = range(start.node, start.offset, end.offset, end.node); }\n catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n if (rng) {\n if (!gecko && cm.state.focused) {\n sel.collapse(start.node, start.offset);\n if (!rng.collapsed) {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n } else {\n sel.removeAllRanges();\n sel.addRange(rng);\n }\n if (old && sel.anchorNode == null) { sel.addRange(old); }\n else if (gecko) { this.startGracePeriod(); }\n }\n this.rememberSelection();\n};\n\nContentEditableInput.prototype.startGracePeriod = function () {\n var this$1 = this;\n\n clearTimeout(this.gracePeriod);\n this.gracePeriod = setTimeout(function () {\n this$1.gracePeriod = false;\n if (this$1.selectionChanged())\n { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n }, 20);\n};\n\nContentEditableInput.prototype.showMultipleSelections = function (info) {\n removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n};\n\nContentEditableInput.prototype.rememberSelection = function () {\n var sel = this.getSelection();\n this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n};\n\nContentEditableInput.prototype.selectionInEditor = function () {\n var sel = this.getSelection();\n if (!sel.rangeCount) { return false }\n var node = sel.getRangeAt(0).commonAncestorContainer;\n return contains(this.div, node)\n};\n\nContentEditableInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\") {\n if (!this.selectionInEditor())\n { this.showSelection(this.prepareSelection(), true); }\n this.div.focus();\n }\n};\nContentEditableInput.prototype.blur = function () { this.div.blur(); };\nContentEditableInput.prototype.getField = function () { return this.div };\n\nContentEditableInput.prototype.supportsTouch = function () { return true };\n\nContentEditableInput.prototype.receivedFocus = function () {\n var input = this;\n if (this.selectionInEditor())\n { this.pollSelection(); }\n else\n { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n function poll() {\n if (input.cm.state.focused) {\n input.pollSelection();\n input.polling.set(input.cm.options.pollInterval, poll);\n }\n }\n this.polling.set(this.cm.options.pollInterval, poll);\n};\n\nContentEditableInput.prototype.selectionChanged = function () {\n var sel = this.getSelection();\n return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n};\n\nContentEditableInput.prototype.pollSelection = function () {\n if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n var sel = this.getSelection(), cm = this.cm;\n // On Android Chrome (version 56, at least), backspacing into an\n // uneditable block element will put the cursor in that element,\n // and then, because it's not editable, hide the virtual keyboard.\n // Because Android doesn't allow us to actually detect backspace\n // presses in a sane way, this code checks for when that happens\n // and simulates a backspace press in this case.\n if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) {\n this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n this.blur();\n this.focus();\n return\n }\n if (this.composing) { return }\n this.rememberSelection();\n var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n if (anchor && head) { runInOp(cm, function () {\n setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n }); }\n};\n\nContentEditableInput.prototype.pollContent = function () {\n if (this.readDOMTimeout != null) {\n clearTimeout(this.readDOMTimeout);\n this.readDOMTimeout = null;\n }\n\n var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n var from = sel.from(), to = sel.to();\n if (from.ch == 0 && from.line > cm.firstLine())\n { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n { to = Pos(to.line + 1, 0); }\n if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n var fromIndex, fromLine, fromNode;\n if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n fromLine = lineNo(display.view[0].line);\n fromNode = display.view[0].node;\n } else {\n fromLine = lineNo(display.view[fromIndex].line);\n fromNode = display.view[fromIndex - 1].node.nextSibling;\n }\n var toIndex = findViewIndex(cm, to.line);\n var toLine, toNode;\n if (toIndex == display.view.length - 1) {\n toLine = display.viewTo - 1;\n toNode = display.lineDiv.lastChild;\n } else {\n toLine = lineNo(display.view[toIndex + 1].line) - 1;\n toNode = display.view[toIndex + 1].node.previousSibling;\n }\n\n if (!fromNode) { return false }\n var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n while (newText.length > 1 && oldText.length > 1) {\n if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n else { break }\n }\n\n var cutFront = 0, cutEnd = 0;\n var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n { ++cutFront; }\n var newBot = lst(newText), oldBot = lst(oldText);\n var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n oldBot.length - (oldText.length == 1 ? cutFront : 0));\n while (cutEnd < maxCutEnd &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n { ++cutEnd; }\n // Try to move start of change to start of selection if ambiguous\n if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n while (cutFront && cutFront > from.ch &&\n newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n cutFront--;\n cutEnd++;\n }\n }\n\n newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n var chFrom = Pos(fromLine, cutFront);\n var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n return true\n }\n};\n\nContentEditableInput.prototype.ensurePolled = function () {\n this.forceCompositionEnd();\n};\nContentEditableInput.prototype.reset = function () {\n this.forceCompositionEnd();\n};\nContentEditableInput.prototype.forceCompositionEnd = function () {\n if (!this.composing) { return }\n clearTimeout(this.readDOMTimeout);\n this.composing = null;\n this.updateFromDOM();\n this.div.blur();\n this.div.focus();\n};\nContentEditableInput.prototype.readFromDOMSoon = function () {\n var this$1 = this;\n\n if (this.readDOMTimeout != null) { return }\n this.readDOMTimeout = setTimeout(function () {\n this$1.readDOMTimeout = null;\n if (this$1.composing) {\n if (this$1.composing.done) { this$1.composing = null; }\n else { return }\n }\n this$1.updateFromDOM();\n }, 80);\n};\n\nContentEditableInput.prototype.updateFromDOM = function () {\n var this$1 = this;\n\n if (this.cm.isReadOnly() || !this.pollContent())\n { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n};\n\nContentEditableInput.prototype.setUneditable = function (node) {\n node.contentEditable = \"false\";\n};\n\nContentEditableInput.prototype.onKeyPress = function (e) {\n if (e.charCode == 0 || this.composing) { return }\n e.preventDefault();\n if (!this.cm.isReadOnly())\n { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n};\n\nContentEditableInput.prototype.readOnlyChanged = function (val) {\n this.div.contentEditable = String(val != \"nocursor\");\n};\n\nContentEditableInput.prototype.onContextMenu = function () {};\nContentEditableInput.prototype.resetPosition = function () {};\n\nContentEditableInput.prototype.needsContentAttribute = true;\n\nfunction posToDOM(cm, pos) {\n var view = findViewForLine(cm, pos.line);\n if (!view || view.hidden) { return null }\n var line = getLine(cm.doc, pos.line);\n var info = mapFromLineView(view, line, pos.line);\n\n var order = getOrder(line, cm.doc.direction), side = \"left\";\n if (order) {\n var partPos = getBidiPartAt(order, pos.ch);\n side = partPos % 2 ? \"right\" : \"left\";\n }\n var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n result.offset = result.collapse == \"right\" ? result.end : result.start;\n return result\n}\n\nfunction isInGutter(node) {\n for (var scan = node; scan; scan = scan.parentNode)\n { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n return false\n}\n\nfunction badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\nfunction domTextBetween(cm, from, to, fromLine, toLine) {\n var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n function close() {\n if (closing) {\n text += lineSep;\n if (extraLinebreak) { text += lineSep; }\n closing = extraLinebreak = false;\n }\n }\n function addText(str) {\n if (str) {\n close();\n text += str;\n }\n }\n function walk(node) {\n if (node.nodeType == 1) {\n var cmText = node.getAttribute(\"cm-text\");\n if (cmText) {\n addText(cmText);\n return\n }\n var markerID = node.getAttribute(\"cm-marker\"), range$$1;\n if (markerID) {\n var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n if (found.length && (range$$1 = found[0].find(0)))\n { addText(getBetween(cm.doc, range$$1.from, range$$1.to).join(lineSep)); }\n return\n }\n if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n if (isBlock) { close(); }\n for (var i = 0; i < node.childNodes.length; i++)\n { walk(node.childNodes[i]); }\n\n if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n if (isBlock) { closing = true; }\n } else if (node.nodeType == 3) {\n addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n }\n }\n for (;;) {\n walk(from);\n if (from == to) { break }\n from = from.nextSibling;\n extraLinebreak = false;\n }\n return text\n}\n\nfunction domToPos(cm, node, offset) {\n var lineNode;\n if (node == cm.display.lineDiv) {\n lineNode = cm.display.lineDiv.childNodes[offset];\n if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n node = null; offset = 0;\n } else {\n for (lineNode = node;; lineNode = lineNode.parentNode) {\n if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n }\n }\n for (var i = 0; i < cm.display.view.length; i++) {\n var lineView = cm.display.view[i];\n if (lineView.node == lineNode)\n { return locateNodeInLineView(lineView, node, offset) }\n }\n}\n\nfunction locateNodeInLineView(lineView, node, offset) {\n var wrapper = lineView.text.firstChild, bad = false;\n if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n if (node == wrapper) {\n bad = true;\n node = wrapper.childNodes[offset];\n offset = 0;\n if (!node) {\n var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n return badPos(Pos(lineNo(line), line.text.length), bad)\n }\n }\n\n var textNode = node.nodeType == 3 ? node : null, topNode = node;\n if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n textNode = node.firstChild;\n if (offset) { offset = textNode.nodeValue.length; }\n }\n while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n var measure = lineView.measure, maps = measure.maps;\n\n function find(textNode, topNode, offset) {\n for (var i = -1; i < (maps ? maps.length : 0); i++) {\n var map$$1 = i < 0 ? measure.map : maps[i];\n for (var j = 0; j < map$$1.length; j += 3) {\n var curNode = map$$1[j + 2];\n if (curNode == textNode || curNode == topNode) {\n var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n var ch = map$$1[j] + offset;\n if (offset < 0 || curNode != textNode) { ch = map$$1[j + (offset ? 1 : 0)]; }\n return Pos(line, ch)\n }\n }\n }\n }\n var found = find(textNode, topNode, offset);\n if (found) { return badPos(found, bad) }\n\n // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n found = find(after, after.firstChild, 0);\n if (found)\n { return badPos(Pos(found.line, found.ch - dist), bad) }\n else\n { dist += after.textContent.length; }\n }\n for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n found = find(before, before.firstChild, -1);\n if (found)\n { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n else\n { dist$1 += before.textContent.length; }\n }\n}\n\n// TEXTAREA INPUT STYLE\n\nvar TextareaInput = function(cm) {\n this.cm = cm;\n // See input.poll and input.reset\n this.prevInput = \"\";\n\n // Flag that indicates whether we expect input to appear real soon\n // now (after some event like 'keypress' or 'input') and are\n // polling intensively.\n this.pollingFast = false;\n // Self-resetting timeout for the poller\n this.polling = new Delayed();\n // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n this.hasSelection = false;\n this.composing = null;\n};\n\nTextareaInput.prototype.init = function (display) {\n var this$1 = this;\n\n var input = this, cm = this.cm;\n this.createField(display);\n var te = this.textarea;\n\n display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n if (ios) { te.style.width = \"0px\"; }\n\n on(te, \"input\", function () {\n if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n input.poll();\n });\n\n on(te, \"paste\", function (e) {\n if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n cm.state.pasteIncoming = true;\n input.fastPoll();\n });\n\n function prepareCopyCut(e) {\n if (signalDOMEvent(cm, e)) { return }\n if (cm.somethingSelected()) {\n setLastCopied({lineWise: false, text: cm.getSelections()});\n } else if (!cm.options.lineWiseCopyCut) {\n return\n } else {\n var ranges = copyableRanges(cm);\n setLastCopied({lineWise: true, text: ranges.text});\n if (e.type == \"cut\") {\n cm.setSelections(ranges.ranges, null, sel_dontScroll);\n } else {\n input.prevInput = \"\";\n te.value = ranges.text.join(\"\\n\");\n selectInput(te);\n }\n }\n if (e.type == \"cut\") { cm.state.cutIncoming = true; }\n }\n on(te, \"cut\", prepareCopyCut);\n on(te, \"copy\", prepareCopyCut);\n\n on(display.scroller, \"paste\", function (e) {\n if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n cm.state.pasteIncoming = true;\n input.focus();\n });\n\n // Prevent normal selection in the editor (we handle our own)\n on(display.lineSpace, \"selectstart\", function (e) {\n if (!eventInWidget(display, e)) { e_preventDefault(e); }\n });\n\n on(te, \"compositionstart\", function () {\n var start = cm.getCursor(\"from\");\n if (input.composing) { input.composing.range.clear(); }\n input.composing = {\n start: start,\n range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n };\n });\n on(te, \"compositionend\", function () {\n if (input.composing) {\n input.poll();\n input.composing.range.clear();\n input.composing = null;\n }\n });\n};\n\nTextareaInput.prototype.createField = function (_display) {\n // Wraps and hides input textarea\n this.wrapper = hiddenTextarea();\n // The semihidden textarea that is focused when the editor is\n // focused, and receives input.\n this.textarea = this.wrapper.firstChild;\n};\n\nTextareaInput.prototype.prepareSelection = function () {\n // Redraw the selection and/or cursor\n var cm = this.cm, display = cm.display, doc = cm.doc;\n var result = prepareSelection(cm);\n\n // Move the hidden textarea near the cursor to prevent scrolling artifacts\n if (cm.options.moveInputWithCursor) {\n var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n headPos.top + lineOff.top - wrapOff.top));\n result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n headPos.left + lineOff.left - wrapOff.left));\n }\n\n return result\n};\n\nTextareaInput.prototype.showSelection = function (drawn) {\n var cm = this.cm, display = cm.display;\n removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n if (drawn.teTop != null) {\n this.wrapper.style.top = drawn.teTop + \"px\";\n this.wrapper.style.left = drawn.teLeft + \"px\";\n }\n};\n\n// Reset the input to correspond to the selection (or to be empty,\n// when not typing and nothing is selected)\nTextareaInput.prototype.reset = function (typing) {\n if (this.contextMenuPending || this.composing) { return }\n var cm = this.cm;\n if (cm.somethingSelected()) {\n this.prevInput = \"\";\n var content = cm.getSelection();\n this.textarea.value = content;\n if (cm.state.focused) { selectInput(this.textarea); }\n if (ie && ie_version >= 9) { this.hasSelection = content; }\n } else if (!typing) {\n this.prevInput = this.textarea.value = \"\";\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n }\n};\n\nTextareaInput.prototype.getField = function () { return this.textarea };\n\nTextareaInput.prototype.supportsTouch = function () { return false };\n\nTextareaInput.prototype.focus = function () {\n if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n try { this.textarea.focus(); }\n catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n }\n};\n\nTextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\nTextareaInput.prototype.resetPosition = function () {\n this.wrapper.style.top = this.wrapper.style.left = 0;\n};\n\nTextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n// Poll for input changes, using the normal rate of polling. This\n// runs as long as the editor is focused.\nTextareaInput.prototype.slowPoll = function () {\n var this$1 = this;\n\n if (this.pollingFast) { return }\n this.polling.set(this.cm.options.pollInterval, function () {\n this$1.poll();\n if (this$1.cm.state.focused) { this$1.slowPoll(); }\n });\n};\n\n// When an event has just come in that is likely to add or change\n// something in the input textarea, we poll faster, to ensure that\n// the change appears on the screen quickly.\nTextareaInput.prototype.fastPoll = function () {\n var missed = false, input = this;\n input.pollingFast = true;\n function p() {\n var changed = input.poll();\n if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n else {input.pollingFast = false; input.slowPoll();}\n }\n input.polling.set(20, p);\n};\n\n// Read input from the textarea, and update the document to match.\n// When something is selected, it is present in the textarea, and\n// selected (unless it is huge, in which case a placeholder is\n// used). When nothing is selected, the cursor sits after previously\n// seen text (can be empty), which is stored in prevInput (we must\n// not reset the textarea when typing, because that breaks IME).\nTextareaInput.prototype.poll = function () {\n var this$1 = this;\n\n var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n // Since this is called a *lot*, try to bail out as cheaply as\n // possible when it is clear that nothing happened. hasSelection\n // will be the case when there is a lot of text in the textarea,\n // in which case reading its value would be expensive.\n if (this.contextMenuPending || !cm.state.focused ||\n (hasSelection(input) && !prevInput && !this.composing) ||\n cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n { return false }\n\n var text = input.value;\n // If nothing changed, bail.\n if (text == prevInput && !cm.somethingSelected()) { return false }\n // Work around nonsensical selection resetting in IE9/10, and\n // inexplicable appearance of private area unicode characters on\n // some key combos in Mac (#2689).\n if (ie && ie_version >= 9 && this.hasSelection === text ||\n mac && /[\\uf700-\\uf7ff]/.test(text)) {\n cm.display.input.reset();\n return false\n }\n\n if (cm.doc.sel == cm.display.selForContextMenu) {\n var first = text.charCodeAt(0);\n if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n }\n // Find the part of the input that is actually new\n var same = 0, l = Math.min(prevInput.length, text.length);\n while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n runInOp(cm, function () {\n applyTextInput(cm, text.slice(same), prevInput.length - same,\n null, this$1.composing ? \"*compose\" : null);\n\n // Don't leave long text in the textarea, since it makes further polling slow\n if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n else { this$1.prevInput = text; }\n\n if (this$1.composing) {\n this$1.composing.range.clear();\n this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n {className: \"CodeMirror-composing\"});\n }\n });\n return true\n};\n\nTextareaInput.prototype.ensurePolled = function () {\n if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n};\n\nTextareaInput.prototype.onKeyPress = function () {\n if (ie && ie_version >= 9) { this.hasSelection = null; }\n this.fastPoll();\n};\n\nTextareaInput.prototype.onContextMenu = function (e) {\n var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n if (!pos || presto) { return } // Opera is difficult.\n\n // Reset the current text selection only if the click is done outside of the selection\n // and 'resetSelectionOnContextMenu' option is true.\n var reset = cm.options.resetSelectionOnContextMenu;\n if (reset && cm.doc.sel.contains(pos) == -1)\n { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n input.wrapper.style.cssText = \"position: absolute\";\n var wrapperBox = input.wrapper.getBoundingClientRect();\n te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n var oldScrollY;\n if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n display.input.focus();\n if (webkit) { window.scrollTo(null, oldScrollY); }\n display.input.reset();\n // Adds \"Select all\" to context menu in FF\n if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n input.contextMenuPending = true;\n display.selForContextMenu = cm.doc.sel;\n clearTimeout(display.detectingSelectAll);\n\n // Select-all will be greyed out if there's nothing to select, so\n // this adds a zero-width space so that we can later check whether\n // it got selected.\n function prepareSelectAllHack() {\n if (te.selectionStart != null) {\n var selected = cm.somethingSelected();\n var extval = \"\\u200b\" + (selected ? te.value : \"\");\n te.value = \"\\u21da\"; // Used to catch context-menu undo\n te.value = extval;\n input.prevInput = selected ? \"\" : \"\\u200b\";\n te.selectionStart = 1; te.selectionEnd = extval.length;\n // Re-set this, in case some other handler touched the\n // selection in the meantime.\n display.selForContextMenu = cm.doc.sel;\n }\n }\n function rehide() {\n input.contextMenuPending = false;\n input.wrapper.style.cssText = oldWrapperCSS;\n te.style.cssText = oldCSS;\n if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n // Try to detect the user choosing select-all\n if (te.selectionStart != null) {\n if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n var i = 0, poll = function () {\n if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n operation(cm, selectAll)(cm);\n } else if (i++ < 10) {\n display.detectingSelectAll = setTimeout(poll, 500);\n } else {\n display.selForContextMenu = null;\n display.input.reset();\n }\n };\n display.detectingSelectAll = setTimeout(poll, 200);\n }\n }\n\n if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n if (captureRightClick) {\n e_stop(e);\n var mouseup = function () {\n off(window, \"mouseup\", mouseup);\n setTimeout(rehide, 20);\n };\n on(window, \"mouseup\", mouseup);\n } else {\n setTimeout(rehide, 50);\n }\n};\n\nTextareaInput.prototype.readOnlyChanged = function (val) {\n if (!val) { this.reset(); }\n this.textarea.disabled = val == \"nocursor\";\n};\n\nTextareaInput.prototype.setUneditable = function () {};\n\nTextareaInput.prototype.needsContentAttribute = false;\n\nfunction fromTextArea(textarea, options) {\n options = options ? copyObj(options) : {};\n options.value = textarea.value;\n if (!options.tabindex && textarea.tabIndex)\n { options.tabindex = textarea.tabIndex; }\n if (!options.placeholder && textarea.placeholder)\n { options.placeholder = textarea.placeholder; }\n // Set autofocus to true if this textarea is focused, or if it has\n // autofocus and no other element is focused.\n if (options.autofocus == null) {\n var hasFocus = activeElt();\n options.autofocus = hasFocus == textarea ||\n textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n }\n\n function save() {textarea.value = cm.getValue();}\n\n var realSubmit;\n if (textarea.form) {\n on(textarea.form, \"submit\", save);\n // Deplorable hack to make the submit method do the right thing.\n if (!options.leaveSubmitMethodAlone) {\n var form = textarea.form;\n realSubmit = form.submit;\n try {\n var wrappedSubmit = form.submit = function () {\n save();\n form.submit = realSubmit;\n form.submit();\n form.submit = wrappedSubmit;\n };\n } catch(e) {}\n }\n }\n\n options.finishInit = function (cm) {\n cm.save = save;\n cm.getTextArea = function () { return textarea; };\n cm.toTextArea = function () {\n cm.toTextArea = isNaN; // Prevent this from being ran twice\n save();\n textarea.parentNode.removeChild(cm.getWrapperElement());\n textarea.style.display = \"\";\n if (textarea.form) {\n off(textarea.form, \"submit\", save);\n if (typeof textarea.form.submit == \"function\")\n { textarea.form.submit = realSubmit; }\n }\n };\n };\n\n textarea.style.display = \"none\";\n var cm = CodeMirror$1(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n options);\n return cm\n}\n\nfunction addLegacyProps(CodeMirror) {\n CodeMirror.off = off;\n CodeMirror.on = on;\n CodeMirror.wheelEventPixels = wheelEventPixels;\n CodeMirror.Doc = Doc;\n CodeMirror.splitLines = splitLinesAuto;\n CodeMirror.countColumn = countColumn;\n CodeMirror.findColumn = findColumn;\n CodeMirror.isWordChar = isWordCharBasic;\n CodeMirror.Pass = Pass;\n CodeMirror.signal = signal;\n CodeMirror.Line = Line;\n CodeMirror.changeEnd = changeEnd;\n CodeMirror.scrollbarModel = scrollbarModel;\n CodeMirror.Pos = Pos;\n CodeMirror.cmpPos = cmp;\n CodeMirror.modes = modes;\n CodeMirror.mimeModes = mimeModes;\n CodeMirror.resolveMode = resolveMode;\n CodeMirror.getMode = getMode;\n CodeMirror.modeExtensions = modeExtensions;\n CodeMirror.extendMode = extendMode;\n CodeMirror.copyState = copyState;\n CodeMirror.startState = startState;\n CodeMirror.innerMode = innerMode;\n CodeMirror.commands = commands;\n CodeMirror.keyMap = keyMap;\n CodeMirror.keyName = keyName;\n CodeMirror.isModifierKey = isModifierKey;\n CodeMirror.lookupKey = lookupKey;\n CodeMirror.normalizeKeyMap = normalizeKeyMap;\n CodeMirror.StringStream = StringStream;\n CodeMirror.SharedTextMarker = SharedTextMarker;\n CodeMirror.TextMarker = TextMarker;\n CodeMirror.LineWidget = LineWidget;\n CodeMirror.e_preventDefault = e_preventDefault;\n CodeMirror.e_stopPropagation = e_stopPropagation;\n CodeMirror.e_stop = e_stop;\n CodeMirror.addClass = addClass;\n CodeMirror.contains = contains;\n CodeMirror.rmClass = rmClass;\n CodeMirror.keyNames = keyNames;\n}\n\n// EDITOR CONSTRUCTOR\n\ndefineOptions(CodeMirror$1);\n\naddEditorMethods(CodeMirror$1);\n\n// Set up methods on CodeMirror's prototype to redirect to the editor's document.\nvar dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\nfor (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n { CodeMirror$1.prototype[prop] = (function(method) {\n return function() {return method.apply(this.doc, arguments)}\n })(Doc.prototype[prop]); } }\n\neventMixin(Doc);\n\n// INPUT HANDLING\n\nCodeMirror$1.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n// MODE DEFINITION AND QUERYING\n\n// Extra arguments are stored as the mode's dependencies, which is\n// used by (legacy) mechanisms like loadmode.js to automatically\n// load a mode. (Preferred mechanism is the require/define calls.)\nCodeMirror$1.defineMode = function(name/*, mode, …*/) {\n if (!CodeMirror$1.defaults.mode && name != \"null\") { CodeMirror$1.defaults.mode = name; }\n defineMode.apply(this, arguments);\n};\n\nCodeMirror$1.defineMIME = defineMIME;\n\n// Minimal default mode.\nCodeMirror$1.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\nCodeMirror$1.defineMIME(\"text/plain\", \"null\");\n\n// EXTENSIONS\n\nCodeMirror$1.defineExtension = function (name, func) {\n CodeMirror$1.prototype[name] = func;\n};\nCodeMirror$1.defineDocExtension = function (name, func) {\n Doc.prototype[name] = func;\n};\n\nCodeMirror$1.fromTextArea = fromTextArea;\n\naddLegacyProps(CodeMirror$1);\n\nCodeMirror$1.version = \"5.39.2\";\n\nreturn CodeMirror$1;\n\n})));\n\n},{}],15:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"css\", function(config, parserConfig) {\n var inline = parserConfig.inline\n if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode(\"text/css\");\n\n var indentUnit = config.indentUnit,\n tokenHooks = parserConfig.tokenHooks,\n documentTypes = parserConfig.documentTypes || {},\n mediaTypes = parserConfig.mediaTypes || {},\n mediaFeatures = parserConfig.mediaFeatures || {},\n mediaValueKeywords = parserConfig.mediaValueKeywords || {},\n propertyKeywords = parserConfig.propertyKeywords || {},\n nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {},\n fontProperties = parserConfig.fontProperties || {},\n counterDescriptors = parserConfig.counterDescriptors || {},\n colorKeywords = parserConfig.colorKeywords || {},\n valueKeywords = parserConfig.valueKeywords || {},\n allowNested = parserConfig.allowNested,\n lineComment = parserConfig.lineComment,\n supportsAtComponent = parserConfig.supportsAtComponent === true;\n\n var type, override;\n function ret(style, tp) { type = tp; return style; }\n\n // Tokenizers\n\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (tokenHooks[ch]) {\n var result = tokenHooks[ch](stream, state);\n if (result !== false) return result;\n }\n if (ch == \"@\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"def\", stream.current());\n } else if (ch == \"=\" || (ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) {\n return ret(null, \"compare\");\n } else if (ch == \"\\\"\" || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \"#\") {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"atom\", \"hash\");\n } else if (ch == \"!\") {\n stream.match(/^\\s*\\w*/);\n return ret(\"keyword\", \"important\");\n } else if (/\\d/.test(ch) || ch == \".\" && stream.eat(/\\d/)) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (ch === \"-\") {\n if (/[\\d.]/.test(stream.peek())) {\n stream.eatWhile(/[\\w.%]/);\n return ret(\"number\", \"unit\");\n } else if (stream.match(/^-[\\w\\\\\\-]+/)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false))\n return ret(\"variable-2\", \"variable-definition\");\n return ret(\"variable-2\", \"variable\");\n } else if (stream.match(/^\\w+-/)) {\n return ret(\"meta\", \"meta\");\n }\n } else if (/[,+>*\\/]/.test(ch)) {\n return ret(null, \"select-op\");\n } else if (ch == \".\" && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) {\n return ret(\"qualifier\", \"qualifier\");\n } else if (/[:;{}\\[\\]\\(\\)]/.test(ch)) {\n return ret(null, ch);\n } else if (((ch == \"u\" || ch == \"U\") && stream.match(/rl(-prefix)?\\(/i)) ||\n ((ch == \"d\" || ch == \"D\") && stream.match(\"omain(\", true, true)) ||\n ((ch == \"r\" || ch == \"R\") && stream.match(\"egexp(\", true, true))) {\n stream.backUp(1);\n state.tokenize = tokenParenthesized;\n return ret(\"property\", \"word\");\n } else if (/[\\w\\\\\\-]/.test(ch)) {\n stream.eatWhile(/[\\w\\\\\\-]/);\n return ret(\"property\", \"word\");\n } else {\n return ret(null, null);\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, ch;\n while ((ch = stream.next()) != null) {\n if (ch == quote && !escaped) {\n if (quote == \")\") stream.backUp(1);\n break;\n }\n escaped = !escaped && ch == \"\\\\\";\n }\n if (ch == quote || !escaped && quote != \")\") state.tokenize = null;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenParenthesized(stream, state) {\n stream.next(); // Must be '('\n if (!stream.match(/\\s*[\\\"\\')]/, false))\n state.tokenize = tokenString(\")\");\n else\n state.tokenize = null;\n return ret(null, \"(\");\n }\n\n // Context management\n\n function Context(type, indent, prev) {\n this.type = type;\n this.indent = indent;\n this.prev = prev;\n }\n\n function pushContext(state, stream, type, indent) {\n state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context);\n return type;\n }\n\n function popContext(state) {\n if (state.context.prev)\n state.context = state.context.prev;\n return state.context.type;\n }\n\n function pass(type, stream, state) {\n return states[state.context.type](type, stream, state);\n }\n function popAndPass(type, stream, state, n) {\n for (var i = n || 1; i > 0; i--)\n state.context = state.context.prev;\n return pass(type, stream, state);\n }\n\n // Parser\n\n function wordAsValue(stream) {\n var word = stream.current().toLowerCase();\n if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"variable\";\n }\n\n var states = {};\n\n states.top = function(type, stream, state) {\n if (type == \"{\") {\n return pushContext(state, stream, \"block\");\n } else if (type == \"}\" && state.context.prev) {\n return popContext(state);\n } else if (supportsAtComponent && /@component/i.test(type)) {\n return pushContext(state, stream, \"atComponentBlock\");\n } else if (/^@(-moz-)?document$/i.test(type)) {\n return pushContext(state, stream, \"documentTypes\");\n } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) {\n return pushContext(state, stream, \"atBlock\");\n } else if (/^@(font-face|counter-style)/i.test(type)) {\n state.stateArg = type;\n return \"restricted_atBlock_before\";\n } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) {\n return \"keyframes\";\n } else if (type && type.charAt(0) == \"@\") {\n return pushContext(state, stream, \"at\");\n } else if (type == \"hash\") {\n override = \"builtin\";\n } else if (type == \"word\") {\n override = \"tag\";\n } else if (type == \"variable-definition\") {\n return \"maybeprop\";\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n } else if (type == \":\") {\n return \"pseudo\";\n } else if (allowNested && type == \"(\") {\n return pushContext(state, stream, \"parens\");\n }\n return state.context.type;\n };\n\n states.block = function(type, stream, state) {\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (propertyKeywords.hasOwnProperty(word)) {\n override = \"property\";\n return \"maybeprop\";\n } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) {\n override = \"string-2\";\n return \"maybeprop\";\n } else if (allowNested) {\n override = stream.match(/^\\s*:(?:\\s|$)/, false) ? \"property\" : \"tag\";\n return \"block\";\n } else {\n override += \" error\";\n return \"maybeprop\";\n }\n } else if (type == \"meta\") {\n return \"block\";\n } else if (!allowNested && (type == \"hash\" || type == \"qualifier\")) {\n override = \"error\";\n return \"block\";\n } else {\n return states.top(type, stream, state);\n }\n };\n\n states.maybeprop = function(type, stream, state) {\n if (type == \":\") return pushContext(state, stream, \"prop\");\n return pass(type, stream, state);\n };\n\n states.prop = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" && allowNested) return pushContext(state, stream, \"propBlock\");\n if (type == \"}\" || type == \"{\") return popAndPass(type, stream, state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n\n if (type == \"hash\" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) {\n override += \" error\";\n } else if (type == \"word\") {\n wordAsValue(stream);\n } else if (type == \"interpolation\") {\n return pushContext(state, stream, \"interpolation\");\n }\n return \"prop\";\n };\n\n states.propBlock = function(type, _stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"word\") { override = \"property\"; return \"maybeprop\"; }\n return state.context.type;\n };\n\n states.parens = function(type, stream, state) {\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \")\") return popContext(state);\n if (type == \"(\") return pushContext(state, stream, \"parens\");\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n if (type == \"word\") wordAsValue(stream);\n return \"parens\";\n };\n\n states.pseudo = function(type, stream, state) {\n if (type == \"meta\") return \"pseudo\";\n\n if (type == \"word\") {\n override = \"variable-3\";\n return state.context.type;\n }\n return pass(type, stream, state);\n };\n\n states.documentTypes = function(type, stream, state) {\n if (type == \"word\" && documentTypes.hasOwnProperty(stream.current())) {\n override = \"tag\";\n return state.context.type;\n } else {\n return states.atBlock(type, stream, state);\n }\n };\n\n states.atBlock = function(type, stream, state) {\n if (type == \"(\") return pushContext(state, stream, \"atBlock_parens\");\n if (type == \"}\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"{\") return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\");\n\n if (type == \"interpolation\") return pushContext(state, stream, \"interpolation\");\n\n if (type == \"word\") {\n var word = stream.current().toLowerCase();\n if (word == \"only\" || word == \"not\" || word == \"and\" || word == \"or\")\n override = \"keyword\";\n else if (mediaTypes.hasOwnProperty(word))\n override = \"attribute\";\n else if (mediaFeatures.hasOwnProperty(word))\n override = \"property\";\n else if (mediaValueKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else if (propertyKeywords.hasOwnProperty(word))\n override = \"property\";\n else if (nonStandardPropertyKeywords.hasOwnProperty(word))\n override = \"string-2\";\n else if (valueKeywords.hasOwnProperty(word))\n override = \"atom\";\n else if (colorKeywords.hasOwnProperty(word))\n override = \"keyword\";\n else\n override = \"error\";\n }\n return state.context.type;\n };\n\n states.atComponentBlock = function(type, stream, state) {\n if (type == \"}\")\n return popAndPass(type, stream, state);\n if (type == \"{\")\n return popContext(state) && pushContext(state, stream, allowNested ? \"block\" : \"top\", false);\n if (type == \"word\")\n override = \"error\";\n return state.context.type;\n };\n\n states.atBlock_parens = function(type, stream, state) {\n if (type == \")\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state, 2);\n return states.atBlock(type, stream, state);\n };\n\n states.restricted_atBlock_before = function(type, stream, state) {\n if (type == \"{\")\n return pushContext(state, stream, \"restricted_atBlock\");\n if (type == \"word\" && state.stateArg == \"@counter-style\") {\n override = \"variable\";\n return \"restricted_atBlock_before\";\n }\n return pass(type, stream, state);\n };\n\n states.restricted_atBlock = function(type, stream, state) {\n if (type == \"}\") {\n state.stateArg = null;\n return popContext(state);\n }\n if (type == \"word\") {\n if ((state.stateArg == \"@font-face\" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) ||\n (state.stateArg == \"@counter-style\" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))\n override = \"error\";\n else\n override = \"property\";\n return \"maybeprop\";\n }\n return \"restricted_atBlock\";\n };\n\n states.keyframes = function(type, stream, state) {\n if (type == \"word\") { override = \"variable\"; return \"keyframes\"; }\n if (type == \"{\") return pushContext(state, stream, \"top\");\n return pass(type, stream, state);\n };\n\n states.at = function(type, stream, state) {\n if (type == \";\") return popContext(state);\n if (type == \"{\" || type == \"}\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"tag\";\n else if (type == \"hash\") override = \"builtin\";\n return \"at\";\n };\n\n states.interpolation = function(type, stream, state) {\n if (type == \"}\") return popContext(state);\n if (type == \"{\" || type == \";\") return popAndPass(type, stream, state);\n if (type == \"word\") override = \"variable\";\n else if (type != \"variable\" && type != \"(\" && type != \")\") override = \"error\";\n return \"interpolation\";\n };\n\n return {\n startState: function(base) {\n return {tokenize: null,\n state: inline ? \"block\" : \"top\",\n stateArg: null,\n context: new Context(inline ? \"block\" : \"top\", base || 0, null)};\n },\n\n token: function(stream, state) {\n if (!state.tokenize && stream.eatSpace()) return null;\n var style = (state.tokenize || tokenBase)(stream, state);\n if (style && typeof style == \"object\") {\n type = style[1];\n style = style[0];\n }\n override = style;\n if (type != \"comment\")\n state.state = states[state.state](type, stream, state);\n return override;\n },\n\n indent: function(state, textAfter) {\n var cx = state.context, ch = textAfter && textAfter.charAt(0);\n var indent = cx.indent;\n if (cx.type == \"prop\" && (ch == \"}\" || ch == \")\")) cx = cx.prev;\n if (cx.prev) {\n if (ch == \"}\" && (cx.type == \"block\" || cx.type == \"top\" ||\n cx.type == \"interpolation\" || cx.type == \"restricted_atBlock\")) {\n // Resume indentation from parent context.\n cx = cx.prev;\n indent = cx.indent;\n } else if (ch == \")\" && (cx.type == \"parens\" || cx.type == \"atBlock_parens\") ||\n ch == \"{\" && (cx.type == \"at\" || cx.type == \"atBlock\")) {\n // Dedent relative to current context.\n indent = Math.max(0, cx.indent - indentUnit);\n }\n }\n return indent;\n },\n\n electricChars: \"}\",\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\",\n blockCommentContinue: \" * \",\n lineComment: lineComment,\n fold: \"brace\"\n };\n});\n\n function keySet(array) {\n var keys = {};\n for (var i = 0; i < array.length; ++i) {\n keys[array[i].toLowerCase()] = true;\n }\n return keys;\n }\n\n var documentTypes_ = [\n \"domain\", \"regexp\", \"url\", \"url-prefix\"\n ], documentTypes = keySet(documentTypes_);\n\n var mediaTypes_ = [\n \"all\", \"aural\", \"braille\", \"handheld\", \"print\", \"projection\", \"screen\",\n \"tty\", \"tv\", \"embossed\"\n ], mediaTypes = keySet(mediaTypes_);\n\n var mediaFeatures_ = [\n \"width\", \"min-width\", \"max-width\", \"height\", \"min-height\", \"max-height\",\n \"device-width\", \"min-device-width\", \"max-device-width\", \"device-height\",\n \"min-device-height\", \"max-device-height\", \"aspect-ratio\",\n \"min-aspect-ratio\", \"max-aspect-ratio\", \"device-aspect-ratio\",\n \"min-device-aspect-ratio\", \"max-device-aspect-ratio\", \"color\", \"min-color\",\n \"max-color\", \"color-index\", \"min-color-index\", \"max-color-index\",\n \"monochrome\", \"min-monochrome\", \"max-monochrome\", \"resolution\",\n \"min-resolution\", \"max-resolution\", \"scan\", \"grid\", \"orientation\",\n \"device-pixel-ratio\", \"min-device-pixel-ratio\", \"max-device-pixel-ratio\",\n \"pointer\", \"any-pointer\", \"hover\", \"any-hover\"\n ], mediaFeatures = keySet(mediaFeatures_);\n\n var mediaValueKeywords_ = [\n \"landscape\", \"portrait\", \"none\", \"coarse\", \"fine\", \"on-demand\", \"hover\",\n \"interlace\", \"progressive\"\n ], mediaValueKeywords = keySet(mediaValueKeywords_);\n\n var propertyKeywords_ = [\n \"align-content\", \"align-items\", \"align-self\", \"alignment-adjust\",\n \"alignment-baseline\", \"anchor-point\", \"animation\", \"animation-delay\",\n \"animation-direction\", \"animation-duration\", \"animation-fill-mode\",\n \"animation-iteration-count\", \"animation-name\", \"animation-play-state\",\n \"animation-timing-function\", \"appearance\", \"azimuth\", \"backface-visibility\",\n \"background\", \"background-attachment\", \"background-blend-mode\", \"background-clip\",\n \"background-color\", \"background-image\", \"background-origin\", \"background-position\",\n \"background-repeat\", \"background-size\", \"baseline-shift\", \"binding\",\n \"bleed\", \"bookmark-label\", \"bookmark-level\", \"bookmark-state\",\n \"bookmark-target\", \"border\", \"border-bottom\", \"border-bottom-color\",\n \"border-bottom-left-radius\", \"border-bottom-right-radius\",\n \"border-bottom-style\", \"border-bottom-width\", \"border-collapse\",\n \"border-color\", \"border-image\", \"border-image-outset\",\n \"border-image-repeat\", \"border-image-slice\", \"border-image-source\",\n \"border-image-width\", \"border-left\", \"border-left-color\",\n \"border-left-style\", \"border-left-width\", \"border-radius\", \"border-right\",\n \"border-right-color\", \"border-right-style\", \"border-right-width\",\n \"border-spacing\", \"border-style\", \"border-top\", \"border-top-color\",\n \"border-top-left-radius\", \"border-top-right-radius\", \"border-top-style\",\n \"border-top-width\", \"border-width\", \"bottom\", \"box-decoration-break\",\n \"box-shadow\", \"box-sizing\", \"break-after\", \"break-before\", \"break-inside\",\n \"caption-side\", \"caret-color\", \"clear\", \"clip\", \"color\", \"color-profile\", \"column-count\",\n \"column-fill\", \"column-gap\", \"column-rule\", \"column-rule-color\",\n \"column-rule-style\", \"column-rule-width\", \"column-span\", \"column-width\",\n \"columns\", \"content\", \"counter-increment\", \"counter-reset\", \"crop\", \"cue\",\n \"cue-after\", \"cue-before\", \"cursor\", \"direction\", \"display\",\n \"dominant-baseline\", \"drop-initial-after-adjust\",\n \"drop-initial-after-align\", \"drop-initial-before-adjust\",\n \"drop-initial-before-align\", \"drop-initial-size\", \"drop-initial-value\",\n \"elevation\", \"empty-cells\", \"fit\", \"fit-position\", \"flex\", \"flex-basis\",\n \"flex-direction\", \"flex-flow\", \"flex-grow\", \"flex-shrink\", \"flex-wrap\",\n \"float\", \"float-offset\", \"flow-from\", \"flow-into\", \"font\", \"font-feature-settings\",\n \"font-family\", \"font-kerning\", \"font-language-override\", \"font-size\", \"font-size-adjust\",\n \"font-stretch\", \"font-style\", \"font-synthesis\", \"font-variant\",\n \"font-variant-alternates\", \"font-variant-caps\", \"font-variant-east-asian\",\n \"font-variant-ligatures\", \"font-variant-numeric\", \"font-variant-position\",\n \"font-weight\", \"grid\", \"grid-area\", \"grid-auto-columns\", \"grid-auto-flow\",\n \"grid-auto-rows\", \"grid-column\", \"grid-column-end\", \"grid-column-gap\",\n \"grid-column-start\", \"grid-gap\", \"grid-row\", \"grid-row-end\", \"grid-row-gap\",\n \"grid-row-start\", \"grid-template\", \"grid-template-areas\", \"grid-template-columns\",\n \"grid-template-rows\", \"hanging-punctuation\", \"height\", \"hyphens\",\n \"icon\", \"image-orientation\", \"image-rendering\", \"image-resolution\",\n \"inline-box-align\", \"justify-content\", \"justify-items\", \"justify-self\", \"left\", \"letter-spacing\",\n \"line-break\", \"line-height\", \"line-stacking\", \"line-stacking-ruby\",\n \"line-stacking-shift\", \"line-stacking-strategy\", \"list-style\",\n \"list-style-image\", \"list-style-position\", \"list-style-type\", \"margin\",\n \"margin-bottom\", \"margin-left\", \"margin-right\", \"margin-top\",\n \"marks\", \"marquee-direction\", \"marquee-loop\",\n \"marquee-play-count\", \"marquee-speed\", \"marquee-style\", \"max-height\",\n \"max-width\", \"min-height\", \"min-width\", \"move-to\", \"nav-down\", \"nav-index\",\n \"nav-left\", \"nav-right\", \"nav-up\", \"object-fit\", \"object-position\",\n \"opacity\", \"order\", \"orphans\", \"outline\",\n \"outline-color\", \"outline-offset\", \"outline-style\", \"outline-width\",\n \"overflow\", \"overflow-style\", \"overflow-wrap\", \"overflow-x\", \"overflow-y\",\n \"padding\", \"padding-bottom\", \"padding-left\", \"padding-right\", \"padding-top\",\n \"page\", \"page-break-after\", \"page-break-before\", \"page-break-inside\",\n \"page-policy\", \"pause\", \"pause-after\", \"pause-before\", \"perspective\",\n \"perspective-origin\", \"pitch\", \"pitch-range\", \"place-content\", \"place-items\", \"place-self\", \"play-during\", \"position\",\n \"presentation-level\", \"punctuation-trim\", \"quotes\", \"region-break-after\",\n \"region-break-before\", \"region-break-inside\", \"region-fragment\",\n \"rendering-intent\", \"resize\", \"rest\", \"rest-after\", \"rest-before\", \"richness\",\n \"right\", \"rotation\", \"rotation-point\", \"ruby-align\", \"ruby-overhang\",\n \"ruby-position\", \"ruby-span\", \"shape-image-threshold\", \"shape-inside\", \"shape-margin\",\n \"shape-outside\", \"size\", \"speak\", \"speak-as\", \"speak-header\",\n \"speak-numeral\", \"speak-punctuation\", \"speech-rate\", \"stress\", \"string-set\",\n \"tab-size\", \"table-layout\", \"target\", \"target-name\", \"target-new\",\n \"target-position\", \"text-align\", \"text-align-last\", \"text-decoration\",\n \"text-decoration-color\", \"text-decoration-line\", \"text-decoration-skip\",\n \"text-decoration-style\", \"text-emphasis\", \"text-emphasis-color\",\n \"text-emphasis-position\", \"text-emphasis-style\", \"text-height\",\n \"text-indent\", \"text-justify\", \"text-outline\", \"text-overflow\", \"text-shadow\",\n \"text-size-adjust\", \"text-space-collapse\", \"text-transform\", \"text-underline-position\",\n \"text-wrap\", \"top\", \"transform\", \"transform-origin\", \"transform-style\",\n \"transition\", \"transition-delay\", \"transition-duration\",\n \"transition-property\", \"transition-timing-function\", \"unicode-bidi\",\n \"user-select\", \"vertical-align\", \"visibility\", \"voice-balance\", \"voice-duration\",\n \"voice-family\", \"voice-pitch\", \"voice-range\", \"voice-rate\", \"voice-stress\",\n \"voice-volume\", \"volume\", \"white-space\", \"widows\", \"width\", \"will-change\", \"word-break\",\n \"word-spacing\", \"word-wrap\", \"z-index\",\n // SVG-specific\n \"clip-path\", \"clip-rule\", \"mask\", \"enable-background\", \"filter\", \"flood-color\",\n \"flood-opacity\", \"lighting-color\", \"stop-color\", \"stop-opacity\", \"pointer-events\",\n \"color-interpolation\", \"color-interpolation-filters\",\n \"color-rendering\", \"fill\", \"fill-opacity\", \"fill-rule\", \"image-rendering\",\n \"marker\", \"marker-end\", \"marker-mid\", \"marker-start\", \"shape-rendering\", \"stroke\",\n \"stroke-dasharray\", \"stroke-dashoffset\", \"stroke-linecap\", \"stroke-linejoin\",\n \"stroke-miterlimit\", \"stroke-opacity\", \"stroke-width\", \"text-rendering\",\n \"baseline-shift\", \"dominant-baseline\", \"glyph-orientation-horizontal\",\n \"glyph-orientation-vertical\", \"text-anchor\", \"writing-mode\"\n ], propertyKeywords = keySet(propertyKeywords_);\n\n var nonStandardPropertyKeywords_ = [\n \"scrollbar-arrow-color\", \"scrollbar-base-color\", \"scrollbar-dark-shadow-color\",\n \"scrollbar-face-color\", \"scrollbar-highlight-color\", \"scrollbar-shadow-color\",\n \"scrollbar-3d-light-color\", \"scrollbar-track-color\", \"shape-inside\",\n \"searchfield-cancel-button\", \"searchfield-decoration\", \"searchfield-results-button\",\n \"searchfield-results-decoration\", \"zoom\"\n ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_);\n\n var fontProperties_ = [\n \"font-family\", \"src\", \"unicode-range\", \"font-variant\", \"font-feature-settings\",\n \"font-stretch\", \"font-weight\", \"font-style\"\n ], fontProperties = keySet(fontProperties_);\n\n var counterDescriptors_ = [\n \"additive-symbols\", \"fallback\", \"negative\", \"pad\", \"prefix\", \"range\",\n \"speak-as\", \"suffix\", \"symbols\", \"system\"\n ], counterDescriptors = keySet(counterDescriptors_);\n\n var colorKeywords_ = [\n \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n \"whitesmoke\", \"yellow\", \"yellowgreen\"\n ], colorKeywords = keySet(colorKeywords_);\n\n var valueKeywords_ = [\n \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"afar\",\n \"after-white-space\", \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\",\n \"always\", \"amharic\", \"amharic-abegede\", \"antialiased\", \"appworkspace\",\n \"arabic-indic\", \"armenian\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\", \"avoid-page\",\n \"avoid-region\", \"background\", \"backwards\", \"baseline\", \"below\", \"bidi-override\", \"binary\",\n \"bengali\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"cambodian\",\n \"capitalize\", \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\",\n \"cell\", \"center\", \"checkbox\", \"circle\", \"cjk-decimal\", \"cjk-earthly-branch\",\n \"cjk-heavenly-stem\", \"cjk-ideographic\", \"clear\", \"clip\", \"close-quote\",\n \"col-resize\", \"collapse\", \"color\", \"color-burn\", \"color-dodge\", \"column\", \"column-reverse\",\n \"compact\", \"condensed\", \"contain\", \"content\", \"contents\",\n \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\", \"crop\",\n \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\",\n \"destination-in\", \"destination-out\", \"destination-over\", \"devanagari\", \"difference\",\n \"disc\", \"discard\", \"disclosure-closed\", \"disclosure-open\", \"document\",\n \"dot-dash\", \"dot-dot-dash\",\n \"dotted\", \"double\", \"down\", \"e-resize\", \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\",\n \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\", \"ethiopic\", \"ethiopic-abegede\",\n \"ethiopic-abegede-am-et\", \"ethiopic-abegede-gez\", \"ethiopic-abegede-ti-er\",\n \"ethiopic-abegede-ti-et\", \"ethiopic-halehame-aa-er\",\n \"ethiopic-halehame-aa-et\", \"ethiopic-halehame-am-et\",\n \"ethiopic-halehame-gez\", \"ethiopic-halehame-om-et\",\n \"ethiopic-halehame-sid-et\", \"ethiopic-halehame-so-et\",\n \"ethiopic-halehame-ti-er\", \"ethiopic-halehame-ti-et\", \"ethiopic-halehame-tig\",\n \"ethiopic-numeric\", \"ew-resize\", \"exclusion\", \"expanded\", \"extends\", \"extra-condensed\",\n \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\",\n \"forwards\", \"from\", \"geometricPrecision\", \"georgian\", \"graytext\", \"grid\", \"groove\",\n \"gujarati\", \"gurmukhi\", \"hand\", \"hangul\", \"hangul-consonant\", \"hard-light\", \"hebrew\",\n \"help\", \"hidden\", \"hide\", \"higher\", \"highlight\", \"highlighttext\",\n \"hiragana\", \"hiragana-iroha\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\",\n \"infobackground\", \"infotext\", \"inherit\", \"initial\", \"inline\", \"inline-axis\",\n \"inline-block\", \"inline-flex\", \"inline-grid\", \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\",\n \"italic\", \"japanese-formal\", \"japanese-informal\", \"justify\", \"kannada\",\n \"katakana\", \"katakana-iroha\", \"keep-all\", \"khmer\",\n \"korean-hangul-formal\", \"korean-hanja-formal\", \"korean-hanja-informal\",\n \"landscape\", \"lao\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\",\n \"line-through\", \"linear\", \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\",\n \"local\", \"logical\", \"loud\", \"lower\", \"lower-alpha\", \"lower-armenian\",\n \"lower-greek\", \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\",\n \"lower-roman\", \"lowercase\", \"ltr\", \"luminosity\", \"malayalam\", \"match\", \"matrix\", \"matrix3d\",\n \"media-controls-background\", \"media-current-time-display\",\n \"media-fullscreen-button\", \"media-mute-button\", \"media-play-button\",\n \"media-return-to-realtime-button\", \"media-rewind-button\",\n \"media-seek-back-button\", \"media-seek-forward-button\", \"media-slider\",\n \"media-sliderthumb\", \"media-time-remaining-display\", \"media-volume-slider\",\n \"media-volume-slider-container\", \"media-volume-sliderthumb\", \"medium\",\n \"menu\", \"menulist\", \"menulist-button\", \"menulist-text\",\n \"menulist-textfield\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n \"mix\", \"mongolian\", \"monospace\", \"move\", \"multiple\", \"multiply\", \"myanmar\", \"n-resize\",\n \"narrower\", \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\",\n \"no-open-quote\", \"no-repeat\", \"none\", \"normal\", \"not-allowed\", \"nowrap\",\n \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\", \"oblique\", \"octal\", \"opacity\", \"open-quote\",\n \"optimizeLegibility\", \"optimizeSpeed\", \"oriya\", \"oromo\", \"outset\",\n \"outside\", \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\",\n \"painted\", \"page\", \"paused\", \"persian\", \"perspective\", \"plus-darker\", \"plus-lighter\",\n \"pointer\", \"polygon\", \"portrait\", \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\",\n \"progress\", \"push-button\", \"radial-gradient\", \"radio\", \"read-only\",\n \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\",\n \"relative\", \"repeat\", \"repeating-linear-gradient\",\n \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\",\n \"rotateZ\", \"round\", \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\",\n \"s-resize\", \"sans-serif\", \"saturation\", \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\",\n \"scroll\", \"scrollbar\", \"scroll-position\", \"se-resize\", \"searchfield\",\n \"searchfield-cancel-button\", \"searchfield-decoration\",\n \"searchfield-results-button\", \"searchfield-results-decoration\", \"self-start\", \"self-end\",\n \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\", \"sidama\",\n \"simp-chinese-formal\", \"simp-chinese-informal\", \"single\",\n \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\",\n \"small\", \"small-caps\", \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"somali\",\n \"source-atop\", \"source-in\", \"source-out\", \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\",\n \"square-button\", \"start\", \"static\", \"status-bar\", \"stretch\", \"stroke\", \"sub\",\n \"subpixel-antialiased\", \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\",\n \"table-caption\", \"table-cell\", \"table-column\", \"table-column-group\",\n \"table-footer-group\", \"table-header-group\", \"table-row\", \"table-row-group\",\n \"tamil\",\n \"telugu\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thai\",\n \"thick\", \"thin\", \"threeddarkshadow\", \"threedface\", \"threedhighlight\",\n \"threedlightshadow\", \"threedshadow\", \"tibetan\", \"tigre\", \"tigrinya-er\",\n \"tigrinya-er-abegede\", \"tigrinya-et\", \"tigrinya-et-abegede\", \"to\", \"top\",\n \"trad-chinese-formal\", \"trad-chinese-informal\", \"transform\",\n \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\",\n \"transparent\", \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unset\", \"up\",\n \"upper-alpha\", \"upper-armenian\", \"upper-greek\", \"upper-hexadecimal\",\n \"upper-latin\", \"upper-norwegian\", \"upper-roman\", \"uppercase\", \"urdu\", \"url\",\n \"var\", \"vertical\", \"vertical-text\", \"visible\", \"visibleFill\", \"visiblePainted\",\n \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\",\n \"window\", \"windowframe\", \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\",\n \"xx-large\", \"xx-small\"\n ], valueKeywords = keySet(valueKeywords_);\n\n var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_)\n .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_)\n .concat(valueKeywords_);\n CodeMirror.registerHelper(\"hintWords\", \"css\", allWords);\n\n function tokenCComment(stream, state) {\n var maybeEnd = false, ch;\n while ((ch = stream.next()) != null) {\n if (maybeEnd && ch == \"/\") {\n state.tokenize = null;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return [\"comment\", \"comment\"];\n }\n\n CodeMirror.defineMIME(\"text/css\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\"\n });\n\n CodeMirror.defineMIME(\"text/x-scss\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \":\": function(stream) {\n if (stream.match(/\\s*\\{/, false))\n return [null, null]\n return false;\n },\n \"$\": function(stream) {\n stream.match(/^[\\w-]+/);\n if (stream.match(/^\\s*:/, false))\n return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"#\": function(stream) {\n if (!stream.eat(\"{\")) return false;\n return [null, \"interpolation\"];\n }\n },\n name: \"css\",\n helperType: \"scss\"\n });\n\n CodeMirror.defineMIME(\"text/x-less\", {\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n mediaValueKeywords: mediaValueKeywords,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n fontProperties: fontProperties,\n allowNested: true,\n lineComment: \"//\",\n tokenHooks: {\n \"/\": function(stream, state) {\n if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return [\"comment\", \"comment\"];\n } else if (stream.eat(\"*\")) {\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n } else {\n return [\"operator\", \"operator\"];\n }\n },\n \"@\": function(stream) {\n if (stream.eat(\"{\")) return [null, \"interpolation\"];\n if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i, false)) return false;\n stream.eatWhile(/[\\w\\\\\\-]/);\n if (stream.match(/^\\s*:/, false))\n return [\"variable-2\", \"variable-definition\"];\n return [\"variable-2\", \"variable\"];\n },\n \"&\": function() {\n return [\"atom\", \"atom\"];\n }\n },\n name: \"css\",\n helperType: \"less\"\n });\n\n CodeMirror.defineMIME(\"text/x-gss\", {\n documentTypes: documentTypes,\n mediaTypes: mediaTypes,\n mediaFeatures: mediaFeatures,\n propertyKeywords: propertyKeywords,\n nonStandardPropertyKeywords: nonStandardPropertyKeywords,\n fontProperties: fontProperties,\n counterDescriptors: counterDescriptors,\n colorKeywords: colorKeywords,\n valueKeywords: valueKeywords,\n supportsAtComponent: true,\n tokenHooks: {\n \"/\": function(stream, state) {\n if (!stream.eat(\"*\")) return false;\n state.tokenize = tokenCComment;\n return tokenCComment(stream, state);\n }\n },\n name: \"css\",\n helperType: \"gss\"\n });\n\n});\n\n},{\"../../lib/codemirror\":14}],16:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"), require(\"../xml/xml\"), require(\"../javascript/javascript\"), require(\"../css/css\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\", \"../xml/xml\", \"../javascript/javascript\", \"../css/css\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n \"use strict\";\n\n var defaultTags = {\n script: [\n [\"lang\", /(javascript|babel)/i, \"javascript\"],\n [\"type\", /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, \"javascript\"],\n [\"type\", /./, \"text/plain\"],\n [null, null, \"javascript\"]\n ],\n style: [\n [\"lang\", /^css$/i, \"css\"],\n [\"type\", /^(text\\/)?(x-)?(stylesheet|css)$/i, \"css\"],\n [\"type\", /./, \"text/plain\"],\n [null, null, \"css\"]\n ]\n };\n\n function maybeBackup(stream, pat, style) {\n var cur = stream.current(), close = cur.search(pat);\n if (close > -1) {\n stream.backUp(cur.length - close);\n } else if (cur.match(/<\\/?$/)) {\n stream.backUp(cur.length);\n if (!stream.match(pat, false)) stream.match(cur);\n }\n return style;\n }\n\n var attrRegexpCache = {};\n function getAttrRegexp(attr) {\n var regexp = attrRegexpCache[attr];\n if (regexp) return regexp;\n return attrRegexpCache[attr] = new RegExp(\"\\\\s+\" + attr + \"\\\\s*=\\\\s*('|\\\")?([^'\\\"]+)('|\\\")?\\\\s*\");\n }\n\n function getAttrValue(text, attr) {\n var match = text.match(getAttrRegexp(attr))\n return match ? /^\\s*(.*?)\\s*$/.exec(match[2])[1] : \"\"\n }\n\n function getTagRegexp(tagName, anchored) {\n return new RegExp((anchored ? \"^\" : \"\") + \"<\\/\\s*\" + tagName + \"\\s*>\", \"i\");\n }\n\n function addTags(from, to) {\n for (var tag in from) {\n var dest = to[tag] || (to[tag] = []);\n var source = from[tag];\n for (var i = source.length - 1; i >= 0; i--)\n dest.unshift(source[i])\n }\n }\n\n function findMatchingMode(tagInfo, tagText) {\n for (var i = 0; i < tagInfo.length; i++) {\n var spec = tagInfo[i];\n if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2];\n }\n }\n\n CodeMirror.defineMode(\"htmlmixed\", function (config, parserConfig) {\n var htmlMode = CodeMirror.getMode(config, {\n name: \"xml\",\n htmlMode: true,\n multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,\n multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag\n });\n\n var tags = {};\n var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes;\n addTags(defaultTags, tags);\n if (configTags) addTags(configTags, tags);\n if (configScript) for (var i = configScript.length - 1; i >= 0; i--)\n tags.script.unshift([\"type\", configScript[i].matches, configScript[i].mode])\n\n function html(stream, state) {\n var style = htmlMode.token(stream, state.htmlState), tag = /\\btag\\b/.test(style), tagName\n if (tag && !/[<>\\s\\/]/.test(stream.current()) &&\n (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) &&\n tags.hasOwnProperty(tagName)) {\n state.inTag = tagName + \" \"\n } else if (state.inTag && tag && />$/.test(stream.current())) {\n var inTag = /^([\\S]+) (.*)/.exec(state.inTag)\n state.inTag = null\n var modeSpec = stream.current() == \">\" && findMatchingMode(tags[inTag[1]], inTag[2])\n var mode = CodeMirror.getMode(config, modeSpec)\n var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false);\n state.token = function (stream, state) {\n if (stream.match(endTagA, false)) {\n state.token = html;\n state.localState = state.localMode = null;\n return null;\n }\n return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState));\n };\n state.localMode = mode;\n state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, \"\"));\n } else if (state.inTag) {\n state.inTag += stream.current()\n if (stream.eol()) state.inTag += \" \"\n }\n return style;\n };\n\n return {\n startState: function () {\n var state = CodeMirror.startState(htmlMode);\n return {token: html, inTag: null, localMode: null, localState: null, htmlState: state};\n },\n\n copyState: function (state) {\n var local;\n if (state.localState) {\n local = CodeMirror.copyState(state.localMode, state.localState);\n }\n return {token: state.token, inTag: state.inTag,\n localMode: state.localMode, localState: local,\n htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};\n },\n\n token: function (stream, state) {\n return state.token(stream, state);\n },\n\n indent: function (state, textAfter, line) {\n if (!state.localMode || /^\\s*<\\//.test(textAfter))\n return htmlMode.indent(state.htmlState, textAfter);\n else if (state.localMode.indent)\n return state.localMode.indent(state.localState, textAfter, line);\n else\n return CodeMirror.Pass;\n },\n\n innerMode: function (state) {\n return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode};\n }\n };\n }, \"xml\", \"javascript\", \"css\");\n\n CodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\n});\n\n},{\"../../lib/codemirror\":14,\"../css/css\":15,\"../javascript/javascript\":17,\"../xml/xml\":18}],17:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n var indentUnit = config.indentUnit;\n var statementIndent = parserConfig.statementIndent;\n var jsonldMode = parserConfig.jsonld;\n var jsonMode = parserConfig.json || jsonldMode;\n var isTS = parserConfig.typescript;\n var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n // Tokenizer\n\n var keywords = function(){\n function kw(type) {return {type: type, style: \"keyword\"};}\n var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\"), D = kw(\"keyword d\");\n var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n return {\n \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n \"return\": D, \"break\": D, \"continue\": D, \"new\": kw(\"new\"), \"delete\": C, \"void\": C, \"throw\": C,\n \"debugger\": kw(\"debugger\"), \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n \"this\": kw(\"this\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C,\n \"await\": C\n };\n }();\n\n var isOperatorChar = /[+\\-*&%=<>!?|~^@]/;\n var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n function readRegexp(stream) {\n var escaped = false, next, inSet = false;\n while ((next = stream.next()) != null) {\n if (!escaped) {\n if (next == \"/\" && !inSet) return;\n if (next == \"[\") inSet = true;\n else if (inSet && next == \"]\") inSet = false;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n }\n\n // Used as scratch variables to communicate multiple values without\n // consing up tons of objects.\n var type, content;\n function ret(tp, style, cont) {\n type = tp; content = cont;\n return style;\n }\n function tokenBase(stream, state) {\n var ch = stream.next();\n if (ch == '\"' || ch == \"'\") {\n state.tokenize = tokenString(ch);\n return state.tokenize(stream, state);\n } else if (ch == \".\" && stream.match(/^\\d+(?:[eE][+\\-]?\\d+)?/)) {\n return ret(\"number\", \"number\");\n } else if (ch == \".\" && stream.match(\"..\")) {\n return ret(\"spread\", \"meta\");\n } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n return ret(ch);\n } else if (ch == \"=\" && stream.eat(\">\")) {\n return ret(\"=>\", \"operator\");\n } else if (ch == \"0\" && stream.match(/^(?:x[\\da-f]+|o[0-7]+|b[01]+)n?/i)) {\n return ret(\"number\", \"number\");\n } else if (/\\d/.test(ch)) {\n stream.match(/^\\d*(?:n|(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?/);\n return ret(\"number\", \"number\");\n } else if (ch == \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = tokenComment;\n return tokenComment(stream, state);\n } else if (stream.eat(\"/\")) {\n stream.skipToEnd();\n return ret(\"comment\", \"comment\");\n } else if (expressionAllowed(stream, state, 1)) {\n readRegexp(stream);\n stream.match(/^\\b(([gimyus])(?![gimyus]*\\2))+\\b/);\n return ret(\"regexp\", \"string-2\");\n } else {\n stream.eat(\"=\");\n return ret(\"operator\", \"operator\", stream.current());\n }\n } else if (ch == \"`\") {\n state.tokenize = tokenQuasi;\n return tokenQuasi(stream, state);\n } else if (ch == \"#\") {\n stream.skipToEnd();\n return ret(\"error\", \"error\");\n } else if (isOperatorChar.test(ch)) {\n if (ch != \">\" || !state.lexical || state.lexical.type != \">\") {\n if (stream.eat(\"=\")) {\n if (ch == \"!\" || ch == \"=\") stream.eat(\"=\")\n } else if (/[<>*+\\-]/.test(ch)) {\n stream.eat(ch)\n if (ch == \">\") stream.eat(ch)\n }\n }\n return ret(\"operator\", \"operator\", stream.current());\n } else if (wordRE.test(ch)) {\n stream.eatWhile(wordRE);\n var word = stream.current()\n if (state.lastType != \".\") {\n if (keywords.propertyIsEnumerable(word)) {\n var kw = keywords[word]\n return ret(kw.type, kw.style, word)\n }\n if (word == \"async\" && stream.match(/^(\\s|\\/\\*.*?\\*\\/)*[\\[\\(\\w]/, false))\n return ret(\"async\", \"keyword\", word)\n }\n return ret(\"variable\", \"variable\", word)\n }\n }\n\n function tokenString(quote) {\n return function(stream, state) {\n var escaped = false, next;\n if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n state.tokenize = tokenBase;\n return ret(\"jsonld-keyword\", \"meta\");\n }\n while ((next = stream.next()) != null) {\n if (next == quote && !escaped) break;\n escaped = !escaped && next == \"\\\\\";\n }\n if (!escaped) state.tokenize = tokenBase;\n return ret(\"string\", \"string\");\n };\n }\n\n function tokenComment(stream, state) {\n var maybeEnd = false, ch;\n while (ch = stream.next()) {\n if (ch == \"/\" && maybeEnd) {\n state.tokenize = tokenBase;\n break;\n }\n maybeEnd = (ch == \"*\");\n }\n return ret(\"comment\", \"comment\");\n }\n\n function tokenQuasi(stream, state) {\n var escaped = false, next;\n while ((next = stream.next()) != null) {\n if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n state.tokenize = tokenBase;\n break;\n }\n escaped = !escaped && next == \"\\\\\";\n }\n return ret(\"quasi\", \"string-2\", stream.current());\n }\n\n var brackets = \"([{}])\";\n // This is a crude lookahead trick to try and notice that we're\n // parsing the argument patterns for a fat-arrow function before we\n // actually hit the arrow token. It only works if the arrow is on\n // the same line as the arguments and there's no strange noise\n // (comments) in between. Fallback is to only notice when we hit the\n // arrow, and not declare the arguments as locals for the arrow\n // body.\n function findFatArrow(stream, state) {\n if (state.fatArrowAt) state.fatArrowAt = null;\n var arrow = stream.string.indexOf(\"=>\", stream.start);\n if (arrow < 0) return;\n\n if (isTS) { // Try to skip TypeScript return type declarations after the arguments\n var m = /:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(stream.string.slice(stream.start, arrow))\n if (m) arrow = m.index\n }\n\n var depth = 0, sawSomething = false;\n for (var pos = arrow - 1; pos >= 0; --pos) {\n var ch = stream.string.charAt(pos);\n var bracket = brackets.indexOf(ch);\n if (bracket >= 0 && bracket < 3) {\n if (!depth) { ++pos; break; }\n if (--depth == 0) { if (ch == \"(\") sawSomething = true; break; }\n } else if (bracket >= 3 && bracket < 6) {\n ++depth;\n } else if (wordRE.test(ch)) {\n sawSomething = true;\n } else if (/[\"'\\/]/.test(ch)) {\n return;\n } else if (sawSomething && !depth) {\n ++pos;\n break;\n }\n }\n if (sawSomething && !depth) state.fatArrowAt = pos;\n }\n\n // Parser\n\n var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true, \"this\": true, \"jsonld-keyword\": true};\n\n function JSLexical(indented, column, type, align, prev, info) {\n this.indented = indented;\n this.column = column;\n this.type = type;\n this.prev = prev;\n this.info = info;\n if (align != null) this.align = align;\n }\n\n function inScope(state, varname) {\n for (var v = state.localVars; v; v = v.next)\n if (v.name == varname) return true;\n for (var cx = state.context; cx; cx = cx.prev) {\n for (var v = cx.vars; v; v = v.next)\n if (v.name == varname) return true;\n }\n }\n\n function parseJS(state, style, type, content, stream) {\n var cc = state.cc;\n // Communicate our context to the combinators.\n // (Less wasteful than consing up a hundred closures on every call.)\n cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;\n\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = true;\n\n while(true) {\n var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n if (combinator(type, content)) {\n while(cc.length && cc[cc.length - 1].lex)\n cc.pop()();\n if (cx.marked) return cx.marked;\n if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n return style;\n }\n }\n }\n\n // Combinator utils\n\n var cx = {state: null, column: null, marked: null, cc: null};\n function pass() {\n for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n }\n function cont() {\n pass.apply(null, arguments);\n return true;\n }\n function inList(name, list) {\n for (var v = list; v; v = v.next) if (v.name == name) return true\n return false;\n }\n function register(varname) {\n var state = cx.state;\n cx.marked = \"def\";\n if (state.context) {\n if (state.lexical.info == \"var\" && state.context && state.context.block) {\n // FIXME function decls are also not block scoped\n var newContext = registerVarScoped(varname, state.context)\n if (newContext != null) {\n state.context = newContext\n return\n }\n } else if (!inList(varname, state.localVars)) {\n state.localVars = new Var(varname, state.localVars)\n return\n }\n }\n // Fall through means this is global\n if (parserConfig.globalVars && !inList(varname, state.globalVars))\n state.globalVars = new Var(varname, state.globalVars)\n }\n function registerVarScoped(varname, context) {\n if (!context) {\n return null\n } else if (context.block) {\n var inner = registerVarScoped(varname, context.prev)\n if (!inner) return null\n if (inner == context.prev) return context\n return new Context(inner, context.vars, true)\n } else if (inList(varname, context.vars)) {\n return context\n } else {\n return new Context(context.prev, new Var(varname, context.vars), false)\n }\n }\n\n function isModifier(name) {\n return name == \"public\" || name == \"private\" || name == \"protected\" || name == \"abstract\" || name == \"readonly\"\n }\n\n // Combinators\n\n function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }\n function Var(name, next) { this.name = name; this.next = next }\n\n var defaultVars = new Var(\"this\", new Var(\"arguments\", null))\n function pushcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, false)\n cx.state.localVars = defaultVars\n }\n function pushblockcontext() {\n cx.state.context = new Context(cx.state.context, cx.state.localVars, true)\n cx.state.localVars = null\n }\n function popcontext() {\n cx.state.localVars = cx.state.context.vars\n cx.state.context = cx.state.context.prev\n }\n popcontext.lex = true\n function pushlex(type, info) {\n var result = function() {\n var state = cx.state, indent = state.indented;\n if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n indent = outer.indented;\n state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n };\n result.lex = true;\n return result;\n }\n function poplex() {\n var state = cx.state;\n if (state.lexical.prev) {\n if (state.lexical.type == \")\")\n state.indented = state.lexical.indented;\n state.lexical = state.lexical.prev;\n }\n }\n poplex.lex = true;\n\n function expect(wanted) {\n function exp(type) {\n if (type == wanted) return cont();\n else if (wanted == \";\" || type == \"}\" || type == \")\" || type == \"]\") return pass();\n else return cont(exp);\n };\n return exp;\n }\n\n function statement(type, value) {\n if (type == \"var\") return cont(pushlex(\"vardef\", value), vardef, expect(\";\"), poplex);\n if (type == \"keyword a\") return cont(pushlex(\"form\"), parenExpr, statement, poplex);\n if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n if (type == \"keyword d\") return cx.stream.match(/^\\s*$/, false) ? cont() : cont(pushlex(\"stat\"), maybeexpression, expect(\";\"), poplex);\n if (type == \"debugger\") return cont(expect(\";\"));\n if (type == \"{\") return cont(pushlex(\"}\"), pushblockcontext, block, poplex, popcontext);\n if (type == \";\") return cont();\n if (type == \"if\") {\n if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n cx.state.cc.pop()();\n return cont(pushlex(\"form\"), parenExpr, statement, poplex, maybeelse);\n }\n if (type == \"function\") return cont(functiondef);\n if (type == \"for\") return cont(pushlex(\"form\"), forspec, statement, poplex);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), className, poplex); }\n if (type == \"variable\") {\n if (isTS && value == \"declare\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else if (isTS && (value == \"module\" || value == \"enum\" || value == \"type\") && cx.stream.match(/^\\s*\\w/, false)) {\n cx.marked = \"keyword\"\n if (value == \"enum\") return cont(enumdef);\n else if (value == \"type\") return cont(typeexpr, expect(\"operator\"), typeexpr, expect(\";\"));\n else return cont(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), block, poplex, poplex)\n } else if (isTS && value == \"namespace\") {\n cx.marked = \"keyword\"\n return cont(pushlex(\"form\"), expression, block, poplex)\n } else if (isTS && value == \"abstract\") {\n cx.marked = \"keyword\"\n return cont(statement)\n } else {\n return cont(pushlex(\"stat\"), maybelabel);\n }\n }\n if (type == \"switch\") return cont(pushlex(\"form\"), parenExpr, expect(\"{\"), pushlex(\"}\", \"switch\"), pushblockcontext,\n block, poplex, poplex, popcontext);\n if (type == \"case\") return cont(expression, expect(\":\"));\n if (type == \"default\") return cont(expect(\":\"));\n if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);\n if (type == \"export\") return cont(pushlex(\"stat\"), afterExport, poplex);\n if (type == \"import\") return cont(pushlex(\"stat\"), afterImport, poplex);\n if (type == \"async\") return cont(statement)\n if (value == \"@\") return cont(expression, statement)\n return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n }\n function maybeCatchBinding(type) {\n if (type == \"(\") return cont(funarg, expect(\")\"))\n }\n function expression(type, value) {\n return expressionInner(type, value, false);\n }\n function expressionNoComma(type, value) {\n return expressionInner(type, value, true);\n }\n function parenExpr(type) {\n if (type != \"(\") return pass()\n return cont(pushlex(\")\"), expression, expect(\")\"), poplex)\n }\n function expressionInner(type, value, noComma) {\n if (cx.state.fatArrowAt == cx.stream.start) {\n var body = noComma ? arrowBodyNoComma : arrowBody;\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, expect(\"=>\"), body, popcontext);\n else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n }\n\n var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n if (type == \"function\") return cont(functiondef, maybeop);\n if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), classExpression, poplex); }\n if (type == \"keyword c\" || type == \"async\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeop);\n if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n if (type == \"quasi\") return pass(quasi, maybeop);\n if (type == \"new\") return cont(maybeTarget(noComma));\n if (type == \"import\") return cont(expression);\n return cont();\n }\n function maybeexpression(type) {\n if (type.match(/[;\\}\\)\\],]/)) return pass();\n return pass(expression);\n }\n\n function maybeoperatorComma(type, value) {\n if (type == \",\") return cont(expression);\n return maybeoperatorNoComma(type, value, false);\n }\n function maybeoperatorNoComma(type, value, noComma) {\n var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n var expr = noComma == false ? expression : expressionNoComma;\n if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n if (type == \"operator\") {\n if (/\\+\\+|--/.test(value) || isTS && value == \"!\") return cont(me);\n if (isTS && value == \"<\" && cx.stream.match(/^([^>]|<.*?>)*>\\s*\\(/, false))\n return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, me);\n if (value == \"?\") return cont(expression, expect(\":\"), expr);\n return cont(expr);\n }\n if (type == \"quasi\") { return pass(quasi, me); }\n if (type == \";\") return;\n if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n if (type == \".\") return cont(property, me);\n if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n if (isTS && value == \"as\") { cx.marked = \"keyword\"; return cont(typeexpr, me) }\n if (type == \"regexp\") {\n cx.state.lastType = cx.marked = \"operator\"\n cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)\n return cont(expr)\n }\n }\n function quasi(type, value) {\n if (type != \"quasi\") return pass();\n if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n return cont(expression, continueQuasi);\n }\n function continueQuasi(type) {\n if (type == \"}\") {\n cx.marked = \"string-2\";\n cx.state.tokenize = tokenQuasi;\n return cont(quasi);\n }\n }\n function arrowBody(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expression);\n }\n function arrowBodyNoComma(type) {\n findFatArrow(cx.stream, cx.state);\n return pass(type == \"{\" ? statement : expressionNoComma);\n }\n function maybeTarget(noComma) {\n return function(type) {\n if (type == \".\") return cont(noComma ? targetNoComma : target);\n else if (type == \"variable\" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)\n else return pass(noComma ? expressionNoComma : expression);\n };\n }\n function target(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorComma); }\n }\n function targetNoComma(_, value) {\n if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorNoComma); }\n }\n function maybelabel(type) {\n if (type == \":\") return cont(poplex, statement);\n return pass(maybeoperatorComma, expect(\";\"), poplex);\n }\n function property(type) {\n if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n }\n function objprop(type, value) {\n if (type == \"async\") {\n cx.marked = \"property\";\n return cont(objprop);\n } else if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n if (value == \"get\" || value == \"set\") return cont(getterSetter);\n var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params\n if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\\s*:\\s*/, false)))\n cx.state.fatArrowAt = cx.stream.pos + m[0].length\n return cont(afterprop);\n } else if (type == \"number\" || type == \"string\") {\n cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n return cont(afterprop);\n } else if (type == \"jsonld-keyword\") {\n return cont(afterprop);\n } else if (isTS && isModifier(value)) {\n cx.marked = \"keyword\"\n return cont(objprop)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), afterprop);\n } else if (type == \"spread\") {\n return cont(expressionNoComma, afterprop);\n } else if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(objprop);\n } else if (type == \":\") {\n return pass(afterprop)\n }\n }\n function getterSetter(type) {\n if (type != \"variable\") return pass(afterprop);\n cx.marked = \"property\";\n return cont(functiondef);\n }\n function afterprop(type) {\n if (type == \":\") return cont(expressionNoComma);\n if (type == \"(\") return pass(functiondef);\n }\n function commasep(what, end, sep) {\n function proceed(type, value) {\n if (sep ? sep.indexOf(type) > -1 : type == \",\") {\n var lex = cx.state.lexical;\n if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n return cont(function(type, value) {\n if (type == end || value == end) return pass()\n return pass(what)\n }, proceed);\n }\n if (type == end || value == end) return cont();\n return cont(expect(end));\n }\n return function(type, value) {\n if (type == end || value == end) return cont();\n return pass(what, proceed);\n };\n }\n function contCommasep(what, end, info) {\n for (var i = 3; i < arguments.length; i++)\n cx.cc.push(arguments[i]);\n return cont(pushlex(end, info), commasep(what, end), poplex);\n }\n function block(type) {\n if (type == \"}\") return cont();\n return pass(statement, block);\n }\n function maybetype(type, value) {\n if (isTS) {\n if (type == \":\") return cont(typeexpr);\n if (value == \"?\") return cont(maybetype);\n }\n }\n function mayberettype(type) {\n if (isTS && type == \":\") {\n if (cx.stream.match(/^\\s*\\w+\\s+is\\b/, false)) return cont(expression, isKW, typeexpr)\n else return cont(typeexpr)\n }\n }\n function isKW(_, value) {\n if (value == \"is\") {\n cx.marked = \"keyword\"\n return cont()\n }\n }\n function typeexpr(type, value) {\n if (value == \"keyof\" || value == \"typeof\") {\n cx.marked = \"keyword\"\n return cont(value == \"keyof\" ? typeexpr : expressionNoComma)\n }\n if (type == \"variable\" || value == \"void\") {\n cx.marked = \"type\"\n return cont(afterType)\n }\n if (type == \"string\" || type == \"number\" || type == \"atom\") return cont(afterType);\n if (type == \"[\") return cont(pushlex(\"]\"), commasep(typeexpr, \"]\", \",\"), poplex, afterType)\n if (type == \"{\") return cont(pushlex(\"}\"), commasep(typeprop, \"}\", \",;\"), poplex, afterType)\n if (type == \"(\") return cont(commasep(typearg, \")\"), maybeReturnType)\n if (type == \"<\") return cont(commasep(typeexpr, \">\"), typeexpr)\n }\n function maybeReturnType(type) {\n if (type == \"=>\") return cont(typeexpr)\n }\n function typeprop(type, value) {\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\"\n return cont(typeprop)\n } else if (value == \"?\") {\n return cont(typeprop)\n } else if (type == \":\") {\n return cont(typeexpr)\n } else if (type == \"[\") {\n return cont(expression, maybetype, expect(\"]\"), typeprop)\n }\n }\n function typearg(type, value) {\n if (type == \"variable\" && cx.stream.match(/^\\s*[?:]/, false) || value == \"?\") return cont(typearg)\n if (type == \":\") return cont(typeexpr)\n return pass(typeexpr)\n }\n function afterType(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n if (value == \"|\" || type == \".\" || value == \"&\") return cont(typeexpr)\n if (type == \"[\") return cont(expect(\"]\"), afterType)\n if (value == \"extends\" || value == \"implements\") { cx.marked = \"keyword\"; return cont(typeexpr) }\n }\n function maybeTypeArgs(_, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n }\n function typeparam() {\n return pass(typeexpr, maybeTypeDefault)\n }\n function maybeTypeDefault(_, value) {\n if (value == \"=\") return cont(typeexpr)\n }\n function vardef(_, value) {\n if (value == \"enum\") {cx.marked = \"keyword\"; return cont(enumdef)}\n return pass(pattern, maybetype, maybeAssign, vardefCont);\n }\n function pattern(type, value) {\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(pattern) }\n if (type == \"variable\") { register(value); return cont(); }\n if (type == \"spread\") return cont(pattern);\n if (type == \"[\") return contCommasep(pattern, \"]\");\n if (type == \"{\") return contCommasep(proppattern, \"}\");\n }\n function proppattern(type, value) {\n if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n register(value);\n return cont(maybeAssign);\n }\n if (type == \"variable\") cx.marked = \"property\";\n if (type == \"spread\") return cont(pattern);\n if (type == \"}\") return pass();\n return cont(expect(\":\"), pattern, maybeAssign);\n }\n function maybeAssign(_type, value) {\n if (value == \"=\") return cont(expressionNoComma);\n }\n function vardefCont(type) {\n if (type == \",\") return cont(vardef);\n }\n function maybeelse(type, value) {\n if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n }\n function forspec(type, value) {\n if (value == \"await\") return cont(forspec);\n if (type == \"(\") return cont(pushlex(\")\"), forspec1, expect(\")\"), poplex);\n }\n function forspec1(type) {\n if (type == \"var\") return cont(vardef, expect(\";\"), forspec2);\n if (type == \";\") return cont(forspec2);\n if (type == \"variable\") return cont(formaybeinof);\n return pass(expression, expect(\";\"), forspec2);\n }\n function formaybeinof(_type, value) {\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return cont(maybeoperatorComma, forspec2);\n }\n function forspec2(type, value) {\n if (type == \";\") return cont(forspec3);\n if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression); }\n return pass(expression, expect(\";\"), forspec3);\n }\n function forspec3(type) {\n if (type != \")\") cont(expression);\n }\n function functiondef(type, value) {\n if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n if (type == \"variable\") {register(value); return cont(functiondef);}\n if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, statement, popcontext);\n if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondef)\n }\n function funarg(type, value) {\n if (value == \"@\") cont(expression, funarg)\n if (type == \"spread\") return cont(funarg);\n if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(funarg); }\n return pass(pattern, maybetype, maybeAssign);\n }\n function classExpression(type, value) {\n // Class expressions may have an optional name.\n if (type == \"variable\") return className(type, value);\n return classNameAfter(type, value);\n }\n function className(type, value) {\n if (type == \"variable\") {register(value); return cont(classNameAfter);}\n }\n function classNameAfter(type, value) {\n if (value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, classNameAfter)\n if (value == \"extends\" || value == \"implements\" || (isTS && type == \",\")) {\n if (value == \"implements\") cx.marked = \"keyword\";\n return cont(isTS ? typeexpr : expression, classNameAfter);\n }\n if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n }\n function classBody(type, value) {\n if (type == \"async\" ||\n (type == \"variable\" &&\n (value == \"static\" || value == \"get\" || value == \"set\" || (isTS && isModifier(value))) &&\n cx.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/, false))) {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \"variable\" || cx.style == \"keyword\") {\n cx.marked = \"property\";\n return cont(isTS ? classfield : functiondef, classBody);\n }\n if (type == \"[\")\n return cont(expression, maybetype, expect(\"]\"), isTS ? classfield : functiondef, classBody)\n if (value == \"*\") {\n cx.marked = \"keyword\";\n return cont(classBody);\n }\n if (type == \";\") return cont(classBody);\n if (type == \"}\") return cont();\n if (value == \"@\") return cont(expression, classBody)\n }\n function classfield(type, value) {\n if (value == \"?\") return cont(classfield)\n if (type == \":\") return cont(typeexpr, maybeAssign)\n if (value == \"=\") return cont(expressionNoComma)\n return pass(functiondef)\n }\n function afterExport(type, value) {\n if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n if (type == \"{\") return cont(commasep(exportField, \"}\"), maybeFrom, expect(\";\"));\n return pass(statement);\n }\n function exportField(type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(expect(\"variable\")); }\n if (type == \"variable\") return pass(expressionNoComma, exportField);\n }\n function afterImport(type) {\n if (type == \"string\") return cont();\n if (type == \"(\") return pass(expression);\n return pass(importSpec, maybeMoreImports, maybeFrom);\n }\n function importSpec(type, value) {\n if (type == \"{\") return contCommasep(importSpec, \"}\");\n if (type == \"variable\") register(value);\n if (value == \"*\") cx.marked = \"keyword\";\n return cont(maybeAs);\n }\n function maybeMoreImports(type) {\n if (type == \",\") return cont(importSpec, maybeMoreImports)\n }\n function maybeAs(_type, value) {\n if (value == \"as\") { cx.marked = \"keyword\"; return cont(importSpec); }\n }\n function maybeFrom(_type, value) {\n if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n }\n function arrayLiteral(type) {\n if (type == \"]\") return cont();\n return pass(commasep(expressionNoComma, \"]\"));\n }\n function enumdef() {\n return pass(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), commasep(enummember, \"}\"), poplex, poplex)\n }\n function enummember() {\n return pass(pattern, maybeAssign);\n }\n\n function isContinuedStatement(state, textAfter) {\n return state.lastType == \"operator\" || state.lastType == \",\" ||\n isOperatorChar.test(textAfter.charAt(0)) ||\n /[,.]/.test(textAfter.charAt(0));\n }\n\n function expressionAllowed(stream, state, backUp) {\n return state.tokenize == tokenBase &&\n /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(state.lastType) ||\n (state.lastType == \"quasi\" && /\\{\\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))\n }\n\n // Interface\n\n return {\n startState: function(basecolumn) {\n var state = {\n tokenize: tokenBase,\n lastType: \"sof\",\n cc: [],\n lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n localVars: parserConfig.localVars,\n context: parserConfig.localVars && new Context(null, null, false),\n indented: basecolumn || 0\n };\n if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n state.globalVars = parserConfig.globalVars;\n return state;\n },\n\n token: function(stream, state) {\n if (stream.sol()) {\n if (!state.lexical.hasOwnProperty(\"align\"))\n state.lexical.align = false;\n state.indented = stream.indentation();\n findFatArrow(stream, state);\n }\n if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n var style = state.tokenize(stream, state);\n if (type == \"comment\") return style;\n state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n return parseJS(state, style, type, content, stream);\n },\n\n indent: function(state, textAfter) {\n if (state.tokenize == tokenComment) return CodeMirror.Pass;\n if (state.tokenize != tokenBase) return 0;\n var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top\n // Kludge to prevent 'maybelse' from blocking lexical scope pops\n if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n var c = state.cc[i];\n if (c == poplex) lexical = lexical.prev;\n else if (c != maybeelse) break;\n }\n while ((lexical.type == \"stat\" || lexical.type == \"form\") &&\n (firstChar == \"}\" || ((top = state.cc[state.cc.length - 1]) &&\n (top == maybeoperatorComma || top == maybeoperatorNoComma) &&\n !/^[,\\.=+\\-*:?[\\(]/.test(textAfter))))\n lexical = lexical.prev;\n if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n lexical = lexical.prev;\n var type = lexical.type, closing = firstChar == type;\n\n if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info.length + 1 : 0);\n else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n else if (type == \"form\") return lexical.indented + indentUnit;\n else if (type == \"stat\")\n return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);\n else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n else return lexical.indented + (closing ? 0 : indentUnit);\n },\n\n electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n blockCommentStart: jsonMode ? null : \"/*\",\n blockCommentEnd: jsonMode ? null : \"*/\",\n blockCommentContinue: jsonMode ? null : \" * \",\n lineComment: jsonMode ? null : \"//\",\n fold: \"brace\",\n closeBrackets: \"()[]{}''\\\"\\\"``\",\n\n helperType: jsonMode ? \"json\" : \"javascript\",\n jsonldMode: jsonldMode,\n jsonMode: jsonMode,\n\n expressionAllowed: expressionAllowed,\n\n skipExpression: function(state) {\n var top = state.cc[state.cc.length - 1]\n if (top == expression || top == expressionNoComma) state.cc.pop()\n }\n };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/x-json\", {name: \"javascript\", json: true});\nCodeMirror.defineMIME(\"application/ld+json\", {name: \"javascript\", jsonld: true});\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n\n},{\"../../lib/codemirror\":14}],18:[function(require,module,exports){\n// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nvar htmlConfig = {\n autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true,\n 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true,\n 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true,\n 'track': true, 'wbr': true, 'menuitem': true},\n implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true,\n 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true,\n 'th': true, 'tr': true},\n contextGrabbers: {\n 'dd': {'dd': true, 'dt': true},\n 'dt': {'dd': true, 'dt': true},\n 'li': {'li': true},\n 'option': {'option': true, 'optgroup': true},\n 'optgroup': {'optgroup': true},\n 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true,\n 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true,\n 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true,\n 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true,\n 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true},\n 'rp': {'rp': true, 'rt': true},\n 'rt': {'rp': true, 'rt': true},\n 'tbody': {'tbody': true, 'tfoot': true},\n 'td': {'td': true, 'th': true},\n 'tfoot': {'tbody': true},\n 'th': {'td': true, 'th': true},\n 'thead': {'tbody': true, 'tfoot': true},\n 'tr': {'tr': true}\n },\n doNotIndent: {\"pre\": true},\n allowUnquoted: true,\n allowMissing: true,\n caseFold: true\n}\n\nvar xmlConfig = {\n autoSelfClosers: {},\n implicitlyClosed: {},\n contextGrabbers: {},\n doNotIndent: {},\n allowUnquoted: false,\n allowMissing: false,\n allowMissingTagName: false,\n caseFold: false\n}\n\nCodeMirror.defineMode(\"xml\", function(editorConf, config_) {\n var indentUnit = editorConf.indentUnit\n var config = {}\n var defaults = config_.htmlMode ? htmlConfig : xmlConfig\n for (var prop in defaults) config[prop] = defaults[prop]\n for (var prop in config_) config[prop] = config_[prop]\n\n // Return variables for tokenizers\n var type, setStyle;\n\n function inText(stream, state) {\n function chain(parser) {\n state.tokenize = parser;\n return parser(stream, state);\n }\n\n var ch = stream.next();\n if (ch == \"<\") {\n if (stream.eat(\"!\")) {\n if (stream.eat(\"[\")) {\n if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\n else return null;\n } else if (stream.match(\"--\")) {\n return chain(inBlock(\"comment\", \"-->\"));\n } else if (stream.match(\"DOCTYPE\", true, true)) {\n stream.eatWhile(/[\\w\\._\\-]/);\n return chain(doctype(1));\n } else {\n return null;\n }\n } else if (stream.eat(\"?\")) {\n stream.eatWhile(/[\\w\\._\\-]/);\n state.tokenize = inBlock(\"meta\", \"?>\");\n return \"meta\";\n } else {\n type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\n state.tokenize = inTag;\n return \"tag bracket\";\n }\n } else if (ch == \"&\") {\n var ok;\n if (stream.eat(\"#\")) {\n if (stream.eat(\"x\")) {\n ok = stream.eatWhile(/[a-fA-F\\d]/) && stream.eat(\";\");\n } else {\n ok = stream.eatWhile(/[\\d]/) && stream.eat(\";\");\n }\n } else {\n ok = stream.eatWhile(/[\\w\\.\\-:]/) && stream.eat(\";\");\n }\n return ok ? \"atom\" : \"error\";\n } else {\n stream.eatWhile(/[^&<]/);\n return null;\n }\n }\n inText.isInText = true;\n\n function inTag(stream, state) {\n var ch = stream.next();\n if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\n state.tokenize = inText;\n type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\n return \"tag bracket\";\n } else if (ch == \"=\") {\n type = \"equals\";\n return null;\n } else if (ch == \"<\") {\n state.tokenize = inText;\n state.state = baseState;\n state.tagName = state.tagStart = null;\n var next = state.tokenize(stream, state);\n return next ? next + \" tag error\" : \"tag error\";\n } else if (/[\\'\\\"]/.test(ch)) {\n state.tokenize = inAttribute(ch);\n state.stringStartCol = stream.column();\n return state.tokenize(stream, state);\n } else {\n stream.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/);\n return \"word\";\n }\n }\n\n function inAttribute(quote) {\n var closure = function(stream, state) {\n while (!stream.eol()) {\n if (stream.next() == quote) {\n state.tokenize = inTag;\n break;\n }\n }\n return \"string\";\n };\n closure.isInAttribute = true;\n return closure;\n }\n\n function inBlock(style, terminator) {\n return function(stream, state) {\n while (!stream.eol()) {\n if (stream.match(terminator)) {\n state.tokenize = inText;\n break;\n }\n stream.next();\n }\n return style;\n }\n }\n\n function doctype(depth) {\n return function(stream, state) {\n var ch;\n while ((ch = stream.next()) != null) {\n if (ch == \"<\") {\n state.tokenize = doctype(depth + 1);\n return state.tokenize(stream, state);\n } else if (ch == \">\") {\n if (depth == 1) {\n state.tokenize = inText;\n break;\n } else {\n state.tokenize = doctype(depth - 1);\n return state.tokenize(stream, state);\n }\n }\n }\n return \"meta\";\n };\n }\n\n function Context(state, tagName, startOfLine) {\n this.prev = state.context;\n this.tagName = tagName;\n this.indent = state.indented;\n this.startOfLine = startOfLine;\n if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent))\n this.noIndent = true;\n }\n function popContext(state) {\n if (state.context) state.context = state.context.prev;\n }\n function maybePopContext(state, nextTagName) {\n var parentTagName;\n while (true) {\n if (!state.context) {\n return;\n }\n parentTagName = state.context.tagName;\n if (!config.contextGrabbers.hasOwnProperty(parentTagName) ||\n !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) {\n return;\n }\n popContext(state);\n }\n }\n\n function baseState(type, stream, state) {\n if (type == \"openTag\") {\n state.tagStart = stream.column();\n return tagNameState;\n } else if (type == \"closeTag\") {\n return closeTagNameState;\n } else {\n return baseState;\n }\n }\n function tagNameState(type, stream, state) {\n if (type == \"word\") {\n state.tagName = stream.current();\n setStyle = \"tag\";\n return attrState;\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return attrState(type, stream, state);\n } else {\n setStyle = \"error\";\n return tagNameState;\n }\n }\n function closeTagNameState(type, stream, state) {\n if (type == \"word\") {\n var tagName = stream.current();\n if (state.context && state.context.tagName != tagName &&\n config.implicitlyClosed.hasOwnProperty(state.context.tagName))\n popContext(state);\n if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) {\n setStyle = \"tag\";\n return closeState;\n } else {\n setStyle = \"tag error\";\n return closeStateErr;\n }\n } else if (config.allowMissingTagName && type == \"endTag\") {\n setStyle = \"tag bracket\";\n return closeState(type, stream, state);\n } else {\n setStyle = \"error\";\n return closeStateErr;\n }\n }\n\n function closeState(type, _stream, state) {\n if (type != \"endTag\") {\n setStyle = \"error\";\n return closeState;\n }\n popContext(state);\n return baseState;\n }\n function closeStateErr(type, stream, state) {\n setStyle = \"error\";\n return closeState(type, stream, state);\n }\n\n function attrState(type, _stream, state) {\n if (type == \"word\") {\n setStyle = \"attribute\";\n return attrEqState;\n } else if (type == \"endTag\" || type == \"selfcloseTag\") {\n var tagName = state.tagName, tagStart = state.tagStart;\n state.tagName = state.tagStart = null;\n if (type == \"selfcloseTag\" ||\n config.autoSelfClosers.hasOwnProperty(tagName)) {\n maybePopContext(state, tagName);\n } else {\n maybePopContext(state, tagName);\n state.context = new Context(state, tagName, tagStart == state.indented);\n }\n return baseState;\n }\n setStyle = \"error\";\n return attrState;\n }\n function attrEqState(type, stream, state) {\n if (type == \"equals\") return attrValueState;\n if (!config.allowMissing) setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrValueState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n if (type == \"word\" && config.allowUnquoted) {setStyle = \"string\"; return attrState;}\n setStyle = \"error\";\n return attrState(type, stream, state);\n }\n function attrContinuedState(type, stream, state) {\n if (type == \"string\") return attrContinuedState;\n return attrState(type, stream, state);\n }\n\n return {\n startState: function(baseIndent) {\n var state = {tokenize: inText,\n state: baseState,\n indented: baseIndent || 0,\n tagName: null, tagStart: null,\n context: null}\n if (baseIndent != null) state.baseIndent = baseIndent\n return state\n },\n\n token: function(stream, state) {\n if (!state.tagName && stream.sol())\n state.indented = stream.indentation();\n\n if (stream.eatSpace()) return null;\n type = null;\n var style = state.tokenize(stream, state);\n if ((style || type) && style != \"comment\") {\n setStyle = null;\n state.state = state.state(type || style, stream, state);\n if (setStyle)\n style = setStyle == \"error\" ? style + \" error\" : setStyle;\n }\n return style;\n },\n\n indent: function(state, textAfter, fullLine) {\n var context = state.context;\n // Indent multi-line strings (e.g. css).\n if (state.tokenize.isInAttribute) {\n if (state.tagStart == state.indented)\n return state.stringStartCol + 1;\n else\n return state.indented + indentUnit;\n }\n if (context && context.noIndent) return CodeMirror.Pass;\n if (state.tokenize != inTag && state.tokenize != inText)\n return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\n // Indent the starts of attribute names.\n if (state.tagName) {\n if (config.multilineTagIndentPastTag !== false)\n return state.tagStart + state.tagName.length + 2;\n else\n return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1);\n }\n if (config.alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\n var tagAfter = textAfter && /^<(\\/)?([\\w_:\\.-]*)/.exec(textAfter);\n if (tagAfter && tagAfter[1]) { // Closing tag spotted\n while (context) {\n if (context.tagName == tagAfter[2]) {\n context = context.prev;\n break;\n } else if (config.implicitlyClosed.hasOwnProperty(context.tagName)) {\n context = context.prev;\n } else {\n break;\n }\n }\n } else if (tagAfter) { // Opening tag spotted\n while (context) {\n var grabbers = config.contextGrabbers[context.tagName];\n if (grabbers && grabbers.hasOwnProperty(tagAfter[2]))\n context = context.prev;\n else\n break;\n }\n }\n while (context && context.prev && !context.startOfLine)\n context = context.prev;\n if (context) return context.indent + indentUnit;\n else return state.baseIndent || 0;\n },\n\n electricInput: /<\\/[\\s\\w:]+>$/,\n blockCommentStart: \"<!--\",\n blockCommentEnd: \"-->\",\n\n configuration: config.htmlMode ? \"html\" : \"xml\",\n helperType: config.htmlMode ? \"html\" : \"xml\",\n\n skipAttribute: function(state) {\n if (state.state == attrValueState)\n state.state = attrState\n }\n };\n});\n\nCodeMirror.defineMIME(\"text/xml\", \"xml\");\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\nif (!CodeMirror.mimeModes.hasOwnProperty(\"text/html\"))\n CodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\n\n});\n\n},{\"../../lib/codemirror\":14}],19:[function(require,module,exports){\n(function(global,factory){if(typeof define === 'function' && define.amd){define(['exports'],factory);}else if(typeof exports !== 'undefined'){factory(exports);}else {var mod={exports:{}};factory(mod.exports);global.decko = mod.exports;}})(this,function(exports){'use strict';exports.__esModule = true;var EMPTY={};var HOP=Object.prototype.hasOwnProperty;var fns={memoize:function memoize(fn){var opt=arguments.length <= 1 || arguments[1] === undefined?EMPTY:arguments[1];var cache=opt.cache || {};return function(){for(var _len=arguments.length,a=Array(_len),_key=0;_key < _len;_key++) {a[_key] = arguments[_key];}var k=String(a[0]);if(opt.caseSensitive === false)k = k.toLowerCase();return HOP.call(cache,k)?cache[k]:cache[k] = fn.apply(this,a);};},debounce:function debounce(fn,opts){if(typeof opts === 'function'){var p=fn;fn = opts;opts = p;}var delay=opts && opts.delay || opts || 0,args=undefined,context=undefined,timer=undefined;return function(){for(var _len2=arguments.length,a=Array(_len2),_key2=0;_key2 < _len2;_key2++) {a[_key2] = arguments[_key2];}args = a;context = this;if(!timer)timer = setTimeout(function(){fn.apply(context,args);args = context = timer = null;},delay);};},bind:function bind(target,key,_ref){var fn=_ref.value;return {configurable:true,get:function get(){var value=fn.bind(this);Object.defineProperty(this,key,{value:value,configurable:true,writable:true});return value;}};}};var memoize=multiMethod(fns.memoize),debounce=multiMethod(fns.debounce),bind=multiMethod(function(f,c){return f.bind(c);},function(){return fns.bind;});exports.memoize = memoize;exports.debounce = debounce;exports.bind = bind;exports['default'] = {memoize:memoize,debounce:debounce,bind:bind};function multiMethod(inner,deco){deco = deco || inner.decorate || decorator(inner);var d=deco();return function(){for(var _len3=arguments.length,args=Array(_len3),_key3=0;_key3 < _len3;_key3++) {args[_key3] = arguments[_key3];}var l=args.length;return (l < 2?deco:l > 2?d:inner).apply(undefined,args);};}function decorator(fn){return function(opt){return typeof opt === 'function'?fn(opt):function(target,key,desc){desc.value = fn(desc.value,opt,target,key,desc);};};}});\n\n\n},{}],20:[function(require,module,exports){\nfunction dlv(t,e,n,l){for(l=0,e=e.split?e.split(\".\"):e;t&&l<e.length;)t=t[e[l++]];return void 0===t?n:t}function linkState(t,e,n){var l=e.split(\".\"),r=t.__lsc||(t.__lsc={});return r[e+n]||(r[e+n]=function(e){for(var r=e&&e.target||this,a={},i=a,o=\"string\"==typeof n?dlv(e,n):r.nodeName?r.type.match(/^che|rad/)?r.checked:r.value:e,s=0;s<l.length-1;s++)i=i[l[s]]||(i[l[s]]=!s&&t.state[l[s]]||{});i[l[s]]=o,t.setState(a)})}module.exports=linkState;\n\n\n},{}],21:[function(require,module,exports){\n!function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):e.preactRenderToString=n()}(this,function(){var e=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,n=Object.keys||function(e){var n=[];for(var t in e)e.hasOwnProperty(t)&&n.push(t);return n},t=function(e){return String(e).replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\").replace(/\"/g,\""\")},r=function(e,n){return String(e).replace(/(\\n+)/g,\"$1\"+(n||\"\\t\"))},o=function(e,n,t){return String(e).length>(n||40)||!t&&-1!==String(e).indexOf(\"\\n\")||-1!==String(e).indexOf(\"<\")},i={};function a(n){var t=\"\";for(var r in n){var o=n[r];null!=o&&(t&&(t+=\" \"),t+=i[r]||(i[r]=r.replace(/([A-Z])/g,\"-$1\").toLowerCase()),t+=\": \",t+=o,\"number\"==typeof o&&!1===e.test(r)&&(t+=\"px\"),t+=\";\")}return t||void 0}function l(e,n){for(var t in n)e[t]=n[t];return e}var f={shallow:!0},c=[],u=/^(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)$/;s.render=s;function s(e,i,f,p,d){if(null==e||\"boolean\"==typeof e)return\"\";var h=e.nodeName,g=e.attributes,v=!1;i=i||{};var m,b=(f=f||{}).pretty,y=\"string\"==typeof b?b:\"\\t\";if(\"object\"!=typeof e&&!h)return t(e);if(\"function\"==typeof h){if(v=!0,!f.shallow||!p&&!1!==f.renderRootComponent){var x,w=function(e){var n=e.nodeName.defaultProps,t=l({},n||e.attributes);return n&&l(t,e.attributes),e.children&&(t.children=e.children),t}(e);if(h.prototype&&\"function\"==typeof h.prototype.render){var k=new h(w,i);k._disable=k.__x=!0,k.props=w,k.context=i,k.componentWillMount&&k.componentWillMount(),x=k.render(k.props,k.state,k.context),k.getChildContext&&(i=l(l({},i),k.getChildContext()))}else x=h(w,i);return s(x,i,f,!1!==f.shallowHighOrder)}h=(m=h).displayName||m!==Function&&m.name||function(e){var n=(Function.prototype.toString.call(e).match(/^\\s*function\\s+([^( ]+)/)||\"\")[1];if(!n){for(var t=-1,r=c.length;r--;)if(c[r]===e){t=r;break}t<0&&(t=c.push(e)-1),n=\"UnnamedComponent\"+t}return n}(m)}var O,C=\"\";if(g){var S=n(g);f&&!0===f.sortAttributes&&S.sort();for(var j=0;j<S.length;j++){var $=S[j],_=g[$];if(\"children\"!==$&&(!$.match(/[\\s\\n\\\\/='\"\\0<>]/)&&(f&&f.allAttributes||\"key\"!==$&&\"ref\"!==$))){if(\"className\"===$){if(g.class)continue;$=\"class\"}else d&&$.match(/^xlink:?./)&&($=$.toLowerCase().replace(/^xlink:?/,\"xlink:\"));\"style\"===$&&_&&\"object\"==typeof _&&(_=a(_));var H=f.attributeHook&&f.attributeHook($,_,i,f,v);if(H||\"\"===H)C+=H;else if(\"dangerouslySetInnerHTML\"===$)O=_&&_.__html;else if((_||0===_||\"\"===_)&&\"function\"!=typeof _){if(!(!0!==_&&\"\"!==_||(_=$,f&&f.xml))){C+=\" \"+$;continue}C+=\" \"+$+'=\"'+t(_)+'\"'}}}}var N=C.replace(/^\\n\\s*/,\" \");if(N===C||~N.indexOf(\"\\n\")?b&&~C.indexOf(\"\\n\")&&(C+=\"\\n\"):C=N,C=\"<\"+h+C+\">\",h.match(/[\\s\\n\\\\/='\"\\0<>]/))throw C;var A=h.match(u);A&&(C=C.replace(/>$/,\" />\"));var L=[];if(O)b&&o(O)&&(O=\"\\n\"+y+r(O,y)),C+=O;else if(e.children){for(var M=~C.indexOf(\"\\n\"),R=0;R<e.children.length;R++){var F=e.children[R];if(null!=F&&!1!==F){var P=s(F,i,f,!0,\"svg\"===h||\"foreignObject\"!==h&&d);!M&&b&&o(P)&&(M=!0),P&&L.push(P)}}if(b&&M)for(var T=L.length;T--;)L[T]=\"\\n\"+y+r(L[T],y)}if(L.length)C+=L.join(\"\");else if(f&&f.xml)return C.substring(0,C.length-1)+\" />\";return A||(b&&~C.indexOf(\"\\n\")&&(C+=\"\\n\"),C+=\"</\"+h+\">\"),C}return s.shallowRender=function(e,n){return s(e,n,f)},s});\n\n\n},{}],22:[function(require,module,exports){\n!function() {\n 'use strict';\n function h(nodeName, attributes) {\n var lastSimple, child, simple, i, children = EMPTY_CHILDREN;\n for (i = arguments.length; i-- > 2; ) stack.push(arguments[i]);\n if (attributes && null != attributes.children) {\n if (!stack.length) stack.push(attributes.children);\n delete attributes.children;\n }\n while (stack.length) if ((child = stack.pop()) && void 0 !== child.pop) for (i = child.length; i--; ) stack.push(child[i]); else {\n if ('boolean' == typeof child) child = null;\n if (simple = 'function' != typeof nodeName) if (null == child) child = ''; else if ('number' == typeof child) child = String(child); else if ('string' != typeof child) simple = !1;\n if (simple && lastSimple) children[children.length - 1] += child; else if (children === EMPTY_CHILDREN) children = [ child ]; else children.push(child);\n lastSimple = simple;\n }\n var p = new VNode();\n p.nodeName = nodeName;\n p.children = children;\n p.attributes = null == attributes ? void 0 : attributes;\n p.key = null == attributes ? void 0 : attributes.key;\n if (void 0 !== options.vnode) options.vnode(p);\n return p;\n }\n function extend(obj, props) {\n for (var i in props) obj[i] = props[i];\n return obj;\n }\n function cloneElement(vnode, props) {\n return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);\n }\n function enqueueRender(component) {\n if (!component.__d && (component.__d = !0) && 1 == items.push(component)) (options.debounceRendering || defer)(rerender);\n }\n function rerender() {\n var p, list = items;\n items = [];\n while (p = list.pop()) if (p.__d) renderComponent(p);\n }\n function isSameNodeType(node, vnode, hydrating) {\n if ('string' == typeof vnode || 'number' == typeof vnode) return void 0 !== node.splitText;\n if ('string' == typeof vnode.nodeName) return !node._componentConstructor && isNamedNode(node, vnode.nodeName); else return hydrating || node._componentConstructor === vnode.nodeName;\n }\n function isNamedNode(node, nodeName) {\n return node.__n === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();\n }\n function getNodeProps(vnode) {\n var props = extend({}, vnode.attributes);\n props.children = vnode.children;\n var defaultProps = vnode.nodeName.defaultProps;\n if (void 0 !== defaultProps) for (var i in defaultProps) if (void 0 === props[i]) props[i] = defaultProps[i];\n return props;\n }\n function createNode(nodeName, isSvg) {\n var node = isSvg ? document.createElementNS('http://www.w3.org/2000/svg', nodeName) : document.createElement(nodeName);\n node.__n = nodeName;\n return node;\n }\n function removeNode(node) {\n var parentNode = node.parentNode;\n if (parentNode) parentNode.removeChild(node);\n }\n function setAccessor(node, name, old, value, isSvg) {\n if ('className' === name) name = 'class';\n if ('key' === name) ; else if ('ref' === name) {\n if (old) old(null);\n if (value) value(node);\n } else if ('class' === name && !isSvg) node.className = value || ''; else if ('style' === name) {\n if (!value || 'string' == typeof value || 'string' == typeof old) node.style.cssText = value || '';\n if (value && 'object' == typeof value) {\n if ('string' != typeof old) for (var i in old) if (!(i in value)) node.style[i] = '';\n for (var i in value) node.style[i] = 'number' == typeof value[i] && !1 === IS_NON_DIMENSIONAL.test(i) ? value[i] + 'px' : value[i];\n }\n } else if ('dangerouslySetInnerHTML' === name) {\n if (value) node.innerHTML = value.__html || '';\n } else if ('o' == name[0] && 'n' == name[1]) {\n var useCapture = name !== (name = name.replace(/Capture$/, ''));\n name = name.toLowerCase().substring(2);\n if (value) {\n if (!old) node.addEventListener(name, eventProxy, useCapture);\n } else node.removeEventListener(name, eventProxy, useCapture);\n (node.__l || (node.__l = {}))[name] = value;\n } else if ('list' !== name && 'type' !== name && !isSvg && name in node) {\n try {\n node[name] = null == value ? '' : value;\n } catch (e) {}\n if ((null == value || !1 === value) && 'spellcheck' != name) node.removeAttribute(name);\n } else {\n var ns = isSvg && name !== (name = name.replace(/^xlink:?/, ''));\n if (null == value || !1 === value) if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase()); else node.removeAttribute(name); else if ('function' != typeof value) if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value); else node.setAttribute(name, value);\n }\n }\n function eventProxy(e) {\n return this.__l[e.type](options.event && options.event(e) || e);\n }\n function flushMounts() {\n var c;\n while (c = mounts.pop()) {\n if (options.afterMount) options.afterMount(c);\n if (c.componentDidMount) c.componentDidMount();\n }\n }\n function diff(dom, vnode, context, mountAll, parent, componentRoot) {\n if (!diffLevel++) {\n isSvgMode = null != parent && void 0 !== parent.ownerSVGElement;\n hydrating = null != dom && !('__preactattr_' in dom);\n }\n var ret = idiff(dom, vnode, context, mountAll, componentRoot);\n if (parent && ret.parentNode !== parent) parent.appendChild(ret);\n if (!--diffLevel) {\n hydrating = !1;\n if (!componentRoot) flushMounts();\n }\n return ret;\n }\n function idiff(dom, vnode, context, mountAll, componentRoot) {\n var out = dom, prevSvgMode = isSvgMode;\n if (null == vnode || 'boolean' == typeof vnode) vnode = '';\n if ('string' == typeof vnode || 'number' == typeof vnode) {\n if (dom && void 0 !== dom.splitText && dom.parentNode && (!dom._component || componentRoot)) {\n if (dom.nodeValue != vnode) dom.nodeValue = vnode;\n } else {\n out = document.createTextNode(vnode);\n if (dom) {\n if (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n recollectNodeTree(dom, !0);\n }\n }\n out.__preactattr_ = !0;\n return out;\n }\n var vnodeName = vnode.nodeName;\n if ('function' == typeof vnodeName) return buildComponentFromVNode(dom, vnode, context, mountAll);\n isSvgMode = 'svg' === vnodeName ? !0 : 'foreignObject' === vnodeName ? !1 : isSvgMode;\n vnodeName = String(vnodeName);\n if (!dom || !isNamedNode(dom, vnodeName)) {\n out = createNode(vnodeName, isSvgMode);\n if (dom) {\n while (dom.firstChild) out.appendChild(dom.firstChild);\n if (dom.parentNode) dom.parentNode.replaceChild(out, dom);\n recollectNodeTree(dom, !0);\n }\n }\n var fc = out.firstChild, props = out.__preactattr_, vchildren = vnode.children;\n if (null == props) {\n props = out.__preactattr_ = {};\n for (var a = out.attributes, i = a.length; i--; ) props[a[i].name] = a[i].value;\n }\n if (!hydrating && vchildren && 1 === vchildren.length && 'string' == typeof vchildren[0] && null != fc && void 0 !== fc.splitText && null == fc.nextSibling) {\n if (fc.nodeValue != vchildren[0]) fc.nodeValue = vchildren[0];\n } else if (vchildren && vchildren.length || null != fc) innerDiffNode(out, vchildren, context, mountAll, hydrating || null != props.dangerouslySetInnerHTML);\n diffAttributes(out, vnode.attributes, props);\n isSvgMode = prevSvgMode;\n return out;\n }\n function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {\n var j, c, f, vchild, child, originalChildren = dom.childNodes, children = [], keyed = {}, keyedLen = 0, min = 0, len = originalChildren.length, childrenLen = 0, vlen = vchildren ? vchildren.length : 0;\n if (0 !== len) for (var i = 0; i < len; i++) {\n var _child = originalChildren[i], props = _child.__preactattr_, key = vlen && props ? _child._component ? _child._component.__k : props.key : null;\n if (null != key) {\n keyedLen++;\n keyed[key] = _child;\n } else if (props || (void 0 !== _child.splitText ? isHydrating ? _child.nodeValue.trim() : !0 : isHydrating)) children[childrenLen++] = _child;\n }\n if (0 !== vlen) for (var i = 0; i < vlen; i++) {\n vchild = vchildren[i];\n child = null;\n var key = vchild.key;\n if (null != key) {\n if (keyedLen && void 0 !== keyed[key]) {\n child = keyed[key];\n keyed[key] = void 0;\n keyedLen--;\n }\n } else if (min < childrenLen) for (j = min; j < childrenLen; j++) if (void 0 !== children[j] && isSameNodeType(c = children[j], vchild, isHydrating)) {\n child = c;\n children[j] = void 0;\n if (j === childrenLen - 1) childrenLen--;\n if (j === min) min++;\n break;\n }\n child = idiff(child, vchild, context, mountAll);\n f = originalChildren[i];\n if (child && child !== dom && child !== f) if (null == f) dom.appendChild(child); else if (child === f.nextSibling) removeNode(f); else dom.insertBefore(child, f);\n }\n if (keyedLen) for (var i in keyed) if (void 0 !== keyed[i]) recollectNodeTree(keyed[i], !1);\n while (min <= childrenLen) if (void 0 !== (child = children[childrenLen--])) recollectNodeTree(child, !1);\n }\n function recollectNodeTree(node, unmountOnly) {\n var component = node._component;\n if (component) unmountComponent(component); else {\n if (null != node.__preactattr_ && node.__preactattr_.ref) node.__preactattr_.ref(null);\n if (!1 === unmountOnly || null == node.__preactattr_) removeNode(node);\n removeChildren(node);\n }\n }\n function removeChildren(node) {\n node = node.lastChild;\n while (node) {\n var next = node.previousSibling;\n recollectNodeTree(node, !0);\n node = next;\n }\n }\n function diffAttributes(dom, attrs, old) {\n var name;\n for (name in old) if ((!attrs || null == attrs[name]) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode);\n for (name in attrs) if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);\n }\n function createComponent(Ctor, props, context) {\n var inst, i = recyclerComponents.length;\n if (Ctor.prototype && Ctor.prototype.render) {\n inst = new Ctor(props, context);\n Component.call(inst, props, context);\n } else {\n inst = new Component(props, context);\n inst.constructor = Ctor;\n inst.render = doRender;\n }\n while (i--) if (recyclerComponents[i].constructor === Ctor) {\n inst.__b = recyclerComponents[i].__b;\n recyclerComponents.splice(i, 1);\n return inst;\n }\n return inst;\n }\n function doRender(props, state, context) {\n return this.constructor(props, context);\n }\n function setComponentProps(component, props, renderMode, context, mountAll) {\n if (!component.__x) {\n component.__x = !0;\n component.__r = props.ref;\n component.__k = props.key;\n delete props.ref;\n delete props.key;\n if (void 0 === component.constructor.getDerivedStateFromProps) if (!component.base || mountAll) {\n if (component.componentWillMount) component.componentWillMount();\n } else if (component.componentWillReceiveProps) component.componentWillReceiveProps(props, context);\n if (context && context !== component.context) {\n if (!component.__c) component.__c = component.context;\n component.context = context;\n }\n if (!component.__p) component.__p = component.props;\n component.props = props;\n component.__x = !1;\n if (0 !== renderMode) if (1 === renderMode || !1 !== options.syncComponentUpdates || !component.base) renderComponent(component, 1, mountAll); else enqueueRender(component);\n if (component.__r) component.__r(component);\n }\n }\n function renderComponent(component, renderMode, mountAll, isChild) {\n if (!component.__x) {\n var rendered, inst, cbase, props = component.props, state = component.state, context = component.context, previousProps = component.__p || props, previousState = component.__s || state, previousContext = component.__c || context, isUpdate = component.base, nextBase = component.__b, initialBase = isUpdate || nextBase, initialChildComponent = component._component, skip = !1, snapshot = previousContext;\n if (component.constructor.getDerivedStateFromProps) {\n state = extend(extend({}, state), component.constructor.getDerivedStateFromProps(props, state));\n component.state = state;\n }\n if (isUpdate) {\n component.props = previousProps;\n component.state = previousState;\n component.context = previousContext;\n if (2 !== renderMode && component.shouldComponentUpdate && !1 === component.shouldComponentUpdate(props, state, context)) skip = !0; else if (component.componentWillUpdate) component.componentWillUpdate(props, state, context);\n component.props = props;\n component.state = state;\n component.context = context;\n }\n component.__p = component.__s = component.__c = component.__b = null;\n component.__d = !1;\n if (!skip) {\n rendered = component.render(props, state, context);\n if (component.getChildContext) context = extend(extend({}, context), component.getChildContext());\n if (isUpdate && component.getSnapshotBeforeUpdate) snapshot = component.getSnapshotBeforeUpdate(previousProps, previousState);\n var toUnmount, base, childComponent = rendered && rendered.nodeName;\n if ('function' == typeof childComponent) {\n var childProps = getNodeProps(rendered);\n inst = initialChildComponent;\n if (inst && inst.constructor === childComponent && childProps.key == inst.__k) setComponentProps(inst, childProps, 1, context, !1); else {\n toUnmount = inst;\n component._component = inst = createComponent(childComponent, childProps, context);\n inst.__b = inst.__b || nextBase;\n inst.__u = component;\n setComponentProps(inst, childProps, 0, context, !1);\n renderComponent(inst, 1, mountAll, !0);\n }\n base = inst.base;\n } else {\n cbase = initialBase;\n toUnmount = initialChildComponent;\n if (toUnmount) cbase = component._component = null;\n if (initialBase || 1 === renderMode) {\n if (cbase) cbase._component = null;\n base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0);\n }\n }\n if (initialBase && base !== initialBase && inst !== initialChildComponent) {\n var baseParent = initialBase.parentNode;\n if (baseParent && base !== baseParent) {\n baseParent.replaceChild(base, initialBase);\n if (!toUnmount) {\n initialBase._component = null;\n recollectNodeTree(initialBase, !1);\n }\n }\n }\n if (toUnmount) unmountComponent(toUnmount);\n component.base = base;\n if (base && !isChild) {\n var componentRef = component, t = component;\n while (t = t.__u) (componentRef = t).base = base;\n base._component = componentRef;\n base._componentConstructor = componentRef.constructor;\n }\n }\n if (!isUpdate || mountAll) mounts.unshift(component); else if (!skip) {\n if (component.componentDidUpdate) component.componentDidUpdate(previousProps, previousState, snapshot);\n if (options.afterUpdate) options.afterUpdate(component);\n }\n while (component.__h.length) component.__h.pop().call(component);\n if (!diffLevel && !isChild) flushMounts();\n }\n }\n function buildComponentFromVNode(dom, vnode, context, mountAll) {\n var c = dom && dom._component, originalComponent = c, oldDom = dom, isDirectOwner = c && dom._componentConstructor === vnode.nodeName, isOwner = isDirectOwner, props = getNodeProps(vnode);\n while (c && !isOwner && (c = c.__u)) isOwner = c.constructor === vnode.nodeName;\n if (c && isOwner && (!mountAll || c._component)) {\n setComponentProps(c, props, 3, context, mountAll);\n dom = c.base;\n } else {\n if (originalComponent && !isDirectOwner) {\n unmountComponent(originalComponent);\n dom = oldDom = null;\n }\n c = createComponent(vnode.nodeName, props, context);\n if (dom && !c.__b) {\n c.__b = dom;\n oldDom = null;\n }\n setComponentProps(c, props, 1, context, mountAll);\n dom = c.base;\n if (oldDom && dom !== oldDom) {\n oldDom._component = null;\n recollectNodeTree(oldDom, !1);\n }\n }\n return dom;\n }\n function unmountComponent(component) {\n if (options.beforeUnmount) options.beforeUnmount(component);\n var base = component.base;\n component.__x = !0;\n if (component.componentWillUnmount) component.componentWillUnmount();\n component.base = null;\n var inner = component._component;\n if (inner) unmountComponent(inner); else if (base) {\n if (base.__preactattr_ && base.__preactattr_.ref) base.__preactattr_.ref(null);\n component.__b = base;\n removeNode(base);\n recyclerComponents.push(component);\n removeChildren(base);\n }\n if (component.__r) component.__r(null);\n }\n function Component(props, context) {\n this.__d = !0;\n this.context = context;\n this.props = props;\n this.state = this.state || {};\n this.__h = [];\n }\n function render(vnode, parent, merge) {\n return diff(merge, vnode, {}, !1, parent, !1);\n }\n var VNode = function() {};\n var options = {};\n var stack = [];\n var EMPTY_CHILDREN = [];\n var defer = 'function' == typeof Promise ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;\n var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n var items = [];\n var mounts = [];\n var diffLevel = 0;\n var isSvgMode = !1;\n var hydrating = !1;\n var recyclerComponents = [];\n extend(Component.prototype, {\n setState: function(state, callback) {\n var prev = this.__s = this.state;\n if ('function' == typeof state) state = state(prev, this.props);\n this.state = extend(extend({}, prev), state);\n if (callback) this.__h.push(callback);\n enqueueRender(this);\n },\n forceUpdate: function(callback) {\n if (callback) this.__h.push(callback);\n renderComponent(this, 2);\n },\n render: function() {}\n });\n var preact = {\n h: h,\n createElement: h,\n cloneElement: cloneElement,\n Component: Component,\n render: render,\n rerender: rerender,\n options: options\n };\n if ('undefined' != typeof module) module.exports = preact; else self.preact = preact;\n}();\n\n},{}],23:[function(require,module,exports){\nfunction tlite(getTooltipOpts) {\n document.addEventListener('mouseover', function (e) {\n var el = e.target;\n var opts = getTooltipOpts(el);\n\n if (!opts) {\n el = el.parentElement;\n opts = el && getTooltipOpts(el);\n }\n\n opts && tlite.show(el, opts, true);\n });\n}\n\ntlite.show = function (el, opts, isAuto) {\n var fallbackAttrib = 'data-tlite';\n opts = opts || {};\n\n (el.tooltip || Tooltip(el, opts)).show();\n\n function Tooltip(el, opts) {\n var tooltipEl;\n var showTimer;\n var text;\n\n el.addEventListener('mousedown', autoHide);\n el.addEventListener('mouseleave', autoHide);\n\n function show() {\n text = el.title || el.getAttribute(fallbackAttrib) || text;\n el.title = '';\n el.setAttribute(fallbackAttrib, '');\n text && !showTimer && (showTimer = setTimeout(fadeIn, isAuto ? 150 : 1))\n }\n\n function autoHide() {\n tlite.hide(el, true);\n }\n\n function hide(isAutoHiding) {\n if (isAuto === isAutoHiding) {\n showTimer = clearTimeout(showTimer);\n var parent = tooltipEl && tooltipEl.parentNode;\n parent && parent.removeChild(tooltipEl);\n tooltipEl = undefined;\n }\n }\n\n function fadeIn() {\n if (!tooltipEl) {\n tooltipEl = createTooltip(el, text, opts);\n }\n }\n\n return el.tooltip = {\n show: show,\n hide: hide\n };\n }\n\n function createTooltip(el, text, opts) {\n var tooltipEl = document.createElement('span');\n var grav = opts.grav || el.getAttribute('data-tlite') || 'n';\n\n tooltipEl.innerHTML = text;\n\n el.appendChild(tooltipEl);\n\n var vertGrav = grav[0] || '';\n var horzGrav = grav[1] || '';\n\n function positionTooltip() {\n tooltipEl.className = 'tlite ' + 'tlite-' + vertGrav + horzGrav;\n\n var arrowSize = 10;\n var top = el.offsetTop;\n var left = el.offsetLeft;\n\n if (tooltipEl.offsetParent === el) {\n top = left = 0;\n }\n\n var width = el.offsetWidth;\n var height = el.offsetHeight;\n var tooltipHeight = tooltipEl.offsetHeight;\n var tooltipWidth = tooltipEl.offsetWidth;\n var centerEl = left + (width / 2);\n\n tooltipEl.style.top = (\n vertGrav === 's' ? (top - tooltipHeight - arrowSize) :\n vertGrav === 'n' ? (top + height + arrowSize) :\n (top + (height / 2) - (tooltipHeight / 2))\n ) + 'px';\n\n tooltipEl.style.left = (\n horzGrav === 'w' ? left :\n horzGrav === 'e' ? left + width - tooltipWidth :\n vertGrav === 'w' ? (left + width + arrowSize) :\n vertGrav === 'e' ? (left - tooltipWidth - arrowSize) :\n (centerEl - tooltipWidth / 2)\n ) + 'px';\n }\n\n positionTooltip();\n\n var rect = tooltipEl.getBoundingClientRect();\n\n if (vertGrav === 's' && rect.top < 0) {\n vertGrav = 'n';\n positionTooltip();\n } else if (vertGrav === 'n' && rect.bottom > window.innerHeight) {\n vertGrav = 's';\n positionTooltip();\n } else if (vertGrav === 'e' && rect.left < 0) {\n vertGrav = 'w';\n positionTooltip();\n } else if (vertGrav === 'w' && rect.right > window.innerWidth) {\n vertGrav = 'e';\n positionTooltip();\n }\n\n tooltipEl.className += ' tlite-visible';\n\n return tooltipEl;\n }\n};\n\ntlite.hide = function (el, isAuto) {\n el.tooltip && el.tooltip.hide(isAuto);\n};\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = tlite;\n}\n\n},{}]},{},[2]);\n; })();"]}
\ No newline at end of file
--- /dev/null
+(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+function getFieldValues(form, fieldName, evt) {
+ var values = [];
+ var inputs = form.querySelectorAll('input[name="' + fieldName + '"], select[name="' + fieldName + '"], textarea[name="' + fieldName + '"], button[name="' + fieldName + '"]');
+
+ for (var i = 0; i < inputs.length; i++) {
+ var input = inputs[i];
+ var type = input.getAttribute("type").toLowerCase();
+
+ if ((type === "radio" || type === "checkbox") && !input.checked) {
+ continue;
+ }
+
+ // ignore buttons which are not clicked (in case there's more than one button with same name)
+ if (type === 'button' || type === 'submit' || input.tagName === 'BUTTON') {
+ if ((!evt || evt.target !== input) && form.dataset[fieldName] !== input.value) {
+ continue;
+ }
+
+ form.dataset[fieldName] = input.value;
+ }
+
+ values.push(input.value);
+ }
+
+ // default to an empty string
+ // can be used to show or hide an element when a field is empty or has not been set
+ // Usage: data-show-if="FIELDNAME:"
+ if (values.length == 0) {
+ values.push("");
+ }
+
+ return values;
+}
+
+function findForm(element) {
+ var bubbleElement = element;
+
+ while (bubbleElement.parentElement) {
+ bubbleElement = bubbleElement.parentElement;
+
+ if (bubbleElement.tagName === 'FORM') {
+ return bubbleElement;
+ }
+ }
+
+ return null;
+}
+
+function toggleElement(el, evt) {
+ var show = !!el.getAttribute('data-show-if');
+ var conditions = show ? el.getAttribute('data-show-if').split(':') : el.getAttribute('data-hide-if').split(':');
+ var fieldName = conditions[0];
+ var expectedValues = (conditions.length > 1 ? conditions[1] : "*").split('|');
+ var form = findForm(el);
+ var values = getFieldValues(form, fieldName, evt);
+
+ // determine whether condition is met
+ var conditionMet = false;
+ for (var i = 0; i < values.length; i++) {
+ var value = values[i];
+
+ // condition is met when value is in array of expected values OR expected values contains a wildcard and value is not empty
+ conditionMet = expectedValues.indexOf(value) > -1 || expectedValues.indexOf('*') > -1 && value.length > 0;
+
+ if (conditionMet) {
+ break;
+ }
+ }
+
+ // toggle element display
+ if (show) {
+ el.style.display = conditionMet ? '' : 'none';
+ } else {
+ el.style.display = conditionMet ? 'none' : '';
+ }
+
+ // find all inputs inside this element and toggle [required] attr (to prevent HTML5 validation on hidden elements)
+ var inputs = el.querySelectorAll('input, select, textarea');
+ [].forEach.call(inputs, function (el) {
+ if ((conditionMet || show) && el.getAttribute('data-was-required')) {
+ el.required = true;
+ el.removeAttribute('data-was-required');
+ }
+
+ if ((!conditionMet || !show) && el.required) {
+ el.setAttribute('data-was-required', "true");
+ el.required = false;
+ }
+ });
+}
+
+// evaluate conditional elements globally
+function evaluate() {
+ var elements = document.querySelectorAll('.hf-form [data-show-if], .hf-form [data-hide-if]');
+ [].forEach.call(elements, toggleElement);
+}
+
+// re-evaluate conditional elements for change events on forms
+function handleInputEvent(evt) {
+ if (!evt.target || !evt.target.form || evt.target.form.className.indexOf('hf-form') < 0) {
+ return;
+ }
+
+ var form = evt.target.form;
+ var elements = form.querySelectorAll('[data-show-if], [data-hide-if]');
+ [].forEach.call(elements, function (el) {
+ return toggleElement(el, evt);
+ });
+}
+
+exports.default = {
+ 'init': function init() {
+ document.addEventListener('click', handleInputEvent, true);
+ document.addEventListener('keyup', handleInputEvent, true);
+ document.addEventListener('change', handleInputEvent, true);
+ document.addEventListener('hf-refresh', evaluate, true);
+ window.addEventListener('load', evaluate);
+ evaluate();
+ }
+};
+
+},{}],2:[function(require,module,exports){
+'use strict';
+
+function getButtonText(button) {
+ return button.innerHTML ? button.innerHTML : button.value;
+}
+
+function setButtonText(button, text) {
+ button.innerHTML ? button.innerHTML = text : button.value = text;
+}
+
+function Loader(formElement) {
+ this.form = formElement;
+ this.button = formElement.querySelector('input[type="submit"], button[type="submit"]');
+ this.loadingInterval = 0;
+ this.character = '\xB7';
+
+ if (this.button) {
+ this.originalButton = this.button.cloneNode(true);
+ }
+}
+
+Loader.prototype.setCharacter = function (c) {
+ this.character = c;
+};
+
+Loader.prototype.start = function () {
+ if (this.button) {
+ // loading text
+ var loadingText = this.button.getAttribute('data-loading-text');
+ if (loadingText) {
+ setButtonText(this.button, loadingText);
+ return;
+ }
+
+ // Show AJAX loader
+ var styles = window.getComputedStyle(this.button);
+ this.button.style.width = styles.width;
+ setButtonText(this.button, this.character);
+ this.loadingInterval = window.setInterval(this.tick.bind(this), 500);
+ } else {
+ this.form.style.opacity = '0.5';
+ }
+};
+
+Loader.prototype.tick = function () {
+ // count chars, start over at 5
+ var text = getButtonText(this.button);
+ var loadingChar = this.character;
+ setButtonText(this.button, text.length >= 5 ? loadingChar : text + " " + loadingChar);
+};
+
+Loader.prototype.stop = function () {
+ if (this.button) {
+ this.button.style.width = this.originalButton.style.width;
+ var text = getButtonText(this.originalButton);
+ setButtonText(this.button, text);
+ window.clearInterval(this.loadingInterval);
+ } else {
+ this.form.style.opacity = '';
+ }
+};
+
+module.exports = Loader;
+
+},{}],3:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
+
+var populate = require('populate.js');
+
+// parse ?query=string with array support. no nesting.
+function parseUrlParams(q) {
+ var params = new URLSearchParams(q);
+ var obj = {};
+ var _iteratorNormalCompletion = true;
+ var _didIteratorError = false;
+ var _iteratorError = undefined;
+
+ try {
+ for (var _iterator = params.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
+ var _step$value = _slicedToArray(_step.value, 2),
+ name = _step$value[0],
+ value = _step$value[1];
+
+ if (name.substr(name.length - 2) === "[]") {
+ var arrName = name.substr(0, name.length - 2);
+ obj[arrName] = obj[arrName] || [];
+ obj[arrName].push(value);
+ } else {
+ obj[name] = value;
+ }
+ }
+ } catch (err) {
+ _didIteratorError = true;
+ _iteratorError = err;
+ } finally {
+ try {
+ if (!_iteratorNormalCompletion && _iterator.return) {
+ _iterator.return();
+ }
+ } finally {
+ if (_didIteratorError) {
+ throw _iteratorError;
+ }
+ }
+ }
+
+ return obj;
+}
+
+function init() {
+ // only act on form elements outputted by HTML Forms
+ var forms = [].filter.call(document.forms, function (f) {
+ return f.className.indexOf('hf-form') > -1;
+ });
+ if (!forms) {
+ return;
+ }
+
+ // fill each form with data from URL params
+ var data = parseUrlParams(window.location.search);
+ forms.forEach(function (f) {
+ populate(f, data);
+ });
+}
+
+exports.default = { init: init };
+
+},{"populate.js":7}],4:[function(require,module,exports){
+"use strict";
+
+/* window.CustomEvent polyfill for IE */
+(function () {
+ if (typeof window.CustomEvent === "function") return false;
+
+ function CustomEvent(event, params) {
+ params = params || { bubbles: false, cancelable: false, detail: undefined };
+ var evt = document.createEvent('CustomEvent');
+ evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+ return evt;
+ }
+
+ CustomEvent.prototype = window.Event.prototype;
+
+ window.CustomEvent = CustomEvent;
+})();
+
+},{}],5:[function(require,module,exports){
+"use strict";
+
+var _formPrefiller = require('./form-prefiller.js');
+
+var _formPrefiller2 = _interopRequireDefault(_formPrefiller);
+
+var _conditionality = require('./conditionality.js');
+
+var _conditionality2 = _interopRequireDefault(_conditionality);
+
+require('./polyfills/custom-event.js');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var shim = require('es5-shim');
+var Loader = require('./form-loading-indicator.js');
+var vars = window.hf_js_vars || { ajax_url: window.location.href };
+var EventEmitter = require('wolfy87-eventemitter');
+var events = new EventEmitter();
+
+function cleanFormMessages(formEl) {
+ var messageElements = formEl.querySelectorAll('.hf-message');
+ [].forEach.call(messageElements, function (el) {
+ el.parentNode.removeChild(el);
+ });
+}
+
+function addFormMessage(formEl, message) {
+ var txtElement = document.createElement('p');
+ txtElement.className = 'hf-message hf-message-' + message.type;
+ txtElement.innerHTML = message.text;
+ formEl.insertBefore(txtElement, formEl.lastElementChild.nextElementSibling);
+}
+
+function handleSubmitEvents(e) {
+ var formEl = e.target;
+ if (formEl.className.indexOf('hf-form') < 0) {
+ return;
+ }
+
+ // always prevent default (because regular submit doesn't work for HTML Forms)
+ e.preventDefault();
+ submitForm(formEl);
+}
+
+function submitForm(formEl) {
+ cleanFormMessages(formEl);
+ emitEvent('submit', formEl);
+
+ var formData = new FormData(formEl);
+ [].forEach.call(formEl.querySelectorAll('[data-was-required=true]'), function (el) {
+ formData.append('_was_required[]', el.getAttribute('name'));
+ });
+
+ var request = new XMLHttpRequest();
+ request.onreadystatechange = createRequestHandler(formEl);
+ request.open('POST', vars.ajax_url, true);
+ request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+ request.send(formData);
+ request = null;
+}
+
+function emitEvent(eventName, element) {
+ // browser event API: formElement.on('hf-success', ..)
+ element.dispatchEvent(new CustomEvent("hf-" + eventName));
+
+ // custom events API: html_forms.on('success', ..)
+ events.emit(eventName, [element]);
+}
+
+function createRequestHandler(formEl) {
+ var loader = new Loader(formEl);
+ loader.start();
+
+ return function () {
+ // are we done?
+ if (this.readyState === 4) {
+ var response = void 0;
+ loader.stop();
+
+ if (this.status >= 200 && this.status < 400) {
+ try {
+ response = JSON.parse(this.responseText);
+ } catch (error) {
+ console.log('HTML Forms: failed to parse AJAX response.\n\nError: "' + error + '"');
+ return;
+ }
+
+ emitEvent('submitted', formEl);
+
+ if (response.error) {
+ emitEvent('error', formEl);
+ } else {
+ emitEvent('success', formEl);
+ }
+
+ // Show form message
+ if (response.message) {
+ addFormMessage(formEl, response.message);
+ }
+
+ // Should we hide form?
+ if (response.hide_form) {
+ formEl.querySelector('.hf-fields-wrap').style.display = 'none';
+ }
+
+ // Should we redirect?
+ if (response.redirect_url) {
+ window.location = response.redirect_url;
+ }
+
+ // clear form
+ if (!response.error) {
+ formEl.reset();
+ }
+ } else {
+ // Server error :(
+ console.log(this.responseText);
+ }
+ }
+ };
+}
+
+document.addEventListener('submit', handleSubmitEvents, false); // useCapture=false to ensure we bubble upwards (and thus can cancel propagation)
+_conditionality2.default.init();
+_formPrefiller2.default.init();
+
+window.html_forms = {
+ 'on': events.on.bind(events),
+ 'submit': submitForm
+};
+
+},{"./conditionality.js":1,"./form-loading-indicator.js":2,"./form-prefiller.js":3,"./polyfills/custom-event.js":4,"es5-shim":6,"wolfy87-eventemitter":8}],6:[function(require,module,exports){
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
+ */
+
+// vim: ts=4 sts=4 sw=4 expandtab
+
+// Add semicolon to prevent IIFE from being passed as argument to concatenated code.
+;
+
+// UMD (Universal Module Definition)
+// see https://github.com/umdjs/umd/blob/master/templates/returnExports.js
+(function (root, factory) {
+ 'use strict';
+
+ /* global define, exports, module */
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(factory);
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like enviroments that support module.exports,
+ // like Node.
+ module.exports = factory();
+ } else {
+ // Browser globals (root is window)
+ root.returnExports = factory();
+ }
+}(this, function () {
+ /**
+ * Brings an environment as close to ECMAScript 5 compliance
+ * as is possible with the facilities of erstwhile engines.
+ *
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+ * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/
+ */
+
+ // Shortcut to an often accessed properties, in order to avoid multiple
+ // dereference that costs universally. This also holds a reference to known-good
+ // functions.
+ var $Array = Array;
+ var ArrayPrototype = $Array.prototype;
+ var $Object = Object;
+ var ObjectPrototype = $Object.prototype;
+ var $Function = Function;
+ var FunctionPrototype = $Function.prototype;
+ var $String = String;
+ var StringPrototype = $String.prototype;
+ var $Number = Number;
+ var NumberPrototype = $Number.prototype;
+ var array_slice = ArrayPrototype.slice;
+ var array_splice = ArrayPrototype.splice;
+ var array_push = ArrayPrototype.push;
+ var array_unshift = ArrayPrototype.unshift;
+ var array_concat = ArrayPrototype.concat;
+ var array_join = ArrayPrototype.join;
+ var call = FunctionPrototype.call;
+ var apply = FunctionPrototype.apply;
+ var max = Math.max;
+ var min = Math.min;
+
+ // Having a toString local variable name breaks in Opera so use to_string.
+ var to_string = ObjectPrototype.toString;
+
+ /* global Symbol */
+ /* eslint-disable one-var-declaration-per-line, no-redeclare, max-statements-per-line */
+ var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+ var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, constructorRegex = /^\s*class /, isES6ClassFn = function isES6ClassFn(value) { try { var fnStr = fnToStr.call(value); var singleStripped = fnStr.replace(/\/\/.*\n/g, ''); var multiStripped = singleStripped.replace(/\/\*[.\s\S]*\*\//g, ''); var spaceStripped = multiStripped.replace(/\n/mg, ' ').replace(/ {2}/g, ' '); return constructorRegex.test(spaceStripped); } catch (e) { return false; /* not a function */ } }, tryFunctionObject = function tryFunctionObject(value) { try { if (isES6ClassFn(value)) { return false; } fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]', isCallable = function isCallable(value) { if (!value) { return false; } if (typeof value !== 'function' && typeof value !== 'object') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } if (isES6ClassFn(value)) { return false; } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };
+
+ var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };
+ var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };
+ /* eslint-enable one-var-declaration-per-line, no-redeclare, max-statements-per-line */
+
+ /* inlined from http://npmjs.com/define-properties */
+ var supportsDescriptors = $Object.defineProperty && (function () {
+ try {
+ var obj = {};
+ $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
+ for (var _ in obj) { // jscs:ignore disallowUnusedVariables
+ return false;
+ }
+ return obj.x === obj;
+ } catch (e) { /* this is ES3 */
+ return false;
+ }
+ }());
+ var defineProperties = (function (has) {
+ // Define configurable, writable, and non-enumerable props
+ // if they don't exist.
+ var defineProperty;
+ if (supportsDescriptors) {
+ defineProperty = function (object, name, method, forceAssign) {
+ if (!forceAssign && (name in object)) {
+ return;
+ }
+ $Object.defineProperty(object, name, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: method
+ });
+ };
+ } else {
+ defineProperty = function (object, name, method, forceAssign) {
+ if (!forceAssign && (name in object)) {
+ return;
+ }
+ object[name] = method;
+ };
+ }
+ return function defineProperties(object, map, forceAssign) {
+ for (var name in map) {
+ if (has.call(map, name)) {
+ defineProperty(object, name, map[name], forceAssign);
+ }
+ }
+ };
+ }(ObjectPrototype.hasOwnProperty));
+
+ //
+ // Util
+ // ======
+ //
+
+ /* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */
+ var isPrimitive = function isPrimitive(input) {
+ var type = typeof input;
+ return input === null || (type !== 'object' && type !== 'function');
+ };
+
+ var isActualNaN = $Number.isNaN || function isActualNaN(x) {
+ return x !== x;
+ };
+
+ var ES = {
+ // ES5 9.4
+ // http://es5.github.com/#x9.4
+ // http://jsperf.com/to-integer
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */
+ ToInteger: function ToInteger(num) {
+ var n = +num;
+ if (isActualNaN(n)) {
+ n = 0;
+ } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
+ n = (n > 0 || -1) * Math.floor(Math.abs(n));
+ }
+ return n;
+ },
+
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */
+ ToPrimitive: function ToPrimitive(input) {
+ var val, valueOf, toStr;
+ if (isPrimitive(input)) {
+ return input;
+ }
+ valueOf = input.valueOf;
+ if (isCallable(valueOf)) {
+ val = valueOf.call(input);
+ if (isPrimitive(val)) {
+ return val;
+ }
+ }
+ toStr = input.toString;
+ if (isCallable(toStr)) {
+ val = toStr.call(input);
+ if (isPrimitive(val)) {
+ return val;
+ }
+ }
+ throw new TypeError();
+ },
+
+ // ES5 9.9
+ // http://es5.github.com/#x9.9
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */
+ ToObject: function (o) {
+ if (o == null) { // this matches both null and undefined
+ throw new TypeError("can't convert " + o + ' to object');
+ }
+ return $Object(o);
+ },
+
+ /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */
+ ToUint32: function ToUint32(x) {
+ return x >>> 0;
+ }
+ };
+
+ //
+ // Function
+ // ========
+ //
+
+ // ES-5 15.3.4.5
+ // http://es5.github.com/#x15.3.4.5
+
+ var Empty = function Empty() {};
+
+ defineProperties(FunctionPrototype, {
+ bind: function bind(that) { // .length is 1
+ // 1. Let Target be the this value.
+ var target = this;
+ // 2. If IsCallable(Target) is false, throw a TypeError exception.
+ if (!isCallable(target)) {
+ throw new TypeError('Function.prototype.bind called on incompatible ' + target);
+ }
+ // 3. Let A be a new (possibly empty) internal list of all of the
+ // argument values provided after thisArg (arg1, arg2 etc), in order.
+ // XXX slicedArgs will stand in for "A" if used
+ var args = array_slice.call(arguments, 1); // for normal call
+ // 4. Let F be a new native ECMAScript object.
+ // 11. Set the [[Prototype]] internal property of F to the standard
+ // built-in Function prototype object as specified in 15.3.3.1.
+ // 12. Set the [[Call]] internal property of F as described in
+ // 15.3.4.5.1.
+ // 13. Set the [[Construct]] internal property of F as described in
+ // 15.3.4.5.2.
+ // 14. Set the [[HasInstance]] internal property of F as described in
+ // 15.3.4.5.3.
+ var bound;
+ var binder = function () {
+
+ if (this instanceof bound) {
+ // 15.3.4.5.2 [[Construct]]
+ // When the [[Construct]] internal method of a function object,
+ // F that was created using the bind function is called with a
+ // list of arguments ExtraArgs, the following steps are taken:
+ // 1. Let target be the value of F's [[TargetFunction]]
+ // internal property.
+ // 2. If target has no [[Construct]] internal method, a
+ // TypeError exception is thrown.
+ // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Construct]] internal
+ // method of target providing args as the arguments.
+
+ var result = apply.call(
+ target,
+ this,
+ array_concat.call(args, array_slice.call(arguments))
+ );
+ if ($Object(result) === result) {
+ return result;
+ }
+ return this;
+
+ } else {
+ // 15.3.4.5.1 [[Call]]
+ // When the [[Call]] internal method of a function object, F,
+ // which was created using the bind function is called with a
+ // this value and a list of arguments ExtraArgs, the following
+ // steps are taken:
+ // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+ // property.
+ // 2. Let boundThis be the value of F's [[BoundThis]] internal
+ // property.
+ // 3. Let target be the value of F's [[TargetFunction]] internal
+ // property.
+ // 4. Let args be a new list containing the same values as the
+ // list boundArgs in the same order followed by the same
+ // values as the list ExtraArgs in the same order.
+ // 5. Return the result of calling the [[Call]] internal method
+ // of target providing boundThis as the this value and
+ // providing args as the arguments.
+
+ // equiv: target.call(this, ...boundArgs, ...args)
+ return apply.call(
+ target,
+ that,
+ array_concat.call(args, array_slice.call(arguments))
+ );
+
+ }
+
+ };
+
+ // 15. If the [[Class]] internal property of Target is "Function", then
+ // a. Let L be the length property of Target minus the length of A.
+ // b. Set the length own property of F to either 0 or L, whichever is
+ // larger.
+ // 16. Else set the length own property of F to 0.
+
+ var boundLength = max(0, target.length - args.length);
+
+ // 17. Set the attributes of the length own property of F to the values
+ // specified in 15.3.5.1.
+ var boundArgs = [];
+ for (var i = 0; i < boundLength; i++) {
+ array_push.call(boundArgs, '$' + i);
+ }
+
+ // XXX Build a dynamic function with desired amount of arguments is the only
+ // way to set the length property of a function.
+ // In environments where Content Security Policies enabled (Chrome extensions,
+ // for ex.) all use of eval or Function costructor throws an exception.
+ // However in all of these environments Function.prototype.bind exists
+ // and so this code will never be executed.
+ bound = $Function('binder', 'return function (' + array_join.call(boundArgs, ',') + '){ return binder.apply(this, arguments); }')(binder);
+
+ if (target.prototype) {
+ Empty.prototype = target.prototype;
+ bound.prototype = new Empty();
+ // Clean up dangling references.
+ Empty.prototype = null;
+ }
+
+ // TODO
+ // 18. Set the [[Extensible]] internal property of F to true.
+
+ // TODO
+ // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+ // 20. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+ // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+ // false.
+ // 21. Call the [[DefineOwnProperty]] internal method of F with
+ // arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+ // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+ // and false.
+
+ // TODO
+ // NOTE Function objects created using Function.prototype.bind do not
+ // have a prototype property or the [[Code]], [[FormalParameters]], and
+ // [[Scope]] internal properties.
+ // XXX can't delete prototype in pure-js.
+
+ // 22. Return F.
+ return bound;
+ }
+ });
+
+ // _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+ // use it in defining shortcuts.
+ var owns = call.bind(ObjectPrototype.hasOwnProperty);
+ var toStr = call.bind(ObjectPrototype.toString);
+ var arraySlice = call.bind(array_slice);
+ var arraySliceApply = apply.bind(array_slice);
+ /* globals document */
+ if (typeof document === 'object' && document && document.documentElement) {
+ try {
+ arraySlice(document.documentElement.childNodes);
+ } catch (e) {
+ var origArraySlice = arraySlice;
+ var origArraySliceApply = arraySliceApply;
+ arraySlice = function arraySliceIE(arr) {
+ var r = [];
+ var i = arr.length;
+ while (i-- > 0) {
+ r[i] = arr[i];
+ }
+ return origArraySliceApply(r, origArraySlice(arguments, 1));
+ };
+ arraySliceApply = function arraySliceApplyIE(arr, args) {
+ return origArraySliceApply(arraySlice(arr), args);
+ };
+ }
+ }
+ var strSlice = call.bind(StringPrototype.slice);
+ var strSplit = call.bind(StringPrototype.split);
+ var strIndexOf = call.bind(StringPrototype.indexOf);
+ var pushCall = call.bind(array_push);
+ var isEnum = call.bind(ObjectPrototype.propertyIsEnumerable);
+ var arraySort = call.bind(ArrayPrototype.sort);
+
+ //
+ // Array
+ // =====
+ //
+
+ var isArray = $Array.isArray || function isArray(obj) {
+ return toStr(obj) === '[object Array]';
+ };
+
+ // ES5 15.4.4.12
+ // http://es5.github.com/#x15.4.4.13
+ // Return len+argCount.
+ // [bugfix, ielt8]
+ // IE < 8 bug: [].unshift(0) === undefined but should be "1"
+ var hasUnshiftReturnValueBug = [].unshift(0) !== 1;
+ defineProperties(ArrayPrototype, {
+ unshift: function () {
+ array_unshift.apply(this, arguments);
+ return this.length;
+ }
+ }, hasUnshiftReturnValueBug);
+
+ // ES5 15.4.3.2
+ // http://es5.github.com/#x15.4.3.2
+ // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
+ defineProperties($Array, { isArray: isArray });
+
+ // The IsCallable() check in the Array functions
+ // has been replaced with a strict check on the
+ // internal class of the object to trap cases where
+ // the provided function was actually a regular
+ // expression literal, which in V8 and
+ // JavaScriptCore is a typeof "function". Only in
+ // V8 are regular expression literals permitted as
+ // reduce parameters, so it is desirable in the
+ // general case for the shim to match the more
+ // strict and common behavior of rejecting regular
+ // expressions.
+
+ // ES5 15.4.4.18
+ // http://es5.github.com/#x15.4.4.18
+ // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
+
+ // Check failure of by-index access of string characters (IE < 9)
+ // and failure of `0 in boxedString` (Rhino)
+ var boxedString = $Object('a');
+ var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
+
+ var properlyBoxesContext = function properlyBoxed(method) {
+ // Check node 0.6.21 bug where third parameter is not boxed
+ var properlyBoxesNonStrict = true;
+ var properlyBoxesStrict = true;
+ var threwException = false;
+ if (method) {
+ try {
+ method.call('foo', function (_, __, context) {
+ if (typeof context !== 'object') {
+ properlyBoxesNonStrict = false;
+ }
+ });
+
+ method.call([1], function () {
+ 'use strict';
+
+ properlyBoxesStrict = typeof this === 'string';
+ }, 'x');
+ } catch (e) {
+ threwException = true;
+ }
+ }
+ return !!method && !threwException && properlyBoxesNonStrict && properlyBoxesStrict;
+ };
+
+ defineProperties(ArrayPrototype, {
+ forEach: function forEach(callbackfn/*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var i = -1;
+ var length = ES.ToUint32(self.length);
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.forEach callback must be a function');
+ }
+
+ while (++i < length) {
+ if (i in self) {
+ // Invoke the callback function with call, passing arguments:
+ // context, property value, property key, thisArg object
+ if (typeof T === 'undefined') {
+ callbackfn(self[i], i, object);
+ } else {
+ callbackfn.call(T, self[i], i, object);
+ }
+ }
+ }
+ }
+ }, !properlyBoxesContext(ArrayPrototype.forEach));
+
+ // ES5 15.4.4.19
+ // http://es5.github.com/#x15.4.4.19
+ // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
+ defineProperties(ArrayPrototype, {
+ map: function map(callbackfn/*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = ES.ToUint32(self.length);
+ var result = $Array(length);
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.map callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self) {
+ if (typeof T === 'undefined') {
+ result[i] = callbackfn(self[i], i, object);
+ } else {
+ result[i] = callbackfn.call(T, self[i], i, object);
+ }
+ }
+ }
+ return result;
+ }
+ }, !properlyBoxesContext(ArrayPrototype.map));
+
+ // ES5 15.4.4.20
+ // http://es5.github.com/#x15.4.4.20
+ // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
+ defineProperties(ArrayPrototype, {
+ filter: function filter(callbackfn/*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = ES.ToUint32(self.length);
+ var result = [];
+ var value;
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.filter callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self) {
+ value = self[i];
+ if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {
+ pushCall(result, value);
+ }
+ }
+ }
+ return result;
+ }
+ }, !properlyBoxesContext(ArrayPrototype.filter));
+
+ // ES5 15.4.4.16
+ // http://es5.github.com/#x15.4.4.16
+ // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
+ defineProperties(ArrayPrototype, {
+ every: function every(callbackfn/*, thisArg*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = ES.ToUint32(self.length);
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.every callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }, !properlyBoxesContext(ArrayPrototype.every));
+
+ // ES5 15.4.4.17
+ // http://es5.github.com/#x15.4.4.17
+ // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
+ defineProperties(ArrayPrototype, {
+ some: function some(callbackfn/*, thisArg */) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = ES.ToUint32(self.length);
+ var T;
+ if (arguments.length > 1) {
+ T = arguments[1];
+ }
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.some callback must be a function');
+ }
+
+ for (var i = 0; i < length; i++) {
+ if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+ return true;
+ }
+ }
+ return false;
+ }
+ }, !properlyBoxesContext(ArrayPrototype.some));
+
+ // ES5 15.4.4.21
+ // http://es5.github.com/#x15.4.4.21
+ // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
+ var reduceCoercesToObject = false;
+ if (ArrayPrototype.reduce) {
+ reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) {
+ return list;
+ }) === 'object';
+ }
+ defineProperties(ArrayPrototype, {
+ reduce: function reduce(callbackfn/*, initialValue*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = ES.ToUint32(self.length);
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.reduce callback must be a function');
+ }
+
+ // no value to return if no initial value and an empty array
+ if (length === 0 && arguments.length === 1) {
+ throw new TypeError('reduce of empty array with no initial value');
+ }
+
+ var i = 0;
+ var result;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i++];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (++i >= length) {
+ throw new TypeError('reduce of empty array with no initial value');
+ }
+ } while (true);
+ }
+
+ for (; i < length; i++) {
+ if (i in self) {
+ result = callbackfn(result, self[i], i, object);
+ }
+ }
+
+ return result;
+ }
+ }, !reduceCoercesToObject);
+
+ // ES5 15.4.4.22
+ // http://es5.github.com/#x15.4.4.22
+ // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
+ var reduceRightCoercesToObject = false;
+ if (ArrayPrototype.reduceRight) {
+ reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) {
+ return list;
+ }) === 'object';
+ }
+ defineProperties(ArrayPrototype, {
+ reduceRight: function reduceRight(callbackfn/*, initial*/) {
+ var object = ES.ToObject(this);
+ var self = splitString && isString(this) ? strSplit(this, '') : object;
+ var length = ES.ToUint32(self.length);
+
+ // If no callback function or if callback is not a callable function
+ if (!isCallable(callbackfn)) {
+ throw new TypeError('Array.prototype.reduceRight callback must be a function');
+ }
+
+ // no value to return if no initial value, empty array
+ if (length === 0 && arguments.length === 1) {
+ throw new TypeError('reduceRight of empty array with no initial value');
+ }
+
+ var result;
+ var i = length - 1;
+ if (arguments.length >= 2) {
+ result = arguments[1];
+ } else {
+ do {
+ if (i in self) {
+ result = self[i--];
+ break;
+ }
+
+ // if array contains no values, no initial value to return
+ if (--i < 0) {
+ throw new TypeError('reduceRight of empty array with no initial value');
+ }
+ } while (true);
+ }
+
+ if (i < 0) {
+ return result;
+ }
+
+ do {
+ if (i in self) {
+ result = callbackfn(result, self[i], i, object);
+ }
+ } while (i--);
+
+ return result;
+ }
+ }, !reduceRightCoercesToObject);
+
+ // ES5 15.4.4.14
+ // http://es5.github.com/#x15.4.4.14
+ // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
+ var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;
+ defineProperties(ArrayPrototype, {
+ indexOf: function indexOf(searchElement/*, fromIndex */) {
+ var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+ var length = ES.ToUint32(self.length);
+
+ if (length === 0) {
+ return -1;
+ }
+
+ var i = 0;
+ if (arguments.length > 1) {
+ i = ES.ToInteger(arguments[1]);
+ }
+
+ // handle negative indices
+ i = i >= 0 ? i : max(0, length + i);
+ for (; i < length; i++) {
+ if (i in self && self[i] === searchElement) {
+ return i;
+ }
+ }
+ return -1;
+ }
+ }, hasFirefox2IndexOfBug);
+
+ // ES5 15.4.4.15
+ // http://es5.github.com/#x15.4.4.15
+ // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+ var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;
+ defineProperties(ArrayPrototype, {
+ lastIndexOf: function lastIndexOf(searchElement/*, fromIndex */) {
+ var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+ var length = ES.ToUint32(self.length);
+
+ if (length === 0) {
+ return -1;
+ }
+ var i = length - 1;
+ if (arguments.length > 1) {
+ i = min(i, ES.ToInteger(arguments[1]));
+ }
+ // handle negative indices
+ i = i >= 0 ? i : length - Math.abs(i);
+ for (; i >= 0; i--) {
+ if (i in self && searchElement === self[i]) {
+ return i;
+ }
+ }
+ return -1;
+ }
+ }, hasFirefox2LastIndexOfBug);
+
+ // ES5 15.4.4.12
+ // http://es5.github.com/#x15.4.4.12
+ var spliceNoopReturnsEmptyArray = (function () {
+ var a = [1, 2];
+ var result = a.splice();
+ return a.length === 2 && isArray(result) && result.length === 0;
+ }());
+ defineProperties(ArrayPrototype, {
+ // Safari 5.0 bug where .splice() returns undefined
+ splice: function splice(start, deleteCount) {
+ if (arguments.length === 0) {
+ return [];
+ } else {
+ return array_splice.apply(this, arguments);
+ }
+ }
+ }, !spliceNoopReturnsEmptyArray);
+
+ var spliceWorksWithEmptyObject = (function () {
+ var obj = {};
+ ArrayPrototype.splice.call(obj, 0, 0, 1);
+ return obj.length === 1;
+ }());
+ defineProperties(ArrayPrototype, {
+ splice: function splice(start, deleteCount) {
+ if (arguments.length === 0) {
+ return [];
+ }
+ var args = arguments;
+ this.length = max(ES.ToInteger(this.length), 0);
+ if (arguments.length > 0 && typeof deleteCount !== 'number') {
+ args = arraySlice(arguments);
+ if (args.length < 2) {
+ pushCall(args, this.length - start);
+ } else {
+ args[1] = ES.ToInteger(deleteCount);
+ }
+ }
+ return array_splice.apply(this, args);
+ }
+ }, !spliceWorksWithEmptyObject);
+ var spliceWorksWithLargeSparseArrays = (function () {
+ // Per https://github.com/es-shims/es5-shim/issues/295
+ // Safari 7/8 breaks with sparse arrays of size 1e5 or greater
+ var arr = new $Array(1e5);
+ // note: the index MUST be 8 or larger or the test will false pass
+ arr[8] = 'x';
+ arr.splice(1, 1);
+ // note: this test must be defined *after* the indexOf shim
+ // per https://github.com/es-shims/es5-shim/issues/313
+ return arr.indexOf('x') === 7;
+ }());
+ var spliceWorksWithSmallSparseArrays = (function () {
+ // Per https://github.com/es-shims/es5-shim/issues/295
+ // Opera 12.15 breaks on this, no idea why.
+ var n = 256;
+ var arr = [];
+ arr[n] = 'a';
+ arr.splice(n + 1, 0, 'b');
+ return arr[n] === 'a';
+ }());
+ defineProperties(ArrayPrototype, {
+ splice: function splice(start, deleteCount) {
+ var O = ES.ToObject(this);
+ var A = [];
+ var len = ES.ToUint32(O.length);
+ var relativeStart = ES.ToInteger(start);
+ var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);
+ var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);
+
+ var k = 0;
+ var from;
+ while (k < actualDeleteCount) {
+ from = $String(actualStart + k);
+ if (owns(O, from)) {
+ A[k] = O[from];
+ }
+ k += 1;
+ }
+
+ var items = arraySlice(arguments, 2);
+ var itemCount = items.length;
+ var to;
+ if (itemCount < actualDeleteCount) {
+ k = actualStart;
+ var maxK = len - actualDeleteCount;
+ while (k < maxK) {
+ from = $String(k + actualDeleteCount);
+ to = $String(k + itemCount);
+ if (owns(O, from)) {
+ O[to] = O[from];
+ } else {
+ delete O[to];
+ }
+ k += 1;
+ }
+ k = len;
+ var minK = len - actualDeleteCount + itemCount;
+ while (k > minK) {
+ delete O[k - 1];
+ k -= 1;
+ }
+ } else if (itemCount > actualDeleteCount) {
+ k = len - actualDeleteCount;
+ while (k > actualStart) {
+ from = $String(k + actualDeleteCount - 1);
+ to = $String(k + itemCount - 1);
+ if (owns(O, from)) {
+ O[to] = O[from];
+ } else {
+ delete O[to];
+ }
+ k -= 1;
+ }
+ }
+ k = actualStart;
+ for (var i = 0; i < items.length; ++i) {
+ O[k] = items[i];
+ k += 1;
+ }
+ O.length = len - actualDeleteCount + itemCount;
+
+ return A;
+ }
+ }, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);
+
+ var originalJoin = ArrayPrototype.join;
+ var hasStringJoinBug;
+ try {
+ hasStringJoinBug = Array.prototype.join.call('123', ',') !== '1,2,3';
+ } catch (e) {
+ hasStringJoinBug = true;
+ }
+ if (hasStringJoinBug) {
+ defineProperties(ArrayPrototype, {
+ join: function join(separator) {
+ var sep = typeof separator === 'undefined' ? ',' : separator;
+ return originalJoin.call(isString(this) ? strSplit(this, '') : this, sep);
+ }
+ }, hasStringJoinBug);
+ }
+
+ var hasJoinUndefinedBug = [1, 2].join(undefined) !== '1,2';
+ if (hasJoinUndefinedBug) {
+ defineProperties(ArrayPrototype, {
+ join: function join(separator) {
+ var sep = typeof separator === 'undefined' ? ',' : separator;
+ return originalJoin.call(this, sep);
+ }
+ }, hasJoinUndefinedBug);
+ }
+
+ var pushShim = function push(item) {
+ var O = ES.ToObject(this);
+ var n = ES.ToUint32(O.length);
+ var i = 0;
+ while (i < arguments.length) {
+ O[n + i] = arguments[i];
+ i += 1;
+ }
+ O.length = n + i;
+ return n + i;
+ };
+
+ var pushIsNotGeneric = (function () {
+ var obj = {};
+ var result = Array.prototype.push.call(obj, undefined);
+ return result !== 1 || obj.length !== 1 || typeof obj[0] !== 'undefined' || !owns(obj, 0);
+ }());
+ defineProperties(ArrayPrototype, {
+ push: function push(item) {
+ if (isArray(this)) {
+ return array_push.apply(this, arguments);
+ }
+ return pushShim.apply(this, arguments);
+ }
+ }, pushIsNotGeneric);
+
+ // This fixes a very weird bug in Opera 10.6 when pushing `undefined
+ var pushUndefinedIsWeird = (function () {
+ var arr = [];
+ var result = arr.push(undefined);
+ return result !== 1 || arr.length !== 1 || typeof arr[0] !== 'undefined' || !owns(arr, 0);
+ }());
+ defineProperties(ArrayPrototype, { push: pushShim }, pushUndefinedIsWeird);
+
+ // ES5 15.2.3.14
+ // http://es5.github.io/#x15.4.4.10
+ // Fix boxed string bug
+ defineProperties(ArrayPrototype, {
+ slice: function (start, end) {
+ var arr = isString(this) ? strSplit(this, '') : this;
+ return arraySliceApply(arr, arguments);
+ }
+ }, splitString);
+
+ var sortIgnoresNonFunctions = (function () {
+ try {
+ [1, 2].sort(null);
+ } catch (e) {
+ try {
+ [1, 2].sort({});
+ } catch (e2) {
+ return false;
+ }
+ }
+ return true;
+ }());
+ var sortThrowsOnRegex = (function () {
+ // this is a problem in Firefox 4, in which `typeof /a/ === 'function'`
+ try {
+ [1, 2].sort(/a/);
+ return false;
+ } catch (e) {}
+ return true;
+ }());
+ var sortIgnoresUndefined = (function () {
+ // applies in IE 8, for one.
+ try {
+ [1, 2].sort(undefined);
+ return true;
+ } catch (e) {}
+ return false;
+ }());
+ defineProperties(ArrayPrototype, {
+ sort: function sort(compareFn) {
+ if (typeof compareFn === 'undefined') {
+ return arraySort(this);
+ }
+ if (!isCallable(compareFn)) {
+ throw new TypeError('Array.prototype.sort callback must be a function');
+ }
+ return arraySort(this, compareFn);
+ }
+ }, sortIgnoresNonFunctions || !sortIgnoresUndefined || !sortThrowsOnRegex);
+
+ //
+ // Object
+ // ======
+ //
+
+ // ES5 15.2.3.14
+ // http://es5.github.com/#x15.2.3.14
+
+ // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+ var hasDontEnumBug = !isEnum({ 'toString': null }, 'toString'); // jscs:ignore disallowQuotedKeysInObjects
+ var hasProtoEnumBug = isEnum(function () {}, 'prototype');
+ var hasStringEnumBug = !owns('x', '0');
+ var equalsConstructorPrototype = function (o) {
+ var ctor = o.constructor;
+ return ctor && ctor.prototype === o;
+ };
+ var excludedKeys = {
+ $window: true,
+ $console: true,
+ $parent: true,
+ $self: true,
+ $frame: true,
+ $frames: true,
+ $frameElement: true,
+ $webkitIndexedDB: true,
+ $webkitStorageInfo: true,
+ $external: true,
+ $width: true,
+ $height: true,
+ $top: true,
+ $localStorage: true
+ };
+ var hasAutomationEqualityBug = (function () {
+ /* globals window */
+ if (typeof window === 'undefined') {
+ return false;
+ }
+ for (var k in window) {
+ try {
+ if (!excludedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {
+ equalsConstructorPrototype(window[k]);
+ }
+ } catch (e) {
+ return true;
+ }
+ }
+ return false;
+ }());
+ var equalsConstructorPrototypeIfNotBuggy = function (object) {
+ if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
+ return equalsConstructorPrototype(object);
+ }
+ try {
+ return equalsConstructorPrototype(object);
+ } catch (e) {
+ return false;
+ }
+ };
+ var dontEnums = [
+ 'toString',
+ 'toLocaleString',
+ 'valueOf',
+ 'hasOwnProperty',
+ 'isPrototypeOf',
+ 'propertyIsEnumerable',
+ 'constructor'
+ ];
+ var dontEnumsLength = dontEnums.length;
+
+ // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js
+ // can be replaced with require('is-arguments') if we ever use a build process instead
+ var isStandardArguments = function isArguments(value) {
+ return toStr(value) === '[object Arguments]';
+ };
+ var isLegacyArguments = function isArguments(value) {
+ return value !== null
+ && typeof value === 'object'
+ && typeof value.length === 'number'
+ && value.length >= 0
+ && !isArray(value)
+ && isCallable(value.callee);
+ };
+ var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;
+
+ defineProperties($Object, {
+ keys: function keys(object) {
+ var isFn = isCallable(object);
+ var isArgs = isArguments(object);
+ var isObject = object !== null && typeof object === 'object';
+ var isStr = isObject && isString(object);
+
+ if (!isObject && !isFn && !isArgs) {
+ throw new TypeError('Object.keys called on a non-object');
+ }
+
+ var theKeys = [];
+ var skipProto = hasProtoEnumBug && isFn;
+ if ((isStr && hasStringEnumBug) || isArgs) {
+ for (var i = 0; i < object.length; ++i) {
+ pushCall(theKeys, $String(i));
+ }
+ }
+
+ if (!isArgs) {
+ for (var name in object) {
+ if (!(skipProto && name === 'prototype') && owns(object, name)) {
+ pushCall(theKeys, $String(name));
+ }
+ }
+ }
+
+ if (hasDontEnumBug) {
+ var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
+ for (var j = 0; j < dontEnumsLength; j++) {
+ var dontEnum = dontEnums[j];
+ if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {
+ pushCall(theKeys, dontEnum);
+ }
+ }
+ }
+ return theKeys;
+ }
+ });
+
+ var keysWorksWithArguments = $Object.keys && (function () {
+ // Safari 5.0 bug
+ return $Object.keys(arguments).length === 2;
+ }(1, 2));
+ var keysHasArgumentsLengthBug = $Object.keys && (function () {
+ var argKeys = $Object.keys(arguments);
+ return arguments.length !== 1 || argKeys.length !== 1 || argKeys[0] !== 1;
+ }(1));
+ var originalKeys = $Object.keys;
+ defineProperties($Object, {
+ keys: function keys(object) {
+ if (isArguments(object)) {
+ return originalKeys(arraySlice(object));
+ } else {
+ return originalKeys(object);
+ }
+ }
+ }, !keysWorksWithArguments || keysHasArgumentsLengthBug);
+
+ //
+ // Date
+ // ====
+ //
+
+ var hasNegativeMonthYearBug = new Date(-3509827329600292).getUTCMonth() !== 0;
+ var aNegativeTestDate = new Date(-1509842289600292);
+ var aPositiveTestDate = new Date(1449662400000);
+ var hasToUTCStringFormatBug = aNegativeTestDate.toUTCString() !== 'Mon, 01 Jan -45875 11:59:59 GMT';
+ var hasToDateStringFormatBug;
+ var hasToStringFormatBug;
+ var timeZoneOffset = aNegativeTestDate.getTimezoneOffset();
+ if (timeZoneOffset < -720) {
+ hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Tue Jan 02 -45875';
+ hasToStringFormatBug = !(/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/).test(String(aPositiveTestDate));
+ } else {
+ hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Mon Jan 01 -45875';
+ hasToStringFormatBug = !(/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/).test(String(aPositiveTestDate));
+ }
+
+ var originalGetFullYear = call.bind(Date.prototype.getFullYear);
+ var originalGetMonth = call.bind(Date.prototype.getMonth);
+ var originalGetDate = call.bind(Date.prototype.getDate);
+ var originalGetUTCFullYear = call.bind(Date.prototype.getUTCFullYear);
+ var originalGetUTCMonth = call.bind(Date.prototype.getUTCMonth);
+ var originalGetUTCDate = call.bind(Date.prototype.getUTCDate);
+ var originalGetUTCDay = call.bind(Date.prototype.getUTCDay);
+ var originalGetUTCHours = call.bind(Date.prototype.getUTCHours);
+ var originalGetUTCMinutes = call.bind(Date.prototype.getUTCMinutes);
+ var originalGetUTCSeconds = call.bind(Date.prototype.getUTCSeconds);
+ var originalGetUTCMilliseconds = call.bind(Date.prototype.getUTCMilliseconds);
+ var dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
+ var monthName = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+ var daysInMonth = function daysInMonth(month, year) {
+ return originalGetDate(new Date(year, month, 0));
+ };
+
+ defineProperties(Date.prototype, {
+ getFullYear: function getFullYear() {
+ if (!this || !(this instanceof Date)) {
+ throw new TypeError('this is not a Date object.');
+ }
+ var year = originalGetFullYear(this);
+ if (year < 0 && originalGetMonth(this) > 11) {
+ return year + 1;
+ }
+ return year;
+ },
+ getMonth: function getMonth() {
+ if (!this || !(this instanceof Date)) {
+ throw new TypeError('this is not a Date object.');
+ }
+ var year = originalGetFullYear(this);
+ var month = originalGetMonth(this);
+ if (year < 0 && month > 11) {
+ return 0;
+ }
+ return month;
+ },
+ getDate: function getDate() {
+ if (!this || !(this instanceof Date)) {
+ throw new TypeError('this is not a Date object.');
+ }
+ var year = originalGetFullYear(this);
+ var month = originalGetMonth(this);
+ var date = originalGetDate(this);
+ if (year < 0 && month > 11) {
+ if (month === 12) {
+ return date;
+ }
+ var days = daysInMonth(0, year + 1);
+ return (days - date) + 1;
+ }
+ return date;
+ },
+ getUTCFullYear: function getUTCFullYear() {
+ if (!this || !(this instanceof Date)) {
+ throw new TypeError('this is not a Date object.');
+ }
+ var year = originalGetUTCFullYear(this);
+ if (year < 0 && originalGetUTCMonth(this) > 11) {
+ return year + 1;
+ }
+ return year;
+ },
+ getUTCMonth: function getUTCMonth() {
+ if (!this || !(this instanceof Date)) {
+ throw new TypeError('this is not a Date object.');
+ }
+ var year = originalGetUTCFullYear(this);
+ var month = originalGetUTCMonth(this);
+ if (year < 0 && month > 11) {
+ return 0;
+ }
+ return month;
+ },
+ getUTCDate: function getUTCDate() {
+ if (!this || !(this instanceof Date)) {
+ throw new TypeError('this is not a Date object.');
+ }
+ var year = originalGetUTCFullYear(this);
+ var month = originalGetUTCMonth(this);
+ var date = originalGetUTCDate(this);
+ if (year < 0 && month > 11) {
+ if (month === 12) {
+ return date;
+ }
+ var days = daysInMonth(0, year + 1);
+ return (days - date) + 1;
+ }
+ return date;
+ }
+ }, hasNegativeMonthYearBug);
+
+ defineProperties(Date.prototype, {
+ toUTCString: function toUTCString() {
+ if (!this || !(this instanceof Date)) {
+ throw new TypeError('this is not a Date object.');
+ }
+ var day = originalGetUTCDay(this);
+ var date = originalGetUTCDate(this);
+ var month = originalGetUTCMonth(this);
+ var year = originalGetUTCFullYear(this);
+ var hour = originalGetUTCHours(this);
+ var minute = originalGetUTCMinutes(this);
+ var second = originalGetUTCSeconds(this);
+ return dayName[day] + ', '
+ + (date < 10 ? '0' + date : date) + ' '
+ + monthName[month] + ' '
+ + year + ' '
+ + (hour < 10 ? '0' + hour : hour) + ':'
+ + (minute < 10 ? '0' + minute : minute) + ':'
+ + (second < 10 ? '0' + second : second) + ' GMT';
+ }
+ }, hasNegativeMonthYearBug || hasToUTCStringFormatBug);
+
+ // Opera 12 has `,`
+ defineProperties(Date.prototype, {
+ toDateString: function toDateString() {
+ if (!this || !(this instanceof Date)) {
+ throw new TypeError('this is not a Date object.');
+ }
+ var day = this.getDay();
+ var date = this.getDate();
+ var month = this.getMonth();
+ var year = this.getFullYear();
+ return dayName[day] + ' '
+ + monthName[month] + ' '
+ + (date < 10 ? '0' + date : date) + ' '
+ + year;
+ }
+ }, hasNegativeMonthYearBug || hasToDateStringFormatBug);
+
+ // can't use defineProperties here because of toString enumeration issue in IE <= 8
+ if (hasNegativeMonthYearBug || hasToStringFormatBug) {
+ Date.prototype.toString = function toString() {
+ if (!this || !(this instanceof Date)) {
+ throw new TypeError('this is not a Date object.');
+ }
+ var day = this.getDay();
+ var date = this.getDate();
+ var month = this.getMonth();
+ var year = this.getFullYear();
+ var hour = this.getHours();
+ var minute = this.getMinutes();
+ var second = this.getSeconds();
+ var timezoneOffset = this.getTimezoneOffset();
+ var hoursOffset = Math.floor(Math.abs(timezoneOffset) / 60);
+ var minutesOffset = Math.floor(Math.abs(timezoneOffset) % 60);
+ return dayName[day] + ' '
+ + monthName[month] + ' '
+ + (date < 10 ? '0' + date : date) + ' '
+ + year + ' '
+ + (hour < 10 ? '0' + hour : hour) + ':'
+ + (minute < 10 ? '0' + minute : minute) + ':'
+ + (second < 10 ? '0' + second : second) + ' GMT'
+ + (timezoneOffset > 0 ? '-' : '+')
+ + (hoursOffset < 10 ? '0' + hoursOffset : hoursOffset)
+ + (minutesOffset < 10 ? '0' + minutesOffset : minutesOffset);
+ };
+ if (supportsDescriptors) {
+ $Object.defineProperty(Date.prototype, 'toString', {
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+ }
+ }
+
+ // ES5 15.9.5.43
+ // http://es5.github.com/#x15.9.5.43
+ // This function returns a String value represent the instance in time
+ // represented by this Date object. The format of the String is the Date Time
+ // string format defined in 15.9.1.15. All fields are present in the String.
+ // The time zone is always UTC, denoted by the suffix Z. If the time value of
+ // this object is not a finite Number a RangeError exception is thrown.
+ var negativeDate = -62198755200000;
+ var negativeYearString = '-000001';
+ var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1; // eslint-disable-line max-len
+ var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';
+
+ var getTime = call.bind(Date.prototype.getTime);
+
+ defineProperties(Date.prototype, {
+ toISOString: function toISOString() {
+ if (!isFinite(this) || !isFinite(getTime(this))) {
+ // Adope Photoshop requires the second check.
+ throw new RangeError('Date.prototype.toISOString called on non-finite value.');
+ }
+
+ var year = originalGetUTCFullYear(this);
+
+ var month = originalGetUTCMonth(this);
+ // see https://github.com/es-shims/es5-shim/issues/111
+ year += Math.floor(month / 12);
+ month = ((month % 12) + 12) % 12;
+
+ // the date time string format is specified in 15.9.1.15.
+ var result = [
+ month + 1,
+ originalGetUTCDate(this),
+ originalGetUTCHours(this),
+ originalGetUTCMinutes(this),
+ originalGetUTCSeconds(this)
+ ];
+ year = (
+ (year < 0 ? '-' : (year > 9999 ? '+' : ''))
+ + strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)
+ );
+
+ for (var i = 0; i < result.length; ++i) {
+ // pad months, days, hours, minutes, and seconds to have two digits.
+ result[i] = strSlice('00' + result[i], -2);
+ }
+ // pad milliseconds to have three digits.
+ return (
+ year + '-' + arraySlice(result, 0, 2).join('-')
+ + 'T' + arraySlice(result, 2).join(':') + '.'
+ + strSlice('000' + originalGetUTCMilliseconds(this), -3) + 'Z'
+ );
+ }
+ }, hasNegativeDateBug || hasSafari51DateBug);
+
+ // ES5 15.9.5.44
+ // http://es5.github.com/#x15.9.5.44
+ // This function provides a String representation of a Date object for use by
+ // JSON.stringify (15.12.3).
+ var dateToJSONIsSupported = (function () {
+ try {
+ return Date.prototype.toJSON
+ && new Date(NaN).toJSON() === null
+ && new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1
+ && Date.prototype.toJSON.call({ // generic
+ toISOString: function () { return true; }
+ });
+ } catch (e) {
+ return false;
+ }
+ }());
+ if (!dateToJSONIsSupported) {
+ Date.prototype.toJSON = function toJSON(key) {
+ // When the toJSON method is called with argument key, the following
+ // steps are taken:
+
+ // 1. Let O be the result of calling ToObject, giving it the this
+ // value as its argument.
+ // 2. Let tv be ES.ToPrimitive(O, hint Number).
+ var O = $Object(this);
+ var tv = ES.ToPrimitive(O);
+ // 3. If tv is a Number and is not finite, return null.
+ if (typeof tv === 'number' && !isFinite(tv)) {
+ return null;
+ }
+ // 4. Let toISO be the result of calling the [[Get]] internal method of
+ // O with argument "toISOString".
+ var toISO = O.toISOString;
+ // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+ if (!isCallable(toISO)) {
+ throw new TypeError('toISOString property is not callable');
+ }
+ // 6. Return the result of calling the [[Call]] internal method of
+ // toISO with O as the this value and an empty argument list.
+ return toISO.call(O);
+
+ // NOTE 1 The argument is ignored.
+
+ // NOTE 2 The toJSON function is intentionally generic; it does not
+ // require that its this value be a Date object. Therefore, it can be
+ // transferred to other kinds of objects for use as a method. However,
+ // it does require that any such object have a toISOString method. An
+ // object is free to use the argument key to filter its
+ // stringification.
+ };
+ }
+
+ // ES5 15.9.4.2
+ // http://es5.github.com/#x15.9.4.2
+ // based on work shared by Daniel Friesen (dantman)
+ // http://gist.github.com/303249
+ var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;
+ var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));
+ var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));
+ if (doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {
+ // XXX global assignment won't work in embeddings that use
+ // an alternate object for the context.
+ /* global Date: true */
+ var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1;
+ var hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());
+ // eslint-disable-next-line no-implicit-globals, no-global-assign
+ Date = (function (NativeDate) {
+ // Date.length === 7
+ var DateShim = function Date(Y, M, D, h, m, s, ms) {
+ var length = arguments.length;
+ var date;
+ if (this instanceof NativeDate) {
+ var seconds = s;
+ var millis = ms;
+ if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {
+ // work around a Safari 8/9 bug where it treats the seconds as signed
+ var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
+ var sToShift = Math.floor(msToShift / 1e3);
+ seconds += sToShift;
+ millis -= sToShift * 1e3;
+ }
+ date = length === 1 && $String(Y) === Y // isString(Y)
+ // We explicitly pass it through parse:
+ ? new NativeDate(DateShim.parse(Y))
+ // We have to manually make calls depending on argument
+ // length here
+ : length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis)
+ : length >= 6 ? new NativeDate(Y, M, D, h, m, seconds)
+ : length >= 5 ? new NativeDate(Y, M, D, h, m)
+ : length >= 4 ? new NativeDate(Y, M, D, h)
+ : length >= 3 ? new NativeDate(Y, M, D)
+ : length >= 2 ? new NativeDate(Y, M)
+ : length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y)
+ : new NativeDate();
+ } else {
+ date = NativeDate.apply(this, arguments);
+ }
+ if (!isPrimitive(date)) {
+ // Prevent mixups with unfixed Date object
+ defineProperties(date, { constructor: DateShim }, true);
+ }
+ return date;
+ };
+
+ // 15.9.1.15 Date Time String Format.
+ var isoDateExpression = new RegExp('^'
+ + '(\\d{4}|[+-]\\d{6})' // four-digit year capture or sign + 6-digit extended year
+ + '(?:-(\\d{2})' // optional month capture
+ + '(?:-(\\d{2})' // optional day capture
+ + '(?:' // capture hours:minutes:seconds.milliseconds
+ + 'T(\\d{2})' // hours capture
+ + ':(\\d{2})' // minutes capture
+ + '(?:' // optional :seconds.milliseconds
+ + ':(\\d{2})' // seconds capture
+ + '(?:(\\.\\d{1,}))?' // milliseconds capture
+ + ')?'
+ + '(' // capture UTC offset component
+ + 'Z|' // UTC capture
+ + '(?:' // offset specifier +/-hours:minutes
+ + '([-+])' // sign capture
+ + '(\\d{2})' // hours offset capture
+ + ':(\\d{2})' // minutes offset capture
+ + ')'
+ + ')?)?)?)?'
+ + '$');
+
+ var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
+
+ var dayFromMonth = function dayFromMonth(year, month) {
+ var t = month > 1 ? 1 : 0;
+ return (
+ months[month]
+ + Math.floor((year - 1969 + t) / 4)
+ - Math.floor((year - 1901 + t) / 100)
+ + Math.floor((year - 1601 + t) / 400)
+ + (365 * (year - 1970))
+ );
+ };
+
+ var toUTC = function toUTC(t) {
+ var s = 0;
+ var ms = t;
+ if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {
+ // work around a Safari 8/9 bug where it treats the seconds as signed
+ var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
+ var sToShift = Math.floor(msToShift / 1e3);
+ s += sToShift;
+ ms -= sToShift * 1e3;
+ }
+ return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));
+ };
+
+ // Copy any custom methods a 3rd party library may have added
+ for (var key in NativeDate) {
+ if (owns(NativeDate, key)) {
+ DateShim[key] = NativeDate[key];
+ }
+ }
+
+ // Copy "native" methods explicitly; they may be non-enumerable
+ defineProperties(DateShim, {
+ now: NativeDate.now,
+ UTC: NativeDate.UTC
+ }, true);
+ DateShim.prototype = NativeDate.prototype;
+ defineProperties(DateShim.prototype, { constructor: DateShim }, true);
+
+ // Upgrade Date.parse to handle simplified ISO 8601 strings
+ var parseShim = function parse(string) {
+ var match = isoDateExpression.exec(string);
+ if (match) {
+ // parse months, days, hours, minutes, seconds, and milliseconds
+ // provide default values if necessary
+ // parse the UTC offset component
+ var year = $Number(match[1]),
+ month = $Number(match[2] || 1) - 1,
+ day = $Number(match[3] || 1) - 1,
+ hour = $Number(match[4] || 0),
+ minute = $Number(match[5] || 0),
+ second = $Number(match[6] || 0),
+ millisecond = Math.floor($Number(match[7] || 0) * 1000),
+ // When time zone is missed, local offset should be used
+ // (ES 5.1 bug)
+ // see https://bugs.ecmascript.org/show_bug.cgi?id=112
+ isLocalTime = Boolean(match[4] && !match[8]),
+ signOffset = match[9] === '-' ? 1 : -1,
+ hourOffset = $Number(match[10] || 0),
+ minuteOffset = $Number(match[11] || 0),
+ result;
+ var hasMinutesOrSecondsOrMilliseconds = minute > 0 || second > 0 || millisecond > 0;
+ if (
+ hour < (hasMinutesOrSecondsOrMilliseconds ? 24 : 25)
+ && minute < 60 && second < 60 && millisecond < 1000
+ && month > -1 && month < 12 && hourOffset < 24
+ && minuteOffset < 60 // detect invalid offsets
+ && day > -1
+ && day < (dayFromMonth(year, month + 1) - dayFromMonth(year, month))
+ ) {
+ result = (
+ ((dayFromMonth(year, month) + day) * 24)
+ + hour
+ + (hourOffset * signOffset)
+ ) * 60;
+ result = ((
+ ((result + minute + (minuteOffset * signOffset)) * 60)
+ + second
+ ) * 1000) + millisecond;
+ if (isLocalTime) {
+ result = toUTC(result);
+ }
+ if (-8.64e15 <= result && result <= 8.64e15) {
+ return result;
+ }
+ }
+ return NaN;
+ }
+ return NativeDate.parse.apply(this, arguments);
+ };
+ defineProperties(DateShim, { parse: parseShim });
+
+ return DateShim;
+ }(Date));
+ /* global Date: false */
+ }
+
+ // ES5 15.9.4.4
+ // http://es5.github.com/#x15.9.4.4
+ if (!Date.now) {
+ Date.now = function now() {
+ return new Date().getTime();
+ };
+ }
+
+ //
+ // Number
+ // ======
+ //
+
+ // ES5.1 15.7.4.5
+ // http://es5.github.com/#x15.7.4.5
+ var hasToFixedBugs = NumberPrototype.toFixed && (
+ (0.00008).toFixed(3) !== '0.000'
+ || (0.9).toFixed(0) !== '1'
+ || (1.255).toFixed(2) !== '1.25'
+ || (1000000000000000128).toFixed(0) !== '1000000000000000128'
+ );
+
+ var toFixedHelpers = {
+ base: 1e7,
+ size: 6,
+ data: [0, 0, 0, 0, 0, 0],
+ multiply: function multiply(n, c) {
+ var i = -1;
+ var c2 = c;
+ while (++i < toFixedHelpers.size) {
+ c2 += n * toFixedHelpers.data[i];
+ toFixedHelpers.data[i] = c2 % toFixedHelpers.base;
+ c2 = Math.floor(c2 / toFixedHelpers.base);
+ }
+ },
+ divide: function divide(n) {
+ var i = toFixedHelpers.size;
+ var c = 0;
+ while (--i >= 0) {
+ c += toFixedHelpers.data[i];
+ toFixedHelpers.data[i] = Math.floor(c / n);
+ c = (c % n) * toFixedHelpers.base;
+ }
+ },
+ numToString: function numToString() {
+ var i = toFixedHelpers.size;
+ var s = '';
+ while (--i >= 0) {
+ if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {
+ var t = $String(toFixedHelpers.data[i]);
+ if (s === '') {
+ s = t;
+ } else {
+ s += strSlice('0000000', 0, 7 - t.length) + t;
+ }
+ }
+ }
+ return s;
+ },
+ pow: function pow(x, n, acc) {
+ return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));
+ },
+ log: function log(x) {
+ var n = 0;
+ var x2 = x;
+ while (x2 >= 4096) {
+ n += 12;
+ x2 /= 4096;
+ }
+ while (x2 >= 2) {
+ n += 1;
+ x2 /= 2;
+ }
+ return n;
+ }
+ };
+
+ var toFixedShim = function toFixed(fractionDigits) {
+ var f, x, s, m, e, z, j, k;
+
+ // Test for NaN and round fractionDigits down
+ f = $Number(fractionDigits);
+ f = isActualNaN(f) ? 0 : Math.floor(f);
+
+ if (f < 0 || f > 20) {
+ throw new RangeError('Number.toFixed called with invalid number of decimals');
+ }
+
+ x = $Number(this);
+
+ if (isActualNaN(x)) {
+ return 'NaN';
+ }
+
+ // If it is too big or small, return the string value of the number
+ if (x <= -1e21 || x >= 1e21) {
+ return $String(x);
+ }
+
+ s = '';
+
+ if (x < 0) {
+ s = '-';
+ x = -x;
+ }
+
+ m = '0';
+
+ if (x > 1e-21) {
+ // 1e-21 < x < 1e21
+ // -70 < log2(x) < 70
+ e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;
+ z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));
+ z *= 0x10000000000000; // Math.pow(2, 52);
+ e = 52 - e;
+
+ // -18 < e < 122
+ // x = z / 2 ^ e
+ if (e > 0) {
+ toFixedHelpers.multiply(0, z);
+ j = f;
+
+ while (j >= 7) {
+ toFixedHelpers.multiply(1e7, 0);
+ j -= 7;
+ }
+
+ toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);
+ j = e - 1;
+
+ while (j >= 23) {
+ toFixedHelpers.divide(1 << 23);
+ j -= 23;
+ }
+
+ toFixedHelpers.divide(1 << j);
+ toFixedHelpers.multiply(1, 1);
+ toFixedHelpers.divide(2);
+ m = toFixedHelpers.numToString();
+ } else {
+ toFixedHelpers.multiply(0, z);
+ toFixedHelpers.multiply(1 << (-e), 0);
+ m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);
+ }
+ }
+
+ if (f > 0) {
+ k = m.length;
+
+ if (k <= f) {
+ m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;
+ } else {
+ m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);
+ }
+ } else {
+ m = s + m;
+ }
+
+ return m;
+ };
+ defineProperties(NumberPrototype, { toFixed: toFixedShim }, hasToFixedBugs);
+
+ var hasToPrecisionUndefinedBug = (function () {
+ try {
+ return 1.0.toPrecision(undefined) === '1';
+ } catch (e) {
+ return true;
+ }
+ }());
+ var originalToPrecision = NumberPrototype.toPrecision;
+ defineProperties(NumberPrototype, {
+ toPrecision: function toPrecision(precision) {
+ return typeof precision === 'undefined' ? originalToPrecision.call(this) : originalToPrecision.call(this, precision);
+ }
+ }, hasToPrecisionUndefinedBug);
+
+ //
+ // String
+ // ======
+ //
+
+ // ES5 15.5.4.14
+ // http://es5.github.com/#x15.5.4.14
+
+ // [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]
+ // Many browsers do not split properly with regular expressions or they
+ // do not perform the split correctly under obscure conditions.
+ // See http://blog.stevenlevithan.com/archives/cross-browser-split
+ // I've tested in many browsers and this seems to cover the deviant ones:
+ // 'ab'.split(/(?:ab)*/) should be ["", ""], not [""]
+ // '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""]
+ // 'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not
+ // [undefined, "t", undefined, "e", ...]
+ // ''.split(/.?/) should be [], not [""]
+ // '.'.split(/()()/) should be ["."], not ["", "", "."]
+
+ if (
+ 'ab'.split(/(?:ab)*/).length !== 2
+ || '.'.split(/(.?)(.?)/).length !== 4
+ || 'tesst'.split(/(s)*/)[1] === 't'
+ || 'test'.split(/(?:)/, -1).length !== 4
+ || ''.split(/.?/).length
+ || '.'.split(/()()/).length > 1
+ ) {
+ (function () {
+ var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group
+ var maxSafe32BitInt = Math.pow(2, 32) - 1;
+
+ StringPrototype.split = function (separator, limit) {
+ var string = String(this);
+ if (typeof separator === 'undefined' && limit === 0) {
+ return [];
+ }
+
+ // If `separator` is not a regex, use native split
+ if (!isRegex(separator)) {
+ return strSplit(this, separator, limit);
+ }
+
+ var output = [];
+ var flags = (separator.ignoreCase ? 'i' : '')
+ + (separator.multiline ? 'm' : '')
+ + (separator.unicode ? 'u' : '') // in ES6
+ + (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6
+ lastLastIndex = 0,
+ // Make `global` and avoid `lastIndex` issues by working with a copy
+ separator2, match, lastIndex, lastLength;
+ var separatorCopy = new RegExp(separator.source, flags + 'g');
+ if (!compliantExecNpcg) {
+ // Doesn't need flags gy, but they don't hurt
+ separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
+ }
+ /* Values for `limit`, per the spec:
+ * If undefined: 4294967295 // maxSafe32BitInt
+ * If 0, Infinity, or NaN: 0
+ * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
+ * If negative number: 4294967296 - Math.floor(Math.abs(limit))
+ * If other: Type-convert, then use the above rules
+ */
+ var splitLimit = typeof limit === 'undefined' ? maxSafe32BitInt : ES.ToUint32(limit);
+ match = separatorCopy.exec(string);
+ while (match) {
+ // `separatorCopy.lastIndex` is not reliable cross-browser
+ lastIndex = match.index + match[0].length;
+ if (lastIndex > lastLastIndex) {
+ pushCall(output, strSlice(string, lastLastIndex, match.index));
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for
+ // nonparticipating capturing groups
+ if (!compliantExecNpcg && match.length > 1) {
+ /* eslint-disable no-loop-func */
+ match[0].replace(separator2, function () {
+ for (var i = 1; i < arguments.length - 2; i++) {
+ if (typeof arguments[i] === 'undefined') {
+ match[i] = void 0;
+ }
+ }
+ });
+ /* eslint-enable no-loop-func */
+ }
+ if (match.length > 1 && match.index < string.length) {
+ array_push.apply(output, arraySlice(match, 1));
+ }
+ lastLength = match[0].length;
+ lastLastIndex = lastIndex;
+ if (output.length >= splitLimit) {
+ break;
+ }
+ }
+ if (separatorCopy.lastIndex === match.index) {
+ separatorCopy.lastIndex++; // Avoid an infinite loop
+ }
+ match = separatorCopy.exec(string);
+ }
+ if (lastLastIndex === string.length) {
+ if (lastLength || !separatorCopy.test('')) {
+ pushCall(output, '');
+ }
+ } else {
+ pushCall(output, strSlice(string, lastLastIndex));
+ }
+ return output.length > splitLimit ? arraySlice(output, 0, splitLimit) : output;
+ };
+ }());
+
+ // [bugfix, chrome]
+ // If separator is undefined, then the result array contains just one String,
+ // which is the this value (converted to a String). If limit is not undefined,
+ // then the output array is truncated so that it contains no more than limit
+ // elements.
+ // "0".split(undefined, 0) -> []
+ } else if ('0'.split(void 0, 0).length) {
+ StringPrototype.split = function split(separator, limit) {
+ if (typeof separator === 'undefined' && limit === 0) {
+ return [];
+ }
+ return strSplit(this, separator, limit);
+ };
+ }
+
+ var str_replace = StringPrototype.replace;
+ var replaceReportsGroupsCorrectly = (function () {
+ var groups = [];
+ 'x'.replace(/x(.)?/g, function (match, group) {
+ pushCall(groups, group);
+ });
+ return groups.length === 1 && typeof groups[0] === 'undefined';
+ }());
+
+ if (!replaceReportsGroupsCorrectly) {
+ StringPrototype.replace = function replace(searchValue, replaceValue) {
+ var isFn = isCallable(replaceValue);
+ var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source);
+ if (!isFn || !hasCapturingGroups) {
+ return str_replace.call(this, searchValue, replaceValue);
+ } else {
+ var wrappedReplaceValue = function (match) {
+ var length = arguments.length;
+ var originalLastIndex = searchValue.lastIndex;
+ searchValue.lastIndex = 0;
+ var args = searchValue.exec(match) || [];
+ searchValue.lastIndex = originalLastIndex;
+ pushCall(args, arguments[length - 2], arguments[length - 1]);
+ return replaceValue.apply(this, args);
+ };
+ return str_replace.call(this, searchValue, wrappedReplaceValue);
+ }
+ };
+ }
+
+ // ECMA-262, 3rd B.2.3
+ // Not an ECMAScript standard, although ECMAScript 3rd Edition has a
+ // non-normative section suggesting uniform semantics and it should be
+ // normalized across all browsers
+ // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
+ var string_substr = StringPrototype.substr;
+ var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';
+ defineProperties(StringPrototype, {
+ substr: function substr(start, length) {
+ var normalizedStart = start;
+ if (start < 0) {
+ normalizedStart = max(this.length + start, 0);
+ }
+ return string_substr.call(this, normalizedStart, length);
+ }
+ }, hasNegativeSubstrBug);
+
+ // ES5 15.5.4.20
+ // whitespace from: http://es5.github.io/#x15.5.4.20
+ var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003'
+ + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028'
+ + '\u2029\uFEFF';
+ var zeroWidth = '\u200b';
+ var wsRegexChars = '[' + ws + ']';
+ var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');
+ var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');
+ var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
+ defineProperties(StringPrototype, {
+ // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+ // http://perfectionkills.com/whitespace-deviations/
+ trim: function trim() {
+ if (typeof this === 'undefined' || this === null) {
+ throw new TypeError("can't convert " + this + ' to object');
+ }
+ return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
+ }
+ }, hasTrimWhitespaceBug);
+ var trim = call.bind(String.prototype.trim);
+
+ var hasLastIndexBug = StringPrototype.lastIndexOf && 'abcあい'.lastIndexOf('あい', 2) !== -1;
+ defineProperties(StringPrototype, {
+ lastIndexOf: function lastIndexOf(searchString) {
+ if (typeof this === 'undefined' || this === null) {
+ throw new TypeError("can't convert " + this + ' to object');
+ }
+ var S = $String(this);
+ var searchStr = $String(searchString);
+ var numPos = arguments.length > 1 ? $Number(arguments[1]) : NaN;
+ var pos = isActualNaN(numPos) ? Infinity : ES.ToInteger(numPos);
+ var start = min(max(pos, 0), S.length);
+ var searchLen = searchStr.length;
+ var k = start + searchLen;
+ while (k > 0) {
+ k = max(0, k - searchLen);
+ var index = strIndexOf(strSlice(S, k, start + searchLen), searchStr);
+ if (index !== -1) {
+ return k + index;
+ }
+ }
+ return -1;
+ }
+ }, hasLastIndexBug);
+
+ var originalLastIndexOf = StringPrototype.lastIndexOf;
+ defineProperties(StringPrototype, {
+ lastIndexOf: function lastIndexOf(searchString) {
+ return originalLastIndexOf.apply(this, arguments);
+ }
+ }, StringPrototype.lastIndexOf.length !== 1);
+
+ // ES-5 15.1.2.2
+ // eslint-disable-next-line radix
+ if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {
+ /* global parseInt: true */
+ parseInt = (function (origParseInt) {
+ var hexRegex = /^[-+]?0[xX]/;
+ return function parseInt(str, radix) {
+ if (typeof str === 'symbol') {
+ // handle Symbols in node 8.3/8.4
+ // eslint-disable-next-line no-implicit-coercion, no-unused-expressions
+ '' + str; // jscs:ignore disallowImplicitTypeConversion
+ }
+
+ var string = trim(String(str));
+ var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);
+ return origParseInt(string, defaultedRadix);
+ };
+ }(parseInt));
+ }
+
+ // https://es5.github.io/#x15.1.2.3
+ if (1 / parseFloat('-0') !== -Infinity) {
+ /* global parseFloat: true */
+ parseFloat = (function (origParseFloat) {
+ return function parseFloat(string) {
+ var inputString = trim(String(string));
+ var result = origParseFloat(inputString);
+ return result === 0 && strSlice(inputString, 0, 1) === '-' ? -0 : result;
+ };
+ }(parseFloat));
+ }
+
+ if (String(new RangeError('test')) !== 'RangeError: test') {
+ var errorToStringShim = function toString() {
+ if (typeof this === 'undefined' || this === null) {
+ throw new TypeError("can't convert " + this + ' to object');
+ }
+ var name = this.name;
+ if (typeof name === 'undefined') {
+ name = 'Error';
+ } else if (typeof name !== 'string') {
+ name = $String(name);
+ }
+ var msg = this.message;
+ if (typeof msg === 'undefined') {
+ msg = '';
+ } else if (typeof msg !== 'string') {
+ msg = $String(msg);
+ }
+ if (!name) {
+ return msg;
+ }
+ if (!msg) {
+ return name;
+ }
+ return name + ': ' + msg;
+ };
+ // can't use defineProperties here because of toString enumeration issue in IE <= 8
+ Error.prototype.toString = errorToStringShim;
+ }
+
+ if (supportsDescriptors) {
+ var ensureNonEnumerable = function (obj, prop) {
+ if (isEnum(obj, prop)) {
+ var desc = Object.getOwnPropertyDescriptor(obj, prop);
+ if (desc.configurable) {
+ desc.enumerable = false;
+ Object.defineProperty(obj, prop, desc);
+ }
+ }
+ };
+ ensureNonEnumerable(Error.prototype, 'message');
+ if (Error.prototype.message !== '') {
+ Error.prototype.message = '';
+ }
+ ensureNonEnumerable(Error.prototype, 'name');
+ }
+
+ if (String(/a/mig) !== '/a/gim') {
+ var regexToString = function toString() {
+ var str = '/' + this.source + '/';
+ if (this.global) {
+ str += 'g';
+ }
+ if (this.ignoreCase) {
+ str += 'i';
+ }
+ if (this.multiline) {
+ str += 'm';
+ }
+ return str;
+ };
+ // can't use defineProperties here because of toString enumeration issue in IE <= 8
+ RegExp.prototype.toString = regexToString;
+ }
+}));
+
+},{}],7:[function(require,module,exports){
+/*! populate.js v1.0.2 by @dannyvankooten | MIT license */
+;(function(root) {
+
+ /**
+ * Populate form fields from a JSON object.
+ *
+ * @param form object The form element containing your input fields.
+ * @param data array JSON data to populate the fields with.
+ * @param basename string Optional basename which is added to `name` attributes
+ */
+ var populate = function( form, data, basename) {
+
+ for(var key in data) {
+
+ if( ! data.hasOwnProperty( key ) ) {
+ continue;
+ }
+
+ var name = key;
+ var value = data[key];
+
+ if ('undefined' === typeof value) {
+ value = '';
+ }
+
+ if (null === value) {
+ value = '';
+ }
+
+ // handle array name attributes
+ if(typeof(basename) !== "undefined") {
+ name = basename + "[" + key + "]";
+ }
+
+ if(value.constructor === Array) {
+ name += '[]';
+ } else if(typeof value == "object") {
+ populate( form, value, name);
+ continue;
+ }
+
+ // only proceed if element is set
+ var element = form.elements.namedItem( name );
+ if( ! element ) {
+ continue;
+ }
+
+ var type = element.type || element[0].type;
+
+ switch(type ) {
+ default:
+ element.value = value;
+ break;
+
+ case 'radio':
+ case 'checkbox':
+ for( var j=0; j < element.length; j++ ) {
+ element[j].checked = ( value.indexOf(element[j].value) > -1 );
+ }
+ break;
+
+ case 'select-multiple':
+ var values = value.constructor == Array ? value : [value];
+
+ for(var k = 0; k < element.options.length; k++) {
+ element.options[k].selected |= (values.indexOf(element.options[k].value) > -1 );
+ }
+ break;
+
+ case 'select':
+ case 'select-one':
+ element.value = value.toString() || value;
+ break;
+ case 'date':
+ element.value = new Date(value).toISOString().split('T')[0];
+ break;
+ }
+
+ }
+
+ };
+
+ // Play nice with AMD, CommonJS or a plain global object.
+ if ( typeof define == 'function' && typeof define.amd == 'object' && define.amd ) {
+ define(function() {
+ return populate;
+ });
+ } else if ( typeof module !== 'undefined' && module.exports ) {
+ module.exports = populate;
+ } else {
+ root.populate = populate;
+ }
+
+}(this));
+
+},{}],8:[function(require,module,exports){
+/*!
+ * EventEmitter v5.2.5 - git.io/ee
+ * Unlicense - http://unlicense.org/
+ * Oliver Caldwell - http://oli.me.uk/
+ * @preserve
+ */
+
+;(function (exports) {
+ 'use strict';
+
+ /**
+ * Class for managing events.
+ * Can be extended to provide event functionality in other classes.
+ *
+ * @class EventEmitter Manages event registering and emitting.
+ */
+ function EventEmitter() {}
+
+ // Shortcuts to improve speed and size
+ var proto = EventEmitter.prototype;
+ var originalGlobalValue = exports.EventEmitter;
+
+ /**
+ * Finds the index of the listener for the event in its storage array.
+ *
+ * @param {Function[]} listeners Array of listeners to search through.
+ * @param {Function} listener Method to look for.
+ * @return {Number} Index of the specified listener, -1 if not found
+ * @api private
+ */
+ function indexOfListener(listeners, listener) {
+ var i = listeners.length;
+ while (i--) {
+ if (listeners[i].listener === listener) {
+ return i;
+ }
+ }
+
+ return -1;
+ }
+
+ /**
+ * Alias a method while keeping the context correct, to allow for overwriting of target method.
+ *
+ * @param {String} name The name of the target method.
+ * @return {Function} The aliased method
+ * @api private
+ */
+ function alias(name) {
+ return function aliasClosure() {
+ return this[name].apply(this, arguments);
+ };
+ }
+
+ /**
+ * Returns the listener array for the specified event.
+ * Will initialise the event object and listener arrays if required.
+ * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.
+ * Each property in the object response is an array of listener functions.
+ *
+ * @param {String|RegExp} evt Name of the event to return the listeners from.
+ * @return {Function[]|Object} All listener functions for the event.
+ */
+ proto.getListeners = function getListeners(evt) {
+ var events = this._getEvents();
+ var response;
+ var key;
+
+ // Return a concatenated array of all matching events if
+ // the selector is a regular expression.
+ if (evt instanceof RegExp) {
+ response = {};
+ for (key in events) {
+ if (events.hasOwnProperty(key) && evt.test(key)) {
+ response[key] = events[key];
+ }
+ }
+ }
+ else {
+ response = events[evt] || (events[evt] = []);
+ }
+
+ return response;
+ };
+
+ /**
+ * Takes a list of listener objects and flattens it into a list of listener functions.
+ *
+ * @param {Object[]} listeners Raw listener objects.
+ * @return {Function[]} Just the listener functions.
+ */
+ proto.flattenListeners = function flattenListeners(listeners) {
+ var flatListeners = [];
+ var i;
+
+ for (i = 0; i < listeners.length; i += 1) {
+ flatListeners.push(listeners[i].listener);
+ }
+
+ return flatListeners;
+ };
+
+ /**
+ * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.
+ *
+ * @param {String|RegExp} evt Name of the event to return the listeners from.
+ * @return {Object} All listener functions for an event in an object.
+ */
+ proto.getListenersAsObject = function getListenersAsObject(evt) {
+ var listeners = this.getListeners(evt);
+ var response;
+
+ if (listeners instanceof Array) {
+ response = {};
+ response[evt] = listeners;
+ }
+
+ return response || listeners;
+ };
+
+ function isValidListener (listener) {
+ if (typeof listener === 'function' || listener instanceof RegExp) {
+ return true
+ } else if (listener && typeof listener === 'object') {
+ return isValidListener(listener.listener)
+ } else {
+ return false
+ }
+ }
+
+ /**
+ * Adds a listener function to the specified event.
+ * The listener will not be added if it is a duplicate.
+ * If the listener returns true then it will be removed after it is called.
+ * If you pass a regular expression as the event name then the listener will be added to all events that match it.
+ *
+ * @param {String|RegExp} evt Name of the event to attach the listener to.
+ * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.addListener = function addListener(evt, listener) {
+ if (!isValidListener(listener)) {
+ throw new TypeError('listener must be a function');
+ }
+
+ var listeners = this.getListenersAsObject(evt);
+ var listenerIsWrapped = typeof listener === 'object';
+ var key;
+
+ for (key in listeners) {
+ if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {
+ listeners[key].push(listenerIsWrapped ? listener : {
+ listener: listener,
+ once: false
+ });
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Alias of addListener
+ */
+ proto.on = alias('addListener');
+
+ /**
+ * Semi-alias of addListener. It will add a listener that will be
+ * automatically removed after its first execution.
+ *
+ * @param {String|RegExp} evt Name of the event to attach the listener to.
+ * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.addOnceListener = function addOnceListener(evt, listener) {
+ return this.addListener(evt, {
+ listener: listener,
+ once: true
+ });
+ };
+
+ /**
+ * Alias of addOnceListener.
+ */
+ proto.once = alias('addOnceListener');
+
+ /**
+ * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.
+ * You need to tell it what event names should be matched by a regex.
+ *
+ * @param {String} evt Name of the event to create.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.defineEvent = function defineEvent(evt) {
+ this.getListeners(evt);
+ return this;
+ };
+
+ /**
+ * Uses defineEvent to define multiple events.
+ *
+ * @param {String[]} evts An array of event names to define.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.defineEvents = function defineEvents(evts) {
+ for (var i = 0; i < evts.length; i += 1) {
+ this.defineEvent(evts[i]);
+ }
+ return this;
+ };
+
+ /**
+ * Removes a listener function from the specified event.
+ * When passed a regular expression as the event name, it will remove the listener from all events that match it.
+ *
+ * @param {String|RegExp} evt Name of the event to remove the listener from.
+ * @param {Function} listener Method to remove from the event.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.removeListener = function removeListener(evt, listener) {
+ var listeners = this.getListenersAsObject(evt);
+ var index;
+ var key;
+
+ for (key in listeners) {
+ if (listeners.hasOwnProperty(key)) {
+ index = indexOfListener(listeners[key], listener);
+
+ if (index !== -1) {
+ listeners[key].splice(index, 1);
+ }
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Alias of removeListener
+ */
+ proto.off = alias('removeListener');
+
+ /**
+ * Adds listeners in bulk using the manipulateListeners method.
+ * If you pass an object as the first argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.
+ * You can also pass it a regular expression to add the array of listeners to all events that match it.
+ * Yeah, this function does quite a bit. That's probably a bad thing.
+ *
+ * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.
+ * @param {Function[]} [listeners] An optional array of listener functions to add.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.addListeners = function addListeners(evt, listeners) {
+ // Pass through to manipulateListeners
+ return this.manipulateListeners(false, evt, listeners);
+ };
+
+ /**
+ * Removes listeners in bulk using the manipulateListeners method.
+ * If you pass an object as the first argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.
+ * You can also pass it an event name and an array of listeners to be removed.
+ * You can also pass it a regular expression to remove the listeners from all events that match it.
+ *
+ * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.
+ * @param {Function[]} [listeners] An optional array of listener functions to remove.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.removeListeners = function removeListeners(evt, listeners) {
+ // Pass through to manipulateListeners
+ return this.manipulateListeners(true, evt, listeners);
+ };
+
+ /**
+ * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.
+ * The first argument will determine if the listeners are removed (true) or added (false).
+ * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.
+ * You can also pass it an event name and an array of listeners to be added/removed.
+ * You can also pass it a regular expression to manipulate the listeners of all events that match it.
+ *
+ * @param {Boolean} remove True if you want to remove listeners, false if you want to add.
+ * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.
+ * @param {Function[]} [listeners] An optional array of listener functions to add/remove.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {
+ var i;
+ var value;
+ var single = remove ? this.removeListener : this.addListener;
+ var multiple = remove ? this.removeListeners : this.addListeners;
+
+ // If evt is an object then pass each of its properties to this method
+ if (typeof evt === 'object' && !(evt instanceof RegExp)) {
+ for (i in evt) {
+ if (evt.hasOwnProperty(i) && (value = evt[i])) {
+ // Pass the single listener straight through to the singular method
+ if (typeof value === 'function') {
+ single.call(this, i, value);
+ }
+ else {
+ // Otherwise pass back to the multiple function
+ multiple.call(this, i, value);
+ }
+ }
+ }
+ }
+ else {
+ // So evt must be a string
+ // And listeners must be an array of listeners
+ // Loop over it and pass each one to the multiple method
+ i = listeners.length;
+ while (i--) {
+ single.call(this, evt, listeners[i]);
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Removes all listeners from a specified event.
+ * If you do not specify an event then all listeners will be removed.
+ * That means every event will be emptied.
+ * You can also pass a regex to remove all events that match it.
+ *
+ * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.removeEvent = function removeEvent(evt) {
+ var type = typeof evt;
+ var events = this._getEvents();
+ var key;
+
+ // Remove different things depending on the state of evt
+ if (type === 'string') {
+ // Remove all listeners for the specified event
+ delete events[evt];
+ }
+ else if (evt instanceof RegExp) {
+ // Remove all events matching the regex.
+ for (key in events) {
+ if (events.hasOwnProperty(key) && evt.test(key)) {
+ delete events[key];
+ }
+ }
+ }
+ else {
+ // Remove all listeners in all events
+ delete this._events;
+ }
+
+ return this;
+ };
+
+ /**
+ * Alias of removeEvent.
+ *
+ * Added to mirror the node API.
+ */
+ proto.removeAllListeners = alias('removeEvent');
+
+ /**
+ * Emits an event of your choice.
+ * When emitted, every listener attached to that event will be executed.
+ * If you pass the optional argument array then those arguments will be passed to every listener upon execution.
+ * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.
+ * So they will not arrive within the array on the other side, they will be separate.
+ * You can also pass a regular expression to emit to all events that match it.
+ *
+ * @param {String|RegExp} evt Name of the event to emit and execute listeners for.
+ * @param {Array} [args] Optional array of arguments to be passed to each listener.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.emitEvent = function emitEvent(evt, args) {
+ var listenersMap = this.getListenersAsObject(evt);
+ var listeners;
+ var listener;
+ var i;
+ var key;
+ var response;
+
+ for (key in listenersMap) {
+ if (listenersMap.hasOwnProperty(key)) {
+ listeners = listenersMap[key].slice(0);
+
+ for (i = 0; i < listeners.length; i++) {
+ // If the listener returns true then it shall be removed from the event
+ // The function is executed either with a basic call or an apply if there is an args array
+ listener = listeners[i];
+
+ if (listener.once === true) {
+ this.removeListener(evt, listener.listener);
+ }
+
+ response = listener.listener.apply(this, args || []);
+
+ if (response === this._getOnceReturnValue()) {
+ this.removeListener(evt, listener.listener);
+ }
+ }
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Alias of emitEvent
+ */
+ proto.trigger = alias('emitEvent');
+
+ /**
+ * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.
+ * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.
+ *
+ * @param {String|RegExp} evt Name of the event to emit and execute listeners for.
+ * @param {...*} Optional additional arguments to be passed to each listener.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.emit = function emit(evt) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return this.emitEvent(evt, args);
+ };
+
+ /**
+ * Sets the current value to check against when executing listeners. If a
+ * listeners return value matches the one set here then it will be removed
+ * after execution. This value defaults to true.
+ *
+ * @param {*} value The new value to check for when executing listeners.
+ * @return {Object} Current instance of EventEmitter for chaining.
+ */
+ proto.setOnceReturnValue = function setOnceReturnValue(value) {
+ this._onceReturnValue = value;
+ return this;
+ };
+
+ /**
+ * Fetches the current value to check against when executing listeners. If
+ * the listeners return value matches this one then it should be removed
+ * automatically. It will return true by default.
+ *
+ * @return {*|Boolean} The current value to check for or the default, true.
+ * @api private
+ */
+ proto._getOnceReturnValue = function _getOnceReturnValue() {
+ if (this.hasOwnProperty('_onceReturnValue')) {
+ return this._onceReturnValue;
+ }
+ else {
+ return true;
+ }
+ };
+
+ /**
+ * Fetches the events object and creates one if required.
+ *
+ * @return {Object} The events storage object.
+ * @api private
+ */
+ proto._getEvents = function _getEvents() {
+ return this._events || (this._events = {});
+ };
+
+ /**
+ * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.
+ *
+ * @return {Function} Non conflicting EventEmitter class.
+ */
+ EventEmitter.noConflict = function noConflict() {
+ exports.EventEmitter = originalGlobalValue;
+ return EventEmitter;
+ };
+
+ // Expose the class either via AMD, CommonJS or the global object
+ if (typeof define === 'function' && define.amd) {
+ define(function () {
+ return EventEmitter;
+ });
+ }
+ else if (typeof module === 'object' && module.exports){
+ module.exports = EventEmitter;
+ }
+ else {
+ exports.EventEmitter = EventEmitter;
+ }
+}(typeof window !== 'undefined' ? window : this || {}));
+
+},{}]},{},[5]);
+; })();
\ No newline at end of file
--- /dev/null
+!function(){var s=void 0;!function o(a,s,u){function l(e,t){if(!s[e]){if(!a[e]){var r=!1;if(!t&&r)return r(e,!0);if(c)return c(e,!0);var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}var i=s[e]={exports:{}};a[e][0].call(i.exports,function(t){return l(a[e][1][t]||t)},i,i.exports,o,a,s,u)}return s[e].exports}for(var c=!1,t=0;t<u.length;t++)l(u[t]);return l}({1:[function(t,e,r){"use strict";function n(t,e){for(var r=!!t.getAttribute("data-show-if"),n=r?t.getAttribute("data-show-if").split(":"):t.getAttribute("data-hide-if").split(":"),i=n[0],o=(1<n.length?n[1]:"*").split("|"),a=function(t,e,r){for(var n=[],i=t.querySelectorAll('input[name="'+e+'"], select[name="'+e+'"], textarea[name="'+e+'"], button[name="'+e+'"]'),o=0;o<i.length;o++){var a=i[o],s=a.getAttribute("type").toLowerCase();if("radio"!==s&&"checkbox"!==s||a.checked){if("button"===s||"submit"===s||"BUTTON"===a.tagName){if((!r||r.target!==a)&&t.dataset[e]!==a.value)continue;t.dataset[e]=a.value}n.push(a.value)}}return 0==n.length&&n.push(""),n}(function(t){for(var e=t;e.parentElement;)if("FORM"===(e=e.parentElement).tagName)return e;return null}(t),i,e),s=!1,u=0;u<a.length;u++){var l=a[u];if(s=-1<o.indexOf(l)||-1<o.indexOf("*")&&0<l.length)break}t.style.display=r?s?"":"none":s?"none":"";var c=t.querySelectorAll("input, select, textarea");[].forEach.call(c,function(t){(s||r)&&t.getAttribute("data-was-required")&&(t.required=!0,t.removeAttribute("data-was-required")),s&&r||!t.required||(t.setAttribute("data-was-required","true"),t.required=!1)})}function i(){var t=document.querySelectorAll(".hf-form [data-show-if], .hf-form [data-hide-if]");[].forEach.call(t,n)}function o(e){if(e.target&&e.target.form&&!(e.target.form.className.indexOf("hf-form")<0)){var t=e.target.form.querySelectorAll("[data-show-if], [data-hide-if]");[].forEach.call(t,function(t){return n(t,e)})}}Object.defineProperty(r,"__esModule",{value:!0}),r.default={init:function(){document.addEventListener("click",o,!0),document.addEventListener("keyup",o,!0),document.addEventListener("change",o,!0),document.addEventListener("hf-refresh",i,!0),window.addEventListener("load",i),i()}}},{}],2:[function(t,e,r){"use strict";function n(t){return t.innerHTML?t.innerHTML:t.value}function i(t,e){t.innerHTML?t.innerHTML=e:t.value=e}function o(t){this.form=t,this.button=t.querySelector('input[type="submit"], button[type="submit"]'),this.loadingInterval=0,this.character="·",this.button&&(this.originalButton=this.button.cloneNode(!0))}o.prototype.setCharacter=function(t){this.character=t},o.prototype.start=function(){if(this.button){var t=this.button.getAttribute("data-loading-text");if(t)return void i(this.button,t);var e=window.getComputedStyle(this.button);this.button.style.width=e.width,i(this.button,this.character),this.loadingInterval=window.setInterval(this.tick.bind(this),500)}else this.form.style.opacity="0.5"},o.prototype.tick=function(){var t=n(this.button),e=this.character;i(this.button,5<=t.length?e:t+" "+e)},o.prototype.stop=function(){if(this.button){this.button.style.width=this.originalButton.style.width;var t=n(this.originalButton);i(this.button,t),window.clearInterval(this.loadingInterval)}else this.form.style.opacity=""},e.exports=o},{}],3:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var h=function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){i=!0,o=t}finally{try{!n&&s.return&&s.return()}finally{if(i)throw o}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")},n=t("populate.js");r.default={init:function(){var t=[].filter.call(document.forms,function(t){return-1<t.className.indexOf("hf-form")});if(t){var e=function(t){var e=new URLSearchParams(t),r={},n=!0,i=!1,o=void 0;try{for(var a,s=e.entries()[Symbol.iterator]();!(n=(a=s.next()).done);n=!0){var u=h(a.value,2),l=u[0],c=u[1];if("[]"===l.substr(l.length-2)){var f=l.substr(0,l.length-2);r[f]=r[f]||[],r[f].push(c)}else r[l]=c}}catch(t){i=!0,o=t}finally{try{!n&&s.return&&s.return()}finally{if(i)throw o}}return r}(window.location.search);t.forEach(function(t){n(t,e)})}}}},{"populate.js":7}],4:[function(t,e,r){"use strict";!function(){if("function"==typeof window.CustomEvent)return;function t(t,e){e=e||{bubbles:!1,cancelable:!1,detail:void 0};var r=document.createEvent("CustomEvent");return r.initCustomEvent(t,e.bubbles,e.cancelable,e.detail),r}t.prototype=window.Event.prototype,window.CustomEvent=t}()},{}],5:[function(t,e,r){"use strict";var n=o(t("./form-prefiller.js")),i=o(t("./conditionality.js"));function o(t){return t&&t.__esModule?t:{default:t}}t("./polyfills/custom-event.js");t("es5-shim");var a=t("./form-loading-indicator.js"),s=window.hf_js_vars||{ajax_url:window.location.href},u=new(t("wolfy87-eventemitter"));function l(t){var e;e=t.querySelectorAll(".hf-message"),[].forEach.call(e,function(t){t.parentNode.removeChild(t)}),c("submit",t);var r=new FormData(t);[].forEach.call(t.querySelectorAll("[data-was-required=true]"),function(t){r.append("_was_required[]",t.getAttribute("name"))});var i,o,n=new XMLHttpRequest;n.onreadystatechange=((o=new a(i=t)).start(),function(){if(4===this.readyState){var t=void 0;if(o.stop(),200<=this.status&&this.status<400){try{t=JSON.parse(this.responseText)}catch(t){return void console.log('HTML Forms: failed to parse AJAX response.\n\nError: "'+t+'"')}c("submitted",i),t.error?c("error",i):c("success",i),t.message&&(e=i,r=t.message,(n=document.createElement("p")).className="hf-message hf-message-"+r.type,n.innerHTML=r.text,e.insertBefore(n,e.lastElementChild.nextElementSibling)),t.hide_form&&(i.querySelector(".hf-fields-wrap").style.display="none"),t.redirect_url&&(window.location=t.redirect_url),t.error||i.reset()}else console.log(this.responseText)}var e,r,n}),n.open("POST",s.ajax_url,!0),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(r),n=null}function c(t,e){e.dispatchEvent(new CustomEvent("hf-"+t)),u.emit(t,[e])}document.addEventListener("submit",function(t){var e=t.target;e.className.indexOf("hf-form")<0||(t.preventDefault(),l(e))},!1),i.default.init(),n.default.init(),window.html_forms={on:u.on.bind(u),submit:l}},{"./conditionality.js":1,"./form-loading-indicator.js":2,"./form-prefiller.js":3,"./polyfills/custom-event.js":4,"es5-shim":6,"wolfy87-eventemitter":8}],6:[function(t,r,n){!function(t,e){"use strict";"function"==typeof s&&s.amd?s(e):"object"==typeof n?r.exports=e():t.returnExports=e()}(this,function(){var h,p,s=Array,t=s.prototype,u=Object,e=u.prototype,l=Function,r=l.prototype,g=String,n=g.prototype,b=Number,i=b.prototype,c=t.slice,o=t.splice,d=t.push,a=t.unshift,f=t.concat,v=t.join,y=r.call,w=r.apply,m=Math.max,E=Math.min,x=e.toString,T="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,S=Function.prototype.toString,D=/^\s*class /,O=function(t){try{var e=S.call(t).replace(/\/\/.*\n/g,"").replace(/\/\*[.\s\S]*\*\//g,"").replace(/\n/gm," ").replace(/ {2}/g," ");return D.test(e)}catch(t){return!1}},j=function(t){if(!t)return!1;if("function"!=typeof t&&"object"!=typeof t)return!1;if(T)return function(t){try{return!O(t)&&(S.call(t),!0)}catch(t){return!1}}(t);if(O(t))return!1;var e=x.call(t);return"[object Function]"===e||"[object GeneratorFunction]"===e},M=RegExp.prototype.exec;h=function(t){return"object"==typeof t&&(T?function(t){try{return M.call(t),!0}catch(t){return!1}}(t):"[object RegExp]"===x.call(t))};var A=String.prototype.valueOf;p=function(t){return"string"==typeof t||"object"==typeof t&&(T?function(t){try{return A.call(t),!0}catch(t){return!1}}(t):"[object String]"===x.call(t))};var L,I,N=u.defineProperty&&function(){try{var t={};for(var e in u.defineProperty(t,"x",{enumerable:!1,value:t}),t)return!1;return t.x===t}catch(t){return!1}}(),k=(L=e.hasOwnProperty,I=N?function(t,e,r,n){!n&&e in t||u.defineProperty(t,e,{configurable:!0,enumerable:!1,writable:!0,value:r})}:function(t,e,r,n){!n&&e in t||(t[e]=r)},function(t,e,r){for(var n in e)L.call(e,n)&&I(t,n,e[n],r)}),R=function(t){var e=typeof t;return null===t||"object"!==e&&"function"!==e},C=b.isNaN||function(t){return t!=t},F=function(t){var e=+t;return C(e)?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(0<e||-1)*Math.floor(Math.abs(e))),e},_=function(t){var e,r,n;if(R(t))return t;if(r=t.valueOf,j(r)&&(e=r.call(t),R(e)))return e;if(n=t.toString,j(n)&&(e=n.call(t),R(e)))return e;throw new TypeError},P=function(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return u(t)},$=function(t){return t>>>0},q=function(){};k(r,{bind:function(e){var r=this;if(!j(r))throw new TypeError("Function.prototype.bind called on incompatible "+r);for(var n,i=c.call(arguments,1),t=m(0,r.length-i.length),o=[],a=0;a<t;a++)d.call(o,"$"+a);return n=l("binder","return function ("+v.call(o,",")+"){ return binder.apply(this, arguments); }")(function(){if(this instanceof n){var t=w.call(r,this,f.call(i,c.call(arguments)));return u(t)===t?t:this}return w.call(r,e,f.call(i,c.call(arguments)))}),r.prototype&&(q.prototype=r.prototype,n.prototype=new q,q.prototype=null),n}});var U=y.bind(e.hasOwnProperty),J=y.bind(e.toString),H=y.bind(c),Z=w.bind(c);if("object"==typeof document&&document&&document.documentElement)try{H(document.documentElement.childNodes)}catch(t){var B=H,z=Z;H=function(t){for(var e=[],r=t.length;0<r--;)e[r]=t[r];return z(e,B(arguments,1))},Z=function(t,e){return z(H(t),e)}}var G=y.bind(n.slice),V=y.bind(n.split),Y=y.bind(n.indexOf),X=y.bind(d),W=y.bind(e.propertyIsEnumerable),K=y.bind(t.sort),Q=s.isArray||function(t){return"[object Array]"===J(t)},tt=1!==[].unshift(0);k(t,{unshift:function(){return a.apply(this,arguments),this.length}},tt),k(s,{isArray:Q});var et=u("a"),rt="a"!==et[0]||!(0 in et),nt=function(t){var n=!0,e=!0,r=!1;if(t)try{t.call("foo",function(t,e,r){"object"!=typeof r&&(n=!1)}),t.call([1],function(){"use strict";e="string"==typeof this},"x")}catch(t){r=!0}return!!t&&!r&&n&&e};k(t,{forEach:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=-1,o=$(n.length);if(1<arguments.length&&(e=arguments[1]),!j(t))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++i<o;)i in n&&(void 0===e?t(n[i],i,r):t.call(e,n[i],i,r))}},!nt(t.forEach)),k(t,{map:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=$(n.length),o=s(i);if(1<arguments.length&&(e=arguments[1]),!j(t))throw new TypeError("Array.prototype.map callback must be a function");for(var a=0;a<i;a++)a in n&&(o[a]=void 0===e?t(n[a],a,r):t.call(e,n[a],a,r));return o}},!nt(t.map)),k(t,{filter:function(t){var e,r,n=P(this),i=rt&&p(this)?V(this,""):n,o=$(i.length),a=[];if(1<arguments.length&&(r=arguments[1]),!j(t))throw new TypeError("Array.prototype.filter callback must be a function");for(var s=0;s<o;s++)s in i&&(e=i[s],(void 0===r?t(e,s,n):t.call(r,e,s,n))&&X(a,e));return a}},!nt(t.filter)),k(t,{every:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=$(n.length);if(1<arguments.length&&(e=arguments[1]),!j(t))throw new TypeError("Array.prototype.every callback must be a function");for(var o=0;o<i;o++)if(o in n&&!(void 0===e?t(n[o],o,r):t.call(e,n[o],o,r)))return!1;return!0}},!nt(t.every)),k(t,{some:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=$(n.length);if(1<arguments.length&&(e=arguments[1]),!j(t))throw new TypeError("Array.prototype.some callback must be a function");for(var o=0;o<i;o++)if(o in n&&(void 0===e?t(n[o],o,r):t.call(e,n[o],o,r)))return!0;return!1}},!nt(t.some));var it=!1;t.reduce&&(it="object"==typeof t.reduce.call("es5",function(t,e,r,n){return n})),k(t,{reduce:function(t){var e=P(this),r=rt&&p(this)?V(this,""):e,n=$(r.length);if(!j(t))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===n&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var i,o=0;if(2<=arguments.length)i=arguments[1];else for(;;){if(o in r){i=r[o++];break}if(++o>=n)throw new TypeError("reduce of empty array with no initial value")}for(;o<n;o++)o in r&&(i=t(i,r[o],o,e));return i}},!it);var ot=!1;t.reduceRight&&(ot="object"==typeof t.reduceRight.call("es5",function(t,e,r,n){return n})),k(t,{reduceRight:function(t){var e,r=P(this),n=rt&&p(this)?V(this,""):r,i=$(n.length);if(!j(t))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===i&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var o=i-1;if(2<=arguments.length)e=arguments[1];else for(;;){if(o in n){e=n[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}if(o<0)return e;for(;o in n&&(e=t(e,n[o],o,r)),o--;);return e}},!ot);var at=t.indexOf&&-1!==[0,1].indexOf(1,2);k(t,{indexOf:function(t){var e=rt&&p(this)?V(this,""):P(this),r=$(e.length);if(0===r)return-1;var n=0;for(1<arguments.length&&(n=F(arguments[1])),n=0<=n?n:m(0,r+n);n<r;n++)if(n in e&&e[n]===t)return n;return-1}},at);var st=t.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);k(t,{lastIndexOf:function(t){var e=rt&&p(this)?V(this,""):P(this),r=$(e.length);if(0===r)return-1;var n=r-1;for(1<arguments.length&&(n=E(n,F(arguments[1]))),n=0<=n?n:r-Math.abs(n);0<=n;n--)if(n in e&&t===e[n])return n;return-1}},st);var ut,lt,ct=(lt=(ut=[1,2]).splice(),2===ut.length&&Q(lt)&&0===lt.length);k(t,{splice:function(t,e){return 0===arguments.length?[]:o.apply(this,arguments)}},!ct);var ft,ht=(ft={},t.splice.call(ft,0,0,1),1===ft.length);k(t,{splice:function(t,e){if(0===arguments.length)return[];var r=arguments;return this.length=m(F(this.length),0),0<arguments.length&&"number"!=typeof e&&((r=H(arguments)).length<2?X(r,this.length-t):r[1]=F(e)),o.apply(this,r)}},!ht);var pt,dt,vt=((pt=new s(1e5))[8]="x",pt.splice(1,1),7===pt.indexOf("x")),yt=((dt=[])[256]="a",dt.splice(257,0,"b"),"a"===dt[256]);k(t,{splice:function(t,e){for(var r,n=P(this),i=[],o=$(n.length),a=F(t),s=a<0?m(o+a,0):E(a,o),u=E(m(F(e),0),o-s),l=0;l<u;)r=g(s+l),U(n,r)&&(i[l]=n[r]),l+=1;var c,f=H(arguments,2),h=f.length;if(h<u){l=s;for(var p=o-u;l<p;)r=g(l+u),c=g(l+h),U(n,r)?n[c]=n[r]:delete n[c],l+=1;for(var d=(l=o)-u+h;d<l;)delete n[l-1],l-=1}else if(u<h)for(l=o-u;s<l;)r=g(l+u-1),c=g(l+h-1),U(n,r)?n[c]=n[r]:delete n[c],l-=1;l=s;for(var v=0;v<f.length;++v)n[l]=f[v],l+=1;return n.length=o-u+h,i}},!vt||!yt);var gt,bt=t.join;try{gt="1,2,3"!==Array.prototype.join.call("123",",")}catch(t){gt=!0}gt&&k(t,{join:function(t){var e=void 0===t?",":t;return bt.call(p(this)?V(this,""):this,e)}},gt);var wt="1,2"!==[1,2].join(void 0);wt&&k(t,{join:function(t){var e=void 0===t?",":t;return bt.call(this,e)}},wt);var mt,Et=function(t){for(var e=P(this),r=$(e.length),n=0;n<arguments.length;)e[r+n]=arguments[n],n+=1;return e.length=r+n,r+n},xt=(mt={},1!==Array.prototype.push.call(mt,void 0)||1!==mt.length||void 0!==mt[0]||!U(mt,0));k(t,{push:function(t){return Q(this)?d.apply(this,arguments):Et.apply(this,arguments)}},xt);var Tt,St=1!==(Tt=[]).push(void 0)||1!==Tt.length||void 0!==Tt[0]||!U(Tt,0);k(t,{push:Et},St),k(t,{slice:function(t,e){var r=p(this)?V(this,""):this;return Z(r,arguments)}},rt);var Dt=function(){try{[1,2].sort(null)}catch(t){try{[1,2].sort({})}catch(t){return!1}}return!0}(),Ot=function(){try{return[1,2].sort(/a/),!1}catch(t){}return!0}(),jt=function(){try{return[1,2].sort(void 0),!0}catch(t){}return!1}();k(t,{sort:function(t){if(void 0===t)return K(this);if(!j(t))throw new TypeError("Array.prototype.sort callback must be a function");return K(this,t)}},Dt||!jt||!Ot);var Mt=!W({toString:null},"toString"),At=W(function(){},"prototype"),Lt=!U("x","0"),It=function(t){var e=t.constructor;return e&&e.prototype===t},Nt={$window:!0,$console:!0,$parent:!0,$self:!0,$frame:!0,$frames:!0,$frameElement:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$external:!0,$width:!0,$height:!0,$top:!0,$localStorage:!0},kt=function(){if("undefined"==typeof window)return!1;for(var t in window)try{!Nt["$"+t]&&U(window,t)&&null!==window[t]&&"object"==typeof window[t]&&It(window[t])}catch(t){return!0}return!1}(),Rt=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],Ct=Rt.length,Ft=function(t){return"[object Arguments]"===J(t)},_t=Ft(arguments)?Ft:function(t){return null!==t&&"object"==typeof t&&"number"==typeof t.length&&0<=t.length&&!Q(t)&&j(t.callee)};k(u,{keys:function(t){var e=j(t),r=_t(t),n=null!==t&&"object"==typeof t,i=n&&p(t);if(!n&&!e&&!r)throw new TypeError("Object.keys called on a non-object");var o=[],a=At&&e;if(i&&Lt||r)for(var s=0;s<t.length;++s)X(o,g(s));if(!r)for(var u in t)a&&"prototype"===u||!U(t,u)||X(o,g(u));if(Mt)for(var l=function(t){if("undefined"==typeof window||!kt)return It(t);try{return It(t)}catch(t){return!1}}(t),c=0;c<Ct;c++){var f=Rt[c];l&&"constructor"===f||!U(t,f)||X(o,f)}return o}});var Pt=u.keys&&function(){return 2===u.keys(arguments).length}(1,2),$t=u.keys&&function(){var t=u.keys(arguments);return 1!==arguments.length||1!==t.length||1!==t[0]}(1),qt=u.keys;k(u,{keys:function(t){return _t(t)?qt(H(t)):qt(t)}},!Pt||$t);var Ut,Jt,Ht=0!==new Date(-0xc782b5b342b24).getUTCMonth(),Zt=new Date(-0x55d318d56a724),Bt=new Date(14496624e5),zt="Mon, 01 Jan -45875 11:59:59 GMT"!==Zt.toUTCString();Zt.getTimezoneOffset()<-720?(Ut="Tue Jan 02 -45875"!==Zt.toDateString(),Jt=!/^Thu Dec 10 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(Bt))):(Ut="Mon Jan 01 -45875"!==Zt.toDateString(),Jt=!/^Wed Dec 09 2015 \d\d:\d\d:\d\d GMT[-+]\d\d\d\d(?: |$)/.test(String(Bt)));var Gt=y.bind(Date.prototype.getFullYear),Vt=y.bind(Date.prototype.getMonth),Yt=y.bind(Date.prototype.getDate),Xt=y.bind(Date.prototype.getUTCFullYear),Wt=y.bind(Date.prototype.getUTCMonth),Kt=y.bind(Date.prototype.getUTCDate),Qt=y.bind(Date.prototype.getUTCDay),te=y.bind(Date.prototype.getUTCHours),ee=y.bind(Date.prototype.getUTCMinutes),re=y.bind(Date.prototype.getUTCSeconds),ne=y.bind(Date.prototype.getUTCMilliseconds),ie=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],oe=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],ae=function(t,e){return Yt(new Date(e,t,0))};k(Date.prototype,{getFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Gt(this);return t<0&&11<Vt(this)?t+1:t},getMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Gt(this),e=Vt(this);return t<0&&11<e?0:e},getDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Gt(this),e=Vt(this),r=Yt(this);return t<0&&11<e?12===e?r:ae(0,t+1)-r+1:r},getUTCFullYear:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Xt(this);return t<0&&11<Wt(this)?t+1:t},getUTCMonth:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Xt(this),e=Wt(this);return t<0&&11<e?0:e},getUTCDate:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Xt(this),e=Wt(this),r=Kt(this);return t<0&&11<e?12===e?r:ae(0,t+1)-r+1:r}},Ht),k(Date.prototype,{toUTCString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=Qt(this),e=Kt(this),r=Wt(this),n=Xt(this),i=te(this),o=ee(this),a=re(this);return ie[t]+", "+(e<10?"0"+e:e)+" "+oe[r]+" "+n+" "+(i<10?"0"+i:i)+":"+(o<10?"0"+o:o)+":"+(a<10?"0"+a:a)+" GMT"}},Ht||zt),k(Date.prototype,{toDateString:function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=this.getDay(),e=this.getDate(),r=this.getMonth(),n=this.getFullYear();return ie[t]+" "+oe[r]+" "+(e<10?"0"+e:e)+" "+n}},Ht||Ut),(Ht||Jt)&&(Date.prototype.toString=function(){if(!(this&&this instanceof Date))throw new TypeError("this is not a Date object.");var t=this.getDay(),e=this.getDate(),r=this.getMonth(),n=this.getFullYear(),i=this.getHours(),o=this.getMinutes(),a=this.getSeconds(),s=this.getTimezoneOffset(),u=Math.floor(Math.abs(s)/60),l=Math.floor(Math.abs(s)%60);return ie[t]+" "+oe[r]+" "+(e<10?"0"+e:e)+" "+n+" "+(i<10?"0"+i:i)+":"+(o<10?"0"+o:o)+":"+(a<10?"0"+a:a)+" GMT"+(0<s?"-":"+")+(u<10?"0"+u:u)+(l<10?"0"+l:l)},N&&u.defineProperty(Date.prototype,"toString",{configurable:!0,enumerable:!1,writable:!0}));var se=-621987552e5,ue="-000001",le=Date.prototype.toISOString&&-1===new Date(se).toISOString().indexOf(ue),ce=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString(),fe=y.bind(Date.prototype.getTime);k(Date.prototype,{toISOString:function(){if(!isFinite(this)||!isFinite(fe(this)))throw new RangeError("Date.prototype.toISOString called on non-finite value.");var t=Xt(this),e=Wt(this);t+=Math.floor(e/12);var r=[(e=(e%12+12)%12)+1,Kt(this),te(this),ee(this),re(this)];t=(t<0?"-":9999<t?"+":"")+G("00000"+Math.abs(t),0<=t&&t<=9999?-4:-6);for(var n=0;n<r.length;++n)r[n]=G("00"+r[n],-2);return t+"-"+H(r,0,2).join("-")+"T"+H(r,2).join(":")+"."+G("000"+ne(this),-3)+"Z"}},le||ce),function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(se).toJSON().indexOf(ue)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(t){return!1}}()||(Date.prototype.toJSON=function(t){var e=u(this),r=_(e);if("number"==typeof r&&!isFinite(r))return null;var n=e.toISOString;if(!j(n))throw new TypeError("toISOString property is not callable");return n.call(e)});var he=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),pe=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z"));if(isNaN(Date.parse("2000-01-01T00:00:00.000Z"))||pe||!he){var de=Math.pow(2,31)-1,ve=C(new Date(1970,0,1,0,0,0,de+1).getTime());Date=function(d){var p=function(t,e,r,n,i,o,a){var s,u=arguments.length;if(this instanceof d){var l=o,c=a;if(ve&&7<=u&&de<a){var f=Math.floor(a/de)*de,h=Math.floor(f/1e3);l+=h,c-=1e3*h}s=1===u&&g(t)===t?new d(p.parse(t)):7<=u?new d(t,e,r,n,i,l,c):6<=u?new d(t,e,r,n,i,l):5<=u?new d(t,e,r,n,i):4<=u?new d(t,e,r,n):3<=u?new d(t,e,r):2<=u?new d(t,e):1<=u?new d(t instanceof d?+t:t):new d}else s=d.apply(this,arguments);return R(s)||k(s,{constructor:p},!0),s},v=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),n=[0,31,59,90,120,151,181,212,243,273,304,334,365],y=function(t,e){var r=1<e?1:0;return n[e]+Math.floor((t-1969+r)/4)-Math.floor((t-1901+r)/100)+Math.floor((t-1601+r)/400)+365*(t-1970)};for(var t in d)U(d,t)&&(p[t]=d[t]);k(p,{now:d.now,UTC:d.UTC},!0),p.prototype=d.prototype,k(p.prototype,{constructor:p},!0);return k(p,{parse:function(t){var e=v.exec(t);if(e){var r,n=b(e[1]),i=b(e[2]||1)-1,o=b(e[3]||1)-1,a=b(e[4]||0),s=b(e[5]||0),u=b(e[6]||0),l=Math.floor(1e3*b(e[7]||0)),c=Boolean(e[4]&&!e[8]),f="-"===e[9]?1:-1,h=b(e[10]||0),p=b(e[11]||0);return a<(0<s||0<u||0<l?24:25)&&s<60&&u<60&&l<1e3&&-1<i&&i<12&&h<24&&p<60&&-1<o&&o<y(n,i+1)-y(n,i)&&(r=1e3*(60*((r=60*(24*(y(n,i)+o)+a+h*f))+s+p*f)+u)+l,c&&(r=function(t){var e=0,r=t;if(ve&&de<r){var n=Math.floor(r/de)*de,i=Math.floor(n/1e3);e+=i,r-=1e3*i}return b(new d(1970,0,1,0,0,e,r))}(r)),-864e13<=r&&r<=864e13)?r:NaN}return d.parse.apply(this,arguments)}}),p}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var ye=i.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0)),ge={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(t,e){for(var r=-1,n=e;++r<ge.size;)n+=t*ge.data[r],ge.data[r]=n%ge.base,n=Math.floor(n/ge.base)},divide:function(t){for(var e=ge.size,r=0;0<=--e;)r+=ge.data[e],ge.data[e]=Math.floor(r/t),r=r%t*ge.base},numToString:function(){for(var t=ge.size,e="";0<=--t;)if(""!==e||0===t||0!==ge.data[t]){var r=g(ge.data[t]);""===e?e=r:e+=G("0000000",0,7-r.length)+r}return e},pow:function t(e,r,n){return 0===r?n:r%2==1?t(e,r-1,n*e):t(e*e,r/2,n)},log:function(t){for(var e=0,r=t;4096<=r;)e+=12,r/=4096;for(;2<=r;)e+=1,r/=2;return e}};k(i,{toFixed:function(t){var e,r,n,i,o,a,s,u;if(e=b(t),(e=C(e)?0:Math.floor(e))<0||20<e)throw new RangeError("Number.toFixed called with invalid number of decimals");if(r=b(this),C(r))return"NaN";if(r<=-1e21||1e21<=r)return g(r);if(n="",r<0&&(n="-",r=-r),i="0",1e-21<r)if(a=(o=ge.log(r*ge.pow(2,69,1))-69)<0?r*ge.pow(2,-o,1):r/ge.pow(2,o,1),a*=4503599627370496,0<(o=52-o)){for(ge.multiply(0,a),s=e;7<=s;)ge.multiply(1e7,0),s-=7;for(ge.multiply(ge.pow(10,s,1),0),s=o-1;23<=s;)ge.divide(1<<23),s-=23;ge.divide(1<<s),ge.multiply(1,1),ge.divide(2),i=ge.numToString()}else ge.multiply(0,a),ge.multiply(1<<-o,0),i=ge.numToString()+G("0.00000000000000000000",2,2+e);return i=0<e?(u=i.length)<=e?n+G("0.0000000000000000000",0,e-u+2)+i:n+G(i,0,u-e)+"."+G(i,u-e):n+i}},ye);var be,we,me=function(){try{return"1"===1..toPrecision(void 0)}catch(t){return!0}}(),Ee=i.toPrecision;k(i,{toPrecision:function(t){return void 0===t?Ee.call(this):Ee.call(this,t)}},me),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||1<".".split(/()()/).length?(be=void 0===/()??/.exec("")[1],we=Math.pow(2,32)-1,n.split=function(t,e){var r=String(this);if(void 0===t&&0===e)return[];if(!h(t))return V(this,t,e);var n,i,o,a,s=[],u=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,c=new RegExp(t.source,u+"g");be||(n=new RegExp("^"+c.source+"$(?!\\s)",u));var f=void 0===e?we:$(e);for(i=c.exec(r);i&&!(l<(o=i.index+i[0].length)&&(X(s,G(r,l,i.index)),!be&&1<i.length&&i[0].replace(n,function(){for(var t=1;t<arguments.length-2;t++)void 0===arguments[t]&&(i[t]=void 0)}),1<i.length&&i.index<r.length&&d.apply(s,H(i,1)),a=i[0].length,l=o,f<=s.length));)c.lastIndex===i.index&&c.lastIndex++,i=c.exec(r);return l===r.length?!a&&c.test("")||X(s,""):X(s,G(r,l)),f<s.length?H(s,0,f):s}):"0".split(void 0,0).length&&(n.split=function(t,e){return void 0===t&&0===e?[]:V(this,t,e)});var xe,Te=n.replace;(xe=[],"x".replace(/x(.)?/g,function(t,e){X(xe,e)}),1===xe.length&&void 0===xe[0])||(n.replace=function(i,o){var t=j(o),e=h(i)&&/\)[*?]/.test(i.source);if(t&&e){return Te.call(this,i,function(t){var e=arguments.length,r=i.lastIndex;i.lastIndex=0;var n=i.exec(t)||[];return i.lastIndex=r,X(n,arguments[e-2],arguments[e-1]),o.apply(this,n)})}return Te.call(this,i,o)});var Se=n.substr,De="".substr&&"b"!=="0b".substr(-1);k(n,{substr:function(t,e){var r=t;return t<0&&(r=m(this.length+t,0)),Se.call(this,r,e)}},De);var Oe="\t\n\v\f\r \u2028\u2029\ufeff",je="["+Oe+"]",Me=new RegExp("^"+je+je+"*"),Ae=new RegExp(je+je+"*$"),Le=n.trim&&(Oe.trim()||!"".trim());k(n,{trim:function(){if(null==this)throw new TypeError("can't convert "+this+" to object");return g(this).replace(Me,"").replace(Ae,"")}},Le);var Ie=y.bind(String.prototype.trim),Ne=n.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);k(n,{lastIndexOf:function(t){if(null==this)throw new TypeError("can't convert "+this+" to object");for(var e=g(this),r=g(t),n=1<arguments.length?b(arguments[1]):NaN,i=C(n)?1/0:F(n),o=E(m(i,0),e.length),a=r.length,s=o+a;0<s;){s=m(0,s-a);var u=Y(G(e,s,o+a),r);if(-1!==u)return s+u}return-1}},Ne);var ke,Re,Ce,Fe=n.lastIndexOf;if(k(n,{lastIndexOf:function(t){return Fe.apply(this,arguments)}},1!==n.lastIndexOf.length),8===parseInt(Oe+"08")&&22===parseInt(Oe+"0x16")||(parseInt=(ke=parseInt,Re=/^[-+]?0[xX]/,function(t,e){var r=Ie(String(t)),n=b(e)||(Re.test(r)?16:10);return ke(r,n)})),1/parseFloat("-0")!=-1/0&&(parseFloat=(Ce=parseFloat,function(t){var e=Ie(String(t)),r=Ce(e);return 0===r&&"-"===G(e,0,1)?-0:r})),"RangeError: test"!==String(new RangeError("test"))){Error.prototype.toString=function(){if(null==this)throw new TypeError("can't convert "+this+" to object");var t=this.name;void 0===t?t="Error":"string"!=typeof t&&(t=g(t));var e=this.message;return void 0===e?e="":"string"!=typeof e&&(e=g(e)),t?e?t+": "+e:t:e}}if(N){var _e=function(t,e){if(W(t,e)){var r=Object.getOwnPropertyDescriptor(t,e);r.configurable&&(r.enumerable=!1,Object.defineProperty(t,e,r))}};_e(Error.prototype,"message"),""!==Error.prototype.message&&(Error.prototype.message=""),_e(Error.prototype,"name")}if("/a/gim"!==String(/a/gim)){RegExp.prototype.toString=function(){var t="/"+this.source+"/";return this.global&&(t+="g"),this.ignoreCase&&(t+="i"),this.multiline&&(t+="m"),t}}})},{}],7:[function(t,e,r){var n,c;n=this,c=function(t,e,r){for(var n in e)if(e.hasOwnProperty(n)){var i=n,o=e[n];if(void 0===o&&(o=""),null===o&&(o=""),void 0!==r&&(i=r+"["+n+"]"),o.constructor===Array)i+="[]";else if("object"==typeof o){c(t,o,i);continue}var a=t.elements.namedItem(i);if(a)switch(a.type||a[0].type){default:a.value=o;break;case"radio":case"checkbox":for(var s=0;s<a.length;s++)a[s].checked=-1<o.indexOf(a[s].value);break;case"select-multiple":for(var u=o.constructor==Array?o:[o],l=0;l<a.options.length;l++)a.options[l].selected|=-1<u.indexOf(a.options[l].value);break;case"select":case"select-one":a.value=o.toString()||o;break;case"date":a.value=new Date(o).toISOString().split("T")[0]}}},"function"==typeof s&&"object"==typeof s.amd&&s.amd?s(function(){return c}):void 0!==e&&e.exports?e.exports=c:n.populate=c},{}],8:[function(t,a,e){!function(t){"use strict";function e(){}var r=e.prototype,n=t.EventEmitter;function o(t,e){for(var r=t.length;r--;)if(t[r].listener===e)return r;return-1}function i(t){return function(){return this[t].apply(this,arguments)}}r.getListeners=function(t){var e,r,n=this._getEvents();if(t instanceof RegExp)for(r in e={},n)n.hasOwnProperty(r)&&t.test(r)&&(e[r]=n[r]);else e=n[t]||(n[t]=[]);return e},r.flattenListeners=function(t){var e,r=[];for(e=0;e<t.length;e+=1)r.push(t[e].listener);return r},r.getListenersAsObject=function(t){var e,r=this.getListeners(t);return r instanceof Array&&((e={})[t]=r),e||r},r.addListener=function(t,e){if(!function t(e){return"function"==typeof e||e instanceof RegExp||!(!e||"object"!=typeof e)&&t(e.listener)}(e))throw new TypeError("listener must be a function");var r,n=this.getListenersAsObject(t),i="object"==typeof e;for(r in n)n.hasOwnProperty(r)&&-1===o(n[r],e)&&n[r].push(i?e:{listener:e,once:!1});return this},r.on=i("addListener"),r.addOnceListener=function(t,e){return this.addListener(t,{listener:e,once:!0})},r.once=i("addOnceListener"),r.defineEvent=function(t){return this.getListeners(t),this},r.defineEvents=function(t){for(var e=0;e<t.length;e+=1)this.defineEvent(t[e]);return this},r.removeListener=function(t,e){var r,n,i=this.getListenersAsObject(t);for(n in i)i.hasOwnProperty(n)&&-1!==(r=o(i[n],e))&&i[n].splice(r,1);return this},r.off=i("removeListener"),r.addListeners=function(t,e){return this.manipulateListeners(!1,t,e)},r.removeListeners=function(t,e){return this.manipulateListeners(!0,t,e)},r.manipulateListeners=function(t,e,r){var n,i,o=t?this.removeListener:this.addListener,a=t?this.removeListeners:this.addListeners;if("object"!=typeof e||e instanceof RegExp)for(n=r.length;n--;)o.call(this,e,r[n]);else for(n in e)e.hasOwnProperty(n)&&(i=e[n])&&("function"==typeof i?o.call(this,n,i):a.call(this,n,i));return this},r.removeEvent=function(t){var e,r=typeof t,n=this._getEvents();if("string"===r)delete n[t];else if(t instanceof RegExp)for(e in n)n.hasOwnProperty(e)&&t.test(e)&&delete n[e];else delete this._events;return this},r.removeAllListeners=i("removeEvent"),r.emitEvent=function(t,e){var r,n,i,o,a=this.getListenersAsObject(t);for(o in a)if(a.hasOwnProperty(o))for(r=a[o].slice(0),i=0;i<r.length;i++)!0===(n=r[i]).once&&this.removeListener(t,n.listener),n.listener.apply(this,e||[])===this._getOnceReturnValue()&&this.removeListener(t,n.listener);return this},r.trigger=i("emitEvent"),r.emit=function(t){var e=Array.prototype.slice.call(arguments,1);return this.emitEvent(t,e)},r.setOnceReturnValue=function(t){return this._onceReturnValue=t,this},r._getOnceReturnValue=function(){return!this.hasOwnProperty("_onceReturnValue")||this._onceReturnValue},r._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return t.EventEmitter=n,e},"function"==typeof s&&s.amd?s(function(){return e}):"object"==typeof a&&a.exports?a.exports=e:t.EventEmitter=e}("undefined"!=typeof window?window:this||{})},{}]},{},[5])}();
+//# sourceMappingURL=public.min.js.map
--- /dev/null
+{"version":3,"sources":["public.js"],"names":["define","undefined","r","e","n","t","o","i","f","c","u","a","Error","code","p","exports","call","length","1","require","module","toggleElement","el","evt","show","getAttribute","conditions","split","fieldName","expectedValues","values","form","inputs","querySelectorAll","input","type","toLowerCase","checked","tagName","target","dataset","value","push","getFieldValues","element","bubbleElement","parentElement","findForm","conditionMet","indexOf","style","display","forEach","required","removeAttribute","setAttribute","evaluate","elements","document","handleInputEvent","className","Object","defineProperty","default","init","addEventListener","window","2","getButtonText","button","innerHTML","setButtonText","text","Loader","formElement","this","querySelector","loadingInterval","character","originalButton","cloneNode","prototype","setCharacter","start","loadingText","styles","getComputedStyle","width","setInterval","tick","bind","opacity","loadingChar","stop","clearInterval","3","_slicedToArray","arr","Array","isArray","Symbol","iterator","_arr","_n","_d","_e","_s","_i","next","done","err","sliceIterator","TypeError","populate","forms","filter","data","q","params","URLSearchParams","obj","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","entries","_step$value","name","substr","arrName","return","parseUrlParams","location","search","populate.js","4","CustomEvent","event","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","5","_formPrefiller2","_interopRequireDefault","_conditionality2","__esModule","vars","hf_js_vars","ajax_url","href","events","submitForm","formEl","messageElements","parentNode","removeChild","emitEvent","formData","FormData","append","loader","request","XMLHttpRequest","onreadystatechange","readyState","response","status","JSON","parse","responseText","error","console","log","message","txtElement","createElement","insertBefore","lastElementChild","nextElementSibling","hide_form","redirect_url","reset","open","setRequestHeader","send","eventName","dispatchEvent","emit","preventDefault","html_forms","on","submit","./conditionality.js","./form-loading-indicator.js","./form-prefiller.js","./polyfills/custom-event.js","es5-shim","wolfy87-eventemitter","6","root","factory","amd","returnExports","isRegex","isString","$Array","ArrayPrototype","$Object","ObjectPrototype","$Function","Function","FunctionPrototype","$String","String","StringPrototype","$Number","Number","NumberPrototype","array_slice","slice","array_splice","splice","array_push","array_unshift","unshift","array_concat","concat","array_join","join","apply","max","Math","min","to_string","toString","hasToStringTag","toStringTag","fnToStr","constructorRegex","isES6ClassFn","spaceStripped","replace","test","isCallable","tryFunctionObject","strClass","regexExec","RegExp","exec","tryRegexExec","strValue","valueOf","tryStringObject","has","supportsDescriptors","_","enumerable","x","defineProperties","hasOwnProperty","object","method","forceAssign","configurable","writable","map","isPrimitive","isActualNaN","isNaN","ES","num","floor","abs","val","toStr","Empty","that","bound","args","arguments","boundLength","boundArgs","result","owns","arraySlice","arraySliceApply","documentElement","childNodes","origArraySlice","origArraySliceApply","strSlice","strSplit","strIndexOf","pushCall","isEnum","propertyIsEnumerable","arraySort","sort","hasUnshiftReturnValueBug","boxedString","splitString","properlyBoxesContext","properlyBoxesNonStrict","properlyBoxesStrict","threwException","__","context","callbackfn","T","self","every","some","reduceCoercesToObject","reduce","___","list","reduceRightCoercesToObject","reduceRight","hasFirefox2IndexOfBug","searchElement","hasFirefox2LastIndexOfBug","lastIndexOf","spliceNoopReturnsEmptyArray","deleteCount","spliceWorksWithEmptyObject","spliceWorksWithLargeSparseArrays","spliceWorksWithSmallSparseArrays","from","O","A","len","relativeStart","actualStart","actualDeleteCount","k","to","items","itemCount","maxK","minK","hasStringJoinBug","originalJoin","separator","sep","hasJoinUndefinedBug","pushShim","item","pushIsNotGeneric","pushUndefinedIsWeird","end","sortIgnoresNonFunctions","e2","sortThrowsOnRegex","sortIgnoresUndefined","compareFn","hasDontEnumBug","hasProtoEnumBug","hasStringEnumBug","equalsConstructorPrototype","ctor","constructor","excludedKeys","$window","$console","$parent","$self","$frame","$frames","$frameElement","$webkitIndexedDB","$webkitStorageInfo","$external","$width","$height","$top","$localStorage","hasAutomationEqualityBug","dontEnums","dontEnumsLength","isStandardArguments","isArguments","callee","keys","isFn","isArgs","isObject","isStr","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","j","dontEnum","keysWorksWithArguments","keysHasArgumentsLengthBug","argKeys","originalKeys","hasToDateStringFormatBug","hasToStringFormatBug","hasNegativeMonthYearBug","Date","getUTCMonth","aNegativeTestDate","aPositiveTestDate","hasToUTCStringFormatBug","toUTCString","getTimezoneOffset","toDateString","originalGetFullYear","getFullYear","originalGetMonth","getMonth","originalGetDate","getDate","originalGetUTCFullYear","getUTCFullYear","originalGetUTCMonth","originalGetUTCDate","getUTCDate","originalGetUTCDay","getUTCDay","originalGetUTCHours","getUTCHours","originalGetUTCMinutes","getUTCMinutes","originalGetUTCSeconds","getUTCSeconds","originalGetUTCMilliseconds","getUTCMilliseconds","dayName","monthName","daysInMonth","month","year","date","day","hour","minute","second","getDay","getHours","getMinutes","getSeconds","timezoneOffset","hoursOffset","minutesOffset","negativeDate","negativeYearString","hasNegativeDateBug","toISOString","hasSafari51DateBug","getTime","isFinite","RangeError","toJSON","NaN","key","tv","toISO","supportsExtendedYears","acceptsInvalidDates","maxSafeUnsigned32Bit","pow","hasSafariSignedIntBug","NativeDate","DateShim","Y","M","D","h","m","s","ms","seconds","millis","msToShift","sToShift","isoDateExpression","months","dayFromMonth","now","UTC","string","match","millisecond","isLocalTime","Boolean","signOffset","hourOffset","minuteOffset","toUTC","hasToFixedBugs","toFixed","toFixedHelpers","base","size","multiply","c2","divide","numToString","acc","x2","fractionDigits","z","compliantExecNpcg","maxSafe32BitInt","hasToPrecisionUndefinedBug","toPrecision","originalToPrecision","precision","limit","separator2","lastIndex","lastLength","output","flags","ignoreCase","multiline","unicode","sticky","lastLastIndex","separatorCopy","source","splitLimit","index","groups","str_replace","group","searchValue","replaceValue","hasCapturingGroups","originalLastIndex","string_substr","hasNegativeSubstrBug","normalizedStart","ws","wsRegexChars","trimBeginRegexp","trimEndRegexp","hasTrimWhitespaceBug","trim","hasLastIndexBug","searchString","S","searchStr","numPos","pos","Infinity","searchLen","origParseInt","hexRegex","origParseFloat","originalLastIndexOf","parseInt","str","radix","defaultedRadix","parseFloat","inputString","msg","ensureNonEnumerable","prop","desc","getOwnPropertyDescriptor","global","7","basename","namedItem","options","selected","8","EventEmitter","proto","originalGlobalValue","indexOfListener","listeners","listener","alias","getListeners","_getEvents","flattenListeners","flatListeners","getListenersAsObject","addListener","isValidListener","listenerIsWrapped","once","addOnceListener","defineEvent","defineEvents","evts","removeListener","off","addListeners","manipulateListeners","removeListeners","remove","single","multiple","removeEvent","_events","removeAllListeners","listenersMap","_getOnceReturnValue","trigger","setOnceReturnValue","_onceReturnValue","noConflict"],"mappings":"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","file":"public.min.js","sourcesContent":["(function () { var require = undefined; var module = undefined; var exports = undefined; var define = undefined;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction getFieldValues(form, fieldName, evt) {\n var values = [];\n var inputs = form.querySelectorAll('input[name=\"' + fieldName + '\"], select[name=\"' + fieldName + '\"], textarea[name=\"' + fieldName + '\"], button[name=\"' + fieldName + '\"]');\n\n for (var i = 0; i < inputs.length; i++) {\n var input = inputs[i];\n var type = input.getAttribute(\"type\").toLowerCase();\n\n if ((type === \"radio\" || type === \"checkbox\") && !input.checked) {\n continue;\n }\n\n // ignore buttons which are not clicked (in case there's more than one button with same name)\n if (type === 'button' || type === 'submit' || input.tagName === 'BUTTON') {\n if ((!evt || evt.target !== input) && form.dataset[fieldName] !== input.value) {\n continue;\n }\n\n form.dataset[fieldName] = input.value;\n }\n\n values.push(input.value);\n }\n\n // default to an empty string\n // can be used to show or hide an element when a field is empty or has not been set \n // Usage: data-show-if=\"FIELDNAME:\"\n if (values.length == 0) {\n values.push(\"\");\n }\n\n return values;\n}\n\nfunction findForm(element) {\n var bubbleElement = element;\n\n while (bubbleElement.parentElement) {\n bubbleElement = bubbleElement.parentElement;\n\n if (bubbleElement.tagName === 'FORM') {\n return bubbleElement;\n }\n }\n\n return null;\n}\n\nfunction toggleElement(el, evt) {\n var show = !!el.getAttribute('data-show-if');\n var conditions = show ? el.getAttribute('data-show-if').split(':') : el.getAttribute('data-hide-if').split(':');\n var fieldName = conditions[0];\n var expectedValues = (conditions.length > 1 ? conditions[1] : \"*\").split('|');\n var form = findForm(el);\n var values = getFieldValues(form, fieldName, evt);\n\n // determine whether condition is met\n var conditionMet = false;\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n\n // condition is met when value is in array of expected values OR expected values contains a wildcard and value is not empty\n conditionMet = expectedValues.indexOf(value) > -1 || expectedValues.indexOf('*') > -1 && value.length > 0;\n\n if (conditionMet) {\n break;\n }\n }\n\n // toggle element display\n if (show) {\n el.style.display = conditionMet ? '' : 'none';\n } else {\n el.style.display = conditionMet ? 'none' : '';\n }\n\n // find all inputs inside this element and toggle [required] attr (to prevent HTML5 validation on hidden elements)\n var inputs = el.querySelectorAll('input, select, textarea');\n [].forEach.call(inputs, function (el) {\n if ((conditionMet || show) && el.getAttribute('data-was-required')) {\n el.required = true;\n el.removeAttribute('data-was-required');\n }\n\n if ((!conditionMet || !show) && el.required) {\n el.setAttribute('data-was-required', \"true\");\n el.required = false;\n }\n });\n}\n\n// evaluate conditional elements globally\nfunction evaluate() {\n var elements = document.querySelectorAll('.hf-form [data-show-if], .hf-form [data-hide-if]');\n [].forEach.call(elements, toggleElement);\n}\n\n// re-evaluate conditional elements for change events on forms\nfunction handleInputEvent(evt) {\n if (!evt.target || !evt.target.form || evt.target.form.className.indexOf('hf-form') < 0) {\n return;\n }\n\n var form = evt.target.form;\n var elements = form.querySelectorAll('[data-show-if], [data-hide-if]');\n [].forEach.call(elements, function (el) {\n return toggleElement(el, evt);\n });\n}\n\nexports.default = {\n 'init': function init() {\n document.addEventListener('click', handleInputEvent, true);\n document.addEventListener('keyup', handleInputEvent, true);\n document.addEventListener('change', handleInputEvent, true);\n document.addEventListener('hf-refresh', evaluate, true);\n window.addEventListener('load', evaluate);\n evaluate();\n }\n};\n\n},{}],2:[function(require,module,exports){\n'use strict';\n\nfunction getButtonText(button) {\n return button.innerHTML ? button.innerHTML : button.value;\n}\n\nfunction setButtonText(button, text) {\n button.innerHTML ? button.innerHTML = text : button.value = text;\n}\n\nfunction Loader(formElement) {\n this.form = formElement;\n this.button = formElement.querySelector('input[type=\"submit\"], button[type=\"submit\"]');\n this.loadingInterval = 0;\n this.character = '\\xB7';\n\n if (this.button) {\n this.originalButton = this.button.cloneNode(true);\n }\n}\n\nLoader.prototype.setCharacter = function (c) {\n this.character = c;\n};\n\nLoader.prototype.start = function () {\n if (this.button) {\n // loading text\n var loadingText = this.button.getAttribute('data-loading-text');\n if (loadingText) {\n setButtonText(this.button, loadingText);\n return;\n }\n\n // Show AJAX loader\n var styles = window.getComputedStyle(this.button);\n this.button.style.width = styles.width;\n setButtonText(this.button, this.character);\n this.loadingInterval = window.setInterval(this.tick.bind(this), 500);\n } else {\n this.form.style.opacity = '0.5';\n }\n};\n\nLoader.prototype.tick = function () {\n // count chars, start over at 5\n var text = getButtonText(this.button);\n var loadingChar = this.character;\n setButtonText(this.button, text.length >= 5 ? loadingChar : text + \" \" + loadingChar);\n};\n\nLoader.prototype.stop = function () {\n if (this.button) {\n this.button.style.width = this.originalButton.style.width;\n var text = getButtonText(this.originalButton);\n setButtonText(this.button, text);\n window.clearInterval(this.loadingInterval);\n } else {\n this.form.style.opacity = '';\n }\n};\n\nmodule.exports = Loader;\n\n},{}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar populate = require('populate.js');\n\n// parse ?query=string with array support. no nesting.\nfunction parseUrlParams(q) {\n\tvar params = new URLSearchParams(q);\n\tvar obj = {};\n\tvar _iteratorNormalCompletion = true;\n\tvar _didIteratorError = false;\n\tvar _iteratorError = undefined;\n\n\ttry {\n\t\tfor (var _iterator = params.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t\t\tvar _step$value = _slicedToArray(_step.value, 2),\n\t\t\t name = _step$value[0],\n\t\t\t value = _step$value[1];\n\n\t\t\tif (name.substr(name.length - 2) === \"[]\") {\n\t\t\t\tvar arrName = name.substr(0, name.length - 2);\n\t\t\t\tobj[arrName] = obj[arrName] || [];\n\t\t\t\tobj[arrName].push(value);\n\t\t\t} else {\n\t\t\t\tobj[name] = value;\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\t_didIteratorError = true;\n\t\t_iteratorError = err;\n\t} finally {\n\t\ttry {\n\t\t\tif (!_iteratorNormalCompletion && _iterator.return) {\n\t\t\t\t_iterator.return();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (_didIteratorError) {\n\t\t\t\tthrow _iteratorError;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn obj;\n}\n\nfunction init() {\n\t// only act on form elements outputted by HTML Forms\n\tvar forms = [].filter.call(document.forms, function (f) {\n\t\treturn f.className.indexOf('hf-form') > -1;\n\t});\n\tif (!forms) {\n\t\treturn;\n\t}\n\n\t// fill each form with data from URL params\n\tvar data = parseUrlParams(window.location.search);\n\tforms.forEach(function (f) {\n\t\tpopulate(f, data);\n\t});\n}\n\nexports.default = { init: init };\n\n},{\"populate.js\":7}],4:[function(require,module,exports){\n\"use strict\";\n\n/* window.CustomEvent polyfill for IE */\n(function () {\n if (typeof window.CustomEvent === \"function\") return false;\n\n function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n\n CustomEvent.prototype = window.Event.prototype;\n\n window.CustomEvent = CustomEvent;\n})();\n\n},{}],5:[function(require,module,exports){\n\"use strict\";\n\nvar _formPrefiller = require('./form-prefiller.js');\n\nvar _formPrefiller2 = _interopRequireDefault(_formPrefiller);\n\nvar _conditionality = require('./conditionality.js');\n\nvar _conditionality2 = _interopRequireDefault(_conditionality);\n\nrequire('./polyfills/custom-event.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar shim = require('es5-shim');\nvar Loader = require('./form-loading-indicator.js');\nvar vars = window.hf_js_vars || { ajax_url: window.location.href };\nvar EventEmitter = require('wolfy87-eventemitter');\nvar events = new EventEmitter();\n\nfunction cleanFormMessages(formEl) {\n var messageElements = formEl.querySelectorAll('.hf-message');\n [].forEach.call(messageElements, function (el) {\n el.parentNode.removeChild(el);\n });\n}\n\nfunction addFormMessage(formEl, message) {\n var txtElement = document.createElement('p');\n txtElement.className = 'hf-message hf-message-' + message.type;\n txtElement.innerHTML = message.text;\n formEl.insertBefore(txtElement, formEl.lastElementChild.nextElementSibling);\n}\n\nfunction handleSubmitEvents(e) {\n var formEl = e.target;\n if (formEl.className.indexOf('hf-form') < 0) {\n return;\n }\n\n // always prevent default (because regular submit doesn't work for HTML Forms)\n e.preventDefault();\n submitForm(formEl);\n}\n\nfunction submitForm(formEl) {\n cleanFormMessages(formEl);\n emitEvent('submit', formEl);\n\n var formData = new FormData(formEl);\n [].forEach.call(formEl.querySelectorAll('[data-was-required=true]'), function (el) {\n formData.append('_was_required[]', el.getAttribute('name'));\n });\n\n var request = new XMLHttpRequest();\n request.onreadystatechange = createRequestHandler(formEl);\n request.open('POST', vars.ajax_url, true);\n request.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n request.send(formData);\n request = null;\n}\n\nfunction emitEvent(eventName, element) {\n // browser event API: formElement.on('hf-success', ..)\n element.dispatchEvent(new CustomEvent(\"hf-\" + eventName));\n\n // custom events API: html_forms.on('success', ..)\n events.emit(eventName, [element]);\n}\n\nfunction createRequestHandler(formEl) {\n var loader = new Loader(formEl);\n loader.start();\n\n return function () {\n // are we done?\n if (this.readyState === 4) {\n var response = void 0;\n loader.stop();\n\n if (this.status >= 200 && this.status < 400) {\n try {\n response = JSON.parse(this.responseText);\n } catch (error) {\n console.log('HTML Forms: failed to parse AJAX response.\\n\\nError: \"' + error + '\"');\n return;\n }\n\n emitEvent('submitted', formEl);\n\n if (response.error) {\n emitEvent('error', formEl);\n } else {\n emitEvent('success', formEl);\n }\n\n // Show form message\n if (response.message) {\n addFormMessage(formEl, response.message);\n }\n\n // Should we hide form?\n if (response.hide_form) {\n formEl.querySelector('.hf-fields-wrap').style.display = 'none';\n }\n\n // Should we redirect?\n if (response.redirect_url) {\n window.location = response.redirect_url;\n }\n\n // clear form\n if (!response.error) {\n formEl.reset();\n }\n } else {\n // Server error :(\n console.log(this.responseText);\n }\n }\n };\n}\n\ndocument.addEventListener('submit', handleSubmitEvents, false); // useCapture=false to ensure we bubble upwards (and thus can cancel propagation)\n_conditionality2.default.init();\n_formPrefiller2.default.init();\n\nwindow.html_forms = {\n 'on': events.on.bind(events),\n 'submit': submitForm\n};\n\n},{\"./conditionality.js\":1,\"./form-loading-indicator.js\":2,\"./form-prefiller.js\":3,\"./polyfills/custom-event.js\":4,\"es5-shim\":6,\"wolfy87-eventemitter\":8}],6:[function(require,module,exports){\n/*!\n * https://github.com/es-shims/es5-shim\n * @license es5-shim Copyright 2009-2015 by contributors, MIT License\n * see https://github.com/es-shims/es5-shim/blob/master/LICENSE\n */\n\n// vim: ts=4 sts=4 sw=4 expandtab\n\n// Add semicolon to prevent IIFE from being passed as argument to concatenated code.\n;\n\n// UMD (Universal Module Definition)\n// see https://github.com/umdjs/umd/blob/master/templates/returnExports.js\n(function (root, factory) {\n 'use strict';\n\n /* global define, exports, module */\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like enviroments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.returnExports = factory();\n }\n}(this, function () {\n /**\n * Brings an environment as close to ECMAScript 5 compliance\n * as is possible with the facilities of erstwhile engines.\n *\n * Annotated ES5: http://es5.github.com/ (specific links below)\n * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf\n * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/\n */\n\n // Shortcut to an often accessed properties, in order to avoid multiple\n // dereference that costs universally. This also holds a reference to known-good\n // functions.\n var $Array = Array;\n var ArrayPrototype = $Array.prototype;\n var $Object = Object;\n var ObjectPrototype = $Object.prototype;\n var $Function = Function;\n var FunctionPrototype = $Function.prototype;\n var $String = String;\n var StringPrototype = $String.prototype;\n var $Number = Number;\n var NumberPrototype = $Number.prototype;\n var array_slice = ArrayPrototype.slice;\n var array_splice = ArrayPrototype.splice;\n var array_push = ArrayPrototype.push;\n var array_unshift = ArrayPrototype.unshift;\n var array_concat = ArrayPrototype.concat;\n var array_join = ArrayPrototype.join;\n var call = FunctionPrototype.call;\n var apply = FunctionPrototype.apply;\n var max = Math.max;\n var min = Math.min;\n\n // Having a toString local variable name breaks in Opera so use to_string.\n var to_string = ObjectPrototype.toString;\n\n /* global Symbol */\n /* eslint-disable one-var-declaration-per-line, no-redeclare, max-statements-per-line */\n var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, constructorRegex = /^\\s*class /, isES6ClassFn = function isES6ClassFn(value) { try { var fnStr = fnToStr.call(value); var singleStripped = fnStr.replace(/\\/\\/.*\\n/g, ''); var multiStripped = singleStripped.replace(/\\/\\*[.\\s\\S]*\\*\\//g, ''); var spaceStripped = multiStripped.replace(/\\n/mg, ' ').replace(/ {2}/g, ' '); return constructorRegex.test(spaceStripped); } catch (e) { return false; /* not a function */ } }, tryFunctionObject = function tryFunctionObject(value) { try { if (isES6ClassFn(value)) { return false; } fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]', isCallable = function isCallable(value) { if (!value) { return false; } if (typeof value !== 'function' && typeof value !== 'object') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } if (isES6ClassFn(value)) { return false; } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };\n\n var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };\n var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };\n /* eslint-enable one-var-declaration-per-line, no-redeclare, max-statements-per-line */\n\n /* inlined from http://npmjs.com/define-properties */\n var supportsDescriptors = $Object.defineProperty && (function () {\n try {\n var obj = {};\n $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });\n for (var _ in obj) { // jscs:ignore disallowUnusedVariables\n return false;\n }\n return obj.x === obj;\n } catch (e) { /* this is ES3 */\n return false;\n }\n }());\n var defineProperties = (function (has) {\n // Define configurable, writable, and non-enumerable props\n // if they don't exist.\n var defineProperty;\n if (supportsDescriptors) {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) {\n return;\n }\n $Object.defineProperty(object, name, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: method\n });\n };\n } else {\n defineProperty = function (object, name, method, forceAssign) {\n if (!forceAssign && (name in object)) {\n return;\n }\n object[name] = method;\n };\n }\n return function defineProperties(object, map, forceAssign) {\n for (var name in map) {\n if (has.call(map, name)) {\n defineProperty(object, name, map[name], forceAssign);\n }\n }\n };\n }(ObjectPrototype.hasOwnProperty));\n\n //\n // Util\n // ======\n //\n\n /* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */\n var isPrimitive = function isPrimitive(input) {\n var type = typeof input;\n return input === null || (type !== 'object' && type !== 'function');\n };\n\n var isActualNaN = $Number.isNaN || function isActualNaN(x) {\n return x !== x;\n };\n\n var ES = {\n // ES5 9.4\n // http://es5.github.com/#x9.4\n // http://jsperf.com/to-integer\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */\n ToInteger: function ToInteger(num) {\n var n = +num;\n if (isActualNaN(n)) {\n n = 0;\n } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n return n;\n },\n\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */\n ToPrimitive: function ToPrimitive(input) {\n var val, valueOf, toStr;\n if (isPrimitive(input)) {\n return input;\n }\n valueOf = input.valueOf;\n if (isCallable(valueOf)) {\n val = valueOf.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n toStr = input.toString;\n if (isCallable(toStr)) {\n val = toStr.call(input);\n if (isPrimitive(val)) {\n return val;\n }\n }\n throw new TypeError();\n },\n\n // ES5 9.9\n // http://es5.github.com/#x9.9\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */\n ToObject: function (o) {\n if (o == null) { // this matches both null and undefined\n throw new TypeError(\"can't convert \" + o + ' to object');\n }\n return $Object(o);\n },\n\n /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */\n ToUint32: function ToUint32(x) {\n return x >>> 0;\n }\n };\n\n //\n // Function\n // ========\n //\n\n // ES-5 15.3.4.5\n // http://es5.github.com/#x15.3.4.5\n\n var Empty = function Empty() {};\n\n defineProperties(FunctionPrototype, {\n bind: function bind(that) { // .length is 1\n // 1. Let Target be the this value.\n var target = this;\n // 2. If IsCallable(Target) is false, throw a TypeError exception.\n if (!isCallable(target)) {\n throw new TypeError('Function.prototype.bind called on incompatible ' + target);\n }\n // 3. Let A be a new (possibly empty) internal list of all of the\n // argument values provided after thisArg (arg1, arg2 etc), in order.\n // XXX slicedArgs will stand in for \"A\" if used\n var args = array_slice.call(arguments, 1); // for normal call\n // 4. Let F be a new native ECMAScript object.\n // 11. Set the [[Prototype]] internal property of F to the standard\n // built-in Function prototype object as specified in 15.3.3.1.\n // 12. Set the [[Call]] internal property of F as described in\n // 15.3.4.5.1.\n // 13. Set the [[Construct]] internal property of F as described in\n // 15.3.4.5.2.\n // 14. Set the [[HasInstance]] internal property of F as described in\n // 15.3.4.5.3.\n var bound;\n var binder = function () {\n\n if (this instanceof bound) {\n // 15.3.4.5.2 [[Construct]]\n // When the [[Construct]] internal method of a function object,\n // F that was created using the bind function is called with a\n // list of arguments ExtraArgs, the following steps are taken:\n // 1. Let target be the value of F's [[TargetFunction]]\n // internal property.\n // 2. If target has no [[Construct]] internal method, a\n // TypeError exception is thrown.\n // 3. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Construct]] internal\n // method of target providing args as the arguments.\n\n var result = apply.call(\n target,\n this,\n array_concat.call(args, array_slice.call(arguments))\n );\n if ($Object(result) === result) {\n return result;\n }\n return this;\n\n } else {\n // 15.3.4.5.1 [[Call]]\n // When the [[Call]] internal method of a function object, F,\n // which was created using the bind function is called with a\n // this value and a list of arguments ExtraArgs, the following\n // steps are taken:\n // 1. Let boundArgs be the value of F's [[BoundArgs]] internal\n // property.\n // 2. Let boundThis be the value of F's [[BoundThis]] internal\n // property.\n // 3. Let target be the value of F's [[TargetFunction]] internal\n // property.\n // 4. Let args be a new list containing the same values as the\n // list boundArgs in the same order followed by the same\n // values as the list ExtraArgs in the same order.\n // 5. Return the result of calling the [[Call]] internal method\n // of target providing boundThis as the this value and\n // providing args as the arguments.\n\n // equiv: target.call(this, ...boundArgs, ...args)\n return apply.call(\n target,\n that,\n array_concat.call(args, array_slice.call(arguments))\n );\n\n }\n\n };\n\n // 15. If the [[Class]] internal property of Target is \"Function\", then\n // a. Let L be the length property of Target minus the length of A.\n // b. Set the length own property of F to either 0 or L, whichever is\n // larger.\n // 16. Else set the length own property of F to 0.\n\n var boundLength = max(0, target.length - args.length);\n\n // 17. Set the attributes of the length own property of F to the values\n // specified in 15.3.5.1.\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n array_push.call(boundArgs, '$' + i);\n }\n\n // XXX Build a dynamic function with desired amount of arguments is the only\n // way to set the length property of a function.\n // In environments where Content Security Policies enabled (Chrome extensions,\n // for ex.) all use of eval or Function costructor throws an exception.\n // However in all of these environments Function.prototype.bind exists\n // and so this code will never be executed.\n bound = $Function('binder', 'return function (' + array_join.call(boundArgs, ',') + '){ return binder.apply(this, arguments); }')(binder);\n\n if (target.prototype) {\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n // Clean up dangling references.\n Empty.prototype = null;\n }\n\n // TODO\n // 18. Set the [[Extensible]] internal property of F to true.\n\n // TODO\n // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).\n // 20. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"caller\", PropertyDescriptor {[[Get]]: thrower, [[Set]]:\n // thrower, [[Enumerable]]: false, [[Configurable]]: false}, and\n // false.\n // 21. Call the [[DefineOwnProperty]] internal method of F with\n // arguments \"arguments\", PropertyDescriptor {[[Get]]: thrower,\n // [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},\n // and false.\n\n // TODO\n // NOTE Function objects created using Function.prototype.bind do not\n // have a prototype property or the [[Code]], [[FormalParameters]], and\n // [[Scope]] internal properties.\n // XXX can't delete prototype in pure-js.\n\n // 22. Return F.\n return bound;\n }\n });\n\n // _Please note: Shortcuts are defined after `Function.prototype.bind` as we\n // use it in defining shortcuts.\n var owns = call.bind(ObjectPrototype.hasOwnProperty);\n var toStr = call.bind(ObjectPrototype.toString);\n var arraySlice = call.bind(array_slice);\n var arraySliceApply = apply.bind(array_slice);\n /* globals document */\n if (typeof document === 'object' && document && document.documentElement) {\n try {\n arraySlice(document.documentElement.childNodes);\n } catch (e) {\n var origArraySlice = arraySlice;\n var origArraySliceApply = arraySliceApply;\n arraySlice = function arraySliceIE(arr) {\n var r = [];\n var i = arr.length;\n while (i-- > 0) {\n r[i] = arr[i];\n }\n return origArraySliceApply(r, origArraySlice(arguments, 1));\n };\n arraySliceApply = function arraySliceApplyIE(arr, args) {\n return origArraySliceApply(arraySlice(arr), args);\n };\n }\n }\n var strSlice = call.bind(StringPrototype.slice);\n var strSplit = call.bind(StringPrototype.split);\n var strIndexOf = call.bind(StringPrototype.indexOf);\n var pushCall = call.bind(array_push);\n var isEnum = call.bind(ObjectPrototype.propertyIsEnumerable);\n var arraySort = call.bind(ArrayPrototype.sort);\n\n //\n // Array\n // =====\n //\n\n var isArray = $Array.isArray || function isArray(obj) {\n return toStr(obj) === '[object Array]';\n };\n\n // ES5 15.4.4.12\n // http://es5.github.com/#x15.4.4.13\n // Return len+argCount.\n // [bugfix, ielt8]\n // IE < 8 bug: [].unshift(0) === undefined but should be \"1\"\n var hasUnshiftReturnValueBug = [].unshift(0) !== 1;\n defineProperties(ArrayPrototype, {\n unshift: function () {\n array_unshift.apply(this, arguments);\n return this.length;\n }\n }, hasUnshiftReturnValueBug);\n\n // ES5 15.4.3.2\n // http://es5.github.com/#x15.4.3.2\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray\n defineProperties($Array, { isArray: isArray });\n\n // The IsCallable() check in the Array functions\n // has been replaced with a strict check on the\n // internal class of the object to trap cases where\n // the provided function was actually a regular\n // expression literal, which in V8 and\n // JavaScriptCore is a typeof \"function\". Only in\n // V8 are regular expression literals permitted as\n // reduce parameters, so it is desirable in the\n // general case for the shim to match the more\n // strict and common behavior of rejecting regular\n // expressions.\n\n // ES5 15.4.4.18\n // http://es5.github.com/#x15.4.4.18\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach\n\n // Check failure of by-index access of string characters (IE < 9)\n // and failure of `0 in boxedString` (Rhino)\n var boxedString = $Object('a');\n var splitString = boxedString[0] !== 'a' || !(0 in boxedString);\n\n var properlyBoxesContext = function properlyBoxed(method) {\n // Check node 0.6.21 bug where third parameter is not boxed\n var properlyBoxesNonStrict = true;\n var properlyBoxesStrict = true;\n var threwException = false;\n if (method) {\n try {\n method.call('foo', function (_, __, context) {\n if (typeof context !== 'object') {\n properlyBoxesNonStrict = false;\n }\n });\n\n method.call([1], function () {\n 'use strict';\n\n properlyBoxesStrict = typeof this === 'string';\n }, 'x');\n } catch (e) {\n threwException = true;\n }\n }\n return !!method && !threwException && properlyBoxesNonStrict && properlyBoxesStrict;\n };\n\n defineProperties(ArrayPrototype, {\n forEach: function forEach(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var i = -1;\n var length = ES.ToUint32(self.length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.forEach callback must be a function');\n }\n\n while (++i < length) {\n if (i in self) {\n // Invoke the callback function with call, passing arguments:\n // context, property value, property key, thisArg object\n if (typeof T === 'undefined') {\n callbackfn(self[i], i, object);\n } else {\n callbackfn.call(T, self[i], i, object);\n }\n }\n }\n }\n }, !properlyBoxesContext(ArrayPrototype.forEach));\n\n // ES5 15.4.4.19\n // http://es5.github.com/#x15.4.4.19\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map\n defineProperties(ArrayPrototype, {\n map: function map(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var result = $Array(length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.map callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n if (typeof T === 'undefined') {\n result[i] = callbackfn(self[i], i, object);\n } else {\n result[i] = callbackfn.call(T, self[i], i, object);\n }\n }\n }\n return result;\n }\n }, !properlyBoxesContext(ArrayPrototype.map));\n\n // ES5 15.4.4.20\n // http://es5.github.com/#x15.4.4.20\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter\n defineProperties(ArrayPrototype, {\n filter: function filter(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var result = [];\n var value;\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.filter callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self) {\n value = self[i];\n if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {\n pushCall(result, value);\n }\n }\n }\n return result;\n }\n }, !properlyBoxesContext(ArrayPrototype.filter));\n\n // ES5 15.4.4.16\n // http://es5.github.com/#x15.4.4.16\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every\n defineProperties(ArrayPrototype, {\n every: function every(callbackfn/*, thisArg*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.every callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {\n return false;\n }\n }\n return true;\n }\n }, !properlyBoxesContext(ArrayPrototype.every));\n\n // ES5 15.4.4.17\n // http://es5.github.com/#x15.4.4.17\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some\n defineProperties(ArrayPrototype, {\n some: function some(callbackfn/*, thisArg */) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n var T;\n if (arguments.length > 1) {\n T = arguments[1];\n }\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.some callback must be a function');\n }\n\n for (var i = 0; i < length; i++) {\n if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {\n return true;\n }\n }\n return false;\n }\n }, !properlyBoxesContext(ArrayPrototype.some));\n\n // ES5 15.4.4.21\n // http://es5.github.com/#x15.4.4.21\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce\n var reduceCoercesToObject = false;\n if (ArrayPrototype.reduce) {\n reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) {\n return list;\n }) === 'object';\n }\n defineProperties(ArrayPrototype, {\n reduce: function reduce(callbackfn/*, initialValue*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.reduce callback must be a function');\n }\n\n // no value to return if no initial value and an empty array\n if (length === 0 && arguments.length === 1) {\n throw new TypeError('reduce of empty array with no initial value');\n }\n\n var i = 0;\n var result;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i++];\n break;\n }\n\n // if array contains no values, no initial value to return\n if (++i >= length) {\n throw new TypeError('reduce of empty array with no initial value');\n }\n } while (true);\n }\n\n for (; i < length; i++) {\n if (i in self) {\n result = callbackfn(result, self[i], i, object);\n }\n }\n\n return result;\n }\n }, !reduceCoercesToObject);\n\n // ES5 15.4.4.22\n // http://es5.github.com/#x15.4.4.22\n // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight\n var reduceRightCoercesToObject = false;\n if (ArrayPrototype.reduceRight) {\n reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) {\n return list;\n }) === 'object';\n }\n defineProperties(ArrayPrototype, {\n reduceRight: function reduceRight(callbackfn/*, initial*/) {\n var object = ES.ToObject(this);\n var self = splitString && isString(this) ? strSplit(this, '') : object;\n var length = ES.ToUint32(self.length);\n\n // If no callback function or if callback is not a callable function\n if (!isCallable(callbackfn)) {\n throw new TypeError('Array.prototype.reduceRight callback must be a function');\n }\n\n // no value to return if no initial value, empty array\n if (length === 0 && arguments.length === 1) {\n throw new TypeError('reduceRight of empty array with no initial value');\n }\n\n var result;\n var i = length - 1;\n if (arguments.length >= 2) {\n result = arguments[1];\n } else {\n do {\n if (i in self) {\n result = self[i--];\n break;\n }\n\n // if array contains no values, no initial value to return\n if (--i < 0) {\n throw new TypeError('reduceRight of empty array with no initial value');\n }\n } while (true);\n }\n\n if (i < 0) {\n return result;\n }\n\n do {\n if (i in self) {\n result = callbackfn(result, self[i], i, object);\n }\n } while (i--);\n\n return result;\n }\n }, !reduceRightCoercesToObject);\n\n // ES5 15.4.4.14\n // http://es5.github.com/#x15.4.4.14\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\n var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;\n defineProperties(ArrayPrototype, {\n indexOf: function indexOf(searchElement/*, fromIndex */) {\n var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);\n var length = ES.ToUint32(self.length);\n\n if (length === 0) {\n return -1;\n }\n\n var i = 0;\n if (arguments.length > 1) {\n i = ES.ToInteger(arguments[1]);\n }\n\n // handle negative indices\n i = i >= 0 ? i : max(0, length + i);\n for (; i < length; i++) {\n if (i in self && self[i] === searchElement) {\n return i;\n }\n }\n return -1;\n }\n }, hasFirefox2IndexOfBug);\n\n // ES5 15.4.4.15\n // http://es5.github.com/#x15.4.4.15\n // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf\n var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;\n defineProperties(ArrayPrototype, {\n lastIndexOf: function lastIndexOf(searchElement/*, fromIndex */) {\n var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);\n var length = ES.ToUint32(self.length);\n\n if (length === 0) {\n return -1;\n }\n var i = length - 1;\n if (arguments.length > 1) {\n i = min(i, ES.ToInteger(arguments[1]));\n }\n // handle negative indices\n i = i >= 0 ? i : length - Math.abs(i);\n for (; i >= 0; i--) {\n if (i in self && searchElement === self[i]) {\n return i;\n }\n }\n return -1;\n }\n }, hasFirefox2LastIndexOfBug);\n\n // ES5 15.4.4.12\n // http://es5.github.com/#x15.4.4.12\n var spliceNoopReturnsEmptyArray = (function () {\n var a = [1, 2];\n var result = a.splice();\n return a.length === 2 && isArray(result) && result.length === 0;\n }());\n defineProperties(ArrayPrototype, {\n // Safari 5.0 bug where .splice() returns undefined\n splice: function splice(start, deleteCount) {\n if (arguments.length === 0) {\n return [];\n } else {\n return array_splice.apply(this, arguments);\n }\n }\n }, !spliceNoopReturnsEmptyArray);\n\n var spliceWorksWithEmptyObject = (function () {\n var obj = {};\n ArrayPrototype.splice.call(obj, 0, 0, 1);\n return obj.length === 1;\n }());\n defineProperties(ArrayPrototype, {\n splice: function splice(start, deleteCount) {\n if (arguments.length === 0) {\n return [];\n }\n var args = arguments;\n this.length = max(ES.ToInteger(this.length), 0);\n if (arguments.length > 0 && typeof deleteCount !== 'number') {\n args = arraySlice(arguments);\n if (args.length < 2) {\n pushCall(args, this.length - start);\n } else {\n args[1] = ES.ToInteger(deleteCount);\n }\n }\n return array_splice.apply(this, args);\n }\n }, !spliceWorksWithEmptyObject);\n var spliceWorksWithLargeSparseArrays = (function () {\n // Per https://github.com/es-shims/es5-shim/issues/295\n // Safari 7/8 breaks with sparse arrays of size 1e5 or greater\n var arr = new $Array(1e5);\n // note: the index MUST be 8 or larger or the test will false pass\n arr[8] = 'x';\n arr.splice(1, 1);\n // note: this test must be defined *after* the indexOf shim\n // per https://github.com/es-shims/es5-shim/issues/313\n return arr.indexOf('x') === 7;\n }());\n var spliceWorksWithSmallSparseArrays = (function () {\n // Per https://github.com/es-shims/es5-shim/issues/295\n // Opera 12.15 breaks on this, no idea why.\n var n = 256;\n var arr = [];\n arr[n] = 'a';\n arr.splice(n + 1, 0, 'b');\n return arr[n] === 'a';\n }());\n defineProperties(ArrayPrototype, {\n splice: function splice(start, deleteCount) {\n var O = ES.ToObject(this);\n var A = [];\n var len = ES.ToUint32(O.length);\n var relativeStart = ES.ToInteger(start);\n var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);\n var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);\n\n var k = 0;\n var from;\n while (k < actualDeleteCount) {\n from = $String(actualStart + k);\n if (owns(O, from)) {\n A[k] = O[from];\n }\n k += 1;\n }\n\n var items = arraySlice(arguments, 2);\n var itemCount = items.length;\n var to;\n if (itemCount < actualDeleteCount) {\n k = actualStart;\n var maxK = len - actualDeleteCount;\n while (k < maxK) {\n from = $String(k + actualDeleteCount);\n to = $String(k + itemCount);\n if (owns(O, from)) {\n O[to] = O[from];\n } else {\n delete O[to];\n }\n k += 1;\n }\n k = len;\n var minK = len - actualDeleteCount + itemCount;\n while (k > minK) {\n delete O[k - 1];\n k -= 1;\n }\n } else if (itemCount > actualDeleteCount) {\n k = len - actualDeleteCount;\n while (k > actualStart) {\n from = $String(k + actualDeleteCount - 1);\n to = $String(k + itemCount - 1);\n if (owns(O, from)) {\n O[to] = O[from];\n } else {\n delete O[to];\n }\n k -= 1;\n }\n }\n k = actualStart;\n for (var i = 0; i < items.length; ++i) {\n O[k] = items[i];\n k += 1;\n }\n O.length = len - actualDeleteCount + itemCount;\n\n return A;\n }\n }, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);\n\n var originalJoin = ArrayPrototype.join;\n var hasStringJoinBug;\n try {\n hasStringJoinBug = Array.prototype.join.call('123', ',') !== '1,2,3';\n } catch (e) {\n hasStringJoinBug = true;\n }\n if (hasStringJoinBug) {\n defineProperties(ArrayPrototype, {\n join: function join(separator) {\n var sep = typeof separator === 'undefined' ? ',' : separator;\n return originalJoin.call(isString(this) ? strSplit(this, '') : this, sep);\n }\n }, hasStringJoinBug);\n }\n\n var hasJoinUndefinedBug = [1, 2].join(undefined) !== '1,2';\n if (hasJoinUndefinedBug) {\n defineProperties(ArrayPrototype, {\n join: function join(separator) {\n var sep = typeof separator === 'undefined' ? ',' : separator;\n return originalJoin.call(this, sep);\n }\n }, hasJoinUndefinedBug);\n }\n\n var pushShim = function push(item) {\n var O = ES.ToObject(this);\n var n = ES.ToUint32(O.length);\n var i = 0;\n while (i < arguments.length) {\n O[n + i] = arguments[i];\n i += 1;\n }\n O.length = n + i;\n return n + i;\n };\n\n var pushIsNotGeneric = (function () {\n var obj = {};\n var result = Array.prototype.push.call(obj, undefined);\n return result !== 1 || obj.length !== 1 || typeof obj[0] !== 'undefined' || !owns(obj, 0);\n }());\n defineProperties(ArrayPrototype, {\n push: function push(item) {\n if (isArray(this)) {\n return array_push.apply(this, arguments);\n }\n return pushShim.apply(this, arguments);\n }\n }, pushIsNotGeneric);\n\n // This fixes a very weird bug in Opera 10.6 when pushing `undefined\n var pushUndefinedIsWeird = (function () {\n var arr = [];\n var result = arr.push(undefined);\n return result !== 1 || arr.length !== 1 || typeof arr[0] !== 'undefined' || !owns(arr, 0);\n }());\n defineProperties(ArrayPrototype, { push: pushShim }, pushUndefinedIsWeird);\n\n // ES5 15.2.3.14\n // http://es5.github.io/#x15.4.4.10\n // Fix boxed string bug\n defineProperties(ArrayPrototype, {\n slice: function (start, end) {\n var arr = isString(this) ? strSplit(this, '') : this;\n return arraySliceApply(arr, arguments);\n }\n }, splitString);\n\n var sortIgnoresNonFunctions = (function () {\n try {\n [1, 2].sort(null);\n } catch (e) {\n try {\n [1, 2].sort({});\n } catch (e2) {\n return false;\n }\n }\n return true;\n }());\n var sortThrowsOnRegex = (function () {\n // this is a problem in Firefox 4, in which `typeof /a/ === 'function'`\n try {\n [1, 2].sort(/a/);\n return false;\n } catch (e) {}\n return true;\n }());\n var sortIgnoresUndefined = (function () {\n // applies in IE 8, for one.\n try {\n [1, 2].sort(undefined);\n return true;\n } catch (e) {}\n return false;\n }());\n defineProperties(ArrayPrototype, {\n sort: function sort(compareFn) {\n if (typeof compareFn === 'undefined') {\n return arraySort(this);\n }\n if (!isCallable(compareFn)) {\n throw new TypeError('Array.prototype.sort callback must be a function');\n }\n return arraySort(this, compareFn);\n }\n }, sortIgnoresNonFunctions || !sortIgnoresUndefined || !sortThrowsOnRegex);\n\n //\n // Object\n // ======\n //\n\n // ES5 15.2.3.14\n // http://es5.github.com/#x15.2.3.14\n\n // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation\n var hasDontEnumBug = !isEnum({ 'toString': null }, 'toString'); // jscs:ignore disallowQuotedKeysInObjects\n var hasProtoEnumBug = isEnum(function () {}, 'prototype');\n var hasStringEnumBug = !owns('x', '0');\n var equalsConstructorPrototype = function (o) {\n var ctor = o.constructor;\n return ctor && ctor.prototype === o;\n };\n var excludedKeys = {\n $window: true,\n $console: true,\n $parent: true,\n $self: true,\n $frame: true,\n $frames: true,\n $frameElement: true,\n $webkitIndexedDB: true,\n $webkitStorageInfo: true,\n $external: true,\n $width: true,\n $height: true,\n $top: true,\n $localStorage: true\n };\n var hasAutomationEqualityBug = (function () {\n /* globals window */\n if (typeof window === 'undefined') {\n return false;\n }\n for (var k in window) {\n try {\n if (!excludedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {\n equalsConstructorPrototype(window[k]);\n }\n } catch (e) {\n return true;\n }\n }\n return false;\n }());\n var equalsConstructorPrototypeIfNotBuggy = function (object) {\n if (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n return equalsConstructorPrototype(object);\n }\n try {\n return equalsConstructorPrototype(object);\n } catch (e) {\n return false;\n }\n };\n var dontEnums = [\n 'toString',\n 'toLocaleString',\n 'valueOf',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'constructor'\n ];\n var dontEnumsLength = dontEnums.length;\n\n // taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js\n // can be replaced with require('is-arguments') if we ever use a build process instead\n var isStandardArguments = function isArguments(value) {\n return toStr(value) === '[object Arguments]';\n };\n var isLegacyArguments = function isArguments(value) {\n return value !== null\n && typeof value === 'object'\n && typeof value.length === 'number'\n && value.length >= 0\n && !isArray(value)\n && isCallable(value.callee);\n };\n var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;\n\n defineProperties($Object, {\n keys: function keys(object) {\n var isFn = isCallable(object);\n var isArgs = isArguments(object);\n var isObject = object !== null && typeof object === 'object';\n var isStr = isObject && isString(object);\n\n if (!isObject && !isFn && !isArgs) {\n throw new TypeError('Object.keys called on a non-object');\n }\n\n var theKeys = [];\n var skipProto = hasProtoEnumBug && isFn;\n if ((isStr && hasStringEnumBug) || isArgs) {\n for (var i = 0; i < object.length; ++i) {\n pushCall(theKeys, $String(i));\n }\n }\n\n if (!isArgs) {\n for (var name in object) {\n if (!(skipProto && name === 'prototype') && owns(object, name)) {\n pushCall(theKeys, $String(name));\n }\n }\n }\n\n if (hasDontEnumBug) {\n var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n for (var j = 0; j < dontEnumsLength; j++) {\n var dontEnum = dontEnums[j];\n if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {\n pushCall(theKeys, dontEnum);\n }\n }\n }\n return theKeys;\n }\n });\n\n var keysWorksWithArguments = $Object.keys && (function () {\n // Safari 5.0 bug\n return $Object.keys(arguments).length === 2;\n }(1, 2));\n var keysHasArgumentsLengthBug = $Object.keys && (function () {\n var argKeys = $Object.keys(arguments);\n return arguments.length !== 1 || argKeys.length !== 1 || argKeys[0] !== 1;\n }(1));\n var originalKeys = $Object.keys;\n defineProperties($Object, {\n keys: function keys(object) {\n if (isArguments(object)) {\n return originalKeys(arraySlice(object));\n } else {\n return originalKeys(object);\n }\n }\n }, !keysWorksWithArguments || keysHasArgumentsLengthBug);\n\n //\n // Date\n // ====\n //\n\n var hasNegativeMonthYearBug = new Date(-3509827329600292).getUTCMonth() !== 0;\n var aNegativeTestDate = new Date(-1509842289600292);\n var aPositiveTestDate = new Date(1449662400000);\n var hasToUTCStringFormatBug = aNegativeTestDate.toUTCString() !== 'Mon, 01 Jan -45875 11:59:59 GMT';\n var hasToDateStringFormatBug;\n var hasToStringFormatBug;\n var timeZoneOffset = aNegativeTestDate.getTimezoneOffset();\n if (timeZoneOffset < -720) {\n hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Tue Jan 02 -45875';\n hasToStringFormatBug = !(/^Thu Dec 10 2015 \\d\\d:\\d\\d:\\d\\d GMT[-+]\\d\\d\\d\\d(?: |$)/).test(String(aPositiveTestDate));\n } else {\n hasToDateStringFormatBug = aNegativeTestDate.toDateString() !== 'Mon Jan 01 -45875';\n hasToStringFormatBug = !(/^Wed Dec 09 2015 \\d\\d:\\d\\d:\\d\\d GMT[-+]\\d\\d\\d\\d(?: |$)/).test(String(aPositiveTestDate));\n }\n\n var originalGetFullYear = call.bind(Date.prototype.getFullYear);\n var originalGetMonth = call.bind(Date.prototype.getMonth);\n var originalGetDate = call.bind(Date.prototype.getDate);\n var originalGetUTCFullYear = call.bind(Date.prototype.getUTCFullYear);\n var originalGetUTCMonth = call.bind(Date.prototype.getUTCMonth);\n var originalGetUTCDate = call.bind(Date.prototype.getUTCDate);\n var originalGetUTCDay = call.bind(Date.prototype.getUTCDay);\n var originalGetUTCHours = call.bind(Date.prototype.getUTCHours);\n var originalGetUTCMinutes = call.bind(Date.prototype.getUTCMinutes);\n var originalGetUTCSeconds = call.bind(Date.prototype.getUTCSeconds);\n var originalGetUTCMilliseconds = call.bind(Date.prototype.getUTCMilliseconds);\n var dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n var monthName = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n var daysInMonth = function daysInMonth(month, year) {\n return originalGetDate(new Date(year, month, 0));\n };\n\n defineProperties(Date.prototype, {\n getFullYear: function getFullYear() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetFullYear(this);\n if (year < 0 && originalGetMonth(this) > 11) {\n return year + 1;\n }\n return year;\n },\n getMonth: function getMonth() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetFullYear(this);\n var month = originalGetMonth(this);\n if (year < 0 && month > 11) {\n return 0;\n }\n return month;\n },\n getDate: function getDate() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetFullYear(this);\n var month = originalGetMonth(this);\n var date = originalGetDate(this);\n if (year < 0 && month > 11) {\n if (month === 12) {\n return date;\n }\n var days = daysInMonth(0, year + 1);\n return (days - date) + 1;\n }\n return date;\n },\n getUTCFullYear: function getUTCFullYear() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetUTCFullYear(this);\n if (year < 0 && originalGetUTCMonth(this) > 11) {\n return year + 1;\n }\n return year;\n },\n getUTCMonth: function getUTCMonth() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetUTCFullYear(this);\n var month = originalGetUTCMonth(this);\n if (year < 0 && month > 11) {\n return 0;\n }\n return month;\n },\n getUTCDate: function getUTCDate() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var year = originalGetUTCFullYear(this);\n var month = originalGetUTCMonth(this);\n var date = originalGetUTCDate(this);\n if (year < 0 && month > 11) {\n if (month === 12) {\n return date;\n }\n var days = daysInMonth(0, year + 1);\n return (days - date) + 1;\n }\n return date;\n }\n }, hasNegativeMonthYearBug);\n\n defineProperties(Date.prototype, {\n toUTCString: function toUTCString() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var day = originalGetUTCDay(this);\n var date = originalGetUTCDate(this);\n var month = originalGetUTCMonth(this);\n var year = originalGetUTCFullYear(this);\n var hour = originalGetUTCHours(this);\n var minute = originalGetUTCMinutes(this);\n var second = originalGetUTCSeconds(this);\n return dayName[day] + ', '\n + (date < 10 ? '0' + date : date) + ' '\n + monthName[month] + ' '\n + year + ' '\n + (hour < 10 ? '0' + hour : hour) + ':'\n + (minute < 10 ? '0' + minute : minute) + ':'\n + (second < 10 ? '0' + second : second) + ' GMT';\n }\n }, hasNegativeMonthYearBug || hasToUTCStringFormatBug);\n\n // Opera 12 has `,`\n defineProperties(Date.prototype, {\n toDateString: function toDateString() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var day = this.getDay();\n var date = this.getDate();\n var month = this.getMonth();\n var year = this.getFullYear();\n return dayName[day] + ' '\n + monthName[month] + ' '\n + (date < 10 ? '0' + date : date) + ' '\n + year;\n }\n }, hasNegativeMonthYearBug || hasToDateStringFormatBug);\n\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\n if (hasNegativeMonthYearBug || hasToStringFormatBug) {\n Date.prototype.toString = function toString() {\n if (!this || !(this instanceof Date)) {\n throw new TypeError('this is not a Date object.');\n }\n var day = this.getDay();\n var date = this.getDate();\n var month = this.getMonth();\n var year = this.getFullYear();\n var hour = this.getHours();\n var minute = this.getMinutes();\n var second = this.getSeconds();\n var timezoneOffset = this.getTimezoneOffset();\n var hoursOffset = Math.floor(Math.abs(timezoneOffset) / 60);\n var minutesOffset = Math.floor(Math.abs(timezoneOffset) % 60);\n return dayName[day] + ' '\n + monthName[month] + ' '\n + (date < 10 ? '0' + date : date) + ' '\n + year + ' '\n + (hour < 10 ? '0' + hour : hour) + ':'\n + (minute < 10 ? '0' + minute : minute) + ':'\n + (second < 10 ? '0' + second : second) + ' GMT'\n + (timezoneOffset > 0 ? '-' : '+')\n + (hoursOffset < 10 ? '0' + hoursOffset : hoursOffset)\n + (minutesOffset < 10 ? '0' + minutesOffset : minutesOffset);\n };\n if (supportsDescriptors) {\n $Object.defineProperty(Date.prototype, 'toString', {\n configurable: true,\n enumerable: false,\n writable: true\n });\n }\n }\n\n // ES5 15.9.5.43\n // http://es5.github.com/#x15.9.5.43\n // This function returns a String value represent the instance in time\n // represented by this Date object. The format of the String is the Date Time\n // string format defined in 15.9.1.15. All fields are present in the String.\n // The time zone is always UTC, denoted by the suffix Z. If the time value of\n // this object is not a finite Number a RangeError exception is thrown.\n var negativeDate = -62198755200000;\n var negativeYearString = '-000001';\n var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1; // eslint-disable-line max-len\n var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';\n\n var getTime = call.bind(Date.prototype.getTime);\n\n defineProperties(Date.prototype, {\n toISOString: function toISOString() {\n if (!isFinite(this) || !isFinite(getTime(this))) {\n // Adope Photoshop requires the second check.\n throw new RangeError('Date.prototype.toISOString called on non-finite value.');\n }\n\n var year = originalGetUTCFullYear(this);\n\n var month = originalGetUTCMonth(this);\n // see https://github.com/es-shims/es5-shim/issues/111\n year += Math.floor(month / 12);\n month = ((month % 12) + 12) % 12;\n\n // the date time string format is specified in 15.9.1.15.\n var result = [\n month + 1,\n originalGetUTCDate(this),\n originalGetUTCHours(this),\n originalGetUTCMinutes(this),\n originalGetUTCSeconds(this)\n ];\n year = (\n (year < 0 ? '-' : (year > 9999 ? '+' : ''))\n + strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)\n );\n\n for (var i = 0; i < result.length; ++i) {\n // pad months, days, hours, minutes, and seconds to have two digits.\n result[i] = strSlice('00' + result[i], -2);\n }\n // pad milliseconds to have three digits.\n return (\n year + '-' + arraySlice(result, 0, 2).join('-')\n + 'T' + arraySlice(result, 2).join(':') + '.'\n + strSlice('000' + originalGetUTCMilliseconds(this), -3) + 'Z'\n );\n }\n }, hasNegativeDateBug || hasSafari51DateBug);\n\n // ES5 15.9.5.44\n // http://es5.github.com/#x15.9.5.44\n // This function provides a String representation of a Date object for use by\n // JSON.stringify (15.12.3).\n var dateToJSONIsSupported = (function () {\n try {\n return Date.prototype.toJSON\n && new Date(NaN).toJSON() === null\n && new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1\n && Date.prototype.toJSON.call({ // generic\n toISOString: function () { return true; }\n });\n } catch (e) {\n return false;\n }\n }());\n if (!dateToJSONIsSupported) {\n Date.prototype.toJSON = function toJSON(key) {\n // When the toJSON method is called with argument key, the following\n // steps are taken:\n\n // 1. Let O be the result of calling ToObject, giving it the this\n // value as its argument.\n // 2. Let tv be ES.ToPrimitive(O, hint Number).\n var O = $Object(this);\n var tv = ES.ToPrimitive(O);\n // 3. If tv is a Number and is not finite, return null.\n if (typeof tv === 'number' && !isFinite(tv)) {\n return null;\n }\n // 4. Let toISO be the result of calling the [[Get]] internal method of\n // O with argument \"toISOString\".\n var toISO = O.toISOString;\n // 5. If IsCallable(toISO) is false, throw a TypeError exception.\n if (!isCallable(toISO)) {\n throw new TypeError('toISOString property is not callable');\n }\n // 6. Return the result of calling the [[Call]] internal method of\n // toISO with O as the this value and an empty argument list.\n return toISO.call(O);\n\n // NOTE 1 The argument is ignored.\n\n // NOTE 2 The toJSON function is intentionally generic; it does not\n // require that its this value be a Date object. Therefore, it can be\n // transferred to other kinds of objects for use as a method. However,\n // it does require that any such object have a toISOString method. An\n // object is free to use the argument key to filter its\n // stringification.\n };\n }\n\n // ES5 15.9.4.2\n // http://es5.github.com/#x15.9.4.2\n // based on work shared by Daniel Friesen (dantman)\n // http://gist.github.com/303249\n var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;\n var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));\n var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));\n if (doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {\n // XXX global assignment won't work in embeddings that use\n // an alternate object for the context.\n /* global Date: true */\n var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1;\n var hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());\n // eslint-disable-next-line no-implicit-globals, no-global-assign\n Date = (function (NativeDate) {\n // Date.length === 7\n var DateShim = function Date(Y, M, D, h, m, s, ms) {\n var length = arguments.length;\n var date;\n if (this instanceof NativeDate) {\n var seconds = s;\n var millis = ms;\n if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {\n // work around a Safari 8/9 bug where it treats the seconds as signed\n var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;\n var sToShift = Math.floor(msToShift / 1e3);\n seconds += sToShift;\n millis -= sToShift * 1e3;\n }\n date = length === 1 && $String(Y) === Y // isString(Y)\n // We explicitly pass it through parse:\n ? new NativeDate(DateShim.parse(Y))\n // We have to manually make calls depending on argument\n // length here\n : length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis)\n : length >= 6 ? new NativeDate(Y, M, D, h, m, seconds)\n : length >= 5 ? new NativeDate(Y, M, D, h, m)\n : length >= 4 ? new NativeDate(Y, M, D, h)\n : length >= 3 ? new NativeDate(Y, M, D)\n : length >= 2 ? new NativeDate(Y, M)\n : length >= 1 ? new NativeDate(Y instanceof NativeDate ? +Y : Y)\n : new NativeDate();\n } else {\n date = NativeDate.apply(this, arguments);\n }\n if (!isPrimitive(date)) {\n // Prevent mixups with unfixed Date object\n defineProperties(date, { constructor: DateShim }, true);\n }\n return date;\n };\n\n // 15.9.1.15 Date Time String Format.\n var isoDateExpression = new RegExp('^'\n + '(\\\\d{4}|[+-]\\\\d{6})' // four-digit year capture or sign + 6-digit extended year\n + '(?:-(\\\\d{2})' // optional month capture\n + '(?:-(\\\\d{2})' // optional day capture\n + '(?:' // capture hours:minutes:seconds.milliseconds\n + 'T(\\\\d{2})' // hours capture\n + ':(\\\\d{2})' // minutes capture\n + '(?:' // optional :seconds.milliseconds\n + ':(\\\\d{2})' // seconds capture\n + '(?:(\\\\.\\\\d{1,}))?' // milliseconds capture\n + ')?'\n + '(' // capture UTC offset component\n + 'Z|' // UTC capture\n + '(?:' // offset specifier +/-hours:minutes\n + '([-+])' // sign capture\n + '(\\\\d{2})' // hours offset capture\n + ':(\\\\d{2})' // minutes offset capture\n + ')'\n + ')?)?)?)?'\n + '$');\n\n var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n\n var dayFromMonth = function dayFromMonth(year, month) {\n var t = month > 1 ? 1 : 0;\n return (\n months[month]\n + Math.floor((year - 1969 + t) / 4)\n - Math.floor((year - 1901 + t) / 100)\n + Math.floor((year - 1601 + t) / 400)\n + (365 * (year - 1970))\n );\n };\n\n var toUTC = function toUTC(t) {\n var s = 0;\n var ms = t;\n if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {\n // work around a Safari 8/9 bug where it treats the seconds as signed\n var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;\n var sToShift = Math.floor(msToShift / 1e3);\n s += sToShift;\n ms -= sToShift * 1e3;\n }\n return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));\n };\n\n // Copy any custom methods a 3rd party library may have added\n for (var key in NativeDate) {\n if (owns(NativeDate, key)) {\n DateShim[key] = NativeDate[key];\n }\n }\n\n // Copy \"native\" methods explicitly; they may be non-enumerable\n defineProperties(DateShim, {\n now: NativeDate.now,\n UTC: NativeDate.UTC\n }, true);\n DateShim.prototype = NativeDate.prototype;\n defineProperties(DateShim.prototype, { constructor: DateShim }, true);\n\n // Upgrade Date.parse to handle simplified ISO 8601 strings\n var parseShim = function parse(string) {\n var match = isoDateExpression.exec(string);\n if (match) {\n // parse months, days, hours, minutes, seconds, and milliseconds\n // provide default values if necessary\n // parse the UTC offset component\n var year = $Number(match[1]),\n month = $Number(match[2] || 1) - 1,\n day = $Number(match[3] || 1) - 1,\n hour = $Number(match[4] || 0),\n minute = $Number(match[5] || 0),\n second = $Number(match[6] || 0),\n millisecond = Math.floor($Number(match[7] || 0) * 1000),\n // When time zone is missed, local offset should be used\n // (ES 5.1 bug)\n // see https://bugs.ecmascript.org/show_bug.cgi?id=112\n isLocalTime = Boolean(match[4] && !match[8]),\n signOffset = match[9] === '-' ? 1 : -1,\n hourOffset = $Number(match[10] || 0),\n minuteOffset = $Number(match[11] || 0),\n result;\n var hasMinutesOrSecondsOrMilliseconds = minute > 0 || second > 0 || millisecond > 0;\n if (\n hour < (hasMinutesOrSecondsOrMilliseconds ? 24 : 25)\n && minute < 60 && second < 60 && millisecond < 1000\n && month > -1 && month < 12 && hourOffset < 24\n && minuteOffset < 60 // detect invalid offsets\n && day > -1\n && day < (dayFromMonth(year, month + 1) - dayFromMonth(year, month))\n ) {\n result = (\n ((dayFromMonth(year, month) + day) * 24)\n + hour\n + (hourOffset * signOffset)\n ) * 60;\n result = ((\n ((result + minute + (minuteOffset * signOffset)) * 60)\n + second\n ) * 1000) + millisecond;\n if (isLocalTime) {\n result = toUTC(result);\n }\n if (-8.64e15 <= result && result <= 8.64e15) {\n return result;\n }\n }\n return NaN;\n }\n return NativeDate.parse.apply(this, arguments);\n };\n defineProperties(DateShim, { parse: parseShim });\n\n return DateShim;\n }(Date));\n /* global Date: false */\n }\n\n // ES5 15.9.4.4\n // http://es5.github.com/#x15.9.4.4\n if (!Date.now) {\n Date.now = function now() {\n return new Date().getTime();\n };\n }\n\n //\n // Number\n // ======\n //\n\n // ES5.1 15.7.4.5\n // http://es5.github.com/#x15.7.4.5\n var hasToFixedBugs = NumberPrototype.toFixed && (\n (0.00008).toFixed(3) !== '0.000'\n || (0.9).toFixed(0) !== '1'\n || (1.255).toFixed(2) !== '1.25'\n || (1000000000000000128).toFixed(0) !== '1000000000000000128'\n );\n\n var toFixedHelpers = {\n base: 1e7,\n size: 6,\n data: [0, 0, 0, 0, 0, 0],\n multiply: function multiply(n, c) {\n var i = -1;\n var c2 = c;\n while (++i < toFixedHelpers.size) {\n c2 += n * toFixedHelpers.data[i];\n toFixedHelpers.data[i] = c2 % toFixedHelpers.base;\n c2 = Math.floor(c2 / toFixedHelpers.base);\n }\n },\n divide: function divide(n) {\n var i = toFixedHelpers.size;\n var c = 0;\n while (--i >= 0) {\n c += toFixedHelpers.data[i];\n toFixedHelpers.data[i] = Math.floor(c / n);\n c = (c % n) * toFixedHelpers.base;\n }\n },\n numToString: function numToString() {\n var i = toFixedHelpers.size;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {\n var t = $String(toFixedHelpers.data[i]);\n if (s === '') {\n s = t;\n } else {\n s += strSlice('0000000', 0, 7 - t.length) + t;\n }\n }\n }\n return s;\n },\n pow: function pow(x, n, acc) {\n return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));\n },\n log: function log(x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n }\n return n;\n }\n };\n\n var toFixedShim = function toFixed(fractionDigits) {\n var f, x, s, m, e, z, j, k;\n\n // Test for NaN and round fractionDigits down\n f = $Number(fractionDigits);\n f = isActualNaN(f) ? 0 : Math.floor(f);\n\n if (f < 0 || f > 20) {\n throw new RangeError('Number.toFixed called with invalid number of decimals');\n }\n\n x = $Number(this);\n\n if (isActualNaN(x)) {\n return 'NaN';\n }\n\n // If it is too big or small, return the string value of the number\n if (x <= -1e21 || x >= 1e21) {\n return $String(x);\n }\n\n s = '';\n\n if (x < 0) {\n s = '-';\n x = -x;\n }\n\n m = '0';\n\n if (x > 1e-21) {\n // 1e-21 < x < 1e21\n // -70 < log2(x) < 70\n e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;\n z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));\n z *= 0x10000000000000; // Math.pow(2, 52);\n e = 52 - e;\n\n // -18 < e < 122\n // x = z / 2 ^ e\n if (e > 0) {\n toFixedHelpers.multiply(0, z);\n j = f;\n\n while (j >= 7) {\n toFixedHelpers.multiply(1e7, 0);\n j -= 7;\n }\n\n toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);\n j = e - 1;\n\n while (j >= 23) {\n toFixedHelpers.divide(1 << 23);\n j -= 23;\n }\n\n toFixedHelpers.divide(1 << j);\n toFixedHelpers.multiply(1, 1);\n toFixedHelpers.divide(2);\n m = toFixedHelpers.numToString();\n } else {\n toFixedHelpers.multiply(0, z);\n toFixedHelpers.multiply(1 << (-e), 0);\n m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);\n }\n }\n\n if (f > 0) {\n k = m.length;\n\n if (k <= f) {\n m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;\n } else {\n m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);\n }\n } else {\n m = s + m;\n }\n\n return m;\n };\n defineProperties(NumberPrototype, { toFixed: toFixedShim }, hasToFixedBugs);\n\n var hasToPrecisionUndefinedBug = (function () {\n try {\n return 1.0.toPrecision(undefined) === '1';\n } catch (e) {\n return true;\n }\n }());\n var originalToPrecision = NumberPrototype.toPrecision;\n defineProperties(NumberPrototype, {\n toPrecision: function toPrecision(precision) {\n return typeof precision === 'undefined' ? originalToPrecision.call(this) : originalToPrecision.call(this, precision);\n }\n }, hasToPrecisionUndefinedBug);\n\n //\n // String\n // ======\n //\n\n // ES5 15.5.4.14\n // http://es5.github.com/#x15.5.4.14\n\n // [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]\n // Many browsers do not split properly with regular expressions or they\n // do not perform the split correctly under obscure conditions.\n // See http://blog.stevenlevithan.com/archives/cross-browser-split\n // I've tested in many browsers and this seems to cover the deviant ones:\n // 'ab'.split(/(?:ab)*/) should be [\"\", \"\"], not [\"\"]\n // '.'.split(/(.?)(.?)/) should be [\"\", \".\", \"\", \"\"], not [\"\", \"\"]\n // 'tesst'.split(/(s)*/) should be [\"t\", undefined, \"e\", \"s\", \"t\"], not\n // [undefined, \"t\", undefined, \"e\", ...]\n // ''.split(/.?/) should be [], not [\"\"]\n // '.'.split(/()()/) should be [\".\"], not [\"\", \"\", \".\"]\n\n if (\n 'ab'.split(/(?:ab)*/).length !== 2\n || '.'.split(/(.?)(.?)/).length !== 4\n || 'tesst'.split(/(s)*/)[1] === 't'\n || 'test'.split(/(?:)/, -1).length !== 4\n || ''.split(/.?/).length\n || '.'.split(/()()/).length > 1\n ) {\n (function () {\n var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group\n var maxSafe32BitInt = Math.pow(2, 32) - 1;\n\n StringPrototype.split = function (separator, limit) {\n var string = String(this);\n if (typeof separator === 'undefined' && limit === 0) {\n return [];\n }\n\n // If `separator` is not a regex, use native split\n if (!isRegex(separator)) {\n return strSplit(this, separator, limit);\n }\n\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '')\n + (separator.multiline ? 'm' : '')\n + (separator.unicode ? 'u' : '') // in ES6\n + (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6\n lastLastIndex = 0,\n // Make `global` and avoid `lastIndex` issues by working with a copy\n separator2, match, lastIndex, lastLength;\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n if (!compliantExecNpcg) {\n // Doesn't need flags gy, but they don't hurt\n separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n }\n /* Values for `limit`, per the spec:\n * If undefined: 4294967295 // maxSafe32BitInt\n * If 0, Infinity, or NaN: 0\n * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;\n * If negative number: 4294967296 - Math.floor(Math.abs(limit))\n * If other: Type-convert, then use the above rules\n */\n var splitLimit = typeof limit === 'undefined' ? maxSafe32BitInt : ES.ToUint32(limit);\n match = separatorCopy.exec(string);\n while (match) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0].length;\n if (lastIndex > lastLastIndex) {\n pushCall(output, strSlice(string, lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for\n // nonparticipating capturing groups\n if (!compliantExecNpcg && match.length > 1) {\n /* eslint-disable no-loop-func */\n match[0].replace(separator2, function () {\n for (var i = 1; i < arguments.length - 2; i++) {\n if (typeof arguments[i] === 'undefined') {\n match[i] = void 0;\n }\n }\n });\n /* eslint-enable no-loop-func */\n }\n if (match.length > 1 && match.index < string.length) {\n array_push.apply(output, arraySlice(match, 1));\n }\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= splitLimit) {\n break;\n }\n }\n if (separatorCopy.lastIndex === match.index) {\n separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n match = separatorCopy.exec(string);\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) {\n pushCall(output, '');\n }\n } else {\n pushCall(output, strSlice(string, lastLastIndex));\n }\n return output.length > splitLimit ? arraySlice(output, 0, splitLimit) : output;\n };\n }());\n\n // [bugfix, chrome]\n // If separator is undefined, then the result array contains just one String,\n // which is the this value (converted to a String). If limit is not undefined,\n // then the output array is truncated so that it contains no more than limit\n // elements.\n // \"0\".split(undefined, 0) -> []\n } else if ('0'.split(void 0, 0).length) {\n StringPrototype.split = function split(separator, limit) {\n if (typeof separator === 'undefined' && limit === 0) {\n return [];\n }\n return strSplit(this, separator, limit);\n };\n }\n\n var str_replace = StringPrototype.replace;\n var replaceReportsGroupsCorrectly = (function () {\n var groups = [];\n 'x'.replace(/x(.)?/g, function (match, group) {\n pushCall(groups, group);\n });\n return groups.length === 1 && typeof groups[0] === 'undefined';\n }());\n\n if (!replaceReportsGroupsCorrectly) {\n StringPrototype.replace = function replace(searchValue, replaceValue) {\n var isFn = isCallable(replaceValue);\n var hasCapturingGroups = isRegex(searchValue) && (/\\)[*?]/).test(searchValue.source);\n if (!isFn || !hasCapturingGroups) {\n return str_replace.call(this, searchValue, replaceValue);\n } else {\n var wrappedReplaceValue = function (match) {\n var length = arguments.length;\n var originalLastIndex = searchValue.lastIndex;\n searchValue.lastIndex = 0;\n var args = searchValue.exec(match) || [];\n searchValue.lastIndex = originalLastIndex;\n pushCall(args, arguments[length - 2], arguments[length - 1]);\n return replaceValue.apply(this, args);\n };\n return str_replace.call(this, searchValue, wrappedReplaceValue);\n }\n };\n }\n\n // ECMA-262, 3rd B.2.3\n // Not an ECMAScript standard, although ECMAScript 3rd Edition has a\n // non-normative section suggesting uniform semantics and it should be\n // normalized across all browsers\n // [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE\n var string_substr = StringPrototype.substr;\n var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';\n defineProperties(StringPrototype, {\n substr: function substr(start, length) {\n var normalizedStart = start;\n if (start < 0) {\n normalizedStart = max(this.length + start, 0);\n }\n return string_substr.call(this, normalizedStart, length);\n }\n }, hasNegativeSubstrBug);\n\n // ES5 15.5.4.20\n // whitespace from: http://es5.github.io/#x15.5.4.20\n var ws = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003'\n + '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028'\n + '\\u2029\\uFEFF';\n var zeroWidth = '\\u200b';\n var wsRegexChars = '[' + ws + ']';\n var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');\n var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');\n var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());\n defineProperties(StringPrototype, {\n // http://blog.stevenlevithan.com/archives/faster-trim-javascript\n // http://perfectionkills.com/whitespace-deviations/\n trim: function trim() {\n if (typeof this === 'undefined' || this === null) {\n throw new TypeError(\"can't convert \" + this + ' to object');\n }\n return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');\n }\n }, hasTrimWhitespaceBug);\n var trim = call.bind(String.prototype.trim);\n\n var hasLastIndexBug = StringPrototype.lastIndexOf && 'abcあい'.lastIndexOf('あい', 2) !== -1;\n defineProperties(StringPrototype, {\n lastIndexOf: function lastIndexOf(searchString) {\n if (typeof this === 'undefined' || this === null) {\n throw new TypeError(\"can't convert \" + this + ' to object');\n }\n var S = $String(this);\n var searchStr = $String(searchString);\n var numPos = arguments.length > 1 ? $Number(arguments[1]) : NaN;\n var pos = isActualNaN(numPos) ? Infinity : ES.ToInteger(numPos);\n var start = min(max(pos, 0), S.length);\n var searchLen = searchStr.length;\n var k = start + searchLen;\n while (k > 0) {\n k = max(0, k - searchLen);\n var index = strIndexOf(strSlice(S, k, start + searchLen), searchStr);\n if (index !== -1) {\n return k + index;\n }\n }\n return -1;\n }\n }, hasLastIndexBug);\n\n var originalLastIndexOf = StringPrototype.lastIndexOf;\n defineProperties(StringPrototype, {\n lastIndexOf: function lastIndexOf(searchString) {\n return originalLastIndexOf.apply(this, arguments);\n }\n }, StringPrototype.lastIndexOf.length !== 1);\n\n // ES-5 15.1.2.2\n // eslint-disable-next-line radix\n if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {\n /* global parseInt: true */\n parseInt = (function (origParseInt) {\n var hexRegex = /^[-+]?0[xX]/;\n return function parseInt(str, radix) {\n if (typeof str === 'symbol') {\n // handle Symbols in node 8.3/8.4\n // eslint-disable-next-line no-implicit-coercion, no-unused-expressions\n '' + str; // jscs:ignore disallowImplicitTypeConversion\n }\n\n var string = trim(String(str));\n var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);\n return origParseInt(string, defaultedRadix);\n };\n }(parseInt));\n }\n\n // https://es5.github.io/#x15.1.2.3\n if (1 / parseFloat('-0') !== -Infinity) {\n /* global parseFloat: true */\n parseFloat = (function (origParseFloat) {\n return function parseFloat(string) {\n var inputString = trim(String(string));\n var result = origParseFloat(inputString);\n return result === 0 && strSlice(inputString, 0, 1) === '-' ? -0 : result;\n };\n }(parseFloat));\n }\n\n if (String(new RangeError('test')) !== 'RangeError: test') {\n var errorToStringShim = function toString() {\n if (typeof this === 'undefined' || this === null) {\n throw new TypeError(\"can't convert \" + this + ' to object');\n }\n var name = this.name;\n if (typeof name === 'undefined') {\n name = 'Error';\n } else if (typeof name !== 'string') {\n name = $String(name);\n }\n var msg = this.message;\n if (typeof msg === 'undefined') {\n msg = '';\n } else if (typeof msg !== 'string') {\n msg = $String(msg);\n }\n if (!name) {\n return msg;\n }\n if (!msg) {\n return name;\n }\n return name + ': ' + msg;\n };\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\n Error.prototype.toString = errorToStringShim;\n }\n\n if (supportsDescriptors) {\n var ensureNonEnumerable = function (obj, prop) {\n if (isEnum(obj, prop)) {\n var desc = Object.getOwnPropertyDescriptor(obj, prop);\n if (desc.configurable) {\n desc.enumerable = false;\n Object.defineProperty(obj, prop, desc);\n }\n }\n };\n ensureNonEnumerable(Error.prototype, 'message');\n if (Error.prototype.message !== '') {\n Error.prototype.message = '';\n }\n ensureNonEnumerable(Error.prototype, 'name');\n }\n\n if (String(/a/mig) !== '/a/gim') {\n var regexToString = function toString() {\n var str = '/' + this.source + '/';\n if (this.global) {\n str += 'g';\n }\n if (this.ignoreCase) {\n str += 'i';\n }\n if (this.multiline) {\n str += 'm';\n }\n return str;\n };\n // can't use defineProperties here because of toString enumeration issue in IE <= 8\n RegExp.prototype.toString = regexToString;\n }\n}));\n\n},{}],7:[function(require,module,exports){\n/*! populate.js v1.0.2 by @dannyvankooten | MIT license */\n;(function(root) {\n\n\t/**\n\t * Populate form fields from a JSON object.\n\t *\n\t * @param form object The form element containing your input fields.\n\t * @param data array JSON data to populate the fields with.\n\t * @param basename string Optional basename which is added to `name` attributes\n\t */\n\tvar populate = function( form, data, basename) {\n\n\t\tfor(var key in data) {\n\n\t\t\tif( ! data.hasOwnProperty( key ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar name = key;\n\t\t\tvar value = data[key];\n\n if ('undefined' === typeof value) {\n value = '';\n }\n\n if (null === value) {\n value = '';\n }\n\n\t\t\t// handle array name attributes\n\t\t\tif(typeof(basename) !== \"undefined\") {\n\t\t\t\tname = basename + \"[\" + key + \"]\";\n\t\t\t}\n\n\t\t\tif(value.constructor === Array) {\n\t\t\t\tname += '[]';\n\t\t\t} else if(typeof value == \"object\") {\n\t\t\t\tpopulate( form, value, name);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// only proceed if element is set\n\t\t\tvar element = form.elements.namedItem( name );\n\t\t\tif( ! element ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar type = element.type || element[0].type;\n\n\t\t\tswitch(type ) {\n\t\t\t\tdefault:\n\t\t\t\t\telement.value = value;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'radio':\n\t\t\t\tcase 'checkbox':\n\t\t\t\t\tfor( var j=0; j < element.length; j++ ) {\n\t\t\t\t\t\telement[j].checked = ( value.indexOf(element[j].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select-multiple':\n\t\t\t\t\tvar values = value.constructor == Array ? value : [value];\n\n\t\t\t\t\tfor(var k = 0; k < element.options.length; k++) {\n\t\t\t\t\t\telement.options[k].selected |= (values.indexOf(element.options[k].value) > -1 );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'select':\n\t\t\t\tcase 'select-one':\n\t\t\t\t\telement.value = value.toString() || value;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n \t\t\t\telement.value = new Date(value).toISOString().split('T')[0];\t\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t// Play nice with AMD, CommonJS or a plain global object.\n\tif ( typeof define == 'function' && typeof define.amd == 'object' && define.amd ) {\n\t\tdefine(function() {\n\t\t\treturn populate;\n\t\t});\n\t}\telse if ( typeof module !== 'undefined' && module.exports ) {\n\t\tmodule.exports = populate;\n\t} else {\n\t\troot.populate = populate;\n\t}\n\n}(this));\n\n},{}],8:[function(require,module,exports){\n/*!\n * EventEmitter v5.2.5 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n\n;(function (exports) {\n 'use strict';\n\n /**\n * Class for managing events.\n * Can be extended to provide event functionality in other classes.\n *\n * @class EventEmitter Manages event registering and emitting.\n */\n function EventEmitter() {}\n\n // Shortcuts to improve speed and size\n var proto = EventEmitter.prototype;\n var originalGlobalValue = exports.EventEmitter;\n\n /**\n * Finds the index of the listener for the event in its storage array.\n *\n * @param {Function[]} listeners Array of listeners to search through.\n * @param {Function} listener Method to look for.\n * @return {Number} Index of the specified listener, -1 if not found\n * @api private\n */\n function indexOfListener(listeners, listener) {\n var i = listeners.length;\n while (i--) {\n if (listeners[i].listener === listener) {\n return i;\n }\n }\n\n return -1;\n }\n\n /**\n * Alias a method while keeping the context correct, to allow for overwriting of target method.\n *\n * @param {String} name The name of the target method.\n * @return {Function} The aliased method\n * @api private\n */\n function alias(name) {\n return function aliasClosure() {\n return this[name].apply(this, arguments);\n };\n }\n\n /**\n * Returns the listener array for the specified event.\n * Will initialise the event object and listener arrays if required.\n * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n * Each property in the object response is an array of listener functions.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Function[]|Object} All listener functions for the event.\n */\n proto.getListeners = function getListeners(evt) {\n var events = this._getEvents();\n var response;\n var key;\n\n // Return a concatenated array of all matching events if\n // the selector is a regular expression.\n if (evt instanceof RegExp) {\n response = {};\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n response[key] = events[key];\n }\n }\n }\n else {\n response = events[evt] || (events[evt] = []);\n }\n\n return response;\n };\n\n /**\n * Takes a list of listener objects and flattens it into a list of listener functions.\n *\n * @param {Object[]} listeners Raw listener objects.\n * @return {Function[]} Just the listener functions.\n */\n proto.flattenListeners = function flattenListeners(listeners) {\n var flatListeners = [];\n var i;\n\n for (i = 0; i < listeners.length; i += 1) {\n flatListeners.push(listeners[i].listener);\n }\n\n return flatListeners;\n };\n\n /**\n * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Object} All listener functions for an event in an object.\n */\n proto.getListenersAsObject = function getListenersAsObject(evt) {\n var listeners = this.getListeners(evt);\n var response;\n\n if (listeners instanceof Array) {\n response = {};\n response[evt] = listeners;\n }\n\n return response || listeners;\n };\n\n function isValidListener (listener) {\n if (typeof listener === 'function' || listener instanceof RegExp) {\n return true\n } else if (listener && typeof listener === 'object') {\n return isValidListener(listener.listener)\n } else {\n return false\n }\n }\n\n /**\n * Adds a listener function to the specified event.\n * The listener will not be added if it is a duplicate.\n * If the listener returns true then it will be removed after it is called.\n * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListener = function addListener(evt, listener) {\n if (!isValidListener(listener)) {\n throw new TypeError('listener must be a function');\n }\n\n var listeners = this.getListenersAsObject(evt);\n var listenerIsWrapped = typeof listener === 'object';\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n listeners[key].push(listenerIsWrapped ? listener : {\n listener: listener,\n once: false\n });\n }\n }\n\n return this;\n };\n\n /**\n * Alias of addListener\n */\n proto.on = alias('addListener');\n\n /**\n * Semi-alias of addListener. It will add a listener that will be\n * automatically removed after its first execution.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addOnceListener = function addOnceListener(evt, listener) {\n return this.addListener(evt, {\n listener: listener,\n once: true\n });\n };\n\n /**\n * Alias of addOnceListener.\n */\n proto.once = alias('addOnceListener');\n\n /**\n * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n * You need to tell it what event names should be matched by a regex.\n *\n * @param {String} evt Name of the event to create.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvent = function defineEvent(evt) {\n this.getListeners(evt);\n return this;\n };\n\n /**\n * Uses defineEvent to define multiple events.\n *\n * @param {String[]} evts An array of event names to define.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.defineEvents = function defineEvents(evts) {\n for (var i = 0; i < evts.length; i += 1) {\n this.defineEvent(evts[i]);\n }\n return this;\n };\n\n /**\n * Removes a listener function from the specified event.\n * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to remove the listener from.\n * @param {Function} listener Method to remove from the event.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListener = function removeListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var index;\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key)) {\n index = indexOfListener(listeners[key], listener);\n\n if (index !== -1) {\n listeners[key].splice(index, 1);\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of removeListener\n */\n proto.off = alias('removeListener');\n\n /**\n * Adds listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n * You can also pass it a regular expression to add the array of listeners to all events that match it.\n * Yeah, this function does quite a bit. That's probably a bad thing.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.addListeners = function addListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(false, evt, listeners);\n };\n\n /**\n * Removes listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be removed.\n * You can also pass it a regular expression to remove the listeners from all events that match it.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeListeners = function removeListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(true, evt, listeners);\n };\n\n /**\n * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n * The first argument will determine if the listeners are removed (true) or added (false).\n * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added/removed.\n * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n *\n * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n var i;\n var value;\n var single = remove ? this.removeListener : this.addListener;\n var multiple = remove ? this.removeListeners : this.addListeners;\n\n // If evt is an object then pass each of its properties to this method\n if (typeof evt === 'object' && !(evt instanceof RegExp)) {\n for (i in evt) {\n if (evt.hasOwnProperty(i) && (value = evt[i])) {\n // Pass the single listener straight through to the singular method\n if (typeof value === 'function') {\n single.call(this, i, value);\n }\n else {\n // Otherwise pass back to the multiple function\n multiple.call(this, i, value);\n }\n }\n }\n }\n else {\n // So evt must be a string\n // And listeners must be an array of listeners\n // Loop over it and pass each one to the multiple method\n i = listeners.length;\n while (i--) {\n single.call(this, evt, listeners[i]);\n }\n }\n\n return this;\n };\n\n /**\n * Removes all listeners from a specified event.\n * If you do not specify an event then all listeners will be removed.\n * That means every event will be emptied.\n * You can also pass a regex to remove all events that match it.\n *\n * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.removeEvent = function removeEvent(evt) {\n var type = typeof evt;\n var events = this._getEvents();\n var key;\n\n // Remove different things depending on the state of evt\n if (type === 'string') {\n // Remove all listeners for the specified event\n delete events[evt];\n }\n else if (evt instanceof RegExp) {\n // Remove all events matching the regex.\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n delete events[key];\n }\n }\n }\n else {\n // Remove all listeners in all events\n delete this._events;\n }\n\n return this;\n };\n\n /**\n * Alias of removeEvent.\n *\n * Added to mirror the node API.\n */\n proto.removeAllListeners = alias('removeEvent');\n\n /**\n * Emits an event of your choice.\n * When emitted, every listener attached to that event will be executed.\n * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n * So they will not arrive within the array on the other side, they will be separate.\n * You can also pass a regular expression to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {Array} [args] Optional array of arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emitEvent = function emitEvent(evt, args) {\n var listenersMap = this.getListenersAsObject(evt);\n var listeners;\n var listener;\n var i;\n var key;\n var response;\n\n for (key in listenersMap) {\n if (listenersMap.hasOwnProperty(key)) {\n listeners = listenersMap[key].slice(0);\n\n for (i = 0; i < listeners.length; i++) {\n // If the listener returns true then it shall be removed from the event\n // The function is executed either with a basic call or an apply if there is an args array\n listener = listeners[i];\n\n if (listener.once === true) {\n this.removeListener(evt, listener.listener);\n }\n\n response = listener.listener.apply(this, args || []);\n\n if (response === this._getOnceReturnValue()) {\n this.removeListener(evt, listener.listener);\n }\n }\n }\n }\n\n return this;\n };\n\n /**\n * Alias of emitEvent\n */\n proto.trigger = alias('emitEvent');\n\n /**\n * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {...*} Optional additional arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.emit = function emit(evt) {\n var args = Array.prototype.slice.call(arguments, 1);\n return this.emitEvent(evt, args);\n };\n\n /**\n * Sets the current value to check against when executing listeners. If a\n * listeners return value matches the one set here then it will be removed\n * after execution. This value defaults to true.\n *\n * @param {*} value The new value to check for when executing listeners.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n proto.setOnceReturnValue = function setOnceReturnValue(value) {\n this._onceReturnValue = value;\n return this;\n };\n\n /**\n * Fetches the current value to check against when executing listeners. If\n * the listeners return value matches this one then it should be removed\n * automatically. It will return true by default.\n *\n * @return {*|Boolean} The current value to check for or the default, true.\n * @api private\n */\n proto._getOnceReturnValue = function _getOnceReturnValue() {\n if (this.hasOwnProperty('_onceReturnValue')) {\n return this._onceReturnValue;\n }\n else {\n return true;\n }\n };\n\n /**\n * Fetches the events object and creates one if required.\n *\n * @return {Object} The events storage object.\n * @api private\n */\n proto._getEvents = function _getEvents() {\n return this._events || (this._events = {});\n };\n\n /**\n * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n *\n * @return {Function} Non conflicting EventEmitter class.\n */\n EventEmitter.noConflict = function noConflict() {\n exports.EventEmitter = originalGlobalValue;\n return EventEmitter;\n };\n\n // Expose the class either via AMD, CommonJS or the global object\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return EventEmitter;\n });\n }\n else if (typeof module === 'object' && module.exports){\n module.exports = EventEmitter;\n }\n else {\n exports.EventEmitter = EventEmitter;\n }\n}(typeof window !== 'undefined' ? window : this || {}));\n\n},{}]},{},[5]);\n; })();"]}
\ No newline at end of file
--- /dev/null
+<?php
+/*
+Plugin Name: HTML Forms
+Plugin URI: https://www.htmlforms.io/#utm_source=wp-plugin&utm_medium=html-forms&utm_campaign=plugins-page
+Description: Not just another forms plugin. Simple and flexible.
+Version: 1.3.2
+Author: ibericode
+Author URI: https://ibericode.com/
+License: GPL v3
+Text Domain: html-forms
+
+HTML Forms
+Copyright (C) 2017-2018, Danny van Kooten, danny@ibericode.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+namespace HTML_Forms;
+
+use wpdb;
+
+function _bootstrap() {
+ load_plugin_textdomain( 'html-forms', '', dirname( __FILE__ ) . '/languages' );
+
+ $settings = hf_get_settings();
+
+ $forms = new Forms( __FILE__, $settings );
+ $forms->hook();
+
+ // hook actions
+ $email_action = new Actions\Email();
+ $email_action->hook();
+
+ if( class_exists( 'MC4WP_MailChimp' ) ) {
+ $mailchimp_action = new Actions\MailChimp();
+ $mailchimp_action->hook();
+ }
+
+ if( is_admin() ) {
+ if( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) {
+ $admin = new Admin\Admin( __FILE__ );
+ $admin->hook();
+ }
+
+ $gdpr = new Admin\GDPR();
+ $gdpr->hook();
+ }
+}
+
+function _install() {
+ /** @var wpdb */
+ global $wpdb;
+
+ $table = $wpdb->prefix . 'hf_submissions';
+
+ $wpdb->query("CREATE TABLE IF NOT EXISTS {$table}(
+ `id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ `form_id` INT UNSIGNED NOT NULL,
+ `data` TEXT NOT NULL,
+ `user_agent` TEXT NULL,
+ `ip_address` VARCHAR(255) NULL,
+ `referer_url` VARCHAR(255) NULL,
+ `submitted_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
+);");
+
+}
+
+define( 'HTML_FORMS_VERSION', '1.3.2' );
+
+if( ! function_exists( 'hf_get_form' ) ) {
+ require __DIR__ . '/vendor/autoload.php';
+}
+
+register_activation_hook( __FILE__, 'HTML_Forms\\_install');
+add_action( 'plugins_loaded', 'HTML_Forms\\_bootstrap', 10 );
--- /dev/null
+# Copyright (C) 2018 html-forms
+# This file is distributed under the same license as the html-forms package.
+msgid ""
+msgstr ""
+"Project-Id-Version: html-forms\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n"
+"X-Poedit-SearchPath-0: .\n"
+"X-Poedit-SearchPathExcluded-0: *.js\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: src/Form.php:66
+msgid "Please enable JavaScript for this form to work."
+msgstr ""
+
+#: src/Forms.php:388
+msgid "Error:"
+msgstr ""
+
+#: src/Forms.php:388
+msgid "No form found with slug %s"
+msgstr ""
+
+#: src/functions.php:55
+msgid "Thank you! We will be in touch soon."
+msgstr ""
+
+#: src/functions.php:56
+msgid "Sorry, that email address looks invalid."
+msgstr ""
+
+#: src/functions.php:57
+msgid "Please fill in the required fields."
+msgstr ""
+
+#: src/functions.php:58
+msgid "Oops. An error occurred."
+msgstr ""
+
+#: src/Actions/Email.php:14
+msgid "Send Email"
+msgstr ""
+
+#: src/Actions/Email.php:43
+msgid "From"
+msgstr ""
+
+#: src/Actions/Email.php:49
+msgid "To"
+msgstr ""
+
+#: src/Actions/Email.php:55, src/Admin/Admin.php:343
+msgid "Subject"
+msgstr ""
+
+#: src/Actions/Email.php:57
+msgid "Your email subject"
+msgstr ""
+
+#: src/Actions/Email.php:62, src/Admin/Admin.php:344
+msgid "Message"
+msgstr ""
+
+#: src/Actions/Email.php:64
+msgid "Your email message"
+msgstr ""
+
+#: src/Actions/Email.php:65
+msgid "You can use the following variables (in all fields): "
+msgstr ""
+
+#: src/Actions/Email.php:70
+msgid "Content Type"
+msgstr ""
+
+#: src/Actions/Email.php:80
+msgid "Additional headers"
+msgstr ""
+
+#: src/Actions/MailChimp.php:13
+msgid "MailChimp"
+msgstr ""
+
+#: src/Actions/MailChimp.php:41
+msgid "Subscribe to %s"
+msgstr ""
+
+#: src/Actions/MailChimp.php:46
+msgid "List"
+msgstr ""
+
+#: src/Actions/MailChimp.php:50
+msgid "Select MailChimp list"
+msgstr ""
+
+#: src/Actions/MailChimp.php:57
+msgid "Please connect your MailChimp account first."
+msgstr ""
+
+#: src/Admin/Admin.php:121
+msgid "Forms"
+msgstr ""
+
+#: src/Admin/Admin.php:121
+msgid "All Forms"
+msgstr ""
+
+#: src/Admin/Admin.php:122
+msgid "Add new form"
+msgstr ""
+
+#: src/Admin/Admin.php:122
+msgid "Add New"
+msgstr ""
+
+#: src/Admin/Admin.php:123, src/Admin/Admin.php:123, src/Admin/Table.php:182
+msgid "Settings"
+msgstr ""
+
+#: src/Admin/Admin.php:341
+msgid "Your name"
+msgstr ""
+
+#: src/Admin/Admin.php:342
+msgid "Your email"
+msgstr ""
+
+#: src/Admin/Admin.php:345
+msgid "Send"
+msgstr ""
+
+#: src/Admin/GDPR.php:36
+msgid "Form submissions"
+msgstr ""
+
+#: src/Admin/Table.php:110
+msgid "Form"
+msgstr ""
+
+#: src/Admin/Table.php:111
+msgid "Shortcode"
+msgstr ""
+
+#: src/Admin/Table.php:180
+msgid "Fields"
+msgstr ""
+
+#: src/Admin/Table.php:181
+msgid "Messages"
+msgstr ""
+
+#: src/Admin/Table.php:183
+msgid "Actions"
+msgstr ""
+
+#: src/Admin/Table.php:187
+msgid "Submissions"
+msgstr ""
+
+#: src/Admin/Table.php:214
+msgid "No forms found. <a href=\"%s\">Would you like to create one now</a>?"
+msgstr ""
--- /dev/null
+<?php
+
+global $wp_roles;
+$wp_roles->add_cap( 'administrator', 'edit_forms' );
--- /dev/null
+<?php
+
+$settings = get_option( 'hf_settings', array() );
+
+if( isset( $settings['save_submissions'] ) && ! $settings['save_submissions'] ) {
+ $forms = get_posts(
+ array(
+ 'post_type' => 'html-form',
+ 'post_status' => 'publish',
+ 'numberposts' => -1,
+ )
+ );
+
+ foreach( $forms as $form ) {
+ $form_settings = (array) get_post_meta( $form->ID, '_hf_settings', true );
+ $form_settings['save_submissions'] = "0";
+ update_post_meta( $form->ID, '_hf_settings', $form_settings );
+ }
+}
--- /dev/null
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@gulp-sourcemaps/identity-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz",
+ "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.3",
+ "css": "^2.2.1",
+ "normalize-path": "^2.1.1",
+ "source-map": "^0.6.0",
+ "through2": "^2.0.3"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+ "dev": true
+ },
+ "atob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "css": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz",
+ "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "source-map": "^0.1.38",
+ "source-map-resolve": "^0.5.1",
+ "urix": "^0.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "decode-uri-component": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "resolve-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "urix": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "@gulp-sourcemaps/map-sources": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz",
+ "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^2.0.1",
+ "through2": "^2.0.3"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "normalize-path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "JSONStream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.3.tgz",
+ "integrity": "sha512-3Sp6WZZ/lXl+nTDoGpGWHEpTnnC6X5fnkolYZR6nwIfzbxxvA8utPWe1gCt7i0m9uVGsSz2IS8K8mJ7HmlduMg==",
+ "dev": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ },
+ "dependencies": {
+ "through": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ }
+ }
+ },
+ "abbrev": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "acorn-dynamic-import": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
+ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.0.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+ "dev": true
+ }
+ }
+ },
+ "acorn-node": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.5.2.tgz",
+ "integrity": "sha512-krFKvw/d1F17AN3XZbybIUzEY4YEPNiGo05AfP3dBlfVKrMHETKpgjpuZkSF8qDNt9UkQcqj7am8yJLseklCMg==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.7.1",
+ "acorn-dynamic-import": "^3.0.0",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0"
+ }
+ },
+ "amdefine": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-colors": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "^0.1.0"
+ },
+ "dependencies": {
+ "ansi-wrap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ }
+ }
+ },
+ "ansi-gray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
+ "dev": true,
+ "requires": {
+ "ansi-wrap": "0.1.0"
+ },
+ "dependencies": {
+ "ansi-wrap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
+ "dev": true
+ }
+ }
+ },
+ "ansi-styles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz",
+ "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=",
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "dev": true
+ },
+ "archy": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "array-differ": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-each": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-slice": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true
+ },
+ "array-uniq": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
+ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
+ "dev": true
+ },
+ "babel-core": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",
+ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-generator": "^6.26.0",
+ "babel-helpers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-register": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "convert-source-map": "^1.5.1",
+ "debug": "^2.6.9",
+ "json5": "^0.5.1",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.4",
+ "path-is-absolute": "^1.0.1",
+ "private": "^0.1.8",
+ "slash": "^1.0.0",
+ "source-map": "^0.5.7"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-generator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",
+ "dev": true,
+ "requires": {
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "detect-indent": "^4.0.0",
+ "jsesc": "^1.3.0",
+ "lodash": "^4.17.4",
+ "source-map": "^0.5.7",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "babel-helpers": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-register": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "^6.26.0",
+ "babel-runtime": "^6.26.0",
+ "core-js": "^2.5.0",
+ "home-or-tmp": "^2.0.0",
+ "lodash": "^4.17.4",
+ "mkdirp": "^0.5.1",
+ "source-map-support": "^0.4.15"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "home-or-tmp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.1"
+ }
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "private": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "repeating": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.6"
+ }
+ }
+ }
+ },
+ "babel-helper-builder-react-jsx": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",
+ "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "esutils": "^2.0.2"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-syntax-decorators": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
+ "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
+ "dev": true
+ },
+ "babel-plugin-syntax-jsx": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+ "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=",
+ "dev": true
+ },
+ "babel-plugin-transform-decorators-legacy": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.5.tgz",
+ "integrity": "sha512-jYHwjzRXRelYQ1uGm353zNzf3QmtdCfvJbuYTZ4gKveK7M9H1fs3a5AKdY1JUDl0z97E30ukORW1dzhWvsabtA==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-syntax-decorators": "^6.1.18",
+ "babel-runtime": "^6.2.0",
+ "babel-template": "^6.3.0"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "lodash": "^4.17.4"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "^6.24.1",
+ "babel-helper-function-name": "^6.24.1",
+ "babel-helper-optimise-call-expression": "^6.24.1",
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
+ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "^6.24.1",
+ "babel-runtime": "^6.26.0",
+ "babel-template": "^6.26.0",
+ "babel-types": "^6.26.0"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "^6.24.1",
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "^6.24.1",
+ "babel-helper-get-function-arity": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-template": "^6.24.1",
+ "babel-traverse": "^6.24.1",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-code-frame": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-messages": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ }
+ },
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "babel-traverse": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "^6.26.0",
+ "babel-messages": "^6.23.0",
+ "babel-runtime": "^6.26.0",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0",
+ "debug": "^2.6.8",
+ "globals": "^9.18.0",
+ "invariant": "^2.2.2",
+ "lodash": "^4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "invariant": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "^6.24.1",
+ "babel-runtime": "^6.22.0",
+ "regexpu-core": "^2.0.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-react-jsx": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",
+ "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-react-jsx": "^6.24.1",
+ "babel-plugin-syntax-jsx": "^6.8.0",
+ "babel-runtime": "^6.22.0"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.10.0"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.22.0",
+ "babel-types": "^6.24.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "babel-preset-es2015": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
+ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "^6.22.0",
+ "babel-plugin-transform-es2015-arrow-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "^6.24.1",
+ "babel-plugin-transform-es2015-classes": "^6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "^6.22.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1",
+ "babel-plugin-transform-es2015-for-of": "^6.22.0",
+ "babel-plugin-transform-es2015-function-name": "^6.24.1",
+ "babel-plugin-transform-es2015-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "^6.24.1",
+ "babel-plugin-transform-es2015-object-super": "^6.24.1",
+ "babel-plugin-transform-es2015-parameters": "^6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
+ "babel-plugin-transform-es2015-spread": "^6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "^6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "^6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0",
+ "babel-plugin-transform-es2015-unicode-regex": "^6.24.1",
+ "babel-plugin-transform-regenerator": "^6.24.1"
+ }
+ },
+ "babelify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babelify/-/babelify-8.0.0.tgz",
+ "integrity": "sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "base64-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ },
+ "dependencies": {
+ "tweetnacl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "beeper": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz",
+ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=",
+ "dev": true
+ },
+ "bl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
+ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.3.5",
+ "safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "block-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "brace-expansion": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "concat-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ }
+ }
+ },
+ "braces": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "brorand": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+ "dev": true
+ },
+ "browser-pack": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
+ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "combine-source-map": "~0.8.0",
+ "defined": "^1.0.0",
+ "safe-buffer": "^5.1.1",
+ "through2": "^2.0.0",
+ "umd": "^3.0.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "umd": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
+ "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.2.2.tgz",
+ "integrity": "sha512-fMES05wq1Oukts6ksGUU2TMVHHp06LyQt0SIwbXIHm7waSrQmNBZePsU0iM/4f94zbvb/wHma+D1YrdzWYnF/A==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "assert": "^1.4.0",
+ "browser-pack": "^6.0.1",
+ "browser-resolve": "^1.11.0",
+ "browserify-zlib": "~0.2.0",
+ "buffer": "^5.0.2",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "console-browserify": "^1.1.0",
+ "constants-browserify": "~1.0.0",
+ "crypto-browserify": "^3.0.0",
+ "defined": "^1.0.0",
+ "deps-sort": "^2.0.0",
+ "domain-browser": "^1.2.0",
+ "duplexer2": "~0.1.2",
+ "events": "^2.0.0",
+ "glob": "^7.1.0",
+ "has": "^1.0.0",
+ "htmlescape": "^1.1.0",
+ "https-browserify": "^1.0.0",
+ "inherits": "~2.0.1",
+ "insert-module-globals": "^7.0.0",
+ "labeled-stream-splicer": "^2.0.0",
+ "mkdirp": "^0.5.0",
+ "module-deps": "^6.0.0",
+ "os-browserify": "~0.3.0",
+ "parents": "^1.0.1",
+ "path-browserify": "~0.0.0",
+ "process": "~0.11.0",
+ "punycode": "^1.3.2",
+ "querystring-es3": "~0.2.0",
+ "read-only-stream": "^2.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.1.4",
+ "shasum": "^1.0.0",
+ "shell-quote": "^1.6.1",
+ "stream-browserify": "^2.0.0",
+ "stream-http": "^2.0.0",
+ "subarg": "^1.0.0",
+ "syntax-error": "^1.1.1",
+ "through2": "^2.0.0",
+ "timers-browserify": "^1.0.1",
+ "tty-browserify": "0.0.1",
+ "url": "~0.11.0",
+ "util": "~0.10.1",
+ "vm-browserify": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "array-filter": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+ "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=",
+ "dev": true
+ },
+ "array-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+ "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=",
+ "dev": true
+ },
+ "array-reduce": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=",
+ "dev": true
+ },
+ "asn1.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ }
+ },
+ "assert": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "dev": true,
+ "requires": {
+ "util": "0.10.3"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+ "dev": true
+ },
+ "util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ }
+ }
+ },
+ "bn.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "dev": true
+ },
+ "browser-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-rsa": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "browserify-sign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.1",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.2",
+ "elliptic": "^6.0.0",
+ "inherits": "^2.0.1",
+ "parse-asn1": "^5.0.0"
+ }
+ },
+ "browserify-zlib": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "dev": true,
+ "requires": {
+ "pako": "~1.0.5"
+ }
+ },
+ "buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.0.tgz",
+ "integrity": "sha512-nUJyfChH7PMJy75eRDCCKtszSEFokUNXC1hNVSe+o+VdcgvDPLs20k3v8UXI8ruRYAJiYtyRea8mYyqPxoHWDw==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "create-ecdh": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "crypto-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+ "dev": true,
+ "requires": {
+ "browserify-cipher": "^1.0.0",
+ "browserify-sign": "^4.0.0",
+ "create-ecdh": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "create-hmac": "^1.1.0",
+ "diffie-hellman": "^5.0.0",
+ "inherits": "^2.0.1",
+ "pbkdf2": "^3.0.3",
+ "public-encrypt": "^4.0.0",
+ "randombytes": "^2.0.0",
+ "randomfill": "^1.0.3"
+ }
+ },
+ "deps-sort": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz",
+ "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "shasum": "^1.0.0",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "diffie-hellman": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^2.0.0"
+ }
+ },
+ "duplexer2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "elliptic": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
+ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.4.0",
+ "brorand": "^1.0.1",
+ "hash.js": "^1.0.0",
+ "hmac-drbg": "^1.0.0",
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "hash-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "insert-module-globals": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz",
+ "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "acorn-node": "^1.5.2",
+ "combine-source-map": "^0.8.0",
+ "concat-stream": "^1.6.1",
+ "is-buffer": "^1.1.0",
+ "path-is-absolute": "^1.0.1",
+ "process": "~0.11.0",
+ "through2": "^2.0.0",
+ "undeclared-identifiers": "^1.1.2",
+ "xtend": "^4.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "jsonify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ },
+ "labeled-stream-splicer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz",
+ "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "isarray": "^2.0.4",
+ "stream-splicer": "^2.0.0"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz",
+ "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==",
+ "dev": true
+ }
+ }
+ },
+ "miller-rabin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.0.0",
+ "brorand": "^1.0.1"
+ }
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "os-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+ "dev": true
+ },
+ "pako": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
+ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
+ "dev": true
+ },
+ "parse-asn1": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "dev": true,
+ "requires": {
+ "asn1.js": "^4.0.0",
+ "browserify-aes": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.0",
+ "pbkdf2": "^3.0.3"
+ }
+ },
+ "path-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+ "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
+ "dev": true
+ },
+ "pbkdf2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz",
+ "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==",
+ "dev": true,
+ "requires": {
+ "create-hash": "^1.1.2",
+ "create-hmac": "^1.1.4",
+ "ripemd160": "^2.0.1",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ }
+ },
+ "process": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "public-encrypt": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
+ "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^4.1.0",
+ "browserify-rsa": "^4.0.0",
+ "create-hash": "^1.1.0",
+ "parse-asn1": "^5.0.0",
+ "randombytes": "^2.0.1"
+ }
+ },
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "querystring": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+ "dev": true
+ },
+ "querystring-es3": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
+ "dev": true
+ },
+ "read-only-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
+ "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "ripemd160": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "shell-quote": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+ "dev": true,
+ "requires": {
+ "array-filter": "~0.0.0",
+ "array-map": "~0.0.0",
+ "array-reduce": "~0.0.0",
+ "jsonify": "~0.0.0"
+ }
+ },
+ "stream-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "dev": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "stream-splicer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz",
+ "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.3.2",
+ "querystring": "0.2.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+ "dev": true
+ }
+ }
+ },
+ "util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "browserify-aes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "dev": true,
+ "requires": {
+ "buffer-xor": "^1.0.3",
+ "cipher-base": "^1.0.0",
+ "create-hash": "^1.1.0",
+ "evp_bytestokey": "^1.0.3",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "browserify-cipher": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+ "dev": true,
+ "requires": {
+ "browserify-aes": "^1.0.4",
+ "browserify-des": "^1.0.0",
+ "evp_bytestokey": "^1.0.0"
+ }
+ },
+ "browserify-des": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz",
+ "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "des.js": "^1.0.0",
+ "inherits": "^2.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "buffer-from": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz",
+ "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==",
+ "dev": true
+ },
+ "buffer-xor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+ "dev": true
+ },
+ "builtin-modules": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "cached-path-relative": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz",
+ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "cipher-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "class-utils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "arr-union": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "clone": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz",
+ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=",
+ "dev": true
+ },
+ "clone-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
+ "dev": true
+ },
+ "cloneable-readable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz",
+ "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^1.0.6",
+ "through2": "^2.0.1"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "co": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "codemirror": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.39.2.tgz",
+ "integrity": "sha512-mchBy0kQ1Wggi+e58SmoLgKO4nG7s/BqNg6/6TRbhsnXI/KRG+fKAvRQ1LLhZZ6ZtUoDQ0dl5aMhE+IkSRh60Q=="
+ },
+ "collection-visit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-support": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true
+ },
+ "combine-source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
+ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=",
+ "dev": true,
+ "requires": {
+ "convert-source-map": "~1.1.0",
+ "inline-source-map": "~0.6.0",
+ "lodash.memoize": "~3.0.3",
+ "source-map": "~0.5.3"
+ },
+ "dependencies": {
+ "convert-source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
+ "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=",
+ "dev": true
+ },
+ "inline-source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
+ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=",
+ "dev": true,
+ "requires": {
+ "source-map": "~0.5.3"
+ }
+ },
+ "lodash.memoize": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
+ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "component-emitter": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "typedarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "console-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "dev": true,
+ "requires": {
+ "date-now": "^0.1.4"
+ },
+ "dependencies": {
+ "date-now": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+ "dev": true
+ }
+ }
+ },
+ "convert-source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+ "dev": true
+ },
+ "copy-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "create-hash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.1",
+ "inherits": "^2.0.1",
+ "md5.js": "^1.3.4",
+ "ripemd160": "^2.0.1",
+ "sha.js": "^2.4.0"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "ripemd160": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "create-hmac": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "dev": true,
+ "requires": {
+ "cipher-base": "^1.0.3",
+ "create-hash": "^1.1.0",
+ "inherits": "^2.0.1",
+ "ripemd160": "^2.0.0",
+ "safe-buffer": "^5.0.1",
+ "sha.js": "^2.4.8"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ripemd160": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "sha.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ }
+ }
+ },
+ "d": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
+ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "^0.10.9"
+ },
+ "dependencies": {
+ "es5-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
+ "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "1"
+ }
+ },
+ "es6-iterator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ }
+ }
+ },
+ "dateformat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "get-stdin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "meow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "normalize-package-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "object-assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ }
+ }
+ },
+ "debug-fabulous": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz",
+ "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==",
+ "dev": true,
+ "requires": {
+ "debug": "3.X",
+ "memoizee": "0.4.X",
+ "object-assign": "4.X"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "es6-iterator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "es6-weak-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
+ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.14",
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "event-emitter": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
+ "is-promise": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "lru-queue": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
+ "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
+ "dev": true,
+ "requires": {
+ "es5-ext": "~0.10.2"
+ }
+ },
+ "memoizee": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz",
+ "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.30",
+ "es6-weak-map": "^2.0.2",
+ "event-emitter": "^0.3.5",
+ "is-promise": "^2.1",
+ "lru-queue": "0.1",
+ "next-tick": "1",
+ "timers-ext": "^0.1.2"
+ }
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "timers-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz",
+ "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==",
+ "dev": true,
+ "requires": {
+ "es5-ext": "~0.10.14",
+ "next-tick": "1"
+ }
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decko": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decko/-/decko-1.2.0.tgz",
+ "integrity": "sha1-/UPHNelnuAEzBohKVvvmZZlraBc="
+ },
+ "defaults": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "defined": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=",
+ "dev": true
+ },
+ "delegates": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+ "dev": true
+ },
+ "deprecated": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz",
+ "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=",
+ "dev": true
+ },
+ "des.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "detect-file": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
+ "dev": true
+ },
+ "detective": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/detective/-/detective-5.1.0.tgz",
+ "integrity": "sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.3.0",
+ "defined": "^1.0.0"
+ }
+ },
+ "domain-browser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+ "dev": true
+ },
+ "duplexer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz",
+ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ }
+ }
+ },
+ "es5-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz",
+ "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==",
+ "dev": true,
+ "requires": {
+ "es6-iterator": "~2.0.3",
+ "es6-symbol": "~3.1.1",
+ "next-tick": "1"
+ },
+ "dependencies": {
+ "es6-iterator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "es6-symbol": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+ "dev": true,
+ "requires": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ }
+ }
+ },
+ "es5-shim": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.10.tgz",
+ "integrity": "sha512-vmryBdqKRO8Ei9LJ4yyEk/EOmAOGIagcHDYPpTAi6pot4IMHS1AC2q5cTKPmydpijg2iX8DVmCuqgrNxIWj8Yg=="
+ },
+ "escape-string-regexp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "event-stream": {
+ "version": "1.3.2",
+ "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
+ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
+ "dev": true,
+ "requires": {
+ "duplexer": "~0.1.1",
+ "from": "~0",
+ "map-stream": "~0.1.0",
+ "pause-stream": "0.0.11",
+ "split": "0.3",
+ "stream-combiner": "~0.0.4",
+ "through": "~2.3.1"
+ },
+ "dependencies": {
+ "map-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
+ "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ }
+ }
+ },
+ "events": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
+ "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
+ "dev": true
+ },
+ "evp_bytestokey": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+ "dev": true,
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "md5.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "expand-brackets": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extglob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ }
+ }
+ },
+ "fancy-log": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz",
+ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=",
+ "dev": true,
+ "requires": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "time-stamp": "^1.0.0"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ }
+ }
+ },
+ "find-index": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz",
+ "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=",
+ "dev": true
+ },
+ "find-up": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pinkie": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ }
+ }
+ },
+ "findup-sync": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+ "dev": true,
+ "requires": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "fined": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz",
+ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ },
+ "dependencies": {
+ "expand-tilde": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "first-chunk-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
+ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
+ "dev": true
+ },
+ "flagged-respawn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.0.tgz",
+ "integrity": "sha1-Tnmumy6zi/hrO7Vr8+ClaqX8q9c=",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "for-own": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
+ "fragment-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ },
+ "dependencies": {
+ "map-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ }
+ }
+ },
+ "from": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "inherits": "~2.0.0",
+ "mkdirp": ">=0.5 0",
+ "rimraf": "2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "rimraf": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gaze": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
+ "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
+ "dev": true,
+ "requires": {
+ "globule": "^1.0.0"
+ }
+ },
+ "get-assigned-identifiers": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
+ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "get-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz",
+ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=",
+ "dev": true,
+ "requires": {
+ "glob": "^4.3.1",
+ "glob2base": "^0.0.12",
+ "minimatch": "^2.0.1",
+ "ordered-read-streams": "^0.1.0",
+ "through2": "^0.6.1",
+ "unique-stream": "^1.0.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
+ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^2.0.1",
+ "once": "^1.3.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz",
+ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "glob-watcher": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz",
+ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=",
+ "dev": true,
+ "requires": {
+ "gaze": "^0.5.1"
+ },
+ "dependencies": {
+ "gaze": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz",
+ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=",
+ "dev": true,
+ "requires": {
+ "globule": "~0.1.0"
+ }
+ },
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "~1.2.0",
+ "minimatch": "~0.2.11"
+ }
+ },
+ "globule": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz",
+ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=",
+ "dev": true,
+ "requires": {
+ "glob": "~3.1.21",
+ "lodash": "~1.0.1",
+ "minimatch": "~0.2.11"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
+ "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
+ "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz",
+ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "2",
+ "sigmund": "~1.0.0"
+ }
+ },
+ "sigmund": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
+ "dev": true
+ }
+ }
+ },
+ "glob2base": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz",
+ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=",
+ "dev": true,
+ "requires": {
+ "find-index": "^0.1.1"
+ }
+ },
+ "global-modules": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "dependencies": {
+ "is-windows": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ }
+ }
+ },
+ "global-prefix": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "dependencies": {
+ "expand-tilde": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
+ "ini": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ }
+ }
+ },
+ "globule": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
+ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
+ "dev": true,
+ "requires": {
+ "glob": "~7.1.1",
+ "lodash": "~4.17.4",
+ "minimatch": "~3.0.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "glogg": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz",
+ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "graceful-readlink": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "gulp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz",
+ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=",
+ "dev": true,
+ "requires": {
+ "archy": "^1.0.0",
+ "chalk": "^1.0.0",
+ "deprecated": "^0.0.1",
+ "gulp-util": "^3.0.0",
+ "interpret": "^1.0.0",
+ "liftoff": "^2.1.0",
+ "orchestrator": "^0.3.0",
+ "pretty-hrtime": "^1.0.0",
+ "semver": "^4.1.0",
+ "tildify": "^1.0.0",
+ "v8flags": "^2.0.2",
+ "vinyl-fs": "^0.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-babel": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-7.0.1.tgz",
+ "integrity": "sha512-UqHS3AdxZyJCRxqnAX603Dj3k/Wx6hzcgmav3QcxvsIFq3Y8ZkU7iXd0O+JwD5ivqCc6o0r1S7tCB/xxLnuSNw==",
+ "dev": true,
+ "requires": {
+ "plugin-error": "^1.0.1",
+ "replace-ext": "0.0.1",
+ "through2": "^2.0.0",
+ "vinyl-sourcemaps-apply": "^0.2.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.1"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-cssmin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-cssmin/-/gulp-cssmin-0.2.0.tgz",
+ "integrity": "sha1-h6s8ad05sg1dljVcZQStakR7HnI=",
+ "dev": true,
+ "requires": {
+ "clean-css": "^3.1.9",
+ "filesize": "~2.0.0",
+ "graceful-fs": "~4.1.4",
+ "gulp-rename": "~1.1.0",
+ "gulp-util": "~2.2.0",
+ "map-stream": "0.0.4",
+ "temp-write": "~0.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
+ "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
+ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^1.1.0",
+ "escape-string-regexp": "^1.0.0",
+ "has-ansi": "^0.1.0",
+ "strip-ansi": "^0.3.0",
+ "supports-color": "^0.2.0"
+ }
+ },
+ "clean-css": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
+ "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+ "dev": true,
+ "requires": {
+ "commander": "2.8.x",
+ "source-map": "0.4.x"
+ }
+ },
+ "clone-stats": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "commander": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.1.9"
+ }
+ },
+ "filesize": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-2.0.4.tgz",
+ "integrity": "sha1-eAWUHGD83+Y/RtfqNYxZreEcEyU=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "gulp-rename": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.1.0.tgz",
+ "integrity": "sha1-kwkKqvTThsB/IFOKaIjxXvunJ6E=",
+ "dev": true,
+ "requires": {
+ "map-stream": ">=0.0.4"
+ }
+ },
+ "gulp-util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz",
+ "integrity": "sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=",
+ "dev": true,
+ "requires": {
+ "chalk": "^0.5.0",
+ "dateformat": "^1.0.7-1.2.3",
+ "lodash._reinterpolate": "^2.4.1",
+ "lodash.template": "^2.4.1",
+ "minimist": "^0.2.0",
+ "multipipe": "^0.1.0",
+ "through2": "^0.5.0",
+ "vinyl": "^0.2.1"
+ }
+ },
+ "has-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz",
+ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^0.2.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "lodash._escapehtmlchar": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz",
+ "integrity": "sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=",
+ "dev": true,
+ "requires": {
+ "lodash._htmlescapes": "~2.4.1"
+ }
+ },
+ "lodash._escapestringchar": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz",
+ "integrity": "sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=",
+ "dev": true
+ },
+ "lodash._htmlescapes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz",
+ "integrity": "sha1-MtFL8IRLbeb4tioFG09nwii2JMs=",
+ "dev": true
+ },
+ "lodash._isnative": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz",
+ "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=",
+ "dev": true
+ },
+ "lodash._objecttypes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz",
+ "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz",
+ "integrity": "sha1-TxInqlqHEfxjL1sHofRgequLMiI=",
+ "dev": true
+ },
+ "lodash._reunescapedhtml": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz",
+ "integrity": "sha1-dHxPxAED6zu4oJduVx96JlnpO6c=",
+ "dev": true,
+ "requires": {
+ "lodash._htmlescapes": "~2.4.1",
+ "lodash.keys": "~2.4.1"
+ }
+ },
+ "lodash._shimkeys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz",
+ "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=",
+ "dev": true,
+ "requires": {
+ "lodash._objecttypes": "~2.4.1"
+ }
+ },
+ "lodash.defaults": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz",
+ "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=",
+ "dev": true,
+ "requires": {
+ "lodash._objecttypes": "~2.4.1",
+ "lodash.keys": "~2.4.1"
+ }
+ },
+ "lodash.escape": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz",
+ "integrity": "sha1-LOEsXghNsKV92l5dHu659dF1o7Q=",
+ "dev": true,
+ "requires": {
+ "lodash._escapehtmlchar": "~2.4.1",
+ "lodash._reunescapedhtml": "~2.4.1",
+ "lodash.keys": "~2.4.1"
+ }
+ },
+ "lodash.isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz",
+ "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=",
+ "dev": true,
+ "requires": {
+ "lodash._objecttypes": "~2.4.1"
+ }
+ },
+ "lodash.keys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz",
+ "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=",
+ "dev": true,
+ "requires": {
+ "lodash._isnative": "~2.4.1",
+ "lodash._shimkeys": "~2.4.1",
+ "lodash.isobject": "~2.4.1"
+ }
+ },
+ "lodash.template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz",
+ "integrity": "sha1-nmEQB+32KRKal0qzxIuBez4c8g0=",
+ "dev": true,
+ "requires": {
+ "lodash._escapestringchar": "~2.4.1",
+ "lodash._reinterpolate": "~2.4.1",
+ "lodash.defaults": "~2.4.1",
+ "lodash.escape": "~2.4.1",
+ "lodash.keys": "~2.4.1",
+ "lodash.templatesettings": "~2.4.1",
+ "lodash.values": "~2.4.1"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz",
+ "integrity": "sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "~2.4.1",
+ "lodash.escape": "~2.4.1"
+ }
+ },
+ "lodash.values": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz",
+ "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=",
+ "dev": true,
+ "requires": {
+ "lodash.keys": "~2.4.1"
+ }
+ },
+ "map-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.4.tgz",
+ "integrity": "sha1-XsbekCE+9sey65Nn6a3o2k79tos=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz",
+ "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=",
+ "dev": true
+ },
+ "multipipe": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
+ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^0.2.1"
+ }
+ },
+ "supports-color": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz",
+ "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=",
+ "dev": true
+ },
+ "temp-write": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-0.1.1.tgz",
+ "integrity": "sha1-C2Rng43Xf79/YqDJPah5cy/9qTI=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "~2.0.0",
+ "tempfile": "~0.1.2"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz",
+ "integrity": "sha1-fNLNsiiko/Nule+mzBQt59GhNtA=",
+ "dev": true
+ }
+ }
+ },
+ "tempfile": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.3.tgz",
+ "integrity": "sha1-fWtxAEcznTn4RzJ6BW2t8YMQMBA=",
+ "dev": true,
+ "requires": {
+ "uuid": "~1.4.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz",
+ "integrity": "sha1-390BLrnHAOIyP9M084rGIqs3Lac=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.0.17",
+ "xtend": "~3.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ }
+ }
+ },
+ "uuid": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz",
+ "integrity": "sha1-RTAZ9oaWam34PNxSROfJkOzDMvw=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz",
+ "integrity": "sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=",
+ "dev": true,
+ "requires": {
+ "clone-stats": "~0.0.1"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz",
+ "integrity": "sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-insert": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-insert/-/gulp-insert-0.5.0.tgz",
+ "integrity": "sha1-MjE/E+SiPPWsylzl8MCAkjx3hgI=",
+ "dev": true,
+ "requires": {
+ "streamqueue": "0.0.6"
+ }
+ },
+ "gulp-rename": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz",
+ "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=",
+ "dev": true
+ },
+ "gulp-replace": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.6.1.tgz",
+ "integrity": "sha1-Eb+Mj85TPjPi9qjy9DC5VboL4GY=",
+ "dev": true,
+ "requires": {
+ "istextorbinary": "1.0.2",
+ "readable-stream": "^2.0.1",
+ "replacestream": "^4.0.0"
+ },
+ "dependencies": {
+ "binaryextensions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz",
+ "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "istextorbinary": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz",
+ "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8=",
+ "dev": true,
+ "requires": {
+ "binaryextensions": "~1.0.0",
+ "textextensions": "~1.0.0"
+ }
+ },
+ "object-assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "replacestream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz",
+ "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.3",
+ "object-assign": "^4.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "textextensions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-1.0.2.tgz",
+ "integrity": "sha1-ZUhjk+4fK7A5pgy7oFsLaL2VAdI=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-sass": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-4.0.1.tgz",
+ "integrity": "sha512-OMQEgWNggpog8Tc5v1MuI6eo+5iiPkVeLL76iBhDoEEScLUPfZlpvzmgTnLkpcqdrNodZxpz5qcv6mS2rulk3g==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.0",
+ "lodash.clonedeep": "^4.3.2",
+ "node-sass": "^4.8.3",
+ "plugin-error": "^1.0.1",
+ "replace-ext": "^1.0.0",
+ "strip-ansi": "^4.0.0",
+ "through2": "^2.0.0",
+ "vinyl-sourcemaps-apply": "^0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "are-we-there-yet": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
+ "dev": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "asn1": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true
+ },
+ "async-foreach": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+ "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true
+ },
+ "boom": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.x.x"
+ }
+ },
+ "camelcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "caseless": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cliui": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz",
+ "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.1"
+ }
+ },
+ "color-name": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=",
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+ "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "which": "^1.2.9"
+ }
+ },
+ "cryptiles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "requires": {
+ "boom": "2.x.x"
+ }
+ },
+ "dashdash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "ecc-jsbn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "extend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.5",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "gauge": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+ "dev": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "get-stdin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true,
+ "requires": {
+ "ajv": "^4.9.1",
+ "har-schema": "^1.0.5"
+ }
+ },
+ "has-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-unicode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+ "dev": true
+ },
+ "hawk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "requires": {
+ "boom": "2.x.x",
+ "cryptiles": "2.x.x",
+ "hoek": "2.x.x",
+ "sntp": "1.x.x"
+ }
+ },
+ "hoek": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^0.2.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "in-publish": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+ "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "js-base64": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.8.tgz",
+ "integrity": "sha512-hm2nYpDrwoO/OzBhdcqs/XGT6XjSuSSCVEpia+Kl2J6x4CYt5hISlVL/AYU1khoDXv0AQVgxtdJySb9gjAn56Q==",
+ "dev": true
+ },
+ "jsbn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "json-stringify-safe": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "lodash.assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
+ },
+ "lodash.mergewith": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
+ "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "meow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
+ "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
+ "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.35.0"
+ }
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
+ "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==",
+ "dev": true
+ },
+ "node-gyp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz",
+ "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==",
+ "dev": true,
+ "requires": {
+ "fstream": "^1.0.0",
+ "glob": "^7.0.3",
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "^0.5.0",
+ "nopt": "2 || 3",
+ "npmlog": "0 || 1 || 2 || 3 || 4",
+ "osenv": "0",
+ "request": ">=2.9.0 <2.82.0",
+ "rimraf": "2",
+ "semver": "~5.3.0",
+ "tar": "^2.0.0",
+ "which": "1"
+ },
+ "dependencies": {
+ "request": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.6.0",
+ "aws4": "^1.2.1",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.0",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.1.1",
+ "har-validator": "~4.2.1",
+ "hawk": "~3.1.3",
+ "http-signature": "~1.1.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.7",
+ "oauth-sign": "~0.8.1",
+ "performance-now": "^0.2.0",
+ "qs": "~6.4.0",
+ "safe-buffer": "^5.0.1",
+ "stringstream": "~0.0.4",
+ "tough-cookie": "~2.3.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.0.0"
+ }
+ },
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ }
+ }
+ },
+ "node-sass": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.2.tgz",
+ "integrity": "sha512-LdxoJLZutx0aQXHtWIYwJKMj+9pTjneTcLWJgzf2XbGu0q5pRNqW5QvFCEdm3mc5rJOdru/mzln5d0EZLacf6g==",
+ "dev": true,
+ "requires": {
+ "async-foreach": "^0.1.3",
+ "chalk": "^1.1.1",
+ "cross-spawn": "^3.0.0",
+ "gaze": "^1.0.0",
+ "get-stdin": "^4.0.1",
+ "glob": "^7.0.3",
+ "in-publish": "^2.0.0",
+ "lodash.assign": "^4.2.0",
+ "lodash.clonedeep": "^4.3.2",
+ "lodash.mergewith": "^4.6.0",
+ "meow": "^3.7.0",
+ "mkdirp": "^0.5.1",
+ "nan": "^2.10.0",
+ "node-gyp": "^3.3.1",
+ "npmlog": "^4.0.0",
+ "request": "2.87.0",
+ "sass-graph": "^2.2.4",
+ "stdout-stream": "^1.4.0",
+ "true-case-path": "^1.0.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "nopt": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "oauth-sign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "os-locale": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "dev": true,
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
+ "osenv": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "qs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "replace-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "request": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
+ "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.6.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.1",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.1",
+ "har-validator": "~5.0.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.17",
+ "oauth-sign": "~0.8.2",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.1",
+ "safe-buffer": "^5.1.1",
+ "tough-cookie": "~2.3.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.1.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
+ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
+ "dev": true
+ },
+ "form-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "har-schema": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.1.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "performance-now": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "qs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ }
+ }
+ },
+ "require-directory": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "sass-graph": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
+ "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.0",
+ "lodash": "^4.0.0",
+ "scss-tokenizer": "^0.2.3",
+ "yargs": "^7.0.0"
+ }
+ },
+ "scss-tokenizer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
+ "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
+ "dev": true,
+ "requires": {
+ "js-base64": "^2.1.8",
+ "source-map": "^0.4.2"
+ }
+ },
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "set-blocking": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "spdx-correct": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "sshpk": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ }
+ }
+ },
+ "stdout-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz",
+ "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "stringstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
+ "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "tar": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+ "dev": true,
+ "requires": {
+ "block-stream": "*",
+ "fstream": "^1.0.2",
+ "inherits": "2"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "tough-cookie": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "dev": true,
+ "requires": {
+ "punycode": "^1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "wrap-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "y18n": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
+ "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
+ "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^3.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "gulp-sourcemaps": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz",
+ "integrity": "sha1-y7IAhFCxvM5s0jv5gze+dRv24wo=",
+ "dev": true,
+ "requires": {
+ "@gulp-sourcemaps/identity-map": "1.X",
+ "@gulp-sourcemaps/map-sources": "1.X",
+ "acorn": "5.X",
+ "convert-source-map": "1.X",
+ "css": "2.X",
+ "debug-fabulous": "1.X",
+ "detect-newline": "2.X",
+ "graceful-fs": "4.X",
+ "source-map": "~0.6.0",
+ "strip-bom-string": "1.X",
+ "through2": "2.X"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
+ "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
+ "dev": true
+ },
+ "atob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "css": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/css/-/css-2.2.3.tgz",
+ "integrity": "sha512-0W171WccAjQGGTKLhw4m2nnl0zPHUlTO/I8td4XzJgIB8Hg3ZZx71qT4G4eX8OVsSiaAKiUMy73E3nsbPlg2DQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "source-map": "^0.1.38",
+ "source-map-resolve": "^0.5.1",
+ "urix": "^0.1.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "decode-uri-component": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "detect-newline": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "resolve-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "urix": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-streamify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-streamify/-/gulp-streamify-1.0.2.tgz",
+ "integrity": "sha1-ANazgU1IbAiPeHOO0HZqvBY4nk0=",
+ "dev": true,
+ "requires": {
+ "plexer": "1.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "isstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
+ "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
+ "requires": {
+ "inherits": "~2.0.3",
+ "process-nextick-args": "~1.0.6",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.0.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
+ }
+ }
+ },
+ "gulp-uglify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.1.tgz",
+ "integrity": "sha512-KVffbGY9d4Wv90bW/B1KZJyunLMyfHTBbilpDvmcrj5Go0/a1G3uVpt+1gRBWSw/11dqR3coJ1oWNTt1AiXuWQ==",
+ "dev": true,
+ "requires": {
+ "gulplog": "^1.0.0",
+ "has-gulplog": "^0.1.0",
+ "lodash": "^4.13.1",
+ "make-error-cause": "^1.1.1",
+ "safe-buffer": "^5.1.2",
+ "through2": "^2.0.0",
+ "uglify-js": "^3.0.5",
+ "vinyl-sourcemaps-apply": "^0.2.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz",
+ "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "has-gulplog": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "uglify-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.6.tgz",
+ "integrity": "sha512-O1D7L6WcOzS1qW2ehopEm4cWm5yA6bQBozlks8jO8ODxYCy4zv+bR/la4Lwp01tpkYGNonnpXvUpYtrvSu8Yzg==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.16.0",
+ "source-map": "~0.6.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "vinyl-sourcemaps-apply": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.5.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
+ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
+ "dev": true,
+ "requires": {
+ "array-differ": "^1.0.0",
+ "array-uniq": "^1.0.2",
+ "beeper": "^1.0.0",
+ "chalk": "^1.0.0",
+ "dateformat": "^2.0.0",
+ "fancy-log": "^1.1.0",
+ "gulplog": "^1.0.0",
+ "has-gulplog": "^0.1.0",
+ "lodash._reescape": "^3.0.0",
+ "lodash._reevaluate": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.template": "^3.0.0",
+ "multipipe": "^0.1.2",
+ "object-assign": "^3.0.0",
+ "replace-ext": "0.0.1",
+ "through2": "^2.0.0",
+ "vinyl": "^0.5.0"
+ },
+ "dependencies": {
+ "clone-stats": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "dateformat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz",
+ "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.1.9"
+ }
+ },
+ "has-gulplog": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
+ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
+ "dev": true,
+ "requires": {
+ "sparkles": "^1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "lodash._reinterpolate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+ "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
+ "dev": true
+ },
+ "lodash.escape": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
+ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=",
+ "dev": true,
+ "requires": {
+ "lodash._root": "^3.0.0"
+ }
+ },
+ "lodash.keys": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
+ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "^3.0.0",
+ "lodash.isarguments": "^3.0.0",
+ "lodash.isarray": "^3.0.0"
+ }
+ },
+ "lodash.template": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
+ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
+ "dev": true,
+ "requires": {
+ "lodash._basecopy": "^3.0.0",
+ "lodash._basetostring": "^3.0.0",
+ "lodash._basevalues": "^3.0.0",
+ "lodash._isiterateecall": "^3.0.0",
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0",
+ "lodash.keys": "^3.0.0",
+ "lodash.restparam": "^3.0.0",
+ "lodash.templatesettings": "^3.0.0"
+ }
+ },
+ "lodash.templatesettings": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
+ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=",
+ "dev": true,
+ "requires": {
+ "lodash._reinterpolate": "^3.0.0",
+ "lodash.escape": "^3.0.0"
+ }
+ },
+ "multipipe": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
+ "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "0.0.2"
+ }
+ },
+ "object-assign": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
+ "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
+ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.0",
+ "clone-stats": "^0.0.1",
+ "replace-ext": "0.0.1"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "gulp-wp-pot": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulp-wp-pot/-/gulp-wp-pot-2.3.2.tgz",
+ "integrity": "sha512-D3KCb/jlQypfTZ6UsoOagAkEQneaza5VRT9Y9gWeztgnNmUIbI2ycKfzCfyJXvgFn25kya87XUp8RKv2fba8Qg==",
+ "dev": true,
+ "requires": {
+ "plugin-error": "^1.0.1",
+ "through2": "^2.0.3",
+ "vinyl": "^2.2.0",
+ "wp-pot": "^1.6.1"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "replace-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
+ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "gulplog": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
+ "dev": true,
+ "requires": {
+ "glogg": "^1.0.0"
+ }
+ },
+ "har-schema": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true
+ },
+ "has": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz",
+ "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=",
+ "dev": true,
+ "requires": {
+ "is-glob": "^3.0.0"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "has-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hash.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
+ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ }
+ }
+ },
+ "hmac-drbg": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "dev": true,
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "homedir-polyfill": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz",
+ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=",
+ "dev": true,
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
+ "htmlescape": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
+ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=",
+ "dev": true
+ },
+ "https-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+ "dev": true
+ },
+ "ieee754": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz",
+ "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "interpret": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
+ "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
+ "dev": true
+ },
+ "invert-kv": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ },
+ "dependencies": {
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "is-finite": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-number": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-valid-glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+ "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "jsonparse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "extsprintf": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "json-schema": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "verror": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "lcid": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "liftoff": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+ "dev": true,
+ "requires": {
+ "extend": "^3.0.0",
+ "findup-sync": "^2.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ },
+ "dependencies": {
+ "extend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "linkstate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/linkstate/-/linkstate-1.1.1.tgz",
+ "integrity": "sha512-5SICdxQG9FpWk44wSEoM2WOCUNuYfClp10t51XAIV5E7vUILF/dTYxf0vJw6bW2dUd2wcQon+LkNtRijpNLrig=="
+ },
+ "load-json-file": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "pify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ }
+ }
+ },
+ "lodash._basecopy": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
+ "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
+ "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=",
+ "dev": true
+ },
+ "lodash._basevalues": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
+ "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=",
+ "dev": true
+ },
+ "lodash._getnative": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
+ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
+ "dev": true
+ },
+ "lodash._isiterateecall": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
+ "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
+ "dev": true
+ },
+ "lodash._reescape": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
+ "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=",
+ "dev": true
+ },
+ "lodash._reevaluate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
+ "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=",
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
+ "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=",
+ "dev": true
+ },
+ "lodash.isarguments": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
+ "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
+ "dev": true
+ },
+ "lodash.isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
+ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
+ "dev": true
+ },
+ "lodash.restparam": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
+ "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0"
+ },
+ "dependencies": {
+ "js-tokens": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ }
+ }
+ },
+ "loud-rejection": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ },
+ "dependencies": {
+ "currently-unhandled": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "signal-exit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ }
+ }
+ },
+ "make-error": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz",
+ "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==",
+ "dev": true
+ },
+ "make-error-cause": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz",
+ "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=",
+ "dev": true,
+ "requires": {
+ "make-error": "^1.2.0"
+ }
+ },
+ "make-iterator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
+ "map-obj": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "micromatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
+ }
+ },
+ "minimalistic-assert": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+ "dev": true
+ },
+ "minimalistic-crypto-utils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ }
+ },
+ "module-deps": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.1.0.tgz",
+ "integrity": "sha512-NPs5N511VD1rrVJihSso/LiBShRbJALYBKzDW91uZYy7BpjnO4bGnZL3HjZ9yKcFdZUWwaYjDz9zxbuP7vKMuQ==",
+ "dev": true,
+ "requires": {
+ "JSONStream": "^1.0.3",
+ "browser-resolve": "^1.7.0",
+ "cached-path-relative": "^1.0.0",
+ "concat-stream": "~1.6.0",
+ "defined": "^1.0.0",
+ "detective": "^5.0.2",
+ "duplexer2": "^0.1.2",
+ "inherits": "^2.0.1",
+ "parents": "^1.0.0",
+ "readable-stream": "^2.0.2",
+ "resolve": "^1.4.0",
+ "stream-combiner2": "^1.1.1",
+ "subarg": "^1.0.0",
+ "through2": "^2.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "browser-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+ "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+ "dev": true,
+ "requires": {
+ "resolve": "1.1.7"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "nanomatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
+ }
+ },
+ "natives": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz",
+ "integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==",
+ "dev": true
+ },
+ "next-tick": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.defaults": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+ "dev": true,
+ "requires": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "object.map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
+ "dev": true,
+ "requires": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "once": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "orchestrator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz",
+ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "~0.1.5",
+ "sequencify": "~0.0.7",
+ "stream-consume": "~0.1.0"
+ }
+ },
+ "ordered-read-streams": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz",
+ "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "parents": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+ "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=",
+ "dev": true,
+ "requires": {
+ "path-platform": "~0.11.15"
+ },
+ "dependencies": {
+ "path-platform": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+ "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=",
+ "dev": true
+ }
+ }
+ },
+ "parse-filepath": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz",
+ "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=",
+ "dev": true,
+ "requires": {
+ "is-absolute": "^0.2.3",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ },
+ "dependencies": {
+ "is-absolute": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz",
+ "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=",
+ "dev": true,
+ "requires": {
+ "is-relative": "^0.2.1",
+ "is-windows": "^0.2.0"
+ }
+ },
+ "is-relative": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz",
+ "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=",
+ "dev": true,
+ "requires": {
+ "is-unc-path": "^0.1.1"
+ }
+ },
+ "is-unc-path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz",
+ "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=",
+ "dev": true,
+ "requires": {
+ "unc-path-regex": "^0.1.0"
+ }
+ },
+ "is-windows": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz",
+ "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
+ "dev": true
+ },
+ "map-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "path-root": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
+ "dev": true,
+ "requires": {
+ "path-root-regex": "^0.1.0"
+ }
+ },
+ "path-root-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
+ "dev": true
+ },
+ "unc-path-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "dev": true
+ }
+ }
+ },
+ "parse-passwd": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "dev": true
+ },
+ "pascalcase": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-sort": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-sort/-/path-sort-0.1.0.tgz",
+ "integrity": "sha1-ywF11Oy/paGP5nTMbXIL/hXguAU=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "pify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ }
+ }
+ },
+ "pause-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "dev": true,
+ "requires": {
+ "through": "~2.3"
+ },
+ "dependencies": {
+ "through": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ }
+ }
+ },
+ "performance-now": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "dev": true
+ },
+ "php-parser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.0.0-alpha2.tgz",
+ "integrity": "sha1-bcORysgJ5UFzjxxz9uy52ECjiEA=",
+ "dev": true
+ },
+ "plexer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/plexer/-/plexer-1.0.1.tgz",
+ "integrity": "sha1-qAG2Ur+BRXOXlepNO/CvlGwwwN0=",
+ "dev": true,
+ "requires": {
+ "isstream": "^0.1.2",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "plugin-error": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
+ }
+ },
+ "populate.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/populate.js/-/populate.js-1.0.3.tgz",
+ "integrity": "sha1-UcIkwQswqEtellLF8zDdMxzVGJY="
+ },
+ "posix-character-classes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "preact": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-8.3.0.tgz",
+ "integrity": "sha512-yhP68bOZMWaNjfKig0xeL59H9TRShxCoLEUVnvKXfSqLK67EDYev7GVgAhKHmATK/HpnGw6SjSooVvEJgeAUDQ=="
+ },
+ "preact-render-to-string": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-3.8.0.tgz",
+ "integrity": "sha512-3MWFFWP686dk3ksGmg5ZzuFJIM8xqWhPWa4P/sRvG8q6PedQ5U5h4/rhkCzVceK5Vy/8ZXPJeATjtGJuT2aGyQ==",
+ "requires": {
+ "pretty-format": "^3.5.1"
+ }
+ },
+ "pretty-format": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
+ "integrity": "sha1-v77VbV6ad2ZF9LH/eqGjrE+jw4U="
+ },
+ "pretty-hrtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "randombytes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "randomfill": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.0.5",
+ "safe-buffer": "^5.1.0"
+ },
+ "dependencies": {
+ "randombytes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "dependencies": {
+ "hosted-git-info": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "semver": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "rechoir": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "dev": true,
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "redent": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ },
+ "dependencies": {
+ "indent-string": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "repeating": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.18.0",
+ "babel-types": "^6.19.0",
+ "private": "^0.1.6"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "core-js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
+ "dev": true
+ },
+ "private": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ }
+ }
+ },
+ "regex-not": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
+ }
+ },
+ "regexpu-core": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.2.1",
+ "regjsgen": "^0.2.0",
+ "regjsparser": "^0.1.4"
+ }
+ },
+ "regjsgen": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "remove-trailing-separator": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
+ "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "replace-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
+ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
+ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.5"
+ }
+ },
+ "resolve-dir": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dev": true,
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "dependencies": {
+ "expand-tilde": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dev": true,
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ }
+ }
+ },
+ "ret": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "sequencify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz",
+ "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "sha.js": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
+ }
+ },
+ "shasum": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
+ "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=",
+ "dev": true,
+ "requires": {
+ "json-stable-stringify": "~0.0.0",
+ "sha.js": "~2.4.4"
+ },
+ "dependencies": {
+ "json-stable-stringify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+ "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=",
+ "dev": true,
+ "requires": {
+ "jsonify": "~0.0.0"
+ }
+ },
+ "jsonify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true
+ }
+ }
+ },
+ "simple-concat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz",
+ "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "snapdragon": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "atob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
+ "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=",
+ "dev": true
+ },
+ "debug": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decode-uri-component": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "map-cache": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "ms": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "urix": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sntp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.x.x"
+ },
+ "dependencies": {
+ "hoek": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ }
+ }
+ },
+ "sparkles": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
+ "dev": true
+ },
+ "spdx-exceptions": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+ "dev": true
+ },
+ "split": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
+ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
+ "dev": true,
+ "requires": {
+ "through": "2"
+ },
+ "dependencies": {
+ "through": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ }
+ }
+ },
+ "split-string": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
+ }
+ },
+ "static-extend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "stream-combiner": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
+ "dev": true,
+ "requires": {
+ "duplexer": "~0.1.1"
+ }
+ },
+ "stream-combiner2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
+ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=",
+ "dev": true,
+ "requires": {
+ "duplexer2": "~0.1.0",
+ "readable-stream": "^2.0.2"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "duplexer2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ }
+ }
+ },
+ "stream-consume": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.1.tgz",
+ "integrity": "sha512-tNa3hzgkjEP7XbCkbRXe1jpg+ievoa0O4SCFlMOYEscGSS4JJsckGL8swUyAa/ApGU3Ae4t6Honor4HhL+tRyg==",
+ "dev": true
+ },
+ "stream-http": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+ "dev": true,
+ "requires": {
+ "builtin-status-codes": "^3.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.3.6",
+ "to-arraybuffer": "^1.0.0",
+ "xtend": "^4.0.0"
+ },
+ "dependencies": {
+ "builtin-status-codes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "streamqueue": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/streamqueue/-/streamqueue-0.0.6.tgz",
+ "integrity": "sha1-ZvX17JTpuK8knkrsLdH3Qb/pTeM=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "strip-ansi": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "strip-bom": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz",
+ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=",
+ "dev": true,
+ "requires": {
+ "first-chunk-stream": "^1.0.0",
+ "is-utf8": "^0.2.0"
+ },
+ "dependencies": {
+ "is-utf8": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ }
+ }
+ },
+ "strip-bom-string": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+ "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ },
+ "dependencies": {
+ "get-stdin": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ }
+ }
+ },
+ "subarg": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
+ "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=",
+ "dev": true
+ },
+ "syntax-error": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
+ "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.2.0"
+ }
+ },
+ "tildify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz",
+ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "^1.0.0"
+ }
+ },
+ "time-stamp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
+ "dev": true
+ },
+ "timers-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
+ "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=",
+ "dev": true,
+ "requires": {
+ "process": "~0.11.0"
+ },
+ "dependencies": {
+ "process": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
+ "dev": true
+ }
+ }
+ },
+ "tlite": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tlite/-/tlite-0.1.7.tgz",
+ "integrity": "sha512-E5cGJJX28pKd5oXMPrOLe5ddCwUeGrRZD3dQcn71pnQyQVOMbmx+2K+9OpchEnX6e0lK0oOJn9eOqYHCsPIxTg=="
+ },
+ "to-arraybuffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ }
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "true-case-path": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz",
+ "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=",
+ "dev": true,
+ "requires": {
+ "glob": "^6.0.4"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
+ "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "tty-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
+ "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
+ "dev": true
+ },
+ "undeclared-identifiers": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz",
+ "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==",
+ "dev": true,
+ "requires": {
+ "acorn-node": "^1.3.0",
+ "get-assigned-identifiers": "^1.2.0",
+ "simple-concat": "^1.0.0",
+ "xtend": "^4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "union-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "arr-union": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "extend-shallow": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-extendable": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-plain-object": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "unique-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz",
+ "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=",
+ "dev": true
+ },
+ "unset-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ }
+ }
+ },
+ "use": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "user-home": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz",
+ "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
+ "dev": true
+ },
+ "v8flags": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz",
+ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
+ "dev": true,
+ "requires": {
+ "user-home": "^1.1.1"
+ }
+ },
+ "vinyl-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz",
+ "integrity": "sha1-lsGjR5uMU5JULGEgKQE7Wyf4i78=",
+ "dev": true,
+ "requires": {
+ "bl": "^1.2.1",
+ "through2": "^2.0.3"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "vinyl-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz",
+ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.0",
+ "glob-stream": "^3.1.5",
+ "glob-watcher": "^0.0.6",
+ "graceful-fs": "^3.0.0",
+ "mkdirp": "^0.5.0",
+ "strip-bom": "^1.0.0",
+ "through2": "^0.6.1",
+ "vinyl": "^0.4.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz",
+ "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=",
+ "dev": true
+ },
+ "clone-stats": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
+ "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz",
+ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=",
+ "dev": true,
+ "requires": {
+ "natives": "^1.1.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
+ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
+ "dev": true,
+ "requires": {
+ "readable-stream": ">=1.0.33-1 <1.1.0-0",
+ "xtend": ">=4.0.0 <4.1.0-0"
+ }
+ },
+ "vinyl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz",
+ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=",
+ "dev": true,
+ "requires": {
+ "clone": "^0.2.0",
+ "clone-stats": "^0.0.1"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "vinyl-source-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-2.0.0.tgz",
+ "integrity": "sha1-84pa+53R6Ttl1VBGmsYYKsT1S44=",
+ "dev": true,
+ "requires": {
+ "through2": "^2.0.3",
+ "vinyl": "^2.1.0"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "replace-ext": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
+ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=",
+ "dev": true
+ },
+ "safe-buffer": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "through2": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
+ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "vinyl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz",
+ "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==",
+ "dev": true,
+ "requires": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ }
+ },
+ "xtend": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ }
+ }
+ },
+ "vm-browserify": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
+ "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
+ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ },
+ "dependencies": {
+ "isexe": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ }
+ }
+ },
+ "which-module": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
+ "dev": true
+ },
+ "wide-align": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wolfy87-eventemitter": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.5.tgz",
+ "integrity": "sha512-1Og5JkuMNZfZcDn76HM1ktUqG8MOMWKpaGdExM1pcTloUNSBkx4Mti3/jRKSTt1vI3P7S8BTkFogqMbc7m3A7Q=="
+ },
+ "wp-pot": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/wp-pot/-/wp-pot-1.6.1.tgz",
+ "integrity": "sha512-rB57DFGxERyghmCOm1H+cioxq4Cu2HksvtwZJuJOKPB0dYbbfpLerGJ6CPQ1VV7VQp67OcwCzBSuFc7S2rd13A==",
+ "dev": true,
+ "requires": {
+ "matched": "^2.0.1",
+ "path-sort": "^0.1.0",
+ "php-parser": "3.0.0-alpha2"
+ },
+ "dependencies": {
+ "arr-union": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "glob": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inherits": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "matched": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/matched/-/matched-2.0.1.tgz",
+ "integrity": "sha512-2aidSwg5/8qzUSFx2HuU3tIwY0yyRKA126l67CWIBHhXZlCvA8jjD7C7DqvuTJNzNbbmK/ETRFx3aNEgOFjuzA==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "glob": "^7.1.2",
+ "has-glob": "^1.0.0",
+ "is-valid-glob": "^1.0.0",
+ "resolve-dir": "^1.0.1"
+ }
+ },
+ "minimatch": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ }
+ }
+}
--- /dev/null
+=== HTML Forms ===
+Contributors: Ibericode, DvanKooten, hchouhan, lapzor
+Donate link: https://htmlforms.io/#utm_source=wp-plugin-repo&utm_medium=html-forms&utm_campaign=donate-link
+Tags: form, contact form, email, contact, contact form 7
+Requires at least: 4.5
+Tested up to: 4.9.8
+Stable tag: 1.3.2
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+Requires PHP: 5.3
+
+Not just another contact form plugin.
+
+== Description ==
+
+With [HTML Forms](https://htmlforms.io/#utm_source=wp-plugin-repo&utm_medium=html-forms&utm_campaign=plugin-description), you can easily add multi-purpose forms to your WordPress site.
+
+The idea behind HTML Forms is different than most other form builder plugins. **You manage the form HTML. The plugin manages the PHP and JavaScript**.
+
+That's right. No intuitive drag & drop interface but full control over the form HTML. No limitations.
+
+We believe that dynamic form builders can be great, but they also severely limit your options. Also, they're slow.
+
+HTML Forms aims to be simpler, faster and smarter.
+
+You define your form fields in HTML and the plugin takes care of submitting the form, saving the form submission and running a configurable set of form actions.
+
+> ### 1. Define your form fields
+> You can use anything that resembles valid HTML. Ensure all `input` elements in your form have a `name` attribute to save data entered in that field.
+> ### 2. Configure your form actions
+> By default, form submissions are automatically saved for you. You can configure several other actions to run when a form is submitted, like sending an email notification or subscribing to MailChimp.
+> ### 3. Show the form somewhere on your site
+> You can show your form by using the `[hf_form]` shortcode in your WordPress posts, pages or widget areas.
+
+## HTML Forms features
+
+- Full control over the form HTML. If you want, we'll help you in generating the field HTML though.
+- Each form submission is automatically saved in your database and can be viewed in a simple table format.
+- Configure an unlimited amount of actions to run when a form is successfully submitted. For example, sending out email notifications.
+- Access form field values by referencing the field name, eg `[NAME]` or `[EMAIL]`.
+- Hide form or redirect to URL after a successful submission.
+- Configurable & translatable form messages.
+- Field validation.
+- Developer friendly. HTML Forms comes with a myriad of [JavaScript events](https://kb.htmlforms.io/javascript-events/#utm_source=wp-plugin-repo&utm_medium=html-forms&utm_campaign=plugin-description) and WordPress hooks that allow you to modify or extend the plugin's default behavior.
+- Advanced features are bundled in [HTML Forms Premium](https://www.htmlforms.io/premium-features/#utm_source=wp-plugin-repo&utm_medium=html-forms&utm_campaign=plugin-description).
+
+## Who is this for?
+
+HTML Forms is for everyone that wants a flexible & high performing form solution.
+
+- Users. Managing your own site? With HTML Forms, you don't need any technical knowledge to setup a contact form.
+- Developers. Building a site for your client? You supply the form HTML, HTML Forms takes care of validating and processing the form.
+- Theme developers. Shipping a theme? HTML Forms allows for complete blend-in with your theme, and you don't have to write yet another contact form plugin.
+
+With HTML Forms you can create any type of form. Contact forms, registration forms, price quote forms, you name it. It's somewhat similar to Contact Form 7, but without yet another template language for you to learn.
+
+For more information, please refer to [htmlforms.io](https://htmlforms.io/#utm_source=wp-plugin-repo&utm_medium=html-forms&utm_campaign=plugin-description).
+
+#### Support
+
+Use the [WordPress.org plugin forums](https://wordpress.org/support/plugin/html-forms) for community support where we try to help all of our users. If you found a bug, please create an issue on Github where we can act upon them more efficiently.
+
+The [HTML Forms knowledge base](https://kb.htmlforms.io/#utm_source=wp-plugin-repo&utm_medium=html-forms&utm_campaign=plugin-description) covers a wide range of frequently asked questions and is updated on a regular basis.
+
+#### Development
+
+HTML Forms is being developed on GitHub. If you want to collaborate, please look at [ibericode/html-forms](https://github.com/ibericode/html-forms).
+
+
+== Installation ==
+
+1. In your WordPress admin panel, go to *Plugins > New Plugin*, search for **HTML Forms** and click "*Install now*"
+1. Alternatively, download the plugin and upload the contents of `html-forms.zip` to your plugins directory, which usually is `/wp-content/plugins/`.
+1. Activate the plugin
+
+For more information, please refer to the [HTML Forms Knowledge Base](https://kb.htmlforms.io/#utm_source=wp-plugin-repo&utm_medium=html-forms&utm_campaign=installation-instructions).
+
+== Frequently Asked Questions ==
+
+#### Where can I find help?
+Start by going through the [HTML Forms knowledge base](https://kb.htmlforms.io/#utm_source=wp-plugin-repo&utm_medium=html-forms&utm_campaign=plugin-faq) where we cover a wide range of frequently asked questions.
+
+#### How to display a form in posts or pages?
+Use the `[hf_form]` shortcode.
+
+#### How to display a form in widget areas like the sidebar or footer?
+Go to **Appearance > Widgets**, add the "Text Widget" to any of your widget areas and use the `[hf_form]` shortcode.
+
+#### How do I show a form in a pop-up?
+
+We recommend the [Boxzilla pop-up plugin](https://wordpress.org/plugins/boxzilla/) for this. You can use the `[hf_form]` shortcode in your pop-up box to render any of your forms.
+
+#### Can I send an email when the form is submitted?
+
+Yes! You can configure this by opening up the "Actions" tab when editing your form and clicking the "Email" button under "Available actions".
+
+### Does the plugin include anti-spam measures?
+
+The plugin comes with built-in spam protection that should stop all automated attacks, unless specifically targeted at your site. When the built-in protection doesn't cut it, [WPBruiser](https://wordpress.org/plugins/goodbye-captcha/) surely will.
+
+
+== Screenshots ==
+
+1. Overview of forms in HTML Forms.
+2. Editing form fields.
+3. Sending an email when a form is submitted.
+4. Viewing saved form submissions.
+5. Hide form or redirect to URL after form submission.
+6. Configurable form messages.
+7. Details of a specific form submission.
+
+
+== Changelog ==
+
+
+#### 1.3.2 - Aug 6, 2018
+
+**Improvements**
+
+- Default to an empty string value in conditional fields logic. This allows you to show or hide elements when a field is empty or has not been set yet.
+
+
+#### 1.3.1 - June 12, 2018
+
+**Improvements**
+
+- Format dates, files and arrays when using data variables.
+- Format dates, files and arrays on the submissions overview and submissions details pages.
+- Allow cancelling a form's submit event in JavaScript (with `event.stopPropagation()`) to prevent form submission.
+
+
+#### 1.3.0 - May 28, 2018
+
+**Fixes**
+
+- PHP notice because of namespace import outside of any namespace.
+- Removed usage of PHP 5.4+ feature.
+- Enforce HTTPS in form preview iframe when WP Admin uses HTTPS but public site does not.
+
+**Improvements**
+
+- Hook into GDPR Personal Data Export & Erase functionality. Requires WP 4.9.6.
+- Allow updating stored Submissions with empty values. [Allows clearing out IP address & user agents](https://github.com/ibericode/html-forms-code-snippets/blob/master/do-not-store-ip-address-and-user-agent.php).
+- Internal field should start with underscore to hide it in column view.
+- Add for attribute to generated label element. Allows for simple [multi-step forms](https://github.com/ibericode/html-forms-code-snippets/blob/master/multi-step-form.html).
+
+**Additions**
+
+- Add support for button clicks in conditional element logic.
+
+
+#### 1.2.0 - April 24, 2018
+
+**Fixes**
+
+- Remove use of short-array syntax, which is only available in PHP 5.4 or later.
+
+**Improvements**
+
+- You can now hide columns on the submissions tab using screen options (in the top right corner).
+- You can now disable saving submissions on a per-form basis.
+- Allow pre-checking multiple checkboxes when using the field helper
+- Fields with matching URL parameter names will automatically be prefilled.
+- Use SVG icon in admin menu.
+
+**Additions**
+
+- Add simple action for subscribing to MailChimp. Requires [MailChimp for WordPress](https://wordpress.org/plugins/mailchimp-for-wp/).
+
+
+#### 1.1.5 - April 9, 2018
+
+**Fixes**
+
+- Conditionally hidden fields are now ignored in server-side required field validation too. Thanks [Jeroen Sormani](https://github.com/JeroenSormani)!
+
+**Improvements**
+
+- Added foundational stuff for being able to handle file uploads.
+
+**Additions**
+
+- Added `hf_process_form` action to execute code before the form actions run.
+
+
+#### 1.1.4 - March 28, 2018
+
+**Fixes**
+
+- Ensure form is fully functional in live preview.
+- Show all forms on the forms overview page (limit was 5).
+- Parse field variables in custom email headers. Thanks [Jeroen Sormani](https://github.com/JeroenSormani)!
+
+**Improvements**
+
+- You can now [bind JavaScript events](https://kb.htmlforms.io/javascript-events/) using the default browser API, eg `document.getElementById('hf-form-5').addEventListener('hf-success', ..);`
+- Only load JavaScript file on pages with a form on it.
+- Don't add line-breaks in HTML generated by the Field Builder.
+- [Conditional elements](https://kb.htmlforms.io/conditional-elements/) now accept wildcard values: `*`
+- Available field variables in email action settings are now clickable.
+
+**Additions**
+
+- Added several action & filter hooks to enable advanced functionality in [HTML Forms Premium](https://www.htmlforms.io/premium-features/).
+
+
+#### 1.1.3 - February 12, 2018
+
+**Fixes**
+
+- Form preview was not working when WPML was activated.
+
+**Improvements**
+
+- Improved theme compatibility for the form preview.
+- Print submission details as JSON instead of PHP object.
+- Form messages are now added to the element as data attributes, so they can be used in JavaScript event callbacks.
+
+**Additions**
+
+- [Conditional logic](https://kb.htmlforms.io/conditional-elements/) now accepts multiple values, separated by the |-character.
+
+
+#### 1.1.2 - January 18, 2018
+
+**Fixes**
+
+- Conditional elements visible in form preview.
+- WP_List_Table issue on forms overview page.
+
+**Improvements**
+
+- Allow disabling submission storage through a global setting.
+- Hide submissions tab when submission storage is disabled.
+- Prevent PHP notice if `$_SERVER` global is missing properties.
+- Update JavaScript dependencies.
+
+**Additions**
+
+- Filter: `hf_ignored_field_names`
+
+
+#### 1.1.1 - December 21, 2017
+
+**Fixes**
+
+- Incorrect role capability for administrators.
+
+
+#### 1.1 - December 21, 2017
+
+**Fixes**
+
+- JavaScript error in some older browser when submitting the form.
+
+**Improvements**
+
+- Use custom user capability base for editing & viewing forms.
+- Delay form response until a later hook so other plugins get a chance to hook in.
+- Disable client-side validation for conditional fields marked as required.
+
+**Additions**
+
+- Added live preview to the form editor.
+
+
+#### 1.0.6 - December 11, 2017
+
+**Fixes**
+
+- Array replacements in email message were showing "Array" instead of a comma separated list of values.
+- Don't reset form when there are errors. Thanks [Jeroen Sormani](https://github.com/JeroenSormani)!
+
+**Additions**
+
+- You can now use certain [template variables](https://kb.htmlforms.io/template-variables/) in the form content which will be dynamically replaced.
+- Added `hf_validate_form_{$form_slug}` filter hook.
+- Added `hf_form_{$form_slug}_success` action hook.
+
+
+#### 1.0.5 - November 18, 2017
+
+**Fixes**
+
+- Could not save more than one "Email" action.
+
+
+#### 1.0.4 - November 10, 2017
+
+**Fixes**
+
+- Incompatibility with PHP versions before 5.6.
+- Data variables could not be placed on the same line.
+
+**Improvements**
+
+- Clear output buffer before sending AJAX response to prevent issues with response parsing.
+
+**Additions**
+
+- Added `hf_form_message_{$code}` filter hook.
+
+
+
+#### 1.0.3 - November 6, 2017
+
+**Additions**
+
+- Added [support for conditional elements](https://kb.htmlforms.io/conditional-elements/) by using `data-show-if` and `data-hide-if` attributes.
+
+**Improvements**
+
+- Accept `id` argument in `[hf_form]` shortcode.
+- Catch errors in shortcode's `slug` attribute.
+- Allow changing form slug after initial form is saved.
+
+**Fixes**
+
+- Fixes stylesheet URL when option to load stylesheet is toggled.
+
+
+
+#### 1.0.2 - October 30, 2017
+
+**Fixes**
+
+- Form validation always failing when form has 0 required fields.
+
+**Improvements**
+
+- Fake success response when honeypot validation fails.
+- Validate request by comparing size of POST array with number of form fields.
+- Ensure submit button never has label element when using the field helper.
+- Optimize URL generation of asset files on frontend.
+
+**Additions**
+
+- Added `hf_validate_form_request_size` filter hook.
+
+
+#### 1.0.1 - October 28, 2017
+
+**Improvements**
+- Added SVG admin menu icon.
+- Field names are now sanitized before they are saved in the database.
+- Submit button was missing for default form fields.
+- Unneeded `<form>` tags are now stripped from the form before saving.
+
+**Additions**
+- Added `data-title` and `data-slug` attributes to the `<form>` element on the frontend.
+
+
+#### 1.0 - October 25, 2017
+
+Introducing a first version of HTML Forms, a different approach to forms for WordPress sites.
+
+
+
+== Upgrade Notice ==
--- /dev/null
+<?php
+
+namespace HTML_Forms\Actions;
+
+use HTML_Forms\Form;
+use HTML_Forms\Submission;
+
+abstract class Action {
+
+ public $type = '';
+ public $label = '';
+
+ public function hook() {
+ add_filter( 'hf_available_form_actions', array( $this, 'register' ) );
+ add_action( 'hf_output_form_action_' . $this->type . '_settings', array( $this, 'page_settings' ), 10, 2 );
+ add_action( 'hf_process_form_action_' . $this->type, array( $this, 'process' ), 10, 3 );
+ }
+
+ /**
+ * Renders the settings for this action.
+ *
+ * @param array $settings
+ * @param string $index
+ */
+ abstract function page_settings( $settings, $index );
+
+ abstract function process( array $settings, Submission $submission, Form $form );
+
+ /**
+ * @param array $actions
+ * @return array
+ */
+ public function register( array $actions ) {
+ $actions[$this->type] = $this->label;
+ return $actions;
+ }
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms\Actions;
+
+use HTML_Forms\Form;
+use HTML_Forms\Submission;
+
+class Email extends Action {
+
+ public $type = 'email';
+ public $label = 'Send Email';
+
+ public function __construct() {
+ $this->label = __( 'Send Email', 'html-forms' );
+ }
+
+ /**
+ * @return array
+ */
+ private function get_default_settings() {
+ $defaults = array(
+ 'from' => get_option( 'admin_email' ),
+ 'to' => get_option( 'admin_email' ),
+ 'subject' => '',
+ 'message' => '',
+ 'headers' => '',
+ 'content_type' => 'text/html',
+ );
+ return $defaults;
+ }
+
+ /**
+ * @param array $settings
+ * @param string|int $index
+ */
+ public function page_settings( $settings, $index ) {
+ $settings = array_merge( $this->get_default_settings(), $settings );
+ ?>
+ <span class="hf-action-summary"><?php printf( 'From %s. To %s.', $settings['from'], $settings['to'] ); ?></span>
+ <input type="hidden" name="form[settings][actions][<?php echo $index; ?>][type]" value="<?php echo $this->type; ?>" />
+ <table class="form-table">
+ <tr>
+ <th><label><?php echo __( 'From', 'html-forms' ); ?> <span class="hf-required">*</span></label></th>
+ <td>
+ <input name="form[settings][actions][<?php echo $index; ?>][from]" value="<?php echo esc_attr( $settings['from'] ); ?>" type="text" class="regular-text" placeholder="jane@email.com" required />
+ </td>
+ </tr>
+ <tr>
+ <th><label><?php echo __( 'To', 'html-forms' ); ?> <span class="hf-required">*</span></label></th>
+ <td>
+ <input name="form[settings][actions][<?php echo $index; ?>][to]" value="<?php echo esc_attr( $settings['to'] ); ?>" type="text" class="regular-text" placeholder="john@email.com" required />
+ </td>
+ </tr>
+ <tr>
+ <th><label><?php echo __( 'Subject', 'html-forms' ); ?></label></th>
+ <td>
+ <input name="form[settings][actions][<?php echo $index; ?>][subject]" value="<?php echo esc_attr( $settings['subject'] ); ?>" type="text" class="regular-text" placeholder="<?php echo esc_attr( __( 'Your email subject', 'html-forms' ) ); ?>" />
+ </td>
+ </tr>
+
+ <tr>
+ <th><label><?php echo __( 'Message', 'html-forms' ); ?> <span class="hf-required">*</span></label></th>
+ <td>
+ <textarea name="form[settings][actions][<?php echo $index; ?>][message]" rows="8" class="widefat" placeholder="<?php echo esc_attr( __( 'Your email message', 'html-forms' ) ); ?>" required><?php echo esc_textarea( $settings['message'] ); ?></textarea>
+ <p class="help"><?php _e( 'You can use the following variables (in all fields): ', 'html-forms' ); ?><br /><span class="hf-field-names"></span></p>
+ </td>
+ </tr>
+
+ <tr>
+ <th><label><?php echo __( 'Content Type', 'html-forms' ); ?></label></th>
+ <td>
+ <select name="form[settings][actions][<?php echo $index; ?>][content_type]" required>
+ <option <?php selected( $settings['content_type'], 'text/html' ); ?>>text/plain</option>
+ <option <?php selected( $settings['content_type'], 'text/html' ); ?>>text/html</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <th><label><?php echo __( 'Additional headers', 'html-forms' ); ?></label></th>
+ <td>
+ <textarea name="form[settings][actions][<?php echo $index; ?>][headers]" rows="4" class="widefat" placeholder="<?php echo esc_attr( 'Reply-To: [NAME] <[EMAIL]>' ); ?>"><?php echo esc_textarea( $settings['headers'] ); ?></textarea>
+ </td>
+ </tr>
+ </table>
+ <?php
+ }
+
+ /**
+ * Processes this action
+ *
+ * @param array $settings
+ * @param Submission $submission
+ * @param Form $form
+ */
+ public function process( array $settings, Submission $submission, Form $form ) {
+ if( empty( $settings['to'] ) || empty( $settings['message'] ) ) {
+ return false;
+ }
+
+ $settings = array_merge( $this->get_default_settings(), $settings );
+
+ $to = hf_replace_data_variables( $settings['to'], $submission->data );
+ $subject = ! empty( $settings['subject'] ) ? hf_replace_data_variables( $settings['subject'], $submission->data ) : '';
+ $message = hf_replace_data_variables( $settings['message'], $submission->data );
+
+ // parse additional email headers from settings
+ $headers = array();
+ if( ! empty( $settings['headers'] ) ) {
+ $headers = explode( PHP_EOL, hf_replace_data_variables( $settings['headers'], $submission->data ) );
+ }
+
+ $html_email = $settings['content_type'] === 'text/html';
+ if( $html_email ) {
+ $headers[] = 'Content-Type: text/html';
+ $message = nl2br( $message );
+ }
+
+ if( ! empty( $settings['from'] ) ) {
+ $from = hf_replace_data_variables($settings['from'], $submission->data);
+ $headers[] = sprintf( 'From: %s', $from );
+ }
+
+ return wp_mail( $to, $subject, $message, $headers );
+ }
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms\Actions;
+
+use HTML_Forms\Form;
+use HTML_Forms\Submission;
+
+class MailChimp extends Action {
+ public $type = 'mailchimp';
+ public $label = 'MailChimp';
+
+ public function __construct() {
+ $this->label = __( 'MailChimp', 'html-forms' );
+ }
+
+ /**
+ * @return array
+ */
+ private function get_default_settings() {
+ $defaults = array(
+ 'list_id' => '',
+ );
+ return $defaults;
+ }
+
+ /**
+ * @param array $settings
+ * @param string|int $index
+ */
+ public function page_settings( $settings, $index ) {
+ $settings = array_merge( $this->get_default_settings(), $settings );
+ $mailchimp = new \MC4WP_MailChimp();
+ $lists = $mailchimp->get_cached_lists();
+
+ if( ! empty( $settings['list_id'] ) ) {
+ $selected_list = $mailchimp->get_cached_list( $settings['list_id'] );
+ }
+ ?>
+
+ <?php if( ! empty( $selected_list ) ) { ?>
+ <span class="hf-action-summary"><?php printf( __( 'Subscribe to %s', 'html-forms' ), $selected_list->name ); ?></span>
+ <?php } ?>
+ <input type="hidden" name="form[settings][actions][<?php echo $index; ?>][type]" value="<?php echo $this->type; ?>" />
+ <table class="form-table">
+ <tr valign="top">
+ <th scope="row"><?php _e( 'List', 'html-forms' ); ?></th>
+ <td>
+ <?php if( ! empty( $lists ) ) { ?>
+ <select name="form[settings][actions][<?php echo $index; ?>][list_id]">
+ <option value="" style="color: #AAA;" readonly><?php _e( 'Select MailChimp list', 'html-forms' ); ?></option>
+ <?php foreach( $lists as $list ) {
+ $selected = $settings['list_id'] === $list->id ? 'selected': '';
+ echo sprintf( '<option value="%s" %s>%s</option>', $list->id, $selected, $list->name );
+ } ?>
+ </select>
+ <?php } else {
+ echo '<p><a href="'. admin_url( 'admin.php?page=mailchimp-for-wp' ) .'">' . __( 'Please connect your MailChimp account first.', 'html-forms' ) . '</a></p>';
+ } ?>
+ </td>
+
+ </tr>
+ </table>
+ <?php
+ }
+
+ public function process( array $settings, Submission $submission, Form $form ) {
+ if( empty( $settings['list_id'] ) ) {
+ return;
+ }
+
+ $mailchimp_list_id = $settings['list_id'];
+ $email_address = '';
+
+ // find email field
+ foreach( $submission->data as $field => $value ) {
+ if( is_email( $value ) ) {
+ $email_address = $value;
+ }
+ }
+
+ // bail if no email address found
+ if( empty( $email_address ) ) {
+ return;
+ }
+
+ $merge_fields = array();
+ $merge_fields = apply_filters( 'hf_mailchimp_action_merge_fields', $merge_fields, $submission, $form );
+
+ // subscribe the email address to the selected list
+ $mailchimp = new \MC4WP_MailChimp();
+ $mailchimp->list_subscribe( $mailchimp_list_id, $email_address, array(
+ 'merge_fields' => $merge_fields,
+ 'status' => 'pending',
+ ) );
+ }
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms\Admin;
+
+use HTML_Forms\Form;
+use HTML_Forms\Submission;
+
+class Admin {
+
+ /**
+ * @var string
+ */
+ private $plugin_file;
+
+ /**
+ * Admin constructor.
+ *
+ * @param string $plugin_file
+ */
+ public function __construct( $plugin_file ) {
+ $this->plugin_file = $plugin_file;
+ }
+
+ public function hook() {
+ add_action( 'admin_menu', array( $this, 'menu' ) );
+ add_action( 'init', array( $this, 'register_settings' ) );
+ add_action( 'admin_init', array( $this, 'run_migrations' ) );
+ add_action( 'admin_init', array( $this, 'listen' ) );
+ add_action( 'admin_print_styles', array( $this, 'assets' ) );
+ add_action( 'admin_head', array( $this, 'add_screen_options' ) );
+ add_action( 'hf_admin_action_create_form', array( $this, 'process_create_form' ) );
+ add_action( 'hf_admin_action_save_form', array( $this, 'process_save_form' ) );
+ add_action( 'hf_admin_action_bulk_delete_submissions', array( $this, 'process_bulk_delete_submissions' ) );
+
+ add_action( 'hf_admin_output_form_tab_fields', array( $this, 'tab_fields' ) );
+ add_action( 'hf_admin_output_form_tab_messages', array( $this, 'tab_messages' ) );
+ add_action( 'hf_admin_output_form_tab_settings', array( $this, 'tab_settings' ) );
+ add_action( 'hf_admin_output_form_tab_actions', array( $this, 'tab_actions' ) );
+ add_action( 'hf_admin_output_form_tab_submissions', array( $this, 'tab_submissions_list' ) );
+ add_action( 'hf_admin_output_form_tab_submissions', array( $this, 'tab_submissions_detail' ) );
+ }
+
+ public function register_settings() {
+ // register settings
+ register_setting( 'hf_settings', 'hf_settings', array( $this, 'sanitize_settings' ) );
+ }
+
+ public function run_migrations() {
+ $version_from = get_option( 'hf_version', '0.0' );
+ $version_to = HTML_FORMS_VERSION;
+
+ if( version_compare( $version_from, $version_to, '>=' ) ) {
+ return;
+ }
+
+ $migrations = new Migrations( $version_from, $version_to, dirname( $this->plugin_file ) . '/migrations' );
+ $migrations->run();
+ update_option( 'hf_version', HTML_FORMS_VERSION );
+ }
+
+ /**
+ * @param array $dirty
+ * @return array
+ */
+ public function sanitize_settings( $dirty ) {
+ return $dirty;
+ }
+
+ public function listen() {
+ $request = array_merge( $_GET, $_POST );
+ if( empty( $request['_hf_admin_action'] ) ) {
+ return;
+ }
+
+ // do nothing if logged in user is not of role administrator
+ if( ! current_user_can( 'edit_forms' ) ) {
+ return;
+ }
+
+ $action = (string) $request['_hf_admin_action'];
+
+ /**
+ * Allows you to hook into requests containing `_hf_admin_action` => action name.
+ *
+ * The dynamic portion of the hook name, `$action`, refers to the action name.
+ *
+ * By the time this hook is fired, the user is already authorized. After processing all the registered hooks,
+ * the request is redirected back to the referring URL.
+ *
+ * @since 3.0
+ */
+ do_action( 'hf_admin_action_' . $action );
+
+ // redirect back to where we came from
+ $redirect_url = ! empty( $_REQUEST['_redirect_to'] ) ? $_REQUEST['_redirect_to'] : remove_query_arg( '_hf_admin_action' );
+ wp_safe_redirect( $redirect_url );
+ exit;
+ }
+
+ public function assets() {
+ if( empty( $_GET['page'] ) || strpos( $_GET['page'], 'html-forms' ) !== 0 ) {
+ return;
+ }
+
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+
+ wp_enqueue_style( 'html-forms-admin', plugins_url( 'assets/css/admin'. $suffix .'.css', $this->plugin_file ), array(), HTML_FORMS_VERSION );
+ wp_enqueue_script( 'html-forms-admin', plugins_url( 'assets/js/admin'. $suffix .'.js', $this->plugin_file ), array(), HTML_FORMS_VERSION, true );
+ wp_localize_script( 'html-forms-admin', 'hf_options', array(
+ 'page' => $_GET['page'],
+ 'view' => empty( $_GET['view'] ) ? '' : $_GET['view'],
+ 'form_id' => empty( $_GET['form_id'] ) ? 0 : (int) $_GET['form_id'],
+ ));
+ }
+
+ public function menu() {
+ $capability = 'edit_forms';
+ $svg_icon = '<svg version="1.0" xmlns="http://www.w3.org/2000/svg" width="256.000000pt" height="256.000000pt" viewBox="0 0 256.000000 256.000000" preserveAspectRatio="xMidYMid meet"><g transform="translate(0.000000,256.000000) scale(0.100000,-0.100000)"
+fill="#000000" stroke="none"><path d="M0 1280 l0 -1280 1280 0 1280 0 0 1280 0 1280 -1280 0 -1280 0 0 -1280z m2031 593 c8 -8 9 -34 4 -78 -6 -56 -9 -65 -23 -60 -43 16 -98 15 -132 -2 -50 -26 -72 -72 -78 -159 l-5 -74 92 0 91 0 0 -70 0 -70 -90 0 -90 0 0 -345 0 -345 -90 0 -90 0 0 345 0 345 -55 0 -55 0 0 70 0 70 55 0 55 0 0 38 c0 63 20 153 45 202 54 105 141 152 273 147 45 -2 87 -8 93 -14z m-1291 -288 l0 -235 230 0 230 0 0 235 0 235 90 0 90 0 0 -575 0 -575 -90 0 -90 0 0 260 0 260 -230 0 -230 0 0 -260 0 -260 -90 0 -90 0 0 575 0 575 90 0 90 0 0 -235z"/></g></svg>';
+ add_menu_page( 'HTML Forms', 'HTML Forms', $capability, 'html-forms', array( $this, 'page_overview' ), 'data:image/svg+xml;base64,' . base64_encode( $svg_icon ), '99.88491' );
+ add_submenu_page( 'html-forms', __( 'Forms', 'html-forms' ), __( 'All Forms', 'html-forms' ), $capability, 'html-forms', array( $this, 'page_overview' ) );
+ add_submenu_page( 'html-forms', __( 'Add new form', 'html-forms' ), __( 'Add New', 'html-forms' ), $capability, 'html-forms-add-form', array( $this, 'page_new_form' ) );
+ add_submenu_page( 'html-forms', __( 'Settings', 'html-forms' ), __( 'Settings', 'html-forms' ), $capability, 'html-forms-settings', array( $this, 'page_settings' ) );
+
+ if( ! defined( 'HF_PREMIUM_VERSION' ) ) {
+ add_submenu_page( 'html-forms', 'Premium', '<span style="color: #ea6ea6;">Premium</span>', $capability, 'html-forms-premium', array( $this, 'page_premium' ) );
+ }
+ }
+
+ public function add_screen_options() {
+ // only run on the submissions overview page (not detail)
+ if( empty( $_GET['page'] ) || $_GET['page'] !== 'html-forms' || empty( $_GET['view'] ) || $_GET['view'] !== 'edit' || empty( $_GET['form_id'] ) || ! empty( $_GET['submission_id'] ) ) {
+ return;
+ }
+
+ // don't run if form does not have submissions enabled
+ $form = hf_get_form( $_GET['form_id'] );
+ if( ! $form->settings['save_submissions'] ) {
+ return;
+ }
+
+ // tell screen options to show columns option
+ $submissions = hf_get_form_submissions( $_GET['form_id'] );
+ $columns = $this->get_submission_columns( $submissions );
+ add_filter( 'manage_toplevel_page_html-forms_columns', function( $unused ) use( $columns ) {
+ return $columns;
+ });
+ add_screen_option( 'layout_columns' );
+ }
+
+ public function page_overview() {
+ if( ! empty( $_GET['view'] ) && $_GET['view'] === 'edit' ) {
+ $this->page_edit_form();
+ return;
+ }
+
+ $settings = hf_get_settings();
+
+ require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
+ $table = new Table( $settings );
+
+ require dirname( $this->plugin_file ) . '/views/page-overview.php';
+ }
+
+ public function page_new_form() {
+ require dirname( $this->plugin_file ) . '/views/page-add-form.php';
+ }
+
+ public function page_settings() {
+ $settings = hf_get_settings();
+ require dirname( $this->plugin_file ) . '/views/page-global-settings.php';
+ }
+
+ public function page_premium() {
+ require dirname( $this->plugin_file ) . '/views/page-premium.php';
+ }
+
+ public function page_edit_form() {
+ $active_tab = ! empty( $_GET['tab'] ) ? $_GET['tab'] : 'fields';
+ $form_id = (int) $_GET['form_id'];
+ $form = hf_get_form( $form_id );
+ $settings = hf_get_settings();
+ require dirname( $this->plugin_file ) . '/views/page-edit-form.php';
+ }
+
+ public function tab_fields( Form $form ) {
+ $form_preview_url = add_query_arg( array(
+ 'hf_preview_form' => $form->ID,
+ ), site_url( '/', 'admin' ) );
+ require dirname( $this->plugin_file ) . '/views/tab-fields.php';
+ }
+
+ public function tab_messages( Form $form ) {
+ require dirname( $this->plugin_file ) . '/views/tab-messages.php';
+ }
+
+
+ public function tab_settings( Form $form ) {
+ require dirname( $this->plugin_file ) . '/views/tab-settings.php';
+ }
+
+
+ public function tab_actions( Form $form ) {
+ require dirname( $this->plugin_file ) . '/views/tab-actions.php';
+ }
+
+ public function get_submission_columns( array $submissions ) {
+ $columns = array();
+ foreach( $submissions as $s ) {
+ if( ! is_array( $s->data ) ) {
+ continue;
+ }
+
+ foreach( $s->data as $field => $value ) {
+ if( ! isset( $columns[$field] ) ) {
+ $columns[$field] = esc_html( ucfirst( strtolower( str_replace( '_', ' ', $field ) ) ) );
+ }
+ }
+ }
+ return $columns;
+ }
+
+ public function tab_submissions_list( Form $form ) {
+ if( ! empty( $_GET['submission_id'] ) ) {
+ return;
+ }
+
+ $submissions = hf_get_form_submissions( $form->ID );
+ $columns = $this->get_submission_columns( $submissions );
+ $hidden_columns = get_hidden_columns( get_current_screen() );
+
+ require dirname( $this->plugin_file ) . '/views/tab-submissions-list.php';
+ }
+
+ public function tab_submissions_detail( Form $form ) {
+ if( empty( $_GET['submission_id'] ) ) {
+ return;
+ }
+
+ $submission = hf_get_form_submission( (int) $_GET['submission_id'] );
+ require dirname( $this->plugin_file ) . '/views/tab-submissions-detail.php';
+ }
+
+
+ public function process_create_form() {
+ // Fix for MultiSite stripping KSES for roles other than administrator
+ remove_all_filters( 'content_save_pre' );
+
+ $data = $_POST['form'];
+ $form_title = sanitize_text_field( $data['title'] );
+ $form_id = wp_insert_post(
+ array(
+ 'post_type' => 'html-form',
+ 'post_status' => 'publish',
+ 'post_title' => $form_title,
+ 'post_content' => $this->get_default_form_content(),
+ )
+ );
+
+ wp_safe_redirect( admin_url( 'admin.php?page=html-forms&view=edit&form_id=' . $form_id ));
+ exit;
+ }
+
+ public function process_save_form() {
+ $form_id = (int) $_POST['form_id'];
+ $form = hf_get_form( $form_id );
+ $data = $_POST['form'];
+
+ // Fix for MultiSite stripping KSES for roles other than administrator
+ remove_all_filters( 'content_save_pre' );
+
+ // strip <form> tag from markup
+ $data['markup'] = preg_replace( '/<\/?form(.|\s)*?>/i', '', $data['markup'] );
+
+ $form_id = wp_insert_post( array(
+ 'ID' => $form_id,
+ 'post_type' => 'html-form',
+ 'post_status' => 'publish',
+ 'post_title' => sanitize_text_field( $data['title'] ),
+ 'post_content' => $data['markup'],
+ 'post_name' => sanitize_title_with_dashes( $data['slug'] ),
+ ) );
+
+ if( ! empty( $data['settings'] ) ) {
+ update_post_meta( $form_id, '_hf_settings', $data['settings'] );
+ }
+
+ // save form messages in individual meta keys
+ foreach( $data['messages'] as $key => $message ) {
+ update_post_meta( $form_id, 'hf_message_' . $key, $message );
+ }
+
+ $redirect_url_args = array( 'form_id' => $form_id, 'saved' => 1 );
+ $redirect_url = add_query_arg( $redirect_url_args, admin_url ('admin.php?page=html-forms&view=edit' ) );
+ wp_safe_redirect( $redirect_url );
+ exit;
+ }
+
+ /**
+ * Get URL for a tab on the current page.
+ *
+ * @since 3.0
+ * @internal
+ * @param $tab
+ * @return string
+ */
+ public function get_tab_url( $tab ) {
+ return add_query_arg( array( 'tab' => $tab ), remove_query_arg( 'tab' ) );
+ }
+
+ /**
+ * @return array
+ */
+ public function get_available_form_actions() {
+ $actions = array();
+
+ /**
+ * Filters the available form actions
+ *
+ * @param array $actions
+ */
+ $actions = apply_filters( 'hf_available_form_actions', $actions );
+
+ return $actions;
+ }
+
+ public function process_bulk_delete_submissions() {
+ global $wpdb;
+
+ if( empty( $_POST['id'] ) ) {
+ return;
+ }
+
+ $table = $wpdb->prefix .'hf_submissions';
+ $ids = join( ',', array_map( 'esc_sql', $_POST['id'] ) );
+ $wpdb->query( sprintf( "DELETE FROM {$table} WHERE id IN( %s );", $ids ) );
+ }
+
+ private function get_default_form_content() {
+ $html = '';
+ $html .= sprintf( "<p>\n\t<label>%1\$s</label>\n\t<input type=\"text\" name=\"NAME\" placeholder=\"%1\$s\" required />\n</p>", __( 'Your name', 'html-forms' ) ) . PHP_EOL;
+ $html .= sprintf( "<p>\n\t<label>%1\$s</label>\n\t<input type=\"email\" name=\"EMAIL\" placeholder=\"%1\$s\" required />\n</p>", __( 'Your email', 'html-forms' ) ) . PHP_EOL;
+ $html .= sprintf( "<p>\n\t<label>%1\$s</label>\n\t<input type=\"text\" name=\"SUBJECT\" placeholder=\"%1\$s\" required />\n</p>", __( 'Subject', 'html-forms' ) ) . PHP_EOL;
+ $html .= sprintf( "<p>\n\t<label>%1\$s</label>\n\t<textarea name=\"MESSAGE\" placeholder=\"%1\$s\" required></textarea>\n</p>", __( 'Message', 'html-forms' ) ). PHP_EOL;
+ $html .= sprintf( "<p>\n\t<input type=\"submit\" value=\"%s\" />\n</p>", __( 'Send', 'html-forms' ) );
+ return $html;
+ }
+
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms\Admin;
+
+use HTML_Forms\Submission;
+
+class GDPR {
+ public function hook() {
+ add_filter( 'wp_privacy_personal_data_exporters', array( $this, 'register_exporter' ), 90 );
+ add_filter( 'wp_privacy_personal_data_erasers', array( $this, 'register_eraser' ), 90 );
+ }
+
+ public function register_exporter( $exporters ) {
+ $exporters['html-forms'] = array(
+ 'exporter_friendly_name' => 'HTML Forms',
+ 'callback' => array( $this, 'export' ),
+ );
+ return $exporters;
+ }
+
+ public function register_eraser( $erasers ) {
+ $erasers['html-forms'] = array(
+ 'eraser_friendly_name' => 'HTML Forms',
+ 'callback' => array( $this, 'erase' ),
+ );
+ return $erasers;
+ }
+
+ public function export( $email_address, $page = 1 ) {
+ $submissions = $this->find_submissions_for_email_address( $email_address );
+ $data_to_export = array();
+
+ foreach( $submissions as $s ) {
+ $data_to_export[] = array(
+ 'group_id' => 'html_forms_submissions',
+ 'group_label' => __( 'Form submissions', 'html-forms' ),
+ 'item_id' => sprintf( 'html-forms-submission-%d', $s->id ),
+ 'data' => $this->export_submission( $s ),
+ );
+ }
+
+ return array(
+ 'data' => $data_to_export,
+ 'done' => true,
+ );
+ }
+
+ public function export_submission( Submission $submission ) {
+ $data = array(
+ array(
+ 'name' => 'Submitted at',
+ 'value' => $submission->submitted_at,
+ )
+ );
+
+ if( ! empty( $submission->ip_address ) ) {
+ $data[] = array(
+ 'name' => 'IP address',
+ 'value' => $submission->ip_address,
+ );
+ }
+
+ if( ! empty( $submission->user_agent ) ) {
+ $data[] = array(
+ 'name' => 'User agent',
+ 'value' => $submission->user_agent,
+ );
+ }
+
+ foreach( $submission->data as $field => $value ) {
+ $data[] = array(
+ 'name' => $field,
+ 'value' => is_array( $value ) ? join( ', ', $value ) : $value,
+ );
+ }
+
+ return $data;
+ }
+
+ public function erase( $email_address, $page = 1 ) {
+ global $wpdb;
+ $table = $wpdb->prefix .'hf_submissions';
+
+ $items_removed = false;
+ $submissions = $this->find_submissions_for_email_address( $email_address );
+ foreach( $submissions as $submission ) {
+ $wpdb->delete( $table, array( 'id' => $submission->id ) );
+ $items_removed = true;
+ }
+
+ return array(
+ 'items_removed' => $items_removed,
+ 'items_retained' => false,
+ 'messages' => array(),
+ 'done' => true,
+ );
+ }
+
+ private function find_submissions_for_email_address( $email_address ) {
+ global $wpdb;
+ $table = $wpdb->prefix .'hf_submissions';
+ $like = '%"' . $email_address . '"%';
+ $results = $wpdb->get_results( $wpdb->prepare( "SELECT s.* FROM {$table} s WHERE s.data LIKE %s ORDER BY s.submitted_at DESC", $like ), OBJECT_K );
+
+ $submissions = array();
+ foreach( $results as $key => $object ) {
+ $submission = Submission::from_object( $object );
+ $submissions[$key] = $submission;
+ }
+
+ return $submissions;
+ }
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms\Admin;
+
+/**
+ * Class Migrations
+ *
+ * This class takes care of loading migration files from the specified migrations directory.
+ * Migration files should only use default WP functions and NOT use code which might not be there in the future.
+ *
+ * @ignore
+ */
+class Migrations {
+
+ /**
+ * @var float
+ */
+ protected $version_from = 0;
+
+ /**
+ * @var float
+ */
+ protected $version_to = 0;
+
+ /**
+ * @var string
+ */
+ protected $migrations_dir = '';
+
+ /**
+ * @param string $from
+ * @param string $to
+ * @param string $migrations_dir
+ */
+ public function __construct( $from, $to, $migrations_dir ) {
+ $this->version_from = $from;
+ $this->version_to = $to;
+ $this->migrations_dir = $migrations_dir;
+ }
+
+ /**
+ * Run the various upgrade routines, all the way up to the latest version
+ */
+ public function run() {
+ $migrations = $this->find_migrations();
+
+ // run in function for scope
+ array_map( array( $this, 'run_migration' ), $migrations );
+ }
+
+ /**
+ * @return array
+ */
+ public function find_migrations() {
+
+ $files = glob( rtrim( $this->migrations_dir, '/' ) . '/*.php' );
+ $migrations = array();
+
+ // return empty array when glob returns non-array value.
+ if( ! is_array( $files ) ) {
+ return $migrations;
+ }
+
+ foreach( $files as $file ) {
+ $migration = basename( $file );
+ $parts = explode( '-', $migration );
+ $version = $parts[0];
+
+ if( version_compare( $this->version_from, $version, '<' ) ) {
+ $migrations[] = $file;
+ }
+ }
+
+ return $migrations;
+ }
+
+ /**
+ * Include a migration file and runs it.
+ *
+ * @param string $file
+ */
+ protected function run_migration( $file ) {
+ include $file;
+ }
+
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms\Admin;
+use WP_List_Table, WP_Post;
+
+// Check if WP Core class exists so that we can keep testing rest of HTML Forms in isolation..
+if( class_exists( 'WP_List_Table' ) ) {
+
+ class Table extends WP_List_Table {
+
+ /**
+ * @var bool
+ */
+ public $is_trash = false;
+
+ /**
+ * @var array
+ */
+ private $settings = array();
+
+ /**
+ * Constructor
+ */
+ public function __construct( array $settings ) {
+ parent::__construct(
+ array(
+ 'singular' => 'form',
+ 'plural' => 'forms',
+ 'ajax' => false
+ )
+ );
+
+ $this->settings = $settings;
+
+ $columns = $this->get_columns();
+ $sortable = $this->get_sortable_columns();
+ $hidden = array();
+ $this->_column_headers = array( $columns, $hidden, $sortable );
+
+ $this->is_trash = isset( $_REQUEST['post_status'] ) && $_REQUEST['post_status'] === 'trash';
+ $this->process_bulk_action();
+ $this->prepare_items();
+ $this->set_pagination_args(
+ array(
+ 'per_page' => 50,
+ 'total_items' => count( $this->items )
+ )
+ );
+ }
+
+
+ public function prepare_items() {
+ $this->items = $this->get_items();
+ }
+ /**
+ * Get an associative array ( id => link ) with the list
+ * of views available on this table.
+ *
+ * @since 3.1.0
+ * @access protected
+ *
+ * @return array
+ */
+ public function get_views() {
+ $counts = wp_count_posts( 'html-form' );
+ $current = isset( $_GET['post_status'] ) ? $_GET['post_status'] : '';
+ $count_any = $counts->publish + $counts->draft + $counts->future + $counts->pending;
+
+ return array(
+ '' => sprintf( '<a href="%s" class="%s">%s</a> (%d)', remove_query_arg( 'post_status' ), $current == '' ? 'current' : '', __( 'All' ), $count_any ),
+ 'trash' => sprintf( '<a href="%s" class="%s">%s</a> (%d)', add_query_arg( array( 'post_status' => 'trash' ) ), $current == 'trash' ? 'current' : '', __( 'Trash' ), $counts->trash ),
+ );
+ }
+
+ /**
+ * @return array
+ */
+ public function get_bulk_actions() {
+
+ $actions = array();
+
+ if( $this->is_trash ) {
+ $actions['untrash'] = __( 'Restore' );
+ $actions['delete'] = __( 'Delete Permanently' );
+ return $actions;
+ }
+
+ $actions['trash'] = __( 'Move to Trash' );
+ $actions['duplicate'] = __( 'Duplicate' );
+ return $actions;
+ }
+
+ public function get_default_primary_column_name() {
+ return 'form_name';
+ }
+
+ /**
+ * @return array
+ */
+ public function get_table_classes() {
+ return array( 'widefat', 'fixed', 'striped', 'html-forms-table' );
+ }
+
+ /**
+ * @return array
+ */
+ public function get_columns() {
+ return array(
+ 'cb' => '<input type="checkbox" />',
+ 'form_name' => __( 'Form', 'html-forms' ),
+ 'shortcode' => __( 'Shortcode', 'html-forms' ),
+ );
+ }
+
+ /**
+ * @return array
+ */
+ public function get_sortable_columns() {
+ return array();
+ }
+
+ /**
+ * @return array
+ */
+ public function get_items() {
+ $args = array(
+ 'post_type' => 'html-form',
+ 'post_status' => array( 'publish', 'draft', 'pending', 'future' ),
+ 'numberposts' => -1,
+ );
+
+ if( ! empty( $_GET['s'] ) ) {
+ $args['s'] = sanitize_text_field( $_GET['s'] );
+ }
+
+ if( ! empty( $_GET['post_status' ] ) ) {
+ $args['post_status'] = sanitize_text_field( $_GET['post_status'] );
+ }
+
+
+ $items = get_posts( $args );
+
+ return $items;
+ }
+
+ /**
+ * @param $item
+ *
+ * @return string
+ */
+ public function column_cb( $item ) {
+ return sprintf( '<input type="checkbox" name="forms[]" value="%s" />', $item->ID );
+ }
+
+ /**
+ * @param WP_Post $post
+ *
+ * @return mixed
+ */
+ public function column_ID( WP_Post $post ) {
+ return $post->ID;
+ }
+
+ /**
+ * @param WP_Post $post
+ * @return string
+ */
+ public function column_form_name( WP_Post $post ) {
+ if( $this->is_trash ) {
+ return sprintf( '<strong>%s</strong>', esc_html( $post->post_title ) );
+ }
+
+ $form = hf_get_form( $post );
+
+ $edit_link = admin_url( 'admin.php?page=html-forms&view=edit&form_id=' . $post->ID );
+ $title = '<strong><a class="row-title" href="' . $edit_link . '">' . esc_html( $post->post_title ) . '</a></strong>';
+
+ $actions = array();
+ $tabs = array(
+ 'fields' => __( 'Fields', 'html-forms' ),
+ 'messages' => __( 'Messages', 'html-forms' ),
+ 'settings' => __( 'Settings', 'html-forms' ),
+ 'actions' => __( 'Actions', 'html-forms' ),
+ );
+
+ if( $form->settings['save_submissions'] ) {
+ $tabs['submissions'] = __( 'Submissions', 'html-forms' );
+ }
+
+ foreach( $tabs as $tab_slug => $tab_title ) {
+ $actions[$tab_slug] = '<a href="'. esc_attr( add_query_arg( array( 'tab' => $tab_slug ), $edit_link ) ) .'">'. $tab_title . '</a>';
+ }
+
+ return $title . $this->row_actions( $actions );
+ }
+
+ /**
+ * @param WP_Post $post
+ *
+ * @return string
+ */
+ public function column_shortcode( WP_Post $post ) {
+ if( $this->is_trash ) {
+ return '';
+ }
+
+ return sprintf( '<input style="width: 260px;" type="text" onfocus="this.select();" readonly="readonly" value="%s">', esc_attr( '[hf_form slug="' . $post->post_name . '"]' ) );
+ }
+
+ /**
+ * The text that is shown when there are no items to show
+ */
+ public function no_items() {
+ echo sprintf( __( 'No forms found. <a href="%s">Would you like to create one now</a>?', 'html-forms' ), admin_url( 'admin.php?page=html-forms-add-form') );
+ }
+
+ /**
+ *
+ */
+ public function process_bulk_action() {
+ $action = $this->current_action();
+ if( empty( $action ) ) {
+ return false;
+ }
+
+ $method = 'process_bulk_action_' . $action;
+ $forms = (array) $_REQUEST['forms'];
+ if( method_exists( $this, $method ) ) {
+ return call_user_func_array( array( $this, $method ), array( $forms ) );
+ }
+
+ return false;
+ }
+
+ public function process_bulk_action_duplicate( $forms ) {
+ foreach( $forms as $form_id ) {
+ $post = get_post( $form_id );
+ $post_meta = get_post_meta( $form_id );
+
+ $new_post_id = wp_insert_post(
+ array(
+ 'post_title' => $post->post_title,
+ 'post_content' => $post->post_content,
+ 'post_type' => 'html-form',
+ 'post_status' => 'publish'
+ )
+ );
+ foreach( $post_meta as $meta_key => $meta_value ) {
+ $meta_value = maybe_unserialize( $meta_value[0] );
+ update_post_meta( $new_post_id, $meta_key, $meta_value );
+ }
+ }
+ }
+
+ public function process_bulk_action_trash( $forms ) {
+ return array_map( 'wp_trash_post', $forms );
+ }
+
+ public function process_bulk_action_delete( $forms ) {
+ return array_map( 'wp_delete_post', $forms );
+ }
+
+ public function process_bulk_action_untrash( $forms ) {
+ return array_map( 'wp_untrash_post', $forms );
+ }
+
+ /**
+ * Generates content for a single row of the table
+ *
+ * @since 3.1.0
+ *
+ * @param object $item The current item
+ */
+ public function single_row( $item ) {
+ echo sprintf( '<tr id="hf-forms-item-%d">',$item->ID );
+ $this->single_row_columns( $item );
+ echo '</tr>';
+ }
+
+ }
+
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms;
+
+class Form {
+
+ public $ID = 0;
+ public $title = '';
+ public $slug = '';
+ public $markup = '';
+ public $messages = array();
+ public $settings = array();
+
+ /**
+ * Form constructor.
+ *
+ * @param $ID
+ */
+ public function __construct($ID)
+ {
+ $this->ID = $ID;
+ }
+
+ /**
+ * Magic method for accessing unexisting properties, eg lowercase "id".
+ *
+ * @return mixed
+ */
+ public function __get( $property ) {
+ if( $property === 'id' ) {
+ return $this->ID;
+ }
+ }
+
+ public function get_html()
+ {
+ $form = $this;
+
+ /**
+ * Filters the CSS classes to be added to this form's class attribute.
+ *
+ * @param array $form_classes
+ * @param Form $form
+ */
+ $form_classes_attr = apply_filters( 'hf_form_element_class_attr', '', $form );
+
+ /**
+ * Filters the action attribute for this form.
+ *
+ * @param string $form_action
+ * @param Form $form
+ */
+ $form_action = apply_filters( 'hf_form_element_action_attr', null, $form );
+ $form_action_attr = is_null( $form_action ) ? '' : sprintf('action="%s"', $form_action );
+
+ $data_attributes = $this->get_data_attributes();
+
+ $html = '';
+ $html .= sprintf( '<!-- HTML Forms v%s - %s -->', HTML_FORMS_VERSION, 'https://wordpress.org/plugins/html-forms/' );
+ $html .= sprintf( '<form method="post" %s class="hf-form hf-form-%d %s" %s>', $form_action_attr, $this->ID, esc_attr( $form_classes_attr ), $data_attributes );
+
+ $html .= sprintf( '<input type="hidden" name="_hf_form_id" value="%d" />', $this->ID );
+ $html .= sprintf( '<div style="display: none;"><input type="text" name="_hf_h%d" value="" /></div>', $this->ID );
+ $html .= '<div class="hf-fields-wrap">';
+ $html .= $this->get_markup();
+ $html .= '<noscript>' . __( "Please enable JavaScript for this form to work.", 'html-forms' ) . '</noscript>';
+ $html .= '</div>'; // end field wrap
+ $html .= '</form>';
+ $html .= '<!-- / HTML Forms -->';
+
+ // ensure JS script is enqueued whenever this function is called
+ if( function_exists( 'wp_enqueue_script' ) ) {
+ wp_enqueue_script('html-forms');
+ }
+
+ /**
+ * Filters the resulting HTML for this form.
+ *
+ * @param string $html
+ * @param Form $form
+ */
+ $html = apply_filters( 'hf_form_html', $html, $form );
+ return $html;
+ }
+
+ public function get_data_attributes() {
+ $form = $this;
+ $attributes = array(
+ 'id' => $this->ID,
+ 'title' => $this->title,
+ 'slug' => $this->slug,
+ );
+
+ // add messages
+ foreach( $this->messages as $key => $message ) {
+ $key = str_replace( '_', '-', $key );
+ $attributes["message-".$key] = $message;
+ }
+
+ /**
+ * Filters the data attributes to be added to the form attribute.
+ *
+ * @param array $attributes
+ * @param Form $form
+ */
+ $attributes = apply_filters( 'hf_form_element_data_attributes', $attributes, $form );
+
+ // create string of attribute key-value pairs
+ $string = '';
+ foreach( $attributes as $attr => $value ) {
+ // prefix all attributes with data-
+ if( substr( $attr, 0, 5 ) !== 'data-' ) {
+ $attr = "data-" . $attr;
+ }
+
+ $string .= sprintf( '%s="%s" ', $attr, esc_attr( $value ) );
+ }
+ $string = rtrim( $string, ' ' );
+
+ return $string;
+ }
+
+
+ /**
+ * @return string
+ */
+ public function __toString()
+ {
+ return $this->get_html();
+ }
+
+ /**
+ * @return string
+ */
+ public function get_markup() {
+ return apply_filters( 'hf_form_markup', $this->markup );
+ }
+
+ /**
+ * @return array
+ */
+ public function get_required_fields()
+ {
+ if( empty( $this->settings['required_fields'] ) ) {
+ return array();
+ }
+
+ $required_fields = explode( ',', $this->settings['required_fields'] );
+ return $required_fields;
+ }
+
+ /**
+ * @return array
+ */
+ public function get_email_fields()
+ {
+ if( empty( $this->settings['email_fields'] ) ) {
+ return array();
+ }
+
+ $email_fields = explode( ',', $this->settings['email_fields'] );
+ return $email_fields;
+ }
+
+ /**
+ * @param string $code
+ * @return string
+ */
+ public function get_message( $code )
+ {
+ $form = $this;
+ $message = isset( $this->messages[ $code ] ) ? $this->messages[ $code ] : '';
+
+ /**
+ * @param string $message
+ * @param Form $form
+ */
+ $message = apply_filters( 'hf_form_message_' . $code, $message, $form );
+ return $message;
+ }
+
+ /**
+ * @return int The number of named fields in the form
+ */
+ public function get_field_count() {
+ $count = substr_count( strtolower( $this->get_html() ), ' name=' );
+ $count++; // Add one for 'was-required'
+ return $count;
+ }
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms;
+
+class Forms
+{
+
+ /**
+ * @var string
+ */
+ private $plugin_file;
+
+ /**
+ * @var array
+ */
+ private $settings;
+
+ /**
+ * Forms constructor.
+ *
+ * @param string $plugin_file
+ * @param array $settings
+ */
+ public function __construct($plugin_file, array $settings )
+ {
+ $this->plugin_file = $plugin_file;
+ $this->settings = $settings;
+ }
+
+ public function hook()
+ {
+ add_action('init', array($this, 'register'));
+ add_action('init', array($this, 'listen_for_submit') );
+ add_action('parse_request', array($this, 'listen_for_preview'));
+ add_action('wp_enqueue_scripts', array($this, 'assets'));
+ add_filter('hf_form_markup', 'hf_template');
+ }
+
+ public function register()
+ {
+ // register post type
+ register_post_type('html-form', array(
+ 'labels' => array(
+ 'name' => 'HTML Forms',
+ 'singular_name' => 'HTML Form',
+ ),
+ 'public' => false,
+ 'capability_type' => 'form',
+ )
+ );
+
+ add_shortcode('hf_form', array($this, 'shortcode'));
+
+ // enable shortcodes in text widgets
+ add_filter( 'widget_text', 'shortcode_unautop' );
+ add_filter( 'widget_text', 'do_shortcode', 11 );
+ }
+
+ public function assets()
+ {
+ $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
+ $assets_url = plugins_url( 'assets/', $this->plugin_file );
+
+ wp_register_script('html-forms', $assets_url . "js/public{$suffix}.js", array(), HTML_FORMS_VERSION, true);
+ wp_localize_script('html-forms', 'hf_js_vars', array(
+ 'ajax_url' => admin_url('admin-ajax.php'),
+ ));
+
+ if( $this->settings['load_stylesheet'] ) {
+ wp_enqueue_style( 'html-forms', $assets_url . "css/forms{$suffix}.css", array(), HTML_FORMS_VERSION );
+ }
+ }
+
+ /**
+ * @param Form $form
+ * @param array $data
+ * @return string
+ */
+ public function validate_form(Form $form, array $data)
+ {
+ // validate honeypot field
+ $honeypot_key = sprintf( '_hf_h%d', $form->ID );
+ if( ! isset( $data[$honeypot_key] ) || $data[$honeypot_key] !== "" ) {
+ return 'spam';
+ }
+
+ // validate size of POST array
+ if( count($data) > $form->get_field_count() && apply_filters( 'hf_validate_form_request_size', true ) ) {
+ return 'spam';
+ }
+
+ $was_required = (array) hf_array_get( $data, '_was_required', array() );
+ $required_fields = $form->get_required_fields();
+ foreach ($required_fields as $field_name) {
+ $value = hf_array_get( $data, $field_name );
+ if ( empty( $value ) && ! in_array( $field_name, $was_required ) ) {
+ return 'required_field_missing';
+ }
+ }
+
+ $email_fields = $form->get_email_fields();
+ foreach ($email_fields as $field_name) {
+ $value = hf_array_get( $data, $field_name );
+ if ( ! empty( $value ) && ! is_email( $value ) ) {
+ return 'invalid_email';
+ }
+ }
+
+ $error_code = '';
+
+ /**
+ * This filter allows you to perform your own form validation. The dynamic portion of the hook refers to the form slug.
+ *
+ * Return a non-empty string if you want to raise an error.
+ * Error codes with a specific error message are: "required_field_missing", "invalid_email", and "error"
+ *
+ * @param string $error_code
+ * @param Form $form
+ * @param array $data
+ */
+ $error_code = apply_filters( 'hf_validate_form_' . $form->slug, $error_code, $form, $data );
+
+ /**
+ * This filter allows you to perform your own form validation.
+ *
+ * Return a non-empty string if you want to raise an error.
+ * Error codes with a specific error message are: "required_field_missing", "invalid_email", and "error"
+ *
+ * @param string $error_code
+ * @param Form $form
+ * @param array $data
+ */
+ $error_code = apply_filters( 'hf_validate_form', $error_code, $form, $data );
+ if( ! empty( $error_code ) ) {
+ return $error_code;
+ }
+
+ // all good: no errors!
+ return '';
+ }
+
+ /**
+ * Sanitize array with values before saving. Can be called recursively.
+ *
+ * @param mixed $value
+ */
+ public function sanitize( $value )
+ {
+ if (is_string($value)) {
+ // strip slashes
+ $value = stripslashes( $value );
+
+ // strip all HTML tags & whitespace
+ $value = trim(strip_tags($value));
+
+ // convert & back to &
+ $value = html_entity_decode($value, ENT_NOQUOTES);
+ } elseif ( is_array($value) || is_object($value) ) {
+ $new_value = array();
+ $vars = is_array( $value ) ? $value : get_object_vars( $value );
+
+ foreach($vars as $key => $sub_value) {
+ // skip empty values
+ if(empty($sub_value)) {
+ continue;
+ }
+
+ // sanitize key
+ $key = trim(strip_tags($key));
+
+ // sanitize sub value
+ $new_value[$key] = $this->sanitize($sub_value);
+ }
+ $value = is_object( $value ) ? (object) $new_value : $new_value;
+ }
+
+ return $value;
+ }
+
+ /**
+ * @return array
+ */
+ public function get_request_data() {
+ $data = $_POST;
+
+ if( ! empty( $_FILES ) ) {
+ foreach( $_FILES as $field_name => $file ) {
+ // only add non-empty files so that required field validation works as expected
+ // upload could still have errored at this point
+ if( $file['error'] !== UPLOAD_ERR_NO_FILE ) {
+ $data[$field_name] = $file;
+ }
+ }
+ }
+
+ return $data;
+ }
+
+ public function listen_for_submit()
+ {
+
+ // only respond to AJAX requests with _hf_form_id set.
+ if (empty($_POST['_hf_form_id'])
+ || empty( $_SERVER['HTTP_X_REQUESTED_WITH'] )
+ || strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) !== strtolower( 'XMLHttpRequest' ) ) {
+ return;
+ }
+
+ $data = $this->get_request_data();
+ $form_id = (int) $data['_hf_form_id'];
+ $form = hf_get_form($form_id);
+ $error_code = $this->validate_form($form, $data);
+
+ if (empty( $error_code ) ) {
+
+ /**
+ * Filters the field names that should be ignored on the Submission object.
+ * Fields starting with an underscore (_) are ignored by default.
+ *
+ * @param array $names
+ */
+ $ignored_field_names = apply_filters( 'hf_ignored_field_names', array() );
+
+ // filter out ignored field names
+ foreach( $data as $key => $value ) {
+ if( $key[0] === '_' || in_array( $key, $ignored_field_names ) ) {
+ unset( $data[$key] );
+ }
+ }
+
+ // sanitize data: strip tags etc.
+ $data = $this->sanitize( $data );
+
+ // save form submission
+ $submission = new Submission();
+ $submission->form_id = $form_id;
+ $submission->data = $data;
+ $submission->ip_address = ! empty( $_SERVER['REMOTE_ADDR'] ) ? sanitize_text_field( $_SERVER['REMOTE_ADDR'] ) : '';
+ $submission->user_agent = ! empty( $_SERVER['HTTP_USER_AGENT'] ) ? sanitize_text_field( $_SERVER['HTTP_USER_AGENT'] ) : '';
+ $submission->referer_url = ! empty( $_SERVER['HTTP_REFERER'] ) ? sanitize_text_field( $_SERVER['HTTP_REFERER'] ) : '';
+ $submission->submitted_at = gmdate( 'Y-m-d H:i:s' );
+
+ // save submission object so that other form processor have an insert ID to work with (eg file upload)
+ if( $form->settings['save_submissions'] ) {
+ $submission->save();
+ }
+
+ /**
+ * General purpose hook that runs before all form actions, so we can still modify the submission object that is passed to actions.
+ */
+ do_action( 'hf_process_form', $form, $submission );
+
+ // re-save submission object for convenience in form processors hooked into hf_process_form
+ if( $form->settings['save_submissions'] ) {
+ $submission->save();
+ }
+
+ // process form actions
+ if ( isset( $form->settings['actions'] ) ) {
+ foreach( $form->settings['actions'] as $action_settings ) {
+ /**
+ * Processes the specified form action and passes related data.
+ *
+ * @param array $action_settings
+ * @param Submission $submission
+ * @param Form $form
+ */
+ do_action('hf_process_form_action_' . $action_settings['type'], $action_settings, $submission, $form );
+ }
+ }
+
+ /**
+ * General purpose hook after all form actions have been processed for this specific form. The dynamic portion of the hook refers to the form slug.
+ *
+ * @param Submission $submission
+ * @param Form $form
+ */
+ do_action( "hf_form_{$form->slug}_success", $submission, $form );
+
+ /**
+ * General purpose hook after all form actions have been processed.
+ *
+ * @param Submission $submission
+ * @param Form $form
+ */
+ do_action( 'hf_form_success', $submission, $form );
+ } else {
+ /**
+ * General purpose hook for when a form error occurred
+ *
+ * @param string $error_code
+ * @param Form $form
+ * @param array $data
+ */
+ do_action( 'hf_form_error', $error_code, $form, $data );
+ }
+
+ // Delay response until "wp_loaded" hook to give other plugins a chance to process stuff.
+ add_action( 'wp_loaded', function() use($error_code, $form) {
+ $response = $this->get_response_for_error_code( $error_code, $form );
+
+ // clear output, some plugin or hooked code might have thrown errors by now.
+ if( ob_get_level() > 0 ) {
+ ob_end_clean();
+ }
+
+ send_origin_headers();
+ send_nosniff_header();
+ nocache_headers();
+
+ wp_send_json($response, 200);
+ exit;
+ });
+ }
+
+ public function listen_for_preview() {
+ if( empty( $_GET['hf_preview_form'] ) || ! current_user_can( 'edit_forms' ) ) {
+ return;
+ }
+
+ try {
+ $form = hf_get_form( $_GET['hf_preview_form'] );
+ } catch( \Exception $e ) {
+ return;
+ }
+
+ show_admin_bar(false);
+ add_filter( 'pre_handle_404', '__return_true' );
+ remove_all_actions( 'template_redirect' );
+ add_action( 'template_redirect', function() use($form) {
+ // clear output, some plugin or hooked code might have thrown errors by now.
+ if( ob_get_level() > 0 ) {
+ ob_end_clean();
+ }
+
+ status_header(200);
+ require dirname( $this->plugin_file ) . '/views/form-preview.php';
+ exit;
+ });
+ }
+
+ private function get_response_for_error_code( $error_code, Form $form )
+ {
+ // return success response for empty error code string or spam (to trick bots)
+ if( $error_code === "" || $error_code === "spam" ) {
+ $response = array(
+ 'message' => array(
+ 'type' => 'success',
+ 'text' => $form->get_message( 'success' ),
+ ),
+ 'hide_form' => (bool)$form->settings['hide_after_success'],
+ );
+
+ if (!empty($form->settings['redirect_url'])) {
+ $response['redirect_url'] = $form->settings['redirect_url'];
+ }
+
+ return $response;
+ }
+
+ // get error message
+ $message = $form->get_message( $error_code );
+ if( empty( $message ) ) {
+ $message = $form->get_message( 'error' );
+ }
+
+ // return error response
+ return $response = array(
+ 'message' => array(
+ 'type' => 'warning',
+ 'text' => $message,
+ ),
+ 'error' => $error_code,
+ );
+ }
+
+ public function shortcode($attributes = array(), $content = '')
+ {
+ $slug_or_id = empty( $attributes['id'] ) ? $attributes['slug'] : $attributes['id'];
+
+ try {
+ $form = hf_get_form( $slug_or_id );
+ } catch( \Exception $e ) {
+ if ( ! current_user_can( 'manage_options' ) ) {
+ return $content;
+ }
+
+ return sprintf( '<p><strong>%s</strong> %s</p>', __( 'Error:', 'html-forms' ), sprintf( __( 'No form found with slug %s', 'html-forms' ), $attributes['slug'] ) );
+ }
+
+ return $form . $content;
+ }
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms;
+
+class Submission {
+ public $id;
+ public $form_id;
+ public $data = array();
+ public $ip_address = '';
+ public $user_agent = '';
+ public $referer_url = '';
+ public $submitted_at;
+
+ public function save() {
+ global $wpdb;
+ $table = $wpdb->prefix .'hf_submissions';
+
+ $data = array(
+ 'data' => json_encode( $this->data ),
+ 'form_id' => $this->form_id,
+ );
+
+ foreach( array( 'ip_address', 'user_agent', 'submitted_at', 'referer_url' ) as $prop ) {
+ $data[ $prop ] = $this->$prop;
+ }
+
+ if( ! empty( $this->id ) ) {
+ $wpdb->update( $table, $data, array( 'id' => $this->id ) );
+ return;
+ }
+
+ // insert new row
+ $num_rows = $wpdb->insert( $table, $data );
+ if( $num_rows > 0 ) {
+ $this->id = $wpdb->insert_id;
+ }
+ }
+
+ /**
+ * @param $object
+ * @return Submission
+ */
+ public static function from_object( $object ) {
+ $data = empty( $object->data ) ? array() : (array) json_decode( $object->data, true );
+
+ $submission = new Submission();
+ $submission->id = (int) $object->id;
+ $submission->form_id = (int) $object->form_id;
+ $submission->data = $data;
+ $submission->ip_address = (string) $object->ip_address;
+ $submission->user_agent = (string) $object->user_agent;
+ $submission->referer_url = (string) $object->referer_url;
+ $submission->submitted_at = $object->submitted_at;
+ return $submission;
+ }
+
+}
--- /dev/null
+<?php
+
+namespace HTML_Forms;
+
+use WP_Post;
+
+class TagReplacers {
+
+ /**
+ * @param string $prop
+ * @return mixed
+ */
+ public function user( $prop ) {
+ if( ! is_user_logged_in() ) {
+ return '';
+ }
+
+ $user = wp_get_current_user();
+ return isset( $user->{$prop} ) ? $user->{$prop} : '';
+ }
+
+ /**
+ * @param string $prop
+ * @return mixed
+ */
+ public function post( $prop ) {
+ global $post;
+
+ if( ! $post instanceof WP_Post || ! isset( $post->{$prop} ) ) {
+ return '';
+ }
+
+ return $post->{$prop};
+ }
+
+ /**
+ * @param string $key
+ * @return mixed
+ */
+ public function url_params( $key ) {
+ if( ! isset( $_GET[ $key] ) ) {
+ return '';
+ }
+
+ return esc_attr( strip_tags( $_GET[$key] ) );
+ }
+}
--- /dev/null
+<?php
+
+use HTML_Forms\Form;
+use HTML_Forms\Submission;
+
+/**
+ * @param $form_id_or_slug int|string|WP_Post
+ * @return Form
+ * @throws Exception
+ */
+function hf_get_form( $form_id_or_slug ) {
+
+ if( is_numeric( $form_id_or_slug ) || $form_id_or_slug instanceof WP_Post ) {
+ $post = get_post( $form_id_or_slug );
+
+ if( ! $post || $post->post_type !== 'html-form' ) {
+ throw new Exception( "Invalid form ID" );
+ }
+ } else {
+ $posts = get_posts(
+ array(
+ 'post_type' => 'html-form',
+ 'name' => $form_id_or_slug,
+ 'post_status' => 'publish',
+ 'numberposts' => 1,
+ )
+ );
+
+ if( empty( $posts ) ) {
+ throw new Exception( 'Invalid form slug' );
+ }
+ $post = $posts[0];
+ }
+
+ // get all post meta in a single call for performance
+ $post_meta = get_post_meta( $post->ID );
+
+ // grab & merge form settings
+ $default_settings = array(
+ 'save_submissions' => 1,
+ 'hide_after_success' => 0,
+ 'redirect_url' => '',
+ 'required_fields' =>'',
+ 'email_fields' => '',
+ );
+ $default_settings = apply_filters( 'hf_form_default_settings', $default_settings );
+ $settings = array();
+ if( ! empty( $post_meta['_hf_settings'][0] ) ) {
+ $settings = (array) maybe_unserialize( $post_meta['_hf_settings'][0] );
+ }
+ $settings = array_merge( $default_settings, $settings );
+
+ // grab & merge form messages
+ $default_messages = array(
+ 'success' => __('Thank you! We will be in touch soon.', 'html-forms'),
+ 'invalid_email' => __( 'Sorry, that email address looks invalid.', 'html-forms' ),
+ 'required_field_missing' => __( "Please fill in the required fields.", "html-forms" ),
+ 'error' => __( 'Oops. An error occurred.', 'html-forms' ),
+ );
+ $messages = array();
+ foreach( $post_meta as $meta_key => $meta_values ) {
+ if( strpos( $meta_key, 'hf_message_' ) === 0 ) {
+ $message_key = substr( $meta_key, strlen( 'hf_message_' ) );
+ $messages[$message_key] = (string) $meta_values[0];
+ }
+ }
+ $messages = array_merge( $default_messages, $messages );
+
+ // finally, create form instance
+ $form = new Form( $post->ID );
+ $form->title = $post->post_title;
+ $form->slug = $post->post_name;
+ $form->markup = $post->post_content;
+ $form->settings = $settings;
+ $form->messages = $messages;
+ return $form;
+}
+
+/**
+ * @param $form_id
+ * @param array $args
+ * @return Submission[]
+ */
+function hf_get_form_submissions( $form_id, array $args = array() ) {
+ $default_args = array(
+ 'offset' => 0,
+ 'limit' => 1000,
+ );
+ $args = array_merge( $default_args, $args );
+
+ global $wpdb;
+ $table = $wpdb->prefix .'hf_submissions';
+ $results = $wpdb->get_results( $wpdb->prepare( "SELECT s.* FROM {$table} s WHERE s.form_id = %d ORDER BY s.submitted_at DESC LIMIT %d, %d;", $form_id, $args['offset'], $args['limit'] ), OBJECT_K );
+ $submissions = array();
+ foreach( $results as $key => $object ) {
+ $submission = Submission::from_object( $object );
+ $submissions[$key] = $submission;
+ }
+ return $submissions;
+}
+
+/**
+ * @param int $submission_id
+ * @return Submission
+ */
+function hf_get_form_submission( $submission_id ) {
+ global $wpdb;
+ $table = $wpdb->prefix .'hf_submissions';
+ $object = $wpdb->get_row( $wpdb->prepare( "SELECT s.* FROM {$table} s WHERE s.id = %d;", $submission_id ), OBJECT );
+ $submission = Submission::from_object( $object );
+ return $submission;
+}
+/**
+ * @return array
+ */
+function hf_get_settings() {
+ $default_settings = array(
+ 'load_stylesheet' => 0,
+ );
+
+ $settings = get_option( 'hf_settings', array() );
+
+ // merge with default settings
+ $settings = array_merge( $default_settings, $settings );
+
+ /**
+ * Filters the global HTML Forms hf_settings
+ *
+ * @param array $settings
+ */
+ $settings = apply_filters( 'hf_settings', $settings );
+
+ return $settings;
+}
+
+/**
+* Get element from array, allows for dot notation eg: "foo.bar"
+*
+* @param array $array
+* @param string $key
+* @param mixed $default
+* @return mixed
+*/
+function hf_array_get( $array, $key, $default = null ) {
+ if ( is_null( $key ) ) {
+ return $array;
+ }
+
+ if ( isset( $array[$key] ) ) {
+ return $array[$key];
+ }
+
+ foreach (explode( '.', $key ) as $segment) {
+ if ( ! is_array( $array ) || ! array_key_exists( $segment, $array ) ) {
+ return $default;
+ }
+
+ $array = $array[$segment];
+ }
+
+ return $array;
+}
+
+/**
+ * Processes template tags like {{user.user_email}}
+ *
+ * @param string $template
+ *
+ * @return string
+ */
+function hf_template( $template ) {
+ $replacers = new HTML_Forms\TagReplacers();
+ $tags = array(
+ 'user' => array( $replacers, 'user' ),
+ 'post' => array( $replacers, 'post'),
+ 'url_params' => array( $replacers, 'url_params' ),
+ );
+
+ /**
+ * Filters the available tags in HTML Forms templates, like {{user.user_email}}.
+ *
+ * Can be used to add simple scalar replacements or more advanced replacement functions that accept a parameter.
+ *
+ * @param array $tags
+ */
+ $tags = apply_filters( 'hf_template_tags', $tags );
+
+ $template = preg_replace_callback( '/\{\{ *(\w+)(?:\.([\w\.]+))? *(?:\|\| *(\w+))? *\}\}/', function( $matches ) use ( $tags ) {
+ $tag = $matches[1];
+ $param = ! isset( $matches[2] ) ? "" : $matches[2];
+ $default = ! isset( $matches[3] ) ? "" : $matches[3];
+ $value = "";
+
+ // do not change anything if we have no replacer with that key, could be custom user logic or another plugin.
+ if( ! isset( $tags[ $tag] ) ) {
+ return $matches[0];
+ }
+
+ $replacement = $tags[$tag];
+ $value = is_callable( $replacement ) ? call_user_func_array( $replacement, array( $param ) ) : $replacement;
+ return ! empty( $value ) ? $value : $default;
+ }, $template );
+
+ return $template;
+}
+
+/**
+ * @param string $string
+ * @param array $data
+ *
+ * @return string
+ */
+function hf_replace_data_variables( $string, $data = array() ) {
+ $string = preg_replace_callback( '/\[([a-zA-Z0-9\-\._]+)\]/', function( $matches ) use ( $data ) {
+ $key = $matches[1];
+ $replacement = hf_array_get( $data, $key, '' );
+ $replacement = hf_field_value( $replacement );
+ return $replacement;
+ }, $string );
+ return $string;
+}
+
+/**
+* Returns an escaped and formatted field value. Detects file-, array- and date-types.
+*
+* Caveat: if value is a file, an HTML string is returned (which means email action should use "Content-Type: html" when it includes a file field).
+*
+* @param string $value
+* @param int $limit
+* @return string
+* @since 1.3.1
+*/
+function hf_field_value( $value, $limit = 0 ) {
+ if( $value === '' ) {
+ return $value;
+ }
+
+ if( hf_is_file( $value ) ) {
+ $file_url = isset( $value['url'] ) ? $value['url'] : '';
+ if( isset( $value['attachment_id'] ) ) {
+ $file_url = admin_url( sprintf( 'post.php?action=edit&post=%d', $value['attachment_id'] ) );
+ }
+ $short_name = substr( $value['name'], 0, 20 );
+ $suffix = strlen( $value['name'] ) > 20 ? '...' : '';
+ return sprintf( '<a href="%s">%s%s</a> (%s)', esc_attr( $file_url ), esc_html( $short_name ), esc_html( $suffix ), hf_human_filesize( $value['size'] ) );
+ }
+
+ if( hf_is_date( $value ) ) {
+ $date_format = get_option( 'date_format' );
+ return date( $date_format, strtotime( $value ) );
+ }
+
+ // join array-values with comma
+ if( is_array( $value ) ) {
+ $value = join( ', ', $value );
+ }
+
+ // limit string to certain length
+ $value = esc_html( $value );
+ if( $limit > 0 ) {
+ return sprintf( '%s%s', substr( $value, 0, $limit ), strlen( $value ) > $limit ? '...' : '' );
+ }
+
+ return $value;
+}
+
+/**
+* Returns true if value is a "file"
+* @return bool
+*/
+function hf_is_file( $value ) {
+ return is_array( $value )
+ && isset( $value['name'] )
+ && isset( $value['size'] )
+ && isset( $value['type'] );
+}
+
+/**
+* Returns true if value looks like a date-string submitted from a <input type="date">
+* @return bool
+* @since 1.3.1
+*/
+function hf_is_date( $value ) {
+ return is_string( $value )
+ && strlen( $value ) === 10
+ && preg_match( '/\d{2,4}[-\/]\d{2}[-\/]\d{2,4}/', $value ) > 0
+ && ( $timestamp = strtotime($value) )
+ && $timestamp != false;
+}
+
+/**
+* @return string
+*/
+function hf_human_filesize($size, $precision = 2) {
+ for( $i = 0; ($size / 1024) > 0.9; $i++, $size /= 1024 ) {
+ // nothing, loop logic contains everything
+ }
+ $steps = array( 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB' );
+ return round($size, $precision) . $steps[$i];
+}
--- /dev/null
+<?php
+
+// autoload.php @generated by Composer
+
+require_once __DIR__ . '/composer' . '/autoload_real.php';
+
+return ComposerAutoloaderInit6624e64b43d8b10f84ff63c345cfa51d::getLoader();
--- /dev/null
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see http://www.php-fig.org/psr/psr-0/
+ * @see http://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ // PSR-4
+ private $prefixLengthsPsr4 = array();
+ private $prefixDirsPsr4 = array();
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ private $prefixesPsr0 = array();
+ private $fallbackDirsPsr0 = array();
+
+ private $useIncludePath = false;
+ private $classMap = array();
+
+ private $classMapAuthoritative = false;
+
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
+ }
+
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array $classMap Class to filename map
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ (array) $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ (array) $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ (array) $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ (array) $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ (array) $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param array|string $paths The PSR-0 base directories
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return bool|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ includeFile($file);
+
+ return true;
+ }
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
+ if ('\\' == $class[0]) {
+ $class = substr($class, 1);
+ }
+
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative) {
+ return false;
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if ($file === null && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if ($file === null) {
+ // Remember that this class does not exist.
+ return $this->classMap[$class] = false;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+ }
+}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
--- /dev/null
+
+Copyright (c) 2016 Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
--- /dev/null
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ 'HTML_Forms\\Actions\\Action' => $baseDir . '/src/Actions/Action.php',
+ 'HTML_Forms\\Actions\\Email' => $baseDir . '/src/Actions/Email.php',
+ 'HTML_Forms\\Actions\\MailChimp' => $baseDir . '/src/Actions/MailChimp.php',
+ 'HTML_Forms\\Admin\\Admin' => $baseDir . '/src/Admin/Admin.php',
+ 'HTML_Forms\\Admin\\GDPR' => $baseDir . '/src/Admin/GDPR.php',
+ 'HTML_Forms\\Admin\\Migrations' => $baseDir . '/src/Admin/Migrations.php',
+ 'HTML_Forms\\Admin\\Table' => $baseDir . '/src/Admin/Table.php',
+ 'HTML_Forms\\Form' => $baseDir . '/src/Form.php',
+ 'HTML_Forms\\Forms' => $baseDir . '/src/Forms.php',
+ 'HTML_Forms\\Submission' => $baseDir . '/src/Submission.php',
+ 'HTML_Forms\\TagReplacers' => $baseDir . '/src/TagReplacers.php',
+);
--- /dev/null
+<?php
+
+// autoload_files.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+ '1dbeeea179df487efaa350dfa4fe1bc3' => $baseDir . '/src/functions.php',
+);
--- /dev/null
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
--- /dev/null
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(dirname(__FILE__));
+$baseDir = dirname($vendorDir);
+
+return array(
+);
--- /dev/null
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInit6624e64b43d8b10f84ff63c345cfa51d
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInit6624e64b43d8b10f84ff63c345cfa51d', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
+ spl_autoload_unregister(array('ComposerAutoloaderInit6624e64b43d8b10f84ff63c345cfa51d', 'loadClassLoader'));
+
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
+
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
+
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
+ }
+
+ $loader->register(true);
+
+ $includeFiles = require __DIR__ . '/autoload_files.php';
+ foreach ($includeFiles as $fileIdentifier => $file) {
+ composerRequire6624e64b43d8b10f84ff63c345cfa51d($fileIdentifier, $file);
+ }
+
+ return $loader;
+ }
+}
+
+function composerRequire6624e64b43d8b10f84ff63c345cfa51d($fileIdentifier, $file)
+{
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+ require $file;
+
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+ }
+}
--- /dev/null
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInit6624e64b43d8b10f84ff63c345cfa51d
+{
+ public static $files = array (
+ '1dbeeea179df487efaa350dfa4fe1bc3' => __DIR__ . '/../..' . '/src/functions.php',
+ );
+
+ public static $classMap = array (
+ 'HTML_Forms\\Actions\\Action' => __DIR__ . '/../..' . '/src/Actions/Action.php',
+ 'HTML_Forms\\Actions\\Email' => __DIR__ . '/../..' . '/src/Actions/Email.php',
+ 'HTML_Forms\\Actions\\MailChimp' => __DIR__ . '/../..' . '/src/Actions/MailChimp.php',
+ 'HTML_Forms\\Admin\\Admin' => __DIR__ . '/../..' . '/src/Admin/Admin.php',
+ 'HTML_Forms\\Admin\\GDPR' => __DIR__ . '/../..' . '/src/Admin/GDPR.php',
+ 'HTML_Forms\\Admin\\Migrations' => __DIR__ . '/../..' . '/src/Admin/Migrations.php',
+ 'HTML_Forms\\Admin\\Table' => __DIR__ . '/../..' . '/src/Admin/Table.php',
+ 'HTML_Forms\\Form' => __DIR__ . '/../..' . '/src/Form.php',
+ 'HTML_Forms\\Forms' => __DIR__ . '/../..' . '/src/Forms.php',
+ 'HTML_Forms\\Submission' => __DIR__ . '/../..' . '/src/Submission.php',
+ 'HTML_Forms\\TagReplacers' => __DIR__ . '/../..' . '/src/TagReplacers.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->classMap = ComposerStaticInit6624e64b43d8b10f84ff63c345cfa51d::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
--- /dev/null
+<div class="hf-medium-margin">
+ <p><strong><?php _e( 'Looking for help?', 'html-forms' ); ?></strong>
+ <?php echo sprintf( __('Check out the <a href="%s">HTML Forms knowledge base</a>', 'html-forms' ), 'https://kb.htmlforms.io/#utm_source=wp-plugin&utm_medium=html-forms&utm_campaign=admin-footer' ); ?>.</p>
+</div>
--- /dev/null
+<?php
+defined( 'ABSPATH' ) or exit;
+
+// fake post to prevent notices in wp_enqueue_scripts call
+$GLOBALS['post'] = new \WP_Post((object) array( 'filter' => 'raw' ));
+$GLOBALS['wp_query'] = new \WP_Query();
+
+// render simple page with form in it.
+?><!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8" />
+ <link type="text/css" rel="stylesheet" href="<?php bloginfo( 'stylesheet_url' ); ?>" />
+ <?php
+ wp_enqueue_scripts();
+ wp_print_styles();
+ wp_print_head_scripts();
+ wp_custom_css_cb();
+ ?>
+ <style type="text/css">
+ body{
+ background: white;
+ width: 100%;
+ max-width: 100%;
+ text-align: left;
+ }
+
+ /* hide all other elements */
+ body::before,
+ body::after,
+ body > *:not(#form-preview) {
+ display:none !important;
+ }
+
+ #form-preview {
+ display: block !important;
+ width: 100%;
+ height: 100%;
+ padding: 20px;
+ border: 0;
+ margin: 0;
+ }
+ </style>
+</head>
+<body class="page-template-default page ">
+ <div id="form-preview" class="page type-page status-publish hentry post post-content">
+ <?php echo $form; ?>
+ </div>
+ <?php wp_footer(); ?>
+</body>
+</html>
--- /dev/null
+<?php defined( 'ABSPATH' ) or exit; ?>
+
+<div class="wrap hf">
+
+ <style type="text/css" scoped>
+ label{ display: block; font-weight: bold; font-size: 18px; }
+ </style>
+
+ <p class="breadcrumbs">
+ <span class="prefix"><?php echo __( 'You are here: ', 'html-forms' ); ?></span>
+ <a href="<?php echo admin_url( 'admin.php?page=html-forms' ); ?>">HTML Forms</a> ›
+ <span class="current-crumb"><strong><?php _e( 'Add new form', 'html-forms' ); ?></strong></span>
+ </p>
+
+ <h1 class="page-title"><?php _e( 'Add new form', 'html-forms' ); ?></h1>
+
+ <form method="post" style="max-width: 600px;">
+ <input type="hidden" name="_hf_admin_action" value="create_form" />
+
+ <p>
+ <label>Form title</label>
+ <input type="text" name="form[title]" value="" placeholder="<?php esc_attr_e( 'Your form title..', 'html-forms' ); ?>" class="widefat" required />
+ </p>
+
+ <?php submit_button(); ?>
+ </form>
+
+ <?php require __DIR__ . '/admin-footer.php'; ?>
+</div>
+
--- /dev/null
+<?php defined( 'ABSPATH' ) or exit;
+
+$tabs = array(
+ 'fields' => __( 'Fields', 'html-forms' ),
+ 'messages' => __( 'Messages', 'html-forms' ),
+ 'settings' => __( 'Settings', 'html-forms' ),
+ 'actions' => __( 'Actions', 'html-forms' ),
+);
+
+if( $form->settings['save_submissions'] ) {
+ $tabs['submissions'] = __( 'Submissions', 'html-forms' );
+}
+
+?>
+<script>document.title = 'Edit form' + ' - ' + document.title;</script>
+<div class="wrap hf">
+
+ <p class="breadcrumbs">
+ <span class="prefix"><?php echo __( 'You are here: ', 'html-forms' ); ?></span>
+ <a href="<?php echo admin_url( 'admin.php?page=html-forms' ); ?>">HTML Forms</a> ›
+ <span class="current-crumb"><strong><?php _e( 'Edit form', 'html-forms' ); ?></strong></span>
+ </p>
+
+ <h1 class="page-title"><?php _e( 'Edit form', 'html-forms' ); ?></h1>
+
+ <?php if ( ! empty( $_GET['saved'] ) ) {
+ echo '<div class="notice notice-success"><p>' . __( 'Form updated.', 'html-forms' ) . '</p></div>';
+ } ?>
+
+ <form method="post">
+ <input type="hidden" name="_hf_admin_action" value="save_form" />
+ <input type="hidden" name="form_id" value="<?php echo esc_attr( $form->ID ); ?>" />
+ <input type="submit" style="display: none; " />
+
+ <div id="titlediv">
+ <div id="titlewrap">
+ <label for="title"><?php _e( 'Form title', 'html-forms' ); ?></label>
+ <input type="text" name="form[title]" size="30" value="<?php echo esc_attr( $form->title ); ?>" id="title" spellcheck="true" autocomplete="off" placeholder="<?php echo __( "Enter the title of your form", 'html-forms' ); ?>" style="line-height: initial;" >
+ </div>
+ <div class="inside" style="margin-top: 3px;">
+ <div class="hf-tiny-margin hide-if-no-js">
+ <strong>Slug:</strong> <input type="text" id="form-slug-input" name="form[slug]" value="<?php echo esc_attr( $form->slug ); ?>" readonly /> ‎<button type="button" class="button button-small" onclick="document.getElementById('form-slug-input').removeAttribute('readonly');" aria-label="<?php _e( 'Edit slug', 'html-forms' ); ?>"><?php _e( 'Edit', 'html-forms' ); ?></button>
+ </div>
+ <div class="hf-tiny-margin">
+ <label for="shortcode"><?php _e( 'Copy this shortcode and paste it into your post, page, or text widget content:', 'html-forms' ); ?></label><br />
+ <input id="shortcode" type="text" class="regular-text" value="<?php echo esc_attr( sprintf( '[hf_form slug="%s"]', $form->slug ) ); ?>" readonly onclick="this.select()">
+ </div>
+ </div>
+ </div>
+
+ <div class="hf-small-margin">
+ <h2 class="nav-tab-wrapper" id="hf-tabs-nav">
+ <?php foreach( $tabs as $tab => $name ) {
+ $class = ( $active_tab === $tab ) ? 'nav-tab-active' : '';
+ echo sprintf( '<a class="nav-tab nav-tab-%s %s" data-tab-target="%s" href="%s">%s</a>', $tab, $class, $tab, $this->get_tab_url( $tab ), $name );
+ } ?>
+ </h2>
+
+ <div id="tabs">
+ <?php
+ // output each tab
+ foreach( $tabs as $tab => $name ) {
+ $class = ($active_tab === $tab) ? 'hf-tab-active' : '';
+ echo sprintf('<div class="hf-tab %s" id="tab-%s" data-tab="%s">', $class, $tab, $tab);
+ do_action( 'hf_admin_output_form_tab_' . $tab, $form );
+ echo '</div>';
+ } // end foreach tab
+ ?>
+
+ </div><!-- / tabs -->
+ </div>
+
+ </form>
+
+ <?php require __DIR__ . '/admin-footer.php'; ?>
+</div>
--- /dev/null
+<?php defined( 'ABSPATH' ) or exit; ?>
+
+<div class="wrap hf">
+
+ <p class="breadcrumbs">
+ <span class="prefix"><?php echo __( 'You are here: ', 'html-forms' ); ?></span>
+ <a href="<?php echo admin_url( 'admin.php?page=html-forms' ); ?>">HTML Forms</a> ›
+ <span class="current-crumb"><strong><?php _e( 'Settings', 'html-forms' ); ?></strong></span>
+ </p>
+
+ <h1 class="page-title"><?php _e( 'Settings', 'html-forms' ); ?></h1>
+
+ <?php if ( ! empty( $_GET['settings-updated'] ) ) {
+ echo '<div class="notice notice-success"><p>' . __( 'Settings updated.', 'html-forms' ) . '</p></div>';
+ } ?>
+
+ <form method="post" action="<?php echo admin_url( 'options.php' ); ?>">
+ <?php settings_fields( 'hf_settings' ); ?>
+
+ <table class="form-table">
+ <tr valign="top">
+ <th scope="row"><?php _e( 'Load stylesheet?', 'html-forms' ); ?></th>
+ <td>
+ <label><input type="radio" name="hf_settings[load_stylesheet]" value="1" <?php checked( $settings['load_stylesheet'], 1 ); ?>> <?php _e( 'Yes' ); ?></label>
+ <label><input type="radio" name="hf_settings[load_stylesheet]" value="0" <?php checked( $settings['load_stylesheet'], 0 ); ?>> <?php _e( 'No' ); ?></label>
+
+ <p class="help"><?php _e( 'Select "yes" to apply some basic form styles to all HTML Forms.', 'html-forms' ); ?></p>
+ </td>
+ </tr>
+
+ </table>
+ <?php submit_button(); ?>
+ </form>
+
+
+ <?php do_action( 'hf_admin_output_misc_settings' ); ?>
+
+ <?php require __DIR__ . '/admin-footer.php'; ?>
+</div>
--- /dev/null
+<?php
+
+defined( 'ABSPATH' ) or exit;
+
+/**
+ * @var HTML_Forms\Admin\Table $table
+ */
+?>
+<div class="wrap hf">
+
+ <p class="breadcrumbs">
+ <span class="prefix"><?php echo __( 'You are here: ', 'html-forms' ); ?></span>
+ <a href="<?php echo admin_url( 'admin.php?page=html-forms' ); ?>">HTML Forms</a> ›
+ <span class="current-crumb"><strong><?php _e( 'Forms', 'html-forms' ); ?></strong></span>
+ </p>
+
+ <h1 class="page-title"><?php _e( 'Forms', 'html-forms' ); ?>
+ <a href="<?php echo admin_url( 'admin.php?page=html-forms-add-form' ); ?>" class="page-title-action">
+ <span class="dashicons dashicons-plus-alt" style="vertical-align: middle; line-height: 16px; margin: 0 4px 0 0; "></span>
+ <?php _e( 'Add new form', 'html-forms' ); ?>
+ </a>
+
+ <?php if ( ! empty( $_GET['s'] ) ) {
+ printf(' <span class="subtitle">' . __('Search results for “%s”') . '</span>', sanitize_text_field( $_GET['s'] ) );
+ } ?>
+ </h1>
+
+
+ <?php $table->views(); ?>
+
+ <form method="get" action="<?php echo admin_url( 'admin.php' ); ?>">
+ <input type="hidden" name="page" value="<?php echo esc_attr( $_GET['page'] ); ?>" />
+ <?php if( ! empty( $_GET['post_status'] ) ) { ?>
+ <input type="hidden" name="post_status" value="<?php echo esc_attr( $_GET['post_status'] ); ?>" />
+ <?php } ?>
+ <?php $table->search_box( 'search', 'html-forms-search' ); ?>
+ </form>
+
+ <form method="post">
+ <?php $table->display(); ?>
+ </form>
+
+ <?php require __DIR__ . '/admin-footer.php'; ?>
+</div>
--- /dev/null
+<?php defined( 'ABSPATH' ) or exit; ?>
+
+<div class="wrap hf">
+ <h1><strong style="color: #ea6ea6;">HTML Forms Premium</strong>, take your forms to the next level!</h1>
+
+ <div style="font-size: 120%;">
+ <p>The Premium add-on bundles several powerful features together:</p>
+
+ <ul class="ul-square">
+ <li><strong>Export to CSV</strong> - with a single click</li>
+ <li><strong>File uploads</strong> - safely allow your visitors to upload files</li>
+ <li><strong>Webhooks</strong> - notify other services whenever a form is submitted</li>
+ <li><strong>Notifications</strong> - never lose track of new form submissions again</li>
+ </ul>
+
+ <p>Additionally, you'll be eligible for premium support - instant access to our experienced support team.</p>
+
+ <p>
+ <a href="https://www.htmlforms.io/pricing/#utm_source=wp-plugin&utm_medium=html-forms&utm_campaign=premium-page" class="button" style="background: #ea6ea6; border: #ea6ea6; color: white; padding: 6px 12px; height: auto; font-weight: bold;">Buy HTML Forms Premium</a>
+ <a href="https://www.htmlforms.io/premium-features/#utm_source=wp-plugin&utm_medium=html-forms&utm_campaign=premium-page"><span style="text-decoration: none; vertical-align: middle; margin-right: 6px;" class="dashicons dashicons-info"> </span>More information</a>
+ </p>
+ <p><em>Comes with our 30-day no questions asked money back guarantee.</em></p>
+ </div>
+</div>
--- /dev/null
+<?php
+$available_actions = $this->get_available_form_actions();
+?>
+
+<div>
+ <h2><?php echo __( 'Form Actions', 'html-forms' ); ?></h2>
+
+ <div id="hf-form-actions">
+ <?php
+ if( ! empty( $form->settings['actions'] ) ) {
+ $index = 0;
+ foreach ($form->settings['actions'] as $action_settings ) {
+ // skip invalid options (eg from deleted actions)
+ if( empty( $available_actions[ $action_settings['type'] ] ) ) {
+ continue;
+ }
+
+ ?>
+ <div class="hf-action-settings" data-title="<?php echo esc_attr( $available_actions[ $action_settings['type'] ] ); ?>">
+ <?php
+
+ /**
+ * Output setting fields for a registered action
+ *
+ * @param array $action_settings
+ * @param int $index
+ */
+ do_action( 'hf_output_form_action_' . $action_settings['type'] . '_settings', $action_settings, $index++ );
+
+ /**
+ * Deprecated action hook. Use the above action (hf_output_form_action_...) instead.
+ */
+ do_action( 'hf_render_form_action_' . $action_settings['type'] . '_settings', $action_settings, $index++ ); ?>
+ </div>
+ <?php
+ }
+ }
+
+ echo '<p id="hf-form-actions-empty">' . __( 'No form actions configured for this form.', 'html-forms' ) . '</p>';
+ ?>
+ </div>
+</div>
+
+<div class="hf-medium-margin">
+ <h3><?php echo __( 'Add form action', 'html-forms' ); ?></h3>
+ <p><?php _e( 'Use the below button(s) to configure and perform an action whenever this form is successfully submitted.', 'html-forms' ); ?></p>
+ <p id="hf-available-form-actions">
+ <?php
+ foreach( $available_actions as $type => $label ) {
+ echo sprintf( '<input type="button" value="%s" data-action-type="%s" class="button" />', esc_html( $label ), esc_attr( $type ) ) . ' ';
+ };
+ ?>
+ </p>
+</div>
+
+<div>
+ <?php submit_button(); ?>
+</div>
+
+<div style="display: none;" id="hf-form-action-templates">
+ <?php
+ foreach( $available_actions as $type => $label ) {
+ echo sprintf( '<script type="text/x-template" id="hf-action-type-%s-template">', $type );
+ do_action( 'hf_output_form_action_' . $type . '_settings', array(), '$index' );
+ echo '</script>';
+ }
+ ?>
+</div>
--- /dev/null
+<div class="hf-small-margin">
+ <div id="hf-field-builder"></div>
+</div>
+
+<div class="hf-small-margin">
+
+ <div class="hf-row">
+ <div class="hf-col" style="min-width: 600px;">
+ <h4 style="margin-bottom: 0;"><label for="hf-form-editor"><?php _e( 'Form code', 'html-forms' ); ?></label></h4>
+ <textarea id="hf-form-editor" class="widefat" name="form[markup]" cols="160" rows="20" autocomplete="false" autocorrect="false" autocapitalize="false" spellcheck="false"><?php echo htmlspecialchars( $form->markup, ENT_QUOTES, get_option( 'blog_charset' ) ); ?></textarea>
+ <?php submit_button(); ?>
+ </div>
+ <div class="hf-col" style="min-width: 400px;">
+ <h4 style="margin-bottom: 0;"><label><?php _e( 'Form preview', 'html-forms' ); ?> <span class="dashicons dashicons-editor-help hf-tooltip" title="<?php esc_attr_e( 'The form may look slightly different than this when shown in a post, page or widget area.', 'html-forms' ); ?>"></span></label></h4>
+ <iframe id="hf-form-preview" src="<?php echo esc_attr( $form_preview_url ); ?>"></iframe>
+ </div>
+ </div>
+
+</div>
+
+<input type="hidden" id="hf-required-fields" name="form[settings][required_fields]" value="<?php echo esc_attr( $form->settings['required_fields'] ); ?>" />
+<input type="hidden" id="hf-email-fields" name="form[settings][email_fields]" value="<?php echo esc_attr( $form->settings['email_fields'] ); ?>" />
--- /dev/null
+<?php defined( 'ABSPATH' ) or exit;
+
+/** @var HTML_Forms\Form $form */
+?>
+
+<h2><?php _e( 'Form Messages', 'html-forms' ); ?></h2>
+
+<table class="form-table hf-form-messages">
+ <tr valign="top">
+ <th scope="row"><label for="hf_form_success"><?php _e( 'Success', 'html-forms' ); ?></label></th>
+ <td>
+ <input type="text" class="widefat" id="hf_form_success" name="form[messages][success]" value="<?php echo esc_attr( $form->messages['success'] ); ?>" required />
+ <p class="help"><?php _e( 'The text that shows after a successful form submission.', 'html-forms' ); ?></p>
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="hf_form_invalid_email"><?php _e( 'Invalid email address', 'html-forms' ); ?></label></th>
+ <td>
+ <input type="text" class="widefat" id="hf_form_invalid_email" name="form[messages][invalid_email]" value="<?php echo esc_attr( $form->messages['invalid_email'] ); ?>" required />
+ <p class="help"><?php _e( 'The text that shows when an invalid email address is given.', 'html-forms' ); ?></p>
+ </td>
+ </tr>
+ <tr valign="top">
+ <th scope="row"><label for="hf_form_required_field_missing"><?php _e( 'Required field missing', 'html-forms' ); ?></label></th>
+ <td>
+ <input type="text" class="widefat" id="hf_form_required_field_missing" name="form[messages][required_field_missing]" value="<?php echo esc_attr( $form->messages['required_field_missing'] ); ?>" required />
+ <p class="help"><?php _e( 'The text that shows when a required field for the selected list(s) is missing.', 'html-forms' ); ?></p>
+ </td>
+ </tr>
+
+ <tr valign="top">
+ <th scope="row"><label for="hf_form_error"><?php _e( 'General error' ,'html-forms' ); ?></label></th>
+ <td>
+ <input type="text" class="widefat" id="hf_form_error" name="form[messages][error]" value="<?php echo esc_attr( $form->messages['error'] ); ?>" required />
+ <p class="help"><?php _e( 'The text that shows when a general error occured.', 'html-forms' ); ?></p>
+ </td>
+ </tr>
+
+ <tr valign="top">
+ <th></th>
+ <td>
+ <p class="help"><?php printf( __( 'HTML tags like %s are allowed in the message fields.', 'html-forms' ), '<code>' . esc_html( '<strong><em><a>' ) . '</code>' ); ?></p>
+ </td>
+ </tr>
+
+</table>
+
+<?php submit_button(); ?>
--- /dev/null
+<h2><?php echo __( 'Form Settings', 'html-forms' ); ?></h2>
+
+<table class="form-table">
+
+ <tr valign="top">
+ <th scope="row"><?php _e( 'Save form submissions?', 'html-forms' ); ?></th>
+ <td>
+ <label><input type="radio" name="form[settings][save_submissions]" value="1" <?php checked( $form->settings['save_submissions'], 1 ); ?>> <?php _e( 'Yes' ); ?></label>
+ <label><input type="radio" name="form[settings][save_submissions]" value="0" <?php checked( $form->settings['save_submissions'], 0 ); ?>> <?php _e( 'No' ); ?></label>
+
+ <p class="help"><?php _e( 'Select "yes" to store successful form submissions.', 'html-forms' ); ?></p>
+ </td>
+ </tr>
+
+ <tr valign="top">
+ <th scope="row"><?php _e( 'Hide form after a successful sign-up?', 'html-forms' ); ?></th>
+ <td class="nowrap">
+ <label>
+ <input type="radio" name="form[settings][hide_after_success]" value="1" <?php checked( $form->settings['hide_after_success'], 1 ); ?> />‏
+ <?php _e( 'Yes' ); ?>
+ </label>
+ <label>
+ <input type="radio" name="form[settings][hide_after_success]" value="0" <?php checked( $form->settings['hide_after_success'], 0 ); ?> />‏
+ <?php _e( 'No' ); ?>
+ </label>
+ <p class="help">
+ <?php _e( 'Select "yes" to hide the form fields after a successful sign-up.', 'html-forms' ); ?>
+ </p>
+ </td>
+ </tr>
+
+ <tr valign="top">
+ <th scope="row"><label for="hf_form_redirect"><?php _e( 'Redirect to URL after successful sign-ups', 'html-forms' ); ?></label></th>
+ <td>
+ <input type="text" class="widefat" name="form[settings][redirect_url]" id="hf_form_redirect" placeholder="<?php printf( __( 'Example: %s', 'html-forms' ), esc_attr( site_url( '/thank-you/' ) ) ); ?>" value="<?php echo esc_attr( $form->settings['redirect_url'] ); ?>" />
+ <p class="help"><?php _e( 'Leave empty or enter <code>0</code> for no redirect. Otherwise, use complete (absolute) URLs, including <code>http://</code>.', 'html-forms' ); ?></p>
+ </td>
+ </tr>
+
+ <?php
+ /**
+ * Runs after the form settings are printed.
+ *
+ * @param $form
+ */
+ do_action( 'hf_output_form_settings', $form ); ?>
+
+</table>
+
+<?php submit_button(); ?>
--- /dev/null
+<?php
+
+defined( 'ABSPATH' ) or exit;
+$date_format = get_option( 'date_format' );
+$datetime_format = sprintf('%s %s', $date_format, get_option( 'time_format' ) );
+?>
+
+<h2><?php _e( 'Viewing Form Submission', 'html-forms' ); ?></h2>
+
+<div>
+ <style type="text/css">
+ table.hf-bordered {
+ font-size: 13px;
+ border-collapse: collapse;
+ border-spacing: 0;
+ background: white;
+ width: 100%;
+ table-layout: fixed;
+ }
+
+ table.hf-bordered th,
+ table.hf-bordered td {
+ border: 1px solid #ddd;
+ padding: 12px;
+ }
+
+ table.hf-bordered th {
+ width: 160px;
+ font-size: 14px;
+ text-align: left;
+ }
+ </style>
+
+ <div class="hf-small-margin">
+ <table class="hf-bordered">
+ <tbody>
+ <tr>
+ <th><?php _e( 'Timestamp', 'html-forms' ); ?></th>
+ <td><?php echo date( $datetime_format, strtotime( $submission->submitted_at ) ); ?></td>
+ </tr>
+
+ <?php if ( ! empty( $submission->user_agent ) ) { ?>
+ <tr>
+ <th><?php _e( 'User Agent', 'html-forms' ); ?></th>
+ <td><?php echo esc_html( $submission->user_agent ); ?></td>
+ </tr>
+ <?php } // end if user_agent ?>
+
+ <?php if ( ! empty( $submission->ip_address ) ) { ?>
+ <tr>
+ <th><?php _e( 'IP Address', 'html-forms' ); ?></th>
+ <td><?php echo esc_html( $submission->ip_address ); ?></td>
+ </tr>
+ <?php } // end if ip_address ?>
+
+ <tr>
+ <th><?php _e( 'Referrer URL', 'html-forms' ); ?></th>
+ <td><?php echo sprintf( '<a href="%s">%s</a>', esc_attr( $submission->referer_url ), esc_html( $submission->referer_url ) ); ?></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="hf-small-margin">
+ <h3><?php _e( 'Fields', 'html-forms' ); ?></h3>
+ <table class="hf-bordered">
+ <tbody>
+ <?php
+ if( is_array( $submission->data ) ) {
+ foreach( $submission->data as $field => $value ) {
+
+ echo '<tr>';
+ echo sprintf( '<th>%s</th>', esc_html( str_replace( '_', ' ', ucfirst( strtolower( $field ) ) ) ) );
+
+ echo '<td>';
+ echo hf_field_value( $value );
+ echo '</td>';
+ echo '</tr>';
+ }
+ } ?>
+ </tbody>
+ </table>
+ </div>
+
+</div>
+
+<div class="hf-small-margin">
+ <h3><?php _e( 'Raw', 'html-forms' ); ?></h3>
+ <pre class="hf-well"><?php
+ echo version_compare( PHP_VERSION, '5.4', '>=' ) ? json_encode( $submission, JSON_UNESCAPED_SLASHES|JSON_PRETTY_PRINT ) : json_encode( $submission );
+ ?></pre>
+</div>
+
+<div class="hf-small-margin">
+ <p><a href="<?php echo esc_attr( remove_query_arg( 'submission_id' ) ); ?>">‹ <?php _e( 'Back to submissions list', 'html-forms' ); ?></a></p>
+</div>
--- /dev/null
+<?php
+
+defined( 'ABSPATH' ) or exit;
+$date_format = get_option( 'date_format' );
+$datetime_format = sprintf('%s %s', $date_format, get_option( 'time_format' ) );
+
+add_action( 'hf_admin_form_submissions_table_output_column_header', function( $field, $column ) {
+ echo $column;
+}, 10, 2 );
+
+$bulk_actions = apply_filters( 'hf_admin_form_submissions_bulk_actions', array(
+ 'bulk_delete_submissions' => __( 'Move to Trash' ),
+));
+?>
+
+<h2><?php _e( 'Form Submissions', 'html-forms' ); ?></h2>
+
+</form><?php // close main form. This means this always has to be the last tab or it will break stuff. ?>
+<form method="post">
+ <div class="tablenav top">
+ <div class="alignleft actions bulkactions">
+ <label for="bulk-action-selector-top" class="screen-reader-text"><?php _e( 'Select bulk action' ); ?></label>
+ <select name="_hf_admin_action" id="bulk-action-selector-top">
+ <option value=""><?php _e( 'Bulk Actions' ); ?></option>
+ <?php foreach( $bulk_actions as $key => $label ) {
+ echo sprintf( '<option value="%s">%s</option>', esc_attr( $key ), $label );
+ } ?>
+ </select>
+ <input type="submit" class="button action" value="<?php _e( 'Apply' ); ?>">
+ </div>
+
+ <div class="tablenav-pages one-page">
+ <span class="displaying-num"><?php echo sprintf( __( '%d items' ), count( $submissions ) ); ?></span>
+ </div>
+
+ <br class="clear">
+ </div>
+
+ <table class="wp-list-table widefat fixed striped">
+ <thead>
+ <tr>
+ <td id="cb" class="manage-column column-cb check-column"><input type="checkbox" /></td>
+ <th scope="col" class="hf-column manage-column column-primary" style="width: 160px;">
+ <?php _e( 'Timestamp', 'html-forms' ); ?>
+ </th>
+ <?php foreach( $columns as $field => $column ) {
+ $hidden_class = in_array( $field, $hidden_columns ) ? 'hidden' : '';
+ echo sprintf( '<th scope="col" class="hf-column hf-column-%s manage-column column-%s %s">', esc_attr( $field ), esc_attr( $field ), $hidden_class );
+ do_action( 'hf_admin_form_submissions_table_output_column_header', $field, $column );
+ echo '</th>';
+ } ?>
+ </tr>
+ </thead>
+ <tbody>
+
+ <?php foreach( $submissions as $s ) { ?>
+ <tr id="hf-submissions-item-<?php echo $s->id; ?>">
+ <th scope="row" class="check-column">
+ <input type="checkbox" name="id[]" value="<?php echo esc_attr( $s->id ); ?>"/>
+ </th>
+ <td class="has-row-actions column-primary">
+ <strong><abbr title="<?php echo date( $datetime_format, strtotime( $s->submitted_at ) ); ?>">
+ <?php echo sprintf( '<a href="%s">%s</a>', esc_attr( add_query_arg( array( 'tab' => 'submissions', 'submission_id' => $s->id ) ) ), esc_html( $s->submitted_at ) ); ?>
+ </abbr></strong>
+ <div class="row-actions">
+ <?php do_action( 'hf_admin_form_submissions_table_output_row_actions', $s ); ?>
+ </div>
+ </td>
+
+ <?php foreach( $columns as $field => $column ) {
+ $hidden_class = in_array( $field, $hidden_columns ) ? 'hidden' : '';
+ echo sprintf( '<td class="column-%s %s">', esc_attr( $field ), $hidden_class );
+
+ // because some columns don't have a value, check if it's set here
+ if( ! empty( $s->data[$field] ) ) {
+ echo hf_field_value( $s->data[$field], 100 );
+ }
+
+ echo '</td>';
+ } ?>
+ </tr>
+ <?php } ?>
+ <?php if ( empty( $submissions ) ) {
+ printf( '<tr><td colspan="2">%s</td></tr>', __( 'Nothing to see here, yet!', 'html-forms' ) );
+ } ?>
+ </tbody>
+ </table>
+</form>
+
+
+<form><?php // open new main form. This means this always has to be the last tab or it will break stuff. ?>
// autoload.php @generated by Composer
-require_once __DIR__ . '/composer/autoload_real.php';
+require_once __DIR__ . '/composer' . '/autoload_real.php';
return ComposerAutoloaderInit6624e64b43d8b10f84ff63c345cfa51d::getLoader();
private $useIncludePath = false;
private $classMap = array();
+
private $classMapAuthoritative = false;
- private $missingClasses = array();
- private $apcuPrefix;
public function getPrefixes()
{
return $this->classMapAuthoritative;
}
- /**
- * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
- *
- * @param string|null $apcuPrefix
- */
- public function setApcuPrefix($apcuPrefix)
- {
- $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
- }
-
- /**
- * The APCu prefix in use, or null if APCu caching is not enabled.
- *
- * @return string|null
- */
- public function getApcuPrefix()
- {
- return $this->apcuPrefix;
- }
-
/**
* Registers this instance as an autoloader.
*
*/
public function findFile($class)
{
+ // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
+ if ('\\' == $class[0]) {
+ $class = substr($class, 1);
+ }
+
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
- if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ if ($this->classMapAuthoritative) {
return false;
}
- if (null !== $this->apcuPrefix) {
- $file = apcu_fetch($this->apcuPrefix.$class, $hit);
- if ($hit) {
- return $file;
- }
- }
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
- if (false === $file && defined('HHVM_VERSION')) {
+ if ($file === null && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
- if (null !== $this->apcuPrefix) {
- apcu_add($this->apcuPrefix.$class, $file);
- }
-
- if (false === $file) {
+ if ($file === null) {
// Remember that this class does not exist.
- $this->missingClasses[$class] = true;
+ return $this->classMap[$class] = false;
}
return $file;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
- $subPath = $class;
- while (false !== $lastPos = strrpos($subPath, '\\')) {
- $subPath = substr($subPath, 0, $lastPos);
- $search = $subPath.'\\';
- if (isset($this->prefixDirsPsr4[$search])) {
- foreach ($this->prefixDirsPsr4[$search] as $dir) {
- $length = $this->prefixLengthsPsr4[$first][$search];
+ foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
return $file;
}
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
-
- return false;
}
}
-Copyright (c) Nils Adermann, Jordi Boggiano
+Copyright (c) 2016 Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
'HTML_Forms\\Actions\\Email' => $baseDir . '/src/Actions/Email.php',
'HTML_Forms\\Actions\\MailChimp' => $baseDir . '/src/Actions/MailChimp.php',
'HTML_Forms\\Admin\\Admin' => $baseDir . '/src/Admin/Admin.php',
+ 'HTML_Forms\\Admin\\GDPR' => $baseDir . '/src/Admin/GDPR.php',
'HTML_Forms\\Admin\\Migrations' => $baseDir . '/src/Admin/Migrations.php',
'HTML_Forms\\Admin\\Table' => $baseDir . '/src/Admin/Table.php',
'HTML_Forms\\Form' => $baseDir . '/src/Form.php',
'HTML_Forms\\Forms' => $baseDir . '/src/Forms.php',
- 'HTML_Forms\\Submission' => $baseDir . '/src/Admin/Submission.php',
+ 'HTML_Forms\\Submission' => $baseDir . '/src/Submission.php',
'HTML_Forms\\TagReplacers' => $baseDir . '/src/TagReplacers.php',
);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit6624e64b43d8b10f84ff63c345cfa51d', 'loadClassLoader'));
- $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
- if ($useStaticLoader) {
- require_once __DIR__ . '/autoload_static.php';
-
- call_user_func(\Composer\Autoload\ComposerStaticInit6624e64b43d8b10f84ff63c345cfa51d::getInitializer($loader));
- } else {
- $map = require __DIR__ . '/autoload_namespaces.php';
- foreach ($map as $namespace => $path) {
- $loader->set($namespace, $path);
- }
+ $map = require __DIR__ . '/autoload_namespaces.php';
+ foreach ($map as $namespace => $path) {
+ $loader->set($namespace, $path);
+ }
- $map = require __DIR__ . '/autoload_psr4.php';
- foreach ($map as $namespace => $path) {
- $loader->setPsr4($namespace, $path);
- }
+ $map = require __DIR__ . '/autoload_psr4.php';
+ foreach ($map as $namespace => $path) {
+ $loader->setPsr4($namespace, $path);
+ }
- $classMap = require __DIR__ . '/autoload_classmap.php';
- if ($classMap) {
- $loader->addClassMap($classMap);
- }
+ $classMap = require __DIR__ . '/autoload_classmap.php';
+ if ($classMap) {
+ $loader->addClassMap($classMap);
}
$loader->register(true);
- if ($useStaticLoader) {
- $includeFiles = Composer\Autoload\ComposerStaticInit6624e64b43d8b10f84ff63c345cfa51d::$files;
- } else {
- $includeFiles = require __DIR__ . '/autoload_files.php';
- }
+ $includeFiles = require __DIR__ . '/autoload_files.php';
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire6624e64b43d8b10f84ff63c345cfa51d($fileIdentifier, $file);
}
'HTML_Forms\\Actions\\Email' => __DIR__ . '/../..' . '/src/Actions/Email.php',
'HTML_Forms\\Actions\\MailChimp' => __DIR__ . '/../..' . '/src/Actions/MailChimp.php',
'HTML_Forms\\Admin\\Admin' => __DIR__ . '/../..' . '/src/Admin/Admin.php',
+ 'HTML_Forms\\Admin\\GDPR' => __DIR__ . '/../..' . '/src/Admin/GDPR.php',
'HTML_Forms\\Admin\\Migrations' => __DIR__ . '/../..' . '/src/Admin/Migrations.php',
'HTML_Forms\\Admin\\Table' => __DIR__ . '/../..' . '/src/Admin/Table.php',
'HTML_Forms\\Form' => __DIR__ . '/../..' . '/src/Form.php',
'HTML_Forms\\Forms' => __DIR__ . '/../..' . '/src/Forms.php',
- 'HTML_Forms\\Submission' => __DIR__ . '/../..' . '/src/Admin/Submission.php',
+ 'HTML_Forms\\Submission' => __DIR__ . '/../..' . '/src/Submission.php',
'HTML_Forms\\TagReplacers' => __DIR__ . '/../..' . '/src/TagReplacers.php',
);
<?php
defined( 'ABSPATH' ) or exit;
-$datetime_format = sprintf('%s %s', get_option( 'date_format' ), get_option( 'time_format' ) );
+$date_format = get_option( 'date_format' );
+$datetime_format = sprintf('%s %s', $date_format, get_option( 'time_format' ) );
?>
<h2><?php _e( 'Viewing Form Submission', 'html-forms' ); ?></h2>
<th><?php _e( 'Timestamp', 'html-forms' ); ?></th>
<td><?php echo date( $datetime_format, strtotime( $submission->submitted_at ) ); ?></td>
</tr>
+
+ <?php if ( ! empty( $submission->user_agent ) ) { ?>
<tr>
<th><?php _e( 'User Agent', 'html-forms' ); ?></th>
<td><?php echo esc_html( $submission->user_agent ); ?></td>
</tr>
+ <?php } // end if user_agent ?>
+
+ <?php if ( ! empty( $submission->ip_address ) ) { ?>
<tr>
<th><?php _e( 'IP Address', 'html-forms' ); ?></th>
<td><?php echo esc_html( $submission->ip_address ); ?></td>
</tr>
+ <?php } // end if ip_address ?>
+
<tr>
<th><?php _e( 'Referrer URL', 'html-forms' ); ?></th>
<td><?php echo sprintf( '<a href="%s">%s</a>', esc_attr( $submission->referer_url ), esc_html( $submission->referer_url ) ); ?></td>
echo sprintf( '<th>%s</th>', esc_html( str_replace( '_', ' ', ucfirst( strtolower( $field ) ) ) ) );
echo '<td>';
- if( hf_is_file( $value ) ) {
- $file_url = isset( $value['url'] ) ? $value['url'] : '';
- if( isset( $value['attachment_id'] ) ) {
- $file_url = admin_url( 'post.php?action=edit&post=' . $value['attachment_id'] );
- }
- $short_name = substr( $value['name'], 0, 20 );
- $suffix = strlen( $value['name'] ) > 20 ? '...' : '';
- echo sprintf( '<a href="%s">%s%s</a> (%s)', $file_url, $short_name, $suffix, hf_human_filesize( $value['size'] ) );
- } else {
- if( is_array( $value ) ) {
- $value = join( ', ', $value );
- }
- $value = esc_html( $value );
- echo nl2br( $value );
- }
+ echo hf_field_value( $value );
echo '</td>';
echo '</tr>';
}
<?php
defined( 'ABSPATH' ) or exit;
-$datetime_format = sprintf('%s %s', get_option( 'date_format' ), get_option( 'time_format' ) );
+$date_format = get_option( 'date_format' );
+$datetime_format = sprintf('%s %s', $date_format, get_option( 'time_format' ) );
add_action( 'hf_admin_form_submissions_table_output_column_header', function( $field, $column ) {
echo $column;
</td>
<?php foreach( $columns as $field => $column ) {
- $hidden_class = in_array( $field, $hidden_columns ) ? 'hidden' : '';
- echo sprintf( '<td class="column-%s %s">', esc_attr( $field ), $hidden_class );
- $value = isset( $s->data[ $field ] ) ? $s->data[ $field ] : '';
+ $hidden_class = in_array( $field, $hidden_columns ) ? 'hidden' : '';
+ echo sprintf( '<td class="column-%s %s">', esc_attr( $field ), $hidden_class );
- if( hf_is_file( $value ) ) {
- $file_url = isset( $value['url'] ) ? $value['url'] : '';
- if( isset( $value['attachment_id'] ) ) {
- $file_url = admin_url( 'post.php?action=edit&post=' . $value['attachment_id'] );
- }
- $short_name = substr( $value['name'], 0, 20 );
- $suffix = strlen( $value['name'] ) > 20 ? '...' : '';
- echo sprintf( '<a href="%s">%s%s</a> (%s)', $file_url, $short_name, $suffix, hf_human_filesize( $value['size'] ) );
- } else {
- // regular (scalar) values
- if( is_array( $value ) ) {
- $value = join( ', ', $value );
- }
- $value = esc_html( $value );
- echo sprintf( '%s%s', substr( $value, 0, 100 ), strlen( $value ) > 100 ? '...' : '' );
- }
- echo '</td>';
- } ?>
+ // because some columns don't have a value, check if it's set here
+ if( ! empty( $s->data[$field] ) ) {
+ echo hf_field_value( $s->data[$field], 100 );
+ }
+
+ echo '</td>';
+ } ?>
</tr>
<?php } ?>
<?php if ( empty( $submissions ) ) {
Donate link: http://sparanoid.com/donate/
Tags: admin, administration, comment, comments, content, contents, excerpt, excerpts, feed, feeds, html, multisite, page, pages, plugin, plugins, post, posts, template, templates, text, title, wp_make_link_relative, widget, widgets, wpmu, writing
Requires at least: 2.1.0
-Tested up to: 4.7
-Stable tag: 0.1.5
+Tested up to: 4.9
+Stable tag: 0.1.6
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
== Description ==
-Relative URL applies `wp_make_link_relative` function to links (posts, categories, pages and etc.) to convert them to relative URLs. Useful for developers when debugging local WordPress instance on a mobile device (iPad. iPhone, etc.).
+Relative URL applies the `wp_make_link_relative` function to links (posts, categories, pages, etc.) to convert them to relative URLs. Useful for developers when debugging local WordPress instance on a mobile device (iPad, iPhone, etc.).
-**Notice**: This plugin is SHOULD be used for local development only. I haven't tested on a production environment, it **may** work with some issues, like unwanted URLs in RSS feed or sharing URLs are replaced with relative URLs, etc.
+**Notice**: This plugin SHOULD be used for local development only. I haven't tested on a production environment; it **may** work with some issues, like unwanted URLs in RSS feed or sharing URLs are replaced with relative URLs, etc.
More information please visit my [site](http://sparanoid.com/work/relative-url/).
== Upgrade Notice ==
+= 0.1.6 =
+* Fix ob_end_flush errors
+
= 0.1.5 =
* Use buffer method again, it's better with less issues since it mainly works for development environment.
== Changelog ==
+= 0.1.6 =
+* Fix ob_end_flush errors
+
= 0.1.5 =
* Use buffer method again, it's better with less issues since it mainly works for development environment.
Plugin Name: Relative URL
Plugin URI: http://sparanoid.com/work/relative-url/
Description: Relative URL applies wp_make_link_relative function to links (posts, categories, pages and etc.) to convert them to relative URLs. Useful for developers when debugging local WordPress instance on a mobile device (iPad. iPhone, etc.).
-Version: 0.1.5
+Version: 0.1.6
Author: Tunghsiao Liu
-Author URI: http://sparanoid.com/
+Author URI: https://sparanoid.com/
Author Email: t@sparanoid.com
License: GPLv2 or later
// Modified from https://github.com/retlehs/roots/issues/490
-// This makes paths realitive for NEW content.
-// For previously posted content, full urls are already loaded in to the database and will need to be updated.
+// This makes paths relative for NEW content.
+// For previously posted content, full urls are already loaded into the database and will need to be updated.
// for media and image paths - update wp admin: settings>media
-// set "Full URL path to files" feild to '/your-upload-folder-name/'
+// set "Full URL path to files" field to '/your-upload-folder-name/'
// This would be '/assets/' for a default roots install.
// http://www.deluxeblogtips.com/2012/06/relative-urls.html
$caps[] = $post_type->cap->delete_private_posts;
}
}
+
+ /*
+ * Setting the privacy policy page requires `manage_privacy_options`,
+ * so deleting it should require that too.
+ */
+ if ( (int) get_option( 'wp_page_for_privacy_policy' ) === $post->ID ) {
+ $caps = array_merge( $caps, map_meta_cap( 'manage_privacy_options', $user_id ) );
+ }
+
break;
// edit_post breaks down to edit_posts, edit_published_posts, or
// edit_others_posts
$caps[] = $post_type->cap->edit_private_posts;
}
}
+
+ /*
+ * Setting the privacy policy page requires `manage_privacy_options`,
+ * so editing it should require that too.
+ */
+ if ( (int) get_option( 'wp_page_for_privacy_policy' ) === $post->ID ) {
+ $caps = array_merge( $caps, map_meta_cap( 'manage_privacy_options', $user_id ) );
+ }
+
break;
case 'read_post':
case 'read_page':
case 'add_user_meta':
list( $_, $object_type, $_ ) = explode( '_', $cap );
$object_id = (int) $args[0];
+ $object_subtype = get_object_subtype( $object_type, $object_id );
- switch ( $object_type ) {
- case 'post':
- $post = get_post( $object_id );
- if ( ! $post ) {
- break;
- }
-
- $sub_type = get_post_type( $post );
- break;
-
- case 'comment':
- $comment = get_comment( $object_id );
- if ( ! $comment ) {
- break;
- }
-
- $sub_type = empty( $comment->comment_type ) ? 'comment' : $comment->comment_type;
- break;
-
- case 'term':
- $term = get_term( $object_id );
- if ( ! $term instanceof WP_Term ) {
- break;
- }
-
- $sub_type = $term->taxonomy;
- break;
-
- case 'user':
- $user = get_user_by( 'id', $object_id );
- if ( ! $user ) {
- break;
- }
-
- $sub_type = 'user';
- break;
- }
-
- if ( empty( $sub_type ) ) {
+ if ( empty( $object_subtype ) ) {
$caps[] = 'do_not_allow';
break;
}
$meta_key = isset( $args[1] ) ? $args[1] : false;
- $has_filter = has_filter( "auth_{$object_type}_meta_{$meta_key}" ) || has_filter( "auth_{$object_type}_{$sub_type}_meta_{$meta_key}" );
- if ( $meta_key && $has_filter ) {
+ if ( $meta_key ) {
+ $allowed = ! is_protected_meta( $meta_key, $object_type );
+
+ if ( ! empty( $object_subtype ) && has_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ) ) {
+
+ /**
+ * Filters whether the user is allowed to edit a specific meta key of a specific object type and subtype.
+ *
+ * The dynamic portions of the hook name, `$object_type`, `$meta_key`,
+ * and `$object_subtype`, refer to the metadata object type (comment, post, term or user),
+ * the meta key value, and the object subtype respectively.
+ *
+ * @since 4.9.8
+ *
+ * @param bool $allowed Whether the user can add the object meta. Default false.
+ * @param string $meta_key The meta key.
+ * @param int $object_id Object ID.
+ * @param int $user_id User ID.
+ * @param string $cap Capability name.
+ * @param string[] $caps Array of the user's capabilities.
+ */
+ $allowed = apply_filters( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $allowed, $meta_key, $object_id, $user_id, $cap, $caps );
+ } else {
- /**
- * Filters whether the user is allowed to edit meta.
- *
- * Use the {@see auth_post_$object_type_meta_$meta_key} filter to modify capabilities for
- * specific object types. Return true to have the mapped meta caps from edit_{$object_type} apply.
- *
- * The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
- * The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
- *
- * @since 3.3.0 As 'auth_post_meta_{$meta_key}'.
- * @since 4.6.0
- *
- * @param bool $allowed Whether the user can add the post meta. Default false.
- * @param string $meta_key The meta key.
- * @param int $post_id Post ID.
- * @param int $user_id User ID.
- * @param string $cap Capability name.
- * @param array $caps User capabilities.
- */
- $allowed = apply_filters( "auth_{$object_type}_meta_{$meta_key}", false, $meta_key, $object_id, $user_id, $cap, $caps );
+ /**
+ * Filters whether the user is allowed to edit a specific meta key of a specific object type.
+ *
+ * Return true to have the mapped meta caps from `edit_{$object_type}` apply.
+ *
+ * The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
+ * The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
+ *
+ * @since 3.3.0 As `auth_post_meta_{$meta_key}`.
+ * @since 4.6.0
+ *
+ * @param bool $allowed Whether the user can add the object meta. Default false.
+ * @param string $meta_key The meta key.
+ * @param int $object_id Object ID.
+ * @param int $user_id User ID.
+ * @param string $cap Capability name.
+ * @param string[] $caps Array of the user's capabilities.
+ */
+ $allowed = apply_filters( "auth_{$object_type}_meta_{$meta_key}", $allowed, $meta_key, $object_id, $user_id, $cap, $caps );
+ }
- /**
- * Filters whether the user is allowed to add post meta to a post of a given type.
- *
- * Use the {@see auth_$object_type_$sub_type_meta_$meta_key} filter to modify capabilities for
- * specific object types/subtypes. Return true to have the mapped meta caps from edit_{$object_type} apply.
- *
- * The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
- * The dynamic portion of the hook name, `$sub_type` refers to the object subtype being filtered.
- * The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
- *
- * @since 4.6.0 As 'auth_post_{$post_type}_meta_{$meta_key}'.
- * @since 4.7.0
- *
- * @param bool $allowed Whether the user can add the post meta. Default false.
- * @param string $meta_key The meta key.
- * @param int $post_id Post ID.
- * @param int $user_id User ID.
- * @param string $cap Capability name.
- * @param array $caps User capabilities.
- */
- $allowed = apply_filters( "auth_{$object_type}_{$sub_type}_meta_{$meta_key}", $allowed, $meta_key, $object_id, $user_id, $cap, $caps );
+ if ( ! empty( $object_subtype ) ) {
+
+ /**
+ * Filters whether the user is allowed to edit meta for specific object types/subtypes.
+ *
+ * Return true to have the mapped meta caps from `edit_{$object_type}` apply.
+ *
+ * The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
+ * The dynamic portion of the hook name, `$object_subtype` refers to the object subtype being filtered.
+ * The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
+ *
+ * @since 4.6.0 As `auth_post_{$post_type}_meta_{$meta_key}`.
+ * @since 4.7.0
+ * @deprecated 4.9.8 Use `auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}`
+ *
+ * @param bool $allowed Whether the user can add the object meta. Default false.
+ * @param string $meta_key The meta key.
+ * @param int $object_id Object ID.
+ * @param int $user_id User ID.
+ * @param string $cap Capability name.
+ * @param string[] $caps Array of the user's capabilities.
+ */
+ $allowed = apply_filters_deprecated( "auth_{$object_type}_{$object_subtype}_meta_{$meta_key}", array( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ), '4.9.8', "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" );
+ }
if ( ! $allowed ) {
$caps[] = $cap;
}
- } elseif ( $meta_key && is_protected_meta( $meta_key, $object_type ) ) {
- $caps[] = $cap;
}
break;
case 'edit_comment':
$caps[] = 'manage_options';
}
break;
+ case 'export_others_personal_data':
+ case 'erase_others_personal_data':
+ case 'manage_privacy_options':
+ $caps[] = is_multisite() ? 'manage_network' : 'manage_options';
+ break;
default:
// Handle meta capabilities for custom post types.
global $post_type_meta_caps;
// Prepend list of posts with nav_menus_created_posts search results on first page.
$nav_menus_created_posts_setting = $this->manager->get_setting( 'nav_menus_created_posts' );
- if ( 1 === $args['pagenum'] && $nav_menus_created_posts_setting && count( $nav_menus_created_posts_setting ) > 0 ) {
+ if ( 1 === $args['pagenum'] && $nav_menus_created_posts_setting && count( $nav_menus_created_posts_setting->value() ) > 0 ) {
$stub_post_query = new WP_Query( array_merge(
$query,
array(
// Back-compat for the `htmledit_pre` and `richedit_pre` filters
if ( 'html' === $default_editor && has_filter( 'htmledit_pre' ) ) {
- // TODO: needs _deprecated_filter(), use _deprecated_function() as substitute for now
- _deprecated_function( 'add_filter( htmledit_pre )', '4.3.0', 'add_filter( format_for_editor )' );
- $content = apply_filters( 'htmledit_pre', $content );
+ /** This filter is documented in wp-includes/deprecated.php */
+ $content = apply_filters_deprecated( 'htmledit_pre', array( $content ), '4.3.0', 'format_for_editor' );
} elseif ( 'tinymce' === $default_editor && has_filter( 'richedit_pre' ) ) {
- _deprecated_function( 'add_filter( richedit_pre )', '4.3.0', 'add_filter( format_for_editor )' );
- $content = apply_filters( 'richedit_pre', $content );
+ /** This filter is documented in wp-includes/deprecated.php */
+ $content = apply_filters_deprecated( 'richedit_pre', array( $content ), '4.3.0', 'format_for_editor' );
}
if ( false !== stripos( $content, 'textarea' ) ) {
}
$ext_plugins .= 'tinyMCEPreInit.load_ext("' . $plugurl . '", "' . $mce_locale . '");' . "\n";
- $ext_plugins .= 'tinymce.PluginManager.load("' . $name . '", "' . $url . '");' . "\n";
}
}
}
$version = 'ver=' . $tinymce_version;
$baseurl = self::get_baseurl();
- $compressed = $compress_scripts && $concatenate_scripts && isset($_SERVER['HTTP_ACCEPT_ENCODING'])
- && false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');
+ $has_custom_theme = false;
+ foreach ( self::$mce_settings as $init ) {
+ if ( ! empty( $init['theme_url'] ) ) {
+ $has_custom_theme = true;
+ break;
+ }
+ }
+
+ $compressed = $compress_scripts && $concatenate_scripts && isset( $_SERVER['HTTP_ACCEPT_ENCODING'] )
+ && false !== stripos( $_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip' ) && ! $has_custom_theme;
// Load tinymce.js when running from /src, else load wp-tinymce.js.gz (production) or tinymce.min.js (SCRIPT_DEBUG)
$mce_suffix = false !== strpos( get_bloginfo( 'version' ), '-src' ) ? '' : '.min';
$cache_key = "get_terms:$key:$last_changed";
$cache = wp_cache_get( $cache_key, 'terms' );
if ( false !== $cache ) {
- if ( 'all' === $_fields ) {
- $cache = array_map( 'get_term', $cache );
+ if ( 'all' === $_fields || 'all_with_object_id' === $_fields ) {
+ $cache = $this->populate_terms( $cache );
}
$this->terms = $cache;
wp_cache_add( $cache_key, $terms, 'terms', DAY_IN_SECONDS );
if ( 'all' === $_fields || 'all_with_object_id' === $_fields ) {
- $terms = array_map( 'get_term', $terms );
+ $terms = $this->populate_terms( $terms );
}
$this->terms = $terms;
return $wpdb->prepare( '((t.name LIKE %s) OR (t.slug LIKE %s))', $like, $like );
}
+
+ /**
+ * Creates an array of term objects from an array of term IDs.
+ *
+ * Also discards invalid term objects.
+ *
+ * @since 4.9.8
+ *
+ * @param array $term_ids Term IDs.
+ * @return array
+ */
+ protected function populate_terms( $term_ids ) {
+ $terms = array();
+
+ if ( ! is_array( $term_ids ) ) {
+ return $terms;
+ }
+
+ foreach ( $term_ids as $key => $term_id ) {
+ $term = get_term( $term_id );
+ if ( $term instanceof WP_Term ) {
+ $terms[ $key ] = $term;
+ }
+ }
+
+ return $terms;
+ }
}
$post_templates = $this->get_post_templates();
$post_templates = isset( $post_templates[ $post_type ] ) ? $post_templates[ $post_type ] : array();
+ /**
+ * Filters list of page templates for a theme.
+ *
+ * @since 4.9.6
+ *
+ * @param string[] $post_templates Array of page templates. Keys are filenames,
+ * values are translated names.
+ * @param WP_Theme $this The theme object.
+ * @param WP_Post|null $post The post being edited, provided for context, or null.
+ * @param string $post_type Post type to get the templates for.
+ */
+ $post_templates = (array) apply_filters( 'theme_templates', $post_templates, $this, $post, $post_type );
+
/**
* Filters list of page templates for a theme.
*
* @param WP_Post|null $post The post being edited, provided for context, or null.
* @param string $post_type Post type to get the templates for.
*/
- return (array) apply_filters( "theme_{$post_type}_templates", $post_templates, $this, $post, $post_type );
+ $post_templates = (array) apply_filters( "theme_{$post_type}_templates", $post_templates, $this, $post, $post_type );
+
+ return $post_templates;
}
/**
* @since 4.5.0 The 'author', 'email', and 'url' form fields are limited to 245, 100,
* and 200 characters, respectively.
* @since 4.6.0 Introduced the 'action' argument.
+ * @since 4.9.6 Introduced the 'cookies' default comment field.
*
* @param array $args {
* Optional. Default arguments and form fields to override.
* @type array $fields {
* Default comment fields, filterable by default via the {@see 'comment_form_default_fields'} hook.
*
- * @type string $author Comment author field HTML.
- * @type string $email Comment author email field HTML.
- * @type string $url Comment author URL field HTML.
+ * @type string $author Comment author field HTML.
+ * @type string $email Comment author email field HTML.
+ * @type string $url Comment author URL field HTML.
+ * @type string $cookies Comment cookie opt-in field HTML.
* }
* @type string $comment_field The comment textarea field HTML.
* @type string $must_log_in HTML element for a 'must be logged in to comment' message.
$html_req = ( $req ? " required='required'" : '' );
$html5 = 'html5' === $args['format'];
$fields = array(
- 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
- '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30" maxlength="245"' . $html_req . ' /></p>',
- 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
- '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30" maxlength="100" aria-describedby="email-notes"' . $html_req . ' /></p>',
- 'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label> ' .
- '<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" maxlength="200" /></p>',
+ 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
+ '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30" maxlength="245"' . $html_req . ' /></p>',
+ 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' .
+ '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30" maxlength="100" aria-describedby="email-notes"' . $html_req . ' /></p>',
+ 'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label> ' .
+ '<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" maxlength="200" /></p>',
);
- $required_text = sprintf( ' ' . __('Required fields are marked %s'), '<span class="required">*</span>' );
+ if ( has_action( 'set_comment_cookies', 'wp_set_comment_cookies' ) && get_option( 'show_comments_cookies_opt_in' ) ) {
+ $consent = empty( $commenter['comment_author_email'] ) ? '' : ' checked="checked"';
+ $fields['cookies'] = '<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"' . $consent . ' />' .
+ '<label for="wp-comment-cookies-consent">' . __( 'Save my name, email, and website in this browser for the next time I comment.' ) . '</label></p>';
+
+ // Ensure that the passed fields include cookies consent.
+ if ( isset( $args['fields'] ) && ! isset( $args['fields']['cookies'] ) ) {
+ $args['fields']['cookies'] = $fields['cookies'];
+ }
+ }
+
+ $required_text = sprintf( ' ' . __( 'Required fields are marked %s' ), '<span class="required">*</span>' );
/**
* Filters the default comment form fields.
* Sets the cookies used to store an unauthenticated commentator's identity. Typically used
* to recall previous comments by this commentator that are still held in moderation.
*
- * @param WP_Comment $comment Comment object.
- * @param object $user Comment author's object.
- *
* @since 3.4.0
+ * @since 4.9.6 The `$cookies_consent` parameter was added.
+ *
+ * @param WP_Comment $comment Comment object.
+ * @param WP_User $user Comment author's user object. The user may not exist.
+ * @param boolean $cookies_consent Optional. Comment author's consent to store cookies. Default true.
*/
-function wp_set_comment_cookies($comment, $user) {
- if ( $user->exists() )
+function wp_set_comment_cookies( $comment, $user, $cookies_consent = true ) {
+ // If the user already exists, or the user opted out of cookies, don't set cookies.
+ if ( $user->exists() ) {
return;
+ }
+
+ if ( false === $cookies_consent ) {
+ // Remove any existing cookies.
+ $past = time() - YEAR_IN_SECONDS;
+ setcookie( 'comment_author_' . COOKIEHASH, ' ', $past, COOKIEPATH, COOKIE_DOMAIN );
+ setcookie( 'comment_author_email_' . COOKIEHASH, ' ', $past, COOKIEPATH, COOKIE_DOMAIN );
+ setcookie( 'comment_author_url_' . COOKIEHASH, ' ', $past, COOKIEPATH, COOKIE_DOMAIN );
+
+ return;
+ }
/**
* Filters the lifetime of the comment cookie in seconds.
*
* @param int $seconds Comment cookie lifetime. Default 30000000.
*/
- $comment_cookie_lifetime = apply_filters( 'comment_cookie_lifetime', 30000000 );
+ $comment_cookie_lifetime = time() + apply_filters( 'comment_cookie_lifetime', 30000000 );
$secure = ( 'https' === parse_url( home_url(), PHP_URL_SCHEME ) );
- setcookie( 'comment_author_' . COOKIEHASH, $comment->comment_author, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
- setcookie( 'comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
- setcookie( 'comment_author_url_' . COOKIEHASH, esc_url($comment->comment_author_url), time() + $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
+ setcookie( 'comment_author_' . COOKIEHASH, $comment->comment_author, $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
+ setcookie( 'comment_author_email_' . COOKIEHASH, $comment->comment_author_email, $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
+ setcookie( 'comment_author_url_' . COOKIEHASH, esc_url( $comment->comment_author_url ), $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
}
/**
return get_comment( $comment_id );
}
+
+/**
+ * Registers the personal data exporter for comments.
+ *
+ * @since 4.9.6
+ *
+ * @param array $exporters An array of personal data exporters.
+ * @return array $exporters An array of personal data exporters.
+ */
+function wp_register_comment_personal_data_exporter( $exporters ) {
+ $exporters['wordpress-comments'] = array(
+ 'exporter_friendly_name' => __( 'WordPress Comments' ),
+ 'callback' => 'wp_comments_personal_data_exporter',
+ );
+
+ return $exporters;
+}
+
+/**
+ * Finds and exports personal data associated with an email address from the comments table.
+ *
+ * @since 4.9.6
+ *
+ * @param string $email_address The comment author email address.
+ * @param int $page Comment page.
+ * @return array $return An array of personal data.
+ */
+function wp_comments_personal_data_exporter( $email_address, $page = 1 ) {
+ // Limit us to 500 comments at a time to avoid timing out.
+ $number = 500;
+ $page = (int) $page;
+
+ $data_to_export = array();
+
+ $comments = get_comments(
+ array(
+ 'author_email' => $email_address,
+ 'number' => $number,
+ 'paged' => $page,
+ 'order_by' => 'comment_ID',
+ 'order' => 'ASC',
+ 'update_comment_meta_cache' => false,
+ )
+ );
+
+ $comment_prop_to_export = array(
+ 'comment_author' => __( 'Comment Author' ),
+ 'comment_author_email' => __( 'Comment Author Email' ),
+ 'comment_author_url' => __( 'Comment Author URL' ),
+ 'comment_author_IP' => __( 'Comment Author IP' ),
+ 'comment_agent' => __( 'Comment Author User Agent' ),
+ 'comment_date' => __( 'Comment Date' ),
+ 'comment_content' => __( 'Comment Content' ),
+ 'comment_link' => __( 'Comment URL' ),
+ );
+
+ foreach ( (array) $comments as $comment ) {
+ $comment_data_to_export = array();
+
+ foreach ( $comment_prop_to_export as $key => $name ) {
+ $value = '';
+
+ switch ( $key ) {
+ case 'comment_author':
+ case 'comment_author_email':
+ case 'comment_author_url':
+ case 'comment_author_IP':
+ case 'comment_agent':
+ case 'comment_date':
+ $value = $comment->{$key};
+ break;
+
+ case 'comment_content':
+ $value = get_comment_text( $comment->comment_ID );
+ break;
+
+ case 'comment_link':
+ $value = get_comment_link( $comment->comment_ID );
+ $value = sprintf(
+ '<a href="%s" target="_blank" rel="noreferrer noopener">%s</a>',
+ esc_url( $value ),
+ esc_html( $value )
+ );
+ break;
+ }
+
+ if ( ! empty( $value ) ) {
+ $comment_data_to_export[] = array(
+ 'name' => $name,
+ 'value' => $value,
+ );
+ }
+ }
+
+ $data_to_export[] = array(
+ 'group_id' => 'comments',
+ 'group_label' => __( 'Comments' ),
+ 'item_id' => "comment-{$comment->comment_ID}",
+ 'data' => $comment_data_to_export,
+ );
+ }
+
+ $done = count( $comments ) < $number;
+
+ return array(
+ 'data' => $data_to_export,
+ 'done' => $done,
+ );
+}
+
+/**
+ * Registers the personal data eraser for comments.
+ *
+ * @since 4.9.6
+ *
+ * @param array $erasers An array of personal data erasers.
+ * @return array $erasers An array of personal data erasers.
+ */
+function wp_register_comment_personal_data_eraser( $erasers ) {
+ $erasers['wordpress-comments'] = array(
+ 'eraser_friendly_name' => __( 'WordPress Comments' ),
+ 'callback' => 'wp_comments_personal_data_eraser',
+ );
+
+ return $erasers;
+}
+
+/**
+ * Erases personal data associated with an email address from the comments table.
+ *
+ * @since 4.9.6
+ *
+ * @param string $email_address The comment author email address.
+ * @param int $page Comment page.
+ * @return array
+ */
+function wp_comments_personal_data_eraser( $email_address, $page = 1 ) {
+ global $wpdb;
+
+ if ( empty( $email_address ) ) {
+ return array(
+ 'items_removed' => false,
+ 'items_retained' => false,
+ 'messages' => array(),
+ 'done' => true,
+ );
+ }
+
+ // Limit us to 500 comments at a time to avoid timing out.
+ $number = 500;
+ $page = (int) $page;
+ $items_removed = false;
+ $items_retained = false;
+
+ $comments = get_comments(
+ array(
+ 'author_email' => $email_address,
+ 'number' => $number,
+ 'paged' => $page,
+ 'order_by' => 'comment_ID',
+ 'order' => 'ASC',
+ 'include_unapproved' => true,
+ )
+ );
+
+ /* translators: Name of a comment's author after being anonymized. */
+ $anon_author = __( 'Anonymous' );
+ $messages = array();
+
+ foreach ( (array) $comments as $comment ) {
+ $anonymized_comment = array();
+ $anonymized_comment['comment_agent'] = '';
+ $anonymized_comment['comment_author'] = $anon_author;
+ $anonymized_comment['comment_author_email'] = '';
+ $anonymized_comment['comment_author_IP'] = wp_privacy_anonymize_data( 'ip', $comment->comment_author_IP );
+ $anonymized_comment['comment_author_url'] = '';
+ $anonymized_comment['user_id'] = 0;
+
+ $comment_id = (int) $comment->comment_ID;
+
+ /**
+ * Filters whether to anonymize the comment.
+ *
+ * @since 4.9.6
+ *
+ * @param bool|string Whether to apply the comment anonymization (bool).
+ * Custom prevention message (string). Default true.
+ * @param WP_Comment $comment WP_Comment object.
+ * @param array $anonymized_comment Anonymized comment data.
+ */
+ $anon_message = apply_filters( 'wp_anonymize_comment', true, $comment, $anonymized_comment );
+
+ if ( true !== $anon_message ) {
+ if ( $anon_message && is_string( $anon_message ) ) {
+ $messages[] = esc_html( $anon_message );
+ } else {
+ /* translators: %d: Comment ID */
+ $messages[] = sprintf( __( 'Comment %d contains personal data but could not be anonymized.' ), $comment_id );
+ }
+
+ $items_retained = true;
+
+ continue;
+ }
+
+ $args = array(
+ 'comment_ID' => $comment_id,
+ );
+
+ $updated = $wpdb->update( $wpdb->comments, $anonymized_comment, $args );
+
+ if ( $updated ) {
+ $items_removed = true;
+ clean_comment_cache( $comment_id );
+ } else {
+ $items_retained = true;
+ }
+ }
+
+ $done = count( $comments ) < $number;
+
+ return array(
+ 'items_removed' => $items_removed,
+ 'items_retained' => $items_retained,
+ 'messages' => $messages,
+ 'done' => $done,
+ );
+}
if ( ! function_exists( 'spl_autoload_register' ) ) {
require_once ABSPATH . WPINC . '/spl-autoload-compat.php';
}
+
+if ( ! function_exists( 'is_countable' ) ) {
+ /**
+ * Polyfill for is_countable() function added in PHP 7.3.
+ *
+ * Verify that the content of a variable is an array or an object
+ * implementing the Countable interface.
+ *
+ * @since 4.9.6
+ *
+ * @param mixed $var The value to check.
+ *
+ * @return bool True if `$var` is countable, false otherwise.
+ */
+ function is_countable( $var ) {
+ return ( is_array( $var )
+ || $var instanceof Countable
+ || $var instanceof SimpleXMLElement
+ || $var instanceof ResourceBundle
+ );
+ }
+}
+
+if ( ! function_exists( 'is_iterable' ) ) {
+ /**
+ * Polyfill for is_iterable() function added in PHP 7.1.
+ *
+ * Verify that the content of a variable is an array or an object
+ * implementing the Traversable interface.
+ *
+ * @since 4.9.6
+ *
+ * @param mixed $var The value to check.
+ *
+ * @return bool True if `$var` is iterable, false otherwise.
+ */
+ function is_iterable( $var ) {
+ return ( is_array( $var ) || $var instanceof Traversable );
+ }
+}
/* TinyMCE widgets/containers */
+.mce-tinymce {
+ box-shadow: none;
+}
+
.mce-container,
.mce-container *,
.mce-widget,
opacity: 0.7;
filter: alpha(opacity=70);
transition: none;
+ background: #000;
}
.mce-window {
.mce-menu-item {
border: none;
margin-bottom: 2px;
+ padding: 6px 12px 6px 15px;
}
.mce-menu-has-icons i.mce-ico {
box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.3 );
}
+.mce-btn.mce-active,
+.mce-btn.mce-active button,
+.mce-btn.mce-active:hover button,
+.mce-btn.mce-active i,
+.mce-btn.mce-active:hover i {
+ color: inherit;
+}
+
.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus {
border-color: #23282d;
color: #fff;
}
-.mce-menu .mce-menu-item-preview.mce-active {
- border-right: none;
-}
-
-.mce-menu .mce-menu-item-preview.mce-active .mce-text {
- color: #fff;
+.mce-menu-item:hover .mce-text,
+.mce-menu-item:focus .mce-text,
+.mce-menu-item:hover .mce-ico,
+.mce-menu-item:focus .mce-ico,
+.mce-menu-item:hover .mce-menu-shortcut,
+.mce-menu-item:focus .mce-menu-shortcut,
+.mce-menu-item.mce-active .mce-menu-shortcut,
+.mce-menu-item.mce-disabled:hover .mce-text,
+.mce-menu-item.mce-disabled:hover .mce-ico {
+ color: inherit;
}
.mce-menu .mce-menu-item.mce-disabled {
/*! This file is auto-generated */
-#wp-link-wrap,.mce-window{box-shadow:0 3px 6px rgba(0,0,0,.3)}.mce-window .mce-wp-help *,.wp-editor-area{box-sizing:border-box}.mce-container,.mce-container *,.mce-widget,.mce-widget *{color:inherit;font-family:inherit}.mce-container .mce-monospace,.mce-widget .mce-monospace{font-family:Consolas,Monaco,monospace;font-size:13px;line-height:150%}#mce-modal-block,#mce-modal-block.mce-fade{opacity:.7;filter:alpha(opacity=70);transition:none}.mce-window{border-radius:0;-webkit-font-smoothing:subpixel-antialiased;transition:none}.mce-window .mce-container-body.mce-abs-layout{overflow:visible}.mce-window .mce-window-head{background:#fcfcfc;border-bottom:1px solid #ddd;padding:0;min-height:36px}.mce-window .mce-window-head .mce-title{color:#444;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 16px 0 36px}.mce-window .mce-window-head .mce-close,.mce-window-head .mce-close .mce-i-remove{color:transparent;top:0;left:0;width:36px;height:36px;padding:0;line-height:36px;text-align:center}.mce-window-head .mce-close .mce-i-remove:before{font:400 20px/36px dashicons;text-align:center;color:#666;width:36px;height:36px;display:block}.mce-window-head .mce-close:focus .mce-i-remove:before,.mce-window-head .mce-close:hover .mce-i-remove:before{color:#00a0d2}.mce-window-head .mce-close:focus .mce-i-remove,div.mce-tab:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.mce-window .mce-window-head .mce-dragh{width:calc(100% - 36px)}.mce-window .mce-foot{border-top:1px solid #ddd}#wp-link .query-results,.mce-checkbox i.mce-i-checkbox,.mce-textbox{border:1px solid #ddd;border-radius:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);transition:.05s all ease-in-out}#wp-link .query-results:focus,.mce-checkbox:focus i.mce-i-checkbox,.mce-textbox.mce-focus,.mce-textbox:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.mce-window .mce-wp-help{height:360px;width:460px;overflow:auto}.mce-window .mce-wp-help>.mce-container-body{width:auto!important}.mce-window .wp-editor-help{padding:10px 20px 0 10px}.mce-window .wp-editor-help h2,.mce-window .wp-editor-help p{margin:8px 0;white-space:normal;font-size:14px;font-weight:400}.mce-window .wp-editor-help table{width:100%;margin-bottom:20px}.mce-window .wp-editor-help table.wp-help-single{margin:0 8px 20px}.mce-window .wp-editor-help table.fixed{table-layout:fixed}.mce-window .wp-editor-help table.fixed td:nth-child(odd),.mce-window .wp-editor-help table.fixed th:nth-child(odd){width:12%}.mce-window .wp-editor-help table.fixed td:nth-child(even),.mce-window .wp-editor-help table.fixed th:nth-child(even){width:38%}.mce-window .wp-editor-help table.fixed th:nth-child(odd){padding:5px 0 0}.mce-window .wp-editor-help td,.mce-window .wp-editor-help th{font-size:13px;padding:5px;vertical-align:middle;word-wrap:break-word;white-space:normal}.mce-window .wp-editor-help th{font-weight:600;padding-bottom:0}.mce-window .wp-editor-help kbd{font-family:monospace;padding:2px 7px 3px;font-weight:600;margin:0;background:#eaeaea;background:rgba(0,0,0,.08)}.mce-window .wp-help-th-center td:nth-child(odd),.mce-window .wp-help-th-center th:nth-child(odd){text-align:center}.mce-floatpanel.mce-popover,.mce-menu{border-color:rgba(0,0,0,.15);border-radius:0;box-shadow:0 3px 5px rgba(0,0,0,.2)}.mce-floatpanel.mce-popover.mce-bottom,.mce-menu{margin-top:2px}.mce-floatpanel .mce-arrow{display:none}.mce-menu .mce-container-body{min-width:160px}.mce-menu-item{border:none;margin-bottom:2px}.mce-menu-has-icons i.mce-ico{line-height:20px}div.mce-panel{border:0;background:#fff}.mce-panel.mce-menu{border:1px solid #ddd}div.mce-tab{line-height:13px}div.mce-toolbar-grp{border-bottom:1px solid #ddd;background:#f5f5f5;padding:0;position:relative}div.mce-inline-toolbar-grp{border:1px solid #a0a5aa;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.15);box-sizing:border-box;margin-bottom:8px;position:absolute;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;max-width:98%;z-index:100100}div.mce-inline-toolbar-grp>div.mce-stack-layout{padding:1px}div.mce-inline-toolbar-grp.mce-arrow-up{margin-bottom:0;margin-top:8px}div.mce-inline-toolbar-grp:after,div.mce-inline-toolbar-grp:before{position:absolute;right:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-menu.mce-menu-align .mce-menu-item-normal,.quicktags-toolbar,.wp-editor-tools,.wp-editor-wrap,.wp-switch-editor{position:relative}div.mce-inline-toolbar-grp.mce-arrow-up:before{top:-9px;border-bottom-color:#a0a5aa;border-width:0 9px 9px;margin-right:-9px}div.mce-inline-toolbar-grp.mce-arrow-down:before{bottom:-9px;border-top-color:#a0a5aa;border-width:9px 9px 0;margin-right:-9px}div.mce-inline-toolbar-grp.mce-arrow-up:after{top:-8px;border-bottom-color:#f5f5f5;border-width:0 8px 8px;margin-right:-8px}div.mce-inline-toolbar-grp.mce-arrow-down:after{bottom:-8px;border-top-color:#f5f5f5;border-width:8px 8px 0;margin-right:-8px}div.mce-inline-toolbar-grp.mce-arrow-left:after,div.mce-inline-toolbar-grp.mce-arrow-left:before{margin:0}div.mce-inline-toolbar-grp.mce-arrow-left:before{right:20px}div.mce-inline-toolbar-grp.mce-arrow-left:after{right:21px}div.mce-inline-toolbar-grp.mce-arrow-right:after,div.mce-inline-toolbar-grp.mce-arrow-right:before{right:auto;margin:0}div.mce-inline-toolbar-grp.mce-arrow-right:before{left:20px}div.mce-inline-toolbar-grp.mce-arrow-right:after{left:21px}div.mce-inline-toolbar-grp.mce-arrow-full{left:0}div.mce-inline-toolbar-grp.mce-arrow-full>div{width:100%;overflow-x:auto}div.mce-toolbar-grp>div{padding:3px}.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-left:32px}.mce-toolbar .mce-btn-group{margin:0}div.mce-statusbar{border-top:1px solid #e5e5e5}div.mce-path{padding:2px 10px;margin:0}.mce-path,.mce-path .mce-divider,.mce-path-item{font-size:12px}.mce-toolbar .mce-btn,.qt-dfw{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none;cursor:pointer}.mce-btn .mce-txt{direction:inherit;text-align:inherit}.mce-toolbar .mce-btn-group .mce-btn,.qt-dfw{border:1px solid transparent;margin:2px;border-radius:2px}.mce-toolbar .mce-btn-group .mce-btn:focus,.mce-toolbar .mce-btn-group .mce-btn:hover,.qt-dfw:focus,.qt-dfw:hover{background:#fafafa;border-color:#555d66;color:#23282d;box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);outline:0}.mce-toolbar .mce-btn-group .mce-btn.mce-active,.mce-toolbar .mce-btn-group .mce-btn:active,.qt-dfw.active{background:#ebebeb;border-color:#555d66;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.3)}.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover{border-color:#23282d}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover{color:#a0a5aa;background:0 0;border-color:#ddd;text-shadow:0 1px 0 #fff;box-shadow:none}.mce-menu .mce-menu-item-preview.mce-active .mce-text,.mce-toolbar .mce-btn-group .mce-btn.mce-primary .mce-ico{color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus{border-color:#555d66}.mce-toolbar .mce-btn-group .mce-first,.mce-toolbar .mce-btn-group .mce-last{border-color:transparent}.mce-toolbar .mce-btn button,.qt-dfw{padding:2px 3px;line-height:normal}.mce-toolbar .mce-listbox button{font-size:13px;line-height:20px;padding-right:6px;padding-left:20px}.mce-toolbar .mce-btn i{text-shadow:none}.mce-toolbar .mce-btn-group>div{white-space:normal}.mce-toolbar .mce-colorbutton .mce-open{border-left:0}.mce-toolbar .mce-colorbutton .mce-preview{margin:0;padding:0;top:auto;bottom:2px;right:3px;height:3px;width:20px;background:#555d66}.mce-toolbar .mce-btn-group .mce-btn.mce-primary{min-width:0;background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:2px 3px 1px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover{background:#008ec2;border-color:#006799;color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus{box-shadow:0 0 1px 1px #33b3db}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox{border-radius:0;direction:rtl;background:#fff;border:1px solid #ddd;box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2)}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{border-color:#b4b9be}.mce-panel .mce-btn i.mce-caret{border-top:6px solid #555d66;margin-right:2px;margin-left:2px}.mce-listbox i.mce-caret{left:4px}.mce-panel .mce-btn:focus i.mce-caret,.mce-panel .mce-btn:hover i.mce-caret{border-top-color:#23282d}.mce-panel .mce-active i.mce-caret{border-top:0;border-bottom:6px solid #23282d;margin-top:7px}.mce-listbox.mce-active i.mce-caret{margin-top:-3px}.mce-toolbar .mce-splitbtn:hover .mce-open{border-left-color:transparent}.mce-toolbar .mce-splitbtn .mce-open.mce-active{background:0 0;outline:0}.mce-menu .mce-menu-item-normal.mce-active,.mce-menu .mce-menu-item-preview.mce-active,.mce-menu .mce-menu-item.mce-selected,.mce-menu .mce-menu-item:focus,.mce-menu .mce-menu-item:hover{background:#0073aa;color:#fff}.mce-menu .mce-menu-item-preview.mce-active{border-right:none}.mce-menu .mce-menu-item.mce-disabled{cursor:default}.mce-menu .mce-menu-item.mce-disabled:hover{background:#ccc}div.mce-menubar{border-color:#e5e5e5;background:#fff;border-width:0 0 1px}.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus,.mce-menubar .mce-menubtn:hover{border-color:transparent;background:0 0}.mce-menubar .mce-menubtn:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.mce-menu-item-sep:hover,div.mce-menu .mce-menu-item-sep{border-bottom:1px solid #ddd;height:0;margin:5px 0}.mce-menubtn span{margin-left:0;padding-right:3px}.mce-menu-has-icons i.mce-ico:before{margin-right:-2px}.mce-menu.mce-menu-align .mce-menu-shortcut{bottom:.6em;font-size:.9em}.mce-primary button,.mce-primary button i{text-align:center;color:#fff;text-shadow:none;padding:0;line-height:26px}.mce-window .mce-btn{color:#555;background:#f7f7f7;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0;cursor:pointer;border:1px solid #ccc;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-shadow:0 1px 0 #ccc}.mce-window .mce-btn::-moz-focus-inner{border-width:0;border-style:none;padding:0}.mce-window .mce-btn:focus,.mce-window .mce-btn:hover{background:#fafafa;border-color:#999;color:#23282d}.mce-window .mce-btn:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.mce-window .mce-btn:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);-webkit-transform:translateY(1px);transform:translateY(1px)}.mce-window .mce-btn.mce-disabled{color:#a0a5aa!important;border-color:#ddd!important;background:#f7f7f7!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default;-webkit-transform:none!important;transform:none!important}.mce-window .mce-btn.mce-primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799,-1px 0 1px #006799,0 1px 1px #006799,1px 0 1px #006799}.mce-window .mce-btn.mce-primary:focus,.mce-window .mce-btn.mce-primary:hover{background:#008ec2;border-color:#006799;color:#fff}.mce-window .mce-btn.mce-primary:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}.mce-window .mce-btn.mce-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.mce-window .mce-btn.mce-primary.mce-disabled{color:#66c6e4!important;background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.mce-toolbar .mce-ico,.qt-dfw{text-shadow:none;text-align:center}.mce-menubtn.mce-fixed-width span{overflow-x:hidden;text-overflow:ellipsis;width:82px}.mce-charmap{margin:3px}.mce-charmap td{padding:0;border-color:#ddd;cursor:pointer}.mce-charmap td:hover{background:#f3f3f3}.mce-charmap td div{width:18px;height:22px;line-height:22px}.mce-toolbar .mce-btn .mce-open,.qt-dfw{line-height:20px}.mce-tooltip{margin-top:2px}.rtl .mce-tooltip.wp-hide-mce-tooltip{display:none!important}.mce-tooltip-inner{border-radius:3px;box-shadow:0 3px 5px rgba(0,0,0,.2);color:#fff;font-size:12px}.mce-ico{font-family:tinymce,Arial}.mce-btn-small .mce-ico{font-family:tinymce-small,Arial}.mce-toolbar .mce-ico{color:#555d66;line-height:20px;width:20px;height:20px;margin:0;padding:0}.qt-dfw{color:#555d66;width:28px;height:26px}.mce-toolbar .mce-btn.mce-active .mce-open,.mce-toolbar .mce-btn:focus .mce-open,.mce-toolbar .mce-btn:hover .mce-open{border-right-color:#23282d}div.mce-notification{right:10%!important;left:10%}.mce-notification button.mce-close{left:6px;top:3px;font-weight:400;color:#555d66}.mce-notification button.mce-close:focus,.mce-notification button.mce-close:hover{color:#000}i.mce-i-aligncenter,i.mce-i-alignjustify,i.mce-i-alignleft,i.mce-i-alignright,i.mce-i-backcolor,i.mce-i-blockquote,i.mce-i-bold,i.mce-i-bullist,i.mce-i-charmap,i.mce-i-dashicon,i.mce-i-dfw,i.mce-i-forecolor,i.mce-i-fullscreen,i.mce-i-help,i.mce-i-hr,i.mce-i-indent,i.mce-i-italic,i.mce-i-link,i.mce-i-ltr,i.mce-i-numlist,i.mce-i-outdent,i.mce-i-pastetext,i.mce-i-pasteword,i.mce-i-redo,i.mce-i-remove,i.mce-i-removeformat,i.mce-i-spellchecker,i.mce-i-strikethrough,i.mce-i-underline,i.mce-i-undo,i.mce-i-unlink,i.mce-i-wp-media-library,i.mce-i-wp_adv,i.mce-i-wp_code,i.mce-i-wp_fullscreen,i.mce-i-wp_help,i.mce-i-wp_more,i.mce-i-wp_page{font:400 20px/1 dashicons;padding:0 0 0 2px;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:-2px}.qt-dfw{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i.mce-i-bold:before{content:"\f200"}i.mce-i-italic:before{content:"\f201"}i.mce-i-bullist:before{content:"\f203"}i.mce-i-numlist:before{content:"\f204"}i.mce-i-blockquote:before{content:"\f205"}i.mce-i-alignleft:before{content:"\f206"}i.mce-i-aligncenter:before{content:"\f207"}i.mce-i-alignright:before{content:"\f208"}i.mce-i-link:before{content:"\f103"}i.mce-i-unlink:before{content:"\f225"}i.mce-i-wp_more:before{content:"\f209"}i.mce-i-strikethrough:before{content:"\f224"}i.mce-i-spellchecker:before{content:"\f210"}.qt-dfw:before,i.mce-i-dfw:before,i.mce-i-fullscreen:before,i.mce-i-wp_fullscreen:before{content:"\f211"}i.mce-i-wp_adv:before{content:"\f212"}i.mce-i-underline:before{content:"\f213"}i.mce-i-alignjustify:before{content:"\f214"}i.mce-i-backcolor:before,i.mce-i-forecolor:before{content:"\f215"}i.mce-i-pastetext:before{content:"\f217"}i.mce-i-removeformat:before{content:"\f218"}i.mce-i-charmap:before{content:"\f220"}i.mce-i-outdent:before{content:"\f221"}i.mce-i-indent:before{content:"\f222"}i.mce-i-undo:before{content:"\f171"}i.mce-i-redo:before{content:"\f172"}i.mce-i-help:before,i.mce-i-wp_help:before{content:"\f223"}i.mce-i-wp-media-library:before{content:"\f104"}i.mce-i-ltr:before{content:"\f320"}i.mce-i-wp_page:before{content:"\f105"}i.mce-i-hr:before{content:"\f460"}i.mce-i-remove:before{content:"\f158"}i.mce-i-wp_code:before{content:"\f475"}.rtl i.mce-i-outdent:before{content:"\f222"}.rtl i.mce-i-indent:before{content:"\f221"}.wp-editor-tools{z-index:1}.wp-editor-tools:after{clear:both;content:"";display:table}.wp-editor-container{clear:both;border:1px solid #e5e5e5}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0;outline:0;display:block;resize:vertical}.rtl .wp-editor-area{font-family:Tahoma,Monaco,monospace}.locale-he-il .wp-editor-area{font-family:Arial,Monaco,monospace}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;box-shadow:none}.wp-editor-tabs{float:left}.wp-switch-editor{float:right;box-sizing:content-box;top:1px;background:#ebebeb;color:#666;cursor:pointer;font-size:13px;line-height:19px;height:20px;margin:5px 5px 0 0;padding:3px 8px 4px;border:1px solid #e5e5e5}.wp-switch-editor:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);outline:0;color:#23282d}.html-active .switch-html:focus,.tmce-active .switch-tmce:focus,.wp-switch-editor:active{box-shadow:none}.wp-switch-editor:active{background-color:#f5f5f5;box-shadow:none}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.html-active .switch-html,.tmce-active .switch-tmce{background:#f5f5f5;color:#555;border-bottom-color:#f5f5f5}.wp-media-buttons{float:right}.wp-media-buttons .button{margin-left:5px;margin-bottom:4px;padding-right:7px;padding-left:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-right:5px}.wp-media-buttons a{text-decoration:none;color:#444;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:18px;height:18px;vertical-align:text-top;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f104"}.quicktags-toolbar{padding:3px;border-bottom:1px solid #ddd;background:#f5f5f5;min-height:30px}.has-dfw .quicktags-toolbar{padding-left:35px}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:2px}.quicktags-toolbar input[value=link]{text-decoration:underline}.quicktags-toolbar input[value=del]{text-decoration:line-through}.quicktags-toolbar input[value="i"]{font-style:italic}.quicktags-toolbar input[value="b"]{font-weight:600}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw,.qt-dfw{position:absolute;top:0;left:0;margin:5px 0 0 5px}.qt-fullscreen{position:static;margin:2px}@media screen and (max-width:782px){.mce-toolbar .mce-btn button,.qt-dfw{padding:6px 7px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:6px 7px 5px}.mce-toolbar .mce-btn-group .mce-btn{margin:1px}.qt-dfw{width:36px;height:34px}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw{margin:4px 0 0 4px}.mce-toolbar .mce-colorbutton .mce-preview{right:8px;bottom:6px}.mce-window .mce-btn{padding:2px 0}.has-dfw .quicktags-toolbar,.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-left:40px}}@media screen and (min-width:782px){.wp-core-ui .quicktags-toolbar input.button.button-small{font-size:12px;height:26px;line-height:24px}}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:100020}#wp_delgallery,#wp_delimgbtn,#wp_editgallery,#wp_editimgbtn{border-color:#999;background-color:#eee;margin:2px;padding:2px;border-width:1px;border-style:solid;border-radius:3px}#wp_delgallery:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_editimgbtn:hover{border-color:#555;background-color:#ccc}#wp-link-wrap{display:none;background-color:#fff;width:500px;overflow:hidden;margin-right:-250px;position:fixed;top:50%;right:50%;z-index:100105;transition:height .2s,margin-top .2s;height:500px;margin-top:-250px}#wp-link-backdrop{display:none;position:fixed;top:0;right:0;left:0;bottom:0;min-height:360px;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}#wp-link{position:relative;height:100%}#wp-link-wrap .wp-link-text-field{display:none}#wp-link-wrap.has-text-field .wp-link-text-field{display:block}#link-modal-title{background:#fcfcfc;border-bottom:1px solid #ddd;height:36px;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 16px 0 36px}#wp-link-close{color:#666;padding:0;position:absolute;top:0;left:0;width:36px;height:36px;text-align:center;background:0 0;border:none;cursor:pointer}#wp-link-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:36px;height:36px;content:"\f158"}#wp-link-close:focus,#wp-link-close:hover{color:#00a0d2}#wp-link-close:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#wp-link-wrap #link-selector{-webkit-overflow-scrolling:touch;padding:0 16px;position:absolute;top:37px;right:0;left:0;bottom:44px}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link input[type=text]{box-sizing:border-box}#wp-link #link-options{padding:8px 0 12px}#wp-link p.howto{margin:3px 0}#wp-link p.howto a{text-decoration:none;color:inherit}#wp-link label input[type=text]{margin-top:5px;width:70%}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:80px;text-align:left;padding-left:5px;max-width:24%;vertical-align:middle;word-wrap:break-word}#wp-link .link-search-field{float:right;width:250px;max-width:70%}#wp-link .link-search-wrapper{margin:5px 0 9px;display:block;overflow:hidden}#wp-link .link-search-wrapper span{float:right;margin-top:4px}#wp-link .link-search-wrapper .spinner{margin-top:5px}#wp-link .link-target{padding:3px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wp-link .link-target label{max-width:70%}#wp-link .query-results{border:1px solid #dfdfdf;margin:0 0 12px;background:#fff;overflow:auto;position:absolute;right:16px;left:16px;bottom:0;top:166px}.has-text-field #wp-link .query-results{top:200px}#wp-link li{clear:both;margin-bottom:0;border-bottom:1px solid #f1f1f1;color:#32373c;padding:4px 10px 4px 6px;cursor:pointer;position:relative}#wp-link .query-notice,#wp-link li.unselectable{border-bottom:1px solid #dfdfdf}#wp-link .query-notice{padding:0;background-color:#f7fcfe;color:#000}#wp-link .query-notice .query-notice-default,#wp-link .query-notice .query-notice-hint{display:block;padding:6px;border-right:4px solid #00a0d2}#wp-link .unselectable.no-matches-found{padding:0;border-bottom:1px solid #dfdfdf;background-color:#fef7f1}#wp-link .no-matches-found .item-title{display:block;padding:6px;border-right:4px solid #d54e21}#wp-link .query-results em{font-style:normal}#wp-link li:hover{background:#eaf2fa;color:#151515}#wp-link li.unselectable:hover{background:#fff;cursor:auto;color:#32373c}#wp-link li.selected{background:#ddd;color:#32373c}#wp-link li.selected .item-title{font-weight:600}#wp-link li:last-child{border:none}#wp-link .item-title{display:inline-block;width:80%;width:calc(100% - 68px);word-wrap:break-word}#wp-link .item-info{text-transform:uppercase;color:#666;font-size:11px;position:absolute;left:5px;top:5px}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .submitbox{padding:8px 16px;background:#fcfcfc;border-top:1px solid #ddd;position:absolute;bottom:0;right:0;left:0}#wp-link-cancel{line-height:25px;float:right}#wp-link-update{line-height:23px;float:left}#wp-link-submit{float:left}@media screen and (max-width:782px){#wp-link-wrap{margin-top:-140px}#wp-link-wrap .query-results{top:195px}#wp-link-wrap.has-text-field .query-results{top:235px}#link-selector{padding:0 16px 60px}#wp-link-wrap #link-selector{bottom:52px}#wp-link-cancel{line-height:32px}#wp-link .link-target{padding-top:10px}#wp-link .submitbox .button{margin-bottom:0}}@media screen and (max-width:520px){#wp-link-wrap{width:auto;margin-right:0;right:10px;left:10px;max-width:500px}}@media screen and (max-height:520px){#wp-link-wrap{transition:none;height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto}#search-panel .query-results{position:static}}@media screen and (max-height:290px){#wp-link-wrap{height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto;height:calc(100% - 92px);padding-bottom:2px}#search-panel .query-results{position:static}}div.wp-link-preview{float:right;margin:5px;max-width:694px;overflow:hidden;text-overflow:ellipsis}div.wp-link-preview a{color:#0073aa;text-decoration:underline;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;cursor:pointer}div.wp-link-preview a.wplink-url-error{color:#dc3232}div.wp-link-input{float:right;margin:2px;max-width:694px}div.wp-link-input input{width:300px;padding:3px;box-sizing:border-box}.mce-toolbar div.wp-link-input~.mce-btn,.mce-toolbar div.wp-link-preview~.mce-btn{margin:2px 1px}.mce-inline-toolbar-grp .mce-btn-group .mce-btn:last-child{margin-left:2px}.ui-autocomplete.wplink-autocomplete{z-index:100110;max-height:200px;overflow-y:auto;padding:0;margin:0;list-style:none;position:absolute;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete.wplink-autocomplete li{margin-bottom:0;padding:4px 10px;clear:both;white-space:normal;text-align:right}.ui-autocomplete.wplink-autocomplete li .wp-editor-float-right{float:left}.ui-autocomplete.wplink-autocomplete li.ui-state-focus{background-color:#ddd;cursor:pointer}@media screen and (max-width:782px){div.wp-link-input,div.wp-link-preview{max-width:70%;max-width:calc(100% - 86px)}div.wp-link-preview{margin:8px 5px 8px 0}div.wp-link-input{width:300px}div.wp-link-input input{width:100%;font-size:16px;padding:5px}}.mce-fullscreen{z-index:100010}.rtl .quicktags-toolbar input,.rtl .wp-switch-editor{font-family:Tahoma,sans-serif}.mce-rtl .mce-flow-layout .mce-flow-layout-item>div{direction:rtl}.mce-rtl .mce-listbox i.mce-caret{left:6px}html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .wp-switch-editor{font-family:Arial,sans-serif}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}}
\ No newline at end of file
+.mce-window .mce-wp-help *,.wp-editor-area{box-sizing:border-box}.mce-tinymce{box-shadow:none}#wp-link-wrap,.mce-window{box-shadow:0 3px 6px rgba(0,0,0,.3)}.mce-container,.mce-container *,.mce-widget,.mce-widget *{color:inherit;font-family:inherit}.mce-container .mce-monospace,.mce-widget .mce-monospace{font-family:Consolas,Monaco,monospace;font-size:13px;line-height:150%}#mce-modal-block,#mce-modal-block.mce-fade{opacity:.7;filter:alpha(opacity=70);transition:none;background:#000}.mce-window{border-radius:0;-webkit-font-smoothing:subpixel-antialiased;transition:none}.mce-window .mce-container-body.mce-abs-layout{overflow:visible}.mce-window .mce-window-head{background:#fcfcfc;border-bottom:1px solid #ddd;padding:0;min-height:36px}.mce-window .mce-window-head .mce-title{color:#444;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 16px 0 36px}.mce-window .mce-window-head .mce-close,.mce-window-head .mce-close .mce-i-remove{color:transparent;top:0;left:0;width:36px;height:36px;padding:0;line-height:36px;text-align:center}.mce-window-head .mce-close .mce-i-remove:before{font:400 20px/36px dashicons;text-align:center;color:#666;width:36px;height:36px;display:block}.mce-window-head .mce-close:focus .mce-i-remove:before,.mce-window-head .mce-close:hover .mce-i-remove:before{color:#00a0d2}.mce-window-head .mce-close:focus .mce-i-remove,div.mce-tab:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.mce-window .mce-window-head .mce-dragh{width:calc(100% - 36px)}.mce-window .mce-foot{border-top:1px solid #ddd}#wp-link .query-results,.mce-checkbox i.mce-i-checkbox,.mce-textbox{border:1px solid #ddd;border-radius:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);transition:.05s all ease-in-out}#wp-link .query-results:focus,.mce-checkbox:focus i.mce-i-checkbox,.mce-textbox.mce-focus,.mce-textbox:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.mce-window .mce-wp-help{height:360px;width:460px;overflow:auto}.mce-window .mce-wp-help>.mce-container-body{width:auto!important}.mce-window .wp-editor-help{padding:10px 20px 0 10px}.mce-window .wp-editor-help h2,.mce-window .wp-editor-help p{margin:8px 0;white-space:normal;font-size:14px;font-weight:400}.mce-window .wp-editor-help table{width:100%;margin-bottom:20px}.mce-window .wp-editor-help table.wp-help-single{margin:0 8px 20px}.mce-window .wp-editor-help table.fixed{table-layout:fixed}.mce-window .wp-editor-help table.fixed td:nth-child(odd),.mce-window .wp-editor-help table.fixed th:nth-child(odd){width:12%}.mce-window .wp-editor-help table.fixed td:nth-child(even),.mce-window .wp-editor-help table.fixed th:nth-child(even){width:38%}.mce-window .wp-editor-help table.fixed th:nth-child(odd){padding:5px 0 0}.mce-window .wp-editor-help td,.mce-window .wp-editor-help th{font-size:13px;padding:5px;vertical-align:middle;word-wrap:break-word;white-space:normal}.mce-window .wp-editor-help th{font-weight:600;padding-bottom:0}.mce-window .wp-editor-help kbd{font-family:monospace;padding:2px 7px 3px;font-weight:600;margin:0;background:#eaeaea;background:rgba(0,0,0,.08)}.mce-window .wp-help-th-center td:nth-child(odd),.mce-window .wp-help-th-center th:nth-child(odd){text-align:center}.mce-floatpanel.mce-popover,.mce-menu{border-color:rgba(0,0,0,.15);border-radius:0;box-shadow:0 3px 5px rgba(0,0,0,.2)}.mce-floatpanel.mce-popover.mce-bottom,.mce-menu{margin-top:2px}.mce-floatpanel .mce-arrow{display:none}.mce-menu .mce-container-body{min-width:160px}.mce-menu-item{border:none;margin-bottom:2px;padding:6px 12px 6px 15px}.mce-menu-has-icons i.mce-ico{line-height:20px}div.mce-panel{border:0;background:#fff}.mce-panel.mce-menu{border:1px solid #ddd}div.mce-tab{line-height:13px}div.mce-toolbar-grp{border-bottom:1px solid #ddd;background:#f5f5f5;padding:0;position:relative}div.mce-inline-toolbar-grp{border:1px solid #a0a5aa;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.15);box-sizing:border-box;margin-bottom:8px;position:absolute;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;max-width:98%;z-index:100100}div.mce-inline-toolbar-grp>div.mce-stack-layout{padding:1px}div.mce-inline-toolbar-grp.mce-arrow-up{margin-bottom:0;margin-top:8px}div.mce-inline-toolbar-grp:after,div.mce-inline-toolbar-grp:before{position:absolute;right:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-menu.mce-menu-align .mce-menu-item-normal,.quicktags-toolbar,.wp-editor-tools,.wp-editor-wrap,.wp-switch-editor{position:relative}div.mce-inline-toolbar-grp.mce-arrow-up:before{top:-9px;border-bottom-color:#a0a5aa;border-width:0 9px 9px;margin-right:-9px}div.mce-inline-toolbar-grp.mce-arrow-down:before{bottom:-9px;border-top-color:#a0a5aa;border-width:9px 9px 0;margin-right:-9px}div.mce-inline-toolbar-grp.mce-arrow-up:after{top:-8px;border-bottom-color:#f5f5f5;border-width:0 8px 8px;margin-right:-8px}div.mce-inline-toolbar-grp.mce-arrow-down:after{bottom:-8px;border-top-color:#f5f5f5;border-width:8px 8px 0;margin-right:-8px}div.mce-inline-toolbar-grp.mce-arrow-left:after,div.mce-inline-toolbar-grp.mce-arrow-left:before{margin:0}div.mce-inline-toolbar-grp.mce-arrow-left:before{right:20px}div.mce-inline-toolbar-grp.mce-arrow-left:after{right:21px}div.mce-inline-toolbar-grp.mce-arrow-right:after,div.mce-inline-toolbar-grp.mce-arrow-right:before{right:auto;margin:0}div.mce-inline-toolbar-grp.mce-arrow-right:before{left:20px}div.mce-inline-toolbar-grp.mce-arrow-right:after{left:21px}div.mce-inline-toolbar-grp.mce-arrow-full{left:0}div.mce-inline-toolbar-grp.mce-arrow-full>div{width:100%;overflow-x:auto}div.mce-toolbar-grp>div{padding:3px}.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-left:32px}.mce-toolbar .mce-btn-group{margin:0}div.mce-statusbar{border-top:1px solid #e5e5e5}div.mce-path{padding:2px 10px;margin:0}.mce-path,.mce-path .mce-divider,.mce-path-item{font-size:12px}.mce-toolbar .mce-btn,.qt-dfw{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none;cursor:pointer}.mce-btn .mce-txt{direction:inherit;text-align:inherit}.mce-toolbar .mce-btn-group .mce-btn,.qt-dfw{border:1px solid transparent;margin:2px;border-radius:2px}.mce-toolbar .mce-btn-group .mce-btn:focus,.mce-toolbar .mce-btn-group .mce-btn:hover,.qt-dfw:focus,.qt-dfw:hover{background:#fafafa;border-color:#555d66;color:#23282d;box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);outline:0}.mce-toolbar .mce-btn-group .mce-btn.mce-active,.mce-toolbar .mce-btn-group .mce-btn:active,.qt-dfw.active{background:#ebebeb;border-color:#555d66;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.3)}.mce-btn.mce-active,.mce-btn.mce-active button,.mce-btn.mce-active i,.mce-btn.mce-active:hover button,.mce-btn.mce-active:hover i{color:inherit}.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover{border-color:#23282d}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover{color:#a0a5aa;background:0 0;border-color:#ddd;text-shadow:0 1px 0 #fff;box-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus{border-color:#555d66}.mce-toolbar .mce-btn-group .mce-first,.mce-toolbar .mce-btn-group .mce-last{border-color:transparent}.mce-toolbar .mce-btn button,.qt-dfw{padding:2px 3px;line-height:normal}.mce-toolbar .mce-listbox button{font-size:13px;line-height:20px;padding-right:6px;padding-left:20px}.mce-toolbar .mce-btn i{text-shadow:none}.mce-toolbar .mce-btn-group>div{white-space:normal}.mce-toolbar .mce-colorbutton .mce-open{border-left:0}.mce-toolbar .mce-colorbutton .mce-preview{margin:0;padding:0;top:auto;bottom:2px;right:3px;height:3px;width:20px;background:#555d66}.mce-toolbar .mce-btn-group .mce-btn.mce-primary{min-width:0;background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:2px 3px 1px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary .mce-ico{color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover{background:#008ec2;border-color:#006799;color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus{box-shadow:0 0 1px 1px #33b3db}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox{border-radius:0;direction:rtl;background:#fff;border:1px solid #ddd;box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2)}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{border-color:#b4b9be}.mce-panel .mce-btn i.mce-caret{border-top:6px solid #555d66;margin-right:2px;margin-left:2px}.mce-listbox i.mce-caret{left:4px}.mce-panel .mce-btn:focus i.mce-caret,.mce-panel .mce-btn:hover i.mce-caret{border-top-color:#23282d}.mce-panel .mce-active i.mce-caret{border-top:0;border-bottom:6px solid #23282d;margin-top:7px}.mce-listbox.mce-active i.mce-caret{margin-top:-3px}.mce-toolbar .mce-splitbtn:hover .mce-open{border-left-color:transparent}.mce-toolbar .mce-splitbtn .mce-open.mce-active{background:0 0;outline:0}.mce-menu .mce-menu-item-normal.mce-active,.mce-menu .mce-menu-item-preview.mce-active,.mce-menu .mce-menu-item.mce-selected,.mce-menu .mce-menu-item:focus,.mce-menu .mce-menu-item:hover{background:#0073aa;color:#fff}.mce-menu-item.mce-active .mce-menu-shortcut,.mce-menu-item.mce-disabled:hover .mce-ico,.mce-menu-item.mce-disabled:hover .mce-text,.mce-menu-item:focus .mce-ico,.mce-menu-item:focus .mce-menu-shortcut,.mce-menu-item:focus .mce-text,.mce-menu-item:hover .mce-ico,.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item:hover .mce-text{color:inherit}.mce-menu .mce-menu-item.mce-disabled{cursor:default}.mce-menu .mce-menu-item.mce-disabled:hover{background:#ccc}div.mce-menubar{border-color:#e5e5e5;background:#fff;border-width:0 0 1px}.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus,.mce-menubar .mce-menubtn:hover{border-color:transparent;background:0 0}.mce-menubar .mce-menubtn:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.mce-menu-item-sep:hover,div.mce-menu .mce-menu-item-sep{border-bottom:1px solid #ddd;height:0;margin:5px 0}.mce-menubtn span{margin-left:0;padding-right:3px}.mce-menu-has-icons i.mce-ico:before{margin-right:-2px}.mce-menu.mce-menu-align .mce-menu-shortcut{bottom:.6em;font-size:.9em}.mce-primary button,.mce-primary button i{text-align:center;color:#fff;text-shadow:none;padding:0;line-height:26px}.mce-window .mce-btn{color:#555;background:#f7f7f7;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0;cursor:pointer;border:1px solid #ccc;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-shadow:0 1px 0 #ccc}.mce-window .mce-btn::-moz-focus-inner{border-width:0;border-style:none;padding:0}.mce-window .mce-btn:focus,.mce-window .mce-btn:hover{background:#fafafa;border-color:#999;color:#23282d}.mce-window .mce-btn:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.mce-window .mce-btn:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);-webkit-transform:translateY(1px);transform:translateY(1px)}.mce-window .mce-btn.mce-disabled{color:#a0a5aa!important;border-color:#ddd!important;background:#f7f7f7!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default;-webkit-transform:none!important;transform:none!important}.mce-window .mce-btn.mce-primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799,-1px 0 1px #006799,0 1px 1px #006799,1px 0 1px #006799}.mce-window .mce-btn.mce-primary:focus,.mce-window .mce-btn.mce-primary:hover{background:#008ec2;border-color:#006799;color:#fff}.mce-window .mce-btn.mce-primary:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}.mce-window .mce-btn.mce-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.mce-window .mce-btn.mce-primary.mce-disabled{color:#66c6e4!important;background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.mce-toolbar .mce-ico,.qt-dfw{text-shadow:none;text-align:center}.mce-menubtn.mce-fixed-width span{overflow-x:hidden;text-overflow:ellipsis;width:82px}.mce-charmap{margin:3px}.mce-charmap td{padding:0;border-color:#ddd;cursor:pointer}.mce-charmap td:hover{background:#f3f3f3}.mce-charmap td div{width:18px;height:22px;line-height:22px}.mce-toolbar .mce-btn .mce-open,.qt-dfw{line-height:20px}.mce-tooltip{margin-top:2px}.rtl .mce-tooltip.wp-hide-mce-tooltip{display:none!important}.mce-tooltip-inner{border-radius:3px;box-shadow:0 3px 5px rgba(0,0,0,.2);color:#fff;font-size:12px}.mce-ico{font-family:tinymce,Arial}.mce-btn-small .mce-ico{font-family:tinymce-small,Arial}.mce-toolbar .mce-ico{color:#555d66;line-height:20px;width:20px;height:20px;margin:0;padding:0}.qt-dfw{color:#555d66;width:28px;height:26px}.mce-toolbar .mce-btn.mce-active .mce-open,.mce-toolbar .mce-btn:focus .mce-open,.mce-toolbar .mce-btn:hover .mce-open{border-right-color:#23282d}div.mce-notification{right:10%!important;left:10%}.mce-notification button.mce-close{left:6px;top:3px;font-weight:400;color:#555d66}.mce-notification button.mce-close:focus,.mce-notification button.mce-close:hover{color:#000}i.mce-i-aligncenter,i.mce-i-alignjustify,i.mce-i-alignleft,i.mce-i-alignright,i.mce-i-backcolor,i.mce-i-blockquote,i.mce-i-bold,i.mce-i-bullist,i.mce-i-charmap,i.mce-i-dashicon,i.mce-i-dfw,i.mce-i-forecolor,i.mce-i-fullscreen,i.mce-i-help,i.mce-i-hr,i.mce-i-indent,i.mce-i-italic,i.mce-i-link,i.mce-i-ltr,i.mce-i-numlist,i.mce-i-outdent,i.mce-i-pastetext,i.mce-i-pasteword,i.mce-i-redo,i.mce-i-remove,i.mce-i-removeformat,i.mce-i-spellchecker,i.mce-i-strikethrough,i.mce-i-underline,i.mce-i-undo,i.mce-i-unlink,i.mce-i-wp-media-library,i.mce-i-wp_adv,i.mce-i-wp_code,i.mce-i-wp_fullscreen,i.mce-i-wp_help,i.mce-i-wp_more,i.mce-i-wp_page{font:400 20px/1 dashicons;padding:0 0 0 2px;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:-2px}.qt-dfw{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i.mce-i-bold:before{content:"\f200"}i.mce-i-italic:before{content:"\f201"}i.mce-i-bullist:before{content:"\f203"}i.mce-i-numlist:before{content:"\f204"}i.mce-i-blockquote:before{content:"\f205"}i.mce-i-alignleft:before{content:"\f206"}i.mce-i-aligncenter:before{content:"\f207"}i.mce-i-alignright:before{content:"\f208"}i.mce-i-link:before{content:"\f103"}i.mce-i-unlink:before{content:"\f225"}i.mce-i-wp_more:before{content:"\f209"}i.mce-i-strikethrough:before{content:"\f224"}i.mce-i-spellchecker:before{content:"\f210"}.qt-dfw:before,i.mce-i-dfw:before,i.mce-i-fullscreen:before,i.mce-i-wp_fullscreen:before{content:"\f211"}i.mce-i-wp_adv:before{content:"\f212"}i.mce-i-underline:before{content:"\f213"}i.mce-i-alignjustify:before{content:"\f214"}i.mce-i-backcolor:before,i.mce-i-forecolor:before{content:"\f215"}i.mce-i-pastetext:before{content:"\f217"}i.mce-i-removeformat:before{content:"\f218"}i.mce-i-charmap:before{content:"\f220"}i.mce-i-outdent:before{content:"\f221"}i.mce-i-indent:before{content:"\f222"}i.mce-i-undo:before{content:"\f171"}i.mce-i-redo:before{content:"\f172"}i.mce-i-help:before,i.mce-i-wp_help:before{content:"\f223"}i.mce-i-wp-media-library:before{content:"\f104"}i.mce-i-ltr:before{content:"\f320"}i.mce-i-wp_page:before{content:"\f105"}i.mce-i-hr:before{content:"\f460"}i.mce-i-remove:before{content:"\f158"}i.mce-i-wp_code:before{content:"\f475"}.rtl i.mce-i-outdent:before{content:"\f222"}.rtl i.mce-i-indent:before{content:"\f221"}.wp-editor-tools{z-index:1}.wp-editor-tools:after{clear:both;content:"";display:table}.wp-editor-container{clear:both;border:1px solid #e5e5e5}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0;outline:0;display:block;resize:vertical}.rtl .wp-editor-area{font-family:Tahoma,Monaco,monospace}.locale-he-il .wp-editor-area{font-family:Arial,Monaco,monospace}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;box-shadow:none}.wp-editor-tabs{float:left}.wp-switch-editor{float:right;box-sizing:content-box;top:1px;background:#ebebeb;color:#666;cursor:pointer;font-size:13px;line-height:19px;height:20px;margin:5px 5px 0 0;padding:3px 8px 4px;border:1px solid #e5e5e5}.wp-switch-editor:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);outline:0;color:#23282d}.html-active .switch-html:focus,.tmce-active .switch-tmce:focus,.wp-switch-editor:active{box-shadow:none}.wp-switch-editor:active{background-color:#f5f5f5;box-shadow:none}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.html-active .switch-html,.tmce-active .switch-tmce{background:#f5f5f5;color:#555;border-bottom-color:#f5f5f5}.wp-media-buttons{float:right}.wp-media-buttons .button{margin-left:5px;margin-bottom:4px;padding-right:7px;padding-left:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-right:5px}.wp-media-buttons a{text-decoration:none;color:#444;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:18px;height:18px;vertical-align:text-top;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f104"}.quicktags-toolbar{padding:3px;border-bottom:1px solid #ddd;background:#f5f5f5;min-height:30px}.has-dfw .quicktags-toolbar{padding-left:35px}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:2px}.quicktags-toolbar input[value=link]{text-decoration:underline}.quicktags-toolbar input[value=del]{text-decoration:line-through}.quicktags-toolbar input[value="i"]{font-style:italic}.quicktags-toolbar input[value="b"]{font-weight:600}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw,.qt-dfw{position:absolute;top:0;left:0;margin:5px 0 0 5px}.qt-fullscreen{position:static;margin:2px}@media screen and (max-width:782px){.mce-toolbar .mce-btn button,.qt-dfw{padding:6px 7px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:6px 7px 5px}.mce-toolbar .mce-btn-group .mce-btn{margin:1px}.qt-dfw{width:36px;height:34px}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw{margin:4px 0 0 4px}.mce-toolbar .mce-colorbutton .mce-preview{right:8px;bottom:6px}.mce-window .mce-btn{padding:2px 0}.has-dfw .quicktags-toolbar,.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-left:40px}}@media screen and (min-width:782px){.wp-core-ui .quicktags-toolbar input.button.button-small{font-size:12px;height:26px;line-height:24px}}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:100020}#wp_delgallery,#wp_delimgbtn,#wp_editgallery,#wp_editimgbtn{border-color:#999;background-color:#eee;margin:2px;padding:2px;border-width:1px;border-style:solid;border-radius:3px}#wp_delgallery:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_editimgbtn:hover{border-color:#555;background-color:#ccc}#wp-link-wrap{display:none;background-color:#fff;width:500px;overflow:hidden;margin-right:-250px;position:fixed;top:50%;right:50%;z-index:100105;transition:height .2s,margin-top .2s;height:500px;margin-top:-250px}#wp-link-backdrop{display:none;position:fixed;top:0;right:0;left:0;bottom:0;min-height:360px;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}#wp-link{position:relative;height:100%}#wp-link-wrap .wp-link-text-field{display:none}#wp-link-wrap.has-text-field .wp-link-text-field{display:block}#link-modal-title{background:#fcfcfc;border-bottom:1px solid #ddd;height:36px;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 16px 0 36px}#wp-link-close{color:#666;padding:0;position:absolute;top:0;left:0;width:36px;height:36px;text-align:center;background:0 0;border:none;cursor:pointer}#wp-link-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:36px;height:36px;content:"\f158"}#wp-link-close:focus,#wp-link-close:hover{color:#00a0d2}#wp-link-close:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#wp-link-wrap #link-selector{-webkit-overflow-scrolling:touch;padding:0 16px;position:absolute;top:37px;right:0;left:0;bottom:44px}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link input[type=text]{box-sizing:border-box}#wp-link #link-options{padding:8px 0 12px}#wp-link p.howto{margin:3px 0}#wp-link p.howto a{text-decoration:none;color:inherit}#wp-link label input[type=text]{margin-top:5px;width:70%}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:80px;text-align:left;padding-left:5px;max-width:24%;vertical-align:middle;word-wrap:break-word}#wp-link .link-search-field{float:right;width:250px;max-width:70%}#wp-link .link-search-wrapper{margin:5px 0 9px;display:block;overflow:hidden}#wp-link .link-search-wrapper span{float:right;margin-top:4px}#wp-link .link-search-wrapper .spinner{margin-top:5px}#wp-link .link-target{padding:3px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wp-link .link-target label{max-width:70%}#wp-link .query-results{border:1px solid #dfdfdf;margin:0 0 12px;background:#fff;overflow:auto;position:absolute;right:16px;left:16px;bottom:0;top:166px}.has-text-field #wp-link .query-results{top:200px}#wp-link li{clear:both;margin-bottom:0;border-bottom:1px solid #f1f1f1;color:#32373c;padding:4px 10px 4px 6px;cursor:pointer;position:relative}#wp-link .query-notice,#wp-link li.unselectable{border-bottom:1px solid #dfdfdf}#wp-link .query-notice{padding:0;background-color:#f7fcfe;color:#000}#wp-link .query-notice .query-notice-default,#wp-link .query-notice .query-notice-hint{display:block;padding:6px;border-right:4px solid #00a0d2}#wp-link .unselectable.no-matches-found{padding:0;border-bottom:1px solid #dfdfdf;background-color:#fef7f1}#wp-link .no-matches-found .item-title{display:block;padding:6px;border-right:4px solid #d54e21}#wp-link .query-results em{font-style:normal}#wp-link li:hover{background:#eaf2fa;color:#151515}#wp-link li.unselectable:hover{background:#fff;cursor:auto;color:#32373c}#wp-link li.selected{background:#ddd;color:#32373c}#wp-link li.selected .item-title{font-weight:600}#wp-link li:last-child{border:none}#wp-link .item-title{display:inline-block;width:80%;width:calc(100% - 68px);word-wrap:break-word}#wp-link .item-info{text-transform:uppercase;color:#666;font-size:11px;position:absolute;left:5px;top:5px}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .submitbox{padding:8px 16px;background:#fcfcfc;border-top:1px solid #ddd;position:absolute;bottom:0;right:0;left:0}#wp-link-cancel{line-height:25px;float:right}#wp-link-update{line-height:23px;float:left}#wp-link-submit{float:left}@media screen and (max-width:782px){#wp-link-wrap{margin-top:-140px}#wp-link-wrap .query-results{top:195px}#wp-link-wrap.has-text-field .query-results{top:235px}#link-selector{padding:0 16px 60px}#wp-link-wrap #link-selector{bottom:52px}#wp-link-cancel{line-height:32px}#wp-link .link-target{padding-top:10px}#wp-link .submitbox .button{margin-bottom:0}}@media screen and (max-width:520px){#wp-link-wrap{width:auto;margin-right:0;right:10px;left:10px;max-width:500px}}@media screen and (max-height:520px){#wp-link-wrap{transition:none;height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto}#search-panel .query-results{position:static}}@media screen and (max-height:290px){#wp-link-wrap{height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto;height:calc(100% - 92px);padding-bottom:2px}#search-panel .query-results{position:static}}div.wp-link-preview{float:right;margin:5px;max-width:694px;overflow:hidden;text-overflow:ellipsis}div.wp-link-preview a{color:#0073aa;text-decoration:underline;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;cursor:pointer}div.wp-link-preview a.wplink-url-error{color:#dc3232}div.wp-link-input{float:right;margin:2px;max-width:694px}div.wp-link-input input{width:300px;padding:3px;box-sizing:border-box}.mce-toolbar div.wp-link-input~.mce-btn,.mce-toolbar div.wp-link-preview~.mce-btn{margin:2px 1px}.mce-inline-toolbar-grp .mce-btn-group .mce-btn:last-child{margin-left:2px}.ui-autocomplete.wplink-autocomplete{z-index:100110;max-height:200px;overflow-y:auto;padding:0;margin:0;list-style:none;position:absolute;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete.wplink-autocomplete li{margin-bottom:0;padding:4px 10px;clear:both;white-space:normal;text-align:right}.ui-autocomplete.wplink-autocomplete li .wp-editor-float-right{float:left}.ui-autocomplete.wplink-autocomplete li.ui-state-focus{background-color:#ddd;cursor:pointer}@media screen and (max-width:782px){div.wp-link-input,div.wp-link-preview{max-width:70%;max-width:calc(100% - 86px)}div.wp-link-preview{margin:8px 5px 8px 0}div.wp-link-input{width:300px}div.wp-link-input input{width:100%;font-size:16px;padding:5px}}.mce-fullscreen{z-index:100010}.rtl .quicktags-toolbar input,.rtl .wp-switch-editor{font-family:Tahoma,sans-serif}.mce-rtl .mce-flow-layout .mce-flow-layout-item>div{direction:rtl}.mce-rtl .mce-listbox i.mce-caret{left:6px}html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .wp-switch-editor{font-family:Arial,sans-serif}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}}
\ No newline at end of file
/* TinyMCE widgets/containers */
+.mce-tinymce {
+ box-shadow: none;
+}
+
.mce-container,
.mce-container *,
.mce-widget,
opacity: 0.7;
filter: alpha(opacity=70);
transition: none;
+ background: #000;
}
.mce-window {
.mce-menu-item {
border: none;
margin-bottom: 2px;
+ padding: 6px 15px 6px 12px;
}
.mce-menu-has-icons i.mce-ico {
box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.3 );
}
+.mce-btn.mce-active,
+.mce-btn.mce-active button,
+.mce-btn.mce-active:hover button,
+.mce-btn.mce-active i,
+.mce-btn.mce-active:hover i {
+ color: inherit;
+}
+
.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover,
.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus {
border-color: #23282d;
color: #fff;
}
-.mce-menu .mce-menu-item-preview.mce-active {
- border-left: none;
-}
-
-.mce-menu .mce-menu-item-preview.mce-active .mce-text {
- color: #fff;
+.mce-menu-item:hover .mce-text,
+.mce-menu-item:focus .mce-text,
+.mce-menu-item:hover .mce-ico,
+.mce-menu-item:focus .mce-ico,
+.mce-menu-item:hover .mce-menu-shortcut,
+.mce-menu-item:focus .mce-menu-shortcut,
+.mce-menu-item.mce-active .mce-menu-shortcut,
+.mce-menu-item.mce-disabled:hover .mce-text,
+.mce-menu-item.mce-disabled:hover .mce-ico {
+ color: inherit;
}
.mce-menu .mce-menu-item.mce-disabled {
/*! This file is auto-generated */
-#wp-link-wrap,.mce-window{box-shadow:0 3px 6px rgba(0,0,0,.3)}.mce-window .mce-wp-help *,.wp-editor-area{box-sizing:border-box}.mce-container,.mce-container *,.mce-widget,.mce-widget *{color:inherit;font-family:inherit}.mce-container .mce-monospace,.mce-widget .mce-monospace{font-family:Consolas,Monaco,monospace;font-size:13px;line-height:150%}#mce-modal-block,#mce-modal-block.mce-fade{opacity:.7;filter:alpha(opacity=70);transition:none}.mce-window{border-radius:0;-webkit-font-smoothing:subpixel-antialiased;transition:none}.mce-window .mce-container-body.mce-abs-layout{overflow:visible}.mce-window .mce-window-head{background:#fcfcfc;border-bottom:1px solid #ddd;padding:0;min-height:36px}.mce-window .mce-window-head .mce-title{color:#444;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 36px 0 16px}.mce-window .mce-window-head .mce-close,.mce-window-head .mce-close .mce-i-remove{color:transparent;top:0;right:0;width:36px;height:36px;padding:0;line-height:36px;text-align:center}.mce-window-head .mce-close .mce-i-remove:before{font:400 20px/36px dashicons;text-align:center;color:#666;width:36px;height:36px;display:block}.mce-window-head .mce-close:focus .mce-i-remove:before,.mce-window-head .mce-close:hover .mce-i-remove:before{color:#00a0d2}.mce-window-head .mce-close:focus .mce-i-remove,div.mce-tab:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.mce-window .mce-window-head .mce-dragh{width:calc(100% - 36px)}.mce-window .mce-foot{border-top:1px solid #ddd}#wp-link .query-results,.mce-checkbox i.mce-i-checkbox,.mce-textbox{border:1px solid #ddd;border-radius:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);transition:.05s all ease-in-out}#wp-link .query-results:focus,.mce-checkbox:focus i.mce-i-checkbox,.mce-textbox.mce-focus,.mce-textbox:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.mce-window .mce-wp-help{height:360px;width:460px;overflow:auto}.mce-window .mce-wp-help>.mce-container-body{width:auto!important}.mce-window .wp-editor-help{padding:10px 10px 0 20px}.mce-window .wp-editor-help h2,.mce-window .wp-editor-help p{margin:8px 0;white-space:normal;font-size:14px;font-weight:400}.mce-window .wp-editor-help table{width:100%;margin-bottom:20px}.mce-window .wp-editor-help table.wp-help-single{margin:0 8px 20px}.mce-window .wp-editor-help table.fixed{table-layout:fixed}.mce-window .wp-editor-help table.fixed td:nth-child(odd),.mce-window .wp-editor-help table.fixed th:nth-child(odd){width:12%}.mce-window .wp-editor-help table.fixed td:nth-child(even),.mce-window .wp-editor-help table.fixed th:nth-child(even){width:38%}.mce-window .wp-editor-help table.fixed th:nth-child(odd){padding:5px 0 0}.mce-window .wp-editor-help td,.mce-window .wp-editor-help th{font-size:13px;padding:5px;vertical-align:middle;word-wrap:break-word;white-space:normal}.mce-window .wp-editor-help th{font-weight:600;padding-bottom:0}.mce-window .wp-editor-help kbd{font-family:monospace;padding:2px 7px 3px;font-weight:600;margin:0;background:#eaeaea;background:rgba(0,0,0,.08)}.mce-window .wp-help-th-center td:nth-child(odd),.mce-window .wp-help-th-center th:nth-child(odd){text-align:center}.mce-floatpanel.mce-popover,.mce-menu{border-color:rgba(0,0,0,.15);border-radius:0;box-shadow:0 3px 5px rgba(0,0,0,.2)}.mce-floatpanel.mce-popover.mce-bottom,.mce-menu{margin-top:2px}.mce-floatpanel .mce-arrow{display:none}.mce-menu .mce-container-body{min-width:160px}.mce-menu-item{border:none;margin-bottom:2px}.mce-menu-has-icons i.mce-ico{line-height:20px}div.mce-panel{border:0;background:#fff}.mce-panel.mce-menu{border:1px solid #ddd}div.mce-tab{line-height:13px}div.mce-toolbar-grp{border-bottom:1px solid #ddd;background:#f5f5f5;padding:0;position:relative}div.mce-inline-toolbar-grp{border:1px solid #a0a5aa;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.15);box-sizing:border-box;margin-bottom:8px;position:absolute;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;max-width:98%;z-index:100100}div.mce-inline-toolbar-grp>div.mce-stack-layout{padding:1px}div.mce-inline-toolbar-grp.mce-arrow-up{margin-bottom:0;margin-top:8px}div.mce-inline-toolbar-grp:after,div.mce-inline-toolbar-grp:before{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-menu.mce-menu-align .mce-menu-item-normal,.quicktags-toolbar,.wp-editor-tools,.wp-editor-wrap,.wp-switch-editor{position:relative}div.mce-inline-toolbar-grp.mce-arrow-up:before{top:-9px;border-bottom-color:#a0a5aa;border-width:0 9px 9px;margin-left:-9px}div.mce-inline-toolbar-grp.mce-arrow-down:before{bottom:-9px;border-top-color:#a0a5aa;border-width:9px 9px 0;margin-left:-9px}div.mce-inline-toolbar-grp.mce-arrow-up:after{top:-8px;border-bottom-color:#f5f5f5;border-width:0 8px 8px;margin-left:-8px}div.mce-inline-toolbar-grp.mce-arrow-down:after{bottom:-8px;border-top-color:#f5f5f5;border-width:8px 8px 0;margin-left:-8px}div.mce-inline-toolbar-grp.mce-arrow-left:after,div.mce-inline-toolbar-grp.mce-arrow-left:before{margin:0}div.mce-inline-toolbar-grp.mce-arrow-left:before{left:20px}div.mce-inline-toolbar-grp.mce-arrow-left:after{left:21px}div.mce-inline-toolbar-grp.mce-arrow-right:after,div.mce-inline-toolbar-grp.mce-arrow-right:before{left:auto;margin:0}div.mce-inline-toolbar-grp.mce-arrow-right:before{right:20px}div.mce-inline-toolbar-grp.mce-arrow-right:after{right:21px}div.mce-inline-toolbar-grp.mce-arrow-full{right:0}div.mce-inline-toolbar-grp.mce-arrow-full>div{width:100%;overflow-x:auto}div.mce-toolbar-grp>div{padding:3px}.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-right:32px}.mce-toolbar .mce-btn-group{margin:0}div.mce-statusbar{border-top:1px solid #e5e5e5}div.mce-path{padding:2px 10px;margin:0}.mce-path,.mce-path .mce-divider,.mce-path-item{font-size:12px}.mce-toolbar .mce-btn,.qt-dfw{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none;cursor:pointer}.mce-btn .mce-txt{direction:inherit;text-align:inherit}.mce-toolbar .mce-btn-group .mce-btn,.qt-dfw{border:1px solid transparent;margin:2px;border-radius:2px}.mce-toolbar .mce-btn-group .mce-btn:focus,.mce-toolbar .mce-btn-group .mce-btn:hover,.qt-dfw:focus,.qt-dfw:hover{background:#fafafa;border-color:#555d66;color:#23282d;box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);outline:0}.mce-toolbar .mce-btn-group .mce-btn.mce-active,.mce-toolbar .mce-btn-group .mce-btn:active,.qt-dfw.active{background:#ebebeb;border-color:#555d66;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.3)}.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover{border-color:#23282d}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover{color:#a0a5aa;background:0 0;border-color:#ddd;text-shadow:0 1px 0 #fff;box-shadow:none}.mce-menu .mce-menu-item-preview.mce-active .mce-text,.mce-toolbar .mce-btn-group .mce-btn.mce-primary .mce-ico{color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus{border-color:#555d66}.mce-toolbar .mce-btn-group .mce-first,.mce-toolbar .mce-btn-group .mce-last{border-color:transparent}.mce-toolbar .mce-btn button,.qt-dfw{padding:2px 3px;line-height:normal}.mce-toolbar .mce-listbox button{font-size:13px;line-height:20px;padding-left:6px;padding-right:20px}.mce-toolbar .mce-btn i{text-shadow:none}.mce-toolbar .mce-btn-group>div{white-space:normal}.mce-toolbar .mce-colorbutton .mce-open{border-right:0}.mce-toolbar .mce-colorbutton .mce-preview{margin:0;padding:0;top:auto;bottom:2px;left:3px;height:3px;width:20px;background:#555d66}.mce-toolbar .mce-btn-group .mce-btn.mce-primary{min-width:0;background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:2px 3px 1px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover{background:#008ec2;border-color:#006799;color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus{box-shadow:0 0 1px 1px #33b3db}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox{border-radius:0;direction:ltr;background:#fff;border:1px solid #ddd;box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2)}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{border-color:#b4b9be}.mce-panel .mce-btn i.mce-caret{border-top:6px solid #555d66;margin-left:2px;margin-right:2px}.mce-listbox i.mce-caret{right:4px}.mce-panel .mce-btn:focus i.mce-caret,.mce-panel .mce-btn:hover i.mce-caret{border-top-color:#23282d}.mce-panel .mce-active i.mce-caret{border-top:0;border-bottom:6px solid #23282d;margin-top:7px}.mce-listbox.mce-active i.mce-caret{margin-top:-3px}.mce-toolbar .mce-splitbtn:hover .mce-open{border-right-color:transparent}.mce-toolbar .mce-splitbtn .mce-open.mce-active{background:0 0;outline:0}.mce-menu .mce-menu-item-normal.mce-active,.mce-menu .mce-menu-item-preview.mce-active,.mce-menu .mce-menu-item.mce-selected,.mce-menu .mce-menu-item:focus,.mce-menu .mce-menu-item:hover{background:#0073aa;color:#fff}.mce-menu .mce-menu-item-preview.mce-active{border-left:none}.mce-menu .mce-menu-item.mce-disabled{cursor:default}.mce-menu .mce-menu-item.mce-disabled:hover{background:#ccc}div.mce-menubar{border-color:#e5e5e5;background:#fff;border-width:0 0 1px}.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus,.mce-menubar .mce-menubtn:hover{border-color:transparent;background:0 0}.mce-menubar .mce-menubtn:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.mce-menu-item-sep:hover,div.mce-menu .mce-menu-item-sep{border-bottom:1px solid #ddd;height:0;margin:5px 0}.mce-menubtn span{margin-right:0;padding-left:3px}.mce-menu-has-icons i.mce-ico:before{margin-left:-2px}.mce-menu.mce-menu-align .mce-menu-shortcut{bottom:.6em;font-size:.9em}.mce-primary button,.mce-primary button i{text-align:center;color:#fff;text-shadow:none;padding:0;line-height:26px}.mce-window .mce-btn{color:#555;background:#f7f7f7;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0;cursor:pointer;border:1px solid #ccc;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-shadow:0 1px 0 #ccc}.mce-window .mce-btn::-moz-focus-inner{border-width:0;border-style:none;padding:0}.mce-window .mce-btn:focus,.mce-window .mce-btn:hover{background:#fafafa;border-color:#999;color:#23282d}.mce-window .mce-btn:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.mce-window .mce-btn:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);-webkit-transform:translateY(1px);transform:translateY(1px)}.mce-window .mce-btn.mce-disabled{color:#a0a5aa!important;border-color:#ddd!important;background:#f7f7f7!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default;-webkit-transform:none!important;transform:none!important}.mce-window .mce-btn.mce-primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.mce-window .mce-btn.mce-primary:focus,.mce-window .mce-btn.mce-primary:hover{background:#008ec2;border-color:#006799;color:#fff}.mce-window .mce-btn.mce-primary:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}.mce-window .mce-btn.mce-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.mce-window .mce-btn.mce-primary.mce-disabled{color:#66c6e4!important;background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.mce-toolbar .mce-ico,.qt-dfw{text-shadow:none;text-align:center}.mce-menubtn.mce-fixed-width span{overflow-x:hidden;text-overflow:ellipsis;width:82px}.mce-charmap{margin:3px}.mce-charmap td{padding:0;border-color:#ddd;cursor:pointer}.mce-charmap td:hover{background:#f3f3f3}.mce-charmap td div{width:18px;height:22px;line-height:22px}.mce-toolbar .mce-btn .mce-open,.qt-dfw{line-height:20px}.mce-tooltip{margin-top:2px}.rtl .mce-tooltip.wp-hide-mce-tooltip{display:none!important}.mce-tooltip-inner{border-radius:3px;box-shadow:0 3px 5px rgba(0,0,0,.2);color:#fff;font-size:12px}.mce-ico{font-family:tinymce,Arial}.mce-btn-small .mce-ico{font-family:tinymce-small,Arial}.mce-toolbar .mce-ico{color:#555d66;line-height:20px;width:20px;height:20px;margin:0;padding:0}.qt-dfw{color:#555d66;width:28px;height:26px}.mce-toolbar .mce-btn.mce-active .mce-open,.mce-toolbar .mce-btn:focus .mce-open,.mce-toolbar .mce-btn:hover .mce-open{border-left-color:#23282d}div.mce-notification{left:10%!important;right:10%}.mce-notification button.mce-close{right:6px;top:3px;font-weight:400;color:#555d66}.mce-notification button.mce-close:focus,.mce-notification button.mce-close:hover{color:#000}i.mce-i-aligncenter,i.mce-i-alignjustify,i.mce-i-alignleft,i.mce-i-alignright,i.mce-i-backcolor,i.mce-i-blockquote,i.mce-i-bold,i.mce-i-bullist,i.mce-i-charmap,i.mce-i-dashicon,i.mce-i-dfw,i.mce-i-forecolor,i.mce-i-fullscreen,i.mce-i-help,i.mce-i-hr,i.mce-i-indent,i.mce-i-italic,i.mce-i-link,i.mce-i-ltr,i.mce-i-numlist,i.mce-i-outdent,i.mce-i-pastetext,i.mce-i-pasteword,i.mce-i-redo,i.mce-i-remove,i.mce-i-removeformat,i.mce-i-spellchecker,i.mce-i-strikethrough,i.mce-i-underline,i.mce-i-undo,i.mce-i-unlink,i.mce-i-wp-media-library,i.mce-i-wp_adv,i.mce-i-wp_code,i.mce-i-wp_fullscreen,i.mce-i-wp_help,i.mce-i-wp_more,i.mce-i-wp_page{font:400 20px/1 dashicons;padding:0 2px 0 0;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-left:-2px}.qt-dfw{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i.mce-i-bold:before{content:"\f200"}i.mce-i-italic:before{content:"\f201"}i.mce-i-bullist:before{content:"\f203"}i.mce-i-numlist:before{content:"\f204"}i.mce-i-blockquote:before{content:"\f205"}i.mce-i-alignleft:before{content:"\f206"}i.mce-i-aligncenter:before{content:"\f207"}i.mce-i-alignright:before{content:"\f208"}i.mce-i-link:before{content:"\f103"}i.mce-i-unlink:before{content:"\f225"}i.mce-i-wp_more:before{content:"\f209"}i.mce-i-strikethrough:before{content:"\f224"}i.mce-i-spellchecker:before{content:"\f210"}.qt-dfw:before,i.mce-i-dfw:before,i.mce-i-fullscreen:before,i.mce-i-wp_fullscreen:before{content:"\f211"}i.mce-i-wp_adv:before{content:"\f212"}i.mce-i-underline:before{content:"\f213"}i.mce-i-alignjustify:before{content:"\f214"}i.mce-i-backcolor:before,i.mce-i-forecolor:before{content:"\f215"}i.mce-i-pastetext:before{content:"\f217"}i.mce-i-removeformat:before{content:"\f218"}i.mce-i-charmap:before{content:"\f220"}i.mce-i-outdent:before{content:"\f221"}i.mce-i-indent:before{content:"\f222"}i.mce-i-undo:before{content:"\f171"}i.mce-i-redo:before{content:"\f172"}i.mce-i-help:before,i.mce-i-wp_help:before{content:"\f223"}i.mce-i-wp-media-library:before{content:"\f104"}i.mce-i-ltr:before{content:"\f320"}i.mce-i-wp_page:before{content:"\f105"}i.mce-i-hr:before{content:"\f460"}i.mce-i-remove:before{content:"\f158"}i.mce-i-wp_code:before{content:"\f475"}.rtl i.mce-i-outdent:before{content:"\f222"}.rtl i.mce-i-indent:before{content:"\f221"}.wp-editor-tools{z-index:1}.wp-editor-tools:after{clear:both;content:"";display:table}.wp-editor-container{clear:both;border:1px solid #e5e5e5}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0;outline:0;display:block;resize:vertical}.rtl .wp-editor-area{font-family:Tahoma,Monaco,monospace}.locale-he-il .wp-editor-area{font-family:Arial,Monaco,monospace}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;box-shadow:none}.wp-editor-tabs{float:right}.wp-switch-editor{float:left;box-sizing:content-box;top:1px;background:#ebebeb;color:#666;cursor:pointer;font-size:13px;line-height:19px;height:20px;margin:5px 0 0 5px;padding:3px 8px 4px;border:1px solid #e5e5e5}.wp-switch-editor:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);outline:0;color:#23282d}.html-active .switch-html:focus,.tmce-active .switch-tmce:focus,.wp-switch-editor:active{box-shadow:none}.wp-switch-editor:active{background-color:#f5f5f5;box-shadow:none}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.html-active .switch-html,.tmce-active .switch-tmce{background:#f5f5f5;color:#555;border-bottom-color:#f5f5f5}.wp-media-buttons{float:left}.wp-media-buttons .button{margin-right:5px;margin-bottom:4px;padding-left:7px;padding-right:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-left:5px}.wp-media-buttons a{text-decoration:none;color:#444;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:18px;height:18px;vertical-align:text-top;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f104"}.quicktags-toolbar{padding:3px;border-bottom:1px solid #ddd;background:#f5f5f5;min-height:30px}.has-dfw .quicktags-toolbar{padding-right:35px}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:2px}.quicktags-toolbar input[value=link]{text-decoration:underline}.quicktags-toolbar input[value=del]{text-decoration:line-through}.quicktags-toolbar input[value="i"]{font-style:italic}.quicktags-toolbar input[value="b"]{font-weight:600}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw,.qt-dfw{position:absolute;top:0;right:0;margin:5px 5px 0 0}.qt-fullscreen{position:static;margin:2px}@media screen and (max-width:782px){.mce-toolbar .mce-btn button,.qt-dfw{padding:6px 7px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:6px 7px 5px}.mce-toolbar .mce-btn-group .mce-btn{margin:1px}.qt-dfw{width:36px;height:34px}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw{margin:4px 4px 0 0}.mce-toolbar .mce-colorbutton .mce-preview{left:8px;bottom:6px}.mce-window .mce-btn{padding:2px 0}.has-dfw .quicktags-toolbar,.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-right:40px}}@media screen and (min-width:782px){.wp-core-ui .quicktags-toolbar input.button.button-small{font-size:12px;height:26px;line-height:24px}}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:100020}#wp_delgallery,#wp_delimgbtn,#wp_editgallery,#wp_editimgbtn{border-color:#999;background-color:#eee;margin:2px;padding:2px;border-width:1px;border-style:solid;border-radius:3px}#wp_delgallery:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_editimgbtn:hover{border-color:#555;background-color:#ccc}#wp-link-wrap{display:none;background-color:#fff;width:500px;overflow:hidden;margin-left:-250px;position:fixed;top:50%;left:50%;z-index:100105;transition:height .2s,margin-top .2s;height:500px;margin-top:-250px}#wp-link-backdrop{display:none;position:fixed;top:0;left:0;right:0;bottom:0;min-height:360px;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}#wp-link{position:relative;height:100%}#wp-link-wrap .wp-link-text-field{display:none}#wp-link-wrap.has-text-field .wp-link-text-field{display:block}#link-modal-title{background:#fcfcfc;border-bottom:1px solid #ddd;height:36px;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 36px 0 16px}#wp-link-close{color:#666;padding:0;position:absolute;top:0;right:0;width:36px;height:36px;text-align:center;background:0 0;border:none;cursor:pointer}#wp-link-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:36px;height:36px;content:"\f158"}#wp-link-close:focus,#wp-link-close:hover{color:#00a0d2}#wp-link-close:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#wp-link-wrap #link-selector{-webkit-overflow-scrolling:touch;padding:0 16px;position:absolute;top:37px;left:0;right:0;bottom:44px}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link input[type=text]{box-sizing:border-box}#wp-link #link-options{padding:8px 0 12px}#wp-link p.howto{margin:3px 0}#wp-link p.howto a{text-decoration:none;color:inherit}#wp-link label input[type=text]{margin-top:5px;width:70%}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:80px;text-align:right;padding-right:5px;max-width:24%;vertical-align:middle;word-wrap:break-word}#wp-link .link-search-field{float:left;width:250px;max-width:70%}#wp-link .link-search-wrapper{margin:5px 0 9px;display:block;overflow:hidden}#wp-link .link-search-wrapper span{float:left;margin-top:4px}#wp-link .link-search-wrapper .spinner{margin-top:5px}#wp-link .link-target{padding:3px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wp-link .link-target label{max-width:70%}#wp-link .query-results{border:1px solid #dfdfdf;margin:0 0 12px;background:#fff;overflow:auto;position:absolute;left:16px;right:16px;bottom:0;top:166px}.has-text-field #wp-link .query-results{top:200px}#wp-link li{clear:both;margin-bottom:0;border-bottom:1px solid #f1f1f1;color:#32373c;padding:4px 6px 4px 10px;cursor:pointer;position:relative}#wp-link .query-notice,#wp-link li.unselectable{border-bottom:1px solid #dfdfdf}#wp-link .query-notice{padding:0;background-color:#f7fcfe;color:#000}#wp-link .query-notice .query-notice-default,#wp-link .query-notice .query-notice-hint{display:block;padding:6px;border-left:4px solid #00a0d2}#wp-link .unselectable.no-matches-found{padding:0;border-bottom:1px solid #dfdfdf;background-color:#fef7f1}#wp-link .no-matches-found .item-title{display:block;padding:6px;border-left:4px solid #d54e21}#wp-link .query-results em{font-style:normal}#wp-link li:hover{background:#eaf2fa;color:#151515}#wp-link li.unselectable:hover{background:#fff;cursor:auto;color:#32373c}#wp-link li.selected{background:#ddd;color:#32373c}#wp-link li.selected .item-title{font-weight:600}#wp-link li:last-child{border:none}#wp-link .item-title{display:inline-block;width:80%;width:calc(100% - 68px);word-wrap:break-word}#wp-link .item-info{text-transform:uppercase;color:#666;font-size:11px;position:absolute;right:5px;top:5px}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .submitbox{padding:8px 16px;background:#fcfcfc;border-top:1px solid #ddd;position:absolute;bottom:0;left:0;right:0}#wp-link-cancel{line-height:25px;float:left}#wp-link-update{line-height:23px;float:right}#wp-link-submit{float:right}@media screen and (max-width:782px){#wp-link-wrap{margin-top:-140px}#wp-link-wrap .query-results{top:195px}#wp-link-wrap.has-text-field .query-results{top:235px}#link-selector{padding:0 16px 60px}#wp-link-wrap #link-selector{bottom:52px}#wp-link-cancel{line-height:32px}#wp-link .link-target{padding-top:10px}#wp-link .submitbox .button{margin-bottom:0}}@media screen and (max-width:520px){#wp-link-wrap{width:auto;margin-left:0;left:10px;right:10px;max-width:500px}}@media screen and (max-height:520px){#wp-link-wrap{transition:none;height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto}#search-panel .query-results{position:static}}@media screen and (max-height:290px){#wp-link-wrap{height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto;height:calc(100% - 92px);padding-bottom:2px}#search-panel .query-results{position:static}}div.wp-link-preview{float:left;margin:5px;max-width:694px;overflow:hidden;text-overflow:ellipsis}div.wp-link-preview a{color:#0073aa;text-decoration:underline;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;cursor:pointer}div.wp-link-preview a.wplink-url-error{color:#dc3232}div.wp-link-input{float:left;margin:2px;max-width:694px}div.wp-link-input input{width:300px;padding:3px;box-sizing:border-box}.mce-toolbar div.wp-link-input~.mce-btn,.mce-toolbar div.wp-link-preview~.mce-btn{margin:2px 1px}.mce-inline-toolbar-grp .mce-btn-group .mce-btn:last-child{margin-right:2px}.ui-autocomplete.wplink-autocomplete{z-index:100110;max-height:200px;overflow-y:auto;padding:0;margin:0;list-style:none;position:absolute;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete.wplink-autocomplete li{margin-bottom:0;padding:4px 10px;clear:both;white-space:normal;text-align:left}.ui-autocomplete.wplink-autocomplete li .wp-editor-float-right{float:right}.ui-autocomplete.wplink-autocomplete li.ui-state-focus{background-color:#ddd;cursor:pointer}@media screen and (max-width:782px){div.wp-link-input,div.wp-link-preview{max-width:70%;max-width:calc(100% - 86px)}div.wp-link-preview{margin:8px 0 8px 5px}div.wp-link-input{width:300px}div.wp-link-input input{width:100%;font-size:16px;padding:5px}}.mce-fullscreen{z-index:100010}.rtl .quicktags-toolbar input,.rtl .wp-switch-editor{font-family:Tahoma,sans-serif}.mce-rtl .mce-flow-layout .mce-flow-layout-item>div{direction:rtl}.mce-rtl .mce-listbox i.mce-caret{left:6px}html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .wp-switch-editor{font-family:Arial,sans-serif}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}}
\ No newline at end of file
+.mce-window .mce-wp-help *,.wp-editor-area{box-sizing:border-box}.mce-tinymce{box-shadow:none}#wp-link-wrap,.mce-window{box-shadow:0 3px 6px rgba(0,0,0,.3)}.mce-container,.mce-container *,.mce-widget,.mce-widget *{color:inherit;font-family:inherit}.mce-container .mce-monospace,.mce-widget .mce-monospace{font-family:Consolas,Monaco,monospace;font-size:13px;line-height:150%}#mce-modal-block,#mce-modal-block.mce-fade{opacity:.7;filter:alpha(opacity=70);transition:none;background:#000}.mce-window{border-radius:0;-webkit-font-smoothing:subpixel-antialiased;transition:none}.mce-window .mce-container-body.mce-abs-layout{overflow:visible}.mce-window .mce-window-head{background:#fcfcfc;border-bottom:1px solid #ddd;padding:0;min-height:36px}.mce-window .mce-window-head .mce-title{color:#444;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 36px 0 16px}.mce-window .mce-window-head .mce-close,.mce-window-head .mce-close .mce-i-remove{color:transparent;top:0;right:0;width:36px;height:36px;padding:0;line-height:36px;text-align:center}.mce-window-head .mce-close .mce-i-remove:before{font:400 20px/36px dashicons;text-align:center;color:#666;width:36px;height:36px;display:block}.mce-window-head .mce-close:focus .mce-i-remove:before,.mce-window-head .mce-close:hover .mce-i-remove:before{color:#00a0d2}.mce-window-head .mce-close:focus .mce-i-remove,div.mce-tab:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.mce-window .mce-window-head .mce-dragh{width:calc(100% - 36px)}.mce-window .mce-foot{border-top:1px solid #ddd}#wp-link .query-results,.mce-checkbox i.mce-i-checkbox,.mce-textbox{border:1px solid #ddd;border-radius:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);transition:.05s all ease-in-out}#wp-link .query-results:focus,.mce-checkbox:focus i.mce-i-checkbox,.mce-textbox.mce-focus,.mce-textbox:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}.mce-window .mce-wp-help{height:360px;width:460px;overflow:auto}.mce-window .mce-wp-help>.mce-container-body{width:auto!important}.mce-window .wp-editor-help{padding:10px 10px 0 20px}.mce-window .wp-editor-help h2,.mce-window .wp-editor-help p{margin:8px 0;white-space:normal;font-size:14px;font-weight:400}.mce-window .wp-editor-help table{width:100%;margin-bottom:20px}.mce-window .wp-editor-help table.wp-help-single{margin:0 8px 20px}.mce-window .wp-editor-help table.fixed{table-layout:fixed}.mce-window .wp-editor-help table.fixed td:nth-child(odd),.mce-window .wp-editor-help table.fixed th:nth-child(odd){width:12%}.mce-window .wp-editor-help table.fixed td:nth-child(even),.mce-window .wp-editor-help table.fixed th:nth-child(even){width:38%}.mce-window .wp-editor-help table.fixed th:nth-child(odd){padding:5px 0 0}.mce-window .wp-editor-help td,.mce-window .wp-editor-help th{font-size:13px;padding:5px;vertical-align:middle;word-wrap:break-word;white-space:normal}.mce-window .wp-editor-help th{font-weight:600;padding-bottom:0}.mce-window .wp-editor-help kbd{font-family:monospace;padding:2px 7px 3px;font-weight:600;margin:0;background:#eaeaea;background:rgba(0,0,0,.08)}.mce-window .wp-help-th-center td:nth-child(odd),.mce-window .wp-help-th-center th:nth-child(odd){text-align:center}.mce-floatpanel.mce-popover,.mce-menu{border-color:rgba(0,0,0,.15);border-radius:0;box-shadow:0 3px 5px rgba(0,0,0,.2)}.mce-floatpanel.mce-popover.mce-bottom,.mce-menu{margin-top:2px}.mce-floatpanel .mce-arrow{display:none}.mce-menu .mce-container-body{min-width:160px}.mce-menu-item{border:none;margin-bottom:2px;padding:6px 15px 6px 12px}.mce-menu-has-icons i.mce-ico{line-height:20px}div.mce-panel{border:0;background:#fff}.mce-panel.mce-menu{border:1px solid #ddd}div.mce-tab{line-height:13px}div.mce-toolbar-grp{border-bottom:1px solid #ddd;background:#f5f5f5;padding:0;position:relative}div.mce-inline-toolbar-grp{border:1px solid #a0a5aa;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.15);box-sizing:border-box;margin-bottom:8px;position:absolute;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;max-width:98%;z-index:100100}div.mce-inline-toolbar-grp>div.mce-stack-layout{padding:1px}div.mce-inline-toolbar-grp.mce-arrow-up{margin-bottom:0;margin-top:8px}div.mce-inline-toolbar-grp:after,div.mce-inline-toolbar-grp:before{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-menu.mce-menu-align .mce-menu-item-normal,.quicktags-toolbar,.wp-editor-tools,.wp-editor-wrap,.wp-switch-editor{position:relative}div.mce-inline-toolbar-grp.mce-arrow-up:before{top:-9px;border-bottom-color:#a0a5aa;border-width:0 9px 9px;margin-left:-9px}div.mce-inline-toolbar-grp.mce-arrow-down:before{bottom:-9px;border-top-color:#a0a5aa;border-width:9px 9px 0;margin-left:-9px}div.mce-inline-toolbar-grp.mce-arrow-up:after{top:-8px;border-bottom-color:#f5f5f5;border-width:0 8px 8px;margin-left:-8px}div.mce-inline-toolbar-grp.mce-arrow-down:after{bottom:-8px;border-top-color:#f5f5f5;border-width:8px 8px 0;margin-left:-8px}div.mce-inline-toolbar-grp.mce-arrow-left:after,div.mce-inline-toolbar-grp.mce-arrow-left:before{margin:0}div.mce-inline-toolbar-grp.mce-arrow-left:before{left:20px}div.mce-inline-toolbar-grp.mce-arrow-left:after{left:21px}div.mce-inline-toolbar-grp.mce-arrow-right:after,div.mce-inline-toolbar-grp.mce-arrow-right:before{left:auto;margin:0}div.mce-inline-toolbar-grp.mce-arrow-right:before{right:20px}div.mce-inline-toolbar-grp.mce-arrow-right:after{right:21px}div.mce-inline-toolbar-grp.mce-arrow-full{right:0}div.mce-inline-toolbar-grp.mce-arrow-full>div{width:100%;overflow-x:auto}div.mce-toolbar-grp>div{padding:3px}.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-right:32px}.mce-toolbar .mce-btn-group{margin:0}div.mce-statusbar{border-top:1px solid #e5e5e5}div.mce-path{padding:2px 10px;margin:0}.mce-path,.mce-path .mce-divider,.mce-path-item{font-size:12px}.mce-toolbar .mce-btn,.qt-dfw{border-color:transparent;background:0 0;box-shadow:none;text-shadow:none;cursor:pointer}.mce-btn .mce-txt{direction:inherit;text-align:inherit}.mce-toolbar .mce-btn-group .mce-btn,.qt-dfw{border:1px solid transparent;margin:2px;border-radius:2px}.mce-toolbar .mce-btn-group .mce-btn:focus,.mce-toolbar .mce-btn-group .mce-btn:hover,.qt-dfw:focus,.qt-dfw:hover{background:#fafafa;border-color:#555d66;color:#23282d;box-shadow:inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);outline:0}.mce-toolbar .mce-btn-group .mce-btn.mce-active,.mce-toolbar .mce-btn-group .mce-btn:active,.qt-dfw.active{background:#ebebeb;border-color:#555d66;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.3)}.mce-btn.mce-active,.mce-btn.mce-active button,.mce-btn.mce-active i,.mce-btn.mce-active:hover button,.mce-btn.mce-active:hover i{color:inherit}.mce-toolbar .mce-btn-group .mce-btn.mce-active:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-active:hover{border-color:#23282d}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:hover{color:#a0a5aa;background:0 0;border-color:#ddd;text-shadow:0 1px 0 #fff;box-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-disabled:focus{border-color:#555d66}.mce-toolbar .mce-btn-group .mce-first,.mce-toolbar .mce-btn-group .mce-last{border-color:transparent}.mce-toolbar .mce-btn button,.qt-dfw{padding:2px 3px;line-height:normal}.mce-toolbar .mce-listbox button{font-size:13px;line-height:20px;padding-left:6px;padding-right:20px}.mce-toolbar .mce-btn i{text-shadow:none}.mce-toolbar .mce-btn-group>div{white-space:normal}.mce-toolbar .mce-colorbutton .mce-open{border-right:0}.mce-toolbar .mce-colorbutton .mce-preview{margin:0;padding:0;top:auto;bottom:2px;left:3px;height:3px;width:20px;background:#555d66}.mce-toolbar .mce-btn-group .mce-btn.mce-primary{min-width:0;background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:none}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:2px 3px 1px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary .mce-ico{color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-primary:hover{background:#008ec2;border-color:#006799;color:#fff}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:focus{box-shadow:0 0 1px 1px #33b3db}.mce-toolbar .mce-btn-group .mce-btn.mce-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox{border-radius:0;direction:ltr;background:#fff;border:1px solid #ddd;box-shadow:inset 0 1px 1px -1px rgba(0,0,0,.2)}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:focus,.mce-toolbar .mce-btn-group .mce-btn.mce-listbox:hover{border-color:#b4b9be}.mce-panel .mce-btn i.mce-caret{border-top:6px solid #555d66;margin-left:2px;margin-right:2px}.mce-listbox i.mce-caret{right:4px}.mce-panel .mce-btn:focus i.mce-caret,.mce-panel .mce-btn:hover i.mce-caret{border-top-color:#23282d}.mce-panel .mce-active i.mce-caret{border-top:0;border-bottom:6px solid #23282d;margin-top:7px}.mce-listbox.mce-active i.mce-caret{margin-top:-3px}.mce-toolbar .mce-splitbtn:hover .mce-open{border-right-color:transparent}.mce-toolbar .mce-splitbtn .mce-open.mce-active{background:0 0;outline:0}.mce-menu .mce-menu-item-normal.mce-active,.mce-menu .mce-menu-item-preview.mce-active,.mce-menu .mce-menu-item.mce-selected,.mce-menu .mce-menu-item:focus,.mce-menu .mce-menu-item:hover{background:#0073aa;color:#fff}.mce-menu-item.mce-active .mce-menu-shortcut,.mce-menu-item.mce-disabled:hover .mce-ico,.mce-menu-item.mce-disabled:hover .mce-text,.mce-menu-item:focus .mce-ico,.mce-menu-item:focus .mce-menu-shortcut,.mce-menu-item:focus .mce-text,.mce-menu-item:hover .mce-ico,.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item:hover .mce-text{color:inherit}.mce-menu .mce-menu-item.mce-disabled{cursor:default}.mce-menu .mce-menu-item.mce-disabled:hover{background:#ccc}div.mce-menubar{border-color:#e5e5e5;background:#fff;border-width:0 0 1px}.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus,.mce-menubar .mce-menubtn:hover{border-color:transparent;background:0 0}.mce-menubar .mce-menubtn:focus{color:#124964;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}.mce-menu-item-sep:hover,div.mce-menu .mce-menu-item-sep{border-bottom:1px solid #ddd;height:0;margin:5px 0}.mce-menubtn span{margin-right:0;padding-left:3px}.mce-menu-has-icons i.mce-ico:before{margin-left:-2px}.mce-menu.mce-menu-align .mce-menu-shortcut{bottom:.6em;font-size:.9em}.mce-primary button,.mce-primary button i{text-align:center;color:#fff;text-shadow:none;padding:0;line-height:26px}.mce-window .mce-btn{color:#555;background:#f7f7f7;text-decoration:none;font-size:13px;line-height:26px;height:28px;margin:0;padding:0;cursor:pointer;border:1px solid #ccc;-webkit-appearance:none;border-radius:3px;white-space:nowrap;box-shadow:0 1px 0 #ccc}.mce-window .mce-btn::-moz-focus-inner{border-width:0;border-style:none;padding:0}.mce-window .mce-btn:focus,.mce-window .mce-btn:hover{background:#fafafa;border-color:#999;color:#23282d}.mce-window .mce-btn:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.mce-window .mce-btn:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);-webkit-transform:translateY(1px);transform:translateY(1px)}.mce-window .mce-btn.mce-disabled{color:#a0a5aa!important;border-color:#ddd!important;background:#f7f7f7!important;box-shadow:none!important;text-shadow:0 1px 0 #fff!important;cursor:default;-webkit-transform:none!important;transform:none!important}.mce-window .mce-btn.mce-primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.mce-window .mce-btn.mce-primary:focus,.mce-window .mce-btn.mce-primary:hover{background:#008ec2;border-color:#006799;color:#fff}.mce-window .mce-btn.mce-primary:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}.mce-window .mce-btn.mce-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.mce-window .mce-btn.mce-primary.mce-disabled{color:#66c6e4!important;background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.mce-toolbar .mce-ico,.qt-dfw{text-shadow:none;text-align:center}.mce-menubtn.mce-fixed-width span{overflow-x:hidden;text-overflow:ellipsis;width:82px}.mce-charmap{margin:3px}.mce-charmap td{padding:0;border-color:#ddd;cursor:pointer}.mce-charmap td:hover{background:#f3f3f3}.mce-charmap td div{width:18px;height:22px;line-height:22px}.mce-toolbar .mce-btn .mce-open,.qt-dfw{line-height:20px}.mce-tooltip{margin-top:2px}.rtl .mce-tooltip.wp-hide-mce-tooltip{display:none!important}.mce-tooltip-inner{border-radius:3px;box-shadow:0 3px 5px rgba(0,0,0,.2);color:#fff;font-size:12px}.mce-ico{font-family:tinymce,Arial}.mce-btn-small .mce-ico{font-family:tinymce-small,Arial}.mce-toolbar .mce-ico{color:#555d66;line-height:20px;width:20px;height:20px;margin:0;padding:0}.qt-dfw{color:#555d66;width:28px;height:26px}.mce-toolbar .mce-btn.mce-active .mce-open,.mce-toolbar .mce-btn:focus .mce-open,.mce-toolbar .mce-btn:hover .mce-open{border-left-color:#23282d}div.mce-notification{left:10%!important;right:10%}.mce-notification button.mce-close{right:6px;top:3px;font-weight:400;color:#555d66}.mce-notification button.mce-close:focus,.mce-notification button.mce-close:hover{color:#000}i.mce-i-aligncenter,i.mce-i-alignjustify,i.mce-i-alignleft,i.mce-i-alignright,i.mce-i-backcolor,i.mce-i-blockquote,i.mce-i-bold,i.mce-i-bullist,i.mce-i-charmap,i.mce-i-dashicon,i.mce-i-dfw,i.mce-i-forecolor,i.mce-i-fullscreen,i.mce-i-help,i.mce-i-hr,i.mce-i-indent,i.mce-i-italic,i.mce-i-link,i.mce-i-ltr,i.mce-i-numlist,i.mce-i-outdent,i.mce-i-pastetext,i.mce-i-pasteword,i.mce-i-redo,i.mce-i-remove,i.mce-i-removeformat,i.mce-i-spellchecker,i.mce-i-strikethrough,i.mce-i-underline,i.mce-i-undo,i.mce-i-unlink,i.mce-i-wp-media-library,i.mce-i-wp_adv,i.mce-i-wp_code,i.mce-i-wp_fullscreen,i.mce-i-wp_help,i.mce-i-wp_more,i.mce-i-wp_page{font:400 20px/1 dashicons;padding:0 2px 0 0;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-left:-2px}.qt-dfw{font:400 20px/1 dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}i.mce-i-bold:before{content:"\f200"}i.mce-i-italic:before{content:"\f201"}i.mce-i-bullist:before{content:"\f203"}i.mce-i-numlist:before{content:"\f204"}i.mce-i-blockquote:before{content:"\f205"}i.mce-i-alignleft:before{content:"\f206"}i.mce-i-aligncenter:before{content:"\f207"}i.mce-i-alignright:before{content:"\f208"}i.mce-i-link:before{content:"\f103"}i.mce-i-unlink:before{content:"\f225"}i.mce-i-wp_more:before{content:"\f209"}i.mce-i-strikethrough:before{content:"\f224"}i.mce-i-spellchecker:before{content:"\f210"}.qt-dfw:before,i.mce-i-dfw:before,i.mce-i-fullscreen:before,i.mce-i-wp_fullscreen:before{content:"\f211"}i.mce-i-wp_adv:before{content:"\f212"}i.mce-i-underline:before{content:"\f213"}i.mce-i-alignjustify:before{content:"\f214"}i.mce-i-backcolor:before,i.mce-i-forecolor:before{content:"\f215"}i.mce-i-pastetext:before{content:"\f217"}i.mce-i-removeformat:before{content:"\f218"}i.mce-i-charmap:before{content:"\f220"}i.mce-i-outdent:before{content:"\f221"}i.mce-i-indent:before{content:"\f222"}i.mce-i-undo:before{content:"\f171"}i.mce-i-redo:before{content:"\f172"}i.mce-i-help:before,i.mce-i-wp_help:before{content:"\f223"}i.mce-i-wp-media-library:before{content:"\f104"}i.mce-i-ltr:before{content:"\f320"}i.mce-i-wp_page:before{content:"\f105"}i.mce-i-hr:before{content:"\f460"}i.mce-i-remove:before{content:"\f158"}i.mce-i-wp_code:before{content:"\f475"}.rtl i.mce-i-outdent:before{content:"\f222"}.rtl i.mce-i-indent:before{content:"\f221"}.wp-editor-tools{z-index:1}.wp-editor-tools:after{clear:both;content:"";display:table}.wp-editor-container{clear:both;border:1px solid #e5e5e5}.wp-editor-area{font-family:Consolas,Monaco,monospace;font-size:13px;padding:10px;margin:1px 0 0;line-height:150%;border:0;outline:0;display:block;resize:vertical}.rtl .wp-editor-area{font-family:Tahoma,Monaco,monospace}.locale-he-il .wp-editor-area{font-family:Arial,Monaco,monospace}.wp-editor-container textarea.wp-editor-area{width:100%;margin:0;box-shadow:none}.wp-editor-tabs{float:right}.wp-switch-editor{float:left;box-sizing:content-box;top:1px;background:#ebebeb;color:#666;cursor:pointer;font-size:13px;line-height:19px;height:20px;margin:5px 0 0 5px;padding:3px 8px 4px;border:1px solid #e5e5e5}.wp-switch-editor:focus{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8);outline:0;color:#23282d}.html-active .switch-html:focus,.tmce-active .switch-tmce:focus,.wp-switch-editor:active{box-shadow:none}.wp-switch-editor:active{background-color:#f5f5f5;box-shadow:none}.js .tmce-active .wp-editor-area{color:#fff}.tmce-active .quicktags-toolbar{display:none}.html-active .switch-html,.tmce-active .switch-tmce{background:#f5f5f5;color:#555;border-bottom-color:#f5f5f5}.wp-media-buttons{float:left}.wp-media-buttons .button{margin-right:5px;margin-bottom:4px;padding-left:7px;padding-right:7px}.wp-media-buttons .button:active{position:relative;top:1px;margin-top:-1px;margin-bottom:1px}.wp-media-buttons .insert-media{padding-left:5px}.wp-media-buttons a{text-decoration:none;color:#444;font-size:12px}.wp-media-buttons img{padding:0 4px;vertical-align:middle}.wp-media-buttons span.wp-media-buttons-icon{display:inline-block;width:18px;height:18px;vertical-align:text-top;margin:0 2px}.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}.wp-media-buttons .add_media span.wp-media-buttons-icon:before{font:400 18px/1 dashicons;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f104"}.quicktags-toolbar{padding:3px;border-bottom:1px solid #ddd;background:#f5f5f5;min-height:30px}.has-dfw .quicktags-toolbar{padding-right:35px}.wp-core-ui .quicktags-toolbar input.button.button-small{margin:2px}.quicktags-toolbar input[value=link]{text-decoration:underline}.quicktags-toolbar input[value=del]{text-decoration:line-through}.quicktags-toolbar input[value="i"]{font-style:italic}.quicktags-toolbar input[value="b"]{font-weight:600}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw,.qt-dfw{position:absolute;top:0;right:0;margin:5px 5px 0 0}.qt-fullscreen{position:static;margin:2px}@media screen and (max-width:782px){.mce-toolbar .mce-btn button,.qt-dfw{padding:6px 7px}.mce-toolbar .mce-btn-group .mce-btn.mce-primary button{padding:6px 7px 5px}.mce-toolbar .mce-btn-group .mce-btn{margin:1px}.qt-dfw{width:36px;height:34px}.mce-toolbar .mce-btn-group .mce-btn.mce-wp-dfw{margin:4px 4px 0 0}.mce-toolbar .mce-colorbutton .mce-preview{left:8px;bottom:6px}.mce-window .mce-btn{padding:2px 0}.has-dfw .quicktags-toolbar,.has-dfw div.mce-toolbar-grp .mce-toolbar.mce-first{padding-right:40px}}@media screen and (min-width:782px){.wp-core-ui .quicktags-toolbar input.button.button-small{font-size:12px;height:26px;line-height:24px}}#wp_editbtns,#wp_gallerybtns{padding:2px;position:absolute;display:none;z-index:100020}#wp_delgallery,#wp_delimgbtn,#wp_editgallery,#wp_editimgbtn{border-color:#999;background-color:#eee;margin:2px;padding:2px;border-width:1px;border-style:solid;border-radius:3px}#wp_delgallery:hover,#wp_delimgbtn:hover,#wp_editgallery:hover,#wp_editimgbtn:hover{border-color:#555;background-color:#ccc}#wp-link-wrap{display:none;background-color:#fff;width:500px;overflow:hidden;margin-left:-250px;position:fixed;top:50%;left:50%;z-index:100105;transition:height .2s,margin-top .2s;height:500px;margin-top:-250px}#wp-link-backdrop{display:none;position:fixed;top:0;left:0;right:0;bottom:0;min-height:360px;background:#000;opacity:.7;filter:alpha(opacity=70);z-index:100100}#wp-link{position:relative;height:100%}#wp-link-wrap .wp-link-text-field{display:none}#wp-link-wrap.has-text-field .wp-link-text-field{display:block}#link-modal-title{background:#fcfcfc;border-bottom:1px solid #ddd;height:36px;font-size:18px;font-weight:600;line-height:36px;margin:0;padding:0 36px 0 16px}#wp-link-close{color:#666;padding:0;position:absolute;top:0;right:0;width:36px;height:36px;text-align:center;background:0 0;border:none;cursor:pointer}#wp-link-close:before{font:400 20px/36px dashicons;vertical-align:top;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:36px;height:36px;content:"\f158"}#wp-link-close:focus,#wp-link-close:hover{color:#00a0d2}#wp-link-close:focus{outline:0;box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px rgba(30,140,190,.8)}#wp-link-wrap #link-selector{-webkit-overflow-scrolling:touch;padding:0 16px;position:absolute;top:37px;left:0;right:0;bottom:44px}#wp-link ol,#wp-link ul{list-style:none;margin:0;padding:0}#wp-link input[type=text]{box-sizing:border-box}#wp-link #link-options{padding:8px 0 12px}#wp-link p.howto{margin:3px 0}#wp-link p.howto a{text-decoration:none;color:inherit}#wp-link label input[type=text]{margin-top:5px;width:70%}#wp-link #link-options label span,#wp-link #search-panel label span.search-label{display:inline-block;width:80px;text-align:right;padding-right:5px;max-width:24%;vertical-align:middle;word-wrap:break-word}#wp-link .link-search-field{float:left;width:250px;max-width:70%}#wp-link .link-search-wrapper{margin:5px 0 9px;display:block;overflow:hidden}#wp-link .link-search-wrapper span{float:left;margin-top:4px}#wp-link .link-search-wrapper .spinner{margin-top:5px}#wp-link .link-target{padding:3px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#wp-link .link-target label{max-width:70%}#wp-link .query-results{border:1px solid #dfdfdf;margin:0 0 12px;background:#fff;overflow:auto;position:absolute;left:16px;right:16px;bottom:0;top:166px}.has-text-field #wp-link .query-results{top:200px}#wp-link li{clear:both;margin-bottom:0;border-bottom:1px solid #f1f1f1;color:#32373c;padding:4px 6px 4px 10px;cursor:pointer;position:relative}#wp-link .query-notice,#wp-link li.unselectable{border-bottom:1px solid #dfdfdf}#wp-link .query-notice{padding:0;background-color:#f7fcfe;color:#000}#wp-link .query-notice .query-notice-default,#wp-link .query-notice .query-notice-hint{display:block;padding:6px;border-left:4px solid #00a0d2}#wp-link .unselectable.no-matches-found{padding:0;border-bottom:1px solid #dfdfdf;background-color:#fef7f1}#wp-link .no-matches-found .item-title{display:block;padding:6px;border-left:4px solid #d54e21}#wp-link .query-results em{font-style:normal}#wp-link li:hover{background:#eaf2fa;color:#151515}#wp-link li.unselectable:hover{background:#fff;cursor:auto;color:#32373c}#wp-link li.selected{background:#ddd;color:#32373c}#wp-link li.selected .item-title{font-weight:600}#wp-link li:last-child{border:none}#wp-link .item-title{display:inline-block;width:80%;width:calc(100% - 68px);word-wrap:break-word}#wp-link .item-info{text-transform:uppercase;color:#666;font-size:11px;position:absolute;right:5px;top:5px}#wp-link .river-waiting{display:none;padding:10px 0}#wp-link .submitbox{padding:8px 16px;background:#fcfcfc;border-top:1px solid #ddd;position:absolute;bottom:0;left:0;right:0}#wp-link-cancel{line-height:25px;float:left}#wp-link-update{line-height:23px;float:right}#wp-link-submit{float:right}@media screen and (max-width:782px){#wp-link-wrap{margin-top:-140px}#wp-link-wrap .query-results{top:195px}#wp-link-wrap.has-text-field .query-results{top:235px}#link-selector{padding:0 16px 60px}#wp-link-wrap #link-selector{bottom:52px}#wp-link-cancel{line-height:32px}#wp-link .link-target{padding-top:10px}#wp-link .submitbox .button{margin-bottom:0}}@media screen and (max-width:520px){#wp-link-wrap{width:auto;margin-left:0;left:10px;right:10px;max-width:500px}}@media screen and (max-height:520px){#wp-link-wrap{transition:none;height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto}#search-panel .query-results{position:static}}@media screen and (max-height:290px){#wp-link-wrap{height:auto;margin-top:0;top:10px;bottom:10px}#link-selector{overflow:auto;height:calc(100% - 92px);padding-bottom:2px}#search-panel .query-results{position:static}}div.wp-link-preview{float:left;margin:5px;max-width:694px;overflow:hidden;text-overflow:ellipsis}div.wp-link-preview a{color:#0073aa;text-decoration:underline;transition-property:border,background,color;transition-duration:.05s;transition-timing-function:ease-in-out;cursor:pointer}div.wp-link-preview a.wplink-url-error{color:#dc3232}div.wp-link-input{float:left;margin:2px;max-width:694px}div.wp-link-input input{width:300px;padding:3px;box-sizing:border-box}.mce-toolbar div.wp-link-input~.mce-btn,.mce-toolbar div.wp-link-preview~.mce-btn{margin:2px 1px}.mce-inline-toolbar-grp .mce-btn-group .mce-btn:last-child{margin-right:2px}.ui-autocomplete.wplink-autocomplete{z-index:100110;max-height:200px;overflow-y:auto;padding:0;margin:0;list-style:none;position:absolute;border:1px solid #5b9dd9;box-shadow:0 1px 2px rgba(30,140,190,.8);background-color:#fff}.ui-autocomplete.wplink-autocomplete li{margin-bottom:0;padding:4px 10px;clear:both;white-space:normal;text-align:left}.ui-autocomplete.wplink-autocomplete li .wp-editor-float-right{float:right}.ui-autocomplete.wplink-autocomplete li.ui-state-focus{background-color:#ddd;cursor:pointer}@media screen and (max-width:782px){div.wp-link-input,div.wp-link-preview{max-width:70%;max-width:calc(100% - 86px)}div.wp-link-preview{margin:8px 0 8px 5px}div.wp-link-input{width:300px}div.wp-link-input input{width:100%;font-size:16px;padding:5px}}.mce-fullscreen{z-index:100010}.rtl .quicktags-toolbar input,.rtl .wp-switch-editor{font-family:Tahoma,sans-serif}.mce-rtl .mce-flow-layout .mce-flow-layout-item>div{direction:rtl}.mce-rtl .mce-listbox i.mce-caret{left:6px}html:lang(he-il) .rtl .quicktags-toolbar input,html:lang(he-il) .rtl .wp-switch-editor{font-family:Arial,sans-serif}@media print,(-webkit-min-device-pixel-ratio:1.25),(min-resolution:120dpi){.wp-media-buttons .add_media span.wp-media-buttons-icon{background:0 0}}
\ No newline at end of file
-moz-osx-font-smoothing: grayscale;
}
+.wp-pointer-content h4 {
+ margin: 1.33em 20px 1em;
+ font-size: 1.15em;
+}
+
.wp-pointer-content p {
- padding: 0 15px;
+ padding: 0 20px;
}
.wp-pointer-buttons {
content: " ";
}
+.wp-pointer.arrow-bottom .wp-pointer-content {
+ margin-bottom: -45px;
+}
+
+.wp-pointer.arrow-bottom .wp-pointer-arrow {
+ top: 100%;
+ margin-top: -30px;
+}
+
/* Disable pointers at responsive sizes */
@media screen and ( max-width: 782px ) {
.wp-pointer {
/*! This file is auto-generated */
-.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #ddd;box-shadow:0 3px 6px rgba(0,0,0,.075)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 60px 14px 18px;border:1px solid #3592b6;border-bottom:none;line-height:1.4em;font-size:14px;color:#fff;background:#00a0d2}.wp-pointer-content h3:before{background:#fff;border-radius:50%;color:#00a0d2;content:"\f227";font:400 20px/1.6 dashicons;position:absolute;top:8px;right:15px;speak:none;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-pointer-content p{padding:0 15px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:left;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-right:3px;position:relative}.wp-pointer-buttons a.close:before{background:0 0;color:#72777c;content:"\f153";display:block!important;font:400 16px/1 dashicons;speak:none;margin:1px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;right:-15px;top:1px}.wp-pointer-buttons a.close:hover:before{color:#c00}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.wp-pointer-arrow-inner{z-index:20}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px}.wp-pointer-bottom{margin-top:-13px;padding-bottom:13px}.wp-pointer-left{padding-left:13px}.wp-pointer-right{margin-left:-13px;padding-right:13px}.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{right:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#3592b6}.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer-undefined .wp-pointer-arrow-inner{top:1px;margin-right:-13px;margin-top:-13px;border:13px solid transparent;border-bottom-color:#00a0d2;display:block;content:" "}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#ccc}.wp-pointer-bottom .wp-pointer-arrow-inner{bottom:1px;margin-right:-13px;margin-bottom:-13px;border:13px solid transparent;border-top-color:#fff;display:block;content:" "}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#ccc}.wp-pointer-left .wp-pointer-arrow-inner{left:1px;margin-left:-13px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:" "}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#ccc}.wp-pointer-right .wp-pointer-arrow-inner{right:1px;margin-right:-13px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:" "}@media screen and (max-width:782px){.wp-pointer{display:none}}
\ No newline at end of file
+.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #ddd;box-shadow:0 3px 6px rgba(0,0,0,.075)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 60px 14px 18px;border:1px solid #3592b6;border-bottom:none;line-height:1.4em;font-size:14px;color:#fff;background:#00a0d2}.wp-pointer-content h3:before{background:#fff;border-radius:50%;color:#00a0d2;content:"\f227";font:400 20px/1.6 dashicons;position:absolute;top:8px;right:15px;speak:none;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-pointer-content h4{margin:1.33em 20px 1em;font-size:1.15em}.wp-pointer-content p{padding:0 20px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:left;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-right:3px;position:relative}.wp-pointer-buttons a.close:before{background:0 0;color:#72777c;content:"\f153";display:block!important;font:400 16px/1 dashicons;speak:none;margin:1px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;right:-15px;top:1px}.wp-pointer-buttons a.close:hover:before{color:#c00}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.wp-pointer-arrow-inner{z-index:20}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px}.wp-pointer-bottom{margin-top:-13px;padding-bottom:13px}.wp-pointer-left{padding-left:13px}.wp-pointer-right{margin-left:-13px;padding-right:13px}.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{right:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#3592b6}.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer-undefined .wp-pointer-arrow-inner{top:1px;margin-right:-13px;margin-top:-13px;border:13px solid transparent;border-bottom-color:#00a0d2;display:block;content:" "}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#ccc}.wp-pointer-bottom .wp-pointer-arrow-inner{bottom:1px;margin-right:-13px;margin-bottom:-13px;border:13px solid transparent;border-top-color:#fff;display:block;content:" "}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#ccc}.wp-pointer-left .wp-pointer-arrow-inner{left:1px;margin-left:-13px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:" "}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#ccc}.wp-pointer-right .wp-pointer-arrow-inner{right:1px;margin-right:-13px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:" "}.wp-pointer.arrow-bottom .wp-pointer-content{margin-bottom:-45px}.wp-pointer.arrow-bottom .wp-pointer-arrow{top:100%;margin-top:-30px}@media screen and (max-width:782px){.wp-pointer{display:none}}
\ No newline at end of file
-moz-osx-font-smoothing: grayscale;
}
+.wp-pointer-content h4 {
+ margin: 1.33em 20px 1em;
+ font-size: 1.15em;
+}
+
.wp-pointer-content p {
- padding: 0 15px;
+ padding: 0 20px;
}
.wp-pointer-buttons {
content: " ";
}
+.wp-pointer.arrow-bottom .wp-pointer-content {
+ margin-bottom: -45px;
+}
+
+.wp-pointer.arrow-bottom .wp-pointer-arrow {
+ top: 100%;
+ margin-top: -30px;
+}
+
/* Disable pointers at responsive sizes */
@media screen and ( max-width: 782px ) {
.wp-pointer {
/*! This file is auto-generated */
-.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #ddd;box-shadow:0 3px 6px rgba(0,0,0,.075)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 18px 14px 60px;border:1px solid #3592b6;border-bottom:none;line-height:1.4em;font-size:14px;color:#fff;background:#00a0d2}.wp-pointer-content h3:before{background:#fff;border-radius:50%;color:#00a0d2;content:"\f227";font:400 20px/1.6 dashicons;position:absolute;top:8px;left:15px;speak:none;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-pointer-content p{padding:0 15px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:right;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-left:3px;position:relative}.wp-pointer-buttons a.close:before{background:0 0;color:#72777c;content:"\f153";display:block!important;font:400 16px/1 dashicons;speak:none;margin:1px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;left:-15px;top:1px}.wp-pointer-buttons a.close:hover:before{color:#c00}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.wp-pointer-arrow-inner{z-index:20}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px}.wp-pointer-bottom{margin-top:-13px;padding-bottom:13px}.wp-pointer-left{padding-left:13px}.wp-pointer-right{margin-left:-13px;padding-right:13px}.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{left:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#3592b6}.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer-undefined .wp-pointer-arrow-inner{top:1px;margin-left:-13px;margin-top:-13px;border:13px solid transparent;border-bottom-color:#00a0d2;display:block;content:" "}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#ccc}.wp-pointer-bottom .wp-pointer-arrow-inner{bottom:1px;margin-left:-13px;margin-bottom:-13px;border:13px solid transparent;border-top-color:#fff;display:block;content:" "}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#ccc}.wp-pointer-left .wp-pointer-arrow-inner{left:1px;margin-left:-13px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:" "}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#ccc}.wp-pointer-right .wp-pointer-arrow-inner{right:1px;margin-right:-13px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:" "}@media screen and (max-width:782px){.wp-pointer{display:none}}
\ No newline at end of file
+.wp-pointer-content{padding:0 0 10px;position:relative;font-size:13px;background:#fff;border:1px solid #ddd;box-shadow:0 3px 6px rgba(0,0,0,.075)}.wp-pointer-content h3{position:relative;margin:-1px -1px 5px;padding:15px 18px 14px 60px;border:1px solid #3592b6;border-bottom:none;line-height:1.4em;font-size:14px;color:#fff;background:#00a0d2}.wp-pointer-content h3:before{background:#fff;border-radius:50%;color:#00a0d2;content:"\f227";font:400 20px/1.6 dashicons;position:absolute;top:8px;left:15px;speak:none;text-align:center;width:32px;height:32px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wp-pointer-content h4{margin:1.33em 20px 1em;font-size:1.15em}.wp-pointer-content p{padding:0 20px}.wp-pointer-buttons{margin:0;padding:5px 15px;overflow:auto}.wp-pointer-buttons a{float:right;display:inline-block;text-decoration:none}.wp-pointer-buttons a.close{padding-left:3px;position:relative}.wp-pointer-buttons a.close:before{background:0 0;color:#72777c;content:"\f153";display:block!important;font:400 16px/1 dashicons;speak:none;margin:1px 0;text-align:center;-webkit-font-smoothing:antialiased!important;width:10px;height:100%;position:absolute;left:-15px;top:1px}.wp-pointer-buttons a.close:hover:before{color:#c00}.wp-pointer-arrow,.wp-pointer-arrow-inner{position:absolute;width:0;height:0}.wp-pointer-arrow{z-index:10;width:0;height:0;border:0 solid transparent}.wp-pointer-arrow-inner{z-index:20}.wp-pointer-top,.wp-pointer-undefined{padding-top:13px}.wp-pointer-bottom{margin-top:-13px;padding-bottom:13px}.wp-pointer-left{padding-left:13px}.wp-pointer-right{margin-left:-13px;padding-right:13px}.wp-pointer-bottom .wp-pointer-arrow,.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{left:50px}.wp-pointer-left .wp-pointer-arrow,.wp-pointer-right .wp-pointer-arrow{top:50%;margin-top:-15px}.wp-pointer-top .wp-pointer-arrow,.wp-pointer-undefined .wp-pointer-arrow{top:0;border-width:0 13px 13px;border-bottom-color:#3592b6}.wp-pointer-top .wp-pointer-arrow-inner,.wp-pointer-undefined .wp-pointer-arrow-inner{top:1px;margin-left:-13px;margin-top:-13px;border:13px solid transparent;border-bottom-color:#00a0d2;display:block;content:" "}.wp-pointer-bottom .wp-pointer-arrow{bottom:0;border-width:13px 13px 0;border-top-color:#ccc}.wp-pointer-bottom .wp-pointer-arrow-inner{bottom:1px;margin-left:-13px;margin-bottom:-13px;border:13px solid transparent;border-top-color:#fff;display:block;content:" "}.wp-pointer-left .wp-pointer-arrow{left:0;border-width:13px 13px 13px 0;border-right-color:#ccc}.wp-pointer-left .wp-pointer-arrow-inner{left:1px;margin-left:-13px;margin-top:-13px;border:13px solid transparent;border-right-color:#fff;display:block;content:" "}.wp-pointer-right .wp-pointer-arrow{right:0;border-width:13px 0 13px 13px;border-left-color:#ccc}.wp-pointer-right .wp-pointer-arrow-inner{right:1px;margin-right:-13px;margin-top:-13px;border:13px solid transparent;border-left-color:#fff;display:block;content:" "}.wp-pointer.arrow-bottom .wp-pointer-content{margin-bottom:-45px}.wp-pointer.arrow-bottom .wp-pointer-arrow{top:100%;margin-top:-30px}@media screen and (max-width:782px){.wp-pointer{display:none}}
\ No newline at end of file
<div class="theme-id-container">
<h3 class="theme-name" id="{{ data.section }}-{{ data.theme.id }}-name">{{ data.theme.name }}</h3>
<div class="theme-actions">
- <button type="button" class="button button-primary preview-theme" aria-label="<?php echo esc_attr( $preview_label ); ?>" data-slug="{{ data.theme.id }}"><?php _e( 'Live Preview' ); ?></span>
+ <button type="button" class="button button-primary preview-theme" aria-label="<?php echo esc_attr( $preview_label ); ?>" data-slug="{{ data.theme.id }}"><?php _e( 'Live Preview' ); ?></button>
</div>
</div>
<div class="notice notice-success notice-alt"><p><?php _ex( 'Installed', 'theme' ); ?></p></div>
add_action( 'do_feed_atom', 'do_feed_atom', 10, 1 );
add_action( 'do_pings', 'do_all_pings', 10, 1 );
add_action( 'do_robots', 'do_robots' );
-add_action( 'set_comment_cookies', 'wp_set_comment_cookies', 10, 2 );
+add_action( 'set_comment_cookies', 'wp_set_comment_cookies', 10, 3 );
add_action( 'sanitize_comment_cookies', 'sanitize_comment_cookies' );
add_action( 'admin_print_scripts', 'print_emoji_detection_script' );
add_action( 'admin_print_scripts', 'print_head_scripts', 20 );
add_action( 'transition_post_status', '_update_term_count_on_transition_post_status', 10, 3 );
add_action( 'comment_form', 'wp_comment_form_unfiltered_html_nonce' );
add_action( 'admin_init', 'send_frame_options_header', 10, 0 );
+add_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' );
add_action( 'welcome_panel', 'wp_welcome_panel' );
+// Privacy
+add_action( 'user_request_action_confirmed', '_wp_privacy_account_request_confirmed' );
+add_action( 'user_request_action_confirmed', '_wp_privacy_send_request_confirmation_notification', 12 ); // After request marked as completed.
+add_filter( 'wp_privacy_personal_data_exporters', 'wp_register_comment_personal_data_exporter' );
+add_filter( 'wp_privacy_personal_data_exporters', 'wp_register_media_personal_data_exporter' );
+add_filter( 'wp_privacy_personal_data_exporters', 'wp_register_user_personal_data_exporter', 1 );
+add_filter( 'wp_privacy_personal_data_erasers', 'wp_register_comment_personal_data_eraser' );
+add_action( 'init', 'wp_schedule_delete_old_privacy_export_files' );
+add_action( 'wp_privacy_delete_old_export_files', 'wp_privacy_delete_old_export_files' );
+
// Cron tasks
add_action( 'wp_scheduled_delete', 'wp_scheduled_delete' );
add_action( 'wp_scheduled_auto_draft_delete', 'wp_delete_auto_drafts' );
*
* @param string The emoji base URL for png images.
*/
- 'baseUrl' => apply_filters( 'emoji_url', 'https://s.w.org/images/core/emoji/2.4/72x72/' ),
+ 'baseUrl' => apply_filters( 'emoji_url', 'https://s.w.org/images/core/emoji/11/72x72/' ),
/**
* Filters the extension of the emoji png files.
*
* @param string The emoji base URL for svg images.
*/
- 'svgUrl' => apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.4/svg/' ),
+ 'svgUrl' => apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/11/svg/' ),
/**
* Filters the extension of the emoji SVG files.
?>
<script type="text/javascript">
window._wpemojiSettings = <?php echo wp_json_encode( $settings ); ?>;
- !function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55357,56692,8205,9792,65039],[55357,56692,8203,9792,65039]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings);
+ !function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55358,56760,9792,65039],[55358,56760,8203,9792,65039]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<?php
}
}
/** This filter is documented in wp-includes/formatting.php */
- $cdn_url = apply_filters( 'emoji_url', 'https://s.w.org/images/core/emoji/2.4/72x72/' );
+ $cdn_url = apply_filters( 'emoji_url', 'https://s.w.org/images/core/emoji/11/72x72/' );
/** This filter is documented in wp-includes/formatting.php */
$ext = apply_filters( 'emoji_ext', '.png' );
// Do not remove the START/END comments - they're used to find where to insert the arrays.
// START: emoji arrays
- $entities = array('👩‍❤️‍💋‍👩','👩‍❤️‍💋‍👨','👨‍❤️‍💋‍👨','🏴󠁧󠁢󠁳󠁣󠁴󠁿','🏴󠁧󠁢󠁷󠁬󠁳󠁿','🏴󠁧󠁢󠁥󠁮󠁧󠁿','👩‍👩‍👧‍👦','👨‍👨‍👦‍👦','👩‍👩‍👦‍👦','👨‍👨‍👧‍👦','👨‍👨‍👧‍👧','👨‍👩‍👧‍👧','👨‍👩‍👦‍👦','👩‍👩‍👧‍👧','👨‍👩‍👧‍👦','👨‍❤️‍👨','👩‍❤️‍👨','👩‍❤️‍👩','👩‍👩‍👦','👩‍👦‍👦','👩‍👧‍👦','👩‍👧‍👧','👨‍👨‍👦','👨‍👩‍👧','👨‍👧‍👧','👨‍👧‍👦','👩‍👩‍👧','👨‍👩‍👦','👨‍👨‍👧','👨‍👦‍👦','👩🏾‍✈️','🏋🏻‍♂️','🏋🏼‍♀️','🏋🏼‍♂️','🏋🏽‍♀️','🏋🏽‍♂️','🏋🏾‍♀️','🏋🏾‍♂️','🏋🏿‍♀️','🏋🏿‍♂️','🏌🏻‍♀️','🏌🏻‍♂️','🏌🏼‍♀️','🏌🏼‍♂️','🏌🏽‍♀️','🏌🏽‍♂️','🏌🏾‍♀️','🏌🏾‍♂️','🏌🏿‍♀️','🏌🏿‍♂️','💆🏻‍♀️','🏃🏼‍♀️','🏃🏼‍♂️','🧝🏿‍♂️','🧝🏿‍♀️','🧝🏾‍♂️','🧝🏾‍♀️','🧝🏽‍♂️','🧝🏽‍♀️','🧝🏼‍♂️','🧝🏼‍♀️','🧝🏻‍♂️','🧝🏻‍♀️','🧜🏿‍♂️','🧜🏿‍♀️','🧜🏾‍♂️','🧜🏾‍♀️','👨🏻‍⚕️','👨🏻‍⚖️','👨🏻‍✈️','🧜🏽‍♂️','🧜🏽‍♀️','🧜🏼‍♂️','🧜🏼‍♀️','🧜🏻‍♂️','🧜🏻‍♀️','🧛🏿‍♂️','🧛🏿‍♀️','🧛🏾‍♂️','🧛🏾‍♀️','🧛🏽‍♂️','🧛🏽‍♀️','🧛🏼‍♂️','👨🏼‍⚕️','👨🏼‍⚖️','👨🏼‍✈️','🧛🏼‍♀️','🧛🏻‍♂️','🧛🏻‍♀️','🧚🏿‍♂️','🧚🏿‍♀️','🧚🏾‍♂️','🧚🏾‍♀️','🧚🏽‍♂️','🧚🏽‍♀️','🧚🏼‍♂️','🧚🏼‍♀️','🧚🏻‍♂️','🧚🏻‍♀️','👨🏽‍⚕️','👨🏽‍⚖️','👨🏽‍✈️','🧙🏿‍♂️','🧙🏿‍♀️','🧙🏾‍♂️','🧙🏾‍♀️','🧙🏽‍♂️','🧙🏽‍♀️','🧙🏼‍♂️','🧙🏼‍♀️','🧙🏻‍♂️','🧙🏻‍♀️','🧘🏿‍♂️','🧘🏿‍♀️','🧘🏾‍♂️','👨🏾‍⚕️','👨🏾‍⚖️','👨🏾‍✈️','🧘🏾‍♀️','🧘🏽‍♂️','🧘🏽‍♀️','🧘🏼‍♂️','🧘🏼‍♀️','🧘🏻‍♂️','🧘🏻‍♀️','🧗🏿‍♂️','🧗🏿‍♀️','🧗🏾‍♂️','🧗🏾‍♀️','🧗🏽‍♂️','🧗🏽‍♀️','👨🏿‍⚕️','👨🏿‍⚖️','👨🏿‍✈️','🧗🏼‍♂️','🧗🏼‍♀️','🧗🏻‍♂️','🧗🏻‍♀️','🧖🏿‍♂️','🧖🏿‍♀️','🧖🏾‍♂️','🏃🏽‍♀️','🧖🏾‍♀️','🏃🏽‍♂️','🏃🏾‍♀️','🧖🏽‍♂️','🏃🏾‍♂️','🏃🏿‍♀️','🏃🏿‍♂️','🏄🏻‍♀️','🏄🏻‍♂️','🏄🏼‍♀️','🏄🏼‍♂️','🏄🏽‍♀️','🏄🏽‍♂️','🏄🏾‍♀️','🧖🏽‍♀️','🧖🏼‍♂️','🧖🏼‍♀️','🧖🏻‍♂️','🧖🏻‍♀️','🤾🏿‍♂️','🤾🏿‍♀️','🤾🏾‍♂️','🤾🏾‍♀️','🏄🏾‍♂️','🏄🏿‍♀️','🤾🏽‍♂️','🤾🏽‍♀️','🤾🏼‍♂️','🤾🏼‍♀️','🤾🏻‍♂️','🤾🏻‍♀️','🤽🏿‍♂️','🤽🏿‍♀️','🤽🏾‍♂️','🤽🏾‍♀️','🤽🏽‍♂️','🤽🏽‍♀️','🤽🏼‍♂️','👩🏻‍⚕️','👩🏻‍⚖️','👩🏻‍✈️','🤽🏼‍♀️','🤽🏻‍♂️','🤽🏻‍♀️','🤹🏿‍♂️','🤹🏿‍♀️','🤹🏾‍♂️','🤹🏾‍♀️','🤹🏽‍♂️','🤹🏽‍♀️','🤹🏼‍♂️','🤹🏼‍♀️','🤹🏻‍♂️','🤹🏻‍♀️','👩🏼‍⚕️','👩🏼‍⚖️','👩🏼‍✈️','🤸🏿‍♂️','🤸🏿‍♀️','🤸🏾‍♂️','🤸🏾‍♀️','🤸🏽‍♂️','🤸🏽‍♀️','🤸🏼‍♂️','🤸🏼‍♀️','🤸🏻‍♂️','🤸🏻‍♀️','🤷🏿‍♂️','🤷🏿‍♀️','🤷🏾‍♂️','👩🏽‍⚕️','👩🏽‍⚖️','👩🏽‍✈️','🤷🏾‍♀️','🤷🏽‍♂️','🤷🏽‍♀️','🤷🏼‍♂️','🤷🏼‍♀️','🤷🏻‍♂️','🤷🏻‍♀️','🤵🏿‍♂️','🤵🏿‍♀️','🤵🏾‍♂️','🤵🏾‍♀️','🤵🏽‍♂️','🤵🏽‍♀️','👩🏾‍⚕️','👩🏾‍⚖️','🏃🏻‍♂️','🤵🏼‍♂️','🤵🏼‍♀️','🤵🏻‍♂️','🤵🏻‍♀️','🤦🏿‍♂️','🤦🏿‍♀️','🤦🏾‍♂️','🤦🏾‍♀️','🤦🏽‍♂️','🤦🏽‍♀️','🤦🏼‍♂️','🤦🏼‍♀️','🤦🏻‍♂️','👩🏿‍⚕️','👩🏿‍⚖️','👩🏿‍✈️','🤦🏻‍♀️','🚶🏿‍♂️','🚶🏿‍♀️','🚶🏾‍♂️','🚶🏾‍♀️','🚶🏽‍♂️','🚶🏽‍♀️','🏄🏿‍♂️','🚶🏼‍♂️','🏊🏻‍♀️','🏊🏻‍♂️','🚶🏼‍♀️','🏊🏼‍♀️','🏊🏼‍♂️','🏊🏽‍♀️','🏊🏽‍♂️','🏊🏾‍♀️','🚶🏻‍♂️','🚶🏻‍♀️','🚵🏿‍♂️','🚵🏿‍♀️','🚵🏾‍♂️','🚵🏾‍♀️','🚵🏽‍♂️','🚵🏽‍♀️','🚵🏼‍♂️','🏊🏾‍♂️','🏊🏿‍♀️','🏊🏿‍♂️','🏋🏻‍♀️','👮🏻‍♀️','👮🏻‍♂️','👮🏼‍♀️','👮🏼‍♂️','👮🏽‍♀️','👮🏽‍♂️','👮🏾‍♀️','👮🏾‍♂️','👮🏿‍♀️','👮🏿‍♂️','🚵🏼‍♀️','🚵🏻‍♂️','🚵🏻‍♀️','🚴🏿‍♂️','👱🏻‍♀️','👱🏻‍♂️','👱🏼‍♀️','👱🏼‍♂️','👱🏽‍♀️','👱🏽‍♂️','👱🏾‍♀️','👱🏾‍♂️','👱🏿‍♀️','👱🏿‍♂️','🚴🏿‍♀️','🚴🏾‍♂️','👳🏻‍♀️','👳🏻‍♂️','👳🏼‍♀️','👳🏼‍♂️','👳🏽‍♀️','👳🏽‍♂️','👳🏾‍♀️','👳🏾‍♂️','👳🏿‍♀️','👳🏿‍♂️','🚴🏾‍♀️','🚴🏽‍♂️','👷🏻‍♀️','👷🏻‍♂️','👷🏼‍♀️','👷🏼‍♂️','👷🏽‍♀️','👷🏽‍♂️','👷🏾‍♀️','👷🏾‍♂️','👷🏿‍♀️','👷🏿‍♂️','🚴🏽‍♀️','🚴🏼‍♂️','💁🏻‍♀️','💁🏻‍♂️','💁🏼‍♀️','💁🏼‍♂️','💁🏽‍♀️','💁🏽‍♂️','💁🏾‍♀️','💁🏾‍♂️','💁🏿‍♀️','💁🏿‍♂️','🚴🏼‍♀️','🚴🏻‍♂️','💂🏻‍♀️','💂🏻‍♂️','💂🏼‍♀️','💂🏼‍♂️','💂🏽‍♀️','💂🏽‍♂️','💂🏾‍♀️','💂🏾‍♂️','💂🏿‍♀️','💂🏿‍♂️','🚴🏻‍♀️','🚣🏿‍♂️','🏃🏻‍♀️','💆🏻‍♂️','💆🏼‍♀️','💆🏼‍♂️','💆🏽‍♀️','💆🏽‍♂️','💆🏾‍♀️','💆🏾‍♂️','💆🏿‍♀️','💆🏿‍♂️','🚣🏿‍♀️','🚣🏾‍♂️','💇🏻‍♀️','💇🏻‍♂️','💇🏼‍♀️','💇🏼‍♂️','💇🏽‍♀️','💇🏽‍♂️','💇🏾‍♀️','💇🏾‍♂️','💇🏿‍♀️','💇🏿‍♂️','🚣🏾‍♀️','🚣🏽‍♂️','🕴🏻‍♀️','🕴🏻‍♂️','🕴🏼‍♀️','🕴🏼‍♂️','🕴🏽‍♀️','🕴🏽‍♂️','🕴🏾‍♀️','🕴🏾‍♂️','🕴🏿‍♀️','🕴🏿‍♂️','🕵🏻‍♀️','🕵🏻‍♂️','🕵🏼‍♀️','🕵🏼‍♂️','🕵🏽‍♀️','🕵🏽‍♂️','🕵🏾‍♀️','🕵🏾‍♂️','🕵🏿‍♀️','🕵🏿‍♂️','🙅🏻‍♀️','🙅🏻‍♂️','🙅🏼‍♀️','🙅🏼‍♂️','🙅🏽‍♀️','🙅🏽‍♂️','🙅🏾‍♀️','🙅🏾‍♂️','🙅🏿‍♀️','🙅🏿‍♂️','🚣🏽‍♀️','🚣🏼‍♂️','🙆🏻‍♀️','🙆🏻‍♂️','🙆🏼‍♀️','🙆🏼‍♂️','🙆🏽‍♀️','🙆🏽‍♂️','🙆🏾‍♀️','🙆🏾‍♂️','🙆🏿‍♀️','🙆🏿‍♂️','🚣🏼‍♀️','🚣🏻‍♂️','🙇🏻‍♀️','🙇🏻‍♂️','🙇🏼‍♀️','🙇🏼‍♂️','🙇🏽‍♀️','🙇🏽‍♂️','🙇🏾‍♀️','🙇🏾‍♂️','🙇🏿‍♀️','🙇🏿‍♂️','🚣🏻‍♀️','🙎🏿‍♂️','🙋🏻‍♀️','🙋🏻‍♂️','🙋🏼‍♀️','🙋🏼‍♂️','🙋🏽‍♀️','🙋🏽‍♂️','🙋🏾‍♀️','🙋🏾‍♂️','🙋🏿‍♀️','🙋🏿‍♂️','🙎🏿‍♀️','🙎🏾‍♂️','🙍🏻‍♀️','🙍🏻‍♂️','🙍🏼‍♀️','🙍🏼‍♂️','🙍🏽‍♀️','🙍🏽‍♂️','🙍🏾‍♀️','🙍🏾‍♂️','🙍🏿‍♀️','🙍🏿‍♂️','🙎🏾‍♀️','🙎🏽‍♂️','🙎🏻‍♀️','🙎🏻‍♂️','🙎🏼‍♀️','🙎🏼‍♂️','🙎🏽‍♀️','🏋️‍♀️','🕵️‍♀️','🕵️‍♂️','🏋️‍♂️','⛹🏾‍♀️','🏌️‍♀️','🕴️‍♀️','🕴️‍♂️','🏌️‍♂️','⛹🏻‍♂️','⛹🏻‍♀️','⛹🏾‍♂️','⛹🏿‍♀️','⛹🏿‍♂️','⛹🏽‍♀️','⛹🏽‍♂️','⛹🏼‍♀️','⛹🏼‍♂️','⛹️‍♀️','⛹️‍♂️','👩🏻‍🏭','👨🏻‍🌾','👨🏻‍🍳','👨🏻‍🎓','👨🏻‍🎤','👨🏻‍🎨','👨🏻‍🏫','👨🏻‍🏭','👨🏻‍💻','👨🏻‍💼','👨🏻‍🔧','👨🏻‍🔬','👨🏻‍🚀','👨🏻‍🚒','👨🏼‍🌾','👨🏼‍🍳','👨🏼‍🎓','👨🏼‍🎤','👨🏼‍🎨','👨🏼‍🏫','👨🏼‍🏭','👨🏼‍💻','👨🏼‍💼','👨🏼‍🔧','👨🏼‍🔬','👨🏼‍🚀','👨🏼‍🚒','👨🏽‍🌾','👨🏽‍🍳','👨🏽‍🎓','👨🏽‍🎤','👨🏽‍🎨','👨🏽‍🏫','👨🏽‍🏭','👨🏽‍💻','👨🏽‍💼','👨🏽‍🔧','👨🏽‍🔬','👨🏽‍🚀','👨🏽‍🚒','👨🏾‍🌾','👨🏾‍🍳','👨🏾‍🎓','👨🏾‍🎤','👨🏾‍🎨','👨🏾‍🏫','👨🏾‍🏭','👨🏾‍💻','👨🏾‍💼','👨🏾‍🔧','👨🏾‍🔬','👨🏾‍🚀','👨🏾‍🚒','👩🏿‍🚒','👩🏿‍🚀','👩🏿‍🔬','👩🏿‍🔧','👩🏿‍💼','👩🏿‍💻','👩🏿‍🏭','👩🏿‍🏫','👩🏿‍🎨','👨🏿‍🌾','👨🏿‍🍳','👩🏿‍🎤','👩🏿‍🎓','👩🏿‍🍳','👩🏿‍🌾','👩🏾‍🚒','👩🏾‍🚀','👩🏾‍🔬','👩🏾‍🔧','👩🏾‍💼','👩🏾‍💻','👨🏿‍🎓','👨🏿‍🎤','👩🏾‍🏭','👩🏾‍🏫','👩🏾‍🎨','👩🏾‍🎤','👩🏾‍🎓','👩🏾‍🍳','👩🏾‍🌾','👩🏽‍🚒','👩🏽‍🚀','👩🏽‍🔬','👨🏿‍🎨','👨🏿‍🏫','👩🏽‍🔧','👩🏽‍💼','👩🏽‍💻','👩🏽‍🏭','👩🏽‍🏫','👩🏽‍🎨','👩🏽‍🎤','👩🏽‍🎓','👩🏽‍🍳','👩🏽‍🌾','👨🏿‍🏭','👨🏿‍💻','👩🏼‍🚒','👩🏼‍🚀','👩🏼‍🔬','👩🏼‍🔧','👩🏼‍💼','👩🏼‍💻','👩🏼‍🏭','👩🏼‍🏫','👩🏼‍🎨','👩🏼‍🎤','👨🏿‍💼','👨🏿‍🔧','👨🏿‍🔬','👨🏿‍🚀','👩🏼‍🎓','👩🏼‍🍳','👩🏼‍🌾','👩🏻‍🚒','👩🏻‍🚀','👩🏻‍🔬','👩🏻‍🔧','👩🏻‍💼','👩🏻‍💻','👨🏿‍🚒','👩🏻‍🌾','👩🏻‍🍳','👩🏻‍🏫','👩🏻‍🎨','👩🏻‍🎤','👩🏻‍🎓','🏳️‍🌈','🤽‍♂️','👨‍✈️','👨‍⚖️','👨‍⚕️','🏃‍♀️','🤾‍♀️','🤾‍♂️','🏃‍♂️','🏄‍♀️','🏄‍♂️','🏊‍♀️','🏊‍♂️','🙋‍♂️','🙋‍♀️','🙍‍♂️','🏴‍☠️','🧟‍♂️','🧖‍♀️','🧖‍♂️','🧟‍♀️','🧞‍♂️','🧞‍♀️','🧝‍♂️','🙍‍♀️','🤼‍♂️','🤼‍♀️','🤹‍♂️','🤹‍♀️','🤸‍♂️','🧗‍♀️','🧗‍♂️','🤸‍♀️','🤷‍♂️','🤷‍♀️','🤵‍♂️','🤵‍♀️','🤦‍♂️','🤦‍♀️','🧝‍♀️','🚶‍♂️','🚶‍♀️','🧘‍♀️','🧘‍♂️','🙇‍♂️','🙎‍♀️','🙎‍♂️','🙇‍♀️','🙆‍♂️','🙆‍♀️','🙅‍♂️','🙅‍♀️','💇‍♂️','🧜‍♂️','🧙‍♀️','🧙‍♂️','🚵‍♂️','🚵‍♀️','🧜‍♀️','🤽‍♀️','💇‍♀️','💆‍♂️','👩‍⚕️','👩‍⚖️','👩‍✈️','👮‍♀️','🧚‍♀️','🧚‍♂️','👮‍♂️','👯‍♀️','🚴‍♂️','🚴‍♀️','👯‍♂️','👱‍♀️','👱‍♂️','👳‍♀️','👳‍♂️','👷‍♀️','🧛‍♀️','🧛‍♂️','👷‍♂️','💁‍♀️','💁‍♂️','💂‍♀️','🚣‍♂️','🚣‍♀️','💂‍♂️','💆‍♀️','👨‍🌾','👩‍🚒','👩‍🔧','👩‍💼','👩‍💻','👩‍👧','👩‍👦','👩‍🏭','👩‍🏫','👩‍🎨','👩‍🎤','👩‍🎓','👩‍🍳','👁‍🗨','👩‍🌾','👩‍🚀','👨‍🍳','👨‍🎓','👨‍🎤','👨‍🎨','👨‍🏫','👨‍🏭','👨‍👦','👨‍👧','👨‍💻','👨‍💼','👨‍🔧','👨‍🔬','👨‍🚀','👨‍🚒','👩‍🔬','👳🏾','🇧🇿','🇨🇦','👳🏿','🏋🏻','🇨🇨','👴🏻','👴🏼','👴🏽','👴🏾','👴🏿','👵🏻','👵🏼','👵🏽','👵🏾','👵🏿','👶🏻','👶🏼','👶🏽','👶🏾','👶🏿','🇨🇩','🏋🏼','👷🏻','🇨🇫','🇨🇬','👷🏼','🏋🏽','🇨🇭','👷🏽','🇨🇮','🏋🏾','👷🏾','🇨🇰','🇨🇱','👷🏿','🏋🏿','🇨🇲','👸🏻','👸🏼','👸🏽','👸🏾','👸🏿','👼🏻','👼🏼','👼🏽','👼🏾','👼🏿','🇨🇳','🇨🇴','💁🏻','🇨🇵','🏌🏻','💁🏼','🇨🇷','🇨🇺','💁🏽','🏌🏼','🇨🇻','💁🏾','🇨🇼','🏌🏽','💁🏿','🇨🇽','🇨🇾','🏌🏾','🇨🇿','💂🏻','🇩🇪','🏌🏿','💂🏼','🇩🇬','🇩🇯','💂🏽','🇩🇰','🇩🇲','💂🏾','🇩🇴','🇩🇿','💂🏿','🇪🇦','🇪🇨','💃🏻','💃🏼','💃🏽','💃🏾','💃🏿','💅🏻','💅🏼','💅🏽','💅🏾','💅🏿','👂🏻','👂🏼','💆🏻','👂🏽','👂🏾','💆🏼','👂🏿','👃🏻','💆🏽','👃🏼','👃🏽','💆🏾','👃🏾','👃🏿','💆🏿','👆🏻','👆🏼','👆🏽','👆🏾','💇🏻','👆🏿','👇🏻','💇🏼','👇🏼','👇🏽','💇🏽','👇🏾','👇🏿','💇🏾','👈🏻','👈🏼','💇🏿','👈🏽','👈🏾','💪🏻','💪🏼','💪🏽','💪🏾','💪🏿','👈🏿','👉🏻','🕴🏻','👉🏼','👉🏽','🕴🏼','👉🏾','👉🏿','🕴🏽','👊🏻','👊🏼','🕴🏾','👊🏽','👊🏾','🕴🏿','👊🏿','👋🏻','👋🏼','👋🏽','🕵🏻','👋🏾','👋🏿','🕵🏼','👌🏻','👌🏼','🕵🏽','👌🏽','👌🏾','🕵🏾','👌🏿','👍🏻','🕵🏿','👍🏼','👍🏽','🕺🏻','🕺🏼','🕺🏽','🕺🏾','🕺🏿','🖐🏻','🖐🏼','🖐🏽','🖐🏾','🖐🏿','🖕🏻','🖕🏼','🖕🏽','🖕🏾','🖕🏿','🖖🏻','🖖🏼','🖖🏽','🖖🏾','🖖🏿','👍🏾','👍🏿','🙅🏻','👎🏻','👎🏼','🙅🏼','👎🏽','👎🏾','🙅🏽','👎🏿','👏🏻','🙅🏾','👏🏼','👏🏽','🙅🏿','👏🏾','👏🏿','👐🏻','👐🏼','🙆🏻','👐🏽','👐🏾','🙆🏼','👐🏿','👦🏻','🙆🏽','👦🏼','👦🏽','🙆🏾','👦🏾','👦🏿','🙆🏿','👧🏻','👧🏼','👧🏽','👧🏾','🙇🏻','👧🏿','🇪🇪','🙇🏼','🇪🇬','🇪🇭','🙇🏽','🇪🇷','🇪🇸','🙇🏾','🇪🇹','🇪🇺','🙇🏿','🇫🇮','🇫🇯','🇫🇰','🇫🇲','🙋🏻','🇫🇴','🇫🇷','🙋🏼','🇬🇦','🇬🇧','🙋🏽','🇬🇩','👨🏻','🙋🏾','🇬🇪','🇬🇫','🙋🏿','🇬🇬','🇬🇭','🙌🏻','🙌🏼','🙌🏽','🙌🏾','🙌🏿','🇬🇮','🇬🇱','🙍🏻','🇬🇲','🇬🇳','🙍🏼','🇬🇵','🇬🇶','🙍🏽','🇬🇷','🇬🇸','🙍🏾','🇬🇹','🇬🇺','🙍🏿','🇬🇼','🇬🇾','👨🏼','🇭🇰','🙎🏻','🇭🇲','🇭🇳','🙎🏼','🇭🇷','🇭🇹','🙎🏽','🇭🇺','🇮🇨','🙎🏾','🇮🇩','🇮🇪','🙎🏿','🇮🇱','🇮🇲','🙏🏻','🙏🏼','🙏🏽','🙏🏾','🙏🏿','🇮🇳','🇮🇴','🚣🏻','🇮🇶','🇮🇷','🚣🏼','🇮🇸','👨🏽','🚣🏽','🇮🇹','🇯🇪','🚣🏾','🇯🇲','🇯🇴','🚣🏿','🇯🇵','🇰🇪','🇰🇬','🇰🇭','🚴🏻','🇰🇮','🇰🇲','🚴🏼','🇰🇳','🇰🇵','🚴🏽','🇰🇷','🇰🇼','🚴🏾','🇰🇾','🇰🇿','🚴🏿','👨🏾','🇱🇦','🇱🇧','🇱🇨','🚵🏻','🇱🇮','🇱🇰','🚵🏼','🇱🇷','🇱🇸','🚵🏽','🇱🇹','🇱🇺','🚵🏾','🇱🇻','🇱🇾','🚵🏿','🇲🇦','🇲🇨','🇲🇩','🇲🇪','🚶🏻','🇲🇫','👨🏿','🚶🏼','🇲🇬','🇲🇭','🚶🏽','🇲🇰','🇲🇱','🚶🏾','🇲🇲','🇲🇳','🚶🏿','🇲🇴','🇲🇵','🛀🏻','🛀🏼','🛀🏽','🛀🏾','🛀🏿','🛌🏻','🛌🏼','🛌🏽','🛌🏾','🛌🏿','🤘🏻','🤘🏼','🤘🏽','🤘🏾','🤘🏿','🤙🏻','🤙🏼','🤙🏽','🤙🏾','🤙🏿','🤚🏻','🤚🏼','🤚🏽','🤚🏾','🤚🏿','🤛🏻','🤛🏼','🤛🏽','🤛🏾','🤛🏿','🤜🏻','🤜🏼','🤜🏽','🤜🏾','🤜🏿','🤞🏻','🤞🏼','🤞🏽','🤞🏾','🤞🏿','🤟🏻','🤟🏼','🤟🏽','🤟🏾','🤟🏿','🇲🇶','🇲🇷','🤦🏻','🇲🇸','🇲🇹','🤦🏼','🇲🇺','🇲🇻','🤦🏽','🇲🇼','🇲🇽','🤦🏾','🇲🇾','🇲🇿','🤦🏿','🇳🇦','🇳🇨','🤰🏻','🤰🏼','🤰🏽','🤰🏾','🤰🏿','🤱🏻','🤱🏼','🤱🏽','🤱🏾','🤱🏿','🤲🏻','🤲🏼','🤲🏽','🤲🏾','🤲🏿','🤳🏻','🤳🏼','🤳🏽','🤳🏾','🤳🏿','🤴🏻','🤴🏼','🤴🏽','🤴🏾','🤴🏿','🇳🇪','🇳🇫','🤵🏻','🇳🇬','🇳🇮','🤵🏼','🇳🇱','🇳🇴','🤵🏽','🇳🇵','🇳🇷','🤵🏾','🇳🇺','🇳🇿','🤵🏿','🇴🇲','🇵🇦','🤶🏻','🤶🏼','🤶🏽','🤶🏾','🤶🏿','🇵🇪','🇵🇫','🤷🏻','🇵🇬','🇵🇭','🤷🏼','🇵🇰','🇵🇱','🤷🏽','🇵🇲','🇵🇳','🤷🏾','🇵🇷','🇵🇸','🤷🏿','🇵🇹','🇵🇼','🇵🇾','🇶🇦','🤸🏻','🇷🇪','🇷🇴','🤸🏼','🇷🇸','👩🏻','🤸🏽','🇷🇺','🇷🇼','🤸🏾','🇸🇦','🇸🇧','🤸🏿','🇸🇨','🇸🇩','🇸🇪','🇸🇬','🤹🏻','🇸🇭','🇸🇮','🤹🏼','🇸🇯','🇸🇰','🤹🏽','🇸🇱','🇸🇲','🤹🏾','🇸🇳','🇸🇴','🤹🏿','👩🏼','🇸🇷','🇸🇸','🇸🇹','🇸🇻','🇸🇽','🤽🏻','🇸🇾','🇸🇿','🤽🏼','🇹🇦','🇹🇨','🤽🏽','🇹🇩','🇹🇫','🤽🏾','🇹🇬','🇹🇭','🤽🏿','🇹🇯','🇹🇰','🇹🇱','👩🏽','🤾🏻','🇹🇲','🇹🇳','🤾🏼','🇹🇴','🇹🇷','🤾🏽','🇹🇹','🇹🇻','🤾🏾','🇹🇼','🇹🇿','🤾🏿','🇺🇦','🇺🇬','🧑🏻','🧑🏼','🧑🏽','🧑🏾','🧑🏿','🧒🏻','🧒🏼','🧒🏽','🧒🏾','🧒🏿','🧓🏻','🧓🏼','🧓🏽','🧓🏾','🧓🏿','🧔🏻','🧔🏼','🧔🏽','🧔🏾','🧔🏿','🧕🏻','🧕🏼','🧕🏽','🧕🏾','🧕🏿','🇺🇲','🇺🇳','🧖🏻','🇺🇸','🇺🇾','🧖🏼','🇺🇿','🇻🇦','🧖🏽','👩🏾','🇻🇨','🧖🏾','🇻🇪','🇻🇬','🧖🏿','🇻🇮','🇻🇳','🇻🇺','🇼🇫','🧗🏻','🇼🇸','🇽🇰','🧗🏼','🇾🇪','🇾🇹','🧗🏽','🇿🇦','🇿🇲','🧗🏾','🇿🇼','🎅🏻','🧗🏿','🎅🏼','👩🏿','🎅🏽','🎅🏾','🧘🏻','🎅🏿','🏂🏻','🧘🏼','🏂🏼','🏂🏽','🧘🏽','🏂🏾','🏂🏿','🧘🏾','🇦🇨','🇦🇪','🧘🏿','🏃🏻','🇦🇫','🇦🇬','🏃🏼','🧙🏻','🇦🇮','🇦🇱','🧙🏼','🏃🏽','🇦🇲','🧙🏽','🇦🇴','🏃🏾','🧙🏾','🇦🇶','🇦🇷','🧙🏿','🏃🏿','🇦🇸','🇦🇹','🇦🇺','🧚🏻','🇦🇼','🏄🏻','🧚🏼','🇦🇽','🇦🇿','🧚🏽','🏄🏼','🇧🇦','🧚🏾','👮🏻','🇧🇧','🧚🏿','🏄🏽','👮🏼','🇧🇩','🇧🇪','🧛🏻','👮🏽','🏄🏾','🧛🏼','🇧🇫','👮🏾','🧛🏽','🇧🇬','🏄🏿','🧛🏾','👮🏿','🇧🇭','🧛🏿','🇧🇮','🏇🏻','🏇🏼','👰🏻','🧜🏻','👰🏼','👰🏽','🧜🏼','👰🏾','👰🏿','🧜🏽','🏇🏽','🏇🏾','🧜🏾','👱🏻','🏇🏿','🧜🏿','🇧🇯','👱🏼','🇧🇱','🏊🏻','🧝🏻','👱🏽','🇧🇲','🧝🏼','🇧🇳','👱🏾','🧝🏽','🏊🏼','🇧🇴','🧝🏾','👱🏿','🇧🇶','🧝🏿','🏊🏽','👲🏻','👲🏼','👲🏽','👲🏾','👲🏿','🇧🇷','🇧🇸','👳🏻','🏊🏾','🇧🇹','👳🏼','🇧🇻','🏊🏿','👳🏽','🇧🇼','🇧🇾','🇦🇩','✍🏿','⛹🏻','✍🏾','✍🏽','✍🏼','✍🏻','✌🏿','✌🏾','✌🏽','✌🏼','✌🏻','✋🏿','✋🏾','✋🏽','✋🏼','✋🏻','✊🏿','✊🏾','✊🏽','✊🏼','✊🏻','⛷🏽','⛷🏾','⛹🏿','☝🏿','☝🏾','⛹🏾','☝🏽','☝🏼','⛹🏽','☝🏻','⛷🏿','⛹🏼','⛷🏻','⛷🏼','4⃣','#⃣','0⃣','1⃣','2⃣','3⃣','*⃣','5⃣','6⃣','7⃣','8⃣','9⃣','🏪','🎈','🎉','🎊','🎋','🎌','🎍','🎎','🎏','🎐','🎑','🎒','🎓','🎖','🎗','🎙','🎚','🕴','🎛','🎞','🎟','🎠','🎡','🎢','🎣','🎤','🎥','🎦','🎧','🎨','🎩','🎪','🎫','🎬','🎭','🕵','🕶','🕷','🕸','🕹','🎮','🎯','🎰','🎱','🎲','🕺','🖇','🖊','🖋','🖌','🖍','🎳','🎴','🎵','🎶','🎷','🖐','🎸','🎹','🎺','🎻','🎼','🖕','🎽','🎾','🎿','🏀','🏁','🖖','🖤','🖥','🖨','🖱','🖲','🖼','🗂','🗃','🗄','🗑','🗒','🗓','🗜','🗝','🗞','🗡','🗣','🗨','🗯','🗳','🗺','🗻','🗼','🗽','🗾','🗿','😀','😁','😂','😃','😄','😅','😆','😇','😈','😉','😊','😋','😌','😍','😎','😏','😐','😑','😒','😓','😔','😕','😖','😗','😘','😙','😚','😛','😜','😝','😞','😟','😠','😡','😢','😣','😤','😥','😦','😧','😨','😩','😪','😫','😬','😭','😮','😯','😰','😱','😲','😳','😴','😵','😶','😷','😸','😹','😺','😻','😼','😽','😾','😿','🙀','🙁','🙂','🙃','🙄','🇧','🇮','🇪','🇷','🇱','🏂','🆎','🆑','🇨','🇹','🇯','🆒','🇬','🆓','🇳','🆔','🇴','🙅','🇺','🇫','🆕','🆖','🆗','🇭','🏃','🆘','🇩','🇻','🇰','🆙','🇼','🆚','🇽','🇸','🀄','🙆','🇾','🇦','🅰','🅱','🇿','🈁','🈂','🏄','🏅','🏆','🈚','🈯','🈲','🈳','🈴','🏇','👨','🙇','🙈','🙉','🙊','🏈','🏉','🈵','🈶','🈷','🈸','🈹','🈺','🉐','🉑','🌀','🌁','🌂','🌃','🌄','🌅','🌆','🙋','🌇','🌈','🏊','🌉','🌊','🙌','🌋','🌌','🌍','🌎','🌏','🌐','🌑','🌒','🌓','🌔','🌕','🌖','🌗','🌘','🌙','🏋','🌚','🙍','🌛','🌜','🌝','🌞','🌟','🌠','🌡','🌤','🌥','🌦','🌧','🌨','🌩','🌪','🌫','🌬','🏌','🙎','🏍','🏎','🏏','🏐','🏑','🙏','🚀','🚁','🚂','🚃','🚄','🚅','🚆','🚇','🚈','🚉','🚊','🚋','🚌','🚍','🚎','🚏','🚐','🚑','🚒','🚓','🚔','🚕','🚖','🚗','🚘','🚙','🚚','🚛','🚜','🚝','🚞','🚟','🚠','🚡','🚢','🏒','🏓','🏔','🏕','🏖','🏗','🏘','🏙','🏚','🏛','🏜','🏝','🏞','🏟','🏠','🏡','🏢','🚣','🚤','🚥','🚦','🚧','🚨','🚩','🚪','🚫','🚬','🚭','🚮','🚯','🚰','🚱','🚲','🚳','🏣','🏤','🏥','🏦','🏧','🏨','🏩','🃏','🏫','🏬','🏭','🏮','🏯','🏰','🌭','🏳','🌮','🚴','🌯','🌰','🌱','🏴','🏵','🏷','🏸','🏹','🏺','🏻','🏼','🏽','🏾','🏿','🐀','🐁','🐂','🚵','🐃','🐄','🐅','👩','👪','👫','👬','👭','🐆','🐇','🐈','🐉','🐊','🐋','🐌','🐍','🐎','🚶','🚷','🚸','🚹','🚺','🚻','🚼','🚽','🚾','🚿','🐏','🐐','🐑','🐒','🐓','🛀','🛁','🛂','🛃','🛄','🛅','🛋','🐔','🐕','🐖','👮','🐗','🛌','🛍','🛎','🛏','🛐','🛑','🛒','🛠','🛡','🛢','🛣','🛤','🛥','🛩','🛫','🛬','🛰','🛳','🛴','🛵','🛶','🛷','🛸','🤐','🤑','🤒','🤓','🤔','🤕','🤖','🤗','🐘','👯','🐙','🐚','🐛','🤘','🐜','🐝','👰','🐞','🐟','🤙','🐠','🐡','🐢','🐣','🐤','🤚','🐥','🐦','🐧','🐨','🐩','🤛','🐪','🐫','🐬','🐭','🐮','🤜','🤝','👱','🐯','🐰','🐱','🐲','🤞','🐳','👲','🐴','🐵','🐶','🤟','🤠','🤡','🤢','🤣','🤤','🤥','🐷','🐸','🐹','🐺','🐻','🐼','🐽','🐾','🐿','👀','🌲','👁','🌳','🌴','👳','🌵','🌶','🤦','🤧','🤨','🤩','🤪','🤫','🤬','🤭','🤮','🤯','🌷','👂','🌸','👴','🌹','🤰','🌺','🌻','🌼','👃','👵','🤱','👄','👅','🌽','🌾','🌿','🤲','👶','🍀','🍁','👆','🍂','🤳','🍃','🍄','🍅','🍆','👇','🤴','🍇','🍈','🍉','🍊','🍋','👈','🍌','🍍','👷','🍎','🍏','🍐','👉','🍑','👸','👹','👺','🤵','👻','🍒','🍓','🍔','🍕','🤶','👊','👼','👽','👾','👿','💀','🍖','🍗','🍘','🍙','🍚','👋','🍛','🍜','🍝','🍞','🍟','🤷','👌','🍠','🍡','🍢','🍣','🍤','💁','👍','🍥','🍦','🍧','🍨','🍩','👎','🍪','🍫','🍬','🤸','🍭','🍮','👏','🍯','🍰','🍱','🍲','💂','🍳','👐','👑','👒','👓','💃','💄','👔','👕','🤹','🤺','👖','👗','🤼','👘','💅','👙','👚','👛','👜','👝','👞','👟','👠','👡','👢','👣','👤','👥','🍴','🍵','🤽','🍶','🍷','💆','🍸','👦','🍹','🍺','🍻','🍼','🍽','👧','🍾','🍿','🎀','🎁','🎂','🎃','🤾','🥀','🥁','🥂','🥃','🥄','🥅','🥇','🥈','🥉','🥊','🥋','🥌','🥐','🥑','🥒','🥓','🥔','🥕','🥖','🥗','🥘','🥙','🥚','🥛','🥜','🥝','🥞','🥟','🥠','🥡','🥢','🥣','🥤','🥥','🥦','🥧','🥨','🥩','🥪','🥫','🦀','🦁','🦂','🦃','🦄','🦅','🦆','🦇','🦈','🦉','🦊','🦋','🦌','🦍','🦎','🦏','🦐','🦑','🦒','🦓','🦔','🦕','🦖','🦗','🧀','🧐','🎄','🇵','🅾','💇','💈','🧑','💉','💊','💋','💌','💍','🧒','💎','💏','💐','💑','💒','🧓','💓','💔','💕','💖','💗','🧔','💘','💙','💚','💛','💜','🧕','💝','💞','💟','💠','💡','💢','💣','💤','💥','💦','💧','💨','💩','🇶','🇲','🅿','🎅','🧖','🎆','💪','💫','💬','💭','💮','💯','💰','💱','💲','💳','💴','💵','💶','💷','💸','💹','🧗','💺','💻','💼','💽','💾','💿','📀','📁','📂','📃','📄','📅','📆','📇','📈','📉','📊','🧘','📋','📌','📍','📎','📏','📐','📑','📒','📓','📔','📕','📖','📗','📘','📙','📚','📛','🧙','📜','📝','📞','📟','📠','📡','📢','📣','📤','📥','📦','📧','📨','📩','📪','📫','📬','🧚','📭','📮','📯','📰','📱','📲','📳','📴','📵','📶','📷','📸','📹','📺','📻','📼','📽','🧛','📿','🔀','🔁','🔂','🔃','🔄','🔅','🔆','🔇','🔈','🔉','🔊','🔋','🔌','🔍','🔎','🔏','🧜','🔐','🔑','🔒','🔓','🔔','🔕','🔖','🔗','🔘','🔙','🔚','🔛','🔜','🔝','🔞','🔟','🔠','🧝','🔡','🔢','🧞','🔣','🔤','🧟','🧠','🧡','🧢','🧣','🧤','🧥','🧦','🔥','🔦','🔧','🔨','🔩','🔪','🔫','🔬','🔭','🔮','🔯','🔰','🔱','🔲','🔳','🔴','🔵','🔶','🔷','🔸','🔹','🔺','🔻','🔼','🔽','🕉','🕊','🕋','🕌','🕍','🕎','🕐','🕑','🕒','🕓','🕔','🕕','🕖','🕗','🕘','🕙','🕚','🕛','🕜','🕝','🕞','🕟','🕠','🕡','🕢','🕣','🕤','🕥','🕦','🕧','🕯','🕰','🕳','🎇','▪','☦','☮','☯','☸','☹','☺','♀','♂','♈','♉','♊','♋','♌','♍','♎','♏','♐','♑','♒','♓','♠','♣','♥','♦','♨','♻','♿','⚒','⚓','⚔','⚕','⚖','⚗','⚙','⚛','⚜','⚠','⚡','⚪','⚫','⚰','⚱','⚽','⚾','⛄','⛅','⛈','⛎','⛏','⛑','⛓','⛔','⛩','⛪','⛰','⛱','⛲','⛳','⛴','⛵','☣','☢','☠','☝','☘','⛷','⛸','☕','☔','☑','☎','☄','☃','☂','☁','☀','◾','◽','◼','◻','◀','▶','▫','☪','⛹','⛺','⛽','✂','✅','✈','✉','Ⓜ','⏺','⏹','⏸','⏳','✊','⏲','⏱','⏰','⏯','⏮','✋','⏭','⏬','⏫','⏪','⏩','✌','⏏','⌨','⌛','⌚','↪','✍','✏','✒','✔','✖','✝','✡','✨','✳','✴','❄','❇','❌','❎','❓','❔','❕','❗','❣','❤','➕','➖','➗','➡','➰','➿','⤴','⤵','↩','⬅','⬆','⬇','⬛','⬜','⭐','⭕','↙','〰','〽','↘','↗','㊗','㊙','↖','↕','↔','ℹ','™','⁉','‼','');
- $partials = array('🀄','🃏','🅰','🅱','🅾','🅿','🆎','🆑','🆒','🆓','🆔','🆕','🆖','🆗','🆘','🆙','🆚','🇦','🇨','🇩','🇪','🇫','🇬','🇮','🇱','🇲','🇴','🇶','🇷','🇸','🇹','🇺','🇼','🇽','🇿','🇧','🇭','🇯','🇳','🇻','🇾','🇰','🇵','🈁','🈂','🈚','🈯','🈲','🈳','🈴','🈵','🈶','🈷','🈸','🈹','🈺','🉐','🉑','🌀','🌁','🌂','🌃','🌄','🌅','🌆','🌇','🌈','🌉','🌊','🌋','🌌','🌍','🌎','🌏','🌐','🌑','🌒','🌓','🌔','🌕','🌖','🌗','🌘','🌙','🌚','🌛','🌜','🌝','🌞','🌟','🌠','🌡','🌤','🌥','🌦','🌧','🌨','🌩','🌪','🌫','🌬','🌭','🌮','🌯','🌰','🌱','🌲','🌳','🌴','🌵','🌶','🌷','🌸','🌹','🌺','🌻','🌼','🌽','🌾','🌿','🍀','🍁','🍂','🍃','🍄','🍅','🍆','🍇','🍈','🍉','🍊','🍋','🍌','🍍','🍎','🍏','🍐','🍑','🍒','🍓','🍔','🍕','🍖','🍗','🍘','🍙','🍚','🍛','🍜','🍝','🍞','🍟','🍠','🍡','🍢','🍣','🍤','🍥','🍦','🍧','🍨','🍩','🍪','🍫','🍬','🍭','🍮','🍯','🍰','🍱','🍲','🍳','🍴','🍵','🍶','🍷','🍸','🍹','🍺','🍻','🍼','🍽','🍾','🍿','🎀','🎁','🎂','🎃','🎄','🎅','🏻','🏼','🏽','🏾','🏿','🎆','🎇','🎈','🎉','🎊','🎋','🎌','🎍','🎎','🎏','🎐','🎑','🎒','🎓','🎖','🎗','🎙','🎚','🎛','🎞','🎟','🎠','🎡','🎢','🎣','🎤','🎥','🎦','🎧','🎨','🎩','🎪','🎫','🎬','🎭','🎮','🎯','🎰','🎱','🎲','🎳','🎴','🎵','🎶','🎷','🎸','🎹','🎺','🎻','🎼','🎽','🎾','🎿','🏀','🏁','🏂','🏃','‍','♀','️','♂','🏄','🏅','🏆','🏇','🏈','🏉','🏊','🏋','🏌','🏍','🏎','🏏','🏐','🏑','🏒','🏓','🏔','🏕','🏖','🏗','🏘','🏙','🏚','🏛','🏜','🏝','🏞','🏟','🏠','🏡','🏢','🏣','🏤','🏥','🏦','🏧','🏨','🏩','🏪','🏫','🏬','🏭','🏮','🏯','🏰','🏳','🏴','☠','󠁧','󠁢','󠁥','󠁮','󠁿','󠁳','󠁣','󠁴','󠁷','󠁬','🏵','🏷','🏸','🏹','🏺','🐀','🐁','🐂','🐃','🐄','🐅','🐆','🐇','🐈','🐉','🐊','🐋','🐌','🐍','🐎','🐏','🐐','🐑','🐒','🐓','🐔','🐕','🐖','🐗','🐘','🐙','🐚','🐛','🐜','🐝','🐞','🐟','🐠','🐡','🐢','🐣','🐤','🐥','🐦','🐧','🐨','🐩','🐪','🐫','🐬','🐭','🐮','🐯','🐰','🐱','🐲','🐳','🐴','🐵','🐶','🐷','🐸','🐹','🐺','🐻','🐼','🐽','🐾','🐿','👀','👁','🗨','👂','👃','👄','👅','👆','👇','👈','👉','👊','👋','👌','👍','👎','👏','👐','👑','👒','👓','👔','👕','👖','👗','👘','👙','👚','👛','👜','👝','👞','👟','👠','👡','👢','👣','👤','👥','👦','👧','👨','💻','💼','🔧','🔬','🚀','🚒','⚕','⚖','✈','👩','❤','💋','👪','👫','👬','👭','👮','👯','👰','👱','👲','👳','👴','👵','👶','👷','👸','👹','👺','👻','👼','👽','👾','👿','💀','💁','💂','💃','💄','💅','💆','💇','💈','💉','💊','💌','💍','💎','💏','💐','💑','💒','💓','💔','💕','💖','💗','💘','💙','💚','💛','💜','💝','💞','💟','💠','💡','💢','💣','💤','💥','💦','💧','💨','💩','💪','💫','💬','💭','💮','💯','💰','💱','💲','💳','💴','💵','💶','💷','💸','💹','💺','💽','💾','💿','📀','📁','📂','📃','📄','📅','📆','📇','📈','📉','📊','📋','📌','📍','📎','📏','📐','📑','📒','📓','📔','📕','📖','📗','📘','📙','📚','📛','📜','📝','📞','📟','📠','📡','📢','📣','📤','📥','📦','📧','📨','📩','📪','📫','📬','📭','📮','📯','📰','📱','📲','📳','📴','📵','📶','📷','📸','📹','📺','📻','📼','📽','📿','🔀','🔁','🔂','🔃','🔄','🔅','🔆','🔇','🔈','🔉','🔊','🔋','🔌','🔍','🔎','🔏','🔐','🔑','🔒','🔓','🔔','🔕','🔖','🔗','🔘','🔙','🔚','🔛','🔜','🔝','🔞','🔟','🔠','🔡','🔢','🔣','🔤','🔥','🔦','🔨','🔩','🔪','🔫','🔭','🔮','🔯','🔰','🔱','🔲','🔳','🔴','🔵','🔶','🔷','🔸','🔹','🔺','🔻','🔼','🔽','🕉','🕊','🕋','🕌','🕍','🕎','🕐','🕑','🕒','🕓','🕔','🕕','🕖','🕗','🕘','🕙','🕚','🕛','🕜','🕝','🕞','🕟','🕠','🕡','🕢','🕣','🕤','🕥','🕦','🕧','🕯','🕰','🕳','🕴','🕵','🕶','🕷','🕸','🕹','🕺','🖇','🖊','🖋','🖌','🖍','🖐','🖕','🖖','🖤','🖥','🖨','🖱','🖲','🖼','🗂','🗃','🗄','🗑','🗒','🗓','🗜','🗝','🗞','🗡','🗣','🗯','🗳','🗺','🗻','🗼','🗽','🗾','🗿','😀','😁','😂','😃','😄','😅','😆','😇','😈','😉','😊','😋','😌','😍','😎','😏','😐','😑','😒','😓','😔','😕','😖','😗','😘','😙','😚','😛','😜','😝','😞','😟','😠','😡','😢','😣','😤','😥','😦','😧','😨','😩','😪','😫','😬','😭','😮','😯','😰','😱','😲','😳','😴','😵','😶','😷','😸','😹','😺','😻','😼','😽','😾','😿','🙀','🙁','🙂','🙃','🙄','🙅','🙆','🙇','🙈','🙉','🙊','🙋','🙌','🙍','🙎','🙏','🚁','🚂','🚃','🚄','🚅','🚆','🚇','🚈','🚉','🚊','🚋','🚌','🚍','🚎','🚏','🚐','🚑','🚓','🚔','🚕','🚖','🚗','🚘','🚙','🚚','🚛','🚜','🚝','🚞','🚟','🚠','🚡','🚢','🚣','🚤','🚥','🚦','🚧','🚨','🚩','🚪','🚫','🚬','🚭','🚮','🚯','🚰','🚱','🚲','🚳','🚴','🚵','🚶','🚷','🚸','🚹','🚺','🚻','🚼','🚽','🚾','🚿','🛀','🛁','🛂','🛃','🛄','🛅','🛋','🛌','🛍','🛎','🛏','🛐','🛑','🛒','🛠','🛡','🛢','🛣','🛤','🛥','🛩','🛫','🛬','🛰','🛳','🛴','🛵','🛶','🛷','🛸','🤐','🤑','🤒','🤓','🤔','🤕','🤖','🤗','🤘','🤙','🤚','🤛','🤜','🤝','🤞','🤟','🤠','🤡','🤢','🤣','🤤','🤥','🤦','🤧','🤨','🤩','🤪','🤫','🤬','🤭','🤮','🤯','🤰','🤱','🤲','🤳','🤴','🤵','🤶','🤷','🤸','🤹','🤺','🤼','🤽','🤾','🥀','🥁','🥂','🥃','🥄','🥅','🥇','🥈','🥉','🥊','🥋','🥌','🥐','🥑','🥒','🥓','🥔','🥕','🥖','🥗','🥘','🥙','🥚','🥛','🥜','🥝','🥞','🥟','🥠','🥡','🥢','🥣','🥤','🥥','🥦','🥧','🥨','🥩','🥪','🥫','🦀','🦁','🦂','🦃','🦄','🦅','🦆','🦇','🦈','🦉','🦊','🦋','🦌','🦍','🦎','🦏','🦐','🦑','🦒','🦓','🦔','🦕','🦖','🦗','🧀','🧐','🧑','🧒','🧓','🧔','🧕','🧖','🧗','🧘','🧙','🧚','🧛','🧜','🧝','🧞','🧟','🧠','🧡','🧢','🧣','🧤','🧥','🧦','‼','⁉','™','ℹ','↔','↕','↖','↗','↘','↙','↩','↪','⃣','⌚','⌛','⌨','⏏','⏩','⏪','⏫','⏬','⏭','⏮','⏯','⏰','⏱','⏲','⏳','⏸','⏹','⏺','Ⓜ','▪','▫','▶','◀','◻','◼','◽','◾','☀','☁','☂','☃','☄','☎','☑','☔','☕','☘','☝','☢','☣','☦','☪','☮','☯','☸','☹','☺','♈','♉','♊','♋','♌','♍','♎','♏','♐','♑','♒','♓','♠','♣','♥','♦','♨','♻','♿','⚒','⚓','⚔','⚗','⚙','⚛','⚜','⚠','⚡','⚪','⚫','⚰','⚱','⚽','⚾','⛄','⛅','⛈','⛎','⛏','⛑','⛓','⛔','⛩','⛪','⛰','⛱','⛲','⛳','⛴','⛵','⛷','⛸','⛹','⛺','⛽','✂','✅','✉','✊','✋','✌','✍','✏','✒','✔','✖','✝','✡','✨','✳','✴','❄','❇','❌','❎','❓','❔','❕','❗','❣','➕','➖','➗','➡','➰','➿','⤴','⤵','⬅','⬆','⬇','⬛','⬜','⭐','⭕','〰','〽','㊗','㊙','');
+ $entities = array('👩‍❤️‍💋‍👩','👩‍❤️‍💋‍👨','👨‍❤️‍💋‍👨','🏴󠁧󠁢󠁳󠁣󠁴󠁿','🏴󠁧󠁢󠁷󠁬󠁳󠁿','🏴󠁧󠁢󠁥󠁮󠁧󠁿','👩‍👩‍👧‍👦','👨‍👨‍👦‍👦','👩‍👩‍👦‍👦','👨‍👨‍👧‍👦','👨‍👨‍👧‍👧','👨‍👩‍👧‍👧','👨‍👩‍👦‍👦','👩‍👩‍👧‍👧','👨‍👩‍👧‍👦','👨‍❤️‍👨','👩‍❤️‍👨','👩‍❤️‍👩','👩‍👩‍👦','👩‍👦‍👦','👩‍👧‍👦','👩‍👧‍👧','👨‍👨‍👦','👨‍👩‍👧','👨‍👧‍👧','👨‍👧‍👦','👩‍👩‍👧','👨‍👩‍👦','👨‍👨‍👧','👨‍👦‍👦','🤵🏿‍♀️','🏋🏻‍♂️','🏋🏼‍♀️','🏋🏼‍♂️','🏋🏽‍♀️','🏋🏽‍♂️','🏋🏾‍♀️','🏋🏾‍♂️','🏋🏿‍♀️','🏋🏿‍♂️','🏌🏻‍♀️','🏌🏻‍♂️','🏌🏼‍♀️','🏌🏼‍♂️','🏌🏽‍♀️','🏌🏽‍♂️','🏌🏾‍♀️','🏌🏾‍♂️','🏌🏿‍♀️','🏌🏿‍♂️','💂🏻‍♀️','🏃🏼‍♀️','🏃🏼‍♂️','🧝🏿‍♂️','🧝🏿‍♀️','🧝🏾‍♂️','🧝🏾‍♀️','🧝🏽‍♂️','🧝🏽‍♀️','🧝🏼‍♂️','🧝🏼‍♀️','🧝🏻‍♂️','🧝🏻‍♀️','🧜🏿‍♂️','🧜🏿‍♀️','🧜🏾‍♂️','🧜🏾‍♀️','🧜🏽‍♂️','🧜🏽‍♀️','🧜🏼‍♂️','🧜🏼‍♀️','👨🏻‍⚕️','👨🏻‍⚖️','👨🏻‍✈️','🧜🏻‍♂️','🧜🏻‍♀️','🧛🏿‍♂️','🧛🏿‍♀️','🧛🏾‍♂️','🧛🏾‍♀️','🧛🏽‍♂️','🧛🏽‍♀️','🧛🏼‍♂️','🧛🏼‍♀️','🧛🏻‍♂️','🧛🏻‍♀️','🧚🏿‍♂️','🧚🏿‍♀️','🧚🏾‍♂️','🧚🏾‍♀️','🧚🏽‍♂️','👨🏼‍⚕️','👨🏼‍⚖️','👨🏼‍✈️','🧚🏽‍♀️','🧚🏼‍♂️','🧚🏼‍♀️','🧚🏻‍♂️','🧚🏻‍♀️','🧙🏿‍♂️','🧙🏿‍♀️','🧙🏾‍♂️','🧙🏾‍♀️','🧙🏽‍♂️','🧙🏽‍♀️','🧙🏼‍♂️','🧙🏼‍♀️','🧙🏻‍♂️','🧙🏻‍♀️','🧘🏿‍♂️','🧘🏿‍♀️','👨🏽‍⚕️','👨🏽‍⚖️','👨🏽‍✈️','🧘🏾‍♂️','🧘🏾‍♀️','🧘🏽‍♂️','🧘🏽‍♀️','🧘🏼‍♂️','🧘🏼‍♀️','🧘🏻‍♂️','🧘🏻‍♀️','🧗🏿‍♂️','🧗🏿‍♀️','🧗🏾‍♂️','🧗🏾‍♀️','🧗🏽‍♂️','🧗🏽‍♀️','🧗🏼‍♂️','🧗🏼‍♀️','🧗🏻‍♂️','👨🏾‍⚕️','👨🏾‍⚖️','👨🏾‍✈️','🧗🏻‍♀️','🧖🏿‍♂️','🧖🏿‍♀️','🧖🏾‍♂️','🧖🏾‍♀️','🧖🏽‍♂️','🧖🏽‍♀️','🧖🏼‍♂️','🧖🏼‍♀️','🧖🏻‍♂️','🧖🏻‍♀️','🦹🏿‍♂️','🦹🏿‍♀️','🦹🏾‍♂️','🦹🏾‍♀️','🦹🏽‍♂️','🦹🏽‍♀️','👨🏿‍⚕️','👨🏿‍⚖️','👨🏿‍✈️','🦹🏼‍♂️','🦹🏼‍♀️','🦹🏻‍♂️','🦹🏻‍♀️','🦸🏿‍♂️','🦸🏿‍♀️','🦸🏾‍♂️','🏃🏽‍♀️','🦸🏾‍♀️','🏃🏽‍♂️','🏃🏾‍♀️','🦸🏽‍♂️','🏃🏾‍♂️','🏃🏿‍♀️','🏃🏿‍♂️','🏄🏻‍♀️','🏄🏻‍♂️','🏄🏼‍♀️','🏄🏼‍♂️','🏄🏽‍♀️','🏄🏽‍♂️','🏄🏾‍♀️','🦸🏽‍♀️','🦸🏼‍♂️','🦸🏼‍♀️','🦸🏻‍♂️','🦸🏻‍♀️','🤾🏿‍♂️','🤾🏿‍♀️','🤾🏾‍♂️','🤾🏾‍♀️','🤾🏽‍♂️','🤾🏽‍♀️','🤾🏼‍♂️','🤾🏼‍♀️','🏄🏾‍♂️','🏄🏿‍♀️','🤾🏻‍♂️','🤾🏻‍♀️','🤽🏿‍♂️','🤽🏿‍♀️','🤽🏾‍♂️','🤽🏾‍♀️','🤽🏽‍♂️','🤽🏽‍♀️','🤽🏼‍♂️','🤽🏼‍♀️','🤽🏻‍♂️','🤽🏻‍♀️','🤹🏿‍♂️','🤹🏿‍♀️','🤹🏾‍♂️','🤹🏾‍♀️','🤹🏽‍♂️','👩🏻‍⚕️','👩🏻‍⚖️','👩🏻‍✈️','🤹🏽‍♀️','🤹🏼‍♂️','🤹🏼‍♀️','🤹🏻‍♂️','🤹🏻‍♀️','🤸🏿‍♂️','🤸🏿‍♀️','🤸🏾‍♂️','🤸🏾‍♀️','🤸🏽‍♂️','🤸🏽‍♀️','🤸🏼‍♂️','🤸🏼‍♀️','🤸🏻‍♂️','🤸🏻‍♀️','🤷🏿‍♂️','🤷🏿‍♀️','👩🏼‍⚕️','👩🏼‍⚖️','👩🏼‍✈️','🤷🏾‍♂️','🤷🏾‍♀️','🤷🏽‍♂️','🤷🏽‍♀️','🤷🏼‍♂️','🤷🏼‍♀️','🤷🏻‍♂️','🤷🏻‍♀️','🤵🏿‍♂️','🏃🏻‍♂️','🤵🏾‍♂️','🤵🏾‍♀️','🤵🏽‍♂️','🤵🏽‍♀️','🤵🏼‍♂️','🤵🏼‍♀️','🤵🏻‍♂️','👩🏽‍⚕️','👩🏽‍⚖️','👩🏽‍✈️','🤵🏻‍♀️','🤦🏿‍♂️','🤦🏿‍♀️','🤦🏾‍♂️','🤦🏾‍♀️','🤦🏽‍♂️','🤦🏽‍♀️','🤦🏼‍♂️','🤦🏼‍♀️','🤦🏻‍♂️','🤦🏻‍♀️','🚶🏿‍♂️','🚶🏿‍♀️','🚶🏾‍♂️','🚶🏾‍♀️','🚶🏽‍♂️','🚶🏽‍♀️','👩🏾‍⚕️','👩🏾‍⚖️','👩🏾‍✈️','🚶🏼‍♂️','🚶🏼‍♀️','🚶🏻‍♂️','🚶🏻‍♀️','🚵🏿‍♂️','🚵🏿‍♀️','🚵🏾‍♂️','🚵🏾‍♀️','🚵🏽‍♂️','🚵🏽‍♀️','🚵🏼‍♂️','🚵🏼‍♀️','🚵🏻‍♂️','🚵🏻‍♀️','🚴🏿‍♂️','🚴🏿‍♀️','🚴🏾‍♂️','👩🏿‍⚕️','👩🏿‍⚖️','👩🏿‍✈️','🚴🏾‍♀️','🚴🏽‍♂️','🚴🏽‍♀️','🚴🏼‍♂️','🚴🏼‍♀️','🚴🏻‍♂️','🚴🏻‍♀️','🏄🏿‍♂️','🚣🏿‍♂️','🏊🏻‍♀️','🏊🏻‍♂️','🚣🏿‍♀️','🏊🏼‍♀️','🏊🏼‍♂️','🏊🏽‍♀️','🏊🏽‍♂️','🏊🏾‍♀️','🚣🏾‍♂️','🚣🏾‍♀️','🚣🏽‍♂️','🚣🏽‍♀️','🚣🏼‍♂️','🚣🏼‍♀️','🚣🏻‍♂️','🚣🏻‍♀️','🙎🏿‍♂️','🙎🏿‍♀️','🙎🏾‍♂️','🙎🏾‍♀️','🙎🏽‍♂️','🏊🏾‍♂️','🏊🏿‍♀️','🏊🏿‍♂️','🏋🏻‍♀️','👮🏻‍♀️','👮🏻‍♂️','👮🏼‍♀️','👮🏼‍♂️','👮🏽‍♀️','👮🏽‍♂️','👮🏾‍♀️','👮🏾‍♂️','👮🏿‍♀️','👮🏿‍♂️','🙎🏽‍♀️','🙎🏼‍♂️','🙎🏼‍♀️','🙎🏻‍♂️','👱🏻‍♀️','👱🏻‍♂️','👱🏼‍♀️','👱🏼‍♂️','👱🏽‍♀️','👱🏽‍♂️','👱🏾‍♀️','👱🏾‍♂️','👱🏿‍♀️','👱🏿‍♂️','🙎🏻‍♀️','🙍🏿‍♂️','👳🏻‍♀️','👳🏻‍♂️','👳🏼‍♀️','👳🏼‍♂️','👳🏽‍♀️','👳🏽‍♂️','👳🏾‍♀️','👳🏾‍♂️','👳🏿‍♀️','👳🏿‍♂️','🙍🏿‍♀️','🙍🏾‍♂️','👷🏻‍♀️','👷🏻‍♂️','👷🏼‍♀️','👷🏼‍♂️','👷🏽‍♀️','👷🏽‍♂️','👷🏾‍♀️','👷🏾‍♂️','👷🏿‍♀️','👷🏿‍♂️','🙍🏾‍♀️','🙍🏽‍♂️','💁🏻‍♀️','💁🏻‍♂️','💁🏼‍♀️','💁🏼‍♂️','💁🏽‍♀️','💁🏽‍♂️','💁🏾‍♀️','💁🏾‍♂️','💁🏿‍♀️','💁🏿‍♂️','🙍🏽‍♀️','🙍🏼‍♂️','🏃🏻‍♀️','💂🏻‍♂️','💂🏼‍♀️','💂🏼‍♂️','💂🏽‍♀️','💂🏽‍♂️','💂🏾‍♀️','💂🏾‍♂️','💂🏿‍♀️','💂🏿‍♂️','🙍🏼‍♀️','🙍🏻‍♂️','💆🏻‍♀️','💆🏻‍♂️','💆🏼‍♀️','💆🏼‍♂️','💆🏽‍♀️','💆🏽‍♂️','💆🏾‍♀️','💆🏾‍♂️','💆🏿‍♀️','💆🏿‍♂️','🙍🏻‍♀️','🙋🏿‍♂️','💇🏻‍♀️','💇🏻‍♂️','💇🏼‍♀️','💇🏼‍♂️','💇🏽‍♀️','💇🏽‍♂️','💇🏾‍♀️','💇🏾‍♂️','💇🏿‍♀️','💇🏿‍♂️','🙋🏿‍♀️','🙋🏾‍♂️','🕴🏻‍♀️','🕴🏻‍♂️','🕴🏼‍♀️','🕴🏼‍♂️','🕴🏽‍♀️','🕴🏽‍♂️','🕴🏾‍♀️','🕴🏾‍♂️','🕴🏿‍♀️','🕴🏿‍♂️','🕵🏻‍♀️','🕵🏻‍♂️','🕵🏼‍♀️','🕵🏼‍♂️','🕵🏽‍♀️','🕵🏽‍♂️','🕵🏾‍♀️','🕵🏾‍♂️','🕵🏿‍♀️','🕵🏿‍♂️','🙅🏻‍♀️','🙅🏻‍♂️','🙅🏼‍♀️','🙅🏼‍♂️','🙅🏽‍♀️','🙅🏽‍♂️','🙅🏾‍♀️','🙅🏾‍♂️','🙅🏿‍♀️','🙅🏿‍♂️','🙋🏾‍♀️','🙋🏽‍♂️','🙆🏻‍♀️','🙆🏻‍♂️','🙆🏼‍♀️','🙆🏼‍♂️','🙆🏽‍♀️','🙆🏽‍♂️','🙆🏾‍♀️','🙆🏾‍♂️','🙆🏿‍♀️','🙆🏿‍♂️','🙋🏽‍♀️','🙋🏼‍♂️','🙇🏻‍♀️','🙇🏻‍♂️','🙇🏼‍♀️','🙇🏼‍♂️','🙇🏽‍♀️','🙇🏽‍♂️','🙇🏾‍♀️','🙇🏾‍♂️','🙇🏿‍♀️','🙇🏿‍♂️','🙋🏼‍♀️','🙋🏻‍♂️','🙋🏻‍♀️','🕴️‍♀️','🕴️‍♂️','🏋️‍♀️','🏋️‍♂️','⛹🏾‍♀️','🏌️‍♀️','🏌️‍♂️','⛹🏻‍♂️','⛹🏻‍♀️','⛹🏾‍♂️','⛹🏿‍♀️','⛹🏿‍♂️','🕵️‍♀️','🕵️‍♂️','⛹🏽‍♀️','⛹🏽‍♂️','⛹🏼‍♀️','⛹🏼‍♂️','⛹️‍♀️','⛹️‍♂️','👩🏻‍🎨','👨🏻‍🌾','👨🏻‍🍳','👨🏻‍🎓','👨🏻‍🎤','👨🏻‍🎨','👨🏻‍🏫','👨🏻‍🏭','👨🏻‍💻','👨🏻‍💼','👨🏻‍🔧','👨🏻‍🔬','👨🏻‍🚀','👨🏻‍🚒','👨🏻‍🦰','👨🏻‍🦱','👨🏻‍🦲','👨🏻‍🦳','👨🏼‍🌾','👨🏼‍🍳','👨🏼‍🎓','👨🏼‍🎤','👨🏼‍🎨','👨🏼‍🏫','👨🏼‍🏭','👨🏼‍💻','👨🏼‍💼','👨🏼‍🔧','👨🏼‍🔬','👨🏼‍🚀','👨🏼‍🚒','👨🏼‍🦰','👨🏼‍🦱','👨🏼‍🦲','👨🏼‍🦳','👨🏽‍🌾','👨🏽‍🍳','👨🏽‍🎓','👨🏽‍🎤','👨🏽‍🎨','👨🏽‍🏫','👨🏽‍🏭','👨🏽‍💻','👨🏽‍💼','👨🏽‍🔧','👨🏽‍🔬','👨🏽‍🚀','👨🏽‍🚒','👨🏽‍🦰','👨🏽‍🦱','👨🏽‍🦲','👩🏿‍🦳','👩🏿‍🦲','👩🏿‍🦱','👨🏽‍🦳','👨🏾‍🌾','👩🏿‍🦰','👩🏿‍🚒','👩🏿‍🚀','👩🏿‍🔬','👩🏿‍🔧','👩🏿‍💼','👩🏿‍💻','👩🏿‍🏭','👩🏿‍🏫','👩🏿‍🎨','👨🏾‍🍳','👨🏾‍🎓','👩🏿‍🎤','👩🏿‍🎓','👩🏿‍🍳','👩🏿‍🌾','👩🏾‍🦳','👩🏾‍🦲','👩🏾‍🦱','👩🏾‍🦰','👩🏾‍🚒','👩🏾‍🚀','👨🏾‍🎤','👨🏾‍🎨','👩🏾‍🔬','👩🏾‍🔧','👩🏾‍💼','👩🏾‍💻','👩🏾‍🏭','👩🏾‍🏫','👩🏾‍🎨','👩🏾‍🎤','👩🏾‍🎓','👩🏾‍🍳','👨🏾‍🏫','👨🏾‍🏭','👩🏾‍🌾','👩🏽‍🦳','👩🏽‍🦲','👩🏽‍🦱','👩🏽‍🦰','👩🏽‍🚒','👩🏽‍🚀','👩🏽‍🔬','👩🏽‍🔧','👩🏽‍💼','👨🏾‍💻','👨🏾‍💼','👩🏽‍💻','👩🏽‍🏭','👩🏽‍🏫','👩🏽‍🎨','👩🏽‍🎤','👩🏽‍🎓','👩🏽‍🍳','👩🏽‍🌾','👩🏼‍🦳','👩🏼‍🦲','👨🏾‍🔧','👨🏾‍🔬','👩🏼‍🦱','👩🏼‍🦰','👩🏼‍🚒','👩🏼‍🚀','👩🏼‍🔬','👩🏼‍🔧','👩🏼‍💼','👩🏼‍💻','👩🏼‍🏭','👩🏼‍🏫','👨🏾‍🚀','👨🏾‍🚒','👩🏼‍🎨','👩🏼‍🎤','👩🏼‍🎓','👩🏼‍🍳','👩🏼‍🌾','👩🏻‍🦳','👩🏻‍🦲','👩🏻‍🦱','👩🏻‍🦰','👩🏻‍🚒','👨🏾‍🦰','👨🏾‍🦱','👨🏾‍🦲','👨🏾‍🦳','👩🏻‍🚀','👩🏻‍🔬','👩🏻‍🔧','👩🏻‍💼','👩🏻‍💻','👩🏻‍🏭','👩🏻‍🏫','👨🏿‍🌾','👩🏻‍🎤','👩🏻‍🎓','👨🏿‍🍳','👨🏿‍🎓','👩🏻‍🍳','👩🏻‍🌾','👨🏿‍🎤','👨🏿‍🎨','👨🏿‍🏫','👨🏿‍🏭','👨🏿‍💻','👨🏿‍💼','👨🏿‍🔧','👨🏿‍🔬','👨🏿‍🚀','👨🏿‍🚒','👨🏿‍🦰','👨🏿‍🦱','👨🏿‍🦲','👨🏿‍🦳','🏳️‍🌈','👩‍⚖️','🦸‍♂️','🤾‍♂️','🤾‍♀️','🦹‍♀️','🦹‍♂️','👨‍⚕️','👨‍⚖️','👨‍✈️','🤽‍♂️','🤽‍♀️','🧖‍♀️','🧖‍♂️','🙇‍♀️','🤼‍♂️','🤼‍♀️','🤹‍♂️','🤹‍♀️','🤸‍♂️','🤸‍♀️','🤷‍♂️','🤷‍♀️','🤵‍♂️','🧗‍♀️','🧗‍♂️','🤵‍♀️','🤦‍♂️','🤦‍♀️','🚶‍♂️','🚶‍♀️','🚵‍♂️','🚵‍♀️','🚴‍♂️','🚴‍♀️','🧘‍♀️','🧘‍♂️','🚣‍♂️','🚣‍♀️','🧙‍♀️','🧙‍♂️','🙎‍♂️','🙎‍♀️','🧚‍♀️','🧚‍♂️','👩‍⚕️','🦸‍♀️','👩‍✈️','👮‍♀️','👮‍♂️','👯‍♀️','👯‍♂️','👱‍♀️','🧛‍♀️','🧛‍♂️','🙍‍♂️','🙍‍♀️','👱‍♂️','👳‍♀️','👳‍♂️','👷‍♀️','👷‍♂️','💁‍♀️','💁‍♂️','💂‍♀️','🧜‍♀️','🧜‍♂️','💂‍♂️','💆‍♀️','🙋‍♂️','🙋‍♀️','💆‍♂️','💇‍♀️','💇‍♂️','🙅‍♀️','🙅‍♂️','🧝‍♀️','🧝‍♂️','🧞‍♀️','🧞‍♂️','🧟‍♀️','🧟‍♂️','🏴‍☠️','🙇‍♂️','🙆‍♀️','🙆‍♂️','🏊‍♂️','🏊‍♀️','🏄‍♂️','🏄‍♀️','🏃‍♂️','🏃‍♀️','👨‍🎨','👩‍🍳','👩‍🎓','👩‍🎤','👩‍🎨','👩‍🏫','👩‍🏭','👨‍💻','👨‍🚒','👩‍👦','👨‍👧','👨‍🦰','👨‍🦱','👩‍💻','👩‍💼','👩‍🔧','👩‍🔬','👩‍🚀','👩‍🚒','👩‍🦰','👩‍🦱','👁‍🗨','👨‍🦲','👨‍🦳','👨‍👦','👨‍🎤','👩‍🦲','👩‍🦳','👨‍🎓','👨‍🍳','👨‍🌾','👨‍💼','👨‍🔧','👨‍🔬','👨‍🚀','👨‍🏭','👩‍🌾','👨‍🏫','👩‍👧','👆🏿','👇🏻','👷🏼','👇🏼','👇🏽','👷🏽','👇🏾','👇🏿','👷🏾','👈🏻','👈🏼','👷🏿','👈🏽','👈🏾','👸🏻','👸🏼','👸🏽','👸🏾','👸🏿','👼🏻','👼🏼','👼🏽','👼🏾','👼🏿','👈🏿','👉🏻','💁🏻','👉🏼','👉🏽','💁🏼','👉🏾','👉🏿','💁🏽','👊🏻','👊🏼','💁🏾','👊🏽','👊🏾','💁🏿','👊🏿','👋🏻','👋🏼','👋🏽','💂🏻','👋🏾','👋🏿','💂🏼','👌🏻','👌🏼','💂🏽','👌🏽','👌🏾','💂🏾','👌🏿','👍🏻','💂🏿','👍🏼','👍🏽','💃🏻','💃🏼','💃🏽','💃🏾','💃🏿','💅🏻','💅🏼','💅🏽','💅🏾','💅🏿','👍🏾','👍🏿','💆🏻','👎🏻','👎🏼','💆🏼','👎🏽','👎🏾','💆🏽','👎🏿','👏🏻','💆🏾','👏🏼','👏🏽','💆🏿','👏🏾','👏🏿','👐🏻','👐🏼','💇🏻','👐🏽','👐🏾','💇🏼','👐🏿','👦🏻','💇🏽','👦🏼','👦🏽','💇🏾','👦🏾','👦🏿','💇🏿','👧🏻','👧🏼','💪🏻','💪🏼','💪🏽','💪🏾','💪🏿','👧🏽','👧🏾','🕴🏻','👧🏿','🇪🇪','🕴🏼','🇪🇬','🇪🇭','🕴🏽','🇪🇷','🇪🇸','🕴🏾','🇪🇹','🇪🇺','🕴🏿','🇫🇮','🇫🇯','🇫🇰','🇫🇲','🕵🏻','🇫🇴','🇫🇷','🕵🏼','🇬🇦','🇬🇧','🕵🏽','🇬🇩','🇬🇪','🕵🏾','🇬🇫','🇬🇬','🕵🏿','🇬🇭','👨🏻','🕺🏻','🕺🏼','🕺🏽','🕺🏾','🕺🏿','🖐🏻','🖐🏼','🖐🏽','🖐🏾','🖐🏿','🖕🏻','🖕🏼','🖕🏽','🖕🏾','🖕🏿','🖖🏻','🖖🏼','🖖🏽','🖖🏾','🖖🏿','🇬🇮','🇬🇱','🙅🏻','🇬🇲','🇬🇳','🙅🏼','🇬🇵','🇬🇶','🙅🏽','🇬🇷','🇬🇸','🙅🏾','🇬🇹','🇬🇺','🙅🏿','🇬🇼','🇬🇾','🇭🇰','🇭🇲','🙆🏻','🇭🇳','🇭🇷','🙆🏼','🇭🇹','🇭🇺','🙆🏽','🇮🇨','🇮🇩','🙆🏾','👨🏼','🇮🇪','🙆🏿','🇮🇱','🇮🇲','🇮🇳','🇮🇴','🙇🏻','🇮🇶','🇮🇷','🙇🏼','🇮🇸','🇮🇹','🙇🏽','🇯🇪','🇯🇲','🙇🏾','🇯🇴','🇯🇵','🙇🏿','🇰🇪','🇰🇬','🇰🇭','🇰🇮','🙋🏻','🇰🇲','🇰🇳','🙋🏼','🇰🇵','👨🏽','🙋🏽','🇰🇷','🇰🇼','🙋🏾','🇰🇾','🇰🇿','🙋🏿','🇱🇦','🇱🇧','🙌🏻','🙌🏼','🙌🏽','🙌🏾','🙌🏿','🇱🇨','🇱🇮','🙍🏻','🇱🇰','🇱🇷','🙍🏼','🇱🇸','🇱🇹','🙍🏽','🇱🇺','🇱🇻','🙍🏾','🇱🇾','🇲🇦','🙍🏿','🇲🇨','🇲🇩','🇲🇪','🇲🇫','🙎🏻','👨🏾','🇲🇬','🙎🏼','🇲🇭','🇲🇰','🙎🏽','🇲🇱','🇲🇲','🙎🏾','🇲🇳','🇲🇴','🙎🏿','🇲🇵','🇲🇶','🙏🏻','🙏🏼','🙏🏽','🙏🏾','🙏🏿','🇲🇷','🇲🇸','🚣🏻','🇲🇹','🇲🇺','🚣🏼','🇲🇻','🇲🇼','🚣🏽','🇲🇽','🇲🇾','🚣🏾','🇲🇿','🇳🇦','🚣🏿','🇳🇨','👨🏿','🇳🇪','🇳🇫','🚴🏻','🇳🇬','🇳🇮','🚴🏼','🇳🇱','🇳🇴','🚴🏽','🇳🇵','🇳🇷','🚴🏾','🇳🇺','🇳🇿','🚴🏿','🇴🇲','🇵🇦','🇵🇪','🇵🇫','🚵🏻','🇵🇬','🇵🇭','🚵🏼','🇵🇰','🇵🇱','🚵🏽','🇵🇲','🇵🇳','🚵🏾','🇵🇷','🇵🇸','🚵🏿','🇵🇹','🇵🇼','🇵🇾','🇶🇦','🚶🏻','🇷🇪','🇷🇴','🚶🏼','🇷🇸','🇷🇺','🚶🏽','🇷🇼','🇸🇦','🚶🏾','🇸🇧','🇸🇨','🚶🏿','🇸🇩','🇸🇪','🛀🏻','🛀🏼','🛀🏽','🛀🏾','🛀🏿','🛌🏻','🛌🏼','🛌🏽','🛌🏾','🛌🏿','🤘🏻','🤘🏼','🤘🏽','🤘🏾','🤘🏿','🤙🏻','🤙🏼','🤙🏽','🤙🏾','🤙🏿','🤚🏻','🤚🏼','🤚🏽','🤚🏾','🤚🏿','🤛🏻','🤛🏼','🤛🏽','🤛🏾','🤛🏿','🤜🏻','🤜🏼','🤜🏽','🤜🏾','🤜🏿','🤞🏻','🤞🏼','🤞🏽','🤞🏾','🤞🏿','🤟🏻','🤟🏼','🤟🏽','🤟🏾','🤟🏿','🇸🇬','🇸🇭','🤦🏻','🇸🇮','🇸🇯','🤦🏼','🇸🇰','🇦🇩','🤦🏽','🇸🇲','🇸🇳','🤦🏾','🇸🇴','🇸🇷','🤦🏿','🇸🇸','🇸🇹','🤰🏻','🤰🏼','🤰🏽','🤰🏾','🤰🏿','🤱🏻','🤱🏼','🤱🏽','🤱🏾','🤱🏿','🤲🏻','🤲🏼','🤲🏽','🤲🏾','🤲🏿','🤳🏻','🤳🏼','🤳🏽','🤳🏾','🤳🏿','🤴🏻','🤴🏼','🤴🏽','🤴🏾','🤴🏿','🇸🇻','🇸🇽','🤵🏻','🇸🇾','🇸🇿','🤵🏼','🇹🇦','🇹🇨','🤵🏽','🇹🇩','🇹🇫','🤵🏾','🇹🇬','👩🏻','🤵🏿','🇹🇭','🇹🇯','🤶🏻','🤶🏼','🤶🏽','🤶🏾','🤶🏿','🇹🇰','🇹🇱','🤷🏻','🇹🇲','🇹🇳','🤷🏼','🇹🇴','🇹🇷','🤷🏽','🇹🇹','🇹🇻','🤷🏾','🇹🇼','🇹🇿','🤷🏿','🇺🇦','🇺🇬','🇺🇲','🇺🇳','🤸🏻','🇺🇸','🇺🇾','🤸🏼','🇺🇿','🇻🇦','🤸🏽','👩🏼','🇻🇨','🤸🏾','🇻🇪','🇻🇬','🤸🏿','🇻🇮','🇻🇳','🇻🇺','🇼🇫','🤹🏻','🇼🇸','🇽🇰','🤹🏼','🇾🇪','🇾🇹','🤹🏽','🇿🇦','🇿🇲','🤹🏾','🇿🇼','🎅🏻','🤹🏿','🎅🏼','🎅🏽','🎅🏾','🎅🏿','🏂🏻','👩🏽','🤽🏻','🏂🏼','🏂🏽','🤽🏼','🏂🏾','🏂🏿','🤽🏽','🇦🇨','🇦🇪','🤽🏾','🏃🏻','🇦🇫','🤽🏿','🇦🇬','🏃🏼','🇦🇮','🇦🇱','🤾🏻','🏃🏽','🇦🇲','🤾🏼','🇦🇴','🏃🏾','🤾🏽','🇦🇶','🇦🇷','🤾🏾','🏃🏿','🇦🇸','🤾🏿','👩🏾','🇦🇹','🦵🏻','🦵🏼','🦵🏽','🦵🏾','🦵🏿','🦶🏻','🦶🏼','🦶🏽','🦶🏾','🦶🏿','🇦🇺','🇦🇼','🦸🏻','🏄🏻','🇦🇽','🦸🏼','🇦🇿','🏄🏼','🦸🏽','🇧🇦','🇧🇧','🦸🏾','🏄🏽','🇧🇩','🦸🏿','🇧🇪','🏄🏾','🇧🇫','🇧🇬','🦹🏻','🏄🏿','🇧🇭','🦹🏼','🇧🇮','🏇🏻','🦹🏽','🏇🏼','👩🏿','🦹🏾','🏇🏽','🏇🏾','🦹🏿','🏇🏿','🇧🇯','🧑🏻','🧑🏼','🧑🏽','🧑🏾','🧑🏿','🧒🏻','🧒🏼','🧒🏽','🧒🏾','🧒🏿','🧓🏻','🧓🏼','🧓🏽','🧓🏾','🧓🏿','🧔🏻','🧔🏼','🧔🏽','🧔🏾','🧔🏿','🧕🏻','🧕🏼','🧕🏽','🧕🏾','🧕🏿','🇧🇱','🏊🏻','🧖🏻','🇧🇲','🇧🇳','🧖🏼','🏊🏼','🇧🇴','🧖🏽','🇧🇶','🏊🏽','🧖🏾','🇧🇷','🇧🇸','🧖🏿','🏊🏾','🇧🇹','🇧🇻','🏊🏿','🧗🏻','🇧🇼','🇧🇾','🧗🏼','🇧🇿','🇨🇦','🧗🏽','🏋🏻','🇨🇨','🧗🏾','🇨🇩','🏋🏼','🧗🏿','🇨🇫','🇨🇬','🏋🏽','🇨🇭','🧘🏻','🇨🇮','🏋🏾','🧘🏼','🇨🇰','🇨🇱','🧘🏽','🏋🏿','🇨🇲','🧘🏾','👮🏻','🇨🇳','🧘🏿','🇨🇴','👮🏼','🇨🇵','🏌🏻','🧙🏻','👮🏽','🇨🇷','🧙🏼','🇨🇺','👮🏾','🧙🏽','🏌🏼','🇨🇻','🧙🏾','👮🏿','🇨🇼','🧙🏿','🏌🏽','🇨🇽','🇨🇾','👰🏻','🧚🏻','👰🏼','👰🏽','🧚🏼','👰🏾','👰🏿','🧚🏽','🏌🏾','🇨🇿','🧚🏾','👱🏻','🇩🇪','🧚🏿','🏌🏿','👱🏼','🇩🇬','🇩🇯','🧛🏻','👱🏽','🇩🇰','🧛🏼','🇩🇲','👱🏾','🧛🏽','🇩🇴','🇩🇿','🧛🏾','👱🏿','🇪🇦','🧛🏿','🇪🇨','👲🏻','👲🏼','👲🏽','🧜🏻','👲🏾','👲🏿','🧜🏼','👂🏻','👂🏼','🧜🏽','👳🏻','👂🏽','🧜🏾','👂🏾','👳🏼','🧜🏿','👂🏿','👃🏻','👳🏽','👃🏼','🧝🏻','👃🏽','👳🏾','🧝🏼','👃🏾','👃🏿','🧝🏽','👳🏿','👆🏻','🧝🏾','👆🏼','👴🏻','🧝🏿','👴🏼','👴🏽','👴🏾','👴🏿','👵🏻','👵🏼','👵🏽','👵🏾','👵🏿','👶🏻','👶🏼','👶🏽','👶🏾','👶🏿','👆🏽','👆🏾','👷🏻','🇸🇱','✍🏿','⛹🏻','✍🏾','✍🏽','✍🏼','✍🏻','✌🏿','✌🏾','✌🏽','✌🏼','✌🏻','✋🏿','✋🏾','✋🏽','✋🏼','✋🏻','✊🏿','✊🏾','✊🏽','✊🏼','✊🏻','⛷🏽','⛷🏾','⛹🏿','☝🏿','☝🏾','⛹🏾','☝🏽','☝🏼','⛹🏽','☝🏻','⛷🏿','⛹🏼','⛷🏻','⛷🏼','4⃣','#⃣','0⃣','1⃣','2⃣','3⃣','*⃣','5⃣','6⃣','7⃣','8⃣','9⃣','🃏','🕺','🖇','🖊','🖋','🖌','🖍','🀄','🇾','🇦','🅰','🅱','🖐','🇿','🈁','🈂','🏄','🏅','🖕','🏆','🈚','🈯','🈲','🈳','🖖','🖤','🖥','🖨','🖱','🖲','🖼','🗂','🗃','🗄','🗑','🗒','🗓','🗜','🗝','🗞','🗡','🗣','🗨','🗯','🗳','🗺','🗻','🗼','🗽','🗾','🗿','😀','😁','😂','😃','😄','😅','😆','😇','😈','😉','😊','😋','😌','😍','😎','😏','😐','😑','😒','😓','😔','😕','😖','😗','😘','😙','😚','😛','😜','😝','😞','😟','😠','😡','😢','😣','😤','😥','😦','😧','😨','😩','😪','😫','😬','😭','😮','😯','😰','😱','😲','😳','😴','😵','😶','😷','😸','😹','😺','😻','😼','😽','😾','😿','🙀','🙁','🙂','🙃','🙄','🈴','🏇','🏈','🏉','🈵','🈶','🈷','🈸','🈹','🈺','🉐','🉑','🌀','🌁','🌂','🌃','🌄','🙅','🌅','🌆','🌇','🌈','🏊','🌉','🌊','🌋','🌌','👨','🌍','🌎','🌏','🌐','🌑','🌒','🌓','🙆','🌔','🌕','🌖','🌗','🌘','🌙','🏋','🌚','🌛','🌜','🌝','🌞','🌟','🌠','🌡','🌤','🌥','🙇','🙈','🙉','🙊','🌦','🌧','🌨','🌩','🌪','🌫','🌬','🏌','🏍','🏎','🏏','🏐','🏑','🏒','🏓','🏔','🏕','🙋','🏖','🏗','🏘','🏙','🏚','🙌','🏛','🏜','🏝','🏞','🏟','🏠','🏡','🏢','🏣','🏤','🏥','🏦','🏧','🏨','🏩','🏪','🏫','🙍','🏬','🏭','🏮','🏯','🏰','🌭','🏳','🌮','🌯','🌰','🌱','🏴','🏵','🏷','🏸','🏹','🏺','🙎','🏻','🏼','🏽','🏾','🏿','🙏','🚀','🚁','🚂','🚃','🚄','🚅','🚆','🚇','🚈','🚉','🚊','🚋','🚌','🚍','🚎','🚏','🚐','🚑','🚒','🚓','🚔','🚕','🚖','🚗','🚘','🚙','🚚','🚛','🚜','🚝','🚞','🚟','🚠','🚡','🚢','🐀','🐁','🐂','🐃','🐄','🐅','🐆','🐇','🐈','🐉','🐊','🐋','🐌','🐍','🐎','🐏','🐐','🚣','🚤','🚥','🚦','🚧','🚨','🚩','🚪','🚫','🚬','🚭','🚮','🚯','🚰','🚱','🚲','🚳','🐑','🐒','🐓','🐔','🐕','🐖','🐗','🐘','🐙','🐚','🐛','🐜','🐝','🐞','🐟','🐠','🐡','🚴','🐢','🐣','🐤','🐥','🐦','🐧','🐨','🐩','🐪','🐫','🐬','🐭','🐮','🐯','🐰','🐱','🐲','🚵','🐳','🐴','🐵','👩','👪','👫','👬','👭','🐶','🐷','🐸','🐹','🐺','🐻','🐼','🐽','🐾','🚶','🚷','🚸','🚹','🚺','🚻','🚼','🚽','🚾','🚿','🐿','👀','🌲','👁','🌳','🛀','🛁','🛂','🛃','🛄','🛅','🛋','🌴','🌵','🌶','👮','🌷','🛌','🛍','🛎','🛏','🛐','🛑','🛒','🛠','🛡','🛢','🛣','🛤','🛥','🛩','🛫','🛬','🛰','🛳','🛴','🛵','🛶','🛷','🛸','🛹','🤐','🤑','🤒','🤓','🤔','🤕','🤖','🤗','👂','👯','🌸','🌹','🌺','🤘','🌻','🌼','👰','👃','👄','🤙','👅','🌽','🌾','🌿','🍀','🤚','🍁','👆','🍂','🍃','🍄','🤛','🍅','🍆','👇','🍇','🍈','🤜','🤝','👱','🍉','🍊','🍋','👈','🤞','🍌','👲','🍍','🍎','🍏','🤟','🤠','🤡','🤢','🤣','🤤','🤥','🍐','👉','🍑','🍒','🍓','🍔','🍕','👊','🍖','🍗','🍘','🍙','🍚','👋','👳','🍛','🍜','🤦','🤧','🤨','🤩','🤪','🤫','🤬','🤭','🤮','🤯','🍝','🍞','🍟','👴','👌','🤰','🍠','🍡','🍢','🍣','👵','🤱','🍤','👍','🍥','🍦','🍧','🤲','👶','🍨','🍩','👎','🍪','🤳','🍫','🍬','🍭','🍮','👏','🤴','🍯','🍰','🍱','🍲','🍳','👐','👑','👒','👷','👓','👔','👕','👖','👗','👸','👹','👺','🤵','👻','👘','👙','👚','👛','🤶','👜','👼','👽','👾','👿','💀','👝','👞','👟','👠','👡','👢','👣','👤','👥','🍴','🍵','🤷','🍶','🍷','🍸','👦','🍹','🍺','💁','🍻','🍼','🍽','👧','🍾','🍿','🎀','🎁','🎂','🎃','🤸','🎄','🇵','🅾','🇶','🇲','🅿','🎅','💂','🎆','🎇','🎈','🎉','🎊','💃','💄','🎋','🎌','🤹','🤺','🎍','🎎','🤼','🎏','💅','🎐','🎑','🎒','🎓','🎖','🎗','🎙','🎚','🎛','🎞','🎟','🎠','🎡','🎢','🎣','🤽','🎤','🎥','💆','🎦','🎧','🎨','🎩','🎪','🎫','🎬','🎭','🎮','🎯','🎰','🎱','🎲','🎳','🤾','🥀','🥁','🥂','🥃','🥄','🥅','🥇','🥈','🥉','🥊','🥋','🥌','🥍','🥎','🥏','🥐','🥑','🥒','🥓','🥔','🥕','🥖','🥗','🥘','🥙','🥚','🥛','🥜','🥝','🥞','🥟','🥠','🥡','🥢','🥣','🥤','🥥','🥦','🥧','🥨','🥩','🥪','🥫','🥬','🥭','🥮','🥯','🥰','🥳','🥴','🥵','🥶','🥺','🥼','🥽','🥾','🥿','🦀','🦁','🦂','🦃','🦄','🦅','🦆','🦇','🦈','🦉','🦊','🦋','🦌','🦍','🦎','🦏','🦐','🦑','🦒','🦓','🦔','🦕','🦖','🦗','🦘','🦙','🦚','🦛','🦜','🦝','🦞','🦟','🦠','🦡','🦢','🦴','🎴','🎵','🎶','💇','💈','🦵','💉','💊','💋','💌','💍','🦶','🦷','💎','💏','💐','💑','💒','💓','💔','💕','💖','💗','💘','💙','💚','💛','💜','💝','💞','🦸','💟','💠','💡','💢','💣','💤','💥','💦','💧','💨','💩','🎷','🎸','🎹','🎺','🎻','💪','🦹','🧀','🧁','🧂','🧐','💫','💬','💭','💮','💯','🧑','💰','💱','💲','💳','💴','🧒','💵','💶','💷','💸','💹','🧓','💺','💻','💼','💽','💾','🧔','💿','📀','📁','📂','📃','🧕','📄','📅','📆','📇','📈','📉','📊','📋','📌','📍','📎','📏','📐','📑','📒','📓','📔','🧖','📕','📖','📗','📘','📙','📚','📛','📜','📝','📞','📟','📠','📡','📢','📣','📤','📥','🧗','📦','📧','📨','📩','📪','📫','📬','📭','📮','📯','📰','📱','📲','📳','📴','📵','📶','🧘','📷','📸','📹','📺','📻','📼','📽','📿','🔀','🔁','🔂','🔃','🔄','🔅','🔆','🔇','🔈','🧙','🔉','🔊','🔋','🔌','🔍','🔎','🔏','🔐','🔑','🔒','🔓','🔔','🔕','🔖','🔗','🔘','🔙','🧚','🔚','🔛','🔜','🔝','🔞','🔟','🔠','🔡','🔢','🔣','🔤','🔥','🔦','🔧','🔨','🔩','🔪','🧛','🔫','🔬','🔭','🔮','🔯','🔰','🔱','🔲','🔳','🔴','🔵','🔶','🔷','🔸','🔹','🔺','🔻','🧜','🔼','🔽','🕉','🕊','🕋','🕌','🕍','🕎','🕐','🕑','🕒','🕓','🕔','🕕','🕖','🕗','🕘','🧝','🕙','🕚','🧞','🕛','🕜','🧟','🧠','🧡','🧢','🧣','🧤','🧥','🧦','🧧','🧨','🧩','🧪','🧫','🧬','🧭','🧮','🧯','🧰','🧱','🧲','🧳','🧴','🧵','🧶','🧷','🧸','🧹','🧺','🧻','🧼','🧽','🧾','🧿','🕝','🕞','🕟','🕠','🕡','🕢','🕣','🕤','🕥','🕦','🕧','🕯','🕰','🕳','🎼','🎽','🎾','🎿','🏀','🏁','🇧','🇮','🇪','🇷','🇱','🏂','🆎','🆑','🇨','🇹','🇯','🕴','🆒','🇬','🆓','🇳','🆔','🇴','🇺','🇫','🆕','🆖','🆗','🇭','🏃','🆘','🇩','🇻','🇰','🕵','🕶','🕷','🕸','🕹','🆙','🇼','🆚','🇽','🇸','▫','☦','☮','☯','☸','☹','☺','♀','♂','♈','♉','♊','♋','♌','♍','♎','♏','♐','♑','♒','♓','♟','♠','♣','♥','♦','♨','♻','♾','♿','⚒','⚓','⚔','⚕','⚖','⚗','⚙','⚛','⚜','⚠','⚡','⚪','⚫','⚰','⚱','⚽','⚾','⛄','⛅','⛈','⛎','⛏','⛑','⛓','⛔','⛩','⛪','⛰','⛱','⛲','⛳','⛴','⛵','☣','☢','☠','☝','☘','⛷','⛸','☕','☔','☑','☎','☄','☃','☂','☁','☀','◾','◽','◼','◻','◀','▶','☪','▪','⛹','⛺','⛽','✂','✅','✈','✉','Ⓜ','⏺','⏹','⏸','⏳','✊','⏲','⏱','⏰','⏯','⏮','✋','⏭','⏬','⏫','⏪','⏩','✌','⏏','⌨','⌛','⌚','↪','✍','✏','✒','✔','✖','✝','✡','✨','✳','✴','❄','❇','❌','❎','❓','❔','❕','❗','❣','❤','➕','➖','➗','➡','➰','➿','⤴','⤵','↩','⬅','⬆','⬇','⬛','⬜','⭐','⭕','↙','〰','〽','↘','↗','㊗','㊙','↖','↕','↔','ℹ','™','⁉','‼','');
+ $partials = array('🀄','🃏','🅰','🅱','🅾','🅿','🆎','🆑','🆒','🆓','🆔','🆕','🆖','🆗','🆘','🆙','🆚','🇦','🇨','🇩','🇪','🇫','🇬','🇮','🇱','🇲','🇴','🇶','🇷','🇸','🇹','🇺','🇼','🇽','🇿','🇧','🇭','🇯','🇳','🇻','🇾','🇰','🇵','🈁','🈂','🈚','🈯','🈲','🈳','🈴','🈵','🈶','🈷','🈸','🈹','🈺','🉐','🉑','🌀','🌁','🌂','🌃','🌄','🌅','🌆','🌇','🌈','🌉','🌊','🌋','🌌','🌍','🌎','🌏','🌐','🌑','🌒','🌓','🌔','🌕','🌖','🌗','🌘','🌙','🌚','🌛','🌜','🌝','🌞','🌟','🌠','🌡','🌤','🌥','🌦','🌧','🌨','🌩','🌪','🌫','🌬','🌭','🌮','🌯','🌰','🌱','🌲','🌳','🌴','🌵','🌶','🌷','🌸','🌹','🌺','🌻','🌼','🌽','🌾','🌿','🍀','🍁','🍂','🍃','🍄','🍅','🍆','🍇','🍈','🍉','🍊','🍋','🍌','🍍','🍎','🍏','🍐','🍑','🍒','🍓','🍔','🍕','🍖','🍗','🍘','🍙','🍚','🍛','🍜','🍝','🍞','🍟','🍠','🍡','🍢','🍣','🍤','🍥','🍦','🍧','🍨','🍩','🍪','🍫','🍬','🍭','🍮','🍯','🍰','🍱','🍲','🍳','🍴','🍵','🍶','🍷','🍸','🍹','🍺','🍻','🍼','🍽','🍾','🍿','🎀','🎁','🎂','🎃','🎄','🎅','🏻','🏼','🏽','🏾','🏿','🎆','🎇','🎈','🎉','🎊','🎋','🎌','🎍','🎎','🎏','🎐','🎑','🎒','🎓','🎖','🎗','🎙','🎚','🎛','🎞','🎟','🎠','🎡','🎢','🎣','🎤','🎥','🎦','🎧','🎨','🎩','🎪','🎫','🎬','🎭','🎮','🎯','🎰','🎱','🎲','🎳','🎴','🎵','🎶','🎷','🎸','🎹','🎺','🎻','🎼','🎽','🎾','🎿','🏀','🏁','🏂','🏃','‍','♀','️','♂','🏄','🏅','🏆','🏇','🏈','🏉','🏊','🏋','🏌','🏍','🏎','🏏','🏐','🏑','🏒','🏓','🏔','🏕','🏖','🏗','🏘','🏙','🏚','🏛','🏜','🏝','🏞','🏟','🏠','🏡','🏢','🏣','🏤','🏥','🏦','🏧','🏨','🏩','🏪','🏫','🏬','🏭','🏮','🏯','🏰','🏳','🏴','☠','󠁧','󠁢','󠁥','󠁮','󠁿','󠁳','󠁣','󠁴','󠁷','󠁬','🏵','🏷','🏸','🏹','🏺','🐀','🐁','🐂','🐃','🐄','🐅','🐆','🐇','🐈','🐉','🐊','🐋','🐌','🐍','🐎','🐏','🐐','🐑','🐒','🐓','🐔','🐕','🐖','🐗','🐘','🐙','🐚','🐛','🐜','🐝','🐞','🐟','🐠','🐡','🐢','🐣','🐤','🐥','🐦','🐧','🐨','🐩','🐪','🐫','🐬','🐭','🐮','🐯','🐰','🐱','🐲','🐳','🐴','🐵','🐶','🐷','🐸','🐹','🐺','🐻','🐼','🐽','🐾','🐿','👀','👁','🗨','👂','👃','👄','👅','👆','👇','👈','👉','👊','👋','👌','👍','👎','👏','👐','👑','👒','👓','👔','👕','👖','👗','👘','👙','👚','👛','👜','👝','👞','👟','👠','👡','👢','👣','👤','👥','👦','👧','👨','💻','💼','🔧','🔬','🚀','🚒','🦰','🦱','🦲','🦳','⚕','⚖','✈','👩','❤','💋','👪','👫','👬','👭','👮','👯','👰','👱','👲','👳','👴','👵','👶','👷','👸','👹','👺','👻','👼','👽','👾','👿','💀','💁','💂','💃','💄','💅','💆','💇','💈','💉','💊','💌','💍','💎','💏','💐','💑','💒','💓','💔','💕','💖','💗','💘','💙','💚','💛','💜','💝','💞','💟','💠','💡','💢','💣','💤','💥','💦','💧','💨','💩','💪','💫','💬','💭','💮','💯','💰','💱','💲','💳','💴','💵','💶','💷','💸','💹','💺','💽','💾','💿','📀','📁','📂','📃','📄','📅','📆','📇','📈','📉','📊','📋','📌','📍','📎','📏','📐','📑','📒','📓','📔','📕','📖','📗','📘','📙','📚','📛','📜','📝','📞','📟','📠','📡','📢','📣','📤','📥','📦','📧','📨','📩','📪','📫','📬','📭','📮','📯','📰','📱','📲','📳','📴','📵','📶','📷','📸','📹','📺','📻','📼','📽','📿','🔀','🔁','🔂','🔃','🔄','🔅','🔆','🔇','🔈','🔉','🔊','🔋','🔌','🔍','🔎','🔏','🔐','🔑','🔒','🔓','🔔','🔕','🔖','🔗','🔘','🔙','🔚','🔛','🔜','🔝','🔞','🔟','🔠','🔡','🔢','🔣','🔤','🔥','🔦','🔨','🔩','🔪','🔫','🔭','🔮','🔯','🔰','🔱','🔲','🔳','🔴','🔵','🔶','🔷','🔸','🔹','🔺','🔻','🔼','🔽','🕉','🕊','🕋','🕌','🕍','🕎','🕐','🕑','🕒','🕓','🕔','🕕','🕖','🕗','🕘','🕙','🕚','🕛','🕜','🕝','🕞','🕟','🕠','🕡','🕢','🕣','🕤','🕥','🕦','🕧','🕯','🕰','🕳','🕴','🕵','🕶','🕷','🕸','🕹','🕺','🖇','🖊','🖋','🖌','🖍','🖐','🖕','🖖','🖤','🖥','🖨','🖱','🖲','🖼','🗂','🗃','🗄','🗑','🗒','🗓','🗜','🗝','🗞','🗡','🗣','🗯','🗳','🗺','🗻','🗼','🗽','🗾','🗿','😀','😁','😂','😃','😄','😅','😆','😇','😈','😉','😊','😋','😌','😍','😎','😏','😐','😑','😒','😓','😔','😕','😖','😗','😘','😙','😚','😛','😜','😝','😞','😟','😠','😡','😢','😣','😤','😥','😦','😧','😨','😩','😪','😫','😬','😭','😮','😯','😰','😱','😲','😳','😴','😵','😶','😷','😸','😹','😺','😻','😼','😽','😾','😿','🙀','🙁','🙂','🙃','🙄','🙅','🙆','🙇','🙈','🙉','🙊','🙋','🙌','🙍','🙎','🙏','🚁','🚂','🚃','🚄','🚅','🚆','🚇','🚈','🚉','🚊','🚋','🚌','🚍','🚎','🚏','🚐','🚑','🚓','🚔','🚕','🚖','🚗','🚘','🚙','🚚','🚛','🚜','🚝','🚞','🚟','🚠','🚡','🚢','🚣','🚤','🚥','🚦','🚧','🚨','🚩','🚪','🚫','🚬','🚭','🚮','🚯','🚰','🚱','🚲','🚳','🚴','🚵','🚶','🚷','🚸','🚹','🚺','🚻','🚼','🚽','🚾','🚿','🛀','🛁','🛂','🛃','🛄','🛅','🛋','🛌','🛍','🛎','🛏','🛐','🛑','🛒','🛠','🛡','🛢','🛣','🛤','🛥','🛩','🛫','🛬','🛰','🛳','🛴','🛵','🛶','🛷','🛸','🛹','🤐','🤑','🤒','🤓','🤔','🤕','🤖','🤗','🤘','🤙','🤚','🤛','🤜','🤝','🤞','🤟','🤠','🤡','🤢','🤣','🤤','🤥','🤦','🤧','🤨','🤩','🤪','🤫','🤬','🤭','🤮','🤯','🤰','🤱','🤲','🤳','🤴','🤵','🤶','🤷','🤸','🤹','🤺','🤼','🤽','🤾','🥀','🥁','🥂','🥃','🥄','🥅','🥇','🥈','🥉','🥊','🥋','🥌','🥍','🥎','🥏','🥐','🥑','🥒','🥓','🥔','🥕','🥖','🥗','🥘','🥙','🥚','🥛','🥜','🥝','🥞','🥟','🥠','🥡','🥢','🥣','🥤','🥥','🥦','🥧','🥨','🥩','🥪','🥫','🥬','🥭','🥮','🥯','🥰','🥳','🥴','🥵','🥶','🥺','🥼','🥽','🥾','🥿','🦀','🦁','🦂','🦃','🦄','🦅','🦆','🦇','🦈','🦉','🦊','🦋','🦌','🦍','🦎','🦏','🦐','🦑','🦒','🦓','🦔','🦕','🦖','🦗','🦘','🦙','🦚','🦛','🦜','🦝','🦞','🦟','🦠','🦡','🦢','🦴','🦵','🦶','🦷','🦸','🦹','🧀','🧁','🧂','🧐','🧑','🧒','🧓','🧔','🧕','🧖','🧗','🧘','🧙','🧚','🧛','🧜','🧝','🧞','🧟','🧠','🧡','🧢','🧣','🧤','🧥','🧦','🧧','🧨','🧩','🧪','🧫','🧬','🧭','🧮','🧯','🧰','🧱','🧲','🧳','🧴','🧵','🧶','🧷','🧸','🧹','🧺','🧻','🧼','🧽','🧾','🧿','‼','⁉','™','ℹ','↔','↕','↖','↗','↘','↙','↩','↪','⃣','⌚','⌛','⌨','⏏','⏩','⏪','⏫','⏬','⏭','⏮','⏯','⏰','⏱','⏲','⏳','⏸','⏹','⏺','Ⓜ','▪','▫','▶','◀','◻','◼','◽','◾','☀','☁','☂','☃','☄','☎','☑','☔','☕','☘','☝','☢','☣','☦','☪','☮','☯','☸','☹','☺','♈','♉','♊','♋','♌','♍','♎','♏','♐','♑','♒','♓','♟','♠','♣','♥','♦','♨','♻','♾','♿','⚒','⚓','⚔','⚗','⚙','⚛','⚜','⚠','⚡','⚪','⚫','⚰','⚱','⚽','⚾','⛄','⛅','⛈','⛎','⛏','⛑','⛓','⛔','⛩','⛪','⛰','⛱','⛲','⛳','⛴','⛵','⛷','⛸','⛹','⛺','⛽','✂','✅','✉','✊','✋','✌','✍','✏','✒','✔','✖','✝','✡','✨','✳','✴','❄','❇','❌','❎','❓','❔','❕','❗','❣','➕','➖','➗','➡','➰','➿','⤴','⤵','⬅','⬆','⬇','⬛','⬜','⭐','⭕','〰','〽','㊗','㊙','');
// END: emoji arrays
if ( 'entities' === $type ) {
* @since 3.9.0
* @since 4.4.0 Ensures upper-case drive letters on Windows systems.
* @since 4.5.0 Allows for Windows network shares.
+ * @since 4.9.7 Allows for PHP file wrappers.
*
* @param string $path Path to normalize.
* @return string Normalized path.
*/
function wp_normalize_path( $path ) {
+ $wrapper = '';
+ if ( wp_is_stream( $path ) ) {
+ list( $wrapper, $path ) = explode( '://', $path, 2 );
+ $wrapper .= '://';
+ }
+
+ // Standardise all paths to use /
$path = str_replace( '\\', '/', $path );
+
+ // Replace multiple slashes down to a singular, allowing for network shares having two slashes.
$path = preg_replace( '|(?<=.)/+|', '/', $path );
+
+ // Windows paths should uppercase the drive letter
if ( ':' === substr( $path, 1, 1 ) ) {
$path = ucfirst( $path );
}
- return $path;
+
+ return $wrapper . $path;
}
/**
'dfxp' => 'application/ttaf+xml',
// Audio formats.
'mp3|m4a|m4b' => 'audio/mpeg',
+ 'aac' => 'audio/aac',
'ra|ram' => 'audio/x-realaudio',
'wav' => 'audio/wav',
'ogg|oga' => 'audio/ogg',
* @return bool True if the path is a stream URL.
*/
function wp_is_stream( $path ) {
- $wrappers = stream_get_wrappers();
- $wrappers_re = '(' . join('|', $wrappers) . ')';
+ if ( false === strpos( $path, '://' ) ) {
+ // $path isn't a stream
+ return false;
+ }
+
+ $wrappers = stream_get_wrappers();
+ $wrappers = array_map( 'preg_quote', $wrappers );
+ $wrappers_re = '(' . join( '|', $wrappers ) . ')';
return preg_match( "!^$wrappers_re://!", $path ) === 1;
}
}
}
+/**
+ * Deletes a file if its path is within the given directory.
+ *
+ * @since 4.9.7
+ *
+ * @param string $file Absolute path to the file to delete.
+ * @param string $directory Absolute path to a directory.
+ * @return bool True on success, false on failure.
+ */
+function wp_delete_file_from_directory( $file, $directory ) {
+ $real_file = realpath( wp_normalize_path( $file ) );
+ $real_directory = realpath( wp_normalize_path( $directory ) );
+
+ if ( false === $real_file || false === $real_directory || strpos( wp_normalize_path( $real_file ), trailingslashit( wp_normalize_path( $real_directory ) ) ) !== 0 ) {
+ return false;
+ }
+
+ wp_delete_file( $file );
+
+ return true;
+}
+
/**
* Outputs a small JS snippet on preview tabs/windows to remove `window.name` on unload.
*
$site_name
), $email_change_email['message'], $email_change_email['headers'] );
}
+
+/**
+ * Return an anonymized IPv4 or IPv6 address.
+ *
+ * @since 4.9.6 Abstracted from `WP_Community_Events::get_unsafe_client_ip()`.
+ *
+ * @param string $ip_addr The IPv4 or IPv6 address to be anonymized.
+ * @param bool $ipv6_fallback Optional. Whether to return the original IPv6 address if the needed functions
+ * to anonymize it are not present. Default false, return `::` (unspecified address).
+ * @return string The anonymized IP address.
+ */
+function wp_privacy_anonymize_ip( $ip_addr, $ipv6_fallback = false ) {
+ // Detect what kind of IP address this is.
+ $ip_prefix = '';
+ $is_ipv6 = substr_count( $ip_addr, ':' ) > 1;
+ $is_ipv4 = ( 3 === substr_count( $ip_addr, '.' ) );
+
+ if ( $is_ipv6 && $is_ipv4 ) {
+ // IPv6 compatibility mode, temporarily strip the IPv6 part, and treat it like IPv4.
+ $ip_prefix = '::ffff:';
+ $ip_addr = preg_replace( '/^\[?[0-9a-f:]*:/i', '', $ip_addr );
+ $ip_addr = str_replace( ']', '', $ip_addr );
+ $is_ipv6 = false;
+ }
+
+ if ( $is_ipv6 ) {
+ // IPv6 addresses will always be enclosed in [] if there's a port.
+ $left_bracket = strpos( $ip_addr, '[' );
+ $right_bracket = strpos( $ip_addr, ']' );
+ $percent = strpos( $ip_addr, '%' );
+ $netmask = 'ffff:ffff:ffff:ffff:0000:0000:0000:0000';
+
+ // Strip the port (and [] from IPv6 addresses), if they exist.
+ if ( false !== $left_bracket && false !== $right_bracket ) {
+ $ip_addr = substr( $ip_addr, $left_bracket + 1, $right_bracket - $left_bracket - 1 );
+ } elseif ( false !== $left_bracket || false !== $right_bracket ) {
+ // The IP has one bracket, but not both, so it's malformed.
+ return '::';
+ }
+
+ // Strip the reachability scope.
+ if ( false !== $percent ) {
+ $ip_addr = substr( $ip_addr, 0, $percent );
+ }
+
+ // No invalid characters should be left.
+ if ( preg_match( '/[^0-9a-f:]/i', $ip_addr ) ) {
+ return '::';
+ }
+
+ // Partially anonymize the IP by reducing it to the corresponding network ID.
+ if ( function_exists( 'inet_pton' ) && function_exists( 'inet_ntop' ) ) {
+ $ip_addr = inet_ntop( inet_pton( $ip_addr ) & inet_pton( $netmask ) );
+ if ( false === $ip_addr) {
+ return '::';
+ }
+ } elseif ( ! $ipv6_fallback ) {
+ return '::';
+ }
+ } elseif ( $is_ipv4 ) {
+ // Strip any port and partially anonymize the IP.
+ $last_octet_position = strrpos( $ip_addr, '.' );
+ $ip_addr = substr( $ip_addr, 0, $last_octet_position ) . '.0';
+ } else {
+ return '0.0.0.0';
+ }
+
+ // Restore the IPv6 prefix to compatibility mode addresses.
+ return $ip_prefix . $ip_addr;
+}
+
+/**
+ * Return uniform "anonymous" data by type.
+ *
+ * @since 4.9.6
+ *
+ * @param string $type The type of data to be anonymized.
+ * @param string $data Optional The data to be anonymized.
+ * @return string The anonymous data for the requested type.
+ */
+function wp_privacy_anonymize_data( $type, $data = '' ) {
+
+ switch ( $type ) {
+ case 'email':
+ $anonymous = 'deleted@site.invalid';
+ break;
+ case 'url':
+ $anonymous = 'https://site.invalid';
+ break;
+ case 'ip':
+ $anonymous = wp_privacy_anonymize_ip( $data );
+ break;
+ case 'date':
+ $anonymous = '0000-00-00 00:00:00';
+ break;
+ case 'text':
+ /* translators: deleted text */
+ $anonymous = __( '[deleted]' );
+ break;
+ case 'longtext':
+ /* translators: deleted long text */
+ $anonymous = __( 'This content was deleted by the author.' );
+ break;
+ default:
+ $anonymous = '';
+ }
+
+ /**
+ * Filters the anonymous data for each type.
+ *
+ * @since 4.9.6
+ *
+ * @param string $anonymous Anonymized data.
+ * @param string $type Type of the data.
+ * @param string $data Original data.
+ */
+ return apply_filters( 'wp_privacy_anonymize_data', $anonymous, $type, $data );
+}
+
+/**
+ * Returns the directory used to store personal data export files.
+ *
+ * @since 4.9.6
+ *
+ * @see wp_privacy_exports_url
+ *
+ * @return string Exports directory.
+ */
+function wp_privacy_exports_dir() {
+ $upload_dir = wp_upload_dir();
+ $exports_dir = trailingslashit( $upload_dir['basedir'] ) . 'wp-personal-data-exports/';
+
+ /**
+ * Filters the directory used to store personal data export files.
+ *
+ * @since 4.9.6
+ *
+ * @param string $exports_dir Exports directory.
+ */
+ return apply_filters( 'wp_privacy_exports_dir', $exports_dir );
+}
+
+/**
+ * Returns the URL of the directory used to store personal data export files.
+ *
+ * @since 4.9.6
+ *
+ * @see wp_privacy_exports_dir
+ *
+ * @return string Exports directory URL.
+ */
+function wp_privacy_exports_url() {
+ $upload_dir = wp_upload_dir();
+ $exports_url = trailingslashit( $upload_dir['baseurl'] ) . 'wp-personal-data-exports/';
+
+ /**
+ * Filters the URL of the directory used to store personal data export files.
+ *
+ * @since 4.9.6
+ *
+ * @param string $exports_url Exports directory URL.
+ */
+ return apply_filters( 'wp_privacy_exports_url', $exports_url );
+}
+
+/**
+ * Schedule a `WP_Cron` job to delete expired export files.
+ *
+ * @since 4.9.6
+ */
+function wp_schedule_delete_old_privacy_export_files() {
+ if ( wp_installing() ) {
+ return;
+ }
+
+ if ( ! wp_next_scheduled( 'wp_privacy_delete_old_export_files' ) ) {
+ wp_schedule_event( time(), 'hourly', 'wp_privacy_delete_old_export_files' );
+ }
+}
+
+/**
+ * Cleans up export files older than three days old.
+ *
+ * The export files are stored in `wp-content/uploads`, and are therefore publicly
+ * accessible. A CSPRN is appended to the filename to mitigate the risk of an
+ * unauthorized person downloading the file, but it is still possible. Deleting
+ * the file after the data subject has had a chance to delete it adds an additional
+ * layer of protection.
+ *
+ * @since 4.9.6
+ */
+function wp_privacy_delete_old_export_files() {
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
+
+ $exports_dir = wp_privacy_exports_dir();
+ $export_files = list_files( $exports_dir, 100, array( 'index.html' ) );
+
+ /**
+ * Filters the lifetime, in seconds, of a personal data export file.
+ *
+ * By default, the lifetime is 3 days. Once the file reaches that age, it will automatically
+ * be deleted by a cron job.
+ *
+ * @since 4.9.6
+ *
+ * @param int $expiration The expiration age of the export, in seconds.
+ */
+ $expiration = apply_filters( 'wp_privacy_export_expiration', 3 * DAY_IN_SECONDS );
+
+ foreach ( (array) $export_files as $export_file ) {
+ $file_age_in_seconds = time() - filemtime( $export_file );
+
+ if ( $expiration < $file_age_in_seconds ) {
+ unlink( $export_file );
+ }
+ }
+}
* The path is removed in the foreach loop below.
*/
/** This filter is documented in wp-includes/formatting.php */
- $hints['dns-prefetch'][] = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/2.4/svg/' );
+ $hints['dns-prefetch'][] = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/11/svg/' );
foreach ( $hints as $relation_type => $urls ) {
$unique_urls = array();
// Only observe when a limited number of query args are set. There
// are no filters for other properties, so observing will result in
// false positives in those queries.
- allowed = [ 's', 'order', 'orderby', 'posts_per_page', 'post_mime_type', 'post_parent' ];
+ allowed = [ 's', 'order', 'orderby', 'posts_per_page', 'post_mime_type', 'post_parent', 'author' ];
if ( wp.Uploader && _( this.args ).chain().keys().difference( allowed ).isEmpty().value() ) {
this.observe( wp.Uploader.queue );
}
* @readonly
*/
propmap: {
- 'search': 's',
- 'type': 'post_mime_type',
- 'perPage': 'posts_per_page',
- 'menuOrder': 'menu_order',
- 'uploadedTo': 'post_parent',
- 'status': 'post_status',
- 'include': 'post__in',
- 'exclude': 'post__not_in'
+ 'search': 's',
+ 'type': 'post_mime_type',
+ 'perPage': 'posts_per_page',
+ 'menuOrder': 'menu_order',
+ 'uploadedTo': 'post_parent',
+ 'status': 'post_status',
+ 'include': 'post__in',
+ 'exclude': 'post__not_in',
+ 'author': 'author'
},
/**
* Creates and returns an Attachments Query collection given the properties.
* @param {Object} [props.menu_order]
* @param {Object} [props.post_parent]
* @param {Object} [props.post_status]
+ * @param {Object} [props.author]
* @param {Object} [options]
*
* @returns {wp.media.model.Query} A new Attachments Query collection.
-!function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a["default"]}:function(){return a};return b.d(c,"a",c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p="",b(b.s=20)}({20:function(a,b,c){var d,e,f,g,h=jQuery;window.wp=window.wp||{},g=wp.media=function(a){var b,c=g.view.MediaFrame;if(c)return a=_.defaults(a||{},{frame:"select"}),"select"===a.frame&&c.Select?b=new c.Select(a):"post"===a.frame&&c.Post?b=new c.Post(a):"manage"===a.frame&&c.Manage?b=new c.Manage(a):"image"===a.frame&&c.ImageDetails?b=new c.ImageDetails(a):"audio"===a.frame&&c.AudioDetails?b=new c.AudioDetails(a):"video"===a.frame&&c.VideoDetails?b=new c.VideoDetails(a):"edit-attachments"===a.frame&&c.EditAttachments&&(b=new c.EditAttachments(a)),delete a.frame,g.frame=b,b},_.extend(g,{model:{},view:{},controller:{},frames:{}}),f=g.model.l10n=window._wpMediaModelsL10n||{},g.model.settings=f.settings||{},delete f.settings,d=g.model.Attachment=c(21),e=g.model.Attachments=c(22),g.model.Query=c(23),g.model.PostImage=c(24),g.model.Selection=c(25),g.compare=function(a,b,c,d){return _.isEqual(a,b)?c===d?0:c>d?-1:1:a>b?-1:1},_.extend(g,{template:wp.template,post:wp.ajax.post,ajax:wp.ajax.send,fit:function(a){var b,c=a.width,d=a.height,e=a.maxWidth,f=a.maxHeight;return _.isUndefined(e)||_.isUndefined(f)?_.isUndefined(f)?b="width":_.isUndefined(e)&&d>f&&(b="height"):b=c/d>e/f?"width":"height","width"===b&&c>e?{width:e,height:Math.round(e*d/c)}:"height"===b&&d>f?{width:Math.round(f*c/d),height:f}:{width:c,height:d}},truncate:function(a,b,c){return b=b||30,c=c||"…",a.length<=b?a:a.substr(0,b/2)+c+a.substr(-1*b/2)}}),g.attachment=function(a){return d.get(a)},e.all=new e,g.query=function(a){return new e(null,{props:_.extend(_.defaults(a||{},{orderby:"date"}),{query:!0})})},h(window).on("unload",function(){window.wp=null})},21:function(a,b){var c,d=Backbone.$;c=Backbone.Model.extend({sync:function(a,b,c){return _.isUndefined(this.id)?d.Deferred().rejectWith(this).promise():"read"===a?(c=c||{},c.context=this,c.data=_.extend(c.data||{},{action:"get-attachment",id:this.id}),wp.media.ajax(c)):"update"===a?this.get("nonces")&&this.get("nonces").update?(c=c||{},c.context=this,c.data=_.extend(c.data||{},{action:"save-attachment",id:this.id,nonce:this.get("nonces").update,post_id:wp.media.model.settings.post.id}),b.hasChanged()&&(c.data.changes={},_.each(b.changed,function(a,b){c.data.changes[b]=this.get(b)},this)),wp.media.ajax(c)):d.Deferred().rejectWith(this).promise():"delete"===a?(c=c||{},c.wait||(this.destroyed=!0),c.context=this,c.data=_.extend(c.data||{},{action:"delete-post",id:this.id,_wpnonce:this.get("nonces")["delete"]}),wp.media.ajax(c).done(function(){this.destroyed=!0}).fail(function(){this.destroyed=!1})):Backbone.Model.prototype.sync.apply(this,arguments)},parse:function(a){return a?(a.date=new Date(a.date),a.modified=new Date(a.modified),a):a},saveCompat:function(a,b){var c=this;return this.get("nonces")&&this.get("nonces").update?wp.media.post("save-attachment-compat",_.defaults({id:this.id,nonce:this.get("nonces").update,post_id:wp.media.model.settings.post.id},a)).done(function(a,d,e){c.set(c.parse(a,e),b)}):d.Deferred().rejectWith(this).promise()}},{create:function(a){var b=wp.media.model.Attachments;return b.all.push(a)},get:_.memoize(function(a,b){var c=wp.media.model.Attachments;return c.all.push(b||{id:a})})}),a.exports=c},22:function(a,b){var c=Backbone.Collection.extend({model:wp.media.model.Attachment,initialize:function(a,b){b=b||{},this.props=new Backbone.Model,this.filters=b.filters||{},this.props.on("change",this._changeFilteredProps,this),this.props.on("change:order",this._changeOrder,this),this.props.on("change:orderby",this._changeOrderby,this),this.props.on("change:query",this._changeQuery,this),this.props.set(_.defaults(b.props||{})),b.observe&&this.observe(b.observe)},_changeOrder:function(){this.comparator&&this.sort()},_changeOrderby:function(a,b){this.comparator&&this.comparator!==c.comparator||(b&&"post__in"!==b?this.comparator=c.comparator:delete this.comparator)},_changeQuery:function(a,b){b?(this.props.on("change",this._requery,this),this._requery()):this.props.off("change",this._requery,this)},_changeFilteredProps:function(a){if(!this.props.get("query")){var b=_.chain(a.changed).map(function(b,d){var e=c.filters[d],f=a.get(d);if(e){if(f&&!this.filters[d])this.filters[d]=e;else{if(f||this.filters[d]!==e)return;delete this.filters[d]}return!0}},this).any().value();b&&(this._source||(this._source=new c(this.models)),this.reset(this._source.filter(this.validator,this)))}},validateDestroyed:!1,validator:function(a){return!(!_.isUndefined(a.attributes.context)&&""!==a.attributes.context)&&(!(!this.validateDestroyed&&a.destroyed)&&_.all(this.filters,function(b){return!!b.call(this,a)},this))},validate:function(a,b){var c=this.validator(a),d=!!this.get(a.cid);return!c&&d?this.remove(a,b):c&&!d&&this.add(a,b),this},validateAll:function(a,b){return b=b||{},_.each(a.models,function(a){this.validate(a,{silent:!0})},this),b.silent||this.trigger("reset",this,b),this},observe:function(a){return this.observers=this.observers||[],this.observers.push(a),a.on("add change remove",this._validateHandler,this),a.on("reset",this._validateAllHandler,this),this.validateAll(a),this},unobserve:function(a){return a?(a.off(null,null,this),this.observers=_.without(this.observers,a)):(_.each(this.observers,function(a){a.off(null,null,this)},this),delete this.observers),this},_validateHandler:function(a,b,c){return c=b===this.mirroring?c:{silent:c&&c.silent},this.validate(a,c)},_validateAllHandler:function(a,b){return this.validateAll(a,b)},mirror:function(a){return this.mirroring&&this.mirroring===a?this:(this.unmirror(),this.mirroring=a,this.reset([],{silent:!0}),this.observe(a),this)},unmirror:function(){this.mirroring&&(this.unobserve(this.mirroring),delete this.mirroring)},more:function(a){var b=jQuery.Deferred(),c=this.mirroring,d=this;return c&&c.more?(c.more(a).done(function(){this===d.mirroring&&b.resolveWith(this)}),b.promise()):b.resolveWith(this).promise()},hasMore:function(){return!!this.mirroring&&this.mirroring.hasMore()},parse:function(a,b){return _.isArray(a)||(a=[a]),_.map(a,function(a){var c,d,e;return a instanceof Backbone.Model?(c=a.get("id"),a=a.attributes):c=a.id,d=wp.media.model.Attachment.get(c),e=d.parse(a,b),_.isEqual(d.attributes,e)||d.set(e),d})},_requery:function(a){var b;this.props.get("query")&&(b=this.props.toJSON(),b.cache=!0!==a,this.mirror(wp.media.model.Query.get(b)))},saveMenuOrder:function(){if("menuOrder"===this.props.get("orderby")){var a=this.chain().filter(function(a){return!_.isUndefined(a.id)}).map(function(a,b){return b+=1,a.set("menuOrder",b),[a.id,b]}).object().value();if(!_.isEmpty(a))return wp.media.post("save-attachment-order",{nonce:wp.media.model.settings.post.nonce,post_id:wp.media.model.settings.post.id,attachments:a})}}},{comparator:function(a,b,c){var d=this.props.get("orderby"),e=this.props.get("order")||"DESC",f=a.cid,g=b.cid;return a=a.get(d),b=b.get(d),"date"!==d&&"modified"!==d||(a=a||new Date,b=b||new Date),c&&c.ties&&(f=g=null),"DESC"===e?wp.media.compare(a,b,f,g):wp.media.compare(b,a,g,f)},filters:{search:function(a){return!this.props.get("search")||_.any(["title","filename","description","caption","name"],function(b){var c=a.get(b);return c&&-1!==c.search(this.props.get("search"))},this)},type:function(a){var b,c,d=this.props.get("type"),e=a.toJSON();return!(d&&(!_.isArray(d)||d.length))||(b=e.mime||e.file&&e.file.type||"",c=_.isArray(d)?_.find(d,function(a){return-1!==b.indexOf(a)}):-1!==b.indexOf(d))},uploadedTo:function(a){var b=this.props.get("uploadedTo");return!!_.isUndefined(b)||b===a.get("uploadedTo")},status:function(a){var b=this.props.get("status");return!!_.isUndefined(b)||b===a.get("status")}}});a.exports=c},23:function(a,b){var c,d=wp.media.model.Attachments;c=d.extend({initialize:function(a,b){var c;b=b||{},d.prototype.initialize.apply(this,arguments),this.args=b.args,this._hasMore=!0,this.created=new Date,this.filters.order=function(a){var b=this.props.get("orderby"),c=this.props.get("order");return!this.comparator||(this.length?1!==this.comparator(a,this.last(),{ties:!0}):"DESC"!==c||"date"!==b&&"modified"!==b?"ASC"===c&&"menuOrder"===b&&0===a.get(b):a.get(b)>=this.created)},c=["s","order","orderby","posts_per_page","post_mime_type","post_parent"],wp.Uploader&&_(this.args).chain().keys().difference(c).isEmpty().value()&&this.observe(wp.Uploader.queue)},hasMore:function(){return this._hasMore},more:function(a){var b=this;return this._more&&"pending"===this._more.state()?this._more:this.hasMore()?(a=a||{},a.remove=!1,this._more=this.fetch(a).done(function(a){(_.isEmpty(a)||-1===this.args.posts_per_page||a.length<this.args.posts_per_page)&&(b._hasMore=!1)})):jQuery.Deferred().resolveWith(this).promise()},sync:function(a,b,c){var e,f;return"read"===a?(c=c||{},c.context=this,c.data=_.extend(c.data||{},{action:"query-attachments",post_id:wp.media.model.settings.post.id}),e=_.clone(this.args),-1!==e.posts_per_page&&(e.paged=Math.round(this.length/e.posts_per_page)+1),c.data.query=e,wp.media.ajax(c)):(f=d.prototype.sync?d.prototype:Backbone,f.sync.apply(this,arguments))}},{defaultProps:{orderby:"date",order:"DESC"},defaultArgs:{posts_per_page:40},orderby:{allowed:["name","author","date","title","modified","uploadedTo","id","post__in","menuOrder"],valuemap:{id:"ID",uploadedTo:"parent",menuOrder:"menu_order ID"}},propmap:{search:"s",type:"post_mime_type",perPage:"posts_per_page",menuOrder:"menu_order",uploadedTo:"post_parent",status:"post_status",include:"post__in",exclude:"post__not_in"},get:function(){var a=[];return function(b,d){var e,f={},g=c.orderby,h=c.defaultProps,i=!!b.cache||_.isUndefined(b.cache);return delete b.query,delete b.cache,_.defaults(b,h),b.order=b.order.toUpperCase(),"DESC"!==b.order&&"ASC"!==b.order&&(b.order=h.order.toUpperCase()),_.contains(g.allowed,b.orderby)||(b.orderby=h.orderby),_.each(["include","exclude"],function(a){b[a]&&!_.isArray(b[a])&&(b[a]=[b[a]])}),_.each(b,function(a,b){_.isNull(a)||(f[c.propmap[b]||b]=a)}),_.defaults(f,c.defaultArgs),f.orderby=g.valuemap[b.orderby]||b.orderby,i?e=_.find(a,function(a){return _.isEqual(a.args,f)}):a=[],e||(e=new c([],_.extend(d||{},{props:b,args:f})),a.push(e)),e}}()}),a.exports=c},24:function(a,b){var c=Backbone.Model.extend({initialize:function(a){var b=wp.media.model.Attachment;this.attachment=!1,a.attachment_id&&(this.attachment=b.get(a.attachment_id),this.attachment.get("url")?(this.dfd=jQuery.Deferred(),this.dfd.resolve()):this.dfd=this.attachment.fetch(),this.bindAttachmentListeners()),this.on("change:link",this.updateLinkUrl,this),this.on("change:size",this.updateSize,this),this.setLinkTypeFromUrl(),this.setAspectRatio(),this.set("originalUrl",a.url)},bindAttachmentListeners:function(){this.listenTo(this.attachment,"sync",this.setLinkTypeFromUrl),this.listenTo(this.attachment,"sync",this.setAspectRatio),this.listenTo(this.attachment,"change",this.updateSize)},changeAttachment:function(a,b){this.stopListening(this.attachment),this.attachment=a,this.bindAttachmentListeners(),this.set("attachment_id",this.attachment.get("id")),this.set("caption",this.attachment.get("caption")),this.set("alt",this.attachment.get("alt")),this.set("size",b.get("size")),this.set("align",b.get("align")),this.set("link",b.get("link")),this.updateLinkUrl(),this.updateSize()},setLinkTypeFromUrl:function(){var a,b=this.get("linkUrl");return b?(a="custom",this.attachment?this.attachment.get("url")===b?a="file":this.attachment.get("link")===b&&(a="post"):this.get("url")===b&&(a="file"),void this.set("link",a)):void this.set("link","none")},updateLinkUrl:function(){var a,b=this.get("link");switch(b){case"file":a=this.attachment?this.attachment.get("url"):this.get("url"),this.set("linkUrl",a);break;case"post":this.set("linkUrl",this.attachment.get("link"));break;case"none":this.set("linkUrl","")}},updateSize:function(){var a;if(this.attachment){if("custom"===this.get("size"))return this.set("width",this.get("customWidth")),this.set("height",this.get("customHeight")),void this.set("url",this.get("originalUrl"));a=this.attachment.get("sizes")[this.get("size")],a&&(this.set("url",a.url),this.set("width",a.width),this.set("height",a.height))}},setAspectRatio:function(){var a;return this.attachment&&this.attachment.get("sizes")&&(a=this.attachment.get("sizes").full)?void this.set("aspectRatio",a.width/a.height):void this.set("aspectRatio",this.get("customWidth")/this.get("customHeight"))}});a.exports=c},25:function(a,b){var c,d=wp.media.model.Attachments;c=d.extend({initialize:function(a,b){d.prototype.initialize.apply(this,arguments),this.multiple=b&&b.multiple,this.on("add remove reset",_.bind(this.single,this,!1))},add:function(a,b){return this.multiple||this.remove(this.models),d.prototype.add.call(this,a,b)},single:function(a){var b=this._single;return a&&(this._single=a),this._single&&!this.get(this._single.cid)&&delete this._single,this._single=this._single||this.last(),this._single!==b&&(b&&(b.trigger("selection:unsingle",b,this),this.get(b.cid)||this.trigger("selection:unsingle",b,this)),this._single&&this._single.trigger("selection:single",this._single,this)),this._single}}),a.exports=c}});
\ No newline at end of file
+!function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a["default"]}:function(){return a};return b.d(c,"a",c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p="",b(b.s=20)}({20:function(a,b,c){var d,e,f,g,h=jQuery;window.wp=window.wp||{},g=wp.media=function(a){var b,c=g.view.MediaFrame;if(c)return a=_.defaults(a||{},{frame:"select"}),"select"===a.frame&&c.Select?b=new c.Select(a):"post"===a.frame&&c.Post?b=new c.Post(a):"manage"===a.frame&&c.Manage?b=new c.Manage(a):"image"===a.frame&&c.ImageDetails?b=new c.ImageDetails(a):"audio"===a.frame&&c.AudioDetails?b=new c.AudioDetails(a):"video"===a.frame&&c.VideoDetails?b=new c.VideoDetails(a):"edit-attachments"===a.frame&&c.EditAttachments&&(b=new c.EditAttachments(a)),delete a.frame,g.frame=b,b},_.extend(g,{model:{},view:{},controller:{},frames:{}}),f=g.model.l10n=window._wpMediaModelsL10n||{},g.model.settings=f.settings||{},delete f.settings,d=g.model.Attachment=c(21),e=g.model.Attachments=c(22),g.model.Query=c(23),g.model.PostImage=c(24),g.model.Selection=c(25),g.compare=function(a,b,c,d){return _.isEqual(a,b)?c===d?0:c>d?-1:1:a>b?-1:1},_.extend(g,{template:wp.template,post:wp.ajax.post,ajax:wp.ajax.send,fit:function(a){var b,c=a.width,d=a.height,e=a.maxWidth,f=a.maxHeight;return _.isUndefined(e)||_.isUndefined(f)?_.isUndefined(f)?b="width":_.isUndefined(e)&&d>f&&(b="height"):b=c/d>e/f?"width":"height","width"===b&&c>e?{width:e,height:Math.round(e*d/c)}:"height"===b&&d>f?{width:Math.round(f*c/d),height:f}:{width:c,height:d}},truncate:function(a,b,c){return b=b||30,c=c||"…",a.length<=b?a:a.substr(0,b/2)+c+a.substr(-1*b/2)}}),g.attachment=function(a){return d.get(a)},e.all=new e,g.query=function(a){return new e(null,{props:_.extend(_.defaults(a||{},{orderby:"date"}),{query:!0})})},h(window).on("unload",function(){window.wp=null})},21:function(a,b){var c,d=Backbone.$;c=Backbone.Model.extend({sync:function(a,b,c){return _.isUndefined(this.id)?d.Deferred().rejectWith(this).promise():"read"===a?(c=c||{},c.context=this,c.data=_.extend(c.data||{},{action:"get-attachment",id:this.id}),wp.media.ajax(c)):"update"===a?this.get("nonces")&&this.get("nonces").update?(c=c||{},c.context=this,c.data=_.extend(c.data||{},{action:"save-attachment",id:this.id,nonce:this.get("nonces").update,post_id:wp.media.model.settings.post.id}),b.hasChanged()&&(c.data.changes={},_.each(b.changed,function(a,b){c.data.changes[b]=this.get(b)},this)),wp.media.ajax(c)):d.Deferred().rejectWith(this).promise():"delete"===a?(c=c||{},c.wait||(this.destroyed=!0),c.context=this,c.data=_.extend(c.data||{},{action:"delete-post",id:this.id,_wpnonce:this.get("nonces")["delete"]}),wp.media.ajax(c).done(function(){this.destroyed=!0}).fail(function(){this.destroyed=!1})):Backbone.Model.prototype.sync.apply(this,arguments)},parse:function(a){return a?(a.date=new Date(a.date),a.modified=new Date(a.modified),a):a},saveCompat:function(a,b){var c=this;return this.get("nonces")&&this.get("nonces").update?wp.media.post("save-attachment-compat",_.defaults({id:this.id,nonce:this.get("nonces").update,post_id:wp.media.model.settings.post.id},a)).done(function(a,d,e){c.set(c.parse(a,e),b)}):d.Deferred().rejectWith(this).promise()}},{create:function(a){var b=wp.media.model.Attachments;return b.all.push(a)},get:_.memoize(function(a,b){var c=wp.media.model.Attachments;return c.all.push(b||{id:a})})}),a.exports=c},22:function(a,b){var c=Backbone.Collection.extend({model:wp.media.model.Attachment,initialize:function(a,b){b=b||{},this.props=new Backbone.Model,this.filters=b.filters||{},this.props.on("change",this._changeFilteredProps,this),this.props.on("change:order",this._changeOrder,this),this.props.on("change:orderby",this._changeOrderby,this),this.props.on("change:query",this._changeQuery,this),this.props.set(_.defaults(b.props||{})),b.observe&&this.observe(b.observe)},_changeOrder:function(){this.comparator&&this.sort()},_changeOrderby:function(a,b){this.comparator&&this.comparator!==c.comparator||(b&&"post__in"!==b?this.comparator=c.comparator:delete this.comparator)},_changeQuery:function(a,b){b?(this.props.on("change",this._requery,this),this._requery()):this.props.off("change",this._requery,this)},_changeFilteredProps:function(a){if(!this.props.get("query")){var b=_.chain(a.changed).map(function(b,d){var e=c.filters[d],f=a.get(d);if(e){if(f&&!this.filters[d])this.filters[d]=e;else{if(f||this.filters[d]!==e)return;delete this.filters[d]}return!0}},this).any().value();b&&(this._source||(this._source=new c(this.models)),this.reset(this._source.filter(this.validator,this)))}},validateDestroyed:!1,validator:function(a){return!(!_.isUndefined(a.attributes.context)&&""!==a.attributes.context)&&(!(!this.validateDestroyed&&a.destroyed)&&_.all(this.filters,function(b){return!!b.call(this,a)},this))},validate:function(a,b){var c=this.validator(a),d=!!this.get(a.cid);return!c&&d?this.remove(a,b):c&&!d&&this.add(a,b),this},validateAll:function(a,b){return b=b||{},_.each(a.models,function(a){this.validate(a,{silent:!0})},this),b.silent||this.trigger("reset",this,b),this},observe:function(a){return this.observers=this.observers||[],this.observers.push(a),a.on("add change remove",this._validateHandler,this),a.on("reset",this._validateAllHandler,this),this.validateAll(a),this},unobserve:function(a){return a?(a.off(null,null,this),this.observers=_.without(this.observers,a)):(_.each(this.observers,function(a){a.off(null,null,this)},this),delete this.observers),this},_validateHandler:function(a,b,c){return c=b===this.mirroring?c:{silent:c&&c.silent},this.validate(a,c)},_validateAllHandler:function(a,b){return this.validateAll(a,b)},mirror:function(a){return this.mirroring&&this.mirroring===a?this:(this.unmirror(),this.mirroring=a,this.reset([],{silent:!0}),this.observe(a),this)},unmirror:function(){this.mirroring&&(this.unobserve(this.mirroring),delete this.mirroring)},more:function(a){var b=jQuery.Deferred(),c=this.mirroring,d=this;return c&&c.more?(c.more(a).done(function(){this===d.mirroring&&b.resolveWith(this)}),b.promise()):b.resolveWith(this).promise()},hasMore:function(){return!!this.mirroring&&this.mirroring.hasMore()},parse:function(a,b){return _.isArray(a)||(a=[a]),_.map(a,function(a){var c,d,e;return a instanceof Backbone.Model?(c=a.get("id"),a=a.attributes):c=a.id,d=wp.media.model.Attachment.get(c),e=d.parse(a,b),_.isEqual(d.attributes,e)||d.set(e),d})},_requery:function(a){var b;this.props.get("query")&&(b=this.props.toJSON(),b.cache=!0!==a,this.mirror(wp.media.model.Query.get(b)))},saveMenuOrder:function(){if("menuOrder"===this.props.get("orderby")){var a=this.chain().filter(function(a){return!_.isUndefined(a.id)}).map(function(a,b){return b+=1,a.set("menuOrder",b),[a.id,b]}).object().value();if(!_.isEmpty(a))return wp.media.post("save-attachment-order",{nonce:wp.media.model.settings.post.nonce,post_id:wp.media.model.settings.post.id,attachments:a})}}},{comparator:function(a,b,c){var d=this.props.get("orderby"),e=this.props.get("order")||"DESC",f=a.cid,g=b.cid;return a=a.get(d),b=b.get(d),"date"!==d&&"modified"!==d||(a=a||new Date,b=b||new Date),c&&c.ties&&(f=g=null),"DESC"===e?wp.media.compare(a,b,f,g):wp.media.compare(b,a,g,f)},filters:{search:function(a){return!this.props.get("search")||_.any(["title","filename","description","caption","name"],function(b){var c=a.get(b);return c&&-1!==c.search(this.props.get("search"))},this)},type:function(a){var b,c,d=this.props.get("type"),e=a.toJSON();return!(d&&(!_.isArray(d)||d.length))||(b=e.mime||e.file&&e.file.type||"",c=_.isArray(d)?_.find(d,function(a){return-1!==b.indexOf(a)}):-1!==b.indexOf(d))},uploadedTo:function(a){var b=this.props.get("uploadedTo");return!!_.isUndefined(b)||b===a.get("uploadedTo")},status:function(a){var b=this.props.get("status");return!!_.isUndefined(b)||b===a.get("status")}}});a.exports=c},23:function(a,b){var c,d=wp.media.model.Attachments;c=d.extend({initialize:function(a,b){var c;b=b||{},d.prototype.initialize.apply(this,arguments),this.args=b.args,this._hasMore=!0,this.created=new Date,this.filters.order=function(a){var b=this.props.get("orderby"),c=this.props.get("order");return!this.comparator||(this.length?1!==this.comparator(a,this.last(),{ties:!0}):"DESC"!==c||"date"!==b&&"modified"!==b?"ASC"===c&&"menuOrder"===b&&0===a.get(b):a.get(b)>=this.created)},c=["s","order","orderby","posts_per_page","post_mime_type","post_parent","author"],wp.Uploader&&_(this.args).chain().keys().difference(c).isEmpty().value()&&this.observe(wp.Uploader.queue)},hasMore:function(){return this._hasMore},more:function(a){var b=this;return this._more&&"pending"===this._more.state()?this._more:this.hasMore()?(a=a||{},a.remove=!1,this._more=this.fetch(a).done(function(a){(_.isEmpty(a)||-1===this.args.posts_per_page||a.length<this.args.posts_per_page)&&(b._hasMore=!1)})):jQuery.Deferred().resolveWith(this).promise()},sync:function(a,b,c){var e,f;return"read"===a?(c=c||{},c.context=this,c.data=_.extend(c.data||{},{action:"query-attachments",post_id:wp.media.model.settings.post.id}),e=_.clone(this.args),-1!==e.posts_per_page&&(e.paged=Math.round(this.length/e.posts_per_page)+1),c.data.query=e,wp.media.ajax(c)):(f=d.prototype.sync?d.prototype:Backbone,f.sync.apply(this,arguments))}},{defaultProps:{orderby:"date",order:"DESC"},defaultArgs:{posts_per_page:40},orderby:{allowed:["name","author","date","title","modified","uploadedTo","id","post__in","menuOrder"],valuemap:{id:"ID",uploadedTo:"parent",menuOrder:"menu_order ID"}},propmap:{search:"s",type:"post_mime_type",perPage:"posts_per_page",menuOrder:"menu_order",uploadedTo:"post_parent",status:"post_status",include:"post__in",exclude:"post__not_in",author:"author"},get:function(){var a=[];return function(b,d){var e,f={},g=c.orderby,h=c.defaultProps,i=!!b.cache||_.isUndefined(b.cache);return delete b.query,delete b.cache,_.defaults(b,h),b.order=b.order.toUpperCase(),"DESC"!==b.order&&"ASC"!==b.order&&(b.order=h.order.toUpperCase()),_.contains(g.allowed,b.orderby)||(b.orderby=h.orderby),_.each(["include","exclude"],function(a){b[a]&&!_.isArray(b[a])&&(b[a]=[b[a]])}),_.each(b,function(a,b){_.isNull(a)||(f[c.propmap[b]||b]=a)}),_.defaults(f,c.defaultArgs),f.orderby=g.valuemap[b.orderby]||b.orderby,i?e=_.find(a,function(a){return _.isEqual(a.args,f)}):a=[],e||(e=new c([],_.extend(d||{},{props:b,args:f})),a.push(e)),e}}()}),a.exports=c},24:function(a,b){var c=Backbone.Model.extend({initialize:function(a){var b=wp.media.model.Attachment;this.attachment=!1,a.attachment_id&&(this.attachment=b.get(a.attachment_id),this.attachment.get("url")?(this.dfd=jQuery.Deferred(),this.dfd.resolve()):this.dfd=this.attachment.fetch(),this.bindAttachmentListeners()),this.on("change:link",this.updateLinkUrl,this),this.on("change:size",this.updateSize,this),this.setLinkTypeFromUrl(),this.setAspectRatio(),this.set("originalUrl",a.url)},bindAttachmentListeners:function(){this.listenTo(this.attachment,"sync",this.setLinkTypeFromUrl),this.listenTo(this.attachment,"sync",this.setAspectRatio),this.listenTo(this.attachment,"change",this.updateSize)},changeAttachment:function(a,b){this.stopListening(this.attachment),this.attachment=a,this.bindAttachmentListeners(),this.set("attachment_id",this.attachment.get("id")),this.set("caption",this.attachment.get("caption")),this.set("alt",this.attachment.get("alt")),this.set("size",b.get("size")),this.set("align",b.get("align")),this.set("link",b.get("link")),this.updateLinkUrl(),this.updateSize()},setLinkTypeFromUrl:function(){var a,b=this.get("linkUrl");return b?(a="custom",this.attachment?this.attachment.get("url")===b?a="file":this.attachment.get("link")===b&&(a="post"):this.get("url")===b&&(a="file"),void this.set("link",a)):void this.set("link","none")},updateLinkUrl:function(){var a,b=this.get("link");switch(b){case"file":a=this.attachment?this.attachment.get("url"):this.get("url"),this.set("linkUrl",a);break;case"post":this.set("linkUrl",this.attachment.get("link"));break;case"none":this.set("linkUrl","")}},updateSize:function(){var a;if(this.attachment){if("custom"===this.get("size"))return this.set("width",this.get("customWidth")),this.set("height",this.get("customHeight")),void this.set("url",this.get("originalUrl"));a=this.attachment.get("sizes")[this.get("size")],a&&(this.set("url",a.url),this.set("width",a.width),this.set("height",a.height))}},setAspectRatio:function(){var a;return this.attachment&&this.attachment.get("sizes")&&(a=this.attachment.get("sizes").full)?void this.set("aspectRatio",a.width/a.height):void this.set("aspectRatio",this.get("customWidth")/this.get("customHeight"))}});a.exports=c},25:function(a,b){var c,d=wp.media.model.Attachments;c=d.extend({initialize:function(a,b){d.prototype.initialize.apply(this,arguments),this.multiple=b&&b.multiple,this.on("add remove reset",_.bind(this.single,this,!1))},add:function(a,b){return this.multiple||this.remove(this.models),d.prototype.add.call(this,a,b)},single:function(a){var b=this._single;return a&&(this._single=a),this._single&&!this.get(this._single.cid)&&delete this._single,this._single=this._single||this.last(),this._single!==b&&(b&&(b.trigger("selection:unsingle",b,this),this.get(b.cid)||this.trigger("selection:unsingle",b,this)),this._single&&this._single.trigger("selection:single",this._single,this)),this._single}}),a.exports=c}});
\ No newline at end of file
createFilters: function() {
var type = this.model.get('type'),
types = wp.media.view.settings.mimeTypes,
+ uid = window.userSettings ? parseInt( window.userSettings.uid, 10 ) : 0,
text;
if ( types && type ) {
props: {
uploadedTo: null,
orderby: 'date',
- order: 'DESC'
+ order: 'DESC',
+ author: null
},
priority: 10
},
props: {
uploadedTo: wp.media.view.settings.post.id,
orderby: 'menuOrder',
- order: 'ASC'
+ order: 'ASC',
+ author: null
},
priority: 20
},
props: {
uploadedTo: 0,
orderby: 'menuOrder',
- order: 'ASC'
+ order: 'ASC',
+ author: null
},
priority: 50
}
};
+
+ if ( uid ) {
+ this.filters.mine = {
+ text: l10n.mine,
+ props: {
+ orderby: 'date',
+ order: 'DESC',
+ author: uid
+ },
+ priority: 50
+ };
+ }
}
});
*/
All = wp.media.view.AttachmentFilters.extend(/** @lends wp.media.view.AttachmentFilters.All.prototype */{
createFilters: function() {
- var filters = {};
+ var filters = {},
+ uid = window.userSettings ? parseInt( window.userSettings.uid, 10 ) : 0;
_.each( wp.media.view.settings.mimeTypes || {}, function( text, key ) {
filters[ key ] = {
type: key,
uploadedTo: null,
orderby: 'date',
- order: 'DESC'
+ order: 'DESC',
+ author: null
}
};
});
type: null,
uploadedTo: null,
orderby: 'date',
- order: 'DESC'
+ order: 'DESC',
+ author: null
},
priority: 10
};
type: null,
uploadedTo: wp.media.view.settings.post.id,
orderby: 'menuOrder',
- order: 'ASC'
+ order: 'ASC',
+ author: null
},
priority: 20
};
uploadedTo: 0,
type: null,
orderby: 'menuOrder',
- order: 'ASC'
+ order: 'ASC',
+ author: null
},
priority: 50
};
+ if ( uid ) {
+ filters.mine = {
+ text: l10n.mine,
+ props: {
+ status: null,
+ type: null,
+ uploadedTo: null,
+ orderby: 'date',
+ order: 'DESC',
+ author: uid
+ },
+ priority: 50
+ };
+ }
+
if ( wp.media.view.settings.mediaTrash &&
this.controller.isModeActive( 'grid' ) ) {
status: 'trash',
type: null,
orderby: 'date',
- order: 'DESC'
+ order: 'DESC',
+ author: null
},
priority: 50
};
!function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={i:d,l:!1,exports:{}};return a[d].call(e.exports,e,e.exports,b),e.l=!0,e.exports}var c={};return b.m=a,b.c=c,b.d=function(a,c,d){b.o(a,c)||Object.defineProperty(a,c,{configurable:!1,enumerable:!0,get:d})},b.n=function(a){var c=a&&a.__esModule?function(){return a["default"]}:function(){return a};return b.d(c,"a",c),c},b.o=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)},b.p="",b(b.s=26)}(Array(26).concat([function(a,b,c){var d,e=wp.media,f=jQuery;e.isTouchDevice="ontouchend"in document,d=e.view.l10n=window._wpMediaViewsL10n||{},e.view.settings=d.settings||{},delete d.settings,e.model.settings.post=e.view.settings.post,f.support.transition=function(){var a,b=document.documentElement.style,c={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};return a=_.find(_.keys(c),function(a){return!_.isUndefined(b[a])}),a&&{end:c[a]}}(),e.events=_.extend({},Backbone.Events),e.transition=function(a,b){var c=f.Deferred();return b=b||2e3,f.support.transition?(a instanceof f||(a=f(a)),a.first().one(f.support.transition.end,c.resolve),_.delay(c.resolve,b)):c.resolve(),c.promise()},e.controller.Region=c(27),e.controller.StateMachine=c(28),e.controller.State=c(29),e.selectionSync=c(30),e.controller.Library=c(31),e.controller.ImageDetails=c(32),e.controller.GalleryEdit=c(33),e.controller.GalleryAdd=c(34),e.controller.CollectionEdit=c(35),e.controller.CollectionAdd=c(36),e.controller.FeaturedImage=c(37),e.controller.ReplaceImage=c(38),e.controller.EditImage=c(39),e.controller.MediaLibrary=c(40),e.controller.Embed=c(41),e.controller.Cropper=c(42),e.controller.CustomizeImageCropper=c(43),e.controller.SiteIconCropper=c(44),e.View=c(45),e.view.Frame=c(46),e.view.MediaFrame=c(47),e.view.MediaFrame.Select=c(48),e.view.MediaFrame.Post=c(49),e.view.MediaFrame.ImageDetails=c(50),e.view.Modal=c(51),e.view.FocusManager=c(52),e.view.UploaderWindow=c(53),e.view.EditorUploader=c(54),e.view.UploaderInline=c(55),e.view.UploaderStatus=c(56),e.view.UploaderStatusError=c(57),e.view.Toolbar=c(58),e.view.Toolbar.Select=c(59),e.view.Toolbar.Embed=c(60),e.view.Button=c(61),e.view.ButtonGroup=c(62),e.view.PriorityList=c(63),e.view.MenuItem=c(64),e.view.Menu=c(65),e.view.RouterItem=c(66),e.view.Router=c(67),e.view.Sidebar=c(68),e.view.Attachment=c(69),e.view.Attachment.Library=c(70),e.view.Attachment.EditLibrary=c(71),e.view.Attachments=c(72),e.view.Search=c(73),e.view.AttachmentFilters=c(74),e.view.DateFilter=c(75),e.view.AttachmentFilters.Uploaded=c(76),e.view.AttachmentFilters.All=c(77),e.view.AttachmentsBrowser=c(78),e.view.Selection=c(79),e.view.Attachment.Selection=c(80),e.view.Attachments.Selection=c(81),e.view.Attachment.EditSelection=c(82),e.view.Settings=c(83),e.view.Settings.AttachmentDisplay=c(84),e.view.Settings.Gallery=c(85),e.view.Settings.Playlist=c(86),e.view.Attachment.Details=c(87),e.view.AttachmentCompat=c(88),e.view.Iframe=c(89),e.view.Embed=c(90),e.view.Label=c(91),e.view.EmbedUrl=c(92),e.view.EmbedLink=c(93),e.view.EmbedImage=c(94),e.view.ImageDetails=c(95),e.view.Cropper=c(96),e.view.SiteIconCropper=c(97),e.view.SiteIconPreview=c(98),e.view.EditImage=c(99),e.view.Spinner=c(100)},function(a,b){var c=function(a){_.extend(this,_.pick(a||{},"id","view","selector"))};c.extend=Backbone.Model.extend,_.extend(c.prototype,{mode:function(a){return a?a===this._mode?this:(this.trigger("deactivate"),this._mode=a,this.render(a),this.trigger("activate"),this):this._mode},render:function(a){if(a&&a!==this._mode)return this.mode(a);var b,c={view:null};return this.trigger("create",c),b=c.view,this.trigger("render",b),b&&this.set(b),this},get:function(){return this.view.views.first(this.selector)},set:function(a,b){return b&&(b.add=!1),this.view.views.set(this.selector,a,b)},trigger:function(a){var b,c;if(this._mode)return c=_.toArray(arguments),b=this.id+":"+a,c[0]=b+":"+this._mode,this.view.trigger.apply(this.view,c),c[0]=b,this.view.trigger.apply(this.view,c),this}}),a.exports=c},function(a,b){var c=function(a){this.states=new Backbone.Collection(a)};c.extend=Backbone.Model.extend,_.extend(c.prototype,Backbone.Events,{state:function(a){return this.states=this.states||new Backbone.Collection,a=a||this._state,a&&!this.states.get(a)&&this.states.add({id:a}),this.states.get(a)},setState:function(a){var b=this.state();return b&&a===b.id||!this.states||!this.states.get(a)?this:(b&&(b.trigger("deactivate"),this._lastState=b.id),this._state=a,this.state().trigger("activate"),this)},lastState:function(){if(this._lastState)return this.state(this._lastState)}}),_.each(["on","off","trigger"],function(a){c.prototype[a]=function(){return this.states=this.states||new Backbone.Collection,this.states[a].apply(this.states,arguments),this}}),a.exports=c},function(a,b){var c=Backbone.Model.extend({constructor:function(){this.on("activate",this._preActivate,this),this.on("activate",this.activate,this),this.on("activate",this._postActivate,this),this.on("deactivate",this._deactivate,this),this.on("deactivate",this.deactivate,this),this.on("reset",this.reset,this),this.on("ready",this._ready,this),this.on("ready",this.ready,this),Backbone.Model.apply(this,arguments),this.on("change:menu",this._updateMenu,this)},ready:function(){},activate:function(){},deactivate:function(){},reset:function(){},_ready:function(){this._updateMenu()},_preActivate:function(){this.active=!0},_postActivate:function(){this.on("change:menu",this._menu,this),this.on("change:titleMode",this._title,this),this.on("change:content",this._content,this),this.on("change:toolbar",this._toolbar,this),this.frame.on("title:render:default",this._renderTitle,this),this._title(),this._menu(),this._toolbar(),this._content(),this._router()},_deactivate:function(){this.active=!1,this.frame.off("title:render:default",this._renderTitle,this),this.off("change:menu",this._menu,this),this.off("change:titleMode",this._title,this),this.off("change:content",this._content,this),this.off("change:toolbar",this._toolbar,this)},_title:function(){this.frame.title.render(this.get("titleMode")||"default")},_renderTitle:function(a){a.$el.text(this.get("title")||"")},_router:function(){var a,b=this.frame.router,c=this.get("router");this.frame.$el.toggleClass("hide-router",!c),c&&(this.frame.router.render(c),a=b.get(),a&&a.select&&a.select(this.frame.content.mode()))},_menu:function(){var a,b=this.frame.menu,c=this.get("menu");this.frame.$el.toggleClass("hide-menu",!c),c&&(b.mode(c),a=b.get(),a&&a.select&&a.select(this.id))},_updateMenu:function(){var a=this.previous("menu"),b=this.get("menu");a&&this.frame.off("menu:render:"+a,this._renderMenu,this),b&&this.frame.on("menu:render:"+b,this._renderMenu,this)},_renderMenu:function(a){var b=this.get("menuItem"),c=this.get("title"),d=this.get("priority");!b&&c&&(b={text:c},d&&(b.priority=d)),b&&a.set(this.id,b)}});_.each(["toolbar","content"],function(a){c.prototype["_"+a]=function(){var b=this.get(a);b&&this.frame[a].render(b)}}),a.exports=c},function(a,b){var c={syncSelection:function(){var a=this.get("selection"),b=this.frame._selection;this.get("syncSelection")&&b&&a&&(a.multiple&&(a.reset([],{silent:!0}),a.validateAll(b.attachments),b.difference=_.difference(b.attachments.models,a.models)),a.single(b.single))},recordSelection:function(){var a=this.get("selection"),b=this.frame._selection;this.get("syncSelection")&&b&&a&&(a.multiple?(b.attachments.reset(a.toArray().concat(b.difference)),b.difference=[]):b.attachments.add(a.toArray()),b.single=a._single)}};a.exports=c},function(a,b){var c,d=wp.media.view.l10n,e=window.getUserSetting,f=window.setUserSetting;c=wp.media.controller.State.extend({defaults:{id:"library",title:d.mediaLibraryTitle,multiple:!1,content:"upload",menu:"default",router:"browse",toolbar:"select",searchable:!0,filterable:!1,sortable:!0,autoSelect:!0,describe:!1,contentUserSetting:!0,syncSelection:!0},initialize:function(){var a,b=this.get("selection");this.get("library")||this.set("library",wp.media.query()),b instanceof wp.media.model.Selection||(a=b,a||(a=this.get("library").props.toJSON(),a=_.omit(a,"orderby","query")),this.set("selection",new wp.media.model.Selection(null,{multiple:this.get("multiple"),props:a}))),this.resetDisplays()},activate:function(){this.syncSelection(),wp.Uploader.queue.on("add",this.uploading,this),this.get("selection").on("add remove reset",this.refreshContent,this),this.get("router")&&this.get("contentUserSetting")&&(this.frame.on("content:activate",this.saveContentMode,this),this.set("content",e("libraryContent",this.get("content"))))},deactivate:function(){this.recordSelection(),this.frame.off("content:activate",this.saveContentMode,this),this.get("selection").off(null,null,this),wp.Uploader.queue.off(null,null,this)},reset:function(){this.get("selection").reset(),this.resetDisplays(),this.refreshContent()},resetDisplays:function(){var a=wp.media.view.settings.defaultProps;this._displays=[],this._defaultDisplaySettings={align:e("align",a.align)||"none",size:e("imgsize",a.size)||"medium",link:e("urlbutton",a.link)||"none"}},display:function(a){var b=this._displays;return b[a.cid]||(b[a.cid]=new Backbone.Model(this.defaultDisplaySettings(a))),b[a.cid]},defaultDisplaySettings:function(a){var b=_.clone(this._defaultDisplaySettings);return(b.canEmbed=this.canEmbed(a))?b.link="embed":this.isImageAttachment(a)||"none"!==b.link||(b.link="file"),b},isImageAttachment:function(a){return a.get("uploading")?/\.(jpe?g|png|gif)$/i.test(a.get("filename")):"image"===a.get("type")},canEmbed:function(a){if(!a.get("uploading")){var b=a.get("type");if("audio"!==b&&"video"!==b)return!1}return _.contains(wp.media.view.settings.embedExts,a.get("filename").split(".").pop())},refreshContent:function(){var a=this.get("selection"),b=this.frame,c=b.router.get(),d=b.content.mode();this.active&&!a.length&&c&&!c.get(d)&&this.frame.content.render(this.get("content"))},uploading:function(a){var b=this.frame.content;"upload"===b.mode()&&this.frame.content.mode("browse"),this.get("autoSelect")&&(this.get("selection").add(a),this.frame.trigger("library:selection:add"))},saveContentMode:function(){if("browse"===this.get("router")){var a=this.frame.content.mode(),b=this.frame.router.get();b&&b.get(a)&&f("libraryContent",a)}}}),_.extend(c.prototype,wp.media.selectionSync),a.exports=c},function(a,b){var c,d=wp.media.controller.State,e=wp.media.controller.Library,f=wp.media.view.l10n;c=d.extend({defaults:_.defaults({id:"image-details",title:f.imageDetailsTitle,content:"image-details",menu:!1,router:!1,toolbar:"image-details",editing:!1,priority:60},e.prototype.defaults),initialize:function(a){this.image=a.image,d.prototype.initialize.apply(this,arguments)},activate:function(){this.frame.modal.$el.addClass("image-details")}}),a.exports=c},function(a,b){var c,d=wp.media.controller.Library,e=wp.media.view.l10n;c=d.extend({defaults:{id:"gallery-edit",title:e.editGalleryTitle,multiple:!1,searchable:!1,sortable:!0,date:!1,display:!1,content:"browse",toolbar:"gallery-edit",describe:!0,displaySettings:!0,dragInfo:!0,idealColumnWidth:170,editing:!1,priority:60,syncSelection:!1},initialize:function(){this.get("library")||this.set("library",new wp.media.model.Selection),this.get("AttachmentView")||this.set("AttachmentView",wp.media.view.Attachment.EditLibrary),d.prototype.initialize.apply(this,arguments)},activate:function(){var a=this.get("library");a.props.set("type","image"),this.get("library").observe(wp.Uploader.queue),this.frame.on("content:render:browse",this.gallerySettings,this),d.prototype.activate.apply(this,arguments)},deactivate:function(){this.get("library").unobserve(wp.Uploader.queue),this.frame.off("content:render:browse",this.gallerySettings,this),d.prototype.deactivate.apply(this,arguments)},gallerySettings:function(a){if(this.get("displaySettings")){var b=this.get("library");b&&a&&(b.gallery=b.gallery||new Backbone.Model,a.sidebar.set({gallery:new wp.media.view.Settings.Gallery({controller:this,model:b.gallery,priority:40})}),a.toolbar.set("reverse",{text:e.reverseOrder,priority:80,click:function(){b.reset(b.toArray().reverse())}}))}}}),a.exports=c},function(a,b){var c,d=wp.media.model.Selection,e=wp.media.controller.Library,f=wp.media.view.l10n;c=e.extend({defaults:_.defaults({id:"gallery-library",title:f.addToGalleryTitle,multiple:"add",filterable:"uploaded",menu:"gallery",toolbar:"gallery-add",priority:100,syncSelection:!1},e.prototype.defaults),initialize:function(){this.get("library")||this.set("library",wp.media.query({type:"image"})),e.prototype.initialize.apply(this,arguments)},activate:function(){var a=this.get("library"),b=this.frame.state("gallery-edit").get("library");this.editLibrary&&this.editLibrary!==b&&a.unobserve(this.editLibrary),a.validator=function(a){return!!this.mirroring.get(a.cid)&&!b.get(a.cid)&&d.prototype.validator.apply(this,arguments)},a.reset(a.mirroring.models,{silent:!0}),a.observe(b),this.editLibrary=b,e.prototype.activate.apply(this,arguments)}}),a.exports=c},function(a,b){var c,d=wp.media.controller.Library,e=wp.media.view.l10n,f=jQuery;c=d.extend({defaults:{multiple:!1,sortable:!0,date:!1,searchable:!1,content:"browse",describe:!0,dragInfo:!0,idealColumnWidth:170,editing:!1,priority:60,SettingsView:!1,syncSelection:!1},initialize:function(){var a=this.get("collectionType");"video"===this.get("type")&&(a="video-"+a),this.set("id",a+"-edit"),this.set("toolbar",a+"-edit"),this.get("library")||this.set("library",new wp.media.model.Selection),this.get("AttachmentView")||this.set("AttachmentView",wp.media.view.Attachment.EditLibrary),d.prototype.initialize.apply(this,arguments)},activate:function(){var a=this.get("library");a.props.set("type",this.get("type")),this.get("library").observe(wp.Uploader.queue),this.frame.on("content:render:browse",this.renderSettings,this),d.prototype.activate.apply(this,arguments)},deactivate:function(){this.get("library").unobserve(wp.Uploader.queue),this.frame.off("content:render:browse",this.renderSettings,this),d.prototype.deactivate.apply(this,arguments)},renderSettings:function(a){var b=this.get("library"),c=this.get("collectionType"),d=this.get("dragInfoText"),g=this.get("SettingsView"),h={};b&&a&&(b[c]=b[c]||new Backbone.Model,h[c]=new g({controller:this,model:b[c],priority:40}),a.sidebar.set(h),d&&a.toolbar.set("dragInfo",new wp.media.View({el:f('<div class="instructions">'+d+"</div>")[0],priority:-40})),a.toolbar.set("reverse",{text:e.reverseOrder,priority:80,click:function(){b.reset(b.toArray().reverse())}}))}}),a.exports=c},function(a,b){var c,d=wp.media.model.Selection,e=wp.media.controller.Library;c=e.extend({defaults:_.defaults({multiple:"add",filterable:"uploaded",priority:100,syncSelection:!1},e.prototype.defaults),initialize:function(){var a=this.get("collectionType");"video"===this.get("type")&&(a="video-"+a),this.set("id",a+"-library"),this.set("toolbar",a+"-add"),this.set("menu",a),this.get("library")||this.set("library",wp.media.query({type:this.get("type")})),e.prototype.initialize.apply(this,arguments)},activate:function(){var a=this.get("library"),b=this.get("editLibrary"),c=this.frame.state(this.get("collectionType")+"-edit").get("library");b&&b!==c&&a.unobserve(b),a.validator=function(a){return!!this.mirroring.get(a.cid)&&!c.get(a.cid)&&d.prototype.validator.apply(this,arguments)},a.reset(a.mirroring.models,{silent:!0}),a.observe(c),this.set("editLibrary",c),e.prototype.activate.apply(this,arguments)}}),a.exports=c},function(a,b){var c,d=wp.media.model.Attachment,e=wp.media.controller.Library,f=wp.media.view.l10n;c=e.extend({defaults:_.defaults({id:"featured-image",title:f.setFeaturedImageTitle,multiple:!1,filterable:"uploaded",toolbar:"featured-image",priority:60,syncSelection:!0},e.prototype.defaults),initialize:function(){var a,b;this.get("library")||this.set("library",wp.media.query({type:"image"})),e.prototype.initialize.apply(this,arguments),a=this.get("library"),b=a.comparator,a.comparator=function(a,c){var d=!!this.mirroring.get(a.cid),e=!!this.mirroring.get(c.cid);return!d&&e?-1:d&&!e?1:b.apply(this,arguments)},a.observe(this.get("selection"))},activate:function(){this.updateSelection(),this.frame.on("open",this.updateSelection,this),e.prototype.activate.apply(this,arguments)},deactivate:function(){this.frame.off("open",this.updateSelection,this),e.prototype.deactivate.apply(this,arguments)},updateSelection:function(){var a,b=this.get("selection"),c=wp.media.view.settings.post.featuredImageId;""!==c&&-1!==c&&(a=d.get(c),a.fetch()),b.reset(a?[a]:[])}}),a.exports=c},function(a,b){var c,d=wp.media.controller.Library,e=wp.media.view.l10n;c=d.extend({defaults:_.defaults({id:"replace-image",title:e.replaceImageTitle,multiple:!1,filterable:"uploaded",toolbar:"replace",menu:!1,priority:60,syncSelection:!0},d.prototype.defaults),initialize:function(a){var b,c;this.image=a.image,this.get("library")||this.set("library",wp.media.query({type:"image"})),d.prototype.initialize.apply(this,arguments),b=this.get("library"),c=b.comparator,b.comparator=function(a,b){var d=!!this.mirroring.get(a.cid),e=!!this.mirroring.get(b.cid);return!d&&e?-1:d&&!e?1:c.apply(this,arguments)},b.observe(this.get("selection"))},activate:function(){this.updateSelection(),d.prototype.activate.apply(this,arguments)},updateSelection:function(){var a=this.get("selection"),b=this.image.attachment;a.reset(b?[b]:[])}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.controller.State.extend({defaults:{id:"edit-image",title:d.editImage,menu:!1,toolbar:"edit-image",content:"edit-image",url:""},activate:function(){this.frame.on("toolbar:render:edit-image",_.bind(this.toolbar,this))},deactivate:function(){this.frame.off("toolbar:render:edit-image")},toolbar:function(){var a=this.frame,b=a.lastState(),c=b&&b.id;a.toolbar.set(new wp.media.view.Toolbar({controller:a,items:{back:{style:"primary",text:d.back,priority:20,click:function(){c?a.setState(c):a.close()}}}}))}}),a.exports=c},function(a,b){var c,d=wp.media.controller.Library;c=d.extend({defaults:_.defaults({filterable:"uploaded",displaySettings:!1,priority:80,syncSelection:!1},d.prototype.defaults),initialize:function(a){this.media=a.media,this.type=a.type,this.set("library",wp.media.query({type:this.type})),d.prototype.initialize.apply(this,arguments)},activate:function(){wp.media.frame.lastMime&&(this.set("library",wp.media.query({type:wp.media.frame.lastMime})),delete wp.media.frame.lastMime),d.prototype.activate.apply(this,arguments)}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n,e=Backbone.$;c=wp.media.controller.State.extend({defaults:{id:"embed",title:d.insertFromUrlTitle,content:"embed",menu:"default",toolbar:"main-embed",priority:120,type:"link",url:"",metadata:{}},sensitivity:400,initialize:function(a){this.metadata=a.metadata,this.debouncedScan=_.debounce(_.bind(this.scan,this),this.sensitivity),this.props=new Backbone.Model(this.metadata||{url:""}),this.props.on("change:url",this.debouncedScan,this),this.props.on("change:url",this.refresh,this),this.on("scan",this.scanImage,this)},scan:function(){var a,b=this,c={type:"link",scanners:[]};this.props.get("url")&&this.trigger("scan",c),c.scanners.length?(a=c.scanners=e.when.apply(e,c.scanners),a.always(function(){b.get("scanners")===a&&b.set("loading",!1)})):c.scanners=null,c.loading=!!c.scanners,this.set(c)},scanImage:function(a){var b=this.frame,c=this,d=this.props.get("url"),f=new Image,g=e.Deferred();a.scanners.push(g.promise()),f.onload=function(){g.resolve(),c===b.state()&&d===c.props.get("url")&&(c.set({type:"image"}),c.props.set({width:f.width,height:f.height}))},f.onerror=g.reject,f.src=d},refresh:function(){this.frame.toolbar.get().refresh()},reset:function(){this.props.clear().set({url:""}),this.active&&this.refresh()}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.controller.State.extend({defaults:{id:"cropper",title:d.cropImage,toolbar:"crop",content:"crop",router:!1,canSkipCrop:!1,doCropArgs:{}},activate:function(){this.frame.on("content:create:crop",this.createCropContent,this),this.frame.on("close",this.removeCropper,this),this.set("selection",new Backbone.Collection(this.frame._selection.single))},deactivate:function(){this.frame.toolbar.mode("browse")},createCropContent:function(){this.cropperView=new wp.media.view.Cropper({controller:this,attachment:this.get("selection").first()}),this.cropperView.on("image-loaded",this.createCropToolbar,this),this.frame.content.set(this.cropperView)},removeCropper:function(){this.imgSelect.cancelSelection(),this.imgSelect.setOptions({remove:!0}),this.imgSelect.update(),this.cropperView.remove()},createCropToolbar:function(){var a,b;a=this.get("canSkipCrop")||!1,b={controller:this.frame,items:{insert:{style:"primary",text:d.cropImage,priority:80,requires:{library:!1,selection:!1},click:function(){var a,b=this.controller;a=b.state().get("selection").first(),a.set({cropDetails:b.state().imgSelect.getSelection()}),this.$el.text(d.cropping),this.$el.attr("disabled",!0),b.state().doCrop(a).done(function(a){b.trigger("cropped",a),b.close()}).fail(function(){b.trigger("content:error:crop")})}}}},a&&_.extend(b.items,{skip:{style:"secondary",text:d.skipCropping,priority:70,requires:{library:!1,selection:!1},click:function(){var a=this.controller.state().get("selection").first();this.controller.state().cropperView.remove(),this.controller.trigger("skippedcrop",a),this.controller.close()}}}),this.frame.toolbar.set(new wp.media.view.Toolbar(b))},doCrop:function(a){return wp.ajax.post("custom-header-crop",_.extend({},this.defaults.doCropArgs,{nonce:a.get("nonces").edit,id:a.get("id"),cropDetails:a.get("cropDetails")}))}}),a.exports=c},function(a,b){var c,d=wp.media.controller;c=d.Cropper.extend({doCrop:function(a){var b=a.get("cropDetails"),c=this.get("control"),d=b.width/b.height;return c.params.flex_width&&c.params.flex_height?(b.dst_width=b.width,b.dst_height=b.height):(b.dst_width=c.params.flex_width?c.params.height*d:c.params.width,b.dst_height=c.params.flex_height?c.params.width/d:c.params.height),wp.ajax.post("crop-image",{wp_customize:"on",nonce:a.get("nonces").edit,id:a.get("id"),context:c.id,cropDetails:b})}}),a.exports=c},function(a,b){var c,d=wp.media.controller;c=d.Cropper.extend({activate:function(){this.frame.on("content:create:crop",this.createCropContent,this),this.frame.on("close",this.removeCropper,this),this.set("selection",new Backbone.Collection(this.frame._selection.single))},createCropContent:function(){this.cropperView=new wp.media.view.SiteIconCropper({controller:this,attachment:this.get("selection").first()}),this.cropperView.on("image-loaded",this.createCropToolbar,this),this.frame.content.set(this.cropperView)},doCrop:function(a){var b=a.get("cropDetails"),c=this.get("control");return b.dst_width=c.params.width,b.dst_height=c.params.height,wp.ajax.post("crop-image",{nonce:a.get("nonces").edit,id:a.get("id"),context:"site-icon",cropDetails:b})}}),a.exports=c},function(a,b){var c=wp.Backbone.View.extend({constructor:function(a){a&&a.controller&&(this.controller=a.controller),wp.Backbone.View.apply(this,arguments)},dispose:function(){return this.undelegateEvents(),this.model&&this.model.off&&this.model.off(null,null,this),this.collection&&this.collection.off&&this.collection.off(null,null,this),this.controller&&this.controller.off&&this.controller.off(null,null,this),this},remove:function(){return this.dispose(),wp.Backbone.View.prototype.remove.apply(this,arguments)}});a.exports=c},function(a,b){var c=wp.media.View.extend({initialize:function(){_.defaults(this.options,{mode:["select"]}),this._createRegions(),this._createStates(),this._createModes()},_createRegions:function(){this.regions=this.regions?this.regions.slice():[],_.each(this.regions,function(a){this[a]=new wp.media.controller.Region({view:this,id:a,selector:".media-frame-"+a})},this)},_createStates:function(){this.states=new Backbone.Collection(null,{model:wp.media.controller.State}),this.states.on("add",function(a){a.frame=this,a.trigger("ready")},this),this.options.states&&this.states.add(this.options.states)},_createModes:function(){this.activeModes=new Backbone.Collection,this.activeModes.on("add remove reset",_.bind(this.triggerModeEvents,this)),_.each(this.options.mode,function(a){this.activateMode(a)},this)},reset:function(){return this.states.invoke("trigger","reset"),this},triggerModeEvents:function(a,b,c){var d,e,f={add:"activate",remove:"deactivate"};_.each(c,function(a,b){a&&(d=b)}),_.has(f,d)&&(e=a.get("id")+":"+f[d],this.trigger(e))},activateMode:function(a){if(!this.isModeActive(a))return this.activeModes.add([{id:a}]),this.$el.addClass("mode-"+a),this},deactivateMode:function(a){return this.isModeActive(a)?(this.activeModes.remove(this.activeModes.where({id:a})),this.$el.removeClass("mode-"+a),this.trigger(a+":deactivate"),this):this},isModeActive:function(a){return Boolean(this.activeModes.where({id:a}).length)}});_.extend(c.prototype,wp.media.controller.StateMachine.prototype),a.exports=c},function(a,b){var c,d=wp.media.view.Frame,e=jQuery;c=d.extend({className:"media-frame",template:wp.template("media-frame"),regions:["menu","title","content","toolbar","router"],events:{"click div.media-frame-title h1":"toggleMenu"},initialize:function(){d.prototype.initialize.apply(this,arguments),_.defaults(this.options,{title:"",modal:!0,uploader:!0}),this.$el.addClass("wp-core-ui"),this.options.modal&&(this.modal=new wp.media.view.Modal({controller:this,title:this.options.title}),this.modal.content(this)),!wp.Uploader.limitExceeded&&wp.Uploader.browser.supported||(this.options.uploader=!1),this.options.uploader&&(this.uploader=new wp.media.view.UploaderWindow({controller:this,uploader:{dropzone:this.modal?this.modal.$el:this.$el,container:this.$el}}),this.views.set(".media-frame-uploader",this.uploader)),this.on("attach",_.bind(this.views.ready,this.views),this),this.on("title:create:default",this.createTitle,this),this.title.mode("default"),this.on("title:render",function(a){a.$el.append('<span class="dashicons dashicons-arrow-down"></span>')}),this.on("menu:create:default",this.createMenu,this)},render:function(){return!this.state()&&this.options.state&&this.setState(this.options.state),d.prototype.render.apply(this,arguments)},createTitle:function(a){a.view=new wp.media.View({controller:this,tagName:"h1"})},createMenu:function(a){a.view=new wp.media.view.Menu({controller:this})},toggleMenu:function(){this.$el.find(".media-menu").toggleClass("visible")},createToolbar:function(a){a.view=new wp.media.view.Toolbar({controller:this})},createRouter:function(a){a.view=new wp.media.view.Router({controller:this})},createIframeStates:function(a){var b,c=wp.media.view.settings,d=c.tabs,f=c.tabUrl;d&&f&&(b=e("#post_ID"),b.length&&(f+="&post_id="+b.val()),_.each(d,function(b,c){this.state("iframe:"+c).set(_.defaults({tab:c,src:f+"&tab="+c,title:b,content:"iframe",menu:"default"},a))},this),this.on("content:create:iframe",this.iframeContent,this),this.on("content:deactivate:iframe",this.iframeContentCleanup,this),this.on("menu:render:default",this.iframeMenu,this),this.on("open",this.hijackThickbox,this),this.on("close",this.restoreThickbox,this))},iframeContent:function(a){this.$el.addClass("hide-toolbar"),a.view=new wp.media.view.Iframe({controller:this})},iframeContentCleanup:function(){this.$el.removeClass("hide-toolbar")},iframeMenu:function(a){var b={};a&&(_.each(wp.media.view.settings.tabs,function(a,c){b["iframe:"+c]={text:this.state("iframe:"+c).get("title"),priority:200}},this),a.set(b))},hijackThickbox:function(){var a=this;window.tb_remove&&!this._tb_remove&&(this._tb_remove=window.tb_remove,window.tb_remove=function(){a.close(),a.reset(),a.setState(a.options.state),a._tb_remove.call(window)})},restoreThickbox:function(){this._tb_remove&&(window.tb_remove=this._tb_remove,delete this._tb_remove)}}),_.each(["open","close","attach","detach","escape"],function(a){c.prototype[a]=function(){return this.modal&&this.modal[a].apply(this.modal,arguments),this}}),a.exports=c},function(a,b){var c,d=wp.media.view.MediaFrame,e=wp.media.view.l10n;c=d.extend({initialize:function(){d.prototype.initialize.apply(this,arguments),_.defaults(this.options,{selection:[],library:{},multiple:!1,state:"library"}),this.createSelection(),this.createStates(),this.bindHandlers()},createSelection:function(){var a=this.options.selection;a instanceof wp.media.model.Selection||(this.options.selection=new wp.media.model.Selection(a,{multiple:this.options.multiple})),this._selection={attachments:new wp.media.model.Attachments,difference:[]}},createStates:function(){var a=this.options;this.options.states||this.states.add([new wp.media.controller.Library({library:wp.media.query(a.library),multiple:a.multiple,title:a.title,priority:20})])},bindHandlers:function(){this.on("router:create:browse",this.createRouter,this),this.on("router:render:browse",this.browseRouter,this),this.on("content:create:browse",this.browseContent,this),this.on("content:render:upload",this.uploadContent,this),this.on("toolbar:create:select",this.createSelectToolbar,this)},browseRouter:function(a){a.set({upload:{text:e.uploadFilesTitle,priority:20},browse:{text:e.mediaLibraryTitle,priority:40}})},browseContent:function(a){var b=this.state();this.$el.removeClass("hide-toolbar"),a.view=new wp.media.view.AttachmentsBrowser({controller:this,collection:b.get("library"),selection:b.get("selection"),model:b,sortable:b.get("sortable"),search:b.get("searchable"),filters:b.get("filterable"),date:b.get("date"),display:b.has("display")?b.get("display"):b.get("displaySettings"),dragInfo:b.get("dragInfo"),idealColumnWidth:b.get("idealColumnWidth"),suggestedWidth:b.get("suggestedWidth"),suggestedHeight:b.get("suggestedHeight"),AttachmentView:b.get("AttachmentView")})},uploadContent:function(){this.$el.removeClass("hide-toolbar"),this.content.set(new wp.media.view.UploaderInline({controller:this}))},createSelectToolbar:function(a,b){b=b||this.options.button||{},b.controller=this,a.view=new wp.media.view.Toolbar.Select(b)}}),a.exports=c},function(a,b){var c,d=wp.media.view.MediaFrame.Select,e=wp.media.controller.Library,f=wp.media.view.l10n;c=d.extend({initialize:function(){this.counts={audio:{count:wp.media.view.settings.attachmentCounts.audio,state:"playlist"},video:{count:wp.media.view.settings.attachmentCounts.video,state:"video-playlist"}},_.defaults(this.options,{multiple:!0,editing:!1,state:"insert",metadata:{}}),d.prototype.initialize.apply(this,arguments),this.createIframeStates()},createStates:function(){var a=this.options;this.states.add([new e({id:"insert",title:f.insertMediaTitle,priority:20,toolbar:"main-insert",filterable:"all",library:wp.media.query(a.library),multiple:!!a.multiple&&"reset",editable:!0,allowLocalEdits:!0,displaySettings:!0,displayUserSettings:!0}),new e({id:"gallery",title:f.createGalleryTitle,priority:40,toolbar:"main-gallery",filterable:"uploaded",multiple:"add",editable:!1,library:wp.media.query(_.defaults({type:"image"},a.library))}),new wp.media.controller.Embed({metadata:a.metadata}),new wp.media.controller.EditImage({model:a.editImage}),new wp.media.controller.GalleryEdit({library:a.selection,editing:a.editing,menu:"gallery"}),new wp.media.controller.GalleryAdd,new e({id:"playlist",title:f.createPlaylistTitle,priority:60,toolbar:"main-playlist",filterable:"uploaded",multiple:"add",editable:!1,library:wp.media.query(_.defaults({type:"audio"},a.library))}),new wp.media.controller.CollectionEdit({type:"audio",collectionType:"playlist",title:f.editPlaylistTitle,SettingsView:wp.media.view.Settings.Playlist,library:a.selection,editing:a.editing,menu:"playlist",dragInfoText:f.playlistDragInfo,dragInfo:!1}),new wp.media.controller.CollectionAdd({type:"audio",collectionType:"playlist",title:f.addToPlaylistTitle}),new e({id:"video-playlist",title:f.createVideoPlaylistTitle,priority:60,toolbar:"main-video-playlist",filterable:"uploaded",multiple:"add",editable:!1,library:wp.media.query(_.defaults({
type:"video"},a.library))}),new wp.media.controller.CollectionEdit({type:"video",collectionType:"playlist",title:f.editVideoPlaylistTitle,SettingsView:wp.media.view.Settings.Playlist,library:a.selection,editing:a.editing,menu:"video-playlist",dragInfoText:f.videoPlaylistDragInfo,dragInfo:!1}),new wp.media.controller.CollectionAdd({type:"video",collectionType:"playlist",title:f.addToVideoPlaylistTitle})]),wp.media.view.settings.post.featuredImageId&&this.states.add(new wp.media.controller.FeaturedImage)},bindHandlers:function(){var a,b;d.prototype.bindHandlers.apply(this,arguments),this.on("activate",this.activate,this),b=_.find(this.counts,function(a){return 0===a.count}),"undefined"!=typeof b&&this.listenTo(wp.media.model.Attachments.all,"change:type",this.mediaTypeCounts),this.on("menu:create:gallery",this.createMenu,this),this.on("menu:create:playlist",this.createMenu,this),this.on("menu:create:video-playlist",this.createMenu,this),this.on("toolbar:create:main-insert",this.createToolbar,this),this.on("toolbar:create:main-gallery",this.createToolbar,this),this.on("toolbar:create:main-playlist",this.createToolbar,this),this.on("toolbar:create:main-video-playlist",this.createToolbar,this),this.on("toolbar:create:featured-image",this.featuredImageToolbar,this),this.on("toolbar:create:main-embed",this.mainEmbedToolbar,this),a={menu:{"default":"mainMenu",gallery:"galleryMenu",playlist:"playlistMenu","video-playlist":"videoPlaylistMenu"},content:{embed:"embedContent","edit-image":"editImageContent","edit-selection":"editSelectionContent"},toolbar:{"main-insert":"mainInsertToolbar","main-gallery":"mainGalleryToolbar","gallery-edit":"galleryEditToolbar","gallery-add":"galleryAddToolbar","main-playlist":"mainPlaylistToolbar","playlist-edit":"playlistEditToolbar","playlist-add":"playlistAddToolbar","main-video-playlist":"mainVideoPlaylistToolbar","video-playlist-edit":"videoPlaylistEditToolbar","video-playlist-add":"videoPlaylistAddToolbar"}},_.each(a,function(a,b){_.each(a,function(a,c){this.on(b+":render:"+c,this[a],this)},this)},this)},activate:function(){_.each(this.counts,function(a){a.count<1&&this.menuItemVisibility(a.state,"hide")},this)},mediaTypeCounts:function(a,b){"undefined"!=typeof this.counts[b]&&this.counts[b].count<1&&(this.counts[b].count++,this.menuItemVisibility(this.counts[b].state,"show"))},mainMenu:function(a){a.set({"library-separator":new wp.media.View({className:"separator",priority:100})})},menuItemVisibility:function(a,b){var c=this.menu.get();"hide"===b?c.hide(a):"show"===b&&c.show(a)},galleryMenu:function(a){var b=this.lastState(),c=b&&b.id,d=this;a.set({cancel:{text:f.cancelGalleryTitle,priority:20,click:function(){c?d.setState(c):d.close(),this.controller.modal.focusManager.focus()}},separateCancel:new wp.media.View({className:"separator",priority:40})})},playlistMenu:function(a){var b=this.lastState(),c=b&&b.id,d=this;a.set({cancel:{text:f.cancelPlaylistTitle,priority:20,click:function(){c?d.setState(c):d.close()}},separateCancel:new wp.media.View({className:"separator",priority:40})})},videoPlaylistMenu:function(a){var b=this.lastState(),c=b&&b.id,d=this;a.set({cancel:{text:f.cancelVideoPlaylistTitle,priority:20,click:function(){c?d.setState(c):d.close()}},separateCancel:new wp.media.View({className:"separator",priority:40})})},embedContent:function(){var a=new wp.media.view.Embed({controller:this,model:this.state()}).render();this.content.set(a),wp.media.isTouchDevice||a.url.focus()},editSelectionContent:function(){var a,b=this.state(),c=b.get("selection");a=new wp.media.view.AttachmentsBrowser({controller:this,collection:c,selection:c,model:b,sortable:!0,search:!1,date:!1,dragInfo:!0,AttachmentView:wp.media.view.Attachments.EditSelection}).render(),a.toolbar.set("backToLibrary",{text:f.returnToLibrary,priority:-100,click:function(){this.controller.content.mode("browse")}}),this.content.set(a),this.trigger("edit:selection",this)},editImageContent:function(){var a=this.state().get("image"),b=new wp.media.view.EditImage({model:a,controller:this}).render();this.content.set(b),b.loadEditor()},selectionStatusToolbar:function(a){var b=this.state().get("editable");a.set("selection",new wp.media.view.Selection({controller:this,collection:this.state().get("selection"),priority:-40,editable:b&&function(){this.controller.content.mode("edit-selection")}}).render())},mainInsertToolbar:function(a){var b=this;this.selectionStatusToolbar(a),a.set("insert",{style:"primary",priority:80,text:f.insertIntoPost,requires:{selection:!0},click:function(){var a=b.state(),c=a.get("selection");b.close(),a.trigger("insert",c).reset()}})},mainGalleryToolbar:function(a){var b=this;this.selectionStatusToolbar(a),a.set("gallery",{style:"primary",text:f.createNewGallery,priority:60,requires:{selection:!0},click:function(){var a=b.state().get("selection"),c=b.state("gallery-edit"),d=a.where({type:"image"});c.set("library",new wp.media.model.Selection(d,{props:a.props.toJSON(),multiple:!0})),this.controller.setState("gallery-edit"),this.controller.modal.focusManager.focus()}})},mainPlaylistToolbar:function(a){var b=this;this.selectionStatusToolbar(a),a.set("playlist",{style:"primary",text:f.createNewPlaylist,priority:100,requires:{selection:!0},click:function(){var a=b.state().get("selection"),c=b.state("playlist-edit"),d=a.where({type:"audio"});c.set("library",new wp.media.model.Selection(d,{props:a.props.toJSON(),multiple:!0})),this.controller.setState("playlist-edit"),this.controller.modal.focusManager.focus()}})},mainVideoPlaylistToolbar:function(a){var b=this;this.selectionStatusToolbar(a),a.set("video-playlist",{style:"primary",text:f.createNewVideoPlaylist,priority:100,requires:{selection:!0},click:function(){var a=b.state().get("selection"),c=b.state("video-playlist-edit"),d=a.where({type:"video"});c.set("library",new wp.media.model.Selection(d,{props:a.props.toJSON(),multiple:!0})),this.controller.setState("video-playlist-edit"),this.controller.modal.focusManager.focus()}})},featuredImageToolbar:function(a){this.createSelectToolbar(a,{text:f.setFeaturedImage,state:this.options.state})},mainEmbedToolbar:function(a){a.view=new wp.media.view.Toolbar.Embed({controller:this})},galleryEditToolbar:function(){var a=this.state().get("editing");this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:a?f.updateGallery:f.insertGallery,priority:80,requires:{library:!0},click:function(){var a=this.controller,b=a.state();a.close(),b.trigger("update",b.get("library")),a.setState(a.options.state),a.reset()}}}}))},galleryAddToolbar:function(){this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:f.addToGallery,priority:80,requires:{selection:!0},click:function(){var a=this.controller,b=a.state(),c=a.state("gallery-edit");c.get("library").add(b.get("selection").models),b.trigger("reset"),a.setState("gallery-edit")}}}}))},playlistEditToolbar:function(){var a=this.state().get("editing");this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:a?f.updatePlaylist:f.insertPlaylist,priority:80,requires:{library:!0},click:function(){var a=this.controller,b=a.state();a.close(),b.trigger("update",b.get("library")),a.setState(a.options.state),a.reset()}}}}))},playlistAddToolbar:function(){this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:f.addToPlaylist,priority:80,requires:{selection:!0},click:function(){var a=this.controller,b=a.state(),c=a.state("playlist-edit");c.get("library").add(b.get("selection").models),b.trigger("reset"),a.setState("playlist-edit")}}}}))},videoPlaylistEditToolbar:function(){var a=this.state().get("editing");this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:a?f.updateVideoPlaylist:f.insertVideoPlaylist,priority:140,requires:{library:!0},click:function(){var a=this.controller,b=a.state(),c=b.get("library");c.type="video",a.close(),b.trigger("update",c),a.setState(a.options.state),a.reset()}}}}))},videoPlaylistAddToolbar:function(){this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{insert:{style:"primary",text:f.addToVideoPlaylist,priority:140,requires:{selection:!0},click:function(){var a=this.controller,b=a.state(),c=a.state("video-playlist-edit");c.get("library").add(b.get("selection").models),b.trigger("reset"),a.setState("video-playlist-edit")}}}}))}}),a.exports=c},function(a,b){var c,d=wp.media.view.MediaFrame.Select,e=wp.media.view.l10n;c=d.extend({defaults:{id:"image",url:"",menu:"image-details",content:"image-details",toolbar:"image-details",type:"link",title:e.imageDetailsTitle,priority:120},initialize:function(a){this.image=new wp.media.model.PostImage(a.metadata),this.options.selection=new wp.media.model.Selection(this.image.attachment,{multiple:!1}),d.prototype.initialize.apply(this,arguments)},bindHandlers:function(){d.prototype.bindHandlers.apply(this,arguments),this.on("menu:create:image-details",this.createMenu,this),this.on("content:create:image-details",this.imageDetailsContent,this),this.on("content:render:edit-image",this.editImageContent,this),this.on("toolbar:render:image-details",this.renderImageDetailsToolbar,this),this.on("toolbar:render:replace",this.renderReplaceImageToolbar,this)},createStates:function(){this.states.add([new wp.media.controller.ImageDetails({image:this.image,editable:!1}),new wp.media.controller.ReplaceImage({id:"replace-image",library:wp.media.query({type:"image"}),image:this.image,multiple:!1,title:e.imageReplaceTitle,toolbar:"replace",priority:80,displaySettings:!0}),new wp.media.controller.EditImage({image:this.image,selection:this.options.selection})])},imageDetailsContent:function(a){a.view=new wp.media.view.ImageDetails({controller:this,model:this.state().image,attachment:this.state().image.attachment})},editImageContent:function(){var a,b=this.state(),c=b.get("image");c&&(a=new wp.media.view.EditImage({model:c,controller:this}).render(),this.content.set(a),a.loadEditor())},renderImageDetailsToolbar:function(){this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{select:{style:"primary",text:e.update,priority:80,click:function(){var a=this.controller,b=a.state();a.close(),b.trigger("update",a.image.toJSON()),a.setState(a.options.state),a.reset()}}}}))},renderReplaceImageToolbar:function(){var a=this,b=a.lastState(),c=b&&b.id;this.toolbar.set(new wp.media.view.Toolbar({controller:this,items:{back:{text:e.back,priority:20,click:function(){c?a.setState(c):a.close()}},replace:{style:"primary",text:e.replace,priority:80,requires:{selection:!0},click:function(){var a=this.controller,b=a.state(),c=b.get("selection"),d=c.single();a.close(),a.image.changeAttachment(d,b.display(d)),b.trigger("replace",a.image.toJSON()),a.setState(a.options.state),a.reset()}}}}))}}),a.exports=c},function(a,b){var c,d=jQuery;c=wp.media.View.extend({tagName:"div",template:wp.template("media-modal"),events:{"click .media-modal-backdrop, .media-modal-close":"escapeHandler",keydown:"keydown"},clickedOpenerEl:null,initialize:function(){_.defaults(this.options,{container:document.body,title:"",propagate:!0}),this.focusManager=new wp.media.view.FocusManager({el:this.el})},prepare:function(){return{title:this.options.title}},attach:function(){return this.views.attached?this:(this.views.rendered||this.render(),this.$el.appendTo(this.options.container),this.views.attached=!0,this.views.ready(),this.propagate("attach"))},detach:function(){return this.$el.is(":visible")&&this.close(),this.$el.detach(),this.views.attached=!1,this.propagate("detach")},open:function(){var a,b=this.$el;return b.is(":visible")?this:(this.clickedOpenerEl=document.activeElement,this.views.attached||this.attach(),d("body").addClass("modal-open"),b.show(),"ontouchend"in document&&(a=window.tinymce&&window.tinymce.activeEditor)&&!a.isHidden()&&a.iframeElement&&(a.iframeElement.focus(),a.iframeElement.blur(),setTimeout(function(){a.iframeElement.blur()},100)),this.$(".media-modal").focus(),this.propagate("open"))},close:function(a){return this.views.attached&&this.$el.is(":visible")?(d("body").removeClass("modal-open"),this.$el.hide().undelegate("keydown"),null!==this.clickedOpenerEl?this.clickedOpenerEl.focus():d("#wpbody-content").focus(),this.propagate("close"),a&&a.escape&&this.propagate("escape"),this):this},escape:function(){return this.close({escape:!0})},escapeHandler:function(a){a.preventDefault(),this.escape()},content:function(a){return this.views.set(".media-modal-content",a),this},propagate:function(a){return this.trigger(a),this.options.propagate&&this.controller.trigger(a),this},keydown:function(a){27===a.which&&this.$el.is(":visible")&&(this.escape(),a.stopImmediatePropagation())}}),a.exports=c},function(a,b){var c=wp.media.View.extend({events:{keydown:"constrainTabbing"},focus:function(){this.$(".media-menu-item").first().focus()},constrainTabbing:function(a){var b;if(9===a.keyCode)return b=this.$(":tabbable").not('.moxie-shim input[type="file"]'),b.last()[0]!==a.target||a.shiftKey?b.first()[0]===a.target&&a.shiftKey?(b.last().focus(),!1):void 0:(b.first().focus(),!1)}});a.exports=c},function(a,b){var c,d=jQuery;c=wp.media.View.extend({tagName:"div",className:"uploader-window",template:wp.template("uploader-window"),initialize:function(){var a;this.$browser=d('<button type="button" class="browser" />').hide().appendTo("body"),a=this.options.uploader=_.defaults(this.options.uploader||{},{dropzone:this.$el,browser:this.$browser,params:{}}),!a.dropzone||a.dropzone instanceof d||(a.dropzone=d(a.dropzone)),this.controller.on("activate",this.refresh,this),this.controller.on("detach",function(){this.$browser.remove()},this)},refresh:function(){this.uploader&&this.uploader.refresh()},ready:function(){var a,b=wp.media.view.settings.post.id;this.uploader||(b&&(this.options.uploader.params.post_id=b),this.uploader=new wp.Uploader(this.options.uploader),a=this.uploader.dropzone,a.on("dropzone:enter",_.bind(this.show,this)),a.on("dropzone:leave",_.bind(this.hide,this)),d(this.uploader).on("uploader:ready",_.bind(this._ready,this)))},_ready:function(){this.controller.trigger("uploader:ready")},show:function(){var a=this.$el.show();_.defer(function(){a.css({opacity:1})})},hide:function(){var a=this.$el.css({opacity:0});wp.media.transition(a).done(function(){"0"===a.css("opacity")&&a.hide()}),_.delay(function(){"0"===a.css("opacity")&&a.is(":visible")&&a.hide()},500)}}),a.exports=c},function(a,b){var c,d=wp.media.View,e=wp.media.view.l10n,f=jQuery;c=d.extend({tagName:"div",className:"uploader-editor",template:wp.template("uploader-editor"),localDrag:!1,overContainer:!1,overDropzone:!1,draggingFile:null,initialize:function(){return this.initialized=!1,window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&this.browserSupport()?(this.$document=f(document),this.dropzones=[],this.files=[],this.$document.on("drop",".uploader-editor",_.bind(this.drop,this)),this.$document.on("dragover",".uploader-editor",_.bind(this.dropzoneDragover,this)),this.$document.on("dragleave",".uploader-editor",_.bind(this.dropzoneDragleave,this)),this.$document.on("click",".uploader-editor",_.bind(this.click,this)),this.$document.on("dragover",_.bind(this.containerDragover,this)),this.$document.on("dragleave",_.bind(this.containerDragleave,this)),this.$document.on("dragstart dragend drop",_.bind(function(a){this.localDrag="dragstart"===a.type,"drop"===a.type&&this.containerDragleave()},this)),this.initialized=!0,this):this},browserSupport:function(){var a=!1,b=document.createElement("div");return a="draggable"in b||"ondragstart"in b&&"ondrop"in b,a=a&&!!(window.File&&window.FileList&&window.FileReader)},isDraggingFile:function(a){return null!==this.draggingFile?this.draggingFile:!_.isUndefined(a.originalEvent)&&!_.isUndefined(a.originalEvent.dataTransfer)&&(this.draggingFile=_.indexOf(a.originalEvent.dataTransfer.types,"Files")>-1&&_.indexOf(a.originalEvent.dataTransfer.types,"text/plain")===-1,this.draggingFile)},refresh:function(a){var b;for(b in this.dropzones)this.dropzones[b].toggle(this.overContainer||this.overDropzone);return _.isUndefined(a)||f(a.target).closest(".uploader-editor").toggleClass("droppable",this.overDropzone),this.overContainer||this.overDropzone||(this.draggingFile=null),this},render:function(){return this.initialized?(d.prototype.render.apply(this,arguments),f(".wp-editor-wrap").each(_.bind(this.attach,this)),this):this},attach:function(a,b){var c=this.$el.clone();return this.dropzones.push(c),f(b).append(c),this},drop:function(a){var b,c;if(this.containerDragleave(a),this.dropzoneDragleave(a),this.files=a.originalEvent.dataTransfer.files,!(this.files.length<1))return b=f(a.target).parents(".wp-editor-wrap"),b.length>0&&b[0].id&&(window.wpActiveEditor=b[0].id.slice(3,-5)),this.workflow?(this.workflow.state().reset(),this.addFiles.apply(this),this.workflow.open()):(this.workflow=wp.media.editor.open(window.wpActiveEditor,{frame:"post",state:"insert",title:e.addMedia,multiple:!0}),c=this.workflow.uploader,c.uploader&&c.uploader.ready?this.addFiles.apply(this):this.workflow.on("uploader:ready",this.addFiles,this)),!1},addFiles:function(){return this.files.length&&(this.workflow.uploader.uploader.uploader.addFile(_.toArray(this.files)),this.files=[]),this},containerDragover:function(a){!this.localDrag&&this.isDraggingFile(a)&&(this.overContainer=!0,this.refresh())},containerDragleave:function(){this.overContainer=!1,_.delay(_.bind(this.refresh,this),50)},dropzoneDragover:function(a){if(!this.localDrag&&this.isDraggingFile(a))return this.overDropzone=!0,this.refresh(a),!1},dropzoneDragleave:function(a){this.overDropzone=!1,_.delay(_.bind(this.refresh,this,a),50)},click:function(a){this.containerDragleave(a),this.dropzoneDragleave(a),this.localDrag=!1}}),a.exports=c},function(a,b){var c,d=wp.media.View;c=d.extend({tagName:"div",className:"uploader-inline",template:wp.template("uploader-inline"),events:{"click .close":"hide"},initialize:function(){_.defaults(this.options,{message:"",status:!0,canClose:!1}),!this.options.$browser&&this.controller.uploader&&(this.options.$browser=this.controller.uploader.$browser),_.isUndefined(this.options.postId)&&(this.options.postId=wp.media.view.settings.post.id),this.options.status&&this.views.set(".upload-inline-status",new wp.media.view.UploaderStatus({controller:this.controller}))},prepare:function(){var a=this.controller.state().get("suggestedWidth"),b=this.controller.state().get("suggestedHeight"),c={};return c.message=this.options.message,c.canClose=this.options.canClose,a&&b&&(c.suggestedWidth=a,c.suggestedHeight=b),c},dispose:function(){return this.disposing?d.prototype.dispose.apply(this,arguments):(this.disposing=!0,this.remove())},remove:function(){var a=d.prototype.remove.apply(this,arguments);return _.defer(_.bind(this.refresh,this)),a},refresh:function(){var a=this.controller.uploader;a&&a.refresh()},ready:function(){var a,b=this.options.$browser;if(this.controller.uploader){if(a=this.$(".browser"),a[0]===b[0])return;b.detach().text(a.text()),b[0].className=a[0].className,a.replaceWith(b.show())}return this.refresh(),this},show:function(){this.$el.removeClass("hidden"),this.controller.$uploaderToggler&&this.controller.$uploaderToggler.length&&this.controller.$uploaderToggler.attr("aria-expanded","true")},hide:function(){this.$el.addClass("hidden"),this.controller.$uploaderToggler&&this.controller.$uploaderToggler.length&&this.controller.$uploaderToggler.attr("aria-expanded","false").focus()}}),a.exports=c},function(a,b){var c,d=wp.media.View;c=d.extend({className:"media-uploader-status",template:wp.template("uploader-status"),events:{"click .upload-dismiss-errors":"dismiss"},initialize:function(){this.queue=wp.Uploader.queue,this.queue.on("add remove reset",this.visibility,this),this.queue.on("add remove reset change:percent",this.progress,this),this.queue.on("add remove reset change:uploading",this.info,this),this.errors=wp.Uploader.errors,this.errors.reset(),this.errors.on("add remove reset",this.visibility,this),this.errors.on("add",this.error,this)},dispose:function(){return wp.Uploader.queue.off(null,null,this),d.prototype.dispose.apply(this,arguments),this},visibility:function(){this.$el.toggleClass("uploading",!!this.queue.length),this.$el.toggleClass("errors",!!this.errors.length),this.$el.toggle(!!this.queue.length||!!this.errors.length)},ready:function(){_.each({$bar:".media-progress-bar div",$index:".upload-index",$total:".upload-total",$filename:".upload-filename"},function(a,b){this[b]=this.$(a)},this),this.visibility(),this.progress(),this.info()},progress:function(){var a=this.queue,b=this.$bar;b&&a.length&&b.width(a.reduce(function(a,b){if(!b.get("uploading"))return a+100;var c=b.get("percent");return a+(_.isNumber(c)?c:100)},0)/a.length+"%")},info:function(){var a,b=this.queue,c=0;b.length&&(a=this.queue.find(function(a,b){return c=b,a.get("uploading")}),this.$index.text(c+1),this.$total.text(b.length),this.$filename.html(a?this.filename(a.get("filename")):""))},filename:function(a){return _.escape(a)},error:function(a){this.views.add(".upload-errors",new wp.media.view.UploaderStatusError({filename:this.filename(a.get("file").name),message:a.get("message")}),{at:0})},dismiss:function(a){var b=this.views.get(".upload-errors");a.preventDefault(),b&&_.invoke(b,"remove"),wp.Uploader.errors.reset()}}),a.exports=c},function(a,b){var c=wp.media.View.extend({className:"upload-error",template:wp.template("uploader-status-error")});a.exports=c},function(a,b){var c,d=wp.media.View;c=d.extend({tagName:"div",className:"media-toolbar",initialize:function(){var a=this.controller.state(),b=this.selection=a.get("selection"),c=this.library=a.get("library");this._views={},this.primary=new wp.media.view.PriorityList,this.secondary=new wp.media.view.PriorityList,this.primary.$el.addClass("media-toolbar-primary search-form"),this.secondary.$el.addClass("media-toolbar-secondary"),this.views.set([this.secondary,this.primary]),this.options.items&&this.set(this.options.items,{silent:!0}),this.options.silent||this.render(),b&&b.on("add remove reset",this.refresh,this),c&&c.on("add remove reset",this.refresh,this)},dispose:function(){return this.selection&&this.selection.off(null,null,this),this.library&&this.library.off(null,null,this),d.prototype.dispose.apply(this,arguments)},ready:function(){this.refresh()},set:function(a,b,c){var d;return c=c||{},_.isObject(a)?_.each(a,function(a,b){this.set(b,a,{silent:!0})},this):(b instanceof Backbone.View||(b.classes=["media-button-"+a].concat(b.classes||[]),b=new wp.media.view.Button(b).render()),b.controller=b.controller||this.controller,this._views[a]=b,d=b.options.priority<0?"secondary":"primary",this[d].set(a,b,c)),c.silent||this.refresh(),this},get:function(a){return this._views[a]},unset:function(a,b){return delete this._views[a],this.primary.unset(a,b),this.secondary.unset(a,b),b&&b.silent||this.refresh(),this},refresh:function(){var a=this.controller.state(),b=a.get("library"),c=a.get("selection");_.each(this._views,function(a){if(a.model&&a.options&&a.options.requires){var d=a.options.requires,e=!1;c&&c.models&&(e=_.some(c.models,function(a){return a.get("uploading")===!0})),d.selection&&c&&!c.length?e=!0:d.library&&b&&!b.length&&(e=!0),a.model.set("disabled",e)}})}}),a.exports=c},function(a,b){var c,d=wp.media.view.Toolbar,e=wp.media.view.l10n;c=d.extend({initialize:function(){var a=this.options;_.bindAll(this,"clickSelect"),_.defaults(a,{event:"select",state:!1,reset:!0,close:!0,text:e.select,requires:{selection:!0}}),a.items=_.defaults(a.items||{},{select:{style:"primary",text:a.text,priority:80,click:this.clickSelect,requires:a.requires}}),d.prototype.initialize.apply(this,arguments)},clickSelect:function(){var a=this.options,b=this.controller;a.close&&b.close(),a.event&&b.state().trigger(a.event),a.state&&b.setState(a.state),a.reset&&b.reset()}}),a.exports=c},function(a,b){var c,d=wp.media.view.Toolbar.Select,e=wp.media.view.l10n;c=d.extend({initialize:function(){_.defaults(this.options,{text:e.insertIntoPost,requires:!1}),d.prototype.initialize.apply(this,arguments)},refresh:function(){var a=this.controller.state().props.get("url");this.get("select").model.set("disabled",!a||"http://"===a),d.prototype.refresh.apply(this,arguments)}}),a.exports=c},function(a,b){var c=wp.media.View.extend({tagName:"button",className:"media-button",attributes:{type:"button"},events:{click:"click"},defaults:{text:"",style:"",size:"large",disabled:!1},initialize:function(){this.model=new Backbone.Model(this.defaults),_.each(this.defaults,function(a,b){var c=this.options[b];_.isUndefined(c)||(this.model.set(b,c),delete this.options[b])},this),this.listenTo(this.model,"change",this.render)},render:function(){var a=["button",this.className],b=this.model.toJSON();return b.style&&a.push("button-"+b.style),b.size&&a.push("button-"+b.size),a=_.uniq(a.concat(this.options.classes)),this.el.className=a.join(" "),this.$el.attr("disabled",b.disabled),this.$el.text(this.model.get("text")),this},click:function(a){"#"===this.attributes.href&&a.preventDefault(),this.options.click&&!this.model.get("disabled")&&this.options.click.apply(this,arguments)}});a.exports=c},function(a,b){var c,d=Backbone.$;c=wp.media.View.extend({tagName:"div",className:"button-group button-large media-button-group",initialize:function(){this.buttons=_.map(this.options.buttons||[],function(a){return a instanceof Backbone.View?a:new wp.media.view.Button(a).render()}),delete this.options.buttons,this.options.classes&&this.$el.addClass(this.options.classes)},render:function(){return this.$el.html(d(_.pluck(this.buttons,"el")).detach()),this}}),a.exports=c},function(a,b){var c=wp.media.View.extend({tagName:"div",initialize:function(){this._views={},this.set(_.extend({},this._views,this.options.views),{silent:!0}),delete this.options.views,this.options.silent||this.render()},set:function(a,b,c){var d,e,f;return c=c||{},_.isObject(a)?(_.each(a,function(a,b){this.set(b,a)},this),this):(b instanceof Backbone.View||(b=this.toView(b,a,c)),b.controller=b.controller||this.controller,this.unset(a),d=b.options.priority||10,e=this.views.get()||[],_.find(e,function(a,b){if(a.options.priority>d)return f=b,!0}),this._views[a]=b,this.views.add(b,{at:_.isNumber(f)?f:e.length||0}),this)},get:function(a){return this._views[a]},unset:function(a){var b=this.get(a);return b&&b.remove(),delete this._views[a],this},toView:function(a){return new wp.media.View(a)}});a.exports=c},function(a,b){var c,d=jQuery;c=wp.media.View.extend({tagName:"a",className:"media-menu-item",attributes:{href:"#"},events:{click:"_click"},_click:function(a){var b=this.options.click;a&&a.preventDefault(),b?b.call(this):this.click(),wp.media.isTouchDevice||d(".media-frame-content input").first().focus()},click:function(){var a=this.options.state;a&&(this.controller.setState(a),this.views.parent.$el.removeClass("visible"))},render:function(){var a=this.options;return a.text?this.$el.text(a.text):a.html&&this.$el.html(a.html),this}}),a.exports=c},function(a,b){var c,d=wp.media.view.MenuItem,e=wp.media.view.PriorityList;c=e.extend({tagName:"div",className:"media-menu",property:"state",ItemView:d,region:"menu",toView:function(a,b){return a=a||{},a[this.property]=a[this.property]||b,new this.ItemView(a).render()},ready:function(){e.prototype.ready.apply(this,arguments),this.visibility()},set:function(){e.prototype.set.apply(this,arguments),this.visibility()},unset:function(){e.prototype.unset.apply(this,arguments),this.visibility()},visibility:function(){var a=this.region,b=this.controller[a].get(),c=this.views.get(),d=!c||c.length<2;this===b&&this.controller.$el.toggleClass("hide-"+a,d)},select:function(a){var b=this.get(a);b&&(this.deselect(),b.$el.addClass("active"))},deselect:function(){this.$el.children().removeClass("active")},hide:function(a){var b=this.get(a);b&&b.$el.addClass("hidden")},show:function(a){var b=this.get(a);b&&b.$el.removeClass("hidden")}}),a.exports=c},function(a,b){var c=wp.media.view.MenuItem.extend({click:function(){var a=this.options.contentMode;a&&this.controller.content.mode(a)}});a.exports=c},function(a,b){var c,d=wp.media.view.Menu;c=d.extend({tagName:"div",className:"media-router",property:"contentMode",ItemView:wp.media.view.RouterItem,region:"router",initialize:function(){this.controller.on("content:render",this.update,this),d.prototype.initialize.apply(this,arguments)},update:function(){var a=this.controller.content.mode();a&&this.select(a)}}),a.exports=c},function(a,b){var c=wp.media.view.PriorityList.extend({className:"media-sidebar"});a.exports=c},function(a,b){var c,d=wp.media.View,e=jQuery;c=d.extend({tagName:"li",className:"attachment",template:wp.template("attachment"),attributes:function(){return{tabIndex:0,role:"checkbox","aria-label":this.model.get("title"),"aria-checked":!1,"data-id":this.model.get("id")}},events:{click:"toggleSelectionHandler","change [data-setting]":"updateSetting","change [data-setting] input":"updateSetting","change [data-setting] select":"updateSetting","change [data-setting] textarea":"updateSetting","click .attachment-close":"removeFromLibrary","click .check":"checkClickHandler",keydown:"toggleSelectionHandler"},buttons:{},initialize:function(){var a=this.options.selection,b=_.defaults(this.options,{rerenderOnModelChange:!0});b.rerenderOnModelChange?this.listenTo(this.model,"change",this.render):this.listenTo(this.model,"change:percent",this.progress),this.listenTo(this.model,"change:title",this._syncTitle),this.listenTo(this.model,"change:caption",this._syncCaption),this.listenTo(this.model,"change:artist",this._syncArtist),this.listenTo(this.model,"change:album",this._syncAlbum),this.listenTo(this.model,"add",this.select),this.listenTo(this.model,"remove",this.deselect),a&&(a.on("reset",this.updateSelect,this),this.listenTo(this.model,"selection:single selection:unsingle",this.details),this.details(this.model,this.controller.state().get("selection"))),this.listenTo(this.controller,"attachment:compat:waiting attachment:compat:ready",this.updateSave)},dispose:function(){var a=this.options.selection;return this.updateAll(),a&&a.off(null,null,this),d.prototype.dispose.apply(this,arguments),this},render:function(){var a=_.defaults(this.model.toJSON(),{orientation:"landscape",uploading:!1,type:"",subtype:"",icon:"",filename:"",caption:"",title:"",dateFormatted:"",width:"",height:"",compat:!1,alt:"",description:""},this.options);return a.buttons=this.buttons,a.describe=this.controller.state().get("describe"),"image"===a.type&&(a.size=this.imageSize()),a.can={},a.nonces&&(a.can.remove=!!a.nonces["delete"],a.can.save=!!a.nonces.update),this.controller.state().get("allowLocalEdits")&&(a.allowLocalEdits=!0),a.uploading&&!a.percent&&(a.percent=0),this.views.detach(),this.$el.html(this.template(a)),this.$el.toggleClass("uploading",a.uploading),a.uploading?this.$bar=this.$(".media-progress-bar div"):delete this.$bar,this.updateSelect(),this.updateSave(),this.views.render(),this},progress:function(){this.$bar&&this.$bar.length&&this.$bar.width(this.model.get("percent")+"%")},toggleSelectionHandler:function(a){var b;if("INPUT"!==a.target.nodeName&&"BUTTON"!==a.target.nodeName){if(37===a.keyCode||38===a.keyCode||39===a.keyCode||40===a.keyCode)return void this.controller.trigger("attachment:keydown:arrow",a);if("keydown"!==a.type||13===a.keyCode||32===a.keyCode){if(a.preventDefault(),this.controller.isModeActive("grid")){if(this.controller.isModeActive("edit"))return void this.controller.trigger("edit:attachment",this.model,a.currentTarget);this.controller.isModeActive("select")&&(b="toggle")}a.shiftKey?b="between":(a.ctrlKey||a.metaKey)&&(b="toggle"),this.toggleSelection({method:b}),this.controller.trigger("selection:toggle")}}},toggleSelection:function(a){var b,c,d,e,f=this.collection,g=this.options.selection,h=this.model,i=a&&a.method;if(g){if(b=g.single(),i=_.isUndefined(i)?g.multiple:i,"between"===i&&b&&g.multiple){if(b===h)return;
-return d=f.indexOf(b),e=f.indexOf(this.model),c=d<e?f.models.slice(d,e+1):f.models.slice(e,d+1),g.add(c),void g.single(h)}if("toggle"===i)return g[this.selected()?"remove":"add"](h),void g.single(h);if("add"===i)return g.add(h),void g.single(h);i||(i="add"),"add"!==i&&(i="reset"),this.selected()?g[b===h?"remove":"single"](h):(g[i](h),g.single(h))}},updateSelect:function(){this[this.selected()?"select":"deselect"]()},selected:function(){var a=this.options.selection;if(a)return!!a.get(this.model.cid)},select:function(a,b){var c=this.options.selection,d=this.controller;!c||b&&b!==c||this.$el.hasClass("selected")||(this.$el.addClass("selected").attr("aria-checked",!0),d.isModeActive("grid")&&d.isModeActive("select")||this.$(".check").attr("tabindex","0"))},deselect:function(a,b){var c=this.options.selection;!c||b&&b!==c||this.$el.removeClass("selected").attr("aria-checked",!1).find(".check").attr("tabindex","-1")},details:function(a,b){var c,d=this.options.selection;d===b&&(c=d.single(),this.$el.toggleClass("details",c===this.model))},imageSize:function(a){var b=this.model.get("sizes"),c=!1;return a=a||"medium",b&&(b[a]?c=b[a]:b.large?c=b.large:b.thumbnail?c=b.thumbnail:b.full&&(c=b.full),c)?_.clone(c):{url:this.model.get("url"),width:this.model.get("width"),height:this.model.get("height"),orientation:this.model.get("orientation")}},updateSetting:function(a){var b,c,d=e(a.target).closest("[data-setting]");d.length&&(b=d.data("setting"),c=a.target.value,this.model.get(b)!==c&&this.save(b,c))},save:function(){var a=this,b=this._save=this._save||{status:"ready"},c=this.model.save.apply(this.model,arguments),d=b.requests?e.when(c,b.requests):c;b.savedTimer&&clearTimeout(b.savedTimer),this.updateSave("waiting"),b.requests=d,d.always(function(){b.requests===d&&(a.updateSave("resolved"===d.state()?"complete":"error"),b.savedTimer=setTimeout(function(){a.updateSave("ready"),delete b.savedTimer},2e3))})},updateSave:function(a){var b=this._save=this._save||{status:"ready"};return a&&a!==b.status&&(this.$el.removeClass("save-"+b.status),b.status=a),this.$el.addClass("save-"+b.status),this},updateAll:function(){var a,b=this.$("[data-setting]"),c=this.model;a=_.chain(b).map(function(a){var b,d,f=e("input, textarea, select, [value]",a);if(f.length)return b=e(a).data("setting"),d=f.val(),c.get(b)!==d?[b,d]:void 0}).compact().object().value(),_.isEmpty(a)||c.save(a)},removeFromLibrary:function(a){"keydown"===a.type&&13!==a.keyCode&&32!==a.keyCode||(a.stopPropagation(),this.collection.remove(this.model))},checkClickHandler:function(a){var b=this.options.selection;b&&(a.stopPropagation(),b.where({id:this.model.get("id")}).length?(b.remove(this.model),this.$el.focus()):b.add(this.model))}}),_.each({caption:"_syncCaption",title:"_syncTitle",artist:"_syncArtist",album:"_syncAlbum"},function(a,b){c.prototype[a]=function(a,c){var d=this.$('[data-setting="'+b+'"]');return d.length?c===d.find("input, textarea, select, [value]").val()?this:this.render():this}}),a.exports=c},function(a,b){var c=wp.media.view.Attachment.extend({buttons:{check:!0}});a.exports=c},function(a,b){var c=wp.media.view.Attachment.extend({buttons:{close:!0}});a.exports=c},function(a,b){var c,d=wp.media.View,e=jQuery;c=d.extend({tagName:"ul",className:"attachments",attributes:{tabIndex:-1},initialize:function(){this.el.id=_.uniqueId("__attachments-view-"),_.defaults(this.options,{refreshSensitivity:wp.media.isTouchDevice?300:200,refreshThreshold:3,AttachmentView:wp.media.view.Attachment,sortable:!1,resize:!0,idealColumnWidth:e(window).width()<640?135:150}),this._viewsByCid={},this.$window=e(window),this.resizeEvent="resize.media-modal-columns",this.collection.on("add",function(a){this.views.add(this.createAttachmentView(a),{at:this.collection.indexOf(a)})},this),this.collection.on("remove",function(a){var b=this._viewsByCid[a.cid];delete this._viewsByCid[a.cid],b&&b.remove()},this),this.collection.on("reset",this.render,this),this.listenTo(this.controller,"library:selection:add",this.attachmentFocus),this.scroll=_.chain(this.scroll).bind(this).throttle(this.options.refreshSensitivity).value(),this.options.scrollElement=this.options.scrollElement||this.el,e(this.options.scrollElement).on("scroll",this.scroll),this.initSortable(),_.bindAll(this,"setColumns"),this.options.resize&&(this.on("ready",this.bindEvents),this.controller.on("open",this.setColumns),_.defer(this.setColumns,this))},bindEvents:function(){this.$window.off(this.resizeEvent).on(this.resizeEvent,_.debounce(this.setColumns,50))},attachmentFocus:function(){this.$("li:first").focus()},restoreFocus:function(){this.$("li.selected:first").focus()},arrowEvent:function(a){var b=this.$el.children("li"),c=this.columns,d=b.filter(":focus").index(),e=d+1<=c?1:Math.ceil((d+1)/c);if(d!==-1){if(37===a.keyCode){if(0===d)return;b.eq(d-1).focus()}if(38===a.keyCode){if(1===e)return;b.eq(d-c).focus()}if(39===a.keyCode){if(b.length===d)return;b.eq(d+1).focus()}if(40===a.keyCode){if(Math.ceil(b.length/c)===e)return;b.eq(d+c).focus()}}},dispose:function(){this.collection.props.off(null,null,this),this.options.resize&&this.$window.off(this.resizeEvent),d.prototype.dispose.apply(this,arguments)},setColumns:function(){var a=this.columns,b=this.$el.width();b&&(this.columns=Math.min(Math.round(b/this.options.idealColumnWidth),12)||1,a&&a===this.columns||this.$el.closest(".media-frame-content").attr("data-columns",this.columns))},initSortable:function(){var a=this.collection;this.options.sortable&&e.fn.sortable&&(this.$el.sortable(_.extend({disabled:!!a.comparator,tolerance:"pointer",start:function(a,b){b.item.data("sortableIndexStart",b.item.index())},update:function(b,c){var d=a.at(c.item.data("sortableIndexStart")),e=a.comparator;delete a.comparator,a.remove(d,{silent:!0}),a.add(d,{silent:!0,at:c.item.index()}),a.comparator=e,a.trigger("reset",a),a.saveMenuOrder()}},this.options.sortable)),a.props.on("change:orderby",function(){this.$el.sortable("option","disabled",!!a.comparator)},this),this.collection.props.on("change:orderby",this.refreshSortable,this),this.refreshSortable())},refreshSortable:function(){if(this.options.sortable&&e.fn.sortable){var a=this.collection,b=a.props.get("orderby"),c="menuOrder"===b||!a.comparator;this.$el.sortable("option","disabled",!c)}},createAttachmentView:function(a){var b=new this.options.AttachmentView({controller:this.controller,model:a,collection:this.collection,selection:this.options.selection});return this._viewsByCid[a.cid]=b},prepare:function(){this.collection.length?this.views.set(this.collection.map(this.createAttachmentView,this)):(this.views.unset(),this.collection.more().done(this.scroll))},ready:function(){this.scroll()},scroll:function(){var a,b=this,c=this.options.scrollElement,d=c.scrollTop;c===document&&(c=document.body,d=e(document).scrollTop()),e(c).is(":visible")&&this.collection.hasMore()&&(a=this.views.parent.toolbar,c.scrollHeight-(d+c.clientHeight)<c.clientHeight/3&&a.get("spinner").show(),c.scrollHeight<d+c.clientHeight*this.options.refreshThreshold&&this.collection.more().done(function(){b.scroll(),a.get("spinner").hide()}))}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.View.extend({tagName:"input",className:"search",id:"media-search-input",attributes:{type:"search",placeholder:d.searchMediaPlaceholder},events:{input:"search",keyup:"search"},render:function(){return this.el.value=this.model.escape("search"),this},search:_.debounce(function(a){a.target.value?this.model.set("search",a.target.value):this.model.unset("search")},300)}),a.exports=c},function(a,b){var c,d=jQuery;c=wp.media.View.extend({tagName:"select",className:"attachment-filters",id:"media-attachment-filters",events:{change:"change"},keys:[],initialize:function(){this.createFilters(),_.extend(this.filters,this.options.filters),this.$el.html(_.chain(this.filters).map(function(a,b){return{el:d("<option></option>").val(b).html(a.text)[0],priority:a.priority||50}},this).sortBy("priority").pluck("el").value()),this.listenTo(this.model,"change",this.select),this.select()},createFilters:function(){this.filters={}},change:function(){var a=this.filters[this.el.value];a&&this.model.set(a.props)},select:function(){var a=this.model,b="all",c=a.toJSON();_.find(this.filters,function(a,d){var e=_.all(a.props,function(a,b){return a===(_.isUndefined(c[b])?null:c[b])});if(e)return b=d}),this.$el.val(b)}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.view.AttachmentFilters.extend({id:"media-attachment-date-filters",createFilters:function(){var a={};_.each(wp.media.view.settings.months||{},function(b,c){a[c]={text:b.text,props:{year:b.year,monthnum:b.month}}}),a.all={text:d.allDates,props:{monthnum:!1,year:!1},priority:10},this.filters=a}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.view.AttachmentFilters.extend({createFilters:function(){var a,b=this.model.get("type"),c=wp.media.view.settings.mimeTypes;c&&b&&(a=c[b]),this.filters={all:{text:a||d.allMediaItems,props:{uploadedTo:null,orderby:"date",order:"DESC"},priority:10},uploaded:{text:d.uploadedToThisPost,props:{uploadedTo:wp.media.view.settings.post.id,orderby:"menuOrder",order:"ASC"},priority:20},unattached:{text:d.unattached,props:{uploadedTo:0,orderby:"menuOrder",order:"ASC"},priority:50}}}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.view.AttachmentFilters.extend({createFilters:function(){var a={};_.each(wp.media.view.settings.mimeTypes||{},function(b,c){a[c]={text:b,props:{status:null,type:c,uploadedTo:null,orderby:"date",order:"DESC"}}}),a.all={text:d.allMediaItems,props:{status:null,type:null,uploadedTo:null,orderby:"date",order:"DESC"},priority:10},wp.media.view.settings.post.id&&(a.uploaded={text:d.uploadedToThisPost,props:{status:null,type:null,uploadedTo:wp.media.view.settings.post.id,orderby:"menuOrder",order:"ASC"},priority:20}),a.unattached={text:d.unattached,props:{status:null,uploadedTo:0,type:null,orderby:"menuOrder",order:"ASC"},priority:50},wp.media.view.settings.mediaTrash&&this.controller.isModeActive("grid")&&(a.trash={text:d.trash,props:{uploadedTo:null,status:"trash",type:null,orderby:"date",order:"DESC"},priority:50}),this.filters=a}}),a.exports=c},function(a,b){var c,d=wp.media.View,e=wp.media.view.settings.mediaTrash,f=wp.media.view.l10n,g=jQuery;c=d.extend({tagName:"div",className:"attachments-browser",initialize:function(){_.defaults(this.options,{filters:!1,search:!0,date:!0,display:!1,sidebar:!0,AttachmentView:wp.media.view.Attachment.Library}),this.controller.on("toggle:upload:attachment",this.toggleUploader,this),this.controller.on("edit:selection",this.editSelection),this.options.sidebar&&"errors"===this.options.sidebar&&this.createSidebar(),this.createUploader(),this.createToolbar(),this.createAttachments(),this.options.sidebar&&"errors"!==this.options.sidebar&&this.createSidebar(),this.updateContent(),this.options.sidebar&&"errors"!==this.options.sidebar||(this.$el.addClass("hide-sidebar"),"errors"===this.options.sidebar&&this.$el.addClass("sidebar-for-errors")),this.collection.on("add remove reset",this.updateContent,this)},editSelection:function(a){a.$(".media-button-backToLibrary").focus()},dispose:function(){return this.options.selection.off(null,null,this),d.prototype.dispose.apply(this,arguments),this},createToolbar:function(){var a,b,c;c={controller:this.controller},this.controller.isModeActive("grid")&&(c.className="media-toolbar wp-filter"),this.toolbar=new wp.media.view.Toolbar(c),this.views.add(this.toolbar),this.toolbar.set("spinner",new wp.media.view.Spinner({priority:-60})),-1!==g.inArray(this.options.filters,["uploaded","all"])&&(this.toolbar.set("filtersLabel",new wp.media.view.Label({value:f.filterByType,attributes:{"for":"media-attachment-filters"},priority:-80}).render()),"uploaded"===this.options.filters?this.toolbar.set("filters",new wp.media.view.AttachmentFilters.Uploaded({controller:this.controller,model:this.collection.props,priority:-80}).render()):(b=new wp.media.view.AttachmentFilters.All({controller:this.controller,model:this.collection.props,priority:-80}),this.toolbar.set("filters",b.render()))),this.controller.isModeActive("grid")?(a=d.extend({className:"view-switch media-grid-view-switch",template:wp.template("media-library-view-switcher")}),this.toolbar.set("libraryViewSwitcher",new a({controller:this.controller,priority:-90}).render()),this.toolbar.set("dateFilterLabel",new wp.media.view.Label({value:f.filterByDate,attributes:{"for":"media-attachment-date-filters"},priority:-75}).render()),this.toolbar.set("dateFilter",new wp.media.view.DateFilter({controller:this.controller,model:this.collection.props,priority:-75}).render()),this.toolbar.set("selectModeToggleButton",new wp.media.view.SelectModeToggleButton({text:f.bulkSelect,controller:this.controller,priority:-70}).render()),this.toolbar.set("deleteSelectedButton",new wp.media.view.DeleteSelectedButton({filters:b,style:"primary",disabled:!0,text:e?f.trashSelected:f.deleteSelected,controller:this.controller,priority:-60,click:function(){var a=[],b=[],c=this.controller.state().get("selection"),d=this.controller.state().get("library");c.length&&(e||window.confirm(f.warnBulkDelete))&&(e&&"trash"!==c.at(0).get("status")&&!window.confirm(f.warnBulkTrash)||(c.each(function(c){return c.get("nonces")["delete"]?void(e&&"trash"===c.get("status")?(c.set("status","inherit"),a.push(c.save()),b.push(c)):e?(c.set("status","trash"),a.push(c.save()),b.push(c)):c.destroy({wait:!0})):void b.push(c)}),a.length?(c.remove(b),g.when.apply(null,a).then(_.bind(function(){d._requery(!0),this.controller.trigger("selection:action:done")},this))):this.controller.trigger("selection:action:done")))}}).render()),e&&this.toolbar.set("deleteSelectedPermanentlyButton",new wp.media.view.DeleteSelectedPermanentlyButton({filters:b,style:"primary",disabled:!0,text:f.deleteSelected,controller:this.controller,priority:-55,click:function(){var a=[],b=[],c=this.controller.state().get("selection");c.length&&window.confirm(f.warnBulkDelete)&&(c.each(function(c){return c.get("nonces")["delete"]?void b.push(c):void a.push(c)}),a.length&&c.remove(a),b.length&&g.when.apply(null,b.map(function(a){return a.destroy()})).then(_.bind(function(){this.controller.trigger("selection:action:done")},this)))}}).render())):this.options.date&&(this.toolbar.set("dateFilterLabel",new wp.media.view.Label({value:f.filterByDate,attributes:{"for":"media-attachment-date-filters"},priority:-75}).render()),this.toolbar.set("dateFilter",new wp.media.view.DateFilter({controller:this.controller,model:this.collection.props,priority:-75}).render())),this.options.search&&(this.toolbar.set("searchLabel",new wp.media.view.Label({value:f.searchMediaLabel,attributes:{"for":"media-search-input"},priority:60}).render()),this.toolbar.set("search",new wp.media.view.Search({controller:this.controller,model:this.collection.props,priority:60}).render())),this.options.dragInfo&&this.toolbar.set("dragInfo",new d({el:g('<div class="instructions">'+f.dragInfo+"</div>")[0],priority:-40})),this.options.suggestedWidth&&this.options.suggestedHeight&&this.toolbar.set("suggestedDimensions",new d({el:g('<div class="instructions">'+f.suggestedDimensions.replace("%1$s",this.options.suggestedWidth).replace("%2$s",this.options.suggestedHeight)+"</div>")[0],priority:-40}))},updateContent:function(){var a,b=this;a=this.controller.isModeActive("grid")?b.attachmentsNoResults:b.uploader,this.collection.length?(a.$el.addClass("hidden"),b.toolbar.get("spinner").hide()):(this.toolbar.get("spinner").show(),this.dfd=this.collection.more().done(function(){b.collection.length?a.$el.addClass("hidden"):a.$el.removeClass("hidden"),b.toolbar.get("spinner").hide()}))},createUploader:function(){this.uploader=new wp.media.view.UploaderInline({controller:this.controller,status:!1,message:this.controller.isModeActive("grid")?"":f.noItemsFound,canClose:this.controller.isModeActive("grid")}),this.uploader.$el.addClass("hidden"),this.views.add(this.uploader)},toggleUploader:function(){this.uploader.$el.hasClass("hidden")?this.uploader.show():this.uploader.hide()},createAttachments:function(){this.attachments=new wp.media.view.Attachments({controller:this.controller,collection:this.collection,selection:this.options.selection,model:this.model,sortable:this.options.sortable,scrollElement:this.options.scrollElement,idealColumnWidth:this.options.idealColumnWidth,AttachmentView:this.options.AttachmentView}),this.controller.on("attachment:keydown:arrow",_.bind(this.attachments.arrowEvent,this.attachments)),this.controller.on("attachment:details:shift-tab",_.bind(this.attachments.restoreFocus,this.attachments)),this.views.add(this.attachments),this.controller.isModeActive("grid")&&(this.attachmentsNoResults=new d({controller:this.controller,tagName:"p"}),this.attachmentsNoResults.$el.addClass("hidden no-media"),this.attachmentsNoResults.$el.html(f.noMedia),this.views.add(this.attachmentsNoResults))},createSidebar:function(){var a=this.options,b=a.selection,c=this.sidebar=new wp.media.view.Sidebar({controller:this.controller});this.views.add(c),this.controller.uploader&&c.set("uploads",new wp.media.view.UploaderStatus({controller:this.controller,priority:40})),b.on("selection:single",this.createSingle,this),b.on("selection:unsingle",this.disposeSingle,this),b.single()&&this.createSingle()},createSingle:function(){var a=this.sidebar,b=this.options.selection.single();a.set("details",new wp.media.view.Attachment.Details({controller:this.controller,model:b,priority:80})),a.set("compat",new wp.media.view.AttachmentCompat({controller:this.controller,model:b,priority:120})),this.options.display&&a.set("display",new wp.media.view.Settings.AttachmentDisplay({controller:this.controller,model:this.model.display(b),attachment:b,priority:160,userSettings:this.model.get("displayUserSettings")})),"insert"===this.model.id&&a.$el.addClass("visible")},disposeSingle:function(){var a=this.sidebar;a.unset("details"),a.unset("compat"),a.unset("display"),a.$el.removeClass("visible")}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.View.extend({tagName:"div",className:"media-selection",template:wp.template("media-selection"),events:{"click .edit-selection":"edit","click .clear-selection":"clear"},initialize:function(){_.defaults(this.options,{editable:!1,clearable:!0}),this.attachments=new wp.media.view.Attachments.Selection({controller:this.controller,collection:this.collection,selection:this.collection,model:new Backbone.Model}),this.views.set(".selection-view",this.attachments),this.collection.on("add remove reset",this.refresh,this),this.controller.on("content:activate",this.refresh,this)},ready:function(){this.refresh()},refresh:function(){if(this.$el.children().length){var a=this.collection,b="edit-selection"===this.controller.content.mode();this.$el.toggleClass("empty",!a.length),this.$el.toggleClass("one",1===a.length),this.$el.toggleClass("editing",b),this.$(".count").text(d.selected.replace("%d",a.length))}},edit:function(a){a.preventDefault(),this.options.editable&&this.options.editable.call(this,this.collection)},clear:function(a){a.preventDefault(),this.collection.reset(),this.controller.modal.focusManager.focus()}}),a.exports=c},function(a,b){var c=wp.media.view.Attachment.extend({className:"attachment selection",toggleSelection:function(){this.options.selection.single(this.model)}});a.exports=c},function(a,b){var c,d=wp.media.view.Attachments;c=d.extend({events:{},initialize:function(){return _.defaults(this.options,{sortable:!1,resize:!1,AttachmentView:wp.media.view.Attachment.Selection}),d.prototype.initialize.apply(this,arguments)}}),a.exports=c},function(a,b){var c=wp.media.view.Attachment.Selection.extend({buttons:{close:!0}});a.exports=c},function(a,b){var c,d=wp.media.View,e=Backbone.$;c=d.extend({events:{"click button":"updateHandler","change input":"updateHandler","change select":"updateHandler","change textarea":"updateHandler"},initialize:function(){this.model=this.model||new Backbone.Model,this.listenTo(this.model,"change",this.updateChanges)},prepare:function(){return _.defaults({model:this.model.toJSON()},this.options)},render:function(){return d.prototype.render.apply(this,arguments),_(this.model.attributes).chain().keys().each(this.update,this),this},update:function(a){var b,c,d=this.model.get(a),e=this.$('[data-setting="'+a+'"]');e.length&&(e.is("select")?(c=e.find('[value="'+d+'"]'),c.length?(e.find("option").prop("selected",!1),c.prop("selected",!0)):this.model.set(a,e.find(":selected").val())):e.hasClass("button-group")?(b=e.find("button").removeClass("active"),b.filter('[value="'+d+'"]').addClass("active")):e.is('input[type="text"], textarea')?e.is(":focus")||e.val(d):e.is('input[type="checkbox"]')&&e.prop("checked",!!d&&"false"!==d))},updateHandler:function(a){var b,c=e(a.target).closest("[data-setting]"),d=a.target.value;a.preventDefault(),c.length&&(c.is('input[type="checkbox"]')&&(d=c[0].checked),this.model.set(c.data("setting"),d),(b=c.data("userSetting"))&&window.setUserSetting(b,d))},updateChanges:function(a){a.hasChanged()&&_(a.changed).chain().keys().each(this.update,this)}}),a.exports=c},function(a,b){var c,d=wp.media.view.Settings;c=d.extend({className:"attachment-display-settings",template:wp.template("attachment-display-settings"),initialize:function(){var a=this.options.attachment;_.defaults(this.options,{userSettings:!1}),d.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change:link",this.updateLinkTo),a&&a.on("change:uploading",this.render,this)},dispose:function(){var a=this.options.attachment;a&&a.off(null,null,this),d.prototype.dispose.apply(this,arguments)},render:function(){var a=this.options.attachment;return a&&_.extend(this.options,{sizes:a.get("sizes"),type:a.get("type")}),d.prototype.render.call(this),this.updateLinkTo(),this},updateLinkTo:function(){var a=this.model.get("link"),b=this.$(".link-to-custom"),c=this.options.attachment;return"none"===a||"embed"===a||!c&&"custom"!==a?void b.addClass("hidden"):(c&&("post"===a?b.val(c.get("link")):"file"===a?b.val(c.get("url")):this.model.get("linkUrl")||b.val("http://"),b.prop("readonly","custom"!==a)),b.removeClass("hidden"),void(!wp.media.isTouchDevice&&b.is(":visible")&&b.focus()[0].select()))}}),a.exports=c},function(a,b){var c=wp.media.view.Settings.extend({className:"collection-settings gallery-settings",template:wp.template("gallery-settings")});a.exports=c},function(a,b){var c=wp.media.view.Settings.extend({className:"collection-settings playlist-settings",template:wp.template("playlist-settings")});a.exports=c},function(a,b){var c,d=wp.media.view.Attachment,e=wp.media.view.l10n;c=d.extend({tagName:"div",className:"attachment-details",template:wp.template("attachment-details"),attributes:function(){return{tabIndex:0,"data-id":this.model.get("id")}},events:{"change [data-setting]":"updateSetting","change [data-setting] input":"updateSetting","change [data-setting] select":"updateSetting","change [data-setting] textarea":"updateSetting","click .delete-attachment":"deleteAttachment","click .trash-attachment":"trashAttachment","click .untrash-attachment":"untrashAttachment","click .edit-attachment":"editAttachment",keydown:"toggleSelectionHandler"},initialize:function(){this.options=_.defaults(this.options,{rerenderOnModelChange:!1}),this.on("ready",this.initialFocus),d.prototype.initialize.apply(this,arguments)},initialFocus:function(){wp.media.isTouchDevice||this.$('input[type="text"]').eq(0).focus()},deleteAttachment:function(a){a.preventDefault(),window.confirm(e.warnDelete)&&(this.model.destroy(),this.controller.modal.focusManager.focus())},trashAttachment:function(a){var b=this.controller.library;a.preventDefault(),wp.media.view.settings.mediaTrash&&"edit-metadata"===this.controller.content.mode()?(this.model.set("status","trash"),this.model.save().done(function(){b._requery(!0)})):this.model.destroy()},untrashAttachment:function(a){var b=this.controller.library;a.preventDefault(),this.model.set("status","inherit"),this.model.save().done(function(){b._requery(!0)})},editAttachment:function(a){var b=this.controller.states.get("edit-image");window.imageEdit&&b?(a.preventDefault(),b.set("image",this.model),this.controller.setState("edit-image")):this.$el.addClass("needs-refresh")},toggleSelectionHandler:function(a){return"keydown"===a.type&&9===a.keyCode&&a.shiftKey&&a.target===this.$(":tabbable").get(0)?(this.controller.trigger("attachment:details:shift-tab",a),!1):37===a.keyCode||38===a.keyCode||39===a.keyCode||40===a.keyCode?void this.controller.trigger("attachment:keydown:arrow",a):void 0}}),a.exports=c},function(a,b){var c,d=wp.media.View;c=d.extend({tagName:"form",className:"compat-item",events:{submit:"preventDefault","change input":"save","change select":"save","change textarea":"save"},initialize:function(){this.listenTo(this.model,"change:compat",this.render)},dispose:function(){return this.$(":focus").length&&this.save(),d.prototype.dispose.apply(this,arguments)},render:function(){var a=this.model.get("compat");if(a&&a.item)return this.views.detach(),this.$el.html(a.item),this.views.render(),this},preventDefault:function(a){a.preventDefault()},save:function(a){var b={};a&&a.preventDefault(),_.each(this.$el.serializeArray(),function(a){b[a.name]=a.value}),this.controller.trigger("attachment:compat:waiting",["waiting"]),this.model.saveCompat(b).always(_.bind(this.postSave,this))},postSave:function(){this.controller.trigger("attachment:compat:ready",["ready"])}}),a.exports=c},function(a,b){var c=wp.media.View.extend({className:"media-iframe",render:function(){return this.views.detach(),this.$el.html('<iframe src="'+this.controller.state().get("src")+'" />'),this.views.render(),this}});a.exports=c},function(a,b){var c=wp.media.View.extend({className:"media-embed",initialize:function(){this.url=new wp.media.view.EmbedUrl({controller:this.controller,model:this.model.props}).render(),this.views.set([this.url]),this.refresh(),this.listenTo(this.model,"change:type",this.refresh),this.listenTo(this.model,"change:loading",this.loading)},settings:function(a){this._settings&&this._settings.remove(),this._settings=a,this.views.add(a)},refresh:function(){var a,b=this.model.get("type");if("image"===b)a=wp.media.view.EmbedImage;else{if("link"!==b)return;a=wp.media.view.EmbedLink}this.settings(new a({controller:this.controller,model:this.model.props,priority:40}))},loading:function(){this.$el.toggleClass("embed-loading",this.model.get("loading"))}});a.exports=c},function(a,b){var c=wp.media.View.extend({tagName:"label",className:"screen-reader-text",initialize:function(){this.value=this.options.value},render:function(){return this.$el.html(this.value),this}});a.exports=c},function(a,b){var c,d=wp.media.View,e=jQuery;c=d.extend({tagName:"label",className:"embed-url",events:{input:"url",keyup:"url",change:"url"},initialize:function(){this.$input=e('<input id="embed-url-field" type="url" />').val(this.model.get("url")),this.input=this.$input[0],this.spinner=e('<span class="spinner" />')[0],this.$el.append([this.input,this.spinner]),this.listenTo(this.model,"change:url",this.render),this.model.get("url")&&_.delay(_.bind(function(){this.model.trigger("change:url")},this),500)},render:function(){var a=this.$input;if(!a.is(":focus"))return this.input.value=this.model.get("url")||"http://",d.prototype.render.apply(this,arguments),this},ready:function(){wp.media.isTouchDevice||this.focus()},url:function(a){this.model.set("url",e.trim(a.target.value))},focus:function(){var a=this.$input;a.is(":visible")&&a.focus()[0].select()}}),a.exports=c},function(a,b){var c,d=jQuery;c=wp.media.view.Settings.extend({className:"embed-link-settings",template:wp.template("embed-link-settings"),initialize:function(){this.listenTo(this.model,"change:url",this.updateoEmbed)},updateoEmbed:_.debounce(function(){var a=this.model.get("url");this.$(".embed-container").hide().find(".embed-preview").empty(),this.$(".setting").hide(),a&&(a.length<11||!a.match(/^http(s)?:\/\//))||this.fetch()},wp.media.controller.Embed.sensitivity),fetch:function(){var a,b,c=this.model.get("url");d("#embed-url-field").val()===c&&(this.dfd&&"pending"===this.dfd.state()&&this.dfd.abort(),a=/https?:\/\/www\.youtube\.com\/embed\/([^\/]+)/,b=a.exec(c),b&&(c="https://www.youtube.com/watch?v="+b[1]),this.dfd=wp.apiRequest({url:wp.media.view.settings.oEmbedProxyUrl,data:{url:c,maxwidth:this.model.get("width"),maxheight:this.model.get("height")},type:"GET",dataType:"json",context:this}).done(function(a){this.renderoEmbed({data:{body:a.html||""}})}).fail(this.renderFail))},renderFail:function(a,b){"abort"!==b&&this.$(".link-text").show()},renderoEmbed:function(a){var b=a&&a.data&&a.data.body||"";b?this.$(".embed-container").show().find(".embed-preview").html(b):this.renderFail()}}),a.exports=c},function(a,b){var c,d=wp.media.view.Settings.AttachmentDisplay;c=d.extend({className:"embed-media-settings",template:wp.template("embed-image-settings"),initialize:function(){d.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change:url",this.updateImage)},updateImage:function(){this.$("img").attr("src",this.model.get("url"))}}),a.exports=c},function(a,b){var c,d=wp.media.view.Settings.AttachmentDisplay,e=jQuery;c=d.extend({className:"image-details",template:wp.template("image-details"),events:_.defaults(d.prototype.events,{"click .edit-attachment":"editAttachment","click .replace-attachment":"replaceAttachment","click .advanced-toggle":"onToggleAdvanced",'change [data-setting="customWidth"]':"onCustomSize",'change [data-setting="customHeight"]':"onCustomSize",'keyup [data-setting="customWidth"]':"onCustomSize",'keyup [data-setting="customHeight"]':"onCustomSize"}),initialize:function(){this.options.attachment=this.model.attachment,this.listenTo(this.model,"change:url",this.updateUrl),this.listenTo(this.model,"change:link",this.toggleLinkSettings),this.listenTo(this.model,"change:size",this.toggleCustomSize),d.prototype.initialize.apply(this,arguments)},prepare:function(){var a=!1;return this.model.attachment&&(a=this.model.attachment.toJSON()),_.defaults({model:this.model.toJSON(),attachment:a},this.options)},render:function(){var a=arguments;return this.model.attachment&&"pending"===this.model.dfd.state()?this.model.dfd.done(_.bind(function(){d.prototype.render.apply(this,a),this.postRender()},this)).fail(_.bind(function(){this.model.attachment=!1,d.prototype.render.apply(this,a),this.postRender()},this)):(d.prototype.render.apply(this,arguments),this.postRender()),this},postRender:function(){setTimeout(_.bind(this.resetFocus,this),10),this.toggleLinkSettings(),"show"===window.getUserSetting("advImgDetails")&&this.toggleAdvanced(!0),this.trigger("post-render")},resetFocus:function(){this.$(".link-to-custom").blur(),this.$(".embed-media-settings").scrollTop(0)},updateUrl:function(){this.$(".image img").attr("src",this.model.get("url")),this.$(".url").val(this.model.get("url"))},toggleLinkSettings:function(){"none"===this.model.get("link")?this.$(".link-settings").addClass("hidden"):this.$(".link-settings").removeClass("hidden")},toggleCustomSize:function(){"custom"!==this.model.get("size")?this.$(".custom-size").addClass("hidden"):this.$(".custom-size").removeClass("hidden")},onCustomSize:function(a){var b,c=e(a.target).data("setting"),d=e(a.target).val();return!/^\d+/.test(d)||parseInt(d,10)<1?void a.preventDefault():void("customWidth"===c?(b=Math.round(1/this.model.get("aspectRatio")*d),this.model.set("customHeight",b,{silent:!0}),this.$('[data-setting="customHeight"]').val(b)):(b=Math.round(this.model.get("aspectRatio")*d),this.model.set("customWidth",b,{silent:!0}),this.$('[data-setting="customWidth"]').val(b)))},onToggleAdvanced:function(a){a.preventDefault(),this.toggleAdvanced()},toggleAdvanced:function(a){var b,c=this.$el.find(".advanced-section");c.hasClass("advanced-visible")||a===!1?(c.removeClass("advanced-visible"),c.find(".advanced-settings").addClass("hidden"),b="hide"):(c.addClass("advanced-visible"),
-c.find(".advanced-settings").removeClass("hidden"),b="show"),window.setUserSetting("advImgDetails",b)},editAttachment:function(a){var b=this.controller.states.get("edit-image");window.imageEdit&&b&&(a.preventDefault(),b.set("image",this.model.attachment),this.controller.setState("edit-image"))},replaceAttachment:function(a){a.preventDefault(),this.controller.setState("replace-image")}}),a.exports=c},function(a,b){var c,d=wp.media.View,e=wp.media.view.UploaderStatus,f=wp.media.view.l10n,g=jQuery;c=d.extend({className:"crop-content",template:wp.template("crop-content"),initialize:function(){_.bindAll(this,"onImageLoad")},ready:function(){this.controller.frame.on("content:error:crop",this.onError,this),this.$image=this.$el.find(".crop-image"),this.$image.on("load",this.onImageLoad),g(window).on("resize.cropper",_.debounce(this.onImageLoad,250))},remove:function(){g(window).off("resize.cropper"),this.$el.remove(),this.$el.off(),d.prototype.remove.apply(this,arguments)},prepare:function(){return{title:f.cropYourImage,url:this.options.attachment.get("url")}},onImageLoad:function(){var a,b=this.controller.get("imgSelectOptions");"function"==typeof b&&(b=b(this.options.attachment,this.controller)),b=_.extend(b,{parent:this.$el,onInit:function(){var b=a.getOptions().aspectRatio;this.parent.children().on("mousedown touchstart",function(c){!b&&c.shiftKey&&a.setOptions({aspectRatio:"1:1"})}),this.parent.children().on("mouseup touchend",function(){a.setOptions({aspectRatio:!!b&&b})})}}),this.trigger("image-loaded"),a=this.controller.imgSelect=this.$image.imgAreaSelect(b)},onError:function(){var a=this.options.attachment.get("filename");this.views.add(".upload-errors",new wp.media.view.UploaderStatusError({filename:e.prototype.filename(a),message:window._wpMediaViewsL10n.cropError}),{at:0})}}),a.exports=c},function(a,b){var c,d=wp.media.view;c=d.Cropper.extend({className:"crop-content site-icon",ready:function(){d.Cropper.prototype.ready.apply(this,arguments),this.$(".crop-image").on("load",_.bind(this.addSidebar,this))},addSidebar:function(){this.sidebar=new wp.media.view.Sidebar({controller:this.controller}),this.sidebar.set("preview",new wp.media.view.SiteIconPreview({controller:this.controller,attachment:this.options.attachment})),this.controller.cropperView.views.add(this.sidebar)}}),a.exports=c},function(a,b){var c,d=wp.media.View,e=jQuery;c=d.extend({className:"site-icon-preview",template:wp.template("site-icon-preview"),ready:function(){this.controller.imgSelect.setOptions({onInit:this.updatePreview,onSelectChange:this.updatePreview})},prepare:function(){return{url:this.options.attachment.get("url")}},updatePreview:function(a,b){var c=64/b.width,d=64/b.height,f=16/b.width,g=16/b.height;e("#preview-app-icon").css({width:Math.round(c*this.imageWidth)+"px",height:Math.round(d*this.imageHeight)+"px",marginLeft:"-"+Math.round(c*b.x1)+"px",marginTop:"-"+Math.round(d*b.y1)+"px"}),e("#preview-favicon").css({width:Math.round(f*this.imageWidth)+"px",height:Math.round(g*this.imageHeight)+"px",marginLeft:"-"+Math.round(f*b.x1)+"px",marginTop:"-"+Math.floor(g*b.y1)+"px"})}}),a.exports=c},function(a,b){var c,d=wp.media.View;c=d.extend({className:"image-editor",template:wp.template("image-editor"),initialize:function(a){this.editor=window.imageEdit,this.controller=a.controller,d.prototype.initialize.apply(this,arguments)},prepare:function(){return this.model.toJSON()},loadEditor:function(){var a=this.editor.open(this.model.get("id"),this.model.get("nonces").edit,this);a.done(_.bind(this.focus,this))},focus:function(){this.$(".imgedit-submit .button").eq(0).focus()},back:function(){var a=this.controller.lastState();this.controller.setState(a)},refresh:function(){this.model.fetch()},save:function(){var a=this.controller.lastState();this.model.fetch().done(_.bind(function(){this.controller.setState(a)},this))}}),a.exports=c},function(a,b){var c=wp.media.View.extend({tagName:"span",className:"spinner",spinnerTimeout:!1,delay:400,show:function(){return this.spinnerTimeout||(this.spinnerTimeout=_.delay(function(a){a.addClass("is-active")},this.delay,this.$el)),this},hide:function(){return this.$el.removeClass("is-active"),this.spinnerTimeout=clearTimeout(this.spinnerTimeout),this}});a.exports=c}]));
\ No newline at end of file
+return d=f.indexOf(b),e=f.indexOf(this.model),c=d<e?f.models.slice(d,e+1):f.models.slice(e,d+1),g.add(c),void g.single(h)}if("toggle"===i)return g[this.selected()?"remove":"add"](h),void g.single(h);if("add"===i)return g.add(h),void g.single(h);i||(i="add"),"add"!==i&&(i="reset"),this.selected()?g[b===h?"remove":"single"](h):(g[i](h),g.single(h))}},updateSelect:function(){this[this.selected()?"select":"deselect"]()},selected:function(){var a=this.options.selection;if(a)return!!a.get(this.model.cid)},select:function(a,b){var c=this.options.selection,d=this.controller;!c||b&&b!==c||this.$el.hasClass("selected")||(this.$el.addClass("selected").attr("aria-checked",!0),d.isModeActive("grid")&&d.isModeActive("select")||this.$(".check").attr("tabindex","0"))},deselect:function(a,b){var c=this.options.selection;!c||b&&b!==c||this.$el.removeClass("selected").attr("aria-checked",!1).find(".check").attr("tabindex","-1")},details:function(a,b){var c,d=this.options.selection;d===b&&(c=d.single(),this.$el.toggleClass("details",c===this.model))},imageSize:function(a){var b=this.model.get("sizes"),c=!1;return a=a||"medium",b&&(b[a]?c=b[a]:b.large?c=b.large:b.thumbnail?c=b.thumbnail:b.full&&(c=b.full),c)?_.clone(c):{url:this.model.get("url"),width:this.model.get("width"),height:this.model.get("height"),orientation:this.model.get("orientation")}},updateSetting:function(a){var b,c,d=e(a.target).closest("[data-setting]");d.length&&(b=d.data("setting"),c=a.target.value,this.model.get(b)!==c&&this.save(b,c))},save:function(){var a=this,b=this._save=this._save||{status:"ready"},c=this.model.save.apply(this.model,arguments),d=b.requests?e.when(c,b.requests):c;b.savedTimer&&clearTimeout(b.savedTimer),this.updateSave("waiting"),b.requests=d,d.always(function(){b.requests===d&&(a.updateSave("resolved"===d.state()?"complete":"error"),b.savedTimer=setTimeout(function(){a.updateSave("ready"),delete b.savedTimer},2e3))})},updateSave:function(a){var b=this._save=this._save||{status:"ready"};return a&&a!==b.status&&(this.$el.removeClass("save-"+b.status),b.status=a),this.$el.addClass("save-"+b.status),this},updateAll:function(){var a,b=this.$("[data-setting]"),c=this.model;a=_.chain(b).map(function(a){var b,d,f=e("input, textarea, select, [value]",a);if(f.length)return b=e(a).data("setting"),d=f.val(),c.get(b)!==d?[b,d]:void 0}).compact().object().value(),_.isEmpty(a)||c.save(a)},removeFromLibrary:function(a){"keydown"===a.type&&13!==a.keyCode&&32!==a.keyCode||(a.stopPropagation(),this.collection.remove(this.model))},checkClickHandler:function(a){var b=this.options.selection;b&&(a.stopPropagation(),b.where({id:this.model.get("id")}).length?(b.remove(this.model),this.$el.focus()):b.add(this.model))}}),_.each({caption:"_syncCaption",title:"_syncTitle",artist:"_syncArtist",album:"_syncAlbum"},function(a,b){c.prototype[a]=function(a,c){var d=this.$('[data-setting="'+b+'"]');return d.length?c===d.find("input, textarea, select, [value]").val()?this:this.render():this}}),a.exports=c},function(a,b){var c=wp.media.view.Attachment.extend({buttons:{check:!0}});a.exports=c},function(a,b){var c=wp.media.view.Attachment.extend({buttons:{close:!0}});a.exports=c},function(a,b){var c,d=wp.media.View,e=jQuery;c=d.extend({tagName:"ul",className:"attachments",attributes:{tabIndex:-1},initialize:function(){this.el.id=_.uniqueId("__attachments-view-"),_.defaults(this.options,{refreshSensitivity:wp.media.isTouchDevice?300:200,refreshThreshold:3,AttachmentView:wp.media.view.Attachment,sortable:!1,resize:!0,idealColumnWidth:e(window).width()<640?135:150}),this._viewsByCid={},this.$window=e(window),this.resizeEvent="resize.media-modal-columns",this.collection.on("add",function(a){this.views.add(this.createAttachmentView(a),{at:this.collection.indexOf(a)})},this),this.collection.on("remove",function(a){var b=this._viewsByCid[a.cid];delete this._viewsByCid[a.cid],b&&b.remove()},this),this.collection.on("reset",this.render,this),this.listenTo(this.controller,"library:selection:add",this.attachmentFocus),this.scroll=_.chain(this.scroll).bind(this).throttle(this.options.refreshSensitivity).value(),this.options.scrollElement=this.options.scrollElement||this.el,e(this.options.scrollElement).on("scroll",this.scroll),this.initSortable(),_.bindAll(this,"setColumns"),this.options.resize&&(this.on("ready",this.bindEvents),this.controller.on("open",this.setColumns),_.defer(this.setColumns,this))},bindEvents:function(){this.$window.off(this.resizeEvent).on(this.resizeEvent,_.debounce(this.setColumns,50))},attachmentFocus:function(){this.$("li:first").focus()},restoreFocus:function(){this.$("li.selected:first").focus()},arrowEvent:function(a){var b=this.$el.children("li"),c=this.columns,d=b.filter(":focus").index(),e=d+1<=c?1:Math.ceil((d+1)/c);if(d!==-1){if(37===a.keyCode){if(0===d)return;b.eq(d-1).focus()}if(38===a.keyCode){if(1===e)return;b.eq(d-c).focus()}if(39===a.keyCode){if(b.length===d)return;b.eq(d+1).focus()}if(40===a.keyCode){if(Math.ceil(b.length/c)===e)return;b.eq(d+c).focus()}}},dispose:function(){this.collection.props.off(null,null,this),this.options.resize&&this.$window.off(this.resizeEvent),d.prototype.dispose.apply(this,arguments)},setColumns:function(){var a=this.columns,b=this.$el.width();b&&(this.columns=Math.min(Math.round(b/this.options.idealColumnWidth),12)||1,a&&a===this.columns||this.$el.closest(".media-frame-content").attr("data-columns",this.columns))},initSortable:function(){var a=this.collection;this.options.sortable&&e.fn.sortable&&(this.$el.sortable(_.extend({disabled:!!a.comparator,tolerance:"pointer",start:function(a,b){b.item.data("sortableIndexStart",b.item.index())},update:function(b,c){var d=a.at(c.item.data("sortableIndexStart")),e=a.comparator;delete a.comparator,a.remove(d,{silent:!0}),a.add(d,{silent:!0,at:c.item.index()}),a.comparator=e,a.trigger("reset",a),a.saveMenuOrder()}},this.options.sortable)),a.props.on("change:orderby",function(){this.$el.sortable("option","disabled",!!a.comparator)},this),this.collection.props.on("change:orderby",this.refreshSortable,this),this.refreshSortable())},refreshSortable:function(){if(this.options.sortable&&e.fn.sortable){var a=this.collection,b=a.props.get("orderby"),c="menuOrder"===b||!a.comparator;this.$el.sortable("option","disabled",!c)}},createAttachmentView:function(a){var b=new this.options.AttachmentView({controller:this.controller,model:a,collection:this.collection,selection:this.options.selection});return this._viewsByCid[a.cid]=b},prepare:function(){this.collection.length?this.views.set(this.collection.map(this.createAttachmentView,this)):(this.views.unset(),this.collection.more().done(this.scroll))},ready:function(){this.scroll()},scroll:function(){var a,b=this,c=this.options.scrollElement,d=c.scrollTop;c===document&&(c=document.body,d=e(document).scrollTop()),e(c).is(":visible")&&this.collection.hasMore()&&(a=this.views.parent.toolbar,c.scrollHeight-(d+c.clientHeight)<c.clientHeight/3&&a.get("spinner").show(),c.scrollHeight<d+c.clientHeight*this.options.refreshThreshold&&this.collection.more().done(function(){b.scroll(),a.get("spinner").hide()}))}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.View.extend({tagName:"input",className:"search",id:"media-search-input",attributes:{type:"search",placeholder:d.searchMediaPlaceholder},events:{input:"search",keyup:"search"},render:function(){return this.el.value=this.model.escape("search"),this},search:_.debounce(function(a){a.target.value?this.model.set("search",a.target.value):this.model.unset("search")},300)}),a.exports=c},function(a,b){var c,d=jQuery;c=wp.media.View.extend({tagName:"select",className:"attachment-filters",id:"media-attachment-filters",events:{change:"change"},keys:[],initialize:function(){this.createFilters(),_.extend(this.filters,this.options.filters),this.$el.html(_.chain(this.filters).map(function(a,b){return{el:d("<option></option>").val(b).html(a.text)[0],priority:a.priority||50}},this).sortBy("priority").pluck("el").value()),this.listenTo(this.model,"change",this.select),this.select()},createFilters:function(){this.filters={}},change:function(){var a=this.filters[this.el.value];a&&this.model.set(a.props)},select:function(){var a=this.model,b="all",c=a.toJSON();_.find(this.filters,function(a,d){var e=_.all(a.props,function(a,b){return a===(_.isUndefined(c[b])?null:c[b])});if(e)return b=d}),this.$el.val(b)}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.view.AttachmentFilters.extend({id:"media-attachment-date-filters",createFilters:function(){var a={};_.each(wp.media.view.settings.months||{},function(b,c){a[c]={text:b.text,props:{year:b.year,monthnum:b.month}}}),a.all={text:d.allDates,props:{monthnum:!1,year:!1},priority:10},this.filters=a}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.view.AttachmentFilters.extend({createFilters:function(){var a,b=this.model.get("type"),c=wp.media.view.settings.mimeTypes,e=window.userSettings?parseInt(window.userSettings.uid,10):0;c&&b&&(a=c[b]),this.filters={all:{text:a||d.allMediaItems,props:{uploadedTo:null,orderby:"date",order:"DESC",author:null},priority:10},uploaded:{text:d.uploadedToThisPost,props:{uploadedTo:wp.media.view.settings.post.id,orderby:"menuOrder",order:"ASC",author:null},priority:20},unattached:{text:d.unattached,props:{uploadedTo:0,orderby:"menuOrder",order:"ASC",author:null},priority:50}},e&&(this.filters.mine={text:d.mine,props:{orderby:"date",order:"DESC",author:e},priority:50})}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.view.AttachmentFilters.extend({createFilters:function(){var a={},b=window.userSettings?parseInt(window.userSettings.uid,10):0;_.each(wp.media.view.settings.mimeTypes||{},function(b,c){a[c]={text:b,props:{status:null,type:c,uploadedTo:null,orderby:"date",order:"DESC",author:null}}}),a.all={text:d.allMediaItems,props:{status:null,type:null,uploadedTo:null,orderby:"date",order:"DESC",author:null},priority:10},wp.media.view.settings.post.id&&(a.uploaded={text:d.uploadedToThisPost,props:{status:null,type:null,uploadedTo:wp.media.view.settings.post.id,orderby:"menuOrder",order:"ASC",author:null},priority:20}),a.unattached={text:d.unattached,props:{status:null,uploadedTo:0,type:null,orderby:"menuOrder",order:"ASC",author:null},priority:50},b&&(a.mine={text:d.mine,props:{status:null,type:null,uploadedTo:null,orderby:"date",order:"DESC",author:b},priority:50}),wp.media.view.settings.mediaTrash&&this.controller.isModeActive("grid")&&(a.trash={text:d.trash,props:{uploadedTo:null,status:"trash",type:null,orderby:"date",order:"DESC",author:null},priority:50}),this.filters=a}}),a.exports=c},function(a,b){var c,d=wp.media.View,e=wp.media.view.settings.mediaTrash,f=wp.media.view.l10n,g=jQuery;c=d.extend({tagName:"div",className:"attachments-browser",initialize:function(){_.defaults(this.options,{filters:!1,search:!0,date:!0,display:!1,sidebar:!0,AttachmentView:wp.media.view.Attachment.Library}),this.controller.on("toggle:upload:attachment",this.toggleUploader,this),this.controller.on("edit:selection",this.editSelection),this.options.sidebar&&"errors"===this.options.sidebar&&this.createSidebar(),this.createUploader(),this.createToolbar(),this.createAttachments(),this.options.sidebar&&"errors"!==this.options.sidebar&&this.createSidebar(),this.updateContent(),this.options.sidebar&&"errors"!==this.options.sidebar||(this.$el.addClass("hide-sidebar"),"errors"===this.options.sidebar&&this.$el.addClass("sidebar-for-errors")),this.collection.on("add remove reset",this.updateContent,this)},editSelection:function(a){a.$(".media-button-backToLibrary").focus()},dispose:function(){return this.options.selection.off(null,null,this),d.prototype.dispose.apply(this,arguments),this},createToolbar:function(){var a,b,c;c={controller:this.controller},this.controller.isModeActive("grid")&&(c.className="media-toolbar wp-filter"),this.toolbar=new wp.media.view.Toolbar(c),this.views.add(this.toolbar),this.toolbar.set("spinner",new wp.media.view.Spinner({priority:-60})),-1!==g.inArray(this.options.filters,["uploaded","all"])&&(this.toolbar.set("filtersLabel",new wp.media.view.Label({value:f.filterByType,attributes:{"for":"media-attachment-filters"},priority:-80}).render()),"uploaded"===this.options.filters?this.toolbar.set("filters",new wp.media.view.AttachmentFilters.Uploaded({controller:this.controller,model:this.collection.props,priority:-80}).render()):(b=new wp.media.view.AttachmentFilters.All({controller:this.controller,model:this.collection.props,priority:-80}),this.toolbar.set("filters",b.render()))),this.controller.isModeActive("grid")?(a=d.extend({className:"view-switch media-grid-view-switch",template:wp.template("media-library-view-switcher")}),this.toolbar.set("libraryViewSwitcher",new a({controller:this.controller,priority:-90}).render()),this.toolbar.set("dateFilterLabel",new wp.media.view.Label({value:f.filterByDate,attributes:{"for":"media-attachment-date-filters"},priority:-75}).render()),this.toolbar.set("dateFilter",new wp.media.view.DateFilter({controller:this.controller,model:this.collection.props,priority:-75}).render()),this.toolbar.set("selectModeToggleButton",new wp.media.view.SelectModeToggleButton({text:f.bulkSelect,controller:this.controller,priority:-70}).render()),this.toolbar.set("deleteSelectedButton",new wp.media.view.DeleteSelectedButton({filters:b,style:"primary",disabled:!0,text:e?f.trashSelected:f.deleteSelected,controller:this.controller,priority:-60,click:function(){var a=[],b=[],c=this.controller.state().get("selection"),d=this.controller.state().get("library");c.length&&(e||window.confirm(f.warnBulkDelete))&&(e&&"trash"!==c.at(0).get("status")&&!window.confirm(f.warnBulkTrash)||(c.each(function(c){return c.get("nonces")["delete"]?void(e&&"trash"===c.get("status")?(c.set("status","inherit"),a.push(c.save()),b.push(c)):e?(c.set("status","trash"),a.push(c.save()),b.push(c)):c.destroy({wait:!0})):void b.push(c)}),a.length?(c.remove(b),g.when.apply(null,a).then(_.bind(function(){d._requery(!0),this.controller.trigger("selection:action:done")},this))):this.controller.trigger("selection:action:done")))}}).render()),e&&this.toolbar.set("deleteSelectedPermanentlyButton",new wp.media.view.DeleteSelectedPermanentlyButton({filters:b,style:"primary",disabled:!0,text:f.deleteSelected,controller:this.controller,priority:-55,click:function(){var a=[],b=[],c=this.controller.state().get("selection");c.length&&window.confirm(f.warnBulkDelete)&&(c.each(function(c){return c.get("nonces")["delete"]?void b.push(c):void a.push(c)}),a.length&&c.remove(a),b.length&&g.when.apply(null,b.map(function(a){return a.destroy()})).then(_.bind(function(){this.controller.trigger("selection:action:done")},this)))}}).render())):this.options.date&&(this.toolbar.set("dateFilterLabel",new wp.media.view.Label({value:f.filterByDate,attributes:{"for":"media-attachment-date-filters"},priority:-75}).render()),this.toolbar.set("dateFilter",new wp.media.view.DateFilter({controller:this.controller,model:this.collection.props,priority:-75}).render())),this.options.search&&(this.toolbar.set("searchLabel",new wp.media.view.Label({value:f.searchMediaLabel,attributes:{"for":"media-search-input"},priority:60}).render()),this.toolbar.set("search",new wp.media.view.Search({controller:this.controller,model:this.collection.props,priority:60}).render())),this.options.dragInfo&&this.toolbar.set("dragInfo",new d({el:g('<div class="instructions">'+f.dragInfo+"</div>")[0],priority:-40})),this.options.suggestedWidth&&this.options.suggestedHeight&&this.toolbar.set("suggestedDimensions",new d({el:g('<div class="instructions">'+f.suggestedDimensions.replace("%1$s",this.options.suggestedWidth).replace("%2$s",this.options.suggestedHeight)+"</div>")[0],priority:-40}))},updateContent:function(){var a,b=this;a=this.controller.isModeActive("grid")?b.attachmentsNoResults:b.uploader,this.collection.length?(a.$el.addClass("hidden"),b.toolbar.get("spinner").hide()):(this.toolbar.get("spinner").show(),this.dfd=this.collection.more().done(function(){b.collection.length?a.$el.addClass("hidden"):a.$el.removeClass("hidden"),b.toolbar.get("spinner").hide()}))},createUploader:function(){this.uploader=new wp.media.view.UploaderInline({controller:this.controller,status:!1,message:this.controller.isModeActive("grid")?"":f.noItemsFound,canClose:this.controller.isModeActive("grid")}),this.uploader.$el.addClass("hidden"),this.views.add(this.uploader)},toggleUploader:function(){this.uploader.$el.hasClass("hidden")?this.uploader.show():this.uploader.hide()},createAttachments:function(){this.attachments=new wp.media.view.Attachments({controller:this.controller,collection:this.collection,selection:this.options.selection,model:this.model,sortable:this.options.sortable,scrollElement:this.options.scrollElement,idealColumnWidth:this.options.idealColumnWidth,AttachmentView:this.options.AttachmentView}),this.controller.on("attachment:keydown:arrow",_.bind(this.attachments.arrowEvent,this.attachments)),this.controller.on("attachment:details:shift-tab",_.bind(this.attachments.restoreFocus,this.attachments)),this.views.add(this.attachments),this.controller.isModeActive("grid")&&(this.attachmentsNoResults=new d({controller:this.controller,tagName:"p"}),this.attachmentsNoResults.$el.addClass("hidden no-media"),this.attachmentsNoResults.$el.html(f.noMedia),this.views.add(this.attachmentsNoResults))},createSidebar:function(){var a=this.options,b=a.selection,c=this.sidebar=new wp.media.view.Sidebar({controller:this.controller});this.views.add(c),this.controller.uploader&&c.set("uploads",new wp.media.view.UploaderStatus({controller:this.controller,priority:40})),b.on("selection:single",this.createSingle,this),b.on("selection:unsingle",this.disposeSingle,this),b.single()&&this.createSingle()},createSingle:function(){var a=this.sidebar,b=this.options.selection.single();a.set("details",new wp.media.view.Attachment.Details({controller:this.controller,model:b,priority:80})),a.set("compat",new wp.media.view.AttachmentCompat({controller:this.controller,model:b,priority:120})),this.options.display&&a.set("display",new wp.media.view.Settings.AttachmentDisplay({controller:this.controller,model:this.model.display(b),attachment:b,priority:160,userSettings:this.model.get("displayUserSettings")})),"insert"===this.model.id&&a.$el.addClass("visible")},disposeSingle:function(){var a=this.sidebar;a.unset("details"),a.unset("compat"),a.unset("display"),a.$el.removeClass("visible")}}),a.exports=c},function(a,b){var c,d=wp.media.view.l10n;c=wp.media.View.extend({tagName:"div",className:"media-selection",template:wp.template("media-selection"),events:{"click .edit-selection":"edit","click .clear-selection":"clear"},initialize:function(){_.defaults(this.options,{editable:!1,clearable:!0}),this.attachments=new wp.media.view.Attachments.Selection({controller:this.controller,collection:this.collection,selection:this.collection,model:new Backbone.Model}),this.views.set(".selection-view",this.attachments),this.collection.on("add remove reset",this.refresh,this),this.controller.on("content:activate",this.refresh,this)},ready:function(){this.refresh()},refresh:function(){if(this.$el.children().length){var a=this.collection,b="edit-selection"===this.controller.content.mode();this.$el.toggleClass("empty",!a.length),this.$el.toggleClass("one",1===a.length),this.$el.toggleClass("editing",b),this.$(".count").text(d.selected.replace("%d",a.length))}},edit:function(a){a.preventDefault(),this.options.editable&&this.options.editable.call(this,this.collection)},clear:function(a){a.preventDefault(),this.collection.reset(),this.controller.modal.focusManager.focus()}}),a.exports=c},function(a,b){var c=wp.media.view.Attachment.extend({className:"attachment selection",toggleSelection:function(){this.options.selection.single(this.model)}});a.exports=c},function(a,b){var c,d=wp.media.view.Attachments;c=d.extend({events:{},initialize:function(){return _.defaults(this.options,{sortable:!1,resize:!1,AttachmentView:wp.media.view.Attachment.Selection}),d.prototype.initialize.apply(this,arguments)}}),a.exports=c},function(a,b){var c=wp.media.view.Attachment.Selection.extend({buttons:{close:!0}});a.exports=c},function(a,b){var c,d=wp.media.View,e=Backbone.$;c=d.extend({events:{"click button":"updateHandler","change input":"updateHandler","change select":"updateHandler","change textarea":"updateHandler"},initialize:function(){this.model=this.model||new Backbone.Model,this.listenTo(this.model,"change",this.updateChanges)},prepare:function(){return _.defaults({model:this.model.toJSON()},this.options)},render:function(){return d.prototype.render.apply(this,arguments),_(this.model.attributes).chain().keys().each(this.update,this),this},update:function(a){var b,c,d=this.model.get(a),e=this.$('[data-setting="'+a+'"]');e.length&&(e.is("select")?(c=e.find('[value="'+d+'"]'),c.length?(e.find("option").prop("selected",!1),c.prop("selected",!0)):this.model.set(a,e.find(":selected").val())):e.hasClass("button-group")?(b=e.find("button").removeClass("active"),b.filter('[value="'+d+'"]').addClass("active")):e.is('input[type="text"], textarea')?e.is(":focus")||e.val(d):e.is('input[type="checkbox"]')&&e.prop("checked",!!d&&"false"!==d))},updateHandler:function(a){var b,c=e(a.target).closest("[data-setting]"),d=a.target.value;a.preventDefault(),c.length&&(c.is('input[type="checkbox"]')&&(d=c[0].checked),this.model.set(c.data("setting"),d),(b=c.data("userSetting"))&&window.setUserSetting(b,d))},updateChanges:function(a){a.hasChanged()&&_(a.changed).chain().keys().each(this.update,this)}}),a.exports=c},function(a,b){var c,d=wp.media.view.Settings;c=d.extend({className:"attachment-display-settings",template:wp.template("attachment-display-settings"),initialize:function(){var a=this.options.attachment;_.defaults(this.options,{userSettings:!1}),d.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change:link",this.updateLinkTo),a&&a.on("change:uploading",this.render,this)},dispose:function(){var a=this.options.attachment;a&&a.off(null,null,this),d.prototype.dispose.apply(this,arguments)},render:function(){var a=this.options.attachment;return a&&_.extend(this.options,{sizes:a.get("sizes"),type:a.get("type")}),d.prototype.render.call(this),this.updateLinkTo(),this},updateLinkTo:function(){var a=this.model.get("link"),b=this.$(".link-to-custom"),c=this.options.attachment;return"none"===a||"embed"===a||!c&&"custom"!==a?void b.addClass("hidden"):(c&&("post"===a?b.val(c.get("link")):"file"===a?b.val(c.get("url")):this.model.get("linkUrl")||b.val("http://"),b.prop("readonly","custom"!==a)),b.removeClass("hidden"),void(!wp.media.isTouchDevice&&b.is(":visible")&&b.focus()[0].select()))}}),a.exports=c},function(a,b){var c=wp.media.view.Settings.extend({className:"collection-settings gallery-settings",template:wp.template("gallery-settings")});a.exports=c},function(a,b){var c=wp.media.view.Settings.extend({className:"collection-settings playlist-settings",template:wp.template("playlist-settings")});a.exports=c},function(a,b){var c,d=wp.media.view.Attachment,e=wp.media.view.l10n;c=d.extend({tagName:"div",className:"attachment-details",template:wp.template("attachment-details"),attributes:function(){return{tabIndex:0,"data-id":this.model.get("id")}},events:{"change [data-setting]":"updateSetting","change [data-setting] input":"updateSetting","change [data-setting] select":"updateSetting","change [data-setting] textarea":"updateSetting","click .delete-attachment":"deleteAttachment","click .trash-attachment":"trashAttachment","click .untrash-attachment":"untrashAttachment","click .edit-attachment":"editAttachment",keydown:"toggleSelectionHandler"},initialize:function(){this.options=_.defaults(this.options,{rerenderOnModelChange:!1}),this.on("ready",this.initialFocus),d.prototype.initialize.apply(this,arguments)},initialFocus:function(){wp.media.isTouchDevice||this.$('input[type="text"]').eq(0).focus()},deleteAttachment:function(a){a.preventDefault(),window.confirm(e.warnDelete)&&(this.model.destroy(),this.controller.modal.focusManager.focus())},trashAttachment:function(a){var b=this.controller.library;a.preventDefault(),wp.media.view.settings.mediaTrash&&"edit-metadata"===this.controller.content.mode()?(this.model.set("status","trash"),this.model.save().done(function(){b._requery(!0)})):this.model.destroy()},untrashAttachment:function(a){var b=this.controller.library;a.preventDefault(),this.model.set("status","inherit"),this.model.save().done(function(){b._requery(!0)})},editAttachment:function(a){var b=this.controller.states.get("edit-image");window.imageEdit&&b?(a.preventDefault(),b.set("image",this.model),this.controller.setState("edit-image")):this.$el.addClass("needs-refresh")},toggleSelectionHandler:function(a){return"keydown"===a.type&&9===a.keyCode&&a.shiftKey&&a.target===this.$(":tabbable").get(0)?(this.controller.trigger("attachment:details:shift-tab",a),!1):37===a.keyCode||38===a.keyCode||39===a.keyCode||40===a.keyCode?void this.controller.trigger("attachment:keydown:arrow",a):void 0}}),a.exports=c},function(a,b){var c,d=wp.media.View;c=d.extend({tagName:"form",className:"compat-item",events:{submit:"preventDefault","change input":"save","change select":"save","change textarea":"save"},initialize:function(){this.listenTo(this.model,"change:compat",this.render)},dispose:function(){return this.$(":focus").length&&this.save(),d.prototype.dispose.apply(this,arguments)},render:function(){var a=this.model.get("compat");if(a&&a.item)return this.views.detach(),this.$el.html(a.item),this.views.render(),this},preventDefault:function(a){a.preventDefault()},save:function(a){var b={};a&&a.preventDefault(),_.each(this.$el.serializeArray(),function(a){b[a.name]=a.value}),this.controller.trigger("attachment:compat:waiting",["waiting"]),this.model.saveCompat(b).always(_.bind(this.postSave,this))},postSave:function(){this.controller.trigger("attachment:compat:ready",["ready"])}}),a.exports=c},function(a,b){var c=wp.media.View.extend({className:"media-iframe",render:function(){return this.views.detach(),this.$el.html('<iframe src="'+this.controller.state().get("src")+'" />'),this.views.render(),this}});a.exports=c},function(a,b){var c=wp.media.View.extend({className:"media-embed",initialize:function(){this.url=new wp.media.view.EmbedUrl({controller:this.controller,model:this.model.props}).render(),this.views.set([this.url]),this.refresh(),this.listenTo(this.model,"change:type",this.refresh),this.listenTo(this.model,"change:loading",this.loading)},settings:function(a){this._settings&&this._settings.remove(),this._settings=a,this.views.add(a)},refresh:function(){var a,b=this.model.get("type");if("image"===b)a=wp.media.view.EmbedImage;else{if("link"!==b)return;a=wp.media.view.EmbedLink}this.settings(new a({controller:this.controller,model:this.model.props,priority:40}))},loading:function(){this.$el.toggleClass("embed-loading",this.model.get("loading"))}});a.exports=c},function(a,b){var c=wp.media.View.extend({tagName:"label",className:"screen-reader-text",initialize:function(){this.value=this.options.value},render:function(){return this.$el.html(this.value),this}});a.exports=c},function(a,b){var c,d=wp.media.View,e=jQuery;c=d.extend({tagName:"label",className:"embed-url",events:{input:"url",keyup:"url",change:"url"},initialize:function(){this.$input=e('<input id="embed-url-field" type="url" />').val(this.model.get("url")),this.input=this.$input[0],this.spinner=e('<span class="spinner" />')[0],this.$el.append([this.input,this.spinner]),this.listenTo(this.model,"change:url",this.render),this.model.get("url")&&_.delay(_.bind(function(){this.model.trigger("change:url")},this),500)},render:function(){var a=this.$input;if(!a.is(":focus"))return this.input.value=this.model.get("url")||"http://",d.prototype.render.apply(this,arguments),this},ready:function(){wp.media.isTouchDevice||this.focus()},url:function(a){this.model.set("url",e.trim(a.target.value))},focus:function(){var a=this.$input;a.is(":visible")&&a.focus()[0].select()}}),a.exports=c},function(a,b){var c,d=jQuery;c=wp.media.view.Settings.extend({className:"embed-link-settings",template:wp.template("embed-link-settings"),initialize:function(){this.listenTo(this.model,"change:url",this.updateoEmbed)},updateoEmbed:_.debounce(function(){var a=this.model.get("url");this.$(".embed-container").hide().find(".embed-preview").empty(),this.$(".setting").hide(),a&&(a.length<11||!a.match(/^http(s)?:\/\//))||this.fetch()},wp.media.controller.Embed.sensitivity),fetch:function(){var a,b,c=this.model.get("url");d("#embed-url-field").val()===c&&(this.dfd&&"pending"===this.dfd.state()&&this.dfd.abort(),a=/https?:\/\/www\.youtube\.com\/embed\/([^\/]+)/,b=a.exec(c),b&&(c="https://www.youtube.com/watch?v="+b[1]),this.dfd=wp.apiRequest({url:wp.media.view.settings.oEmbedProxyUrl,data:{url:c,maxwidth:this.model.get("width"),maxheight:this.model.get("height")},type:"GET",dataType:"json",context:this}).done(function(a){this.renderoEmbed({data:{body:a.html||""}})}).fail(this.renderFail))},renderFail:function(a,b){"abort"!==b&&this.$(".link-text").show()},renderoEmbed:function(a){var b=a&&a.data&&a.data.body||"";b?this.$(".embed-container").show().find(".embed-preview").html(b):this.renderFail()}}),a.exports=c},function(a,b){var c,d=wp.media.view.Settings.AttachmentDisplay;c=d.extend({className:"embed-media-settings",template:wp.template("embed-image-settings"),initialize:function(){d.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"change:url",this.updateImage)},updateImage:function(){this.$("img").attr("src",this.model.get("url"))}}),a.exports=c},function(a,b){var c,d=wp.media.view.Settings.AttachmentDisplay,e=jQuery;c=d.extend({className:"image-details",template:wp.template("image-details"),events:_.defaults(d.prototype.events,{"click .edit-attachment":"editAttachment","click .replace-attachment":"replaceAttachment","click .advanced-toggle":"onToggleAdvanced",'change [data-setting="customWidth"]':"onCustomSize",'change [data-setting="customHeight"]':"onCustomSize",'keyup [data-setting="customWidth"]':"onCustomSize",'keyup [data-setting="customHeight"]':"onCustomSize"}),initialize:function(){this.options.attachment=this.model.attachment,this.listenTo(this.model,"change:url",this.updateUrl),this.listenTo(this.model,"change:link",this.toggleLinkSettings),this.listenTo(this.model,"change:size",this.toggleCustomSize),d.prototype.initialize.apply(this,arguments)},prepare:function(){var a=!1;return this.model.attachment&&(a=this.model.attachment.toJSON()),_.defaults({model:this.model.toJSON(),attachment:a},this.options)},render:function(){var a=arguments;return this.model.attachment&&"pending"===this.model.dfd.state()?this.model.dfd.done(_.bind(function(){d.prototype.render.apply(this,a),this.postRender()},this)).fail(_.bind(function(){this.model.attachment=!1,d.prototype.render.apply(this,a),this.postRender()},this)):(d.prototype.render.apply(this,arguments),this.postRender()),this},postRender:function(){setTimeout(_.bind(this.resetFocus,this),10),this.toggleLinkSettings(),"show"===window.getUserSetting("advImgDetails")&&this.toggleAdvanced(!0),this.trigger("post-render")},resetFocus:function(){this.$(".link-to-custom").blur(),this.$(".embed-media-settings").scrollTop(0)},updateUrl:function(){this.$(".image img").attr("src",this.model.get("url")),this.$(".url").val(this.model.get("url"))},toggleLinkSettings:function(){"none"===this.model.get("link")?this.$(".link-settings").addClass("hidden"):this.$(".link-settings").removeClass("hidden")},toggleCustomSize:function(){"custom"!==this.model.get("size")?this.$(".custom-size").addClass("hidden"):this.$(".custom-size").removeClass("hidden")},onCustomSize:function(a){var b,c=e(a.target).data("setting"),d=e(a.target).val();return!/^\d+/.test(d)||parseInt(d,10)<1?void a.preventDefault():void("customWidth"===c?(b=Math.round(1/this.model.get("aspectRatio")*d),this.model.set("customHeight",b,{silent:!0}),this.$('[data-setting="customHeight"]').val(b)):(b=Math.round(this.model.get("aspectRatio")*d),
+this.model.set("customWidth",b,{silent:!0}),this.$('[data-setting="customWidth"]').val(b)))},onToggleAdvanced:function(a){a.preventDefault(),this.toggleAdvanced()},toggleAdvanced:function(a){var b,c=this.$el.find(".advanced-section");c.hasClass("advanced-visible")||a===!1?(c.removeClass("advanced-visible"),c.find(".advanced-settings").addClass("hidden"),b="hide"):(c.addClass("advanced-visible"),c.find(".advanced-settings").removeClass("hidden"),b="show"),window.setUserSetting("advImgDetails",b)},editAttachment:function(a){var b=this.controller.states.get("edit-image");window.imageEdit&&b&&(a.preventDefault(),b.set("image",this.model.attachment),this.controller.setState("edit-image"))},replaceAttachment:function(a){a.preventDefault(),this.controller.setState("replace-image")}}),a.exports=c},function(a,b){var c,d=wp.media.View,e=wp.media.view.UploaderStatus,f=wp.media.view.l10n,g=jQuery;c=d.extend({className:"crop-content",template:wp.template("crop-content"),initialize:function(){_.bindAll(this,"onImageLoad")},ready:function(){this.controller.frame.on("content:error:crop",this.onError,this),this.$image=this.$el.find(".crop-image"),this.$image.on("load",this.onImageLoad),g(window).on("resize.cropper",_.debounce(this.onImageLoad,250))},remove:function(){g(window).off("resize.cropper"),this.$el.remove(),this.$el.off(),d.prototype.remove.apply(this,arguments)},prepare:function(){return{title:f.cropYourImage,url:this.options.attachment.get("url")}},onImageLoad:function(){var a,b=this.controller.get("imgSelectOptions");"function"==typeof b&&(b=b(this.options.attachment,this.controller)),b=_.extend(b,{parent:this.$el,onInit:function(){var b=a.getOptions().aspectRatio;this.parent.children().on("mousedown touchstart",function(c){!b&&c.shiftKey&&a.setOptions({aspectRatio:"1:1"})}),this.parent.children().on("mouseup touchend",function(){a.setOptions({aspectRatio:!!b&&b})})}}),this.trigger("image-loaded"),a=this.controller.imgSelect=this.$image.imgAreaSelect(b)},onError:function(){var a=this.options.attachment.get("filename");this.views.add(".upload-errors",new wp.media.view.UploaderStatusError({filename:e.prototype.filename(a),message:window._wpMediaViewsL10n.cropError}),{at:0})}}),a.exports=c},function(a,b){var c,d=wp.media.view;c=d.Cropper.extend({className:"crop-content site-icon",ready:function(){d.Cropper.prototype.ready.apply(this,arguments),this.$(".crop-image").on("load",_.bind(this.addSidebar,this))},addSidebar:function(){this.sidebar=new wp.media.view.Sidebar({controller:this.controller}),this.sidebar.set("preview",new wp.media.view.SiteIconPreview({controller:this.controller,attachment:this.options.attachment})),this.controller.cropperView.views.add(this.sidebar)}}),a.exports=c},function(a,b){var c,d=wp.media.View,e=jQuery;c=d.extend({className:"site-icon-preview",template:wp.template("site-icon-preview"),ready:function(){this.controller.imgSelect.setOptions({onInit:this.updatePreview,onSelectChange:this.updatePreview})},prepare:function(){return{url:this.options.attachment.get("url")}},updatePreview:function(a,b){var c=64/b.width,d=64/b.height,f=16/b.width,g=16/b.height;e("#preview-app-icon").css({width:Math.round(c*this.imageWidth)+"px",height:Math.round(d*this.imageHeight)+"px",marginLeft:"-"+Math.round(c*b.x1)+"px",marginTop:"-"+Math.round(d*b.y1)+"px"}),e("#preview-favicon").css({width:Math.round(f*this.imageWidth)+"px",height:Math.round(g*this.imageHeight)+"px",marginLeft:"-"+Math.round(f*b.x1)+"px",marginTop:"-"+Math.floor(g*b.y1)+"px"})}}),a.exports=c},function(a,b){var c,d=wp.media.View;c=d.extend({className:"image-editor",template:wp.template("image-editor"),initialize:function(a){this.editor=window.imageEdit,this.controller=a.controller,d.prototype.initialize.apply(this,arguments)},prepare:function(){return this.model.toJSON()},loadEditor:function(){var a=this.editor.open(this.model.get("id"),this.model.get("nonces").edit,this);a.done(_.bind(this.focus,this))},focus:function(){this.$(".imgedit-submit .button").eq(0).focus()},back:function(){var a=this.controller.lastState();this.controller.setState(a)},refresh:function(){this.model.fetch()},save:function(){var a=this.controller.lastState();this.model.fetch().done(_.bind(function(){this.controller.setState(a)},this))}}),a.exports=c},function(a,b){var c=wp.media.View.extend({tagName:"span",className:"spinner",spinnerTimeout:!1,delay:400,show:function(){return this.spinnerTimeout||(this.spinnerTimeout=_.delay(function(a){a.addClass("is-active")},this.delay,this.$el)),this},hide:function(){return this.$el.removeClass("is-active"),this.spinnerTimeout=clearTimeout(this.spinnerTimeout),this}});a.exports=c}]));
\ No newline at end of file
(function () {
+var charmap = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
+ var fireInsertCustomChar = function (editor, chr) {
+ return editor.fire('insertCustomChar', { chr: chr });
};
-};
+ var $_ce2ncy9qjjgwebhk = { fireInsertCustomChar: fireInsertCustomChar };
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
+ var insertChar = function (editor, chr) {
+ var evtChr = $_ce2ncy9qjjgwebhk.fireInsertCustomChar(editor, chr).chr;
+ editor.execCommand('mceInsertContent', false, evtChr);
+ };
+ var $_el68bd9pjjgwebhj = { insertChar: insertChar };
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
+ var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
-var ephox = {};
+ var getCharMap = function (editor) {
+ return editor.settings.charmap;
+ };
+ var getCharMapAppend = function (editor) {
+ return editor.settings.charmap_append;
+ };
+ var $_5e4nos9tjjgwebhr = {
+ getCharMap: getCharMap,
+ getCharMapAppend: getCharMapAppend
+ };
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
+ var isArray = global$1.isArray;
+ var getDefaultCharMap = function () {
+ return [
+ [
+ '160',
+ 'no-break space'
+ ],
+ [
+ '173',
+ 'soft hyphen'
+ ],
+ [
+ '34',
+ 'quotation mark'
+ ],
+ [
+ '162',
+ 'cent sign'
+ ],
+ [
+ '8364',
+ 'euro sign'
+ ],
+ [
+ '163',
+ 'pound sign'
+ ],
+ [
+ '165',
+ 'yen sign'
+ ],
+ [
+ '169',
+ 'copyright sign'
+ ],
+ [
+ '174',
+ 'registered sign'
+ ],
+ [
+ '8482',
+ 'trade mark sign'
+ ],
+ [
+ '8240',
+ 'per mille sign'
+ ],
+ [
+ '181',
+ 'micro sign'
+ ],
+ [
+ '183',
+ 'middle dot'
+ ],
+ [
+ '8226',
+ 'bullet'
+ ],
+ [
+ '8230',
+ 'three dot leader'
+ ],
+ [
+ '8242',
+ 'minutes / feet'
+ ],
+ [
+ '8243',
+ 'seconds / inches'
+ ],
+ [
+ '167',
+ 'section sign'
+ ],
+ [
+ '182',
+ 'paragraph sign'
+ ],
+ [
+ '223',
+ 'sharp s / ess-zed'
+ ],
+ [
+ '8249',
+ 'single left-pointing angle quotation mark'
+ ],
+ [
+ '8250',
+ 'single right-pointing angle quotation mark'
+ ],
+ [
+ '171',
+ 'left pointing guillemet'
+ ],
+ [
+ '187',
+ 'right pointing guillemet'
+ ],
+ [
+ '8216',
+ 'left single quotation mark'
+ ],
+ [
+ '8217',
+ 'right single quotation mark'
+ ],
+ [
+ '8220',
+ 'left double quotation mark'
+ ],
+ [
+ '8221',
+ 'right double quotation mark'
+ ],
+ [
+ '8218',
+ 'single low-9 quotation mark'
+ ],
+ [
+ '8222',
+ 'double low-9 quotation mark'
+ ],
+ [
+ '60',
+ 'less-than sign'
+ ],
+ [
+ '62',
+ 'greater-than sign'
+ ],
+ [
+ '8804',
+ 'less-than or equal to'
+ ],
+ [
+ '8805',
+ 'greater-than or equal to'
+ ],
+ [
+ '8211',
+ 'en dash'
+ ],
+ [
+ '8212',
+ 'em dash'
+ ],
+ [
+ '175',
+ 'macron'
+ ],
+ [
+ '8254',
+ 'overline'
+ ],
+ [
+ '164',
+ 'currency sign'
+ ],
+ [
+ '166',
+ 'broken bar'
+ ],
+ [
+ '168',
+ 'diaeresis'
+ ],
+ [
+ '161',
+ 'inverted exclamation mark'
+ ],
+ [
+ '191',
+ 'turned question mark'
+ ],
+ [
+ '710',
+ 'circumflex accent'
+ ],
+ [
+ '732',
+ 'small tilde'
+ ],
+ [
+ '176',
+ 'degree sign'
+ ],
+ [
+ '8722',
+ 'minus sign'
+ ],
+ [
+ '177',
+ 'plus-minus sign'
+ ],
+ [
+ '247',
+ 'division sign'
+ ],
+ [
+ '8260',
+ 'fraction slash'
+ ],
+ [
+ '215',
+ 'multiplication sign'
+ ],
+ [
+ '185',
+ 'superscript one'
+ ],
+ [
+ '178',
+ 'superscript two'
+ ],
+ [
+ '179',
+ 'superscript three'
+ ],
+ [
+ '188',
+ 'fraction one quarter'
+ ],
+ [
+ '189',
+ 'fraction one half'
+ ],
+ [
+ '190',
+ 'fraction three quarters'
+ ],
+ [
+ '402',
+ 'function / florin'
+ ],
+ [
+ '8747',
+ 'integral'
+ ],
+ [
+ '8721',
+ 'n-ary sumation'
+ ],
+ [
+ '8734',
+ 'infinity'
+ ],
+ [
+ '8730',
+ 'square root'
+ ],
+ [
+ '8764',
+ 'similar to'
+ ],
+ [
+ '8773',
+ 'approximately equal to'
+ ],
+ [
+ '8776',
+ 'almost equal to'
+ ],
+ [
+ '8800',
+ 'not equal to'
+ ],
+ [
+ '8801',
+ 'identical to'
+ ],
+ [
+ '8712',
+ 'element of'
+ ],
+ [
+ '8713',
+ 'not an element of'
+ ],
+ [
+ '8715',
+ 'contains as member'
+ ],
+ [
+ '8719',
+ 'n-ary product'
+ ],
+ [
+ '8743',
+ 'logical and'
+ ],
+ [
+ '8744',
+ 'logical or'
+ ],
+ [
+ '172',
+ 'not sign'
+ ],
+ [
+ '8745',
+ 'intersection'
+ ],
+ [
+ '8746',
+ 'union'
+ ],
+ [
+ '8706',
+ 'partial differential'
+ ],
+ [
+ '8704',
+ 'for all'
+ ],
+ [
+ '8707',
+ 'there exists'
+ ],
+ [
+ '8709',
+ 'diameter'
+ ],
+ [
+ '8711',
+ 'backward difference'
+ ],
+ [
+ '8727',
+ 'asterisk operator'
+ ],
+ [
+ '8733',
+ 'proportional to'
+ ],
+ [
+ '8736',
+ 'angle'
+ ],
+ [
+ '180',
+ 'acute accent'
+ ],
+ [
+ '184',
+ 'cedilla'
+ ],
+ [
+ '170',
+ 'feminine ordinal indicator'
+ ],
+ [
+ '186',
+ 'masculine ordinal indicator'
+ ],
+ [
+ '8224',
+ 'dagger'
+ ],
+ [
+ '8225',
+ 'double dagger'
+ ],
+ [
+ '192',
+ 'A - grave'
+ ],
+ [
+ '193',
+ 'A - acute'
+ ],
+ [
+ '194',
+ 'A - circumflex'
+ ],
+ [
+ '195',
+ 'A - tilde'
+ ],
+ [
+ '196',
+ 'A - diaeresis'
+ ],
+ [
+ '197',
+ 'A - ring above'
+ ],
+ [
+ '256',
+ 'A - macron'
+ ],
+ [
+ '198',
+ 'ligature AE'
+ ],
+ [
+ '199',
+ 'C - cedilla'
+ ],
+ [
+ '200',
+ 'E - grave'
+ ],
+ [
+ '201',
+ 'E - acute'
+ ],
+ [
+ '202',
+ 'E - circumflex'
+ ],
+ [
+ '203',
+ 'E - diaeresis'
+ ],
+ [
+ '274',
+ 'E - macron'
+ ],
+ [
+ '204',
+ 'I - grave'
+ ],
+ [
+ '205',
+ 'I - acute'
+ ],
+ [
+ '206',
+ 'I - circumflex'
+ ],
+ [
+ '207',
+ 'I - diaeresis'
+ ],
+ [
+ '298',
+ 'I - macron'
+ ],
+ [
+ '208',
+ 'ETH'
+ ],
+ [
+ '209',
+ 'N - tilde'
+ ],
+ [
+ '210',
+ 'O - grave'
+ ],
+ [
+ '211',
+ 'O - acute'
+ ],
+ [
+ '212',
+ 'O - circumflex'
+ ],
+ [
+ '213',
+ 'O - tilde'
+ ],
+ [
+ '214',
+ 'O - diaeresis'
+ ],
+ [
+ '216',
+ 'O - slash'
+ ],
+ [
+ '332',
+ 'O - macron'
+ ],
+ [
+ '338',
+ 'ligature OE'
+ ],
+ [
+ '352',
+ 'S - caron'
+ ],
+ [
+ '217',
+ 'U - grave'
+ ],
+ [
+ '218',
+ 'U - acute'
+ ],
+ [
+ '219',
+ 'U - circumflex'
+ ],
+ [
+ '220',
+ 'U - diaeresis'
+ ],
+ [
+ '362',
+ 'U - macron'
+ ],
+ [
+ '221',
+ 'Y - acute'
+ ],
+ [
+ '376',
+ 'Y - diaeresis'
+ ],
+ [
+ '562',
+ 'Y - macron'
+ ],
+ [
+ '222',
+ 'THORN'
+ ],
+ [
+ '224',
+ 'a - grave'
+ ],
+ [
+ '225',
+ 'a - acute'
+ ],
+ [
+ '226',
+ 'a - circumflex'
+ ],
+ [
+ '227',
+ 'a - tilde'
+ ],
+ [
+ '228',
+ 'a - diaeresis'
+ ],
+ [
+ '229',
+ 'a - ring above'
+ ],
+ [
+ '257',
+ 'a - macron'
+ ],
+ [
+ '230',
+ 'ligature ae'
+ ],
+ [
+ '231',
+ 'c - cedilla'
+ ],
+ [
+ '232',
+ 'e - grave'
+ ],
+ [
+ '233',
+ 'e - acute'
+ ],
+ [
+ '234',
+ 'e - circumflex'
+ ],
+ [
+ '235',
+ 'e - diaeresis'
+ ],
+ [
+ '275',
+ 'e - macron'
+ ],
+ [
+ '236',
+ 'i - grave'
+ ],
+ [
+ '237',
+ 'i - acute'
+ ],
+ [
+ '238',
+ 'i - circumflex'
+ ],
+ [
+ '239',
+ 'i - diaeresis'
+ ],
+ [
+ '299',
+ 'i - macron'
+ ],
+ [
+ '240',
+ 'eth'
+ ],
+ [
+ '241',
+ 'n - tilde'
+ ],
+ [
+ '242',
+ 'o - grave'
+ ],
+ [
+ '243',
+ 'o - acute'
+ ],
+ [
+ '244',
+ 'o - circumflex'
+ ],
+ [
+ '245',
+ 'o - tilde'
+ ],
+ [
+ '246',
+ 'o - diaeresis'
+ ],
+ [
+ '248',
+ 'o slash'
+ ],
+ [
+ '333',
+ 'o macron'
+ ],
+ [
+ '339',
+ 'ligature oe'
+ ],
+ [
+ '353',
+ 's - caron'
+ ],
+ [
+ '249',
+ 'u - grave'
+ ],
+ [
+ '250',
+ 'u - acute'
+ ],
+ [
+ '251',
+ 'u - circumflex'
+ ],
+ [
+ '252',
+ 'u - diaeresis'
+ ],
+ [
+ '363',
+ 'u - macron'
+ ],
+ [
+ '253',
+ 'y - acute'
+ ],
+ [
+ '254',
+ 'thorn'
+ ],
+ [
+ '255',
+ 'y - diaeresis'
+ ],
+ [
+ '563',
+ 'y - macron'
+ ],
+ [
+ '913',
+ 'Alpha'
+ ],
+ [
+ '914',
+ 'Beta'
+ ],
+ [
+ '915',
+ 'Gamma'
+ ],
+ [
+ '916',
+ 'Delta'
+ ],
+ [
+ '917',
+ 'Epsilon'
+ ],
+ [
+ '918',
+ 'Zeta'
+ ],
+ [
+ '919',
+ 'Eta'
+ ],
+ [
+ '920',
+ 'Theta'
+ ],
+ [
+ '921',
+ 'Iota'
+ ],
+ [
+ '922',
+ 'Kappa'
+ ],
+ [
+ '923',
+ 'Lambda'
+ ],
+ [
+ '924',
+ 'Mu'
+ ],
+ [
+ '925',
+ 'Nu'
+ ],
+ [
+ '926',
+ 'Xi'
+ ],
+ [
+ '927',
+ 'Omicron'
+ ],
+ [
+ '928',
+ 'Pi'
+ ],
+ [
+ '929',
+ 'Rho'
+ ],
+ [
+ '931',
+ 'Sigma'
+ ],
+ [
+ '932',
+ 'Tau'
+ ],
+ [
+ '933',
+ 'Upsilon'
+ ],
+ [
+ '934',
+ 'Phi'
+ ],
+ [
+ '935',
+ 'Chi'
+ ],
+ [
+ '936',
+ 'Psi'
+ ],
+ [
+ '937',
+ 'Omega'
+ ],
+ [
+ '945',
+ 'alpha'
+ ],
+ [
+ '946',
+ 'beta'
+ ],
+ [
+ '947',
+ 'gamma'
+ ],
+ [
+ '948',
+ 'delta'
+ ],
+ [
+ '949',
+ 'epsilon'
+ ],
+ [
+ '950',
+ 'zeta'
+ ],
+ [
+ '951',
+ 'eta'
+ ],
+ [
+ '952',
+ 'theta'
+ ],
+ [
+ '953',
+ 'iota'
+ ],
+ [
+ '954',
+ 'kappa'
+ ],
+ [
+ '955',
+ 'lambda'
+ ],
+ [
+ '956',
+ 'mu'
+ ],
+ [
+ '957',
+ 'nu'
+ ],
+ [
+ '958',
+ 'xi'
+ ],
+ [
+ '959',
+ 'omicron'
+ ],
+ [
+ '960',
+ 'pi'
+ ],
+ [
+ '961',
+ 'rho'
+ ],
+ [
+ '962',
+ 'final sigma'
+ ],
+ [
+ '963',
+ 'sigma'
+ ],
+ [
+ '964',
+ 'tau'
+ ],
+ [
+ '965',
+ 'upsilon'
+ ],
+ [
+ '966',
+ 'phi'
+ ],
+ [
+ '967',
+ 'chi'
+ ],
+ [
+ '968',
+ 'psi'
+ ],
+ [
+ '969',
+ 'omega'
+ ],
+ [
+ '8501',
+ 'alef symbol'
+ ],
+ [
+ '982',
+ 'pi symbol'
+ ],
+ [
+ '8476',
+ 'real part symbol'
+ ],
+ [
+ '978',
+ 'upsilon - hook symbol'
+ ],
+ [
+ '8472',
+ 'Weierstrass p'
+ ],
+ [
+ '8465',
+ 'imaginary part'
+ ],
+ [
+ '8592',
+ 'leftwards arrow'
+ ],
+ [
+ '8593',
+ 'upwards arrow'
+ ],
+ [
+ '8594',
+ 'rightwards arrow'
+ ],
+ [
+ '8595',
+ 'downwards arrow'
+ ],
+ [
+ '8596',
+ 'left right arrow'
+ ],
+ [
+ '8629',
+ 'carriage return'
+ ],
+ [
+ '8656',
+ 'leftwards double arrow'
+ ],
+ [
+ '8657',
+ 'upwards double arrow'
+ ],
+ [
+ '8658',
+ 'rightwards double arrow'
+ ],
+ [
+ '8659',
+ 'downwards double arrow'
+ ],
+ [
+ '8660',
+ 'left right double arrow'
+ ],
+ [
+ '8756',
+ 'therefore'
+ ],
+ [
+ '8834',
+ 'subset of'
+ ],
+ [
+ '8835',
+ 'superset of'
+ ],
+ [
+ '8836',
+ 'not a subset of'
+ ],
+ [
+ '8838',
+ 'subset of or equal to'
+ ],
+ [
+ '8839',
+ 'superset of or equal to'
+ ],
+ [
+ '8853',
+ 'circled plus'
+ ],
+ [
+ '8855',
+ 'circled times'
+ ],
+ [
+ '8869',
+ 'perpendicular'
+ ],
+ [
+ '8901',
+ 'dot operator'
+ ],
+ [
+ '8968',
+ 'left ceiling'
+ ],
+ [
+ '8969',
+ 'right ceiling'
+ ],
+ [
+ '8970',
+ 'left floor'
+ ],
+ [
+ '8971',
+ 'right floor'
+ ],
+ [
+ '9001',
+ 'left-pointing angle bracket'
+ ],
+ [
+ '9002',
+ 'right-pointing angle bracket'
+ ],
+ [
+ '9674',
+ 'lozenge'
+ ],
+ [
+ '9824',
+ 'black spade suit'
+ ],
+ [
+ '9827',
+ 'black club suit'
+ ],
+ [
+ '9829',
+ 'black heart suit'
+ ],
+ [
+ '9830',
+ 'black diamond suit'
+ ],
+ [
+ '8194',
+ 'en space'
+ ],
+ [
+ '8195',
+ 'em space'
+ ],
+ [
+ '8201',
+ 'thin space'
+ ],
+ [
+ '8204',
+ 'zero width non-joiner'
+ ],
+ [
+ '8205',
+ 'zero width joiner'
+ ],
+ [
+ '8206',
+ 'left-to-right mark'
+ ],
+ [
+ '8207',
+ 'right-to-left mark'
+ ]
+ ];
+ };
+ var charmapFilter = function (charmap) {
+ return global$1.grep(charmap, function (item) {
+ return isArray(item) && item.length === 2;
+ });
+ };
+ var getCharsFromSetting = function (settingValue) {
+ if (isArray(settingValue)) {
+ return [].concat(charmapFilter(settingValue));
}
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.charmap.Plugin","tinymce.core.PluginManager","tinymce.core.util.Tools","global!tinymce.util.Tools.resolve"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class contains all core logic for the charmap plugin.
- *
- * @class tinymce.charmap.Plugin
- * @private
- */
-define(
- 'tinymce.plugins.charmap.Plugin',
- [
- 'tinymce.core.PluginManager',
- 'tinymce.core.util.Tools'
- ],
- function (PluginManager, Tools) {
- PluginManager.add('charmap', function (editor) {
- var isArray = Tools.isArray;
-
- function getDefaultCharMap() {
- return [
- ['160', 'no-break space'],
- ['173', 'soft hyphen'],
- ['34', 'quotation mark'],
- // finance
- ['162', 'cent sign'],
- ['8364', 'euro sign'],
- ['163', 'pound sign'],
- ['165', 'yen sign'],
- // signs
- ['169', 'copyright sign'],
- ['174', 'registered sign'],
- ['8482', 'trade mark sign'],
- ['8240', 'per mille sign'],
- ['181', 'micro sign'],
- ['183', 'middle dot'],
- ['8226', 'bullet'],
- ['8230', 'three dot leader'],
- ['8242', 'minutes / feet'],
- ['8243', 'seconds / inches'],
- ['167', 'section sign'],
- ['182', 'paragraph sign'],
- ['223', 'sharp s / ess-zed'],
- // quotations
- ['8249', 'single left-pointing angle quotation mark'],
- ['8250', 'single right-pointing angle quotation mark'],
- ['171', 'left pointing guillemet'],
- ['187', 'right pointing guillemet'],
- ['8216', 'left single quotation mark'],
- ['8217', 'right single quotation mark'],
- ['8220', 'left double quotation mark'],
- ['8221', 'right double quotation mark'],
- ['8218', 'single low-9 quotation mark'],
- ['8222', 'double low-9 quotation mark'],
- ['60', 'less-than sign'],
- ['62', 'greater-than sign'],
- ['8804', 'less-than or equal to'],
- ['8805', 'greater-than or equal to'],
- ['8211', 'en dash'],
- ['8212', 'em dash'],
- ['175', 'macron'],
- ['8254', 'overline'],
- ['164', 'currency sign'],
- ['166', 'broken bar'],
- ['168', 'diaeresis'],
- ['161', 'inverted exclamation mark'],
- ['191', 'turned question mark'],
- ['710', 'circumflex accent'],
- ['732', 'small tilde'],
- ['176', 'degree sign'],
- ['8722', 'minus sign'],
- ['177', 'plus-minus sign'],
- ['247', 'division sign'],
- ['8260', 'fraction slash'],
- ['215', 'multiplication sign'],
- ['185', 'superscript one'],
- ['178', 'superscript two'],
- ['179', 'superscript three'],
- ['188', 'fraction one quarter'],
- ['189', 'fraction one half'],
- ['190', 'fraction three quarters'],
- // math / logical
- ['402', 'function / florin'],
- ['8747', 'integral'],
- ['8721', 'n-ary sumation'],
- ['8734', 'infinity'],
- ['8730', 'square root'],
- ['8764', 'similar to'],
- ['8773', 'approximately equal to'],
- ['8776', 'almost equal to'],
- ['8800', 'not equal to'],
- ['8801', 'identical to'],
- ['8712', 'element of'],
- ['8713', 'not an element of'],
- ['8715', 'contains as member'],
- ['8719', 'n-ary product'],
- ['8743', 'logical and'],
- ['8744', 'logical or'],
- ['172', 'not sign'],
- ['8745', 'intersection'],
- ['8746', 'union'],
- ['8706', 'partial differential'],
- ['8704', 'for all'],
- ['8707', 'there exists'],
- ['8709', 'diameter'],
- ['8711', 'backward difference'],
- ['8727', 'asterisk operator'],
- ['8733', 'proportional to'],
- ['8736', 'angle'],
- // undefined
- ['180', 'acute accent'],
- ['184', 'cedilla'],
- ['170', 'feminine ordinal indicator'],
- ['186', 'masculine ordinal indicator'],
- ['8224', 'dagger'],
- ['8225', 'double dagger'],
- // alphabetical special chars
- ['192', 'A - grave'],
- ['193', 'A - acute'],
- ['194', 'A - circumflex'],
- ['195', 'A - tilde'],
- ['196', 'A - diaeresis'],
- ['197', 'A - ring above'],
- ['256', 'A - macron'],
- ['198', 'ligature AE'],
- ['199', 'C - cedilla'],
- ['200', 'E - grave'],
- ['201', 'E - acute'],
- ['202', 'E - circumflex'],
- ['203', 'E - diaeresis'],
- ['274', 'E - macron'],
- ['204', 'I - grave'],
- ['205', 'I - acute'],
- ['206', 'I - circumflex'],
- ['207', 'I - diaeresis'],
- ['298', 'I - macron'],
- ['208', 'ETH'],
- ['209', 'N - tilde'],
- ['210', 'O - grave'],
- ['211', 'O - acute'],
- ['212', 'O - circumflex'],
- ['213', 'O - tilde'],
- ['214', 'O - diaeresis'],
- ['216', 'O - slash'],
- ['332', 'O - macron'],
- ['338', 'ligature OE'],
- ['352', 'S - caron'],
- ['217', 'U - grave'],
- ['218', 'U - acute'],
- ['219', 'U - circumflex'],
- ['220', 'U - diaeresis'],
- ['362', 'U - macron'],
- ['221', 'Y - acute'],
- ['376', 'Y - diaeresis'],
- ['562', 'Y - macron'],
- ['222', 'THORN'],
- ['224', 'a - grave'],
- ['225', 'a - acute'],
- ['226', 'a - circumflex'],
- ['227', 'a - tilde'],
- ['228', 'a - diaeresis'],
- ['229', 'a - ring above'],
- ['257', 'a - macron'],
- ['230', 'ligature ae'],
- ['231', 'c - cedilla'],
- ['232', 'e - grave'],
- ['233', 'e - acute'],
- ['234', 'e - circumflex'],
- ['235', 'e - diaeresis'],
- ['275', 'e - macron'],
- ['236', 'i - grave'],
- ['237', 'i - acute'],
- ['238', 'i - circumflex'],
- ['239', 'i - diaeresis'],
- ['299', 'i - macron'],
- ['240', 'eth'],
- ['241', 'n - tilde'],
- ['242', 'o - grave'],
- ['243', 'o - acute'],
- ['244', 'o - circumflex'],
- ['245', 'o - tilde'],
- ['246', 'o - diaeresis'],
- ['248', 'o slash'],
- ['333', 'o macron'],
- ['339', 'ligature oe'],
- ['353', 's - caron'],
- ['249', 'u - grave'],
- ['250', 'u - acute'],
- ['251', 'u - circumflex'],
- ['252', 'u - diaeresis'],
- ['363', 'u - macron'],
- ['253', 'y - acute'],
- ['254', 'thorn'],
- ['255', 'y - diaeresis'],
- ['563', 'y - macron'],
- ['913', 'Alpha'],
- ['914', 'Beta'],
- ['915', 'Gamma'],
- ['916', 'Delta'],
- ['917', 'Epsilon'],
- ['918', 'Zeta'],
- ['919', 'Eta'],
- ['920', 'Theta'],
- ['921', 'Iota'],
- ['922', 'Kappa'],
- ['923', 'Lambda'],
- ['924', 'Mu'],
- ['925', 'Nu'],
- ['926', 'Xi'],
- ['927', 'Omicron'],
- ['928', 'Pi'],
- ['929', 'Rho'],
- ['931', 'Sigma'],
- ['932', 'Tau'],
- ['933', 'Upsilon'],
- ['934', 'Phi'],
- ['935', 'Chi'],
- ['936', 'Psi'],
- ['937', 'Omega'],
- ['945', 'alpha'],
- ['946', 'beta'],
- ['947', 'gamma'],
- ['948', 'delta'],
- ['949', 'epsilon'],
- ['950', 'zeta'],
- ['951', 'eta'],
- ['952', 'theta'],
- ['953', 'iota'],
- ['954', 'kappa'],
- ['955', 'lambda'],
- ['956', 'mu'],
- ['957', 'nu'],
- ['958', 'xi'],
- ['959', 'omicron'],
- ['960', 'pi'],
- ['961', 'rho'],
- ['962', 'final sigma'],
- ['963', 'sigma'],
- ['964', 'tau'],
- ['965', 'upsilon'],
- ['966', 'phi'],
- ['967', 'chi'],
- ['968', 'psi'],
- ['969', 'omega'],
- // symbols
- ['8501', 'alef symbol'],
- ['982', 'pi symbol'],
- ['8476', 'real part symbol'],
- ['978', 'upsilon - hook symbol'],
- ['8472', 'Weierstrass p'],
- ['8465', 'imaginary part'],
- // arrows
- ['8592', 'leftwards arrow'],
- ['8593', 'upwards arrow'],
- ['8594', 'rightwards arrow'],
- ['8595', 'downwards arrow'],
- ['8596', 'left right arrow'],
- ['8629', 'carriage return'],
- ['8656', 'leftwards double arrow'],
- ['8657', 'upwards double arrow'],
- ['8658', 'rightwards double arrow'],
- ['8659', 'downwards double arrow'],
- ['8660', 'left right double arrow'],
- ['8756', 'therefore'],
- ['8834', 'subset of'],
- ['8835', 'superset of'],
- ['8836', 'not a subset of'],
- ['8838', 'subset of or equal to'],
- ['8839', 'superset of or equal to'],
- ['8853', 'circled plus'],
- ['8855', 'circled times'],
- ['8869', 'perpendicular'],
- ['8901', 'dot operator'],
- ['8968', 'left ceiling'],
- ['8969', 'right ceiling'],
- ['8970', 'left floor'],
- ['8971', 'right floor'],
- ['9001', 'left-pointing angle bracket'],
- ['9002', 'right-pointing angle bracket'],
- ['9674', 'lozenge'],
- ['9824', 'black spade suit'],
- ['9827', 'black club suit'],
- ['9829', 'black heart suit'],
- ['9830', 'black diamond suit'],
- ['8194', 'en space'],
- ['8195', 'em space'],
- ['8201', 'thin space'],
- ['8204', 'zero width non-joiner'],
- ['8205', 'zero width joiner'],
- ['8206', 'left-to-right mark'],
- ['8207', 'right-to-left mark']
- ];
- }
-
- function charmapFilter(charmap) {
- return Tools.grep(charmap, function (item) {
- return isArray(item) && item.length == 2;
- });
- }
-
- function getCharsFromSetting(settingValue) {
- if (isArray(settingValue)) {
- return [].concat(charmapFilter(settingValue));
- }
-
- if (typeof settingValue == "function") {
- return settingValue();
- }
-
- return [];
- }
-
- function extendCharMap(charmap) {
- var settings = editor.settings;
+ if (typeof settingValue === 'function') {
+ return settingValue();
+ }
+ return [];
+ };
+ var extendCharMap = function (editor, charmap) {
+ var userCharMap = $_5e4nos9tjjgwebhr.getCharMap(editor);
+ if (userCharMap) {
+ charmap = getCharsFromSetting(userCharMap);
+ }
+ var userCharMapAppend = $_5e4nos9tjjgwebhr.getCharMapAppend(editor);
+ if (userCharMapAppend) {
+ return [].concat(charmap).concat(getCharsFromSetting(userCharMapAppend));
+ }
+ return charmap;
+ };
+ var getCharMap$1 = function (editor) {
+ return extendCharMap(editor, getDefaultCharMap());
+ };
+ var $_dc8shd9rjjgwebhl = { getCharMap: getCharMap$1 };
- if (settings.charmap) {
- charmap = getCharsFromSetting(settings.charmap);
- }
+ var get = function (editor) {
+ var getCharMap = function () {
+ return $_dc8shd9rjjgwebhl.getCharMap(editor);
+ };
+ var insertChar = function (chr) {
+ $_el68bd9pjjgwebhj.insertChar(editor, chr);
+ };
+ return {
+ getCharMap: getCharMap,
+ insertChar: insertChar
+ };
+ };
+ var $_gbufu29ojjgwebhf = { get: get };
- if (settings.charmap_append) {
- return [].concat(charmap).concat(getCharsFromSetting(settings.charmap_append));
+ var getHtml = function (charmap) {
+ var gridHtml, x, y;
+ var width = Math.min(charmap.length, 25);
+ var height = Math.ceil(charmap.length / width);
+ gridHtml = '<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>';
+ for (y = 0; y < height; y++) {
+ gridHtml += '<tr>';
+ for (x = 0; x < width; x++) {
+ var index = y * width + x;
+ if (index < charmap.length) {
+ var chr = charmap[index];
+ var charCode = parseInt(chr[0], 10);
+ var chrText = chr ? String.fromCharCode(charCode) : ' ';
+ gridHtml += '<td title="' + chr[1] + '">' + '<div tabindex="-1" title="' + chr[1] + '" role="button" data-chr="' + charCode + '">' + chrText + '</div>' + '</td>';
+ } else {
+ gridHtml += '<td />';
}
-
- return charmap;
- }
-
- function getCharMap() {
- return extendCharMap(getDefaultCharMap());
}
+ gridHtml += '</tr>';
+ }
+ gridHtml += '</tbody></table>';
+ return gridHtml;
+ };
+ var $_6avwgq9wjjgwebi2 = { getHtml: getHtml };
- function insertChar(chr) {
- editor.fire('insertCustomChar', { chr: chr }).chr;
- editor.execCommand('mceInsertContent', false, chr);
+ var getParentTd = function (elm) {
+ while (elm) {
+ if (elm.nodeName === 'TD') {
+ return elm;
}
-
- function showDialog() {
- var gridHtml, x, y, win;
-
- function getParentTd(elm) {
- while (elm) {
- if (elm.nodeName == 'TD') {
- return elm;
+ elm = elm.parentNode;
+ }
+ };
+ var open = function (editor) {
+ var win;
+ var charMapPanel = {
+ type: 'container',
+ html: $_6avwgq9wjjgwebi2.getHtml($_dc8shd9rjjgwebhl.getCharMap(editor)),
+ onclick: function (e) {
+ var target = e.target;
+ if (/^(TD|DIV)$/.test(target.nodeName)) {
+ var charDiv = getParentTd(target).firstChild;
+ if (charDiv && charDiv.hasAttribute('data-chr')) {
+ var charCodeString = charDiv.getAttribute('data-chr');
+ var charCode = parseInt(charCodeString, 10);
+ if (!isNaN(charCode)) {
+ $_el68bd9pjjgwebhj.insertChar(editor, String.fromCharCode(charCode));
}
-
- elm = elm.parentNode;
- }
- }
-
- gridHtml = '<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>';
-
- var charmap = getCharMap();
- var width = Math.min(charmap.length, 25);
- var height = Math.ceil(charmap.length / width);
- for (y = 0; y < height; y++) {
- gridHtml += '<tr>';
-
- for (x = 0; x < width; x++) {
- var index = y * width + x;
- if (index < charmap.length) {
- var chr = charmap[index];
- var chrText = chr ? String.fromCharCode(parseInt(chr[0], 10)) : ' ';
-
- gridHtml += (
- '<td title="' + chr[1] + '">' +
- '<div tabindex="-1" title="' + chr[1] + '" role="button" data-chr="' + chrText + '">' +
- chrText +
- '</div>' +
- '</td>'
- );
- } else {
- gridHtml += '<td />';
+ if (!e.ctrlKey) {
+ win.close();
}
}
-
- gridHtml += '</tr>';
}
-
- gridHtml += '</tbody></table>';
-
- var charMapPanel = {
+ },
+ onmouseover: function (e) {
+ var td = getParentTd(e.target);
+ if (td && td.firstChild) {
+ win.find('#preview').text(td.firstChild.firstChild.data);
+ win.find('#previewTitle').text(td.title);
+ } else {
+ win.find('#preview').text(' ');
+ win.find('#previewTitle').text(' ');
+ }
+ }
+ };
+ win = editor.windowManager.open({
+ title: 'Special character',
+ spacing: 10,
+ padding: 10,
+ items: [
+ charMapPanel,
+ {
type: 'container',
- html: gridHtml,
- onclick: function (e) {
- var target = e.target;
-
- if (/^(TD|DIV)$/.test(target.nodeName)) {
- var charDiv = getParentTd(target).firstChild;
- if (charDiv && charDiv.hasAttribute('data-chr')) {
- insertChar(charDiv.getAttribute('data-chr'));
-
- if (!e.ctrlKey) {
- win.close();
- }
- }
- }
- },
- onmouseover: function (e) {
- var td = getParentTd(e.target);
-
- if (td && td.firstChild) {
- win.find('#preview').text(td.firstChild.firstChild.data);
- win.find('#previewTitle').text(td.title);
- } else {
- win.find('#preview').text(' ');
- win.find('#previewTitle').text(' ');
- }
- }
- };
-
- win = editor.windowManager.open({
- title: "Special character",
- spacing: 10,
- padding: 10,
+ layout: 'flex',
+ direction: 'column',
+ align: 'center',
+ spacing: 5,
+ minWidth: 160,
+ minHeight: 160,
items: [
- charMapPanel,
{
- type: 'container',
- layout: 'flex',
- direction: 'column',
- align: 'center',
- spacing: 5,
- minWidth: 160,
- minHeight: 160,
- items: [
- {
- type: 'label',
- name: 'preview',
- text: ' ',
- style: 'font-size: 40px; text-align: center',
- border: 1,
- minWidth: 140,
- minHeight: 80
- },
- {
- type: 'spacer',
- minHeight: 20
- },
- {
- type: 'label',
- name: 'previewTitle',
- text: ' ',
- style: 'white-space: pre-wrap;',
- border: 1,
- minWidth: 140
- }
- ]
- }
- ],
- buttons: [
+ type: 'label',
+ name: 'preview',
+ text: ' ',
+ style: 'font-size: 40px; text-align: center',
+ border: 1,
+ minWidth: 140,
+ minHeight: 80
+ },
+ {
+ type: 'spacer',
+ minHeight: 20
+ },
{
- text: "Close", onclick: function () {
- win.close();
- }
+ type: 'label',
+ name: 'previewTitle',
+ text: ' ',
+ style: 'white-space: pre-wrap;',
+ border: 1,
+ minWidth: 140
}
]
- });
- }
-
- editor.addCommand('mceShowCharmap', showDialog);
-
- editor.addButton('charmap', {
- icon: 'charmap',
- tooltip: 'Special character',
- cmd: 'mceShowCharmap'
- });
+ }
+ ],
+ buttons: [{
+ text: 'Close',
+ onclick: function () {
+ win.close();
+ }
+ }]
+ });
+ };
+ var $_3eaa3c9vjjgwebht = { open: open };
- editor.addMenuItem('charmap', {
- icon: 'charmap',
- text: 'Special character',
- cmd: 'mceShowCharmap',
- context: 'insert'
- });
+ var register = function (editor) {
+ editor.addCommand('mceShowCharmap', function () {
+ $_3eaa3c9vjjgwebht.open(editor);
+ });
+ };
+ var $_b5cdu19ujjgwebhs = { register: register };
- return {
- getCharMap: getCharMap,
- insertChar: insertChar
- };
+ var register$1 = function (editor) {
+ editor.addButton('charmap', {
+ icon: 'charmap',
+ tooltip: 'Special character',
+ cmd: 'mceShowCharmap'
+ });
+ editor.addMenuItem('charmap', {
+ icon: 'charmap',
+ text: 'Special character',
+ cmd: 'mceShowCharmap',
+ context: 'insert'
});
+ };
+ var $_19iu2m9xjjgwebi3 = { register: register$1 };
- return function () { };
+ global.add('charmap', function (editor) {
+ $_b5cdu19ujjgwebhs.register(editor);
+ $_19iu2m9xjjgwebi3.register(editor);
+ return $_gbufu29ojjgwebhf.get(editor);
+ });
+ function Plugin () {
}
-);
-dem('tinymce.plugins.charmap.Plugin')();
+
+ return Plugin;
+
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2"],function(a,b){return a.add("charmap",function(a){function c(){return[["160","no-break space"],["173","soft hyphen"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["256","A - macron"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["274","E - macron"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["298","I - macron"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["332","O - macron"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["362","U - macron"],["221","Y - acute"],["376","Y - diaeresis"],["562","Y - macron"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["257","a - macron"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["275","e - macron"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["299","i - macron"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["333","o macron"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["363","u - macron"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["563","y - macron"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"]]}function d(a){return b.grep(a,function(a){return j(a)&&2==a.length})}function e(a){return j(a)?[].concat(d(a)):"function"==typeof a?a():[]}function f(b){var c=a.settings;return c.charmap&&(b=e(c.charmap)),c.charmap_append?[].concat(b).concat(e(c.charmap_append)):b}function g(){return f(c())}function h(b){a.fire("insertCustomChar",{chr:b}).chr,a.execCommand("mceInsertContent",!1,b)}function i(){function b(a){for(;a;){if("TD"==a.nodeName)return a;a=a.parentNode}}var c,d,e,f;c='<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>';var i=g(),j=Math.min(i.length,25),k=Math.ceil(i.length/j);for(e=0;e<k;e++){for(c+="<tr>",d=0;d<j;d++){var l=e*j+d;if(l<i.length){var m=i[l],n=m?String.fromCharCode(parseInt(m[0],10)):" ";c+='<td title="'+m[1]+'"><div tabindex="-1" title="'+m[1]+'" role="button" data-chr="'+n+'">'+n+"</div></td>"}else c+="<td />"}c+="</tr>"}c+="</tbody></table>";var o={type:"container",html:c,onclick:function(a){var c=a.target;if(/^(TD|DIV)$/.test(c.nodeName)){var d=b(c).firstChild;d&&d.hasAttribute("data-chr")&&(h(d.getAttribute("data-chr")),a.ctrlKey||f.close())}},onmouseover:function(a){var c=b(a.target);c&&c.firstChild?(f.find("#preview").text(c.firstChild.firstChild.data),f.find("#previewTitle").text(c.title)):(f.find("#preview").text(" "),f.find("#previewTitle").text(" "))}};f=a.windowManager.open({title:"Special character",spacing:10,padding:10,items:[o,{type:"container",layout:"flex",direction:"column",align:"center",spacing:5,minWidth:160,minHeight:160,items:[{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:140,minHeight:80},{type:"spacer",minHeight:20},{type:"label",name:"previewTitle",text:" ",style:"white-space: pre-wrap;",border:1,minWidth:140}]}],buttons:[{text:"Close",onclick:function(){f.close()}}]})}var j=b.isArray;return a.addCommand("mceShowCharmap",i),a.addButton("charmap",{icon:"charmap",tooltip:"Special character",cmd:"mceShowCharmap"}),a.addMenuItem("charmap",{icon:"charmap",text:"Special character",cmd:"mceShowCharmap",context:"insert"}),{getCharMap:g,insertChar:h}}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),i=function(e,t){return e.fire("insertCustomChar",{chr:t})},l=function(e,t){var a=i(e,t).chr;e.execCommand("mceInsertContent",!1,a)},a=tinymce.util.Tools.resolve("tinymce.util.Tools"),r=function(e){return e.settings.charmap},n=function(e){return e.settings.charmap_append},o=a.isArray,c=function(e){return o(e)?[].concat((t=e,a.grep(t,function(e){return o(e)&&2===e.length}))):"function"==typeof e?e():[];var t},s=function(e){return function(e,t){var a=r(e);a&&(t=c(a));var i=n(e);return i?[].concat(t).concat(c(i)):t}(e,[["160","no-break space"],["173","soft hyphen"],["34","quotation mark"],["162","cent sign"],["8364","euro sign"],["163","pound sign"],["165","yen sign"],["169","copyright sign"],["174","registered sign"],["8482","trade mark sign"],["8240","per mille sign"],["181","micro sign"],["183","middle dot"],["8226","bullet"],["8230","three dot leader"],["8242","minutes / feet"],["8243","seconds / inches"],["167","section sign"],["182","paragraph sign"],["223","sharp s / ess-zed"],["8249","single left-pointing angle quotation mark"],["8250","single right-pointing angle quotation mark"],["171","left pointing guillemet"],["187","right pointing guillemet"],["8216","left single quotation mark"],["8217","right single quotation mark"],["8220","left double quotation mark"],["8221","right double quotation mark"],["8218","single low-9 quotation mark"],["8222","double low-9 quotation mark"],["60","less-than sign"],["62","greater-than sign"],["8804","less-than or equal to"],["8805","greater-than or equal to"],["8211","en dash"],["8212","em dash"],["175","macron"],["8254","overline"],["164","currency sign"],["166","broken bar"],["168","diaeresis"],["161","inverted exclamation mark"],["191","turned question mark"],["710","circumflex accent"],["732","small tilde"],["176","degree sign"],["8722","minus sign"],["177","plus-minus sign"],["247","division sign"],["8260","fraction slash"],["215","multiplication sign"],["185","superscript one"],["178","superscript two"],["179","superscript three"],["188","fraction one quarter"],["189","fraction one half"],["190","fraction three quarters"],["402","function / florin"],["8747","integral"],["8721","n-ary sumation"],["8734","infinity"],["8730","square root"],["8764","similar to"],["8773","approximately equal to"],["8776","almost equal to"],["8800","not equal to"],["8801","identical to"],["8712","element of"],["8713","not an element of"],["8715","contains as member"],["8719","n-ary product"],["8743","logical and"],["8744","logical or"],["172","not sign"],["8745","intersection"],["8746","union"],["8706","partial differential"],["8704","for all"],["8707","there exists"],["8709","diameter"],["8711","backward difference"],["8727","asterisk operator"],["8733","proportional to"],["8736","angle"],["180","acute accent"],["184","cedilla"],["170","feminine ordinal indicator"],["186","masculine ordinal indicator"],["8224","dagger"],["8225","double dagger"],["192","A - grave"],["193","A - acute"],["194","A - circumflex"],["195","A - tilde"],["196","A - diaeresis"],["197","A - ring above"],["256","A - macron"],["198","ligature AE"],["199","C - cedilla"],["200","E - grave"],["201","E - acute"],["202","E - circumflex"],["203","E - diaeresis"],["274","E - macron"],["204","I - grave"],["205","I - acute"],["206","I - circumflex"],["207","I - diaeresis"],["298","I - macron"],["208","ETH"],["209","N - tilde"],["210","O - grave"],["211","O - acute"],["212","O - circumflex"],["213","O - tilde"],["214","O - diaeresis"],["216","O - slash"],["332","O - macron"],["338","ligature OE"],["352","S - caron"],["217","U - grave"],["218","U - acute"],["219","U - circumflex"],["220","U - diaeresis"],["362","U - macron"],["221","Y - acute"],["376","Y - diaeresis"],["562","Y - macron"],["222","THORN"],["224","a - grave"],["225","a - acute"],["226","a - circumflex"],["227","a - tilde"],["228","a - diaeresis"],["229","a - ring above"],["257","a - macron"],["230","ligature ae"],["231","c - cedilla"],["232","e - grave"],["233","e - acute"],["234","e - circumflex"],["235","e - diaeresis"],["275","e - macron"],["236","i - grave"],["237","i - acute"],["238","i - circumflex"],["239","i - diaeresis"],["299","i - macron"],["240","eth"],["241","n - tilde"],["242","o - grave"],["243","o - acute"],["244","o - circumflex"],["245","o - tilde"],["246","o - diaeresis"],["248","o slash"],["333","o macron"],["339","ligature oe"],["353","s - caron"],["249","u - grave"],["250","u - acute"],["251","u - circumflex"],["252","u - diaeresis"],["363","u - macron"],["253","y - acute"],["254","thorn"],["255","y - diaeresis"],["563","y - macron"],["913","Alpha"],["914","Beta"],["915","Gamma"],["916","Delta"],["917","Epsilon"],["918","Zeta"],["919","Eta"],["920","Theta"],["921","Iota"],["922","Kappa"],["923","Lambda"],["924","Mu"],["925","Nu"],["926","Xi"],["927","Omicron"],["928","Pi"],["929","Rho"],["931","Sigma"],["932","Tau"],["933","Upsilon"],["934","Phi"],["935","Chi"],["936","Psi"],["937","Omega"],["945","alpha"],["946","beta"],["947","gamma"],["948","delta"],["949","epsilon"],["950","zeta"],["951","eta"],["952","theta"],["953","iota"],["954","kappa"],["955","lambda"],["956","mu"],["957","nu"],["958","xi"],["959","omicron"],["960","pi"],["961","rho"],["962","final sigma"],["963","sigma"],["964","tau"],["965","upsilon"],["966","phi"],["967","chi"],["968","psi"],["969","omega"],["8501","alef symbol"],["982","pi symbol"],["8476","real part symbol"],["978","upsilon - hook symbol"],["8472","Weierstrass p"],["8465","imaginary part"],["8592","leftwards arrow"],["8593","upwards arrow"],["8594","rightwards arrow"],["8595","downwards arrow"],["8596","left right arrow"],["8629","carriage return"],["8656","leftwards double arrow"],["8657","upwards double arrow"],["8658","rightwards double arrow"],["8659","downwards double arrow"],["8660","left right double arrow"],["8756","therefore"],["8834","subset of"],["8835","superset of"],["8836","not a subset of"],["8838","subset of or equal to"],["8839","superset of or equal to"],["8853","circled plus"],["8855","circled times"],["8869","perpendicular"],["8901","dot operator"],["8968","left ceiling"],["8969","right ceiling"],["8970","left floor"],["8971","right floor"],["9001","left-pointing angle bracket"],["9002","right-pointing angle bracket"],["9674","lozenge"],["9824","black spade suit"],["9827","black club suit"],["9829","black heart suit"],["9830","black diamond suit"],["8194","en space"],["8195","em space"],["8201","thin space"],["8204","zero width non-joiner"],["8205","zero width joiner"],["8206","left-to-right mark"],["8207","right-to-left mark"]])},t=function(t){return{getCharMap:function(){return s(t)},insertChar:function(e){l(t,e)}}},u=function(e){var t,a,i,r=Math.min(e.length,25),n=Math.ceil(e.length/r);for(t='<table role="presentation" cellspacing="0" class="mce-charmap"><tbody>',i=0;i<n;i++){for(t+="<tr>",a=0;a<r;a++){var o=i*r+a;if(o<e.length){var l=e[o],c=parseInt(l[0],10),s=l?String.fromCharCode(c):" ";t+='<td title="'+l[1]+'"><div tabindex="-1" title="'+l[1]+'" role="button" data-chr="'+c+'">'+s+"</div></td>"}else t+="<td />"}t+="</tr>"}return t+="</tbody></table>"},d=function(e){for(;e;){if("TD"===e.nodeName)return e;e=e.parentNode}},m=function(n){var o,e={type:"container",html:u(s(n)),onclick:function(e){var t=e.target;if(/^(TD|DIV)$/.test(t.nodeName)){var a=d(t).firstChild;if(a&&a.hasAttribute("data-chr")){var i=a.getAttribute("data-chr"),r=parseInt(i,10);isNaN(r)||l(n,String.fromCharCode(r)),e.ctrlKey||o.close()}}},onmouseover:function(e){var t=d(e.target);t&&t.firstChild?(o.find("#preview").text(t.firstChild.firstChild.data),o.find("#previewTitle").text(t.title)):(o.find("#preview").text(" "),o.find("#previewTitle").text(" "))}};o=n.windowManager.open({title:"Special character",spacing:10,padding:10,items:[e,{type:"container",layout:"flex",direction:"column",align:"center",spacing:5,minWidth:160,minHeight:160,items:[{type:"label",name:"preview",text:" ",style:"font-size: 40px; text-align: center",border:1,minWidth:140,minHeight:80},{type:"spacer",minHeight:20},{type:"label",name:"previewTitle",text:" ",style:"white-space: pre-wrap;",border:1,minWidth:140}]}],buttons:[{text:"Close",onclick:function(){o.close()}}]})},g=function(e){e.addCommand("mceShowCharmap",function(){m(e)})},p=function(e){e.addButton("charmap",{icon:"charmap",tooltip:"Special character",cmd:"mceShowCharmap"}),e.addMenuItem("charmap",{icon:"charmap",text:"Special character",cmd:"mceShowCharmap",context:"insert"})};e.add("charmap",function(e){return g(e),p(e),t(e)})}();
\ No newline at end of file
(function () {
+var colorpicker = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
+ var global$1 = tinymce.util.Tools.resolve('tinymce.util.Color');
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
+ var showPreview = function (win, hexColor) {
+ win.find('#preview')[0].getEl().style.background = hexColor;
};
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.colorpicker.Plugin","tinymce.core.PluginManager","tinymce.core.util.Color","global!tinymce.util.Tools.resolve"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Color',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Color');
- }
-);
-
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class contains all core logic for the colorpicker plugin.
- *
- * @class tinymce.colorpicker.Plugin
- * @private
- */
-define(
- 'tinymce.plugins.colorpicker.Plugin',
- [
- 'tinymce.core.PluginManager',
- 'tinymce.core.util.Color'
- ],
- function (PluginManager, Color) {
- PluginManager.add('colorpicker', function (editor) {
- function colorPickerCallback(callback, value) {
- function setColor(value) {
- var color = new Color(value), rgb = color.toRgb();
-
- win.fromJSON({
- r: rgb.r,
- g: rgb.g,
- b: rgb.b,
- hex: color.toHex().substr(1)
- });
-
- showPreview(color.toHex());
- }
-
- function showPreview(hexColor) {
- win.find('#preview')[0].getEl().style.background = hexColor;
- }
-
- var win = editor.windowManager.open({
- title: 'Color',
- items: {
- type: 'container',
- layout: 'flex',
- direction: 'row',
- align: 'stretch',
- padding: 5,
- spacing: 10,
+ var setColor = function (win, value) {
+ var color = global$1(value), rgb = color.toRgb();
+ win.fromJSON({
+ r: rgb.r,
+ g: rgb.g,
+ b: rgb.b,
+ hex: color.toHex().substr(1)
+ });
+ showPreview(win, color.toHex());
+ };
+ var open = function (editor, callback, value) {
+ var win = editor.windowManager.open({
+ title: 'Color',
+ items: {
+ type: 'container',
+ layout: 'flex',
+ direction: 'row',
+ align: 'stretch',
+ padding: 5,
+ spacing: 10,
+ items: [
+ {
+ type: 'colorpicker',
+ value: value,
+ onchange: function () {
+ var rgb = this.rgb();
+ if (win) {
+ win.find('#r').value(rgb.r);
+ win.find('#g').value(rgb.g);
+ win.find('#b').value(rgb.b);
+ win.find('#hex').value(this.value().substr(1));
+ showPreview(win, this.value());
+ }
+ }
+ },
+ {
+ type: 'form',
+ padding: 0,
+ labelGap: 5,
+ defaults: {
+ type: 'textbox',
+ size: 7,
+ value: '0',
+ flex: 1,
+ spellcheck: false,
+ onchange: function () {
+ var colorPickerCtrl = win.find('colorpicker')[0];
+ var name, value;
+ name = this.name();
+ value = this.value();
+ if (name === 'hex') {
+ value = '#' + value;
+ setColor(win, value);
+ colorPickerCtrl.value(value);
+ return;
+ }
+ value = {
+ r: win.find('#r').value(),
+ g: win.find('#g').value(),
+ b: win.find('#b').value()
+ };
+ colorPickerCtrl.value(value);
+ setColor(win, value);
+ }
+ },
items: [
{
- type: 'colorpicker',
- value: value,
- onchange: function () {
- var rgb = this.rgb();
-
- if (win) {
- win.find('#r').value(rgb.r);
- win.find('#g').value(rgb.g);
- win.find('#b').value(rgb.b);
- win.find('#hex').value(this.value().substr(1));
- showPreview(this.value());
- }
- }
+ name: 'r',
+ label: 'R',
+ autofocus: 1
},
{
- type: 'form',
- padding: 0,
- labelGap: 5,
- defaults: {
- type: 'textbox',
- size: 7,
- value: '0',
- flex: 1,
- spellcheck: false,
- onchange: function () {
- var colorPickerCtrl = win.find('colorpicker')[0];
- var name, value;
-
- name = this.name();
- value = this.value();
-
- if (name == "hex") {
- value = '#' + value;
- setColor(value);
- colorPickerCtrl.value(value);
- return;
- }
-
- value = {
- r: win.find('#r').value(),
- g: win.find('#g').value(),
- b: win.find('#b').value()
- };
-
- colorPickerCtrl.value(value);
- setColor(value);
- }
- },
- items: [
- { name: 'r', label: 'R', autofocus: 1 },
- { name: 'g', label: 'G' },
- { name: 'b', label: 'B' },
- { name: 'hex', label: '#', value: '000000' },
- { name: 'preview', type: 'container', border: 1 }
- ]
+ name: 'g',
+ label: 'G'
+ },
+ {
+ name: 'b',
+ label: 'B'
+ },
+ {
+ name: 'hex',
+ label: '#',
+ value: '000000'
+ },
+ {
+ name: 'preview',
+ type: 'container',
+ border: 1
}
]
- },
- onSubmit: function () {
- callback('#' + this.toJSON().hex);
}
- });
-
- setColor(value);
- }
-
- if (!editor.settings.color_picker_callback) {
- editor.settings.color_picker_callback = colorPickerCallback;
+ ]
+ },
+ onSubmit: function () {
+ callback('#' + win.toJSON().hex);
}
});
+ setColor(win, value);
+ };
+ var $_2gqaphanjjgwebmu = { open: open };
- return function () { };
+ global.add('colorpicker', function (editor) {
+ if (!editor.settings.color_picker_callback) {
+ editor.settings.color_picker_callback = function (callback, value) {
+ $_2gqaphanjjgwebmu.open(editor, callback, value);
+ };
+ }
+ });
+ function Plugin () {
}
-);
-dem('tinymce.plugins.colorpicker.Plugin')();
+
+ return Plugin;
+
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Color")}),g("0",["1","2"],function(a,b){return a.add("colorpicker",function(a){function c(c,d){function e(a){var c=new b(a),d=c.toRgb();g.fromJSON({r:d.r,g:d.g,b:d.b,hex:c.toHex().substr(1)}),f(c.toHex())}function f(a){g.find("#preview")[0].getEl().style.background=a}var g=a.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:d,onchange:function(){var a=this.rgb();g&&(g.find("#r").value(a.r),g.find("#g").value(a.g),g.find("#b").value(a.b),g.find("#hex").value(this.value().substr(1)),f(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var a,b,c=g.find("colorpicker")[0];return a=this.name(),b=this.value(),"hex"==a?(b="#"+b,e(b),void c.value(b)):(b={r:g.find("#r").value(),g:g.find("#g").value(),b:g.find("#b").value()},c.value(b),void e(b))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){c("#"+this.toJSON().hex)}});e(d)}a.settings.color_picker_callback||(a.settings.color_picker_callback=c)}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),l=tinymce.util.Tools.resolve("tinymce.util.Color"),a=function(e,n){e.find("#preview")[0].getEl().style.background=n},o=function(e,n){var i=l(n),t=i.toRgb();e.fromJSON({r:t.r,g:t.g,b:t.b,hex:i.toHex().substr(1)}),a(e,i.toHex())},t=function(e,n,i){var t=e.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:i,onchange:function(){var e=this.rgb();t&&(t.find("#r").value(e.r),t.find("#g").value(e.g),t.find("#b").value(e.b),t.find("#hex").value(this.value().substr(1)),a(t,this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var e,n,i=t.find("colorpicker")[0];if(e=this.name(),n=this.value(),"hex"===e)return o(t,n="#"+n),void i.value(n);n={r:t.find("#r").value(),g:t.find("#g").value(),b:t.find("#b").value()},i.value(n),o(t,n)}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){n("#"+t.toJSON().hex)}});o(t,i)};e.add("colorpicker",function(i){i.settings.color_picker_callback||(i.settings.color_picker_callback=function(e,n){t(i,e,n)})})}();
\ No newline at end of file
argsMap = argsMap.split(" ");
}
- if (argsMap && typeof argsMap != "function") {
+ if (argsMap && typeof argsMap !== "function") {
for (var i = 0; i < argsMap.length; i++) {
callbackArgs.push(e[argsMap[i]]);
}
});
}
- tinymce.on('SetupEditor', patchEditor);
+ tinymce.on('SetupEditor', function (e) {
+ patchEditor(e.editor);
+ });
+
tinymce.PluginManager.add("compat3x", patchEditor);
tinymce.addI18n = function (prefix, o) {
-!function(a){function b(){}function c(a){!f&&window&&window.console&&(f=!0,console.log("Deprecated TinyMCE API call: "+a))}function d(a,d,e,f){a=a||this;var g=[];return d?(this.add=function(b,h,i){function j(c){var g=[];if("string"==typeof e&&(e=e.split(" ")),e&&"function"!=typeof e)for(var i=0;i<e.length;i++)g.push(c[e[i]]);("function"!=typeof e||(g=e(d,c,a)))&&(e||(g=[c]),g.unshift(f||a),b.apply(h||f||a,g)===!1&&c.stopImmediatePropagation())}c("<target>.on"+d+".add(..)"),a.on(d,j,i);var k={original:b,patched:j};return g.push(k),j},this.addToTop=function(a,b){this.add(a,b,!0)},this.remove=function(b){return g.forEach(function(c,e){if(c.original===b)return g.splice(e,1),a.off(d,c.patched)}),a.off(d,b)},void(this.dispatch=function(){return a.fire(d),!0})):void(this.add=this.addToTop=this.remove=this.dispatch=b)}function e(e){function f(b){var c=e.settings.language||"en",d=[c,b].join("."),f=a.i18n.translate(d);return d!==f?f:a.i18n.translate(b)}function g(b,c){a.each(b.split(" "),function(a){e["on"+a]=new d(e,a,c)})}function h(a,b,c){return[b.level,c]}function i(a){return function(b,c){if(!c.selection&&!a||c.selection==a)return[c]}}function j(){function b(){return j()}var d={},e="add addMenu addSeparator collapse createMenu destroy displayColor expand focus getLength hasMenus hideMenu isActive isCollapsed isDisabled isRendered isSelected mark postRender remove removeAll renderHTML renderMenu renderNode renderTo select selectByIndex setActive setAriaProperty setColor setDisabled setSelected setState showMenu update";return c("editor.controlManager.*"),a.each(e.split(" "),function(a){d[a]=b}),d}if(!e.controlManager){e.controlManager={buttons:{},setDisabled:function(a,b){c("controlManager.setDisabled(..)"),this.buttons[a]&&this.buttons[a].disabled(b)},setActive:function(a,b){c("controlManager.setActive(..)"),this.buttons[a]&&this.buttons[a].active(b)},onAdd:new d,onPostRender:new d,add:function(a){return a},createButton:j,createColorSplitButton:j,createControl:j,createDropMenu:j,createListBox:j,createMenuButton:j,createSeparator:j,createSplitButton:j,createToolbar:j,createToolbarGroup:j,destroy:b,get:b,setControlType:j},g("PreInit BeforeRenderUI PostRender Load Init Remove Activate Deactivate","editor"),g("Click MouseUp MouseDown DblClick KeyDown KeyUp KeyPress ContextMenu Paste Submit Reset"),g("BeforeExecCommand ExecCommand","command ui value args"),g("PreProcess PostProcess LoadContent SaveContent Change"),g("BeforeSetContent BeforeGetContent SetContent GetContent",i(!1)),g("SetProgressState","state time"),g("VisualAid","element hasVisual"),g("Undo Redo",h),g("NodeChange",function(a,b){return[e.controlManager,b.element,e.selection.isCollapsed(),b]});var k=e.addButton;e.addButton=function(a,b){function c(){if(e.controlManager.buttons[a]=this,d)return d.apply(this,arguments)}var d;for(var g in b)"onpostrender"===g.toLowerCase()&&(d=b[g],b.onPostRender=c);return d||(b.onPostRender=c),b.title&&(b.title=f(b.title)),k.call(this,a,b)},e.on("init",function(){var a=e.undoManager,b=e.selection;a.onUndo=new d(e,"Undo",h,null,a),a.onRedo=new d(e,"Redo",h,null,a),a.onBeforeAdd=new d(e,"BeforeAddUndo",null,a),a.onAdd=new d(e,"AddUndo",null,a),b.onBeforeGetContent=new d(e,"BeforeGetContent",i(!0),b),b.onGetContent=new d(e,"GetContent",i(!0),b),b.onBeforeSetContent=new d(e,"BeforeSetContent",i(!0),b),b.onSetContent=new d(e,"SetContent",i(!0),b)}),e.on("BeforeRenderUI",function(){var b=e.windowManager;b.onOpen=new d,b.onClose=new d,b.createInstance=function(b,d,e,f,g,h){c("windowManager.createInstance(..)");var i=a.resolve(b);return new i(d,e,f,g,h)}})}}var f;a.util.Dispatcher=d,a.onBeforeUnload=new d(a,"BeforeUnload"),a.onAddEditor=new d(a,"AddEditor","editor"),a.onRemoveEditor=new d(a,"RemoveEditor","editor"),a.util.Cookie={get:b,getHash:b,remove:b,set:b,setHash:b},a.on("SetupEditor",e),a.PluginManager.add("compat3x",e),a.addI18n=function(b,c){var d=a.util.I18n,e=a.each;return"string"==typeof b&&b.indexOf(".")===-1?void d.add(b,c):void(a.is(b,"string")?e(c,function(a,c){d.data[b+"."+c]=a}):e(b,function(a,b){e(a,function(a,c){e(a,function(a,e){"common"===c?d.data[b+"."+e]=a:d.data[b+"."+c+"."+e]=a})})}))}}(tinymce);
\ No newline at end of file
+!function(u){var t;function l(){}function f(e){!t&&window&&window.console&&(t=!0,console.log("Deprecated TinyMCE API call: "+e))}function i(i,a,d,s){i=i||this;var c=[];a?(this.add=function(o,r,e){function t(e){var t=[];if("string"==typeof d&&(d=d.split(" ")),d&&"function"!=typeof d)for(var n=0;n<d.length;n++)t.push(e[d[n]]);("function"!=typeof d||(t=d(a,e,i)))&&(d||(t=[e]),t.unshift(s||i),!1===o.apply(r||s||i,t)&&e.stopImmediatePropagation())}f("<target>.on"+a+".add(..)"),i.on(a,t,e);var n={original:o,patched:t};return c.push(n),t},this.addToTop=function(e,t){this.add(e,t,!0)},this.remove=function(n){return c.forEach(function(e,t){if(e.original===n)return c.splice(t,1),i.off(a,e.patched)}),i.off(a,n)},this.dispatch=function(){return i.fire(a),!0}):this.add=this.addToTop=this.remove=this.dispatch=l}function n(s){function e(e,t){u.each(e.split(" "),function(e){s["on"+e]=new i(s,e,t)})}function n(e,t,n){return[t.level,n]}function o(n){return function(e,t){if(!t.selection&&!n||t.selection==n)return[t]}}if(!s.controlManager){s.controlManager={buttons:{},setDisabled:function(e,t){f("controlManager.setDisabled(..)"),this.buttons[e]&&this.buttons[e].disabled(t)},setActive:function(e,t){f("controlManager.setActive(..)"),this.buttons[e]&&this.buttons[e].active(t)},onAdd:new i,onPostRender:new i,add:function(e){return e},createButton:r,createColorSplitButton:r,createControl:r,createDropMenu:r,createListBox:r,createMenuButton:r,createSeparator:r,createSplitButton:r,createToolbar:r,createToolbarGroup:r,destroy:l,get:l,setControlType:r},e("PreInit BeforeRenderUI PostRender Load Init Remove Activate Deactivate","editor"),e("Click MouseUp MouseDown DblClick KeyDown KeyUp KeyPress ContextMenu Paste Submit Reset"),e("BeforeExecCommand ExecCommand","command ui value args"),e("PreProcess PostProcess LoadContent SaveContent Change"),e("BeforeSetContent BeforeGetContent SetContent GetContent",o(!1)),e("SetProgressState","state time"),e("VisualAid","element hasVisual"),e("Undo Redo",n),e("NodeChange",function(e,t){return[s.controlManager,t.element,s.selection.isCollapsed(),t]});var c=s.addButton;s.addButton=function(e,t){var n,o,r,i;function a(){if(s.controlManager.buttons[e]=this,n)return n.apply(this,arguments)}for(var d in t)"onpostrender"===d.toLowerCase()&&(n=t[d],t.onPostRender=a);return n||(t.onPostRender=a),t.title&&(t.title=(o=t.title,r=[s.settings.language||"en",o].join("."),i=u.i18n.translate(r),r!==i?i:u.i18n.translate(o))),c.call(this,e,t)},s.on("init",function(){var e=s.undoManager,t=s.selection;e.onUndo=new i(s,"Undo",n,null,e),e.onRedo=new i(s,"Redo",n,null,e),e.onBeforeAdd=new i(s,"BeforeAddUndo",null,e),e.onAdd=new i(s,"AddUndo",null,e),t.onBeforeGetContent=new i(s,"BeforeGetContent",o(!0),t),t.onGetContent=new i(s,"GetContent",o(!0),t),t.onBeforeSetContent=new i(s,"BeforeSetContent",o(!0),t),t.onSetContent=new i(s,"SetContent",o(!0),t)}),s.on("BeforeRenderUI",function(){var e=s.windowManager;e.onOpen=new i,e.onClose=new i,e.createInstance=function(e,t,n,o,r,i){return f("windowManager.createInstance(..)"),new(u.resolve(e))(t,n,o,r,i)}})}function r(){var t={};function n(){return r()}return f("editor.controlManager.*"),u.each("add addMenu addSeparator collapse createMenu destroy displayColor expand focus getLength hasMenus hideMenu isActive isCollapsed isDisabled isRendered isSelected mark postRender remove removeAll renderHTML renderMenu renderNode renderTo select selectByIndex setActive setAriaProperty setColor setDisabled setSelected setState showMenu update".split(" "),function(e){t[e]=n}),t}}u.util.Dispatcher=i,u.onBeforeUnload=new i(u,"BeforeUnload"),u.onAddEditor=new i(u,"AddEditor","editor"),u.onRemoveEditor=new i(u,"RemoveEditor","editor"),u.util.Cookie={get:l,getHash:l,remove:l,set:l,setHash:l},u.on("SetupEditor",function(e){n(e.editor)}),u.PluginManager.add("compat3x",n),u.addI18n=function(n,e){var r=u.util.I18n,t=u.each;"string"!=typeof n||-1!==n.indexOf(".")?u.is(n,"string")?t(e,function(e,t){r.data[n+"."+t]=e}):t(n,function(e,o){t(e,function(e,n){t(e,function(e,t){"common"===n?r.data[o+"."+t]=e:r.data[o+"."+n+"."+t]=e})})}):r.add(n,e)}}(tinymce);
\ No newline at end of file
(function () {
-
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
-
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
- };
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.directionality.Plugin","tinymce.core.PluginManager","tinymce.core.util.Tools","global!tinymce.util.Tools.resolve"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class contains all core logic for the directionality plugin.
- *
- * @class tinymce.directionality.Plugin
- * @private
- */
-define(
- 'tinymce.plugins.directionality.Plugin',
- [
- 'tinymce.core.PluginManager',
- 'tinymce.core.util.Tools'
- ],
- function (PluginManager, Tools) {
- PluginManager.add('directionality', function (editor) {
- function setDir(dir) {
- var dom = editor.dom, curDir, blocks = editor.selection.getSelectedBlocks();
-
- if (blocks.length) {
- curDir = dom.getAttrib(blocks[0], "dir");
-
- Tools.each(blocks, function (block) {
- // Add dir to block if the parent block doesn't already have that dir
- if (!dom.getParent(block.parentNode, "*[dir='" + dir + "']", dom.getRoot())) {
- if (curDir != dir) {
- dom.setAttrib(block, "dir", dir);
- } else {
- dom.setAttrib(block, "dir", null);
- }
- }
- });
-
- editor.nodeChanged();
+var directionality = (function () {
+ 'use strict';
+
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
+
+ var global$1 = tinymce.util.Tools.resolve('tinymce.util.Tools');
+
+ var setDir = function (editor, dir) {
+ var dom = editor.dom;
+ var curDir;
+ var blocks = editor.selection.getSelectedBlocks();
+ if (blocks.length) {
+ curDir = dom.getAttrib(blocks[0], 'dir');
+ global$1.each(blocks, function (block) {
+ if (!dom.getParent(block.parentNode, '*[dir="' + dir + '"]', dom.getRoot())) {
+ dom.setAttrib(block, 'dir', curDir !== dir ? dir : null);
}
- }
-
- function generateSelector(dir) {
- var selector = [];
-
- Tools.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function (name) {
- selector.push(name + '[dir=' + dir + ']');
- });
-
- return selector.join(',');
- }
-
- editor.addCommand('mceDirectionLTR', function () {
- setDir("ltr");
- });
-
- editor.addCommand('mceDirectionRTL', function () {
- setDir("rtl");
});
+ editor.nodeChanged();
+ }
+ };
+ var $_fd54yfb4jjgwebo5 = { setDir: setDir };
- editor.addButton('ltr', {
- title: 'Left to right',
- cmd: 'mceDirectionLTR',
- stateSelector: generateSelector('ltr')
- });
+ var register = function (editor) {
+ editor.addCommand('mceDirectionLTR', function () {
+ $_fd54yfb4jjgwebo5.setDir(editor, 'ltr');
+ });
+ editor.addCommand('mceDirectionRTL', function () {
+ $_fd54yfb4jjgwebo5.setDir(editor, 'rtl');
+ });
+ };
+ var $_cpb3fob3jjgwebo4 = { register: register };
- editor.addButton('rtl', {
- title: 'Right to left',
- cmd: 'mceDirectionRTL',
- stateSelector: generateSelector('rtl')
- });
+ var generateSelector = function (dir) {
+ var selector = [];
+ global$1.each('h1 h2 h3 h4 h5 h6 div p'.split(' '), function (name) {
+ selector.push(name + '[dir=' + dir + ']');
+ });
+ return selector.join(',');
+ };
+ var register$1 = function (editor) {
+ editor.addButton('ltr', {
+ title: 'Left to right',
+ cmd: 'mceDirectionLTR',
+ stateSelector: generateSelector('ltr')
+ });
+ editor.addButton('rtl', {
+ title: 'Right to left',
+ cmd: 'mceDirectionRTL',
+ stateSelector: generateSelector('rtl')
});
+ };
+ var $_8ch9fzb6jjgwebo7 = { register: register$1 };
- return function () { };
+ global.add('directionality', function (editor) {
+ $_cpb3fob3jjgwebo4.register(editor);
+ $_8ch9fzb6jjgwebo7.register(editor);
+ });
+ function Plugin () {
}
-);
-dem('tinymce.plugins.directionality.Plugin')();
+
+ return Plugin;
+
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.PluginManager")}),g("2",["3"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2"],function(a,b){return a.add("directionality",function(a){function c(c){var d,e=a.dom,f=a.selection.getSelectedBlocks();f.length&&(d=e.getAttrib(f[0],"dir"),b.each(f,function(a){e.getParent(a.parentNode,"*[dir='"+c+"']",e.getRoot())||(d!=c?e.setAttrib(a,"dir",c):e.setAttrib(a,"dir",null))}),a.nodeChanged())}function d(a){var c=[];return b.each("h1 h2 h3 h4 h5 h6 div p".split(" "),function(b){c.push(b+"[dir="+a+"]")}),c.join(",")}a.addCommand("mceDirectionLTR",function(){c("ltr")}),a.addCommand("mceDirectionRTL",function(){c("rtl")}),a.addButton("ltr",{title:"Left to right",cmd:"mceDirectionLTR",stateSelector:d("ltr")}),a.addButton("rtl",{title:"Right to left",cmd:"mceDirectionRTL",stateSelector:d("rtl")})}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),c=tinymce.util.Tools.resolve("tinymce.util.Tools"),e=function(t,e){var i,n=t.dom,o=t.selection.getSelectedBlocks();o.length&&(i=n.getAttrib(o[0],"dir"),c.each(o,function(t){n.getParent(t.parentNode,'*[dir="'+e+'"]',n.getRoot())||n.setAttrib(t,"dir",i!==e?e:null)}),t.nodeChanged())},i=function(t){t.addCommand("mceDirectionLTR",function(){e(t,"ltr")}),t.addCommand("mceDirectionRTL",function(){e(t,"rtl")})},n=function(e){var i=[];return c.each("h1 h2 h3 h4 h5 h6 div p".split(" "),function(t){i.push(t+"[dir="+e+"]")}),i.join(",")},o=function(t){t.addButton("ltr",{title:"Left to right",cmd:"mceDirectionLTR",stateSelector:n("ltr")}),t.addButton("rtl",{title:"Right to left",cmd:"mceDirectionRTL",stateSelector:n("rtl")})};t.add("directionality",function(t){i(t),o(t)})}();
\ No newline at end of file
(function () {
-
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
-
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
+var fullscreen = (function () {
+ 'use strict';
+
+ var Cell = function (initial) {
+ var value = initial;
+ var get = function () {
+ return value;
+ };
+ var set = function (v) {
+ value = v;
+ };
+ var clone = function () {
+ return Cell(get());
+ };
+ return {
+ get: get,
+ set: set,
+ clone: clone
+ };
};
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.fullscreen.Plugin","tinymce.core.dom.DOMUtils","tinymce.core.PluginManager","global!tinymce.util.Tools.resolve"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.DOMUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.DOMUtils');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-/**
- * This class contains all core logic for the fullscreen plugin.
- *
- * @class tinymce.fullscreen.Plugin
- * @private
- */
-define(
- 'tinymce.plugins.fullscreen.Plugin',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.core.PluginManager'
- ],
- function (DOMUtils, PluginManager) {
- var DOM = DOMUtils.DOM;
-
- PluginManager.add('fullscreen', function (editor) {
- var fullscreenState = false, iframeWidth, iframeHeight, resizeHandler;
- var containerWidth, containerHeight, scrollPos;
-
- if (editor.settings.inline) {
- return;
- }
-
- function getWindowSize() {
- var w, h, win = window, doc = document;
- var body = doc.body;
-
- // Old IE
- if (body.offsetWidth) {
- w = body.offsetWidth;
- h = body.offsetHeight;
- }
-
- // Modern browsers
- if (win.innerWidth && win.innerHeight) {
- w = win.innerWidth;
- h = win.innerHeight;
- }
-
- return { w: w, h: h };
+ var get = function (fullscreenState) {
+ return {
+ isFullscreen: function () {
+ return fullscreenState.get() !== null;
}
+ };
+ };
+ var $_6qfcwucejjgwebu0 = { get: get };
- function getScrollPos() {
- var vp = DOM.getViewPort();
-
- return {
- x: vp.x,
- y: vp.y
- };
- }
+ var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
- function setScrollPos(pos) {
- window.scrollTo(pos.x, pos.y);
+ var fireFullscreenStateChanged = function (editor, state) {
+ editor.fire('FullscreenStateChanged', { state: state });
+ };
+ var $_en5ltwcijjgwebu6 = { fireFullscreenStateChanged: fireFullscreenStateChanged };
+
+ var DOM = global$1.DOM;
+ var getWindowSize = function () {
+ var w;
+ var h;
+ var win = window;
+ var doc = document;
+ var body = doc.body;
+ if (body.offsetWidth) {
+ w = body.offsetWidth;
+ h = body.offsetHeight;
+ }
+ if (win.innerWidth && win.innerHeight) {
+ w = win.innerWidth;
+ h = win.innerHeight;
+ }
+ return {
+ w: w,
+ h: h
+ };
+ };
+ var getScrollPos = function () {
+ var vp = DOM.getViewPort();
+ return {
+ x: vp.x,
+ y: vp.y
+ };
+ };
+ var setScrollPos = function (pos) {
+ window.scrollTo(pos.x, pos.y);
+ };
+ var toggleFullscreen = function (editor, fullscreenState) {
+ var body = document.body;
+ var documentElement = document.documentElement;
+ var editorContainerStyle;
+ var editorContainer, iframe, iframeStyle;
+ var fullscreenInfo = fullscreenState.get();
+ var resize = function () {
+ DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));
+ };
+ var removeResize = function () {
+ DOM.unbind(window, 'resize', resize);
+ };
+ editorContainer = editor.getContainer();
+ editorContainerStyle = editorContainer.style;
+ iframe = editor.getContentAreaContainer().firstChild;
+ iframeStyle = iframe.style;
+ if (!fullscreenInfo) {
+ var newFullScreenInfo = {
+ scrollPos: getScrollPos(),
+ containerWidth: editorContainerStyle.width,
+ containerHeight: editorContainerStyle.height,
+ iframeWidth: iframeStyle.width,
+ iframeHeight: iframeStyle.height,
+ resizeHandler: resize,
+ removeHandler: removeResize
+ };
+ iframeStyle.width = iframeStyle.height = '100%';
+ editorContainerStyle.width = editorContainerStyle.height = '';
+ DOM.addClass(body, 'mce-fullscreen');
+ DOM.addClass(documentElement, 'mce-fullscreen');
+ DOM.addClass(editorContainer, 'mce-fullscreen');
+ DOM.bind(window, 'resize', resize);
+ editor.on('remove', removeResize);
+ resize();
+ fullscreenState.set(newFullScreenInfo);
+ $_en5ltwcijjgwebu6.fireFullscreenStateChanged(editor, true);
+ } else {
+ iframeStyle.width = fullscreenInfo.iframeWidth;
+ iframeStyle.height = fullscreenInfo.iframeHeight;
+ if (fullscreenInfo.containerWidth) {
+ editorContainerStyle.width = fullscreenInfo.containerWidth;
}
-
- function toggleFullscreen() {
- var body = document.body, documentElement = document.documentElement, editorContainerStyle;
- var editorContainer, iframe, iframeStyle;
-
- function resize() {
- DOM.setStyle(iframe, 'height', getWindowSize().h - (editorContainer.clientHeight - iframe.clientHeight));
- }
-
- fullscreenState = !fullscreenState;
-
- editorContainer = editor.getContainer();
- editorContainerStyle = editorContainer.style;
- iframe = editor.getContentAreaContainer().firstChild;
- iframeStyle = iframe.style;
-
- if (fullscreenState) {
- scrollPos = getScrollPos();
- iframeWidth = iframeStyle.width;
- iframeHeight = iframeStyle.height;
- iframeStyle.width = iframeStyle.height = '100%';
- containerWidth = editorContainerStyle.width;
- containerHeight = editorContainerStyle.height;
- editorContainerStyle.width = editorContainerStyle.height = '';
-
- DOM.addClass(body, 'mce-fullscreen');
- DOM.addClass(documentElement, 'mce-fullscreen');
- DOM.addClass(editorContainer, 'mce-fullscreen');
-
- DOM.bind(window, 'resize', resize);
- resize();
- resizeHandler = resize;
- } else {
- iframeStyle.width = iframeWidth;
- iframeStyle.height = iframeHeight;
-
- if (containerWidth) {
- editorContainerStyle.width = containerWidth;
- }
-
- if (containerHeight) {
- editorContainerStyle.height = containerHeight;
- }
-
- DOM.removeClass(body, 'mce-fullscreen');
- DOM.removeClass(documentElement, 'mce-fullscreen');
- DOM.removeClass(editorContainer, 'mce-fullscreen');
- DOM.unbind(window, 'resize', resizeHandler);
- setScrollPos(scrollPos);
- }
-
- editor.fire('FullscreenStateChanged', { state: fullscreenState });
+ if (fullscreenInfo.containerHeight) {
+ editorContainerStyle.height = fullscreenInfo.containerHeight;
}
+ DOM.removeClass(body, 'mce-fullscreen');
+ DOM.removeClass(documentElement, 'mce-fullscreen');
+ DOM.removeClass(editorContainer, 'mce-fullscreen');
+ setScrollPos(fullscreenInfo.scrollPos);
+ DOM.unbind(window, 'resize', fullscreenInfo.resizeHandler);
+ editor.off('remove', fullscreenInfo.removeHandler);
+ fullscreenState.set(null);
+ $_en5ltwcijjgwebu6.fireFullscreenStateChanged(editor, false);
+ }
+ };
+ var $_dvg07kcgjjgwebu3 = { toggleFullscreen: toggleFullscreen };
- editor.on('init', function () {
- editor.addShortcut('Ctrl+Shift+F', '', toggleFullscreen);
- });
-
- editor.on('remove', function () {
- if (resizeHandler) {
- DOM.unbind(window, 'resize', resizeHandler);
- }
- });
-
- editor.addCommand('mceFullScreen', toggleFullscreen);
-
- editor.addMenuItem('fullscreen', {
- text: 'Fullscreen',
- shortcut: 'Ctrl+Shift+F',
- selectable: true,
- onClick: function () {
- toggleFullscreen();
- editor.focus();
- },
- onPostRender: function () {
- var self = this;
-
- editor.on('FullscreenStateChanged', function (e) {
- self.active(e.state);
- });
- },
- context: 'view'
- });
-
- editor.addButton('fullscreen', {
- tooltip: 'Fullscreen',
- shortcut: 'Ctrl+Shift+F',
- onClick: toggleFullscreen,
- onPostRender: function () {
- var self = this;
+ var register = function (editor, fullscreenState) {
+ editor.addCommand('mceFullScreen', function () {
+ $_dvg07kcgjjgwebu3.toggleFullscreen(editor, fullscreenState);
+ });
+ };
+ var $_bebdcrcfjjgwebu1 = { register: register };
- editor.on('FullscreenStateChanged', function (e) {
- self.active(e.state);
- });
- }
+ var postRender = function (editor) {
+ return function (e) {
+ var ctrl = e.control;
+ editor.on('FullscreenStateChanged', function (e) {
+ ctrl.active(e.state);
});
-
- return {
- isFullscreen: function () {
- return fullscreenState;
- }
- };
+ };
+ };
+ var register$1 = function (editor) {
+ editor.addMenuItem('fullscreen', {
+ text: 'Fullscreen',
+ shortcut: 'Ctrl+Shift+F',
+ selectable: true,
+ cmd: 'mceFullScreen',
+ onPostRender: postRender(editor),
+ context: 'view'
+ });
+ editor.addButton('fullscreen', {
+ active: false,
+ tooltip: 'Fullscreen',
+ cmd: 'mceFullScreen',
+ onPostRender: postRender(editor)
});
+ };
+ var $_tne4sckjjgwebuo = { register: register$1 };
- return function () { };
+ global.add('fullscreen', function (editor) {
+ var fullscreenState = Cell(null);
+ if (editor.settings.inline) {
+ return $_6qfcwucejjgwebu0.get(fullscreenState);
+ }
+ $_bebdcrcfjjgwebu1.register(editor, fullscreenState);
+ $_tne4sckjjgwebuo.register(editor);
+ editor.addShortcut('Ctrl+Shift+F', '', 'mceFullScreen');
+ return $_6qfcwucejjgwebu0.get(fullscreenState);
+ });
+ function Plugin () {
}
-);
-dem('tinymce.plugins.fullscreen.Plugin')();
+
+ return Plugin;
+
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("3",tinymce.util.Tools.resolve),g("1",["3"],function(a){return a("tinymce.dom.DOMUtils")}),g("2",["3"],function(a){return a("tinymce.PluginManager")}),g("0",["1","2"],function(a,b){var c=a.DOM;return b.add("fullscreen",function(a){function b(){var a,b,c=window,d=document,e=d.body;return e.offsetWidth&&(a=e.offsetWidth,b=e.offsetHeight),c.innerWidth&&c.innerHeight&&(a=c.innerWidth,b=c.innerHeight),{w:a,h:b}}function d(){var a=c.getViewPort();return{x:a.x,y:a.y}}function e(a){window.scrollTo(a.x,a.y)}function f(){function f(){c.setStyle(p,"height",b().h-(o.clientHeight-p.clientHeight))}var n,o,p,q,r=document.body,s=document.documentElement;m=!m,o=a.getContainer(),n=o.style,p=a.getContentAreaContainer().firstChild,q=p.style,m?(l=d(),g=q.width,h=q.height,q.width=q.height="100%",j=n.width,k=n.height,n.width=n.height="",c.addClass(r,"mce-fullscreen"),c.addClass(s,"mce-fullscreen"),c.addClass(o,"mce-fullscreen"),c.bind(window,"resize",f),f(),i=f):(q.width=g,q.height=h,j&&(n.width=j),k&&(n.height=k),c.removeClass(r,"mce-fullscreen"),c.removeClass(s,"mce-fullscreen"),c.removeClass(o,"mce-fullscreen"),c.unbind(window,"resize",i),e(l)),a.fire("FullscreenStateChanged",{state:m})}var g,h,i,j,k,l,m=!1;if(!a.settings.inline)return a.on("init",function(){a.addShortcut("Ctrl+Shift+F","",f)}),a.on("remove",function(){i&&c.unbind(window,"resize",i)}),a.addCommand("mceFullScreen",f),a.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Shift+F",selectable:!0,onClick:function(){f(),a.focus()},onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})},context:"view"}),a.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Shift+F",onClick:f,onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})}}),{isFullscreen:function(){return m}}}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var i=function(e){var n=e,t=function(){return n};return{get:t,set:function(e){n=e},clone:function(){return i(t())}}},e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(e){return{isFullscreen:function(){return null!==e.get()}}},n=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),m=function(e,n){e.fire("FullscreenStateChanged",{state:n})},g=n.DOM,r=function(e,n){var t,r,l,i,o,c,s=document.body,u=document.documentElement,d=n.get(),a=function(){var e,n,t,i;g.setStyle(l,"height",(t=window,i=document.body,i.offsetWidth&&(e=i.offsetWidth,n=i.offsetHeight),t.innerWidth&&t.innerHeight&&(e=t.innerWidth,n=t.innerHeight),{w:e,h:n}).h-(r.clientHeight-l.clientHeight))},h=function(){g.unbind(window,"resize",a)};if(t=(r=e.getContainer()).style,i=(l=e.getContentAreaContainer().firstChild).style,d)i.width=d.iframeWidth,i.height=d.iframeHeight,d.containerWidth&&(t.width=d.containerWidth),d.containerHeight&&(t.height=d.containerHeight),g.removeClass(s,"mce-fullscreen"),g.removeClass(u,"mce-fullscreen"),g.removeClass(r,"mce-fullscreen"),o=d.scrollPos,window.scrollTo(o.x,o.y),g.unbind(window,"resize",d.resizeHandler),e.off("remove",d.removeHandler),n.set(null),m(e,!1);else{var f={scrollPos:(c=g.getViewPort(),{x:c.x,y:c.y}),containerWidth:t.width,containerHeight:t.height,iframeWidth:i.width,iframeHeight:i.height,resizeHandler:a,removeHandler:h};i.width=i.height="100%",t.width=t.height="",g.addClass(s,"mce-fullscreen"),g.addClass(u,"mce-fullscreen"),g.addClass(r,"mce-fullscreen"),g.bind(window,"resize",a),e.on("remove",h),a(),n.set(f),m(e,!0)}},l=function(e,n){e.addCommand("mceFullScreen",function(){r(e,n)})},o=function(t){return function(e){var n=e.control;t.on("FullscreenStateChanged",function(e){n.active(e.state)})}},c=function(e){e.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Shift+F",selectable:!0,cmd:"mceFullScreen",onPostRender:o(e),context:"view"}),e.addButton("fullscreen",{active:!1,tooltip:"Fullscreen",cmd:"mceFullScreen",onPostRender:o(e)})};e.add("fullscreen",function(e){var n=i(null);return e.settings.inline||(l(e,n),c(e),e.addShortcut("Ctrl+Shift+F","","mceFullScreen")),t(n)})}();
\ No newline at end of file
(function () {
+var hr = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
+ var register = function (editor) {
+ editor.addCommand('InsertHorizontalRule', function () {
+ editor.execCommand('mceInsertContent', false, '<hr />');
+ });
};
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
+ var $_cqh592cnjjgwebvk = { register: register };
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.hr.Plugin","tinymce.core.PluginManager","global!tinymce.util.Tools.resolve"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var register$1 = function (editor) {
+ editor.addButton('hr', {
+ icon: 'hr',
+ tooltip: 'Horizontal line',
+ cmd: 'InsertHorizontalRule'
+ });
+ editor.addMenuItem('hr', {
+ icon: 'hr',
+ text: 'Horizontal line',
+ cmd: 'InsertHorizontalRule',
+ context: 'insert'
+ });
+ };
+ var $_13g834cojjgwebvl = { register: register$1 };
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
+ global.add('hr', function (editor) {
+ $_cqh592cnjjgwebvk.register(editor);
+ $_13g834cojjgwebvl.register(editor);
+ });
+ function Plugin () {
}
-);
-
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-/**
- * This class contains all core logic for the hr plugin.
- *
- * @class tinymce.hr.Plugin
- * @private
- */
-define(
- 'tinymce.plugins.hr.Plugin',
- [
- 'tinymce.core.PluginManager'
- ],
- function (PluginManager) {
- PluginManager.add('hr', function (editor) {
- editor.addCommand('InsertHorizontalRule', function () {
- editor.execCommand('mceInsertContent', false, '<hr />');
- });
+ return Plugin;
- editor.addButton('hr', {
- icon: 'hr',
- tooltip: 'Horizontal line',
- cmd: 'InsertHorizontalRule'
- });
-
- editor.addMenuItem('hr', {
- icon: 'hr',
- text: 'Horizontal line',
- cmd: 'InsertHorizontalRule',
- context: 'insert'
- });
- });
-
- return function () { };
- }
-);
-dem('tinymce.plugins.hr.Plugin')();
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("2",tinymce.util.Tools.resolve),g("1",["2"],function(a){return a("tinymce.PluginManager")}),g("0",["1"],function(a){return a.add("hr",function(a){a.addCommand("InsertHorizontalRule",function(){a.execCommand("mceInsertContent",!1,"<hr />")}),a.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),a.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var n=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=function(n){n.addCommand("InsertHorizontalRule",function(){n.execCommand("mceInsertContent",!1,"<hr />")})},o=function(n){n.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),n.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})};n.add("hr",function(n){t(n),o(n)})}();
\ No newline at end of file
(function () {
+var image = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
- };
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.image.Plugin","tinymce.core.PluginManager","tinymce.core.util.Tools","tinymce.plugins.image.ui.Dialog","global!tinymce.util.Tools.resolve","global!document","global!Math","global!RegExp","tinymce.core.Env","tinymce.core.ui.Factory","tinymce.core.util.JSON","tinymce.core.util.XHR","tinymce.plugins.image.core.Uploader","tinymce.plugins.image.core.Utils","tinymce.core.util.Promise"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-defineGlobal("global!document", document);
-defineGlobal("global!Math", Math);
-defineGlobal("global!RegExp", RegExp);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.Env',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.Env');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.ui.Factory',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.ui.Factory');
- }
-);
+ var hasDimensions = function (editor) {
+ return editor.settings.image_dimensions === false ? false : true;
+ };
+ var hasAdvTab = function (editor) {
+ return editor.settings.image_advtab === true ? true : false;
+ };
+ var getPrependUrl = function (editor) {
+ return editor.getParam('image_prepend_url', '');
+ };
+ var getClassList = function (editor) {
+ return editor.getParam('image_class_list');
+ };
+ var hasDescription = function (editor) {
+ return editor.settings.image_description === false ? false : true;
+ };
+ var hasImageTitle = function (editor) {
+ return editor.settings.image_title === true ? true : false;
+ };
+ var hasImageCaption = function (editor) {
+ return editor.settings.image_caption === true ? true : false;
+ };
+ var getImageList = function (editor) {
+ return editor.getParam('image_list', false);
+ };
+ var hasUploadUrl = function (editor) {
+ return editor.getParam('images_upload_url', false);
+ };
+ var hasUploadHandler = function (editor) {
+ return editor.getParam('images_upload_handler', false);
+ };
+ var getUploadUrl = function (editor) {
+ return editor.getParam('images_upload_url');
+ };
+ var getUploadHandler = function (editor) {
+ return editor.getParam('images_upload_handler');
+ };
+ var getUploadBasePath = function (editor) {
+ return editor.getParam('images_upload_base_path');
+ };
+ var getUploadCredentials = function (editor) {
+ return editor.getParam('images_upload_credentials');
+ };
+ var $_1dn8wtctjjgwebvz = {
+ hasDimensions: hasDimensions,
+ hasAdvTab: hasAdvTab,
+ getPrependUrl: getPrependUrl,
+ getClassList: getClassList,
+ hasDescription: hasDescription,
+ hasImageTitle: hasImageTitle,
+ hasImageCaption: hasImageCaption,
+ getImageList: getImageList,
+ hasUploadUrl: hasUploadUrl,
+ hasUploadHandler: hasUploadHandler,
+ getUploadUrl: getUploadUrl,
+ getUploadHandler: getUploadHandler,
+ getUploadBasePath: getUploadBasePath,
+ getUploadCredentials: getUploadCredentials
+ };
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var Global = typeof window !== 'undefined' ? window : Function('return this;')();
-define(
- 'tinymce.core.util.JSON',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.JSON');
- }
-);
+ var path = function (parts, scope) {
+ var o = scope !== undefined && scope !== null ? scope : Global;
+ for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
+ o = o[parts[i]];
+ return o;
+ };
+ var resolve = function (p, scope) {
+ var parts = p.split('.');
+ return path(parts, scope);
+ };
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var unsafe = function (name, scope) {
+ return resolve(name, scope);
+ };
+ var getOrDie = function (name, scope) {
+ var actual = unsafe(name, scope);
+ if (actual === undefined || actual === null)
+ throw name + ' not available on this browser';
+ return actual;
+ };
+ var $_oab1bcwjjgwebwl = { getOrDie: getOrDie };
-define(
- 'tinymce.core.util.XHR',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.XHR');
+ function FileReader () {
+ var f = $_oab1bcwjjgwebwl.getOrDie('FileReader');
+ return new f();
}
-);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var global$1 = tinymce.util.Tools.resolve('tinymce.util.Promise');
-define(
- 'tinymce.core.util.Promise',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Promise');
- }
-);
+ var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
-/**
- * Uploader.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var global$3 = tinymce.util.Tools.resolve('tinymce.util.XHR');
-/**
- * This is basically cut down version of tinymce.core.file.Uploader, which we could use directly
- * if it wasn't marked as private.
- *
- * @class tinymce.image.core.Uploader
- * @private
- */
-define(
- 'tinymce.plugins.image.core.Uploader',
- [
- 'tinymce.core.util.Promise',
- 'tinymce.core.util.Tools',
- 'global!document'
- ],
- function (Promise, Tools, document) {
- return function (settings) {
- var noop = function () {};
-
- function pathJoin(path1, path2) {
- if (path1) {
- return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, '');
+ var parseIntAndGetMax = function (val1, val2) {
+ return Math.max(parseInt(val1, 10), parseInt(val2, 10));
+ };
+ var getImageSize = function (url, callback) {
+ var img = document.createElement('img');
+ function done(width, height) {
+ if (img.parentNode) {
+ img.parentNode.removeChild(img);
+ }
+ callback({
+ width: width,
+ height: height
+ });
+ }
+ img.onload = function () {
+ var width = parseIntAndGetMax(img.width, img.clientWidth);
+ var height = parseIntAndGetMax(img.height, img.clientHeight);
+ done(width, height);
+ };
+ img.onerror = function () {
+ done(0, 0);
+ };
+ var style = img.style;
+ style.visibility = 'hidden';
+ style.position = 'fixed';
+ style.bottom = style.left = '0px';
+ style.width = style.height = 'auto';
+ document.body.appendChild(img);
+ img.src = url;
+ };
+ var buildListItems = function (inputList, itemCallback, startItems) {
+ function appendItems(values, output) {
+ output = output || [];
+ global$2.each(values, function (item) {
+ var menuItem = { text: item.text || item.title };
+ if (item.menu) {
+ menuItem.menu = appendItems(item.menu);
+ } else {
+ menuItem.value = item.value;
+ itemCallback(menuItem);
}
-
- return path2;
+ output.push(menuItem);
+ });
+ return output;
+ }
+ return appendItems(inputList, startItems || []);
+ };
+ var removePixelSuffix = function (value) {
+ if (value) {
+ value = value.replace(/px$/, '');
+ }
+ return value;
+ };
+ var addPixelSuffix = function (value) {
+ if (value.length > 0 && /^[0-9]+$/.test(value)) {
+ value += 'px';
+ }
+ return value;
+ };
+ var mergeMargins = function (css) {
+ if (css.margin) {
+ var splitMargin = css.margin.split(' ');
+ switch (splitMargin.length) {
+ case 1:
+ css['margin-top'] = css['margin-top'] || splitMargin[0];
+ css['margin-right'] = css['margin-right'] || splitMargin[0];
+ css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
+ css['margin-left'] = css['margin-left'] || splitMargin[0];
+ break;
+ case 2:
+ css['margin-top'] = css['margin-top'] || splitMargin[0];
+ css['margin-right'] = css['margin-right'] || splitMargin[1];
+ css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
+ css['margin-left'] = css['margin-left'] || splitMargin[1];
+ break;
+ case 3:
+ css['margin-top'] = css['margin-top'] || splitMargin[0];
+ css['margin-right'] = css['margin-right'] || splitMargin[1];
+ css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
+ css['margin-left'] = css['margin-left'] || splitMargin[1];
+ break;
+ case 4:
+ css['margin-top'] = css['margin-top'] || splitMargin[0];
+ css['margin-right'] = css['margin-right'] || splitMargin[1];
+ css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
+ css['margin-left'] = css['margin-left'] || splitMargin[3];
}
-
- function defaultHandler(blobInfo, success, failure, progress) {
- var xhr, formData;
-
- xhr = new XMLHttpRequest();
- xhr.open('POST', settings.url);
- xhr.withCredentials = settings.credentials;
-
- xhr.upload.onprogress = function (e) {
- progress(e.loaded / e.total * 100);
- };
-
- xhr.onerror = function () {
- failure("Image upload failed due to a XHR Transport error. Code: " + xhr.status);
- };
-
- xhr.onload = function () {
- var json;
-
- if (xhr.status < 200 || xhr.status >= 300) {
- failure("HTTP Error: " + xhr.status);
- return;
- }
-
- json = JSON.parse(xhr.responseText);
-
- if (!json || typeof json.location != "string") {
- failure("Invalid JSON: " + xhr.responseText);
- return;
- }
-
- success(pathJoin(settings.basePath, json.location));
- };
-
- formData = new FormData();
- formData.append('file', blobInfo.blob(), blobInfo.filename());
-
- xhr.send(formData);
+ delete css.margin;
+ }
+ return css;
+ };
+ var createImageList = function (editor, callback) {
+ var imageList = $_1dn8wtctjjgwebvz.getImageList(editor);
+ if (typeof imageList === 'string') {
+ global$3.send({
+ url: imageList,
+ success: function (text) {
+ callback(JSON.parse(text));
+ }
+ });
+ } else if (typeof imageList === 'function') {
+ imageList(callback);
+ } else {
+ callback(imageList);
+ }
+ };
+ var waitLoadImage = function (editor, data, imgElm) {
+ function selectImage() {
+ imgElm.onload = imgElm.onerror = null;
+ if (editor.selection) {
+ editor.selection.select(imgElm);
+ editor.nodeChanged();
}
-
- function uploadBlob(blobInfo, handler) {
- return new Promise(function (resolve, reject) {
- try {
- handler(blobInfo, resolve, reject, noop);
- } catch (ex) {
- reject(ex.message);
- }
+ }
+ imgElm.onload = function () {
+ if (!data.width && !data.height && $_1dn8wtctjjgwebvz.hasDimensions(editor)) {
+ editor.dom.setAttribs(imgElm, {
+ width: imgElm.clientWidth,
+ height: imgElm.clientHeight
});
}
-
- function isDefaultHandler(handler) {
- return handler === defaultHandler;
- }
-
- function upload(blobInfo) {
- return (!settings.url && isDefaultHandler(settings.handler)) ? Promise.reject("Upload url missng from the settings.") : uploadBlob(blobInfo, settings.handler);
- }
-
- settings = Tools.extend({
- credentials: false,
- handler: defaultHandler
- }, settings);
-
- return {
- upload: upload
- };
+ selectImage();
};
- }
-);
-/**
- * Utils.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * @class tinymce.image.core.Utils
- * @private
- */
-define(
- 'tinymce.plugins.image.core.Utils',
- [
- 'tinymce.core.util.Tools',
- 'global!Math',
- 'global!document'
- ],
- function (Tools, Math, document) {
-
- var getImageSize = function (url, callback) {
- var img = document.createElement('img');
-
- function done(width, height) {
- if (img.parentNode) {
- img.parentNode.removeChild(img);
- }
-
- callback({ width: width, height: height });
- }
-
- img.onload = function () {
- done(Math.max(img.width, img.clientWidth), Math.max(img.height, img.clientHeight));
+ imgElm.onerror = selectImage;
+ };
+ var blobToDataUri = function (blob) {
+ return new global$1(function (resolve, reject) {
+ var reader = new FileReader();
+ reader.onload = function () {
+ resolve(reader.result);
};
-
- img.onerror = function () {
- done();
+ reader.onerror = function () {
+ reject(FileReader.error.message);
};
+ reader.readAsDataURL(blob);
+ });
+ };
+ var $_1e8k4ncujjgwebw2 = {
+ getImageSize: getImageSize,
+ buildListItems: buildListItems,
+ removePixelSuffix: removePixelSuffix,
+ addPixelSuffix: addPixelSuffix,
+ mergeMargins: mergeMargins,
+ createImageList: createImageList,
+ waitLoadImage: waitLoadImage,
+ blobToDataUri: blobToDataUri
+ };
- var style = img.style;
- style.visibility = 'hidden';
- style.position = 'fixed';
- style.bottom = style.left = 0;
- style.width = style.height = 'auto';
-
- document.body.appendChild(img);
- img.src = url;
- };
-
-
- var buildListItems = function (inputList, itemCallback, startItems) {
- function appendItems(values, output) {
- output = output || [];
-
- Tools.each(values, function (item) {
- var menuItem = { text: item.text || item.title };
+ var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
- if (item.menu) {
- menuItem.menu = appendItems(item.menu);
- } else {
- menuItem.value = item.value;
- itemCallback(menuItem);
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ var shallow = function (old, nu) {
+ return nu;
+ };
+ var baseMerge = function (merger) {
+ return function () {
+ var objects = new Array(arguments.length);
+ for (var i = 0; i < objects.length; i++)
+ objects[i] = arguments[i];
+ if (objects.length === 0)
+ throw new Error('Can\'t merge zero objects');
+ var ret = {};
+ for (var j = 0; j < objects.length; j++) {
+ var curObject = objects[j];
+ for (var key in curObject)
+ if (hasOwnProperty.call(curObject, key)) {
+ ret[key] = merger(ret[key], curObject[key]);
}
-
- output.push(menuItem);
- });
-
- return output;
}
-
- return appendItems(inputList, startItems || []);
+ return ret;
};
+ };
- var removePixelSuffix = function (value) {
- if (value) {
- value = value.replace(/px$/, '');
- }
- return value;
- };
+ var merge = baseMerge(shallow);
- var addPixelSuffix = function (value) {
- if (value.length > 0 && /^[0-9]+$/.test(value)) {
- value += 'px';
+ var DOM = global$4.DOM;
+ var getHspace = function (image) {
+ if (image.style.marginLeft && image.style.marginRight && image.style.marginLeft === image.style.marginRight) {
+ return $_1e8k4ncujjgwebw2.removePixelSuffix(image.style.marginLeft);
+ } else {
+ return '';
+ }
+ };
+ var getVspace = function (image) {
+ if (image.style.marginTop && image.style.marginBottom && image.style.marginTop === image.style.marginBottom) {
+ return $_1e8k4ncujjgwebw2.removePixelSuffix(image.style.marginTop);
+ } else {
+ return '';
+ }
+ };
+ var getBorder = function (image) {
+ if (image.style.borderWidth) {
+ return $_1e8k4ncujjgwebw2.removePixelSuffix(image.style.borderWidth);
+ } else {
+ return '';
+ }
+ };
+ var getAttrib = function (image, name$$1) {
+ if (image.hasAttribute(name$$1)) {
+ return image.getAttribute(name$$1);
+ } else {
+ return '';
+ }
+ };
+ var getStyle = function (image, name$$1) {
+ return image.style[name$$1] ? image.style[name$$1] : '';
+ };
+ var hasCaption = function (image) {
+ return image.parentNode !== null && image.parentNode.nodeName === 'FIGURE';
+ };
+ var setAttrib = function (image, name$$1, value) {
+ image.setAttribute(name$$1, value);
+ };
+ var wrapInFigure = function (image) {
+ var figureElm = DOM.create('figure', { class: 'image' });
+ DOM.insertAfter(figureElm, image);
+ figureElm.appendChild(image);
+ figureElm.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));
+ figureElm.contentEditable = 'false';
+ };
+ var removeFigure = function (image) {
+ var figureElm = image.parentNode;
+ DOM.insertAfter(image, figureElm);
+ DOM.remove(figureElm);
+ };
+ var toggleCaption = function (image) {
+ if (hasCaption(image)) {
+ removeFigure(image);
+ } else {
+ wrapInFigure(image);
+ }
+ };
+ var normalizeStyle = function (image, normalizeCss) {
+ var attrValue = image.getAttribute('style');
+ var value = normalizeCss(attrValue !== null ? attrValue : '');
+ if (value.length > 0) {
+ image.setAttribute('style', value);
+ image.setAttribute('data-mce-style', value);
+ } else {
+ image.removeAttribute('style');
+ }
+ };
+ var setSize = function (name$$1, normalizeCss) {
+ return function (image, name$$1, value) {
+ if (image.style[name$$1]) {
+ image.style[name$$1] = $_1e8k4ncujjgwebw2.addPixelSuffix(value);
+ normalizeStyle(image, normalizeCss);
+ } else {
+ setAttrib(image, name$$1, value);
}
- return value;
};
-
- var mergeMargins = function (css) {
- if (css.margin) {
-
- var splitMargin = css.margin.split(" ");
-
- switch (splitMargin.length) {
- case 1: //margin: toprightbottomleft;
- css['margin-top'] = css['margin-top'] || splitMargin[0];
- css['margin-right'] = css['margin-right'] || splitMargin[0];
- css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
- css['margin-left'] = css['margin-left'] || splitMargin[0];
- break;
- case 2: //margin: topbottom rightleft;
- css['margin-top'] = css['margin-top'] || splitMargin[0];
- css['margin-right'] = css['margin-right'] || splitMargin[1];
- css['margin-bottom'] = css['margin-bottom'] || splitMargin[0];
- css['margin-left'] = css['margin-left'] || splitMargin[1];
- break;
- case 3: //margin: top rightleft bottom;
- css['margin-top'] = css['margin-top'] || splitMargin[0];
- css['margin-right'] = css['margin-right'] || splitMargin[1];
- css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
- css['margin-left'] = css['margin-left'] || splitMargin[1];
- break;
- case 4: //margin: top right bottom left;
- css['margin-top'] = css['margin-top'] || splitMargin[0];
- css['margin-right'] = css['margin-right'] || splitMargin[1];
- css['margin-bottom'] = css['margin-bottom'] || splitMargin[2];
- css['margin-left'] = css['margin-left'] || splitMargin[3];
- }
- delete css.margin;
- }
- return css;
+ };
+ var getSize = function (image, name$$1) {
+ if (image.style[name$$1]) {
+ return $_1e8k4ncujjgwebw2.removePixelSuffix(image.style[name$$1]);
+ } else {
+ return getAttrib(image, name$$1);
+ }
+ };
+ var setHspace = function (image, value) {
+ var pxValue = $_1e8k4ncujjgwebw2.addPixelSuffix(value);
+ image.style.marginLeft = pxValue;
+ image.style.marginRight = pxValue;
+ };
+ var setVspace = function (image, value) {
+ var pxValue = $_1e8k4ncujjgwebw2.addPixelSuffix(value);
+ image.style.marginTop = pxValue;
+ image.style.marginBottom = pxValue;
+ };
+ var setBorder = function (image, value) {
+ var pxValue = $_1e8k4ncujjgwebw2.addPixelSuffix(value);
+ image.style.borderWidth = pxValue;
+ };
+ var setBorderStyle = function (image, value) {
+ image.style.borderStyle = value;
+ };
+ var getBorderStyle = function (image) {
+ return getStyle(image, 'borderStyle');
+ };
+ var isFigure = function (elm) {
+ return elm.nodeName === 'FIGURE';
+ };
+ var defaultData = function () {
+ return {
+ src: '',
+ alt: '',
+ title: '',
+ width: '',
+ height: '',
+ class: '',
+ style: '',
+ caption: false,
+ hspace: '',
+ vspace: '',
+ border: '',
+ borderStyle: ''
};
-
+ };
+ var getStyleValue = function (normalizeCss, data) {
+ var image = document.createElement('img');
+ setAttrib(image, 'style', data.style);
+ if (getHspace(image) || data.hspace !== '') {
+ setHspace(image, data.hspace);
+ }
+ if (getVspace(image) || data.vspace !== '') {
+ setVspace(image, data.vspace);
+ }
+ if (getBorder(image) || data.border !== '') {
+ setBorder(image, data.border);
+ }
+ if (getBorderStyle(image) || data.borderStyle !== '') {
+ setBorderStyle(image, data.borderStyle);
+ }
+ return normalizeCss(image.getAttribute('style'));
+ };
+ var create = function (normalizeCss, data) {
+ var image = document.createElement('img');
+ write(normalizeCss, merge(data, { caption: false }), image);
+ setAttrib(image, 'alt', data.alt);
+ if (data.caption) {
+ var figure = DOM.create('figure', { class: 'image' });
+ figure.appendChild(image);
+ figure.appendChild(DOM.create('figcaption', { contentEditable: true }, 'Caption'));
+ figure.contentEditable = 'false';
+ return figure;
+ } else {
+ return image;
+ }
+ };
+ var read = function (normalizeCss, image) {
return {
- getImageSize: getImageSize,
- buildListItems: buildListItems,
- removePixelSuffix: removePixelSuffix,
- addPixelSuffix: addPixelSuffix,
- mergeMargins: mergeMargins
+ src: getAttrib(image, 'src'),
+ alt: getAttrib(image, 'alt'),
+ title: getAttrib(image, 'title'),
+ width: getSize(image, 'width'),
+ height: getSize(image, 'height'),
+ class: getAttrib(image, 'class'),
+ style: normalizeCss(getAttrib(image, 'style')),
+ caption: hasCaption(image),
+ hspace: getHspace(image),
+ vspace: getVspace(image),
+ border: getBorder(image),
+ borderStyle: getStyle(image, 'borderStyle')
};
- }
-);
-
-/**
- * Dialog.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * @class tinymce.image.ui.Dialog
- * @private
- */
-define(
- 'tinymce.plugins.image.ui.Dialog',
- [
- 'global!document',
- 'global!Math',
- 'global!RegExp',
- 'tinymce.core.Env',
- 'tinymce.core.ui.Factory',
- 'tinymce.core.util.JSON',
- 'tinymce.core.util.Tools',
- 'tinymce.core.util.XHR',
- 'tinymce.plugins.image.core.Uploader',
- 'tinymce.plugins.image.core.Utils'
- ],
- function (document, Math, RegExp, Env, Factory, JSON, Tools, XHR, Uploader, Utils) {
-
- return function (editor) {
- function createImageList(callback) {
- var imageList = editor.settings.image_list;
+ };
+ var updateProp = function (image, oldData, newData, name$$1, set) {
+ if (newData[name$$1] !== oldData[name$$1]) {
+ set(image, name$$1, newData[name$$1]);
+ }
+ };
+ var normalized = function (set, normalizeCss) {
+ return function (image, name$$1, value) {
+ set(image, value);
+ normalizeStyle(image, normalizeCss);
+ };
+ };
+ var write = function (normalizeCss, newData, image) {
+ var oldData = read(normalizeCss, image);
+ updateProp(image, oldData, newData, 'caption', function (image, _name, _value) {
+ return toggleCaption(image);
+ });
+ updateProp(image, oldData, newData, 'src', setAttrib);
+ updateProp(image, oldData, newData, 'alt', setAttrib);
+ updateProp(image, oldData, newData, 'title', setAttrib);
+ updateProp(image, oldData, newData, 'width', setSize('width', normalizeCss));
+ updateProp(image, oldData, newData, 'height', setSize('height', normalizeCss));
+ updateProp(image, oldData, newData, 'class', setAttrib);
+ updateProp(image, oldData, newData, 'style', normalized(function (image, value) {
+ return setAttrib(image, 'style', value);
+ }, normalizeCss));
+ updateProp(image, oldData, newData, 'hspace', normalized(setHspace, normalizeCss));
+ updateProp(image, oldData, newData, 'vspace', normalized(setVspace, normalizeCss));
+ updateProp(image, oldData, newData, 'border', normalized(setBorder, normalizeCss));
+ updateProp(image, oldData, newData, 'borderStyle', normalized(setBorderStyle, normalizeCss));
+ };
- if (typeof imageList == "string") {
- XHR.send({
- url: imageList,
- success: function (text) {
- callback(JSON.parse(text));
- }
- });
- } else if (typeof imageList == "function") {
- imageList(callback);
- } else {
- callback(imageList);
- }
+ var normalizeCss = function (editor, cssText) {
+ var css = editor.dom.styles.parse(cssText);
+ var mergedCss = $_1e8k4ncujjgwebw2.mergeMargins(css);
+ var compressed = editor.dom.styles.parse(editor.dom.styles.serialize(mergedCss));
+ return editor.dom.styles.serialize(compressed);
+ };
+ var getSelectedImage = function (editor) {
+ var imgElm = editor.selection.getNode();
+ var figureElm = editor.dom.getParent(imgElm, 'figure.image');
+ if (figureElm) {
+ return editor.dom.select('img', figureElm)[0];
+ }
+ if (imgElm && (imgElm.nodeName !== 'IMG' || imgElm.getAttribute('data-mce-object') || imgElm.getAttribute('data-mce-placeholder'))) {
+ return null;
+ }
+ return imgElm;
+ };
+ var splitTextBlock = function (editor, figure) {
+ var dom = editor.dom;
+ var textBlock = dom.getParent(figure.parentNode, function (node) {
+ return editor.schema.getTextBlockElements()[node.nodeName];
+ });
+ if (textBlock) {
+ return dom.split(textBlock, figure);
+ } else {
+ return figure;
+ }
+ };
+ var readImageDataFromSelection = function (editor) {
+ var image = getSelectedImage(editor);
+ return image ? read(function (css) {
+ return normalizeCss(editor, css);
+ }, image) : defaultData();
+ };
+ var insertImageAtCaret = function (editor, data) {
+ var elm = create(function (css) {
+ return normalizeCss(editor, css);
+ }, data);
+ editor.dom.setAttrib(elm, 'data-mce-id', '__mcenew');
+ editor.focus();
+ editor.selection.setContent(elm.outerHTML);
+ var insertedElm = editor.dom.select('*[data-mce-id="__mcenew"]')[0];
+ editor.dom.setAttrib(insertedElm, 'data-mce-id', null);
+ if (isFigure(insertedElm)) {
+ var figure = splitTextBlock(editor, insertedElm);
+ editor.selection.select(figure);
+ } else {
+ editor.selection.select(insertedElm);
+ }
+ };
+ var syncSrcAttr = function (editor, image) {
+ editor.dom.setAttrib(image, 'src', image.getAttribute('src'));
+ };
+ var deleteImage = function (editor, image) {
+ if (image) {
+ var elm = editor.dom.is(image.parentNode, 'figure.image') ? image.parentNode : image;
+ editor.dom.remove(elm);
+ editor.focus();
+ editor.nodeChanged();
+ if (editor.dom.isEmpty(editor.getBody())) {
+ editor.setContent('');
+ editor.selection.setCursorLocation();
}
+ }
+ };
+ var writeImageDataToSelection = function (editor, data) {
+ var image = getSelectedImage(editor);
+ write(function (css) {
+ return normalizeCss(editor, css);
+ }, data, image);
+ syncSrcAttr(editor, image);
+ if (isFigure(image.parentNode)) {
+ var figure = image.parentNode;
+ splitTextBlock(editor, figure);
+ editor.selection.select(image.parentNode);
+ } else {
+ editor.selection.select(image);
+ $_1e8k4ncujjgwebw2.waitLoadImage(editor, data, image);
+ }
+ };
+ var insertOrUpdateImage = function (editor, data) {
+ var image = getSelectedImage(editor);
+ if (image) {
+ if (data.src) {
+ writeImageDataToSelection(editor, data);
+ } else {
+ deleteImage(editor, image);
+ }
+ } else if (data.src) {
+ insertImageAtCaret(editor, data);
+ }
+ };
- function showDialog(imageList) {
- var win, data = {}, imgElm, figureElm, dom = editor.dom, settings = editor.settings;
- var width, height, imageListCtrl, classListCtrl, imageDimensions = settings.image_dimensions !== false;
-
-
- function onFileInput() {
- var Throbber = Factory.get('Throbber');
- var throbber = new Throbber(win.getEl());
- var file = this.value();
-
- var uploader = new Uploader({
- url: settings.images_upload_url,
- basePath: settings.images_upload_base_path,
- credentials: settings.images_upload_credentials,
- handler: settings.images_upload_handler
- });
-
- // we do not need to add this to editors blobCache, so we fake bare minimum
- var blobInfo = editor.editorUpload.blobCache.create({
- blob: file,
- name: file.name ? file.name.replace(/\.[^\.]+$/, '') : null, // strip extension
- base64: 'data:image/fake;base64,=' // without this create() will throw exception
- });
-
- var finalize = function () {
- throbber.hide();
- URL.revokeObjectURL(blobInfo.blobUri()); // in theory we could fake blobUri too, but until it's legitimate, we have too revoke it manually
- };
-
- throbber.show();
-
- return uploader.upload(blobInfo).then(function (url) {
- var src = win.find('#src');
- src.value(url);
- win.find('tabpanel')[0].activateTab(0); // switch to General tab
- src.fire('change'); // this will invoke onSrcChange (and any other handlers, if any).
- finalize();
- return url;
- }, function (err) {
- editor.windowManager.alert(err);
- finalize();
- });
- }
-
- function isTextBlock(node) {
- return editor.schema.getTextBlockElements()[node.nodeName];
- }
-
- function recalcSize() {
- var widthCtrl, heightCtrl, newWidth, newHeight;
-
- widthCtrl = win.find('#width')[0];
- heightCtrl = win.find('#height')[0];
-
- if (!widthCtrl || !heightCtrl) {
- return;
- }
-
- newWidth = widthCtrl.value();
- newHeight = heightCtrl.value();
-
- if (win.find('#constrain')[0].checked() && width && height && newWidth && newHeight) {
- if (width != newWidth) {
- newHeight = Math.round((newWidth / width) * newHeight);
-
- if (!isNaN(newHeight)) {
- heightCtrl.value(newHeight);
- }
- } else {
- newWidth = Math.round((newHeight / height) * newWidth);
-
- if (!isNaN(newWidth)) {
- widthCtrl.value(newWidth);
- }
- }
- }
-
- width = newWidth;
- height = newHeight;
- }
-
- function updateStyle() {
- if (!editor.settings.image_advtab) {
- return;
- }
-
- var data = win.toJSON(),
- css = dom.parseStyle(data.style);
-
- css = Utils.mergeMargins(css);
-
- if (data.vspace) {
- css['margin-top'] = css['margin-bottom'] = Utils.addPixelSuffix(data.vspace);
- }
- if (data.hspace) {
- css['margin-left'] = css['margin-right'] = Utils.addPixelSuffix(data.hspace);
- }
- if (data.border) {
- css['border-width'] = Utils.addPixelSuffix(data.border);
- }
-
- win.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));
- }
-
- function updateVSpaceHSpaceBorder() {
- if (!editor.settings.image_advtab) {
- return;
- }
-
- var data = win.toJSON(),
- css = dom.parseStyle(data.style);
-
- win.find('#vspace').value("");
- win.find('#hspace').value("");
-
- css = Utils.mergeMargins(css);
-
- //Move opposite equal margins to vspace/hspace field
- if ((css['margin-top'] && css['margin-bottom']) || (css['margin-right'] && css['margin-left'])) {
- if (css['margin-top'] === css['margin-bottom']) {
- win.find('#vspace').value(Utils.removePixelSuffix(css['margin-top']));
- } else {
- win.find('#vspace').value('');
- }
- if (css['margin-right'] === css['margin-left']) {
- win.find('#hspace').value(Utils.removePixelSuffix(css['margin-right']));
- } else {
- win.find('#hspace').value('');
- }
- }
-
- //Move border-width
- if (css['border-width']) {
- win.find('#border').value(Utils.removePixelSuffix(css['border-width']));
- }
-
- win.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));
+ var updateVSpaceHSpaceBorder = function (editor) {
+ return function (evt) {
+ var dom = editor.dom;
+ var rootControl = evt.control.rootControl;
+ if (!$_1dn8wtctjjgwebvz.hasAdvTab(editor)) {
+ return;
+ }
+ var data = rootControl.toJSON();
+ var css = dom.parseStyle(data.style);
+ rootControl.find('#vspace').value('');
+ rootControl.find('#hspace').value('');
+ css = $_1e8k4ncujjgwebw2.mergeMargins(css);
+ if (css['margin-top'] && css['margin-bottom'] || css['margin-right'] && css['margin-left']) {
+ if (css['margin-top'] === css['margin-bottom']) {
+ rootControl.find('#vspace').value($_1e8k4ncujjgwebw2.removePixelSuffix(css['margin-top']));
+ } else {
+ rootControl.find('#vspace').value('');
}
-
- function waitLoad(imgElm) {
- function selectImage() {
- imgElm.onload = imgElm.onerror = null;
-
- if (editor.selection) {
- editor.selection.select(imgElm);
- editor.nodeChanged();
- }
- }
-
- imgElm.onload = function () {
- if (!data.width && !data.height && imageDimensions) {
- dom.setAttribs(imgElm, {
- width: imgElm.clientWidth,
- height: imgElm.clientHeight
- });
- }
-
- selectImage();
- };
-
- imgElm.onerror = selectImage;
+ if (css['margin-right'] === css['margin-left']) {
+ rootControl.find('#hspace').value($_1e8k4ncujjgwebw2.removePixelSuffix(css['margin-right']));
+ } else {
+ rootControl.find('#hspace').value('');
}
-
- function onSubmitForm() {
- var figureElm, oldImg;
-
- updateStyle();
- recalcSize();
-
- data = Tools.extend(data, win.toJSON());
-
- if (!data.alt) {
- data.alt = '';
- }
-
- if (!data.title) {
- data.title = '';
- }
-
- if (data.width === '') {
- data.width = null;
- }
-
- if (data.height === '') {
- data.height = null;
- }
-
- if (!data.style) {
- data.style = null;
- }
-
- // Setup new data excluding style properties
- /*eslint dot-notation: 0*/
- data = {
- src: data.src,
- alt: data.alt,
- title: data.title,
- width: data.width,
- height: data.height,
- style: data.style,
- caption: data.caption,
- "class": data["class"]
- };
-
- editor.undoManager.transact(function () {
- if (!data.src) {
- if (imgElm) {
- var elm = dom.is(imgElm.parentNode, 'figure.image') ? imgElm.parentNode : imgElm;
- dom.remove(elm);
- editor.focus();
- editor.nodeChanged();
-
- if (dom.isEmpty(editor.getBody())) {
- editor.setContent('');
- editor.selection.setCursorLocation();
- }
- }
-
- return;
- }
-
- if (data.title === "") {
- data.title = null;
- }
-
- if (!imgElm) {
- data.id = '__mcenew';
- editor.focus();
- editor.selection.setContent(dom.createHTML('img', data));
- imgElm = dom.get('__mcenew');
- dom.setAttrib(imgElm, 'id', null);
- } else {
- dom.setAttribs(imgElm, data);
- }
-
- editor.editorUpload.uploadImagesAuto();
-
- if (data.caption === false) {
- if (dom.is(imgElm.parentNode, 'figure.image')) {
- figureElm = imgElm.parentNode;
- dom.setAttrib(imgElm, 'contenteditable', null);
- dom.insertAfter(imgElm, figureElm);
- dom.remove(figureElm);
- editor.selection.select(imgElm);
- editor.nodeChanged();
- }
+ }
+ if (css['border-width']) {
+ rootControl.find('#border').value($_1e8k4ncujjgwebw2.removePixelSuffix(css['border-width']));
+ } else {
+ rootControl.find('#border').value('');
+ }
+ if (css['border-style']) {
+ rootControl.find('#borderStyle').value(css['border-style']);
+ } else {
+ rootControl.find('#borderStyle').value('');
+ }
+ rootControl.find('#style').value(dom.serializeStyle(dom.parseStyle(dom.serializeStyle(css))));
+ };
+ };
+ var updateStyle = function (editor, win) {
+ win.find('#style').each(function (ctrl) {
+ var value = getStyleValue(function (css) {
+ return normalizeCss(editor, css);
+ }, merge(defaultData(), win.toJSON()));
+ ctrl.value(value);
+ });
+ };
+ var makeTab = function (editor) {
+ return {
+ title: 'Advanced',
+ type: 'form',
+ pack: 'start',
+ items: [
+ {
+ label: 'Style',
+ name: 'style',
+ type: 'textbox',
+ onchange: updateVSpaceHSpaceBorder(editor)
+ },
+ {
+ type: 'form',
+ layout: 'grid',
+ packV: 'start',
+ columns: 2,
+ padding: 0,
+ defaults: {
+ type: 'textbox',
+ maxWidth: 50,
+ onchange: function (evt) {
+ updateStyle(editor, evt.control.rootControl);
}
-
- if (data.caption === true) {
- if (!dom.is(imgElm.parentNode, 'figure.image')) {
- oldImg = imgElm;
- imgElm = imgElm.cloneNode(true);
- imgElm.contentEditable = true;
- figureElm = dom.create('figure', { 'class': 'image' });
- figureElm.appendChild(imgElm);
- figureElm.appendChild(dom.create('figcaption', { contentEditable: true }, 'Caption'));
- figureElm.contentEditable = false;
-
- var textBlock = dom.getParent(oldImg, isTextBlock);
- if (textBlock) {
- dom.split(textBlock, oldImg, figureElm);
- } else {
- dom.replace(figureElm, oldImg);
+ },
+ items: [
+ {
+ label: 'Vertical space',
+ name: 'vspace'
+ },
+ {
+ label: 'Border width',
+ name: 'border'
+ },
+ {
+ label: 'Horizontal space',
+ name: 'hspace'
+ },
+ {
+ label: 'Border style',
+ type: 'listbox',
+ name: 'borderStyle',
+ width: 90,
+ maxWidth: 90,
+ onselect: function (evt) {
+ updateStyle(editor, evt.control.rootControl);
+ },
+ values: [
+ {
+ text: 'Select...',
+ value: ''
+ },
+ {
+ text: 'Solid',
+ value: 'solid'
+ },
+ {
+ text: 'Dotted',
+ value: 'dotted'
+ },
+ {
+ text: 'Dashed',
+ value: 'dashed'
+ },
+ {
+ text: 'Double',
+ value: 'double'
+ },
+ {
+ text: 'Groove',
+ value: 'groove'
+ },
+ {
+ text: 'Ridge',
+ value: 'ridge'
+ },
+ {
+ text: 'Inset',
+ value: 'inset'
+ },
+ {
+ text: 'Outset',
+ value: 'outset'
+ },
+ {
+ text: 'None',
+ value: 'none'
+ },
+ {
+ text: 'Hidden',
+ value: 'hidden'
}
-
- editor.selection.select(figureElm);
- }
-
- return;
- }
-
- waitLoad(imgElm);
- });
- }
-
- function onSrcChange(e) {
- var srcURL, prependURL, absoluteURLPattern, meta = e.meta || {};
-
- if (imageListCtrl) {
- imageListCtrl.value(editor.convertURL(this.value(), 'src'));
- }
-
- Tools.each(meta, function (value, key) {
- win.find('#' + key).value(value);
- });
-
- if (!meta.width && !meta.height) {
- srcURL = editor.convertURL(this.value(), 'src');
-
- // Pattern test the src url and make sure we haven't already prepended the url
- prependURL = editor.settings.image_prepend_url;
- absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i');
- if (prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0, prependURL.length) !== prependURL) {
- srcURL = prependURL + srcURL;
+ ]
}
-
- this.value(srcURL);
-
- Utils.getImageSize(editor.documentBaseURI.toAbsolute(this.value()), function (data) {
- if (data.width && data.height && imageDimensions) {
- width = data.width;
- height = data.height;
-
- win.find('#width').value(width);
- win.find('#height').value(height);
- }
- });
- }
- }
-
- function onBeforeCall(e) {
- e.meta = win.toJSON();
+ ]
}
+ ]
+ };
+ };
+ var $_6dfy5vd3jjgwebxf = { makeTab: makeTab };
- imgElm = editor.selection.getNode();
- figureElm = dom.getParent(imgElm, 'figure.image');
- if (figureElm) {
- imgElm = dom.select('img', figureElm)[0];
+ var doSyncSize = function (widthCtrl, heightCtrl) {
+ widthCtrl.state.set('oldVal', widthCtrl.value());
+ heightCtrl.state.set('oldVal', heightCtrl.value());
+ };
+ var doSizeControls = function (win, f) {
+ var widthCtrl = win.find('#width')[0];
+ var heightCtrl = win.find('#height')[0];
+ var constrained = win.find('#constrain')[0];
+ if (widthCtrl && heightCtrl && constrained) {
+ f(widthCtrl, heightCtrl, constrained.checked());
+ }
+ };
+ var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {
+ var oldWidth = widthCtrl.state.get('oldVal');
+ var oldHeight = heightCtrl.state.get('oldVal');
+ var newWidth = widthCtrl.value();
+ var newHeight = heightCtrl.value();
+ if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {
+ if (newWidth !== oldWidth) {
+ newHeight = Math.round(newWidth / oldWidth * newHeight);
+ if (!isNaN(newHeight)) {
+ heightCtrl.value(newHeight);
}
-
- if (imgElm &&
- (imgElm.nodeName != 'IMG' ||
- imgElm.getAttribute('data-mce-object') ||
- imgElm.getAttribute('data-mce-placeholder'))) {
- imgElm = null;
+ } else {
+ newWidth = Math.round(newHeight / oldHeight * newWidth);
+ if (!isNaN(newWidth)) {
+ widthCtrl.value(newWidth);
}
-
- if (imgElm) {
- width = dom.getAttrib(imgElm, 'width');
- height = dom.getAttrib(imgElm, 'height');
-
- data = {
- src: dom.getAttrib(imgElm, 'src'),
- alt: dom.getAttrib(imgElm, 'alt'),
- title: dom.getAttrib(imgElm, 'title'),
- "class": dom.getAttrib(imgElm, 'class'),
- width: width,
- height: height,
- caption: !!figureElm
- };
+ }
+ }
+ doSyncSize(widthCtrl, heightCtrl);
+ };
+ var syncSize = function (win) {
+ doSizeControls(win, doSyncSize);
+ };
+ var updateSize = function (win) {
+ doSizeControls(win, doUpdateSize);
+ };
+ var createUi = function () {
+ var recalcSize = function (evt) {
+ updateSize(evt.control.rootControl);
+ };
+ return {
+ type: 'container',
+ label: 'Dimensions',
+ layout: 'flex',
+ align: 'center',
+ spacing: 5,
+ items: [
+ {
+ name: 'width',
+ type: 'textbox',
+ maxLength: 5,
+ size: 5,
+ onchange: recalcSize,
+ ariaLabel: 'Width'
+ },
+ {
+ type: 'label',
+ text: 'x'
+ },
+ {
+ name: 'height',
+ type: 'textbox',
+ maxLength: 5,
+ size: 5,
+ onchange: recalcSize,
+ ariaLabel: 'Height'
+ },
+ {
+ name: 'constrain',
+ type: 'checkbox',
+ checked: true,
+ text: 'Constrain proportions'
}
+ ]
+ };
+ };
+ var $_ftlz5pdajjgweby4 = {
+ createUi: createUi,
+ syncSize: syncSize,
+ updateSize: updateSize
+ };
- if (imageList) {
- imageListCtrl = {
- type: 'listbox',
- label: 'Image list',
- values: Utils.buildListItems(
- imageList,
- function (item) {
- item.value = editor.convertURL(item.value || item.url, 'src');
- },
- [{ text: 'None', value: '' }]
- ),
- value: data.src && editor.convertURL(data.src, 'src'),
- onselect: function (e) {
- var altCtrl = win.find('#alt');
-
- if (!altCtrl.value() || (e.lastControl && altCtrl.value() == e.lastControl.text())) {
- altCtrl.value(e.control.text());
- }
-
- win.find('#src').value(e.control.value()).fire('change');
- },
- onPostRender: function () {
- /*eslint consistent-this: 0*/
- imageListCtrl = this;
- }
- };
+ var onSrcChange = function (evt, editor) {
+ var srcURL, prependURL, absoluteURLPattern;
+ var meta = evt.meta || {};
+ var control = evt.control;
+ var rootControl = control.rootControl;
+ var imageListCtrl = rootControl.find('#image-list')[0];
+ if (imageListCtrl) {
+ imageListCtrl.value(editor.convertURL(control.value(), 'src'));
+ }
+ global$2.each(meta, function (value, key) {
+ rootControl.find('#' + key).value(value);
+ });
+ if (!meta.width && !meta.height) {
+ srcURL = editor.convertURL(control.value(), 'src');
+ prependURL = $_1dn8wtctjjgwebvz.getPrependUrl(editor);
+ absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i');
+ if (prependURL && !absoluteURLPattern.test(srcURL) && srcURL.substring(0, prependURL.length) !== prependURL) {
+ srcURL = prependURL + srcURL;
+ }
+ control.value(srcURL);
+ $_1e8k4ncujjgwebw2.getImageSize(editor.documentBaseURI.toAbsolute(control.value()), function (data) {
+ if (data.width && data.height && $_1dn8wtctjjgwebvz.hasDimensions(editor)) {
+ rootControl.find('#width').value(data.width);
+ rootControl.find('#height').value(data.height);
+ $_ftlz5pdajjgweby4.syncSize(rootControl);
}
+ });
+ }
+ };
+ var onBeforeCall = function (evt) {
+ evt.meta = evt.control.rootControl.toJSON();
+ };
+ var getGeneralItems = function (editor, imageListCtrl) {
+ var generalFormItems = [
+ {
+ name: 'src',
+ type: 'filepicker',
+ filetype: 'image',
+ label: 'Source',
+ autofocus: true,
+ onchange: function (evt) {
+ onSrcChange(evt, editor);
+ },
+ onbeforecall: onBeforeCall
+ },
+ imageListCtrl
+ ];
+ if ($_1dn8wtctjjgwebvz.hasDescription(editor)) {
+ generalFormItems.push({
+ name: 'alt',
+ type: 'textbox',
+ label: 'Image description'
+ });
+ }
+ if ($_1dn8wtctjjgwebvz.hasImageTitle(editor)) {
+ generalFormItems.push({
+ name: 'title',
+ type: 'textbox',
+ label: 'Image Title'
+ });
+ }
+ if ($_1dn8wtctjjgwebvz.hasDimensions(editor)) {
+ generalFormItems.push($_ftlz5pdajjgweby4.createUi());
+ }
+ if ($_1dn8wtctjjgwebvz.getClassList(editor)) {
+ generalFormItems.push({
+ name: 'class',
+ type: 'listbox',
+ label: 'Class',
+ values: $_1e8k4ncujjgwebw2.buildListItems($_1dn8wtctjjgwebvz.getClassList(editor), function (item) {
+ if (item.value) {
+ item.textStyle = function () {
+ return editor.formatter.getCssText({
+ inline: 'img',
+ classes: [item.value]
+ });
+ };
+ }
+ })
+ });
+ }
+ if ($_1dn8wtctjjgwebvz.hasImageCaption(editor)) {
+ generalFormItems.push({
+ name: 'caption',
+ type: 'checkbox',
+ label: 'Caption'
+ });
+ }
+ return generalFormItems;
+ };
+ var makeTab$1 = function (editor, imageListCtrl) {
+ return {
+ title: 'General',
+ type: 'form',
+ items: getGeneralItems(editor, imageListCtrl)
+ };
+ };
+ var $_78zck5d9jjgweby1 = {
+ makeTab: makeTab$1,
+ getGeneralItems: getGeneralItems
+ };
- if (editor.settings.image_class_list) {
- classListCtrl = {
- name: 'class',
- type: 'listbox',
- label: 'Class',
- values: Utils.buildListItems(
- editor.settings.image_class_list,
- function (item) {
- if (item.value) {
- item.textStyle = function () {
- return editor.formatter.getCssText({ inline: 'img', classes: [item.value] });
- };
- }
- }
- )
- };
- }
+ var url = function () {
+ return $_oab1bcwjjgwebwl.getOrDie('URL');
+ };
+ var createObjectURL = function (blob) {
+ return url().createObjectURL(blob);
+ };
+ var revokeObjectURL = function (u) {
+ url().revokeObjectURL(u);
+ };
+ var $_86i13edcjjgwebya = {
+ createObjectURL: createObjectURL,
+ revokeObjectURL: revokeObjectURL
+ };
- // General settings shared between simple and advanced dialogs
- var generalFormItems = [
- {
- name: 'src',
- type: 'filepicker',
- filetype: 'image',
- label: 'Source',
- autofocus: true,
- onchange: onSrcChange,
- onbeforecall: onBeforeCall
- },
- imageListCtrl
- ];
+ var global$5 = tinymce.util.Tools.resolve('tinymce.ui.Factory');
- if (editor.settings.image_description !== false) {
- generalFormItems.push({ name: 'alt', type: 'textbox', label: 'Image description' });
- }
+ function XMLHttpRequest () {
+ var f = $_oab1bcwjjgwebwl.getOrDie('XMLHttpRequest');
+ return new f();
+ }
- if (editor.settings.image_title) {
- generalFormItems.push({ name: 'title', type: 'textbox', label: 'Image Title' });
+ var noop = function () {
+ };
+ var pathJoin = function (path1, path2) {
+ if (path1) {
+ return path1.replace(/\/$/, '') + '/' + path2.replace(/^\//, '');
+ }
+ return path2;
+ };
+ function Uploader (settings) {
+ var defaultHandler = function (blobInfo, success, failure, progress) {
+ var xhr, formData;
+ xhr = new XMLHttpRequest();
+ xhr.open('POST', settings.url);
+ xhr.withCredentials = settings.credentials;
+ xhr.upload.onprogress = function (e) {
+ progress(e.loaded / e.total * 100);
+ };
+ xhr.onerror = function () {
+ failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status);
+ };
+ xhr.onload = function () {
+ var json;
+ if (xhr.status < 200 || xhr.status >= 300) {
+ failure('HTTP Error: ' + xhr.status);
+ return;
}
-
- if (imageDimensions) {
- generalFormItems.push({
- type: 'container',
- label: 'Dimensions',
- layout: 'flex',
- direction: 'row',
- align: 'center',
- spacing: 5,
- items: [
- { name: 'width', type: 'textbox', maxLength: 5, size: 3, onchange: recalcSize, ariaLabel: 'Width' },
- { type: 'label', text: 'x' },
- { name: 'height', type: 'textbox', maxLength: 5, size: 3, onchange: recalcSize, ariaLabel: 'Height' },
- { name: 'constrain', type: 'checkbox', checked: true, text: 'Constrain proportions' }
- ]
- });
+ json = JSON.parse(xhr.responseText);
+ if (!json || typeof json.location !== 'string') {
+ failure('Invalid JSON: ' + xhr.responseText);
+ return;
}
-
- generalFormItems.push(classListCtrl);
-
- if (editor.settings.image_caption && Env.ceFalse) {
- generalFormItems.push({ name: 'caption', type: 'checkbox', label: 'Caption' });
+ success(pathJoin(settings.basePath, json.location));
+ };
+ formData = new FormData();
+ formData.append('file', blobInfo.blob(), blobInfo.filename());
+ xhr.send(formData);
+ };
+ var uploadBlob = function (blobInfo, handler) {
+ return new global$1(function (resolve, reject) {
+ try {
+ handler(blobInfo, resolve, reject, noop);
+ } catch (ex) {
+ reject(ex.message);
}
+ });
+ };
+ var isDefaultHandler = function (handler) {
+ return handler === defaultHandler;
+ };
+ var upload = function (blobInfo) {
+ return !settings.url && isDefaultHandler(settings.handler) ? global$1.reject('Upload url missing from the settings.') : uploadBlob(blobInfo, settings.handler);
+ };
+ settings = global$2.extend({
+ credentials: false,
+ handler: defaultHandler
+ }, settings);
+ return { upload: upload };
+ }
- if (editor.settings.image_advtab || editor.settings.images_upload_url) {
- var body = [
+ var onFileInput = function (editor) {
+ return function (evt) {
+ var Throbber = global$5.get('Throbber');
+ var rootControl = evt.control.rootControl;
+ var throbber = new Throbber(rootControl.getEl());
+ var file = evt.control.value();
+ var blobUri = $_86i13edcjjgwebya.createObjectURL(file);
+ var uploader = Uploader({
+ url: $_1dn8wtctjjgwebvz.getUploadUrl(editor),
+ basePath: $_1dn8wtctjjgwebvz.getUploadBasePath(editor),
+ credentials: $_1dn8wtctjjgwebvz.getUploadCredentials(editor),
+ handler: $_1dn8wtctjjgwebvz.getUploadHandler(editor)
+ });
+ var finalize = function () {
+ throbber.hide();
+ $_86i13edcjjgwebya.revokeObjectURL(blobUri);
+ };
+ throbber.show();
+ return $_1e8k4ncujjgwebw2.blobToDataUri(file).then(function (dataUrl) {
+ var blobInfo = editor.editorUpload.blobCache.create({
+ blob: file,
+ blobUri: blobUri,
+ name: file.name ? file.name.replace(/\.[^\.]+$/, '') : null,
+ base64: dataUrl.split(',')[1]
+ });
+ return uploader.upload(blobInfo).then(function (url) {
+ var src = rootControl.find('#src');
+ src.value(url);
+ rootControl.find('tabpanel')[0].activateTab(0);
+ src.fire('change');
+ finalize();
+ return url;
+ });
+ }).catch(function (err) {
+ editor.windowManager.alert(err);
+ finalize();
+ });
+ };
+ };
+ var acceptExts = '.jpg,.jpeg,.png,.gif';
+ var makeTab$2 = function (editor) {
+ return {
+ title: 'Upload',
+ type: 'form',
+ layout: 'flex',
+ direction: 'column',
+ align: 'stretch',
+ padding: '20 20 20 20',
+ items: [
+ {
+ type: 'container',
+ layout: 'flex',
+ direction: 'column',
+ align: 'center',
+ spacing: 10,
+ items: [
+ {
+ text: 'Browse for an image',
+ type: 'browsebutton',
+ accept: acceptExts,
+ onchange: onFileInput(editor)
+ },
{
- title: 'General',
- type: 'form',
- items: generalFormItems
+ text: 'OR',
+ type: 'label'
}
- ];
+ ]
+ },
+ {
+ text: 'Drop an image here',
+ type: 'dropzone',
+ accept: acceptExts,
+ height: 100,
+ onchange: onFileInput(editor)
+ }
+ ]
+ };
+ };
+ var $_71qd7mdbjjgweby7 = { makeTab: makeTab$2 };
- if (editor.settings.image_advtab) {
- // Parse styles from img
- if (imgElm) {
- if (imgElm.style.marginLeft && imgElm.style.marginRight && imgElm.style.marginLeft === imgElm.style.marginRight) {
- data.hspace = Utils.removePixelSuffix(imgElm.style.marginLeft);
- }
- if (imgElm.style.marginTop && imgElm.style.marginBottom && imgElm.style.marginTop === imgElm.style.marginBottom) {
- data.vspace = Utils.removePixelSuffix(imgElm.style.marginTop);
- }
- if (imgElm.style.borderWidth) {
- data.border = Utils.removePixelSuffix(imgElm.style.borderWidth);
- }
+ var curry = function (f) {
+ var x = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ x[_i - 1] = arguments[_i];
+ }
+ var args = new Array(arguments.length - 1);
+ for (var i = 1; i < arguments.length; i++)
+ args[i - 1] = arguments[i];
+ return function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
+ }
+ var newArgs = new Array(arguments.length);
+ for (var j = 0; j < newArgs.length; j++)
+ newArgs[j] = arguments[j];
+ var all = args.concat(newArgs);
+ return f.apply(null, all);
+ };
+ };
- data.style = editor.dom.serializeStyle(editor.dom.parseStyle(editor.dom.getAttrib(imgElm, 'style')));
+ var submitForm = function (editor, evt) {
+ var win = evt.control.getRoot();
+ $_ftlz5pdajjgweby4.updateSize(win);
+ editor.undoManager.transact(function () {
+ var data = merge(readImageDataFromSelection(editor), win.toJSON());
+ insertOrUpdateImage(editor, data);
+ });
+ editor.editorUpload.uploadImagesAuto();
+ };
+ function Dialog (editor) {
+ function showDialog(imageList) {
+ var data = readImageDataFromSelection(editor);
+ var win, imageListCtrl;
+ if (imageList) {
+ imageListCtrl = {
+ type: 'listbox',
+ label: 'Image list',
+ name: 'image-list',
+ values: $_1e8k4ncujjgwebw2.buildListItems(imageList, function (item) {
+ item.value = editor.convertURL(item.value || item.url, 'src');
+ }, [{
+ text: 'None',
+ value: ''
+ }]),
+ value: data.src && editor.convertURL(data.src, 'src'),
+ onselect: function (e) {
+ var altCtrl = win.find('#alt');
+ if (!altCtrl.value() || e.lastControl && altCtrl.value() === e.lastControl.text()) {
+ altCtrl.value(e.control.text());
}
-
- body.push({
- title: 'Advanced',
- type: 'form',
- pack: 'start',
- items: [
- {
- label: 'Style',
- name: 'style',
- type: 'textbox',
- onchange: updateVSpaceHSpaceBorder
- },
- {
- type: 'form',
- layout: 'grid',
- packV: 'start',
- columns: 2,
- padding: 0,
- alignH: ['left', 'right'],
- defaults: {
- type: 'textbox',
- maxWidth: 50,
- onchange: updateStyle
- },
- items: [
- { label: 'Vertical space', name: 'vspace' },
- { label: 'Horizontal space', name: 'hspace' },
- { label: 'Border', name: 'border' }
- ]
- }
- ]
- });
- }
-
- if (editor.settings.images_upload_url) {
- var acceptExts = '.jpg,.jpeg,.png,.gif';
-
- var uploadTab = {
- title: 'Upload',
- type: 'form',
- layout: 'flex',
- direction: 'column',
- align: 'stretch',
- padding: '20 20 20 20',
- items: [
- {
- type: 'container',
- layout: 'flex',
- direction: 'column',
- align: 'center',
- spacing: 10,
- items: [
- {
- text: "Browse for an image",
- type: 'browsebutton',
- accept: acceptExts,
- onchange: onFileInput
- },
- {
- text: 'OR',
- type: 'label'
- }
- ]
- },
- {
- text: "Drop an image here",
- type: 'dropzone',
- accept: acceptExts,
- height: 100,
- onchange: onFileInput
- }
- ]
- };
-
- body.push(uploadTab);
+ win.find('#src').value(e.control.value()).fire('change');
+ },
+ onPostRender: function () {
+ imageListCtrl = this;
}
-
- // Advanced dialog shows general+advanced tabs
- win = editor.windowManager.open({
- title: 'Insert/edit image',
- data: data,
- bodyType: 'tabpanel',
- body: body,
- onSubmit: onSubmitForm
- });
- } else {
- // Simple default dialog
- win = editor.windowManager.open({
- title: 'Insert/edit image',
- data: data,
- body: generalFormItems,
- onSubmit: onSubmitForm
- });
+ };
+ }
+ if ($_1dn8wtctjjgwebvz.hasAdvTab(editor) || $_1dn8wtctjjgwebvz.hasUploadUrl(editor) || $_1dn8wtctjjgwebvz.hasUploadHandler(editor)) {
+ var body = [$_78zck5d9jjgweby1.makeTab(editor, imageListCtrl)];
+ if ($_1dn8wtctjjgwebvz.hasAdvTab(editor)) {
+ body.push($_6dfy5vd3jjgwebxf.makeTab(editor));
}
+ if ($_1dn8wtctjjgwebvz.hasUploadUrl(editor) || $_1dn8wtctjjgwebvz.hasUploadHandler(editor)) {
+ body.push($_71qd7mdbjjgweby7.makeTab(editor));
+ }
+ win = editor.windowManager.open({
+ title: 'Insert/edit image',
+ data: data,
+ bodyType: 'tabpanel',
+ body: body,
+ onSubmit: curry(submitForm, editor)
+ });
+ } else {
+ win = editor.windowManager.open({
+ title: 'Insert/edit image',
+ data: data,
+ body: $_78zck5d9jjgweby1.getGeneralItems(editor, imageListCtrl),
+ onSubmit: curry(submitForm, editor)
+ });
}
+ $_ftlz5pdajjgweby4.syncSize(win);
+ }
+ function open() {
+ $_1e8k4ncujjgwebw2.createImageList(editor, showDialog);
+ }
+ return { open: open };
+ }
- function open() {
- createImageList(showDialog);
- }
+ var register = function (editor) {
+ editor.addCommand('mceImage', Dialog(editor).open);
+ };
+ var $_3lypdlcrjjgwebvs = { register: register };
- return {
- open: open
+ var hasImageClass = function (node) {
+ var className = node.attr('class');
+ return className && /\bimage\b/.test(className);
+ };
+ var toggleContentEditableState = function (state) {
+ return function (nodes) {
+ var i = nodes.length, node;
+ var toggleContentEditable = function (node) {
+ node.attr('contenteditable', state ? 'true' : null);
};
+ while (i--) {
+ node = nodes[i];
+ if (hasImageClass(node)) {
+ node.attr('contenteditable', state ? 'false' : null);
+ global$2.each(node.getAll('figcaption'), toggleContentEditable);
+ }
+ }
};
+ };
+ var setup = function (editor) {
+ editor.on('preInit', function () {
+ editor.parser.addNodeFilter('figure', toggleContentEditableState(true));
+ editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));
+ });
+ };
+ var $_5op6l2dhjjgwebym = { setup: setup };
+
+ var register$1 = function (editor) {
+ editor.addButton('image', {
+ icon: 'image',
+ tooltip: 'Insert/edit image',
+ onclick: Dialog(editor).open,
+ stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image'
+ });
+ editor.addMenuItem('image', {
+ icon: 'image',
+ text: 'Image',
+ onclick: Dialog(editor).open,
+ context: 'insert',
+ prependToContext: true
+ });
+ };
+ var $_dm869adijjgwebyn = { register: register$1 };
+
+ global.add('image', function (editor) {
+ $_5op6l2dhjjgwebym.setup(editor);
+ $_dm869adijjgwebyn.register(editor);
+ $_3lypdlcrjjgwebvs.register(editor);
+ });
+ function Plugin () {
}
-);
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ return Plugin;
-/**
- * This class contains all core logic for the image plugin.
- *
- * @class tinymce.image.Plugin
- * @private
- */
-define(
- 'tinymce.plugins.image.Plugin',
- [
- 'tinymce.core.PluginManager',
- 'tinymce.core.util.Tools',
- 'tinymce.plugins.image.ui.Dialog'
- ],
- function (PluginManager, Tools, Dialog) {
- PluginManager.add('image', function (editor) {
-
- editor.on('preInit', function () {
- function hasImageClass(node) {
- var className = node.attr('class');
- return className && /\bimage\b/.test(className);
- }
-
- function toggleContentEditableState(state) {
- return function (nodes) {
- var i = nodes.length, node;
-
- function toggleContentEditable(node) {
- node.attr('contenteditable', state ? 'true' : null);
- }
-
- while (i--) {
- node = nodes[i];
-
- if (hasImageClass(node)) {
- node.attr('contenteditable', state ? 'false' : null);
- Tools.each(node.getAll('figcaption'), toggleContentEditable);
- Tools.each(node.getAll('img'), toggleContentEditable);
- }
- }
- };
- }
-
- editor.parser.addNodeFilter('figure', toggleContentEditableState(true));
- editor.serializer.addNodeFilter('figure', toggleContentEditableState(false));
- });
-
- editor.addButton('image', {
- icon: 'image',
- tooltip: 'Insert/edit image',
- onclick: Dialog(editor).open,
- stateSelector: 'img:not([data-mce-object],[data-mce-placeholder]),figure.image'
- });
-
- editor.addMenuItem('image', {
- icon: 'image',
- text: 'Image',
- onclick: Dialog(editor).open,
- context: 'insert',
- prependToContext: true
- });
-
- editor.addCommand('mceImage', Dialog(editor).open);
- });
-
- return function () { };
- }
-);
-dem('tinymce.plugins.image.Plugin')();
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("4",tinymce.util.Tools.resolve),g("1",["4"],function(a){return a("tinymce.PluginManager")}),g("2",["4"],function(a){return a("tinymce.util.Tools")}),h("5",document),h("6",Math),h("7",RegExp),g("8",["4"],function(a){return a("tinymce.Env")}),g("9",["4"],function(a){return a("tinymce.ui.Factory")}),g("a",["4"],function(a){return a("tinymce.util.JSON")}),g("b",["4"],function(a){return a("tinymce.util.XHR")}),g("e",["4"],function(a){return a("tinymce.util.Promise")}),g("c",["e","2","5"],function(a,b,c){return function(c){function d(a,b){return a?a.replace(/\/$/,"")+"/"+b.replace(/^\//,""):b}function e(a,b,e,f){var g,h;g=new XMLHttpRequest,g.open("POST",c.url),g.withCredentials=c.credentials,g.upload.onprogress=function(a){f(a.loaded/a.total*100)},g.onerror=function(){e("Image upload failed due to a XHR Transport error. Code: "+g.status)},g.onload=function(){var a;return g.status<200||g.status>=300?void e("HTTP Error: "+g.status):(a=JSON.parse(g.responseText),a&&"string"==typeof a.location?void b(d(c.basePath,a.location)):void e("Invalid JSON: "+g.responseText))},h=new FormData,h.append("file",a.blob(),a.filename()),g.send(h)}function f(b,c){return new a(function(a,d){try{c(b,a,d,i)}catch(a){d(a.message)}})}function g(a){return a===e}function h(b){return!c.url&&g(c.handler)?a.reject("Upload url missng from the settings."):f(b,c.handler)}var i=function(){};return c=b.extend({credentials:!1,handler:e},c),{upload:h}}}),g("d",["2","6","5"],function(a,b,c){var d=function(a,d){function e(a,b){f.parentNode&&f.parentNode.removeChild(f),d({width:a,height:b})}var f=c.createElement("img");f.onload=function(){e(b.max(f.width,f.clientWidth),b.max(f.height,f.clientHeight))},f.onerror=function(){e()};var g=f.style;g.visibility="hidden",g.position="fixed",g.bottom=g.left=0,g.width=g.height="auto",c.body.appendChild(f),f.src=a},e=function(b,c,d){function e(b,d){return d=d||[],a.each(b,function(a){var b={text:a.text||a.title};a.menu?b.menu=e(a.menu):(b.value=a.value,c(b)),d.push(b)}),d}return e(b,d||[])},f=function(a){return a&&(a=a.replace(/px$/,"")),a},g=function(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+="px"),a},h=function(a){if(a.margin){var b=a.margin.split(" ");switch(b.length){case 1:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[0],a["margin-bottom"]=a["margin-bottom"]||b[0],a["margin-left"]=a["margin-left"]||b[0];break;case 2:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[0],a["margin-left"]=a["margin-left"]||b[1];break;case 3:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[2],a["margin-left"]=a["margin-left"]||b[1];break;case 4:a["margin-top"]=a["margin-top"]||b[0],a["margin-right"]=a["margin-right"]||b[1],a["margin-bottom"]=a["margin-bottom"]||b[2],a["margin-left"]=a["margin-left"]||b[3]}delete a.margin}return a};return{getImageSize:d,buildListItems:e,removePixelSuffix:f,addPixelSuffix:g,mergeMargins:h}}),g("3",["5","6","7","8","9","a","2","b","c","d"],function(a,b,c,d,e,f,g,h,i,j){return function(a){function k(b){var c=a.settings.image_list;"string"==typeof c?h.send({url:c,success:function(a){b(f.parse(a))}}):"function"==typeof c?c(b):b(c)}function l(f){function h(){var b=e.get("Throbber"),c=new b(s.getEl()),d=this.value(),f=new i({url:B.images_upload_url,basePath:B.images_upload_base_path,credentials:B.images_upload_credentials,handler:B.images_upload_handler}),g=a.editorUpload.blobCache.create({blob:d,name:d.name?d.name.replace(/\.[^\.]+$/,""):null,base64:"data:image/fake;base64,="}),h=function(){c.hide(),URL.revokeObjectURL(g.blobUri())};return c.show(),f.upload(g).then(function(a){var b=s.find("#src");return b.value(a),s.find("tabpanel")[0].activateTab(0),b.fire("change"),h(),a},function(b){a.windowManager.alert(b),h()})}function k(b){return a.schema.getTextBlockElements()[b.nodeName]}function l(){var a,c,d,e;a=s.find("#width")[0],c=s.find("#height")[0],a&&c&&(d=a.value(),e=c.value(),s.find("#constrain")[0].checked()&&v&&w&&d&&e&&(v!=d?(e=b.round(d/v*e),isNaN(e)||c.value(e)):(d=b.round(e/w*d),isNaN(d)||a.value(d))),v=d,w=e)}function m(){if(a.settings.image_advtab){var b=s.toJSON(),c=A.parseStyle(b.style);c=j.mergeMargins(c),b.vspace&&(c["margin-top"]=c["margin-bottom"]=j.addPixelSuffix(b.vspace)),b.hspace&&(c["margin-left"]=c["margin-right"]=j.addPixelSuffix(b.hspace)),b.border&&(c["border-width"]=j.addPixelSuffix(b.border)),s.find("#style").value(A.serializeStyle(A.parseStyle(A.serializeStyle(c))))}}function n(){if(a.settings.image_advtab){var b=s.toJSON(),c=A.parseStyle(b.style);s.find("#vspace").value(""),s.find("#hspace").value(""),c=j.mergeMargins(c),(c["margin-top"]&&c["margin-bottom"]||c["margin-right"]&&c["margin-left"])&&(c["margin-top"]===c["margin-bottom"]?s.find("#vspace").value(j.removePixelSuffix(c["margin-top"])):s.find("#vspace").value(""),c["margin-right"]===c["margin-left"]?s.find("#hspace").value(j.removePixelSuffix(c["margin-right"])):s.find("#hspace").value("")),c["border-width"]&&s.find("#border").value(j.removePixelSuffix(c["border-width"])),s.find("#style").value(A.serializeStyle(A.parseStyle(A.serializeStyle(c))))}}function o(b){function c(){b.onload=b.onerror=null,a.selection&&(a.selection.select(b),a.nodeChanged())}b.onload=function(){z.width||z.height||!C||A.setAttribs(b,{width:b.clientWidth,height:b.clientHeight}),c()},b.onerror=c}function p(){var b,c;m(),l(),z=g.extend(z,s.toJSON()),z.alt||(z.alt=""),z.title||(z.title=""),""===z.width&&(z.width=null),""===z.height&&(z.height=null),z.style||(z.style=null),z={src:z.src,alt:z.alt,title:z.title,width:z.width,height:z.height,style:z.style,caption:z.caption,"class":z["class"]},a.undoManager.transact(function(){if(z.src){if(""===z.title&&(z.title=null),t?A.setAttribs(t,z):(z.id="__mcenew",a.focus(),a.selection.setContent(A.createHTML("img",z)),t=A.get("__mcenew"),A.setAttrib(t,"id",null)),a.editorUpload.uploadImagesAuto(),z.caption===!1&&A.is(t.parentNode,"figure.image")&&(b=t.parentNode,A.setAttrib(t,"contenteditable",null),A.insertAfter(t,b),A.remove(b),a.selection.select(t),a.nodeChanged()),z.caption!==!0)o(t);else if(!A.is(t.parentNode,"figure.image")){c=t,t=t.cloneNode(!0),t.contentEditable=!0,b=A.create("figure",{"class":"image"}),b.appendChild(t),b.appendChild(A.create("figcaption",{contentEditable:!0},"Caption")),b.contentEditable=!1;var d=A.getParent(c,k);d?A.split(d,c,b):A.replace(b,c),a.selection.select(b)}}else if(t){var e=A.is(t.parentNode,"figure.image")?t.parentNode:t;A.remove(e),a.focus(),a.nodeChanged(),A.isEmpty(a.getBody())&&(a.setContent(""),a.selection.setCursorLocation())}})}function q(b){var d,e,f,h=b.meta||{};x&&x.value(a.convertURL(this.value(),"src")),g.each(h,function(a,b){s.find("#"+b).value(a)}),h.width||h.height||(d=a.convertURL(this.value(),"src"),e=a.settings.image_prepend_url,f=new c("^(?:[a-z]+:)?//","i"),e&&!f.test(d)&&d.substring(0,e.length)!==e&&(d=e+d),this.value(d),j.getImageSize(a.documentBaseURI.toAbsolute(this.value()),function(a){a.width&&a.height&&C&&(v=a.width,w=a.height,s.find("#width").value(v),s.find("#height").value(w))}))}function r(a){a.meta=s.toJSON()}var s,t,u,v,w,x,y,z={},A=a.dom,B=a.settings,C=B.image_dimensions!==!1;t=a.selection.getNode(),u=A.getParent(t,"figure.image"),u&&(t=A.select("img",u)[0]),t&&("IMG"!=t.nodeName||t.getAttribute("data-mce-object")||t.getAttribute("data-mce-placeholder"))&&(t=null),t&&(v=A.getAttrib(t,"width"),w=A.getAttrib(t,"height"),z={src:A.getAttrib(t,"src"),alt:A.getAttrib(t,"alt"),title:A.getAttrib(t,"title"),"class":A.getAttrib(t,"class"),width:v,height:w,caption:!!u}),f&&(x={type:"listbox",label:"Image list",values:j.buildListItems(f,function(b){b.value=a.convertURL(b.value||b.url,"src")},[{text:"None",value:""}]),value:z.src&&a.convertURL(z.src,"src"),onselect:function(a){var b=s.find("#alt");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),s.find("#src").value(a.control.value()).fire("change")},onPostRender:function(){x=this}}),a.settings.image_class_list&&(y={name:"class",type:"listbox",label:"Class",values:j.buildListItems(a.settings.image_class_list,function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"img",classes:[b.value]})})})});var D=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:q,onbeforecall:r},x];if(a.settings.image_description!==!1&&D.push({name:"alt",type:"textbox",label:"Image description"}),a.settings.image_title&&D.push({name:"title",type:"textbox",label:"Image Title"}),C&&D.push({type:"container",label:"Dimensions",layout:"flex",direction:"row",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:3,onchange:l,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:3,onchange:l,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}),D.push(y),a.settings.image_caption&&d.ceFalse&&D.push({name:"caption",type:"checkbox",label:"Caption"}),a.settings.image_advtab||a.settings.images_upload_url){var E=[{title:"General",type:"form",items:D}];if(a.settings.image_advtab&&(t&&(t.style.marginLeft&&t.style.marginRight&&t.style.marginLeft===t.style.marginRight&&(z.hspace=j.removePixelSuffix(t.style.marginLeft)),t.style.marginTop&&t.style.marginBottom&&t.style.marginTop===t.style.marginBottom&&(z.vspace=j.removePixelSuffix(t.style.marginTop)),t.style.borderWidth&&(z.border=j.removePixelSuffix(t.style.borderWidth)),z.style=a.dom.serializeStyle(a.dom.parseStyle(a.dom.getAttrib(t,"style")))),E.push({title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox",onchange:n},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,alignH:["left","right"],defaults:{type:"textbox",maxWidth:50,onchange:m},items:[{label:"Vertical space",name:"vspace"},{label:"Horizontal space",name:"hspace"},{label:"Border",name:"border"}]}]})),a.settings.images_upload_url){var F=".jpg,.jpeg,.png,.gif",G={title:"Upload",type:"form",layout:"flex",direction:"column",align:"stretch",padding:"20 20 20 20",items:[{type:"container",layout:"flex",direction:"column",align:"center",spacing:10,items:[{text:"Browse for an image",type:"browsebutton",accept:F,onchange:h},{text:"OR",type:"label"}]},{text:"Drop an image here",type:"dropzone",accept:F,height:100,onchange:h}]};E.push(G)}s=a.windowManager.open({title:"Insert/edit image",data:z,bodyType:"tabpanel",body:E,onSubmit:p})}else s=a.windowManager.open({title:"Insert/edit image",data:z,body:D,onSubmit:p})}function m(){k(l)}return{open:m}}}),g("0",["1","2","3"],function(a,b,c){return a.add("image",function(a){a.on("preInit",function(){function c(a){var b=a.attr("class");return b&&/\bimage\b/.test(b)}function d(a){return function(d){function e(b){b.attr("contenteditable",a?"true":null)}for(var f,g=d.length;g--;)f=d[g],c(f)&&(f.attr("contenteditable",a?"false":null),b.each(f.getAll("figcaption"),e),b.each(f.getAll("img"),e))}}a.parser.addNodeFilter("figure",d(!0)),a.serializer.addNodeFilter("figure",d(!1))}),a.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:c(a).open,stateSelector:"img:not([data-mce-object],[data-mce-placeholder]),figure.image"}),a.addMenuItem("image",{icon:"image",text:"Image",onclick:c(a).open,context:"insert",prependToContext:!0}),a.addCommand("mceImage",c(a).open)}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=function(e){return!1!==e.settings.image_dimensions},i=function(e){return!0===e.settings.image_advtab},g=function(e){return e.getParam("image_prepend_url","")},n=function(e){return e.getParam("image_class_list")},r=function(e){return!1!==e.settings.image_description},a=function(e){return!0===e.settings.image_title},o=function(e){return!0===e.settings.image_caption},l=function(e){return e.getParam("image_list",!1)},u=function(e){return e.getParam("images_upload_url",!1)},c=function(e){return e.getParam("images_upload_handler",!1)},s=function(e){return e.getParam("images_upload_url")},m=function(e){return e.getParam("images_upload_handler")},f=function(e){return e.getParam("images_upload_base_path")},p=function(e){return e.getParam("images_upload_credentials")},h="undefined"!=typeof window?window:Function("return this;")(),v=function(e,t){return function(e,t){for(var n=t!==undefined&&null!==t?t:h,r=0;r<e.length&&n!==undefined&&null!==n;++r)n=n[e[r]];return n}(e.split("."),t)},t={getOrDie:function(e,t){var n=v(e,t);if(n===undefined||null===n)throw e+" not available on this browser";return n}};function b(){return new(t.getOrDie("FileReader"))}var y,x=tinymce.util.Tools.resolve("tinymce.util.Promise"),w=tinymce.util.Tools.resolve("tinymce.util.Tools"),C=tinymce.util.Tools.resolve("tinymce.util.XHR"),S=function(e,t){return Math.max(parseInt(e,10),parseInt(t,10))},N=function(e,n){var r=document.createElement("img");function t(e,t){r.parentNode&&r.parentNode.removeChild(r),n({width:e,height:t})}r.onload=function(){t(S(r.width,r.clientWidth),S(r.height,r.clientHeight))},r.onerror=function(){t(0,0)};var a=r.style;a.visibility="hidden",a.position="fixed",a.bottom=a.left="0px",a.width=a.height="auto",document.body.appendChild(r),r.src=e},_=function(e,a,t){return function n(e,r){return r=r||[],w.each(e,function(e){var t={text:e.text||e.title};e.menu?t.menu=n(e.menu):(t.value=e.value,a(t)),r.push(t)}),r}(e,t||[])},A=function(e){return e&&(e=e.replace(/px$/,"")),e},T=function(e){return 0<e.length&&/^[0-9]+$/.test(e)&&(e+="px"),e},R=function(e){if(e.margin){var t=e.margin.split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e},I=function(e,t){var n=l(e);"string"==typeof n?C.send({url:n,success:function(e){t(JSON.parse(e))}}):"function"==typeof n?n(t):t(n)},O=function(e,t,n){function r(){n.onload=n.onerror=null,e.selection&&(e.selection.select(n),e.nodeChanged())}n.onload=function(){t.width||t.height||!d(e)||e.dom.setAttribs(n,{width:n.clientWidth,height:n.clientHeight}),r()},n.onerror=r},L=function(r){return new x(function(e,t){var n=new b;n.onload=function(){e(n.result)},n.onerror=function(){t(b.error.message)},n.readAsDataURL(r)})},P=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),U=Object.prototype.hasOwnProperty,E=(y=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var a=e[r];for(var o in a)U.call(a,o)&&(n[o]=y(n[o],a[o]))}return n}),k=P.DOM,M=function(e){return e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?A(e.style.marginLeft):""},D=function(e){return e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?A(e.style.marginTop):""},z=function(e){return e.style.borderWidth?A(e.style.borderWidth):""},B=function(e,t){return e.hasAttribute(t)?e.getAttribute(t):""},H=function(e,t){return e.style[t]?e.style[t]:""},j=function(e){return null!==e.parentNode&&"FIGURE"===e.parentNode.nodeName},F=function(e,t,n){e.setAttribute(t,n)},W=function(e){var t,n,r,a;j(e)?(a=(r=e).parentNode,k.insertAfter(r,a),k.remove(a)):(t=e,n=k.create("figure",{"class":"image"}),k.insertAfter(n,t),n.appendChild(t),n.appendChild(k.create("figcaption",{contentEditable:!0},"Caption")),n.contentEditable="false")},J=function(e,t){var n=e.getAttribute("style"),r=t(null!==n?n:"");0<r.length?(e.setAttribute("style",r),e.setAttribute("data-mce-style",r)):e.removeAttribute("style")},V=function(e,r){return function(e,t,n){e.style[t]?(e.style[t]=T(n),J(e,r)):F(e,t,n)}},G=function(e,t){return e.style[t]?A(e.style[t]):B(e,t)},$=function(e,t){var n=T(t);e.style.marginLeft=n,e.style.marginRight=n},X=function(e,t){var n=T(t);e.style.marginTop=n,e.style.marginBottom=n},q=function(e,t){var n=T(t);e.style.borderWidth=n},K=function(e,t){e.style.borderStyle=t},Q=function(e){return"FIGURE"===e.nodeName},Y=function(e,t){var n=document.createElement("img");return F(n,"style",t.style),(M(n)||""!==t.hspace)&&$(n,t.hspace),(D(n)||""!==t.vspace)&&X(n,t.vspace),(z(n)||""!==t.border)&&q(n,t.border),(H(n,"borderStyle")||""!==t.borderStyle)&&K(n,t.borderStyle),e(n.getAttribute("style"))},Z=function(e,t){return{src:B(t,"src"),alt:B(t,"alt"),title:B(t,"title"),width:G(t,"width"),height:G(t,"height"),"class":B(t,"class"),style:e(B(t,"style")),caption:j(t),hspace:M(t),vspace:D(t),border:z(t),borderStyle:H(t,"borderStyle")}},ee=function(e,t,n,r,a){n[r]!==t[r]&&a(e,r,n[r])},te=function(r,a){return function(e,t,n){r(e,n),J(e,a)}},ne=function(e,t,n){var r=Z(e,n);ee(n,r,t,"caption",function(e,t,n){return W(e)}),ee(n,r,t,"src",F),ee(n,r,t,"alt",F),ee(n,r,t,"title",F),ee(n,r,t,"width",V(0,e)),ee(n,r,t,"height",V(0,e)),ee(n,r,t,"class",F),ee(n,r,t,"style",te(function(e,t){return F(e,"style",t)},e)),ee(n,r,t,"hspace",te($,e)),ee(n,r,t,"vspace",te(X,e)),ee(n,r,t,"border",te(q,e)),ee(n,r,t,"borderStyle",te(K,e))},re=function(e,t){var n=e.dom.styles.parse(t),r=R(n),a=e.dom.styles.parse(e.dom.styles.serialize(r));return e.dom.styles.serialize(a)},ae=function(e){var t=e.selection.getNode(),n=e.dom.getParent(t,"figure.image");return n?e.dom.select("img",n)[0]:t&&("IMG"!==t.nodeName||t.getAttribute("data-mce-object")||t.getAttribute("data-mce-placeholder"))?null:t},oe=function(t,e){var n=t.dom,r=n.getParent(e.parentNode,function(e){return t.schema.getTextBlockElements()[e.nodeName]});return r?n.split(r,e):e},ie=function(t){var e=ae(t);return e?Z(function(e){return re(t,e)},e):{src:"",alt:"",title:"",width:"",height:"","class":"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:""}},le=function(t,e){var n=function(e,t){var n=document.createElement("img");if(ne(e,E(t,{caption:!1}),n),F(n,"alt",t.alt),t.caption){var r=k.create("figure",{"class":"image"});return r.appendChild(n),r.appendChild(k.create("figcaption",{contentEditable:!0},"Caption")),r.contentEditable="false",r}return n}(function(e){return re(t,e)},e);t.dom.setAttrib(n,"data-mce-id","__mcenew"),t.focus(),t.selection.setContent(n.outerHTML);var r=t.dom.select('*[data-mce-id="__mcenew"]')[0];if(t.dom.setAttrib(r,"data-mce-id",null),Q(r)){var a=oe(t,r);t.selection.select(a)}else t.selection.select(r)},ue=function(e,t){var n=ae(e);n?t.src?function(t,e){var n,r=ae(t);if(ne(function(e){return re(t,e)},e,r),n=r,t.dom.setAttrib(n,"src",n.getAttribute("src")),Q(r.parentNode)){var a=r.parentNode;oe(t,a),t.selection.select(r.parentNode)}else t.selection.select(r),O(t,e,r)}(e,t):function(e,t){if(t){var n=e.dom.is(t.parentNode,"figure.image")?t.parentNode:t;e.dom.remove(n),e.focus(),e.nodeChanged(),e.dom.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}}(e,n):t.src&&le(e,t)},ce=function(n,r){r.find("#style").each(function(e){var t=Y(function(e){return re(n,e)},E({src:"",alt:"",title:"",width:"",height:"","class":"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:""},r.toJSON()));e.value(t)})},se=function(t){return{title:"Advanced",type:"form",pack:"start",items:[{label:"Style",name:"style",type:"textbox",onchange:(o=t,function(e){var t=o.dom,n=e.control.rootControl;if(i(o)){var r=n.toJSON(),a=t.parseStyle(r.style);n.find("#vspace").value(""),n.find("#hspace").value(""),((a=R(a))["margin-top"]&&a["margin-bottom"]||a["margin-right"]&&a["margin-left"])&&(a["margin-top"]===a["margin-bottom"]?n.find("#vspace").value(A(a["margin-top"])):n.find("#vspace").value(""),a["margin-right"]===a["margin-left"]?n.find("#hspace").value(A(a["margin-right"])):n.find("#hspace").value("")),a["border-width"]?n.find("#border").value(A(a["border-width"])):n.find("#border").value(""),a["border-style"]?n.find("#borderStyle").value(a["border-style"]):n.find("#borderStyle").value(""),n.find("#style").value(t.serializeStyle(t.parseStyle(t.serializeStyle(a))))}})},{type:"form",layout:"grid",packV:"start",columns:2,padding:0,defaults:{type:"textbox",maxWidth:50,onchange:function(e){ce(t,e.control.rootControl)}},items:[{label:"Vertical space",name:"vspace"},{label:"Border width",name:"border"},{label:"Horizontal space",name:"hspace"},{label:"Border style",type:"listbox",name:"borderStyle",width:90,maxWidth:90,onselect:function(e){ce(t,e.control.rootControl)},values:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]};var o},de=function(e,t){e.state.set("oldVal",e.value()),t.state.set("oldVal",t.value())},ge=function(e,t){var n=e.find("#width")[0],r=e.find("#height")[0],a=e.find("#constrain")[0];n&&r&&a&&t(n,r,a.checked())},me=function(e,t,n){var r=e.state.get("oldVal"),a=t.state.get("oldVal"),o=e.value(),i=t.value();n&&r&&a&&o&&i&&(o!==r?(i=Math.round(o/r*i),isNaN(i)||t.value(i)):(o=Math.round(i/a*o),isNaN(o)||e.value(o))),de(e,t)},fe=function(e){ge(e,me)},pe=function(){var e=function(e){fe(e.control.rootControl)};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:e,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}},he=function(e){ge(e,de)},ve=fe,be=function(e){e.meta=e.control.rootControl.toJSON()},ye=function(s,e){var t=[{name:"src",type:"filepicker",filetype:"image",label:"Source",autofocus:!0,onchange:function(e){var t,n,r,a,o,i,l,u,c;n=s,i=(t=e).meta||{},l=t.control,u=l.rootControl,(c=u.find("#image-list")[0])&&c.value(n.convertURL(l.value(),"src")),w.each(i,function(e,t){u.find("#"+t).value(e)}),i.width||i.height||(r=n.convertURL(l.value(),"src"),a=g(n),o=new RegExp("^(?:[a-z]+:)?//","i"),a&&!o.test(r)&&r.substring(0,a.length)!==a&&(r=a+r),l.value(r),N(n.documentBaseURI.toAbsolute(l.value()),function(e){e.width&&e.height&&d(n)&&(u.find("#width").value(e.width),u.find("#height").value(e.height),he(u))}))},onbeforecall:be},e];return r(s)&&t.push({name:"alt",type:"textbox",label:"Image description"}),a(s)&&t.push({name:"title",type:"textbox",label:"Image Title"}),d(s)&&t.push(pe()),n(s)&&t.push({name:"class",type:"listbox",label:"Class",values:_(n(s),function(e){e.value&&(e.textStyle=function(){return s.formatter.getCssText({inline:"img",classes:[e.value]})})})}),o(s)&&t.push({name:"caption",type:"checkbox",label:"Caption"}),t},xe=function(e,t){return{title:"General",type:"form",items:ye(e,t)}},we=ye,Ce=function(){return t.getOrDie("URL")},Se=function(e){return Ce().createObjectURL(e)},Ne=function(e){Ce().revokeObjectURL(e)},_e=tinymce.util.Tools.resolve("tinymce.ui.Factory");function Ae(){return new(t.getOrDie("XMLHttpRequest"))}var Te=function(){};function Re(i){var t=function(e,r,a,t){var o,n;(o=new Ae).open("POST",i.url),o.withCredentials=i.credentials,o.upload.onprogress=function(e){t(e.loaded/e.total*100)},o.onerror=function(){a("Image upload failed due to a XHR Transport error. Code: "+o.status)},o.onload=function(){var e,t,n;o.status<200||300<=o.status?a("HTTP Error: "+o.status):(e=JSON.parse(o.responseText))&&"string"==typeof e.location?r((t=i.basePath,n=e.location,t?t.replace(/\/$/,"")+"/"+n.replace(/^\//,""):n)):a("Invalid JSON: "+o.responseText)},(n=new FormData).append("file",e.blob(),e.filename()),o.send(n)};return i=w.extend({credentials:!1,handler:t},i),{upload:function(e){return i.url||i.handler!==t?(r=e,a=i.handler,new x(function(e,t){try{a(r,e,t,Te)}catch(n){t(n.message)}})):x.reject("Upload url missing from the settings.");var r,a}}}var Ie=function(u){return function(e){var t=_e.get("Throbber"),n=e.control.rootControl,r=new t(n.getEl()),a=e.control.value(),o=Se(a),i=Re({url:s(u),basePath:f(u),credentials:p(u),handler:m(u)}),l=function(){r.hide(),Ne(o)};return r.show(),L(a).then(function(e){var t=u.editorUpload.blobCache.create({blob:a,blobUri:o,name:a.name?a.name.replace(/\.[^\.]+$/,""):null,base64:e.split(",")[1]});return i.upload(t).then(function(e){var t=n.find("#src");return t.value(e),n.find("tabpanel")[0].activateTab(0),t.fire("change"),l(),e})})["catch"](function(e){u.windowManager.alert(e),l()})}},Oe=".jpg,.jpeg,.png,.gif",Le=function(e){return{title:"Upload",type:"form",layout:"flex",direction:"column",align:"stretch",padding:"20 20 20 20",items:[{type:"container",layout:"flex",direction:"column",align:"center",spacing:10,items:[{text:"Browse for an image",type:"browsebutton",accept:Oe,onchange:Ie(e)},{text:"OR",type:"label"}]},{text:"Drop an image here",type:"dropzone",accept:Oe,height:100,onchange:Ie(e)}]}},Pe=function(o){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var i=new Array(arguments.length-1),n=1;n<arguments.length;n++)i[n-1]=arguments[n];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];var a=i.concat(n);return o.apply(null,a)}},Ue=function(t,e){var n=e.control.getRoot();ve(n),t.undoManager.transact(function(){var e=E(ie(t),n.toJSON());ue(t,e)}),t.editorUpload.uploadImagesAuto()};function Ee(o){function e(e){var n,t,r=ie(o);if(e&&(t={type:"listbox",label:"Image list",name:"image-list",values:_(e,function(e){e.value=o.convertURL(e.value||e.url,"src")},[{text:"None",value:""}]),value:r.src&&o.convertURL(r.src,"src"),onselect:function(e){var t=n.find("#alt");(!t.value()||e.lastControl&&t.value()===e.lastControl.text())&&t.value(e.control.text()),n.find("#src").value(e.control.value()).fire("change")},onPostRender:function(){t=this}}),i(o)||u(o)||c(o)){var a=[xe(o,t)];i(o)&&a.push(se(o)),(u(o)||c(o))&&a.push(Le(o)),n=o.windowManager.open({title:"Insert/edit image",data:r,bodyType:"tabpanel",body:a,onSubmit:Pe(Ue,o)})}else n=o.windowManager.open({title:"Insert/edit image",data:r,body:we(o,t),onSubmit:Pe(Ue,o)});he(n)}return{open:function(){I(o,e)}}}var ke=function(e){e.addCommand("mceImage",Ee(e).open)},Me=function(o){return function(e){for(var t,n,r=e.length,a=function(e){e.attr("contenteditable",o?"true":null)};r--;)t=e[r],(n=t.attr("class"))&&/\bimage\b/.test(n)&&(t.attr("contenteditable",o?"false":null),w.each(t.getAll("figcaption"),a))}},De=function(e){e.on("preInit",function(){e.parser.addNodeFilter("figure",Me(!0)),e.serializer.addNodeFilter("figure",Me(!1))})},ze=function(e){e.addButton("image",{icon:"image",tooltip:"Insert/edit image",onclick:Ee(e).open,stateSelector:"img:not([data-mce-object],[data-mce-placeholder]),figure.image"}),e.addMenuItem("image",{icon:"image",text:"Image",onclick:Ee(e).open,context:"insert",prependToContext:!0})};e.add("image",function(e){De(e),ze(e),ke(e)})}();
\ No newline at end of file
(function () {
+var link = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
+ var global$1 = tinymce.util.Tools.resolve('tinymce.util.VK');
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
+ var assumeExternalTargets = function (editorSettings) {
+ return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false;
+ };
+ var hasContextToolbar = function (editorSettings) {
+ return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false;
+ };
+ var getLinkList = function (editorSettings) {
+ return editorSettings.link_list;
+ };
+ var hasDefaultLinkTarget = function (editorSettings) {
+ return typeof editorSettings.default_link_target === 'string';
+ };
+ var getDefaultLinkTarget = function (editorSettings) {
+ return editorSettings.default_link_target;
+ };
+ var getTargetList = function (editorSettings) {
+ return editorSettings.target_list;
+ };
+ var setTargetList = function (editor, list) {
+ editor.settings.target_list = list;
+ };
+ var shouldShowTargetList = function (editorSettings) {
+ return getTargetList(editorSettings) !== false;
+ };
+ var getRelList = function (editorSettings) {
+ return editorSettings.rel_list;
+ };
+ var hasRelList = function (editorSettings) {
+ return getRelList(editorSettings) !== undefined;
+ };
+ var getLinkClassList = function (editorSettings) {
+ return editorSettings.link_class_list;
+ };
+ var hasLinkClassList = function (editorSettings) {
+ return getLinkClassList(editorSettings) !== undefined;
+ };
+ var shouldShowLinkTitle = function (editorSettings) {
+ return editorSettings.link_title !== false;
+ };
+ var allowUnsafeLinkTarget = function (editorSettings) {
+ return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false;
+ };
+ var $_1b4wbxfvjjgwechi = {
+ assumeExternalTargets: assumeExternalTargets,
+ hasContextToolbar: hasContextToolbar,
+ getLinkList: getLinkList,
+ hasDefaultLinkTarget: hasDefaultLinkTarget,
+ getDefaultLinkTarget: getDefaultLinkTarget,
+ getTargetList: getTargetList,
+ setTargetList: setTargetList,
+ shouldShowTargetList: shouldShowTargetList,
+ getRelList: getRelList,
+ hasRelList: hasRelList,
+ getLinkClassList: getLinkClassList,
+ hasLinkClassList: hasLinkClassList,
+ shouldShowLinkTitle: shouldShowLinkTitle,
+ allowUnsafeLinkTarget: allowUnsafeLinkTarget
};
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.link.Plugin","tinymce.core.PluginManager","tinymce.plugins.link.core.Actions","tinymce.plugins.link.ui.Controls","global!tinymce.util.Tools.resolve","tinymce.core.util.VK","tinymce.plugins.link.ui.Dialog","tinymce.plugins.link.core.OpenUrl","tinymce.plugins.link.core.Utils","tinymce.plugins.link.core.Settings","tinymce.core.util.Delay","tinymce.core.util.Tools","tinymce.core.util.XHR","global!RegExp","tinymce.core.dom.DOMUtils","tinymce.core.Env"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.VK',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.VK');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Delay',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Delay');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.XHR',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.XHR');
- }
-);
-
-define(
- 'tinymce.plugins.link.core.Settings',
- [
-
- ],
- function () {
- var assumeExternalTargets = function (editorSettings) {
- return typeof editorSettings.link_assume_external_targets === 'boolean' ? editorSettings.link_assume_external_targets : false;
- };
-
- var hasContextToolbar = function (editorSettings) {
- return typeof editorSettings.link_context_toolbar === 'boolean' ? editorSettings.link_context_toolbar : false;
- };
-
- var getLinkList = function (editorSettings) {
- return editorSettings.link_list;
- };
-
- var hasDefaultLinkTarget = function (editorSettings) {
- return typeof editorSettings.default_link_target === 'string';
- };
-
- var getDefaultLinkTarget = function (editorSettings) {
- return editorSettings.default_link_target;
- };
-
- var getTargetList = function (editorSettings) {
- return editorSettings.target_list;
- };
-
- var setTargetList = function (editor, list) {
- editor.settings.target_list = list;
- };
-
- var shouldShowTargetList = function (editorSettings) {
- return getTargetList(editorSettings) !== false;
- };
-
- var getRelList = function (editorSettings) {
- return editorSettings.rel_list;
- };
-
- var hasRelList = function (editorSettings) {
- return getRelList(editorSettings) !== undefined;
- };
-
- var getLinkClassList = function (editorSettings) {
- return editorSettings.link_class_list;
- };
-
- var hasLinkClassList = function (editorSettings) {
- return getLinkClassList(editorSettings) !== undefined;
- };
-
- var shouldShowLinkTitle = function (editorSettings) {
- return editorSettings.link_title !== false;
- };
-
- var allowUnsafeLinkTarget = function (editorSettings) {
- return typeof editorSettings.allow_unsafe_link_target === 'boolean' ? editorSettings.allow_unsafe_link_target : false;
- };
-
- return {
- assumeExternalTargets: assumeExternalTargets,
- hasContextToolbar: hasContextToolbar,
- getLinkList: getLinkList,
- hasDefaultLinkTarget: hasDefaultLinkTarget,
- getDefaultLinkTarget: getDefaultLinkTarget,
- getTargetList: getTargetList,
- setTargetList: setTargetList,
- shouldShowTargetList: shouldShowTargetList,
- getRelList: getRelList,
- hasRelList: hasRelList,
- getLinkClassList: getLinkClassList,
- hasLinkClassList: hasLinkClassList,
- shouldShowLinkTitle: shouldShowLinkTitle,
- allowUnsafeLinkTarget: allowUnsafeLinkTarget
- };
- }
-);
-
-defineGlobal("global!RegExp", RegExp);
-/**
- * Utils.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.link.core.Utils',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.plugins.link.core.Settings',
- 'global!RegExp'
- ],
- function (Tools, Settings, RegExp) {
-
- var toggleTargetRules = function (rel, isUnsafe) {
- var rules = ['noopener'];
- var newRel = rel ? rel.split(/\s+/) : [];
-
- var toString = function (rel) {
- return Tools.trim(rel.sort().join(' '));
- };
-
- var addTargetRules = function (rel) {
- rel = removeTargetRules(rel);
- return rel.length ? rel.concat(rules) : rules;
- };
-
- var removeTargetRules = function (rel) {
- return rel.filter(function (val) {
- return Tools.inArray(rules, val) === -1;
- });
- };
-
- newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel);
- return newRel.length ? toString(newRel) : null;
- };
-
- var trimCaretContainers = function (text) {
- return text.replace(/\uFEFF/g, '');
- };
+ var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
+ var global$3 = tinymce.util.Tools.resolve('tinymce.Env');
- var getAnchorElement = function (editor, selectedElm) {
- selectedElm = selectedElm || editor.selection.getStart();
- if (isImageFigure(selectedElm)) {
- // for an image conained in a figure we look for a link inside the selected element
- return editor.dom.select('a[href]', selectedElm)[0];
- } else {
- return editor.dom.getParent(selectedElm, 'a[href]');
+ var appendClickRemove = function (link, evt) {
+ document.body.appendChild(link);
+ link.dispatchEvent(evt);
+ document.body.removeChild(link);
+ };
+ var open$$1 = function (url) {
+ if (!global$3.ie || global$3.ie > 10) {
+ var link = document.createElement('a');
+ link.target = '_blank';
+ link.href = url;
+ link.rel = 'noreferrer noopener';
+ var evt = document.createEvent('MouseEvents');
+ evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
+ appendClickRemove(link, evt);
+ } else {
+ var win = window.open('', '_blank');
+ if (win) {
+ win.opener = null;
+ var doc = win.document;
+ doc.open();
+ doc.write('<meta http-equiv="refresh" content="0; url=' + global$2.DOM.encode(url) + '">');
+ doc.close();
}
- };
-
-
- var getAnchorText = function (selection, anchorElm) {
- var text = anchorElm ? (anchorElm.innerText || anchorElm.textContent) : selection.getContent({ format: 'text' });
- return trimCaretContainers(text);
- };
-
+ }
+ };
+ var $_du0gebfwjjgwechl = { open: open$$1 };
- var isLink = function (elm) {
- return elm && elm.nodeName === 'A' && elm.href;
- };
+ var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
- var hasLinks = function (elements) {
- return Tools.grep(elements, isLink).length > 0;
+ var toggleTargetRules = function (rel, isUnsafe) {
+ var rules = ['noopener'];
+ var newRel = rel ? rel.split(/\s+/) : [];
+ var toString = function (rel) {
+ return global$4.trim(rel.sort().join(' '));
};
-
-
- var isOnlyTextSelected = function (html) {
- // Partial html and not a fully selected anchor element
- if (/</.test(html) && (!/^<a [^>]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') == -1)) {
- return false;
- }
-
- return true;
+ var addTargetRules = function (rel) {
+ rel = removeTargetRules(rel);
+ return rel.length ? rel.concat(rules) : rules;
};
-
-
- var isImageFigure = function (node) {
- return node && node.nodeName === 'FIGURE' && /\bimage\b/i.test(node.className);
+ var removeTargetRules = function (rel) {
+ return rel.filter(function (val) {
+ return global$4.inArray(rules, val) === -1;
+ });
};
-
-
- var link = function (editor, attachState) {
- return function (data) {
- editor.undoManager.transact(function () {
- var selectedElm = editor.selection.getNode();
- var anchorElm = getAnchorElement(editor, selectedElm);
-
- var linkAttrs = {
- href: data.href,
- target: data.target ? data.target : null,
- rel: data.rel ? data.rel : null,
- "class": data["class"] ? data["class"] : null,
- title: data.title ? data.title : null
- };
-
- if (!Settings.hasRelList(editor.settings) && Settings.allowUnsafeLinkTarget(editor.settings) === false) {
- linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target == '_blank');
- }
-
- if (data.href === attachState.href) {
- attachState.attach();
- attachState = {};
- }
-
- if (anchorElm) {
- editor.focus();
-
- if (data.hasOwnProperty('text')) {
- if ("innerText" in anchorElm) {
- anchorElm.innerText = data.text;
- } else {
- anchorElm.textContent = data.text;
- }
- }
-
- editor.dom.setAttribs(anchorElm, linkAttrs);
-
- editor.selection.select(anchorElm);
- editor.undoManager.add();
- } else {
- if (isImageFigure(selectedElm)) {
- linkImageFigure(editor, selectedElm, linkAttrs);
- } else if (data.hasOwnProperty('text')) {
- editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text)));
+ newRel = isUnsafe ? addTargetRules(newRel) : removeTargetRules(newRel);
+ return newRel.length ? toString(newRel) : null;
+ };
+ var trimCaretContainers = function (text) {
+ return text.replace(/\uFEFF/g, '');
+ };
+ var getAnchorElement = function (editor, selectedElm) {
+ selectedElm = selectedElm || editor.selection.getNode();
+ if (isImageFigure(selectedElm)) {
+ return editor.dom.select('a[href]', selectedElm)[0];
+ } else {
+ return editor.dom.getParent(selectedElm, 'a[href]');
+ }
+ };
+ var getAnchorText = function (selection, anchorElm) {
+ var text = anchorElm ? anchorElm.innerText || anchorElm.textContent : selection.getContent({ format: 'text' });
+ return trimCaretContainers(text);
+ };
+ var isLink = function (elm) {
+ return elm && elm.nodeName === 'A' && elm.href;
+ };
+ var hasLinks = function (elements) {
+ return global$4.grep(elements, isLink).length > 0;
+ };
+ var isOnlyTextSelected = function (html) {
+ if (/</.test(html) && (!/^<a [^>]+>[^<]+<\/a>$/.test(html) || html.indexOf('href=') === -1)) {
+ return false;
+ }
+ return true;
+ };
+ var isImageFigure = function (node) {
+ return node && node.nodeName === 'FIGURE' && /\bimage\b/i.test(node.className);
+ };
+ var link = function (editor, attachState) {
+ return function (data) {
+ editor.undoManager.transact(function () {
+ var selectedElm = editor.selection.getNode();
+ var anchorElm = getAnchorElement(editor, selectedElm);
+ var linkAttrs = {
+ href: data.href,
+ target: data.target ? data.target : null,
+ rel: data.rel ? data.rel : null,
+ class: data.class ? data.class : null,
+ title: data.title ? data.title : null
+ };
+ if (!$_1b4wbxfvjjgwechi.hasRelList(editor.settings) && $_1b4wbxfvjjgwechi.allowUnsafeLinkTarget(editor.settings) === false) {
+ linkAttrs.rel = toggleTargetRules(linkAttrs.rel, linkAttrs.target === '_blank');
+ }
+ if (data.href === attachState.href) {
+ attachState.attach();
+ attachState = {};
+ }
+ if (anchorElm) {
+ editor.focus();
+ if (data.hasOwnProperty('text')) {
+ if ('innerText' in anchorElm) {
+ anchorElm.innerText = data.text;
} else {
- editor.execCommand('mceInsertLink', false, linkAttrs);
+ anchorElm.textContent = data.text;
}
}
- });
- };
- };
-
-
- var unlink = function (editor) {
- return function () {
- editor.undoManager.transact(function () {
- var node = editor.selection.getNode();
- if (isImageFigure(node)) {
- unlinkImageFigure(editor, node);
+ editor.dom.setAttribs(anchorElm, linkAttrs);
+ editor.selection.select(anchorElm);
+ editor.undoManager.add();
+ } else {
+ if (isImageFigure(selectedElm)) {
+ linkImageFigure(editor, selectedElm, linkAttrs);
+ } else if (data.hasOwnProperty('text')) {
+ editor.insertContent(editor.dom.createHTML('a', linkAttrs, editor.dom.encode(data.text)));
} else {
- editor.execCommand('unlink');
+ editor.execCommand('mceInsertLink', false, linkAttrs);
}
- });
- };
+ }
+ });
};
-
-
- var unlinkImageFigure = function (editor, fig) {
- var a, img;
- img = editor.dom.select('img', fig)[0];
- if (img) {
- a = editor.dom.getParents(img, 'a[href]', fig)[0];
- if (a) {
- a.parentNode.insertBefore(img, a);
- editor.dom.remove(a);
+ };
+ var unlink = function (editor) {
+ return function () {
+ editor.undoManager.transact(function () {
+ var node = editor.selection.getNode();
+ if (isImageFigure(node)) {
+ unlinkImageFigure(editor, node);
+ } else {
+ editor.execCommand('unlink');
}
- }
+ });
};
-
-
- var linkImageFigure = function (editor, fig, attrs) {
- var a, img;
- img = editor.dom.select('img', fig)[0];
- if (img) {
- a = editor.dom.create('a', attrs);
- img.parentNode.insertBefore(a, img);
- a.appendChild(img);
+ };
+ var unlinkImageFigure = function (editor, fig) {
+ var a, img;
+ img = editor.dom.select('img', fig)[0];
+ if (img) {
+ a = editor.dom.getParents(img, 'a[href]', fig)[0];
+ if (a) {
+ a.parentNode.insertBefore(img, a);
+ editor.dom.remove(a);
}
- };
-
- return {
- link: link,
- unlink: unlink,
- isLink: isLink,
- hasLinks: hasLinks,
- isOnlyTextSelected: isOnlyTextSelected,
- getAnchorElement: getAnchorElement,
- getAnchorText: getAnchorText,
- toggleTargetRules: toggleTargetRules
- };
- }
-);
-/**
- * Dialog.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ }
+ };
+ var linkImageFigure = function (editor, fig, attrs) {
+ var a, img;
+ img = editor.dom.select('img', fig)[0];
+ if (img) {
+ a = editor.dom.create('a', attrs);
+ img.parentNode.insertBefore(a, img);
+ a.appendChild(img);
+ }
+ };
+ var $_5298ug0jjgweci0 = {
+ link: link,
+ unlink: unlink,
+ isLink: isLink,
+ hasLinks: hasLinks,
+ isOnlyTextSelected: isOnlyTextSelected,
+ getAnchorElement: getAnchorElement,
+ getAnchorText: getAnchorText,
+ toggleTargetRules: toggleTargetRules
+ };
-define(
- 'tinymce.plugins.link.ui.Dialog',
- [
- 'tinymce.core.util.Delay',
- 'tinymce.core.util.Tools',
- 'tinymce.core.util.XHR',
- 'tinymce.plugins.link.core.Utils',
- 'tinymce.plugins.link.core.Settings'
- ],
- function (Delay, Tools, XHR, Utils, Settings) {
- var attachState = {};
+ var global$5 = tinymce.util.Tools.resolve('tinymce.util.Delay');
- var createLinkList = function (editor, callback) {
- var linkList = Settings.getLinkList(editor.settings);
+ var global$6 = tinymce.util.Tools.resolve('tinymce.util.XHR');
- if (typeof linkList == "string") {
- XHR.send({
- url: linkList,
- success: function (text) {
- callback(editor, JSON.parse(text));
+ var attachState = {};
+ var createLinkList = function (editor, callback) {
+ var linkList = $_1b4wbxfvjjgwechi.getLinkList(editor.settings);
+ if (typeof linkList === 'string') {
+ global$6.send({
+ url: linkList,
+ success: function (text) {
+ callback(editor, JSON.parse(text));
+ }
+ });
+ } else if (typeof linkList === 'function') {
+ linkList(function (list) {
+ callback(editor, list);
+ });
+ } else {
+ callback(editor, linkList);
+ }
+ };
+ var buildListItems = function (inputList, itemCallback, startItems) {
+ var appendItems = function (values, output) {
+ output = output || [];
+ global$4.each(values, function (item) {
+ var menuItem = { text: item.text || item.title };
+ if (item.menu) {
+ menuItem.menu = appendItems(item.menu);
+ } else {
+ menuItem.value = item.value;
+ if (itemCallback) {
+ itemCallback(menuItem);
}
+ }
+ output.push(menuItem);
+ });
+ return output;
+ };
+ return appendItems(inputList, startItems || []);
+ };
+ var delayedConfirm = function (editor, message, callback) {
+ var rng = editor.selection.getRng();
+ global$5.setEditorTimeout(editor, function () {
+ editor.windowManager.confirm(message, function (state) {
+ editor.selection.setRng(rng);
+ callback(state);
+ });
+ });
+ };
+ var showDialog = function (editor, linkList) {
+ var data = {};
+ var selection = editor.selection;
+ var dom = editor.dom;
+ var anchorElm, initialText;
+ var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value;
+ var linkListChangeHandler = function (e) {
+ var textCtrl = win.find('#text');
+ if (!textCtrl.value() || e.lastControl && textCtrl.value() === e.lastControl.text()) {
+ textCtrl.value(e.control.text());
+ }
+ win.find('#href').value(e.control.value());
+ };
+ var buildAnchorListControl = function (url) {
+ var anchorList = [];
+ global$4.each(editor.dom.select('a:not([href])'), function (anchor) {
+ var id = anchor.name || anchor.id;
+ if (id) {
+ anchorList.push({
+ text: id,
+ value: '#' + id,
+ selected: url.indexOf('#' + id) !== -1
+ });
+ }
+ });
+ if (anchorList.length) {
+ anchorList.unshift({
+ text: 'None',
+ value: ''
});
- } else if (typeof linkList == "function") {
- linkList(function (list) {
- callback(editor, list);
- });
- } else {
- callback(editor, linkList);
+ return {
+ name: 'anchor',
+ type: 'listbox',
+ label: 'Anchors',
+ values: anchorList,
+ onselect: linkListChangeHandler
+ };
}
};
-
- var buildListItems = function (inputList, itemCallback, startItems) {
- var appendItems = function (values, output) {
- output = output || [];
-
- Tools.each(values, function (item) {
- var menuItem = { text: item.text || item.title };
-
- if (item.menu) {
- menuItem.menu = appendItems(item.menu);
- } else {
- menuItem.value = item.value;
-
- if (itemCallback) {
- itemCallback(menuItem);
- }
- }
-
- output.push(menuItem);
- });
-
- return output;
- };
-
- return appendItems(inputList, startItems || []);
+ var updateText = function () {
+ if (!initialText && onlyText && !data.text) {
+ this.parent().parent().find('#text')[0].value(this.value());
+ }
};
-
- // Delay confirm since onSubmit will move focus
- var delayedConfirm = function (editor, message, callback) {
- var rng = editor.selection.getRng();
-
- Delay.setEditorTimeout(editor, function () {
- editor.windowManager.confirm(message, function (state) {
- editor.selection.setRng(rng);
- callback(state);
- });
+ var urlChange = function (e) {
+ var meta = e.meta || {};
+ if (linkListCtrl) {
+ linkListCtrl.value(editor.convertURL(this.value(), 'href'));
+ }
+ global$4.each(e.meta, function (value, key) {
+ var inp = win.find('#' + key);
+ if (key === 'text') {
+ if (initialText.length === 0) {
+ inp.value(value);
+ data.text = value;
+ }
+ } else {
+ inp.value(value);
+ }
});
+ if (meta.attach) {
+ attachState = {
+ href: this.value(),
+ attach: meta.attach
+ };
+ }
+ if (!meta.text) {
+ updateText.call(this);
+ }
};
-
- var showDialog = function (editor, linkList) {
- var data = {}, selection = editor.selection, dom = editor.dom, anchorElm, initialText;
- var win, onlyText, textListCtrl, linkListCtrl, relListCtrl, targetListCtrl, classListCtrl, linkTitleCtrl, value;
-
- var linkListChangeHandler = function (e) {
- var textCtrl = win.find('#text');
-
- if (!textCtrl.value() || (e.lastControl && textCtrl.value() == e.lastControl.text())) {
- textCtrl.value(e.control.text());
+ var onBeforeCall = function (e) {
+ e.meta = win.toJSON();
+ };
+ onlyText = $_5298ug0jjgweci0.isOnlyTextSelected(selection.getContent());
+ anchorElm = $_5298ug0jjgweci0.getAnchorElement(editor);
+ data.text = initialText = $_5298ug0jjgweci0.getAnchorText(editor.selection, anchorElm);
+ data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : '';
+ if (anchorElm) {
+ data.target = dom.getAttrib(anchorElm, 'target');
+ } else if ($_1b4wbxfvjjgwechi.hasDefaultLinkTarget(editor.settings)) {
+ data.target = $_1b4wbxfvjjgwechi.getDefaultLinkTarget(editor.settings);
+ }
+ if (value = dom.getAttrib(anchorElm, 'rel')) {
+ data.rel = value;
+ }
+ if (value = dom.getAttrib(anchorElm, 'class')) {
+ data.class = value;
+ }
+ if (value = dom.getAttrib(anchorElm, 'title')) {
+ data.title = value;
+ }
+ if (onlyText) {
+ textListCtrl = {
+ name: 'text',
+ type: 'textbox',
+ size: 40,
+ label: 'Text to display',
+ onchange: function () {
+ data.text = this.value();
}
-
- win.find('#href').value(e.control.value());
};
-
- var buildAnchorListControl = function (url) {
- var anchorList = [];
-
- Tools.each(editor.dom.select('a:not([href])'), function (anchor) {
- var id = anchor.name || anchor.id;
-
- if (id) {
- anchorList.push({
- text: id,
- value: '#' + id,
- selected: url.indexOf('#' + id) != -1
- });
- }
- });
-
- if (anchorList.length) {
- anchorList.unshift({ text: 'None', value: '' });
-
- return {
- name: 'anchor',
- type: 'listbox',
- label: 'Anchors',
- values: anchorList,
- onselect: linkListChangeHandler
- };
+ }
+ if (linkList) {
+ linkListCtrl = {
+ type: 'listbox',
+ label: 'Link list',
+ values: buildListItems(linkList, function (item) {
+ item.value = editor.convertURL(item.value || item.url, 'href');
+ }, [{
+ text: 'None',
+ value: ''
+ }]),
+ onselect: linkListChangeHandler,
+ value: editor.convertURL(data.href, 'href'),
+ onPostRender: function () {
+ linkListCtrl = this;
}
};
-
- var updateText = function () {
- if (!initialText && onlyText && !data.text) {
- this.parent().parent().find('#text')[0].value(this.value());
- }
+ }
+ if ($_1b4wbxfvjjgwechi.shouldShowTargetList(editor.settings)) {
+ if ($_1b4wbxfvjjgwechi.getTargetList(editor.settings) === undefined) {
+ $_1b4wbxfvjjgwechi.setTargetList(editor, [
+ {
+ text: 'None',
+ value: ''
+ },
+ {
+ text: 'New window',
+ value: '_blank'
+ }
+ ]);
+ }
+ targetListCtrl = {
+ name: 'target',
+ type: 'listbox',
+ label: 'Target',
+ values: buildListItems($_1b4wbxfvjjgwechi.getTargetList(editor.settings))
};
-
- var urlChange = function (e) {
- var meta = e.meta || {};
-
- if (linkListCtrl) {
- linkListCtrl.value(editor.convertURL(this.value(), 'href'));
- }
-
- Tools.each(e.meta, function (value, key) {
- var inp = win.find('#' + key);
-
- if (key === 'text') {
- if (initialText.length === 0) {
- inp.value(value);
- data.text = value;
- }
- } else {
- inp.value(value);
+ }
+ if ($_1b4wbxfvjjgwechi.hasRelList(editor.settings)) {
+ relListCtrl = {
+ name: 'rel',
+ type: 'listbox',
+ label: 'Rel',
+ values: buildListItems($_1b4wbxfvjjgwechi.getRelList(editor.settings), function (item) {
+ if ($_1b4wbxfvjjgwechi.allowUnsafeLinkTarget(editor.settings) === false) {
+ item.value = $_5298ug0jjgweci0.toggleTargetRules(item.value, data.target === '_blank');
}
- });
-
- if (meta.attach) {
- attachState = {
- href: this.value(),
- attach: meta.attach
- };
- }
-
- if (!meta.text) {
- updateText.call(this);
- }
+ })
};
-
- var onBeforeCall = function (e) {
- e.meta = win.toJSON();
+ }
+ if ($_1b4wbxfvjjgwechi.hasLinkClassList(editor.settings)) {
+ classListCtrl = {
+ name: 'class',
+ type: 'listbox',
+ label: 'Class',
+ values: buildListItems($_1b4wbxfvjjgwechi.getLinkClassList(editor.settings), function (item) {
+ if (item.value) {
+ item.textStyle = function () {
+ return editor.formatter.getCssText({
+ inline: 'a',
+ classes: [item.value]
+ });
+ };
+ }
+ })
};
-
- onlyText = Utils.isOnlyTextSelected(selection.getContent());
- anchorElm = Utils.getAnchorElement(editor);
-
- data.text = initialText = Utils.getAnchorText(editor.selection, anchorElm);
- data.href = anchorElm ? dom.getAttrib(anchorElm, 'href') : '';
-
- if (anchorElm) {
- data.target = dom.getAttrib(anchorElm, 'target');
- } else if (Settings.hasDefaultLinkTarget(editor.settings)) {
- data.target = Settings.getDefaultLinkTarget(editor.settings);
- }
-
- if ((value = dom.getAttrib(anchorElm, 'rel'))) {
- data.rel = value;
- }
-
- if ((value = dom.getAttrib(anchorElm, 'class'))) {
- data['class'] = value;
- }
-
- if ((value = dom.getAttrib(anchorElm, 'title'))) {
- data.title = value;
- }
-
- if (onlyText) {
- textListCtrl = {
- name: 'text',
- type: 'textbox',
+ }
+ if ($_1b4wbxfvjjgwechi.shouldShowLinkTitle(editor.settings)) {
+ linkTitleCtrl = {
+ name: 'title',
+ type: 'textbox',
+ label: 'Title',
+ value: data.title
+ };
+ }
+ win = editor.windowManager.open({
+ title: 'Insert link',
+ data: data,
+ body: [
+ {
+ name: 'href',
+ type: 'filepicker',
+ filetype: 'file',
size: 40,
- label: 'Text to display',
- onchange: function () {
- data.text = this.value();
- }
- };
- }
-
- if (linkList) {
- linkListCtrl = {
- type: 'listbox',
- label: 'Link list',
- values: buildListItems(
- linkList,
- function (item) {
- item.value = editor.convertURL(item.value || item.url, 'href');
- },
- [{ text: 'None', value: '' }]
- ),
- onselect: linkListChangeHandler,
- value: editor.convertURL(data.href, 'href'),
- onPostRender: function () {
- /*eslint consistent-this:0*/
- linkListCtrl = this;
- }
- };
- }
-
- if (Settings.shouldShowTargetList(editor.settings)) {
- if (Settings.getTargetList(editor.settings) === undefined) {
- Settings.setTargetList(editor, [
- { text: 'None', value: '' },
- { text: 'New window', value: '_blank' }
- ]);
+ autofocus: true,
+ label: 'Url',
+ onchange: urlChange,
+ onkeyup: updateText,
+ onpaste: updateText,
+ onbeforecall: onBeforeCall
+ },
+ textListCtrl,
+ linkTitleCtrl,
+ buildAnchorListControl(data.href),
+ linkListCtrl,
+ relListCtrl,
+ targetListCtrl,
+ classListCtrl
+ ],
+ onSubmit: function (e) {
+ var assumeExternalTargets = $_1b4wbxfvjjgwechi.assumeExternalTargets(editor.settings);
+ var insertLink = $_5298ug0jjgweci0.link(editor, attachState);
+ var removeLink = $_5298ug0jjgweci0.unlink(editor);
+ var resultData = global$4.extend({}, data, e.data);
+ var href = resultData.href;
+ if (!href) {
+ removeLink();
+ return;
}
-
- targetListCtrl = {
- name: 'target',
- type: 'listbox',
- label: 'Target',
- values: buildListItems(Settings.getTargetList(editor.settings))
- };
- }
-
- if (Settings.hasRelList(editor.settings)) {
- relListCtrl = {
- name: 'rel',
- type: 'listbox',
- label: 'Rel',
- values: buildListItems(
- Settings.getRelList(editor.settings),
- function (item) {
- if (Settings.allowUnsafeLinkTarget(editor.settings) === false) {
- item.value = Utils.toggleTargetRules(item.value, data.target === '_blank');
- }
+ if (!onlyText || resultData.text === initialText) {
+ delete resultData.text;
+ }
+ if (href.indexOf('@') > 0 && href.indexOf('//') === -1 && href.indexOf('mailto:') === -1) {
+ delayedConfirm(editor, 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?', function (state) {
+ if (state) {
+ resultData.href = 'mailto:' + href;
}
- )
- };
- }
-
- if (Settings.hasLinkClassList(editor.settings)) {
- classListCtrl = {
- name: 'class',
- type: 'listbox',
- label: 'Class',
- values: buildListItems(
- Settings.getLinkClassList(editor.settings),
- function (item) {
- if (item.value) {
- item.textStyle = function () {
- return editor.formatter.getCssText({ inline: 'a', classes: [item.value] });
- };
- }
+ insertLink(resultData);
+ });
+ return;
+ }
+ if (assumeExternalTargets === true && !/^\w+:/i.test(href) || assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(href)) {
+ delayedConfirm(editor, 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (state) {
+ if (state) {
+ resultData.href = 'http://' + href;
}
- )
- };
- }
-
- if (Settings.shouldShowLinkTitle(editor.settings)) {
- linkTitleCtrl = {
- name: 'title',
- type: 'textbox',
- label: 'Title',
- value: data.title
- };
+ insertLink(resultData);
+ });
+ return;
+ }
+ insertLink(resultData);
}
+ });
+ };
+ var open$1 = function (editor) {
+ createLinkList(editor, showDialog);
+ };
+ var $_dxaplrg2jjgweci6 = { open: open$1 };
- win = editor.windowManager.open({
- title: 'Insert link',
- data: data,
- body: [
- {
- name: 'href',
- type: 'filepicker',
- filetype: 'file',
- size: 40,
- autofocus: true,
- label: 'Url',
- onchange: urlChange,
- onkeyup: updateText,
- onbeforecall: onBeforeCall
- },
- textListCtrl,
- linkTitleCtrl,
- buildAnchorListControl(data.href),
- linkListCtrl,
- relListCtrl,
- targetListCtrl,
- classListCtrl
- ],
- onSubmit: function (e) {
- var assumeExternalTargets = Settings.assumeExternalTargets(editor.settings);
- var insertLink = Utils.link(editor, attachState);
- var removeLink = Utils.unlink(editor);
-
- var resultData = Tools.extend({}, data, e.data);
- /*eslint dot-notation: 0*/
- var href = resultData.href;
-
- if (!href) {
- removeLink();
- return;
- }
-
- if (!onlyText || resultData.text === initialText) {
- delete resultData.text;
- }
-
- // Is email and not //user@domain.com
- if (href.indexOf('@') > 0 && href.indexOf('//') == -1 && href.indexOf('mailto:') == -1) {
- delayedConfirm(
- editor,
- 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?',
- function (state) {
- if (state) {
- resultData.href = 'mailto:' + href;
- }
- insertLink(resultData);
- }
- );
- return;
- }
-
- // Is not protocol prefixed
- if ((assumeExternalTargets === true && !/^\w+:/i.test(href)) ||
- (assumeExternalTargets === false && /^\s*www[\.|\d\.]/i.test(href))) {
- delayedConfirm(
- editor,
- 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?',
- function (state) {
- if (state) {
- resultData.href = 'http://' + href;
- }
- insertLink(resultData);
- }
- );
- return;
- }
-
- insertLink(resultData);
+ var getLink = function (editor, elm) {
+ return editor.dom.getParent(elm, 'a[href]');
+ };
+ var getSelectedLink = function (editor) {
+ return getLink(editor, editor.selection.getStart());
+ };
+ var getHref = function (elm) {
+ var href = elm.getAttribute('data-mce-href');
+ return href ? href : elm.getAttribute('href');
+ };
+ var isContextMenuVisible = function (editor) {
+ var contextmenu = editor.plugins.contextmenu;
+ return contextmenu ? contextmenu.isContextMenuVisible() : false;
+ };
+ var hasOnlyAltModifier = function (e) {
+ return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;
+ };
+ var gotoLink = function (editor, a) {
+ if (a) {
+ var href = getHref(a);
+ if (/^#/.test(href)) {
+ var targetEl = editor.$(href);
+ if (targetEl.length) {
+ editor.selection.scrollIntoView(targetEl[0], true);
}
- });
- };
-
- var open = function (editor) {
- createLinkList(editor, showDialog);
- };
-
- return {
- open: open
- };
- }
-);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.DOMUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.DOMUtils');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.Env',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.Env');
- }
-);
-
-/**
- * OpenUrl.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.link.core.OpenUrl',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.core.Env'
- ],
- function (DOMUtils, Env) {
- var appendClickRemove = function (link, evt) {
- document.body.appendChild(link);
- link.dispatchEvent(evt);
- document.body.removeChild(link);
- };
-
- var open = function (url) {
- // Chrome and Webkit has implemented noopener and works correctly with/without popup blocker
- // Firefox has it implemented noopener but when the popup blocker is activated it doesn't work
- // Edge has only implemented noreferrer and it seems to remove opener as well
- // Older IE versions pre IE 11 falls back to a window.open approach
- if (!Env.ie || Env.ie > 10) {
- var link = document.createElement('a');
- link.target = '_blank';
- link.href = url;
- link.rel = 'noreferrer noopener';
-
- var evt = document.createEvent('MouseEvents');
- evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
-
- appendClickRemove(link, evt);
} else {
- var win = window.open('', '_blank');
- if (win) {
- win.opener = null;
- var doc = win.document;
- doc.open();
- doc.write('<meta http-equiv="refresh" content="0; url=' + DOMUtils.DOM.encode(url) + '">');
- doc.close();
- }
+ $_du0gebfwjjgwechl.open(a.href);
}
+ }
+ };
+ var openDialog = function (editor) {
+ return function () {
+ $_dxaplrg2jjgweci6.open(editor);
};
-
- return {
- open: open
- };
- }
-);
-/**
- * Actions.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.link.core.Actions',
- [
- 'tinymce.core.util.VK',
- 'tinymce.plugins.link.ui.Dialog',
- 'tinymce.plugins.link.core.OpenUrl',
- 'tinymce.plugins.link.core.Utils',
- 'tinymce.plugins.link.core.Settings'
- ],
- function (VK, Dialog, OpenUrl, Utils, Settings) {
- var getLink = function (editor, elm) {
- return editor.dom.getParent(elm, 'a[href]');
- };
-
- var getSelectedLink = function (editor) {
- return getLink(editor, editor.selection.getStart());
- };
-
- var getHref = function (elm) {
- // Returns the real href value not the resolved a.href value
- var href = elm.getAttribute('data-mce-href');
- return href ? href : elm.getAttribute('href');
- };
-
- var isContextMenuVisible = function (editor) {
- var contextmenu = editor.plugins.contextmenu;
- return contextmenu ? contextmenu.isContextMenuVisible() : false;
- };
-
- var hasOnlyAltModifier = function (e) {
- return e.altKey === true && e.shiftKey === false && e.ctrlKey === false && e.metaKey === false;
+ };
+ var gotoSelectedLink = function (editor) {
+ return function () {
+ gotoLink(editor, getSelectedLink(editor));
};
-
- var gotoLink = function (editor, a) {
- if (a) {
- var href = getHref(a);
- if (/^#/.test(href)) {
- var targetEl = editor.$(href);
- if (targetEl.length) {
- editor.selection.scrollIntoView(targetEl[0], true);
- }
- } else {
- OpenUrl.open(a.href);
+ };
+ var leftClickedOnAHref = function (editor) {
+ return function (elm) {
+ var sel, rng, node;
+ if ($_1b4wbxfvjjgwechi.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && $_5298ug0jjgweci0.isLink(elm)) {
+ sel = editor.selection;
+ rng = sel.getRng();
+ node = rng.startContainer;
+ if (node.nodeType === 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {
+ return true;
}
}
+ return false;
};
-
- var openDialog = function (editor) {
- return function () {
- Dialog.open(editor);
- };
- };
-
- var gotoSelectedLink = function (editor) {
- return function () {
- gotoLink(editor, getSelectedLink(editor));
- };
- };
-
- var leftClickedOnAHref = function (editor) {
- return function (elm) {
- var sel, rng, node;
- if (Settings.hasContextToolbar(editor.settings) && !isContextMenuVisible(editor) && Utils.isLink(elm)) {
- sel = editor.selection;
- rng = sel.getRng();
- node = rng.startContainer;
- // ignore cursor positions at the beginning/end (to make context toolbar less noisy)
- if (node.nodeType == 3 && sel.isCollapsed() && rng.startOffset > 0 && rng.startOffset < node.data.length) {
- return true;
- }
- }
- return false;
- };
- };
-
- var setupGotoLinks = function (editor) {
- editor.on('click', function (e) {
- var link = getLink(editor, e.target);
- if (link && VK.metaKeyPressed(e)) {
- e.preventDefault();
- gotoLink(editor, link);
- }
- });
-
- editor.on('keydown', function (e) {
- var link = getSelectedLink(editor);
- if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {
- e.preventDefault();
- gotoLink(editor, link);
- }
+ };
+ var setupGotoLinks = function (editor) {
+ editor.on('click', function (e) {
+ var link = getLink(editor, e.target);
+ if (link && global$1.metaKeyPressed(e)) {
+ e.preventDefault();
+ gotoLink(editor, link);
+ }
+ });
+ editor.on('keydown', function (e) {
+ var link = getSelectedLink(editor);
+ if (link && e.keyCode === 13 && hasOnlyAltModifier(e)) {
+ e.preventDefault();
+ gotoLink(editor, link);
+ }
+ });
+ };
+ var toggleActiveState = function (editor) {
+ return function () {
+ var self = this;
+ editor.on('nodechange', function (e) {
+ self.active(!editor.readonly && !!$_5298ug0jjgweci0.getAnchorElement(editor, e.element));
});
};
-
- var toggleActiveState = function (editor) {
- return function () {
- var self = this;
- editor.on('nodechange', function (e) {
- self.active(!editor.readonly && !!Utils.getAnchorElement(editor, e.element));
- });
- };
- };
-
- var toggleViewLinkState = function (editor) {
- return function () {
- var self = this;
-
- var toggleVisibility = function (e) {
- if (Utils.hasLinks(e.parents)) {
- self.show();
- } else {
- self.hide();
- }
- };
-
- if (!Utils.hasLinks(editor.dom.getParents(editor.selection.getStart()))) {
+ };
+ var toggleViewLinkState = function (editor) {
+ return function () {
+ var self = this;
+ var toggleVisibility = function (e) {
+ if ($_5298ug0jjgweci0.hasLinks(e.parents)) {
+ self.show();
+ } else {
self.hide();
}
-
- editor.on('nodechange', toggleVisibility);
-
- self.on('remove', function () {
- editor.off('nodechange', toggleVisibility);
- });
};
- };
-
- return {
- openDialog: openDialog,
- gotoSelectedLink: gotoSelectedLink,
- leftClickedOnAHref: leftClickedOnAHref,
- setupGotoLinks: setupGotoLinks,
- toggleActiveState: toggleActiveState,
- toggleViewLinkState: toggleViewLinkState
- };
- }
-);
-/**
- * Controls.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.link.ui.Controls',
- [
- 'tinymce.plugins.link.core.Actions',
- 'tinymce.plugins.link.core.Utils'
- ],
- function (Actions, Utils) {
-
- var setupButtons = function (editor) {
- editor.addButton('link', {
- icon: 'link',
- tooltip: 'Insert/edit link',
- shortcut: 'Meta+K',
- onclick: Actions.openDialog(editor),
- onpostrender: Actions.toggleActiveState(editor)
- });
-
- editor.addButton('unlink', {
- icon: 'unlink',
- tooltip: 'Remove link',
- onclick: Utils.unlink(editor),
- onpostrender: Actions.toggleActiveState(editor)
- });
-
- if (editor.addContextToolbar) {
- editor.addButton('openlink', {
- icon: 'newtab',
- tooltip: 'Open link',
- onclick: Actions.gotoSelectedLink(editor)
- });
+ if (!$_5298ug0jjgweci0.hasLinks(editor.dom.getParents(editor.selection.getStart()))) {
+ self.hide();
}
+ editor.on('nodechange', toggleVisibility);
+ self.on('remove', function () {
+ editor.off('nodechange', toggleVisibility);
+ });
};
+ };
+ var $_8hceq8ftjjgweche = {
+ openDialog: openDialog,
+ gotoSelectedLink: gotoSelectedLink,
+ leftClickedOnAHref: leftClickedOnAHref,
+ setupGotoLinks: setupGotoLinks,
+ toggleActiveState: toggleActiveState,
+ toggleViewLinkState: toggleViewLinkState
+ };
- var setupMenuItems = function (editor) {
- editor.addMenuItem('openlink', {
- text: 'Open link',
- icon: 'newtab',
- onclick: Actions.gotoSelectedLink(editor),
- onPostRender: Actions.toggleViewLinkState(editor),
- prependToContext: true
- });
+ var register = function (editor) {
+ editor.addCommand('mceLink', $_8hceq8ftjjgweche.openDialog(editor));
+ };
+ var $_bauc80fsjjgwechc = { register: register };
- editor.addMenuItem('link', {
- icon: 'link',
- text: 'Link',
- shortcut: 'Meta+K',
- onclick: Actions.openDialog(editor),
- stateSelector: 'a[href]',
- context: 'insert',
- prependToContext: true
+ var setup = function (editor) {
+ editor.addShortcut('Meta+K', '', $_8hceq8ftjjgweche.openDialog(editor));
+ };
+ var $_49u4p1g5jjgwecie = { setup: setup };
+
+ var setupButtons = function (editor) {
+ editor.addButton('link', {
+ active: false,
+ icon: 'link',
+ tooltip: 'Insert/edit link',
+ onclick: $_8hceq8ftjjgweche.openDialog(editor),
+ onpostrender: $_8hceq8ftjjgweche.toggleActiveState(editor)
+ });
+ editor.addButton('unlink', {
+ active: false,
+ icon: 'unlink',
+ tooltip: 'Remove link',
+ onclick: $_5298ug0jjgweci0.unlink(editor),
+ onpostrender: $_8hceq8ftjjgweche.toggleActiveState(editor)
+ });
+ if (editor.addContextToolbar) {
+ editor.addButton('openlink', {
+ icon: 'newtab',
+ tooltip: 'Open link',
+ onclick: $_8hceq8ftjjgweche.gotoSelectedLink(editor)
});
- };
-
- var setupContextToolbars = function (editor) {
- if (editor.addContextToolbar) {
- editor.addContextToolbar(
- Actions.leftClickedOnAHref(editor),
- 'openlink | link unlink'
- );
- }
- };
+ }
+ };
+ var setupMenuItems = function (editor) {
+ editor.addMenuItem('openlink', {
+ text: 'Open link',
+ icon: 'newtab',
+ onclick: $_8hceq8ftjjgweche.gotoSelectedLink(editor),
+ onPostRender: $_8hceq8ftjjgweche.toggleViewLinkState(editor),
+ prependToContext: true
+ });
+ editor.addMenuItem('link', {
+ icon: 'link',
+ text: 'Link',
+ shortcut: 'Meta+K',
+ onclick: $_8hceq8ftjjgweche.openDialog(editor),
+ stateSelector: 'a[href]',
+ context: 'insert',
+ prependToContext: true
+ });
+ editor.addMenuItem('unlink', {
+ icon: 'unlink',
+ text: 'Remove link',
+ onclick: $_5298ug0jjgweci0.unlink(editor),
+ stateSelector: 'a[href]'
+ });
+ };
+ var setupContextToolbars = function (editor) {
+ if (editor.addContextToolbar) {
+ editor.addContextToolbar($_8hceq8ftjjgweche.leftClickedOnAHref(editor), 'openlink | link unlink');
+ }
+ };
+ var $_bn93cg6jjgwecif = {
+ setupButtons: setupButtons,
+ setupMenuItems: setupMenuItems,
+ setupContextToolbars: setupContextToolbars
+ };
- return {
- setupButtons: setupButtons,
- setupMenuItems: setupMenuItems,
- setupContextToolbars: setupContextToolbars
- };
+ global.add('link', function (editor) {
+ $_bn93cg6jjgwecif.setupButtons(editor);
+ $_bn93cg6jjgwecif.setupMenuItems(editor);
+ $_bn93cg6jjgwecif.setupContextToolbars(editor);
+ $_8hceq8ftjjgweche.setupGotoLinks(editor);
+ $_bauc80fsjjgwechc.register(editor);
+ $_49u4p1g5jjgwecie.setup(editor);
+ });
+ function Plugin () {
}
-);
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-define(
- 'tinymce.plugins.link.Plugin',
- [
- 'tinymce.core.PluginManager',
- 'tinymce.plugins.link.core.Actions',
- 'tinymce.plugins.link.ui.Controls'
- ],
- function (PluginManager, Actions, Controls) {
- PluginManager.add('link', function (editor) {
- Controls.setupButtons(editor);
- Controls.setupMenuItems(editor);
- Controls.setupContextToolbars(editor);
- Actions.setupGotoLinks(editor);
- editor.addShortcut('Meta+K', '', Actions.openDialog(editor));
- editor.addCommand('mceLink', Actions.openDialog(editor));
- });
+ return Plugin;
- return function () { };
- }
-);
-dem('tinymce.plugins.link.Plugin')();
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("4",tinymce.util.Tools.resolve),g("1",["4"],function(a){return a("tinymce.PluginManager")}),g("5",["4"],function(a){return a("tinymce.util.VK")}),g("a",["4"],function(a){return a("tinymce.util.Delay")}),g("b",["4"],function(a){return a("tinymce.util.Tools")}),g("c",["4"],function(a){return a("tinymce.util.XHR")}),g("9",[],function(){var a=function(a){return"boolean"==typeof a.link_assume_external_targets&&a.link_assume_external_targets},b=function(a){return"boolean"==typeof a.link_context_toolbar&&a.link_context_toolbar},c=function(a){return a.link_list},d=function(a){return"string"==typeof a.default_link_target},e=function(a){return a.default_link_target},f=function(a){return a.target_list},g=function(a,b){a.settings.target_list=b},h=function(a){return f(a)!==!1},i=function(a){return a.rel_list},j=function(a){return void 0!==i(a)},k=function(a){return a.link_class_list},l=function(a){return void 0!==k(a)},m=function(a){return a.link_title!==!1},n=function(a){return"boolean"==typeof a.allow_unsafe_link_target&&a.allow_unsafe_link_target};return{assumeExternalTargets:a,hasContextToolbar:b,getLinkList:c,hasDefaultLinkTarget:d,getDefaultLinkTarget:e,getTargetList:f,setTargetList:g,shouldShowTargetList:h,getRelList:i,hasRelList:j,getLinkClassList:k,hasLinkClassList:l,shouldShowLinkTitle:m,allowUnsafeLinkTarget:n}}),h("d",RegExp),g("8",["b","9","d"],function(a,b,c){var d=function(b,c){var d=["noopener"],e=b?b.split(/\s+/):[],f=function(b){return a.trim(b.sort().join(" "))},g=function(a){return a=h(a),a.length?a.concat(d):d},h=function(b){return b.filter(function(b){return a.inArray(d,b)===-1})};return e=c?g(e):h(e),e.length?f(e):null},e=function(a){return a.replace(/\uFEFF/g,"")},f=function(a,b){return b=b||a.selection.getStart(),k(b)?a.dom.select("a[href]",b)[0]:a.dom.getParent(b,"a[href]")},g=function(a,b){var c=b?b.innerText||b.textContent:a.getContent({format:"text"});return e(c)},h=function(a){return a&&"A"===a.nodeName&&a.href},i=function(b){return a.grep(b,h).length>0},j=function(a){return!(/</.test(a)&&(!/^<a [^>]+>[^<]+<\/a>$/.test(a)||a.indexOf("href=")==-1))},k=function(a){return a&&"FIGURE"===a.nodeName&&/\bimage\b/i.test(a.className)},l=function(a,c){return function(e){a.undoManager.transact(function(){var g=a.selection.getNode(),h=f(a,g),i={href:e.href,target:e.target?e.target:null,rel:e.rel?e.rel:null,"class":e["class"]?e["class"]:null,title:e.title?e.title:null};b.hasRelList(a.settings)||b.allowUnsafeLinkTarget(a.settings)!==!1||(i.rel=d(i.rel,"_blank"==i.target)),e.href===c.href&&(c.attach(),c={}),h?(a.focus(),e.hasOwnProperty("text")&&("innerText"in h?h.innerText=e.text:h.textContent=e.text),a.dom.setAttribs(h,i),a.selection.select(h),a.undoManager.add()):k(g)?o(a,g,i):e.hasOwnProperty("text")?a.insertContent(a.dom.createHTML("a",i,a.dom.encode(e.text))):a.execCommand("mceInsertLink",!1,i)})}},m=function(a){return function(){a.undoManager.transact(function(){var b=a.selection.getNode();k(b)?n(a,b):a.execCommand("unlink")})}},n=function(a,b){var c,d;d=a.dom.select("img",b)[0],d&&(c=a.dom.getParents(d,"a[href]",b)[0],c&&(c.parentNode.insertBefore(d,c),a.dom.remove(c)))},o=function(a,b,c){var d,e;e=a.dom.select("img",b)[0],e&&(d=a.dom.create("a",c),e.parentNode.insertBefore(d,e),d.appendChild(e))};return{link:l,unlink:m,isLink:h,hasLinks:i,isOnlyTextSelected:j,getAnchorElement:f,getAnchorText:g,toggleTargetRules:d}}),g("6",["a","b","c","8","9"],function(a,b,c,d,e){var f={},g=function(a,b){var d=e.getLinkList(a.settings);"string"==typeof d?c.send({url:d,success:function(c){b(a,JSON.parse(c))}}):"function"==typeof d?d(function(c){b(a,c)}):b(a,d)},h=function(a,c,d){var e=function(a,d){return d=d||[],b.each(a,function(a){var b={text:a.text||a.title};a.menu?b.menu=e(a.menu):(b.value=a.value,c&&c(b)),d.push(b)}),d};return e(a,d||[])},i=function(b,c,d){var e=b.selection.getRng();a.setEditorTimeout(b,function(){b.windowManager.confirm(c,function(a){b.selection.setRng(e),d(a)})})},j=function(a,c){var g,j,k,l,m,n,o,p,q,r,s,t={},u=a.selection,v=a.dom,w=function(a){var b=k.find("#text");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),k.find("#href").value(a.control.value())},x=function(c){var d=[];if(b.each(a.dom.select("a:not([href])"),function(a){var b=a.name||a.id;b&&d.push({text:b,value:"#"+b,selected:c.indexOf("#"+b)!=-1})}),d.length)return d.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:d,onselect:w}},y=function(){j||!l||t.text||this.parent().parent().find("#text")[0].value(this.value())},z=function(c){var d=c.meta||{};n&&n.value(a.convertURL(this.value(),"href")),b.each(c.meta,function(a,b){var c=k.find("#"+b);"text"===b?0===j.length&&(c.value(a),t.text=a):c.value(a)}),d.attach&&(f={href:this.value(),attach:d.attach}),d.text||y.call(this)},A=function(a){a.meta=k.toJSON()};l=d.isOnlyTextSelected(u.getContent()),g=d.getAnchorElement(a),t.text=j=d.getAnchorText(a.selection,g),t.href=g?v.getAttrib(g,"href"):"",g?t.target=v.getAttrib(g,"target"):e.hasDefaultLinkTarget(a.settings)&&(t.target=e.getDefaultLinkTarget(a.settings)),(s=v.getAttrib(g,"rel"))&&(t.rel=s),(s=v.getAttrib(g,"class"))&&(t["class"]=s),(s=v.getAttrib(g,"title"))&&(t.title=s),l&&(m={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){t.text=this.value()}}),c&&(n={type:"listbox",label:"Link list",values:h(c,function(b){b.value=a.convertURL(b.value||b.url,"href")},[{text:"None",value:""}]),onselect:w,value:a.convertURL(t.href,"href"),onPostRender:function(){n=this}}),e.shouldShowTargetList(a.settings)&&(void 0===e.getTargetList(a.settings)&&e.setTargetList(a,[{text:"None",value:""},{text:"New window",value:"_blank"}]),p={name:"target",type:"listbox",label:"Target",values:h(e.getTargetList(a.settings))}),e.hasRelList(a.settings)&&(o={name:"rel",type:"listbox",label:"Rel",values:h(e.getRelList(a.settings),function(b){e.allowUnsafeLinkTarget(a.settings)===!1&&(b.value=d.toggleTargetRules(b.value,"_blank"===t.target))})}),e.hasLinkClassList(a.settings)&&(q={name:"class",type:"listbox",label:"Class",values:h(e.getLinkClassList(a.settings),function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:"a",classes:[b.value]})})})}),e.shouldShowLinkTitle(a.settings)&&(r={name:"title",type:"textbox",label:"Title",value:t.title}),k=a.windowManager.open({title:"Insert link",data:t,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:z,onkeyup:y,onbeforecall:A},m,r,x(t.href),n,o,p,q],onSubmit:function(c){var g=e.assumeExternalTargets(a.settings),h=d.link(a,f),k=d.unlink(a),m=b.extend({},t,c.data),n=m.href;return n?(l&&m.text!==j||delete m.text,n.indexOf("@")>0&&n.indexOf("//")==-1&&n.indexOf("mailto:")==-1?void i(a,"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(a){a&&(m.href="mailto:"+n),h(m)}):g===!0&&!/^\w+:/i.test(n)||g===!1&&/^\s*www[\.|\d\.]/i.test(n)?void i(a,"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(a){a&&(m.href="http://"+n),h(m)}):void h(m)):void k()}})},k=function(a){g(a,j)};return{open:k}}),g("e",["4"],function(a){return a("tinymce.dom.DOMUtils")}),g("f",["4"],function(a){return a("tinymce.Env")}),g("7",["e","f"],function(a,b){var c=function(a,b){document.body.appendChild(a),a.dispatchEvent(b),document.body.removeChild(a)},d=function(d){if(!b.ie||b.ie>10){var e=document.createElement("a");e.target="_blank",e.href=d,e.rel="noreferrer noopener";var f=document.createEvent("MouseEvents");f.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),c(e,f)}else{var g=window.open("","_blank");if(g){g.opener=null;var h=g.document;h.open(),h.write('<meta http-equiv="refresh" content="0; url='+a.DOM.encode(d)+'">'),h.close()}}};return{open:d}}),g("2",["5","6","7","8","9"],function(a,b,c,d,e){var f=function(a,b){return a.dom.getParent(b,"a[href]")},g=function(a){return f(a,a.selection.getStart())},h=function(a){var b=a.getAttribute("data-mce-href");return b?b:a.getAttribute("href")},i=function(a){var b=a.plugins.contextmenu;return!!b&&b.isContextMenuVisible()},j=function(a){return a.altKey===!0&&a.shiftKey===!1&&a.ctrlKey===!1&&a.metaKey===!1},k=function(a,b){if(b){var d=h(b);if(/^#/.test(d)){var e=a.$(d);e.length&&a.selection.scrollIntoView(e[0],!0)}else c.open(b.href)}},l=function(a){return function(){b.open(a)}},m=function(a){return function(){k(a,g(a))}},n=function(a){return function(b){var c,f,g;return!!(e.hasContextToolbar(a.settings)&&!i(a)&&d.isLink(b)&&(c=a.selection,f=c.getRng(),g=f.startContainer,3==g.nodeType&&c.isCollapsed()&&f.startOffset>0&&f.startOffset<g.data.length))}},o=function(b){b.on("click",function(c){var d=f(b,c.target);d&&a.metaKeyPressed(c)&&(c.preventDefault(),k(b,d))}),b.on("keydown",function(a){var c=g(b);c&&13===a.keyCode&&j(a)&&(a.preventDefault(),k(b,c))})},p=function(a){return function(){var b=this;a.on("nodechange",function(c){b.active(!a.readonly&&!!d.getAnchorElement(a,c.element))})}},q=function(a){return function(){var b=this,c=function(a){d.hasLinks(a.parents)?b.show():b.hide()};d.hasLinks(a.dom.getParents(a.selection.getStart()))||b.hide(),a.on("nodechange",c),b.on("remove",function(){a.off("nodechange",c)})}};return{openDialog:l,gotoSelectedLink:m,leftClickedOnAHref:n,setupGotoLinks:o,toggleActiveState:p,toggleViewLinkState:q}}),g("3",["2","8"],function(a,b){var c=function(c){c.addButton("link",{icon:"link",tooltip:"Insert/edit link",shortcut:"Meta+K",onclick:a.openDialog(c),onpostrender:a.toggleActiveState(c)}),c.addButton("unlink",{icon:"unlink",tooltip:"Remove link",onclick:b.unlink(c),onpostrender:a.toggleActiveState(c)}),c.addContextToolbar&&c.addButton("openlink",{icon:"newtab",tooltip:"Open link",onclick:a.gotoSelectedLink(c)})},d=function(b){b.addMenuItem("openlink",{text:"Open link",icon:"newtab",onclick:a.gotoSelectedLink(b),onPostRender:a.toggleViewLinkState(b),prependToContext:!0}),b.addMenuItem("link",{icon:"link",text:"Link",shortcut:"Meta+K",onclick:a.openDialog(b),stateSelector:"a[href]",context:"insert",prependToContext:!0})},e=function(b){b.addContextToolbar&&b.addContextToolbar(a.leftClickedOnAHref(b),"openlink | link unlink")};return{setupButtons:c,setupMenuItems:d,setupContextToolbars:e}}),g("0",["1","2","3"],function(a,b,c){return a.add("link",function(a){c.setupButtons(a),c.setupMenuItems(a),c.setupContextToolbars(a),b.setupGotoLinks(a),a.addShortcut("Meta+K","",b.openDialog(a)),a.addCommand("mceLink",b.openDialog(a))}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=tinymce.util.Tools.resolve("tinymce.util.VK"),e=function(t){return t.target_list},o=function(t){return t.rel_list},i=function(t){return t.link_class_list},p=function(t){return"boolean"==typeof t.link_assume_external_targets&&t.link_assume_external_targets},a=function(t){return"boolean"==typeof t.link_context_toolbar&&t.link_context_toolbar},r=function(t){return t.link_list},k=function(t){return"string"==typeof t.default_link_target},y=function(t){return t.default_link_target},b=e,_=function(t,e){t.settings.target_list=e},w=function(t){return!1!==e(t)},T=o,C=function(t){return o(t)!==undefined},M=i,O=function(t){return i(t)!==undefined},R=function(t){return!1!==t.link_title},N=function(t){return"boolean"==typeof t.allow_unsafe_link_target&&t.allow_unsafe_link_target},l=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),u=tinymce.util.Tools.resolve("tinymce.Env"),c=function(t){if(!u.ie||10<u.ie){var e=document.createElement("a");e.target="_blank",e.href=t,e.rel="noreferrer noopener";var n=document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),r=e,a=n,document.body.appendChild(r),r.dispatchEvent(a),document.body.removeChild(r)}else{var o=window.open("","_blank");if(o){o.opener=null;var i=o.document;i.open(),i.write('<meta http-equiv="refresh" content="0; url='+l.DOM.encode(t)+'">'),i.close()}}var r,a},A=tinymce.util.Tools.resolve("tinymce.util.Tools"),s=function(t,e){var n,o,i=["noopener"],r=t?t.split(/\s+/):[],a=function(t){return t.filter(function(t){return-1===A.inArray(i,t)})};return(r=e?(n=a(n=r)).length?n.concat(i):i:a(r)).length?(o=r,A.trim(o.sort().join(" "))):null},f=function(t,e){return e=e||t.selection.getNode(),m(e)?t.dom.select("a[href]",e)[0]:t.dom.getParent(e,"a[href]")},d=function(t){return t&&"A"===t.nodeName&&t.href},m=function(t){return t&&"FIGURE"===t.nodeName&&/\bimage\b/i.test(t.className)},v=function(t,e){var n,o;(o=t.dom.select("img",e)[0])&&(n=t.dom.getParents(o,"a[href]",e)[0])&&(n.parentNode.insertBefore(o,n),t.dom.remove(n))},g=function(t,e,n){var o,i;(i=t.dom.select("img",e)[0])&&(o=t.dom.create("a",n),i.parentNode.insertBefore(o,i),o.appendChild(i))},L=function(i,r){return function(o){i.undoManager.transact(function(){var t=i.selection.getNode(),e=f(i,t),n={href:o.href,target:o.target?o.target:null,rel:o.rel?o.rel:null,"class":o["class"]?o["class"]:null,title:o.title?o.title:null};C(i.settings)||!1!==N(i.settings)||(n.rel=s(n.rel,"_blank"===n.target)),o.href===r.href&&(r.attach(),r={}),e?(i.focus(),o.hasOwnProperty("text")&&("innerText"in e?e.innerText=o.text:e.textContent=o.text),i.dom.setAttribs(e,n),i.selection.select(e),i.undoManager.add()):m(t)?g(i,t,n):o.hasOwnProperty("text")?i.insertContent(i.dom.createHTML("a",n,i.dom.encode(o.text))):i.execCommand("mceInsertLink",!1,n)})}},P=function(e){return function(){e.undoManager.transact(function(){var t=e.selection.getNode();m(t)?v(e,t):e.execCommand("unlink")})}},h=d,x=function(t){return 0<A.grep(t,d).length},E=function(t){return!(/</.test(t)&&(!/^<a [^>]+>[^<]+<\/a>$/.test(t)||-1===t.indexOf("href=")))},S=f,I=function(t,e){var n=e?e.innerText||e.textContent:t.getContent({format:"text"});return n.replace(/\uFEFF/g,"")},K=s,U=tinymce.util.Tools.resolve("tinymce.util.Delay"),D=tinymce.util.Tools.resolve("tinymce.util.XHR"),B={},F=function(t,o,e){var i=function(t,n){return n=n||[],A.each(t,function(t){var e={text:t.text||t.title};t.menu?e.menu=i(t.menu):(e.value=t.value,o&&o(e)),n.push(e)}),n};return i(t,e||[])},q=function(e,t,n){var o=e.selection.getRng();U.setEditorTimeout(e,function(){e.windowManager.confirm(t,function(t){e.selection.setRng(o),n(t)})})},V=function(a,t){var e,l,o,u,n,i,r,c,s,f,d,m={},v=a.selection,g=a.dom,h=function(t){var e=o.find("#text");(!e.value()||t.lastControl&&e.value()===t.lastControl.text())&&e.value(t.control.text()),o.find("#href").value(t.control.value())},x=function(){l||!u||m.text||this.parent().parent().find("#text")[0].value(this.value())};u=E(v.getContent()),e=S(a),m.text=l=I(a.selection,e),m.href=e?g.getAttrib(e,"href"):"",e?m.target=g.getAttrib(e,"target"):k(a.settings)&&(m.target=y(a.settings)),(d=g.getAttrib(e,"rel"))&&(m.rel=d),(d=g.getAttrib(e,"class"))&&(m["class"]=d),(d=g.getAttrib(e,"title"))&&(m.title=d),u&&(n={name:"text",type:"textbox",size:40,label:"Text to display",onchange:function(){m.text=this.value()}}),t&&(i={type:"listbox",label:"Link list",values:F(t,function(t){t.value=a.convertURL(t.value||t.url,"href")},[{text:"None",value:""}]),onselect:h,value:a.convertURL(m.href,"href"),onPostRender:function(){i=this}}),w(a.settings)&&(b(a.settings)===undefined&&_(a,[{text:"None",value:""},{text:"New window",value:"_blank"}]),c={name:"target",type:"listbox",label:"Target",values:F(b(a.settings))}),C(a.settings)&&(r={name:"rel",type:"listbox",label:"Rel",values:F(T(a.settings),function(t){!1===N(a.settings)&&(t.value=K(t.value,"_blank"===m.target))})}),O(a.settings)&&(s={name:"class",type:"listbox",label:"Class",values:F(M(a.settings),function(t){t.value&&(t.textStyle=function(){return a.formatter.getCssText({inline:"a",classes:[t.value]})})})}),R(a.settings)&&(f={name:"title",type:"textbox",label:"Title",value:m.title}),o=a.windowManager.open({title:"Insert link",data:m,body:[{name:"href",type:"filepicker",filetype:"file",size:40,autofocus:!0,label:"Url",onchange:function(t){var e=t.meta||{};i&&i.value(a.convertURL(this.value(),"href")),A.each(t.meta,function(t,e){var n=o.find("#"+e);"text"===e?0===l.length&&(n.value(t),m.text=t):n.value(t)}),e.attach&&(B={href:this.value(),attach:e.attach}),e.text||x.call(this)},onkeyup:x,onpaste:x,onbeforecall:function(t){t.meta=o.toJSON()}},n,f,function(n){var o=[];if(A.each(a.dom.select("a:not([href])"),function(t){var e=t.name||t.id;e&&o.push({text:e,value:"#"+e,selected:-1!==n.indexOf("#"+e)})}),o.length)return o.unshift({text:"None",value:""}),{name:"anchor",type:"listbox",label:"Anchors",values:o,onselect:h}}(m.href),i,r,c,s],onSubmit:function(t){var e=p(a.settings),n=L(a,B),o=P(a),i=A.extend({},m,t.data),r=i.href;r?(u&&i.text!==l||delete i.text,0<r.indexOf("@")&&-1===r.indexOf("//")&&-1===r.indexOf("mailto:")?q(a,"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",function(t){t&&(i.href="mailto:"+r),n(i)}):!0===e&&!/^\w+:/i.test(r)||!1===e&&/^\s*www[\.|\d\.]/i.test(r)?q(a,"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(t){t&&(i.href="http://"+r),n(i)}):n(i)):o()}})},z=function(t){var e,n,o;n=V,"string"==typeof(o=r((e=t).settings))?D.send({url:o,success:function(t){n(e,JSON.parse(t))}}):"function"==typeof o?o(function(t){n(e,t)}):n(e,o)},H=function(t,e){return t.dom.getParent(e,"a[href]")},J=function(t){return H(t,t.selection.getStart())},$=function(t,e){if(e){var n=(i=e).getAttribute("data-mce-href")||i.getAttribute("href");if(/^#/.test(n)){var o=t.$(n);o.length&&t.selection.scrollIntoView(o[0],!0)}else c(e.href)}var i},j=function(t){return function(){z(t)}},G=function(t){return function(){$(t,J(t))}},X=function(r){return function(t){var e,n,o,i;return!!(a(r.settings)&&(!(i=r.plugins.contextmenu)||!i.isContextMenuVisible())&&h(t)&&3===(o=(n=(e=r.selection).getRng()).startContainer).nodeType&&e.isCollapsed()&&0<n.startOffset&&n.startOffset<o.data.length)}},Q=function(o){o.on("click",function(t){var e=H(o,t.target);e&&n.metaKeyPressed(t)&&(t.preventDefault(),$(o,e))}),o.on("keydown",function(t){var e,n=J(o);n&&13===t.keyCode&&!0===(e=t).altKey&&!1===e.shiftKey&&!1===e.ctrlKey&&!1===e.metaKey&&(t.preventDefault(),$(o,n))})},W=function(n){return function(){var e=this;n.on("nodechange",function(t){e.active(!n.readonly&&!!S(n,t.element))})}},Y=function(n){return function(){var e=this,t=function(t){x(t.parents)?e.show():e.hide()};x(n.dom.getParents(n.selection.getStart()))||e.hide(),n.on("nodechange",t),e.on("remove",function(){n.off("nodechange",t)})}},Z=function(t){t.addCommand("mceLink",j(t))},tt=function(t){t.addShortcut("Meta+K","",j(t))},et=function(t){t.addButton("link",{active:!1,icon:"link",tooltip:"Insert/edit link",onclick:j(t),onpostrender:W(t)}),t.addButton("unlink",{active:!1,icon:"unlink",tooltip:"Remove link",onclick:P(t),onpostrender:W(t)}),t.addContextToolbar&&t.addButton("openlink",{icon:"newtab",tooltip:"Open link",onclick:G(t)})},nt=function(t){t.addMenuItem("openlink",{text:"Open link",icon:"newtab",onclick:G(t),onPostRender:Y(t),prependToContext:!0}),t.addMenuItem("link",{icon:"link",text:"Link",shortcut:"Meta+K",onclick:j(t),stateSelector:"a[href]",context:"insert",prependToContext:!0}),t.addMenuItem("unlink",{icon:"unlink",text:"Remove link",onclick:P(t),stateSelector:"a[href]"})},ot=function(t){t.addContextToolbar&&t.addContextToolbar(X(t),"openlink | link unlink")};t.add("link",function(t){et(t),nt(t),ot(t),Q(t),Z(t),tt(t)})}();
\ No newline at end of file
(function () {
+var lists = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
- };
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.lists.Plugin","tinymce.core.PluginManager","tinymce.core.util.Tools","tinymce.core.util.VK","tinymce.plugins.lists.actions.Indent","tinymce.plugins.lists.actions.Outdent","tinymce.plugins.lists.actions.ToggleList","tinymce.plugins.lists.core.Delete","tinymce.plugins.lists.core.NodeType","tinymce.plugins.lists.core.Selection","global!tinymce.util.Tools.resolve","tinymce.core.dom.DOMUtils","tinymce.plugins.lists.core.Bookmark","tinymce.core.dom.DomQuery","tinymce.plugins.lists.core.NormalizeLists","tinymce.plugins.lists.core.SplitList","tinymce.plugins.lists.core.TextBlock","tinymce.core.dom.BookmarkManager","tinymce.core.dom.RangeUtils","tinymce.core.dom.TreeWalker","tinymce.plugins.lists.core.Range","tinymce.core.Env"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.VK',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.VK');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.DOMUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.DOMUtils');
- }
-);
-
-/**
- * NodeType.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.core.NodeType',
- [
- ],
- function () {
- var isTextNode = function (node) {
- return node && node.nodeType === 3;
- };
-
- var isListNode = function (node) {
- return node && (/^(OL|UL|DL)$/).test(node.nodeName);
- };
-
- var isListItemNode = function (node) {
- return node && /^(LI|DT|DD)$/.test(node.nodeName);
- };
-
- var isBr = function (node) {
- return node && node.nodeName === 'BR';
- };
-
- var isFirstChild = function (node) {
- return node.parentNode.firstChild === node;
- };
-
- var isLastChild = function (node) {
- return node.parentNode.lastChild === node;
- };
-
- var isTextBlock = function (editor, node) {
- return node && !!editor.schema.getTextBlockElements()[node.nodeName];
- };
-
- var isBlock = function (node, blockElements) {
- return node && node.nodeName in blockElements;
- };
-
- var isBogusBr = function (dom, node) {
- if (!isBr(node)) {
- return false;
- }
-
- if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {
- return true;
- }
-
- return false;
- };
-
- var isEmpty = function (dom, elm, keepBookmarks) {
- var empty = dom.isEmpty(elm);
-
- if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {
- return false;
- }
-
- return empty;
- };
-
- var isChildOfBody = function (dom, elm) {
- return dom.isChildOf(elm, dom.getRoot());
- };
-
- return {
- isTextNode: isTextNode,
- isListNode: isListNode,
- isListItemNode: isListItemNode,
- isBr: isBr,
- isFirstChild: isFirstChild,
- isLastChild: isLastChild,
- isTextBlock: isTextBlock,
- isBlock: isBlock,
- isBogusBr: isBogusBr,
- isEmpty: isEmpty,
- isChildOfBody: isChildOfBody
- };
- }
-);
-
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.RangeUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.RangeUtils');
- }
-);
-
-/**
- * Range.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.core.Range',
- [
- 'tinymce.core.dom.RangeUtils',
- 'tinymce.plugins.lists.core.NodeType'
- ],
- function (RangeUtils, NodeType) {
- var getNormalizedEndPoint = function (container, offset) {
- var node = RangeUtils.getNode(container, offset);
-
- if (NodeType.isListItemNode(container) && NodeType.isTextNode(node)) {
- var textNodeOffset = offset >= container.childNodes.length ? node.data.length : 0;
- return { container: node, offset: textNodeOffset };
- }
-
- return { container: container, offset: offset };
- };
-
- var normalizeRange = function (rng) {
- var outRng = rng.cloneRange();
-
- var rangeStart = getNormalizedEndPoint(rng.startContainer, rng.startOffset);
- outRng.setStart(rangeStart.container, rangeStart.offset);
-
- var rangeEnd = getNormalizedEndPoint(rng.endContainer, rng.endOffset);
- outRng.setEnd(rangeEnd.container, rangeEnd.offset);
-
- return outRng;
- };
-
- return {
- getNormalizedEndPoint: getNormalizedEndPoint,
- normalizeRange: normalizeRange
- };
- }
-);
-
-
-/**
- * Bookmark.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.core.Bookmark',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.plugins.lists.core.NodeType',
- 'tinymce.plugins.lists.core.Range'
- ],
- function (DOMUtils, NodeType, Range) {
- var DOM = DOMUtils.DOM;
-
- /**
- * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with
- * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans
- * added to them since they can be restored after a dom operation.
- *
- * So this: <p><b>|</b><b>|</b></p>
- * becomes: <p><b><span data-mce-type="bookmark">|</span></b><b data-mce-type="bookmark">|</span></b></p>
- *
- * @param {DOMRange} rng DOM Range to get bookmark on.
- * @return {Object} Bookmark object.
- */
- var createBookmark = function (rng) {
- var bookmark = {};
-
- var setupEndPoint = function (start) {
- var offsetNode, container, offset;
-
- container = rng[start ? 'startContainer' : 'endContainer'];
- offset = rng[start ? 'startOffset' : 'endOffset'];
-
- if (container.nodeType === 1) {
- offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' });
-
- if (container.hasChildNodes()) {
- offset = Math.min(offset, container.childNodes.length - 1);
-
- if (start) {
- container.insertBefore(offsetNode, container.childNodes[offset]);
- } else {
- DOM.insertAfter(offsetNode, container.childNodes[offset]);
- }
- } else {
- container.appendChild(offsetNode);
- }
-
- container = offsetNode;
- offset = 0;
- }
-
- bookmark[start ? 'startContainer' : 'endContainer'] = container;
- bookmark[start ? 'startOffset' : 'endOffset'] = offset;
- };
-
- setupEndPoint(true);
-
- if (!rng.collapsed) {
- setupEndPoint();
- }
-
- return bookmark;
- };
-
- var resolveBookmark = function (bookmark) {
- function restoreEndPoint(start) {
- var container, offset, node;
-
- var nodeIndex = function (container) {
- var node = container.parentNode.firstChild, idx = 0;
-
- while (node) {
- if (node === container) {
- return idx;
- }
-
- // Skip data-mce-type=bookmark nodes
- if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {
- idx++;
- }
-
- node = node.nextSibling;
- }
-
- return -1;
- };
-
- container = node = bookmark[start ? 'startContainer' : 'endContainer'];
- offset = bookmark[start ? 'startOffset' : 'endOffset'];
-
- if (!container) {
- return;
- }
-
- if (container.nodeType === 1) {
- offset = nodeIndex(container);
- container = container.parentNode;
- DOM.remove(node);
- }
-
- bookmark[start ? 'startContainer' : 'endContainer'] = container;
- bookmark[start ? 'startOffset' : 'endOffset'] = offset;
- }
-
- restoreEndPoint(true);
- restoreEndPoint();
-
- var rng = DOM.createRng();
-
- rng.setStart(bookmark.startContainer, bookmark.startOffset);
-
- if (bookmark.endContainer) {
- rng.setEnd(bookmark.endContainer, bookmark.endOffset);
- }
-
- return Range.normalizeRange(rng);
- };
-
- return {
- createBookmark: createBookmark,
- resolveBookmark: resolveBookmark
- };
- }
-);
-
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.DomQuery',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.DomQuery');
- }
-);
-
-/**
- * Selection.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.core.Selection',
- [
- 'tinymce.core.dom.DomQuery',
- 'tinymce.core.util.Tools',
- 'tinymce.plugins.lists.core.NodeType'
- ],
- function (DomQuery, Tools, NodeType) {
- var getParentList = function (editor) {
- return editor.dom.getParent(editor.selection.getStart(true), 'OL,UL,DL');
- };
-
- var getSelectedSubLists = function (editor) {
- var parentList = getParentList(editor);
- return Tools.grep(editor.selection.getSelectedBlocks(), function (elm) {
- return NodeType.isListNode(elm) && parentList !== elm;
- });
- };
-
- var findParentListItemsNodes = function (editor, elms) {
- var listItemsElms = Tools.map(elms, function (elm) {
- var parentLi = editor.dom.getParent(elm, 'li,dd,dt', editor.getBody());
-
- return parentLi ? parentLi : elm;
- });
-
- return DomQuery.unique(listItemsElms);
- };
-
- var getSelectedListItems = function (editor) {
- var selectedBlocks = editor.selection.getSelectedBlocks();
- return Tools.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {
- return NodeType.isListItemNode(block);
- });
- };
-
- return {
- getParentList: getParentList,
- getSelectedSubLists: getSelectedSubLists,
- getSelectedListItems: getSelectedListItems
- };
- }
-);
-
-
-/**
- * Indent.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.actions.Indent',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.plugins.lists.core.Bookmark',
- 'tinymce.plugins.lists.core.NodeType',
- 'tinymce.plugins.lists.core.Selection'
- ],
- function (DOMUtils, Bookmark, NodeType, Selection) {
- var DOM = DOMUtils.DOM;
-
- var mergeLists = function (from, to) {
- var node;
-
- if (NodeType.isListNode(from)) {
- while ((node = from.firstChild)) {
- to.appendChild(node);
- }
-
- DOM.remove(from);
- }
- };
-
- var indent = function (li) {
- var sibling, newList, listStyle;
-
- if (li.nodeName === 'DT') {
- DOM.rename(li, 'DD');
- return true;
- }
-
- sibling = li.previousSibling;
-
- if (sibling && NodeType.isListNode(sibling)) {
- sibling.appendChild(li);
- return true;
- }
-
- if (sibling && sibling.nodeName === 'LI' && NodeType.isListNode(sibling.lastChild)) {
- sibling.lastChild.appendChild(li);
- mergeLists(li.lastChild, sibling.lastChild);
- return true;
- }
-
- sibling = li.nextSibling;
-
- if (sibling && NodeType.isListNode(sibling)) {
- sibling.insertBefore(li, sibling.firstChild);
- return true;
- }
-
- /*if (sibling && sibling.nodeName === 'LI' && isListNode(li.lastChild)) {
- return false;
- }*/
-
- sibling = li.previousSibling;
- if (sibling && sibling.nodeName === 'LI') {
- newList = DOM.create(li.parentNode.nodeName);
- listStyle = DOM.getStyle(li.parentNode, 'listStyleType');
- if (listStyle) {
- DOM.setStyle(newList, 'listStyleType', listStyle);
- }
- sibling.appendChild(newList);
- newList.appendChild(li);
- mergeLists(li.lastChild, newList);
- return true;
- }
-
- return false;
- };
-
- var indentSelection = function (editor) {
- var listElements = Selection.getSelectedListItems(editor);
-
- if (listElements.length) {
- var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
-
- for (var i = 0; i < listElements.length; i++) {
- if (!indent(listElements[i]) && i === 0) {
- break;
- }
- }
-
- editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
- editor.nodeChanged();
-
- return true;
- }
- };
-
- return {
- indentSelection: indentSelection
- };
- }
-);
-
-
-/**
- * NormalizeLists.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.core.NormalizeLists',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.core.util.Tools',
- 'tinymce.plugins.lists.core.NodeType'
- ],
- function (DOMUtils, Tools, NodeType) {
- var DOM = DOMUtils.DOM;
-
- var normalizeList = function (dom, ul) {
- var sibling, parentNode = ul.parentNode;
-
- // Move UL/OL to previous LI if it's the only child of a LI
- if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {
- sibling = parentNode.previousSibling;
- if (sibling && sibling.nodeName === 'LI') {
- sibling.appendChild(ul);
-
- if (NodeType.isEmpty(dom, parentNode)) {
- DOM.remove(parentNode);
- }
- } else {
- DOM.setStyle(parentNode, 'listStyleType', 'none');
- }
- }
-
- // Append OL/UL to previous LI if it's in a parent OL/UL i.e. old HTML4
- if (NodeType.isListNode(parentNode)) {
- sibling = parentNode.previousSibling;
- if (sibling && sibling.nodeName === 'LI') {
- sibling.appendChild(ul);
- }
- }
- };
-
- var normalizeLists = function (dom, element) {
- Tools.each(Tools.grep(dom.select('ol,ul', element)), function (ul) {
- normalizeList(dom, ul);
- });
- };
-
- return {
- normalizeList: normalizeList,
- normalizeLists: normalizeLists
- };
- }
-);
-
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.Env',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.Env');
- }
-);
-
-/**
- * TextBlock.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.core.TextBlock',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.core.Env',
- 'tinymce.plugins.lists.core.NodeType'
- ],
- function (DOMUtils, Env, NodeType) {
- var DOM = DOMUtils.DOM;
-
- var createNewTextBlock = function (editor, contentNode, blockName) {
- var node, textBlock, fragment = DOM.createFragment(), hasContentNode;
- var blockElements = editor.schema.getBlockElements();
-
- if (editor.settings.forced_root_block) {
- blockName = blockName || editor.settings.forced_root_block;
- }
-
- if (blockName) {
- textBlock = DOM.create(blockName);
-
- if (textBlock.tagName === editor.settings.forced_root_block) {
- DOM.setAttribs(textBlock, editor.settings.forced_root_block_attrs);
- }
-
- if (!NodeType.isBlock(contentNode.firstChild, blockElements)) {
- fragment.appendChild(textBlock);
- }
- }
-
- if (contentNode) {
- while ((node = contentNode.firstChild)) {
- var nodeName = node.nodeName;
-
- if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {
- hasContentNode = true;
- }
-
- if (NodeType.isBlock(node, blockElements)) {
- fragment.appendChild(node);
- textBlock = null;
- } else {
- if (blockName) {
- if (!textBlock) {
- textBlock = DOM.create(blockName);
- fragment.appendChild(textBlock);
- }
-
- textBlock.appendChild(node);
- } else {
- fragment.appendChild(node);
- }
- }
- }
- }
-
- if (!editor.settings.forced_root_block) {
- fragment.appendChild(DOM.create('br'));
- } else {
- // BR is needed in empty blocks on non IE browsers
- if (!hasContentNode && (!Env.ie || Env.ie > 10)) {
- textBlock.appendChild(DOM.create('br', { 'data-mce-bogus': '1' }));
- }
- }
-
- return fragment;
- };
-
- return {
- createNewTextBlock: createNewTextBlock
- };
- }
-);
-
-/**
- * SplitList.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.core.SplitList',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.plugins.lists.core.NodeType',
- 'tinymce.plugins.lists.core.TextBlock',
- 'tinymce.core.util.Tools'
- ],
- function (DOMUtils, NodeType, TextBlock, Tools) {
- var DOM = DOMUtils.DOM;
-
- var splitList = function (editor, ul, li, newBlock) {
- var tmpRng, fragment, bookmarks, node;
-
- var removeAndKeepBookmarks = function (targetNode) {
- Tools.each(bookmarks, function (node) {
- targetNode.parentNode.insertBefore(node, li.parentNode);
- });
-
- DOM.remove(targetNode);
- };
-
- bookmarks = DOM.select('span[data-mce-type="bookmark"]', ul);
- newBlock = newBlock || TextBlock.createNewTextBlock(editor, li);
- tmpRng = DOM.createRng();
- tmpRng.setStartAfter(li);
- tmpRng.setEndAfter(ul);
- fragment = tmpRng.extractContents();
-
- for (node = fragment.firstChild; node; node = node.firstChild) {
- if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {
- DOM.remove(node);
- break;
- }
- }
-
- if (!editor.dom.isEmpty(fragment)) {
- DOM.insertAfter(fragment, ul);
- }
-
- DOM.insertAfter(newBlock, ul);
-
- if (NodeType.isEmpty(editor.dom, li.parentNode)) {
- removeAndKeepBookmarks(li.parentNode);
- }
-
- DOM.remove(li);
-
- if (NodeType.isEmpty(editor.dom, ul)) {
- DOM.remove(ul);
- }
- };
-
- return {
- splitList: splitList
- };
- }
-);
-
-
-/**
- * Outdent.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.actions.Outdent',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.plugins.lists.core.Bookmark',
- 'tinymce.plugins.lists.core.NodeType',
- 'tinymce.plugins.lists.core.NormalizeLists',
- 'tinymce.plugins.lists.core.Selection',
- 'tinymce.plugins.lists.core.SplitList',
- 'tinymce.plugins.lists.core.TextBlock'
- ],
- function (DOMUtils, Bookmark, NodeType, NormalizeLists, Selection, SplitList, TextBlock) {
- var DOM = DOMUtils.DOM;
-
- var removeEmptyLi = function (dom, li) {
- if (NodeType.isEmpty(dom, li)) {
- DOM.remove(li);
- }
- };
-
- var outdent = function (editor, li) {
- var ul = li.parentNode, ulParent = ul.parentNode, newBlock;
-
- if (ul === editor.getBody()) {
- return true;
- }
-
- if (li.nodeName === 'DD') {
- DOM.rename(li, 'DT');
- return true;
- }
-
- if (NodeType.isFirstChild(li) && NodeType.isLastChild(li)) {
- if (ulParent.nodeName === "LI") {
- DOM.insertAfter(li, ulParent);
- removeEmptyLi(editor.dom, ulParent);
- DOM.remove(ul);
- } else if (NodeType.isListNode(ulParent)) {
- DOM.remove(ul, true);
- } else {
- ulParent.insertBefore(TextBlock.createNewTextBlock(editor, li), ul);
- DOM.remove(ul);
- }
-
- return true;
- } else if (NodeType.isFirstChild(li)) {
- if (ulParent.nodeName === "LI") {
- DOM.insertAfter(li, ulParent);
- li.appendChild(ul);
- removeEmptyLi(editor.dom, ulParent);
- } else if (NodeType.isListNode(ulParent)) {
- ulParent.insertBefore(li, ul);
- } else {
- ulParent.insertBefore(TextBlock.createNewTextBlock(editor, li), ul);
- DOM.remove(li);
- }
-
- return true;
- } else if (NodeType.isLastChild(li)) {
- if (ulParent.nodeName === "LI") {
- DOM.insertAfter(li, ulParent);
- } else if (NodeType.isListNode(ulParent)) {
- DOM.insertAfter(li, ul);
- } else {
- DOM.insertAfter(TextBlock.createNewTextBlock(editor, li), ul);
- DOM.remove(li);
- }
-
- return true;
- }
-
- if (ulParent.nodeName === 'LI') {
- ul = ulParent;
- newBlock = TextBlock.createNewTextBlock(editor, li, 'LI');
- } else if (NodeType.isListNode(ulParent)) {
- newBlock = TextBlock.createNewTextBlock(editor, li, 'LI');
- } else {
- newBlock = TextBlock.createNewTextBlock(editor, li);
- }
-
- SplitList.splitList(editor, ul, li, newBlock);
- NormalizeLists.normalizeLists(editor.dom, ul.parentNode);
-
- return true;
- };
+ var global$1 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');
- var outdentSelection = function (editor) {
- var listElements = Selection.getSelectedListItems(editor);
+ var global$2 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
- if (listElements.length) {
- var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
- var i, y, root = editor.getBody();
+ var global$3 = tinymce.util.Tools.resolve('tinymce.util.VK');
- i = listElements.length;
- while (i--) {
- var node = listElements[i].parentNode;
+ var global$4 = tinymce.util.Tools.resolve('tinymce.dom.BookmarkManager');
- while (node && node !== root) {
- y = listElements.length;
- while (y--) {
- if (listElements[y] === node) {
- listElements.splice(i, 1);
- break;
- }
- }
-
- node = node.parentNode;
- }
- }
+ var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');
- for (i = 0; i < listElements.length; i++) {
- if (!outdent(editor, listElements[i]) && i === 0) {
- break;
- }
- }
+ var global$6 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
- editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
- editor.nodeChanged();
-
- return true;
- }
- };
+ var isTextNode = function (node) {
+ return node && node.nodeType === 3;
+ };
+ var isListNode = function (node) {
+ return node && /^(OL|UL|DL)$/.test(node.nodeName);
+ };
+ var isListItemNode = function (node) {
+ return node && /^(LI|DT|DD)$/.test(node.nodeName);
+ };
+ var isTableCellNode = function (node) {
+ return node && /^(TH|TD)$/.test(node.nodeName);
+ };
+ var isBr = function (node) {
+ return node && node.nodeName === 'BR';
+ };
+ var isFirstChild = function (node) {
+ return node.parentNode.firstChild === node;
+ };
+ var isLastChild = function (node) {
+ return node.parentNode.lastChild === node;
+ };
+ var isTextBlock = function (editor, node) {
+ return node && !!editor.schema.getTextBlockElements()[node.nodeName];
+ };
+ var isBlock = function (node, blockElements) {
+ return node && node.nodeName in blockElements;
+ };
+ var isBogusBr = function (dom, node) {
+ if (!isBr(node)) {
+ return false;
+ }
+ if (dom.isBlock(node.nextSibling) && !isBr(node.previousSibling)) {
+ return true;
+ }
+ return false;
+ };
+ var isEmpty = function (dom, elm, keepBookmarks) {
+ var empty = dom.isEmpty(elm);
+ if (keepBookmarks && dom.select('span[data-mce-type=bookmark]', elm).length > 0) {
+ return false;
+ }
+ return empty;
+ };
+ var isChildOfBody = function (dom, elm) {
+ return dom.isChildOf(elm, dom.getRoot());
+ };
+ var $_okk1ogljjgweckx = {
+ isTextNode: isTextNode,
+ isListNode: isListNode,
+ isListItemNode: isListItemNode,
+ isTableCellNode: isTableCellNode,
+ isBr: isBr,
+ isFirstChild: isFirstChild,
+ isLastChild: isLastChild,
+ isTextBlock: isTextBlock,
+ isBlock: isBlock,
+ isBogusBr: isBogusBr,
+ isEmpty: isEmpty,
+ isChildOfBody: isChildOfBody
+ };
+ var getNormalizedEndPoint = function (container, offset) {
+ var node = global$1.getNode(container, offset);
+ if ($_okk1ogljjgweckx.isListItemNode(container) && $_okk1ogljjgweckx.isTextNode(node)) {
+ var textNodeOffset = offset >= container.childNodes.length ? node.data.length : 0;
+ return {
+ container: node,
+ offset: textNodeOffset
+ };
+ }
return {
- outdent: outdent,
- outdentSelection: outdentSelection
+ container: container,
+ offset: offset
};
- }
-);
-
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.BookmarkManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.BookmarkManager');
- }
-);
-
-/**
- * ToggleList.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.actions.ToggleList',
- [
- 'tinymce.core.dom.BookmarkManager',
- 'tinymce.core.util.Tools',
- 'tinymce.plugins.lists.actions.Outdent',
- 'tinymce.plugins.lists.core.Bookmark',
- 'tinymce.plugins.lists.core.NodeType',
- 'tinymce.plugins.lists.core.NormalizeLists',
- 'tinymce.plugins.lists.core.Selection',
- 'tinymce.plugins.lists.core.SplitList'
- ],
- function (BookmarkManager, Tools, Outdent, Bookmark, NodeType, NormalizeLists, Selection, SplitList) {
- var updateListStyle = function (dom, el, detail) {
- var type = detail['list-style-type'] ? detail['list-style-type'] : null;
- dom.setStyle(el, 'list-style-type', type);
- };
-
- var setAttribs = function (elm, attrs) {
- Tools.each(attrs, function (value, key) {
- elm.setAttribute(key, value);
- });
- };
-
- var updateListAttrs = function (dom, el, detail) {
- setAttribs(el, detail['list-attributes']);
- Tools.each(dom.select('li', el), function (li) {
- setAttribs(li, detail['list-item-attributes']);
- });
- };
-
- var updateListWithDetails = function (dom, el, detail) {
- updateListStyle(dom, el, detail);
- updateListAttrs(dom, el, detail);
- };
-
- var getEndPointNode = function (editor, rng, start) {
- var container, offset, root = editor.getBody();
+ };
+ var normalizeRange = function (rng) {
+ var outRng = rng.cloneRange();
+ var rangeStart = getNormalizedEndPoint(rng.startContainer, rng.startOffset);
+ outRng.setStart(rangeStart.container, rangeStart.offset);
+ var rangeEnd = getNormalizedEndPoint(rng.endContainer, rng.endOffset);
+ outRng.setEnd(rangeEnd.container, rangeEnd.offset);
+ return outRng;
+ };
+ var $_a9cyhvgkjjgweckv = {
+ getNormalizedEndPoint: getNormalizedEndPoint,
+ normalizeRange: normalizeRange
+ };
+ var DOM = global$6.DOM;
+ var createBookmark = function (rng) {
+ var bookmark = {};
+ var setupEndPoint = function (start) {
+ var offsetNode, container, offset;
container = rng[start ? 'startContainer' : 'endContainer'];
offset = rng[start ? 'startOffset' : 'endOffset'];
-
- // Resolve node index
if (container.nodeType === 1) {
- container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
- }
-
- while (container.parentNode !== root) {
- if (NodeType.isTextBlock(editor, container)) {
- return container;
- }
-
- if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {
- return container;
+ offsetNode = DOM.create('span', { 'data-mce-type': 'bookmark' });
+ if (container.hasChildNodes()) {
+ offset = Math.min(offset, container.childNodes.length - 1);
+ if (start) {
+ container.insertBefore(offsetNode, container.childNodes[offset]);
+ } else {
+ DOM.insertAfter(offsetNode, container.childNodes[offset]);
+ }
+ } else {
+ container.appendChild(offsetNode);
}
-
- container = container.parentNode;
+ container = offsetNode;
+ offset = 0;
}
-
- return container;
+ bookmark[start ? 'startContainer' : 'endContainer'] = container;
+ bookmark[start ? 'startOffset' : 'endOffset'] = offset;
};
-
- var getSelectedTextBlocks = function (editor, rng) {
- var textBlocks = [], root = editor.getBody(), dom = editor.dom;
-
- var startNode = getEndPointNode(editor, rng, true);
- var endNode = getEndPointNode(editor, rng, false);
- var block, siblings = [];
-
- for (var node = startNode; node; node = node.nextSibling) {
- siblings.push(node);
-
- if (node === endNode) {
- break;
- }
- }
-
- Tools.each(siblings, function (node) {
- if (NodeType.isTextBlock(editor, node)) {
- textBlocks.push(node);
- block = null;
- return;
- }
-
- if (dom.isBlock(node) || NodeType.isBr(node)) {
- if (NodeType.isBr(node)) {
- dom.remove(node);
+ setupEndPoint(true);
+ if (!rng.collapsed) {
+ setupEndPoint();
+ }
+ return bookmark;
+ };
+ var resolveBookmark = function (bookmark) {
+ function restoreEndPoint(start) {
+ var container, offset, node;
+ var nodeIndex = function (container) {
+ var node = container.parentNode.firstChild, idx = 0;
+ while (node) {
+ if (node === container) {
+ return idx;
}
-
- block = null;
- return;
- }
-
- var nextSibling = node.nextSibling;
- if (BookmarkManager.isBookmarkNode(node)) {
- if (NodeType.isTextBlock(editor, nextSibling) || (!nextSibling && node.parentNode === root)) {
- block = null;
- return;
+ if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {
+ idx++;
}
+ node = node.nextSibling;
}
-
- if (!block) {
- block = dom.create('p');
- node.parentNode.insertBefore(block, node);
- textBlocks.push(block);
- }
-
- block.appendChild(node);
- });
-
- return textBlocks;
- };
-
- var applyList = function (editor, listName, detail) {
- var rng = editor.selection.getRng(true), bookmark, listItemName = 'LI';
- var dom = editor.dom;
-
- detail = detail ? detail : {};
-
- if (dom.getContentEditable(editor.selection.getNode()) === "false") {
+ return -1;
+ };
+ container = node = bookmark[start ? 'startContainer' : 'endContainer'];
+ offset = bookmark[start ? 'startOffset' : 'endOffset'];
+ if (!container) {
return;
}
-
- listName = listName.toUpperCase();
-
- if (listName === 'DL') {
- listItemName = 'DT';
+ if (container.nodeType === 1) {
+ offset = nodeIndex(container);
+ container = container.parentNode;
+ DOM.remove(node);
+ if (!container.hasChildNodes() && DOM.isBlock(container)) {
+ container.appendChild(DOM.create('br'));
+ }
}
+ bookmark[start ? 'startContainer' : 'endContainer'] = container;
+ bookmark[start ? 'startOffset' : 'endOffset'] = offset;
+ }
+ restoreEndPoint(true);
+ restoreEndPoint();
+ var rng = DOM.createRng();
+ rng.setStart(bookmark.startContainer, bookmark.startOffset);
+ if (bookmark.endContainer) {
+ rng.setEnd(bookmark.endContainer, bookmark.endOffset);
+ }
+ return $_a9cyhvgkjjgweckv.normalizeRange(rng);
+ };
+ var $_2nx1i4gjjjgweckt = {
+ createBookmark: createBookmark,
+ resolveBookmark: resolveBookmark
+ };
- bookmark = Bookmark.createBookmark(rng);
-
- Tools.each(getSelectedTextBlocks(editor, rng), function (block) {
- var listBlock, sibling;
-
- var hasCompatibleStyle = function (sib) {
- var sibStyle = dom.getStyle(sib, 'list-style-type');
- var detailStyle = detail ? detail['list-style-type'] : '';
-
- detailStyle = detailStyle === null ? '' : detailStyle;
-
- return sibStyle === detailStyle;
- };
-
- sibling = block.previousSibling;
- if (sibling && NodeType.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(sibling)) {
- listBlock = sibling;
- block = dom.rename(block, listItemName);
- sibling.appendChild(block);
- } else {
- listBlock = dom.create(listName);
- block.parentNode.insertBefore(listBlock, block);
- listBlock.appendChild(block);
- block = dom.rename(block, listItemName);
+ var DOM$1 = global$6.DOM;
+ var normalizeList = function (dom, ul) {
+ var sibling;
+ var parentNode = ul.parentNode;
+ if (parentNode.nodeName === 'LI' && parentNode.firstChild === ul) {
+ sibling = parentNode.previousSibling;
+ if (sibling && sibling.nodeName === 'LI') {
+ sibling.appendChild(ul);
+ if ($_okk1ogljjgweckx.isEmpty(dom, parentNode)) {
+ DOM$1.remove(parentNode);
}
+ } else {
+ DOM$1.setStyle(parentNode, 'listStyleType', 'none');
+ }
+ }
+ if ($_okk1ogljjgweckx.isListNode(parentNode)) {
+ sibling = parentNode.previousSibling;
+ if (sibling && sibling.nodeName === 'LI') {
+ sibling.appendChild(ul);
+ }
+ }
+ };
+ var normalizeLists = function (dom, element) {
+ global$5.each(global$5.grep(dom.select('ol,ul', element)), function (ul) {
+ normalizeList(dom, ul);
+ });
+ };
+ var $_ekd4wzgmjjgwecl1 = {
+ normalizeList: normalizeList,
+ normalizeLists: normalizeLists
+ };
- updateListWithDetails(dom, listBlock, detail);
- mergeWithAdjacentLists(editor.dom, listBlock);
- });
-
- editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
- };
-
- var removeList = function (editor) {
- var bookmark = Bookmark.createBookmark(editor.selection.getRng(true)), root = editor.getBody();
- var listItems = Selection.getSelectedListItems(editor);
- var emptyListItems = Tools.grep(listItems, function (li) {
- return editor.dom.isEmpty(li);
- });
-
- listItems = Tools.grep(listItems, function (li) {
- return !editor.dom.isEmpty(li);
- });
+ var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');
- Tools.each(emptyListItems, function (li) {
- if (NodeType.isEmpty(editor.dom, li)) {
- Outdent.outdent(editor, li);
- return;
- }
+ var getParentList = function (editor) {
+ var selectionStart = editor.selection.getStart(true);
+ return editor.dom.getParent(selectionStart, 'OL,UL,DL', getClosestListRootElm(editor, selectionStart));
+ };
+ var isParentListSelected = function (parentList, selectedBlocks) {
+ return parentList && selectedBlocks.length === 1 && selectedBlocks[0] === parentList;
+ };
+ var findSubLists = function (parentList) {
+ return global$5.grep(parentList.querySelectorAll('ol,ul,dl'), function (elm) {
+ return $_okk1ogljjgweckx.isListNode(elm);
+ });
+ };
+ var getSelectedSubLists = function (editor) {
+ var parentList = getParentList(editor);
+ var selectedBlocks = editor.selection.getSelectedBlocks();
+ if (isParentListSelected(parentList, selectedBlocks)) {
+ return findSubLists(parentList);
+ } else {
+ return global$5.grep(selectedBlocks, function (elm) {
+ return $_okk1ogljjgweckx.isListNode(elm) && parentList !== elm;
});
+ }
+ };
+ var findParentListItemsNodes = function (editor, elms) {
+ var listItemsElms = global$5.map(elms, function (elm) {
+ var parentLi = editor.dom.getParent(elm, 'li,dd,dt', getClosestListRootElm(editor, elm));
+ return parentLi ? parentLi : elm;
+ });
+ return global$7.unique(listItemsElms);
+ };
+ var getSelectedListItems = function (editor) {
+ var selectedBlocks = editor.selection.getSelectedBlocks();
+ return global$5.grep(findParentListItemsNodes(editor, selectedBlocks), function (block) {
+ return $_okk1ogljjgweckx.isListItemNode(block);
+ });
+ };
+ var getClosestListRootElm = function (editor, elm) {
+ var parentTableCell = editor.dom.getParents(elm, 'TD,TH');
+ var root = parentTableCell.length > 0 ? parentTableCell[0] : editor.getBody();
+ return root;
+ };
+ var $_3xb1cggnjjgwecl3 = {
+ getParentList: getParentList,
+ getSelectedSubLists: getSelectedSubLists,
+ getSelectedListItems: getSelectedListItems,
+ getClosestListRootElm: getClosestListRootElm
+ };
- Tools.each(listItems, function (li) {
- var node, rootList;
+ var global$8 = tinymce.util.Tools.resolve('tinymce.Env');
- if (li.parentNode === editor.getBody()) {
- return;
+ var DOM$2 = global$6.DOM;
+ var createNewTextBlock = function (editor, contentNode, blockName) {
+ var node, textBlock;
+ var fragment = DOM$2.createFragment();
+ var hasContentNode;
+ var blockElements = editor.schema.getBlockElements();
+ if (editor.settings.forced_root_block) {
+ blockName = blockName || editor.settings.forced_root_block;
+ }
+ if (blockName) {
+ textBlock = DOM$2.create(blockName);
+ if (textBlock.tagName === editor.settings.forced_root_block) {
+ DOM$2.setAttribs(textBlock, editor.settings.forced_root_block_attrs);
+ }
+ if (!$_okk1ogljjgweckx.isBlock(contentNode.firstChild, blockElements)) {
+ fragment.appendChild(textBlock);
+ }
+ }
+ if (contentNode) {
+ while (node = contentNode.firstChild) {
+ var nodeName = node.nodeName;
+ if (!hasContentNode && (nodeName !== 'SPAN' || node.getAttribute('data-mce-type') !== 'bookmark')) {
+ hasContentNode = true;
}
-
- for (node = li; node && node !== root; node = node.parentNode) {
- if (NodeType.isListNode(node)) {
- rootList = node;
+ if ($_okk1ogljjgweckx.isBlock(node, blockElements)) {
+ fragment.appendChild(node);
+ textBlock = null;
+ } else {
+ if (blockName) {
+ if (!textBlock) {
+ textBlock = DOM$2.create(blockName);
+ fragment.appendChild(textBlock);
+ }
+ textBlock.appendChild(node);
+ } else {
+ fragment.appendChild(node);
}
}
-
- SplitList.splitList(editor, rootList, li);
- NormalizeLists.normalizeLists(editor.dom, rootList.parentNode);
+ }
+ }
+ if (!editor.settings.forced_root_block) {
+ fragment.appendChild(DOM$2.create('br'));
+ } else {
+ if (!hasContentNode && (!global$8.ie || global$8.ie > 10)) {
+ textBlock.appendChild(DOM$2.create('br', { 'data-mce-bogus': '1' }));
+ }
+ }
+ return fragment;
+ };
+ var $_kbc02gqjjgwecl9 = { createNewTextBlock: createNewTextBlock };
+
+ var DOM$3 = global$6.DOM;
+ var splitList = function (editor, ul, li, newBlock) {
+ var tmpRng, fragment, bookmarks, node;
+ var removeAndKeepBookmarks = function (targetNode) {
+ global$5.each(bookmarks, function (node) {
+ targetNode.parentNode.insertBefore(node, li.parentNode);
});
-
- editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
- };
-
- var isValidLists = function (list1, list2) {
- return list1 && list2 && NodeType.isListNode(list1) && list1.nodeName === list2.nodeName;
- };
-
- var hasSameListStyle = function (dom, list1, list2) {
- var targetStyle = dom.getStyle(list1, 'list-style-type', true);
- var style = dom.getStyle(list2, 'list-style-type', true);
- return targetStyle === style;
- };
-
- var hasSameClasses = function (elm1, elm2) {
- return elm1.className === elm2.className;
- };
-
- var shouldMerge = function (dom, list1, list2) {
- return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);
- };
-
- var mergeWithAdjacentLists = function (dom, listBlock) {
- var sibling, node;
-
- sibling = listBlock.nextSibling;
- if (shouldMerge(dom, listBlock, sibling)) {
- while ((node = sibling.firstChild)) {
- listBlock.appendChild(node);
- }
-
- dom.remove(sibling);
+ DOM$3.remove(targetNode);
+ };
+ bookmarks = DOM$3.select('span[data-mce-type="bookmark"]', ul);
+ newBlock = newBlock || $_kbc02gqjjgwecl9.createNewTextBlock(editor, li);
+ tmpRng = DOM$3.createRng();
+ tmpRng.setStartAfter(li);
+ tmpRng.setEndAfter(ul);
+ fragment = tmpRng.extractContents();
+ for (node = fragment.firstChild; node; node = node.firstChild) {
+ if (node.nodeName === 'LI' && editor.dom.isEmpty(node)) {
+ DOM$3.remove(node);
+ break;
}
+ }
+ if (!editor.dom.isEmpty(fragment)) {
+ DOM$3.insertAfter(fragment, ul);
+ }
+ DOM$3.insertAfter(newBlock, ul);
+ if ($_okk1ogljjgweckx.isEmpty(editor.dom, li.parentNode)) {
+ removeAndKeepBookmarks(li.parentNode);
+ }
+ DOM$3.remove(li);
+ if ($_okk1ogljjgweckx.isEmpty(editor.dom, ul)) {
+ DOM$3.remove(ul);
+ }
+ };
+ var $_fikiq7gpjjgwecl5 = { splitList: splitList };
- sibling = listBlock.previousSibling;
- if (shouldMerge(dom, listBlock, sibling)) {
- while ((node = sibling.lastChild)) {
- listBlock.insertBefore(node, listBlock.firstChild);
- }
-
- dom.remove(sibling);
+ var DOM$4 = global$6.DOM;
+ var removeEmptyLi = function (dom, li) {
+ if ($_okk1ogljjgweckx.isEmpty(dom, li)) {
+ DOM$4.remove(li);
+ }
+ };
+ var outdent = function (editor, li) {
+ var ul = li.parentNode;
+ var ulParent, newBlock;
+ if (ul) {
+ ulParent = ul.parentNode;
+ } else {
+ removeEmptyLi(editor.dom, li);
+ return true;
+ }
+ if (ul === editor.getBody()) {
+ return true;
+ }
+ if (li.nodeName === 'DD') {
+ DOM$4.rename(li, 'DT');
+ return true;
+ }
+ if ($_okk1ogljjgweckx.isFirstChild(li) && $_okk1ogljjgweckx.isLastChild(li)) {
+ if (ulParent.nodeName === 'LI') {
+ DOM$4.insertAfter(li, ulParent);
+ removeEmptyLi(editor.dom, ulParent);
+ DOM$4.remove(ul);
+ } else if ($_okk1ogljjgweckx.isListNode(ulParent)) {
+ DOM$4.remove(ul, true);
+ } else {
+ ulParent.insertBefore($_kbc02gqjjgwecl9.createNewTextBlock(editor, li), ul);
+ DOM$4.remove(ul);
}
- };
-
- var updateList = function (dom, list, listName, detail) {
- if (list.nodeName !== listName) {
- var newList = dom.rename(list, listName);
- updateListWithDetails(dom, newList, detail);
+ return true;
+ } else if ($_okk1ogljjgweckx.isFirstChild(li)) {
+ if (ulParent.nodeName === 'LI') {
+ DOM$4.insertAfter(li, ulParent);
+ li.appendChild(ul);
+ removeEmptyLi(editor.dom, ulParent);
+ } else if ($_okk1ogljjgweckx.isListNode(ulParent)) {
+ ulParent.insertBefore(li, ul);
} else {
- updateListWithDetails(dom, list, detail);
+ ulParent.insertBefore($_kbc02gqjjgwecl9.createNewTextBlock(editor, li), ul);
+ DOM$4.remove(li);
}
- };
-
- var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {
- if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
- removeList(editor, listName);
+ return true;
+ } else if ($_okk1ogljjgweckx.isLastChild(li)) {
+ if (ulParent.nodeName === 'LI') {
+ DOM$4.insertAfter(li, ulParent);
+ } else if ($_okk1ogljjgweckx.isListNode(ulParent)) {
+ DOM$4.insertAfter(li, ul);
} else {
- var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
-
- Tools.each([parentList].concat(lists), function (elm) {
- updateList(editor.dom, elm, listName, detail);
- });
-
- editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
+ DOM$4.insertAfter($_kbc02gqjjgwecl9.createNewTextBlock(editor, li), ul);
+ DOM$4.remove(li);
}
- };
-
- var hasListStyleDetail = function (detail) {
- return 'list-style-type' in detail;
- };
-
- var toggleSingleList = function (editor, parentList, listName, detail) {
- if (parentList === editor.getBody()) {
- return;
+ return true;
+ }
+ if (ulParent.nodeName === 'LI') {
+ ul = ulParent;
+ newBlock = $_kbc02gqjjgwecl9.createNewTextBlock(editor, li, 'LI');
+ } else if ($_okk1ogljjgweckx.isListNode(ulParent)) {
+ newBlock = $_kbc02gqjjgwecl9.createNewTextBlock(editor, li, 'LI');
+ } else {
+ newBlock = $_kbc02gqjjgwecl9.createNewTextBlock(editor, li);
+ }
+ $_fikiq7gpjjgwecl5.splitList(editor, ul, li, newBlock);
+ $_ekd4wzgmjjgwecl1.normalizeLists(editor.dom, ul.parentNode);
+ return true;
+ };
+ var outdentSelection = function (editor) {
+ var listElements = $_3xb1cggnjjgwecl3.getSelectedListItems(editor);
+ if (listElements.length) {
+ var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng());
+ var i = void 0, y = void 0;
+ var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, editor.selection.getStart(true));
+ i = listElements.length;
+ while (i--) {
+ var node = listElements[i].parentNode;
+ while (node && node !== root) {
+ y = listElements.length;
+ while (y--) {
+ if (listElements[y] === node) {
+ listElements.splice(i, 1);
+ break;
+ }
+ }
+ node = node.parentNode;
+ }
}
-
- if (parentList) {
- if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
- removeList(editor, listName);
- } else {
- var bookmark = Bookmark.createBookmark(editor.selection.getRng(true));
- updateListWithDetails(editor.dom, parentList, detail);
- mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));
- editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
+ for (i = 0; i < listElements.length; i++) {
+ if (!outdent(editor, listElements[i]) && i === 0) {
+ break;
}
- } else {
- applyList(editor, listName, detail);
}
- };
-
- var toggleList = function (editor, listName, detail) {
- var parentList = Selection.getParentList(editor);
- var selectedSubLists = Selection.getSelectedSubLists(editor);
-
- detail = detail ? detail : {};
+ editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+ editor.nodeChanged();
+ return true;
+ }
+ };
+ var $_6pbactghjjgweckp = {
+ outdent: outdent,
+ outdentSelection: outdentSelection
+ };
- if (parentList && selectedSubLists.length > 0) {
- toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);
- } else {
- toggleSingleList(editor, parentList, listName, detail);
+ var updateListStyle = function (dom, el, detail) {
+ var type = detail['list-style-type'] ? detail['list-style-type'] : null;
+ dom.setStyle(el, 'list-style-type', type);
+ };
+ var setAttribs = function (elm, attrs) {
+ global$5.each(attrs, function (value, key) {
+ elm.setAttribute(key, value);
+ });
+ };
+ var updateListAttrs = function (dom, el, detail) {
+ setAttribs(el, detail['list-attributes']);
+ global$5.each(dom.select('li', el), function (li) {
+ setAttribs(li, detail['list-item-attributes']);
+ });
+ };
+ var updateListWithDetails = function (dom, el, detail) {
+ updateListStyle(dom, el, detail);
+ updateListAttrs(dom, el, detail);
+ };
+ var removeStyles = function (dom, element, styles) {
+ global$5.each(styles, function (style) {
+ var _a;
+ return dom.setStyle(element, (_a = {}, _a[style] = '', _a));
+ });
+ };
+ var getEndPointNode = function (editor, rng, start, root) {
+ var container, offset;
+ container = rng[start ? 'startContainer' : 'endContainer'];
+ offset = rng[start ? 'startOffset' : 'endOffset'];
+ if (container.nodeType === 1) {
+ container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
+ }
+ if (!start && $_okk1ogljjgweckx.isBr(container.nextSibling)) {
+ container = container.nextSibling;
+ }
+ while (container.parentNode !== root) {
+ if ($_okk1ogljjgweckx.isTextBlock(editor, container)) {
+ return container;
}
- };
-
- return {
- toggleList: toggleList,
- removeList: removeList,
- mergeWithAdjacentLists: mergeWithAdjacentLists
- };
- }
-);
-
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.TreeWalker',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.TreeWalker');
- }
-);
-
-/**
- * Delete.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.core.Delete',
- [
- 'tinymce.core.dom.RangeUtils',
- 'tinymce.core.dom.TreeWalker',
- 'tinymce.core.util.VK',
- 'tinymce.plugins.lists.actions.ToggleList',
- 'tinymce.plugins.lists.core.Bookmark',
- 'tinymce.plugins.lists.core.NodeType',
- 'tinymce.plugins.lists.core.NormalizeLists',
- 'tinymce.plugins.lists.core.Range',
- 'tinymce.plugins.lists.core.Selection'
- ],
- function (RangeUtils, TreeWalker, VK, ToggleList, Bookmark, NodeType, NormalizeLists, Range, Selection) {
- var findNextCaretContainer = function (editor, rng, isForward) {
- var node = rng.startContainer, offset = rng.startOffset;
- var nonEmptyBlocks, walker;
-
- if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) {
- return node;
+ if (/^(TD|TH)$/.test(container.parentNode.nodeName)) {
+ return container;
}
-
- nonEmptyBlocks = editor.schema.getNonEmptyElements();
- if (node.nodeType === 1) {
- node = RangeUtils.getNode(node, offset);
+ container = container.parentNode;
+ }
+ return container;
+ };
+ var getSelectedTextBlocks = function (editor, rng, root) {
+ var textBlocks = [], dom = editor.dom;
+ var startNode = getEndPointNode(editor, rng, true, root);
+ var endNode = getEndPointNode(editor, rng, false, root);
+ var block;
+ var siblings = [];
+ for (var node = startNode; node; node = node.nextSibling) {
+ siblings.push(node);
+ if (node === endNode) {
+ break;
}
-
- walker = new TreeWalker(node, editor.getBody());
-
- // Delete at <li>|<br></li> then jump over the bogus br
- if (isForward) {
- if (NodeType.isBogusBr(editor.dom, node)) {
- walker.next();
- }
+ }
+ global$5.each(siblings, function (node) {
+ if ($_okk1ogljjgweckx.isTextBlock(editor, node)) {
+ textBlocks.push(node);
+ block = null;
+ return;
}
-
- while ((node = walker[isForward ? 'next' : 'prev2']())) {
- if (node.nodeName === 'LI' && !node.hasChildNodes()) {
- return node;
- }
-
- if (nonEmptyBlocks[node.nodeName]) {
- return node;
+ if (dom.isBlock(node) || $_okk1ogljjgweckx.isBr(node)) {
+ if ($_okk1ogljjgweckx.isBr(node)) {
+ dom.remove(node);
}
-
- if (node.nodeType === 3 && node.data.length > 0) {
- return node;
+ block = null;
+ return;
+ }
+ var nextSibling = node.nextSibling;
+ if (global$4.isBookmarkNode(node)) {
+ if ($_okk1ogljjgweckx.isTextBlock(editor, nextSibling) || !nextSibling && node.parentNode === root) {
+ block = null;
+ return;
}
}
- };
-
- var hasOnlyOneBlockChild = function (dom, elm) {
- var childNodes = elm.childNodes;
- return childNodes.length === 1 && !NodeType.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);
- };
-
- var unwrapSingleBlockChild = function (dom, elm) {
- if (hasOnlyOneBlockChild(dom, elm)) {
- dom.remove(elm.firstChild, true);
+ if (!block) {
+ block = dom.create('p');
+ node.parentNode.insertBefore(block, node);
+ textBlocks.push(block);
}
- };
-
- var moveChildren = function (dom, fromElm, toElm) {
- var node, targetElm;
-
- targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;
- unwrapSingleBlockChild(dom, fromElm);
-
- if (!NodeType.isEmpty(dom, fromElm, true)) {
- while ((node = fromElm.firstChild)) {
- targetElm.appendChild(node);
- }
+ block.appendChild(node);
+ });
+ return textBlocks;
+ };
+ var hasCompatibleStyle = function (dom, sib, detail) {
+ var sibStyle = dom.getStyle(sib, 'list-style-type');
+ var detailStyle = detail ? detail['list-style-type'] : '';
+ detailStyle = detailStyle === null ? '' : detailStyle;
+ return sibStyle === detailStyle;
+ };
+ var applyList = function (editor, listName, detail) {
+ if (detail === void 0) {
+ detail = {};
+ }
+ var rng = editor.selection.getRng(true);
+ var bookmark;
+ var listItemName = 'LI';
+ var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, editor.selection.getStart(true));
+ var dom = editor.dom;
+ if (dom.getContentEditable(editor.selection.getNode()) === 'false') {
+ return;
+ }
+ listName = listName.toUpperCase();
+ if (listName === 'DL') {
+ listItemName = 'DT';
+ }
+ bookmark = $_2nx1i4gjjjgweckt.createBookmark(rng);
+ global$5.each(getSelectedTextBlocks(editor, rng, root), function (block) {
+ var listBlock, sibling;
+ sibling = block.previousSibling;
+ if (sibling && $_okk1ogljjgweckx.isListNode(sibling) && sibling.nodeName === listName && hasCompatibleStyle(dom, sibling, detail)) {
+ listBlock = sibling;
+ block = dom.rename(block, listItemName);
+ sibling.appendChild(block);
+ } else {
+ listBlock = dom.create(listName);
+ block.parentNode.insertBefore(listBlock, block);
+ listBlock.appendChild(block);
+ block = dom.rename(block, listItemName);
}
- };
-
- var mergeLiElements = function (dom, fromElm, toElm) {
- var node, listNode, ul = fromElm.parentNode;
-
- if (!NodeType.isChildOfBody(dom, fromElm) || !NodeType.isChildOfBody(dom, toElm)) {
+ removeStyles(dom, block, [
+ 'margin',
+ 'margin-right',
+ 'margin-bottom',
+ 'margin-left',
+ 'margin-top',
+ 'padding',
+ 'padding-right',
+ 'padding-bottom',
+ 'padding-left',
+ 'padding-top'
+ ]);
+ updateListWithDetails(dom, listBlock, detail);
+ mergeWithAdjacentLists(editor.dom, listBlock);
+ });
+ editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+ };
+ var removeList = function (editor) {
+ var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true));
+ var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, editor.selection.getStart(true));
+ var listItems = $_3xb1cggnjjgwecl3.getSelectedListItems(editor);
+ var emptyListItems = global$5.grep(listItems, function (li) {
+ return editor.dom.isEmpty(li);
+ });
+ listItems = global$5.grep(listItems, function (li) {
+ return !editor.dom.isEmpty(li);
+ });
+ global$5.each(emptyListItems, function (li) {
+ if ($_okk1ogljjgweckx.isEmpty(editor.dom, li)) {
+ $_6pbactghjjgweckp.outdent(editor, li);
return;
}
-
- if (NodeType.isListNode(toElm.lastChild)) {
- listNode = toElm.lastChild;
+ });
+ global$5.each(listItems, function (li) {
+ var node, rootList;
+ if (li.parentNode === editor.getBody()) {
+ return;
}
-
- if (ul === toElm.lastChild) {
- if (NodeType.isBr(ul.previousSibling)) {
- dom.remove(ul.previousSibling);
+ for (node = li; node && node !== root; node = node.parentNode) {
+ if ($_okk1ogljjgweckx.isListNode(node)) {
+ rootList = node;
}
}
-
- node = toElm.lastChild;
- if (node && NodeType.isBr(node) && fromElm.hasChildNodes()) {
- dom.remove(node);
+ $_fikiq7gpjjgwecl5.splitList(editor, rootList, li);
+ $_ekd4wzgmjjgwecl1.normalizeLists(editor.dom, rootList.parentNode);
+ });
+ editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+ };
+ var isValidLists = function (list1, list2) {
+ return list1 && list2 && $_okk1ogljjgweckx.isListNode(list1) && list1.nodeName === list2.nodeName;
+ };
+ var hasSameListStyle = function (dom, list1, list2) {
+ var targetStyle = dom.getStyle(list1, 'list-style-type', true);
+ var style = dom.getStyle(list2, 'list-style-type', true);
+ return targetStyle === style;
+ };
+ var hasSameClasses = function (elm1, elm2) {
+ return elm1.className === elm2.className;
+ };
+ var shouldMerge = function (dom, list1, list2) {
+ return isValidLists(list1, list2) && hasSameListStyle(dom, list1, list2) && hasSameClasses(list1, list2);
+ };
+ var mergeWithAdjacentLists = function (dom, listBlock) {
+ var sibling, node;
+ sibling = listBlock.nextSibling;
+ if (shouldMerge(dom, listBlock, sibling)) {
+ while (node = sibling.firstChild) {
+ listBlock.appendChild(node);
}
-
- if (NodeType.isEmpty(dom, toElm, true)) {
- dom.$(toElm).empty();
+ dom.remove(sibling);
+ }
+ sibling = listBlock.previousSibling;
+ if (shouldMerge(dom, listBlock, sibling)) {
+ while (node = sibling.lastChild) {
+ listBlock.insertBefore(node, listBlock.firstChild);
}
-
- moveChildren(dom, fromElm, toElm);
-
- if (listNode) {
- toElm.appendChild(listNode);
+ dom.remove(sibling);
+ }
+ };
+ var updateList = function (dom, list, listName, detail) {
+ if (list.nodeName !== listName) {
+ var newList = dom.rename(list, listName);
+ updateListWithDetails(dom, newList, detail);
+ } else {
+ updateListWithDetails(dom, list, detail);
+ }
+ };
+ var toggleMultipleLists = function (editor, parentList, lists, listName, detail) {
+ if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
+ removeList(editor);
+ } else {
+ var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true));
+ global$5.each([parentList].concat(lists), function (elm) {
+ updateList(editor.dom, elm, listName, detail);
+ });
+ editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+ }
+ };
+ var hasListStyleDetail = function (detail) {
+ return 'list-style-type' in detail;
+ };
+ var toggleSingleList = function (editor, parentList, listName, detail) {
+ if (parentList === editor.getBody()) {
+ return;
+ }
+ if (parentList) {
+ if (parentList.nodeName === listName && !hasListStyleDetail(detail)) {
+ removeList(editor);
+ } else {
+ var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true));
+ updateListWithDetails(editor.dom, parentList, detail);
+ mergeWithAdjacentLists(editor.dom, editor.dom.rename(parentList, listName));
+ editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
}
+ } else {
+ applyList(editor, listName, detail);
+ }
+ };
+ var toggleList = function (editor, listName, detail) {
+ var parentList = $_3xb1cggnjjgwecl3.getParentList(editor);
+ var selectedSubLists = $_3xb1cggnjjgwecl3.getSelectedSubLists(editor);
+ detail = detail ? detail : {};
+ if (parentList && selectedSubLists.length > 0) {
+ toggleMultipleLists(editor, parentList, selectedSubLists, listName, detail);
+ } else {
+ toggleSingleList(editor, parentList, listName, detail);
+ }
+ };
+ var $_aek3i3gejjgwecki = {
+ toggleList: toggleList,
+ removeList: removeList,
+ mergeWithAdjacentLists: mergeWithAdjacentLists
+ };
- dom.remove(fromElm);
-
- if (NodeType.isEmpty(dom, ul) && ul !== dom.getRoot()) {
- dom.remove(ul);
+ var findNextCaretContainer = function (editor, rng, isForward, root) {
+ var node = rng.startContainer;
+ var offset = rng.startOffset;
+ var nonEmptyBlocks, walker;
+ if (node.nodeType === 3 && (isForward ? offset < node.data.length : offset > 0)) {
+ return node;
+ }
+ nonEmptyBlocks = editor.schema.getNonEmptyElements();
+ if (node.nodeType === 1) {
+ node = global$1.getNode(node, offset);
+ }
+ walker = new global$2(node, root);
+ if (isForward) {
+ if ($_okk1ogljjgweckx.isBogusBr(editor.dom, node)) {
+ walker.next();
}
- };
-
- var mergeIntoEmptyLi = function (editor, fromLi, toLi) {
- editor.dom.$(toLi).empty();
- mergeLiElements(editor.dom, fromLi, toLi);
- editor.selection.setCursorLocation(toLi);
- };
-
- var mergeForward = function (editor, rng, fromLi, toLi) {
- var dom = editor.dom;
-
- if (dom.isEmpty(toLi)) {
- mergeIntoEmptyLi(editor, fromLi, toLi);
- } else {
- var bookmark = Bookmark.createBookmark(rng);
- mergeLiElements(dom, fromLi, toLi);
- editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
+ }
+ while (node = walker[isForward ? 'next' : 'prev2']()) {
+ if (node.nodeName === 'LI' && !node.hasChildNodes()) {
+ return node;
}
- };
-
- var mergeBackward = function (editor, rng, fromLi, toLi) {
- var bookmark = Bookmark.createBookmark(rng);
- mergeLiElements(editor.dom, fromLi, toLi);
- editor.selection.setRng(Bookmark.resolveBookmark(bookmark));
- };
-
- var backspaceDeleteFromListToListCaret = function (editor, isForward) {
- var dom = editor.dom, selection = editor.selection;
- var li = dom.getParent(selection.getStart(), 'LI'), ul, rng, otherLi;
-
- if (li) {
- ul = li.parentNode;
- if (ul === editor.getBody() && NodeType.isEmpty(dom, ul)) {
- return true;
- }
-
- rng = Range.normalizeRange(selection.getRng(true));
- otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward), 'LI');
-
- if (otherLi && otherLi !== li) {
- if (isForward) {
- mergeForward(editor, rng, otherLi, li);
- } else {
- mergeBackward(editor, rng, li, otherLi);
- }
-
- return true;
- } else if (!otherLi) {
- if (!isForward && ToggleList.removeList(editor, ul.nodeName)) {
- return true;
- }
- }
+ if (nonEmptyBlocks[node.nodeName]) {
+ return node;
}
-
- return false;
- };
-
- var removeBlock = function (dom, block) {
- var parentBlock = dom.getParent(block.parentNode, dom.isBlock);
-
- dom.remove(block);
- if (parentBlock && dom.isEmpty(parentBlock)) {
- dom.remove(parentBlock);
+ if (node.nodeType === 3 && node.data.length > 0) {
+ return node;
}
- };
-
- var backspaceDeleteIntoListCaret = function (editor, isForward) {
- var dom = editor.dom;
- var block = dom.getParent(editor.selection.getStart(), dom.isBlock);
-
- if (block && dom.isEmpty(block)) {
- var rng = Range.normalizeRange(editor.selection.getRng(true));
- var otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward), 'LI');
-
- if (otherLi) {
- editor.undoManager.transact(function () {
- removeBlock(dom, block);
- ToggleList.mergeWithAdjacentLists(dom, otherLi.parentNode);
- editor.selection.select(otherLi, true);
- editor.selection.collapse(isForward);
- });
-
+ }
+ };
+ var hasOnlyOneBlockChild = function (dom, elm) {
+ var childNodes = elm.childNodes;
+ return childNodes.length === 1 && !$_okk1ogljjgweckx.isListNode(childNodes[0]) && dom.isBlock(childNodes[0]);
+ };
+ var unwrapSingleBlockChild = function (dom, elm) {
+ if (hasOnlyOneBlockChild(dom, elm)) {
+ dom.remove(elm.firstChild, true);
+ }
+ };
+ var moveChildren = function (dom, fromElm, toElm) {
+ var node, targetElm;
+ targetElm = hasOnlyOneBlockChild(dom, toElm) ? toElm.firstChild : toElm;
+ unwrapSingleBlockChild(dom, fromElm);
+ if (!$_okk1ogljjgweckx.isEmpty(dom, fromElm, true)) {
+ while (node = fromElm.firstChild) {
+ targetElm.appendChild(node);
+ }
+ }
+ };
+ var mergeLiElements = function (dom, fromElm, toElm) {
+ var node, listNode;
+ var ul = fromElm.parentNode;
+ if (!$_okk1ogljjgweckx.isChildOfBody(dom, fromElm) || !$_okk1ogljjgweckx.isChildOfBody(dom, toElm)) {
+ return;
+ }
+ if ($_okk1ogljjgweckx.isListNode(toElm.lastChild)) {
+ listNode = toElm.lastChild;
+ }
+ if (ul === toElm.lastChild) {
+ if ($_okk1ogljjgweckx.isBr(ul.previousSibling)) {
+ dom.remove(ul.previousSibling);
+ }
+ }
+ node = toElm.lastChild;
+ if (node && $_okk1ogljjgweckx.isBr(node) && fromElm.hasChildNodes()) {
+ dom.remove(node);
+ }
+ if ($_okk1ogljjgweckx.isEmpty(dom, toElm, true)) {
+ dom.$(toElm).empty();
+ }
+ moveChildren(dom, fromElm, toElm);
+ if (listNode) {
+ toElm.appendChild(listNode);
+ }
+ dom.remove(fromElm);
+ if ($_okk1ogljjgweckx.isEmpty(dom, ul) && ul !== dom.getRoot()) {
+ dom.remove(ul);
+ }
+ };
+ var mergeIntoEmptyLi = function (editor, fromLi, toLi) {
+ editor.dom.$(toLi).empty();
+ mergeLiElements(editor.dom, fromLi, toLi);
+ editor.selection.setCursorLocation(toLi);
+ };
+ var mergeForward = function (editor, rng, fromLi, toLi) {
+ var dom = editor.dom;
+ if (dom.isEmpty(toLi)) {
+ mergeIntoEmptyLi(editor, fromLi, toLi);
+ } else {
+ var bookmark = $_2nx1i4gjjjgweckt.createBookmark(rng);
+ mergeLiElements(dom, fromLi, toLi);
+ editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+ }
+ };
+ var mergeBackward = function (editor, rng, fromLi, toLi) {
+ var bookmark = $_2nx1i4gjjjgweckt.createBookmark(rng);
+ mergeLiElements(editor.dom, fromLi, toLi);
+ var resolvedBookmark = $_2nx1i4gjjjgweckt.resolveBookmark(bookmark);
+ editor.selection.setRng(resolvedBookmark);
+ };
+ var backspaceDeleteFromListToListCaret = function (editor, isForward) {
+ var dom = editor.dom, selection = editor.selection;
+ var selectionStartElm = selection.getStart();
+ var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, selectionStartElm);
+ var li = dom.getParent(selection.getStart(), 'LI', root);
+ var ul, rng, otherLi;
+ if (li) {
+ ul = li.parentNode;
+ if (ul === editor.getBody() && $_okk1ogljjgweckx.isEmpty(dom, ul)) {
+ return true;
+ }
+ rng = $_a9cyhvgkjjgweckv.normalizeRange(selection.getRng(true));
+ otherLi = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
+ if (otherLi && otherLi !== li) {
+ if (isForward) {
+ mergeForward(editor, rng, otherLi, li);
+ } else {
+ mergeBackward(editor, rng, li, otherLi);
+ }
+ return true;
+ } else if (!otherLi) {
+ if (!isForward && $_aek3i3gejjgwecki.removeList(editor)) {
return true;
}
}
-
- return false;
- };
-
- var backspaceDeleteCaret = function (editor, isForward) {
- return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);
- };
-
- var backspaceDeleteRange = function (editor) {
- var startListParent = editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD');
-
- if (startListParent || Selection.getSelectedListItems(editor).length > 0) {
+ }
+ return false;
+ };
+ var removeBlock = function (dom, block, root) {
+ var parentBlock = dom.getParent(block.parentNode, dom.isBlock, root);
+ dom.remove(block);
+ if (parentBlock && dom.isEmpty(parentBlock)) {
+ dom.remove(parentBlock);
+ }
+ };
+ var backspaceDeleteIntoListCaret = function (editor, isForward) {
+ var dom = editor.dom;
+ var selectionStartElm = editor.selection.getStart();
+ var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, selectionStartElm);
+ var block = dom.getParent(selectionStartElm, dom.isBlock, root);
+ if (block && dom.isEmpty(block)) {
+ var rng = $_a9cyhvgkjjgweckv.normalizeRange(editor.selection.getRng(true));
+ var otherLi_1 = dom.getParent(findNextCaretContainer(editor, rng, isForward, root), 'LI', root);
+ if (otherLi_1) {
editor.undoManager.transact(function () {
- editor.execCommand('Delete');
- NormalizeLists.normalizeLists(editor.dom, editor.getBody());
+ removeBlock(dom, block, root);
+ $_aek3i3gejjgwecki.mergeWithAdjacentLists(dom, otherLi_1.parentNode);
+ editor.selection.select(otherLi_1, true);
+ editor.selection.collapse(isForward);
});
-
return true;
}
-
- return false;
- };
-
- var backspaceDelete = function (editor, isForward) {
- return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);
- };
-
- var setup = function (editor) {
- editor.on('keydown', function (e) {
- if (e.keyCode === VK.BACKSPACE) {
- if (backspaceDelete(editor, false)) {
- e.preventDefault();
- }
- } else if (e.keyCode === VK.DELETE) {
- if (backspaceDelete(editor, true)) {
- e.preventDefault();
- }
- }
+ }
+ return false;
+ };
+ var backspaceDeleteCaret = function (editor, isForward) {
+ return backspaceDeleteFromListToListCaret(editor, isForward) || backspaceDeleteIntoListCaret(editor, isForward);
+ };
+ var backspaceDeleteRange = function (editor) {
+ var selectionStartElm = editor.selection.getStart();
+ var root = $_3xb1cggnjjgwecl3.getClosestListRootElm(editor, selectionStartElm);
+ var startListParent = editor.dom.getParent(selectionStartElm, 'LI,DT,DD', root);
+ if (startListParent || $_3xb1cggnjjgwecl3.getSelectedListItems(editor).length > 0) {
+ editor.undoManager.transact(function () {
+ editor.execCommand('Delete');
+ $_ekd4wzgmjjgwecl1.normalizeLists(editor.dom, editor.getBody());
});
- };
-
- return {
- setup: setup,
- backspaceDelete: backspaceDelete
- };
- }
-);
-
-
-/**
- * plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.lists.Plugin',
- [
- 'tinymce.core.PluginManager',
- 'tinymce.core.util.Tools',
- 'tinymce.core.util.VK',
- 'tinymce.plugins.lists.actions.Indent',
- 'tinymce.plugins.lists.actions.Outdent',
- 'tinymce.plugins.lists.actions.ToggleList',
- 'tinymce.plugins.lists.core.Delete',
- 'tinymce.plugins.lists.core.NodeType',
- 'tinymce.plugins.lists.core.Selection'
- ],
- function (PluginManager, Tools, VK, Indent, Outdent, ToggleList, Delete, NodeType, Selection) {
- var queryListCommandState = function (editor, listName) {
- return function () {
- var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');
- return parentList && parentList.nodeName === listName;
- };
- };
-
- var setupCommands = function (editor) {
- editor.on('BeforeExecCommand', function (e) {
- var cmd = e.command.toLowerCase(), isHandled;
-
- if (cmd === "indent") {
- if (Indent.indentSelection(editor)) {
- isHandled = true;
- }
- } else if (cmd === "outdent") {
- if (Outdent.outdentSelection(editor)) {
- isHandled = true;
- }
+ return true;
+ }
+ return false;
+ };
+ var backspaceDelete = function (editor, isForward) {
+ return editor.selection.isCollapsed() ? backspaceDeleteCaret(editor, isForward) : backspaceDeleteRange(editor);
+ };
+ var setup = function (editor) {
+ editor.on('keydown', function (e) {
+ if (e.keyCode === global$3.BACKSPACE) {
+ if (backspaceDelete(editor, false)) {
+ e.preventDefault();
}
-
- if (isHandled) {
- editor.fire('ExecCommand', { command: e.command });
+ } else if (e.keyCode === global$3.DELETE) {
+ if (backspaceDelete(editor, true)) {
e.preventDefault();
- return true;
}
- });
-
- editor.addCommand('InsertUnorderedList', function (ui, detail) {
- ToggleList.toggleList(editor, 'UL', detail);
- });
-
- editor.addCommand('InsertOrderedList', function (ui, detail) {
- ToggleList.toggleList(editor, 'OL', detail);
- });
+ }
+ });
+ };
+ var $_brhyezgajjgweck7 = {
+ setup: setup,
+ backspaceDelete: backspaceDelete
+ };
- editor.addCommand('InsertDefinitionList', function (ui, detail) {
- ToggleList.toggleList(editor, 'DL', detail);
- });
+ var get = function (editor) {
+ return {
+ backspaceDelete: function (isForward) {
+ $_brhyezgajjgweck7.backspaceDelete(editor, isForward);
+ }
};
+ };
+ var $_nb3yvg9jjgweck5 = { get: get };
+
+ var DOM$5 = global$6.DOM;
+ var mergeLists = function (from, to) {
+ var node;
+ if ($_okk1ogljjgweckx.isListNode(from)) {
+ while (node = from.firstChild) {
+ to.appendChild(node);
+ }
+ DOM$5.remove(from);
+ }
+ };
+ var indent = function (li) {
+ var sibling, newList, listStyle;
+ if (li.nodeName === 'DT') {
+ DOM$5.rename(li, 'DD');
+ return true;
+ }
+ sibling = li.previousSibling;
+ if (sibling && $_okk1ogljjgweckx.isListNode(sibling)) {
+ sibling.appendChild(li);
+ return true;
+ }
+ if (sibling && sibling.nodeName === 'LI' && $_okk1ogljjgweckx.isListNode(sibling.lastChild)) {
+ sibling.lastChild.appendChild(li);
+ mergeLists(li.lastChild, sibling.lastChild);
+ return true;
+ }
+ sibling = li.nextSibling;
+ if (sibling && $_okk1ogljjgweckx.isListNode(sibling)) {
+ sibling.insertBefore(li, sibling.firstChild);
+ return true;
+ }
+ sibling = li.previousSibling;
+ if (sibling && sibling.nodeName === 'LI') {
+ newList = DOM$5.create(li.parentNode.nodeName);
+ listStyle = DOM$5.getStyle(li.parentNode, 'listStyleType');
+ if (listStyle) {
+ DOM$5.setStyle(newList, 'listStyleType', listStyle);
+ }
+ sibling.appendChild(newList);
+ newList.appendChild(li);
+ mergeLists(li.lastChild, newList);
+ return true;
+ }
+ return false;
+ };
+ var indentSelection = function (editor) {
+ var listElements = $_3xb1cggnjjgwecl3.getSelectedListItems(editor);
+ if (listElements.length) {
+ var bookmark = $_2nx1i4gjjjgweckt.createBookmark(editor.selection.getRng(true));
+ for (var i = 0; i < listElements.length; i++) {
+ if (!indent(listElements[i]) && i === 0) {
+ break;
+ }
+ }
+ editor.selection.setRng($_2nx1i4gjjjgweckt.resolveBookmark(bookmark));
+ editor.nodeChanged();
+ return true;
+ }
+ };
+ var $_3rkwagtjjgweclf = { indentSelection: indentSelection };
- var setupStateHandlers = function (editor) {
- editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));
- editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));
- editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));
+ var queryListCommandState = function (editor, listName) {
+ return function () {
+ var parentList = editor.dom.getParent(editor.selection.getStart(), 'UL,OL,DL');
+ return parentList && parentList.nodeName === listName;
};
-
- var setupTabKey = function (editor) {
- editor.on('keydown', function (e) {
- // Check for tab but not ctrl/cmd+tab since it switches browser tabs
- if (e.keyCode !== 9 || VK.metaKeyPressed(e)) {
- return;
+ };
+ var register = function (editor) {
+ editor.on('BeforeExecCommand', function (e) {
+ var cmd = e.command.toLowerCase();
+ var isHandled;
+ if (cmd === 'indent') {
+ if ($_3rkwagtjjgweclf.indentSelection(editor)) {
+ isHandled = true;
}
-
- if (editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) {
- e.preventDefault();
-
- if (e.shiftKey) {
- Outdent.outdentSelection(editor);
- } else {
- Indent.indentSelection(editor);
- }
+ } else if (cmd === 'outdent') {
+ if ($_6pbactghjjgweckp.outdentSelection(editor)) {
+ isHandled = true;
}
- });
- };
-
- var setupUi = function (editor) {
- var listState = function (listName) {
- return function () {
- var self = this;
-
- editor.on('NodeChange', function (e) {
- var lists = Tools.grep(e.parents, NodeType.isListNode);
- self.active(lists.length > 0 && lists[0].nodeName === listName);
- });
- };
- };
-
- var hasPlugin = function (editor, plugin) {
- var plugins = editor.settings.plugins ? editor.settings.plugins : '';
- return Tools.inArray(plugins.split(/[ ,]/), plugin) !== -1;
- };
-
- if (!hasPlugin(editor, 'advlist')) {
- editor.addButton('numlist', {
- title: 'Numbered list',
- cmd: 'InsertOrderedList',
- onPostRender: listState('OL')
- });
-
- editor.addButton('bullist', {
- title: 'Bullet list',
- cmd: 'InsertUnorderedList',
- onPostRender: listState('UL')
- });
}
+ if (isHandled) {
+ editor.fire('ExecCommand', { command: e.command });
+ e.preventDefault();
+ return true;
+ }
+ });
+ editor.addCommand('InsertUnorderedList', function (ui, detail) {
+ $_aek3i3gejjgwecki.toggleList(editor, 'UL', detail);
+ });
+ editor.addCommand('InsertOrderedList', function (ui, detail) {
+ $_aek3i3gejjgwecki.toggleList(editor, 'OL', detail);
+ });
+ editor.addCommand('InsertDefinitionList', function (ui, detail) {
+ $_aek3i3gejjgwecki.toggleList(editor, 'DL', detail);
+ });
+ editor.addQueryStateHandler('InsertUnorderedList', queryListCommandState(editor, 'UL'));
+ editor.addQueryStateHandler('InsertOrderedList', queryListCommandState(editor, 'OL'));
+ editor.addQueryStateHandler('InsertDefinitionList', queryListCommandState(editor, 'DL'));
+ };
+ var $_blnfs1gsjjgwecld = { register: register };
- editor.addButton('indent', {
- icon: 'indent',
- title: 'Increase indent',
- cmd: 'Indent',
- onPostRender: function (e) {
- var ctrl = e.control;
+ var shouldIndentOnTab = function (editor) {
+ return editor.getParam('lists_indent_on_tab', true);
+ };
+ var $_8obsbgvjjgweclk = { shouldIndentOnTab: shouldIndentOnTab };
- editor.on('nodechange', function () {
- var listItemBlocks = Selection.getSelectedListItems(editor);
- var disable = listItemBlocks.length > 0 && NodeType.isFirstChild(listItemBlocks[0]);
- ctrl.disabled(disable);
- });
+ var setupTabKey = function (editor) {
+ editor.on('keydown', function (e) {
+ if (e.keyCode !== global$3.TAB || global$3.metaKeyPressed(e)) {
+ return;
+ }
+ if (editor.dom.getParent(editor.selection.getStart(), 'LI,DT,DD')) {
+ e.preventDefault();
+ if (e.shiftKey) {
+ $_6pbactghjjgweckp.outdentSelection(editor);
+ } else {
+ $_3rkwagtjjgweclf.indentSelection(editor);
}
+ }
+ });
+ };
+ var setup$1 = function (editor) {
+ if ($_8obsbgvjjgweclk.shouldIndentOnTab(editor)) {
+ setupTabKey(editor);
+ }
+ $_brhyezgajjgweck7.setup(editor);
+ };
+ var $_ees9z9gujjgwecli = { setup: setup$1 };
+
+ var findIndex = function (list, predicate) {
+ for (var index = 0; index < list.length; index++) {
+ var element = list[index];
+ if (predicate(element)) {
+ return index;
+ }
+ }
+ return -1;
+ };
+ var listState = function (editor, listName) {
+ return function (e) {
+ var ctrl = e.control;
+ editor.on('NodeChange', function (e) {
+ var tableCellIndex = findIndex(e.parents, $_okk1ogljjgweckx.isTableCellNode);
+ var parents = tableCellIndex !== -1 ? e.parents.slice(0, tableCellIndex) : e.parents;
+ var lists = global$5.grep(parents, $_okk1ogljjgweckx.isListNode);
+ ctrl.active(lists.length > 0 && lists[0].nodeName === listName);
});
};
-
- PluginManager.add('lists', function (editor) {
- setupUi(editor);
- Delete.setup(editor);
-
- editor.on('init', function () {
- setupCommands(editor);
- setupStateHandlers(editor);
- if (editor.getParam('lists_indent_on_tab', true)) {
- setupTabKey(editor);
- }
+ };
+ var indentPostRender = function (editor) {
+ return function (e) {
+ var ctrl = e.control;
+ editor.on('nodechange', function () {
+ var listItemBlocks = $_3xb1cggnjjgwecl3.getSelectedListItems(editor);
+ var disable = listItemBlocks.length > 0 && $_okk1ogljjgweckx.isFirstChild(listItemBlocks[0]);
+ ctrl.disabled(disable);
});
-
- return {
- backspaceDelete: function (isForward) {
- Delete.backspaceDelete(editor, isForward);
- }
- };
+ };
+ };
+ var register$1 = function (editor) {
+ var hasPlugin = function (editor, plugin) {
+ var plugins = editor.settings.plugins ? editor.settings.plugins : '';
+ return global$5.inArray(plugins.split(/[ ,]/), plugin) !== -1;
+ };
+ if (!hasPlugin(editor, 'advlist')) {
+ editor.addButton('numlist', {
+ active: false,
+ title: 'Numbered list',
+ cmd: 'InsertOrderedList',
+ onPostRender: listState(editor, 'OL')
+ });
+ editor.addButton('bullist', {
+ active: false,
+ title: 'Bullet list',
+ cmd: 'InsertUnorderedList',
+ onPostRender: listState(editor, 'UL')
+ });
+ }
+ editor.addButton('indent', {
+ icon: 'indent',
+ title: 'Increase indent',
+ cmd: 'Indent',
+ onPostRender: indentPostRender(editor)
});
-
- return function () { };
+ };
+ var $_s7o0sgwjjgweclm = { register: register$1 };
+
+ global.add('lists', function (editor) {
+ $_ees9z9gujjgwecli.setup(editor);
+ $_s7o0sgwjjgweclm.register(editor);
+ $_blnfs1gsjjgwecld.register(editor);
+ return $_nb3yvg9jjgweck5.get(editor);
+ });
+ function Plugin () {
}
-);
+ return Plugin;
-dem('tinymce.plugins.lists.Plugin')();
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("a",tinymce.util.Tools.resolve),g("1",["a"],function(a){return a("tinymce.PluginManager")}),g("2",["a"],function(a){return a("tinymce.util.Tools")}),g("3",["a"],function(a){return a("tinymce.util.VK")}),g("b",["a"],function(a){return a("tinymce.dom.DOMUtils")}),g("8",[],function(){var a=function(a){return a&&3===a.nodeType},b=function(a){return a&&/^(OL|UL|DL)$/.test(a.nodeName)},c=function(a){return a&&/^(LI|DT|DD)$/.test(a.nodeName)},d=function(a){return a&&"BR"===a.nodeName},e=function(a){return a.parentNode.firstChild===a},f=function(a){return a.parentNode.lastChild===a},g=function(a,b){return b&&!!a.schema.getTextBlockElements()[b.nodeName]},h=function(a,b){return a&&a.nodeName in b},i=function(a,b){return!!d(b)&&!(!a.isBlock(b.nextSibling)||d(b.previousSibling))},j=function(a,b,c){var d=a.isEmpty(b);return!(c&&a.select("span[data-mce-type=bookmark]",b).length>0)&&d},k=function(a,b){return a.isChildOf(b,a.getRoot())};return{isTextNode:a,isListNode:b,isListItemNode:c,isBr:d,isFirstChild:e,isLastChild:f,isTextBlock:g,isBlock:h,isBogusBr:i,isEmpty:j,isChildOfBody:k}}),g("i",["a"],function(a){return a("tinymce.dom.RangeUtils")}),g("k",["i","8"],function(a,b){var c=function(c,d){var e=a.getNode(c,d);if(b.isListItemNode(c)&&b.isTextNode(e)){var f=d>=c.childNodes.length?e.data.length:0;return{container:e,offset:f}}return{container:c,offset:d}},d=function(a){var b=a.cloneRange(),d=c(a.startContainer,a.startOffset);b.setStart(d.container,d.offset);var e=c(a.endContainer,a.endOffset);return b.setEnd(e.container,e.offset),b};return{getNormalizedEndPoint:c,normalizeRange:d}}),g("c",["b","8","k"],function(a,b,c){var d=a.DOM,e=function(a){var b={},c=function(c){var e,f,g;f=a[c?"startContainer":"endContainer"],g=a[c?"startOffset":"endOffset"],1===f.nodeType&&(e=d.create("span",{"data-mce-type":"bookmark"}),f.hasChildNodes()?(g=Math.min(g,f.childNodes.length-1),c?f.insertBefore(e,f.childNodes[g]):d.insertAfter(e,f.childNodes[g])):f.appendChild(e),f=e,g=0),b[c?"startContainer":"endContainer"]=f,b[c?"startOffset":"endOffset"]=g};return c(!0),a.collapsed||c(),b},f=function(a){function b(b){var c,e,f,g=function(a){for(var b=a.parentNode.firstChild,c=0;b;){if(b===a)return c;1===b.nodeType&&"bookmark"===b.getAttribute("data-mce-type")||c++,b=b.nextSibling}return-1};c=f=a[b?"startContainer":"endContainer"],e=a[b?"startOffset":"endOffset"],c&&(1===c.nodeType&&(e=g(c),c=c.parentNode,d.remove(f)),a[b?"startContainer":"endContainer"]=c,a[b?"startOffset":"endOffset"]=e)}b(!0),b();var e=d.createRng();return e.setStart(a.startContainer,a.startOffset),a.endContainer&&e.setEnd(a.endContainer,a.endOffset),c.normalizeRange(e)};return{createBookmark:e,resolveBookmark:f}}),g("d",["a"],function(a){return a("tinymce.dom.DomQuery")}),g("9",["d","2","8"],function(a,b,c){var d=function(a){return a.dom.getParent(a.selection.getStart(!0),"OL,UL,DL")},e=function(a){var e=d(a);return b.grep(a.selection.getSelectedBlocks(),function(a){return c.isListNode(a)&&e!==a})},f=function(c,d){var e=b.map(d,function(a){var b=c.dom.getParent(a,"li,dd,dt",c.getBody());return b?b:a});return a.unique(e)},g=function(a){var d=a.selection.getSelectedBlocks();return b.grep(f(a,d),function(a){return c.isListItemNode(a)})};return{getParentList:d,getSelectedSubLists:e,getSelectedListItems:g}}),g("4",["b","c","8","9"],function(a,b,c,d){var e=a.DOM,f=function(a,b){var d;if(c.isListNode(a)){for(;d=a.firstChild;)b.appendChild(d);e.remove(a)}},g=function(a){var b,d,g;return"DT"===a.nodeName?(e.rename(a,"DD"),!0):(b=a.previousSibling,b&&c.isListNode(b)?(b.appendChild(a),!0):b&&"LI"===b.nodeName&&c.isListNode(b.lastChild)?(b.lastChild.appendChild(a),f(a.lastChild,b.lastChild),!0):(b=a.nextSibling,b&&c.isListNode(b)?(b.insertBefore(a,b.firstChild),!0):(b=a.previousSibling,!(!b||"LI"!==b.nodeName)&&(d=e.create(a.parentNode.nodeName),g=e.getStyle(a.parentNode,"listStyleType"),g&&e.setStyle(d,"listStyleType",g),b.appendChild(d),d.appendChild(a),f(a.lastChild,d),!0))))},h=function(a){var c=d.getSelectedListItems(a);if(c.length){for(var e=b.createBookmark(a.selection.getRng(!0)),f=0;f<c.length&&(g(c[f])||0!==f);f++);return a.selection.setRng(b.resolveBookmark(e)),a.nodeChanged(),!0}};return{indentSelection:h}}),g("e",["b","2","8"],function(a,b,c){var d=a.DOM,e=function(a,b){var e,f=b.parentNode;"LI"===f.nodeName&&f.firstChild===b&&(e=f.previousSibling,e&&"LI"===e.nodeName?(e.appendChild(b),c.isEmpty(a,f)&&d.remove(f)):d.setStyle(f,"listStyleType","none")),c.isListNode(f)&&(e=f.previousSibling,e&&"LI"===e.nodeName&&e.appendChild(b))},f=function(a,c){b.each(b.grep(a.select("ol,ul",c)),function(b){e(a,b)})};return{normalizeList:e,normalizeLists:f}}),g("l",["a"],function(a){return a("tinymce.Env")}),g("g",["b","l","8"],function(a,b,c){var d=a.DOM,e=function(a,e,f){var g,h,i,j=d.createFragment(),k=a.schema.getBlockElements();if(a.settings.forced_root_block&&(f=f||a.settings.forced_root_block),f&&(h=d.create(f),h.tagName===a.settings.forced_root_block&&d.setAttribs(h,a.settings.forced_root_block_attrs),c.isBlock(e.firstChild,k)||j.appendChild(h)),e)for(;g=e.firstChild;){var l=g.nodeName;i||"SPAN"===l&&"bookmark"===g.getAttribute("data-mce-type")||(i=!0),c.isBlock(g,k)?(j.appendChild(g),h=null):f?(h||(h=d.create(f),j.appendChild(h)),h.appendChild(g)):j.appendChild(g)}return a.settings.forced_root_block?i||b.ie&&!(b.ie>10)||h.appendChild(d.create("br",{"data-mce-bogus":"1"})):j.appendChild(d.create("br")),j};return{createNewTextBlock:e}}),g("f",["b","8","g","2"],function(a,b,c,d){var e=a.DOM,f=function(a,f,g,h){var i,j,k,l,m=function(a){d.each(k,function(b){a.parentNode.insertBefore(b,g.parentNode)}),e.remove(a)};for(k=e.select('span[data-mce-type="bookmark"]',f),h=h||c.createNewTextBlock(a,g),i=e.createRng(),i.setStartAfter(g),i.setEndAfter(f),j=i.extractContents(),l=j.firstChild;l;l=l.firstChild)if("LI"===l.nodeName&&a.dom.isEmpty(l)){e.remove(l);break}a.dom.isEmpty(j)||e.insertAfter(j,f),e.insertAfter(h,f),b.isEmpty(a.dom,g.parentNode)&&m(g.parentNode),e.remove(g),b.isEmpty(a.dom,f)&&e.remove(f)};return{splitList:f}}),g("5",["b","c","8","e","9","f","g"],function(a,b,c,d,e,f,g){var h=a.DOM,i=function(a,b){c.isEmpty(a,b)&&h.remove(b)},j=function(a,b){var e,j=b.parentNode,k=j.parentNode;return j===a.getBody()||("DD"===b.nodeName?(h.rename(b,"DT"),!0):c.isFirstChild(b)&&c.isLastChild(b)?("LI"===k.nodeName?(h.insertAfter(b,k),i(a.dom,k),h.remove(j)):c.isListNode(k)?h.remove(j,!0):(k.insertBefore(g.createNewTextBlock(a,b),j),h.remove(j)),!0):c.isFirstChild(b)?("LI"===k.nodeName?(h.insertAfter(b,k),b.appendChild(j),i(a.dom,k)):c.isListNode(k)?k.insertBefore(b,j):(k.insertBefore(g.createNewTextBlock(a,b),j),h.remove(b)),!0):c.isLastChild(b)?("LI"===k.nodeName?h.insertAfter(b,k):c.isListNode(k)?h.insertAfter(b,j):(h.insertAfter(g.createNewTextBlock(a,b),j),h.remove(b)),!0):("LI"===k.nodeName?(j=k,e=g.createNewTextBlock(a,b,"LI")):e=c.isListNode(k)?g.createNewTextBlock(a,b,"LI"):g.createNewTextBlock(a,b),f.splitList(a,j,b,e),d.normalizeLists(a.dom,j.parentNode),!0))},k=function(a){var c=e.getSelectedListItems(a);if(c.length){var d,f,g=b.createBookmark(a.selection.getRng(!0)),h=a.getBody();for(d=c.length;d--;)for(var i=c[d].parentNode;i&&i!==h;){for(f=c.length;f--;)if(c[f]===i){c.splice(d,1);break}i=i.parentNode}for(d=0;d<c.length&&(j(a,c[d])||0!==d);d++);return a.selection.setRng(b.resolveBookmark(g)),a.nodeChanged(),!0}};return{outdent:j,outdentSelection:k}}),g("h",["a"],function(a){return a("tinymce.dom.BookmarkManager")}),g("6",["h","2","5","c","8","e","9","f"],function(a,b,c,d,e,f,g,h){var i=function(a,b,c){var d=c["list-style-type"]?c["list-style-type"]:null;a.setStyle(b,"list-style-type",d)},j=function(a,c){b.each(c,function(b,c){a.setAttribute(c,b)})},k=function(a,c,d){j(c,d["list-attributes"]),b.each(a.select("li",c),function(a){j(a,d["list-item-attributes"])})},l=function(a,b,c){i(a,b,c),k(a,b,c)},m=function(a,b,c){var d,f,g=a.getBody();for(d=b[c?"startContainer":"endContainer"],f=b[c?"startOffset":"endOffset"],1===d.nodeType&&(d=d.childNodes[Math.min(f,d.childNodes.length-1)]||d);d.parentNode!==g;){if(e.isTextBlock(a,d))return d;if(/^(TD|TH)$/.test(d.parentNode.nodeName))return d;d=d.parentNode}return d},n=function(c,d){for(var f,g=[],h=c.getBody(),i=c.dom,j=m(c,d,!0),k=m(c,d,!1),l=[],n=j;n&&(l.push(n),n!==k);n=n.nextSibling);return b.each(l,function(b){if(e.isTextBlock(c,b))return g.push(b),void(f=null);if(i.isBlock(b)||e.isBr(b))return e.isBr(b)&&i.remove(b),void(f=null);var d=b.nextSibling;return a.isBookmarkNode(b)&&(e.isTextBlock(c,d)||!d&&b.parentNode===h)?void(f=null):(f||(f=i.create("p"),b.parentNode.insertBefore(f,b),g.push(f)),void f.appendChild(b))}),g},o=function(a,c,f){var g,h=a.selection.getRng(!0),i="LI",j=a.dom;f=f?f:{},"false"!==j.getContentEditable(a.selection.getNode())&&(c=c.toUpperCase(),"DL"===c&&(i="DT"),g=d.createBookmark(h),b.each(n(a,h),function(b){var d,g,h=function(a){var b=j.getStyle(a,"list-style-type"),c=f?f["list-style-type"]:"";return c=null===c?"":c,b===c};g=b.previousSibling,g&&e.isListNode(g)&&g.nodeName===c&&h(g)?(d=g,b=j.rename(b,i),g.appendChild(b)):(d=j.create(c),b.parentNode.insertBefore(d,b),d.appendChild(b),b=j.rename(b,i)),l(j,d,f),u(a.dom,d)}),a.selection.setRng(d.resolveBookmark(g)))},p=function(a){var i=d.createBookmark(a.selection.getRng(!0)),j=a.getBody(),k=g.getSelectedListItems(a),l=b.grep(k,function(b){return a.dom.isEmpty(b)});k=b.grep(k,function(b){return!a.dom.isEmpty(b)}),b.each(l,function(b){if(e.isEmpty(a.dom,b))return void c.outdent(a,b)}),b.each(k,function(b){var c,d;if(b.parentNode!==a.getBody()){for(c=b;c&&c!==j;c=c.parentNode)e.isListNode(c)&&(d=c);h.splitList(a,d,b),f.normalizeLists(a.dom,d.parentNode)}}),a.selection.setRng(d.resolveBookmark(i))},q=function(a,b){return a&&b&&e.isListNode(a)&&a.nodeName===b.nodeName},r=function(a,b,c){var d=a.getStyle(b,"list-style-type",!0),e=a.getStyle(c,"list-style-type",!0);return d===e},s=function(a,b){return a.className===b.className},t=function(a,b,c){return q(b,c)&&r(a,b,c)&&s(b,c)},u=function(a,b){var c,d;if(c=b.nextSibling,t(a,b,c)){for(;d=c.firstChild;)b.appendChild(d);a.remove(c)}if(c=b.previousSibling,t(a,b,c)){for(;d=c.lastChild;)b.insertBefore(d,b.firstChild);a.remove(c)}},v=function(a,b,c,d){if(b.nodeName!==c){var e=a.rename(b,c);l(a,e,d)}else l(a,b,d)},w=function(a,c,e,f,g){if(c.nodeName!==f||x(g)){var h=d.createBookmark(a.selection.getRng(!0));b.each([c].concat(e),function(b){v(a.dom,b,f,g)}),a.selection.setRng(d.resolveBookmark(h))}else p(a,f)},x=function(a){return"list-style-type"in a},y=function(a,b,c,e){if(b!==a.getBody())if(b)if(b.nodeName!==c||x(e)){var f=d.createBookmark(a.selection.getRng(!0));l(a.dom,b,e),u(a.dom,a.dom.rename(b,c)),a.selection.setRng(d.resolveBookmark(f))}else p(a,c);else o(a,c,e)},z=function(a,b,c){var d=g.getParentList(a),e=g.getSelectedSubLists(a);c=c?c:{},d&&e.length>0?w(a,d,e,b,c):y(a,d,b,c)};return{toggleList:z,removeList:p,mergeWithAdjacentLists:u}}),g("j",["a"],function(a){return a("tinymce.dom.TreeWalker")}),g("7",["i","j","3","6","c","8","e","k","9"],function(a,b,c,d,e,f,g,h,i){var j=function(c,d,e){var g,h,i=d.startContainer,j=d.startOffset;if(3===i.nodeType&&(e?j<i.data.length:j>0))return i;for(g=c.schema.getNonEmptyElements(),1===i.nodeType&&(i=a.getNode(i,j)),h=new b(i,c.getBody()),e&&f.isBogusBr(c.dom,i)&&h.next();i=h[e?"next":"prev2"]();){if("LI"===i.nodeName&&!i.hasChildNodes())return i;if(g[i.nodeName])return i;if(3===i.nodeType&&i.data.length>0)return i}},k=function(a,b){var c=b.childNodes;return 1===c.length&&!f.isListNode(c[0])&&a.isBlock(c[0])},l=function(a,b){k(a,b)&&a.remove(b.firstChild,!0)},m=function(a,b,c){var d,e;if(e=k(a,c)?c.firstChild:c,l(a,b),!f.isEmpty(a,b,!0))for(;d=b.firstChild;)e.appendChild(d)},n=function(a,b,c){var d,e,g=b.parentNode;f.isChildOfBody(a,b)&&f.isChildOfBody(a,c)&&(f.isListNode(c.lastChild)&&(e=c.lastChild),g===c.lastChild&&f.isBr(g.previousSibling)&&a.remove(g.previousSibling),d=c.lastChild,d&&f.isBr(d)&&b.hasChildNodes()&&a.remove(d),f.isEmpty(a,c,!0)&&a.$(c).empty(),m(a,b,c),e&&c.appendChild(e),a.remove(b),f.isEmpty(a,g)&&g!==a.getRoot()&&a.remove(g))},o=function(a,b,c){a.dom.$(c).empty(),n(a.dom,b,c),a.selection.setCursorLocation(c)},p=function(a,b,c,d){var f=a.dom;if(f.isEmpty(d))o(a,c,d);else{var g=e.createBookmark(b);n(f,c,d),a.selection.setRng(e.resolveBookmark(g))}},q=function(a,b,c,d){var f=e.createBookmark(b);n(a.dom,c,d),a.selection.setRng(e.resolveBookmark(f))},r=function(a,b){var c,e,g,i=a.dom,k=a.selection,l=i.getParent(k.getStart(),"LI");if(l){if(c=l.parentNode,c===a.getBody()&&f.isEmpty(i,c))return!0;if(e=h.normalizeRange(k.getRng(!0)),g=i.getParent(j(a,e,b),"LI"),g&&g!==l)return b?p(a,e,g,l):q(a,e,l,g),!0;if(!g&&!b&&d.removeList(a,c.nodeName))return!0}return!1},s=function(a,b){var c=a.getParent(b.parentNode,a.isBlock);a.remove(b),c&&a.isEmpty(c)&&a.remove(c)},t=function(a,b){var c=a.dom,e=c.getParent(a.selection.getStart(),c.isBlock);if(e&&c.isEmpty(e)){var f=h.normalizeRange(a.selection.getRng(!0)),g=c.getParent(j(a,f,b),"LI");if(g)return a.undoManager.transact(function(){s(c,e),d.mergeWithAdjacentLists(c,g.parentNode),a.selection.select(g,!0),a.selection.collapse(b)}),!0}return!1},u=function(a,b){return r(a,b)||t(a,b)},v=function(a){var b=a.dom.getParent(a.selection.getStart(),"LI,DT,DD");return!!(b||i.getSelectedListItems(a).length>0)&&(a.undoManager.transact(function(){a.execCommand("Delete"),g.normalizeLists(a.dom,a.getBody())}),!0)},w=function(a,b){return a.selection.isCollapsed()?u(a,b):v(a)},x=function(a){a.on("keydown",function(b){b.keyCode===c.BACKSPACE?w(a,!1)&&b.preventDefault():b.keyCode===c.DELETE&&w(a,!0)&&b.preventDefault()})};return{setup:x,backspaceDelete:w}}),g("0",["1","2","3","4","5","6","7","8","9"],function(a,b,c,d,e,f,g,h,i){var j=function(a,b){return function(){var c=a.dom.getParent(a.selection.getStart(),"UL,OL,DL");return c&&c.nodeName===b}},k=function(a){a.on("BeforeExecCommand",function(b){var c,f=b.command.toLowerCase();if("indent"===f?d.indentSelection(a)&&(c=!0):"outdent"===f&&e.outdentSelection(a)&&(c=!0),c)return a.fire("ExecCommand",{command:b.command}),b.preventDefault(),!0}),a.addCommand("InsertUnorderedList",function(b,c){f.toggleList(a,"UL",c)}),a.addCommand("InsertOrderedList",function(b,c){f.toggleList(a,"OL",c)}),a.addCommand("InsertDefinitionList",function(b,c){f.toggleList(a,"DL",c)})},l=function(a){a.addQueryStateHandler("InsertUnorderedList",j(a,"UL")),a.addQueryStateHandler("InsertOrderedList",j(a,"OL")),a.addQueryStateHandler("InsertDefinitionList",j(a,"DL"))},m=function(a){a.on("keydown",function(b){9!==b.keyCode||c.metaKeyPressed(b)||a.dom.getParent(a.selection.getStart(),"LI,DT,DD")&&(b.preventDefault(),b.shiftKey?e.outdentSelection(a):d.indentSelection(a))})},n=function(a){var c=function(c){return function(){var d=this;a.on("NodeChange",function(a){var e=b.grep(a.parents,h.isListNode);d.active(e.length>0&&e[0].nodeName===c)})}},d=function(a,c){var d=a.settings.plugins?a.settings.plugins:"";return b.inArray(d.split(/[ ,]/),c)!==-1};d(a,"advlist")||(a.addButton("numlist",{title:"Numbered list",cmd:"InsertOrderedList",onPostRender:c("OL")}),a.addButton("bullist",{title:"Bullet list",cmd:"InsertUnorderedList",onPostRender:c("UL")})),a.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:function(b){var c=b.control;a.on("nodechange",function(){var b=i.getSelectedListItems(a),d=b.length>0&&h.isFirstChild(b[0]);c.disabled(d)})}})};return a.add("lists",function(a){return n(a),g.setup(a),a.on("init",function(){k(a),l(a),a.getParam("lists_indent_on_tab",!0)&&m(a)}),{backspaceDelete:function(b){g.backspaceDelete(a,b)}}}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),d=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),l=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),n=tinymce.util.Tools.resolve("tinymce.util.VK"),p=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),o=function(e){return e&&"BR"===e.nodeName},r=function(e){return e&&3===e.nodeType},h=function(e){return e&&/^(OL|UL|DL)$/.test(e.nodeName)},i=function(e){return e&&/^(LI|DT|DD)$/.test(e.nodeName)},a=function(e){return e&&/^(TH|TD)$/.test(e.nodeName)},C=o,s=function(e){return e.parentNode.firstChild===e},c=function(e){return e.parentNode.lastChild===e},y=function(e,t){return t&&!!e.schema.getTextBlockElements()[t.nodeName]},f=function(e,t){return e&&e.nodeName in t},u=function(e,t){return!!o(t)&&!(!e.isBlock(t.nextSibling)||o(t.previousSibling))},m=function(e,t,n){var o=e.isEmpty(t);return!(n&&0<e.select("span[data-mce-type=bookmark]",t).length)&&o},g=function(e,t){return e.isChildOf(t,e.getRoot())},N=function(e,t){var n=d.getNode(e,t);return i(e)&&r(n)?{container:n,offset:t>=e.childNodes.length?n.data.length:0}:{container:e,offset:t}},L=function(e){var t=e.cloneRange(),n=N(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);var o=N(e.endContainer,e.endOffset);return t.setEnd(o.container,o.offset),t},S=t.DOM,b=function(r){var i={},e=function(e){var t,n,o;n=r[e?"startContainer":"endContainer"],o=r[e?"startOffset":"endOffset"],1===n.nodeType&&(t=S.create("span",{"data-mce-type":"bookmark"}),n.hasChildNodes()?(o=Math.min(o,n.childNodes.length-1),e?n.insertBefore(t,n.childNodes[o]):S.insertAfter(t,n.childNodes[o])):n.appendChild(t),n=t,o=0),i[e?"startContainer":"endContainer"]=n,i[e?"startOffset":"endOffset"]=o};return e(!0),r.collapsed||e(),i},D=function(r){function e(e){var t,n,o;t=o=r[e?"startContainer":"endContainer"],n=r[e?"startOffset":"endOffset"],t&&(1===t.nodeType&&(n=function(e){for(var t=e.parentNode.firstChild,n=0;t;){if(t===e)return n;1===t.nodeType&&"bookmark"===t.getAttribute("data-mce-type")||n++,t=t.nextSibling}return-1}(t),t=t.parentNode,S.remove(o),!t.hasChildNodes()&&S.isBlock(t)&&t.appendChild(S.create("br"))),r[e?"startContainer":"endContainer"]=t,r[e?"startOffset":"endOffset"]=n)}e(!0),e();var t=S.createRng();return t.setStart(r.startContainer,r.startOffset),r.endContainer&&t.setEnd(r.endContainer,r.endOffset),L(t)},k=t.DOM,T=function(e,t){var n,o=t.parentNode;"LI"===o.nodeName&&o.firstChild===t&&((n=o.previousSibling)&&"LI"===n.nodeName?(n.appendChild(t),m(e,o)&&k.remove(o)):k.setStyle(o,"listStyleType","none")),h(o)&&(n=o.previousSibling)&&"LI"===n.nodeName&&n.appendChild(t)},I=function(t,e){v.each(v.grep(t.select("ol,ul",e)),function(e){T(t,e)})},B=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),R=function(e){var t=e.selection.getStart(!0);return e.dom.getParent(t,"OL,UL,DL",O(e,t))},O=function(e,t){var n=e.dom.getParents(t,"TD,TH");return 0<n.length?n[0]:e.getBody()},E={getParentList:R,getSelectedSubLists:function(e){var t,n,o,r=R(e),i=e.selection.getSelectedBlocks();return o=i,(n=r)&&1===o.length&&o[0]===n?(t=r,v.grep(t.querySelectorAll("ol,ul,dl"),function(e){return h(e)})):v.grep(i,function(e){return h(e)&&r!==e})},getSelectedListItems:function(e){var n,t,o,r=e.selection.getSelectedBlocks();return v.grep((n=e,t=r,o=v.map(t,function(e){var t=n.dom.getParent(e,"li,dd,dt",O(n,e));return t||e}),B.unique(o)),function(e){return i(e)})},getClosestListRootElm:O},A=tinymce.util.Tools.resolve("tinymce.Env"),P=t.DOM,x=function(e,t,n){var o,r,i,a=P.createFragment(),s=e.schema.getBlockElements();if(e.settings.forced_root_block&&(n=n||e.settings.forced_root_block),n&&((r=P.create(n)).tagName===e.settings.forced_root_block&&P.setAttribs(r,e.settings.forced_root_block_attrs),f(t.firstChild,s)||a.appendChild(r)),t)for(;o=t.firstChild;){var d=o.nodeName;i||"SPAN"===d&&"bookmark"===o.getAttribute("data-mce-type")||(i=!0),f(o,s)?(a.appendChild(o),r=null):n?(r||(r=P.create(n),a.appendChild(r)),r.appendChild(o)):a.appendChild(o)}return e.settings.forced_root_block?i||A.ie&&!(10<A.ie)||r.appendChild(P.create("br",{"data-mce-bogus":"1"})):a.appendChild(P.create("br")),a},_=t.DOM,M=function(e,t,n,o){var r,i,a,s,d;for(a=_.select('span[data-mce-type="bookmark"]',t),o=o||x(e,n),(r=_.createRng()).setStartAfter(n),r.setEndAfter(t),s=(i=r.extractContents()).firstChild;s;s=s.firstChild)if("LI"===s.nodeName&&e.dom.isEmpty(s)){_.remove(s);break}e.dom.isEmpty(i)||_.insertAfter(i,t),_.insertAfter(o,t),m(e.dom,n.parentNode)&&(d=n.parentNode,v.each(a,function(e){d.parentNode.insertBefore(e,n.parentNode)}),_.remove(d)),_.remove(n),m(e.dom,t)&&_.remove(t)},U=t.DOM,H=function(e,t){m(e,t)&&U.remove(t)},$=function(e,t){var n,o,r=t.parentNode;return r?(n=r.parentNode,r===e.getBody()||("DD"===t.nodeName?U.rename(t,"DT"):s(t)&&c(t)?"LI"===n.nodeName?(U.insertAfter(t,n),H(e.dom,n),U.remove(r)):h(n)?U.remove(r,!0):(n.insertBefore(x(e,t),r),U.remove(r)):s(t)?"LI"===n.nodeName?(U.insertAfter(t,n),t.appendChild(r),H(e.dom,n)):h(n)?n.insertBefore(t,r):(n.insertBefore(x(e,t),r),U.remove(t)):c(t)?"LI"===n.nodeName?U.insertAfter(t,n):h(n)?U.insertAfter(t,r):(U.insertAfter(x(e,t),r),U.remove(t)):("LI"===n.nodeName?(r=n,o=x(e,t,"LI")):o=h(n)?x(e,t,"LI"):x(e,t),M(e,r,t,o),I(e.dom,r.parentNode)))):H(e.dom,t),!0},w=$,K=function(e){var t=E.getSelectedListItems(e);if(t.length){var n=b(e.selection.getRng()),o=void 0,r=void 0,i=E.getClosestListRootElm(e,e.selection.getStart(!0));for(o=t.length;o--;)for(var a=t[o].parentNode;a&&a!==i;){for(r=t.length;r--;)if(t[r]===a){t.splice(o,1);break}a=a.parentNode}for(o=0;o<t.length&&($(e,t[o])||0!==o);o++);return e.selection.setRng(D(n)),e.nodeChanged(),!0}},Q=function(n,e){v.each(e,function(e,t){n.setAttribute(t,e)})},W=function(e,t,n){var o,r,i,a,s,d,l;o=e,r=t,a=(i=n)["list-style-type"]?i["list-style-type"]:null,o.setStyle(r,"list-style-type",a),s=e,Q(d=t,(l=n)["list-attributes"]),v.each(s.select("li",d),function(e){Q(e,l["list-item-attributes"])})},j=function(e,t,n,o){var r,i;for(r=t[n?"startContainer":"endContainer"],i=t[n?"startOffset":"endOffset"],1===r.nodeType&&(r=r.childNodes[Math.min(i,r.childNodes.length-1)]||r),!n&&C(r.nextSibling)&&(r=r.nextSibling);r.parentNode!==o;){if(y(e,r))return r;if(/^(TD|TH)$/.test(r.parentNode.nodeName))return r;r=r.parentNode}return r},q=function(c,f,u){void 0===u&&(u={});var e,t=c.selection.getRng(!0),m="LI",n=E.getClosestListRootElm(c,c.selection.getStart(!0)),g=c.dom;"false"!==g.getContentEditable(c.selection.getNode())&&("DL"===(f=f.toUpperCase())&&(m="DT"),e=b(t),v.each(function(n,e,o){for(var r,i=[],a=n.dom,t=j(n,e,!0,o),s=j(n,e,!1,o),d=[],l=t;l&&(d.push(l),l!==s);l=l.nextSibling);return v.each(d,function(e){if(y(n,e))return i.push(e),void(r=null);if(a.isBlock(e)||C(e))return C(e)&&a.remove(e),void(r=null);var t=e.nextSibling;p.isBookmarkNode(e)&&(y(n,t)||!t&&e.parentNode===o)?r=null:(r||(r=a.create("p"),e.parentNode.insertBefore(r,e),i.push(r)),r.appendChild(e))}),i}(c,t,n),function(e){var t,n,o,r,i,a,s,d,l;(n=e.previousSibling)&&h(n)&&n.nodeName===f&&(o=n,r=u,i=g.getStyle(o,"list-style-type"),a=r?r["list-style-type"]:"",i===(a=null===a?"":a))?(t=n,e=g.rename(e,m),n.appendChild(e)):(t=g.create(f),e.parentNode.insertBefore(t,e),t.appendChild(e),e=g.rename(e,m)),s=g,d=e,l=["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],v.each(l,function(e){var t;return s.setStyle(d,((t={})[e]="",t))}),W(g,t,u),z(c.dom,t)}),c.selection.setRng(D(e)))},F=function(o){var e=b(o.selection.getRng(!0)),r=E.getClosestListRootElm(o,o.selection.getStart(!0)),t=E.getSelectedListItems(o),n=v.grep(t,function(e){return o.dom.isEmpty(e)});t=v.grep(t,function(e){return!o.dom.isEmpty(e)}),v.each(n,function(e){m(o.dom,e)&&w(o,e)}),v.each(t,function(e){var t,n;if(e.parentNode!==o.getBody()){for(t=e;t&&t!==r;t=t.parentNode)h(t)&&(n=t);M(o,n,e),I(o.dom,n.parentNode)}}),o.selection.setRng(D(e))},V=function(e,t,n){return d=n,(s=t)&&d&&h(s)&&s.nodeName===d.nodeName&&(i=t,a=n,(r=e).getStyle(i,"list-style-type",!0)===r.getStyle(a,"list-style-type",!0))&&(o=n,t.className===o.className);var o,r,i,a,s,d},z=function(e,t){var n,o;if(n=t.nextSibling,V(e,t,n)){for(;o=n.firstChild;)t.appendChild(o);e.remove(n)}if(n=t.previousSibling,V(e,t,n)){for(;o=n.lastChild;)t.insertBefore(o,t.firstChild);e.remove(n)}},G=function(t,e,n,o,r){if(e.nodeName!==o||J(r)){var i=b(t.selection.getRng(!0));v.each([e].concat(n),function(e){!function(e,t,n,o){if(t.nodeName!==n){var r=e.rename(t,n);W(e,r,o)}else W(e,t,o)}(t.dom,e,o,r)}),t.selection.setRng(D(i))}else F(t)},J=function(e){return"list-style-type"in e},X={toggleList:function(e,t,n){var o=E.getParentList(e),r=E.getSelectedSubLists(e);n=n||{},o&&0<r.length?G(e,o,r,t,n):function(e,t,n,o){if(t!==e.getBody())if(t)if(t.nodeName!==n||J(o)){var r=b(e.selection.getRng(!0));W(e.dom,t,o),z(e.dom,e.dom.rename(t,n)),e.selection.setRng(D(r))}else F(e);else q(e,n,o)}(e,o,t,n)},removeList:F,mergeWithAdjacentLists:z},Y=function(e,t,n,o){var r,i,a=t.startContainer,s=t.startOffset;if(3===a.nodeType&&(n?s<a.data.length:0<s))return a;for(r=e.schema.getNonEmptyElements(),1===a.nodeType&&(a=d.getNode(a,s)),i=new l(a,o),n&&u(e.dom,a)&&i.next();a=i[n?"next":"prev2"]();){if("LI"===a.nodeName&&!a.hasChildNodes())return a;if(r[a.nodeName])return a;if(3===a.nodeType&&0<a.data.length)return a}},Z=function(e,t){var n=t.childNodes;return 1===n.length&&!h(n[0])&&e.isBlock(n[0])},ee=function(e,t,n){var o,r,i,a;if(r=Z(e,n)?n.firstChild:n,Z(i=e,a=t)&&i.remove(a.firstChild,!0),!m(e,t,!0))for(;o=t.firstChild;)r.appendChild(o)},te=function(e,t,n){var o,r,i=t.parentNode;g(e,t)&&g(e,n)&&(h(n.lastChild)&&(r=n.lastChild),i===n.lastChild&&C(i.previousSibling)&&e.remove(i.previousSibling),(o=n.lastChild)&&C(o)&&t.hasChildNodes()&&e.remove(o),m(e,n,!0)&&e.$(n).empty(),ee(e,t,n),r&&n.appendChild(r),e.remove(t),m(e,i)&&i!==e.getRoot()&&e.remove(i))},ne=function(e,t,n,o){var r,i,a,s=e.dom;if(s.isEmpty(o))i=n,a=o,(r=e).dom.$(a).empty(),te(r.dom,i,a),r.selection.setCursorLocation(a);else{var d=b(t);te(s,n,o),e.selection.setRng(D(d))}},oe=function(e,t){var n,o,r,i=e.dom,a=e.selection,s=a.getStart(),d=E.getClosestListRootElm(e,s),l=i.getParent(a.getStart(),"LI",d);if(l){if((n=l.parentNode)===e.getBody()&&m(i,n))return!0;if(o=L(a.getRng(!0)),(r=i.getParent(Y(e,o,t,d),"LI",d))&&r!==l)return t?ne(e,o,r,l):function(e,t,n,o){var r=b(t);te(e.dom,n,o);var i=D(r);e.selection.setRng(i)}(e,o,l,r),!0;if(!r&&!t&&X.removeList(e))return!0}return!1},re=function(e,t){return oe(e,t)||function(r,i){var a=r.dom,e=r.selection.getStart(),s=E.getClosestListRootElm(r,e),d=a.getParent(e,a.isBlock,s);if(d&&a.isEmpty(d)){var t=L(r.selection.getRng(!0)),l=a.getParent(Y(r,t,i,s),"LI",s);if(l)return r.undoManager.transact(function(){var e,t,n,o;t=d,n=s,o=(e=a).getParent(t.parentNode,e.isBlock,n),e.remove(t),o&&e.isEmpty(o)&&e.remove(o),X.mergeWithAdjacentLists(a,l.parentNode),r.selection.select(l,!0),r.selection.collapse(i)}),!0}return!1}(e,t)},ie=function(e,t){return e.selection.isCollapsed()?re(e,t):(o=(n=e).selection.getStart(),r=E.getClosestListRootElm(n,o),!!(n.dom.getParent(o,"LI,DT,DD",r)||0<E.getSelectedListItems(n).length)&&(n.undoManager.transact(function(){n.execCommand("Delete"),I(n.dom,n.getBody())}),!0));var n,o,r},ae=function(t){t.on("keydown",function(e){e.keyCode===n.BACKSPACE?ie(t,!1)&&e.preventDefault():e.keyCode===n.DELETE&&ie(t,!0)&&e.preventDefault()})},se=ie,de=function(t){return{backspaceDelete:function(e){se(t,e)}}},le=t.DOM,ce=function(e,t){var n;if(h(e)){for(;n=e.firstChild;)t.appendChild(n);le.remove(e)}},fe=function(e){var t,n,o,r,i=E.getSelectedListItems(e);if(i.length){for(var a=b(e.selection.getRng(!0)),s=0;s<i.length&&(t=i[s],r=o=n=void 0,("DT"===t.nodeName?(le.rename(t,"DD"),1):(n=t.previousSibling)&&h(n)?(n.appendChild(t),1):n&&"LI"===n.nodeName&&h(n.lastChild)?(n.lastChild.appendChild(t),ce(t.lastChild,n.lastChild),1):(n=t.nextSibling)&&h(n)?(n.insertBefore(t,n.firstChild),1):(n=t.previousSibling)&&"LI"===n.nodeName&&(o=le.create(t.parentNode.nodeName),(r=le.getStyle(t.parentNode,"listStyleType"))&&le.setStyle(o,"listStyleType",r),n.appendChild(o),o.appendChild(t),ce(t.lastChild,o),1))||0!==s);s++);return e.selection.setRng(D(a)),e.nodeChanged(),!0}},ue=function(t,n){return function(){var e=t.dom.getParent(t.selection.getStart(),"UL,OL,DL");return e&&e.nodeName===n}},me=function(o){o.on("BeforeExecCommand",function(e){var t,n=e.command.toLowerCase();if("indent"===n?fe(o)&&(t=!0):"outdent"===n&&K(o)&&(t=!0),t)return o.fire("ExecCommand",{command:e.command}),e.preventDefault(),!0}),o.addCommand("InsertUnorderedList",function(e,t){X.toggleList(o,"UL",t)}),o.addCommand("InsertOrderedList",function(e,t){X.toggleList(o,"OL",t)}),o.addCommand("InsertDefinitionList",function(e,t){X.toggleList(o,"DL",t)}),o.addQueryStateHandler("InsertUnorderedList",ue(o,"UL")),o.addQueryStateHandler("InsertOrderedList",ue(o,"OL")),o.addQueryStateHandler("InsertDefinitionList",ue(o,"DL"))},ge=function(e){return e.getParam("lists_indent_on_tab",!0)},pe=function(e){var t;ge(e)&&(t=e).on("keydown",function(e){e.keyCode!==n.TAB||n.metaKeyPressed(e)||t.dom.getParent(t.selection.getStart(),"LI,DT,DD")&&(e.preventDefault(),e.shiftKey?K(t):fe(t))}),ae(e)},ve=function(t,i){return function(e){var r=e.control;t.on("NodeChange",function(e){var t=function(e,t){for(var n=0;n<e.length;n++)if(t(e[n]))return n;return-1}(e.parents,a),n=-1!==t?e.parents.slice(0,t):e.parents,o=v.grep(n,h);r.active(0<o.length&&o[0].nodeName===i)})}},he=function(e){var t,n,o,r;n="advlist",o=(t=e).settings.plugins?t.settings.plugins:"",-1===v.inArray(o.split(/[ ,]/),n)&&(e.addButton("numlist",{active:!1,title:"Numbered list",cmd:"InsertOrderedList",onPostRender:ve(e,"OL")}),e.addButton("bullist",{active:!1,title:"Bullet list",cmd:"InsertUnorderedList",onPostRender:ve(e,"UL")})),e.addButton("indent",{icon:"indent",title:"Increase indent",cmd:"Indent",onPostRender:(r=e,function(e){var n=e.control;r.on("nodechange",function(){var e=E.getSelectedListItems(r),t=0<e.length&&s(e[0]);n.disabled(t)})})})};e.add("lists",function(e){return pe(e),he(e),me(e),de(e)})}();
\ No newline at end of file
(function () {
+var media = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
- };
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.media.Plugin","tinymce.core.html.Node","tinymce.core.PluginManager","tinymce.core.util.Tools","tinymce.plugins.media.core.Nodes","tinymce.plugins.media.core.Sanitize","tinymce.plugins.media.core.UpdateHtml","tinymce.plugins.media.ui.Dialog","global!tinymce.util.Tools.resolve","tinymce.core.html.Writer","tinymce.core.html.SaxParser","tinymce.core.html.Schema","tinymce.plugins.media.core.VideoScript","tinymce.core.Env","tinymce.core.dom.DOMUtils","tinymce.plugins.media.core.Size","tinymce.core.util.Delay","tinymce.plugins.media.core.HtmlToData","tinymce.plugins.media.core.Service","tinymce.plugins.media.ui.SizeManager","tinymce.plugins.media.core.DataToHtml","tinymce.core.util.Promise","tinymce.plugins.media.core.Mime","tinymce.plugins.media.core.UrlPatterns"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.html.Node',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.html.Node');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.html.Writer',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.html.Writer');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.html.SaxParser',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.html.SaxParser');
- }
-);
+ var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.html.Schema',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.html.Schema');
- }
-);
-
-/**
- * Sanitize.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.core.Sanitize',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.html.Writer',
- 'tinymce.core.html.SaxParser',
- 'tinymce.core.html.Schema'
- ],
- function (Tools, Writer, SaxParser, Schema) {
- var sanitize = function (editor, html) {
- if (editor.settings.media_filter_html === false) {
- return html;
- }
-
- var writer = new Writer();
- var blocked;
-
- new SaxParser({
- validate: false,
- allow_conditional_comments: false,
- special: 'script,noscript',
-
- comment: function (text) {
- writer.comment(text);
- },
-
- cdata: function (text) {
- writer.cdata(text);
- },
-
- text: function (text, raw) {
- writer.text(text, raw);
- },
-
- start: function (name, attrs, empty) {
- blocked = true;
-
- if (name === 'script' || name === 'noscript') {
- return;
- }
-
- for (var i = 0; i < attrs.length; i++) {
- if (attrs[i].name.indexOf('on') === 0) {
- return;
- }
-
- if (attrs[i].name === 'style') {
- attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name);
- }
- }
+ var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
- writer.start(name, attrs, empty);
- blocked = false;
- },
-
- end: function (name) {
- if (blocked) {
- return;
- }
-
- writer.end(name);
- }
- }, new Schema({})).parse(html);
+ var getScripts = function (editor) {
+ return editor.getParam('media_scripts');
+ };
+ var getAudioTemplateCallback = function (editor) {
+ return editor.getParam('audio_template_callback');
+ };
+ var getVideoTemplateCallback = function (editor) {
+ return editor.getParam('video_template_callback');
+ };
+ var hasLiveEmbeds = function (editor) {
+ return editor.getParam('media_live_embeds', true);
+ };
+ var shouldFilterHtml = function (editor) {
+ return editor.getParam('media_filter_html', true);
+ };
+ var getUrlResolver = function (editor) {
+ return editor.getParam('media_url_resolver');
+ };
+ var hasAltSource = function (editor) {
+ return editor.getParam('media_alt_source', true);
+ };
+ var hasPoster = function (editor) {
+ return editor.getParam('media_poster', true);
+ };
+ var hasDimensions = function (editor) {
+ return editor.getParam('media_dimensions', true);
+ };
+ var $_69rpmgh3jjgwecnr = {
+ getScripts: getScripts,
+ getAudioTemplateCallback: getAudioTemplateCallback,
+ getVideoTemplateCallback: getVideoTemplateCallback,
+ hasLiveEmbeds: hasLiveEmbeds,
+ shouldFilterHtml: shouldFilterHtml,
+ getUrlResolver: getUrlResolver,
+ hasAltSource: hasAltSource,
+ hasPoster: hasPoster,
+ hasDimensions: hasDimensions
+ };
- return writer.getContent();
- };
+ var global$3 = tinymce.util.Tools.resolve('tinymce.html.SaxParser');
- return {
- sanitize: sanitize
- };
- }
-);
-/**
- * VideoScript.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var global$4 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
-define(
- 'tinymce.plugins.media.core.VideoScript',
- [
- ],
- function () {
- var getVideoScriptMatch = function (prefixes, src) {
- // var prefixes = editor.settings.media_scripts;
- if (prefixes) {
- for (var i = 0; i < prefixes.length; i++) {
- if (src.indexOf(prefixes[i].filter) !== -1) {
- return prefixes[i];
- }
+ var getVideoScriptMatch = function (prefixes, src) {
+ if (prefixes) {
+ for (var i = 0; i < prefixes.length; i++) {
+ if (src.indexOf(prefixes[i].filter) !== -1) {
+ return prefixes[i];
}
}
- };
-
- return {
- getVideoScriptMatch: getVideoScriptMatch
- };
- }
-);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.Env',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.Env');
- }
-);
-
-/**
- * Nodes.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.core.Nodes',
- [
- 'tinymce.plugins.media.core.Sanitize',
- 'tinymce.plugins.media.core.VideoScript',
- 'tinymce.core.html.Node',
- 'tinymce.core.Env'
- ],
- function (Sanitize, VideoScript, Node, Env) {
- var createPlaceholderNode = function (editor, node) {
- var placeHolder;
- var name = node.name;
-
- placeHolder = new Node('img', 1);
- placeHolder.shortEnded = true;
-
- retainAttributesAndInnerHtml(editor, node, placeHolder);
-
- placeHolder.attr({
- width: node.attr('width') || "300",
- height: node.attr('height') || (name === "audio" ? "30" : "150"),
- style: node.attr('style'),
- src: Env.transparentSrc,
- "data-mce-object": name,
- "class": "mce-object mce-object-" + name
- });
-
- return placeHolder;
- };
-
- var createPreviewIframeNode = function (editor, node) {
- var previewWrapper;
- var previewNode;
- var shimNode;
- var name = node.name;
-
- previewWrapper = new Node('span', 1);
- previewWrapper.attr({
- contentEditable: 'false',
- style: node.attr('style'),
- "data-mce-object": name,
- "class": "mce-preview-object mce-object-" + name
- });
-
- retainAttributesAndInnerHtml(editor, node, previewWrapper);
-
- previewNode = new Node(name, 1);
- previewNode.attr({
- src: node.attr('src'),
- allowfullscreen: node.attr('allowfullscreen'),
- width: node.attr('width') || "300",
- height: node.attr('height') || (name === "audio" ? "30" : "150"),
- frameborder: '0'
- });
-
- shimNode = new Node('span', 1);
- shimNode.attr('class', 'mce-shim');
-
- previewWrapper.append(previewNode);
- previewWrapper.append(shimNode);
+ }
+ };
+ var $_4q3fmh7jjgwecnw = { getVideoScriptMatch: getVideoScriptMatch };
- return previewWrapper;
+ var trimPx = function (value) {
+ return value.replace(/px$/, '');
+ };
+ var addPx = function (value) {
+ return /^[0-9.]+$/.test(value) ? value + 'px' : value;
+ };
+ var getSize = function (name) {
+ return function (elm) {
+ return elm ? trimPx(elm.style[name]) : '';
};
-
- var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {
- var attrName;
- var attrValue;
- var attribs;
- var ai;
- var innerHtml;
-
- // Prefix all attributes except width, height and style since we
- // will add these to the placeholder
- attribs = sourceNode.attributes;
- ai = attribs.length;
- while (ai--) {
- attrName = attribs[ai].name;
- attrValue = attribs[ai].value;
-
- if (attrName !== "width" && attrName !== "height" && attrName !== "style") {
- if (attrName === "data" || attrName === "src") {
- attrValue = editor.convertURL(attrValue, attrName);
- }
-
- targetNode.attr('data-mce-p-' + attrName, attrValue);
- }
- }
-
- // Place the inner HTML contents inside an escaped attribute
- // This enables us to copy/paste the fake object
- innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;
- if (innerHtml) {
- targetNode.attr("data-mce-html", escape(Sanitize.sanitize(editor, innerHtml)));
- targetNode.firstChild = null;
+ };
+ var setSize = function (name) {
+ return function (elm, value) {
+ if (elm) {
+ elm.style[name] = addPx(value);
}
};
+ };
+ var $_jbvx7h8jjgwecnx = {
+ getMaxWidth: getSize('maxWidth'),
+ getMaxHeight: getSize('maxHeight'),
+ setMaxWidth: setSize('maxWidth'),
+ setMaxHeight: setSize('maxHeight')
+ };
- var isWithinEphoxEmbed = function (node) {
- while ((node = node.parent)) {
- if (node.attr('data-ephox-embed-iri')) {
- return true;
+ var DOM = global$4.DOM;
+ var getEphoxEmbedIri = function (elm) {
+ return DOM.getAttrib(elm, 'data-ephox-embed-iri');
+ };
+ var isEphoxEmbed = function (html) {
+ var fragment = DOM.createFragment(html);
+ return getEphoxEmbedIri(fragment.firstChild) !== '';
+ };
+ var htmlToDataSax = function (prefixes, html) {
+ var data = {};
+ global$3({
+ validate: false,
+ allow_conditional_comments: true,
+ special: 'script,noscript',
+ start: function (name, attrs) {
+ if (!data.source1 && name === 'param') {
+ data.source1 = attrs.map.movie;
}
- }
-
- return false;
- };
-
- var placeHolderConverter = function (editor) {
- return function (nodes) {
- var i = nodes.length;
- var node;
- var videoScript;
-
- while (i--) {
- node = nodes[i];
- if (!node.parent) {
- continue;
- }
-
- if (node.parent.attr('data-mce-object')) {
- continue;
- }
-
- if (node.name === 'script') {
- videoScript = VideoScript.getVideoScriptMatch(editor.settings.media_scripts, node.attr('src'));
- if (!videoScript) {
- continue;
- }
+ if (name === 'iframe' || name === 'object' || name === 'embed' || name === 'video' || name === 'audio') {
+ if (!data.type) {
+ data.type = name;
}
-
- if (videoScript) {
- if (videoScript.width) {
- node.attr('width', videoScript.width.toString());
- }
-
- if (videoScript.height) {
- node.attr('height', videoScript.height.toString());
- }
+ data = global$2.extend(attrs.map, data);
+ }
+ if (name === 'script') {
+ var videoScript = $_4q3fmh7jjgwecnw.getVideoScriptMatch(prefixes, attrs.map.src);
+ if (!videoScript) {
+ return;
}
-
- if (node.name === 'iframe' && editor.settings.media_live_embeds !== false && Env.ceFalse) {
- if (!isWithinEphoxEmbed(node)) {
- node.replace(createPreviewIframeNode(editor, node));
- }
- } else {
- if (!isWithinEphoxEmbed(node)) {
- node.replace(createPlaceholderNode(editor, node));
- }
+ data = {
+ type: 'script',
+ source1: attrs.map.src,
+ width: videoScript.width,
+ height: videoScript.height
+ };
+ }
+ if (name === 'source') {
+ if (!data.source1) {
+ data.source1 = attrs.map.src;
+ } else if (!data.source2) {
+ data.source2 = attrs.map.src;
}
}
- };
- };
-
- return {
- createPreviewIframeNode: createPreviewIframeNode,
- createPlaceholderNode: createPlaceholderNode,
- placeHolderConverter: placeHolderConverter
- };
- }
-);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.DOMUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.DOMUtils');
- }
-);
-
-/**
- * Size.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.core.Size',
- [
- ],
- function () {
- var trimPx = function (value) {
- return value.replace(/px$/, '');
- };
-
- var addPx = function (value) {
- return /^[0-9.]+$/.test(value) ? (value + 'px') : value;
- };
-
- var getSize = function (name) {
- return function (elm) {
- return elm ? trimPx(elm.style[name]) : '';
- };
- };
-
- var setSize = function (name) {
- return function (elm, value) {
- if (elm) {
- elm.style[name] = addPx(value);
+ if (name === 'img' && !data.poster) {
+ data.poster = attrs.map.src;
}
- };
- };
-
+ }
+ }).parse(html);
+ data.source1 = data.source1 || data.src || data.data;
+ data.source2 = data.source2 || '';
+ data.poster = data.poster || '';
+ return data;
+ };
+ var ephoxEmbedHtmlToData = function (html) {
+ var fragment = DOM.createFragment(html);
+ var div = fragment.firstChild;
return {
- getMaxWidth: getSize('maxWidth'),
- getMaxHeight: getSize('maxHeight'),
- setMaxWidth: setSize('maxWidth'),
- setMaxHeight: setSize('maxHeight')
+ type: 'ephox-embed-iri',
+ source1: getEphoxEmbedIri(div),
+ source2: '',
+ poster: '',
+ width: $_jbvx7h8jjgwecnx.getMaxWidth(div),
+ height: $_jbvx7h8jjgwecnx.getMaxHeight(div)
};
- }
-);
-/**
- * UpdateHtml.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.core.UpdateHtml',
- [
- 'tinymce.core.html.Writer',
- 'tinymce.core.html.SaxParser',
- 'tinymce.core.html.Schema',
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.plugins.media.core.Size'
- ],
- function (Writer, SaxParser, Schema, DOMUtils, Size) {
- var DOM = DOMUtils.DOM;
-
- var setAttributes = function (attrs, updatedAttrs) {
- var name;
- var i;
- var value;
- var attr;
-
- for (name in updatedAttrs) {
- value = "" + updatedAttrs[name];
-
- if (attrs.map[name]) {
- i = attrs.length;
- while (i--) {
- attr = attrs[i];
-
- if (attr.name === name) {
- if (value) {
- attrs.map[name] = value;
- attr.value = value;
- } else {
- delete attrs.map[name];
- attrs.splice(i, 1);
- }
+ };
+ var htmlToData = function (prefixes, html) {
+ return isEphoxEmbed(html) ? ephoxEmbedHtmlToData(html) : htmlToDataSax(prefixes, html);
+ };
+ var $_6mep3hh4jjgwecnt = { htmlToData: htmlToData };
+
+ var global$5 = tinymce.util.Tools.resolve('tinymce.util.Promise');
+
+ var guess = function (url) {
+ var mimes = {
+ mp3: 'audio/mpeg',
+ wav: 'audio/wav',
+ mp4: 'video/mp4',
+ webm: 'video/webm',
+ ogg: 'video/ogg',
+ swf: 'application/x-shockwave-flash'
+ };
+ var fileEnd = url.toLowerCase().split('.').pop();
+ var mime = mimes[fileEnd];
+ return mime ? mime : '';
+ };
+ var $_d9gn6bhcjjgwecol = { guess: guess };
+
+ var global$6 = tinymce.util.Tools.resolve('tinymce.html.Writer');
+
+ var global$7 = tinymce.util.Tools.resolve('tinymce.html.Schema');
+
+ var DOM$1 = global$4.DOM;
+ var setAttributes = function (attrs, updatedAttrs) {
+ var name;
+ var i;
+ var value;
+ var attr;
+ for (name in updatedAttrs) {
+ value = '' + updatedAttrs[name];
+ if (attrs.map[name]) {
+ i = attrs.length;
+ while (i--) {
+ attr = attrs[i];
+ if (attr.name === name) {
+ if (value) {
+ attrs.map[name] = value;
+ attr.value = value;
+ } else {
+ delete attrs.map[name];
+ attrs.splice(i, 1);
}
}
- } else if (value) {
- attrs.push({
- name: name,
- value: value
- });
-
- attrs.map[name] = value;
}
+ } else if (value) {
+ attrs.push({
+ name: name,
+ value: value
+ });
+ attrs.map[name] = value;
}
- };
-
- var normalizeHtml = function (html) {
- var writer = new Writer();
- var parser = new SaxParser(writer);
- parser.parse(html);
- return writer.getContent();
- };
-
- var updateHtmlSax = function (html, data, updateAll) {
- var writer = new Writer();
- var sourceCount = 0;
- var hasImage;
-
- new SaxParser({
- validate: false,
- allow_conditional_comments: true,
- special: 'script,noscript',
-
- comment: function (text) {
- writer.comment(text);
- },
-
- cdata: function (text) {
- writer.cdata(text);
- },
-
- text: function (text, raw) {
- writer.text(text, raw);
- },
-
- start: function (name, attrs, empty) {
- switch (name) {
- case "video":
- case "object":
- case "embed":
- case "img":
- case "iframe":
- if (data.height !== undefined && data.width !== undefined) {
- setAttributes(attrs, {
- width: data.width,
- height: data.height
- });
- }
- break;
- }
-
- if (updateAll) {
- switch (name) {
- case "video":
- setAttributes(attrs, {
- poster: data.poster,
- src: ""
- });
-
- if (data.source2) {
- setAttributes(attrs, {
- src: ""
- });
- }
- break;
-
- case "iframe":
- setAttributes(attrs, {
- src: data.source1
- });
- break;
-
- case "source":
- sourceCount++;
-
- if (sourceCount <= 2) {
- setAttributes(attrs, {
- src: data["source" + sourceCount],
- type: data["source" + sourceCount + "mime"]
- });
-
- if (!data["source" + sourceCount]) {
- return;
- }
- }
- break;
-
- case "img":
- if (!data.poster) {
- return;
- }
-
- hasImage = true;
- break;
- }
- }
-
- writer.start(name, attrs, empty);
- },
-
- end: function (name) {
- if (name === "video" && updateAll) {
- for (var index = 1; index <= 2; index++) {
- if (data["source" + index]) {
- var attrs = [];
- attrs.map = {};
-
- if (sourceCount < index) {
- setAttributes(attrs, {
- src: data["source" + index],
- type: data["source" + index + "mime"]
- });
-
- writer.start("source", attrs, true);
- }
- }
- }
- }
-
- if (data.poster && name === "object" && updateAll && !hasImage) {
- var imgAttrs = [];
- imgAttrs.map = {};
-
- setAttributes(imgAttrs, {
- src: data.poster,
+ }
+ };
+ var normalizeHtml = function (html) {
+ var writer = global$6();
+ var parser = global$3(writer);
+ parser.parse(html);
+ return writer.getContent();
+ };
+ var updateHtmlSax = function (html, data, updateAll) {
+ var writer = global$6();
+ var sourceCount = 0;
+ var hasImage;
+ global$3({
+ validate: false,
+ allow_conditional_comments: true,
+ special: 'script,noscript',
+ comment: function (text) {
+ writer.comment(text);
+ },
+ cdata: function (text) {
+ writer.cdata(text);
+ },
+ text: function (text, raw) {
+ writer.text(text, raw);
+ },
+ start: function (name, attrs, empty) {
+ switch (name) {
+ case 'video':
+ case 'object':
+ case 'embed':
+ case 'img':
+ case 'iframe':
+ if (data.height !== undefined && data.width !== undefined) {
+ setAttributes(attrs, {
width: data.width,
height: data.height
});
-
- writer.start("img", imgAttrs, true);
}
-
- writer.end(name);
+ break;
}
- }, new Schema({})).parse(html);
-
- return writer.getContent();
- };
-
- var isEphoxEmbed = function (html) {
- var fragment = DOM.createFragment(html);
- return DOM.getAttrib(fragment.firstChild, 'data-ephox-embed-iri') !== '';
- };
-
- var updateEphoxEmbed = function (html, data) {
- var fragment = DOM.createFragment(html);
- var div = fragment.firstChild;
-
- Size.setMaxWidth(div, data.width);
- Size.setMaxHeight(div, data.height);
-
- return normalizeHtml(div.outerHTML);
- };
-
- var updateHtml = function (html, data, updateAll) {
- return isEphoxEmbed(html) ? updateEphoxEmbed(html, data) : updateHtmlSax(html, data, updateAll);
- };
-
- return {
- updateHtml: updateHtml
- };
- }
-);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Delay',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Delay');
- }
-);
-
-/**
- * HtmlToData.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.core.HtmlToData',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.html.SaxParser',
- 'tinymce.core.html.Schema',
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.plugins.media.core.VideoScript',
- 'tinymce.plugins.media.core.Size'
- ],
- function (Tools, SaxParser, Schema, DOMUtils, VideoScript, Size) {
- var DOM = DOMUtils.DOM;
-
- var getEphoxEmbedIri = function (elm) {
- return DOM.getAttrib(elm, 'data-ephox-embed-iri');
- };
-
- var isEphoxEmbed = function (html) {
- var fragment = DOM.createFragment(html);
- return getEphoxEmbedIri(fragment.firstChild) !== '';
- };
-
- var htmlToDataSax = function (prefixes, html) {
- var data = {};
-
- new SaxParser({
- validate: false,
- allow_conditional_comments: true,
- special: 'script,noscript',
- start: function (name, attrs) {
- if (!data.source1 && name === "param") {
- data.source1 = attrs.map.movie;
- }
-
- if (name === "iframe" || name === "object" || name === "embed" || name === "video" || name === "audio") {
- if (!data.type) {
- data.type = name;
+ if (updateAll) {
+ switch (name) {
+ case 'video':
+ setAttributes(attrs, {
+ poster: data.poster,
+ src: ''
+ });
+ if (data.source2) {
+ setAttributes(attrs, { src: '' });
}
-
- data = Tools.extend(attrs.map, data);
- }
-
- if (name === "script") {
- var videoScript = VideoScript.getVideoScriptMatch(prefixes, attrs.map.src);
- if (!videoScript) {
+ break;
+ case 'iframe':
+ setAttributes(attrs, { src: data.source1 });
+ break;
+ case 'source':
+ sourceCount++;
+ if (sourceCount <= 2) {
+ setAttributes(attrs, {
+ src: data['source' + sourceCount],
+ type: data['source' + sourceCount + 'mime']
+ });
+ if (!data['source' + sourceCount]) {
+ return;
+ }
+ }
+ break;
+ case 'img':
+ if (!data.poster) {
return;
}
-
- data = {
- type: "script",
- source1: attrs.map.src,
- width: videoScript.width,
- height: videoScript.height
- };
+ hasImage = true;
+ break;
}
-
- if (name === "source") {
- if (!data.source1) {
- data.source1 = attrs.map.src;
- } else if (!data.source2) {
- data.source2 = attrs.map.src;
+ }
+ writer.start(name, attrs, empty);
+ },
+ end: function (name) {
+ if (name === 'video' && updateAll) {
+ for (var index = 1; index <= 2; index++) {
+ if (data['source' + index]) {
+ var attrs = [];
+ attrs.map = {};
+ if (sourceCount < index) {
+ setAttributes(attrs, {
+ src: data['source' + index],
+ type: data['source' + index + 'mime']
+ });
+ writer.start('source', attrs, true);
+ }
}
}
-
- if (name === "img" && !data.poster) {
- data.poster = attrs.map.src;
- }
}
- }).parse(html);
-
- data.source1 = data.source1 || data.src || data.data;
- data.source2 = data.source2 || '';
- data.poster = data.poster || '';
-
- return data;
- };
-
- var ephoxEmbedHtmlToData = function (html) {
- var fragment = DOM.createFragment(html);
- var div = fragment.firstChild;
-
- return {
- type: 'ephox-embed-iri',
- source1: getEphoxEmbedIri(div),
- source2: '',
- poster: '',
- width: Size.getMaxWidth(div),
- height: Size.getMaxHeight(div)
- };
- };
-
- var htmlToData = function (prefixes, html) {
- return isEphoxEmbed(html) ? ephoxEmbedHtmlToData(html) : htmlToDataSax(prefixes, html);
- };
-
- return {
- htmlToData: htmlToData
- };
- }
-);
-/**
- * Mime.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.core.Mime',
- [
- ],
- function () {
- var guess = function (url) {
- var mimes = {
- 'mp3': 'audio/mpeg',
- 'wav': 'audio/wav',
- 'mp4': 'video/mp4',
- 'webm': 'video/webm',
- 'ogg': 'video/ogg',
- 'swf': 'application/x-shockwave-flash'
- };
- var fileEnd = url.toLowerCase().split('.').pop();
- var mime = mimes[fileEnd];
-
- return mime ? mime : '';
- };
-
- return {
- guess: guess
- };
- }
-);
-/**
- * UrlPatterns.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.core.UrlPatterns',
- [
- ],
- function () {
- var urlPatterns = [
- {
- regex: /youtu\.be\/([\w\-.]+)/,
- type: 'iframe', w: 560, h: 314,
- url: '//www.youtube.com/embed/$1',
- allowFullscreen: true
- },
- {
- regex: /youtube\.com(.+)v=([^&]+)/,
- type: 'iframe', w: 560, h: 314,
- url: '//www.youtube.com/embed/$2',
- allowFullscreen: true
- },
- {
- regex: /youtube.com\/embed\/([a-z0-9\-_]+(?:\?.+)?)/i,
- type: 'iframe', w: 560, h: 314,
- url: '//www.youtube.com/embed/$1',
- allowFullscreen: true
- },
- {
- regex: /vimeo\.com\/([0-9]+)/,
- type: 'iframe', w: 425, h: 350,
- url: '//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',
- allowfullscreen: true
- },
- {
- regex: /vimeo\.com\/(.*)\/([0-9]+)/,
- type: "iframe", w: 425, h: 350,
- url: "//player.vimeo.com/video/$2?title=0&byline=0",
- allowfullscreen: true
- },
- {
- regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,
- type: 'iframe', w: 425, h: 350,
- url: '//maps.google.com/maps/ms?msid=$2&output=embed"',
- allowFullscreen: false
- },
- {
- regex: /dailymotion\.com\/video\/([^_]+)/,
- type: 'iframe', w: 480, h: 270,
- url: '//www.dailymotion.com/embed/video/$1',
- allowFullscreen: true
+ if (data.poster && name === 'object' && updateAll && !hasImage) {
+ var imgAttrs = [];
+ imgAttrs.map = {};
+ setAttributes(imgAttrs, {
+ src: data.poster,
+ width: data.width,
+ height: data.height
+ });
+ writer.start('img', imgAttrs, true);
+ }
+ writer.end(name);
}
- ];
-
- return {
- urlPatterns: urlPatterns
+ }, global$7({})).parse(html);
+ return writer.getContent();
+ };
+ var isEphoxEmbed$1 = function (html) {
+ var fragment = DOM$1.createFragment(html);
+ return DOM$1.getAttrib(fragment.firstChild, 'data-ephox-embed-iri') !== '';
+ };
+ var updateEphoxEmbed = function (html, data) {
+ var fragment = DOM$1.createFragment(html);
+ var div = fragment.firstChild;
+ $_jbvx7h8jjgwecnx.setMaxWidth(div, data.width);
+ $_jbvx7h8jjgwecnx.setMaxHeight(div, data.height);
+ return normalizeHtml(div.outerHTML);
+ };
+ var updateHtml = function (html, data, updateAll) {
+ return isEphoxEmbed$1(html) ? updateEphoxEmbed(html, data) : updateHtmlSax(html, data, updateAll);
+ };
+ var $_s3qkohdjjgwecon = { updateHtml: updateHtml };
+
+ var urlPatterns = [
+ {
+ regex: /youtu\.be\/([\w\-_\?&=.]+)/i,
+ type: 'iframe',
+ w: 560,
+ h: 314,
+ url: '//www.youtube.com/embed/$1',
+ allowFullscreen: true
+ },
+ {
+ regex: /youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,
+ type: 'iframe',
+ w: 560,
+ h: 314,
+ url: '//www.youtube.com/embed/$2?$4',
+ allowFullscreen: true
+ },
+ {
+ regex: /youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,
+ type: 'iframe',
+ w: 560,
+ h: 314,
+ url: '//www.youtube.com/embed/$1',
+ allowFullscreen: true
+ },
+ {
+ regex: /vimeo\.com\/([0-9]+)/,
+ type: 'iframe',
+ w: 425,
+ h: 350,
+ url: '//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc',
+ allowFullscreen: true
+ },
+ {
+ regex: /vimeo\.com\/(.*)\/([0-9]+)/,
+ type: 'iframe',
+ w: 425,
+ h: 350,
+ url: '//player.vimeo.com/video/$2?title=0&byline=0',
+ allowFullscreen: true
+ },
+ {
+ regex: /maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,
+ type: 'iframe',
+ w: 425,
+ h: 350,
+ url: '//maps.google.com/maps/ms?msid=$2&output=embed"',
+ allowFullscreen: false
+ },
+ {
+ regex: /dailymotion\.com\/video\/([^_]+)/,
+ type: 'iframe',
+ w: 480,
+ h: 270,
+ url: '//www.dailymotion.com/embed/video/$1',
+ allowFullscreen: true
+ },
+ {
+ regex: /dai\.ly\/([^_]+)/,
+ type: 'iframe',
+ w: 480,
+ h: 270,
+ url: '//www.dailymotion.com/embed/video/$1',
+ allowFullscreen: true
+ }
+ ];
+ var getUrl = function (pattern, url) {
+ var match = pattern.regex.exec(url);
+ var newUrl = pattern.url;
+ var _loop_1 = function (i) {
+ newUrl = newUrl.replace('$' + i, function () {
+ return match[i] ? match[i] : '';
+ });
};
- }
-);
-/**
- * DataToHtml.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.core.DataToHtml',
- [
- 'tinymce.plugins.media.core.Mime',
- 'tinymce.plugins.media.core.HtmlToData',
- 'tinymce.plugins.media.core.UrlPatterns',
- 'tinymce.plugins.media.core.VideoScript',
- 'tinymce.plugins.media.core.UpdateHtml',
- 'tinymce.core.util.Tools'
- ],
- function (Mime, HtmlToData, UrlPatterns, VideoScript, UpdateHtml, Tools) {
- var dataToHtml = function (editor, dataIn) {
- var html = '';
- var data = Tools.extend({}, dataIn);
+ for (var i = 0; i < match.length; i++) {
+ _loop_1(i);
+ }
+ return newUrl.replace(/\?$/, '');
+ };
+ var matchPattern = function (url) {
+ var pattern = urlPatterns.filter(function (pattern) {
+ return pattern.regex.test(url);
+ });
+ if (pattern.length > 0) {
+ return global$2.extend({}, pattern[0], { url: getUrl(pattern[0], url) });
+ } else {
+ return null;
+ }
+ };
+ var getIframeHtml = function (data) {
+ var allowFullscreen = data.allowFullscreen ? ' allowFullscreen="1"' : '';
+ return '<iframe src="' + data.source1 + '" width="' + data.width + '" height="' + data.height + '"' + allowFullscreen + '></iframe>';
+ };
+ var getFlashHtml = function (data) {
+ var html = '<object data="' + data.source1 + '" width="' + data.width + '" height="' + data.height + '" type="application/x-shockwave-flash">';
+ if (data.poster) {
+ html += '<img src="' + data.poster + '" width="' + data.width + '" height="' + data.height + '" />';
+ }
+ html += '</object>';
+ return html;
+ };
+ var getAudioHtml = function (data, audioTemplateCallback) {
+ if (audioTemplateCallback) {
+ return audioTemplateCallback(data);
+ } else {
+ return '<audio controls="controls" src="' + data.source1 + '">' + (data.source2 ? '\n<source src="' + data.source2 + '"' + (data.source2mime ? ' type="' + data.source2mime + '"' : '') + ' />\n' : '') + '</audio>';
+ }
+ };
+ var getVideoHtml = function (data, videoTemplateCallback) {
+ if (videoTemplateCallback) {
+ return videoTemplateCallback(data);
+ } else {
+ return '<video width="' + data.width + '" height="' + data.height + '"' + (data.poster ? ' poster="' + data.poster + '"' : '') + ' controls="controls">\n' + '<source src="' + data.source1 + '"' + (data.source1mime ? ' type="' + data.source1mime + '"' : '') + ' />\n' + (data.source2 ? '<source src="' + data.source2 + '"' + (data.source2mime ? ' type="' + data.source2mime + '"' : '') + ' />\n' : '') + '</video>';
+ }
+ };
+ var getScriptHtml = function (data) {
+ return '<script src="' + data.source1 + '"></script>';
+ };
+ var dataToHtml = function (editor, dataIn) {
+ var data = global$2.extend({}, dataIn);
+ if (!data.source1) {
+ global$2.extend(data, $_6mep3hh4jjgwecnt.htmlToData($_69rpmgh3jjgwecnr.getScripts(editor), data.embed));
if (!data.source1) {
- Tools.extend(data, HtmlToData.htmlToData(editor.settings.media_scripts, data.embed));
- if (!data.source1) {
- return '';
- }
+ return '';
}
-
- if (!data.source2) {
- data.source2 = '';
- }
-
- if (!data.poster) {
- data.poster = '';
+ }
+ if (!data.source2) {
+ data.source2 = '';
+ }
+ if (!data.poster) {
+ data.poster = '';
+ }
+ data.source1 = editor.convertURL(data.source1, 'source');
+ data.source2 = editor.convertURL(data.source2, 'source');
+ data.source1mime = $_d9gn6bhcjjgwecol.guess(data.source1);
+ data.source2mime = $_d9gn6bhcjjgwecol.guess(data.source2);
+ data.poster = editor.convertURL(data.poster, 'poster');
+ var pattern = matchPattern(data.source1);
+ if (pattern) {
+ data.source1 = pattern.url;
+ data.type = pattern.type;
+ data.allowFullscreen = pattern.allowFullscreen;
+ data.width = data.width || pattern.w;
+ data.height = data.height || pattern.h;
+ }
+ if (data.embed) {
+ return $_s3qkohdjjgwecon.updateHtml(data.embed, data, true);
+ } else {
+ var videoScript = $_4q3fmh7jjgwecnw.getVideoScriptMatch($_69rpmgh3jjgwecnr.getScripts(editor), data.source1);
+ if (videoScript) {
+ data.type = 'script';
+ data.width = videoScript.width;
+ data.height = videoScript.height;
}
-
- data.source1 = editor.convertURL(data.source1, "source");
- data.source2 = editor.convertURL(data.source2, "source");
- data.source1mime = Mime.guess(data.source1);
- data.source2mime = Mime.guess(data.source2);
- data.poster = editor.convertURL(data.poster, "poster");
-
- Tools.each(UrlPatterns.urlPatterns, function (pattern) {
- var i;
- var url;
-
- var match = pattern.regex.exec(data.source1);
-
- if (match) {
- url = pattern.url;
-
- for (i = 0; match[i]; i++) {
- /*jshint loopfunc:true*/
- /*eslint no-loop-func:0 */
- url = url.replace('$' + i, function () {
- return match[i];
- });
- }
-
- data.source1 = url;
- data.type = pattern.type;
- data.allowFullscreen = pattern.allowFullscreen;
- data.width = data.width || pattern.w;
- data.height = data.height || pattern.h;
- }
+ var audioTemplateCallback = $_69rpmgh3jjgwecnr.getAudioTemplateCallback(editor);
+ var videoTemplateCallback = $_69rpmgh3jjgwecnr.getVideoTemplateCallback(editor);
+ data.width = data.width || 300;
+ data.height = data.height || 150;
+ global$2.each(data, function (value, key) {
+ data[key] = editor.dom.encode(value);
});
-
- if (data.embed) {
- html = UpdateHtml.updateHtml(data.embed, data, true);
+ if (data.type === 'iframe') {
+ return getIframeHtml(data);
+ } else if (data.source1mime === 'application/x-shockwave-flash') {
+ return getFlashHtml(data);
+ } else if (data.source1mime.indexOf('audio') !== -1) {
+ return getAudioHtml(data, audioTemplateCallback);
+ } else if (data.type === 'script') {
+ return getScriptHtml(data);
} else {
- var videoScript = VideoScript.getVideoScriptMatch(editor.settings.media_scripts, data.source1);
- if (videoScript) {
- data.type = 'script';
- data.width = videoScript.width;
- data.height = videoScript.height;
- }
-
- data.width = data.width || 300;
- data.height = data.height || 150;
-
- Tools.each(data, function (value, key) {
- data[key] = editor.dom.encode(value);
- });
-
- if (data.type === "iframe") {
- var allowFullscreen = data.allowFullscreen ? ' allowFullscreen="1"' : '';
- html +=
- '<iframe src="' + data.source1 +
- '" width="' + data.width +
- '" height="' + data.height +
- '"' + allowFullscreen + '></iframe>';
- } else if (data.source1mime === "application/x-shockwave-flash") {
- html +=
- '<object data="' + data.source1 +
- '" width="' + data.width +
- '" height="' + data.height +
- '" type="application/x-shockwave-flash">';
-
- if (data.poster) {
- html += '<img src="' + data.poster + '" width="' + data.width + '" height="' + data.height + '" />';
- }
-
- html += '</object>';
- } else if (data.source1mime.indexOf('audio') !== -1) {
- if (editor.settings.audio_template_callback) {
- html = editor.settings.audio_template_callback(data);
- } else {
- html += (
- '<audio controls="controls" src="' + data.source1 + '">' +
- (
- data.source2 ?
- '\n<source src="' + data.source2 + '"' +
- (data.source2mime ? ' type="' + data.source2mime + '"' : '') +
- ' />\n' : '') +
- '</audio>'
- );
- }
- } else if (data.type === "script") {
- html += '<script src="' + data.source1 + '"></script>';
- } else {
- if (editor.settings.video_template_callback) {
- html = editor.settings.video_template_callback(data);
- } else {
- html = (
- '<video width="' + data.width +
- '" height="' + data.height + '"' +
- (data.poster ? ' poster="' + data.poster + '"' : '') + ' controls="controls">\n' +
- '<source src="' + data.source1 + '"' +
- (data.source1mime ? ' type="' + data.source1mime + '"' : '') + ' />\n' +
- (data.source2 ? '<source src="' + data.source2 + '"' +
- (data.source2mime ? ' type="' + data.source2mime + '"' : '') + ' />\n' : '') +
- '</video>'
- );
- }
- }
+ return getVideoHtml(data, videoTemplateCallback);
}
-
- return html;
- };
-
- return {
- dataToHtml: dataToHtml
- };
- }
-);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Promise',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Promise');
- }
-);
-
-/**
- * Service.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.core.Service',
- [
- 'tinymce.plugins.media.core.DataToHtml',
- 'tinymce.core.util.Promise'
- ],
- function (DataToHtml, Promise) {
- var embedPromise = function (data, dataToHtml, handler) {
- var cache = {};
- return new Promise(function (res, rej) {
- var wrappedResolve = function (response) {
- if (response.html) {
- cache[data.source1] = response;
- }
- return res({
- url: data.source1,
- html: response.html ? response.html : dataToHtml(data)
- });
- };
- if (cache[data.source1]) {
- wrappedResolve(cache[data.source1]);
- } else {
- handler({ url: data.source1 }, wrappedResolve, rej);
+ }
+ };
+ var $_bc7nlthbjjgwecoh = { dataToHtml: dataToHtml };
+
+ var cache = {};
+ var embedPromise = function (data, dataToHtml, handler) {
+ return new global$5(function (res, rej) {
+ var wrappedResolve = function (response) {
+ if (response.html) {
+ cache[data.source1] = response;
}
+ return res({
+ url: data.source1,
+ html: response.html ? response.html : dataToHtml(data)
+ });
+ };
+ if (cache[data.source1]) {
+ wrappedResolve(cache[data.source1]);
+ } else {
+ handler({ url: data.source1 }, wrappedResolve, rej);
+ }
+ });
+ };
+ var defaultPromise = function (data, dataToHtml) {
+ return new global$5(function (res) {
+ res({
+ html: dataToHtml(data),
+ url: data.source1
});
+ });
+ };
+ var loadedData = function (editor) {
+ return function (data) {
+ return $_bc7nlthbjjgwecoh.dataToHtml(editor, data);
};
+ };
+ var getEmbedHtml = function (editor, data) {
+ var embedHandler = $_69rpmgh3jjgwecnr.getUrlResolver(editor);
+ return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));
+ };
+ var isCached = function (url) {
+ return cache.hasOwnProperty(url);
+ };
+ var $_cwvqyth9jjgweco9 = {
+ getEmbedHtml: getEmbedHtml,
+ isCached: isCached
+ };
- var defaultPromise = function (data, dataToHtml) {
- return new Promise(function (res) {
- res({ html: dataToHtml(data), url: data.source1 });
+ var doSyncSize = function (widthCtrl, heightCtrl) {
+ widthCtrl.state.set('oldVal', widthCtrl.value());
+ heightCtrl.state.set('oldVal', heightCtrl.value());
+ };
+ var doSizeControls = function (win, f) {
+ var widthCtrl = win.find('#width')[0];
+ var heightCtrl = win.find('#height')[0];
+ var constrained = win.find('#constrain')[0];
+ if (widthCtrl && heightCtrl && constrained) {
+ f(widthCtrl, heightCtrl, constrained.checked());
+ }
+ };
+ var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {
+ var oldWidth = widthCtrl.state.get('oldVal');
+ var oldHeight = heightCtrl.state.get('oldVal');
+ var newWidth = widthCtrl.value();
+ var newHeight = heightCtrl.value();
+ if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {
+ if (newWidth !== oldWidth) {
+ newHeight = Math.round(newWidth / oldWidth * newHeight);
+ if (!isNaN(newHeight)) {
+ heightCtrl.value(newHeight);
+ }
+ } else {
+ newWidth = Math.round(newHeight / oldHeight * newWidth);
+ if (!isNaN(newWidth)) {
+ widthCtrl.value(newWidth);
+ }
+ }
+ }
+ doSyncSize(widthCtrl, heightCtrl);
+ };
+ var syncSize = function (win) {
+ doSizeControls(win, doSyncSize);
+ };
+ var updateSize = function (win) {
+ doSizeControls(win, doUpdateSize);
+ };
+ var createUi = function (onChange) {
+ var recalcSize = function () {
+ onChange(function (win) {
+ updateSize(win);
});
};
-
- var loadedData = function (editor) {
- return function (data) {
- return DataToHtml.dataToHtml(editor, data);
- };
- };
-
- var getEmbedHtml = function (editor, data) {
- var embedHandler = editor.settings.media_url_resolver;
-
- return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor));
- };
-
return {
- getEmbedHtml: getEmbedHtml
+ type: 'container',
+ label: 'Dimensions',
+ layout: 'flex',
+ align: 'center',
+ spacing: 5,
+ items: [
+ {
+ name: 'width',
+ type: 'textbox',
+ maxLength: 5,
+ size: 5,
+ onchange: recalcSize,
+ ariaLabel: 'Width'
+ },
+ {
+ type: 'label',
+ text: 'x'
+ },
+ {
+ name: 'height',
+ type: 'textbox',
+ maxLength: 5,
+ size: 5,
+ onchange: recalcSize,
+ ariaLabel: 'Height'
+ },
+ {
+ name: 'constrain',
+ type: 'checkbox',
+ checked: true,
+ text: 'Constrain proportions'
+ }
+ ]
};
- }
-);
-/**
- * SizeManager.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ };
+ var $_ewaahuhhjjgwecow = {
+ createUi: createUi,
+ syncSize: syncSize,
+ updateSize: updateSize
+ };
-define(
- 'tinymce.plugins.media.ui.SizeManager',
- [
- ],
- function () {
- var doSyncSize = function (widthCtrl, heightCtrl) {
- widthCtrl.state.set('oldVal', widthCtrl.value());
- heightCtrl.state.set('oldVal', heightCtrl.value());
+ var embedChange = global$1.ie && global$1.ie <= 8 ? 'onChange' : 'onInput';
+ var handleError = function (editor) {
+ return function (error) {
+ var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.';
+ editor.notificationManager.open({
+ type: 'error',
+ text: errorMessage
+ });
};
- var doSizeControls = function (win, f) {
- var widthCtrl = win.find('#width')[0];
- var heightCtrl = win.find('#height')[0];
- var constrained = win.find('#constrain')[0];
- if (widthCtrl && heightCtrl && constrained) {
- f(widthCtrl, heightCtrl, constrained.checked());
+ };
+ var getData = function (editor) {
+ var element = editor.selection.getNode();
+ var dataEmbed = element.getAttribute('data-ephox-embed-iri');
+ if (dataEmbed) {
+ return {
+ 'source1': dataEmbed,
+ 'data-ephox-embed-iri': dataEmbed,
+ 'width': $_jbvx7h8jjgwecnx.getMaxWidth(element),
+ 'height': $_jbvx7h8jjgwecnx.getMaxHeight(element)
+ };
+ }
+ return element.getAttribute('data-mce-object') ? $_6mep3hh4jjgwecnt.htmlToData($_69rpmgh3jjgwecnr.getScripts(editor), editor.serializer.serialize(element, { selection: true })) : {};
+ };
+ var getSource = function (editor) {
+ var elm = editor.selection.getNode();
+ if (elm.getAttribute('data-mce-object') || elm.getAttribute('data-ephox-embed-iri')) {
+ return editor.selection.getContent();
+ }
+ };
+ var addEmbedHtml = function (win, editor) {
+ return function (response) {
+ var html = response.html;
+ var embed = win.find('#embed')[0];
+ var data = global$2.extend($_6mep3hh4jjgwecnt.htmlToData($_69rpmgh3jjgwecnr.getScripts(editor), html), { source1: response.url });
+ win.fromJSON(data);
+ if (embed) {
+ embed.value(html);
+ $_ewaahuhhjjgwecow.updateSize(win);
}
};
-
- var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) {
- var oldWidth = widthCtrl.state.get('oldVal');
- var oldHeight = heightCtrl.state.get('oldVal');
- var newWidth = widthCtrl.value();
- var newHeight = heightCtrl.value();
-
- if (isContrained && oldWidth && oldHeight && newWidth && newHeight) {
- if (newWidth !== oldWidth) {
- newHeight = Math.round((newWidth / oldWidth) * newHeight);
-
- if (!isNaN(newHeight)) {
- heightCtrl.value(newHeight);
- }
- } else {
- newWidth = Math.round((newHeight / oldHeight) * newWidth);
-
- if (!isNaN(newWidth)) {
- widthCtrl.value(newWidth);
- }
+ };
+ var selectPlaceholder = function (editor, beforeObjects) {
+ var i;
+ var y;
+ var afterObjects = editor.dom.select('img[data-mce-object]');
+ for (i = 0; i < beforeObjects.length; i++) {
+ for (y = afterObjects.length - 1; y >= 0; y--) {
+ if (beforeObjects[i] === afterObjects[y]) {
+ afterObjects.splice(y, 1);
}
}
-
- doSyncSize(widthCtrl, heightCtrl);
+ }
+ editor.selection.select(afterObjects[0]);
+ };
+ var handleInsert = function (editor, html) {
+ var beforeObjects = editor.dom.select('img[data-mce-object]');
+ editor.insertContent(html);
+ selectPlaceholder(editor, beforeObjects);
+ editor.nodeChanged();
+ };
+ var submitForm = function (win, editor) {
+ var data = win.toJSON();
+ data.embed = $_s3qkohdjjgwecon.updateHtml(data.embed, data);
+ if (data.embed && $_cwvqyth9jjgweco9.isCached(data.source1)) {
+ handleInsert(editor, data.embed);
+ } else {
+ $_cwvqyth9jjgweco9.getEmbedHtml(editor, data).then(function (response) {
+ handleInsert(editor, response.html);
+ }).catch(handleError(editor));
+ }
+ };
+ var populateMeta = function (win, meta) {
+ global$2.each(meta, function (value, key) {
+ win.find('#' + key).value(value);
+ });
+ };
+ var showDialog = function (editor) {
+ var win;
+ var data;
+ var generalFormItems = [{
+ name: 'source1',
+ type: 'filepicker',
+ filetype: 'media',
+ size: 40,
+ autofocus: true,
+ label: 'Source',
+ onpaste: function () {
+ setTimeout(function () {
+ $_cwvqyth9jjgweco9.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));
+ }, 1);
+ },
+ onchange: function (e) {
+ $_cwvqyth9jjgweco9.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor));
+ populateMeta(win, e.meta);
+ },
+ onbeforecall: function (e) {
+ e.meta = win.toJSON();
+ }
+ }];
+ var advancedFormItems = [];
+ var reserialise = function (update) {
+ update(win);
+ data = win.toJSON();
+ win.find('#embed').value($_s3qkohdjjgwecon.updateHtml(data.embed, data));
};
-
- var syncSize = function (win) {
- doSizeControls(win, doSyncSize);
+ if ($_69rpmgh3jjgwecnr.hasAltSource(editor)) {
+ advancedFormItems.push({
+ name: 'source2',
+ type: 'filepicker',
+ filetype: 'media',
+ size: 40,
+ label: 'Alternative source'
+ });
+ }
+ if ($_69rpmgh3jjgwecnr.hasPoster(editor)) {
+ advancedFormItems.push({
+ name: 'poster',
+ type: 'filepicker',
+ filetype: 'image',
+ size: 40,
+ label: 'Poster'
+ });
+ }
+ if ($_69rpmgh3jjgwecnr.hasDimensions(editor)) {
+ var control = $_ewaahuhhjjgwecow.createUi(reserialise);
+ generalFormItems.push(control);
+ }
+ data = getData(editor);
+ var embedTextBox = {
+ id: 'mcemediasource',
+ type: 'textbox',
+ flex: 1,
+ name: 'embed',
+ value: getSource(editor),
+ multiline: true,
+ rows: 5,
+ label: 'Source'
};
-
- var updateSize = function (win) {
- doSizeControls(win, doUpdateSize);
+ var updateValueOnChange = function () {
+ data = global$2.extend({}, $_6mep3hh4jjgwecnt.htmlToData($_69rpmgh3jjgwecnr.getScripts(editor), this.value()));
+ this.parent().parent().fromJSON(data);
};
-
- var createUi = function (onChange) {
- var recalcSize = function () {
- onChange(function (win) {
- updateSize(win);
- });
- };
-
- return {
+ embedTextBox[embedChange] = updateValueOnChange;
+ var body = [
+ {
+ title: 'General',
+ type: 'form',
+ items: generalFormItems
+ },
+ {
+ title: 'Embed',
type: 'container',
- label: 'Dimensions',
layout: 'flex',
- align: 'center',
- spacing: 5,
+ direction: 'column',
+ align: 'stretch',
+ padding: 10,
+ spacing: 10,
items: [
{
- name: 'width', type: 'textbox', maxLength: 5, size: 5,
- onchange: recalcSize, ariaLabel: 'Width'
+ type: 'label',
+ text: 'Paste your embed code below:',
+ forId: 'mcemediasource'
},
- { type: 'label', text: 'x' },
- {
- name: 'height', type: 'textbox', maxLength: 5, size: 5,
- onchange: recalcSize, ariaLabel: 'Height'
- },
- { name: 'constrain', type: 'checkbox', checked: true, text: 'Constrain proportions' }
+ embedTextBox
]
- };
- };
-
- return {
- createUi: createUi,
- syncSize: syncSize,
- updateSize: updateSize
- };
- }
-);
-/**
- * Dialog.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.ui.Dialog',
- [
- 'tinymce.core.util.Delay',
- 'tinymce.plugins.media.core.HtmlToData',
- 'tinymce.plugins.media.core.UpdateHtml',
- 'tinymce.plugins.media.core.Service',
- 'tinymce.plugins.media.core.Size',
- 'tinymce.core.util.Tools',
- 'tinymce.core.Env',
- 'tinymce.plugins.media.ui.SizeManager'
- ],
- function (Delay, HtmlToData, UpdateHtml, Service, Size, Tools, Env, SizeManager) {
- var embedChange = (Env.ie && Env.ie <= 8) ? 'onChange' : 'onInput';
-
- var handleError = function (editor) {
- return function (error) {
- var errorMessage = error && error.msg ?
- 'Media embed handler error: ' + error.msg :
- 'Media embed handler threw unknown error.';
- editor.notificationManager.open({ type: 'error', text: errorMessage });
- };
- };
-
- var getData = function (editor) {
- var element = editor.selection.getNode();
- var dataEmbed = element.getAttribute('data-ephox-embed-iri');
-
- if (dataEmbed) {
- return {
- source1: dataEmbed,
- 'data-ephox-embed-iri': dataEmbed,
- width: Size.getMaxWidth(element),
- height: Size.getMaxHeight(element)
- };
}
+ ];
+ if (advancedFormItems.length > 0) {
+ body.push({
+ title: 'Advanced',
+ type: 'form',
+ items: advancedFormItems
+ });
+ }
+ win = editor.windowManager.open({
+ title: 'Insert/edit media',
+ data: data,
+ bodyType: 'tabpanel',
+ body: body,
+ onSubmit: function () {
+ $_ewaahuhhjjgwecow.updateSize(win);
+ submitForm(win, editor);
+ }
+ });
+ $_ewaahuhhjjgwecow.syncSize(win);
+ };
+ var $_e3lvjbh0jjgwecnm = { showDialog: showDialog };
- return element.getAttribute('data-mce-object') ?
- HtmlToData.htmlToData(editor.settings.media_scripts, editor.serializer.serialize(element, { selection: true })) :
- {};
+ var get = function (editor) {
+ var showDialog = function () {
+ $_e3lvjbh0jjgwecnm.showDialog(editor);
};
+ return { showDialog: showDialog };
+ };
+ var $_9lh0mgzjjgwecnk = { get: get };
- var getSource = function (editor) {
- var elm = editor.selection.getNode();
-
- if (elm.getAttribute('data-mce-object') || elm.getAttribute('data-ephox-embed-iri')) {
- return editor.selection.getContent();
- }
+ var register = function (editor) {
+ var showDialog = function () {
+ $_e3lvjbh0jjgwecnm.showDialog(editor);
};
+ editor.addCommand('mceMedia', showDialog);
+ };
+ var $_3pne6fhijjgwecoz = { register: register };
- var addEmbedHtml = function (win, editor) {
- return function (response) {
- var html = response.html;
- var embed = win.find('#embed')[0];
- var data = Tools.extend(HtmlToData.htmlToData(editor.settings.media_scripts, html), { source1: response.url });
- win.fromJSON(data);
+ var global$8 = tinymce.util.Tools.resolve('tinymce.html.Node');
- if (embed) {
- embed.value(html);
- SizeManager.updateSize(win);
+ var sanitize = function (editor, html) {
+ if ($_69rpmgh3jjgwecnr.shouldFilterHtml(editor) === false) {
+ return html;
+ }
+ var writer = global$6();
+ var blocked;
+ global$3({
+ validate: false,
+ allow_conditional_comments: false,
+ special: 'script,noscript',
+ comment: function (text) {
+ writer.comment(text);
+ },
+ cdata: function (text) {
+ writer.cdata(text);
+ },
+ text: function (text, raw) {
+ writer.text(text, raw);
+ },
+ start: function (name, attrs, empty) {
+ blocked = true;
+ if (name === 'script' || name === 'noscript') {
+ return;
}
- };
- };
-
- var selectPlaceholder = function (editor, beforeObjects) {
- var i;
- var y;
- var afterObjects = editor.dom.select('img[data-mce-object]');
-
- // Find new image placeholder so we can select it
- for (i = 0; i < beforeObjects.length; i++) {
- for (y = afterObjects.length - 1; y >= 0; y--) {
- if (beforeObjects[i] === afterObjects[y]) {
- afterObjects.splice(y, 1);
+ for (var i = 0; i < attrs.length; i++) {
+ if (attrs[i].name.indexOf('on') === 0) {
+ return;
}
- }
- }
-
- editor.selection.select(afterObjects[0]);
- };
-
- var handleInsert = function (editor, html) {
- var beforeObjects = editor.dom.select('img[data-mce-object]');
-
- editor.insertContent(html);
- selectPlaceholder(editor, beforeObjects);
- editor.nodeChanged();
- };
-
- var submitForm = function (win, editor) {
- var data = win.toJSON();
-
- data.embed = UpdateHtml.updateHtml(data.embed, data);
-
- if (data.embed) {
- handleInsert(editor, data.embed);
- } else {
- Service.getEmbedHtml(editor, data)
- .then(function (response) {
- handleInsert(editor, response.html);
- })["catch"](handleError(editor));
- }
- };
-
- var populateMeta = function (win, meta) {
- Tools.each(meta, function (value, key) {
- win.find('#' + key).value(value);
- });
- };
-
- var showDialog = function (editor) {
- var win;
- var data;
-
- var generalFormItems = [
- {
- name: 'source1',
- type: 'filepicker',
- filetype: 'media',
- size: 40,
- autofocus: true,
- label: 'Source',
- onpaste: function () {
- setTimeout(function () {
- Service.getEmbedHtml(editor, win.toJSON())
- .then(
- addEmbedHtml(win, editor)
- )["catch"](handleError(editor));
- }, 1);
- },
- onchange: function (e) {
- Service.getEmbedHtml(editor, win.toJSON())
- .then(
- addEmbedHtml(win, editor)
- )["catch"](handleError(editor));
-
- populateMeta(win, e.meta);
- },
- onbeforecall: function (e) {
- e.meta = win.toJSON();
+ if (attrs[i].name === 'style') {
+ attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name);
}
}
- ];
-
- var advancedFormItems = [];
-
- var reserialise = function (update) {
- update(win);
- data = win.toJSON();
- win.find('#embed').value(UpdateHtml.updateHtml(data.embed, data));
- };
-
- if (editor.settings.media_alt_source !== false) {
- advancedFormItems.push({ name: 'source2', type: 'filepicker', filetype: 'media', size: 40, label: 'Alternative source' });
+ writer.start(name, attrs, empty);
+ blocked = false;
+ },
+ end: function (name) {
+ if (blocked) {
+ return;
+ }
+ writer.end(name);
}
-
- if (editor.settings.media_poster !== false) {
- advancedFormItems.push({ name: 'poster', type: 'filepicker', filetype: 'image', size: 40, label: 'Poster' });
+ }, global$7({})).parse(html);
+ return writer.getContent();
+ };
+ var $_58i2qvhmjjgwecp7 = { sanitize: sanitize };
+
+ var createPlaceholderNode = function (editor, node) {
+ var placeHolder;
+ var name = node.name;
+ placeHolder = new global$8('img', 1);
+ placeHolder.shortEnded = true;
+ retainAttributesAndInnerHtml(editor, node, placeHolder);
+ placeHolder.attr({
+ 'width': node.attr('width') || '300',
+ 'height': node.attr('height') || (name === 'audio' ? '30' : '150'),
+ 'style': node.attr('style'),
+ 'src': global$1.transparentSrc,
+ 'data-mce-object': name,
+ 'class': 'mce-object mce-object-' + name
+ });
+ return placeHolder;
+ };
+ var createPreviewIframeNode = function (editor, node) {
+ var previewWrapper;
+ var previewNode;
+ var shimNode;
+ var name = node.name;
+ previewWrapper = new global$8('span', 1);
+ previewWrapper.attr({
+ 'contentEditable': 'false',
+ 'style': node.attr('style'),
+ 'data-mce-object': name,
+ 'class': 'mce-preview-object mce-object-' + name
+ });
+ retainAttributesAndInnerHtml(editor, node, previewWrapper);
+ previewNode = new global$8(name, 1);
+ previewNode.attr({
+ src: node.attr('src'),
+ allowfullscreen: node.attr('allowfullscreen'),
+ style: node.attr('style'),
+ class: node.attr('class'),
+ width: node.attr('width'),
+ height: node.attr('height'),
+ frameborder: '0'
+ });
+ shimNode = new global$8('span', 1);
+ shimNode.attr('class', 'mce-shim');
+ previewWrapper.append(previewNode);
+ previewWrapper.append(shimNode);
+ return previewWrapper;
+ };
+ var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) {
+ var attrName;
+ var attrValue;
+ var attribs;
+ var ai;
+ var innerHtml;
+ attribs = sourceNode.attributes;
+ ai = attribs.length;
+ while (ai--) {
+ attrName = attribs[ai].name;
+ attrValue = attribs[ai].value;
+ if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') {
+ if (attrName === 'data' || attrName === 'src') {
+ attrValue = editor.convertURL(attrValue, attrName);
+ }
+ targetNode.attr('data-mce-p-' + attrName, attrValue);
}
-
- if (editor.settings.media_dimensions !== false) {
- var control = SizeManager.createUi(reserialise);
- generalFormItems.push(control);
+ }
+ innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;
+ if (innerHtml) {
+ targetNode.attr('data-mce-html', escape($_58i2qvhmjjgwecp7.sanitize(editor, innerHtml)));
+ targetNode.firstChild = null;
+ }
+ };
+ var isWithinEphoxEmbed = function (node) {
+ while (node = node.parent) {
+ if (node.attr('data-ephox-embed-iri')) {
+ return true;
}
-
- data = getData(editor);
-
- var embedTextBox = {
- id: 'mcemediasource',
- type: 'textbox',
- flex: 1,
- name: 'embed',
- value: getSource(editor),
- multiline: true,
- rows: 5,
- label: 'Source'
- };
-
- var updateValueOnChange = function () {
- data = Tools.extend({}, HtmlToData.htmlToData(editor.settings.media_scripts, this.value()));
- this.parent().parent().fromJSON(data);
- };
-
- embedTextBox[embedChange] = updateValueOnChange;
-
- win = editor.windowManager.open({
- title: 'Insert/edit media',
- data: data,
- bodyType: 'tabpanel',
- body: [
- {
- title: 'General',
- type: "form",
- items: generalFormItems
- },
-
- {
- title: 'Embed',
- type: "container",
- layout: 'flex',
- direction: 'column',
- align: 'stretch',
- padding: 10,
- spacing: 10,
- items: [
- {
- type: 'label',
- text: 'Paste your embed code below:',
- forId: 'mcemediasource'
- },
- embedTextBox
- ]
- },
-
- {
- title: 'Advanced',
- type: "form",
- items: advancedFormItems
+ }
+ return false;
+ };
+ var placeHolderConverter = function (editor) {
+ return function (nodes) {
+ var i = nodes.length;
+ var node;
+ var videoScript;
+ while (i--) {
+ node = nodes[i];
+ if (!node.parent) {
+ continue;
+ }
+ if (node.parent.attr('data-mce-object')) {
+ continue;
+ }
+ if (node.name === 'script') {
+ videoScript = $_4q3fmh7jjgwecnw.getVideoScriptMatch($_69rpmgh3jjgwecnr.getScripts(editor), node.attr('src'));
+ if (!videoScript) {
+ continue;
}
- ],
- onSubmit: function () {
- SizeManager.updateSize(win);
- submitForm(win, editor);
}
- });
-
- SizeManager.syncSize(win);
- };
-
- return {
- showDialog: showDialog
+ if (videoScript) {
+ if (videoScript.width) {
+ node.attr('width', videoScript.width.toString());
+ }
+ if (videoScript.height) {
+ node.attr('height', videoScript.height.toString());
+ }
+ }
+ if (node.name === 'iframe' && $_69rpmgh3jjgwecnr.hasLiveEmbeds(editor) && global$1.ceFalse) {
+ if (!isWithinEphoxEmbed(node)) {
+ node.replace(createPreviewIframeNode(editor, node));
+ }
+ } else {
+ if (!isWithinEphoxEmbed(node)) {
+ node.replace(createPlaceholderNode(editor, node));
+ }
+ }
+ }
};
- }
-);
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.media.Plugin',
- [
- 'tinymce.core.html.Node',
- 'tinymce.core.PluginManager',
- 'tinymce.core.util.Tools',
- 'tinymce.plugins.media.core.Nodes',
- 'tinymce.plugins.media.core.Sanitize',
- 'tinymce.plugins.media.core.UpdateHtml',
- 'tinymce.plugins.media.ui.Dialog'
- ],
- function (Node, PluginManager, Tools, Nodes, Sanitize, UpdateHtml, Dialog) {
- var Plugin = function (editor) {
- editor.on('ResolveName', function (e) {
- var name;
+ };
+ var $_ggjz3ehljjgwecp4 = {
+ createPreviewIframeNode: createPreviewIframeNode,
+ createPlaceholderNode: createPlaceholderNode,
+ placeHolderConverter: placeHolderConverter
+ };
- if (e.target.nodeType === 1 && (name = e.target.getAttribute("data-mce-object"))) {
- e.name = name;
- }
+ var setup = function (editor) {
+ editor.on('preInit', function () {
+ var specialElements = editor.schema.getSpecialElements();
+ global$2.each('video audio iframe object'.split(' '), function (name) {
+ specialElements[name] = new RegExp('</' + name + '[^>]*>', 'gi');
});
-
- editor.on('preInit', function () {
- // Make sure that any messy HTML is retained inside these
- var specialElements = editor.schema.getSpecialElements();
- Tools.each('video audio iframe object'.split(' '), function (name) {
- specialElements[name] = new RegExp('<\/' + name + '[^>]*>', 'gi');
- });
-
- // Allow elements
- //editor.schema.addValidElements(
- // 'object[id|style|width|height|classid|codebase|*],embed[id|style|width|height|type|src|*],video[*],audio[*]'
- //);
-
- // Set allowFullscreen attribs as boolean
- var boolAttrs = editor.schema.getBoolAttrs();
- Tools.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {
- boolAttrs[name] = {};
- });
-
- // Converts iframe, video etc into placeholder images
- editor.parser.addNodeFilter('iframe,video,audio,object,embed,script',
- Nodes.placeHolderConverter(editor));
-
- // Replaces placeholder images with real elements for video, object, iframe etc
- editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {
- var i = nodes.length;
- var node;
- var realElm;
- var ai;
- var attribs;
- var innerHtml;
- var innerNode;
- var realElmName;
- var className;
-
- while (i--) {
- node = nodes[i];
- if (!node.parent) {
- continue;
- }
-
- realElmName = node.attr(name);
- realElm = new Node(realElmName, 1);
-
- // Add width/height to everything but audio
- if (realElmName !== "audio" && realElmName !== "script") {
- className = node.attr('class');
- if (className && className.indexOf('mce-preview-object') !== -1) {
- realElm.attr({
- width: node.firstChild.attr('width'),
- height: node.firstChild.attr('height')
- });
- } else {
- realElm.attr({
- width: node.attr('width'),
- height: node.attr('height')
- });
- }
- }
-
- realElm.attr({
- style: node.attr('style')
- });
-
- // Unprefix all placeholder attributes
- attribs = node.attributes;
- ai = attribs.length;
- while (ai--) {
- var attrName = attribs[ai].name;
-
- if (attrName.indexOf('data-mce-p-') === 0) {
- realElm.attr(attrName.substr(11), attribs[ai].value);
- }
- }
-
- if (realElmName === "script") {
- realElm.attr('type', 'text/javascript');
+ var boolAttrs = editor.schema.getBoolAttrs();
+ global$2.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) {
+ boolAttrs[name] = {};
+ });
+ editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', $_ggjz3ehljjgwecp4.placeHolderConverter(editor));
+ editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) {
+ var i = nodes.length;
+ var node;
+ var realElm;
+ var ai;
+ var attribs;
+ var innerHtml;
+ var innerNode;
+ var realElmName;
+ var className;
+ while (i--) {
+ node = nodes[i];
+ if (!node.parent) {
+ continue;
+ }
+ realElmName = node.attr(name);
+ realElm = new global$8(realElmName, 1);
+ if (realElmName !== 'audio' && realElmName !== 'script') {
+ className = node.attr('class');
+ if (className && className.indexOf('mce-preview-object') !== -1) {
+ realElm.attr({
+ width: node.firstChild.attr('width'),
+ height: node.firstChild.attr('height')
+ });
+ } else {
+ realElm.attr({
+ width: node.attr('width'),
+ height: node.attr('height')
+ });
}
-
- // Inject innerhtml
- innerHtml = node.attr('data-mce-html');
- if (innerHtml) {
- innerNode = new Node('#text', 3);
- innerNode.raw = true;
- innerNode.value = Sanitize.sanitize(editor, unescape(innerHtml));
- realElm.append(innerNode);
+ }
+ realElm.attr({ style: node.attr('style') });
+ attribs = node.attributes;
+ ai = attribs.length;
+ while (ai--) {
+ var attrName = attribs[ai].name;
+ if (attrName.indexOf('data-mce-p-') === 0) {
+ realElm.attr(attrName.substr(11), attribs[ai].value);
}
-
- node.replace(realElm);
}
- });
- });
-
- editor.on('click keyup', function () {
- var selectedNode = editor.selection.getNode();
-
- if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {
- if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {
- selectedNode.setAttribute('data-mce-selected', '2');
+ if (realElmName === 'script') {
+ realElm.attr('type', 'text/javascript');
+ }
+ innerHtml = node.attr('data-mce-html');
+ if (innerHtml) {
+ innerNode = new global$8('#text', 3);
+ innerNode.raw = true;
+ innerNode.value = $_58i2qvhmjjgwecp7.sanitize(editor, unescape(innerHtml));
+ realElm.append(innerNode);
}
+ node.replace(realElm);
}
});
-
- editor.on('ObjectSelected', function (e) {
- var objectType = e.target.getAttribute('data-mce-object');
-
- if (objectType === "audio" || objectType === "script") {
- e.preventDefault();
+ });
+ editor.on('setContent', function () {
+ editor.$('span.mce-preview-object').each(function (index, elm) {
+ var $elm = editor.$(elm);
+ if ($elm.find('span.mce-shim', elm).length === 0) {
+ $elm.append('<span class="mce-shim"></span>');
}
});
+ });
+ };
+ var $_4o7ga9hjjjgwecp0 = { setup: setup };
- editor.on('objectResized', function (e) {
- var target = e.target;
- var html;
-
- if (target.getAttribute('data-mce-object')) {
- html = target.getAttribute('data-mce-html');
- if (html) {
- html = unescape(html);
- target.setAttribute('data-mce-html', escape(
- UpdateHtml.updateHtml(html, {
- width: e.width,
- height: e.height
- })
- ));
- }
+ var setup$1 = function (editor) {
+ editor.on('ResolveName', function (e) {
+ var name;
+ if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) {
+ e.name = name;
+ }
+ });
+ };
+ var $_1y6lb6hnjjgwecp9 = { setup: setup$1 };
+
+ var setup$2 = function (editor) {
+ editor.on('click keyup', function () {
+ var selectedNode = editor.selection.getNode();
+ if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) {
+ if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) {
+ selectedNode.setAttribute('data-mce-selected', '2');
}
- });
-
- this.showDialog = function () {
- Dialog.showDialog(editor);
- };
-
- editor.addButton('media', {
- tooltip: 'Insert/edit media',
- onclick: this.showDialog,
- stateSelector: ['img[data-mce-object]', 'span[data-mce-object]', 'div[data-ephox-embed-iri]']
- });
-
- editor.addMenuItem('media', {
- icon: 'media',
- text: 'Media',
- onclick: this.showDialog,
- context: 'insert',
- prependToContext: true
- });
-
- editor.on('setContent', function () {
- // TODO: This shouldn't be needed there should be a way to mark bogus
- // elements so they are never removed except external save
- editor.$('span.mce-preview-object').each(function (index, elm) {
- var $elm = editor.$(elm);
-
- if ($elm.find('span.mce-shim', elm).length === 0) {
- $elm.append('<span class="mce-shim"></span>');
- }
- });
- });
-
- editor.addCommand('mceMedia', this.showDialog);
- };
-
- PluginManager.add('media', Plugin);
-
- return function () { };
+ }
+ });
+ editor.on('ObjectSelected', function (e) {
+ var objectType = e.target.getAttribute('data-mce-object');
+ if (objectType === 'audio' || objectType === 'script') {
+ e.preventDefault();
+ }
+ });
+ editor.on('objectResized', function (e) {
+ var target = e.target;
+ var html;
+ if (target.getAttribute('data-mce-object')) {
+ html = target.getAttribute('data-mce-html');
+ if (html) {
+ html = unescape(html);
+ target.setAttribute('data-mce-html', escape($_s3qkohdjjgwecon.updateHtml(html, {
+ width: e.width,
+ height: e.height
+ })));
+ }
+ }
+ });
+ };
+ var $_dnm1d2hojjgwecpa = { setup: setup$2 };
+
+ var register$1 = function (editor) {
+ editor.addButton('media', {
+ tooltip: 'Insert/edit media',
+ cmd: 'mceMedia',
+ stateSelector: [
+ 'img[data-mce-object]',
+ 'span[data-mce-object]',
+ 'div[data-ephox-embed-iri]'
+ ]
+ });
+ editor.addMenuItem('media', {
+ icon: 'media',
+ text: 'Media',
+ cmd: 'mceMedia',
+ context: 'insert',
+ prependToContext: true
+ });
+ };
+ var $_94c7u1hpjjgwecpc = { register: register$1 };
+
+ global.add('media', function (editor) {
+ $_3pne6fhijjgwecoz.register(editor);
+ $_94c7u1hpjjgwecpc.register(editor);
+ $_1y6lb6hnjjgwecp9.setup(editor);
+ $_4o7ga9hjjjgwecp0.setup(editor);
+ $_dnm1d2hojjgwecpa.setup(editor);
+ return $_9lh0mgzjjgwecnk.get(editor);
+ });
+ function Plugin () {
}
-);
+ return Plugin;
-dem('tinymce.plugins.media.Plugin')();
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("8",tinymce.util.Tools.resolve),g("1",["8"],function(a){return a("tinymce.html.Node")}),g("2",["8"],function(a){return a("tinymce.PluginManager")}),g("3",["8"],function(a){return a("tinymce.util.Tools")}),g("9",["8"],function(a){return a("tinymce.html.Writer")}),g("a",["8"],function(a){return a("tinymce.html.SaxParser")}),g("b",["8"],function(a){return a("tinymce.html.Schema")}),g("5",["3","9","a","b"],function(a,b,c,d){var e=function(a,e){if(a.settings.media_filter_html===!1)return e;var f,g=new b;return new c({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(a){g.comment(a)},cdata:function(a){g.cdata(a)},text:function(a,b){g.text(a,b)},start:function(b,c,d){if(f=!0,"script"!==b&&"noscript"!==b){for(var e=0;e<c.length;e++){if(0===c[e].name.indexOf("on"))return;"style"===c[e].name&&(c[e].value=a.dom.serializeStyle(a.dom.parseStyle(c[e].value),b))}g.start(b,c,d),f=!1}},end:function(a){f||g.end(a)}},new d({})).parse(e),g.getContent()};return{sanitize:e}}),g("c",[],function(){var a=function(a,b){if(a)for(var c=0;c<a.length;c++)if(b.indexOf(a[c].filter)!==-1)return a[c]};return{getVideoScriptMatch:a}}),g("d",["8"],function(a){return a("tinymce.Env")}),g("4",["5","c","1","d"],function(a,b,c,d){var e=function(a,b){var e,f=b.name;return e=new c("img",1),e.shortEnded=!0,g(a,b,e),e.attr({width:b.attr("width")||"300",height:b.attr("height")||("audio"===f?"30":"150"),style:b.attr("style"),src:d.transparentSrc,"data-mce-object":f,"class":"mce-object mce-object-"+f}),e},f=function(a,b){var d,e,f,h=b.name;return d=new c("span",1),d.attr({contentEditable:"false",style:b.attr("style"),"data-mce-object":h,"class":"mce-preview-object mce-object-"+h}),g(a,b,d),e=new c(h,1),e.attr({src:b.attr("src"),allowfullscreen:b.attr("allowfullscreen"),width:b.attr("width")||"300",height:b.attr("height")||("audio"===h?"30":"150"),frameborder:"0"}),f=new c("span",1),f.attr("class","mce-shim"),d.append(e),d.append(f),d},g=function(b,c,d){var e,f,g,h,i;for(g=c.attributes,h=g.length;h--;)e=g[h].name,f=g[h].value,"width"!==e&&"height"!==e&&"style"!==e&&("data"!==e&&"src"!==e||(f=b.convertURL(f,e)),d.attr("data-mce-p-"+e,f));i=c.firstChild&&c.firstChild.value,i&&(d.attr("data-mce-html",escape(a.sanitize(b,i))),d.firstChild=null)},h=function(a){for(;a=a.parent;)if(a.attr("data-ephox-embed-iri"))return!0;return!1},i=function(a){return function(c){for(var g,i,j=c.length;j--;)g=c[j],g.parent&&(g.parent.attr("data-mce-object")||("script"!==g.name||(i=b.getVideoScriptMatch(a.settings.media_scripts,g.attr("src"))))&&(i&&(i.width&&g.attr("width",i.width.toString()),i.height&&g.attr("height",i.height.toString())),"iframe"===g.name&&a.settings.media_live_embeds!==!1&&d.ceFalse?h(g)||g.replace(f(a,g)):h(g)||g.replace(e(a,g))))}};return{createPreviewIframeNode:f,createPlaceholderNode:e,placeHolderConverter:i}}),g("e",["8"],function(a){return a("tinymce.dom.DOMUtils")}),g("f",[],function(){var a=function(a){return a.replace(/px$/,"")},b=function(a){return/^[0-9.]+$/.test(a)?a+"px":a},c=function(b){return function(c){return c?a(c.style[b]):""}},d=function(a){return function(c,d){c&&(c.style[a]=b(d))}};return{getMaxWidth:c("maxWidth"),getMaxHeight:c("maxHeight"),setMaxWidth:d("maxWidth"),setMaxHeight:d("maxHeight")}}),g("6",["9","a","b","e","f"],function(a,b,c,d,e){var f=d.DOM,g=function(a,b){var c,d,e,f;for(c in b)if(e=""+b[c],a.map[c])for(d=a.length;d--;)f=a[d],f.name===c&&(e?(a.map[c]=e,f.value=e):(delete a.map[c],a.splice(d,1)));else e&&(a.push({name:c,value:e}),a.map[c]=e)},h=function(c){var d=new a,e=new b(d);return e.parse(c),d.getContent()},i=function(d,e,f){var h,i=new a,j=0;return new b({validate:!1,allow_conditional_comments:!0,special:"script,noscript",comment:function(a){i.comment(a)},cdata:function(a){i.cdata(a)},text:function(a,b){i.text(a,b)},start:function(a,b,c){switch(a){case"video":case"object":case"embed":case"img":case"iframe":void 0!==e.height&&void 0!==e.width&&g(b,{width:e.width,height:e.height})}if(f)switch(a){case"video":g(b,{poster:e.poster,src:""}),e.source2&&g(b,{src:""});break;case"iframe":g(b,{src:e.source1});break;case"source":if(j++,j<=2&&(g(b,{src:e["source"+j],type:e["source"+j+"mime"]}),!e["source"+j]))return;break;case"img":if(!e.poster)return;h=!0}i.start(a,b,c)},end:function(a){if("video"===a&&f)for(var b=1;b<=2;b++)if(e["source"+b]){var c=[];c.map={},j<b&&(g(c,{src:e["source"+b],type:e["source"+b+"mime"]}),i.start("source",c,!0))}if(e.poster&&"object"===a&&f&&!h){var d=[];d.map={},g(d,{src:e.poster,width:e.width,height:e.height}),i.start("img",d,!0)}i.end(a)}},new c({})).parse(d),i.getContent()},j=function(a){var b=f.createFragment(a);return""!==f.getAttrib(b.firstChild,"data-ephox-embed-iri")},k=function(a,b){var c=f.createFragment(a),d=c.firstChild;return e.setMaxWidth(d,b.width),e.setMaxHeight(d,b.height),h(d.outerHTML)},l=function(a,b,c){return j(a)?k(a,b):i(a,b,c)};return{updateHtml:l}}),g("g",["8"],function(a){return a("tinymce.util.Delay")}),g("h",["3","a","b","e","c","f"],function(a,b,c,d,e,f){var g=d.DOM,h=function(a){return g.getAttrib(a,"data-ephox-embed-iri")},i=function(a){var b=g.createFragment(a);return""!==h(b.firstChild)},j=function(c,d){var f={};return new b({validate:!1,allow_conditional_comments:!0,special:"script,noscript",start:function(b,d){if(f.source1||"param"!==b||(f.source1=d.map.movie),"iframe"!==b&&"object"!==b&&"embed"!==b&&"video"!==b&&"audio"!==b||(f.type||(f.type=b),f=a.extend(d.map,f)),"script"===b){var g=e.getVideoScriptMatch(c,d.map.src);if(!g)return;f={type:"script",source1:d.map.src,width:g.width,height:g.height}}"source"===b&&(f.source1?f.source2||(f.source2=d.map.src):f.source1=d.map.src),"img"!==b||f.poster||(f.poster=d.map.src)}}).parse(d),f.source1=f.source1||f.src||f.data,f.source2=f.source2||"",f.poster=f.poster||"",f},k=function(a){var b=g.createFragment(a),c=b.firstChild;return{type:"ephox-embed-iri",source1:h(c),source2:"",poster:"",width:f.getMaxWidth(c),height:f.getMaxHeight(c)}},l=function(a,b){return i(b)?k(b):j(a,b)};return{htmlToData:l}}),g("m",[],function(){var a=function(a){var b={mp3:"audio/mpeg",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"},c=a.toLowerCase().split(".").pop(),d=b[c];return d?d:""};return{guess:a}}),g("n",[],function(){var a=[{regex:/youtu\.be\/([\w\-.]+)/,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)/,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$2",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\-_]+(?:\?.+)?)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowfullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&byline=0",allowfullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0}];return{urlPatterns:a}}),g("k",["m","h","n","c","6","3"],function(a,b,c,d,e,f){var g=function(g,h){var i="",j=f.extend({},h);if(!j.source1&&(f.extend(j,b.htmlToData(g.settings.media_scripts,j.embed)),!j.source1))return"";if(j.source2||(j.source2=""),j.poster||(j.poster=""),j.source1=g.convertURL(j.source1,"source"),j.source2=g.convertURL(j.source2,"source"),j.source1mime=a.guess(j.source1),j.source2mime=a.guess(j.source2),j.poster=g.convertURL(j.poster,"poster"),f.each(c.urlPatterns,function(a){var b,c,d=a.regex.exec(j.source1);if(d){for(c=a.url,b=0;d[b];b++)c=c.replace("$"+b,function(){return d[b]});j.source1=c,j.type=a.type,j.allowFullscreen=a.allowFullscreen,j.width=j.width||a.w,j.height=j.height||a.h}}),j.embed)i=e.updateHtml(j.embed,j,!0);else{var k=d.getVideoScriptMatch(g.settings.media_scripts,j.source1);if(k&&(j.type="script",j.width=k.width,j.height=k.height),j.width=j.width||300,j.height=j.height||150,f.each(j,function(a,b){j[b]=g.dom.encode(a)}),"iframe"===j.type){var l=j.allowFullscreen?' allowFullscreen="1"':"";i+='<iframe src="'+j.source1+'" width="'+j.width+'" height="'+j.height+'"'+l+"></iframe>"}else"application/x-shockwave-flash"===j.source1mime?(i+='<object data="'+j.source1+'" width="'+j.width+'" height="'+j.height+'" type="application/x-shockwave-flash">',j.poster&&(i+='<img src="'+j.poster+'" width="'+j.width+'" height="'+j.height+'" />'),i+="</object>"):j.source1mime.indexOf("audio")!==-1?g.settings.audio_template_callback?i=g.settings.audio_template_callback(j):i+='<audio controls="controls" src="'+j.source1+'">'+(j.source2?'\n<source src="'+j.source2+'"'+(j.source2mime?' type="'+j.source2mime+'"':"")+" />\n":"")+"</audio>":"script"===j.type?i+='<script src="'+j.source1+'"></script>':i=g.settings.video_template_callback?g.settings.video_template_callback(j):'<video width="'+j.width+'" height="'+j.height+'"'+(j.poster?' poster="'+j.poster+'"':"")+' controls="controls">\n<source src="'+j.source1+'"'+(j.source1mime?' type="'+j.source1mime+'"':"")+" />\n"+(j.source2?'<source src="'+j.source2+'"'+(j.source2mime?' type="'+j.source2mime+'"':"")+" />\n":"")+"</video>"}return i};return{dataToHtml:g}}),g("l",["8"],function(a){return a("tinymce.util.Promise")}),g("i",["k","l"],function(a,b){var c=function(a,c,d){var e={};return new b(function(b,f){var g=function(d){return d.html&&(e[a.source1]=d),b({url:a.source1,html:d.html?d.html:c(a)})};e[a.source1]?g(e[a.source1]):d({url:a.source1},g,f)})},d=function(a,c){return new b(function(b){b({html:c(a),url:a.source1})})},e=function(b){return function(c){return a.dataToHtml(b,c)}},f=function(a,b){var f=a.settings.media_url_resolver;return f?c(b,e(a),f):d(b,e(a))};return{getEmbedHtml:f}}),g("j",[],function(){var a=function(a,b){a.state.set("oldVal",a.value()),b.state.set("oldVal",b.value())},b=function(a,b){var c=a.find("#width")[0],d=a.find("#height")[0],e=a.find("#constrain")[0];c&&d&&e&&b(c,d,e.checked())},c=function(b,c,d){var e=b.state.get("oldVal"),f=c.state.get("oldVal"),g=b.value(),h=c.value();d&&e&&f&&g&&h&&(g!==e?(h=Math.round(g/e*h),isNaN(h)||c.value(h)):(g=Math.round(h/f*g),isNaN(g)||b.value(g))),a(b,c)},d=function(c){b(c,a)},e=function(a){b(a,c)},f=function(a){var b=function(){a(function(a){e(a)})};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:b,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:b,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}};return{createUi:f,syncSize:d,updateSize:e}}),g("7",["g","h","6","i","f","3","d","j"],function(a,b,c,d,e,f,g,h){var i=g.ie&&g.ie<=8?"onChange":"onInput",j=function(a){return function(b){var c=b&&b.msg?"Media embed handler error: "+b.msg:"Media embed handler threw unknown error.";a.notificationManager.open({type:"error",text:c})}},k=function(a){var c=a.selection.getNode(),d=c.getAttribute("data-ephox-embed-iri");return d?{source1:d,"data-ephox-embed-iri":d,width:e.getMaxWidth(c),height:e.getMaxHeight(c)}:c.getAttribute("data-mce-object")?b.htmlToData(a.settings.media_scripts,a.serializer.serialize(c,{selection:!0})):{}},l=function(a){var b=a.selection.getNode();if(b.getAttribute("data-mce-object")||b.getAttribute("data-ephox-embed-iri"))return a.selection.getContent()},m=function(a,c){return function(d){var e=d.html,g=a.find("#embed")[0],i=f.extend(b.htmlToData(c.settings.media_scripts,e),{source1:d.url});a.fromJSON(i),g&&(g.value(e),h.updateSize(a))}},n=function(a,b){var c,d,e=a.dom.select("img[data-mce-object]");for(c=0;c<b.length;c++)for(d=e.length-1;d>=0;d--)b[c]===e[d]&&e.splice(d,1);a.selection.select(e[0])},o=function(a,b){var c=a.dom.select("img[data-mce-object]");a.insertContent(b),n(a,c),a.nodeChanged()},p=function(a,b){var e=a.toJSON();e.embed=c.updateHtml(e.embed,e),e.embed?o(b,e.embed):d.getEmbedHtml(b,e).then(function(a){o(b,a.html)})["catch"](j(b))},q=function(a,b){f.each(b,function(b,c){a.find("#"+c).value(b)})},r=function(a){var e,g,n=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onpaste:function(){setTimeout(function(){d.getEmbedHtml(a,e.toJSON()).then(m(e,a))["catch"](j(a))},1)},onchange:function(b){d.getEmbedHtml(a,e.toJSON()).then(m(e,a))["catch"](j(a)),q(e,b.meta)},onbeforecall:function(a){a.meta=e.toJSON()}}],o=[],r=function(a){a(e),g=e.toJSON(),e.find("#embed").value(c.updateHtml(g.embed,g))};if(a.settings.media_alt_source!==!1&&o.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),a.settings.media_poster!==!1&&o.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),a.settings.media_dimensions!==!1){var s=h.createUi(r);n.push(s)}g=k(a);var t={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:l(a),multiline:!0,rows:5,label:"Source"},u=function(){g=f.extend({},b.htmlToData(a.settings.media_scripts,this.value())),this.parent().parent().fromJSON(g)};t[i]=u,e=a.windowManager.open({title:"Insert/edit media",data:g,bodyType:"tabpanel",body:[{title:"General",type:"form",items:n},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},t]},{title:"Advanced",type:"form",items:o}],onSubmit:function(){h.updateSize(e),p(e,a)}}),h.syncSize(e)};return{showDialog:r}}),g("0",["1","2","3","4","5","6","7"],function(a,b,c,d,e,f,g){var h=function(b){b.on("ResolveName",function(a){var b;1===a.target.nodeType&&(b=a.target.getAttribute("data-mce-object"))&&(a.name=b)}),b.on("preInit",function(){var f=b.schema.getSpecialElements();c.each("video audio iframe object".split(" "),function(a){f[a]=new RegExp("</"+a+"[^>]*>","gi")});var g=b.schema.getBoolAttrs();c.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(a){g[a]={}}),b.parser.addNodeFilter("iframe,video,audio,object,embed,script",d.placeHolderConverter(b)),b.serializer.addAttributeFilter("data-mce-object",function(c,d){for(var f,g,h,i,j,k,l,m,n=c.length;n--;)if(f=c[n],f.parent){for(l=f.attr(d),g=new a(l,1),"audio"!==l&&"script"!==l&&(m=f.attr("class"),m&&m.indexOf("mce-preview-object")!==-1?g.attr({width:f.firstChild.attr("width"),height:f.firstChild.attr("height")}):g.attr({width:f.attr("width"),height:f.attr("height")})),g.attr({style:f.attr("style")}),i=f.attributes,h=i.length;h--;){var o=i[h].name;0===o.indexOf("data-mce-p-")&&g.attr(o.substr(11),i[h].value)}"script"===l&&g.attr("type","text/javascript"),j=f.attr("data-mce-html"),j&&(k=new a("#text",3),k.raw=!0,k.value=e.sanitize(b,unescape(j)),g.append(k)),f.replace(g)}})}),b.on("click keyup",function(){var a=b.selection.getNode();a&&b.dom.hasClass(a,"mce-preview-object")&&b.dom.getAttrib(a,"data-mce-selected")&&a.setAttribute("data-mce-selected","2")}),b.on("ObjectSelected",function(a){var b=a.target.getAttribute("data-mce-object");"audio"!==b&&"script"!==b||a.preventDefault()}),b.on("objectResized",function(a){var b,c=a.target;c.getAttribute("data-mce-object")&&(b=c.getAttribute("data-mce-html"),b&&(b=unescape(b),c.setAttribute("data-mce-html",escape(f.updateHtml(b,{width:a.width,height:a.height})))))}),this.showDialog=function(){g.showDialog(b)},b.addButton("media",{tooltip:"Insert/edit media",onclick:this.showDialog,stateSelector:["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"]}),b.addMenuItem("media",{icon:"media",text:"Media",onclick:this.showDialog,context:"insert",prependToContext:!0}),b.on("setContent",function(){b.$("span.mce-preview-object").each(function(a,c){var d=b.$(c);0===d.find("span.mce-shim",c).length&&d.append('<span class="mce-shim"></span>')})}),b.addCommand("mceMedia",this.showDialog)};return b.add("media",h),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),w=function(e){return e.getParam("media_scripts")},b=function(e){return e.getParam("audio_template_callback")},y=function(e){return e.getParam("video_template_callback")},n=function(e){return e.getParam("media_live_embeds",!0)},t=function(e){return e.getParam("media_filter_html",!0)},s=function(e){return e.getParam("media_url_resolver")},m=function(e){return e.getParam("media_alt_source",!0)},d=function(e){return e.getParam("media_poster",!0)},h=function(e){return e.getParam("media_dimensions",!0)},p=tinymce.util.Tools.resolve("tinymce.html.SaxParser"),r=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),x=function(e,t){if(e)for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r].filter))return e[r]},i=function(t){return function(e){return e?e.style[t].replace(/px$/,""):""}},a=function(i){return function(e,t){var r;e&&(e.style[i]=/^[0-9.]+$/.test(r=t)?r+"px":r)}},f={getMaxWidth:i("maxWidth"),getMaxHeight:i("maxHeight"),setMaxWidth:a("maxWidth"),setMaxHeight:a("maxHeight")},u=r.DOM,l=function(e){return u.getAttrib(e,"data-ephox-embed-iri")},j=function(e,t){return c=t,s=u.createFragment(c),""!==l(s.firstChild)?(o=t,n=u.createFragment(o).firstChild,{type:"ephox-embed-iri",source1:l(n),source2:"",poster:"",width:f.getMaxWidth(n),height:f.getMaxHeight(n)}):(i=e,r=t,p({validate:(a={},!1),allow_conditional_comments:!0,special:"script,noscript",start:function(e,t){if(a.source1||"param"!==e||(a.source1=t.map.movie),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(a.type||(a.type=e),a=v.extend(t.map,a)),"script"===e){var r=x(i,t.map.src);if(!r)return;a={type:"script",source1:t.map.src,width:r.width,height:r.height}}"source"===e&&(a.source1?a.source2||(a.source2=t.map.src):a.source1=t.map.src),"img"!==e||a.poster||(a.poster=t.map.src)}}).parse(r),a.source1=a.source1||a.src||a.data,a.source2=a.source2||"",a.poster=a.poster||"",a);var i,r,a,o,n,c,s},g=tinymce.util.Tools.resolve("tinymce.util.Promise"),M=function(e){var t={mp3:"audio/mpeg",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"}[e.toLowerCase().split(".").pop()];return t||""},_=tinymce.util.Tools.resolve("tinymce.html.Writer"),C=tinymce.util.Tools.resolve("tinymce.html.Schema"),S=r.DOM,F=function(e,t){var r,i,a,o;for(r in t)if(a=""+t[r],e.map[r])for(i=e.length;i--;)(o=e[i]).name===r&&(a?(e.map[r]=a,o.value=a):(delete e.map[r],e.splice(i,1)));else a&&(e.push({name:r,value:a}),e.map[r]=a)},k=function(e,t){var r,i,a=S.createFragment(e).firstChild;return f.setMaxWidth(a,t.width),f.setMaxHeight(a,t.height),r=a.outerHTML,i=_(),p(i).parse(r),i.getContent()},A=function(e,t,r){return u=e,l=S.createFragment(u),""!==S.getAttrib(l.firstChild,"data-ephox-embed-iri")?k(e,t):(i=e,a=t,o=r,c=_(),p({validate:!1,allow_conditional_comments:!(s=0),special:"script,noscript",comment:function(e){c.comment(e)},cdata:function(e){c.cdata(e)},text:function(e,t){c.text(e,t)},start:function(e,t,r){switch(e){case"video":case"object":case"embed":case"img":case"iframe":a.height!==undefined&&a.width!==undefined&&F(t,{width:a.width,height:a.height})}if(o)switch(e){case"video":F(t,{poster:a.poster,src:""}),a.source2&&F(t,{src:""});break;case"iframe":F(t,{src:a.source1});break;case"source":if(++s<=2&&(F(t,{src:a["source"+s],type:a["source"+s+"mime"]}),!a["source"+s]))return;break;case"img":if(!a.poster)return;n=!0}c.start(e,t,r)},end:function(e){if("video"===e&&o)for(var t=1;t<=2;t++)if(a["source"+t]){var r=[];r.map={},s<t&&(F(r,{src:a["source"+t],type:a["source"+t+"mime"]}),c.start("source",r,!0))}if(a.poster&&"object"===e&&o&&!n){var i=[];i.map={},F(i,{src:a.poster,width:a.width,height:a.height}),c.start("img",i,!0)}c.end(e)}},C({})).parse(i),c.getContent());var i,a,o,n,c,s,u,l},N=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"//www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"//player.vimeo.com/video/$2?title=0&byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"//www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],c=function(r,e){var i=v.extend({},e);if(!i.source1&&(v.extend(i,j(w(r),i.embed)),!i.source1))return"";i.source2||(i.source2=""),i.poster||(i.poster=""),i.source1=r.convertURL(i.source1,"source"),i.source2=r.convertURL(i.source2,"source"),i.source1mime=M(i.source1),i.source2mime=M(i.source2),i.poster=r.convertURL(i.poster,"poster");var t,a,o=(t=i.source1,0<(a=N.filter(function(e){return e.regex.test(t)})).length?v.extend({},a[0],{url:function(e,t){for(var r=e.regex.exec(t),i=e.url,a=function(e){i=i.replace("$"+e,function(){return r[e]?r[e]:""})},o=0;o<r.length;o++)a(o);return i.replace(/\?$/,"")}(a[0],t)}):null);if(o&&(i.source1=o.url,i.type=o.type,i.allowFullscreen=o.allowFullscreen,i.width=i.width||o.w,i.height=i.height||o.h),i.embed)return A(i.embed,i,!0);var n=x(w(r),i.source1);n&&(i.type="script",i.width=n.width,i.height=n.height);var c,s,u,l,m,d,h,p,f=b(r),g=y(r);return i.width=i.width||300,i.height=i.height||150,v.each(i,function(e,t){i[t]=r.dom.encode(e)}),"iframe"===i.type?(p=(h=i).allowFullscreen?' allowFullscreen="1"':"",'<iframe src="'+h.source1+'" width="'+h.width+'" height="'+h.height+'"'+p+"></iframe>"):"application/x-shockwave-flash"===i.source1mime?(d='<object data="'+(m=i).source1+'" width="'+m.width+'" height="'+m.height+'" type="application/x-shockwave-flash">',m.poster&&(d+='<img src="'+m.poster+'" width="'+m.width+'" height="'+m.height+'" />'),d+="</object>"):-1!==i.source1mime.indexOf("audio")?(u=i,(l=f)?l(u):'<audio controls="controls" src="'+u.source1+'">'+(u.source2?'\n<source src="'+u.source2+'"'+(u.source2mime?' type="'+u.source2mime+'"':"")+" />\n":"")+"</audio>"):"script"===i.type?'<script src="'+i.source1+'"><\/script>':(c=i,(s=g)?s(c):'<video width="'+c.width+'" height="'+c.height+'"'+(c.poster?' poster="'+c.poster+'"':"")+' controls="controls">\n<source src="'+c.source1+'"'+(c.source1mime?' type="'+c.source1mime+'"':"")+" />\n"+(c.source2?'<source src="'+c.source2+'"'+(c.source2mime?' type="'+c.source2mime+'"':"")+" />\n":"")+"</video>")},O={},P=function(t){return function(e){return c(t,e)}},T=function(e,t){var r,i,a,o,n,c=s(e);return c?(a=t,o=P(e),n=c,new g(function(t,e){var r=function(e){return e.html&&(O[a.source1]=e),t({url:a.source1,html:e.html?e.html:o(a)})};O[a.source1]?r(O[a.source1]):n({url:a.source1},r,e)})):(r=t,i=P(e),new g(function(e){e({html:i(r),url:r.source1})}))},$=function(e){return O.hasOwnProperty(e)},z=function(e,t){e.state.set("oldVal",e.value()),t.state.set("oldVal",t.value())},L=function(e,t){var r=e.find("#width")[0],i=e.find("#height")[0],a=e.find("#constrain")[0];r&&i&&a&&t(r,i,a.checked())},H=function(e,t,r){var i=e.state.get("oldVal"),a=t.state.get("oldVal"),o=e.value(),n=t.value();r&&i&&a&&o&&n&&(o!==i?(n=Math.round(o/i*n),isNaN(n)||t.value(n)):(o=Math.round(n/a*o),isNaN(o)||e.value(o))),z(e,t)},W=function(e){L(e,H)},J=function(e){var t=function(){e(function(e){W(e)})};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:t,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:t,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}},R=function(e){L(e,z)},D=W,E=o.ie&&o.ie<=8?"onChange":"onInput",I=function(r){return function(e){var t=e&&e.msg?"Media embed handler error: "+e.msg:"Media embed handler threw unknown error.";r.notificationManager.open({type:"error",text:t})}},U=function(a,o){return function(e){var t=e.html,r=a.find("#embed")[0],i=v.extend(j(w(o),t),{source1:e.url});a.fromJSON(i),r&&(r.value(t),D(a))}},V=function(e,t){var r=e.dom.select("img[data-mce-object]");e.insertContent(t),function(e,t){var r,i,a=e.dom.select("img[data-mce-object]");for(r=0;r<t.length;r++)for(i=a.length-1;0<=i;i--)t[r]===a[i]&&a.splice(i,1);e.selection.select(a[0])}(e,r),e.nodeChanged()},B=function(i){var a,t,e,r,o,n=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onpaste:function(){setTimeout(function(){T(i,a.toJSON()).then(U(a,i))["catch"](I(i))},1)},onchange:function(e){var r,t;T(i,a.toJSON()).then(U(a,i))["catch"](I(i)),r=a,t=e.meta,v.each(t,function(e,t){r.find("#"+t).value(e)})},onbeforecall:function(e){e.meta=a.toJSON()}}],c=[];if(m(i)&&c.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),d(i)&&c.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),h(i)){var s=J(function(e){e(a),t=a.toJSON(),a.find("#embed").value(A(t.embed,t))});n.push(s)}r=(e=i).selection.getNode(),o=r.getAttribute("data-ephox-embed-iri"),t=o?{source1:o,"data-ephox-embed-iri":o,width:f.getMaxWidth(r),height:f.getMaxHeight(r)}:r.getAttribute("data-mce-object")?j(w(e),e.serializer.serialize(r,{selection:!0})):{};var u={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:function(e){var t=e.selection.getNode();if(t.getAttribute("data-mce-object")||t.getAttribute("data-ephox-embed-iri"))return e.selection.getContent()}(i),multiline:!0,rows:5,label:"Source"};u[E]=function(){t=v.extend({},j(w(i),this.value())),this.parent().parent().fromJSON(t)};var l=[{title:"General",type:"form",items:n},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},u]}];0<c.length&&l.push({title:"Advanced",type:"form",items:c}),a=i.windowManager.open({title:"Insert/edit media",data:t,bodyType:"tabpanel",body:l,onSubmit:function(){var t,e;D(a),t=i,(e=a.toJSON()).embed=A(e.embed,e),e.embed&&$(e.source1)?V(t,e.embed):T(t,e).then(function(e){V(t,e.html)})["catch"](I(t))}}),R(a)},G=function(e){return{showDialog:function(){B(e)}}},q=function(e){e.addCommand("mceMedia",function(){B(e)})},K=tinymce.util.Tools.resolve("tinymce.html.Node"),Q=function(a,e){if(!1===t(a))return e;var o,n=_();return p({validate:!1,allow_conditional_comments:!1,special:"script,noscript",comment:function(e){n.comment(e)},cdata:function(e){n.cdata(e)},text:function(e,t){n.text(e,t)},start:function(e,t,r){if(o=!0,"script"!==e&&"noscript"!==e){for(var i=0;i<t.length;i++){if(0===t[i].name.indexOf("on"))return;"style"===t[i].name&&(t[i].value=a.dom.serializeStyle(a.dom.parseStyle(t[i].value),e))}n.start(e,t,r),o=!1}},end:function(e){o||n.end(e)}},C({})).parse(e),n.getContent()},X=function(e,t){var r,i=t.name;return(r=new K("img",1)).shortEnded=!0,Z(e,t,r),r.attr({width:t.attr("width")||"300",height:t.attr("height")||("audio"===i?"30":"150"),style:t.attr("style"),src:o.transparentSrc,"data-mce-object":i,"class":"mce-object mce-object-"+i}),r},Y=function(e,t){var r,i,a,o=t.name;return(r=new K("span",1)).attr({contentEditable:"false",style:t.attr("style"),"data-mce-object":o,"class":"mce-preview-object mce-object-"+o}),Z(e,t,r),(i=new K(o,1)).attr({src:t.attr("src"),allowfullscreen:t.attr("allowfullscreen"),style:t.attr("style"),"class":t.attr("class"),width:t.attr("width"),height:t.attr("height"),frameborder:"0"}),(a=new K("span",1)).attr("class","mce-shim"),r.append(i),r.append(a),r},Z=function(e,t,r){var i,a,o,n,c;for(n=(o=t.attributes).length;n--;)i=o[n].name,a=o[n].value,"width"!==i&&"height"!==i&&"style"!==i&&("data"!==i&&"src"!==i||(a=e.convertURL(a,i)),r.attr("data-mce-p-"+i,a));(c=t.firstChild&&t.firstChild.value)&&(r.attr("data-mce-html",escape(Q(e,c))),r.firstChild=null)},ee=function(e){for(;e=e.parent;)if(e.attr("data-ephox-embed-iri"))return!0;return!1},te=function(a){return function(e){for(var t,r,i=e.length;i--;)(t=e[i]).parent&&(t.parent.attr("data-mce-object")||("script"!==t.name||(r=x(w(a),t.attr("src"))))&&(r&&(r.width&&t.attr("width",r.width.toString()),r.height&&t.attr("height",r.height.toString())),"iframe"===t.name&&n(a)&&o.ceFalse?ee(t)||t.replace(Y(a,t)):ee(t)||t.replace(X(a,t))))}},re=function(d){d.on("preInit",function(){var t=d.schema.getSpecialElements();v.each("video audio iframe object".split(" "),function(e){t[e]=new RegExp("</"+e+"[^>]*>","gi")});var r=d.schema.getBoolAttrs();v.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(e){r[e]={}}),d.parser.addNodeFilter("iframe,video,audio,object,embed,script",te(d)),d.serializer.addAttributeFilter("data-mce-object",function(e,t){for(var r,i,a,o,n,c,s,u,l=e.length;l--;)if((r=e[l]).parent){for(s=r.attr(t),i=new K(s,1),"audio"!==s&&"script"!==s&&((u=r.attr("class"))&&-1!==u.indexOf("mce-preview-object")?i.attr({width:r.firstChild.attr("width"),height:r.firstChild.attr("height")}):i.attr({width:r.attr("width"),height:r.attr("height")})),i.attr({style:r.attr("style")}),a=(o=r.attributes).length;a--;){var m=o[a].name;0===m.indexOf("data-mce-p-")&&i.attr(m.substr(11),o[a].value)}"script"===s&&i.attr("type","text/javascript"),(n=r.attr("data-mce-html"))&&((c=new K("#text",3)).raw=!0,c.value=Q(d,unescape(n)),i.append(c)),r.replace(i)}})}),d.on("setContent",function(){d.$("span.mce-preview-object").each(function(e,t){var r=d.$(t);0===r.find("span.mce-shim",t).length&&r.append('<span class="mce-shim"></span>')})})},ie=function(e){e.on("ResolveName",function(e){var t;1===e.target.nodeType&&(t=e.target.getAttribute("data-mce-object"))&&(e.name=t)})},ae=function(t){t.on("click keyup",function(){var e=t.selection.getNode();e&&t.dom.hasClass(e,"mce-preview-object")&&t.dom.getAttrib(e,"data-mce-selected")&&e.setAttribute("data-mce-selected","2")}),t.on("ObjectSelected",function(e){var t=e.target.getAttribute("data-mce-object");"audio"!==t&&"script"!==t||e.preventDefault()}),t.on("objectResized",function(e){var t,r=e.target;r.getAttribute("data-mce-object")&&(t=r.getAttribute("data-mce-html"))&&(t=unescape(t),r.setAttribute("data-mce-html",escape(A(t,{width:e.width,height:e.height}))))})},oe=function(e){e.addButton("media",{tooltip:"Insert/edit media",cmd:"mceMedia",stateSelector:["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"]}),e.addMenuItem("media",{icon:"media",text:"Media",cmd:"mceMedia",context:"insert",prependToContext:!0})};e.add("media",function(e){return q(e),oe(e),ie(e),re(e),ae(e),G(e)})}();
\ No newline at end of file
(function () {
+var paste = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
-
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
- };
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.paste.Plugin","tinymce.core.PluginManager","tinymce.plugins.paste.api.Events","tinymce.plugins.paste.core.Clipboard","tinymce.plugins.paste.core.CutCopy","tinymce.plugins.paste.core.Quirks","global!tinymce.util.Tools.resolve","tinymce.core.dom.RangeUtils","tinymce.core.Env","tinymce.core.util.Delay","tinymce.core.util.Tools","tinymce.core.util.VK","tinymce.plugins.paste.core.InternalHtml","tinymce.plugins.paste.core.Newlines","tinymce.plugins.paste.core.PasteBin","tinymce.plugins.paste.core.ProcessFilters","tinymce.plugins.paste.core.SmartPaste","tinymce.plugins.paste.core.Utils","tinymce.plugins.paste.core.WordFilter","tinymce.core.html.Entities","tinymce.core.html.DomParser","tinymce.core.html.Schema","tinymce.core.html.Serializer","tinymce.core.html.Node"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * Events.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.paste.api.Events',
- [
- ],
- function () {
- var firePastePreProcess = function (editor, html, internal, isWordHtml) {
- return editor.fire('PastePreProcess', { content: html, internal: internal, wordContent: isWordHtml });
+ var Cell = function (initial) {
+ var value = initial;
+ var get = function () {
+ return value;
};
-
- var firePastePostProcess = function (editor, node, internal, isWordHtml) {
- return editor.fire('PastePostProcess', { node: node, internal: internal, wordContent: isWordHtml });
+ var set = function (v) {
+ value = v;
};
-
- var firePastePlainTextToggle = function (editor, state) {
- return editor.fire('PastePlainTextToggle', { state: state });
+ var clone = function () {
+ return Cell(get());
};
-
return {
- firePastePreProcess: firePastePreProcess,
- firePastePostProcess: firePastePostProcess,
- firePastePlainTextToggle: firePastePlainTextToggle
+ get: get,
+ set: set,
+ clone: clone
};
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.RangeUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.RangeUtils');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.Env',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.Env');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Delay',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Delay');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.VK',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.VK');
- }
-);
+ };
-/**
- * InternalHtml.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-define(
- 'tinymce.plugins.paste.core.InternalHtml',
- [
- ],
- function () {
- var internalMimeType = 'x-tinymce/html';
- var internalMark = '<!-- ' + internalMimeType + ' -->';
+ var hasProPlugin = function (editor) {
+ if (/(^|[ ,])powerpaste([, ]|$)/.test(editor.settings.plugins) && global.get('powerpaste')) {
+ if (typeof window.console !== 'undefined' && window.console.log) {
+ window.console.log('PowerPaste is incompatible with Paste plugin! Remove \'paste\' from the \'plugins\' option.');
+ }
+ return true;
+ } else {
+ return false;
+ }
+ };
+ var $_15bf6siejjgwect1 = { hasProPlugin: hasProPlugin };
- var mark = function (html) {
- return internalMark + html;
+ var get = function (clipboard, quirks) {
+ return {
+ clipboard: clipboard,
+ quirks: quirks
};
+ };
+ var $_6gtliyigjjgwecte = { get: get };
- var unmark = function (html) {
- return html.replace(internalMark, '');
- };
+ var firePastePreProcess = function (editor, html, internal, isWordHtml) {
+ return editor.fire('PastePreProcess', {
+ content: html,
+ internal: internal,
+ wordContent: isWordHtml
+ });
+ };
+ var firePastePostProcess = function (editor, node, internal, isWordHtml) {
+ return editor.fire('PastePostProcess', {
+ node: node,
+ internal: internal,
+ wordContent: isWordHtml
+ });
+ };
+ var firePastePlainTextToggle = function (editor, state) {
+ return editor.fire('PastePlainTextToggle', { state: state });
+ };
+ var firePaste = function (editor, ieFake) {
+ return editor.fire('paste', { ieFake: ieFake });
+ };
+ var $_8tki3zijjjgwectj = {
+ firePastePreProcess: firePastePreProcess,
+ firePastePostProcess: firePastePostProcess,
+ firePastePlainTextToggle: firePastePlainTextToggle,
+ firePaste: firePaste
+ };
- var isMarked = function (html) {
- return html.indexOf(internalMark) !== -1;
- };
+ var shouldPlainTextInform = function (editor) {
+ return editor.getParam('paste_plaintext_inform', true);
+ };
+ var shouldBlockDrop = function (editor) {
+ return editor.getParam('paste_block_drop', false);
+ };
+ var shouldPasteDataImages = function (editor) {
+ return editor.getParam('paste_data_images', false);
+ };
+ var shouldFilterDrop = function (editor) {
+ return editor.getParam('paste_filter_drop', true);
+ };
+ var getPreProcess = function (editor) {
+ return editor.getParam('paste_preprocess');
+ };
+ var getPostProcess = function (editor) {
+ return editor.getParam('paste_postprocess');
+ };
+ var getWebkitStyles = function (editor) {
+ return editor.getParam('paste_webkit_styles');
+ };
+ var shouldRemoveWebKitStyles = function (editor) {
+ return editor.getParam('paste_remove_styles_if_webkit', true);
+ };
+ var shouldMergeFormats = function (editor) {
+ return editor.getParam('paste_merge_formats', true);
+ };
+ var isSmartPasteEnabled = function (editor) {
+ return editor.getParam('smart_paste', true);
+ };
+ var isPasteAsTextEnabled = function (editor) {
+ return editor.getParam('paste_as_text', false);
+ };
+ var getRetainStyleProps = function (editor) {
+ return editor.getParam('paste_retain_style_properties');
+ };
+ var getWordValidElements = function (editor) {
+ var defaultValidElements = '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' + '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' + 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody';
+ return editor.getParam('paste_word_valid_elements', defaultValidElements);
+ };
+ var shouldConvertWordFakeLists = function (editor) {
+ return editor.getParam('paste_convert_word_fake_lists', true);
+ };
+ var shouldUseDefaultFilters = function (editor) {
+ return editor.getParam('paste_enable_default_filters', true);
+ };
+ var $_xr8b0ikjjgwectl = {
+ shouldPlainTextInform: shouldPlainTextInform,
+ shouldBlockDrop: shouldBlockDrop,
+ shouldPasteDataImages: shouldPasteDataImages,
+ shouldFilterDrop: shouldFilterDrop,
+ getPreProcess: getPreProcess,
+ getPostProcess: getPostProcess,
+ getWebkitStyles: getWebkitStyles,
+ shouldRemoveWebKitStyles: shouldRemoveWebKitStyles,
+ shouldMergeFormats: shouldMergeFormats,
+ isSmartPasteEnabled: isSmartPasteEnabled,
+ isPasteAsTextEnabled: isPasteAsTextEnabled,
+ getRetainStyleProps: getRetainStyleProps,
+ getWordValidElements: getWordValidElements,
+ shouldConvertWordFakeLists: shouldConvertWordFakeLists,
+ shouldUseDefaultFilters: shouldUseDefaultFilters
+ };
- return {
- mark: mark,
- unmark: unmark,
- isMarked: isMarked,
- internalHtmlMime: function () {
- return internalMimeType;
+ var shouldInformUserAboutPlainText = function (editor, userIsInformedState) {
+ return userIsInformedState.get() === false && $_xr8b0ikjjgwectl.shouldPlainTextInform(editor);
+ };
+ var displayNotification = function (editor, message) {
+ editor.notificationManager.open({
+ text: editor.translate(message),
+ type: 'info'
+ });
+ };
+ var togglePlainTextPaste = function (editor, clipboard, userIsInformedState) {
+ if (clipboard.pasteFormat.get() === 'text') {
+ clipboard.pasteFormat.set('html');
+ $_8tki3zijjjgwectj.firePastePlainTextToggle(editor, false);
+ } else {
+ clipboard.pasteFormat.set('text');
+ $_8tki3zijjjgwectj.firePastePlainTextToggle(editor, true);
+ if (shouldInformUserAboutPlainText(editor, userIsInformedState)) {
+ displayNotification(editor, 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.');
+ userIsInformedState.set(true);
}
- };
- }
-);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.html.Entities',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.html.Entities');
- }
-);
-
-/**
- * Newlines.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ }
+ editor.focus();
+ };
+ var $_2j7vw7iijjgwecti = { togglePlainTextPaste: togglePlainTextPaste };
-/**
- * Newlines class contains utilities to convert newlines (\n or \r\n) tp BRs or to a combination of the specified block element and BRs
- *
- * @class tinymce.Newlines
- * @private
- */
-define(
- 'tinymce.plugins.paste.core.Newlines',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.html.Entities'
- ],
- function (Tools, Entities) {
+ var register = function (editor, clipboard, userIsInformedState) {
+ editor.addCommand('mceTogglePlainTextPaste', function () {
+ $_2j7vw7iijjgwecti.togglePlainTextPaste(editor, clipboard, userIsInformedState);
+ });
+ editor.addCommand('mceInsertClipboardContent', function (ui, value) {
+ if (value.content) {
+ clipboard.pasteHtml(value.content, value.internal);
+ }
+ if (value.text) {
+ clipboard.pasteText(value.text);
+ }
+ });
+ };
+ var $_fldd1mihjjgwecth = { register: register };
- var isPlainText = function (text) {
- // so basically any tag that is not one of the "p, div, span, br", or is one of them, but is followed
- // by some additional characters qualifies the text as not a plain text (having some HTML tags)
- // <span style="white-space:pre"> and <br /> are added as separate exceptions to the rule
- return !/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(text);
- };
+ var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
+ var global$2 = tinymce.util.Tools.resolve('tinymce.util.Delay');
- var toBRs = function (text) {
- return text.replace(/\r?\n/g, '<br>');
- };
+ var global$3 = tinymce.util.Tools.resolve('tinymce.util.Tools');
+ var global$4 = tinymce.util.Tools.resolve('tinymce.util.VK');
- var openContainer = function (rootTag, rootAttrs) {
- var key, attrs = [];
- var tag = '<' + rootTag;
+ var internalMimeType = 'x-tinymce/html';
+ var internalMark = '<!-- ' + internalMimeType + ' -->';
+ var mark = function (html) {
+ return internalMark + html;
+ };
+ var unmark = function (html) {
+ return html.replace(internalMark, '');
+ };
+ var isMarked = function (html) {
+ return html.indexOf(internalMark) !== -1;
+ };
+ var $_4x13hjirjjgwecu1 = {
+ mark: mark,
+ unmark: unmark,
+ isMarked: isMarked,
+ internalHtmlMime: function () {
+ return internalMimeType;
+ }
+ };
- if (typeof rootAttrs === 'object') {
- for (key in rootAttrs) {
- if (rootAttrs.hasOwnProperty(key)) {
- attrs.push(key + '="' + Entities.encodeAllRaw(rootAttrs[key]) + '"');
- }
- }
+ var global$5 = tinymce.util.Tools.resolve('tinymce.html.Entities');
- if (attrs.length) {
- tag += ' ' + attrs.join(' ');
+ var isPlainText = function (text) {
+ return !/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(text);
+ };
+ var toBRs = function (text) {
+ return text.replace(/\r?\n/g, '<br>');
+ };
+ var openContainer = function (rootTag, rootAttrs) {
+ var key;
+ var attrs = [];
+ var tag = '<' + rootTag;
+ if (typeof rootAttrs === 'object') {
+ for (key in rootAttrs) {
+ if (rootAttrs.hasOwnProperty(key)) {
+ attrs.push(key + '="' + global$5.encodeAllRaw(rootAttrs[key]) + '"');
}
}
- return tag + '>';
+ if (attrs.length) {
+ tag += ' ' + attrs.join(' ');
+ }
+ }
+ return tag + '>';
+ };
+ var toBlockElements = function (text, rootTag, rootAttrs) {
+ var blocks = text.split(/\n\n/);
+ var tagOpen = openContainer(rootTag, rootAttrs);
+ var tagClose = '</' + rootTag + '>';
+ var paragraphs = global$3.map(blocks, function (p) {
+ return p.split(/\n/).join('<br />');
+ });
+ var stitch = function (p) {
+ return tagOpen + p + tagClose;
};
+ return paragraphs.length === 1 ? paragraphs[0] : global$3.map(paragraphs, stitch).join('');
+ };
+ var convert = function (text, rootTag, rootAttrs) {
+ return rootTag ? toBlockElements(text, rootTag, rootAttrs) : toBRs(text);
+ };
+ var $_4h3hnrisjjgwecu2 = {
+ isPlainText: isPlainText,
+ convert: convert,
+ toBRs: toBRs,
+ toBlockElements: toBlockElements
+ };
+ var global$6 = tinymce.util.Tools.resolve('tinymce.html.DomParser');
- var toBlockElements = function (text, rootTag, rootAttrs) {
- var blocks = text.split(/\n\n/);
- var tagOpen = openContainer(rootTag, rootAttrs);
- var tagClose = '</' + rootTag + '>';
-
- var paragraphs = Tools.map(blocks, function (p) {
- return p.split(/\n/).join('<br />');
- });
-
- var stitch = function (p) {
- return tagOpen + p + tagClose;
- };
-
- return paragraphs.length === 1 ? paragraphs[0] : Tools.map(paragraphs, stitch).join('');
- };
-
+ var global$7 = tinymce.util.Tools.resolve('tinymce.html.Node');
- var convert = function (text, rootTag, rootAttrs) {
- return rootTag ? toBlockElements(text, rootTag, rootAttrs) : toBRs(text);
- };
+ var global$8 = tinymce.util.Tools.resolve('tinymce.html.Schema');
+ var global$9 = tinymce.util.Tools.resolve('tinymce.html.Serializer');
- return {
- isPlainText: isPlainText,
- convert: convert,
- toBRs: toBRs,
- toBlockElements: toBlockElements
- };
+ function filter(content, items) {
+ global$3.each(items, function (v) {
+ if (v.constructor === RegExp) {
+ content = content.replace(v, '');
+ } else {
+ content = content.replace(v[0], v[1]);
+ }
+ });
+ return content;
}
-);
-/**
- * PasteBin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * @class tinymce.pasteplugin.PasteBin
- * @private
- */
-define(
- 'tinymce.plugins.paste.core.PasteBin',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.Env'
- ],
- function (Tools, Env) {
- return function (editor) {
- var lastRng;
- var pasteBinDefaultContent = '%MCEPASTEBIN%';
-
- /**
- * Creates a paste bin element as close as possible to the current caret location and places the focus inside that element
- * so that when the real paste event occurs the contents gets inserted into this element
- * instead of the current editor selection element.
- */
- var create = function () {
- var dom = editor.dom, body = editor.getBody();
- var viewport = editor.dom.getViewPort(editor.getWin()), scrollTop = viewport.y, top = 20;
- var pasteBinElm;
- var scrollContainer;
-
- lastRng = editor.selection.getRng();
-
- if (editor.inline) {
- scrollContainer = editor.selection.getScrollContainer();
-
- // Can't always rely on scrollTop returning a useful value.
- // It returns 0 if the browser doesn't support scrollTop for the element or is non-scrollable
- if (scrollContainer && scrollContainer.scrollTop > 0) {
- scrollTop = scrollContainer.scrollTop;
- }
- }
-
- /**
- * Returns the rect of the current caret if the caret is in an empty block before a
- * BR we insert a temporary invisible character that we get the rect this way we always get a proper rect.
- *
- * TODO: This might be useful in core.
- */
- function getCaretRect(rng) {
- var rects, textNode, node, container = rng.startContainer;
-
- rects = rng.getClientRects();
- if (rects.length) {
- return rects[0];
- }
-
- if (!rng.collapsed || container.nodeType != 1) {
- return;
- }
-
- node = container.childNodes[lastRng.startOffset];
-
- // Skip empty whitespace nodes
- while (node && node.nodeType == 3 && !node.data.length) {
- node = node.nextSibling;
- }
-
- if (!node) {
- return;
- }
-
- // Check if the location is |<br>
- // TODO: Might need to expand this to say |<table>
- if (node.tagName == 'BR') {
- textNode = dom.doc.createTextNode('\uFEFF');
- node.parentNode.insertBefore(textNode, node);
-
- rng = dom.createRng();
- rng.setStartBefore(textNode);
- rng.setEndAfter(textNode);
-
- rects = rng.getClientRects();
- dom.remove(textNode);
- }
-
- if (rects.length) {
- return rects[0];
- }
- }
-
- // Calculate top cordinate this is needed to avoid scrolling to top of document
- // We want the paste bin to be as close to the caret as possible to avoid scrolling
- if (lastRng.getClientRects) {
- var rect = getCaretRect(lastRng);
-
- if (rect) {
- // Client rects gets us closes to the actual
- // caret location in for example a wrapped paragraph block
- top = scrollTop + (rect.top - dom.getPos(body).y);
- } else {
- top = scrollTop;
-
- // Check if we can find a closer location by checking the range element
- var container = lastRng.startContainer;
- if (container) {
- if (container.nodeType == 3 && container.parentNode != body) {
- container = container.parentNode;
- }
-
- if (container.nodeType == 1) {
- top = dom.getPos(container, scrollContainer || body).y;
- }
- }
- }
- }
-
- // Create a pastebin
- pasteBinElm = editor.dom.add(editor.getBody(), 'div', {
- id: "mcepastebin",
- contentEditable: true,
- "data-mce-bogus": "all",
- style: 'position: absolute; top: ' + top + 'px; width: 10px; height: 10px; overflow: hidden; opacity: 0'
- }, pasteBinDefaultContent);
-
- // Move paste bin out of sight since the controlSelection rect gets displayed otherwise on IE and Gecko
- if (Env.ie || Env.gecko) {
- dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) == 'rtl' ? 0xFFFF : -0xFFFF);
- }
-
- // Prevent focus events from bubbeling fixed FocusManager issues
- dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) {
- e.stopPropagation();
- });
-
- pasteBinElm.focus();
- editor.selection.select(pasteBinElm, true);
- };
-
- /**
- * Removes the paste bin if it exists.
- */
- var remove = function () {
- if (getEl()) {
- var pasteBinClone;
-
- // WebKit/Blink might clone the div so
- // lets make sure we remove all clones
- // TODO: Man o man is this ugly. WebKit is the new IE! Remove this if they ever fix it!
- while ((pasteBinClone = editor.dom.get('mcepastebin'))) {
- editor.dom.remove(pasteBinClone);
- editor.dom.unbind(pasteBinClone);
- }
-
- if (lastRng) {
- editor.selection.setRng(lastRng);
- }
+ function innerText(html) {
+ var schema = global$8();
+ var domParser = global$6({}, schema);
+ var text = '';
+ var shortEndedElements = schema.getShortEndedElements();
+ var ignoreElements = global$3.makeMap('script noscript style textarea video audio iframe object', ' ');
+ var blockElements = schema.getBlockElements();
+ function walk(node) {
+ var name$$1 = node.name, currentNode = node;
+ if (name$$1 === 'br') {
+ text += '\n';
+ return;
+ }
+ if (shortEndedElements[name$$1]) {
+ text += ' ';
+ }
+ if (ignoreElements[name$$1]) {
+ text += ' ';
+ return;
+ }
+ if (node.type === 3) {
+ text += node.value;
+ }
+ if (!node.shortEnded) {
+ if (node = node.firstChild) {
+ do {
+ walk(node);
+ } while (node = node.next);
}
-
- lastRng = null;
- };
-
-
- var getEl = function () {
- return editor.dom.get('mcepastebin');
- };
-
- /**
- * Returns the contents of the paste bin as a HTML string.
- *
- * @return {String} Get the contents of the paste bin.
- */
- var getHtml = function () {
- var pasteBinElm, pasteBinClones, i, dirtyWrappers, cleanWrapper;
-
- // Since WebKit/Chrome might clone the paste bin when pasting
- // for example: <img style="float: right"> we need to check if any of them contains some useful html.
- // TODO: Man o man is this ugly. WebKit is the new IE! Remove this if they ever fix it!
-
- var copyAndRemove = function (toElm, fromElm) {
- toElm.appendChild(fromElm);
- editor.dom.remove(fromElm, true); // remove, but keep children
- };
-
- // find only top level elements (there might be more nested inside them as well, see TINY-1162)
- pasteBinClones = Tools.grep(editor.getBody().childNodes, function (elm) {
- return elm.id === 'mcepastebin';
- });
- pasteBinElm = pasteBinClones.shift();
-
- // if clones were found, move their content into the first bin
- Tools.each(pasteBinClones, function (pasteBinClone) {
- copyAndRemove(pasteBinElm, pasteBinClone);
- });
-
- // TINY-1162: when copying plain text (from notepad for example) WebKit clones
- // paste bin (with styles and attributes) and uses it as a default wrapper for
- // the chunks of the content, here we cycle over the whole paste bin and replace
- // those wrappers with a basic div
- dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm);
- for (i = dirtyWrappers.length - 1; i >= 0; i--) {
- cleanWrapper = editor.dom.create('div');
- pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);
- copyAndRemove(cleanWrapper, dirtyWrappers[i]);
+ }
+ if (blockElements[name$$1] && currentNode.next) {
+ text += '\n';
+ if (name$$1 === 'p') {
+ text += '\n';
}
-
- return pasteBinElm ? pasteBinElm.innerHTML : '';
- };
-
-
- var getLastRng = function () {
- return lastRng;
- };
-
-
- var isDefaultContent = function (content) {
- return content === pasteBinDefaultContent;
- };
-
-
- var isPasteBin = function (elm) {
- return elm && elm.id === 'mcepastebin';
- };
-
-
- var isDefault = function () {
- var pasteBinElm = getEl();
- return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinElm.innerHTML);
- };
-
- return {
- create: create,
- remove: remove,
- getEl: getEl,
- getHtml: getHtml,
- getLastRng: getLastRng,
- isDefault: isDefault,
- isDefaultContent: isDefaultContent
- };
- };
+ }
+ }
+ html = filter(html, [/<!\[[^\]]+\]>/g]);
+ walk(domParser.parse(html));
+ return text;
}
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.html.DomParser',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.html.DomParser');
+ function trimHtml(html) {
+ function trimSpaces(all, s1, s2) {
+ if (!s1 && !s2) {
+ return ' ';
+ }
+ return '\xA0';
+ }
+ html = filter(html, [
+ /^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/ig,
+ /<!--StartFragment-->|<!--EndFragment-->/g,
+ [
+ /( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,
+ trimSpaces
+ ],
+ /<br class="Apple-interchange-newline">/g,
+ /<br>$/i
+ ]);
+ return html;
}
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.html.Schema',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.html.Schema');
+ function createIdGenerator(prefix) {
+ var count = 0;
+ return function () {
+ return prefix + count++;
+ };
}
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var isMsEdge = function () {
+ return navigator.userAgent.indexOf(' Edge/') !== -1;
+ };
+ var $_4bi2o9j0jjgwecui = {
+ filter: filter,
+ innerText: innerText,
+ trimHtml: trimHtml,
+ createIdGenerator: createIdGenerator,
+ isMsEdge: isMsEdge
+ };
-define(
- 'tinymce.core.html.Serializer',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.html.Serializer');
+ function isWordContent(content) {
+ return /<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(content) || /class="OutlineElement/.test(content) || /id="?docs\-internal\-guid\-/.test(content);
}
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.html.Node',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.html.Node');
+ function isNumericList(text) {
+ var found, patterns;
+ patterns = [
+ /^[IVXLMCD]{1,2}\.[ \u00a0]/,
+ /^[ivxlmcd]{1,2}\.[ \u00a0]/,
+ /^[a-z]{1,2}[\.\)][ \u00a0]/,
+ /^[A-Z]{1,2}[\.\)][ \u00a0]/,
+ /^[0-9]+\.[ \u00a0]/,
+ /^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,
+ /^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/
+ ];
+ text = text.replace(/^[\u00a0 ]+/, '');
+ global$3.each(patterns, function (pattern) {
+ if (pattern.test(text)) {
+ found = true;
+ return false;
+ }
+ });
+ return found;
}
-);
-
-/**
- * Utils.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class contails various utility functions for the paste plugin.
- *
- * @class tinymce.pasteplugin.Utils
- */
-define(
- 'tinymce.plugins.paste.core.Utils',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.html.DomParser',
- 'tinymce.core.html.Schema'
- ],
- function (Tools, DomParser, Schema) {
- function filter(content, items) {
- Tools.each(items, function (v) {
- if (v.constructor == RegExp) {
- content = content.replace(v, '');
- } else {
- content = content.replace(v[0], v[1]);
+ function isBulletList(text) {
+ return /^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(text);
+ }
+ function convertFakeListsToProperLists(node) {
+ var currentListNode, prevListNode, lastLevel = 1;
+ function getText(node) {
+ var txt = '';
+ if (node.type === 3) {
+ return node.value;
+ }
+ if (node = node.firstChild) {
+ do {
+ txt += getText(node);
+ } while (node = node.next);
+ }
+ return txt;
+ }
+ function trimListStart(node, regExp) {
+ if (node.type === 3) {
+ if (regExp.test(node.value)) {
+ node.value = node.value.replace(regExp, '');
+ return false;
}
- });
-
- return content;
+ }
+ if (node = node.firstChild) {
+ do {
+ if (!trimListStart(node, regExp)) {
+ return false;
+ }
+ } while (node = node.next);
+ }
+ return true;
}
-
- /**
- * Gets the innerText of the specified element. It will handle edge cases
- * and works better than textContent on Gecko.
- *
- * @param {String} html HTML string to get text from.
- * @return {String} String of text with line feeds.
- */
- function innerText(html) {
- var schema = new Schema(), domParser = new DomParser({}, schema), text = '';
- var shortEndedElements = schema.getShortEndedElements();
- var ignoreElements = Tools.makeMap('script noscript style textarea video audio iframe object', ' ');
- var blockElements = schema.getBlockElements();
-
- function walk(node) {
- var name = node.name, currentNode = node;
-
- if (name === 'br') {
- text += '\n';
- return;
+ function removeIgnoredNodes(node) {
+ if (node._listIgnore) {
+ node.remove();
+ return;
+ }
+ if (node = node.firstChild) {
+ do {
+ removeIgnoredNodes(node);
+ } while (node = node.next);
+ }
+ }
+ function convertParagraphToLi(paragraphNode, listName, start) {
+ var level = paragraphNode._listLevel || lastLevel;
+ if (level !== lastLevel) {
+ if (level < lastLevel) {
+ if (currentListNode) {
+ currentListNode = currentListNode.parent.parent;
+ }
+ } else {
+ prevListNode = currentListNode;
+ currentListNode = null;
}
-
- // img/input/hr
- if (shortEndedElements[name]) {
- text += ' ';
+ }
+ if (!currentListNode || currentListNode.name !== listName) {
+ prevListNode = prevListNode || currentListNode;
+ currentListNode = new global$7(listName, 1);
+ if (start > 1) {
+ currentListNode.attr('start', '' + start);
}
-
- // Ingore script, video contents
- if (ignoreElements[name]) {
- text += ' ';
- return;
+ paragraphNode.wrap(currentListNode);
+ } else {
+ currentListNode.append(paragraphNode);
+ }
+ paragraphNode.name = 'li';
+ if (level > lastLevel && prevListNode) {
+ prevListNode.lastChild.append(currentListNode);
+ }
+ lastLevel = level;
+ removeIgnoredNodes(paragraphNode);
+ trimListStart(paragraphNode, /^\u00a0+/);
+ trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/);
+ trimListStart(paragraphNode, /^\u00a0+/);
+ }
+ var elements = [];
+ var child = node.firstChild;
+ while (typeof child !== 'undefined' && child !== null) {
+ elements.push(child);
+ child = child.walk();
+ if (child !== null) {
+ while (typeof child !== 'undefined' && child.parent !== node) {
+ child = child.walk();
}
-
- if (node.type == 3) {
- text += node.value;
+ }
+ }
+ for (var i = 0; i < elements.length; i++) {
+ node = elements[i];
+ if (node.name === 'p' && node.firstChild) {
+ var nodeText = getText(node);
+ if (isBulletList(nodeText)) {
+ convertParagraphToLi(node, 'ul');
+ continue;
}
-
- // Walk all children
- if (!node.shortEnded) {
- if ((node = node.firstChild)) {
- do {
- walk(node);
- } while ((node = node.next));
+ if (isNumericList(nodeText)) {
+ var matches = /([0-9]+)\./.exec(nodeText);
+ var start = 1;
+ if (matches) {
+ start = parseInt(matches[1], 10);
}
+ convertParagraphToLi(node, 'ol', start);
+ continue;
}
-
- // Add \n or \n\n for blocks or P
- if (blockElements[name] && currentNode.next) {
- text += '\n';
-
- if (name == 'p') {
- text += '\n';
- }
+ if (node._listLevel) {
+ convertParagraphToLi(node, 'ul', 1);
+ continue;
}
+ currentListNode = null;
+ } else {
+ prevListNode = currentListNode;
+ currentListNode = null;
}
-
- html = filter(html, [
- /<!\[[^\]]+\]>/g // Conditional comments
- ]);
-
- walk(domParser.parse(html));
-
- return text;
- }
-
- /**
- * Trims the specified HTML by removing all WebKit fragments, all elements wrapping the body trailing BR elements etc.
- *
- * @param {String} html Html string to trim contents on.
- * @return {String} Html contents that got trimmed.
- */
- function trimHtml(html) {
- function trimSpaces(all, s1, s2) {
- // WebKit meant to preserve multiple spaces but instead inserted around all inline tags,
- // including the spans with inline styles created on paste
- if (!s1 && !s2) {
- return ' ';
- }
-
- return '\u00a0';
- }
-
- html = filter(html, [
- /^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/ig, // Remove anything but the contents within the BODY element
- /<!--StartFragment-->|<!--EndFragment-->/g, // Inner fragments (tables from excel on mac)
- [/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g, trimSpaces],
- /<br class="Apple-interchange-newline">/g,
- /<br>$/i // Trailing BR elements
- ]);
-
- return html;
}
-
- // TODO: Should be in some global class
- function createIdGenerator(prefix) {
- var count = 0;
-
- return function () {
- return prefix + (count++);
- };
- }
-
- var isMsEdge = function () {
- return navigator.userAgent.indexOf(' Edge/') !== -1;
- };
-
- return {
- filter: filter,
- innerText: innerText,
- trimHtml: trimHtml,
- createIdGenerator: createIdGenerator,
- isMsEdge: isMsEdge
- };
}
-);
-
-/**
- * WordFilter.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class parses word HTML into proper TinyMCE markup.
- *
- * @class tinymce.pasteplugin.WordFilter
- * @private
- */
-define(
- 'tinymce.plugins.paste.core.WordFilter',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.html.DomParser',
- 'tinymce.core.html.Schema',
- 'tinymce.core.html.Serializer',
- 'tinymce.core.html.Node',
- 'tinymce.plugins.paste.core.Utils'
- ],
- function (Tools, DomParser, Schema, Serializer, Node, Utils) {
- /**
- * Checks if the specified content is from any of the following sources: MS Word/Office 365/Google docs.
- */
- function isWordContent(content) {
- return (
- (/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i).test(content) ||
- (/class="OutlineElement/).test(content) ||
- (/id="?docs\-internal\-guid\-/.test(content))
- );
- }
-
- /**
- * Checks if the specified text starts with "1. " or "a. " etc.
- */
- function isNumericList(text) {
- var found, patterns;
-
- patterns = [
- /^[IVXLMCD]{1,2}\.[ \u00a0]/, // Roman upper case
- /^[ivxlmcd]{1,2}\.[ \u00a0]/, // Roman lower case
- /^[a-z]{1,2}[\.\)][ \u00a0]/, // Alphabetical a-z
- /^[A-Z]{1,2}[\.\)][ \u00a0]/, // Alphabetical A-Z
- /^[0-9]+\.[ \u00a0]/, // Numeric lists
- /^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/, // Japanese
- /^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/ // Chinese
- ];
-
- text = text.replace(/^[\u00a0 ]+/, '');
-
- Tools.each(patterns, function (pattern) {
- if (pattern.test(text)) {
- found = true;
- return false;
+ function filterStyles(editor, validStyles, node, styleValue) {
+ var outputStyles = {}, matches;
+ var styles = editor.dom.parseStyle(styleValue);
+ global$3.each(styles, function (value, name) {
+ switch (name) {
+ case 'mso-list':
+ matches = /\w+ \w+([0-9]+)/i.exec(styleValue);
+ if (matches) {
+ node._listLevel = parseInt(matches[1], 10);
}
- });
-
- return found;
- }
-
- function isBulletList(text) {
- return /^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(text);
- }
-
- /**
- * Converts fake bullet and numbered lists to real semantic OL/UL.
- *
- * @param {tinymce.html.Node} node Root node to convert children of.
- */
- function convertFakeListsToProperLists(node) {
- var currentListNode, prevListNode, lastLevel = 1;
-
- function getText(node) {
- var txt = '';
-
- if (node.type === 3) {
- return node.value;
+ if (/Ignore/i.test(value) && node.firstChild) {
+ node._listIgnore = true;
+ node.firstChild._listIgnore = true;
}
-
- if ((node = node.firstChild)) {
- do {
- txt += getText(node);
- } while ((node = node.next));
- }
-
- return txt;
- }
-
- function trimListStart(node, regExp) {
- if (node.type === 3) {
- if (regExp.test(node.value)) {
- node.value = node.value.replace(regExp, '');
- return false;
- }
- }
-
- if ((node = node.firstChild)) {
- do {
- if (!trimListStart(node, regExp)) {
- return false;
- }
- } while ((node = node.next));
+ break;
+ case 'horiz-align':
+ name = 'text-align';
+ break;
+ case 'vert-align':
+ name = 'vertical-align';
+ break;
+ case 'font-color':
+ case 'mso-foreground':
+ name = 'color';
+ break;
+ case 'mso-background':
+ case 'mso-highlight':
+ name = 'background';
+ break;
+ case 'font-weight':
+ case 'font-style':
+ if (value !== 'normal') {
+ outputStyles[name] = value;
}
-
- return true;
- }
-
- function removeIgnoredNodes(node) {
- if (node._listIgnore) {
+ return;
+ case 'mso-element':
+ if (/^(comment|comment-list)$/i.test(value)) {
node.remove();
return;
}
-
- if ((node = node.firstChild)) {
- do {
- removeIgnoredNodes(node);
- } while ((node = node.next));
- }
+ break;
}
-
- function convertParagraphToLi(paragraphNode, listName, start) {
- var level = paragraphNode._listLevel || lastLevel;
-
- // Handle list nesting
- if (level != lastLevel) {
- if (level < lastLevel) {
- // Move to parent list
- if (currentListNode) {
- currentListNode = currentListNode.parent.parent;
- }
- } else {
- // Create new list
- prevListNode = currentListNode;
- currentListNode = null;
- }
- }
-
- if (!currentListNode || currentListNode.name != listName) {
- prevListNode = prevListNode || currentListNode;
- currentListNode = new Node(listName, 1);
-
- if (start > 1) {
- currentListNode.attr('start', '' + start);
- }
-
- paragraphNode.wrap(currentListNode);
- } else {
- currentListNode.append(paragraphNode);
- }
-
- paragraphNode.name = 'li';
-
- // Append list to previous list if it exists
- if (level > lastLevel && prevListNode) {
- prevListNode.lastChild.append(currentListNode);
- }
-
- lastLevel = level;
-
- // Remove start of list item "1. " or "· " etc
- removeIgnoredNodes(paragraphNode);
- trimListStart(paragraphNode, /^\u00a0+/);
- trimListStart(paragraphNode, /^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/);
- trimListStart(paragraphNode, /^\u00a0+/);
+ if (name.indexOf('mso-comment') === 0) {
+ node.remove();
+ return;
}
-
- // Build a list of all root level elements before we start
- // altering them in the loop below.
- var elements = [], child = node.firstChild;
- while (typeof child !== 'undefined' && child !== null) {
- elements.push(child);
-
- child = child.walk();
- if (child !== null) {
- while (typeof child !== 'undefined' && child.parent !== node) {
- child = child.walk();
- }
- }
+ if (name.indexOf('mso-') === 0) {
+ return;
}
-
- for (var i = 0; i < elements.length; i++) {
- node = elements[i];
-
- if (node.name == 'p' && node.firstChild) {
- // Find first text node in paragraph
- var nodeText = getText(node);
-
- // Detect unordered lists look for bullets
- if (isBulletList(nodeText)) {
- convertParagraphToLi(node, 'ul');
- continue;
- }
-
- // Detect ordered lists 1., a. or ixv.
- if (isNumericList(nodeText)) {
- // Parse OL start number
- var matches = /([0-9]+)\./.exec(nodeText);
- var start = 1;
- if (matches) {
- start = parseInt(matches[1], 10);
- }
-
- convertParagraphToLi(node, 'ol', start);
- continue;
- }
-
- // Convert paragraphs marked as lists but doesn't look like anything
- if (node._listLevel) {
- convertParagraphToLi(node, 'ul', 1);
- continue;
- }
-
- currentListNode = null;
- } else {
- // If the root level element isn't a p tag which can be
- // processed by convertParagraphToLi, it interrupts the
- // lists, causing a new list to start instead of having
- // elements from the next list inserted above this tag.
- prevListNode = currentListNode;
- currentListNode = null;
- }
+ if ($_xr8b0ikjjgwectl.getRetainStyleProps(editor) === 'all' || validStyles && validStyles[name]) {
+ outputStyles[name] = value;
}
+ });
+ if (/(bold)/i.test(outputStyles['font-weight'])) {
+ delete outputStyles['font-weight'];
+ node.wrap(new global$7('b', 1));
}
-
- function filterStyles(editor, validStyles, node, styleValue) {
- var outputStyles = {}, matches, styles = editor.dom.parseStyle(styleValue);
-
- Tools.each(styles, function (value, name) {
- // Convert various MS styles to W3C styles
- switch (name) {
- case 'mso-list':
- // Parse out list indent level for lists
- matches = /\w+ \w+([0-9]+)/i.exec(styleValue);
- if (matches) {
- node._listLevel = parseInt(matches[1], 10);
- }
-
- // Remove these nodes <span style="mso-list:Ignore">o</span>
- // Since the span gets removed we mark the text node and the span
- if (/Ignore/i.test(value) && node.firstChild) {
- node._listIgnore = true;
- node.firstChild._listIgnore = true;
- }
-
- break;
-
- case "horiz-align":
- name = "text-align";
- break;
-
- case "vert-align":
- name = "vertical-align";
- break;
-
- case "font-color":
- case "mso-foreground":
- name = "color";
- break;
-
- case "mso-background":
- case "mso-highlight":
- name = "background";
- break;
-
- case "font-weight":
- case "font-style":
- if (value != "normal") {
- outputStyles[name] = value;
- }
- return;
-
- case "mso-element":
- // Remove track changes code
- if (/^(comment|comment-list)$/i.test(value)) {
- node.remove();
- return;
- }
-
- break;
- }
-
- if (name.indexOf('mso-comment') === 0) {
- node.remove();
- return;
- }
-
- // Never allow mso- prefixed names
- if (name.indexOf('mso-') === 0) {
- return;
- }
-
- // Output only valid styles
- if (editor.settings.paste_retain_style_properties == "all" || (validStyles && validStyles[name])) {
- outputStyles[name] = value;
+ if (/(italic)/i.test(outputStyles['font-style'])) {
+ delete outputStyles['font-style'];
+ node.wrap(new global$7('i', 1));
+ }
+ outputStyles = editor.dom.serializeStyle(outputStyles, node.name);
+ if (outputStyles) {
+ return outputStyles;
+ }
+ return null;
+ }
+ var filterWordContent = function (editor, content) {
+ var retainStyleProperties, validStyles;
+ retainStyleProperties = $_xr8b0ikjjgwectl.getRetainStyleProps(editor);
+ if (retainStyleProperties) {
+ validStyles = global$3.makeMap(retainStyleProperties.split(/[, ]/));
+ }
+ content = $_4bi2o9j0jjgwecui.filter(content, [
+ /<br class="?Apple-interchange-newline"?>/gi,
+ /<b[^>]+id="?docs-internal-[^>]*>/gi,
+ /<!--[\s\S]+?-->/gi,
+ /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,
+ [
+ /<(\/?)s>/gi,
+ '<$1strike>'
+ ],
+ [
+ / /gi,
+ '\xA0'
+ ],
+ [
+ /<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,
+ function (str, spaces) {
+ return spaces.length > 0 ? spaces.replace(/./, ' ').slice(Math.floor(spaces.length / 2)).split('').join('\xA0') : '';
}
- });
-
- // Convert bold style to "b" element
- if (/(bold)/i.test(outputStyles["font-weight"])) {
- delete outputStyles["font-weight"];
- node.wrap(new Node("b", 1));
+ ]
+ ]);
+ var validElements = $_xr8b0ikjjgwectl.getWordValidElements(editor);
+ var schema = global$8({
+ valid_elements: validElements,
+ valid_children: '-li[p]'
+ });
+ global$3.each(schema.elements, function (rule) {
+ if (!rule.attributes.class) {
+ rule.attributes.class = {};
+ rule.attributesOrder.push('class');
}
-
- // Convert italic style to "i" element
- if (/(italic)/i.test(outputStyles["font-style"])) {
- delete outputStyles["font-style"];
- node.wrap(new Node("i", 1));
+ if (!rule.attributes.style) {
+ rule.attributes.style = {};
+ rule.attributesOrder.push('style');
}
-
- // Serialize the styles and see if there is something left to keep
- outputStyles = editor.dom.serializeStyle(outputStyles, node.name);
- if (outputStyles) {
- return outputStyles;
+ });
+ var domParser = global$6({}, schema);
+ domParser.addAttributeFilter('style', function (nodes) {
+ var i = nodes.length, node;
+ while (i--) {
+ node = nodes[i];
+ node.attr('style', filterStyles(editor, validStyles, node, node.attr('style')));
+ if (node.name === 'span' && node.parent && !node.attributes.length) {
+ node.unwrap();
+ }
}
-
- return null;
- }
-
- var filterWordContent = function (editor, content) {
- var retainStyleProperties, validStyles;
-
- retainStyleProperties = editor.settings.paste_retain_style_properties;
- if (retainStyleProperties) {
- validStyles = Tools.makeMap(retainStyleProperties.split(/[, ]/));
+ });
+ domParser.addAttributeFilter('class', function (nodes) {
+ var i = nodes.length, node, className;
+ while (i--) {
+ node = nodes[i];
+ className = node.attr('class');
+ if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {
+ node.remove();
+ }
+ node.attr('class', null);
}
-
- // Remove basic Word junk
- content = Utils.filter(content, [
- // Remove apple new line markers
- /<br class="?Apple-interchange-newline"?>/gi,
-
- // Remove google docs internal guid markers
- /<b[^>]+id="?docs-internal-[^>]*>/gi,
-
- // Word comments like conditional comments etc
- /<!--[\s\S]+?-->/gi,
-
- // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content,
- // MS Office namespaced tags, and a few other tags
- /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,
-
- // Convert <s> into <strike> for line-though
- [/<(\/?)s>/gi, "<$1strike>"],
-
- // Replace nsbp entites to char since it's easier to handle
- [/ /gi, "\u00a0"],
-
- // Convert <span style="mso-spacerun:yes">___</span> to string of alternating
- // breaking/non-breaking spaces of same length
- [/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,
- function (str, spaces) {
- return (spaces.length > 0) ?
- spaces.replace(/./, " ").slice(Math.floor(spaces.length / 2)).split("").join("\u00a0") : "";
- }
- ]
- ]);
-
- var validElements = editor.settings.paste_word_valid_elements;
- if (!validElements) {
- validElements = (
- '-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,' +
- '-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,' +
- 'td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody'
- );
+ });
+ domParser.addNodeFilter('del', function (nodes) {
+ var i = nodes.length;
+ while (i--) {
+ nodes[i].remove();
}
-
- // Setup strict schema
- var schema = new Schema({
- valid_elements: validElements,
- valid_children: '-li[p]'
- });
-
- // Add style/class attribute to all element rules since the user might have removed them from
- // paste_word_valid_elements config option and we need to check them for properties
- Tools.each(schema.elements, function (rule) {
- /*eslint dot-notation:0*/
- if (!rule.attributes["class"]) {
- rule.attributes["class"] = {};
- rule.attributesOrder.push("class");
- }
-
- if (!rule.attributes.style) {
- rule.attributes.style = {};
- rule.attributesOrder.push("style");
- }
- });
-
- // Parse HTML into DOM structure
- var domParser = new DomParser({}, schema);
-
- // Filter styles to remove "mso" specific styles and convert some of them
- domParser.addAttributeFilter('style', function (nodes) {
- var i = nodes.length, node;
-
- while (i--) {
- node = nodes[i];
- node.attr('style', filterStyles(editor, validStyles, node, node.attr('style')));
-
- // Remove pointess spans
- if (node.name == 'span' && node.parent && !node.attributes.length) {
- node.unwrap();
- }
+ });
+ domParser.addNodeFilter('a', function (nodes) {
+ var i = nodes.length, node, href, name;
+ while (i--) {
+ node = nodes[i];
+ href = node.attr('href');
+ name = node.attr('name');
+ if (href && href.indexOf('#_msocom_') !== -1) {
+ node.remove();
+ continue;
}
- });
-
- // Check the class attribute for comments or del items and remove those
- domParser.addAttributeFilter('class', function (nodes) {
- var i = nodes.length, node, className;
-
- while (i--) {
- node = nodes[i];
-
- className = node.attr('class');
- if (/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(className)) {
- node.remove();
+ if (href && href.indexOf('file://') === 0) {
+ href = href.split('#')[1];
+ if (href) {
+ href = '#' + href;
}
-
- node.attr('class', null);
}
- });
-
- // Remove all del elements since we don't want the track changes code in the editor
- domParser.addNodeFilter('del', function (nodes) {
- var i = nodes.length;
-
- while (i--) {
- nodes[i].remove();
- }
- });
-
- // Keep some of the links and anchors
- domParser.addNodeFilter('a', function (nodes) {
- var i = nodes.length, node, href, name;
-
- while (i--) {
- node = nodes[i];
- href = node.attr('href');
- name = node.attr('name');
-
- if (href && href.indexOf('#_msocom_') != -1) {
- node.remove();
- continue;
- }
-
- if (href && href.indexOf('file://') === 0) {
- href = href.split('#')[1];
- if (href) {
- href = '#' + href;
- }
- }
-
- if (!href && !name) {
+ if (!href && !name) {
+ node.unwrap();
+ } else {
+ if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) {
node.unwrap();
- } else {
- // Remove all named anchors that aren't specific to TOC, Footnotes or Endnotes
- if (name && !/^_?(?:toc|edn|ftn)/i.test(name)) {
- node.unwrap();
- continue;
- }
-
- node.attr({
- href: href,
- name: name
- });
+ continue;
}
+ node.attr({
+ href: href,
+ name: name
+ });
}
- });
-
- // Parse into DOM structure
- var rootNode = domParser.parse(content);
-
- // Process DOM
- if (editor.settings.paste_convert_word_fake_lists !== false) {
- convertFakeListsToProperLists(rootNode);
}
+ });
+ var rootNode = domParser.parse(content);
+ if ($_xr8b0ikjjgwectl.shouldConvertWordFakeLists(editor)) {
+ convertFakeListsToProperLists(rootNode);
+ }
+ content = global$9({ validate: editor.settings.validate }, schema).serialize(rootNode);
+ return content;
+ };
+ var preProcess = function (editor, content) {
+ return $_xr8b0ikjjgwectl.shouldUseDefaultFilters(editor) ? filterWordContent(editor, content) : content;
+ };
+ var $_dfatuiivjjgwecu8 = {
+ preProcess: preProcess,
+ isWordContent: isWordContent
+ };
- // Serialize DOM back to HTML
- content = new Serializer({
- validate: editor.settings.validate
- }, schema).serialize(rootNode);
-
- return content;
- };
-
- var preProcess = function (editor, content) {
- return editor.settings.paste_enable_default_filters === false ? content : filterWordContent(editor, content);
- };
-
- return {
- preProcess: preProcess,
- isWordContent: isWordContent
- };
- }
-);
-
-/**
- * ProcessFilters.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.paste.core.ProcessFilters',
- [
- 'tinymce.plugins.paste.api.Events',
- 'tinymce.plugins.paste.core.WordFilter'
- ],
- function (Events, WordFilter) {
- var processResult = function (content, cancelled) {
- return { content: content, cancelled: cancelled };
- };
-
- var postProcessFilter = function (editor, html, internal, isWordHtml) {
- var tempBody = editor.dom.create('div', { style: 'display:none' }, html);
- var postProcessArgs = Events.firePastePostProcess(editor, tempBody, internal, isWordHtml);
- return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());
- };
-
- var filterContent = function (editor, content, internal, isWordHtml) {
- var preProcessArgs = Events.firePastePreProcess(editor, content, internal, isWordHtml);
-
- if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {
- return postProcessFilter(editor, preProcessArgs.content, internal, isWordHtml);
- } else {
- return processResult(preProcessArgs.content, preProcessArgs.isDefaultPrevented());
- }
- };
-
- var process = function (editor, html, internal) {
- var isWordHtml = WordFilter.isWordContent(html);
- var content = isWordHtml ? WordFilter.preProcess(editor, html) : html;
-
- return filterContent(editor, content, internal, isWordHtml);
- };
-
- return {
- process: process
- };
- }
-);
-
-/**
- * SmartPaste.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * Tries to be smart depending on what the user pastes if it looks like an url
- * it will make a link out of the current selection. If it's an image url that looks
- * like an image it will check if it's an image and insert it as an image.
- *
- * @class tinymce.pasteplugin.SmartPaste
- * @private
- */
-define(
- 'tinymce.plugins.paste.core.SmartPaste',
- [
- 'tinymce.core.util.Tools'
- ],
- function (Tools) {
- var isAbsoluteUrl = function (url) {
- return /^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(url);
- };
-
- var isImageUrl = function (url) {
- return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url);
- };
-
- var createImage = function (editor, url, pasteHtml) {
- editor.undoManager.extra(function () {
- pasteHtml(editor, url);
- }, function () {
- editor.insertContent('<img src="' + url + '">');
- });
-
- return true;
- };
-
- var createLink = function (editor, url, pasteHtml) {
- editor.undoManager.extra(function () {
- pasteHtml(editor, url);
- }, function () {
- editor.execCommand('mceInsertLink', false, url);
- });
-
- return true;
- };
-
- var linkSelection = function (editor, html, pasteHtml) {
- return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtml) : false;
- };
-
- var insertImage = function (editor, html, pasteHtml) {
- return isImageUrl(html) ? createImage(editor, html, pasteHtml) : false;
- };
-
- var pasteHtml = function (editor, html) {
- editor.insertContent(html, {
- merge: editor.settings.paste_merge_formats !== false,
- paste: true
- });
-
- return true;
- };
-
- var smartInsertContent = function (editor, html) {
- Tools.each([
- linkSelection,
- insertImage,
- pasteHtml
- ], function (action) {
- return action(editor, html, pasteHtml) !== true;
- });
- };
-
- var insertContent = function (editor, html) {
- if (editor.settings.smart_paste === false) {
- pasteHtml(editor, html);
- } else {
- smartInsertContent(editor, html);
- }
- };
-
+ var processResult = function (content, cancelled) {
return {
- isImageUrl: isImageUrl,
- isAbsoluteUrl: isAbsoluteUrl,
- insertContent: insertContent
+ content: content,
+ cancelled: cancelled
};
- }
-);
-
-/**
- * Clipboard.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class contains logic for getting HTML contents out of the clipboard.
- *
- * We need to make a lot of ugly hacks to get the contents out of the clipboard since
- * the W3C Clipboard API is broken in all browsers that have it: Gecko/WebKit/Blink.
- * We might rewrite this the way those API:s stabilize. Browsers doesn't handle pasting
- * from applications like Word the same way as it does when pasting into a contentEditable area
- * so we need to do lots of extra work to try to get to this clipboard data.
- *
- * Current implementation steps:
- * 1. On keydown with paste keys Ctrl+V or Shift+Insert create
- * a paste bin element and move focus to that element.
- * 2. Wait for the browser to fire a "paste" event and get the contents out of the paste bin.
- * 3. Check if the paste was successful if true, process the HTML.
- * (4). If the paste was unsuccessful use IE execCommand, Clipboard API, document.dataTransfer old WebKit API etc.
- *
- * @class tinymce.pasteplugin.Clipboard
- * @private
- */
-define(
- 'tinymce.plugins.paste.core.Clipboard',
- [
- 'tinymce.core.dom.RangeUtils',
- 'tinymce.core.Env',
- 'tinymce.core.util.Delay',
- 'tinymce.core.util.Tools',
- 'tinymce.core.util.VK',
- 'tinymce.plugins.paste.core.InternalHtml',
- 'tinymce.plugins.paste.core.Newlines',
- 'tinymce.plugins.paste.core.PasteBin',
- 'tinymce.plugins.paste.core.ProcessFilters',
- 'tinymce.plugins.paste.core.SmartPaste',
- 'tinymce.plugins.paste.core.Utils'
- ],
- function (RangeUtils, Env, Delay, Tools, VK, InternalHtml, Newlines, PasteBin, ProcessFilters, SmartPaste, Utils) {
- return function (editor) {
- var self = this, keyboardPasteTimeStamp = 0, draggingInternally = false;
- var pasteBin = new PasteBin(editor);
- var keyboardPastePlainTextState;
- var mceInternalUrlPrefix = 'data:text/mce-internal,';
- var uniqueId = Utils.createIdGenerator("mceclip");
-
- /**
- * Pastes the specified HTML. This means that the HTML is filtered and then
- * inserted at the current selection in the editor. It will also fire paste events
- * for custom user filtering.
- *
- * @param {String} html HTML code to paste into the current selection.
- * @param {Boolean?} internalFlag Optional true/false flag if the contents is internal or external.
- */
- function pasteHtml(html, internalFlag) {
- var internal = internalFlag ? internalFlag : InternalHtml.isMarked(html);
- var args = ProcessFilters.process(editor, InternalHtml.unmark(html), internal);
-
- if (args.cancelled === false) {
- SmartPaste.insertContent(editor, args.content);
- }
- }
-
- /**
- * Pastes the specified text. This means that the plain text is processed
- * and converted into BR and P elements. It will fire paste events for custom filtering.
- *
- * @param {String} text Text to paste as the current selection location.
- */
- function pasteText(text) {
- text = editor.dom.encode(text).replace(/\r\n/g, '\n');
- text = Newlines.convert(text, editor.settings.forced_root_block, editor.settings.forced_root_block_attrs);
-
- pasteHtml(text, false);
- }
-
-
- /**
- * Gets various content types out of a datatransfer object.
- *
- * @param {DataTransfer} dataTransfer Event fired on paste.
- * @return {Object} Object with mime types and data for those mime types.
- */
- function getDataTransferItems(dataTransfer) {
- var items = {};
-
- if (dataTransfer) {
- // Use old WebKit/IE API
- if (dataTransfer.getData) {
- var legacyText = dataTransfer.getData('Text');
- if (legacyText && legacyText.length > 0) {
- if (legacyText.indexOf(mceInternalUrlPrefix) == -1) {
- items['text/plain'] = legacyText;
- }
- }
- }
-
- if (dataTransfer.types) {
- for (var i = 0; i < dataTransfer.types.length; i++) {
- var contentType = dataTransfer.types[i];
- try { // IE11 throws exception when contentType is Files (type is present but data cannot be retrieved via getData())
- items[contentType] = dataTransfer.getData(contentType);
- } catch (ex) {
- items[contentType] = ""; // useless in general, but for consistency across browsers
- }
- }
- }
- }
-
- return items;
- }
-
- /**
- * Gets various content types out of the Clipboard API. It will also get the
- * plain text using older IE and WebKit API:s.
- *
- * @param {ClipboardEvent} clipboardEvent Event fired on paste.
- * @return {Object} Object with mime types and data for those mime types.
- */
- function getClipboardContent(clipboardEvent) {
- var content = getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer);
-
- // Edge 15 has a broken HTML Clipboard API see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11877517/
- return Utils.isMsEdge() ? Tools.extend(content, { 'text/html': '' }) : content;
- }
-
- function hasHtmlOrText(content) {
- return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');
- }
-
- function getBase64FromUri(uri) {
- var idx;
-
- idx = uri.indexOf(',');
- if (idx !== -1) {
- return uri.substr(idx + 1);
- }
-
- return null;
- }
-
- function isValidDataUriImage(settings, imgElm) {
- return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true;
- }
-
- function extractFilename(str) {
- var m = str.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i);
- return m ? editor.dom.encode(m[1]) : null;
- }
-
- function pasteImage(rng, reader, blob) {
- if (rng) {
- editor.selection.setRng(rng);
- rng = null;
- }
-
- var dataUri = reader.result;
- var base64 = getBase64FromUri(dataUri);
- var id = uniqueId();
- var name = editor.settings.images_reuse_filename && blob.name ? extractFilename(blob.name) : id;
- var img = new Image();
-
- img.src = dataUri;
-
- // TODO: Move the bulk of the cache logic to EditorUpload
- if (isValidDataUriImage(editor.settings, img)) {
- var blobCache = editor.editorUpload.blobCache;
- var blobInfo, existingBlobInfo;
+ };
+ var postProcessFilter = function (editor, html, internal, isWordHtml) {
+ var tempBody = editor.dom.create('div', { style: 'display:none' }, html);
+ var postProcessArgs = $_8tki3zijjjgwectj.firePastePostProcess(editor, tempBody, internal, isWordHtml);
+ return processResult(postProcessArgs.node.innerHTML, postProcessArgs.isDefaultPrevented());
+ };
+ var filterContent = function (editor, content, internal, isWordHtml) {
+ var preProcessArgs = $_8tki3zijjjgwectj.firePastePreProcess(editor, content, internal, isWordHtml);
+ if (editor.hasEventListeners('PastePostProcess') && !preProcessArgs.isDefaultPrevented()) {
+ return postProcessFilter(editor, preProcessArgs.content, internal, isWordHtml);
+ } else {
+ return processResult(preProcessArgs.content, preProcessArgs.isDefaultPrevented());
+ }
+ };
+ var process = function (editor, html, internal) {
+ var isWordHtml = $_dfatuiivjjgwecu8.isWordContent(html);
+ var content = isWordHtml ? $_dfatuiivjjgwecu8.preProcess(editor, html) : html;
+ return filterContent(editor, content, internal, isWordHtml);
+ };
+ var $_3scw66iujjgwecu4 = { process: process };
- existingBlobInfo = blobCache.findFirst(function (cachedBlobInfo) {
- return cachedBlobInfo.base64() === base64;
- });
+ var pasteHtml = function (editor, html) {
+ editor.insertContent(html, {
+ merge: $_xr8b0ikjjgwectl.shouldMergeFormats(editor),
+ paste: true
+ });
+ return true;
+ };
+ var isAbsoluteUrl = function (url) {
+ return /^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(url);
+ };
+ var isImageUrl = function (url) {
+ return isAbsoluteUrl(url) && /.(gif|jpe?g|png)$/.test(url);
+ };
+ var createImage = function (editor, url, pasteHtmlFn) {
+ editor.undoManager.extra(function () {
+ pasteHtmlFn(editor, url);
+ }, function () {
+ editor.insertContent('<img src="' + url + '">');
+ });
+ return true;
+ };
+ var createLink = function (editor, url, pasteHtmlFn) {
+ editor.undoManager.extra(function () {
+ pasteHtmlFn(editor, url);
+ }, function () {
+ editor.execCommand('mceInsertLink', false, url);
+ });
+ return true;
+ };
+ var linkSelection = function (editor, html, pasteHtmlFn) {
+ return editor.selection.isCollapsed() === false && isAbsoluteUrl(html) ? createLink(editor, html, pasteHtmlFn) : false;
+ };
+ var insertImage = function (editor, html, pasteHtmlFn) {
+ return isImageUrl(html) ? createImage(editor, html, pasteHtmlFn) : false;
+ };
+ var smartInsertContent = function (editor, html) {
+ global$3.each([
+ linkSelection,
+ insertImage,
+ pasteHtml
+ ], function (action) {
+ return action(editor, html, pasteHtml) !== true;
+ });
+ };
+ var insertContent = function (editor, html) {
+ if ($_xr8b0ikjjgwectl.isSmartPasteEnabled(editor) === false) {
+ pasteHtml(editor, html);
+ } else {
+ smartInsertContent(editor, html);
+ }
+ };
+ var $_d8pzpej1jjgwecum = {
+ isImageUrl: isImageUrl,
+ isAbsoluteUrl: isAbsoluteUrl,
+ insertContent: insertContent
+ };
- if (!existingBlobInfo) {
- blobInfo = blobCache.create(id, blob, base64, name);
- blobCache.add(blobInfo);
- } else {
- blobInfo = existingBlobInfo;
+ var pasteHtml$1 = function (editor, html, internalFlag) {
+ var internal = internalFlag ? internalFlag : $_4x13hjirjjgwecu1.isMarked(html);
+ var args = $_3scw66iujjgwecu4.process(editor, $_4x13hjirjjgwecu1.unmark(html), internal);
+ if (args.cancelled === false) {
+ $_d8pzpej1jjgwecum.insertContent(editor, args.content);
+ }
+ };
+ var pasteText = function (editor, text) {
+ text = editor.dom.encode(text).replace(/\r\n/g, '\n');
+ text = $_4h3hnrisjjgwecu2.convert(text, editor.settings.forced_root_block, editor.settings.forced_root_block_attrs);
+ pasteHtml$1(editor, text, false);
+ };
+ var getDataTransferItems = function (dataTransfer) {
+ var items = {};
+ var mceInternalUrlPrefix = 'data:text/mce-internal,';
+ if (dataTransfer) {
+ if (dataTransfer.getData) {
+ var legacyText = dataTransfer.getData('Text');
+ if (legacyText && legacyText.length > 0) {
+ if (legacyText.indexOf(mceInternalUrlPrefix) === -1) {
+ items['text/plain'] = legacyText;
}
-
- pasteHtml('<img src="' + blobInfo.blobUri() + '">', false);
- } else {
- pasteHtml('<img src="' + dataUri + '">', false);
}
}
-
- /**
- * Checks if the clipboard contains image data if it does it will take that data
- * and convert it into a data url image and paste that image at the caret location.
- *
- * @param {ClipboardEvent} e Paste/drop event object.
- * @param {DOMRange} rng Rng object to move selection to.
- * @return {Boolean} true/false if the image data was found or not.
- */
- function pasteImageData(e, rng) {
- var dataTransfer = e.clipboardData || e.dataTransfer;
-
- function processItems(items) {
- var i, item, reader, hadImage = false;
-
- if (items) {
- for (i = 0; i < items.length; i++) {
- item = items[i];
-
- if (/^image\/(jpeg|png|gif|bmp)$/.test(item.type)) {
- var blob = item.getAsFile ? item.getAsFile() : item;
-
- reader = new FileReader();
- reader.onload = pasteImage.bind(null, rng, reader, blob);
- reader.readAsDataURL(blob);
-
- e.preventDefault();
- hadImage = true;
- }
- }
+ if (dataTransfer.types) {
+ for (var i = 0; i < dataTransfer.types.length; i++) {
+ var contentType = dataTransfer.types[i];
+ try {
+ items[contentType] = dataTransfer.getData(contentType);
+ } catch (ex) {
+ items[contentType] = '';
}
-
- return hadImage;
- }
-
- if (editor.settings.paste_data_images && dataTransfer) {
- return processItems(dataTransfer.items) || processItems(dataTransfer.files);
}
}
-
- /**
- * Chrome on Android doesn't support proper clipboard access so we have no choice but to allow the browser default behavior.
- *
- * @param {Event} e Paste event object to check if it contains any data.
- * @return {Boolean} true/false if the clipboard is empty or not.
- */
- function isBrokenAndroidClipboardEvent(e) {
- var clipboardData = e.clipboardData;
-
- return navigator.userAgent.indexOf('Android') != -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;
- }
-
- function getCaretRangeFromEvent(e) {
- return RangeUtils.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());
- }
-
- function hasContentType(clipboardContent, mimeType) {
- return mimeType in clipboardContent && clipboardContent[mimeType].length > 0;
- }
-
- function isKeyboardPasteEvent(e) {
- return (VK.metaKeyPressed(e) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45);
+ }
+ return items;
+ };
+ var getClipboardContent = function (editor, clipboardEvent) {
+ var content = getDataTransferItems(clipboardEvent.clipboardData || editor.getDoc().dataTransfer);
+ return $_4bi2o9j0jjgwecui.isMsEdge() ? global$3.extend(content, { 'text/html': '' }) : content;
+ };
+ var hasContentType = function (clipboardContent, mimeType) {
+ return mimeType in clipboardContent && clipboardContent[mimeType].length > 0;
+ };
+ var hasHtmlOrText = function (content) {
+ return hasContentType(content, 'text/html') || hasContentType(content, 'text/plain');
+ };
+ var getBase64FromUri = function (uri) {
+ var idx;
+ idx = uri.indexOf(',');
+ if (idx !== -1) {
+ return uri.substr(idx + 1);
+ }
+ return null;
+ };
+ var isValidDataUriImage = function (settings, imgElm) {
+ return settings.images_dataimg_filter ? settings.images_dataimg_filter(imgElm) : true;
+ };
+ var extractFilename = function (editor, str) {
+ var m = str.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i);
+ return m ? editor.dom.encode(m[1]) : null;
+ };
+ var uniqueId = $_4bi2o9j0jjgwecui.createIdGenerator('mceclip');
+ var pasteImage = function (editor, rng, reader, blob) {
+ if (rng) {
+ editor.selection.setRng(rng);
+ rng = null;
+ }
+ var dataUri = reader.result;
+ var base64 = getBase64FromUri(dataUri);
+ var id = uniqueId();
+ var name$$1 = editor.settings.images_reuse_filename && blob.name ? extractFilename(editor, blob.name) : id;
+ var img = new Image();
+ img.src = dataUri;
+ if (isValidDataUriImage(editor.settings, img)) {
+ var blobCache = editor.editorUpload.blobCache;
+ var blobInfo = void 0, existingBlobInfo = void 0;
+ existingBlobInfo = blobCache.findFirst(function (cachedBlobInfo) {
+ return cachedBlobInfo.base64() === base64;
+ });
+ if (!existingBlobInfo) {
+ blobInfo = blobCache.create(id, blob, base64, name$$1);
+ blobCache.add(blobInfo);
+ } else {
+ blobInfo = existingBlobInfo;
}
-
- function registerEventHandlers() {
- editor.on('keydown', function (e) {
- function removePasteBinOnKeyUp(e) {
- // Ctrl+V or Shift+Insert
- if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {
- pasteBin.remove();
- }
- }
-
- // Ctrl+V or Shift+Insert
- if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {
- keyboardPastePlainTextState = e.shiftKey && e.keyCode == 86;
-
- // Edge case on Safari on Mac where it doesn't handle Cmd+Shift+V correctly
- // it fires the keydown but no paste or keyup so we are left with a paste bin
- if (keyboardPastePlainTextState && Env.webkit && navigator.userAgent.indexOf('Version/') != -1) {
- return;
- }
-
- // Prevent undoManager keydown handler from making an undo level with the pastebin in it
- e.stopImmediatePropagation();
-
- keyboardPasteTimeStamp = new Date().getTime();
-
- // IE doesn't support Ctrl+Shift+V and it doesn't even produce a paste event
- // so lets fake a paste event and let IE use the execCommand/dataTransfer methods
- if (Env.ie && keyboardPastePlainTextState) {
- e.preventDefault();
- editor.fire('paste', { ieFake: true });
- return;
- }
-
- pasteBin.remove();
- pasteBin.create();
-
- // Remove pastebin if we get a keyup and no paste event
- // For example pasting a file in IE 11 will not produce a paste event
- editor.once('keyup', removePasteBinOnKeyUp);
- editor.once('paste', function () {
- editor.off('keyup', removePasteBinOnKeyUp);
- });
- }
- });
-
- function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal) {
- var content, isPlainTextHtml;
-
- // Grab HTML from Clipboard API or paste bin as a fallback
- if (hasContentType(clipboardContent, 'text/html')) {
- content = clipboardContent['text/html'];
- } else {
- content = pasteBin.getHtml();
- internal = internal ? internal : InternalHtml.isMarked(content);
-
- // If paste bin is empty try using plain text mode
- // since that is better than nothing right
- if (pasteBin.isDefaultContent(content)) {
- plainTextMode = true;
- }
- }
-
- content = Utils.trimHtml(content);
-
- pasteBin.remove();
-
- isPlainTextHtml = (internal === false && Newlines.isPlainText(content));
-
- // If we got nothing from clipboard API and pastebin or the content is a plain text (with only
- // some BRs, Ps or DIVs as newlines) then we fallback to plain/text
- if (!content.length || isPlainTextHtml) {
- plainTextMode = true;
- }
-
- // Grab plain text from Clipboard API or convert existing HTML to plain text
- if (plainTextMode) {
- // Use plain text contents from Clipboard API unless the HTML contains paragraphs then
- // we should convert the HTML to plain text since works better when pasting HTML/Word contents as plain text
- if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {
- content = clipboardContent['text/plain'];
- } else {
- content = Utils.innerText(content);
- }
- }
-
- // If the content is the paste bin default HTML then it was
- // impossible to get the cliboard data out.
- if (pasteBin.isDefaultContent(content)) {
- if (!isKeyBoardPaste) {
- editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');
- }
-
- return;
- }
-
- if (plainTextMode) {
- pasteText(content);
- } else {
- pasteHtml(content, internal);
- }
- }
-
- var getLastRng = function () {
- return pasteBin.getLastRng() || editor.selection.getRng();
- };
-
- editor.on('paste', function (e) {
- // Getting content from the Clipboard can take some time
- var clipboardTimer = new Date().getTime();
- var clipboardContent = getClipboardContent(e);
- var clipboardDelay = new Date().getTime() - clipboardTimer;
-
- var isKeyBoardPaste = (new Date().getTime() - keyboardPasteTimeStamp - clipboardDelay) < 1000;
- var plainTextMode = self.pasteFormat == "text" || keyboardPastePlainTextState;
- var internal = hasContentType(clipboardContent, InternalHtml.internalHtmlMime());
-
- keyboardPastePlainTextState = false;
-
- if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {
- pasteBin.remove();
- return;
- }
-
- if (!hasHtmlOrText(clipboardContent) && pasteImageData(e, getLastRng())) {
- pasteBin.remove();
- return;
- }
-
- // Not a keyboard paste prevent default paste and try to grab the clipboard contents using different APIs
- if (!isKeyBoardPaste) {
- e.preventDefault();
- }
-
- // Try IE only method if paste isn't a keyboard paste
- if (Env.ie && (!isKeyBoardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) {
- pasteBin.create();
-
- editor.dom.bind(pasteBin.getEl(), 'paste', function (e) {
- e.stopPropagation();
- });
-
- editor.getDoc().execCommand('Paste', false, null);
- clipboardContent["text/html"] = pasteBin.getHtml();
- }
-
- // If clipboard API has HTML then use that directly
- if (hasContentType(clipboardContent, 'text/html')) {
+ pasteHtml$1(editor, '<img src="' + blobInfo.blobUri() + '">', false);
+ } else {
+ pasteHtml$1(editor, '<img src="' + dataUri + '">', false);
+ }
+ };
+ var isClipboardEvent = function (event$$1) {
+ return event$$1.type === 'paste';
+ };
+ var pasteImageData = function (editor, e, rng) {
+ var dataTransfer = isClipboardEvent(e) ? e.clipboardData : e.dataTransfer;
+ function processItems(items) {
+ var i, item, reader, hadImage = false;
+ if (items) {
+ for (i = 0; i < items.length; i++) {
+ item = items[i];
+ if (/^image\/(jpeg|png|gif|bmp)$/.test(item.type)) {
+ var blob = item.getAsFile ? item.getAsFile() : item;
+ reader = new window.FileReader();
+ reader.onload = pasteImage.bind(null, editor, rng, reader, blob);
+ reader.readAsDataURL(blob);
e.preventDefault();
-
- // if clipboard lacks internal mime type, inspect html for internal markings
- if (!internal) {
- internal = InternalHtml.isMarked(clipboardContent['text/html']);
- }
-
- insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);
- } else {
- Delay.setEditorTimeout(editor, function () {
- insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);
- }, 0);
+ hadImage = true;
}
- });
-
- editor.on('dragstart dragend', function (e) {
- draggingInternally = e.type == 'dragstart';
- });
-
- function isPlainTextFileUrl(content) {
- var plainTextContent = content['text/plain'];
- return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;
}
-
- editor.on('drop', function (e) {
- var dropContent, rng;
-
- rng = getCaretRangeFromEvent(e);
-
- if (e.isDefaultPrevented() || draggingInternally) {
- return;
- }
-
- dropContent = getDataTransferItems(e.dataTransfer);
- var internal = hasContentType(dropContent, InternalHtml.internalHtmlMime());
-
- if ((!hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && pasteImageData(e, rng)) {
- return;
- }
-
- if (rng && editor.settings.paste_filter_drop !== false) {
- var content = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain'];
-
- if (content) {
- e.preventDefault();
-
- // FF 45 doesn't paint a caret when dragging in text in due to focus call by execCommand
- Delay.setEditorTimeout(editor, function () {
- editor.undoManager.transact(function () {
- if (dropContent['mce-internal']) {
- editor.execCommand('Delete');
- }
-
- editor.selection.setRng(rng);
-
- content = Utils.trimHtml(content);
-
- if (!dropContent['text/html']) {
- pasteText(content);
- } else {
- pasteHtml(content, internal);
- }
- });
- });
- }
- }
- });
-
- editor.on('dragover dragend', function (e) {
- if (editor.settings.paste_data_images) {
- e.preventDefault();
- }
- });
}
-
- self.pasteHtml = pasteHtml;
- self.pasteText = pasteText;
- self.pasteImageData = pasteImageData;
-
- editor.on('preInit', function () {
- registerEventHandlers();
-
- // Remove all data images from paste for example from Gecko
- // except internal images like video elements
- editor.parser.addNodeFilter('img', function (nodes, name, args) {
- function isPasteInsert(args) {
- return args.data && args.data.paste === true;
- }
-
- function remove(node) {
- if (!node.attr('data-mce-object') && src !== Env.transparentSrc) {
- node.remove();
- }
- }
-
- function isWebKitFakeUrl(src) {
- return src.indexOf("webkit-fake-url") === 0;
- }
-
- function isDataUri(src) {
- return src.indexOf("data:") === 0;
- }
-
- if (!editor.settings.paste_data_images && isPasteInsert(args)) {
- var i = nodes.length;
-
- while (i--) {
- var src = nodes[i].attributes.map.src;
-
- if (!src) {
- continue;
- }
-
- // Safari on Mac produces webkit-fake-url see: https://bugs.webkit.org/show_bug.cgi?id=49141
- if (isWebKitFakeUrl(src)) {
- remove(nodes[i]);
- } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) {
- remove(nodes[i]);
- }
- }
- }
- });
- });
- };
- }
-);
-
-/**
- * CutCopy.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.plugins.paste.core.CutCopy',
- [
- 'tinymce.core.Env',
- 'tinymce.plugins.paste.core.InternalHtml',
- 'tinymce.plugins.paste.core.Utils'
- ],
- function (Env, InternalHtml, Utils) {
- var noop = function () {
- };
-
- var hasWorkingClipboardApi = function (clipboardData) {
- // iOS supports the clipboardData API but it doesn't do anything for cut operations
- // Edge 15 has a broken HTML Clipboard API see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11780845/
- return Env.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && Utils.isMsEdge() !== true;
- };
-
- var setHtml5Clipboard = function (clipboardData, html, text) {
- if (hasWorkingClipboardApi(clipboardData)) {
- try {
- clipboardData.clearData();
- clipboardData.setData('text/html', html);
- clipboardData.setData('text/plain', text);
- clipboardData.setData(InternalHtml.internalHtmlMime(), html);
- return true;
- } catch (e) {
- return false;
+ return hadImage;
+ }
+ if (editor.settings.paste_data_images && dataTransfer) {
+ return processItems(dataTransfer.items) || processItems(dataTransfer.files);
+ }
+ };
+ var isBrokenAndroidClipboardEvent = function (e) {
+ var clipboardData = e.clipboardData;
+ return navigator.userAgent.indexOf('Android') !== -1 && clipboardData && clipboardData.items && clipboardData.items.length === 0;
+ };
+ var isKeyboardPasteEvent = function (e) {
+ return global$4.metaKeyPressed(e) && e.keyCode === 86 || e.shiftKey && e.keyCode === 45;
+ };
+ var registerEventHandlers = function (editor, pasteBin, pasteFormat) {
+ var keyboardPasteTimeStamp = 0;
+ var keyboardPastePlainTextState;
+ editor.on('keydown', function (e) {
+ function removePasteBinOnKeyUp(e) {
+ if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {
+ pasteBin.remove();
+ }
+ }
+ if (isKeyboardPasteEvent(e) && !e.isDefaultPrevented()) {
+ keyboardPastePlainTextState = e.shiftKey && e.keyCode === 86;
+ if (keyboardPastePlainTextState && global$1.webkit && navigator.userAgent.indexOf('Version/') !== -1) {
+ return;
+ }
+ e.stopImmediatePropagation();
+ keyboardPasteTimeStamp = new Date().getTime();
+ if (global$1.ie && keyboardPastePlainTextState) {
+ e.preventDefault();
+ $_8tki3zijjjgwectj.firePaste(editor, true);
+ return;
}
+ pasteBin.remove();
+ pasteBin.create();
+ editor.once('keyup', removePasteBinOnKeyUp);
+ editor.once('paste', function () {
+ editor.off('keyup', removePasteBinOnKeyUp);
+ });
+ }
+ });
+ function insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal) {
+ var content, isPlainTextHtml;
+ if (hasContentType(clipboardContent, 'text/html')) {
+ content = clipboardContent['text/html'];
} else {
- return false;
+ content = pasteBin.getHtml();
+ internal = internal ? internal : $_4x13hjirjjgwecu1.isMarked(content);
+ if (pasteBin.isDefaultContent(content)) {
+ plainTextMode = true;
+ }
}
- };
-
- var setClipboardData = function (evt, data, fallback, done) {
- if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {
- evt.preventDefault();
- done();
+ content = $_4bi2o9j0jjgwecui.trimHtml(content);
+ pasteBin.remove();
+ isPlainTextHtml = internal === false && $_4h3hnrisjjgwecu2.isPlainText(content);
+ if (!content.length || isPlainTextHtml) {
+ plainTextMode = true;
+ }
+ if (plainTextMode) {
+ if (hasContentType(clipboardContent, 'text/plain') && isPlainTextHtml) {
+ content = clipboardContent['text/plain'];
+ } else {
+ content = $_4bi2o9j0jjgwecui.innerText(content);
+ }
+ }
+ if (pasteBin.isDefaultContent(content)) {
+ if (!isKeyBoardPaste) {
+ editor.windowManager.alert('Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.');
+ }
+ return;
+ }
+ if (plainTextMode) {
+ pasteText(editor, content);
} else {
- fallback(data.html, done);
+ pasteHtml$1(editor, content, internal);
}
+ }
+ var getLastRng = function () {
+ return pasteBin.getLastRng() || editor.selection.getRng();
};
-
- var fallback = function (editor) {
- return function (html, done) {
- var markedHtml = InternalHtml.mark(html);
- var outer = editor.dom.create('div', {
- contenteditable: "false",
- "data-mce-bogus": "all"
- });
- var inner = editor.dom.create('div', { contenteditable: "true" }, markedHtml);
- editor.dom.setStyles(outer, {
- position: 'fixed',
- left: '-3000px',
- width: '1000px',
- overflow: 'hidden'
+ editor.on('paste', function (e) {
+ var clipboardTimer = new Date().getTime();
+ var clipboardContent = getClipboardContent(editor, e);
+ var clipboardDelay = new Date().getTime() - clipboardTimer;
+ var isKeyBoardPaste = new Date().getTime() - keyboardPasteTimeStamp - clipboardDelay < 1000;
+ var plainTextMode = pasteFormat.get() === 'text' || keyboardPastePlainTextState;
+ var internal = hasContentType(clipboardContent, $_4x13hjirjjgwecu1.internalHtmlMime());
+ keyboardPastePlainTextState = false;
+ if (e.isDefaultPrevented() || isBrokenAndroidClipboardEvent(e)) {
+ pasteBin.remove();
+ return;
+ }
+ if (!hasHtmlOrText(clipboardContent) && pasteImageData(editor, e, getLastRng())) {
+ pasteBin.remove();
+ return;
+ }
+ if (!isKeyBoardPaste) {
+ e.preventDefault();
+ }
+ if (global$1.ie && (!isKeyBoardPaste || e.ieFake) && !hasContentType(clipboardContent, 'text/html')) {
+ pasteBin.create();
+ editor.dom.bind(pasteBin.getEl(), 'paste', function (e) {
+ e.stopPropagation();
});
- outer.appendChild(inner);
- editor.dom.add(editor.getBody(), outer);
-
- var range = editor.selection.getRng();
- inner.focus();
-
- var offscreenRange = editor.dom.createRng();
- offscreenRange.selectNodeContents(inner);
- editor.selection.setRng(offscreenRange);
-
- setTimeout(function () {
- outer.parentNode.removeChild(outer);
- editor.selection.setRng(range);
- done();
+ editor.getDoc().execCommand('Paste', false, null);
+ clipboardContent['text/html'] = pasteBin.getHtml();
+ }
+ if (hasContentType(clipboardContent, 'text/html')) {
+ e.preventDefault();
+ if (!internal) {
+ internal = $_4x13hjirjjgwecu1.isMarked(clipboardContent['text/html']);
+ }
+ insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);
+ } else {
+ global$2.setEditorTimeout(editor, function () {
+ insertClipboardContent(clipboardContent, isKeyBoardPaste, plainTextMode, internal);
}, 0);
+ }
+ });
+ };
+ var registerEventsAndFilters = function (editor, pasteBin, pasteFormat) {
+ registerEventHandlers(editor, pasteBin, pasteFormat);
+ var src;
+ editor.parser.addNodeFilter('img', function (nodes, name$$1, args) {
+ var isPasteInsert = function (args) {
+ return args.data && args.data.paste === true;
};
- };
-
- var getData = function (editor) {
- return {
- html: editor.selection.getContent({ contextual: true }),
- text: editor.selection.getContent({ format: 'text' })
- };
- };
-
- var cut = function (editor) {
- return function (evt) {
- if (editor.selection.isCollapsed() === false) {
- setClipboardData(evt, getData(editor), fallback(editor), function () {
- // Chrome fails to execCommand from another execCommand with this message:
- // "We don't execute document.execCommand() this time, because it is called recursively.""
- setTimeout(function () { // detach
- editor.execCommand('Delete');
- }, 0);
- });
+ var remove = function (node) {
+ if (!node.attr('data-mce-object') && src !== global$1.transparentSrc) {
+ node.remove();
}
};
- };
-
- var copy = function (editor) {
- return function (evt) {
- if (editor.selection.isCollapsed() === false) {
- setClipboardData(evt, getData(editor), fallback(editor), noop);
- }
+ var isWebKitFakeUrl = function (src) {
+ return src.indexOf('webkit-fake-url') === 0;
};
- };
-
- var register = function (editor) {
- editor.on('cut', cut(editor));
- editor.on('copy', copy(editor));
- };
-
- return {
- register: register
- };
- }
-);
-/**
- * Quirks.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class contains various fixes for browsers. These issues can not be feature
- * detected since we have no direct control over the clipboard. However we might be able
- * to remove some of these fixes once the browsers gets updated/fixed.
- *
- * @class tinymce.pasteplugin.Quirks
- * @private
- */
-define(
- 'tinymce.plugins.paste.core.Quirks',
- [
- 'tinymce.core.Env',
- 'tinymce.core.util.Tools',
- 'tinymce.plugins.paste.core.WordFilter',
- 'tinymce.plugins.paste.core.Utils'
- ],
- function (Env, Tools, WordFilter, Utils) {
- function addPreProcessFilter(editor, filterFunc) {
- editor.on('PastePreProcess', function (e) {
- e.content = filterFunc(editor, e.content, e.internal, e.wordContent);
- });
- }
-
- function addPostProcessFilter(editor, filterFunc) {
- editor.on('PastePostProcess', function (e) {
- filterFunc(editor, e.node);
- });
- }
-
- /**
- * Removes BR elements after block elements. IE9 has a nasty bug where it puts a BR element after each
- * block element when pasting from word. This removes those elements.
- *
- * This:
- * <p>a</p><br><p>b</p>
- *
- * Becomes:
- * <p>a</p><p>b</p>
- */
- function removeExplorerBrElementsAfterBlocks(editor, html) {
- // Only filter word specific content
- if (!WordFilter.isWordContent(html)) {
- return html;
+ var isDataUri = function (src) {
+ return src.indexOf('data:') === 0;
+ };
+ if (!editor.settings.paste_data_images && isPasteInsert(args)) {
+ var i = nodes.length;
+ while (i--) {
+ src = nodes[i].attributes.map.src;
+ if (!src) {
+ continue;
+ }
+ if (isWebKitFakeUrl(src)) {
+ remove(nodes[i]);
+ } else if (!editor.settings.allow_html_data_urls && isDataUri(src)) {
+ remove(nodes[i]);
+ }
+ }
}
+ });
+ };
- // Produce block regexp based on the block elements in schema
- var blockElements = [];
-
- Tools.each(editor.schema.getBlockElements(), function (block, blockName) {
- blockElements.push(blockName);
+ var getPasteBinParent = function (editor) {
+ return global$1.ie && editor.inline ? document.body : editor.getBody();
+ };
+ var isExternalPasteBin = function (editor) {
+ return getPasteBinParent(editor) !== editor.getBody();
+ };
+ var delegatePasteEvents = function (editor, pasteBinElm) {
+ if (isExternalPasteBin(editor)) {
+ editor.dom.bind(pasteBinElm, 'paste keyup', function (e) {
+ setTimeout(function () {
+ editor.fire('paste');
+ }, 0);
});
-
- var explorerBlocksRegExp = new RegExp(
- '(?:<br> [\\s\\r\\n]+|<br>)*(<\\/?(' + blockElements.join('|') + ')[^>]*>)(?:<br> [\\s\\r\\n]+|<br>)*',
- 'g'
- );
-
- // Remove BR:s from: <BLOCK>X</BLOCK><BR>
- html = Utils.filter(html, [
- [explorerBlocksRegExp, '$1']
- ]);
-
- // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break
- html = Utils.filter(html, [
- [/<br><br>/g, '<BR><BR>'], // Replace multiple BR elements with uppercase BR to keep them intact
- [/<br>/g, ' '], // Replace single br elements with space since they are word wrap BR:s
- [/<BR><BR>/g, '<br>'] // Replace back the double brs but into a single BR
- ]);
-
- return html;
}
-
- /**
- * WebKit has a nasty bug where the all computed styles gets added to style attributes when copy/pasting contents.
- * This fix solves that by simply removing the whole style attribute.
- *
- * The paste_webkit_styles option can be set to specify what to keep:
- * paste_webkit_styles: "none" // Keep no styles
- * paste_webkit_styles: "all", // Keep all of them
- * paste_webkit_styles: "font-weight color" // Keep specific ones
- */
- function removeWebKitStyles(editor, content, internal, isWordHtml) {
- // WordFilter has already processed styles at this point and internal doesn't need any processing
- if (isWordHtml || internal) {
- return content;
+ };
+ var create = function (editor, lastRngCell, pasteBinDefaultContent) {
+ var dom = editor.dom, body = editor.getBody();
+ var pasteBinElm;
+ lastRngCell.set(editor.selection.getRng());
+ pasteBinElm = editor.dom.add(getPasteBinParent(editor), 'div', {
+ 'id': 'mcepastebin',
+ 'class': 'mce-pastebin',
+ 'contentEditable': true,
+ 'data-mce-bogus': 'all',
+ 'style': 'position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0'
+ }, pasteBinDefaultContent);
+ if (global$1.ie || global$1.gecko) {
+ dom.setStyle(pasteBinElm, 'left', dom.getStyle(body, 'direction', true) === 'rtl' ? 65535 : -65535);
+ }
+ dom.bind(pasteBinElm, 'beforedeactivate focusin focusout', function (e) {
+ e.stopPropagation();
+ });
+ delegatePasteEvents(editor, pasteBinElm);
+ pasteBinElm.focus();
+ editor.selection.select(pasteBinElm, true);
+ };
+ var remove = function (editor, lastRngCell) {
+ if (getEl(editor)) {
+ var pasteBinClone = void 0;
+ var lastRng = lastRngCell.get();
+ while (pasteBinClone = editor.dom.get('mcepastebin')) {
+ editor.dom.remove(pasteBinClone);
+ editor.dom.unbind(pasteBinClone);
}
-
- // Filter away styles that isn't matching the target node
- var webKitStyles = editor.settings.paste_webkit_styles;
-
- if (editor.settings.paste_remove_styles_if_webkit === false || webKitStyles == "all") {
- return content;
+ if (lastRng) {
+ editor.selection.setRng(lastRng);
}
-
- if (webKitStyles) {
- webKitStyles = webKitStyles.split(/[, ]/);
+ }
+ lastRngCell.set(null);
+ };
+ var getEl = function (editor) {
+ return editor.dom.get('mcepastebin');
+ };
+ var getHtml = function (editor) {
+ var pasteBinElm, pasteBinClones, i, dirtyWrappers, cleanWrapper;
+ var copyAndRemove = function (toElm, fromElm) {
+ toElm.appendChild(fromElm);
+ editor.dom.remove(fromElm, true);
+ };
+ pasteBinClones = global$3.grep(getPasteBinParent(editor).childNodes, function (elm) {
+ return elm.id === 'mcepastebin';
+ });
+ pasteBinElm = pasteBinClones.shift();
+ global$3.each(pasteBinClones, function (pasteBinClone) {
+ copyAndRemove(pasteBinElm, pasteBinClone);
+ });
+ dirtyWrappers = editor.dom.select('div[id=mcepastebin]', pasteBinElm);
+ for (i = dirtyWrappers.length - 1; i >= 0; i--) {
+ cleanWrapper = editor.dom.create('div');
+ pasteBinElm.insertBefore(cleanWrapper, dirtyWrappers[i]);
+ copyAndRemove(cleanWrapper, dirtyWrappers[i]);
+ }
+ return pasteBinElm ? pasteBinElm.innerHTML : '';
+ };
+ var getLastRng = function (lastRng) {
+ return lastRng.get();
+ };
+ var isDefaultContent = function (pasteBinDefaultContent, content) {
+ return content === pasteBinDefaultContent;
+ };
+ var isPasteBin = function (elm) {
+ return elm && elm.id === 'mcepastebin';
+ };
+ var isDefault = function (editor, pasteBinDefaultContent) {
+ var pasteBinElm = getEl(editor);
+ return isPasteBin(pasteBinElm) && isDefaultContent(pasteBinDefaultContent, pasteBinElm.innerHTML);
+ };
+ var PasteBin = function (editor) {
+ var lastRng = Cell(null);
+ var pasteBinDefaultContent = '%MCEPASTEBIN%';
+ return {
+ create: function () {
+ return create(editor, lastRng, pasteBinDefaultContent);
+ },
+ remove: function () {
+ return remove(editor, lastRng);
+ },
+ getEl: function () {
+ return getEl(editor);
+ },
+ getHtml: function () {
+ return getHtml(editor);
+ },
+ getLastRng: function () {
+ return getLastRng(lastRng);
+ },
+ isDefault: function () {
+ return isDefault(editor, pasteBinDefaultContent);
+ },
+ isDefaultContent: function (content) {
+ return isDefaultContent(pasteBinDefaultContent, content);
}
+ };
+ };
- // Keep specific styles that doesn't match the current node computed style
- if (webKitStyles) {
- var dom = editor.dom, node = editor.selection.getNode();
-
- content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, function (all, before, value, after) {
- var inputStyles = dom.parseStyle(dom.decode(value), 'span');
- var outputStyles = {};
-
- if (webKitStyles === "none") {
- return before + after;
- }
-
- for (var i = 0; i < webKitStyles.length; i++) {
- var inputValue = inputStyles[webKitStyles[i]], currentValue = dom.getStyle(node, webKitStyles[i], true);
-
- if (/color/.test(webKitStyles[i])) {
- inputValue = dom.toHex(inputValue);
- currentValue = dom.toHex(currentValue);
- }
-
- if (currentValue != inputValue) {
- outputStyles[webKitStyles[i]] = inputValue;
- }
- }
-
- outputStyles = dom.serializeStyle(outputStyles, 'span');
- if (outputStyles) {
- return before + ' style="' + outputStyles + '"' + after;
- }
+ var Clipboard = function (editor, pasteFormat) {
+ var pasteBin = PasteBin(editor);
+ editor.on('preInit', function () {
+ return registerEventsAndFilters(editor, pasteBin, pasteFormat);
+ });
+ return {
+ pasteFormat: pasteFormat,
+ pasteHtml: function (html, internalFlag) {
+ return pasteHtml$1(editor, html, internalFlag);
+ },
+ pasteText: function (text) {
+ return pasteText(editor, text);
+ },
+ pasteImageData: function (e, rng) {
+ return pasteImageData(editor, e, rng);
+ },
+ getDataTransferItems: getDataTransferItems,
+ hasHtmlOrText: hasHtmlOrText,
+ hasContentType: hasContentType
+ };
+ };
- return before + after;
- });
- } else {
- // Remove all external styles
- content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, '$1$3');
+ var noop = function () {
+ };
+ var hasWorkingClipboardApi = function (clipboardData) {
+ return global$1.iOS === false && clipboardData !== undefined && typeof clipboardData.setData === 'function' && $_4bi2o9j0jjgwecui.isMsEdge() !== true;
+ };
+ var setHtml5Clipboard = function (clipboardData, html, text) {
+ if (hasWorkingClipboardApi(clipboardData)) {
+ try {
+ clipboardData.clearData();
+ clipboardData.setData('text/html', html);
+ clipboardData.setData('text/plain', text);
+ clipboardData.setData($_4x13hjirjjgwecu1.internalHtmlMime(), html);
+ return true;
+ } catch (e) {
+ return false;
}
-
- // Keep internal styles
- content = content.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi, function (all, before, value, after) {
- return before + ' style="' + value + '"' + after;
- });
-
- return content;
+ } else {
+ return false;
}
-
- function removeUnderlineAndFontInAnchor(editor, root) {
- editor.$('a', root).find('font,u').each(function (i, node) {
- editor.dom.remove(node, true);
- });
+ };
+ var setClipboardData = function (evt, data, fallback, done) {
+ if (setHtml5Clipboard(evt.clipboardData, data.html, data.text)) {
+ evt.preventDefault();
+ done();
+ } else {
+ fallback(data.html, done);
}
-
- var setup = function (editor) {
- if (Env.webkit) {
- addPreProcessFilter(editor, removeWebKitStyles);
- }
-
- if (Env.ie) {
- addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks);
- addPostProcessFilter(editor, removeUnderlineAndFontInAnchor);
- }
+ };
+ var fallback = function (editor) {
+ return function (html, done) {
+ var markedHtml = $_4x13hjirjjgwecu1.mark(html);
+ var outer = editor.dom.create('div', {
+ 'contenteditable': 'false',
+ 'data-mce-bogus': 'all'
+ });
+ var inner = editor.dom.create('div', { contenteditable: 'true' }, markedHtml);
+ editor.dom.setStyles(outer, {
+ position: 'fixed',
+ top: '0',
+ left: '-3000px',
+ width: '1000px',
+ overflow: 'hidden'
+ });
+ outer.appendChild(inner);
+ editor.dom.add(editor.getBody(), outer);
+ var range = editor.selection.getRng();
+ inner.focus();
+ var offscreenRange = editor.dom.createRng();
+ offscreenRange.selectNodeContents(inner);
+ editor.selection.setRng(offscreenRange);
+ setTimeout(function () {
+ editor.selection.setRng(range);
+ outer.parentNode.removeChild(outer);
+ done();
+ }, 0);
};
-
+ };
+ var getData = function (editor) {
return {
- setup: setup
+ html: editor.selection.getContent({ contextual: true }),
+ text: editor.selection.getContent({ format: 'text' })
};
- }
-);
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class contains all core logic for the paste plugin.
- *
- * @class tinymce.paste.Plugin
- * @private
- */
-define(
- 'tinymce.plugins.paste.Plugin',
- [
- 'tinymce.core.PluginManager',
- 'tinymce.plugins.paste.api.Events',
- 'tinymce.plugins.paste.core.Clipboard',
- 'tinymce.plugins.paste.core.CutCopy',
- 'tinymce.plugins.paste.core.Quirks'
- ],
- function (PluginManager, Events, Clipboard, CutCopy, Quirks) {
- var userIsInformed;
-
- PluginManager.add('paste', function (editor) {
- var self = this, clipboard, settings = editor.settings;
-
- function isUserInformedAboutPlainText() {
- return userIsInformed || editor.settings.paste_plaintext_inform === false;
+ };
+ var cut = function (editor) {
+ return function (evt) {
+ if (editor.selection.isCollapsed() === false) {
+ setClipboardData(evt, getData(editor), fallback(editor), function () {
+ setTimeout(function () {
+ editor.execCommand('Delete');
+ }, 0);
+ });
}
+ };
+ };
+ var copy = function (editor) {
+ return function (evt) {
+ if (editor.selection.isCollapsed() === false) {
+ setClipboardData(evt, getData(editor), fallback(editor), noop);
+ }
+ };
+ };
+ var register$1 = function (editor) {
+ editor.on('cut', cut(editor));
+ editor.on('copy', copy(editor));
+ };
+ var $_32blojj3jjgwecv4 = { register: register$1 };
- function togglePlainTextPaste() {
- if (clipboard.pasteFormat == "text") {
- clipboard.pasteFormat = "html";
- Events.firePastePlainTextToggle(editor, false);
- } else {
- clipboard.pasteFormat = "text";
- Events.firePastePlainTextToggle(editor, true);
-
- if (!isUserInformedAboutPlainText()) {
- var message = editor.translate('Paste is now in plain text mode. Contents will now ' +
- 'be pasted as plain text until you toggle this option off.');
-
- editor.notificationManager.open({
- text: message,
- type: 'info'
- });
+ var global$10 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');
- userIsInformed = true;
- }
+ var getCaretRangeFromEvent = function (editor, e) {
+ return global$10.getCaretRangeFromPoint(e.clientX, e.clientY, editor.getDoc());
+ };
+ var isPlainTextFileUrl = function (content) {
+ var plainTextContent = content['text/plain'];
+ return plainTextContent ? plainTextContent.indexOf('file://') === 0 : false;
+ };
+ var setFocusedRange = function (editor, rng) {
+ editor.focus();
+ editor.selection.setRng(rng);
+ };
+ var setup = function (editor, clipboard, draggingInternallyState) {
+ if ($_xr8b0ikjjgwectl.shouldBlockDrop(editor)) {
+ editor.on('dragend dragover draggesture dragdrop drop drag', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ });
+ }
+ if (!$_xr8b0ikjjgwectl.shouldPasteDataImages(editor)) {
+ editor.on('drop', function (e) {
+ var dataTransfer = e.dataTransfer;
+ if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {
+ e.preventDefault();
}
-
- editor.focus();
+ });
+ }
+ editor.on('drop', function (e) {
+ var dropContent, rng;
+ rng = getCaretRangeFromEvent(editor, e);
+ if (e.isDefaultPrevented() || draggingInternallyState.get()) {
+ return;
}
-
- function stateChange() {
- var self = this;
-
- self.active(clipboard.pasteFormat === 'text');
-
- editor.on('PastePlainTextToggle', function (e) {
- self.active(e.state);
- });
+ dropContent = clipboard.getDataTransferItems(e.dataTransfer);
+ var internal = clipboard.hasContentType(dropContent, $_4x13hjirjjgwecu1.internalHtmlMime());
+ if ((!clipboard.hasHtmlOrText(dropContent) || isPlainTextFileUrl(dropContent)) && clipboard.pasteImageData(e, rng)) {
+ return;
}
-
- // draw back if power version is requested and registered
- if (/(^|[ ,])powerpaste([, ]|$)/.test(settings.plugins) && PluginManager.get('powerpaste')) {
- /*eslint no-console:0 */
- if (typeof console !== "undefined" && console.log) {
- console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option.");
+ if (rng && $_xr8b0ikjjgwectl.shouldFilterDrop(editor)) {
+ var content_1 = dropContent['mce-internal'] || dropContent['text/html'] || dropContent['text/plain'];
+ if (content_1) {
+ e.preventDefault();
+ global$2.setEditorTimeout(editor, function () {
+ editor.undoManager.transact(function () {
+ if (dropContent['mce-internal']) {
+ editor.execCommand('Delete');
+ }
+ setFocusedRange(editor, rng);
+ content_1 = $_4bi2o9j0jjgwecui.trimHtml(content_1);
+ if (!dropContent['text/html']) {
+ clipboard.pasteText(content_1);
+ } else {
+ clipboard.pasteHtml(content_1, internal);
+ }
+ });
+ });
}
- return;
}
-
- self.clipboard = clipboard = new Clipboard(editor);
- self.quirks = Quirks.setup(editor);
-
- if (editor.settings.paste_as_text) {
- self.clipboard.pasteFormat = "text";
+ });
+ editor.on('dragstart', function (e) {
+ draggingInternallyState.set(true);
+ });
+ editor.on('dragover dragend', function (e) {
+ if ($_xr8b0ikjjgwectl.shouldPasteDataImages(editor) && draggingInternallyState.get() === false) {
+ e.preventDefault();
+ setFocusedRange(editor, getCaretRangeFromEvent(editor, e));
}
-
- if (settings.paste_preprocess) {
- editor.on('PastePreProcess', function (e) {
- settings.paste_preprocess.call(self, self, e);
- });
+ if (e.type === 'dragend') {
+ draggingInternallyState.set(false);
}
+ });
+ };
+ var $_b4etj0j4jjgwecv7 = { setup: setup };
- if (settings.paste_postprocess) {
- editor.on('PastePostProcess', function (e) {
- settings.paste_postprocess.call(self, self, e);
- });
- }
+ var setup$1 = function (editor) {
+ var plugin = editor.plugins.paste;
+ var preProcess = $_xr8b0ikjjgwectl.getPreProcess(editor);
+ if (preProcess) {
+ editor.on('PastePreProcess', function (e) {
+ preProcess.call(plugin, plugin, e);
+ });
+ }
+ var postProcess = $_xr8b0ikjjgwectl.getPostProcess(editor);
+ if (postProcess) {
+ editor.on('PastePostProcess', function (e) {
+ postProcess.call(plugin, plugin, e);
+ });
+ }
+ };
+ var $_c5bihmj6jjgwecva = { setup: setup$1 };
- editor.addCommand('mceInsertClipboardContent', function (ui, value) {
- if (value.content) {
- self.clipboard.pasteHtml(value.content, value.internal);
+ function addPreProcessFilter(editor, filterFunc) {
+ editor.on('PastePreProcess', function (e) {
+ e.content = filterFunc(editor, e.content, e.internal, e.wordContent);
+ });
+ }
+ function addPostProcessFilter(editor, filterFunc) {
+ editor.on('PastePostProcess', function (e) {
+ filterFunc(editor, e.node);
+ });
+ }
+ function removeExplorerBrElementsAfterBlocks(editor, html) {
+ if (!$_dfatuiivjjgwecu8.isWordContent(html)) {
+ return html;
+ }
+ var blockElements = [];
+ global$3.each(editor.schema.getBlockElements(), function (block, blockName) {
+ blockElements.push(blockName);
+ });
+ var explorerBlocksRegExp = new RegExp('(?:<br> [\\s\\r\\n]+|<br>)*(<\\/?(' + blockElements.join('|') + ')[^>]*>)(?:<br> [\\s\\r\\n]+|<br>)*', 'g');
+ html = $_4bi2o9j0jjgwecui.filter(html, [[
+ explorerBlocksRegExp,
+ '$1'
+ ]]);
+ html = $_4bi2o9j0jjgwecui.filter(html, [
+ [
+ /<br><br>/g,
+ '<BR><BR>'
+ ],
+ [
+ /<br>/g,
+ ' '
+ ],
+ [
+ /<BR><BR>/g,
+ '<br>'
+ ]
+ ]);
+ return html;
+ }
+ function removeWebKitStyles(editor, content, internal, isWordHtml) {
+ if (isWordHtml || internal) {
+ return content;
+ }
+ var webKitStylesSetting = $_xr8b0ikjjgwectl.getWebkitStyles(editor);
+ var webKitStyles;
+ if ($_xr8b0ikjjgwectl.shouldRemoveWebKitStyles(editor) === false || webKitStylesSetting === 'all') {
+ return content;
+ }
+ if (webKitStylesSetting) {
+ webKitStyles = webKitStylesSetting.split(/[, ]/);
+ }
+ if (webKitStyles) {
+ var dom_1 = editor.dom, node_1 = editor.selection.getNode();
+ content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, function (all, before, value, after) {
+ var inputStyles = dom_1.parseStyle(dom_1.decode(value));
+ var outputStyles = {};
+ if (webKitStyles === 'none') {
+ return before + after;
}
-
- if (value.text) {
- self.clipboard.pasteText(value.text);
+ for (var i = 0; i < webKitStyles.length; i++) {
+ var inputValue = inputStyles[webKitStyles[i]], currentValue = dom_1.getStyle(node_1, webKitStyles[i], true);
+ if (/color/.test(webKitStyles[i])) {
+ inputValue = dom_1.toHex(inputValue);
+ currentValue = dom_1.toHex(currentValue);
+ }
+ if (currentValue !== inputValue) {
+ outputStyles[webKitStyles[i]] = inputValue;
+ }
}
+ outputStyles = dom_1.serializeStyle(outputStyles, 'span');
+ if (outputStyles) {
+ return before + ' style="' + outputStyles + '"' + after;
+ }
+ return before + after;
});
+ } else {
+ content = content.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi, '$1$3');
+ }
+ content = content.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi, function (all, before, value, after) {
+ return before + ' style="' + value + '"' + after;
+ });
+ return content;
+ }
+ function removeUnderlineAndFontInAnchor(editor, root) {
+ editor.$('a', root).find('font,u').each(function (i, node) {
+ editor.dom.remove(node, true);
+ });
+ }
+ var setup$2 = function (editor) {
+ if (global$1.webkit) {
+ addPreProcessFilter(editor, removeWebKitStyles);
+ }
+ if (global$1.ie) {
+ addPreProcessFilter(editor, removeExplorerBrElementsAfterBlocks);
+ addPostProcessFilter(editor, removeUnderlineAndFontInAnchor);
+ }
+ };
+ var $_36tmgyj7jjgwecvc = { setup: setup$2 };
- // Block all drag/drop events
- if (editor.settings.paste_block_drop) {
- editor.on('dragend dragover draggesture dragdrop drop drag', function (e) {
- e.preventDefault();
- e.stopPropagation();
- });
- }
-
- // Prevent users from dropping data images on Gecko
- if (!editor.settings.paste_data_images) {
- editor.on('drop', function (e) {
- var dataTransfer = e.dataTransfer;
-
- if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {
- e.preventDefault();
- }
- });
+ var curry = function (f) {
+ var x = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ x[_i - 1] = arguments[_i];
+ }
+ var args = new Array(arguments.length - 1);
+ for (var i = 1; i < arguments.length; i++)
+ args[i - 1] = arguments[i];
+ return function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
}
+ var newArgs = new Array(arguments.length);
+ for (var j = 0; j < newArgs.length; j++)
+ newArgs[j] = arguments[j];
+ var all = args.concat(newArgs);
+ return f.apply(null, all);
+ };
+ };
- editor.addCommand('mceTogglePlainTextPaste', togglePlainTextPaste);
-
- editor.addButton('pastetext', {
- icon: 'pastetext',
- tooltip: 'Paste as text',
- onclick: togglePlainTextPaste,
- onPostRender: stateChange
- });
-
- editor.addMenuItem('pastetext', {
- text: 'Paste as text',
- selectable: true,
- active: clipboard.pasteFormat,
- onclick: togglePlainTextPaste,
- onPostRender: stateChange
- });
-
- CutCopy.register(editor);
+ var stateChange = function (editor, clipboard, e) {
+ var ctrl = e.control;
+ ctrl.active(clipboard.pasteFormat.get() === 'text');
+ editor.on('PastePlainTextToggle', function (e) {
+ ctrl.active(e.state);
});
-
- return function () { };
+ };
+ var register$2 = function (editor, clipboard) {
+ var postRender = curry(stateChange, editor, clipboard);
+ editor.addButton('pastetext', {
+ active: false,
+ icon: 'pastetext',
+ tooltip: 'Paste as text',
+ cmd: 'mceTogglePlainTextPaste',
+ onPostRender: postRender
+ });
+ editor.addMenuItem('pastetext', {
+ text: 'Paste as text',
+ selectable: true,
+ active: clipboard.pasteFormat,
+ cmd: 'mceTogglePlainTextPaste',
+ onPostRender: postRender
+ });
+ };
+ var $_g9yhwdj8jjgwecvf = { register: register$2 };
+
+ global.add('paste', function (editor) {
+ if ($_15bf6siejjgwect1.hasProPlugin(editor) === false) {
+ var userIsInformedState = Cell(false);
+ var draggingInternallyState = Cell(false);
+ var pasteFormat = Cell($_xr8b0ikjjgwectl.isPasteAsTextEnabled(editor) ? 'text' : 'html');
+ var clipboard = Clipboard(editor, pasteFormat);
+ var quirks = $_36tmgyj7jjgwecvc.setup(editor);
+ $_g9yhwdj8jjgwecvf.register(editor, clipboard);
+ $_fldd1mihjjgwecth.register(editor, clipboard, userIsInformedState);
+ $_c5bihmj6jjgwecva.setup(editor);
+ $_32blojj3jjgwecv4.register(editor);
+ $_b4etj0j4jjgwecv7.setup(editor, clipboard, draggingInternallyState);
+ return $_6gtliyigjjgwecte.get(clipboard, quirks);
+ }
+ });
+ function Plugin () {
}
-);
-dem('tinymce.plugins.paste.Plugin')();
+
+ return Plugin;
+
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("6",tinymce.util.Tools.resolve),g("1",["6"],function(a){return a("tinymce.PluginManager")}),g("2",[],function(){var a=function(a,b,c,d){return a.fire("PastePreProcess",{content:b,internal:c,wordContent:d})},b=function(a,b,c,d){return a.fire("PastePostProcess",{node:b,internal:c,wordContent:d})},c=function(a,b){return a.fire("PastePlainTextToggle",{state:b})};return{firePastePreProcess:a,firePastePostProcess:b,firePastePlainTextToggle:c}}),g("7",["6"],function(a){return a("tinymce.dom.RangeUtils")}),g("8",["6"],function(a){return a("tinymce.Env")}),g("9",["6"],function(a){return a("tinymce.util.Delay")}),g("a",["6"],function(a){return a("tinymce.util.Tools")}),g("b",["6"],function(a){return a("tinymce.util.VK")}),g("c",[],function(){var a="x-tinymce/html",b="<!-- "+a+" -->",c=function(a){return b+a},d=function(a){return a.replace(b,"")},e=function(a){return a.indexOf(b)!==-1};return{mark:c,unmark:d,isMarked:e,internalHtmlMime:function(){return a}}}),g("j",["6"],function(a){return a("tinymce.html.Entities")}),g("d",["a","j"],function(a,b){var c=function(a){return!/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(a)},d=function(a){return a.replace(/\r?\n/g,"<br>")},e=function(a,c){var d,e=[],f="<"+a;if("object"==typeof c){for(d in c)c.hasOwnProperty(d)&&e.push(d+'="'+b.encodeAllRaw(c[d])+'"');e.length&&(f+=" "+e.join(" "))}return f+">"},f=function(b,c,d){var f=b.split(/\n\n/),g=e(c,d),h="</"+c+">",i=a.map(f,function(a){return a.split(/\n/).join("<br />")}),j=function(a){return g+a+h};return 1===i.length?i[0]:a.map(i,j).join("")},g=function(a,b,c){return b?f(a,b,c):d(a)};return{isPlainText:c,convert:g,toBRs:d,toBlockElements:f}}),g("e",["a","8"],function(a,b){return function(c){var d,e="%MCEPASTEBIN%",f=function(){function a(a){var b,c,e,f=a.startContainer;if(b=a.getClientRects(),b.length)return b[0];if(a.collapsed&&1==f.nodeType){for(e=f.childNodes[d.startOffset];e&&3==e.nodeType&&!e.data.length;)e=e.nextSibling;if(e)return"BR"==e.tagName&&(c=h.doc.createTextNode("\ufeff"),e.parentNode.insertBefore(c,e),a=h.createRng(),a.setStartBefore(c),a.setEndAfter(c),b=a.getClientRects(),h.remove(c)),b.length?b[0]:void 0}}var f,g,h=c.dom,i=c.getBody(),j=c.dom.getViewPort(c.getWin()),k=j.y,l=20;if(d=c.selection.getRng(),c.inline&&(g=c.selection.getScrollContainer(),g&&g.scrollTop>0&&(k=g.scrollTop)),d.getClientRects){var m=a(d);if(m)l=k+(m.top-h.getPos(i).y);else{l=k;var n=d.startContainer;n&&(3==n.nodeType&&n.parentNode!=i&&(n=n.parentNode),1==n.nodeType&&(l=h.getPos(n,g||i).y))}}f=c.dom.add(c.getBody(),"div",{id:"mcepastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: absolute; top: "+l+"px; width: 10px; height: 10px; overflow: hidden; opacity: 0"},e),(b.ie||b.gecko)&&h.setStyle(f,"left","rtl"==h.getStyle(i,"direction",!0)?65535:-65535),h.bind(f,"beforedeactivate focusin focusout",function(a){a.stopPropagation()}),f.focus(),c.selection.select(f,!0)},g=function(){if(h()){for(var a;a=c.dom.get("mcepastebin");)c.dom.remove(a),c.dom.unbind(a);d&&c.selection.setRng(d)}d=null},h=function(){return c.dom.get("mcepastebin")},i=function(){var b,d,e,f,g,h=function(a,b){a.appendChild(b),c.dom.remove(b,!0)};for(d=a.grep(c.getBody().childNodes,function(a){return"mcepastebin"===a.id}),b=d.shift(),a.each(d,function(a){h(b,a)}),f=c.dom.select("div[id=mcepastebin]",b),e=f.length-1;e>=0;e--)g=c.dom.create("div"),b.insertBefore(g,f[e]),h(g,f[e]);return b?b.innerHTML:""},j=function(){return d},k=function(a){return a===e},l=function(a){return a&&"mcepastebin"===a.id},m=function(){var a=h();return l(a)&&k(a.innerHTML)};return{create:f,remove:g,getEl:h,getHtml:i,getLastRng:j,isDefault:m,isDefaultContent:k}}}),g("k",["6"],function(a){return a("tinymce.html.DomParser")}),g("l",["6"],function(a){return a("tinymce.html.Schema")}),g("m",["6"],function(a){return a("tinymce.html.Serializer")}),g("n",["6"],function(a){return a("tinymce.html.Node")}),g("h",["a","k","l"],function(a,b,c){function d(b,c){return a.each(c,function(a){b=a.constructor==RegExp?b.replace(a,""):b.replace(a[0],a[1])}),b}function e(e){function f(a){var b=a.name,c=a;if("br"===b)return void(i+="\n");if(j[b]&&(i+=" "),k[b])return void(i+=" ");if(3==a.type&&(i+=a.value),!a.shortEnded&&(a=a.firstChild))do f(a);while(a=a.next);l[b]&&c.next&&(i+="\n","p"==b&&(i+="\n"))}var g=new c,h=new b({},g),i="",j=g.getShortEndedElements(),k=a.makeMap("script noscript style textarea video audio iframe object"," "),l=g.getBlockElements();return e=d(e,[/<!\[[^\]]+\]>/g]),f(h.parse(e)),i}function f(a){function b(a,b,c){return b||c?"\xa0":" "}return a=d(a,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/gi,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,b],/<br class="Apple-interchange-newline">/g,/<br>$/i])}function g(a){var b=0;return function(){return a+b++}}var h=function(){return navigator.userAgent.indexOf(" Edge/")!==-1};return{filter:d,innerText:e,trimHtml:f,createIdGenerator:g,isMsEdge:h}}),g("i",["a","k","l","m","n","h"],function(a,b,c,d,e,f){function g(a){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(a)||/class="OutlineElement/.test(a)||/id="?docs\-internal\-guid\-/.test(a)}function h(b){var c,d;return d=[/^[IVXLMCD]{1,2}\.[ \u00a0]/,/^[ivxlmcd]{1,2}\.[ \u00a0]/,/^[a-z]{1,2}[\.\)][ \u00a0]/,/^[A-Z]{1,2}[\.\)][ \u00a0]/,/^[0-9]+\.[ \u00a0]/,/^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,/^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/],b=b.replace(/^[\u00a0 ]+/,""),a.each(d,function(a){if(a.test(b))return c=!0,!1}),c}function i(a){return/^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(a)}function j(a){function b(a){var c="";if(3===a.type)return a.value;if(a=a.firstChild)do c+=b(a);while(a=a.next);return c}function c(a,b){if(3===a.type&&b.test(a.value))return a.value=a.value.replace(b,""),!1;if(a=a.firstChild)do if(!c(a,b))return!1;while(a=a.next);return!0}function d(a){if(a._listIgnore)return void a.remove();if(a=a.firstChild)do d(a);while(a=a.next)}function f(a,b,f){var h=a._listLevel||k;h!=k&&(h<k?g&&(g=g.parent.parent):(j=g,g=null)),g&&g.name==b?g.append(a):(j=j||g,g=new e(b,1),f>1&&g.attr("start",""+f),a.wrap(g)),a.name="li",h>k&&j&&j.lastChild.append(g),k=h,d(a),c(a,/^\u00a0+/),c(a,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),c(a,/^\u00a0+/)}for(var g,j,k=1,l=[],m=a.firstChild;"undefined"!=typeof m&&null!==m;)if(l.push(m),m=m.walk(),null!==m)for(;"undefined"!=typeof m&&m.parent!==a;)m=m.walk();for(var n=0;n<l.length;n++)if(a=l[n],"p"==a.name&&a.firstChild){var o=b(a);if(i(o)){f(a,"ul");continue}if(h(o)){var p=/([0-9]+)\./.exec(o),q=1;p&&(q=parseInt(p[1],10)),f(a,"ol",q);continue}if(a._listLevel){f(a,"ul",1);continue}g=null}else j=g,g=null}function k(b,c,d,f){var g,h={},i=b.dom.parseStyle(f);return a.each(i,function(a,e){switch(e){case"mso-list":g=/\w+ \w+([0-9]+)/i.exec(f),g&&(d._listLevel=parseInt(g[1],10)),/Ignore/i.test(a)&&d.firstChild&&(d._listIgnore=!0,d.firstChild._listIgnore=!0);break;case"horiz-align":e="text-align";break;case"vert-align":e="vertical-align";break;case"font-color":case"mso-foreground":e="color";break;case"mso-background":case"mso-highlight":e="background";break;case"font-weight":case"font-style":return void("normal"!=a&&(h[e]=a));case"mso-element":if(/^(comment|comment-list)$/i.test(a))return void d.remove()}return 0===e.indexOf("mso-comment")?void d.remove():void(0!==e.indexOf("mso-")&&("all"==b.settings.paste_retain_style_properties||c&&c[e])&&(h[e]=a))}),/(bold)/i.test(h["font-weight"])&&(delete h["font-weight"],d.wrap(new e("b",1))),/(italic)/i.test(h["font-style"])&&(delete h["font-style"],d.wrap(new e("i",1))),h=b.dom.serializeStyle(h,d.name),h?h:null}var l=function(e,g){var h,i;h=e.settings.paste_retain_style_properties,h&&(i=a.makeMap(h.split(/[, ]/))),g=f.filter(g,[/<br class="?Apple-interchange-newline"?>/gi,/<b[^>]+id="?docs-internal-[^>]*>/gi,/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(a,b){return b.length>0?b.replace(/./," ").slice(Math.floor(b.length/2)).split("").join("\xa0"):""}]]);var l=e.settings.paste_word_valid_elements;l||(l="-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody");var m=new c({valid_elements:l,valid_children:"-li[p]"});a.each(m.elements,function(a){a.attributes["class"]||(a.attributes["class"]={},a.attributesOrder.push("class")),a.attributes.style||(a.attributes.style={},a.attributesOrder.push("style"))});var n=new b({},m);n.addAttributeFilter("style",function(a){for(var b,c=a.length;c--;)b=a[c],b.attr("style",k(e,i,b,b.attr("style"))),"span"==b.name&&b.parent&&!b.attributes.length&&b.unwrap()}),n.addAttributeFilter("class",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(c)&&b.remove(),b.attr("class",null)}),n.addNodeFilter("del",function(a){for(var b=a.length;b--;)a[b].remove()}),n.addNodeFilter("a",function(a){for(var b,c,d,e=a.length;e--;)if(b=a[e],c=b.attr("href"),d=b.attr("name"),c&&c.indexOf("#_msocom_")!=-1)b.remove();else if(c&&0===c.indexOf("file://")&&(c=c.split("#")[1],c&&(c="#"+c)),c||d){if(d&&!/^_?(?:toc|edn|ftn)/i.test(d)){b.unwrap();continue}b.attr({href:c,name:d})}else b.unwrap()});var o=n.parse(g);return e.settings.paste_convert_word_fake_lists!==!1&&j(o),g=new d({validate:e.settings.validate},m).serialize(o)},m=function(a,b){return a.settings.paste_enable_default_filters===!1?b:l(a,b)};return{preProcess:m,isWordContent:g}}),g("f",["2","i"],function(a,b){var c=function(a,b){return{content:a,cancelled:b}},d=function(b,d,e,f){var g=b.dom.create("div",{style:"display:none"},d),h=a.firePastePostProcess(b,g,e,f);return c(h.node.innerHTML,h.isDefaultPrevented())},e=function(b,e,f,g){var h=a.firePastePreProcess(b,e,f,g);return b.hasEventListeners("PastePostProcess")&&!h.isDefaultPrevented()?d(b,h.content,f,g):c(h.content,h.isDefaultPrevented())},f=function(a,c,d){var f=b.isWordContent(c),g=f?b.preProcess(a,c):c;return e(a,g,d,f)};return{process:f}}),g("g",["a"],function(a){var b=function(a){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(a)},c=function(a){return b(a)&&/.(gif|jpe?g|png)$/.test(a)},d=function(a,b,c){return a.undoManager.extra(function(){c(a,b)},function(){a.insertContent('<img src="'+b+'">')}),!0},e=function(a,b,c){return a.undoManager.extra(function(){c(a,b)},function(){a.execCommand("mceInsertLink",!1,b)}),!0},f=function(a,c,d){return!(a.selection.isCollapsed()!==!1||!b(c))&&e(a,c,d)},g=function(a,b,e){return!!c(b)&&d(a,b,e)},h=function(a,b){return a.insertContent(b,{merge:a.settings.paste_merge_formats!==!1,paste:!0}),!0},i=function(b,c){a.each([f,g,h],function(a){return a(b,c,h)!==!0})},j=function(a,b){a.settings.smart_paste===!1?h(a,b):i(a,b)};return{isImageUrl:c,isAbsoluteUrl:b,insertContent:j}}),g("3",["7","8","9","a","b","c","d","e","f","g","h"],function(a,b,c,d,e,f,g,h,i,j,k){return function(l){function m(a,b){var c=b?b:f.isMarked(a),d=i.process(l,f.unmark(a),c);d.cancelled===!1&&j.insertContent(l,d.content)}function n(a){a=l.dom.encode(a).replace(/\r\n/g,"\n"),a=g.convert(a,l.settings.forced_root_block,l.settings.forced_root_block_attrs),m(a,!1)}function o(a){var b={};if(a){if(a.getData){var c=a.getData("Text");c&&c.length>0&&c.indexOf(G)==-1&&(b["text/plain"]=c)}if(a.types)for(var d=0;d<a.types.length;d++){var e=a.types[d];try{b[e]=a.getData(e)}catch(a){b[e]=""}}}return b}function p(a){var b=o(a.clipboardData||l.getDoc().dataTransfer);return k.isMsEdge()?d.extend(b,{"text/html":""}):b}function q(a){return y(a,"text/html")||y(a,"text/plain")}function r(a){var b;return b=a.indexOf(","),b!==-1?a.substr(b+1):null}function s(a,b){return!a.images_dataimg_filter||a.images_dataimg_filter(b)}function t(a){var b=a.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i);return b?l.dom.encode(b[1]):null}function u(a,b,c){a&&(l.selection.setRng(a),a=null);var d=b.result,e=r(d),f=H(),g=l.settings.images_reuse_filename&&c.name?t(c.name):f,h=new Image;if(h.src=d,s(l.settings,h)){var i,j,k=l.editorUpload.blobCache;j=k.findFirst(function(a){return a.base64()===e}),j?i=j:(i=k.create(f,c,e,g),k.add(i)),m('<img src="'+i.blobUri()+'">',!1)}else m('<img src="'+d+'">',!1)}function v(a,b){function c(c){var d,e,f,g=!1;if(c)for(d=0;d<c.length;d++)if(e=c[d],/^image\/(jpeg|png|gif|bmp)$/.test(e.type)){var h=e.getAsFile?e.getAsFile():e;f=new FileReader,f.onload=u.bind(null,b,f,h),f.readAsDataURL(h),a.preventDefault(),g=!0}return g}var d=a.clipboardData||a.dataTransfer;if(l.settings.paste_data_images&&d)return c(d.items)||c(d.files)}function w(a){var b=a.clipboardData;return navigator.userAgent.indexOf("Android")!=-1&&b&&b.items&&0===b.items.length}function x(b){return a.getCaretRangeFromPoint(b.clientX,b.clientY,l.getDoc())}function y(a,b){return b in a&&a[b].length>0}function z(a){return e.metaKeyPressed(a)&&86==a.keyCode||a.shiftKey&&45==a.keyCode}function A(){function a(a,b,c,d){var e,h;return y(a,"text/html")?e=a["text/html"]:(e=F.getHtml(),d=d?d:f.isMarked(e),F.isDefaultContent(e)&&(c=!0)),e=k.trimHtml(e),F.remove(),h=d===!1&&g.isPlainText(e),e.length&&!h||(c=!0),c&&(e=y(a,"text/plain")&&h?a["text/plain"]:k.innerText(e)),F.isDefaultContent(e)?void(b||l.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.")):void(c?n(e):m(e,d))}function d(a){var b=a["text/plain"];return!!b&&0===b.indexOf("file://")}l.on("keydown",function(a){function c(a){z(a)&&!a.isDefaultPrevented()&&F.remove()}if(z(a)&&!a.isDefaultPrevented()){if(B=a.shiftKey&&86==a.keyCode,B&&b.webkit&&navigator.userAgent.indexOf("Version/")!=-1)return;if(a.stopImmediatePropagation(),D=(new Date).getTime(),b.ie&&B)return a.preventDefault(),void l.fire("paste",{ieFake:!0});F.remove(),F.create(),l.once("keyup",c),l.once("paste",function(){l.off("keyup",c)})}});var e=function(){return F.getLastRng()||l.selection.getRng()};l.on("paste",function(d){var g=(new Date).getTime(),h=p(d),i=(new Date).getTime()-g,j=(new Date).getTime()-D-i<1e3,k="text"==C.pasteFormat||B,m=y(h,f.internalHtmlMime());return B=!1,d.isDefaultPrevented()||w(d)?void F.remove():!q(h)&&v(d,e())?void F.remove():(j||d.preventDefault(),!b.ie||j&&!d.ieFake||y(h,"text/html")||(F.create(),l.dom.bind(F.getEl(),"paste",function(a){a.stopPropagation()}),l.getDoc().execCommand("Paste",!1,null),h["text/html"]=F.getHtml()),void(y(h,"text/html")?(d.preventDefault(),m||(m=f.isMarked(h["text/html"])),a(h,j,k,m)):c.setEditorTimeout(l,function(){a(h,j,k,m)},0)))}),l.on("dragstart dragend",function(a){E="dragstart"==a.type}),l.on("drop",function(a){var b,e;if(e=x(a),!a.isDefaultPrevented()&&!E){b=o(a.dataTransfer);var g=y(b,f.internalHtmlMime());if((q(b)&&!d(b)||!v(a,e))&&e&&l.settings.paste_filter_drop!==!1){var h=b["mce-internal"]||b["text/html"]||b["text/plain"];h&&(a.preventDefault(),c.setEditorTimeout(l,function(){l.undoManager.transact(function(){b["mce-internal"]&&l.execCommand("Delete"),l.selection.setRng(e),h=k.trimHtml(h),b["text/html"]?m(h,g):n(h)})}))}}}),l.on("dragover dragend",function(a){l.settings.paste_data_images&&a.preventDefault()})}var B,C=this,D=0,E=!1,F=new h(l),G="data:text/mce-internal,",H=k.createIdGenerator("mceclip");C.pasteHtml=m,C.pasteText=n,C.pasteImageData=v,l.on("preInit",function(){A(),l.parser.addNodeFilter("img",function(a,c,d){function e(a){return a.data&&a.data.paste===!0}function f(a){a.attr("data-mce-object")||j===b.transparentSrc||a.remove()}function g(a){return 0===a.indexOf("webkit-fake-url")}function h(a){return 0===a.indexOf("data:")}if(!l.settings.paste_data_images&&e(d))for(var i=a.length;i--;){var j=a[i].attributes.map.src;j&&(g(j)?f(a[i]):!l.settings.allow_html_data_urls&&h(j)&&f(a[i]))}})})}}),g("4",["8","c","h"],function(a,b,c){var d=function(){},e=function(b){return a.iOS===!1&&void 0!==b&&"function"==typeof b.setData&&c.isMsEdge()!==!0},f=function(a,c,d){if(!e(a))return!1;try{return a.clearData(),a.setData("text/html",c),a.setData("text/plain",d),a.setData(b.internalHtmlMime(),c),!0}catch(a){return!1}},g=function(a,b,c,d){f(a.clipboardData,b.html,b.text)?(a.preventDefault(),d()):c(b.html,d)},h=function(a){return function(c,d){var e=b.mark(c),f=a.dom.create("div",{contenteditable:"false","data-mce-bogus":"all"}),g=a.dom.create("div",{contenteditable:"true"},e);a.dom.setStyles(f,{position:"fixed",left:"-3000px",width:"1000px",overflow:"hidden"}),f.appendChild(g),a.dom.add(a.getBody(),f);var h=a.selection.getRng();g.focus();var i=a.dom.createRng();i.selectNodeContents(g),a.selection.setRng(i),setTimeout(function(){f.parentNode.removeChild(f),a.selection.setRng(h),d()},0)}},i=function(a){return{html:a.selection.getContent({contextual:!0}),text:a.selection.getContent({format:"text"})}},j=function(a){return function(b){a.selection.isCollapsed()===!1&&g(b,i(a),h(a),function(){setTimeout(function(){a.execCommand("Delete")},0)})}},k=function(a){return function(b){a.selection.isCollapsed()===!1&&g(b,i(a),h(a),d)}},l=function(a){a.on("cut",j(a)),a.on("copy",k(a))};return{register:l}}),g("5",["8","a","i","h"],function(a,b,c,d){function e(a,b){a.on("PastePreProcess",function(c){c.content=b(a,c.content,c.internal,c.wordContent)})}function f(a,b){a.on("PastePostProcess",function(c){b(a,c.node)})}function g(a,e){if(!c.isWordContent(e))return e;var f=[];b.each(a.schema.getBlockElements(),function(a,b){f.push(b)});var g=new RegExp("(?:<br> [\\s\\r\\n]+|<br>)*(<\\/?("+f.join("|")+")[^>]*>)(?:<br> [\\s\\r\\n]+|<br>)*","g");return e=d.filter(e,[[g,"$1"]]),e=d.filter(e,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function h(a,b,c,d){if(d||c)return b;var e=a.settings.paste_webkit_styles;if(a.settings.paste_remove_styles_if_webkit===!1||"all"==e)return b;if(e&&(e=e.split(/[, ]/)),e){var f=a.dom,g=a.selection.getNode();b=b.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(a,b,c,d){var h=f.parseStyle(f.decode(c),"span"),i={};if("none"===e)return b+d;for(var j=0;j<e.length;j++){var k=h[e[j]],l=f.getStyle(g,e[j],!0);/color/.test(e[j])&&(k=f.toHex(k),l=f.toHex(l)),l!=k&&(i[e[j]]=k)}return i=f.serializeStyle(i,"span"),i?b+' style="'+i+'"'+d:b+d})}else b=b.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return b=b.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(a,b,c,d){return b+' style="'+c+'"'+d})}function i(a,b){a.$("a",b).find("font,u").each(function(b,c){a.dom.remove(c,!0)})}var j=function(b){a.webkit&&e(b,h),a.ie&&(e(b,g),f(b,i))};return{setup:j}}),g("0",["1","2","3","4","5"],function(a,b,c,d,e){var f;return a.add("paste",function(g){function h(){return f||g.settings.paste_plaintext_inform===!1}function i(){if("text"==k.pasteFormat)k.pasteFormat="html",b.firePastePlainTextToggle(g,!1);else if(k.pasteFormat="text",b.firePastePlainTextToggle(g,!0),!h()){var a=g.translate("Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.");g.notificationManager.open({text:a,type:"info"}),f=!0}g.focus()}function j(){var a=this;a.active("text"===k.pasteFormat),g.on("PastePlainTextToggle",function(b){a.active(b.state)})}var k,l=this,m=g.settings;return/(^|[ ,])powerpaste([, ]|$)/.test(m.plugins)&&a.get("powerpaste")?void("undefined"!=typeof console&&console.log&&console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option.")):(l.clipboard=k=new c(g),l.quirks=e.setup(g),g.settings.paste_as_text&&(l.clipboard.pasteFormat="text"),m.paste_preprocess&&g.on("PastePreProcess",function(a){m.paste_preprocess.call(l,l,a)}),m.paste_postprocess&&g.on("PastePostProcess",function(a){m.paste_postprocess.call(l,l,a)}),g.addCommand("mceInsertClipboardContent",function(a,b){b.content&&l.clipboard.pasteHtml(b.content,b.internal),b.text&&l.clipboard.pasteText(b.text)}),g.settings.paste_block_drop&&g.on("dragend dragover draggesture dragdrop drop drag",function(a){a.preventDefault(),a.stopPropagation()}),g.settings.paste_data_images||g.on("drop",function(a){var b=a.dataTransfer;b&&b.files&&b.files.length>0&&a.preventDefault()}),g.addCommand("mceTogglePlainTextPaste",i),g.addButton("pastetext",{icon:"pastetext",tooltip:"Paste as text",onclick:i,onPostRender:j}),g.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:k.pasteFormat,onclick:i,onPostRender:j}),void d.register(g))}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var u=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return u(n())}}},t=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=function(e){return!(!/(^|[ ,])powerpaste([, ]|$)/.test(e.settings.plugins)||!t.get("powerpaste")||("undefined"!=typeof window.console&&window.console.log&&window.console.log("PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option."),0))},s=function(e,t){return{clipboard:e,quirks:t}},f=function(e,t,n,r){return e.fire("PastePreProcess",{content:t,internal:n,wordContent:r})},d=function(e,t,n,r){return e.fire("PastePostProcess",{node:t,internal:n,wordContent:r})},l=function(e,t){return e.fire("PastePlainTextToggle",{state:t})},n=function(e,t){return e.fire("paste",{ieFake:t})},m={shouldPlainTextInform:function(e){return e.getParam("paste_plaintext_inform",!0)},shouldBlockDrop:function(e){return e.getParam("paste_block_drop",!1)},shouldPasteDataImages:function(e){return e.getParam("paste_data_images",!1)},shouldFilterDrop:function(e){return e.getParam("paste_filter_drop",!0)},getPreProcess:function(e){return e.getParam("paste_preprocess")},getPostProcess:function(e){return e.getParam("paste_postprocess")},getWebkitStyles:function(e){return e.getParam("paste_webkit_styles")},shouldRemoveWebKitStyles:function(e){return e.getParam("paste_remove_styles_if_webkit",!0)},shouldMergeFormats:function(e){return e.getParam("paste_merge_formats",!0)},isSmartPasteEnabled:function(e){return e.getParam("smart_paste",!0)},isPasteAsTextEnabled:function(e){return e.getParam("paste_as_text",!1)},getRetainStyleProps:function(e){return e.getParam("paste_retain_style_properties")},getWordValidElements:function(e){return e.getParam("paste_word_valid_elements","-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody")},shouldConvertWordFakeLists:function(e){return e.getParam("paste_convert_word_fake_lists",!0)},shouldUseDefaultFilters:function(e){return e.getParam("paste_enable_default_filters",!0)}},r=function(e,t,n){var r,a,i;"text"===t.pasteFormat.get()?(t.pasteFormat.set("html"),l(e,!1)):(t.pasteFormat.set("text"),l(e,!0),i=e,!1===n.get()&&m.shouldPlainTextInform(i)&&(a="Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.",(r=e).notificationManager.open({text:r.translate(a),type:"info"}),n.set(!0))),e.focus()},c=function(e,n,t){e.addCommand("mceTogglePlainTextPaste",function(){r(e,n,t)}),e.addCommand("mceInsertClipboardContent",function(e,t){t.content&&n.pasteHtml(t.content,t.internal),t.text&&n.pasteText(t.text)})},v=tinymce.util.Tools.resolve("tinymce.Env"),h=tinymce.util.Tools.resolve("tinymce.util.Delay"),b=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=tinymce.util.Tools.resolve("tinymce.util.VK"),e="x-tinymce/html",i="\x3c!-- "+e+" --\x3e",p=function(e){return i+e},g=function(e){return e.replace(i,"")},y=function(e){return-1!==e.indexOf(i)},x=function(){return e},P=tinymce.util.Tools.resolve("tinymce.html.Entities"),w=function(e){return e.replace(/\r?\n/g,"<br>")},_=function(e,t,n){var r=e.split(/\n\n/),a=function(e,t){var n,r=[],a="<"+e;if("object"==typeof t){for(n in t)t.hasOwnProperty(n)&&r.push(n+'="'+P.encodeAllRaw(t[n])+'"');r.length&&(a+=" "+r.join(" "))}return a+">"}(t,n),i="</"+t+">",o=b.map(r,function(e){return e.split(/\n/).join("<br />")});return 1===o.length?o[0]:b.map(o,function(e){return a+e+i}).join("")},D=function(e){return!/<(?:\/?(?!(?:div|p|br|span)>)\w+|(?:(?!(?:span style="white-space:\s?pre;?">)|br\s?\/>))\w+\s[^>]+)>/i.test(e)},T=function(e,t,n){return t?_(e,t,n):w(e)},C=tinymce.util.Tools.resolve("tinymce.html.DomParser"),k=tinymce.util.Tools.resolve("tinymce.html.Node"),R=tinymce.util.Tools.resolve("tinymce.html.Schema"),F=tinymce.util.Tools.resolve("tinymce.html.Serializer");function E(t,e){return b.each(e,function(e){t=e.constructor===RegExp?t.replace(e,""):t.replace(e[0],e[1])}),t}var S={filter:E,innerText:function(t){var n=R(),r=C({},n),a="",i=n.getShortEndedElements(),o=b.makeMap("script noscript style textarea video audio iframe object"," "),s=n.getBlockElements();return t=E(t,[/<!\[[^\]]+\]>/g]),function e(t){var n=t.name,r=t;if("br"!==n)if(i[n]&&(a+=" "),o[n])a+=" ";else{if(3===t.type&&(a+=t.value),!t.shortEnded&&(t=t.firstChild))for(;e(t),t=t.next;);s[n]&&r.next&&(a+="\n","p"===n&&(a+="\n"))}else a+="\n"}(r.parse(t)),a},trimHtml:function(e){return e=E(e,[/^[\s\S]*<body[^>]*>\s*|\s*<\/body[^>]*>[\s\S]*$/gi,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class="Apple-converted-space">\u00a0<\/span>( ?)/g,function(e,t,n){return t||n?"\xa0":" "}],/<br class="Apple-interchange-newline">/g,/<br>$/i])},createIdGenerator:function(e){var t=0;return function(){return e+t++}},isMsEdge:function(){return-1!==navigator.userAgent.indexOf(" Edge/")}};function I(t){var n,e;return e=[/^[IVXLMCD]{1,2}\.[ \u00a0]/,/^[ivxlmcd]{1,2}\.[ \u00a0]/,/^[a-z]{1,2}[\.\)][ \u00a0]/,/^[A-Z]{1,2}[\.\)][ \u00a0]/,/^[0-9]+\.[ \u00a0]/,/^[\u3007\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]+\.[ \u00a0]/,/^[\u58f1\u5f10\u53c2\u56db\u4f0d\u516d\u4e03\u516b\u4e5d\u62fe]+\.[ \u00a0]/],t=t.replace(/^[\u00a0 ]+/,""),b.each(e,function(e){if(e.test(t))return!(n=!0)}),n}function M(e){var i,o,s=1;function n(e){var t="";if(3===e.type)return e.value;if(e=e.firstChild)for(;t+=n(e),e=e.next;);return t}function l(e,t){if(3===e.type&&t.test(e.value))return e.value=e.value.replace(t,""),!1;if(e=e.firstChild)do{if(!l(e,t))return!1}while(e=e.next);return!0}function t(t,n,r){var a=t._listLevel||s;a!==s&&(a<s?i&&(i=i.parent.parent):(o=i,i=null)),i&&i.name===n?i.append(t):(o=o||i,i=new k(n,1),1<r&&i.attr("start",""+r),t.wrap(i)),t.name="li",s<a&&o&&o.lastChild.append(i),s=a,function e(t){if(t._listIgnore)t.remove();else if(t=t.firstChild)for(;e(t),t=t.next;);}(t),l(t,/^\u00a0+/),l(t,/^\s*([\u2022\u00b7\u00a7\u25CF]|\w+\.)/),l(t,/^\u00a0+/)}for(var r=[],a=e.firstChild;null!=a;)if(r.push(a),null!==(a=a.walk()))for(;void 0!==a&&a.parent!==e;)a=a.walk();for(var u=0;u<r.length;u++)if("p"===(e=r[u]).name&&e.firstChild){var c=n(e);if(/^[\s\u00a0]*[\u2022\u00b7\u00a7\u25CF]\s*/.test(c)){t(e,"ul");continue}if(I(c)){var f=/([0-9]+)\./.exec(c),d=1;f&&(d=parseInt(f[1],10)),t(e,"ol",d);continue}if(e._listLevel){t(e,"ul",1);continue}i=null}else o=i,i=null}function O(n,r,a,i){var o,s={},e=n.dom.parseStyle(i);return b.each(e,function(e,t){switch(t){case"mso-list":(o=/\w+ \w+([0-9]+)/i.exec(i))&&(a._listLevel=parseInt(o[1],10)),/Ignore/i.test(e)&&a.firstChild&&(a._listIgnore=!0,a.firstChild._listIgnore=!0);break;case"horiz-align":t="text-align";break;case"vert-align":t="vertical-align";break;case"font-color":case"mso-foreground":t="color";break;case"mso-background":case"mso-highlight":t="background";break;case"font-weight":case"font-style":return void("normal"!==e&&(s[t]=e));case"mso-element":if(/^(comment|comment-list)$/i.test(e))return void a.remove()}0!==t.indexOf("mso-comment")?0!==t.indexOf("mso-")&&("all"===m.getRetainStyleProps(n)||r&&r[t])&&(s[t]=e):a.remove()}),/(bold)/i.test(s["font-weight"])&&(delete s["font-weight"],a.wrap(new k("b",1))),/(italic)/i.test(s["font-style"])&&(delete s["font-style"],a.wrap(new k("i",1))),(s=n.dom.serializeStyle(s,a.name))||null}var A={preProcess:function(e,t){return m.shouldUseDefaultFilters(e)?function(r,e){var t,a;(t=m.getRetainStyleProps(r))&&(a=b.makeMap(t.split(/[, ]/))),e=S.filter(e,[/<br class="?Apple-interchange-newline"?>/gi,/<b[^>]+id="?docs-internal-[^>]*>/gi,/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\xa0"],[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(e,t){return 0<t.length?t.replace(/./," ").slice(Math.floor(t.length/2)).split("").join("\xa0"):""}]]);var n=m.getWordValidElements(r),i=R({valid_elements:n,valid_children:"-li[p]"});b.each(i.elements,function(e){e.attributes["class"]||(e.attributes["class"]={},e.attributesOrder.push("class")),e.attributes.style||(e.attributes.style={},e.attributesOrder.push("style"))});var o=C({},i);o.addAttributeFilter("style",function(e){for(var t,n=e.length;n--;)(t=e[n]).attr("style",O(r,a,t,t.attr("style"))),"span"===t.name&&t.parent&&!t.attributes.length&&t.unwrap()}),o.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)n=(t=e[r]).attr("class"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(n)&&t.remove(),t.attr("class",null)}),o.addNodeFilter("del",function(e){for(var t=e.length;t--;)e[t].remove()}),o.addNodeFilter("a",function(e){for(var t,n,r,a=e.length;a--;)if(n=(t=e[a]).attr("href"),r=t.attr("name"),n&&-1!==n.indexOf("#_msocom_"))t.remove();else if(n&&0===n.indexOf("file://")&&(n=n.split("#")[1])&&(n="#"+n),n||r){if(r&&!/^_?(?:toc|edn|ftn)/i.test(r)){t.unwrap();continue}t.attr({href:n,name:r})}else t.unwrap()});var s=o.parse(e);return m.shouldConvertWordFakeLists(r)&&M(s),e=F({validate:r.settings.validate},i).serialize(s)}(e,t):t},isWordContent:function(e){return/<font face="Times New Roman"|class="?Mso|style="[^"]*\bmso-|style='[^'']*\bmso-|w:WordDocument/i.test(e)||/class="OutlineElement/.test(e)||/id="?docs\-internal\-guid\-/.test(e)}},H=function(e,t){return{content:e,cancelled:t}},B=function(e,t,n,r){var a,i,o,s,l,u,c=f(e,t,n,r);return e.hasEventListeners("PastePostProcess")&&!c.isDefaultPrevented()?(a=e,i=c.content,o=n,s=r,l=a.dom.create("div",{style:"display:none"},i),u=d(a,l,o,s),H(u.node.innerHTML,u.isDefaultPrevented())):H(c.content,c.isDefaultPrevented())},L=function(e,t,n){var r=A.isWordContent(t),a=r?A.preProcess(e,t):t;return B(e,a,n,r)},$=function(e,t){return e.insertContent(t,{merge:m.shouldMergeFormats(e),paste:!0}),!0},j=function(e){return/^https?:\/\/[\w\?\-\/+=.&%@~#]+$/i.test(e)},W=function(e){return j(e)&&/.(gif|jpe?g|png)$/.test(e)},N=function(e,t,n){return!(!1!==e.selection.isCollapsed()||!j(t)||(a=t,i=n,(r=e).undoManager.extra(function(){i(r,a)},function(){r.execCommand("mceInsertLink",!1,a)}),0));var r,a,i},V=function(e,t,n){return!!W(t)&&(a=t,i=n,(r=e).undoManager.extra(function(){i(r,a)},function(){r.insertContent('<img src="'+a+'">')}),!0);var r,a,i},z=function(e,t){var n,r;!1===m.isSmartPasteEnabled(e)?$(e,t):(n=e,r=t,b.each([N,V,$],function(e){return!0!==e(n,r,$)}))},K=function(e,t,n){var r=n||y(t),a=L(e,g(t),r);!1===a.cancelled&&z(e,a.content)},U=function(e,t){t=e.dom.encode(t).replace(/\r\n/g,"\n"),t=T(t,e.settings.forced_root_block,e.settings.forced_root_block_attrs),K(e,t,!1)},G=function(e){var t={};if(e){if(e.getData){var n=e.getData("Text");n&&0<n.length&&-1===n.indexOf("data:text/mce-internal,")&&(t["text/plain"]=n)}if(e.types)for(var r=0;r<e.types.length;r++){var a=e.types[r];try{t[a]=e.getData(a)}catch(i){t[a]=""}}}return t},X=function(e,t){return t in e&&0<e[t].length},q=function(e){return X(e,"text/html")||X(e,"text/plain")},Y=S.createIdGenerator("mceclip"),Z=function(e,t,n,r){t&&(e.selection.setRng(t),t=null);var a,i,o,s,l,u,c,f=n.result,d=-1!==(i=(a=f).indexOf(","))?a.substr(i+1):null,m=Y(),p=e.settings.images_reuse_filename&&r.name?(o=e,s=r.name,(l=s.match(/([\s\S]+?)\.(?:jpeg|jpg|png|gif)$/i))?o.dom.encode(l[1]):null):m,g=new Image;if(g.src=f,u=e.settings,c=g,!u.images_dataimg_filter||u.images_dataimg_filter(c)){var v,h=e.editorUpload.blobCache,b=void 0;(v=h.findFirst(function(e){return e.base64()===d}))?b=v:(b=h.create(m,r,d,p),h.add(b)),K(e,'<img src="'+b.blobUri()+'">',!1)}else K(e,'<img src="'+f+'">',!1)},J=function(o,s,l){var e="paste"===s.type?s.clipboardData:s.dataTransfer;function t(e){var t,n,r,a=!1;if(e)for(t=0;t<e.length;t++)if(n=e[t],/^image\/(jpeg|png|gif|bmp)$/.test(n.type)){var i=n.getAsFile?n.getAsFile():n;(r=new window.FileReader).onload=Z.bind(null,o,l,r,i),r.readAsDataURL(i),s.preventDefault(),a=!0}return a}if(o.settings.paste_data_images&&e)return t(e.items)||t(e.files)},Q=function(e){return a.metaKeyPressed(e)&&86===e.keyCode||e.shiftKey&&45===e.keyCode},ee=function(c,f,d){var m,p=0;function g(e,t,n,r){var a,i;X(e,"text/html")?a=e["text/html"]:(a=f.getHtml(),r=r||y(a),f.isDefaultContent(a)&&(n=!0)),a=S.trimHtml(a),f.remove(),i=!1===r&&D(a),a.length&&!i||(n=!0),n&&(a=X(e,"text/plain")&&i?e["text/plain"]:S.innerText(a)),f.isDefaultContent(a)?t||c.windowManager.alert("Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents."):n?U(c,a):K(c,a,r)}c.on("keydown",function(e){function t(e){Q(e)&&!e.isDefaultPrevented()&&f.remove()}if(Q(e)&&!e.isDefaultPrevented()){if((m=e.shiftKey&&86===e.keyCode)&&v.webkit&&-1!==navigator.userAgent.indexOf("Version/"))return;if(e.stopImmediatePropagation(),p=(new Date).getTime(),v.ie&&m)return e.preventDefault(),void n(c,!0);f.remove(),f.create(),c.once("keyup",t),c.once("paste",function(){c.off("keyup",t)})}}),c.on("paste",function(e){var t,n,r,a=(new Date).getTime(),i=(t=c,n=G(e.clipboardData||t.getDoc().dataTransfer),S.isMsEdge()?b.extend(n,{"text/html":""}):n),o=(new Date).getTime()-a,s=(new Date).getTime()-p-o<1e3,l="text"===d.get()||m,u=X(i,x());m=!1,e.isDefaultPrevented()||(r=e.clipboardData,-1!==navigator.userAgent.indexOf("Android")&&r&&r.items&&0===r.items.length)?f.remove():q(i)||!J(c,e,f.getLastRng()||c.selection.getRng())?(s||e.preventDefault(),!v.ie||s&&!e.ieFake||X(i,"text/html")||(f.create(),c.dom.bind(f.getEl(),"paste",function(e){e.stopPropagation()}),c.getDoc().execCommand("Paste",!1,null),i["text/html"]=f.getHtml()),X(i,"text/html")?(e.preventDefault(),u||(u=y(i["text/html"])),g(i,s,l,u)):h.setEditorTimeout(c,function(){g(i,s,l,u)},0)):f.remove()})},te=function(e){return v.ie&&e.inline?document.body:e.getBody()},ne=function(t,e){var n;te(n=t)!==n.getBody()&&t.dom.bind(e,"paste keyup",function(e){setTimeout(function(){t.fire("paste")},0)})},re=function(e){return e.dom.get("mcepastebin")},ae=function(e,t){return t===e},ie=function(o){var s=u(null),l="%MCEPASTEBIN%";return{create:function(){return t=s,n=l,a=(e=o).dom,i=e.getBody(),t.set(e.selection.getRng()),r=e.dom.add(te(e),"div",{id:"mcepastebin","class":"mce-pastebin",contentEditable:!0,"data-mce-bogus":"all",style:"position: fixed; top: 50%; width: 10px; height: 10px; overflow: hidden; opacity: 0"},n),(v.ie||v.gecko)&&a.setStyle(r,"left","rtl"===a.getStyle(i,"direction",!0)?65535:-65535),a.bind(r,"beforedeactivate focusin focusout",function(e){e.stopPropagation()}),ne(e,r),r.focus(),void e.selection.select(r,!0);var e,t,n,r,a,i},remove:function(){return function(e,t){if(re(e)){for(var n=void 0,r=t.get();n=e.dom.get("mcepastebin");)e.dom.remove(n),e.dom.unbind(n);r&&e.selection.setRng(r)}t.set(null)}(o,s)},getEl:function(){return re(o)},getHtml:function(){return function(n){var t,e,r,a,i,o=function(e,t){e.appendChild(t),n.dom.remove(t,!0)};for(e=b.grep(te(n).childNodes,function(e){return"mcepastebin"===e.id}),t=e.shift(),b.each(e,function(e){o(t,e)}),r=(a=n.dom.select("div[id=mcepastebin]",t)).length-1;0<=r;r--)i=n.dom.create("div"),t.insertBefore(i,a[r]),o(i,a[r]);return t?t.innerHTML:""}(o)},getLastRng:function(){return s.get()},isDefault:function(){return e=l,n=re(o),(t=n)&&"mcepastebin"===t.id&&ae(e,n.innerHTML);var e,t,n},isDefaultContent:function(e){return ae(l,e)}}},oe=function(n,e){var t=ie(n);return n.on("preInit",function(){return ee(o=n,t,e),void o.parser.addNodeFilter("img",function(e,t,n){var r,a=function(e){e.attr("data-mce-object")||s===v.transparentSrc||e.remove()};if(!o.settings.paste_data_images&&(r=n).data&&!0===r.data.paste)for(var i=e.length;i--;)(s=e[i].attributes.map.src)&&(0===s.indexOf("webkit-fake-url")?a(e[i]):o.settings.allow_html_data_urls||0!==s.indexOf("data:")||a(e[i]))});var o,s}),{pasteFormat:e,pasteHtml:function(e,t){return K(n,e,t)},pasteText:function(e){return U(n,e)},pasteImageData:function(e,t){return J(n,e,t)},getDataTransferItems:G,hasHtmlOrText:q,hasContentType:X}},se=function(){},le=function(e,t,n){if(r=e,!1!==v.iOS||r===undefined||"function"!=typeof r.setData||!0===S.isMsEdge())return!1;try{return e.clearData(),e.setData("text/html",t),e.setData("text/plain",n),e.setData(x(),t),!0}catch(a){return!1}var r},ue=function(e,t,n,r){le(e.clipboardData,t.html,t.text)?(e.preventDefault(),r()):n(t.html,r)},ce=function(s){return function(e,t){var n=p(e),r=s.dom.create("div",{contenteditable:"false","data-mce-bogus":"all"}),a=s.dom.create("div",{contenteditable:"true"},n);s.dom.setStyles(r,{position:"fixed",top:"0",left:"-3000px",width:"1000px",overflow:"hidden"}),r.appendChild(a),s.dom.add(s.getBody(),r);var i=s.selection.getRng();a.focus();var o=s.dom.createRng();o.selectNodeContents(a),s.selection.setRng(o),setTimeout(function(){s.selection.setRng(i),r.parentNode.removeChild(r),t()},0)}},fe=function(e){return{html:e.selection.getContent({contextual:!0}),text:e.selection.getContent({format:"text"})}},de=function(e){var t,n;e.on("cut",(t=e,function(e){!1===t.selection.isCollapsed()&&ue(e,fe(t),ce(t),function(){setTimeout(function(){t.execCommand("Delete")},0)})})),e.on("copy",(n=e,function(e){!1===n.selection.isCollapsed()&&ue(e,fe(n),ce(n),se)}))},me=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),pe=function(e,t){return me.getCaretRangeFromPoint(t.clientX,t.clientY,e.getDoc())},ge=function(e,t){e.focus(),e.selection.setRng(t)},ve=function(o,s,l){m.shouldBlockDrop(o)&&o.on("dragend dragover draggesture dragdrop drop drag",function(e){e.preventDefault(),e.stopPropagation()}),m.shouldPasteDataImages(o)||o.on("drop",function(e){var t=e.dataTransfer;t&&t.files&&0<t.files.length&&e.preventDefault()}),o.on("drop",function(e){var t,n;if(n=pe(o,e),!e.isDefaultPrevented()&&!l.get()){t=s.getDataTransferItems(e.dataTransfer);var r,a=s.hasContentType(t,x());if((s.hasHtmlOrText(t)&&(!(r=t["text/plain"])||0!==r.indexOf("file://"))||!s.pasteImageData(e,n))&&n&&m.shouldFilterDrop(o)){var i=t["mce-internal"]||t["text/html"]||t["text/plain"];i&&(e.preventDefault(),h.setEditorTimeout(o,function(){o.undoManager.transact(function(){t["mce-internal"]&&o.execCommand("Delete"),ge(o,n),i=S.trimHtml(i),t["text/html"]?s.pasteHtml(i,a):s.pasteText(i)})}))}}}),o.on("dragstart",function(e){l.set(!0)}),o.on("dragover dragend",function(e){m.shouldPasteDataImages(o)&&!1===l.get()&&(e.preventDefault(),ge(o,pe(o,e))),"dragend"===e.type&&l.set(!1)})},he=function(e){var t=e.plugins.paste,n=m.getPreProcess(e);n&&e.on("PastePreProcess",function(e){n.call(t,t,e)});var r=m.getPostProcess(e);r&&e.on("PastePostProcess",function(e){r.call(t,t,e)})};function be(t,n){t.on("PastePreProcess",function(e){e.content=n(t,e.content,e.internal,e.wordContent)})}function ye(e,t){if(!A.isWordContent(t))return t;var n=[];b.each(e.schema.getBlockElements(),function(e,t){n.push(t)});var r=new RegExp("(?:<br> [\\s\\r\\n]+|<br>)*(<\\/?("+n.join("|")+")[^>]*>)(?:<br> [\\s\\r\\n]+|<br>)*","g");return t=S.filter(t,[[r,"$1"]]),t=S.filter(t,[[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}function xe(e,t,n,r){if(r||n)return t;var u,a=m.getWebkitStyles(e);if(!1===m.shouldRemoveWebKitStyles(e)||"all"===a)return t;if(a&&(u=a.split(/[, ]/)),u){var c=e.dom,f=e.selection.getNode();t=t.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,function(e,t,n,r){var a=c.parseStyle(c.decode(n)),i={};if("none"===u)return t+r;for(var o=0;o<u.length;o++){var s=a[u[o]],l=c.getStyle(f,u[o],!0);/color/.test(u[o])&&(s=c.toHex(s),l=c.toHex(l)),l!==s&&(i[u[o]]=s)}return(i=c.serializeStyle(i,"span"))?t+' style="'+i+'"'+r:t+r})}else t=t.replace(/(<[^>]+) style="([^"]*)"([^>]*>)/gi,"$1$3");return t=t.replace(/(<[^>]+) data-mce-style="([^"]+)"([^>]*>)/gi,function(e,t,n,r){return t+' style="'+n+'"'+r})}function Pe(n,e){n.$("a",e).find("font,u").each(function(e,t){n.dom.remove(t,!0)})}var we=function(e){var t,n;v.webkit&&be(e,xe),v.ie&&(be(e,ye),n=Pe,(t=e).on("PastePostProcess",function(e){n(t,e.node)}))},_e=function(e,t,n){var r=n.control;r.active("text"===t.pasteFormat.get()),e.on("PastePlainTextToggle",function(e){r.active(e.state)})},De=function(e,t){var n=function(i){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var o=new Array(arguments.length-1),n=1;n<arguments.length;n++)o[n-1]=arguments[n];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];var a=o.concat(n);return i.apply(null,a)}}(_e,e,t);e.addButton("pastetext",{active:!1,icon:"pastetext",tooltip:"Paste as text",cmd:"mceTogglePlainTextPaste",onPostRender:n}),e.addMenuItem("pastetext",{text:"Paste as text",selectable:!0,active:t.pasteFormat,cmd:"mceTogglePlainTextPaste",onPostRender:n})};t.add("paste",function(e){if(!1===o(e)){var t=u(!1),n=u(!1),r=u(m.isPasteAsTextEnabled(e)?"text":"html"),a=oe(e,r),i=we(e);return De(e,a),c(e,a,t),he(e),de(e),ve(e,a,n),s(a,i)}})}();
\ No newline at end of file
(function () {
+var tabfocus = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
- };
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.tabfocus.Plugin","tinymce.core.PluginManager","tinymce.core.dom.DOMUtils","tinymce.core.util.Tools","tinymce.core.EditorManager","tinymce.core.util.Delay","tinymce.core.Env","global!tinymce.util.Tools.resolve"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.DOMUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.DOMUtils');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
+ var global$2 = tinymce.util.Tools.resolve('tinymce.EditorManager');
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var global$3 = tinymce.util.Tools.resolve('tinymce.Env');
-define(
- 'tinymce.core.EditorManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.EditorManager');
- }
-);
+ var global$4 = tinymce.util.Tools.resolve('tinymce.util.Delay');
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var global$5 = tinymce.util.Tools.resolve('tinymce.util.Tools');
-define(
- 'tinymce.core.util.Delay',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Delay');
- }
-);
+ var global$6 = tinymce.util.Tools.resolve('tinymce.util.VK');
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.Env',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.Env');
- }
-);
-
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class contains all core logic for the code plugin.
- *
- * @class tinymce.tabfocus.Plugin
- * @private
- */
-define(
- 'tinymce.plugins.tabfocus.Plugin',
- [
- 'tinymce.core.PluginManager',
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.core.util.Tools',
- 'tinymce.core.EditorManager',
- 'tinymce.core.util.Delay',
- 'tinymce.core.Env'
- ],
- function (PluginManager, DOMUtils, Tools, EditorManager, Delay, Env) {
- PluginManager.add('tabfocus', function (editor) {
- var DOM = DOMUtils.DOM;
+ var getTabFocusElements = function (editor) {
+ return editor.getParam('tabfocus_elements', ':prev,:next');
+ };
+ var getTabFocus = function (editor) {
+ return editor.getParam('tab_focus', getTabFocusElements(editor));
+ };
+ var $_8rita4kwjjgwed4m = { getTabFocus: getTabFocus };
- function tabCancel(e) {
- if (e.keyCode === 9 && !e.ctrlKey && !e.altKey && !e.metaKey) {
- e.preventDefault();
- }
+ var DOM = global$1.DOM;
+ var tabCancel = function (e) {
+ if (e.keyCode === global$6.TAB && !e.ctrlKey && !e.altKey && !e.metaKey) {
+ e.preventDefault();
+ }
+ };
+ var setup = function (editor) {
+ function tabHandler(e) {
+ var x, el, v, i;
+ if (e.keyCode !== global$6.TAB || e.ctrlKey || e.altKey || e.metaKey || e.isDefaultPrevented()) {
+ return;
}
-
- function tabHandler(e) {
- var x, el, v, i;
-
- if (e.keyCode !== 9 || e.ctrlKey || e.altKey || e.metaKey || e.isDefaultPrevented()) {
- return;
+ function find(direction) {
+ el = DOM.select(':input:enabled,*[tabindex]:not(iframe)');
+ function canSelectRecursive(e) {
+ return e.nodeName === 'BODY' || e.type !== 'hidden' && e.style.display !== 'none' && e.style.visibility !== 'hidden' && canSelectRecursive(e.parentNode);
}
-
- function find(direction) {
- el = DOM.select(':input:enabled,*[tabindex]:not(iframe)');
-
- function canSelectRecursive(e) {
- return e.nodeName === "BODY" || (e.type != 'hidden' &&
- e.style.display != "none" &&
- e.style.visibility != "hidden" && canSelectRecursive(e.parentNode));
- }
-
- function canSelect(el) {
- return /INPUT|TEXTAREA|BUTTON/.test(el.tagName) && EditorManager.get(e.id) && el.tabIndex != -1 && canSelectRecursive(el);
+ function canSelect(el) {
+ return /INPUT|TEXTAREA|BUTTON/.test(el.tagName) && global$2.get(e.id) && el.tabIndex !== -1 && canSelectRecursive(el);
+ }
+ global$5.each(el, function (e, i) {
+ if (e.id === editor.id) {
+ x = i;
+ return false;
}
-
- Tools.each(el, function (e, i) {
- if (e.id == editor.id) {
- x = i;
- return false;
+ });
+ if (direction > 0) {
+ for (i = x + 1; i < el.length; i++) {
+ if (canSelect(el[i])) {
+ return el[i];
}
- });
- if (direction > 0) {
- for (i = x + 1; i < el.length; i++) {
- if (canSelect(el[i])) {
- return el[i];
- }
- }
- } else {
- for (i = x - 1; i >= 0; i--) {
- if (canSelect(el[i])) {
- return el[i];
- }
+ }
+ } else {
+ for (i = x - 1; i >= 0; i--) {
+ if (canSelect(el[i])) {
+ return el[i];
}
}
-
- return null;
}
-
- v = Tools.explode(editor.getParam('tab_focus', editor.getParam('tabfocus_elements', ':prev,:next')));
-
- if (v.length == 1) {
- v[1] = v[0];
- v[0] = ':prev';
- }
-
- // Find element to focus
- if (e.shiftKey) {
- if (v[0] == ':prev') {
- el = find(-1);
- } else {
- el = DOM.get(v[0]);
- }
+ return null;
+ }
+ v = global$5.explode($_8rita4kwjjgwed4m.getTabFocus(editor));
+ if (v.length === 1) {
+ v[1] = v[0];
+ v[0] = ':prev';
+ }
+ if (e.shiftKey) {
+ if (v[0] === ':prev') {
+ el = find(-1);
} else {
- if (v[1] == ':next') {
- el = find(1);
- } else {
- el = DOM.get(v[1]);
- }
+ el = DOM.get(v[0]);
}
-
- if (el) {
- var focusEditor = EditorManager.get(el.id || el.name);
-
- if (el.id && focusEditor) {
- focusEditor.focus();
- } else {
- Delay.setTimeout(function () {
- if (!Env.webkit) {
- window.focus();
- }
-
- el.focus();
- }, 10);
- }
-
- e.preventDefault();
+ } else {
+ if (v[1] === ':next') {
+ el = find(1);
+ } else {
+ el = DOM.get(v[1]);
}
}
-
- editor.on('init', function () {
- if (editor.inline) {
- // Remove default tabIndex in inline mode
- DOM.setAttrib(editor.getBody(), 'tabIndex', null);
- }
-
- editor.on('keyup', tabCancel);
-
- if (Env.gecko) {
- editor.on('keypress keydown', tabHandler);
+ if (el) {
+ var focusEditor = global$2.get(el.id || el.name);
+ if (el.id && focusEditor) {
+ focusEditor.focus();
} else {
- editor.on('keydown', tabHandler);
+ global$4.setTimeout(function () {
+ if (!global$3.webkit) {
+ window.focus();
+ }
+ el.focus();
+ }, 10);
}
- });
+ e.preventDefault();
+ }
+ }
+ editor.on('init', function () {
+ if (editor.inline) {
+ DOM.setAttrib(editor.getBody(), 'tabIndex', null);
+ }
+ editor.on('keyup', tabCancel);
+ if (global$3.gecko) {
+ editor.on('keypress keydown', tabHandler);
+ } else {
+ editor.on('keydown', tabHandler);
+ }
});
+ };
+ var $_6zogdykpjjgwed4h = { setup: setup };
-
- return function () { };
+ global.add('tabfocus', function (editor) {
+ $_6zogdykpjjgwed4h.setup(editor);
+ });
+ function Plugin () {
}
-);
-dem('tinymce.plugins.tabfocus.Plugin')();
+
+ return Plugin;
+
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("7",tinymce.util.Tools.resolve),g("1",["7"],function(a){return a("tinymce.PluginManager")}),g("2",["7"],function(a){return a("tinymce.dom.DOMUtils")}),g("3",["7"],function(a){return a("tinymce.util.Tools")}),g("4",["7"],function(a){return a("tinymce.EditorManager")}),g("5",["7"],function(a){return a("tinymce.util.Delay")}),g("6",["7"],function(a){return a("tinymce.Env")}),g("0",["1","2","3","4","5","6"],function(a,b,c,d,e,f){return a.add("tabfocus",function(a){function g(a){9!==a.keyCode||a.ctrlKey||a.altKey||a.metaKey||a.preventDefault()}function h(b){function g(e){function f(a){return"BODY"===a.nodeName||"hidden"!=a.type&&"none"!=a.style.display&&"hidden"!=a.style.visibility&&f(a.parentNode)}function g(a){return/INPUT|TEXTAREA|BUTTON/.test(a.tagName)&&d.get(b.id)&&a.tabIndex!=-1&&f(a)}if(j=i.select(":input:enabled,*[tabindex]:not(iframe)"),c.each(j,function(b,c){if(b.id==a.id)return h=c,!1}),e>0){for(l=h+1;l<j.length;l++)if(g(j[l]))return j[l]}else for(l=h-1;l>=0;l--)if(g(j[l]))return j[l];return null}var h,j,k,l;if(!(9!==b.keyCode||b.ctrlKey||b.altKey||b.metaKey||b.isDefaultPrevented())&&(k=c.explode(a.getParam("tab_focus",a.getParam("tabfocus_elements",":prev,:next"))),1==k.length&&(k[1]=k[0],k[0]=":prev"),j=b.shiftKey?":prev"==k[0]?g(-1):i.get(k[0]):":next"==k[1]?g(1):i.get(k[1]))){var m=d.get(j.id||j.name);j.id&&m?m.focus():e.setTimeout(function(){f.webkit||window.focus(),j.focus()},10),b.preventDefault()}}var i=b.DOM;a.on("init",function(){a.inline&&i.setAttrib(a.getBody(),"tabIndex",null),a.on("keyup",g),f.gecko?a.on("keypress keydown",h):a.on("keydown",h)})}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),c=tinymce.util.Tools.resolve("tinymce.EditorManager"),s=tinymce.util.Tools.resolve("tinymce.Env"),a=tinymce.util.Tools.resolve("tinymce.util.Delay"),y=tinymce.util.Tools.resolve("tinymce.util.Tools"),f=tinymce.util.Tools.resolve("tinymce.util.VK"),d=function(e){return e.getParam("tab_focus",e.getParam("tabfocus_elements",":prev,:next"))},m=t.DOM,n=function(e){e.keyCode!==f.TAB||e.ctrlKey||e.altKey||e.metaKey||e.preventDefault()},i=function(r){function e(n){var i,o,e,l;if(!(n.keyCode!==f.TAB||n.ctrlKey||n.altKey||n.metaKey||n.isDefaultPrevented())&&(1===(e=y.explode(d(r))).length&&(e[1]=e[0],e[0]=":prev"),o=n.shiftKey?":prev"===e[0]?u(-1):m.get(e[0]):":next"===e[1]?u(1):m.get(e[1]))){var t=c.get(o.id||o.name);o.id&&t?t.focus():a.setTimeout(function(){s.webkit||window.focus(),o.focus()},10),n.preventDefault()}function u(e){function t(t){return/INPUT|TEXTAREA|BUTTON/.test(t.tagName)&&c.get(n.id)&&-1!==t.tabIndex&&function e(t){return"BODY"===t.nodeName||"hidden"!==t.type&&"none"!==t.style.display&&"hidden"!==t.style.visibility&&e(t.parentNode)}(t)}if(o=m.select(":input:enabled,*[tabindex]:not(iframe)"),y.each(o,function(e,t){if(e.id===r.id)return i=t,!1}),0<e){for(l=i+1;l<o.length;l++)if(t(o[l]))return o[l]}else for(l=i-1;0<=l;l--)if(t(o[l]))return o[l];return null}}r.on("init",function(){r.inline&&m.setAttrib(r.getBody(),"tabIndex",null),r.on("keyup",n),s.gecko?r.on("keypress keydown",e):r.on("keydown",e)})};e.add("tabfocus",function(e){i(e)})}();
\ No newline at end of file
(function () {
+var textcolor = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
+ var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
+ var getCurrentColor = function (editor, format) {
+ var color;
+ editor.dom.getParents(editor.selection.getStart(), function (elm) {
+ var value;
+ if (value = elm.style[format === 'forecolor' ? 'color' : 'background-color']) {
+ color = value;
+ }
+ });
+ return color;
};
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
+ var mapColors = function (colorMap) {
+ var i;
+ var colors = [];
+ for (i = 0; i < colorMap.length; i += 2) {
+ colors.push({
+ text: colorMap[i + 1],
+ color: '#' + colorMap[i]
+ });
}
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.plugins.textcolor.Plugin","tinymce.core.dom.DOMUtils","tinymce.core.PluginManager","tinymce.core.util.I18n","tinymce.core.util.Tools","global!tinymce.util.Tools.resolve"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.DOMUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.DOMUtils');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.PluginManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.PluginManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.I18n',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.I18n');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-/**
- * Plugin.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * This class contains all core logic for the code plugin.
- *
- * @class tinymce.textcolor.Plugin
- * @private
- */
-define(
- 'tinymce.plugins.textcolor.Plugin',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.core.PluginManager',
- 'tinymce.core.util.I18n',
- 'tinymce.core.util.Tools'
- ],
- function (DOMUtils, PluginManager, I18n, Tools) {
- var translate = I18n.translate;
-
- PluginManager.add('textcolor', function (editor) {
- var cols, rows;
-
- rows = {
- forecolor: editor.settings.forecolor_rows || editor.settings.textcolor_rows || 5,
- backcolor: editor.settings.backcolor_rows || editor.settings.textcolor_rows || 5
- };
- cols = {
- forecolor: editor.settings.forecolor_cols || editor.settings.textcolor_cols || 8,
- backcolor: editor.settings.backcolor_cols || editor.settings.textcolor_cols || 8
- };
-
- function getCurrentColor(format) {
- var color;
-
- editor.dom.getParents(editor.selection.getStart(), function (elm) {
- var value;
-
- if ((value = elm.style[format == 'forecolor' ? 'color' : 'background-color'])) {
- color = value;
- }
- });
-
- return color;
- }
-
- function mapColors(type) {
- var i, colors = [], colorMap;
-
- colorMap = [
- "000000", "Black",
- "993300", "Burnt orange",
- "333300", "Dark olive",
- "003300", "Dark green",
- "003366", "Dark azure",
- "000080", "Navy Blue",
- "333399", "Indigo",
- "333333", "Very dark gray",
- "800000", "Maroon",
- "FF6600", "Orange",
- "808000", "Olive",
- "008000", "Green",
- "008080", "Teal",
- "0000FF", "Blue",
- "666699", "Grayish blue",
- "808080", "Gray",
- "FF0000", "Red",
- "FF9900", "Amber",
- "99CC00", "Yellow green",
- "339966", "Sea green",
- "33CCCC", "Turquoise",
- "3366FF", "Royal blue",
- "800080", "Purple",
- "999999", "Medium gray",
- "FF00FF", "Magenta",
- "FFCC00", "Gold",
- "FFFF00", "Yellow",
- "00FF00", "Lime",
- "00FFFF", "Aqua",
- "00CCFF", "Sky blue",
- "993366", "Red violet",
- "FFFFFF", "White",
- "FF99CC", "Pink",
- "FFCC99", "Peach",
- "FFFF99", "Light yellow",
- "CCFFCC", "Pale green",
- "CCFFFF", "Pale cyan",
- "99CCFF", "Light sky blue",
- "CC99FF", "Plum"
- ];
-
- colorMap = editor.settings.textcolor_map || colorMap;
- colorMap = editor.settings[type + '_map'] || colorMap;
-
- for (i = 0; i < colorMap.length; i += 2) {
- colors.push({
- text: colorMap[i + 1],
- color: '#' + colorMap[i]
- });
- }
-
- return colors;
- }
-
- function renderColorPicker() {
- var self = this, colors, color, html, last, x, y, i, id = self._id, count = 0, type;
-
- type = self.settings.origin;
-
- function getColorCellHtml(color, title) {
- var isNoColor = color == 'transparent';
-
- return (
- '<td class="mce-grid-cell' + (isNoColor ? ' mce-colorbtn-trans' : '') + '">' +
- '<div id="' + id + '-' + (count++) + '"' +
- ' data-mce-color="' + (color ? color : '') + '"' +
- ' role="option"' +
- ' tabIndex="-1"' +
- ' style="' + (color ? 'background-color: ' + color : '') + '"' +
- ' title="' + translate(title) + '">' +
- (isNoColor ? '×' : '') +
- '</div>' +
- '</td>'
- );
- }
-
- colors = mapColors(type);
- colors.push({
- text: translate("No color"),
- color: "transparent"
- });
-
- html = '<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>';
- last = colors.length - 1;
-
- for (y = 0; y < rows[type]; y++) {
- html += '<tr>';
-
- for (x = 0; x < cols[type]; x++) {
- i = y * cols[type] + x;
-
- if (i > last) {
- html += '<td></td>';
- } else {
- color = colors[i];
- html += getColorCellHtml(color.color, color.text);
- }
- }
-
- html += '</tr>';
- }
-
- if (editor.settings.color_picker_callback) {
- html += (
- '<tr>' +
- '<td colspan="' + cols[type] + '" class="mce-custom-color-btn">' +
- '<div id="' + id + '-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" ' +
- 'role="button" tabindex="-1" aria-labelledby="' + id + '-c" style="width: 100%">' +
- '<button type="button" role="presentation" tabindex="-1">' + translate('Custom...') + '</button>' +
- '</div>' +
- '</td>' +
- '</tr>'
- );
-
- html += '<tr>';
+ return colors;
+ };
+ var applyFormat = function (editor, format, value) {
+ editor.undoManager.transact(function () {
+ editor.focus();
+ editor.formatter.apply(format, { value: value });
+ editor.nodeChanged();
+ });
+ };
+ var removeFormat = function (editor, format) {
+ editor.undoManager.transact(function () {
+ editor.focus();
+ editor.formatter.remove(format, { value: null }, null, true);
+ editor.nodeChanged();
+ });
+ };
+ var $_b0p88yrijjgwefd2 = {
+ getCurrentColor: getCurrentColor,
+ mapColors: mapColors,
+ applyFormat: applyFormat,
+ removeFormat: removeFormat
+ };
- for (x = 0; x < cols[type]; x++) {
- html += getColorCellHtml('', 'Custom color');
- }
+ var register = function (editor) {
+ editor.addCommand('mceApplyTextcolor', function (format, value) {
+ $_b0p88yrijjgwefd2.applyFormat(editor, format, value);
+ });
+ editor.addCommand('mceRemoveTextcolor', function (format) {
+ $_b0p88yrijjgwefd2.removeFormat(editor, format);
+ });
+ };
+ var $_g2o2pirhjjgwefd1 = { register: register };
+
+ var global$1 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
+
+ var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
+
+ var defaultColorMap = [
+ '000000',
+ 'Black',
+ '993300',
+ 'Burnt orange',
+ '333300',
+ 'Dark olive',
+ '003300',
+ 'Dark green',
+ '003366',
+ 'Dark azure',
+ '000080',
+ 'Navy Blue',
+ '333399',
+ 'Indigo',
+ '333333',
+ 'Very dark gray',
+ '800000',
+ 'Maroon',
+ 'FF6600',
+ 'Orange',
+ '808000',
+ 'Olive',
+ '008000',
+ 'Green',
+ '008080',
+ 'Teal',
+ '0000FF',
+ 'Blue',
+ '666699',
+ 'Grayish blue',
+ '808080',
+ 'Gray',
+ 'FF0000',
+ 'Red',
+ 'FF9900',
+ 'Amber',
+ '99CC00',
+ 'Yellow green',
+ '339966',
+ 'Sea green',
+ '33CCCC',
+ 'Turquoise',
+ '3366FF',
+ 'Royal blue',
+ '800080',
+ 'Purple',
+ '999999',
+ 'Medium gray',
+ 'FF00FF',
+ 'Magenta',
+ 'FFCC00',
+ 'Gold',
+ 'FFFF00',
+ 'Yellow',
+ '00FF00',
+ 'Lime',
+ '00FFFF',
+ 'Aqua',
+ '00CCFF',
+ 'Sky blue',
+ '993366',
+ 'Red violet',
+ 'FFFFFF',
+ 'White',
+ 'FF99CC',
+ 'Pink',
+ 'FFCC99',
+ 'Peach',
+ 'FFFF99',
+ 'Light yellow',
+ 'CCFFCC',
+ 'Pale green',
+ 'CCFFFF',
+ 'Pale cyan',
+ '99CCFF',
+ 'Light sky blue',
+ 'CC99FF',
+ 'Plum'
+ ];
+ var getTextColorMap = function (editor) {
+ return editor.getParam('textcolor_map', defaultColorMap);
+ };
+ var getForeColorMap = function (editor) {
+ return editor.getParam('forecolor_map', getTextColorMap(editor));
+ };
+ var getBackColorMap = function (editor) {
+ return editor.getParam('backcolor_map', getTextColorMap(editor));
+ };
+ var getTextColorRows = function (editor) {
+ return editor.getParam('textcolor_rows', 5);
+ };
+ var getTextColorCols = function (editor) {
+ return editor.getParam('textcolor_cols', 8);
+ };
+ var getForeColorRows = function (editor) {
+ return editor.getParam('forecolor_rows', getTextColorRows(editor));
+ };
+ var getBackColorRows = function (editor) {
+ return editor.getParam('backcolor_rows', getTextColorRows(editor));
+ };
+ var getForeColorCols = function (editor) {
+ return editor.getParam('forecolor_cols', getTextColorCols(editor));
+ };
+ var getBackColorCols = function (editor) {
+ return editor.getParam('backcolor_cols', getTextColorCols(editor));
+ };
+ var getColorPickerCallback = function (editor) {
+ return editor.getParam('color_picker_callback', null);
+ };
+ var hasColorPicker = function (editor) {
+ return typeof getColorPickerCallback(editor) === 'function';
+ };
+ var $_2rfqb7rmjjgwefd9 = {
+ getForeColorMap: getForeColorMap,
+ getBackColorMap: getBackColorMap,
+ getForeColorRows: getForeColorRows,
+ getBackColorRows: getBackColorRows,
+ getForeColorCols: getForeColorCols,
+ getBackColorCols: getBackColorCols,
+ getColorPickerCallback: getColorPickerCallback,
+ hasColorPicker: hasColorPicker
+ };
- html += '</tr>';
+ var global$3 = tinymce.util.Tools.resolve('tinymce.util.I18n');
+
+ var getHtml = function (cols, rows, colorMap, hasColorPicker) {
+ var colors, color, html, last, x, y, i, count = 0;
+ var id = global$1.DOM.uniqueId('mcearia');
+ var getColorCellHtml = function (color, title) {
+ var isNoColor = color === 'transparent';
+ return '<td class="mce-grid-cell' + (isNoColor ? ' mce-colorbtn-trans' : '') + '">' + '<div id="' + id + '-' + count++ + '"' + ' data-mce-color="' + (color ? color : '') + '"' + ' role="option"' + ' tabIndex="-1"' + ' style="' + (color ? 'background-color: ' + color : '') + '"' + ' title="' + global$3.translate(title) + '">' + (isNoColor ? '×' : '') + '</div>' + '</td>';
+ };
+ colors = $_b0p88yrijjgwefd2.mapColors(colorMap);
+ colors.push({
+ text: global$3.translate('No color'),
+ color: 'transparent'
+ });
+ html = '<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>';
+ last = colors.length - 1;
+ for (y = 0; y < rows; y++) {
+ html += '<tr>';
+ for (x = 0; x < cols; x++) {
+ i = y * cols + x;
+ if (i > last) {
+ html += '<td></td>';
+ } else {
+ color = colors[i];
+ html += getColorCellHtml(color.color, color.text);
}
-
- html += '</tbody></table>';
-
- return html;
}
-
- function applyFormat(format, value) {
- editor.undoManager.transact(function () {
- editor.focus();
- editor.formatter.apply(format, { value: value });
- editor.nodeChanged();
- });
+ html += '</tr>';
+ }
+ if (hasColorPicker) {
+ html += '<tr>' + '<td colspan="' + cols + '" class="mce-custom-color-btn">' + '<div id="' + id + '-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" ' + 'role="button" tabindex="-1" aria-labelledby="' + id + '-c" style="width: 100%">' + '<button type="button" role="presentation" tabindex="-1">' + global$3.translate('Custom...') + '</button>' + '</div>' + '</td>' + '</tr>';
+ html += '<tr>';
+ for (x = 0; x < cols; x++) {
+ html += getColorCellHtml('', 'Custom color');
}
+ html += '</tr>';
+ }
+ html += '</tbody></table>';
+ return html;
+ };
+ var $_fihh7qrnjjgwefdb = { getHtml: getHtml };
- function removeFormat(format) {
- editor.undoManager.transact(function () {
- editor.focus();
- editor.formatter.remove(format, { value: null }, null, true);
- editor.nodeChanged();
- });
+ var setDivColor = function setDivColor(div, value) {
+ div.style.background = value;
+ div.setAttribute('data-mce-color', value);
+ };
+ var onButtonClick = function (editor) {
+ return function (e) {
+ var ctrl = e.control;
+ if (ctrl._color) {
+ editor.execCommand('mceApplyTextcolor', ctrl.settings.format, ctrl._color);
+ } else {
+ editor.execCommand('mceRemoveTextcolor', ctrl.settings.format);
}
-
- function onPanelClick(e) {
- var buttonCtrl = this.parent(), value, type;
-
- type = buttonCtrl.settings.origin;
-
- function selectColor(value) {
- buttonCtrl.hidePanel();
- buttonCtrl.color(value);
- applyFormat(buttonCtrl.settings.format, value);
- }
-
- function resetColor() {
- buttonCtrl.hidePanel();
- buttonCtrl.resetColor();
- removeFormat(buttonCtrl.settings.format);
- }
-
- function setDivColor(div, value) {
- div.style.background = value;
- div.setAttribute('data-mce-color', value);
- }
-
- if (DOMUtils.DOM.getParent(e.target, '.mce-custom-color-btn')) {
- buttonCtrl.hidePanel();
-
- editor.settings.color_picker_callback.call(editor, function (value) {
- var tableElm = buttonCtrl.panel.getEl().getElementsByTagName('table')[0];
- var customColorCells, div, i;
-
- customColorCells = Tools.map(tableElm.rows[tableElm.rows.length - 1].childNodes, function (elm) {
- return elm.firstChild;
- });
-
- for (i = 0; i < customColorCells.length; i++) {
- div = customColorCells[i];
- if (!div.getAttribute('data-mce-color')) {
- break;
- }
- }
-
- // Shift colors to the right
- // TODO: Might need to be the left on RTL
- if (i == cols[type]) {
- for (i = 0; i < cols[type] - 1; i++) {
- setDivColor(customColorCells[i], customColorCells[i + 1].getAttribute('data-mce-color'));
- }
+ };
+ };
+ var onPanelClick = function (editor, cols) {
+ return function (e) {
+ var buttonCtrl = this.parent();
+ var value;
+ var currentColor = $_b0p88yrijjgwefd2.getCurrentColor(editor, buttonCtrl.settings.format);
+ var selectColor = function (value) {
+ editor.execCommand('mceApplyTextcolor', buttonCtrl.settings.format, value);
+ buttonCtrl.hidePanel();
+ buttonCtrl.color(value);
+ };
+ var resetColor = function () {
+ editor.execCommand('mceRemoveTextcolor', buttonCtrl.settings.format);
+ buttonCtrl.hidePanel();
+ buttonCtrl.resetColor();
+ };
+ if (global$1.DOM.getParent(e.target, '.mce-custom-color-btn')) {
+ buttonCtrl.hidePanel();
+ var colorPickerCallback = $_2rfqb7rmjjgwefd9.getColorPickerCallback(editor);
+ colorPickerCallback.call(editor, function (value) {
+ var tableElm = buttonCtrl.panel.getEl().getElementsByTagName('table')[0];
+ var customColorCells, div, i;
+ customColorCells = global$2.map(tableElm.rows[tableElm.rows.length - 1].childNodes, function (elm) {
+ return elm.firstChild;
+ });
+ for (i = 0; i < customColorCells.length; i++) {
+ div = customColorCells[i];
+ if (!div.getAttribute('data-mce-color')) {
+ break;
}
-
- setDivColor(div, value);
- selectColor(value);
- }, getCurrentColor(buttonCtrl.settings.format));
- }
-
- value = e.target.getAttribute('data-mce-color');
- if (value) {
- if (this.lastId) {
- document.getElementById(this.lastId).setAttribute('aria-selected', false);
}
-
- e.target.setAttribute('aria-selected', true);
- this.lastId = e.target.id;
-
- if (value == 'transparent') {
- resetColor();
- } else {
- selectColor(value);
+ if (i === cols) {
+ for (i = 0; i < cols - 1; i++) {
+ setDivColor(customColorCells[i], customColorCells[i + 1].getAttribute('data-mce-color'));
+ }
}
- } else if (value !== null) {
- buttonCtrl.hidePanel();
- }
+ setDivColor(div, value);
+ selectColor(value);
+ }, currentColor);
}
-
- function onButtonClick() {
- var self = this;
-
- if (self._color) {
- applyFormat(self.settings.format, self._color);
+ value = e.target.getAttribute('data-mce-color');
+ if (value) {
+ if (this.lastId) {
+ global$1.DOM.get(this.lastId).setAttribute('aria-selected', 'false');
+ }
+ e.target.setAttribute('aria-selected', true);
+ this.lastId = e.target.id;
+ if (value === 'transparent') {
+ resetColor();
} else {
- removeFormat(self.settings.format);
+ selectColor(value);
}
+ } else if (value !== null) {
+ buttonCtrl.hidePanel();
}
-
- editor.addButton('forecolor', {
- type: 'colorbutton',
- tooltip: 'Text color',
- format: 'forecolor',
- panel: {
- origin: 'forecolor',
- role: 'application',
- ariaRemember: true,
- html: renderColorPicker,
- onclick: onPanelClick
- },
- onclick: onButtonClick
- });
-
- editor.addButton('backcolor', {
- type: 'colorbutton',
- tooltip: 'Background color',
- format: 'hilitecolor',
- panel: {
- origin: 'backcolor',
- role: 'application',
- ariaRemember: true,
- html: renderColorPicker,
- onclick: onPanelClick
- },
- onclick: onButtonClick
- });
+ };
+ };
+ var renderColorPicker = function (editor, foreColor) {
+ return function () {
+ var cols = foreColor ? $_2rfqb7rmjjgwefd9.getForeColorCols(editor) : $_2rfqb7rmjjgwefd9.getBackColorCols(editor);
+ var rows = foreColor ? $_2rfqb7rmjjgwefd9.getForeColorRows(editor) : $_2rfqb7rmjjgwefd9.getBackColorRows(editor);
+ var colorMap = foreColor ? $_2rfqb7rmjjgwefd9.getForeColorMap(editor) : $_2rfqb7rmjjgwefd9.getBackColorMap(editor);
+ var hasColorPicker = $_2rfqb7rmjjgwefd9.hasColorPicker(editor);
+ return $_fihh7qrnjjgwefdb.getHtml(cols, rows, colorMap, hasColorPicker);
+ };
+ };
+ var register$1 = function (editor) {
+ editor.addButton('forecolor', {
+ type: 'colorbutton',
+ tooltip: 'Text color',
+ format: 'forecolor',
+ panel: {
+ role: 'application',
+ ariaRemember: true,
+ html: renderColorPicker(editor, true),
+ onclick: onPanelClick(editor, $_2rfqb7rmjjgwefd9.getForeColorCols(editor))
+ },
+ onclick: onButtonClick(editor)
});
+ editor.addButton('backcolor', {
+ type: 'colorbutton',
+ tooltip: 'Background color',
+ format: 'hilitecolor',
+ panel: {
+ role: 'application',
+ ariaRemember: true,
+ html: renderColorPicker(editor, false),
+ onclick: onPanelClick(editor, $_2rfqb7rmjjgwefd9.getBackColorCols(editor))
+ },
+ onclick: onButtonClick(editor)
+ });
+ };
+ var $_8npvswrjjjgwefd5 = { register: register$1 };
- return function () { };
+ global.add('textcolor', function (editor) {
+ $_g2o2pirhjjgwefd1.register(editor);
+ $_8npvswrjjjgwefd5.register(editor);
+ });
+ function Plugin () {
}
-);
-dem('tinymce.plugins.textcolor.Plugin')();
+
+ return Plugin;
+
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("5",tinymce.util.Tools.resolve),g("1",["5"],function(a){return a("tinymce.dom.DOMUtils")}),g("2",["5"],function(a){return a("tinymce.PluginManager")}),g("3",["5"],function(a){return a("tinymce.util.I18n")}),g("4",["5"],function(a){return a("tinymce.util.Tools")}),g("0",["1","2","3","4"],function(a,b,c,d){var e=c.translate;return b.add("textcolor",function(b){function c(a){var c;return b.dom.getParents(b.selection.getStart(),function(b){var d;(d=b.style["forecolor"==a?"color":"background-color"])&&(c=d)}),c}function f(a){var c,d,e=[];for(d=["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],d=b.settings.textcolor_map||d,d=b.settings[a+"_map"]||d,c=0;c<d.length;c+=2)e.push({text:d[c+1],color:"#"+d[c]});return e}function g(){function a(a,b){var c="transparent"==a;return'<td class="mce-grid-cell'+(c?" mce-colorbtn-trans":"")+'"><div id="'+p+"-"+q++ +'" data-mce-color="'+(a?a:"")+'" role="option" tabIndex="-1" style="'+(a?"background-color: "+a:"")+'" title="'+e(b)+'">'+(c?"×":"")+"</div></td>"}var c,d,g,h,i,j,k,n,o=this,p=o._id,q=0;for(n=o.settings.origin,c=f(n),c.push({text:e("No color"),color:"transparent"}),g='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',h=c.length-1,j=0;j<m[n];j++){for(g+="<tr>",i=0;i<l[n];i++)k=j*l[n]+i,k>h?g+="<td></td>":(d=c[k],g+=a(d.color,d.text));g+="</tr>"}if(b.settings.color_picker_callback){for(g+='<tr><td colspan="'+l[n]+'" class="mce-custom-color-btn"><div id="'+p+'-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" role="button" tabindex="-1" aria-labelledby="'+p+'-c" style="width: 100%"><button type="button" role="presentation" tabindex="-1">'+e("Custom...")+"</button></div></td></tr>",g+="<tr>",i=0;i<l[n];i++)g+=a("","Custom color");g+="</tr>"}return g+="</tbody></table>"}function h(a,c){b.undoManager.transact(function(){b.focus(),b.formatter.apply(a,{value:c}),b.nodeChanged()})}function i(a){b.undoManager.transact(function(){b.focus(),b.formatter.remove(a,{value:null},null,!0),b.nodeChanged()})}function j(e){function f(a){n.hidePanel(),n.color(a),h(n.settings.format,a)}function g(){n.hidePanel(),n.resetColor(),i(n.settings.format)}function j(a,b){a.style.background=b,a.setAttribute("data-mce-color",b)}var k,m,n=this.parent();m=n.settings.origin,a.DOM.getParent(e.target,".mce-custom-color-btn")&&(n.hidePanel(),b.settings.color_picker_callback.call(b,function(a){var b,c,e,g=n.panel.getEl().getElementsByTagName("table")[0];for(b=d.map(g.rows[g.rows.length-1].childNodes,function(a){return a.firstChild}),e=0;e<b.length&&(c=b[e],c.getAttribute("data-mce-color"));e++);if(e==l[m])for(e=0;e<l[m]-1;e++)j(b[e],b[e+1].getAttribute("data-mce-color"));j(c,a),f(a)},c(n.settings.format))),k=e.target.getAttribute("data-mce-color"),k?(this.lastId&&document.getElementById(this.lastId).setAttribute("aria-selected",!1),e.target.setAttribute("aria-selected",!0),this.lastId=e.target.id,"transparent"==k?g():f(k)):null!==k&&n.hidePanel()}function k(){var a=this;a._color?h(a.settings.format,a._color):i(a.settings.format)}var l,m;m={forecolor:b.settings.forecolor_rows||b.settings.textcolor_rows||5,backcolor:b.settings.backcolor_rows||b.settings.textcolor_rows||5},l={forecolor:b.settings.forecolor_cols||b.settings.textcolor_cols||8,backcolor:b.settings.backcolor_cols||b.settings.textcolor_cols||8},b.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",format:"forecolor",panel:{origin:"forecolor",role:"application",ariaRemember:!0,html:g,onclick:j},onclick:k}),b.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",format:"hilitecolor",panel:{origin:"backcolor",role:"application",ariaRemember:!0,html:g,onclick:j},onclick:k})}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager"),n=function(t,o){var r;return t.dom.getParents(t.selection.getStart(),function(t){var e;(e=t.style["forecolor"===o?"color":"background-color"])&&(r=e)}),r},g=function(t){var e,o=[];for(e=0;e<t.length;e+=2)o.push({text:t[e+1],color:"#"+t[e]});return o},r=function(t,e,o){t.undoManager.transact(function(){t.focus(),t.formatter.apply(e,{value:o}),t.nodeChanged()})},e=function(t,e){t.undoManager.transact(function(){t.focus(),t.formatter.remove(e,{value:null},null,!0),t.nodeChanged()})},o=function(o){o.addCommand("mceApplyTextcolor",function(t,e){r(o,t,e)}),o.addCommand("mceRemoveTextcolor",function(t){e(o,t)})},F=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.util.Tools"),a=["000000","Black","993300","Burnt orange","333300","Dark olive","003300","Dark green","003366","Dark azure","000080","Navy Blue","333399","Indigo","333333","Very dark gray","800000","Maroon","FF6600","Orange","808000","Olive","008000","Green","008080","Teal","0000FF","Blue","666699","Grayish blue","808080","Gray","FF0000","Red","FF9900","Amber","99CC00","Yellow green","339966","Sea green","33CCCC","Turquoise","3366FF","Royal blue","800080","Purple","999999","Medium gray","FF00FF","Magenta","FFCC00","Gold","FFFF00","Yellow","00FF00","Lime","00FFFF","Aqua","00CCFF","Sky blue","993366","Red violet","FFFFFF","White","FF99CC","Pink","FFCC99","Peach","FFFF99","Light yellow","CCFFCC","Pale green","CCFFFF","Pale cyan","99CCFF","Light sky blue","CC99FF","Plum"],l=function(t){return t.getParam("textcolor_map",a)},c=function(t){return t.getParam("textcolor_rows",5)},u=function(t){return t.getParam("textcolor_cols",8)},m=function(t){return t.getParam("color_picker_callback",null)},s=function(t){return t.getParam("forecolor_map",l(t))},d=function(t){return t.getParam("backcolor_map",l(t))},f=function(t){return t.getParam("forecolor_rows",c(t))},b=function(t){return t.getParam("backcolor_rows",c(t))},p=function(t){return t.getParam("forecolor_cols",u(t))},C=function(t){return t.getParam("backcolor_cols",u(t))},y=m,v=function(t){return"function"==typeof m(t)},h=tinymce.util.Tools.resolve("tinymce.util.I18n"),P=function(t,e,o,r){var n,a,l,c,i,u,m,s=0,d=F.DOM.uniqueId("mcearia"),f=function(t,e){var o="transparent"===t;return'<td class="mce-grid-cell'+(o?" mce-colorbtn-trans":"")+'"><div id="'+d+"-"+s+++'" data-mce-color="'+(t||"")+'" role="option" tabIndex="-1" style="'+(t?"background-color: "+t:"")+'" title="'+h.translate(e)+'">'+(o?"×":"")+"</div></td>"};for((n=g(o)).push({text:h.translate("No color"),color:"transparent"}),l='<table class="mce-grid mce-grid-border mce-colorbutton-grid" role="list" cellspacing="0"><tbody>',c=n.length-1,u=0;u<e;u++){for(l+="<tr>",i=0;i<t;i++)l+=c<(m=u*t+i)?"<td></td>":f((a=n[m]).color,a.text);l+="</tr>"}if(r){for(l+='<tr><td colspan="'+t+'" class="mce-custom-color-btn"><div id="'+d+'-c" class="mce-widget mce-btn mce-btn-small mce-btn-flat" role="button" tabindex="-1" aria-labelledby="'+d+'-c" style="width: 100%"><button type="button" role="presentation" tabindex="-1">'+h.translate("Custom...")+"</button></div></td></tr>",l+="<tr>",i=0;i<t;i++)l+=f("","Custom color");l+="</tr>"}return l+="</tbody></table>"},k=function(t,e){t.style.background=e,t.setAttribute("data-mce-color",e)},x=function(o){return function(t){var e=t.control;e._color?o.execCommand("mceApplyTextcolor",e.settings.format,e._color):o.execCommand("mceRemoveTextcolor",e.settings.format)}},T=function(r,c){return function(t){var e,a=this.parent(),o=n(r,a.settings.format),l=function(t){r.execCommand("mceApplyTextcolor",a.settings.format,t),a.hidePanel(),a.color(t)};F.DOM.getParent(t.target,".mce-custom-color-btn")&&(a.hidePanel(),y(r).call(r,function(t){var e,o,r,n=a.panel.getEl().getElementsByTagName("table")[0];for(e=i.map(n.rows[n.rows.length-1].childNodes,function(t){return t.firstChild}),r=0;r<e.length&&(o=e[r]).getAttribute("data-mce-color");r++);if(r===c)for(r=0;r<c-1;r++)k(e[r],e[r+1].getAttribute("data-mce-color"));k(o,t),l(t)},o)),(e=t.target.getAttribute("data-mce-color"))?(this.lastId&&F.DOM.get(this.lastId).setAttribute("aria-selected","false"),t.target.setAttribute("aria-selected",!0),this.lastId=t.target.id,"transparent"===e?(r.execCommand("mceRemoveTextcolor",a.settings.format),a.hidePanel(),a.resetColor()):l(e)):null!==e&&a.hidePanel()}},_=function(n,a){return function(){var t=a?p(n):C(n),e=a?f(n):b(n),o=a?s(n):d(n),r=v(n);return P(t,e,o,r)}},A=function(t){t.addButton("forecolor",{type:"colorbutton",tooltip:"Text color",format:"forecolor",panel:{role:"application",ariaRemember:!0,html:_(t,!0),onclick:T(t,p(t))},onclick:x(t)}),t.addButton("backcolor",{type:"colorbutton",tooltip:"Background color",format:"hilitecolor",panel:{role:"application",ariaRemember:!0,html:_(t,!1),onclick:T(t,C(t))},onclick:x(t)})};t.add("textcolor",function(t){o(t),A(t)})}();
\ No newline at end of file
'alt="" title="' + title + '" data-mce-resize="false" data-mce-placeholder="1" />' );
}
- if ( event.load && event.format !== 'raw' && hasWpautop ) {
- event.content = wp.editor.autop( event.content );
+ if ( event.load && event.format !== 'raw' ) {
+ if ( hasWpautop ) {
+ event.content = wp.editor.autop( event.content );
+ } else {
+ // Prevent creation of paragraphs out of multiple HTML comments.
+ event.content = event.content.replace( /-->\s+<!--/g, '--><!--' );
+ }
}
if ( event.content.indexOf( '<script' ) !== -1 || event.content.indexOf( '<style' ) !== -1 ) {
if ( hasWpautop ) {
event.content = wp.editor.removep( event.content );
+ } else {
+ // Restore formatting of block boundaries.
+ event.content = event.content.replace( /-->\s*<!-- wp:/g, '-->\n\n<!-- wp:' );
}
});
-!function(a){(!a.ui.FloatPanel.zIndex||a.ui.FloatPanel.zIndex<100100)&&(a.ui.FloatPanel.zIndex=100100),a.PluginManager.add("wordpress",function(b){function c(c){var d,f,i,j=0;f="hide"===c,b.theme.panel&&(i=b.theme.panel.find(".toolbar:not(.menubar)")),!i||i.length<2||"hide"===c&&!i[1].visible()||(!c&&i[1].visible()&&(c="hide"),h(i,function(a,b){b>0&&("hide"===c?(a.hide(),j+=30):(a.show(),j-=30))}),j&&!f&&(a.Env.iOS||(d=b.getContentAreaContainer().firstChild,g.setStyle(d,"height",d.clientHeight+j)),"hide"===c?(setUserSetting("hidetb","0"),e&&e.active(!1)):(setUserSetting("hidetb","1"),e&&e.active(!0))),b.fire("wp-toolbar-toggle"))}function d(){}var e,f,g=a.DOM,h=a.each,i=b.editorManager.i18n.translate,j=window.jQuery,k=window.wp,l=k&&k.editor&&k.editor.autop&&b.getParam("wpautop",!0);return j&&j(document).triggerHandler("tinymce-editor-setup",[b]),b.addButton("wp_adv",{tooltip:"Toolbar Toggle",cmd:"WP_Adv",onPostRender:function(){e=this,e.active("1"===getUserSetting("hidetb"))}}),b.on("PostRender",function(){b.getParam("wordpress_adv_hidden",!0)&&"0"===getUserSetting("hidetb","0")&&c("hide")}),b.addCommand("WP_Adv",function(){c()}),b.on("focus",function(){window.wpActiveEditor=b.id}),b.on("BeforeSetContent",function(b){var c;b.content&&(b.content.indexOf("<!--more")!==-1&&(c=i("Read more..."),b.content=b.content.replace(/<!--more(.*?)-->/g,function(b,d){return'<img src="'+a.Env.transparentSrc+'" data-wp-more="more" data-wp-more-text="'+d+'" class="wp-more-tag mce-wp-more" alt="" title="'+c+'" data-mce-resize="false" data-mce-placeholder="1" />'})),b.content.indexOf("<!--nextpage-->")!==-1&&(c=i("Page break"),b.content=b.content.replace(/<!--nextpage-->/g,'<img src="'+a.Env.transparentSrc+'" data-wp-more="nextpage" class="wp-more-tag mce-wp-nextpage" alt="" title="'+c+'" data-mce-resize="false" data-mce-placeholder="1" />')),b.load&&"raw"!==b.format&&l&&(b.content=k.editor.autop(b.content)),b.content.indexOf("<script")===-1&&b.content.indexOf("<style")===-1||(b.content=b.content.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/g,function(b,c){return'<img src="'+a.Env.transparentSrc+'" data-wp-preserve="'+encodeURIComponent(b)+'" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<'+c+'>" title="<'+c+'>" />'})))}),b.on("setcontent",function(){b.$("p").each(function(b,c){if(c.innerHTML&&c.innerHTML.length<10){var d=a.trim(c.innerHTML);d&&" "!==d||(c.innerHTML=a.Env.ie&&a.Env.ie<11?"":'<br data-mce-bogus="1">')}})}),b.on("PostProcess",function(a){a.get&&(a.content=a.content.replace(/<img[^>]+>/g,function(a){var b,c,d="";return a.indexOf('data-wp-more="more"')!==-1?((b=a.match(/data-wp-more-text="([^"]+)"/))&&(d=b[1]),c="<!--more"+d+"-->"):a.indexOf('data-wp-more="nextpage"')!==-1?c="<!--nextpage-->":a.indexOf("data-wp-preserve")!==-1&&(b=a.match(/ data-wp-preserve="([^"]+)"/))&&(c=decodeURIComponent(b[1])),c||a}))}),b.on("ResolveName",function(a){var c;"IMG"===a.target.nodeName&&(c=b.dom.getAttrib(a.target,"data-wp-more"))&&(a.name=c)}),b.addCommand("WP_More",function(c){var d,e,f,g="wp-more-tag",h=b.dom,j=b.selection.getNode(),k=b.getBody();return c=c||"more",g+=" mce-wp-"+c,f="more"===c?"Read more...":"Next page",f=i(f),e='<img src="'+a.Env.transparentSrc+'" alt="" title="'+f+'" class="'+g+'" data-wp-more="'+c+'" data-mce-resize="false" data-mce-placeholder="1" />',j===k||"P"===j.nodeName&&j.parentNode===k?void b.insertContent(e):(d=h.getParent(j,function(a){return!(!a.parentNode||a.parentNode!==k)},b.getBody()),void(d&&("P"===d.nodeName?d.appendChild(h.create("p",null,e).firstChild):h.insertAfter(h.create("p",null,e),d),b.nodeChanged())))}),b.addCommand("WP_Code",function(){b.formatter.toggle("code")}),b.addCommand("WP_Page",function(){b.execCommand("WP_More","nextpage")}),b.addCommand("WP_Help",function(){function c(a,b){var c="<tr>",d=0;for(b=b||1,h(a,function(a,b){c+="<td><kbd>"+b+"</kbd></td><td>"+i(a)+"</td>",d++});d<b;)c+="<td></td><td></td>",d++;return c+"</tr>"}var d,e,f,g,j=i(a.Env.mac?"Ctrl + Alt + letter:":"Shift + Alt + letter:"),k=i(a.Env.mac?"Cmd + letter:":"Ctrl + letter:"),l=[],m=[],n={},o={},p=0,q=0,r=b.settings.wp_shortcut_labels;r&&(h(r,function(a,b){var d;a.indexOf("meta")!==-1?(p++,d=a.replace("meta","").toLowerCase(),d&&(n[d]=b,p%2===0&&(l.push(c(n,2)),n={}))):a.indexOf("access")!==-1&&(q++,d=a.replace("access","").toLowerCase(),d&&(o[d]=b,q%2===0&&(m.push(c(o,2)),o={})))}),p%2>0&&l.push(c(n,2)),q%2>0&&m.push(c(o,2)),d=[i("Letter"),i("Action"),i("Letter"),i("Action")],d="<tr><th>"+d.join("</th><th>")+"</th></tr>",e='<div class="wp-editor-help">',e=e+"<h2>"+i("Default shortcuts,")+" "+k+'</h2><table class="wp-help-th-center fixed">'+d+l.join("")+"</table><h2>"+i("Additional shortcuts,")+" "+j+'</h2><table class="wp-help-th-center fixed">'+d+m.join("")+"</table>",b.plugins.wptextpattern&&(!a.Env.ie||a.Env.ie>8)&&(e=e+"<h2>"+i("When starting a new paragraph with one of these formatting shortcuts followed by a space, the formatting will be applied automatically. Press Backspace or Escape to undo.")+'</h2><table class="wp-help-th-center fixed">'+c({"*":"Bullet list","1.":"Numbered list"})+c({"-":"Bullet list","1)":"Numbered list"})+"</table>",e=e+"<h2>"+i("The following formatting shortcuts are replaced when pressing Enter. Press Escape or the Undo button to undo.")+'</h2><table class="wp-help-single">'+c({">":"Blockquote"})+c({"##":"Heading 2"})+c({"###":"Heading 3"})+c({"####":"Heading 4"})+c({"#####":"Heading 5"})+c({"######":"Heading 6"})+c({"---":"Horizontal line"})+"</table>"),e=e+"<h2>"+i("Focus shortcuts:")+'</h2><table class="wp-help-single">'+c({"Alt + F8":"Inline toolbar (when an image, link or preview is selected)"})+c({"Alt + F9":"Editor menu (when enabled)"})+c({"Alt + F10":"Editor toolbar"})+c({"Alt + F11":"Elements path"})+"</table><p>"+i("To move focus to other buttons use Tab or the arrow keys. To return focus to the editor press Escape or use one of the buttons.")+"</p>",e+="</div>",f=b.windowManager.open({title:"Keyboard Shortcuts",items:{type:"container",classes:"wp-help",html:e},buttons:{text:"Close",onclick:"close"}}),f.$el&&(f.$el.find('div[role="application"]').attr("role","document"),g=f.$el.find(".mce-wp-help"),g[0]&&(g.attr("tabindex","0"),g[0].focus(),g.on("keydown",function(a){a.keyCode>=33&&a.keyCode<=40&&a.stopPropagation()}))))}),b.addCommand("WP_Medialib",function(){k&&k.media&&k.media.editor&&k.media.editor.open(b.id)}),b.addButton("wp_more",{tooltip:"Insert Read More tag",onclick:function(){b.execCommand("WP_More","more")}}),b.addButton("wp_page",{tooltip:"Page break",onclick:function(){b.execCommand("WP_More","nextpage")}}),b.addButton("wp_help",{tooltip:"Keyboard Shortcuts",cmd:"WP_Help"}),b.addButton("wp_code",{tooltip:"Code",cmd:"WP_Code",stateSelector:"code"}),k&&k.media&&k.media.editor&&b.addMenuItem("add_media",{text:"Add Media",icon:"wp-media-library",context:"insert",cmd:"WP_Medialib"}),b.addMenuItem("wp_more",{text:"Insert Read More tag",icon:"wp_more",context:"insert",onclick:function(){b.execCommand("WP_More","more")}}),b.addMenuItem("wp_page",{text:"Page break",icon:"wp_page",context:"insert",onclick:function(){b.execCommand("WP_More","nextpage")}}),b.on("BeforeExecCommand",function(c){!a.Env.webkit||"InsertUnorderedList"!==c.command&&"InsertOrderedList"!==c.command||(f||(f=b.dom.create("style",{type:"text/css"},"#tinymce,#tinymce span,#tinymce li,#tinymce li>span,#tinymce p,#tinymce p>span{font:medium sans-serif;color:#000;line-height:normal;}")),b.getDoc().head.appendChild(f))}),b.on("ExecCommand",function(c){a.Env.webkit&&f&&("InsertUnorderedList"===c.command||"InsertOrderedList"===c.command)&&b.dom.remove(f)}),b.on("init",function(){var c=a.Env,d=["mceContentBody"],e=b.getDoc(),f=b.dom;if(c.iOS&&f.addClass(e.documentElement,"ios"),"rtl"===b.getParam("directionality")&&(d.push("rtl"),f.setAttrib(e.documentElement,"dir","rtl")),f.setAttrib(e.documentElement,"lang",b.getParam("wp_lang_attr")),c.ie?9===parseInt(c.ie,10)?d.push("ie9"):8===parseInt(c.ie,10)?d.push("ie8"):c.ie<8&&d.push("ie7"):c.webkit&&d.push("webkit"),d.push("wp-editor"),h(d,function(a){a&&f.addClass(e.body,a)}),b.on("BeforeSetContent",function(a){a.content&&(a.content=a.content.replace(/<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)( [^>]*)?>/gi,"<$1$2>").replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)>\s*<\/p>/gi,"</$1>"))}),j&&j(document).triggerHandler("tinymce-editor-init",[b]),window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&f.bind(e,"dragstart dragend dragover drop",function(a){j&&j(document).trigger(new j.Event(a))}),b.getParam("wp_paste_filters",!0)&&(b.on("PastePreProcess",function(b){b.content=b.content.replace(/<br class="?Apple-interchange-newline"?>/gi,""),a.Env.webkit||(b.content=b.content.replace(/(<[^>]+) style="[^"]*"([^>]*>)/gi,"$1$2"),b.content=b.content.replace(/(<[^>]+) data-mce-style=([^>]+>)/gi,"$1 style=$2"))}),b.on("PastePostProcess",function(c){b.$("p",c.node).each(function(a,b){f.isEmpty(b)&&f.remove(b)}),a.isIE&&b.$("a",c.node).find("font, u").each(function(a,b){f.remove(b,!0)})})),b.settings.wp_shortcut_labels&&b.theme.panel){var g={},i="Shift+Alt+",k="Ctrl+";a.Env.mac&&(i="\u2303\u2325",k="\u2318"),h(b.settings.wp_shortcut_labels,function(a,b){g[b]=a.replace("access",i).replace("meta",k)}),h(b.theme.panel.find("button"),function(a){a&&a.settings.tooltip&&g.hasOwnProperty(a.settings.tooltip)&&(a.settings.tooltip=b.translate(a.settings.tooltip)+" ("+g[a.settings.tooltip]+")")}),h(b.theme.panel.find("listbox"),function(a){a&&"Paragraph"===a.settings.text&&h(a.settings.values,function(a){a.text&&g.hasOwnProperty(a.text)&&(a.shortcut="("+g[a.text]+")")})})}}),b.on("SaveContent",function(a){return!b.inline&&b.isHidden()?void(a.content=a.element.value):(a.content=a.content.replace(/<p>(?:<br ?\/?>|\u00a0|\uFEFF| )*<\/p>/g,"<p> </p>"),void(l&&(a.content=k.editor.removep(a.content))))}),b.on("preInit",function(){var c="@[id|accesskey|class|dir|lang|style|tabindex|title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],i,b,script[src|async|defer|type|charset|crossorigin|integrity]";b.schema.addValidElements(c),a.Env.iOS&&(b.settings.height=300),h({c:"JustifyCenter",r:"JustifyRight",l:"JustifyLeft",j:"JustifyFull",q:"mceBlockQuote",u:"InsertUnorderedList",o:"InsertOrderedList",m:"WP_Medialib",z:"WP_Adv",t:"WP_More",d:"Strikethrough",h:"WP_Help",p:"WP_Page",x:"WP_Code"},function(a,c){b.shortcuts.add("access+"+c,"",a)}),b.addShortcut("meta+s","",function(){k&&k.autosave&&k.autosave.server.triggerSave()}),window.getUserSetting("editor_plain_text_paste_warning")>1&&(b.settings.paste_plaintext_inform=!1),a.Env.mac&&a.$(b.iframeElement).attr("title",i("Rich Text Area. Press Control-Option-H for help."))}),b.on("PastePlainTextToggle",function(a){if(a.state===!0){var b=parseInt(window.getUserSetting("editor_plain_text_paste_warning"),10)||0;b<2&&window.setUserSetting("editor_plain_text_paste_warning",++b)}}),b.on("preinit",function(){function c(c,d){function e(){if(!f)return this;var b,c,d=window.pageXOffset||document.documentElement.scrollLeft,e=window.pageYOffset||document.documentElement.scrollTop,h=window.innerWidth,i=window.innerHeight,m=q?q.getBoundingClientRect():{top:0,right:h,bottom:i,left:0,width:h,height:i},n=this.getEl(),o=n.offsetWidth,r=n.clientHeight,s=f.getBoundingClientRect(),t=(s.left+s.right)/2,u=5,v=r+u,w=p?p.getBoundingClientRect().bottom:0,x=j?j.getBoundingClientRect().bottom:0,y=k?i-k.getBoundingClientRect().top:0,z=l?i-l.getBoundingClientRect().top:0,A=Math.max(0,w,x,m.top),B=Math.max(0,y,z,i-m.bottom),C=s.top+m.top-A,D=i-m.top-s.bottom-B,E=i-A-B,F="",G=0,H=0;return C>=E||D>=E?(this.scrolling=!0,this.hide(),this.scrolling=!1,this):(a.Env.iOS&&"IMG"===f.nodeName&&(G=54,H=46),this.bottom?D>=v?(F=" mce-arrow-up",b=s.bottom+m.top+e-H):C>=v&&(F=" mce-arrow-down",b=s.top+m.top+e-r+G):C>=v?(F=" mce-arrow-down",b=s.top+m.top+e-r+G):D>=v&&E/2>s.bottom+m.top-A&&(F=" mce-arrow-up",b=s.bottom+m.top+e-H),"undefined"==typeof b&&(b=e+A+u+H),c=t-o/2+m.left+d,s.left<0||s.right>m.width?c=m.left+d+(m.width-o)/2:o>=h?(F+=" mce-arrow-full",c=0):c<0&&s.left+o>h||c+o>h&&s.right-o<0?c=(h-o)/2:c<m.left+d?(F+=" mce-arrow-left",c=s.left+m.left+d):c+o>m.width+m.left+d&&(F+=" mce-arrow-right",c=s.right-o+m.left+d),a.Env.iOS&&"IMG"===f.nodeName&&(F=F.replace(/ ?mce-arrow-(up|down)/g,"")),n.className=n.className.replace(/ ?mce-arrow-[\w]+/g,"")+F,g.setStyles(n,{left:c,top:b}),this)}var i,o,s=[];return h(c,function(a){function c(){var c=b.selection;"bullist"===d&&c.selectorChanged("ul > li",function(b,c){for(var d,e=c.parents.length;e--&&(d=c.parents[e].nodeName,"OL"!==d&&"UL"!=d););a.active(b&&"UL"===d)}),"numlist"===d&&c.selectorChanged("ol > li",function(b,c){for(var d,e=c.parents.length;e--&&(d=c.parents[e].nodeName,"OL"!==d&&"UL"!==d););a.active(b&&"OL"===d)}),a.settings.stateSelector&&c.selectorChanged(a.settings.stateSelector,function(b){a.active(b)},!0),a.settings.disabledStateSelector&&c.selectorChanged(a.settings.disabledStateSelector,function(b){a.disabled(b)})}var d;"|"===a?o=null:m.has(a)?(a={type:a},n.toolbar_items_size&&(a.size=n.toolbar_items_size),s.push(a),o=null):(o||(o={type:"buttongroup",items:[]},s.push(o)),b.buttons[a]&&(d=a,a=b.buttons[d],"function"==typeof a&&(a=a()),a.type=a.type||"button",n.toolbar_items_size&&(a.size=n.toolbar_items_size),a=m.create(a),o.items.push(a),b.initialized?c():b.on("init",c)))}),i=m.create({type:"panel",layout:"stack",classes:"toolbar-grp inline-toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:[{type:"toolbar",layout:"flow",items:s}]}),i.bottom=d,i.on("show",function(){this.reposition(),r&&a.$(".mce-widget.mce-tooltip").addClass("wp-hide-mce-tooltip")}),i.on("hide",function(){r&&a.$(".mce-widget.mce-tooltip").removeClass("wp-hide-mce-tooltip")}),i.on("keydown",function(a){27===a.keyCode&&(this.hide(),b.focus())}),b.on("remove",function(){i.remove()}),i.reposition=e,i.hide().renderTo(document.body),i}function d(a){e&&(e.tempHide||"hide"===a.type||"blur"===a.type?(e.hide(),e=!1):"resizewindow"!==a.type&&"scrollwindow"!==a.type&&"resize"!==a.type&&"scroll"!==a.type||e.blockHide||(clearTimeout(i),i=setTimeout(function(){e&&"function"==typeof e.show&&(e.scrolling=!1,e.show())},250),e.scrolling=!0,e.hide()))}var e,f,i,j,k,l,m=a.ui.Factory,n=b.settings,o=b.getContainer(),p=document.getElementById("wpadminbar"),q=document.getElementById(b.id+"_ifr"),r=b.rtl&&/Chrome/.test(navigator.userAgent);o&&(j=a.$(".mce-toolbar-grp",o)[0],k=a.$(".mce-statusbar",o)[0]),"content"===b.id&&(l=document.getElementById("post-status-info")),b.shortcuts.add("alt+119","",function(){var a;e&&(a=e.find("toolbar")[0],a&&a.focus(!0))}),b.on("nodechange",function(a){var c=b.selection.isCollapsed(),d={element:a.element,parents:a.parents,collapsed:c};b.fire("wptoolbar",d),f=d.selection||d.element,e&&e!==d.toolbar&&e.hide(),d.toolbar?(e=d.toolbar,e.visible()?e.reposition():e.show()):e=!1}),b.on("focus",function(){e&&e.show()}),b.on("resizewindow scrollwindow",d),b.dom.bind(b.getWin(),"resize scroll",d),b.on("remove",function(){b.off("resizewindow scrollwindow",d),b.dom.unbind(b.getWin(),"resize scroll",d)}),b.on("blur hide",d),b.wp=b.wp||{},b.wp._createToolbar=c},!0),{_showButtons:d,_hideButtons:d,_setEmbed:d,_getEmbed:d}})}(window.tinymce);
\ No newline at end of file
+!function(a){(!a.ui.FloatPanel.zIndex||a.ui.FloatPanel.zIndex<100100)&&(a.ui.FloatPanel.zIndex=100100),a.PluginManager.add("wordpress",function(b){function c(c){var d,f,i,j=0;f="hide"===c,b.theme.panel&&(i=b.theme.panel.find(".toolbar:not(.menubar)")),!i||i.length<2||"hide"===c&&!i[1].visible()||(!c&&i[1].visible()&&(c="hide"),h(i,function(a,b){b>0&&("hide"===c?(a.hide(),j+=30):(a.show(),j-=30))}),j&&!f&&(a.Env.iOS||(d=b.getContentAreaContainer().firstChild,g.setStyle(d,"height",d.clientHeight+j)),"hide"===c?(setUserSetting("hidetb","0"),e&&e.active(!1)):(setUserSetting("hidetb","1"),e&&e.active(!0))),b.fire("wp-toolbar-toggle"))}function d(){}var e,f,g=a.DOM,h=a.each,i=b.editorManager.i18n.translate,j=window.jQuery,k=window.wp,l=k&&k.editor&&k.editor.autop&&b.getParam("wpautop",!0);return j&&j(document).triggerHandler("tinymce-editor-setup",[b]),b.addButton("wp_adv",{tooltip:"Toolbar Toggle",cmd:"WP_Adv",onPostRender:function(){e=this,e.active("1"===getUserSetting("hidetb"))}}),b.on("PostRender",function(){b.getParam("wordpress_adv_hidden",!0)&&"0"===getUserSetting("hidetb","0")&&c("hide")}),b.addCommand("WP_Adv",function(){c()}),b.on("focus",function(){window.wpActiveEditor=b.id}),b.on("BeforeSetContent",function(b){var c;b.content&&(b.content.indexOf("<!--more")!==-1&&(c=i("Read more..."),b.content=b.content.replace(/<!--more(.*?)-->/g,function(b,d){return'<img src="'+a.Env.transparentSrc+'" data-wp-more="more" data-wp-more-text="'+d+'" class="wp-more-tag mce-wp-more" alt="" title="'+c+'" data-mce-resize="false" data-mce-placeholder="1" />'})),b.content.indexOf("<!--nextpage-->")!==-1&&(c=i("Page break"),b.content=b.content.replace(/<!--nextpage-->/g,'<img src="'+a.Env.transparentSrc+'" data-wp-more="nextpage" class="wp-more-tag mce-wp-nextpage" alt="" title="'+c+'" data-mce-resize="false" data-mce-placeholder="1" />')),b.load&&"raw"!==b.format&&(l?b.content=k.editor.autop(b.content):b.content=b.content.replace(/-->\s+<!--/g,"--><!--")),b.content.indexOf("<script")===-1&&b.content.indexOf("<style")===-1||(b.content=b.content.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/g,function(b,c){return'<img src="'+a.Env.transparentSrc+'" data-wp-preserve="'+encodeURIComponent(b)+'" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<'+c+'>" title="<'+c+'>" />'})))}),b.on("setcontent",function(){b.$("p").each(function(b,c){if(c.innerHTML&&c.innerHTML.length<10){var d=a.trim(c.innerHTML);d&&" "!==d||(c.innerHTML=a.Env.ie&&a.Env.ie<11?"":'<br data-mce-bogus="1">')}})}),b.on("PostProcess",function(a){a.get&&(a.content=a.content.replace(/<img[^>]+>/g,function(a){var b,c,d="";return a.indexOf('data-wp-more="more"')!==-1?((b=a.match(/data-wp-more-text="([^"]+)"/))&&(d=b[1]),c="<!--more"+d+"-->"):a.indexOf('data-wp-more="nextpage"')!==-1?c="<!--nextpage-->":a.indexOf("data-wp-preserve")!==-1&&(b=a.match(/ data-wp-preserve="([^"]+)"/))&&(c=decodeURIComponent(b[1])),c||a}))}),b.on("ResolveName",function(a){var c;"IMG"===a.target.nodeName&&(c=b.dom.getAttrib(a.target,"data-wp-more"))&&(a.name=c)}),b.addCommand("WP_More",function(c){var d,e,f,g="wp-more-tag",h=b.dom,j=b.selection.getNode(),k=b.getBody();return c=c||"more",g+=" mce-wp-"+c,f="more"===c?"Read more...":"Next page",f=i(f),e='<img src="'+a.Env.transparentSrc+'" alt="" title="'+f+'" class="'+g+'" data-wp-more="'+c+'" data-mce-resize="false" data-mce-placeholder="1" />',j===k||"P"===j.nodeName&&j.parentNode===k?void b.insertContent(e):(d=h.getParent(j,function(a){return!(!a.parentNode||a.parentNode!==k)},b.getBody()),void(d&&("P"===d.nodeName?d.appendChild(h.create("p",null,e).firstChild):h.insertAfter(h.create("p",null,e),d),b.nodeChanged())))}),b.addCommand("WP_Code",function(){b.formatter.toggle("code")}),b.addCommand("WP_Page",function(){b.execCommand("WP_More","nextpage")}),b.addCommand("WP_Help",function(){function c(a,b){var c="<tr>",d=0;for(b=b||1,h(a,function(a,b){c+="<td><kbd>"+b+"</kbd></td><td>"+i(a)+"</td>",d++});d<b;)c+="<td></td><td></td>",d++;return c+"</tr>"}var d,e,f,g,j=i(a.Env.mac?"Ctrl + Alt + letter:":"Shift + Alt + letter:"),k=i(a.Env.mac?"Cmd + letter:":"Ctrl + letter:"),l=[],m=[],n={},o={},p=0,q=0,r=b.settings.wp_shortcut_labels;r&&(h(r,function(a,b){var d;a.indexOf("meta")!==-1?(p++,d=a.replace("meta","").toLowerCase(),d&&(n[d]=b,p%2===0&&(l.push(c(n,2)),n={}))):a.indexOf("access")!==-1&&(q++,d=a.replace("access","").toLowerCase(),d&&(o[d]=b,q%2===0&&(m.push(c(o,2)),o={})))}),p%2>0&&l.push(c(n,2)),q%2>0&&m.push(c(o,2)),d=[i("Letter"),i("Action"),i("Letter"),i("Action")],d="<tr><th>"+d.join("</th><th>")+"</th></tr>",e='<div class="wp-editor-help">',e=e+"<h2>"+i("Default shortcuts,")+" "+k+'</h2><table class="wp-help-th-center fixed">'+d+l.join("")+"</table><h2>"+i("Additional shortcuts,")+" "+j+'</h2><table class="wp-help-th-center fixed">'+d+m.join("")+"</table>",b.plugins.wptextpattern&&(!a.Env.ie||a.Env.ie>8)&&(e=e+"<h2>"+i("When starting a new paragraph with one of these formatting shortcuts followed by a space, the formatting will be applied automatically. Press Backspace or Escape to undo.")+'</h2><table class="wp-help-th-center fixed">'+c({"*":"Bullet list","1.":"Numbered list"})+c({"-":"Bullet list","1)":"Numbered list"})+"</table>",e=e+"<h2>"+i("The following formatting shortcuts are replaced when pressing Enter. Press Escape or the Undo button to undo.")+'</h2><table class="wp-help-single">'+c({">":"Blockquote"})+c({"##":"Heading 2"})+c({"###":"Heading 3"})+c({"####":"Heading 4"})+c({"#####":"Heading 5"})+c({"######":"Heading 6"})+c({"---":"Horizontal line"})+"</table>"),e=e+"<h2>"+i("Focus shortcuts:")+'</h2><table class="wp-help-single">'+c({"Alt + F8":"Inline toolbar (when an image, link or preview is selected)"})+c({"Alt + F9":"Editor menu (when enabled)"})+c({"Alt + F10":"Editor toolbar"})+c({"Alt + F11":"Elements path"})+"</table><p>"+i("To move focus to other buttons use Tab or the arrow keys. To return focus to the editor press Escape or use one of the buttons.")+"</p>",e+="</div>",f=b.windowManager.open({title:"Keyboard Shortcuts",items:{type:"container",classes:"wp-help",html:e},buttons:{text:"Close",onclick:"close"}}),f.$el&&(f.$el.find('div[role="application"]').attr("role","document"),g=f.$el.find(".mce-wp-help"),g[0]&&(g.attr("tabindex","0"),g[0].focus(),g.on("keydown",function(a){a.keyCode>=33&&a.keyCode<=40&&a.stopPropagation()}))))}),b.addCommand("WP_Medialib",function(){k&&k.media&&k.media.editor&&k.media.editor.open(b.id)}),b.addButton("wp_more",{tooltip:"Insert Read More tag",onclick:function(){b.execCommand("WP_More","more")}}),b.addButton("wp_page",{tooltip:"Page break",onclick:function(){b.execCommand("WP_More","nextpage")}}),b.addButton("wp_help",{tooltip:"Keyboard Shortcuts",cmd:"WP_Help"}),b.addButton("wp_code",{tooltip:"Code",cmd:"WP_Code",stateSelector:"code"}),k&&k.media&&k.media.editor&&b.addMenuItem("add_media",{text:"Add Media",icon:"wp-media-library",context:"insert",cmd:"WP_Medialib"}),b.addMenuItem("wp_more",{text:"Insert Read More tag",icon:"wp_more",context:"insert",onclick:function(){b.execCommand("WP_More","more")}}),b.addMenuItem("wp_page",{text:"Page break",icon:"wp_page",context:"insert",onclick:function(){b.execCommand("WP_More","nextpage")}}),b.on("BeforeExecCommand",function(c){!a.Env.webkit||"InsertUnorderedList"!==c.command&&"InsertOrderedList"!==c.command||(f||(f=b.dom.create("style",{type:"text/css"},"#tinymce,#tinymce span,#tinymce li,#tinymce li>span,#tinymce p,#tinymce p>span{font:medium sans-serif;color:#000;line-height:normal;}")),b.getDoc().head.appendChild(f))}),b.on("ExecCommand",function(c){a.Env.webkit&&f&&("InsertUnorderedList"===c.command||"InsertOrderedList"===c.command)&&b.dom.remove(f)}),b.on("init",function(){var c=a.Env,d=["mceContentBody"],e=b.getDoc(),f=b.dom;if(c.iOS&&f.addClass(e.documentElement,"ios"),"rtl"===b.getParam("directionality")&&(d.push("rtl"),f.setAttrib(e.documentElement,"dir","rtl")),f.setAttrib(e.documentElement,"lang",b.getParam("wp_lang_attr")),c.ie?9===parseInt(c.ie,10)?d.push("ie9"):8===parseInt(c.ie,10)?d.push("ie8"):c.ie<8&&d.push("ie7"):c.webkit&&d.push("webkit"),d.push("wp-editor"),h(d,function(a){a&&f.addClass(e.body,a)}),b.on("BeforeSetContent",function(a){a.content&&(a.content=a.content.replace(/<p>\s*<(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)( [^>]*)?>/gi,"<$1$2>").replace(/<\/(p|div|ul|ol|dl|table|blockquote|h[1-6]|fieldset|pre)>\s*<\/p>/gi,"</$1>"))}),j&&j(document).triggerHandler("tinymce-editor-init",[b]),window.tinyMCEPreInit&&window.tinyMCEPreInit.dragDropUpload&&f.bind(e,"dragstart dragend dragover drop",function(a){j&&j(document).trigger(new j.Event(a))}),b.getParam("wp_paste_filters",!0)&&(b.on("PastePreProcess",function(b){b.content=b.content.replace(/<br class="?Apple-interchange-newline"?>/gi,""),a.Env.webkit||(b.content=b.content.replace(/(<[^>]+) style="[^"]*"([^>]*>)/gi,"$1$2"),b.content=b.content.replace(/(<[^>]+) data-mce-style=([^>]+>)/gi,"$1 style=$2"))}),b.on("PastePostProcess",function(c){b.$("p",c.node).each(function(a,b){f.isEmpty(b)&&f.remove(b)}),a.isIE&&b.$("a",c.node).find("font, u").each(function(a,b){f.remove(b,!0)})})),b.settings.wp_shortcut_labels&&b.theme.panel){var g={},i="Shift+Alt+",k="Ctrl+";a.Env.mac&&(i="\u2303\u2325",k="\u2318"),h(b.settings.wp_shortcut_labels,function(a,b){g[b]=a.replace("access",i).replace("meta",k)}),h(b.theme.panel.find("button"),function(a){a&&a.settings.tooltip&&g.hasOwnProperty(a.settings.tooltip)&&(a.settings.tooltip=b.translate(a.settings.tooltip)+" ("+g[a.settings.tooltip]+")")}),h(b.theme.panel.find("listbox"),function(a){a&&"Paragraph"===a.settings.text&&h(a.settings.values,function(a){a.text&&g.hasOwnProperty(a.text)&&(a.shortcut="("+g[a.text]+")")})})}}),b.on("SaveContent",function(a){return!b.inline&&b.isHidden()?void(a.content=a.element.value):(a.content=a.content.replace(/<p>(?:<br ?\/?>|\u00a0|\uFEFF| )*<\/p>/g,"<p> </p>"),void(l?a.content=k.editor.removep(a.content):a.content=a.content.replace(/-->\s*<!-- wp:/g,"-->\n\n<!-- wp:")))}),b.on("preInit",function(){var c="@[id|accesskey|class|dir|lang|style|tabindex|title|contenteditable|draggable|dropzone|hidden|spellcheck|translate],i,b,script[src|async|defer|type|charset|crossorigin|integrity]";b.schema.addValidElements(c),a.Env.iOS&&(b.settings.height=300),h({c:"JustifyCenter",r:"JustifyRight",l:"JustifyLeft",j:"JustifyFull",q:"mceBlockQuote",u:"InsertUnorderedList",o:"InsertOrderedList",m:"WP_Medialib",z:"WP_Adv",t:"WP_More",d:"Strikethrough",h:"WP_Help",p:"WP_Page",x:"WP_Code"},function(a,c){b.shortcuts.add("access+"+c,"",a)}),b.addShortcut("meta+s","",function(){k&&k.autosave&&k.autosave.server.triggerSave()}),window.getUserSetting("editor_plain_text_paste_warning")>1&&(b.settings.paste_plaintext_inform=!1),a.Env.mac&&a.$(b.iframeElement).attr("title",i("Rich Text Area. Press Control-Option-H for help."))}),b.on("PastePlainTextToggle",function(a){if(a.state===!0){var b=parseInt(window.getUserSetting("editor_plain_text_paste_warning"),10)||0;b<2&&window.setUserSetting("editor_plain_text_paste_warning",++b)}}),b.on("preinit",function(){function c(c,d){function e(){if(!f)return this;var b,c,d=window.pageXOffset||document.documentElement.scrollLeft,e=window.pageYOffset||document.documentElement.scrollTop,h=window.innerWidth,i=window.innerHeight,m=q?q.getBoundingClientRect():{top:0,right:h,bottom:i,left:0,width:h,height:i},n=this.getEl(),o=n.offsetWidth,r=n.clientHeight,s=f.getBoundingClientRect(),t=(s.left+s.right)/2,u=5,v=r+u,w=p?p.getBoundingClientRect().bottom:0,x=j?j.getBoundingClientRect().bottom:0,y=k?i-k.getBoundingClientRect().top:0,z=l?i-l.getBoundingClientRect().top:0,A=Math.max(0,w,x,m.top),B=Math.max(0,y,z,i-m.bottom),C=s.top+m.top-A,D=i-m.top-s.bottom-B,E=i-A-B,F="",G=0,H=0;return C>=E||D>=E?(this.scrolling=!0,this.hide(),this.scrolling=!1,this):(a.Env.iOS&&"IMG"===f.nodeName&&(G=54,H=46),this.bottom?D>=v?(F=" mce-arrow-up",b=s.bottom+m.top+e-H):C>=v&&(F=" mce-arrow-down",b=s.top+m.top+e-r+G):C>=v?(F=" mce-arrow-down",b=s.top+m.top+e-r+G):D>=v&&E/2>s.bottom+m.top-A&&(F=" mce-arrow-up",b=s.bottom+m.top+e-H),"undefined"==typeof b&&(b=e+A+u+H),c=t-o/2+m.left+d,s.left<0||s.right>m.width?c=m.left+d+(m.width-o)/2:o>=h?(F+=" mce-arrow-full",c=0):c<0&&s.left+o>h||c+o>h&&s.right-o<0?c=(h-o)/2:c<m.left+d?(F+=" mce-arrow-left",c=s.left+m.left+d):c+o>m.width+m.left+d&&(F+=" mce-arrow-right",c=s.right-o+m.left+d),a.Env.iOS&&"IMG"===f.nodeName&&(F=F.replace(/ ?mce-arrow-(up|down)/g,"")),n.className=n.className.replace(/ ?mce-arrow-[\w]+/g,"")+F,g.setStyles(n,{left:c,top:b}),this)}var i,o,s=[];return h(c,function(a){function c(){var c=b.selection;"bullist"===d&&c.selectorChanged("ul > li",function(b,c){for(var d,e=c.parents.length;e--&&(d=c.parents[e].nodeName,"OL"!==d&&"UL"!=d););a.active(b&&"UL"===d)}),"numlist"===d&&c.selectorChanged("ol > li",function(b,c){for(var d,e=c.parents.length;e--&&(d=c.parents[e].nodeName,"OL"!==d&&"UL"!==d););a.active(b&&"OL"===d)}),a.settings.stateSelector&&c.selectorChanged(a.settings.stateSelector,function(b){a.active(b)},!0),a.settings.disabledStateSelector&&c.selectorChanged(a.settings.disabledStateSelector,function(b){a.disabled(b)})}var d;"|"===a?o=null:m.has(a)?(a={type:a},n.toolbar_items_size&&(a.size=n.toolbar_items_size),s.push(a),o=null):(o||(o={type:"buttongroup",items:[]},s.push(o)),b.buttons[a]&&(d=a,a=b.buttons[d],"function"==typeof a&&(a=a()),a.type=a.type||"button",n.toolbar_items_size&&(a.size=n.toolbar_items_size),a=m.create(a),o.items.push(a),b.initialized?c():b.on("init",c)))}),i=m.create({type:"panel",layout:"stack",classes:"toolbar-grp inline-toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:[{type:"toolbar",layout:"flow",items:s}]}),i.bottom=d,i.on("show",function(){this.reposition(),r&&a.$(".mce-widget.mce-tooltip").addClass("wp-hide-mce-tooltip")}),i.on("hide",function(){r&&a.$(".mce-widget.mce-tooltip").removeClass("wp-hide-mce-tooltip")}),i.on("keydown",function(a){27===a.keyCode&&(this.hide(),b.focus())}),b.on("remove",function(){i.remove()}),i.reposition=e,i.hide().renderTo(document.body),i}function d(a){e&&(e.tempHide||"hide"===a.type||"blur"===a.type?(e.hide(),e=!1):"resizewindow"!==a.type&&"scrollwindow"!==a.type&&"resize"!==a.type&&"scroll"!==a.type||e.blockHide||(clearTimeout(i),i=setTimeout(function(){e&&"function"==typeof e.show&&(e.scrolling=!1,e.show())},250),e.scrolling=!0,e.hide()))}var e,f,i,j,k,l,m=a.ui.Factory,n=b.settings,o=b.getContainer(),p=document.getElementById("wpadminbar"),q=document.getElementById(b.id+"_ifr"),r=b.rtl&&/Chrome/.test(navigator.userAgent);o&&(j=a.$(".mce-toolbar-grp",o)[0],k=a.$(".mce-statusbar",o)[0]),"content"===b.id&&(l=document.getElementById("post-status-info")),b.shortcuts.add("alt+119","",function(){var a;e&&(a=e.find("toolbar")[0],a&&a.focus(!0))}),b.on("nodechange",function(a){var c=b.selection.isCollapsed(),d={element:a.element,parents:a.parents,collapsed:c};b.fire("wptoolbar",d),f=d.selection||d.element,e&&e!==d.toolbar&&e.hide(),d.toolbar?(e=d.toolbar,e.visible()?e.reposition():e.show()):e=!1}),b.on("focus",function(){e&&e.show()}),b.on("resizewindow scrollwindow",d),b.dom.bind(b.getWin(),"resize scroll",d),b.on("remove",function(){b.off("resizewindow scrollwindow",d),b.dom.unbind(b.getWin(),"resize scroll",d)}),b.on("blur hide",d),b.wp=b.wp||{},b.wp._createToolbar=c},!0),{_showButtons:d,_hideButtons:d,_setEmbed:d,_getEmbed:d}})}(window.tinymce);
\ No newline at end of file
} );
editor.addButton( 'wp_img_edit', {
- tooltip: 'Edit ', // trailing space is needed, used for context
+ tooltip: 'Edit|button', // '|button' is not displayed, only used for context
icon: 'dashicon dashicons-edit',
onclick: function() {
editImage( editor.selection.getNode() );
-tinymce.PluginManager.add("wpeditimage",function(a){function b(b){return!(!a.dom.getAttrib(b,"data-mce-placeholder")&&!a.dom.getAttrib(b,"data-mce-object"))}function c(b){var c=a.$(b).parents("[contenteditable]");return c&&"false"===c.attr("contenteditable")}function d(b){return b.replace(/(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g,function(b,c,d){var e,f,g,h,i,j;return e=c.match(/id=['"]([^'"]*)['"] ?/),e&&(c=c.replace(e[0],"")),f=c.match(/align=['"]([^'"]*)['"] ?/),f&&(c=c.replace(f[0],"")),g=c.match(/class=['"]([^'"]*)['"] ?/),g&&(c=c.replace(g[0],"")),j=c.match(/width=['"]([0-9]*)['"] ?/),j&&(c=c.replace(j[0],"")),d=q(d),i=d.match(/((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i),i&&i[2]?(h=q(i[2]),i=q(i[1])):(h=q(c).replace(/caption=['"]/,"").replace(/['"]$/,""),i=d),e=e&&e[1]?e[1].replace(/[<>&]+/g,""):"",f=f&&f[1]?f[1]:"alignnone",g=g&&g[1]?" "+g[1].replace(/[<>&]+/g,""):"",!j&&i&&(j=i.match(/width=['"]([0-9]*)['"]/)),j&&j[1]&&(j=j[1]),j&&h?(j=parseInt(j,10),a.getParam("wpeditimage_html5_captions")||(j+=10),'<div class="mceTemp"><dl id="'+e+'" class="wp-caption '+f+g+'" style="width: '+j+'px"><dt class="wp-caption-dt">'+i+'</dt><dd class="wp-caption-dd">'+h+"</dd></dl></div>"):d})}function e(a){return a.replace(/(?:<div [^>]+mceTemp[^>]+>)?\s*(<dl [^>]+wp-caption[^>]+>[\s\S]+?<\/dl>)\s*(?:<\/div>)?/g,function(a,b){var c="";return b.indexOf("<img ")===-1||b.indexOf("</p>")!==-1?b.replace(/<d[ldt]( [^>]+)?>/g,"").replace(/<\/d[ldt]>/g,""):(c=b.replace(/\s*<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>\s*/gi,function(a,b,c,d){var e,f,g,h;return h=c.match(/width="([0-9]*)"/),h=h&&h[1]?h[1]:"",f=b.match(/class="([^"]*)"/),f=f&&f[1]?f[1]:"",g=f.match(/align[a-z]+/i)||"alignnone",h&&d?(e=b.match(/id="([^"]*)"/),e=e&&e[1]?e[1]:"",f=f.replace(/wp-caption ?|align[a-z]+ ?/gi,""),f&&(f=' class="'+f+'"'),d=d.replace(/\r\n|\r/g,"\n").replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g,function(a){return a.replace(/[\r\n\t]+/," ")}),d=d.replace(/\s*\n\s*/g,"<br />"),'[caption id="'+e+'" align="'+g+'" width="'+h+'"'+f+"]"+c+" "+d+"[/caption]"):("alignnone"!==g[0]&&(c=c.replace(/><img/,' class="'+g[0]+'"><img')),c)}),c.indexOf("[caption")===-1&&(c=b.replace(/[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi,"<p>$1</p>$2")),c)})}function f(b){var c,d,e,f,g,h,i,j,k=[],l=a.dom,m=/^\d+$/;return e={attachment_id:!1,size:"custom",caption:"",align:"none",extraClasses:"",link:!1,linkUrl:"",linkClassName:"",linkTargetBlank:!1,linkRel:"",title:""},e.url=l.getAttrib(b,"src"),e.alt=l.getAttrib(b,"alt"),e.title=l.getAttrib(b,"title"),i=l.getAttrib(b,"width"),j=l.getAttrib(b,"height"),(!m.test(i)||parseInt(i,10)<1)&&(i=b.naturalWidth||b.width),(!m.test(j)||parseInt(j,10)<1)&&(j=b.naturalHeight||b.height),e.customWidth=e.width=i,e.customHeight=e.height=j,c=tinymce.explode(b.className," "),d=[],tinymce.each(c,function(a){/^wp-image/.test(a)?e.attachment_id=parseInt(a.replace("wp-image-",""),10):/^align/.test(a)?e.align=a.replace("align",""):/^size/.test(a)?e.size=a.replace("size-",""):d.push(a)}),e.extraClasses=d.join(" "),f=l.getParents(b,".wp-caption"),f.length&&(f=f[0],c=f.className.split(" "),tinymce.each(c,function(a){/^align/.test(a)?e.align=a.replace("align",""):a&&"wp-caption"!==a&&k.push(a)}),e.captionClassName=k.join(" "),g=l.select("dd.wp-caption-dd",f),g.length&&(g=g[0],e.caption=a.serializer.serialize(g).replace(/<br[^>]*>/g,"$&\n").replace(/^<p>/,"").replace(/<\/p>$/,""))),b.parentNode&&"A"===b.parentNode.nodeName&&(h=b.parentNode,e.linkUrl=l.getAttrib(h,"href"),e.linkTargetBlank="_blank"===l.getAttrib(h,"target"),e.linkRel=l.getAttrib(h,"rel"),e.linkClassName=h.className),e}function g(a){return a&&!!(a.textContent||a.innerText).replace(/\ufeff/g,"")}function h(b){return!b||b.indexOf("<")===-1&&b.indexOf(">")===-1?b:(m||(m=new tinymce.html.Serializer({},a.schema)),m.serialize(a.parser.parse(b,{forced_root_block:!1})))}function i(b,c){var d,e,f,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y=a.dom;d=tinymce.explode(c.extraClasses," "),d||(d=[]),c.caption||d.push("align"+c.align),c.attachment_id&&(d.push("wp-image-"+c.attachment_id),c.size&&"custom"!==c.size&&d.push("size-"+c.size)),s=c.width,t=c.height,"custom"===c.size&&(s=c.customWidth,t=c.customHeight),q={src:c.url,width:s||null,height:t||null,title:c.title||null,"class":d.join(" ")||null},y.setAttribs(b,q),a.$(b).attr("alt",c.alt||""),r={href:c.linkUrl,rel:c.linkRel||null,target:c.linkTargetBlank?"_blank":null,"class":c.linkClassName||null},b.parentNode&&"A"===b.parentNode.nodeName&&!g(b.parentNode)?c.linkUrl?y.setAttribs(b.parentNode,r):y.remove(b.parentNode,!0):c.linkUrl&&((l=y.getParent(b,"a"))&&y.insertAfter(b,l),l=y.create("a",r),b.parentNode.insertBefore(l,b),l.appendChild(b)),m=a.dom.getParent(b,".mceTemp"),f=b.parentNode&&"A"===b.parentNode.nodeName&&!g(b.parentNode)?b.parentNode:b,c.caption?(c.caption=h(c.caption),p=c.attachment_id?"attachment_"+c.attachment_id:null,u="align"+(c.align||"none"),e="wp-caption "+u,c.captionClassName&&(e+=" "+c.captionClassName.replace(/[<>&]+/g,"")),a.getParam("wpeditimage_html5_captions")||(s=parseInt(s,10),s+=10),m?(o=y.select("dl.wp-caption",m),o.length&&y.setAttribs(o,{id:p,"class":e,style:"width: "+s+"px"}),n=y.select(".wp-caption-dd",m),n.length&&y.setHTML(n[0],c.caption)):(p=p?'id="'+p+'" ':"",i="<dl "+p+'class="'+e+'" style="width: '+s+'px"><dt class="wp-caption-dt"></dt><dd class="wp-caption-dd">'+c.caption+"</dd></dl>",k=y.create("div",{"class":"mceTemp"},i),(j=y.getParent(f,"p"))?j.parentNode.insertBefore(k,j):f.parentNode.insertBefore(k,f),a.$(k).find("dt.wp-caption-dt").append(f),j&&y.isEmpty(j)&&y.remove(j))):m&&(j=y.create("p"),m.parentNode.insertBefore(j,m),j.appendChild(f),y.remove(m)),v=a.$(b),w=v.attr("srcset"),x=v.attr("src"),w&&x&&(x=x.replace(/[?#].*/,""),w.indexOf(x)===-1&&v.attr("srcset",null).attr("sizes",null)),wp.media.events&&wp.media.events.trigger("editor:image-update",{editor:a,metadata:c,image:b}),a.nodeChanged()}function j(b){var c,d,e;return"undefined"!=typeof wp&&wp.media?(e=f(b),wp.media.events.trigger("editor:image-edit",{editor:a,metadata:e,image:b}),c=wp.media({frame:"image",state:"image-details",metadata:e}),wp.media.events.trigger("editor:frame-create",{frame:c}),d=function(d){a.focus(),a.undoManager.transact(function(){i(b,d)}),c.detach()},c.state("image-details").on("update",d),c.state("replace-image").on("replace",d),c.on("close",function(){a.focus(),c.detach()}),void c.open()):void a.execCommand("mceImage")}function k(b){var c=a.dom.getParent(b,"div.mceTemp");c||"IMG"!==b.nodeName||(c=a.dom.getParent(b,"a")),c?(c.nextSibling?a.selection.select(c.nextSibling):c.previousSibling?a.selection.select(c.previousSibling):a.selection.select(c.parentNode),a.selection.collapse(!0),a.dom.remove(c)):a.dom.remove(b),a.nodeChanged(),a.undoManager.add()}var l,m,n,o,p=tinymce.each,q=tinymce.trim,r=tinymce.Env.iOS;return a.addButton("wp_img_remove",{tooltip:"Remove",icon:"dashicon dashicons-no",onclick:function(){k(a.selection.getNode())}}),a.addButton("wp_img_edit",{tooltip:"Edit ",icon:"dashicon dashicons-edit",onclick:function(){j(a.selection.getNode())}}),p({alignleft:"Align left",aligncenter:"Align center",alignright:"Align right",alignnone:"No alignment"},function(b,c){var d=c.slice(5);a.addButton("wp_img_"+c,{tooltip:b,icon:"dashicon dashicons-align-"+d,cmd:"alignnone"===c?"wpAlignNone":"Justify"+d.slice(0,1).toUpperCase()+d.slice(1),onPostRender:function(){var b=this;a.on("NodeChange",function(d){var e;"IMG"===d.element.nodeName&&(e=a.dom.getParent(d.element,".wp-caption")||d.element,"alignnone"===c?b.active(!/\balign(left|center|right)\b/.test(e.className)):b.active(a.dom.hasClass(e,c)))})}})}),a.once("preinit",function(){a.wp&&a.wp._createToolbar&&(l=a.wp._createToolbar(["wp_img_alignleft","wp_img_aligncenter","wp_img_alignright","wp_img_alignnone","wp_img_edit","wp_img_remove"]))}),a.on("wptoolbar",function(a){"IMG"!==a.element.nodeName||b(a.element)||(a.toolbar=l)}),r&&a.on("init",function(){a.on("touchstart",function(a){"IMG"!==a.target.nodeName||c(a.target)||(n=!0)}),a.dom.bind(a.getDoc(),"touchmove",function(){n=!1}),a.on("touchend",function(b){if(n&&"IMG"===b.target.nodeName&&!c(b.target)){var d=b.target;n=!1,window.setTimeout(function(){a.selection.select(d),a.nodeChanged()},100)}else l&&l.hide()})}),a.on("init",function(){var b=a.dom,c=a.getParam("wpeditimage_html5_captions")?"html5-captions":"html4-captions";b.addClass(a.getBody(),c),tinymce.Env.ie&&tinymce.Env.ie>10&&b.bind(a.getBody(),"mscontrolselect",function(c){"IMG"===c.target.nodeName&&b.getParent(c.target,".wp-caption")?a.getBody().focus():"DL"===c.target.nodeName&&b.hasClass(c.target,"wp-caption")&&c.target.focus()})}),a.on("ObjectResized",function(b){var c=b.target;"IMG"===c.nodeName&&a.undoManager.transact(function(){var d,e,f=a.dom;c.className=c.className.replace(/\bsize-[^ ]+/,""),(d=f.getParent(c,".wp-caption"))&&(e=b.width||f.getAttrib(c,"width"),e&&(e=parseInt(e,10),a.getParam("wpeditimage_html5_captions")||(e+=10),f.setStyle(d,"width",e+"px")))})}),a.on("pastePostProcess",function(b){a.dom.getParent(a.selection.getNode(),"dd.wp-caption-dd")&&(a.$("img, audio, video, object, embed, iframe, script, style",b.node).remove(),a.$("*",b.node).each(function(b,c){a.dom.isBlock(c)&&(tinymce.trim(c.textContent||c.innerText)?(a.dom.insertAfter(a.dom.create("br"),c),a.dom.remove(c,!0)):a.dom.remove(c))}),a.$("br",b.node).each(function(b,c){c.nextSibling&&"BR"!==c.nextSibling.nodeName&&c.previousSibling&&"BR"!==c.previousSibling.nodeName||a.dom.remove(c)}),o=!0)}),a.on("BeforeExecCommand",function(b){var c,d,e,f,g,h,i=b.command,j=a.dom;if("mceInsertContent"===i||"Indent"===i||"Outdent"===i){if(c=a.selection.getNode(),h=j.getParent(c,"div.mceTemp")){if("mceInsertContent"!==i)return b.preventDefault(),b.stopImmediatePropagation(),!1;if(o)return void(o=!1);d=j.create("p"),j.insertAfter(d,h),a.selection.setCursorLocation(d,0),"IMG"===c.nodeName&&a.$(h).remove(),a.nodeChanged()}}else if("JustifyLeft"===i||"JustifyRight"===i||"JustifyCenter"===i||"wpAlignNone"===i){if(c=a.selection.getNode(),f="align"+i.slice(7).toLowerCase(),e=a.dom.getParent(c,".wp-caption"),"IMG"!==c.nodeName&&!e)return;c=e||c,g=a.dom.hasClass(c,f)?" alignnone":" "+f,c.className=q(c.className.replace(/ ?align(left|center|right|none)/g,"")+g),a.nodeChanged(),b.preventDefault(),l&&l.reposition(),a.fire("ExecCommand",{command:i,ui:b.ui,value:b.value})}}),a.on("keydown",function(b){var c,d,e,f,g=a.selection,h=b.keyCode,i=a.dom,j=tinymce.util.VK;if(h===j.ENTER)c=g.getNode(),d=i.getParent(c,"div.mceTemp"),d&&(i.events.cancel(b),tinymce.each(i.select("dt, dd",d),function(a){i.isEmpty(a)&&i.remove(a)}),f=tinymce.Env.ie&&tinymce.Env.ie<11?"":'<br data-mce-bogus="1" />',e=i.create("p",null,f),"DD"===c.nodeName?i.insertAfter(e,d):d.parentNode.insertBefore(e,d),a.nodeChanged(),g.setCursorLocation(e,0));else if((h===j.DELETE||h===j.BACKSPACE)&&(c=g.getNode(),"DIV"===c.nodeName&&i.hasClass(c,"mceTemp")?d=c:"IMG"!==c.nodeName&&"DT"!==c.nodeName&&"A"!==c.nodeName||(d=i.getParent(c,"div.mceTemp")),d))return i.events.cancel(b),k(c),!1}),tinymce.Env.gecko&&a.on("undo redo",function(){"IMG"===a.selection.getNode().nodeName&&a.selection.collapse()}),a.wpSetImgCaption=function(a){return d(a)},a.wpGetImgCaption=function(a){return e(a)},a.on("beforeGetContent",function(b){"raw"!==b.format&&a.$('img[id="__wp-temp-img-id"]').attr("id",null)}),a.on("BeforeSetContent",function(b){"raw"!==b.format&&(b.content=a.wpSetImgCaption(b.content))}),a.on("PostProcess",function(b){b.get&&(b.content=a.wpGetImgCaption(b.content))}),function(){var b;a.on("dragstart",function(){var c=a.selection.getNode();"IMG"===c.nodeName&&(b=a.dom.getParent(c,".mceTemp"),b||"A"!==c.parentNode.nodeName||g(c.parentNode)||(b=c.parentNode))}),a.on("drop",function(c){var d=a.dom,e=tinymce.dom.RangeUtils.getCaretRangeFromPoint(c.clientX,c.clientY,a.getDoc());e&&d.getParent(e.startContainer,".mceTemp")?c.preventDefault():b&&(c.preventDefault(),a.undoManager.transact(function(){e&&a.selection.setRng(e),a.selection.setNode(b),d.remove(b)})),b=null})}(),a.wp=a.wp||{},a.wp.isPlaceholder=b,{_do_shcode:d,_get_shcode:e}});
\ No newline at end of file
+tinymce.PluginManager.add("wpeditimage",function(a){function b(b){return!(!a.dom.getAttrib(b,"data-mce-placeholder")&&!a.dom.getAttrib(b,"data-mce-object"))}function c(b){var c=a.$(b).parents("[contenteditable]");return c&&"false"===c.attr("contenteditable")}function d(b){return b.replace(/(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g,function(b,c,d){var e,f,g,h,i,j;return e=c.match(/id=['"]([^'"]*)['"] ?/),e&&(c=c.replace(e[0],"")),f=c.match(/align=['"]([^'"]*)['"] ?/),f&&(c=c.replace(f[0],"")),g=c.match(/class=['"]([^'"]*)['"] ?/),g&&(c=c.replace(g[0],"")),j=c.match(/width=['"]([0-9]*)['"] ?/),j&&(c=c.replace(j[0],"")),d=q(d),i=d.match(/((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i),i&&i[2]?(h=q(i[2]),i=q(i[1])):(h=q(c).replace(/caption=['"]/,"").replace(/['"]$/,""),i=d),e=e&&e[1]?e[1].replace(/[<>&]+/g,""):"",f=f&&f[1]?f[1]:"alignnone",g=g&&g[1]?" "+g[1].replace(/[<>&]+/g,""):"",!j&&i&&(j=i.match(/width=['"]([0-9]*)['"]/)),j&&j[1]&&(j=j[1]),j&&h?(j=parseInt(j,10),a.getParam("wpeditimage_html5_captions")||(j+=10),'<div class="mceTemp"><dl id="'+e+'" class="wp-caption '+f+g+'" style="width: '+j+'px"><dt class="wp-caption-dt">'+i+'</dt><dd class="wp-caption-dd">'+h+"</dd></dl></div>"):d})}function e(a){return a.replace(/(?:<div [^>]+mceTemp[^>]+>)?\s*(<dl [^>]+wp-caption[^>]+>[\s\S]+?<\/dl>)\s*(?:<\/div>)?/g,function(a,b){var c="";return b.indexOf("<img ")===-1||b.indexOf("</p>")!==-1?b.replace(/<d[ldt]( [^>]+)?>/g,"").replace(/<\/d[ldt]>/g,""):(c=b.replace(/\s*<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>\s*/gi,function(a,b,c,d){var e,f,g,h;return h=c.match(/width="([0-9]*)"/),h=h&&h[1]?h[1]:"",f=b.match(/class="([^"]*)"/),f=f&&f[1]?f[1]:"",g=f.match(/align[a-z]+/i)||"alignnone",h&&d?(e=b.match(/id="([^"]*)"/),e=e&&e[1]?e[1]:"",f=f.replace(/wp-caption ?|align[a-z]+ ?/gi,""),f&&(f=' class="'+f+'"'),d=d.replace(/\r\n|\r/g,"\n").replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g,function(a){return a.replace(/[\r\n\t]+/," ")}),d=d.replace(/\s*\n\s*/g,"<br />"),'[caption id="'+e+'" align="'+g+'" width="'+h+'"'+f+"]"+c+" "+d+"[/caption]"):("alignnone"!==g[0]&&(c=c.replace(/><img/,' class="'+g[0]+'"><img')),c)}),c.indexOf("[caption")===-1&&(c=b.replace(/[\s\S]*?((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)(<p>[\s\S]*<\/p>)?[\s\S]*/gi,"<p>$1</p>$2")),c)})}function f(b){var c,d,e,f,g,h,i,j,k=[],l=a.dom,m=/^\d+$/;return e={attachment_id:!1,size:"custom",caption:"",align:"none",extraClasses:"",link:!1,linkUrl:"",linkClassName:"",linkTargetBlank:!1,linkRel:"",title:""},e.url=l.getAttrib(b,"src"),e.alt=l.getAttrib(b,"alt"),e.title=l.getAttrib(b,"title"),i=l.getAttrib(b,"width"),j=l.getAttrib(b,"height"),(!m.test(i)||parseInt(i,10)<1)&&(i=b.naturalWidth||b.width),(!m.test(j)||parseInt(j,10)<1)&&(j=b.naturalHeight||b.height),e.customWidth=e.width=i,e.customHeight=e.height=j,c=tinymce.explode(b.className," "),d=[],tinymce.each(c,function(a){/^wp-image/.test(a)?e.attachment_id=parseInt(a.replace("wp-image-",""),10):/^align/.test(a)?e.align=a.replace("align",""):/^size/.test(a)?e.size=a.replace("size-",""):d.push(a)}),e.extraClasses=d.join(" "),f=l.getParents(b,".wp-caption"),f.length&&(f=f[0],c=f.className.split(" "),tinymce.each(c,function(a){/^align/.test(a)?e.align=a.replace("align",""):a&&"wp-caption"!==a&&k.push(a)}),e.captionClassName=k.join(" "),g=l.select("dd.wp-caption-dd",f),g.length&&(g=g[0],e.caption=a.serializer.serialize(g).replace(/<br[^>]*>/g,"$&\n").replace(/^<p>/,"").replace(/<\/p>$/,""))),b.parentNode&&"A"===b.parentNode.nodeName&&(h=b.parentNode,e.linkUrl=l.getAttrib(h,"href"),e.linkTargetBlank="_blank"===l.getAttrib(h,"target"),e.linkRel=l.getAttrib(h,"rel"),e.linkClassName=h.className),e}function g(a){return a&&!!(a.textContent||a.innerText).replace(/\ufeff/g,"")}function h(b){return!b||b.indexOf("<")===-1&&b.indexOf(">")===-1?b:(m||(m=new tinymce.html.Serializer({},a.schema)),m.serialize(a.parser.parse(b,{forced_root_block:!1})))}function i(b,c){var d,e,f,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y=a.dom;d=tinymce.explode(c.extraClasses," "),d||(d=[]),c.caption||d.push("align"+c.align),c.attachment_id&&(d.push("wp-image-"+c.attachment_id),c.size&&"custom"!==c.size&&d.push("size-"+c.size)),s=c.width,t=c.height,"custom"===c.size&&(s=c.customWidth,t=c.customHeight),q={src:c.url,width:s||null,height:t||null,title:c.title||null,"class":d.join(" ")||null},y.setAttribs(b,q),a.$(b).attr("alt",c.alt||""),r={href:c.linkUrl,rel:c.linkRel||null,target:c.linkTargetBlank?"_blank":null,"class":c.linkClassName||null},b.parentNode&&"A"===b.parentNode.nodeName&&!g(b.parentNode)?c.linkUrl?y.setAttribs(b.parentNode,r):y.remove(b.parentNode,!0):c.linkUrl&&((l=y.getParent(b,"a"))&&y.insertAfter(b,l),l=y.create("a",r),b.parentNode.insertBefore(l,b),l.appendChild(b)),m=a.dom.getParent(b,".mceTemp"),f=b.parentNode&&"A"===b.parentNode.nodeName&&!g(b.parentNode)?b.parentNode:b,c.caption?(c.caption=h(c.caption),p=c.attachment_id?"attachment_"+c.attachment_id:null,u="align"+(c.align||"none"),e="wp-caption "+u,c.captionClassName&&(e+=" "+c.captionClassName.replace(/[<>&]+/g,"")),a.getParam("wpeditimage_html5_captions")||(s=parseInt(s,10),s+=10),m?(o=y.select("dl.wp-caption",m),o.length&&y.setAttribs(o,{id:p,"class":e,style:"width: "+s+"px"}),n=y.select(".wp-caption-dd",m),n.length&&y.setHTML(n[0],c.caption)):(p=p?'id="'+p+'" ':"",i="<dl "+p+'class="'+e+'" style="width: '+s+'px"><dt class="wp-caption-dt"></dt><dd class="wp-caption-dd">'+c.caption+"</dd></dl>",k=y.create("div",{"class":"mceTemp"},i),(j=y.getParent(f,"p"))?j.parentNode.insertBefore(k,j):f.parentNode.insertBefore(k,f),a.$(k).find("dt.wp-caption-dt").append(f),j&&y.isEmpty(j)&&y.remove(j))):m&&(j=y.create("p"),m.parentNode.insertBefore(j,m),j.appendChild(f),y.remove(m)),v=a.$(b),w=v.attr("srcset"),x=v.attr("src"),w&&x&&(x=x.replace(/[?#].*/,""),w.indexOf(x)===-1&&v.attr("srcset",null).attr("sizes",null)),wp.media.events&&wp.media.events.trigger("editor:image-update",{editor:a,metadata:c,image:b}),a.nodeChanged()}function j(b){var c,d,e;return"undefined"!=typeof wp&&wp.media?(e=f(b),wp.media.events.trigger("editor:image-edit",{editor:a,metadata:e,image:b}),c=wp.media({frame:"image",state:"image-details",metadata:e}),wp.media.events.trigger("editor:frame-create",{frame:c}),d=function(d){a.focus(),a.undoManager.transact(function(){i(b,d)}),c.detach()},c.state("image-details").on("update",d),c.state("replace-image").on("replace",d),c.on("close",function(){a.focus(),c.detach()}),void c.open()):void a.execCommand("mceImage")}function k(b){var c=a.dom.getParent(b,"div.mceTemp");c||"IMG"!==b.nodeName||(c=a.dom.getParent(b,"a")),c?(c.nextSibling?a.selection.select(c.nextSibling):c.previousSibling?a.selection.select(c.previousSibling):a.selection.select(c.parentNode),a.selection.collapse(!0),a.dom.remove(c)):a.dom.remove(b),a.nodeChanged(),a.undoManager.add()}var l,m,n,o,p=tinymce.each,q=tinymce.trim,r=tinymce.Env.iOS;return a.addButton("wp_img_remove",{tooltip:"Remove",icon:"dashicon dashicons-no",onclick:function(){k(a.selection.getNode())}}),a.addButton("wp_img_edit",{tooltip:"Edit|button",icon:"dashicon dashicons-edit",onclick:function(){j(a.selection.getNode())}}),p({alignleft:"Align left",aligncenter:"Align center",alignright:"Align right",alignnone:"No alignment"},function(b,c){var d=c.slice(5);a.addButton("wp_img_"+c,{tooltip:b,icon:"dashicon dashicons-align-"+d,cmd:"alignnone"===c?"wpAlignNone":"Justify"+d.slice(0,1).toUpperCase()+d.slice(1),onPostRender:function(){var b=this;a.on("NodeChange",function(d){var e;"IMG"===d.element.nodeName&&(e=a.dom.getParent(d.element,".wp-caption")||d.element,"alignnone"===c?b.active(!/\balign(left|center|right)\b/.test(e.className)):b.active(a.dom.hasClass(e,c)))})}})}),a.once("preinit",function(){a.wp&&a.wp._createToolbar&&(l=a.wp._createToolbar(["wp_img_alignleft","wp_img_aligncenter","wp_img_alignright","wp_img_alignnone","wp_img_edit","wp_img_remove"]))}),a.on("wptoolbar",function(a){"IMG"!==a.element.nodeName||b(a.element)||(a.toolbar=l)}),r&&a.on("init",function(){a.on("touchstart",function(a){"IMG"!==a.target.nodeName||c(a.target)||(n=!0)}),a.dom.bind(a.getDoc(),"touchmove",function(){n=!1}),a.on("touchend",function(b){if(n&&"IMG"===b.target.nodeName&&!c(b.target)){var d=b.target;n=!1,window.setTimeout(function(){a.selection.select(d),a.nodeChanged()},100)}else l&&l.hide()})}),a.on("init",function(){var b=a.dom,c=a.getParam("wpeditimage_html5_captions")?"html5-captions":"html4-captions";b.addClass(a.getBody(),c),tinymce.Env.ie&&tinymce.Env.ie>10&&b.bind(a.getBody(),"mscontrolselect",function(c){"IMG"===c.target.nodeName&&b.getParent(c.target,".wp-caption")?a.getBody().focus():"DL"===c.target.nodeName&&b.hasClass(c.target,"wp-caption")&&c.target.focus()})}),a.on("ObjectResized",function(b){var c=b.target;"IMG"===c.nodeName&&a.undoManager.transact(function(){var d,e,f=a.dom;c.className=c.className.replace(/\bsize-[^ ]+/,""),(d=f.getParent(c,".wp-caption"))&&(e=b.width||f.getAttrib(c,"width"),e&&(e=parseInt(e,10),a.getParam("wpeditimage_html5_captions")||(e+=10),f.setStyle(d,"width",e+"px")))})}),a.on("pastePostProcess",function(b){a.dom.getParent(a.selection.getNode(),"dd.wp-caption-dd")&&(a.$("img, audio, video, object, embed, iframe, script, style",b.node).remove(),a.$("*",b.node).each(function(b,c){a.dom.isBlock(c)&&(tinymce.trim(c.textContent||c.innerText)?(a.dom.insertAfter(a.dom.create("br"),c),a.dom.remove(c,!0)):a.dom.remove(c))}),a.$("br",b.node).each(function(b,c){c.nextSibling&&"BR"!==c.nextSibling.nodeName&&c.previousSibling&&"BR"!==c.previousSibling.nodeName||a.dom.remove(c)}),o=!0)}),a.on("BeforeExecCommand",function(b){var c,d,e,f,g,h,i=b.command,j=a.dom;if("mceInsertContent"===i||"Indent"===i||"Outdent"===i){if(c=a.selection.getNode(),h=j.getParent(c,"div.mceTemp")){if("mceInsertContent"!==i)return b.preventDefault(),b.stopImmediatePropagation(),!1;if(o)return void(o=!1);d=j.create("p"),j.insertAfter(d,h),a.selection.setCursorLocation(d,0),"IMG"===c.nodeName&&a.$(h).remove(),a.nodeChanged()}}else if("JustifyLeft"===i||"JustifyRight"===i||"JustifyCenter"===i||"wpAlignNone"===i){if(c=a.selection.getNode(),f="align"+i.slice(7).toLowerCase(),e=a.dom.getParent(c,".wp-caption"),"IMG"!==c.nodeName&&!e)return;c=e||c,g=a.dom.hasClass(c,f)?" alignnone":" "+f,c.className=q(c.className.replace(/ ?align(left|center|right|none)/g,"")+g),a.nodeChanged(),b.preventDefault(),l&&l.reposition(),a.fire("ExecCommand",{command:i,ui:b.ui,value:b.value})}}),a.on("keydown",function(b){var c,d,e,f,g=a.selection,h=b.keyCode,i=a.dom,j=tinymce.util.VK;if(h===j.ENTER)c=g.getNode(),d=i.getParent(c,"div.mceTemp"),d&&(i.events.cancel(b),tinymce.each(i.select("dt, dd",d),function(a){i.isEmpty(a)&&i.remove(a)}),f=tinymce.Env.ie&&tinymce.Env.ie<11?"":'<br data-mce-bogus="1" />',e=i.create("p",null,f),"DD"===c.nodeName?i.insertAfter(e,d):d.parentNode.insertBefore(e,d),a.nodeChanged(),g.setCursorLocation(e,0));else if((h===j.DELETE||h===j.BACKSPACE)&&(c=g.getNode(),"DIV"===c.nodeName&&i.hasClass(c,"mceTemp")?d=c:"IMG"!==c.nodeName&&"DT"!==c.nodeName&&"A"!==c.nodeName||(d=i.getParent(c,"div.mceTemp")),d))return i.events.cancel(b),k(c),!1}),tinymce.Env.gecko&&a.on("undo redo",function(){"IMG"===a.selection.getNode().nodeName&&a.selection.collapse()}),a.wpSetImgCaption=function(a){return d(a)},a.wpGetImgCaption=function(a){return e(a)},a.on("beforeGetContent",function(b){"raw"!==b.format&&a.$('img[id="__wp-temp-img-id"]').attr("id",null)}),a.on("BeforeSetContent",function(b){"raw"!==b.format&&(b.content=a.wpSetImgCaption(b.content))}),a.on("PostProcess",function(b){b.get&&(b.content=a.wpGetImgCaption(b.content))}),function(){var b;a.on("dragstart",function(){var c=a.selection.getNode();"IMG"===c.nodeName&&(b=a.dom.getParent(c,".mceTemp"),b||"A"!==c.parentNode.nodeName||g(c.parentNode)||(b=c.parentNode))}),a.on("drop",function(c){var d=a.dom,e=tinymce.dom.RangeUtils.getCaretRangeFromPoint(c.clientX,c.clientY,a.getDoc());e&&d.getParent(e.startContainer,".mceTemp")?c.preventDefault():b&&(c.preventDefault(),a.undoManager.transact(function(){e&&a.selection.setRng(e),a.selection.setNode(b),d.remove(b)})),b=null})}(),a.wp=a.wp||{},a.wp.isPlaceholder=b,{_do_shcode:d,_get_shcode:e}});
\ No newline at end of file
} );
editor.addButton( 'wp_link_edit', {
- tooltip: 'Edit ', // trailing space is needed, used for context
+ tooltip: 'Edit|button', // '|button' is not displayed, only used for context
icon: 'dashicon dashicons-edit',
cmd: 'WP_Link'
} );
-!function(a){a.ui.Factory.add("WPLinkPreview",a.ui.Control.extend({url:"#",renderHtml:function(){return'<div id="'+this._id+'" class="wp-link-preview"><a href="'+this.url+'" target="_blank" rel="noopener" tabindex="-1">'+this.url+"</a></div>"},setURL:function(b){var c,d;this.url!==b&&(this.url=b,b=window.decodeURIComponent(b),b=b.replace(/^(?:https?:)?\/\/(?:www\.)?/,""),(c=b.indexOf("?"))!==-1&&(b=b.slice(0,c)),(c=b.indexOf("#"))!==-1&&(b=b.slice(0,c)),b=b.replace(/(?:index)?\.html$/,""),"/"===b.charAt(b.length-1)&&(b=b.slice(0,-1)),""===b&&(b=this.url),b.length>40&&(c=b.indexOf("/"))!==-1&&(d=b.lastIndexOf("/"))!==-1&&d!==c&&(c+b.length-d<40&&(d=-(40-(c+1))),b=b.slice(0,c+1)+"\u2026"+b.slice(d)),a.$(this.getEl().firstChild).attr("href",this.url).text(b))}})),a.ui.Factory.add("WPLinkInput",a.ui.Control.extend({renderHtml:function(){return'<div id="'+this._id+'" class="wp-link-input"><input type="text" value="" placeholder="'+a.translate("Paste URL or type to search")+'" /><input type="text" style="display:none" value="" /></div>'},setURL:function(a){this.getEl().firstChild.value=a},getURL:function(){return a.trim(this.getEl().firstChild.value)},getLinkText:function(){var b=this.getEl().firstChild.nextSibling.value;return a.trim(b)?b.replace(/[\r\n\t ]+/g," "):""},reset:function(){var a=this.getEl().firstChild;a.value="",a.nextSibling.value=""}})),a.PluginManager.add("wplink",function(b){function c(){var a,c,d=b.selection.getStart(),e=b.dom.getParent(d,"a[href]");return e||(c=b.selection.getContent({format:"raw"}),c&&c.indexOf("</a>")!==-1&&(a=c.match(/href="([^">]+)"/),a&&a[1]&&(e=b.$('a[href="'+a[1]+'"]',d)[0]),e&&b.selection.select(e))),e}function d(){b.$("a").each(function(a,c){var d=b.$(c);"_wp_link_placeholder"===d.attr("href")?b.dom.remove(c,!0):d.attr("data-wplink-edit")&&d.attr("data-wplink-edit",null)})}function e(a,b){return a.replace(/(<a [^>]+>)([\s\S]*?)<\/a>/g,function(a,c,d){return c.indexOf(' href="_wp_link_placeholder"')>-1?d:(b&&(c=c.replace(/ data-wplink-edit="true"/g,"")),c=c.replace(/ data-wplink-url-error="true"/g,""),c+d+"</a>")})}function f(a){var c=b.$(a),d=c.attr("href");d&&"undefined"!=typeof n&&(s=!1,!/^http/i.test(d)||p.test(d)&&q.test(d)?c.removeAttr("data-wplink-url-error"):(s=!0,c.attr("data-wplink-url-error","true"),r(b.translate("Warning: the link has been inserted but may have errors. Please test it."),"assertive")))}var g,h,i,j,k,l,m,n=window.jQuery,o=/^(mailto:)?[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$/i,p=/^https?:\/\/([^\s\/?.#-][^\s\/?.#]*\.?)+(\/[^\s"]*)?$/i,q=/^https?:\/\/[^\/]+\.[^\/]+($|\/)/i,r="undefined"!=typeof window.wp&&window.wp.a11y&&window.wp.a11y.speak?window.wp.a11y.speak:function(){},s=!1;return b.on("preinit",function(){if(b.wp&&b.wp._createToolbar){g=b.wp._createToolbar(["wp_link_preview","wp_link_edit","wp_link_remove"],!0);var a=["wp_link_input","wp_link_apply"];"undefined"!=typeof window.wpLink&&a.push("wp_link_advanced"),h=b.wp._createToolbar(a,!0),h.on("show",function(){"undefined"!=typeof window.wpLink&&window.wpLink.modalOpen||window.setTimeout(function(){var a=h.$el.find("input.ui-autocomplete-input")[0],b=k&&(k.textContent||k.innerText);a&&(!a.value&&b&&"undefined"!=typeof window.wpLink&&(a.value=window.wpLink.getUrlFromSelection(b)),l||(a.focus(),a.select()))})}),h.on("hide",function(){h.scrolling||b.execCommand("wp_link_cancel")})}}),b.addCommand("WP_Link",function(){return a.Env.ie&&a.Env.ie<10&&"undefined"!=typeof window.wpLink?void window.wpLink.open(b.id):(k=c(),h.tempHide=!1,void(k?b.dom.setAttribs(k,{"data-wplink-edit":!0}):(d(),b.execCommand("mceInsertLink",!1,{href:"_wp_link_placeholder"}),k=b.$('a[href="_wp_link_placeholder"]')[0],b.nodeChanged())))}),b.addCommand("wp_link_apply",function(){if(!h.scrolling){var c,d;if(k){c=j.getURL(),d=j.getLinkText(),b.focus();var e=document.createElement("a");if(e.href=c,"javascript:"!==e.protocol&&"data:"!==e.protocol||(c=""),!c)return void b.dom.remove(k,!0);/^(?:[a-z]+:|#|\?|\.|\/)/.test(c)||o.test(c)||(c="http://"+c),b.dom.setAttribs(k,{href:c,"data-wplink-edit":null}),a.trim(k.innerHTML)||b.$(k).text(d||c),f(k)}j.reset(),b.nodeChanged(),"undefined"==typeof window.wpLinkL10n||s||r(window.wpLinkL10n.linkInserted)}}),b.addCommand("wp_link_cancel",function(){h.tempHide||(j.reset(),d())}),b.addCommand("wp_unlink",function(){b.execCommand("unlink"),h.tempHide=!1,b.execCommand("wp_link_cancel")}),b.addShortcut("access+a","","WP_Link"),b.addShortcut("access+s","","wp_unlink"),b.addShortcut("meta+k","","WP_Link"),b.addButton("link",{icon:"link",tooltip:"Insert/edit link",cmd:"WP_Link",stateSelector:"a[href]"}),b.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink"}),b.addMenuItem("link",{icon:"link",text:"Insert/edit link",cmd:"WP_Link",stateSelector:"a[href]",context:"insert",prependToContext:!0}),b.on("pastepreprocess",function(c){var d=c.content,e=/^(?:https?:)?\/\/\S+$/i;b.selection.isCollapsed()||e.test(b.selection.getContent())||(d=d.replace(/<[^>]+>/g,""),d=a.trim(d),e.test(d)&&(b.execCommand("mceInsertLink",!1,{href:b.dom.decode(d)}),c.preventDefault()))}),b.on("savecontent",function(a){a.content=e(a.content,!0)}),b.on("BeforeAddUndo",function(a){a.lastLevel&&a.lastLevel.content&&a.level.content&&a.lastLevel.content===e(a.level.content)&&a.preventDefault()}),b.on("keydown",function(c){27===c.keyCode&&b.execCommand("wp_link_cancel"),c.altKey||a.Env.mac&&(!c.metaKey||c.ctrlKey)||!a.Env.mac&&!c.ctrlKey||89!==c.keyCode&&90!==c.keyCode||(l=!0,window.clearTimeout(m),m=window.setTimeout(function(){l=!1},500))}),b.addButton("wp_link_preview",{type:"WPLinkPreview",onPostRender:function(){i=this}}),b.addButton("wp_link_input",{type:"WPLinkInput",onPostRender:function(){var c,d,e,f=this.getEl(),g=f.firstChild;j=this,n&&n.ui&&n.ui.autocomplete&&(c=n(g),c.on("keydown",function(){c.removeAttr("aria-activedescendant")}).autocomplete({source:function(a,b){return e===a.term?void b(d):/^https?:/.test(a.term)||a.term.indexOf(".")!==-1?b():(n.post(window.ajaxurl,{action:"wp-link-ajax",page:1,search:a.term,_ajax_linking_nonce:n("#_ajax_linking_nonce").val()},function(a){d=a,b(a)},"json"),void(e=a.term))},focus:function(a,b){c.attr("aria-activedescendant","mce-wp-autocomplete-"+b.item.ID),a.preventDefault()},select:function(a,b){return c.val(b.item.permalink),n(f.firstChild.nextSibling).val(b.item.title),9===a.keyCode&&"undefined"!=typeof window.wpLinkL10n&&r(window.wpLinkL10n.linkSelected),!1},open:function(){c.attr("aria-expanded","true"),h.blockHide=!0},close:function(){c.attr("aria-expanded","false"),h.blockHide=!1},minLength:2,position:{my:"left top+2"},messages:{noResults:"undefined"!=typeof window.uiAutocompleteL10n?window.uiAutocompleteL10n.noResults:"",results:function(a){if("undefined"!=typeof window.uiAutocompleteL10n)return a>1?window.uiAutocompleteL10n.manyResults.replace("%d",a):window.uiAutocompleteL10n.oneResult}}}).autocomplete("instance")._renderItem=function(a,b){var c="undefined"!=typeof window.wpLinkL10n?window.wpLinkL10n.noTitle:"",d=b.title?b.title:c;return n('<li role="option" id="mce-wp-autocomplete-'+b.ID+'">').append("<span>"+d+'</span> <span class="wp-editor-float-right">'+b.info+"</span>").appendTo(a)},c.attr({role:"combobox","aria-autocomplete":"list","aria-expanded":"false","aria-owns":c.autocomplete("widget").attr("id")}).on("focus",function(){var a=c.val();a&&!/^https?:/.test(a)&&c.autocomplete("search")}).autocomplete("widget").addClass("wplink-autocomplete").attr("role","listbox").removeAttr("tabindex").on("menufocus",function(a,b){b.item.attr("aria-selected","true")}).on("menublur",function(){n(this).find('[aria-selected="true"]').removeAttr("aria-selected")})),a.$(g).on("keydown",function(a){13===a.keyCode&&(b.execCommand("wp_link_apply"),a.preventDefault())})}}),b.on("wptoolbar",function(a){var c,d,e,f=b.dom.getParent(a.element,"a");return"undefined"!=typeof window.wpLink&&window.wpLink.modalOpen?void(h.tempHide=!0):(h.tempHide=!1,void(f?(c=b.$(f),d=c.attr("href"),e=c.attr("data-wplink-edit"),"_wp_link_placeholder"===d||e?("_wp_link_placeholder"===d||j.getURL()||j.setURL(d),a.element=f,a.toolbar=h):d&&!c.find("img").length&&(i.setURL(d),a.element=f,a.toolbar=g,"true"===c.attr("data-wplink-url-error")?g.$el.find(".wp-link-preview a").addClass("wplink-url-error"):(g.$el.find(".wp-link-preview a").removeClass("wplink-url-error"),s=!1))):h.visible()&&b.execCommand("wp_link_cancel")))}),b.addButton("wp_link_edit",{tooltip:"Edit ",icon:"dashicon dashicons-edit",cmd:"WP_Link"}),b.addButton("wp_link_remove",{tooltip:"Remove link",icon:"dashicon dashicons-editor-unlink",cmd:"wp_unlink"}),b.addButton("wp_link_advanced",{tooltip:"Link options",icon:"dashicon dashicons-admin-generic",onclick:function(){if("undefined"!=typeof window.wpLink){var c=j.getURL()||null,d=j.getLinkText()||null;a.Env.ie&&b.focus(),h.tempHide=!0,window.wpLink.open(b.id,c,d,k),j.reset()}}}),b.addButton("wp_link_apply",{tooltip:"Apply",icon:"dashicon dashicons-editor-break",cmd:"wp_link_apply",classes:"widget btn primary"}),{close:function(){h.tempHide=!1,b.execCommand("wp_link_cancel")},checkLink:f}})}(window.tinymce);
\ No newline at end of file
+!function(a){a.ui.Factory.add("WPLinkPreview",a.ui.Control.extend({url:"#",renderHtml:function(){return'<div id="'+this._id+'" class="wp-link-preview"><a href="'+this.url+'" target="_blank" rel="noopener" tabindex="-1">'+this.url+"</a></div>"},setURL:function(b){var c,d;this.url!==b&&(this.url=b,b=window.decodeURIComponent(b),b=b.replace(/^(?:https?:)?\/\/(?:www\.)?/,""),(c=b.indexOf("?"))!==-1&&(b=b.slice(0,c)),(c=b.indexOf("#"))!==-1&&(b=b.slice(0,c)),b=b.replace(/(?:index)?\.html$/,""),"/"===b.charAt(b.length-1)&&(b=b.slice(0,-1)),""===b&&(b=this.url),b.length>40&&(c=b.indexOf("/"))!==-1&&(d=b.lastIndexOf("/"))!==-1&&d!==c&&(c+b.length-d<40&&(d=-(40-(c+1))),b=b.slice(0,c+1)+"\u2026"+b.slice(d)),a.$(this.getEl().firstChild).attr("href",this.url).text(b))}})),a.ui.Factory.add("WPLinkInput",a.ui.Control.extend({renderHtml:function(){return'<div id="'+this._id+'" class="wp-link-input"><input type="text" value="" placeholder="'+a.translate("Paste URL or type to search")+'" /><input type="text" style="display:none" value="" /></div>'},setURL:function(a){this.getEl().firstChild.value=a},getURL:function(){return a.trim(this.getEl().firstChild.value)},getLinkText:function(){var b=this.getEl().firstChild.nextSibling.value;return a.trim(b)?b.replace(/[\r\n\t ]+/g," "):""},reset:function(){var a=this.getEl().firstChild;a.value="",a.nextSibling.value=""}})),a.PluginManager.add("wplink",function(b){function c(){var a,c,d=b.selection.getStart(),e=b.dom.getParent(d,"a[href]");return e||(c=b.selection.getContent({format:"raw"}),c&&c.indexOf("</a>")!==-1&&(a=c.match(/href="([^">]+)"/),a&&a[1]&&(e=b.$('a[href="'+a[1]+'"]',d)[0]),e&&b.selection.select(e))),e}function d(){b.$("a").each(function(a,c){var d=b.$(c);"_wp_link_placeholder"===d.attr("href")?b.dom.remove(c,!0):d.attr("data-wplink-edit")&&d.attr("data-wplink-edit",null)})}function e(a,b){return a.replace(/(<a [^>]+>)([\s\S]*?)<\/a>/g,function(a,c,d){return c.indexOf(' href="_wp_link_placeholder"')>-1?d:(b&&(c=c.replace(/ data-wplink-edit="true"/g,"")),c=c.replace(/ data-wplink-url-error="true"/g,""),c+d+"</a>")})}function f(a){var c=b.$(a),d=c.attr("href");d&&"undefined"!=typeof n&&(s=!1,!/^http/i.test(d)||p.test(d)&&q.test(d)?c.removeAttr("data-wplink-url-error"):(s=!0,c.attr("data-wplink-url-error","true"),r(b.translate("Warning: the link has been inserted but may have errors. Please test it."),"assertive")))}var g,h,i,j,k,l,m,n=window.jQuery,o=/^(mailto:)?[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$/i,p=/^https?:\/\/([^\s\/?.#-][^\s\/?.#]*\.?)+(\/[^\s"]*)?$/i,q=/^https?:\/\/[^\/]+\.[^\/]+($|\/)/i,r="undefined"!=typeof window.wp&&window.wp.a11y&&window.wp.a11y.speak?window.wp.a11y.speak:function(){},s=!1;return b.on("preinit",function(){if(b.wp&&b.wp._createToolbar){g=b.wp._createToolbar(["wp_link_preview","wp_link_edit","wp_link_remove"],!0);var a=["wp_link_input","wp_link_apply"];"undefined"!=typeof window.wpLink&&a.push("wp_link_advanced"),h=b.wp._createToolbar(a,!0),h.on("show",function(){"undefined"!=typeof window.wpLink&&window.wpLink.modalOpen||window.setTimeout(function(){var a=h.$el.find("input.ui-autocomplete-input")[0],b=k&&(k.textContent||k.innerText);a&&(!a.value&&b&&"undefined"!=typeof window.wpLink&&(a.value=window.wpLink.getUrlFromSelection(b)),l||(a.focus(),a.select()))})}),h.on("hide",function(){h.scrolling||b.execCommand("wp_link_cancel")})}}),b.addCommand("WP_Link",function(){return a.Env.ie&&a.Env.ie<10&&"undefined"!=typeof window.wpLink?void window.wpLink.open(b.id):(k=c(),h.tempHide=!1,void(k?b.dom.setAttribs(k,{"data-wplink-edit":!0}):(d(),b.execCommand("mceInsertLink",!1,{href:"_wp_link_placeholder"}),k=b.$('a[href="_wp_link_placeholder"]')[0],b.nodeChanged())))}),b.addCommand("wp_link_apply",function(){if(!h.scrolling){var c,d;if(k){c=j.getURL(),d=j.getLinkText(),b.focus();var e=document.createElement("a");if(e.href=c,"javascript:"!==e.protocol&&"data:"!==e.protocol||(c=""),!c)return void b.dom.remove(k,!0);/^(?:[a-z]+:|#|\?|\.|\/)/.test(c)||o.test(c)||(c="http://"+c),b.dom.setAttribs(k,{href:c,"data-wplink-edit":null}),a.trim(k.innerHTML)||b.$(k).text(d||c),f(k)}j.reset(),b.nodeChanged(),"undefined"==typeof window.wpLinkL10n||s||r(window.wpLinkL10n.linkInserted)}}),b.addCommand("wp_link_cancel",function(){h.tempHide||(j.reset(),d())}),b.addCommand("wp_unlink",function(){b.execCommand("unlink"),h.tempHide=!1,b.execCommand("wp_link_cancel")}),b.addShortcut("access+a","","WP_Link"),b.addShortcut("access+s","","wp_unlink"),b.addShortcut("meta+k","","WP_Link"),b.addButton("link",{icon:"link",tooltip:"Insert/edit link",cmd:"WP_Link",stateSelector:"a[href]"}),b.addButton("unlink",{icon:"unlink",tooltip:"Remove link",cmd:"unlink"}),b.addMenuItem("link",{icon:"link",text:"Insert/edit link",cmd:"WP_Link",stateSelector:"a[href]",context:"insert",prependToContext:!0}),b.on("pastepreprocess",function(c){var d=c.content,e=/^(?:https?:)?\/\/\S+$/i;b.selection.isCollapsed()||e.test(b.selection.getContent())||(d=d.replace(/<[^>]+>/g,""),d=a.trim(d),e.test(d)&&(b.execCommand("mceInsertLink",!1,{href:b.dom.decode(d)}),c.preventDefault()))}),b.on("savecontent",function(a){a.content=e(a.content,!0)}),b.on("BeforeAddUndo",function(a){a.lastLevel&&a.lastLevel.content&&a.level.content&&a.lastLevel.content===e(a.level.content)&&a.preventDefault()}),b.on("keydown",function(c){27===c.keyCode&&b.execCommand("wp_link_cancel"),c.altKey||a.Env.mac&&(!c.metaKey||c.ctrlKey)||!a.Env.mac&&!c.ctrlKey||89!==c.keyCode&&90!==c.keyCode||(l=!0,window.clearTimeout(m),m=window.setTimeout(function(){l=!1},500))}),b.addButton("wp_link_preview",{type:"WPLinkPreview",onPostRender:function(){i=this}}),b.addButton("wp_link_input",{type:"WPLinkInput",onPostRender:function(){var c,d,e,f=this.getEl(),g=f.firstChild;j=this,n&&n.ui&&n.ui.autocomplete&&(c=n(g),c.on("keydown",function(){c.removeAttr("aria-activedescendant")}).autocomplete({source:function(a,b){return e===a.term?void b(d):/^https?:/.test(a.term)||a.term.indexOf(".")!==-1?b():(n.post(window.ajaxurl,{action:"wp-link-ajax",page:1,search:a.term,_ajax_linking_nonce:n("#_ajax_linking_nonce").val()},function(a){d=a,b(a)},"json"),void(e=a.term))},focus:function(a,b){c.attr("aria-activedescendant","mce-wp-autocomplete-"+b.item.ID),a.preventDefault()},select:function(a,b){return c.val(b.item.permalink),n(f.firstChild.nextSibling).val(b.item.title),9===a.keyCode&&"undefined"!=typeof window.wpLinkL10n&&r(window.wpLinkL10n.linkSelected),!1},open:function(){c.attr("aria-expanded","true"),h.blockHide=!0},close:function(){c.attr("aria-expanded","false"),h.blockHide=!1},minLength:2,position:{my:"left top+2"},messages:{noResults:"undefined"!=typeof window.uiAutocompleteL10n?window.uiAutocompleteL10n.noResults:"",results:function(a){if("undefined"!=typeof window.uiAutocompleteL10n)return a>1?window.uiAutocompleteL10n.manyResults.replace("%d",a):window.uiAutocompleteL10n.oneResult}}}).autocomplete("instance")._renderItem=function(a,b){var c="undefined"!=typeof window.wpLinkL10n?window.wpLinkL10n.noTitle:"",d=b.title?b.title:c;return n('<li role="option" id="mce-wp-autocomplete-'+b.ID+'">').append("<span>"+d+'</span> <span class="wp-editor-float-right">'+b.info+"</span>").appendTo(a)},c.attr({role:"combobox","aria-autocomplete":"list","aria-expanded":"false","aria-owns":c.autocomplete("widget").attr("id")}).on("focus",function(){var a=c.val();a&&!/^https?:/.test(a)&&c.autocomplete("search")}).autocomplete("widget").addClass("wplink-autocomplete").attr("role","listbox").removeAttr("tabindex").on("menufocus",function(a,b){b.item.attr("aria-selected","true")}).on("menublur",function(){n(this).find('[aria-selected="true"]').removeAttr("aria-selected")})),a.$(g).on("keydown",function(a){13===a.keyCode&&(b.execCommand("wp_link_apply"),a.preventDefault())})}}),b.on("wptoolbar",function(a){var c,d,e,f=b.dom.getParent(a.element,"a");return"undefined"!=typeof window.wpLink&&window.wpLink.modalOpen?void(h.tempHide=!0):(h.tempHide=!1,void(f?(c=b.$(f),d=c.attr("href"),e=c.attr("data-wplink-edit"),"_wp_link_placeholder"===d||e?("_wp_link_placeholder"===d||j.getURL()||j.setURL(d),a.element=f,a.toolbar=h):d&&!c.find("img").length&&(i.setURL(d),a.element=f,a.toolbar=g,"true"===c.attr("data-wplink-url-error")?g.$el.find(".wp-link-preview a").addClass("wplink-url-error"):(g.$el.find(".wp-link-preview a").removeClass("wplink-url-error"),s=!1))):h.visible()&&b.execCommand("wp_link_cancel")))}),b.addButton("wp_link_edit",{tooltip:"Edit|button",icon:"dashicon dashicons-edit",cmd:"WP_Link"}),b.addButton("wp_link_remove",{tooltip:"Remove link",icon:"dashicon dashicons-editor-unlink",cmd:"wp_unlink"}),b.addButton("wp_link_advanced",{tooltip:"Link options",icon:"dashicon dashicons-admin-generic",onclick:function(){if("undefined"!=typeof window.wpLink){var c=j.getURL()||null,d=j.getLinkText()||null;a.Env.ie&&b.focus(),h.tempHide=!0,window.wpLink.open(b.id,c,d,k),j.reset()}}}),b.addButton("wp_link_apply",{tooltip:"Apply",icon:"dashicon dashicons-editor-break",cmd:"wp_link_apply",classes:"widget btn primary"}),{close:function(){h.tempHide=!1,b.execCommand("wp_link_cancel")},checkLink:f}})}(window.tinymce);
\ No newline at end of file
} );
editor.addButton( 'wp_view_edit', {
- tooltip: 'Edit ', // trailing space is needed, used for context
+ tooltip: 'Edit|button', // '|button' is not displayed, only used for context
icon: 'dashicon dashicons-edit',
onclick: function() {
var node = editor.selection.getNode();
-!function(a,b){a.PluginManager.add("wpview",function(c){function d(){}function e(a){return c.dom.hasClass(a,"wpview")}function f(a){function b(a,b){return"<p>"+window.decodeURIComponent(b)+"</p>"}return a?a.replace(/<div[^>]+data-wpview-text="([^"]+)"[^>]*>(?:\.|[\s\S]+?wpview-end[^>]+>\s*<\/span>\s*)?<\/div>/g,b).replace(/<p[^>]+data-wpview-marker="([^"]+)"[^>]*>[\s\S]*?<\/p>/g,b):a}return b&&b.mce&&b.mce.views?(c.on("init",function(){var a=window.MutationObserver||window.WebKitMutationObserver;a&&new a(function(){c.fire("wp-body-class-change")}).observe(c.getBody(),{attributes:!0,attributeFilter:["class"]}),c.on("wp-body-class-change",function(){var a=c.getBody().className;c.$('iframe[class="wpview-sandbox"]').each(function(b,c){if(!c.src||'javascript:""'===c.src)try{c.contentWindow.document.body.className=a}catch(d){}})})}),c.on("beforesetcontent",function(a){var d;if(a.selection||b.mce.views.unbind(),a.content){if(!a.load&&(d=c.selection.getNode(),d&&d!==c.getBody()&&/^\s*https?:\/\/\S+\s*$/i.test(a.content))){if(d=c.dom.getParent(d,"p"),!d||!/^[\s\uFEFF\u00A0]*$/.test(c.$(d).text()||""))return;d.innerHTML=""}a.content=b.mce.views.setMarkers(a.content,c)}}),c.on("setcontent",function(){b.mce.views.render()}),c.on("preprocess hide",function(a){c.$("div[data-wpview-text], p[data-wpview-marker]",a.node).each(function(a,b){b.innerHTML="."})},!0),c.on("postprocess",function(a){a.content=f(a.content)}),c.on("beforeaddundo",function(a){a.level.content=f(a.level.content)}),c.on("drop objectselected",function(a){e(a.targetClone)&&(a.targetClone=c.getDoc().createTextNode(window.decodeURIComponent(c.dom.getAttrib(a.targetClone,"data-wpview-text"))))}),c.on("pastepreprocess",function(b){var c=b.content;c&&(c=a.trim(c.replace(/<[^>]+>/g,"")),/^https?:\/\/\S+$/i.test(c)&&(b.content=c))}),c.on("resolvename",function(a){e(a.target)&&(a.name=c.dom.getAttrib(a.target,"data-wpview-type")||"object")}),c.on("click keyup",function(){var a=c.selection.getNode();e(a)&&c.dom.getAttrib(a,"data-mce-selected")&&a.setAttribute("data-mce-selected","2")}),c.addButton("wp_view_edit",{tooltip:"Edit ",icon:"dashicon dashicons-edit",onclick:function(){var a=c.selection.getNode();e(a)&&b.mce.views.edit(c,a)}}),c.addButton("wp_view_remove",{tooltip:"Remove",icon:"dashicon dashicons-no",onclick:function(){c.fire("cut")}}),c.once("preinit",function(){var a;c.wp&&c.wp._createToolbar&&(a=c.wp._createToolbar(["wp_view_edit","wp_view_remove"]),c.on("wptoolbar",function(b){!b.collapsed&&e(b.element)&&(b.toolbar=a)}))}),c.wp=c.wp||{},c.wp.getView=d,c.wp.setViewCursor=d,{getView:d}):{getView:d}})}(window.tinymce,window.wp);
\ No newline at end of file
+!function(a,b){a.PluginManager.add("wpview",function(c){function d(){}function e(a){return c.dom.hasClass(a,"wpview")}function f(a){function b(a,b){return"<p>"+window.decodeURIComponent(b)+"</p>"}return a?a.replace(/<div[^>]+data-wpview-text="([^"]+)"[^>]*>(?:\.|[\s\S]+?wpview-end[^>]+>\s*<\/span>\s*)?<\/div>/g,b).replace(/<p[^>]+data-wpview-marker="([^"]+)"[^>]*>[\s\S]*?<\/p>/g,b):a}return b&&b.mce&&b.mce.views?(c.on("init",function(){var a=window.MutationObserver||window.WebKitMutationObserver;a&&new a(function(){c.fire("wp-body-class-change")}).observe(c.getBody(),{attributes:!0,attributeFilter:["class"]}),c.on("wp-body-class-change",function(){var a=c.getBody().className;c.$('iframe[class="wpview-sandbox"]').each(function(b,c){if(!c.src||'javascript:""'===c.src)try{c.contentWindow.document.body.className=a}catch(d){}})})}),c.on("beforesetcontent",function(a){var d;if(a.selection||b.mce.views.unbind(),a.content){if(!a.load&&(d=c.selection.getNode(),d&&d!==c.getBody()&&/^\s*https?:\/\/\S+\s*$/i.test(a.content))){if(d=c.dom.getParent(d,"p"),!d||!/^[\s\uFEFF\u00A0]*$/.test(c.$(d).text()||""))return;d.innerHTML=""}a.content=b.mce.views.setMarkers(a.content,c)}}),c.on("setcontent",function(){b.mce.views.render()}),c.on("preprocess hide",function(a){c.$("div[data-wpview-text], p[data-wpview-marker]",a.node).each(function(a,b){b.innerHTML="."})},!0),c.on("postprocess",function(a){a.content=f(a.content)}),c.on("beforeaddundo",function(a){a.level.content=f(a.level.content)}),c.on("drop objectselected",function(a){e(a.targetClone)&&(a.targetClone=c.getDoc().createTextNode(window.decodeURIComponent(c.dom.getAttrib(a.targetClone,"data-wpview-text"))))}),c.on("pastepreprocess",function(b){var c=b.content;c&&(c=a.trim(c.replace(/<[^>]+>/g,"")),/^https?:\/\/\S+$/i.test(c)&&(b.content=c))}),c.on("resolvename",function(a){e(a.target)&&(a.name=c.dom.getAttrib(a.target,"data-wpview-type")||"object")}),c.on("click keyup",function(){var a=c.selection.getNode();e(a)&&c.dom.getAttrib(a,"data-mce-selected")&&a.setAttribute("data-mce-selected","2")}),c.addButton("wp_view_edit",{tooltip:"Edit|button",icon:"dashicon dashicons-edit",onclick:function(){var a=c.selection.getNode();e(a)&&b.mce.views.edit(c,a)}}),c.addButton("wp_view_remove",{tooltip:"Remove",icon:"dashicon dashicons-no",onclick:function(){c.fire("cut")}}),c.once("preinit",function(){var a;c.wp&&c.wp._createToolbar&&(a=c.wp._createToolbar(["wp_view_edit","wp_view_remove"]),c.on("wptoolbar",function(b){!b.collapsed&&e(b.element)&&(b.toolbar=a)}))}),c.wp=c.wp||{},c.wp.getView=d,c.wp.setViewCursor=d,{getView:d}):{getView:d}})}(window.tinymce,window.wp);
\ No newline at end of file
-.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-content-body a[data-mce-selected],.mce-content-body code[data-mce-selected],.mce-content-body b[data-mce-selected],.mce-content-body i[data-mce-selected],.mce-content-body em[data-mce-selected],.mce-content-body strong[data-mce-selected],.mce-content-body sup[data-mce-selected],.mce-content-body sub[data-mce-selected]{background:#bfe6ff}.mce-content-body hr{cursor:default}.mce-content-body{line-height:1.3}
\ No newline at end of file
+.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,.mce-content-body.mce-content-readonly *[contentEditable=true]:hover{outline:none}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.mce-content-body table{-webkit-nbsp-mode:normal}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2}.mce-content-body{line-height:1.3}
\ No newline at end of file
-body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;line-height:1.3;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-content-body a[data-mce-selected],.mce-content-body code[data-mce-selected],.mce-content-body b[data-mce-selected],.mce-content-body i[data-mce-selected],.mce-content-body em[data-mce-selected],.mce-content-body strong[data-mce-selected],.mce-content-body sup[data-mce-selected],.mce-content-body sub[data-mce-selected]{background:#bfe6ff}.mce-content-body hr{cursor:default}
\ No newline at end of file
+body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;line-height:1.3;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.mce-content-body.mce-content-readonly *[contentEditable=true]:focus,.mce-content-body.mce-content-readonly *[contentEditable=true]:hover{outline:none}.mce-content-body *[data-mce-selected="inline-boundary"]{background:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.mce-content-body table{-webkit-nbsp-mode:normal}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2}
\ No newline at end of file
<glyph unicode="" glyph-name="tabledeleterow" d="M886.4 572.8l-156.8-156.8 160-160-76.8-76.8-160 160-156.8-156.8-76.8 73.6 160 160-163.2 163.2 76.8 76.8 163.2-163.2 156.8 156.8 73.6-76.8zM0 896v-896h1024v896h-1024zM960 576h-22.4l-64-64h86.4v-192h-89.6l64-64h25.6v-192h-896v192h310.4l64 64h-374.4v192h371.2l-64 64h-307.2v192h896v-192z" />
<glyph unicode="" glyph-name="tabledeletecol" d="M320 499.2l64-64v-12.8l-64-64v140.8zM640 422.4l64-64v137.6l-64-64v-9.6zM1024 896v-896h-1024v896h1024zM960 768h-256v-51.2l-12.8 12.8-51.2-51.2v89.6h-256v-89.6l-51.2 51.2-12.8-12.8v51.2h-256v-704h256v118.4l35.2-35.2 28.8 28.8v-115.2h256v115.2l48-48 16 16v-83.2h256v707.2zM672 662.4l-156.8-156.8-163.2 163.2-76.8-76.8 163.2-163.2-156.8-156.8 76.8-76.8 156.8 156.8 160-160 76.8 76.8-160 160 156.8 156.8-76.8 76.8z" />
<glyph unicode="" glyph-name="a11y" d="M960 704v64l-448-128-448 128v-64l320-128v-256l-128-448h64l192 448 192-448h64l-128 448v256zM416 800q0 40 28 68t68 28 68-28 28-68-28-68-68-28-68 28-28 68z" />
-<glyph unicode="" glyph-name="toc" d="M0 896h128v-128h-128v128zM192 896h832v-128h-832v128zM192 704h128v-128h-128v128zM384 704h640v-128h-640v128zM384 512h128v-128h-128v128zM576 512h448v-128h-448v128zM0 320h128v-128h-128v128zM192 320h832v-128h-832v128zM192 128h128v-128h-128v128zM384 128h640v-128h-640v128z" />
+<glyph unicode="" glyph-name="toc" d="M0 896h128v-128h-128v128zM192 896h832v-128h-832v128zM0 512h128v-128h-128v128zM192 512h832v-128h-832v128zM0 128h128v-128h-128v128zM192 128h832v-128h-832v128zM192 704h128v-128h-128v128zM384 704h640v-128h-640v128zM192 320h128v-128h-128v128zM384 320h640v-128h-640v128z" />
<glyph unicode="" glyph-name="fill" d="M521.6 915.2l-67.2-67.2-86.4 86.4-86.4-86.4 86.4-86.4-368-368 432-432 518.4 518.4-428.8 435.2zM435.2 134.4l-262.4 262.4 35.2 35.2 576 51.2-348.8-348.8zM953.6 409.6c-6.4-6.4-16-16-28.8-32-28.8-32-41.6-64-41.6-89.6v0 0 0 0 0 0 0c0-16 6.4-35.2 22.4-48 12.8-12.8 32-22.4 48-22.4s35.2 6.4 48 22.4 22.4 32 22.4 48v0 0 0 0 0 0 0c0 25.6-12.8 54.4-41.6 89.6-9.6 16-22.4 25.6-28.8 32v0z" />
<glyph unicode="" glyph-name="borderwidth" d="M0 265.6h1024v-128h-1024v128zM0 32h1024v-64h-1024v64zM0 566.4h1024v-192h-1024v192zM0 928h1024v-256h-1024v256z" />
<glyph unicode="" glyph-name="line" d="M739.2 627.2l-502.4-502.4h-185.6v185.6l502.4 502.4 185.6-185.6zM803.2 688l-185.6 185.6 67.2 67.2c22.4 22.4 54.4 22.4 76.8 0l108.8-108.8c22.4-22.4 22.4-54.4 0-76.8l-67.2-67.2zM41.6 48h940.8v-112h-940.8v112z" />
-.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#333;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block}.mce-wordcount{position:absolute;top:0;right:0;padding:8px}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative}.mce-fullscreen .mce-resizehandle{display:none}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid rgba(0,0,0,0.2);width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:#D9D9D9}.mce-grid td.mce-grid-cell div{border:1px solid #d6d6d6;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#3498db}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#3498db}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#d6d6d6;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#3498db;background:#3498db}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#707070}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp{padding:2px 0}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-container b{font-weight:bold}.mce-container p{margin-bottom:5px}.mce-container a{cursor:pointer;color:#2980b9}.mce-container a:hover{text-decoration:underline}.mce-container ul{margin-left:15px}.mce-container .mce-table-striped{border-collapse:collapse;margin:10px}.mce-container .mce-table-striped thead>tr{background-color:#fafafa}.mce-container .mce-table-striped thead>tr th{font-weight:bold}.mce-container .mce-table-striped td,.mce-container .mce-table-striped th{padding:5px}.mce-container .mce-table-striped tr:nth-child(even){background-color:#fafafa}.mce-container .mce-table-striped tbody>tr:hover{background-color:#e1e1e1}.mce-branding-powered-by{background-color:#f0f0f0;position:absolute;right:0;bottom:0;width:91px;height:9px;margin-right:-1px;margin-bottom:-1px;border:1px solid #c5c5c5;border-width:1px 1px 0 1px;padding:6px 6px 0 6px;background-image:url('data:image/gif;base64,R0lGODlhXwAJAIABAIiIiAAAACH5BAEKAAEALAAAAABfAAkAAAJxhBGpy+2PUnzqGNpmPNJqDIZSJY4m+KXLF3At2V6xPFfuvMF6J6fINTnhTr9XcaRC6pKvFYlZjDIszaXRSA3ijlXo9AlWindaldSJthJ55XAz6+ZWbVCOdojP77p8J8vlUSI4SHEnaEiYqOhARdhIWAAAOw');background-repeat:no-repeat;background-position:center center}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#3498db}.mce-croprect-handle-move:focus{outline:1px solid #3498db}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:rgba(0,0,0,0.2);border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:rgba(0,0,0,0.2);border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#f0f0f0;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#f0f0f0;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:rgba(0,0,0,0.2);border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#f0f0f0;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:rgba(0,0,0,0.2);border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#f0f0f0;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid rgba(0,0,0,0.2);border-left-width:1px}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:#fff;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid rgba(0,0,0,0.2);border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#FFF;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#F0F0F0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#CCCCCC;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0;box-sizing:border-box}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333333}.mce-notification .mce-progress .mce-bar-container{border-color:#CCCCCC}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#CCC}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:white}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #AAA;background:#EEE;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #BBB;background:#DDD;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{background:#BBB}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#FFF}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#ffffff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-dropzone{border:3px dashed gray;text-align:center}.mce-dropzone span{color:gray;text-transform:uppercase;font-family:Verdana;display:inline-block;vertical-align:middle}.mce-dropzone:after{content:"";height:100%;display:inline-block;vertical-align:middle}.mce-dropzone.mce-disabled{opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-dropzone.mce-disabled.mce-dragenter{cursor:not-allowed}.mce-browsebutton{position:relative;overflow:hidden}.mce-browsebutton button{position:relative;z-index:1}.mce-browsebutton input{opacity:0;filter:alpha(opacity=0);zoom:1;position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB}
\ No newline at end of file
+.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:#595959;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;-webkit-tap-highlight-color:transparent;line-height:normal;font-weight:normal;text-align:left;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-widget button{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.mce-container *[unselectable]{-moz-user-select:none;-webkit-user-select:none;-o-user-select:none;user-select:none}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.mce-fade.mce-in{opacity:1}.mce-tinymce{visibility:inherit !important;position:relative}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%;z-index:100}div.mce-fullscreen{position:fixed;top:0;left:0;width:100%;height:auto}.mce-tinymce{display:block;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-statusbar>.mce-container-body{display:flex;padding-right:16px}.mce-statusbar>.mce-container-body .mce-path{flex:1}.mce-wordcount{font-size:inherit;text-transform:uppercase;padding:8px 0}div.mce-edit-area{background:#FFF;filter:none}.mce-statusbar{position:relative}.mce-statusbar .mce-container-body{position:relative;font-size:11px}.mce-fullscreen .mce-resizehandle{display:none}.mce-statusbar .mce-flow-layout-item{margin:0}.mce-charmap{border-collapse:collapse}.mce-charmap td{cursor:default;border:1px solid #c5c5c5;width:20px;height:20px;line-height:20px;text-align:center;vertical-align:middle;padding:2px}.mce-charmap td div{text-align:center}.mce-charmap td:hover{background:white}.mce-grid td.mce-grid-cell div{border:1px solid #c5c5c5;width:15px;height:15px;margin:0;cursor:pointer}.mce-grid td.mce-grid-cell div:focus{border-color:#91bbe9}.mce-grid td.mce-grid-cell div[disabled]{cursor:not-allowed}.mce-grid{border-spacing:2px;border-collapse:separate}.mce-grid a{display:block;border:1px solid transparent}.mce-grid a:hover,.mce-grid a:focus{border-color:#91bbe9}.mce-grid-border{margin:0 4px 0 4px}.mce-grid-border a{border-color:#c5c5c5;width:13px;height:13px}.mce-grid-border a:hover,.mce-grid-border a.mce-active{border-color:#91bbe9;background:#bdd6f2}.mce-text-center{text-align:center}div.mce-tinymce-inline{width:100%}.mce-colorbtn-trans div{text-align:center;vertical-align:middle;font-weight:bold;font-size:20px;line-height:16px;color:#8b8b8b}.mce-monospace{font-family:"Courier New",Courier,monospace}.mce-toolbar-grp .mce-flow-layout-item{margin-bottom:0}.mce-container b{font-weight:bold}.mce-container p{margin-bottom:5px}.mce-container a{cursor:pointer;color:#2276d2}.mce-container a:hover{text-decoration:underline}.mce-container ul{margin-left:15px}.mce-container .mce-table-striped{border-collapse:collapse;margin:10px}.mce-container .mce-table-striped thead>tr{background-color:#fafafa}.mce-container .mce-table-striped thead>tr th{font-weight:bold}.mce-container .mce-table-striped td,.mce-container .mce-table-striped th{padding:5px}.mce-container .mce-table-striped tr:nth-child(even){background-color:#fafafa}.mce-container .mce-table-striped tbody>tr:hover{background-color:#e1e1e1}.mce-branding{font-size:inherit;text-transform:uppercase;white-space:pre;padding:8px 0}.mce-branding a{font-size:inherit;color:inherit}.mce-top-part{position:relative}.mce-top-part::before{content:'';position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;right:0;bottom:0;left:0;pointer-events:none}.mce-rtl .mce-wordcount{left:0;right:auto}.mce-rtl .mce-statusbar>.mce-container-body>*:last-child{padding-right:0;padding-left:10px}.mce-rtl .mce-path{text-align:right;padding-right:16px}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.5;filter:alpha(opacity=50);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#2276d2}.mce-croprect-handle-move:focus{outline:1px solid #2276d2}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:#c5c5c5;border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:#c5c5c5;border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#fff;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#fff;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:#c5c5c5;border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#fff;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:#c5c5c5;border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#fff;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid #c5c5c5;border-left-width:1px}.mce-sidebar-toolbar .mce-btn{border-left:0;border-right:0}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{background-color:#555c66}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:white;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid #c5c5c5;border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #f3f3f3;border:0 solid #c5c5c5;background-color:#fff}.mce-floatpanel{position:absolute;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2)}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);top:0;left:0;background:#FFF;border:1px solid #c5c5c5;border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#c5c5c5;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-top{margin-top:-10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-top>.mce-arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#c5c5c5;top:auto;bottom:-11px}.mce-floatpanel.mce-popover.mce-top>.mce-arrow:after{bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start,.mce-floatpanel.mce-popover.mce-top.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow,.mce-floatpanel.mce-popover.mce-top.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end,.mce-floatpanel.mce-popover.mce-top.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow,.mce-floatpanel.mce-popover.mce-top.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#FFF}#mce-modal-block.mce-in{opacity:.5;filter:alpha(opacity=50);zoom:1}.mce-window-move{cursor:move}.mce-window{-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#9b9b9b}.mce-close:hover i{color:#bdbdbd}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#e2e4e7}.mce-window .mce-btn:hover{border-color:#c5c5c5}.mce-window .mce-btn:focus{border-color:#2276d2}.mce-window-body .mce-btn,.mce-foot .mce-btn{border-color:#c5c5c5}.mce-foot .mce-btn.mce-primary{border-color:transparent}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:0}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right;padding-right:0;padding-left:20px}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1;margin-top:1px}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-inner{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#595959}.mce-bar{display:block;width:0;height:100%;background-color:#dfdfdf;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#fff;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#c5c5c5;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0;box-sizing:border-box}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#595959}.mce-notification .mce-progress .mce-bar-container{border-color:#c5c5c5}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#595959}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#9b9b9b;cursor:pointer}.mce-abs-layout{position:relative}html .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b3b3b3;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);background:white;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn:hover,.mce-btn:active{background:white;color:#595959;border-color:#e2e4e7}.mce-btn:focus{background:white;color:#595959;border-color:#e2e4e7}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover,.mce-btn.mce-active:focus,.mce-btn.mce-active:active{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background:#555c66;color:white;border-color:transparent}.mce-btn.mce-active button,.mce-btn.mce-active:hover button,.mce-btn.mce-active i,.mce-btn.mce-active:hover i{color:white}.mce-btn:hover .mce-caret{border-top-color:#b5bcc2}.mce-btn.mce-active .mce-caret,.mce-btn.mce-active:hover .mce-caret{border-top-color:white}.mce-btn button{padding:4px 6px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#595959;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:white;border:1px solid transparent;border-color:transparent;background-color:#2276d2}.mce-primary:hover,.mce-primary:focus{background-color:#1e6abc;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#1e6abc;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-primary button,.mce-primary button i{color:white;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #b5bcc2;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #b5bcc2;border-top:0}.mce-btn-flat{border:0;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-toolbar .mce-btn-group{margin:0;padding:2px 0}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:0;margin-left:2px}.mce-btn-group{margin-left:2px}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:white;text-indent:-10em;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#595959;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid #2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#bdbdbd}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#bdbdbd}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text,.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid black;background:white;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal;font-size:inherit}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#595959;font-size:inherit;text-transform:uppercase}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#555c66;color:white}.mce-path .mce-divider{display:inline;font-size:inherit}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid #c5c5c5;width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #e2e4e7}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar{border:1px solid #e2e4e7}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:none}.mce-menubar .mce-menubtn button span{color:#595959}.mce-menubar .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-active .mce-caret,.mce-menubar .mce-menubtn:hover .mce-caret{border-top-color:#b5bcc2}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#e2e4e7;background:white;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-menubar .mce-menubtn.mce-active{border-bottom:none;z-index:65537}div.mce-menubtn.mce-opened{border-bottom-color:white;z-index:65537}.mce-menubtn button{color:#595959}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-rtl .mce-menubtn.mce-fixed-width span{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 4px 6px 4px;clear:both;font-weight:normal;line-height:20px;color:#595959;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-text,.mce-menu-item .mce-text b{line-height:1;vertical-align:initial}.mce-menu-item .mce-caret{margin-top:4px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #595959}.mce-menu-item .mce-menu-shortcut{display:inline-block;padding:0 10px 0 20px;color:#aaa}.mce-menu-item .mce-ico{padding-right:4px}.mce-menu-item:hover,.mce-menu-item:focus{background:#ededee}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:#aaa}.mce-menu-item:hover .mce-text,.mce-menu-item:focus .mce-text,.mce-menu-item:hover .mce-ico,.mce-menu-item:focus .mce-ico{color:#595959}.mce-menu-item.mce-selected{background:#ededee}.mce-menu-item.mce-selected .mce-text,.mce-menu-item.mce-selected .mce-ico{color:#595959}.mce-menu-item.mce-active.mce-menu-item-normal{background:#555c66}.mce-menu-item.mce-active.mce-menu-item-normal .mce-text,.mce-menu-item.mce-active.mce-menu-item-normal .mce-ico{color:white}.mce-menu-item.mce-active.mce-menu-item-checkbox .mce-ico{visibility:visible}.mce-menu-item.mce-disabled,.mce-menu-item.mce-disabled:hover{background:white}.mce-menu-item.mce-disabled:focus,.mce-menu-item.mce-disabled:hover:focus{background:#ededee}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled:hover .mce-text,.mce-menu-item.mce-disabled .mce-ico,.mce-menu-item.mce-disabled:hover .mce-ico{color:#aaa}.mce-menu-item.mce-menu-item-preview.mce-active{border-left:5px solid #555c66;background:white}.mce-menu-item.mce-menu-item-preview.mce-active .mce-text,.mce-menu-item.mce-menu-item-preview.mce-active .mce-ico{color:#595959}.mce-menu-item.mce-menu-item-preview.mce-active:hover{background:#ededee}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:#595959}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #595959;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:#595959}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:180px;background:white;border:1px solid #c5c9cf;border:1px solid #e2e4e7;z-index:1002;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);box-shadow:0 1px 2px rgba(0, 0, 0, 0.2);max-height:500px;overflow:auto;overflow-x:hidden}.mce-menu.mce-animate{opacity:.01;transform:rotateY(10deg) rotateX(-10deg);transform-origin:left top}.mce-menu.mce-menu-align .mce-menu-shortcut,.mce-menu.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block}.mce-menu.mce-in.mce-animate{opacity:1;transform:rotateY(0) rotateX(0);transition:opacity .075s ease,transform .1s ease}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-rtl .mce-menu-item .mce-ico{padding-right:0;padding-left:4px}.mce-rtl.mce-menu-align .mce-caret,.mce-rtl .mce-menu-shortcut{right:auto;left:0}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#595959}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #c5c5c5;background:#fff;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #c5c5c5;background:#e6e6e6;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{border-color:#2276d2}.mce-spacer{visibility:hidden}.mce-splitbtn:hover .mce-open{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open{border-left:1px solid transparent;padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open:focus{border-left:1px solid #e2e4e7}.mce-splitbtn .mce-open:hover,.mce-splitbtn .mce-open:active{border-left:1px solid #e2e4e7}.mce-splitbtn.mce-active:hover .mce-open{border-left:1px solid white}.mce-splitbtn.mce-opened{border-color:#e2e4e7}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#fff}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#fff;padding:8px 15px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-tab:focus{color:#2276d2}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#595959}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#2276d2;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#bdbdbd}.mce-rtl .mce-textbox{text-align:right;direction:rtl}.mce-dropzone{border:3px dashed gray;text-align:center}.mce-dropzone span{text-transform:uppercase;display:inline-block;vertical-align:middle}.mce-dropzone:after{content:"";height:100%;display:inline-block;vertical-align:middle}.mce-dropzone.mce-disabled{opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-dropzone.mce-disabled.mce-dragenter{cursor:not-allowed}.mce-browsebutton{position:relative;overflow:hidden}.mce-browsebutton button{position:relative;z-index:1}.mce-browsebutton input{opacity:0;filter:alpha(opacity=0);zoom:1;position:absolute;top:0;left:0;width:100%;height:100%;z-index:0}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#595959}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB}.mce-rtl .mce-filepicker input{direction:ltr}/*# sourceMappingURL=skin.min.css.map */
\ No newline at end of file
html.ios {
width: 100px;
- min-width: 100%;
+ min-width: 100%;
}
body {
}
.mce-content-body img[data-wp-more="nextpage"] {
- background: transparent url( images/pagebreak.png ) repeat-y scroll center center;
+ background: transparent url( images/pagebreak.png ) repeat-y scroll center center;
}
/* Styles for formatting the boundaries of anchors and code elements */
}
a[data-wplink-url-error]:before {
- content: '';
+ content: "";
display: block;
position: absolute;
top: -2px;
z-index: -1;
}
+/* Special styling for the suggestes policy text tutorial sections after they have been pasted in the editor. */
+p.wp-policy-help {
+ background-color: #ff0;
+}
+
/**
* WP Views
*/
}
.wpview-type-gallery:after {
- content: '';
+ content: "";
display: table;
- clear: both;
+ clear: both;
}
.gallery img[data-mce-selected]:focus {
}
.mce-content-body img.mce-wp-nextpage {
- background-image: url( images/pagebreak-2x.png );
+ background-image: url( images/pagebreak-2x.png );
background-size: 1900px 20px;
}
}
(function () {
+var inlite = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
-
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
- };
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.themes.inlite.Theme","tinymce.core.ThemeManager","tinymce.core.ui.Api","tinymce.core.util.Delay","tinymce.themes.inlite.alien.Arr","tinymce.themes.inlite.alien.EditorSettings","tinymce.themes.inlite.core.ElementMatcher","tinymce.themes.inlite.core.Matcher","tinymce.themes.inlite.core.PredicateId","tinymce.themes.inlite.core.SelectionMatcher","tinymce.themes.inlite.core.SkinLoader","tinymce.themes.inlite.ui.Buttons","tinymce.themes.inlite.ui.Panel","global!tinymce.util.Tools.resolve","tinymce.themes.inlite.alien.Type","tinymce.themes.inlite.core.Measure","tinymce.core.util.Tools","tinymce.core.EditorManager","tinymce.core.dom.DOMUtils","tinymce.core.ui.Factory","tinymce.themes.inlite.ui.Toolbar","tinymce.themes.inlite.ui.Forms","tinymce.themes.inlite.core.Layout","tinymce.themes.inlite.file.Conversions","tinymce.themes.inlite.file.Picker","tinymce.themes.inlite.core.Actions","tinymce.themes.inlite.core.Convert","tinymce.core.util.Promise","tinymce.themes.inlite.alien.Uuid","tinymce.themes.inlite.alien.Unlink","tinymce.themes.inlite.core.UrlType","tinymce.core.geom.Rect","tinymce.themes.inlite.alien.Bookmark","tinymce.core.dom.TreeWalker","tinymce.core.dom.RangeUtils"]
-jsc*/
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.ThemeManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.ThemeManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.ui.Api',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.ui.Api');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Delay',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Delay');
- }
-);
-
-/**
- * Arr.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.alien.Arr',
- [
- ],
- function () {
- var flatten = function (arr) {
- return arr.reduce(function (results, item) {
- return Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item);
- }, []);
- };
+ var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');
- return {
- flatten: flatten
- };
- }
-);
-
-/**
- * Type.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.alien.Type',
- [
- ],
- function () {
- var isType = function (type) {
- return function (value) {
- return typeof value === type;
- };
- };
+ var global$1 = tinymce.util.Tools.resolve('tinymce.Env');
- var isArray = function (value) {
- return Array.isArray(value);
- };
+ var global$2 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
- var isNull = function (value) {
- return value === null;
- };
+ var global$3 = tinymce.util.Tools.resolve('tinymce.util.Delay');
- var isObject = function (predicate) {
- return function (value) {
- return !isNull(value) && !isArray(value) && predicate(value);
- };
- };
+ var flatten = function (arr) {
+ return arr.reduce(function (results, item) {
+ return Array.isArray(item) ? results.concat(flatten(item)) : results.concat(item);
+ }, []);
+ };
+ var $_ccn98l17xjjgwejz7 = { flatten: flatten };
+ var result = function (id, rect) {
return {
- isString: isType("string"),
- isNumber: isType("number"),
- isBoolean: isType("boolean"),
- isFunction: isType("function"),
- isObject: isObject(isType("object")),
- isNull: isNull,
- isArray: isArray
- };
- }
-);
-
-/**
- * EditorSettings.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.alien.EditorSettings',
- [
- 'tinymce.themes.inlite.alien.Type'
- ],
- function (Type) {
- var validDefaultOrDie = function (value, predicate) {
- if (predicate(value)) {
- return true;
- }
-
- throw new Error('Default value doesn\'t match requested type.');
- };
-
- var getByTypeOr = function (predicate) {
- return function (editor, name, defaultValue) {
- var settings = editor.settings;
- validDefaultOrDie(defaultValue, predicate);
- return name in settings && predicate(settings[name]) ? settings[name] : defaultValue;
- };
- };
-
- var splitNoEmpty = function (str, delim) {
- return str.split(delim).filter(function (item) {
- return item.length > 0;
- });
+ id: id,
+ rect: rect
};
-
- var itemsToArray = function (value, defaultValue) {
- var stringToItemsArray = function (value) {
- return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value;
- };
-
- var boolToItemsArray = function (value, defaultValue) {
- return value === false ? [] : defaultValue;
- };
-
- if (Type.isArray(value)) {
- return value;
- } else if (Type.isString(value)) {
- return stringToItemsArray(value);
- } else if (Type.isBoolean(value)) {
- return boolToItemsArray(value, defaultValue);
+ };
+ var match = function (editor, matchers) {
+ for (var i = 0; i < matchers.length; i++) {
+ var f = matchers[i];
+ var result_1 = f(editor);
+ if (result_1) {
+ return result_1;
}
+ }
+ return null;
+ };
+ var $_6lg87517zjjgwejza = {
+ match: match,
+ result: result
+ };
- return defaultValue;
+ var fromClientRect = function (clientRect) {
+ return {
+ x: clientRect.left,
+ y: clientRect.top,
+ w: clientRect.width,
+ h: clientRect.height
};
-
- var getToolbarItemsOr = function (predicate) {
- return function (editor, name, defaultValue) {
- var value = name in editor.settings ? editor.settings[name] : defaultValue;
- validDefaultOrDie(defaultValue, predicate);
- return itemsToArray(value, defaultValue);
- };
+ };
+ var toClientRect = function (geomRect) {
+ return {
+ left: geomRect.x,
+ top: geomRect.y,
+ width: geomRect.w,
+ height: geomRect.h,
+ right: geomRect.x + geomRect.w,
+ bottom: geomRect.y + geomRect.h
};
+ };
+ var $_1x174x181jjgwejzd = {
+ fromClientRect: fromClientRect,
+ toClientRect: toClientRect
+ };
+ var toAbsolute = function (rect) {
+ var vp = global$2.DOM.getViewPort();
return {
- // TODO: Add Option based getString, getBool if merged with core
- getStringOr: getByTypeOr(Type.isString),
- getBoolOr: getByTypeOr(Type.isBoolean),
- getNumberOr: getByTypeOr(Type.isNumber),
- getHandlerOr: getByTypeOr(Type.isFunction),
- getToolbarItemsOr: getToolbarItemsOr(Type.isArray)
- };
- }
-);
-
-/**
- * Matcher.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.core.Matcher',
- [
- ],
- function () {
- // result :: String, Rect -> Matcher.result
- var result = function (id, rect) {
- return {
- id: id,
- rect: rect
- };
+ x: rect.x + vp.x,
+ y: rect.y + vp.y,
+ w: rect.w,
+ h: rect.h
};
+ };
+ var measureElement = function (elm) {
+ var clientRect = elm.getBoundingClientRect();
+ return toAbsolute({
+ x: clientRect.left,
+ y: clientRect.top,
+ w: Math.max(elm.clientWidth, elm.offsetWidth),
+ h: Math.max(elm.clientHeight, elm.offsetHeight)
+ });
+ };
+ var getElementRect = function (editor, elm) {
+ return measureElement(elm);
+ };
+ var getPageAreaRect = function (editor) {
+ return measureElement(editor.getElement().ownerDocument.body);
+ };
+ var getContentAreaRect = function (editor) {
+ return measureElement(editor.getContentAreaContainer() || editor.getBody());
+ };
+ var getSelectionRect = function (editor) {
+ var clientRect = editor.selection.getBoundingClientRect();
+ return clientRect ? toAbsolute($_1x174x181jjgwejzd.fromClientRect(clientRect)) : null;
+ };
+ var $_51qgo2180jjgwejzb = {
+ getElementRect: getElementRect,
+ getPageAreaRect: getPageAreaRect,
+ getContentAreaRect: getContentAreaRect,
+ getSelectionRect: getSelectionRect
+ };
- // match :: Editor, [(Editor -> Matcher.result | Null)] -> Matcher.result | Null
- var match = function (editor, matchers) {
- for (var i = 0; i < matchers.length; i++) {
- var f = matchers[i];
- var result = f(editor);
-
- if (result) {
+ var element = function (element, predicateIds) {
+ return function (editor) {
+ for (var i = 0; i < predicateIds.length; i++) {
+ if (predicateIds[i].predicate(element)) {
+ var result = $_6lg87517zjjgwejza.result(predicateIds[i].id, $_51qgo2180jjgwejzb.getElementRect(editor, element));
return result;
}
}
-
return null;
};
-
- return {
- match: match,
- result: result
- };
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.DOMUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.DOMUtils');
- }
-);
-
-/**
- * Convert.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.core.Convert',
- [
- ],
- function () {
- var fromClientRect = function (clientRect) {
- return {
- x: clientRect.left,
- y: clientRect.top,
- w: clientRect.width,
- h: clientRect.height
- };
+ };
+ var parent = function (elements, predicateIds) {
+ return function (editor) {
+ for (var i = 0; i < elements.length; i++) {
+ for (var x = 0; x < predicateIds.length; x++) {
+ if (predicateIds[x].predicate(elements[i])) {
+ return $_6lg87517zjjgwejza.result(predicateIds[x].id, $_51qgo2180jjgwejzb.getElementRect(editor, elements[i]));
+ }
+ }
+ }
+ return null;
};
+ };
+ var $_egsucq17yjjgwejz9 = {
+ element: element,
+ parent: parent
+ };
- var toClientRect = function (geomRect) {
- return {
- left: geomRect.x,
- top: geomRect.y,
- width: geomRect.w,
- height: geomRect.h,
- right: geomRect.x + geomRect.w,
- bottom: geomRect.y + geomRect.h
- };
- };
+ var global$4 = tinymce.util.Tools.resolve('tinymce.util.Tools');
+ var create = function (id, predicate) {
return {
- fromClientRect: fromClientRect,
- toClientRect: toClientRect
+ id: id,
+ predicate: predicate
};
- }
-);
-
-/**
- * Measure.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.core.Measure',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.themes.inlite.core.Convert'
- ],
- function (DOMUtils, Convert) {
- var toAbsolute = function (rect) {
- var vp = DOMUtils.DOM.getViewPort();
+ };
+ var fromContextToolbars = function (toolbars) {
+ return global$4.map(toolbars, function (toolbar) {
+ return create(toolbar.id, toolbar.predicate);
+ });
+ };
+ var $_9rj8kx182jjgwejze = {
+ create: create,
+ fromContextToolbars: fromContextToolbars
+ };
- return {
- x: rect.x + vp.x,
- y: rect.y + vp.y,
- w: rect.w,
- h: rect.h
- };
+ var textSelection = function (id) {
+ return function (editor) {
+ if (!editor.selection.isCollapsed()) {
+ var result = $_6lg87517zjjgwejza.result(id, $_51qgo2180jjgwejzb.getSelectionRect(editor));
+ return result;
+ }
+ return null;
+ };
+ };
+ var emptyTextBlock = function (elements, id) {
+ return function (editor) {
+ var i;
+ var textBlockElementsMap = editor.schema.getTextBlockElements();
+ for (i = 0; i < elements.length; i++) {
+ if (elements[i].nodeName === 'TABLE') {
+ return null;
+ }
+ }
+ for (i = 0; i < elements.length; i++) {
+ if (elements[i].nodeName in textBlockElementsMap) {
+ if (editor.dom.isEmpty(elements[i])) {
+ return $_6lg87517zjjgwejza.result(id, $_51qgo2180jjgwejzb.getSelectionRect(editor));
+ }
+ return null;
+ }
+ }
+ return null;
};
+ };
+ var $_fhwgeg184jjgwejzf = {
+ textSelection: textSelection,
+ emptyTextBlock: emptyTextBlock
+ };
- var measureElement = function (elm) {
- var clientRect = elm.getBoundingClientRect();
+ var fireSkinLoaded = function (editor) {
+ editor.fire('SkinLoaded');
+ };
+ var fireBeforeRenderUI = function (editor) {
+ return editor.fire('BeforeRenderUI');
+ };
+ var $_77u64d186jjgwejzi = {
+ fireSkinLoaded: fireSkinLoaded,
+ fireBeforeRenderUI: fireBeforeRenderUI
+ };
- return toAbsolute({
- x: clientRect.left,
- y: clientRect.top,
- w: Math.max(elm.clientWidth, elm.offsetWidth),
- h: Math.max(elm.clientHeight, elm.offsetHeight)
- });
- };
+ var global$5 = tinymce.util.Tools.resolve('tinymce.EditorManager');
- var getElementRect = function (editor, elm) {
- return measureElement(elm);
+ var isType = function (type) {
+ return function (value) {
+ return typeof value === type;
};
-
- var getPageAreaRect = function (editor) {
- return measureElement(editor.getElement().ownerDocument.body);
+ };
+ var isArray = function (value) {
+ return Array.isArray(value);
+ };
+ var isNull = function (value) {
+ return value === null;
+ };
+ var isObject = function (predicate) {
+ return function (value) {
+ return !isNull(value) && !isArray(value) && predicate(value);
};
+ };
+ var isString = function (value) {
+ return isType('string')(value);
+ };
+ var isNumber = function (value) {
+ return isType('number')(value);
+ };
+ var isFunction = function (value) {
+ return isType('function')(value);
+ };
+ var isBoolean = function (value) {
+ return isType('boolean')(value);
+ };
+ var $_e4npq318ajjgwejzo = {
+ isString: isString,
+ isNumber: isNumber,
+ isBoolean: isBoolean,
+ isFunction: isFunction,
+ isObject: isObject(isType('object')),
+ isNull: isNull,
+ isArray: isArray
+ };
- var getContentAreaRect = function (editor) {
- return measureElement(editor.getContentAreaContainer() || editor.getBody());
+ var validDefaultOrDie = function (value, predicate) {
+ if (predicate(value)) {
+ return true;
+ }
+ throw new Error('Default value doesn\'t match requested type.');
+ };
+ var getByTypeOr = function (predicate) {
+ return function (editor, name, defaultValue) {
+ var settings = editor.settings;
+ validDefaultOrDie(defaultValue, predicate);
+ return name in settings && predicate(settings[name]) ? settings[name] : defaultValue;
};
-
- var getSelectionRect = function (editor) {
- var clientRect = editor.selection.getBoundingClientRect();
- return clientRect ? toAbsolute(Convert.fromClientRect(clientRect)) : null;
+ };
+ var splitNoEmpty = function (str, delim) {
+ return str.split(delim).filter(function (item) {
+ return item.length > 0;
+ });
+ };
+ var itemsToArray = function (value, defaultValue) {
+ var stringToItemsArray = function (value) {
+ return typeof value === 'string' ? splitNoEmpty(value, /[ ,]/) : value;
};
-
- return {
- getElementRect: getElementRect,
- getPageAreaRect: getPageAreaRect,
- getContentAreaRect: getContentAreaRect,
- getSelectionRect: getSelectionRect
+ var boolToItemsArray = function (value, defaultValue) {
+ return value === false ? [] : defaultValue;
};
- }
-);
-
-/**
- * ElementMatcher.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.core.ElementMatcher',
- [
- 'tinymce.themes.inlite.core.Matcher',
- 'tinymce.themes.inlite.core.Measure'
- ],
- function (Matcher, Measure) {
- // element :: Element, [PredicateId] -> (Editor -> Matcher.result | Null)
- var element = function (element, predicateIds) {
- return function (editor) {
- for (var i = 0; i < predicateIds.length; i++) {
- if (predicateIds[i].predicate(element)) {
- return Matcher.result(predicateIds[i].id, Measure.getElementRect(editor, element));
- }
- }
-
- return null;
- };
+ if ($_e4npq318ajjgwejzo.isArray(value)) {
+ return value;
+ } else if ($_e4npq318ajjgwejzo.isString(value)) {
+ return stringToItemsArray(value);
+ } else if ($_e4npq318ajjgwejzo.isBoolean(value)) {
+ return boolToItemsArray(value, defaultValue);
+ }
+ return defaultValue;
+ };
+ var getToolbarItemsOr = function (predicate) {
+ return function (editor, name, defaultValue) {
+ var value = name in editor.settings ? editor.settings[name] : defaultValue;
+ validDefaultOrDie(defaultValue, predicate);
+ return itemsToArray(value, defaultValue);
};
+ };
+ var $_c8umh189jjgwejzm = {
+ getStringOr: getByTypeOr($_e4npq318ajjgwejzo.isString),
+ getBoolOr: getByTypeOr($_e4npq318ajjgwejzo.isBoolean),
+ getNumberOr: getByTypeOr($_e4npq318ajjgwejzo.isNumber),
+ getHandlerOr: getByTypeOr($_e4npq318ajjgwejzo.isFunction),
+ getToolbarItemsOr: getToolbarItemsOr($_e4npq318ajjgwejzo.isArray)
+ };
- // parent :: [Elements], [PredicateId] -> (Editor -> Matcher.result | Null)
- var parent = function (elements, predicateIds) {
- return function (editor) {
- for (var i = 0; i < elements.length; i++) {
- for (var x = 0; x < predicateIds.length; x++) {
- if (predicateIds[x].predicate(elements[i])) {
- return Matcher.result(predicateIds[x].id, Measure.getElementRect(editor, elements[i]));
- }
- }
- }
+ var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');
- return null;
- };
+ var result$1 = function (rect, position) {
+ return {
+ rect: rect,
+ position: position
};
-
+ };
+ var moveTo = function (rect, toRect) {
return {
- element: element,
- parent: parent
+ x: toRect.x,
+ y: toRect.y,
+ w: rect.w,
+ h: rect.h
};
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-/**
- * PredicateId.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.core.PredicateId',
- [
- 'tinymce.core.util.Tools'
- ],
- function (Tools) {
- var create = function (id, predicate) {
- return {
- id: id,
- predicate: predicate
- };
+ };
+ var calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) {
+ var relPos, relRect, outputPanelRect;
+ var paddedContentRect = {
+ x: contentAreaRect.x,
+ y: contentAreaRect.y,
+ w: contentAreaRect.w + (contentAreaRect.w < panelRect.w + targetRect.w ? panelRect.w : 0),
+ h: contentAreaRect.h + (contentAreaRect.h < panelRect.h + targetRect.h ? panelRect.h : 0)
};
-
- // fromContextToolbars :: [ContextToolbar] -> [PredicateId]
- var fromContextToolbars = function (toolbars) {
- return Tools.map(toolbars, function (toolbar) {
- return create(toolbar.id, toolbar.predicate);
+ relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions1);
+ targetRect = global$6.clamp(targetRect, paddedContentRect);
+ if (relPos) {
+ relRect = global$6.relativePosition(panelRect, targetRect, relPos);
+ outputPanelRect = moveTo(panelRect, relRect);
+ return result$1(outputPanelRect, relPos);
+ }
+ targetRect = global$6.intersect(paddedContentRect, targetRect);
+ if (targetRect) {
+ relPos = global$6.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions2);
+ if (relPos) {
+ relRect = global$6.relativePosition(panelRect, targetRect, relPos);
+ outputPanelRect = moveTo(panelRect, relRect);
+ return result$1(outputPanelRect, relPos);
+ }
+ outputPanelRect = moveTo(panelRect, targetRect);
+ return result$1(outputPanelRect, relPos);
+ }
+ return null;
+ };
+ var calcInsert = function (targetRect, contentAreaRect, panelRect) {
+ return calcByPositions([
+ 'cr-cl',
+ 'cl-cr'
+ ], [
+ 'bc-tc',
+ 'bl-tl',
+ 'br-tr'
+ ], targetRect, contentAreaRect, panelRect);
+ };
+ var calc = function (targetRect, contentAreaRect, panelRect) {
+ return calcByPositions([
+ 'tc-bc',
+ 'bc-tc',
+ 'tl-bl',
+ 'bl-tl',
+ 'tr-br',
+ 'br-tr',
+ 'cr-cl',
+ 'cl-cr'
+ ], [
+ 'bc-tc',
+ 'bl-tl',
+ 'br-tr',
+ 'cr-cl'
+ ], targetRect, contentAreaRect, panelRect);
+ };
+ var userConstrain = function (handler, targetRect, contentAreaRect, panelRect) {
+ var userConstrainedPanelRect;
+ if (typeof handler === 'function') {
+ userConstrainedPanelRect = handler({
+ elementRect: $_1x174x181jjgwejzd.toClientRect(targetRect),
+ contentAreaRect: $_1x174x181jjgwejzd.toClientRect(contentAreaRect),
+ panelRect: $_1x174x181jjgwejzd.toClientRect(panelRect)
});
- };
+ return $_1x174x181jjgwejzd.fromClientRect(userConstrainedPanelRect);
+ }
+ return panelRect;
+ };
+ var defaultHandler = function (rects) {
+ return rects.panelRect;
+ };
+ var $_gir42l18bjjgwejzq = {
+ calcInsert: calcInsert,
+ calc: calc,
+ userConstrain: userConstrain,
+ defaultHandler: defaultHandler
+ };
- return {
- create: create,
- fromContextToolbars: fromContextToolbars
+ var toAbsoluteUrl = function (editor, url) {
+ return editor.documentBaseURI.toAbsolute(url);
+ };
+ var urlFromName = function (name) {
+ var prefix = global$5.baseURL + '/skins/';
+ return name ? prefix + name : prefix + 'lightgray';
+ };
+ var getTextSelectionToolbarItems = function (editor) {
+ return $_c8umh189jjgwejzm.getToolbarItemsOr(editor, 'selection_toolbar', [
+ 'bold',
+ 'italic',
+ '|',
+ 'quicklink',
+ 'h2',
+ 'h3',
+ 'blockquote'
+ ]);
+ };
+ var getInsertToolbarItems = function (editor) {
+ return $_c8umh189jjgwejzm.getToolbarItemsOr(editor, 'insert_toolbar', [
+ 'quickimage',
+ 'quicktable'
+ ]);
+ };
+ var getPositionHandler = function (editor) {
+ return $_c8umh189jjgwejzm.getHandlerOr(editor, 'inline_toolbar_position_handler', $_gir42l18bjjgwejzq.defaultHandler);
+ };
+ var getSkinUrl = function (editor) {
+ var settings = editor.settings;
+ return settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin);
+ };
+ var isSkinDisabled = function (editor) {
+ return editor.settings.skin === false;
+ };
+ var $_4j2h42187jjgwejzk = {
+ getTextSelectionToolbarItems: getTextSelectionToolbarItems,
+ getInsertToolbarItems: getInsertToolbarItems,
+ getPositionHandler: getPositionHandler,
+ getSkinUrl: getSkinUrl,
+ isSkinDisabled: isSkinDisabled
+ };
+
+ var fireSkinLoaded$1 = function (editor, callback) {
+ var done = function () {
+ editor._skinLoaded = true;
+ $_77u64d186jjgwejzi.fireSkinLoaded(editor);
+ callback();
};
- }
-);
-
-/**
- * SelectionMatcher.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.core.SelectionMatcher',
- [
- 'tinymce.themes.inlite.core.Matcher',
- 'tinymce.themes.inlite.core.Measure'
- ],
- function (Matcher, Measure) {
- // textSelection :: String -> (Editor -> Matcher.result | Null)
- var textSelection = function (id) {
- return function (editor) {
- if (!editor.selection.isCollapsed()) {
- return Matcher.result(id, Measure.getSelectionRect(editor));
- }
-
- return null;
- };
+ if (editor.initialized) {
+ done();
+ } else {
+ editor.on('init', done);
+ }
+ };
+ var load = function (editor, callback) {
+ var skinUrl = $_4j2h42187jjgwejzk.getSkinUrl(editor);
+ var done = function () {
+ fireSkinLoaded$1(editor, callback);
};
+ if ($_4j2h42187jjgwejzk.isSkinDisabled(editor)) {
+ done();
+ } else {
+ global$2.DOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done);
+ editor.contentCSS.push(skinUrl + '/content.inline.min.css');
+ }
+ };
+ var $_93v08q185jjgwejzh = { load: load };
- // emptyTextBlock :: [Elements], String -> (Editor -> Matcher.result | Null)
- var emptyTextBlock = function (elements, id) {
- return function (editor) {
- var i, textBlockElementsMap = editor.schema.getTextBlockElements();
-
- for (i = 0; i < elements.length; i++) {
- if (elements[i].nodeName === 'TABLE') {
- return null;
- }
- }
-
- for (i = 0; i < elements.length; i++) {
- if (elements[i].nodeName in textBlockElementsMap) {
- if (editor.dom.isEmpty(elements[i])) {
- return Matcher.result(id, Measure.getSelectionRect(editor));
- }
-
- return null;
- }
- }
-
- return null;
- };
+ var getSelectionElements = function (editor) {
+ var node = editor.selection.getNode();
+ var elms = editor.dom.getParents(node, '*');
+ return elms;
+ };
+ var createToolbar = function (editor, selector, id, items) {
+ var selectorPredicate = function (elm) {
+ return editor.dom.is(elm, selector);
};
-
return {
- textSelection: textSelection,
- emptyTextBlock: emptyTextBlock
+ predicate: selectorPredicate,
+ id: id,
+ items: items
};
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.EditorManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.EditorManager');
- }
-);
-
-/**
- * SkinLoader.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.core.SkinLoader',
- [
- 'tinymce.core.EditorManager',
- 'tinymce.core.dom.DOMUtils'
- ],
- function (EditorManager, DOMUtils) {
- var fireSkinLoaded = function (editor, callback) {
- var done = function () {
- editor._skinLoaded = true;
- editor.fire('SkinLoaded');
- callback();
- };
-
- if (editor.initialized) {
- done();
+ };
+ var getToolbars = function (editor) {
+ var contextToolbars = editor.contextToolbars;
+ return $_ccn98l17xjjgwejz7.flatten([
+ contextToolbars ? contextToolbars : [],
+ createToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright')
+ ]);
+ };
+ var findMatchResult = function (editor, toolbars) {
+ var result, elements, contextToolbarsPredicateIds;
+ elements = getSelectionElements(editor);
+ contextToolbarsPredicateIds = $_9rj8kx182jjgwejze.fromContextToolbars(toolbars);
+ result = $_6lg87517zjjgwejza.match(editor, [
+ $_egsucq17yjjgwejz9.element(elements[0], contextToolbarsPredicateIds),
+ $_fhwgeg184jjgwejzf.textSelection('text'),
+ $_fhwgeg184jjgwejzf.emptyTextBlock(elements, 'insert'),
+ $_egsucq17yjjgwejz9.parent(elements, contextToolbarsPredicateIds)
+ ]);
+ return result && result.rect ? result : null;
+ };
+ var editorHasFocus = function (editor) {
+ return document.activeElement === editor.getBody();
+ };
+ var togglePanel = function (editor, panel) {
+ var toggle = function () {
+ var toolbars = getToolbars(editor);
+ var result = findMatchResult(editor, toolbars);
+ if (result) {
+ panel.show(editor, result.id, result.rect, toolbars);
} else {
- editor.on('init', done);
+ panel.hide();
}
};
-
- var urlFromName = function (name) {
- var prefix = EditorManager.baseURL + '/skins/';
- return name ? prefix + name : prefix + 'lightgray';
- };
-
- var toAbsoluteUrl = function (editor, url) {
- return editor.documentBaseURI.toAbsolute(url);
- };
-
- var load = function (editor, callback) {
- var settings = editor.settings;
- var skinUrl = settings.skin_url ? toAbsoluteUrl(editor, settings.skin_url) : urlFromName(settings.skin);
-
- var done = function () {
- fireSkinLoaded(editor, callback);
- };
-
- DOMUtils.DOM.styleSheetLoader.load(skinUrl + '/skin.min.css', done);
- editor.contentCSS.push(skinUrl + '/content.inline.min.css');
- };
-
- return {
- load: load
+ return function () {
+ if (!editor.removed && editorHasFocus(editor)) {
+ toggle();
+ }
};
- }
-);
-
-
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.ui.Factory',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.ui.Factory');
- }
-);
-
-/**
- * Toolbar.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.ui.Toolbar',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.ui.Factory',
- 'tinymce.themes.inlite.alien.Type'
- ],
- function (Tools, Factory, Type) {
- var getSelectorStateResult = function (itemName, item) {
- var result = function (selector, handler) {
- return {
- selector: selector,
- handler: handler
- };
- };
-
- var activeHandler = function (state) {
- item.active(state);
- };
-
- var disabledHandler = function (state) {
- item.disabled(state);
- };
-
- if (item.settings.stateSelector) {
- return result(item.settings.stateSelector, activeHandler);
+ };
+ var repositionPanel = function (editor, panel) {
+ return function () {
+ var toolbars = getToolbars(editor);
+ var result = findMatchResult(editor, toolbars);
+ if (result) {
+ panel.reposition(editor, result.id, result.rect);
}
-
- if (item.settings.disabledStateSelector) {
- return result(item.settings.disabledStateSelector, disabledHandler);
+ };
+ };
+ var ignoreWhenFormIsVisible = function (editor, panel, f) {
+ return function () {
+ if (!editor.removed && !panel.inForm()) {
+ f();
}
-
- return null;
};
+ };
+ var bindContextualToolbarsEvents = function (editor, panel) {
+ var throttledTogglePanel = global$3.throttle(togglePanel(editor, panel), 0);
+ var throttledTogglePanelWhenNotInForm = global$3.throttle(ignoreWhenFormIsVisible(editor, panel, togglePanel(editor, panel)), 0);
+ var reposition = repositionPanel(editor, panel);
+ editor.on('blur hide ObjectResizeStart', panel.hide);
+ editor.on('click', throttledTogglePanel);
+ editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);
+ editor.on('ResizeEditor keyup', throttledTogglePanel);
+ editor.on('ResizeWindow', reposition);
+ global$2.DOM.bind(global$1.container, 'scroll', reposition);
+ editor.on('remove', function () {
+ global$2.DOM.unbind(global$1.container, 'scroll', reposition);
+ panel.remove();
+ });
+ editor.shortcuts.add('Alt+F10,F10', '', panel.focus);
+ };
+ var overrideLinkShortcut = function (editor, panel) {
+ editor.shortcuts.remove('meta+k');
+ editor.shortcuts.add('meta+k', '', function () {
+ var toolbars = getToolbars(editor);
+ var result = $_6lg87517zjjgwejza.match(editor, [$_fhwgeg184jjgwejzf.textSelection('quicklink')]);
+ if (result) {
+ panel.show(editor, result.id, result.rect, toolbars);
+ }
+ });
+ };
+ var renderInlineUI = function (editor, panel) {
+ $_93v08q185jjgwejzh.load(editor, function () {
+ bindContextualToolbarsEvents(editor, panel);
+ overrideLinkShortcut(editor, panel);
+ });
+ return {};
+ };
+ var fail = function (message) {
+ throw new Error(message);
+ };
+ var renderUI = function (editor, panel) {
+ return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');
+ };
+ var $_b0wxh217tjjgwejyx = { renderUI: renderUI };
- var bindSelectorChanged = function (editor, itemName, item) {
- return function () {
- var result = getSelectorStateResult(itemName, item);
- if (result !== null) {
- editor.selection.selectorChanged(result.selector, result.handler);
- }
- };
- };
+ var noop = function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
+ }
+ };
- var itemsToArray = function (items) {
- if (Type.isArray(items)) {
- return items;
- } else if (Type.isString(items)) {
- return items.split(/[ ,]/);
+ var compose = function (fa, fb) {
+ return function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
}
-
- return [];
+ return fa(fb.apply(null, arguments));
};
+ };
+ var constant = function (value) {
+ return function () {
+ return value;
+ };
+ };
- var create = function (editor, name, items) {
- var toolbarItems = [], buttonGroup;
- if (!items) {
- return;
+ var curry = function (f) {
+ var x = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ x[_i - 1] = arguments[_i];
+ }
+ var args = new Array(arguments.length - 1);
+ for (var i = 1; i < arguments.length; i++)
+ args[i - 1] = arguments[i];
+ return function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
}
+ var newArgs = new Array(arguments.length);
+ for (var j = 0; j < newArgs.length; j++)
+ newArgs[j] = arguments[j];
+ var all = args.concat(newArgs);
+ return f.apply(null, all);
+ };
+ };
- Tools.each(itemsToArray(items), function (item) {
- var itemName;
- if (item == '|') {
- buttonGroup = null;
- } else {
- if (editor.buttons[item]) {
- if (!buttonGroup) {
- buttonGroup = { type: 'buttongroup', items: [] };
- toolbarItems.push(buttonGroup);
- }
- itemName = item;
- item = editor.buttons[itemName];
- if (typeof item == 'function') {
- item = item();
- }
+ var never = constant(false);
+ var always = constant(true);
- item.type = item.type || 'button';
-
- item = Factory.create(item);
- item.on('postRender', bindSelectorChanged(editor, itemName, item));
- buttonGroup.items.push(item);
- }
- }
- });
-
- return Factory.create({
- type: 'toolbar',
- layout: 'flow',
- name: name,
- items: toolbarItems
- });
- };
-
- return {
- create: create
- };
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Promise',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Promise');
- }
-);
-
-/**
- * Uuid.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * Generates unique ids this is the same as in core but since
- * it's not exposed as a global we can't access it.
- */
-define(
- "tinymce.themes.inlite.alien.Uuid",
- [
- ],
- function () {
- var count = 0;
-
- var seed = function () {
- var rnd = function () {
- return Math.round(Math.random() * 0xFFFFFFFF).toString(36);
- };
-
- return 's' + Date.now().toString(36) + rnd() + rnd() + rnd();
- };
-
- var uuid = function (prefix) {
- return prefix + (count++) + seed();
- };
-
- return {
- uuid: uuid
+ var never$1 = never;
+ var always$1 = always;
+ var none = function () {
+ return NONE;
+ };
+ var NONE = function () {
+ var eq = function (o) {
+ return o.isNone();
};
- }
-);
-
-/**
- * Bookmark.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.alien.Bookmark',
- [
- ],
- function () {
- /**
- * Returns a range bookmark. This will convert indexed bookmarks into temporary span elements with
- * index 0 so that they can be restored properly after the DOM has been modified. Text bookmarks will not have spans
- * added to them since they can be restored after a dom operation.
- *
- * So this: <p><b>|</b><b>|</b></p>
- * becomes: <p><b><span data-mce-type="bookmark">|</span></b><b data-mce-type="bookmark">|</span></b></p>
- *
- * @param {DOMRange} rng DOM Range to get bookmark on.
- * @return {Object} Bookmark object.
- */
- var create = function (dom, rng) {
- var bookmark = {};
-
- function setupEndPoint(start) {
- var offsetNode, container, offset;
-
- container = rng[start ? 'startContainer' : 'endContainer'];
- offset = rng[start ? 'startOffset' : 'endOffset'];
-
- if (container.nodeType == 1) {
- offsetNode = dom.create('span', { 'data-mce-type': 'bookmark' });
-
- if (container.hasChildNodes()) {
- offset = Math.min(offset, container.childNodes.length - 1);
-
- if (start) {
- container.insertBefore(offsetNode, container.childNodes[offset]);
- } else {
- dom.insertAfter(offsetNode, container.childNodes[offset]);
- }
- } else {
- container.appendChild(offsetNode);
- }
-
- container = offsetNode;
- offset = 0;
- }
-
- bookmark[start ? 'startContainer' : 'endContainer'] = container;
- bookmark[start ? 'startOffset' : 'endOffset'] = offset;
- }
-
- setupEndPoint(true);
-
- if (!rng.collapsed) {
- setupEndPoint();
- }
-
- return bookmark;
+ var call$$1 = function (thunk) {
+ return thunk();
};
-
- /**
- * Moves the selection to the current bookmark and removes any selection container wrappers.
- *
- * @param {Object} bookmark Bookmark object to move selection to.
- */
- var resolve = function (dom, bookmark) {
- function restoreEndPoint(start) {
- var container, offset, node;
-
- function nodeIndex(container) {
- var node = container.parentNode.firstChild, idx = 0;
-
- while (node) {
- if (node == container) {
- return idx;
- }
-
- // Skip data-mce-type=bookmark nodes
- if (node.nodeType != 1 || node.getAttribute('data-mce-type') != 'bookmark') {
- idx++;
- }
-
- node = node.nextSibling;
- }
-
- return -1;
- }
-
- container = node = bookmark[start ? 'startContainer' : 'endContainer'];
- offset = bookmark[start ? 'startOffset' : 'endOffset'];
-
- if (!container) {
- return;
- }
-
- if (container.nodeType == 1) {
- offset = nodeIndex(container);
- container = container.parentNode;
- dom.remove(node);
- }
-
- bookmark[start ? 'startContainer' : 'endContainer'] = container;
- bookmark[start ? 'startOffset' : 'endOffset'] = offset;
- }
-
- restoreEndPoint(true);
- restoreEndPoint();
-
- var rng = dom.createRng();
-
- rng.setStart(bookmark.startContainer, bookmark.startOffset);
-
- if (bookmark.endContainer) {
- rng.setEnd(bookmark.endContainer, bookmark.endOffset);
- }
-
- return rng;
+ var id = function (n) {
+ return n;
};
-
- return {
- create: create,
- resolve: resolve
+ var noop$$1 = function () {
};
- }
-);
-
-
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.TreeWalker',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.TreeWalker');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.RangeUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.RangeUtils');
- }
-);
-
-/**
- * Unlink.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-/**
- * Unlink implementation that doesn't leave partial links for example it would produce:
- * a[b<a href="x">c]d</a>e -> a[bc]de
- * instead of:
- * a[b<a href="x">c]d</a>e -> a[bc]<a href="x">d</a>e
- */
-define(
- "tinymce.themes.inlite.alien.Unlink",
- [
- 'tinymce.themes.inlite.alien.Bookmark',
- 'tinymce.core.util.Tools',
- 'tinymce.core.dom.TreeWalker',
- 'tinymce.core.dom.RangeUtils'
- ],
- function (Bookmark, Tools, TreeWalker, RangeUtils) {
- var getSelectedElements = function (rootElm, startNode, endNode) {
- var walker, node, elms = [];
-
- walker = new TreeWalker(startNode, rootElm);
- for (node = startNode; node; node = walker.next()) {
- if (node.nodeType === 1) {
- elms.push(node);
- }
-
- if (node === endNode) {
- break;
- }
- }
-
- return elms;
+ var nul = function () {
+ return null;
};
-
- var unwrapElements = function (editor, elms) {
- var bookmark, dom, selection;
-
- dom = editor.dom;
- selection = editor.selection;
- bookmark = Bookmark.create(dom, selection.getRng());
-
- Tools.each(elms, function (elm) {
- editor.dom.remove(elm, true);
- });
-
- selection.setRng(Bookmark.resolve(dom, bookmark));
+ var undef = function () {
+ return undefined;
};
-
- var isLink = function (elm) {
- return elm.nodeName === 'A' && elm.hasAttribute('href');
+ var me = {
+ fold: function (n, s) {
+ return n();
+ },
+ is: never$1,
+ isSome: never$1,
+ isNone: always$1,
+ getOr: id,
+ getOrThunk: call$$1,
+ getOrDie: function (msg) {
+ throw new Error(msg || 'error: getOrDie called on none.');
+ },
+ getOrNull: nul,
+ getOrUndefined: undef,
+ or: id,
+ orThunk: call$$1,
+ map: none,
+ ap: none,
+ each: noop$$1,
+ bind: none,
+ flatten: none,
+ exists: never$1,
+ forall: always$1,
+ filter: none,
+ equals: eq,
+ equals_: eq,
+ toArray: function () {
+ return [];
+ },
+ toString: constant('none()')
};
-
- var getParentAnchorOrSelf = function (dom, elm) {
- var anchorElm = dom.getParent(elm, isLink);
- return anchorElm ? anchorElm : elm;
+ if (Object.freeze)
+ Object.freeze(me);
+ return me;
+ }();
+ var some = function (a) {
+ var constant_a = function () {
+ return a;
};
-
- var getSelectedAnchors = function (editor) {
- var startElm, endElm, rootElm, anchorElms, selection, dom, rng;
-
- selection = editor.selection;
- dom = editor.dom;
- rng = selection.getRng();
- startElm = getParentAnchorOrSelf(dom, RangeUtils.getNode(rng.startContainer, rng.startOffset));
- endElm = RangeUtils.getNode(rng.endContainer, rng.endOffset);
- rootElm = editor.getBody();
- anchorElms = Tools.grep(getSelectedElements(rootElm, startElm, endElm), isLink);
-
- return anchorElms;
+ var self = function () {
+ return me;
};
-
- var unlinkSelection = function (editor) {
- unwrapElements(editor, getSelectedAnchors(editor));
+ var map = function (f) {
+ return some(f(a));
};
-
- return {
- unlinkSelection: unlinkSelection
+ var bind = function (f) {
+ return f(a);
};
- }
-);
-
-/**
- * Actions.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.core.Actions',
- [
- 'tinymce.themes.inlite.alien.Uuid',
- 'tinymce.themes.inlite.alien.Unlink'
- ],
- function (Uuid, Unlink) {
- var createTableHtml = function (cols, rows) {
- var x, y, html;
-
- html = '<table data-mce-id="mce" style="width: 100%">';
- html += '<tbody>';
-
- for (y = 0; y < rows; y++) {
- html += '<tr>';
-
- for (x = 0; x < cols; x++) {
- html += '<td><br></td>';
- }
-
- html += '</tr>';
+ var me = {
+ fold: function (n, s) {
+ return s(a);
+ },
+ is: function (v) {
+ return a === v;
+ },
+ isSome: always$1,
+ isNone: never$1,
+ getOr: constant_a,
+ getOrThunk: constant_a,
+ getOrDie: constant_a,
+ getOrNull: constant_a,
+ getOrUndefined: constant_a,
+ or: self,
+ orThunk: self,
+ map: map,
+ ap: function (optfab) {
+ return optfab.fold(none, function (fab) {
+ return some(fab(a));
+ });
+ },
+ each: function (f) {
+ f(a);
+ },
+ bind: bind,
+ flatten: constant_a,
+ exists: bind,
+ forall: bind,
+ filter: function (f) {
+ return f(a) ? me : NONE;
+ },
+ equals: function (o) {
+ return o.is(a);
+ },
+ equals_: function (o, elementEq) {
+ return o.fold(never$1, function (b) {
+ return elementEq(a, b);
+ });
+ },
+ toArray: function () {
+ return [a];
+ },
+ toString: function () {
+ return 'some(' + a + ')';
}
-
- html += '</tbody>';
- html += '</table>';
-
- return html;
};
+ return me;
+ };
+ var from = function (value) {
+ return value === null || value === undefined ? NONE : some(value);
+ };
+ var Option = {
+ some: some,
+ none: none,
+ from: from
+ };
- var getInsertedElement = function (editor) {
- var elms = editor.dom.select('*[data-mce-id]');
- return elms[0];
+ var typeOf = function (x) {
+ if (x === null)
+ return 'null';
+ var t = typeof x;
+ if (t === 'object' && Array.prototype.isPrototypeOf(x))
+ return 'array';
+ if (t === 'object' && String.prototype.isPrototypeOf(x))
+ return 'string';
+ return t;
+ };
+ var isType$1 = function (type) {
+ return function (value) {
+ return typeOf(value) === type;
};
+ };
- var insertTable = function (editor, cols, rows) {
- editor.undoManager.transact(function () {
- var tableElm, cellElm;
-
- editor.insertContent(createTableHtml(cols, rows));
-
- tableElm = getInsertedElement(editor);
- tableElm.removeAttribute('data-mce-id');
- cellElm = editor.dom.select('td,th', tableElm);
- editor.selection.setCursorLocation(cellElm[0], 0);
- });
- };
- var formatBlock = function (editor, formatName) {
- editor.execCommand('FormatBlock', false, formatName);
- };
- var insertBlob = function (editor, base64, blob) {
- var blobCache, blobInfo;
- blobCache = editor.editorUpload.blobCache;
- blobInfo = blobCache.create(Uuid.uuid('mceu'), blob, base64);
- blobCache.add(blobInfo);
- editor.insertContent(editor.dom.createHTML('img', { src: blobInfo.blobUri() }));
- };
- var collapseSelectionToEnd = function (editor) {
- editor.selection.collapse(false);
- };
+ var isFunction$1 = isType$1('function');
+ var isNumber$1 = isType$1('number');
- var unlink = function (editor) {
- editor.focus();
- Unlink.unlinkSelection(editor);
- collapseSelectionToEnd(editor);
+ var rawIndexOf = function () {
+ var pIndexOf = Array.prototype.indexOf;
+ var fastIndex = function (xs, x) {
+ return pIndexOf.call(xs, x);
};
-
- var changeHref = function (editor, elm, url) {
- editor.focus();
- editor.dom.setAttrib(elm, 'href', url);
- collapseSelectionToEnd(editor);
+ var slowIndex = function (xs, x) {
+ return slowIndexOf(xs, x);
};
+ return pIndexOf === undefined ? slowIndex : fastIndex;
+ }();
+ var indexOf = function (xs, x) {
+ var r = rawIndexOf(xs, x);
+ return r === -1 ? Option.none() : Option.some(r);
+ };
- var insertLink = function (editor, url) {
- editor.execCommand('mceInsertLink', false, { href: url });
- collapseSelectionToEnd(editor);
- };
+ var exists = function (xs, pred) {
+ return findIndex(xs, pred).isSome();
+ };
- var updateOrInsertLink = function (editor, url) {
- var elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');
- elm ? changeHref(editor, elm, url) : insertLink(editor, url);
- };
- var createLink = function (editor, url) {
- url.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url);
- };
+ var map = function (xs, f) {
+ var len = xs.length;
+ var r = new Array(len);
+ for (var i = 0; i < len; i++) {
+ var x = xs[i];
+ r[i] = f(x, i, xs);
+ }
+ return r;
+ };
+ var each = function (xs, f) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ f(x, i, xs);
+ }
+ };
- return {
- insertTable: insertTable,
- formatBlock: formatBlock,
- insertBlob: insertBlob,
- createLink: createLink,
- unlink: unlink
- };
- }
-);
-/**
- * UrlType.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
+ var filter = function (xs, pred) {
+ var r = [];
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ r.push(x);
+ }
+ }
+ return r;
+ };
-define(
- 'tinymce.themes.inlite.core.UrlType',
- [
- ],
- function () {
- var isDomainLike = function (href) {
- return /^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim());
- };
- var isAbsolute = function (href) {
- return /^https?:\/\//.test(href.trim());
- };
+ var foldl = function (xs, f, acc) {
+ each(xs, function (x) {
+ acc = f(acc, x);
+ });
+ return acc;
+ };
+ var find = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ return Option.some(x);
+ }
+ }
+ return Option.none();
+ };
+ var findIndex = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ return Option.some(i);
+ }
+ }
+ return Option.none();
+ };
+ var slowIndexOf = function (xs, x) {
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ if (xs[i] === x) {
+ return i;
+ }
+ }
+ return -1;
+ };
+ var push = Array.prototype.push;
+ var flatten$1 = function (xs) {
+ var r = [];
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ if (!Array.prototype.isPrototypeOf(xs[i]))
+ throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
+ push.apply(r, xs[i]);
+ }
+ return r;
+ };
- return {
- isDomainLike: isDomainLike,
- isAbsolute: isAbsolute
- };
- }
-);
-
-
-
-/**
- * Forms.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.ui.Forms',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.ui.Factory',
- 'tinymce.core.util.Promise',
- 'tinymce.themes.inlite.core.Actions',
- 'tinymce.themes.inlite.core.UrlType'
- ],
- function (Tools, Factory, Promise, Actions, UrlType) {
- var focusFirstTextBox = function (form) {
- form.find('textbox').eq(0).each(function (ctrl) {
- ctrl.focus();
- });
- };
-
- var createForm = function (name, spec) {
- var form = Factory.create(
- Tools.extend({
- type: 'form',
- layout: 'flex',
- direction: 'row',
- padding: 5,
- name: name,
- spacing: 3
- }, spec)
- );
- form.on('show', function () {
- focusFirstTextBox(form);
- });
- return form;
- };
+ var slice = Array.prototype.slice;
+ var reverse = function (xs) {
+ var r = slice.call(xs, 0);
+ r.reverse();
+ return r;
+ };
- var toggleVisibility = function (ctrl, state) {
- return state ? ctrl.show() : ctrl.hide();
- };
- var askAboutPrefix = function (editor, href) {
- return new Promise(function (resolve) {
- editor.windowManager.confirm(
- 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?',
- function (result) {
- var output = result === true ? 'http://' + href : href;
- resolve(output);
- }
- );
- });
- };
- var convertLinkToAbsolute = function (editor, href) {
- return !UrlType.isAbsolute(href) && UrlType.isDomainLike(href) ? askAboutPrefix(editor, href) : Promise.resolve(href);
- };
- var createQuickLinkForm = function (editor, hide) {
- var attachState = {};
- var unlink = function () {
- editor.focus();
- Actions.unlink(editor);
- hide();
- };
- var onChangeHandler = function (e) {
- var meta = e.meta;
+ var from$1 = isFunction$1(Array.from) ? Array.from : function (x) {
+ return slice.call(x);
+ };
- if (meta && meta.attach) {
- attachState = {
- href: this.value(),
- attach: meta.attach
- };
- }
+ var count = 0;
+ var funcs = {
+ id: function () {
+ return 'mceu_' + count++;
+ },
+ create: function (name$$1, attrs, children) {
+ var elm = document.createElement(name$$1);
+ global$2.DOM.setAttribs(elm, attrs);
+ if (typeof children === 'string') {
+ elm.innerHTML = children;
+ } else {
+ global$4.each(children, function (child) {
+ if (child.nodeType) {
+ elm.appendChild(child);
+ }
+ });
+ }
+ return elm;
+ },
+ createFragment: function (html) {
+ return global$2.DOM.createFragment(html);
+ },
+ getWindowSize: function () {
+ return global$2.DOM.getViewPort();
+ },
+ getSize: function (elm) {
+ var width, height;
+ if (elm.getBoundingClientRect) {
+ var rect = elm.getBoundingClientRect();
+ width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);
+ height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);
+ } else {
+ width = elm.offsetWidth;
+ height = elm.offsetHeight;
+ }
+ return {
+ width: width,
+ height: height
};
+ },
+ getPos: function (elm, root) {
+ return global$2.DOM.getPos(elm, root || funcs.getContainer());
+ },
+ getContainer: function () {
+ return global$1.container ? global$1.container : document.body;
+ },
+ getViewPort: function (win) {
+ return global$2.DOM.getViewPort(win);
+ },
+ get: function (id) {
+ return document.getElementById(id);
+ },
+ addClass: function (elm, cls) {
+ return global$2.DOM.addClass(elm, cls);
+ },
+ removeClass: function (elm, cls) {
+ return global$2.DOM.removeClass(elm, cls);
+ },
+ hasClass: function (elm, cls) {
+ return global$2.DOM.hasClass(elm, cls);
+ },
+ toggleClass: function (elm, cls, state) {
+ return global$2.DOM.toggleClass(elm, cls, state);
+ },
+ css: function (elm, name$$1, value) {
+ return global$2.DOM.setStyle(elm, name$$1, value);
+ },
+ getRuntimeStyle: function (elm, name$$1) {
+ return global$2.DOM.getStyle(elm, name$$1, true);
+ },
+ on: function (target, name$$1, callback, scope) {
+ return global$2.DOM.bind(target, name$$1, callback, scope);
+ },
+ off: function (target, name$$1, callback) {
+ return global$2.DOM.unbind(target, name$$1, callback);
+ },
+ fire: function (target, name$$1, args) {
+ return global$2.DOM.fire(target, name$$1, args);
+ },
+ innerHtml: function (elm, html) {
+ global$2.DOM.setHTML(elm, html);
+ }
+ };
- var onShowHandler = function (e) {
- if (e.control === this) {
- var elm, linkurl = '';
+ var global$7 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');
- elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');
- if (elm) {
- linkurl = editor.dom.getAttrib(elm, 'href');
- }
+ var global$8 = tinymce.util.Tools.resolve('tinymce.util.Class');
- this.fromJSON({
- linkurl: linkurl
- });
+ var global$9 = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');
- toggleVisibility(this.find('#unlink'), elm);
- this.find('#linkurl')[0].focus();
- }
+ var $_4kbuyt18pjjgwek1w = {
+ parseBox: function (value) {
+ var len;
+ var radix = 10;
+ if (!value) {
+ return;
+ }
+ if (typeof value === 'number') {
+ value = value || 0;
+ return {
+ top: value,
+ left: value,
+ bottom: value,
+ right: value
+ };
+ }
+ value = value.split(' ');
+ len = value.length;
+ if (len === 1) {
+ value[1] = value[2] = value[3] = value[0];
+ } else if (len === 2) {
+ value[2] = value[0];
+ value[3] = value[1];
+ } else if (len === 3) {
+ value[3] = value[1];
+ }
+ return {
+ top: parseInt(value[0], radix) || 0,
+ right: parseInt(value[1], radix) || 0,
+ bottom: parseInt(value[2], radix) || 0,
+ left: parseInt(value[3], radix) || 0
};
-
- return createForm('quicklink', {
- items: [
- { type: 'button', name: 'unlink', icon: 'unlink', onclick: unlink, tooltip: 'Remove link' },
- { type: 'filepicker', name: 'linkurl', placeholder: 'Paste or type a link', filetype: 'file', onchange: onChangeHandler },
- { type: 'button', icon: 'checkmark', subtype: 'primary', tooltip: 'Ok', onclick: 'submit' }
- ],
- onshow: onShowHandler,
- onsubmit: function (e) {
- convertLinkToAbsolute(editor, e.data.linkurl).then(function (url) {
- editor.undoManager.transact(function () {
- if (url === attachState.href) {
- attachState.attach();
- attachState = {};
- }
-
- Actions.createLink(editor, url);
+ },
+ measureBox: function (elm, prefix) {
+ function getStyle(name) {
+ var defaultView = elm.ownerDocument.defaultView;
+ if (defaultView) {
+ var computedStyle = defaultView.getComputedStyle(elm, null);
+ if (computedStyle) {
+ name = name.replace(/[A-Z]/g, function (a) {
+ return '-' + a;
});
-
- hide();
- });
+ return computedStyle.getPropertyValue(name);
+ } else {
+ return null;
+ }
}
- });
- };
-
- return {
- createQuickLinkForm: createQuickLinkForm
- };
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.geom.Rect',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.geom.Rect');
- }
-);
-
-/**
- * Layout.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.core.Layout',
- [
- 'tinymce.core.geom.Rect',
- 'tinymce.themes.inlite.core.Convert'
- ],
- function (Rect, Convert) {
- var result = function (rect, position) {
+ return elm.currentStyle[name];
+ }
+ function getSide(name) {
+ var val = parseFloat(getStyle(name));
+ return isNaN(val) ? 0 : val;
+ }
return {
- rect: rect,
- position: position
- };
- };
-
- var moveTo = function (rect, toRect) {
- return { x: toRect.x, y: toRect.y, w: rect.w, h: rect.h };
- };
-
- var calcByPositions = function (testPositions1, testPositions2, targetRect, contentAreaRect, panelRect) {
- var relPos, relRect, outputPanelRect;
-
- var paddedContentRect = {
- x: contentAreaRect.x,
- y: contentAreaRect.y,
- w: contentAreaRect.w + (contentAreaRect.w < (panelRect.w + targetRect.w) ? panelRect.w : 0),
- h: contentAreaRect.h + (contentAreaRect.h < (panelRect.h + targetRect.h) ? panelRect.h : 0)
+ top: getSide(prefix + 'TopWidth'),
+ right: getSide(prefix + 'RightWidth'),
+ bottom: getSide(prefix + 'BottomWidth'),
+ left: getSide(prefix + 'LeftWidth')
};
+ }
+ };
- relPos = Rect.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions1);
- targetRect = Rect.clamp(targetRect, paddedContentRect);
-
- if (relPos) {
- relRect = Rect.relativePosition(panelRect, targetRect, relPos);
- outputPanelRect = moveTo(panelRect, relRect);
- return result(outputPanelRect, relPos);
+ function noop$1() {
+ }
+ function ClassList(onchange) {
+ this.cls = [];
+ this.cls._map = {};
+ this.onchange = onchange || noop$1;
+ this.prefix = '';
+ }
+ global$4.extend(ClassList.prototype, {
+ add: function (cls) {
+ if (cls && !this.contains(cls)) {
+ this.cls._map[cls] = true;
+ this.cls.push(cls);
+ this._change();
}
-
- targetRect = Rect.intersect(paddedContentRect, targetRect);
- if (targetRect) {
- relPos = Rect.findBestRelativePosition(panelRect, targetRect, paddedContentRect, testPositions2);
-
- if (relPos) {
- relRect = Rect.relativePosition(panelRect, targetRect, relPos);
- outputPanelRect = moveTo(panelRect, relRect);
- return result(outputPanelRect, relPos);
+ return this;
+ },
+ remove: function (cls) {
+ if (this.contains(cls)) {
+ var i = void 0;
+ for (i = 0; i < this.cls.length; i++) {
+ if (this.cls[i] === cls) {
+ break;
+ }
}
-
- outputPanelRect = moveTo(panelRect, targetRect);
- return result(outputPanelRect, relPos);
+ this.cls.splice(i, 1);
+ delete this.cls._map[cls];
+ this._change();
}
-
- return null;
- };
-
- var calcInsert = function (targetRect, contentAreaRect, panelRect) {
- return calcByPositions(
- ['cr-cl', 'cl-cr'],
- ['bc-tc', 'bl-tl', 'br-tr'],
- targetRect,
- contentAreaRect,
- panelRect
- );
- };
-
- var calc = function (targetRect, contentAreaRect, panelRect) {
- return calcByPositions(
- ['tc-bc', 'bc-tc', 'tl-bl', 'bl-tl', 'tr-br', 'br-tr', 'cr-cl', 'cl-cr'],
- ['bc-tc', 'bl-tl', 'br-tr', 'cr-cl'],
- targetRect,
- contentAreaRect,
- panelRect
- );
- };
-
- var userConstrain = function (handler, targetRect, contentAreaRect, panelRect) {
- var userConstrainedPanelRect;
-
- if (typeof handler === 'function') {
- userConstrainedPanelRect = handler({
- elementRect: Convert.toClientRect(targetRect),
- contentAreaRect: Convert.toClientRect(contentAreaRect),
- panelRect: Convert.toClientRect(panelRect)
- });
-
- return Convert.fromClientRect(userConstrainedPanelRect);
+ return this;
+ },
+ toggle: function (cls, state) {
+ var curState = this.contains(cls);
+ if (curState !== state) {
+ if (curState) {
+ this.remove(cls);
+ } else {
+ this.add(cls);
+ }
+ this._change();
}
+ return this;
+ },
+ contains: function (cls) {
+ return !!this.cls._map[cls];
+ },
+ _change: function () {
+ delete this.clsValue;
+ this.onchange.call(this);
+ }
+ });
+ ClassList.prototype.toString = function () {
+ var value;
+ if (this.clsValue) {
+ return this.clsValue;
+ }
+ value = '';
+ for (var i = 0; i < this.cls.length; i++) {
+ if (i > 0) {
+ value += ' ';
+ }
+ value += this.prefix + this.cls[i];
+ }
+ return value;
+ };
- return panelRect;
- };
-
- var defaultHandler = function (rects) {
- return rects.panelRect;
- };
-
- return {
- calcInsert: calcInsert,
- calc: calc,
- userConstrain: userConstrain,
- defaultHandler: defaultHandler
- };
+ function unique(array) {
+ var uniqueItems = [];
+ var i = array.length, item;
+ while (i--) {
+ item = array[i];
+ if (!item.__checked) {
+ uniqueItems.push(item);
+ item.__checked = 1;
+ }
+ }
+ i = uniqueItems.length;
+ while (i--) {
+ delete uniqueItems[i].__checked;
+ }
+ return uniqueItems;
}
-);
-
-/**
- * Panel.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.ui.Panel',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.ui.Factory',
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.themes.inlite.ui.Toolbar',
- 'tinymce.themes.inlite.ui.Forms',
- 'tinymce.themes.inlite.core.Measure',
- 'tinymce.themes.inlite.core.Layout',
- 'tinymce.themes.inlite.alien.EditorSettings'
- ],
- function (Tools, Factory, DOMUtils, Toolbar, Forms, Measure, Layout, EditorSettings) {
- return function () {
- var DEFAULT_TEXT_SELECTION_ITEMS = ['bold', 'italic', '|', 'quicklink', 'h2', 'h3', 'blockquote'];
- var DEFAULT_INSERT_TOOLBAR_ITEMS = ['quickimage', 'quicktable'];
- var panel, currentRect;
-
- var createToolbars = function (editor, toolbars) {
- return Tools.map(toolbars, function (toolbar) {
- return Toolbar.create(editor, toolbar.id, toolbar.items);
- });
- };
-
- var getTextSelectionToolbarItems = function (editor) {
- return EditorSettings.getToolbarItemsOr(editor, 'selection_toolbar', DEFAULT_TEXT_SELECTION_ITEMS);
- };
-
- var getInsertToolbarItems = function (editor) {
- return EditorSettings.getToolbarItemsOr(editor, 'insert_toolbar', DEFAULT_INSERT_TOOLBAR_ITEMS);
- };
-
- var hasToolbarItems = function (toolbar) {
- return toolbar.items().length > 0;
- };
-
- var create = function (editor, toolbars) {
- var items = createToolbars(editor, toolbars).concat([
- Toolbar.create(editor, 'text', getTextSelectionToolbarItems(editor)),
- Toolbar.create(editor, 'insert', getInsertToolbarItems(editor)),
- Forms.createQuickLinkForm(editor, hide)
- ]);
-
- return Factory.create({
- type: 'floatpanel',
- role: 'dialog',
- classes: 'tinymce tinymce-inline arrow',
- ariaLabel: 'Inline toolbar',
- layout: 'flex',
- direction: 'column',
- align: 'stretch',
- autohide: false,
- autofix: true,
- fixed: true,
- border: 1,
- items: Tools.grep(items, hasToolbarItems),
- oncancel: function () {
- editor.focus();
- }
- });
+ var expression = /^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i;
+ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;
+ var whiteSpace = /^\s*|\s*$/g;
+ var Collection;
+ var Selector = global$8.extend({
+ init: function (selector) {
+ var match = this.match;
+ function compileNameFilter(name) {
+ if (name) {
+ name = name.toLowerCase();
+ return function (item) {
+ return name === '*' || item.type === name;
+ };
+ }
+ }
+ function compileIdFilter(id) {
+ if (id) {
+ return function (item) {
+ return item._name === id;
+ };
+ }
+ }
+ function compileClassesFilter(classes) {
+ if (classes) {
+ classes = classes.split('.');
+ return function (item) {
+ var i = classes.length;
+ while (i--) {
+ if (!item.classes.contains(classes[i])) {
+ return false;
+ }
+ }
+ return true;
+ };
+ }
+ }
+ function compileAttrFilter(name, cmp, check) {
+ if (name) {
+ return function (item) {
+ var value = item[name] ? item[name]() : '';
+ return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;
+ };
+ }
+ }
+ function compilePsuedoFilter(name) {
+ var notSelectors;
+ if (name) {
+ name = /(?:not\((.+)\))|(.+)/i.exec(name);
+ if (!name[1]) {
+ name = name[2];
+ return function (item, index, length) {
+ return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;
+ };
+ }
+ notSelectors = parseChunks(name[1], []);
+ return function (item) {
+ return !match(item, notSelectors);
+ };
+ }
+ }
+ function compile(selector, filters, direct) {
+ var parts;
+ function add(filter) {
+ if (filter) {
+ filters.push(filter);
+ }
+ }
+ parts = expression.exec(selector.replace(whiteSpace, ''));
+ add(compileNameFilter(parts[1]));
+ add(compileIdFilter(parts[2]));
+ add(compileClassesFilter(parts[3]));
+ add(compileAttrFilter(parts[4], parts[5], parts[6]));
+ add(compilePsuedoFilter(parts[7]));
+ filters.pseudo = !!parts[7];
+ filters.direct = direct;
+ return filters;
+ }
+ function parseChunks(selector, selectors) {
+ var parts = [];
+ var extra, matches, i;
+ do {
+ chunker.exec('');
+ matches = chunker.exec(selector);
+ if (matches) {
+ selector = matches[3];
+ parts.push(matches[1]);
+ if (matches[2]) {
+ extra = matches[3];
+ break;
+ }
+ }
+ } while (matches);
+ if (extra) {
+ parseChunks(extra, selectors);
+ }
+ selector = [];
+ for (i = 0; i < parts.length; i++) {
+ if (parts[i] !== '>') {
+ selector.push(compile(parts[i], [], parts[i - 1] === '>'));
+ }
+ }
+ selectors.push(selector);
+ return selectors;
+ }
+ this._selectors = parseChunks(selector, []);
+ },
+ match: function (control, selectors) {
+ var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;
+ selectors = selectors || this._selectors;
+ for (i = 0, l = selectors.length; i < l; i++) {
+ selector = selectors[i];
+ sl = selector.length;
+ item = control;
+ count = 0;
+ for (si = sl - 1; si >= 0; si--) {
+ filters = selector[si];
+ while (item) {
+ if (filters.pseudo) {
+ siblings = item.parent().items();
+ index = length = siblings.length;
+ while (index--) {
+ if (siblings[index] === item) {
+ break;
+ }
+ }
+ }
+ for (fi = 0, fl = filters.length; fi < fl; fi++) {
+ if (!filters[fi](item, index, length)) {
+ fi = fl + 1;
+ break;
+ }
+ }
+ if (fi === fl) {
+ count++;
+ break;
+ } else {
+ if (si === sl - 1) {
+ break;
+ }
+ }
+ item = item.parent();
+ }
+ }
+ if (count === sl) {
+ return true;
+ }
+ }
+ return false;
+ },
+ find: function (container) {
+ var matches = [], i, l;
+ var selectors = this._selectors;
+ function collect(items, selector, index) {
+ var i, l, fi, fl, item;
+ var filters = selector[index];
+ for (i = 0, l = items.length; i < l; i++) {
+ item = items[i];
+ for (fi = 0, fl = filters.length; fi < fl; fi++) {
+ if (!filters[fi](item, i, l)) {
+ fi = fl + 1;
+ break;
+ }
+ }
+ if (fi === fl) {
+ if (index === selector.length - 1) {
+ matches.push(item);
+ } else {
+ if (item.items) {
+ collect(item.items(), selector, index + 1);
+ }
+ }
+ } else if (filters.direct) {
+ return;
+ }
+ if (item.items) {
+ collect(item.items(), selector, index);
+ }
+ }
+ }
+ if (container.items) {
+ for (i = 0, l = selectors.length; i < l; i++) {
+ collect(container.items(), selectors[i], 0);
+ }
+ if (l > 1) {
+ matches = unique(matches);
+ }
+ }
+ if (!Collection) {
+ Collection = Selector.Collection;
+ }
+ return new Collection(matches);
+ }
+ });
+
+ var Collection$1;
+ var proto;
+ var push$1 = Array.prototype.push;
+ var slice$1 = Array.prototype.slice;
+ proto = {
+ length: 0,
+ init: function (items) {
+ if (items) {
+ this.add(items);
+ }
+ },
+ add: function (items) {
+ var self = this;
+ if (!global$4.isArray(items)) {
+ if (items instanceof Collection$1) {
+ self.add(items.toArray());
+ } else {
+ push$1.call(self, items);
+ }
+ } else {
+ push$1.apply(self, items);
+ }
+ return self;
+ },
+ set: function (items) {
+ var self = this;
+ var len = self.length;
+ var i;
+ self.length = 0;
+ self.add(items);
+ for (i = self.length; i < len; i++) {
+ delete self[i];
+ }
+ return self;
+ },
+ filter: function (selector) {
+ var self = this;
+ var i, l;
+ var matches = [];
+ var item, match;
+ if (typeof selector === 'string') {
+ selector = new Selector(selector);
+ match = function (item) {
+ return selector.match(item);
+ };
+ } else {
+ match = selector;
+ }
+ for (i = 0, l = self.length; i < l; i++) {
+ item = self[i];
+ if (match(item)) {
+ matches.push(item);
+ }
+ }
+ return new Collection$1(matches);
+ },
+ slice: function () {
+ return new Collection$1(slice$1.apply(this, arguments));
+ },
+ eq: function (index) {
+ return index === -1 ? this.slice(index) : this.slice(index, +index + 1);
+ },
+ each: function (callback) {
+ global$4.each(this, callback);
+ return this;
+ },
+ toArray: function () {
+ return global$4.toArray(this);
+ },
+ indexOf: function (ctrl) {
+ var self = this;
+ var i = self.length;
+ while (i--) {
+ if (self[i] === ctrl) {
+ break;
+ }
+ }
+ return i;
+ },
+ reverse: function () {
+ return new Collection$1(global$4.toArray(this).reverse());
+ },
+ hasClass: function (cls) {
+ return this[0] ? this[0].classes.contains(cls) : false;
+ },
+ prop: function (name, value) {
+ var self = this;
+ var item;
+ if (value !== undefined) {
+ self.each(function (item) {
+ if (item[name]) {
+ item[name](value);
+ }
+ });
+ return self;
+ }
+ item = self[0];
+ if (item && item[name]) {
+ return item[name]();
+ }
+ },
+ exec: function (name) {
+ var self = this, args = global$4.toArray(arguments).slice(1);
+ self.each(function (item) {
+ if (item[name]) {
+ item[name].apply(item, args);
+ }
+ });
+ return self;
+ },
+ remove: function () {
+ var i = this.length;
+ while (i--) {
+ this[i].remove();
+ }
+ return this;
+ },
+ addClass: function (cls) {
+ return this.each(function (item) {
+ item.classes.add(cls);
+ });
+ },
+ removeClass: function (cls) {
+ return this.each(function (item) {
+ item.classes.remove(cls);
+ });
+ }
+ };
+ global$4.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {
+ proto[name] = function () {
+ var args = global$4.toArray(arguments);
+ this.each(function (ctrl) {
+ if (name in ctrl) {
+ ctrl[name].apply(ctrl, args);
+ }
+ });
+ return this;
+ };
+ });
+ global$4.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {
+ proto[name] = function (value) {
+ return this.prop(name, value);
+ };
+ });
+ Collection$1 = global$8.extend(proto);
+ Selector.Collection = Collection$1;
+ var Collection$2 = Collection$1;
+
+ var Binding = function (settings) {
+ this.create = settings.create;
+ };
+ Binding.create = function (model, name) {
+ return new Binding({
+ create: function (otherModel, otherName) {
+ var bindings;
+ var fromSelfToOther = function (e) {
+ otherModel.set(otherName, e.value);
+ };
+ var fromOtherToSelf = function (e) {
+ model.set(name, e.value);
+ };
+ otherModel.on('change:' + otherName, fromOtherToSelf);
+ model.on('change:' + name, fromSelfToOther);
+ bindings = otherModel._bindings;
+ if (!bindings) {
+ bindings = otherModel._bindings = [];
+ otherModel.on('destroy', function () {
+ var i = bindings.length;
+ while (i--) {
+ bindings[i]();
+ }
+ });
+ }
+ bindings.push(function () {
+ model.off('change:' + name, fromSelfToOther);
+ });
+ return model.get(name);
+ }
+ });
+ };
+
+ var global$10 = tinymce.util.Tools.resolve('tinymce.util.Observable');
+
+ function isNode(node) {
+ return node.nodeType > 0;
+ }
+ function isEqual(a, b) {
+ var k, checked;
+ if (a === b) {
+ return true;
+ }
+ if (a === null || b === null) {
+ return a === b;
+ }
+ if (typeof a !== 'object' || typeof b !== 'object') {
+ return a === b;
+ }
+ if (global$4.isArray(b)) {
+ if (a.length !== b.length) {
+ return false;
+ }
+ k = a.length;
+ while (k--) {
+ if (!isEqual(a[k], b[k])) {
+ return false;
+ }
+ }
+ }
+ if (isNode(a) || isNode(b)) {
+ return a === b;
+ }
+ checked = {};
+ for (k in b) {
+ if (!isEqual(a[k], b[k])) {
+ return false;
+ }
+ checked[k] = true;
+ }
+ for (k in a) {
+ if (!checked[k] && !isEqual(a[k], b[k])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ var ObservableObject = global$8.extend({
+ Mixins: [global$10],
+ init: function (data) {
+ var name, value;
+ data = data || {};
+ for (name in data) {
+ value = data[name];
+ if (value instanceof Binding) {
+ data[name] = value.create(this, name);
+ }
+ }
+ this.data = data;
+ },
+ set: function (name, value) {
+ var key, args;
+ var oldValue = this.data[name];
+ if (value instanceof Binding) {
+ value = value.create(this, name);
+ }
+ if (typeof name === 'object') {
+ for (key in name) {
+ this.set(key, name[key]);
+ }
+ return this;
+ }
+ if (!isEqual(oldValue, value)) {
+ this.data[name] = value;
+ args = {
+ target: this,
+ name: name,
+ value: value,
+ oldValue: oldValue
+ };
+ this.fire('change:' + name, args);
+ this.fire('change', args);
+ }
+ return this;
+ },
+ get: function (name) {
+ return this.data[name];
+ },
+ has: function (name) {
+ return name in this.data;
+ },
+ bind: function (name) {
+ return Binding.create(this, name);
+ },
+ destroy: function () {
+ this.fire('destroy');
+ }
+ });
+
+ var dirtyCtrls = {};
+ var animationFrameRequested;
+ var $_cqjgb518wjjgwek2f = {
+ add: function (ctrl) {
+ var parent$$1 = ctrl.parent();
+ if (parent$$1) {
+ if (!parent$$1._layout || parent$$1._layout.isNative()) {
+ return;
+ }
+ if (!dirtyCtrls[parent$$1._id]) {
+ dirtyCtrls[parent$$1._id] = parent$$1;
+ }
+ if (!animationFrameRequested) {
+ animationFrameRequested = true;
+ global$3.requestAnimationFrame(function () {
+ var id, ctrl;
+ animationFrameRequested = false;
+ for (id in dirtyCtrls) {
+ ctrl = dirtyCtrls[id];
+ if (ctrl.state.get('rendered')) {
+ ctrl.reflow();
+ }
+ }
+ dirtyCtrls = {};
+ }, document.body);
+ }
+ }
+ },
+ remove: function (ctrl) {
+ if (dirtyCtrls[ctrl._id]) {
+ delete dirtyCtrls[ctrl._id];
+ }
+ }
+ };
+
+ var getUiContainerDelta = function (ctrl) {
+ var uiContainer = getUiContainer(ctrl);
+ if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') {
+ var containerPos = global$2.DOM.getPos(uiContainer);
+ var dx = uiContainer.scrollLeft - containerPos.x;
+ var dy = uiContainer.scrollTop - containerPos.y;
+ return Option.some({
+ x: dx,
+ y: dy
+ });
+ } else {
+ return Option.none();
+ }
+ };
+ var setUiContainer = function (editor, ctrl) {
+ var uiContainer = global$2.DOM.select(editor.settings.ui_container)[0];
+ ctrl.getRoot().uiContainer = uiContainer;
+ };
+ var getUiContainer = function (ctrl) {
+ return ctrl ? ctrl.getRoot().uiContainer : null;
+ };
+ var inheritUiContainer = function (fromCtrl, toCtrl) {
+ return toCtrl.uiContainer = getUiContainer(fromCtrl);
+ };
+ var $_egt6ye18xjjgwek2h = {
+ getUiContainerDelta: getUiContainerDelta,
+ setUiContainer: setUiContainer,
+ getUiContainer: getUiContainer,
+ inheritUiContainer: inheritUiContainer
+ };
+
+ var hasMouseWheelEventSupport = 'onmousewheel' in document;
+ var hasWheelEventSupport = false;
+ var classPrefix = 'mce-';
+ var Control;
+ var idCounter = 0;
+ var proto$1 = {
+ Statics: { classPrefix: classPrefix },
+ isRtl: function () {
+ return Control.rtl;
+ },
+ classPrefix: classPrefix,
+ init: function (settings) {
+ var self$$1 = this;
+ var classes, defaultClasses;
+ function applyClasses(classes) {
+ var i;
+ classes = classes.split(' ');
+ for (i = 0; i < classes.length; i++) {
+ self$$1.classes.add(classes[i]);
+ }
+ }
+ self$$1.settings = settings = global$4.extend({}, self$$1.Defaults, settings);
+ self$$1._id = settings.id || 'mceu_' + idCounter++;
+ self$$1._aria = { role: settings.role };
+ self$$1._elmCache = {};
+ self$$1.$ = global$7;
+ self$$1.state = new ObservableObject({
+ visible: true,
+ active: false,
+ disabled: false,
+ value: ''
+ });
+ self$$1.data = new ObservableObject(settings.data);
+ self$$1.classes = new ClassList(function () {
+ if (self$$1.state.get('rendered')) {
+ self$$1.getEl().className = this.toString();
+ }
+ });
+ self$$1.classes.prefix = self$$1.classPrefix;
+ classes = settings.classes;
+ if (classes) {
+ if (self$$1.Defaults) {
+ defaultClasses = self$$1.Defaults.classes;
+ if (defaultClasses && classes !== defaultClasses) {
+ applyClasses(defaultClasses);
+ }
+ }
+ applyClasses(classes);
+ }
+ global$4.each('title text name visible disabled active value'.split(' '), function (name$$1) {
+ if (name$$1 in settings) {
+ self$$1[name$$1](settings[name$$1]);
+ }
+ });
+ self$$1.on('click', function () {
+ if (self$$1.disabled()) {
+ return false;
+ }
+ });
+ self$$1.settings = settings;
+ self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox(settings.border);
+ self$$1.paddingBox = $_4kbuyt18pjjgwek1w.parseBox(settings.padding);
+ self$$1.marginBox = $_4kbuyt18pjjgwek1w.parseBox(settings.margin);
+ if (settings.hidden) {
+ self$$1.hide();
+ }
+ },
+ Properties: 'parent,name',
+ getContainerElm: function () {
+ var uiContainer = $_egt6ye18xjjgwek2h.getUiContainer(this);
+ return uiContainer ? uiContainer : funcs.getContainer();
+ },
+ getParentCtrl: function (elm) {
+ var ctrl;
+ var lookup = this.getRoot().controlIdLookup;
+ while (elm && lookup) {
+ ctrl = lookup[elm.id];
+ if (ctrl) {
+ break;
+ }
+ elm = elm.parentNode;
+ }
+ return ctrl;
+ },
+ initLayoutRect: function () {
+ var self$$1 = this;
+ var settings = self$$1.settings;
+ var borderBox, layoutRect;
+ var elm = self$$1.getEl();
+ var width, height, minWidth, minHeight, autoResize;
+ var startMinWidth, startMinHeight, initialSize;
+ borderBox = self$$1.borderBox = self$$1.borderBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'border');
+ self$$1.paddingBox = self$$1.paddingBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'padding');
+ self$$1.marginBox = self$$1.marginBox || $_4kbuyt18pjjgwek1w.measureBox(elm, 'margin');
+ initialSize = funcs.getSize(elm);
+ startMinWidth = settings.minWidth;
+ startMinHeight = settings.minHeight;
+ minWidth = startMinWidth || initialSize.width;
+ minHeight = startMinHeight || initialSize.height;
+ width = settings.width;
+ height = settings.height;
+ autoResize = settings.autoResize;
+ autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;
+ width = width || minWidth;
+ height = height || minHeight;
+ var deltaW = borderBox.left + borderBox.right;
+ var deltaH = borderBox.top + borderBox.bottom;
+ var maxW = settings.maxWidth || 65535;
+ var maxH = settings.maxHeight || 65535;
+ self$$1._layoutRect = layoutRect = {
+ x: settings.x || 0,
+ y: settings.y || 0,
+ w: width,
+ h: height,
+ deltaW: deltaW,
+ deltaH: deltaH,
+ contentW: width - deltaW,
+ contentH: height - deltaH,
+ innerW: width - deltaW,
+ innerH: height - deltaH,
+ startMinWidth: startMinWidth || 0,
+ startMinHeight: startMinHeight || 0,
+ minW: Math.min(minWidth, maxW),
+ minH: Math.min(minHeight, maxH),
+ maxW: maxW,
+ maxH: maxH,
+ autoResize: autoResize,
+ scrollW: 0
+ };
+ self$$1._lastLayoutRect = {};
+ return layoutRect;
+ },
+ layoutRect: function (newRect) {
+ var self$$1 = this;
+ var curRect = self$$1._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;
+ if (!curRect) {
+ curRect = self$$1.initLayoutRect();
+ }
+ if (newRect) {
+ deltaWidth = curRect.deltaW;
+ deltaHeight = curRect.deltaH;
+ if (newRect.x !== undefined) {
+ curRect.x = newRect.x;
+ }
+ if (newRect.y !== undefined) {
+ curRect.y = newRect.y;
+ }
+ if (newRect.minW !== undefined) {
+ curRect.minW = newRect.minW;
+ }
+ if (newRect.minH !== undefined) {
+ curRect.minH = newRect.minH;
+ }
+ size = newRect.w;
+ if (size !== undefined) {
+ size = size < curRect.minW ? curRect.minW : size;
+ size = size > curRect.maxW ? curRect.maxW : size;
+ curRect.w = size;
+ curRect.innerW = size - deltaWidth;
+ }
+ size = newRect.h;
+ if (size !== undefined) {
+ size = size < curRect.minH ? curRect.minH : size;
+ size = size > curRect.maxH ? curRect.maxH : size;
+ curRect.h = size;
+ curRect.innerH = size - deltaHeight;
+ }
+ size = newRect.innerW;
+ if (size !== undefined) {
+ size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;
+ size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;
+ curRect.innerW = size;
+ curRect.w = size + deltaWidth;
+ }
+ size = newRect.innerH;
+ if (size !== undefined) {
+ size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;
+ size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;
+ curRect.innerH = size;
+ curRect.h = size + deltaHeight;
+ }
+ if (newRect.contentW !== undefined) {
+ curRect.contentW = newRect.contentW;
+ }
+ if (newRect.contentH !== undefined) {
+ curRect.contentH = newRect.contentH;
+ }
+ lastLayoutRect = self$$1._lastLayoutRect;
+ if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {
+ repaintControls = Control.repaintControls;
+ if (repaintControls) {
+ if (repaintControls.map && !repaintControls.map[self$$1._id]) {
+ repaintControls.push(self$$1);
+ repaintControls.map[self$$1._id] = true;
+ }
+ }
+ lastLayoutRect.x = curRect.x;
+ lastLayoutRect.y = curRect.y;
+ lastLayoutRect.w = curRect.w;
+ lastLayoutRect.h = curRect.h;
+ }
+ return self$$1;
+ }
+ return curRect;
+ },
+ repaint: function () {
+ var self$$1 = this;
+ var style, bodyStyle, bodyElm, rect, borderBox;
+ var borderW, borderH, lastRepaintRect, round, value;
+ round = !document.createRange ? Math.round : function (value) {
+ return value;
+ };
+ style = self$$1.getEl().style;
+ rect = self$$1._layoutRect;
+ lastRepaintRect = self$$1._lastRepaintRect || {};
+ borderBox = self$$1.borderBox;
+ borderW = borderBox.left + borderBox.right;
+ borderH = borderBox.top + borderBox.bottom;
+ if (rect.x !== lastRepaintRect.x) {
+ style.left = round(rect.x) + 'px';
+ lastRepaintRect.x = rect.x;
+ }
+ if (rect.y !== lastRepaintRect.y) {
+ style.top = round(rect.y) + 'px';
+ lastRepaintRect.y = rect.y;
+ }
+ if (rect.w !== lastRepaintRect.w) {
+ value = round(rect.w - borderW);
+ style.width = (value >= 0 ? value : 0) + 'px';
+ lastRepaintRect.w = rect.w;
+ }
+ if (rect.h !== lastRepaintRect.h) {
+ value = round(rect.h - borderH);
+ style.height = (value >= 0 ? value : 0) + 'px';
+ lastRepaintRect.h = rect.h;
+ }
+ if (self$$1._hasBody && rect.innerW !== lastRepaintRect.innerW) {
+ value = round(rect.innerW);
+ bodyElm = self$$1.getEl('body');
+ if (bodyElm) {
+ bodyStyle = bodyElm.style;
+ bodyStyle.width = (value >= 0 ? value : 0) + 'px';
+ }
+ lastRepaintRect.innerW = rect.innerW;
+ }
+ if (self$$1._hasBody && rect.innerH !== lastRepaintRect.innerH) {
+ value = round(rect.innerH);
+ bodyElm = bodyElm || self$$1.getEl('body');
+ if (bodyElm) {
+ bodyStyle = bodyStyle || bodyElm.style;
+ bodyStyle.height = (value >= 0 ? value : 0) + 'px';
+ }
+ lastRepaintRect.innerH = rect.innerH;
+ }
+ self$$1._lastRepaintRect = lastRepaintRect;
+ self$$1.fire('repaint', {}, false);
+ },
+ updateLayoutRect: function () {
+ var self$$1 = this;
+ self$$1.parent()._lastRect = null;
+ funcs.css(self$$1.getEl(), {
+ width: '',
+ height: ''
+ });
+ self$$1._layoutRect = self$$1._lastRepaintRect = self$$1._lastLayoutRect = null;
+ self$$1.initLayoutRect();
+ },
+ on: function (name$$1, callback) {
+ var self$$1 = this;
+ function resolveCallbackName(name$$1) {
+ var callback, scope;
+ if (typeof name$$1 !== 'string') {
+ return name$$1;
+ }
+ return function (e) {
+ if (!callback) {
+ self$$1.parentsAndSelf().each(function (ctrl) {
+ var callbacks = ctrl.settings.callbacks;
+ if (callbacks && (callback = callbacks[name$$1])) {
+ scope = ctrl;
+ return false;
+ }
+ });
+ }
+ if (!callback) {
+ e.action = name$$1;
+ this.fire('execute', e);
+ return;
+ }
+ return callback.call(scope, e);
+ };
+ }
+ getEventDispatcher(self$$1).on(name$$1, resolveCallbackName(callback));
+ return self$$1;
+ },
+ off: function (name$$1, callback) {
+ getEventDispatcher(this).off(name$$1, callback);
+ return this;
+ },
+ fire: function (name$$1, args, bubble) {
+ var self$$1 = this;
+ args = args || {};
+ if (!args.control) {
+ args.control = self$$1;
+ }
+ args = getEventDispatcher(self$$1).fire(name$$1, args);
+ if (bubble !== false && self$$1.parent) {
+ var parent$$1 = self$$1.parent();
+ while (parent$$1 && !args.isPropagationStopped()) {
+ parent$$1.fire(name$$1, args, false);
+ parent$$1 = parent$$1.parent();
+ }
+ }
+ return args;
+ },
+ hasEventListeners: function (name$$1) {
+ return getEventDispatcher(this).has(name$$1);
+ },
+ parents: function (selector) {
+ var self$$1 = this;
+ var ctrl, parents = new Collection$2();
+ for (ctrl = self$$1.parent(); ctrl; ctrl = ctrl.parent()) {
+ parents.add(ctrl);
+ }
+ if (selector) {
+ parents = parents.filter(selector);
+ }
+ return parents;
+ },
+ parentsAndSelf: function (selector) {
+ return new Collection$2(this).add(this.parents(selector));
+ },
+ next: function () {
+ var parentControls = this.parent().items();
+ return parentControls[parentControls.indexOf(this) + 1];
+ },
+ prev: function () {
+ var parentControls = this.parent().items();
+ return parentControls[parentControls.indexOf(this) - 1];
+ },
+ innerHtml: function (html) {
+ this.$el.html(html);
+ return this;
+ },
+ getEl: function (suffix) {
+ var id = suffix ? this._id + '-' + suffix : this._id;
+ if (!this._elmCache[id]) {
+ this._elmCache[id] = global$7('#' + id)[0];
+ }
+ return this._elmCache[id];
+ },
+ show: function () {
+ return this.visible(true);
+ },
+ hide: function () {
+ return this.visible(false);
+ },
+ focus: function () {
+ try {
+ this.getEl().focus();
+ } catch (ex) {
+ }
+ return this;
+ },
+ blur: function () {
+ this.getEl().blur();
+ return this;
+ },
+ aria: function (name$$1, value) {
+ var self$$1 = this, elm = self$$1.getEl(self$$1.ariaTarget);
+ if (typeof value === 'undefined') {
+ return self$$1._aria[name$$1];
+ }
+ self$$1._aria[name$$1] = value;
+ if (self$$1.state.get('rendered')) {
+ elm.setAttribute(name$$1 === 'role' ? name$$1 : 'aria-' + name$$1, value);
+ }
+ return self$$1;
+ },
+ encode: function (text, translate) {
+ if (translate !== false) {
+ text = this.translate(text);
+ }
+ return (text || '').replace(/[&<>"]/g, function (match) {
+ return '&#' + match.charCodeAt(0) + ';';
+ });
+ },
+ translate: function (text) {
+ return Control.translate ? Control.translate(text) : text;
+ },
+ before: function (items) {
+ var self$$1 = this, parent$$1 = self$$1.parent();
+ if (parent$$1) {
+ parent$$1.insert(items, parent$$1.items().indexOf(self$$1), true);
+ }
+ return self$$1;
+ },
+ after: function (items) {
+ var self$$1 = this, parent$$1 = self$$1.parent();
+ if (parent$$1) {
+ parent$$1.insert(items, parent$$1.items().indexOf(self$$1));
+ }
+ return self$$1;
+ },
+ remove: function () {
+ var self$$1 = this;
+ var elm = self$$1.getEl();
+ var parent$$1 = self$$1.parent();
+ var newItems, i;
+ if (self$$1.items) {
+ var controls = self$$1.items().toArray();
+ i = controls.length;
+ while (i--) {
+ controls[i].remove();
+ }
+ }
+ if (parent$$1 && parent$$1.items) {
+ newItems = [];
+ parent$$1.items().each(function (item) {
+ if (item !== self$$1) {
+ newItems.push(item);
+ }
+ });
+ parent$$1.items().set(newItems);
+ parent$$1._lastRect = null;
+ }
+ if (self$$1._eventsRoot && self$$1._eventsRoot === self$$1) {
+ global$7(elm).off();
+ }
+ var lookup = self$$1.getRoot().controlIdLookup;
+ if (lookup) {
+ delete lookup[self$$1._id];
+ }
+ if (elm && elm.parentNode) {
+ elm.parentNode.removeChild(elm);
+ }
+ self$$1.state.set('rendered', false);
+ self$$1.state.destroy();
+ self$$1.fire('remove');
+ return self$$1;
+ },
+ renderBefore: function (elm) {
+ global$7(elm).before(this.renderHtml());
+ this.postRender();
+ return this;
+ },
+ renderTo: function (elm) {
+ global$7(elm || this.getContainerElm()).append(this.renderHtml());
+ this.postRender();
+ return this;
+ },
+ preRender: function () {
+ },
+ render: function () {
+ },
+ renderHtml: function () {
+ return '<div id="' + this._id + '" class="' + this.classes + '"></div>';
+ },
+ postRender: function () {
+ var self$$1 = this;
+ var settings = self$$1.settings;
+ var elm, box, parent$$1, name$$1, parentEventsRoot;
+ self$$1.$el = global$7(self$$1.getEl());
+ self$$1.state.set('rendered', true);
+ for (name$$1 in settings) {
+ if (name$$1.indexOf('on') === 0) {
+ self$$1.on(name$$1.substr(2), settings[name$$1]);
+ }
+ }
+ if (self$$1._eventsRoot) {
+ for (parent$$1 = self$$1.parent(); !parentEventsRoot && parent$$1; parent$$1 = parent$$1.parent()) {
+ parentEventsRoot = parent$$1._eventsRoot;
+ }
+ if (parentEventsRoot) {
+ for (name$$1 in parentEventsRoot._nativeEvents) {
+ self$$1._nativeEvents[name$$1] = true;
+ }
+ }
+ }
+ bindPendingEvents(self$$1);
+ if (settings.style) {
+ elm = self$$1.getEl();
+ if (elm) {
+ elm.setAttribute('style', settings.style);
+ elm.style.cssText = settings.style;
+ }
+ }
+ if (self$$1.settings.border) {
+ box = self$$1.borderBox;
+ self$$1.$el.css({
+ 'border-top-width': box.top,
+ 'border-right-width': box.right,
+ 'border-bottom-width': box.bottom,
+ 'border-left-width': box.left
+ });
+ }
+ var root = self$$1.getRoot();
+ if (!root.controlIdLookup) {
+ root.controlIdLookup = {};
+ }
+ root.controlIdLookup[self$$1._id] = self$$1;
+ for (var key in self$$1._aria) {
+ self$$1.aria(key, self$$1._aria[key]);
+ }
+ if (self$$1.state.get('visible') === false) {
+ self$$1.getEl().style.display = 'none';
+ }
+ self$$1.bindStates();
+ self$$1.state.on('change:visible', function (e) {
+ var state = e.value;
+ var parentCtrl;
+ if (self$$1.state.get('rendered')) {
+ self$$1.getEl().style.display = state === false ? 'none' : '';
+ self$$1.getEl().getBoundingClientRect();
+ }
+ parentCtrl = self$$1.parent();
+ if (parentCtrl) {
+ parentCtrl._lastRect = null;
+ }
+ self$$1.fire(state ? 'show' : 'hide');
+ $_cqjgb518wjjgwek2f.add(self$$1);
+ });
+ self$$1.fire('postrender', {}, false);
+ },
+ bindStates: function () {
+ },
+ scrollIntoView: function (align) {
+ function getOffset(elm, rootElm) {
+ var x, y, parent$$1 = elm;
+ x = y = 0;
+ while (parent$$1 && parent$$1 !== rootElm && parent$$1.nodeType) {
+ x += parent$$1.offsetLeft || 0;
+ y += parent$$1.offsetTop || 0;
+ parent$$1 = parent$$1.offsetParent;
+ }
+ return {
+ x: x,
+ y: y
+ };
+ }
+ var elm = this.getEl(), parentElm = elm.parentNode;
+ var x, y, width, height, parentWidth, parentHeight;
+ var pos = getOffset(elm, parentElm);
+ x = pos.x;
+ y = pos.y;
+ width = elm.offsetWidth;
+ height = elm.offsetHeight;
+ parentWidth = parentElm.clientWidth;
+ parentHeight = parentElm.clientHeight;
+ if (align === 'end') {
+ x -= parentWidth - width;
+ y -= parentHeight - height;
+ } else if (align === 'center') {
+ x -= parentWidth / 2 - width / 2;
+ y -= parentHeight / 2 - height / 2;
+ }
+ parentElm.scrollLeft = x;
+ parentElm.scrollTop = y;
+ return this;
+ },
+ getRoot: function () {
+ var ctrl = this, rootControl;
+ var parents = [];
+ while (ctrl) {
+ if (ctrl.rootControl) {
+ rootControl = ctrl.rootControl;
+ break;
+ }
+ parents.push(ctrl);
+ rootControl = ctrl;
+ ctrl = ctrl.parent();
+ }
+ if (!rootControl) {
+ rootControl = this;
+ }
+ var i = parents.length;
+ while (i--) {
+ parents[i].rootControl = rootControl;
+ }
+ return rootControl;
+ },
+ reflow: function () {
+ $_cqjgb518wjjgwek2f.remove(this);
+ var parent$$1 = this.parent();
+ if (parent$$1 && parent$$1._layout && !parent$$1._layout.isNative()) {
+ parent$$1.reflow();
+ }
+ return this;
+ }
+ };
+ global$4.each('text title visible disabled active value'.split(' '), function (name$$1) {
+ proto$1[name$$1] = function (value) {
+ if (arguments.length === 0) {
+ return this.state.get(name$$1);
+ }
+ if (typeof value !== 'undefined') {
+ this.state.set(name$$1, value);
+ }
+ return this;
+ };
+ });
+ Control = global$8.extend(proto$1);
+ function getEventDispatcher(obj) {
+ if (!obj._eventDispatcher) {
+ obj._eventDispatcher = new global$9({
+ scope: obj,
+ toggleEvent: function (name$$1, state) {
+ if (state && global$9.isNative(name$$1)) {
+ if (!obj._nativeEvents) {
+ obj._nativeEvents = {};
+ }
+ obj._nativeEvents[name$$1] = true;
+ if (obj.state.get('rendered')) {
+ bindPendingEvents(obj);
+ }
+ }
+ }
+ });
+ }
+ return obj._eventDispatcher;
+ }
+ function bindPendingEvents(eventCtrl) {
+ var i, l, parents, eventRootCtrl, nativeEvents, name$$1;
+ function delegate(e) {
+ var control = eventCtrl.getParentCtrl(e.target);
+ if (control) {
+ control.fire(e.type, e);
+ }
+ }
+ function mouseLeaveHandler() {
+ var ctrl = eventRootCtrl._lastHoverCtrl;
+ if (ctrl) {
+ ctrl.fire('mouseleave', { target: ctrl.getEl() });
+ ctrl.parents().each(function (ctrl) {
+ ctrl.fire('mouseleave', { target: ctrl.getEl() });
+ });
+ eventRootCtrl._lastHoverCtrl = null;
+ }
+ }
+ function mouseEnterHandler(e) {
+ var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;
+ if (ctrl !== lastCtrl) {
+ eventRootCtrl._lastHoverCtrl = ctrl;
+ parents = ctrl.parents().toArray().reverse();
+ parents.push(ctrl);
+ if (lastCtrl) {
+ lastParents = lastCtrl.parents().toArray().reverse();
+ lastParents.push(lastCtrl);
+ for (idx = 0; idx < lastParents.length; idx++) {
+ if (parents[idx] !== lastParents[idx]) {
+ break;
+ }
+ }
+ for (i = lastParents.length - 1; i >= idx; i--) {
+ lastCtrl = lastParents[i];
+ lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });
+ }
+ }
+ for (i = idx; i < parents.length; i++) {
+ ctrl = parents[i];
+ ctrl.fire('mouseenter', { target: ctrl.getEl() });
+ }
+ }
+ }
+ function fixWheelEvent(e) {
+ e.preventDefault();
+ if (e.type === 'mousewheel') {
+ e.deltaY = -1 / 40 * e.wheelDelta;
+ if (e.wheelDeltaX) {
+ e.deltaX = -1 / 40 * e.wheelDeltaX;
+ }
+ } else {
+ e.deltaX = 0;
+ e.deltaY = e.detail;
+ }
+ e = eventCtrl.fire('wheel', e);
+ }
+ nativeEvents = eventCtrl._nativeEvents;
+ if (nativeEvents) {
+ parents = eventCtrl.parents().toArray();
+ parents.unshift(eventCtrl);
+ for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {
+ eventRootCtrl = parents[i]._eventsRoot;
+ }
+ if (!eventRootCtrl) {
+ eventRootCtrl = parents[parents.length - 1] || eventCtrl;
+ }
+ eventCtrl._eventsRoot = eventRootCtrl;
+ for (l = i, i = 0; i < l; i++) {
+ parents[i]._eventsRoot = eventRootCtrl;
+ }
+ var eventRootDelegates = eventRootCtrl._delegates;
+ if (!eventRootDelegates) {
+ eventRootDelegates = eventRootCtrl._delegates = {};
+ }
+ for (name$$1 in nativeEvents) {
+ if (!nativeEvents) {
+ return false;
+ }
+ if (name$$1 === 'wheel' && !hasWheelEventSupport) {
+ if (hasMouseWheelEventSupport) {
+ global$7(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);
+ } else {
+ global$7(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);
+ }
+ continue;
+ }
+ if (name$$1 === 'mouseenter' || name$$1 === 'mouseleave') {
+ if (!eventRootCtrl._hasMouseEnter) {
+ global$7(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);
+ eventRootCtrl._hasMouseEnter = 1;
+ }
+ } else if (!eventRootDelegates[name$$1]) {
+ global$7(eventRootCtrl.getEl()).on(name$$1, delegate);
+ eventRootDelegates[name$$1] = true;
+ }
+ nativeEvents[name$$1] = false;
+ }
+ }
+ }
+ var Control$1 = Control;
+
+ var isStatic = function (elm) {
+ return funcs.getRuntimeStyle(elm, 'position') === 'static';
+ };
+ var isFixed = function (ctrl) {
+ return ctrl.state.get('fixed');
+ };
+ function calculateRelativePosition(ctrl, targetElm, rel) {
+ var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;
+ viewport = getWindowViewPort();
+ pos = funcs.getPos(targetElm, $_egt6ye18xjjgwek2h.getUiContainer(ctrl));
+ x = pos.x;
+ y = pos.y;
+ if (isFixed(ctrl) && isStatic(document.body)) {
+ x -= viewport.x;
+ y -= viewport.y;
+ }
+ ctrlElm = ctrl.getEl();
+ size = funcs.getSize(ctrlElm);
+ selfW = size.width;
+ selfH = size.height;
+ size = funcs.getSize(targetElm);
+ targetW = size.width;
+ targetH = size.height;
+ rel = (rel || '').split('');
+ if (rel[0] === 'b') {
+ y += targetH;
+ }
+ if (rel[1] === 'r') {
+ x += targetW;
+ }
+ if (rel[0] === 'c') {
+ y += Math.round(targetH / 2);
+ }
+ if (rel[1] === 'c') {
+ x += Math.round(targetW / 2);
+ }
+ if (rel[3] === 'b') {
+ y -= selfH;
+ }
+ if (rel[4] === 'r') {
+ x -= selfW;
+ }
+ if (rel[3] === 'c') {
+ y -= Math.round(selfH / 2);
+ }
+ if (rel[4] === 'c') {
+ x -= Math.round(selfW / 2);
+ }
+ return {
+ x: x,
+ y: y,
+ w: selfW,
+ h: selfH
+ };
+ }
+ var getUiContainerViewPort = function (customUiContainer) {
+ return {
+ x: 0,
+ y: 0,
+ w: customUiContainer.scrollWidth - 1,
+ h: customUiContainer.scrollHeight - 1
+ };
+ };
+ var getWindowViewPort = function () {
+ var win = window;
+ var x = Math.max(win.pageXOffset, document.body.scrollLeft, document.documentElement.scrollLeft);
+ var y = Math.max(win.pageYOffset, document.body.scrollTop, document.documentElement.scrollTop);
+ var w = win.innerWidth || document.documentElement.clientWidth;
+ var h = win.innerHeight || document.documentElement.clientHeight;
+ return {
+ x: x,
+ y: y,
+ w: x + w,
+ h: y + h
+ };
+ };
+ var getViewPortRect = function (ctrl) {
+ var customUiContainer = $_egt6ye18xjjgwek2h.getUiContainer(ctrl);
+ return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();
+ };
+ var $_8zu82i18yjjgwek2l = {
+ testMoveRel: function (elm, rels) {
+ var viewPortRect = getViewPortRect(this);
+ for (var i = 0; i < rels.length; i++) {
+ var pos = calculateRelativePosition(this, elm, rels[i]);
+ if (isFixed(this)) {
+ if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {
+ return rels[i];
+ }
+ } else {
+ if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h) {
+ return rels[i];
+ }
+ }
+ }
+ return rels[0];
+ },
+ moveRel: function (elm, rel) {
+ if (typeof rel !== 'string') {
+ rel = this.testMoveRel(elm, rel);
+ }
+ var pos = calculateRelativePosition(this, elm, rel);
+ return this.moveTo(pos.x, pos.y);
+ },
+ moveBy: function (dx, dy) {
+ var self$$1 = this, rect = self$$1.layoutRect();
+ self$$1.moveTo(rect.x + dx, rect.y + dy);
+ return self$$1;
+ },
+ moveTo: function (x, y) {
+ var self$$1 = this;
+ function constrain(value, max, size) {
+ if (value < 0) {
+ return 0;
+ }
+ if (value + size > max) {
+ value = max - size;
+ return value < 0 ? 0 : value;
+ }
+ return value;
+ }
+ if (self$$1.settings.constrainToViewport) {
+ var viewPortRect = getViewPortRect(this);
+ var layoutRect = self$$1.layoutRect();
+ x = constrain(x, viewPortRect.w, layoutRect.w);
+ y = constrain(y, viewPortRect.h, layoutRect.h);
+ }
+ var uiContainer = $_egt6ye18xjjgwek2h.getUiContainer(self$$1);
+ if (uiContainer && isStatic(uiContainer) && !isFixed(self$$1)) {
+ x -= uiContainer.scrollLeft;
+ y -= uiContainer.scrollTop;
+ }
+ if (uiContainer) {
+ x += 1;
+ y += 1;
+ }
+ if (self$$1.state.get('rendered')) {
+ self$$1.layoutRect({
+ x: x,
+ y: y
+ }).repaint();
+ } else {
+ self$$1.settings.x = x;
+ self$$1.settings.y = y;
+ }
+ self$$1.fire('move', {
+ x: x,
+ y: y
+ });
+ return self$$1;
+ }
+ };
+
+ var Tooltip = Control$1.extend({
+ Mixins: [$_8zu82i18yjjgwek2l],
+ Defaults: { classes: 'widget tooltip tooltip-n' },
+ renderHtml: function () {
+ var self = this, prefix = self.classPrefix;
+ return '<div id="' + self._id + '" class="' + self.classes + '" role="presentation">' + '<div class="' + prefix + 'tooltip-arrow"></div>' + '<div class="' + prefix + 'tooltip-inner">' + self.encode(self.state.get('text')) + '</div>' + '</div>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:text', function (e) {
+ self.getEl().lastChild.innerHTML = self.encode(e.value);
+ });
+ return self._super();
+ },
+ repaint: function () {
+ var self = this;
+ var style, rect;
+ style = self.getEl().style;
+ rect = self._layoutRect;
+ style.left = rect.x + 'px';
+ style.top = rect.y + 'px';
+ style.zIndex = 65535 + 65535;
+ }
+ });
+
+ var Widget = Control$1.extend({
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ settings = self.settings;
+ self.canFocus = true;
+ if (settings.tooltip && Widget.tooltips !== false) {
+ self.on('mouseenter', function (e) {
+ var tooltip = self.tooltip().moveTo(-65535);
+ if (e.control === self) {
+ var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [
+ 'bc-tc',
+ 'bc-tl',
+ 'bc-tr'
+ ]);
+ tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
+ tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
+ tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
+ tooltip.moveRel(self.getEl(), rel);
+ } else {
+ tooltip.hide();
+ }
+ });
+ self.on('mouseleave mousedown click', function () {
+ self.tooltip().remove();
+ self._tooltip = null;
+ });
+ }
+ self.aria('label', settings.ariaLabel || settings.tooltip);
+ },
+ tooltip: function () {
+ if (!this._tooltip) {
+ this._tooltip = new Tooltip({ type: 'tooltip' });
+ $_egt6ye18xjjgwek2h.inheritUiContainer(this, this._tooltip);
+ this._tooltip.renderTo();
+ }
+ return this._tooltip;
+ },
+ postRender: function () {
+ var self = this, settings = self.settings;
+ self._super();
+ if (!self.parent() && (settings.width || settings.height)) {
+ self.initLayoutRect();
+ self.repaint();
+ }
+ if (settings.autofocus) {
+ self.focus();
+ }
+ },
+ bindStates: function () {
+ var self = this;
+ function disable(state) {
+ self.aria('disabled', state);
+ self.classes.toggle('disabled', state);
+ }
+ function active(state) {
+ self.aria('pressed', state);
+ self.classes.toggle('active', state);
+ }
+ self.state.on('change:disabled', function (e) {
+ disable(e.value);
+ });
+ self.state.on('change:active', function (e) {
+ active(e.value);
+ });
+ if (self.state.get('disabled')) {
+ disable(true);
+ }
+ if (self.state.get('active')) {
+ active(true);
+ }
+ return self._super();
+ },
+ remove: function () {
+ this._super();
+ if (this._tooltip) {
+ this._tooltip.remove();
+ this._tooltip = null;
+ }
+ }
+ });
+
+ var Progress = Widget.extend({
+ Defaults: { value: 0 },
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.classes.add('progress');
+ if (!self.settings.filter) {
+ self.settings.filter = function (value) {
+ return Math.round(value);
+ };
+ }
+ },
+ renderHtml: function () {
+ var self = this, id = self._id, prefix = this.classPrefix;
+ return '<div id="' + id + '" class="' + self.classes + '">' + '<div class="' + prefix + 'bar-container">' + '<div class="' + prefix + 'bar"></div>' + '</div>' + '<div class="' + prefix + 'text">0%</div>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ self._super();
+ self.value(self.settings.value);
+ return self;
+ },
+ bindStates: function () {
+ var self = this;
+ function setValue(value) {
+ value = self.settings.filter(value);
+ self.getEl().lastChild.innerHTML = value + '%';
+ self.getEl().firstChild.firstChild.style.width = value + '%';
+ }
+ self.state.on('change:value', function (e) {
+ setValue(e.value);
+ });
+ setValue(self.state.get('value'));
+ return self._super();
+ }
+ });
+
+ var updateLiveRegion = function (ctx, text) {
+ ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');
+ };
+ var Notification = Control$1.extend({
+ Mixins: [$_8zu82i18yjjgwek2l],
+ Defaults: { classes: 'widget notification' },
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.maxWidth = settings.maxWidth;
+ if (settings.text) {
+ self.text(settings.text);
+ }
+ if (settings.icon) {
+ self.icon = settings.icon;
+ }
+ if (settings.color) {
+ self.color = settings.color;
+ }
+ if (settings.type) {
+ self.classes.add('notification-' + settings.type);
+ }
+ if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {
+ self.closeButton = false;
+ } else {
+ self.classes.add('has-close');
+ self.closeButton = true;
+ }
+ if (settings.progressBar) {
+ self.progressBar = new Progress();
+ }
+ self.on('click', function (e) {
+ if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {
+ self.close();
+ }
+ });
+ },
+ renderHtml: function () {
+ var self = this;
+ var prefix = self.classPrefix;
+ var icon = '', closeButton = '', progressBar = '', notificationStyle = '';
+ if (self.icon) {
+ icon = '<i class="' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '"></i>';
+ }
+ notificationStyle = ' style="max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';"' : '"');
+ if (self.closeButton) {
+ closeButton = '<button type="button" class="' + prefix + 'close" aria-hidden="true">\xD7</button>';
+ }
+ if (self.progressBar) {
+ progressBar = self.progressBar.renderHtml();
+ }
+ return '<div id="' + self._id + '" class="' + self.classes + '"' + notificationStyle + ' role="presentation">' + icon + '<div class="' + prefix + 'notification-inner">' + self.state.get('text') + '</div>' + progressBar + closeButton + '<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;"' + ' aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ global$3.setTimeout(function () {
+ self.$el.addClass(self.classPrefix + 'in');
+ updateLiveRegion(self, self.state.get('text'));
+ }, 100);
+ return self._super();
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:text', function (e) {
+ self.getEl().firstChild.innerHTML = e.value;
+ updateLiveRegion(self, e.value);
+ });
+ if (self.progressBar) {
+ self.progressBar.bindStates();
+ self.progressBar.state.on('change:value', function (e) {
+ updateLiveRegion(self, self.state.get('text'));
+ });
+ }
+ return self._super();
+ },
+ close: function () {
+ var self = this;
+ if (!self.fire('close').isDefaultPrevented()) {
+ self.remove();
+ }
+ return self;
+ },
+ repaint: function () {
+ var self = this;
+ var style, rect;
+ style = self.getEl().style;
+ rect = self._layoutRect;
+ style.left = rect.x + 'px';
+ style.top = rect.y + 'px';
+ style.zIndex = 65535 - 1;
+ }
+ });
+
+ function NotificationManagerImpl (editor) {
+ var getEditorContainer = function (editor) {
+ return editor.inline ? editor.getElement() : editor.getContentAreaContainer();
+ };
+ var getContainerWidth = function () {
+ var container = getEditorContainer(editor);
+ return funcs.getSize(container).width;
+ };
+ var prePositionNotifications = function (notifications) {
+ each(notifications, function (notification) {
+ notification.moveTo(0, 0);
+ });
+ };
+ var positionNotifications = function (notifications) {
+ if (notifications.length > 0) {
+ var firstItem = notifications.slice(0, 1)[0];
+ var container = getEditorContainer(editor);
+ firstItem.moveRel(container, 'tc-tc');
+ each(notifications, function (notification, index) {
+ if (index > 0) {
+ notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');
+ }
+ });
+ }
+ };
+ var reposition = function (notifications) {
+ prePositionNotifications(notifications);
+ positionNotifications(notifications);
+ };
+ var open = function (args, closeCallback) {
+ var extendedArgs = global$4.extend(args, { maxWidth: getContainerWidth() });
+ var notif = new Notification(extendedArgs);
+ notif.args = extendedArgs;
+ if (extendedArgs.timeout > 0) {
+ notif.timer = setTimeout(function () {
+ notif.close();
+ closeCallback();
+ }, extendedArgs.timeout);
+ }
+ notif.on('close', function () {
+ closeCallback();
+ });
+ notif.renderTo();
+ return notif;
+ };
+ var close = function (notification) {
+ notification.close();
+ };
+ var getArgs = function (notification) {
+ return notification.args;
+ };
+ return {
+ open: open,
+ close: close,
+ reposition: reposition,
+ getArgs: getArgs
+ };
+ }
+
+ function getDocumentSize(doc) {
+ var documentElement, body, scrollWidth, clientWidth;
+ var offsetWidth, scrollHeight, clientHeight, offsetHeight;
+ var max = Math.max;
+ documentElement = doc.documentElement;
+ body = doc.body;
+ scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);
+ clientWidth = max(documentElement.clientWidth, body.clientWidth);
+ offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);
+ scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);
+ clientHeight = max(documentElement.clientHeight, body.clientHeight);
+ offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);
+ return {
+ width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,
+ height: scrollHeight < offsetHeight ? clientHeight : scrollHeight
+ };
+ }
+ function updateWithTouchData(e) {
+ var keys, i;
+ if (e.changedTouches) {
+ keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');
+ for (i = 0; i < keys.length; i++) {
+ e[keys[i]] = e.changedTouches[0][keys[i]];
+ }
+ }
+ }
+ function DragHelper (id, settings) {
+ var $eventOverlay;
+ var doc = settings.document || document;
+ var downButton;
+ var start, stop$$1, drag, startX, startY;
+ settings = settings || {};
+ var handleElement = doc.getElementById(settings.handle || id);
+ start = function (e) {
+ var docSize = getDocumentSize(doc);
+ var handleElm, cursor;
+ updateWithTouchData(e);
+ e.preventDefault();
+ downButton = e.button;
+ handleElm = handleElement;
+ startX = e.screenX;
+ startY = e.screenY;
+ if (window.getComputedStyle) {
+ cursor = window.getComputedStyle(handleElm, null).getPropertyValue('cursor');
+ } else {
+ cursor = handleElm.runtimeStyle.cursor;
+ }
+ $eventOverlay = global$7('<div></div>').css({
+ position: 'absolute',
+ top: 0,
+ left: 0,
+ width: docSize.width,
+ height: docSize.height,
+ zIndex: 2147483647,
+ opacity: 0.0001,
+ cursor: cursor
+ }).appendTo(doc.body);
+ global$7(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop$$1);
+ settings.start(e);
+ };
+ drag = function (e) {
+ updateWithTouchData(e);
+ if (e.button !== downButton) {
+ return stop$$1(e);
+ }
+ e.deltaX = e.screenX - startX;
+ e.deltaY = e.screenY - startY;
+ e.preventDefault();
+ settings.drag(e);
+ };
+ stop$$1 = function (e) {
+ updateWithTouchData(e);
+ global$7(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop$$1);
+ $eventOverlay.remove();
+ if (settings.stop) {
+ settings.stop(e);
+ }
+ };
+ this.destroy = function () {
+ global$7(handleElement).off();
+ };
+ global$7(handleElement).on('mousedown touchstart', start);
+ }
+
+ var global$11 = tinymce.util.Tools.resolve('tinymce.ui.Factory');
+
+ var hasTabstopData = function (elm) {
+ return elm.getAttribute('data-mce-tabstop') ? true : false;
+ };
+ function KeyboardNavigation (settings) {
+ var root = settings.root;
+ var focusedElement, focusedControl;
+ function isElement(node) {
+ return node && node.nodeType === 1;
+ }
+ try {
+ focusedElement = document.activeElement;
+ } catch (ex) {
+ focusedElement = document.body;
+ }
+ focusedControl = root.getParentCtrl(focusedElement);
+ function getRole(elm) {
+ elm = elm || focusedElement;
+ if (isElement(elm)) {
+ return elm.getAttribute('role');
+ }
+ return null;
+ }
+ function getParentRole(elm) {
+ var role, parent$$1 = elm || focusedElement;
+ while (parent$$1 = parent$$1.parentNode) {
+ if (role = getRole(parent$$1)) {
+ return role;
+ }
+ }
+ }
+ function getAriaProp(name$$1) {
+ var elm = focusedElement;
+ if (isElement(elm)) {
+ return elm.getAttribute('aria-' + name$$1);
+ }
+ }
+ function isTextInputElement(elm) {
+ var tagName = elm.tagName.toUpperCase();
+ return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';
+ }
+ function canFocus(elm) {
+ if (isTextInputElement(elm) && !elm.hidden) {
+ return true;
+ }
+ if (hasTabstopData(elm)) {
+ return true;
+ }
+ if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {
+ return true;
+ }
+ return false;
+ }
+ function getFocusElements(elm) {
+ var elements = [];
+ function collect(elm) {
+ if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {
+ return;
+ }
+ if (canFocus(elm)) {
+ elements.push(elm);
+ }
+ for (var i = 0; i < elm.childNodes.length; i++) {
+ collect(elm.childNodes[i]);
+ }
+ }
+ collect(elm || root.getEl());
+ return elements;
+ }
+ function getNavigationRoot(targetControl) {
+ var navigationRoot, controls;
+ targetControl = targetControl || focusedControl;
+ controls = targetControl.parents().toArray();
+ controls.unshift(targetControl);
+ for (var i = 0; i < controls.length; i++) {
+ navigationRoot = controls[i];
+ if (navigationRoot.settings.ariaRoot) {
+ break;
+ }
+ }
+ return navigationRoot;
+ }
+ function focusFirst(targetControl) {
+ var navigationRoot = getNavigationRoot(targetControl);
+ var focusElements = getFocusElements(navigationRoot.getEl());
+ if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {
+ moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);
+ } else {
+ moveFocusToIndex(0, focusElements);
+ }
+ }
+ function moveFocusToIndex(idx, elements) {
+ if (idx < 0) {
+ idx = elements.length - 1;
+ } else if (idx >= elements.length) {
+ idx = 0;
+ }
+ if (elements[idx]) {
+ elements[idx].focus();
+ }
+ return idx;
+ }
+ function moveFocus(dir, elements) {
+ var idx = -1;
+ var navigationRoot = getNavigationRoot();
+ elements = elements || getFocusElements(navigationRoot.getEl());
+ for (var i = 0; i < elements.length; i++) {
+ if (elements[i] === focusedElement) {
+ idx = i;
+ }
+ }
+ idx += dir;
+ navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);
+ }
+ function left() {
+ var parentRole = getParentRole();
+ if (parentRole === 'tablist') {
+ moveFocus(-1, getFocusElements(focusedElement.parentNode));
+ } else if (focusedControl.parent().submenu) {
+ cancel();
+ } else {
+ moveFocus(-1);
+ }
+ }
+ function right() {
+ var role = getRole(), parentRole = getParentRole();
+ if (parentRole === 'tablist') {
+ moveFocus(1, getFocusElements(focusedElement.parentNode));
+ } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {
+ enter();
+ } else {
+ moveFocus(1);
+ }
+ }
+ function up() {
+ moveFocus(-1);
+ }
+ function down() {
+ var role = getRole(), parentRole = getParentRole();
+ if (role === 'menuitem' && parentRole === 'menubar') {
+ enter();
+ } else if (role === 'button' && getAriaProp('haspopup')) {
+ enter({ key: 'down' });
+ } else {
+ moveFocus(1);
+ }
+ }
+ function tab(e) {
+ var parentRole = getParentRole();
+ if (parentRole === 'tablist') {
+ var elm = getFocusElements(focusedControl.getEl('body'))[0];
+ if (elm) {
+ elm.focus();
+ }
+ } else {
+ moveFocus(e.shiftKey ? -1 : 1);
+ }
+ }
+ function cancel() {
+ focusedControl.fire('cancel');
+ }
+ function enter(aria) {
+ aria = aria || {};
+ focusedControl.fire('click', {
+ target: focusedElement,
+ aria: aria
+ });
+ }
+ root.on('keydown', function (e) {
+ function handleNonTabOrEscEvent(e, handler) {
+ if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {
+ return;
+ }
+ if (getRole(focusedElement) === 'slider') {
+ return;
+ }
+ if (handler(e) !== false) {
+ e.preventDefault();
+ }
+ }
+ if (e.isDefaultPrevented()) {
+ return;
+ }
+ switch (e.keyCode) {
+ case 37:
+ handleNonTabOrEscEvent(e, left);
+ break;
+ case 39:
+ handleNonTabOrEscEvent(e, right);
+ break;
+ case 38:
+ handleNonTabOrEscEvent(e, up);
+ break;
+ case 40:
+ handleNonTabOrEscEvent(e, down);
+ break;
+ case 27:
+ cancel();
+ break;
+ case 14:
+ case 13:
+ case 32:
+ handleNonTabOrEscEvent(e, enter);
+ break;
+ case 9:
+ tab(e);
+ e.preventDefault();
+ break;
+ }
+ });
+ root.on('focusin', function (e) {
+ focusedElement = e.target;
+ focusedControl = e.control;
+ });
+ return { focusFirst: focusFirst };
+ }
+
+ var selectorCache = {};
+ var Container = Control$1.extend({
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ settings = self.settings;
+ if (settings.fixed) {
+ self.state.set('fixed', true);
+ }
+ self._items = new Collection$2();
+ if (self.isRtl()) {
+ self.classes.add('rtl');
+ }
+ self.bodyClasses = new ClassList(function () {
+ if (self.state.get('rendered')) {
+ self.getEl('body').className = this.toString();
+ }
+ });
+ self.bodyClasses.prefix = self.classPrefix;
+ self.classes.add('container');
+ self.bodyClasses.add('container-body');
+ if (settings.containerCls) {
+ self.classes.add(settings.containerCls);
+ }
+ self._layout = global$11.create((settings.layout || '') + 'layout');
+ if (self.settings.items) {
+ self.add(self.settings.items);
+ } else {
+ self.add(self.render());
+ }
+ self._hasBody = true;
+ },
+ items: function () {
+ return this._items;
+ },
+ find: function (selector) {
+ selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);
+ return selector.find(this);
+ },
+ add: function (items) {
+ var self = this;
+ self.items().add(self.create(items)).parent(self);
+ return self;
+ },
+ focus: function (keyboard) {
+ var self = this;
+ var focusCtrl, keyboardNav, items;
+ if (keyboard) {
+ keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;
+ if (keyboardNav) {
+ keyboardNav.focusFirst(self);
+ return;
+ }
+ }
+ items = self.find('*');
+ if (self.statusbar) {
+ items.add(self.statusbar.items());
+ }
+ items.each(function (ctrl) {
+ if (ctrl.settings.autofocus) {
+ focusCtrl = null;
+ return false;
+ }
+ if (ctrl.canFocus) {
+ focusCtrl = focusCtrl || ctrl;
+ }
+ });
+ if (focusCtrl) {
+ focusCtrl.focus();
+ }
+ return self;
+ },
+ replace: function (oldItem, newItem) {
+ var ctrlElm;
+ var items = this.items();
+ var i = items.length;
+ while (i--) {
+ if (items[i] === oldItem) {
+ items[i] = newItem;
+ break;
+ }
+ }
+ if (i >= 0) {
+ ctrlElm = newItem.getEl();
+ if (ctrlElm) {
+ ctrlElm.parentNode.removeChild(ctrlElm);
+ }
+ ctrlElm = oldItem.getEl();
+ if (ctrlElm) {
+ ctrlElm.parentNode.removeChild(ctrlElm);
+ }
+ }
+ newItem.parent(this);
+ },
+ create: function (items) {
+ var self = this;
+ var settings;
+ var ctrlItems = [];
+ if (!global$4.isArray(items)) {
+ items = [items];
+ }
+ global$4.each(items, function (item) {
+ if (item) {
+ if (!(item instanceof Control$1)) {
+ if (typeof item === 'string') {
+ item = { type: item };
+ }
+ settings = global$4.extend({}, self.settings.defaults, item);
+ item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);
+ item = global$11.create(settings);
+ }
+ ctrlItems.push(item);
+ }
+ });
+ return ctrlItems;
+ },
+ renderNew: function () {
+ var self = this;
+ self.items().each(function (ctrl, index) {
+ var containerElm;
+ ctrl.parent(self);
+ if (!ctrl.state.get('rendered')) {
+ containerElm = self.getEl('body');
+ if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {
+ global$7(containerElm.childNodes[index]).before(ctrl.renderHtml());
+ } else {
+ global$7(containerElm).append(ctrl.renderHtml());
+ }
+ ctrl.postRender();
+ $_cqjgb518wjjgwek2f.add(ctrl);
+ }
+ });
+ self._layout.applyClasses(self.items().filter(':visible'));
+ self._lastRect = null;
+ return self;
+ },
+ append: function (items) {
+ return this.add(items).renderNew();
+ },
+ prepend: function (items) {
+ var self = this;
+ self.items().set(self.create(items).concat(self.items().toArray()));
+ return self.renderNew();
+ },
+ insert: function (items, index, before) {
+ var self = this;
+ var curItems, beforeItems, afterItems;
+ items = self.create(items);
+ curItems = self.items();
+ if (!before && index < curItems.length - 1) {
+ index += 1;
+ }
+ if (index >= 0 && index < curItems.length) {
+ beforeItems = curItems.slice(0, index).toArray();
+ afterItems = curItems.slice(index).toArray();
+ curItems.set(beforeItems.concat(items, afterItems));
+ }
+ return self.renderNew();
+ },
+ fromJSON: function (data) {
+ var self = this;
+ for (var name in data) {
+ self.find('#' + name).value(data[name]);
+ }
+ return self;
+ },
+ toJSON: function () {
+ var self = this, data = {};
+ self.find('*').each(function (ctrl) {
+ var name = ctrl.name(), value = ctrl.value();
+ if (name && typeof value !== 'undefined') {
+ data[name] = value;
+ }
+ });
+ return data;
+ },
+ renderHtml: function () {
+ var self = this, layout = self._layout, role = this.settings.role;
+ self.preRender();
+ layout.preRender(self);
+ return '<div id="' + self._id + '" class="' + self.classes + '"' + (role ? ' role="' + this.settings.role + '"' : '') + '>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ var box;
+ self.items().exec('postRender');
+ self._super();
+ self._layout.postRender(self);
+ self.state.set('rendered', true);
+ if (self.settings.style) {
+ self.$el.css(self.settings.style);
+ }
+ if (self.settings.border) {
+ box = self.borderBox;
+ self.$el.css({
+ 'border-top-width': box.top,
+ 'border-right-width': box.right,
+ 'border-bottom-width': box.bottom,
+ 'border-left-width': box.left
+ });
+ }
+ if (!self.parent()) {
+ self.keyboardNav = KeyboardNavigation({ root: self });
+ }
+ return self;
+ },
+ initLayoutRect: function () {
+ var self = this, layoutRect = self._super();
+ self._layout.recalc(self);
+ return layoutRect;
+ },
+ recalc: function () {
+ var self = this;
+ var rect = self._layoutRect;
+ var lastRect = self._lastRect;
+ if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {
+ self._layout.recalc(self);
+ rect = self.layoutRect();
+ self._lastRect = {
+ x: rect.x,
+ y: rect.y,
+ w: rect.w,
+ h: rect.h
+ };
+ return true;
+ }
+ },
+ reflow: function () {
+ var i;
+ $_cqjgb518wjjgwek2f.remove(this);
+ if (this.visible()) {
+ Control$1.repaintControls = [];
+ Control$1.repaintControls.map = {};
+ this.recalc();
+ i = Control$1.repaintControls.length;
+ while (i--) {
+ Control$1.repaintControls[i].repaint();
+ }
+ if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {
+ this.repaint();
+ }
+ Control$1.repaintControls = [];
+ }
+ return this;
+ }
+ });
+
+ var $_8woeth19ajjgwek4b = {
+ init: function () {
+ var self = this;
+ self.on('repaint', self.renderScroll);
+ },
+ renderScroll: function () {
+ var self = this, margin = 2;
+ function repaintScroll() {
+ var hasScrollH, hasScrollV, bodyElm;
+ function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {
+ var containerElm, scrollBarElm, scrollThumbElm;
+ var containerSize, scrollSize, ratio, rect;
+ var posNameLower, sizeNameLower;
+ scrollBarElm = self.getEl('scroll' + axisName);
+ if (scrollBarElm) {
+ posNameLower = posName.toLowerCase();
+ sizeNameLower = sizeName.toLowerCase();
+ global$7(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);
+ if (!hasScroll) {
+ global$7(scrollBarElm).css('display', 'none');
+ return;
+ }
+ global$7(scrollBarElm).css('display', 'block');
+ containerElm = self.getEl('body');
+ scrollThumbElm = self.getEl('scroll' + axisName + 't');
+ containerSize = containerElm['client' + sizeName] - margin * 2;
+ containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;
+ scrollSize = containerElm['scroll' + sizeName];
+ ratio = containerSize / scrollSize;
+ rect = {};
+ rect[posNameLower] = containerElm['offset' + posName] + margin;
+ rect[sizeNameLower] = containerSize;
+ global$7(scrollBarElm).css(rect);
+ rect = {};
+ rect[posNameLower] = containerElm['scroll' + posName] * ratio;
+ rect[sizeNameLower] = containerSize * ratio;
+ global$7(scrollThumbElm).css(rect);
+ }
+ }
+ bodyElm = self.getEl('body');
+ hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;
+ hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;
+ repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');
+ repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');
+ }
+ function addScroll() {
+ function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {
+ var scrollStart;
+ var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;
+ global$7(self.getEl()).append('<div id="' + axisId + '" class="' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '">' + '<div id="' + axisId + 't" class="' + prefix + 'scrollbar-thumb"></div>' + '</div>');
+ self.draghelper = new DragHelper(axisId + 't', {
+ start: function () {
+ scrollStart = self.getEl('body')['scroll' + posName];
+ global$7('#' + axisId).addClass(prefix + 'active');
+ },
+ drag: function (e) {
+ var ratio, hasScrollH, hasScrollV, containerSize;
+ var layoutRect = self.layoutRect();
+ hasScrollH = layoutRect.contentW > layoutRect.innerW;
+ hasScrollV = layoutRect.contentH > layoutRect.innerH;
+ containerSize = self.getEl('body')['client' + sizeName] - margin * 2;
+ containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;
+ ratio = containerSize / self.getEl('body')['scroll' + sizeName];
+ self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;
+ },
+ stop: function () {
+ global$7('#' + axisId).removeClass(prefix + 'active');
+ }
+ });
+ }
+ self.classes.add('scroll');
+ addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');
+ addScrollAxis('h', 'Left', 'Width', 'X', 'Height');
+ }
+ if (self.settings.autoScroll) {
+ if (!self._hasScroll) {
+ self._hasScroll = true;
+ addScroll();
+ self.on('wheel', function (e) {
+ var bodyEl = self.getEl('body');
+ bodyEl.scrollLeft += (e.deltaX || 0) * 10;
+ bodyEl.scrollTop += e.deltaY * 10;
+ repaintScroll();
+ });
+ global$7(self.getEl('body')).on('scroll', repaintScroll);
+ }
+ repaintScroll();
+ }
+ }
+ };
+
+ var Panel = Container.extend({
+ Defaults: {
+ layout: 'fit',
+ containerCls: 'panel'
+ },
+ Mixins: [$_8woeth19ajjgwek4b],
+ renderHtml: function () {
+ var self = this;
+ var layout = self._layout;
+ var innerHtml = self.settings.html;
+ self.preRender();
+ layout.preRender(self);
+ if (typeof innerHtml === 'undefined') {
+ innerHtml = '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>';
+ } else {
+ if (typeof innerHtml === 'function') {
+ innerHtml = innerHtml.call(self);
+ }
+ self._hasBody = false;
+ }
+ return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1" role="group">' + (self._preBodyHtml || '') + innerHtml + '</div>';
+ }
+ });
+
+ var $_20hy1119bjjgwek4f = {
+ resizeToContent: function () {
+ this._layoutRect.autoResize = true;
+ this._lastRect = null;
+ this.reflow();
+ },
+ resizeTo: function (w, h) {
+ if (w <= 1 || h <= 1) {
+ var rect = funcs.getWindowSize();
+ w = w <= 1 ? w * rect.w : w;
+ h = h <= 1 ? h * rect.h : h;
+ }
+ this._layoutRect.autoResize = false;
+ return this.layoutRect({
+ minW: w,
+ minH: h,
+ w: w,
+ h: h
+ }).reflow();
+ },
+ resizeBy: function (dw, dh) {
+ var self = this, rect = self.layoutRect();
+ return self.resizeTo(rect.w + dw, rect.h + dh);
+ }
+ };
+
+ var documentClickHandler;
+ var documentScrollHandler;
+ var windowResizeHandler;
+ var visiblePanels = [];
+ var zOrder = [];
+ var hasModal;
+ function isChildOf(ctrl, parent$$1) {
+ while (ctrl) {
+ if (ctrl === parent$$1) {
+ return true;
+ }
+ ctrl = ctrl.parent();
+ }
+ }
+ function skipOrHidePanels(e) {
+ var i = visiblePanels.length;
+ while (i--) {
+ var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);
+ if (panel.settings.autohide) {
+ if (clickCtrl) {
+ if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {
+ continue;
+ }
+ }
+ e = panel.fire('autohide', { target: e.target });
+ if (!e.isDefaultPrevented()) {
+ panel.hide();
+ }
+ }
+ }
+ }
+ function bindDocumentClickHandler() {
+ if (!documentClickHandler) {
+ documentClickHandler = function (e) {
+ if (e.button === 2) {
+ return;
+ }
+ skipOrHidePanels(e);
+ };
+ global$7(document).on('click touchstart', documentClickHandler);
+ }
+ }
+ function bindDocumentScrollHandler() {
+ if (!documentScrollHandler) {
+ documentScrollHandler = function () {
+ var i;
+ i = visiblePanels.length;
+ while (i--) {
+ repositionPanel$1(visiblePanels[i]);
+ }
+ };
+ global$7(window).on('scroll', documentScrollHandler);
+ }
+ }
+ function bindWindowResizeHandler() {
+ if (!windowResizeHandler) {
+ var docElm_1 = document.documentElement;
+ var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;
+ windowResizeHandler = function () {
+ if (!document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {
+ clientWidth_1 = docElm_1.clientWidth;
+ clientHeight_1 = docElm_1.clientHeight;
+ FloatPanel.hideAll();
+ }
+ };
+ global$7(window).on('resize', windowResizeHandler);
+ }
+ }
+ function repositionPanel$1(panel) {
+ var scrollY$$1 = funcs.getViewPort().y;
+ function toggleFixedChildPanels(fixed, deltaY) {
+ var parent$$1;
+ for (var i = 0; i < visiblePanels.length; i++) {
+ if (visiblePanels[i] !== panel) {
+ parent$$1 = visiblePanels[i].parent();
+ while (parent$$1 && (parent$$1 = parent$$1.parent())) {
+ if (parent$$1 === panel) {
+ visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();
+ }
+ }
+ }
+ }
+ }
+ if (panel.settings.autofix) {
+ if (!panel.state.get('fixed')) {
+ panel._autoFixY = panel.layoutRect().y;
+ if (panel._autoFixY < scrollY$$1) {
+ panel.fixed(true).layoutRect({ y: 0 }).repaint();
+ toggleFixedChildPanels(true, scrollY$$1 - panel._autoFixY);
+ }
+ } else {
+ if (panel._autoFixY > scrollY$$1) {
+ panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();
+ toggleFixedChildPanels(false, panel._autoFixY - scrollY$$1);
+ }
+ }
+ }
+ }
+ function addRemove(add, ctrl) {
+ var i, zIndex = FloatPanel.zIndex || 65535, topModal;
+ if (add) {
+ zOrder.push(ctrl);
+ } else {
+ i = zOrder.length;
+ while (i--) {
+ if (zOrder[i] === ctrl) {
+ zOrder.splice(i, 1);
+ }
+ }
+ }
+ if (zOrder.length) {
+ for (i = 0; i < zOrder.length; i++) {
+ if (zOrder[i].modal) {
+ zIndex++;
+ topModal = zOrder[i];
+ }
+ zOrder[i].getEl().style.zIndex = zIndex;
+ zOrder[i].zIndex = zIndex;
+ zIndex++;
+ }
+ }
+ var modalBlockEl = global$7('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];
+ if (topModal) {
+ global$7(modalBlockEl).css('z-index', topModal.zIndex - 1);
+ } else if (modalBlockEl) {
+ modalBlockEl.parentNode.removeChild(modalBlockEl);
+ hasModal = false;
+ }
+ FloatPanel.currentZIndex = zIndex;
+ }
+ var FloatPanel = Panel.extend({
+ Mixins: [
+ $_8zu82i18yjjgwek2l,
+ $_20hy1119bjjgwek4f
+ ],
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ self$$1._eventsRoot = self$$1;
+ self$$1.classes.add('floatpanel');
+ if (settings.autohide) {
+ bindDocumentClickHandler();
+ bindWindowResizeHandler();
+ visiblePanels.push(self$$1);
+ }
+ if (settings.autofix) {
+ bindDocumentScrollHandler();
+ self$$1.on('move', function () {
+ repositionPanel$1(this);
+ });
+ }
+ self$$1.on('postrender show', function (e) {
+ if (e.control === self$$1) {
+ var $modalBlockEl_1;
+ var prefix_1 = self$$1.classPrefix;
+ if (self$$1.modal && !hasModal) {
+ $modalBlockEl_1 = global$7('#' + prefix_1 + 'modal-block', self$$1.getContainerElm());
+ if (!$modalBlockEl_1[0]) {
+ $modalBlockEl_1 = global$7('<div id="' + prefix_1 + 'modal-block" class="' + prefix_1 + 'reset ' + prefix_1 + 'fade"></div>').appendTo(self$$1.getContainerElm());
+ }
+ global$3.setTimeout(function () {
+ $modalBlockEl_1.addClass(prefix_1 + 'in');
+ global$7(self$$1.getEl()).addClass(prefix_1 + 'in');
+ });
+ hasModal = true;
+ }
+ addRemove(true, self$$1);
+ }
+ });
+ self$$1.on('show', function () {
+ self$$1.parents().each(function (ctrl) {
+ if (ctrl.state.get('fixed')) {
+ self$$1.fixed(true);
+ return false;
+ }
+ });
+ });
+ if (settings.popover) {
+ self$$1._preBodyHtml = '<div class="' + self$$1.classPrefix + 'arrow"></div>';
+ self$$1.classes.add('popover').add('bottom').add(self$$1.isRtl() ? 'end' : 'start');
+ }
+ self$$1.aria('label', settings.ariaLabel);
+ self$$1.aria('labelledby', self$$1._id);
+ self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none');
+ },
+ fixed: function (state) {
+ var self$$1 = this;
+ if (self$$1.state.get('fixed') !== state) {
+ if (self$$1.state.get('rendered')) {
+ var viewport = funcs.getViewPort();
+ if (state) {
+ self$$1.layoutRect().y -= viewport.y;
+ } else {
+ self$$1.layoutRect().y += viewport.y;
+ }
+ }
+ self$$1.classes.toggle('fixed', state);
+ self$$1.state.set('fixed', state);
+ }
+ return self$$1;
+ },
+ show: function () {
+ var self$$1 = this;
+ var i;
+ var state = self$$1._super();
+ i = visiblePanels.length;
+ while (i--) {
+ if (visiblePanels[i] === self$$1) {
+ break;
+ }
+ }
+ if (i === -1) {
+ visiblePanels.push(self$$1);
+ }
+ return state;
+ },
+ hide: function () {
+ removeVisiblePanel(this);
+ addRemove(false, this);
+ return this._super();
+ },
+ hideAll: function () {
+ FloatPanel.hideAll();
+ },
+ close: function () {
+ var self$$1 = this;
+ if (!self$$1.fire('close').isDefaultPrevented()) {
+ self$$1.remove();
+ addRemove(false, self$$1);
+ }
+ return self$$1;
+ },
+ remove: function () {
+ removeVisiblePanel(this);
+ this._super();
+ },
+ postRender: function () {
+ var self$$1 = this;
+ if (self$$1.settings.bodyRole) {
+ this.getEl('body').setAttribute('role', self$$1.settings.bodyRole);
+ }
+ return self$$1._super();
+ }
+ });
+ FloatPanel.hideAll = function () {
+ var i = visiblePanels.length;
+ while (i--) {
+ var panel = visiblePanels[i];
+ if (panel && panel.settings.autohide) {
+ panel.hide();
+ visiblePanels.splice(i, 1);
+ }
+ }
+ };
+ function removeVisiblePanel(panel) {
+ var i;
+ i = visiblePanels.length;
+ while (i--) {
+ if (visiblePanels[i] === panel) {
+ visiblePanels.splice(i, 1);
+ }
+ }
+ i = zOrder.length;
+ while (i--) {
+ if (zOrder[i] === panel) {
+ zOrder.splice(i, 1);
+ }
+ }
+ }
+
+ var windows = [];
+ var oldMetaValue = '';
+ function toggleFullScreenState(state) {
+ var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';
+ var viewport = global$7('meta[name=viewport]')[0], contentValue;
+ if (global$1.overrideViewPort === false) {
+ return;
+ }
+ if (!viewport) {
+ viewport = document.createElement('meta');
+ viewport.setAttribute('name', 'viewport');
+ document.getElementsByTagName('head')[0].appendChild(viewport);
+ }
+ contentValue = viewport.getAttribute('content');
+ if (contentValue && typeof oldMetaValue !== 'undefined') {
+ oldMetaValue = contentValue;
+ }
+ viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);
+ }
+ function toggleBodyFullScreenClasses(classPrefix, state) {
+ if (checkFullscreenWindows() && state === false) {
+ global$7([
+ document.documentElement,
+ document.body
+ ]).removeClass(classPrefix + 'fullscreen');
+ }
+ }
+ function checkFullscreenWindows() {
+ for (var i = 0; i < windows.length; i++) {
+ if (windows[i]._fullscreen) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function handleWindowResize() {
+ if (!global$1.desktop) {
+ var lastSize_1 = {
+ w: window.innerWidth,
+ h: window.innerHeight
+ };
+ global$3.setInterval(function () {
+ var w = window.innerWidth, h = window.innerHeight;
+ if (lastSize_1.w !== w || lastSize_1.h !== h) {
+ lastSize_1 = {
+ w: w,
+ h: h
+ };
+ global$7(window).trigger('resize');
+ }
+ }, 100);
+ }
+ function reposition() {
+ var i;
+ var rect = funcs.getWindowSize();
+ var layoutRect;
+ for (i = 0; i < windows.length; i++) {
+ layoutRect = windows[i].layoutRect();
+ windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2));
+ }
+ }
+ global$7(window).on('resize', reposition);
+ }
+ var Window$$1 = FloatPanel.extend({
+ modal: true,
+ Defaults: {
+ border: 1,
+ layout: 'flex',
+ containerCls: 'panel',
+ role: 'dialog',
+ callbacks: {
+ submit: function () {
+ this.fire('submit', { data: this.toJSON() });
+ },
+ close: function () {
+ this.close();
+ }
+ }
+ },
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ if (self$$1.isRtl()) {
+ self$$1.classes.add('rtl');
+ }
+ self$$1.classes.add('window');
+ self$$1.bodyClasses.add('window-body');
+ self$$1.state.set('fixed', true);
+ if (settings.buttons) {
+ self$$1.statusbar = new Panel({
+ layout: 'flex',
+ border: '1 0 0 0',
+ spacing: 3,
+ padding: 10,
+ align: 'center',
+ pack: self$$1.isRtl() ? 'start' : 'end',
+ defaults: { type: 'button' },
+ items: settings.buttons
+ });
+ self$$1.statusbar.classes.add('foot');
+ self$$1.statusbar.parent(self$$1);
+ }
+ self$$1.on('click', function (e) {
+ var closeClass = self$$1.classPrefix + 'close';
+ if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {
+ self$$1.close();
+ }
+ });
+ self$$1.on('cancel', function () {
+ self$$1.close();
+ });
+ self$$1.on('move', function (e) {
+ if (e.control === self$$1) {
+ FloatPanel.hideAll();
+ }
+ });
+ self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none');
+ self$$1.aria('label', settings.title);
+ self$$1._fullscreen = false;
+ },
+ recalc: function () {
+ var self$$1 = this;
+ var statusbar$$1 = self$$1.statusbar;
+ var layoutRect, width, x, needsRecalc;
+ if (self$$1._fullscreen) {
+ self$$1.layoutRect(funcs.getWindowSize());
+ self$$1.layoutRect().contentH = self$$1.layoutRect().innerH;
+ }
+ self$$1._super();
+ layoutRect = self$$1.layoutRect();
+ if (self$$1.settings.title && !self$$1._fullscreen) {
+ width = layoutRect.headerW;
+ if (width > layoutRect.w) {
+ x = layoutRect.x - Math.max(0, width / 2);
+ self$$1.layoutRect({
+ w: width,
+ x: x
+ });
+ needsRecalc = true;
+ }
+ }
+ if (statusbar$$1) {
+ statusbar$$1.layoutRect({ w: self$$1.layoutRect().innerW }).recalc();
+ width = statusbar$$1.layoutRect().minW + layoutRect.deltaW;
+ if (width > layoutRect.w) {
+ x = layoutRect.x - Math.max(0, width - layoutRect.w);
+ self$$1.layoutRect({
+ w: width,
+ x: x
+ });
+ needsRecalc = true;
+ }
+ }
+ if (needsRecalc) {
+ self$$1.recalc();
+ }
+ },
+ initLayoutRect: function () {
+ var self$$1 = this;
+ var layoutRect = self$$1._super();
+ var deltaH = 0, headEl;
+ if (self$$1.settings.title && !self$$1._fullscreen) {
+ headEl = self$$1.getEl('head');
+ var size = funcs.getSize(headEl);
+ layoutRect.headerW = size.width;
+ layoutRect.headerH = size.height;
+ deltaH += layoutRect.headerH;
+ }
+ if (self$$1.statusbar) {
+ deltaH += self$$1.statusbar.layoutRect().h;
+ }
+ layoutRect.deltaH += deltaH;
+ layoutRect.minH += deltaH;
+ layoutRect.h += deltaH;
+ var rect = funcs.getWindowSize();
+ layoutRect.x = self$$1.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);
+ layoutRect.y = self$$1.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);
+ return layoutRect;
+ },
+ renderHtml: function () {
+ var self$$1 = this, layout = self$$1._layout, id = self$$1._id, prefix = self$$1.classPrefix;
+ var settings = self$$1.settings;
+ var headerHtml = '', footerHtml = '', html = settings.html;
+ self$$1.preRender();
+ layout.preRender(self$$1);
+ if (settings.title) {
+ headerHtml = '<div id="' + id + '-head" class="' + prefix + 'window-head">' + '<div id="' + id + '-title" class="' + prefix + 'title">' + self$$1.encode(settings.title) + '</div>' + '<div id="' + id + '-dragh" class="' + prefix + 'dragh"></div>' + '<button type="button" class="' + prefix + 'close" aria-hidden="true">' + '<i class="mce-ico mce-i-remove"></i>' + '</button>' + '</div>';
+ }
+ if (settings.url) {
+ html = '<iframe src="' + settings.url + '" tabindex="-1"></iframe>';
+ }
+ if (typeof html === 'undefined') {
+ html = layout.renderHtml(self$$1);
+ }
+ if (self$$1.statusbar) {
+ footerHtml = self$$1.statusbar.renderHtml();
+ }
+ return '<div id="' + id + '" class="' + self$$1.classes + '" hidefocus="1">' + '<div class="' + self$$1.classPrefix + 'reset" role="application">' + headerHtml + '<div id="' + id + '-body" class="' + self$$1.bodyClasses + '">' + html + '</div>' + footerHtml + '</div>' + '</div>';
+ },
+ fullscreen: function (state) {
+ var self$$1 = this;
+ var documentElement = document.documentElement;
+ var slowRendering;
+ var prefix = self$$1.classPrefix;
+ var layoutRect;
+ if (state !== self$$1._fullscreen) {
+ global$7(window).on('resize', function () {
+ var time;
+ if (self$$1._fullscreen) {
+ if (!slowRendering) {
+ time = new Date().getTime();
+ var rect = funcs.getWindowSize();
+ self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h);
+ if (new Date().getTime() - time > 50) {
+ slowRendering = true;
+ }
+ } else {
+ if (!self$$1._timer) {
+ self$$1._timer = global$3.setTimeout(function () {
+ var rect = funcs.getWindowSize();
+ self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h);
+ self$$1._timer = 0;
+ }, 50);
+ }
+ }
+ }
+ });
+ layoutRect = self$$1.layoutRect();
+ self$$1._fullscreen = state;
+ if (!state) {
+ self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox(self$$1.settings.border);
+ self$$1.getEl('head').style.display = '';
+ layoutRect.deltaH += layoutRect.headerH;
+ global$7([
+ documentElement,
+ document.body
+ ]).removeClass(prefix + 'fullscreen');
+ self$$1.classes.remove('fullscreen');
+ self$$1.moveTo(self$$1._initial.x, self$$1._initial.y).resizeTo(self$$1._initial.w, self$$1._initial.h);
+ } else {
+ self$$1._initial = {
+ x: layoutRect.x,
+ y: layoutRect.y,
+ w: layoutRect.w,
+ h: layoutRect.h
+ };
+ self$$1.borderBox = $_4kbuyt18pjjgwek1w.parseBox('0');
+ self$$1.getEl('head').style.display = 'none';
+ layoutRect.deltaH -= layoutRect.headerH + 2;
+ global$7([
+ documentElement,
+ document.body
+ ]).addClass(prefix + 'fullscreen');
+ self$$1.classes.add('fullscreen');
+ var rect = funcs.getWindowSize();
+ self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h);
+ }
+ }
+ return self$$1.reflow();
+ },
+ postRender: function () {
+ var self$$1 = this;
+ var startPos;
+ setTimeout(function () {
+ self$$1.classes.add('in');
+ self$$1.fire('open');
+ }, 0);
+ self$$1._super();
+ if (self$$1.statusbar) {
+ self$$1.statusbar.postRender();
+ }
+ self$$1.focus();
+ this.dragHelper = new DragHelper(self$$1._id + '-dragh', {
+ start: function () {
+ startPos = {
+ x: self$$1.layoutRect().x,
+ y: self$$1.layoutRect().y
+ };
+ },
+ drag: function (e) {
+ self$$1.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);
+ }
+ });
+ self$$1.on('submit', function (e) {
+ if (!e.isDefaultPrevented()) {
+ self$$1.close();
+ }
+ });
+ windows.push(self$$1);
+ toggleFullScreenState(true);
+ },
+ submit: function () {
+ return this.fire('submit', { data: this.toJSON() });
+ },
+ remove: function () {
+ var self$$1 = this;
+ var i;
+ self$$1.dragHelper.destroy();
+ self$$1._super();
+ if (self$$1.statusbar) {
+ this.statusbar.remove();
+ }
+ toggleBodyFullScreenClasses(self$$1.classPrefix, false);
+ i = windows.length;
+ while (i--) {
+ if (windows[i] === self$$1) {
+ windows.splice(i, 1);
+ }
+ }
+ toggleFullScreenState(windows.length > 0);
+ },
+ getContentWindow: function () {
+ var ifr = this.getEl().getElementsByTagName('iframe')[0];
+ return ifr ? ifr.contentWindow : null;
+ }
+ });
+ handleWindowResize();
+
+ var MessageBox = Window$$1.extend({
+ init: function (settings) {
+ settings = {
+ border: 1,
+ padding: 20,
+ layout: 'flex',
+ pack: 'center',
+ align: 'center',
+ containerCls: 'panel',
+ autoScroll: true,
+ buttons: {
+ type: 'button',
+ text: 'Ok',
+ action: 'ok'
+ },
+ items: {
+ type: 'label',
+ multiline: true,
+ maxWidth: 500,
+ maxHeight: 200
+ }
+ };
+ this._super(settings);
+ },
+ Statics: {
+ OK: 1,
+ OK_CANCEL: 2,
+ YES_NO: 3,
+ YES_NO_CANCEL: 4,
+ msgBox: function (settings) {
+ var buttons;
+ var callback = settings.callback || function () {
+ };
+ function createButton(text, status$$1, primary) {
+ return {
+ type: 'button',
+ text: text,
+ subtype: primary ? 'primary' : '',
+ onClick: function (e) {
+ e.control.parents()[1].close();
+ callback(status$$1);
+ }
+ };
+ }
+ switch (settings.buttons) {
+ case MessageBox.OK_CANCEL:
+ buttons = [
+ createButton('Ok', true, true),
+ createButton('Cancel', false)
+ ];
+ break;
+ case MessageBox.YES_NO:
+ case MessageBox.YES_NO_CANCEL:
+ buttons = [
+ createButton('Yes', 1, true),
+ createButton('No', 0)
+ ];
+ if (settings.buttons === MessageBox.YES_NO_CANCEL) {
+ buttons.push(createButton('Cancel', -1));
+ }
+ break;
+ default:
+ buttons = [createButton('Ok', true, true)];
+ break;
+ }
+ return new Window$$1({
+ padding: 20,
+ x: settings.x,
+ y: settings.y,
+ minWidth: 300,
+ minHeight: 100,
+ layout: 'flex',
+ pack: 'center',
+ align: 'center',
+ buttons: buttons,
+ title: settings.title,
+ role: 'alertdialog',
+ items: {
+ type: 'label',
+ multiline: true,
+ maxWidth: 500,
+ maxHeight: 200,
+ text: settings.text
+ },
+ onPostRender: function () {
+ this.aria('describedby', this.items()[0]._id);
+ },
+ onClose: settings.onClose,
+ onCancel: function () {
+ callback(false);
+ }
+ }).renderTo(document.body).reflow();
+ },
+ alert: function (settings, callback) {
+ if (typeof settings === 'string') {
+ settings = { text: settings };
+ }
+ settings.callback = callback;
+ return MessageBox.msgBox(settings);
+ },
+ confirm: function (settings, callback) {
+ if (typeof settings === 'string') {
+ settings = { text: settings };
+ }
+ settings.callback = callback;
+ settings.buttons = MessageBox.OK_CANCEL;
+ return MessageBox.msgBox(settings);
+ }
+ }
+ });
+
+ function WindowManagerImpl (editor) {
+ var open$$1 = function (args, params, closeCallback) {
+ var win;
+ args.title = args.title || ' ';
+ args.url = args.url || args.file;
+ if (args.url) {
+ args.width = parseInt(args.width || 320, 10);
+ args.height = parseInt(args.height || 240, 10);
+ }
+ if (args.body) {
+ args.items = {
+ defaults: args.defaults,
+ type: args.bodyType || 'form',
+ items: args.body,
+ data: args.data,
+ callbacks: args.commands
+ };
+ }
+ if (!args.url && !args.buttons) {
+ args.buttons = [
+ {
+ text: 'Ok',
+ subtype: 'primary',
+ onclick: function () {
+ win.find('form')[0].submit();
+ }
+ },
+ {
+ text: 'Cancel',
+ onclick: function () {
+ win.close();
+ }
+ }
+ ];
+ }
+ win = new Window$$1(args);
+ win.on('close', function () {
+ closeCallback(win);
+ });
+ if (args.data) {
+ win.on('postRender', function () {
+ this.find('*').each(function (ctrl) {
+ var name$$1 = ctrl.name();
+ if (name$$1 in args.data) {
+ ctrl.value(args.data[name$$1]);
+ }
+ });
+ });
+ }
+ win.features = args || {};
+ win.params = params || {};
+ win = win.renderTo(document.body).reflow();
+ return win;
+ };
+ var alert$$1 = function (message, choiceCallback, closeCallback) {
+ var win;
+ win = MessageBox.alert(message, function () {
+ choiceCallback();
+ });
+ win.on('close', function () {
+ closeCallback(win);
+ });
+ return win;
+ };
+ var confirm$$1 = function (message, choiceCallback, closeCallback) {
+ var win;
+ win = MessageBox.confirm(message, function (state) {
+ choiceCallback(state);
+ });
+ win.on('close', function () {
+ closeCallback(win);
+ });
+ return win;
+ };
+ var close$$1 = function (window$$1) {
+ window$$1.close();
+ };
+ var getParams = function (window$$1) {
+ return window$$1.params;
+ };
+ var setParams = function (window$$1, params) {
+ window$$1.params = params;
+ };
+ return {
+ open: open$$1,
+ alert: alert$$1,
+ confirm: confirm$$1,
+ close: close$$1,
+ getParams: getParams,
+ setParams: setParams
+ };
+ }
+
+ var get = function (editor, panel) {
+ var renderUI = function () {
+ return $_b0wxh217tjjgwejyx.renderUI(editor, panel);
+ };
+ return {
+ renderUI: renderUI,
+ getNotificationManagerImpl: function () {
+ return NotificationManagerImpl(editor);
+ },
+ getWindowManagerImpl: function () {
+ return WindowManagerImpl(editor);
+ }
+ };
+ };
+ var $_7y4x3k17sjjgwejyw = { get: get };
+
+ var Global = typeof window !== 'undefined' ? window : Function('return this;')();
+
+ var path = function (parts, scope) {
+ var o = scope !== undefined && scope !== null ? scope : Global;
+ for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
+ o = o[parts[i]];
+ return o;
+ };
+ var resolve = function (p, scope) {
+ var parts = p.split('.');
+ return path(parts, scope);
+ };
+
+ var unsafe = function (name, scope) {
+ return resolve(name, scope);
+ };
+ var getOrDie = function (name, scope) {
+ var actual = unsafe(name, scope);
+ if (actual === undefined || actual === null)
+ throw name + ' not available on this browser';
+ return actual;
+ };
+ var $_8wnjhx19gjjgwek54 = { getOrDie: getOrDie };
+
+ function FileReader () {
+ var f = $_8wnjhx19gjjgwek54.getOrDie('FileReader');
+ return new f();
+ }
+
+ var global$12 = tinymce.util.Tools.resolve('tinymce.util.Promise');
+
+ var blobToBase64 = function (blob) {
+ return new global$12(function (resolve) {
+ var reader = new FileReader();
+ reader.onloadend = function () {
+ resolve(reader.result.split(',')[1]);
+ };
+ reader.readAsDataURL(blob);
+ });
+ };
+ var $_c292419ejjgwek4z = { blobToBase64: blobToBase64 };
+
+ var pickFile = function () {
+ return new global$12(function (resolve) {
+ var fileInput;
+ fileInput = document.createElement('input');
+ fileInput.type = 'file';
+ fileInput.style.position = 'fixed';
+ fileInput.style.left = 0;
+ fileInput.style.top = 0;
+ fileInput.style.opacity = 0.001;
+ document.body.appendChild(fileInput);
+ fileInput.onchange = function (e) {
+ resolve(Array.prototype.slice.call(e.target.files));
+ };
+ fileInput.click();
+ fileInput.parentNode.removeChild(fileInput);
+ });
+ };
+ var $_edjfwb19kjjgwek5a = { pickFile: pickFile };
+
+ var count$1 = 0;
+ var seed = function () {
+ var rnd = function () {
+ return Math.round(Math.random() * 4294967295).toString(36);
+ };
+ return 's' + Date.now().toString(36) + rnd() + rnd() + rnd();
+ };
+ var uuid = function (prefix) {
+ return prefix + count$1++ + seed();
+ };
+ var $_49gxzf19mjjgwek5f = { uuid: uuid };
+
+ var create$1 = function (dom, rng) {
+ var bookmark = {};
+ function setupEndPoint(start) {
+ var offsetNode, container, offset;
+ container = rng[start ? 'startContainer' : 'endContainer'];
+ offset = rng[start ? 'startOffset' : 'endOffset'];
+ if (container.nodeType === 1) {
+ offsetNode = dom.create('span', { 'data-mce-type': 'bookmark' });
+ if (container.hasChildNodes()) {
+ offset = Math.min(offset, container.childNodes.length - 1);
+ if (start) {
+ container.insertBefore(offsetNode, container.childNodes[offset]);
+ } else {
+ dom.insertAfter(offsetNode, container.childNodes[offset]);
+ }
+ } else {
+ container.appendChild(offsetNode);
+ }
+ container = offsetNode;
+ offset = 0;
+ }
+ bookmark[start ? 'startContainer' : 'endContainer'] = container;
+ bookmark[start ? 'startOffset' : 'endOffset'] = offset;
+ }
+ setupEndPoint(true);
+ if (!rng.collapsed) {
+ setupEndPoint();
+ }
+ return bookmark;
+ };
+ var resolve$1 = function (dom, bookmark) {
+ function restoreEndPoint(start) {
+ var container, offset, node;
+ function nodeIndex(container) {
+ var node = container.parentNode.firstChild, idx = 0;
+ while (node) {
+ if (node === container) {
+ return idx;
+ }
+ if (node.nodeType !== 1 || node.getAttribute('data-mce-type') !== 'bookmark') {
+ idx++;
+ }
+ node = node.nextSibling;
+ }
+ return -1;
+ }
+ container = node = bookmark[start ? 'startContainer' : 'endContainer'];
+ offset = bookmark[start ? 'startOffset' : 'endOffset'];
+ if (!container) {
+ return;
+ }
+ if (container.nodeType === 1) {
+ offset = nodeIndex(container);
+ container = container.parentNode;
+ dom.remove(node);
+ }
+ bookmark[start ? 'startContainer' : 'endContainer'] = container;
+ bookmark[start ? 'startOffset' : 'endOffset'] = offset;
+ }
+ restoreEndPoint(true);
+ restoreEndPoint();
+ var rng = dom.createRng();
+ rng.setStart(bookmark.startContainer, bookmark.startOffset);
+ if (bookmark.endContainer) {
+ rng.setEnd(bookmark.endContainer, bookmark.endOffset);
+ }
+ return rng;
+ };
+ var $_3b24e19ojjgwek5i = {
+ create: create$1,
+ resolve: resolve$1
+ };
+
+ var global$13 = tinymce.util.Tools.resolve('tinymce.dom.TreeWalker');
+
+ var global$14 = tinymce.util.Tools.resolve('tinymce.dom.RangeUtils');
+
+ var getSelectedElements = function (rootElm, startNode, endNode) {
+ var walker, node;
+ var elms = [];
+ walker = new global$13(startNode, rootElm);
+ for (node = startNode; node; node = walker.next()) {
+ if (node.nodeType === 1) {
+ elms.push(node);
+ }
+ if (node === endNode) {
+ break;
+ }
+ }
+ return elms;
+ };
+ var unwrapElements = function (editor, elms) {
+ var bookmark, dom, selection;
+ dom = editor.dom;
+ selection = editor.selection;
+ bookmark = $_3b24e19ojjgwek5i.create(dom, selection.getRng());
+ global$4.each(elms, function (elm) {
+ editor.dom.remove(elm, true);
+ });
+ selection.setRng($_3b24e19ojjgwek5i.resolve(dom, bookmark));
+ };
+ var isLink = function (elm) {
+ return elm.nodeName === 'A' && elm.hasAttribute('href');
+ };
+ var getParentAnchorOrSelf = function (dom, elm) {
+ var anchorElm = dom.getParent(elm, isLink);
+ return anchorElm ? anchorElm : elm;
+ };
+ var getSelectedAnchors = function (editor) {
+ var startElm, endElm, rootElm, anchorElms, selection, dom, rng;
+ selection = editor.selection;
+ dom = editor.dom;
+ rng = selection.getRng();
+ startElm = getParentAnchorOrSelf(dom, global$14.getNode(rng.startContainer, rng.startOffset));
+ endElm = global$14.getNode(rng.endContainer, rng.endOffset);
+ rootElm = editor.getBody();
+ anchorElms = global$4.grep(getSelectedElements(rootElm, startElm, endElm), isLink);
+ return anchorElms;
+ };
+ var unlinkSelection = function (editor) {
+ unwrapElements(editor, getSelectedAnchors(editor));
+ };
+ var $_aunbnv19njjgwek5g = { unlinkSelection: unlinkSelection };
+
+ var createTableHtml = function (cols, rows) {
+ var x, y, html;
+ html = '<table data-mce-id="mce" style="width: 100%">';
+ html += '<tbody>';
+ for (y = 0; y < rows; y++) {
+ html += '<tr>';
+ for (x = 0; x < cols; x++) {
+ html += '<td><br></td>';
+ }
+ html += '</tr>';
+ }
+ html += '</tbody>';
+ html += '</table>';
+ return html;
+ };
+ var getInsertedElement = function (editor) {
+ var elms = editor.dom.select('*[data-mce-id]');
+ return elms[0];
+ };
+ var insertTableHtml = function (editor, cols, rows) {
+ editor.undoManager.transact(function () {
+ var tableElm, cellElm;
+ editor.insertContent(createTableHtml(cols, rows));
+ tableElm = getInsertedElement(editor);
+ tableElm.removeAttribute('data-mce-id');
+ cellElm = editor.dom.select('td,th', tableElm);
+ editor.selection.setCursorLocation(cellElm[0], 0);
+ });
+ };
+ var insertTable = function (editor, cols, rows) {
+ editor.plugins.table ? editor.plugins.table.insertTable(cols, rows) : insertTableHtml(editor, cols, rows);
+ };
+ var formatBlock = function (editor, formatName) {
+ editor.execCommand('FormatBlock', false, formatName);
+ };
+ var insertBlob = function (editor, base64, blob) {
+ var blobCache, blobInfo;
+ blobCache = editor.editorUpload.blobCache;
+ blobInfo = blobCache.create($_49gxzf19mjjgwek5f.uuid('mceu'), blob, base64);
+ blobCache.add(blobInfo);
+ editor.insertContent(editor.dom.createHTML('img', { src: blobInfo.blobUri() }));
+ };
+ var collapseSelectionToEnd = function (editor) {
+ editor.selection.collapse(false);
+ };
+ var unlink = function (editor) {
+ editor.focus();
+ $_aunbnv19njjgwek5g.unlinkSelection(editor);
+ collapseSelectionToEnd(editor);
+ };
+ var changeHref = function (editor, elm, url) {
+ editor.focus();
+ editor.dom.setAttrib(elm, 'href', url);
+ collapseSelectionToEnd(editor);
+ };
+ var insertLink = function (editor, url) {
+ editor.execCommand('mceInsertLink', false, { href: url });
+ collapseSelectionToEnd(editor);
+ };
+ var updateOrInsertLink = function (editor, url) {
+ var elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');
+ elm ? changeHref(editor, elm, url) : insertLink(editor, url);
+ };
+ var createLink = function (editor, url) {
+ url.trim().length === 0 ? unlink(editor) : updateOrInsertLink(editor, url);
+ };
+ var $_elxm3u19ljjgwek5d = {
+ insertTable: insertTable,
+ formatBlock: formatBlock,
+ insertBlob: insertBlob,
+ createLink: createLink,
+ unlink: unlink
+ };
+
+ var addHeaderButtons = function (editor) {
+ var formatBlock = function (name) {
+ return function () {
+ $_elxm3u19ljjgwek5d.formatBlock(editor, name);
+ };
+ };
+ for (var i = 1; i < 6; i++) {
+ var name = 'h' + i;
+ editor.addButton(name, {
+ text: name.toUpperCase(),
+ tooltip: 'Heading ' + i,
+ stateSelector: name,
+ onclick: formatBlock(name),
+ onPostRender: function () {
+ var span = this.getEl().firstChild.firstChild;
+ span.style.fontWeight = 'bold';
+ }
+ });
+ }
+ };
+ var addToEditor = function (editor, panel) {
+ editor.addButton('quicklink', {
+ icon: 'link',
+ tooltip: 'Insert/Edit link',
+ stateSelector: 'a[href]',
+ onclick: function () {
+ panel.showForm(editor, 'quicklink');
+ }
+ });
+ editor.addButton('quickimage', {
+ icon: 'image',
+ tooltip: 'Insert image',
+ onclick: function () {
+ $_edjfwb19kjjgwek5a.pickFile().then(function (files) {
+ var blob = files[0];
+ $_c292419ejjgwek4z.blobToBase64(blob).then(function (base64) {
+ $_elxm3u19ljjgwek5d.insertBlob(editor, base64, blob);
+ });
+ });
+ }
+ });
+ editor.addButton('quicktable', {
+ icon: 'table',
+ tooltip: 'Insert table',
+ onclick: function () {
+ panel.hide();
+ $_elxm3u19ljjgwek5d.insertTable(editor, 2, 2);
+ }
+ });
+ addHeaderButtons(editor);
+ };
+ var $_epdxt419djjgwek4l = { addToEditor: addToEditor };
+
+ var getUiContainerDelta$1 = function () {
+ var uiContainer = global$1.container;
+ if (uiContainer && global$2.DOM.getStyle(uiContainer, 'position', true) !== 'static') {
+ var containerPos = global$2.DOM.getPos(uiContainer);
+ var dx = containerPos.x - uiContainer.scrollLeft;
+ var dy = containerPos.y - uiContainer.scrollTop;
+ return Option.some({
+ x: dx,
+ y: dy
+ });
+ } else {
+ return Option.none();
+ }
+ };
+ var $_9hbv4x19sjjgwek5q = { getUiContainerDelta: getUiContainerDelta$1 };
+
+ var isDomainLike = function (href) {
+ return /^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(href.trim());
+ };
+ var isAbsolute = function (href) {
+ return /^https?:\/\//.test(href.trim());
+ };
+ var $_5y05uk19ujjgwek5w = {
+ isDomainLike: isDomainLike,
+ isAbsolute: isAbsolute
+ };
+
+ var focusFirstTextBox = function (form) {
+ form.find('textbox').eq(0).each(function (ctrl) {
+ ctrl.focus();
+ });
+ };
+ var createForm = function (name, spec) {
+ var form = global$11.create(global$4.extend({
+ type: 'form',
+ layout: 'flex',
+ direction: 'row',
+ padding: 5,
+ name: name,
+ spacing: 3
+ }, spec));
+ form.on('show', function () {
+ focusFirstTextBox(form);
+ });
+ return form;
+ };
+ var toggleVisibility = function (ctrl, state) {
+ return state ? ctrl.show() : ctrl.hide();
+ };
+ var askAboutPrefix = function (editor, href) {
+ return new global$12(function (resolve) {
+ editor.windowManager.confirm('The URL you entered seems to be an external link. Do you want to add the required http:// prefix?', function (result) {
+ var output = result === true ? 'http://' + href : href;
+ resolve(output);
+ });
+ });
+ };
+ var convertLinkToAbsolute = function (editor, href) {
+ return !$_5y05uk19ujjgwek5w.isAbsolute(href) && $_5y05uk19ujjgwek5w.isDomainLike(href) ? askAboutPrefix(editor, href) : global$12.resolve(href);
+ };
+ var createQuickLinkForm = function (editor, hide) {
+ var attachState = {};
+ var unlink = function () {
+ editor.focus();
+ $_elxm3u19ljjgwek5d.unlink(editor);
+ hide();
+ };
+ var onChangeHandler = function (e) {
+ var meta = e.meta;
+ if (meta && meta.attach) {
+ attachState = {
+ href: this.value(),
+ attach: meta.attach
+ };
+ }
+ };
+ var onShowHandler = function (e) {
+ if (e.control === this) {
+ var elm = void 0, linkurl = '';
+ elm = editor.dom.getParent(editor.selection.getStart(), 'a[href]');
+ if (elm) {
+ linkurl = editor.dom.getAttrib(elm, 'href');
+ }
+ this.fromJSON({ linkurl: linkurl });
+ toggleVisibility(this.find('#unlink'), elm);
+ this.find('#linkurl')[0].focus();
+ }
+ };
+ return createForm('quicklink', {
+ items: [
+ {
+ type: 'button',
+ name: 'unlink',
+ icon: 'unlink',
+ onclick: unlink,
+ tooltip: 'Remove link'
+ },
+ {
+ type: 'filepicker',
+ name: 'linkurl',
+ placeholder: 'Paste or type a link',
+ filetype: 'file',
+ onchange: onChangeHandler
+ },
+ {
+ type: 'button',
+ icon: 'checkmark',
+ subtype: 'primary',
+ tooltip: 'Ok',
+ onclick: 'submit'
+ }
+ ],
+ onshow: onShowHandler,
+ onsubmit: function (e) {
+ convertLinkToAbsolute(editor, e.data.linkurl).then(function (url) {
+ editor.undoManager.transact(function () {
+ if (url === attachState.href) {
+ attachState.attach();
+ attachState = {};
+ }
+ $_elxm3u19ljjgwek5d.createLink(editor, url);
+ });
+ hide();
+ });
+ }
+ });
+ };
+ var $_amewps19tjjgwek5t = { createQuickLinkForm: createQuickLinkForm };
+
+ var getSelectorStateResult = function (itemName, item) {
+ var result = function (selector, handler) {
+ return {
+ selector: selector,
+ handler: handler
+ };
+ };
+ var activeHandler = function (state) {
+ item.active(state);
+ };
+ var disabledHandler = function (state) {
+ item.disabled(state);
+ };
+ if (item.settings.stateSelector) {
+ return result(item.settings.stateSelector, activeHandler);
+ }
+ if (item.settings.disabledStateSelector) {
+ return result(item.settings.disabledStateSelector, disabledHandler);
+ }
+ return null;
+ };
+ var bindSelectorChanged = function (editor, itemName, item) {
+ return function () {
+ var result = getSelectorStateResult(itemName, item);
+ if (result !== null) {
+ editor.selection.selectorChanged(result.selector, result.handler);
+ }
+ };
+ };
+ var itemsToArray$1 = function (items) {
+ if ($_e4npq318ajjgwejzo.isArray(items)) {
+ return items;
+ } else if ($_e4npq318ajjgwejzo.isString(items)) {
+ return items.split(/[ ,]/);
+ }
+ return [];
+ };
+ var create$2 = function (editor, name, items) {
+ var toolbarItems = [];
+ var buttonGroup;
+ if (!items) {
+ return;
+ }
+ global$4.each(itemsToArray$1(items), function (item) {
+ if (item === '|') {
+ buttonGroup = null;
+ } else {
+ if (editor.buttons[item]) {
+ if (!buttonGroup) {
+ buttonGroup = {
+ type: 'buttongroup',
+ items: []
+ };
+ toolbarItems.push(buttonGroup);
+ }
+ var button = editor.buttons[item];
+ if ($_e4npq318ajjgwejzo.isFunction(button)) {
+ button = button();
+ }
+ button.type = button.type || 'button';
+ button = global$11.create(button);
+ button.on('postRender', bindSelectorChanged(editor, item, button));
+ buttonGroup.items.push(button);
+ }
+ }
+ });
+ return global$11.create({
+ type: 'toolbar',
+ layout: 'flow',
+ name: name,
+ items: toolbarItems
+ });
+ };
+ var $_797pa819vjjgwek5x = { create: create$2 };
+
+ var create$3 = function () {
+ var panel, currentRect;
+ var createToolbars = function (editor, toolbars) {
+ return global$4.map(toolbars, function (toolbar) {
+ return $_797pa819vjjgwek5x.create(editor, toolbar.id, toolbar.items);
+ });
+ };
+ var hasToolbarItems = function (toolbar) {
+ return toolbar.items().length > 0;
+ };
+ var create = function (editor, toolbars) {
+ var items = createToolbars(editor, toolbars).concat([
+ $_797pa819vjjgwek5x.create(editor, 'text', $_4j2h42187jjgwejzk.getTextSelectionToolbarItems(editor)),
+ $_797pa819vjjgwek5x.create(editor, 'insert', $_4j2h42187jjgwejzk.getInsertToolbarItems(editor)),
+ $_amewps19tjjgwek5t.createQuickLinkForm(editor, hide)
+ ]);
+ return global$11.create({
+ type: 'floatpanel',
+ role: 'dialog',
+ classes: 'tinymce tinymce-inline arrow',
+ ariaLabel: 'Inline toolbar',
+ layout: 'flex',
+ direction: 'column',
+ align: 'stretch',
+ autohide: false,
+ autofix: true,
+ fixed: true,
+ border: 1,
+ items: global$4.grep(items, hasToolbarItems),
+ oncancel: function () {
+ editor.focus();
+ }
+ });
+ };
+ var showPanel = function (panel) {
+ if (panel) {
+ panel.show();
+ }
+ };
+ var movePanelTo = function (panel, pos) {
+ panel.moveTo(pos.x, pos.y);
+ };
+ var togglePositionClass = function (panel, relPos) {
+ relPos = relPos ? relPos.substr(0, 2) : '';
+ global$4.each({
+ t: 'down',
+ b: 'up',
+ c: 'center'
+ }, function (cls, pos) {
+ panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));
+ });
+ if (relPos === 'cr') {
+ panel.classes.toggle('arrow-left', true);
+ panel.classes.toggle('arrow-right', false);
+ } else if (relPos === 'cl') {
+ panel.classes.toggle('arrow-left', true);
+ panel.classes.toggle('arrow-right', true);
+ } else {
+ global$4.each({
+ l: 'left',
+ r: 'right'
+ }, function (cls, pos) {
+ panel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1));
+ });
+ }
+ };
+ var showToolbar = function (panel, id) {
+ var toolbars = panel.items().filter('#' + id);
+ if (toolbars.length > 0) {
+ toolbars[0].show();
+ panel.reflow();
+ return true;
+ }
+ return false;
+ };
+ var repositionPanelAt = function (panel, id, editor, targetRect) {
+ var contentAreaRect, panelRect, result, userConstainHandler;
+ userConstainHandler = $_4j2h42187jjgwejzk.getPositionHandler(editor);
+ contentAreaRect = $_51qgo2180jjgwejzb.getContentAreaRect(editor);
+ panelRect = global$2.DOM.getRect(panel.getEl());
+ if (id === 'insert') {
+ result = $_gir42l18bjjgwejzq.calcInsert(targetRect, contentAreaRect, panelRect);
+ } else {
+ result = $_gir42l18bjjgwejzq.calc(targetRect, contentAreaRect, panelRect);
+ }
+ if (result) {
+ var delta = $_9hbv4x19sjjgwek5q.getUiContainerDelta().getOr({
+ x: 0,
+ y: 0
+ });
+ var transposedPanelRect = {
+ x: result.rect.x - delta.x,
+ y: result.rect.y - delta.y,
+ w: result.rect.w,
+ h: result.rect.h
+ };
+ currentRect = targetRect;
+ movePanelTo(panel, $_gir42l18bjjgwejzq.userConstrain(userConstainHandler, targetRect, contentAreaRect, transposedPanelRect));
+ togglePositionClass(panel, result.position);
+ return true;
+ } else {
+ return false;
+ }
+ };
+ var showPanelAt = function (panel, id, editor, targetRect) {
+ showPanel(panel);
+ panel.items().hide();
+ if (!showToolbar(panel, id)) {
+ hide();
+ return;
+ }
+ if (repositionPanelAt(panel, id, editor, targetRect) === false) {
+ hide();
+ }
+ };
+ var hasFormVisible = function () {
+ return panel.items().filter('form:visible').length > 0;
+ };
+ var showForm = function (editor, id) {
+ if (panel) {
+ panel.items().hide();
+ if (!showToolbar(panel, id)) {
+ hide();
+ return;
+ }
+ var contentAreaRect = void 0, panelRect = void 0, result = void 0, userConstainHandler = void 0;
+ showPanel(panel);
+ panel.items().hide();
+ showToolbar(panel, id);
+ userConstainHandler = $_4j2h42187jjgwejzk.getPositionHandler(editor);
+ contentAreaRect = $_51qgo2180jjgwejzb.getContentAreaRect(editor);
+ panelRect = global$2.DOM.getRect(panel.getEl());
+ result = $_gir42l18bjjgwejzq.calc(currentRect, contentAreaRect, panelRect);
+ if (result) {
+ panelRect = result.rect;
+ movePanelTo(panel, $_gir42l18bjjgwejzq.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));
+ togglePositionClass(panel, result.position);
+ }
+ }
+ };
+ var show = function (editor, id, targetRect, toolbars) {
+ if (!panel) {
+ $_77u64d186jjgwejzi.fireBeforeRenderUI(editor);
+ panel = create(editor, toolbars);
+ panel.renderTo().reflow().moveTo(targetRect.x, targetRect.y);
+ editor.nodeChanged();
+ }
+ showPanelAt(panel, id, editor, targetRect);
+ };
+ var reposition = function (editor, id, targetRect) {
+ if (panel) {
+ repositionPanelAt(panel, id, editor, targetRect);
+ }
+ };
+ var hide = function () {
+ if (panel) {
+ panel.hide();
+ }
+ };
+ var focus = function () {
+ if (panel) {
+ panel.find('toolbar:visible').eq(0).each(function (item) {
+ item.focus(true);
+ });
+ }
+ };
+ var remove = function () {
+ if (panel) {
+ panel.remove();
+ panel = null;
+ }
+ };
+ var inForm = function () {
+ return panel && panel.visible() && hasFormVisible();
+ };
+ return {
+ show: show,
+ showForm: showForm,
+ reposition: reposition,
+ inForm: inForm,
+ hide: hide,
+ focus: focus,
+ remove: remove
+ };
+ };
+
+ var Layout$1 = global$8.extend({
+ Defaults: {
+ firstControlClass: 'first',
+ lastControlClass: 'last'
+ },
+ init: function (settings) {
+ this.settings = global$4.extend({}, this.Defaults, settings);
+ },
+ preRender: function (container) {
+ container.bodyClasses.add(this.settings.containerClass);
+ },
+ applyClasses: function (items) {
+ var self = this;
+ var settings = self.settings;
+ var firstClass, lastClass, firstItem, lastItem;
+ firstClass = settings.firstControlClass;
+ lastClass = settings.lastControlClass;
+ items.each(function (item) {
+ item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);
+ if (item.visible()) {
+ if (!firstItem) {
+ firstItem = item;
+ }
+ lastItem = item;
+ }
+ });
+ if (firstItem) {
+ firstItem.classes.add(firstClass);
+ }
+ if (lastItem) {
+ lastItem.classes.add(lastClass);
+ }
+ },
+ renderHtml: function (container) {
+ var self = this;
+ var html = '';
+ self.applyClasses(container.items());
+ container.items().each(function (item) {
+ html += item.renderHtml();
+ });
+ return html;
+ },
+ recalc: function () {
+ },
+ postRender: function () {
+ },
+ isNative: function () {
+ return false;
+ }
+ });
+
+ var AbsoluteLayout = Layout$1.extend({
+ Defaults: {
+ containerClass: 'abs-layout',
+ controlClass: 'abs-layout-item'
+ },
+ recalc: function (container) {
+ container.items().filter(':visible').each(function (ctrl) {
+ var settings = ctrl.settings;
+ ctrl.layoutRect({
+ x: settings.x,
+ y: settings.y,
+ w: settings.w,
+ h: settings.h
+ });
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ });
+ },
+ renderHtml: function (container) {
+ return '<div id="' + container._id + '-absend" class="' + container.classPrefix + 'abs-end"></div>' + this._super(container);
+ }
+ });
+
+ var Button = Widget.extend({
+ Defaults: {
+ classes: 'widget btn',
+ role: 'button'
+ },
+ init: function (settings) {
+ var self$$1 = this;
+ var size;
+ self$$1._super(settings);
+ settings = self$$1.settings;
+ size = self$$1.settings.size;
+ self$$1.on('click mousedown', function (e) {
+ e.preventDefault();
+ });
+ self$$1.on('touchstart', function (e) {
+ self$$1.fire('click', e);
+ e.preventDefault();
+ });
+ if (settings.subtype) {
+ self$$1.classes.add(settings.subtype);
+ }
+ if (size) {
+ self$$1.classes.add('btn-' + size);
+ }
+ if (settings.icon) {
+ self$$1.icon(settings.icon);
+ }
+ },
+ icon: function (icon) {
+ if (!arguments.length) {
+ return this.state.get('icon');
+ }
+ this.state.set('icon', icon);
+ return this;
+ },
+ repaint: function () {
+ var btnElm = this.getEl().firstChild;
+ var btnStyle;
+ if (btnElm) {
+ btnStyle = btnElm.style;
+ btnStyle.width = btnStyle.height = '100%';
+ }
+ this._super();
+ },
+ renderHtml: function () {
+ var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix;
+ var icon = self$$1.state.get('icon'), image;
+ var text = self$$1.state.get('text');
+ var textHtml = '';
+ var ariaPressed;
+ var settings = self$$1.settings;
+ image = settings.image;
+ if (image) {
+ icon = 'none';
+ if (typeof image !== 'string') {
+ image = window.getSelection ? image[0] : image[1];
+ }
+ image = ' style="background-image: url(\'' + image + '\')"';
+ } else {
+ image = '';
+ }
+ if (text) {
+ self$$1.classes.add('btn-has-text');
+ textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>';
+ }
+ icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
+ ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
+ return '<div id="' + id + '" class="' + self$$1.classes + '" tabindex="-1"' + ariaPressed + '>' + '<button id="' + id + '-button" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '</div>';
+ },
+ bindStates: function () {
+ var self$$1 = this, $ = self$$1.$, textCls = self$$1.classPrefix + 'txt';
+ function setButtonText(text) {
+ var $span = $('span.' + textCls, self$$1.getEl());
+ if (text) {
+ if (!$span[0]) {
+ $('button:first', self$$1.getEl()).append('<span class="' + textCls + '"></span>');
+ $span = $('span.' + textCls, self$$1.getEl());
+ }
+ $span.html(self$$1.encode(text));
+ } else {
+ $span.remove();
+ }
+ self$$1.classes.toggle('btn-has-text', !!text);
+ }
+ self$$1.state.on('change:text', function (e) {
+ setButtonText(e.value);
+ });
+ self$$1.state.on('change:icon', function (e) {
+ var icon = e.value;
+ var prefix = self$$1.classPrefix;
+ self$$1.settings.icon = icon;
+ icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : '';
+ var btnElm = self$$1.getEl().firstChild;
+ var iconElm = btnElm.getElementsByTagName('i')[0];
+ if (icon) {
+ if (!iconElm || iconElm !== btnElm.firstChild) {
+ iconElm = document.createElement('i');
+ btnElm.insertBefore(iconElm, btnElm.firstChild);
+ }
+ iconElm.className = icon;
+ } else if (iconElm) {
+ btnElm.removeChild(iconElm);
+ }
+ setButtonText(self$$1.state.get('text'));
+ });
+ return self$$1._super();
+ }
+ });
+
+ var BrowseButton = Button.extend({
+ init: function (settings) {
+ var self = this;
+ settings = global$4.extend({
+ text: 'Browse...',
+ multiple: false,
+ accept: null
+ }, settings);
+ self._super(settings);
+ self.classes.add('browsebutton');
+ if (settings.multiple) {
+ self.classes.add('multiple');
+ }
+ },
+ postRender: function () {
+ var self = this;
+ var input = funcs.create('input', {
+ type: 'file',
+ id: self._id + '-browse',
+ accept: self.settings.accept
+ });
+ self._super();
+ global$7(input).on('change', function (e) {
+ var files = e.target.files;
+ self.value = function () {
+ if (!files.length) {
+ return null;
+ } else if (self.settings.multiple) {
+ return files;
+ } else {
+ return files[0];
+ }
+ };
+ e.preventDefault();
+ if (files.length) {
+ self.fire('change', e);
+ }
+ });
+ global$7(input).on('click', function (e) {
+ e.stopPropagation();
+ });
+ global$7(self.getEl('button')).on('click', function (e) {
+ e.stopPropagation();
+ input.click();
+ });
+ self.getEl().appendChild(input);
+ },
+ remove: function () {
+ global$7(this.getEl('button')).off();
+ global$7(this.getEl('input')).off();
+ this._super();
+ }
+ });
+
+ var ButtonGroup = Container.extend({
+ Defaults: {
+ defaultType: 'button',
+ role: 'group'
+ },
+ renderHtml: function () {
+ var self = this, layout = self._layout;
+ self.classes.add('btn-group');
+ self.preRender();
+ layout.preRender(self);
+ return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
+ }
+ });
+
+ var Checkbox = Widget.extend({
+ Defaults: {
+ classes: 'checkbox',
+ role: 'checkbox',
+ checked: false
+ },
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ self$$1.on('click mousedown', function (e) {
+ e.preventDefault();
+ });
+ self$$1.on('click', function (e) {
+ e.preventDefault();
+ if (!self$$1.disabled()) {
+ self$$1.checked(!self$$1.checked());
+ }
+ });
+ self$$1.checked(self$$1.settings.checked);
+ },
+ checked: function (state) {
+ if (!arguments.length) {
+ return this.state.get('checked');
+ }
+ this.state.set('checked', state);
+ return this;
+ },
+ value: function (state) {
+ if (!arguments.length) {
+ return this.checked();
+ }
+ return this.checked(state);
+ },
+ renderHtml: function () {
+ var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix;
+ return '<div id="' + id + '" class="' + self$$1.classes + '" unselectable="on" aria-labelledby="' + id + '-al" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-checkbox"></i>' + '<span id="' + id + '-al" class="' + prefix + 'label">' + self$$1.encode(self$$1.state.get('text')) + '</span>' + '</div>';
+ },
+ bindStates: function () {
+ var self$$1 = this;
+ function checked(state) {
+ self$$1.classes.toggle('checked', state);
+ self$$1.aria('checked', state);
+ }
+ self$$1.state.on('change:text', function (e) {
+ self$$1.getEl('al').firstChild.data = self$$1.translate(e.value);
+ });
+ self$$1.state.on('change:checked change:value', function (e) {
+ self$$1.fire('change');
+ checked(e.value);
+ });
+ self$$1.state.on('change:icon', function (e) {
+ var icon = e.value;
+ var prefix = self$$1.classPrefix;
+ if (typeof icon === 'undefined') {
+ return self$$1.settings.icon;
+ }
+ self$$1.settings.icon = icon;
+ icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : '';
+ var btnElm = self$$1.getEl().firstChild;
+ var iconElm = btnElm.getElementsByTagName('i')[0];
+ if (icon) {
+ if (!iconElm || iconElm !== btnElm.firstChild) {
+ iconElm = document.createElement('i');
+ btnElm.insertBefore(iconElm, btnElm.firstChild);
+ }
+ iconElm.className = icon;
+ } else if (iconElm) {
+ btnElm.removeChild(iconElm);
+ }
+ });
+ if (self$$1.state.get('checked')) {
+ checked(true);
+ }
+ return self$$1._super();
+ }
+ });
+
+ var global$15 = tinymce.util.Tools.resolve('tinymce.util.VK');
+
+ var ComboBox = Widget.extend({
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ settings = self$$1.settings;
+ self$$1.classes.add('combobox');
+ self$$1.subinput = true;
+ self$$1.ariaTarget = 'inp';
+ settings.menu = settings.menu || settings.values;
+ if (settings.menu) {
+ settings.icon = 'caret';
+ }
+ self$$1.on('click', function (e) {
+ var elm = e.target;
+ var root = self$$1.getEl();
+ if (!global$7.contains(root, elm) && elm !== root) {
+ return;
+ }
+ while (elm && elm !== root) {
+ if (elm.id && elm.id.indexOf('-open') !== -1) {
+ self$$1.fire('action');
+ if (settings.menu) {
+ self$$1.showMenu();
+ if (e.aria) {
+ self$$1.menu.items()[0].focus();
+ }
+ }
+ }
+ elm = elm.parentNode;
+ }
+ });
+ self$$1.on('keydown', function (e) {
+ var rootControl;
+ if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {
+ e.preventDefault();
+ self$$1.parents().reverse().each(function (ctrl) {
+ if (ctrl.toJSON) {
+ rootControl = ctrl;
+ return false;
+ }
+ });
+ self$$1.fire('submit', { data: rootControl.toJSON() });
+ }
+ });
+ self$$1.on('keyup', function (e) {
+ if (e.target.nodeName === 'INPUT') {
+ var oldValue = self$$1.state.get('value');
+ var newValue = e.target.value;
+ if (newValue !== oldValue) {
+ self$$1.state.set('value', newValue);
+ self$$1.fire('autocomplete', e);
+ }
+ }
+ });
+ self$$1.on('mouseover', function (e) {
+ var tooltip = self$$1.tooltip().moveTo(-65535);
+ if (self$$1.statusLevel() && e.target.className.indexOf(self$$1.classPrefix + 'status') !== -1) {
+ var statusMessage = self$$1.statusMessage() || 'Ok';
+ var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [
+ 'bc-tc',
+ 'bc-tl',
+ 'bc-tr'
+ ]);
+ tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
+ tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
+ tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
+ tooltip.moveRel(e.target, rel);
+ }
+ });
+ },
+ statusLevel: function (value) {
+ if (arguments.length > 0) {
+ this.state.set('statusLevel', value);
+ }
+ return this.state.get('statusLevel');
+ },
+ statusMessage: function (value) {
+ if (arguments.length > 0) {
+ this.state.set('statusMessage', value);
+ }
+ return this.state.get('statusMessage');
+ },
+ showMenu: function () {
+ var self$$1 = this;
+ var settings = self$$1.settings;
+ var menu;
+ if (!self$$1.menu) {
+ menu = settings.menu || [];
+ if (menu.length) {
+ menu = {
+ type: 'menu',
+ items: menu
+ };
+ } else {
+ menu.type = menu.type || 'menu';
+ }
+ self$$1.menu = global$11.create(menu).parent(self$$1).renderTo(self$$1.getContainerElm());
+ self$$1.fire('createmenu');
+ self$$1.menu.reflow();
+ self$$1.menu.on('cancel', function (e) {
+ if (e.control === self$$1.menu) {
+ self$$1.focus();
+ }
+ });
+ self$$1.menu.on('show hide', function (e) {
+ e.control.items().each(function (ctrl) {
+ ctrl.active(ctrl.value() === self$$1.value());
+ });
+ }).fire('show');
+ self$$1.menu.on('select', function (e) {
+ self$$1.value(e.control.value());
+ });
+ self$$1.on('focusin', function (e) {
+ if (e.target.tagName.toUpperCase() === 'INPUT') {
+ self$$1.menu.hide();
+ }
+ });
+ self$$1.aria('expanded', true);
+ }
+ self$$1.menu.show();
+ self$$1.menu.layoutRect({ w: self$$1.layoutRect().w });
+ self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [
+ 'br-tr',
+ 'tr-br'
+ ] : [
+ 'bl-tl',
+ 'tl-bl'
+ ]);
+ },
+ focus: function () {
+ this.getEl('inp').focus();
+ },
+ repaint: function () {
+ var self$$1 = this, elm = self$$1.getEl(), openElm = self$$1.getEl('open'), rect = self$$1.layoutRect();
+ var width, lineHeight, innerPadding = 0;
+ var inputElm = elm.firstChild;
+ if (self$$1.statusLevel() && self$$1.statusLevel() !== 'none') {
+ innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);
+ }
+ if (openElm) {
+ width = rect.w - funcs.getSize(openElm).width - 10;
+ } else {
+ width = rect.w - 10;
+ }
+ var doc = document;
+ if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
+ lineHeight = self$$1.layoutRect().h - 2 + 'px';
+ }
+ global$7(inputElm).css({
+ width: width - innerPadding,
+ lineHeight: lineHeight
+ });
+ self$$1._super();
+ return self$$1;
+ },
+ postRender: function () {
+ var self$$1 = this;
+ global$7(this.getEl('inp')).on('change', function (e) {
+ self$$1.state.set('value', e.target.value);
+ self$$1.fire('change', e);
+ });
+ return self$$1._super();
+ },
+ renderHtml: function () {
+ var self$$1 = this, id = self$$1._id, settings = self$$1.settings, prefix = self$$1.classPrefix;
+ var value = self$$1.state.get('value') || '';
+ var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';
+ if ('spellcheck' in settings) {
+ extraAttrs += ' spellcheck="' + settings.spellcheck + '"';
+ }
+ if (settings.maxLength) {
+ extraAttrs += ' maxlength="' + settings.maxLength + '"';
+ }
+ if (settings.size) {
+ extraAttrs += ' size="' + settings.size + '"';
+ }
+ if (settings.subtype) {
+ extraAttrs += ' type="' + settings.subtype + '"';
+ }
+ statusHtml = '<i id="' + id + '-status" class="mce-status mce-ico" style="display: none"></i>';
+ if (self$$1.disabled()) {
+ extraAttrs += ' disabled="disabled"';
+ }
+ icon = settings.icon;
+ if (icon && icon !== 'caret') {
+ icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;
+ }
+ text = self$$1.state.get('text');
+ if (icon || text) {
+ openBtnHtml = '<div id="' + id + '-open" class="' + prefix + 'btn ' + prefix + 'open" tabIndex="-1" role="button">' + '<button id="' + id + '-action" type="button" hidefocus="1" tabindex="-1">' + (icon !== 'caret' ? '<i class="' + icon + '"></i>' : '<i class="' + prefix + 'caret"></i>') + (text ? (icon ? ' ' : '') + text : '') + '</button>' + '</div>';
+ self$$1.classes.add('has-open');
+ }
+ return '<div id="' + id + '" class="' + self$$1.classes + '">' + '<input id="' + id + '-inp" class="' + prefix + 'textbox" value="' + self$$1.encode(value, false) + '" hidefocus="1"' + extraAttrs + ' placeholder="' + self$$1.encode(settings.placeholder) + '" />' + statusHtml + openBtnHtml + '</div>';
+ },
+ value: function (value) {
+ if (arguments.length) {
+ this.state.set('value', value);
+ return this;
+ }
+ if (this.state.get('rendered')) {
+ this.state.set('value', this.getEl('inp').value);
+ }
+ return this.state.get('value');
+ },
+ showAutoComplete: function (items, term) {
+ var self$$1 = this;
+ if (items.length === 0) {
+ self$$1.hideMenu();
+ return;
+ }
+ var insert = function (value, title) {
+ return function () {
+ self$$1.fire('selectitem', {
+ title: title,
+ value: value
+ });
+ };
+ };
+ if (self$$1.menu) {
+ self$$1.menu.items().remove();
+ } else {
+ self$$1.menu = global$11.create({
+ type: 'menu',
+ classes: 'combobox-menu',
+ layout: 'flow'
+ }).parent(self$$1).renderTo();
+ }
+ global$4.each(items, function (item) {
+ self$$1.menu.add({
+ text: item.title,
+ url: item.previewUrl,
+ match: term,
+ classes: 'menu-item-ellipsis',
+ onclick: insert(item.value, item.title)
+ });
+ });
+ self$$1.menu.renderNew();
+ self$$1.hideMenu();
+ self$$1.menu.on('cancel', function (e) {
+ if (e.control.parent() === self$$1.menu) {
+ e.stopPropagation();
+ self$$1.focus();
+ self$$1.hideMenu();
+ }
+ });
+ self$$1.menu.on('select', function () {
+ self$$1.focus();
+ });
+ var maxW = self$$1.layoutRect().w;
+ self$$1.menu.layoutRect({
+ w: maxW,
+ minW: 0,
+ maxW: maxW
+ });
+ self$$1.menu.repaint();
+ self$$1.menu.reflow();
+ self$$1.menu.show();
+ self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [
+ 'br-tr',
+ 'tr-br'
+ ] : [
+ 'bl-tl',
+ 'tl-bl'
+ ]);
+ },
+ hideMenu: function () {
+ if (this.menu) {
+ this.menu.hide();
+ }
+ },
+ bindStates: function () {
+ var self$$1 = this;
+ self$$1.state.on('change:value', function (e) {
+ if (self$$1.getEl('inp').value !== e.value) {
+ self$$1.getEl('inp').value = e.value;
+ }
+ });
+ self$$1.state.on('change:disabled', function (e) {
+ self$$1.getEl('inp').disabled = e.value;
+ });
+ self$$1.state.on('change:statusLevel', function (e) {
+ var statusIconElm = self$$1.getEl('status');
+ var prefix = self$$1.classPrefix, value = e.value;
+ funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');
+ funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');
+ funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');
+ funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');
+ self$$1.classes.toggle('has-status', value !== 'none');
+ self$$1.repaint();
+ });
+ funcs.on(self$$1.getEl('status'), 'mouseleave', function () {
+ self$$1.tooltip().hide();
+ });
+ self$$1.on('cancel', function (e) {
+ if (self$$1.menu && self$$1.menu.visible()) {
+ e.stopPropagation();
+ self$$1.hideMenu();
+ }
+ });
+ var focusIdx = function (idx, menu) {
+ if (menu && menu.items().length > 0) {
+ menu.items().eq(idx)[0].focus();
+ }
+ };
+ self$$1.on('keydown', function (e) {
+ var keyCode = e.keyCode;
+ if (e.target.nodeName === 'INPUT') {
+ if (keyCode === global$15.DOWN) {
+ e.preventDefault();
+ self$$1.fire('autocomplete');
+ focusIdx(0, self$$1.menu);
+ } else if (keyCode === global$15.UP) {
+ e.preventDefault();
+ focusIdx(-1, self$$1.menu);
+ }
+ }
+ });
+ return self$$1._super();
+ },
+ remove: function () {
+ global$7(this.getEl('inp')).off();
+ if (this.menu) {
+ this.menu.remove();
+ }
+ this._super();
+ }
+ });
+
+ var ColorBox = ComboBox.extend({
+ init: function (settings) {
+ var self = this;
+ settings.spellcheck = false;
+ if (settings.onaction) {
+ settings.icon = 'none';
+ }
+ self._super(settings);
+ self.classes.add('colorbox');
+ self.on('change keyup postrender', function () {
+ self.repaintColor(self.value());
+ });
+ },
+ repaintColor: function (value) {
+ var openElm = this.getEl('open');
+ var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;
+ if (elm) {
+ try {
+ elm.style.background = value;
+ } catch (ex) {
+ }
+ }
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:value', function (e) {
+ if (self.state.get('rendered')) {
+ self.repaintColor(e.value);
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var PanelButton = Button.extend({
+ showPanel: function () {
+ var self = this, settings = self.settings;
+ self.classes.add('opened');
+ if (!self.panel) {
+ var panelSettings = settings.panel;
+ if (panelSettings.type) {
+ panelSettings = {
+ layout: 'grid',
+ items: panelSettings
+ };
+ }
+ panelSettings.role = panelSettings.role || 'dialog';
+ panelSettings.popover = true;
+ panelSettings.autohide = true;
+ panelSettings.ariaRoot = true;
+ self.panel = new FloatPanel(panelSettings).on('hide', function () {
+ self.classes.remove('opened');
+ }).on('cancel', function (e) {
+ e.stopPropagation();
+ self.focus();
+ self.hidePanel();
+ }).parent(self).renderTo(self.getContainerElm());
+ self.panel.fire('show');
+ self.panel.reflow();
+ } else {
+ self.panel.show();
+ }
+ var rtlRels = [
+ 'bc-tc',
+ 'bc-tl',
+ 'bc-tr'
+ ];
+ var ltrRels = [
+ 'bc-tc',
+ 'bc-tr',
+ 'bc-tl',
+ 'tc-bc',
+ 'tc-br',
+ 'tc-bl'
+ ];
+ var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));
+ self.panel.classes.toggle('start', rel.substr(-1) === 'l');
+ self.panel.classes.toggle('end', rel.substr(-1) === 'r');
+ var isTop = rel.substr(0, 1) === 't';
+ self.panel.classes.toggle('bottom', !isTop);
+ self.panel.classes.toggle('top', isTop);
+ self.panel.moveRel(self.getEl(), rel);
+ },
+ hidePanel: function () {
+ var self = this;
+ if (self.panel) {
+ self.panel.hide();
+ }
+ },
+ postRender: function () {
+ var self = this;
+ self.aria('haspopup', true);
+ self.on('click', function (e) {
+ if (e.control === self) {
+ if (self.panel && self.panel.visible()) {
+ self.hidePanel();
+ } else {
+ self.showPanel();
+ self.panel.focus(!!e.aria);
+ }
+ }
+ });
+ return self._super();
+ },
+ remove: function () {
+ if (this.panel) {
+ this.panel.remove();
+ this.panel = null;
+ }
+ return this._super();
+ }
+ });
+
+ var DOM = global$2.DOM;
+ var ColorButton = PanelButton.extend({
+ init: function (settings) {
+ this._super(settings);
+ this.classes.add('splitbtn');
+ this.classes.add('colorbutton');
+ },
+ color: function (color) {
+ if (color) {
+ this._color = color;
+ this.getEl('preview').style.backgroundColor = color;
+ return this;
+ }
+ return this._color;
+ },
+ resetColor: function () {
+ this._color = null;
+ this.getEl('preview').style.backgroundColor = null;
+ return this;
+ },
+ renderHtml: function () {
+ var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');
+ var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
+ var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : '';
+ var textHtml = '';
+ if (text) {
+ self.classes.add('btn-has-text');
+ textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
+ }
+ return '<div id="' + id + '" class="' + self.classes + '" role="button" tabindex="-1" aria-haspopup="true">' + '<button role="presentation" hidefocus="1" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + '<span id="' + id + '-preview" class="' + prefix + 'preview"></span>' + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
+ },
+ postRender: function () {
+ var self = this, onClickHandler = self.settings.onclick;
+ self.on('click', function (e) {
+ if (e.aria && e.aria.key === 'down') {
+ return;
+ }
+ if (e.control === self && !DOM.getParent(e.target, '.' + self.classPrefix + 'open')) {
+ e.stopImmediatePropagation();
+ onClickHandler.call(self, e);
+ }
+ });
+ delete self.settings.onclick;
+ return self._super();
+ }
+ });
+
+ var global$16 = tinymce.util.Tools.resolve('tinymce.util.Color');
+
+ var ColorPicker = Widget.extend({
+ Defaults: { classes: 'widget colorpicker' },
+ init: function (settings) {
+ this._super(settings);
+ },
+ postRender: function () {
+ var self = this;
+ var color = self.color();
+ var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;
+ hueRootElm = self.getEl('h');
+ huePointElm = self.getEl('hp');
+ svRootElm = self.getEl('sv');
+ svPointElm = self.getEl('svp');
+ function getPos(elm, event) {
+ var pos = funcs.getPos(elm);
+ var x, y;
+ x = event.pageX - pos.x;
+ y = event.pageY - pos.y;
+ x = Math.max(0, Math.min(x / elm.clientWidth, 1));
+ y = Math.max(0, Math.min(y / elm.clientHeight, 1));
+ return {
+ x: x,
+ y: y
+ };
+ }
+ function updateColor(hsv, hueUpdate) {
+ var hue = (360 - hsv.h) / 360;
+ funcs.css(huePointElm, { top: hue * 100 + '%' });
+ if (!hueUpdate) {
+ funcs.css(svPointElm, {
+ left: hsv.s + '%',
+ top: 100 - hsv.v + '%'
+ });
+ }
+ svRootElm.style.background = global$16({
+ s: 100,
+ v: 100,
+ h: hsv.h
+ }).toHex();
+ self.color().parse({
+ s: hsv.s,
+ v: hsv.v,
+ h: hsv.h
+ });
+ }
+ function updateSaturationAndValue(e) {
+ var pos;
+ pos = getPos(svRootElm, e);
+ hsv.s = pos.x * 100;
+ hsv.v = (1 - pos.y) * 100;
+ updateColor(hsv);
+ self.fire('change');
+ }
+ function updateHue(e) {
+ var pos;
+ pos = getPos(hueRootElm, e);
+ hsv = color.toHsv();
+ hsv.h = (1 - pos.y) * 360;
+ updateColor(hsv, true);
+ self.fire('change');
+ }
+ self._repaint = function () {
+ hsv = color.toHsv();
+ updateColor(hsv);
+ };
+ self._super();
+ self._svdraghelper = new DragHelper(self._id + '-sv', {
+ start: updateSaturationAndValue,
+ drag: updateSaturationAndValue
+ });
+ self._hdraghelper = new DragHelper(self._id + '-h', {
+ start: updateHue,
+ drag: updateHue
+ });
+ self._repaint();
+ },
+ rgb: function () {
+ return this.color().toRgb();
+ },
+ value: function (value) {
+ var self = this;
+ if (arguments.length) {
+ self.color().parse(value);
+ if (self._rendered) {
+ self._repaint();
+ }
+ } else {
+ return self.color().toHex();
+ }
+ },
+ color: function () {
+ if (!this._color) {
+ this._color = global$16();
+ }
+ return this._color;
+ },
+ renderHtml: function () {
+ var self = this;
+ var id = self._id;
+ var prefix = self.classPrefix;
+ var hueHtml;
+ var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';
+ function getOldIeFallbackHtml() {
+ var i, l, html = '', gradientPrefix, stopsList;
+ gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';
+ stopsList = stops.split(',');
+ for (i = 0, l = stopsList.length - 1; i < l; i++) {
+ html += '<div class="' + prefix + 'colorpicker-h-chunk" style="' + 'height:' + 100 / l + '%;' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ');' + '-ms-' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ')' + '"></div>';
+ }
+ return html;
+ }
+ var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';
+ hueHtml = '<div id="' + id + '-h" class="' + prefix + 'colorpicker-h" style="' + gradientCssText + '">' + getOldIeFallbackHtml() + '<div id="' + id + '-hp" class="' + prefix + 'colorpicker-h-marker"></div>' + '</div>';
+ return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-sv" class="' + prefix + 'colorpicker-sv">' + '<div class="' + prefix + 'colorpicker-overlay1">' + '<div class="' + prefix + 'colorpicker-overlay2">' + '<div id="' + id + '-svp" class="' + prefix + 'colorpicker-selector1">' + '<div class="' + prefix + 'colorpicker-selector2"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + hueHtml + '</div>';
+ }
+ });
+
+ var DropZone = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ settings = global$4.extend({
+ height: 100,
+ text: 'Drop an image here',
+ multiple: false,
+ accept: null
+ }, settings);
+ self._super(settings);
+ self.classes.add('dropzone');
+ if (settings.multiple) {
+ self.classes.add('multiple');
+ }
+ },
+ renderHtml: function () {
+ var self = this;
+ var attrs, elm;
+ var cfg = self.settings;
+ attrs = {
+ id: self._id,
+ hidefocus: '1'
+ };
+ elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>');
+ if (cfg.height) {
+ funcs.css(elm, 'height', cfg.height + 'px');
+ }
+ if (cfg.width) {
+ funcs.css(elm, 'width', cfg.width + 'px');
+ }
+ elm.className = self.classes;
+ return elm.outerHTML;
+ },
+ postRender: function () {
+ var self = this;
+ var toggleDragClass = function (e) {
+ e.preventDefault();
+ self.classes.toggle('dragenter');
+ self.getEl().className = self.classes;
+ };
+ var filter = function (files) {
+ var accept = self.settings.accept;
+ if (typeof accept !== 'string') {
+ return files;
+ }
+ var re = new RegExp('(' + accept.split(/\s*,\s*/).join('|') + ')$', 'i');
+ return global$4.grep(files, function (file) {
+ return re.test(file.name);
+ });
+ };
+ self._super();
+ self.$el.on('dragover', function (e) {
+ e.preventDefault();
+ });
+ self.$el.on('dragenter', toggleDragClass);
+ self.$el.on('dragleave', toggleDragClass);
+ self.$el.on('drop', function (e) {
+ e.preventDefault();
+ if (self.state.get('disabled')) {
+ return;
+ }
+ var files = filter(e.dataTransfer.files);
+ self.value = function () {
+ if (!files.length) {
+ return null;
+ } else if (self.settings.multiple) {
+ return files;
+ } else {
+ return files[0];
+ }
+ };
+ if (files.length) {
+ self.fire('change', e);
+ }
+ });
+ },
+ remove: function () {
+ this.$el.off();
+ this._super();
+ }
+ });
+
+ var Path = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ if (!settings.delimiter) {
+ settings.delimiter = '\xBB';
+ }
+ self._super(settings);
+ self.classes.add('path');
+ self.canFocus = true;
+ self.on('click', function (e) {
+ var index;
+ var target = e.target;
+ if (index = target.getAttribute('data-index')) {
+ self.fire('select', {
+ value: self.row()[index],
+ index: index
+ });
+ }
+ });
+ self.row(self.settings.row);
+ },
+ focus: function () {
+ var self = this;
+ self.getEl().firstChild.focus();
+ return self;
+ },
+ row: function (row) {
+ if (!arguments.length) {
+ return this.state.get('row');
+ }
+ this.state.set('row', row);
+ return this;
+ },
+ renderHtml: function () {
+ var self = this;
+ return '<div id="' + self._id + '" class="' + self.classes + '">' + self._getDataPathHtml(self.state.get('row')) + '</div>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:row', function (e) {
+ self.innerHtml(self._getDataPathHtml(e.value));
+ });
+ return self._super();
+ },
+ _getDataPathHtml: function (data) {
+ var self = this;
+ var parts = data || [];
+ var i, l, html = '';
+ var prefix = self.classPrefix;
+ for (i = 0, l = parts.length; i < l; i++) {
+ html += (i > 0 ? '<div class="' + prefix + 'divider" aria-hidden="true"> ' + self.settings.delimiter + ' </div>' : '') + '<div role="button" class="' + prefix + 'path-item' + (i === l - 1 ? ' ' + prefix + 'last' : '') + '" data-index="' + i + '" tabindex="-1" id="' + self._id + '-' + i + '" aria-level="' + (i + 1) + '">' + parts[i].name + '</div>';
+ }
+ if (!html) {
+ html = '<div class="' + prefix + 'path-item">\xA0</div>';
+ }
+ return html;
+ }
+ });
+
+ var ElementPath = Path.extend({
+ postRender: function () {
+ var self = this, editor = self.settings.editor;
+ function isHidden(elm) {
+ if (elm.nodeType === 1) {
+ if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {
+ return true;
+ }
+ if (elm.getAttribute('data-mce-type') === 'bookmark') {
+ return true;
+ }
+ }
+ return false;
+ }
+ if (editor.settings.elementpath !== false) {
+ self.on('select', function (e) {
+ editor.focus();
+ editor.selection.select(this.row()[e.index].element);
+ editor.nodeChanged();
+ });
+ editor.on('nodeChange', function (e) {
+ var outParents = [];
+ var parents = e.parents;
+ var i = parents.length;
+ while (i--) {
+ if (parents[i].nodeType === 1 && !isHidden(parents[i])) {
+ var args = editor.fire('ResolveName', {
+ name: parents[i].nodeName.toLowerCase(),
+ target: parents[i]
+ });
+ if (!args.isDefaultPrevented()) {
+ outParents.push({
+ name: args.name,
+ element: parents[i]
+ });
+ }
+ if (args.isPropagationStopped()) {
+ break;
+ }
+ }
+ }
+ self.row(outParents);
+ });
+ }
+ return self._super();
+ }
+ });
+
+ var FormItem = Container.extend({
+ Defaults: {
+ layout: 'flex',
+ align: 'center',
+ defaults: { flex: 1 }
+ },
+ renderHtml: function () {
+ var self = this, layout = self._layout, prefix = self.classPrefix;
+ self.classes.add('formitem');
+ layout.preRender(self);
+ return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<div id="' + self._id + '-title" class="' + prefix + 'title">' + self.settings.title + '</div>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
+ }
+ });
+
+ var Form = Container.extend({
+ Defaults: {
+ containerCls: 'form',
+ layout: 'flex',
+ direction: 'column',
+ align: 'stretch',
+ flex: 1,
+ padding: 15,
+ labelGap: 30,
+ spacing: 10,
+ callbacks: {
+ submit: function () {
+ this.submit();
+ }
+ }
+ },
+ preRender: function () {
+ var self = this, items = self.items();
+ if (!self.settings.formItemDefaults) {
+ self.settings.formItemDefaults = {
+ layout: 'flex',
+ autoResize: 'overflow',
+ defaults: { flex: 1 }
+ };
+ }
+ items.each(function (ctrl) {
+ var formItem;
+ var label = ctrl.settings.label;
+ if (label) {
+ formItem = new FormItem(global$4.extend({
+ items: {
+ type: 'label',
+ id: ctrl._id + '-l',
+ text: label,
+ flex: 0,
+ forId: ctrl._id,
+ disabled: ctrl.disabled()
+ }
+ }, self.settings.formItemDefaults));
+ formItem.type = 'formitem';
+ ctrl.aria('labelledby', ctrl._id + '-l');
+ if (typeof ctrl.settings.flex === 'undefined') {
+ ctrl.settings.flex = 1;
+ }
+ self.replace(ctrl, formItem);
+ formItem.add(ctrl);
+ }
+ });
+ },
+ submit: function () {
+ return this.fire('submit', { data: this.toJSON() });
+ },
+ postRender: function () {
+ var self = this;
+ self._super();
+ self.fromJSON(self.settings.data);
+ },
+ bindStates: function () {
+ var self = this;
+ self._super();
+ function recalcLabels() {
+ var maxLabelWidth = 0;
+ var labels = [];
+ var i, labelGap, items;
+ if (self.settings.labelGapCalc === false) {
+ return;
+ }
+ if (self.settings.labelGapCalc === 'children') {
+ items = self.find('formitem');
+ } else {
+ items = self.items();
+ }
+ items.filter('formitem').each(function (item) {
+ var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;
+ maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;
+ labels.push(labelCtrl);
+ });
+ labelGap = self.settings.labelGap || 0;
+ i = labels.length;
+ while (i--) {
+ labels[i].settings.minWidth = maxLabelWidth + labelGap;
+ }
+ }
+ self.on('show', recalcLabels);
+ recalcLabels();
+ }
+ });
+
+ var FieldSet = Form.extend({
+ Defaults: {
+ containerCls: 'fieldset',
+ layout: 'flex',
+ direction: 'column',
+ align: 'stretch',
+ flex: 1,
+ padding: '25 15 5 15',
+ labelGap: 30,
+ spacing: 10,
+ border: 1
+ },
+ renderHtml: function () {
+ var self = this, layout = self._layout, prefix = self.classPrefix;
+ self.preRender();
+ layout.preRender(self);
+ return '<fieldset id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<legend id="' + self._id + '-title" class="' + prefix + 'fieldset-title">' + self.settings.title + '</legend>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</fieldset>';
+ }
+ });
+
+ var unique$1 = 0;
+ var generate = function (prefix) {
+ var date = new Date();
+ var time = date.getTime();
+ var random = Math.floor(Math.random() * 1000000000);
+ unique$1++;
+ return prefix + '_' + random + unique$1 + String(time);
+ };
+
+ var fromHtml = function (html, scope) {
+ var doc = scope || document;
+ var div = doc.createElement('div');
+ div.innerHTML = html;
+ if (!div.hasChildNodes() || div.childNodes.length > 1) {
+ console.error('HTML does not have a single root node', html);
+ throw 'HTML must have a single root node';
+ }
+ return fromDom(div.childNodes[0]);
+ };
+ var fromTag = function (tag, scope) {
+ var doc = scope || document;
+ var node = doc.createElement(tag);
+ return fromDom(node);
+ };
+ var fromText = function (text, scope) {
+ var doc = scope || document;
+ var node = doc.createTextNode(text);
+ return fromDom(node);
+ };
+ var fromDom = function (node) {
+ if (node === null || node === undefined)
+ throw new Error('Node cannot be null or undefined');
+ return { dom: constant(node) };
+ };
+ var fromPoint = function (docElm, x, y) {
+ var doc = docElm.dom();
+ return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
+ };
+ var Element$$1 = {
+ fromHtml: fromHtml,
+ fromTag: fromTag,
+ fromText: fromText,
+ fromDom: fromDom,
+ fromPoint: fromPoint
+ };
+
+ var cached = function (f) {
+ var called = false;
+ var r;
+ return function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ if (!called) {
+ called = true;
+ r = f.apply(null, args);
+ }
+ return r;
+ };
+ };
+
+ var $_2jrgnk1apjjgwek8y = {
+ ATTRIBUTE: Node.ATTRIBUTE_NODE,
+ CDATA_SECTION: Node.CDATA_SECTION_NODE,
+ COMMENT: Node.COMMENT_NODE,
+ DOCUMENT: Node.DOCUMENT_NODE,
+ DOCUMENT_TYPE: Node.DOCUMENT_TYPE_NODE,
+ DOCUMENT_FRAGMENT: Node.DOCUMENT_FRAGMENT_NODE,
+ ELEMENT: Node.ELEMENT_NODE,
+ TEXT: Node.TEXT_NODE,
+ PROCESSING_INSTRUCTION: Node.PROCESSING_INSTRUCTION_NODE,
+ ENTITY_REFERENCE: Node.ENTITY_REFERENCE_NODE,
+ ENTITY: Node.ENTITY_NODE,
+ NOTATION: Node.NOTATION_NODE
+ };
+
+ var name = function (element) {
+ var r = element.dom().nodeName;
+ return r.toLowerCase();
+ };
+ var type = function (element) {
+ return element.dom().nodeType;
+ };
+ var value = function (element) {
+ return element.dom().nodeValue;
+ };
+ var isType$2 = function (t) {
+ return function (element) {
+ return type(element) === t;
+ };
+ };
+ var isComment = function (element) {
+ return type(element) === $_2jrgnk1apjjgwek8y.COMMENT || name(element) === '#comment';
+ };
+ var isElement = isType$2($_2jrgnk1apjjgwek8y.ELEMENT);
+ var isText = isType$2($_2jrgnk1apjjgwek8y.TEXT);
+ var isDocument = isType$2($_2jrgnk1apjjgwek8y.DOCUMENT);
+ var $_fv3as1aojjgwek8x = {
+ name: name,
+ type: type,
+ value: value,
+ isElement: isElement,
+ isText: isText,
+ isDocument: isDocument,
+ isComment: isComment
+ };
+
+ var inBody = function (element) {
+ var dom = $_fv3as1aojjgwek8x.isText(element) ? element.dom().parentNode : element.dom();
+ return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
+ };
+ var body = cached(function () {
+ return getBody(Element$$1.fromDom(document));
+ });
+ var getBody = function (doc) {
+ var body = doc.dom().body;
+ if (body === null || body === undefined)
+ throw 'Body is not available yet';
+ return Element$$1.fromDom(body);
+ };
+ var $_d2glpe1amjjgwek8t = {
+ body: body,
+ getBody: getBody,
+ inBody: inBody
+ };
+
+ var Immutable = function () {
+ var fields = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ fields[_i] = arguments[_i];
+ }
+ return function () {
+ var values = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ values[_i] = arguments[_i];
+ }
+ if (fields.length !== values.length) {
+ throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
+ }
+ var struct = {};
+ each(fields, function (name, i) {
+ struct[name] = constant(values[i]);
+ });
+ return struct;
+ };
+ };
+
+ var toArray = function (target, f) {
+ var r = [];
+ var recurse = function (e) {
+ r.push(e);
+ return f(e);
+ };
+ var cur = f(target);
+ do {
+ cur = cur.bind(recurse);
+ } while (cur.isSome());
+ return r;
+ };
+ var $_607sf01awjjgweka0 = { toArray: toArray };
+
+ var node = function () {
+ var f = $_8wnjhx19gjjgwek54.getOrDie('Node');
+ return f;
+ };
+ var compareDocumentPosition = function (a, b, match) {
+ return (a.compareDocumentPosition(b) & match) !== 0;
+ };
+ var documentPositionPreceding = function (a, b) {
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
+ };
+ var documentPositionContainedBy = function (a, b) {
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
+ };
+ var $_d0o64o1ayjjgwekaa = {
+ documentPositionPreceding: documentPositionPreceding,
+ documentPositionContainedBy: documentPositionContainedBy
+ };
+
+ var firstMatch = function (regexes, s) {
+ for (var i = 0; i < regexes.length; i++) {
+ var x = regexes[i];
+ if (x.test(s))
+ return x;
+ }
+ return undefined;
+ };
+ var find$2 = function (regexes, agent) {
+ var r = firstMatch(regexes, agent);
+ if (!r)
+ return {
+ major: 0,
+ minor: 0
+ };
+ var group = function (i) {
+ return Number(agent.replace(r, '$' + i));
+ };
+ return nu(group(1), group(2));
+ };
+ var detect = function (versionRegexes, agent) {
+ var cleanedAgent = String(agent).toLowerCase();
+ if (versionRegexes.length === 0)
+ return unknown();
+ return find$2(versionRegexes, cleanedAgent);
+ };
+ var unknown = function () {
+ return nu(0, 0);
+ };
+ var nu = function (major, minor) {
+ return {
+ major: major,
+ minor: minor
+ };
+ };
+ var $_bhlk9t1b2jjgwekaq = {
+ nu: nu,
+ detect: detect,
+ unknown: unknown
+ };
+
+ var edge = 'Edge';
+ var chrome = 'Chrome';
+ var ie = 'IE';
+ var opera = 'Opera';
+ var firefox = 'Firefox';
+ var safari = 'Safari';
+ var isBrowser = function (name, current) {
+ return function () {
+ return current === name;
+ };
+ };
+ var unknown$1 = function () {
+ return nu$1({
+ current: undefined,
+ version: $_bhlk9t1b2jjgwekaq.unknown()
+ });
+ };
+ var nu$1 = function (info) {
+ var current = info.current;
+ var version = info.version;
+ return {
+ current: current,
+ version: version,
+ isEdge: isBrowser(edge, current),
+ isChrome: isBrowser(chrome, current),
+ isIE: isBrowser(ie, current),
+ isOpera: isBrowser(opera, current),
+ isFirefox: isBrowser(firefox, current),
+ isSafari: isBrowser(safari, current)
+ };
+ };
+ var $_3j4jht1b1jjgwekal = {
+ unknown: unknown$1,
+ nu: nu$1,
+ edge: constant(edge),
+ chrome: constant(chrome),
+ ie: constant(ie),
+ opera: constant(opera),
+ firefox: constant(firefox),
+ safari: constant(safari)
+ };
+
+ var windows$1 = 'Windows';
+ var ios = 'iOS';
+ var android = 'Android';
+ var linux = 'Linux';
+ var osx = 'OSX';
+ var solaris = 'Solaris';
+ var freebsd = 'FreeBSD';
+ var isOS = function (name, current) {
+ return function () {
+ return current === name;
+ };
+ };
+ var unknown$2 = function () {
+ return nu$2({
+ current: undefined,
+ version: $_bhlk9t1b2jjgwekaq.unknown()
+ });
+ };
+ var nu$2 = function (info) {
+ var current = info.current;
+ var version = info.version;
+ return {
+ current: current,
+ version: version,
+ isWindows: isOS(windows$1, current),
+ isiOS: isOS(ios, current),
+ isAndroid: isOS(android, current),
+ isOSX: isOS(osx, current),
+ isLinux: isOS(linux, current),
+ isSolaris: isOS(solaris, current),
+ isFreeBSD: isOS(freebsd, current)
+ };
+ };
+ var $_7je60a1b3jjgwekar = {
+ unknown: unknown$2,
+ nu: nu$2,
+ windows: constant(windows$1),
+ ios: constant(ios),
+ android: constant(android),
+ linux: constant(linux),
+ osx: constant(osx),
+ solaris: constant(solaris),
+ freebsd: constant(freebsd)
+ };
+
+ function DeviceType (os, browser, userAgent) {
+ var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
+ var isiPhone = os.isiOS() && !isiPad;
+ var isAndroid3 = os.isAndroid() && os.version.major === 3;
+ var isAndroid4 = os.isAndroid() && os.version.major === 4;
+ var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
+ var isTouch = os.isiOS() || os.isAndroid();
+ var isPhone = isTouch && !isTablet;
+ var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
+ return {
+ isiPad: constant(isiPad),
+ isiPhone: constant(isiPhone),
+ isTablet: constant(isTablet),
+ isPhone: constant(isPhone),
+ isTouch: constant(isTouch),
+ isAndroid: os.isAndroid,
+ isiOS: os.isiOS,
+ isWebView: constant(iOSwebview)
+ };
+ }
+
+ var detect$1 = function (candidates, userAgent) {
+ var agent = String(userAgent).toLowerCase();
+ return find(candidates, function (candidate) {
+ return candidate.search(agent);
+ });
+ };
+ var detectBrowser = function (browsers, userAgent) {
+ return detect$1(browsers, userAgent).map(function (browser) {
+ var version = $_bhlk9t1b2jjgwekaq.detect(browser.versionRegexes, userAgent);
+ return {
+ current: browser.name,
+ version: version
+ };
+ });
+ };
+ var detectOs = function (oses, userAgent) {
+ return detect$1(oses, userAgent).map(function (os) {
+ var version = $_bhlk9t1b2jjgwekaq.detect(os.versionRegexes, userAgent);
+ return {
+ current: os.name,
+ version: version
+ };
+ });
+ };
+ var $_1uo66k1b5jjgwekb9 = {
+ detectBrowser: detectBrowser,
+ detectOs: detectOs
+ };
+
+ var contains$1 = function (str, substr) {
+ return str.indexOf(substr) !== -1;
+ };
+
+ var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
+ var checkContains = function (target) {
+ return function (uastring) {
+ return contains$1(uastring, target);
+ };
+ };
+ var browsers = [
+ {
+ name: 'Edge',
+ versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
+ search: function (uastring) {
+ var monstrosity = contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');
+ return monstrosity;
+ }
+ },
+ {
+ name: 'Chrome',
+ versionRegexes: [
+ /.*?chrome\/([0-9]+)\.([0-9]+).*/,
+ normalVersionRegex
+ ],
+ search: function (uastring) {
+ return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');
+ }
+ },
+ {
+ name: 'IE',
+ versionRegexes: [
+ /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
+ /.*?rv:([0-9]+)\.([0-9]+).*/
+ ],
+ search: function (uastring) {
+ return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');
+ }
+ },
+ {
+ name: 'Opera',
+ versionRegexes: [
+ normalVersionRegex,
+ /.*?opera\/([0-9]+)\.([0-9]+).*/
+ ],
+ search: checkContains('opera')
+ },
+ {
+ name: 'Firefox',
+ versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
+ search: checkContains('firefox')
+ },
+ {
+ name: 'Safari',
+ versionRegexes: [
+ normalVersionRegex,
+ /.*?cpu os ([0-9]+)_([0-9]+).*/
+ ],
+ search: function (uastring) {
+ return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');
+ }
+ }
+ ];
+ var oses = [
+ {
+ name: 'Windows',
+ search: checkContains('win'),
+ versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
+ },
+ {
+ name: 'iOS',
+ search: function (uastring) {
+ return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');
+ },
+ versionRegexes: [
+ /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
+ /.*cpu os ([0-9]+)_([0-9]+).*/,
+ /.*cpu iphone os ([0-9]+)_([0-9]+).*/
+ ]
+ },
+ {
+ name: 'Android',
+ search: checkContains('android'),
+ versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
+ },
+ {
+ name: 'OSX',
+ search: checkContains('os x'),
+ versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
+ },
+ {
+ name: 'Linux',
+ search: checkContains('linux'),
+ versionRegexes: []
+ },
+ {
+ name: 'Solaris',
+ search: checkContains('sunos'),
+ versionRegexes: []
+ },
+ {
+ name: 'FreeBSD',
+ search: checkContains('freebsd'),
+ versionRegexes: []
+ }
+ ];
+ var $_4f7v971b6jjgwekbd = {
+ browsers: constant(browsers),
+ oses: constant(oses)
+ };
+
+ var detect$2 = function (userAgent) {
+ var browsers = $_4f7v971b6jjgwekbd.browsers();
+ var oses = $_4f7v971b6jjgwekbd.oses();
+ var browser = $_1uo66k1b5jjgwekb9.detectBrowser(browsers, userAgent).fold($_3j4jht1b1jjgwekal.unknown, $_3j4jht1b1jjgwekal.nu);
+ var os = $_1uo66k1b5jjgwekb9.detectOs(oses, userAgent).fold($_7je60a1b3jjgwekar.unknown, $_7je60a1b3jjgwekar.nu);
+ var deviceType = DeviceType(os, browser, userAgent);
+ return {
+ browser: browser,
+ os: os,
+ deviceType: deviceType
+ };
+ };
+ var $_d71emz1b0jjgwekak = { detect: detect$2 };
+
+ var detect$3 = cached(function () {
+ var userAgent = navigator.userAgent;
+ return $_d71emz1b0jjgwekak.detect(userAgent);
+ });
+ var $_9xrxmy1azjjgwekac = { detect: detect$3 };
+
+ var ELEMENT = $_2jrgnk1apjjgwek8y.ELEMENT;
+ var DOCUMENT = $_2jrgnk1apjjgwek8y.DOCUMENT;
+ var is = function (element, selector) {
+ var elem = element.dom();
+ if (elem.nodeType !== ELEMENT)
+ return false;
+ else if (elem.matches !== undefined)
+ return elem.matches(selector);
+ else if (elem.msMatchesSelector !== undefined)
+ return elem.msMatchesSelector(selector);
+ else if (elem.webkitMatchesSelector !== undefined)
+ return elem.webkitMatchesSelector(selector);
+ else if (elem.mozMatchesSelector !== undefined)
+ return elem.mozMatchesSelector(selector);
+ else
+ throw new Error('Browser lacks native selectors');
+ };
+ var bypassSelector = function (dom) {
+ return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0;
+ };
+ var all = function (selector, scope) {
+ var base = scope === undefined ? document : scope.dom();
+ return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom);
+ };
+ var one = function (selector, scope) {
+ var base = scope === undefined ? document : scope.dom();
+ return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom);
+ };
+ var $_e63uk51bajjgwekbq = {
+ all: all,
+ is: is,
+ one: one
+ };
+
+ var eq = function (e1, e2) {
+ return e1.dom() === e2.dom();
+ };
+ var isEqualNode = function (e1, e2) {
+ return e1.dom().isEqualNode(e2.dom());
+ };
+ var member = function (element, elements) {
+ return exists(elements, curry(eq, element));
+ };
+ var regularContains = function (e1, e2) {
+ var d1 = e1.dom(), d2 = e2.dom();
+ return d1 === d2 ? false : d1.contains(d2);
+ };
+ var ieContains = function (e1, e2) {
+ return $_d0o64o1ayjjgwekaa.documentPositionContainedBy(e1.dom(), e2.dom());
+ };
+ var browser = $_9xrxmy1azjjgwekac.detect().browser;
+ var contains$2 = browser.isIE() ? ieContains : regularContains;
+ var $_36s5ie1axjjgweka1 = {
+ eq: eq,
+ isEqualNode: isEqualNode,
+ member: member,
+ contains: contains$2,
+ is: $_e63uk51bajjgwekbq.is
+ };
+
+ var owner = function (element) {
+ return Element$$1.fromDom(element.dom().ownerDocument);
+ };
+ var documentElement = function (element) {
+ return Element$$1.fromDom(element.dom().ownerDocument.documentElement);
+ };
+ var defaultView = function (element) {
+ var el = element.dom();
+ var defaultView = el.ownerDocument.defaultView;
+ return Element$$1.fromDom(defaultView);
+ };
+ var parent$1 = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.parentNode).map(Element$$1.fromDom);
+ };
+ var findIndex$1 = function (element) {
+ return parent$1(element).bind(function (p) {
+ var kin = children(p);
+ return findIndex(kin, function (elem) {
+ return $_36s5ie1axjjgweka1.eq(element, elem);
+ });
+ });
+ };
+ var parents = function (element, isRoot) {
+ var stop = isFunction$1(isRoot) ? isRoot : constant(false);
+ var dom = element.dom();
+ var ret = [];
+ while (dom.parentNode !== null && dom.parentNode !== undefined) {
+ var rawParent = dom.parentNode;
+ var parent = Element$$1.fromDom(rawParent);
+ ret.push(parent);
+ if (stop(parent) === true)
+ break;
+ else
+ dom = rawParent;
+ }
+ return ret;
+ };
+ var siblings = function (element) {
+ var filterSelf = function (elements) {
+ return filter(elements, function (x) {
+ return !$_36s5ie1axjjgweka1.eq(element, x);
+ });
+ };
+ return parent$1(element).map(children).map(filterSelf).getOr([]);
+ };
+ var offsetParent = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.offsetParent).map(Element$$1.fromDom);
+ };
+ var prevSibling = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.previousSibling).map(Element$$1.fromDom);
+ };
+ var nextSibling = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.nextSibling).map(Element$$1.fromDom);
+ };
+ var prevSiblings = function (element) {
+ return reverse($_607sf01awjjgweka0.toArray(element, prevSibling));
+ };
+ var nextSiblings = function (element) {
+ return $_607sf01awjjgweka0.toArray(element, nextSibling);
+ };
+ var children = function (element) {
+ var dom = element.dom();
+ return map(dom.childNodes, Element$$1.fromDom);
+ };
+ var child = function (element, index) {
+ var children = element.dom().childNodes;
+ return Option.from(children[index]).map(Element$$1.fromDom);
+ };
+ var firstChild = function (element) {
+ return child(element, 0);
+ };
+ var lastChild = function (element) {
+ return child(element, element.dom().childNodes.length - 1);
+ };
+ var childNodesCount = function (element) {
+ return element.dom().childNodes.length;
+ };
+ var hasChildNodes = function (element) {
+ return element.dom().hasChildNodes();
+ };
+ var spot = Immutable('element', 'offset');
+ var leaf = function (element, offset) {
+ var cs = children(element);
+ return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
+ };
+ var $_fk3hdw1aqjjgwek91 = {
+ owner: owner,
+ defaultView: defaultView,
+ documentElement: documentElement,
+ parent: parent$1,
+ findIndex: findIndex$1,
+ parents: parents,
+ siblings: siblings,
+ prevSibling: prevSibling,
+ offsetParent: offsetParent,
+ prevSiblings: prevSiblings,
+ nextSibling: nextSibling,
+ nextSiblings: nextSiblings,
+ children: children,
+ child: child,
+ firstChild: firstChild,
+ lastChild: lastChild,
+ childNodesCount: childNodesCount,
+ hasChildNodes: hasChildNodes,
+ leaf: leaf
+ };
+
+ var all$1 = function (predicate) {
+ return descendants($_d2glpe1amjjgwek8t.body(), predicate);
+ };
+ var ancestors = function (scope, predicate, isRoot) {
+ return filter($_fk3hdw1aqjjgwek91.parents(scope, isRoot), predicate);
+ };
+ var siblings$1 = function (scope, predicate) {
+ return filter($_fk3hdw1aqjjgwek91.siblings(scope), predicate);
+ };
+ var children$1 = function (scope, predicate) {
+ return filter($_fk3hdw1aqjjgwek91.children(scope), predicate);
+ };
+ var descendants = function (scope, predicate) {
+ var result = [];
+ each($_fk3hdw1aqjjgwek91.children(scope), function (x) {
+ if (predicate(x)) {
+ result = result.concat([x]);
+ }
+ result = result.concat(descendants(x, predicate));
+ });
+ return result;
+ };
+ var $_4re57m1aljjgwek8p = {
+ all: all$1,
+ ancestors: ancestors,
+ siblings: siblings$1,
+ children: children$1,
+ descendants: descendants
+ };
+
+ var all$2 = function (selector) {
+ return $_e63uk51bajjgwekbq.all(selector);
+ };
+ var ancestors$1 = function (scope, selector, isRoot) {
+ return $_4re57m1aljjgwek8p.ancestors(scope, function (e) {
+ return $_e63uk51bajjgwekbq.is(e, selector);
+ }, isRoot);
+ };
+ var siblings$2 = function (scope, selector) {
+ return $_4re57m1aljjgwek8p.siblings(scope, function (e) {
+ return $_e63uk51bajjgwekbq.is(e, selector);
+ });
+ };
+ var children$2 = function (scope, selector) {
+ return $_4re57m1aljjgwek8p.children(scope, function (e) {
+ return $_e63uk51bajjgwekbq.is(e, selector);
+ });
+ };
+ var descendants$1 = function (scope, selector) {
+ return $_e63uk51bajjgwekbq.all(selector, scope);
+ };
+ var $_1jc9su1akjjgwek8o = {
+ all: all$2,
+ ancestors: ancestors$1,
+ siblings: siblings$2,
+ children: children$2,
+ descendants: descendants$1
+ };
+
+ var trim$1 = global$4.trim;
+ var hasContentEditableState = function (value) {
+ return function (node) {
+ if (node && node.nodeType === 1) {
+ if (node.contentEditable === value) {
+ return true;
+ }
+ if (node.getAttribute('data-mce-contenteditable') === value) {
+ return true;
+ }
+ }
+ return false;
+ };
+ };
+ var isContentEditableTrue = hasContentEditableState('true');
+ var isContentEditableFalse = hasContentEditableState('false');
+ var create$4 = function (type, title, url, level, attach) {
+ return {
+ type: type,
+ title: title,
+ url: url,
+ level: level,
+ attach: attach
+ };
+ };
+ var isChildOfContentEditableTrue = function (node) {
+ while (node = node.parentNode) {
+ var value = node.contentEditable;
+ if (value && value !== 'inherit') {
+ return isContentEditableTrue(node);
+ }
+ }
+ return false;
+ };
+ var select = function (selector, root) {
+ return map($_1jc9su1akjjgwek8o.descendants(Element$$1.fromDom(root), selector), function (element) {
+ return element.dom();
+ });
+ };
+ var getElementText = function (elm) {
+ return elm.innerText || elm.textContent;
+ };
+ var getOrGenerateId = function (elm) {
+ return elm.id ? elm.id : generate('h');
+ };
+ var isAnchor = function (elm) {
+ return elm && elm.nodeName === 'A' && (elm.id || elm.name);
+ };
+ var isValidAnchor = function (elm) {
+ return isAnchor(elm) && isEditable(elm);
+ };
+ var isHeader = function (elm) {
+ return elm && /^(H[1-6])$/.test(elm.nodeName);
+ };
+ var isEditable = function (elm) {
+ return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);
+ };
+ var isValidHeader = function (elm) {
+ return isHeader(elm) && isEditable(elm);
+ };
+ var getLevel = function (elm) {
+ return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;
+ };
+ var headerTarget = function (elm) {
+ var headerId = getOrGenerateId(elm);
+ var attach = function () {
+ elm.id = headerId;
+ };
+ return create$4('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);
+ };
+ var anchorTarget = function (elm) {
+ var anchorId = elm.id || elm.name;
+ var anchorText = getElementText(elm);
+ return create$4('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);
+ };
+ var getHeaderTargets = function (elms) {
+ return map(filter(elms, isValidHeader), headerTarget);
+ };
+ var getAnchorTargets = function (elms) {
+ return map(filter(elms, isValidAnchor), anchorTarget);
+ };
+ var getTargetElements = function (elm) {
+ var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);
+ return elms;
+ };
+ var hasTitle = function (target) {
+ return trim$1(target.title).length > 0;
+ };
+ var find$3 = function (elm) {
+ var elms = getTargetElements(elm);
+ return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);
+ };
+ var $_5ia43q1ahjjgwek7u = { find: find$3 };
+
+ var getActiveEditor = function () {
+ return window.tinymce ? window.tinymce.activeEditor : global$5.activeEditor;
+ };
+ var history = {};
+ var HISTORY_LENGTH = 5;
+ var clearHistory = function () {
+ history = {};
+ };
+ var toMenuItem = function (target) {
+ return {
+ title: target.title,
+ value: {
+ title: { raw: target.title },
+ url: target.url,
+ attach: target.attach
+ }
+ };
+ };
+ var toMenuItems = function (targets) {
+ return global$4.map(targets, toMenuItem);
+ };
+ var staticMenuItem = function (title, url) {
+ return {
+ title: title,
+ value: {
+ title: title,
+ url: url,
+ attach: noop
+ }
+ };
+ };
+ var isUniqueUrl = function (url, targets) {
+ var foundTarget = exists(targets, function (target) {
+ return target.url === url;
+ });
+ return !foundTarget;
+ };
+ var getSetting = function (editorSettings, name, defaultValue) {
+ var value = name in editorSettings ? editorSettings[name] : defaultValue;
+ return value === false ? null : value;
+ };
+ var createMenuItems = function (term, targets, fileType, editorSettings) {
+ var separator = { title: '-' };
+ var fromHistoryMenuItems = function (history) {
+ var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];
+ var uniqueHistory = filter(historyItems, function (url) {
+ return isUniqueUrl(url, targets);
+ });
+ return global$4.map(uniqueHistory, function (url) {
+ return {
+ title: url,
+ value: {
+ title: url,
+ url: url,
+ attach: noop
+ }
+ };
+ });
+ };
+ var fromMenuItems = function (type) {
+ var filteredTargets = filter(targets, function (target) {
+ return target.type === type;
+ });
+ return toMenuItems(filteredTargets);
+ };
+ var anchorMenuItems = function () {
+ var anchorMenuItems = fromMenuItems('anchor');
+ var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');
+ var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');
+ if (topAnchor !== null) {
+ anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor));
+ }
+ if (bottomAchor !== null) {
+ anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor));
+ }
+ return anchorMenuItems;
+ };
+ var join = function (items) {
+ return foldl(items, function (a, b) {
+ var bothEmpty = a.length === 0 || b.length === 0;
+ return bothEmpty ? a.concat(b) : a.concat(separator, b);
+ }, []);
+ };
+ if (editorSettings.typeahead_urls === false) {
+ return [];
+ }
+ return fileType === 'file' ? join([
+ filterByQuery(term, fromHistoryMenuItems(history)),
+ filterByQuery(term, fromMenuItems('header')),
+ filterByQuery(term, anchorMenuItems())
+ ]) : filterByQuery(term, fromHistoryMenuItems(history));
+ };
+ var addToHistory = function (url, fileType) {
+ var items = history[fileType];
+ if (!/^https?/.test(url)) {
+ return;
+ }
+ if (items) {
+ if (indexOf(items, url).isNone()) {
+ history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);
+ }
+ } else {
+ history[fileType] = [url];
+ }
+ };
+ var filterByQuery = function (term, menuItems) {
+ var lowerCaseTerm = term.toLowerCase();
+ var result = global$4.grep(menuItems, function (item) {
+ return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;
+ });
+ return result.length === 1 && result[0].title === term ? [] : result;
+ };
+ var getTitle = function (linkDetails) {
+ var title = linkDetails.title;
+ return title.raw ? title.raw : title;
+ };
+ var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {
+ var autocomplete = function (term) {
+ var linkTargets = $_5ia43q1ahjjgwek7u.find(bodyElm);
+ var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);
+ ctrl.showAutoComplete(menuItems, term);
+ };
+ ctrl.on('autocomplete', function () {
+ autocomplete(ctrl.value());
+ });
+ ctrl.on('selectitem', function (e) {
+ var linkDetails = e.value;
+ ctrl.value(linkDetails.url);
+ var title = getTitle(linkDetails);
+ if (fileType === 'image') {
+ ctrl.fire('change', {
+ meta: {
+ alt: title,
+ attach: linkDetails.attach
+ }
+ });
+ } else {
+ ctrl.fire('change', {
+ meta: {
+ text: title,
+ attach: linkDetails.attach
+ }
+ });
+ }
+ ctrl.focus();
+ });
+ ctrl.on('click', function (e) {
+ if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {
+ autocomplete('');
+ }
+ });
+ ctrl.on('PostRender', function () {
+ ctrl.getRoot().on('submit', function (e) {
+ if (!e.isDefaultPrevented()) {
+ addToHistory(ctrl.value(), fileType);
+ }
+ });
+ });
+ };
+ var statusToUiState = function (result) {
+ var status = result.status, message = result.message;
+ if (status === 'valid') {
+ return {
+ status: 'ok',
+ message: message
+ };
+ } else if (status === 'unknown') {
+ return {
+ status: 'warn',
+ message: message
+ };
+ } else if (status === 'invalid') {
+ return {
+ status: 'warn',
+ message: message
+ };
+ } else {
+ return {
+ status: 'none',
+ message: ''
+ };
+ }
+ };
+ var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {
+ var validatorHandler = editorSettings.filepicker_validator_handler;
+ if (validatorHandler) {
+ var validateUrl_1 = function (url) {
+ if (url.length === 0) {
+ ctrl.statusLevel('none');
+ return;
+ }
+ validatorHandler({
+ url: url,
+ type: fileType
+ }, function (result) {
+ var uiState = statusToUiState(result);
+ ctrl.statusMessage(uiState.message);
+ ctrl.statusLevel(uiState.status);
+ });
+ };
+ ctrl.state.on('change:value', function (e) {
+ validateUrl_1(e.value);
+ });
+ }
+ };
+ var FilePicker = ComboBox.extend({
+ Statics: { clearHistory: clearHistory },
+ init: function (settings) {
+ var self = this, editor = getActiveEditor(), editorSettings = editor.settings;
+ var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;
+ var fileType = settings.filetype;
+ settings.spellcheck = false;
+ fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;
+ if (fileBrowserCallbackTypes) {
+ fileBrowserCallbackTypes = global$4.makeMap(fileBrowserCallbackTypes, /[, ]/);
+ }
+ if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {
+ fileBrowserCallback = editorSettings.file_picker_callback;
+ if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
+ actionCallback = function () {
+ var meta = self.fire('beforecall').meta;
+ meta = global$4.extend({ filetype: fileType }, meta);
+ fileBrowserCallback.call(editor, function (value, meta) {
+ self.value(value).fire('change', { meta: meta });
+ }, self.value(), meta);
+ };
+ } else {
+ fileBrowserCallback = editorSettings.file_browser_callback;
+ if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
+ actionCallback = function () {
+ fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);
+ };
+ }
+ }
+ }
+ if (actionCallback) {
+ settings.icon = 'browse';
+ settings.onaction = actionCallback;
+ }
+ self._super(settings);
+ self.classes.add('filepicker');
+ setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);
+ setupLinkValidatorHandler(self, editorSettings, fileType);
+ }
+ });
+
+ var FitLayout = AbsoluteLayout.extend({
+ recalc: function (container) {
+ var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;
+ container.items().filter(':visible').each(function (ctrl) {
+ ctrl.layoutRect({
+ x: paddingBox.left,
+ y: paddingBox.top,
+ w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,
+ h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom
+ });
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ });
+ }
+ });
+
+ var FlexLayout = AbsoluteLayout.extend({
+ recalc: function (container) {
+ var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;
+ var ctrl, ctrlLayoutRect, ctrlSettings, flex;
+ var maxSizeItems = [];
+ var size, maxSize, ratio, rect, pos, maxAlignEndPos;
+ var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;
+ var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;
+ var alignDeltaSizeName, alignContentSizeName;
+ var max = Math.max, min = Math.min;
+ items = container.items().filter(':visible');
+ contLayoutRect = container.layoutRect();
+ contPaddingBox = container.paddingBox;
+ contSettings = container.settings;
+ direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;
+ align = contSettings.align;
+ pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;
+ spacing = contSettings.spacing || 0;
+ if (direction === 'row-reversed' || direction === 'column-reverse') {
+ items = items.set(items.toArray().reverse());
+ direction = direction.split('-')[0];
+ }
+ if (direction === 'column') {
+ posName = 'y';
+ sizeName = 'h';
+ minSizeName = 'minH';
+ maxSizeName = 'maxH';
+ innerSizeName = 'innerH';
+ beforeName = 'top';
+ deltaSizeName = 'deltaH';
+ contentSizeName = 'contentH';
+ alignBeforeName = 'left';
+ alignSizeName = 'w';
+ alignAxisName = 'x';
+ alignInnerSizeName = 'innerW';
+ alignMinSizeName = 'minW';
+ alignAfterName = 'right';
+ alignDeltaSizeName = 'deltaW';
+ alignContentSizeName = 'contentW';
+ } else {
+ posName = 'x';
+ sizeName = 'w';
+ minSizeName = 'minW';
+ maxSizeName = 'maxW';
+ innerSizeName = 'innerW';
+ beforeName = 'left';
+ deltaSizeName = 'deltaW';
+ contentSizeName = 'contentW';
+ alignBeforeName = 'top';
+ alignSizeName = 'h';
+ alignAxisName = 'y';
+ alignInnerSizeName = 'innerH';
+ alignMinSizeName = 'minH';
+ alignAfterName = 'bottom';
+ alignDeltaSizeName = 'deltaH';
+ alignContentSizeName = 'contentH';
+ }
+ availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];
+ maxAlignEndPos = totalFlex = 0;
+ for (i = 0, l = items.length; i < l; i++) {
+ ctrl = items[i];
+ ctrlLayoutRect = ctrl.layoutRect();
+ ctrlSettings = ctrl.settings;
+ flex = ctrlSettings.flex;
+ availableSpace -= i < l - 1 ? spacing : 0;
+ if (flex > 0) {
+ totalFlex += flex;
+ if (ctrlLayoutRect[maxSizeName]) {
+ maxSizeItems.push(ctrl);
+ }
+ ctrlLayoutRect.flex = flex;
+ }
+ availableSpace -= ctrlLayoutRect[minSizeName];
+ size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];
+ if (size > maxAlignEndPos) {
+ maxAlignEndPos = size;
+ }
+ }
+ rect = {};
+ if (availableSpace < 0) {
+ rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];
+ } else {
+ rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];
+ }
+ rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];
+ rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;
+ rect[alignContentSizeName] = maxAlignEndPos;
+ rect.minW = min(rect.minW, contLayoutRect.maxW);
+ rect.minH = min(rect.minH, contLayoutRect.maxH);
+ rect.minW = max(rect.minW, contLayoutRect.startMinWidth);
+ rect.minH = max(rect.minH, contLayoutRect.startMinHeight);
+ if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
+ rect.w = rect.minW;
+ rect.h = rect.minH;
+ container.layoutRect(rect);
+ this.recalc(container);
+ if (container._lastRect === null) {
+ var parentCtrl = container.parent();
+ if (parentCtrl) {
+ parentCtrl._lastRect = null;
+ parentCtrl.recalc();
+ }
+ }
+ return;
+ }
+ ratio = availableSpace / totalFlex;
+ for (i = 0, l = maxSizeItems.length; i < l; i++) {
+ ctrl = maxSizeItems[i];
+ ctrlLayoutRect = ctrl.layoutRect();
+ maxSize = ctrlLayoutRect[maxSizeName];
+ size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;
+ if (size > maxSize) {
+ availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];
+ totalFlex -= ctrlLayoutRect.flex;
+ ctrlLayoutRect.flex = 0;
+ ctrlLayoutRect.maxFlexSize = maxSize;
+ } else {
+ ctrlLayoutRect.maxFlexSize = 0;
+ }
+ }
+ ratio = availableSpace / totalFlex;
+ pos = contPaddingBox[beforeName];
+ rect = {};
+ if (totalFlex === 0) {
+ if (pack === 'end') {
+ pos = availableSpace + contPaddingBox[beforeName];
+ } else if (pack === 'center') {
+ pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];
+ if (pos < 0) {
+ pos = contPaddingBox[beforeName];
+ }
+ } else if (pack === 'justify') {
+ pos = contPaddingBox[beforeName];
+ spacing = Math.floor(availableSpace / (items.length - 1));
+ }
+ }
+ rect[alignAxisName] = contPaddingBox[alignBeforeName];
+ for (i = 0, l = items.length; i < l; i++) {
+ ctrl = items[i];
+ ctrlLayoutRect = ctrl.layoutRect();
+ size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];
+ if (align === 'center') {
+ rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);
+ } else if (align === 'stretch') {
+ rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);
+ rect[alignAxisName] = contPaddingBox[alignBeforeName];
+ } else if (align === 'end') {
+ rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;
+ }
+ if (ctrlLayoutRect.flex > 0) {
+ size += ctrlLayoutRect.flex * ratio;
+ }
+ rect[sizeName] = size;
+ rect[posName] = pos;
+ ctrl.layoutRect(rect);
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ pos += size + spacing;
+ }
+ }
+ });
+
+ var FlowLayout = Layout$1.extend({
+ Defaults: {
+ containerClass: 'flow-layout',
+ controlClass: 'flow-layout-item',
+ endClass: 'break'
+ },
+ recalc: function (container) {
+ container.items().filter(':visible').each(function (ctrl) {
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ });
+ },
+ isNative: function () {
+ return true;
+ }
+ });
+
+ function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
+ return is(scope, a) ? Option.some(scope) : isFunction$1(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
+ }
+
+ var first$1 = function (predicate) {
+ return descendant($_d2glpe1amjjgwek8t.body(), predicate);
+ };
+ var ancestor = function (scope, predicate, isRoot) {
+ var element = scope.dom();
+ var stop = isFunction$1(isRoot) ? isRoot : constant(false);
+ while (element.parentNode) {
+ element = element.parentNode;
+ var el = Element$$1.fromDom(element);
+ if (predicate(el))
+ return Option.some(el);
+ else if (stop(el))
+ break;
+ }
+ return Option.none();
+ };
+ var closest = function (scope, predicate, isRoot) {
+ var is = function (scope) {
+ return predicate(scope);
+ };
+ return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
+ };
+ var sibling = function (scope, predicate) {
+ var element = scope.dom();
+ if (!element.parentNode)
+ return Option.none();
+ return child$1(Element$$1.fromDom(element.parentNode), function (x) {
+ return !$_36s5ie1axjjgweka1.eq(scope, x) && predicate(x);
+ });
+ };
+ var child$1 = function (scope, predicate) {
+ var result = find(scope.dom().childNodes, compose(predicate, Element$$1.fromDom));
+ return result.map(Element$$1.fromDom);
+ };
+ var descendant = function (scope, predicate) {
+ var descend = function (node) {
+ for (var i = 0; i < node.childNodes.length; i++) {
+ if (predicate(Element$$1.fromDom(node.childNodes[i])))
+ return Option.some(Element$$1.fromDom(node.childNodes[i]));
+ var res = descend(node.childNodes[i]);
+ if (res.isSome())
+ return res;
+ }
+ return Option.none();
+ };
+ return descend(scope.dom());
+ };
+ var $_df9cwz1bgjjgwekcd = {
+ first: first$1,
+ ancestor: ancestor,
+ closest: closest,
+ sibling: sibling,
+ child: child$1,
+ descendant: descendant
+ };
+
+ var first$2 = function (selector) {
+ return $_e63uk51bajjgwekbq.one(selector);
+ };
+ var ancestor$1 = function (scope, selector, isRoot) {
+ return $_df9cwz1bgjjgwekcd.ancestor(scope, function (e) {
+ return $_e63uk51bajjgwekbq.is(e, selector);
+ }, isRoot);
+ };
+ var sibling$1 = function (scope, selector) {
+ return $_df9cwz1bgjjgwekcd.sibling(scope, function (e) {
+ return $_e63uk51bajjgwekbq.is(e, selector);
+ });
+ };
+ var child$2 = function (scope, selector) {
+ return $_df9cwz1bgjjgwekcd.child(scope, function (e) {
+ return $_e63uk51bajjgwekbq.is(e, selector);
+ });
+ };
+ var descendant$1 = function (scope, selector) {
+ return $_e63uk51bajjgwekbq.one(selector, scope);
+ };
+ var closest$1 = function (scope, selector, isRoot) {
+ return ClosestOrAncestor($_e63uk51bajjgwekbq.is, ancestor$1, scope, selector, isRoot);
+ };
+ var $_6nlstg1bfjjgwekcb = {
+ first: first$2,
+ ancestor: ancestor$1,
+ sibling: sibling$1,
+ child: child$2,
+ descendant: descendant$1,
+ closest: closest$1
+ };
+
+ var toggleFormat = function (editor, fmt) {
+ return function () {
+ editor.execCommand('mceToggleFormat', false, fmt);
+ };
+ };
+ var addFormatChangedListener = function (editor, name, changed) {
+ var handler = function (state) {
+ changed(state, name);
+ };
+ if (editor.formatter) {
+ editor.formatter.formatChanged(name, handler);
+ } else {
+ editor.on('init', function () {
+ editor.formatter.formatChanged(name, handler);
+ });
+ }
+ };
+ var postRenderFormatToggle = function (editor, name) {
+ return function (e) {
+ addFormatChangedListener(editor, name, function (state) {
+ e.control.active(state);
+ });
+ };
+ };
+
+ var register = function (editor) {
+ var alignFormats = [
+ 'alignleft',
+ 'aligncenter',
+ 'alignright',
+ 'alignjustify'
+ ];
+ var defaultAlign = 'alignleft';
+ var alignMenuItems = [
+ {
+ text: 'Left',
+ icon: 'alignleft',
+ onclick: toggleFormat(editor, 'alignleft')
+ },
+ {
+ text: 'Center',
+ icon: 'aligncenter',
+ onclick: toggleFormat(editor, 'aligncenter')
+ },
+ {
+ text: 'Right',
+ icon: 'alignright',
+ onclick: toggleFormat(editor, 'alignright')
+ },
+ {
+ text: 'Justify',
+ icon: 'alignjustify',
+ onclick: toggleFormat(editor, 'alignjustify')
+ }
+ ];
+ editor.addMenuItem('align', {
+ text: 'Align',
+ menu: alignMenuItems
+ });
+ editor.addButton('align', {
+ type: 'menubutton',
+ icon: defaultAlign,
+ menu: alignMenuItems,
+ onShowMenu: function (e) {
+ var menu = e.control.menu;
+ global$4.each(alignFormats, function (formatName, idx) {
+ menu.items().eq(idx).each(function (item) {
+ return item.active(editor.formatter.match(formatName));
+ });
+ });
+ },
+ onPostRender: function (e) {
+ var ctrl = e.control;
+ global$4.each(alignFormats, function (formatName, idx) {
+ addFormatChangedListener(editor, formatName, function (state) {
+ ctrl.icon(defaultAlign);
+ if (state) {
+ ctrl.icon(formatName);
+ }
+ });
+ });
+ }
+ });
+ global$4.each({
+ alignleft: [
+ 'Align left',
+ 'JustifyLeft'
+ ],
+ aligncenter: [
+ 'Align center',
+ 'JustifyCenter'
+ ],
+ alignright: [
+ 'Align right',
+ 'JustifyRight'
+ ],
+ alignjustify: [
+ 'Justify',
+ 'JustifyFull'
+ ],
+ alignnone: [
+ 'No alignment',
+ 'JustifyNone'
+ ]
+ }, function (item, name) {
+ editor.addButton(name, {
+ active: false,
+ tooltip: item[0],
+ cmd: item[1],
+ onPostRender: postRenderFormatToggle(editor, name)
+ });
+ });
+ };
+ var $_7uh4c31bijjgwekcw = { register: register };
+
+ var getFirstFont = function (fontFamily) {
+ return fontFamily ? fontFamily.split(',')[0] : '';
+ };
+ var findMatchingValue = function (items, fontFamily) {
+ var font = fontFamily ? fontFamily.toLowerCase() : '';
+ var value;
+ global$4.each(items, function (item) {
+ if (item.value.toLowerCase() === font) {
+ value = item.value;
+ }
+ });
+ global$4.each(items, function (item) {
+ if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {
+ value = item.value;
+ }
+ });
+ return value;
+ };
+ var createFontNameListBoxChangeHandler = function (editor, items) {
+ return function () {
+ var self = this;
+ self.state.set('value', null);
+ editor.on('init nodeChange', function (e) {
+ var fontFamily = editor.queryCommandValue('FontName');
+ var match = findMatchingValue(items, fontFamily);
+ self.value(match ? match : null);
+ if (!match && fontFamily) {
+ self.text(getFirstFont(fontFamily));
+ }
+ });
+ };
+ };
+ var createFormats = function (formats) {
+ formats = formats.replace(/;$/, '').split(';');
+ var i = formats.length;
+ while (i--) {
+ formats[i] = formats[i].split('=');
+ }
+ return formats;
+ };
+ var getFontItems = function (editor) {
+ var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';
+ var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);
+ return global$4.map(fonts, function (font) {
+ return {
+ text: { raw: font[0] },
+ value: font[1],
+ textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''
+ };
+ });
+ };
+ var registerButtons = function (editor) {
+ editor.addButton('fontselect', function () {
+ var items = getFontItems(editor);
+ return {
+ type: 'listbox',
+ text: 'Font Family',
+ tooltip: 'Font Family',
+ values: items,
+ fixedWidth: true,
+ onPostRender: createFontNameListBoxChangeHandler(editor, items),
+ onselect: function (e) {
+ if (e.control.settings.value) {
+ editor.execCommand('FontName', false, e.control.settings.value);
+ }
+ }
+ };
+ });
+ };
+ var register$1 = function (editor) {
+ registerButtons(editor);
+ };
+ var $_2g5ce1bkjjgwekcz = { register: register$1 };
+
+ var round = function (number, precision) {
+ var factor = Math.pow(10, precision);
+ return Math.round(number * factor) / factor;
+ };
+ var toPt = function (fontSize, precision) {
+ if (/[0-9.]+px$/.test(fontSize)) {
+ return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
+ }
+ return fontSize;
+ };
+ var findMatchingValue$1 = function (items, pt, px) {
+ var value;
+ global$4.each(items, function (item) {
+ if (item.value === px) {
+ value = px;
+ } else if (item.value === pt) {
+ value = pt;
+ }
+ });
+ return value;
+ };
+ var createFontSizeListBoxChangeHandler = function (editor, items) {
+ return function () {
+ var self = this;
+ editor.on('init nodeChange', function (e) {
+ var px, pt, precision, match;
+ px = editor.queryCommandValue('FontSize');
+ if (px) {
+ for (precision = 3; !match && precision >= 0; precision--) {
+ pt = toPt(px, precision);
+ match = findMatchingValue$1(items, pt, px);
+ }
+ }
+ self.value(match ? match : null);
+ if (!match) {
+ self.text(pt);
+ }
+ });
+ };
+ };
+ var getFontSizeItems = function (editor) {
+ var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';
+ var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;
+ return global$4.map(fontsizeFormats.split(' '), function (item) {
+ var text = item, value = item;
+ var values = item.split('=');
+ if (values.length > 1) {
+ text = values[0];
+ value = values[1];
+ }
+ return {
+ text: text,
+ value: value
+ };
+ });
+ };
+ var registerButtons$1 = function (editor) {
+ editor.addButton('fontsizeselect', function () {
+ var items = getFontSizeItems(editor);
+ return {
+ type: 'listbox',
+ text: 'Font Sizes',
+ tooltip: 'Font Sizes',
+ values: items,
+ fixedWidth: true,
+ onPostRender: createFontSizeListBoxChangeHandler(editor, items),
+ onclick: function (e) {
+ if (e.control.settings.value) {
+ editor.execCommand('FontSize', false, e.control.settings.value);
+ }
+ }
+ };
+ });
+ };
+ var register$2 = function (editor) {
+ registerButtons$1(editor);
+ };
+ var $_b15nsk1bljjgwekd9 = { register: register$2 };
+
+ var hideMenuObjects = function (editor, menu) {
+ var count = menu.length;
+ global$4.each(menu, function (item) {
+ if (item.menu) {
+ item.hidden = hideMenuObjects(editor, item.menu) === 0;
+ }
+ var formatName = item.format;
+ if (formatName) {
+ item.hidden = !editor.formatter.canApply(formatName);
+ }
+ if (item.hidden) {
+ count--;
+ }
+ });
+ return count;
+ };
+ var hideFormatMenuItems = function (editor, menu) {
+ var count = menu.items().length;
+ menu.items().each(function (item) {
+ if (item.menu) {
+ item.visible(hideFormatMenuItems(editor, item.menu) > 0);
+ }
+ if (!item.menu && item.settings.menu) {
+ item.visible(hideMenuObjects(editor, item.settings.menu) > 0);
+ }
+ var formatName = item.settings.format;
+ if (formatName) {
+ item.visible(editor.formatter.canApply(formatName));
+ }
+ if (!item.visible()) {
+ count--;
+ }
+ });
+ return count;
+ };
+ var createFormatMenu = function (editor) {
+ var count = 0;
+ var newFormats = [];
+ var defaultStyleFormats = [
+ {
+ title: 'Headings',
+ items: [
+ {
+ title: 'Heading 1',
+ format: 'h1'
+ },
+ {
+ title: 'Heading 2',
+ format: 'h2'
+ },
+ {
+ title: 'Heading 3',
+ format: 'h3'
+ },
+ {
+ title: 'Heading 4',
+ format: 'h4'
+ },
+ {
+ title: 'Heading 5',
+ format: 'h5'
+ },
+ {
+ title: 'Heading 6',
+ format: 'h6'
+ }
+ ]
+ },
+ {
+ title: 'Inline',
+ items: [
+ {
+ title: 'Bold',
+ icon: 'bold',
+ format: 'bold'
+ },
+ {
+ title: 'Italic',
+ icon: 'italic',
+ format: 'italic'
+ },
+ {
+ title: 'Underline',
+ icon: 'underline',
+ format: 'underline'
+ },
+ {
+ title: 'Strikethrough',
+ icon: 'strikethrough',
+ format: 'strikethrough'
+ },
+ {
+ title: 'Superscript',
+ icon: 'superscript',
+ format: 'superscript'
+ },
+ {
+ title: 'Subscript',
+ icon: 'subscript',
+ format: 'subscript'
+ },
+ {
+ title: 'Code',
+ icon: 'code',
+ format: 'code'
+ }
+ ]
+ },
+ {
+ title: 'Blocks',
+ items: [
+ {
+ title: 'Paragraph',
+ format: 'p'
+ },
+ {
+ title: 'Blockquote',
+ format: 'blockquote'
+ },
+ {
+ title: 'Div',
+ format: 'div'
+ },
+ {
+ title: 'Pre',
+ format: 'pre'
+ }
+ ]
+ },
+ {
+ title: 'Alignment',
+ items: [
+ {
+ title: 'Left',
+ icon: 'alignleft',
+ format: 'alignleft'
+ },
+ {
+ title: 'Center',
+ icon: 'aligncenter',
+ format: 'aligncenter'
+ },
+ {
+ title: 'Right',
+ icon: 'alignright',
+ format: 'alignright'
+ },
+ {
+ title: 'Justify',
+ icon: 'alignjustify',
+ format: 'alignjustify'
+ }
+ ]
+ }
+ ];
+ var createMenu = function (formats) {
+ var menu = [];
+ if (!formats) {
+ return;
+ }
+ global$4.each(formats, function (format) {
+ var menuItem = {
+ text: format.title,
+ icon: format.icon
+ };
+ if (format.items) {
+ menuItem.menu = createMenu(format.items);
+ } else {
+ var formatName = format.format || 'custom' + count++;
+ if (!format.format) {
+ format.name = formatName;
+ newFormats.push(format);
+ }
+ menuItem.format = formatName;
+ menuItem.cmd = format.cmd;
+ }
+ menu.push(menuItem);
+ });
+ return menu;
+ };
+ var createStylesMenu = function () {
+ var menu;
+ if (editor.settings.style_formats_merge) {
+ if (editor.settings.style_formats) {
+ menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));
+ } else {
+ menu = createMenu(defaultStyleFormats);
+ }
+ } else {
+ menu = createMenu(editor.settings.style_formats || defaultStyleFormats);
+ }
+ return menu;
+ };
+ editor.on('init', function () {
+ global$4.each(newFormats, function (format) {
+ editor.formatter.register(format.name, format);
+ });
+ });
+ return {
+ type: 'menu',
+ items: createStylesMenu(),
+ onPostRender: function (e) {
+ editor.fire('renderFormatsMenu', { control: e.control });
+ },
+ itemDefaults: {
+ preview: true,
+ textStyle: function () {
+ if (this.settings.format) {
+ return editor.formatter.getCssText(this.settings.format);
+ }
+ },
+ onPostRender: function () {
+ var self = this;
+ self.parent().on('show', function () {
+ var formatName, command;
+ formatName = self.settings.format;
+ if (formatName) {
+ self.disabled(!editor.formatter.canApply(formatName));
+ self.active(editor.formatter.match(formatName));
+ }
+ command = self.settings.cmd;
+ if (command) {
+ self.active(editor.queryCommandState(command));
+ }
+ });
+ },
+ onclick: function () {
+ if (this.settings.format) {
+ toggleFormat(editor, this.settings.format)();
+ }
+ if (this.settings.cmd) {
+ editor.execCommand(this.settings.cmd);
+ }
+ }
+ }
+ };
+ };
+ var registerMenuItems = function (editor, formatMenu) {
+ editor.addMenuItem('formats', {
+ text: 'Formats',
+ menu: formatMenu
+ });
+ };
+ var registerButtons$2 = function (editor, formatMenu) {
+ editor.addButton('styleselect', {
+ type: 'menubutton',
+ text: 'Formats',
+ menu: formatMenu,
+ onShowMenu: function () {
+ if (editor.settings.style_formats_autohide) {
+ hideFormatMenuItems(editor, this.menu);
+ }
+ }
+ });
+ };
+ var register$3 = function (editor) {
+ var formatMenu = createFormatMenu(editor);
+ registerMenuItems(editor, formatMenu);
+ registerButtons$2(editor, formatMenu);
+ };
+ var $_9qaa1r1bmjjgwekdc = { register: register$3 };
+
+ var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';
+ var createFormats$1 = function (formats) {
+ formats = formats.replace(/;$/, '').split(';');
+ var i = formats.length;
+ while (i--) {
+ formats[i] = formats[i].split('=');
+ }
+ return formats;
+ };
+ var createListBoxChangeHandler = function (editor, items, formatName) {
+ return function () {
+ var self = this;
+ editor.on('nodeChange', function (e) {
+ var formatter = editor.formatter;
+ var value = null;
+ global$4.each(e.parents, function (node) {
+ global$4.each(items, function (item) {
+ if (formatName) {
+ if (formatter.matchNode(node, formatName, { value: item.value })) {
+ value = item.value;
+ }
+ } else {
+ if (formatter.matchNode(node, item.value)) {
+ value = item.value;
+ }
+ }
+ if (value) {
+ return false;
+ }
+ });
+ if (value) {
+ return false;
+ }
+ });
+ self.value(value);
+ });
+ };
+ };
+ var lazyFormatSelectBoxItems = function (editor, blocks) {
+ return function () {
+ var items = [];
+ global$4.each(blocks, function (block) {
+ items.push({
+ text: block[0],
+ value: block[1],
+ textStyle: function () {
+ return editor.formatter.getCssText(block[1]);
+ }
+ });
+ });
+ return {
+ type: 'listbox',
+ text: blocks[0][0],
+ values: items,
+ fixedWidth: true,
+ onselect: function (e) {
+ if (e.control) {
+ var fmt = e.control.value();
+ toggleFormat(editor, fmt)();
+ }
+ },
+ onPostRender: createListBoxChangeHandler(editor, items)
};
-
- var showPanel = function (panel) {
- if (panel) {
- panel.show();
+ };
+ };
+ var buildMenuItems = function (editor, blocks) {
+ return global$4.map(blocks, function (block) {
+ return {
+ text: block[0],
+ onclick: toggleFormat(editor, block[1]),
+ textStyle: function () {
+ return editor.formatter.getCssText(block[1]);
}
};
+ });
+ };
+ var register$4 = function (editor) {
+ var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);
+ editor.addMenuItem('blockformats', {
+ text: 'Blocks',
+ menu: buildMenuItems(editor, blocks)
+ });
+ editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));
+ };
+ var $_a3xw9u1bnjjgwekdh = { register: register$4 };
+
+ var createCustomMenuItems = function (editor, names) {
+ var items, nameList;
+ if (typeof names === 'string') {
+ nameList = names.split(' ');
+ } else if (global$4.isArray(names)) {
+ return flatten$1(global$4.map(names, function (names) {
+ return createCustomMenuItems(editor, names);
+ }));
+ }
+ items = global$4.grep(nameList, function (name) {
+ return name === '|' || name in editor.menuItems;
+ });
+ return global$4.map(items, function (name) {
+ return name === '|' ? { text: '-' } : editor.menuItems[name];
+ });
+ };
+ var isSeparator = function (menuItem) {
+ return menuItem && menuItem.text === '-';
+ };
+ var trimMenuItems = function (menuItems) {
+ var menuItems2 = filter(menuItems, function (menuItem, i, menuItems) {
+ return !isSeparator(menuItem) || !isSeparator(menuItems[i - 1]);
+ });
+ return filter(menuItems2, function (menuItem, i, menuItems) {
+ return !isSeparator(menuItem) || i > 0 && i < menuItems.length - 1;
+ });
+ };
+ var createContextMenuItems = function (editor, context) {
+ var outputMenuItems = [{ text: '-' }];
+ var menuItems = global$4.grep(editor.menuItems, function (menuItem) {
+ return menuItem.context === context;
+ });
+ global$4.each(menuItems, function (menuItem) {
+ if (menuItem.separator === 'before') {
+ outputMenuItems.push({ text: '|' });
+ }
+ if (menuItem.prependToContext) {
+ outputMenuItems.unshift(menuItem);
+ } else {
+ outputMenuItems.push(menuItem);
+ }
+ if (menuItem.separator === 'after') {
+ outputMenuItems.push({ text: '|' });
+ }
+ });
+ return outputMenuItems;
+ };
+ var createInsertMenu = function (editor) {
+ var insertButtonItems = editor.settings.insert_button_items;
+ if (insertButtonItems) {
+ return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));
+ } else {
+ return trimMenuItems(createContextMenuItems(editor, 'insert'));
+ }
+ };
+ var registerButtons$3 = function (editor) {
+ editor.addButton('insert', {
+ type: 'menubutton',
+ icon: 'insert',
+ menu: [],
+ oncreatemenu: function () {
+ this.menu.add(createInsertMenu(editor));
+ this.menu.renderNew();
+ }
+ });
+ };
+ var register$5 = function (editor) {
+ registerButtons$3(editor);
+ };
+ var $_dvqvtt1bojjgwekdj = { register: register$5 };
+
+ var registerFormatButtons = function (editor) {
+ global$4.each({
+ bold: 'Bold',
+ italic: 'Italic',
+ underline: 'Underline',
+ strikethrough: 'Strikethrough',
+ subscript: 'Subscript',
+ superscript: 'Superscript'
+ }, function (text, name) {
+ editor.addButton(name, {
+ active: false,
+ tooltip: text,
+ onPostRender: postRenderFormatToggle(editor, name),
+ onclick: toggleFormat(editor, name)
+ });
+ });
+ };
+ var registerCommandButtons = function (editor) {
+ global$4.each({
+ outdent: [
+ 'Decrease indent',
+ 'Outdent'
+ ],
+ indent: [
+ 'Increase indent',
+ 'Indent'
+ ],
+ cut: [
+ 'Cut',
+ 'Cut'
+ ],
+ copy: [
+ 'Copy',
+ 'Copy'
+ ],
+ paste: [
+ 'Paste',
+ 'Paste'
+ ],
+ help: [
+ 'Help',
+ 'mceHelp'
+ ],
+ selectall: [
+ 'Select all',
+ 'SelectAll'
+ ],
+ visualaid: [
+ 'Visual aids',
+ 'mceToggleVisualAid'
+ ],
+ newdocument: [
+ 'New document',
+ 'mceNewDocument'
+ ],
+ removeformat: [
+ 'Clear formatting',
+ 'RemoveFormat'
+ ],
+ remove: [
+ 'Remove',
+ 'Delete'
+ ]
+ }, function (item, name) {
+ editor.addButton(name, {
+ tooltip: item[0],
+ cmd: item[1]
+ });
+ });
+ };
+ var registerCommandToggleButtons = function (editor) {
+ global$4.each({
+ blockquote: [
+ 'Blockquote',
+ 'mceBlockQuote'
+ ],
+ subscript: [
+ 'Subscript',
+ 'Subscript'
+ ],
+ superscript: [
+ 'Superscript',
+ 'Superscript'
+ ]
+ }, function (item, name) {
+ editor.addButton(name, {
+ active: false,
+ tooltip: item[0],
+ cmd: item[1],
+ onPostRender: postRenderFormatToggle(editor, name)
+ });
+ });
+ };
+ var registerButtons$4 = function (editor) {
+ registerFormatButtons(editor);
+ registerCommandButtons(editor);
+ registerCommandToggleButtons(editor);
+ };
+ var registerMenuItems$1 = function (editor) {
+ global$4.each({
+ bold: [
+ 'Bold',
+ 'Bold',
+ 'Meta+B'
+ ],
+ italic: [
+ 'Italic',
+ 'Italic',
+ 'Meta+I'
+ ],
+ underline: [
+ 'Underline',
+ 'Underline',
+ 'Meta+U'
+ ],
+ strikethrough: [
+ 'Strikethrough',
+ 'Strikethrough'
+ ],
+ subscript: [
+ 'Subscript',
+ 'Subscript'
+ ],
+ superscript: [
+ 'Superscript',
+ 'Superscript'
+ ],
+ removeformat: [
+ 'Clear formatting',
+ 'RemoveFormat'
+ ],
+ newdocument: [
+ 'New document',
+ 'mceNewDocument'
+ ],
+ cut: [
+ 'Cut',
+ 'Cut',
+ 'Meta+X'
+ ],
+ copy: [
+ 'Copy',
+ 'Copy',
+ 'Meta+C'
+ ],
+ paste: [
+ 'Paste',
+ 'Paste',
+ 'Meta+V'
+ ],
+ selectall: [
+ 'Select all',
+ 'SelectAll',
+ 'Meta+A'
+ ]
+ }, function (item, name) {
+ editor.addMenuItem(name, {
+ text: item[0],
+ icon: name,
+ shortcut: item[2],
+ cmd: item[1]
+ });
+ });
+ editor.addMenuItem('codeformat', {
+ text: 'Code',
+ icon: 'code',
+ onclick: toggleFormat(editor, 'code')
+ });
+ };
+ var register$6 = function (editor) {
+ registerButtons$4(editor);
+ registerMenuItems$1(editor);
+ };
+ var $_2ywvy11bpjjgwekdn = { register: register$6 };
- var movePanelTo = function (panel, pos) {
- panel.moveTo(pos.x, pos.y);
+ var toggleUndoRedoState = function (editor, type) {
+ return function () {
+ var self = this;
+ var checkState = function () {
+ var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';
+ return editor.undoManager ? editor.undoManager[typeFn]() : false;
};
+ self.disabled(!checkState());
+ editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {
+ self.disabled(editor.readonly || !checkState());
+ });
+ };
+ };
+ var registerMenuItems$2 = function (editor) {
+ editor.addMenuItem('undo', {
+ text: 'Undo',
+ icon: 'undo',
+ shortcut: 'Meta+Z',
+ onPostRender: toggleUndoRedoState(editor, 'undo'),
+ cmd: 'undo'
+ });
+ editor.addMenuItem('redo', {
+ text: 'Redo',
+ icon: 'redo',
+ shortcut: 'Meta+Y',
+ onPostRender: toggleUndoRedoState(editor, 'redo'),
+ cmd: 'redo'
+ });
+ };
+ var registerButtons$5 = function (editor) {
+ editor.addButton('undo', {
+ tooltip: 'Undo',
+ onPostRender: toggleUndoRedoState(editor, 'undo'),
+ cmd: 'undo'
+ });
+ editor.addButton('redo', {
+ tooltip: 'Redo',
+ onPostRender: toggleUndoRedoState(editor, 'redo'),
+ cmd: 'redo'
+ });
+ };
+ var register$7 = function (editor) {
+ registerMenuItems$2(editor);
+ registerButtons$5(editor);
+ };
+ var $_5qfrkx1bqjjgwekdq = { register: register$7 };
- var togglePositionClass = function (panel, relPos) {
- relPos = relPos ? relPos.substr(0, 2) : '';
+ var toggleVisualAidState = function (editor) {
+ return function () {
+ var self = this;
+ editor.on('VisualAid', function (e) {
+ self.active(e.hasVisual);
+ });
+ self.active(editor.hasVisual);
+ };
+ };
+ var registerMenuItems$3 = function (editor) {
+ editor.addMenuItem('visualaid', {
+ text: 'Visual aids',
+ selectable: true,
+ onPostRender: toggleVisualAidState(editor),
+ cmd: 'mceToggleVisualAid'
+ });
+ };
+ var register$8 = function (editor) {
+ registerMenuItems$3(editor);
+ };
+ var $_ebb6rc1brjjgwekdr = { register: register$8 };
- Tools.each({
- t: 'down',
- b: 'up',
- c: 'center'
- }, function (cls, pos) {
- panel.classes.toggle('arrow-' + cls, pos === relPos.substr(0, 1));
+ var setupEnvironment = function () {
+ Widget.tooltips = !global$1.iOS;
+ Control$1.translate = function (text) {
+ return global$5.translate(text);
+ };
+ };
+ var setupUiContainer = function (editor) {
+ if (editor.settings.ui_container) {
+ global$1.container = $_6nlstg1bfjjgwekcb.descendant(Element$$1.fromDom(document.body), editor.settings.ui_container).fold(constant(null), function (elm) {
+ return elm.dom();
+ });
+ }
+ };
+ var setupRtlMode = function (editor) {
+ if (editor.rtl) {
+ Control$1.rtl = true;
+ }
+ };
+ var setupHideFloatPanels = function (editor) {
+ editor.on('mousedown', function () {
+ FloatPanel.hideAll();
+ });
+ };
+ var setup = function (editor) {
+ setupRtlMode(editor);
+ setupHideFloatPanels(editor);
+ setupUiContainer(editor);
+ setupEnvironment();
+ $_a3xw9u1bnjjgwekdh.register(editor);
+ $_7uh4c31bijjgwekcw.register(editor);
+ $_2ywvy11bpjjgwekdn.register(editor);
+ $_5qfrkx1bqjjgwekdq.register(editor);
+ $_b15nsk1bljjgwekd9.register(editor);
+ $_2g5ce1bkjjgwekcz.register(editor);
+ $_9qaa1r1bmjjgwekdc.register(editor);
+ $_ebb6rc1brjjgwekdr.register(editor);
+ $_dvqvtt1bojjgwekdj.register(editor);
+ };
+ var $_gg6ikw1bejjgwekc5 = { setup: setup };
+
+ var GridLayout = AbsoluteLayout.extend({
+ recalc: function (container) {
+ var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;
+ var colWidths = [];
+ var rowHeights = [];
+ var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;
+ settings = container.settings;
+ items = container.items().filter(':visible');
+ contLayoutRect = container.layoutRect();
+ cols = settings.columns || Math.ceil(Math.sqrt(items.length));
+ rows = Math.ceil(items.length / cols);
+ spacingH = settings.spacingH || settings.spacing || 0;
+ spacingV = settings.spacingV || settings.spacing || 0;
+ alignH = settings.alignH || settings.align;
+ alignV = settings.alignV || settings.align;
+ contPaddingBox = container.paddingBox;
+ reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();
+ if (alignH && typeof alignH === 'string') {
+ alignH = [alignH];
+ }
+ if (alignV && typeof alignV === 'string') {
+ alignV = [alignV];
+ }
+ for (x = 0; x < cols; x++) {
+ colWidths.push(0);
+ }
+ for (y = 0; y < rows; y++) {
+ rowHeights.push(0);
+ }
+ for (y = 0; y < rows; y++) {
+ for (x = 0; x < cols; x++) {
+ ctrl = items[y * cols + x];
+ if (!ctrl) {
+ break;
+ }
+ ctrlLayoutRect = ctrl.layoutRect();
+ ctrlMinWidth = ctrlLayoutRect.minW;
+ ctrlMinHeight = ctrlLayoutRect.minH;
+ colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];
+ rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];
+ }
+ }
+ availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;
+ for (maxX = 0, x = 0; x < cols; x++) {
+ maxX += colWidths[x] + (x > 0 ? spacingH : 0);
+ availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];
+ }
+ availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;
+ for (maxY = 0, y = 0; y < rows; y++) {
+ maxY += rowHeights[y] + (y > 0 ? spacingV : 0);
+ availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];
+ }
+ maxX += contPaddingBox.left + contPaddingBox.right;
+ maxY += contPaddingBox.top + contPaddingBox.bottom;
+ rect = {};
+ rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);
+ rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);
+ rect.contentW = rect.minW - contLayoutRect.deltaW;
+ rect.contentH = rect.minH - contLayoutRect.deltaH;
+ rect.minW = Math.min(rect.minW, contLayoutRect.maxW);
+ rect.minH = Math.min(rect.minH, contLayoutRect.maxH);
+ rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);
+ rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);
+ if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
+ rect.w = rect.minW;
+ rect.h = rect.minH;
+ container.layoutRect(rect);
+ this.recalc(container);
+ if (container._lastRect === null) {
+ var parentCtrl = container.parent();
+ if (parentCtrl) {
+ parentCtrl._lastRect = null;
+ parentCtrl.recalc();
+ }
+ }
+ return;
+ }
+ if (contLayoutRect.autoResize) {
+ rect = container.layoutRect(rect);
+ rect.contentW = rect.minW - contLayoutRect.deltaW;
+ rect.contentH = rect.minH - contLayoutRect.deltaH;
+ }
+ var flexV;
+ if (settings.packV === 'start') {
+ flexV = 0;
+ } else {
+ flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;
+ }
+ var totalFlex = 0;
+ var flexWidths = settings.flexWidths;
+ if (flexWidths) {
+ for (x = 0; x < flexWidths.length; x++) {
+ totalFlex += flexWidths[x];
+ }
+ } else {
+ totalFlex = cols;
+ }
+ var ratio = availableWidth / totalFlex;
+ for (x = 0; x < cols; x++) {
+ colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;
+ }
+ posY = contPaddingBox.top;
+ for (y = 0; y < rows; y++) {
+ posX = contPaddingBox.left;
+ height = rowHeights[y] + flexV;
+ for (x = 0; x < cols; x++) {
+ if (reverseRows) {
+ idx = y * cols + cols - 1 - x;
+ } else {
+ idx = y * cols + x;
+ }
+ ctrl = items[idx];
+ if (!ctrl) {
+ break;
+ }
+ ctrlSettings = ctrl.settings;
+ ctrlLayoutRect = ctrl.layoutRect();
+ width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);
+ ctrlLayoutRect.x = posX;
+ ctrlLayoutRect.y = posY;
+ align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);
+ if (align === 'center') {
+ ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;
+ } else if (align === 'right') {
+ ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;
+ } else if (align === 'stretch') {
+ ctrlLayoutRect.w = width;
+ }
+ align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);
+ if (align === 'center') {
+ ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;
+ } else if (align === 'bottom') {
+ ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;
+ } else if (align === 'stretch') {
+ ctrlLayoutRect.h = height;
+ }
+ ctrl.layoutRect(ctrlLayoutRect);
+ posX += width + spacingH;
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ }
+ posY += height + spacingV;
+ }
+ }
+ });
+
+ var Iframe = Widget.extend({
+ renderHtml: function () {
+ var self = this;
+ self.classes.add('iframe');
+ self.canFocus = false;
+ return '<iframe id="' + self._id + '" class="' + self.classes + '" tabindex="-1" src="' + (self.settings.url || 'javascript:\'\'') + '" frameborder="0"></iframe>';
+ },
+ src: function (src) {
+ this.getEl().src = src;
+ },
+ html: function (html, callback) {
+ var self = this, body = this.getEl().contentWindow.document.body;
+ if (!body) {
+ global$3.setTimeout(function () {
+ self.html(html);
+ });
+ } else {
+ body.innerHTML = html;
+ if (callback) {
+ callback();
+ }
+ }
+ return this;
+ }
+ });
+
+ var InfoBox = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.classes.add('widget').add('infobox');
+ self.canFocus = false;
+ },
+ severity: function (level) {
+ this.classes.remove('error');
+ this.classes.remove('warning');
+ this.classes.remove('success');
+ this.classes.add(level);
+ },
+ help: function (state) {
+ this.state.set('help', state);
+ },
+ renderHtml: function () {
+ var self = this, prefix = self.classPrefix;
+ return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + self.encode(self.state.get('text')) + '<button role="button" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-help"></i>' + '</button>' + '</div>' + '</div>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:text', function (e) {
+ self.getEl('body').firstChild.data = self.encode(e.value);
+ if (self.state.get('rendered')) {
+ self.updateLayoutRect();
+ }
+ });
+ self.state.on('change:help', function (e) {
+ self.classes.toggle('has-help', e.value);
+ if (self.state.get('rendered')) {
+ self.updateLayoutRect();
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var Label = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.classes.add('widget').add('label');
+ self.canFocus = false;
+ if (settings.multiline) {
+ self.classes.add('autoscroll');
+ }
+ if (settings.strong) {
+ self.classes.add('strong');
+ }
+ },
+ initLayoutRect: function () {
+ var self = this, layoutRect = self._super();
+ if (self.settings.multiline) {
+ var size = funcs.getSize(self.getEl());
+ if (size.width > layoutRect.maxW) {
+ layoutRect.minW = layoutRect.maxW;
+ self.classes.add('multiline');
+ }
+ self.getEl().style.width = layoutRect.minW + 'px';
+ layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);
+ }
+ return layoutRect;
+ },
+ repaint: function () {
+ var self = this;
+ if (!self.settings.multiline) {
+ self.getEl().style.lineHeight = self.layoutRect().h + 'px';
+ }
+ return self._super();
+ },
+ severity: function (level) {
+ this.classes.remove('error');
+ this.classes.remove('warning');
+ this.classes.remove('success');
+ this.classes.add(level);
+ },
+ renderHtml: function () {
+ var self = this;
+ var targetCtrl, forName, forId = self.settings.forId;
+ var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));
+ if (!forId && (forName = self.settings.forName)) {
+ targetCtrl = self.getRoot().find('#' + forName)[0];
+ if (targetCtrl) {
+ forId = targetCtrl._id;
+ }
+ }
+ if (forId) {
+ return '<label id="' + self._id + '" class="' + self.classes + '"' + (forId ? ' for="' + forId + '"' : '') + '>' + text + '</label>';
+ }
+ return '<span id="' + self._id + '" class="' + self.classes + '">' + text + '</span>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:text', function (e) {
+ self.innerHtml(self.encode(e.value));
+ if (self.state.get('rendered')) {
+ self.updateLayoutRect();
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var Toolbar$1 = Container.extend({
+ Defaults: {
+ role: 'toolbar',
+ layout: 'flow'
+ },
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.classes.add('toolbar');
+ },
+ postRender: function () {
+ var self = this;
+ self.items().each(function (ctrl) {
+ ctrl.classes.add('toolbar-item');
+ });
+ return self._super();
+ }
+ });
+
+ var MenuBar = Toolbar$1.extend({
+ Defaults: {
+ role: 'menubar',
+ containerCls: 'menubar',
+ ariaRoot: true,
+ defaults: { type: 'menubutton' }
+ }
+ });
+
+ function isChildOf$1(node, parent$$1) {
+ while (node) {
+ if (parent$$1 === node) {
+ return true;
+ }
+ node = node.parentNode;
+ }
+ return false;
+ }
+ var MenuButton = Button.extend({
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._renderOpen = true;
+ self$$1._super(settings);
+ settings = self$$1.settings;
+ self$$1.classes.add('menubtn');
+ if (settings.fixedWidth) {
+ self$$1.classes.add('fixed-width');
+ }
+ self$$1.aria('haspopup', true);
+ self$$1.state.set('menu', settings.menu || self$$1.render());
+ },
+ showMenu: function (toggle) {
+ var self$$1 = this;
+ var menu;
+ if (self$$1.menu && self$$1.menu.visible() && toggle !== false) {
+ return self$$1.hideMenu();
+ }
+ if (!self$$1.menu) {
+ menu = self$$1.state.get('menu') || [];
+ self$$1.classes.add('opened');
+ if (menu.length) {
+ menu = {
+ type: 'menu',
+ animate: true,
+ items: menu
+ };
+ } else {
+ menu.type = menu.type || 'menu';
+ menu.animate = true;
+ }
+ if (!menu.renderTo) {
+ self$$1.menu = global$11.create(menu).parent(self$$1).renderTo();
+ } else {
+ self$$1.menu = menu.parent(self$$1).show().renderTo();
+ }
+ self$$1.fire('createmenu');
+ self$$1.menu.reflow();
+ self$$1.menu.on('cancel', function (e) {
+ if (e.control.parent() === self$$1.menu) {
+ e.stopPropagation();
+ self$$1.focus();
+ self$$1.hideMenu();
+ }
});
+ self$$1.menu.on('select', function () {
+ self$$1.focus();
+ });
+ self$$1.menu.on('show hide', function (e) {
+ if (e.control === self$$1.menu) {
+ self$$1.activeMenu(e.type === 'show');
+ self$$1.classes.toggle('opened', e.type === 'show');
+ }
+ self$$1.aria('expanded', e.type === 'show');
+ }).fire('show');
+ }
+ self$$1.menu.show();
+ self$$1.menu.layoutRect({ w: self$$1.layoutRect().w });
+ self$$1.menu.repaint();
+ self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [
+ 'br-tr',
+ 'tr-br'
+ ] : [
+ 'bl-tl',
+ 'tl-bl'
+ ]);
+ self$$1.fire('showmenu');
+ },
+ hideMenu: function () {
+ var self$$1 = this;
+ if (self$$1.menu) {
+ self$$1.menu.items().each(function (item) {
+ if (item.hideMenu) {
+ item.hideMenu();
+ }
+ });
+ self$$1.menu.hide();
+ }
+ },
+ activeMenu: function (state) {
+ this.classes.toggle('active', state);
+ },
+ renderHtml: function () {
+ var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix;
+ var icon = self$$1.settings.icon, image;
+ var text = self$$1.state.get('text');
+ var textHtml = '';
+ image = self$$1.settings.image;
+ if (image) {
+ icon = 'none';
+ if (typeof image !== 'string') {
+ image = window.getSelection ? image[0] : image[1];
+ }
+ image = ' style="background-image: url(\'' + image + '\')"';
+ } else {
+ image = '';
+ }
+ if (text) {
+ self$$1.classes.add('btn-has-text');
+ textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>';
+ }
+ icon = self$$1.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
+ self$$1.aria('role', self$$1.parent() instanceof MenuBar ? 'menuitem' : 'button');
+ return '<div id="' + id + '" class="' + self$$1.classes + '" tabindex="-1" aria-labelledby="' + id + '">' + '<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
+ },
+ postRender: function () {
+ var self$$1 = this;
+ self$$1.on('click', function (e) {
+ if (e.control === self$$1 && isChildOf$1(e.target, self$$1.getEl())) {
+ self$$1.focus();
+ self$$1.showMenu(!e.aria);
+ if (e.aria) {
+ self$$1.menu.items().filter(':visible')[0].focus();
+ }
+ }
+ });
+ self$$1.on('mouseenter', function (e) {
+ var overCtrl = e.control;
+ var parent$$1 = self$$1.parent();
+ var hasVisibleSiblingMenu;
+ if (overCtrl && parent$$1 && overCtrl instanceof MenuButton && overCtrl.parent() === parent$$1) {
+ parent$$1.items().filter('MenuButton').each(function (ctrl) {
+ if (ctrl.hideMenu && ctrl !== overCtrl) {
+ if (ctrl.menu && ctrl.menu.visible()) {
+ hasVisibleSiblingMenu = true;
+ }
+ ctrl.hideMenu();
+ }
+ });
+ if (hasVisibleSiblingMenu) {
+ overCtrl.focus();
+ overCtrl.showMenu();
+ }
+ }
+ });
+ return self$$1._super();
+ },
+ bindStates: function () {
+ var self$$1 = this;
+ self$$1.state.on('change:menu', function () {
+ if (self$$1.menu) {
+ self$$1.menu.remove();
+ }
+ self$$1.menu = null;
+ });
+ return self$$1._super();
+ },
+ remove: function () {
+ this._super();
+ if (this.menu) {
+ this.menu.remove();
+ }
+ }
+ });
+
+ function Throbber (elm, inline) {
+ var self = this;
+ var state;
+ var classPrefix = Control$1.classPrefix;
+ var timer;
+ self.show = function (time, callback) {
+ function render() {
+ if (state) {
+ global$7(elm).append('<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>');
+ if (callback) {
+ callback();
+ }
+ }
+ }
+ self.hide();
+ state = true;
+ if (time) {
+ timer = global$3.setTimeout(render, time);
+ } else {
+ render();
+ }
+ return self;
+ };
+ self.hide = function () {
+ var child = elm.lastChild;
+ global$3.clearTimeout(timer);
+ if (child && child.className.indexOf('throbber') !== -1) {
+ child.parentNode.removeChild(child);
+ }
+ state = false;
+ return self;
+ };
+ }
- if (relPos === 'cr') {
- panel.classes.toggle('arrow-left', true);
- panel.classes.toggle('arrow-right', false);
- } else if (relPos === 'cl') {
- panel.classes.toggle('arrow-left', true);
- panel.classes.toggle('arrow-right', true);
+ var Menu = FloatPanel.extend({
+ Defaults: {
+ defaultType: 'menuitem',
+ border: 1,
+ layout: 'stack',
+ role: 'application',
+ bodyRole: 'menu',
+ ariaRoot: true
+ },
+ init: function (settings) {
+ var self = this;
+ settings.autohide = true;
+ settings.constrainToViewport = true;
+ if (typeof settings.items === 'function') {
+ settings.itemsFactory = settings.items;
+ settings.items = [];
+ }
+ if (settings.itemDefaults) {
+ var items = settings.items;
+ var i = items.length;
+ while (i--) {
+ items[i] = global$4.extend({}, settings.itemDefaults, items[i]);
+ }
+ }
+ self._super(settings);
+ self.classes.add('menu');
+ if (settings.animate && global$1.ie !== 11) {
+ self.classes.add('animate');
+ }
+ },
+ repaint: function () {
+ this.classes.toggle('menu-align', true);
+ this._super();
+ this.getEl().style.height = '';
+ this.getEl('body').style.height = '';
+ return this;
+ },
+ cancel: function () {
+ var self = this;
+ self.hideAll();
+ self.fire('select');
+ },
+ load: function () {
+ var self = this;
+ var time, factory;
+ function hideThrobber() {
+ if (self.throbber) {
+ self.throbber.hide();
+ self.throbber = null;
+ }
+ }
+ factory = self.settings.itemsFactory;
+ if (!factory) {
+ return;
+ }
+ if (!self.throbber) {
+ self.throbber = new Throbber(self.getEl('body'), true);
+ if (self.items().length === 0) {
+ self.throbber.show();
+ self.fire('loading');
+ } else {
+ self.throbber.show(100, function () {
+ self.items().remove();
+ self.fire('loading');
+ });
+ }
+ self.on('hide close', hideThrobber);
+ }
+ self.requestTime = time = new Date().getTime();
+ self.settings.itemsFactory(function (items) {
+ if (items.length === 0) {
+ self.hide();
+ return;
+ }
+ if (self.requestTime !== time) {
+ return;
+ }
+ self.getEl().style.width = '';
+ self.getEl('body').style.width = '';
+ hideThrobber();
+ self.items().remove();
+ self.getEl('body').innerHTML = '';
+ self.add(items);
+ self.renderNew();
+ self.fire('loaded');
+ });
+ },
+ hideAll: function () {
+ var self = this;
+ this.find('menuitem').exec('hideMenu');
+ return self._super();
+ },
+ preRender: function () {
+ var self = this;
+ self.items().each(function (ctrl) {
+ var settings = ctrl.settings;
+ if (settings.icon || settings.image || settings.selectable) {
+ self._hasIcons = true;
+ return false;
+ }
+ });
+ if (self.settings.itemsFactory) {
+ self.on('postrender', function () {
+ if (self.settings.itemsFactory) {
+ self.load();
+ }
+ });
+ }
+ self.on('show hide', function (e) {
+ if (e.control === self) {
+ if (e.type === 'show') {
+ global$3.setTimeout(function () {
+ self.classes.add('in');
+ }, 0);
+ } else {
+ self.classes.remove('in');
+ }
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var ListBox = MenuButton.extend({
+ init: function (settings) {
+ var self = this;
+ var values, selected, selectedText, lastItemCtrl;
+ function setSelected(menuValues) {
+ for (var i = 0; i < menuValues.length; i++) {
+ selected = menuValues[i].selected || settings.value === menuValues[i].value;
+ if (selected) {
+ selectedText = selectedText || menuValues[i].text;
+ self.state.set('value', menuValues[i].value);
+ return true;
+ }
+ if (menuValues[i].menu) {
+ if (setSelected(menuValues[i].menu)) {
+ return true;
+ }
+ }
+ }
+ }
+ self._super(settings);
+ settings = self.settings;
+ self._values = values = settings.values;
+ if (values) {
+ if (typeof settings.value !== 'undefined') {
+ setSelected(values);
+ }
+ if (!selected && values.length > 0) {
+ selectedText = values[0].text;
+ self.state.set('value', values[0].value);
+ }
+ self.state.set('menu', values);
+ }
+ self.state.set('text', settings.text || selectedText);
+ self.classes.add('listbox');
+ self.on('select', function (e) {
+ var ctrl = e.control;
+ if (lastItemCtrl) {
+ e.lastControl = lastItemCtrl;
+ }
+ if (settings.multiple) {
+ ctrl.active(!ctrl.active());
+ } else {
+ self.value(e.control.value());
+ }
+ lastItemCtrl = ctrl;
+ });
+ },
+ value: function (value) {
+ if (arguments.length === 0) {
+ return this.state.get('value');
+ }
+ if (typeof value === 'undefined') {
+ return this;
+ }
+ if (this.settings.values) {
+ var matchingValues = global$4.grep(this.settings.values, function (a) {
+ return a.value === value;
+ });
+ if (matchingValues.length > 0) {
+ this.state.set('value', value);
+ } else if (value === null) {
+ this.state.set('value', null);
+ }
+ } else {
+ this.state.set('value', value);
+ }
+ return this;
+ },
+ bindStates: function () {
+ var self = this;
+ function activateMenuItemsByValue(menu, value) {
+ if (menu instanceof Menu) {
+ menu.items().each(function (ctrl) {
+ if (!ctrl.hasMenus()) {
+ ctrl.active(ctrl.value() === value);
+ }
+ });
+ }
+ }
+ function getSelectedItem(menuValues, value) {
+ var selectedItem;
+ if (!menuValues) {
+ return;
+ }
+ for (var i = 0; i < menuValues.length; i++) {
+ if (menuValues[i].value === value) {
+ return menuValues[i];
+ }
+ if (menuValues[i].menu) {
+ selectedItem = getSelectedItem(menuValues[i].menu, value);
+ if (selectedItem) {
+ return selectedItem;
+ }
+ }
+ }
+ }
+ self.on('show', function (e) {
+ activateMenuItemsByValue(e.control, self.value());
+ });
+ self.state.on('change:value', function (e) {
+ var selectedItem = getSelectedItem(self.state.get('menu'), e.value);
+ if (selectedItem) {
+ self.text(selectedItem.text);
} else {
- Tools.each({
- l: 'left',
- r: 'right'
- }, function (cls, pos) {
- panel.classes.toggle('arrow-' + cls, pos === relPos.substr(1, 1));
+ self.text(self.settings.text);
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var toggleTextStyle = function (ctrl, state) {
+ var textStyle = ctrl._textStyle;
+ if (textStyle) {
+ var textElm = ctrl.getEl('text');
+ textElm.setAttribute('style', textStyle);
+ if (state) {
+ textElm.style.color = '';
+ textElm.style.backgroundColor = '';
+ }
+ }
+ };
+ var MenuItem = Widget.extend({
+ Defaults: {
+ border: 0,
+ role: 'menuitem'
+ },
+ init: function (settings) {
+ var self = this;
+ var text;
+ self._super(settings);
+ settings = self.settings;
+ self.classes.add('menu-item');
+ if (settings.menu) {
+ self.classes.add('menu-item-expand');
+ }
+ if (settings.preview) {
+ self.classes.add('menu-item-preview');
+ }
+ text = self.state.get('text');
+ if (text === '-' || text === '|') {
+ self.classes.add('menu-item-sep');
+ self.aria('role', 'separator');
+ self.state.set('text', '-');
+ }
+ if (settings.selectable) {
+ self.aria('role', 'menuitemcheckbox');
+ self.classes.add('menu-item-checkbox');
+ settings.icon = 'selected';
+ }
+ if (!settings.preview && !settings.selectable) {
+ self.classes.add('menu-item-normal');
+ }
+ self.on('mousedown', function (e) {
+ e.preventDefault();
+ });
+ if (settings.menu && !settings.ariaHideMenu) {
+ self.aria('haspopup', true);
+ }
+ },
+ hasMenus: function () {
+ return !!this.settings.menu;
+ },
+ showMenu: function () {
+ var self = this;
+ var settings = self.settings;
+ var menu;
+ var parent = self.parent();
+ parent.items().each(function (ctrl) {
+ if (ctrl !== self) {
+ ctrl.hideMenu();
+ }
+ });
+ if (settings.menu) {
+ menu = self.menu;
+ if (!menu) {
+ menu = settings.menu;
+ if (menu.length) {
+ menu = {
+ type: 'menu',
+ items: menu
+ };
+ } else {
+ menu.type = menu.type || 'menu';
+ }
+ if (parent.settings.itemDefaults) {
+ menu.itemDefaults = parent.settings.itemDefaults;
+ }
+ menu = self.menu = global$11.create(menu).parent(self).renderTo();
+ menu.reflow();
+ menu.on('cancel', function (e) {
+ e.stopPropagation();
+ self.focus();
+ menu.hide();
+ });
+ menu.on('show hide', function (e) {
+ if (e.control.items) {
+ e.control.items().each(function (ctrl) {
+ ctrl.active(ctrl.settings.selected);
+ });
+ }
+ }).fire('show');
+ menu.on('hide', function (e) {
+ if (e.control === menu) {
+ self.classes.remove('selected');
+ }
});
- }
- };
-
- var showToolbar = function (panel, id) {
- var toolbars = panel.items().filter('#' + id);
-
- if (toolbars.length > 0) {
- toolbars[0].show();
- panel.reflow();
- return true;
- }
-
- return false;
- };
-
- var repositionPanelAt = function (panel, id, editor, targetRect) {
- var contentAreaRect, panelRect, result, userConstainHandler;
-
- userConstainHandler = EditorSettings.getHandlerOr(editor, 'inline_toolbar_position_handler', Layout.defaultHandler);
- contentAreaRect = Measure.getContentAreaRect(editor);
- panelRect = DOMUtils.DOM.getRect(panel.getEl());
-
- if (id === 'insert') {
- result = Layout.calcInsert(targetRect, contentAreaRect, panelRect);
+ menu.submenu = true;
} else {
- result = Layout.calc(targetRect, contentAreaRect, panelRect);
+ menu.show();
}
-
- if (result) {
- panelRect = result.rect;
- currentRect = targetRect;
- movePanelTo(panel, Layout.userConstrain(userConstainHandler, targetRect, contentAreaRect, panelRect));
- togglePositionClass(panel, result.position);
- return true;
+ menu._parentMenu = parent;
+ menu.classes.add('menu-sub');
+ var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [
+ 'tl-tr',
+ 'bl-br',
+ 'tr-tl',
+ 'br-bl'
+ ] : [
+ 'tr-tl',
+ 'br-bl',
+ 'tl-tr',
+ 'bl-br'
+ ]);
+ menu.moveRel(self.getEl(), rel);
+ menu.rel = rel;
+ rel = 'menu-sub-' + rel;
+ menu.classes.remove(menu._lastRel).add(rel);
+ menu._lastRel = rel;
+ self.classes.add('selected');
+ self.aria('expanded', true);
+ }
+ },
+ hideMenu: function () {
+ var self = this;
+ if (self.menu) {
+ self.menu.items().each(function (item) {
+ if (item.hideMenu) {
+ item.hideMenu();
+ }
+ });
+ self.menu.hide();
+ self.aria('expanded', false);
+ }
+ return self;
+ },
+ renderHtml: function () {
+ var self = this;
+ var id = self._id;
+ var settings = self.settings;
+ var prefix = self.classPrefix;
+ var text = self.state.get('text');
+ var icon = self.settings.icon, image = '', shortcut = settings.shortcut;
+ var url = self.encode(settings.url), iconHtml = '';
+ function convertShortcut(shortcut) {
+ var i, value, replace = {};
+ if (global$1.mac) {
+ replace = {
+ alt: '⌥',
+ ctrl: '⌘',
+ shift: '⇧',
+ meta: '⌘'
+ };
} else {
- return false;
- }
- };
-
- var showPanelAt = function (panel, id, editor, targetRect) {
- showPanel(panel);
- panel.items().hide();
-
- if (!showToolbar(panel, id)) {
- hide(panel);
- return;
+ replace = { meta: 'Ctrl' };
}
-
- if (repositionPanelAt(panel, id, editor, targetRect) === false) {
- hide(panel);
- }
- };
-
- var hasFormVisible = function () {
- return panel.items().filter('form:visible').length > 0;
- };
-
- var showForm = function (editor, id) {
- if (panel) {
- panel.items().hide();
-
- if (!showToolbar(panel, id)) {
- hide(panel);
- return;
- }
-
- var contentAreaRect, panelRect, result, userConstainHandler;
-
- showPanel(panel);
- panel.items().hide();
- showToolbar(panel, id);
-
- userConstainHandler = EditorSettings.getHandlerOr(editor, 'inline_toolbar_position_handler', Layout.defaultHandler);
- contentAreaRect = Measure.getContentAreaRect(editor);
- panelRect = DOMUtils.DOM.getRect(panel.getEl());
-
- result = Layout.calc(currentRect, contentAreaRect, panelRect);
-
- if (result) {
- panelRect = result.rect;
- movePanelTo(panel, Layout.userConstrain(userConstainHandler, currentRect, contentAreaRect, panelRect));
- togglePositionClass(panel, result.position);
+ shortcut = shortcut.split('+');
+ for (i = 0; i < shortcut.length; i++) {
+ value = replace[shortcut[i].toLowerCase()];
+ if (value) {
+ shortcut[i] = value;
}
}
- };
-
- var show = function (editor, id, targetRect, toolbars) {
- if (!panel) {
- panel = create(editor, toolbars);
- panel.renderTo(document.body).reflow().moveTo(targetRect.x, targetRect.y);
- editor.nodeChanged();
+ return shortcut.join('+');
+ }
+ function escapeRegExp(str) {
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ }
+ function markMatches(text) {
+ var match = settings.match || '';
+ return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {
+ return '!mce~match[' + match + ']mce~match!';
+ }) : text;
+ }
+ function boldMatches(text) {
+ return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>');
+ }
+ if (icon) {
+ self.parent().classes.add('menu-has-icons');
+ }
+ if (settings.image) {
+ image = ' style="background-image: url(\'' + settings.image + '\')"';
+ }
+ if (shortcut) {
+ shortcut = convertShortcut(shortcut);
+ }
+ icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');
+ iconHtml = text !== '-' ? '<i class="' + icon + '"' + image + '></i>\xA0' : '';
+ text = boldMatches(self.encode(markMatches(text)));
+ url = boldMatches(self.encode(markMatches(url)));
+ return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1">' + iconHtml + (text !== '-' ? '<span id="' + id + '-text" class="' + prefix + 'text">' + text + '</span>' : '') + (shortcut ? '<div id="' + id + '-shortcut" class="' + prefix + 'menu-shortcut">' + shortcut + '</div>' : '') + (settings.menu ? '<div class="' + prefix + 'caret"></div>' : '') + (url ? '<div class="' + prefix + 'menu-item-link">' + url + '</div>' : '') + '</div>';
+ },
+ postRender: function () {
+ var self = this, settings = self.settings;
+ var textStyle = settings.textStyle;
+ if (typeof textStyle === 'function') {
+ textStyle = textStyle.call(this);
+ }
+ if (textStyle) {
+ var textElm = self.getEl('text');
+ if (textElm) {
+ textElm.setAttribute('style', textStyle);
+ self._textStyle = textStyle;
}
-
- showPanelAt(panel, id, editor, targetRect);
- };
-
- var reposition = function (editor, id, targetRect) {
- if (panel) {
- repositionPanelAt(panel, id, editor, targetRect);
+ }
+ self.on('mouseenter click', function (e) {
+ if (e.control === self) {
+ if (!settings.menu && e.type === 'click') {
+ self.fire('select');
+ global$3.requestAnimationFrame(function () {
+ self.parent().hideAll();
+ });
+ } else {
+ self.showMenu();
+ if (e.aria) {
+ self.menu.focus(true);
+ }
+ }
}
- };
+ });
+ self._super();
+ return self;
+ },
+ hover: function () {
+ var self = this;
+ self.parent().items().each(function (ctrl) {
+ ctrl.classes.remove('selected');
+ });
+ self.classes.toggle('selected', true);
+ return self;
+ },
+ active: function (state) {
+ toggleTextStyle(this, state);
+ if (typeof state !== 'undefined') {
+ this.aria('checked', state);
+ }
+ return this._super(state);
+ },
+ remove: function () {
+ this._super();
+ if (this.menu) {
+ this.menu.remove();
+ }
+ }
+ });
- var hide = function () {
- if (panel) {
- panel.hide();
+ var Radio = Checkbox.extend({
+ Defaults: {
+ classes: 'radio',
+ role: 'radio'
+ }
+ });
+
+ var ResizeHandle = Widget.extend({
+ renderHtml: function () {
+ var self = this, prefix = self.classPrefix;
+ self.classes.add('resizehandle');
+ if (self.settings.direction === 'both') {
+ self.classes.add('resizehandle-both');
+ }
+ self.canFocus = false;
+ return '<div id="' + self._id + '" class="' + self.classes + '">' + '<i class="' + prefix + 'ico ' + prefix + 'i-resize"></i>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ self._super();
+ self.resizeDragHelper = new DragHelper(this._id, {
+ start: function () {
+ self.fire('ResizeStart');
+ },
+ drag: function (e) {
+ if (self.settings.direction !== 'both') {
+ e.deltaX = 0;
+ }
+ self.fire('Resize', e);
+ },
+ stop: function () {
+ self.fire('ResizeEnd');
}
- };
+ });
+ },
+ remove: function () {
+ if (this.resizeDragHelper) {
+ this.resizeDragHelper.destroy();
+ }
+ return this._super();
+ }
+ });
- var focus = function () {
- if (panel) {
- panel.find('toolbar:visible').eq(0).each(function (item) {
- item.focus(true);
+ function createOptions(options) {
+ var strOptions = '';
+ if (options) {
+ for (var i = 0; i < options.length; i++) {
+ strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>';
+ }
+ }
+ return strOptions;
+ }
+ var SelectBox = Widget.extend({
+ Defaults: {
+ classes: 'selectbox',
+ role: 'selectbox',
+ options: []
+ },
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ if (self.settings.size) {
+ self.size = self.settings.size;
+ }
+ if (self.settings.options) {
+ self._options = self.settings.options;
+ }
+ self.on('keydown', function (e) {
+ var rootControl;
+ if (e.keyCode === 13) {
+ e.preventDefault();
+ self.parents().reverse().each(function (ctrl) {
+ if (ctrl.toJSON) {
+ rootControl = ctrl;
+ return false;
+ }
});
+ self.fire('submit', { data: rootControl.toJSON() });
}
- };
-
- var remove = function () {
- if (panel) {
- panel.remove();
- panel = null;
- }
- };
-
- var inForm = function () {
- return panel && panel.visible() && hasFormVisible();
- };
-
- return {
- show: show,
- showForm: showForm,
- reposition: reposition,
- inForm: inForm,
- hide: hide,
- focus: focus,
- remove: remove
- };
- };
- }
-);
-
-/**
- * Conversions.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.file.Conversions',
- [
- 'tinymce.core.util.Promise'
- ],
- function (Promise) {
- var blobToBase64 = function (blob) {
- return new Promise(function (resolve) {
- var reader = new FileReader();
-
- reader.onloadend = function () {
- resolve(reader.result.split(',')[1]);
- };
-
- reader.readAsDataURL(blob);
});
- };
-
- return {
- blobToBase64: blobToBase64
- };
- }
-);
-
-
-
-/**
- * Picker.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.file.Picker',
- [
- 'tinymce.core.util.Promise'
- ],
- function (Promise) {
- var pickFile = function () {
- return new Promise(function (resolve) {
- var fileInput;
-
- fileInput = document.createElement("input");
- fileInput.type = "file";
- fileInput.style.position = 'fixed';
- fileInput.style.left = 0;
- fileInput.style.top = 0;
- fileInput.style.opacity = 0.001;
- document.body.appendChild(fileInput);
-
- fileInput.onchange = function (e) {
- resolve(Array.prototype.slice.call(e.target.files));
- };
-
- fileInput.click();
- fileInput.parentNode.removeChild(fileInput);
+ },
+ options: function (state) {
+ if (!arguments.length) {
+ return this.state.get('options');
+ }
+ this.state.set('options', state);
+ return this;
+ },
+ renderHtml: function () {
+ var self = this;
+ var options, size = '';
+ options = createOptions(self._options);
+ if (self.size) {
+ size = ' size = "' + self.size + '"';
+ }
+ return '<select id="' + self._id + '" class="' + self.classes + '"' + size + '>' + options + '</select>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:options', function (e) {
+ self.getEl().innerHTML = createOptions(e.value);
});
- };
+ return self._super();
+ }
+ });
- return {
- pickFile: pickFile
- };
+ function constrain(value, minVal, maxVal) {
+ if (value < minVal) {
+ value = minVal;
+ }
+ if (value > maxVal) {
+ value = maxVal;
+ }
+ return value;
}
-);
-
-
-
-/**
- * Buttons.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.ui.Buttons',
- [
- 'tinymce.themes.inlite.ui.Panel',
- 'tinymce.themes.inlite.file.Conversions',
- 'tinymce.themes.inlite.file.Picker',
- 'tinymce.themes.inlite.core.Actions'
- ],
- function (Panel, Conversions, Picker, Actions) {
- var addHeaderButtons = function (editor) {
- var formatBlock = function (name) {
- return function () {
- Actions.formatBlock(editor, name);
+ function setAriaProp(el, name, value) {
+ el.setAttribute('aria-' + name, value);
+ }
+ function updateSliderHandle(ctrl, value) {
+ var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;
+ if (ctrl.settings.orientation === 'v') {
+ stylePosName = 'top';
+ sizeName = 'height';
+ shortSizeName = 'h';
+ } else {
+ stylePosName = 'left';
+ sizeName = 'width';
+ shortSizeName = 'w';
+ }
+ handleEl = ctrl.getEl('handle');
+ maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
+ styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';
+ handleEl.style[stylePosName] = styleValue;
+ handleEl.style.height = ctrl.layoutRect().h + 'px';
+ setAriaProp(handleEl, 'valuenow', value);
+ setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));
+ setAriaProp(handleEl, 'valuemin', ctrl._minValue);
+ setAriaProp(handleEl, 'valuemax', ctrl._maxValue);
+ }
+ var Slider = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ if (!settings.previewFilter) {
+ settings.previewFilter = function (value) {
+ return Math.round(value * 100) / 100;
};
- };
-
- for (var i = 1; i < 6; i++) {
- var name = 'h' + i;
-
- editor.addButton(name, {
- text: name.toUpperCase(),
- tooltip: 'Heading ' + i,
- stateSelector: name,
- onclick: formatBlock(name),
- onPostRender: function () {
- // TODO: Remove this hack that produces bold H1-H6 when we have proper icons
- var span = this.getEl().firstChild.firstChild;
- span.style.fontWeight = 'bold';
+ }
+ self._super(settings);
+ self.classes.add('slider');
+ if (settings.orientation === 'v') {
+ self.classes.add('vertical');
+ }
+ self._minValue = isNumber$1(settings.minValue) ? settings.minValue : 0;
+ self._maxValue = isNumber$1(settings.maxValue) ? settings.maxValue : 100;
+ self._initValue = self.state.get('value');
+ },
+ renderHtml: function () {
+ var self = this, id = self._id, prefix = self.classPrefix;
+ return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-handle" class="' + prefix + 'slider-handle" role="slider" tabindex="-1"></div>' + '</div>';
+ },
+ reset: function () {
+ this.value(this._initValue).repaint();
+ },
+ postRender: function () {
+ var self = this;
+ var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;
+ function toFraction(min, max, val) {
+ return (val + min) / (max - min);
+ }
+ function fromFraction(min, max, val) {
+ return val * (max - min) - min;
+ }
+ function handleKeyboard(minValue, maxValue) {
+ function alter(delta) {
+ var value;
+ value = self.value();
+ value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);
+ value = constrain(value, minValue, maxValue);
+ self.value(value);
+ self.fire('dragstart', { value: value });
+ self.fire('drag', { value: value });
+ self.fire('dragend', { value: value });
+ }
+ self.on('keydown', function (e) {
+ switch (e.keyCode) {
+ case 37:
+ case 38:
+ alter(-1);
+ break;
+ case 39:
+ case 40:
+ alter(1);
+ break;
}
});
}
- };
-
- var addToEditor = function (editor, panel) {
- editor.addButton('quicklink', {
- icon: 'link',
- tooltip: 'Insert/Edit link',
- stateSelector: 'a[href]',
- onclick: function () {
- panel.showForm(editor, 'quicklink');
- }
- });
-
- editor.addButton('quickimage', {
- icon: 'image',
- tooltip: 'Insert image',
- onclick: function () {
- Picker.pickFile().then(function (files) {
- var blob = files[0];
-
- Conversions.blobToBase64(blob).then(function (base64) {
- Actions.insertBlob(editor, base64, blob);
- });
- });
- }
+ function handleDrag(minValue, maxValue, handleEl) {
+ var startPos, startHandlePos, maxHandlePos, handlePos, value;
+ self._dragHelper = new DragHelper(self._id, {
+ handle: self._id + '-handle',
+ start: function (e) {
+ startPos = e[screenCordName];
+ startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);
+ maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
+ self.fire('dragstart', { value: value });
+ },
+ drag: function (e) {
+ var delta = e[screenCordName] - startPos;
+ handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);
+ handleEl.style[stylePosName] = handlePos + 'px';
+ value = minValue + handlePos / maxHandlePos * (maxValue - minValue);
+ self.value(value);
+ self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');
+ self.fire('drag', { value: value });
+ },
+ stop: function () {
+ self.tooltip().hide();
+ self.fire('dragend', { value: value });
+ }
+ });
+ }
+ minValue = self._minValue;
+ maxValue = self._maxValue;
+ if (self.settings.orientation === 'v') {
+ screenCordName = 'screenY';
+ stylePosName = 'top';
+ sizeName = 'height';
+ shortSizeName = 'h';
+ } else {
+ screenCordName = 'screenX';
+ stylePosName = 'left';
+ sizeName = 'width';
+ shortSizeName = 'w';
+ }
+ self._super();
+ handleKeyboard(minValue, maxValue);
+ handleDrag(minValue, maxValue, self.getEl('handle'));
+ },
+ repaint: function () {
+ this._super();
+ updateSliderHandle(this, this.value());
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:value', function (e) {
+ updateSliderHandle(self, e.value);
});
-
- editor.addButton('quicktable', {
- icon: 'table',
- tooltip: 'Insert table',
- onclick: function () {
- panel.hide();
- Actions.insertTable(editor, 2, 2);
- }
+ return self._super();
+ }
+ });
+
+ var Spacer = Widget.extend({
+ renderHtml: function () {
+ var self = this;
+ self.classes.add('spacer');
+ self.canFocus = false;
+ return '<div id="' + self._id + '" class="' + self.classes + '"></div>';
+ }
+ });
+
+ var SplitButton = MenuButton.extend({
+ Defaults: {
+ classes: 'widget btn splitbtn',
+ role: 'button'
+ },
+ repaint: function () {
+ var self$$1 = this;
+ var elm = self$$1.getEl();
+ var rect = self$$1.layoutRect();
+ var mainButtonElm, menuButtonElm;
+ self$$1._super();
+ mainButtonElm = elm.firstChild;
+ menuButtonElm = elm.lastChild;
+ global$7(mainButtonElm).css({
+ width: rect.w - funcs.getSize(menuButtonElm).width,
+ height: rect.h - 2
});
-
- addHeaderButtons(editor);
- };
-
- return {
- addToEditor: addToEditor
- };
- }
-);
-
-/**
- * Theme.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.inlite.Theme',
- [
- 'tinymce.core.ThemeManager',
- 'tinymce.core.ui.Api',
- 'tinymce.core.util.Delay',
- 'tinymce.themes.inlite.alien.Arr',
- 'tinymce.themes.inlite.alien.EditorSettings',
- 'tinymce.themes.inlite.core.ElementMatcher',
- 'tinymce.themes.inlite.core.Matcher',
- 'tinymce.themes.inlite.core.PredicateId',
- 'tinymce.themes.inlite.core.SelectionMatcher',
- 'tinymce.themes.inlite.core.SkinLoader',
- 'tinymce.themes.inlite.ui.Buttons',
- 'tinymce.themes.inlite.ui.Panel'
- ],
- function (
- ThemeManager, Api, Delay, Arr, EditorSettings, ElementMatcher, Matcher,
- PredicateId, SelectionMatcher, SkinLoader, Buttons, Panel
- ) {
- var getSelectionElements = function (editor) {
- var node = editor.selection.getNode();
- var elms = editor.dom.getParents(node);
- return elms;
- };
-
- var createToolbar = function (editor, selector, id, items) {
- var selectorPredicate = function (elm) {
- return editor.dom.is(elm, selector);
- };
-
- return {
- predicate: selectorPredicate,
- id: id,
- items: items
- };
- };
-
- var getToolbars = function (editor) {
- var contextToolbars = editor.contextToolbars;
-
- return Arr.flatten([
- contextToolbars ? contextToolbars : [],
- createToolbar(editor, 'img', 'image', 'alignleft aligncenter alignright')
- ]);
- };
-
- var findMatchResult = function (editor, toolbars) {
- var result, elements, contextToolbarsPredicateIds;
-
- elements = getSelectionElements(editor);
- contextToolbarsPredicateIds = PredicateId.fromContextToolbars(toolbars);
-
- result = Matcher.match(editor, [
- ElementMatcher.element(elements[0], contextToolbarsPredicateIds),
- SelectionMatcher.textSelection('text'),
- SelectionMatcher.emptyTextBlock(elements, 'insert'),
- ElementMatcher.parent(elements, contextToolbarsPredicateIds)
- ]);
-
- return result && result.rect ? result : null;
- };
-
- var togglePanel = function (editor, panel) {
- var toggle = function () {
- var toolbars = getToolbars(editor);
- var result = findMatchResult(editor, toolbars);
-
- if (result) {
- panel.show(editor, result.id, result.rect, toolbars);
- } else {
- panel.hide();
+ global$7(menuButtonElm).css({ height: rect.h - 2 });
+ return self$$1;
+ },
+ activeMenu: function (state) {
+ var self$$1 = this;
+ global$7(self$$1.getEl().lastChild).toggleClass(self$$1.classPrefix + 'active', state);
+ },
+ renderHtml: function () {
+ var self$$1 = this;
+ var id = self$$1._id;
+ var prefix = self$$1.classPrefix;
+ var image;
+ var icon = self$$1.state.get('icon');
+ var text = self$$1.state.get('text');
+ var settings = self$$1.settings;
+ var textHtml = '', ariaPressed;
+ image = settings.image;
+ if (image) {
+ icon = 'none';
+ if (typeof image !== 'string') {
+ image = window.getSelection ? image[0] : image[1];
}
- };
-
- return function () {
- if (!editor.removed) {
- toggle();
+ image = ' style="background-image: url(\'' + image + '\')"';
+ } else {
+ image = '';
+ }
+ icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
+ if (text) {
+ self$$1.classes.add('btn-has-text');
+ textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>';
+ }
+ ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
+ return '<div id="' + id + '" class="' + self$$1.classes + '" role="button"' + ariaPressed + ' tabindex="-1">' + '<button type="button" hidefocus="1" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + (self$$1._menuBtnText ? (icon ? '\xA0' : '') + self$$1._menuBtnText : '') + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
+ },
+ postRender: function () {
+ var self$$1 = this, onClickHandler = self$$1.settings.onclick;
+ self$$1.on('click', function (e) {
+ var node = e.target;
+ if (e.control === this) {
+ while (node) {
+ if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {
+ e.stopImmediatePropagation();
+ if (onClickHandler) {
+ onClickHandler.call(this, e);
+ }
+ return;
+ }
+ node = node.parentNode;
+ }
}
- };
- };
-
- var repositionPanel = function (editor, panel) {
- return function () {
- var toolbars = getToolbars(editor);
- var result = findMatchResult(editor, toolbars);
-
- if (result) {
- panel.reposition(editor, result.id, result.rect);
+ });
+ delete self$$1.settings.onclick;
+ return self$$1._super();
+ }
+ });
+
+ var StackLayout = FlowLayout.extend({
+ Defaults: {
+ containerClass: 'stack-layout',
+ controlClass: 'stack-layout-item',
+ endClass: 'break'
+ },
+ isNative: function () {
+ return true;
+ }
+ });
+
+ var TabPanel = Panel.extend({
+ Defaults: {
+ layout: 'absolute',
+ defaults: { type: 'panel' }
+ },
+ activateTab: function (idx) {
+ var activeTabElm;
+ if (this.activeTabId) {
+ activeTabElm = this.getEl(this.activeTabId);
+ global$7(activeTabElm).removeClass(this.classPrefix + 'active');
+ activeTabElm.setAttribute('aria-selected', 'false');
+ }
+ this.activeTabId = 't' + idx;
+ activeTabElm = this.getEl('t' + idx);
+ activeTabElm.setAttribute('aria-selected', 'true');
+ global$7(activeTabElm).addClass(this.classPrefix + 'active');
+ this.items()[idx].show().fire('showtab');
+ this.reflow();
+ this.items().each(function (item, i) {
+ if (idx !== i) {
+ item.hide();
}
- };
- };
-
- var ignoreWhenFormIsVisible = function (editor, panel, f) {
- return function () {
- if (!editor.removed && !panel.inForm()) {
- f();
+ });
+ },
+ renderHtml: function () {
+ var self = this;
+ var layout = self._layout;
+ var tabsHtml = '';
+ var prefix = self.classPrefix;
+ self.preRender();
+ layout.preRender(self);
+ self.items().each(function (ctrl, i) {
+ var id = self._id + '-t' + i;
+ ctrl.aria('role', 'tabpanel');
+ ctrl.aria('labelledby', id);
+ tabsHtml += '<div id="' + id + '" class="' + prefix + 'tab" ' + 'unselectable="on" role="tab" aria-controls="' + ctrl._id + '" aria-selected="false" tabIndex="-1">' + self.encode(ctrl.settings.title) + '</div>';
+ });
+ return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + '<div id="' + self._id + '-head" class="' + prefix + 'tabs" role="tablist">' + tabsHtml + '</div>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ self._super();
+ self.settings.activeTab = self.settings.activeTab || 0;
+ self.activateTab(self.settings.activeTab);
+ this.on('click', function (e) {
+ var targetParent = e.target.parentNode;
+ if (targetParent && targetParent.id === self._id + '-head') {
+ var i = targetParent.childNodes.length;
+ while (i--) {
+ if (targetParent.childNodes[i] === e.target) {
+ self.activateTab(i);
+ }
+ }
}
+ });
+ },
+ initLayoutRect: function () {
+ var self = this;
+ var rect, minW, minH;
+ minW = funcs.getSize(self.getEl('head')).width;
+ minW = minW < 0 ? 0 : minW;
+ minH = 0;
+ self.items().each(function (item) {
+ minW = Math.max(minW, item.layoutRect().minW);
+ minH = Math.max(minH, item.layoutRect().minH);
+ });
+ self.items().each(function (ctrl) {
+ ctrl.settings.x = 0;
+ ctrl.settings.y = 0;
+ ctrl.settings.w = minW;
+ ctrl.settings.h = minH;
+ ctrl.layoutRect({
+ x: 0,
+ y: 0,
+ w: minW,
+ h: minH
+ });
+ });
+ var headH = funcs.getSize(self.getEl('head')).height;
+ self.settings.minWidth = minW;
+ self.settings.minHeight = minH + headH;
+ rect = self._super();
+ rect.deltaH += headH;
+ rect.innerH = rect.h - rect.deltaH;
+ return rect;
+ }
+ });
+
+ var TextBox = Widget.extend({
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ self$$1.classes.add('textbox');
+ if (settings.multiline) {
+ self$$1.classes.add('multiline');
+ } else {
+ self$$1.on('keydown', function (e) {
+ var rootControl;
+ if (e.keyCode === 13) {
+ e.preventDefault();
+ self$$1.parents().reverse().each(function (ctrl) {
+ if (ctrl.toJSON) {
+ rootControl = ctrl;
+ return false;
+ }
+ });
+ self$$1.fire('submit', { data: rootControl.toJSON() });
+ }
+ });
+ self$$1.on('keyup', function (e) {
+ self$$1.state.set('value', e.target.value);
+ });
+ }
+ },
+ repaint: function () {
+ var self$$1 = this;
+ var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;
+ style = self$$1.getEl().style;
+ rect = self$$1._layoutRect;
+ lastRepaintRect = self$$1._lastRepaintRect || {};
+ var doc = document;
+ if (!self$$1.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
+ style.lineHeight = rect.h - borderH + 'px';
+ }
+ borderBox = self$$1.borderBox;
+ borderW = borderBox.left + borderBox.right + 8;
+ borderH = borderBox.top + borderBox.bottom + (self$$1.settings.multiline ? 8 : 0);
+ if (rect.x !== lastRepaintRect.x) {
+ style.left = rect.x + 'px';
+ lastRepaintRect.x = rect.x;
+ }
+ if (rect.y !== lastRepaintRect.y) {
+ style.top = rect.y + 'px';
+ lastRepaintRect.y = rect.y;
+ }
+ if (rect.w !== lastRepaintRect.w) {
+ style.width = rect.w - borderW + 'px';
+ lastRepaintRect.w = rect.w;
+ }
+ if (rect.h !== lastRepaintRect.h) {
+ style.height = rect.h - borderH + 'px';
+ lastRepaintRect.h = rect.h;
+ }
+ self$$1._lastRepaintRect = lastRepaintRect;
+ self$$1.fire('repaint', {}, false);
+ return self$$1;
+ },
+ renderHtml: function () {
+ var self$$1 = this;
+ var settings = self$$1.settings;
+ var attrs, elm;
+ attrs = {
+ id: self$$1._id,
+ hidefocus: '1'
};
- };
-
- var bindContextualToolbarsEvents = function (editor, panel) {
- var throttledTogglePanel = Delay.throttle(togglePanel(editor, panel), 0);
- var throttledTogglePanelWhenNotInForm = Delay.throttle(ignoreWhenFormIsVisible(editor, panel, togglePanel(editor, panel)), 0);
-
- editor.on('blur hide ObjectResizeStart', panel.hide);
- editor.on('click', throttledTogglePanel);
- editor.on('nodeChange mouseup', throttledTogglePanelWhenNotInForm);
- editor.on('ResizeEditor keyup', throttledTogglePanel);
- editor.on('ResizeWindow', repositionPanel(editor, panel));
- editor.on('remove', panel.remove);
-
- editor.shortcuts.add('Alt+F10', '', panel.focus);
- };
-
- var overrideLinkShortcut = function (editor, panel) {
- editor.shortcuts.remove('meta+k');
- editor.shortcuts.add('meta+k', '', function () {
- var toolbars = getToolbars(editor);
- var result = result = Matcher.match(editor, [
- SelectionMatcher.textSelection('quicklink')
- ]);
-
- if (result) {
- panel.show(editor, result.id, result.rect, toolbars);
+ global$4.each([
+ 'rows',
+ 'spellcheck',
+ 'maxLength',
+ 'size',
+ 'readonly',
+ 'min',
+ 'max',
+ 'step',
+ 'list',
+ 'pattern',
+ 'placeholder',
+ 'required',
+ 'multiple'
+ ], function (name$$1) {
+ attrs[name$$1] = settings[name$$1];
+ });
+ if (self$$1.disabled()) {
+ attrs.disabled = 'disabled';
+ }
+ if (settings.subtype) {
+ attrs.type = settings.subtype;
+ }
+ elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);
+ elm.value = self$$1.state.get('value');
+ elm.className = self$$1.classes.toString();
+ return elm.outerHTML;
+ },
+ value: function (value) {
+ if (arguments.length) {
+ this.state.set('value', value);
+ return this;
+ }
+ if (this.state.get('rendered')) {
+ this.state.set('value', this.getEl().value);
+ }
+ return this.state.get('value');
+ },
+ postRender: function () {
+ var self$$1 = this;
+ self$$1.getEl().value = self$$1.state.get('value');
+ self$$1._super();
+ self$$1.$el.on('change', function (e) {
+ self$$1.state.set('value', e.target.value);
+ self$$1.fire('change', e);
+ });
+ },
+ bindStates: function () {
+ var self$$1 = this;
+ self$$1.state.on('change:value', function (e) {
+ if (self$$1.getEl().value !== e.value) {
+ self$$1.getEl().value = e.value;
}
});
- };
-
- var renderInlineUI = function (editor, panel) {
- SkinLoader.load(editor, function () {
- bindContextualToolbarsEvents(editor, panel);
- overrideLinkShortcut(editor, panel);
+ self$$1.state.on('change:disabled', function (e) {
+ self$$1.getEl().disabled = e.value;
});
+ return self$$1._super();
+ },
+ remove: function () {
+ this.$el.off();
+ this._super();
+ }
+ });
- return {};
- };
-
- var fail = function (message) {
- throw new Error(message);
+ var getApi = function () {
+ return {
+ Selector: Selector,
+ Collection: Collection$2,
+ ReflowQueue: $_cqjgb518wjjgwek2f,
+ Control: Control$1,
+ Factory: global$11,
+ KeyboardNavigation: KeyboardNavigation,
+ Container: Container,
+ DragHelper: DragHelper,
+ Scrollable: $_8woeth19ajjgwek4b,
+ Panel: Panel,
+ Movable: $_8zu82i18yjjgwek2l,
+ Resizable: $_20hy1119bjjgwek4f,
+ FloatPanel: FloatPanel,
+ Window: Window$$1,
+ MessageBox: MessageBox,
+ Tooltip: Tooltip,
+ Widget: Widget,
+ Progress: Progress,
+ Notification: Notification,
+ Layout: Layout$1,
+ AbsoluteLayout: AbsoluteLayout,
+ Button: Button,
+ ButtonGroup: ButtonGroup,
+ Checkbox: Checkbox,
+ ComboBox: ComboBox,
+ ColorBox: ColorBox,
+ PanelButton: PanelButton,
+ ColorButton: ColorButton,
+ ColorPicker: ColorPicker,
+ Path: Path,
+ ElementPath: ElementPath,
+ FormItem: FormItem,
+ Form: Form,
+ FieldSet: FieldSet,
+ FilePicker: FilePicker,
+ FitLayout: FitLayout,
+ FlexLayout: FlexLayout,
+ FlowLayout: FlowLayout,
+ FormatControls: $_gg6ikw1bejjgwekc5,
+ GridLayout: GridLayout,
+ Iframe: Iframe,
+ InfoBox: InfoBox,
+ Label: Label,
+ Toolbar: Toolbar$1,
+ MenuBar: MenuBar,
+ MenuButton: MenuButton,
+ MenuItem: MenuItem,
+ Throbber: Throbber,
+ Menu: Menu,
+ ListBox: ListBox,
+ Radio: Radio,
+ ResizeHandle: ResizeHandle,
+ SelectBox: SelectBox,
+ Slider: Slider,
+ Spacer: Spacer,
+ SplitButton: SplitButton,
+ StackLayout: StackLayout,
+ TabPanel: TabPanel,
+ TextBox: TextBox,
+ DropZone: DropZone,
+ BrowseButton: BrowseButton
};
-
- ThemeManager.add('inlite', function (editor) {
- var panel = new Panel();
-
- Buttons.addToEditor(editor, panel);
-
- var renderUI = function () {
- return editor.inline ? renderInlineUI(editor, panel) : fail('inlite theme only supports inline mode.');
- };
-
- return {
- renderUI: renderUI
- };
+ };
+ var appendTo = function (target) {
+ if (target.ui) {
+ global$4.each(getApi(), function (ref, key) {
+ target.ui[key] = ref;
+ });
+ } else {
+ target.ui = getApi();
+ }
+ };
+ var registerToFactory = function () {
+ global$4.each(getApi(), function (ref, key) {
+ global$11.add(key, ref);
});
+ };
+ var Api = {
+ appendTo: appendTo,
+ registerToFactory: registerToFactory
+ };
- Api.appendTo(window.tinymce ? window.tinymce : {});
-
- return function () { };
+ Api.registerToFactory();
+ Api.appendTo(window.tinymce ? window.tinymce : {});
+ global.add('inlite', function (editor) {
+ var panel = create$3();
+ $_gg6ikw1bejjgwekc5.setup(editor);
+ $_epdxt419djjgwek4l.addToEditor(editor, panel);
+ return $_7y4x3k17sjjgwejyw.get(editor, panel);
+ });
+ function Theme () {
}
-);
-dem('tinymce.themes.inlite.Theme')();
+ return Theme;
+
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("d",tinymce.util.Tools.resolve),g("1",["d"],function(a){return a("tinymce.ThemeManager")}),g("2",["d"],function(a){return a("tinymce.ui.Api")}),g("3",["d"],function(a){return a("tinymce.util.Delay")}),g("4",[],function(){var a=function(b){return b.reduce(function(b,c){return Array.isArray(c)?b.concat(a(c)):b.concat(c)},[])};return{flatten:a}}),g("e",[],function(){var a=function(a){return function(b){return typeof b===a}},b=function(a){return Array.isArray(a)},c=function(a){return null===a},d=function(a){return function(d){return!c(d)&&!b(d)&&a(d)}};return{isString:a("string"),isNumber:a("number"),isBoolean:a("boolean"),isFunction:a("function"),isObject:d(a("object")),isNull:c,isArray:b}}),g("5",["e"],function(a){var b=function(a,b){if(b(a))return!0;throw new Error("Default value doesn't match requested type.")},c=function(a){return function(c,d,e){var f=c.settings;return b(e,a),d in f&&a(f[d])?f[d]:e}},d=function(a,b){return a.split(b).filter(function(a){return a.length>0})},e=function(b,c){var e=function(a){return"string"==typeof a?d(a,/[ ,]/):a},f=function(a,b){return a===!1?[]:b};return a.isArray(b)?b:a.isString(b)?e(b):a.isBoolean(b)?f(b,c):c},f=function(a){return function(c,d,f){var g=d in c.settings?c.settings[d]:f;return b(f,a),e(g,f)}};return{getStringOr:c(a.isString),getBoolOr:c(a.isBoolean),getNumberOr:c(a.isNumber),getHandlerOr:c(a.isFunction),getToolbarItemsOr:f(a.isArray)}}),g("7",[],function(){var a=function(a,b){return{id:a,rect:b}},b=function(a,b){for(var c=0;c<b.length;c++){var d=b[c],e=d(a);if(e)return e}return null};return{match:b,result:a}}),g("i",["d"],function(a){return a("tinymce.dom.DOMUtils")}),g("q",[],function(){var a=function(a){return{x:a.left,y:a.top,w:a.width,h:a.height}},b=function(a){return{left:a.x,top:a.y,width:a.w,height:a.h,right:a.x+a.w,bottom:a.y+a.h}};return{fromClientRect:a,toClientRect:b}}),g("f",["i","q"],function(a,b){var c=function(b){var c=a.DOM.getViewPort();return{x:b.x+c.x,y:b.y+c.y,w:b.w,h:b.h}},d=function(a){var b=a.getBoundingClientRect();return c({x:b.left,y:b.top,w:Math.max(a.clientWidth,a.offsetWidth),h:Math.max(a.clientHeight,a.offsetHeight)})},e=function(a,b){return d(b)},f=function(a){return d(a.getElement().ownerDocument.body)},g=function(a){return d(a.getContentAreaContainer()||a.getBody())},h=function(a){var d=a.selection.getBoundingClientRect();return d?c(b.fromClientRect(d)):null};return{getElementRect:e,getPageAreaRect:f,getContentAreaRect:g,getSelectionRect:h}}),g("6",["7","f"],function(a,b){var c=function(c,d){return function(e){for(var f=0;f<d.length;f++)if(d[f].predicate(c))return a.result(d[f].id,b.getElementRect(e,c));return null}},d=function(c,d){return function(e){for(var f=0;f<c.length;f++)for(var g=0;g<d.length;g++)if(d[g].predicate(c[f]))return a.result(d[g].id,b.getElementRect(e,c[f]));return null}};return{element:c,parent:d}}),g("g",["d"],function(a){return a("tinymce.util.Tools")}),g("8",["g"],function(a){var b=function(a,b){return{id:a,predicate:b}},c=function(c){return a.map(c,function(a){return b(a.id,a.predicate)})};return{create:b,fromContextToolbars:c}}),g("9",["7","f"],function(a,b){var c=function(c){return function(d){return d.selection.isCollapsed()?null:a.result(c,b.getSelectionRect(d))}},d=function(c,d){return function(e){var f,g=e.schema.getTextBlockElements();for(f=0;f<c.length;f++)if("TABLE"===c[f].nodeName)return null;for(f=0;f<c.length;f++)if(c[f].nodeName in g)return e.dom.isEmpty(c[f])?a.result(d,b.getSelectionRect(e)):null;return null}};return{textSelection:c,emptyTextBlock:d}}),g("h",["d"],function(a){return a("tinymce.EditorManager")}),g("a",["h","i"],function(a,b){var c=function(a,b){var c=function(){a._skinLoaded=!0,a.fire("SkinLoaded"),b()};a.initialized?c():a.on("init",c)},d=function(b){var c=a.baseURL+"/skins/";return b?c+b:c+"lightgray"},e=function(a,b){return a.documentBaseURI.toAbsolute(b)},f=function(a,f){var g=a.settings,h=g.skin_url?e(a,g.skin_url):d(g.skin),i=function(){c(a,f)};b.DOM.styleSheetLoader.load(h+"/skin.min.css",i),a.contentCSS.push(h+"/content.inline.min.css")};return{load:f}}),g("j",["d"],function(a){return a("tinymce.ui.Factory")}),g("k",["g","j","e"],function(a,b,c){var d=function(a,b){var c=function(a,b){return{selector:a,handler:b}},d=function(a){b.active(a)},e=function(a){b.disabled(a)};return b.settings.stateSelector?c(b.settings.stateSelector,d):b.settings.disabledStateSelector?c(b.settings.disabledStateSelector,e):null},e=function(a,b,c){return function(){var e=d(b,c);null!==e&&a.selection.selectorChanged(e.selector,e.handler)}},f=function(a){return c.isArray(a)?a:c.isString(a)?a.split(/[ ,]/):[]},g=function(c,d,g){var h,i=[];if(g)return a.each(f(g),function(a){var d;"|"==a?h=null:c.buttons[a]&&(h||(h={type:"buttongroup",items:[]},i.push(h)),d=a,a=c.buttons[d],"function"==typeof a&&(a=a()),a.type=a.type||"button",a=b.create(a),a.on("postRender",e(c,d,a)),h.items.push(a))}),b.create({type:"toolbar",layout:"flow",name:d,items:i})};return{create:g}}),g("r",["d"],function(a){return a("tinymce.util.Promise")}),g("s",[],function(){var a=0,b=function(){var a=function(){return Math.round(4294967295*Math.random()).toString(36)};return"s"+Date.now().toString(36)+a()+a()+a()},c=function(c){return c+a++ +b()};return{uuid:c}}),g("w",[],function(){var a=function(a,b){function c(c){var e,f,g;f=b[c?"startContainer":"endContainer"],g=b[c?"startOffset":"endOffset"],1==f.nodeType&&(e=a.create("span",{"data-mce-type":"bookmark"}),f.hasChildNodes()?(g=Math.min(g,f.childNodes.length-1),c?f.insertBefore(e,f.childNodes[g]):a.insertAfter(e,f.childNodes[g])):f.appendChild(e),f=e,g=0),d[c?"startContainer":"endContainer"]=f,d[c?"startOffset":"endOffset"]=g}var d={};return c(!0),b.collapsed||c(),d},b=function(a,b){function c(c){function d(a){for(var b=a.parentNode.firstChild,c=0;b;){if(b==a)return c;1==b.nodeType&&"bookmark"==b.getAttribute("data-mce-type")||c++,b=b.nextSibling}return-1}var e,f,g;e=g=b[c?"startContainer":"endContainer"],f=b[c?"startOffset":"endOffset"],e&&(1==e.nodeType&&(f=d(e),e=e.parentNode,a.remove(g)),b[c?"startContainer":"endContainer"]=e,b[c?"startOffset":"endOffset"]=f)}c(!0),c();var d=a.createRng();return d.setStart(b.startContainer,b.startOffset),b.endContainer&&d.setEnd(b.endContainer,b.endOffset),d};return{create:a,resolve:b}}),g("x",["d"],function(a){return a("tinymce.dom.TreeWalker")}),g("y",["d"],function(a){return a("tinymce.dom.RangeUtils")}),g("t",["w","g","x","y"],function(a,b,c,d){var e=function(a,b,d){var e,f,g=[];for(e=new c(b,a),f=b;f&&(1===f.nodeType&&g.push(f),f!==d);f=e.next());return g},f=function(c,d){var e,f,g;f=c.dom,g=c.selection,e=a.create(f,g.getRng()),b.each(d,function(a){c.dom.remove(a,!0)}),g.setRng(a.resolve(f,e))},g=function(a){return"A"===a.nodeName&&a.hasAttribute("href")},h=function(a,b){var c=a.getParent(b,g);return c?c:b},i=function(a){var c,f,i,j,k,l,m;return k=a.selection,l=a.dom,m=k.getRng(),c=h(l,d.getNode(m.startContainer,m.startOffset)),f=d.getNode(m.endContainer,m.endOffset),i=a.getBody(),j=b.grep(e(i,c,f),g)},j=function(a){f(a,i(a))};return{unlinkSelection:j}}),g("p",["s","t"],function(a,b){var c=function(a,b){var c,d,e;for(e='<table data-mce-id="mce" style="width: 100%">',e+="<tbody>",d=0;d<b;d++){for(e+="<tr>",c=0;c<a;c++)e+="<td><br></td>";e+="</tr>"}return e+="</tbody>",e+="</table>"},d=function(a){var b=a.dom.select("*[data-mce-id]");return b[0]},e=function(a,b,e){a.undoManager.transact(function(){var f,g;a.insertContent(c(b,e)),f=d(a),f.removeAttribute("data-mce-id"),g=a.dom.select("td,th",f),a.selection.setCursorLocation(g[0],0)})},f=function(a,b){a.execCommand("FormatBlock",!1,b)},g=function(b,c,d){var e,f;e=b.editorUpload.blobCache,f=e.create(a.uuid("mceu"),d,c),e.add(f),b.insertContent(b.dom.createHTML("img",{src:f.blobUri()}))},h=function(a){a.selection.collapse(!1)},i=function(a){a.focus(),b.unlinkSelection(a),h(a)},j=function(a,b,c){a.focus(),a.dom.setAttrib(b,"href",c),h(a)},k=function(a,b){a.execCommand("mceInsertLink",!1,{href:b}),h(a)},l=function(a,b){var c=a.dom.getParent(a.selection.getStart(),"a[href]");c?j(a,c,b):k(a,b)},m=function(a,b){0===b.trim().length?i(a):l(a,b)};return{insertTable:e,formatBlock:f,insertBlob:g,createLink:m,unlink:i}}),g("u",[],function(){var a=function(a){return/^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(a.trim())},b=function(a){return/^https?:\/\//.test(a.trim())};return{isDomainLike:a,isAbsolute:b}}),g("l",["g","j","r","p","u"],function(a,b,c,d,e){var f=function(a){a.find("textbox").eq(0).each(function(a){a.focus()})},g=function(c,d){var e=b.create(a.extend({type:"form",layout:"flex",direction:"row",padding:5,name:c,spacing:3},d));return e.on("show",function(){f(e)}),e},h=function(a,b){return b?a.show():a.hide()},i=function(a,b){return new c(function(c){a.windowManager.confirm("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(a){var d=a===!0?"http://"+b:b;c(d)})})},j=function(a,b){return!e.isAbsolute(b)&&e.isDomainLike(b)?i(a,b):c.resolve(b)},k=function(a,b){var c={},e=function(){a.focus(),d.unlink(a),b()},f=function(a){var b=a.meta;b&&b.attach&&(c={href:this.value(),attach:b.attach})},i=function(b){if(b.control===this){var c,d="";c=a.dom.getParent(a.selection.getStart(),"a[href]"),c&&(d=a.dom.getAttrib(c,"href")),this.fromJSON({linkurl:d}),h(this.find("#unlink"),c),this.find("#linkurl")[0].focus()}};return g("quicklink",{items:[{type:"button",name:"unlink",icon:"unlink",onclick:e,tooltip:"Remove link"},{type:"filepicker",name:"linkurl",placeholder:"Paste or type a link",filetype:"file",onchange:f},{type:"button",icon:"checkmark",subtype:"primary",tooltip:"Ok",onclick:"submit"}],onshow:i,onsubmit:function(e){j(a,e.data.linkurl).then(function(e){a.undoManager.transact(function(){e===c.href&&(c.attach(),c={}),d.createLink(a,e)}),b()})}})};return{createQuickLinkForm:k}}),g("v",["d"],function(a){return a("tinymce.geom.Rect")}),g("m",["v","q"],function(a,b){var c=function(a,b){return{rect:a,position:b}},d=function(a,b){return{x:b.x,y:b.y,w:a.w,h:a.h}},e=function(b,e,f,g,h){var i,j,k,l={x:g.x,y:g.y,w:g.w+(g.w<h.w+f.w?h.w:0),h:g.h+(g.h<h.h+f.h?h.h:0)};return i=a.findBestRelativePosition(h,f,l,b),f=a.clamp(f,l),i?(j=a.relativePosition(h,f,i),k=d(h,j),c(k,i)):(f=a.intersect(l,f),f?(i=a.findBestRelativePosition(h,f,l,e))?(j=a.relativePosition(h,f,i),k=d(h,j),c(k,i)):(k=d(h,f),c(k,i)):null)},f=function(a,b,c){return e(["cr-cl","cl-cr"],["bc-tc","bl-tl","br-tr"],a,b,c)},g=function(a,b,c){return e(["tc-bc","bc-tc","tl-bl","bl-tl","tr-br","br-tr","cr-cl","cl-cr"],["bc-tc","bl-tl","br-tr","cr-cl"],a,b,c)},h=function(a,c,d,e){var f;return"function"==typeof a?(f=a({elementRect:b.toClientRect(c),contentAreaRect:b.toClientRect(d),panelRect:b.toClientRect(e)}),b.fromClientRect(f)):e},i=function(a){return a.panelRect};return{calcInsert:f,calc:g,userConstrain:h,defaultHandler:i}}),g("c",["g","j","i","k","l","f","m","5"],function(a,b,c,d,e,f,g,h){return function(){var i,j,k=["bold","italic","|","quicklink","h2","h3","blockquote"],l=["quickimage","quicktable"],m=function(b,c){return a.map(c,function(a){return d.create(b,a.id,a.items)})},n=function(a){return h.getToolbarItemsOr(a,"selection_toolbar",k)},o=function(a){return h.getToolbarItemsOr(a,"insert_toolbar",l)},p=function(a){return a.items().length>0},q=function(c,f){var g=m(c,f).concat([d.create(c,"text",n(c)),d.create(c,"insert",o(c)),e.createQuickLinkForm(c,B)]);return b.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:a.grep(g,p),oncancel:function(){c.focus()}})},r=function(a){a&&a.show()},s=function(a,b){a.moveTo(b.x,b.y)},t=function(b,c){c=c?c.substr(0,2):"",a.each({t:"down",b:"up",c:"center"},function(a,d){b.classes.toggle("arrow-"+a,d===c.substr(0,1))}),"cr"===c?(b.classes.toggle("arrow-left",!0),b.classes.toggle("arrow-right",!1)):"cl"===c?(b.classes.toggle("arrow-left",!0),b.classes.toggle("arrow-right",!0)):a.each({l:"left",r:"right"},function(a,d){b.classes.toggle("arrow-"+a,d===c.substr(1,1))})},u=function(a,b){var c=a.items().filter("#"+b);return c.length>0&&(c[0].show(),a.reflow(),!0)},v=function(a,b,d,e){var i,k,l,m;return m=h.getHandlerOr(d,"inline_toolbar_position_handler",g.defaultHandler),i=f.getContentAreaRect(d),k=c.DOM.getRect(a.getEl()),l="insert"===b?g.calcInsert(e,i,k):g.calc(e,i,k),!!l&&(k=l.rect,j=e,s(a,g.userConstrain(m,e,i,k)),t(a,l.position),!0)},w=function(a,b,c,d){return r(a),a.items().hide(),u(a,b)?void(v(a,b,c,d)===!1&&B(a)):void B(a)},x=function(){return i.items().filter("form:visible").length>0},y=function(a,b){if(i){if(i.items().hide(),!u(i,b))return void B(i);var d,e,k,l;r(i),i.items().hide(),u(i,b),l=h.getHandlerOr(a,"inline_toolbar_position_handler",g.defaultHandler),d=f.getContentAreaRect(a),e=c.DOM.getRect(i.getEl()),k=g.calc(j,d,e),k&&(e=k.rect,s(i,g.userConstrain(l,j,d,e)),t(i,k.position))}},z=function(a,b,c,d){i||(i=q(a,d),i.renderTo(document.body).reflow().moveTo(c.x,c.y),a.nodeChanged()),w(i,b,a,c)},A=function(a,b,c){i&&v(i,b,a,c)},B=function(){i&&i.hide()},C=function(){i&&i.find("toolbar:visible").eq(0).each(function(a){a.focus(!0)})},D=function(){i&&(i.remove(),i=null)},E=function(){return i&&i.visible()&&x()};return{show:z,showForm:y,reposition:A,inForm:E,hide:B,focus:C,remove:D}}}),g("n",["r"],function(a){var b=function(b){return new a(function(a){var c=new FileReader;c.onloadend=function(){a(c.result.split(",")[1])},c.readAsDataURL(b)})};return{blobToBase64:b}}),g("o",["r"],function(a){var b=function(){return new a(function(a){var b;b=document.createElement("input"),b.type="file",b.style.position="fixed",b.style.left=0,b.style.top=0,b.style.opacity=.001,document.body.appendChild(b),b.onchange=function(b){a(Array.prototype.slice.call(b.target.files))},b.click(),b.parentNode.removeChild(b)})};return{pickFile:b}}),g("b",["c","n","o","p"],function(a,b,c,d){var e=function(a){for(var b=function(b){return function(){d.formatBlock(a,b)}},c=1;c<6;c++){var e="h"+c;a.addButton(e,{text:e.toUpperCase(),tooltip:"Heading "+c,stateSelector:e,onclick:b(e),onPostRender:function(){var a=this.getEl().firstChild.firstChild;a.style.fontWeight="bold"}})}},f=function(a,f){a.addButton("quicklink",{icon:"link",tooltip:"Insert/Edit link",stateSelector:"a[href]",onclick:function(){f.showForm(a,"quicklink")}}),a.addButton("quickimage",{icon:"image",tooltip:"Insert image",onclick:function(){c.pickFile().then(function(c){var e=c[0];b.blobToBase64(e).then(function(b){d.insertBlob(a,b,e)})})}}),a.addButton("quicktable",{icon:"table",tooltip:"Insert table",onclick:function(){f.hide(),d.insertTable(a,2,2)}}),e(a)};return{addToEditor:f}}),g("0",["1","2","3","4","5","6","7","8","9","a","b","c"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(a){var b=a.selection.getNode(),c=a.dom.getParents(b);return c},n=function(a,b,c,d){var e=function(c){return a.dom.is(c,b)};return{predicate:e,id:c,items:d}},o=function(a){var b=a.contextToolbars;return d.flatten([b?b:[],n(a,"img","image","alignleft aligncenter alignright")])},p=function(a,b){var c,d,e;return d=m(a),e=h.fromContextToolbars(b),c=g.match(a,[f.element(d[0],e),i.textSelection("text"),i.emptyTextBlock(d,"insert"),f.parent(d,e)]),c&&c.rect?c:null},q=function(a,b){var c=function(){var c=o(a),d=p(a,c);d?b.show(a,d.id,d.rect,c):b.hide()};return function(){a.removed||c()}},r=function(a,b){return function(){var c=o(a),d=p(a,c);d&&b.reposition(a,d.id,d.rect)}},s=function(a,b,c){return function(){a.removed||b.inForm()||c()}},t=function(a,b){var d=c.throttle(q(a,b),0),e=c.throttle(s(a,b,q(a,b)),0);a.on("blur hide ObjectResizeStart",b.hide),a.on("click",d),a.on("nodeChange mouseup",e),a.on("ResizeEditor keyup",d),a.on("ResizeWindow",r(a,b)),a.on("remove",b.remove),a.shortcuts.add("Alt+F10","",b.focus)},u=function(a,b){a.shortcuts.remove("meta+k"),a.shortcuts.add("meta+k","",function(){var c=o(a),d=d=g.match(a,[i.textSelection("quicklink")]);d&&b.show(a,d.id,d.rect,c)})},v=function(a,b){return j.load(a,function(){t(a,b),u(a,b)}),{}},w=function(a){throw new Error(a)};return a.add("inlite",function(a){var b=new l;k.addToEditor(a,b);var c=function(){return a.inline?v(a,b):w("inlite theme only supports inline mode.")};return{renderUI:c}}),b.appendTo(window.tinymce?window.tinymce:{}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var u,t,e,n,i,r,o=tinymce.util.Tools.resolve("tinymce.ThemeManager"),h=tinymce.util.Tools.resolve("tinymce.Env"),v=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),c=tinymce.util.Tools.resolve("tinymce.util.Delay"),s=function(t){return t.reduce(function(t,e){return Array.isArray(e)?t.concat(s(e)):t.concat(e)},[])},a={flatten:s},l=function(t,e){for(var n=0;n<e.length;n++){var i=(0,e[n])(t);if(i)return i}return null},d=function(t,e){return{id:t,rect:e}},f=function(t){return{x:t.left,y:t.top,w:t.width,h:t.height}},m=function(t){return{left:t.x,top:t.y,width:t.w,height:t.h,right:t.x+t.w,bottom:t.y+t.h}},g=function(t){var e=v.DOM.getViewPort();return{x:t.x+e.x,y:t.y+e.y,w:t.w,h:t.h}},p=function(t){var e=t.getBoundingClientRect();return g({x:e.left,y:e.top,w:Math.max(t.clientWidth,t.offsetWidth),h:Math.max(t.clientHeight,t.offsetHeight)})},b=function(t,e){return p(e)},y=function(t){return p(t.getContentAreaContainer()||t.getBody())},x=function(t){var e=t.selection.getBoundingClientRect();return e?g(f(e)):null},w=function(n,i){return function(t){for(var e=0;e<i.length;e++)if(i[e].predicate(n))return d(i[e].id,b(t,n));return null}},_=function(i,r){return function(t){for(var e=0;e<i.length;e++)for(var n=0;n<r.length;n++)if(r[n].predicate(i[e]))return d(r[n].id,b(t,i[e]));return null}},C=tinymce.util.Tools.resolve("tinymce.util.Tools"),R=function(t,e){return{id:t,predicate:e}},E=function(t){return C.map(t,function(t){return R(t.id,t.predicate)})},k=function(e){return function(t){return t.selection.isCollapsed()?null:d(e,x(t))}},T=function(i,r){return function(t){var e,n=t.schema.getTextBlockElements();for(e=0;e<i.length;e++)if("TABLE"===i[e].nodeName)return null;for(e=0;e<i.length;e++)if(i[e].nodeName in n)return t.dom.isEmpty(i[e])?d(r,x(t)):null;return null}},H=function(t){t.fire("SkinLoaded")},M=function(t){return t.fire("BeforeRenderUI")},S=tinymce.util.Tools.resolve("tinymce.EditorManager"),N=function(e){return function(t){return typeof t===e}},O=function(t){return Array.isArray(t)},D=function(t){return N("string")(t)},P=function(t){return N("number")(t)},W=function(t){return N("boolean")(t)},A=function(t){return N("function")(t)},B=(N("object"),O),L=function(t,e){if(e(t))return!0;throw new Error("Default value doesn't match requested type.")},I=function(r){return function(t,e,n){var i=t.settings;return L(n,r),e in i&&r(i[e])?i[e]:n}},z={getStringOr:I(D),getBoolOr:I(W),getNumberOr:I(P),getHandlerOr:I(A),getToolbarItemsOr:(u=B,function(t,e,n){var i,r,o,s,a,l=e in t.settings?t.settings[e]:n;return L(n,u),r=n,B(i=l)?i:D(i)?"string"==typeof(s=i)?(a=/[ ,]/,s.split(a).filter(function(t){return 0<t.length})):s:W(i)?(o=r,!1===i?[]:o):r})},F=tinymce.util.Tools.resolve("tinymce.geom.Rect"),U=function(t,e){return{rect:t,position:e}},V=function(t,e){return{x:e.x,y:e.y,w:t.w,h:t.h}},q=function(t,e,n,i,r){var o,s,a,l={x:i.x,y:i.y,w:i.w+(i.w<r.w+n.w?r.w:0),h:i.h+(i.h<r.h+n.h?r.h:0)};return o=F.findBestRelativePosition(r,n,l,t),n=F.clamp(n,l),o?(s=F.relativePosition(r,n,o),a=V(r,s),U(a,o)):(n=F.intersect(l,n))?((o=F.findBestRelativePosition(r,n,l,e))?(s=F.relativePosition(r,n,o),a=V(r,s)):a=V(r,n),U(a,o)):null},Y=function(t,e,n){return q(["cr-cl","cl-cr"],["bc-tc","bl-tl","br-tr"],t,e,n)},$=function(t,e,n){return q(["tc-bc","bc-tc","tl-bl","bl-tl","tr-br","br-tr","cr-cl","cl-cr"],["bc-tc","bl-tl","br-tr","cr-cl"],t,e,n)},X=function(t,e,n,i){var r;return"function"==typeof t?(r=t({elementRect:m(e),contentAreaRect:m(n),panelRect:m(i)}),f(r)):i},j=function(t){return t.panelRect},J=function(t){return z.getToolbarItemsOr(t,"selection_toolbar",["bold","italic","|","quicklink","h2","h3","blockquote"])},G=function(t){return z.getToolbarItemsOr(t,"insert_toolbar",["quickimage","quicktable"])},K=function(t){return z.getHandlerOr(t,"inline_toolbar_position_handler",j)},Z=function(t){var e,n,i,r,o=t.settings;return o.skin_url?(i=t,r=o.skin_url,i.documentBaseURI.toAbsolute(r)):(e=o.skin,n=S.baseURL+"/skins/",e?n+e:n+"lightgray")},Q=function(t){return!1===t.settings.skin},tt=function(i,r){var t=Z(i),e=function(){var t,e,n;e=r,n=function(){t._skinLoaded=!0,H(t),e()},(t=i).initialized?n():t.on("init",n)};Q(i)?e():(v.DOM.styleSheetLoader.load(t+"/skin.min.css",e),i.contentCSS.push(t+"/content.inline.min.css"))},et=function(t){var e,n,i,r,o=t.contextToolbars;return a.flatten([o||[],(e=t,n="img",i="image",r="alignleft aligncenter alignright",{predicate:function(t){return e.dom.is(t,n)},id:i,items:r})])},nt=function(t,e){var n,i,r,o,s;return s=(o=t).selection.getNode(),i=o.dom.getParents(s,"*"),r=E(e),(n=l(t,[w(i[0],r),k("text"),T(i,"insert"),_(i,r)]))&&n.rect?n:null},it=function(i,r){return function(){var t,e,n;i.removed||(n=i,document.activeElement!==n.getBody())||(t=et(i),(e=nt(i,t))?r.show(i,e.id,e.rect,t):r.hide())}},rt=function(t,e){var n,i,r,o,s,a=c.throttle(it(t,e),0),l=c.throttle((r=it(n=t,i=e),function(){n.removed||i.inForm()||r()}),0),u=(o=t,s=e,function(){var t=et(o),e=nt(o,t);e&&s.reposition(o,e.id,e.rect)});t.on("blur hide ObjectResizeStart",e.hide),t.on("click",a),t.on("nodeChange mouseup",l),t.on("ResizeEditor keyup",a),t.on("ResizeWindow",u),v.DOM.bind(h.container,"scroll",u),t.on("remove",function(){v.DOM.unbind(h.container,"scroll",u),e.remove()}),t.shortcuts.add("Alt+F10,F10","",e.focus)},ot=function(t,e){return tt(t,function(){var n,i;rt(t,e),i=e,(n=t).shortcuts.remove("meta+k"),n.shortcuts.add("meta+k","",function(){var t=et(n),e=l(n,[k("quicklink")]);e&&i.show(n,e.id,e.rect,t)})}),{}},st=function(t,e){return t.inline?ot(t,e):function(t){throw new Error(t)}("inlite theme only supports inline mode.")},at=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e]},lt=function(t){return function(){return t}},ut=lt(!1),ct=lt(!0),dt=ut,ft=ct,ht=function(){return mt},mt=(i={fold:function(t,e){return t()},is:dt,isSome:dt,isNone:ft,getOr:n=function(t){return t},getOrThunk:e=function(t){return t()},getOrDie:function(t){throw new Error(t||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:n,orThunk:e,map:ht,ap:ht,each:function(){},bind:ht,flatten:ht,exists:dt,forall:ft,filter:ht,equals:t=function(t){return t.isNone()},equals_:t,toArray:function(){return[]},toString:lt("none()")},Object.freeze&&Object.freeze(i),i),gt=function(n){var t=function(){return n},e=function(){return r},i=function(t){return t(n)},r={fold:function(t,e){return e(n)},is:function(t){return n===t},isSome:ft,isNone:dt,getOr:t,getOrThunk:t,getOrDie:t,getOrNull:t,getOrUndefined:t,or:e,orThunk:e,map:function(t){return gt(t(n))},ap:function(t){return t.fold(ht,function(t){return gt(t(n))})},each:function(t){t(n)},bind:i,flatten:t,exists:i,forall:i,filter:function(t){return t(n)?r:mt},equals:function(t){return t.is(n)},equals_:function(t,e){return t.fold(dt,function(t){return e(n,t)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return r},pt={some:gt,none:ht,from:function(t){return null===t||t===undefined?mt:gt(t)}},vt=function(e){return function(t){return function(t){if(null===t)return"null";var e=typeof t;return"object"===e&&Array.prototype.isPrototypeOf(t)?"array":"object"===e&&String.prototype.isPrototypeOf(t)?"string":e}(t)===e}},bt=vt("function"),yt=vt("number"),xt=(r=Array.prototype.indexOf)===undefined?function(t,e){return Tt(t,e)}:function(t,e){return r.call(t,e)},wt=function(t,e){return kt(t,e).isSome()},_t=function(t,e){for(var n=t.length,i=new Array(n),r=0;r<n;r++){var o=t[r];i[r]=e(o,r,t)}return i},Ct=function(t,e){for(var n=0,i=t.length;n<i;n++)e(t[n],n,t)},Rt=function(t,e){for(var n=[],i=0,r=t.length;i<r;i++){var o=t[i];e(o,i,t)&&n.push(o)}return n},Et=function(t,e){for(var n=0,i=t.length;n<i;n++){var r=t[n];if(e(r,n,t))return pt.some(r)}return pt.none()},kt=function(t,e){for(var n=0,i=t.length;n<i;n++)if(e(t[n],n,t))return pt.some(n);return pt.none()},Tt=function(t,e){for(var n=0,i=t.length;n<i;++n)if(t[n]===e)return n;return-1},Ht=Array.prototype.push,Mt=(Array.prototype.slice,bt(Array.from)&&Array.from,0),St={id:function(){return"mceu_"+Mt++},create:function(t,e,n){var i=document.createElement(t);return v.DOM.setAttribs(i,e),"string"==typeof n?i.innerHTML=n:C.each(n,function(t){t.nodeType&&i.appendChild(t)}),i},createFragment:function(t){return v.DOM.createFragment(t)},getWindowSize:function(){return v.DOM.getViewPort()},getSize:function(t){var e,n;if(t.getBoundingClientRect){var i=t.getBoundingClientRect();e=Math.max(i.width||i.right-i.left,t.offsetWidth),n=Math.max(i.height||i.bottom-i.bottom,t.offsetHeight)}else e=t.offsetWidth,n=t.offsetHeight;return{width:e,height:n}},getPos:function(t,e){return v.DOM.getPos(t,e||St.getContainer())},getContainer:function(){return h.container?h.container:document.body},getViewPort:function(t){return v.DOM.getViewPort(t)},get:function(t){return document.getElementById(t)},addClass:function(t,e){return v.DOM.addClass(t,e)},removeClass:function(t,e){return v.DOM.removeClass(t,e)},hasClass:function(t,e){return v.DOM.hasClass(t,e)},toggleClass:function(t,e,n){return v.DOM.toggleClass(t,e,n)},css:function(t,e,n){return v.DOM.setStyle(t,e,n)},getRuntimeStyle:function(t,e){return v.DOM.getStyle(t,e,!0)},on:function(t,e,n,i){return v.DOM.bind(t,e,n,i)},off:function(t,e,n){return v.DOM.unbind(t,e,n)},fire:function(t,e,n){return v.DOM.fire(t,e,n)},innerHtml:function(t,e){v.DOM.setHTML(t,e)}},Nt=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),Ot=tinymce.util.Tools.resolve("tinymce.util.Class"),Dt=tinymce.util.Tools.resolve("tinymce.util.EventDispatcher"),Pt=function(t){var e;if(t)return"number"==typeof t?{top:t=t||0,left:t,bottom:t,right:t}:(1===(e=(t=t.split(" ")).length)?t[1]=t[2]=t[3]=t[0]:2===e?(t[2]=t[0],t[3]=t[1]):3===e&&(t[3]=t[1]),{top:parseInt(t[0],10)||0,right:parseInt(t[1],10)||0,bottom:parseInt(t[2],10)||0,left:parseInt(t[3],10)||0})},Wt=function(i,t){function e(t){var e=parseFloat(function(t){var e=i.ownerDocument.defaultView;if(e){var n=e.getComputedStyle(i,null);return n?(t=t.replace(/[A-Z]/g,function(t){return"-"+t}),n.getPropertyValue(t)):null}return i.currentStyle[t]}(t));return isNaN(e)?0:e}return{top:e(t+"TopWidth"),right:e(t+"RightWidth"),bottom:e(t+"BottomWidth"),left:e(t+"LeftWidth")}};function At(){}function Bt(t){this.cls=[],this.cls._map={},this.onchange=t||At,this.prefix=""}C.extend(Bt.prototype,{add:function(t){return t&&!this.contains(t)&&(this.cls._map[t]=!0,this.cls.push(t),this._change()),this},remove:function(t){if(this.contains(t)){var e=void 0;for(e=0;e<this.cls.length&&this.cls[e]!==t;e++);this.cls.splice(e,1),delete this.cls._map[t],this._change()}return this},toggle:function(t,e){var n=this.contains(t);return n!==e&&(n?this.remove(t):this.add(t),this._change()),this},contains:function(t){return!!this.cls._map[t]},_change:function(){delete this.clsValue,this.onchange.call(this)}}),Bt.prototype.toString=function(){var t;if(this.clsValue)return this.clsValue;t="";for(var e=0;e<this.cls.length;e++)0<e&&(t+=" "),t+=this.prefix+this.cls[e];return t};var Lt,It,zt,Ft=/^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,Ut=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,Vt=/^\s*|\s*$/g,qt=Ot.extend({init:function(t){var o=this.match;function s(t,e,n){var i;function r(t){t&&e.push(t)}return r(function(e){if(e)return e=e.toLowerCase(),function(t){return"*"===e||t.type===e}}((i=Ft.exec(t.replace(Vt,"")))[1])),r(function(e){if(e)return function(t){return t._name===e}}(i[2])),r(function(n){if(n)return n=n.split("."),function(t){for(var e=n.length;e--;)if(!t.classes.contains(n[e]))return!1;return!0}}(i[3])),r(function(n,i,r){if(n)return function(t){var e=t[n]?t[n]():"";return i?"="===i?e===r:"*="===i?0<=e.indexOf(r):"~="===i?0<=(" "+e+" ").indexOf(" "+r+" "):"!="===i?e!==r:"^="===i?0===e.indexOf(r):"$="===i&&e.substr(e.length-r.length)===r:!!r}}(i[4],i[5],i[6])),r(function(i){var e;if(i)return(i=/(?:not\((.+)\))|(.+)/i.exec(i))[1]?(e=a(i[1],[]),function(t){return!o(t,e)}):(i=i[2],function(t,e,n){return"first"===i?0===e:"last"===i?e===n-1:"even"===i?e%2==0:"odd"===i?e%2==1:!!t[i]&&t[i]()})}(i[7])),e.pseudo=!!i[7],e.direct=n,e}function a(t,e){var n,i,r,o=[];do{if(Ut.exec(""),(i=Ut.exec(t))&&(t=i[3],o.push(i[1]),i[2])){n=i[3];break}}while(i);for(n&&a(n,e),t=[],r=0;r<o.length;r++)">"!==o[r]&&t.push(s(o[r],[],">"===o[r-1]));return e.push(t),e}this._selectors=a(t,[])},match:function(t,e){var n,i,r,o,s,a,l,u,c,d,f,h,m;for(n=0,i=(e=e||this._selectors).length;n<i;n++){for(m=t,h=0,r=(o=(s=e[n]).length)-1;0<=r;r--)for(u=s[r];m;){if(u.pseudo)for(c=d=(f=m.parent().items()).length;c--&&f[c]!==m;);for(a=0,l=u.length;a<l;a++)if(!u[a](m,c,d)){a=l+1;break}if(a===l){h++;break}if(r===o-1)break;m=m.parent()}if(h===o)return!0}return!1},find:function(t){var e,n,u=[],i=this._selectors;function c(t,e,n){var i,r,o,s,a,l=e[n];for(i=0,r=t.length;i<r;i++){for(a=t[i],o=0,s=l.length;o<s;o++)if(!l[o](a,i,r)){o=s+1;break}if(o===s)n===e.length-1?u.push(a):a.items&&c(a.items(),e,n+1);else if(l.direct)return;a.items&&c(a.items(),e,n)}}if(t.items){for(e=0,n=i.length;e<n;e++)c(t.items(),i[e],0);1<n&&(u=function(t){for(var e,n=[],i=t.length;i--;)(e=t[i]).__checked||(n.push(e),e.__checked=1);for(i=n.length;i--;)delete n[i].__checked;return n}(u))}return Lt||(Lt=qt.Collection),new Lt(u)}}),Yt=Array.prototype.push,$t=Array.prototype.slice;zt={length:0,init:function(t){t&&this.add(t)},add:function(t){return C.isArray(t)?Yt.apply(this,t):t instanceof It?this.add(t.toArray()):Yt.call(this,t),this},set:function(t){var e,n=this,i=n.length;for(n.length=0,n.add(t),e=n.length;e<i;e++)delete n[e];return n},filter:function(e){var t,n,i,r,o=[];for("string"==typeof e?(e=new qt(e),r=function(t){return e.match(t)}):r=e,t=0,n=this.length;t<n;t++)r(i=this[t])&&o.push(i);return new It(o)},slice:function(){return new It($t.apply(this,arguments))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},each:function(t){return C.each(this,t),this},toArray:function(){return C.toArray(this)},indexOf:function(t){for(var e=this.length;e--&&this[e]!==t;);return e},reverse:function(){return new It(C.toArray(this).reverse())},hasClass:function(t){return!!this[0]&&this[0].classes.contains(t)},prop:function(e,n){var t;return n!==undefined?(this.each(function(t){t[e]&&t[e](n)}),this):(t=this[0])&&t[e]?t[e]():void 0},exec:function(e){var n=C.toArray(arguments).slice(1);return this.each(function(t){t[e]&&t[e].apply(t,n)}),this},remove:function(){for(var t=this.length;t--;)this[t].remove();return this},addClass:function(e){return this.each(function(t){t.classes.add(e)})},removeClass:function(e){return this.each(function(t){t.classes.remove(e)})}},C.each("fire on off show hide append prepend before after reflow".split(" "),function(n){zt[n]=function(){var e=C.toArray(arguments);return this.each(function(t){n in t&&t[n].apply(t,e)}),this}}),C.each("text name disabled active selected checked visible parent value data".split(" "),function(e){zt[e]=function(t){return this.prop(e,t)}}),It=Ot.extend(zt);var Xt=qt.Collection=It,jt=function(t){this.create=t.create};jt.create=function(r,o){return new jt({create:function(e,n){var i,t=function(t){e.set(n,t.value)};return e.on("change:"+n,function(t){r.set(o,t.value)}),r.on("change:"+o,t),(i=e._bindings)||(i=e._bindings=[],e.on("destroy",function(){for(var t=i.length;t--;)i[t]()})),i.push(function(){r.off("change:"+o,t)}),r.get(o)}})};var Jt=tinymce.util.Tools.resolve("tinymce.util.Observable");function Gt(t){return 0<t.nodeType}var Kt,Zt,Qt=Ot.extend({Mixins:[Jt],init:function(t){var e,n;for(e in t=t||{})(n=t[e])instanceof jt&&(t[e]=n.create(this,e));this.data=t},set:function(e,n){var i,r,o=this.data[e];if(n instanceof jt&&(n=n.create(this,e)),"object"==typeof e){for(i in e)this.set(i,e[i]);return this}return function t(e,n){var i,r;if(e===n)return!0;if(null===e||null===n)return e===n;if("object"!=typeof e||"object"!=typeof n)return e===n;if(C.isArray(n)){if(e.length!==n.length)return!1;for(i=e.length;i--;)if(!t(e[i],n[i]))return!1}if(Gt(e)||Gt(n))return e===n;for(i in r={},n){if(!t(e[i],n[i]))return!1;r[i]=!0}for(i in e)if(!r[i]&&!t(e[i],n[i]))return!1;return!0}(o,n)||(this.data[e]=n,r={target:this,name:e,value:n,oldValue:o},this.fire("change:"+e,r),this.fire("change",r)),this},get:function(t){return this.data[t]},has:function(t){return t in this.data},bind:function(t){return jt.create(this,t)},destroy:function(){this.fire("destroy")}}),te={},ee={add:function(t){var e=t.parent();if(e){if(!e._layout||e._layout.isNative())return;te[e._id]||(te[e._id]=e),Kt||(Kt=!0,c.requestAnimationFrame(function(){var t,e;for(t in Kt=!1,te)(e=te[t]).state.get("rendered")&&e.reflow();te={}},document.body))}},remove:function(t){te[t._id]&&delete te[t._id]}},ne=function(t){return t?t.getRoot().uiContainer:null},ie={getUiContainerDelta:function(t){var e=ne(t);if(e&&"static"!==v.DOM.getStyle(e,"position",!0)){var n=v.DOM.getPos(e),i=e.scrollLeft-n.x,r=e.scrollTop-n.y;return pt.some({x:i,y:r})}return pt.none()},setUiContainer:function(t,e){var n=v.DOM.select(t.settings.ui_container)[0];e.getRoot().uiContainer=n},getUiContainer:ne,inheritUiContainer:function(t,e){return e.uiContainer=ne(t)}},re="onmousewheel"in document,oe=!1,se=0,ae={Statics:{classPrefix:"mce-"},isRtl:function(){return Zt.rtl},classPrefix:"mce-",init:function(e){var t,n,i=this;function r(t){var e;for(t=t.split(" "),e=0;e<t.length;e++)i.classes.add(t[e])}i.settings=e=C.extend({},i.Defaults,e),i._id=e.id||"mceu_"+se++,i._aria={role:e.role},i._elmCache={},i.$=Nt,i.state=new Qt({visible:!0,active:!1,disabled:!1,value:""}),i.data=new Qt(e.data),i.classes=new Bt(function(){i.state.get("rendered")&&(i.getEl().className=this.toString())}),i.classes.prefix=i.classPrefix,(t=e.classes)&&(i.Defaults&&(n=i.Defaults.classes)&&t!==n&&r(n),r(t)),C.each("title text name visible disabled active value".split(" "),function(t){t in e&&i[t](e[t])}),i.on("click",function(){if(i.disabled())return!1}),i.settings=e,i.borderBox=Pt(e.border),i.paddingBox=Pt(e.padding),i.marginBox=Pt(e.margin),e.hidden&&i.hide()},Properties:"parent,name",getContainerElm:function(){var t=ie.getUiContainer(this);return t||St.getContainer()},getParentCtrl:function(t){for(var e,n=this.getRoot().controlIdLookup;t&&n&&!(e=n[t.id]);)t=t.parentNode;return e},initLayoutRect:function(){var t,e,n,i,r,o,s,a,l,u,c=this,d=c.settings,f=c.getEl();t=c.borderBox=c.borderBox||Wt(f,"border"),c.paddingBox=c.paddingBox||Wt(f,"padding"),c.marginBox=c.marginBox||Wt(f,"margin"),u=St.getSize(f),a=d.minWidth,l=d.minHeight,r=a||u.width,o=l||u.height,n=d.width,i=d.height,s=void 0!==(s=d.autoResize)?s:!n&&!i,n=n||r,i=i||o;var h=t.left+t.right,m=t.top+t.bottom,g=d.maxWidth||65535,p=d.maxHeight||65535;return c._layoutRect=e={x:d.x||0,y:d.y||0,w:n,h:i,deltaW:h,deltaH:m,contentW:n-h,contentH:i-m,innerW:n-h,innerH:i-m,startMinWidth:a||0,startMinHeight:l||0,minW:Math.min(r,g),minH:Math.min(o,p),maxW:g,maxH:p,autoResize:s,scrollW:0},c._lastLayoutRect={},e},layoutRect:function(t){var e,n,i,r,o,s=this,a=s._layoutRect;return a||(a=s.initLayoutRect()),t?(i=a.deltaW,r=a.deltaH,t.x!==undefined&&(a.x=t.x),t.y!==undefined&&(a.y=t.y),t.minW!==undefined&&(a.minW=t.minW),t.minH!==undefined&&(a.minH=t.minH),(n=t.w)!==undefined&&(n=(n=n<a.minW?a.minW:n)>a.maxW?a.maxW:n,a.w=n,a.innerW=n-i),(n=t.h)!==undefined&&(n=(n=n<a.minH?a.minH:n)>a.maxH?a.maxH:n,a.h=n,a.innerH=n-r),(n=t.innerW)!==undefined&&(n=(n=n<a.minW-i?a.minW-i:n)>a.maxW-i?a.maxW-i:n,a.innerW=n,a.w=n+i),(n=t.innerH)!==undefined&&(n=(n=n<a.minH-r?a.minH-r:n)>a.maxH-r?a.maxH-r:n,a.innerH=n,a.h=n+r),t.contentW!==undefined&&(a.contentW=t.contentW),t.contentH!==undefined&&(a.contentH=t.contentH),(e=s._lastLayoutRect).x===a.x&&e.y===a.y&&e.w===a.w&&e.h===a.h||((o=Zt.repaintControls)&&o.map&&!o.map[s._id]&&(o.push(s),o.map[s._id]=!0),e.x=a.x,e.y=a.y,e.w=a.w,e.h=a.h),s):a},repaint:function(){var t,e,n,i,r,o,s,a,l,u,c=this;l=document.createRange?function(t){return t}:Math.round,t=c.getEl().style,i=c._layoutRect,a=c._lastRepaintRect||{},o=(r=c.borderBox).left+r.right,s=r.top+r.bottom,i.x!==a.x&&(t.left=l(i.x)+"px",a.x=i.x),i.y!==a.y&&(t.top=l(i.y)+"px",a.y=i.y),i.w!==a.w&&(u=l(i.w-o),t.width=(0<=u?u:0)+"px",a.w=i.w),i.h!==a.h&&(u=l(i.h-s),t.height=(0<=u?u:0)+"px",a.h=i.h),c._hasBody&&i.innerW!==a.innerW&&(u=l(i.innerW),(n=c.getEl("body"))&&((e=n.style).width=(0<=u?u:0)+"px"),a.innerW=i.innerW),c._hasBody&&i.innerH!==a.innerH&&(u=l(i.innerH),(n=n||c.getEl("body"))&&((e=e||n.style).height=(0<=u?u:0)+"px"),a.innerH=i.innerH),c._lastRepaintRect=a,c.fire("repaint",{},!1)},updateLayoutRect:function(){var t=this;t.parent()._lastRect=null,St.css(t.getEl(),{width:"",height:""}),t._layoutRect=t._lastRepaintRect=t._lastLayoutRect=null,t.initLayoutRect()},on:function(t,e){var n,i,r,o=this;return le(o).on(t,"string"!=typeof(n=e)?n:function(t){return i||o.parentsAndSelf().each(function(t){var e=t.settings.callbacks;if(e&&(i=e[n]))return r=t,!1}),i?i.call(r,t):(t.action=n,void this.fire("execute",t))}),o},off:function(t,e){return le(this).off(t,e),this},fire:function(t,e,n){if((e=e||{}).control||(e.control=this),e=le(this).fire(t,e),!1!==n&&this.parent)for(var i=this.parent();i&&!e.isPropagationStopped();)i.fire(t,e,!1),i=i.parent();return e},hasEventListeners:function(t){return le(this).has(t)},parents:function(t){var e,n=new Xt;for(e=this.parent();e;e=e.parent())n.add(e);return t&&(n=n.filter(t)),n},parentsAndSelf:function(t){return new Xt(this).add(this.parents(t))},next:function(){var t=this.parent().items();return t[t.indexOf(this)+1]},prev:function(){var t=this.parent().items();return t[t.indexOf(this)-1]},innerHtml:function(t){return this.$el.html(t),this},getEl:function(t){var e=t?this._id+"-"+t:this._id;return this._elmCache[e]||(this._elmCache[e]=Nt("#"+e)[0]),this._elmCache[e]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(t){}return this},blur:function(){return this.getEl().blur(),this},aria:function(t,e){var n=this,i=n.getEl(n.ariaTarget);return void 0===e?n._aria[t]:(n._aria[t]=e,n.state.get("rendered")&&i.setAttribute("role"===t?t:"aria-"+t,e),n)},encode:function(t,e){return!1!==e&&(t=this.translate(t)),(t||"").replace(/[&<>"]/g,function(t){return"&#"+t.charCodeAt(0)+";"})},translate:function(t){return Zt.translate?Zt.translate(t):t},before:function(t){var e=this.parent();return e&&e.insert(t,e.items().indexOf(this),!0),this},after:function(t){var e=this.parent();return e&&e.insert(t,e.items().indexOf(this)),this},remove:function(){var e,t,n=this,i=n.getEl(),r=n.parent();if(n.items){var o=n.items().toArray();for(t=o.length;t--;)o[t].remove()}r&&r.items&&(e=[],r.items().each(function(t){t!==n&&e.push(t)}),r.items().set(e),r._lastRect=null),n._eventsRoot&&n._eventsRoot===n&&Nt(i).off();var s=n.getRoot().controlIdLookup;return s&&delete s[n._id],i&&i.parentNode&&i.parentNode.removeChild(i),n.state.set("rendered",!1),n.state.destroy(),n.fire("remove"),n},renderBefore:function(t){return Nt(t).before(this.renderHtml()),this.postRender(),this},renderTo:function(t){return Nt(t||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return'<div id="'+this._id+'" class="'+this.classes+'"></div>'},postRender:function(){var t,e,n,i,r,o=this,s=o.settings;for(i in o.$el=Nt(o.getEl()),o.state.set("rendered",!0),s)0===i.indexOf("on")&&o.on(i.substr(2),s[i]);if(o._eventsRoot){for(n=o.parent();!r&&n;n=n.parent())r=n._eventsRoot;if(r)for(i in r._nativeEvents)o._nativeEvents[i]=!0}ue(o),s.style&&(t=o.getEl())&&(t.setAttribute("style",s.style),t.style.cssText=s.style),o.settings.border&&(e=o.borderBox,o.$el.css({"border-top-width":e.top,"border-right-width":e.right,"border-bottom-width":e.bottom,"border-left-width":e.left}));var a=o.getRoot();for(var l in a.controlIdLookup||(a.controlIdLookup={}),(a.controlIdLookup[o._id]=o)._aria)o.aria(l,o._aria[l]);!1===o.state.get("visible")&&(o.getEl().style.display="none"),o.bindStates(),o.state.on("change:visible",function(t){var e,n=t.value;o.state.get("rendered")&&(o.getEl().style.display=!1===n?"none":"",o.getEl().getBoundingClientRect()),(e=o.parent())&&(e._lastRect=null),o.fire(n?"show":"hide"),ee.add(o)}),o.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(t){var e,n,i,r,o,s,a=this.getEl(),l=a.parentNode,u=function(t,e){var n,i,r=t;for(n=i=0;r&&r!==e&&r.nodeType;)n+=r.offsetLeft||0,i+=r.offsetTop||0,r=r.offsetParent;return{x:n,y:i}}(a,l);return e=u.x,n=u.y,i=a.offsetWidth,r=a.offsetHeight,o=l.clientWidth,s=l.clientHeight,"end"===t?(e-=o-i,n-=s-r):"center"===t&&(e-=o/2-i/2,n-=s/2-r/2),l.scrollLeft=e,l.scrollTop=n,this},getRoot:function(){for(var t,e=this,n=[];e;){if(e.rootControl){t=e.rootControl;break}n.push(e),e=(t=e).parent()}t||(t=this);for(var i=n.length;i--;)n[i].rootControl=t;return t},reflow:function(){ee.remove(this);var t=this.parent();return t&&t._layout&&!t._layout.isNative()&&t.reflow(),this}};function le(n){return n._eventDispatcher||(n._eventDispatcher=new Dt({scope:n,toggleEvent:function(t,e){e&&Dt.isNative(t)&&(n._nativeEvents||(n._nativeEvents={}),n._nativeEvents[t]=!0,n.state.get("rendered")&&ue(n))}})),n._eventDispatcher}function ue(a){var t,e,n,l,i,r;function o(t){var e=a.getParentCtrl(t.target);e&&e.fire(t.type,t)}function s(){var t=l._lastHoverCtrl;t&&(t.fire("mouseleave",{target:t.getEl()}),t.parents().each(function(t){t.fire("mouseleave",{target:t.getEl()})}),l._lastHoverCtrl=null)}function u(t){var e,n,i,r=a.getParentCtrl(t.target),o=l._lastHoverCtrl,s=0;if(r!==o){if((n=(l._lastHoverCtrl=r).parents().toArray().reverse()).push(r),o){for((i=o.parents().toArray().reverse()).push(o),s=0;s<i.length&&n[s]===i[s];s++);for(e=i.length-1;s<=e;e--)(o=i[e]).fire("mouseleave",{target:o.getEl()})}for(e=s;e<n.length;e++)(r=n[e]).fire("mouseenter",{target:r.getEl()})}}function c(t){t.preventDefault(),"mousewheel"===t.type?(t.deltaY=-.025*t.wheelDelta,t.wheelDeltaX&&(t.deltaX=-.025*t.wheelDeltaX)):(t.deltaX=0,t.deltaY=t.detail),t=a.fire("wheel",t)}if(i=a._nativeEvents){for((n=a.parents().toArray()).unshift(a),t=0,e=n.length;!l&&t<e;t++)l=n[t]._eventsRoot;for(l||(l=n[n.length-1]||a),a._eventsRoot=l,e=t,t=0;t<e;t++)n[t]._eventsRoot=l;var d=l._delegates;for(r in d||(d=l._delegates={}),i){if(!i)return!1;"wheel"!==r||oe?("mouseenter"===r||"mouseleave"===r?l._hasMouseEnter||(Nt(l.getEl()).on("mouseleave",s).on("mouseover",u),l._hasMouseEnter=1):d[r]||(Nt(l.getEl()).on(r,o),d[r]=!0),i[r]=!1):re?Nt(a.getEl()).on("mousewheel",c):Nt(a.getEl()).on("DOMMouseScroll",c)}}}C.each("text title visible disabled active value".split(" "),function(e){ae[e]=function(t){return 0===arguments.length?this.state.get(e):(void 0!==t&&this.state.set(e,t),this)}});var ce=Zt=Ot.extend(ae),de=function(t){return"static"===St.getRuntimeStyle(t,"position")},fe=function(t){return t.state.get("fixed")};function he(t,e,n){var i,r,o,s,a,l,u,c,d,f;return d=me(),o=(r=St.getPos(e,ie.getUiContainer(t))).x,s=r.y,fe(t)&&de(document.body)&&(o-=d.x,s-=d.y),i=t.getEl(),a=(f=St.getSize(i)).width,l=f.height,u=(f=St.getSize(e)).width,c=f.height,"b"===(n=(n||"").split(""))[0]&&(s+=c),"r"===n[1]&&(o+=u),"c"===n[0]&&(s+=Math.round(c/2)),"c"===n[1]&&(o+=Math.round(u/2)),"b"===n[3]&&(s-=l),"r"===n[4]&&(o-=a),"c"===n[3]&&(s-=Math.round(l/2)),"c"===n[4]&&(o-=Math.round(a/2)),{x:o,y:s,w:a,h:l}}var me=function(){var t=window,e=Math.max(t.pageXOffset,document.body.scrollLeft,document.documentElement.scrollLeft),n=Math.max(t.pageYOffset,document.body.scrollTop,document.documentElement.scrollTop);return{x:e,y:n,w:e+(t.innerWidth||document.documentElement.clientWidth),h:n+(t.innerHeight||document.documentElement.clientHeight)}},ge=function(t){var e,n=ie.getUiContainer(t);return n&&!fe(t)?{x:0,y:0,w:(e=n).scrollWidth-1,h:e.scrollHeight-1}:me()},pe={testMoveRel:function(t,e){for(var n=ge(this),i=0;i<e.length;i++){var r=he(this,t,e[i]);if(fe(this)){if(0<r.x&&r.x+r.w<n.w&&0<r.y&&r.y+r.h<n.h)return e[i]}else if(r.x>n.x&&r.x+r.w<n.w&&r.y>n.y&&r.y+r.h<n.h)return e[i]}return e[0]},moveRel:function(t,e){"string"!=typeof e&&(e=this.testMoveRel(t,e));var n=he(this,t,e);return this.moveTo(n.x,n.y)},moveBy:function(t,e){var n=this.layoutRect();return this.moveTo(n.x+t,n.y+e),this},moveTo:function(t,e){var n=this;function i(t,e,n){return t<0?0:e<t+n&&(t=e-n)<0?0:t}if(n.settings.constrainToViewport){var r=ge(this),o=n.layoutRect();t=i(t,r.w,o.w),e=i(e,r.h,o.h)}var s=ie.getUiContainer(n);return s&&de(s)&&!fe(n)&&(t-=s.scrollLeft,e-=s.scrollTop),s&&(t+=1,e+=1),n.state.get("rendered")?n.layoutRect({x:t,y:e}).repaint():(n.settings.x=t,n.settings.y=e),n.fire("move",{x:t,y:e}),n}},ve=ce.extend({Mixins:[pe],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var t=this,e=t.classPrefix;return'<div id="'+t._id+'" class="'+t.classes+'" role="presentation"><div class="'+e+'tooltip-arrow"></div><div class="'+e+'tooltip-inner">'+t.encode(t.state.get("text"))+"</div></div>"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().lastChild.innerHTML=e.encode(t.value)}),e._super()},repaint:function(){var t,e;t=this.getEl().style,e=this._layoutRect,t.left=e.x+"px",t.top=e.y+"px",t.zIndex=131070}}),be=ce.extend({init:function(i){var r=this;r._super(i),i=r.settings,r.canFocus=!0,i.tooltip&&!1!==be.tooltips&&(r.on("mouseenter",function(t){var e=r.tooltip().moveTo(-65535);if(t.control===r){var n=e.text(i.tooltip).show().testMoveRel(r.getEl(),["bc-tc","bc-tl","bc-tr"]);e.classes.toggle("tooltip-n","bc-tc"===n),e.classes.toggle("tooltip-nw","bc-tl"===n),e.classes.toggle("tooltip-ne","bc-tr"===n),e.moveRel(r.getEl(),n)}else e.hide()}),r.on("mouseleave mousedown click",function(){r.tooltip().remove(),r._tooltip=null})),r.aria("label",i.ariaLabel||i.tooltip)},tooltip:function(){return this._tooltip||(this._tooltip=new ve({type:"tooltip"}),ie.inheritUiContainer(this,this._tooltip),this._tooltip.renderTo()),this._tooltip},postRender:function(){var t=this,e=t.settings;t._super(),t.parent()||!e.width&&!e.height||(t.initLayoutRect(),t.repaint()),e.autofocus&&t.focus()},bindStates:function(){var e=this;function n(t){e.aria("disabled",t),e.classes.toggle("disabled",t)}function i(t){e.aria("pressed",t),e.classes.toggle("active",t)}return e.state.on("change:disabled",function(t){n(t.value)}),e.state.on("change:active",function(t){i(t.value)}),e.state.get("disabled")&&n(!0),e.state.get("active")&&i(!0),e._super()},remove:function(){this._super(),this._tooltip&&(this._tooltip.remove(),this._tooltip=null)}}),ye=be.extend({Defaults:{value:0},init:function(t){this._super(t),this.classes.add("progress"),this.settings.filter||(this.settings.filter=function(t){return Math.round(t)})},renderHtml:function(){var t=this._id,e=this.classPrefix;return'<div id="'+t+'" class="'+this.classes+'"><div class="'+e+'bar-container"><div class="'+e+'bar"></div></div><div class="'+e+'text">0%</div></div>'},postRender:function(){return this._super(),this.value(this.settings.value),this},bindStates:function(){var e=this;function n(t){t=e.settings.filter(t),e.getEl().lastChild.innerHTML=t+"%",e.getEl().firstChild.firstChild.style.width=t+"%"}return e.state.on("change:value",function(t){n(t.value)}),n(e.state.get("value")),e._super()}}),xe=function(t,e){t.getEl().lastChild.textContent=e+(t.progressBar?" "+t.progressBar.value()+"%":"")},we=ce.extend({Mixins:[pe],Defaults:{classes:"widget notification"},init:function(t){var e=this;e._super(t),e.maxWidth=t.maxWidth,t.text&&e.text(t.text),t.icon&&(e.icon=t.icon),t.color&&(e.color=t.color),t.type&&e.classes.add("notification-"+t.type),t.timeout&&(t.timeout<0||0<t.timeout)&&!t.closeButton?e.closeButton=!1:(e.classes.add("has-close"),e.closeButton=!0),t.progressBar&&(e.progressBar=new ye),e.on("click",function(t){-1!==t.target.className.indexOf(e.classPrefix+"close")&&e.close()})},renderHtml:function(){var t,e=this,n=e.classPrefix,i="",r="",o="";return e.icon&&(i='<i class="'+n+"ico "+n+"i-"+e.icon+'"></i>'),t=' style="max-width: '+e.maxWidth+"px;"+(e.color?"background-color: "+e.color+';"':'"'),e.closeButton&&(r='<button type="button" class="'+n+'close" aria-hidden="true">\xd7</button>'),e.progressBar&&(o=e.progressBar.renderHtml()),'<div id="'+e._id+'" class="'+e.classes+'"'+t+' role="presentation">'+i+'<div class="'+n+'notification-inner">'+e.state.get("text")+"</div>"+o+r+'<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;" aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div></div>'},postRender:function(){var t=this;return c.setTimeout(function(){t.$el.addClass(t.classPrefix+"in"),xe(t,t.state.get("text"))},100),t._super()},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl().firstChild.innerHTML=t.value,xe(e,t.value)}),e.progressBar&&(e.progressBar.bindStates(),e.progressBar.state.on("change:value",function(t){xe(e,e.state.get("text"))})),e._super()},close:function(){return this.fire("close").isDefaultPrevented()||this.remove(),this},repaint:function(){var t,e;t=this.getEl().style,e=this._layoutRect,t.left=e.x+"px",t.top=e.y+"px",t.zIndex=65534}});function _e(o){var s=function(t){return t.inline?t.getElement():t.getContentAreaContainer()};return{open:function(t,e){var n,i=C.extend(t,{maxWidth:(n=s(o),St.getSize(n).width)}),r=new we(i);return 0<(r.args=i).timeout&&(r.timer=setTimeout(function(){r.close(),e()},i.timeout)),r.on("close",function(){e()}),r.renderTo(),r},close:function(t){t.close()},reposition:function(t){Ct(t,function(t){t.moveTo(0,0)}),function(n){if(0<n.length){var t=n.slice(0,1)[0],e=s(o);t.moveRel(e,"tc-tc"),Ct(n,function(t,e){0<e&&t.moveRel(n[e-1].getEl(),"bc-tc")})}}(t)},getArgs:function(t){return t.args}}}function Ce(t){var e,n;if(t.changedTouches)for(e="screenX screenY pageX pageY clientX clientY".split(" "),n=0;n<e.length;n++)t[e[n]]=t.changedTouches[0][e[n]]}function Re(t,h){var m,g,e,p,v,b,y,x=h.document||document;h=h||{};var w=x.getElementById(h.handle||t);e=function(t){var e,n,i,r,o,s,a,l,u,c,d,f=(e=x,u=Math.max,n=e.documentElement,i=e.body,r=u(n.scrollWidth,i.scrollWidth),o=u(n.clientWidth,i.clientWidth),s=u(n.offsetWidth,i.offsetWidth),a=u(n.scrollHeight,i.scrollHeight),l=u(n.clientHeight,i.clientHeight),{width:r<s?o:r,height:a<u(n.offsetHeight,i.offsetHeight)?l:a});Ce(t),t.preventDefault(),g=t.button,c=w,b=t.screenX,y=t.screenY,d=window.getComputedStyle?window.getComputedStyle(c,null).getPropertyValue("cursor"):c.runtimeStyle.cursor,m=Nt("<div></div>").css({position:"absolute",top:0,left:0,width:f.width,height:f.height,zIndex:2147483647,opacity:1e-4,cursor:d}).appendTo(x.body),Nt(x).on("mousemove touchmove",v).on("mouseup touchend",p),h.start(t)},v=function(t){if(Ce(t),t.button!==g)return p(t);t.deltaX=t.screenX-b,t.deltaY=t.screenY-y,t.preventDefault(),h.drag(t)},p=function(t){Ce(t),Nt(x).off("mousemove touchmove",v).off("mouseup touchend",p),m.remove(),h.stop&&h.stop(t)},this.destroy=function(){Nt(w).off()},Nt(w).on("mousedown touchstart",e)}var Ee=tinymce.util.Tools.resolve("tinymce.ui.Factory"),ke=function(t){return!!t.getAttribute("data-mce-tabstop")};function Te(t){var o,r,n=t.root;function i(t){return t&&1===t.nodeType}try{o=document.activeElement}catch(e){o=document.body}function s(t){return i(t=t||o)?t.getAttribute("role"):null}function a(t){for(var e,n=t||o;n=n.parentNode;)if(e=s(n))return e}function l(t){var e=o;if(i(e))return e.getAttribute("aria-"+t)}function u(t){var e=t.tagName.toUpperCase();return"INPUT"===e||"TEXTAREA"===e||"SELECT"===e}function c(e){var r=[];return function t(e){if(1===e.nodeType&&"none"!==e.style.display&&!e.disabled){var n;(u(n=e)&&!n.hidden||ke(n)||/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(s(n)))&&r.push(e);for(var i=0;i<e.childNodes.length;i++)t(e.childNodes[i])}}(e||n.getEl()),r}function d(t){var e,n;(n=(t=t||r).parents().toArray()).unshift(t);for(var i=0;i<n.length&&!(e=n[i]).settings.ariaRoot;i++);return e}function f(t,e){return t<0?t=e.length-1:t>=e.length&&(t=0),e[t]&&e[t].focus(),t}function h(t,e){var n=-1,i=d();e=e||c(i.getEl());for(var r=0;r<e.length;r++)e[r]===o&&(n=r);n+=t,i.lastAriaIndex=f(n,e)}function m(){"tablist"===a()?h(-1,c(o.parentNode)):r.parent().submenu?b():h(-1)}function g(){var t=s(),e=a();"tablist"===e?h(1,c(o.parentNode)):"menuitem"===t&&"menu"===e&&l("haspopup")?y():h(1)}function p(){h(-1)}function v(){var t=s(),e=a();"menuitem"===t&&"menubar"===e?y():"button"===t&&l("haspopup")?y({key:"down"}):h(1)}function b(){r.fire("cancel")}function y(t){t=t||{},r.fire("click",{target:o,aria:t})}return r=n.getParentCtrl(o),n.on("keydown",function(t){function e(t,e){u(o)||ke(o)||"slider"!==s(o)&&!1!==e(t)&&t.preventDefault()}if(!t.isDefaultPrevented())switch(t.keyCode){case 37:e(t,m);break;case 39:e(t,g);break;case 38:e(t,p);break;case 40:e(t,v);break;case 27:b();break;case 14:case 13:case 32:e(t,y);break;case 9:!function(t){if("tablist"===a()){var e=c(r.getEl("body"))[0];e&&e.focus()}else h(t.shiftKey?-1:1)}(t),t.preventDefault()}}),n.on("focusin",function(t){o=t.target,r=t.control}),{focusFirst:function(t){var e=d(t),n=c(e.getEl());e.settings.ariaRemember&&"lastAriaIndex"in e?f(e.lastAriaIndex,n):f(0,n)}}}var He,Me,Se,Ne,Oe={},De=ce.extend({init:function(t){var e=this;e._super(t),(t=e.settings).fixed&&e.state.set("fixed",!0),e._items=new Xt,e.isRtl()&&e.classes.add("rtl"),e.bodyClasses=new Bt(function(){e.state.get("rendered")&&(e.getEl("body").className=this.toString())}),e.bodyClasses.prefix=e.classPrefix,e.classes.add("container"),e.bodyClasses.add("container-body"),t.containerCls&&e.classes.add(t.containerCls),e._layout=Ee.create((t.layout||"")+"layout"),e.settings.items?e.add(e.settings.items):e.add(e.render()),e._hasBody=!0},items:function(){return this._items},find:function(t){return(t=Oe[t]=Oe[t]||new qt(t)).find(this)},add:function(t){return this.items().add(this.create(t)).parent(this),this},focus:function(t){var e,n,i,r=this;if(!t||!(n=r.keyboardNav||r.parents().eq(-1)[0].keyboardNav))return i=r.find("*"),r.statusbar&&i.add(r.statusbar.items()),i.each(function(t){if(t.settings.autofocus)return e=null,!1;t.canFocus&&(e=e||t)}),e&&e.focus(),r;n.focusFirst(r)},replace:function(t,e){for(var n,i=this.items(),r=i.length;r--;)if(i[r]===t){i[r]=e;break}0<=r&&((n=e.getEl())&&n.parentNode.removeChild(n),(n=t.getEl())&&n.parentNode.removeChild(n)),e.parent(this)},create:function(t){var e,n=this,i=[];return C.isArray(t)||(t=[t]),C.each(t,function(t){t&&(t instanceof ce||("string"==typeof t&&(t={type:t}),e=C.extend({},n.settings.defaults,t),t.type=e.type=e.type||t.type||n.settings.defaultType||(e.defaults?e.defaults.type:null),t=Ee.create(e)),i.push(t))}),i},renderNew:function(){var i=this;return i.items().each(function(t,e){var n;t.parent(i),t.state.get("rendered")||((n=i.getEl("body")).hasChildNodes()&&e<=n.childNodes.length-1?Nt(n.childNodes[e]).before(t.renderHtml()):Nt(n).append(t.renderHtml()),t.postRender(),ee.add(t))}),i._layout.applyClasses(i.items().filter(":visible")),i._lastRect=null,i},append:function(t){return this.add(t).renderNew()},prepend:function(t){return this.items().set(this.create(t).concat(this.items().toArray())),this.renderNew()},insert:function(t,e,n){var i,r,o;return t=this.create(t),i=this.items(),!n&&e<i.length-1&&(e+=1),0<=e&&e<i.length&&(r=i.slice(0,e).toArray(),o=i.slice(e).toArray(),i.set(r.concat(t,o))),this.renderNew()},fromJSON:function(t){for(var e in t)this.find("#"+e).value(t[e]);return this},toJSON:function(){var i={};return this.find("*").each(function(t){var e=t.name(),n=t.value();e&&void 0!==n&&(i[e]=n)}),i},renderHtml:function(){var t=this,e=t._layout,n=this.settings.role;return t.preRender(),e.preRender(t),'<div id="'+t._id+'" class="'+t.classes+'"'+(n?' role="'+this.settings.role+'"':"")+'><div id="'+t._id+'-body" class="'+t.bodyClasses+'">'+(t.settings.html||"")+e.renderHtml(t)+"</div></div>"},postRender:function(){var t,e=this;return e.items().exec("postRender"),e._super(),e._layout.postRender(e),e.state.set("rendered",!0),e.settings.style&&e.$el.css(e.settings.style),e.settings.border&&(t=e.borderBox,e.$el.css({"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left})),e.parent()||(e.keyboardNav=Te({root:e})),e},initLayoutRect:function(){var t=this._super();return this._layout.recalc(this),t},recalc:function(){var t=this,e=t._layoutRect,n=t._lastRect;if(!n||n.w!==e.w||n.h!==e.h)return t._layout.recalc(t),e=t.layoutRect(),t._lastRect={x:e.x,y:e.y,w:e.w,h:e.h},!0},reflow:function(){var t;if(ee.remove(this),this.visible()){for(ce.repaintControls=[],ce.repaintControls.map={},this.recalc(),t=ce.repaintControls.length;t--;)ce.repaintControls[t].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),ce.repaintControls=[]}return this}}),Pe={init:function(){this.on("repaint",this.renderScroll)},renderScroll:function(){var p=this,v=2;function n(){var m,g,t;function e(t,e,n,i,r,o){var s,a,l,u,c,d,f,h;if(a=p.getEl("scroll"+t)){if(f=e.toLowerCase(),h=n.toLowerCase(),Nt(p.getEl("absend")).css(f,p.layoutRect()[i]-1),!r)return void Nt(a).css("display","none");Nt(a).css("display","block"),s=p.getEl("body"),l=p.getEl("scroll"+t+"t"),u=s["client"+n]-2*v,c=(u-=m&&g?a["client"+o]:0)/s["scroll"+n],(d={})[f]=s["offset"+e]+v,d[h]=u,Nt(a).css(d),(d={})[f]=s["scroll"+e]*c,d[h]=u*c,Nt(l).css(d)}}t=p.getEl("body"),m=t.scrollWidth>t.clientWidth,g=t.scrollHeight>t.clientHeight,e("h","Left","Width","contentW",m,"Height"),e("v","Top","Height","contentH",g,"Width")}p.settings.autoScroll&&(p._hasScroll||(p._hasScroll=!0,function(){function t(s,a,l,u,c){var d,t=p._id+"-scroll"+s,e=p.classPrefix;Nt(p.getEl()).append('<div id="'+t+'" class="'+e+"scrollbar "+e+"scrollbar-"+s+'"><div id="'+t+'t" class="'+e+'scrollbar-thumb"></div></div>'),p.draghelper=new Re(t+"t",{start:function(){d=p.getEl("body")["scroll"+a],Nt("#"+t).addClass(e+"active")},drag:function(t){var e,n,i,r,o=p.layoutRect();n=o.contentW>o.innerW,i=o.contentH>o.innerH,r=p.getEl("body")["client"+l]-2*v,e=(r-=n&&i?p.getEl("scroll"+s)["client"+c]:0)/p.getEl("body")["scroll"+l],p.getEl("body")["scroll"+a]=d+t["delta"+u]/e},stop:function(){Nt("#"+t).removeClass(e+"active")}})}p.classes.add("scroll"),t("v","Top","Height","Y","Width"),t("h","Left","Width","X","Height")}(),p.on("wheel",function(t){var e=p.getEl("body");e.scrollLeft+=10*(t.deltaX||0),e.scrollTop+=10*t.deltaY,n()}),Nt(p.getEl("body")).on("scroll",n)),n())}},We=De.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[Pe],renderHtml:function(){var t=this,e=t._layout,n=t.settings.html;return t.preRender(),e.preRender(t),void 0===n?n='<div id="'+t._id+'-body" class="'+t.bodyClasses+'">'+e.renderHtml(t)+"</div>":("function"==typeof n&&(n=n.call(t)),t._hasBody=!1),'<div id="'+t._id+'" class="'+t.classes+'" hidefocus="1" tabindex="-1" role="group">'+(t._preBodyHtml||"")+n+"</div>"}}),Ae={resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(t,e){if(t<=1||e<=1){var n=St.getWindowSize();t=t<=1?t*n.w:t,e=e<=1?e*n.h:e}return this._layoutRect.autoResize=!1,this.layoutRect({minW:t,minH:e,w:t,h:e}).reflow()},resizeBy:function(t,e){var n=this.layoutRect();return this.resizeTo(n.w+t,n.h+e)}},Be=[],Le=[];function Ie(t,e){for(;t;){if(t===e)return!0;t=t.parent()}}function ze(){He||(He=function(t){2!==t.button&&function(t){for(var e=Be.length;e--;){var n=Be[e],i=n.getParentCtrl(t.target);if(n.settings.autohide){if(i&&(Ie(i,n)||n.parent()===i))continue;(t=n.fire("autohide",{target:t.target})).isDefaultPrevented()||n.hide()}}}(t)},Nt(document).on("click touchstart",He))}function Fe(r){var t=St.getViewPort().y;function e(t,e){for(var n,i=0;i<Be.length;i++)if(Be[i]!==r)for(n=Be[i].parent();n&&(n=n.parent());)n===r&&Be[i].fixed(t).moveBy(0,e).repaint()}r.settings.autofix&&(r.state.get("fixed")?r._autoFixY>t&&(r.fixed(!1).layoutRect({y:r._autoFixY}).repaint(),e(!1,r._autoFixY-t)):(r._autoFixY=r.layoutRect().y,r._autoFixY<t&&(r.fixed(!0).layoutRect({y:0}).repaint(),e(!0,t-r._autoFixY))))}function Ue(t,e){var n,i,r=Ve.zIndex||65535;if(t)Le.push(e);else for(n=Le.length;n--;)Le[n]===e&&Le.splice(n,1);if(Le.length)for(n=0;n<Le.length;n++)Le[n].modal&&(r++,i=Le[n]),Le[n].getEl().style.zIndex=r,Le[n].zIndex=r,r++;var o=Nt("#"+e.classPrefix+"modal-block",e.getContainerElm())[0];i?Nt(o).css("z-index",i.zIndex-1):o&&(o.parentNode.removeChild(o),Ne=!1),Ve.currentZIndex=r}var Ve=We.extend({Mixins:[pe,Ae],init:function(t){var i=this;i._super(t),(i._eventsRoot=i).classes.add("floatpanel"),t.autohide&&(ze(),function(){if(!Se){var t=document.documentElement,e=t.clientWidth,n=t.clientHeight;Se=function(){document.all&&e===t.clientWidth&&n===t.clientHeight||(e=t.clientWidth,n=t.clientHeight,Ve.hideAll())},Nt(window).on("resize",Se)}}(),Be.push(i)),t.autofix&&(Me||(Me=function(){var t;for(t=Be.length;t--;)Fe(Be[t])},Nt(window).on("scroll",Me)),i.on("move",function(){Fe(this)})),i.on("postrender show",function(t){if(t.control===i){var e,n=i.classPrefix;i.modal&&!Ne&&((e=Nt("#"+n+"modal-block",i.getContainerElm()))[0]||(e=Nt('<div id="'+n+'modal-block" class="'+n+"reset "+n+'fade"></div>').appendTo(i.getContainerElm())),c.setTimeout(function(){e.addClass(n+"in"),Nt(i.getEl()).addClass(n+"in")}),Ne=!0),Ue(!0,i)}}),i.on("show",function(){i.parents().each(function(t){if(t.state.get("fixed"))return i.fixed(!0),!1})}),t.popover&&(i._preBodyHtml='<div class="'+i.classPrefix+'arrow"></div>',i.classes.add("popover").add("bottom").add(i.isRtl()?"end":"start")),i.aria("label",t.ariaLabel),i.aria("labelledby",i._id),i.aria("describedby",i.describedBy||i._id+"-none")},fixed:function(t){var e=this;if(e.state.get("fixed")!==t){if(e.state.get("rendered")){var n=St.getViewPort();t?e.layoutRect().y-=n.y:e.layoutRect().y+=n.y}e.classes.toggle("fixed",t),e.state.set("fixed",t)}return e},show:function(){var t,e=this._super();for(t=Be.length;t--&&Be[t]!==this;);return-1===t&&Be.push(this),e},hide:function(){return qe(this),Ue(!1,this),this._super()},hideAll:function(){Ve.hideAll()},close:function(){return this.fire("close").isDefaultPrevented()||(this.remove(),Ue(!1,this)),this},remove:function(){qe(this),this._super()},postRender:function(){return this.settings.bodyRole&&this.getEl("body").setAttribute("role",this.settings.bodyRole),this._super()}});function qe(t){var e;for(e=Be.length;e--;)Be[e]===t&&Be.splice(e,1);for(e=Le.length;e--;)Le[e]===t&&Le.splice(e,1)}Ve.hideAll=function(){for(var t=Be.length;t--;){var e=Be[t];e&&e.settings.autohide&&(e.hide(),Be.splice(t,1))}};var Ye=[],$e="";function Xe(t){var e,n=Nt("meta[name=viewport]")[0];!1!==h.overrideViewPort&&(n||((n=document.createElement("meta")).setAttribute("name","viewport"),document.getElementsByTagName("head")[0].appendChild(n)),(e=n.getAttribute("content"))&&void 0!==$e&&($e=e),n.setAttribute("content",t?"width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0":$e))}function je(t,e){(function(){for(var t=0;t<Ye.length;t++)if(Ye[t]._fullscreen)return!0;return!1})()&&!1===e&&Nt([document.documentElement,document.body]).removeClass(t+"fullscreen")}var Je=Ve.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(t){var n=this;n._super(t),n.isRtl()&&n.classes.add("rtl"),n.classes.add("window"),n.bodyClasses.add("window-body"),n.state.set("fixed",!0),t.buttons&&(n.statusbar=new We({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:t.buttons}),n.statusbar.classes.add("foot"),n.statusbar.parent(n)),n.on("click",function(t){var e=n.classPrefix+"close";(St.hasClass(t.target,e)||St.hasClass(t.target.parentNode,e))&&n.close()}),n.on("cancel",function(){n.close()}),n.on("move",function(t){t.control===n&&Ve.hideAll()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria("label",t.title),n._fullscreen=!1},recalc:function(){var t,e,n,i,r=this,o=r.statusbar;r._fullscreen&&(r.layoutRect(St.getWindowSize()),r.layoutRect().contentH=r.layoutRect().innerH),r._super(),t=r.layoutRect(),r.settings.title&&!r._fullscreen&&(e=t.headerW)>t.w&&(n=t.x-Math.max(0,e/2),r.layoutRect({w:e,x:n}),i=!0),o&&(o.layoutRect({w:r.layoutRect().innerW}).recalc(),(e=o.layoutRect().minW+t.deltaW)>t.w&&(n=t.x-Math.max(0,e-t.w),r.layoutRect({w:e,x:n}),i=!0)),i&&r.recalc()},initLayoutRect:function(){var t,e=this,n=e._super(),i=0;if(e.settings.title&&!e._fullscreen){t=e.getEl("head");var r=St.getSize(t);n.headerW=r.width,n.headerH=r.height,i+=n.headerH}e.statusbar&&(i+=e.statusbar.layoutRect().h),n.deltaH+=i,n.minH+=i,n.h+=i;var o=St.getWindowSize();return n.x=e.settings.x||Math.max(0,o.w/2-n.w/2),n.y=e.settings.y||Math.max(0,o.h/2-n.h/2),n},renderHtml:function(){var t=this,e=t._layout,n=t._id,i=t.classPrefix,r=t.settings,o="",s="",a=r.html;return t.preRender(),e.preRender(t),r.title&&(o='<div id="'+n+'-head" class="'+i+'window-head"><div id="'+n+'-title" class="'+i+'title">'+t.encode(r.title)+'</div><div id="'+n+'-dragh" class="'+i+'dragh"></div><button type="button" class="'+i+'close" aria-hidden="true"><i class="mce-ico mce-i-remove"></i></button></div>'),r.url&&(a='<iframe src="'+r.url+'" tabindex="-1"></iframe>'),void 0===a&&(a=e.renderHtml(t)),t.statusbar&&(s=t.statusbar.renderHtml()),'<div id="'+n+'" class="'+t.classes+'" hidefocus="1"><div class="'+t.classPrefix+'reset" role="application">'+o+'<div id="'+n+'-body" class="'+t.bodyClasses+'">'+a+"</div>"+s+"</div></div>"},fullscreen:function(t){var n,e,i=this,r=document.documentElement,o=i.classPrefix;if(t!==i._fullscreen)if(Nt(window).on("resize",function(){var t;if(i._fullscreen)if(n)i._timer||(i._timer=c.setTimeout(function(){var t=St.getWindowSize();i.moveTo(0,0).resizeTo(t.w,t.h),i._timer=0},50));else{t=(new Date).getTime();var e=St.getWindowSize();i.moveTo(0,0).resizeTo(e.w,e.h),50<(new Date).getTime()-t&&(n=!0)}}),e=i.layoutRect(),i._fullscreen=t){i._initial={x:e.x,y:e.y,w:e.w,h:e.h},i.borderBox=Pt("0"),i.getEl("head").style.display="none",e.deltaH-=e.headerH+2,Nt([r,document.body]).addClass(o+"fullscreen"),i.classes.add("fullscreen");var s=St.getWindowSize();i.moveTo(0,0).resizeTo(s.w,s.h)}else i.borderBox=Pt(i.settings.border),i.getEl("head").style.display="",e.deltaH+=e.headerH,Nt([r,document.body]).removeClass(o+"fullscreen"),i.classes.remove("fullscreen"),i.moveTo(i._initial.x,i._initial.y).resizeTo(i._initial.w,i._initial.h);return i.reflow()},postRender:function(){var e,n=this;setTimeout(function(){n.classes.add("in"),n.fire("open")},0),n._super(),n.statusbar&&n.statusbar.postRender(),n.focus(),this.dragHelper=new Re(n._id+"-dragh",{start:function(){e={x:n.layoutRect().x,y:n.layoutRect().y}},drag:function(t){n.moveTo(e.x+t.deltaX,e.y+t.deltaY)}}),n.on("submit",function(t){t.isDefaultPrevented()||n.close()}),Ye.push(n),Xe(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var t,e=this;for(e.dragHelper.destroy(),e._super(),e.statusbar&&this.statusbar.remove(),je(e.classPrefix,!1),t=Ye.length;t--;)Ye[t]===e&&Ye.splice(t,1);Xe(0<Ye.length)},getContentWindow:function(){var t=this.getEl().getElementsByTagName("iframe")[0];return t?t.contentWindow:null}});!function(){if(!h.desktop){var n={w:window.innerWidth,h:window.innerHeight};c.setInterval(function(){var t=window.innerWidth,e=window.innerHeight;n.w===t&&n.h===e||(n={w:t,h:e},Nt(window).trigger("resize"))},100)}Nt(window).on("resize",function(){var t,e,n=St.getWindowSize();for(t=0;t<Ye.length;t++)e=Ye[t].layoutRect(),Ye[t].moveTo(Ye[t].settings.x||Math.max(0,n.w/2-e.w/2),Ye[t].settings.y||Math.max(0,n.h/2-e.h/2))})}();var Ge=Je.extend({init:function(t){t={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(t)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(t){var e,i=t.callback||function(){};function n(t,e,n){return{type:"button",text:t,subtype:n?"primary":"",onClick:function(t){t.control.parents()[1].close(),i(e)}}}switch(t.buttons){case Ge.OK_CANCEL:e=[n("Ok",!0,!0),n("Cancel",!1)];break;case Ge.YES_NO:case Ge.YES_NO_CANCEL:e=[n("Yes",1,!0),n("No",0)],t.buttons===Ge.YES_NO_CANCEL&&e.push(n("Cancel",-1));break;default:e=[n("Ok",!0,!0)]}return new Je({padding:20,x:t.x,y:t.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:e,title:t.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:t.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:t.onClose,onCancel:function(){i(!1)}}).renderTo(document.body).reflow()},alert:function(t,e){return"string"==typeof t&&(t={text:t}),t.callback=e,Ge.msgBox(t)},confirm:function(t,e){return"string"==typeof t&&(t={text:t}),t.callback=e,t.buttons=Ge.OK_CANCEL,Ge.msgBox(t)}}}),Ke=function(t,e){return{renderUI:function(){return st(t,e)},getNotificationManagerImpl:function(){return _e(t)},getWindowManagerImpl:function(){return{open:function(n,t,e){var i;return n.title=n.title||" ",n.url=n.url||n.file,n.url&&(n.width=parseInt(n.width||320,10),n.height=parseInt(n.height||240,10)),n.body&&(n.items={defaults:n.defaults,type:n.bodyType||"form",items:n.body,data:n.data,callbacks:n.commands}),n.url||n.buttons||(n.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),(i=new Je(n)).on("close",function(){e(i)}),n.data&&i.on("postRender",function(){this.find("*").each(function(t){var e=t.name();e in n.data&&t.value(n.data[e])})}),i.features=n||{},i.params=t||{},i=i.renderTo(document.body).reflow()},alert:function(t,e,n){var i;return(i=Ge.alert(t,function(){e()})).on("close",function(){n(i)}),i},confirm:function(t,e,n){var i;return(i=Ge.confirm(t,function(t){e(t)})).on("close",function(){n(i)}),i},close:function(t){t.close()},getParams:function(t){return t.params},setParams:function(t,e){t.params=e}}}}},Ze="undefined"!=typeof window?window:Function("return this;")(),Qe=function(t,e){return function(t,e){for(var n=e!==undefined&&null!==e?e:Ze,i=0;i<t.length&&n!==undefined&&null!==n;++i)n=n[t[i]];return n}(t.split("."),e)},tn=function(t,e){var n=Qe(t,e);if(n===undefined||null===n)throw t+" not available on this browser";return n};function en(){return new(tn("FileReader"))}var nn=tinymce.util.Tools.resolve("tinymce.util.Promise"),rn=function(n){return new nn(function(t){var e=new en;e.onloadend=function(){t(e.result.split(",")[1])},e.readAsDataURL(n)})},on=function(){return new nn(function(e){var t;(t=document.createElement("input")).type="file",t.style.position="fixed",t.style.left=0,t.style.top=0,t.style.opacity=.001,document.body.appendChild(t),t.onchange=function(t){e(Array.prototype.slice.call(t.target.files))},t.click(),t.parentNode.removeChild(t)})},sn=0,an=function(t){return t+sn+++(e=function(){return Math.round(4294967295*Math.random()).toString(36)},"s"+Date.now().toString(36)+e()+e()+e());var e},ln=function(r,o){var s={};function t(t){var e,n,i;n=o[t?"startContainer":"endContainer"],i=o[t?"startOffset":"endOffset"],1===n.nodeType&&(e=r.create("span",{"data-mce-type":"bookmark"}),n.hasChildNodes()?(i=Math.min(i,n.childNodes.length-1),t?n.insertBefore(e,n.childNodes[i]):r.insertAfter(e,n.childNodes[i])):n.appendChild(e),n=e,i=0),s[t?"startContainer":"endContainer"]=n,s[t?"startOffset":"endOffset"]=i}return t(!0),o.collapsed||t(),s},un=function(r,o){function t(t){var e,n,i;e=i=o[t?"startContainer":"endContainer"],n=o[t?"startOffset":"endOffset"],e&&(1===e.nodeType&&(n=function(t){for(var e=t.parentNode.firstChild,n=0;e;){if(e===t)return n;1===e.nodeType&&"bookmark"===e.getAttribute("data-mce-type")||n++,e=e.nextSibling}return-1}(e),e=e.parentNode,r.remove(i)),o[t?"startContainer":"endContainer"]=e,o[t?"startOffset":"endOffset"]=n)}t(!0),t();var e=r.createRng();return e.setStart(o.startContainer,o.startOffset),o.endContainer&&e.setEnd(o.endContainer,o.endOffset),e},cn=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),dn=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),fn=function(t){return"A"===t.nodeName&&t.hasAttribute("href")},hn=function(t){var e,n,i,r,o,s,a,l;return r=t.selection,o=t.dom,s=r.getRng(),a=o,l=dn.getNode(s.startContainer,s.startOffset),e=a.getParent(l,fn)||l,n=dn.getNode(s.endContainer,s.endOffset),i=t.getBody(),C.grep(function(t,e,n){var i,r,o=[];for(i=new cn(e,t),r=e;r&&(1===r.nodeType&&o.push(r),r!==n);r=i.next());return o}(i,e,n),fn)},mn=function(t){var e,n,i,r,o;n=hn(e=t),r=e.dom,o=e.selection,i=ln(r,o.getRng()),C.each(n,function(t){e.dom.remove(t,!0)}),o.setRng(un(r,i))},gn=function(t){t.selection.collapse(!1)},pn=function(t){t.focus(),mn(t),gn(t)},vn=function(t,e){var n,i,r,o,s,a=t.dom.getParent(t.selection.getStart(),"a[href]");a?(o=a,s=e,(r=t).focus(),r.dom.setAttrib(o,"href",s),gn(r)):(i=e,(n=t).execCommand("mceInsertLink",!1,{href:i}),gn(n))},bn=function(t,e,n){var i,r,o;t.plugins.table?t.plugins.table.insertTable(e,n):(r=e,o=n,(i=t).undoManager.transact(function(){var t,e;i.insertContent(function(t,e){var n,i,r;for(r='<table data-mce-id="mce" style="width: 100%">',r+="<tbody>",i=0;i<e;i++){for(r+="<tr>",n=0;n<t;n++)r+="<td><br></td>";r+="</tr>"}return r+="</tbody>",r+="</table>"}(r,o)),(t=i.dom.select("*[data-mce-id]")[0]).removeAttribute("data-mce-id"),e=i.dom.select("td,th",t),i.selection.setCursorLocation(e[0],0)}))},yn=function(t,e){t.execCommand("FormatBlock",!1,e)},xn=function(t,e,n){var i,r;r=(i=t.editorUpload.blobCache).create(an("mceu"),n,e),i.add(r),t.insertContent(t.dom.createHTML("img",{src:r.blobUri()}))},wn=function(t,e){0===e.trim().length?pn(t):vn(t,e)},_n=pn,Cn=function(n,t){n.addButton("quicklink",{icon:"link",tooltip:"Insert/Edit link",stateSelector:"a[href]",onclick:function(){t.showForm(n,"quicklink")}}),n.addButton("quickimage",{icon:"image",tooltip:"Insert image",onclick:function(){on().then(function(t){var e=t[0];rn(e).then(function(t){xn(n,t,e)})})}}),n.addButton("quicktable",{icon:"table",tooltip:"Insert table",onclick:function(){t.hide(),bn(n,2,2)}}),function(e){for(var t=function(t){return function(){yn(e,t)}},n=1;n<6;n++){var i="h"+n;e.addButton(i,{text:i.toUpperCase(),tooltip:"Heading "+n,stateSelector:i,onclick:t(i),onPostRender:function(){this.getEl().firstChild.firstChild.style.fontWeight="bold"}})}}(n)},Rn=function(){var t=h.container;if(t&&"static"!==v.DOM.getStyle(t,"position",!0)){var e=v.DOM.getPos(t),n=e.x-t.scrollLeft,i=e.y-t.scrollTop;return pt.some({x:n,y:i})}return pt.none()},En=function(t){return/^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(t.trim())},kn=function(t){return/^https?:\/\//.test(t.trim())},Tn=function(t,e){return!kn(e)&&En(e)?(n=t,i=e,new nn(function(e){n.windowManager.confirm("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(t){e(!0===t?"http://"+i:i)})})):nn.resolve(e);var n,i},Hn=function(r,e){var t,n,i,o={};return t="quicklink",n={items:[{type:"button",name:"unlink",icon:"unlink",onclick:function(){r.focus(),_n(r),e()},tooltip:"Remove link"},{type:"filepicker",name:"linkurl",placeholder:"Paste or type a link",filetype:"file",onchange:function(t){var e=t.meta;e&&e.attach&&(o={href:this.value(),attach:e.attach})}},{type:"button",icon:"checkmark",subtype:"primary",tooltip:"Ok",onclick:"submit"}],onshow:function(t){if(t.control===this){var e,n="";(e=r.dom.getParent(r.selection.getStart(),"a[href]"))&&(n=r.dom.getAttrib(e,"href")),this.fromJSON({linkurl:n}),i=this.find("#unlink"),e?i.show():i.hide(),this.find("#linkurl")[0].focus()}var i},onsubmit:function(t){Tn(r,t.data.linkurl).then(function(t){r.undoManager.transact(function(){t===o.href&&(o.attach(),o={}),wn(r,t)}),e()})}},(i=Ee.create(C.extend({type:"form",layout:"flex",direction:"row",padding:5,name:t,spacing:3},n))).on("show",function(){i.find("textbox").eq(0).each(function(t){t.focus()})}),i},Mn=function(n,t,e){var o,i,s=[];if(e)return C.each(B(i=e)?i:D(i)?i.split(/[ ,]/):[],function(t){if("|"===t)o=null;else if(n.buttons[t]){o||(o={type:"buttongroup",items:[]},s.push(o));var e=n.buttons[t];A(e)&&(e=e()),e.type=e.type||"button",(e=Ee.create(e)).on("postRender",(i=n,r=e,function(){var e,t,n=(t=function(t,e){return{selector:t,handler:e}},(e=r).settings.stateSelector?t(e.settings.stateSelector,function(t){e.active(t)}):e.settings.disabledStateSelector?t(e.settings.disabledStateSelector,function(t){e.disabled(t)}):null);null!==n&&i.selection.selectorChanged(n.selector,n.handler)})),o.items.push(e)}var i,r}),Ee.create({type:"toolbar",layout:"flow",name:t,items:s})},Sn=function(){var l,c,o=function(t){return 0<t.items().length},u=function(t,e){var n,i,r=(n=t,i=e,C.map(i,function(t){return Mn(n,t.id,t.items)})).concat([Mn(t,"text",J(t)),Mn(t,"insert",G(t)),Hn(t,p)]);return Ee.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:C.grep(r,o),oncancel:function(){t.focus()}})},d=function(t){t&&t.show()},f=function(t,e){t.moveTo(e.x,e.y)},h=function(n,i){i=i?i.substr(0,2):"",C.each({t:"down",b:"up",c:"center"},function(t,e){n.classes.toggle("arrow-"+t,e===i.substr(0,1))}),"cr"===i?(n.classes.toggle("arrow-left",!0),n.classes.toggle("arrow-right",!1)):"cl"===i?(n.classes.toggle("arrow-left",!0),n.classes.toggle("arrow-right",!0)):C.each({l:"left",r:"right"},function(t,e){n.classes.toggle("arrow-"+t,e===i.substr(1,1))})},m=function(t,e){var n=t.items().filter("#"+e);return 0<n.length&&(n[0].show(),t.reflow(),!0)},g=function(t,e,n,i){var r,o,s,a;if(a=K(n),r=y(n),o=v.DOM.getRect(t.getEl()),s="insert"===e?Y(i,r,o):$(i,r,o)){var l=Rn().getOr({x:0,y:0}),u={x:s.rect.x-l.x,y:s.rect.y-l.y,w:s.rect.w,h:s.rect.h};return f(t,X(a,c=i,r,u)),h(t,s.position),!0}return!1},p=function(){l&&l.hide()};return{show:function(t,e,n,i){var r,o,s,a;l||(M(t),(l=u(t,i)).renderTo().reflow().moveTo(n.x,n.y),t.nodeChanged()),o=e,s=t,a=n,d(r=l),r.items().hide(),m(r,o)?!1===g(r,o,s,a)&&p():p()},showForm:function(t,e){if(l){if(l.items().hide(),!m(l,e))return void p();var n,i,r,o=void 0;d(l),l.items().hide(),m(l,e),r=K(t),n=y(t),o=v.DOM.getRect(l.getEl()),(i=$(c,n,o))&&(o=i.rect,f(l,X(r,c,n,o)),h(l,i.position))}},reposition:function(t,e,n){l&&g(l,e,t,n)},inForm:function(){return l&&l.visible()&&0<l.items().filter("form:visible").length},hide:p,focus:function(){l&&l.find("toolbar:visible").eq(0).each(function(t){t.focus(!0)})},remove:function(){l&&(l.remove(),l=null)}}},Nn=Ot.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(t){this.settings=C.extend({},this.Defaults,t)},preRender:function(t){t.bodyClasses.add(this.settings.containerClass)},applyClasses:function(t){var e,n,i,r,o=this.settings;e=o.firstControlClass,n=o.lastControlClass,t.each(function(t){t.classes.remove(e).remove(n).add(o.controlClass),t.visible()&&(i||(i=t),r=t)}),i&&i.classes.add(e),r&&r.classes.add(n)},renderHtml:function(t){var e="";return this.applyClasses(t.items()),t.items().each(function(t){e+=t.renderHtml()}),e},recalc:function(){},postRender:function(){},isNative:function(){return!1}}),On=Nn.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(t){t.items().filter(":visible").each(function(t){var e=t.settings;t.layoutRect({x:e.x,y:e.y,w:e.w,h:e.h}),t.recalc&&t.recalc()})},renderHtml:function(t){return'<div id="'+t._id+'-absend" class="'+t.classPrefix+'abs-end"></div>'+this._super(t)}}),Dn=be.extend({Defaults:{classes:"widget btn",role:"button"},init:function(t){var e,n=this;n._super(t),t=n.settings,e=n.settings.size,n.on("click mousedown",function(t){t.preventDefault()}),n.on("touchstart",function(t){n.fire("click",t),t.preventDefault()}),t.subtype&&n.classes.add(t.subtype),e&&n.classes.add("btn-"+e),t.icon&&n.icon(t.icon)},icon:function(t){return arguments.length?(this.state.set("icon",t),this):this.state.get("icon")},repaint:function(){var t,e=this.getEl().firstChild;e&&((t=e.style).width=t.height="100%"),this._super()},renderHtml:function(){var t,e,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a="",l=n.settings;return(t=l.image)?(o="none","string"!=typeof t&&(t=window.getSelection?t[0]:t[1]),t=" style=\"background-image: url('"+t+"')\""):t="",s&&(n.classes.add("btn-has-text"),a='<span class="'+r+'txt">'+n.encode(s)+"</span>"),o=o?r+"ico "+r+"i-"+o:"",e="boolean"==typeof l.active?' aria-pressed="'+l.active+'"':"",'<div id="'+i+'" class="'+n.classes+'" tabindex="-1"'+e+'><button id="'+i+'-button" role="presentation" type="button" tabindex="-1">'+(o?'<i class="'+o+'"'+t+"></i>":"")+a+"</button></div>"},bindStates:function(){var o=this,n=o.$,i=o.classPrefix+"txt";function s(t){var e=n("span."+i,o.getEl());t?(e[0]||(n("button:first",o.getEl()).append('<span class="'+i+'"></span>'),e=n("span."+i,o.getEl())),e.html(o.encode(t))):e.remove(),o.classes.toggle("btn-has-text",!!t)}return o.state.on("change:text",function(t){s(t.value)}),o.state.on("change:icon",function(t){var e=t.value,n=o.classPrefix;e=(o.settings.icon=e)?n+"ico "+n+"i-"+o.settings.icon:"";var i=o.getEl().firstChild,r=i.getElementsByTagName("i")[0];e?(r&&r===i.firstChild||(r=document.createElement("i"),i.insertBefore(r,i.firstChild)),r.className=e):r&&i.removeChild(r),s(o.state.get("text"))}),o._super()}}),Pn=Dn.extend({init:function(t){t=C.extend({text:"Browse...",multiple:!1,accept:null},t),this._super(t),this.classes.add("browsebutton"),t.multiple&&this.classes.add("multiple")},postRender:function(){var n=this,e=St.create("input",{type:"file",id:n._id+"-browse",accept:n.settings.accept});n._super(),Nt(e).on("change",function(t){var e=t.target.files;n.value=function(){return e.length?n.settings.multiple?e:e[0]:null},t.preventDefault(),e.length&&n.fire("change",t)}),Nt(e).on("click",function(t){t.stopPropagation()}),Nt(n.getEl("button")).on("click",function(t){t.stopPropagation(),e.click()}),n.getEl().appendChild(e)},remove:function(){Nt(this.getEl("button")).off(),Nt(this.getEl("input")).off(),this._super()}}),Wn=De.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var t=this,e=t._layout;return t.classes.add("btn-group"),t.preRender(),e.preRender(t),'<div id="'+t._id+'" class="'+t.classes+'"><div id="'+t._id+'-body">'+(t.settings.html||"")+e.renderHtml(t)+"</div></div>"}}),An=be.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(t){var e=this;e._super(t),e.on("click mousedown",function(t){t.preventDefault()}),e.on("click",function(t){t.preventDefault(),e.disabled()||e.checked(!e.checked())}),e.checked(e.settings.checked)},checked:function(t){return arguments.length?(this.state.set("checked",t),this):this.state.get("checked")},value:function(t){return arguments.length?this.checked(t):this.checked()},renderHtml:function(){var t=this,e=t._id,n=t.classPrefix;return'<div id="'+e+'" class="'+t.classes+'" unselectable="on" aria-labelledby="'+e+'-al" tabindex="-1"><i class="'+n+"ico "+n+'i-checkbox"></i><span id="'+e+'-al" class="'+n+'label">'+t.encode(t.state.get("text"))+"</span></div>"},bindStates:function(){var o=this;function e(t){o.classes.toggle("checked",t),o.aria("checked",t)}return o.state.on("change:text",function(t){o.getEl("al").firstChild.data=o.translate(t.value)}),o.state.on("change:checked change:value",function(t){o.fire("change"),e(t.value)}),o.state.on("change:icon",function(t){var e=t.value,n=o.classPrefix;if(void 0===e)return o.settings.icon;e=(o.settings.icon=e)?n+"ico "+n+"i-"+o.settings.icon:"";var i=o.getEl().firstChild,r=i.getElementsByTagName("i")[0];e?(r&&r===i.firstChild||(r=document.createElement("i"),i.insertBefore(r,i.firstChild)),r.className=e):r&&i.removeChild(r)}),o.state.get("checked")&&e(!0),o._super()}}),Bn=tinymce.util.Tools.resolve("tinymce.util.VK"),Ln=be.extend({init:function(i){var r=this;r._super(i),i=r.settings,r.classes.add("combobox"),r.subinput=!0,r.ariaTarget="inp",i.menu=i.menu||i.values,i.menu&&(i.icon="caret"),r.on("click",function(t){var e=t.target,n=r.getEl();if(Nt.contains(n,e)||e===n)for(;e&&e!==n;)e.id&&-1!==e.id.indexOf("-open")&&(r.fire("action"),i.menu&&(r.showMenu(),t.aria&&r.menu.items()[0].focus())),e=e.parentNode}),r.on("keydown",function(t){var e;13===t.keyCode&&"INPUT"===t.target.nodeName&&(t.preventDefault(),r.parents().reverse().each(function(t){if(t.toJSON)return e=t,!1}),r.fire("submit",{data:e.toJSON()}))}),r.on("keyup",function(t){if("INPUT"===t.target.nodeName){var e=r.state.get("value"),n=t.target.value;n!==e&&(r.state.set("value",n),r.fire("autocomplete",t))}}),r.on("mouseover",function(t){var e=r.tooltip().moveTo(-65535);if(r.statusLevel()&&-1!==t.target.className.indexOf(r.classPrefix+"status")){var n=r.statusMessage()||"Ok",i=e.text(n).show().testMoveRel(t.target,["bc-tc","bc-tl","bc-tr"]);e.classes.toggle("tooltip-n","bc-tc"===i),e.classes.toggle("tooltip-nw","bc-tl"===i),e.classes.toggle("tooltip-ne","bc-tr"===i),e.moveRel(t.target,i)}})},statusLevel:function(t){return 0<arguments.length&&this.state.set("statusLevel",t),this.state.get("statusLevel")},statusMessage:function(t){return 0<arguments.length&&this.state.set("statusMessage",t),this.state.get("statusMessage")},showMenu:function(){var t,e=this,n=e.settings;e.menu||((t=n.menu||[]).length?t={type:"menu",items:t}:t.type=t.type||"menu",e.menu=Ee.create(t).parent(e).renderTo(e.getContainerElm()),e.fire("createmenu"),e.menu.reflow(),e.menu.on("cancel",function(t){t.control===e.menu&&e.focus()}),e.menu.on("show hide",function(t){t.control.items().each(function(t){t.active(t.value()===e.value())})}).fire("show"),e.menu.on("select",function(t){e.value(t.control.value())}),e.on("focusin",function(t){"INPUT"===t.target.tagName.toUpperCase()&&e.menu.hide()}),e.aria("expanded",!0)),e.menu.show(),e.menu.layoutRect({w:e.layoutRect().w}),e.menu.moveRel(e.getEl(),e.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},focus:function(){this.getEl("inp").focus()},repaint:function(){var t,e,n=this,i=n.getEl(),r=n.getEl("open"),o=n.layoutRect(),s=0,a=i.firstChild;n.statusLevel()&&"none"!==n.statusLevel()&&(s=parseInt(St.getRuntimeStyle(a,"padding-right"),10)-parseInt(St.getRuntimeStyle(a,"padding-left"),10)),t=r?o.w-St.getSize(r).width-10:o.w-10;var l=document;return l.all&&(!l.documentMode||l.documentMode<=8)&&(e=n.layoutRect().h-2+"px"),Nt(a).css({width:t-s,lineHeight:e}),n._super(),n},postRender:function(){var e=this;return Nt(this.getEl("inp")).on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)}),e._super()},renderHtml:function(){var t,e,n,i=this,r=i._id,o=i.settings,s=i.classPrefix,a=i.state.get("value")||"",l="",u="";return"spellcheck"in o&&(u+=' spellcheck="'+o.spellcheck+'"'),o.maxLength&&(u+=' maxlength="'+o.maxLength+'"'),o.size&&(u+=' size="'+o.size+'"'),o.subtype&&(u+=' type="'+o.subtype+'"'),n='<i id="'+r+'-status" class="mce-status mce-ico" style="display: none"></i>',i.disabled()&&(u+=' disabled="disabled"'),(t=o.icon)&&"caret"!==t&&(t=s+"ico "+s+"i-"+o.icon),e=i.state.get("text"),(t||e)&&(l='<div id="'+r+'-open" class="'+s+"btn "+s+'open" tabIndex="-1" role="button"><button id="'+r+'-action" type="button" hidefocus="1" tabindex="-1">'+("caret"!==t?'<i class="'+t+'"></i>':'<i class="'+s+'caret"></i>')+(e?(t?" ":"")+e:"")+"</button></div>",i.classes.add("has-open")),'<div id="'+r+'" class="'+i.classes+'"><input id="'+r+'-inp" class="'+s+'textbox" value="'+i.encode(a,!1)+'" hidefocus="1"'+u+' placeholder="'+i.encode(o.placeholder)+'" />'+n+l+"</div>"},value:function(t){return arguments.length?(this.state.set("value",t),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},showAutoComplete:function(t,i){var r=this;if(0!==t.length){r.menu?r.menu.items().remove():r.menu=Ee.create({type:"menu",classes:"combobox-menu",layout:"flow"}).parent(r).renderTo(),C.each(t,function(t){var e,n;r.menu.add({text:t.title,url:t.previewUrl,match:i,classes:"menu-item-ellipsis",onclick:(e=t.value,n=t.title,function(){r.fire("selectitem",{title:n,value:e})})})}),r.menu.renderNew(),r.hideMenu(),r.menu.on("cancel",function(t){t.control.parent()===r.menu&&(t.stopPropagation(),r.focus(),r.hideMenu())}),r.menu.on("select",function(){r.focus()});var e=r.layoutRect().w;r.menu.layoutRect({w:e,minW:0,maxW:e}),r.menu.repaint(),r.menu.reflow(),r.menu.show(),r.menu.moveRel(r.getEl(),r.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])}else r.hideMenu()},hideMenu:function(){this.menu&&this.menu.hide()},bindStates:function(){var r=this;r.state.on("change:value",function(t){r.getEl("inp").value!==t.value&&(r.getEl("inp").value=t.value)}),r.state.on("change:disabled",function(t){r.getEl("inp").disabled=t.value}),r.state.on("change:statusLevel",function(t){var e=r.getEl("status"),n=r.classPrefix,i=t.value;St.css(e,"display","none"===i?"none":""),St.toggleClass(e,n+"i-checkmark","ok"===i),St.toggleClass(e,n+"i-warning","warn"===i),St.toggleClass(e,n+"i-error","error"===i),r.classes.toggle("has-status","none"!==i),r.repaint()}),St.on(r.getEl("status"),"mouseleave",function(){r.tooltip().hide()}),r.on("cancel",function(t){r.menu&&r.menu.visible()&&(t.stopPropagation(),r.hideMenu())});var n=function(t,e){e&&0<e.items().length&&e.items().eq(t)[0].focus()};return r.on("keydown",function(t){var e=t.keyCode;"INPUT"===t.target.nodeName&&(e===Bn.DOWN?(t.preventDefault(),r.fire("autocomplete"),n(0,r.menu)):e===Bn.UP&&(t.preventDefault(),n(-1,r.menu)))}),r._super()},remove:function(){Nt(this.getEl("inp")).off(),this.menu&&this.menu.remove(),this._super()}}),In=Ln.extend({init:function(t){var e=this;t.spellcheck=!1,t.onaction&&(t.icon="none"),e._super(t),e.classes.add("colorbox"),e.on("change keyup postrender",function(){e.repaintColor(e.value())})},repaintColor:function(t){var e=this.getEl("open"),n=e?e.getElementsByTagName("i")[0]:null;if(n)try{n.style.background=t}catch(i){}},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.state.get("rendered")&&e.repaintColor(t.value)}),e._super()}}),zn=Dn.extend({showPanel:function(){var e=this,t=e.settings;if(e.classes.add("opened"),e.panel)e.panel.show();else{var n=t.panel;n.type&&(n={layout:"grid",items:n}),n.role=n.role||"dialog",n.popover=!0,n.autohide=!0,n.ariaRoot=!0,e.panel=new Ve(n).on("hide",function(){e.classes.remove("opened")}).on("cancel",function(t){t.stopPropagation(),e.focus(),e.hidePanel()}).parent(e).renderTo(e.getContainerElm()),e.panel.fire("show"),e.panel.reflow()}var i=e.panel.testMoveRel(e.getEl(),t.popoverAlign||(e.isRtl()?["bc-tc","bc-tl","bc-tr"]:["bc-tc","bc-tr","bc-tl","tc-bc","tc-br","tc-bl"]));e.panel.classes.toggle("start","l"===i.substr(-1)),e.panel.classes.toggle("end","r"===i.substr(-1));var r="t"===i.substr(0,1);e.panel.classes.toggle("bottom",!r),e.panel.classes.toggle("top",r),e.panel.moveRel(e.getEl(),i)},hidePanel:function(){this.panel&&this.panel.hide()},postRender:function(){var e=this;return e.aria("haspopup",!0),e.on("click",function(t){t.control===e&&(e.panel&&e.panel.visible()?e.hidePanel():(e.showPanel(),e.panel.focus(!!t.aria)))}),e._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}}),Fn=v.DOM,Un=zn.extend({init:function(t){this._super(t),this.classes.add("splitbtn"),this.classes.add("colorbutton")},color:function(t){return t?(this._color=t,this.getEl("preview").style.backgroundColor=t,this):this._color},resetColor:function(){return this._color=null,this.getEl("preview").style.backgroundColor=null,this},renderHtml:function(){var t=this,e=t._id,n=t.classPrefix,i=t.state.get("text"),r=t.settings.icon?n+"ico "+n+"i-"+t.settings.icon:"",o=t.settings.image?" style=\"background-image: url('"+t.settings.image+"')\"":"",s="";return i&&(t.classes.add("btn-has-text"),s='<span class="'+n+'txt">'+t.encode(i)+"</span>"),'<div id="'+e+'" class="'+t.classes+'" role="button" tabindex="-1" aria-haspopup="true"><button role="presentation" hidefocus="1" type="button" tabindex="-1">'+(r?'<i class="'+r+'"'+o+"></i>":"")+'<span id="'+e+'-preview" class="'+n+'preview"></span>'+s+'</button><button type="button" class="'+n+'open" hidefocus="1" tabindex="-1"> <i class="'+n+'caret"></i></button></div>'},postRender:function(){var e=this,n=e.settings.onclick;return e.on("click",function(t){t.aria&&"down"===t.aria.key||t.control!==e||Fn.getParent(t.target,"."+e.classPrefix+"open")||(t.stopImmediatePropagation(),n.call(e,t))}),delete e.settings.onclick,e._super()}}),Vn=tinymce.util.Tools.resolve("tinymce.util.Color"),qn=be.extend({Defaults:{classes:"widget colorpicker"},init:function(t){this._super(t)},postRender:function(){var n,i,r,o,s,a=this,l=a.color();function u(t,e){var n,i,r=St.getPos(t);return n=e.pageX-r.x,i=e.pageY-r.y,{x:n=Math.max(0,Math.min(n/t.clientWidth,1)),y:i=Math.max(0,Math.min(i/t.clientHeight,1))}}function c(t,e){var n=(360-t.h)/360;St.css(r,{top:100*n+"%"}),e||St.css(s,{left:t.s+"%",top:100-t.v+"%"}),o.style.background=Vn({s:100,v:100,h:t.h}).toHex(),a.color().parse({s:t.s,v:t.v,h:t.h})}function t(t){var e;e=u(o,t),n.s=100*e.x,n.v=100*(1-e.y),c(n),a.fire("change")}function e(t){var e;e=u(i,t),(n=l.toHsv()).h=360*(1-e.y),c(n,!0),a.fire("change")}i=a.getEl("h"),r=a.getEl("hp"),o=a.getEl("sv"),s=a.getEl("svp"),a._repaint=function(){c(n=l.toHsv())},a._super(),a._svdraghelper=new Re(a._id+"-sv",{start:t,drag:t}),a._hdraghelper=new Re(a._id+"-h",{start:e,drag:e}),a._repaint()},rgb:function(){return this.color().toRgb()},value:function(t){if(!arguments.length)return this.color().toHex();this.color().parse(t),this._rendered&&this._repaint()},color:function(){return this._color||(this._color=Vn()),this._color},renderHtml:function(){var t,e=this._id,o=this.classPrefix,s="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000";return t='<div id="'+e+'-h" class="'+o+'colorpicker-h" style="background: -ms-linear-gradient(top,'+s+");background: linear-gradient(to bottom,"+s+');">'+function(){var t,e,n,i,r="";for(n="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",t=0,e=(i=s.split(",")).length-1;t<e;t++)r+='<div class="'+o+'colorpicker-h-chunk" style="height:'+100/e+"%;"+n+i[t]+",endColorstr="+i[t+1]+");-ms-"+n+i[t]+",endColorstr="+i[t+1]+')"></div>';return r}()+'<div id="'+e+'-hp" class="'+o+'colorpicker-h-marker"></div></div>','<div id="'+e+'" class="'+this.classes+'"><div id="'+e+'-sv" class="'+o+'colorpicker-sv"><div class="'+o+'colorpicker-overlay1"><div class="'+o+'colorpicker-overlay2"><div id="'+e+'-svp" class="'+o+'colorpicker-selector1"><div class="'+o+'colorpicker-selector2"></div></div></div></div></div>'+t+"</div>"}}),Yn=be.extend({init:function(t){t=C.extend({height:100,text:"Drop an image here",multiple:!1,accept:null},t),this._super(t),this.classes.add("dropzone"),t.multiple&&this.classes.add("multiple")},renderHtml:function(){var t,e,n=this.settings;return t={id:this._id,hidefocus:"1"},e=St.create("div",t,"<span>"+this.translate(n.text)+"</span>"),n.height&&St.css(e,"height",n.height+"px"),n.width&&St.css(e,"width",n.width+"px"),e.className=this.classes,e.outerHTML},postRender:function(){var i=this,t=function(t){t.preventDefault(),i.classes.toggle("dragenter"),i.getEl().className=i.classes};i._super(),i.$el.on("dragover",function(t){t.preventDefault()}),i.$el.on("dragenter",t),i.$el.on("dragleave",t),i.$el.on("drop",function(t){if(t.preventDefault(),!i.state.get("disabled")){var e=function(t){var e=i.settings.accept;if("string"!=typeof e)return t;var n=new RegExp("("+e.split(/\s*,\s*/).join("|")+")$","i");return C.grep(t,function(t){return n.test(t.name)})}(t.dataTransfer.files);i.value=function(){return e.length?i.settings.multiple?e:e[0]:null},e.length&&i.fire("change",t)}})},remove:function(){this.$el.off(),this._super()}}),$n=be.extend({init:function(t){var n=this;t.delimiter||(t.delimiter="\xbb"),n._super(t),n.classes.add("path"),n.canFocus=!0,n.on("click",function(t){var e;(e=t.target.getAttribute("data-index"))&&n.fire("select",{value:n.row()[e],index:e})}),n.row(n.settings.row)},focus:function(){return this.getEl().firstChild.focus(),this},row:function(t){return arguments.length?(this.state.set("row",t),this):this.state.get("row")},renderHtml:function(){return'<div id="'+this._id+'" class="'+this.classes+'">'+this._getDataPathHtml(this.state.get("row"))+"</div>"},bindStates:function(){var e=this;return e.state.on("change:row",function(t){e.innerHtml(e._getDataPathHtml(t.value))}),e._super()},_getDataPathHtml:function(t){var e,n,i=t||[],r="",o=this.classPrefix;for(e=0,n=i.length;e<n;e++)r+=(0<e?'<div class="'+o+'divider" aria-hidden="true"> '+this.settings.delimiter+" </div>":"")+'<div role="button" class="'+o+"path-item"+(e===n-1?" "+o+"last":"")+'" data-index="'+e+'" tabindex="-1" id="'+this._id+"-"+e+'" aria-level="'+(e+1)+'">'+i[e].name+"</div>";return r||(r='<div class="'+o+'path-item">\xa0</div>'),r}}),Xn=$n.extend({postRender:function(){var o=this,s=o.settings.editor;function a(t){if(1===t.nodeType){if("BR"===t.nodeName||t.getAttribute("data-mce-bogus"))return!0;if("bookmark"===t.getAttribute("data-mce-type"))return!0}return!1}return!1!==s.settings.elementpath&&(o.on("select",function(t){s.focus(),s.selection.select(this.row()[t.index].element),s.nodeChanged()}),s.on("nodeChange",function(t){for(var e=[],n=t.parents,i=n.length;i--;)if(1===n[i].nodeType&&!a(n[i])){var r=s.fire("ResolveName",{name:n[i].nodeName.toLowerCase(),target:n[i]});if(r.isDefaultPrevented()||e.push({name:r.name,element:n[i]}),r.isPropagationStopped())break}o.row(e)})),o._super()}}),jn=De.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var t=this,e=t._layout,n=t.classPrefix;return t.classes.add("formitem"),e.preRender(t),'<div id="'+t._id+'" class="'+t.classes+'" hidefocus="1" tabindex="-1">'+(t.settings.title?'<div id="'+t._id+'-title" class="'+n+'title">'+t.settings.title+"</div>":"")+'<div id="'+t._id+'-body" class="'+t.bodyClasses+'">'+(t.settings.html||"")+e.renderHtml(t)+"</div></div>"}}),Jn=De.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:15,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var i=this,t=i.items();i.settings.formItemDefaults||(i.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),t.each(function(t){var e,n=t.settings.label;n&&((e=new jn(C.extend({items:{type:"label",id:t._id+"-l",text:n,flex:0,forId:t._id,disabled:t.disabled()}},i.settings.formItemDefaults))).type="formitem",t.aria("labelledby",t._id+"-l"),"undefined"==typeof t.settings.flex&&(t.settings.flex=1),i.replace(t,e),e.add(t))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){this._super(),this.fromJSON(this.settings.data)},bindStates:function(){var n=this;function t(){var t,e,i=0,r=[];if(!1!==n.settings.labelGapCalc)for(("children"===n.settings.labelGapCalc?n.find("formitem"):n.items()).filter("formitem").each(function(t){var e=t.items()[0],n=e.getEl().clientWidth;i=i<n?n:i,r.push(e)}),e=n.settings.labelGap||0,t=r.length;t--;)r[t].settings.minWidth=i+e}n._super(),n.on("show",t),t()}}),Gn=Jn.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var t=this,e=t._layout,n=t.classPrefix;return t.preRender(),e.preRender(t),'<fieldset id="'+t._id+'" class="'+t.classes+'" hidefocus="1" tabindex="-1">'+(t.settings.title?'<legend id="'+t._id+'-title" class="'+n+'fieldset-title">'+t.settings.title+"</legend>":"")+'<div id="'+t._id+'-body" class="'+t.bodyClasses+'">'+(t.settings.html||"")+e.renderHtml(t)+"</div></fieldset>"}}),Kn=0,Zn=function(t){if(null===t||t===undefined)throw new Error("Node cannot be null or undefined");return{dom:lt(t)}},Qn={fromHtml:function(t,e){var n=(e||document).createElement("div");if(n.innerHTML=t,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",t),"HTML must have a single root node";return Zn(n.childNodes[0])},fromTag:function(t,e){var n=(e||document).createElement(t);return Zn(n)},fromText:function(t,e){var n=(e||document).createTextNode(t);return Zn(n)},fromDom:Zn,fromPoint:function(t,e,n){var i=t.dom();return pt.from(i.elementFromPoint(e,n)).map(Zn)}},ti=function(n){var i,r=!1;return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return r||(r=!0,i=n.apply(null,t)),i}},ei={ATTRIBUTE:Node.ATTRIBUTE_NODE,CDATA_SECTION:Node.CDATA_SECTION_NODE,COMMENT:Node.COMMENT_NODE,DOCUMENT:Node.DOCUMENT_NODE,DOCUMENT_TYPE:Node.DOCUMENT_TYPE_NODE,DOCUMENT_FRAGMENT:Node.DOCUMENT_FRAGMENT_NODE,ELEMENT:Node.ELEMENT_NODE,TEXT:Node.TEXT_NODE,PROCESSING_INSTRUCTION:Node.PROCESSING_INSTRUCTION_NODE,ENTITY_REFERENCE:Node.ENTITY_REFERENCE_NODE,ENTITY:Node.ENTITY_NODE,NOTATION:Node.NOTATION_NODE},ni=function(t){return t.dom().nodeType},ii=function(e){return function(t){return ni(t)===e}},ri=(ii(ei.ELEMENT),ii(ei.TEXT),ii(ei.DOCUMENT),ti(function(){return ri(Qn.fromDom(document))}),function(t){var e=t.dom().body;if(null===e||e===undefined)throw"Body is not available yet";return Qn.fromDom(e)}),oi=function(t,e){var n=function(t,e){for(var n=0;n<t.length;n++){var i=t[n];if(i.test(e))return i}return undefined}(t,e);if(!n)return{major:0,minor:0};var i=function(t){return Number(e.replace(n,"$"+t))};return ai(i(1),i(2))},si=function(){return ai(0,0)},ai=function(t,e){return{major:t,minor:e}},li={nu:ai,detect:function(t,e){var n=String(e).toLowerCase();return 0===t.length?si():oi(t,n)},unknown:si},ui="Firefox",ci=function(t,e){return function(){return e===t}},di=function(t){var e=t.current;return{current:e,version:t.version,isEdge:ci("Edge",e),isChrome:ci("Chrome",e),isIE:ci("IE",e),isOpera:ci("Opera",e),isFirefox:ci(ui,e),isSafari:ci("Safari",e)}},fi={unknown:function(){return di({current:undefined,version:li.unknown()})},nu:di,edge:lt("Edge"),chrome:lt("Chrome"),ie:lt("IE"),opera:lt("Opera"),firefox:lt(ui),safari:lt("Safari")},hi="Windows",mi="Android",gi="Solaris",pi="FreeBSD",vi=function(t,e){return function(){return e===t}},bi=function(t){var e=t.current;return{current:e,version:t.version,isWindows:vi(hi,e),isiOS:vi("iOS",e),isAndroid:vi(mi,e),isOSX:vi("OSX",e),isLinux:vi("Linux",e),isSolaris:vi(gi,e),isFreeBSD:vi(pi,e)}},yi={unknown:function(){return bi({current:undefined,version:li.unknown()})},nu:bi,windows:lt(hi),ios:lt("iOS"),android:lt(mi),linux:lt("Linux"),osx:lt("OSX"),solaris:lt(gi),freebsd:lt(pi)},xi=function(t,e){var n=String(e).toLowerCase();return Et(t,function(t){return t.search(n)})},wi=function(t,n){return xi(t,n).map(function(t){var e=li.detect(t.versionRegexes,n);return{current:t.name,version:e}})},_i=function(t,n){return xi(t,n).map(function(t){var e=li.detect(t.versionRegexes,n);return{current:t.name,version:e}})},Ci=function(t,e){return-1!==t.indexOf(e)},Ri=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Ei=function(e){return function(t){return Ci(t,e)}},ki=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(t){return Ci(t,"edge/")&&Ci(t,"chrome")&&Ci(t,"safari")&&Ci(t,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,Ri],search:function(t){return Ci(t,"chrome")&&!Ci(t,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(t){return Ci(t,"msie")||Ci(t,"trident")}},{name:"Opera",versionRegexes:[Ri,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Ei("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Ei("firefox")},{name:"Safari",versionRegexes:[Ri,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(t){return(Ci(t,"safari")||Ci(t,"mobile/"))&&Ci(t,"applewebkit")}}],Ti=[{name:"Windows",search:Ei("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(t){return Ci(t,"iphone")||Ci(t,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Ei("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Ei("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Ei("linux"),versionRegexes:[]},{name:"Solaris",search:Ei("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Ei("freebsd"),versionRegexes:[]}],Hi={browsers:lt(ki),oses:lt(Ti)},Mi=function(t){var e,n,i,r,o,s,a,l,u,c,d,f=Hi.browsers(),h=Hi.oses(),m=wi(f,t).fold(fi.unknown,fi.nu),g=_i(h,t).fold(yi.unknown,yi.nu);return{browser:m,os:g,deviceType:(n=m,i=t,r=(e=g).isiOS()&&!0===/ipad/i.test(i),o=e.isiOS()&&!r,s=e.isAndroid()&&3===e.version.major,a=e.isAndroid()&&4===e.version.major,l=r||s||a&&!0===/mobile/i.test(i),u=e.isiOS()||e.isAndroid(),c=u&&!l,d=n.isSafari()&&e.isiOS()&&!1===/safari/i.test(i),{isiPad:lt(r),isiPhone:lt(o),isTablet:lt(l),isPhone:lt(c),isTouch:lt(u),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:lt(d)})}},Si=ti(function(){var t=navigator.userAgent;return Mi(t)}),Ni=ei.ELEMENT,Oi=ei.DOCUMENT,Di=function(t){return t.nodeType!==Ni&&t.nodeType!==Oi||0===t.childElementCount},Pi={all:function(t,e){var n=e===undefined?document:e.dom();return Di(n)?[]:_t(n.querySelectorAll(t),Qn.fromDom)},is:function(t,e){var n=t.dom();if(n.nodeType!==Ni)return!1;if(n.matches!==undefined)return n.matches(e);if(n.msMatchesSelector!==undefined)return n.msMatchesSelector(e);if(n.webkitMatchesSelector!==undefined)return n.webkitMatchesSelector(e);if(n.mozMatchesSelector!==undefined)return n.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")},one:function(t,e){var n=e===undefined?document:e.dom();return Di(n)?pt.none():pt.from(n.querySelector(t)).map(Qn.fromDom)}},Wi=(Si().browser.isIE(),function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e]}("element","offset"),function(t,e){return Pi.all(e,t)}),Ai=C.trim,Bi=function(e){return function(t){if(t&&1===t.nodeType){if(t.contentEditable===e)return!0;if(t.getAttribute("data-mce-contenteditable")===e)return!0}return!1}},Li=Bi("true"),Ii=Bi("false"),zi=function(t,e,n,i,r){return{type:t,title:e,url:n,level:i,attach:r}},Fi=function(t){return t.innerText||t.textContent},Ui=function(t){return t.id?t.id:(e="h",n=(new Date).getTime(),e+"_"+Math.floor(1e9*Math.random())+ ++Kn+String(n));var e,n},Vi=function(t){return(e=t)&&"A"===e.nodeName&&(e.id||e.name)&&Yi(t);var e},qi=function(t){return t&&/^(H[1-6])$/.test(t.nodeName)},Yi=function(t){return function(t){for(;t=t.parentNode;){var e=t.contentEditable;if(e&&"inherit"!==e)return Li(t)}return!1}(t)&&!Ii(t)},$i=function(t){return qi(t)&&Yi(t)},Xi=function(t){var e,n=Ui(t);return zi("header",Fi(t),"#"+n,qi(e=t)?parseInt(e.nodeName.substr(1),10):0,function(){t.id=n})},ji=function(t){var e=t.id||t.name,n=Fi(t);return zi("anchor",n||"#"+e,"#"+e,0,at)},Ji=function(t){var e,n;return e="h1,h2,h3,h4,h5,h6,a:not([href])",n=t,_t(Wi(Qn.fromDom(n),e),function(t){return t.dom()})},Gi=function(t){return 0<Ai(t.title).length},Ki=function(t){var e,n=Ji(t);return Rt((e=n,_t(Rt(e,$i),Xi)).concat(_t(Rt(n,Vi),ji)),Gi)},Zi={},Qi=function(t){return{title:t.title,value:{title:{raw:t.title},url:t.url,attach:t.attach}}},tr=function(t,e){return{title:t,value:{title:t,url:e,attach:at}}},er=function(t,e,n){var i=e in t?t[e]:n;return!1===i?null:i},nr=function(t,i,r,e){var n,o,s,a,l,u,c={title:"-"},d=function(t){var e=t.hasOwnProperty(r)?t[r]:[],n=Rt(e,function(t){return e=t,!wt(i,function(t){return t.url===e});var e});return C.map(n,function(t){return{title:t,value:{title:t,url:t,attach:at}}})},f=function(e){var t,n=Rt(i,function(t){return t.type===e});return t=n,C.map(t,Qi)};return!1===e.typeahead_urls?[]:"file"===r?(n=[rr(t,d(Zi)),rr(t,f("header")),rr(t,(a=f("anchor"),l=er(e,"anchor_top","#top"),u=er(e,"anchor_bottom","#bottom"),null!==l&&a.unshift(tr("<top>",l)),null!==u&&a.push(tr("<bottom>",u)),a))],o=function(t,e){return 0===t.length||0===e.length?t.concat(e):t.concat(c,e)},s=[],Ct(n,function(t){s=o(s,t)}),s):rr(t,d(Zi))},ir=function(t,e){var n,i,r,o=Zi[e];/^https?/.test(t)&&(o?(n=o,i=t,r=xt(n,i),-1===r?pt.none():pt.some(r)).isNone()&&(Zi[e]=o.slice(0,5).concat(t)):Zi[e]=[t])},rr=function(t,e){var n=t.toLowerCase(),i=C.grep(e,function(t){return-1!==t.title.toLowerCase().indexOf(n)});return 1===i.length&&i[0].title===t?[]:i},or=function(o,t,n){var i=t.filepicker_validator_handler;i&&o.state.on("change:value",function(t){var e;0!==(e=t.value).length?i({url:e,type:n},function(t){var e,n,i,r=(n=(e=t).status,i=e.message,"valid"===n?{status:"ok",message:i}:"unknown"===n?{status:"warn",message:i}:"invalid"===n?{status:"warn",message:i}:{status:"none",message:""});o.statusMessage(r.message),o.statusLevel(r.status)}):o.statusLevel("none")})},sr=Ln.extend({Statics:{clearHistory:function(){Zi={}}},init:function(t){var e,n,i,r,o,s,a,l,u=this,c=window.tinymce?window.tinymce.activeEditor:S.activeEditor,d=c.settings,f=t.filetype;t.spellcheck=!1,(i=d.file_picker_types||d.file_browser_callback_types)&&(i=C.makeMap(i,/[, ]/)),i&&!i[f]||(!(n=d.file_picker_callback)||i&&!i[f]?!(n=d.file_browser_callback)||i&&!i[f]||(e=function(){n(u.getEl("inp").id,u.value(),f,window)}):e=function(){var t=u.fire("beforecall").meta;t=C.extend({filetype:f},t),n.call(c,function(t,e){u.value(t).fire("change",{meta:e})},u.value(),t)}),e&&(t.icon="browse",t.onaction=e),u._super(t),u.classes.add("filepicker"),r=u,o=d,s=c.getBody(),a=f,l=function(t){var e=Ki(s),n=nr(t,e,a,o);r.showAutoComplete(n,t)},r.on("autocomplete",function(){l(r.value())}),r.on("selectitem",function(t){var e=t.value;r.value(e.url);var n,i=(n=e.title).raw?n.raw:n;"image"===a?r.fire("change",{meta:{alt:i,attach:e.attach}}):r.fire("change",{meta:{text:i,attach:e.attach}}),r.focus()}),r.on("click",function(t){0===r.value().length&&"INPUT"===t.target.nodeName&&l("")}),r.on("PostRender",function(){r.getRoot().on("submit",function(t){t.isDefaultPrevented()||ir(r.value(),a)})}),or(u,d,f)}}),ar=On.extend({recalc:function(t){var e=t.layoutRect(),n=t.paddingBox;t.items().filter(":visible").each(function(t){t.layoutRect({x:n.left,y:n.top,w:e.innerW-n.right-n.left,h:e.innerH-n.top-n.bottom}),t.recalc&&t.recalc()})}}),lr=On.extend({recalc:function(t){var e,n,i,r,o,s,a,l,u,c,d,f,h,m,g,p,v,b,y,x,w,_,C,R,E,k,T,H,M,S,N,O,D,P,W,A,B,L=[],I=Math.max,z=Math.min;for(i=t.items().filter(":visible"),r=t.layoutRect(),o=t.paddingBox,s=t.settings,f=t.isRtl()?s.direction||"row-reversed":s.direction,a=s.align,l=t.isRtl()?s.pack||"end":s.pack,u=s.spacing||0,"row-reversed"!==f&&"column-reverse"!==f||(i=i.set(i.toArray().reverse()),f=f.split("-")[0]),"column"===f?(R="y",_="h",C="minH",E="maxH",T="innerH",k="top",H="deltaH",M="contentH",P="left",O="w",S="x",N="innerW",D="minW",W="right",A="deltaW",B="contentW"):(R="x",_="w",C="minW",E="maxW",T="innerW",k="left",H="deltaW",M="contentW",P="top",O="h",S="y",N="innerH",D="minH",W="bottom",A="deltaH",B="contentH"),d=r[T]-o[k]-o[k],w=c=0,e=0,n=i.length;e<n;e++)m=(h=i[e]).layoutRect(),d-=e<n-1?u:0,0<(g=h.settings.flex)&&(c+=g,m[E]&&L.push(h),m.flex=g),d-=m[C],w<(p=o[P]+m[D]+o[W])&&(w=p);if((y={})[C]=d<0?r[C]-d+r[H]:r[T]-d+r[H],y[D]=w+r[A],y[M]=r[T]-d,y[B]=w,y.minW=z(y.minW,r.maxW),y.minH=z(y.minH,r.maxH),y.minW=I(y.minW,r.startMinWidth),y.minH=I(y.minH,r.startMinHeight),!r.autoResize||y.minW===r.minW&&y.minH===r.minH){for(b=d/c,e=0,n=L.length;e<n;e++)(v=(m=(h=L[e]).layoutRect())[E])<(p=m[C]+m.flex*b)?(d-=m[E]-m[C],c-=m.flex,m.flex=0,m.maxFlexSize=v):m.maxFlexSize=0;for(b=d/c,x=o[k],y={},0===c&&("end"===l?x=d+o[k]:"center"===l?(x=Math.round(r[T]/2-(r[T]-d)/2)+o[k])<0&&(x=o[k]):"justify"===l&&(x=o[k],u=Math.floor(d/(i.length-1)))),y[S]=o[P],e=0,n=i.length;e<n;e++)p=(m=(h=i[e]).layoutRect()).maxFlexSize||m[C],"center"===a?y[S]=Math.round(r[N]/2-m[O]/2):"stretch"===a?(y[O]=I(m[D]||0,r[N]-o[P]-o[W]),y[S]=o[P]):"end"===a&&(y[S]=r[N]-m[O]-o.top),0<m.flex&&(p+=m.flex*b),y[_]=p,y[R]=x,h.layoutRect(y),h.recalc&&h.recalc(),x+=p+u}else if(y.w=y.minW,y.h=y.minH,t.layoutRect(y),this.recalc(t),null===t._lastRect){var F=t.parent();F&&(F._lastRect=null,F.recalc())}}}),ur=Nn.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(t){t.items().filter(":visible").each(function(t){t.recalc&&t.recalc()})},isNative:function(){return!0}}),cr=function(t,e){return Pi.one(e,t)},dr=function(t,e){return function(){t.execCommand("mceToggleFormat",!1,e)}},fr=function(t,e,n){var i=function(t){n(t,e)};t.formatter?t.formatter.formatChanged(e,i):t.on("init",function(){t.formatter.formatChanged(e,i)})},hr=function(t,n){return function(e){fr(t,n,function(t){e.control.active(t)})}},mr=function(i){var e=["alignleft","aligncenter","alignright","alignjustify"],r="alignleft",t=[{text:"Left",icon:"alignleft",onclick:dr(i,"alignleft")},{text:"Center",icon:"aligncenter",onclick:dr(i,"aligncenter")},{text:"Right",icon:"alignright",onclick:dr(i,"alignright")},{text:"Justify",icon:"alignjustify",onclick:dr(i,"alignjustify")}];i.addMenuItem("align",{text:"Align",menu:t}),i.addButton("align",{type:"menubutton",icon:r,menu:t,onShowMenu:function(t){var n=t.control.menu;C.each(e,function(e,t){n.items().eq(t).each(function(t){return t.active(i.formatter.match(e))})})},onPostRender:function(t){var n=t.control;C.each(e,function(e,t){fr(i,e,function(t){n.icon(r),t&&n.icon(e)})})}}),C.each({alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"],alignnone:["No alignment","JustifyNone"]},function(t,e){i.addButton(e,{active:!1,tooltip:t[0],cmd:t[1],onPostRender:hr(i,e)})})},gr=function(t){return t?t.split(",")[0]:""},pr=function(l,u){return function(){var a=this;a.state.set("value",null),l.on("init nodeChange",function(t){var e,n,i,r,o=l.queryCommandValue("FontName"),s=(e=u,r=(n=o)?n.toLowerCase():"",C.each(e,function(t){t.value.toLowerCase()===r&&(i=t.value)}),C.each(e,function(t){i||gr(t.value).toLowerCase()!==gr(r).toLowerCase()||(i=t.value)}),i);a.value(s||null),!s&&o&&a.text(gr(o))})}},vr=function(n){n.addButton("fontselect",function(){var t,e=(t=function(t){for(var e=(t=t.replace(/;$/,"").split(";")).length;e--;)t[e]=t[e].split("=");return t}(n.settings.font_formats||"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats"),C.map(t,function(t){return{text:{raw:t[0]},value:t[1],textStyle:-1===t[1].indexOf("dings")?"font-family:"+t[1]:""}}));return{type:"listbox",text:"Font Family",tooltip:"Font Family",values:e,fixedWidth:!0,onPostRender:pr(n,e),onselect:function(t){t.control.settings.value&&n.execCommand("FontName",!1,t.control.settings.value)}}})},br=function(t){vr(t)},yr=function(t,e){return/[0-9.]+px$/.test(t)?(n=72*parseInt(t,10)/96,i=e||0,r=Math.pow(10,i),Math.round(n*r)/r+"pt"):t;var n,i,r},xr=function(t,e,n){var i;return C.each(t,function(t){t.value===n?i=n:t.value===e&&(i=e)}),i},wr=function(n){n.addButton("fontsizeselect",function(){var t,s,a,e=(t=n.settings.fontsize_formats||"8pt 10pt 12pt 14pt 18pt 24pt 36pt",C.map(t.split(" "),function(t){var e=t,n=t,i=t.split("=");return 1<i.length&&(e=i[0],n=i[1]),{text:e,value:n}}));return{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:e,fixedWidth:!0,onPostRender:(s=n,a=e,function(){var o=this;s.on("init nodeChange",function(t){var e,n,i,r;if(e=s.queryCommandValue("FontSize"))for(i=3;!r&&0<=i;i--)n=yr(e,i),r=xr(a,n,e);o.value(r||null),r||o.text(n)})}),onclick:function(t){t.control.settings.value&&n.execCommand("FontSize",!1,t.control.settings.value)}}})},_r=function(t){wr(t)},Cr=function(n,t){var i=t.length;return C.each(t,function(t){t.menu&&(t.hidden=0===Cr(n,t.menu));var e=t.format;e&&(t.hidden=!n.formatter.canApply(e)),t.hidden&&i--}),i},Rr=function(n,t){var i=t.items().length;return t.items().each(function(t){t.menu&&t.visible(0<Rr(n,t.menu)),!t.menu&&t.settings.menu&&t.visible(0<Cr(n,t.settings.menu));var e=t.settings.format;e&&t.visible(n.formatter.canApply(e)),t.visible()||i--}),i},Er=function(t){var i,r,o,e,s,n,a,l,u=(r=0,o=[],e=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],s=function(t){var i=[];if(t)return C.each(t,function(t){var e={text:t.title,icon:t.icon};if(t.items)e.menu=s(t.items);else{var n=t.format||"custom"+r++;t.format||(t.name=n,o.push(t)),e.format=n,e.cmd=t.cmd}i.push(e)}),i},(i=t).on("init",function(){C.each(o,function(t){i.formatter.register(t.name,t)})}),{type:"menu",items:i.settings.style_formats_merge?i.settings.style_formats?s(e.concat(i.settings.style_formats)):s(e):s(i.settings.style_formats||e),onPostRender:function(t){i.fire("renderFormatsMenu",{control:t.control})},itemDefaults:{preview:!0,textStyle:function(){if(this.settings.format)return i.formatter.getCssText(this.settings.format)},onPostRender:function(){var n=this;n.parent().on("show",function(){var t,e;(t=n.settings.format)&&(n.disabled(!i.formatter.canApply(t)),n.active(i.formatter.match(t))),(e=n.settings.cmd)&&n.active(i.queryCommandState(e))})},onclick:function(){this.settings.format&&dr(i,this.settings.format)(),this.settings.cmd&&i.execCommand(this.settings.cmd)}}});n=u,t.addMenuItem("formats",{text:"Formats",menu:n}),l=u,(a=t).addButton("styleselect",{type:"menubutton",text:"Formats",menu:l,onShowMenu:function(){a.settings.style_formats_autohide&&Rr(a,this.menu)}})},kr=function(n,t){return function(){var r,o,s,e=[];return C.each(t,function(t){e.push({text:t[0],value:t[1],textStyle:function(){return n.formatter.getCssText(t[1])}})}),{type:"listbox",text:t[0][0],values:e,fixedWidth:!0,onselect:function(t){if(t.control){var e=t.control.value();dr(n,e)()}},onPostRender:(r=n,o=e,function(){var e=this;r.on("nodeChange",function(t){var n=r.formatter,i=null;C.each(t.parents,function(e){if(C.each(o,function(t){if(s?n.matchNode(e,s,{value:t.value})&&(i=t.value):n.matchNode(e,t.value)&&(i=t.value),i)return!1}),i)return!1}),e.value(i)})})}}},Tr=function(t){var e,n,i=function(t){for(var e=(t=t.replace(/;$/,"").split(";")).length;e--;)t[e]=t[e].split("=");return t}(t.settings.block_formats||"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre");t.addMenuItem("blockformats",{text:"Blocks",menu:(e=t,n=i,C.map(n,function(t){return{text:t[0],onclick:dr(e,t[1]),textStyle:function(){return e.formatter.getCssText(t[1])}}}))}),t.addButton("formatselect",kr(t,i))},Hr=function(e,t){var n,i;if("string"==typeof t)i=t.split(" ");else if(C.isArray(t))return function(t){for(var e=[],n=0,i=t.length;n<i;++n){if(!Array.prototype.isPrototypeOf(t[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+t);Ht.apply(e,t[n])}return e}(C.map(t,function(t){return Hr(e,t)}));return n=C.grep(i,function(t){return"|"===t||t in e.menuItems}),C.map(n,function(t){return"|"===t?{text:"-"}:e.menuItems[t]})},Mr=function(t){return t&&"-"===t.text},Sr=function(t){var e=Rt(t,function(t,e,n){return!Mr(t)||!Mr(n[e-1])});return Rt(e,function(t,e,n){return!Mr(t)||0<e&&e<n.length-1})},Nr=function(t){var e,n,i,r,o=t.settings.insert_button_items;return Sr(o?Hr(t,o):(e=t,n="insert",i=[{text:"-"}],r=C.grep(e.menuItems,function(t){return t.context===n}),C.each(r,function(t){"before"===t.separator&&i.push({text:"|"}),t.prependToContext?i.unshift(t):i.push(t),"after"===t.separator&&i.push({text:"|"})}),i))},Or=function(t){var e;(e=t).addButton("insert",{type:"menubutton",icon:"insert",menu:[],oncreatemenu:function(){this.menu.add(Nr(e)),this.menu.renderNew()}})},Dr=function(t){var n,i,r;n=t,C.each({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(t,e){n.addButton(e,{active:!1,tooltip:t,onPostRender:hr(n,e),onclick:dr(n,e)})}),i=t,C.each({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"],removeformat:["Clear formatting","RemoveFormat"],remove:["Remove","Delete"]},function(t,e){i.addButton(e,{tooltip:t[0],cmd:t[1]})}),r=t,C.each({blockquote:["Blockquote","mceBlockQuote"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"]},function(t,e){r.addButton(e,{active:!1,tooltip:t[0],cmd:t[1],onPostRender:hr(r,e)})})},Pr=function(t){var n;Dr(t),n=t,C.each({bold:["Bold","Bold","Meta+B"],italic:["Italic","Italic","Meta+I"],underline:["Underline","Underline","Meta+U"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"],newdocument:["New document","mceNewDocument"],cut:["Cut","Cut","Meta+X"],copy:["Copy","Copy","Meta+C"],paste:["Paste","Paste","Meta+V"],selectall:["Select all","SelectAll","Meta+A"]},function(t,e){n.addMenuItem(e,{text:t[0],icon:e,shortcut:t[2],cmd:t[1]})}),n.addMenuItem("codeformat",{text:"Code",icon:"code",onclick:dr(n,"code")})},Wr=function(n,i){return function(){var t=this,e=function(){var t="redo"===i?"hasRedo":"hasUndo";return!!n.undoManager&&n.undoManager[t]()};t.disabled(!e()),n.on("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",function(){t.disabled(n.readonly||!e())})}},Ar=function(t){var e,n;(e=t).addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onPostRender:Wr(e,"undo"),cmd:"undo"}),e.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onPostRender:Wr(e,"redo"),cmd:"redo"}),(n=t).addButton("undo",{tooltip:"Undo",onPostRender:Wr(n,"undo"),cmd:"undo"}),n.addButton("redo",{tooltip:"Redo",onPostRender:Wr(n,"redo"),cmd:"redo"})},Br=function(t){var e,n;(e=t).addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:(n=e,function(){var e=this;n.on("VisualAid",function(t){e.active(t.hasVisual)}),e.active(n.hasVisual)}),cmd:"mceToggleVisualAid"})},Lr={setup:function(t){var e;t.rtl&&(ce.rtl=!0),t.on("mousedown",function(){Ve.hideAll()}),(e=t).settings.ui_container&&(h.container=cr(Qn.fromDom(document.body),e.settings.ui_container).fold(lt(null),function(t){return t.dom()})),be.tooltips=!h.iOS,ce.translate=function(t){return S.translate(t)},Tr(t),mr(t),Pr(t),Ar(t),_r(t),br(t),Er(t),Br(t),Or(t)}},Ir=On.extend({recalc:function(t){var e,n,i,r,o,s,a,l,u,c,d,f,h,m,g,p,v,b,y,x,w,_,C,R,E,k,T,H,M=[],S=[];e=t.settings,r=t.items().filter(":visible"),o=t.layoutRect(),i=e.columns||Math.ceil(Math.sqrt(r.length)),n=Math.ceil(r.length/i),b=e.spacingH||e.spacing||0,y=e.spacingV||e.spacing||0,x=e.alignH||e.align,w=e.alignV||e.align,p=t.paddingBox,H="reverseRows"in e?e.reverseRows:t.isRtl(),x&&"string"==typeof x&&(x=[x]),w&&"string"==typeof w&&(w=[w]);for(d=0;d<i;d++)M.push(0);for(f=0;f<n;f++)S.push(0);for(f=0;f<n;f++)for(d=0;d<i&&(c=r[f*i+d]);d++)R=(u=c.layoutRect()).minW,E=u.minH,M[d]=R>M[d]?R:M[d],S[f]=E>S[f]?E:S[f];for(k=o.innerW-p.left-p.right,d=_=0;d<i;d++)_+=M[d]+(0<d?b:0),k-=(0<d?b:0)+M[d];for(T=o.innerH-p.top-p.bottom,f=C=0;f<n;f++)C+=S[f]+(0<f?y:0),T-=(0<f?y:0)+S[f];if(_+=p.left+p.right,C+=p.top+p.bottom,(l={}).minW=_+(o.w-o.innerW),l.minH=C+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW===o.minW&&l.minH===o.minH){var N;o.autoResize&&((l=t.layoutRect(l)).contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH),N="start"===e.packV?0:0<T?Math.floor(T/n):0;var O=0,D=e.flexWidths;if(D)for(d=0;d<D.length;d++)O+=D[d];else O=i;var P=k/O;for(d=0;d<i;d++)M[d]+=D?D[d]*P:P;for(m=p.top,f=0;f<n;f++){for(h=p.left,a=S[f]+N,d=0;d<i&&(c=r[H?f*i+i-1-d:f*i+d]);d++)g=c.settings,u=c.layoutRect(),s=Math.max(M[d],u.startMinWidth),u.x=h,u.y=m,"center"===(v=g.alignH||(x?x[d]||x[0]:null))?u.x=h+s/2-u.w/2:"right"===v?u.x=h+s-u.w:"stretch"===v&&(u.w=s),"center"===(v=g.alignV||(w?w[d]||w[0]:null))?u.y=m+a/2-u.h/2:"bottom"===v?u.y=m+a-u.h:"stretch"===v&&(u.h=a),c.layoutRect(u),h+=s+b,c.recalc&&c.recalc();m+=a+y}}else if(l.w=l.minW,l.h=l.minH,t.layoutRect(l),this.recalc(t),null===t._lastRect){var W=t.parent();W&&(W._lastRect=null,W.recalc())}}}),zr=be.extend({renderHtml:function(){var t=this;return t.classes.add("iframe"),t.canFocus=!1,'<iframe id="'+t._id+'" class="'+t.classes+'" tabindex="-1" src="'+(t.settings.url||"javascript:''")+'" frameborder="0"></iframe>'},src:function(t){this.getEl().src=t},html:function(t,e){var n=this,i=this.getEl().contentWindow.document.body;return i?(i.innerHTML=t,e&&e()):c.setTimeout(function(){n.html(t)}),this}}),Fr=be.extend({init:function(t){this._super(t),this.classes.add("widget").add("infobox"),this.canFocus=!1},severity:function(t){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(t)},help:function(t){this.state.set("help",t)},renderHtml:function(){var t=this,e=t.classPrefix;return'<div id="'+t._id+'" class="'+t.classes+'"><div id="'+t._id+'-body">'+t.encode(t.state.get("text"))+'<button role="button" tabindex="-1"><i class="'+e+"ico "+e+'i-help"></i></button></div></div>'},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.getEl("body").firstChild.data=e.encode(t.value),e.state.get("rendered")&&e.updateLayoutRect()}),e.state.on("change:help",function(t){e.classes.toggle("has-help",t.value),e.state.get("rendered")&&e.updateLayoutRect()}),e._super()}}),Ur=be.extend({init:function(t){var e=this;e._super(t),e.classes.add("widget").add("label"),e.canFocus=!1,t.multiline&&e.classes.add("autoscroll"),t.strong&&e.classes.add("strong")},initLayoutRect:function(){var t=this,e=t._super();return t.settings.multiline&&(St.getSize(t.getEl()).width>e.maxW&&(e.minW=e.maxW,t.classes.add("multiline")),t.getEl().style.width=e.minW+"px",e.startMinH=e.h=e.minH=Math.min(e.maxH,St.getSize(t.getEl()).height)),e},repaint:function(){return this.settings.multiline||(this.getEl().style.lineHeight=this.layoutRect().h+"px"),this._super()},severity:function(t){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(t)},renderHtml:function(){var t,e,n=this,i=n.settings.forId,r=n.settings.html?n.settings.html:n.encode(n.state.get("text"));return!i&&(e=n.settings.forName)&&(t=n.getRoot().find("#"+e)[0])&&(i=t._id),i?'<label id="'+n._id+'" class="'+n.classes+'"'+(i?' for="'+i+'"':"")+">"+r+"</label>":'<span id="'+n._id+'" class="'+n.classes+'">'+r+"</span>"},bindStates:function(){var e=this;return e.state.on("change:text",function(t){e.innerHtml(e.encode(t.value)),e.state.get("rendered")&&e.updateLayoutRect()}),e._super()}}),Vr=De.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(t){this._super(t),this.classes.add("toolbar")},postRender:function(){return this.items().each(function(t){t.classes.add("toolbar-item")}),this._super()}}),qr=Vr.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}}),Yr=Dn.extend({init:function(t){var e=this;e._renderOpen=!0,e._super(t),t=e.settings,e.classes.add("menubtn"),t.fixedWidth&&e.classes.add("fixed-width"),e.aria("haspopup",!0),e.state.set("menu",t.menu||e.render())},showMenu:function(t){var e,n=this;if(n.menu&&n.menu.visible()&&!1!==t)return n.hideMenu();n.menu||(e=n.state.get("menu")||[],n.classes.add("opened"),e.length?e={type:"menu",animate:!0,items:e}:(e.type=e.type||"menu",e.animate=!0),e.renderTo?n.menu=e.parent(n).show().renderTo():n.menu=Ee.create(e).parent(n).renderTo(),n.fire("createmenu"),n.menu.reflow(),n.menu.on("cancel",function(t){t.control.parent()===n.menu&&(t.stopPropagation(),n.focus(),n.hideMenu())}),n.menu.on("select",function(){n.focus()}),n.menu.on("show hide",function(t){t.control===n.menu&&(n.activeMenu("show"===t.type),n.classes.toggle("opened","show"===t.type)),n.aria("expanded","show"===t.type)}).fire("show")),n.menu.show(),n.menu.layoutRect({w:n.layoutRect().w}),n.menu.repaint(),n.menu.moveRel(n.getEl(),n.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]),n.fire("showmenu")},hideMenu:function(){this.menu&&(this.menu.items().each(function(t){t.hideMenu&&t.hideMenu()}),this.menu.hide())},activeMenu:function(t){this.classes.toggle("active",t)},renderHtml:function(){var t,e=this,n=e._id,i=e.classPrefix,r=e.settings.icon,o=e.state.get("text"),s="";return(t=e.settings.image)?(r="none","string"!=typeof t&&(t=window.getSelection?t[0]:t[1]),t=" style=\"background-image: url('"+t+"')\""):t="",o&&(e.classes.add("btn-has-text"),s='<span class="'+i+'txt">'+e.encode(o)+"</span>"),r=e.settings.icon?i+"ico "+i+"i-"+r:"",e.aria("role",e.parent()instanceof qr?"menuitem":"button"),'<div id="'+n+'" class="'+e.classes+'" tabindex="-1" aria-labelledby="'+n+'"><button id="'+n+'-open" role="presentation" type="button" tabindex="-1">'+(r?'<i class="'+r+'"'+t+"></i>":"")+s+' <i class="'+i+'caret"></i></button></div>'},postRender:function(){var r=this;return r.on("click",function(t){t.control===r&&function(t,e){for(;t;){if(e===t)return!0;t=t.parentNode}return!1}(t.target,r.getEl())&&(r.focus(),r.showMenu(!t.aria),t.aria&&r.menu.items().filter(":visible")[0].focus())}),r.on("mouseenter",function(t){var e,n=t.control,i=r.parent();n&&i&&n instanceof Yr&&n.parent()===i&&(i.items().filter("MenuButton").each(function(t){t.hideMenu&&t!==n&&(t.menu&&t.menu.visible()&&(e=!0),t.hideMenu())}),e&&(n.focus(),n.showMenu()))}),r._super()},bindStates:function(){var t=this;return t.state.on("change:menu",function(){t.menu&&t.menu.remove(),t.menu=null}),t._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}});function $r(i,r){var o,s,a=this,l=ce.classPrefix;a.show=function(t,e){function n(){o&&(Nt(i).append('<div class="'+l+"throbber"+(r?" "+l+"throbber-inline":"")+'"></div>'),e&&e())}return a.hide(),o=!0,t?s=c.setTimeout(n,t):n(),a},a.hide=function(){var t=i.lastChild;return c.clearTimeout(s),t&&-1!==t.className.indexOf("throbber")&&t.parentNode.removeChild(t),o=!1,a}}var Xr=Ve.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(t){if(t.autohide=!0,t.constrainToViewport=!0,"function"==typeof t.items&&(t.itemsFactory=t.items,t.items=[]),t.itemDefaults)for(var e=t.items,n=e.length;n--;)e[n]=C.extend({},t.itemDefaults,e[n]);this._super(t),this.classes.add("menu"),t.animate&&11!==h.ie&&this.classes.add("animate")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){this.hideAll(),this.fire("select")},load:function(){var e,n=this;function i(){n.throbber&&(n.throbber.hide(),n.throbber=null)}n.settings.itemsFactory&&(n.throbber||(n.throbber=new $r(n.getEl("body"),!0),0===n.items().length?(n.throbber.show(),n.fire("loading")):n.throbber.show(100,function(){n.items().remove(),n.fire("loading")}),n.on("hide close",i)),n.requestTime=e=(new Date).getTime(),n.settings.itemsFactory(function(t){0!==t.length?n.requestTime===e&&(n.getEl().style.width="",n.getEl("body").style.width="",i(),n.items().remove(),n.getEl("body").innerHTML="",n.add(t),n.renderNew(),n.fire("loaded")):n.hide()}))},hideAll:function(){return this.find("menuitem").exec("hideMenu"),this._super()},preRender:function(){var n=this;return n.items().each(function(t){var e=t.settings;if(e.icon||e.image||e.selectable)return!(n._hasIcons=!0)}),n.settings.itemsFactory&&n.on("postrender",function(){n.settings.itemsFactory&&n.load()}),n.on("show hide",function(t){t.control===n&&("show"===t.type?c.setTimeout(function(){n.classes.add("in")},0):n.classes.remove("in"))}),n._super()}}),jr=Yr.extend({init:function(i){var e,r,o,n,s=this;s._super(i),i=s.settings,s._values=e=i.values,e&&("undefined"!=typeof i.value&&function t(e){for(var n=0;n<e.length;n++){if(r=e[n].selected||i.value===e[n].value)return o=o||e[n].text,s.state.set("value",e[n].value),!0;if(e[n].menu&&t(e[n].menu))return!0}}(e),!r&&0<e.length&&(o=e[0].text,s.state.set("value",e[0].value)),s.state.set("menu",e)),s.state.set("text",i.text||o),s.classes.add("listbox"),s.on("select",function(t){var e=t.control;n&&(t.lastControl=n),i.multiple?e.active(!e.active()):s.value(t.control.value()),n=e})},value:function(e){return 0===arguments.length?this.state.get("value"):(void 0===e||(this.settings.values?0<C.grep(this.settings.values,function(t){return t.value===e}).length?this.state.set("value",e):null===e&&this.state.set("value",null):this.state.set("value",e)),this)},bindStates:function(){var i=this;return i.on("show",function(t){var e,n;e=t.control,n=i.value(),e instanceof Xr&&e.items().each(function(t){t.hasMenus()||t.active(t.value()===n)})}),i.state.on("change:value",function(e){var n=function t(e,n){var i;if(e)for(var r=0;r<e.length;r++){if(e[r].value===n)return e[r];if(e[r].menu&&(i=t(e[r].menu,n)))return i}}(i.state.get("menu"),e.value);n?i.text(n.text):i.text(i.settings.text)}),i._super()}}),Jr=be.extend({Defaults:{border:0,role:"menuitem"},init:function(t){var e,n=this;n._super(t),t=n.settings,n.classes.add("menu-item"),t.menu&&n.classes.add("menu-item-expand"),t.preview&&n.classes.add("menu-item-preview"),"-"!==(e=n.state.get("text"))&&"|"!==e||(n.classes.add("menu-item-sep"),n.aria("role","separator"),n.state.set("text","-")),t.selectable&&(n.aria("role","menuitemcheckbox"),n.classes.add("menu-item-checkbox"),t.icon="selected"),t.preview||t.selectable||n.classes.add("menu-item-normal"),n.on("mousedown",function(t){t.preventDefault()}),t.menu&&!t.ariaHideMenu&&n.aria("haspopup",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var e,n=this,t=n.settings,i=n.parent();if(i.items().each(function(t){t!==n&&t.hideMenu()}),t.menu){(e=n.menu)?e.show():((e=t.menu).length?e={type:"menu",items:e}:e.type=e.type||"menu",i.settings.itemDefaults&&(e.itemDefaults=i.settings.itemDefaults),(e=n.menu=Ee.create(e).parent(n).renderTo()).reflow(),e.on("cancel",function(t){t.stopPropagation(),n.focus(),e.hide()}),e.on("show hide",function(t){t.control.items&&t.control.items().each(function(t){t.active(t.settings.selected)})}).fire("show"),e.on("hide",function(t){t.control===e&&n.classes.remove("selected")}),e.submenu=!0),e._parentMenu=i,e.classes.add("menu-sub");var r=e.testMoveRel(n.getEl(),n.isRtl()?["tl-tr","bl-br","tr-tl","br-bl"]:["tr-tl","br-bl","tl-tr","bl-br"]);e.moveRel(n.getEl(),r),r="menu-sub-"+(e.rel=r),e.classes.remove(e._lastRel).add(r),e._lastRel=r,n.classes.add("selected"),n.aria("expanded",!0)}},hideMenu:function(){var t=this;return t.menu&&(t.menu.items().each(function(t){t.hideMenu&&t.hideMenu()}),t.menu.hide(),t.aria("expanded",!1)),t},renderHtml:function(){var t,e=this,n=e._id,i=e.settings,r=e.classPrefix,o=e.state.get("text"),s=e.settings.icon,a="",l=i.shortcut,u=e.encode(i.url);function c(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function d(t){var e=i.match||"";return e?t.replace(new RegExp(c(e),"gi"),function(t){return"!mce~match["+t+"]mce~match!"}):t}function f(t){return t.replace(new RegExp(c("!mce~match["),"g"),"<b>").replace(new RegExp(c("]mce~match!"),"g"),"</b>")}return s&&e.parent().classes.add("menu-has-icons"),i.image&&(a=" style=\"background-image: url('"+i.image+"')\""),l&&(l=function(t){var e,n,i={};for(i=h.mac?{alt:"⌥",ctrl:"⌘",shift:"⇧",meta:"⌘"}:{meta:"Ctrl"},t=t.split("+"),e=0;e<t.length;e++)(n=i[t[e].toLowerCase()])&&(t[e]=n);return t.join("+")}(l)),s=r+"ico "+r+"i-"+(e.settings.icon||"none"),t="-"!==o?'<i class="'+s+'"'+a+"></i>\xa0":"",o=f(e.encode(d(o))),u=f(e.encode(d(u))),'<div id="'+n+'" class="'+e.classes+'" tabindex="-1">'+t+("-"!==o?'<span id="'+n+'-text" class="'+r+'text">'+o+"</span>":"")+(l?'<div id="'+n+'-shortcut" class="'+r+'menu-shortcut">'+l+"</div>":"")+(i.menu?'<div class="'+r+'caret"></div>':"")+(u?'<div class="'+r+'menu-item-link">'+u+"</div>":"")+"</div>"},postRender:function(){var e=this,n=e.settings,t=n.textStyle;if("function"==typeof t&&(t=t.call(this)),t){var i=e.getEl("text");i&&(i.setAttribute("style",t),e._textStyle=t)}return e.on("mouseenter click",function(t){t.control===e&&(n.menu||"click"!==t.type?(e.showMenu(),t.aria&&e.menu.focus(!0)):(e.fire("select"),c.requestAnimationFrame(function(){e.parent().hideAll()})))}),e._super(),e},hover:function(){return this.parent().items().each(function(t){t.classes.remove("selected")}),this.classes.toggle("selected",!0),this},active:function(t){return function(t,e){var n=t._textStyle;if(n){var i=t.getEl("text");i.setAttribute("style",n),e&&(i.style.color="",i.style.backgroundColor="")}}(this,t),void 0!==t&&this.aria("checked",t),this._super(t)},remove:function(){this._super(),this.menu&&this.menu.remove()}}),Gr=An.extend({Defaults:{classes:"radio",role:"radio"}}),Kr=be.extend({renderHtml:function(){var t=this,e=t.classPrefix;return t.classes.add("resizehandle"),"both"===t.settings.direction&&t.classes.add("resizehandle-both"),t.canFocus=!1,'<div id="'+t._id+'" class="'+t.classes+'"><i class="'+e+"ico "+e+'i-resize"></i></div>'},postRender:function(){var e=this;e._super(),e.resizeDragHelper=new Re(this._id,{start:function(){e.fire("ResizeStart")},drag:function(t){"both"!==e.settings.direction&&(t.deltaX=0),e.fire("Resize",t)},stop:function(){e.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}});function Zr(t){var e="";if(t)for(var n=0;n<t.length;n++)e+='<option value="'+t[n]+'">'+t[n]+"</option>";return e}var Qr=be.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(t){var n=this;n._super(t),n.settings.size&&(n.size=n.settings.size),n.settings.options&&(n._options=n.settings.options),n.on("keydown",function(t){var e;13===t.keyCode&&(t.preventDefault(),n.parents().reverse().each(function(t){if(t.toJSON)return e=t,!1}),n.fire("submit",{data:e.toJSON()}))})},options:function(t){return arguments.length?(this.state.set("options",t),this):this.state.get("options")},renderHtml:function(){var t,e=this,n="";return t=Zr(e._options),e.size&&(n=' size = "'+e.size+'"'),'<select id="'+e._id+'" class="'+e.classes+'"'+n+">"+t+"</select>"},bindStates:function(){var e=this;return e.state.on("change:options",function(t){e.getEl().innerHTML=Zr(t.value)}),e._super()}});function to(t,e,n){return t<e&&(t=e),n<t&&(t=n),t}function eo(t,e,n){t.setAttribute("aria-"+e,n)}function no(t,e){var n,i,r,o,s;"v"===t.settings.orientation?(r="top",i="height",n="h"):(r="left",i="width",n="w"),s=t.getEl("handle"),o=((t.layoutRect()[n]||100)-St.getSize(s)[i])*((e-t._minValue)/(t._maxValue-t._minValue))+"px",s.style[r]=o,s.style.height=t.layoutRect().h+"px",eo(s,"valuenow",e),eo(s,"valuetext",""+t.settings.previewFilter(e)),eo(s,"valuemin",t._minValue),eo(s,"valuemax",t._maxValue)}var io=be.extend({init:function(t){var e=this;t.previewFilter||(t.previewFilter=function(t){return Math.round(100*t)/100}),e._super(t),e.classes.add("slider"),"v"===t.orientation&&e.classes.add("vertical"),e._minValue=yt(t.minValue)?t.minValue:0,e._maxValue=yt(t.maxValue)?t.maxValue:100,e._initValue=e.state.get("value")},renderHtml:function(){var t=this._id,e=this.classPrefix;return'<div id="'+t+'" class="'+this.classes+'"><div id="'+t+'-handle" class="'+e+'slider-handle" role="slider" tabindex="-1"></div></div>'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){var t,e,n,i,r,o,s,a,l,u,c,d,f,h,m=this;t=m._minValue,e=m._maxValue,"v"===m.settings.orientation?(n="screenY",i="top",r="height",o="h"):(n="screenX",i="left",r="width",o="w"),m._super(),function(o,s){function e(t){var e,n,i,r;e=to(e=(((e=m.value())+(r=n=o))/((i=s)-r)+.05*t)*(i-n)-n,o,s),m.value(e),m.fire("dragstart",{value:e}),m.fire("drag",{value:e}),m.fire("dragend",{value:e})}m.on("keydown",function(t){switch(t.keyCode){case 37:case 38:e(-1);break;case 39:case 40:e(1)}})}(t,e),s=t,a=e,l=m.getEl("handle"),m._dragHelper=new Re(m._id,{handle:m._id+"-handle",start:function(t){u=t[n],c=parseInt(m.getEl("handle").style[i],10),d=(m.layoutRect()[o]||100)-St.getSize(l)[r],m.fire("dragstart",{value:h})},drag:function(t){var e=t[n]-u;f=to(c+e,0,d),l.style[i]=f+"px",h=s+f/d*(a-s),m.value(h),m.tooltip().text(""+m.settings.previewFilter(h)).show().moveRel(l,"bc tc"),m.fire("drag",{value:h})},stop:function(){m.tooltip().hide(),m.fire("dragend",{value:h})}})},repaint:function(){this._super(),no(this,this.value())},bindStates:function(){var e=this;return e.state.on("change:value",function(t){no(e,t.value)}),e._super()}}),ro=be.extend({renderHtml:function(){return this.classes.add("spacer"),this.canFocus=!1,'<div id="'+this._id+'" class="'+this.classes+'"></div>'}}),oo=Yr.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var t,e,n=this.getEl(),i=this.layoutRect();return this._super(),t=n.firstChild,e=n.lastChild,Nt(t).css({width:i.w-St.getSize(e).width,height:i.h-2}),Nt(e).css({height:i.h-2}),this},activeMenu:function(t){Nt(this.getEl().lastChild).toggleClass(this.classPrefix+"active",t)},renderHtml:function(){var t,e,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a=n.settings,l="";return(t=a.image)?(o="none","string"!=typeof t&&(t=window.getSelection?t[0]:t[1]),t=" style=\"background-image: url('"+t+"')\""):t="",o=a.icon?r+"ico "+r+"i-"+o:"",s&&(n.classes.add("btn-has-text"),l='<span class="'+r+'txt">'+n.encode(s)+"</span>"),e="boolean"==typeof a.active?' aria-pressed="'+a.active+'"':"",'<div id="'+i+'" class="'+n.classes+'" role="button"'+e+' tabindex="-1"><button type="button" hidefocus="1" tabindex="-1">'+(o?'<i class="'+o+'"'+t+"></i>":"")+l+'</button><button type="button" class="'+r+'open" hidefocus="1" tabindex="-1">'+(n._menuBtnText?(o?"\xa0":"")+n._menuBtnText:"")+' <i class="'+r+'caret"></i></button></div>'},postRender:function(){var n=this.settings.onclick;return this.on("click",function(t){var e=t.target;if(t.control===this)for(;e;){if(t.aria&&"down"!==t.aria.key||"BUTTON"===e.nodeName&&-1===e.className.indexOf("open"))return t.stopImmediatePropagation(),void(n&&n.call(this,t));e=e.parentNode}}),delete this.settings.onclick,this._super()}}),so=ur.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}}),ao=We.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(n){var t;this.activeTabId&&(t=this.getEl(this.activeTabId),Nt(t).removeClass(this.classPrefix+"active"),t.setAttribute("aria-selected","false")),this.activeTabId="t"+n,(t=this.getEl("t"+n)).setAttribute("aria-selected","true"),Nt(t).addClass(this.classPrefix+"active"),this.items()[n].show().fire("showtab"),this.reflow(),this.items().each(function(t,e){n!==e&&t.hide()})},renderHtml:function(){var i=this,t=i._layout,r="",o=i.classPrefix;return i.preRender(),t.preRender(i),i.items().each(function(t,e){var n=i._id+"-t"+e;t.aria("role","tabpanel"),t.aria("labelledby",n),r+='<div id="'+n+'" class="'+o+'tab" unselectable="on" role="tab" aria-controls="'+t._id+'" aria-selected="false" tabIndex="-1">'+i.encode(t.settings.title)+"</div>"}),'<div id="'+i._id+'" class="'+i.classes+'" hidefocus="1" tabindex="-1"><div id="'+i._id+'-head" class="'+o+'tabs" role="tablist">'+r+'</div><div id="'+i._id+'-body" class="'+i.bodyClasses+'">'+t.renderHtml(i)+"</div></div>"},postRender:function(){var i=this;i._super(),i.settings.activeTab=i.settings.activeTab||0,i.activateTab(i.settings.activeTab),this.on("click",function(t){var e=t.target.parentNode;if(e&&e.id===i._id+"-head")for(var n=e.childNodes.length;n--;)e.childNodes[n]===t.target&&i.activateTab(n)})},initLayoutRect:function(){var t,e,n,i=this;e=(e=St.getSize(i.getEl("head")).width)<0?0:e,n=0,i.items().each(function(t){e=Math.max(e,t.layoutRect().minW),n=Math.max(n,t.layoutRect().minH)}),i.items().each(function(t){t.settings.x=0,t.settings.y=0,t.settings.w=e,t.settings.h=n,t.layoutRect({x:0,y:0,w:e,h:n})});var r=St.getSize(i.getEl("head")).height;return i.settings.minWidth=e,i.settings.minHeight=n+r,(t=i._super()).deltaH+=r,t.innerH=t.h-t.deltaH,t}}),lo=be.extend({init:function(t){var n=this;n._super(t),n.classes.add("textbox"),t.multiline?n.classes.add("multiline"):(n.on("keydown",function(t){var e;13===t.keyCode&&(t.preventDefault(),n.parents().reverse().each(function(t){if(t.toJSON)return e=t,!1}),n.fire("submit",{data:e.toJSON()}))}),n.on("keyup",function(t){n.state.set("value",t.target.value)}))},repaint:function(){var t,e,n,i,r,o=this,s=0;t=o.getEl().style,e=o._layoutRect,r=o._lastRepaintRect||{};var a=document;return!o.settings.multiline&&a.all&&(!a.documentMode||a.documentMode<=8)&&(t.lineHeight=e.h-s+"px"),i=(n=o.borderBox).left+n.right+8,s=n.top+n.bottom+(o.settings.multiline?8:0),e.x!==r.x&&(t.left=e.x+"px",r.x=e.x),e.y!==r.y&&(t.top=e.y+"px",r.y=e.y),e.w!==r.w&&(t.width=e.w-i+"px",r.w=e.w),e.h!==r.h&&(t.height=e.h-s+"px",r.h=e.h),o._lastRepaintRect=r,o.fire("repaint",{},!1),o},renderHtml:function(){var e,t,n=this,i=n.settings;return e={id:n._id,hidefocus:"1"},C.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(t){e[t]=i[t]}),n.disabled()&&(e.disabled="disabled"),i.subtype&&(e.type=i.subtype),(t=St.create(i.multiline?"textarea":"input",e)).value=n.state.get("value"),t.className=n.classes.toString(),t.outerHTML},value:function(t){return arguments.length?(this.state.set("value",t),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var e=this;e.getEl().value=e.state.get("value"),e._super(),e.$el.on("change",function(t){e.state.set("value",t.target.value),e.fire("change",t)})},bindStates:function(){var e=this;return e.state.on("change:value",function(t){e.getEl().value!==t.value&&(e.getEl().value=t.value)}),e.state.on("change:disabled",function(t){e.getEl().disabled=t.value}),e._super()},remove:function(){this.$el.off(),this._super()}}),uo=function(){return{Selector:qt,Collection:Xt,ReflowQueue:ee,Control:ce,Factory:Ee,KeyboardNavigation:Te,Container:De,DragHelper:Re,Scrollable:Pe,Panel:We,Movable:pe,Resizable:Ae,FloatPanel:Ve,Window:Je,MessageBox:Ge,Tooltip:ve,Widget:be,Progress:ye,Notification:we,Layout:Nn,AbsoluteLayout:On,Button:Dn,ButtonGroup:Wn,Checkbox:An,ComboBox:Ln,ColorBox:In,PanelButton:zn,ColorButton:Un,ColorPicker:qn,Path:$n,ElementPath:Xn,FormItem:jn,Form:Jn,FieldSet:Gn,FilePicker:sr,FitLayout:ar,FlexLayout:lr,FlowLayout:ur,FormatControls:Lr,GridLayout:Ir,Iframe:zr,InfoBox:Fr,Label:Ur,Toolbar:Vr,MenuBar:qr,MenuButton:Yr,MenuItem:Jr,Throbber:$r,Menu:Xr,ListBox:jr,Radio:Gr,ResizeHandle:Kr,SelectBox:Qr,Slider:io,Spacer:ro,SplitButton:oo,StackLayout:so,TabPanel:ao,TextBox:lo,DropZone:Yn,BrowseButton:Pn}},co=function(n){n.ui?C.each(uo(),function(t,e){n.ui[e]=t}):n.ui=uo()};C.each(uo(),function(t,e){Ee.add(e,t)}),co(window.tinymce?window.tinymce:{}),o.add("inlite",function(t){var e=Sn();return Lr.setup(t),Cn(t,e),Ke(t,e)})}();
\ No newline at end of file
(function () {
+var modern = (function () {
+ 'use strict';
-var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
-
-// Used when there is no 'main' module.
-// The name is probably (hopefully) unique so minification removes for releases.
-var register_3795 = function (id) {
- var module = dem(id);
- var fragments = id.split('.');
- var target = Function('return this;')();
- for (var i = 0; i < fragments.length - 1; ++i) {
- if (target[fragments[i]] === undefined)
- target[fragments[i]] = {};
- target = target[fragments[i]];
- }
- target[fragments[fragments.length - 1]] = module;
-};
-
-var instantiate = function (id) {
- var actual = defs[id];
- var dependencies = actual.deps;
- var definition = actual.defn;
- var len = dependencies.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances[i] = dem(dependencies[i]);
- var defResult = definition.apply(null, instances);
- if (defResult === undefined)
- throw 'module [' + id + '] returned undefined';
- actual.instance = defResult;
-};
-
-var def = function (id, dependencies, definition) {
- if (typeof id !== 'string')
- throw 'module id must be a string';
- else if (dependencies === undefined)
- throw 'no dependencies for ' + id;
- else if (definition === undefined)
- throw 'no definition function for ' + id;
- defs[id] = {
- deps: dependencies,
- defn: definition,
- instance: undefined
- };
-};
-
-var dem = function (id) {
- var actual = defs[id];
- if (actual === undefined)
- throw 'module [' + id + '] was undefined';
- else if (actual.instance === undefined)
- instantiate(id);
- return actual.instance;
-};
-
-var req = function (ids, callback) {
- var len = ids.length;
- var instances = new Array(len);
- for (var i = 0; i < len; ++i)
- instances.push(dem(ids[i]));
- callback.apply(null, callback);
-};
-
-var ephox = {};
-
-ephox.bolt = {
- module: {
- api: {
- define: def,
- require: req,
- demand: dem
- }
- }
-};
-
-var define = def;
-var require = req;
-var demand = dem;
-// this helps with minificiation when using a lot of global references
-var defineGlobal = function (id, ref) {
- define(id, [], function () { return ref; });
-};
-/*jsc
-["tinymce.themes.modern.Theme","global!window","tinymce.core.AddOnManager","tinymce.core.EditorManager","tinymce.core.Env","tinymce.core.ui.Api","tinymce.themes.modern.modes.Iframe","tinymce.themes.modern.modes.Inline","tinymce.themes.modern.ui.ProgressState","tinymce.themes.modern.ui.Resize","global!tinymce.util.Tools.resolve","tinymce.core.dom.DOMUtils","tinymce.core.ui.Factory","tinymce.core.util.Tools","tinymce.themes.modern.ui.A11y","tinymce.themes.modern.ui.Branding","tinymce.themes.modern.ui.ContextToolbars","tinymce.themes.modern.ui.Menubar","tinymce.themes.modern.ui.Sidebar","tinymce.themes.modern.ui.SkinLoaded","tinymce.themes.modern.ui.Toolbar","tinymce.core.ui.FloatPanel","tinymce.core.ui.Throbber","tinymce.core.util.Delay","tinymce.core.geom.Rect"]
-jsc*/
-defineGlobal("global!window", window);
-defineGlobal("global!tinymce.util.Tools.resolve", tinymce.util.Tools.resolve);
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.AddOnManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.AddOnManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.EditorManager',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.EditorManager');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.Env',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.Env');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.ui.Api',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.ui.Api');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.dom.DOMUtils',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.dom.DOMUtils');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.ui.Factory',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.ui.Factory');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Tools',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Tools');
- }
-);
-
-/**
- * A11y.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.ui.A11y',
- [
- ],
- function () {
- var focus = function (panel, type) {
- return function () {
- var item = panel.find(type)[0];
+ var global = tinymce.util.Tools.resolve('tinymce.ThemeManager');
- if (item) {
- item.focus(true);
- }
- };
- };
+ var global$1 = tinymce.util.Tools.resolve('tinymce.EditorManager');
- var addKeys = function (editor, panel) {
- editor.shortcuts.add('Alt+F9', '', focus(panel, 'menubar'));
- editor.shortcuts.add('Alt+F10,F10', '', focus(panel, 'toolbar'));
- editor.shortcuts.add('Alt+F11', '', focus(panel, 'elementpath'));
- panel.on('cancel', function () {
- editor.focus();
- });
- };
+ var global$2 = tinymce.util.Tools.resolve('tinymce.util.Tools');
- return {
- addKeys: addKeys
- };
- }
-);
-
-/**
- * Branding.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.ui.Branding',
- [
- 'tinymce.core.dom.DOMUtils'
- ],
- function (DOMUtils) {
- var DOM = DOMUtils.DOM;
-
- var reposition = function (editor, poweredByElm, hasStatusbar) {
- return function () {
- var iframeWidth = editor.getContentAreaContainer().querySelector('iframe').offsetWidth;
- var scrollbarWidth = Math.max(iframeWidth - editor.getDoc().documentElement.offsetWidth, 0);
+ var isBrandingEnabled = function (editor) {
+ return editor.getParam('branding', true, 'boolean');
+ };
+ var hasMenubar = function (editor) {
+ return getMenubar(editor) !== false;
+ };
+ var getMenubar = function (editor) {
+ return editor.getParam('menubar');
+ };
+ var hasStatusbar = function (editor) {
+ return editor.getParam('statusbar', true, 'boolean');
+ };
+ var getToolbarSize = function (editor) {
+ return editor.getParam('toolbar_items_size');
+ };
+ var isReadOnly = function (editor) {
+ return editor.getParam('readonly', false, 'boolean');
+ };
+ var getFixedToolbarContainer = function (editor) {
+ return editor.getParam('fixed_toolbar_container');
+ };
+ var getInlineToolbarPositionHandler = function (editor) {
+ return editor.getParam('inline_toolbar_position_handler');
+ };
+ var getMenu = function (editor) {
+ return editor.getParam('menu');
+ };
+ var getRemovedMenuItems = function (editor) {
+ return editor.getParam('removed_menuitems', '');
+ };
+ var getMinWidth = function (editor) {
+ return editor.getParam('min_width', 100, 'number');
+ };
+ var getMinHeight = function (editor) {
+ return editor.getParam('min_height', 100, 'number');
+ };
+ var getMaxWidth = function (editor) {
+ return editor.getParam('max_width', 65535, 'number');
+ };
+ var getMaxHeight = function (editor) {
+ return editor.getParam('max_height', 65535, 'number');
+ };
+ var isSkinDisabled = function (editor) {
+ return editor.settings.skin === false;
+ };
+ var isInline = function (editor) {
+ return editor.getParam('inline', false, 'boolean');
+ };
+ var getResize = function (editor) {
+ var resize = editor.getParam('resize', 'vertical');
+ if (resize === false) {
+ return 'none';
+ } else if (resize === 'both') {
+ return 'both';
+ } else {
+ return 'vertical';
+ }
+ };
+ var getSkinUrl = function (editor) {
+ var settings = editor.settings;
+ var skin = settings.skin;
+ var skinUrl = settings.skin_url;
+ if (skin !== false) {
+ var skinName = skin ? skin : 'lightgray';
+ if (skinUrl) {
+ skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);
+ } else {
+ skinUrl = global$1.baseURL + '/skins/' + skinName;
+ }
+ }
+ return skinUrl;
+ };
+ var getIndexedToolbars = function (settings, defaultToolbar) {
+ var toolbars = [];
+ for (var i = 1; i < 10; i++) {
+ var toolbar = settings['toolbar' + i];
+ if (!toolbar) {
+ break;
+ }
+ toolbars.push(toolbar);
+ }
+ var mainToolbar = settings.toolbar ? [settings.toolbar] : [defaultToolbar];
+ return toolbars.length > 0 ? toolbars : mainToolbar;
+ };
+ var getToolbars = function (editor) {
+ var toolbar = editor.getParam('toolbar');
+ var defaultToolbar = 'undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image';
+ if (toolbar === false) {
+ return [];
+ } else if (global$2.isArray(toolbar)) {
+ return global$2.grep(toolbar, function (toolbar) {
+ return toolbar.length > 0;
+ });
+ } else {
+ return getIndexedToolbars(editor.settings, defaultToolbar);
+ }
+ };
- DOM.setStyle(poweredByElm, 'right', scrollbarWidth + 'px');
- if (hasStatusbar) {
- DOM.setStyle(poweredByElm, 'top', '-16px');
- } else {
- DOM.setStyle(poweredByElm, 'bottom', '1px');
- }
- };
- };
+ var global$3 = tinymce.util.Tools.resolve('tinymce.dom.DOMUtils');
- var hide = function (poweredByElm) {
- return function () {
- DOM.hide(poweredByElm);
- };
- };
+ var global$4 = tinymce.util.Tools.resolve('tinymce.ui.Factory');
- var setupReposition = function (editor, poweredByElm, hasStatusbar) {
- reposition(editor, poweredByElm, hasStatusbar)();
- editor.on('NodeChange ResizeEditor', reposition(editor, poweredByElm, hasStatusbar));
- };
+ var global$5 = tinymce.util.Tools.resolve('tinymce.util.I18n');
- var appendToStatusbar = function (editor, poweredByElm, statusbarElm) {
- statusbarElm.appendChild(poweredByElm);
- setupReposition(editor, poweredByElm, true);
- };
+ var fireSkinLoaded = function (editor) {
+ return editor.fire('SkinLoaded');
+ };
+ var fireResizeEditor = function (editor) {
+ return editor.fire('ResizeEditor');
+ };
+ var fireBeforeRenderUI = function (editor) {
+ return editor.fire('BeforeRenderUI');
+ };
+ var $_5hpmustzjjgwefnb = {
+ fireSkinLoaded: fireSkinLoaded,
+ fireResizeEditor: fireResizeEditor,
+ fireBeforeRenderUI: fireBeforeRenderUI
+ };
- var appendToContainer = function (editor, poweredByElm) {
- editor.getContainer().appendChild(poweredByElm);
- setupReposition(editor, poweredByElm, false);
+ var focus = function (panel, type) {
+ return function () {
+ var item = panel.find(type)[0];
+ if (item) {
+ item.focus(true);
+ }
};
+ };
+ var addKeys = function (editor, panel) {
+ editor.shortcuts.add('Alt+F9', '', focus(panel, 'menubar'));
+ editor.shortcuts.add('Alt+F10,F10', '', focus(panel, 'toolbar'));
+ editor.shortcuts.add('Alt+F11', '', focus(panel, 'elementpath'));
+ panel.on('cancel', function () {
+ editor.focus();
+ });
+ };
+ var $_azwbz4u0jjgwefnc = { addKeys: addKeys };
- var setupEventListeners = function (editor) {
- editor.on('SkinLoaded', function () {
- var poweredByElm = DOM.create('div', { 'class': 'mce-branding-powered-by' });
- var statusbarElm = editor.getContainer().querySelector('.mce-statusbar');
+ var global$6 = tinymce.util.Tools.resolve('tinymce.geom.Rect');
- if (statusbarElm) {
- appendToStatusbar(editor, poweredByElm, statusbarElm);
- } else {
- appendToContainer(editor, poweredByElm);
- }
+ var global$7 = tinymce.util.Tools.resolve('tinymce.util.Delay');
- DOM.bind(poweredByElm, 'click', hide(poweredByElm));
- });
- };
+ var noop = function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
+ }
+ };
- var setup = function (editor) {
- if (editor.settings.branding !== false) {
- setupEventListeners(editor);
+ var compose = function (fa, fb) {
+ return function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
}
+ return fa(fb.apply(null, arguments));
};
-
- return {
- setup: setup
+ };
+ var constant = function (value) {
+ return function () {
+ return value;
};
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.util.Delay',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.util.Delay');
- }
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.geom.Rect',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.geom.Rect');
- }
-);
-
-/**
- * Toolbar.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.ui.Toolbar',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.ui.Factory'
- ],
- function (Tools, Factory) {
- var defaultToolbar = "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | " +
- "bullist numlist outdent indent | link image";
-
- var createToolbar = function (editor, items, size) {
- var toolbarItems = [], buttonGroup;
-
- if (!items) {
- return;
- }
-
- Tools.each(items.split(/[ ,]/), function (item) {
- var itemName;
-
- var bindSelectorChanged = function () {
- var selection = editor.selection;
-
- if (item.settings.stateSelector) {
- selection.selectorChanged(item.settings.stateSelector, function (state) {
- item.active(state);
- }, true);
- }
-
- if (item.settings.disabledStateSelector) {
- selection.selectorChanged(item.settings.disabledStateSelector, function (state) {
- item.disabled(state);
- });
- }
- };
+ };
- if (item == "|") {
- buttonGroup = null;
- } else {
- if (!buttonGroup) {
- buttonGroup = { type: 'buttongroup', items: [] };
- toolbarItems.push(buttonGroup);
- }
- if (editor.buttons[item]) {
- // TODO: Move control creation to some UI class
- itemName = item;
- item = editor.buttons[itemName];
+ var curry = function (f) {
+ var x = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ x[_i - 1] = arguments[_i];
+ }
+ var args = new Array(arguments.length - 1);
+ for (var i = 1; i < arguments.length; i++)
+ args[i - 1] = arguments[i];
+ return function () {
+ var x = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ x[_i] = arguments[_i];
+ }
+ var newArgs = new Array(arguments.length);
+ for (var j = 0; j < newArgs.length; j++)
+ newArgs[j] = arguments[j];
+ var all = args.concat(newArgs);
+ return f.apply(null, all);
+ };
+ };
- if (typeof item == "function") {
- item = item();
- }
- item.type = item.type || 'button';
- item.size = size;
- item = Factory.create(item);
- buttonGroup.items.push(item);
- if (editor.initialized) {
- bindSelectorChanged();
- } else {
- editor.on('init', bindSelectorChanged);
- }
- }
- }
- });
+ var never = constant(false);
+ var always = constant(true);
- return {
- type: 'toolbar',
- layout: 'flow',
- items: toolbarItems
- };
+ var never$1 = never;
+ var always$1 = always;
+ var none = function () {
+ return NONE;
+ };
+ var NONE = function () {
+ var eq = function (o) {
+ return o.isNone();
+ };
+ var call$$1 = function (thunk) {
+ return thunk();
+ };
+ var id = function (n) {
+ return n;
+ };
+ var noop$$1 = function () {
};
+ var nul = function () {
+ return null;
+ };
+ var undef = function () {
+ return undefined;
+ };
+ var me = {
+ fold: function (n, s) {
+ return n();
+ },
+ is: never$1,
+ isSome: never$1,
+ isNone: always$1,
+ getOr: id,
+ getOrThunk: call$$1,
+ getOrDie: function (msg) {
+ throw new Error(msg || 'error: getOrDie called on none.');
+ },
+ getOrNull: nul,
+ getOrUndefined: undef,
+ or: id,
+ orThunk: call$$1,
+ map: none,
+ ap: none,
+ each: noop$$1,
+ bind: none,
+ flatten: none,
+ exists: never$1,
+ forall: always$1,
+ filter: none,
+ equals: eq,
+ equals_: eq,
+ toArray: function () {
+ return [];
+ },
+ toString: constant('none()')
+ };
+ if (Object.freeze)
+ Object.freeze(me);
+ return me;
+ }();
+ var some = function (a) {
+ var constant_a = function () {
+ return a;
+ };
+ var self = function () {
+ return me;
+ };
+ var map = function (f) {
+ return some(f(a));
+ };
+ var bind = function (f) {
+ return f(a);
+ };
+ var me = {
+ fold: function (n, s) {
+ return s(a);
+ },
+ is: function (v) {
+ return a === v;
+ },
+ isSome: always$1,
+ isNone: never$1,
+ getOr: constant_a,
+ getOrThunk: constant_a,
+ getOrDie: constant_a,
+ getOrNull: constant_a,
+ getOrUndefined: constant_a,
+ or: self,
+ orThunk: self,
+ map: map,
+ ap: function (optfab) {
+ return optfab.fold(none, function (fab) {
+ return some(fab(a));
+ });
+ },
+ each: function (f) {
+ f(a);
+ },
+ bind: bind,
+ flatten: constant_a,
+ exists: bind,
+ forall: bind,
+ filter: function (f) {
+ return f(a) ? me : NONE;
+ },
+ equals: function (o) {
+ return o.is(a);
+ },
+ equals_: function (o, elementEq) {
+ return o.fold(never$1, function (b) {
+ return elementEq(a, b);
+ });
+ },
+ toArray: function () {
+ return [a];
+ },
+ toString: function () {
+ return 'some(' + a + ')';
+ }
+ };
+ return me;
+ };
+ var from = function (value) {
+ return value === null || value === undefined ? NONE : some(value);
+ };
+ var Option = {
+ some: some,
+ none: none,
+ from: from
+ };
- /**
- * Creates the toolbars from config and returns a toolbar array.
- *
- * @param {String} size Optional toolbar item size.
- * @return {Array} Array with toolbars.
- */
- var createToolbars = function (editor, size) {
- var toolbars = [], settings = editor.settings;
+ var getUiContainerDelta = function (ctrl) {
+ var uiContainer = getUiContainer(ctrl);
+ if (uiContainer && global$3.DOM.getStyle(uiContainer, 'position', true) !== 'static') {
+ var containerPos = global$3.DOM.getPos(uiContainer);
+ var dx = uiContainer.scrollLeft - containerPos.x;
+ var dy = uiContainer.scrollTop - containerPos.y;
+ return Option.some({
+ x: dx,
+ y: dy
+ });
+ } else {
+ return Option.none();
+ }
+ };
+ var setUiContainer = function (editor, ctrl) {
+ var uiContainer = global$3.DOM.select(editor.settings.ui_container)[0];
+ ctrl.getRoot().uiContainer = uiContainer;
+ };
+ var getUiContainer = function (ctrl) {
+ return ctrl ? ctrl.getRoot().uiContainer : null;
+ };
+ var inheritUiContainer = function (fromCtrl, toCtrl) {
+ return toCtrl.uiContainer = getUiContainer(fromCtrl);
+ };
+ var $_6344qfu4jjgwefnr = {
+ getUiContainerDelta: getUiContainerDelta,
+ setUiContainer: setUiContainer,
+ getUiContainer: getUiContainer,
+ inheritUiContainer: inheritUiContainer
+ };
- var addToolbar = function (items) {
- if (items) {
- toolbars.push(createToolbar(editor, items, size));
- return true;
+ var createToolbar = function (editor, items, size) {
+ var toolbarItems = [];
+ var buttonGroup;
+ if (!items) {
+ return;
+ }
+ global$2.each(items.split(/[ ,]/), function (item) {
+ var itemName;
+ var bindSelectorChanged = function () {
+ var selection = editor.selection;
+ if (item.settings.stateSelector) {
+ selection.selectorChanged(item.settings.stateSelector, function (state) {
+ item.active(state);
+ }, true);
+ }
+ if (item.settings.disabledStateSelector) {
+ selection.selectorChanged(item.settings.disabledStateSelector, function (state) {
+ item.disabled(state);
+ });
}
};
-
- // Convert toolbar array to multiple options
- if (Tools.isArray(settings.toolbar)) {
- // Empty toolbar array is the same as a disabled toolbar
- if (settings.toolbar.length === 0) {
- return;
+ if (item === '|') {
+ buttonGroup = null;
+ } else {
+ if (!buttonGroup) {
+ buttonGroup = {
+ type: 'buttongroup',
+ items: []
+ };
+ toolbarItems.push(buttonGroup);
}
-
- Tools.each(settings.toolbar, function (toolbar, i) {
- settings["toolbar" + (i + 1)] = toolbar;
- });
-
- delete settings.toolbar;
- }
-
- // Generate toolbar<n>
- for (var i = 1; i < 10; i++) {
- if (!addToolbar(settings["toolbar" + i])) {
- break;
+ if (editor.buttons[item]) {
+ itemName = item;
+ item = editor.buttons[itemName];
+ if (typeof item === 'function') {
+ item = item();
+ }
+ item.type = item.type || 'button';
+ item.size = size;
+ item = global$4.create(item);
+ buttonGroup.items.push(item);
+ if (editor.initialized) {
+ bindSelectorChanged();
+ } else {
+ editor.on('init', bindSelectorChanged);
+ }
}
}
-
- // Generate toolbar or default toolbar unless it's disabled
- if (!toolbars.length && settings.toolbar !== false) {
- addToolbar(settings.toolbar || defaultToolbar);
- }
-
- if (toolbars.length) {
- return {
- type: 'panel',
- layout: 'stack',
- classes: "toolbar-grp",
- ariaRoot: true,
- ariaRemember: true,
- items: toolbars
- };
+ });
+ return {
+ type: 'toolbar',
+ layout: 'flow',
+ items: toolbarItems
+ };
+ };
+ var createToolbars = function (editor, size) {
+ var toolbars = [];
+ var addToolbar = function (items) {
+ if (items) {
+ toolbars.push(createToolbar(editor, items, size));
}
};
+ global$2.each(getToolbars(editor), function (toolbar) {
+ addToolbar(toolbar);
+ });
+ if (toolbars.length) {
+ return {
+ type: 'panel',
+ layout: 'stack',
+ classes: 'toolbar-grp',
+ ariaRoot: true,
+ ariaRemember: true,
+ items: toolbars
+ };
+ }
+ };
+ var $_4udolhu7jjgwefo1 = {
+ createToolbar: createToolbar,
+ createToolbars: createToolbars
+ };
+ var DOM = global$3.DOM;
+ var toClientRect = function (geomRect) {
return {
- createToolbar: createToolbar,
- createToolbars: createToolbars
+ left: geomRect.x,
+ top: geomRect.y,
+ width: geomRect.w,
+ height: geomRect.h,
+ right: geomRect.x + geomRect.w,
+ bottom: geomRect.y + geomRect.h
};
- }
-);
-
-/**
- * ContextToolbars.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.ui.ContextToolbars',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.core.util.Tools',
- 'tinymce.core.util.Delay',
- 'tinymce.core.ui.Factory',
- 'tinymce.core.geom.Rect',
- 'tinymce.themes.modern.ui.Toolbar'
- ],
- function (DOMUtils, Tools, Delay, Factory, Rect, Toolbar) {
- var DOM = DOMUtils.DOM;
-
- var toClientRect = function (geomRect) {
- return {
- left: geomRect.x,
- top: geomRect.y,
- width: geomRect.w,
- height: geomRect.h,
- right: geomRect.x + geomRect.w,
- bottom: geomRect.y + geomRect.h
+ };
+ var hideAllFloatingPanels = function (editor) {
+ global$2.each(editor.contextToolbars, function (toolbar) {
+ if (toolbar.panel) {
+ toolbar.panel.hide();
+ }
+ });
+ };
+ var movePanelTo = function (panel, pos) {
+ panel.moveTo(pos.left, pos.top);
+ };
+ var togglePositionClass = function (panel, relPos, predicate) {
+ relPos = relPos ? relPos.substr(0, 2) : '';
+ global$2.each({
+ t: 'down',
+ b: 'up'
+ }, function (cls, pos) {
+ panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1)));
+ });
+ global$2.each({
+ l: 'left',
+ r: 'right'
+ }, function (cls, pos) {
+ panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1)));
+ });
+ };
+ var userConstrain = function (handler, x, y, elementRect, contentAreaRect, panelRect) {
+ panelRect = toClientRect({
+ x: x,
+ y: y,
+ w: panelRect.w,
+ h: panelRect.h
+ });
+ if (handler) {
+ panelRect = handler({
+ elementRect: toClientRect(elementRect),
+ contentAreaRect: toClientRect(contentAreaRect),
+ panelRect: panelRect
+ });
+ }
+ return panelRect;
+ };
+ var addContextualToolbars = function (editor) {
+ var scrollContainer;
+ var getContextToolbars = function () {
+ return editor.contextToolbars || [];
+ };
+ var getElementRect = function (elm) {
+ var pos, targetRect, root;
+ pos = DOM.getPos(editor.getContentAreaContainer());
+ targetRect = editor.dom.getRect(elm);
+ root = editor.dom.getRoot();
+ if (root.nodeName === 'BODY') {
+ targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;
+ targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;
+ }
+ targetRect.x += pos.x;
+ targetRect.y += pos.y;
+ return targetRect;
+ };
+ var reposition = function (match, shouldShow) {
+ var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold;
+ var handler = getInlineToolbarPositionHandler(editor);
+ if (editor.removed) {
+ return;
+ }
+ if (!match || !match.toolbar.panel) {
+ hideAllFloatingPanels(editor);
+ return;
+ }
+ testPositions = [
+ 'bc-tc',
+ 'tc-bc',
+ 'tl-bl',
+ 'bl-tl',
+ 'tr-br',
+ 'br-tr'
+ ];
+ panel = match.toolbar.panel;
+ if (shouldShow) {
+ panel.show();
+ }
+ elementRect = getElementRect(match.element);
+ panelRect = DOM.getRect(panel.getEl());
+ contentAreaRect = DOM.getRect(editor.getContentAreaContainer() || editor.getBody());
+ var delta = $_6344qfu4jjgwefnr.getUiContainerDelta(panel).getOr({
+ x: 0,
+ y: 0
+ });
+ elementRect.x += delta.x;
+ elementRect.y += delta.y;
+ panelRect.x += delta.x;
+ panelRect.y += delta.y;
+ contentAreaRect.x += delta.x;
+ contentAreaRect.y += delta.y;
+ smallElementWidthThreshold = 25;
+ if (DOM.getStyle(match.element, 'display', true) !== 'inline') {
+ var clientRect = match.element.getBoundingClientRect();
+ elementRect.w = clientRect.width;
+ elementRect.h = clientRect.height;
+ }
+ if (!editor.inline) {
+ contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;
+ }
+ if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) {
+ elementRect = global$6.inflate(elementRect, 0, 8);
+ }
+ relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);
+ elementRect = global$6.clamp(elementRect, contentAreaRect);
+ if (relPos) {
+ relRect = global$6.relativePosition(panelRect, elementRect, relPos);
+ movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));
+ } else {
+ contentAreaRect.h += panelRect.h;
+ elementRect = global$6.intersect(contentAreaRect, elementRect);
+ if (elementRect) {
+ relPos = global$6.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [
+ 'bc-tc',
+ 'bl-tl',
+ 'br-tr'
+ ]);
+ if (relPos) {
+ relRect = global$6.relativePosition(panelRect, elementRect, relPos);
+ movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));
+ } else {
+ movePanelTo(panel, userConstrain(handler, elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect));
+ }
+ } else {
+ panel.hide();
+ }
+ }
+ togglePositionClass(panel, relPos, function (pos1, pos2) {
+ return pos1 === pos2;
+ });
+ };
+ var repositionHandler = function (show) {
+ return function () {
+ var execute = function () {
+ if (editor.selection) {
+ reposition(findFrontMostMatch(editor.selection.getNode()), show);
+ }
+ };
+ global$7.requestAnimationFrame(execute);
};
};
-
- var hideAllFloatingPanels = function (editor) {
- Tools.each(editor.contextToolbars, function (toolbar) {
+ var bindScrollEvent = function (panel) {
+ if (!scrollContainer) {
+ var reposition_1 = repositionHandler(true);
+ var uiContainer_1 = $_6344qfu4jjgwefnr.getUiContainer(panel);
+ scrollContainer = editor.selection.getScrollContainer() || editor.getWin();
+ DOM.bind(scrollContainer, 'scroll', reposition_1);
+ DOM.bind(uiContainer_1, 'scroll', reposition_1);
+ editor.on('remove', function () {
+ DOM.unbind(scrollContainer, 'scroll', reposition_1);
+ DOM.unbind(uiContainer_1, 'scroll', reposition_1);
+ });
+ }
+ };
+ var showContextToolbar = function (match) {
+ var panel;
+ if (match.toolbar.panel) {
+ match.toolbar.panel.show();
+ reposition(match);
+ return;
+ }
+ panel = global$4.create({
+ type: 'floatpanel',
+ role: 'dialog',
+ classes: 'tinymce tinymce-inline arrow',
+ ariaLabel: 'Inline toolbar',
+ layout: 'flex',
+ direction: 'column',
+ align: 'stretch',
+ autohide: false,
+ autofix: true,
+ fixed: true,
+ border: 1,
+ items: $_4udolhu7jjgwefo1.createToolbar(editor, match.toolbar.items),
+ oncancel: function () {
+ editor.focus();
+ }
+ });
+ $_6344qfu4jjgwefnr.setUiContainer(editor, panel);
+ bindScrollEvent(panel);
+ match.toolbar.panel = panel;
+ panel.renderTo().reflow();
+ reposition(match);
+ };
+ var hideAllContextToolbars = function () {
+ global$2.each(getContextToolbars(), function (toolbar) {
if (toolbar.panel) {
toolbar.panel.hide();
}
});
};
-
- var movePanelTo = function (panel, pos) {
- panel.moveTo(pos.left, pos.top);
+ var findFrontMostMatch = function (targetElm) {
+ var i, y, parentsAndSelf;
+ var toolbars = getContextToolbars();
+ parentsAndSelf = editor.$(targetElm).parents().add(targetElm);
+ for (i = parentsAndSelf.length - 1; i >= 0; i--) {
+ for (y = toolbars.length - 1; y >= 0; y--) {
+ if (toolbars[y].predicate(parentsAndSelf[i])) {
+ return {
+ toolbar: toolbars[y],
+ element: parentsAndSelf[i]
+ };
+ }
+ }
+ }
+ return null;
};
-
- var togglePositionClass = function (panel, relPos, predicate) {
- relPos = relPos ? relPos.substr(0, 2) : '';
-
- Tools.each({
- t: 'down',
- b: 'up'
- }, function (cls, pos) {
- panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(0, 1)));
+ editor.on('click keyup setContent ObjectResized', function (e) {
+ if (e.type === 'setcontent' && !e.selection) {
+ return;
+ }
+ global$7.setEditorTimeout(editor, function () {
+ var match;
+ match = findFrontMostMatch(editor.selection.getNode());
+ if (match) {
+ hideAllContextToolbars();
+ showContextToolbar(match);
+ } else {
+ hideAllContextToolbars();
+ }
});
-
- Tools.each({
- l: 'left',
- r: 'right'
- }, function (cls, pos) {
- panel.classes.toggle('arrow-' + cls, predicate(pos, relPos.substr(1, 1)));
+ });
+ editor.on('blur hide contextmenu', hideAllContextToolbars);
+ editor.on('ObjectResizeStart', function () {
+ var match = findFrontMostMatch(editor.selection.getNode());
+ if (match && match.toolbar.panel) {
+ match.toolbar.panel.hide();
+ }
+ });
+ editor.on('ResizeEditor ResizeWindow', repositionHandler(true));
+ editor.on('nodeChange', repositionHandler(false));
+ editor.on('remove', function () {
+ global$2.each(getContextToolbars(), function (toolbar) {
+ if (toolbar.panel) {
+ toolbar.panel.remove();
+ }
});
+ editor.contextToolbars = {};
+ });
+ editor.shortcuts.add('ctrl+shift+e > ctrl+shift+p', '', function () {
+ var match = findFrontMostMatch(editor.selection.getNode());
+ if (match && match.toolbar.panel) {
+ match.toolbar.panel.items()[0].focus();
+ }
+ });
+ };
+ var $_g1gegqu1jjgwefne = { addContextualToolbars: addContextualToolbars };
+
+ var typeOf = function (x) {
+ if (x === null)
+ return 'null';
+ var t = typeof x;
+ if (t === 'object' && Array.prototype.isPrototypeOf(x))
+ return 'array';
+ if (t === 'object' && String.prototype.isPrototypeOf(x))
+ return 'string';
+ return t;
+ };
+ var isType = function (type) {
+ return function (value) {
+ return typeOf(value) === type;
};
+ };
- var userConstrain = function (handler, x, y, elementRect, contentAreaRect, panelRect) {
- panelRect = toClientRect({ x: x, y: y, w: panelRect.w, h: panelRect.h });
- if (handler) {
- panelRect = handler({
- elementRect: toClientRect(elementRect),
- contentAreaRect: toClientRect(contentAreaRect),
- panelRect: panelRect
- });
- }
- return panelRect;
- };
- var addContextualToolbars = function (editor) {
- var scrollContainer, settings = editor.settings;
- var getContextToolbars = function () {
- return editor.contextToolbars || [];
- };
- var getElementRect = function (elm) {
- var pos, targetRect, root;
+ var isFunction = isType('function');
+ var isNumber = isType('number');
- pos = DOM.getPos(editor.getContentAreaContainer());
- targetRect = editor.dom.getRect(elm);
- root = editor.dom.getRoot();
+ var rawIndexOf = function () {
+ var pIndexOf = Array.prototype.indexOf;
+ var fastIndex = function (xs, x) {
+ return pIndexOf.call(xs, x);
+ };
+ var slowIndex = function (xs, x) {
+ return slowIndexOf(xs, x);
+ };
+ return pIndexOf === undefined ? slowIndex : fastIndex;
+ }();
+ var indexOf = function (xs, x) {
+ var r = rawIndexOf(xs, x);
+ return r === -1 ? Option.none() : Option.some(r);
+ };
- // Adjust targetPos for scrolling in the editor
- if (root.nodeName === 'BODY') {
- targetRect.x -= root.ownerDocument.documentElement.scrollLeft || root.scrollLeft;
- targetRect.y -= root.ownerDocument.documentElement.scrollTop || root.scrollTop;
- }
+ var exists = function (xs, pred) {
+ return findIndex(xs, pred).isSome();
+ };
- targetRect.x += pos.x;
- targetRect.y += pos.y;
- return targetRect;
- };
+ var map = function (xs, f) {
+ var len = xs.length;
+ var r = new Array(len);
+ for (var i = 0; i < len; i++) {
+ var x = xs[i];
+ r[i] = f(x, i, xs);
+ }
+ return r;
+ };
+ var each = function (xs, f) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ f(x, i, xs);
+ }
+ };
- var reposition = function (match, shouldShow) {
- var relPos, panelRect, elementRect, contentAreaRect, panel, relRect, testPositions, smallElementWidthThreshold;
- var handler = settings.inline_toolbar_position_handler;
- if (editor.removed) {
- return;
- }
+ var filter = function (xs, pred) {
+ var r = [];
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ r.push(x);
+ }
+ }
+ return r;
+ };
- if (!match || !match.toolbar.panel) {
- hideAllFloatingPanels(editor);
- return;
- }
- testPositions = [
- 'bc-tc', 'tc-bc',
- 'tl-bl', 'bl-tl',
- 'tr-br', 'br-tr'
- ];
+ var foldl = function (xs, f, acc) {
+ each(xs, function (x) {
+ acc = f(acc, x);
+ });
+ return acc;
+ };
+ var find = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ return Option.some(x);
+ }
+ }
+ return Option.none();
+ };
+ var findIndex = function (xs, pred) {
+ for (var i = 0, len = xs.length; i < len; i++) {
+ var x = xs[i];
+ if (pred(x, i, xs)) {
+ return Option.some(i);
+ }
+ }
+ return Option.none();
+ };
+ var slowIndexOf = function (xs, x) {
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ if (xs[i] === x) {
+ return i;
+ }
+ }
+ return -1;
+ };
+ var push = Array.prototype.push;
+ var flatten = function (xs) {
+ var r = [];
+ for (var i = 0, len = xs.length; i < len; ++i) {
+ if (!Array.prototype.isPrototypeOf(xs[i]))
+ throw new Error('Arr.flatten item ' + i + ' was not an array, input: ' + xs);
+ push.apply(r, xs[i]);
+ }
+ return r;
+ };
- panel = match.toolbar.panel;
- // Only show the panel on some events not for example nodeChange since that fires when context menu is opened
- if (shouldShow) {
- panel.show();
- }
- elementRect = getElementRect(match.element);
- panelRect = DOM.getRect(panel.getEl());
- contentAreaRect = DOM.getRect(editor.getContentAreaContainer() || editor.getBody());
- smallElementWidthThreshold = 25;
+ var slice = Array.prototype.slice;
+ var reverse = function (xs) {
+ var r = slice.call(xs, 0);
+ r.reverse();
+ return r;
+ };
- if (DOM.getStyle(match.element, 'display', true) !== 'inline') {
- // We need to use these instead of the rect values since the style
- // size properites might not be the same as the real size for a table
- elementRect.w = match.element.clientWidth;
- elementRect.h = match.element.clientHeight;
- }
- if (!editor.inline) {
- contentAreaRect.w = editor.getDoc().documentElement.offsetWidth;
- }
- // Inflate the elementRect so it doesn't get placed above resize handles
- if (editor.selection.controlSelection.isResizable(match.element) && elementRect.w < smallElementWidthThreshold) {
- elementRect = Rect.inflate(elementRect, 0, 8);
- }
- relPos = Rect.findBestRelativePosition(panelRect, elementRect, contentAreaRect, testPositions);
- elementRect = Rect.clamp(elementRect, contentAreaRect);
- if (relPos) {
- relRect = Rect.relativePosition(panelRect, elementRect, relPos);
- movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));
- } else {
- // Allow overflow below the editor to avoid placing toolbars ontop of tables
- contentAreaRect.h += panelRect.h;
- elementRect = Rect.intersect(contentAreaRect, elementRect);
- if (elementRect) {
- relPos = Rect.findBestRelativePosition(panelRect, elementRect, contentAreaRect, [
- 'bc-tc', 'bl-tl', 'br-tr'
- ]);
+ var from$1 = isFunction(Array.from) ? Array.from : function (x) {
+ return slice.call(x);
+ };
- if (relPos) {
- relRect = Rect.relativePosition(panelRect, elementRect, relPos);
- movePanelTo(panel, userConstrain(handler, relRect.x, relRect.y, elementRect, contentAreaRect, panelRect));
- } else {
- movePanelTo(panel, userConstrain(handler, elementRect.x, elementRect.y, elementRect, contentAreaRect, panelRect));
- }
- } else {
- panel.hide();
- }
+ var defaultMenus = {
+ file: {
+ title: 'File',
+ items: 'newdocument restoredraft | preview | print'
+ },
+ edit: {
+ title: 'Edit',
+ items: 'undo redo | cut copy paste pastetext | selectall'
+ },
+ view: {
+ title: 'View',
+ items: 'code | visualaid visualchars visualblocks | spellchecker | preview fullscreen'
+ },
+ insert: {
+ title: 'Insert',
+ items: 'image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime'
+ },
+ format: {
+ title: 'Format',
+ items: 'bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat'
+ },
+ tools: {
+ title: 'Tools',
+ items: 'spellchecker spellcheckerlanguage | a11ycheck code'
+ },
+ table: { title: 'Table' },
+ help: { title: 'Help' }
+ };
+ var delimiterMenuNamePair = function () {
+ return {
+ name: '|',
+ item: { text: '|' }
+ };
+ };
+ var createMenuNameItemPair = function (name, item) {
+ var menuItem = item ? {
+ name: name,
+ item: item
+ } : null;
+ return name === '|' ? delimiterMenuNamePair() : menuItem;
+ };
+ var hasItemName = function (namedMenuItems, name) {
+ return findIndex(namedMenuItems, function (namedMenuItem) {
+ return namedMenuItem.name === name;
+ }).isSome();
+ };
+ var isSeparator = function (namedMenuItem) {
+ return namedMenuItem && namedMenuItem.item.text === '|';
+ };
+ var cleanupMenu = function (namedMenuItems, removedMenuItems) {
+ var menuItemsPass1 = filter(namedMenuItems, function (namedMenuItem) {
+ return removedMenuItems.hasOwnProperty(namedMenuItem.name) === false;
+ });
+ var menuItemsPass2 = filter(menuItemsPass1, function (namedMenuItem, i, namedMenuItems) {
+ return !isSeparator(namedMenuItem) || !isSeparator(namedMenuItems[i - 1]);
+ });
+ return filter(menuItemsPass2, function (namedMenuItem, i, namedMenuItems) {
+ return !isSeparator(namedMenuItem) || i > 0 && i < namedMenuItems.length - 1;
+ });
+ };
+ var createMenu = function (editorMenuItems, menus, removedMenuItems, context) {
+ var menuButton, menu, namedMenuItems, isUserDefined;
+ if (menus) {
+ menu = menus[context];
+ isUserDefined = true;
+ } else {
+ menu = defaultMenus[context];
+ }
+ if (menu) {
+ menuButton = { text: menu.title };
+ namedMenuItems = [];
+ global$2.each((menu.items || '').split(/[ ,]/), function (name) {
+ var namedMenuItem = createMenuNameItemPair(name, editorMenuItems[name]);
+ if (namedMenuItem) {
+ namedMenuItems.push(namedMenuItem);
}
-
- togglePositionClass(panel, relPos, function (pos1, pos2) {
- return pos1 === pos2;
- });
-
- //drawRect(contentAreaRect, 'blue');
- //drawRect(elementRect, 'red');
- //drawRect(panelRect, 'green');
- };
-
- var repositionHandler = function (show) {
- return function () {
- var execute = function () {
- if (editor.selection) {
- reposition(findFrontMostMatch(editor.selection.getNode()), show);
+ });
+ if (!isUserDefined) {
+ global$2.each(editorMenuItems, function (item, name) {
+ if (item.context === context && !hasItemName(namedMenuItems, name)) {
+ if (item.separator === 'before') {
+ namedMenuItems.push(delimiterMenuNamePair());
}
- };
-
- Delay.requestAnimationFrame(execute);
- };
- };
-
- var bindScrollEvent = function () {
- if (!scrollContainer) {
- scrollContainer = editor.selection.getScrollContainer() || editor.getWin();
- DOM.bind(scrollContainer, 'scroll', repositionHandler(true));
-
- editor.on('remove', function () {
- DOM.unbind(scrollContainer, 'scroll');
- });
- }
- };
-
- var showContextToolbar = function (match) {
- var panel;
-
- if (match.toolbar.panel) {
- match.toolbar.panel.show();
- reposition(match);
- return;
- }
-
- bindScrollEvent();
-
- panel = Factory.create({
- type: 'floatpanel',
- role: 'dialog',
- classes: 'tinymce tinymce-inline arrow',
- ariaLabel: 'Inline toolbar',
- layout: 'flex',
- direction: 'column',
- align: 'stretch',
- autohide: false,
- autofix: true,
- fixed: true,
- border: 1,
- items: Toolbar.createToolbar(editor, match.toolbar.items),
- oncancel: function () {
- editor.focus();
- }
- });
-
- match.toolbar.panel = panel;
- panel.renderTo(document.body).reflow();
- reposition(match);
- };
-
- var hideAllContextToolbars = function () {
- Tools.each(getContextToolbars(), function (toolbar) {
- if (toolbar.panel) {
- toolbar.panel.hide();
- }
- });
- };
-
- var findFrontMostMatch = function (targetElm) {
- var i, y, parentsAndSelf, toolbars = getContextToolbars();
-
- parentsAndSelf = editor.$(targetElm).parents().add(targetElm);
- for (i = parentsAndSelf.length - 1; i >= 0; i--) {
- for (y = toolbars.length - 1; y >= 0; y--) {
- if (toolbars[y].predicate(parentsAndSelf[i])) {
- return {
- toolbar: toolbars[y],
- element: parentsAndSelf[i]
- };
+ if (item.prependToContext) {
+ namedMenuItems.unshift(createMenuNameItemPair(name, item));
+ } else {
+ namedMenuItems.push(createMenuNameItemPair(name, item));
+ }
+ if (item.separator === 'after') {
+ namedMenuItems.push(delimiterMenuNamePair());
}
- }
- }
-
- return null;
- };
-
- editor.on('click keyup setContent ObjectResized', function (e) {
- // Only act on partial inserts
- if (e.type === 'setcontent' && !e.selection) {
- return;
- }
-
- // Needs to be delayed to avoid Chrome img focus out bug
- Delay.setEditorTimeout(editor, function () {
- var match;
-
- match = findFrontMostMatch(editor.selection.getNode());
- if (match) {
- hideAllContextToolbars();
- showContextToolbar(match);
- } else {
- hideAllContextToolbars();
- }
- });
- });
-
- editor.on('blur hide contextmenu', hideAllContextToolbars);
-
- editor.on('ObjectResizeStart', function () {
- var match = findFrontMostMatch(editor.selection.getNode());
-
- if (match && match.toolbar.panel) {
- match.toolbar.panel.hide();
- }
- });
-
- editor.on('ResizeEditor ResizeWindow', repositionHandler(true));
- editor.on('nodeChange', repositionHandler(false));
-
- editor.on('remove', function () {
- Tools.each(getContextToolbars(), function (toolbar) {
- if (toolbar.panel) {
- toolbar.panel.remove();
}
});
-
- editor.contextToolbars = {};
- });
-
- editor.shortcuts.add('ctrl+shift+e > ctrl+shift+p', '', function () {
- var match = findFrontMostMatch(editor.selection.getNode());
- if (match && match.toolbar.panel) {
- match.toolbar.panel.items()[0].focus();
- }
+ }
+ menuButton.menu = map(cleanupMenu(namedMenuItems, removedMenuItems), function (menuItem) {
+ return menuItem.item;
});
- };
-
- return {
- addContextualToolbars: addContextualToolbars
- };
- }
-);
-
-/**
- * Menubar.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.ui.Menubar',
- [
- 'tinymce.core.util.Tools'
- ],
- function (Tools) {
- var defaultMenus = {
- file: { title: 'File', items: 'newdocument' },
- edit: { title: 'Edit', items: 'undo redo | cut copy paste pastetext | selectall' },
- insert: { title: 'Insert', items: '|' },
- view: { title: 'View', items: 'visualaid |' },
- format: { title: 'Format', items: 'bold italic underline strikethrough superscript subscript | formats | removeformat' },
- table: { title: 'Table' },
- tools: { title: 'Tools' }
- };
-
- var createMenuItem = function (menuItems, name) {
- var menuItem;
-
- if (name == '|') {
- return { text: '|' };
+ if (!menuButton.menu.length) {
+ return null;
}
-
- menuItem = menuItems[name];
-
- return menuItem;
- };
-
- var createMenu = function (editorMenuItems, settings, context) {
- var menuButton, menu, menuItems, isUserDefined, removedMenuItems;
-
- removedMenuItems = Tools.makeMap((settings.removed_menuitems || '').split(/[ ,]/));
-
- // User defined menu
- if (settings.menu) {
- menu = settings.menu[context];
- isUserDefined = true;
- } else {
- menu = defaultMenus[context];
+ }
+ return menuButton;
+ };
+ var getDefaultMenubar = function (editor) {
+ var name;
+ var defaultMenuBar = [];
+ var menu = getMenu(editor);
+ if (menu) {
+ for (name in menu) {
+ defaultMenuBar.push(name);
}
-
+ } else {
+ for (name in defaultMenus) {
+ defaultMenuBar.push(name);
+ }
+ }
+ return defaultMenuBar;
+ };
+ var createMenuButtons = function (editor) {
+ var menuButtons = [];
+ var defaultMenuBar = getDefaultMenubar(editor);
+ var removedMenuItems = global$2.makeMap(getRemovedMenuItems(editor).split(/[ ,]/));
+ var menubar = getMenubar(editor);
+ var enabledMenuNames = typeof menubar === 'string' ? menubar.split(/[ ,]/) : defaultMenuBar;
+ for (var i = 0; i < enabledMenuNames.length; i++) {
+ var menuItems = enabledMenuNames[i];
+ var menu = createMenu(editor.menuItems, getMenu(editor), removedMenuItems, menuItems);
if (menu) {
- menuButton = { text: menu.title };
- menuItems = [];
-
- // Default/user defined items
- Tools.each((menu.items || '').split(/[ ,]/), function (item) {
- var menuItem = createMenuItem(editorMenuItems, item);
-
- if (menuItem && !removedMenuItems[item]) {
- menuItems.push(createMenuItem(editorMenuItems, item));
- }
- });
-
- // Added though context
- if (!isUserDefined) {
- Tools.each(editorMenuItems, function (menuItem) {
- if (menuItem.context == context) {
- if (menuItem.separator == 'before') {
- menuItems.push({ text: '|' });
- }
-
- if (menuItem.prependToContext) {
- menuItems.unshift(menuItem);
- } else {
- menuItems.push(menuItem);
- }
-
- if (menuItem.separator == 'after') {
- menuItems.push({ text: '|' });
- }
- }
- });
- }
-
- for (var i = 0; i < menuItems.length; i++) {
- if (menuItems[i].text == '|') {
- if (i === 0 || i == menuItems.length - 1) {
- menuItems.splice(i, 1);
- }
- }
- }
-
- menuButton.menu = menuItems;
-
- if (!menuButton.menu.length) {
- return null;
- }
+ menuButtons.push(menu);
}
+ }
+ return menuButtons;
+ };
+ var $_bahgsqu8jjgwefo4 = { createMenuButtons: createMenuButtons };
- return menuButton;
+ var DOM$1 = global$3.DOM;
+ var getSize = function (elm) {
+ return {
+ width: elm.clientWidth,
+ height: elm.clientHeight
};
+ };
+ var resizeTo = function (editor, width, height) {
+ var containerElm, iframeElm, containerSize, iframeSize;
+ containerElm = editor.getContainer();
+ iframeElm = editor.getContentAreaContainer().firstChild;
+ containerSize = getSize(containerElm);
+ iframeSize = getSize(iframeElm);
+ if (width !== null) {
+ width = Math.max(getMinWidth(editor), width);
+ width = Math.min(getMaxWidth(editor), width);
+ DOM$1.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));
+ DOM$1.setStyle(iframeElm, 'width', width);
+ }
+ height = Math.max(getMinHeight(editor), height);
+ height = Math.min(getMaxHeight(editor), height);
+ DOM$1.setStyle(iframeElm, 'height', height);
+ $_5hpmustzjjgwefnb.fireResizeEditor(editor);
+ };
+ var resizeBy = function (editor, dw, dh) {
+ var elm = editor.getContentAreaContainer();
+ resizeTo(editor, elm.clientWidth + dw, elm.clientHeight + dh);
+ };
+ var $_sd6u0ubjjgwefok = {
+ resizeTo: resizeTo,
+ resizeBy: resizeBy
+ };
- var createMenuButtons = function (editor) {
- var name, menuButtons = [], settings = editor.settings;
+ var global$8 = tinymce.util.Tools.resolve('tinymce.Env');
- var defaultMenuBar = [];
- if (settings.menu) {
- for (name in settings.menu) {
- defaultMenuBar.push(name);
- }
- } else {
- for (name in defaultMenus) {
- defaultMenuBar.push(name);
- }
+ var api = function (elm) {
+ return {
+ element: function () {
+ return elm;
}
-
- var enabledMenuNames = typeof settings.menubar == "string" ? settings.menubar.split(/[ ,]/) : defaultMenuBar;
- for (var i = 0; i < enabledMenuNames.length; i++) {
- var menu = enabledMenuNames[i];
- menu = createMenu(editor.menuItems, editor.settings, menu);
-
- if (menu) {
- menuButtons.push(menu);
+ };
+ };
+ var trigger = function (sidebar, panel, callbackName) {
+ var callback = sidebar.settings[callbackName];
+ if (callback) {
+ callback(api(panel.getEl('body')));
+ }
+ };
+ var hidePanels = function (name, container, sidebars) {
+ global$2.each(sidebars, function (sidebar) {
+ var panel = container.items().filter('#' + sidebar.name)[0];
+ if (panel && panel.visible() && sidebar.name !== name) {
+ trigger(sidebar, panel, 'onhide');
+ panel.visible(false);
+ }
+ });
+ };
+ var deactivateButtons = function (toolbar) {
+ toolbar.items().each(function (ctrl) {
+ ctrl.active(false);
+ });
+ };
+ var findSidebar = function (sidebars, name) {
+ return global$2.grep(sidebars, function (sidebar) {
+ return sidebar.name === name;
+ })[0];
+ };
+ var showPanel = function (editor, name, sidebars) {
+ return function (e) {
+ var btnCtrl = e.control;
+ var container = btnCtrl.parents().filter('panel')[0];
+ var panel = container.find('#' + name)[0];
+ var sidebar = findSidebar(sidebars, name);
+ hidePanels(name, container, sidebars);
+ deactivateButtons(btnCtrl.parent());
+ if (panel && panel.visible()) {
+ trigger(sidebar, panel, 'onhide');
+ panel.hide();
+ btnCtrl.active(false);
+ } else {
+ if (panel) {
+ panel.show();
+ trigger(sidebar, panel, 'onshow');
+ } else {
+ panel = global$4.create({
+ type: 'container',
+ name: name,
+ layout: 'stack',
+ classes: 'sidebar-panel',
+ html: ''
+ });
+ container.prepend(panel);
+ trigger(sidebar, panel, 'onrender');
+ trigger(sidebar, panel, 'onshow');
}
+ btnCtrl.active(true);
}
-
- return menuButtons;
- };
-
- return {
- createMenuButtons: createMenuButtons
+ $_5hpmustzjjgwefnb.fireResizeEditor(editor);
};
- }
-);
-
-/**
- * Resize.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.ui.Resize',
- [
- 'tinymce.core.dom.DOMUtils'
- ],
- function (DOMUtils) {
- var DOM = DOMUtils.DOM;
- var getSize = function (elm) {
+ };
+ var isModernBrowser = function () {
+ return !global$8.ie || global$8.ie >= 11;
+ };
+ var hasSidebar = function (editor) {
+ return isModernBrowser() && editor.sidebars ? editor.sidebars.length > 0 : false;
+ };
+ var createSidebar = function (editor) {
+ var buttons = global$2.map(editor.sidebars, function (sidebar) {
+ var settings = sidebar.settings;
return {
- width: elm.clientWidth,
- height: elm.clientHeight
+ type: 'button',
+ icon: settings.icon,
+ image: settings.image,
+ tooltip: settings.tooltip,
+ onclick: showPanel(editor, sidebar.name, editor.sidebars)
};
- };
-
- var resizeTo = function (editor, width, height) {
- var containerElm, iframeElm, containerSize, iframeSize, settings = editor.settings;
-
- containerElm = editor.getContainer();
- iframeElm = editor.getContentAreaContainer().firstChild;
- containerSize = getSize(containerElm);
- iframeSize = getSize(iframeElm);
-
- if (width !== null) {
- width = Math.max(settings.min_width || 100, width);
- width = Math.min(settings.max_width || 0xFFFF, width);
-
- DOM.setStyle(containerElm, 'width', width + (containerSize.width - iframeSize.width));
- DOM.setStyle(iframeElm, 'width', width);
- }
-
- height = Math.max(settings.min_height || 100, height);
- height = Math.min(settings.max_height || 0xFFFF, height);
- DOM.setStyle(iframeElm, 'height', height);
-
- editor.fire('ResizeEditor');
- };
-
- var resizeBy = function (editor, dw, dh) {
- var elm = editor.getContentAreaContainer();
- resizeTo(editor, elm.clientWidth + dw, elm.clientHeight + dh);
- };
-
+ });
return {
- resizeTo: resizeTo,
- resizeBy: resizeBy
- };
- }
-);
-
-/**
- * Sidebar.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.ui.Sidebar',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.ui.Factory',
- 'tinymce.core.Env'
- ],
- function (Tools, Factory, Env) {
- var api = function (elm) {
- return {
- element: function () {
- return elm;
- }
- };
+ type: 'panel',
+ name: 'sidebar',
+ layout: 'stack',
+ classes: 'sidebar',
+ items: [{
+ type: 'toolbar',
+ layout: 'stack',
+ classes: 'sidebar-toolbar',
+ items: buttons
+ }]
};
+ };
+ var $_b7ut9jucjjgwefom = {
+ hasSidebar: hasSidebar,
+ createSidebar: createSidebar
+ };
- var trigger = function (sidebar, panel, callbackName) {
- var callback = sidebar.settings[callbackName];
- if (callback) {
- callback(api(panel.getEl('body')));
+ var fireSkinLoaded$1 = function (editor) {
+ var done = function () {
+ editor._skinLoaded = true;
+ $_5hpmustzjjgwefnb.fireSkinLoaded(editor);
+ };
+ return function () {
+ if (editor.initialized) {
+ done();
+ } else {
+ editor.on('init', done);
}
};
+ };
+ var $_awdosmuejjgwefop = { fireSkinLoaded: fireSkinLoaded$1 };
- var hidePanels = function (name, container, sidebars) {
- Tools.each(sidebars, function (sidebar) {
- var panel = container.items().filter('#' + sidebar.name)[0];
-
- if (panel && panel.visible() && sidebar.name !== name) {
- trigger(sidebar, panel, 'onhide');
- panel.visible(false);
- }
- });
+ var DOM$2 = global$3.DOM;
+ var switchMode = function (panel) {
+ return function (e) {
+ panel.find('*').disabled(e.mode === 'readonly');
};
-
- var deactivateButtons = function (toolbar) {
- toolbar.items().each(function (ctrl) {
- ctrl.active(false);
- });
+ };
+ var editArea = function (border) {
+ return {
+ type: 'panel',
+ name: 'iframe',
+ layout: 'stack',
+ classes: 'edit-area',
+ border: border,
+ html: ''
};
-
- var findSidebar = function (sidebars, name) {
- return Tools.grep(sidebars, function (sidebar) {
- return sidebar.name === name;
- })[0];
+ };
+ var editAreaContainer = function (editor) {
+ return {
+ type: 'panel',
+ layout: 'stack',
+ classes: 'edit-aria-container',
+ border: '1 0 0 0',
+ items: [
+ editArea('0'),
+ $_b7ut9jucjjgwefom.createSidebar(editor)
+ ]
};
-
- var showPanel = function (editor, name, sidebars) {
- return function (e) {
- var btnCtrl = e.control;
- var container = btnCtrl.parents().filter('panel')[0];
- var panel = container.find('#' + name)[0];
- var sidebar = findSidebar(sidebars, name);
-
- hidePanels(name, container, sidebars);
- deactivateButtons(btnCtrl.parent());
-
- if (panel && panel.visible()) {
- trigger(sidebar, panel, 'onhide');
- panel.hide();
- btnCtrl.active(false);
- } else {
- if (panel) {
- panel.show();
- trigger(sidebar, panel, 'onshow');
+ };
+ var render = function (editor, theme, args) {
+ var panel, resizeHandleCtrl, startSize;
+ if (isSkinDisabled(editor) === false && args.skinUiCss) {
+ DOM$2.styleSheetLoader.load(args.skinUiCss, $_awdosmuejjgwefop.fireSkinLoaded(editor));
+ } else {
+ $_awdosmuejjgwefop.fireSkinLoaded(editor)();
+ }
+ panel = theme.panel = global$4.create({
+ type: 'panel',
+ role: 'application',
+ classes: 'tinymce',
+ style: 'visibility: hidden',
+ layout: 'stack',
+ border: 1,
+ items: [
+ {
+ type: 'container',
+ classes: 'top-part',
+ items: [
+ hasMenubar(editor) === false ? null : {
+ type: 'menubar',
+ border: '0 0 1 0',
+ items: $_bahgsqu8jjgwefo4.createMenuButtons(editor)
+ },
+ $_4udolhu7jjgwefo1.createToolbars(editor, getToolbarSize(editor))
+ ]
+ },
+ $_b7ut9jucjjgwefom.hasSidebar(editor) ? editAreaContainer(editor) : editArea('1 0 0 0')
+ ]
+ });
+ $_6344qfu4jjgwefnr.setUiContainer(editor, panel);
+ if (getResize(editor) !== 'none') {
+ resizeHandleCtrl = {
+ type: 'resizehandle',
+ direction: getResize(editor),
+ onResizeStart: function () {
+ var elm = editor.getContentAreaContainer().firstChild;
+ startSize = {
+ width: elm.clientWidth,
+ height: elm.clientHeight
+ };
+ },
+ onResize: function (e) {
+ if (getResize(editor) === 'both') {
+ $_sd6u0ubjjgwefok.resizeTo(editor, startSize.width + e.deltaX, startSize.height + e.deltaY);
} else {
- panel = Factory.create({
- type: 'container',
- name: name,
- layout: 'stack',
- classes: 'sidebar-panel',
- html: ''
- });
-
- container.prepend(panel);
- trigger(sidebar, panel, 'onrender');
- trigger(sidebar, panel, 'onshow');
+ $_sd6u0ubjjgwefok.resizeTo(editor, null, startSize.height + e.deltaY);
}
-
- btnCtrl.active(true);
}
-
- editor.fire('ResizeEditor');
};
- };
-
- var isModernBrowser = function () {
- return !Env.ie || Env.ie >= 11;
- };
-
- var hasSidebar = function (editor) {
- return isModernBrowser() && editor.sidebars ? editor.sidebars.length > 0 : false;
- };
-
- var createSidebar = function (editor) {
- var buttons = Tools.map(editor.sidebars, function (sidebar) {
- var settings = sidebar.settings;
-
- return {
- type: 'button',
- icon: settings.icon,
- image: settings.image,
- tooltip: settings.tooltip,
- onclick: showPanel(editor, sidebar.name, editor.sidebars)
- };
- });
-
- return {
+ }
+ if (hasStatusbar(editor)) {
+ var linkHtml = '<a href="https://www.tinymce.com/?utm_campaign=editor_referral&utm_medium=poweredby&utm_source=tinymce" rel="noopener" target="_blank" role="presentation" tabindex="-1">tinymce</a>';
+ var html = global$5.translate([
+ 'Powered by {0}',
+ linkHtml
+ ]);
+ var brandingLabel = isBrandingEnabled(editor) ? {
+ type: 'label',
+ classes: 'branding',
+ html: ' ' + html
+ } : null;
+ panel.add({
type: 'panel',
- name: 'sidebar',
- layout: 'stack',
- classes: 'sidebar',
+ name: 'statusbar',
+ classes: 'statusbar',
+ layout: 'flow',
+ border: '1 0 0 0',
+ ariaRoot: true,
items: [
{
- type: 'toolbar',
- layout: 'stack',
- classes: 'sidebar-toolbar',
- items: buttons
- }
+ type: 'elementpath',
+ editor: editor
+ },
+ resizeHandleCtrl,
+ brandingLabel
]
- };
- };
-
+ });
+ }
+ $_5hpmustzjjgwefnb.fireBeforeRenderUI(editor);
+ editor.on('SwitchMode', switchMode(panel));
+ panel.renderBefore(args.targetNode).reflow();
+ if (isReadOnly(editor)) {
+ editor.setMode('readonly');
+ }
+ if (args.width) {
+ DOM$2.setStyle(panel.getEl(), 'width', args.width);
+ }
+ editor.on('remove', function () {
+ panel.remove();
+ panel = null;
+ });
+ $_azwbz4u0jjgwefnc.addKeys(editor, panel);
+ $_g1gegqu1jjgwefne.addContextualToolbars(editor);
return {
- hasSidebar: hasSidebar,
- createSidebar: createSidebar
+ iframeContainer: panel.find('#iframe')[0].getEl(),
+ editorContainer: panel.getEl()
};
- }
-);
-/**
- * SkinLoaded.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.ui.SkinLoaded', [
- ],
- function () {
- var fireSkinLoaded = function (editor) {
- var done = function () {
- editor._skinLoaded = true;
- editor.fire('SkinLoaded');
- };
-
- return function () {
- if (editor.initialized) {
- done();
- } else {
- editor.on('init', done);
- }
+ };
+ var $_vxdgetvjjgwefn7 = { render: render };
+
+ var global$9 = tinymce.util.Tools.resolve('tinymce.dom.DomQuery');
+
+ var count = 0;
+ var funcs = {
+ id: function () {
+ return 'mceu_' + count++;
+ },
+ create: function (name$$1, attrs, children) {
+ var elm = document.createElement(name$$1);
+ global$3.DOM.setAttribs(elm, attrs);
+ if (typeof children === 'string') {
+ elm.innerHTML = children;
+ } else {
+ global$2.each(children, function (child) {
+ if (child.nodeType) {
+ elm.appendChild(child);
+ }
+ });
+ }
+ return elm;
+ },
+ createFragment: function (html) {
+ return global$3.DOM.createFragment(html);
+ },
+ getWindowSize: function () {
+ return global$3.DOM.getViewPort();
+ },
+ getSize: function (elm) {
+ var width, height;
+ if (elm.getBoundingClientRect) {
+ var rect = elm.getBoundingClientRect();
+ width = Math.max(rect.width || rect.right - rect.left, elm.offsetWidth);
+ height = Math.max(rect.height || rect.bottom - rect.bottom, elm.offsetHeight);
+ } else {
+ width = elm.offsetWidth;
+ height = elm.offsetHeight;
+ }
+ return {
+ width: width,
+ height: height
};
- };
+ },
+ getPos: function (elm, root) {
+ return global$3.DOM.getPos(elm, root || funcs.getContainer());
+ },
+ getContainer: function () {
+ return global$8.container ? global$8.container : document.body;
+ },
+ getViewPort: function (win) {
+ return global$3.DOM.getViewPort(win);
+ },
+ get: function (id) {
+ return document.getElementById(id);
+ },
+ addClass: function (elm, cls) {
+ return global$3.DOM.addClass(elm, cls);
+ },
+ removeClass: function (elm, cls) {
+ return global$3.DOM.removeClass(elm, cls);
+ },
+ hasClass: function (elm, cls) {
+ return global$3.DOM.hasClass(elm, cls);
+ },
+ toggleClass: function (elm, cls, state) {
+ return global$3.DOM.toggleClass(elm, cls, state);
+ },
+ css: function (elm, name$$1, value) {
+ return global$3.DOM.setStyle(elm, name$$1, value);
+ },
+ getRuntimeStyle: function (elm, name$$1) {
+ return global$3.DOM.getStyle(elm, name$$1, true);
+ },
+ on: function (target, name$$1, callback, scope) {
+ return global$3.DOM.bind(target, name$$1, callback, scope);
+ },
+ off: function (target, name$$1, callback) {
+ return global$3.DOM.unbind(target, name$$1, callback);
+ },
+ fire: function (target, name$$1, args) {
+ return global$3.DOM.fire(target, name$$1, args);
+ },
+ innerHtml: function (elm, html) {
+ global$3.DOM.setHTML(elm, html);
+ }
+ };
+ var isStatic = function (elm) {
+ return funcs.getRuntimeStyle(elm, 'position') === 'static';
+ };
+ var isFixed = function (ctrl) {
+ return ctrl.state.get('fixed');
+ };
+ function calculateRelativePosition(ctrl, targetElm, rel) {
+ var ctrlElm, pos, x, y, selfW, selfH, targetW, targetH, viewport, size;
+ viewport = getWindowViewPort();
+ pos = funcs.getPos(targetElm, $_6344qfu4jjgwefnr.getUiContainer(ctrl));
+ x = pos.x;
+ y = pos.y;
+ if (isFixed(ctrl) && isStatic(document.body)) {
+ x -= viewport.x;
+ y -= viewport.y;
+ }
+ ctrlElm = ctrl.getEl();
+ size = funcs.getSize(ctrlElm);
+ selfW = size.width;
+ selfH = size.height;
+ size = funcs.getSize(targetElm);
+ targetW = size.width;
+ targetH = size.height;
+ rel = (rel || '').split('');
+ if (rel[0] === 'b') {
+ y += targetH;
+ }
+ if (rel[1] === 'r') {
+ x += targetW;
+ }
+ if (rel[0] === 'c') {
+ y += Math.round(targetH / 2);
+ }
+ if (rel[1] === 'c') {
+ x += Math.round(targetW / 2);
+ }
+ if (rel[3] === 'b') {
+ y -= selfH;
+ }
+ if (rel[4] === 'r') {
+ x -= selfW;
+ }
+ if (rel[3] === 'c') {
+ y -= Math.round(selfH / 2);
+ }
+ if (rel[4] === 'c') {
+ x -= Math.round(selfW / 2);
+ }
return {
- fireSkinLoaded: fireSkinLoaded
+ x: x,
+ y: y,
+ w: selfW,
+ h: selfH
};
}
-);
-
-/**
- * Iframe.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.modes.Iframe',
- [
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.core.ui.Factory',
- 'tinymce.core.util.Tools',
- 'tinymce.themes.modern.ui.A11y',
- 'tinymce.themes.modern.ui.Branding',
- 'tinymce.themes.modern.ui.ContextToolbars',
- 'tinymce.themes.modern.ui.Menubar',
- 'tinymce.themes.modern.ui.Resize',
- 'tinymce.themes.modern.ui.Sidebar',
- 'tinymce.themes.modern.ui.SkinLoaded',
- 'tinymce.themes.modern.ui.Toolbar'
- ],
- function (DOMUtils, Factory, Tools, A11y, Branding, ContextToolbars, Menubar, Resize, Sidebar, SkinLoaded, Toolbar) {
- var DOM = DOMUtils.DOM;
-
- var switchMode = function (panel) {
- return function (e) {
- panel.find('*').disabled(e.mode === 'readonly');
- };
- };
-
- var editArea = function (border) {
- return {
- type: 'panel',
- name: 'iframe',
- layout: 'stack',
- classes: 'edit-area',
- border: border,
- html: ''
- };
+ var getUiContainerViewPort = function (customUiContainer) {
+ return {
+ x: 0,
+ y: 0,
+ w: customUiContainer.scrollWidth - 1,
+ h: customUiContainer.scrollHeight - 1
};
-
- var editAreaContainer = function (editor) {
- return {
- type: 'panel',
- layout: 'stack',
- classes: 'edit-aria-container',
- border: '1 0 0 0',
- items: [
- editArea('0'),
- Sidebar.createSidebar(editor)
- ]
- };
+ };
+ var getWindowViewPort = function () {
+ var win = window;
+ var x = Math.max(win.pageXOffset, document.body.scrollLeft, document.documentElement.scrollLeft);
+ var y = Math.max(win.pageYOffset, document.body.scrollTop, document.documentElement.scrollTop);
+ var w = win.innerWidth || document.documentElement.clientWidth;
+ var h = win.innerHeight || document.documentElement.clientHeight;
+ return {
+ x: x,
+ y: y,
+ w: x + w,
+ h: y + h
};
-
- var render = function (editor, theme, args) {
- var panel, resizeHandleCtrl, startSize, settings = editor.settings;
-
- if (args.skinUiCss) {
- DOM.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));
+ };
+ var getViewPortRect = function (ctrl) {
+ var customUiContainer = $_6344qfu4jjgwefnr.getUiContainer(ctrl);
+ return customUiContainer && !isFixed(ctrl) ? getUiContainerViewPort(customUiContainer) : getWindowViewPort();
+ };
+ var $_3fnh5iukjjgwefpt = {
+ testMoveRel: function (elm, rels) {
+ var viewPortRect = getViewPortRect(this);
+ for (var i = 0; i < rels.length; i++) {
+ var pos = calculateRelativePosition(this, elm, rels[i]);
+ if (isFixed(this)) {
+ if (pos.x > 0 && pos.x + pos.w < viewPortRect.w && pos.y > 0 && pos.y + pos.h < viewPortRect.h) {
+ return rels[i];
+ }
+ } else {
+ if (pos.x > viewPortRect.x && pos.x + pos.w < viewPortRect.w && pos.y > viewPortRect.y && pos.y + pos.h < viewPortRect.h) {
+ return rels[i];
+ }
+ }
}
-
- panel = theme.panel = Factory.create({
- type: 'panel',
- role: 'application',
- classes: 'tinymce',
- style: 'visibility: hidden',
- layout: 'stack',
- border: 1,
- items: [
- settings.menubar === false ? null : { type: 'menubar', border: '0 0 1 0', items: Menubar.createMenuButtons(editor) },
- Toolbar.createToolbars(editor, settings.toolbar_items_size),
- Sidebar.hasSidebar(editor) ? editAreaContainer(editor) : editArea('1 0 0 0')
- ]
+ return rels[0];
+ },
+ moveRel: function (elm, rel) {
+ if (typeof rel !== 'string') {
+ rel = this.testMoveRel(elm, rel);
+ }
+ var pos = calculateRelativePosition(this, elm, rel);
+ return this.moveTo(pos.x, pos.y);
+ },
+ moveBy: function (dx, dy) {
+ var self$$1 = this, rect = self$$1.layoutRect();
+ self$$1.moveTo(rect.x + dx, rect.y + dy);
+ return self$$1;
+ },
+ moveTo: function (x, y) {
+ var self$$1 = this;
+ function constrain(value, max, size) {
+ if (value < 0) {
+ return 0;
+ }
+ if (value + size > max) {
+ value = max - size;
+ return value < 0 ? 0 : value;
+ }
+ return value;
+ }
+ if (self$$1.settings.constrainToViewport) {
+ var viewPortRect = getViewPortRect(this);
+ var layoutRect = self$$1.layoutRect();
+ x = constrain(x, viewPortRect.w, layoutRect.w);
+ y = constrain(y, viewPortRect.h, layoutRect.h);
+ }
+ var uiContainer = $_6344qfu4jjgwefnr.getUiContainer(self$$1);
+ if (uiContainer && isStatic(uiContainer) && !isFixed(self$$1)) {
+ x -= uiContainer.scrollLeft;
+ y -= uiContainer.scrollTop;
+ }
+ if (uiContainer) {
+ x += 1;
+ y += 1;
+ }
+ if (self$$1.state.get('rendered')) {
+ self$$1.layoutRect({
+ x: x,
+ y: y
+ }).repaint();
+ } else {
+ self$$1.settings.x = x;
+ self$$1.settings.y = y;
+ }
+ self$$1.fire('move', {
+ x: x,
+ y: y
});
+ return self$$1;
+ }
+ };
- if (settings.resize !== false) {
- resizeHandleCtrl = {
- type: 'resizehandle',
- direction: settings.resize,
-
- onResizeStart: function () {
- var elm = editor.getContentAreaContainer().firstChild;
+ var global$10 = tinymce.util.Tools.resolve('tinymce.util.Class');
- startSize = {
- width: elm.clientWidth,
- height: elm.clientHeight
- };
- },
+ var global$11 = tinymce.util.Tools.resolve('tinymce.util.EventDispatcher');
- onResize: function (e) {
- if (settings.resize === 'both') {
- Resize.resizeTo(editor, startSize.width + e.deltaX, startSize.height + e.deltaY);
- } else {
- Resize.resizeTo(editor, null, startSize.height + e.deltaY);
- }
- }
+ var $_fbr241uqjjgwefqo = {
+ parseBox: function (value) {
+ var len;
+ var radix = 10;
+ if (!value) {
+ return;
+ }
+ if (typeof value === 'number') {
+ value = value || 0;
+ return {
+ top: value,
+ left: value,
+ bottom: value,
+ right: value
};
}
-
- // Add statusbar if needed
- if (settings.statusbar !== false) {
- panel.add({
- type: 'panel', name: 'statusbar', classes: 'statusbar', layout: 'flow', border: '1 0 0 0', ariaRoot: true, items: [
- { type: 'elementpath', editor: editor },
- resizeHandleCtrl
- ]
- });
+ value = value.split(' ');
+ len = value.length;
+ if (len === 1) {
+ value[1] = value[2] = value[3] = value[0];
+ } else if (len === 2) {
+ value[2] = value[0];
+ value[3] = value[1];
+ } else if (len === 3) {
+ value[3] = value[1];
}
-
- editor.fire('BeforeRenderUI');
- editor.on('SwitchMode', switchMode(panel));
- panel.renderBefore(args.targetNode).reflow();
-
- if (settings.readonly) {
- editor.setMode('readonly');
+ return {
+ top: parseInt(value[0], radix) || 0,
+ right: parseInt(value[1], radix) || 0,
+ bottom: parseInt(value[2], radix) || 0,
+ left: parseInt(value[3], radix) || 0
+ };
+ },
+ measureBox: function (elm, prefix) {
+ function getStyle(name) {
+ var defaultView = elm.ownerDocument.defaultView;
+ if (defaultView) {
+ var computedStyle = defaultView.getComputedStyle(elm, null);
+ if (computedStyle) {
+ name = name.replace(/[A-Z]/g, function (a) {
+ return '-' + a;
+ });
+ return computedStyle.getPropertyValue(name);
+ } else {
+ return null;
+ }
+ }
+ return elm.currentStyle[name];
}
-
- if (args.width) {
- DOM.setStyle(panel.getEl(), 'width', args.width);
+ function getSide(name) {
+ var val = parseFloat(getStyle(name));
+ return isNaN(val) ? 0 : val;
}
-
- // Remove the panel when the editor is removed
- editor.on('remove', function () {
- panel.remove();
- panel = null;
- });
-
- // Add accesibility shortcuts
- A11y.addKeys(editor, panel);
- ContextToolbars.addContextualToolbars(editor);
- Branding.setup(editor);
-
return {
- iframeContainer: panel.find('#iframe')[0].getEl(),
- editorContainer: panel.getEl()
+ top: getSide(prefix + 'TopWidth'),
+ right: getSide(prefix + 'RightWidth'),
+ bottom: getSide(prefix + 'BottomWidth'),
+ left: getSide(prefix + 'LeftWidth')
};
- };
+ }
+ };
- return {
- render: render
- };
+ function noop$1() {
}
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.ui.FloatPanel',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.ui.FloatPanel');
+ function ClassList(onchange) {
+ this.cls = [];
+ this.cls._map = {};
+ this.onchange = onchange || noop$1;
+ this.prefix = '';
}
-);
-
-/**
- * Inline.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.modes.Inline',
- [
- 'tinymce.core.util.Tools',
- 'tinymce.core.ui.Factory',
- 'tinymce.core.dom.DOMUtils',
- 'tinymce.core.ui.FloatPanel',
- 'tinymce.themes.modern.ui.Toolbar',
- 'tinymce.themes.modern.ui.Menubar',
- 'tinymce.themes.modern.ui.ContextToolbars',
- 'tinymce.themes.modern.ui.A11y',
- 'tinymce.themes.modern.ui.SkinLoaded'
- ],
- function (Tools, Factory, DOMUtils, FloatPanel, Toolbar, Menubar, ContextToolbars, A11y, SkinLoaded) {
- var render = function (editor, theme, args) {
- var panel, inlineToolbarContainer, settings = editor.settings;
- var DOM = DOMUtils.DOM;
-
- if (settings.fixed_toolbar_container) {
- inlineToolbarContainer = DOM.select(settings.fixed_toolbar_container)[0];
- }
-
- var reposition = function () {
- if (panel && panel.moveRel && panel.visible() && !panel._fixed) {
- // TODO: This is kind of ugly and doesn't handle multiple scrollable elements
- var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody();
- var deltaX = 0, deltaY = 0;
-
- if (scrollContainer) {
- var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer);
-
- deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x);
- deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);
- }
-
- panel.fixed(false).moveRel(body, editor.rtl ? ['tr-br', 'br-tr'] : ['tl-bl', 'bl-tl', 'tr-br']).moveBy(deltaX, deltaY);
+ global$2.extend(ClassList.prototype, {
+ add: function (cls) {
+ if (cls && !this.contains(cls)) {
+ this.cls._map[cls] = true;
+ this.cls.push(cls);
+ this._change();
+ }
+ return this;
+ },
+ remove: function (cls) {
+ if (this.contains(cls)) {
+ var i = void 0;
+ for (i = 0; i < this.cls.length; i++) {
+ if (this.cls[i] === cls) {
+ break;
+ }
}
- };
-
- var show = function () {
- if (panel) {
- panel.show();
- reposition();
- DOM.addClass(editor.getBody(), 'mce-edit-focus');
+ this.cls.splice(i, 1);
+ delete this.cls._map[cls];
+ this._change();
+ }
+ return this;
+ },
+ toggle: function (cls, state) {
+ var curState = this.contains(cls);
+ if (curState !== state) {
+ if (curState) {
+ this.remove(cls);
+ } else {
+ this.add(cls);
}
- };
-
- var hide = function () {
- if (panel) {
- // We require two events as the inline float panel based toolbar does not have autohide=true
- panel.hide();
-
- // All other autohidden float panels will be closed below.
- FloatPanel.hideAll();
+ this._change();
+ }
+ return this;
+ },
+ contains: function (cls) {
+ return !!this.cls._map[cls];
+ },
+ _change: function () {
+ delete this.clsValue;
+ this.onchange.call(this);
+ }
+ });
+ ClassList.prototype.toString = function () {
+ var value;
+ if (this.clsValue) {
+ return this.clsValue;
+ }
+ value = '';
+ for (var i = 0; i < this.cls.length; i++) {
+ if (i > 0) {
+ value += ' ';
+ }
+ value += this.prefix + this.cls[i];
+ }
+ return value;
+ };
- DOM.removeClass(editor.getBody(), 'mce-edit-focus');
+ function unique(array) {
+ var uniqueItems = [];
+ var i = array.length, item;
+ while (i--) {
+ item = array[i];
+ if (!item.__checked) {
+ uniqueItems.push(item);
+ item.__checked = 1;
+ }
+ }
+ i = uniqueItems.length;
+ while (i--) {
+ delete uniqueItems[i].__checked;
+ }
+ return uniqueItems;
+ }
+ var expression = /^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i;
+ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g;
+ var whiteSpace = /^\s*|\s*$/g;
+ var Collection;
+ var Selector = global$10.extend({
+ init: function (selector) {
+ var match = this.match;
+ function compileNameFilter(name) {
+ if (name) {
+ name = name.toLowerCase();
+ return function (item) {
+ return name === '*' || item.type === name;
+ };
}
- };
-
- var render = function () {
- if (panel) {
- if (!panel.visible()) {
- show();
+ }
+ function compileIdFilter(id) {
+ if (id) {
+ return function (item) {
+ return item._name === id;
+ };
+ }
+ }
+ function compileClassesFilter(classes) {
+ if (classes) {
+ classes = classes.split('.');
+ return function (item) {
+ var i = classes.length;
+ while (i--) {
+ if (!item.classes.contains(classes[i])) {
+ return false;
+ }
+ }
+ return true;
+ };
+ }
+ }
+ function compileAttrFilter(name, cmp, check) {
+ if (name) {
+ return function (item) {
+ var value = item[name] ? item[name]() : '';
+ return !cmp ? !!check : cmp === '=' ? value === check : cmp === '*=' ? value.indexOf(check) >= 0 : cmp === '~=' ? (' ' + value + ' ').indexOf(' ' + check + ' ') >= 0 : cmp === '!=' ? value !== check : cmp === '^=' ? value.indexOf(check) === 0 : cmp === '$=' ? value.substr(value.length - check.length) === check : false;
+ };
+ }
+ }
+ function compilePsuedoFilter(name) {
+ var notSelectors;
+ if (name) {
+ name = /(?:not\((.+)\))|(.+)/i.exec(name);
+ if (!name[1]) {
+ name = name[2];
+ return function (item, index, length) {
+ return name === 'first' ? index === 0 : name === 'last' ? index === length - 1 : name === 'even' ? index % 2 === 0 : name === 'odd' ? index % 2 === 1 : item[name] ? item[name]() : false;
+ };
}
-
- return;
+ notSelectors = parseChunks(name[1], []);
+ return function (item) {
+ return !match(item, notSelectors);
+ };
}
-
- // Render a plain panel inside the inlineToolbarContainer if it's defined
- panel = theme.panel = Factory.create({
- type: inlineToolbarContainer ? 'panel' : 'floatpanel',
- role: 'application',
- classes: 'tinymce tinymce-inline',
- layout: 'flex',
- direction: 'column',
- align: 'stretch',
- autohide: false,
- autofix: true,
- fixed: !!inlineToolbarContainer,
- border: 1,
- items: [
- settings.menubar === false ? null : { type: 'menubar', border: '0 0 1 0', items: Menubar.createMenuButtons(editor) },
- Toolbar.createToolbars(editor, settings.toolbar_items_size)
- ]
- });
-
- // Add statusbar
- /*if (settings.statusbar !== false) {
- panel.add({type: 'panel', classes: 'statusbar', layout: 'flow', border: '1 0 0 0', items: [
- {type: 'elementpath'}
- ]});
- }*/
-
- editor.fire('BeforeRenderUI');
- panel.renderTo(inlineToolbarContainer || document.body).reflow();
-
- A11y.addKeys(editor, panel);
- show();
- ContextToolbars.addContextualToolbars(editor);
-
- editor.on('nodeChange', reposition);
- editor.on('activate', show);
- editor.on('deactivate', hide);
-
- editor.nodeChanged();
- };
-
- settings.content_editable = true;
-
- editor.on('focus', function () {
- // Render only when the CSS file has been loaded
- if (args.skinUiCss) {
- DOM.styleSheetLoader.load(args.skinUiCss, render, render);
+ }
+ function compile(selector, filters, direct) {
+ var parts;
+ function add(filter) {
+ if (filter) {
+ filters.push(filter);
+ }
+ }
+ parts = expression.exec(selector.replace(whiteSpace, ''));
+ add(compileNameFilter(parts[1]));
+ add(compileIdFilter(parts[2]));
+ add(compileClassesFilter(parts[3]));
+ add(compileAttrFilter(parts[4], parts[5], parts[6]));
+ add(compilePsuedoFilter(parts[7]));
+ filters.pseudo = !!parts[7];
+ filters.direct = direct;
+ return filters;
+ }
+ function parseChunks(selector, selectors) {
+ var parts = [];
+ var extra, matches, i;
+ do {
+ chunker.exec('');
+ matches = chunker.exec(selector);
+ if (matches) {
+ selector = matches[3];
+ parts.push(matches[1]);
+ if (matches[2]) {
+ extra = matches[3];
+ break;
+ }
+ }
+ } while (matches);
+ if (extra) {
+ parseChunks(extra, selectors);
+ }
+ selector = [];
+ for (i = 0; i < parts.length; i++) {
+ if (parts[i] !== '>') {
+ selector.push(compile(parts[i], [], parts[i - 1] === '>'));
+ }
+ }
+ selectors.push(selector);
+ return selectors;
+ }
+ this._selectors = parseChunks(selector, []);
+ },
+ match: function (control, selectors) {
+ var i, l, si, sl, selector, fi, fl, filters, index, length, siblings, count, item;
+ selectors = selectors || this._selectors;
+ for (i = 0, l = selectors.length; i < l; i++) {
+ selector = selectors[i];
+ sl = selector.length;
+ item = control;
+ count = 0;
+ for (si = sl - 1; si >= 0; si--) {
+ filters = selector[si];
+ while (item) {
+ if (filters.pseudo) {
+ siblings = item.parent().items();
+ index = length = siblings.length;
+ while (index--) {
+ if (siblings[index] === item) {
+ break;
+ }
+ }
+ }
+ for (fi = 0, fl = filters.length; fi < fl; fi++) {
+ if (!filters[fi](item, index, length)) {
+ fi = fl + 1;
+ break;
+ }
+ }
+ if (fi === fl) {
+ count++;
+ break;
+ } else {
+ if (si === sl - 1) {
+ break;
+ }
+ }
+ item = item.parent();
+ }
+ }
+ if (count === sl) {
+ return true;
+ }
+ }
+ return false;
+ },
+ find: function (container) {
+ var matches = [], i, l;
+ var selectors = this._selectors;
+ function collect(items, selector, index) {
+ var i, l, fi, fl, item;
+ var filters = selector[index];
+ for (i = 0, l = items.length; i < l; i++) {
+ item = items[i];
+ for (fi = 0, fl = filters.length; fi < fl; fi++) {
+ if (!filters[fi](item, i, l)) {
+ fi = fl + 1;
+ break;
+ }
+ }
+ if (fi === fl) {
+ if (index === selector.length - 1) {
+ matches.push(item);
+ } else {
+ if (item.items) {
+ collect(item.items(), selector, index + 1);
+ }
+ }
+ } else if (filters.direct) {
+ return;
+ }
+ if (item.items) {
+ collect(item.items(), selector, index);
+ }
+ }
+ }
+ if (container.items) {
+ for (i = 0, l = selectors.length; i < l; i++) {
+ collect(container.items(), selectors[i], 0);
+ }
+ if (l > 1) {
+ matches = unique(matches);
+ }
+ }
+ if (!Collection) {
+ Collection = Selector.Collection;
+ }
+ return new Collection(matches);
+ }
+ });
+
+ var Collection$1;
+ var proto;
+ var push$1 = Array.prototype.push;
+ var slice$1 = Array.prototype.slice;
+ proto = {
+ length: 0,
+ init: function (items) {
+ if (items) {
+ this.add(items);
+ }
+ },
+ add: function (items) {
+ var self = this;
+ if (!global$2.isArray(items)) {
+ if (items instanceof Collection$1) {
+ self.add(items.toArray());
} else {
- render();
+ push$1.call(self, items);
+ }
+ } else {
+ push$1.apply(self, items);
+ }
+ return self;
+ },
+ set: function (items) {
+ var self = this;
+ var len = self.length;
+ var i;
+ self.length = 0;
+ self.add(items);
+ for (i = self.length; i < len; i++) {
+ delete self[i];
+ }
+ return self;
+ },
+ filter: function (selector) {
+ var self = this;
+ var i, l;
+ var matches = [];
+ var item, match;
+ if (typeof selector === 'string') {
+ selector = new Selector(selector);
+ match = function (item) {
+ return selector.match(item);
+ };
+ } else {
+ match = selector;
+ }
+ for (i = 0, l = self.length; i < l; i++) {
+ item = self[i];
+ if (match(item)) {
+ matches.push(item);
+ }
+ }
+ return new Collection$1(matches);
+ },
+ slice: function () {
+ return new Collection$1(slice$1.apply(this, arguments));
+ },
+ eq: function (index) {
+ return index === -1 ? this.slice(index) : this.slice(index, +index + 1);
+ },
+ each: function (callback) {
+ global$2.each(this, callback);
+ return this;
+ },
+ toArray: function () {
+ return global$2.toArray(this);
+ },
+ indexOf: function (ctrl) {
+ var self = this;
+ var i = self.length;
+ while (i--) {
+ if (self[i] === ctrl) {
+ break;
+ }
+ }
+ return i;
+ },
+ reverse: function () {
+ return new Collection$1(global$2.toArray(this).reverse());
+ },
+ hasClass: function (cls) {
+ return this[0] ? this[0].classes.contains(cls) : false;
+ },
+ prop: function (name, value) {
+ var self = this;
+ var item;
+ if (value !== undefined) {
+ self.each(function (item) {
+ if (item[name]) {
+ item[name](value);
+ }
+ });
+ return self;
+ }
+ item = self[0];
+ if (item && item[name]) {
+ return item[name]();
+ }
+ },
+ exec: function (name) {
+ var self = this, args = global$2.toArray(arguments).slice(1);
+ self.each(function (item) {
+ if (item[name]) {
+ item[name].apply(item, args);
}
});
-
- editor.on('blur hide', hide);
-
- // Remove the panel when the editor is removed
- editor.on('remove', function () {
- if (panel) {
- panel.remove();
- panel = null;
+ return self;
+ },
+ remove: function () {
+ var i = this.length;
+ while (i--) {
+ this[i].remove();
+ }
+ return this;
+ },
+ addClass: function (cls) {
+ return this.each(function (item) {
+ item.classes.add(cls);
+ });
+ },
+ removeClass: function (cls) {
+ return this.each(function (item) {
+ item.classes.remove(cls);
+ });
+ }
+ };
+ global$2.each('fire on off show hide append prepend before after reflow'.split(' '), function (name) {
+ proto[name] = function () {
+ var args = global$2.toArray(arguments);
+ this.each(function (ctrl) {
+ if (name in ctrl) {
+ ctrl[name].apply(ctrl, args);
}
});
+ return this;
+ };
+ });
+ global$2.each('text name disabled active selected checked visible parent value data'.split(' '), function (name) {
+ proto[name] = function (value) {
+ return this.prop(name, value);
+ };
+ });
+ Collection$1 = global$10.extend(proto);
+ Selector.Collection = Collection$1;
+ var Collection$2 = Collection$1;
- // Preload skin css
- if (args.skinUiCss) {
- DOM.styleSheetLoader.load(args.skinUiCss, SkinLoaded.fireSkinLoaded(editor));
+ var Binding = function (settings) {
+ this.create = settings.create;
+ };
+ Binding.create = function (model, name) {
+ return new Binding({
+ create: function (otherModel, otherName) {
+ var bindings;
+ var fromSelfToOther = function (e) {
+ otherModel.set(otherName, e.value);
+ };
+ var fromOtherToSelf = function (e) {
+ model.set(name, e.value);
+ };
+ otherModel.on('change:' + otherName, fromOtherToSelf);
+ model.on('change:' + name, fromSelfToOther);
+ bindings = otherModel._bindings;
+ if (!bindings) {
+ bindings = otherModel._bindings = [];
+ otherModel.on('destroy', function () {
+ var i = bindings.length;
+ while (i--) {
+ bindings[i]();
+ }
+ });
+ }
+ bindings.push(function () {
+ model.off('change:' + name, fromSelfToOther);
+ });
+ return model.get(name);
}
+ });
+ };
- return {};
- };
+ var global$12 = tinymce.util.Tools.resolve('tinymce.util.Observable');
- return {
- render: render
- };
+ function isNode(node) {
+ return node.nodeType > 0;
}
-);
-
-/**
- * ResolveGlobal.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2017 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.core.ui.Throbber',
- [
- 'global!tinymce.util.Tools.resolve'
- ],
- function (resolve) {
- return resolve('tinymce.ui.Throbber');
- }
-);
-
-/**
- * ProgressState.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.ui.ProgressState',
- [
- 'tinymce.core.ui.Throbber'
- ],
- function (Throbber) {
- var setup = function (editor, theme) {
- var throbber;
-
- editor.on('ProgressState', function (e) {
- throbber = throbber || new Throbber(theme.panel.getEl('body'));
-
- if (e.state) {
- throbber.show(e.time);
- } else {
- throbber.hide();
+ function isEqual(a, b) {
+ var k, checked;
+ if (a === b) {
+ return true;
+ }
+ if (a === null || b === null) {
+ return a === b;
+ }
+ if (typeof a !== 'object' || typeof b !== 'object') {
+ return a === b;
+ }
+ if (global$2.isArray(b)) {
+ if (a.length !== b.length) {
+ return false;
+ }
+ k = a.length;
+ while (k--) {
+ if (!isEqual(a[k], b[k])) {
+ return false;
}
+ }
+ }
+ if (isNode(a) || isNode(b)) {
+ return a === b;
+ }
+ checked = {};
+ for (k in b) {
+ if (!isEqual(a[k], b[k])) {
+ return false;
+ }
+ checked[k] = true;
+ }
+ for (k in a) {
+ if (!checked[k] && !isEqual(a[k], b[k])) {
+ return false;
+ }
+ }
+ return true;
+ }
+ var ObservableObject = global$10.extend({
+ Mixins: [global$12],
+ init: function (data) {
+ var name, value;
+ data = data || {};
+ for (name in data) {
+ value = data[name];
+ if (value instanceof Binding) {
+ data[name] = value.create(this, name);
+ }
+ }
+ this.data = data;
+ },
+ set: function (name, value) {
+ var key, args;
+ var oldValue = this.data[name];
+ if (value instanceof Binding) {
+ value = value.create(this, name);
+ }
+ if (typeof name === 'object') {
+ for (key in name) {
+ this.set(key, name[key]);
+ }
+ return this;
+ }
+ if (!isEqual(oldValue, value)) {
+ this.data[name] = value;
+ args = {
+ target: this,
+ name: name,
+ value: value,
+ oldValue: oldValue
+ };
+ this.fire('change:' + name, args);
+ this.fire('change', args);
+ }
+ return this;
+ },
+ get: function (name) {
+ return this.data[name];
+ },
+ has: function (name) {
+ return name in this.data;
+ },
+ bind: function (name) {
+ return Binding.create(this, name);
+ },
+ destroy: function () {
+ this.fire('destroy');
+ }
+ });
+
+ var dirtyCtrls = {};
+ var animationFrameRequested;
+ var $_p42hyuxjjgwefrk = {
+ add: function (ctrl) {
+ var parent$$1 = ctrl.parent();
+ if (parent$$1) {
+ if (!parent$$1._layout || parent$$1._layout.isNative()) {
+ return;
+ }
+ if (!dirtyCtrls[parent$$1._id]) {
+ dirtyCtrls[parent$$1._id] = parent$$1;
+ }
+ if (!animationFrameRequested) {
+ animationFrameRequested = true;
+ global$7.requestAnimationFrame(function () {
+ var id, ctrl;
+ animationFrameRequested = false;
+ for (id in dirtyCtrls) {
+ ctrl = dirtyCtrls[id];
+ if (ctrl.state.get('rendered')) {
+ ctrl.reflow();
+ }
+ }
+ dirtyCtrls = {};
+ }, document.body);
+ }
+ }
+ },
+ remove: function (ctrl) {
+ if (dirtyCtrls[ctrl._id]) {
+ delete dirtyCtrls[ctrl._id];
+ }
+ }
+ };
+
+ var hasMouseWheelEventSupport = 'onmousewheel' in document;
+ var hasWheelEventSupport = false;
+ var classPrefix = 'mce-';
+ var Control;
+ var idCounter = 0;
+ var proto$1 = {
+ Statics: { classPrefix: classPrefix },
+ isRtl: function () {
+ return Control.rtl;
+ },
+ classPrefix: classPrefix,
+ init: function (settings) {
+ var self$$1 = this;
+ var classes, defaultClasses;
+ function applyClasses(classes) {
+ var i;
+ classes = classes.split(' ');
+ for (i = 0; i < classes.length; i++) {
+ self$$1.classes.add(classes[i]);
+ }
+ }
+ self$$1.settings = settings = global$2.extend({}, self$$1.Defaults, settings);
+ self$$1._id = settings.id || 'mceu_' + idCounter++;
+ self$$1._aria = { role: settings.role };
+ self$$1._elmCache = {};
+ self$$1.$ = global$9;
+ self$$1.state = new ObservableObject({
+ visible: true,
+ active: false,
+ disabled: false,
+ value: ''
+ });
+ self$$1.data = new ObservableObject(settings.data);
+ self$$1.classes = new ClassList(function () {
+ if (self$$1.state.get('rendered')) {
+ self$$1.getEl().className = this.toString();
+ }
+ });
+ self$$1.classes.prefix = self$$1.classPrefix;
+ classes = settings.classes;
+ if (classes) {
+ if (self$$1.Defaults) {
+ defaultClasses = self$$1.Defaults.classes;
+ if (defaultClasses && classes !== defaultClasses) {
+ applyClasses(defaultClasses);
+ }
+ }
+ applyClasses(classes);
+ }
+ global$2.each('title text name visible disabled active value'.split(' '), function (name$$1) {
+ if (name$$1 in settings) {
+ self$$1[name$$1](settings[name$$1]);
+ }
+ });
+ self$$1.on('click', function () {
+ if (self$$1.disabled()) {
+ return false;
+ }
+ });
+ self$$1.settings = settings;
+ self$$1.borderBox = $_fbr241uqjjgwefqo.parseBox(settings.border);
+ self$$1.paddingBox = $_fbr241uqjjgwefqo.parseBox(settings.padding);
+ self$$1.marginBox = $_fbr241uqjjgwefqo.parseBox(settings.margin);
+ if (settings.hidden) {
+ self$$1.hide();
+ }
+ },
+ Properties: 'parent,name',
+ getContainerElm: function () {
+ var uiContainer = $_6344qfu4jjgwefnr.getUiContainer(this);
+ return uiContainer ? uiContainer : funcs.getContainer();
+ },
+ getParentCtrl: function (elm) {
+ var ctrl;
+ var lookup = this.getRoot().controlIdLookup;
+ while (elm && lookup) {
+ ctrl = lookup[elm.id];
+ if (ctrl) {
+ break;
+ }
+ elm = elm.parentNode;
+ }
+ return ctrl;
+ },
+ initLayoutRect: function () {
+ var self$$1 = this;
+ var settings = self$$1.settings;
+ var borderBox, layoutRect;
+ var elm = self$$1.getEl();
+ var width, height, minWidth, minHeight, autoResize;
+ var startMinWidth, startMinHeight, initialSize;
+ borderBox = self$$1.borderBox = self$$1.borderBox || $_fbr241uqjjgwefqo.measureBox(elm, 'border');
+ self$$1.paddingBox = self$$1.paddingBox || $_fbr241uqjjgwefqo.measureBox(elm, 'padding');
+ self$$1.marginBox = self$$1.marginBox || $_fbr241uqjjgwefqo.measureBox(elm, 'margin');
+ initialSize = funcs.getSize(elm);
+ startMinWidth = settings.minWidth;
+ startMinHeight = settings.minHeight;
+ minWidth = startMinWidth || initialSize.width;
+ minHeight = startMinHeight || initialSize.height;
+ width = settings.width;
+ height = settings.height;
+ autoResize = settings.autoResize;
+ autoResize = typeof autoResize !== 'undefined' ? autoResize : !width && !height;
+ width = width || minWidth;
+ height = height || minHeight;
+ var deltaW = borderBox.left + borderBox.right;
+ var deltaH = borderBox.top + borderBox.bottom;
+ var maxW = settings.maxWidth || 65535;
+ var maxH = settings.maxHeight || 65535;
+ self$$1._layoutRect = layoutRect = {
+ x: settings.x || 0,
+ y: settings.y || 0,
+ w: width,
+ h: height,
+ deltaW: deltaW,
+ deltaH: deltaH,
+ contentW: width - deltaW,
+ contentH: height - deltaH,
+ innerW: width - deltaW,
+ innerH: height - deltaH,
+ startMinWidth: startMinWidth || 0,
+ startMinHeight: startMinHeight || 0,
+ minW: Math.min(minWidth, maxW),
+ minH: Math.min(minHeight, maxH),
+ maxW: maxW,
+ maxH: maxH,
+ autoResize: autoResize,
+ scrollW: 0
+ };
+ self$$1._lastLayoutRect = {};
+ return layoutRect;
+ },
+ layoutRect: function (newRect) {
+ var self$$1 = this;
+ var curRect = self$$1._layoutRect, lastLayoutRect, size, deltaWidth, deltaHeight, repaintControls;
+ if (!curRect) {
+ curRect = self$$1.initLayoutRect();
+ }
+ if (newRect) {
+ deltaWidth = curRect.deltaW;
+ deltaHeight = curRect.deltaH;
+ if (newRect.x !== undefined) {
+ curRect.x = newRect.x;
+ }
+ if (newRect.y !== undefined) {
+ curRect.y = newRect.y;
+ }
+ if (newRect.minW !== undefined) {
+ curRect.minW = newRect.minW;
+ }
+ if (newRect.minH !== undefined) {
+ curRect.minH = newRect.minH;
+ }
+ size = newRect.w;
+ if (size !== undefined) {
+ size = size < curRect.minW ? curRect.minW : size;
+ size = size > curRect.maxW ? curRect.maxW : size;
+ curRect.w = size;
+ curRect.innerW = size - deltaWidth;
+ }
+ size = newRect.h;
+ if (size !== undefined) {
+ size = size < curRect.minH ? curRect.minH : size;
+ size = size > curRect.maxH ? curRect.maxH : size;
+ curRect.h = size;
+ curRect.innerH = size - deltaHeight;
+ }
+ size = newRect.innerW;
+ if (size !== undefined) {
+ size = size < curRect.minW - deltaWidth ? curRect.minW - deltaWidth : size;
+ size = size > curRect.maxW - deltaWidth ? curRect.maxW - deltaWidth : size;
+ curRect.innerW = size;
+ curRect.w = size + deltaWidth;
+ }
+ size = newRect.innerH;
+ if (size !== undefined) {
+ size = size < curRect.minH - deltaHeight ? curRect.minH - deltaHeight : size;
+ size = size > curRect.maxH - deltaHeight ? curRect.maxH - deltaHeight : size;
+ curRect.innerH = size;
+ curRect.h = size + deltaHeight;
+ }
+ if (newRect.contentW !== undefined) {
+ curRect.contentW = newRect.contentW;
+ }
+ if (newRect.contentH !== undefined) {
+ curRect.contentH = newRect.contentH;
+ }
+ lastLayoutRect = self$$1._lastLayoutRect;
+ if (lastLayoutRect.x !== curRect.x || lastLayoutRect.y !== curRect.y || lastLayoutRect.w !== curRect.w || lastLayoutRect.h !== curRect.h) {
+ repaintControls = Control.repaintControls;
+ if (repaintControls) {
+ if (repaintControls.map && !repaintControls.map[self$$1._id]) {
+ repaintControls.push(self$$1);
+ repaintControls.map[self$$1._id] = true;
+ }
+ }
+ lastLayoutRect.x = curRect.x;
+ lastLayoutRect.y = curRect.y;
+ lastLayoutRect.w = curRect.w;
+ lastLayoutRect.h = curRect.h;
+ }
+ return self$$1;
+ }
+ return curRect;
+ },
+ repaint: function () {
+ var self$$1 = this;
+ var style, bodyStyle, bodyElm, rect, borderBox;
+ var borderW, borderH, lastRepaintRect, round, value;
+ round = !document.createRange ? Math.round : function (value) {
+ return value;
+ };
+ style = self$$1.getEl().style;
+ rect = self$$1._layoutRect;
+ lastRepaintRect = self$$1._lastRepaintRect || {};
+ borderBox = self$$1.borderBox;
+ borderW = borderBox.left + borderBox.right;
+ borderH = borderBox.top + borderBox.bottom;
+ if (rect.x !== lastRepaintRect.x) {
+ style.left = round(rect.x) + 'px';
+ lastRepaintRect.x = rect.x;
+ }
+ if (rect.y !== lastRepaintRect.y) {
+ style.top = round(rect.y) + 'px';
+ lastRepaintRect.y = rect.y;
+ }
+ if (rect.w !== lastRepaintRect.w) {
+ value = round(rect.w - borderW);
+ style.width = (value >= 0 ? value : 0) + 'px';
+ lastRepaintRect.w = rect.w;
+ }
+ if (rect.h !== lastRepaintRect.h) {
+ value = round(rect.h - borderH);
+ style.height = (value >= 0 ? value : 0) + 'px';
+ lastRepaintRect.h = rect.h;
+ }
+ if (self$$1._hasBody && rect.innerW !== lastRepaintRect.innerW) {
+ value = round(rect.innerW);
+ bodyElm = self$$1.getEl('body');
+ if (bodyElm) {
+ bodyStyle = bodyElm.style;
+ bodyStyle.width = (value >= 0 ? value : 0) + 'px';
+ }
+ lastRepaintRect.innerW = rect.innerW;
+ }
+ if (self$$1._hasBody && rect.innerH !== lastRepaintRect.innerH) {
+ value = round(rect.innerH);
+ bodyElm = bodyElm || self$$1.getEl('body');
+ if (bodyElm) {
+ bodyStyle = bodyStyle || bodyElm.style;
+ bodyStyle.height = (value >= 0 ? value : 0) + 'px';
+ }
+ lastRepaintRect.innerH = rect.innerH;
+ }
+ self$$1._lastRepaintRect = lastRepaintRect;
+ self$$1.fire('repaint', {}, false);
+ },
+ updateLayoutRect: function () {
+ var self$$1 = this;
+ self$$1.parent()._lastRect = null;
+ funcs.css(self$$1.getEl(), {
+ width: '',
+ height: ''
+ });
+ self$$1._layoutRect = self$$1._lastRepaintRect = self$$1._lastLayoutRect = null;
+ self$$1.initLayoutRect();
+ },
+ on: function (name$$1, callback) {
+ var self$$1 = this;
+ function resolveCallbackName(name$$1) {
+ var callback, scope;
+ if (typeof name$$1 !== 'string') {
+ return name$$1;
+ }
+ return function (e) {
+ if (!callback) {
+ self$$1.parentsAndSelf().each(function (ctrl) {
+ var callbacks = ctrl.settings.callbacks;
+ if (callbacks && (callback = callbacks[name$$1])) {
+ scope = ctrl;
+ return false;
+ }
+ });
+ }
+ if (!callback) {
+ e.action = name$$1;
+ this.fire('execute', e);
+ return;
+ }
+ return callback.call(scope, e);
+ };
+ }
+ getEventDispatcher(self$$1).on(name$$1, resolveCallbackName(callback));
+ return self$$1;
+ },
+ off: function (name$$1, callback) {
+ getEventDispatcher(this).off(name$$1, callback);
+ return this;
+ },
+ fire: function (name$$1, args, bubble) {
+ var self$$1 = this;
+ args = args || {};
+ if (!args.control) {
+ args.control = self$$1;
+ }
+ args = getEventDispatcher(self$$1).fire(name$$1, args);
+ if (bubble !== false && self$$1.parent) {
+ var parent$$1 = self$$1.parent();
+ while (parent$$1 && !args.isPropagationStopped()) {
+ parent$$1.fire(name$$1, args, false);
+ parent$$1 = parent$$1.parent();
+ }
+ }
+ return args;
+ },
+ hasEventListeners: function (name$$1) {
+ return getEventDispatcher(this).has(name$$1);
+ },
+ parents: function (selector) {
+ var self$$1 = this;
+ var ctrl, parents = new Collection$2();
+ for (ctrl = self$$1.parent(); ctrl; ctrl = ctrl.parent()) {
+ parents.add(ctrl);
+ }
+ if (selector) {
+ parents = parents.filter(selector);
+ }
+ return parents;
+ },
+ parentsAndSelf: function (selector) {
+ return new Collection$2(this).add(this.parents(selector));
+ },
+ next: function () {
+ var parentControls = this.parent().items();
+ return parentControls[parentControls.indexOf(this) + 1];
+ },
+ prev: function () {
+ var parentControls = this.parent().items();
+ return parentControls[parentControls.indexOf(this) - 1];
+ },
+ innerHtml: function (html) {
+ this.$el.html(html);
+ return this;
+ },
+ getEl: function (suffix) {
+ var id = suffix ? this._id + '-' + suffix : this._id;
+ if (!this._elmCache[id]) {
+ this._elmCache[id] = global$9('#' + id)[0];
+ }
+ return this._elmCache[id];
+ },
+ show: function () {
+ return this.visible(true);
+ },
+ hide: function () {
+ return this.visible(false);
+ },
+ focus: function () {
+ try {
+ this.getEl().focus();
+ } catch (ex) {
+ }
+ return this;
+ },
+ blur: function () {
+ this.getEl().blur();
+ return this;
+ },
+ aria: function (name$$1, value) {
+ var self$$1 = this, elm = self$$1.getEl(self$$1.ariaTarget);
+ if (typeof value === 'undefined') {
+ return self$$1._aria[name$$1];
+ }
+ self$$1._aria[name$$1] = value;
+ if (self$$1.state.get('rendered')) {
+ elm.setAttribute(name$$1 === 'role' ? name$$1 : 'aria-' + name$$1, value);
+ }
+ return self$$1;
+ },
+ encode: function (text, translate) {
+ if (translate !== false) {
+ text = this.translate(text);
+ }
+ return (text || '').replace(/[&<>"]/g, function (match) {
+ return '&#' + match.charCodeAt(0) + ';';
+ });
+ },
+ translate: function (text) {
+ return Control.translate ? Control.translate(text) : text;
+ },
+ before: function (items) {
+ var self$$1 = this, parent$$1 = self$$1.parent();
+ if (parent$$1) {
+ parent$$1.insert(items, parent$$1.items().indexOf(self$$1), true);
+ }
+ return self$$1;
+ },
+ after: function (items) {
+ var self$$1 = this, parent$$1 = self$$1.parent();
+ if (parent$$1) {
+ parent$$1.insert(items, parent$$1.items().indexOf(self$$1));
+ }
+ return self$$1;
+ },
+ remove: function () {
+ var self$$1 = this;
+ var elm = self$$1.getEl();
+ var parent$$1 = self$$1.parent();
+ var newItems, i;
+ if (self$$1.items) {
+ var controls = self$$1.items().toArray();
+ i = controls.length;
+ while (i--) {
+ controls[i].remove();
+ }
+ }
+ if (parent$$1 && parent$$1.items) {
+ newItems = [];
+ parent$$1.items().each(function (item) {
+ if (item !== self$$1) {
+ newItems.push(item);
+ }
+ });
+ parent$$1.items().set(newItems);
+ parent$$1._lastRect = null;
+ }
+ if (self$$1._eventsRoot && self$$1._eventsRoot === self$$1) {
+ global$9(elm).off();
+ }
+ var lookup = self$$1.getRoot().controlIdLookup;
+ if (lookup) {
+ delete lookup[self$$1._id];
+ }
+ if (elm && elm.parentNode) {
+ elm.parentNode.removeChild(elm);
+ }
+ self$$1.state.set('rendered', false);
+ self$$1.state.destroy();
+ self$$1.fire('remove');
+ return self$$1;
+ },
+ renderBefore: function (elm) {
+ global$9(elm).before(this.renderHtml());
+ this.postRender();
+ return this;
+ },
+ renderTo: function (elm) {
+ global$9(elm || this.getContainerElm()).append(this.renderHtml());
+ this.postRender();
+ return this;
+ },
+ preRender: function () {
+ },
+ render: function () {
+ },
+ renderHtml: function () {
+ return '<div id="' + this._id + '" class="' + this.classes + '"></div>';
+ },
+ postRender: function () {
+ var self$$1 = this;
+ var settings = self$$1.settings;
+ var elm, box, parent$$1, name$$1, parentEventsRoot;
+ self$$1.$el = global$9(self$$1.getEl());
+ self$$1.state.set('rendered', true);
+ for (name$$1 in settings) {
+ if (name$$1.indexOf('on') === 0) {
+ self$$1.on(name$$1.substr(2), settings[name$$1]);
+ }
+ }
+ if (self$$1._eventsRoot) {
+ for (parent$$1 = self$$1.parent(); !parentEventsRoot && parent$$1; parent$$1 = parent$$1.parent()) {
+ parentEventsRoot = parent$$1._eventsRoot;
+ }
+ if (parentEventsRoot) {
+ for (name$$1 in parentEventsRoot._nativeEvents) {
+ self$$1._nativeEvents[name$$1] = true;
+ }
+ }
+ }
+ bindPendingEvents(self$$1);
+ if (settings.style) {
+ elm = self$$1.getEl();
+ if (elm) {
+ elm.setAttribute('style', settings.style);
+ elm.style.cssText = settings.style;
+ }
+ }
+ if (self$$1.settings.border) {
+ box = self$$1.borderBox;
+ self$$1.$el.css({
+ 'border-top-width': box.top,
+ 'border-right-width': box.right,
+ 'border-bottom-width': box.bottom,
+ 'border-left-width': box.left
+ });
+ }
+ var root = self$$1.getRoot();
+ if (!root.controlIdLookup) {
+ root.controlIdLookup = {};
+ }
+ root.controlIdLookup[self$$1._id] = self$$1;
+ for (var key in self$$1._aria) {
+ self$$1.aria(key, self$$1._aria[key]);
+ }
+ if (self$$1.state.get('visible') === false) {
+ self$$1.getEl().style.display = 'none';
+ }
+ self$$1.bindStates();
+ self$$1.state.on('change:visible', function (e) {
+ var state = e.value;
+ var parentCtrl;
+ if (self$$1.state.get('rendered')) {
+ self$$1.getEl().style.display = state === false ? 'none' : '';
+ self$$1.getEl().getBoundingClientRect();
+ }
+ parentCtrl = self$$1.parent();
+ if (parentCtrl) {
+ parentCtrl._lastRect = null;
+ }
+ self$$1.fire(state ? 'show' : 'hide');
+ $_p42hyuxjjgwefrk.add(self$$1);
+ });
+ self$$1.fire('postrender', {}, false);
+ },
+ bindStates: function () {
+ },
+ scrollIntoView: function (align) {
+ function getOffset(elm, rootElm) {
+ var x, y, parent$$1 = elm;
+ x = y = 0;
+ while (parent$$1 && parent$$1 !== rootElm && parent$$1.nodeType) {
+ x += parent$$1.offsetLeft || 0;
+ y += parent$$1.offsetTop || 0;
+ parent$$1 = parent$$1.offsetParent;
+ }
+ return {
+ x: x,
+ y: y
+ };
+ }
+ var elm = this.getEl(), parentElm = elm.parentNode;
+ var x, y, width, height, parentWidth, parentHeight;
+ var pos = getOffset(elm, parentElm);
+ x = pos.x;
+ y = pos.y;
+ width = elm.offsetWidth;
+ height = elm.offsetHeight;
+ parentWidth = parentElm.clientWidth;
+ parentHeight = parentElm.clientHeight;
+ if (align === 'end') {
+ x -= parentWidth - width;
+ y -= parentHeight - height;
+ } else if (align === 'center') {
+ x -= parentWidth / 2 - width / 2;
+ y -= parentHeight / 2 - height / 2;
+ }
+ parentElm.scrollLeft = x;
+ parentElm.scrollTop = y;
+ return this;
+ },
+ getRoot: function () {
+ var ctrl = this, rootControl;
+ var parents = [];
+ while (ctrl) {
+ if (ctrl.rootControl) {
+ rootControl = ctrl.rootControl;
+ break;
+ }
+ parents.push(ctrl);
+ rootControl = ctrl;
+ ctrl = ctrl.parent();
+ }
+ if (!rootControl) {
+ rootControl = this;
+ }
+ var i = parents.length;
+ while (i--) {
+ parents[i].rootControl = rootControl;
+ }
+ return rootControl;
+ },
+ reflow: function () {
+ $_p42hyuxjjgwefrk.remove(this);
+ var parent$$1 = this.parent();
+ if (parent$$1 && parent$$1._layout && !parent$$1._layout.isNative()) {
+ parent$$1.reflow();
+ }
+ return this;
+ }
+ };
+ global$2.each('text title visible disabled active value'.split(' '), function (name$$1) {
+ proto$1[name$$1] = function (value) {
+ if (arguments.length === 0) {
+ return this.state.get(name$$1);
+ }
+ if (typeof value !== 'undefined') {
+ this.state.set(name$$1, value);
+ }
+ return this;
+ };
+ });
+ Control = global$10.extend(proto$1);
+ function getEventDispatcher(obj) {
+ if (!obj._eventDispatcher) {
+ obj._eventDispatcher = new global$11({
+ scope: obj,
+ toggleEvent: function (name$$1, state) {
+ if (state && global$11.isNative(name$$1)) {
+ if (!obj._nativeEvents) {
+ obj._nativeEvents = {};
+ }
+ obj._nativeEvents[name$$1] = true;
+ if (obj.state.get('rendered')) {
+ bindPendingEvents(obj);
+ }
+ }
+ }
+ });
+ }
+ return obj._eventDispatcher;
+ }
+ function bindPendingEvents(eventCtrl) {
+ var i, l, parents, eventRootCtrl, nativeEvents, name$$1;
+ function delegate(e) {
+ var control = eventCtrl.getParentCtrl(e.target);
+ if (control) {
+ control.fire(e.type, e);
+ }
+ }
+ function mouseLeaveHandler() {
+ var ctrl = eventRootCtrl._lastHoverCtrl;
+ if (ctrl) {
+ ctrl.fire('mouseleave', { target: ctrl.getEl() });
+ ctrl.parents().each(function (ctrl) {
+ ctrl.fire('mouseleave', { target: ctrl.getEl() });
+ });
+ eventRootCtrl._lastHoverCtrl = null;
+ }
+ }
+ function mouseEnterHandler(e) {
+ var ctrl = eventCtrl.getParentCtrl(e.target), lastCtrl = eventRootCtrl._lastHoverCtrl, idx = 0, i, parents, lastParents;
+ if (ctrl !== lastCtrl) {
+ eventRootCtrl._lastHoverCtrl = ctrl;
+ parents = ctrl.parents().toArray().reverse();
+ parents.push(ctrl);
+ if (lastCtrl) {
+ lastParents = lastCtrl.parents().toArray().reverse();
+ lastParents.push(lastCtrl);
+ for (idx = 0; idx < lastParents.length; idx++) {
+ if (parents[idx] !== lastParents[idx]) {
+ break;
+ }
+ }
+ for (i = lastParents.length - 1; i >= idx; i--) {
+ lastCtrl = lastParents[i];
+ lastCtrl.fire('mouseleave', { target: lastCtrl.getEl() });
+ }
+ }
+ for (i = idx; i < parents.length; i++) {
+ ctrl = parents[i];
+ ctrl.fire('mouseenter', { target: ctrl.getEl() });
+ }
+ }
+ }
+ function fixWheelEvent(e) {
+ e.preventDefault();
+ if (e.type === 'mousewheel') {
+ e.deltaY = -1 / 40 * e.wheelDelta;
+ if (e.wheelDeltaX) {
+ e.deltaX = -1 / 40 * e.wheelDeltaX;
+ }
+ } else {
+ e.deltaX = 0;
+ e.deltaY = e.detail;
+ }
+ e = eventCtrl.fire('wheel', e);
+ }
+ nativeEvents = eventCtrl._nativeEvents;
+ if (nativeEvents) {
+ parents = eventCtrl.parents().toArray();
+ parents.unshift(eventCtrl);
+ for (i = 0, l = parents.length; !eventRootCtrl && i < l; i++) {
+ eventRootCtrl = parents[i]._eventsRoot;
+ }
+ if (!eventRootCtrl) {
+ eventRootCtrl = parents[parents.length - 1] || eventCtrl;
+ }
+ eventCtrl._eventsRoot = eventRootCtrl;
+ for (l = i, i = 0; i < l; i++) {
+ parents[i]._eventsRoot = eventRootCtrl;
+ }
+ var eventRootDelegates = eventRootCtrl._delegates;
+ if (!eventRootDelegates) {
+ eventRootDelegates = eventRootCtrl._delegates = {};
+ }
+ for (name$$1 in nativeEvents) {
+ if (!nativeEvents) {
+ return false;
+ }
+ if (name$$1 === 'wheel' && !hasWheelEventSupport) {
+ if (hasMouseWheelEventSupport) {
+ global$9(eventCtrl.getEl()).on('mousewheel', fixWheelEvent);
+ } else {
+ global$9(eventCtrl.getEl()).on('DOMMouseScroll', fixWheelEvent);
+ }
+ continue;
+ }
+ if (name$$1 === 'mouseenter' || name$$1 === 'mouseleave') {
+ if (!eventRootCtrl._hasMouseEnter) {
+ global$9(eventRootCtrl.getEl()).on('mouseleave', mouseLeaveHandler).on('mouseover', mouseEnterHandler);
+ eventRootCtrl._hasMouseEnter = 1;
+ }
+ } else if (!eventRootDelegates[name$$1]) {
+ global$9(eventRootCtrl.getEl()).on(name$$1, delegate);
+ eventRootDelegates[name$$1] = true;
+ }
+ nativeEvents[name$$1] = false;
+ }
+ }
+ }
+ var Control$1 = Control;
+
+ var hasTabstopData = function (elm) {
+ return elm.getAttribute('data-mce-tabstop') ? true : false;
+ };
+ function KeyboardNavigation (settings) {
+ var root = settings.root;
+ var focusedElement, focusedControl;
+ function isElement(node) {
+ return node && node.nodeType === 1;
+ }
+ try {
+ focusedElement = document.activeElement;
+ } catch (ex) {
+ focusedElement = document.body;
+ }
+ focusedControl = root.getParentCtrl(focusedElement);
+ function getRole(elm) {
+ elm = elm || focusedElement;
+ if (isElement(elm)) {
+ return elm.getAttribute('role');
+ }
+ return null;
+ }
+ function getParentRole(elm) {
+ var role, parent$$1 = elm || focusedElement;
+ while (parent$$1 = parent$$1.parentNode) {
+ if (role = getRole(parent$$1)) {
+ return role;
+ }
+ }
+ }
+ function getAriaProp(name$$1) {
+ var elm = focusedElement;
+ if (isElement(elm)) {
+ return elm.getAttribute('aria-' + name$$1);
+ }
+ }
+ function isTextInputElement(elm) {
+ var tagName = elm.tagName.toUpperCase();
+ return tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT';
+ }
+ function canFocus(elm) {
+ if (isTextInputElement(elm) && !elm.hidden) {
+ return true;
+ }
+ if (hasTabstopData(elm)) {
+ return true;
+ }
+ if (/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(getRole(elm))) {
+ return true;
+ }
+ return false;
+ }
+ function getFocusElements(elm) {
+ var elements = [];
+ function collect(elm) {
+ if (elm.nodeType !== 1 || elm.style.display === 'none' || elm.disabled) {
+ return;
+ }
+ if (canFocus(elm)) {
+ elements.push(elm);
+ }
+ for (var i = 0; i < elm.childNodes.length; i++) {
+ collect(elm.childNodes[i]);
+ }
+ }
+ collect(elm || root.getEl());
+ return elements;
+ }
+ function getNavigationRoot(targetControl) {
+ var navigationRoot, controls;
+ targetControl = targetControl || focusedControl;
+ controls = targetControl.parents().toArray();
+ controls.unshift(targetControl);
+ for (var i = 0; i < controls.length; i++) {
+ navigationRoot = controls[i];
+ if (navigationRoot.settings.ariaRoot) {
+ break;
+ }
+ }
+ return navigationRoot;
+ }
+ function focusFirst(targetControl) {
+ var navigationRoot = getNavigationRoot(targetControl);
+ var focusElements = getFocusElements(navigationRoot.getEl());
+ if (navigationRoot.settings.ariaRemember && 'lastAriaIndex' in navigationRoot) {
+ moveFocusToIndex(navigationRoot.lastAriaIndex, focusElements);
+ } else {
+ moveFocusToIndex(0, focusElements);
+ }
+ }
+ function moveFocusToIndex(idx, elements) {
+ if (idx < 0) {
+ idx = elements.length - 1;
+ } else if (idx >= elements.length) {
+ idx = 0;
+ }
+ if (elements[idx]) {
+ elements[idx].focus();
+ }
+ return idx;
+ }
+ function moveFocus(dir, elements) {
+ var idx = -1;
+ var navigationRoot = getNavigationRoot();
+ elements = elements || getFocusElements(navigationRoot.getEl());
+ for (var i = 0; i < elements.length; i++) {
+ if (elements[i] === focusedElement) {
+ idx = i;
+ }
+ }
+ idx += dir;
+ navigationRoot.lastAriaIndex = moveFocusToIndex(idx, elements);
+ }
+ function left() {
+ var parentRole = getParentRole();
+ if (parentRole === 'tablist') {
+ moveFocus(-1, getFocusElements(focusedElement.parentNode));
+ } else if (focusedControl.parent().submenu) {
+ cancel();
+ } else {
+ moveFocus(-1);
+ }
+ }
+ function right() {
+ var role = getRole(), parentRole = getParentRole();
+ if (parentRole === 'tablist') {
+ moveFocus(1, getFocusElements(focusedElement.parentNode));
+ } else if (role === 'menuitem' && parentRole === 'menu' && getAriaProp('haspopup')) {
+ enter();
+ } else {
+ moveFocus(1);
+ }
+ }
+ function up() {
+ moveFocus(-1);
+ }
+ function down() {
+ var role = getRole(), parentRole = getParentRole();
+ if (role === 'menuitem' && parentRole === 'menubar') {
+ enter();
+ } else if (role === 'button' && getAriaProp('haspopup')) {
+ enter({ key: 'down' });
+ } else {
+ moveFocus(1);
+ }
+ }
+ function tab(e) {
+ var parentRole = getParentRole();
+ if (parentRole === 'tablist') {
+ var elm = getFocusElements(focusedControl.getEl('body'))[0];
+ if (elm) {
+ elm.focus();
+ }
+ } else {
+ moveFocus(e.shiftKey ? -1 : 1);
+ }
+ }
+ function cancel() {
+ focusedControl.fire('cancel');
+ }
+ function enter(aria) {
+ aria = aria || {};
+ focusedControl.fire('click', {
+ target: focusedElement,
+ aria: aria
+ });
+ }
+ root.on('keydown', function (e) {
+ function handleNonTabOrEscEvent(e, handler) {
+ if (isTextInputElement(focusedElement) || hasTabstopData(focusedElement)) {
+ return;
+ }
+ if (getRole(focusedElement) === 'slider') {
+ return;
+ }
+ if (handler(e) !== false) {
+ e.preventDefault();
+ }
+ }
+ if (e.isDefaultPrevented()) {
+ return;
+ }
+ switch (e.keyCode) {
+ case 37:
+ handleNonTabOrEscEvent(e, left);
+ break;
+ case 39:
+ handleNonTabOrEscEvent(e, right);
+ break;
+ case 38:
+ handleNonTabOrEscEvent(e, up);
+ break;
+ case 40:
+ handleNonTabOrEscEvent(e, down);
+ break;
+ case 27:
+ cancel();
+ break;
+ case 14:
+ case 13:
+ case 32:
+ handleNonTabOrEscEvent(e, enter);
+ break;
+ case 9:
+ tab(e);
+ e.preventDefault();
+ break;
+ }
+ });
+ root.on('focusin', function (e) {
+ focusedElement = e.target;
+ focusedControl = e.control;
+ });
+ return { focusFirst: focusFirst };
+ }
+
+ var selectorCache = {};
+ var Container = Control$1.extend({
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ settings = self.settings;
+ if (settings.fixed) {
+ self.state.set('fixed', true);
+ }
+ self._items = new Collection$2();
+ if (self.isRtl()) {
+ self.classes.add('rtl');
+ }
+ self.bodyClasses = new ClassList(function () {
+ if (self.state.get('rendered')) {
+ self.getEl('body').className = this.toString();
+ }
+ });
+ self.bodyClasses.prefix = self.classPrefix;
+ self.classes.add('container');
+ self.bodyClasses.add('container-body');
+ if (settings.containerCls) {
+ self.classes.add(settings.containerCls);
+ }
+ self._layout = global$4.create((settings.layout || '') + 'layout');
+ if (self.settings.items) {
+ self.add(self.settings.items);
+ } else {
+ self.add(self.render());
+ }
+ self._hasBody = true;
+ },
+ items: function () {
+ return this._items;
+ },
+ find: function (selector) {
+ selector = selectorCache[selector] = selectorCache[selector] || new Selector(selector);
+ return selector.find(this);
+ },
+ add: function (items) {
+ var self = this;
+ self.items().add(self.create(items)).parent(self);
+ return self;
+ },
+ focus: function (keyboard) {
+ var self = this;
+ var focusCtrl, keyboardNav, items;
+ if (keyboard) {
+ keyboardNav = self.keyboardNav || self.parents().eq(-1)[0].keyboardNav;
+ if (keyboardNav) {
+ keyboardNav.focusFirst(self);
+ return;
+ }
+ }
+ items = self.find('*');
+ if (self.statusbar) {
+ items.add(self.statusbar.items());
+ }
+ items.each(function (ctrl) {
+ if (ctrl.settings.autofocus) {
+ focusCtrl = null;
+ return false;
+ }
+ if (ctrl.canFocus) {
+ focusCtrl = focusCtrl || ctrl;
+ }
+ });
+ if (focusCtrl) {
+ focusCtrl.focus();
+ }
+ return self;
+ },
+ replace: function (oldItem, newItem) {
+ var ctrlElm;
+ var items = this.items();
+ var i = items.length;
+ while (i--) {
+ if (items[i] === oldItem) {
+ items[i] = newItem;
+ break;
+ }
+ }
+ if (i >= 0) {
+ ctrlElm = newItem.getEl();
+ if (ctrlElm) {
+ ctrlElm.parentNode.removeChild(ctrlElm);
+ }
+ ctrlElm = oldItem.getEl();
+ if (ctrlElm) {
+ ctrlElm.parentNode.removeChild(ctrlElm);
+ }
+ }
+ newItem.parent(this);
+ },
+ create: function (items) {
+ var self = this;
+ var settings;
+ var ctrlItems = [];
+ if (!global$2.isArray(items)) {
+ items = [items];
+ }
+ global$2.each(items, function (item) {
+ if (item) {
+ if (!(item instanceof Control$1)) {
+ if (typeof item === 'string') {
+ item = { type: item };
+ }
+ settings = global$2.extend({}, self.settings.defaults, item);
+ item.type = settings.type = settings.type || item.type || self.settings.defaultType || (settings.defaults ? settings.defaults.type : null);
+ item = global$4.create(settings);
+ }
+ ctrlItems.push(item);
+ }
+ });
+ return ctrlItems;
+ },
+ renderNew: function () {
+ var self = this;
+ self.items().each(function (ctrl, index) {
+ var containerElm;
+ ctrl.parent(self);
+ if (!ctrl.state.get('rendered')) {
+ containerElm = self.getEl('body');
+ if (containerElm.hasChildNodes() && index <= containerElm.childNodes.length - 1) {
+ global$9(containerElm.childNodes[index]).before(ctrl.renderHtml());
+ } else {
+ global$9(containerElm).append(ctrl.renderHtml());
+ }
+ ctrl.postRender();
+ $_p42hyuxjjgwefrk.add(ctrl);
+ }
+ });
+ self._layout.applyClasses(self.items().filter(':visible'));
+ self._lastRect = null;
+ return self;
+ },
+ append: function (items) {
+ return this.add(items).renderNew();
+ },
+ prepend: function (items) {
+ var self = this;
+ self.items().set(self.create(items).concat(self.items().toArray()));
+ return self.renderNew();
+ },
+ insert: function (items, index, before) {
+ var self = this;
+ var curItems, beforeItems, afterItems;
+ items = self.create(items);
+ curItems = self.items();
+ if (!before && index < curItems.length - 1) {
+ index += 1;
+ }
+ if (index >= 0 && index < curItems.length) {
+ beforeItems = curItems.slice(0, index).toArray();
+ afterItems = curItems.slice(index).toArray();
+ curItems.set(beforeItems.concat(items, afterItems));
+ }
+ return self.renderNew();
+ },
+ fromJSON: function (data) {
+ var self = this;
+ for (var name in data) {
+ self.find('#' + name).value(data[name]);
+ }
+ return self;
+ },
+ toJSON: function () {
+ var self = this, data = {};
+ self.find('*').each(function (ctrl) {
+ var name = ctrl.name(), value = ctrl.value();
+ if (name && typeof value !== 'undefined') {
+ data[name] = value;
+ }
+ });
+ return data;
+ },
+ renderHtml: function () {
+ var self = this, layout = self._layout, role = this.settings.role;
+ self.preRender();
+ layout.preRender(self);
+ return '<div id="' + self._id + '" class="' + self.classes + '"' + (role ? ' role="' + this.settings.role + '"' : '') + '>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ var box;
+ self.items().exec('postRender');
+ self._super();
+ self._layout.postRender(self);
+ self.state.set('rendered', true);
+ if (self.settings.style) {
+ self.$el.css(self.settings.style);
+ }
+ if (self.settings.border) {
+ box = self.borderBox;
+ self.$el.css({
+ 'border-top-width': box.top,
+ 'border-right-width': box.right,
+ 'border-bottom-width': box.bottom,
+ 'border-left-width': box.left
+ });
+ }
+ if (!self.parent()) {
+ self.keyboardNav = KeyboardNavigation({ root: self });
+ }
+ return self;
+ },
+ initLayoutRect: function () {
+ var self = this, layoutRect = self._super();
+ self._layout.recalc(self);
+ return layoutRect;
+ },
+ recalc: function () {
+ var self = this;
+ var rect = self._layoutRect;
+ var lastRect = self._lastRect;
+ if (!lastRect || lastRect.w !== rect.w || lastRect.h !== rect.h) {
+ self._layout.recalc(self);
+ rect = self.layoutRect();
+ self._lastRect = {
+ x: rect.x,
+ y: rect.y,
+ w: rect.w,
+ h: rect.h
+ };
+ return true;
+ }
+ },
+ reflow: function () {
+ var i;
+ $_p42hyuxjjgwefrk.remove(this);
+ if (this.visible()) {
+ Control$1.repaintControls = [];
+ Control$1.repaintControls.map = {};
+ this.recalc();
+ i = Control$1.repaintControls.length;
+ while (i--) {
+ Control$1.repaintControls[i].repaint();
+ }
+ if (this.settings.layout !== 'flow' && this.settings.layout !== 'stack') {
+ this.repaint();
+ }
+ Control$1.repaintControls = [];
+ }
+ return this;
+ }
+ });
+
+ function getDocumentSize(doc) {
+ var documentElement, body, scrollWidth, clientWidth;
+ var offsetWidth, scrollHeight, clientHeight, offsetHeight;
+ var max = Math.max;
+ documentElement = doc.documentElement;
+ body = doc.body;
+ scrollWidth = max(documentElement.scrollWidth, body.scrollWidth);
+ clientWidth = max(documentElement.clientWidth, body.clientWidth);
+ offsetWidth = max(documentElement.offsetWidth, body.offsetWidth);
+ scrollHeight = max(documentElement.scrollHeight, body.scrollHeight);
+ clientHeight = max(documentElement.clientHeight, body.clientHeight);
+ offsetHeight = max(documentElement.offsetHeight, body.offsetHeight);
+ return {
+ width: scrollWidth < offsetWidth ? clientWidth : scrollWidth,
+ height: scrollHeight < offsetHeight ? clientHeight : scrollHeight
+ };
+ }
+ function updateWithTouchData(e) {
+ var keys, i;
+ if (e.changedTouches) {
+ keys = 'screenX screenY pageX pageY clientX clientY'.split(' ');
+ for (i = 0; i < keys.length; i++) {
+ e[keys[i]] = e.changedTouches[0][keys[i]];
+ }
+ }
+ }
+ function DragHelper (id, settings) {
+ var $eventOverlay;
+ var doc = settings.document || document;
+ var downButton;
+ var start, stop$$1, drag, startX, startY;
+ settings = settings || {};
+ var handleElement = doc.getElementById(settings.handle || id);
+ start = function (e) {
+ var docSize = getDocumentSize(doc);
+ var handleElm, cursor;
+ updateWithTouchData(e);
+ e.preventDefault();
+ downButton = e.button;
+ handleElm = handleElement;
+ startX = e.screenX;
+ startY = e.screenY;
+ if (window.getComputedStyle) {
+ cursor = window.getComputedStyle(handleElm, null).getPropertyValue('cursor');
+ } else {
+ cursor = handleElm.runtimeStyle.cursor;
+ }
+ $eventOverlay = global$9('<div></div>').css({
+ position: 'absolute',
+ top: 0,
+ left: 0,
+ width: docSize.width,
+ height: docSize.height,
+ zIndex: 2147483647,
+ opacity: 0.0001,
+ cursor: cursor
+ }).appendTo(doc.body);
+ global$9(doc).on('mousemove touchmove', drag).on('mouseup touchend', stop$$1);
+ settings.start(e);
+ };
+ drag = function (e) {
+ updateWithTouchData(e);
+ if (e.button !== downButton) {
+ return stop$$1(e);
+ }
+ e.deltaX = e.screenX - startX;
+ e.deltaY = e.screenY - startY;
+ e.preventDefault();
+ settings.drag(e);
+ };
+ stop$$1 = function (e) {
+ updateWithTouchData(e);
+ global$9(doc).off('mousemove touchmove', drag).off('mouseup touchend', stop$$1);
+ $eventOverlay.remove();
+ if (settings.stop) {
+ settings.stop(e);
+ }
+ };
+ this.destroy = function () {
+ global$9(handleElement).off();
+ };
+ global$9(handleElement).on('mousedown touchstart', start);
+ }
+
+ var $_3rxloyuzjjgwefrs = {
+ init: function () {
+ var self = this;
+ self.on('repaint', self.renderScroll);
+ },
+ renderScroll: function () {
+ var self = this, margin = 2;
+ function repaintScroll() {
+ var hasScrollH, hasScrollV, bodyElm;
+ function repaintAxis(axisName, posName, sizeName, contentSizeName, hasScroll, ax) {
+ var containerElm, scrollBarElm, scrollThumbElm;
+ var containerSize, scrollSize, ratio, rect;
+ var posNameLower, sizeNameLower;
+ scrollBarElm = self.getEl('scroll' + axisName);
+ if (scrollBarElm) {
+ posNameLower = posName.toLowerCase();
+ sizeNameLower = sizeName.toLowerCase();
+ global$9(self.getEl('absend')).css(posNameLower, self.layoutRect()[contentSizeName] - 1);
+ if (!hasScroll) {
+ global$9(scrollBarElm).css('display', 'none');
+ return;
+ }
+ global$9(scrollBarElm).css('display', 'block');
+ containerElm = self.getEl('body');
+ scrollThumbElm = self.getEl('scroll' + axisName + 't');
+ containerSize = containerElm['client' + sizeName] - margin * 2;
+ containerSize -= hasScrollH && hasScrollV ? scrollBarElm['client' + ax] : 0;
+ scrollSize = containerElm['scroll' + sizeName];
+ ratio = containerSize / scrollSize;
+ rect = {};
+ rect[posNameLower] = containerElm['offset' + posName] + margin;
+ rect[sizeNameLower] = containerSize;
+ global$9(scrollBarElm).css(rect);
+ rect = {};
+ rect[posNameLower] = containerElm['scroll' + posName] * ratio;
+ rect[sizeNameLower] = containerSize * ratio;
+ global$9(scrollThumbElm).css(rect);
+ }
+ }
+ bodyElm = self.getEl('body');
+ hasScrollH = bodyElm.scrollWidth > bodyElm.clientWidth;
+ hasScrollV = bodyElm.scrollHeight > bodyElm.clientHeight;
+ repaintAxis('h', 'Left', 'Width', 'contentW', hasScrollH, 'Height');
+ repaintAxis('v', 'Top', 'Height', 'contentH', hasScrollV, 'Width');
+ }
+ function addScroll() {
+ function addScrollAxis(axisName, posName, sizeName, deltaPosName, ax) {
+ var scrollStart;
+ var axisId = self._id + '-scroll' + axisName, prefix = self.classPrefix;
+ global$9(self.getEl()).append('<div id="' + axisId + '" class="' + prefix + 'scrollbar ' + prefix + 'scrollbar-' + axisName + '">' + '<div id="' + axisId + 't" class="' + prefix + 'scrollbar-thumb"></div>' + '</div>');
+ self.draghelper = new DragHelper(axisId + 't', {
+ start: function () {
+ scrollStart = self.getEl('body')['scroll' + posName];
+ global$9('#' + axisId).addClass(prefix + 'active');
+ },
+ drag: function (e) {
+ var ratio, hasScrollH, hasScrollV, containerSize;
+ var layoutRect = self.layoutRect();
+ hasScrollH = layoutRect.contentW > layoutRect.innerW;
+ hasScrollV = layoutRect.contentH > layoutRect.innerH;
+ containerSize = self.getEl('body')['client' + sizeName] - margin * 2;
+ containerSize -= hasScrollH && hasScrollV ? self.getEl('scroll' + axisName)['client' + ax] : 0;
+ ratio = containerSize / self.getEl('body')['scroll' + sizeName];
+ self.getEl('body')['scroll' + posName] = scrollStart + e['delta' + deltaPosName] / ratio;
+ },
+ stop: function () {
+ global$9('#' + axisId).removeClass(prefix + 'active');
+ }
+ });
+ }
+ self.classes.add('scroll');
+ addScrollAxis('v', 'Top', 'Height', 'Y', 'Width');
+ addScrollAxis('h', 'Left', 'Width', 'X', 'Height');
+ }
+ if (self.settings.autoScroll) {
+ if (!self._hasScroll) {
+ self._hasScroll = true;
+ addScroll();
+ self.on('wheel', function (e) {
+ var bodyEl = self.getEl('body');
+ bodyEl.scrollLeft += (e.deltaX || 0) * 10;
+ bodyEl.scrollTop += e.deltaY * 10;
+ repaintScroll();
+ });
+ global$9(self.getEl('body')).on('scroll', repaintScroll);
+ }
+ repaintScroll();
+ }
+ }
+ };
+
+ var Panel = Container.extend({
+ Defaults: {
+ layout: 'fit',
+ containerCls: 'panel'
+ },
+ Mixins: [$_3rxloyuzjjgwefrs],
+ renderHtml: function () {
+ var self = this;
+ var layout = self._layout;
+ var innerHtml = self.settings.html;
+ self.preRender();
+ layout.preRender(self);
+ if (typeof innerHtml === 'undefined') {
+ innerHtml = '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>';
+ } else {
+ if (typeof innerHtml === 'function') {
+ innerHtml = innerHtml.call(self);
+ }
+ self._hasBody = false;
+ }
+ return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1" role="group">' + (self._preBodyHtml || '') + innerHtml + '</div>';
+ }
+ });
+
+ var $_3m7770v1jjgwefrz = {
+ resizeToContent: function () {
+ this._layoutRect.autoResize = true;
+ this._lastRect = null;
+ this.reflow();
+ },
+ resizeTo: function (w, h) {
+ if (w <= 1 || h <= 1) {
+ var rect = funcs.getWindowSize();
+ w = w <= 1 ? w * rect.w : w;
+ h = h <= 1 ? h * rect.h : h;
+ }
+ this._layoutRect.autoResize = false;
+ return this.layoutRect({
+ minW: w,
+ minH: h,
+ w: w,
+ h: h
+ }).reflow();
+ },
+ resizeBy: function (dw, dh) {
+ var self = this, rect = self.layoutRect();
+ return self.resizeTo(rect.w + dw, rect.h + dh);
+ }
+ };
+
+ var documentClickHandler;
+ var documentScrollHandler;
+ var windowResizeHandler;
+ var visiblePanels = [];
+ var zOrder = [];
+ var hasModal;
+ function isChildOf(ctrl, parent$$1) {
+ while (ctrl) {
+ if (ctrl === parent$$1) {
+ return true;
+ }
+ ctrl = ctrl.parent();
+ }
+ }
+ function skipOrHidePanels(e) {
+ var i = visiblePanels.length;
+ while (i--) {
+ var panel = visiblePanels[i], clickCtrl = panel.getParentCtrl(e.target);
+ if (panel.settings.autohide) {
+ if (clickCtrl) {
+ if (isChildOf(clickCtrl, panel) || panel.parent() === clickCtrl) {
+ continue;
+ }
+ }
+ e = panel.fire('autohide', { target: e.target });
+ if (!e.isDefaultPrevented()) {
+ panel.hide();
+ }
+ }
+ }
+ }
+ function bindDocumentClickHandler() {
+ if (!documentClickHandler) {
+ documentClickHandler = function (e) {
+ if (e.button === 2) {
+ return;
+ }
+ skipOrHidePanels(e);
+ };
+ global$9(document).on('click touchstart', documentClickHandler);
+ }
+ }
+ function bindDocumentScrollHandler() {
+ if (!documentScrollHandler) {
+ documentScrollHandler = function () {
+ var i;
+ i = visiblePanels.length;
+ while (i--) {
+ repositionPanel(visiblePanels[i]);
+ }
+ };
+ global$9(window).on('scroll', documentScrollHandler);
+ }
+ }
+ function bindWindowResizeHandler() {
+ if (!windowResizeHandler) {
+ var docElm_1 = document.documentElement;
+ var clientWidth_1 = docElm_1.clientWidth, clientHeight_1 = docElm_1.clientHeight;
+ windowResizeHandler = function () {
+ if (!document.all || clientWidth_1 !== docElm_1.clientWidth || clientHeight_1 !== docElm_1.clientHeight) {
+ clientWidth_1 = docElm_1.clientWidth;
+ clientHeight_1 = docElm_1.clientHeight;
+ FloatPanel.hideAll();
+ }
+ };
+ global$9(window).on('resize', windowResizeHandler);
+ }
+ }
+ function repositionPanel(panel) {
+ var scrollY$$1 = funcs.getViewPort().y;
+ function toggleFixedChildPanels(fixed, deltaY) {
+ var parent$$1;
+ for (var i = 0; i < visiblePanels.length; i++) {
+ if (visiblePanels[i] !== panel) {
+ parent$$1 = visiblePanels[i].parent();
+ while (parent$$1 && (parent$$1 = parent$$1.parent())) {
+ if (parent$$1 === panel) {
+ visiblePanels[i].fixed(fixed).moveBy(0, deltaY).repaint();
+ }
+ }
+ }
+ }
+ }
+ if (panel.settings.autofix) {
+ if (!panel.state.get('fixed')) {
+ panel._autoFixY = panel.layoutRect().y;
+ if (panel._autoFixY < scrollY$$1) {
+ panel.fixed(true).layoutRect({ y: 0 }).repaint();
+ toggleFixedChildPanels(true, scrollY$$1 - panel._autoFixY);
+ }
+ } else {
+ if (panel._autoFixY > scrollY$$1) {
+ panel.fixed(false).layoutRect({ y: panel._autoFixY }).repaint();
+ toggleFixedChildPanels(false, panel._autoFixY - scrollY$$1);
+ }
+ }
+ }
+ }
+ function addRemove(add, ctrl) {
+ var i, zIndex = FloatPanel.zIndex || 65535, topModal;
+ if (add) {
+ zOrder.push(ctrl);
+ } else {
+ i = zOrder.length;
+ while (i--) {
+ if (zOrder[i] === ctrl) {
+ zOrder.splice(i, 1);
+ }
+ }
+ }
+ if (zOrder.length) {
+ for (i = 0; i < zOrder.length; i++) {
+ if (zOrder[i].modal) {
+ zIndex++;
+ topModal = zOrder[i];
+ }
+ zOrder[i].getEl().style.zIndex = zIndex;
+ zOrder[i].zIndex = zIndex;
+ zIndex++;
+ }
+ }
+ var modalBlockEl = global$9('#' + ctrl.classPrefix + 'modal-block', ctrl.getContainerElm())[0];
+ if (topModal) {
+ global$9(modalBlockEl).css('z-index', topModal.zIndex - 1);
+ } else if (modalBlockEl) {
+ modalBlockEl.parentNode.removeChild(modalBlockEl);
+ hasModal = false;
+ }
+ FloatPanel.currentZIndex = zIndex;
+ }
+ var FloatPanel = Panel.extend({
+ Mixins: [
+ $_3fnh5iukjjgwefpt,
+ $_3m7770v1jjgwefrz
+ ],
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ self$$1._eventsRoot = self$$1;
+ self$$1.classes.add('floatpanel');
+ if (settings.autohide) {
+ bindDocumentClickHandler();
+ bindWindowResizeHandler();
+ visiblePanels.push(self$$1);
+ }
+ if (settings.autofix) {
+ bindDocumentScrollHandler();
+ self$$1.on('move', function () {
+ repositionPanel(this);
+ });
+ }
+ self$$1.on('postrender show', function (e) {
+ if (e.control === self$$1) {
+ var $modalBlockEl_1;
+ var prefix_1 = self$$1.classPrefix;
+ if (self$$1.modal && !hasModal) {
+ $modalBlockEl_1 = global$9('#' + prefix_1 + 'modal-block', self$$1.getContainerElm());
+ if (!$modalBlockEl_1[0]) {
+ $modalBlockEl_1 = global$9('<div id="' + prefix_1 + 'modal-block" class="' + prefix_1 + 'reset ' + prefix_1 + 'fade"></div>').appendTo(self$$1.getContainerElm());
+ }
+ global$7.setTimeout(function () {
+ $modalBlockEl_1.addClass(prefix_1 + 'in');
+ global$9(self$$1.getEl()).addClass(prefix_1 + 'in');
+ });
+ hasModal = true;
+ }
+ addRemove(true, self$$1);
+ }
+ });
+ self$$1.on('show', function () {
+ self$$1.parents().each(function (ctrl) {
+ if (ctrl.state.get('fixed')) {
+ self$$1.fixed(true);
+ return false;
+ }
+ });
+ });
+ if (settings.popover) {
+ self$$1._preBodyHtml = '<div class="' + self$$1.classPrefix + 'arrow"></div>';
+ self$$1.classes.add('popover').add('bottom').add(self$$1.isRtl() ? 'end' : 'start');
+ }
+ self$$1.aria('label', settings.ariaLabel);
+ self$$1.aria('labelledby', self$$1._id);
+ self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none');
+ },
+ fixed: function (state) {
+ var self$$1 = this;
+ if (self$$1.state.get('fixed') !== state) {
+ if (self$$1.state.get('rendered')) {
+ var viewport = funcs.getViewPort();
+ if (state) {
+ self$$1.layoutRect().y -= viewport.y;
+ } else {
+ self$$1.layoutRect().y += viewport.y;
+ }
+ }
+ self$$1.classes.toggle('fixed', state);
+ self$$1.state.set('fixed', state);
+ }
+ return self$$1;
+ },
+ show: function () {
+ var self$$1 = this;
+ var i;
+ var state = self$$1._super();
+ i = visiblePanels.length;
+ while (i--) {
+ if (visiblePanels[i] === self$$1) {
+ break;
+ }
+ }
+ if (i === -1) {
+ visiblePanels.push(self$$1);
+ }
+ return state;
+ },
+ hide: function () {
+ removeVisiblePanel(this);
+ addRemove(false, this);
+ return this._super();
+ },
+ hideAll: function () {
+ FloatPanel.hideAll();
+ },
+ close: function () {
+ var self$$1 = this;
+ if (!self$$1.fire('close').isDefaultPrevented()) {
+ self$$1.remove();
+ addRemove(false, self$$1);
+ }
+ return self$$1;
+ },
+ remove: function () {
+ removeVisiblePanel(this);
+ this._super();
+ },
+ postRender: function () {
+ var self$$1 = this;
+ if (self$$1.settings.bodyRole) {
+ this.getEl('body').setAttribute('role', self$$1.settings.bodyRole);
+ }
+ return self$$1._super();
+ }
+ });
+ FloatPanel.hideAll = function () {
+ var i = visiblePanels.length;
+ while (i--) {
+ var panel = visiblePanels[i];
+ if (panel && panel.settings.autohide) {
+ panel.hide();
+ visiblePanels.splice(i, 1);
+ }
+ }
+ };
+ function removeVisiblePanel(panel) {
+ var i;
+ i = visiblePanels.length;
+ while (i--) {
+ if (visiblePanels[i] === panel) {
+ visiblePanels.splice(i, 1);
+ }
+ }
+ i = zOrder.length;
+ while (i--) {
+ if (zOrder[i] === panel) {
+ zOrder.splice(i, 1);
+ }
+ }
+ }
+
+ var isFixed$1 = function (inlineToolbarContainer, editor) {
+ return !!(inlineToolbarContainer && !editor.settings.ui_container);
+ };
+ var render$1 = function (editor, theme, args) {
+ var panel, inlineToolbarContainer;
+ var DOM = global$3.DOM;
+ var fixedToolbarContainer = getFixedToolbarContainer(editor);
+ if (fixedToolbarContainer) {
+ inlineToolbarContainer = DOM.select(fixedToolbarContainer)[0];
+ }
+ var reposition = function () {
+ if (panel && panel.moveRel && panel.visible() && !panel._fixed) {
+ var scrollContainer = editor.selection.getScrollContainer(), body = editor.getBody();
+ var deltaX = 0, deltaY = 0;
+ if (scrollContainer) {
+ var bodyPos = DOM.getPos(body), scrollContainerPos = DOM.getPos(scrollContainer);
+ deltaX = Math.max(0, scrollContainerPos.x - bodyPos.x);
+ deltaY = Math.max(0, scrollContainerPos.y - bodyPos.y);
+ }
+ panel.fixed(false).moveRel(body, editor.rtl ? [
+ 'tr-br',
+ 'br-tr'
+ ] : [
+ 'tl-bl',
+ 'bl-tl',
+ 'tr-br'
+ ]).moveBy(deltaX, deltaY);
+ }
+ };
+ var show = function () {
+ if (panel) {
+ panel.show();
+ reposition();
+ DOM.addClass(editor.getBody(), 'mce-edit-focus');
+ }
+ };
+ var hide = function () {
+ if (panel) {
+ panel.hide();
+ FloatPanel.hideAll();
+ DOM.removeClass(editor.getBody(), 'mce-edit-focus');
+ }
+ };
+ var render = function () {
+ if (panel) {
+ if (!panel.visible()) {
+ show();
+ }
+ return;
+ }
+ panel = theme.panel = global$4.create({
+ type: inlineToolbarContainer ? 'panel' : 'floatpanel',
+ role: 'application',
+ classes: 'tinymce tinymce-inline',
+ layout: 'flex',
+ direction: 'column',
+ align: 'stretch',
+ autohide: false,
+ autofix: isFixed$1(inlineToolbarContainer, editor),
+ fixed: isFixed$1(inlineToolbarContainer, editor),
+ border: 1,
+ items: [
+ hasMenubar(editor) === false ? null : {
+ type: 'menubar',
+ border: '0 0 1 0',
+ items: $_bahgsqu8jjgwefo4.createMenuButtons(editor)
+ },
+ $_4udolhu7jjgwefo1.createToolbars(editor, getToolbarSize(editor))
+ ]
+ });
+ $_6344qfu4jjgwefnr.setUiContainer(editor, panel);
+ $_5hpmustzjjgwefnb.fireBeforeRenderUI(editor);
+ if (inlineToolbarContainer) {
+ panel.renderTo(inlineToolbarContainer).reflow();
+ } else {
+ panel.renderTo().reflow();
+ }
+ $_azwbz4u0jjgwefnc.addKeys(editor, panel);
+ show();
+ $_g1gegqu1jjgwefne.addContextualToolbars(editor);
+ editor.on('nodeChange', reposition);
+ editor.on('ResizeWindow', reposition);
+ editor.on('activate', show);
+ editor.on('deactivate', hide);
+ editor.nodeChanged();
+ };
+ editor.settings.content_editable = true;
+ editor.on('focus', function () {
+ if (isSkinDisabled(editor) === false && args.skinUiCss) {
+ DOM.styleSheetLoader.load(args.skinUiCss, render, render);
+ } else {
+ render();
+ }
+ });
+ editor.on('blur hide', hide);
+ editor.on('remove', function () {
+ if (panel) {
+ panel.remove();
+ panel = null;
+ }
+ });
+ if (isSkinDisabled(editor) === false && args.skinUiCss) {
+ DOM.styleSheetLoader.load(args.skinUiCss, $_awdosmuejjgwefop.fireSkinLoaded(editor));
+ } else {
+ $_awdosmuejjgwefop.fireSkinLoaded(editor)();
+ }
+ return {};
+ };
+ var $_fuoldxufjjgwefor = { render: render$1 };
+
+ function Throbber (elm, inline) {
+ var self = this;
+ var state;
+ var classPrefix = Control$1.classPrefix;
+ var timer;
+ self.show = function (time, callback) {
+ function render() {
+ if (state) {
+ global$9(elm).append('<div class="' + classPrefix + 'throbber' + (inline ? ' ' + classPrefix + 'throbber-inline' : '') + '"></div>');
+ if (callback) {
+ callback();
+ }
+ }
+ }
+ self.hide();
+ state = true;
+ if (time) {
+ timer = global$7.setTimeout(render, time);
+ } else {
+ render();
+ }
+ return self;
+ };
+ self.hide = function () {
+ var child = elm.lastChild;
+ global$7.clearTimeout(timer);
+ if (child && child.className.indexOf('throbber') !== -1) {
+ child.parentNode.removeChild(child);
+ }
+ state = false;
+ return self;
+ };
+ }
+
+ var setup = function (editor, theme) {
+ var throbber;
+ editor.on('ProgressState', function (e) {
+ throbber = throbber || new Throbber(theme.panel.getEl('body'));
+ if (e.state) {
+ throbber.show(e.time);
+ } else {
+ throbber.hide();
+ }
+ });
+ };
+ var $_18iiwkv2jjgwefs0 = { setup: setup };
+
+ var renderUI = function (editor, theme, args) {
+ var skinUrl = getSkinUrl(editor);
+ if (skinUrl) {
+ args.skinUiCss = skinUrl + '/skin.min.css';
+ editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css');
+ }
+ $_18iiwkv2jjgwefs0.setup(editor, theme);
+ return isInline(editor) ? $_fuoldxufjjgwefor.render(editor, theme, args) : $_vxdgetvjjgwefn7.render(editor, theme, args);
+ };
+ var $_as4c3qtrjjgwefn1 = { renderUI: renderUI };
+
+ var Tooltip = Control$1.extend({
+ Mixins: [$_3fnh5iukjjgwefpt],
+ Defaults: { classes: 'widget tooltip tooltip-n' },
+ renderHtml: function () {
+ var self = this, prefix = self.classPrefix;
+ return '<div id="' + self._id + '" class="' + self.classes + '" role="presentation">' + '<div class="' + prefix + 'tooltip-arrow"></div>' + '<div class="' + prefix + 'tooltip-inner">' + self.encode(self.state.get('text')) + '</div>' + '</div>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:text', function (e) {
+ self.getEl().lastChild.innerHTML = self.encode(e.value);
+ });
+ return self._super();
+ },
+ repaint: function () {
+ var self = this;
+ var style, rect;
+ style = self.getEl().style;
+ rect = self._layoutRect;
+ style.left = rect.x + 'px';
+ style.top = rect.y + 'px';
+ style.zIndex = 65535 + 65535;
+ }
+ });
+
+ var Widget = Control$1.extend({
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ settings = self.settings;
+ self.canFocus = true;
+ if (settings.tooltip && Widget.tooltips !== false) {
+ self.on('mouseenter', function (e) {
+ var tooltip = self.tooltip().moveTo(-65535);
+ if (e.control === self) {
+ var rel = tooltip.text(settings.tooltip).show().testMoveRel(self.getEl(), [
+ 'bc-tc',
+ 'bc-tl',
+ 'bc-tr'
+ ]);
+ tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
+ tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
+ tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
+ tooltip.moveRel(self.getEl(), rel);
+ } else {
+ tooltip.hide();
+ }
+ });
+ self.on('mouseleave mousedown click', function () {
+ self.tooltip().remove();
+ self._tooltip = null;
+ });
+ }
+ self.aria('label', settings.ariaLabel || settings.tooltip);
+ },
+ tooltip: function () {
+ if (!this._tooltip) {
+ this._tooltip = new Tooltip({ type: 'tooltip' });
+ $_6344qfu4jjgwefnr.inheritUiContainer(this, this._tooltip);
+ this._tooltip.renderTo();
+ }
+ return this._tooltip;
+ },
+ postRender: function () {
+ var self = this, settings = self.settings;
+ self._super();
+ if (!self.parent() && (settings.width || settings.height)) {
+ self.initLayoutRect();
+ self.repaint();
+ }
+ if (settings.autofocus) {
+ self.focus();
+ }
+ },
+ bindStates: function () {
+ var self = this;
+ function disable(state) {
+ self.aria('disabled', state);
+ self.classes.toggle('disabled', state);
+ }
+ function active(state) {
+ self.aria('pressed', state);
+ self.classes.toggle('active', state);
+ }
+ self.state.on('change:disabled', function (e) {
+ disable(e.value);
+ });
+ self.state.on('change:active', function (e) {
+ active(e.value);
+ });
+ if (self.state.get('disabled')) {
+ disable(true);
+ }
+ if (self.state.get('active')) {
+ active(true);
+ }
+ return self._super();
+ },
+ remove: function () {
+ this._super();
+ if (this._tooltip) {
+ this._tooltip.remove();
+ this._tooltip = null;
+ }
+ }
+ });
+
+ var Progress = Widget.extend({
+ Defaults: { value: 0 },
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.classes.add('progress');
+ if (!self.settings.filter) {
+ self.settings.filter = function (value) {
+ return Math.round(value);
+ };
+ }
+ },
+ renderHtml: function () {
+ var self = this, id = self._id, prefix = this.classPrefix;
+ return '<div id="' + id + '" class="' + self.classes + '">' + '<div class="' + prefix + 'bar-container">' + '<div class="' + prefix + 'bar"></div>' + '</div>' + '<div class="' + prefix + 'text">0%</div>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ self._super();
+ self.value(self.settings.value);
+ return self;
+ },
+ bindStates: function () {
+ var self = this;
+ function setValue(value) {
+ value = self.settings.filter(value);
+ self.getEl().lastChild.innerHTML = value + '%';
+ self.getEl().firstChild.firstChild.style.width = value + '%';
+ }
+ self.state.on('change:value', function (e) {
+ setValue(e.value);
+ });
+ setValue(self.state.get('value'));
+ return self._super();
+ }
+ });
+
+ var updateLiveRegion = function (ctx, text) {
+ ctx.getEl().lastChild.textContent = text + (ctx.progressBar ? ' ' + ctx.progressBar.value() + '%' : '');
+ };
+ var Notification = Control$1.extend({
+ Mixins: [$_3fnh5iukjjgwefpt],
+ Defaults: { classes: 'widget notification' },
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.maxWidth = settings.maxWidth;
+ if (settings.text) {
+ self.text(settings.text);
+ }
+ if (settings.icon) {
+ self.icon = settings.icon;
+ }
+ if (settings.color) {
+ self.color = settings.color;
+ }
+ if (settings.type) {
+ self.classes.add('notification-' + settings.type);
+ }
+ if (settings.timeout && (settings.timeout < 0 || settings.timeout > 0) && !settings.closeButton) {
+ self.closeButton = false;
+ } else {
+ self.classes.add('has-close');
+ self.closeButton = true;
+ }
+ if (settings.progressBar) {
+ self.progressBar = new Progress();
+ }
+ self.on('click', function (e) {
+ if (e.target.className.indexOf(self.classPrefix + 'close') !== -1) {
+ self.close();
+ }
+ });
+ },
+ renderHtml: function () {
+ var self = this;
+ var prefix = self.classPrefix;
+ var icon = '', closeButton = '', progressBar = '', notificationStyle = '';
+ if (self.icon) {
+ icon = '<i class="' + prefix + 'ico' + ' ' + prefix + 'i-' + self.icon + '"></i>';
+ }
+ notificationStyle = ' style="max-width: ' + self.maxWidth + 'px;' + (self.color ? 'background-color: ' + self.color + ';"' : '"');
+ if (self.closeButton) {
+ closeButton = '<button type="button" class="' + prefix + 'close" aria-hidden="true">\xD7</button>';
+ }
+ if (self.progressBar) {
+ progressBar = self.progressBar.renderHtml();
+ }
+ return '<div id="' + self._id + '" class="' + self.classes + '"' + notificationStyle + ' role="presentation">' + icon + '<div class="' + prefix + 'notification-inner">' + self.state.get('text') + '</div>' + progressBar + closeButton + '<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;"' + ' aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ global$7.setTimeout(function () {
+ self.$el.addClass(self.classPrefix + 'in');
+ updateLiveRegion(self, self.state.get('text'));
+ }, 100);
+ return self._super();
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:text', function (e) {
+ self.getEl().firstChild.innerHTML = e.value;
+ updateLiveRegion(self, e.value);
+ });
+ if (self.progressBar) {
+ self.progressBar.bindStates();
+ self.progressBar.state.on('change:value', function (e) {
+ updateLiveRegion(self, self.state.get('text'));
+ });
+ }
+ return self._super();
+ },
+ close: function () {
+ var self = this;
+ if (!self.fire('close').isDefaultPrevented()) {
+ self.remove();
+ }
+ return self;
+ },
+ repaint: function () {
+ var self = this;
+ var style, rect;
+ style = self.getEl().style;
+ rect = self._layoutRect;
+ style.left = rect.x + 'px';
+ style.top = rect.y + 'px';
+ style.zIndex = 65535 - 1;
+ }
+ });
+
+ function NotificationManagerImpl (editor) {
+ var getEditorContainer = function (editor) {
+ return editor.inline ? editor.getElement() : editor.getContentAreaContainer();
+ };
+ var getContainerWidth = function () {
+ var container = getEditorContainer(editor);
+ return funcs.getSize(container).width;
+ };
+ var prePositionNotifications = function (notifications) {
+ each(notifications, function (notification) {
+ notification.moveTo(0, 0);
+ });
+ };
+ var positionNotifications = function (notifications) {
+ if (notifications.length > 0) {
+ var firstItem = notifications.slice(0, 1)[0];
+ var container = getEditorContainer(editor);
+ firstItem.moveRel(container, 'tc-tc');
+ each(notifications, function (notification, index) {
+ if (index > 0) {
+ notification.moveRel(notifications[index - 1].getEl(), 'bc-tc');
+ }
+ });
+ }
+ };
+ var reposition = function (notifications) {
+ prePositionNotifications(notifications);
+ positionNotifications(notifications);
+ };
+ var open = function (args, closeCallback) {
+ var extendedArgs = global$2.extend(args, { maxWidth: getContainerWidth() });
+ var notif = new Notification(extendedArgs);
+ notif.args = extendedArgs;
+ if (extendedArgs.timeout > 0) {
+ notif.timer = setTimeout(function () {
+ notif.close();
+ closeCallback();
+ }, extendedArgs.timeout);
+ }
+ notif.on('close', function () {
+ closeCallback();
+ });
+ notif.renderTo();
+ return notif;
+ };
+ var close = function (notification) {
+ notification.close();
+ };
+ var getArgs = function (notification) {
+ return notification.args;
+ };
+ return {
+ open: open,
+ close: close,
+ reposition: reposition,
+ getArgs: getArgs
+ };
+ }
+
+ var windows = [];
+ var oldMetaValue = '';
+ function toggleFullScreenState(state) {
+ var noScaleMetaValue = 'width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0';
+ var viewport = global$9('meta[name=viewport]')[0], contentValue;
+ if (global$8.overrideViewPort === false) {
+ return;
+ }
+ if (!viewport) {
+ viewport = document.createElement('meta');
+ viewport.setAttribute('name', 'viewport');
+ document.getElementsByTagName('head')[0].appendChild(viewport);
+ }
+ contentValue = viewport.getAttribute('content');
+ if (contentValue && typeof oldMetaValue !== 'undefined') {
+ oldMetaValue = contentValue;
+ }
+ viewport.setAttribute('content', state ? noScaleMetaValue : oldMetaValue);
+ }
+ function toggleBodyFullScreenClasses(classPrefix, state) {
+ if (checkFullscreenWindows() && state === false) {
+ global$9([
+ document.documentElement,
+ document.body
+ ]).removeClass(classPrefix + 'fullscreen');
+ }
+ }
+ function checkFullscreenWindows() {
+ for (var i = 0; i < windows.length; i++) {
+ if (windows[i]._fullscreen) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function handleWindowResize() {
+ if (!global$8.desktop) {
+ var lastSize_1 = {
+ w: window.innerWidth,
+ h: window.innerHeight
+ };
+ global$7.setInterval(function () {
+ var w = window.innerWidth, h = window.innerHeight;
+ if (lastSize_1.w !== w || lastSize_1.h !== h) {
+ lastSize_1 = {
+ w: w,
+ h: h
+ };
+ global$9(window).trigger('resize');
+ }
+ }, 100);
+ }
+ function reposition() {
+ var i;
+ var rect = funcs.getWindowSize();
+ var layoutRect;
+ for (i = 0; i < windows.length; i++) {
+ layoutRect = windows[i].layoutRect();
+ windows[i].moveTo(windows[i].settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2), windows[i].settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2));
+ }
+ }
+ global$9(window).on('resize', reposition);
+ }
+ var Window$$1 = FloatPanel.extend({
+ modal: true,
+ Defaults: {
+ border: 1,
+ layout: 'flex',
+ containerCls: 'panel',
+ role: 'dialog',
+ callbacks: {
+ submit: function () {
+ this.fire('submit', { data: this.toJSON() });
+ },
+ close: function () {
+ this.close();
+ }
+ }
+ },
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ if (self$$1.isRtl()) {
+ self$$1.classes.add('rtl');
+ }
+ self$$1.classes.add('window');
+ self$$1.bodyClasses.add('window-body');
+ self$$1.state.set('fixed', true);
+ if (settings.buttons) {
+ self$$1.statusbar = new Panel({
+ layout: 'flex',
+ border: '1 0 0 0',
+ spacing: 3,
+ padding: 10,
+ align: 'center',
+ pack: self$$1.isRtl() ? 'start' : 'end',
+ defaults: { type: 'button' },
+ items: settings.buttons
+ });
+ self$$1.statusbar.classes.add('foot');
+ self$$1.statusbar.parent(self$$1);
+ }
+ self$$1.on('click', function (e) {
+ var closeClass = self$$1.classPrefix + 'close';
+ if (funcs.hasClass(e.target, closeClass) || funcs.hasClass(e.target.parentNode, closeClass)) {
+ self$$1.close();
+ }
+ });
+ self$$1.on('cancel', function () {
+ self$$1.close();
+ });
+ self$$1.on('move', function (e) {
+ if (e.control === self$$1) {
+ FloatPanel.hideAll();
+ }
+ });
+ self$$1.aria('describedby', self$$1.describedBy || self$$1._id + '-none');
+ self$$1.aria('label', settings.title);
+ self$$1._fullscreen = false;
+ },
+ recalc: function () {
+ var self$$1 = this;
+ var statusbar$$1 = self$$1.statusbar;
+ var layoutRect, width, x, needsRecalc;
+ if (self$$1._fullscreen) {
+ self$$1.layoutRect(funcs.getWindowSize());
+ self$$1.layoutRect().contentH = self$$1.layoutRect().innerH;
+ }
+ self$$1._super();
+ layoutRect = self$$1.layoutRect();
+ if (self$$1.settings.title && !self$$1._fullscreen) {
+ width = layoutRect.headerW;
+ if (width > layoutRect.w) {
+ x = layoutRect.x - Math.max(0, width / 2);
+ self$$1.layoutRect({
+ w: width,
+ x: x
+ });
+ needsRecalc = true;
+ }
+ }
+ if (statusbar$$1) {
+ statusbar$$1.layoutRect({ w: self$$1.layoutRect().innerW }).recalc();
+ width = statusbar$$1.layoutRect().minW + layoutRect.deltaW;
+ if (width > layoutRect.w) {
+ x = layoutRect.x - Math.max(0, width - layoutRect.w);
+ self$$1.layoutRect({
+ w: width,
+ x: x
+ });
+ needsRecalc = true;
+ }
+ }
+ if (needsRecalc) {
+ self$$1.recalc();
+ }
+ },
+ initLayoutRect: function () {
+ var self$$1 = this;
+ var layoutRect = self$$1._super();
+ var deltaH = 0, headEl;
+ if (self$$1.settings.title && !self$$1._fullscreen) {
+ headEl = self$$1.getEl('head');
+ var size = funcs.getSize(headEl);
+ layoutRect.headerW = size.width;
+ layoutRect.headerH = size.height;
+ deltaH += layoutRect.headerH;
+ }
+ if (self$$1.statusbar) {
+ deltaH += self$$1.statusbar.layoutRect().h;
+ }
+ layoutRect.deltaH += deltaH;
+ layoutRect.minH += deltaH;
+ layoutRect.h += deltaH;
+ var rect = funcs.getWindowSize();
+ layoutRect.x = self$$1.settings.x || Math.max(0, rect.w / 2 - layoutRect.w / 2);
+ layoutRect.y = self$$1.settings.y || Math.max(0, rect.h / 2 - layoutRect.h / 2);
+ return layoutRect;
+ },
+ renderHtml: function () {
+ var self$$1 = this, layout = self$$1._layout, id = self$$1._id, prefix = self$$1.classPrefix;
+ var settings = self$$1.settings;
+ var headerHtml = '', footerHtml = '', html = settings.html;
+ self$$1.preRender();
+ layout.preRender(self$$1);
+ if (settings.title) {
+ headerHtml = '<div id="' + id + '-head" class="' + prefix + 'window-head">' + '<div id="' + id + '-title" class="' + prefix + 'title">' + self$$1.encode(settings.title) + '</div>' + '<div id="' + id + '-dragh" class="' + prefix + 'dragh"></div>' + '<button type="button" class="' + prefix + 'close" aria-hidden="true">' + '<i class="mce-ico mce-i-remove"></i>' + '</button>' + '</div>';
+ }
+ if (settings.url) {
+ html = '<iframe src="' + settings.url + '" tabindex="-1"></iframe>';
+ }
+ if (typeof html === 'undefined') {
+ html = layout.renderHtml(self$$1);
+ }
+ if (self$$1.statusbar) {
+ footerHtml = self$$1.statusbar.renderHtml();
+ }
+ return '<div id="' + id + '" class="' + self$$1.classes + '" hidefocus="1">' + '<div class="' + self$$1.classPrefix + 'reset" role="application">' + headerHtml + '<div id="' + id + '-body" class="' + self$$1.bodyClasses + '">' + html + '</div>' + footerHtml + '</div>' + '</div>';
+ },
+ fullscreen: function (state) {
+ var self$$1 = this;
+ var documentElement = document.documentElement;
+ var slowRendering;
+ var prefix = self$$1.classPrefix;
+ var layoutRect;
+ if (state !== self$$1._fullscreen) {
+ global$9(window).on('resize', function () {
+ var time;
+ if (self$$1._fullscreen) {
+ if (!slowRendering) {
+ time = new Date().getTime();
+ var rect = funcs.getWindowSize();
+ self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h);
+ if (new Date().getTime() - time > 50) {
+ slowRendering = true;
+ }
+ } else {
+ if (!self$$1._timer) {
+ self$$1._timer = global$7.setTimeout(function () {
+ var rect = funcs.getWindowSize();
+ self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h);
+ self$$1._timer = 0;
+ }, 50);
+ }
+ }
+ }
+ });
+ layoutRect = self$$1.layoutRect();
+ self$$1._fullscreen = state;
+ if (!state) {
+ self$$1.borderBox = $_fbr241uqjjgwefqo.parseBox(self$$1.settings.border);
+ self$$1.getEl('head').style.display = '';
+ layoutRect.deltaH += layoutRect.headerH;
+ global$9([
+ documentElement,
+ document.body
+ ]).removeClass(prefix + 'fullscreen');
+ self$$1.classes.remove('fullscreen');
+ self$$1.moveTo(self$$1._initial.x, self$$1._initial.y).resizeTo(self$$1._initial.w, self$$1._initial.h);
+ } else {
+ self$$1._initial = {
+ x: layoutRect.x,
+ y: layoutRect.y,
+ w: layoutRect.w,
+ h: layoutRect.h
+ };
+ self$$1.borderBox = $_fbr241uqjjgwefqo.parseBox('0');
+ self$$1.getEl('head').style.display = 'none';
+ layoutRect.deltaH -= layoutRect.headerH + 2;
+ global$9([
+ documentElement,
+ document.body
+ ]).addClass(prefix + 'fullscreen');
+ self$$1.classes.add('fullscreen');
+ var rect = funcs.getWindowSize();
+ self$$1.moveTo(0, 0).resizeTo(rect.w, rect.h);
+ }
+ }
+ return self$$1.reflow();
+ },
+ postRender: function () {
+ var self$$1 = this;
+ var startPos;
+ setTimeout(function () {
+ self$$1.classes.add('in');
+ self$$1.fire('open');
+ }, 0);
+ self$$1._super();
+ if (self$$1.statusbar) {
+ self$$1.statusbar.postRender();
+ }
+ self$$1.focus();
+ this.dragHelper = new DragHelper(self$$1._id + '-dragh', {
+ start: function () {
+ startPos = {
+ x: self$$1.layoutRect().x,
+ y: self$$1.layoutRect().y
+ };
+ },
+ drag: function (e) {
+ self$$1.moveTo(startPos.x + e.deltaX, startPos.y + e.deltaY);
+ }
+ });
+ self$$1.on('submit', function (e) {
+ if (!e.isDefaultPrevented()) {
+ self$$1.close();
+ }
+ });
+ windows.push(self$$1);
+ toggleFullScreenState(true);
+ },
+ submit: function () {
+ return this.fire('submit', { data: this.toJSON() });
+ },
+ remove: function () {
+ var self$$1 = this;
+ var i;
+ self$$1.dragHelper.destroy();
+ self$$1._super();
+ if (self$$1.statusbar) {
+ this.statusbar.remove();
+ }
+ toggleBodyFullScreenClasses(self$$1.classPrefix, false);
+ i = windows.length;
+ while (i--) {
+ if (windows[i] === self$$1) {
+ windows.splice(i, 1);
+ }
+ }
+ toggleFullScreenState(windows.length > 0);
+ },
+ getContentWindow: function () {
+ var ifr = this.getEl().getElementsByTagName('iframe')[0];
+ return ifr ? ifr.contentWindow : null;
+ }
+ });
+ handleWindowResize();
+
+ var MessageBox = Window$$1.extend({
+ init: function (settings) {
+ settings = {
+ border: 1,
+ padding: 20,
+ layout: 'flex',
+ pack: 'center',
+ align: 'center',
+ containerCls: 'panel',
+ autoScroll: true,
+ buttons: {
+ type: 'button',
+ text: 'Ok',
+ action: 'ok'
+ },
+ items: {
+ type: 'label',
+ multiline: true,
+ maxWidth: 500,
+ maxHeight: 200
+ }
+ };
+ this._super(settings);
+ },
+ Statics: {
+ OK: 1,
+ OK_CANCEL: 2,
+ YES_NO: 3,
+ YES_NO_CANCEL: 4,
+ msgBox: function (settings) {
+ var buttons;
+ var callback = settings.callback || function () {
+ };
+ function createButton(text, status$$1, primary) {
+ return {
+ type: 'button',
+ text: text,
+ subtype: primary ? 'primary' : '',
+ onClick: function (e) {
+ e.control.parents()[1].close();
+ callback(status$$1);
+ }
+ };
+ }
+ switch (settings.buttons) {
+ case MessageBox.OK_CANCEL:
+ buttons = [
+ createButton('Ok', true, true),
+ createButton('Cancel', false)
+ ];
+ break;
+ case MessageBox.YES_NO:
+ case MessageBox.YES_NO_CANCEL:
+ buttons = [
+ createButton('Yes', 1, true),
+ createButton('No', 0)
+ ];
+ if (settings.buttons === MessageBox.YES_NO_CANCEL) {
+ buttons.push(createButton('Cancel', -1));
+ }
+ break;
+ default:
+ buttons = [createButton('Ok', true, true)];
+ break;
+ }
+ return new Window$$1({
+ padding: 20,
+ x: settings.x,
+ y: settings.y,
+ minWidth: 300,
+ minHeight: 100,
+ layout: 'flex',
+ pack: 'center',
+ align: 'center',
+ buttons: buttons,
+ title: settings.title,
+ role: 'alertdialog',
+ items: {
+ type: 'label',
+ multiline: true,
+ maxWidth: 500,
+ maxHeight: 200,
+ text: settings.text
+ },
+ onPostRender: function () {
+ this.aria('describedby', this.items()[0]._id);
+ },
+ onClose: settings.onClose,
+ onCancel: function () {
+ callback(false);
+ }
+ }).renderTo(document.body).reflow();
+ },
+ alert: function (settings, callback) {
+ if (typeof settings === 'string') {
+ settings = { text: settings };
+ }
+ settings.callback = callback;
+ return MessageBox.msgBox(settings);
+ },
+ confirm: function (settings, callback) {
+ if (typeof settings === 'string') {
+ settings = { text: settings };
+ }
+ settings.callback = callback;
+ settings.buttons = MessageBox.OK_CANCEL;
+ return MessageBox.msgBox(settings);
+ }
+ }
+ });
+
+ function WindowManagerImpl (editor) {
+ var open$$1 = function (args, params, closeCallback) {
+ var win;
+ args.title = args.title || ' ';
+ args.url = args.url || args.file;
+ if (args.url) {
+ args.width = parseInt(args.width || 320, 10);
+ args.height = parseInt(args.height || 240, 10);
+ }
+ if (args.body) {
+ args.items = {
+ defaults: args.defaults,
+ type: args.bodyType || 'form',
+ items: args.body,
+ data: args.data,
+ callbacks: args.commands
+ };
+ }
+ if (!args.url && !args.buttons) {
+ args.buttons = [
+ {
+ text: 'Ok',
+ subtype: 'primary',
+ onclick: function () {
+ win.find('form')[0].submit();
+ }
+ },
+ {
+ text: 'Cancel',
+ onclick: function () {
+ win.close();
+ }
+ }
+ ];
+ }
+ win = new Window$$1(args);
+ win.on('close', function () {
+ closeCallback(win);
+ });
+ if (args.data) {
+ win.on('postRender', function () {
+ this.find('*').each(function (ctrl) {
+ var name$$1 = ctrl.name();
+ if (name$$1 in args.data) {
+ ctrl.value(args.data[name$$1]);
+ }
+ });
+ });
+ }
+ win.features = args || {};
+ win.params = params || {};
+ win = win.renderTo(document.body).reflow();
+ return win;
+ };
+ var alert$$1 = function (message, choiceCallback, closeCallback) {
+ var win;
+ win = MessageBox.alert(message, function () {
+ choiceCallback();
+ });
+ win.on('close', function () {
+ closeCallback(win);
+ });
+ return win;
+ };
+ var confirm$$1 = function (message, choiceCallback, closeCallback) {
+ var win;
+ win = MessageBox.confirm(message, function (state) {
+ choiceCallback(state);
+ });
+ win.on('close', function () {
+ closeCallback(win);
+ });
+ return win;
+ };
+ var close$$1 = function (window$$1) {
+ window$$1.close();
+ };
+ var getParams = function (window$$1) {
+ return window$$1.params;
+ };
+ var setParams = function (window$$1, params) {
+ window$$1.params = params;
+ };
+ return {
+ open: open$$1,
+ alert: alert$$1,
+ confirm: confirm$$1,
+ close: close$$1,
+ getParams: getParams,
+ setParams: setParams
+ };
+ }
+
+ var get = function (editor) {
+ var renderUI = function (args) {
+ return $_as4c3qtrjjgwefn1.renderUI(editor, this, args);
+ };
+ var resizeTo = function (w, h) {
+ return $_sd6u0ubjjgwefok.resizeTo(editor, w, h);
+ };
+ var resizeBy = function (dw, dh) {
+ return $_sd6u0ubjjgwefok.resizeBy(editor, dw, dh);
+ };
+ var getNotificationManagerImpl = function () {
+ return NotificationManagerImpl(editor);
+ };
+ var getWindowManagerImpl = function () {
+ return WindowManagerImpl(editor);
+ };
+ return {
+ renderUI: renderUI,
+ resizeTo: resizeTo,
+ resizeBy: resizeBy,
+ getNotificationManagerImpl: getNotificationManagerImpl,
+ getWindowManagerImpl: getWindowManagerImpl
+ };
+ };
+ var $_buaxbttqjjgwefn0 = { get: get };
+
+ var Layout = global$10.extend({
+ Defaults: {
+ firstControlClass: 'first',
+ lastControlClass: 'last'
+ },
+ init: function (settings) {
+ this.settings = global$2.extend({}, this.Defaults, settings);
+ },
+ preRender: function (container) {
+ container.bodyClasses.add(this.settings.containerClass);
+ },
+ applyClasses: function (items) {
+ var self = this;
+ var settings = self.settings;
+ var firstClass, lastClass, firstItem, lastItem;
+ firstClass = settings.firstControlClass;
+ lastClass = settings.lastControlClass;
+ items.each(function (item) {
+ item.classes.remove(firstClass).remove(lastClass).add(settings.controlClass);
+ if (item.visible()) {
+ if (!firstItem) {
+ firstItem = item;
+ }
+ lastItem = item;
+ }
+ });
+ if (firstItem) {
+ firstItem.classes.add(firstClass);
+ }
+ if (lastItem) {
+ lastItem.classes.add(lastClass);
+ }
+ },
+ renderHtml: function (container) {
+ var self = this;
+ var html = '';
+ self.applyClasses(container.items());
+ container.items().each(function (item) {
+ html += item.renderHtml();
+ });
+ return html;
+ },
+ recalc: function () {
+ },
+ postRender: function () {
+ },
+ isNative: function () {
+ return false;
+ }
+ });
+
+ var AbsoluteLayout = Layout.extend({
+ Defaults: {
+ containerClass: 'abs-layout',
+ controlClass: 'abs-layout-item'
+ },
+ recalc: function (container) {
+ container.items().filter(':visible').each(function (ctrl) {
+ var settings = ctrl.settings;
+ ctrl.layoutRect({
+ x: settings.x,
+ y: settings.y,
+ w: settings.w,
+ h: settings.h
+ });
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ });
+ },
+ renderHtml: function (container) {
+ return '<div id="' + container._id + '-absend" class="' + container.classPrefix + 'abs-end"></div>' + this._super(container);
+ }
+ });
+
+ var Button = Widget.extend({
+ Defaults: {
+ classes: 'widget btn',
+ role: 'button'
+ },
+ init: function (settings) {
+ var self$$1 = this;
+ var size;
+ self$$1._super(settings);
+ settings = self$$1.settings;
+ size = self$$1.settings.size;
+ self$$1.on('click mousedown', function (e) {
+ e.preventDefault();
+ });
+ self$$1.on('touchstart', function (e) {
+ self$$1.fire('click', e);
+ e.preventDefault();
+ });
+ if (settings.subtype) {
+ self$$1.classes.add(settings.subtype);
+ }
+ if (size) {
+ self$$1.classes.add('btn-' + size);
+ }
+ if (settings.icon) {
+ self$$1.icon(settings.icon);
+ }
+ },
+ icon: function (icon) {
+ if (!arguments.length) {
+ return this.state.get('icon');
+ }
+ this.state.set('icon', icon);
+ return this;
+ },
+ repaint: function () {
+ var btnElm = this.getEl().firstChild;
+ var btnStyle;
+ if (btnElm) {
+ btnStyle = btnElm.style;
+ btnStyle.width = btnStyle.height = '100%';
+ }
+ this._super();
+ },
+ renderHtml: function () {
+ var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix;
+ var icon = self$$1.state.get('icon'), image;
+ var text = self$$1.state.get('text');
+ var textHtml = '';
+ var ariaPressed;
+ var settings = self$$1.settings;
+ image = settings.image;
+ if (image) {
+ icon = 'none';
+ if (typeof image !== 'string') {
+ image = window.getSelection ? image[0] : image[1];
+ }
+ image = ' style="background-image: url(\'' + image + '\')"';
+ } else {
+ image = '';
+ }
+ if (text) {
+ self$$1.classes.add('btn-has-text');
+ textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>';
+ }
+ icon = icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
+ ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
+ return '<div id="' + id + '" class="' + self$$1.classes + '" tabindex="-1"' + ariaPressed + '>' + '<button id="' + id + '-button" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '</div>';
+ },
+ bindStates: function () {
+ var self$$1 = this, $ = self$$1.$, textCls = self$$1.classPrefix + 'txt';
+ function setButtonText(text) {
+ var $span = $('span.' + textCls, self$$1.getEl());
+ if (text) {
+ if (!$span[0]) {
+ $('button:first', self$$1.getEl()).append('<span class="' + textCls + '"></span>');
+ $span = $('span.' + textCls, self$$1.getEl());
+ }
+ $span.html(self$$1.encode(text));
+ } else {
+ $span.remove();
+ }
+ self$$1.classes.toggle('btn-has-text', !!text);
+ }
+ self$$1.state.on('change:text', function (e) {
+ setButtonText(e.value);
+ });
+ self$$1.state.on('change:icon', function (e) {
+ var icon = e.value;
+ var prefix = self$$1.classPrefix;
+ self$$1.settings.icon = icon;
+ icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : '';
+ var btnElm = self$$1.getEl().firstChild;
+ var iconElm = btnElm.getElementsByTagName('i')[0];
+ if (icon) {
+ if (!iconElm || iconElm !== btnElm.firstChild) {
+ iconElm = document.createElement('i');
+ btnElm.insertBefore(iconElm, btnElm.firstChild);
+ }
+ iconElm.className = icon;
+ } else if (iconElm) {
+ btnElm.removeChild(iconElm);
+ }
+ setButtonText(self$$1.state.get('text'));
+ });
+ return self$$1._super();
+ }
+ });
+
+ var BrowseButton = Button.extend({
+ init: function (settings) {
+ var self = this;
+ settings = global$2.extend({
+ text: 'Browse...',
+ multiple: false,
+ accept: null
+ }, settings);
+ self._super(settings);
+ self.classes.add('browsebutton');
+ if (settings.multiple) {
+ self.classes.add('multiple');
+ }
+ },
+ postRender: function () {
+ var self = this;
+ var input = funcs.create('input', {
+ type: 'file',
+ id: self._id + '-browse',
+ accept: self.settings.accept
+ });
+ self._super();
+ global$9(input).on('change', function (e) {
+ var files = e.target.files;
+ self.value = function () {
+ if (!files.length) {
+ return null;
+ } else if (self.settings.multiple) {
+ return files;
+ } else {
+ return files[0];
+ }
+ };
+ e.preventDefault();
+ if (files.length) {
+ self.fire('change', e);
+ }
+ });
+ global$9(input).on('click', function (e) {
+ e.stopPropagation();
+ });
+ global$9(self.getEl('button')).on('click', function (e) {
+ e.stopPropagation();
+ input.click();
+ });
+ self.getEl().appendChild(input);
+ },
+ remove: function () {
+ global$9(this.getEl('button')).off();
+ global$9(this.getEl('input')).off();
+ this._super();
+ }
+ });
+
+ var ButtonGroup = Container.extend({
+ Defaults: {
+ defaultType: 'button',
+ role: 'group'
+ },
+ renderHtml: function () {
+ var self = this, layout = self._layout;
+ self.classes.add('btn-group');
+ self.preRender();
+ layout.preRender(self);
+ return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
+ }
+ });
+
+ var Checkbox = Widget.extend({
+ Defaults: {
+ classes: 'checkbox',
+ role: 'checkbox',
+ checked: false
+ },
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ self$$1.on('click mousedown', function (e) {
+ e.preventDefault();
+ });
+ self$$1.on('click', function (e) {
+ e.preventDefault();
+ if (!self$$1.disabled()) {
+ self$$1.checked(!self$$1.checked());
+ }
+ });
+ self$$1.checked(self$$1.settings.checked);
+ },
+ checked: function (state) {
+ if (!arguments.length) {
+ return this.state.get('checked');
+ }
+ this.state.set('checked', state);
+ return this;
+ },
+ value: function (state) {
+ if (!arguments.length) {
+ return this.checked();
+ }
+ return this.checked(state);
+ },
+ renderHtml: function () {
+ var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix;
+ return '<div id="' + id + '" class="' + self$$1.classes + '" unselectable="on" aria-labelledby="' + id + '-al" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-checkbox"></i>' + '<span id="' + id + '-al" class="' + prefix + 'label">' + self$$1.encode(self$$1.state.get('text')) + '</span>' + '</div>';
+ },
+ bindStates: function () {
+ var self$$1 = this;
+ function checked(state) {
+ self$$1.classes.toggle('checked', state);
+ self$$1.aria('checked', state);
+ }
+ self$$1.state.on('change:text', function (e) {
+ self$$1.getEl('al').firstChild.data = self$$1.translate(e.value);
+ });
+ self$$1.state.on('change:checked change:value', function (e) {
+ self$$1.fire('change');
+ checked(e.value);
+ });
+ self$$1.state.on('change:icon', function (e) {
+ var icon = e.value;
+ var prefix = self$$1.classPrefix;
+ if (typeof icon === 'undefined') {
+ return self$$1.settings.icon;
+ }
+ self$$1.settings.icon = icon;
+ icon = icon ? prefix + 'ico ' + prefix + 'i-' + self$$1.settings.icon : '';
+ var btnElm = self$$1.getEl().firstChild;
+ var iconElm = btnElm.getElementsByTagName('i')[0];
+ if (icon) {
+ if (!iconElm || iconElm !== btnElm.firstChild) {
+ iconElm = document.createElement('i');
+ btnElm.insertBefore(iconElm, btnElm.firstChild);
+ }
+ iconElm.className = icon;
+ } else if (iconElm) {
+ btnElm.removeChild(iconElm);
+ }
+ });
+ if (self$$1.state.get('checked')) {
+ checked(true);
+ }
+ return self$$1._super();
+ }
+ });
+
+ var global$13 = tinymce.util.Tools.resolve('tinymce.util.VK');
+
+ var ComboBox = Widget.extend({
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ settings = self$$1.settings;
+ self$$1.classes.add('combobox');
+ self$$1.subinput = true;
+ self$$1.ariaTarget = 'inp';
+ settings.menu = settings.menu || settings.values;
+ if (settings.menu) {
+ settings.icon = 'caret';
+ }
+ self$$1.on('click', function (e) {
+ var elm = e.target;
+ var root = self$$1.getEl();
+ if (!global$9.contains(root, elm) && elm !== root) {
+ return;
+ }
+ while (elm && elm !== root) {
+ if (elm.id && elm.id.indexOf('-open') !== -1) {
+ self$$1.fire('action');
+ if (settings.menu) {
+ self$$1.showMenu();
+ if (e.aria) {
+ self$$1.menu.items()[0].focus();
+ }
+ }
+ }
+ elm = elm.parentNode;
+ }
+ });
+ self$$1.on('keydown', function (e) {
+ var rootControl;
+ if (e.keyCode === 13 && e.target.nodeName === 'INPUT') {
+ e.preventDefault();
+ self$$1.parents().reverse().each(function (ctrl) {
+ if (ctrl.toJSON) {
+ rootControl = ctrl;
+ return false;
+ }
+ });
+ self$$1.fire('submit', { data: rootControl.toJSON() });
+ }
+ });
+ self$$1.on('keyup', function (e) {
+ if (e.target.nodeName === 'INPUT') {
+ var oldValue = self$$1.state.get('value');
+ var newValue = e.target.value;
+ if (newValue !== oldValue) {
+ self$$1.state.set('value', newValue);
+ self$$1.fire('autocomplete', e);
+ }
+ }
+ });
+ self$$1.on('mouseover', function (e) {
+ var tooltip = self$$1.tooltip().moveTo(-65535);
+ if (self$$1.statusLevel() && e.target.className.indexOf(self$$1.classPrefix + 'status') !== -1) {
+ var statusMessage = self$$1.statusMessage() || 'Ok';
+ var rel = tooltip.text(statusMessage).show().testMoveRel(e.target, [
+ 'bc-tc',
+ 'bc-tl',
+ 'bc-tr'
+ ]);
+ tooltip.classes.toggle('tooltip-n', rel === 'bc-tc');
+ tooltip.classes.toggle('tooltip-nw', rel === 'bc-tl');
+ tooltip.classes.toggle('tooltip-ne', rel === 'bc-tr');
+ tooltip.moveRel(e.target, rel);
+ }
+ });
+ },
+ statusLevel: function (value) {
+ if (arguments.length > 0) {
+ this.state.set('statusLevel', value);
+ }
+ return this.state.get('statusLevel');
+ },
+ statusMessage: function (value) {
+ if (arguments.length > 0) {
+ this.state.set('statusMessage', value);
+ }
+ return this.state.get('statusMessage');
+ },
+ showMenu: function () {
+ var self$$1 = this;
+ var settings = self$$1.settings;
+ var menu;
+ if (!self$$1.menu) {
+ menu = settings.menu || [];
+ if (menu.length) {
+ menu = {
+ type: 'menu',
+ items: menu
+ };
+ } else {
+ menu.type = menu.type || 'menu';
+ }
+ self$$1.menu = global$4.create(menu).parent(self$$1).renderTo(self$$1.getContainerElm());
+ self$$1.fire('createmenu');
+ self$$1.menu.reflow();
+ self$$1.menu.on('cancel', function (e) {
+ if (e.control === self$$1.menu) {
+ self$$1.focus();
+ }
+ });
+ self$$1.menu.on('show hide', function (e) {
+ e.control.items().each(function (ctrl) {
+ ctrl.active(ctrl.value() === self$$1.value());
+ });
+ }).fire('show');
+ self$$1.menu.on('select', function (e) {
+ self$$1.value(e.control.value());
+ });
+ self$$1.on('focusin', function (e) {
+ if (e.target.tagName.toUpperCase() === 'INPUT') {
+ self$$1.menu.hide();
+ }
+ });
+ self$$1.aria('expanded', true);
+ }
+ self$$1.menu.show();
+ self$$1.menu.layoutRect({ w: self$$1.layoutRect().w });
+ self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [
+ 'br-tr',
+ 'tr-br'
+ ] : [
+ 'bl-tl',
+ 'tl-bl'
+ ]);
+ },
+ focus: function () {
+ this.getEl('inp').focus();
+ },
+ repaint: function () {
+ var self$$1 = this, elm = self$$1.getEl(), openElm = self$$1.getEl('open'), rect = self$$1.layoutRect();
+ var width, lineHeight, innerPadding = 0;
+ var inputElm = elm.firstChild;
+ if (self$$1.statusLevel() && self$$1.statusLevel() !== 'none') {
+ innerPadding = parseInt(funcs.getRuntimeStyle(inputElm, 'padding-right'), 10) - parseInt(funcs.getRuntimeStyle(inputElm, 'padding-left'), 10);
+ }
+ if (openElm) {
+ width = rect.w - funcs.getSize(openElm).width - 10;
+ } else {
+ width = rect.w - 10;
+ }
+ var doc = document;
+ if (doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
+ lineHeight = self$$1.layoutRect().h - 2 + 'px';
+ }
+ global$9(inputElm).css({
+ width: width - innerPadding,
+ lineHeight: lineHeight
+ });
+ self$$1._super();
+ return self$$1;
+ },
+ postRender: function () {
+ var self$$1 = this;
+ global$9(this.getEl('inp')).on('change', function (e) {
+ self$$1.state.set('value', e.target.value);
+ self$$1.fire('change', e);
+ });
+ return self$$1._super();
+ },
+ renderHtml: function () {
+ var self$$1 = this, id = self$$1._id, settings = self$$1.settings, prefix = self$$1.classPrefix;
+ var value = self$$1.state.get('value') || '';
+ var icon, text, openBtnHtml = '', extraAttrs = '', statusHtml = '';
+ if ('spellcheck' in settings) {
+ extraAttrs += ' spellcheck="' + settings.spellcheck + '"';
+ }
+ if (settings.maxLength) {
+ extraAttrs += ' maxlength="' + settings.maxLength + '"';
+ }
+ if (settings.size) {
+ extraAttrs += ' size="' + settings.size + '"';
+ }
+ if (settings.subtype) {
+ extraAttrs += ' type="' + settings.subtype + '"';
+ }
+ statusHtml = '<i id="' + id + '-status" class="mce-status mce-ico" style="display: none"></i>';
+ if (self$$1.disabled()) {
+ extraAttrs += ' disabled="disabled"';
+ }
+ icon = settings.icon;
+ if (icon && icon !== 'caret') {
+ icon = prefix + 'ico ' + prefix + 'i-' + settings.icon;
+ }
+ text = self$$1.state.get('text');
+ if (icon || text) {
+ openBtnHtml = '<div id="' + id + '-open" class="' + prefix + 'btn ' + prefix + 'open" tabIndex="-1" role="button">' + '<button id="' + id + '-action" type="button" hidefocus="1" tabindex="-1">' + (icon !== 'caret' ? '<i class="' + icon + '"></i>' : '<i class="' + prefix + 'caret"></i>') + (text ? (icon ? ' ' : '') + text : '') + '</button>' + '</div>';
+ self$$1.classes.add('has-open');
+ }
+ return '<div id="' + id + '" class="' + self$$1.classes + '">' + '<input id="' + id + '-inp" class="' + prefix + 'textbox" value="' + self$$1.encode(value, false) + '" hidefocus="1"' + extraAttrs + ' placeholder="' + self$$1.encode(settings.placeholder) + '" />' + statusHtml + openBtnHtml + '</div>';
+ },
+ value: function (value) {
+ if (arguments.length) {
+ this.state.set('value', value);
+ return this;
+ }
+ if (this.state.get('rendered')) {
+ this.state.set('value', this.getEl('inp').value);
+ }
+ return this.state.get('value');
+ },
+ showAutoComplete: function (items, term) {
+ var self$$1 = this;
+ if (items.length === 0) {
+ self$$1.hideMenu();
+ return;
+ }
+ var insert = function (value, title) {
+ return function () {
+ self$$1.fire('selectitem', {
+ title: title,
+ value: value
+ });
+ };
+ };
+ if (self$$1.menu) {
+ self$$1.menu.items().remove();
+ } else {
+ self$$1.menu = global$4.create({
+ type: 'menu',
+ classes: 'combobox-menu',
+ layout: 'flow'
+ }).parent(self$$1).renderTo();
+ }
+ global$2.each(items, function (item) {
+ self$$1.menu.add({
+ text: item.title,
+ url: item.previewUrl,
+ match: term,
+ classes: 'menu-item-ellipsis',
+ onclick: insert(item.value, item.title)
+ });
+ });
+ self$$1.menu.renderNew();
+ self$$1.hideMenu();
+ self$$1.menu.on('cancel', function (e) {
+ if (e.control.parent() === self$$1.menu) {
+ e.stopPropagation();
+ self$$1.focus();
+ self$$1.hideMenu();
+ }
+ });
+ self$$1.menu.on('select', function () {
+ self$$1.focus();
+ });
+ var maxW = self$$1.layoutRect().w;
+ self$$1.menu.layoutRect({
+ w: maxW,
+ minW: 0,
+ maxW: maxW
+ });
+ self$$1.menu.repaint();
+ self$$1.menu.reflow();
+ self$$1.menu.show();
+ self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [
+ 'br-tr',
+ 'tr-br'
+ ] : [
+ 'bl-tl',
+ 'tl-bl'
+ ]);
+ },
+ hideMenu: function () {
+ if (this.menu) {
+ this.menu.hide();
+ }
+ },
+ bindStates: function () {
+ var self$$1 = this;
+ self$$1.state.on('change:value', function (e) {
+ if (self$$1.getEl('inp').value !== e.value) {
+ self$$1.getEl('inp').value = e.value;
+ }
+ });
+ self$$1.state.on('change:disabled', function (e) {
+ self$$1.getEl('inp').disabled = e.value;
+ });
+ self$$1.state.on('change:statusLevel', function (e) {
+ var statusIconElm = self$$1.getEl('status');
+ var prefix = self$$1.classPrefix, value = e.value;
+ funcs.css(statusIconElm, 'display', value === 'none' ? 'none' : '');
+ funcs.toggleClass(statusIconElm, prefix + 'i-checkmark', value === 'ok');
+ funcs.toggleClass(statusIconElm, prefix + 'i-warning', value === 'warn');
+ funcs.toggleClass(statusIconElm, prefix + 'i-error', value === 'error');
+ self$$1.classes.toggle('has-status', value !== 'none');
+ self$$1.repaint();
+ });
+ funcs.on(self$$1.getEl('status'), 'mouseleave', function () {
+ self$$1.tooltip().hide();
+ });
+ self$$1.on('cancel', function (e) {
+ if (self$$1.menu && self$$1.menu.visible()) {
+ e.stopPropagation();
+ self$$1.hideMenu();
+ }
+ });
+ var focusIdx = function (idx, menu) {
+ if (menu && menu.items().length > 0) {
+ menu.items().eq(idx)[0].focus();
+ }
+ };
+ self$$1.on('keydown', function (e) {
+ var keyCode = e.keyCode;
+ if (e.target.nodeName === 'INPUT') {
+ if (keyCode === global$13.DOWN) {
+ e.preventDefault();
+ self$$1.fire('autocomplete');
+ focusIdx(0, self$$1.menu);
+ } else if (keyCode === global$13.UP) {
+ e.preventDefault();
+ focusIdx(-1, self$$1.menu);
+ }
+ }
+ });
+ return self$$1._super();
+ },
+ remove: function () {
+ global$9(this.getEl('inp')).off();
+ if (this.menu) {
+ this.menu.remove();
+ }
+ this._super();
+ }
+ });
+
+ var ColorBox = ComboBox.extend({
+ init: function (settings) {
+ var self = this;
+ settings.spellcheck = false;
+ if (settings.onaction) {
+ settings.icon = 'none';
+ }
+ self._super(settings);
+ self.classes.add('colorbox');
+ self.on('change keyup postrender', function () {
+ self.repaintColor(self.value());
+ });
+ },
+ repaintColor: function (value) {
+ var openElm = this.getEl('open');
+ var elm = openElm ? openElm.getElementsByTagName('i')[0] : null;
+ if (elm) {
+ try {
+ elm.style.background = value;
+ } catch (ex) {
+ }
+ }
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:value', function (e) {
+ if (self.state.get('rendered')) {
+ self.repaintColor(e.value);
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var PanelButton = Button.extend({
+ showPanel: function () {
+ var self = this, settings = self.settings;
+ self.classes.add('opened');
+ if (!self.panel) {
+ var panelSettings = settings.panel;
+ if (panelSettings.type) {
+ panelSettings = {
+ layout: 'grid',
+ items: panelSettings
+ };
+ }
+ panelSettings.role = panelSettings.role || 'dialog';
+ panelSettings.popover = true;
+ panelSettings.autohide = true;
+ panelSettings.ariaRoot = true;
+ self.panel = new FloatPanel(panelSettings).on('hide', function () {
+ self.classes.remove('opened');
+ }).on('cancel', function (e) {
+ e.stopPropagation();
+ self.focus();
+ self.hidePanel();
+ }).parent(self).renderTo(self.getContainerElm());
+ self.panel.fire('show');
+ self.panel.reflow();
+ } else {
+ self.panel.show();
+ }
+ var rtlRels = [
+ 'bc-tc',
+ 'bc-tl',
+ 'bc-tr'
+ ];
+ var ltrRels = [
+ 'bc-tc',
+ 'bc-tr',
+ 'bc-tl',
+ 'tc-bc',
+ 'tc-br',
+ 'tc-bl'
+ ];
+ var rel = self.panel.testMoveRel(self.getEl(), settings.popoverAlign || (self.isRtl() ? rtlRels : ltrRels));
+ self.panel.classes.toggle('start', rel.substr(-1) === 'l');
+ self.panel.classes.toggle('end', rel.substr(-1) === 'r');
+ var isTop = rel.substr(0, 1) === 't';
+ self.panel.classes.toggle('bottom', !isTop);
+ self.panel.classes.toggle('top', isTop);
+ self.panel.moveRel(self.getEl(), rel);
+ },
+ hidePanel: function () {
+ var self = this;
+ if (self.panel) {
+ self.panel.hide();
+ }
+ },
+ postRender: function () {
+ var self = this;
+ self.aria('haspopup', true);
+ self.on('click', function (e) {
+ if (e.control === self) {
+ if (self.panel && self.panel.visible()) {
+ self.hidePanel();
+ } else {
+ self.showPanel();
+ self.panel.focus(!!e.aria);
+ }
+ }
+ });
+ return self._super();
+ },
+ remove: function () {
+ if (this.panel) {
+ this.panel.remove();
+ this.panel = null;
+ }
+ return this._super();
+ }
+ });
+
+ var DOM$3 = global$3.DOM;
+ var ColorButton = PanelButton.extend({
+ init: function (settings) {
+ this._super(settings);
+ this.classes.add('splitbtn');
+ this.classes.add('colorbutton');
+ },
+ color: function (color) {
+ if (color) {
+ this._color = color;
+ this.getEl('preview').style.backgroundColor = color;
+ return this;
+ }
+ return this._color;
+ },
+ resetColor: function () {
+ this._color = null;
+ this.getEl('preview').style.backgroundColor = null;
+ return this;
+ },
+ renderHtml: function () {
+ var self = this, id = self._id, prefix = self.classPrefix, text = self.state.get('text');
+ var icon = self.settings.icon ? prefix + 'ico ' + prefix + 'i-' + self.settings.icon : '';
+ var image = self.settings.image ? ' style="background-image: url(\'' + self.settings.image + '\')"' : '';
+ var textHtml = '';
+ if (text) {
+ self.classes.add('btn-has-text');
+ textHtml = '<span class="' + prefix + 'txt">' + self.encode(text) + '</span>';
+ }
+ return '<div id="' + id + '" class="' + self.classes + '" role="button" tabindex="-1" aria-haspopup="true">' + '<button role="presentation" hidefocus="1" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + '<span id="' + id + '-preview" class="' + prefix + 'preview"></span>' + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
+ },
+ postRender: function () {
+ var self = this, onClickHandler = self.settings.onclick;
+ self.on('click', function (e) {
+ if (e.aria && e.aria.key === 'down') {
+ return;
+ }
+ if (e.control === self && !DOM$3.getParent(e.target, '.' + self.classPrefix + 'open')) {
+ e.stopImmediatePropagation();
+ onClickHandler.call(self, e);
+ }
+ });
+ delete self.settings.onclick;
+ return self._super();
+ }
+ });
+
+ var global$14 = tinymce.util.Tools.resolve('tinymce.util.Color');
+
+ var ColorPicker = Widget.extend({
+ Defaults: { classes: 'widget colorpicker' },
+ init: function (settings) {
+ this._super(settings);
+ },
+ postRender: function () {
+ var self = this;
+ var color = self.color();
+ var hsv, hueRootElm, huePointElm, svRootElm, svPointElm;
+ hueRootElm = self.getEl('h');
+ huePointElm = self.getEl('hp');
+ svRootElm = self.getEl('sv');
+ svPointElm = self.getEl('svp');
+ function getPos(elm, event) {
+ var pos = funcs.getPos(elm);
+ var x, y;
+ x = event.pageX - pos.x;
+ y = event.pageY - pos.y;
+ x = Math.max(0, Math.min(x / elm.clientWidth, 1));
+ y = Math.max(0, Math.min(y / elm.clientHeight, 1));
+ return {
+ x: x,
+ y: y
+ };
+ }
+ function updateColor(hsv, hueUpdate) {
+ var hue = (360 - hsv.h) / 360;
+ funcs.css(huePointElm, { top: hue * 100 + '%' });
+ if (!hueUpdate) {
+ funcs.css(svPointElm, {
+ left: hsv.s + '%',
+ top: 100 - hsv.v + '%'
+ });
+ }
+ svRootElm.style.background = global$14({
+ s: 100,
+ v: 100,
+ h: hsv.h
+ }).toHex();
+ self.color().parse({
+ s: hsv.s,
+ v: hsv.v,
+ h: hsv.h
+ });
+ }
+ function updateSaturationAndValue(e) {
+ var pos;
+ pos = getPos(svRootElm, e);
+ hsv.s = pos.x * 100;
+ hsv.v = (1 - pos.y) * 100;
+ updateColor(hsv);
+ self.fire('change');
+ }
+ function updateHue(e) {
+ var pos;
+ pos = getPos(hueRootElm, e);
+ hsv = color.toHsv();
+ hsv.h = (1 - pos.y) * 360;
+ updateColor(hsv, true);
+ self.fire('change');
+ }
+ self._repaint = function () {
+ hsv = color.toHsv();
+ updateColor(hsv);
+ };
+ self._super();
+ self._svdraghelper = new DragHelper(self._id + '-sv', {
+ start: updateSaturationAndValue,
+ drag: updateSaturationAndValue
+ });
+ self._hdraghelper = new DragHelper(self._id + '-h', {
+ start: updateHue,
+ drag: updateHue
+ });
+ self._repaint();
+ },
+ rgb: function () {
+ return this.color().toRgb();
+ },
+ value: function (value) {
+ var self = this;
+ if (arguments.length) {
+ self.color().parse(value);
+ if (self._rendered) {
+ self._repaint();
+ }
+ } else {
+ return self.color().toHex();
+ }
+ },
+ color: function () {
+ if (!this._color) {
+ this._color = global$14();
+ }
+ return this._color;
+ },
+ renderHtml: function () {
+ var self = this;
+ var id = self._id;
+ var prefix = self.classPrefix;
+ var hueHtml;
+ var stops = '#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000';
+ function getOldIeFallbackHtml() {
+ var i, l, html = '', gradientPrefix, stopsList;
+ gradientPrefix = 'filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=';
+ stopsList = stops.split(',');
+ for (i = 0, l = stopsList.length - 1; i < l; i++) {
+ html += '<div class="' + prefix + 'colorpicker-h-chunk" style="' + 'height:' + 100 / l + '%;' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ');' + '-ms-' + gradientPrefix + stopsList[i] + ',endColorstr=' + stopsList[i + 1] + ')' + '"></div>';
+ }
+ return html;
+ }
+ var gradientCssText = 'background: -ms-linear-gradient(top,' + stops + ');' + 'background: linear-gradient(to bottom,' + stops + ');';
+ hueHtml = '<div id="' + id + '-h" class="' + prefix + 'colorpicker-h" style="' + gradientCssText + '">' + getOldIeFallbackHtml() + '<div id="' + id + '-hp" class="' + prefix + 'colorpicker-h-marker"></div>' + '</div>';
+ return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-sv" class="' + prefix + 'colorpicker-sv">' + '<div class="' + prefix + 'colorpicker-overlay1">' + '<div class="' + prefix + 'colorpicker-overlay2">' + '<div id="' + id + '-svp" class="' + prefix + 'colorpicker-selector1">' + '<div class="' + prefix + 'colorpicker-selector2"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + hueHtml + '</div>';
+ }
+ });
+
+ var DropZone = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ settings = global$2.extend({
+ height: 100,
+ text: 'Drop an image here',
+ multiple: false,
+ accept: null
+ }, settings);
+ self._super(settings);
+ self.classes.add('dropzone');
+ if (settings.multiple) {
+ self.classes.add('multiple');
+ }
+ },
+ renderHtml: function () {
+ var self = this;
+ var attrs, elm;
+ var cfg = self.settings;
+ attrs = {
+ id: self._id,
+ hidefocus: '1'
+ };
+ elm = funcs.create('div', attrs, '<span>' + this.translate(cfg.text) + '</span>');
+ if (cfg.height) {
+ funcs.css(elm, 'height', cfg.height + 'px');
+ }
+ if (cfg.width) {
+ funcs.css(elm, 'width', cfg.width + 'px');
+ }
+ elm.className = self.classes;
+ return elm.outerHTML;
+ },
+ postRender: function () {
+ var self = this;
+ var toggleDragClass = function (e) {
+ e.preventDefault();
+ self.classes.toggle('dragenter');
+ self.getEl().className = self.classes;
+ };
+ var filter = function (files) {
+ var accept = self.settings.accept;
+ if (typeof accept !== 'string') {
+ return files;
+ }
+ var re = new RegExp('(' + accept.split(/\s*,\s*/).join('|') + ')$', 'i');
+ return global$2.grep(files, function (file) {
+ return re.test(file.name);
+ });
+ };
+ self._super();
+ self.$el.on('dragover', function (e) {
+ e.preventDefault();
+ });
+ self.$el.on('dragenter', toggleDragClass);
+ self.$el.on('dragleave', toggleDragClass);
+ self.$el.on('drop', function (e) {
+ e.preventDefault();
+ if (self.state.get('disabled')) {
+ return;
+ }
+ var files = filter(e.dataTransfer.files);
+ self.value = function () {
+ if (!files.length) {
+ return null;
+ } else if (self.settings.multiple) {
+ return files;
+ } else {
+ return files[0];
+ }
+ };
+ if (files.length) {
+ self.fire('change', e);
+ }
+ });
+ },
+ remove: function () {
+ this.$el.off();
+ this._super();
+ }
+ });
+
+ var Path = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ if (!settings.delimiter) {
+ settings.delimiter = '\xBB';
+ }
+ self._super(settings);
+ self.classes.add('path');
+ self.canFocus = true;
+ self.on('click', function (e) {
+ var index;
+ var target = e.target;
+ if (index = target.getAttribute('data-index')) {
+ self.fire('select', {
+ value: self.row()[index],
+ index: index
+ });
+ }
+ });
+ self.row(self.settings.row);
+ },
+ focus: function () {
+ var self = this;
+ self.getEl().firstChild.focus();
+ return self;
+ },
+ row: function (row) {
+ if (!arguments.length) {
+ return this.state.get('row');
+ }
+ this.state.set('row', row);
+ return this;
+ },
+ renderHtml: function () {
+ var self = this;
+ return '<div id="' + self._id + '" class="' + self.classes + '">' + self._getDataPathHtml(self.state.get('row')) + '</div>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:row', function (e) {
+ self.innerHtml(self._getDataPathHtml(e.value));
+ });
+ return self._super();
+ },
+ _getDataPathHtml: function (data) {
+ var self = this;
+ var parts = data || [];
+ var i, l, html = '';
+ var prefix = self.classPrefix;
+ for (i = 0, l = parts.length; i < l; i++) {
+ html += (i > 0 ? '<div class="' + prefix + 'divider" aria-hidden="true"> ' + self.settings.delimiter + ' </div>' : '') + '<div role="button" class="' + prefix + 'path-item' + (i === l - 1 ? ' ' + prefix + 'last' : '') + '" data-index="' + i + '" tabindex="-1" id="' + self._id + '-' + i + '" aria-level="' + (i + 1) + '">' + parts[i].name + '</div>';
+ }
+ if (!html) {
+ html = '<div class="' + prefix + 'path-item">\xA0</div>';
+ }
+ return html;
+ }
+ });
+
+ var ElementPath = Path.extend({
+ postRender: function () {
+ var self = this, editor = self.settings.editor;
+ function isHidden(elm) {
+ if (elm.nodeType === 1) {
+ if (elm.nodeName === 'BR' || !!elm.getAttribute('data-mce-bogus')) {
+ return true;
+ }
+ if (elm.getAttribute('data-mce-type') === 'bookmark') {
+ return true;
+ }
+ }
+ return false;
+ }
+ if (editor.settings.elementpath !== false) {
+ self.on('select', function (e) {
+ editor.focus();
+ editor.selection.select(this.row()[e.index].element);
+ editor.nodeChanged();
+ });
+ editor.on('nodeChange', function (e) {
+ var outParents = [];
+ var parents = e.parents;
+ var i = parents.length;
+ while (i--) {
+ if (parents[i].nodeType === 1 && !isHidden(parents[i])) {
+ var args = editor.fire('ResolveName', {
+ name: parents[i].nodeName.toLowerCase(),
+ target: parents[i]
+ });
+ if (!args.isDefaultPrevented()) {
+ outParents.push({
+ name: args.name,
+ element: parents[i]
+ });
+ }
+ if (args.isPropagationStopped()) {
+ break;
+ }
+ }
+ }
+ self.row(outParents);
+ });
+ }
+ return self._super();
+ }
+ });
+
+ var FormItem = Container.extend({
+ Defaults: {
+ layout: 'flex',
+ align: 'center',
+ defaults: { flex: 1 }
+ },
+ renderHtml: function () {
+ var self = this, layout = self._layout, prefix = self.classPrefix;
+ self.classes.add('formitem');
+ layout.preRender(self);
+ return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<div id="' + self._id + '-title" class="' + prefix + 'title">' + self.settings.title + '</div>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</div>';
+ }
+ });
+
+ var Form = Container.extend({
+ Defaults: {
+ containerCls: 'form',
+ layout: 'flex',
+ direction: 'column',
+ align: 'stretch',
+ flex: 1,
+ padding: 15,
+ labelGap: 30,
+ spacing: 10,
+ callbacks: {
+ submit: function () {
+ this.submit();
+ }
+ }
+ },
+ preRender: function () {
+ var self = this, items = self.items();
+ if (!self.settings.formItemDefaults) {
+ self.settings.formItemDefaults = {
+ layout: 'flex',
+ autoResize: 'overflow',
+ defaults: { flex: 1 }
+ };
+ }
+ items.each(function (ctrl) {
+ var formItem;
+ var label = ctrl.settings.label;
+ if (label) {
+ formItem = new FormItem(global$2.extend({
+ items: {
+ type: 'label',
+ id: ctrl._id + '-l',
+ text: label,
+ flex: 0,
+ forId: ctrl._id,
+ disabled: ctrl.disabled()
+ }
+ }, self.settings.formItemDefaults));
+ formItem.type = 'formitem';
+ ctrl.aria('labelledby', ctrl._id + '-l');
+ if (typeof ctrl.settings.flex === 'undefined') {
+ ctrl.settings.flex = 1;
+ }
+ self.replace(ctrl, formItem);
+ formItem.add(ctrl);
+ }
+ });
+ },
+ submit: function () {
+ return this.fire('submit', { data: this.toJSON() });
+ },
+ postRender: function () {
+ var self = this;
+ self._super();
+ self.fromJSON(self.settings.data);
+ },
+ bindStates: function () {
+ var self = this;
+ self._super();
+ function recalcLabels() {
+ var maxLabelWidth = 0;
+ var labels = [];
+ var i, labelGap, items;
+ if (self.settings.labelGapCalc === false) {
+ return;
+ }
+ if (self.settings.labelGapCalc === 'children') {
+ items = self.find('formitem');
+ } else {
+ items = self.items();
+ }
+ items.filter('formitem').each(function (item) {
+ var labelCtrl = item.items()[0], labelWidth = labelCtrl.getEl().clientWidth;
+ maxLabelWidth = labelWidth > maxLabelWidth ? labelWidth : maxLabelWidth;
+ labels.push(labelCtrl);
+ });
+ labelGap = self.settings.labelGap || 0;
+ i = labels.length;
+ while (i--) {
+ labels[i].settings.minWidth = maxLabelWidth + labelGap;
+ }
+ }
+ self.on('show', recalcLabels);
+ recalcLabels();
+ }
+ });
+
+ var FieldSet = Form.extend({
+ Defaults: {
+ containerCls: 'fieldset',
+ layout: 'flex',
+ direction: 'column',
+ align: 'stretch',
+ flex: 1,
+ padding: '25 15 5 15',
+ labelGap: 30,
+ spacing: 10,
+ border: 1
+ },
+ renderHtml: function () {
+ var self = this, layout = self._layout, prefix = self.classPrefix;
+ self.preRender();
+ layout.preRender(self);
+ return '<fieldset id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + (self.settings.title ? '<legend id="' + self._id + '-title" class="' + prefix + 'fieldset-title">' + self.settings.title + '</legend>' : '') + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + (self.settings.html || '') + layout.renderHtml(self) + '</div>' + '</fieldset>';
+ }
+ });
+
+ var unique$1 = 0;
+ var generate = function (prefix) {
+ var date = new Date();
+ var time = date.getTime();
+ var random = Math.floor(Math.random() * 1000000000);
+ unique$1++;
+ return prefix + '_' + random + unique$1 + String(time);
+ };
+
+ var fromHtml = function (html, scope) {
+ var doc = scope || document;
+ var div = doc.createElement('div');
+ div.innerHTML = html;
+ if (!div.hasChildNodes() || div.childNodes.length > 1) {
+ console.error('HTML does not have a single root node', html);
+ throw 'HTML must have a single root node';
+ }
+ return fromDom(div.childNodes[0]);
+ };
+ var fromTag = function (tag, scope) {
+ var doc = scope || document;
+ var node = doc.createElement(tag);
+ return fromDom(node);
+ };
+ var fromText = function (text, scope) {
+ var doc = scope || document;
+ var node = doc.createTextNode(text);
+ return fromDom(node);
+ };
+ var fromDom = function (node) {
+ if (node === null || node === undefined)
+ throw new Error('Node cannot be null or undefined');
+ return { dom: constant(node) };
+ };
+ var fromPoint = function (docElm, x, y) {
+ var doc = docElm.dom();
+ return Option.from(doc.elementFromPoint(x, y)).map(fromDom);
+ };
+ var Element$$1 = {
+ fromHtml: fromHtml,
+ fromTag: fromTag,
+ fromText: fromText,
+ fromDom: fromDom,
+ fromPoint: fromPoint
+ };
+
+ var cached = function (f) {
+ var called = false;
+ var r;
+ return function () {
+ var args = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ args[_i] = arguments[_i];
+ }
+ if (!called) {
+ called = true;
+ r = f.apply(null, args);
+ }
+ return r;
+ };
+ };
+
+ var $_vi4lpw5jjgwefvz = {
+ ATTRIBUTE: Node.ATTRIBUTE_NODE,
+ CDATA_SECTION: Node.CDATA_SECTION_NODE,
+ COMMENT: Node.COMMENT_NODE,
+ DOCUMENT: Node.DOCUMENT_NODE,
+ DOCUMENT_TYPE: Node.DOCUMENT_TYPE_NODE,
+ DOCUMENT_FRAGMENT: Node.DOCUMENT_FRAGMENT_NODE,
+ ELEMENT: Node.ELEMENT_NODE,
+ TEXT: Node.TEXT_NODE,
+ PROCESSING_INSTRUCTION: Node.PROCESSING_INSTRUCTION_NODE,
+ ENTITY_REFERENCE: Node.ENTITY_REFERENCE_NODE,
+ ENTITY: Node.ENTITY_NODE,
+ NOTATION: Node.NOTATION_NODE
+ };
+
+ var name = function (element) {
+ var r = element.dom().nodeName;
+ return r.toLowerCase();
+ };
+ var type = function (element) {
+ return element.dom().nodeType;
+ };
+ var value = function (element) {
+ return element.dom().nodeValue;
+ };
+ var isType$1 = function (t) {
+ return function (element) {
+ return type(element) === t;
+ };
+ };
+ var isComment = function (element) {
+ return type(element) === $_vi4lpw5jjgwefvz.COMMENT || name(element) === '#comment';
+ };
+ var isElement = isType$1($_vi4lpw5jjgwefvz.ELEMENT);
+ var isText = isType$1($_vi4lpw5jjgwefvz.TEXT);
+ var isDocument = isType$1($_vi4lpw5jjgwefvz.DOCUMENT);
+ var $_8bzgjvw4jjgwefvy = {
+ name: name,
+ type: type,
+ value: value,
+ isElement: isElement,
+ isText: isText,
+ isDocument: isDocument,
+ isComment: isComment
+ };
+
+ var inBody = function (element) {
+ var dom = $_8bzgjvw4jjgwefvy.isText(element) ? element.dom().parentNode : element.dom();
+ return dom !== undefined && dom !== null && dom.ownerDocument.body.contains(dom);
+ };
+ var body = cached(function () {
+ return getBody(Element$$1.fromDom(document));
+ });
+ var getBody = function (doc) {
+ var body = doc.dom().body;
+ if (body === null || body === undefined)
+ throw 'Body is not available yet';
+ return Element$$1.fromDom(body);
+ };
+ var $_g7jljiw2jjgwefvu = {
+ body: body,
+ getBody: getBody,
+ inBody: inBody
+ };
+
+ var Immutable = function () {
+ var fields = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ fields[_i] = arguments[_i];
+ }
+ return function () {
+ var values = [];
+ for (var _i = 0; _i < arguments.length; _i++) {
+ values[_i] = arguments[_i];
+ }
+ if (fields.length !== values.length) {
+ throw new Error('Wrong number of arguments to struct. Expected "[' + fields.length + ']", got ' + values.length + ' arguments');
+ }
+ var struct = {};
+ each(fields, function (name, i) {
+ struct[name] = constant(values[i]);
+ });
+ return struct;
+ };
+ };
+
+ var toArray = function (target, f) {
+ var r = [];
+ var recurse = function (e) {
+ r.push(e);
+ return f(e);
+ };
+ var cur = f(target);
+ do {
+ cur = cur.bind(recurse);
+ } while (cur.isSome());
+ return r;
+ };
+ var $_5edc27wcjjgwefwz = { toArray: toArray };
+
+ var Global = typeof window !== 'undefined' ? window : Function('return this;')();
+
+ var path = function (parts, scope) {
+ var o = scope !== undefined && scope !== null ? scope : Global;
+ for (var i = 0; i < parts.length && o !== undefined && o !== null; ++i)
+ o = o[parts[i]];
+ return o;
+ };
+ var resolve = function (p, scope) {
+ var parts = p.split('.');
+ return path(parts, scope);
+ };
+
+ var unsafe = function (name, scope) {
+ return resolve(name, scope);
+ };
+ var getOrDie = function (name, scope) {
+ var actual = unsafe(name, scope);
+ if (actual === undefined || actual === null)
+ throw name + ' not available on this browser';
+ return actual;
+ };
+ var $_eggz6rwfjjgwefxb = { getOrDie: getOrDie };
+
+ var node = function () {
+ var f = $_eggz6rwfjjgwefxb.getOrDie('Node');
+ return f;
+ };
+ var compareDocumentPosition = function (a, b, match) {
+ return (a.compareDocumentPosition(b) & match) !== 0;
+ };
+ var documentPositionPreceding = function (a, b) {
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_PRECEDING);
+ };
+ var documentPositionContainedBy = function (a, b) {
+ return compareDocumentPosition(a, b, node().DOCUMENT_POSITION_CONTAINED_BY);
+ };
+ var $_d3tk25wejjgwefxa = {
+ documentPositionPreceding: documentPositionPreceding,
+ documentPositionContainedBy: documentPositionContainedBy
+ };
+
+ var firstMatch = function (regexes, s) {
+ for (var i = 0; i < regexes.length; i++) {
+ var x = regexes[i];
+ if (x.test(s))
+ return x;
+ }
+ return undefined;
+ };
+ var find$2 = function (regexes, agent) {
+ var r = firstMatch(regexes, agent);
+ if (!r)
+ return {
+ major: 0,
+ minor: 0
+ };
+ var group = function (i) {
+ return Number(agent.replace(r, '$' + i));
+ };
+ return nu(group(1), group(2));
+ };
+ var detect = function (versionRegexes, agent) {
+ var cleanedAgent = String(agent).toLowerCase();
+ if (versionRegexes.length === 0)
+ return unknown();
+ return find$2(versionRegexes, cleanedAgent);
+ };
+ var unknown = function () {
+ return nu(0, 0);
+ };
+ var nu = function (major, minor) {
+ return {
+ major: major,
+ minor: minor
+ };
+ };
+ var $_f8xw27wljjgwefxn = {
+ nu: nu,
+ detect: detect,
+ unknown: unknown
+ };
+
+ var edge = 'Edge';
+ var chrome = 'Chrome';
+ var ie = 'IE';
+ var opera = 'Opera';
+ var firefox = 'Firefox';
+ var safari = 'Safari';
+ var isBrowser = function (name, current) {
+ return function () {
+ return current === name;
+ };
+ };
+ var unknown$1 = function () {
+ return nu$1({
+ current: undefined,
+ version: $_f8xw27wljjgwefxn.unknown()
+ });
+ };
+ var nu$1 = function (info) {
+ var current = info.current;
+ var version = info.version;
+ return {
+ current: current,
+ version: version,
+ isEdge: isBrowser(edge, current),
+ isChrome: isBrowser(chrome, current),
+ isIE: isBrowser(ie, current),
+ isOpera: isBrowser(opera, current),
+ isFirefox: isBrowser(firefox, current),
+ isSafari: isBrowser(safari, current)
+ };
+ };
+ var $_6jz8s6wkjjgwefxk = {
+ unknown: unknown$1,
+ nu: nu$1,
+ edge: constant(edge),
+ chrome: constant(chrome),
+ ie: constant(ie),
+ opera: constant(opera),
+ firefox: constant(firefox),
+ safari: constant(safari)
+ };
+
+ var windows$1 = 'Windows';
+ var ios = 'iOS';
+ var android = 'Android';
+ var linux = 'Linux';
+ var osx = 'OSX';
+ var solaris = 'Solaris';
+ var freebsd = 'FreeBSD';
+ var isOS = function (name, current) {
+ return function () {
+ return current === name;
+ };
+ };
+ var unknown$2 = function () {
+ return nu$2({
+ current: undefined,
+ version: $_f8xw27wljjgwefxn.unknown()
+ });
+ };
+ var nu$2 = function (info) {
+ var current = info.current;
+ var version = info.version;
+ return {
+ current: current,
+ version: version,
+ isWindows: isOS(windows$1, current),
+ isiOS: isOS(ios, current),
+ isAndroid: isOS(android, current),
+ isOSX: isOS(osx, current),
+ isLinux: isOS(linux, current),
+ isSolaris: isOS(solaris, current),
+ isFreeBSD: isOS(freebsd, current)
+ };
+ };
+ var $_ac4rxfwmjjgwefxp = {
+ unknown: unknown$2,
+ nu: nu$2,
+ windows: constant(windows$1),
+ ios: constant(ios),
+ android: constant(android),
+ linux: constant(linux),
+ osx: constant(osx),
+ solaris: constant(solaris),
+ freebsd: constant(freebsd)
+ };
+
+ function DeviceType (os, browser, userAgent) {
+ var isiPad = os.isiOS() && /ipad/i.test(userAgent) === true;
+ var isiPhone = os.isiOS() && !isiPad;
+ var isAndroid3 = os.isAndroid() && os.version.major === 3;
+ var isAndroid4 = os.isAndroid() && os.version.major === 4;
+ var isTablet = isiPad || isAndroid3 || isAndroid4 && /mobile/i.test(userAgent) === true;
+ var isTouch = os.isiOS() || os.isAndroid();
+ var isPhone = isTouch && !isTablet;
+ var iOSwebview = browser.isSafari() && os.isiOS() && /safari/i.test(userAgent) === false;
+ return {
+ isiPad: constant(isiPad),
+ isiPhone: constant(isiPhone),
+ isTablet: constant(isTablet),
+ isPhone: constant(isPhone),
+ isTouch: constant(isTouch),
+ isAndroid: os.isAndroid,
+ isiOS: os.isiOS,
+ isWebView: constant(iOSwebview)
+ };
+ }
+
+ var detect$1 = function (candidates, userAgent) {
+ var agent = String(userAgent).toLowerCase();
+ return find(candidates, function (candidate) {
+ return candidate.search(agent);
+ });
+ };
+ var detectBrowser = function (browsers, userAgent) {
+ return detect$1(browsers, userAgent).map(function (browser) {
+ var version = $_f8xw27wljjgwefxn.detect(browser.versionRegexes, userAgent);
+ return {
+ current: browser.name,
+ version: version
+ };
+ });
+ };
+ var detectOs = function (oses, userAgent) {
+ return detect$1(oses, userAgent).map(function (os) {
+ var version = $_f8xw27wljjgwefxn.detect(os.versionRegexes, userAgent);
+ return {
+ current: os.name,
+ version: version
+ };
+ });
+ };
+ var $_d66zk7wojjgwefxw = {
+ detectBrowser: detectBrowser,
+ detectOs: detectOs
+ };
+
+ var contains$1 = function (str, substr) {
+ return str.indexOf(substr) !== -1;
+ };
+
+ var normalVersionRegex = /.*?version\/\ ?([0-9]+)\.([0-9]+).*/;
+ var checkContains = function (target) {
+ return function (uastring) {
+ return contains$1(uastring, target);
+ };
+ };
+ var browsers = [
+ {
+ name: 'Edge',
+ versionRegexes: [/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],
+ search: function (uastring) {
+ var monstrosity = contains$1(uastring, 'edge/') && contains$1(uastring, 'chrome') && contains$1(uastring, 'safari') && contains$1(uastring, 'applewebkit');
+ return monstrosity;
+ }
+ },
+ {
+ name: 'Chrome',
+ versionRegexes: [
+ /.*?chrome\/([0-9]+)\.([0-9]+).*/,
+ normalVersionRegex
+ ],
+ search: function (uastring) {
+ return contains$1(uastring, 'chrome') && !contains$1(uastring, 'chromeframe');
+ }
+ },
+ {
+ name: 'IE',
+ versionRegexes: [
+ /.*?msie\ ?([0-9]+)\.([0-9]+).*/,
+ /.*?rv:([0-9]+)\.([0-9]+).*/
+ ],
+ search: function (uastring) {
+ return contains$1(uastring, 'msie') || contains$1(uastring, 'trident');
+ }
+ },
+ {
+ name: 'Opera',
+ versionRegexes: [
+ normalVersionRegex,
+ /.*?opera\/([0-9]+)\.([0-9]+).*/
+ ],
+ search: checkContains('opera')
+ },
+ {
+ name: 'Firefox',
+ versionRegexes: [/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],
+ search: checkContains('firefox')
+ },
+ {
+ name: 'Safari',
+ versionRegexes: [
+ normalVersionRegex,
+ /.*?cpu os ([0-9]+)_([0-9]+).*/
+ ],
+ search: function (uastring) {
+ return (contains$1(uastring, 'safari') || contains$1(uastring, 'mobile/')) && contains$1(uastring, 'applewebkit');
+ }
+ }
+ ];
+ var oses = [
+ {
+ name: 'Windows',
+ search: checkContains('win'),
+ versionRegexes: [/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]
+ },
+ {
+ name: 'iOS',
+ search: function (uastring) {
+ return contains$1(uastring, 'iphone') || contains$1(uastring, 'ipad');
+ },
+ versionRegexes: [
+ /.*?version\/\ ?([0-9]+)\.([0-9]+).*/,
+ /.*cpu os ([0-9]+)_([0-9]+).*/,
+ /.*cpu iphone os ([0-9]+)_([0-9]+).*/
+ ]
+ },
+ {
+ name: 'Android',
+ search: checkContains('android'),
+ versionRegexes: [/.*?android\ ?([0-9]+)\.([0-9]+).*/]
+ },
+ {
+ name: 'OSX',
+ search: checkContains('os x'),
+ versionRegexes: [/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]
+ },
+ {
+ name: 'Linux',
+ search: checkContains('linux'),
+ versionRegexes: []
+ },
+ {
+ name: 'Solaris',
+ search: checkContains('sunos'),
+ versionRegexes: []
+ },
+ {
+ name: 'FreeBSD',
+ search: checkContains('freebsd'),
+ versionRegexes: []
+ }
+ ];
+ var $_frphugwpjjgwefy0 = {
+ browsers: constant(browsers),
+ oses: constant(oses)
+ };
+
+ var detect$2 = function (userAgent) {
+ var browsers = $_frphugwpjjgwefy0.browsers();
+ var oses = $_frphugwpjjgwefy0.oses();
+ var browser = $_d66zk7wojjgwefxw.detectBrowser(browsers, userAgent).fold($_6jz8s6wkjjgwefxk.unknown, $_6jz8s6wkjjgwefxk.nu);
+ var os = $_d66zk7wojjgwefxw.detectOs(oses, userAgent).fold($_ac4rxfwmjjgwefxp.unknown, $_ac4rxfwmjjgwefxp.nu);
+ var deviceType = DeviceType(os, browser, userAgent);
+ return {
+ browser: browser,
+ os: os,
+ deviceType: deviceType
+ };
+ };
+ var $_2lmz7fwjjjgwefxj = { detect: detect$2 };
+
+ var detect$3 = cached(function () {
+ var userAgent = navigator.userAgent;
+ return $_2lmz7fwjjjgwefxj.detect(userAgent);
+ });
+ var $_3d6uczwijjgwefxg = { detect: detect$3 };
+
+ var ELEMENT = $_vi4lpw5jjgwefvz.ELEMENT;
+ var DOCUMENT = $_vi4lpw5jjgwefvz.DOCUMENT;
+ var is = function (element, selector) {
+ var elem = element.dom();
+ if (elem.nodeType !== ELEMENT)
+ return false;
+ else if (elem.matches !== undefined)
+ return elem.matches(selector);
+ else if (elem.msMatchesSelector !== undefined)
+ return elem.msMatchesSelector(selector);
+ else if (elem.webkitMatchesSelector !== undefined)
+ return elem.webkitMatchesSelector(selector);
+ else if (elem.mozMatchesSelector !== undefined)
+ return elem.mozMatchesSelector(selector);
+ else
+ throw new Error('Browser lacks native selectors');
+ };
+ var bypassSelector = function (dom) {
+ return dom.nodeType !== ELEMENT && dom.nodeType !== DOCUMENT || dom.childElementCount === 0;
+ };
+ var all = function (selector, scope) {
+ var base = scope === undefined ? document : scope.dom();
+ return bypassSelector(base) ? [] : map(base.querySelectorAll(selector), Element$$1.fromDom);
+ };
+ var one = function (selector, scope) {
+ var base = scope === undefined ? document : scope.dom();
+ return bypassSelector(base) ? Option.none() : Option.from(base.querySelector(selector)).map(Element$$1.fromDom);
+ };
+ var $_ofcqhwtjjgwefyb = {
+ all: all,
+ is: is,
+ one: one
+ };
+
+ var eq = function (e1, e2) {
+ return e1.dom() === e2.dom();
+ };
+ var isEqualNode = function (e1, e2) {
+ return e1.dom().isEqualNode(e2.dom());
+ };
+ var member = function (element, elements) {
+ return exists(elements, curry(eq, element));
+ };
+ var regularContains = function (e1, e2) {
+ var d1 = e1.dom(), d2 = e2.dom();
+ return d1 === d2 ? false : d1.contains(d2);
+ };
+ var ieContains = function (e1, e2) {
+ return $_d3tk25wejjgwefxa.documentPositionContainedBy(e1.dom(), e2.dom());
+ };
+ var browser = $_3d6uczwijjgwefxg.detect().browser;
+ var contains$2 = browser.isIE() ? ieContains : regularContains;
+ var $_bdbghwwdjjgwefx0 = {
+ eq: eq,
+ isEqualNode: isEqualNode,
+ member: member,
+ contains: contains$2,
+ is: $_ofcqhwtjjgwefyb.is
+ };
+
+ var owner = function (element) {
+ return Element$$1.fromDom(element.dom().ownerDocument);
+ };
+ var documentElement = function (element) {
+ return Element$$1.fromDom(element.dom().ownerDocument.documentElement);
+ };
+ var defaultView = function (element) {
+ var el = element.dom();
+ var defaultView = el.ownerDocument.defaultView;
+ return Element$$1.fromDom(defaultView);
+ };
+ var parent = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.parentNode).map(Element$$1.fromDom);
+ };
+ var findIndex$1 = function (element) {
+ return parent(element).bind(function (p) {
+ var kin = children(p);
+ return findIndex(kin, function (elem) {
+ return $_bdbghwwdjjgwefx0.eq(element, elem);
+ });
+ });
+ };
+ var parents = function (element, isRoot) {
+ var stop = isFunction(isRoot) ? isRoot : constant(false);
+ var dom = element.dom();
+ var ret = [];
+ while (dom.parentNode !== null && dom.parentNode !== undefined) {
+ var rawParent = dom.parentNode;
+ var parent = Element$$1.fromDom(rawParent);
+ ret.push(parent);
+ if (stop(parent) === true)
+ break;
+ else
+ dom = rawParent;
+ }
+ return ret;
+ };
+ var siblings = function (element) {
+ var filterSelf = function (elements) {
+ return filter(elements, function (x) {
+ return !$_bdbghwwdjjgwefx0.eq(element, x);
+ });
+ };
+ return parent(element).map(children).map(filterSelf).getOr([]);
+ };
+ var offsetParent = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.offsetParent).map(Element$$1.fromDom);
+ };
+ var prevSibling = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.previousSibling).map(Element$$1.fromDom);
+ };
+ var nextSibling = function (element) {
+ var dom = element.dom();
+ return Option.from(dom.nextSibling).map(Element$$1.fromDom);
+ };
+ var prevSiblings = function (element) {
+ return reverse($_5edc27wcjjgwefwz.toArray(element, prevSibling));
+ };
+ var nextSiblings = function (element) {
+ return $_5edc27wcjjgwefwz.toArray(element, nextSibling);
+ };
+ var children = function (element) {
+ var dom = element.dom();
+ return map(dom.childNodes, Element$$1.fromDom);
+ };
+ var child = function (element, index) {
+ var children = element.dom().childNodes;
+ return Option.from(children[index]).map(Element$$1.fromDom);
+ };
+ var firstChild = function (element) {
+ return child(element, 0);
+ };
+ var lastChild = function (element) {
+ return child(element, element.dom().childNodes.length - 1);
+ };
+ var childNodesCount = function (element) {
+ return element.dom().childNodes.length;
+ };
+ var hasChildNodes = function (element) {
+ return element.dom().hasChildNodes();
+ };
+ var spot = Immutable('element', 'offset');
+ var leaf = function (element, offset) {
+ var cs = children(element);
+ return cs.length > 0 && offset < cs.length ? spot(cs[offset], 0) : spot(element, offset);
+ };
+ var $_r7112w6jjgwefw2 = {
+ owner: owner,
+ defaultView: defaultView,
+ documentElement: documentElement,
+ parent: parent,
+ findIndex: findIndex$1,
+ parents: parents,
+ siblings: siblings,
+ prevSibling: prevSibling,
+ offsetParent: offsetParent,
+ prevSiblings: prevSiblings,
+ nextSibling: nextSibling,
+ nextSiblings: nextSiblings,
+ children: children,
+ child: child,
+ firstChild: firstChild,
+ lastChild: lastChild,
+ childNodesCount: childNodesCount,
+ hasChildNodes: hasChildNodes,
+ leaf: leaf
+ };
+
+ var all$1 = function (predicate) {
+ return descendants($_g7jljiw2jjgwefvu.body(), predicate);
+ };
+ var ancestors = function (scope, predicate, isRoot) {
+ return filter($_r7112w6jjgwefw2.parents(scope, isRoot), predicate);
+ };
+ var siblings$1 = function (scope, predicate) {
+ return filter($_r7112w6jjgwefw2.siblings(scope), predicate);
+ };
+ var children$1 = function (scope, predicate) {
+ return filter($_r7112w6jjgwefw2.children(scope), predicate);
+ };
+ var descendants = function (scope, predicate) {
+ var result = [];
+ each($_r7112w6jjgwefw2.children(scope), function (x) {
+ if (predicate(x)) {
+ result = result.concat([x]);
+ }
+ result = result.concat(descendants(x, predicate));
+ });
+ return result;
+ };
+ var $_3dx616w1jjgwefvq = {
+ all: all$1,
+ ancestors: ancestors,
+ siblings: siblings$1,
+ children: children$1,
+ descendants: descendants
+ };
+
+ var all$2 = function (selector) {
+ return $_ofcqhwtjjgwefyb.all(selector);
+ };
+ var ancestors$1 = function (scope, selector, isRoot) {
+ return $_3dx616w1jjgwefvq.ancestors(scope, function (e) {
+ return $_ofcqhwtjjgwefyb.is(e, selector);
+ }, isRoot);
+ };
+ var siblings$2 = function (scope, selector) {
+ return $_3dx616w1jjgwefvq.siblings(scope, function (e) {
+ return $_ofcqhwtjjgwefyb.is(e, selector);
+ });
+ };
+ var children$2 = function (scope, selector) {
+ return $_3dx616w1jjgwefvq.children(scope, function (e) {
+ return $_ofcqhwtjjgwefyb.is(e, selector);
+ });
+ };
+ var descendants$1 = function (scope, selector) {
+ return $_ofcqhwtjjgwefyb.all(selector, scope);
+ };
+ var $_5wsttjw0jjgwefvp = {
+ all: all$2,
+ ancestors: ancestors$1,
+ siblings: siblings$2,
+ children: children$2,
+ descendants: descendants$1
+ };
+
+ var trim$1 = global$2.trim;
+ var hasContentEditableState = function (value) {
+ return function (node) {
+ if (node && node.nodeType === 1) {
+ if (node.contentEditable === value) {
+ return true;
+ }
+ if (node.getAttribute('data-mce-contenteditable') === value) {
+ return true;
+ }
+ }
+ return false;
+ };
+ };
+ var isContentEditableTrue = hasContentEditableState('true');
+ var isContentEditableFalse = hasContentEditableState('false');
+ var create = function (type, title, url, level, attach) {
+ return {
+ type: type,
+ title: title,
+ url: url,
+ level: level,
+ attach: attach
+ };
+ };
+ var isChildOfContentEditableTrue = function (node) {
+ while (node = node.parentNode) {
+ var value = node.contentEditable;
+ if (value && value !== 'inherit') {
+ return isContentEditableTrue(node);
+ }
+ }
+ return false;
+ };
+ var select = function (selector, root) {
+ return map($_5wsttjw0jjgwefvp.descendants(Element$$1.fromDom(root), selector), function (element) {
+ return element.dom();
+ });
+ };
+ var getElementText = function (elm) {
+ return elm.innerText || elm.textContent;
+ };
+ var getOrGenerateId = function (elm) {
+ return elm.id ? elm.id : generate('h');
+ };
+ var isAnchor = function (elm) {
+ return elm && elm.nodeName === 'A' && (elm.id || elm.name);
+ };
+ var isValidAnchor = function (elm) {
+ return isAnchor(elm) && isEditable(elm);
+ };
+ var isHeader = function (elm) {
+ return elm && /^(H[1-6])$/.test(elm.nodeName);
+ };
+ var isEditable = function (elm) {
+ return isChildOfContentEditableTrue(elm) && !isContentEditableFalse(elm);
+ };
+ var isValidHeader = function (elm) {
+ return isHeader(elm) && isEditable(elm);
+ };
+ var getLevel = function (elm) {
+ return isHeader(elm) ? parseInt(elm.nodeName.substr(1), 10) : 0;
+ };
+ var headerTarget = function (elm) {
+ var headerId = getOrGenerateId(elm);
+ var attach = function () {
+ elm.id = headerId;
+ };
+ return create('header', getElementText(elm), '#' + headerId, getLevel(elm), attach);
+ };
+ var anchorTarget = function (elm) {
+ var anchorId = elm.id || elm.name;
+ var anchorText = getElementText(elm);
+ return create('anchor', anchorText ? anchorText : '#' + anchorId, '#' + anchorId, 0, noop);
+ };
+ var getHeaderTargets = function (elms) {
+ return map(filter(elms, isValidHeader), headerTarget);
+ };
+ var getAnchorTargets = function (elms) {
+ return map(filter(elms, isValidAnchor), anchorTarget);
+ };
+ var getTargetElements = function (elm) {
+ var elms = select('h1,h2,h3,h4,h5,h6,a:not([href])', elm);
+ return elms;
+ };
+ var hasTitle = function (target) {
+ return trim$1(target.title).length > 0;
+ };
+ var find$3 = function (elm) {
+ var elms = getTargetElements(elm);
+ return filter(getHeaderTargets(elms).concat(getAnchorTargets(elms)), hasTitle);
+ };
+ var $_7cacckvxjjgwefv6 = { find: find$3 };
+
+ var getActiveEditor = function () {
+ return window.tinymce ? window.tinymce.activeEditor : global$1.activeEditor;
+ };
+ var history = {};
+ var HISTORY_LENGTH = 5;
+ var clearHistory = function () {
+ history = {};
+ };
+ var toMenuItem = function (target) {
+ return {
+ title: target.title,
+ value: {
+ title: { raw: target.title },
+ url: target.url,
+ attach: target.attach
+ }
+ };
+ };
+ var toMenuItems = function (targets) {
+ return global$2.map(targets, toMenuItem);
+ };
+ var staticMenuItem = function (title, url) {
+ return {
+ title: title,
+ value: {
+ title: title,
+ url: url,
+ attach: noop
+ }
+ };
+ };
+ var isUniqueUrl = function (url, targets) {
+ var foundTarget = exists(targets, function (target) {
+ return target.url === url;
+ });
+ return !foundTarget;
+ };
+ var getSetting = function (editorSettings, name, defaultValue) {
+ var value = name in editorSettings ? editorSettings[name] : defaultValue;
+ return value === false ? null : value;
+ };
+ var createMenuItems = function (term, targets, fileType, editorSettings) {
+ var separator = { title: '-' };
+ var fromHistoryMenuItems = function (history) {
+ var historyItems = history.hasOwnProperty(fileType) ? history[fileType] : [];
+ var uniqueHistory = filter(historyItems, function (url) {
+ return isUniqueUrl(url, targets);
+ });
+ return global$2.map(uniqueHistory, function (url) {
+ return {
+ title: url,
+ value: {
+ title: url,
+ url: url,
+ attach: noop
+ }
+ };
+ });
+ };
+ var fromMenuItems = function (type) {
+ var filteredTargets = filter(targets, function (target) {
+ return target.type === type;
+ });
+ return toMenuItems(filteredTargets);
+ };
+ var anchorMenuItems = function () {
+ var anchorMenuItems = fromMenuItems('anchor');
+ var topAnchor = getSetting(editorSettings, 'anchor_top', '#top');
+ var bottomAchor = getSetting(editorSettings, 'anchor_bottom', '#bottom');
+ if (topAnchor !== null) {
+ anchorMenuItems.unshift(staticMenuItem('<top>', topAnchor));
+ }
+ if (bottomAchor !== null) {
+ anchorMenuItems.push(staticMenuItem('<bottom>', bottomAchor));
+ }
+ return anchorMenuItems;
+ };
+ var join = function (items) {
+ return foldl(items, function (a, b) {
+ var bothEmpty = a.length === 0 || b.length === 0;
+ return bothEmpty ? a.concat(b) : a.concat(separator, b);
+ }, []);
+ };
+ if (editorSettings.typeahead_urls === false) {
+ return [];
+ }
+ return fileType === 'file' ? join([
+ filterByQuery(term, fromHistoryMenuItems(history)),
+ filterByQuery(term, fromMenuItems('header')),
+ filterByQuery(term, anchorMenuItems())
+ ]) : filterByQuery(term, fromHistoryMenuItems(history));
+ };
+ var addToHistory = function (url, fileType) {
+ var items = history[fileType];
+ if (!/^https?/.test(url)) {
+ return;
+ }
+ if (items) {
+ if (indexOf(items, url).isNone()) {
+ history[fileType] = items.slice(0, HISTORY_LENGTH).concat(url);
+ }
+ } else {
+ history[fileType] = [url];
+ }
+ };
+ var filterByQuery = function (term, menuItems) {
+ var lowerCaseTerm = term.toLowerCase();
+ var result = global$2.grep(menuItems, function (item) {
+ return item.title.toLowerCase().indexOf(lowerCaseTerm) !== -1;
+ });
+ return result.length === 1 && result[0].title === term ? [] : result;
+ };
+ var getTitle = function (linkDetails) {
+ var title = linkDetails.title;
+ return title.raw ? title.raw : title;
+ };
+ var setupAutoCompleteHandler = function (ctrl, editorSettings, bodyElm, fileType) {
+ var autocomplete = function (term) {
+ var linkTargets = $_7cacckvxjjgwefv6.find(bodyElm);
+ var menuItems = createMenuItems(term, linkTargets, fileType, editorSettings);
+ ctrl.showAutoComplete(menuItems, term);
+ };
+ ctrl.on('autocomplete', function () {
+ autocomplete(ctrl.value());
+ });
+ ctrl.on('selectitem', function (e) {
+ var linkDetails = e.value;
+ ctrl.value(linkDetails.url);
+ var title = getTitle(linkDetails);
+ if (fileType === 'image') {
+ ctrl.fire('change', {
+ meta: {
+ alt: title,
+ attach: linkDetails.attach
+ }
+ });
+ } else {
+ ctrl.fire('change', {
+ meta: {
+ text: title,
+ attach: linkDetails.attach
+ }
+ });
+ }
+ ctrl.focus();
+ });
+ ctrl.on('click', function (e) {
+ if (ctrl.value().length === 0 && e.target.nodeName === 'INPUT') {
+ autocomplete('');
+ }
+ });
+ ctrl.on('PostRender', function () {
+ ctrl.getRoot().on('submit', function (e) {
+ if (!e.isDefaultPrevented()) {
+ addToHistory(ctrl.value(), fileType);
+ }
+ });
+ });
+ };
+ var statusToUiState = function (result) {
+ var status = result.status, message = result.message;
+ if (status === 'valid') {
+ return {
+ status: 'ok',
+ message: message
+ };
+ } else if (status === 'unknown') {
+ return {
+ status: 'warn',
+ message: message
+ };
+ } else if (status === 'invalid') {
+ return {
+ status: 'warn',
+ message: message
+ };
+ } else {
+ return {
+ status: 'none',
+ message: ''
+ };
+ }
+ };
+ var setupLinkValidatorHandler = function (ctrl, editorSettings, fileType) {
+ var validatorHandler = editorSettings.filepicker_validator_handler;
+ if (validatorHandler) {
+ var validateUrl_1 = function (url) {
+ if (url.length === 0) {
+ ctrl.statusLevel('none');
+ return;
+ }
+ validatorHandler({
+ url: url,
+ type: fileType
+ }, function (result) {
+ var uiState = statusToUiState(result);
+ ctrl.statusMessage(uiState.message);
+ ctrl.statusLevel(uiState.status);
+ });
+ };
+ ctrl.state.on('change:value', function (e) {
+ validateUrl_1(e.value);
+ });
+ }
+ };
+ var FilePicker = ComboBox.extend({
+ Statics: { clearHistory: clearHistory },
+ init: function (settings) {
+ var self = this, editor = getActiveEditor(), editorSettings = editor.settings;
+ var actionCallback, fileBrowserCallback, fileBrowserCallbackTypes;
+ var fileType = settings.filetype;
+ settings.spellcheck = false;
+ fileBrowserCallbackTypes = editorSettings.file_picker_types || editorSettings.file_browser_callback_types;
+ if (fileBrowserCallbackTypes) {
+ fileBrowserCallbackTypes = global$2.makeMap(fileBrowserCallbackTypes, /[, ]/);
+ }
+ if (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType]) {
+ fileBrowserCallback = editorSettings.file_picker_callback;
+ if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
+ actionCallback = function () {
+ var meta = self.fire('beforecall').meta;
+ meta = global$2.extend({ filetype: fileType }, meta);
+ fileBrowserCallback.call(editor, function (value, meta) {
+ self.value(value).fire('change', { meta: meta });
+ }, self.value(), meta);
+ };
+ } else {
+ fileBrowserCallback = editorSettings.file_browser_callback;
+ if (fileBrowserCallback && (!fileBrowserCallbackTypes || fileBrowserCallbackTypes[fileType])) {
+ actionCallback = function () {
+ fileBrowserCallback(self.getEl('inp').id, self.value(), fileType, window);
+ };
+ }
+ }
+ }
+ if (actionCallback) {
+ settings.icon = 'browse';
+ settings.onaction = actionCallback;
+ }
+ self._super(settings);
+ self.classes.add('filepicker');
+ setupAutoCompleteHandler(self, editorSettings, editor.getBody(), fileType);
+ setupLinkValidatorHandler(self, editorSettings, fileType);
+ }
+ });
+
+ var FitLayout = AbsoluteLayout.extend({
+ recalc: function (container) {
+ var contLayoutRect = container.layoutRect(), paddingBox = container.paddingBox;
+ container.items().filter(':visible').each(function (ctrl) {
+ ctrl.layoutRect({
+ x: paddingBox.left,
+ y: paddingBox.top,
+ w: contLayoutRect.innerW - paddingBox.right - paddingBox.left,
+ h: contLayoutRect.innerH - paddingBox.top - paddingBox.bottom
+ });
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ });
+ }
+ });
+
+ var FlexLayout = AbsoluteLayout.extend({
+ recalc: function (container) {
+ var i, l, items, contLayoutRect, contPaddingBox, contSettings, align, pack, spacing, totalFlex, availableSpace, direction;
+ var ctrl, ctrlLayoutRect, ctrlSettings, flex;
+ var maxSizeItems = [];
+ var size, maxSize, ratio, rect, pos, maxAlignEndPos;
+ var sizeName, minSizeName, posName, maxSizeName, beforeName, innerSizeName, deltaSizeName, contentSizeName;
+ var alignAxisName, alignInnerSizeName, alignSizeName, alignMinSizeName, alignBeforeName, alignAfterName;
+ var alignDeltaSizeName, alignContentSizeName;
+ var max = Math.max, min = Math.min;
+ items = container.items().filter(':visible');
+ contLayoutRect = container.layoutRect();
+ contPaddingBox = container.paddingBox;
+ contSettings = container.settings;
+ direction = container.isRtl() ? contSettings.direction || 'row-reversed' : contSettings.direction;
+ align = contSettings.align;
+ pack = container.isRtl() ? contSettings.pack || 'end' : contSettings.pack;
+ spacing = contSettings.spacing || 0;
+ if (direction === 'row-reversed' || direction === 'column-reverse') {
+ items = items.set(items.toArray().reverse());
+ direction = direction.split('-')[0];
+ }
+ if (direction === 'column') {
+ posName = 'y';
+ sizeName = 'h';
+ minSizeName = 'minH';
+ maxSizeName = 'maxH';
+ innerSizeName = 'innerH';
+ beforeName = 'top';
+ deltaSizeName = 'deltaH';
+ contentSizeName = 'contentH';
+ alignBeforeName = 'left';
+ alignSizeName = 'w';
+ alignAxisName = 'x';
+ alignInnerSizeName = 'innerW';
+ alignMinSizeName = 'minW';
+ alignAfterName = 'right';
+ alignDeltaSizeName = 'deltaW';
+ alignContentSizeName = 'contentW';
+ } else {
+ posName = 'x';
+ sizeName = 'w';
+ minSizeName = 'minW';
+ maxSizeName = 'maxW';
+ innerSizeName = 'innerW';
+ beforeName = 'left';
+ deltaSizeName = 'deltaW';
+ contentSizeName = 'contentW';
+ alignBeforeName = 'top';
+ alignSizeName = 'h';
+ alignAxisName = 'y';
+ alignInnerSizeName = 'innerH';
+ alignMinSizeName = 'minH';
+ alignAfterName = 'bottom';
+ alignDeltaSizeName = 'deltaH';
+ alignContentSizeName = 'contentH';
+ }
+ availableSpace = contLayoutRect[innerSizeName] - contPaddingBox[beforeName] - contPaddingBox[beforeName];
+ maxAlignEndPos = totalFlex = 0;
+ for (i = 0, l = items.length; i < l; i++) {
+ ctrl = items[i];
+ ctrlLayoutRect = ctrl.layoutRect();
+ ctrlSettings = ctrl.settings;
+ flex = ctrlSettings.flex;
+ availableSpace -= i < l - 1 ? spacing : 0;
+ if (flex > 0) {
+ totalFlex += flex;
+ if (ctrlLayoutRect[maxSizeName]) {
+ maxSizeItems.push(ctrl);
+ }
+ ctrlLayoutRect.flex = flex;
+ }
+ availableSpace -= ctrlLayoutRect[minSizeName];
+ size = contPaddingBox[alignBeforeName] + ctrlLayoutRect[alignMinSizeName] + contPaddingBox[alignAfterName];
+ if (size > maxAlignEndPos) {
+ maxAlignEndPos = size;
+ }
+ }
+ rect = {};
+ if (availableSpace < 0) {
+ rect[minSizeName] = contLayoutRect[minSizeName] - availableSpace + contLayoutRect[deltaSizeName];
+ } else {
+ rect[minSizeName] = contLayoutRect[innerSizeName] - availableSpace + contLayoutRect[deltaSizeName];
+ }
+ rect[alignMinSizeName] = maxAlignEndPos + contLayoutRect[alignDeltaSizeName];
+ rect[contentSizeName] = contLayoutRect[innerSizeName] - availableSpace;
+ rect[alignContentSizeName] = maxAlignEndPos;
+ rect.minW = min(rect.minW, contLayoutRect.maxW);
+ rect.minH = min(rect.minH, contLayoutRect.maxH);
+ rect.minW = max(rect.minW, contLayoutRect.startMinWidth);
+ rect.minH = max(rect.minH, contLayoutRect.startMinHeight);
+ if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
+ rect.w = rect.minW;
+ rect.h = rect.minH;
+ container.layoutRect(rect);
+ this.recalc(container);
+ if (container._lastRect === null) {
+ var parentCtrl = container.parent();
+ if (parentCtrl) {
+ parentCtrl._lastRect = null;
+ parentCtrl.recalc();
+ }
+ }
+ return;
+ }
+ ratio = availableSpace / totalFlex;
+ for (i = 0, l = maxSizeItems.length; i < l; i++) {
+ ctrl = maxSizeItems[i];
+ ctrlLayoutRect = ctrl.layoutRect();
+ maxSize = ctrlLayoutRect[maxSizeName];
+ size = ctrlLayoutRect[minSizeName] + ctrlLayoutRect.flex * ratio;
+ if (size > maxSize) {
+ availableSpace -= ctrlLayoutRect[maxSizeName] - ctrlLayoutRect[minSizeName];
+ totalFlex -= ctrlLayoutRect.flex;
+ ctrlLayoutRect.flex = 0;
+ ctrlLayoutRect.maxFlexSize = maxSize;
+ } else {
+ ctrlLayoutRect.maxFlexSize = 0;
+ }
+ }
+ ratio = availableSpace / totalFlex;
+ pos = contPaddingBox[beforeName];
+ rect = {};
+ if (totalFlex === 0) {
+ if (pack === 'end') {
+ pos = availableSpace + contPaddingBox[beforeName];
+ } else if (pack === 'center') {
+ pos = Math.round(contLayoutRect[innerSizeName] / 2 - (contLayoutRect[innerSizeName] - availableSpace) / 2) + contPaddingBox[beforeName];
+ if (pos < 0) {
+ pos = contPaddingBox[beforeName];
+ }
+ } else if (pack === 'justify') {
+ pos = contPaddingBox[beforeName];
+ spacing = Math.floor(availableSpace / (items.length - 1));
+ }
+ }
+ rect[alignAxisName] = contPaddingBox[alignBeforeName];
+ for (i = 0, l = items.length; i < l; i++) {
+ ctrl = items[i];
+ ctrlLayoutRect = ctrl.layoutRect();
+ size = ctrlLayoutRect.maxFlexSize || ctrlLayoutRect[minSizeName];
+ if (align === 'center') {
+ rect[alignAxisName] = Math.round(contLayoutRect[alignInnerSizeName] / 2 - ctrlLayoutRect[alignSizeName] / 2);
+ } else if (align === 'stretch') {
+ rect[alignSizeName] = max(ctrlLayoutRect[alignMinSizeName] || 0, contLayoutRect[alignInnerSizeName] - contPaddingBox[alignBeforeName] - contPaddingBox[alignAfterName]);
+ rect[alignAxisName] = contPaddingBox[alignBeforeName];
+ } else if (align === 'end') {
+ rect[alignAxisName] = contLayoutRect[alignInnerSizeName] - ctrlLayoutRect[alignSizeName] - contPaddingBox.top;
+ }
+ if (ctrlLayoutRect.flex > 0) {
+ size += ctrlLayoutRect.flex * ratio;
+ }
+ rect[sizeName] = size;
+ rect[posName] = pos;
+ ctrl.layoutRect(rect);
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ pos += size + spacing;
+ }
+ }
+ });
+
+ var FlowLayout = Layout.extend({
+ Defaults: {
+ containerClass: 'flow-layout',
+ controlClass: 'flow-layout-item',
+ endClass: 'break'
+ },
+ recalc: function (container) {
+ container.items().filter(':visible').each(function (ctrl) {
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ });
+ },
+ isNative: function () {
+ return true;
+ }
+ });
+
+ function ClosestOrAncestor (is, ancestor, scope, a, isRoot) {
+ return is(scope, a) ? Option.some(scope) : isFunction(isRoot) && isRoot(scope) ? Option.none() : ancestor(scope, a, isRoot);
+ }
+
+ var first$1 = function (predicate) {
+ return descendant($_g7jljiw2jjgwefvu.body(), predicate);
+ };
+ var ancestor = function (scope, predicate, isRoot) {
+ var element = scope.dom();
+ var stop = isFunction(isRoot) ? isRoot : constant(false);
+ while (element.parentNode) {
+ element = element.parentNode;
+ var el = Element$$1.fromDom(element);
+ if (predicate(el))
+ return Option.some(el);
+ else if (stop(el))
+ break;
+ }
+ return Option.none();
+ };
+ var closest = function (scope, predicate, isRoot) {
+ var is = function (scope) {
+ return predicate(scope);
+ };
+ return ClosestOrAncestor(is, ancestor, scope, predicate, isRoot);
+ };
+ var sibling = function (scope, predicate) {
+ var element = scope.dom();
+ if (!element.parentNode)
+ return Option.none();
+ return child$1(Element$$1.fromDom(element.parentNode), function (x) {
+ return !$_bdbghwwdjjgwefx0.eq(scope, x) && predicate(x);
+ });
+ };
+ var child$1 = function (scope, predicate) {
+ var result = find(scope.dom().childNodes, compose(predicate, Element$$1.fromDom));
+ return result.map(Element$$1.fromDom);
+ };
+ var descendant = function (scope, predicate) {
+ var descend = function (node) {
+ for (var i = 0; i < node.childNodes.length; i++) {
+ if (predicate(Element$$1.fromDom(node.childNodes[i])))
+ return Option.some(Element$$1.fromDom(node.childNodes[i]));
+ var res = descend(node.childNodes[i]);
+ if (res.isSome())
+ return res;
+ }
+ return Option.none();
+ };
+ return descend(scope.dom());
+ };
+ var $_2htnvowzjjgwefz5 = {
+ first: first$1,
+ ancestor: ancestor,
+ closest: closest,
+ sibling: sibling,
+ child: child$1,
+ descendant: descendant
+ };
+
+ var first$2 = function (selector) {
+ return $_ofcqhwtjjgwefyb.one(selector);
+ };
+ var ancestor$1 = function (scope, selector, isRoot) {
+ return $_2htnvowzjjgwefz5.ancestor(scope, function (e) {
+ return $_ofcqhwtjjgwefyb.is(e, selector);
+ }, isRoot);
+ };
+ var sibling$1 = function (scope, selector) {
+ return $_2htnvowzjjgwefz5.sibling(scope, function (e) {
+ return $_ofcqhwtjjgwefyb.is(e, selector);
+ });
+ };
+ var child$2 = function (scope, selector) {
+ return $_2htnvowzjjgwefz5.child(scope, function (e) {
+ return $_ofcqhwtjjgwefyb.is(e, selector);
+ });
+ };
+ var descendant$1 = function (scope, selector) {
+ return $_ofcqhwtjjgwefyb.one(selector, scope);
+ };
+ var closest$1 = function (scope, selector, isRoot) {
+ return ClosestOrAncestor($_ofcqhwtjjgwefyb.is, ancestor$1, scope, selector, isRoot);
+ };
+ var $_4ftvxwwyjjgwefz3 = {
+ first: first$2,
+ ancestor: ancestor$1,
+ sibling: sibling$1,
+ child: child$2,
+ descendant: descendant$1,
+ closest: closest$1
+ };
+
+ var toggleFormat = function (editor, fmt) {
+ return function () {
+ editor.execCommand('mceToggleFormat', false, fmt);
+ };
+ };
+ var addFormatChangedListener = function (editor, name, changed) {
+ var handler = function (state) {
+ changed(state, name);
+ };
+ if (editor.formatter) {
+ editor.formatter.formatChanged(name, handler);
+ } else {
+ editor.on('init', function () {
+ editor.formatter.formatChanged(name, handler);
+ });
+ }
+ };
+ var postRenderFormatToggle = function (editor, name) {
+ return function (e) {
+ addFormatChangedListener(editor, name, function (state) {
+ e.control.active(state);
+ });
+ };
+ };
+
+ var register = function (editor) {
+ var alignFormats = [
+ 'alignleft',
+ 'aligncenter',
+ 'alignright',
+ 'alignjustify'
+ ];
+ var defaultAlign = 'alignleft';
+ var alignMenuItems = [
+ {
+ text: 'Left',
+ icon: 'alignleft',
+ onclick: toggleFormat(editor, 'alignleft')
+ },
+ {
+ text: 'Center',
+ icon: 'aligncenter',
+ onclick: toggleFormat(editor, 'aligncenter')
+ },
+ {
+ text: 'Right',
+ icon: 'alignright',
+ onclick: toggleFormat(editor, 'alignright')
+ },
+ {
+ text: 'Justify',
+ icon: 'alignjustify',
+ onclick: toggleFormat(editor, 'alignjustify')
+ }
+ ];
+ editor.addMenuItem('align', {
+ text: 'Align',
+ menu: alignMenuItems
+ });
+ editor.addButton('align', {
+ type: 'menubutton',
+ icon: defaultAlign,
+ menu: alignMenuItems,
+ onShowMenu: function (e) {
+ var menu = e.control.menu;
+ global$2.each(alignFormats, function (formatName, idx) {
+ menu.items().eq(idx).each(function (item) {
+ return item.active(editor.formatter.match(formatName));
+ });
+ });
+ },
+ onPostRender: function (e) {
+ var ctrl = e.control;
+ global$2.each(alignFormats, function (formatName, idx) {
+ addFormatChangedListener(editor, formatName, function (state) {
+ ctrl.icon(defaultAlign);
+ if (state) {
+ ctrl.icon(formatName);
+ }
+ });
+ });
+ }
+ });
+ global$2.each({
+ alignleft: [
+ 'Align left',
+ 'JustifyLeft'
+ ],
+ aligncenter: [
+ 'Align center',
+ 'JustifyCenter'
+ ],
+ alignright: [
+ 'Align right',
+ 'JustifyRight'
+ ],
+ alignjustify: [
+ 'Justify',
+ 'JustifyFull'
+ ],
+ alignnone: [
+ 'No alignment',
+ 'JustifyNone'
+ ]
+ }, function (item, name) {
+ editor.addButton(name, {
+ active: false,
+ tooltip: item[0],
+ cmd: item[1],
+ onPostRender: postRenderFormatToggle(editor, name)
+ });
+ });
+ };
+ var $_cz4u4px1jjgwefzl = { register: register };
+
+ var getFirstFont = function (fontFamily) {
+ return fontFamily ? fontFamily.split(',')[0] : '';
+ };
+ var findMatchingValue = function (items, fontFamily) {
+ var font = fontFamily ? fontFamily.toLowerCase() : '';
+ var value;
+ global$2.each(items, function (item) {
+ if (item.value.toLowerCase() === font) {
+ value = item.value;
+ }
+ });
+ global$2.each(items, function (item) {
+ if (!value && getFirstFont(item.value).toLowerCase() === getFirstFont(font).toLowerCase()) {
+ value = item.value;
+ }
+ });
+ return value;
+ };
+ var createFontNameListBoxChangeHandler = function (editor, items) {
+ return function () {
+ var self = this;
+ self.state.set('value', null);
+ editor.on('init nodeChange', function (e) {
+ var fontFamily = editor.queryCommandValue('FontName');
+ var match = findMatchingValue(items, fontFamily);
+ self.value(match ? match : null);
+ if (!match && fontFamily) {
+ self.text(getFirstFont(fontFamily));
+ }
+ });
+ };
+ };
+ var createFormats = function (formats) {
+ formats = formats.replace(/;$/, '').split(';');
+ var i = formats.length;
+ while (i--) {
+ formats[i] = formats[i].split('=');
+ }
+ return formats;
+ };
+ var getFontItems = function (editor) {
+ var defaultFontsFormats = 'Andale Mono=andale mono,monospace;' + 'Arial=arial,helvetica,sans-serif;' + 'Arial Black=arial black,sans-serif;' + 'Book Antiqua=book antiqua,palatino,serif;' + 'Comic Sans MS=comic sans ms,sans-serif;' + 'Courier New=courier new,courier,monospace;' + 'Georgia=georgia,palatino,serif;' + 'Helvetica=helvetica,arial,sans-serif;' + 'Impact=impact,sans-serif;' + 'Symbol=symbol;' + 'Tahoma=tahoma,arial,helvetica,sans-serif;' + 'Terminal=terminal,monaco,monospace;' + 'Times New Roman=times new roman,times,serif;' + 'Trebuchet MS=trebuchet ms,geneva,sans-serif;' + 'Verdana=verdana,geneva,sans-serif;' + 'Webdings=webdings;' + 'Wingdings=wingdings,zapf dingbats';
+ var fonts = createFormats(editor.settings.font_formats || defaultFontsFormats);
+ return global$2.map(fonts, function (font) {
+ return {
+ text: { raw: font[0] },
+ value: font[1],
+ textStyle: font[1].indexOf('dings') === -1 ? 'font-family:' + font[1] : ''
+ };
+ });
+ };
+ var registerButtons = function (editor) {
+ editor.addButton('fontselect', function () {
+ var items = getFontItems(editor);
+ return {
+ type: 'listbox',
+ text: 'Font Family',
+ tooltip: 'Font Family',
+ values: items,
+ fixedWidth: true,
+ onPostRender: createFontNameListBoxChangeHandler(editor, items),
+ onselect: function (e) {
+ if (e.control.settings.value) {
+ editor.execCommand('FontName', false, e.control.settings.value);
+ }
+ }
+ };
+ });
+ };
+ var register$1 = function (editor) {
+ registerButtons(editor);
+ };
+ var $_f7ngpex3jjgwefzo = { register: register$1 };
+
+ var round = function (number, precision) {
+ var factor = Math.pow(10, precision);
+ return Math.round(number * factor) / factor;
+ };
+ var toPt = function (fontSize, precision) {
+ if (/[0-9.]+px$/.test(fontSize)) {
+ return round(parseInt(fontSize, 10) * 72 / 96, precision || 0) + 'pt';
+ }
+ return fontSize;
+ };
+ var findMatchingValue$1 = function (items, pt, px) {
+ var value;
+ global$2.each(items, function (item) {
+ if (item.value === px) {
+ value = px;
+ } else if (item.value === pt) {
+ value = pt;
+ }
+ });
+ return value;
+ };
+ var createFontSizeListBoxChangeHandler = function (editor, items) {
+ return function () {
+ var self = this;
+ editor.on('init nodeChange', function (e) {
+ var px, pt, precision, match;
+ px = editor.queryCommandValue('FontSize');
+ if (px) {
+ for (precision = 3; !match && precision >= 0; precision--) {
+ pt = toPt(px, precision);
+ match = findMatchingValue$1(items, pt, px);
+ }
+ }
+ self.value(match ? match : null);
+ if (!match) {
+ self.text(pt);
+ }
+ });
+ };
+ };
+ var getFontSizeItems = function (editor) {
+ var defaultFontsizeFormats = '8pt 10pt 12pt 14pt 18pt 24pt 36pt';
+ var fontsizeFormats = editor.settings.fontsize_formats || defaultFontsizeFormats;
+ return global$2.map(fontsizeFormats.split(' '), function (item) {
+ var text = item, value = item;
+ var values = item.split('=');
+ if (values.length > 1) {
+ text = values[0];
+ value = values[1];
+ }
+ return {
+ text: text,
+ value: value
+ };
+ });
+ };
+ var registerButtons$1 = function (editor) {
+ editor.addButton('fontsizeselect', function () {
+ var items = getFontSizeItems(editor);
+ return {
+ type: 'listbox',
+ text: 'Font Sizes',
+ tooltip: 'Font Sizes',
+ values: items,
+ fixedWidth: true,
+ onPostRender: createFontSizeListBoxChangeHandler(editor, items),
+ onclick: function (e) {
+ if (e.control.settings.value) {
+ editor.execCommand('FontSize', false, e.control.settings.value);
+ }
+ }
+ };
+ });
+ };
+ var register$2 = function (editor) {
+ registerButtons$1(editor);
+ };
+ var $_9a6bd5x4jjgwefzr = { register: register$2 };
+
+ var hideMenuObjects = function (editor, menu) {
+ var count = menu.length;
+ global$2.each(menu, function (item) {
+ if (item.menu) {
+ item.hidden = hideMenuObjects(editor, item.menu) === 0;
+ }
+ var formatName = item.format;
+ if (formatName) {
+ item.hidden = !editor.formatter.canApply(formatName);
+ }
+ if (item.hidden) {
+ count--;
+ }
+ });
+ return count;
+ };
+ var hideFormatMenuItems = function (editor, menu) {
+ var count = menu.items().length;
+ menu.items().each(function (item) {
+ if (item.menu) {
+ item.visible(hideFormatMenuItems(editor, item.menu) > 0);
+ }
+ if (!item.menu && item.settings.menu) {
+ item.visible(hideMenuObjects(editor, item.settings.menu) > 0);
+ }
+ var formatName = item.settings.format;
+ if (formatName) {
+ item.visible(editor.formatter.canApply(formatName));
+ }
+ if (!item.visible()) {
+ count--;
+ }
+ });
+ return count;
+ };
+ var createFormatMenu = function (editor) {
+ var count = 0;
+ var newFormats = [];
+ var defaultStyleFormats = [
+ {
+ title: 'Headings',
+ items: [
+ {
+ title: 'Heading 1',
+ format: 'h1'
+ },
+ {
+ title: 'Heading 2',
+ format: 'h2'
+ },
+ {
+ title: 'Heading 3',
+ format: 'h3'
+ },
+ {
+ title: 'Heading 4',
+ format: 'h4'
+ },
+ {
+ title: 'Heading 5',
+ format: 'h5'
+ },
+ {
+ title: 'Heading 6',
+ format: 'h6'
+ }
+ ]
+ },
+ {
+ title: 'Inline',
+ items: [
+ {
+ title: 'Bold',
+ icon: 'bold',
+ format: 'bold'
+ },
+ {
+ title: 'Italic',
+ icon: 'italic',
+ format: 'italic'
+ },
+ {
+ title: 'Underline',
+ icon: 'underline',
+ format: 'underline'
+ },
+ {
+ title: 'Strikethrough',
+ icon: 'strikethrough',
+ format: 'strikethrough'
+ },
+ {
+ title: 'Superscript',
+ icon: 'superscript',
+ format: 'superscript'
+ },
+ {
+ title: 'Subscript',
+ icon: 'subscript',
+ format: 'subscript'
+ },
+ {
+ title: 'Code',
+ icon: 'code',
+ format: 'code'
+ }
+ ]
+ },
+ {
+ title: 'Blocks',
+ items: [
+ {
+ title: 'Paragraph',
+ format: 'p'
+ },
+ {
+ title: 'Blockquote',
+ format: 'blockquote'
+ },
+ {
+ title: 'Div',
+ format: 'div'
+ },
+ {
+ title: 'Pre',
+ format: 'pre'
+ }
+ ]
+ },
+ {
+ title: 'Alignment',
+ items: [
+ {
+ title: 'Left',
+ icon: 'alignleft',
+ format: 'alignleft'
+ },
+ {
+ title: 'Center',
+ icon: 'aligncenter',
+ format: 'aligncenter'
+ },
+ {
+ title: 'Right',
+ icon: 'alignright',
+ format: 'alignright'
+ },
+ {
+ title: 'Justify',
+ icon: 'alignjustify',
+ format: 'alignjustify'
+ }
+ ]
+ }
+ ];
+ var createMenu = function (formats) {
+ var menu = [];
+ if (!formats) {
+ return;
+ }
+ global$2.each(formats, function (format) {
+ var menuItem = {
+ text: format.title,
+ icon: format.icon
+ };
+ if (format.items) {
+ menuItem.menu = createMenu(format.items);
+ } else {
+ var formatName = format.format || 'custom' + count++;
+ if (!format.format) {
+ format.name = formatName;
+ newFormats.push(format);
+ }
+ menuItem.format = formatName;
+ menuItem.cmd = format.cmd;
+ }
+ menu.push(menuItem);
});
+ return menu;
};
-
+ var createStylesMenu = function () {
+ var menu;
+ if (editor.settings.style_formats_merge) {
+ if (editor.settings.style_formats) {
+ menu = createMenu(defaultStyleFormats.concat(editor.settings.style_formats));
+ } else {
+ menu = createMenu(defaultStyleFormats);
+ }
+ } else {
+ menu = createMenu(editor.settings.style_formats || defaultStyleFormats);
+ }
+ return menu;
+ };
+ editor.on('init', function () {
+ global$2.each(newFormats, function (format) {
+ editor.formatter.register(format.name, format);
+ });
+ });
return {
- setup: setup
+ type: 'menu',
+ items: createStylesMenu(),
+ onPostRender: function (e) {
+ editor.fire('renderFormatsMenu', { control: e.control });
+ },
+ itemDefaults: {
+ preview: true,
+ textStyle: function () {
+ if (this.settings.format) {
+ return editor.formatter.getCssText(this.settings.format);
+ }
+ },
+ onPostRender: function () {
+ var self = this;
+ self.parent().on('show', function () {
+ var formatName, command;
+ formatName = self.settings.format;
+ if (formatName) {
+ self.disabled(!editor.formatter.canApply(formatName));
+ self.active(editor.formatter.match(formatName));
+ }
+ command = self.settings.cmd;
+ if (command) {
+ self.active(editor.queryCommandState(command));
+ }
+ });
+ },
+ onclick: function () {
+ if (this.settings.format) {
+ toggleFormat(editor, this.settings.format)();
+ }
+ if (this.settings.cmd) {
+ editor.execCommand(this.settings.cmd);
+ }
+ }
+ }
+ };
+ };
+ var registerMenuItems = function (editor, formatMenu) {
+ editor.addMenuItem('formats', {
+ text: 'Formats',
+ menu: formatMenu
+ });
+ };
+ var registerButtons$2 = function (editor, formatMenu) {
+ editor.addButton('styleselect', {
+ type: 'menubutton',
+ text: 'Formats',
+ menu: formatMenu,
+ onShowMenu: function () {
+ if (editor.settings.style_formats_autohide) {
+ hideFormatMenuItems(editor, this.menu);
+ }
+ }
+ });
+ };
+ var register$3 = function (editor) {
+ var formatMenu = createFormatMenu(editor);
+ registerMenuItems(editor, formatMenu);
+ registerButtons$2(editor, formatMenu);
+ };
+ var $_ejzqp9x5jjgwefzu = { register: register$3 };
+
+ var defaultBlocks = 'Paragraph=p;' + 'Heading 1=h1;' + 'Heading 2=h2;' + 'Heading 3=h3;' + 'Heading 4=h4;' + 'Heading 5=h5;' + 'Heading 6=h6;' + 'Preformatted=pre';
+ var createFormats$1 = function (formats) {
+ formats = formats.replace(/;$/, '').split(';');
+ var i = formats.length;
+ while (i--) {
+ formats[i] = formats[i].split('=');
+ }
+ return formats;
+ };
+ var createListBoxChangeHandler = function (editor, items, formatName) {
+ return function () {
+ var self = this;
+ editor.on('nodeChange', function (e) {
+ var formatter = editor.formatter;
+ var value = null;
+ global$2.each(e.parents, function (node) {
+ global$2.each(items, function (item) {
+ if (formatName) {
+ if (formatter.matchNode(node, formatName, { value: item.value })) {
+ value = item.value;
+ }
+ } else {
+ if (formatter.matchNode(node, item.value)) {
+ value = item.value;
+ }
+ }
+ if (value) {
+ return false;
+ }
+ });
+ if (value) {
+ return false;
+ }
+ });
+ self.value(value);
+ });
+ };
+ };
+ var lazyFormatSelectBoxItems = function (editor, blocks) {
+ return function () {
+ var items = [];
+ global$2.each(blocks, function (block) {
+ items.push({
+ text: block[0],
+ value: block[1],
+ textStyle: function () {
+ return editor.formatter.getCssText(block[1]);
+ }
+ });
+ });
+ return {
+ type: 'listbox',
+ text: blocks[0][0],
+ values: items,
+ fixedWidth: true,
+ onselect: function (e) {
+ if (e.control) {
+ var fmt = e.control.value();
+ toggleFormat(editor, fmt)();
+ }
+ },
+ onPostRender: createListBoxChangeHandler(editor, items)
+ };
+ };
+ };
+ var buildMenuItems = function (editor, blocks) {
+ return global$2.map(blocks, function (block) {
+ return {
+ text: block[0],
+ onclick: toggleFormat(editor, block[1]),
+ textStyle: function () {
+ return editor.formatter.getCssText(block[1]);
+ }
+ };
+ });
+ };
+ var register$4 = function (editor) {
+ var blocks = createFormats$1(editor.settings.block_formats || defaultBlocks);
+ editor.addMenuItem('blockformats', {
+ text: 'Blocks',
+ menu: buildMenuItems(editor, blocks)
+ });
+ editor.addButton('formatselect', lazyFormatSelectBoxItems(editor, blocks));
+ };
+ var $_fp0lmzx6jjgwefzy = { register: register$4 };
+
+ var createCustomMenuItems = function (editor, names) {
+ var items, nameList;
+ if (typeof names === 'string') {
+ nameList = names.split(' ');
+ } else if (global$2.isArray(names)) {
+ return flatten(global$2.map(names, function (names) {
+ return createCustomMenuItems(editor, names);
+ }));
+ }
+ items = global$2.grep(nameList, function (name) {
+ return name === '|' || name in editor.menuItems;
+ });
+ return global$2.map(items, function (name) {
+ return name === '|' ? { text: '-' } : editor.menuItems[name];
+ });
+ };
+ var isSeparator$1 = function (menuItem) {
+ return menuItem && menuItem.text === '-';
+ };
+ var trimMenuItems = function (menuItems) {
+ var menuItems2 = filter(menuItems, function (menuItem, i, menuItems) {
+ return !isSeparator$1(menuItem) || !isSeparator$1(menuItems[i - 1]);
+ });
+ return filter(menuItems2, function (menuItem, i, menuItems) {
+ return !isSeparator$1(menuItem) || i > 0 && i < menuItems.length - 1;
+ });
+ };
+ var createContextMenuItems = function (editor, context) {
+ var outputMenuItems = [{ text: '-' }];
+ var menuItems = global$2.grep(editor.menuItems, function (menuItem) {
+ return menuItem.context === context;
+ });
+ global$2.each(menuItems, function (menuItem) {
+ if (menuItem.separator === 'before') {
+ outputMenuItems.push({ text: '|' });
+ }
+ if (menuItem.prependToContext) {
+ outputMenuItems.unshift(menuItem);
+ } else {
+ outputMenuItems.push(menuItem);
+ }
+ if (menuItem.separator === 'after') {
+ outputMenuItems.push({ text: '|' });
+ }
+ });
+ return outputMenuItems;
+ };
+ var createInsertMenu = function (editor) {
+ var insertButtonItems = editor.settings.insert_button_items;
+ if (insertButtonItems) {
+ return trimMenuItems(createCustomMenuItems(editor, insertButtonItems));
+ } else {
+ return trimMenuItems(createContextMenuItems(editor, 'insert'));
+ }
+ };
+ var registerButtons$3 = function (editor) {
+ editor.addButton('insert', {
+ type: 'menubutton',
+ icon: 'insert',
+ menu: [],
+ oncreatemenu: function () {
+ this.menu.add(createInsertMenu(editor));
+ this.menu.renderNew();
+ }
+ });
+ };
+ var register$5 = function (editor) {
+ registerButtons$3(editor);
+ };
+ var $_4j2o4hx7jjgweg01 = { register: register$5 };
+
+ var registerFormatButtons = function (editor) {
+ global$2.each({
+ bold: 'Bold',
+ italic: 'Italic',
+ underline: 'Underline',
+ strikethrough: 'Strikethrough',
+ subscript: 'Subscript',
+ superscript: 'Superscript'
+ }, function (text, name) {
+ editor.addButton(name, {
+ active: false,
+ tooltip: text,
+ onPostRender: postRenderFormatToggle(editor, name),
+ onclick: toggleFormat(editor, name)
+ });
+ });
+ };
+ var registerCommandButtons = function (editor) {
+ global$2.each({
+ outdent: [
+ 'Decrease indent',
+ 'Outdent'
+ ],
+ indent: [
+ 'Increase indent',
+ 'Indent'
+ ],
+ cut: [
+ 'Cut',
+ 'Cut'
+ ],
+ copy: [
+ 'Copy',
+ 'Copy'
+ ],
+ paste: [
+ 'Paste',
+ 'Paste'
+ ],
+ help: [
+ 'Help',
+ 'mceHelp'
+ ],
+ selectall: [
+ 'Select all',
+ 'SelectAll'
+ ],
+ visualaid: [
+ 'Visual aids',
+ 'mceToggleVisualAid'
+ ],
+ newdocument: [
+ 'New document',
+ 'mceNewDocument'
+ ],
+ removeformat: [
+ 'Clear formatting',
+ 'RemoveFormat'
+ ],
+ remove: [
+ 'Remove',
+ 'Delete'
+ ]
+ }, function (item, name) {
+ editor.addButton(name, {
+ tooltip: item[0],
+ cmd: item[1]
+ });
+ });
+ };
+ var registerCommandToggleButtons = function (editor) {
+ global$2.each({
+ blockquote: [
+ 'Blockquote',
+ 'mceBlockQuote'
+ ],
+ subscript: [
+ 'Subscript',
+ 'Subscript'
+ ],
+ superscript: [
+ 'Superscript',
+ 'Superscript'
+ ]
+ }, function (item, name) {
+ editor.addButton(name, {
+ active: false,
+ tooltip: item[0],
+ cmd: item[1],
+ onPostRender: postRenderFormatToggle(editor, name)
+ });
+ });
+ };
+ var registerButtons$4 = function (editor) {
+ registerFormatButtons(editor);
+ registerCommandButtons(editor);
+ registerCommandToggleButtons(editor);
+ };
+ var registerMenuItems$1 = function (editor) {
+ global$2.each({
+ bold: [
+ 'Bold',
+ 'Bold',
+ 'Meta+B'
+ ],
+ italic: [
+ 'Italic',
+ 'Italic',
+ 'Meta+I'
+ ],
+ underline: [
+ 'Underline',
+ 'Underline',
+ 'Meta+U'
+ ],
+ strikethrough: [
+ 'Strikethrough',
+ 'Strikethrough'
+ ],
+ subscript: [
+ 'Subscript',
+ 'Subscript'
+ ],
+ superscript: [
+ 'Superscript',
+ 'Superscript'
+ ],
+ removeformat: [
+ 'Clear formatting',
+ 'RemoveFormat'
+ ],
+ newdocument: [
+ 'New document',
+ 'mceNewDocument'
+ ],
+ cut: [
+ 'Cut',
+ 'Cut',
+ 'Meta+X'
+ ],
+ copy: [
+ 'Copy',
+ 'Copy',
+ 'Meta+C'
+ ],
+ paste: [
+ 'Paste',
+ 'Paste',
+ 'Meta+V'
+ ],
+ selectall: [
+ 'Select all',
+ 'SelectAll',
+ 'Meta+A'
+ ]
+ }, function (item, name) {
+ editor.addMenuItem(name, {
+ text: item[0],
+ icon: name,
+ shortcut: item[2],
+ cmd: item[1]
+ });
+ });
+ editor.addMenuItem('codeformat', {
+ text: 'Code',
+ icon: 'code',
+ onclick: toggleFormat(editor, 'code')
+ });
+ };
+ var register$6 = function (editor) {
+ registerButtons$4(editor);
+ registerMenuItems$1(editor);
+ };
+ var $_c2lkymx8jjgweg05 = { register: register$6 };
+
+ var toggleUndoRedoState = function (editor, type) {
+ return function () {
+ var self = this;
+ var checkState = function () {
+ var typeFn = type === 'redo' ? 'hasRedo' : 'hasUndo';
+ return editor.undoManager ? editor.undoManager[typeFn]() : false;
+ };
+ self.disabled(!checkState());
+ editor.on('Undo Redo AddUndo TypingUndo ClearUndos SwitchMode', function () {
+ self.disabled(editor.readonly || !checkState());
+ });
+ };
+ };
+ var registerMenuItems$2 = function (editor) {
+ editor.addMenuItem('undo', {
+ text: 'Undo',
+ icon: 'undo',
+ shortcut: 'Meta+Z',
+ onPostRender: toggleUndoRedoState(editor, 'undo'),
+ cmd: 'undo'
+ });
+ editor.addMenuItem('redo', {
+ text: 'Redo',
+ icon: 'redo',
+ shortcut: 'Meta+Y',
+ onPostRender: toggleUndoRedoState(editor, 'redo'),
+ cmd: 'redo'
+ });
+ };
+ var registerButtons$5 = function (editor) {
+ editor.addButton('undo', {
+ tooltip: 'Undo',
+ onPostRender: toggleUndoRedoState(editor, 'undo'),
+ cmd: 'undo'
+ });
+ editor.addButton('redo', {
+ tooltip: 'Redo',
+ onPostRender: toggleUndoRedoState(editor, 'redo'),
+ cmd: 'redo'
+ });
+ };
+ var register$7 = function (editor) {
+ registerMenuItems$2(editor);
+ registerButtons$5(editor);
+ };
+ var $_9h432jx9jjgweg07 = { register: register$7 };
+
+ var toggleVisualAidState = function (editor) {
+ return function () {
+ var self = this;
+ editor.on('VisualAid', function (e) {
+ self.active(e.hasVisual);
+ });
+ self.active(editor.hasVisual);
+ };
+ };
+ var registerMenuItems$3 = function (editor) {
+ editor.addMenuItem('visualaid', {
+ text: 'Visual aids',
+ selectable: true,
+ onPostRender: toggleVisualAidState(editor),
+ cmd: 'mceToggleVisualAid'
+ });
+ };
+ var register$8 = function (editor) {
+ registerMenuItems$3(editor);
+ };
+ var $_eoil5jxajjgweg09 = { register: register$8 };
+
+ var setupEnvironment = function () {
+ Widget.tooltips = !global$8.iOS;
+ Control$1.translate = function (text) {
+ return global$1.translate(text);
};
+ };
+ var setupUiContainer = function (editor) {
+ if (editor.settings.ui_container) {
+ global$8.container = $_4ftvxwwyjjgwefz3.descendant(Element$$1.fromDom(document.body), editor.settings.ui_container).fold(constant(null), function (elm) {
+ return elm.dom();
+ });
+ }
+ };
+ var setupRtlMode = function (editor) {
+ if (editor.rtl) {
+ Control$1.rtl = true;
+ }
+ };
+ var setupHideFloatPanels = function (editor) {
+ editor.on('mousedown', function () {
+ FloatPanel.hideAll();
+ });
+ };
+ var setup$1 = function (editor) {
+ setupRtlMode(editor);
+ setupHideFloatPanels(editor);
+ setupUiContainer(editor);
+ setupEnvironment();
+ $_fp0lmzx6jjgwefzy.register(editor);
+ $_cz4u4px1jjgwefzl.register(editor);
+ $_c2lkymx8jjgweg05.register(editor);
+ $_9h432jx9jjgweg07.register(editor);
+ $_9a6bd5x4jjgwefzr.register(editor);
+ $_f7ngpex3jjgwefzo.register(editor);
+ $_ejzqp9x5jjgwefzu.register(editor);
+ $_eoil5jxajjgweg09.register(editor);
+ $_4j2o4hx7jjgweg01.register(editor);
+ };
+ var $_5heykgwxjjgwefyx = { setup: setup$1 };
+
+ var GridLayout = AbsoluteLayout.extend({
+ recalc: function (container) {
+ var settings, rows, cols, items, contLayoutRect, width, height, rect, ctrlLayoutRect, ctrl, x, y, posX, posY, ctrlSettings, contPaddingBox, align, spacingH, spacingV, alignH, alignV, maxX, maxY;
+ var colWidths = [];
+ var rowHeights = [];
+ var ctrlMinWidth, ctrlMinHeight, availableWidth, availableHeight, reverseRows, idx;
+ settings = container.settings;
+ items = container.items().filter(':visible');
+ contLayoutRect = container.layoutRect();
+ cols = settings.columns || Math.ceil(Math.sqrt(items.length));
+ rows = Math.ceil(items.length / cols);
+ spacingH = settings.spacingH || settings.spacing || 0;
+ spacingV = settings.spacingV || settings.spacing || 0;
+ alignH = settings.alignH || settings.align;
+ alignV = settings.alignV || settings.align;
+ contPaddingBox = container.paddingBox;
+ reverseRows = 'reverseRows' in settings ? settings.reverseRows : container.isRtl();
+ if (alignH && typeof alignH === 'string') {
+ alignH = [alignH];
+ }
+ if (alignV && typeof alignV === 'string') {
+ alignV = [alignV];
+ }
+ for (x = 0; x < cols; x++) {
+ colWidths.push(0);
+ }
+ for (y = 0; y < rows; y++) {
+ rowHeights.push(0);
+ }
+ for (y = 0; y < rows; y++) {
+ for (x = 0; x < cols; x++) {
+ ctrl = items[y * cols + x];
+ if (!ctrl) {
+ break;
+ }
+ ctrlLayoutRect = ctrl.layoutRect();
+ ctrlMinWidth = ctrlLayoutRect.minW;
+ ctrlMinHeight = ctrlLayoutRect.minH;
+ colWidths[x] = ctrlMinWidth > colWidths[x] ? ctrlMinWidth : colWidths[x];
+ rowHeights[y] = ctrlMinHeight > rowHeights[y] ? ctrlMinHeight : rowHeights[y];
+ }
+ }
+ availableWidth = contLayoutRect.innerW - contPaddingBox.left - contPaddingBox.right;
+ for (maxX = 0, x = 0; x < cols; x++) {
+ maxX += colWidths[x] + (x > 0 ? spacingH : 0);
+ availableWidth -= (x > 0 ? spacingH : 0) + colWidths[x];
+ }
+ availableHeight = contLayoutRect.innerH - contPaddingBox.top - contPaddingBox.bottom;
+ for (maxY = 0, y = 0; y < rows; y++) {
+ maxY += rowHeights[y] + (y > 0 ? spacingV : 0);
+ availableHeight -= (y > 0 ? spacingV : 0) + rowHeights[y];
+ }
+ maxX += contPaddingBox.left + contPaddingBox.right;
+ maxY += contPaddingBox.top + contPaddingBox.bottom;
+ rect = {};
+ rect.minW = maxX + (contLayoutRect.w - contLayoutRect.innerW);
+ rect.minH = maxY + (contLayoutRect.h - contLayoutRect.innerH);
+ rect.contentW = rect.minW - contLayoutRect.deltaW;
+ rect.contentH = rect.minH - contLayoutRect.deltaH;
+ rect.minW = Math.min(rect.minW, contLayoutRect.maxW);
+ rect.minH = Math.min(rect.minH, contLayoutRect.maxH);
+ rect.minW = Math.max(rect.minW, contLayoutRect.startMinWidth);
+ rect.minH = Math.max(rect.minH, contLayoutRect.startMinHeight);
+ if (contLayoutRect.autoResize && (rect.minW !== contLayoutRect.minW || rect.minH !== contLayoutRect.minH)) {
+ rect.w = rect.minW;
+ rect.h = rect.minH;
+ container.layoutRect(rect);
+ this.recalc(container);
+ if (container._lastRect === null) {
+ var parentCtrl = container.parent();
+ if (parentCtrl) {
+ parentCtrl._lastRect = null;
+ parentCtrl.recalc();
+ }
+ }
+ return;
+ }
+ if (contLayoutRect.autoResize) {
+ rect = container.layoutRect(rect);
+ rect.contentW = rect.minW - contLayoutRect.deltaW;
+ rect.contentH = rect.minH - contLayoutRect.deltaH;
+ }
+ var flexV;
+ if (settings.packV === 'start') {
+ flexV = 0;
+ } else {
+ flexV = availableHeight > 0 ? Math.floor(availableHeight / rows) : 0;
+ }
+ var totalFlex = 0;
+ var flexWidths = settings.flexWidths;
+ if (flexWidths) {
+ for (x = 0; x < flexWidths.length; x++) {
+ totalFlex += flexWidths[x];
+ }
+ } else {
+ totalFlex = cols;
+ }
+ var ratio = availableWidth / totalFlex;
+ for (x = 0; x < cols; x++) {
+ colWidths[x] += flexWidths ? flexWidths[x] * ratio : ratio;
+ }
+ posY = contPaddingBox.top;
+ for (y = 0; y < rows; y++) {
+ posX = contPaddingBox.left;
+ height = rowHeights[y] + flexV;
+ for (x = 0; x < cols; x++) {
+ if (reverseRows) {
+ idx = y * cols + cols - 1 - x;
+ } else {
+ idx = y * cols + x;
+ }
+ ctrl = items[idx];
+ if (!ctrl) {
+ break;
+ }
+ ctrlSettings = ctrl.settings;
+ ctrlLayoutRect = ctrl.layoutRect();
+ width = Math.max(colWidths[x], ctrlLayoutRect.startMinWidth);
+ ctrlLayoutRect.x = posX;
+ ctrlLayoutRect.y = posY;
+ align = ctrlSettings.alignH || (alignH ? alignH[x] || alignH[0] : null);
+ if (align === 'center') {
+ ctrlLayoutRect.x = posX + width / 2 - ctrlLayoutRect.w / 2;
+ } else if (align === 'right') {
+ ctrlLayoutRect.x = posX + width - ctrlLayoutRect.w;
+ } else if (align === 'stretch') {
+ ctrlLayoutRect.w = width;
+ }
+ align = ctrlSettings.alignV || (alignV ? alignV[x] || alignV[0] : null);
+ if (align === 'center') {
+ ctrlLayoutRect.y = posY + height / 2 - ctrlLayoutRect.h / 2;
+ } else if (align === 'bottom') {
+ ctrlLayoutRect.y = posY + height - ctrlLayoutRect.h;
+ } else if (align === 'stretch') {
+ ctrlLayoutRect.h = height;
+ }
+ ctrl.layoutRect(ctrlLayoutRect);
+ posX += width + spacingH;
+ if (ctrl.recalc) {
+ ctrl.recalc();
+ }
+ }
+ posY += height + spacingV;
+ }
+ }
+ });
+
+ var Iframe$1 = Widget.extend({
+ renderHtml: function () {
+ var self = this;
+ self.classes.add('iframe');
+ self.canFocus = false;
+ return '<iframe id="' + self._id + '" class="' + self.classes + '" tabindex="-1" src="' + (self.settings.url || 'javascript:\'\'') + '" frameborder="0"></iframe>';
+ },
+ src: function (src) {
+ this.getEl().src = src;
+ },
+ html: function (html, callback) {
+ var self = this, body = this.getEl().contentWindow.document.body;
+ if (!body) {
+ global$7.setTimeout(function () {
+ self.html(html);
+ });
+ } else {
+ body.innerHTML = html;
+ if (callback) {
+ callback();
+ }
+ }
+ return this;
+ }
+ });
+
+ var InfoBox = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.classes.add('widget').add('infobox');
+ self.canFocus = false;
+ },
+ severity: function (level) {
+ this.classes.remove('error');
+ this.classes.remove('warning');
+ this.classes.remove('success');
+ this.classes.add(level);
+ },
+ help: function (state) {
+ this.state.set('help', state);
+ },
+ renderHtml: function () {
+ var self = this, prefix = self.classPrefix;
+ return '<div id="' + self._id + '" class="' + self.classes + '">' + '<div id="' + self._id + '-body">' + self.encode(self.state.get('text')) + '<button role="button" tabindex="-1">' + '<i class="' + prefix + 'ico ' + prefix + 'i-help"></i>' + '</button>' + '</div>' + '</div>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:text', function (e) {
+ self.getEl('body').firstChild.data = self.encode(e.value);
+ if (self.state.get('rendered')) {
+ self.updateLayoutRect();
+ }
+ });
+ self.state.on('change:help', function (e) {
+ self.classes.toggle('has-help', e.value);
+ if (self.state.get('rendered')) {
+ self.updateLayoutRect();
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var Label = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.classes.add('widget').add('label');
+ self.canFocus = false;
+ if (settings.multiline) {
+ self.classes.add('autoscroll');
+ }
+ if (settings.strong) {
+ self.classes.add('strong');
+ }
+ },
+ initLayoutRect: function () {
+ var self = this, layoutRect = self._super();
+ if (self.settings.multiline) {
+ var size = funcs.getSize(self.getEl());
+ if (size.width > layoutRect.maxW) {
+ layoutRect.minW = layoutRect.maxW;
+ self.classes.add('multiline');
+ }
+ self.getEl().style.width = layoutRect.minW + 'px';
+ layoutRect.startMinH = layoutRect.h = layoutRect.minH = Math.min(layoutRect.maxH, funcs.getSize(self.getEl()).height);
+ }
+ return layoutRect;
+ },
+ repaint: function () {
+ var self = this;
+ if (!self.settings.multiline) {
+ self.getEl().style.lineHeight = self.layoutRect().h + 'px';
+ }
+ return self._super();
+ },
+ severity: function (level) {
+ this.classes.remove('error');
+ this.classes.remove('warning');
+ this.classes.remove('success');
+ this.classes.add(level);
+ },
+ renderHtml: function () {
+ var self = this;
+ var targetCtrl, forName, forId = self.settings.forId;
+ var text = self.settings.html ? self.settings.html : self.encode(self.state.get('text'));
+ if (!forId && (forName = self.settings.forName)) {
+ targetCtrl = self.getRoot().find('#' + forName)[0];
+ if (targetCtrl) {
+ forId = targetCtrl._id;
+ }
+ }
+ if (forId) {
+ return '<label id="' + self._id + '" class="' + self.classes + '"' + (forId ? ' for="' + forId + '"' : '') + '>' + text + '</label>';
+ }
+ return '<span id="' + self._id + '" class="' + self.classes + '">' + text + '</span>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:text', function (e) {
+ self.innerHtml(self.encode(e.value));
+ if (self.state.get('rendered')) {
+ self.updateLayoutRect();
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var Toolbar$1 = Container.extend({
+ Defaults: {
+ role: 'toolbar',
+ layout: 'flow'
+ },
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ self.classes.add('toolbar');
+ },
+ postRender: function () {
+ var self = this;
+ self.items().each(function (ctrl) {
+ ctrl.classes.add('toolbar-item');
+ });
+ return self._super();
+ }
+ });
+
+ var MenuBar = Toolbar$1.extend({
+ Defaults: {
+ role: 'menubar',
+ containerCls: 'menubar',
+ ariaRoot: true,
+ defaults: { type: 'menubutton' }
+ }
+ });
+
+ function isChildOf$1(node, parent$$1) {
+ while (node) {
+ if (parent$$1 === node) {
+ return true;
+ }
+ node = node.parentNode;
+ }
+ return false;
}
-);
-
-/**
- * Theme.js
- *
- * Released under LGPL License.
- * Copyright (c) 1999-2016 Ephox Corp. All rights reserved
- *
- * License: http://www.tinymce.com/license
- * Contributing: http://www.tinymce.com/contributing
- */
-
-define(
- 'tinymce.themes.modern.Theme',
- [
- 'global!window',
- 'tinymce.core.AddOnManager',
- 'tinymce.core.EditorManager',
- 'tinymce.core.Env',
- 'tinymce.core.ui.Api',
- 'tinymce.themes.modern.modes.Iframe',
- 'tinymce.themes.modern.modes.Inline',
- 'tinymce.themes.modern.ui.ProgressState',
- 'tinymce.themes.modern.ui.Resize'
- ],
- function (window, AddOnManager, EditorManager, Env, Api, Iframe, Inline, ProgressState, Resize) {
- var ThemeManager = AddOnManager.ThemeManager;
-
- Api.appendTo(window.tinymce ? window.tinymce : {});
-
- var renderUI = function (editor, theme, args) {
- var settings = editor.settings;
- var skin = settings.skin !== false ? settings.skin || 'lightgray' : false;
-
- if (skin) {
- var skinUrl = settings.skin_url;
-
- if (skinUrl) {
- skinUrl = editor.documentBaseURI.toAbsolute(skinUrl);
+ var MenuButton = Button.extend({
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._renderOpen = true;
+ self$$1._super(settings);
+ settings = self$$1.settings;
+ self$$1.classes.add('menubtn');
+ if (settings.fixedWidth) {
+ self$$1.classes.add('fixed-width');
+ }
+ self$$1.aria('haspopup', true);
+ self$$1.state.set('menu', settings.menu || self$$1.render());
+ },
+ showMenu: function (toggle) {
+ var self$$1 = this;
+ var menu;
+ if (self$$1.menu && self$$1.menu.visible() && toggle !== false) {
+ return self$$1.hideMenu();
+ }
+ if (!self$$1.menu) {
+ menu = self$$1.state.get('menu') || [];
+ self$$1.classes.add('opened');
+ if (menu.length) {
+ menu = {
+ type: 'menu',
+ animate: true,
+ items: menu
+ };
} else {
- skinUrl = EditorManager.baseURL + '/skins/' + skin;
+ menu.type = menu.type || 'menu';
+ menu.animate = true;
}
-
- args.skinUiCss = skinUrl + '/skin.min.css';
-
- // Load content.min.css or content.inline.min.css
- editor.contentCSS.push(skinUrl + '/content' + (editor.inline ? '.inline' : '') + '.min.css');
+ if (!menu.renderTo) {
+ self$$1.menu = global$4.create(menu).parent(self$$1).renderTo();
+ } else {
+ self$$1.menu = menu.parent(self$$1).show().renderTo();
+ }
+ self$$1.fire('createmenu');
+ self$$1.menu.reflow();
+ self$$1.menu.on('cancel', function (e) {
+ if (e.control.parent() === self$$1.menu) {
+ e.stopPropagation();
+ self$$1.focus();
+ self$$1.hideMenu();
+ }
+ });
+ self$$1.menu.on('select', function () {
+ self$$1.focus();
+ });
+ self$$1.menu.on('show hide', function (e) {
+ if (e.control === self$$1.menu) {
+ self$$1.activeMenu(e.type === 'show');
+ self$$1.classes.toggle('opened', e.type === 'show');
+ }
+ self$$1.aria('expanded', e.type === 'show');
+ }).fire('show');
}
-
- ProgressState.setup(editor, theme);
-
- if (settings.inline) {
- return Inline.render(editor, theme, args);
+ self$$1.menu.show();
+ self$$1.menu.layoutRect({ w: self$$1.layoutRect().w });
+ self$$1.menu.repaint();
+ self$$1.menu.moveRel(self$$1.getEl(), self$$1.isRtl() ? [
+ 'br-tr',
+ 'tr-br'
+ ] : [
+ 'bl-tl',
+ 'tl-bl'
+ ]);
+ self$$1.fire('showmenu');
+ },
+ hideMenu: function () {
+ var self$$1 = this;
+ if (self$$1.menu) {
+ self$$1.menu.items().each(function (item) {
+ if (item.hideMenu) {
+ item.hideMenu();
+ }
+ });
+ self$$1.menu.hide();
}
+ },
+ activeMenu: function (state) {
+ this.classes.toggle('active', state);
+ },
+ renderHtml: function () {
+ var self$$1 = this, id = self$$1._id, prefix = self$$1.classPrefix;
+ var icon = self$$1.settings.icon, image;
+ var text = self$$1.state.get('text');
+ var textHtml = '';
+ image = self$$1.settings.image;
+ if (image) {
+ icon = 'none';
+ if (typeof image !== 'string') {
+ image = window.getSelection ? image[0] : image[1];
+ }
+ image = ' style="background-image: url(\'' + image + '\')"';
+ } else {
+ image = '';
+ }
+ if (text) {
+ self$$1.classes.add('btn-has-text');
+ textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>';
+ }
+ icon = self$$1.settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
+ self$$1.aria('role', self$$1.parent() instanceof MenuBar ? 'menuitem' : 'button');
+ return '<div id="' + id + '" class="' + self$$1.classes + '" tabindex="-1" aria-labelledby="' + id + '">' + '<button id="' + id + '-open" role="presentation" type="button" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
+ },
+ postRender: function () {
+ var self$$1 = this;
+ self$$1.on('click', function (e) {
+ if (e.control === self$$1 && isChildOf$1(e.target, self$$1.getEl())) {
+ self$$1.focus();
+ self$$1.showMenu(!e.aria);
+ if (e.aria) {
+ self$$1.menu.items().filter(':visible')[0].focus();
+ }
+ }
+ });
+ self$$1.on('mouseenter', function (e) {
+ var overCtrl = e.control;
+ var parent$$1 = self$$1.parent();
+ var hasVisibleSiblingMenu;
+ if (overCtrl && parent$$1 && overCtrl instanceof MenuButton && overCtrl.parent() === parent$$1) {
+ parent$$1.items().filter('MenuButton').each(function (ctrl) {
+ if (ctrl.hideMenu && ctrl !== overCtrl) {
+ if (ctrl.menu && ctrl.menu.visible()) {
+ hasVisibleSiblingMenu = true;
+ }
+ ctrl.hideMenu();
+ }
+ });
+ if (hasVisibleSiblingMenu) {
+ overCtrl.focus();
+ overCtrl.showMenu();
+ }
+ }
+ });
+ return self$$1._super();
+ },
+ bindStates: function () {
+ var self$$1 = this;
+ self$$1.state.on('change:menu', function () {
+ if (self$$1.menu) {
+ self$$1.menu.remove();
+ }
+ self$$1.menu = null;
+ });
+ return self$$1._super();
+ },
+ remove: function () {
+ this._super();
+ if (this.menu) {
+ this.menu.remove();
+ }
+ }
+ });
+
+ var Menu = FloatPanel.extend({
+ Defaults: {
+ defaultType: 'menuitem',
+ border: 1,
+ layout: 'stack',
+ role: 'application',
+ bodyRole: 'menu',
+ ariaRoot: true
+ },
+ init: function (settings) {
+ var self = this;
+ settings.autohide = true;
+ settings.constrainToViewport = true;
+ if (typeof settings.items === 'function') {
+ settings.itemsFactory = settings.items;
+ settings.items = [];
+ }
+ if (settings.itemDefaults) {
+ var items = settings.items;
+ var i = items.length;
+ while (i--) {
+ items[i] = global$2.extend({}, settings.itemDefaults, items[i]);
+ }
+ }
+ self._super(settings);
+ self.classes.add('menu');
+ if (settings.animate && global$8.ie !== 11) {
+ self.classes.add('animate');
+ }
+ },
+ repaint: function () {
+ this.classes.toggle('menu-align', true);
+ this._super();
+ this.getEl().style.height = '';
+ this.getEl('body').style.height = '';
+ return this;
+ },
+ cancel: function () {
+ var self = this;
+ self.hideAll();
+ self.fire('select');
+ },
+ load: function () {
+ var self = this;
+ var time, factory;
+ function hideThrobber() {
+ if (self.throbber) {
+ self.throbber.hide();
+ self.throbber = null;
+ }
+ }
+ factory = self.settings.itemsFactory;
+ if (!factory) {
+ return;
+ }
+ if (!self.throbber) {
+ self.throbber = new Throbber(self.getEl('body'), true);
+ if (self.items().length === 0) {
+ self.throbber.show();
+ self.fire('loading');
+ } else {
+ self.throbber.show(100, function () {
+ self.items().remove();
+ self.fire('loading');
+ });
+ }
+ self.on('hide close', hideThrobber);
+ }
+ self.requestTime = time = new Date().getTime();
+ self.settings.itemsFactory(function (items) {
+ if (items.length === 0) {
+ self.hide();
+ return;
+ }
+ if (self.requestTime !== time) {
+ return;
+ }
+ self.getEl().style.width = '';
+ self.getEl('body').style.width = '';
+ hideThrobber();
+ self.items().remove();
+ self.getEl('body').innerHTML = '';
+ self.add(items);
+ self.renderNew();
+ self.fire('loaded');
+ });
+ },
+ hideAll: function () {
+ var self = this;
+ this.find('menuitem').exec('hideMenu');
+ return self._super();
+ },
+ preRender: function () {
+ var self = this;
+ self.items().each(function (ctrl) {
+ var settings = ctrl.settings;
+ if (settings.icon || settings.image || settings.selectable) {
+ self._hasIcons = true;
+ return false;
+ }
+ });
+ if (self.settings.itemsFactory) {
+ self.on('postrender', function () {
+ if (self.settings.itemsFactory) {
+ self.load();
+ }
+ });
+ }
+ self.on('show hide', function (e) {
+ if (e.control === self) {
+ if (e.type === 'show') {
+ global$7.setTimeout(function () {
+ self.classes.add('in');
+ }, 0);
+ } else {
+ self.classes.remove('in');
+ }
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var ListBox = MenuButton.extend({
+ init: function (settings) {
+ var self = this;
+ var values, selected, selectedText, lastItemCtrl;
+ function setSelected(menuValues) {
+ for (var i = 0; i < menuValues.length; i++) {
+ selected = menuValues[i].selected || settings.value === menuValues[i].value;
+ if (selected) {
+ selectedText = selectedText || menuValues[i].text;
+ self.state.set('value', menuValues[i].value);
+ return true;
+ }
+ if (menuValues[i].menu) {
+ if (setSelected(menuValues[i].menu)) {
+ return true;
+ }
+ }
+ }
+ }
+ self._super(settings);
+ settings = self.settings;
+ self._values = values = settings.values;
+ if (values) {
+ if (typeof settings.value !== 'undefined') {
+ setSelected(values);
+ }
+ if (!selected && values.length > 0) {
+ selectedText = values[0].text;
+ self.state.set('value', values[0].value);
+ }
+ self.state.set('menu', values);
+ }
+ self.state.set('text', settings.text || selectedText);
+ self.classes.add('listbox');
+ self.on('select', function (e) {
+ var ctrl = e.control;
+ if (lastItemCtrl) {
+ e.lastControl = lastItemCtrl;
+ }
+ if (settings.multiple) {
+ ctrl.active(!ctrl.active());
+ } else {
+ self.value(e.control.value());
+ }
+ lastItemCtrl = ctrl;
+ });
+ },
+ value: function (value) {
+ if (arguments.length === 0) {
+ return this.state.get('value');
+ }
+ if (typeof value === 'undefined') {
+ return this;
+ }
+ if (this.settings.values) {
+ var matchingValues = global$2.grep(this.settings.values, function (a) {
+ return a.value === value;
+ });
+ if (matchingValues.length > 0) {
+ this.state.set('value', value);
+ } else if (value === null) {
+ this.state.set('value', null);
+ }
+ } else {
+ this.state.set('value', value);
+ }
+ return this;
+ },
+ bindStates: function () {
+ var self = this;
+ function activateMenuItemsByValue(menu, value) {
+ if (menu instanceof Menu) {
+ menu.items().each(function (ctrl) {
+ if (!ctrl.hasMenus()) {
+ ctrl.active(ctrl.value() === value);
+ }
+ });
+ }
+ }
+ function getSelectedItem(menuValues, value) {
+ var selectedItem;
+ if (!menuValues) {
+ return;
+ }
+ for (var i = 0; i < menuValues.length; i++) {
+ if (menuValues[i].value === value) {
+ return menuValues[i];
+ }
+ if (menuValues[i].menu) {
+ selectedItem = getSelectedItem(menuValues[i].menu, value);
+ if (selectedItem) {
+ return selectedItem;
+ }
+ }
+ }
+ }
+ self.on('show', function (e) {
+ activateMenuItemsByValue(e.control, self.value());
+ });
+ self.state.on('change:value', function (e) {
+ var selectedItem = getSelectedItem(self.state.get('menu'), e.value);
+ if (selectedItem) {
+ self.text(selectedItem.text);
+ } else {
+ self.text(self.settings.text);
+ }
+ });
+ return self._super();
+ }
+ });
+
+ var toggleTextStyle = function (ctrl, state) {
+ var textStyle = ctrl._textStyle;
+ if (textStyle) {
+ var textElm = ctrl.getEl('text');
+ textElm.setAttribute('style', textStyle);
+ if (state) {
+ textElm.style.color = '';
+ textElm.style.backgroundColor = '';
+ }
+ }
+ };
+ var MenuItem = Widget.extend({
+ Defaults: {
+ border: 0,
+ role: 'menuitem'
+ },
+ init: function (settings) {
+ var self = this;
+ var text;
+ self._super(settings);
+ settings = self.settings;
+ self.classes.add('menu-item');
+ if (settings.menu) {
+ self.classes.add('menu-item-expand');
+ }
+ if (settings.preview) {
+ self.classes.add('menu-item-preview');
+ }
+ text = self.state.get('text');
+ if (text === '-' || text === '|') {
+ self.classes.add('menu-item-sep');
+ self.aria('role', 'separator');
+ self.state.set('text', '-');
+ }
+ if (settings.selectable) {
+ self.aria('role', 'menuitemcheckbox');
+ self.classes.add('menu-item-checkbox');
+ settings.icon = 'selected';
+ }
+ if (!settings.preview && !settings.selectable) {
+ self.classes.add('menu-item-normal');
+ }
+ self.on('mousedown', function (e) {
+ e.preventDefault();
+ });
+ if (settings.menu && !settings.ariaHideMenu) {
+ self.aria('haspopup', true);
+ }
+ },
+ hasMenus: function () {
+ return !!this.settings.menu;
+ },
+ showMenu: function () {
+ var self = this;
+ var settings = self.settings;
+ var menu;
+ var parent = self.parent();
+ parent.items().each(function (ctrl) {
+ if (ctrl !== self) {
+ ctrl.hideMenu();
+ }
+ });
+ if (settings.menu) {
+ menu = self.menu;
+ if (!menu) {
+ menu = settings.menu;
+ if (menu.length) {
+ menu = {
+ type: 'menu',
+ items: menu
+ };
+ } else {
+ menu.type = menu.type || 'menu';
+ }
+ if (parent.settings.itemDefaults) {
+ menu.itemDefaults = parent.settings.itemDefaults;
+ }
+ menu = self.menu = global$4.create(menu).parent(self).renderTo();
+ menu.reflow();
+ menu.on('cancel', function (e) {
+ e.stopPropagation();
+ self.focus();
+ menu.hide();
+ });
+ menu.on('show hide', function (e) {
+ if (e.control.items) {
+ e.control.items().each(function (ctrl) {
+ ctrl.active(ctrl.settings.selected);
+ });
+ }
+ }).fire('show');
+ menu.on('hide', function (e) {
+ if (e.control === menu) {
+ self.classes.remove('selected');
+ }
+ });
+ menu.submenu = true;
+ } else {
+ menu.show();
+ }
+ menu._parentMenu = parent;
+ menu.classes.add('menu-sub');
+ var rel = menu.testMoveRel(self.getEl(), self.isRtl() ? [
+ 'tl-tr',
+ 'bl-br',
+ 'tr-tl',
+ 'br-bl'
+ ] : [
+ 'tr-tl',
+ 'br-bl',
+ 'tl-tr',
+ 'bl-br'
+ ]);
+ menu.moveRel(self.getEl(), rel);
+ menu.rel = rel;
+ rel = 'menu-sub-' + rel;
+ menu.classes.remove(menu._lastRel).add(rel);
+ menu._lastRel = rel;
+ self.classes.add('selected');
+ self.aria('expanded', true);
+ }
+ },
+ hideMenu: function () {
+ var self = this;
+ if (self.menu) {
+ self.menu.items().each(function (item) {
+ if (item.hideMenu) {
+ item.hideMenu();
+ }
+ });
+ self.menu.hide();
+ self.aria('expanded', false);
+ }
+ return self;
+ },
+ renderHtml: function () {
+ var self = this;
+ var id = self._id;
+ var settings = self.settings;
+ var prefix = self.classPrefix;
+ var text = self.state.get('text');
+ var icon = self.settings.icon, image = '', shortcut = settings.shortcut;
+ var url = self.encode(settings.url), iconHtml = '';
+ function convertShortcut(shortcut) {
+ var i, value, replace = {};
+ if (global$8.mac) {
+ replace = {
+ alt: '⌥',
+ ctrl: '⌘',
+ shift: '⇧',
+ meta: '⌘'
+ };
+ } else {
+ replace = { meta: 'Ctrl' };
+ }
+ shortcut = shortcut.split('+');
+ for (i = 0; i < shortcut.length; i++) {
+ value = replace[shortcut[i].toLowerCase()];
+ if (value) {
+ shortcut[i] = value;
+ }
+ }
+ return shortcut.join('+');
+ }
+ function escapeRegExp(str) {
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
+ }
+ function markMatches(text) {
+ var match = settings.match || '';
+ return match ? text.replace(new RegExp(escapeRegExp(match), 'gi'), function (match) {
+ return '!mce~match[' + match + ']mce~match!';
+ }) : text;
+ }
+ function boldMatches(text) {
+ return text.replace(new RegExp(escapeRegExp('!mce~match['), 'g'), '<b>').replace(new RegExp(escapeRegExp(']mce~match!'), 'g'), '</b>');
+ }
+ if (icon) {
+ self.parent().classes.add('menu-has-icons');
+ }
+ if (settings.image) {
+ image = ' style="background-image: url(\'' + settings.image + '\')"';
+ }
+ if (shortcut) {
+ shortcut = convertShortcut(shortcut);
+ }
+ icon = prefix + 'ico ' + prefix + 'i-' + (self.settings.icon || 'none');
+ iconHtml = text !== '-' ? '<i class="' + icon + '"' + image + '></i>\xA0' : '';
+ text = boldMatches(self.encode(markMatches(text)));
+ url = boldMatches(self.encode(markMatches(url)));
+ return '<div id="' + id + '" class="' + self.classes + '" tabindex="-1">' + iconHtml + (text !== '-' ? '<span id="' + id + '-text" class="' + prefix + 'text">' + text + '</span>' : '') + (shortcut ? '<div id="' + id + '-shortcut" class="' + prefix + 'menu-shortcut">' + shortcut + '</div>' : '') + (settings.menu ? '<div class="' + prefix + 'caret"></div>' : '') + (url ? '<div class="' + prefix + 'menu-item-link">' + url + '</div>' : '') + '</div>';
+ },
+ postRender: function () {
+ var self = this, settings = self.settings;
+ var textStyle = settings.textStyle;
+ if (typeof textStyle === 'function') {
+ textStyle = textStyle.call(this);
+ }
+ if (textStyle) {
+ var textElm = self.getEl('text');
+ if (textElm) {
+ textElm.setAttribute('style', textStyle);
+ self._textStyle = textStyle;
+ }
+ }
+ self.on('mouseenter click', function (e) {
+ if (e.control === self) {
+ if (!settings.menu && e.type === 'click') {
+ self.fire('select');
+ global$7.requestAnimationFrame(function () {
+ self.parent().hideAll();
+ });
+ } else {
+ self.showMenu();
+ if (e.aria) {
+ self.menu.focus(true);
+ }
+ }
+ }
+ });
+ self._super();
+ return self;
+ },
+ hover: function () {
+ var self = this;
+ self.parent().items().each(function (ctrl) {
+ ctrl.classes.remove('selected');
+ });
+ self.classes.toggle('selected', true);
+ return self;
+ },
+ active: function (state) {
+ toggleTextStyle(this, state);
+ if (typeof state !== 'undefined') {
+ this.aria('checked', state);
+ }
+ return this._super(state);
+ },
+ remove: function () {
+ this._super();
+ if (this.menu) {
+ this.menu.remove();
+ }
+ }
+ });
- return Iframe.render(editor, theme, args);
- };
-
- ThemeManager.add('modern', function (editor) {
- return {
- renderUI: function (args) {
- return renderUI(editor, this, args);
+ var Radio = Checkbox.extend({
+ Defaults: {
+ classes: 'radio',
+ role: 'radio'
+ }
+ });
+
+ var ResizeHandle = Widget.extend({
+ renderHtml: function () {
+ var self = this, prefix = self.classPrefix;
+ self.classes.add('resizehandle');
+ if (self.settings.direction === 'both') {
+ self.classes.add('resizehandle-both');
+ }
+ self.canFocus = false;
+ return '<div id="' + self._id + '" class="' + self.classes + '">' + '<i class="' + prefix + 'ico ' + prefix + 'i-resize"></i>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ self._super();
+ self.resizeDragHelper = new DragHelper(this._id, {
+ start: function () {
+ self.fire('ResizeStart');
},
- resizeTo: function (w, h) {
- return Resize.resizeTo(editor, w, h);
+ drag: function (e) {
+ if (self.settings.direction !== 'both') {
+ e.deltaX = 0;
+ }
+ self.fire('Resize', e);
},
- resizeBy: function (dw, dh) {
- return Resize.resizeBy(editor, dw, dh);
+ stop: function () {
+ self.fire('ResizeEnd');
+ }
+ });
+ },
+ remove: function () {
+ if (this.resizeDragHelper) {
+ this.resizeDragHelper.destroy();
+ }
+ return this._super();
+ }
+ });
+
+ function createOptions(options) {
+ var strOptions = '';
+ if (options) {
+ for (var i = 0; i < options.length; i++) {
+ strOptions += '<option value="' + options[i] + '">' + options[i] + '</option>';
+ }
+ }
+ return strOptions;
+ }
+ var SelectBox = Widget.extend({
+ Defaults: {
+ classes: 'selectbox',
+ role: 'selectbox',
+ options: []
+ },
+ init: function (settings) {
+ var self = this;
+ self._super(settings);
+ if (self.settings.size) {
+ self.size = self.settings.size;
+ }
+ if (self.settings.options) {
+ self._options = self.settings.options;
+ }
+ self.on('keydown', function (e) {
+ var rootControl;
+ if (e.keyCode === 13) {
+ e.preventDefault();
+ self.parents().reverse().each(function (ctrl) {
+ if (ctrl.toJSON) {
+ rootControl = ctrl;
+ return false;
+ }
+ });
+ self.fire('submit', { data: rootControl.toJSON() });
+ }
+ });
+ },
+ options: function (state) {
+ if (!arguments.length) {
+ return this.state.get('options');
+ }
+ this.state.set('options', state);
+ return this;
+ },
+ renderHtml: function () {
+ var self = this;
+ var options, size = '';
+ options = createOptions(self._options);
+ if (self.size) {
+ size = ' size = "' + self.size + '"';
+ }
+ return '<select id="' + self._id + '" class="' + self.classes + '"' + size + '>' + options + '</select>';
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:options', function (e) {
+ self.getEl().innerHTML = createOptions(e.value);
+ });
+ return self._super();
+ }
+ });
+
+ function constrain(value, minVal, maxVal) {
+ if (value < minVal) {
+ value = minVal;
+ }
+ if (value > maxVal) {
+ value = maxVal;
+ }
+ return value;
+ }
+ function setAriaProp(el, name, value) {
+ el.setAttribute('aria-' + name, value);
+ }
+ function updateSliderHandle(ctrl, value) {
+ var maxHandlePos, shortSizeName, sizeName, stylePosName, styleValue, handleEl;
+ if (ctrl.settings.orientation === 'v') {
+ stylePosName = 'top';
+ sizeName = 'height';
+ shortSizeName = 'h';
+ } else {
+ stylePosName = 'left';
+ sizeName = 'width';
+ shortSizeName = 'w';
+ }
+ handleEl = ctrl.getEl('handle');
+ maxHandlePos = (ctrl.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
+ styleValue = maxHandlePos * ((value - ctrl._minValue) / (ctrl._maxValue - ctrl._minValue)) + 'px';
+ handleEl.style[stylePosName] = styleValue;
+ handleEl.style.height = ctrl.layoutRect().h + 'px';
+ setAriaProp(handleEl, 'valuenow', value);
+ setAriaProp(handleEl, 'valuetext', '' + ctrl.settings.previewFilter(value));
+ setAriaProp(handleEl, 'valuemin', ctrl._minValue);
+ setAriaProp(handleEl, 'valuemax', ctrl._maxValue);
+ }
+ var Slider = Widget.extend({
+ init: function (settings) {
+ var self = this;
+ if (!settings.previewFilter) {
+ settings.previewFilter = function (value) {
+ return Math.round(value * 100) / 100;
+ };
+ }
+ self._super(settings);
+ self.classes.add('slider');
+ if (settings.orientation === 'v') {
+ self.classes.add('vertical');
+ }
+ self._minValue = isNumber(settings.minValue) ? settings.minValue : 0;
+ self._maxValue = isNumber(settings.maxValue) ? settings.maxValue : 100;
+ self._initValue = self.state.get('value');
+ },
+ renderHtml: function () {
+ var self = this, id = self._id, prefix = self.classPrefix;
+ return '<div id="' + id + '" class="' + self.classes + '">' + '<div id="' + id + '-handle" class="' + prefix + 'slider-handle" role="slider" tabindex="-1"></div>' + '</div>';
+ },
+ reset: function () {
+ this.value(this._initValue).repaint();
+ },
+ postRender: function () {
+ var self = this;
+ var minValue, maxValue, screenCordName, stylePosName, sizeName, shortSizeName;
+ function toFraction(min, max, val) {
+ return (val + min) / (max - min);
+ }
+ function fromFraction(min, max, val) {
+ return val * (max - min) - min;
+ }
+ function handleKeyboard(minValue, maxValue) {
+ function alter(delta) {
+ var value;
+ value = self.value();
+ value = fromFraction(minValue, maxValue, toFraction(minValue, maxValue, value) + delta * 0.05);
+ value = constrain(value, minValue, maxValue);
+ self.value(value);
+ self.fire('dragstart', { value: value });
+ self.fire('drag', { value: value });
+ self.fire('dragend', { value: value });
+ }
+ self.on('keydown', function (e) {
+ switch (e.keyCode) {
+ case 37:
+ case 38:
+ alter(-1);
+ break;
+ case 39:
+ case 40:
+ alter(1);
+ break;
+ }
+ });
+ }
+ function handleDrag(minValue, maxValue, handleEl) {
+ var startPos, startHandlePos, maxHandlePos, handlePos, value;
+ self._dragHelper = new DragHelper(self._id, {
+ handle: self._id + '-handle',
+ start: function (e) {
+ startPos = e[screenCordName];
+ startHandlePos = parseInt(self.getEl('handle').style[stylePosName], 10);
+ maxHandlePos = (self.layoutRect()[shortSizeName] || 100) - funcs.getSize(handleEl)[sizeName];
+ self.fire('dragstart', { value: value });
+ },
+ drag: function (e) {
+ var delta = e[screenCordName] - startPos;
+ handlePos = constrain(startHandlePos + delta, 0, maxHandlePos);
+ handleEl.style[stylePosName] = handlePos + 'px';
+ value = minValue + handlePos / maxHandlePos * (maxValue - minValue);
+ self.value(value);
+ self.tooltip().text('' + self.settings.previewFilter(value)).show().moveRel(handleEl, 'bc tc');
+ self.fire('drag', { value: value });
+ },
+ stop: function () {
+ self.tooltip().hide();
+ self.fire('dragend', { value: value });
+ }
+ });
+ }
+ minValue = self._minValue;
+ maxValue = self._maxValue;
+ if (self.settings.orientation === 'v') {
+ screenCordName = 'screenY';
+ stylePosName = 'top';
+ sizeName = 'height';
+ shortSizeName = 'h';
+ } else {
+ screenCordName = 'screenX';
+ stylePosName = 'left';
+ sizeName = 'width';
+ shortSizeName = 'w';
+ }
+ self._super();
+ handleKeyboard(minValue, maxValue);
+ handleDrag(minValue, maxValue, self.getEl('handle'));
+ },
+ repaint: function () {
+ this._super();
+ updateSliderHandle(this, this.value());
+ },
+ bindStates: function () {
+ var self = this;
+ self.state.on('change:value', function (e) {
+ updateSliderHandle(self, e.value);
+ });
+ return self._super();
+ }
+ });
+
+ var Spacer = Widget.extend({
+ renderHtml: function () {
+ var self = this;
+ self.classes.add('spacer');
+ self.canFocus = false;
+ return '<div id="' + self._id + '" class="' + self.classes + '"></div>';
+ }
+ });
+
+ var SplitButton = MenuButton.extend({
+ Defaults: {
+ classes: 'widget btn splitbtn',
+ role: 'button'
+ },
+ repaint: function () {
+ var self$$1 = this;
+ var elm = self$$1.getEl();
+ var rect = self$$1.layoutRect();
+ var mainButtonElm, menuButtonElm;
+ self$$1._super();
+ mainButtonElm = elm.firstChild;
+ menuButtonElm = elm.lastChild;
+ global$9(mainButtonElm).css({
+ width: rect.w - funcs.getSize(menuButtonElm).width,
+ height: rect.h - 2
+ });
+ global$9(menuButtonElm).css({ height: rect.h - 2 });
+ return self$$1;
+ },
+ activeMenu: function (state) {
+ var self$$1 = this;
+ global$9(self$$1.getEl().lastChild).toggleClass(self$$1.classPrefix + 'active', state);
+ },
+ renderHtml: function () {
+ var self$$1 = this;
+ var id = self$$1._id;
+ var prefix = self$$1.classPrefix;
+ var image;
+ var icon = self$$1.state.get('icon');
+ var text = self$$1.state.get('text');
+ var settings = self$$1.settings;
+ var textHtml = '', ariaPressed;
+ image = settings.image;
+ if (image) {
+ icon = 'none';
+ if (typeof image !== 'string') {
+ image = window.getSelection ? image[0] : image[1];
+ }
+ image = ' style="background-image: url(\'' + image + '\')"';
+ } else {
+ image = '';
+ }
+ icon = settings.icon ? prefix + 'ico ' + prefix + 'i-' + icon : '';
+ if (text) {
+ self$$1.classes.add('btn-has-text');
+ textHtml = '<span class="' + prefix + 'txt">' + self$$1.encode(text) + '</span>';
+ }
+ ariaPressed = typeof settings.active === 'boolean' ? ' aria-pressed="' + settings.active + '"' : '';
+ return '<div id="' + id + '" class="' + self$$1.classes + '" role="button"' + ariaPressed + ' tabindex="-1">' + '<button type="button" hidefocus="1" tabindex="-1">' + (icon ? '<i class="' + icon + '"' + image + '></i>' : '') + textHtml + '</button>' + '<button type="button" class="' + prefix + 'open" hidefocus="1" tabindex="-1">' + (self$$1._menuBtnText ? (icon ? '\xA0' : '') + self$$1._menuBtnText : '') + ' <i class="' + prefix + 'caret"></i>' + '</button>' + '</div>';
+ },
+ postRender: function () {
+ var self$$1 = this, onClickHandler = self$$1.settings.onclick;
+ self$$1.on('click', function (e) {
+ var node = e.target;
+ if (e.control === this) {
+ while (node) {
+ if (e.aria && e.aria.key !== 'down' || node.nodeName === 'BUTTON' && node.className.indexOf('open') === -1) {
+ e.stopImmediatePropagation();
+ if (onClickHandler) {
+ onClickHandler.call(this, e);
+ }
+ return;
+ }
+ node = node.parentNode;
+ }
+ }
+ });
+ delete self$$1.settings.onclick;
+ return self$$1._super();
+ }
+ });
+
+ var StackLayout = FlowLayout.extend({
+ Defaults: {
+ containerClass: 'stack-layout',
+ controlClass: 'stack-layout-item',
+ endClass: 'break'
+ },
+ isNative: function () {
+ return true;
+ }
+ });
+
+ var TabPanel = Panel.extend({
+ Defaults: {
+ layout: 'absolute',
+ defaults: { type: 'panel' }
+ },
+ activateTab: function (idx) {
+ var activeTabElm;
+ if (this.activeTabId) {
+ activeTabElm = this.getEl(this.activeTabId);
+ global$9(activeTabElm).removeClass(this.classPrefix + 'active');
+ activeTabElm.setAttribute('aria-selected', 'false');
+ }
+ this.activeTabId = 't' + idx;
+ activeTabElm = this.getEl('t' + idx);
+ activeTabElm.setAttribute('aria-selected', 'true');
+ global$9(activeTabElm).addClass(this.classPrefix + 'active');
+ this.items()[idx].show().fire('showtab');
+ this.reflow();
+ this.items().each(function (item, i) {
+ if (idx !== i) {
+ item.hide();
+ }
+ });
+ },
+ renderHtml: function () {
+ var self = this;
+ var layout = self._layout;
+ var tabsHtml = '';
+ var prefix = self.classPrefix;
+ self.preRender();
+ layout.preRender(self);
+ self.items().each(function (ctrl, i) {
+ var id = self._id + '-t' + i;
+ ctrl.aria('role', 'tabpanel');
+ ctrl.aria('labelledby', id);
+ tabsHtml += '<div id="' + id + '" class="' + prefix + 'tab" ' + 'unselectable="on" role="tab" aria-controls="' + ctrl._id + '" aria-selected="false" tabIndex="-1">' + self.encode(ctrl.settings.title) + '</div>';
+ });
+ return '<div id="' + self._id + '" class="' + self.classes + '" hidefocus="1" tabindex="-1">' + '<div id="' + self._id + '-head" class="' + prefix + 'tabs" role="tablist">' + tabsHtml + '</div>' + '<div id="' + self._id + '-body" class="' + self.bodyClasses + '">' + layout.renderHtml(self) + '</div>' + '</div>';
+ },
+ postRender: function () {
+ var self = this;
+ self._super();
+ self.settings.activeTab = self.settings.activeTab || 0;
+ self.activateTab(self.settings.activeTab);
+ this.on('click', function (e) {
+ var targetParent = e.target.parentNode;
+ if (targetParent && targetParent.id === self._id + '-head') {
+ var i = targetParent.childNodes.length;
+ while (i--) {
+ if (targetParent.childNodes[i] === e.target) {
+ self.activateTab(i);
+ }
+ }
}
+ });
+ },
+ initLayoutRect: function () {
+ var self = this;
+ var rect, minW, minH;
+ minW = funcs.getSize(self.getEl('head')).width;
+ minW = minW < 0 ? 0 : minW;
+ minH = 0;
+ self.items().each(function (item) {
+ minW = Math.max(minW, item.layoutRect().minW);
+ minH = Math.max(minH, item.layoutRect().minH);
+ });
+ self.items().each(function (ctrl) {
+ ctrl.settings.x = 0;
+ ctrl.settings.y = 0;
+ ctrl.settings.w = minW;
+ ctrl.settings.h = minH;
+ ctrl.layoutRect({
+ x: 0,
+ y: 0,
+ w: minW,
+ h: minH
+ });
+ });
+ var headH = funcs.getSize(self.getEl('head')).height;
+ self.settings.minWidth = minW;
+ self.settings.minHeight = minH + headH;
+ rect = self._super();
+ rect.deltaH += headH;
+ rect.innerH = rect.h - rect.deltaH;
+ return rect;
+ }
+ });
+
+ var TextBox = Widget.extend({
+ init: function (settings) {
+ var self$$1 = this;
+ self$$1._super(settings);
+ self$$1.classes.add('textbox');
+ if (settings.multiline) {
+ self$$1.classes.add('multiline');
+ } else {
+ self$$1.on('keydown', function (e) {
+ var rootControl;
+ if (e.keyCode === 13) {
+ e.preventDefault();
+ self$$1.parents().reverse().each(function (ctrl) {
+ if (ctrl.toJSON) {
+ rootControl = ctrl;
+ return false;
+ }
+ });
+ self$$1.fire('submit', { data: rootControl.toJSON() });
+ }
+ });
+ self$$1.on('keyup', function (e) {
+ self$$1.state.set('value', e.target.value);
+ });
+ }
+ },
+ repaint: function () {
+ var self$$1 = this;
+ var style, rect, borderBox, borderW, borderH = 0, lastRepaintRect;
+ style = self$$1.getEl().style;
+ rect = self$$1._layoutRect;
+ lastRepaintRect = self$$1._lastRepaintRect || {};
+ var doc = document;
+ if (!self$$1.settings.multiline && doc.all && (!doc.documentMode || doc.documentMode <= 8)) {
+ style.lineHeight = rect.h - borderH + 'px';
+ }
+ borderBox = self$$1.borderBox;
+ borderW = borderBox.left + borderBox.right + 8;
+ borderH = borderBox.top + borderBox.bottom + (self$$1.settings.multiline ? 8 : 0);
+ if (rect.x !== lastRepaintRect.x) {
+ style.left = rect.x + 'px';
+ lastRepaintRect.x = rect.x;
+ }
+ if (rect.y !== lastRepaintRect.y) {
+ style.top = rect.y + 'px';
+ lastRepaintRect.y = rect.y;
+ }
+ if (rect.w !== lastRepaintRect.w) {
+ style.width = rect.w - borderW + 'px';
+ lastRepaintRect.w = rect.w;
+ }
+ if (rect.h !== lastRepaintRect.h) {
+ style.height = rect.h - borderH + 'px';
+ lastRepaintRect.h = rect.h;
+ }
+ self$$1._lastRepaintRect = lastRepaintRect;
+ self$$1.fire('repaint', {}, false);
+ return self$$1;
+ },
+ renderHtml: function () {
+ var self$$1 = this;
+ var settings = self$$1.settings;
+ var attrs, elm;
+ attrs = {
+ id: self$$1._id,
+ hidefocus: '1'
};
- });
+ global$2.each([
+ 'rows',
+ 'spellcheck',
+ 'maxLength',
+ 'size',
+ 'readonly',
+ 'min',
+ 'max',
+ 'step',
+ 'list',
+ 'pattern',
+ 'placeholder',
+ 'required',
+ 'multiple'
+ ], function (name$$1) {
+ attrs[name$$1] = settings[name$$1];
+ });
+ if (self$$1.disabled()) {
+ attrs.disabled = 'disabled';
+ }
+ if (settings.subtype) {
+ attrs.type = settings.subtype;
+ }
+ elm = funcs.create(settings.multiline ? 'textarea' : 'input', attrs);
+ elm.value = self$$1.state.get('value');
+ elm.className = self$$1.classes.toString();
+ return elm.outerHTML;
+ },
+ value: function (value) {
+ if (arguments.length) {
+ this.state.set('value', value);
+ return this;
+ }
+ if (this.state.get('rendered')) {
+ this.state.set('value', this.getEl().value);
+ }
+ return this.state.get('value');
+ },
+ postRender: function () {
+ var self$$1 = this;
+ self$$1.getEl().value = self$$1.state.get('value');
+ self$$1._super();
+ self$$1.$el.on('change', function (e) {
+ self$$1.state.set('value', e.target.value);
+ self$$1.fire('change', e);
+ });
+ },
+ bindStates: function () {
+ var self$$1 = this;
+ self$$1.state.on('change:value', function (e) {
+ if (self$$1.getEl().value !== e.value) {
+ self$$1.getEl().value = e.value;
+ }
+ });
+ self$$1.state.on('change:disabled', function (e) {
+ self$$1.getEl().disabled = e.value;
+ });
+ return self$$1._super();
+ },
+ remove: function () {
+ this.$el.off();
+ this._super();
+ }
+ });
- return function () {
+ var getApi = function () {
+ return {
+ Selector: Selector,
+ Collection: Collection$2,
+ ReflowQueue: $_p42hyuxjjgwefrk,
+ Control: Control$1,
+ Factory: global$4,
+ KeyboardNavigation: KeyboardNavigation,
+ Container: Container,
+ DragHelper: DragHelper,
+ Scrollable: $_3rxloyuzjjgwefrs,
+ Panel: Panel,
+ Movable: $_3fnh5iukjjgwefpt,
+ Resizable: $_3m7770v1jjgwefrz,
+ FloatPanel: FloatPanel,
+ Window: Window$$1,
+ MessageBox: MessageBox,
+ Tooltip: Tooltip,
+ Widget: Widget,
+ Progress: Progress,
+ Notification: Notification,
+ Layout: Layout,
+ AbsoluteLayout: AbsoluteLayout,
+ Button: Button,
+ ButtonGroup: ButtonGroup,
+ Checkbox: Checkbox,
+ ComboBox: ComboBox,
+ ColorBox: ColorBox,
+ PanelButton: PanelButton,
+ ColorButton: ColorButton,
+ ColorPicker: ColorPicker,
+ Path: Path,
+ ElementPath: ElementPath,
+ FormItem: FormItem,
+ Form: Form,
+ FieldSet: FieldSet,
+ FilePicker: FilePicker,
+ FitLayout: FitLayout,
+ FlexLayout: FlexLayout,
+ FlowLayout: FlowLayout,
+ FormatControls: $_5heykgwxjjgwefyx,
+ GridLayout: GridLayout,
+ Iframe: Iframe$1,
+ InfoBox: InfoBox,
+ Label: Label,
+ Toolbar: Toolbar$1,
+ MenuBar: MenuBar,
+ MenuButton: MenuButton,
+ MenuItem: MenuItem,
+ Throbber: Throbber,
+ Menu: Menu,
+ ListBox: ListBox,
+ Radio: Radio,
+ ResizeHandle: ResizeHandle,
+ SelectBox: SelectBox,
+ Slider: Slider,
+ Spacer: Spacer,
+ SplitButton: SplitButton,
+ StackLayout: StackLayout,
+ TabPanel: TabPanel,
+ TextBox: TextBox,
+ DropZone: DropZone,
+ BrowseButton: BrowseButton
};
+ };
+ var appendTo = function (target) {
+ if (target.ui) {
+ global$2.each(getApi(), function (ref, key) {
+ target.ui[key] = ref;
+ });
+ } else {
+ target.ui = getApi();
+ }
+ };
+ var registerToFactory = function () {
+ global$2.each(getApi(), function (ref, key) {
+ global$4.add(key, ref);
+ });
+ };
+ var Api = {
+ appendTo: appendTo,
+ registerToFactory: registerToFactory
+ };
+
+ Api.registerToFactory();
+ Api.appendTo(window.tinymce ? window.tinymce : {});
+ global.add('modern', function (editor) {
+ $_5heykgwxjjgwefyx.setup(editor);
+ return $_buaxbttqjjgwefn0.get(editor);
+ });
+ function Theme () {
}
-);
-dem('tinymce.themes.modern.Theme')();
+ return Theme;
+
+}());
})();
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("1",window),h("a",tinymce.util.Tools.resolve),g("2",["a"],function(a){return a("tinymce.AddOnManager")}),g("3",["a"],function(a){return a("tinymce.EditorManager")}),g("4",["a"],function(a){return a("tinymce.Env")}),g("5",["a"],function(a){return a("tinymce.ui.Api")}),g("b",["a"],function(a){return a("tinymce.dom.DOMUtils")}),g("c",["a"],function(a){return a("tinymce.ui.Factory")}),g("d",["a"],function(a){return a("tinymce.util.Tools")}),g("e",[],function(){var a=function(a,b){return function(){var c=a.find(b)[0];c&&c.focus(!0)}},b=function(b,c){b.shortcuts.add("Alt+F9","",a(c,"menubar")),b.shortcuts.add("Alt+F10,F10","",a(c,"toolbar")),b.shortcuts.add("Alt+F11","",a(c,"elementpath")),c.on("cancel",function(){b.focus()})};return{addKeys:b}}),g("f",["b"],function(a){var b=a.DOM,c=function(a,c,d){return function(){var e=a.getContentAreaContainer().querySelector("iframe").offsetWidth,f=Math.max(e-a.getDoc().documentElement.offsetWidth,0);b.setStyle(c,"right",f+"px"),d?b.setStyle(c,"top","-16px"):b.setStyle(c,"bottom","1px")}},d=function(a){return function(){b.hide(a)}},e=function(a,b,d){c(a,b,d)(),a.on("NodeChange ResizeEditor",c(a,b,d))},f=function(a,b,c){c.appendChild(b),e(a,b,!0)},g=function(a,b){a.getContainer().appendChild(b),e(a,b,!1)},h=function(a){a.on("SkinLoaded",function(){var c=b.create("div",{"class":"mce-branding-powered-by"}),e=a.getContainer().querySelector(".mce-statusbar");e?f(a,c,e):g(a,c),b.bind(c,"click",d(c))})},i=function(a){a.settings.branding!==!1&&h(a)};return{setup:i}}),g("n",["a"],function(a){return a("tinymce.util.Delay")}),g("o",["a"],function(a){return a("tinymce.geom.Rect")}),g("k",["d","c"],function(a,b){var c="undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",d=function(c,d,e){var f,g=[];if(d)return a.each(d.split(/[ ,]/),function(a){var d,h=function(){var b=c.selection;a.settings.stateSelector&&b.selectorChanged(a.settings.stateSelector,function(b){a.active(b)},!0),a.settings.disabledStateSelector&&b.selectorChanged(a.settings.disabledStateSelector,function(b){a.disabled(b)})};"|"==a?f=null:(f||(f={type:"buttongroup",items:[]},g.push(f)),c.buttons[a]&&(d=a,a=c.buttons[d],"function"==typeof a&&(a=a()),a.type=a.type||"button",a.size=e,a=b.create(a),f.items.push(a),c.initialized?h():c.on("init",h)))}),{type:"toolbar",layout:"flow",items:g}},e=function(b,e){var f=[],g=b.settings,h=function(a){if(a)return f.push(d(b,a,e)),!0};if(a.isArray(g.toolbar)){if(0===g.toolbar.length)return;a.each(g.toolbar,function(a,b){g["toolbar"+(b+1)]=a}),delete g.toolbar}for(var i=1;i<10&&h(g["toolbar"+i]);i++);if(f.length||g.toolbar===!1||h(g.toolbar||c),f.length)return{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:f}};return{createToolbar:d,createToolbars:e}}),g("g",["b","d","n","c","o","k"],function(a,b,c,d,e,f){var g=a.DOM,h=function(a){return{left:a.x,top:a.y,width:a.w,height:a.h,right:a.x+a.w,bottom:a.y+a.h}},i=function(a){b.each(a.contextToolbars,function(a){a.panel&&a.panel.hide()})},j=function(a,b){a.moveTo(b.left,b.top)},k=function(a,c,d){c=c?c.substr(0,2):"",b.each({t:"down",b:"up"},function(b,e){a.classes.toggle("arrow-"+b,d(e,c.substr(0,1)))}),b.each({l:"left",r:"right"},function(b,e){a.classes.toggle("arrow-"+b,d(e,c.substr(1,1)))})},l=function(a,b,c,d,e,f){return f=h({x:b,y:c,w:f.w,h:f.h}),a&&(f=a({elementRect:h(d),contentAreaRect:h(e),panelRect:f})),f},m=function(a){var h,m=a.settings,n=function(){return a.contextToolbars||[]},o=function(b){var c,d,e;return c=g.getPos(a.getContentAreaContainer()),d=a.dom.getRect(b),e=a.dom.getRoot(),"BODY"===e.nodeName&&(d.x-=e.ownerDocument.documentElement.scrollLeft||e.scrollLeft,d.y-=e.ownerDocument.documentElement.scrollTop||e.scrollTop),d.x+=c.x,d.y+=c.y,d},p=function(b,c){var d,f,h,n,p,q,r,s,t=m.inline_toolbar_position_handler;if(!a.removed){if(!b||!b.toolbar.panel)return void i(a);r=["bc-tc","tc-bc","tl-bl","bl-tl","tr-br","br-tr"],p=b.toolbar.panel,c&&p.show(),h=o(b.element),f=g.getRect(p.getEl()),n=g.getRect(a.getContentAreaContainer()||a.getBody()),s=25,"inline"!==g.getStyle(b.element,"display",!0)&&(h.w=b.element.clientWidth,h.h=b.element.clientHeight),a.inline||(n.w=a.getDoc().documentElement.offsetWidth),a.selection.controlSelection.isResizable(b.element)&&h.w<s&&(h=e.inflate(h,0,8)),d=e.findBestRelativePosition(f,h,n,r),h=e.clamp(h,n),d?(q=e.relativePosition(f,h,d),j(p,l(t,q.x,q.y,h,n,f))):(n.h+=f.h,h=e.intersect(n,h),h?(d=e.findBestRelativePosition(f,h,n,["bc-tc","bl-tl","br-tr"]),d?(q=e.relativePosition(f,h,d),j(p,l(t,q.x,q.y,h,n,f))):j(p,l(t,h.x,h.y,h,n,f))):p.hide()),k(p,d,function(a,b){return a===b})}},q=function(b){return function(){var d=function(){a.selection&&p(u(a.selection.getNode()),b)};c.requestAnimationFrame(d)}},r=function(){h||(h=a.selection.getScrollContainer()||a.getWin(),g.bind(h,"scroll",q(!0)),a.on("remove",function(){g.unbind(h,"scroll")}))},s=function(b){var c;return b.toolbar.panel?(b.toolbar.panel.show(),void p(b)):(r(),c=d.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:f.createToolbar(a,b.toolbar.items),oncancel:function(){a.focus()}}),b.toolbar.panel=c,c.renderTo(document.body).reflow(),void p(b))},t=function(){b.each(n(),function(a){a.panel&&a.panel.hide()})},u=function(b){var c,d,e,f=n();for(e=a.$(b).parents().add(b),c=e.length-1;c>=0;c--)for(d=f.length-1;d>=0;d--)if(f[d].predicate(e[c]))return{toolbar:f[d],element:e[c]};return null};a.on("click keyup setContent ObjectResized",function(b){("setcontent"!==b.type||b.selection)&&c.setEditorTimeout(a,function(){var b;b=u(a.selection.getNode()),b?(t(),s(b)):t()})}),a.on("blur hide contextmenu",t),a.on("ObjectResizeStart",function(){var b=u(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.hide()}),a.on("ResizeEditor ResizeWindow",q(!0)),a.on("nodeChange",q(!1)),a.on("remove",function(){b.each(n(),function(a){a.panel&&a.panel.remove()}),a.contextToolbars={}}),a.shortcuts.add("ctrl+shift+e > ctrl+shift+p","",function(){var b=u(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.items()[0].focus()})};return{addContextualToolbars:m}}),g("h",["d"],function(a){var b={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},c=function(a,b){var c;return"|"==b?{text:"|"}:c=a[b]},d=function(d,e,f){var g,h,i,j,k;if(k=a.makeMap((e.removed_menuitems||"").split(/[ ,]/)),e.menu?(h=e.menu[f],j=!0):h=b[f],h){g={text:h.title},i=[],a.each((h.items||"").split(/[ ,]/),function(a){var b=c(d,a);b&&!k[a]&&i.push(c(d,a))}),j||a.each(d,function(a){a.context==f&&("before"==a.separator&&i.push({text:"|"}),a.prependToContext?i.unshift(a):i.push(a),"after"==a.separator&&i.push({text:"|"}))});for(var l=0;l<i.length;l++)"|"==i[l].text&&(0!==l&&l!=i.length-1||i.splice(l,1));if(g.menu=i,!g.menu.length)return null}return g},e=function(a){var c,e=[],f=a.settings,g=[];if(f.menu)for(c in f.menu)g.push(c);else for(c in b)g.push(c);for(var h="string"==typeof f.menubar?f.menubar.split(/[ ,]/):g,i=0;i<h.length;i++){var j=h[i];j=d(a.menuItems,a.settings,j),j&&e.push(j)}return e};return{createMenuButtons:e}}),g("9",["b"],function(a){var b=a.DOM,c=function(a){return{width:a.clientWidth,height:a.clientHeight}},d=function(a,d,e){var f,g,h,i,j=a.settings;f=a.getContainer(),g=a.getContentAreaContainer().firstChild,h=c(f),i=c(g),null!==d&&(d=Math.max(j.min_width||100,d),d=Math.min(j.max_width||65535,d),b.setStyle(f,"width",d+(h.width-i.width)),b.setStyle(g,"width",d)),e=Math.max(j.min_height||100,e),e=Math.min(j.max_height||65535,e),b.setStyle(g,"height",e),a.fire("ResizeEditor")},e=function(a,b,c){var e=a.getContentAreaContainer();d(a,e.clientWidth+b,e.clientHeight+c)};return{resizeTo:d,resizeBy:e}}),g("i",["d","c","4"],function(a,b,c){var d=function(a){return{element:function(){return a}}},e=function(a,b,c){var e=a.settings[c];e&&e(d(b.getEl("body")))},f=function(b,c,d){a.each(d,function(a){var d=c.items().filter("#"+a.name)[0];d&&d.visible()&&a.name!==b&&(e(a,d,"onhide"),d.visible(!1))})},g=function(a){a.items().each(function(a){a.active(!1)})},h=function(b,c){return a.grep(b,function(a){return a.name===c})[0]},i=function(a,c,d){return function(i){var j=i.control,k=j.parents().filter("panel")[0],l=k.find("#"+c)[0],m=h(d,c);f(c,k,d),g(j.parent()),l&&l.visible()?(e(m,l,"onhide"),l.hide(),j.active(!1)):(l?(l.show(),e(m,l,"onshow")):(l=b.create({type:"container",name:c,layout:"stack",classes:"sidebar-panel",html:""}),k.prepend(l),e(m,l,"onrender"),e(m,l,"onshow")),j.active(!0)),a.fire("ResizeEditor")}},j=function(){return!c.ie||c.ie>=11},k=function(a){return!(!j()||!a.sidebars)&&a.sidebars.length>0},l=function(b){var c=a.map(b.sidebars,function(a){var c=a.settings;return{type:"button",icon:c.icon,image:c.image,tooltip:c.tooltip,onclick:i(b,a.name,b.sidebars)}});return{type:"panel",name:"sidebar",layout:"stack",classes:"sidebar",items:[{type:"toolbar",layout:"stack",classes:"sidebar-toolbar",items:c}]}};return{hasSidebar:k,createSidebar:l}}),g("j",[],function(){var a=function(a){var b=function(){a._skinLoaded=!0,a.fire("SkinLoaded")};return function(){a.initialized?b():a.on("init",b)}};return{fireSkinLoaded:a}}),g("6",["b","c","d","e","f","g","h","9","i","j","k"],function(a,b,c,d,e,f,g,h,i,j,k){var l=a.DOM,m=function(a){return function(b){a.find("*").disabled("readonly"===b.mode)}},n=function(a){return{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",border:a,html:""}},o=function(a){return{type:"panel",layout:"stack",classes:"edit-aria-container",border:"1 0 0 0",items:[n("0"),i.createSidebar(a)]}},p=function(a,c,p){var q,r,s,t=a.settings;return p.skinUiCss&&l.styleSheetLoader.load(p.skinUiCss,j.fireSkinLoaded(a)),q=c.panel=b.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[t.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:g.createMenuButtons(a)},k.createToolbars(a,t.toolbar_items_size),i.hasSidebar(a)?o(a):n("1 0 0 0")]}),t.resize!==!1&&(r={type:"resizehandle",direction:t.resize,onResizeStart:function(){var b=a.getContentAreaContainer().firstChild;s={width:b.clientWidth,height:b.clientHeight}},onResize:function(b){"both"===t.resize?h.resizeTo(a,s.width+b.deltaX,s.height+b.deltaY):h.resizeTo(a,null,s.height+b.deltaY)}}),t.statusbar!==!1&&q.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath",editor:a},r]}),a.fire("BeforeRenderUI"),a.on("SwitchMode",m(q)),q.renderBefore(p.targetNode).reflow(),t.readonly&&a.setMode("readonly"),p.width&&l.setStyle(q.getEl(),"width",p.width),a.on("remove",function(){q.remove(),q=null}),d.addKeys(a,q),f.addContextualToolbars(a),e.setup(a),{iframeContainer:q.find("#iframe")[0].getEl(),editorContainer:q.getEl()}};return{render:p}}),g("l",["a"],function(a){return a("tinymce.ui.FloatPanel")}),g("7",["d","c","b","l","k","h","g","e","j"],function(a,b,c,d,e,f,g,h,i){var j=function(a,j,k){var l,m,n=a.settings,o=c.DOM;n.fixed_toolbar_container&&(m=o.select(n.fixed_toolbar_container)[0]);var p=function(){if(l&&l.moveRel&&l.visible()&&!l._fixed){var b=a.selection.getScrollContainer(),c=a.getBody(),d=0,e=0;if(b){var f=o.getPos(c),g=o.getPos(b);d=Math.max(0,g.x-f.x),e=Math.max(0,g.y-f.y)}l.fixed(!1).moveRel(c,a.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(d,e)}},q=function(){l&&(l.show(),p(),o.addClass(a.getBody(),"mce-edit-focus"))},r=function(){l&&(l.hide(),d.hideAll(),o.removeClass(a.getBody(),"mce-edit-focus"))},s=function(){return l?void(l.visible()||q()):(l=j.panel=b.create({type:m?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!m,border:1,items:[n.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:f.createMenuButtons(a)},e.createToolbars(a,n.toolbar_items_size)]}),a.fire("BeforeRenderUI"),l.renderTo(m||document.body).reflow(),h.addKeys(a,l),q(),g.addContextualToolbars(a),a.on("nodeChange",p),a.on("activate",q),a.on("deactivate",r),void a.nodeChanged())};return n.content_editable=!0,a.on("focus",function(){k.skinUiCss?o.styleSheetLoader.load(k.skinUiCss,s,s):s()}),a.on("blur hide",r),a.on("remove",function(){l&&(l.remove(),l=null)}),k.skinUiCss&&o.styleSheetLoader.load(k.skinUiCss,i.fireSkinLoaded(a)),{}};return{render:j}}),g("m",["a"],function(a){return a("tinymce.ui.Throbber")}),g("8",["m"],function(a){var b=function(b,c){var d;b.on("ProgressState",function(b){d=d||new a(c.panel.getEl("body")),b.state?d.show(b.time):d.hide()})};return{setup:b}}),g("0",["1","2","3","4","5","6","7","8","9"],function(a,b,c,d,e,f,g,h,i){var j=b.ThemeManager;e.appendTo(a.tinymce?a.tinymce:{});var k=function(a,b,d){var e=a.settings,i=e.skin!==!1&&(e.skin||"lightgray");if(i){var j=e.skin_url;j=j?a.documentBaseURI.toAbsolute(j):c.baseURL+"/skins/"+i,d.skinUiCss=j+"/skin.min.css",a.contentCSS.push(j+"/content"+(a.inline?".inline":"")+".min.css")}return h.setup(a,b),e.inline?g.render(a,b,d):f.render(a,b,d)};return j.add("modern",function(a){return{renderUI:function(b){return k(a,this,b)},resizeTo:function(b,c){return i.resizeTo(a,b,c)},resizeBy:function(b,c){return i.resizeBy(a,b,c)}}}),function(){}}),d("0")()}();
\ No newline at end of file
+!function(){"use strict";var e,t,n,i,r,o=tinymce.util.Tools.resolve("tinymce.ThemeManager"),h=tinymce.util.Tools.resolve("tinymce.EditorManager"),w=tinymce.util.Tools.resolve("tinymce.util.Tools"),d=function(e){return!1!==c(e)},c=function(e){return e.getParam("menubar")},f=function(e){return e.getParam("toolbar_items_size")},m=function(e){return e.getParam("menu")},g=function(e){return!1===e.settings.skin},p=function(e){var t=e.getParam("resize","vertical");return!1===t?"none":"both"===t?"both":"vertical"},v=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),b=tinymce.util.Tools.resolve("tinymce.ui.Factory"),y=tinymce.util.Tools.resolve("tinymce.util.I18n"),s=function(e){return e.fire("SkinLoaded")},x=function(e){return e.fire("ResizeEditor")},_=function(e){return e.fire("BeforeRenderUI")},a=function(t,n){return function(){var e=t.find(n)[0];e&&e.focus(!0)}},C=function(e,t){e.shortcuts.add("Alt+F9","",a(t,"menubar")),e.shortcuts.add("Alt+F10,F10","",a(t,"toolbar")),e.shortcuts.add("Alt+F11","",a(t,"elementpath")),t.on("cancel",function(){e.focus()})},R=tinymce.util.Tools.resolve("tinymce.geom.Rect"),u=tinymce.util.Tools.resolve("tinymce.util.Delay"),E=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t]},k=function(e){return function(){return e}},l=k(!1),T=k(!0),H=l,S=T,M=function(){return N},N=(i={fold:function(e,t){return e()},is:H,isSome:H,isNone:S,getOr:n=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:n,orThunk:t,map:M,ap:M,each:function(){},bind:M,flatten:M,exists:H,forall:S,filter:M,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:k("none()")},Object.freeze&&Object.freeze(i),i),P=function(n){var e=function(){return n},t=function(){return r},i=function(e){return e(n)},r={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:S,isNone:H,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return P(e(n))},ap:function(e){return e.fold(M,function(e){return P(e(n))})},each:function(e){e(n)},bind:i,flatten:e,exists:i,forall:i,filter:function(e){return e(n)?r:N},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(H,function(e){return t(n,e)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return r},D={some:P,none:M,from:function(e){return null===e||e===undefined?N:P(e)}},W=function(e){return e?e.getRoot().uiContainer:null},O={getUiContainerDelta:function(e){var t=W(e);if(t&&"static"!==v.DOM.getStyle(t,"position",!0)){var n=v.DOM.getPos(t),i=t.scrollLeft-n.x,r=t.scrollTop-n.y;return D.some({x:i,y:r})}return D.none()},setUiContainer:function(e,t){var n=v.DOM.select(e.settings.ui_container)[0];t.getRoot().uiContainer=n},getUiContainer:W,inheritUiContainer:function(e,t){return t.uiContainer=W(e)}},A=function(i,e,r){var o,s=[];if(e)return w.each(e.split(/[ ,]/),function(t){var e,n=function(){var e=i.selection;t.settings.stateSelector&&e.selectorChanged(t.settings.stateSelector,function(e){t.active(e)},!0),t.settings.disabledStateSelector&&e.selectorChanged(t.settings.disabledStateSelector,function(e){t.disabled(e)})};"|"===t?o=null:(o||(o={type:"buttongroup",items:[]},s.push(o)),i.buttons[t]&&(e=t,"function"==typeof(t=i.buttons[e])&&(t=t()),t.type=t.type||"button",t.size=r,t=b.create(t),o.items.push(t),i.initialized?n():i.on("init",n)))}),{type:"toolbar",layout:"flow",items:s}},B=A,L=function(n,i){var e,t,r=[];if(w.each(!1===(t=(e=n).getParam("toolbar"))?[]:w.isArray(t)?w.grep(t,function(e){return 0<e.length}):function(e,t){for(var n=[],i=1;i<10;i++){var r=e["toolbar"+i];if(!r)break;n.push(r)}var o=e.toolbar?[e.toolbar]:[t];return 0<n.length?n:o}(e.settings,"undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"),function(e){var t;(t=e)&&r.push(A(n,t,i))}),r.length)return{type:"panel",layout:"stack",classes:"toolbar-grp",ariaRoot:!0,ariaRemember:!0,items:r}},I=v.DOM,z=function(e){return{left:e.x,top:e.y,width:e.w,height:e.h,right:e.x+e.w,bottom:e.y+e.h}},F=function(e,t){e.moveTo(t.left,t.top)},U=function(e,t,n,i,r,o){return o=z({x:t,y:n,w:o.w,h:o.h}),e&&(o=e({elementRect:z(i),contentAreaRect:z(r),panelRect:o})),o},V=function(x){var i,o=function(){return x.contextToolbars||[]},n=function(e,t){var n,i,r,o,s,a,l,u=x.getParam("inline_toolbar_position_handler");if(!x.removed){if(!e||!e.toolbar.panel)return c=x,void w.each(c.contextToolbars,function(e){e.panel&&e.panel.hide()});var c,d,f,h,m;l=["bc-tc","tc-bc","tl-bl","bl-tl","tr-br","br-tr"],s=e.toolbar.panel,t&&s.show(),d=e.element,f=I.getPos(x.getContentAreaContainer()),h=x.dom.getRect(d),"BODY"===(m=x.dom.getRoot()).nodeName&&(h.x-=m.ownerDocument.documentElement.scrollLeft||m.scrollLeft,h.y-=m.ownerDocument.documentElement.scrollTop||m.scrollTop),h.x+=f.x,h.y+=f.y,r=h,i=I.getRect(s.getEl()),o=I.getRect(x.getContentAreaContainer()||x.getBody());var g,p,v,b=O.getUiContainerDelta(s).getOr({x:0,y:0});if(r.x+=b.x,r.y+=b.y,i.x+=b.x,i.y+=b.y,o.x+=b.x,o.y+=b.y,"inline"!==I.getStyle(e.element,"display",!0)){var y=e.element.getBoundingClientRect();r.w=y.width,r.h=y.height}x.inline||(o.w=x.getDoc().documentElement.offsetWidth),x.selection.controlSelection.isResizable(e.element)&&r.w<25&&(r=R.inflate(r,0,8)),n=R.findBestRelativePosition(i,r,o,l),r=R.clamp(r,o),n?(a=R.relativePosition(i,r,n),F(s,U(u,a.x,a.y,r,o,i))):(o.h+=i.h,(r=R.intersect(o,r))?(n=R.findBestRelativePosition(i,r,o,["bc-tc","bl-tl","br-tr"]))?(a=R.relativePosition(i,r,n),F(s,U(u,a.x,a.y,r,o,i))):F(s,U(u,r.x,r.y,r,o,i)):s.hide()),g=s,v=function(e,t){return e===t},p=(p=n)?p.substr(0,2):"",w.each({t:"down",b:"up"},function(e,t){g.classes.toggle("arrow-"+e,v(t,p.substr(0,1)))}),w.each({l:"left",r:"right"},function(e,t){g.classes.toggle("arrow-"+e,v(t,p.substr(1,1)))})}},r=function(e){return function(){u.requestAnimationFrame(function(){x.selection&&n(a(x.selection.getNode()),e)})}},t=function(e){var t;if(e.toolbar.panel)return e.toolbar.panel.show(),void n(e);t=b.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:B(x,e.toolbar.items),oncancel:function(){x.focus()}}),O.setUiContainer(x,t),function(e){if(!i){var t=r(!0),n=O.getUiContainer(e);i=x.selection.getScrollContainer()||x.getWin(),I.bind(i,"scroll",t),I.bind(n,"scroll",t),x.on("remove",function(){I.unbind(i,"scroll",t),I.unbind(n,"scroll",t)})}}(t),(e.toolbar.panel=t).renderTo().reflow(),n(e)},s=function(){w.each(o(),function(e){e.panel&&e.panel.hide()})},a=function(e){var t,n,i,r=o();for(t=(i=x.$(e).parents().add(e)).length-1;0<=t;t--)for(n=r.length-1;0<=n;n--)if(r[n].predicate(i[t]))return{toolbar:r[n],element:i[t]};return null};x.on("click keyup setContent ObjectResized",function(e){("setcontent"!==e.type||e.selection)&&u.setEditorTimeout(x,function(){var e;(e=a(x.selection.getNode()))?(s(),t(e)):s()})}),x.on("blur hide contextmenu",s),x.on("ObjectResizeStart",function(){var e=a(x.selection.getNode());e&&e.toolbar.panel&&e.toolbar.panel.hide()}),x.on("ResizeEditor ResizeWindow",r(!0)),x.on("nodeChange",r(!1)),x.on("remove",function(){w.each(o(),function(e){e.panel&&e.panel.remove()}),x.contextToolbars={}}),x.shortcuts.add("ctrl+shift+e > ctrl+shift+p","",function(){var e=a(x.selection.getNode());e&&e.toolbar.panel&&e.toolbar.panel.items()[0].focus()})},Y=function(t){return function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===t}},$=Y("function"),X=Y("number"),q=(r=Array.prototype.indexOf)===undefined?function(e,t){return ee(e,t)}:function(e,t){return r.call(e,t)},j=function(e,t){return Q(e,t).isSome()},J=function(e,t){for(var n=e.length,i=new Array(n),r=0;r<n;r++){var o=e[r];i[r]=t(o,r,e)}return i},G=function(e,t){for(var n=0,i=e.length;n<i;n++)t(e[n],n,e)},K=function(e,t){for(var n=[],i=0,r=e.length;i<r;i++){var o=e[i];t(o,i,e)&&n.push(o)}return n},Z=function(e,t){for(var n=0,i=e.length;n<i;n++){var r=e[n];if(t(r,n,e))return D.some(r)}return D.none()},Q=function(e,t){for(var n=0,i=e.length;n<i;n++)if(t(e[n],n,e))return D.some(n);return D.none()},ee=function(e,t){for(var n=0,i=e.length;n<i;++n)if(e[n]===t)return n;return-1},te=Array.prototype.push,ne=(Array.prototype.slice,$(Array.from)&&Array.from,{file:{title:"File",items:"newdocument restoredraft | preview | print"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},view:{title:"View",items:"code | visualaid visualchars visualblocks | spellchecker | preview fullscreen"},insert:{title:"Insert",items:"image link media template codesample inserttable | charmap hr | pagebreak nonbreaking anchor toc | insertdatetime"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript codeformat | blockformats align | removeformat"},tools:{title:"Tools",items:"spellchecker spellcheckerlanguage | a11ycheck code"},table:{title:"Table"},help:{title:"Help"}}),ie=function(e,t){return"|"===e?{name:"|",item:{text:"|"}}:t?{name:e,item:t}:null},re=function(e){return e&&"|"===e.item.text},oe=function(n,e,t,i){var r,o,s,a,l,u,c;return e?(o=e[i],a=!0):o=ne[i],o&&(r={text:o.title},s=[],w.each((o.items||"").split(/[ ,]/),function(e){var t=ie(e,n[e]);t&&s.push(t)}),a||w.each(n,function(e,t){var n;e.context!==i||(n=t,Q(s,function(e){return e.name===n}).isSome())||("before"===e.separator&&s.push({name:"|",item:{text:"|"}}),e.prependToContext?s.unshift(ie(t,e)):s.push(ie(t,e)),"after"===e.separator&&s.push({name:"|",item:{text:"|"}}))}),r.menu=J((l=t,u=K(s,function(e){return!1===l.hasOwnProperty(e.name)}),c=K(u,function(e,t,n){return!re(e)||!re(n[t-1])}),K(c,function(e,t,n){return!re(e)||0<t&&t<n.length-1})),function(e){return e.item}),!r.menu.length)?null:r},se=function(e){for(var t,n=[],i=function(e){var t,n=[],i=m(e);if(i)for(t in i)n.push(t);else for(t in ne)n.push(t);return n}(e),r=w.makeMap((t=e,t.getParam("removed_menuitems","")).split(/[ ,]/)),o=c(e),s="string"==typeof o?o.split(/[ ,]/):i,a=0;a<s.length;a++){var l=s[a],u=oe(e.menuItems,m(e),r,l);u&&n.push(u)}return n},ae=v.DOM,le=function(e){return{width:e.clientWidth,height:e.clientHeight}},ue=function(e,t,n){var i,r,o,s;i=e.getContainer(),r=e.getContentAreaContainer().firstChild,o=le(i),s=le(r),null!==t&&(t=Math.max(e.getParam("min_width",100,"number"),t),t=Math.min(e.getParam("max_width",65535,"number"),t),ae.setStyle(i,"width",t+(o.width-s.width)),ae.setStyle(r,"width",t)),n=Math.max(e.getParam("min_height",100,"number"),n),n=Math.min(e.getParam("max_height",65535,"number"),n),ae.setStyle(r,"height",n),x(e)},ce=ue,de=function(e,t,n){var i=e.getContentAreaContainer();ue(e,i.clientWidth+t,i.clientHeight+n)},fe=tinymce.util.Tools.resolve("tinymce.Env"),he=function(e,t,n){var i,r=e.settings[n];r&&r((i=t.getEl("body"),{element:function(){return i}}))},me=function(c,d,f){return function(e){var t,n,i,r,o,s=e.control,a=s.parents().filter("panel")[0],l=a.find("#"+d)[0],u=(t=f,n=d,w.grep(t,function(e){return e.name===n})[0]);i=d,r=a,o=f,w.each(o,function(e){var t=r.items().filter("#"+e.name)[0];t&&t.visible()&&e.name!==i&&(he(e,t,"onhide"),t.visible(!1))}),s.parent().items().each(function(e){e.active(!1)}),l&&l.visible()?(he(u,l,"onhide"),l.hide(),s.active(!1)):(l?l.show():(l=b.create({type:"container",name:d,layout:"stack",classes:"sidebar-panel",html:""}),a.prepend(l),he(u,l,"onrender")),he(u,l,"onshow"),s.active(!0)),x(c)}},ge=function(e){return!(fe.ie&&!(11<=fe.ie)||!e.sidebars)&&0<e.sidebars.length},pe=function(n){return{type:"panel",name:"sidebar",layout:"stack",classes:"sidebar",items:[{type:"toolbar",layout:"stack",classes:"sidebar-toolbar",items:w.map(n.sidebars,function(e){var t=e.settings;return{type:"button",icon:t.icon,image:t.image,tooltip:t.tooltip,onclick:me(n,e.name,n.sidebars)}})}]}},ve=function(e){var t=function(){e._skinLoaded=!0,s(e)};return function(){e.initialized?t():e.on("init",t)}},be=v.DOM,ye=function(e){return{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",border:e,html:""}},xe=function(t,e,n){var i,r,o,s,a;if(!1===g(t)&&n.skinUiCss?be.styleSheetLoader.load(n.skinUiCss,ve(t)):ve(t)(),i=e.panel=b.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[{type:"container",classes:"top-part",items:[!1===d(t)?null:{type:"menubar",border:"0 0 1 0",items:se(t)},L(t,f(t))]},ge(t)?(s=t,{type:"panel",layout:"stack",classes:"edit-aria-container",border:"1 0 0 0",items:[ye("0"),pe(s)]}):ye("1 0 0 0")]}),O.setUiContainer(t,i),"none"!==p(t)&&(r={type:"resizehandle",direction:p(t),onResizeStart:function(){var e=t.getContentAreaContainer().firstChild;o={width:e.clientWidth,height:e.clientHeight}},onResize:function(e){"both"===p(t)?ce(t,o.width+e.deltaX,o.height+e.deltaY):ce(t,null,o.height+e.deltaY)}}),t.getParam("statusbar",!0,"boolean")){var l=y.translate(["Powered by {0}",'<a href="https://www.tinymce.com/?utm_campaign=editor_referral&utm_medium=poweredby&utm_source=tinymce" rel="noopener" target="_blank" role="presentation" tabindex="-1">tinymce</a>']),u=t.getParam("branding",!0,"boolean")?{type:"label",classes:"branding",html:" "+l}:null;i.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath",editor:t},r,u]})}return _(t),t.on("SwitchMode",(a=i,function(e){a.find("*").disabled("readonly"===e.mode)})),i.renderBefore(n.targetNode).reflow(),t.getParam("readonly",!1,"boolean")&&t.setMode("readonly"),n.width&&be.setStyle(i.getEl(),"width",n.width),t.on("remove",function(){i.remove(),i=null}),C(t,i),V(t),{iframeContainer:i.find("#iframe")[0].getEl(),editorContainer:i.getEl()}},we=tinymce.util.Tools.resolve("tinymce.dom.DomQuery"),_e=0,Ce={id:function(){return"mceu_"+_e++},create:function(e,t,n){var i=document.createElement(e);return v.DOM.setAttribs(i,t),"string"==typeof n?i.innerHTML=n:w.each(n,function(e){e.nodeType&&i.appendChild(e)}),i},createFragment:function(e){return v.DOM.createFragment(e)},getWindowSize:function(){return v.DOM.getViewPort()},getSize:function(e){var t,n;if(e.getBoundingClientRect){var i=e.getBoundingClientRect();t=Math.max(i.width||i.right-i.left,e.offsetWidth),n=Math.max(i.height||i.bottom-i.bottom,e.offsetHeight)}else t=e.offsetWidth,n=e.offsetHeight;return{width:t,height:n}},getPos:function(e,t){return v.DOM.getPos(e,t||Ce.getContainer())},getContainer:function(){return fe.container?fe.container:document.body},getViewPort:function(e){return v.DOM.getViewPort(e)},get:function(e){return document.getElementById(e)},addClass:function(e,t){return v.DOM.addClass(e,t)},removeClass:function(e,t){return v.DOM.removeClass(e,t)},hasClass:function(e,t){return v.DOM.hasClass(e,t)},toggleClass:function(e,t,n){return v.DOM.toggleClass(e,t,n)},css:function(e,t,n){return v.DOM.setStyle(e,t,n)},getRuntimeStyle:function(e,t){return v.DOM.getStyle(e,t,!0)},on:function(e,t,n,i){return v.DOM.bind(e,t,n,i)},off:function(e,t,n){return v.DOM.unbind(e,t,n)},fire:function(e,t,n){return v.DOM.fire(e,t,n)},innerHtml:function(e,t){v.DOM.setHTML(e,t)}},Re=function(e){return"static"===Ce.getRuntimeStyle(e,"position")},Ee=function(e){return e.state.get("fixed")};function ke(e,t,n){var i,r,o,s,a,l,u,c,d,f;return d=Te(),o=(r=Ce.getPos(t,O.getUiContainer(e))).x,s=r.y,Ee(e)&&Re(document.body)&&(o-=d.x,s-=d.y),i=e.getEl(),a=(f=Ce.getSize(i)).width,l=f.height,u=(f=Ce.getSize(t)).width,c=f.height,"b"===(n=(n||"").split(""))[0]&&(s+=c),"r"===n[1]&&(o+=u),"c"===n[0]&&(s+=Math.round(c/2)),"c"===n[1]&&(o+=Math.round(u/2)),"b"===n[3]&&(s-=l),"r"===n[4]&&(o-=a),"c"===n[3]&&(s-=Math.round(l/2)),"c"===n[4]&&(o-=Math.round(a/2)),{x:o,y:s,w:a,h:l}}var Te=function(){var e=window,t=Math.max(e.pageXOffset,document.body.scrollLeft,document.documentElement.scrollLeft),n=Math.max(e.pageYOffset,document.body.scrollTop,document.documentElement.scrollTop);return{x:t,y:n,w:t+(e.innerWidth||document.documentElement.clientWidth),h:n+(e.innerHeight||document.documentElement.clientHeight)}},He=function(e){var t,n=O.getUiContainer(e);return n&&!Ee(e)?{x:0,y:0,w:(t=n).scrollWidth-1,h:t.scrollHeight-1}:Te()},Se={testMoveRel:function(e,t){for(var n=He(this),i=0;i<t.length;i++){var r=ke(this,e,t[i]);if(Ee(this)){if(0<r.x&&r.x+r.w<n.w&&0<r.y&&r.y+r.h<n.h)return t[i]}else if(r.x>n.x&&r.x+r.w<n.w&&r.y>n.y&&r.y+r.h<n.h)return t[i]}return t[0]},moveRel:function(e,t){"string"!=typeof t&&(t=this.testMoveRel(e,t));var n=ke(this,e,t);return this.moveTo(n.x,n.y)},moveBy:function(e,t){var n=this.layoutRect();return this.moveTo(n.x+e,n.y+t),this},moveTo:function(e,t){var n=this;function i(e,t,n){return e<0?0:t<e+n&&(e=t-n)<0?0:e}if(n.settings.constrainToViewport){var r=He(this),o=n.layoutRect();e=i(e,r.w,o.w),t=i(t,r.h,o.h)}var s=O.getUiContainer(n);return s&&Re(s)&&!Ee(n)&&(e-=s.scrollLeft,t-=s.scrollTop),s&&(e+=1,t+=1),n.state.get("rendered")?n.layoutRect({x:e,y:t}).repaint():(n.settings.x=e,n.settings.y=t),n.fire("move",{x:e,y:t}),n}},Me=tinymce.util.Tools.resolve("tinymce.util.Class"),Ne=tinymce.util.Tools.resolve("tinymce.util.EventDispatcher"),Pe=function(e){var t;if(e)return"number"==typeof e?{top:e=e||0,left:e,bottom:e,right:e}:(1===(t=(e=e.split(" ")).length)?e[1]=e[2]=e[3]=e[0]:2===t?(e[2]=e[0],e[3]=e[1]):3===t&&(e[3]=e[1]),{top:parseInt(e[0],10)||0,right:parseInt(e[1],10)||0,bottom:parseInt(e[2],10)||0,left:parseInt(e[3],10)||0})},De=function(i,e){function t(e){var t=parseFloat(function(e){var t=i.ownerDocument.defaultView;if(t){var n=t.getComputedStyle(i,null);return n?(e=e.replace(/[A-Z]/g,function(e){return"-"+e}),n.getPropertyValue(e)):null}return i.currentStyle[e]}(e));return isNaN(t)?0:t}return{top:t(e+"TopWidth"),right:t(e+"RightWidth"),bottom:t(e+"BottomWidth"),left:t(e+"LeftWidth")}};function We(){}function Oe(e){this.cls=[],this.cls._map={},this.onchange=e||We,this.prefix=""}w.extend(Oe.prototype,{add:function(e){return e&&!this.contains(e)&&(this.cls._map[e]=!0,this.cls.push(e),this._change()),this},remove:function(e){if(this.contains(e)){var t=void 0;for(t=0;t<this.cls.length&&this.cls[t]!==e;t++);this.cls.splice(t,1),delete this.cls._map[e],this._change()}return this},toggle:function(e,t){var n=this.contains(e);return n!==t&&(n?this.remove(e):this.add(e),this._change()),this},contains:function(e){return!!this.cls._map[e]},_change:function(){delete this.clsValue,this.onchange.call(this)}}),Oe.prototype.toString=function(){var e;if(this.clsValue)return this.clsValue;e="";for(var t=0;t<this.cls.length;t++)0<t&&(e+=" "),e+=this.prefix+this.cls[t];return e};var Ae,Be,Le,Ie=/^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,ze=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,Fe=/^\s*|\s*$/g,Ue=Me.extend({init:function(e){var o=this.match;function s(e,t,n){var i;function r(e){e&&t.push(e)}return r(function(t){if(t)return t=t.toLowerCase(),function(e){return"*"===t||e.type===t}}((i=Ie.exec(e.replace(Fe,"")))[1])),r(function(t){if(t)return function(e){return e._name===t}}(i[2])),r(function(n){if(n)return n=n.split("."),function(e){for(var t=n.length;t--;)if(!e.classes.contains(n[t]))return!1;return!0}}(i[3])),r(function(n,i,r){if(n)return function(e){var t=e[n]?e[n]():"";return i?"="===i?t===r:"*="===i?0<=t.indexOf(r):"~="===i?0<=(" "+t+" ").indexOf(" "+r+" "):"!="===i?t!==r:"^="===i?0===t.indexOf(r):"$="===i&&t.substr(t.length-r.length)===r:!!r}}(i[4],i[5],i[6])),r(function(i){var t;if(i)return(i=/(?:not\((.+)\))|(.+)/i.exec(i))[1]?(t=a(i[1],[]),function(e){return!o(e,t)}):(i=i[2],function(e,t,n){return"first"===i?0===t:"last"===i?t===n-1:"even"===i?t%2==0:"odd"===i?t%2==1:!!e[i]&&e[i]()})}(i[7])),t.pseudo=!!i[7],t.direct=n,t}function a(e,t){var n,i,r,o=[];do{if(ze.exec(""),(i=ze.exec(e))&&(e=i[3],o.push(i[1]),i[2])){n=i[3];break}}while(i);for(n&&a(n,t),e=[],r=0;r<o.length;r++)">"!==o[r]&&e.push(s(o[r],[],">"===o[r-1]));return t.push(e),t}this._selectors=a(e,[])},match:function(e,t){var n,i,r,o,s,a,l,u,c,d,f,h,m;for(n=0,i=(t=t||this._selectors).length;n<i;n++){for(m=e,h=0,r=(o=(s=t[n]).length)-1;0<=r;r--)for(u=s[r];m;){if(u.pseudo)for(c=d=(f=m.parent().items()).length;c--&&f[c]!==m;);for(a=0,l=u.length;a<l;a++)if(!u[a](m,c,d)){a=l+1;break}if(a===l){h++;break}if(r===o-1)break;m=m.parent()}if(h===o)return!0}return!1},find:function(e){var t,n,u=[],i=this._selectors;function c(e,t,n){var i,r,o,s,a,l=t[n];for(i=0,r=e.length;i<r;i++){for(a=e[i],o=0,s=l.length;o<s;o++)if(!l[o](a,i,r)){o=s+1;break}if(o===s)n===t.length-1?u.push(a):a.items&&c(a.items(),t,n+1);else if(l.direct)return;a.items&&c(a.items(),t,n)}}if(e.items){for(t=0,n=i.length;t<n;t++)c(e.items(),i[t],0);1<n&&(u=function(e){for(var t,n=[],i=e.length;i--;)(t=e[i]).__checked||(n.push(t),t.__checked=1);for(i=n.length;i--;)delete n[i].__checked;return n}(u))}return Ae||(Ae=Ue.Collection),new Ae(u)}}),Ve=Array.prototype.push,Ye=Array.prototype.slice;Le={length:0,init:function(e){e&&this.add(e)},add:function(e){return w.isArray(e)?Ve.apply(this,e):e instanceof Be?this.add(e.toArray()):Ve.call(this,e),this},set:function(e){var t,n=this,i=n.length;for(n.length=0,n.add(e),t=n.length;t<i;t++)delete n[t];return n},filter:function(t){var e,n,i,r,o=[];for("string"==typeof t?(t=new Ue(t),r=function(e){return t.match(e)}):r=t,e=0,n=this.length;e<n;e++)r(i=this[e])&&o.push(i);return new Be(o)},slice:function(){return new Be(Ye.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},each:function(e){return w.each(this,e),this},toArray:function(){return w.toArray(this)},indexOf:function(e){for(var t=this.length;t--&&this[t]!==e;);return t},reverse:function(){return new Be(w.toArray(this).reverse())},hasClass:function(e){return!!this[0]&&this[0].classes.contains(e)},prop:function(t,n){var e;return n!==undefined?(this.each(function(e){e[t]&&e[t](n)}),this):(e=this[0])&&e[t]?e[t]():void 0},exec:function(t){var n=w.toArray(arguments).slice(1);return this.each(function(e){e[t]&&e[t].apply(e,n)}),this},remove:function(){for(var e=this.length;e--;)this[e].remove();return this},addClass:function(t){return this.each(function(e){e.classes.add(t)})},removeClass:function(t){return this.each(function(e){e.classes.remove(t)})}},w.each("fire on off show hide append prepend before after reflow".split(" "),function(n){Le[n]=function(){var t=w.toArray(arguments);return this.each(function(e){n in e&&e[n].apply(e,t)}),this}}),w.each("text name disabled active selected checked visible parent value data".split(" "),function(t){Le[t]=function(e){return this.prop(t,e)}}),Be=Me.extend(Le);var $e=Ue.Collection=Be,Xe=function(e){this.create=e.create};Xe.create=function(r,o){return new Xe({create:function(t,n){var i,e=function(e){t.set(n,e.value)};return t.on("change:"+n,function(e){r.set(o,e.value)}),r.on("change:"+o,e),(i=t._bindings)||(i=t._bindings=[],t.on("destroy",function(){for(var e=i.length;e--;)i[e]()})),i.push(function(){r.off("change:"+o,e)}),r.get(o)}})};var qe=tinymce.util.Tools.resolve("tinymce.util.Observable");function je(e){return 0<e.nodeType}var Je,Ge,Ke=Me.extend({Mixins:[qe],init:function(e){var t,n;for(t in e=e||{})(n=e[t])instanceof Xe&&(e[t]=n.create(this,t));this.data=e},set:function(t,n){var i,r,o=this.data[t];if(n instanceof Xe&&(n=n.create(this,t)),"object"==typeof t){for(i in t)this.set(i,t[i]);return this}return function e(t,n){var i,r;if(t===n)return!0;if(null===t||null===n)return t===n;if("object"!=typeof t||"object"!=typeof n)return t===n;if(w.isArray(n)){if(t.length!==n.length)return!1;for(i=t.length;i--;)if(!e(t[i],n[i]))return!1}if(je(t)||je(n))return t===n;for(i in r={},n){if(!e(t[i],n[i]))return!1;r[i]=!0}for(i in t)if(!r[i]&&!e(t[i],n[i]))return!1;return!0}(o,n)||(this.data[t]=n,r={target:this,name:t,value:n,oldValue:o},this.fire("change:"+t,r),this.fire("change",r)),this},get:function(e){return this.data[e]},has:function(e){return e in this.data},bind:function(e){return Xe.create(this,e)},destroy:function(){this.fire("destroy")}}),Ze={},Qe={add:function(e){var t=e.parent();if(t){if(!t._layout||t._layout.isNative())return;Ze[t._id]||(Ze[t._id]=t),Je||(Je=!0,u.requestAnimationFrame(function(){var e,t;for(e in Je=!1,Ze)(t=Ze[e]).state.get("rendered")&&t.reflow();Ze={}},document.body))}},remove:function(e){Ze[e._id]&&delete Ze[e._id]}},et="onmousewheel"in document,tt=!1,nt=0,it={Statics:{classPrefix:"mce-"},isRtl:function(){return Ge.rtl},classPrefix:"mce-",init:function(t){var e,n,i=this;function r(e){var t;for(e=e.split(" "),t=0;t<e.length;t++)i.classes.add(e[t])}i.settings=t=w.extend({},i.Defaults,t),i._id=t.id||"mceu_"+nt++,i._aria={role:t.role},i._elmCache={},i.$=we,i.state=new Ke({visible:!0,active:!1,disabled:!1,value:""}),i.data=new Ke(t.data),i.classes=new Oe(function(){i.state.get("rendered")&&(i.getEl().className=this.toString())}),i.classes.prefix=i.classPrefix,(e=t.classes)&&(i.Defaults&&(n=i.Defaults.classes)&&e!==n&&r(n),r(e)),w.each("title text name visible disabled active value".split(" "),function(e){e in t&&i[e](t[e])}),i.on("click",function(){if(i.disabled())return!1}),i.settings=t,i.borderBox=Pe(t.border),i.paddingBox=Pe(t.padding),i.marginBox=Pe(t.margin),t.hidden&&i.hide()},Properties:"parent,name",getContainerElm:function(){var e=O.getUiContainer(this);return e||Ce.getContainer()},getParentCtrl:function(e){for(var t,n=this.getRoot().controlIdLookup;e&&n&&!(t=n[e.id]);)e=e.parentNode;return t},initLayoutRect:function(){var e,t,n,i,r,o,s,a,l,u,c=this,d=c.settings,f=c.getEl();e=c.borderBox=c.borderBox||De(f,"border"),c.paddingBox=c.paddingBox||De(f,"padding"),c.marginBox=c.marginBox||De(f,"margin"),u=Ce.getSize(f),a=d.minWidth,l=d.minHeight,r=a||u.width,o=l||u.height,n=d.width,i=d.height,s=void 0!==(s=d.autoResize)?s:!n&&!i,n=n||r,i=i||o;var h=e.left+e.right,m=e.top+e.bottom,g=d.maxWidth||65535,p=d.maxHeight||65535;return c._layoutRect=t={x:d.x||0,y:d.y||0,w:n,h:i,deltaW:h,deltaH:m,contentW:n-h,contentH:i-m,innerW:n-h,innerH:i-m,startMinWidth:a||0,startMinHeight:l||0,minW:Math.min(r,g),minH:Math.min(o,p),maxW:g,maxH:p,autoResize:s,scrollW:0},c._lastLayoutRect={},t},layoutRect:function(e){var t,n,i,r,o,s=this,a=s._layoutRect;return a||(a=s.initLayoutRect()),e?(i=a.deltaW,r=a.deltaH,e.x!==undefined&&(a.x=e.x),e.y!==undefined&&(a.y=e.y),e.minW!==undefined&&(a.minW=e.minW),e.minH!==undefined&&(a.minH=e.minH),(n=e.w)!==undefined&&(n=(n=n<a.minW?a.minW:n)>a.maxW?a.maxW:n,a.w=n,a.innerW=n-i),(n=e.h)!==undefined&&(n=(n=n<a.minH?a.minH:n)>a.maxH?a.maxH:n,a.h=n,a.innerH=n-r),(n=e.innerW)!==undefined&&(n=(n=n<a.minW-i?a.minW-i:n)>a.maxW-i?a.maxW-i:n,a.innerW=n,a.w=n+i),(n=e.innerH)!==undefined&&(n=(n=n<a.minH-r?a.minH-r:n)>a.maxH-r?a.maxH-r:n,a.innerH=n,a.h=n+r),e.contentW!==undefined&&(a.contentW=e.contentW),e.contentH!==undefined&&(a.contentH=e.contentH),(t=s._lastLayoutRect).x===a.x&&t.y===a.y&&t.w===a.w&&t.h===a.h||((o=Ge.repaintControls)&&o.map&&!o.map[s._id]&&(o.push(s),o.map[s._id]=!0),t.x=a.x,t.y=a.y,t.w=a.w,t.h=a.h),s):a},repaint:function(){var e,t,n,i,r,o,s,a,l,u,c=this;l=document.createRange?function(e){return e}:Math.round,e=c.getEl().style,i=c._layoutRect,a=c._lastRepaintRect||{},o=(r=c.borderBox).left+r.right,s=r.top+r.bottom,i.x!==a.x&&(e.left=l(i.x)+"px",a.x=i.x),i.y!==a.y&&(e.top=l(i.y)+"px",a.y=i.y),i.w!==a.w&&(u=l(i.w-o),e.width=(0<=u?u:0)+"px",a.w=i.w),i.h!==a.h&&(u=l(i.h-s),e.height=(0<=u?u:0)+"px",a.h=i.h),c._hasBody&&i.innerW!==a.innerW&&(u=l(i.innerW),(n=c.getEl("body"))&&((t=n.style).width=(0<=u?u:0)+"px"),a.innerW=i.innerW),c._hasBody&&i.innerH!==a.innerH&&(u=l(i.innerH),(n=n||c.getEl("body"))&&((t=t||n.style).height=(0<=u?u:0)+"px"),a.innerH=i.innerH),c._lastRepaintRect=a,c.fire("repaint",{},!1)},updateLayoutRect:function(){var e=this;e.parent()._lastRect=null,Ce.css(e.getEl(),{width:"",height:""}),e._layoutRect=e._lastRepaintRect=e._lastLayoutRect=null,e.initLayoutRect()},on:function(e,t){var n,i,r,o=this;return rt(o).on(e,"string"!=typeof(n=t)?n:function(e){return i||o.parentsAndSelf().each(function(e){var t=e.settings.callbacks;if(t&&(i=t[n]))return r=e,!1}),i?i.call(r,e):(e.action=n,void this.fire("execute",e))}),o},off:function(e,t){return rt(this).off(e,t),this},fire:function(e,t,n){if((t=t||{}).control||(t.control=this),t=rt(this).fire(e,t),!1!==n&&this.parent)for(var i=this.parent();i&&!t.isPropagationStopped();)i.fire(e,t,!1),i=i.parent();return t},hasEventListeners:function(e){return rt(this).has(e)},parents:function(e){var t,n=new $e;for(t=this.parent();t;t=t.parent())n.add(t);return e&&(n=n.filter(e)),n},parentsAndSelf:function(e){return new $e(this).add(this.parents(e))},next:function(){var e=this.parent().items();return e[e.indexOf(this)+1]},prev:function(){var e=this.parent().items();return e[e.indexOf(this)-1]},innerHtml:function(e){return this.$el.html(e),this},getEl:function(e){var t=e?this._id+"-"+e:this._id;return this._elmCache[t]||(this._elmCache[t]=we("#"+t)[0]),this._elmCache[t]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(e){}return this},blur:function(){return this.getEl().blur(),this},aria:function(e,t){var n=this,i=n.getEl(n.ariaTarget);return void 0===t?n._aria[e]:(n._aria[e]=t,n.state.get("rendered")&&i.setAttribute("role"===e?e:"aria-"+e,t),n)},encode:function(e,t){return!1!==t&&(e=this.translate(e)),(e||"").replace(/[&<>"]/g,function(e){return"&#"+e.charCodeAt(0)+";"})},translate:function(e){return Ge.translate?Ge.translate(e):e},before:function(e){var t=this.parent();return t&&t.insert(e,t.items().indexOf(this),!0),this},after:function(e){var t=this.parent();return t&&t.insert(e,t.items().indexOf(this)),this},remove:function(){var t,e,n=this,i=n.getEl(),r=n.parent();if(n.items){var o=n.items().toArray();for(e=o.length;e--;)o[e].remove()}r&&r.items&&(t=[],r.items().each(function(e){e!==n&&t.push(e)}),r.items().set(t),r._lastRect=null),n._eventsRoot&&n._eventsRoot===n&&we(i).off();var s=n.getRoot().controlIdLookup;return s&&delete s[n._id],i&&i.parentNode&&i.parentNode.removeChild(i),n.state.set("rendered",!1),n.state.destroy(),n.fire("remove"),n},renderBefore:function(e){return we(e).before(this.renderHtml()),this.postRender(),this},renderTo:function(e){return we(e||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return'<div id="'+this._id+'" class="'+this.classes+'"></div>'},postRender:function(){var e,t,n,i,r,o=this,s=o.settings;for(i in o.$el=we(o.getEl()),o.state.set("rendered",!0),s)0===i.indexOf("on")&&o.on(i.substr(2),s[i]);if(o._eventsRoot){for(n=o.parent();!r&&n;n=n.parent())r=n._eventsRoot;if(r)for(i in r._nativeEvents)o._nativeEvents[i]=!0}ot(o),s.style&&(e=o.getEl())&&(e.setAttribute("style",s.style),e.style.cssText=s.style),o.settings.border&&(t=o.borderBox,o.$el.css({"border-top-width":t.top,"border-right-width":t.right,"border-bottom-width":t.bottom,"border-left-width":t.left}));var a=o.getRoot();for(var l in a.controlIdLookup||(a.controlIdLookup={}),(a.controlIdLookup[o._id]=o)._aria)o.aria(l,o._aria[l]);!1===o.state.get("visible")&&(o.getEl().style.display="none"),o.bindStates(),o.state.on("change:visible",function(e){var t,n=e.value;o.state.get("rendered")&&(o.getEl().style.display=!1===n?"none":"",o.getEl().getBoundingClientRect()),(t=o.parent())&&(t._lastRect=null),o.fire(n?"show":"hide"),Qe.add(o)}),o.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(e){var t,n,i,r,o,s,a=this.getEl(),l=a.parentNode,u=function(e,t){var n,i,r=e;for(n=i=0;r&&r!==t&&r.nodeType;)n+=r.offsetLeft||0,i+=r.offsetTop||0,r=r.offsetParent;return{x:n,y:i}}(a,l);return t=u.x,n=u.y,i=a.offsetWidth,r=a.offsetHeight,o=l.clientWidth,s=l.clientHeight,"end"===e?(t-=o-i,n-=s-r):"center"===e&&(t-=o/2-i/2,n-=s/2-r/2),l.scrollLeft=t,l.scrollTop=n,this},getRoot:function(){for(var e,t=this,n=[];t;){if(t.rootControl){e=t.rootControl;break}n.push(t),t=(e=t).parent()}e||(e=this);for(var i=n.length;i--;)n[i].rootControl=e;return e},reflow:function(){Qe.remove(this);var e=this.parent();return e&&e._layout&&!e._layout.isNative()&&e.reflow(),this}};function rt(n){return n._eventDispatcher||(n._eventDispatcher=new Ne({scope:n,toggleEvent:function(e,t){t&&Ne.isNative(e)&&(n._nativeEvents||(n._nativeEvents={}),n._nativeEvents[e]=!0,n.state.get("rendered")&&ot(n))}})),n._eventDispatcher}function ot(a){var e,t,n,l,i,r;function o(e){var t=a.getParentCtrl(e.target);t&&t.fire(e.type,e)}function s(){var e=l._lastHoverCtrl;e&&(e.fire("mouseleave",{target:e.getEl()}),e.parents().each(function(e){e.fire("mouseleave",{target:e.getEl()})}),l._lastHoverCtrl=null)}function u(e){var t,n,i,r=a.getParentCtrl(e.target),o=l._lastHoverCtrl,s=0;if(r!==o){if((n=(l._lastHoverCtrl=r).parents().toArray().reverse()).push(r),o){for((i=o.parents().toArray().reverse()).push(o),s=0;s<i.length&&n[s]===i[s];s++);for(t=i.length-1;s<=t;t--)(o=i[t]).fire("mouseleave",{target:o.getEl()})}for(t=s;t<n.length;t++)(r=n[t]).fire("mouseenter",{target:r.getEl()})}}function c(e){e.preventDefault(),"mousewheel"===e.type?(e.deltaY=-.025*e.wheelDelta,e.wheelDeltaX&&(e.deltaX=-.025*e.wheelDeltaX)):(e.deltaX=0,e.deltaY=e.detail),e=a.fire("wheel",e)}if(i=a._nativeEvents){for((n=a.parents().toArray()).unshift(a),e=0,t=n.length;!l&&e<t;e++)l=n[e]._eventsRoot;for(l||(l=n[n.length-1]||a),a._eventsRoot=l,t=e,e=0;e<t;e++)n[e]._eventsRoot=l;var d=l._delegates;for(r in d||(d=l._delegates={}),i){if(!i)return!1;"wheel"!==r||tt?("mouseenter"===r||"mouseleave"===r?l._hasMouseEnter||(we(l.getEl()).on("mouseleave",s).on("mouseover",u),l._hasMouseEnter=1):d[r]||(we(l.getEl()).on(r,o),d[r]=!0),i[r]=!1):et?we(a.getEl()).on("mousewheel",c):we(a.getEl()).on("DOMMouseScroll",c)}}}w.each("text title visible disabled active value".split(" "),function(t){it[t]=function(e){return 0===arguments.length?this.state.get(t):(void 0!==e&&this.state.set(t,e),this)}});var st=Ge=Me.extend(it),at=function(e){return!!e.getAttribute("data-mce-tabstop")};function lt(e){var o,r,n=e.root;function i(e){return e&&1===e.nodeType}try{o=document.activeElement}catch(t){o=document.body}function s(e){return i(e=e||o)?e.getAttribute("role"):null}function a(e){for(var t,n=e||o;n=n.parentNode;)if(t=s(n))return t}function l(e){var t=o;if(i(t))return t.getAttribute("aria-"+e)}function u(e){var t=e.tagName.toUpperCase();return"INPUT"===t||"TEXTAREA"===t||"SELECT"===t}function c(t){var r=[];return function e(t){if(1===t.nodeType&&"none"!==t.style.display&&!t.disabled){var n;(u(n=t)&&!n.hidden||at(n)||/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(s(n)))&&r.push(t);for(var i=0;i<t.childNodes.length;i++)e(t.childNodes[i])}}(t||n.getEl()),r}function d(e){var t,n;(n=(e=e||r).parents().toArray()).unshift(e);for(var i=0;i<n.length&&!(t=n[i]).settings.ariaRoot;i++);return t}function f(e,t){return e<0?e=t.length-1:e>=t.length&&(e=0),t[e]&&t[e].focus(),e}function h(e,t){var n=-1,i=d();t=t||c(i.getEl());for(var r=0;r<t.length;r++)t[r]===o&&(n=r);n+=e,i.lastAriaIndex=f(n,t)}function m(){"tablist"===a()?h(-1,c(o.parentNode)):r.parent().submenu?b():h(-1)}function g(){var e=s(),t=a();"tablist"===t?h(1,c(o.parentNode)):"menuitem"===e&&"menu"===t&&l("haspopup")?y():h(1)}function p(){h(-1)}function v(){var e=s(),t=a();"menuitem"===e&&"menubar"===t?y():"button"===e&&l("haspopup")?y({key:"down"}):h(1)}function b(){r.fire("cancel")}function y(e){e=e||{},r.fire("click",{target:o,aria:e})}return r=n.getParentCtrl(o),n.on("keydown",function(e){function t(e,t){u(o)||at(o)||"slider"!==s(o)&&!1!==t(e)&&e.preventDefault()}if(!e.isDefaultPrevented())switch(e.keyCode){case 37:t(e,m);break;case 39:t(e,g);break;case 38:t(e,p);break;case 40:t(e,v);break;case 27:b();break;case 14:case 13:case 32:t(e,y);break;case 9:!function(e){if("tablist"===a()){var t=c(r.getEl("body"))[0];t&&t.focus()}else h(e.shiftKey?-1:1)}(e),e.preventDefault()}}),n.on("focusin",function(e){o=e.target,r=e.control}),{focusFirst:function(e){var t=d(e),n=c(t.getEl());t.settings.ariaRemember&&"lastAriaIndex"in t?f(t.lastAriaIndex,n):f(0,n)}}}var ut={},ct=st.extend({init:function(e){var t=this;t._super(e),(e=t.settings).fixed&&t.state.set("fixed",!0),t._items=new $e,t.isRtl()&&t.classes.add("rtl"),t.bodyClasses=new Oe(function(){t.state.get("rendered")&&(t.getEl("body").className=this.toString())}),t.bodyClasses.prefix=t.classPrefix,t.classes.add("container"),t.bodyClasses.add("container-body"),e.containerCls&&t.classes.add(e.containerCls),t._layout=b.create((e.layout||"")+"layout"),t.settings.items?t.add(t.settings.items):t.add(t.render()),t._hasBody=!0},items:function(){return this._items},find:function(e){return(e=ut[e]=ut[e]||new Ue(e)).find(this)},add:function(e){return this.items().add(this.create(e)).parent(this),this},focus:function(e){var t,n,i,r=this;if(!e||!(n=r.keyboardNav||r.parents().eq(-1)[0].keyboardNav))return i=r.find("*"),r.statusbar&&i.add(r.statusbar.items()),i.each(function(e){if(e.settings.autofocus)return t=null,!1;e.canFocus&&(t=t||e)}),t&&t.focus(),r;n.focusFirst(r)},replace:function(e,t){for(var n,i=this.items(),r=i.length;r--;)if(i[r]===e){i[r]=t;break}0<=r&&((n=t.getEl())&&n.parentNode.removeChild(n),(n=e.getEl())&&n.parentNode.removeChild(n)),t.parent(this)},create:function(e){var t,n=this,i=[];return w.isArray(e)||(e=[e]),w.each(e,function(e){e&&(e instanceof st||("string"==typeof e&&(e={type:e}),t=w.extend({},n.settings.defaults,e),e.type=t.type=t.type||e.type||n.settings.defaultType||(t.defaults?t.defaults.type:null),e=b.create(t)),i.push(e))}),i},renderNew:function(){var i=this;return i.items().each(function(e,t){var n;e.parent(i),e.state.get("rendered")||((n=i.getEl("body")).hasChildNodes()&&t<=n.childNodes.length-1?we(n.childNodes[t]).before(e.renderHtml()):we(n).append(e.renderHtml()),e.postRender(),Qe.add(e))}),i._layout.applyClasses(i.items().filter(":visible")),i._lastRect=null,i},append:function(e){return this.add(e).renderNew()},prepend:function(e){return this.items().set(this.create(e).concat(this.items().toArray())),this.renderNew()},insert:function(e,t,n){var i,r,o;return e=this.create(e),i=this.items(),!n&&t<i.length-1&&(t+=1),0<=t&&t<i.length&&(r=i.slice(0,t).toArray(),o=i.slice(t).toArray(),i.set(r.concat(e,o))),this.renderNew()},fromJSON:function(e){for(var t in e)this.find("#"+t).value(e[t]);return this},toJSON:function(){var i={};return this.find("*").each(function(e){var t=e.name(),n=e.value();t&&void 0!==n&&(i[t]=n)}),i},renderHtml:function(){var e=this,t=e._layout,n=this.settings.role;return e.preRender(),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'"'+(n?' role="'+this.settings.role+'"':"")+'><div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"},postRender:function(){var e,t=this;return t.items().exec("postRender"),t._super(),t._layout.postRender(t),t.state.set("rendered",!0),t.settings.style&&t.$el.css(t.settings.style),t.settings.border&&(e=t.borderBox,t.$el.css({"border-top-width":e.top,"border-right-width":e.right,"border-bottom-width":e.bottom,"border-left-width":e.left})),t.parent()||(t.keyboardNav=lt({root:t})),t},initLayoutRect:function(){var e=this._super();return this._layout.recalc(this),e},recalc:function(){var e=this,t=e._layoutRect,n=e._lastRect;if(!n||n.w!==t.w||n.h!==t.h)return e._layout.recalc(e),t=e.layoutRect(),e._lastRect={x:t.x,y:t.y,w:t.w,h:t.h},!0},reflow:function(){var e;if(Qe.remove(this),this.visible()){for(st.repaintControls=[],st.repaintControls.map={},this.recalc(),e=st.repaintControls.length;e--;)st.repaintControls[e].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),st.repaintControls=[]}return this}});function dt(e){var t,n;if(e.changedTouches)for(t="screenX screenY pageX pageY clientX clientY".split(" "),n=0;n<t.length;n++)e[t[n]]=e.changedTouches[0][t[n]]}function ft(e,h){var m,g,t,p,v,b,y,x=h.document||document;h=h||{};var w=x.getElementById(h.handle||e);t=function(e){var t,n,i,r,o,s,a,l,u,c,d,f=(t=x,u=Math.max,n=t.documentElement,i=t.body,r=u(n.scrollWidth,i.scrollWidth),o=u(n.clientWidth,i.clientWidth),s=u(n.offsetWidth,i.offsetWidth),a=u(n.scrollHeight,i.scrollHeight),l=u(n.clientHeight,i.clientHeight),{width:r<s?o:r,height:a<u(n.offsetHeight,i.offsetHeight)?l:a});dt(e),e.preventDefault(),g=e.button,c=w,b=e.screenX,y=e.screenY,d=window.getComputedStyle?window.getComputedStyle(c,null).getPropertyValue("cursor"):c.runtimeStyle.cursor,m=we("<div></div>").css({position:"absolute",top:0,left:0,width:f.width,height:f.height,zIndex:2147483647,opacity:1e-4,cursor:d}).appendTo(x.body),we(x).on("mousemove touchmove",v).on("mouseup touchend",p),h.start(e)},v=function(e){if(dt(e),e.button!==g)return p(e);e.deltaX=e.screenX-b,e.deltaY=e.screenY-y,e.preventDefault(),h.drag(e)},p=function(e){dt(e),we(x).off("mousemove touchmove",v).off("mouseup touchend",p),m.remove(),h.stop&&h.stop(e)},this.destroy=function(){we(w).off()},we(w).on("mousedown touchstart",t)}var ht,mt,gt,pt,vt={init:function(){this.on("repaint",this.renderScroll)},renderScroll:function(){var p=this,v=2;function n(){var m,g,e;function t(e,t,n,i,r,o){var s,a,l,u,c,d,f,h;if(a=p.getEl("scroll"+e)){if(f=t.toLowerCase(),h=n.toLowerCase(),we(p.getEl("absend")).css(f,p.layoutRect()[i]-1),!r)return void we(a).css("display","none");we(a).css("display","block"),s=p.getEl("body"),l=p.getEl("scroll"+e+"t"),u=s["client"+n]-2*v,c=(u-=m&&g?a["client"+o]:0)/s["scroll"+n],(d={})[f]=s["offset"+t]+v,d[h]=u,we(a).css(d),(d={})[f]=s["scroll"+t]*c,d[h]=u*c,we(l).css(d)}}e=p.getEl("body"),m=e.scrollWidth>e.clientWidth,g=e.scrollHeight>e.clientHeight,t("h","Left","Width","contentW",m,"Height"),t("v","Top","Height","contentH",g,"Width")}p.settings.autoScroll&&(p._hasScroll||(p._hasScroll=!0,function(){function e(s,a,l,u,c){var d,e=p._id+"-scroll"+s,t=p.classPrefix;we(p.getEl()).append('<div id="'+e+'" class="'+t+"scrollbar "+t+"scrollbar-"+s+'"><div id="'+e+'t" class="'+t+'scrollbar-thumb"></div></div>'),p.draghelper=new ft(e+"t",{start:function(){d=p.getEl("body")["scroll"+a],we("#"+e).addClass(t+"active")},drag:function(e){var t,n,i,r,o=p.layoutRect();n=o.contentW>o.innerW,i=o.contentH>o.innerH,r=p.getEl("body")["client"+l]-2*v,t=(r-=n&&i?p.getEl("scroll"+s)["client"+c]:0)/p.getEl("body")["scroll"+l],p.getEl("body")["scroll"+a]=d+e["delta"+u]/t},stop:function(){we("#"+e).removeClass(t+"active")}})}p.classes.add("scroll"),e("v","Top","Height","Y","Width"),e("h","Left","Width","X","Height")}(),p.on("wheel",function(e){var t=p.getEl("body");t.scrollLeft+=10*(e.deltaX||0),t.scrollTop+=10*e.deltaY,n()}),we(p.getEl("body")).on("scroll",n)),n())}},bt=ct.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[vt],renderHtml:function(){var e=this,t=e._layout,n=e.settings.html;return e.preRender(),t.preRender(e),void 0===n?n='<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+t.renderHtml(e)+"</div>":("function"==typeof n&&(n=n.call(e)),e._hasBody=!1),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1" role="group">'+(e._preBodyHtml||"")+n+"</div>"}}),yt={resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(e,t){if(e<=1||t<=1){var n=Ce.getWindowSize();e=e<=1?e*n.w:e,t=t<=1?t*n.h:t}return this._layoutRect.autoResize=!1,this.layoutRect({minW:e,minH:t,w:e,h:t}).reflow()},resizeBy:function(e,t){var n=this.layoutRect();return this.resizeTo(n.w+e,n.h+t)}},xt=[],wt=[];function _t(e,t){for(;e;){if(e===t)return!0;e=e.parent()}}function Ct(){ht||(ht=function(e){2!==e.button&&function(e){for(var t=xt.length;t--;){var n=xt[t],i=n.getParentCtrl(e.target);if(n.settings.autohide){if(i&&(_t(i,n)||n.parent()===i))continue;(e=n.fire("autohide",{target:e.target})).isDefaultPrevented()||n.hide()}}}(e)},we(document).on("click touchstart",ht))}function Rt(r){var e=Ce.getViewPort().y;function t(e,t){for(var n,i=0;i<xt.length;i++)if(xt[i]!==r)for(n=xt[i].parent();n&&(n=n.parent());)n===r&&xt[i].fixed(e).moveBy(0,t).repaint()}r.settings.autofix&&(r.state.get("fixed")?r._autoFixY>e&&(r.fixed(!1).layoutRect({y:r._autoFixY}).repaint(),t(!1,r._autoFixY-e)):(r._autoFixY=r.layoutRect().y,r._autoFixY<e&&(r.fixed(!0).layoutRect({y:0}).repaint(),t(!0,e-r._autoFixY))))}function Et(e,t){var n,i,r=kt.zIndex||65535;if(e)wt.push(t);else for(n=wt.length;n--;)wt[n]===t&&wt.splice(n,1);if(wt.length)for(n=0;n<wt.length;n++)wt[n].modal&&(r++,i=wt[n]),wt[n].getEl().style.zIndex=r,wt[n].zIndex=r,r++;var o=we("#"+t.classPrefix+"modal-block",t.getContainerElm())[0];i?we(o).css("z-index",i.zIndex-1):o&&(o.parentNode.removeChild(o),pt=!1),kt.currentZIndex=r}var kt=bt.extend({Mixins:[Se,yt],init:function(e){var i=this;i._super(e),(i._eventsRoot=i).classes.add("floatpanel"),e.autohide&&(Ct(),function(){if(!gt){var e=document.documentElement,t=e.clientWidth,n=e.clientHeight;gt=function(){document.all&&t===e.clientWidth&&n===e.clientHeight||(t=e.clientWidth,n=e.clientHeight,kt.hideAll())},we(window).on("resize",gt)}}(),xt.push(i)),e.autofix&&(mt||(mt=function(){var e;for(e=xt.length;e--;)Rt(xt[e])},we(window).on("scroll",mt)),i.on("move",function(){Rt(this)})),i.on("postrender show",function(e){if(e.control===i){var t,n=i.classPrefix;i.modal&&!pt&&((t=we("#"+n+"modal-block",i.getContainerElm()))[0]||(t=we('<div id="'+n+'modal-block" class="'+n+"reset "+n+'fade"></div>').appendTo(i.getContainerElm())),u.setTimeout(function(){t.addClass(n+"in"),we(i.getEl()).addClass(n+"in")}),pt=!0),Et(!0,i)}}),i.on("show",function(){i.parents().each(function(e){if(e.state.get("fixed"))return i.fixed(!0),!1})}),e.popover&&(i._preBodyHtml='<div class="'+i.classPrefix+'arrow"></div>',i.classes.add("popover").add("bottom").add(i.isRtl()?"end":"start")),i.aria("label",e.ariaLabel),i.aria("labelledby",i._id),i.aria("describedby",i.describedBy||i._id+"-none")},fixed:function(e){var t=this;if(t.state.get("fixed")!==e){if(t.state.get("rendered")){var n=Ce.getViewPort();e?t.layoutRect().y-=n.y:t.layoutRect().y+=n.y}t.classes.toggle("fixed",e),t.state.set("fixed",e)}return t},show:function(){var e,t=this._super();for(e=xt.length;e--&&xt[e]!==this;);return-1===e&&xt.push(this),t},hide:function(){return Tt(this),Et(!1,this),this._super()},hideAll:function(){kt.hideAll()},close:function(){return this.fire("close").isDefaultPrevented()||(this.remove(),Et(!1,this)),this},remove:function(){Tt(this),this._super()},postRender:function(){return this.settings.bodyRole&&this.getEl("body").setAttribute("role",this.settings.bodyRole),this._super()}});function Tt(e){var t;for(t=xt.length;t--;)xt[t]===e&&xt.splice(t,1);for(t=wt.length;t--;)wt[t]===e&&wt.splice(t,1)}kt.hideAll=function(){for(var e=xt.length;e--;){var t=xt[e];t&&t.settings.autohide&&(t.hide(),xt.splice(e,1))}};var Ht=function(e,t){return!(!e||t.settings.ui_container)},St=function(s,e,t){var a,n,l=v.DOM,i=s.getParam("fixed_toolbar_container");i&&(n=l.select(i)[0]);var r=function(){if(a&&a.moveRel&&a.visible()&&!a._fixed){var e=s.selection.getScrollContainer(),t=s.getBody(),n=0,i=0;if(e){var r=l.getPos(t),o=l.getPos(e);n=Math.max(0,o.x-r.x),i=Math.max(0,o.y-r.y)}a.fixed(!1).moveRel(t,s.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(n,i)}},o=function(){a&&(a.show(),r(),l.addClass(s.getBody(),"mce-edit-focus"))},u=function(){a&&(a.hide(),kt.hideAll(),l.removeClass(s.getBody(),"mce-edit-focus"))},c=function(){a?a.visible()||o():(a=e.panel=b.create({type:n?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:Ht(n,s),fixed:Ht(n,s),border:1,items:[!1===d(s)?null:{type:"menubar",border:"0 0 1 0",items:se(s)},L(s,f(s))]}),O.setUiContainer(s,a),_(s),n?a.renderTo(n).reflow():a.renderTo().reflow(),C(s,a),o(),V(s),s.on("nodeChange",r),s.on("ResizeWindow",r),s.on("activate",o),s.on("deactivate",u),s.nodeChanged())};return s.settings.content_editable=!0,s.on("focus",function(){!1===g(s)&&t.skinUiCss?l.styleSheetLoader.load(t.skinUiCss,c,c):c()}),s.on("blur hide",u),s.on("remove",function(){a&&(a.remove(),a=null)}),!1===g(s)&&t.skinUiCss?l.styleSheetLoader.load(t.skinUiCss,ve(s)):ve(s)(),{}};function Mt(i,r){var o,s,a=this,l=st.classPrefix;a.show=function(e,t){function n(){o&&(we(i).append('<div class="'+l+"throbber"+(r?" "+l+"throbber-inline":"")+'"></div>'),t&&t())}return a.hide(),o=!0,e?s=u.setTimeout(n,e):n(),a},a.hide=function(){var e=i.lastChild;return u.clearTimeout(s),e&&-1!==e.className.indexOf("throbber")&&e.parentNode.removeChild(e),o=!1,a}}var Nt=function(e,t){var n;e.on("ProgressState",function(e){n=n||new Mt(t.panel.getEl("body")),e.state?n.show(e.time):n.hide()})},Pt=function(e,t,n){var i=function(e){var t=e.settings,n=t.skin,i=t.skin_url;if(!1!==n){var r=n||"lightgray";i=i?e.documentBaseURI.toAbsolute(i):h.baseURL+"/skins/"+r}return i}(e);return i&&(n.skinUiCss=i+"/skin.min.css",e.contentCSS.push(i+"/content"+(e.inline?".inline":"")+".min.css")),Nt(e,t),e.getParam("inline",!1,"boolean")?St(e,t,n):xe(e,t,n)},Dt=st.extend({Mixins:[Se],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var e=this,t=e.classPrefix;return'<div id="'+e._id+'" class="'+e.classes+'" role="presentation"><div class="'+t+'tooltip-arrow"></div><div class="'+t+'tooltip-inner">'+e.encode(e.state.get("text"))+"</div></div>"},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.getEl().lastChild.innerHTML=t.encode(e.value)}),t._super()},repaint:function(){var e,t;e=this.getEl().style,t=this._layoutRect,e.left=t.x+"px",e.top=t.y+"px",e.zIndex=131070}}),Wt=st.extend({init:function(i){var r=this;r._super(i),i=r.settings,r.canFocus=!0,i.tooltip&&!1!==Wt.tooltips&&(r.on("mouseenter",function(e){var t=r.tooltip().moveTo(-65535);if(e.control===r){var n=t.text(i.tooltip).show().testMoveRel(r.getEl(),["bc-tc","bc-tl","bc-tr"]);t.classes.toggle("tooltip-n","bc-tc"===n),t.classes.toggle("tooltip-nw","bc-tl"===n),t.classes.toggle("tooltip-ne","bc-tr"===n),t.moveRel(r.getEl(),n)}else t.hide()}),r.on("mouseleave mousedown click",function(){r.tooltip().remove(),r._tooltip=null})),r.aria("label",i.ariaLabel||i.tooltip)},tooltip:function(){return this._tooltip||(this._tooltip=new Dt({type:"tooltip"}),O.inheritUiContainer(this,this._tooltip),this._tooltip.renderTo()),this._tooltip},postRender:function(){var e=this,t=e.settings;e._super(),e.parent()||!t.width&&!t.height||(e.initLayoutRect(),e.repaint()),t.autofocus&&e.focus()},bindStates:function(){var t=this;function n(e){t.aria("disabled",e),t.classes.toggle("disabled",e)}function i(e){t.aria("pressed",e),t.classes.toggle("active",e)}return t.state.on("change:disabled",function(e){n(e.value)}),t.state.on("change:active",function(e){i(e.value)}),t.state.get("disabled")&&n(!0),t.state.get("active")&&i(!0),t._super()},remove:function(){this._super(),this._tooltip&&(this._tooltip.remove(),this._tooltip=null)}}),Ot=Wt.extend({Defaults:{value:0},init:function(e){this._super(e),this.classes.add("progress"),this.settings.filter||(this.settings.filter=function(e){return Math.round(e)})},renderHtml:function(){var e=this._id,t=this.classPrefix;return'<div id="'+e+'" class="'+this.classes+'"><div class="'+t+'bar-container"><div class="'+t+'bar"></div></div><div class="'+t+'text">0%</div></div>'},postRender:function(){return this._super(),this.value(this.settings.value),this},bindStates:function(){var t=this;function n(e){e=t.settings.filter(e),t.getEl().lastChild.innerHTML=e+"%",t.getEl().firstChild.firstChild.style.width=e+"%"}return t.state.on("change:value",function(e){n(e.value)}),n(t.state.get("value")),t._super()}}),At=function(e,t){e.getEl().lastChild.textContent=t+(e.progressBar?" "+e.progressBar.value()+"%":"")},Bt=st.extend({Mixins:[Se],Defaults:{classes:"widget notification"},init:function(e){var t=this;t._super(e),t.maxWidth=e.maxWidth,e.text&&t.text(e.text),e.icon&&(t.icon=e.icon),e.color&&(t.color=e.color),e.type&&t.classes.add("notification-"+e.type),e.timeout&&(e.timeout<0||0<e.timeout)&&!e.closeButton?t.closeButton=!1:(t.classes.add("has-close"),t.closeButton=!0),e.progressBar&&(t.progressBar=new Ot),t.on("click",function(e){-1!==e.target.className.indexOf(t.classPrefix+"close")&&t.close()})},renderHtml:function(){var e,t=this,n=t.classPrefix,i="",r="",o="";return t.icon&&(i='<i class="'+n+"ico "+n+"i-"+t.icon+'"></i>'),e=' style="max-width: '+t.maxWidth+"px;"+(t.color?"background-color: "+t.color+';"':'"'),t.closeButton&&(r='<button type="button" class="'+n+'close" aria-hidden="true">\xd7</button>'),t.progressBar&&(o=t.progressBar.renderHtml()),'<div id="'+t._id+'" class="'+t.classes+'"'+e+' role="presentation">'+i+'<div class="'+n+'notification-inner">'+t.state.get("text")+"</div>"+o+r+'<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;" aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div></div>'},postRender:function(){var e=this;return u.setTimeout(function(){e.$el.addClass(e.classPrefix+"in"),At(e,e.state.get("text"))},100),e._super()},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.getEl().firstChild.innerHTML=e.value,At(t,e.value)}),t.progressBar&&(t.progressBar.bindStates(),t.progressBar.state.on("change:value",function(e){At(t,t.state.get("text"))})),t._super()},close:function(){return this.fire("close").isDefaultPrevented()||this.remove(),this},repaint:function(){var e,t;e=this.getEl().style,t=this._layoutRect,e.left=t.x+"px",e.top=t.y+"px",e.zIndex=65534}});function Lt(o){var s=function(e){return e.inline?e.getElement():e.getContentAreaContainer()};return{open:function(e,t){var n,i=w.extend(e,{maxWidth:(n=s(o),Ce.getSize(n).width)}),r=new Bt(i);return 0<(r.args=i).timeout&&(r.timer=setTimeout(function(){r.close(),t()},i.timeout)),r.on("close",function(){t()}),r.renderTo(),r},close:function(e){e.close()},reposition:function(e){G(e,function(e){e.moveTo(0,0)}),function(n){if(0<n.length){var e=n.slice(0,1)[0],t=s(o);e.moveRel(t,"tc-tc"),G(n,function(e,t){0<t&&e.moveRel(n[t-1].getEl(),"bc-tc")})}}(e)},getArgs:function(e){return e.args}}}var It=[],zt="";function Ft(e){var t,n=we("meta[name=viewport]")[0];!1!==fe.overrideViewPort&&(n||((n=document.createElement("meta")).setAttribute("name","viewport"),document.getElementsByTagName("head")[0].appendChild(n)),(t=n.getAttribute("content"))&&void 0!==zt&&(zt=t),n.setAttribute("content",e?"width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0":zt))}function Ut(e,t){(function(){for(var e=0;e<It.length;e++)if(It[e]._fullscreen)return!0;return!1})()&&!1===t&&we([document.documentElement,document.body]).removeClass(e+"fullscreen")}var Vt=kt.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(e){var n=this;n._super(e),n.isRtl()&&n.classes.add("rtl"),n.classes.add("window"),n.bodyClasses.add("window-body"),n.state.set("fixed",!0),e.buttons&&(n.statusbar=new bt({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:n.isRtl()?"start":"end",defaults:{type:"button"},items:e.buttons}),n.statusbar.classes.add("foot"),n.statusbar.parent(n)),n.on("click",function(e){var t=n.classPrefix+"close";(Ce.hasClass(e.target,t)||Ce.hasClass(e.target.parentNode,t))&&n.close()}),n.on("cancel",function(){n.close()}),n.on("move",function(e){e.control===n&&kt.hideAll()}),n.aria("describedby",n.describedBy||n._id+"-none"),n.aria("label",e.title),n._fullscreen=!1},recalc:function(){var e,t,n,i,r=this,o=r.statusbar;r._fullscreen&&(r.layoutRect(Ce.getWindowSize()),r.layoutRect().contentH=r.layoutRect().innerH),r._super(),e=r.layoutRect(),r.settings.title&&!r._fullscreen&&(t=e.headerW)>e.w&&(n=e.x-Math.max(0,t/2),r.layoutRect({w:t,x:n}),i=!0),o&&(o.layoutRect({w:r.layoutRect().innerW}).recalc(),(t=o.layoutRect().minW+e.deltaW)>e.w&&(n=e.x-Math.max(0,t-e.w),r.layoutRect({w:t,x:n}),i=!0)),i&&r.recalc()},initLayoutRect:function(){var e,t=this,n=t._super(),i=0;if(t.settings.title&&!t._fullscreen){e=t.getEl("head");var r=Ce.getSize(e);n.headerW=r.width,n.headerH=r.height,i+=n.headerH}t.statusbar&&(i+=t.statusbar.layoutRect().h),n.deltaH+=i,n.minH+=i,n.h+=i;var o=Ce.getWindowSize();return n.x=t.settings.x||Math.max(0,o.w/2-n.w/2),n.y=t.settings.y||Math.max(0,o.h/2-n.h/2),n},renderHtml:function(){var e=this,t=e._layout,n=e._id,i=e.classPrefix,r=e.settings,o="",s="",a=r.html;return e.preRender(),t.preRender(e),r.title&&(o='<div id="'+n+'-head" class="'+i+'window-head"><div id="'+n+'-title" class="'+i+'title">'+e.encode(r.title)+'</div><div id="'+n+'-dragh" class="'+i+'dragh"></div><button type="button" class="'+i+'close" aria-hidden="true"><i class="mce-ico mce-i-remove"></i></button></div>'),r.url&&(a='<iframe src="'+r.url+'" tabindex="-1"></iframe>'),void 0===a&&(a=t.renderHtml(e)),e.statusbar&&(s=e.statusbar.renderHtml()),'<div id="'+n+'" class="'+e.classes+'" hidefocus="1"><div class="'+e.classPrefix+'reset" role="application">'+o+'<div id="'+n+'-body" class="'+e.bodyClasses+'">'+a+"</div>"+s+"</div></div>"},fullscreen:function(e){var n,t,i=this,r=document.documentElement,o=i.classPrefix;if(e!==i._fullscreen)if(we(window).on("resize",function(){var e;if(i._fullscreen)if(n)i._timer||(i._timer=u.setTimeout(function(){var e=Ce.getWindowSize();i.moveTo(0,0).resizeTo(e.w,e.h),i._timer=0},50));else{e=(new Date).getTime();var t=Ce.getWindowSize();i.moveTo(0,0).resizeTo(t.w,t.h),50<(new Date).getTime()-e&&(n=!0)}}),t=i.layoutRect(),i._fullscreen=e){i._initial={x:t.x,y:t.y,w:t.w,h:t.h},i.borderBox=Pe("0"),i.getEl("head").style.display="none",t.deltaH-=t.headerH+2,we([r,document.body]).addClass(o+"fullscreen"),i.classes.add("fullscreen");var s=Ce.getWindowSize();i.moveTo(0,0).resizeTo(s.w,s.h)}else i.borderBox=Pe(i.settings.border),i.getEl("head").style.display="",t.deltaH+=t.headerH,we([r,document.body]).removeClass(o+"fullscreen"),i.classes.remove("fullscreen"),i.moveTo(i._initial.x,i._initial.y).resizeTo(i._initial.w,i._initial.h);return i.reflow()},postRender:function(){var t,n=this;setTimeout(function(){n.classes.add("in"),n.fire("open")},0),n._super(),n.statusbar&&n.statusbar.postRender(),n.focus(),this.dragHelper=new ft(n._id+"-dragh",{start:function(){t={x:n.layoutRect().x,y:n.layoutRect().y}},drag:function(e){n.moveTo(t.x+e.deltaX,t.y+e.deltaY)}}),n.on("submit",function(e){e.isDefaultPrevented()||n.close()}),It.push(n),Ft(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var e,t=this;for(t.dragHelper.destroy(),t._super(),t.statusbar&&this.statusbar.remove(),Ut(t.classPrefix,!1),e=It.length;e--;)It[e]===t&&It.splice(e,1);Ft(0<It.length)},getContentWindow:function(){var e=this.getEl().getElementsByTagName("iframe")[0];return e?e.contentWindow:null}});!function(){if(!fe.desktop){var n={w:window.innerWidth,h:window.innerHeight};u.setInterval(function(){var e=window.innerWidth,t=window.innerHeight;n.w===e&&n.h===t||(n={w:e,h:t},we(window).trigger("resize"))},100)}we(window).on("resize",function(){var e,t,n=Ce.getWindowSize();for(e=0;e<It.length;e++)t=It[e].layoutRect(),It[e].moveTo(It[e].settings.x||Math.max(0,n.w/2-t.w/2),It[e].settings.y||Math.max(0,n.h/2-t.h/2))})}();var Yt=Vt.extend({init:function(e){e={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(e)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(e){var t,i=e.callback||function(){};function n(e,t,n){return{type:"button",text:e,subtype:n?"primary":"",onClick:function(e){e.control.parents()[1].close(),i(t)}}}switch(e.buttons){case Yt.OK_CANCEL:t=[n("Ok",!0,!0),n("Cancel",!1)];break;case Yt.YES_NO:case Yt.YES_NO_CANCEL:t=[n("Yes",1,!0),n("No",0)],e.buttons===Yt.YES_NO_CANCEL&&t.push(n("Cancel",-1));break;default:t=[n("Ok",!0,!0)]}return new Vt({padding:20,x:e.x,y:e.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:t,title:e.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:e.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:e.onClose,onCancel:function(){i(!1)}}).renderTo(document.body).reflow()},alert:function(e,t){return"string"==typeof e&&(e={text:e}),e.callback=t,Yt.msgBox(e)},confirm:function(e,t){return"string"==typeof e&&(e={text:e}),e.callback=t,e.buttons=Yt.OK_CANCEL,Yt.msgBox(e)}}}),$t=function(n){return{renderUI:function(e){return Pt(n,this,e)},resizeTo:function(e,t){return ce(n,e,t)},resizeBy:function(e,t){return de(n,e,t)},getNotificationManagerImpl:function(){return Lt(n)},getWindowManagerImpl:function(){return{open:function(n,e,t){var i;return n.title=n.title||" ",n.url=n.url||n.file,n.url&&(n.width=parseInt(n.width||320,10),n.height=parseInt(n.height||240,10)),n.body&&(n.items={defaults:n.defaults,type:n.bodyType||"form",items:n.body,data:n.data,callbacks:n.commands}),n.url||n.buttons||(n.buttons=[{text:"Ok",subtype:"primary",onclick:function(){i.find("form")[0].submit()}},{text:"Cancel",onclick:function(){i.close()}}]),(i=new Vt(n)).on("close",function(){t(i)}),n.data&&i.on("postRender",function(){this.find("*").each(function(e){var t=e.name();t in n.data&&e.value(n.data[t])})}),i.features=n||{},i.params=e||{},i=i.renderTo(document.body).reflow()},alert:function(e,t,n){var i;return(i=Yt.alert(e,function(){t()})).on("close",function(){n(i)}),i},confirm:function(e,t,n){var i;return(i=Yt.confirm(e,function(e){t(e)})).on("close",function(){n(i)}),i},close:function(e){e.close()},getParams:function(e){return e.params},setParams:function(e,t){e.params=t}}}}},Xt=Me.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(e){this.settings=w.extend({},this.Defaults,e)},preRender:function(e){e.bodyClasses.add(this.settings.containerClass)},applyClasses:function(e){var t,n,i,r,o=this.settings;t=o.firstControlClass,n=o.lastControlClass,e.each(function(e){e.classes.remove(t).remove(n).add(o.controlClass),e.visible()&&(i||(i=e),r=e)}),i&&i.classes.add(t),r&&r.classes.add(n)},renderHtml:function(e){var t="";return this.applyClasses(e.items()),e.items().each(function(e){t+=e.renderHtml()}),t},recalc:function(){},postRender:function(){},isNative:function(){return!1}}),qt=Xt.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(e){e.items().filter(":visible").each(function(e){var t=e.settings;e.layoutRect({x:t.x,y:t.y,w:t.w,h:t.h}),e.recalc&&e.recalc()})},renderHtml:function(e){return'<div id="'+e._id+'-absend" class="'+e.classPrefix+'abs-end"></div>'+this._super(e)}}),jt=Wt.extend({Defaults:{classes:"widget btn",role:"button"},init:function(e){var t,n=this;n._super(e),e=n.settings,t=n.settings.size,n.on("click mousedown",function(e){e.preventDefault()}),n.on("touchstart",function(e){n.fire("click",e),e.preventDefault()}),e.subtype&&n.classes.add(e.subtype),t&&n.classes.add("btn-"+t),e.icon&&n.icon(e.icon)},icon:function(e){return arguments.length?(this.state.set("icon",e),this):this.state.get("icon")},repaint:function(){var e,t=this.getEl().firstChild;t&&((e=t.style).width=e.height="100%"),this._super()},renderHtml:function(){var e,t,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a="",l=n.settings;return(e=l.image)?(o="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",s&&(n.classes.add("btn-has-text"),a='<span class="'+r+'txt">'+n.encode(s)+"</span>"),o=o?r+"ico "+r+"i-"+o:"",t="boolean"==typeof l.active?' aria-pressed="'+l.active+'"':"",'<div id="'+i+'" class="'+n.classes+'" tabindex="-1"'+t+'><button id="'+i+'-button" role="presentation" type="button" tabindex="-1">'+(o?'<i class="'+o+'"'+e+"></i>":"")+a+"</button></div>"},bindStates:function(){var o=this,n=o.$,i=o.classPrefix+"txt";function s(e){var t=n("span."+i,o.getEl());e?(t[0]||(n("button:first",o.getEl()).append('<span class="'+i+'"></span>'),t=n("span."+i,o.getEl())),t.html(o.encode(e))):t.remove(),o.classes.toggle("btn-has-text",!!e)}return o.state.on("change:text",function(e){s(e.value)}),o.state.on("change:icon",function(e){var t=e.value,n=o.classPrefix;t=(o.settings.icon=t)?n+"ico "+n+"i-"+o.settings.icon:"";var i=o.getEl().firstChild,r=i.getElementsByTagName("i")[0];t?(r&&r===i.firstChild||(r=document.createElement("i"),i.insertBefore(r,i.firstChild)),r.className=t):r&&i.removeChild(r),s(o.state.get("text"))}),o._super()}}),Jt=jt.extend({init:function(e){e=w.extend({text:"Browse...",multiple:!1,accept:null},e),this._super(e),this.classes.add("browsebutton"),e.multiple&&this.classes.add("multiple")},postRender:function(){var n=this,t=Ce.create("input",{type:"file",id:n._id+"-browse",accept:n.settings.accept});n._super(),we(t).on("change",function(e){var t=e.target.files;n.value=function(){return t.length?n.settings.multiple?t:t[0]:null},e.preventDefault(),t.length&&n.fire("change",e)}),we(t).on("click",function(e){e.stopPropagation()}),we(n.getEl("button")).on("click",function(e){e.stopPropagation(),t.click()}),n.getEl().appendChild(t)},remove:function(){we(this.getEl("button")).off(),we(this.getEl("input")).off(),this._super()}}),Gt=ct.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var e=this,t=e._layout;return e.classes.add("btn-group"),e.preRender(),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'"><div id="'+e._id+'-body">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"}}),Kt=Wt.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(e){var t=this;t._super(e),t.on("click mousedown",function(e){e.preventDefault()}),t.on("click",function(e){e.preventDefault(),t.disabled()||t.checked(!t.checked())}),t.checked(t.settings.checked)},checked:function(e){return arguments.length?(this.state.set("checked",e),this):this.state.get("checked")},value:function(e){return arguments.length?this.checked(e):this.checked()},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix;return'<div id="'+t+'" class="'+e.classes+'" unselectable="on" aria-labelledby="'+t+'-al" tabindex="-1"><i class="'+n+"ico "+n+'i-checkbox"></i><span id="'+t+'-al" class="'+n+'label">'+e.encode(e.state.get("text"))+"</span></div>"},bindStates:function(){var o=this;function t(e){o.classes.toggle("checked",e),o.aria("checked",e)}return o.state.on("change:text",function(e){o.getEl("al").firstChild.data=o.translate(e.value)}),o.state.on("change:checked change:value",function(e){o.fire("change"),t(e.value)}),o.state.on("change:icon",function(e){var t=e.value,n=o.classPrefix;if(void 0===t)return o.settings.icon;t=(o.settings.icon=t)?n+"ico "+n+"i-"+o.settings.icon:"";var i=o.getEl().firstChild,r=i.getElementsByTagName("i")[0];t?(r&&r===i.firstChild||(r=document.createElement("i"),i.insertBefore(r,i.firstChild)),r.className=t):r&&i.removeChild(r)}),o.state.get("checked")&&t(!0),o._super()}}),Zt=tinymce.util.Tools.resolve("tinymce.util.VK"),Qt=Wt.extend({init:function(i){var r=this;r._super(i),i=r.settings,r.classes.add("combobox"),r.subinput=!0,r.ariaTarget="inp",i.menu=i.menu||i.values,i.menu&&(i.icon="caret"),r.on("click",function(e){var t=e.target,n=r.getEl();if(we.contains(n,t)||t===n)for(;t&&t!==n;)t.id&&-1!==t.id.indexOf("-open")&&(r.fire("action"),i.menu&&(r.showMenu(),e.aria&&r.menu.items()[0].focus())),t=t.parentNode}),r.on("keydown",function(e){var t;13===e.keyCode&&"INPUT"===e.target.nodeName&&(e.preventDefault(),r.parents().reverse().each(function(e){if(e.toJSON)return t=e,!1}),r.fire("submit",{data:t.toJSON()}))}),r.on("keyup",function(e){if("INPUT"===e.target.nodeName){var t=r.state.get("value"),n=e.target.value;n!==t&&(r.state.set("value",n),r.fire("autocomplete",e))}}),r.on("mouseover",function(e){var t=r.tooltip().moveTo(-65535);if(r.statusLevel()&&-1!==e.target.className.indexOf(r.classPrefix+"status")){var n=r.statusMessage()||"Ok",i=t.text(n).show().testMoveRel(e.target,["bc-tc","bc-tl","bc-tr"]);t.classes.toggle("tooltip-n","bc-tc"===i),t.classes.toggle("tooltip-nw","bc-tl"===i),t.classes.toggle("tooltip-ne","bc-tr"===i),t.moveRel(e.target,i)}})},statusLevel:function(e){return 0<arguments.length&&this.state.set("statusLevel",e),this.state.get("statusLevel")},statusMessage:function(e){return 0<arguments.length&&this.state.set("statusMessage",e),this.state.get("statusMessage")},showMenu:function(){var e,t=this,n=t.settings;t.menu||((e=n.menu||[]).length?e={type:"menu",items:e}:e.type=e.type||"menu",t.menu=b.create(e).parent(t).renderTo(t.getContainerElm()),t.fire("createmenu"),t.menu.reflow(),t.menu.on("cancel",function(e){e.control===t.menu&&t.focus()}),t.menu.on("show hide",function(e){e.control.items().each(function(e){e.active(e.value()===t.value())})}).fire("show"),t.menu.on("select",function(e){t.value(e.control.value())}),t.on("focusin",function(e){"INPUT"===e.target.tagName.toUpperCase()&&t.menu.hide()}),t.aria("expanded",!0)),t.menu.show(),t.menu.layoutRect({w:t.layoutRect().w}),t.menu.moveRel(t.getEl(),t.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},focus:function(){this.getEl("inp").focus()},repaint:function(){var e,t,n=this,i=n.getEl(),r=n.getEl("open"),o=n.layoutRect(),s=0,a=i.firstChild;n.statusLevel()&&"none"!==n.statusLevel()&&(s=parseInt(Ce.getRuntimeStyle(a,"padding-right"),10)-parseInt(Ce.getRuntimeStyle(a,"padding-left"),10)),e=r?o.w-Ce.getSize(r).width-10:o.w-10;var l=document;return l.all&&(!l.documentMode||l.documentMode<=8)&&(t=n.layoutRect().h-2+"px"),we(a).css({width:e-s,lineHeight:t}),n._super(),n},postRender:function(){var t=this;return we(this.getEl("inp")).on("change",function(e){t.state.set("value",e.target.value),t.fire("change",e)}),t._super()},renderHtml:function(){var e,t,n,i=this,r=i._id,o=i.settings,s=i.classPrefix,a=i.state.get("value")||"",l="",u="";return"spellcheck"in o&&(u+=' spellcheck="'+o.spellcheck+'"'),o.maxLength&&(u+=' maxlength="'+o.maxLength+'"'),o.size&&(u+=' size="'+o.size+'"'),o.subtype&&(u+=' type="'+o.subtype+'"'),n='<i id="'+r+'-status" class="mce-status mce-ico" style="display: none"></i>',i.disabled()&&(u+=' disabled="disabled"'),(e=o.icon)&&"caret"!==e&&(e=s+"ico "+s+"i-"+o.icon),t=i.state.get("text"),(e||t)&&(l='<div id="'+r+'-open" class="'+s+"btn "+s+'open" tabIndex="-1" role="button"><button id="'+r+'-action" type="button" hidefocus="1" tabindex="-1">'+("caret"!==e?'<i class="'+e+'"></i>':'<i class="'+s+'caret"></i>')+(t?(e?" ":"")+t:"")+"</button></div>",i.classes.add("has-open")),'<div id="'+r+'" class="'+i.classes+'"><input id="'+r+'-inp" class="'+s+'textbox" value="'+i.encode(a,!1)+'" hidefocus="1"'+u+' placeholder="'+i.encode(o.placeholder)+'" />'+n+l+"</div>"},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},showAutoComplete:function(e,i){var r=this;if(0!==e.length){r.menu?r.menu.items().remove():r.menu=b.create({type:"menu",classes:"combobox-menu",layout:"flow"}).parent(r).renderTo(),w.each(e,function(e){var t,n;r.menu.add({text:e.title,url:e.previewUrl,match:i,classes:"menu-item-ellipsis",onclick:(t=e.value,n=e.title,function(){r.fire("selectitem",{title:n,value:t})})})}),r.menu.renderNew(),r.hideMenu(),r.menu.on("cancel",function(e){e.control.parent()===r.menu&&(e.stopPropagation(),r.focus(),r.hideMenu())}),r.menu.on("select",function(){r.focus()});var t=r.layoutRect().w;r.menu.layoutRect({w:t,minW:0,maxW:t}),r.menu.repaint(),r.menu.reflow(),r.menu.show(),r.menu.moveRel(r.getEl(),r.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])}else r.hideMenu()},hideMenu:function(){this.menu&&this.menu.hide()},bindStates:function(){var r=this;r.state.on("change:value",function(e){r.getEl("inp").value!==e.value&&(r.getEl("inp").value=e.value)}),r.state.on("change:disabled",function(e){r.getEl("inp").disabled=e.value}),r.state.on("change:statusLevel",function(e){var t=r.getEl("status"),n=r.classPrefix,i=e.value;Ce.css(t,"display","none"===i?"none":""),Ce.toggleClass(t,n+"i-checkmark","ok"===i),Ce.toggleClass(t,n+"i-warning","warn"===i),Ce.toggleClass(t,n+"i-error","error"===i),r.classes.toggle("has-status","none"!==i),r.repaint()}),Ce.on(r.getEl("status"),"mouseleave",function(){r.tooltip().hide()}),r.on("cancel",function(e){r.menu&&r.menu.visible()&&(e.stopPropagation(),r.hideMenu())});var n=function(e,t){t&&0<t.items().length&&t.items().eq(e)[0].focus()};return r.on("keydown",function(e){var t=e.keyCode;"INPUT"===e.target.nodeName&&(t===Zt.DOWN?(e.preventDefault(),r.fire("autocomplete"),n(0,r.menu)):t===Zt.UP&&(e.preventDefault(),n(-1,r.menu)))}),r._super()},remove:function(){we(this.getEl("inp")).off(),this.menu&&this.menu.remove(),this._super()}}),en=Qt.extend({init:function(e){var t=this;e.spellcheck=!1,e.onaction&&(e.icon="none"),t._super(e),t.classes.add("colorbox"),t.on("change keyup postrender",function(){t.repaintColor(t.value())})},repaintColor:function(e){var t=this.getEl("open"),n=t?t.getElementsByTagName("i")[0]:null;if(n)try{n.style.background=e}catch(i){}},bindStates:function(){var t=this;return t.state.on("change:value",function(e){t.state.get("rendered")&&t.repaintColor(e.value)}),t._super()}}),tn=jt.extend({showPanel:function(){var t=this,e=t.settings;if(t.classes.add("opened"),t.panel)t.panel.show();else{var n=e.panel;n.type&&(n={layout:"grid",items:n}),n.role=n.role||"dialog",n.popover=!0,n.autohide=!0,n.ariaRoot=!0,t.panel=new kt(n).on("hide",function(){t.classes.remove("opened")}).on("cancel",function(e){e.stopPropagation(),t.focus(),t.hidePanel()}).parent(t).renderTo(t.getContainerElm()),t.panel.fire("show"),t.panel.reflow()}var i=t.panel.testMoveRel(t.getEl(),e.popoverAlign||(t.isRtl()?["bc-tc","bc-tl","bc-tr"]:["bc-tc","bc-tr","bc-tl","tc-bc","tc-br","tc-bl"]));t.panel.classes.toggle("start","l"===i.substr(-1)),t.panel.classes.toggle("end","r"===i.substr(-1));var r="t"===i.substr(0,1);t.panel.classes.toggle("bottom",!r),t.panel.classes.toggle("top",r),t.panel.moveRel(t.getEl(),i)},hidePanel:function(){this.panel&&this.panel.hide()},postRender:function(){var t=this;return t.aria("haspopup",!0),t.on("click",function(e){e.control===t&&(t.panel&&t.panel.visible()?t.hidePanel():(t.showPanel(),t.panel.focus(!!e.aria)))}),t._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}}),nn=v.DOM,rn=tn.extend({init:function(e){this._super(e),this.classes.add("splitbtn"),this.classes.add("colorbutton")},color:function(e){return e?(this._color=e,this.getEl("preview").style.backgroundColor=e,this):this._color},resetColor:function(){return this._color=null,this.getEl("preview").style.backgroundColor=null,this},renderHtml:function(){var e=this,t=e._id,n=e.classPrefix,i=e.state.get("text"),r=e.settings.icon?n+"ico "+n+"i-"+e.settings.icon:"",o=e.settings.image?" style=\"background-image: url('"+e.settings.image+"')\"":"",s="";return i&&(e.classes.add("btn-has-text"),s='<span class="'+n+'txt">'+e.encode(i)+"</span>"),'<div id="'+t+'" class="'+e.classes+'" role="button" tabindex="-1" aria-haspopup="true"><button role="presentation" hidefocus="1" type="button" tabindex="-1">'+(r?'<i class="'+r+'"'+o+"></i>":"")+'<span id="'+t+'-preview" class="'+n+'preview"></span>'+s+'</button><button type="button" class="'+n+'open" hidefocus="1" tabindex="-1"> <i class="'+n+'caret"></i></button></div>'},postRender:function(){var t=this,n=t.settings.onclick;return t.on("click",function(e){e.aria&&"down"===e.aria.key||e.control!==t||nn.getParent(e.target,"."+t.classPrefix+"open")||(e.stopImmediatePropagation(),n.call(t,e))}),delete t.settings.onclick,t._super()}}),on=tinymce.util.Tools.resolve("tinymce.util.Color"),sn=Wt.extend({Defaults:{classes:"widget colorpicker"},init:function(e){this._super(e)},postRender:function(){var n,i,r,o,s,a=this,l=a.color();function u(e,t){var n,i,r=Ce.getPos(e);return n=t.pageX-r.x,i=t.pageY-r.y,{x:n=Math.max(0,Math.min(n/e.clientWidth,1)),y:i=Math.max(0,Math.min(i/e.clientHeight,1))}}function c(e,t){var n=(360-e.h)/360;Ce.css(r,{top:100*n+"%"}),t||Ce.css(s,{left:e.s+"%",top:100-e.v+"%"}),o.style.background=on({s:100,v:100,h:e.h}).toHex(),a.color().parse({s:e.s,v:e.v,h:e.h})}function e(e){var t;t=u(o,e),n.s=100*t.x,n.v=100*(1-t.y),c(n),a.fire("change")}function t(e){var t;t=u(i,e),(n=l.toHsv()).h=360*(1-t.y),c(n,!0),a.fire("change")}i=a.getEl("h"),r=a.getEl("hp"),o=a.getEl("sv"),s=a.getEl("svp"),a._repaint=function(){c(n=l.toHsv())},a._super(),a._svdraghelper=new ft(a._id+"-sv",{start:e,drag:e}),a._hdraghelper=new ft(a._id+"-h",{start:t,drag:t}),a._repaint()},rgb:function(){return this.color().toRgb()},value:function(e){if(!arguments.length)return this.color().toHex();this.color().parse(e),this._rendered&&this._repaint()},color:function(){return this._color||(this._color=on()),this._color},renderHtml:function(){var e,t=this._id,o=this.classPrefix,s="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000";return e='<div id="'+t+'-h" class="'+o+'colorpicker-h" style="background: -ms-linear-gradient(top,'+s+");background: linear-gradient(to bottom,"+s+');">'+function(){var e,t,n,i,r="";for(n="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",e=0,t=(i=s.split(",")).length-1;e<t;e++)r+='<div class="'+o+'colorpicker-h-chunk" style="height:'+100/t+"%;"+n+i[e]+",endColorstr="+i[e+1]+");-ms-"+n+i[e]+",endColorstr="+i[e+1]+')"></div>';return r}()+'<div id="'+t+'-hp" class="'+o+'colorpicker-h-marker"></div></div>','<div id="'+t+'" class="'+this.classes+'"><div id="'+t+'-sv" class="'+o+'colorpicker-sv"><div class="'+o+'colorpicker-overlay1"><div class="'+o+'colorpicker-overlay2"><div id="'+t+'-svp" class="'+o+'colorpicker-selector1"><div class="'+o+'colorpicker-selector2"></div></div></div></div></div>'+e+"</div>"}}),an=Wt.extend({init:function(e){e=w.extend({height:100,text:"Drop an image here",multiple:!1,accept:null},e),this._super(e),this.classes.add("dropzone"),e.multiple&&this.classes.add("multiple")},renderHtml:function(){var e,t,n=this.settings;return e={id:this._id,hidefocus:"1"},t=Ce.create("div",e,"<span>"+this.translate(n.text)+"</span>"),n.height&&Ce.css(t,"height",n.height+"px"),n.width&&Ce.css(t,"width",n.width+"px"),t.className=this.classes,t.outerHTML},postRender:function(){var i=this,e=function(e){e.preventDefault(),i.classes.toggle("dragenter"),i.getEl().className=i.classes};i._super(),i.$el.on("dragover",function(e){e.preventDefault()}),i.$el.on("dragenter",e),i.$el.on("dragleave",e),i.$el.on("drop",function(e){if(e.preventDefault(),!i.state.get("disabled")){var t=function(e){var t=i.settings.accept;if("string"!=typeof t)return e;var n=new RegExp("("+t.split(/\s*,\s*/).join("|")+")$","i");return w.grep(e,function(e){return n.test(e.name)})}(e.dataTransfer.files);i.value=function(){return t.length?i.settings.multiple?t:t[0]:null},t.length&&i.fire("change",e)}})},remove:function(){this.$el.off(),this._super()}}),ln=Wt.extend({init:function(e){var n=this;e.delimiter||(e.delimiter="\xbb"),n._super(e),n.classes.add("path"),n.canFocus=!0,n.on("click",function(e){var t;(t=e.target.getAttribute("data-index"))&&n.fire("select",{value:n.row()[t],index:t})}),n.row(n.settings.row)},focus:function(){return this.getEl().firstChild.focus(),this},row:function(e){return arguments.length?(this.state.set("row",e),this):this.state.get("row")},renderHtml:function(){return'<div id="'+this._id+'" class="'+this.classes+'">'+this._getDataPathHtml(this.state.get("row"))+"</div>"},bindStates:function(){var t=this;return t.state.on("change:row",function(e){t.innerHtml(t._getDataPathHtml(e.value))}),t._super()},_getDataPathHtml:function(e){var t,n,i=e||[],r="",o=this.classPrefix;for(t=0,n=i.length;t<n;t++)r+=(0<t?'<div class="'+o+'divider" aria-hidden="true"> '+this.settings.delimiter+" </div>":"")+'<div role="button" class="'+o+"path-item"+(t===n-1?" "+o+"last":"")+'" data-index="'+t+'" tabindex="-1" id="'+this._id+"-"+t+'" aria-level="'+(t+1)+'">'+i[t].name+"</div>";return r||(r='<div class="'+o+'path-item">\xa0</div>'),r}}),un=ln.extend({postRender:function(){var o=this,s=o.settings.editor;function a(e){if(1===e.nodeType){if("BR"===e.nodeName||e.getAttribute("data-mce-bogus"))return!0;if("bookmark"===e.getAttribute("data-mce-type"))return!0}return!1}return!1!==s.settings.elementpath&&(o.on("select",function(e){s.focus(),s.selection.select(this.row()[e.index].element),s.nodeChanged()}),s.on("nodeChange",function(e){for(var t=[],n=e.parents,i=n.length;i--;)if(1===n[i].nodeType&&!a(n[i])){var r=s.fire("ResolveName",{name:n[i].nodeName.toLowerCase(),target:n[i]});if(r.isDefaultPrevented()||t.push({name:r.name,element:n[i]}),r.isPropagationStopped())break}o.row(t)})),o._super()}}),cn=ct.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.classes.add("formitem"),t.preRender(e),'<div id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1">'+(e.settings.title?'<div id="'+e._id+'-title" class="'+n+'title">'+e.settings.title+"</div>":"")+'<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></div>"}}),dn=ct.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:15,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var i=this,e=i.items();i.settings.formItemDefaults||(i.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),e.each(function(e){var t,n=e.settings.label;n&&((t=new cn(w.extend({items:{type:"label",id:e._id+"-l",text:n,flex:0,forId:e._id,disabled:e.disabled()}},i.settings.formItemDefaults))).type="formitem",e.aria("labelledby",e._id+"-l"),"undefined"==typeof e.settings.flex&&(e.settings.flex=1),i.replace(e,t),t.add(e))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){this._super(),this.fromJSON(this.settings.data)},bindStates:function(){var n=this;function e(){var e,t,i=0,r=[];if(!1!==n.settings.labelGapCalc)for(("children"===n.settings.labelGapCalc?n.find("formitem"):n.items()).filter("formitem").each(function(e){var t=e.items()[0],n=t.getEl().clientWidth;i=i<n?n:i,r.push(t)}),t=n.settings.labelGap||0,e=r.length;e--;)r[e].settings.minWidth=i+t}n._super(),n.on("show",e),e()}}),fn=dn.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var e=this,t=e._layout,n=e.classPrefix;return e.preRender(),t.preRender(e),'<fieldset id="'+e._id+'" class="'+e.classes+'" hidefocus="1" tabindex="-1">'+(e.settings.title?'<legend id="'+e._id+'-title" class="'+n+'fieldset-title">'+e.settings.title+"</legend>":"")+'<div id="'+e._id+'-body" class="'+e.bodyClasses+'">'+(e.settings.html||"")+t.renderHtml(e)+"</div></fieldset>"}}),hn=0,mn=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:k(e)}},gn={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",e),"HTML must have a single root node";return mn(n.childNodes[0])},fromTag:function(e,t){var n=(t||document).createElement(e);return mn(n)},fromText:function(e,t){var n=(t||document).createTextNode(e);return mn(n)},fromDom:mn,fromPoint:function(e,t,n){var i=e.dom();return D.from(i.elementFromPoint(t,n)).map(mn)}},pn=function(n){var i,r=!1;return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return r||(r=!0,i=n.apply(null,e)),i}},vn={ATTRIBUTE:Node.ATTRIBUTE_NODE,CDATA_SECTION:Node.CDATA_SECTION_NODE,COMMENT:Node.COMMENT_NODE,DOCUMENT:Node.DOCUMENT_NODE,DOCUMENT_TYPE:Node.DOCUMENT_TYPE_NODE,DOCUMENT_FRAGMENT:Node.DOCUMENT_FRAGMENT_NODE,ELEMENT:Node.ELEMENT_NODE,TEXT:Node.TEXT_NODE,PROCESSING_INSTRUCTION:Node.PROCESSING_INSTRUCTION_NODE,ENTITY_REFERENCE:Node.ENTITY_REFERENCE_NODE,ENTITY:Node.ENTITY_NODE,NOTATION:Node.NOTATION_NODE},bn=function(e){return e.dom().nodeType},yn=function(t){return function(e){return bn(e)===t}},xn=(yn(vn.ELEMENT),yn(vn.TEXT),yn(vn.DOCUMENT),pn(function(){return xn(gn.fromDom(document))}),function(e){var t=e.dom().body;if(null===t||t===undefined)throw"Body is not available yet";return gn.fromDom(t)}),wn=("undefined"!=typeof window?window:Function("return this;")(),function(e,t){var n=function(e,t){for(var n=0;n<e.length;n++){var i=e[n];if(i.test(t))return i}return undefined}(e,t);if(!n)return{major:0,minor:0};var i=function(e){return Number(t.replace(n,"$"+e))};return Cn(i(1),i(2))}),_n=function(){return Cn(0,0)},Cn=function(e,t){return{major:e,minor:t}},Rn={nu:Cn,detect:function(e,t){var n=String(t).toLowerCase();return 0===e.length?_n():wn(e,n)},unknown:_n},En="Firefox",kn=function(e,t){return function(){return t===e}},Tn=function(e){var t=e.current;return{current:t,version:e.version,isEdge:kn("Edge",t),isChrome:kn("Chrome",t),isIE:kn("IE",t),isOpera:kn("Opera",t),isFirefox:kn(En,t),isSafari:kn("Safari",t)}},Hn={unknown:function(){return Tn({current:undefined,version:Rn.unknown()})},nu:Tn,edge:k("Edge"),chrome:k("Chrome"),ie:k("IE"),opera:k("Opera"),firefox:k(En),safari:k("Safari")},Sn="Windows",Mn="Android",Nn="Solaris",Pn="FreeBSD",Dn=function(e,t){return function(){return t===e}},Wn=function(e){var t=e.current;return{current:t,version:e.version,isWindows:Dn(Sn,t),isiOS:Dn("iOS",t),isAndroid:Dn(Mn,t),isOSX:Dn("OSX",t),isLinux:Dn("Linux",t),isSolaris:Dn(Nn,t),isFreeBSD:Dn(Pn,t)}},On={unknown:function(){return Wn({current:undefined,version:Rn.unknown()})},nu:Wn,windows:k(Sn),ios:k("iOS"),android:k(Mn),linux:k("Linux"),osx:k("OSX"),solaris:k(Nn),freebsd:k(Pn)},An=function(e,t){var n=String(t).toLowerCase();return Z(e,function(e){return e.search(n)})},Bn=function(e,n){return An(e,n).map(function(e){var t=Rn.detect(e.versionRegexes,n);return{current:e.name,version:t}})},Ln=function(e,n){return An(e,n).map(function(e){var t=Rn.detect(e.versionRegexes,n);return{current:e.name,version:t}})},In=function(e,t){return-1!==e.indexOf(t)},zn=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Fn=function(t){return function(e){return In(e,t)}},Un=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return In(e,"edge/")&&In(e,"chrome")&&In(e,"safari")&&In(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,zn],search:function(e){return In(e,"chrome")&&!In(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return In(e,"msie")||In(e,"trident")}},{name:"Opera",versionRegexes:[zn,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Fn("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Fn("firefox")},{name:"Safari",versionRegexes:[zn,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(In(e,"safari")||In(e,"mobile/"))&&In(e,"applewebkit")}}],Vn=[{name:"Windows",search:Fn("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return In(e,"iphone")||In(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Fn("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Fn("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Fn("linux"),versionRegexes:[]},{name:"Solaris",search:Fn("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Fn("freebsd"),versionRegexes:[]}],Yn={browsers:k(Un),oses:k(Vn)},$n=function(e){var t,n,i,r,o,s,a,l,u,c,d,f=Yn.browsers(),h=Yn.oses(),m=Bn(f,e).fold(Hn.unknown,Hn.nu),g=Ln(h,e).fold(On.unknown,On.nu);return{browser:m,os:g,deviceType:(n=m,i=e,r=(t=g).isiOS()&&!0===/ipad/i.test(i),o=t.isiOS()&&!r,s=t.isAndroid()&&3===t.version.major,a=t.isAndroid()&&4===t.version.major,l=r||s||a&&!0===/mobile/i.test(i),u=t.isiOS()||t.isAndroid(),c=u&&!l,d=n.isSafari()&&t.isiOS()&&!1===/safari/i.test(i),{isiPad:k(r),isiPhone:k(o),isTablet:k(l),isPhone:k(c),isTouch:k(u),isAndroid:t.isAndroid,isiOS:t.isiOS,isWebView:k(d)})}},Xn=pn(function(){var e=navigator.userAgent;return $n(e)}),qn=vn.ELEMENT,jn=vn.DOCUMENT,Jn=function(e){return e.nodeType!==qn&&e.nodeType!==jn||0===e.childElementCount},Gn={all:function(e,t){var n=t===undefined?document:t.dom();return Jn(n)?[]:J(n.querySelectorAll(e),gn.fromDom)},is:function(e,t){var n=e.dom();if(n.nodeType!==qn)return!1;if(n.matches!==undefined)return n.matches(t);if(n.msMatchesSelector!==undefined)return n.msMatchesSelector(t);if(n.webkitMatchesSelector!==undefined)return n.webkitMatchesSelector(t);if(n.mozMatchesSelector!==undefined)return n.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")},one:function(e,t){var n=t===undefined?document:t.dom();return Jn(n)?D.none():D.from(n.querySelector(e)).map(gn.fromDom)}},Kn=(Xn().browser.isIE(),function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t]}("element","offset"),function(e,t){return Gn.all(t,e)}),Zn=w.trim,Qn=function(t){return function(e){if(e&&1===e.nodeType){if(e.contentEditable===t)return!0;if(e.getAttribute("data-mce-contenteditable")===t)return!0}return!1}},ei=Qn("true"),ti=Qn("false"),ni=function(e,t,n,i,r){return{type:e,title:t,url:n,level:i,attach:r}},ii=function(e){return e.innerText||e.textContent},ri=function(e){return e.id?e.id:(t="h",n=(new Date).getTime(),t+"_"+Math.floor(1e9*Math.random())+ ++hn+String(n));var t,n},oi=function(e){return(t=e)&&"A"===t.nodeName&&(t.id||t.name)&&ai(e);var t},si=function(e){return e&&/^(H[1-6])$/.test(e.nodeName)},ai=function(e){return function(e){for(;e=e.parentNode;){var t=e.contentEditable;if(t&&"inherit"!==t)return ei(e)}return!1}(e)&&!ti(e)},li=function(e){return si(e)&&ai(e)},ui=function(e){var t,n=ri(e);return ni("header",ii(e),"#"+n,si(t=e)?parseInt(t.nodeName.substr(1),10):0,function(){e.id=n})},ci=function(e){var t=e.id||e.name,n=ii(e);return ni("anchor",n||"#"+t,"#"+t,0,E)},di=function(e){var t,n;return t="h1,h2,h3,h4,h5,h6,a:not([href])",n=e,J(Kn(gn.fromDom(n),t),function(e){return e.dom()})},fi=function(e){return 0<Zn(e.title).length},hi=function(e){var t,n=di(e);return K((t=n,J(K(t,li),ui)).concat(J(K(n,oi),ci)),fi)},mi={},gi=function(e){return{title:e.title,value:{title:{raw:e.title},url:e.url,attach:e.attach}}},pi=function(e,t){return{title:e,value:{title:e,url:t,attach:E}}},vi=function(e,t,n){var i=t in e?e[t]:n;return!1===i?null:i},bi=function(e,i,r,t){var n,o,s,a,l,u,c={title:"-"},d=function(e){var t=e.hasOwnProperty(r)?e[r]:[],n=K(t,function(e){return t=e,!j(i,function(e){return e.url===t});var t});return w.map(n,function(e){return{title:e,value:{title:e,url:e,attach:E}}})},f=function(t){var e,n=K(i,function(e){return e.type===t});return e=n,w.map(e,gi)};return!1===t.typeahead_urls?[]:"file"===r?(n=[xi(e,d(mi)),xi(e,f("header")),xi(e,(a=f("anchor"),l=vi(t,"anchor_top","#top"),u=vi(t,"anchor_bottom","#bottom"),null!==l&&a.unshift(pi("<top>",l)),null!==u&&a.push(pi("<bottom>",u)),a))],o=function(e,t){return 0===e.length||0===t.length?e.concat(t):e.concat(c,t)},s=[],G(n,function(e){s=o(s,e)}),s):xi(e,d(mi))},yi=function(e,t){var n,i,r,o=mi[t];/^https?/.test(e)&&(o?(n=o,i=e,r=q(n,i),-1===r?D.none():D.some(r)).isNone()&&(mi[t]=o.slice(0,5).concat(e)):mi[t]=[e])},xi=function(e,t){var n=e.toLowerCase(),i=w.grep(t,function(e){return-1!==e.title.toLowerCase().indexOf(n)});return 1===i.length&&i[0].title===e?[]:i},wi=function(o,e,n){var i=e.filepicker_validator_handler;i&&o.state.on("change:value",function(e){var t;0!==(t=e.value).length?i({url:t,type:n},function(e){var t,n,i,r=(n=(t=e).status,i=t.message,"valid"===n?{status:"ok",message:i}:"unknown"===n?{status:"warn",message:i}:"invalid"===n?{status:"warn",message:i}:{status:"none",message:""});o.statusMessage(r.message),o.statusLevel(r.status)}):o.statusLevel("none")})},_i=Qt.extend({Statics:{clearHistory:function(){mi={}}},init:function(e){var t,n,i,r,o,s,a,l,u=this,c=window.tinymce?window.tinymce.activeEditor:h.activeEditor,d=c.settings,f=e.filetype;e.spellcheck=!1,(i=d.file_picker_types||d.file_browser_callback_types)&&(i=w.makeMap(i,/[, ]/)),i&&!i[f]||(!(n=d.file_picker_callback)||i&&!i[f]?!(n=d.file_browser_callback)||i&&!i[f]||(t=function(){n(u.getEl("inp").id,u.value(),f,window)}):t=function(){var e=u.fire("beforecall").meta;e=w.extend({filetype:f},e),n.call(c,function(e,t){u.value(e).fire("change",{meta:t})},u.value(),e)}),t&&(e.icon="browse",e.onaction=t),u._super(e),u.classes.add("filepicker"),r=u,o=d,s=c.getBody(),a=f,l=function(e){var t=hi(s),n=bi(e,t,a,o);r.showAutoComplete(n,e)},r.on("autocomplete",function(){l(r.value())}),r.on("selectitem",function(e){var t=e.value;r.value(t.url);var n,i=(n=t.title).raw?n.raw:n;"image"===a?r.fire("change",{meta:{alt:i,attach:t.attach}}):r.fire("change",{meta:{text:i,attach:t.attach}}),r.focus()}),r.on("click",function(e){0===r.value().length&&"INPUT"===e.target.nodeName&&l("")}),r.on("PostRender",function(){r.getRoot().on("submit",function(e){e.isDefaultPrevented()||yi(r.value(),a)})}),wi(u,d,f)}}),Ci=qt.extend({recalc:function(e){var t=e.layoutRect(),n=e.paddingBox;e.items().filter(":visible").each(function(e){e.layoutRect({x:n.left,y:n.top,w:t.innerW-n.right-n.left,h:t.innerH-n.top-n.bottom}),e.recalc&&e.recalc()})}}),Ri=qt.extend({recalc:function(e){var t,n,i,r,o,s,a,l,u,c,d,f,h,m,g,p,v,b,y,x,w,_,C,R,E,k,T,H,S,M,N,P,D,W,O,A,B,L=[],I=Math.max,z=Math.min;for(i=e.items().filter(":visible"),r=e.layoutRect(),o=e.paddingBox,s=e.settings,f=e.isRtl()?s.direction||"row-reversed":s.direction,a=s.align,l=e.isRtl()?s.pack||"end":s.pack,u=s.spacing||0,"row-reversed"!==f&&"column-reverse"!==f||(i=i.set(i.toArray().reverse()),f=f.split("-")[0]),"column"===f?(R="y",_="h",C="minH",E="maxH",T="innerH",k="top",H="deltaH",S="contentH",W="left",P="w",M="x",N="innerW",D="minW",O="right",A="deltaW",B="contentW"):(R="x",_="w",C="minW",E="maxW",T="innerW",k="left",H="deltaW",S="contentW",W="top",P="h",M="y",N="innerH",D="minH",O="bottom",A="deltaH",B="contentH"),d=r[T]-o[k]-o[k],w=c=0,t=0,n=i.length;t<n;t++)m=(h=i[t]).layoutRect(),d-=t<n-1?u:0,0<(g=h.settings.flex)&&(c+=g,m[E]&&L.push(h),m.flex=g),d-=m[C],w<(p=o[W]+m[D]+o[O])&&(w=p);if((y={})[C]=d<0?r[C]-d+r[H]:r[T]-d+r[H],y[D]=w+r[A],y[S]=r[T]-d,y[B]=w,y.minW=z(y.minW,r.maxW),y.minH=z(y.minH,r.maxH),y.minW=I(y.minW,r.startMinWidth),y.minH=I(y.minH,r.startMinHeight),!r.autoResize||y.minW===r.minW&&y.minH===r.minH){for(b=d/c,t=0,n=L.length;t<n;t++)(v=(m=(h=L[t]).layoutRect())[E])<(p=m[C]+m.flex*b)?(d-=m[E]-m[C],c-=m.flex,m.flex=0,m.maxFlexSize=v):m.maxFlexSize=0;for(b=d/c,x=o[k],y={},0===c&&("end"===l?x=d+o[k]:"center"===l?(x=Math.round(r[T]/2-(r[T]-d)/2)+o[k])<0&&(x=o[k]):"justify"===l&&(x=o[k],u=Math.floor(d/(i.length-1)))),y[M]=o[W],t=0,n=i.length;t<n;t++)p=(m=(h=i[t]).layoutRect()).maxFlexSize||m[C],"center"===a?y[M]=Math.round(r[N]/2-m[P]/2):"stretch"===a?(y[P]=I(m[D]||0,r[N]-o[W]-o[O]),y[M]=o[W]):"end"===a&&(y[M]=r[N]-m[P]-o.top),0<m.flex&&(p+=m.flex*b),y[_]=p,y[R]=x,h.layoutRect(y),h.recalc&&h.recalc(),x+=p+u}else if(y.w=y.minW,y.h=y.minH,e.layoutRect(y),this.recalc(e),null===e._lastRect){var F=e.parent();F&&(F._lastRect=null,F.recalc())}}}),Ei=Xt.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(e){e.items().filter(":visible").each(function(e){e.recalc&&e.recalc()})},isNative:function(){return!0}}),ki=function(e,t){return Gn.one(t,e)},Ti=function(e,t){return function(){e.execCommand("mceToggleFormat",!1,t)}},Hi=function(e,t,n){var i=function(e){n(e,t)};e.formatter?e.formatter.formatChanged(t,i):e.on("init",function(){e.formatter.formatChanged(t,i)})},Si=function(e,n){return function(t){Hi(e,n,function(e){t.control.active(e)})}},Mi=function(i){var t=["alignleft","aligncenter","alignright","alignjustify"],r="alignleft",e=[{text:"Left",icon:"alignleft",onclick:Ti(i,"alignleft")},{text:"Center",icon:"aligncenter",onclick:Ti(i,"aligncenter")},{text:"Right",icon:"alignright",onclick:Ti(i,"alignright")},{text:"Justify",icon:"alignjustify",onclick:Ti(i,"alignjustify")}];i.addMenuItem("align",{text:"Align",menu:e}),i.addButton("align",{type:"menubutton",icon:r,menu:e,onShowMenu:function(e){var n=e.control.menu;w.each(t,function(t,e){n.items().eq(e).each(function(e){return e.active(i.formatter.match(t))})})},onPostRender:function(e){var n=e.control;w.each(t,function(t,e){Hi(i,t,function(e){n.icon(r),e&&n.icon(t)})})}}),w.each({alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"],alignnone:["No alignment","JustifyNone"]},function(e,t){i.addButton(t,{active:!1,tooltip:e[0],cmd:e[1],onPostRender:Si(i,t)})})},Ni=function(e){return e?e.split(",")[0]:""},Pi=function(l,u){return function(){var a=this;a.state.set("value",null),l.on("init nodeChange",function(e){var t,n,i,r,o=l.queryCommandValue("FontName"),s=(t=u,r=(n=o)?n.toLowerCase():"",w.each(t,function(e){e.value.toLowerCase()===r&&(i=e.value)}),w.each(t,function(e){i||Ni(e.value).toLowerCase()!==Ni(r).toLowerCase()||(i=e.value)}),i);a.value(s||null),!s&&o&&a.text(Ni(o))})}},Di=function(n){n.addButton("fontselect",function(){var e,t=(e=function(e){for(var t=(e=e.replace(/;$/,"").split(";")).length;t--;)e[t]=e[t].split("=");return e}(n.settings.font_formats||"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats"),w.map(e,function(e){return{text:{raw:e[0]},value:e[1],textStyle:-1===e[1].indexOf("dings")?"font-family:"+e[1]:""}}));return{type:"listbox",text:"Font Family",tooltip:"Font Family",values:t,fixedWidth:!0,onPostRender:Pi(n,t),onselect:function(e){e.control.settings.value&&n.execCommand("FontName",!1,e.control.settings.value)}}})},Wi=function(e){Di(e)},Oi=function(e,t){return/[0-9.]+px$/.test(e)?(n=72*parseInt(e,10)/96,i=t||0,r=Math.pow(10,i),Math.round(n*r)/r+"pt"):e;var n,i,r},Ai=function(e,t,n){var i;return w.each(e,function(e){e.value===n?i=n:e.value===t&&(i=t)}),i},Bi=function(n){n.addButton("fontsizeselect",function(){var e,s,a,t=(e=n.settings.fontsize_formats||"8pt 10pt 12pt 14pt 18pt 24pt 36pt",w.map(e.split(" "),function(e){var t=e,n=e,i=e.split("=");return 1<i.length&&(t=i[0],n=i[1]),{text:t,value:n}}));return{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:t,fixedWidth:!0,onPostRender:(s=n,a=t,function(){var o=this;s.on("init nodeChange",function(e){var t,n,i,r;if(t=s.queryCommandValue("FontSize"))for(i=3;!r&&0<=i;i--)n=Oi(t,i),r=Ai(a,n,t);o.value(r||null),r||o.text(n)})}),onclick:function(e){e.control.settings.value&&n.execCommand("FontSize",!1,e.control.settings.value)}}})},Li=function(e){Bi(e)},Ii=function(n,e){var i=e.length;return w.each(e,function(e){e.menu&&(e.hidden=0===Ii(n,e.menu));var t=e.format;t&&(e.hidden=!n.formatter.canApply(t)),e.hidden&&i--}),i},zi=function(n,e){var i=e.items().length;return e.items().each(function(e){e.menu&&e.visible(0<zi(n,e.menu)),!e.menu&&e.settings.menu&&e.visible(0<Ii(n,e.settings.menu));var t=e.settings.format;t&&e.visible(n.formatter.canApply(t)),e.visible()||i--}),i},Fi=function(e){var i,r,o,t,s,n,a,l,u=(r=0,o=[],t=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}],s=function(e){var i=[];if(e)return w.each(e,function(e){var t={text:e.title,icon:e.icon};if(e.items)t.menu=s(e.items);else{var n=e.format||"custom"+r++;e.format||(e.name=n,o.push(e)),t.format=n,t.cmd=e.cmd}i.push(t)}),i},(i=e).on("init",function(){w.each(o,function(e){i.formatter.register(e.name,e)})}),{type:"menu",items:i.settings.style_formats_merge?i.settings.style_formats?s(t.concat(i.settings.style_formats)):s(t):s(i.settings.style_formats||t),onPostRender:function(e){i.fire("renderFormatsMenu",{control:e.control})},itemDefaults:{preview:!0,textStyle:function(){if(this.settings.format)return i.formatter.getCssText(this.settings.format)},onPostRender:function(){var n=this;n.parent().on("show",function(){var e,t;(e=n.settings.format)&&(n.disabled(!i.formatter.canApply(e)),n.active(i.formatter.match(e))),(t=n.settings.cmd)&&n.active(i.queryCommandState(t))})},onclick:function(){this.settings.format&&Ti(i,this.settings.format)(),this.settings.cmd&&i.execCommand(this.settings.cmd)}}});n=u,e.addMenuItem("formats",{text:"Formats",menu:n}),l=u,(a=e).addButton("styleselect",{type:"menubutton",text:"Formats",menu:l,onShowMenu:function(){a.settings.style_formats_autohide&&zi(a,this.menu)}})},Ui=function(n,e){return function(){var r,o,s,t=[];return w.each(e,function(e){t.push({text:e[0],value:e[1],textStyle:function(){return n.formatter.getCssText(e[1])}})}),{type:"listbox",text:e[0][0],values:t,fixedWidth:!0,onselect:function(e){if(e.control){var t=e.control.value();Ti(n,t)()}},onPostRender:(r=n,o=t,function(){var t=this;r.on("nodeChange",function(e){var n=r.formatter,i=null;w.each(e.parents,function(t){if(w.each(o,function(e){if(s?n.matchNode(t,s,{value:e.value})&&(i=e.value):n.matchNode(t,e.value)&&(i=e.value),i)return!1}),i)return!1}),t.value(i)})})}}},Vi=function(e){var t,n,i=function(e){for(var t=(e=e.replace(/;$/,"").split(";")).length;t--;)e[t]=e[t].split("=");return e}(e.settings.block_formats||"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre");e.addMenuItem("blockformats",{text:"Blocks",menu:(t=e,n=i,w.map(n,function(e){return{text:e[0],onclick:Ti(t,e[1]),textStyle:function(){return t.formatter.getCssText(e[1])}}}))}),e.addButton("formatselect",Ui(e,i))},Yi=function(t,e){var n,i;if("string"==typeof e)i=e.split(" ");else if(w.isArray(e))return function(e){for(var t=[],n=0,i=e.length;n<i;++n){if(!Array.prototype.isPrototypeOf(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);te.apply(t,e[n])}return t}(w.map(e,function(e){return Yi(t,e)}));return n=w.grep(i,function(e){return"|"===e||e in t.menuItems}),w.map(n,function(e){return"|"===e?{text:"-"}:t.menuItems[e]})},$i=function(e){return e&&"-"===e.text},Xi=function(e){var t=K(e,function(e,t,n){return!$i(e)||!$i(n[t-1])});return K(t,function(e,t,n){return!$i(e)||0<t&&t<n.length-1})},qi=function(e){var t,n,i,r,o=e.settings.insert_button_items;return Xi(o?Yi(e,o):(t=e,n="insert",i=[{text:"-"}],r=w.grep(t.menuItems,function(e){return e.context===n}),w.each(r,function(e){"before"===e.separator&&i.push({text:"|"}),e.prependToContext?i.unshift(e):i.push(e),"after"===e.separator&&i.push({text:"|"})}),i))},ji=function(e){var t;(t=e).addButton("insert",{type:"menubutton",icon:"insert",menu:[],oncreatemenu:function(){this.menu.add(qi(t)),this.menu.renderNew()}})},Ji=function(e){var n,i,r;n=e,w.each({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(e,t){n.addButton(t,{active:!1,tooltip:e,onPostRender:Si(n,t),onclick:Ti(n,t)})}),i=e,w.each({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"],removeformat:["Clear formatting","RemoveFormat"],remove:["Remove","Delete"]},function(e,t){i.addButton(t,{tooltip:e[0],cmd:e[1]})}),r=e,w.each({blockquote:["Blockquote","mceBlockQuote"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"]},function(e,t){r.addButton(t,{active:!1,tooltip:e[0],cmd:e[1],onPostRender:Si(r,t)})})},Gi=function(e){var n;Ji(e),n=e,w.each({bold:["Bold","Bold","Meta+B"],italic:["Italic","Italic","Meta+I"],underline:["Underline","Underline","Meta+U"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"],newdocument:["New document","mceNewDocument"],cut:["Cut","Cut","Meta+X"],copy:["Copy","Copy","Meta+C"],paste:["Paste","Paste","Meta+V"],selectall:["Select all","SelectAll","Meta+A"]},function(e,t){n.addMenuItem(t,{text:e[0],icon:t,shortcut:e[2],cmd:e[1]})}),n.addMenuItem("codeformat",{text:"Code",icon:"code",onclick:Ti(n,"code")})},Ki=function(n,i){return function(){var e=this,t=function(){var e="redo"===i?"hasRedo":"hasUndo";return!!n.undoManager&&n.undoManager[e]()};e.disabled(!t()),n.on("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",function(){e.disabled(n.readonly||!t())})}},Zi=function(e){var t,n;(t=e).addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onPostRender:Ki(t,"undo"),cmd:"undo"}),t.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onPostRender:Ki(t,"redo"),cmd:"redo"}),(n=e).addButton("undo",{tooltip:"Undo",onPostRender:Ki(n,"undo"),cmd:"undo"}),n.addButton("redo",{tooltip:"Redo",onPostRender:Ki(n,"redo"),cmd:"redo"})},Qi=function(e){var t,n;(t=e).addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:(n=t,function(){var t=this;n.on("VisualAid",function(e){t.active(e.hasVisual)}),t.active(n.hasVisual)}),cmd:"mceToggleVisualAid"})},er={setup:function(e){var t;e.rtl&&(st.rtl=!0),e.on("mousedown",function(){kt.hideAll()}),(t=e).settings.ui_container&&(fe.container=ki(gn.fromDom(document.body),t.settings.ui_container).fold(k(null),function(e){return e.dom()})),Wt.tooltips=!fe.iOS,st.translate=function(e){return h.translate(e)},Vi(e),Mi(e),Gi(e),Zi(e),Li(e),Wi(e),Fi(e),Qi(e),ji(e)}},tr=qt.extend({recalc:function(e){var t,n,i,r,o,s,a,l,u,c,d,f,h,m,g,p,v,b,y,x,w,_,C,R,E,k,T,H,S=[],M=[];t=e.settings,r=e.items().filter(":visible"),o=e.layoutRect(),i=t.columns||Math.ceil(Math.sqrt(r.length)),n=Math.ceil(r.length/i),b=t.spacingH||t.spacing||0,y=t.spacingV||t.spacing||0,x=t.alignH||t.align,w=t.alignV||t.align,p=e.paddingBox,H="reverseRows"in t?t.reverseRows:e.isRtl(),x&&"string"==typeof x&&(x=[x]),w&&"string"==typeof w&&(w=[w]);for(d=0;d<i;d++)S.push(0);for(f=0;f<n;f++)M.push(0);for(f=0;f<n;f++)for(d=0;d<i&&(c=r[f*i+d]);d++)R=(u=c.layoutRect()).minW,E=u.minH,S[d]=R>S[d]?R:S[d],M[f]=E>M[f]?E:M[f];for(k=o.innerW-p.left-p.right,d=_=0;d<i;d++)_+=S[d]+(0<d?b:0),k-=(0<d?b:0)+S[d];for(T=o.innerH-p.top-p.bottom,f=C=0;f<n;f++)C+=M[f]+(0<f?y:0),T-=(0<f?y:0)+M[f];if(_+=p.left+p.right,C+=p.top+p.bottom,(l={}).minW=_+(o.w-o.innerW),l.minH=C+(o.h-o.innerH),l.contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH,l.minW=Math.min(l.minW,o.maxW),l.minH=Math.min(l.minH,o.maxH),l.minW=Math.max(l.minW,o.startMinWidth),l.minH=Math.max(l.minH,o.startMinHeight),!o.autoResize||l.minW===o.minW&&l.minH===o.minH){var N;o.autoResize&&((l=e.layoutRect(l)).contentW=l.minW-o.deltaW,l.contentH=l.minH-o.deltaH),N="start"===t.packV?0:0<T?Math.floor(T/n):0;var P=0,D=t.flexWidths;if(D)for(d=0;d<D.length;d++)P+=D[d];else P=i;var W=k/P;for(d=0;d<i;d++)S[d]+=D?D[d]*W:W;for(m=p.top,f=0;f<n;f++){for(h=p.left,a=M[f]+N,d=0;d<i&&(c=r[H?f*i+i-1-d:f*i+d]);d++)g=c.settings,u=c.layoutRect(),s=Math.max(S[d],u.startMinWidth),u.x=h,u.y=m,"center"===(v=g.alignH||(x?x[d]||x[0]:null))?u.x=h+s/2-u.w/2:"right"===v?u.x=h+s-u.w:"stretch"===v&&(u.w=s),"center"===(v=g.alignV||(w?w[d]||w[0]:null))?u.y=m+a/2-u.h/2:"bottom"===v?u.y=m+a-u.h:"stretch"===v&&(u.h=a),c.layoutRect(u),h+=s+b,c.recalc&&c.recalc();m+=a+y}}else if(l.w=l.minW,l.h=l.minH,e.layoutRect(l),this.recalc(e),null===e._lastRect){var O=e.parent();O&&(O._lastRect=null,O.recalc())}}}),nr=Wt.extend({renderHtml:function(){var e=this;return e.classes.add("iframe"),e.canFocus=!1,'<iframe id="'+e._id+'" class="'+e.classes+'" tabindex="-1" src="'+(e.settings.url||"javascript:''")+'" frameborder="0"></iframe>'},src:function(e){this.getEl().src=e},html:function(e,t){var n=this,i=this.getEl().contentWindow.document.body;return i?(i.innerHTML=e,t&&t()):u.setTimeout(function(){n.html(e)}),this}}),ir=Wt.extend({init:function(e){this._super(e),this.classes.add("widget").add("infobox"),this.canFocus=!1},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},help:function(e){this.state.set("help",e)},renderHtml:function(){var e=this,t=e.classPrefix;return'<div id="'+e._id+'" class="'+e.classes+'"><div id="'+e._id+'-body">'+e.encode(e.state.get("text"))+'<button role="button" tabindex="-1"><i class="'+t+"ico "+t+'i-help"></i></button></div></div>'},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.getEl("body").firstChild.data=t.encode(e.value),t.state.get("rendered")&&t.updateLayoutRect()}),t.state.on("change:help",function(e){t.classes.toggle("has-help",e.value),t.state.get("rendered")&&t.updateLayoutRect()}),t._super()}}),rr=Wt.extend({init:function(e){var t=this;t._super(e),t.classes.add("widget").add("label"),t.canFocus=!1,e.multiline&&t.classes.add("autoscroll"),e.strong&&t.classes.add("strong")},initLayoutRect:function(){var e=this,t=e._super();return e.settings.multiline&&(Ce.getSize(e.getEl()).width>t.maxW&&(t.minW=t.maxW,e.classes.add("multiline")),e.getEl().style.width=t.minW+"px",t.startMinH=t.h=t.minH=Math.min(t.maxH,Ce.getSize(e.getEl()).height)),t},repaint:function(){return this.settings.multiline||(this.getEl().style.lineHeight=this.layoutRect().h+"px"),this._super()},severity:function(e){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(e)},renderHtml:function(){var e,t,n=this,i=n.settings.forId,r=n.settings.html?n.settings.html:n.encode(n.state.get("text"));return!i&&(t=n.settings.forName)&&(e=n.getRoot().find("#"+t)[0])&&(i=e._id),i?'<label id="'+n._id+'" class="'+n.classes+'"'+(i?' for="'+i+'"':"")+">"+r+"</label>":'<span id="'+n._id+'" class="'+n.classes+'">'+r+"</span>"},bindStates:function(){var t=this;return t.state.on("change:text",function(e){t.innerHtml(t.encode(e.value)),t.state.get("rendered")&&t.updateLayoutRect()}),t._super()}}),or=ct.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(e){this._super(e),this.classes.add("toolbar")},postRender:function(){return this.items().each(function(e){e.classes.add("toolbar-item")}),this._super()}}),sr=or.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}}),ar=jt.extend({init:function(e){var t=this;t._renderOpen=!0,t._super(e),e=t.settings,t.classes.add("menubtn"),e.fixedWidth&&t.classes.add("fixed-width"),t.aria("haspopup",!0),t.state.set("menu",e.menu||t.render())},showMenu:function(e){var t,n=this;if(n.menu&&n.menu.visible()&&!1!==e)return n.hideMenu();n.menu||(t=n.state.get("menu")||[],n.classes.add("opened"),t.length?t={type:"menu",animate:!0,items:t}:(t.type=t.type||"menu",t.animate=!0),t.renderTo?n.menu=t.parent(n).show().renderTo():n.menu=b.create(t).parent(n).renderTo(),n.fire("createmenu"),n.menu.reflow(),n.menu.on("cancel",function(e){e.control.parent()===n.menu&&(e.stopPropagation(),n.focus(),n.hideMenu())}),n.menu.on("select",function(){n.focus()}),n.menu.on("show hide",function(e){e.control===n.menu&&(n.activeMenu("show"===e.type),n.classes.toggle("opened","show"===e.type)),n.aria("expanded","show"===e.type)}).fire("show")),n.menu.show(),n.menu.layoutRect({w:n.layoutRect().w}),n.menu.repaint(),n.menu.moveRel(n.getEl(),n.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]),n.fire("showmenu")},hideMenu:function(){this.menu&&(this.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),this.menu.hide())},activeMenu:function(e){this.classes.toggle("active",e)},renderHtml:function(){var e,t=this,n=t._id,i=t.classPrefix,r=t.settings.icon,o=t.state.get("text"),s="";return(e=t.settings.image)?(r="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",o&&(t.classes.add("btn-has-text"),s='<span class="'+i+'txt">'+t.encode(o)+"</span>"),r=t.settings.icon?i+"ico "+i+"i-"+r:"",t.aria("role",t.parent()instanceof sr?"menuitem":"button"),'<div id="'+n+'" class="'+t.classes+'" tabindex="-1" aria-labelledby="'+n+'"><button id="'+n+'-open" role="presentation" type="button" tabindex="-1">'+(r?'<i class="'+r+'"'+e+"></i>":"")+s+' <i class="'+i+'caret"></i></button></div>'},postRender:function(){var r=this;return r.on("click",function(e){e.control===r&&function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1}(e.target,r.getEl())&&(r.focus(),r.showMenu(!e.aria),e.aria&&r.menu.items().filter(":visible")[0].focus())}),r.on("mouseenter",function(e){var t,n=e.control,i=r.parent();n&&i&&n instanceof ar&&n.parent()===i&&(i.items().filter("MenuButton").each(function(e){e.hideMenu&&e!==n&&(e.menu&&e.menu.visible()&&(t=!0),e.hideMenu())}),t&&(n.focus(),n.showMenu()))}),r._super()},bindStates:function(){var e=this;return e.state.on("change:menu",function(){e.menu&&e.menu.remove(),e.menu=null}),e._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}}),lr=kt.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(e){if(e.autohide=!0,e.constrainToViewport=!0,"function"==typeof e.items&&(e.itemsFactory=e.items,e.items=[]),e.itemDefaults)for(var t=e.items,n=t.length;n--;)t[n]=w.extend({},e.itemDefaults,t[n]);this._super(e),this.classes.add("menu"),e.animate&&11!==fe.ie&&this.classes.add("animate")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){this.hideAll(),this.fire("select")},load:function(){var t,n=this;function i(){n.throbber&&(n.throbber.hide(),n.throbber=null)}n.settings.itemsFactory&&(n.throbber||(n.throbber=new Mt(n.getEl("body"),!0),0===n.items().length?(n.throbber.show(),n.fire("loading")):n.throbber.show(100,function(){n.items().remove(),n.fire("loading")}),n.on("hide close",i)),n.requestTime=t=(new Date).getTime(),n.settings.itemsFactory(function(e){0!==e.length?n.requestTime===t&&(n.getEl().style.width="",n.getEl("body").style.width="",i(),n.items().remove(),n.getEl("body").innerHTML="",n.add(e),n.renderNew(),n.fire("loaded")):n.hide()}))},hideAll:function(){return this.find("menuitem").exec("hideMenu"),this._super()},preRender:function(){var n=this;return n.items().each(function(e){var t=e.settings;if(t.icon||t.image||t.selectable)return!(n._hasIcons=!0)}),n.settings.itemsFactory&&n.on("postrender",function(){n.settings.itemsFactory&&n.load()}),n.on("show hide",function(e){e.control===n&&("show"===e.type?u.setTimeout(function(){n.classes.add("in")},0):n.classes.remove("in"))}),n._super()}}),ur=ar.extend({init:function(i){var t,r,o,n,s=this;s._super(i),i=s.settings,s._values=t=i.values,t&&("undefined"!=typeof i.value&&function e(t){for(var n=0;n<t.length;n++){if(r=t[n].selected||i.value===t[n].value)return o=o||t[n].text,s.state.set("value",t[n].value),!0;if(t[n].menu&&e(t[n].menu))return!0}}(t),!r&&0<t.length&&(o=t[0].text,s.state.set("value",t[0].value)),s.state.set("menu",t)),s.state.set("text",i.text||o),s.classes.add("listbox"),s.on("select",function(e){var t=e.control;n&&(e.lastControl=n),i.multiple?t.active(!t.active()):s.value(e.control.value()),n=t})},value:function(t){return 0===arguments.length?this.state.get("value"):(void 0===t||(this.settings.values?0<w.grep(this.settings.values,function(e){return e.value===t}).length?this.state.set("value",t):null===t&&this.state.set("value",null):this.state.set("value",t)),this)},bindStates:function(){var i=this;return i.on("show",function(e){var t,n;t=e.control,n=i.value(),t instanceof lr&&t.items().each(function(e){e.hasMenus()||e.active(e.value()===n)})}),i.state.on("change:value",function(t){var n=function e(t,n){var i;if(t)for(var r=0;r<t.length;r++){if(t[r].value===n)return t[r];if(t[r].menu&&(i=e(t[r].menu,n)))return i}}(i.state.get("menu"),t.value);n?i.text(n.text):i.text(i.settings.text)}),i._super()}}),cr=Wt.extend({Defaults:{border:0,role:"menuitem"},init:function(e){var t,n=this;n._super(e),e=n.settings,n.classes.add("menu-item"),e.menu&&n.classes.add("menu-item-expand"),e.preview&&n.classes.add("menu-item-preview"),"-"!==(t=n.state.get("text"))&&"|"!==t||(n.classes.add("menu-item-sep"),n.aria("role","separator"),n.state.set("text","-")),e.selectable&&(n.aria("role","menuitemcheckbox"),n.classes.add("menu-item-checkbox"),e.icon="selected"),e.preview||e.selectable||n.classes.add("menu-item-normal"),n.on("mousedown",function(e){e.preventDefault()}),e.menu&&!e.ariaHideMenu&&n.aria("haspopup",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var t,n=this,e=n.settings,i=n.parent();if(i.items().each(function(e){e!==n&&e.hideMenu()}),e.menu){(t=n.menu)?t.show():((t=e.menu).length?t={type:"menu",items:t}:t.type=t.type||"menu",i.settings.itemDefaults&&(t.itemDefaults=i.settings.itemDefaults),(t=n.menu=b.create(t).parent(n).renderTo()).reflow(),t.on("cancel",function(e){e.stopPropagation(),n.focus(),t.hide()}),t.on("show hide",function(e){e.control.items&&e.control.items().each(function(e){e.active(e.settings.selected)})}).fire("show"),t.on("hide",function(e){e.control===t&&n.classes.remove("selected")}),t.submenu=!0),t._parentMenu=i,t.classes.add("menu-sub");var r=t.testMoveRel(n.getEl(),n.isRtl()?["tl-tr","bl-br","tr-tl","br-bl"]:["tr-tl","br-bl","tl-tr","bl-br"]);t.moveRel(n.getEl(),r),r="menu-sub-"+(t.rel=r),t.classes.remove(t._lastRel).add(r),t._lastRel=r,n.classes.add("selected"),n.aria("expanded",!0)}},hideMenu:function(){var e=this;return e.menu&&(e.menu.items().each(function(e){e.hideMenu&&e.hideMenu()}),e.menu.hide(),e.aria("expanded",!1)),e},renderHtml:function(){var e,t=this,n=t._id,i=t.settings,r=t.classPrefix,o=t.state.get("text"),s=t.settings.icon,a="",l=i.shortcut,u=t.encode(i.url);function c(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function d(e){var t=i.match||"";return t?e.replace(new RegExp(c(t),"gi"),function(e){return"!mce~match["+e+"]mce~match!"}):e}function f(e){return e.replace(new RegExp(c("!mce~match["),"g"),"<b>").replace(new RegExp(c("]mce~match!"),"g"),"</b>")}return s&&t.parent().classes.add("menu-has-icons"),i.image&&(a=" style=\"background-image: url('"+i.image+"')\""),l&&(l=function(e){var t,n,i={};for(i=fe.mac?{alt:"⌥",ctrl:"⌘",shift:"⇧",meta:"⌘"}:{meta:"Ctrl"},e=e.split("+"),t=0;t<e.length;t++)(n=i[e[t].toLowerCase()])&&(e[t]=n);return e.join("+")}(l)),s=r+"ico "+r+"i-"+(t.settings.icon||"none"),e="-"!==o?'<i class="'+s+'"'+a+"></i>\xa0":"",o=f(t.encode(d(o))),u=f(t.encode(d(u))),'<div id="'+n+'" class="'+t.classes+'" tabindex="-1">'+e+("-"!==o?'<span id="'+n+'-text" class="'+r+'text">'+o+"</span>":"")+(l?'<div id="'+n+'-shortcut" class="'+r+'menu-shortcut">'+l+"</div>":"")+(i.menu?'<div class="'+r+'caret"></div>':"")+(u?'<div class="'+r+'menu-item-link">'+u+"</div>":"")+"</div>"},postRender:function(){var t=this,n=t.settings,e=n.textStyle;if("function"==typeof e&&(e=e.call(this)),e){var i=t.getEl("text");i&&(i.setAttribute("style",e),t._textStyle=e)}return t.on("mouseenter click",function(e){e.control===t&&(n.menu||"click"!==e.type?(t.showMenu(),e.aria&&t.menu.focus(!0)):(t.fire("select"),u.requestAnimationFrame(function(){t.parent().hideAll()})))}),t._super(),t},hover:function(){return this.parent().items().each(function(e){e.classes.remove("selected")}),this.classes.toggle("selected",!0),this},active:function(e){return function(e,t){var n=e._textStyle;if(n){var i=e.getEl("text");i.setAttribute("style",n),t&&(i.style.color="",i.style.backgroundColor="")}}(this,e),void 0!==e&&this.aria("checked",e),this._super(e)},remove:function(){this._super(),this.menu&&this.menu.remove()}}),dr=Kt.extend({Defaults:{classes:"radio",role:"radio"}}),fr=Wt.extend({renderHtml:function(){var e=this,t=e.classPrefix;return e.classes.add("resizehandle"),"both"===e.settings.direction&&e.classes.add("resizehandle-both"),e.canFocus=!1,'<div id="'+e._id+'" class="'+e.classes+'"><i class="'+t+"ico "+t+'i-resize"></i></div>'},postRender:function(){var t=this;t._super(),t.resizeDragHelper=new ft(this._id,{start:function(){t.fire("ResizeStart")},drag:function(e){"both"!==t.settings.direction&&(e.deltaX=0),t.fire("Resize",e)},stop:function(){t.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}});function hr(e){var t="";if(e)for(var n=0;n<e.length;n++)t+='<option value="'+e[n]+'">'+e[n]+"</option>";return t}var mr=Wt.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(e){var n=this;n._super(e),n.settings.size&&(n.size=n.settings.size),n.settings.options&&(n._options=n.settings.options),n.on("keydown",function(e){var t;13===e.keyCode&&(e.preventDefault(),n.parents().reverse().each(function(e){if(e.toJSON)return t=e,!1}),n.fire("submit",{data:t.toJSON()}))})},options:function(e){return arguments.length?(this.state.set("options",e),this):this.state.get("options")},renderHtml:function(){var e,t=this,n="";return e=hr(t._options),t.size&&(n=' size = "'+t.size+'"'),'<select id="'+t._id+'" class="'+t.classes+'"'+n+">"+e+"</select>"},bindStates:function(){var t=this;return t.state.on("change:options",function(e){t.getEl().innerHTML=hr(e.value)}),t._super()}});function gr(e,t,n){return e<t&&(e=t),n<e&&(e=n),e}function pr(e,t,n){e.setAttribute("aria-"+t,n)}function vr(e,t){var n,i,r,o,s;"v"===e.settings.orientation?(r="top",i="height",n="h"):(r="left",i="width",n="w"),s=e.getEl("handle"),o=((e.layoutRect()[n]||100)-Ce.getSize(s)[i])*((t-e._minValue)/(e._maxValue-e._minValue))+"px",s.style[r]=o,s.style.height=e.layoutRect().h+"px",pr(s,"valuenow",t),pr(s,"valuetext",""+e.settings.previewFilter(t)),pr(s,"valuemin",e._minValue),pr(s,"valuemax",e._maxValue)}var br=Wt.extend({init:function(e){var t=this;e.previewFilter||(e.previewFilter=function(e){return Math.round(100*e)/100}),t._super(e),t.classes.add("slider"),"v"===e.orientation&&t.classes.add("vertical"),t._minValue=X(e.minValue)?e.minValue:0,t._maxValue=X(e.maxValue)?e.maxValue:100,t._initValue=t.state.get("value")},renderHtml:function(){var e=this._id,t=this.classPrefix;return'<div id="'+e+'" class="'+this.classes+'"><div id="'+e+'-handle" class="'+t+'slider-handle" role="slider" tabindex="-1"></div></div>'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){var e,t,n,i,r,o,s,a,l,u,c,d,f,h,m=this;e=m._minValue,t=m._maxValue,"v"===m.settings.orientation?(n="screenY",i="top",r="height",o="h"):(n="screenX",i="left",r="width",o="w"),m._super(),function(o,s){function t(e){var t,n,i,r;t=gr(t=(((t=m.value())+(r=n=o))/((i=s)-r)+.05*e)*(i-n)-n,o,s),m.value(t),m.fire("dragstart",{value:t}),m.fire("drag",{value:t}),m.fire("dragend",{value:t})}m.on("keydown",function(e){switch(e.keyCode){case 37:case 38:t(-1);break;case 39:case 40:t(1)}})}(e,t),s=e,a=t,l=m.getEl("handle"),m._dragHelper=new ft(m._id,{handle:m._id+"-handle",start:function(e){u=e[n],c=parseInt(m.getEl("handle").style[i],10),d=(m.layoutRect()[o]||100)-Ce.getSize(l)[r],m.fire("dragstart",{value:h})},drag:function(e){var t=e[n]-u;f=gr(c+t,0,d),l.style[i]=f+"px",h=s+f/d*(a-s),m.value(h),m.tooltip().text(""+m.settings.previewFilter(h)).show().moveRel(l,"bc tc"),m.fire("drag",{value:h})},stop:function(){m.tooltip().hide(),m.fire("dragend",{value:h})}})},repaint:function(){this._super(),vr(this,this.value())},bindStates:function(){var t=this;return t.state.on("change:value",function(e){vr(t,e.value)}),t._super()}}),yr=Wt.extend({renderHtml:function(){return this.classes.add("spacer"),this.canFocus=!1,'<div id="'+this._id+'" class="'+this.classes+'"></div>'}}),xr=ar.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var e,t,n=this.getEl(),i=this.layoutRect();return this._super(),e=n.firstChild,t=n.lastChild,we(e).css({width:i.w-Ce.getSize(t).width,height:i.h-2}),we(t).css({height:i.h-2}),this},activeMenu:function(e){we(this.getEl().lastChild).toggleClass(this.classPrefix+"active",e)},renderHtml:function(){var e,t,n=this,i=n._id,r=n.classPrefix,o=n.state.get("icon"),s=n.state.get("text"),a=n.settings,l="";return(e=a.image)?(o="none","string"!=typeof e&&(e=window.getSelection?e[0]:e[1]),e=" style=\"background-image: url('"+e+"')\""):e="",o=a.icon?r+"ico "+r+"i-"+o:"",s&&(n.classes.add("btn-has-text"),l='<span class="'+r+'txt">'+n.encode(s)+"</span>"),t="boolean"==typeof a.active?' aria-pressed="'+a.active+'"':"",'<div id="'+i+'" class="'+n.classes+'" role="button"'+t+' tabindex="-1"><button type="button" hidefocus="1" tabindex="-1">'+(o?'<i class="'+o+'"'+e+"></i>":"")+l+'</button><button type="button" class="'+r+'open" hidefocus="1" tabindex="-1">'+(n._menuBtnText?(o?"\xa0":"")+n._menuBtnText:"")+' <i class="'+r+'caret"></i></button></div>'},postRender:function(){var n=this.settings.onclick;return this.on("click",function(e){var t=e.target;if(e.control===this)for(;t;){if(e.aria&&"down"!==e.aria.key||"BUTTON"===t.nodeName&&-1===t.className.indexOf("open"))return e.stopImmediatePropagation(),void(n&&n.call(this,e));t=t.parentNode}}),delete this.settings.onclick,this._super()}}),wr=Ei.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}}),_r=bt.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(n){var e;this.activeTabId&&(e=this.getEl(this.activeTabId),we(e).removeClass(this.classPrefix+"active"),e.setAttribute("aria-selected","false")),this.activeTabId="t"+n,(e=this.getEl("t"+n)).setAttribute("aria-selected","true"),we(e).addClass(this.classPrefix+"active"),this.items()[n].show().fire("showtab"),this.reflow(),this.items().each(function(e,t){n!==t&&e.hide()})},renderHtml:function(){var i=this,e=i._layout,r="",o=i.classPrefix;return i.preRender(),e.preRender(i),i.items().each(function(e,t){var n=i._id+"-t"+t;e.aria("role","tabpanel"),e.aria("labelledby",n),r+='<div id="'+n+'" class="'+o+'tab" unselectable="on" role="tab" aria-controls="'+e._id+'" aria-selected="false" tabIndex="-1">'+i.encode(e.settings.title)+"</div>"}),'<div id="'+i._id+'" class="'+i.classes+'" hidefocus="1" tabindex="-1"><div id="'+i._id+'-head" class="'+o+'tabs" role="tablist">'+r+'</div><div id="'+i._id+'-body" class="'+i.bodyClasses+'">'+e.renderHtml(i)+"</div></div>"},postRender:function(){var i=this;i._super(),i.settings.activeTab=i.settings.activeTab||0,i.activateTab(i.settings.activeTab),this.on("click",function(e){var t=e.target.parentNode;if(t&&t.id===i._id+"-head")for(var n=t.childNodes.length;n--;)t.childNodes[n]===e.target&&i.activateTab(n)})},initLayoutRect:function(){var e,t,n,i=this;t=(t=Ce.getSize(i.getEl("head")).width)<0?0:t,n=0,i.items().each(function(e){t=Math.max(t,e.layoutRect().minW),n=Math.max(n,e.layoutRect().minH)}),i.items().each(function(e){e.settings.x=0,e.settings.y=0,e.settings.w=t,e.settings.h=n,e.layoutRect({x:0,y:0,w:t,h:n})});var r=Ce.getSize(i.getEl("head")).height;return i.settings.minWidth=t,i.settings.minHeight=n+r,(e=i._super()).deltaH+=r,e.innerH=e.h-e.deltaH,e}}),Cr=Wt.extend({init:function(e){var n=this;n._super(e),n.classes.add("textbox"),e.multiline?n.classes.add("multiline"):(n.on("keydown",function(e){var t;13===e.keyCode&&(e.preventDefault(),n.parents().reverse().each(function(e){if(e.toJSON)return t=e,!1}),n.fire("submit",{data:t.toJSON()}))}),n.on("keyup",function(e){n.state.set("value",e.target.value)}))},repaint:function(){var e,t,n,i,r,o=this,s=0;e=o.getEl().style,t=o._layoutRect,r=o._lastRepaintRect||{};var a=document;return!o.settings.multiline&&a.all&&(!a.documentMode||a.documentMode<=8)&&(e.lineHeight=t.h-s+"px"),i=(n=o.borderBox).left+n.right+8,s=n.top+n.bottom+(o.settings.multiline?8:0),t.x!==r.x&&(e.left=t.x+"px",r.x=t.x),t.y!==r.y&&(e.top=t.y+"px",r.y=t.y),t.w!==r.w&&(e.width=t.w-i+"px",r.w=t.w),t.h!==r.h&&(e.height=t.h-s+"px",r.h=t.h),o._lastRepaintRect=r,o.fire("repaint",{},!1),o},renderHtml:function(){var t,e,n=this,i=n.settings;return t={id:n._id,hidefocus:"1"},w.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(e){t[e]=i[e]}),n.disabled()&&(t.disabled="disabled"),i.subtype&&(t.type=i.subtype),(e=Ce.create(i.multiline?"textarea":"input",t)).value=n.state.get("value"),e.className=n.classes.toString(),e.outerHTML},value:function(e){return arguments.length?(this.state.set("value",e),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var t=this;t.getEl().value=t.state.get("value"),t._super(),t.$el.on("change",function(e){t.state.set("value",e.target.value),t.fire("change",e)})},bindStates:function(){var t=this;return t.state.on("change:value",function(e){t.getEl().value!==e.value&&(t.getEl().value=e.value)}),t.state.on("change:disabled",function(e){t.getEl().disabled=e.value}),t._super()},remove:function(){this.$el.off(),this._super()}}),Rr=function(){return{Selector:Ue,Collection:$e,ReflowQueue:Qe,Control:st,Factory:b,KeyboardNavigation:lt,Container:ct,DragHelper:ft,Scrollable:vt,Panel:bt,Movable:Se,Resizable:yt,FloatPanel:kt,Window:Vt,MessageBox:Yt,Tooltip:Dt,Widget:Wt,Progress:Ot,Notification:Bt,Layout:Xt,AbsoluteLayout:qt,Button:jt,ButtonGroup:Gt,Checkbox:Kt,ComboBox:Qt,ColorBox:en,PanelButton:tn,ColorButton:rn,ColorPicker:sn,Path:ln,ElementPath:un,FormItem:cn,Form:dn,FieldSet:fn,FilePicker:_i,FitLayout:Ci,FlexLayout:Ri,FlowLayout:Ei,FormatControls:er,GridLayout:tr,Iframe:nr,InfoBox:ir,Label:rr,Toolbar:or,MenuBar:sr,MenuButton:ar,MenuItem:cr,Throbber:Mt,Menu:lr,ListBox:ur,Radio:dr,ResizeHandle:fr,SelectBox:mr,Slider:br,Spacer:yr,SplitButton:xr,StackLayout:wr,TabPanel:_r,TextBox:Cr,DropZone:an,BrowseButton:Jt}},Er=function(n){n.ui?w.each(Rr(),function(e,t){n.ui[t]=e}):n.ui=Rr()};w.each(Rr(),function(e,t){b.add(t,e)}),Er(window.tinymce?window.tinymce:{}),o.add("modern",function(e){return er.setup(e),$t(e)})}();
\ No newline at end of file
-!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw"module ["+b+"] returned undefined";c.instance=j},c=function(b,c,d){if("string"!=typeof b)throw"module id must be a string";if(void 0===c)throw"no dependencies for "+b;if(void 0===d)throw"no definition function for "+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw"module ["+c+"] was undefined";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h("global!Array",Array),h("global!Error",Error),g("ephox.katamari.api.Fun",["global!Array","global!Error"],function(a,b){var c=function(){},d=function(a,b){return function(){return a(b.apply(null,arguments))}},e=function(a){return function(){return a}},f=function(a){return a},g=function(a,b){return a===b},h=function(b){for(var c=new a(arguments.length-1),d=1;d<arguments.length;d++)c[d-1]=arguments[d];return function(){for(var d=new a(arguments.length),e=0;e<d.length;e++)d[e]=arguments[e];var f=c.concat(d);return b.apply(null,f)}},i=function(a){return function(){return!a.apply(null,arguments)}},j=function(a){return function(){throw new b(a)}},k=function(a){return a()},l=function(a){a()},m=e(!1),n=e(!0);return{noop:c,compose:d,constant:e,identity:f,tripleEquals:g,curry:h,not:i,die:j,apply:k,call:l,never:m,always:n}}),g("tinymce.core.util.Promise",[],function(){function a(a,b){return function(){a.apply(b,arguments)}}function b(b){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof b)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],h(b,a(d,this),a(e,this))}function c(a){var b=this;return null===this._state?void this._deferreds.push(a):void i(function(){var c=b._state?a.onFulfilled:a.onRejected;if(null===c)return void(b._state?a.resolve:a.reject)(b._value);var d;try{d=c(b._value)}catch(e){return void a.reject(e)}a.resolve(d)})}function d(b){try{if(b===this)throw new TypeError("A promise cannot be resolved with itself.");if(b&&("object"==typeof b||"function"==typeof b)){var c=b.then;if("function"==typeof c)return void h(a(c,b),a(d,this),a(e,this))}this._state=!0,this._value=b,f.call(this)}catch(g){e.call(this,g)}}function e(a){this._state=!1,this._value=a,f.call(this)}function f(){for(var a=0,b=this._deferreds.length;a<b;a++)c.call(this,this._deferreds[a]);this._deferreds=null}function g(a,b,c,d){this.onFulfilled="function"==typeof a?a:null,this.onRejected="function"==typeof b?b:null,this.resolve=c,this.reject=d}function h(a,b,c){var d=!1;try{a(function(a){d||(d=!0,b(a))},function(a){d||(d=!0,c(a))})}catch(e){if(d)return;d=!0,c(e)}}if(window.Promise)return window.Promise;var i=b.immediateFn||"function"==typeof setImmediate&&setImmediate||function(a){setTimeout(a,1)},j=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)};return b.prototype["catch"]=function(a){return this.then(null,a)},b.prototype.then=function(a,d){var e=this;return new b(function(b,f){c.call(e,new g(a,d,b,f))})},b.all=function(){var a=Array.prototype.slice.call(1===arguments.length&&j(arguments[0])?arguments[0]:arguments);return new b(function(b,c){function d(f,g){try{if(g&&("object"==typeof g||"function"==typeof g)){var h=g.then;if("function"==typeof h)return void h.call(g,function(a){d(f,a)},c)}a[f]=g,0===--e&&b(a)}catch(i){c(i)}}if(0===a.length)return b([]);for(var e=a.length,f=0;f<a.length;f++)d(f,a[f])})},b.resolve=function(a){return a&&"object"==typeof a&&a.constructor===b?a:new b(function(b){b(a)})},b.reject=function(a){return new b(function(b,c){c(a)})},b.race=function(a){return new b(function(b,c){for(var d=0,e=a.length;d<e;d++)a[d].then(b,c)})},b}),g("tinymce.core.util.Delay",["tinymce.core.util.Promise"],function(a){function b(a,b){function c(a){window.setTimeout(a,0)}var d,e=window.requestAnimationFrame,f=["ms","moz","webkit"];for(d=0;d<f.length&&!e;d++)e=window[f[d]+"RequestAnimationFrame"];e||(e=c),e(a,b)}function c(a,b){return"number"!=typeof b&&(b=0),setTimeout(a,b)}function d(a,b){return"number"!=typeof b&&(b=1),setInterval(a,b)}function e(a){return clearTimeout(a)}function f(a){return clearInterval(a)}function g(a,b){var d,e;return e=function(){var e=arguments;clearTimeout(d),d=c(function(){a.apply(this,e)},b)},e.stop=function(){clearTimeout(d)},e}var h;return{requestAnimationFrame:function(c,d){return h?void h.then(c):void(h=new a(function(a){d||(d=document.body),b(a,d)}).then(c))},setTimeout:c,setInterval:d,setEditorTimeout:function(a,b,d){return c(function(){a.removed||b()},d)},setEditorInterval:function(a,b,c){var e;return e=d(function(){a.removed?clearInterval(e):b()},c)},debounce:g,throttle:g,clearInterval:f,clearTimeout:e}}),g("tinymce.core.Env",[],function(){function a(a){return"matchMedia"in window&&matchMedia(a).matches}var b,c,d,e,f,g,h,i,j,k,l,m,n,o=navigator,p=o.userAgent;b=window.opera&&window.opera.buildNumber,j=/Android/.test(p),c=/WebKit/.test(p),d=!c&&!b&&/MSIE/gi.test(p)&&/Explorer/gi.test(o.appName),d=d&&/MSIE (\w+)\./.exec(p)[1],e=p.indexOf("Trident/")!=-1&&(p.indexOf("rv:")!=-1||o.appName.indexOf("Netscape")!=-1)&&11,f=p.indexOf("Edge/")!=-1&&!d&&!e&&12,d=d||e||f,g=!c&&!e&&/Gecko/.test(p),h=p.indexOf("Mac")!=-1,i=/(iPad|iPhone)/.test(p),k="FormData"in window&&"FileReader"in window&&"URL"in window&&!!URL.createObjectURL,l=a("only screen and (max-device-width: 480px)")&&(j||i),m=a("only screen and (min-width: 800px)")&&(j||i),n=p.indexOf("Windows Phone")!=-1,f&&(c=!1);var q=!i||k||p.match(/AppleWebKit\/(\d*)/)[1]>=534;return{opera:b,webkit:c,ie:d,gecko:g,mac:h,iOS:i,android:j,contentEditable:q,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=d,range:window.getSelection&&"Range"in window,documentMode:d&&!f?document.documentMode||7:10,fileApi:k,ceFalse:d===!1||d>8,canHaveCSP:d===!1||d>11,desktop:!l&&!m,windowsPhone:n}}),g("tinymce.core.dom.EventUtils",["tinymce.core.util.Delay","tinymce.core.Env"],function(a,b){"use strict";function c(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent("on"+b,c)}function d(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d||!1):a.detachEvent&&a.detachEvent("on"+b,c)}function e(a,b){var c,d=b;return c=a.path,c&&c.length>0&&(d=c[0]),a.deepPath&&(c=a.deepPath(),c&&c.length>0&&(d=c[0])),d}function f(a,c){var d,f,g=c||{};for(d in a)k[d]||(g[d]=a[d]);if(g.target||(g.target=g.srcElement||document),b.experimentalShadowDom&&(g.target=e(a,g.target)),a&&j.test(a.type)&&a.pageX===f&&a.clientX!==f){var h=g.target.ownerDocument||document,i=h.documentElement,o=h.body;g.pageX=a.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),g.pageY=a.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)}return g.preventDefault=function(){g.isDefaultPrevented=n,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},g.stopPropagation=function(){g.isPropagationStopped=n,a&&(a.stopPropagation?a.stopPropagation():a.cancelBubble=!0)},g.stopImmediatePropagation=function(){g.isImmediatePropagationStopped=n,g.stopPropagation()},l(g)===!1&&(g.isDefaultPrevented=m,g.isPropagationStopped=m,g.isImmediatePropagationStopped=m),"undefined"==typeof g.metaKey&&(g.metaKey=!1),g}function g(e,f,g){function h(){return"complete"===l.readyState||"interactive"===l.readyState&&l.body}function i(){g.domLoaded||(g.domLoaded=!0,f(m))}function j(){h()&&(d(l,"readystatechange",j),i())}function k(){try{l.documentElement.doScroll("left")}catch(b){return void a.setTimeout(k)}i()}var l=e.document,m={type:"ready"};return g.domLoaded?void f(m):(!l.addEventListener||b.ie&&b.ie<11?(c(l,"readystatechange",j),l.documentElement.doScroll&&e.self===e.top&&k()):h()?i():c(e,"DOMContentLoaded",i),void c(e,"load",i))}function h(){function a(a,b){var c,d,e,f,g=m[b];if(c=g&&g[a.type])for(d=0,e=c.length;d<e;d++)if(f=c[d],f&&f.func.call(f.scope,a)===!1&&a.preventDefault(),a.isImmediatePropagationStopped())return}var b,e,h,j,k,l=this,m={};e=i+(+new Date).toString(32),j="onmouseenter"in document.documentElement,h="onfocusin"in document.documentElement,k={mouseenter:"mouseover",mouseleave:"mouseout"},b=1,l.domLoaded=!1,l.events=m,l.bind=function(d,i,n,o){function p(b){a(f(b||x.event),q)}var q,r,s,t,u,v,w,x=window;if(d&&3!==d.nodeType&&8!==d.nodeType){for(d[e]?q=d[e]:(q=b++,d[e]=q,m[q]={}),o=o||d,i=i.split(" "),s=i.length;s--;)t=i[s],v=p,u=w=!1,"DOMContentLoaded"===t&&(t="ready"),l.domLoaded&&"ready"===t&&"complete"==d.readyState?n.call(o,f({type:t})):(j||(u=k[t],u&&(v=function(b){var c,d;if(c=b.currentTarget,d=b.relatedTarget,d&&c.contains)d=c.contains(d);else for(;d&&d!==c;)d=d.parentNode;d||(b=f(b||x.event),b.type="mouseout"===b.type?"mouseleave":"mouseenter",b.target=c,a(b,q))})),h||"focusin"!==t&&"focusout"!==t||(w=!0,u="focusin"===t?"focus":"blur",v=function(b){b=f(b||x.event),b.type="focus"===b.type?"focusin":"focusout",a(b,q)}),r=m[q][t],r?"ready"===t&&l.domLoaded?n({type:t}):r.push({func:n,scope:o}):(m[q][t]=r=[{func:n,scope:o}],r.fakeName=u,r.capture=w,r.nativeHandler=v,"ready"===t?g(d,v,l):c(d,u||t,v,w)));return d=r=0,n}},l.unbind=function(a,b,c){var f,g,h,i,j,k;if(!a||3===a.nodeType||8===a.nodeType)return l;if(f=a[e]){if(k=m[f],b){for(b=b.split(" "),h=b.length;h--;)if(j=b[h],g=k[j]){if(c)for(i=g.length;i--;)if(g[i].func===c){var n=g.nativeHandler,o=g.fakeName,p=g.capture;g=g.slice(0,i).concat(g.slice(i+1)),g.nativeHandler=n,g.fakeName=o,g.capture=p,k[j]=g}c&&0!==g.length||(delete k[j],d(a,g.fakeName||j,g.nativeHandler,g.capture))}}else{for(j in k)g=k[j],d(a,g.fakeName||j,g.nativeHandler,g.capture);k={}}for(j in k)return l;delete m[f];try{delete a[e]}catch(q){a[e]=null}}return l},l.fire=function(b,c,d){var g;if(!b||3===b.nodeType||8===b.nodeType)return l;d=f(null,d),d.type=c,d.target=b;do g=b[e],g&&a(d,g),b=b.parentNode||b.ownerDocument||b.defaultView||b.parentWindow;while(b&&!d.isPropagationStopped());return l},l.clean=function(a){var b,c,d=l.unbind;if(!a||3===a.nodeType||8===a.nodeType)return l;if(a[e]&&d(a),a.getElementsByTagName||(a=a.document),a&&a.getElementsByTagName)for(d(a),c=a.getElementsByTagName("*"),b=c.length;b--;)a=c[b],a[e]&&d(a);return l},l.destroy=function(){m={}},l.cancel=function(a){return a&&(a.preventDefault(),a.stopImmediatePropagation()),!1}}var i="mce-data-",j=/^(?:mouse|contextmenu)|click/,k={keyLocation:1,layerX:1,layerY:1,returnValue:1,webkitMovementX:1,webkitMovementY:1,keyIdentifier:1},l=function(a){return a.isDefaultPrevented===n||a.isDefaultPrevented===m},m=function(){return!1},n=function(){return!0};return h.Event=new h,h.Event.bind(window,"ready",function(){}),h}),g("tinymce.core.dom.Sizzle",[],function(){function a(a,b,c,d){var e,f,g,i,k,l,m,n,o,p;if((b?b.ownerDocument||b:L)!==D&&C(b),b=b||D,c=c||[],!a||"string"!=typeof a)return c;if(1!==(i=b.nodeType)&&9!==i)return[];if(F&&!d){if(e=oa.exec(a))if(g=e[1]){if(9===i){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&J(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return Y.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&s.getElementsByClassName)return Y.apply(c,b.getElementsByClassName(g)),c}if(s.qsa&&(!G||!G.test(a))){if(n=m=K,o=b,p=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){for(l=w(a),(m=b.getAttribute("id"))?n=m.replace(qa,"\\$&"):b.setAttribute("id",n),n="[id='"+n+"'] ",k=l.length;k--;)l[k]=n+j(l[k]);o=pa.test(a)&&h(b.parentNode)||b,p=l.join(",")}if(p)try{return Y.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{m||b.removeAttribute("id")}}}return y(a.replace(ea,"$1"),b,c,d)}function b(){function a(c,d){return b.push(c+" ")>t.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function c(a){return a[K]=!0,a}function d(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||T)-(~a.sourceIndex||T);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function e(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function f(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function g(a){return c(function(b){return b=+b,c(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function h(a){return a&&typeof a.getElementsByTagName!==S&&a}function i(){}function j(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function k(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=N++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[M,f];if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e){if(i=b[K]||(b[K]={}),(h=i[d])&&h[0]===M&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function l(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function m(b,c,d){for(var e=0,f=c.length;e<f;e++)a(b,c[e],d);return d}function n(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function o(a,b,d,e,f,g){return e&&!e[K]&&(e=o(e)),f&&!f[K]&&(f=o(f,g)),c(function(c,g,h,i){var j,k,l,o=[],p=[],q=g.length,r=c||m(b||"*",h.nodeType?[h]:h,[]),s=!a||!c&&b?r:n(r,o,a,h,i),t=d?f||(c?a:q||e)?[]:g:s;if(d&&d(s,t,h,i),e)for(j=n(t,p),e(j,[],h,i),k=j.length;k--;)(l=j[k])&&(t[p[k]]=!(s[p[k]]=l));if(c){if(f||a){if(f){for(j=[],k=t.length;k--;)(l=t[k])&&j.push(s[k]=l);f(null,t=[],j,i)}for(k=t.length;k--;)(l=t[k])&&(j=f?$.call(c,l):o[k])>-1&&(c[j]=!(g[j]=l))}}else t=n(t===g?t.splice(q,t.length):t),f?f(null,g,t,i):Y.apply(g,t)})}function p(a){for(var b,c,d,e=a.length,f=t.relative[a[0].type],g=f||t.relative[" "],h=f?1:0,i=k(function(a){return a===b},g,!0),m=k(function(a){return $.call(b,a)>-1},g,!0),n=[function(a,c,d){return!f&&(d||c!==z)||((b=c).nodeType?i(a,c,d):m(a,c,d))}];h<e;h++)if(c=t.relative[a[h].type])n=[k(l(n),c)];else{if(c=t.filter[a[h].type].apply(null,a[h].matches),c[K]){for(d=++h;d<e&&!t.relative[a[d].type];d++);return o(h>1&&l(n),h>1&&j(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ea,"$1"),c,h<d&&p(a.slice(h,d)),d<e&&p(a=a.slice(d)),d<e&&j(a))}n.push(c)}return l(n)}function q(b,d){var e=d.length>0,f=b.length>0,g=function(c,g,h,i,j){var k,l,m,o=0,p="0",q=c&&[],r=[],s=z,u=c||f&&t.find.TAG("*",j),v=M+=null==s?1:Math.random()||.1,w=u.length;for(j&&(z=g!==D&&g);p!==w&&null!=(k=u[p]);p++){if(f&&k){for(l=0;m=b[l++];)if(m(k,g,h)){i.push(k);break}j&&(M=v)}e&&((k=!m&&k)&&o--,c&&q.push(k))}if(o+=p,e&&p!==o){for(l=0;m=d[l++];)m(q,r,g,h);if(c){if(o>0)for(;p--;)q[p]||r[p]||(r[p]=W.call(i));r=n(r)}Y.apply(i,r),j&&!c&&r.length>0&&o+d.length>1&&a.uniqueSort(i)}return j&&(M=v,z=s),q};return e?c(g):g}var r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K="sizzle"+-new Date,L=window.document,M=0,N=0,O=b(),P=b(),Q=b(),R=function(a,b){return a===b&&(B=!0),0},S="undefined",T=1<<31,U={}.hasOwnProperty,V=[],W=V.pop,X=V.push,Y=V.push,Z=V.slice,$=V.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(this[b]===a)return b;return-1},_="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",aa="[\\x20\\t\\r\\n\\f]",ba="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ca="\\["+aa+"*("+ba+")(?:"+aa+"*([*^$|!~]?=)"+aa+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ba+"))|)"+aa+"*\\]",da=":("+ba+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ca+")*)|.*)\\)|)",ea=new RegExp("^"+aa+"+|((?:^|[^\\\\])(?:\\\\.)*)"+aa+"+$","g"),fa=new RegExp("^"+aa+"*,"+aa+"*"),ga=new RegExp("^"+aa+"*([>+~]|"+aa+")"+aa+"*"),ha=new RegExp("="+aa+"*([^\\]'\"]*?)"+aa+"*\\]","g"),ia=new RegExp(da),ja=new RegExp("^"+ba+"$"),ka={ID:new RegExp("^#("+ba+")"),CLASS:new RegExp("^\\.("+ba+")"),TAG:new RegExp("^("+ba+"|[*])"),ATTR:new RegExp("^"+ca),PSEUDO:new RegExp("^"+da),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+aa+"*(even|odd|(([+-]|)(\\d*)n|)"+aa+"*(?:([+-]|)"+aa+"*(\\d+)|))"+aa+"*\\)|)","i"),bool:new RegExp("^(?:"+_+")$","i"),needsContext:new RegExp("^"+aa+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+aa+"*((?:-\\d)?\\d*)"+aa+"*\\)|)(?=[^-]|$)","i")},la=/^(?:input|select|textarea|button)$/i,ma=/^h\d$/i,na=/^[^{]+\{\s*\[native \w/,oa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,pa=/[+~]/,qa=/'|\\/g,ra=new RegExp("\\\\([\\da-f]{1,6}"+aa+"?|("+aa+")|.)","ig"),sa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{Y.apply(V=Z.call(L.childNodes),L.childNodes),V[L.childNodes.length].nodeType}catch(ta){Y={apply:V.length?function(a,b){X.apply(a,Z.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}s=a.support={},v=a.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},C=a.setDocument=function(a){function b(a){try{return a.top}catch(b){}return null}var c,e=a?a.ownerDocument||a:L,f=e.defaultView;return e!==D&&9===e.nodeType&&e.documentElement?(D=e,E=e.documentElement,F=!v(e),f&&f!==b(f)&&(f.addEventListener?f.addEventListener("unload",function(){C()},!1):f.attachEvent&&f.attachEvent("onunload",function(){C()})),s.attributes=!0,s.getElementsByTagName=!0,s.getElementsByClassName=na.test(e.getElementsByClassName),s.getById=!0,t.find.ID=function(a,b){if(typeof b.getElementById!==S&&F){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},t.filter.ID=function(a){var b=a.replace(ra,sa);return function(a){return a.getAttribute("id")===b}},t.find.TAG=s.getElementsByTagName?function(a,b){if(typeof b.getElementsByTagName!==S)return b.getElementsByTagName(a)}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},t.find.CLASS=s.getElementsByClassName&&function(a,b){if(F)return b.getElementsByClassName(a)},H=[],G=[],s.disconnectedMatch=!0,G=G.length&&new RegExp(G.join("|")),H=H.length&&new RegExp(H.join("|")),c=na.test(E.compareDocumentPosition),J=c||na.test(E.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},R=c?function(a,b){if(a===b)return B=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!s.sortDetached&&b.compareDocumentPosition(a)===c?a===e||a.ownerDocument===L&&J(L,a)?-1:b===e||b.ownerDocument===L&&J(L,b)?1:A?$.call(A,a)-$.call(A,b):0:4&c?-1:1)}:function(a,b){if(a===b)return B=!0,0;var c,f=0,g=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!g||!h)return a===e?-1:b===e?1:g?-1:h?1:A?$.call(A,a)-$.call(A,b):0;if(g===h)return d(a,b);for(c=a;c=c.parentNode;)i.unshift(c);for(c=b;c=c.parentNode;)j.unshift(c);for(;i[f]===j[f];)f++;return f?d(i[f],j[f]):i[f]===L?-1:j[f]===L?1:0},e):D},a.matches=function(b,c){return a(b,null,null,c)},a.matchesSelector=function(b,c){if((b.ownerDocument||b)!==D&&C(b),c=c.replace(ha,"='$1']"),s.matchesSelector&&F&&(!H||!H.test(c))&&(!G||!G.test(c)))try{var d=I.call(b,c);if(d||s.disconnectedMatch||b.document&&11!==b.document.nodeType)return d}catch(e){}return a(c,D,null,[b]).length>0},a.contains=function(a,b){return(a.ownerDocument||a)!==D&&C(a),J(a,b)},a.attr=function(a,b){(a.ownerDocument||a)!==D&&C(a);var c=t.attrHandle[b.toLowerCase()],d=c&&U.call(t.attrHandle,b.toLowerCase())?c(a,b,!F):void 0;return void 0!==d?d:s.attributes||!F?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},a.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},a.uniqueSort=function(a){var b,c=[],d=0,e=0;if(B=!s.detectDuplicates,A=!s.sortStable&&a.slice(0),a.sort(R),B){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return A=null,a},u=a.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=u(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=u(b);return c},t=a.selectors={cacheLength:50,createPseudo:c,match:ka,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ra,sa),a[3]=(a[3]||a[4]||a[5]||"").replace(ra,sa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(b){return b[1]=b[1].toLowerCase(),"nth"===b[1].slice(0,3)?(b[3]||a.error(b[0]),b[4]=+(b[4]?b[5]+(b[6]||1):2*("even"===b[3]||"odd"===b[3])),b[5]=+(b[7]+b[8]||"odd"===b[3])):b[3]&&a.error(b[0]),b},PSEUDO:function(a){var b,c=!a[6]&&a[2];return ka.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ia.test(c)&&(b=w(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ra,sa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=O[a+" "];return b||(b=new RegExp("(^|"+aa+")"+a+"("+aa+"|$)"))&&O(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==S&&a.getAttribute("class")||"")})},ATTR:function(b,c,d){return function(e){var f=a.attr(e,b);return null==f?"!="===c:!c||(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f+" ").indexOf(d)>-1:"|="===c&&(f===d||f.slice(0,d.length+1)===d+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[K]||(q[K]={}),j=k[a]||[],n=j[0]===M&&j[1],m=j[0]===M&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[M,n,m];break}}else if(s&&(j=(b[K]||(b[K]={}))[a])&&j[0]===M)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[K]||(l[K]={}))[a]=[M,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(b,d){var e,f=t.pseudos[b]||t.setFilters[b.toLowerCase()]||a.error("unsupported pseudo: "+b);return f[K]?f(d):f.length>1?(e=[b,b,"",d],t.setFilters.hasOwnProperty(b.toLowerCase())?c(function(a,b){for(var c,e=f(a,d),g=e.length;g--;)c=$.call(a,e[g]),a[c]=!(b[c]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:c(function(a){var b=[],d=[],e=x(a.replace(ea,"$1"));return e[K]?c(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,c,f){return b[0]=a,e(b,null,f,d),!d.pop()}}),has:c(function(b){return function(c){return a(b,c).length>0}}),contains:c(function(a){return a=a.replace(ra,sa),function(b){return(b.textContent||b.innerText||u(b)).indexOf(a)>-1}}),lang:c(function(b){return ja.test(b||"")||a.error("unsupported lang: "+b),b=b.replace(ra,sa).toLowerCase(),function(a){var c;do if(c=F?a.lang:a.getAttribute("xml:lang")||a.getAttribute("lang"))return c=c.toLowerCase(),c===b||0===c.indexOf(b+"-");while((a=a.parentNode)&&1===a.nodeType);return!1}}),target:function(a){var b=window.location&&window.location.hash;return b&&b.slice(1)===a.id},root:function(a){return a===E},focus:function(a){return a===D.activeElement&&(!D.hasFocus||D.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!t.pseudos.empty(a)},header:function(a){return ma.test(a.nodeName)},input:function(a){return la.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:g(function(){return[0]}),last:g(function(a,b){return[b-1]}),eq:g(function(a,b,c){return[c<0?c+b:c]}),even:g(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:g(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:g(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:g(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},t.pseudos.nth=t.pseudos.eq;for(r in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})t.pseudos[r]=e(r);for(r in{submit:!0,reset:!0})t.pseudos[r]=f(r);return i.prototype=t.filters=t.pseudos,t.setFilters=new i,w=a.tokenize=function(b,c){var d,e,f,g,h,i,j,k=P[b+" "];if(k)return c?0:k.slice(0);for(h=b,i=[],j=t.preFilter;h;){d&&!(e=fa.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=ga.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ea," ")}),h=h.slice(d.length));for(g in t.filter)!(e=ka[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return c?h.length:h?a.error(b):P(b,i).slice(0)},x=a.compile=function(a,b){var c,d=[],e=[],f=Q[a+" "];if(!f){for(b||(b=w(a)),c=b.length;c--;)f=p(b[c]),f[K]?d.push(f):e.push(f);f=Q(a,q(e,d)),f.selector=a}return f},y=a.select=function(a,b,c,d){var e,f,g,i,k,l="function"==typeof a&&a,m=!d&&w(a=l.selector||a);if(c=c||[],1===m.length){if(f=m[0]=m[0].slice(0),f.length>2&&"ID"===(g=f[0]).type&&s.getById&&9===b.nodeType&&F&&t.relative[f[1].type]){if(b=(t.find.ID(g.matches[0].replace(ra,sa),b)||[])[0],!b)return c;l&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=ka.needsContext.test(a)?0:f.length;e--&&(g=f[e],!t.relative[i=g.type]);)if((k=t.find[i])&&(d=k(g.matches[0].replace(ra,sa),pa.test(f[0].type)&&h(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&j(f),!a)return Y.apply(c,d),c;break}}return(l||x(a,m))(d,b,!F,c,pa.test(a)&&h(b.parentNode)||b),c},s.sortStable=K.split("").sort(R).join("")===K,s.detectDuplicates=!!B,C(),s.sortDetached=!0,a}),g("tinymce.core.util.Arr",[],function(){function a(a){var b,c,d=a;if(!j(a))for(d=[],b=0,c=a.length;b<c;b++)d[b]=a[b];return d}function b(a,b,c){var d,e;if(!a)return 0;if(c=c||a,void 0!==a.length){for(d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a)===!1)return 0}else for(d in a)if(a.hasOwnProperty(d)&&b.call(c,a[d],d,a)===!1)return 0;return 1}function c(a,c){var d=[];return b(a,function(b,e){d.push(c(b,e,a))}),d}function d(a,c){var d=[];return b(a,function(b,e){c&&!c(b,e,a)||d.push(b)}),d}function e(a,b){var c,d;if(a)for(c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a,b,c,d){var e=0;for(arguments.length<3&&(c=a[0]);e<a.length;e++)c=b.call(d,c,a[e],e);return c}function g(a,b,c){var d,e;for(d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a))return d;return-1}function h(a,b,c){var d=g(a,b,c);if(d!==-1)return a[d]}function i(a){return a[a.length-1]}var j=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)};return{isArray:j,toArray:a,each:b,map:c,filter:d,indexOf:e,reduce:f,findIndex:g,find:h,last:i}}),g("tinymce.core.util.Tools",["tinymce.core.Env","tinymce.core.util.Arr"],function(a,b){function c(a){return null===a||void 0===a?"":(""+a).replace(n,"")}function d(a,c){return c?!("array"!=c||!b.isArray(a))||typeof a==c:void 0!==a}function e(a,b,c){var d;for(a=a||[],b=b||",","string"==typeof a&&(a=a.split(b)),c=c||{},d=a.length;d--;)c[a[d]]={};return c}function f(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function g(a,b,c){var d,e,f,g,h,i=this,j=0;if(a=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(a),f=a[3].match(/(^|\.)(\w+)$/i)[2],e=i.createNS(a[3].replace(/\.\w+$/,""),c),!e[f]){if("static"==a[2])return e[f]=b,void(this.onCreate&&this.onCreate(a[2],a[3],e[f]));b[f]||(b[f]=function(){},j=1),e[f]=b[f],i.extend(e[f].prototype,b),a[5]&&(d=i.resolve(a[5]).prototype,g=a[5].match(/\.(\w+)$/i)[1],h=e[f],j?e[f]=function(){return d[g].apply(this,arguments)}:e[f]=function(){return this.parent=d[g],h.apply(this,arguments)},e[f].prototype[f]=e[f],i.each(d,function(a,b){e[f].prototype[b]=d[b]}),i.each(b,function(a,b){d[b]?e[f].prototype[b]=function(){return this.parent=d[b],a.apply(this,arguments)}:b!=f&&(e[f].prototype[b]=a)})),i.each(b["static"],function(a,b){e[f][b]=a})}}function h(a,b){var c,d,e,f,g=arguments;for(c=1,d=g.length;c<d;c++){b=g[c];for(e in b)b.hasOwnProperty(e)&&(f=b[e],void 0!==f&&(a[e]=f))}return a}function i(a,c,d,e){e=e||this,a&&(d&&(a=a[d]),b.each(a,function(a,b){return c.call(e,a,b,d)!==!1&&void i(a,c,d,e)}))}function j(a,b){var c,d;for(b=b||window,a=a.split("."),c=0;c<a.length;c++)d=a[c],b[d]||(b[d]={}),b=b[d];return b}function k(a,b){var c,d;for(b=b||window,a=a.split("."),c=0,d=a.length;c<d&&(b=b[a[c]],b);c++);return b}function l(a,e){return!a||d(a,"array")?a:b.map(a.split(e||","),c)}function m(b){var c=a.cacheSuffix;return c&&(b+=(b.indexOf("?")===-1?"?":"&")+c),b}var n=/^\s*|\s*$/g;return{trim:c,isArray:b.isArray,is:d,toArray:b.toArray,makeMap:e,each:b.each,map:b.map,grep:b.filter,inArray:b.indexOf,hasOwn:f,extend:h,create:g,walk:i,createNS:j,resolve:k,explode:l,_addCacheSuffix:m}}),g("tinymce.core.dom.DomQuery",["tinymce.core.dom.EventUtils","tinymce.core.dom.Sizzle","tinymce.core.util.Tools","tinymce.core.Env"],function(a,b,c,d){function e(a){return"undefined"!=typeof a}function f(a){return"string"==typeof a}function g(a){return a&&a==a.window}function h(a,b){var c,d,e;for(b=b||w,e=b.createElement("div"),c=b.createDocumentFragment(),e.innerHTML=a;d=e.firstChild;)c.appendChild(d);return c}function i(a,b,c,d){var e;if(f(b))b=h(b,q(a[0]));else if(b.length&&!b.nodeType){if(b=l.makeArray(b),d)for(e=b.length-1;e>=0;e--)i(a,b[e],c,d);else for(e=0;e<b.length;e++)i(a,b[e],c,d);return a}if(b.nodeType)for(e=a.length;e--;)c.call(a[e],b);return a}function j(a,b){return a&&b&&(" "+a.className+" ").indexOf(" "+b+" ")!==-1}function k(a,b,c){var d,e;return b=l(b)[0],a.each(function(){var a=this;c&&d==a.parentNode?e.appendChild(a):(d=a.parentNode,e=b.cloneNode(!1),a.parentNode.insertBefore(e,a),e.appendChild(a))}),a}function l(a,b){return new l.fn.init(a,b)}function m(a,b){var c;if(b.indexOf)return b.indexOf(a);for(c=b.length;c--;)if(b[c]===a)return c;return-1}function n(a){return null===a||a===v?"":(""+a).replace(I,"")}function o(a,b){var c,d,e,f,g;if(a)if(c=a.length,c===f){for(d in a)if(a.hasOwnProperty(d)&&(g=a[d],b.call(g,d,g)===!1))break}else for(e=0;e<c&&(g=a[e],b.call(g,e,g)!==!1);e++);return a}function p(a,b){var c=[];return o(a,function(a,d){b(d,a)&&c.push(d)}),c}function q(a){return a?9==a.nodeType?a:a.ownerDocument:w}function r(a,b,c){var d=[],e=a[b];for("string"!=typeof c&&c instanceof l&&(c=c[0]);e&&9!==e.nodeType;){if(void 0!==c){if(e===c)break;if("string"==typeof c&&l(e).is(c))break}1===e.nodeType&&d.push(e),e=e[b]}return d}function s(a,b,c,d){var e=[];for(d instanceof l&&(d=d[0]);a;a=a[b])if(!c||a.nodeType===c){if(void 0!==d){if(a===d)break;if("string"==typeof d&&l(a).is(d))break}e.push(a)}return e}function t(a,b,c){for(a=a[b];a;a=a[b])if(a.nodeType==c)return a;return null}function u(a,b,c){o(c,function(c,d){a[c]=a[c]||{},a[c][b]=d})}var v,w=document,x=Array.prototype.push,y=Array.prototype.slice,z=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,A=a.Event,B=c.makeMap("children,contents,next,prev"),C=c.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),D=c.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),E={
-"for":"htmlFor","class":"className",readonly:"readOnly"},F={"float":"cssFloat"},G={},H={},I=/^\s*|\s*$/g;return l.fn=l.prototype={constructor:l,selector:"",context:null,length:0,init:function(a,b){var c,d,e=this;if(!a)return e;if(a.nodeType)return e.context=e[0]=a,e.length=1,e;if(b&&b.nodeType)e.context=b;else{if(b)return l(a).attr(b);e.context=b=document}if(f(a)){if(e.selector=a,c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c)return l(b).find(a);if(c[1])for(d=h(a,q(b)).firstChild;d;)x.call(e,d),d=d.nextSibling;else{if(d=q(b).getElementById(c[2]),!d)return e;if(d.id!==c[2])return e.find(a);e.length=1,e[0]=d}}else this.add(a,!1);return e},toArray:function(){return c.toArray(this)},add:function(a,b){var c,d,e=this;if(f(a))return e.add(l(a));if(b!==!1)for(c=l.unique(e.toArray().concat(l.makeArray(a))),e.length=c.length,d=0;d<c.length;d++)e[d]=c[d];else x.apply(e,l.makeArray(a));return e},attr:function(a,b){var c,d=this;if("object"==typeof a)o(a,function(a,b){d.attr(a,b)});else{if(!e(b)){if(d[0]&&1===d[0].nodeType){if(c=G[a],c&&c.get)return c.get(d[0],a);if(D[a])return d.prop(a)?a:v;b=d[0].getAttribute(a,2),null===b&&(b=v)}return b}this.each(function(){var c;if(1===this.nodeType){if(c=G[a],c&&c.set)return void c.set(this,b);null===b?this.removeAttribute(a,2):this.setAttribute(a,b,2)}})}return d},removeAttr:function(a){return this.attr(a,null)},prop:function(a,b){var c=this;if(a=E[a]||a,"object"==typeof a)o(a,function(a,b){c.prop(a,b)});else{if(!e(b))return c[0]&&c[0].nodeType&&a in c[0]?c[0][a]:b;this.each(function(){1==this.nodeType&&(this[a]=b)})}return c},css:function(a,b){function c(a){return a.replace(/-(\D)/g,function(a,b){return b.toUpperCase()})}function d(a){return a.replace(/[A-Z]/g,function(a){return"-"+a})}var f,g,h=this;if("object"==typeof a)o(a,function(a,b){h.css(a,b)});else if(e(b))a=c(a),"number"!=typeof b||C[a]||(b+="px"),h.each(function(){var c=this.style;if(g=H[a],g&&g.set)return void g.set(this,b);try{this.style[F[a]||a]=b}catch(e){}null!==b&&""!==b||(c.removeProperty?c.removeProperty(d(a)):c.removeAttribute(a))});else{if(f=h[0],g=H[a],g&&g.get)return g.get(f);if(f.ownerDocument.defaultView)try{return f.ownerDocument.defaultView.getComputedStyle(f,null).getPropertyValue(d(a))}catch(i){return v}else if(f.currentStyle)return f.currentStyle[c(a)]}return h},remove:function(){for(var a,b=this,c=this.length;c--;)a=b[c],A.clean(a),a.parentNode&&a.parentNode.removeChild(a);return this},empty:function(){for(var a,b=this,c=this.length;c--;)for(a=b[c];a.firstChild;)a.removeChild(a.firstChild);return this},html:function(a){var b,c=this;if(e(a)){b=c.length;try{for(;b--;)c[b].innerHTML=a}catch(d){l(c[b]).empty().append(a)}return c}return c[0]?c[0].innerHTML:""},text:function(a){var b,c=this;if(e(a)){for(b=c.length;b--;)"innerText"in c[b]?c[b].innerText=a:c[0].textContent=a;return c}return c[0]?c[0].innerText||c[0].textContent:""},append:function(){return i(this,arguments,function(a){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.appendChild(a)})},prepend:function(){return i(this,arguments,function(a){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.insertBefore(a,this.firstChild)},!0)},before:function(){var a=this;return a[0]&&a[0].parentNode?i(a,arguments,function(a){this.parentNode.insertBefore(a,this)}):a},after:function(){var a=this;return a[0]&&a[0].parentNode?i(a,arguments,function(a){this.parentNode.insertBefore(a,this.nextSibling)},!0):a},appendTo:function(a){return l(a).append(this),this},prependTo:function(a){return l(a).prepend(this),this},replaceWith:function(a){return this.before(a).remove()},wrap:function(a){return k(this,a)},wrapAll:function(a){return k(this,a,!0)},wrapInner:function(a){return this.each(function(){l(this).contents().wrapAll(a)}),this},unwrap:function(){return this.parent().each(function(){l(this).replaceWith(this.childNodes)})},clone:function(){var a=[];return this.each(function(){a.push(this.cloneNode(!0))}),l(a)},addClass:function(a){return this.toggleClass(a,!0)},removeClass:function(a){return this.toggleClass(a,!1)},toggleClass:function(a,b){var c=this;return"string"!=typeof a?c:(a.indexOf(" ")!==-1?o(a.split(" "),function(){c.toggleClass(this,b)}):c.each(function(c,d){var e,f;f=j(d,a),f!==b&&(e=d.className,f?d.className=n((" "+e+" ").replace(" "+a+" "," ")):d.className+=e?" "+a:a)}),c)},hasClass:function(a){return j(this[0],a)},each:function(a){return o(this,a)},on:function(a,b){return this.each(function(){A.bind(this,a,b)})},off:function(a,b){return this.each(function(){A.unbind(this,a,b)})},trigger:function(a){return this.each(function(){"object"==typeof a?A.fire(this,a.type,a):A.fire(this,a)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new l(y.apply(this,arguments))},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},find:function(a){var b,c,d=[];for(b=0,c=this.length;b<c;b++)l.find(a,this[b],d);return l(d)},filter:function(a){return l("function"==typeof a?p(this.toArray(),function(b,c){return a(c,b)}):l.filter(a,this.toArray()))},closest:function(a){var b=[];return a instanceof l&&(a=a[0]),this.each(function(c,d){for(;d;){if("string"==typeof a&&l(d).is(a)){b.push(d);break}if(d==a){b.push(d);break}d=d.parentNode}}),l(b)},offset:function(a){var b,c,d,e,f=0,g=0;return a?this.css(a):(b=this[0],b&&(c=b.ownerDocument,d=c.documentElement,b.getBoundingClientRect&&(e=b.getBoundingClientRect(),f=e.left+(d.scrollLeft||c.body.scrollLeft)-d.clientLeft,g=e.top+(d.scrollTop||c.body.scrollTop)-d.clientTop)),{left:f,top:g})},push:x,sort:[].sort,splice:[].splice},c.extend(l,{extend:c.extend,makeArray:function(a){return g(a)||a.nodeType?[a]:c.toArray(a)},inArray:m,isArray:c.isArray,each:o,trim:n,grep:p,find:b,expr:b.selectors,unique:b.uniqueSort,text:b.getText,contains:b.contains,filter:function(a,b,c){var d=b.length;for(c&&(a=":not("+a+")");d--;)1!=b[d].nodeType&&b.splice(d,1);return b=1===b.length?l.find.matchesSelector(b[0],a)?[b[0]]:[]:l.find.matches(a,b)}}),o({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return r(a,"parentNode")},next:function(a){return t(a,"nextSibling",1)},prev:function(a){return t(a,"previousSibling",1)},children:function(a){return s(a.firstChild,"nextSibling",1)},contents:function(a){return c.toArray(("iframe"===a.nodeName?a.contentDocument||a.contentWindow.document:a).childNodes)}},function(a,b){l.fn[a]=function(c){var d=this,e=[];return d.each(function(){var a=b.call(e,this,c,e);a&&(l.isArray(a)?e.push.apply(e,a):e.push(a))}),this.length>1&&(B[a]||(e=l.unique(e)),0===a.indexOf("parents")&&(e=e.reverse())),e=l(e),c?e.filter(c):e}}),o({parentsUntil:function(a,b){return r(a,"parentNode",b)},nextUntil:function(a,b){return s(a,"nextSibling",1,b).slice(1)},prevUntil:function(a,b){return s(a,"previousSibling",1,b).slice(1)}},function(a,b){l.fn[a]=function(c,d){var e=this,f=[];return e.each(function(){var a=b.call(f,this,c,f);a&&(l.isArray(a)?f.push.apply(f,a):f.push(a))}),this.length>1&&(f=l.unique(f),0!==a.indexOf("parents")&&"prevUntil"!==a||(f=f.reverse())),f=l(f),d?f.filter(d):f}}),l.fn.is=function(a){return!!a&&this.filter(a).length>0},l.fn.init.prototype=l.fn,l.overrideDefaults=function(a){function b(d,e){return c=c||a(),0===arguments.length&&(d=c.element),e||(e=c.context),new b.fn.init(d,e)}var c;return l.extend(b,this),b},d.ie&&d.ie<8&&(u(G,"get",{maxlength:function(a){var b=a.maxLength;return 2147483647===b?v:b},size:function(a){var b=a.size;return 20===b?v:b},"class":function(a){return a.className},style:function(a){var b=a.style.cssText;return 0===b.length?v:b}}),u(G,"set",{"class":function(a,b){a.className=b},style:function(a,b){a.style.cssText=b}})),d.ie&&d.ie<9&&(F["float"]="styleFloat",u(H,"set",{opacity:function(a,b){var c=a.style;null===b||""===b?c.removeAttribute("filter"):(c.zoom=1,c.filter="alpha(opacity="+100*b+")")}})),l.attrHooks=G,l.cssHooks=H,l}),g("tinymce.core.dom.Range",["tinymce.core.util.Tools"],function(a){function b(c){function d(){return J.createDocumentFragment()}function e(a,b){x(N,a,b)}function f(a,b){x(O,a,b)}function g(a){e(a.parentNode,U(a))}function h(a){e(a.parentNode,U(a)+1)}function i(a){f(a.parentNode,U(a))}function j(a){f(a.parentNode,U(a)+1)}function k(a){a?(I[R]=I[Q],I[S]=I[P]):(I[Q]=I[R],I[P]=I[S]),I.collapsed=N}function l(a){g(a),j(a)}function m(a){e(a,0),f(a,1===a.nodeType?a.childNodes.length:a.nodeValue.length)}function n(a,b){var c=I[Q],d=I[P],e=I[R],f=I[S],g=b.startContainer,h=b.startOffset,i=b.endContainer,j=b.endOffset;return 0===a?w(c,d,g,h):1===a?w(e,f,g,h):2===a?w(e,f,i,j):3===a?w(c,d,i,j):void 0}function o(){y(M)}function p(){return y(K)}function q(){return y(L)}function r(a){var b,d,e=this[Q],f=this[P];3!==e.nodeType&&4!==e.nodeType||!e.nodeValue?(e.childNodes.length>0&&(d=e.childNodes[f]),d?e.insertBefore(a,d):3==e.nodeType?c.insertAfter(a,e):e.appendChild(a)):f?f>=e.nodeValue.length?c.insertAfter(a,e):(b=e.splitText(f),e.parentNode.insertBefore(a,b)):e.parentNode.insertBefore(a,e)}function s(a){var b=I.extractContents();I.insertNode(a),a.appendChild(b),I.selectNode(a)}function t(){return T(new b(c),{startContainer:I[Q],startOffset:I[P],endContainer:I[R],endOffset:I[S],collapsed:I.collapsed,commonAncestorContainer:I.commonAncestorContainer})}function u(a,b){var c;if(3==a.nodeType)return a;if(b<0)return a;for(c=a.firstChild;c&&b>0;)--b,c=c.nextSibling;return c?c:a}function v(){return I[Q]==I[R]&&I[P]==I[S]}function w(a,b,d,e){var f,g,h,i,j,k;if(a==d)return b==e?0:b<e?-1:1;for(f=d;f&&f.parentNode!=a;)f=f.parentNode;if(f){for(g=0,h=a.firstChild;h!=f&&g<b;)g++,h=h.nextSibling;return b<=g?-1:1}for(f=a;f&&f.parentNode!=d;)f=f.parentNode;if(f){for(g=0,h=d.firstChild;h!=f&&g<e;)g++,h=h.nextSibling;return g<e?-1:1}for(i=c.findCommonAncestor(a,d),j=a;j&&j.parentNode!=i;)j=j.parentNode;for(j||(j=i),k=d;k&&k.parentNode!=i;)k=k.parentNode;if(k||(k=i),j==k)return 0;for(h=i.firstChild;h;){if(h==j)return-1;if(h==k)return 1;h=h.nextSibling}}function x(a,b,d){var e,f;for(a?(I[Q]=b,I[P]=d):(I[R]=b,I[S]=d),e=I[R];e.parentNode;)e=e.parentNode;for(f=I[Q];f.parentNode;)f=f.parentNode;f==e?w(I[Q],I[P],I[R],I[S])>0&&I.collapse(a):I.collapse(a),I.collapsed=v(),I.commonAncestorContainer=c.findCommonAncestor(I[Q],I[R])}function y(a){var b,c,d,e,f,g,h,i=0,j=0;if(I[Q]==I[R])return z(a);for(b=I[R],c=b.parentNode;c;b=c,c=c.parentNode){if(c==I[Q])return A(b,a);++i}for(b=I[Q],c=b.parentNode;c;b=c,c=c.parentNode){if(c==I[R])return B(b,a);++j}for(d=j-i,e=I[Q];d>0;)e=e.parentNode,d--;for(f=I[R];d<0;)f=f.parentNode,d++;for(g=e.parentNode,h=f.parentNode;g!=h;g=g.parentNode,h=h.parentNode)e=g,f=h;return C(e,f,a)}function z(a){var b,c,e,f,g,h,i,j,k;if(a!=M&&(b=d()),I[P]==I[S])return b;if(3==I[Q].nodeType){if(c=I[Q].nodeValue,e=c.substring(I[P],I[S]),a!=L&&(f=I[Q],j=I[P],k=I[S]-I[P],0===j&&k>=f.nodeValue.length-1?f.parentNode.removeChild(f):f.deleteData(j,k),I.collapse(N)),a==M)return;return e.length>0&&b.appendChild(J.createTextNode(e)),b}for(f=u(I[Q],I[P]),g=I[S]-I[P];f&&g>0;)h=f.nextSibling,i=G(f,a),b&&b.appendChild(i),--g,f=h;return a!=L&&I.collapse(N),b}function A(a,b){var c,e,f,g,h,i;if(b!=M&&(c=d()),e=D(a,b),c&&c.appendChild(e),f=U(a),g=f-I[P],g<=0)return b!=L&&(I.setEndBefore(a),I.collapse(O)),c;for(e=a.previousSibling;g>0;)h=e.previousSibling,i=G(e,b),c&&c.insertBefore(i,c.firstChild),--g,e=h;return b!=L&&(I.setEndBefore(a),I.collapse(O)),c}function B(a,b){var c,e,f,g,h,i;for(b!=M&&(c=d()),f=E(a,b),c&&c.appendChild(f),e=U(a),++e,g=I[S]-e,f=a.nextSibling;f&&g>0;)h=f.nextSibling,i=G(f,b),c&&c.appendChild(i),--g,f=h;return b!=L&&(I.setStartAfter(a),I.collapse(N)),c}function C(a,b,c){var e,f,g,h,i,j,k;for(c!=M&&(f=d()),e=E(a,c),f&&f.appendChild(e),g=U(a),h=U(b),++g,i=h-g,j=a.nextSibling;i>0;)k=j.nextSibling,e=G(j,c),f&&f.appendChild(e),j=k,--i;return e=D(b,c),f&&f.appendChild(e),c!=L&&(I.setStartAfter(a),I.collapse(N)),f}function D(a,b){var c,d,e,f,g,h=u(I[R],I[S]-1),i=h!=I[R];if(h==a)return F(h,i,O,b);for(c=h.parentNode,d=F(c,O,O,b);c;){for(;h;)e=h.previousSibling,f=F(h,i,O,b),b!=M&&d.insertBefore(f,d.firstChild),i=N,h=e;if(c==a)return d;h=c.previousSibling,c=c.parentNode,g=F(c,O,O,b),b!=M&&g.appendChild(d),d=g}}function E(a,b){var c,d,e,f,g,h=u(I[Q],I[P]),i=h!=I[Q];if(h==a)return F(h,i,N,b);for(c=h.parentNode,d=F(c,O,N,b);c;){for(;h;)e=h.nextSibling,f=F(h,i,N,b),b!=M&&d.appendChild(f),i=N,h=e;if(c==a)return d;h=c.nextSibling,c=c.parentNode,g=F(c,O,N,b),b!=M&&g.appendChild(d),d=g}}function F(a,b,d,e){var f,g,h,i,j;if(b)return G(a,e);if(3==a.nodeType){if(f=a.nodeValue,d?(i=I[P],g=f.substring(i),h=f.substring(0,i)):(i=I[S],g=f.substring(0,i),h=f.substring(i)),e!=L&&(a.nodeValue=h),e==M)return;return j=c.clone(a,O),j.nodeValue=g,j}if(e!=M)return c.clone(a,O)}function G(a,b){return b!=M?b==L?c.clone(a,N):a:void a.parentNode.removeChild(a)}function H(){return c.create("body",null,q()).outerText}var I=this,J=c.doc,K=0,L=1,M=2,N=!0,O=!1,P="startOffset",Q="startContainer",R="endContainer",S="endOffset",T=a.extend,U=c.nodeIndex;return T(I,{startContainer:J,startOffset:0,endContainer:J,endOffset:0,collapsed:N,commonAncestorContainer:J,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:e,setEnd:f,setStartBefore:g,setStartAfter:h,setEndBefore:i,setEndAfter:j,collapse:k,selectNode:l,selectNodeContents:m,compareBoundaryPoints:n,deleteContents:o,extractContents:p,cloneContents:q,insertNode:r,surroundContents:s,cloneRange:t,toStringIE:H}),I}return b.prototype.toString=function(){return this.toStringIE()},b}),h("global!Object",Object),g("ephox.katamari.api.Option",["ephox.katamari.api.Fun","global!Object"],function(a,b){var c=a.never,d=a.always,e=function(){return f},f=function(){var f=function(a){return a.isNone()},g=function(a){return a()},h=function(a){return a},i=function(){},j={fold:function(a,b){return a()},is:c,isSome:c,isNone:d,getOr:h,getOrThunk:g,getOrDie:function(a){throw new Error(a||"error: getOrDie called on none.")},or:h,orThunk:g,map:e,ap:e,each:i,bind:e,flatten:e,exists:c,forall:d,filter:e,equals:f,equals_:f,toArray:function(){return[]},toString:a.constant("none()")};return b.freeze&&b.freeze(j),j}(),g=function(a){var b=function(){return a},h=function(){return k},i=function(b){return g(b(a))},j=function(b){return b(a)},k={fold:function(b,c){return c(a)},is:function(b){return a===b},isSome:d,isNone:c,getOr:b,getOrThunk:b,getOrDie:b,or:h,orThunk:h,map:i,ap:function(b){return b.fold(e,function(b){return g(b(a))})},each:function(b){b(a)},bind:j,flatten:b,exists:j,forall:j,filter:function(b){return b(a)?k:f},equals:function(b){return b.is(a)},equals_:function(b,d){return b.fold(c,function(b){return d(a,b)})},toArray:function(){return[a]},toString:function(){return"some("+a+")"}};return k},h=function(a){return null===a||void 0===a?f:g(a)};return{some:g,none:e,from:h}}),h("global!String",String),g("ephox.katamari.api.Arr",["ephox.katamari.api.Option","global!Array","global!Error","global!String"],function(a,b,c,d){var e=function(){var a=b.prototype.indexOf,c=function(b,c){return a.call(b,c)},d=function(a,b){return u(a,b)};return void 0===a?d:c}(),f=function(b,c){var d=e(b,c);return d===-1?a.none():a.some(d)},g=function(a,b){return e(a,b)>-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d<a;d++)c.push(b(d));return c},j=function(a,b){for(var c=[],d=0;d<a.length;d+=b){var e=a.slice(d,d+b);c.push(e)}return c},k=function(a,c){for(var d=a.length,e=new b(d),f=0;f<d;f++){var g=a[f];e[f]=c(g,f,a)}return e},l=function(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];b(e,c,a)}},m=function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e<f;e++){var g=a[e],h=b(g,e,a)?c:d;h.push(g)}return{pass:c,fail:d}},o=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++){var f=a[d];b(f,d,a)&&c.push(f)}return c},p=function(a,b){if(0===a.length)return[];for(var c=b(a[0]),d=[],e=[],f=0,g=a.length;f<g;f++){var h=a[f],i=b(h);i!==c&&(d.push(e),e=[]),c=i,e.push(h)}return 0!==e.length&&d.push(e),d},q=function(a,b,c){return m(a,function(a){c=b(c,a)}),c},r=function(a,b,c){return l(a,function(a){c=b(c,a)}),c},s=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(f)}return a.none()},t=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(d)}return a.none()},u=function(a,b){for(var c=0,d=a.length;c<d;++c)if(a[c]===b)return c;return-1},v=b.prototype.push,w=function(a){for(var d=[],e=0,f=a.length;e<f;++e){if(!b.prototype.isPrototypeOf(a[e]))throw new c("Arr.flatten item "+e+" was not an array, input: "+a);v.apply(d,a[e])}return d},x=function(a,b){var c=k(a,b);return w(c)},y=function(a,b){for(var c=0,d=a.length;c<d;++c){var e=a[c];if(b(e,c,a)!==!0)return!1}return!0},z=function(a,b){return a.length===b.length&&y(a,function(a,c){return a===b[c]})},A=b.prototype.slice,B=function(a){var b=A.call(a,0);return b.reverse(),b},C=function(a,b){return o(a,function(a){return!g(b,a)})},D=function(a,b){for(var c={},e=0,f=a.length;e<f;e++){var g=a[e];c[d(g)]=b(g,e)}return c},E=function(a){return[a]},F=function(a,b){var c=A.call(a,0);return c.sort(b),c};return{map:k,each:l,eachr:m,partition:n,filter:o,groupBy:p,indexOf:f,foldr:q,foldl:r,find:s,findIndex:t,flatten:w,bind:x,forall:y,exists:h,contains:g,equal:z,reverse:B,chunk:j,difference:C,mapToObject:D,pure:E,sort:F,range:i}}),h("global!setTimeout",setTimeout),g("ephox.katamari.api.LazyValue",["ephox.katamari.api.Arr","ephox.katamari.api.Option","global!setTimeout"],function(a,b,c){var d=function(e){var f=b.none(),g=[],h=function(a){return d(function(b){i(function(c){b(a(c))})})},i=function(a){k()?m(a):g.push(a)},j=function(a){f=b.some(a),l(g),g=[]},k=function(){return f.isSome()},l=function(b){a.each(b,m)},m=function(a){f.each(function(b){c(function(){a(b)},0)})};return e(j),{get:i,map:h,isReady:k}},e=function(a){return d(function(b){b(a)})};return{nu:d,pure:e}}),g("ephox.katamari.async.Bounce",["global!Array","global!setTimeout"],function(a,b){var c=function(c){return function(){var d=a.prototype.slice.call(arguments),e=this;b(function(){c.apply(e,d)},0)}};return{bounce:c}}),g("ephox.katamari.api.Future",["ephox.katamari.api.LazyValue","ephox.katamari.async.Bounce"],function(a,b){var c=function(d){var e=function(a){d(b.bounce(a))},f=function(a){return c(function(b){e(function(c){var d=a(c);b(d)})})},g=function(a){return c(function(b){e(function(c){a(c).get(b)})})},h=function(a){return c(function(b){e(function(c){a.get(b)})})},i=function(){return a.nu(e)};return{map:f,bind:g,anonBind:h,toLazy:i,get:e}},d=function(a){return c(function(b){b(a)})};return{nu:c,pure:d}}),g("ephox.katamari.async.AsyncValues",["ephox.katamari.api.Arr"],function(a){var b=function(b,c){return c(function(c){var d=[],e=0,f=function(a){return function(f){d[a]=f,e++,e>=b.length&&c(d)}};0===b.length?c([]):a.each(b,function(a,b){a.get(f(b))})})};return{par:b}}),g("ephox.katamari.api.Futures",["ephox.katamari.api.Arr","ephox.katamari.api.Future","ephox.katamari.async.AsyncValues"],function(a,b,c){var d=function(a){return c.par(a,b.nu)},e=function(b,c){var e=a.map(b,c);return d(e)},f=function(a,b){return function(c){return b(c).bind(a)}};return{par:d,mapM:e,compose:f}}),g("ephox.katamari.api.Result",["ephox.katamari.api.Fun","ephox.katamari.api.Option"],function(a,b){var c=function(d){var e=function(a){return d===a},f=function(a){return c(d)},g=function(a){return c(d)},h=function(a){return c(a(d))},i=function(a){a(d)},j=function(a){return a(d)},k=function(a,b){return b(d)},l=function(a){return a(d)},m=function(a){return a(d)},n=function(){return b.some(d)};return{is:e,isValue:a.constant(!0),isError:a.constant(!1),getOr:a.constant(d),getOrThunk:a.constant(d),getOrDie:a.constant(d),or:f,orThunk:g,fold:k,map:h,each:i,bind:j,exists:l,forall:m,toOption:n}},d=function(c){var e=function(a){return a()},f=function(){return a.die(c)()},g=function(a){return a},h=function(a){return a()},i=function(a){return d(c)},j=function(a){return d(c)},k=function(a,b){return a(c)};return{is:a.constant(!1),isValue:a.constant(!1),isError:a.constant(!0),getOr:a.identity,getOrThunk:e,getOrDie:f,or:g,orThunk:h,fold:k,map:i,each:a.noop,bind:j,exists:a.constant(!1),forall:a.constant(!0),toOption:b.none}};return{value:c,error:d}}),g("tinymce.core.dom.StyleSheetLoader",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Future","ephox.katamari.api.Futures","ephox.katamari.api.Result","tinymce.core.util.Delay","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g){"use strict";return function(h,i){function j(a){h.getElementsByTagName("head")[0].appendChild(a)}function k(a,b,c){function d(){for(var a=t.passed,b=a.length;b--;)a[b]();t.status=2,t.passed=[],t.failed=[]}function e(){for(var a=t.failed,b=a.length;b--;)a[b]();t.status=3,t.passed=[],t.failed=[]}function i(){var a=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(a&&a[1]<536)}function k(a,b){a()||((new Date).getTime()-s<l?f.setTimeout(b):e())}function o(){k(function(){for(var a,b,c=h.styleSheets,e=c.length;e--;)if(a=c[e],b=a.ownerNode?a.ownerNode:a.owningElement,b&&b.id===q.id)return d(),!0},o)}function p(){k(function(){try{var a=r.sheet.cssRules;return d(),!!a}catch(b){}},p)}var q,r,s,t;if(a=g._addCacheSuffix(a),n[a]?t=n[a]:(t={passed:[],failed:[]},n[a]=t),b&&t.passed.push(b),c&&t.failed.push(c),1!=t.status){if(2==t.status)return void d();if(3==t.status)return void e();if(t.status=1,q=h.createElement("link"),q.rel="stylesheet",q.type="text/css",q.id="u"+m++,q.async=!1,q.defer=!1,s=(new Date).getTime(),"onload"in q&&!i())q.onload=o,q.onerror=e;else{if(navigator.userAgent.indexOf("Firefox")>0)return r=h.createElement("style"),r.textContent='@import "'+a+'"',p(),void j(r);o()}j(q),q.href=a}}var l,m=0,n={};i=i||{},l=i.maxLoadTime||5e3;var o=function(a){return c.nu(function(c){k(a,b.compose(c,b.constant(e.value(a))),b.compose(c,b.constant(e.error(a))))})},p=function(a){return a.fold(b.identity,b.identity)},q=function(b,c,e){d.par(a.map(b,o)).get(function(b){var d=a.partition(b,function(a){return a.isValue()});d.fail.length>0?e(d.fail.map(p)):c(d.pass.map(p))})};return{load:k,loadAll:q}}}),g("tinymce.core.dom.TreeWalker",[],function(){return function(a,b){function c(a,c,d,e){var f,g;if(a){if(!e&&a[c])return a[c];if(a!=b){if(f=a[d])return f;for(g=a.parentNode;g&&g!=b;g=g.parentNode)if(f=g[d])return f}}}function d(a,c,d,e){var f,g,h;if(a){if(f=a[d],b&&f===b)return;if(f){if(!e)for(h=f[c];h;h=h[c])if(!h[c])return h;return f}if(g=a.parentNode,g&&g!==b)return g}}var e=a;this.current=function(){return e},this.next=function(a){return e=c(e,"firstChild","nextSibling",a)},this.prev=function(a){return e=c(e,"lastChild","previousSibling",a)},this.prev2=function(a){return e=d(e,"lastChild","previousSibling",a)}}}),g("tinymce.core.html.Entities",["tinymce.core.util.Tools"],function(a){function b(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.textContent||b.innerText||a}function c(a,b){var c,d,f,g={};if(a){for(a=a.split(","),b=b||10,c=0;c<a.length;c+=2)d=String.fromCharCode(parseInt(a[c],b)),e[d]||(f="&"+a[c+1]+";",g[d]=f,g[f]=d);return g}}var d,e,f,g=a.makeMap,h=/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,i=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,j=/[<>&\"\']/g,k=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,l={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};e={'"':""","'":"'","<":"<",">":">","&":"&","`":"`"},f={"<":"<",">":">","&":"&",""":'"',"'":"'"},d=c("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var m={encodeRaw:function(a,b){return a.replace(b?h:i,function(a){return e[a]||a})},encodeAllRaw:function(a){return(""+a).replace(j,function(a){return e[a]||a})},encodeNumeric:function(a,b){return a.replace(b?h:i,function(a){return a.length>1?"&#"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+";":e[a]||"&#"+a.charCodeAt(0)+";"})},encodeNamed:function(a,b,c){return c=c||d,a.replace(b?h:i,function(a){return e[a]||c[a]||a})},getEncodeFunc:function(a,b){function f(a,c){return a.replace(c?h:i,function(a){return void 0!==e[a]?e[a]:void 0!==b[a]?b[a]:a.length>1?"&#"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+";":"&#"+a.charCodeAt(0)+";"})}function j(a,c){return m.encodeNamed(a,c,b)}return b=c(b)||d,a=g(a.replace(/\+/g,",")),a.named&&a.numeric?f:a.named?b?j:m.encodeNamed:a.numeric?m.encodeNumeric:m.encodeRaw},decode:function(a){return a.replace(k,function(a,c){return c?(c="x"===c.charAt(0).toLowerCase()?parseInt(c.substr(1),16):parseInt(c,10),c>65535?(c-=65536,String.fromCharCode(55296+(c>>10),56320+(1023&c))):l[c]||String.fromCharCode(c)):f[a]||d[a]||b(a)})}};return m}),g("tinymce.core.html.Schema",["tinymce.core.util.Tools"],function(a){function b(b,c){return b=a.trim(b),b?b.split(c||" "):[]}function c(a){function c(a,c,d){function e(a,b){var c,d,e={};for(c=0,d=a.length;c<d;c++)e[a[c]]=b||{};return e}var h,i,j;for(d=d||[],c=c||"","string"==typeof d&&(d=b(d)),a=b(a),h=a.length;h--;)i=b([g,c].join(" ")),j={attributes:e(i),attributesOrder:i,children:e(d,f)},n[a[h]]=j}function d(a,c){var d,e,f,g;for(a=b(a),d=a.length,c=b(c);d--;)for(e=n[a[d]],f=0,g=c.length;f<g;f++)e.attributes[c[f]]={},e.attributesOrder.push(c[f])}var g,i,j,k,l,m,n={};return e[a]?e[a]:(g="id accesskey class dir lang style tabindex title role",i="address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul",j="a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment","html4"!=a&&(g+=" contenteditable contextmenu draggable dropzone hidden spellcheck translate",i+=" article aside details dialog figure header footer hgroup section nav",j+=" audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"),"html5-strict"!=a&&(g+=" xml:lang",m="acronym applet basefont big font strike tt",j=[j,m].join(" "),h(b(m),function(a){c(a,"",j)}),l="center dir isindex noframes",i=[i,l].join(" "),k=[i,j].join(" "),h(b(l),function(a){c(a,"",k)})),k=k||[i,j].join(" "),c("html","manifest","head body"),c("head","","base command link meta noscript script style title"),c("title hr noscript br"),c("base","href target"),c("link","href rel media hreflang type sizes hreflang"),c("meta","name http-equiv content charset"),c("style","media type scoped"),c("script","src async defer type charset"),c("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",k),c("address dt dd div caption","",k),c("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",j),c("blockquote","cite",k),c("ol","reversed start type","li"),c("ul","","li"),c("li","value",k),c("dl","","dt dd"),c("a","href target rel media hreflang type",j),c("q","cite",j),c("ins del","cite datetime",k),c("img","src sizes srcset alt usemap ismap width height"),c("iframe","src name width height",k),c("embed","src type width height"),c("object","data type typemustmatch name usemap form width height",[k,"param"].join(" ")),c("param","name value"),c("map","name",[k,"area"].join(" ")),c("area","alt coords shape href target rel media hreflang type"),c("table","border","caption colgroup thead tfoot tbody tr"+("html4"==a?" col":"")),c("colgroup","span","col"),c("col","span"),c("tbody thead tfoot","","tr"),c("tr","","td th"),c("td","colspan rowspan headers",k),c("th","colspan rowspan headers scope abbr",k),c("form","accept-charset action autocomplete enctype method name novalidate target",k),c("fieldset","disabled form name",[k,"legend"].join(" ")),c("label","form for",j),c("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),c("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"==a?k:j),c("select","disabled form multiple name required size","option optgroup"),c("optgroup","disabled label","option"),c("option","disabled label selected value"),c("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),c("menu","type label",[k,"li"].join(" ")),c("noscript","",k),"html4"!=a&&(c("wbr"),c("ruby","",[j,"rt rp"].join(" ")),c("figcaption","",k),c("mark rt rp summary bdi","",j),c("canvas","width height",k),c("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",[k,"track source"].join(" ")),c("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",[k,"track source"].join(" ")),c("picture","","img source"),c("source","src srcset type media sizes"),c("track","kind src srclang label default"),c("datalist","",[j,"option"].join(" ")),c("article section nav aside header footer","",k),c("hgroup","","h1 h2 h3 h4 h5 h6"),c("figure","",[k,"figcaption"].join(" ")),c("time","datetime",j),c("dialog","open",k),c("command","type label icon disabled checked radiogroup command"),c("output","for form name",j),c("progress","value max",j),c("meter","value min max low high optimum",j),c("details","open",[k,"summary"].join(" ")),c("keygen","autofocus challenge disabled form keytype name")),
-"html5-strict"!=a&&(d("script","language xml:space"),d("style","xml:space"),d("object","declare classid code codebase codetype archive standby align border hspace vspace"),d("embed","align name hspace vspace"),d("param","valuetype type"),d("a","charset name rev shape coords"),d("br","clear"),d("applet","codebase archive code object alt name width height align hspace vspace"),d("img","name longdesc align border hspace vspace"),d("iframe","longdesc frameborder marginwidth marginheight scrolling align"),d("font basefont","size color face"),d("input","usemap align"),d("select","onchange"),d("textarea"),d("h1 h2 h3 h4 h5 h6 div p legend caption","align"),d("ul","type compact"),d("li","type"),d("ol dl menu dir","compact"),d("pre","width xml:space"),d("hr","align noshade size width"),d("isindex","prompt"),d("table","summary width frame rules cellspacing cellpadding align bgcolor"),d("col","width align char charoff valign"),d("colgroup","width align char charoff valign"),d("thead","align char charoff valign"),d("tr","align char charoff valign bgcolor"),d("th","axis align char charoff valign nowrap bgcolor width height"),d("form","accept"),d("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),d("tfoot","align char charoff valign"),d("tbody","align char charoff valign"),d("area","nohref"),d("body","background bgcolor text link vlink alink")),"html4"!=a&&(d("input button select textarea","autofocus"),d("input textarea","placeholder"),d("a","download"),d("link script img","crossorigin"),d("iframe","sandbox seamless allowfullscreen")),h(b("a form meter progress dfn"),function(a){n[a]&&delete n[a].children[a]}),delete n.caption.children.table,delete n.script,e[a]=n,n)}function d(a,b){var c;return a&&(c={},"string"==typeof a&&(a={"*":a}),h(a,function(a,d){c[d]=c[d.toUpperCase()]="map"==b?g(a,/[, ]/):j(a,/[, ]/)})),c}var e={},f={},g=a.makeMap,h=a.each,i=a.extend,j=a.explode,k=a.inArray;return function(a){function f(b,c,d){var f=a[b];return f?f=g(f,/[, ]/,g(f.toUpperCase(),/[, ]/)):(f=e[b],f||(f=g(c," ",g(c.toUpperCase()," ")),f=i(f,d),e[b]=f)),f}function l(a){return new RegExp("^"+a.replace(/([?+*])/g,".$1")+"$")}function m(a){var c,d,e,f,h,i,j,m,n,o,p,q,r,s,t,u,v,w,x,y=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,z=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,A=/[*?+]/;if(a)for(a=b(a,","),F["@"]&&(u=F["@"].attributes,v=F["@"].attributesOrder),c=0,d=a.length;c<d;c++)if(h=y.exec(a[c])){if(s=h[1],n=h[2],t=h[3],m=h[5],q={},r=[],i={attributes:q,attributesOrder:r},"#"===s&&(i.paddEmpty=!0),"-"===s&&(i.removeEmpty=!0),"!"===h[4]&&(i.removeEmptyAttrs=!0),u){for(w in u)q[w]=u[w];r.push.apply(r,v)}if(m)for(m=b(m,"|"),e=0,f=m.length;e<f;e++)if(h=z.exec(m[e])){if(j={},p=h[1],o=h[2].replace(/::/g,":"),s=h[3],x=h[4],"!"===p&&(i.attributesRequired=i.attributesRequired||[],i.attributesRequired.push(o),j.required=!0),"-"===p){delete q[o],r.splice(k(r,o),1);continue}s&&("="===s&&(i.attributesDefault=i.attributesDefault||[],i.attributesDefault.push({name:o,value:x}),j.defaultValue=x),":"===s&&(i.attributesForced=i.attributesForced||[],i.attributesForced.push({name:o,value:x}),j.forcedValue=x),"<"===s&&(j.validValues=g(x,"?"))),A.test(o)?(i.attributePatterns=i.attributePatterns||[],j.pattern=l(o),i.attributePatterns.push(j)):(q[o]||r.push(o),q[o]=j)}u||"@"!=n||(u=q,v=r),t&&(i.outputName=n,F[t]=i),A.test(n)?(i.pattern=l(n),H.push(i)):F[n]=i}}function n(a){F={},H=[],m(a),h(t,function(a,b){G[b]=a.children})}function o(a){var c=/^(~)?(.+)$/;a&&(e.text_block_elements=e.block_elements=null,h(b(a,","),function(a){var b=c.exec(a),d="~"===b[1],e=d?"span":"div",f=b[2];if(G[f]=G[e],I[f]=e,d||(z[f.toUpperCase()]={},z[f]={}),!F[f]){var g=F[e];g=i({},g),delete g.removeEmptyAttrs,delete g.removeEmpty,F[f]=g}h(G,function(a,b){a[e]&&(G[b]=a=i({},G[b]),a[f]=a[e])})}))}function p(c){var d=/^([+\-]?)(\w+)\[([^\]]+)\]$/;e[a.schema]=null,c&&h(b(c,","),function(a){var c,e,f=d.exec(a);f&&(e=f[1],c=e?G[f[2]]:G[f[2]]={"#comment":{}},c=G[f[2]],h(b(f[3],"|"),function(a){"-"===e?delete c[a]:c[a]={}}))})}function q(a){var b,c=F[a];if(c)return c;for(b=H.length;b--;)if(c=H[b],c.pattern.test(a))return c}var r,s,t,u,v,w,x,y,z,A,B,C,D,E=this,F={},G={},H=[],I={},J={};a=a||{},t=c(a.schema),a.verify_html===!1&&(a.valid_elements="*[*]"),r=d(a.valid_styles),s=d(a.invalid_styles,"map"),y=d(a.valid_classes,"map"),u=f("whitespace_elements","pre script noscript style textarea video audio iframe object code"),v=f("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),w=f("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),x=f("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),A=f("non_empty_elements","td th iframe video audio object script pre code",w),B=f("move_caret_before_on_enter_elements","table",A),C=f("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),z=f("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption",C),D=f("text_inline_elements","span strong b em i font strike u var cite dfn code mark q sup sub samp"),h((a.special||"script noscript noframes noembed title style textarea xmp").split(" "),function(a){J[a]=new RegExp("</"+a+"[^>]*>","gi")}),a.valid_elements?n(a.valid_elements):(h(t,function(a,b){F[b]={attributes:a.attributes,attributesOrder:a.attributesOrder},G[b]=a.children}),"html5"!=a.schema&&h(b("strong/b em/i"),function(a){a=b(a,"/"),F[a[1]].outputName=a[0]}),h(b("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(a){F[a]&&(F[a].removeEmpty=!0)}),h(b("p h1 h2 h3 h4 h5 h6 th td pre div address caption"),function(a){F[a].paddEmpty=!0}),h(b("span"),function(a){F[a].removeEmptyAttrs=!0})),o(a.custom_elements),p(a.valid_children),m(a.extended_valid_elements),p("+ol[ul|ol],+ul[ul|ol]"),h({dd:"dl",dt:"dl",li:"ul ol",td:"tr",th:"tr",tr:"tbody thead tfoot",tbody:"table",thead:"table",tfoot:"table",legend:"fieldset",area:"map",param:"video audio object"},function(a,c){F[c]&&(F[c].parentsRequired=b(a))}),a.invalid_elements&&h(j(a.invalid_elements),function(a){F[a]&&delete F[a]}),q("span")||m("span[!data-mce-type|*]"),E.children=G,E.getValidStyles=function(){return r},E.getInvalidStyles=function(){return s},E.getValidClasses=function(){return y},E.getBoolAttrs=function(){return x},E.getBlockElements=function(){return z},E.getTextBlockElements=function(){return C},E.getTextInlineElements=function(){return D},E.getShortEndedElements=function(){return w},E.getSelfClosingElements=function(){return v},E.getNonEmptyElements=function(){return A},E.getMoveCaretBeforeOnEnterElements=function(){return B},E.getWhiteSpaceElements=function(){return u},E.getSpecialElements=function(){return J},E.isValidChild=function(a,b){var c=G[a.toLowerCase()];return!(!c||!c[b.toLowerCase()])},E.isValid=function(a,b){var c,d,e=q(a);if(e){if(!b)return!0;if(e.attributes[b])return!0;if(c=e.attributePatterns)for(d=c.length;d--;)if(c[d].pattern.test(a))return!0}return!1},E.getElementRule=q,E.getCustomElements=function(){return I},E.addValidElements=m,E.setValidElements=n,E.addCustomElements=o,E.addValidChildren=p,E.elements=F}}),g("tinymce.core.html.Styles",[],function(){return function(a,b){function c(a,b,c,d){function e(a){return a=parseInt(a,10).toString(16),a.length>1?a:"0"+a}return"#"+e(b)+e(c)+e(d)}var d,e,f,g,h=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,j=/\s*([^:]+):\s*([^;]+);?/g,k=/\s+$/,l={},m="\ufeff";for(a=a||{},b&&(f=b.getValidStyles(),g=b.getInvalidStyles()),e=("\\\" \\' \\; \\: ; : "+m).split(" "),d=0;d<e.length;d++)l[e[d]]=m+d,l[m+d]=e[d];return{toHex:function(a){return a.replace(h,c)},parse:function(b){function e(a,b,c){var e,f,g,h;if(e=w[a+"-top"+b],e&&(f=w[a+"-right"+b],f&&(g=w[a+"-bottom"+b],g&&(h=w[a+"-left"+b])))){var i=[e,f,g,h];for(d=i.length-1;d--&&i[d]===i[d+1];);d>-1&&c||(w[a+b]=d==-1?i[0]:i.join(" "),delete w[a+"-top"+b],delete w[a+"-right"+b],delete w[a+"-bottom"+b],delete w[a+"-left"+b])}}function f(a){var b,c=w[a];if(c){for(c=c.split(" "),b=c.length;b--;)if(c[b]!==c[0])return!1;return w[a]=c[0],!0}}function g(a,b,c,d){f(b)&&f(c)&&f(d)&&(w[a]=w[b]+" "+w[c]+" "+w[d],delete w[b],delete w[c],delete w[d])}function n(a){return v=!0,l[a]}function o(a,b){return v&&(a=a.replace(/\uFEFF[0-9]/g,function(a){return l[a]})),b||(a=a.replace(/\\([\'\";:])/g,"$1")),a}function p(a){return String.fromCharCode(parseInt(a.slice(1),16))}function q(a){return a.replace(/\\[0-9a-f]+/gi,p)}function r(b,c,d,e,f,g){if(f=f||g)return f=o(f),"'"+f.replace(/\'/g,"\\'")+"'";if(c=o(c||d||e),!a.allow_script_urls){var h=c.replace(/[\s\r\n]+/g,"");if(/(java|vb)script:/i.test(h))return"";if(!a.allow_svg_data_urls&&/^data:image\/svg/i.test(h))return""}return x&&(c=x.call(y,c,"style")),"url('"+c.replace(/\'/g,"\\'")+"')"}var s,t,u,v,w={},x=a.url_converter,y=a.url_converter_scope||this;if(b){for(b=b.replace(/[\u0000-\u001F]/g,""),b=b.replace(/\\[\"\';:\uFEFF]/g,n).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(a){return a.replace(/[;:]/g,n)});s=j.exec(b);)if(j.lastIndex=s.index+s[0].length,t=s[1].replace(k,"").toLowerCase(),u=s[2].replace(k,""),t&&u){if(t=q(t),u=q(u),t.indexOf(m)!==-1||t.indexOf('"')!==-1)continue;if(!a.allow_script_urls&&("behavior"==t||/expression\s*\(|\/\*|\*\//.test(u)))continue;"font-weight"===t&&"700"===u?u="bold":"color"!==t&&"background-color"!==t||(u=u.toLowerCase()),u=u.replace(h,c),u=u.replace(i,r),w[t]=v?o(u,!0):u}e("border","",!0),e("border","-width"),e("border","-color"),e("border","-style"),e("padding",""),e("margin",""),g("border","border-width","border-style","border-color"),"medium none"===w.border&&delete w.border,"none"===w["border-image"]&&delete w["border-image"]}return w},serialize:function(a,b){function c(b){var c,d,e,g;if(c=f[b])for(d=0,e=c.length;d<e;d++)b=c[d],g=a[b],g&&(i+=(i.length>0?" ":"")+b+": "+g+";")}function d(a,b){var c;return c=g["*"],(!c||!c[a])&&(c=g[b],!c||!c[a])}var e,h,i="";if(b&&f)c("*"),c(b);else for(e in a)h=a[e],!h||g&&!d(e,b)||(i+=(i.length>0?" ":"")+e+": "+h+";");return i}}}}),g("tinymce.core.dom.DOMUtils",["tinymce.core.dom.DomQuery","tinymce.core.dom.EventUtils","tinymce.core.dom.Range","tinymce.core.dom.Sizzle","tinymce.core.dom.StyleSheetLoader","tinymce.core.dom.TreeWalker","tinymce.core.Env","tinymce.core.html.Entities","tinymce.core.html.Schema","tinymce.core.html.Styles","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i,j,k){function l(a,b){var c,d={},e=b.keep_values;return c={set:function(c,d,e){b.url_converter&&(d=b.url_converter.call(b.url_converter_scope||a,d,e,c[0])),c.attr("data-mce-"+e,d).attr(e,d)},get:function(a,b){return a.attr("data-mce-"+b)||a.attr(b)}},d={style:{set:function(a,b){return null!==b&&"object"==typeof b?void a.css(b):(e&&a.attr("data-mce-style",b),void a.attr("style",b))},get:function(b){var c=b.attr("data-mce-style")||b.attr("style");return c=a.serializeStyle(a.parseStyle(c),b[0].nodeName)}}},e&&(d.href=d.src=c),d}function m(a,b){var c=b.attr("style");c=a.serializeStyle(a.parseStyle(c),b[0].nodeName),c||(c=null),b.attr("data-mce-style",c)}function n(a,b){var c,d,e=0;if(a)for(c=a.nodeType,a=a.previousSibling;a;a=a.previousSibling)d=a.nodeType,(!b||3!=d||d!=c&&a.nodeValue.length)&&(e++,c=d);return e}function o(c,d){var f,g=this;g.doc=c,g.win=window,g.files={},g.counter=0,g.stdMode=!t||c.documentMode>=8,g.boxModel=!t||"CSS1Compat"==c.compatMode||g.stdMode,g.styleSheetLoader=new e(c),g.boundEvents=[],g.settings=d=d||{},g.schema=d.schema?d.schema:new i({}),g.styles=new j({url_converter:d.url_converter,url_converter_scope:d.url_converter_scope},d.schema),g.fixDoc(c),g.events=d.ownEvents?new b(d.proxy):b.Event,g.attrHooks=l(g,d),f=d.schema?d.schema.getBlockElements():{},g.$=a.overrideDefaults(function(){return{context:c,element:g.getRoot()}}),g.isBlock=function(a){if(!a)return!1;var b=a.nodeType;return b?!(1!==b||!f[a.nodeName]):!!f[a]}}var p=k.each,q=k.is,r=k.grep,s=k.trim,t=g.ie,u=/^([a-z0-9],?)+$/i,v=/^[ \t\r\n]*$/;return o.prototype={$$:function(a){return"string"==typeof a&&(a=this.get(a)),this.$(a)},root:null,fixDoc:function(a){var b,c=this.settings;if(t&&c.schema){"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video".replace(/\w+/g,function(b){a.createElement(b)});for(b in c.schema.getCustomElements())a.createElement(b)}},clone:function(a,b){var c,d,e=this;return!t||1!==a.nodeType||b?a.cloneNode(b):(d=e.doc,b?c.firstChild:(c=d.createElement(a.nodeName),p(e.getAttribs(a),function(b){e.setAttrib(c,b.nodeName,e.getAttrib(a,b.nodeName))}),c))},getRoot:function(){var a=this;return a.settings.root_element||a.doc.body},getViewPort:function(a){var b,c;return a=a?a:this.win,b=a.document,c=this.boxModel?b.documentElement:b.body,{x:a.pageXOffset||c.scrollLeft,y:a.pageYOffset||c.scrollTop,w:a.innerWidth||c.clientWidth,h:a.innerHeight||c.clientHeight}},getRect:function(a){var b,c,d=this;return a=d.get(a),b=d.getPos(a),c=d.getSize(a),{x:b.x,y:b.y,w:c.w,h:c.h}},getSize:function(a){var b,c,d=this;return a=d.get(a),b=d.getStyle(a,"width"),c=d.getStyle(a,"height"),b.indexOf("px")===-1&&(b=0),c.indexOf("px")===-1&&(c=0),{w:parseInt(b,10)||a.offsetWidth||a.clientWidth,h:parseInt(c,10)||a.offsetHeight||a.clientHeight}},getParent:function(a,b,c){return this.getParents(a,b,c,!1)},getParents:function(a,b,c,d){var e,f=this,g=[];for(a=f.get(a),d=void 0===d,c=c||("BODY"!=f.getRoot().nodeName?f.getRoot().parentNode:null),q(b,"string")&&(e=b,b="*"===b?function(a){return 1==a.nodeType}:function(a){return f.is(a,e)});a&&a!=c&&a.nodeType&&9!==a.nodeType;){if(!b||b(a)){if(!d)return a;g.push(a)}a=a.parentNode}return d?g:null},get:function(a){var b;return a&&this.doc&&"string"==typeof a&&(b=a,a=this.doc.getElementById(a),a&&a.id!==b)?this.doc.getElementsByName(b)[1]:a},getNext:function(a,b){return this._findSib(a,b,"nextSibling")},getPrev:function(a,b){return this._findSib(a,b,"previousSibling")},select:function(a,b){var c=this;return d(a,c.get(b)||c.settings.root_element||c.doc,[])},is:function(a,b){var c;if(!a)return!1;if(void 0===a.length){if("*"===b)return 1==a.nodeType;if(u.test(b)){for(b=b.toLowerCase().split(/,/),a=a.nodeName.toLowerCase(),c=b.length-1;c>=0;c--)if(b[c]==a)return!0;return!1}}if(a.nodeType&&1!=a.nodeType)return!1;var e=a.nodeType?[a]:a;return d(b,e[0].ownerDocument||e[0],null,e).length>0},add:function(a,b,c,d,e){var f=this;return this.run(a,function(a){var g;return g=q(b,"string")?f.doc.createElement(b):b,f.setAttribs(g,c),d&&(d.nodeType?g.appendChild(d):f.setHTML(g,d)),e?g:a.appendChild(g)})},create:function(a,b,c){return this.add(this.doc.createElement(a),a,b,c,1)},createHTML:function(a,b,c){var d,e="";e+="<"+a;for(d in b)b.hasOwnProperty(d)&&null!==b[d]&&"undefined"!=typeof b[d]&&(e+=" "+d+'="'+this.encode(b[d])+'"');return"undefined"!=typeof c?e+">"+c+"</"+a+">":e+" />"},createFragment:function(a){var b,c,d,e=this.doc;for(d=e.createElement("div"),b=e.createDocumentFragment(),a&&(d.innerHTML=a);c=d.firstChild;)b.appendChild(c);return b},remove:function(a,b){return a=this.$$(a),b?a.each(function(){for(var a;a=this.firstChild;)3==a.nodeType&&0===a.data.length?this.removeChild(a):this.parentNode.insertBefore(a,this)}).remove():a.remove(),a.length>1?a.toArray():a[0]},setStyle:function(a,b,c){a=this.$$(a).css(b,c),this.settings.update_styles&&m(this,a)},getStyle:function(a,b,c){return a=this.$$(a),c?a.css(b):(b=b.replace(/-(\D)/g,function(a,b){return b.toUpperCase()}),"float"==b&&(b=g.ie&&g.ie<12?"styleFloat":"cssFloat"),a[0]&&a[0].style?a[0].style[b]:void 0)},setStyles:function(a,b){a=this.$$(a).css(b),this.settings.update_styles&&m(this,a)},removeAllAttribs:function(a){return this.run(a,function(a){var b,c=a.attributes;for(b=c.length-1;b>=0;b--)a.removeAttributeNode(c.item(b))})},setAttrib:function(a,b,c){var d,e,f=this,g=f.settings;""===c&&(c=null),a=f.$$(a),d=a.attr(b),a.length&&(e=f.attrHooks[b],e&&e.set?e.set(a,c,b):a.attr(b,c),d!=c&&g.onSetAttrib&&g.onSetAttrib({attrElm:a,attrName:b,attrValue:c}))},setAttribs:function(a,b){var c=this;c.$$(a).each(function(a,d){p(b,function(a,b){c.setAttrib(d,b,a)})})},getAttrib:function(a,b,c){var d,e,f=this;return a=f.$$(a),a.length&&(d=f.attrHooks[b],e=d&&d.get?d.get(a,b):a.attr(b)),"undefined"==typeof e&&(e=c||""),e},getPos:function(b,c){var d,e,f=this,g=0,h=0,i=f.doc,j=i.body;if(b=f.get(b),c=c||j,b){if(c===j&&b.getBoundingClientRect&&"static"===a(j).css("position"))return e=b.getBoundingClientRect(),c=f.boxModel?i.documentElement:j,g=e.left+(i.documentElement.scrollLeft||j.scrollLeft)-c.clientLeft,h=e.top+(i.documentElement.scrollTop||j.scrollTop)-c.clientTop,{x:g,y:h};for(d=b;d&&d!=c&&d.nodeType;)g+=d.offsetLeft||0,h+=d.offsetTop||0,d=d.offsetParent;for(d=b.parentNode;d&&d!=c&&d.nodeType;)g-=d.scrollLeft||0,h-=d.scrollTop||0,d=d.parentNode}return{x:g,y:h}},parseStyle:function(a){return this.styles.parse(a)},serializeStyle:function(a,b){return this.styles.serialize(a,b)},addStyle:function(a){var b,c,d=this,e=d.doc;if(d!==o.DOM&&e===document){var f=o.DOM.addedStyles;if(f=f||[],f[a])return;f[a]=!0,o.DOM.addedStyles=f}c=e.getElementById("mceDefaultStyles"),c||(c=e.createElement("style"),c.id="mceDefaultStyles",c.type="text/css",b=e.getElementsByTagName("head")[0],b.firstChild?b.insertBefore(c,b.firstChild):b.appendChild(c)),c.styleSheet?c.styleSheet.cssText+=a:c.appendChild(e.createTextNode(a))},loadCSS:function(a){var b,c=this,d=c.doc;return c!==o.DOM&&d===document?void o.DOM.loadCSS(a):(a||(a=""),b=d.getElementsByTagName("head")[0],void p(a.split(","),function(a){var e;a=k._addCacheSuffix(a),c.files[a]||(c.files[a]=!0,e=c.create("link",{rel:"stylesheet",href:a}),t&&d.documentMode&&d.recalc&&(e.onload=function(){d.recalc&&d.recalc(),e.onload=null}),b.appendChild(e))}))},addClass:function(a,b){this.$$(a).addClass(b)},removeClass:function(a,b){this.toggleClass(a,b,!1)},hasClass:function(a,b){return this.$$(a).hasClass(b)},toggleClass:function(b,c,d){this.$$(b).toggleClass(c,d).each(function(){""===this.className&&a(this).attr("class",null)})},show:function(a){this.$$(a).show()},hide:function(a){this.$$(a).hide()},isHidden:function(a){return"none"==this.$$(a).css("display")},uniqueId:function(a){return(a?a:"mce_")+this.counter++},setHTML:function(b,c){b=this.$$(b),t?b.each(function(b,d){if(d.canHaveHTML!==!1){for(;d.firstChild;)d.removeChild(d.firstChild);try{d.innerHTML="<br>"+c,d.removeChild(d.firstChild)}catch(e){a("<div></div>").html("<br>"+c).contents().slice(1).appendTo(d)}return c}}):b.html(c)},getOuterHTML:function(b){return b=this.get(b),1==b.nodeType&&"outerHTML"in b?b.outerHTML:a("<div></div>").append(a(b).clone()).html()},setOuterHTML:function(b,c){var d=this;d.$$(b).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=c)}catch(b){}d.remove(a(this).html(c),!0)})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(a,b){return b=this.get(b),this.run(a,function(a){var c,d;return c=b.parentNode,d=b.nextSibling,d?c.insertBefore(a,d):c.appendChild(a),a})},replace:function(a,b,c){var d=this;return d.run(b,function(b){return q(b,"array")&&(a=a.cloneNode(!0)),c&&p(r(b.childNodes),function(b){a.appendChild(b)}),b.parentNode.replaceChild(a,b)})},rename:function(a,b){var c,d=this;return a.nodeName!=b.toUpperCase()&&(c=d.create(b),p(d.getAttribs(a),function(b){d.setAttrib(c,b.nodeName,d.getAttrib(a,b.nodeName))}),d.replace(c,a,1)),c||a},findCommonAncestor:function(a,b){for(var c,d=a;d;){for(c=b;c&&d!=c;)c=c.parentNode;if(d==c)break;d=d.parentNode}return!d&&a.ownerDocument?a.ownerDocument.documentElement:d},toHex:function(a){return this.styles.toHex(k.trim(a))},run:function(a,b,c){var d,e=this;return"string"==typeof a&&(a=e.get(a)),!!a&&(c=c||this,a.nodeType||!a.length&&0!==a.length?b.call(c,a):(d=[],p(a,function(a,f){a&&("string"==typeof a&&(a=e.get(a)),d.push(b.call(c,a,f)))}),d))},getAttribs:function(a){var b;if(a=this.get(a),!a)return[];if(t){if(b=[],"OBJECT"==a.nodeName)return a.attributes;"OPTION"===a.nodeName&&this.getAttrib(a,"selected")&&b.push({specified:1,nodeName:"selected"});var c=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return a.cloneNode(!1).outerHTML.replace(c,"").replace(/[\w:\-]+/gi,function(a){b.push({specified:1,nodeName:a})}),b}return a.attributes},isEmpty:function(a,b){var c,d,e,g,h,i,j=this,k=0;if(a=a.firstChild){h=new f(a,a.parentNode),b=b||(j.schema?j.schema.getNonEmptyElements():null),g=j.schema?j.schema.getWhiteSpaceElements():{};do{if(e=a.nodeType,1===e){var l=a.getAttribute("data-mce-bogus");if(l){a=h.next("all"===l);continue}if(i=a.nodeName.toLowerCase(),b&&b[i]){if("br"===i){k++,a=h.next();continue}return!1}for(d=j.getAttribs(a),c=d.length;c--;)if(i=d[c].nodeName,"name"===i||"data-mce-bookmark"===i)return!1}if(8==e)return!1;if(3===e&&!v.test(a.nodeValue))return!1;if(3===e&&a.parentNode&&g[a.parentNode.nodeName]&&v.test(a.nodeValue))return!1;a=h.next()}while(a)}return k<=1},createRng:function(){var a=this.doc;return a.createRange?a.createRange():new c(this)},nodeIndex:n,split:function(a,b,c){function d(a){function b(a){var b=a.previousSibling&&"SPAN"==a.previousSibling.nodeName,c=a.nextSibling&&"SPAN"==a.nextSibling.nodeName;return b&&c}var c,e=a.childNodes,f=a.nodeType;if(1!=f||"bookmark"!=a.getAttribute("data-mce-type")){for(c=e.length-1;c>=0;c--)d(e[c]);if(9!=f){if(3==f&&a.nodeValue.length>0){var g=s(a.nodeValue).length;if(!h.isBlock(a.parentNode)||g>0||0===g&&b(a))return}else if(1==f&&(e=a.childNodes,1==e.length&&e[0]&&1==e[0].nodeType&&"bookmark"==e[0].getAttribute("data-mce-type")&&a.parentNode.insertBefore(e[0],a),e.length||/^(br|hr|input|img)$/i.test(a.nodeName)))return;h.remove(a)}return a}}var e,f,g,h=this,i=h.createRng();if(a&&b)return i.setStart(a.parentNode,h.nodeIndex(a)),i.setEnd(b.parentNode,h.nodeIndex(b)),e=i.extractContents(),i=h.createRng(),i.setStart(b.parentNode,h.nodeIndex(b)+1),i.setEnd(a.parentNode,h.nodeIndex(a)+1),f=i.extractContents(),g=a.parentNode,g.insertBefore(d(e),a),c?g.insertBefore(c,a):g.insertBefore(b,a),g.insertBefore(d(f),a),h.remove(a),c||b},bind:function(a,b,c,d){var e=this;if(k.isArray(a)){for(var f=a.length;f--;)a[f]=e.bind(a[f],b,c,d);return a}return!e.settings.collect||a!==e.doc&&a!==e.win||e.boundEvents.push([a,b,c,d]),e.events.bind(a,b,c,d||e)},unbind:function(a,b,c){var d,e=this;if(k.isArray(a)){for(d=a.length;d--;)a[d]=e.unbind(a[d],b,c);return a}if(e.boundEvents&&(a===e.doc||a===e.win))for(d=e.boundEvents.length;d--;){var f=e.boundEvents[d];a!=f[0]||b&&b!=f[1]||c&&c!=f[2]||this.events.unbind(f[0],f[1],f[2])}return this.events.unbind(a,b,c)},fire:function(a,b,c){return this.events.fire(a,b,c)},getContentEditable:function(a){var b;return a&&1==a.nodeType?(b=a.getAttribute("data-mce-contenteditable"),b&&"inherit"!==b?b:"inherit"!==a.contentEditable?a.contentEditable:null):null},getContentEditableParent:function(a){for(var b=this.getRoot(),c=null;a&&a!==b&&(c=this.getContentEditable(a),null===c);a=a.parentNode);return c},destroy:function(){var a=this;if(a.boundEvents){for(var b=a.boundEvents.length;b--;){var c=a.boundEvents[b];this.events.unbind(c[0],c[1],c[2])}a.boundEvents=null}d.setDocument&&d.setDocument(),a.win=a.doc=a.root=a.events=a.frag=null},isChildOf:function(a,b){for(;a;){if(b===a)return!0;a=a.parentNode}return!1},dumpRng:function(a){return"startContainer: "+a.startContainer.nodeName+", startOffset: "+a.startOffset+", endContainer: "+a.endContainer.nodeName+", endOffset: "+a.endOffset},_findSib:function(a,b,c){var d=this,e=b;if(a)for("string"==typeof e&&(e=function(a){return d.is(a,b)}),a=a[c];a;a=a[c])if(e(a))return a;return null}},o.DOM=new o(document),o.nodeIndex=n,o}),g("tinymce.core.dom.ScriptLoader",["tinymce.core.dom.DOMUtils","tinymce.core.util.Tools"],function(a,b){function c(){function a(a,c,e){function f(){k.remove(j),i&&(i.onreadystatechange=i.onload=i=null),c()}function h(){g(e)?e():"undefined"!=typeof console&&console.log&&console.log("Failed to load script: "+a)}var i,j,k=d;j=k.uniqueId(),i=document.createElement("script"),i.id=j,i.type="text/javascript",i.src=b._addCacheSuffix(a),"onreadystatechange"in i?i.onreadystatechange=function(){/loaded|complete/.test(i.readyState)&&f()}:i.onload=f,i.onerror=h,(document.getElementsByTagName("head")[0]||document.body).appendChild(i)}var c,h=0,i=1,j=2,k=3,l={},m=[],n={},o=[],p=0;this.isDone=function(a){return l[a]==j},this.markDone=function(a){l[a]=j},this.add=this.load=function(a,b,d,e){var f=l[a];f==c&&(m.push(a),l[a]=h),b&&(n[a]||(n[a]=[]),n[a].push({success:b,failure:e,scope:d||this}))},this.remove=function(a){delete l[a],delete n[a]},this.loadQueue=function(a,b,c){this.loadScripts(m,a,b,c)},this.loadScripts=function(b,d,h,m){function q(a,b){e(n[b],function(b){g(b[a])&&b[a].call(b.scope)}),n[b]=c}var r,s=[];o.push({success:d,failure:m,scope:h||this}),(r=function(){var c=f(b);b.length=0,e(c,function(b){return l[b]===j?void q("success",b):l[b]===k?void q("failure",b):void(l[b]!==i&&(l[b]=i,p++,a(b,function(){l[b]=j,p--,q("success",b),r()},function(){l[b]=k,p--,s.push(b),q("failure",b),r()})))}),p||(e(o,function(a){0===s.length?g(a.success)&&a.success.call(a.scope):g(a.failure)&&a.failure.call(a.scope,s)}),o.length=0)})()}}var d=a.DOM,e=b.each,f=b.grep,g=function(a){return"function"==typeof a};return c.ScriptLoader=new c,c}),g("tinymce.core.AddOnManager",["tinymce.core.dom.ScriptLoader","tinymce.core.util.Tools"],function(a,b){function c(){var a=this;a.items=[],a.urls={},a.lookup={}}var d=b.each;return c.prototype={get:function(a){if(this.lookup[a])return this.lookup[a].instance},dependencies:function(a){var b;return this.lookup[a]&&(b=this.lookup[a].dependencies),b||[]},requireLangPack:function(b,d){var e=c.language;if(e&&c.languageLoad!==!1){if(d)if(d=","+d+",",d.indexOf(","+e.substr(0,2)+",")!=-1)e=e.substr(0,2);else if(d.indexOf(","+e+",")==-1)return;a.ScriptLoader.add(this.urls[b]+"/langs/"+e+".js")}},add:function(a,b,c){return this.items.push(b),this.lookup[a]={instance:b,dependencies:c},b},remove:function(a){delete this.urls[a],delete this.lookup[a]},createUrl:function(a,b){return"object"==typeof b?b:{prefix:a.prefix,resource:b,suffix:a.suffix}},addComponents:function(b,c){var e=this.urls[b];d(c,function(b){a.ScriptLoader.add(e+"/"+b)})},load:function(b,e,f,g,h){function i(){var c=j.dependencies(b);d(c,function(a){var b=j.createUrl(e,a);j.load(b.resource,b,void 0,void 0)}),f&&(g?f.call(g):f.call(a))}var j=this,k=e;j.urls[b]||("object"==typeof e&&(k=e.prefix+e.resource+e.suffix),0!==k.indexOf("/")&&k.indexOf("://")==-1&&(k=c.baseURL+"/"+k),j.urls[b]=k.substring(0,k.lastIndexOf("/")),j.lookup[b]?i():a.ScriptLoader.add(k,i,g,h))}},c.PluginManager=new c,c.ThemeManager=new c,c}),g("ephox.katamari.api.Cell",[],function(){var a=function(b){var c=b,d=function(){return c},e=function(a){c=a},f=function(){return a(d())};return{get:d,set:e,clone:f}};return a}),g("tinymce.core.dom.NodeType",[],function(){function a(a){return function(b){return!!b&&b.nodeType==a}}function b(a){return a=a.toLowerCase().split(" "),function(b){var c,d;if(b&&b.nodeType)for(d=b.nodeName.toLowerCase(),c=0;c<a.length;c++)if(d===a[c])return!0;return!1}}function c(a,b){return b=b.toLowerCase().split(" "),function(c){var d,e;if(i(c))for(d=0;d<b.length;d++)if(e=c.ownerDocument.defaultView.getComputedStyle(c,null).getPropertyValue(a),e===b[d])return!0;return!1}}function d(a,b){return function(c){return i(c)&&c[a]===b}}function e(a,b){return function(b){return i(b)&&b.hasAttribute(a)}}function f(a,b){return function(c){return i(c)&&c.getAttribute(a)===b}}function g(a){return i(a)&&a.hasAttribute("data-mce-bogus")}function h(a){return function(b){if(i(b)){if(b.contentEditable===a)return!0;if(b.getAttribute("data-mce-contenteditable")===a)return!0}return!1}}var i=a(1);return{isText:a(3),isElement:i,isComment:a(8),isBr:b("br"),isContentEditableTrue:h("true"),isContentEditableFalse:h("false"),matchNodeNames:b,hasPropValue:d,hasAttribute:e,hasAttributeValue:f,matchStyleValues:c,isBogus:g}}),g("tinymce.core.util.Fun",[],function(){function a(a){return function(){return a}}function b(a){return function(b){return!a(b)}}function c(a,b){return function(c){return a(b(c))}}function d(){var a=h.call(arguments);return function(b){for(var c=0;c<a.length;c++)if(a[c](b))return!0;return!1}}function e(){var a=h.call(arguments);return function(b){for(var c=0;c<a.length;c++)if(!a[c](b))return!1;return!0}}function f(a){var b=h.call(arguments);return b.length-1>=a.length?a.apply(this,b.slice(1)):function(){var a=b.concat([].slice.call(arguments));return f.apply(this,a)}}function g(){}var h=[].slice;return{constant:a,negate:b,and:e,or:d,curry:f,compose:c,noop:g}}),g("tinymce.core.text.Zwsp",[],function(){var a="\ufeff",b=function(b){return b===a},c=function(b){return b.replace(new RegExp(a,"g"),"")};return{isZwsp:b,ZWSP:a,trim:c}}),g("tinymce.core.caret.CaretContainer",["tinymce.core.dom.NodeType","tinymce.core.text.Zwsp"],function(a,b){function c(a){return n(a)&&(a=a.parentNode),m(a)&&a.hasAttribute("data-mce-caret")}function d(a){return n(a)&&b.isZwsp(a.data)}function e(a){return c(a)||d(a)}function f(a,c){var d,f,g,h;if(d=a.ownerDocument,g=d.createTextNode(b.ZWSP),h=a.parentNode,c){if(f=a.previousSibling,n(f)){if(e(f))return f;if(j(f))return f.splitText(f.data.length-1)}h.insertBefore(g,a)}else{if(f=a.nextSibling,n(f)){if(e(f))return f;if(i(f))return f.splitText(1),f}a.nextSibling?h.insertBefore(g,a.nextSibling):h.appendChild(g)}return g}function g(){var a=document.createElement("br");return a.setAttribute("data-mce-bogus","1"),a}function h(a,b,c){var d,e,f;return d=b.ownerDocument,e=d.createElement(a),e.setAttribute("data-mce-caret",c?"before":"after"),e.setAttribute("data-mce-bogus","all"),e.appendChild(g()),f=b.parentNode,c?f.insertBefore(e,b):b.nextSibling?f.insertBefore(e,b.nextSibling):f.appendChild(e),e}function i(a){return n(a)&&a.data[0]==b.ZWSP}function j(a){return n(a)&&a.data[a.data.length-1]==b.ZWSP}function k(b){var c=b.getElementsByTagName("br"),d=c[c.length-1];a.isBogus(d)&&d.parentNode.removeChild(d)}function l(a){return a&&a.hasAttribute("data-mce-caret")?(k(a),a.removeAttribute("data-mce-caret"),a.removeAttribute("data-mce-bogus"),a.removeAttribute("style"),a.removeAttribute("_moz_abspos"),a):null}var m=a.isElement,n=a.isText,o=function(b){return b.firstChild!==b.lastChild||!a.isBr(b.firstChild)},p=function(c){if(a.isText(c)){var d=c.data;return d.length>0&&d.charAt(0)!==b.ZWSP&&c.insertData(0,b.ZWSP),c}return null},q=function(c){if(a.isText(c)){var d=c.data;return d.length>0&&d.charAt(d.length-1)!==b.ZWSP&&c.insertData(d.length,b.ZWSP),c}return null},r=function(c){return c&&a.isText(c.container())&&c.container().data.charAt(c.offset())===b.ZWSP},s=function(c){return c&&a.isText(c.container())&&c.container().data.charAt(c.offset()-1)===b.ZWSP};return{isCaretContainer:e,isCaretContainerBlock:c,isCaretContainerInline:d,showCaretContainerBlock:l,insertInline:f,prependInline:p,appendInline:q,isBeforeInline:r,isAfterInline:s,insertBlock:h,hasContent:o,startsWithCaretContainer:i,endsWithCaretContainer:j}}),g("tinymce.core.dom.RangeUtils",["tinymce.core.util.Tools","tinymce.core.dom.TreeWalker","tinymce.core.dom.NodeType","tinymce.core.dom.Range","tinymce.core.caret.CaretContainer"],function(a,b,c,d,e){function f(a){return q(a)||r(a)}function g(a,b){var c=a.childNodes;return b--,b>c.length-1?b=c.length-1:b<0&&(b=0),c[b]||a}function h(a,b,c){for(;a&&a!==b;){if(c(a))return a;a=a.parentNode}return null}function i(a,b,c){return null!==h(a,b,c)}function j(a,b,c){return i(a,b,function(a){return a.nodeName===c})}function k(a){return"_mce_caret"===a.id}function l(a,b){return s(a)&&i(a,b,k)===!1}function m(a){this.walk=function(b,c){function d(a){var b;return b=a[0],3===b.nodeType&&b===q&&r>=b.nodeValue.length&&a.splice(0,1),
-b=a[a.length-1],0===t&&a.length>0&&b===s&&3===b.nodeType&&a.splice(a.length-1,1),a}function e(a,b,c){for(var d=[];a&&a!=c;a=a[b])d.push(a);return d}function f(a,b){do{if(a.parentNode==b)return a;a=a.parentNode}while(a)}function h(a,b,f){var g=f?"nextSibling":"previousSibling";for(l=a,m=l.parentNode;l&&l!=b;l=m)m=l.parentNode,n=e(l==a?l:l[g],g),n.length&&(f||n.reverse(),c(d(n)))}var i,j,k,l,m,n,o,q=b.startContainer,r=b.startOffset,s=b.endContainer,t=b.endOffset;if(o=a.select("td[data-mce-selected],th[data-mce-selected]"),o.length>0)return void p(o,function(a){c([a])});if(1==q.nodeType&&q.hasChildNodes()&&(q=q.childNodes[r]),1==s.nodeType&&s.hasChildNodes()&&(s=g(s,t)),q==s)return c(d([q]));for(i=a.findCommonAncestor(q,s),l=q;l;l=l.parentNode){if(l===s)return h(q,i,!0);if(l===i)break}for(l=s;l;l=l.parentNode){if(l===q)return h(s,i);if(l===i)break}j=f(q,i)||q,k=f(s,i)||s,h(q,j,!0),n=e(j==q?j:j.nextSibling,"nextSibling",k==s?k.nextSibling:k),n.length&&c(d(n)),h(s,k)},this.split=function(a){function b(a,b){return a.splitText(b)}var c=a.startContainer,d=a.startOffset,e=a.endContainer,f=a.endOffset;return c==e&&3==c.nodeType?d>0&&d<c.nodeValue.length&&(e=b(c,d),c=e.previousSibling,f>d?(f-=d,c=e=b(e,f).previousSibling,f=e.nodeValue.length,d=0):f=0):(3==c.nodeType&&d>0&&d<c.nodeValue.length&&(c=b(c,d),d=0),3==e.nodeType&&f>0&&f<e.nodeValue.length&&(e=b(e,f).previousSibling,f=e.nodeValue.length)),{startContainer:c,startOffset:d,endContainer:e,endOffset:f}},this.normalize=function(c){function d(d){function g(a){return a&&/^(TD|TH|CAPTION)$/.test(a.nodeName)}function h(c,d){for(var e=new b(c,a.getParent(c.parentNode,a.isBlock)||w);c=e[d?"prev":"next"]();)if("BR"===c.nodeName)return!0}function i(a){for(;a&&a!=w;){if(r(a))return!0;a=a.parentNode}return!1}function k(a,b){return a.previousSibling&&a.previousSibling.nodeName==b}function m(c,d){var g,h,i;if(d=d||n,i=a.getParent(d.parentNode,a.isBlock)||w,c&&"BR"==d.nodeName&&v&&a.isEmpty(i))return n=d.parentNode,o=a.nodeIndex(d),void(f=!0);for(g=new b(d,i);q=g[c?"prev":"next"]();){if("false"===a.getContentEditableParent(q)||l(q,a.getRoot()))return;if(3===q.nodeType&&q.nodeValue.length>0)return void(j(q,w,"A")===!1&&(n=q,o=c?q.nodeValue.length:0,f=!0));if(a.isBlock(q)||t[q.nodeName.toLowerCase()])return;h=q}e&&h&&(n=h,f=!0,o=0)}var n,o,p,q,t,u,v,w=a.getRoot();if(n=c[(d?"start":"end")+"Container"],o=c[(d?"start":"end")+"Offset"],v=1==n.nodeType&&o===n.childNodes.length,t=a.schema.getNonEmptyElements(),u=d,!s(n)){if(1==n.nodeType&&o>n.childNodes.length-1&&(u=!1),9===n.nodeType&&(n=a.getRoot(),o=0),n===w){if(u&&(q=n.childNodes[o>0?o-1:0])){if(s(q))return;if(t[q.nodeName]||"TABLE"==q.nodeName)return}if(n.hasChildNodes()){if(o=Math.min(!u&&o>0?o-1:o,n.childNodes.length-1),n=n.childNodes[o],o=0,!e&&n===w.lastChild&&"TABLE"===n.nodeName)return;if(i(n)||s(n))return;if(n.hasChildNodes()&&!/TABLE/.test(n.nodeName)){q=n,p=new b(n,w);do{if(r(q)||s(q)){f=!1;break}if(3===q.nodeType&&q.nodeValue.length>0){o=u?0:q.nodeValue.length,n=q,f=!0;break}if(t[q.nodeName.toLowerCase()]&&!g(q)){o=a.nodeIndex(q),n=q.parentNode,"IMG"!==q.nodeName&&"PRE"!==q.nodeName||u||o++,f=!0;break}}while(q=u?p.next():p.prev())}}}e&&(3===n.nodeType&&0===o&&m(!0),1===n.nodeType&&(q=n.childNodes[o],q||(q=n.childNodes[o-1]),!q||"BR"!==q.nodeName||k(q,"A")||h(q)||h(q,!0)||m(!0,q))),u&&!e&&3===n.nodeType&&o===n.nodeValue.length&&m(!1),f&&c["set"+(d?"Start":"End")](n,o)}}var e,f=!1;return e=c.collapsed,d(!0),e||d(),f&&e&&c.collapse(!0),f}}function n(b,c,d){var e,f,g;if(e=d.elementFromPoint(b,c),f=d.body.createTextRange(),e&&"HTML"!=e.tagName||(e=d.body),f.moveToElementText(e),g=a.toArray(f.getClientRects()),g=g.sort(function(a,b){return a=Math.abs(Math.max(a.top-c,a.bottom-c)),b=Math.abs(Math.max(b.top-c,b.bottom-c)),a-b}),g.length>0){c=(g[0].bottom+g[0].top)/2;try{return f.moveToPoint(b,c),f.collapse(!0),f}catch(h){}}return null}function o(a,b){var c=a&&a.parentElement?a.parentElement():null;return r(h(c,b,f))?null:a}var p=a.each,q=c.isContentEditableTrue,r=c.isContentEditableFalse,s=e.isCaretContainer;return m.compareRanges=function(a,b){if(a&&b){if(!a.item&&!a.duplicate)return a.startContainer==b.startContainer&&a.startOffset==b.startOffset;if(a.item&&b.item&&a.item(0)===b.item(0))return!0;if(a.isEqual&&b.isEqual&&b.isEqual(a))return!0}return!1},m.getCaretRangeFromPoint=function(a,b,c){var d,e;if(c.caretPositionFromPoint)e=c.caretPositionFromPoint(a,b),d=c.createRange(),d.setStart(e.offsetNode,e.offset),d.collapse(!0);else if(c.caretRangeFromPoint)d=c.caretRangeFromPoint(a,b);else if(c.body.createTextRange){d=c.body.createTextRange();try{d.moveToPoint(a,b),d.collapse(!0)}catch(f){d=n(a,b,c)}return o(d,c.body)}return d},m.getSelectedNode=function(a){var b=a.startContainer,c=a.startOffset;return b.hasChildNodes()&&a.endOffset==c+1?b.childNodes[c]:null},m.getNode=function(a,b){return 1===a.nodeType&&a.hasChildNodes()&&(b>=a.childNodes.length&&(b=a.childNodes.length-1),a=a.childNodes[b]),a},m}),g("tinymce.core.caret.CaretCandidate",["tinymce.core.dom.NodeType","tinymce.core.util.Arr","tinymce.core.caret.CaretContainer"],function(a,b,c){function d(a){return!p(a)&&(l(a)?!m(a.parentNode):n(a)||k(a)||o(a)||j(a))}function e(a,b){for(a=a.parentNode;a&&a!=b;a=a.parentNode){if(j(a))return!1;if(i(a))return!0}return!0}function f(a){return!!j(a)&&b.reduce(a.getElementsByTagName("*"),function(a,b){return a||i(b)},!1)!==!0}function g(a){return n(a)||f(a)}function h(a,b){return d(a)&&e(a,b)}var i=a.isContentEditableTrue,j=a.isContentEditableFalse,k=a.isBr,l=a.isText,m=a.matchNodeNames("script style textarea"),n=a.matchNodeNames("img input textarea hr iframe video audio object"),o=a.matchNodeNames("table"),p=c.isCaretContainer;return{isCaretCandidate:d,isInEditable:e,isAtomic:g,isEditableCaretCandidate:h}}),g("tinymce.core.geom.ClientRect",[],function(){function a(a){return a?{left:k(a.left),top:k(a.top),bottom:k(a.bottom),right:k(a.right),width:k(a.width),height:k(a.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}}function b(b,c){return b=a(b),c?b.right=b.left:(b.left=b.left+b.width,b.right=b.left),b.width=0,b}function c(a,b){return a.left===b.left&&a.top===b.top&&a.bottom===b.bottom&&a.right===b.right}function d(a,b,c){return a>=0&&a<=Math.min(b.height,c.height)/2}function e(a,b){return a.bottom-a.height/2<b.top||!(a.top>b.bottom)&&d(b.top-a.bottom,a,b)}function f(a,b){return a.top>b.bottom||!(a.bottom<b.top)&&d(b.bottom-a.top,a,b)}function g(a,b){return a.left<b.left}function h(a,b){return a.right>b.right}function i(a,b){return e(a,b)?-1:f(a,b)?1:g(a,b)?-1:h(a,b)?1:0}function j(a,b,c){return b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom}var k=Math.round;return{clone:a,collapse:b,isEqual:c,isAbove:e,isBelow:f,isLeft:g,isRight:h,compare:i,containsXY:j}}),g("tinymce.core.text.ExtendingChar",[],function(){function a(a){return"string"==typeof a&&a.charCodeAt(0)>=768&&b.test(a)}var b=new RegExp("[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]");return{isExtendingChar:a}}),g("tinymce.core.caret.CaretPosition",["tinymce.core.util.Fun","tinymce.core.dom.NodeType","tinymce.core.dom.DOMUtils","tinymce.core.dom.RangeUtils","tinymce.core.caret.CaretCandidate","tinymce.core.geom.ClientRect","tinymce.core.text.ExtendingChar"],function(a,b,c,d,e,f,g){function h(a){return"createRange"in a?a.createRange():c.DOM.createRng()}function i(a){return a&&/[\r\n\t ]/.test(a)}function j(a){var b,c=a.startContainer,d=a.startOffset;return!!(i(a.toString())&&r(c.parentNode)&&(b=c.data,i(b[d-1])||i(b[d+1])))}function k(a){function b(a){var b,c=a.ownerDocument,d=h(c),e=c.createTextNode("\xa0"),g=a.parentNode;return g.insertBefore(e,a),d.setStart(e,0),d.setEnd(e,1),b=f.clone(d.getBoundingClientRect()),g.removeChild(e),b}function c(a){var c,d;return d=a.getClientRects(),c=d.length>0?f.clone(d[0]):f.clone(a.getBoundingClientRect()),t(a)&&0===c.left?b(a):c}function d(a,b){return a=f.collapse(a,b),a.width=1,a.right=a.left+1,a}function e(a){0!==a.height&&(n.length>0&&f.isEqual(a,n[n.length-1])||n.push(a))}function i(a,b){var f=h(a.ownerDocument);if(b<a.data.length){if(g.isExtendingChar(a.data[b]))return n;if(g.isExtendingChar(a.data[b-1])&&(f.setStart(a,b),f.setEnd(a,b+1),!j(f)))return e(d(c(f),!1)),n}b>0&&(f.setStart(a,b-1),f.setEnd(a,b),j(f)||e(d(c(f),!1))),b<a.data.length&&(f.setStart(a,b),f.setEnd(a,b+1),j(f)||e(d(c(f),!0)))}var k,l,n=[];if(s(a.container()))return i(a.container(),a.offset()),n;if(m(a.container()))if(a.isAtEnd())l=v(a.container(),a.offset()),s(l)&&i(l,l.data.length),q(l)&&!t(l)&&e(d(c(l),!1));else{if(l=v(a.container(),a.offset()),s(l)&&i(l,0),q(l)&&a.isAtEnd())return e(d(c(l),!1)),n;k=v(a.container(),a.offset()-1),q(k)&&!t(k)&&(o(k)||o(l)||!q(l))&&e(d(c(k),!1)),q(l)&&e(d(c(l),!0))}return n}function l(b,c,d){function e(){return s(b)?0===c:0===c}function f(){return s(b)?c>=b.data.length:c>=b.childNodes.length}function g(){var a;return a=h(b.ownerDocument),a.setStart(b,c),a.setEnd(b,c),a}function i(){return d||(d=k(new l(b,c))),d}function j(){return i().length>0}function m(a){return a&&b===a.container()&&c===a.offset()}function n(a){return v(b,a?c-1:c)}return{container:a.constant(b),offset:a.constant(c),toRange:g,getClientRects:i,isVisible:j,isAtStart:e,isAtEnd:f,isEqual:m,getNode:n}}var m=b.isElement,n=e.isCaretCandidate,o=b.matchStyleValues("display","block table"),p=b.matchStyleValues("float","left right"),q=a.and(m,n,a.negate(p)),r=a.negate(b.matchStyleValues("white-space","pre pre-line pre-wrap")),s=b.isText,t=b.isBr,u=c.nodeIndex,v=d.getNode;return l.fromRangeStart=function(a){return new l(a.startContainer,a.startOffset)},l.fromRangeEnd=function(a){return new l(a.endContainer,a.endOffset)},l.after=function(a){return new l(a.parentNode,u(a)+1)},l.before=function(a){return new l(a.parentNode,u(a))},l.isAtStart=function(a){return!!a&&a.isAtStart()},l.isAtEnd=function(a){return!!a&&a.isAtEnd()},l.isTextPosition=function(a){return!!a&&b.isText(a.container())},l}),g("tinymce.core.caret.CaretBookmark",["tinymce.core.dom.NodeType","tinymce.core.dom.DOMUtils","tinymce.core.util.Fun","tinymce.core.util.Arr","tinymce.core.caret.CaretPosition"],function(a,b,c,d,e){function f(a){var b=a.parentNode;return r(b)?f(b):b}function g(a){return a?d.reduce(a.childNodes,function(a,b){return r(b)&&"BR"!=b.nodeName?a=a.concat(g(b)):a.push(b),a},[]):[]}function h(a,b){for(;(a=a.previousSibling)&&q(a);)b+=a.data.length;return b}function i(a){return function(b){return a===b}}function j(b){var c,e,h;return c=g(f(b)),e=d.findIndex(c,i(b),b),c=c.slice(0,e+1),h=d.reduce(c,function(a,b,d){return q(b)&&q(c[d-1])&&a++,a},0),c=d.filter(c,a.matchNodeNames(b.nodeName)),e=d.findIndex(c,i(b),b),e-h}function k(a){var b;return b=q(a)?"text()":a.nodeName.toLowerCase(),b+"["+j(a)+"]"}function l(a,b,c){var d=[];for(b=b.parentNode;b!=a&&(!c||!c(b));b=b.parentNode)d.push(b);return d}function m(b,e){var f,g,i,j,m,n=[];return f=e.container(),g=e.offset(),q(f)?i=h(f,g):(j=f.childNodes,g>=j.length?(i="after",g=j.length-1):i="before",f=j[g]),n.push(k(f)),m=l(b,f),m=d.filter(m,c.negate(a.isBogus)),n=n.concat(d.map(m,function(a){return k(a)})),n.reverse().join("/")+","+i}function n(b,c,e){var f=g(b);return f=d.filter(f,function(a,b){return!q(a)||!q(f[b-1])}),f=d.filter(f,a.matchNodeNames(c)),f[e]}function o(a,b){for(var c,d=a,f=0;q(d);){if(c=d.data.length,b>=f&&b<=f+c){a=d,b-=f;break}if(!q(d.nextSibling)){a=d,b=c;break}f+=c,d=d.nextSibling}return b>a.data.length&&(b=a.data.length),new e(a,b)}function p(a,b){var c,f,g;return b?(c=b.split(","),b=c[0].split("/"),g=c.length>1?c[1]:"before",f=d.reduce(b,function(a,b){return(b=/([\w\-\(\)]+)\[([0-9]+)\]/.exec(b))?("text()"===b[1]&&(b[1]="#text"),n(a,b[1],parseInt(b[2],10))):null},a),f?q(f)?o(f,parseInt(g,10)):(g="after"===g?s(f)+1:s(f),new e(f.parentNode,g)):null):null}var q=a.isText,r=a.isBogus,s=b.nodeIndex;return{create:m,resolve:p}}),g("tinymce.core.dom.BookmarkManager",["tinymce.core.caret.CaretBookmark","tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretPosition","tinymce.core.dom.NodeType","tinymce.core.dom.RangeUtils","tinymce.core.Env","tinymce.core.text.Zwsp","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h){function i(g){var i=g.dom;this.getBookmark=function(f,m){function n(a,b){var c=0;return h.each(i.select(a),function(a){if("all"!==a.getAttribute("data-mce-bogus"))return a!=b&&void c++}),c}function o(a){function b(b){var c,d,e,f=b?"start":"end";c=a[f+"Container"],d=a[f+"Offset"],1==c.nodeType&&"TR"==c.nodeName&&(e=c.childNodes,c=e[Math.min(b?d:d-1,e.length-1)],c&&(d=b?0:c.childNodes.length,a["set"+(b?"Start":"End")](c,d)))}return b(!0),b(),a}function p(a){function b(a,b){var d,e=a[b?"startContainer":"endContainer"],f=a[b?"startOffset":"endOffset"],g=[],h=0;for(3===e.nodeType?g.push(m?k(e,f):f):(d=e.childNodes,f>=d.length&&d.length&&(h=1,f=Math.max(0,d.length-1)),g.push(i.nodeIndex(d[f],m)+h));e&&e!=c;e=e.parentNode)g.push(i.nodeIndex(e,m));return g}var c=i.getRoot(),d={};return d.start=b(a,!0),g.isCollapsed()||(d.end=b(a)),d}function q(a){function c(a,c){var f;if(d.isElement(a)&&(a=e.getNode(a,c),j(a)))return a;if(b.isCaretContainer(a)){if(d.isText(a)&&b.isCaretContainerBlock(a)&&(a=a.parentNode),f=a.previousSibling,j(f))return f;if(f=a.nextSibling,j(f))return f}}return c(a.startContainer,a.startOffset)||c(a.endContainer,a.endOffset)}var r,s,t,u,v,w,x,y="";if(2==f)return w=g.getNode(),v=w?w.nodeName:null,r=g.getRng(),j(w)||"IMG"==v?{name:v,index:n(v,w)}:g.tridentSel?g.tridentSel.getBookmark(f):(w=q(r),w?(v=w.tagName,{name:v,index:n(v,w)}):p(r));if(3==f)return r=g.getRng(),{start:a.create(i.getRoot(),c.fromRangeStart(r)),end:a.create(i.getRoot(),c.fromRangeEnd(r))};if(f)return{rng:g.getRng()};if(r=g.getRng(),t=i.uniqueId(),u=g.isCollapsed(),x="overflow:hidden;line-height:0px",r.duplicate||r.item){if(r.item)return w=r.item(0),v=w.nodeName,{name:v,index:n(v,w)};s=r.duplicate();try{r.collapse(),r.pasteHTML('<span data-mce-type="bookmark" id="'+t+'_start" style="'+x+'">'+y+"</span>"),u||(s.collapse(!1),r.moveToElementText(s.parentElement()),0===r.compareEndPoints("StartToEnd",s)&&s.move("character",-1),s.pasteHTML('<span data-mce-type="bookmark" id="'+t+'_end" style="'+x+'">'+y+"</span>"))}catch(z){return null}}else{if(w=g.getNode(),v=w.nodeName,"IMG"==v)return{name:v,index:n(v,w)};if(s=o(r.cloneRange()),!u){s.collapse(!1);var A=i.create("span",{"data-mce-type":"bookmark",id:t+"_end",style:x},y);s.insertNode(A),l(A.nextSibling)}r=o(r),r.collapse(!0);var B=i.create("span",{"data-mce-type":"bookmark",id:t+"_start",style:x},y);r.insertNode(B),l(B.previousSibling)}return g.moveToBookmark({id:t,keep:1}),{id:t}},this.moveToBookmark=function(b){function c(a){var c,d,e,f,g=b[a?"start":"end"];if(g){for(e=g[0],d=l,c=g.length-1;c>=1;c--){if(f=d.childNodes,g[c]>f.length-1)return;d=f[g[c]]}3===d.nodeType&&(e=Math.min(g[0],d.nodeValue.length)),1===d.nodeType&&(e=Math.min(g[0],d.childNodes.length)),a?k.setStart(d,e):k.setEnd(d,e)}return!0}function d(a){var c,d,e,g,j=i.get(b.id+"_"+a),k=b.keep;if(j&&(c=j.parentNode,"start"==a?(k?(c=j.firstChild,d=1):d=i.nodeIndex(j),m=n=c,o=p=d):(k?(c=j.firstChild,d=1):d=i.nodeIndex(j),n=c,p=d),!k)){for(g=j.previousSibling,e=j.nextSibling,h.each(h.grep(j.childNodes),function(a){3==a.nodeType&&(a.nodeValue=a.nodeValue.replace(/\uFEFF/g,""))});j=i.get(b.id+"_"+a);)i.remove(j,1);g&&e&&g.nodeType==e.nodeType&&3==g.nodeType&&!f.opera&&(d=g.nodeValue.length,g.appendData(e.nodeValue),i.remove(e),"start"==a?(m=n=g,o=p=d):(n=g,p=d))}}function e(a){return!i.isBlock(a)||a.innerHTML||f.ie||(a.innerHTML='<br data-mce-bogus="1" />'),a}function j(){var c,d;return c=i.createRng(),d=a.resolve(i.getRoot(),b.start),c.setStart(d.container(),d.offset()),d=a.resolve(i.getRoot(),b.end),c.setEnd(d.container(),d.offset()),c}var k,l,m,n,o,p;if(b)if(h.isArray(b.start)){if(k=i.createRng(),l=i.getRoot(),g.tridentSel)return g.tridentSel.moveToBookmark(b);c(!0)&&c()&&g.setRng(k)}else"string"==typeof b.start?g.setRng(j(b)):b.id?(d("start"),d("end"),m&&(k=i.createRng(),k.setStart(e(m),o),k.setEnd(e(n),p),g.setRng(k))):b.name?g.select(i.select(b.name)[b.index]):b.rng&&g.setRng(b.rng)}}var j=d.isContentEditableFalse,k=function(a,b){var c,d;for(d=g.trim(a.data.slice(0,b)).length,c=a.previousSibling;c&&3===c.nodeType;c=c.previousSibling)d+=g.trim(c.data).length;return d},l=function(a){d.isText(a)&&0===a.data.length&&a.parentNode.removeChild(a)};return i.isBookmarkNode=function(a){return a&&"SPAN"===a.tagName&&"bookmark"===a.getAttribute("data-mce-type")},i}),g("tinymce.core.caret.CaretUtils",["tinymce.core.util.Fun","tinymce.core.dom.TreeWalker","tinymce.core.dom.NodeType","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretCandidate"],function(a,b,c,d,e,f){function g(a){return a>0}function h(a){return a<0}function i(a,b){for(var c;c=a(b);)if(!y(c))return c;return null}function j(a,c,d,e,f){var j=new b(a,e);if(h(c)){if((v(a)||y(a))&&(a=i(j.prev,!0),d(a)))return a;for(;a=i(j.prev,f);)if(d(a))return a}if(g(c)){if((v(a)||y(a))&&(a=i(j.next,!0),d(a)))return a;for(;a=i(j.next,f);)if(d(a))return a}return null}function k(a,b){for(a=a.parentNode;a&&a!=b;a=a.parentNode)if(u(a))return a;return b}function l(a,b){for(;a&&a!=b;){if(w(a))return a;a=a.parentNode}return null}function m(a,b,c){return l(a.container(),c)==l(b.container(),c)}function n(a,b,c){return k(a.container(),c)==k(b.container(),c)}function o(a,b){var c,d;return b?(c=b.container(),d=b.offset(),A(c)?c.childNodes[d+a]:null):null}function p(a,b){var c=b.ownerDocument.createRange();return a?(c.setStartBefore(b),c.setEndBefore(b)):(c.setStartAfter(b),c.setEndAfter(b)),c}function q(a,b,c){return l(b,a)==l(c,a)}function r(a,b,c){var d,e;for(e=a?"previousSibling":"nextSibling";c&&c!=b;){if(d=c[e],x(d)&&(d=d[e]),v(d)){if(q(b,d,c))return d;break}if(B(d))break;c=c.parentNode}return null}function s(a,b,d){var f,g,h,i,j=z(r,!0,b),k=z(r,!1,b);if(g=d.startContainer,h=d.startOffset,e.isCaretContainerBlock(g)){if(A(g)||(g=g.parentNode),i=g.getAttribute("data-mce-caret"),"before"==i&&(f=g.nextSibling,v(f)))return C(f);if("after"==i&&(f=g.previousSibling,v(f)))return D(f)}if(!d.collapsed)return d;if(c.isText(g)){if(x(g)){if(1===a){if(f=k(g))return C(f);if(f=j(g))return D(f)}if(a===-1){if(f=j(g))return D(f);if(f=k(g))return C(f)}return d}if(e.endsWithCaretContainer(g)&&h>=g.data.length-1)return 1===a&&(f=k(g))?C(f):d;if(e.startsWithCaretContainer(g)&&h<=1)return a===-1&&(f=j(g))?D(f):d;if(h===g.data.length)return f=k(g),f?C(f):d;if(0===h)return f=j(g),f?D(f):d}return d}function t(a,b){return v(o(a,b))}var u=c.isContentEditableTrue,v=c.isContentEditableFalse,w=c.matchStyleValues("display","block table table-cell table-caption list-item"),x=e.isCaretContainer,y=e.isCaretContainerBlock,z=a.curry,A=c.isElement,B=f.isCaretCandidate,C=z(p,!0),D=z(p,!1);return{isForwards:g,isBackwards:h,findNode:j,getEditingHost:k,getParentBlock:l,isInSameBlock:m,isInSameEditingHost:n,isBeforeContentEditableFalse:z(t,0),isAfterContentEditableFalse:z(t,-1),normalizeRange:s}}),g("tinymce.core.caret.CaretWalker",["tinymce.core.dom.NodeType","tinymce.core.caret.CaretCandidate","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils","tinymce.core.util.Arr","tinymce.core.util.Fun"],function(a,b,c,d,e,f){function g(a,b){for(var c=[];a&&a!=b;)c.push(a),a=a.parentNode;return c}function h(a,b){return a.hasChildNodes()&&b<a.childNodes.length?a.childNodes[b]:null}function i(a,b){if(p(a)){if(r(b.previousSibling)&&!m(b.previousSibling))return c.before(b);if(m(b))return c(b,0)}if(q(a)){if(r(b.nextSibling)&&!m(b.nextSibling))return c.after(b);if(m(b))return c(b,b.data.length)}return q(a)?o(b)?c.before(b):c.after(b):c.before(b)}function j(b,e){var f;return!!a.isBr(b)&&(f=k(1,c.after(b),e),!!f&&!d.isInSameBlock(c.before(b),c.before(f),e))}function k(a,b,u){var v,w,x,y,z,A,B;if(!n(u)||!b)return null;if(b.isEqual(c.after(u))&&u.lastChild){if(B=c.after(u.lastChild),q(a)&&r(u.lastChild)&&n(u.lastChild))return o(u.lastChild)?c.before(u.lastChild):B}else B=b;if(v=B.container(),w=B.offset(),m(v)){if(q(a)&&w>0)return c(v,--w);if(p(a)&&w<v.length)return c(v,++w);x=v}else{if(q(a)&&w>0&&(y=h(v,w-1),r(y)))return!s(y)&&(z=d.findNode(y,a,t,y))?m(z)?c(z,z.data.length):c.after(z):m(y)?c(y,y.data.length):c.before(y);if(p(a)&&w<v.childNodes.length&&(y=h(v,w),r(y)))return j(y,u)?k(a,c.after(y),u):!s(y)&&(z=d.findNode(y,a,t,y))?m(z)?c(z,0):c.before(z):m(y)?c(y,0):c.after(y);x=B.getNode()}return(p(a)&&B.isAtEnd()||q(a)&&B.isAtStart())&&(x=d.findNode(x,a,f.constant(!0),u,!0),t(x))?i(a,x):(y=d.findNode(x,a,t,u),A=e.last(e.filter(g(v,u),l)),!A||y&&A.contains(y)?y?i(a,y):null:B=p(a)?c.after(A):c.before(A))}var l=a.isContentEditableFalse,m=a.isText,n=a.isElement,o=a.isBr,p=d.isForwards,q=d.isBackwards,r=b.isCaretCandidate,s=b.isAtomic,t=b.isEditableCaretCandidate;return function(a){return{next:function(b){return k(1,b,a)},prev:function(b){return k(-1,b,a)}}}}),g("tinymce.core.caret.CaretFinder",["ephox.katamari.api.Fun","ephox.katamari.api.Option","tinymce.core.caret.CaretCandidate","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils","tinymce.core.caret.CaretWalker","tinymce.core.dom.NodeType"],function(a,b,c,d,e,f,g){var h=function(a,b,c){var e=a?d.before(c):d.after(c);return o(a,b,e)},i=function(a){return g.isBr(a)?d.before(a):d.after(a)},j=function(a){return d.isTextPosition(a)?0===a.offset():c.isCaretCandidate(a.getNode())},k=function(a){return d.isTextPosition(a)?a.offset()===a.container().data.length:c.isCaretCandidate(a.getNode(!0))},l=function(a,b){return!d.isTextPosition(a)&&!d.isTextPosition(b)&&a.getNode()===b.getNode(!0)},m=function(a){return!d.isTextPosition(a)&&g.isBr(a.getNode())},n=function(a,b,c){return a?!l(b,c)&&!m(b)&&k(b)&&j(c):!l(c,b)&&j(b)&&k(c)},o=function(a,c,d){var e=new f(c);return b.from(a?e.next(d):e.prev(d))},p=function(a,c,d){return o(a,c,d).bind(function(f){return e.isInSameBlock(d,f,c)&&n(a,d,f)?o(a,c,f):b.some(f)})},q=function(a,e){var f=a?e.firstChild:e.lastChild;return g.isText(f)?b.some(new d(f,a?0:f.data.length)):f?c.isCaretCandidate(f)?b.some(a?d.before(f):i(f)):h(a,e,f):b.none()};return{fromPosition:o,nextPosition:a.curry(o,!0),prevPosition:a.curry(o,!1),navigate:p,positionIn:q,firstPositionIn:a.curry(q,!0),lastPositionIn:a.curry(q,!1)}}),g("tinymce.core.dom.RangeNormalizer",["tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils"],function(a,b,c){var d=function(a,b,c,d){var e=document.createRange();return e.setStart(a,b),e.setEnd(c,d),e},e=function(e){var f=b.fromRangeStart(e),g=b.fromRangeEnd(e),h=e.commonAncestorContainer;return a.fromPosition(!1,h,g).map(function(a){return!c.isInSameBlock(f,g,h)&&c.isInSameBlock(f,a,h)?d(f.container(),f.offset(),a.container(),a.offset()):e}).getOr(e)},f=function(a){return a.collapsed?a:e(a)},g=function(a){return f(a)};return{normalize:g}}),g("global!console",[],function(){return"undefined"==typeof console&&(console={log:function(){}}),console}),h("global!document",document),g("ephox.sugar.api.node.Element",["ephox.katamari.api.Fun","global!Error","global!console","global!document"],function(a,b,c,d){var e=function(a,b){var e=b||d,f=e.createElement("div");if(f.innerHTML=a,!f.hasChildNodes()||f.childNodes.length>1)throw c.error("HTML does not have a single root node",a),"HTML must have a single root node";return h(f.childNodes[0])},f=function(a,b){var c=b||d,e=c.createElement(a);return h(e)},g=function(a,b){var c=b||d,e=c.createTextNode(a);return h(e)},h=function(c){if(null===c||void 0===c)throw new b("Node cannot be null or undefined");return{dom:a.constant(c)}};return{fromHtml:e,fromTag:f,fromText:g,fromDom:h}}),g("ephox.katamari.api.Type",["global!Array","global!String"],function(a,b){var c=function(c){if(null===c)return"null";var d=typeof c;return"object"===d&&a.prototype.isPrototypeOf(c)?"array":"object"===d&&b.prototype.isPrototypeOf(c)?"string":d},d=function(a){return function(b){return c(b)===a}};return{isString:d("string"),isObject:d("object"),isArray:d("array"),isNull:d("null"),isBoolean:d("boolean"),isUndefined:d("undefined"),isFunction:d("function"),isNumber:d("number")}}),g("ephox.katamari.data.Immutable",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","global!Array","global!Error"],function(a,b,c,d){return function(){var e=arguments;return function(){for(var f=new c(arguments.length),g=0;g<f.length;g++)f[g]=arguments[g];if(e.length!==f.length)throw new d('Wrong number of arguments to struct. Expected "['+e.length+']", got '+f.length+" arguments");var h={};return a.each(e,function(a,c){h[a]=b.constant(f[c])}),h}}}),g("ephox.katamari.api.Obj",["ephox.katamari.api.Option","global!Object"],function(a,b){var c=function(){var a=b.keys,c=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b};return void 0===a?c:a}(),d=function(a,b){for(var d=c(a),e=0,f=d.length;e<f;e++){var g=d[e],h=a[g];b(h,g,a)}},e=function(a,b){return f(a,function(a,c,d){return{k:c,v:b(a,c,d)}})},f=function(a,b){var c={};return d(a,function(d,e){var f=b(d,e,a);c[f.k]=f.v}),c},g=function(a,b){var c={},e={};return d(a,function(a,d){var f=b(a,d)?c:e;f[d]=a}),{t:c,f:e}},h=function(a,b){var c=[];return d(a,function(a,d){c.push(b(a,d))}),c},i=function(b,d){for(var e=c(b),f=0,g=e.length;f<g;f++){var h=e[f],i=b[h];if(d(i,h,b))return a.some(i)}return a.none()},j=function(a){return h(a,function(a){return a})},k=function(a){return j(a).length};return{bifilter:g,each:d,map:e,mapToArray:h,tupleMap:f,find:i,keys:c,values:j,size:k}}),g("ephox.katamari.util.BagUtils",["ephox.katamari.api.Arr","ephox.katamari.api.Type","global!Error"],function(a,b,c){var d=function(a){return a.slice(0).sort()},e=function(a,b){throw new c("All required keys ("+d(a).join(", ")+") were not specified. Specified keys were: "+d(b).join(", ")+".")},f=function(a){throw new c("Unsupported keys for object: "+d(a).join(", "))},g=function(d,e){if(!b.isArray(e))throw new c("The "+d+" fields must be an array. Was: "+e+".");a.each(e,function(a){if(!b.isString(a))throw new c("The value "+a+" in the "+d+" fields was not a string.")})},h=function(a,b){throw new c("All values need to be of type: "+b+". Keys ("+d(a).join(", ")+") were not.")},i=function(b){var e=d(b),f=a.find(e,function(a,b){return b<e.length-1&&a===e[b+1]});f.each(function(a){throw new c("The field: "+a+" occurs more than once in the combined fields: ["+e.join(", ")+"].")})};return{sort:d,reqMessage:e,unsuppMessage:f,validateStrArr:g,invalidTypeMessage:h,checkDupes:i}}),g("ephox.katamari.data.MixedBag",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Obj","ephox.katamari.api.Option","ephox.katamari.util.BagUtils","global!Error","global!Object"],function(a,b,c,d,e,f,g){return function(h,i){var j=h.concat(i);if(0===j.length)throw new f("You must specify at least one required or optional field.");return e.validateStrArr("required",h),e.validateStrArr("optional",i),e.checkDupes(j),function(f){var k=c.keys(f),l=a.forall(h,function(b){return a.contains(k,b)});l||e.reqMessage(h,k);var m=a.filter(k,function(b){return!a.contains(j,b)});m.length>0&&e.unsuppMessage(m);var n={};return a.each(h,function(a){n[a]=b.constant(f[a])}),a.each(i,function(a){n[a]=b.constant(g.prototype.hasOwnProperty.call(f,a)?d.some(f[a]):d.none())}),n}}}),g("ephox.katamari.api.Struct",["ephox.katamari.data.Immutable","ephox.katamari.data.MixedBag"],function(a,b){return{immutable:a,immutableBag:b}}),g("ephox.sugar.alien.Recurse",[],function(){var a=function(a,b){var c=[],d=function(a){return c.push(a),b(a)},e=b(a);do e=e.bind(d);while(e.isSome());return c};return{toArray:a}}),g("ephox.katamari.api.Global",[],function(){return"undefined"!=typeof window?window:Function("return this;")()}),g("ephox.katamari.api.Resolve",["ephox.katamari.api.Global"],function(a){var b=function(b,c){for(var d=void 0!==c?c:a,e=0;e<b.length&&void 0!==d&&null!==d;++e)d=d[b[e]];return d},c=function(a,c){var d=a.split(".");return b(d,c)},d=function(a,b){return void 0!==a[b]&&null!==a[b]||(a[b]={}),a[b]},e=function(b,c){for(var e=void 0!==c?c:a,f=0;f<b.length;++f)e=d(e,b[f]);return e},f=function(a,b){var c=a.split(".");return e(c,b)};return{path:b,resolve:c,forge:e,namespace:f}}),g("ephox.sand.util.Global",["ephox.katamari.api.Resolve"],function(a){var b=function(b,c){return a.resolve(b,c)},c=function(a,c){var d=b(a,c);if(void 0===d)throw a+" not available on this browser";return d};return{getOrDie:c}}),g("ephox.sand.api.Node",["ephox.sand.util.Global"],function(a){var b=function(){var b=a.getOrDie("Node");return b},c=function(a,b,c){return 0!==(a.compareDocumentPosition(b)&c)},d=function(a,d){return c(a,d,b().DOCUMENT_POSITION_PRECEDING)},e=function(a,d){return c(a,d,b().DOCUMENT_POSITION_CONTAINED_BY)};return{documentPositionPreceding:d,documentPositionContainedBy:e}}),g("ephox.katamari.api.Thunk",[],function(){var a=function(a){var b,c=!1;return function(){return c||(c=!0,b=a.apply(null,arguments)),b}};return{cached:a}}),h("global!Number",Number),g("ephox.sand.detect.Version",["ephox.katamari.api.Arr","global!Number","global!String"],function(a,b,c){var d=function(a,b){for(var c=0;c<a.length;c++){var d=a[c];if(d.test(b))return d}},e=function(a,c){var e=d(a,c);if(!e)return{major:0,minor:0};var f=function(a){return b(c.replace(e,"$"+a))};return h(f(1),f(2))},f=function(a,b){var d=c(b).toLowerCase();return 0===a.length?g():e(a,d)},g=function(){return h(0,0)},h=function(a,b){return{major:a,minor:b}};return{nu:h,detect:f,unknown:g}}),g("ephox.sand.core.Browser",["ephox.katamari.api.Fun","ephox.sand.detect.Version"],function(a,b){var c="Edge",d="Chrome",e="IE",f="Opera",g="Firefox",h="Safari",i=function(a,b){return function(){return b===a}},j=function(){return k({current:void 0,version:b.unknown()})},k=function(a){var b=a.current,j=a.version;return{current:b,version:j,isEdge:i(c,b),isChrome:i(d,b),isIE:i(e,b),isOpera:i(f,b),isFirefox:i(g,b),
-isSafari:i(h,b)}};return{unknown:j,nu:k,edge:a.constant(c),chrome:a.constant(d),ie:a.constant(e),opera:a.constant(f),firefox:a.constant(g),safari:a.constant(h)}}),g("ephox.sand.core.OperatingSystem",["ephox.katamari.api.Fun","ephox.sand.detect.Version"],function(a,b){var c="Windows",d="iOS",e="Android",f="Linux",g="OSX",h="Solaris",i="FreeBSD",j=function(a,b){return function(){return b===a}},k=function(){return l({current:void 0,version:b.unknown()})},l=function(a){var b=a.current,k=a.version;return{current:b,version:k,isWindows:j(c,b),isiOS:j(d,b),isAndroid:j(e,b),isOSX:j(g,b),isLinux:j(f,b),isSolaris:j(h,b),isFreeBSD:j(i,b)}};return{unknown:k,nu:l,windows:a.constant(c),ios:a.constant(d),android:a.constant(e),linux:a.constant(f),osx:a.constant(g),solaris:a.constant(h),freebsd:a.constant(i)}}),g("ephox.sand.detect.DeviceType",["ephox.katamari.api.Fun"],function(a){return function(b,c,d){var e=b.isiOS()&&/ipad/i.test(d)===!0,f=b.isiOS()&&!e,g=b.isAndroid()&&3===b.version.major,h=b.isAndroid()&&4===b.version.major,i=e||g||h&&/mobile/i.test(d)===!0,j=b.isiOS()||b.isAndroid(),k=j&&!i,l=c.isSafari()&&b.isiOS()&&/safari/i.test(d)===!1;return{isiPad:a.constant(e),isiPhone:a.constant(f),isTablet:a.constant(i),isPhone:a.constant(k),isTouch:a.constant(j),isAndroid:b.isAndroid,isiOS:b.isiOS,isWebView:a.constant(l)}}}),g("ephox.sand.detect.UaString",["ephox.katamari.api.Arr","ephox.sand.detect.Version","global!String"],function(a,b,c){var d=function(b,d){var e=c(d).toLowerCase();return a.find(b,function(a){return a.search(e)})},e=function(a,c){return d(a,c).map(function(a){var d=b.detect(a.versionRegexes,c);return{current:a.name,version:d}})},f=function(a,c){return d(a,c).map(function(a){var d=b.detect(a.versionRegexes,c);return{current:a.name,version:d}})};return{detectBrowser:e,detectOs:f}}),g("ephox.katamari.str.StrAppend",[],function(){var a=function(a,b){return b+a},b=function(a,b){return a+b},c=function(a,b){return a.substring(b)},d=function(a,b){return a.substring(0,a.length-b)};return{addToStart:a,addToEnd:b,removeFromStart:c,removeFromEnd:d}}),g("ephox.katamari.str.StringParts",["ephox.katamari.api.Option","global!Error"],function(a,b){var c=function(a,b){return a.substr(0,b)},d=function(a,b){return a.substr(a.length-b,a.length)},e=function(b){return""===b?a.none():a.some(b.substr(0,1))},f=function(b){return""===b?a.none():a.some(b.substring(1))};return{first:c,last:d,head:e,tail:f}}),g("ephox.katamari.api.Strings",["ephox.katamari.str.StrAppend","ephox.katamari.str.StringParts","global!Error"],function(a,b,c){var d=function(a,b,c){if(""===b)return!0;if(a.length<b.length)return!1;var d=a.substr(c,c+b.length);return d===b},e=function(a,b){var c=function(a){var b=typeof a;return"string"===b||"number"===b};return a.replace(/\${([^{}]*)}/g,function(a,d){var e=b[d];return c(e)?e:a})},f=function(b,c){return l(b,c)?a.removeFromStart(b,c.length):b},g=function(b,c){return m(b,c)?a.removeFromEnd(b,c.length):b},h=function(b,c){return l(b,c)?b:a.addToStart(b,c)},i=function(b,c){return m(b,c)?b:a.addToEnd(b,c)},j=function(a,b){return a.indexOf(b)!==-1},k=function(a){return b.head(a).bind(function(c){return b.tail(a).map(function(a){return c.toUpperCase()+a})}).getOr(a)},l=function(a,b){return d(a,b,0)},m=function(a,b){return d(a,b,a.length-b.length)},n=function(a){return a.replace(/^\s+|\s+$/g,"")},o=function(a){return a.replace(/^\s+/g,"")},p=function(a){return a.replace(/\s+$/g,"")};return{supplant:e,startsWith:l,removeLeading:f,removeTrailing:g,ensureLeading:h,ensureTrailing:i,endsWith:m,contains:j,trim:n,lTrim:o,rTrim:p,capitalize:k}}),g("ephox.sand.info.PlatformInfo",["ephox.katamari.api.Fun","ephox.katamari.api.Strings"],function(a,b){var c=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,d=function(a){return function(c){return b.contains(c,a)}},e=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(a){var c=b.contains(a,"edge/")&&b.contains(a,"chrome")&&b.contains(a,"safari")&&b.contains(a,"applewebkit");return c}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,c],search:function(a){return b.contains(a,"chrome")&&!b.contains(a,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(a){return b.contains(a,"msie")||b.contains(a,"trident")}},{name:"Opera",versionRegexes:[c,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:d("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:d("firefox")},{name:"Safari",versionRegexes:[c,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(a){return(b.contains(a,"safari")||b.contains(a,"mobile/"))&&b.contains(a,"applewebkit")}}],f=[{name:"Windows",search:d("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(a){return b.contains(a,"iphone")||b.contains(a,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:d("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:d("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:d("linux"),versionRegexes:[]},{name:"Solaris",search:d("sunos"),versionRegexes:[]},{name:"FreeBSD",search:d("freebsd"),versionRegexes:[]}];return{browsers:a.constant(e),oses:a.constant(f)}}),g("ephox.sand.core.PlatformDetection",["ephox.sand.core.Browser","ephox.sand.core.OperatingSystem","ephox.sand.detect.DeviceType","ephox.sand.detect.UaString","ephox.sand.info.PlatformInfo"],function(a,b,c,d,e){var f=function(f){var g=e.browsers(),h=e.oses(),i=d.detectBrowser(g,f).fold(a.unknown,a.nu),j=d.detectOs(h,f).fold(b.unknown,b.nu),k=c(j,i,f);return{browser:i,os:j,deviceType:k}};return{detect:f}}),h("global!navigator",navigator),g("ephox.sand.api.PlatformDetection",["ephox.katamari.api.Thunk","ephox.sand.core.PlatformDetection","global!navigator"],function(a,b,c){var d=a.cached(function(){var a=c.userAgent;return b.detect(a)});return{detect:d}}),g("ephox.sugar.api.node.NodeTypes",[],function(){return{ATTRIBUTE:2,CDATA_SECTION:4,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,ELEMENT:1,TEXT:3,PROCESSING_INSTRUCTION:7,ENTITY_REFERENCE:5,ENTITY:6,NOTATION:12}}),g("ephox.sugar.api.search.Selectors",["ephox.katamari.api.Arr","ephox.katamari.api.Option","ephox.sugar.api.node.Element","ephox.sugar.api.node.NodeTypes","global!Error","global!document"],function(a,b,c,d,e,f){var g=d.ELEMENT,h=d.DOCUMENT,i=function(a,b){var c=a.dom();if(c.nodeType!==g)return!1;if(void 0!==c.matches)return c.matches(b);if(void 0!==c.msMatchesSelector)return c.msMatchesSelector(b);if(void 0!==c.webkitMatchesSelector)return c.webkitMatchesSelector(b);if(void 0!==c.mozMatchesSelector)return c.mozMatchesSelector(b);throw new e("Browser lacks native selectors")},j=function(a){return a.nodeType!==g&&a.nodeType!==h||0===a.childElementCount},k=function(b,d){var e=void 0===d?f:d.dom();return j(e)?[]:a.map(e.querySelectorAll(b),c.fromDom)},l=function(a,d){var e=void 0===d?f:d.dom();return j(e)?b.none():b.from(e.querySelector(a)).map(c.fromDom)};return{all:k,is:i,one:l}}),g("ephox.sugar.api.dom.Compare",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.sand.api.Node","ephox.sand.api.PlatformDetection","ephox.sugar.api.search.Selectors"],function(a,b,c,d,e){var f=function(a,b){return a.dom()===b.dom()},g=function(a,b){return a.dom().isEqualNode(b.dom())},h=function(c,d){return a.exists(d,b.curry(f,c))},i=function(a,b){var c=a.dom(),d=b.dom();return c!==d&&c.contains(d)},j=function(a,b){return c.documentPositionContainedBy(a.dom(),b.dom())},k=d.detect().browser,l=k.isIE()?j:i;return{eq:f,isEqualNode:g,member:h,contains:l,is:e.is}}),g("ephox.sugar.api.search.Traverse",["ephox.katamari.api.Type","ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.katamari.api.Struct","ephox.sugar.alien.Recurse","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element"],function(a,b,c,d,e,f,g,h){var i=function(a){return h.fromDom(a.dom().ownerDocument)},j=function(a){var b=i(a);return h.fromDom(b.dom().documentElement)},k=function(a){var b=a.dom(),c=b.ownerDocument.defaultView;return h.fromDom(c)},l=function(a){var b=a.dom();return d.from(b.parentNode).map(h.fromDom)},m=function(a){return l(a).bind(function(c){var d=u(c);return b.findIndex(d,function(b){return g.eq(a,b)})})},n=function(b,d){for(var e=a.isFunction(d)?d:c.constant(!1),f=b.dom(),g=[];null!==f.parentNode&&void 0!==f.parentNode;){var i=f.parentNode,j=h.fromDom(i);if(g.push(j),e(j)===!0)break;f=i}return g},o=function(a){var c=function(c){return b.filter(c,function(b){return!g.eq(a,b)})};return l(a).map(u).map(c).getOr([])},p=function(a){var b=a.dom();return d.from(b.offsetParent).map(h.fromDom)},q=function(a){var b=a.dom();return d.from(b.previousSibling).map(h.fromDom)},r=function(a){var b=a.dom();return d.from(b.nextSibling).map(h.fromDom)},s=function(a){return b.reverse(f.toArray(a,q))},t=function(a){return f.toArray(a,r)},u=function(a){var c=a.dom();return b.map(c.childNodes,h.fromDom)},v=function(a,b){var c=a.dom().childNodes;return d.from(c[b]).map(h.fromDom)},w=function(a){return v(a,0)},x=function(a){return v(a,a.dom().childNodes.length-1)},y=e.immutable("element","offset"),z=function(a,b){var c=u(a);return c.length>0&&b<c.length?y(c[b],0):y(a,b)};return{owner:i,defaultView:k,documentElement:j,parent:l,findIndex:m,parents:n,siblings:o,prevSibling:q,offsetParent:p,prevSiblings:s,nextSibling:r,nextSiblings:t,children:u,child:v,firstChild:w,lastChild:x,leaf:z}}),g("ephox.sugar.api.dom.Insert",["ephox.sugar.api.search.Traverse"],function(a){var b=function(b,c){var d=a.parent(b);d.each(function(a){a.dom().insertBefore(c.dom(),b.dom())})},c=function(c,d){var f=a.nextSibling(c);f.fold(function(){var b=a.parent(c);b.each(function(a){e(a,d)})},function(a){b(a,d)})},d=function(b,c){var d=a.firstChild(b);d.fold(function(){e(b,c)},function(a){b.dom().insertBefore(c.dom(),a.dom())})},e=function(a,b){a.dom().appendChild(b.dom())},f=function(c,d,f){a.child(c,f).fold(function(){e(c,d)},function(a){b(a,d)})},g=function(a,c){b(a,c),e(c,a)};return{before:b,after:c,prepend:d,append:e,appendAt:f,wrap:g}}),g("ephox.sugar.api.dom.InsertAll",["ephox.katamari.api.Arr","ephox.sugar.api.dom.Insert"],function(a,b){var c=function(c,d){a.each(d,function(a){b.before(c,a)})},d=function(c,d){a.each(d,function(a,e){var f=0===e?c:d[e-1];b.after(f,a)})},e=function(c,d){a.each(d.slice().reverse(),function(a){b.prepend(c,a)})},f=function(c,d){a.each(d,function(a){b.append(c,a)})};return{before:c,after:d,prepend:e,append:f}}),g("ephox.sugar.api.dom.Remove",["ephox.katamari.api.Arr","ephox.sugar.api.dom.InsertAll","ephox.sugar.api.search.Traverse"],function(a,b,c){var d=function(b){b.dom().textContent="",a.each(c.children(b),function(a){e(a)})},e=function(a){var b=a.dom();null!==b.parentNode&&b.parentNode.removeChild(b)},f=function(a){var d=c.children(a);d.length>0&&b.before(a,d),e(a)};return{empty:d,remove:e,unwrap:f}}),g("ephox.sugar.api.node.Node",["ephox.sugar.api.node.NodeTypes"],function(a){var b=function(a){var b=a.dom().nodeName;return b.toLowerCase()},c=function(a){return a.dom().nodeType},d=function(a){return a.dom().nodeValue},e=function(a){return function(b){return c(b)===a}},f=function(d){return c(d)===a.COMMENT||"#comment"===b(d)},g=e(a.ELEMENT),h=e(a.TEXT),i=e(a.DOCUMENT);return{name:b,type:c,value:d,isElement:g,isText:h,isDocument:i,isComment:f}}),g("ephox.sugar.impl.NodeValue",["ephox.sand.api.PlatformDetection","ephox.katamari.api.Option","global!Error"],function(a,b,c){return function(d,e){var f=function(a){if(!d(a))throw new c("Can only get "+e+" value of a "+e+" node");return j(a).getOr("")},g=function(a){try{return h(a)}catch(c){return b.none()}},h=function(a){return d(a)?b.from(a.dom().nodeValue):b.none()},i=a.detect().browser,j=i.isIE()&&10===i.version.major?g:h,k=function(a,b){if(!d(a))throw new c("Can only set raw "+e+" value of a "+e+" node");a.dom().nodeValue=b};return{get:f,getOption:j,set:k}}}),g("ephox.sugar.api.node.Text",["ephox.sugar.api.node.Node","ephox.sugar.impl.NodeValue"],function(a,b){var c=b(a.isText,"text"),d=function(a){return c.get(a)},e=function(a){return c.getOption(a)},f=function(a,b){c.set(a,b)};return{get:d,getOption:e,set:f}}),g("ephox.sugar.api.node.Body",["ephox.katamari.api.Thunk","ephox.sugar.api.node.Element","ephox.sugar.api.node.Node","global!document"],function(a,b,c,d){var e=function(a){var b=c.isText(a)?a.dom().parentNode:a.dom();return void 0!==b&&null!==b&&b.ownerDocument.body.contains(b)},f=a.cached(function(){return g(b.fromDom(d))}),g=function(a){var c=a.dom().body;if(null===c||void 0===c)throw"Body is not available yet";return b.fromDom(c)};return{body:f,getBody:g,inBody:e}}),g("ephox.sugar.api.search.PredicateFilter",["ephox.katamari.api.Arr","ephox.sugar.api.node.Body","ephox.sugar.api.search.Traverse"],function(a,b,c){var d=function(a){return h(b.body(),a)},e=function(b,d,e){return a.filter(c.parents(b,e),d)},f=function(b,d){return a.filter(c.siblings(b),d)},g=function(b,d){return a.filter(c.children(b),d)},h=function(b,d){var e=[];return a.each(c.children(b),function(a){d(a)&&(e=e.concat([a])),e=e.concat(h(a,d))}),e};return{all:d,ancestors:e,siblings:f,children:g,descendants:h}}),g("ephox.sugar.api.search.SelectorFilter",["ephox.sugar.api.search.PredicateFilter","ephox.sugar.api.search.Selectors"],function(a,b){var c=function(a){return b.all(a)},d=function(c,d,e){return a.ancestors(c,function(a){return b.is(a,d)},e)},e=function(c,d){return a.siblings(c,function(a){return b.is(a,d)})},f=function(c,d){return a.children(c,function(a){return b.is(a,d)})},g=function(a,c){return b.all(c,a)};return{all:c,ancestors:d,siblings:e,children:f,descendants:g}}),g("tinymce.core.dom.ElementType",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.sugar.api.node.Node"],function(a,b,c){var d=["article","aside","details","div","dt","figcaption","footer","form","fieldset","header","hgroup","html","main","nav","section","summary","body","p","dl","multicol","dd","figure","address","center","blockquote","h1","h2","h3","h4","h5","h6","listing","xmp","pre","plaintext","menu","dir","ul","ol","li","hr","table","tbody","thead","tfoot","th","tr","td","caption"],e=["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param","embed","source","wbr","track"],f=["td","th"],g=["thead","tbody","tfoot"],h=["h1","h2","h3","h4","h5","h6","p","div","address","pre","form","blockquote","center","dir","fieldset","header","footer","article","section","hgroup","aside","nav","figure"],i=["h1","h2","h3","h4","h5","h6"],j=["li","dd","dt"],k=["ul","ol","dl"],l=function(d){var e;return function(f){return e=e?e:a.mapToObject(d,b.constant(!0)),e.hasOwnProperty(c.name(f))}},m=l(i),n=l(d),o=function(a){return c.isElement(a)&&!n(a)},p=function(a){return c.isElement(a)&&"br"===c.name(a)};return{isBlock:n,isInline:o,isHeading:m,isTextBlock:l(h),isList:l(k),isListItem:l(j),isVoid:l(e),isTableSection:l(g),isTableCell:l(f),isBr:p}}),g("tinymce.core.dom.PaddingBr",["ephox.katamari.api.Arr","ephox.sugar.api.dom.Insert","ephox.sugar.api.dom.Remove","ephox.sugar.api.node.Element","ephox.sugar.api.node.Node","ephox.sugar.api.node.Text","ephox.sugar.api.search.SelectorFilter","ephox.sugar.api.search.Traverse","tinymce.core.dom.ElementType"],function(a,b,c,d,e,f,g,h,i){var j=function(a){for(var b=[],c=a.dom();c;)b.push(d.fromDom(c)),c=c.lastChild;return b},k=function(b){var d=g.descendants(b,"br"),e=a.filter(j(b).slice(-1),i.isBr);d.length===e.length&&a.each(e,c.remove)},l=function(a){c.empty(a),b.append(a,d.fromHtml('<br data-mce-bogus="1">'))},m=function(a){return e.isText(a)?"\xa0"===f.get(a):i.isBr(a)},n=function(b){return 1===a.filter(h.children(b),m).length},o=function(a){h.lastChild(a).each(function(b){h.prevSibling(b).each(function(d){i.isBlock(a)&&i.isBr(b)&&i.isBlock(d)&&c.remove(b)})})};return{removeTrailingBr:k,fillWithPaddingBr:l,isPaddedElement:n,trimBlockTrailingBr:o}}),g("tinymce.core.fmt.FormatUtils",["tinymce.core.dom.TreeWalker"],function(a){var b=function(a){return a&&/^(IMG)$/.test(a.nodeName)},c=function(c,d,e){var f,h,i,j=e.startContainer,k=e.startOffset;if((e.startContainer!==e.endContainer||!b(e.startContainer.childNodes[e.startOffset]))&&(3===j.nodeType&&k>=j.nodeValue.length&&(k=c.nodeIndex(j),j=j.parentNode),1===j.nodeType))for(i=j.childNodes,k<i.length?(j=i[k],f=new a(j,c.getParent(j,c.isBlock))):(j=i[i.length-1],f=new a(j,c.getParent(j,c.isBlock)),f.next(!0)),h=f.current();h;h=f.next())if(3===h.nodeType&&!g(h))return e.setStart(h,0),void d.setRng(e)},d=function(a,b,c){if(a)for(b=b?"nextSibling":"previousSibling",a=c?a:a[b];a;a=a[b])if(1===a.nodeType||!g(a))return a},e=function(a,b){return b.nodeType&&(b=b.nodeName),!!a.schema.getTextBlockElements()[b.toLowerCase()]},f=function(a,b,c){return a.schema.isValidChild(b,c)},g=function(a){return a&&3===a.nodeType&&/^([\t \r\n]+|)$/.test(a.nodeValue)},h=function(a,b){return"string"!=typeof a?a=a(b):b&&(a=a.replace(/%(\w+)/g,function(a,c){return b[c]||a})),a},i=function(a,b){return a=a||"",b=b||"",a=""+(a.nodeName||a),b=""+(b.nodeName||b),a.toLowerCase()===b.toLowerCase()},j=function(a,b,c){return"color"!==c&&"backgroundColor"!==c||(b=a.toHex(b)),"fontWeight"===c&&700===b&&(b="bold"),"fontFamily"===c&&(b=b.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+b},k=function(a,b,c){return j(a,a.getStyle(b,c),c)},l=function(a,b){var c;return a.getParent(b,function(b){return c=a.getStyle(b,"text-decoration"),c&&"none"!==c}),c},m=function(a,b,c){return a.getParents(b,c,a.getRoot())};return{isInlineBlock:b,moveStart:c,getNonWhiteSpaceSibling:d,isTextBlock:e,isValid:f,isWhiteSpaceNode:g,replaceVars:h,isEq:i,normalizeStyleValue:j,getStyle:k,getTextDecoration:l,getParents:m}}),g("tinymce.core.fmt.ExpandRange",["tinymce.core.dom.BookmarkManager","tinymce.core.dom.TreeWalker","tinymce.core.fmt.FormatUtils"],function(a,b,c){var d=a.isBookmarkNode,e=c.getParents,f=c.isWhiteSpaceNode,g=c.isTextBlock,h=function(a,b){for("undefined"==typeof b&&(b=3===a.nodeType?a.length:a.childNodes.length);a&&a.hasChildNodes();)a=a.childNodes[b],a&&(b=3===a.nodeType?a.length:a.childNodes.length);return{node:a,offset:b}},i=function(a,b){var c=h(a,b);if(c.node){for(;c.node&&0===c.offset&&c.node.previousSibling;)c=h(c.node.previousSibling);c.node&&c.offset>0&&3===c.node.nodeType&&" "===c.node.nodeValue.charAt(c.offset-1)&&c.offset>1&&(a=c.node,a.splitText(c.offset-1))}return a},j=function(a){return"BR"===a.nodeName&&a.getAttribute("data-mce-bogus")&&!a.nextSibling},k=function(a,h,k,l){var m,n,o=h.startContainer,p=h.startOffset,q=h.endContainer,r=h.endOffset,s=a.dom,t=function(a){var b,c,e,g,h;if(b=c=a?o:q,g=a?"previousSibling":"nextSibling",h=s.getRoot(),3===b.nodeType&&!f(b)&&(a?p>0:r<b.nodeValue.length))return b;for(;;){if(!k[0].block_expand&&s.isBlock(c))return c;for(e=c[g];e;e=e[g])if(!d(e)&&!f(e)&&!j(e))return c;if(c===h||c.parentNode===h){b=c;break}c=c.parentNode}return b};1===o.nodeType&&o.hasChildNodes()&&(m=o.childNodes.length-1,o=o.childNodes[p>m?m:p],3===o.nodeType&&(p=0)),1===q.nodeType&&q.hasChildNodes()&&(m=q.childNodes.length-1,q=q.childNodes[r>m?m:r-1],3===q.nodeType&&(r=q.nodeValue.length));var u=function(a){for(var b=a;b;){if(1===b.nodeType&&s.getContentEditable(b))return"false"===s.getContentEditable(b)?b:a;b=b.parentNode}return a},v=function(c,d,e){var f,g,h,i,j=function(a,b){var c,d,f=a.nodeValue;return"undefined"==typeof b&&(b=e?f.length:0),e?(c=f.lastIndexOf(" ",b),d=f.lastIndexOf("\xa0",b),c=c>d?c:d,c===-1||l||c++):(c=f.indexOf(" ",b),d=f.indexOf("\xa0",b),c=c!==-1&&(d===-1||c<d)?c:d),c};if(3===c.nodeType){if(h=j(c,d),h!==-1)return{container:c,offset:h};i=c}for(f=new b(c,s.getParent(c,s.isBlock)||a.getBody());g=f[e?"prev":"next"]();)if(3===g.nodeType){if(i=g,h=j(g),h!==-1)return{container:g,offset:h}}else if(s.isBlock(g))break;if(i)return d=e?0:i.length,{container:i,offset:d}},w=function(a,b){var c,d,f,g;for(3===a.nodeType&&0===a.nodeValue.length&&a[b]&&(a=a[b]),c=e(s,a),d=0;d<c.length;d++)for(f=0;f<k.length;f++)if(g=k[f],!("collapsed"in g&&g.collapsed!==h.collapsed)&&s.is(c[d],g.selector))return c[d];return a},x=function(b,d){var f,h=s.getRoot();if(k[0].wrapper||(f=s.getParent(b,k[0].block,h)),!f){var i=s.getParent(b,"LI,TD,TH");f=s.getParent(3===b.nodeType?b.parentNode:b,function(b){return b!==h&&g(a,b)},i)}if(f&&k[0].wrapper&&(f=e(s,f,"ul,ol").reverse()[0]||f),!f)for(f=b;f[d]&&!s.isBlock(f[d])&&(f=f[d],!c.isEq(f,"br")););return f||b};return o=u(o),q=u(q),(d(o.parentNode)||d(o))&&(o=d(o)?o:o.parentNode,o=o.nextSibling||o,3===o.nodeType&&(p=0)),(d(q.parentNode)||d(q))&&(q=d(q)?q:q.parentNode,q=q.previousSibling||q,3===q.nodeType&&(r=q.length)),k[0].inline&&(h.collapsed&&(n=v(o,p,!0),n&&(o=n.container,p=n.offset),n=v(q,r),n&&(q=n.container,r=n.offset)),q=l?q:i(q,r)),(k[0].inline||k[0].block_expand)&&(k[0].inline&&3===o.nodeType&&0!==p||(o=t(!0)),k[0].inline&&3===q.nodeType&&r!==q.nodeValue.length||(q=t())),k[0].selector&&k[0].expand!==!1&&!k[0].inline&&(o=w(o,"previousSibling"),q=w(q,"nextSibling")),(k[0].block||k[0].selector)&&(o=x(o,"previousSibling"),q=x(q,"nextSibling"),k[0].block&&(s.isBlock(o)||(o=t(!0)),s.isBlock(q)||(q=t()))),1===o.nodeType&&(p=s.nodeIndex(o),o=o.parentNode),1===q.nodeType&&(r=s.nodeIndex(q)+1,q=q.parentNode),{startContainer:o,startOffset:p,endContainer:q,endOffset:r}};return{expandRng:k}}),g("tinymce.core.fmt.MatchFormat",["tinymce.core.fmt.FormatUtils"],function(a){var b=a.isEq,c=function(a,b,c){var d=a.formatter.get(c);if(d)for(var e=0;e<d.length;e++)if(d[e].inherit===!1&&a.dom.is(b,d[e].selector))return!0;return!1},d=function(a,b,d,e){var f=a.dom.getRoot();return b!==f&&(b=a.dom.getParent(b,function(b){return!!c(a,b,d)||(b.parentNode===f||!!g(a,b,d,e,!0))}),g(a,b,d,e))},e=function(a,c,d){return!!b(c,d.inline)||(!!b(c,d.block)||(d.selector?1===c.nodeType&&a.is(c,d.selector):void 0))},f=function(c,d,e,f,g,h){var i,j,k,l=e[f];if(e.onmatch)return e.onmatch(d,e,f);if(l)if("undefined"==typeof l.length){for(i in l)if(l.hasOwnProperty(i)){if(j="attributes"===f?c.getAttrib(d,i):a.getStyle(c,d,i),g&&!j&&!e.exact)return;if((!g||e.exact)&&!b(j,a.normalizeStyleValue(c,a.replaceVars(l[i],h),i)))return}}else for(k=0;k<l.length;k++)if("attributes"===f?c.getAttrib(d,l[k]):a.getStyle(c,d,l[k]))return e;return e},g=function(a,b,c,d,g){var h,i,j,k,l=a.formatter.get(c),m=a.dom;if(l&&b)for(i=0;i<l.length;i++)if(h=l[i],e(a.dom,b,h)&&f(m,b,h,"attributes",g,d)&&f(m,b,h,"styles",g,d)){if(k=h.classes)for(j=0;j<k.length;j++)if(!a.dom.hasClass(b,k[j]))return;return h}},h=function(a,b,c,e){var f;return e?d(a,e,b,c):(e=a.selection.getNode(),!!d(a,e,b,c)||(f=a.selection.getStart(),!(f===e||!d(a,f,b,c))))},i=function(a,b,c){var d,e=[],f={};return d=a.selection.getStart(),a.dom.getParent(d,function(d){var h,i;for(h=0;h<b.length;h++)i=b[h],!f[i]&&g(a,d,i,c)&&(f[i]=!0,e.push(i))},a.dom.getRoot()),e},j=function(b,c){var d,e,f,g,h,i=b.formatter.get(c),j=b.dom;if(i)for(d=b.selection.getStart(),e=a.getParents(j,d),g=i.length-1;g>=0;g--){if(h=i[g].selector,!h||i[g].defaultBlock)return!0;for(f=e.length-1;f>=0;f--)if(j.is(e[f],h))return!0}return!1};return{matchNode:g,matchName:e,match:h,matchAll:i,canApply:j,matchesUnInheritedFormatSelector:c}}),g("tinymce.core.fmt.CaretFormat",["ephox.katamari.api.Arr","ephox.sugar.api.node.Element","tinymce.core.dom.PaddingBr","tinymce.core.dom.RangeUtils","tinymce.core.dom.TreeWalker","tinymce.core.fmt.ExpandRange","tinymce.core.fmt.FormatUtils","tinymce.core.fmt.MatchFormat","tinymce.core.text.Zwsp","tinymce.core.util.Fun","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i,j,k){var l=i.ZWSP,m="_mce_caret",n=!1,o=function(a){return 1===a.nodeType&&a.id===m},p=function(a,b){for(;a;){if(3===a.nodeType&&a.nodeValue!==l||a.childNodes.length>1)return!1;b&&1===a.nodeType&&b.push(a),a=a.firstChild}return!0},q=function(a){var b;if(a)for(b=new e(a,a),a=b.current();a;a=b.next())if(3===a.nodeType)return a;return null},r=function(a,b){var c=a.create("span",{id:m,"data-mce-bogus":"1",style:n?"color:red":""});return b&&c.appendChild(a.doc.createTextNode(l)),c},s=function(a){for(;a;){if(a.id===m)return a;a=a.parentNode}},t=function(a,b){var c;c=s(b.getStart()),c&&!a.isEmpty(c)&&k.walk(c,function(b){1!==b.nodeType||b.id===m||a.isEmpty(b)||a.setAttrib(b,"data-mce-bogus",null)},"childNodes")},u=function(a){var b=q(a);return b&&b.nodeValue.charAt(0)===l&&b.deleteData(0,1),b},v=function(a,d,e,f){var g,h,i;g=d.getRng(!0),h=a.getParent(e,a.isBlock),p(e)?(f!==!1&&(g.setStartBefore(e),g.setEndBefore(e)),a.remove(e)):(i=u(e),g.startContainer===i&&g.startOffset>0&&g.setStart(i,g.startOffset-1),g.endContainer===i&&g.endOffset>0&&g.setEnd(i,g.endOffset-1),a.remove(e,!0)),h&&a.isEmpty(h)&&c.fillWithPaddingBr(b.fromDom(h)),d.setRng(g)},w=function(a,b,c,d){if(c)v(a,b,c,d);else if(c=s(b.getStart()),!c)for(;c=a.get(m);)v(a,b,c,!1)},x=function(a,d,e){var f=a.dom,h=f.getParent(e,j.curry(g.isTextBlock,a));h&&f.isEmpty(h)?e.parentNode.replaceChild(d,e):(c.removeTrailingBr(b.fromDom(e)),f.isEmpty(e)?e.parentNode.replaceChild(d,e):f.insertAfter(d,e))},y=function(a,b){return a.appendChild(b),b},z=function(b,c){var d=a.foldr(b,function(a,b){return y(a,b.cloneNode(!1))},c);return y(d,d.ownerDocument.createTextNode(l))},A=function(a){a._hasCaretEvents||(D(a),a._hasCaretEvents=!0)},B=function(a,b,c){var e,g,h,i,j,k,m,n=a.dom,o=a.selection;A(a),e=o.getRng(!0),i=e.startOffset,k=e.startContainer,m=k.nodeValue,g=s(o.getStart()),g&&(h=q(g));var p=/[^\s\u00a0\u00ad\u200b\ufeff]/;m&&i>0&&i<m.length&&p.test(m.charAt(i))&&p.test(m.charAt(i-1))?(j=o.getBookmark(),e.collapse(!0),e=f.expandRng(a,e,a.formatter.get(b)),e=new d(n).split(e),a.formatter.apply(b,c,e),o.moveToBookmark(j)):(g&&h.nodeValue===l?a.formatter.apply(b,c,g):(g=r(n,!0),h=g.firstChild,e.insertNode(g),i=1,a.formatter.apply(b,c,g)),o.setCursorLocation(h,i))},C=function(a,b,c,e){var g,i,j,k,l,m,n,o=a.dom,p=a.selection,q=p.getRng(!0),t=[];for(A(a),g=q.startContainer,i=q.startOffset,l=g,3===g.nodeType&&(i!==g.nodeValue.length&&(k=!0),l=l.parentNode);l;){if(h.matchNode(a,l,b,c,e)){m=l;break}l.nextSibling&&(k=!0),t.push(l),l=l.parentNode}if(m)if(k)j=p.getBookmark(),q.collapse(!0),q=f.expandRng(a,q,a.formatter.get(b),!0),q=new d(o).split(q),a.formatter.remove(b,c,q),p.moveToBookmark(j);else{n=s(m);var u=r(o,!1),w=z(t,u);n?x(a,u,n):x(a,u,m),v(o,p,n,!1),p.setCursorLocation(w,1),o.isEmpty(m)&&o.remove(m)}},D=function(a){var b=a.dom,c=a.selection;if(!a._hasCaretEvents){var d,e;a.on("BeforeGetContent",function(a){d&&"raw"!==a.format&&d()}),a.on("mouseup keydown",function(a){e&&e(a)}),d=function(){var a,d=[];if(p(s(c.getStart()),d))for(a=d.length;a--;)b.setAttrib(d[a],"data-mce-bogus","1")},e=function(a){var d=a.keyCode;w(b,c,null,!1),8===d&&c.isCollapsed()&&c.getStart().innerHTML===l&&w(b,c,s(c.getStart())),37!==d&&39!==d||w(b,c,s(c.getStart())),t(b,c)},a.on("SetContent",function(a){a.selection&&t(b,c)}),a._hasCaretEvents=!0}};return{applyCaretFormat:B,removeCaretFormat:C,isCaretNode:o}}),g("tinymce.core.fmt.Hooks",["tinymce.core.util.Arr","tinymce.core.dom.NodeType","tinymce.core.dom.DomQuery"],function(a,b,c){function d(a,b){var c=f[a];c||(f[a]=c=[]),f[a].push(b)}function e(a,b){h(f[a],function(a){a(b)})}var f={},g=a.filter,h=a.each;return d("pre",function(d){function e(b){return i(b.previousSibling)&&a.indexOf(j,b.previousSibling)!==-1}function f(a,b){c(b).remove(),c(a).append("<br><br>").append(b.childNodes)}var i,j,k=d.selection.getRng();i=b.matchNodeNames("pre"),k.collapsed||(j=d.selection.getSelectedBlocks(),h(g(g(j,i),e),function(a){f(a.previousSibling,a)}))}),{postProcess:e}}),g("tinymce.core.dom.ElementUtils",["tinymce.core.dom.BookmarkManager","tinymce.core.util.Tools"],function(a,b){function c(b){this.compare=function(c,e){function f(a){var c={};return d(b.getAttribs(a),function(d){var e=d.nodeName.toLowerCase();0!==e.indexOf("_")&&"style"!==e&&0!==e.indexOf("data-")&&(c[e]=b.getAttrib(a,e))}),c}function g(a,b){var c,d;for(d in a)if(a.hasOwnProperty(d)){if(c=b[d],"undefined"==typeof c)return!1;if(a[d]!=c)return!1;delete b[d]}for(d in b)if(b.hasOwnProperty(d))return!1;return!0}return c.nodeName==e.nodeName&&(!!g(f(c),f(e))&&(!!g(b.parseStyle(b.getAttrib(c,"style")),b.parseStyle(b.getAttrib(e,"style")))&&(!a.isBookmarkNode(c)&&!a.isBookmarkNode(e))))}}var d=b.each;return c}),g("tinymce.core.fmt.RemoveFormat",["ephox.katamari.api.Fun","tinymce.core.dom.BookmarkManager","tinymce.core.dom.RangeUtils","tinymce.core.dom.TreeWalker","tinymce.core.fmt.CaretFormat","tinymce.core.fmt.ExpandRange","tinymce.core.fmt.FormatUtils","tinymce.core.fmt.MatchFormat","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i){var j=/^(src|href|style)$/,k=i.each,l=g.isEq,m=function(a){return/^(TH|TD)$/.test(a.nodeName)},n=function(a,b,c){var e,f,g;return e=b[c?"startContainer":"endContainer"],f=b[c?"startOffset":"endOffset"],1===e.nodeType&&(g=e.childNodes.length-1,!c&&f&&f--,e=e.childNodes[f>g?g:f]),3===e.nodeType&&c&&f>=e.nodeValue.length&&(e=new d(e,a.getBody()).next()||e),3!==e.nodeType||c||0!==f||(e=new d(e,a.getBody()).prev()||e),e},o=function(a,b,c,d){var e=a.create(c,d);return b.parentNode.insertBefore(e,b),e.appendChild(b),e},p=function(a,b,c){return!!l(b,c.inline)||(!!l(b,c.block)||(c.selector?1===b.nodeType&&a.is(b,c.selector):void 0))},q=function(a,b){return b.links&&"A"===a.tagName},r=function(a,b,c,d){return b=g.getNonWhiteSpaceSibling(b,c,d),!b||"BR"===b.nodeName||a.isBlock(b)},s=function(a,b,c){var d,e=b.parentNode,f=a.dom,h=a.settings.forced_root_block;c.block&&(h?e===f.getRoot()&&(c.list_block&&l(b,c.list_block)||k(i.grep(b.childNodes),function(b){g.isValid(a,h,b.nodeName.toLowerCase())?d?d.appendChild(b):(d=o(f,b,h),f.setAttribs(d,a.settings.forced_root_block_attrs)):d=0})):f.isBlock(b)&&!f.isBlock(e)&&(r(f,b,!1)||r(f,b.firstChild,!0,1)||b.insertBefore(f.create("br"),b.firstChild),r(f,b,!0)||r(f,b.lastChild,!1,1)||b.appendChild(f.create("br")))),c.selector&&c.inline&&!l(c.inline,b)||f.remove(b,1)},t=function(a,b,c,d,e){var f,h,i,m=a.dom;if(!p(m,d,b)&&!q(d,b))return!1;if("all"!==b.remove)for(k(b.styles,function(a,f){a=g.normalizeStyleValue(m,g.replaceVars(a,c),f),"number"==typeof f&&(f=a,e=0),(b.remove_similar||!e||l(g.getStyle(m,e,f),a))&&m.setStyle(d,f,""),i=1}),i&&""===m.getAttrib(d,"style")&&(d.removeAttribute("style"),d.removeAttribute("data-mce-style")),k(b.attributes,function(a,b){var f;if(a=g.replaceVars(a,c),"number"==typeof b&&(b=a,e=0),!e||l(m.getAttrib(e,b),a)){if("class"===b&&(a=m.getAttrib(d,b),a&&(f="",k(a.split(/\s+/),function(a){/mce\-\w+/.test(a)&&(f+=(f?" ":"")+a)}),f)))return void m.setAttrib(d,b,f);"class"===b&&d.removeAttribute("className"),j.test(b)&&d.removeAttribute("data-mce-"+b),d.removeAttribute(b)}}),k(b.classes,function(a){a=g.replaceVars(a,c),e&&!m.hasClass(e,a)||m.removeClass(d,a)}),h=m.getAttribs(d),f=0;f<h.length;f++){var n=h[f].nodeName;if(0!==n.indexOf("_")&&0!==n.indexOf("data-"))return!1}return"none"!==b.remove?(s(a,d,b),!0):void 0},u=function(a,b,c,d,e){var f;return k(g.getParents(a.dom,b.parentNode).reverse(),function(b){var g;f||"_start"===b.id||"_end"===b.id||(g=h.matchNode(a,b,c,d,e),g&&g.split!==!1&&(f=b))}),f},v=function(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o=a.dom;if(c){for(n=c.parentNode,i=d.parentNode;i&&i!==n;i=i.parentNode){for(j=o.clone(i,!1),m=0;m<b.length;m++)if(t(a,b[m],h,j,j)){j=0;break}j&&(k&&j.appendChild(k),l||(l=j),k=j)}!f||g.mixed&&o.isBlock(c)||(d=o.split(c,d)),k&&(e.parentNode.insertBefore(k,e),l.appendChild(e))}return d},w=function(a,d,j,l,p){var q,r,s=a.formatter.get(d),w=s[0],x=!0,y=a.dom,z=a.selection,A=function(b){var c=u(a,b,d,j,p);return v(a,s,c,b,b,!0,w,j)},B=function(b){var c,d,e,f,g;if(1===b.nodeType&&y.getContentEditable(b)&&(f=x,x="true"===y.getContentEditable(b),g=!0),c=i.grep(b.childNodes),x&&!g)for(d=0,e=s.length;d<e&&!t(a,s[d],j,b,b);d++);if(w.deep&&c.length){for(d=0,e=c.length;d<e;d++)B(c[d]);g&&(x=f)}},C=function(a){var c=y.get(a?"_start":"_end"),d=c[a?"firstChild":"lastChild"];return b.isBookmarkNode(d)&&(d=d[a?"firstChild":"lastChild"]),
-3===d.nodeType&&0===d.data.length&&(d=a?c.previousSibling||c.nextSibling:c.nextSibling||c.previousSibling),y.remove(c,!0),d},D=function(b){var d,e,h=b.commonAncestorContainer;if(b=f.expandRng(a,b,s,!0),w.split){if(d=n(a,b,!0),e=n(a,b),d!==e){if(/^(TR|TH|TD)$/.test(d.nodeName)&&d.firstChild&&(d="TR"===d.nodeName?d.firstChild.firstChild||d:d.firstChild||d),h&&/^T(HEAD|BODY|FOOT|R)$/.test(h.nodeName)&&m(e)&&e.firstChild&&(e=e.firstChild||e),y.isChildOf(d,e)&&!y.isBlock(e)&&!m(d)&&!m(e))return d=o(y,d,"span",{id:"_start","data-mce-type":"bookmark"}),A(d),void(d=C(!0));d=o(y,d,"span",{id:"_start","data-mce-type":"bookmark"}),e=o(y,e,"span",{id:"_end","data-mce-type":"bookmark"}),A(d),A(e),d=C(!0),e=C()}else d=e=A(d);b.startContainer=d.parentNode?d.parentNode:d,b.startOffset=y.nodeIndex(d),b.endContainer=e.parentNode?e.parentNode:e,b.endOffset=y.nodeIndex(e)+1}new c(y).walk(b,function(b){k(b,function(b){B(b),1===b.nodeType&&"underline"===a.dom.getStyle(b,"text-decoration")&&b.parentNode&&"underline"===g.getTextDecoration(y,b.parentNode)&&t(a,{deep:!1,exact:!0,inline:"span",styles:{textDecoration:"underline"}},null,b)})})};if(l)return void(l.nodeType?(r=y.createRng(),r.setStartBefore(l),r.setEndAfter(l),D(r)):D(l));if("false"!==y.getContentEditable(z.getNode()))z.isCollapsed()&&w.inline&&!y.select("td[data-mce-selected],th[data-mce-selected]").length?e.removeCaretFormat(a,d,j,p):(q=z.getBookmark(),D(z.getRng(!0)),z.moveToBookmark(q),w.inline&&h.match(a,d,j,z.getStart())&&g.moveStart(y,z,z.getRng(!0)),a.nodeChanged());else{l=z.getNode();for(var E=0,F=s.length;E<F&&(!s[E].ceFalseOverride||!t(a,s[E],j,l,l));E++);}};return{removeFormat:t,remove:w}}),g("tinymce.core.fmt.MergeFormats",["ephox.katamari.api.Fun","tinymce.core.dom.BookmarkManager","tinymce.core.dom.ElementUtils","tinymce.core.dom.NodeType","tinymce.core.fmt.CaretFormat","tinymce.core.fmt.FormatUtils","tinymce.core.fmt.MatchFormat","tinymce.core.fmt.RemoveFormat","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i){var j=i.each,k=function(a){return a&&1===a.nodeType&&!b.isBookmarkNode(a)&&!e.isCaretNode(a)&&!d.isBogus(a)},l=function(a,c){var d;for(d=a;d;d=d[c]){if(3===d.nodeType&&0!==d.nodeValue.length)return a;if(1===d.nodeType&&!b.isBookmarkNode(d))return d}return a},m=function(a,b,d){var e,f,g=new c(a);if(b&&d&&(b=l(b,"previousSibling"),d=l(d,"nextSibling"),g.compare(b,d))){for(e=b.nextSibling;e&&e!==d;)f=e,e=e.nextSibling,b.appendChild(f);return a.remove(d),i.each(i.grep(d.childNodes),function(a){b.appendChild(a)}),b}return d},n=function(a,b,c){j(a.childNodes,function(a){k(a)&&(b(a)&&c(a),a.hasChildNodes()&&n(a,b,c))})},o=function(b,c){return a.curry(function(a,c){return!(!c||!f.getStyle(b,c,a))},c)},p=function(b,c,d){return a.curry(function(a,c,d){b.setStyle(d,a,c),""===d.getAttribute("style")&&d.removeAttribute("style"),q(b,d)},c,d)},q=function(a,b){"SPAN"===b.nodeName&&0===a.getAttribs(b).length&&a.remove(b,!0)},r=function(a,b){var c;1===b.nodeType&&b.parentNode&&1===b.parentNode.nodeType&&(c=f.getTextDecoration(a,b.parentNode),a.getStyle(b,"color")&&c?a.setStyle(b,"text-decoration",c):a.getStyle(b,"text-decoration")===c&&a.setStyle(b,"text-decoration",null))},s=function(b,c,d,e){(c.styles.color||c.styles.textDecoration)&&(i.walk(e,a.curry(r,b),"childNodes"),r(b,e))},t=function(a,b,c,d){b.styles&&b.styles.backgroundColor&&n(d,o(a,"fontSize"),p(a,"backgroundColor",f.replaceVars(b.styles.backgroundColor,c)))},u=function(a,b,c,d){"sub"!==b.inline&&"sup"!==b.inline||(n(d,o(a,"fontSize"),p(a,"fontSize","")),a.remove(a.select("sup"===b.inline?"sub":"sup",d),!0))},v=function(a,b,c,d){d&&b.merge_siblings!==!1&&(d=m(a,f.getNonWhiteSpaceSibling(d),d),d=m(a,d,f.getNonWhiteSpaceSibling(d,!0)))},w=function(a,b,c){if(b.clear_child_styles){var d=b.links?"*:not(a)":"*";j(a.select(d,c),function(c){k(c)&&j(b.styles,function(b,d){a.setStyle(c,d,"")})})}},x=function(a,b,c,d){j(b,function(b){j(a.dom.select(b.inline,d),function(d){k(d)&&h.removeFormat(a,b,c,d,b.exact?d:null)}),w(a.dom,b,d)})},y=function(a,b,c,d,e){g.matchNode(a,e.parentNode,c,d)&&h.removeFormat(a,b,d,e)||b.merge_with_parents&&a.dom.getParent(e.parentNode,function(f){if(g.matchNode(a,f,c,d))return h.removeFormat(a,b,d,e),!0})};return{mergeWithChildren:x,mergeUnderlineAndColor:s,mergeBackgroundColorAndFontSize:t,mergeSubSup:u,mergeSiblings:v,mergeWithParents:y}}),g("tinymce.core.fmt.ApplyFormat",["tinymce.core.dom.BookmarkManager","tinymce.core.dom.NodeType","tinymce.core.dom.RangeNormalizer","tinymce.core.dom.RangeUtils","tinymce.core.fmt.CaretFormat","tinymce.core.fmt.ExpandRange","tinymce.core.fmt.FormatUtils","tinymce.core.fmt.Hooks","tinymce.core.fmt.MatchFormat","tinymce.core.fmt.MergeFormats","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i,j,k){var l=k.each,m=function(c){return c&&1===c.nodeType&&!a.isBookmarkNode(c)&&!e.isCaretNode(c)&&!b.isBogus(c)},n=function(b,o,p,q){var r,s,t=b.formatter.get(o),u=t[0],v=!q&&b.selection.isCollapsed(),w=b.dom,x=b.selection,y=function(a,b){if(b=b||u,a){if(b.onformat&&b.onformat(a,b,p,q),l(b.styles,function(b,c){w.setStyle(a,c,g.replaceVars(b,p))}),b.styles){var c=w.getAttrib(a,"style");c&&a.setAttribute("data-mce-style",c)}l(b.attributes,function(b,c){w.setAttrib(a,c,g.replaceVars(b,p))}),l(b.classes,function(b){b=g.replaceVars(b,p),w.hasClass(a,b)||w.addClass(a,b)})}},z=function(a,b){var c=!1;return!!u.selector&&(l(a,function(a){if(!("collapsed"in a&&a.collapsed!==v))return w.is(b,a.selector)&&!e.isCaretNode(b)?(y(b,a),c=!0,!1):void 0}),c)},A=function(c,f,h,n){var q,r,s=[],v=!0;q=u.inline||u.block,r=c.create(q),y(r),new d(c).walk(f,function(a){var d,f=function(a){var h,j,m,w;if(w=v,h=a.nodeName.toLowerCase(),j=a.parentNode.nodeName.toLowerCase(),1===a.nodeType&&c.getContentEditable(a)&&(w=v,v="true"===c.getContentEditable(a),m=!0),g.isEq(h,"br"))return d=0,void(u.block&&c.remove(a));if(u.wrapper&&i.matchNode(b,a,o,p))return void(d=0);if(v&&!m&&u.block&&!u.wrapper&&g.isTextBlock(b,h)&&g.isValid(b,j,q))return a=c.rename(a,q),y(a),s.push(a),void(d=0);if(u.selector){var x=z(t,a);if(!u.inline||x)return void(d=0)}!v||m||!g.isValid(b,q,h)||!g.isValid(b,j,q)||!n&&3===a.nodeType&&1===a.nodeValue.length&&65279===a.nodeValue.charCodeAt(0)||e.isCaretNode(a)||u.inline&&c.isBlock(a)?(d=0,l(k.grep(a.childNodes),f),m&&(v=w),d=0):(d||(d=c.clone(r,!1),a.parentNode.insertBefore(d,a),s.push(d)),d.appendChild(a))};l(a,f)}),u.links===!0&&l(s,function(a){var b=function(a){"A"===a.nodeName&&y(a,u),l(k.grep(a.childNodes),b)};b(a)}),l(s,function(d){var e,f=function(b){var c=0;return l(b.childNodes,function(b){g.isWhiteSpaceNode(b)||a.isBookmarkNode(b)||c++}),c},h=function(a){var b=!1;return l(a.childNodes,function(a){if(m(a))return b=a,!1}),b},k=function(b){var d,e;return d=h(b),d&&!a.isBookmarkNode(d)&&i.matchName(c,d,u)&&(e=c.clone(d,!1),y(e),c.replace(e,b,!0),c.remove(d,1)),e||b};return e=f(d),(s.length>1||!c.isBlock(d))&&0===e?void c.remove(d,1):void((u.inline||u.wrapper)&&(u.exact||1!==e||(d=k(d)),j.mergeWithChildren(b,t,p,d),j.mergeWithParents(b,u,o,p,d),j.mergeBackgroundColorAndFontSize(c,u,p,d),j.mergeSubSup(c,u,p,d),j.mergeSiblings(c,u,p,d)))})};if("false"!==w.getContentEditable(x.getNode())){if(u){if(q)q.nodeType?z(t,q)||(s=w.createRng(),s.setStartBefore(q),s.setEndAfter(q),A(w,f.expandRng(b,s,t),null,!0)):A(w,q,null,!0);else if(v&&u.inline&&!w.select("td[data-mce-selected],th[data-mce-selected]").length)e.applyCaretFormat(b,o,p);else{var B=b.selection.getNode();b.settings.forced_root_block||!t[0].defaultBlock||w.getParent(B,w.isBlock)||n(b,t[0].defaultBlock),b.selection.setRng(c.normalize(b.selection.getRng())),r=x.getBookmark(),A(w,f.expandRng(b,x.getRng(!0),t),r),u.styles&&j.mergeUnderlineAndColor(w,u,p,B),x.moveToBookmark(r),g.moveStart(w,x,x.getRng(!0)),b.nodeChanged()}h.postProcess(o,b)}}else{q=x.getNode();for(var C=0,D=t.length;C<D;C++)if(t[C].ceFalseOverride&&w.is(q,t[C].selector))return void y(q,t[C])}};return{applyFormat:n}}),g("tinymce.core.fmt.FormatChanged",["ephox.katamari.api.Cell","tinymce.core.fmt.FormatUtils","tinymce.core.fmt.MatchFormat","tinymce.core.util.Tools"],function(a,b,c,d){var e=d.each,f=function(a,f){var g={};a.set({}),f.on("NodeChange",function(h){var i=b.getParents(f.dom,h.element),j={};i=d.grep(i,function(a){return 1===a.nodeType&&!a.getAttribute("data-mce-bogus")}),e(a.get(),function(a,b){e(i,function(d){return f.formatter.matchNode(d,b,{},a.similar)?(g[b]||(e(a,function(a){a(!0,{node:d,format:b,parents:i})}),g[b]=a),j[b]=a,!1):!c.matchesUnInheritedFormatSelector(f,d,b)&&void 0})}),e(g,function(a,b){j[b]||(delete g[b],e(a,function(a){a(!1,{node:h.element,format:b,parents:i})}))})})},g=function(a,b,c,d){var f=a.get();e(b.split(","),function(a){f[a]||(f[a]=[],f[a].similar=d),f[a].push(c)}),a.set(f)},h=function(a,b,c,d,e){null===b.get()&&f(b,a),g(b,c,d,e)};return{formatChanged:h}}),g("tinymce.core.fmt.DefaultFormats",["tinymce.core.util.Tools"],function(a){var b=function(b){var c={valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure.image",collapsed:!1,classes:"align-left",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},inherit:!1,preview:!1,defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"},preview:"font-family font-size"}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"figure.image",collapsed:!1,classes:"align-center",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"},preview:!1},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"},preview:"font-family font-size"}],alignright:[{selector:"figure.image",collapsed:!1,classes:"align-right",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"},preview:"font-family font-size"}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},inherit:!1,defaultBlock:"div",preview:"font-family font-size"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},fontname:{inline:"span",styles:{fontFamily:"%value"},clear_child_styles:!0},fontsize:{inline:"span",styles:{fontSize:"%value"},clear_child_styles:!0},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(c,d,e){a.each(e,function(a,d){b.setAttrib(c,d,a)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]};return a.each("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(a){c[a]={block:a,remove:"all"}}),c};return{get:b}}),g("tinymce.core.fmt.FormatRegistry",["tinymce.core.fmt.DefaultFormats","tinymce.core.util.Tools"],function(a,b){return function(c){var d={},e=function(a){return a?d[a]:d},f=function(a,c){a&&("string"!=typeof a?b.each(a,function(a,b){f(b,a)}):(c=c.length?c:[c],b.each(c,function(a){"undefined"==typeof a.deep&&(a.deep=!a.selector),"undefined"==typeof a.split&&(a.split=!a.selector||a.inline),"undefined"==typeof a.remove&&a.selector&&!a.inline&&(a.remove="none"),a.selector&&a.inline&&(a.mixed=!0,a.block_expand=!0),"string"==typeof a.classes&&(a.classes=a.classes.split(/\s+/))}),d[a]=c))},g=function(a){return a&&d[a]&&delete d[a],d};return f(a.get(c.dom)),f(c.settings.formats),{get:e,register:f,unregister:g}}}),g("tinymce.core.fmt.Preview",["tinymce.core.dom.DOMUtils","tinymce.core.util.Tools","tinymce.core.html.Schema"],function(a,b,c){function d(a,d){function e(a,b){b.classes.length&&j.addClass(a,b.classes.join(" ")),j.setAttribs(a,b.attrs)}function f(a){var b;return k="string"==typeof a?{name:a,classes:[],attrs:{}}:a,b=j.create(k.name),e(b,k),b}function g(a,c){var d="string"!=typeof a?a.nodeName.toLowerCase():a,e=m.getElementRule(d),f=e&&e.parentsRequired;return!(!f||!f.length)&&(c&&b.inArray(f,c)!==-1?c:f[0])}function h(a,c,d){var e,i,k,l=c.length>0&&c[0],m=l&&l.name;if(k=g(a,m))m===k?(i=c[0],c=c.slice(1)):i=k;else if(l)i=c[0],c=c.slice(1);else if(!d)return a;return i&&(e=f(i),e.appendChild(a)),d&&(e||(e=j.create("div"),e.appendChild(a)),b.each(d,function(b){var c=f(b);e.insertBefore(c,a)})),h(e,c,i&&i.siblings)}var i,k,l,m=d&&d.schema||new c({});return a&&a.length?(k=a[0],i=f(k),l=j.create("div"),l.appendChild(h(i,a.slice(1),k.siblings)),l):""}function e(a,b){return d(g(a),b)}function f(a){var c,d={classes:[],attrs:{}};return a=d.selector=b.trim(a),"*"!==a&&(c=a.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g,function(a,c,e,f,g){switch(c){case"#":d.attrs.id=e;break;case".":d.classes.push(e);break;case":":b.inArray("checked disabled enabled read-only required".split(" "),e)!==-1&&(d.attrs[e]=e)}if("["===f){var h=g.match(/([\w\-]+)(?:\=\"([^\"]+))?/);h&&(d.attrs[h[1]]=h[2])}return""})),d.name=c||"div",d}function g(a){return a&&"string"==typeof a?(a=a.split(/\s*,\s*/)[0],a=a.replace(/\s*(~\+|~|\+|>)\s*/g,"$1"),b.map(a.split(/(?:>|\s+(?![^\[\]]+\]))/),function(a){var c=b.map(a.split(/(?:~\+|~|\+)/),f),d=c.pop();return c.length&&(d.siblings=c),d}).reverse()):[]}function h(a,b){function c(a){return a.replace(/%(\w+)/g,"")}var e,f,h,k,l,m,n="";if(m=a.settings.preview_styles,m===!1)return"";if("string"!=typeof m&&(m="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),"string"==typeof b){if(b=a.formatter.get(b),!b)return;b=b[0]}return"preview"in b&&(m=b.preview,m===!1)?"":(e=b.block||b.inline||"span",k=g(b.selector),k.length?(k[0].name||(k[0].name=e),e=b.selector,f=d(k,a)):f=d([e],a),h=j.select(e,f)[0]||f.firstChild,i(b.styles,function(a,b){a=c(a),a&&j.setStyle(h,b,a)}),i(b.attributes,function(a,b){a=c(a),a&&j.setAttrib(h,b,a)}),i(b.classes,function(a){a=c(a),j.hasClass(h,a)||j.addClass(h,a)}),a.fire("PreviewFormats"),j.setStyles(f,{position:"absolute",left:-65535}),a.getBody().appendChild(f),l=j.getStyle(a.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,i(m.split(" "),function(b){var c=j.getStyle(h,b,!0);if(!("background-color"===b&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(c)&&(c=j.getStyle(a.getBody(),b,!0),"#ffffff"===j.toHex(c).toLowerCase())||"color"===b&&"#000000"===j.toHex(c).toLowerCase())){if("font-size"===b&&/em|%$/.test(c)){if(0===l)return;c=parseFloat(c,10)/(/%$/.test(c)?100:1),c=c*l+"px"}"border"===b&&c&&(n+="padding:0 2px;"),n+=b+":"+c+";"}}),a.fire("AfterPreviewFormats"),j.remove(f),n)}var i=b.each,j=a.DOM;return{getCssText:h,parseSelector:g,selectorToHtml:e}}),g("tinymce.core.fmt.ToggleFormat",["tinymce.core.fmt.ApplyFormat","tinymce.core.fmt.MatchFormat","tinymce.core.fmt.RemoveFormat"],function(a,b,c){var d=function(d,e,f,g,h){var i=e.get(f);!b.match(d,f,g,h)||"toggle"in i[0]&&!i[0].toggle?a.applyFormat(d,f,g,h):c.remove(d,f,g,h)};return{toggle:d}}),g("tinymce.core.keyboard.FormatShortcuts",[],function(){var a=function(a){a.addShortcut("meta+b","","Bold"),a.addShortcut("meta+i","","Italic"),a.addShortcut("meta+u","","Underline");for(var b=1;b<=6;b++)a.addShortcut("access+"+b,"",["FormatBlock",!1,"h"+b]);a.addShortcut("access+7","",["FormatBlock",!1,"p"]),a.addShortcut("access+8","",["FormatBlock",!1,"div"]),a.addShortcut("access+9","",["FormatBlock",!1,"address"])};return{setup:a}}),g("tinymce.core.api.Formatter",["ephox.katamari.api.Cell","ephox.katamari.api.Fun","tinymce.core.fmt.ApplyFormat","tinymce.core.fmt.FormatChanged","tinymce.core.fmt.FormatRegistry","tinymce.core.fmt.MatchFormat","tinymce.core.fmt.Preview","tinymce.core.fmt.RemoveFormat","tinymce.core.fmt.ToggleFormat","tinymce.core.keyboard.FormatShortcuts"],function(a,b,c,d,e,f,g,h,i,j){return function(k){var l=e(k),m=a(null);return j.setup(k),{get:l.get,register:l.register,unregister:l.unregister,apply:b.curry(c.applyFormat,k),remove:b.curry(h.remove,k),toggle:b.curry(i.toggle,k,l),match:b.curry(f.match,k),matchAll:b.curry(f.matchAll,k),matchNode:b.curry(f.matchNode,k),canApply:b.curry(f.canApply,k),formatChanged:b.curry(d.formatChanged,k,m),getCssText:b.curry(g.getCssText,k)}}}),g("ephox.sugar.api.properties.Attr",["ephox.katamari.api.Type","ephox.katamari.api.Arr","ephox.katamari.api.Obj","ephox.sugar.api.node.Node","global!Error","global!console"],function(a,b,c,d,e,f){var g=function(b,c,d){if(!(a.isString(d)||a.isBoolean(d)||a.isNumber(d)))throw f.error("Invalid call to Attr.set. Key ",c,":: Value ",d,":: Element ",b),new e("Attribute value was not simple");b.setAttribute(c,d+"")},h=function(a,b,c){g(a.dom(),b,c)},i=function(a,b){var d=a.dom();c.each(b,function(a,b){g(d,b,a)})},j=function(a,b){var c=a.dom().getAttribute(b);return null===c?void 0:c},k=function(a,b){var c=a.dom();return!(!c||!c.hasAttribute)&&c.hasAttribute(b)},l=function(a,b){a.dom().removeAttribute(b)},m=function(a){var b=a.dom().attributes;return void 0===b||null===b||0===b.length},n=function(a){return b.foldl(a.dom().attributes,function(a,b){return a[b.name]=b.value,a},{})},o=function(a,b,c){k(a,c)&&!k(b,c)&&h(b,c,j(a,c))},p=function(a,c,e){d.isElement(a)&&d.isElement(c)&&b.each(e,function(b){o(a,c,b)})};return{clone:n,set:h,setAll:i,get:j,has:k,remove:l,hasNone:m,transfer:p}}),g("ephox.sugar.impl.Style",[],function(){var a=function(a){return void 0!==a.style};return{isSupported:a}}),h("global!window",window),g("ephox.sugar.api.properties.Css",["ephox.katamari.api.Type","ephox.katamari.api.Arr","ephox.katamari.api.Obj","ephox.katamari.api.Option","ephox.sugar.api.properties.Attr","ephox.sugar.api.node.Body","ephox.sugar.api.node.Element","ephox.sugar.api.node.Node","ephox.sugar.impl.Style","ephox.katamari.api.Strings","global!Error","global!console","global!window"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(b,c,d){if(!a.isString(d))throw l.error("Invalid call to CSS.set. Property ",c,":: Value ",d,":: Element ",b),new k("CSS value must be a string: "+d);i.isSupported(b)&&b.style.setProperty(c,d)},o=function(a,b){i.isSupported(a)&&a.style.removeProperty(b)},p=function(a,b,c){var d=a.dom();n(d,b,c)},q=function(a,b){var d=a.dom();c.each(b,function(a,b){n(d,b,a)})},r=function(a,b){var d=a.dom();c.each(b,function(a,b){a.fold(function(){o(d,b)},function(a){n(d,b,a)})})},s=function(a,b){var c=a.dom(),d=m.getComputedStyle(c),e=d.getPropertyValue(b),g=""!==e||f.inBody(a)?e:t(c,b);return null===g?void 0:g},t=function(a,b){return i.isSupported(a)?a.style.getPropertyValue(b):""},u=function(a,b){var c=a.dom(),e=t(c,b);return d.from(e).filter(function(a){return a.length>0})},v=function(a,b,c){var d=g.fromTag(a);p(d,b,c);var e=u(d,b);return e.isSome()},w=function(a,b){var c=a.dom();o(c,b),e.has(a,"style")&&""===j.trim(e.get(a,"style"))&&e.remove(a,"style")},x=function(a,b){var c=e.get(a,"style"),d=b(a),f=void 0===c?e.remove:e.set;return f(a,"style",c),d},y=function(a,b){var c=a.dom(),d=b.dom();i.isSupported(c)&&i.isSupported(d)&&(d.style.cssText=c.style.cssText)},z=function(a){return a.dom().offsetWidth},A=function(a,b,c){u(a,c).each(function(a){u(b,c).isNone()&&p(b,c,a)})},B=function(a,c,d){h.isElement(a)&&h.isElement(c)&&b.each(d,function(b){A(a,c,b)})};return{copy:y,set:p,preserve:x,setAll:q,setOptions:r,remove:w,get:s,getRaw:u,isValidValue:v,reflow:z,transfer:B}}),g("tinymce.core.EditorView",["ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","ephox.sugar.api.properties.Css","ephox.sugar.api.search.Traverse"],function(a,b,c,d,e,f){var g=function(a,b){var c=b.dom();return c[a]},h=function(a,b){return parseInt(e.get(b,a),10)},i=a.curry(g,"clientWidth"),j=a.curry(g,"clientHeight"),k=a.curry(h,"margin-top"),l=a.curry(h,"margin-left"),m=function(a){return a.dom().getBoundingClientRect()},n=function(a,b,c){var d=i(a),e=j(a);return b>=0&&c>=0&&b<=d&&c<=e},o=function(a,b,c,d){var e=m(b),f=a?e.left+b.dom().clientLeft+l(b):0,g=a?e.top+b.dom().clientTop+k(b):0,h=c-f,i=d-g;return{x:h,y:i}},p=function(a,b,c){var e=d.fromDom(a.getBody()),g=a.inline?e:f.documentElement(e),h=o(a.inline,g,b,c);return n(g,h.x,h.y)},q=function(a){return b.from(a).map(d.fromDom)},r=function(a){var b=a.inline?a.getBody():a.getContentAreaContainer();return q(b).map(function(a){return c.contains(f.owner(a),a)}).getOr(!1)};return{isXYInContentArea:p,isEditorAttachedToDom:r}}),g("tinymce.core.ui.DomUtils",["tinymce.core.Env","tinymce.core.util.Tools","tinymce.core.dom.DOMUtils"],function(a,b,c){"use strict";var d=0,e={id:function(){return"mceu_"+d++},create:function(a,d,e){var f=document.createElement(a);return c.DOM.setAttribs(f,d),"string"==typeof e?f.innerHTML=e:b.each(e,function(a){a.nodeType&&f.appendChild(a)}),f},createFragment:function(a){return c.DOM.createFragment(a)},getWindowSize:function(){return c.DOM.getViewPort()},getSize:function(a){var b,c;if(a.getBoundingClientRect){var d=a.getBoundingClientRect();b=Math.max(d.width||d.right-d.left,a.offsetWidth),c=Math.max(d.height||d.bottom-d.bottom,a.offsetHeight)}else b=a.offsetWidth,c=a.offsetHeight;return{width:b,height:c}},getPos:function(a,b){return c.DOM.getPos(a,b||e.getContainer())},getContainer:function(){return a.container?a.container:document.body},getViewPort:function(a){return c.DOM.getViewPort(a)},get:function(a){return document.getElementById(a)},addClass:function(a,b){return c.DOM.addClass(a,b)},removeClass:function(a,b){return c.DOM.removeClass(a,b)},hasClass:function(a,b){return c.DOM.hasClass(a,b)},toggleClass:function(a,b,d){return c.DOM.toggleClass(a,b,d)},css:function(a,b,d){return c.DOM.setStyle(a,b,d)},getRuntimeStyle:function(a,b){return c.DOM.getStyle(a,b,!0)},on:function(a,b,d,e){return c.DOM.bind(a,b,d,e)},off:function(a,b,d){return c.DOM.unbind(a,b,d)},fire:function(a,b,d){return c.DOM.fire(a,b,d)},innerHtml:function(a,b){c.DOM.setHTML(a,b)}};return e}),g("tinymce.core.util.Class",["tinymce.core.util.Tools"],function(a){function b(){}var c,d,e=a.each,f=a.extend;return b.extend=c=function(a){function b(){var a,b,c,e=this;if(!d&&(e.init&&e.init.apply(e,arguments),b=e.Mixins))for(a=b.length;a--;)c=b[a],c.init&&c.init.apply(e,arguments)}function g(){return this}function h(a,b){return function(){var c,d=this,e=d._super;return d._super=m[a],c=b.apply(d,arguments),d._super=e,c}}var i,j,k,l=this,m=l.prototype;d=!0,i=new l,d=!1,a.Mixins&&(e(a.Mixins,function(b){for(var c in b)"init"!==c&&(a[c]=b[c])}),m.Mixins&&(a.Mixins=m.Mixins.concat(a.Mixins))),a.Methods&&e(a.Methods.split(","),function(b){a[b]=g}),a.Properties&&e(a.Properties.split(","),function(b){var c="_"+b;a[b]=function(a){var b,d=this;return a!==b?(d[c]=a,d):d[c]}}),a.Statics&&e(a.Statics,function(a,c){b[c]=a}),a.Defaults&&m.Defaults&&(a.Defaults=f({},m.Defaults,a.Defaults));for(j in a)k=a[j],"function"==typeof k&&m[j]?i[j]=h(j,k):i[j]=k;return b.prototype=i,b.constructor=b,b.extend=c,b},b}),g("tinymce.core.util.EventDispatcher",["tinymce.core.util.Tools"],function(a){function b(b){function c(){return!1}function d(){return!0}function e(a,e){var f,h,i,k;if(a=a.toLowerCase(),e=e||{},e.type=a,e.target||(e.target=j),e.preventDefault||(e.preventDefault=function(){e.isDefaultPrevented=d},e.stopPropagation=function(){e.isPropagationStopped=d},e.stopImmediatePropagation=function(){e.isImmediatePropagationStopped=d},e.isDefaultPrevented=c,e.isPropagationStopped=c,e.isImmediatePropagationStopped=c),b.beforeFire&&b.beforeFire(e),f=m[a])for(h=0,i=f.length;h<i;h++){if(k=f[h],k.once&&g(a,k.func),e.isImmediatePropagationStopped())return e.stopPropagation(),e;if(k.func.call(j,e)===!1)return e.preventDefault(),e}return e}function f(b,d,e,f){var g,h,i;if(d===!1&&(d=c),d)for(d={func:d},f&&a.extend(d,f),h=b.toLowerCase().split(" "),i=h.length;i--;)b=h[i],g=m[b],g||(g=m[b]=[],k(b,!0)),e?g.unshift(d):g.push(d);return l}function g(a,b){var c,d,e,f,g;if(a)for(f=a.toLowerCase().split(" "),c=f.length;c--;){if(a=f[c],d=m[a],!a){for(e in m)k(e,!1),delete m[e];return l}if(d){if(b)for(g=d.length;g--;)d[g].func===b&&(d=d.slice(0,g).concat(d.slice(g+1)),m[a]=d);else d.length=0;d.length||(k(a,!1),delete m[a])}}else{for(a in m)k(a,!1);m={}}return l}function h(a,b,c){return f(a,b,c,{once:!0})}function i(a){return a=a.toLowerCase(),!(!m[a]||0===m[a].length)}var j,k,l=this,m={};b=b||{},j=b.scope||l,k=b.toggleEvent||c,l.fire=e,l.on=f,l.off=g,l.once=h,l.has=i}var c=a.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend"," ");return b.isNative=function(a){return!!c[a.toLowerCase()]},b}),g("tinymce.core.data.Binding",[],function(){function a(a){this.create=a.create}return a.create=function(b,c){return new a({create:function(a,d){function e(b){a.set(d,b.value)}function f(a){b.set(c,a.value)}var g;return a.on("change:"+d,f),b.on("change:"+c,e),g=a._bindings,g||(g=a._bindings=[],a.on("destroy",function(){for(var a=g.length;a--;)g[a]()})),g.push(function(){b.off("change:"+c,e)}),b.get(c)}})},a}),g("tinymce.core.util.Observable",["tinymce.core.util.EventDispatcher"],function(a){function b(b){return b._eventDispatcher||(b._eventDispatcher=new a({scope:b,toggleEvent:function(c,d){a.isNative(c)&&b.toggleNativeEvent&&b.toggleNativeEvent(c,d)}})),b._eventDispatcher}return{fire:function(a,c,d){var e=this;if(e.removed&&"remove"!==a)return c;if(c=b(e).fire(a,c,d),d!==!1&&e.parent)for(var f=e.parent();f&&!c.isPropagationStopped();)f.fire(a,c,!1),f=f.parent();return c},on:function(a,c,d){return b(this).on(a,c,d)},off:function(a,c){return b(this).off(a,c)},once:function(a,c){return b(this).once(a,c)},hasEventListeners:function(a){return b(this).has(a)}}}),g("tinymce.core.data.ObservableObject",["tinymce.core.data.Binding","tinymce.core.util.Class","tinymce.core.util.Observable","tinymce.core.util.Tools"],function(a,b,c,d){function e(a){return a.nodeType>0}function f(a,b){var c,g;if(a===b)return!0;if(null===a||null===b)return a===b;if("object"!=typeof a||"object"!=typeof b)return a===b;if(d.isArray(b)){if(a.length!==b.length)return!1;for(c=a.length;c--;)if(!f(a[c],b[c]))return!1}if(e(a)||e(b))return a===b;g={};for(c in b){if(!f(a[c],b[c]))return!1;g[c]=!0}for(c in a)if(!g[c]&&!f(a[c],b[c]))return!1;return!0}return b.extend({Mixins:[c],init:function(b){var c,d;b=b||{};for(c in b)d=b[c],d instanceof a&&(b[c]=d.create(this,c));this.data=b},set:function(b,c){var d,e,g=this.data[b];if(c instanceof a&&(c=c.create(this,b)),"object"==typeof b){for(d in b)this.set(d,b[d]);return this}return f(g,c)||(this.data[b]=c,e={target:this,name:b,value:c,oldValue:g},this.fire("change:"+b,e),this.fire("change",e)),this},get:function(a){return this.data[a]},has:function(a){return a in this.data},bind:function(b){return a.create(this,b)},destroy:function(){this.fire("destroy")}})}),g("tinymce.core.ui.Selector",["tinymce.core.util.Class"],function(a){"use strict";function b(a){for(var b,c=[],d=a.length;d--;)b=a[d],b.__checked||(c.push(b),b.__checked=1);for(d=c.length;d--;)delete c[d].__checked;return c}var c,d=/^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,e=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,f=/^\s*|\s*$/g,g=a.extend({init:function(a){function b(a){if(a)return a=a.toLowerCase(),function(b){return"*"===a||b.type===a}}function c(a){if(a)return function(b){return b._name===a}}function g(a){if(a)return a=a.split("."),function(b){for(var c=a.length;c--;)if(!b.classes.contains(a[c]))return!1;return!0}}function h(a,b,c){if(a)return function(d){var e=d[a]?d[a]():"";return b?"="===b?e===c:"*="===b?e.indexOf(c)>=0:"~="===b?(" "+e+" ").indexOf(" "+c+" ")>=0:"!="===b?e!=c:"^="===b?0===e.indexOf(c):"$="===b&&e.substr(e.length-c.length)===c:!!c}}function i(a){var b;if(a)return a=/(?:not\((.+)\))|(.+)/i.exec(a),a[1]?(b=k(a[1],[]),function(a){return!l(a,b)}):(a=a[2],function(b,c,d){return"first"===a?0===c:"last"===a?c===d-1:"even"===a?c%2===0:"odd"===a?c%2===1:!!b[a]&&b[a]()})}function j(a,e,j){function k(a){a&&e.push(a)}var l;return l=d.exec(a.replace(f,"")),k(b(l[1])),k(c(l[2])),k(g(l[3])),k(h(l[4],l[5],l[6])),k(i(l[7])),e.pseudo=!!l[7],e.direct=j,e}function k(a,b){var c,d,f,g=[];do if(e.exec(""),d=e.exec(a),d&&(a=d[3],g.push(d[1]),d[2])){c=d[3];break}while(d);for(c&&k(c,b),a=[],f=0;f<g.length;f++)">"!=g[f]&&a.push(j(g[f],[],">"===g[f-1]));return b.push(a),b}var l=this.match;this._selectors=k(a,[])},match:function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;for(b=b||this._selectors,c=0,d=b.length;c<d;c++){for(g=b[c],f=g.length,o=a,n=0,e=f-1;e>=0;e--)for(j=g[e];o;){if(j.pseudo)for(m=o.parent().items(),k=l=m.length;k--&&m[k]!==o;);for(h=0,i=j.length;h<i;h++)if(!j[h](o,k,l)){h=i+1;break}if(h===i){n++;break}if(e===f-1)break;o=o.parent()}if(n===f)return!0}return!1},find:function(a){function d(a,b,c){var e,f,g,i,j,k=b[c];for(e=0,f=a.length;e<f;e++){for(j=a[e],g=0,i=k.length;g<i;g++)if(!k[g](j,e,f)){g=i+1;break}if(g===i)c==b.length-1?h.push(j):j.items&&d(j.items(),b,c+1);else if(k.direct)return;j.items&&d(j.items(),b,c)}}var e,f,h=[],i=this._selectors;if(a.items){for(e=0,f=i.length;e<f;e++)d(a.items(),i[e],0);f>1&&(h=b(h))}return c||(c=g.Collection),new c(h)}});return g}),g("tinymce.core.ui.Collection",["tinymce.core.util.Tools","tinymce.core.ui.Selector","tinymce.core.util.Class"],function(a,b,c){"use strict";var d,e,f=Array.prototype.push,g=Array.prototype.slice;return e={length:0,init:function(a){a&&this.add(a)},add:function(b){var c=this;return a.isArray(b)?f.apply(c,b):b instanceof d?c.add(b.toArray()):f.call(c,b),c},set:function(a){var b,c=this,d=c.length;for(c.length=0,c.add(a),b=c.length;b<d;b++)delete c[b];return c},filter:function(a){var c,e,f,g,h=this,i=[];for("string"==typeof a?(a=new b(a),g=function(b){return a.match(b)}):g=a,c=0,e=h.length;c<e;c++)f=h[c],g(f)&&i.push(f);return new d(i)},slice:function(){return new d(g.apply(this,arguments))},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},each:function(b){return a.each(this,b),this},toArray:function(){return a.toArray(this)},indexOf:function(a){for(var b=this,c=b.length;c--&&b[c]!==a;);return c},reverse:function(){return new d(a.toArray(this).reverse())},hasClass:function(a){return!!this[0]&&this[0].classes.contains(a)},prop:function(a,b){var c,d,e=this;return b!==c?(e.each(function(c){c[a]&&c[a](b)}),e):(d=e[0],d&&d[a]?d[a]():void 0)},exec:function(b){var c=this,d=a.toArray(arguments).slice(1);return c.each(function(a){a[b]&&a[b].apply(a,d)}),c},remove:function(){for(var a=this.length;a--;)this[a].remove();return this;
-},addClass:function(a){return this.each(function(b){b.classes.add(a)})},removeClass:function(a){return this.each(function(b){b.classes.remove(a)})}},a.each("fire on off show hide append prepend before after reflow".split(" "),function(b){e[b]=function(){var c=a.toArray(arguments);return this.each(function(a){b in a&&a[b].apply(a,c)}),this}}),a.each("text name disabled active selected checked visible parent value data".split(" "),function(a){e[a]=function(b){return this.prop(a,b)}}),d=c.extend(e),b.Collection=d,d}),g("tinymce.core.ui.BoxUtils",[],function(){"use strict";return{parseBox:function(a){var b,c=10;if(a)return"number"==typeof a?(a=a||0,{top:a,left:a,bottom:a,right:a}):(a=a.split(" "),b=a.length,1===b?a[1]=a[2]=a[3]=a[0]:2===b?(a[2]=a[0],a[3]=a[1]):3===b&&(a[3]=a[1]),{top:parseInt(a[0],c)||0,right:parseInt(a[1],c)||0,bottom:parseInt(a[2],c)||0,left:parseInt(a[3],c)||0})},measureBox:function(a,b){function c(b){var c=document.defaultView;return c?(b=b.replace(/[A-Z]/g,function(a){return"-"+a}),c.getComputedStyle(a,null).getPropertyValue(b)):a.currentStyle[b]}function d(a){var b=parseFloat(c(a),10);return isNaN(b)?0:b}return{top:d(b+"TopWidth"),right:d(b+"RightWidth"),bottom:d(b+"BottomWidth"),left:d(b+"LeftWidth")}}}}),g("tinymce.core.ui.ClassList",["tinymce.core.util.Tools"],function(a){"use strict";function b(){}function c(a){this.cls=[],this.cls._map={},this.onchange=a||b,this.prefix=""}return a.extend(c.prototype,{add:function(a){return a&&!this.contains(a)&&(this.cls._map[a]=!0,this.cls.push(a),this._change()),this},remove:function(a){if(this.contains(a)){for(var b=0;b<this.cls.length&&this.cls[b]!==a;b++);this.cls.splice(b,1),delete this.cls._map[a],this._change()}return this},toggle:function(a,b){var c=this.contains(a);return c!==b&&(c?this.remove(a):this.add(a),this._change()),this},contains:function(a){return!!this.cls._map[a]},_change:function(){delete this.clsValue,this.onchange.call(this)}}),c.prototype.toString=function(){var a;if(this.clsValue)return this.clsValue;a="";for(var b=0;b<this.cls.length;b++)b>0&&(a+=" "),a+=this.prefix+this.cls[b];return a},c}),g("tinymce.core.ui.ReflowQueue",["tinymce.core.util.Delay"],function(a){var b,c={};return{add:function(d){var e=d.parent();if(e){if(!e._layout||e._layout.isNative())return;c[e._id]||(c[e._id]=e),b||(b=!0,a.requestAnimationFrame(function(){var a,d;b=!1;for(a in c)d=c[a],d.state.get("rendered")&&d.reflow();c={}},document.body))}},remove:function(a){c[a._id]&&delete c[a._id]}}}),g("tinymce.core.ui.Control",["tinymce.core.util.Class","tinymce.core.util.Tools","tinymce.core.util.EventDispatcher","tinymce.core.data.ObservableObject","tinymce.core.ui.Collection","tinymce.core.ui.DomUtils","tinymce.core.dom.DomQuery","tinymce.core.ui.BoxUtils","tinymce.core.ui.ClassList","tinymce.core.ui.ReflowQueue"],function(a,b,c,d,e,f,g,h,i,j){"use strict";function k(a){return a._eventDispatcher||(a._eventDispatcher=new c({scope:a,toggleEvent:function(b,d){d&&c.isNative(b)&&(a._nativeEvents||(a._nativeEvents={}),a._nativeEvents[b]=!0,a.state.get("rendered")&&l(a))}})),a._eventDispatcher}function l(a){function b(b){var c=a.getParentCtrl(b.target);c&&c.fire(b.type,b)}function c(){var a=j._lastHoverCtrl;a&&(a.fire("mouseleave",{target:a.getEl()}),a.parents().each(function(a){a.fire("mouseleave",{target:a.getEl()})}),j._lastHoverCtrl=null)}function d(b){var c,d,e,f=a.getParentCtrl(b.target),g=j._lastHoverCtrl,h=0;if(f!==g){if(j._lastHoverCtrl=f,d=f.parents().toArray().reverse(),d.push(f),g){for(e=g.parents().toArray().reverse(),e.push(g),h=0;h<e.length&&d[h]===e[h];h++);for(c=e.length-1;c>=h;c--)g=e[c],g.fire("mouseleave",{target:g.getEl()})}for(c=h;c<d.length;c++)f=d[c],f.fire("mouseenter",{target:f.getEl()})}}function e(b){b.preventDefault(),"mousewheel"==b.type?(b.deltaY=-.025*b.wheelDelta,b.wheelDeltaX&&(b.deltaX=-.025*b.wheelDeltaX)):(b.deltaX=0,b.deltaY=b.detail),b=a.fire("wheel",b)}var f,h,i,j,k,l;if(k=a._nativeEvents){for(i=a.parents().toArray(),i.unshift(a),f=0,h=i.length;!j&&f<h;f++)j=i[f]._eventsRoot;for(j||(j=i[i.length-1]||a),a._eventsRoot=j,h=f,f=0;f<h;f++)i[f]._eventsRoot=j;var m=j._delegates;m||(m=j._delegates={});for(l in k){if(!k)return!1;"wheel"!==l||o?("mouseenter"===l||"mouseleave"===l?j._hasMouseEnter||(g(j.getEl()).on("mouseleave",c).on("mouseover",d),j._hasMouseEnter=1):m[l]||(g(j.getEl()).on(l,b),m[l]=!0),k[l]=!1):n?g(a.getEl()).on("mousewheel",e):g(a.getEl()).on("DOMMouseScroll",e)}}}var m,n="onmousewheel"in document,o=!1,p="mce-",q=0,r={Statics:{classPrefix:p},isRtl:function(){return m.rtl},classPrefix:p,init:function(a){function c(a){var b;for(a=a.split(" "),b=0;b<a.length;b++)j.classes.add(a[b])}var e,f,j=this;j.settings=a=b.extend({},j.Defaults,a),j._id=a.id||"mceu_"+q++,j._aria={role:a.role},j._elmCache={},j.$=g,j.state=new d({visible:!0,active:!1,disabled:!1,value:""}),j.data=new d(a.data),j.classes=new i(function(){j.state.get("rendered")&&(j.getEl().className=this.toString())}),j.classes.prefix=j.classPrefix,e=a.classes,e&&(j.Defaults&&(f=j.Defaults.classes,f&&e!=f&&c(f)),c(e)),b.each("title text name visible disabled active value".split(" "),function(b){b in a&&j[b](a[b])}),j.on("click",function(){if(j.disabled())return!1}),j.settings=a,j.borderBox=h.parseBox(a.border),j.paddingBox=h.parseBox(a.padding),j.marginBox=h.parseBox(a.margin),a.hidden&&j.hide()},Properties:"parent,name",getContainerElm:function(){return f.getContainer()},getParentCtrl:function(a){for(var b,c=this.getRoot().controlIdLookup;a&&c&&!(b=c[a.id]);)a=a.parentNode;return b},initLayoutRect:function(){var a,b,c,d,e,g,i,j,k,l,m=this,n=m.settings,o=m.getEl();a=m.borderBox=m.borderBox||h.measureBox(o,"border"),m.paddingBox=m.paddingBox||h.measureBox(o,"padding"),m.marginBox=m.marginBox||h.measureBox(o,"margin"),l=f.getSize(o),j=n.minWidth,k=n.minHeight,e=j||l.width,g=k||l.height,c=n.width,d=n.height,i=n.autoResize,i="undefined"!=typeof i?i:!c&&!d,c=c||e,d=d||g;var p=a.left+a.right,q=a.top+a.bottom,r=n.maxWidth||65535,s=n.maxHeight||65535;return m._layoutRect=b={x:n.x||0,y:n.y||0,w:c,h:d,deltaW:p,deltaH:q,contentW:c-p,contentH:d-q,innerW:c-p,innerH:d-q,startMinWidth:j||0,startMinHeight:k||0,minW:Math.min(e,r),minH:Math.min(g,s),maxW:r,maxH:s,autoResize:i,scrollW:0},m._lastLayoutRect={},b},layoutRect:function(a){var b,c,d,e,f,g,h=this,i=h._layoutRect;return i||(i=h.initLayoutRect()),a?(d=i.deltaW,e=i.deltaH,a.x!==f&&(i.x=a.x),a.y!==f&&(i.y=a.y),a.minW!==f&&(i.minW=a.minW),a.minH!==f&&(i.minH=a.minH),c=a.w,c!==f&&(c=c<i.minW?i.minW:c,c=c>i.maxW?i.maxW:c,i.w=c,i.innerW=c-d),c=a.h,c!==f&&(c=c<i.minH?i.minH:c,c=c>i.maxH?i.maxH:c,i.h=c,i.innerH=c-e),c=a.innerW,c!==f&&(c=c<i.minW-d?i.minW-d:c,c=c>i.maxW-d?i.maxW-d:c,i.innerW=c,i.w=c+d),c=a.innerH,c!==f&&(c=c<i.minH-e?i.minH-e:c,c=c>i.maxH-e?i.maxH-e:c,i.innerH=c,i.h=c+e),a.contentW!==f&&(i.contentW=a.contentW),a.contentH!==f&&(i.contentH=a.contentH),b=h._lastLayoutRect,b.x===i.x&&b.y===i.y&&b.w===i.w&&b.h===i.h||(g=m.repaintControls,g&&g.map&&!g.map[h._id]&&(g.push(h),g.map[h._id]=!0),b.x=i.x,b.y=i.y,b.w=i.w,b.h=i.h),h):i},repaint:function(){var a,b,c,d,e,f,g,h,i,j,k=this;i=document.createRange?function(a){return a}:Math.round,a=k.getEl().style,d=k._layoutRect,h=k._lastRepaintRect||{},e=k.borderBox,f=e.left+e.right,g=e.top+e.bottom,d.x!==h.x&&(a.left=i(d.x)+"px",h.x=d.x),d.y!==h.y&&(a.top=i(d.y)+"px",h.y=d.y),d.w!==h.w&&(j=i(d.w-f),a.width=(j>=0?j:0)+"px",h.w=d.w),d.h!==h.h&&(j=i(d.h-g),a.height=(j>=0?j:0)+"px",h.h=d.h),k._hasBody&&d.innerW!==h.innerW&&(j=i(d.innerW),c=k.getEl("body"),c&&(b=c.style,b.width=(j>=0?j:0)+"px"),h.innerW=d.innerW),k._hasBody&&d.innerH!==h.innerH&&(j=i(d.innerH),c=c||k.getEl("body"),c&&(b=b||c.style,b.height=(j>=0?j:0)+"px"),h.innerH=d.innerH),k._lastRepaintRect=h,k.fire("repaint",{},!1)},updateLayoutRect:function(){var a=this;a.parent()._lastRect=null,f.css(a.getEl(),{width:"",height:""}),a._layoutRect=a._lastRepaintRect=a._lastLayoutRect=null,a.initLayoutRect()},on:function(a,b){function c(a){var b,c;return"string"!=typeof a?a:function(e){return b||d.parentsAndSelf().each(function(d){var e=d.settings.callbacks;if(e&&(b=e[a]))return c=d,!1}),b?b.call(c,e):(e.action=a,void this.fire("execute",e))}}var d=this;return k(d).on(a,c(b)),d},off:function(a,b){return k(this).off(a,b),this},fire:function(a,b,c){var d=this;if(b=b||{},b.control||(b.control=d),b=k(d).fire(a,b),c!==!1&&d.parent)for(var e=d.parent();e&&!b.isPropagationStopped();)e.fire(a,b,!1),e=e.parent();return b},hasEventListeners:function(a){return k(this).has(a)},parents:function(a){var b,c=this,d=new e;for(b=c.parent();b;b=b.parent())d.add(b);return a&&(d=d.filter(a)),d},parentsAndSelf:function(a){return new e(this).add(this.parents(a))},next:function(){var a=this.parent().items();return a[a.indexOf(this)+1]},prev:function(){var a=this.parent().items();return a[a.indexOf(this)-1]},innerHtml:function(a){return this.$el.html(a),this},getEl:function(a){var b=a?this._id+"-"+a:this._id;return this._elmCache[b]||(this._elmCache[b]=g("#"+b)[0]),this._elmCache[b]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(a){}return this},blur:function(){return this.getEl().blur(),this},aria:function(a,b){var c=this,d=c.getEl(c.ariaTarget);return"undefined"==typeof b?c._aria[a]:(c._aria[a]=b,c.state.get("rendered")&&d.setAttribute("role"==a?a:"aria-"+a,b),c)},encode:function(a,b){return b!==!1&&(a=this.translate(a)),(a||"").replace(/[&<>"]/g,function(a){return"&#"+a.charCodeAt(0)+";"})},translate:function(a){return m.translate?m.translate(a):a},before:function(a){var b=this,c=b.parent();return c&&c.insert(a,c.items().indexOf(b),!0),b},after:function(a){var b=this,c=b.parent();return c&&c.insert(a,c.items().indexOf(b)),b},remove:function(){var a,b,c=this,d=c.getEl(),e=c.parent();if(c.items){var f=c.items().toArray();for(b=f.length;b--;)f[b].remove()}e&&e.items&&(a=[],e.items().each(function(b){b!==c&&a.push(b)}),e.items().set(a),e._lastRect=null),c._eventsRoot&&c._eventsRoot==c&&g(d).off();var h=c.getRoot().controlIdLookup;return h&&delete h[c._id],d&&d.parentNode&&d.parentNode.removeChild(d),c.state.set("rendered",!1),c.state.destroy(),c.fire("remove"),c},renderBefore:function(a){return g(a).before(this.renderHtml()),this.postRender(),this},renderTo:function(a){return g(a||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return'<div id="'+this._id+'" class="'+this.classes+'"></div>'},postRender:function(){var a,b,c,d,e,f=this,h=f.settings;f.$el=g(f.getEl()),f.state.set("rendered",!0);for(d in h)0===d.indexOf("on")&&f.on(d.substr(2),h[d]);if(f._eventsRoot){for(c=f.parent();!e&&c;c=c.parent())e=c._eventsRoot;if(e)for(d in e._nativeEvents)f._nativeEvents[d]=!0}l(f),h.style&&(a=f.getEl(),a&&(a.setAttribute("style",h.style),a.style.cssText=h.style)),f.settings.border&&(b=f.borderBox,f.$el.css({"border-top-width":b.top,"border-right-width":b.right,"border-bottom-width":b.bottom,"border-left-width":b.left}));var i=f.getRoot();i.controlIdLookup||(i.controlIdLookup={}),i.controlIdLookup[f._id]=f;for(var k in f._aria)f.aria(k,f._aria[k]);f.state.get("visible")===!1&&(f.getEl().style.display="none"),f.bindStates(),f.state.on("change:visible",function(a){var b,c=a.value;f.state.get("rendered")&&(f.getEl().style.display=c===!1?"none":"",f.getEl().getBoundingClientRect()),b=f.parent(),b&&(b._lastRect=null),f.fire(c?"show":"hide"),j.add(f)}),f.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(a){function b(a,b){var c,d,e=a;for(c=d=0;e&&e!=b&&e.nodeType;)c+=e.offsetLeft||0,d+=e.offsetTop||0,e=e.offsetParent;return{x:c,y:d}}var c,d,e,f,g,h,i=this.getEl(),j=i.parentNode,k=b(i,j);return c=k.x,d=k.y,e=i.offsetWidth,f=i.offsetHeight,g=j.clientWidth,h=j.clientHeight,"end"==a?(c-=g-e,d-=h-f):"center"==a&&(c-=g/2-e/2,d-=h/2-f/2),j.scrollLeft=c,j.scrollTop=d,this},getRoot:function(){for(var a,b=this,c=[];b;){if(b.rootControl){a=b.rootControl;break}c.push(b),a=b,b=b.parent()}a||(a=this);for(var d=c.length;d--;)c[d].rootControl=a;return a},reflow:function(){j.remove(this);var a=this.parent();return a&&a._layout&&!a._layout.isNative()&&a.reflow(),this}};return b.each("text title visible disabled active value".split(" "),function(a){r[a]=function(b){return 0===arguments.length?this.state.get(a):("undefined"!=typeof b&&this.state.set(a,b),this)}}),m=a.extend(r)}),g("tinymce.core.ui.Movable",["tinymce.core.ui.DomUtils"],function(a){"use strict";function b(b,c,d){var e,f,g,h,i,j,k,l,m,n;return m=a.getViewPort(),f=a.getPos(c),g=f.x,h=f.y,b.state.get("fixed")&&"static"==a.getRuntimeStyle(document.body,"position")&&(g-=m.x,h-=m.y),e=b.getEl(),n=a.getSize(e),i=n.width,j=n.height,n=a.getSize(c),k=n.width,l=n.height,d=(d||"").split(""),"b"===d[0]&&(h+=l),"r"===d[1]&&(g+=k),"c"===d[0]&&(h+=Math.round(l/2)),"c"===d[1]&&(g+=Math.round(k/2)),"b"===d[3]&&(h-=j),"r"===d[4]&&(g-=i),"c"===d[3]&&(h-=Math.round(j/2)),"c"===d[4]&&(g-=Math.round(i/2)),{x:g,y:h,w:i,h:j}}return{testMoveRel:function(c,d){for(var e=a.getViewPort(),f=0;f<d.length;f++){var g=b(this,c,d[f]);if(this.state.get("fixed")){if(g.x>0&&g.x+g.w<e.w&&g.y>0&&g.y+g.h<e.h)return d[f]}else if(g.x>e.x&&g.x+g.w<e.w+e.x&&g.y>e.y&&g.y+g.h<e.h+e.y)return d[f]}return d[0]},moveRel:function(a,c){"string"!=typeof c&&(c=this.testMoveRel(a,c));var d=b(this,a,c);return this.moveTo(d.x,d.y)},moveBy:function(a,b){var c=this,d=c.layoutRect();return c.moveTo(d.x+a,d.y+b),c},moveTo:function(b,c){function d(a,b,c){return a<0?0:a+c>b?(a=b-c,a<0?0:a):a}var e=this;if(e.settings.constrainToViewport){var f=a.getViewPort(window),g=e.layoutRect();b=d(b,f.w+f.x,g.w),c=d(c,f.h+f.y,g.h)}return e.state.get("rendered")?e.layoutRect({x:b,y:c}).repaint():(e.settings.x=b,e.settings.y=c),e.fire("move",{x:b,y:c}),e}}}),g("tinymce.core.ui.Tooltip",["tinymce.core.ui.Control","tinymce.core.ui.Movable"],function(a,b){return a.extend({Mixins:[b],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var a=this,b=a.classPrefix;return'<div id="'+a._id+'" class="'+a.classes+'" role="presentation"><div class="'+b+'tooltip-arrow"></div><div class="'+b+'tooltip-inner">'+a.encode(a.state.get("text"))+"</div></div>"},bindStates:function(){var a=this;return a.state.on("change:text",function(b){a.getEl().lastChild.innerHTML=a.encode(b.value)}),a._super()},repaint:function(){var a,b,c=this;a=c.getEl().style,b=c._layoutRect,a.left=b.x+"px",a.top=b.y+"px",a.zIndex=131070}})}),g("tinymce.core.ui.Widget",["tinymce.core.ui.Control","tinymce.core.ui.Tooltip"],function(a,b){"use strict";var c,d=a.extend({init:function(a){var b=this;b._super(a),a=b.settings,b.canFocus=!0,a.tooltip&&d.tooltips!==!1&&(b.on("mouseenter",function(c){var d=b.tooltip().moveTo(-65535);if(c.control==b){var e=d.text(a.tooltip).show().testMoveRel(b.getEl(),["bc-tc","bc-tl","bc-tr"]);d.classes.toggle("tooltip-n","bc-tc"==e),d.classes.toggle("tooltip-nw","bc-tl"==e),d.classes.toggle("tooltip-ne","bc-tr"==e),d.moveRel(b.getEl(),e)}else d.hide()}),b.on("mouseleave mousedown click",function(){b.tooltip().hide()})),b.aria("label",a.ariaLabel||a.tooltip)},tooltip:function(){return c||(c=new b({type:"tooltip"}),c.renderTo()),c},postRender:function(){var a=this,b=a.settings;a._super(),a.parent()||!b.width&&!b.height||(a.initLayoutRect(),a.repaint()),b.autofocus&&a.focus()},bindStates:function(){function a(a){c.aria("disabled",a),c.classes.toggle("disabled",a)}function b(a){c.aria("pressed",a),c.classes.toggle("active",a)}var c=this;return c.state.on("change:disabled",function(b){a(b.value)}),c.state.on("change:active",function(a){b(a.value)}),c.state.get("disabled")&&a(!0),c.state.get("active")&&b(!0),c._super()},remove:function(){this._super(),c&&(c.remove(),c=null)}});return d}),g("tinymce.core.ui.Progress",["tinymce.core.ui.Widget"],function(a){"use strict";return a.extend({Defaults:{value:0},init:function(a){var b=this;b._super(a),b.classes.add("progress"),b.settings.filter||(b.settings.filter=function(a){return Math.round(a)})},renderHtml:function(){var a=this,b=a._id,c=this.classPrefix;return'<div id="'+b+'" class="'+a.classes+'"><div class="'+c+'bar-container"><div class="'+c+'bar"></div></div><div class="'+c+'text">0%</div></div>'},postRender:function(){var a=this;return a._super(),a.value(a.settings.value),a},bindStates:function(){function a(a){a=b.settings.filter(a),b.getEl().lastChild.innerHTML=a+"%",b.getEl().firstChild.firstChild.style.width=a+"%"}var b=this;return b.state.on("change:value",function(b){a(b.value)}),a(b.state.get("value")),b._super()}})}),g("tinymce.core.ui.Notification",["tinymce.core.ui.Control","tinymce.core.ui.Movable","tinymce.core.ui.Progress","tinymce.core.util.Delay"],function(a,b,c,d){var e=function(a,b){a.getEl().lastChild.textContent=b+(a.progressBar?" "+a.progressBar.value()+"%":"")};return a.extend({Mixins:[b],Defaults:{classes:"widget notification"},init:function(a){var b=this;b._super(a),b.maxWidth=a.maxWidth,a.text&&b.text(a.text),a.icon&&(b.icon=a.icon),a.color&&(b.color=a.color),a.type&&b.classes.add("notification-"+a.type),a.timeout&&(a.timeout<0||a.timeout>0)&&!a.closeButton?b.closeButton=!1:(b.classes.add("has-close"),b.closeButton=!0),a.progressBar&&(b.progressBar=new c),b.on("click",function(a){a.target.className.indexOf(b.classPrefix+"close")!=-1&&b.close()})},renderHtml:function(){var a=this,b=a.classPrefix,c="",d="",e="",f="";return a.icon&&(c='<i class="'+b+"ico "+b+"i-"+a.icon+'"></i>'),f=' style="max-width: '+a.maxWidth+"px;"+(a.color?"background-color: "+a.color+';"':'"'),a.closeButton&&(d='<button type="button" class="'+b+'close" aria-hidden="true">\xd7</button>'),a.progressBar&&(e=a.progressBar.renderHtml()),'<div id="'+a._id+'" class="'+a.classes+'"'+f+' role="presentation">'+c+'<div class="'+b+'notification-inner">'+a.state.get("text")+"</div>"+e+d+'<div style="clip: rect(1px, 1px, 1px, 1px);height: 1px;overflow: hidden;position: absolute;width: 1px;" aria-live="assertive" aria-relevant="additions" aria-atomic="true"></div></div>'},postRender:function(){var a=this;return d.setTimeout(function(){a.$el.addClass(a.classPrefix+"in"),e(a,a.state.get("text"))},100),a._super()},bindStates:function(){var a=this;return a.state.on("change:text",function(b){a.getEl().firstChild.innerHTML=b.value,e(a,b.value)}),a.progressBar&&(a.progressBar.bindStates(),a.progressBar.state.on("change:value",function(b){e(a,a.state.get("text"))})),a._super()},close:function(){var a=this;return a.fire("close").isDefaultPrevented()||a.remove(),a},repaint:function(){var a,b,c=this;a=c.getEl().style,b=c._layoutRect,a.left=b.x+"px",a.top=b.y+"px",a.zIndex=65534}})}),g("tinymce.core.ui.NotificationManagerImpl",["ephox.katamari.api.Arr","tinymce.core.ui.DomUtils","tinymce.core.ui.Notification","tinymce.core.util.Tools"],function(a,b,c,d){return function(e){var f=function(a){return a.inline?a.getElement():a.getContentAreaContainer()},g=function(){var a=f(e);return b.getSize(a).width},h=function(b){a.each(b,function(a){a.moveTo(0,0)})},i=function(b){if(b.length>0){var c=b.slice(0,1)[0],d=f(e);c.moveRel(d,"tc-tc"),a.each(b,function(a,c){c>0&&a.moveRel(b[c-1].getEl(),"bc-tc")})}},j=function(a){h(a),i(a)},k=function(a,b){var e=d.extend(a,{maxWidth:g()}),f=new c(e);return f.args=e,e.timeout>0&&(f.timer=setTimeout(function(){f.close(),b()},e.timeout)),f.on("close",function(){b()}),f.renderTo(),f},l=function(a){a.close()},m=function(a){return a.args};return{open:k,close:l,reposition:j,getArgs:m}}}),g("tinymce.core.api.NotificationManager",["ephox.katamari.api.Arr","ephox.katamari.api.Option","tinymce.core.EditorView","tinymce.core.ui.NotificationManagerImpl","tinymce.core.util.Delay"],function(a,b,c,d,e){return function(f){var g=[],h=function(){var a=f.theme;return a&&a.getNotificationManagerImpl?a.getNotificationManagerImpl():d(f)},i=function(){return b.from(g[0])},j=function(a,b){return!(a.type!==b.type||a.text!==b.text||a.progressBar||a.timeout||b.progressBar||b.timeout)},k=function(){g.length>0&&h().reposition(g)},l=function(a){g.push(a)},m=function(b){a.findIndex(g,function(a){return a===b}).each(function(a){g.splice(a,1)})},n=function(b){if(!f.removed&&c.isEditorAttachedToDom(f))return a.find(g,function(a){return j(h().getArgs(a),b)}).getOrThunk(function(){f.editorManager.setActive(f);var a=h().open(b,function(){m(a),k()});return l(a),k(),a})},o=function(){i().each(function(a){h().close(a),m(a),k()})},p=function(){return g},q=function(b){b.on("SkinLoaded",function(){var a=b.settings.service_message;a&&n({text:a,type:"warning",timeout:0,icon:""})}),b.on("ResizeEditor ResizeWindow",function(){e.requestAnimationFrame(k)}),b.on("remove",function(){a.each(g,function(a){h().close(a)})})};return q(f),{open:n,close:o,getNotifications:p}}}),g("tinymce.core.ui.Factory",[],function(){"use strict";var a={};return{add:function(b,c){a[b.toLowerCase()]=c},has:function(b){return!!a[b.toLowerCase()]},get:function(b){var c=b.toLowerCase(),d=a.hasOwnProperty(c)?a[c]:null;if(null===d)throw new Error("Could not find module for type: "+b);return d},create:function(b,c){var d;if("string"==typeof b?(c=c||{},c.type=b):(c=b,b=c.type),b=b.toLowerCase(),d=a[b],!d)throw new Error("Could not find control by type: "+b);return d=new d(c),d.type=b,d}}}),g("tinymce.core.ui.KeyboardNavigation",[],function(){"use strict";var a=function(a){return!!a.getAttribute("data-mce-tabstop")};return function(b){function c(a){return a&&1===a.nodeType}function d(a){return a=a||u,c(a)?a.getAttribute("role"):null}function e(a){for(var b,c=a||u;c=c.parentNode;)if(b=d(c))return b}function f(a){var b=u;if(c(b))return b.getAttribute("aria-"+a)}function g(a){var b=a.tagName.toUpperCase();return"INPUT"==b||"TEXTAREA"==b||"SELECT"==b}function h(b){return!(!g(b)||b.hidden)||(!!a(b)||!!/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(d(b)))}function i(a){function b(a){if(1==a.nodeType&&"none"!=a.style.display&&!a.disabled){h(a)&&c.push(a);for(var d=0;d<a.childNodes.length;d++)b(a.childNodes[d])}}var c=[];return b(a||w.getEl()),c}function j(a){var b,c;a=a||v,c=a.parents().toArray(),c.unshift(a);for(var d=0;d<c.length&&(b=c[d],!b.settings.ariaRoot);d++);return b}function k(a){var b=j(a),c=i(b.getEl());b.settings.ariaRemember&&"lastAriaIndex"in b?l(b.lastAriaIndex,c):l(0,c)}function l(a,b){return a<0?a=b.length-1:a>=b.length&&(a=0),b[a]&&b[a].focus(),a}function m(a,b){var c=-1,d=j();b=b||i(d.getEl());for(var e=0;e<b.length;e++)b[e]===u&&(c=e);c+=a,d.lastAriaIndex=l(c,b)}function n(){var a=e();"tablist"==a?m(-1,i(u.parentNode)):v.parent().submenu?s():m(-1)}function o(){var a=d(),b=e();"tablist"==b?m(1,i(u.parentNode)):"menuitem"==a&&"menu"==b&&f("haspopup")?t():m(1)}function p(){m(-1)}function q(){var a=d(),b=e();"menuitem"==a&&"menubar"==b?t():"button"==a&&f("haspopup")?t({key:"down"}):m(1)}function r(a){var b=e();if("tablist"==b){var c=i(v.getEl("body"))[0];c&&c.focus()}else m(a.shiftKey?-1:1)}function s(){v.fire("cancel")}function t(a){a=a||{},v.fire("click",{target:u,aria:a})}var u,v,w=b.root;try{u=document.activeElement}catch(x){u=document.body}return v=w.getParentCtrl(u),w.on("keydown",function(b){function c(b,c){g(u)||a(u)||"slider"!==d(u)&&c(b)!==!1&&b.preventDefault()}if(!b.isDefaultPrevented())switch(b.keyCode){case 37:c(b,n);break;case 39:c(b,o);break;case 38:c(b,p);break;case 40:c(b,q);break;case 27:s();break;case 14:case 13:case 32:c(b,t);break;case 9:r(b)!==!1&&b.preventDefault()}}),w.on("focusin",function(a){u=a.target,v=a.control}),{focusFirst:k}}}),g("tinymce.core.ui.Container",["tinymce.core.ui.Control","tinymce.core.ui.Collection","tinymce.core.ui.Selector","tinymce.core.ui.Factory","tinymce.core.ui.KeyboardNavigation","tinymce.core.util.Tools","tinymce.core.dom.DomQuery","tinymce.core.ui.ClassList","tinymce.core.ui.ReflowQueue"],function(a,b,c,d,e,f,g,h,i){"use strict";var j={};return a.extend({init:function(a){var c=this;c._super(a),a=c.settings,a.fixed&&c.state.set("fixed",!0),c._items=new b,c.isRtl()&&c.classes.add("rtl"),c.bodyClasses=new h(function(){c.state.get("rendered")&&(c.getEl("body").className=this.toString())}),c.bodyClasses.prefix=c.classPrefix,c.classes.add("container"),c.bodyClasses.add("container-body"),a.containerCls&&c.classes.add(a.containerCls),c._layout=d.create((a.layout||"")+"layout"),c.settings.items?c.add(c.settings.items):c.add(c.render()),c._hasBody=!0},items:function(){return this._items},find:function(a){return a=j[a]=j[a]||new c(a),a.find(this)},add:function(a){var b=this;return b.items().add(b.create(a)).parent(b),b},focus:function(a){var b,c,d,e=this;return a&&(c=e.keyboardNav||e.parents().eq(-1)[0].keyboardNav)?void c.focusFirst(e):(d=e.find("*"),e.statusbar&&d.add(e.statusbar.items()),d.each(function(a){return a.settings.autofocus?(b=null,!1):void(a.canFocus&&(b=b||a))}),b&&b.focus(),e)},replace:function(a,b){for(var c,d=this.items(),e=d.length;e--;)if(d[e]===a){d[e]=b;break}e>=0&&(c=b.getEl(),c&&c.parentNode.removeChild(c),c=a.getEl(),c&&c.parentNode.removeChild(c)),b.parent(this)},create:function(b){var c,e=this,g=[];return f.isArray(b)||(b=[b]),f.each(b,function(b){b&&(b instanceof a||("string"==typeof b&&(b={type:b}),c=f.extend({},e.settings.defaults,b),b.type=c.type=c.type||b.type||e.settings.defaultType||(c.defaults?c.defaults.type:null),b=d.create(c)),g.push(b))}),g},renderNew:function(){var a=this;return a.items().each(function(b,c){var d;b.parent(a),b.state.get("rendered")||(d=a.getEl("body"),d.hasChildNodes()&&c<=d.childNodes.length-1?g(d.childNodes[c]).before(b.renderHtml()):g(d).append(b.renderHtml()),b.postRender(),i.add(b))}),a._layout.applyClasses(a.items().filter(":visible")),a._lastRect=null,a},append:function(a){return this.add(a).renderNew()},prepend:function(a){var b=this;return b.items().set(b.create(a).concat(b.items().toArray())),b.renderNew()},insert:function(a,b,c){var d,e,f,g=this;return a=g.create(a),d=g.items(),!c&&b<d.length-1&&(b+=1),b>=0&&b<d.length&&(e=d.slice(0,b).toArray(),f=d.slice(b).toArray(),d.set(e.concat(a,f))),g.renderNew()},fromJSON:function(a){var b=this;for(var c in a)b.find("#"+c).value(a[c]);return b},toJSON:function(){var a=this,b={};return a.find("*").each(function(a){var c=a.name(),d=a.value();c&&"undefined"!=typeof d&&(b[c]=d)}),b},renderHtml:function(){var a=this,b=a._layout,c=this.settings.role;return a.preRender(),b.preRender(a),'<div id="'+a._id+'" class="'+a.classes+'"'+(c?' role="'+this.settings.role+'"':"")+'><div id="'+a._id+'-body" class="'+a.bodyClasses+'">'+(a.settings.html||"")+b.renderHtml(a)+"</div></div>"},postRender:function(){var a,b=this;return b.items().exec("postRender"),b._super(),b._layout.postRender(b),b.state.set("rendered",!0),b.settings.style&&b.$el.css(b.settings.style),b.settings.border&&(a=b.borderBox,b.$el.css({"border-top-width":a.top,"border-right-width":a.right,"border-bottom-width":a.bottom,"border-left-width":a.left})),b.parent()||(b.keyboardNav=new e({root:b})),b},initLayoutRect:function(){var a=this,b=a._super();return a._layout.recalc(a),b},recalc:function(){var a=this,b=a._layoutRect,c=a._lastRect;if(!c||c.w!=b.w||c.h!=b.h)return a._layout.recalc(a),b=a.layoutRect(),a._lastRect={x:b.x,y:b.y,w:b.w,h:b.h},!0},reflow:function(){var b;if(i.remove(this),this.visible()){for(a.repaintControls=[],a.repaintControls.map={},this.recalc(),b=a.repaintControls.length;b--;)a.repaintControls[b].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),a.repaintControls=[]}return this}})}),g("tinymce.core.ui.DragHelper",["tinymce.core.dom.DomQuery"],function(a){"use strict";function b(a){var b,c,d,e,f,g,h,i,j=Math.max;return b=a.documentElement,c=a.body,d=j(b.scrollWidth,c.scrollWidth),e=j(b.clientWidth,c.clientWidth),f=j(b.offsetWidth,c.offsetWidth),g=j(b.scrollHeight,c.scrollHeight),h=j(b.clientHeight,c.clientHeight),i=j(b.offsetHeight,c.offsetHeight),{width:d<f?e:d,height:g<i?h:g}}function c(a){var b,c;if(a.changedTouches)for(b="screenX screenY pageX pageY clientX clientY".split(" "),c=0;c<b.length;c++)a[b[c]]=a.changedTouches[0][b[c]]}return function(d,e){function f(){return n.getElementById(e.handle||d)}var g,h,i,j,k,l,m,n=e.document||document;e=e||{},i=function(d){var i,o,p=b(n);c(d),d.preventDefault(),h=d.button,i=f(),l=d.screenX,m=d.screenY,o=window.getComputedStyle?window.getComputedStyle(i,null).getPropertyValue("cursor"):i.runtimeStyle.cursor,g=a("<div></div>").css({position:"absolute",top:0,left:0,width:p.width,height:p.height,zIndex:2147483647,opacity:1e-4,cursor:o}).appendTo(n.body),a(n).on("mousemove touchmove",k).on("mouseup touchend",j),e.start(d)},k=function(a){return c(a),a.button!==h?j(a):(a.deltaX=a.screenX-l,a.deltaY=a.screenY-m,a.preventDefault(),void e.drag(a))},j=function(b){c(b),a(n).off("mousemove touchmove",k).off("mouseup touchend",j),g.remove(),e.stop&&e.stop(b)},this.destroy=function(){a(f()).off()},a(f()).on("mousedown touchstart",i)}}),g("tinymce.core.ui.Scrollable",["tinymce.core.dom.DomQuery","tinymce.core.ui.DragHelper"],function(a,b){"use strict";return{init:function(){var a=this;a.on("repaint",a.renderScroll)},renderScroll:function(){function c(){function b(b,g,h,i,j,k){var l,m,n,o,p,q,r,s,t;if(m=e.getEl("scroll"+b)){if(s=g.toLowerCase(),t=h.toLowerCase(),a(e.getEl("absend")).css(s,e.layoutRect()[i]-1),!j)return void a(m).css("display","none");a(m).css("display","block"),l=e.getEl("body"),n=e.getEl("scroll"+b+"t"),o=l["client"+h]-2*f,o-=c&&d?m["client"+k]:0,p=l["scroll"+h],q=o/p,r={},r[s]=l["offset"+g]+f,r[t]=o,a(m).css(r),r={},r[s]=l["scroll"+g]*q,r[t]=o*q,a(n).css(r)}}var c,d,g;g=e.getEl("body"),c=g.scrollWidth>g.clientWidth,d=g.scrollHeight>g.clientHeight,b("h","Left","Width","contentW",c,"Height"),b("v","Top","Height","contentH",d,"Width")}function d(){function c(c,d,g,h,i){var j,k=e._id+"-scroll"+c,l=e.classPrefix;a(e.getEl()).append('<div id="'+k+'" class="'+l+"scrollbar "+l+"scrollbar-"+c+'"><div id="'+k+'t" class="'+l+'scrollbar-thumb"></div></div>'),e.draghelper=new b(k+"t",{start:function(){j=e.getEl("body")["scroll"+d],a("#"+k).addClass(l+"active")},drag:function(a){var b,k,l,m,n=e.layoutRect();k=n.contentW>n.innerW,l=n.contentH>n.innerH,m=e.getEl("body")["client"+g]-2*f,m-=k&&l?e.getEl("scroll"+c)["client"+i]:0,b=m/e.getEl("body")["scroll"+g],e.getEl("body")["scroll"+d]=j+a["delta"+h]/b},stop:function(){a("#"+k).removeClass(l+"active")}})}e.classes.add("scroll"),c("v","Top","Height","Y","Width"),c("h","Left","Width","X","Height")}var e=this,f=2;e.settings.autoScroll&&(e._hasScroll||(e._hasScroll=!0,d(),e.on("wheel",function(a){var b=e.getEl("body");b.scrollLeft+=10*(a.deltaX||0),b.scrollTop+=10*a.deltaY,c()}),a(e.getEl("body")).on("scroll",c)),c())}}}),g("tinymce.core.ui.Panel",["tinymce.core.ui.Container","tinymce.core.ui.Scrollable"],function(a,b){"use strict";return a.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[b],renderHtml:function(){var a=this,b=a._layout,c=a.settings.html;return a.preRender(),b.preRender(a),"undefined"==typeof c?c='<div id="'+a._id+'-body" class="'+a.bodyClasses+'">'+b.renderHtml(a)+"</div>":("function"==typeof c&&(c=c.call(a)),a._hasBody=!1),'<div id="'+a._id+'" class="'+a.classes+'" hidefocus="1" tabindex="-1" role="group">'+(a._preBodyHtml||"")+c+"</div>"}})}),g("tinymce.core.ui.Resizable",["tinymce.core.ui.DomUtils"],function(a){"use strict";return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(b,c){if(b<=1||c<=1){var d=a.getWindowSize();b=b<=1?b*d.w:b,c=c<=1?c*d.h:c}return this._layoutRect.autoResize=!1,this.layoutRect({minW:b,minH:c,w:b,h:c}).reflow()},resizeBy:function(a,b){var c=this,d=c.layoutRect();return c.resizeTo(d.w+a,d.h+b)}}}),g("tinymce.core.ui.FloatPanel",["tinymce.core.ui.Panel","tinymce.core.ui.Movable","tinymce.core.ui.Resizable","tinymce.core.ui.DomUtils","tinymce.core.dom.DomQuery","tinymce.core.util.Delay"],function(a,b,c,d,e,f){"use strict";function g(a,b){for(;a;){if(a==b)return!0;a=a.parent()}}function h(a){for(var b=s.length;b--;){var c=s[b],d=c.getParentCtrl(a.target);if(c.settings.autohide){
-if(d&&(g(d,c)||c.parent()===d))continue;a=c.fire("autohide",{target:a.target}),a.isDefaultPrevented()||c.hide()}}}function i(){o||(o=function(a){2!=a.button&&h(a)},e(document).on("click touchstart",o))}function j(){p||(p=function(){var a;for(a=s.length;a--;)l(s[a])},e(window).on("scroll",p))}function k(){if(!q){var a=document.documentElement,b=a.clientWidth,c=a.clientHeight;q=function(){document.all&&b==a.clientWidth&&c==a.clientHeight||(b=a.clientWidth,c=a.clientHeight,u.hideAll())},e(window).on("resize",q)}}function l(a){function b(b,c){for(var d,e=0;e<s.length;e++)if(s[e]!=a)for(d=s[e].parent();d&&(d=d.parent());)d==a&&s[e].fixed(b).moveBy(0,c).repaint()}var c=d.getViewPort().y;a.settings.autofix&&(a.state.get("fixed")?a._autoFixY>c&&(a.fixed(!1).layoutRect({y:a._autoFixY}).repaint(),b(!1,a._autoFixY-c)):(a._autoFixY=a.layoutRect().y,a._autoFixY<c&&(a.fixed(!0).layoutRect({y:0}).repaint(),b(!0,c-a._autoFixY))))}function m(a,b){var c,d,f=u.zIndex||65535;if(a)t.push(b);else for(c=t.length;c--;)t[c]===b&&t.splice(c,1);if(t.length)for(c=0;c<t.length;c++)t[c].modal&&(f++,d=t[c]),t[c].getEl().style.zIndex=f,t[c].zIndex=f,f++;var g=e("#"+b.classPrefix+"modal-block",b.getContainerElm())[0];d?e(g).css("z-index",d.zIndex-1):g&&(g.parentNode.removeChild(g),r=!1),u.currentZIndex=f}function n(a){var b;for(b=s.length;b--;)s[b]===a&&s.splice(b,1);for(b=t.length;b--;)t[b]===a&&t.splice(b,1)}var o,p,q,r,s=[],t=[],u=a.extend({Mixins:[b,c],init:function(a){var b=this;b._super(a),b._eventsRoot=b,b.classes.add("floatpanel"),a.autohide&&(i(),k(),s.push(b)),a.autofix&&(j(),b.on("move",function(){l(this)})),b.on("postrender show",function(a){if(a.control==b){var c,d=b.classPrefix;b.modal&&!r&&(c=e("#"+d+"modal-block",b.getContainerElm()),c[0]||(c=e('<div id="'+d+'modal-block" class="'+d+"reset "+d+'fade"></div>').appendTo(b.getContainerElm())),f.setTimeout(function(){c.addClass(d+"in"),e(b.getEl()).addClass(d+"in")}),r=!0),m(!0,b)}}),b.on("show",function(){b.parents().each(function(a){if(a.state.get("fixed"))return b.fixed(!0),!1})}),a.popover&&(b._preBodyHtml='<div class="'+b.classPrefix+'arrow"></div>',b.classes.add("popover").add("bottom").add(b.isRtl()?"end":"start")),b.aria("label",a.ariaLabel),b.aria("labelledby",b._id),b.aria("describedby",b.describedBy||b._id+"-none")},fixed:function(a){var b=this;if(b.state.get("fixed")!=a){if(b.state.get("rendered")){var c=d.getViewPort();a?b.layoutRect().y-=c.y:b.layoutRect().y+=c.y}b.classes.toggle("fixed",a),b.state.set("fixed",a)}return b},show:function(){var a,b=this,c=b._super();for(a=s.length;a--&&s[a]!==b;);return a===-1&&s.push(b),c},hide:function(){return n(this),m(!1,this),this._super()},hideAll:function(){u.hideAll()},close:function(){var a=this;return a.fire("close").isDefaultPrevented()||(a.remove(),m(!1,a)),a},remove:function(){n(this),this._super()},postRender:function(){var a=this;return a.settings.bodyRole&&this.getEl("body").setAttribute("role",a.settings.bodyRole),a._super()}});return u.hideAll=function(){for(var a=s.length;a--;){var b=s[a];b&&b.settings.autohide&&(b.hide(),s.splice(a,1))}},u}),g("tinymce.core.ui.Window",["tinymce.core.ui.FloatPanel","tinymce.core.ui.Panel","tinymce.core.ui.DomUtils","tinymce.core.dom.DomQuery","tinymce.core.ui.DragHelper","tinymce.core.ui.BoxUtils","tinymce.core.Env","tinymce.core.util.Delay"],function(a,b,c,d,e,f,g,h){"use strict";function i(a){var b,c="width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0",e=d("meta[name=viewport]")[0];g.overrideViewPort!==!1&&(e||(e=document.createElement("meta"),e.setAttribute("name","viewport"),document.getElementsByTagName("head")[0].appendChild(e)),b=e.getAttribute("content"),b&&"undefined"!=typeof n&&(n=b),e.setAttribute("content",a?c:n))}function j(a,b){k()&&b===!1&&d([document.documentElement,document.body]).removeClass(a+"fullscreen")}function k(){for(var a=0;a<m.length;a++)if(m[a]._fullscreen)return!0;return!1}function l(){function a(){var a,b,d=c.getWindowSize();for(a=0;a<m.length;a++)b=m[a].layoutRect(),m[a].moveTo(m[a].settings.x||Math.max(0,d.w/2-b.w/2),m[a].settings.y||Math.max(0,d.h/2-b.h/2))}if(!g.desktop){var b={w:window.innerWidth,h:window.innerHeight};h.setInterval(function(){var a=window.innerWidth,c=window.innerHeight;b.w==a&&b.h==c||(b={w:a,h:c},d(window).trigger("resize"))},100)}d(window).on("resize",a)}var m=[],n="",o=a.extend({modal:!0,Defaults:{border:1,layout:"flex",containerCls:"panel",role:"dialog",callbacks:{submit:function(){this.fire("submit",{data:this.toJSON()})},close:function(){this.close()}}},init:function(a){var d=this;d._super(a),d.isRtl()&&d.classes.add("rtl"),d.classes.add("window"),d.bodyClasses.add("window-body"),d.state.set("fixed",!0),a.buttons&&(d.statusbar=new b({layout:"flex",border:"1 0 0 0",spacing:3,padding:10,align:"center",pack:d.isRtl()?"start":"end",defaults:{type:"button"},items:a.buttons}),d.statusbar.classes.add("foot"),d.statusbar.parent(d)),d.on("click",function(a){var b=d.classPrefix+"close";(c.hasClass(a.target,b)||c.hasClass(a.target.parentNode,b))&&d.close()}),d.on("cancel",function(){d.close()}),d.aria("describedby",d.describedBy||d._id+"-none"),d.aria("label",a.title),d._fullscreen=!1},recalc:function(){var a,b,d,e,f=this,g=f.statusbar;f._fullscreen&&(f.layoutRect(c.getWindowSize()),f.layoutRect().contentH=f.layoutRect().innerH),f._super(),a=f.layoutRect(),f.settings.title&&!f._fullscreen&&(b=a.headerW,b>a.w&&(d=a.x-Math.max(0,b/2),f.layoutRect({w:b,x:d}),e=!0)),g&&(g.layoutRect({w:f.layoutRect().innerW}).recalc(),b=g.layoutRect().minW+a.deltaW,b>a.w&&(d=a.x-Math.max(0,b-a.w),f.layoutRect({w:b,x:d}),e=!0)),e&&f.recalc()},initLayoutRect:function(){var a,b=this,d=b._super(),e=0;if(b.settings.title&&!b._fullscreen){a=b.getEl("head");var f=c.getSize(a);d.headerW=f.width,d.headerH=f.height,e+=d.headerH}b.statusbar&&(e+=b.statusbar.layoutRect().h),d.deltaH+=e,d.minH+=e,d.h+=e;var g=c.getWindowSize();return d.x=b.settings.x||Math.max(0,g.w/2-d.w/2),d.y=b.settings.y||Math.max(0,g.h/2-d.h/2),d},renderHtml:function(){var a=this,b=a._layout,c=a._id,d=a.classPrefix,e=a.settings,f="",g="",h=e.html;return a.preRender(),b.preRender(a),e.title&&(f='<div id="'+c+'-head" class="'+d+'window-head"><div id="'+c+'-title" class="'+d+'title">'+a.encode(e.title)+'</div><div id="'+c+'-dragh" class="'+d+'dragh"></div><button type="button" class="'+d+'close" aria-hidden="true"><i class="mce-ico mce-i-remove"></i></button></div>'),e.url&&(h='<iframe src="'+e.url+'" tabindex="-1"></iframe>'),"undefined"==typeof h&&(h=b.renderHtml(a)),a.statusbar&&(g=a.statusbar.renderHtml()),'<div id="'+c+'" class="'+a.classes+'" hidefocus="1"><div class="'+a.classPrefix+'reset" role="application">'+f+'<div id="'+c+'-body" class="'+a.bodyClasses+'">'+h+"</div>"+g+"</div></div>"},fullscreen:function(a){var b,e,g=this,i=document.documentElement,j=g.classPrefix;if(a!=g._fullscreen)if(d(window).on("resize",function(){var a;if(g._fullscreen)if(b)g._timer||(g._timer=h.setTimeout(function(){var a=c.getWindowSize();g.moveTo(0,0).resizeTo(a.w,a.h),g._timer=0},50));else{a=(new Date).getTime();var d=c.getWindowSize();g.moveTo(0,0).resizeTo(d.w,d.h),(new Date).getTime()-a>50&&(b=!0)}}),e=g.layoutRect(),g._fullscreen=a,a){g._initial={x:e.x,y:e.y,w:e.w,h:e.h},g.borderBox=f.parseBox("0"),g.getEl("head").style.display="none",e.deltaH-=e.headerH+2,d([i,document.body]).addClass(j+"fullscreen"),g.classes.add("fullscreen");var k=c.getWindowSize();g.moveTo(0,0).resizeTo(k.w,k.h)}else g.borderBox=f.parseBox(g.settings.border),g.getEl("head").style.display="",e.deltaH+=e.headerH,d([i,document.body]).removeClass(j+"fullscreen"),g.classes.remove("fullscreen"),g.moveTo(g._initial.x,g._initial.y).resizeTo(g._initial.w,g._initial.h);return g.reflow()},postRender:function(){var a,b=this;setTimeout(function(){b.classes.add("in"),b.fire("open")},0),b._super(),b.statusbar&&b.statusbar.postRender(),b.focus(),this.dragHelper=new e(b._id+"-dragh",{start:function(){a={x:b.layoutRect().x,y:b.layoutRect().y}},drag:function(c){b.moveTo(a.x+c.deltaX,a.y+c.deltaY)}}),b.on("submit",function(a){a.isDefaultPrevented()||b.close()}),m.push(b),i(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var a,b=this;for(b.dragHelper.destroy(),b._super(),b.statusbar&&this.statusbar.remove(),j(b.classPrefix,!1),a=m.length;a--;)m[a]===b&&m.splice(a,1);i(m.length>0)},getContentWindow:function(){var a=this.getEl().getElementsByTagName("iframe")[0];return a?a.contentWindow:null}});return l(),o}),g("tinymce.core.ui.MessageBox",["tinymce.core.ui.Window"],function(a){"use strict";var b=a.extend({init:function(a){a={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(a)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(c){function d(a,b,c){return{type:"button",text:a,subtype:c?"primary":"",onClick:function(a){a.control.parents()[1].close(),f(b)}}}var e,f=c.callback||function(){};switch(c.buttons){case b.OK_CANCEL:e=[d("Ok",!0,!0),d("Cancel",!1)];break;case b.YES_NO:case b.YES_NO_CANCEL:e=[d("Yes",1,!0),d("No",0)],c.buttons==b.YES_NO_CANCEL&&e.push(d("Cancel",-1));break;default:e=[d("Ok",!0,!0)]}return new a({padding:20,x:c.x,y:c.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:e,title:c.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:c.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:c.onClose,onCancel:function(){f(!1)}}).renderTo(document.body).reflow()},alert:function(a,c){return"string"==typeof a&&(a={text:a}),a.callback=c,b.msgBox(a)},confirm:function(a,c){return"string"==typeof a&&(a={text:a}),a.callback=c,a.buttons=b.OK_CANCEL,b.msgBox(a)}}});return b}),g("tinymce.core.ui.WindowManagerImpl",["tinymce.core.ui.Window","tinymce.core.ui.MessageBox"],function(a,b){return function(c){var d=function(b,c,d){var e;return b.title=b.title||" ",b.url=b.url||b.file,b.url&&(b.width=parseInt(b.width||320,10),b.height=parseInt(b.height||240,10)),b.body&&(b.items={defaults:b.defaults,type:b.bodyType||"form",items:b.body,data:b.data,callbacks:b.commands}),b.url||b.buttons||(b.buttons=[{text:"Ok",subtype:"primary",onclick:function(){e.find("form")[0].submit()}},{text:"Cancel",onclick:function(){e.close()}}]),e=new a(b),e.on("close",function(){d(e)}),b.data&&e.on("postRender",function(){this.find("*").each(function(a){var c=a.name();c in b.data&&a.value(b.data[c])})}),e.features=b||{},e.params=c||{},e=e.renderTo().reflow()},e=function(a,c,d){var e;return e=b.alert(a,function(){c()}),e.on("close",function(){d(e)}),e},f=function(a,c,d){var e;return e=b.confirm(a,function(a){c(a)}),e.on("close",function(){d(e)}),e},g=function(a){a.close()},h=function(a){return a.params},i=function(a,b){a.params=b};return{open:d,alert:e,confirm:f,close:g,getParams:h,setParams:i}}}),g("tinymce.core.api.WindowManager",["ephox.katamari.api.Arr","ephox.katamari.api.Option","tinymce.core.ui.WindowManagerImpl"],function(a,b,c){return function(d){var e=[],f=function(){var a=d.theme;return a&&a.getWindowManagerImpl?a.getWindowManagerImpl():c(d)},g=function(a,b){return function(){return b?b.apply(a,arguments):void 0}},h=function(a){d.fire("OpenWindow",{win:a})},i=function(a){d.fire("CloseWindow",{win:a})},j=function(a){e.push(a),h(a)},k=function(b){a.findIndex(e,function(a){return a===b}).each(function(a){e.splice(a,1),i(b),0===e.length&&d.focus()})},l=function(){return b.from(e[e.length-1])},m=function(a,b){d.editorManager.setActive(d),0===e.length&&d.nodeChanged();var c=f().open(a,b,k);return j(c),c},n=function(a,b,c){var d=f().alert(a,g(c?c:this,b),k);j(d)},o=function(a,b,c){var d=f().confirm(a,g(c?c:this,b),k);j(d)},p=function(){l().each(function(a){f().close(a),k(a)})},q=function(){return l().map(f().getParams).getOr(null)},r=function(a){l().each(function(b){f().setParams(b,a)})},s=function(){return e};return d.on("remove",function(){a.each(e.slice(0),function(a){f().close(a)})}),{windows:e,open:m,alert:n,confirm:o,close:p,getParams:q,setParams:r,getWindows:s}}}),g("tinymce.core.dom.RangePoint",["ephox.katamari.api.Arr","tinymce.core.geom.ClientRect"],function(a,b){var c=function(c,d,e){return!e.collapsed&&a.foldl(e.getClientRects(),function(a,e){return a||b.containsXY(e,c,d)},!1)};return{isXYWithinRange:c}}),g("tinymce.core.util.VK",["tinymce.core.Env"],function(a){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(a){return a.shiftKey||a.ctrlKey||a.altKey||this.metaKeyPressed(a)},metaKeyPressed:function(b){return a.mac?b.metaKey:b.ctrlKey&&!b.altKey}}}),g("tinymce.core.dom.ControlSelection",["ephox.katamari.api.Fun","ephox.sugar.api.node.Element","ephox.sugar.api.search.Selectors","tinymce.core.dom.NodeType","tinymce.core.dom.RangePoint","tinymce.core.Env","tinymce.core.util.Delay","tinymce.core.util.Tools","tinymce.core.util.VK"],function(a,b,c,d,e,f,g,h,i){function j(a,b){for(;b&&b!=a;){if(l(b)||k(b))return b;b=b.parentNode}return null}var k=d.isContentEditableFalse,l=d.isContentEditableTrue,m=function(a){return a&&"IMG"===a.nodeName},n=function(a,b){return m(a.target)&&!e.isXYWithinRange(a.clientX,a.clientY,b)},o=function(a,b){var c=b.target;n(b,a.selection.getRng())&&!b.isDefaultPrevented()&&(b.preventDefault(),a.selection.select(c))};return function(d,e){function l(a){var d=e.settings.object_resizing;return d!==!1&&!f.iOS&&("string"!=typeof d&&(d="table,img,div"),"false"!==a.getAttribute("data-mce-resize")&&(a!=e.getBody()&&c.is(b.fromDom(a),d)))}function m(a){var b,c,d,f,g;b=a.screenX-J,c=a.screenY-K,R=b*H[2]+N,S=c*H[3]+O,R=R<5?5:R,S=S<5?5:S,d="IMG"==D.nodeName&&e.settings.resize_img_proportional!==!1?!i.modifierPressed(a):i.modifierPressed(a)||"IMG"==D.nodeName&&H[2]*H[3]!==0,d&&($(b)>$(c)?(S=_(R*P),R=_(S/P)):(R=_(S/P),S=_(R*P))),V.setStyles(E,{width:R,height:S}),f=H.startPos.x+b,g=H.startPos.y+c,f=f>0?f:0,g=g>0?g:0,V.setStyles(F,{left:f,top:g,display:"block"}),F.innerHTML=R+" × "+S,H[2]<0&&E.clientWidth<=R&&V.setStyle(E,"left",L+(N-R)),H[3]<0&&E.clientHeight<=S&&V.setStyle(E,"top",M+(O-S)),b=aa.scrollWidth-T,c=aa.scrollHeight-U,b+c!==0&&V.setStyles(F,{left:f-b,top:g-c}),Q||(e.fire("ObjectResizeStart",{target:D,width:N,height:O}),Q=!0)}function n(){function a(a,b){b&&(D.style[a]||!e.schema.isValid(D.nodeName.toLowerCase(),a)?V.setStyle(D,a,b):V.setAttrib(D,a,b))}Q=!1,a("width",R),a("height",S),V.unbind(X,"mousemove",m),V.unbind(X,"mouseup",n),Y!=X&&(V.unbind(Y,"mousemove",m),V.unbind(Y,"mouseup",n)),V.remove(E),V.remove(F),Z&&"TABLE"!=D.nodeName||p(D),e.fire("ObjectResized",{target:D,width:R,height:S}),V.setAttrib(D,"style",V.getAttrib(D,"style")),e.nodeChanged()}function p(a,b,c){var d,g,h,i,j;q(),z(),d=V.getPos(a,aa),L=d.x,M=d.y,j=a.getBoundingClientRect(),g=j.width||j.right-j.left,h=j.height||j.bottom-j.top,D!=a&&(y(),D=a,R=S=0),i=e.fire("ObjectSelected",{target:a}),l(a)&&!i.isDefaultPrevented()?W(G,function(a,d){function e(b){J=b.screenX,K=b.screenY,N=D.clientWidth,O=D.clientHeight,P=O/N,H=a,a.startPos={x:g*a[0]+L,y:h*a[1]+M},T=aa.scrollWidth,U=aa.scrollHeight,E=D.cloneNode(!0),V.addClass(E,"mce-clonedresizable"),V.setAttrib(E,"data-mce-bogus","all"),E.contentEditable=!1,E.unSelectabe=!0,V.setStyles(E,{left:L,top:M,margin:0}),E.removeAttribute("data-mce-selected"),aa.appendChild(E),V.bind(X,"mousemove",m),V.bind(X,"mouseup",n),Y!=X&&(V.bind(Y,"mousemove",m),V.bind(Y,"mouseup",n)),F=V.add(aa,"div",{"class":"mce-resize-helper","data-mce-bogus":"all"},N+" × "+O)}var i;return b?void(d==b&&e(c)):(i=V.get("mceResizeHandle"+d),i&&V.remove(i),i=V.add(aa,"div",{id:"mceResizeHandle"+d,"data-mce-bogus":"all","class":"mce-resizehandle",unselectable:!0,style:"cursor:"+d+"-resize; margin:0; padding:0"}),f.ie&&(i.contentEditable=!1),V.bind(i,"mousedown",function(a){a.stopImmediatePropagation(),a.preventDefault(),e(a)}),a.elm=i,void V.setStyles(i,{left:g*a[0]+L-i.offsetWidth/2,top:h*a[1]+M-i.offsetHeight/2}))}):q(),D.setAttribute("data-mce-selected","1")}function q(){var a,b;z(),D&&D.removeAttribute("data-mce-selected");for(a in G)b=V.get("mceResizeHandle"+a),b&&(V.unbind(b),V.remove(b))}function r(a){function b(a,b){if(a)do if(a===b)return!0;while(a=a.parentNode)}var c,f;if(!Q&&!e.removed)return W(V.select("img[data-mce-selected],hr[data-mce-selected]"),function(a){a.removeAttribute("data-mce-selected")}),f="mousedown"==a.type?a.target:d.getNode(),f=V.$(f).closest(Z?"table":"table,img,hr")[0],b(f,aa)&&(A(),c=d.getStart(!0),b(c,f)&&b(d.getEnd(!0),f)&&(!Z||f!=c&&"IMG"!==c.nodeName))?void p(f):void q()}function s(a,b,c){a&&a.attachEvent&&a.attachEvent("on"+b,c)}function t(a,b,c){a&&a.detachEvent&&a.detachEvent("on"+b,c)}function u(a){var b,c,d,f,g,h,i,j=a.srcElement;b=j.getBoundingClientRect(),h=I.clientX-b.left,i=I.clientY-b.top;for(c in G)if(d=G[c],f=j.offsetWidth*d[0],g=j.offsetHeight*d[1],$(f-h)<8&&$(g-i)<8){H=d;break}Q=!0,e.fire("ObjectResizeStart",{target:D,width:D.clientWidth,height:D.clientHeight}),e.getDoc().selection.empty(),p(j,c,I)}function v(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function w(a){return k(j(e.getBody(),a))}function x(a){var b=a.srcElement;if(w(b))return void v(a);if(b!=D){if(e.fire("ObjectSelected",{target:b}),y(),0===b.id.indexOf("mceResizeHandle"))return void(a.returnValue=!1);"IMG"!=b.nodeName&&"TABLE"!=b.nodeName||(q(),D=b,s(b,"resizestart",u))}}function y(){t(D,"resizestart",u)}function z(){for(var a in G){var b=G[a];b.elm&&(V.unbind(b.elm),delete b.elm)}}function A(){try{e.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(a){}}function B(a){var b;if(Z){b=X.body.createControlRange();try{return b.addElement(a),b.select(),!0}catch(c){}}}function C(){D=E=null,Z&&(y(),t(aa,"controlselect",x))}var D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V=e.dom,W=h.each,X=e.getDoc(),Y=document,Z=f.ie&&f.ie<11,$=Math.abs,_=Math.round,aa=e.getBody();G={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var ba=".mce-content-body";return e.contentStyles.push(ba+" div.mce-resizehandle {position: absolute;border: 1px solid black;box-sizing: box-sizing;background: #FFF;width: 7px;height: 7px;z-index: 10000}"+ba+" .mce-resizehandle:hover {background: #000}"+ba+" img[data-mce-selected],"+ba+" hr[data-mce-selected] {outline: 1px solid black;resize: none}"+ba+" .mce-clonedresizable {position: absolute;"+(f.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"+ba+" .mce-resize-helper {background: #555;background: rgba(0,0,0,0.75);border-radius: 3px;border: 1px;color: white;display: none;font-family: sans-serif;font-size: 12px;white-space: nowrap;line-height: 14px;margin: 5px 10px;padding: 5px;position: absolute;z-index: 10001}"),e.on("init",function(){Z?(e.on("ObjectResized",function(a){"TABLE"!=a.target.nodeName&&(q(),B(a.target))}),s(aa,"controlselect",x),e.on("mousedown",function(a){I=a})):(A(),f.ie>=11&&(e.on("mousedown click",function(a){var b=a.target,c=b.nodeName;Q||!/^(TABLE|IMG|HR)$/.test(c)||w(b)||(2!==a.button&&e.selection.select(b,"TABLE"==c),"mousedown"==a.type&&e.nodeChanged())}),e.dom.bind(aa,"mscontrolselect",function(a){function b(a){g.setEditorTimeout(e,function(){e.selection.select(a)})}return w(a.target)?(a.preventDefault(),void b(a.target)):void(/^(TABLE|IMG|HR)$/.test(a.target.nodeName)&&(a.preventDefault(),"IMG"==a.target.tagName&&b(a.target)))})));var b=g.throttle(function(a){e.composing||r(a)});e.on("nodechange ResizeEditor ResizeWindow drop",b),e.on("keyup compositionend",function(a){D&&"TABLE"==D.nodeName&&b(a)}),e.on("hide blur",q),e.on("contextmenu",a.curry(o,e))}),e.on("remove",z),{isResizable:l,showResizeRect:p,hideResizeRect:q,updateResizeRect:r,controlSelect:B,destroy:C}}}),g("tinymce.core.dom.ScrollIntoView",["tinymce.core.dom.NodeType"],function(a){var b=function(a){for(var b=0,c=0,d=a;d&&d.nodeType;)b+=d.offsetLeft||0,c+=d.offsetTop||0,d=d.offsetParent;return{x:b,y:c}},c=function(a,b,c){var d={elm:b,alignToTop:c};return a.fire("scrollIntoView",d),d.isDefaultPrevented()},d=function(d,e,f){var g,h,i,j,k=d.dom,l=k.getRoot(),m=0;if(!c(d,e,f)&&a.isElement(e)){if(f===!1&&(m=e.offsetHeight),"BODY"!==l.nodeName){var n=d.selection.getScrollContainer();if(n)return g=b(e).y-b(n).y+m,j=n.clientHeight,i=n.scrollTop,void((g<i||g+25>i+j)&&(n.scrollTop=g<i?g:g-j+25))}h=k.getViewPort(d.getWin()),g=k.getPos(e).y+m,i=h.y,j=h.h,(g<h.y||g+25>i+j)&&d.getWin().scrollTo(0,g<i?g:g-j+25)}};return{scrollIntoView:d}}),g("tinymce.core.dom.TridentSelection",[],function(){function a(a){function b(b,c){var d,e,f,g,h,i,j,k,l=0,m=-1;if(d=b.duplicate(),d.collapse(c),k=d.parentElement(),k.ownerDocument===a.dom.doc){for(;"false"===k.contentEditable;)k=k.parentNode;if(!k.hasChildNodes())return{node:k,inside:1};for(g=k.children,e=g.length-1;l<=e;)if(j=Math.floor((l+e)/2),h=g[j],d.moveToElementText(h),m=d.compareEndPoints(c?"StartToStart":"EndToEnd",b),m>0)e=j-1;else{if(!(m<0))return{node:h};l=j+1}if(m<0)for(h?d.collapse(!1):(d.moveToElementText(k),d.collapse(!0),h=k,f=!0),i=0;0!==d.compareEndPoints(c?"StartToStart":"StartToEnd",b)&&0!==d.move("character",1)&&k==d.parentElement();)i++;else for(d.collapse(!0),i=0;0!==d.compareEndPoints(c?"StartToStart":"StartToEnd",b)&&0!==d.move("character",-1)&&k==d.parentElement();)i++;return{node:h,position:m,offset:i,inside:f}}}function c(){function c(a){var c,d,e,f,g,h=b(k,a),i=0;if(c=h.node,d=h.offset,h.inside&&!c.hasChildNodes())return void l[a?"setStart":"setEnd"](c,0);if(d===f)return void l[a?"setStartBefore":"setEndAfter"](c);if(h.position<0){if(e=h.inside?c.firstChild:c.nextSibling,!e)return void l[a?"setStartAfter":"setEndAfter"](c);if(!d)return void(3==e.nodeType?l[a?"setStart":"setEnd"](e,0):l[a?"setStartBefore":"setEndBefore"](e));for(;e;){if(3==e.nodeType&&(g=e.nodeValue,i+=g.length,i>=d)){c=e,i-=d,i=g.length-i;break}e=e.nextSibling}}else{if(e=c.previousSibling,!e)return l[a?"setStartBefore":"setEndBefore"](c);if(!d)return void(3==c.nodeType?l[a?"setStart":"setEnd"](e,c.nodeValue.length):l[a?"setStartAfter":"setEndAfter"](e));for(;e;){if(3==e.nodeType&&(i+=e.nodeValue.length,i>=d)){c=e,i-=d;break}e=e.previousSibling}}l[a?"setStart":"setEnd"](c,i)}var f,g,h,i,j,k=a.getRng(),l=e.createRng();if(f=k.item?k.item(0):k.parentElement(),f.ownerDocument!=e.doc)return l;if(g=a.isCollapsed(),k.item)return l.setStart(f.parentNode,e.nodeIndex(f)),l.setEnd(l.startContainer,l.startOffset+1),l;try{c(!0),g||c()}catch(m){if(m.number!=-2147024809)throw m;j=d.getBookmark(2),h=k.duplicate(),h.collapse(!0),f=h.parentElement(),g||(h=k.duplicate(),h.collapse(!1),i=h.parentElement(),i.innerHTML=i.innerHTML),f.innerHTML=f.innerHTML,d.moveToBookmark(j),k=a.getRng(),c(!0),g||c()}return l}var d=this,e=a.dom,f=!1;this.getBookmark=function(c){function d(a){var b,c,d,f,g=[];for(b=a.parentNode,c=e.getRoot().parentNode;b!=c&&9!==b.nodeType;){for(d=b.children,f=d.length;f--;)if(a===d[f]){g.push(f);break}a=b,b=b.parentNode}return g}function f(a){var c;if(c=b(g,a))return{position:c.position,offset:c.offset,indexes:d(c.node),inside:c.inside}}var g=a.getRng(),h={};return 2===c&&(g.item?h.start={ctrl:!0,indexes:d(g.item(0))}:(h.start=f(!0),a.isCollapsed()||(h.end=f()))),h},this.moveToBookmark=function(a){function b(a){var b,c,d,f;for(b=e.getRoot(),c=a.length-1;c>=0;c--)f=b.children,d=a[c],d<=f.length-1&&(b=f[d]);return b}function c(c){var e,g,h,i,j=a[c?"start":"end"];j&&(e=j.position>0,g=f.createTextRange(),g.moveToElementText(b(j.indexes)),i=j.offset,i!==h?(g.collapse(j.inside||e),g.moveStart("character",e?-i:i)):g.collapse(c),d.setEndPoint(c?"StartToStart":"EndToStart",g),c&&d.collapse(!0))}var d,f=e.doc.body;a.start&&(a.start.ctrl?(d=f.createControlRange(),d.addElement(b(a.start.indexes)),d.select()):(d=f.createTextRange(),c(!0),c(),d.select()))},this.addRange=function(b){function c(a){var b,c,g,l,m;g=e.create("a"),b=a?h:j,c=a?i:k,l=d.duplicate(),b!=o&&b!=o.documentElement||(b=p,c=0),3==b.nodeType?(b.parentNode.insertBefore(g,b),l.moveToElementText(g),l.moveStart("character",c),e.remove(g),d.setEndPoint(a?"StartToStart":"EndToEnd",l)):(m=b.childNodes,m.length?(c>=m.length?e.insertAfter(g,m[m.length-1]):b.insertBefore(g,m[c]),l.moveToElementText(g)):b.canHaveHTML&&(b.innerHTML="<span></span>",g=b.firstChild,l.moveToElementText(g),l.collapse(f)),d.setEndPoint(a?"StartToStart":"EndToEnd",l),e.remove(g))}var d,g,h,i,j,k,l,m,n,o=a.dom.doc,p=o.body;if(h=b.startContainer,i=b.startOffset,j=b.endContainer,k=b.endOffset,d=p.createTextRange(),h==j&&1==h.nodeType){if(i==k&&!h.hasChildNodes()){if(h.canHaveHTML)return l=h.previousSibling,l&&!l.hasChildNodes()&&e.isBlock(l)?l.innerHTML="":l=null,h.innerHTML="<span></span><span></span>",d.moveToElementText(h.lastChild),d.select(),e.doc.selection.clear(),h.innerHTML="",void(l&&(l.innerHTML=""));i=e.nodeIndex(h),h=h.parentNode}if(i==k-1)try{if(n=h.childNodes[i],g=p.createControlRange(),g.addElement(n),g.select(),m=a.getRng(),m.item&&n===m.item(0))return}catch(q){}}c(!0),c(),d.select()},this.getRangeAt=c}return a}),g("ephox.sugar.api.dom.Replication",["ephox.sugar.api.properties.Attr","ephox.sugar.api.node.Element","ephox.sugar.api.dom.Insert","ephox.sugar.api.dom.InsertAll","ephox.sugar.api.dom.Remove","ephox.sugar.api.search.Traverse"],function(a,b,c,d,e,f){var g=function(a,c){return b.fromDom(a.dom().cloneNode(c))},h=function(a){return g(a,!1)},i=function(a){return g(a,!0)},j=function(c,d){var e=b.fromTag(d),f=a.clone(c);return a.setAll(e,f),e},k=function(a,b){var c=j(a,b),e=f.children(i(a));return d.append(c,e),c},l=function(a,b){var g=j(a,b);c.before(a,g);var h=f.children(a);return d.append(g,h),e.remove(a),g};return{shallow:h,shallowAs:j,deep:i,copy:k,mutate:l}}),g("ephox.sugar.api.node.Fragment",["ephox.katamari.api.Arr","ephox.sugar.api.node.Element","global!document"],function(a,b,c){var d=function(d,e){var f=e||c,g=f.createDocumentFragment();return a.each(d,function(a){g.appendChild(a.dom())}),b.fromDom(g)};return{fromElements:d}}),g("ephox.sugar.impl.ClosestOrAncestor",["ephox.katamari.api.Type","ephox.katamari.api.Option"],function(a,b){return function(c,d,e,f,g){return c(e,f)?b.some(e):a.isFunction(g)&&g(e)?b.none():d(e,f,g)}}),g("ephox.sugar.api.search.PredicateFind",["ephox.katamari.api.Type","ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.sugar.api.node.Body","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","ephox.sugar.impl.ClosestOrAncestor"],function(a,b,c,d,e,f,g,h){var i=function(a){return n(e.body(),a)},j=function(b,e,f){for(var h=b.dom(),i=a.isFunction(f)?f:c.constant(!1);h.parentNode;){h=h.parentNode;var j=g.fromDom(h);if(e(j))return d.some(j);if(i(j))break}return d.none()},k=function(a,b,c){var d=function(a){return b(a)};return h(d,j,a,b,c)},l=function(a,b){var c=a.dom();return c.parentNode?m(g.fromDom(c.parentNode),function(c){return!f.eq(a,c)&&b(c)}):d.none()},m=function(a,d){var e=b.find(a.dom().childNodes,c.compose(d,g.fromDom));return e.map(g.fromDom)},n=function(a,b){var c=function(a){for(var e=0;e<a.childNodes.length;e++){if(b(g.fromDom(a.childNodes[e])))return d.some(g.fromDom(a.childNodes[e]));var f=c(a.childNodes[e]);if(f.isSome())return f}return d.none()};return c(a.dom())};return{first:i,ancestor:j,closest:k,sibling:l,child:m,descendant:n}}),g("ephox.sugar.api.search.SelectorFind",["ephox.sugar.api.search.PredicateFind","ephox.sugar.api.search.Selectors","ephox.sugar.impl.ClosestOrAncestor"],function(a,b,c){var d=function(a){return b.one(a)},e=function(c,d,e){return a.ancestor(c,function(a){return b.is(a,d)},e)},f=function(c,d){return a.sibling(c,function(a){return b.is(a,d)})},g=function(c,d){return a.child(c,function(a){return b.is(a,d)})},h=function(a,c){return b.one(c,a)},i=function(a,d,f){return c(b.is,e,a,d,f)};return{first:d,ancestor:e,sibling:f,child:g,descendant:h,closest:i}}),g("tinymce.core.dom.Parents",["ephox.katamari.api.Fun","ephox.sugar.api.dom.Compare","ephox.sugar.api.search.Traverse"],function(a,b,c){var d=function(a){return a.slice(0,-1)},e=function(a,e,f){return b.contains(e,a)?d(c.parents(a,function(a){return f(a)||b.eq(a,e)})):[]},f=function(b,c){return e(b,c,a.constant(!1))},g=function(a,b){return[a].concat(f(a,b))};return{parentsUntil:e,parents:f,parentsAndSelf:g}}),g("ephox.katamari.api.Options",["ephox.katamari.api.Option"],function(a){var b=function(a){for(var b=[],c=function(a){b.push(a)},d=0;d<a.length;d++)a[d].each(c);return b},c=function(b,c){for(var d=0;d<b.length;d++){var e=c(b[d],d);if(e.isSome())return e}return a.none()},d=function(b,c){for(var d=[],e=0;e<b.length;e++){var f=b[e];if(!f.isSome())return a.none();d.push(f.getOrDie())}return a.some(c.apply(null,d))};return{cat:b,findMap:c,liftN:d}}),g("tinymce.core.selection.SelectionUtils",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.katamari.api.Options","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","ephox.sugar.api.node.Node","ephox.sugar.api.search.Traverse","tinymce.core.dom.NodeType"],function(a,b,c,d,e,f,g,h,i){var j=function(a){var b=a.startContainer,d=a.startOffset;return i.isText(b)?0===d?c.some(f.fromDom(b)):c.none():c.from(b.childNodes[d]).map(f.fromDom)},k=function(a){var b=a.endContainer,d=a.endOffset;return i.isText(b)?d===b.data.length?c.some(f.fromDom(b)):c.none():c.from(b.childNodes[d-1]).map(f.fromDom)},l=function(a){return h.firstChild(a).fold(b.constant([a]),function(b){return[a].concat(l(b))})},m=function(a){return h.lastChild(a).fold(b.constant([a]),function(b){return"br"===g.name(b)?h.prevSibling(b).map(function(b){return[a].concat(m(b))}).getOr([]):[a].concat(m(b))})},n=function(c,f){return d.liftN([j(f),k(f)],function(d,f){var g=a.find(l(c),b.curry(e.eq,d)),h=a.find(m(c),b.curry(e.eq,f));return g.isSome()&&h.isSome()}).getOr(!1)};return{hasAllContentsSelected:n}}),g("tinymce.core.selection.SimpleTableModel",["ephox.katamari.api.Arr","ephox.katamari.api.Option","ephox.katamari.api.Struct","ephox.sugar.api.dom.Compare","ephox.sugar.api.dom.Insert","ephox.sugar.api.dom.InsertAll","ephox.sugar.api.dom.Replication","ephox.sugar.api.node.Element","ephox.sugar.api.properties.Attr","ephox.sugar.api.search.SelectorFilter"],function(a,b,c,d,e,f,g,h,i,j){var k=c.immutable("element","width","rows"),l=c.immutable("element","cells"),m=c.immutable("x","y"),n=function(a,b){var c=parseInt(i.get(a,b),10);return isNaN(c)?1:c},o=function(a,b,c,d,e){for(var f=n(e,"rowspan"),h=n(e,"colspan"),i=a.rows(),j=c;j<c+f;j++){i[j]||(i[j]=l(g.deep(d),[]));for(var k=b;k<b+h;k++){var m=i[j].cells();m[k]=j==c&&k==b?e:g.shallow(e)}}},p=function(a,b,c){var d=a.rows(),e=d[c]?d[c].cells():[];return!!e[b]},q=function(a,b,c){for(;p(a,b,c);)b++;return b},r=function(b){return a.foldl(b,function(a,b){return b.cells().length>a?b.cells().length:a},0)},s=function(a,c){for(var e=a.rows(),f=0;f<e.length;f++)for(var g=e[f].cells(),h=0;h<g.length;h++)if(d.eq(g[h],c))return b.some(m(h,f));return b.none()},t=function(a,b,c,d,e){for(var f=[],g=a.rows(),h=c;h<=e;h++){var i=g[h].cells(),j=b<d?i.slice(b,d+1):i.slice(d,b+1);f.push(l(g[h].element(),j))}return f},u=function(a,b,c){var d=b.x(),e=b.y(),f=c.x(),g=c.y(),h=e<g?t(a,d,e,f,g):t(a,d,g,f,e);return k(a.element(),r(h),h)},v=function(a,b){var c=g.shallow(a.element()),d=h.fromTag("tbody");return f.append(d,b),e.append(c,d),c},w=function(b){return a.map(b.rows(),function(b){var c=a.map(b.cells(),function(a){var b=g.deep(a);return i.remove(b,"colspan"),i.remove(b,"rowspan"),b}),d=g.shallow(b.element());return f.append(d,c),d})},x=function(b){var c=k(g.shallow(b),0,[]);return a.each(j.descendants(b,"tr"),function(b,d){a.each(j.descendants(b,"td,th"),function(a,e){o(c,q(c,e,d),d,b,a)})}),k(c.element(),r(c.rows()),c.rows())},y=function(a){return v(a,w(a))},z=function(a,b,c){return s(a,b).bind(function(b){return s(a,c).map(function(c){return u(a,b,c)})})};return{fromDom:x,toDom:y,subsection:z}}),g("tinymce.core.selection.MultiRange",["ephox.katamari.api.Arr","ephox.sugar.api.node.Element","tinymce.core.dom.RangeUtils"],function(a,b,c){
-var d=function(a){var b=[];if(a)for(var c=0;c<a.rangeCount;c++)b.push(a.getRangeAt(c));return b},e=function(d){return a.bind(d,function(a){var d=c.getSelectedNode(a);return d?[b.fromDom(d)]:[]})},f=function(a){return d(a).length>1};return{getRanges:d,getSelectedNodes:e,hasMultipleRanges:f}}),g("tinymce.core.selection.TableCellSelection",["ephox.katamari.api.Arr","ephox.sugar.api.node.Element","ephox.sugar.api.search.SelectorFilter","tinymce.core.dom.ElementType","tinymce.core.selection.MultiRange"],function(a,b,c,d,e){var f=function(b){return a.filter(e.getSelectedNodes(b),d.isTableCell)},g=function(a){var b=c.descendants(a,"td[data-mce-selected],th[data-mce-selected]");return b},h=function(a,b){var c=g(b),d=f(a);return c.length>0?c:d},i=function(a){return h(e.getRanges(a.selection.getSel()),b.fromDom(a.getBody()))};return{getCellsFromRanges:f,getCellsFromElement:g,getCellsFromElementOrRanges:h,getCellsFromEditor:i}}),g("tinymce.core.selection.FragmentReader",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.sugar.api.dom.Compare","ephox.sugar.api.dom.Insert","ephox.sugar.api.dom.Replication","ephox.sugar.api.node.Element","ephox.sugar.api.node.Fragment","ephox.sugar.api.node.Node","ephox.sugar.api.search.SelectorFind","ephox.sugar.api.search.Traverse","tinymce.core.dom.ElementType","tinymce.core.dom.Parents","tinymce.core.selection.SelectionUtils","tinymce.core.selection.SimpleTableModel","tinymce.core.selection.TableCellSelection"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=function(b){return a.find(b,function(a){return"ul"===h.name(a)||"ol"===h.name(a)})},q=function(c,d){return a.find(c,function(a){return"li"===h.name(a)&&m.hasAllContentsSelected(a,d)}).fold(b.constant([]),function(a){return p(c).map(function(a){return[f.fromTag("li"),f.fromTag(h.name(a))]}).getOr([])})},r=function(b,c){var e=a.foldl(c,function(a,b){return d.append(b,a),b},b);return c.length>0?g.fromElements([e]):e},s=function(a){return k.isListItem(a)?j.parent(a).filter(k.isList).fold(b.constant([]),function(b){return[a,b]}):k.isList(a)?[a]:[]},t=function(b,c){var d=f.fromDom(c.commonAncestorContainer),g=l.parentsAndSelf(d,b),h=a.filter(g,function(a){return k.isInline(a)||k.isHeading(a)}),i=q(g,c),j=h.concat(i.length?i:s(d));return a.map(j,e.shallow)},u=function(){return g.fromElements([])},v=function(a,b){return r(f.fromDom(b.cloneContents()),t(a,b))},w=function(a,d){return i.ancestor(d,"table",b.curry(c.eq,a))},x=function(a,b){return w(a,b[0]).bind(function(a){var c=b[0],d=b[b.length-1],e=n.fromDom(a);return n.subsection(e,c,d).map(function(a){return g.fromElements([n.toDom(a)])})}).getOrThunk(u)},y=function(a,b){return b.length>0&&b[0].collapsed?u():v(a,b[0])},z=function(a,b){var c=o.getCellsFromElementOrRanges(b,a);return c.length>0?x(a,c):y(a,b)};return{read:z}}),g("tinymce.core.dom.Selection",["ephox.katamari.api.Arr","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","tinymce.core.caret.CaretPosition","tinymce.core.dom.BookmarkManager","tinymce.core.dom.ControlSelection","tinymce.core.dom.NodeType","tinymce.core.dom.RangeUtils","tinymce.core.dom.ScrollIntoView","tinymce.core.dom.TreeWalker","tinymce.core.dom.TridentSelection","tinymce.core.Env","tinymce.core.selection.FragmentReader","tinymce.core.selection.MultiRange","tinymce.core.text.Zwsp","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){function q(a,b,c,d){var g=this;g.dom=a,g.win=b,g.serializer=c,g.editor=d,g.bookmarkManager=new e(g),g.controlSelection=new f(g,d),g.win.getSelection||(g.tridentSel=new k(g))}var r=p.each,s=p.trim,t=l.ie,u=function(a){return!(!a||!a.ownerDocument)&&b.contains(c.fromDom(a.ownerDocument),c.fromDom(a))},v=function(a){return!!a&&(!!a.select||u(a.startContainer)&&u(a.endContainer))},w=function(b,c){return a.map(c,function(a){var c=b.fire("GetSelectionRange",{range:a});return c.range!==a?c.range:a})};return q.prototype={setCursorLocation:function(a,b){var c=this,d=c.dom.createRng();a?(d.setStart(a,b),d.setEnd(a,b),c.setRng(d),c.collapse(!1)):(c._moveEndPoint(d,c.editor.getBody(),!0),c.setRng(d))},getContent:function(a){var b,d,e,f=this,g=f.getRng(),h=f.dom.create("body"),i=f.getSel(),j=w(f.editor,n.getRanges(this.getSel()));return a=a||{},b=d="",a.get=!0,a.format=a.format||"html",a.selection=!0,f.editor.fire("BeforeGetContent",a),"text"===a.format?f.isCollapsed()?"":o.trim(g.text||(i.toString?i.toString():"")):(g.cloneContents?(e=a.contextual?m.read(c.fromDom(f.editor.getBody()),j).dom():g.cloneContents(),e&&h.appendChild(e)):void 0!==g.item||void 0!==g.htmlText?(h.innerHTML="<br>"+(g.item?g.item(0).outerHTML:g.htmlText),h.removeChild(h.firstChild)):h.innerHTML=g.toString(),/^\s/.test(h.innerHTML)&&(b=" "),/\s+$/.test(h.innerHTML)&&(d=" "),a.getInner=!0,a.content=f.isCollapsed()?"":b+f.serializer.serialize(h,a)+d,f.editor.fire("GetContent",a),a.content)},setContent:function(a,b){var c,d,e,f=this,g=f.getRng(),h=f.win.document;if(b=b||{format:"html"},b.set=!0,b.selection=!0,b.content=a,b.no_events||f.editor.fire("BeforeSetContent",b),a=b.content,g.insertNode){a+='<span id="__caret">_</span>',g.startContainer==h&&g.endContainer==h?h.body.innerHTML=a:(g.deleteContents(),0===h.body.childNodes.length?h.body.innerHTML=a:g.createContextualFragment?g.insertNode(g.createContextualFragment(a)):(d=h.createDocumentFragment(),e=h.createElement("div"),d.appendChild(e),e.outerHTML=a,g.insertNode(d))),c=f.dom.get("__caret"),g=h.createRange(),g.setStartBefore(c),g.setEndBefore(c),f.setRng(g),f.dom.remove("__caret");try{f.setRng(g)}catch(i){}}else g.item&&(h.execCommand("Delete",!1,null),g=f.getRng()),/^\s+/.test(a)?(g.pasteHTML('<span id="__mce_tmp">_</span>'+a),f.dom.remove("__mce_tmp")):g.pasteHTML(a);b.no_events||f.editor.fire("SetContent",b)},getStart:function(a){var b,c,d,e,f=this,g=f.getRng();if(g.duplicate||g.item){if(g.item)return g.item(0);for(d=g.duplicate(),d.collapse(1),b=d.parentElement(),b.ownerDocument!==f.dom.doc&&(b=f.dom.getRoot()),c=e=g.parentElement();e=e.parentNode;)if(e==b){b=c;break}return b}return b=g.startContainer,1==b.nodeType&&b.hasChildNodes()&&(a&&g.collapsed||(b=b.childNodes[Math.min(b.childNodes.length-1,g.startOffset)])),b&&3==b.nodeType?b.parentNode:b},getEnd:function(a){var b,c,d=this,e=d.getRng();return e.duplicate||e.item?e.item?e.item(0):(e=e.duplicate(),e.collapse(0),b=e.parentElement(),b.ownerDocument!==d.dom.doc&&(b=d.dom.getRoot()),b&&"BODY"==b.nodeName?b.lastChild||b:b):(b=e.endContainer,c=e.endOffset,1==b.nodeType&&b.hasChildNodes()&&(a&&e.collapsed||(b=b.childNodes[c>0?c-1:c])),b&&3==b.nodeType?b.parentNode:b)},getBookmark:function(a,b){return this.bookmarkManager.getBookmark(a,b)},moveToBookmark:function(a){return this.bookmarkManager.moveToBookmark(a)},select:function(a,b){var c,d=this,e=d.dom,f=e.createRng();if(d.lastFocusBookmark=null,a){if(!b&&d.controlSelection.controlSelect(a))return;c=e.nodeIndex(a),f.setStart(a.parentNode,c),f.setEnd(a.parentNode,c+1),b&&(d._moveEndPoint(f,a,!0),d._moveEndPoint(f,a)),d.setRng(f)}return a},isCollapsed:function(){var a=this,b=a.getRng(),c=a.getSel();return!(!b||b.item)&&(b.compareEndPoints?0===b.compareEndPoints("StartToEnd",b):!c||b.collapsed)},collapse:function(a){var b,c=this,d=c.getRng();d.item&&(b=d.item(0),d=c.win.document.body.createTextRange(),d.moveToElementText(b)),d.collapse(!!a),c.setRng(d)},getSel:function(){var a=this.win;return a.getSelection?a.getSelection():a.document.selection},getRng:function(a){function b(a,b,c){try{return b.compareBoundaryPoints(a,c)}catch(d){return-1}}var c,d,e,f,g,h=this;if(!h.win)return null;if(f=h.win.document,"undefined"==typeof f||null===f)return null;if(!a&&h.lastFocusBookmark){var i=h.lastFocusBookmark;return i.startContainer?(d=f.createRange(),d.setStart(i.startContainer,i.startOffset),d.setEnd(i.endContainer,i.endOffset)):d=i,d}if(a&&h.tridentSel)return h.tridentSel.getRangeAt(0);try{(c=h.getSel())&&(d=c.rangeCount>0?c.getRangeAt(0):c.createRange?c.createRange():f.createRange())}catch(j){}if(d=w(h.editor,[d])[0],t&&d&&d.setStart&&f.selection){try{g=f.selection.createRange()}catch(j){}g&&g.item&&(e=g.item(0),d=f.createRange(),d.setStartBefore(e),d.setEndAfter(e))}return d||(d=f.createRange?f.createRange():f.body.createTextRange()),d.setStart&&9===d.startContainer.nodeType&&d.collapsed&&(e=h.dom.getRoot(),d.setStart(e,0),d.setEnd(e,0)),h.selectedRange&&h.explicitRange&&(0===b(d.START_TO_START,d,h.selectedRange)&&0===b(d.END_TO_END,d,h.selectedRange)?d=h.explicitRange:(h.selectedRange=null,h.explicitRange=null)),d},setRng:function(a,b){var c,d,e,f=this;if(v(a))if(a.select){f.explicitRange=null;try{a.select()}catch(g){}}else if(f.tridentSel){if(a.cloneRange)try{f.tridentSel.addRange(a)}catch(g){}}else{if(c=f.getSel(),e=f.editor.fire("SetSelectionRange",{range:a,forward:b}),a=e.range,c){f.explicitRange=a;try{c.removeAllRanges(),c.addRange(a)}catch(g){}b===!1&&c.extend&&(c.collapse(a.endContainer,a.endOffset),c.extend(a.startContainer,a.startOffset)),f.selectedRange=c.rangeCount>0?c.getRangeAt(0):null}a.collapsed||a.startContainer!==a.endContainer||!c.setBaseAndExtent||l.ie||a.endOffset-a.startOffset<2&&a.startContainer.hasChildNodes()&&(d=a.startContainer.childNodes[a.startOffset],d&&"IMG"===d.tagName&&(c.setBaseAndExtent(a.startContainer,a.startOffset,a.endContainer,a.endOffset),c.anchorNode===a.startContainer&&c.focusNode===a.endContainer||c.setBaseAndExtent(d,0,d,1))),f.editor.fire("AfterSetSelectionRange",{range:a,forward:b})}},setNode:function(a){var b=this;return b.setContent(b.dom.getOuterHTML(a)),a},getNode:function(){function a(a,b){for(var c=a;a&&3===a.nodeType&&0===a.length;)a=b?a.nextSibling:a.previousSibling;return a||c}var b,c,d,e,f,g=this,h=g.getRng(),i=g.dom.getRoot();return h?(c=h.startContainer,d=h.endContainer,e=h.startOffset,f=h.endOffset,h.setStart?(b=h.commonAncestorContainer,!h.collapsed&&(c==d&&f-e<2&&c.hasChildNodes()&&(b=c.childNodes[e]),3===c.nodeType&&3===d.nodeType&&(c=c.length===e?a(c.nextSibling,!0):c.parentNode,d=0===f?a(d.previousSibling,!1):d.parentNode,c&&c===d))?c:b&&3==b.nodeType?b.parentNode:b):(b=h.item?h.item(0):h.parentElement(),b.ownerDocument!==g.win.document&&(b=i),b)):i},getSelectedBlocks:function(a,b){var c,d,e=this,f=e.dom,g=[];if(d=f.getRoot(),a=f.getParent(a||e.getStart(),f.isBlock),b=f.getParent(b||e.getEnd(),f.isBlock),a&&a!=d&&g.push(a),a&&b&&a!=b){c=a;for(var h=new j(a,d);(c=h.next())&&c!=b;)f.isBlock(c)&&g.push(c)}return b&&a!=b&&b!=d&&g.push(b),g},isForward:function(){var a,b,c=this.dom,d=this.getSel();return!(d&&d.anchorNode&&d.focusNode)||(a=c.createRng(),a.setStart(d.anchorNode,d.anchorOffset),a.collapse(!0),b=c.createRng(),b.setStart(d.focusNode,d.focusOffset),b.collapse(!0),a.compareBoundaryPoints(a.START_TO_START,b)<=0)},normalize:function(){var a=this,b=a.getRng();return new h(a.dom).normalize(b)&&!n.hasMultipleRanges(a.getSel())&&a.setRng(b,a.isForward()),b},selectorChanged:function(a,b){var c,d=this;return d.selectorChangedData||(d.selectorChangedData={},c={},d.editor.on("NodeChange",function(a){var b=a.element,e=d.dom,f=e.getParents(b,null,e.getRoot()),g={};r(d.selectorChangedData,function(a,b){r(f,function(d){if(e.is(d,b))return c[b]||(r(a,function(a){a(!0,{node:d,selector:b,parents:f})}),c[b]=a),g[b]=a,!1})}),r(c,function(a,d){g[d]||(delete c[d],r(a,function(a){a(!1,{node:b,selector:d,parents:f})}))})})),d.selectorChangedData[a]||(d.selectorChangedData[a]=[]),d.selectorChangedData[a].push(b),d},getScrollContainer:function(){for(var a,b=this.dom.getRoot();b&&"BODY"!=b.nodeName;){if(b.scrollHeight>b.clientHeight){a=b;break}b=b.parentNode}return a},scrollIntoView:function(a,b){i.scrollIntoView(this.editor,a,b)},placeCaretAt:function(a,b){this.setRng(h.getCaretRangeFromPoint(a,b,this.editor.getDoc()))},_moveEndPoint:function(a,b,c){var d=b,e=new j(b,d),f=this.dom.schema.getNonEmptyElements();do{if(3==b.nodeType&&0!==s(b.nodeValue).length)return void(c?a.setStart(b,0):a.setEnd(b,b.nodeValue.length));if(f[b.nodeName]&&!/^(TD|TH)$/.test(b.nodeName))return void(c?a.setStartBefore(b):"BR"==b.nodeName?a.setEndBefore(b):a.setEndAfter(b));if(l.ie&&l.ie<11&&this.dom.isBlock(b)&&this.dom.isEmpty(b))return void(c?a.setStart(b,0):a.setEnd(b,0))}while(b=c?e.next():e.prev());"BODY"==d.nodeName&&(c?a.setStart(d,0):a.setEnd(d,d.childNodes.length))},getBoundingClientRect:function(){var a=this.getRng();return a.collapsed?d.fromRangeStart(a).getClientRects()[0]:a.getBoundingClientRect()},destroy:function(){this.win=null,this.controlSelection.destroy()}},q}),g("tinymce.core.html.Node",[],function(){function a(a,b,c){var d,e,f=c?"lastChild":"firstChild",g=c?"prev":"next";if(a[f])return a[f];if(a!==b){if(d=a[g])return d;for(e=a.parent;e&&e!==b;e=e.parent)if(d=e[g])return d}}function b(a,b){this.name=a,this.type=b,1===b&&(this.attributes=[],this.attributes.map={})}var c=/^[ \t\r\n]*$/,d={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return b.prototype={replace:function(a){var b=this;return a.parent&&a.remove(),b.insert(a,b),b.remove(),b},attr:function(a,b){var c,d,e,f=this;if("string"!=typeof a){for(d in a)f.attr(d,a[d]);return f}if(c=f.attributes){if(b!==e){if(null===b){if(a in c.map)for(delete c.map[a],d=c.length;d--;)if(c[d].name===a)return c=c.splice(d,1),f;return f}if(a in c.map){for(d=c.length;d--;)if(c[d].name===a){c[d].value=b;break}}else c.push({name:a,value:b});return c.map[a]=b,f}return c.map[a]}},clone:function(){var a,c,d,e,f,g=this,h=new b(g.name,g.type);if(d=g.attributes){for(f=[],f.map={},a=0,c=d.length;a<c;a++)e=d[a],"id"!==e.name&&(f[f.length]={name:e.name,value:e.value},f.map[e.name]=e.value);h.attributes=f}return h.value=g.value,h.shortEnded=g.shortEnded,h},wrap:function(a){var b=this;return b.parent.insert(a,b),a.append(b),b},unwrap:function(){var a,b,c=this;for(a=c.firstChild;a;)b=a.next,c.insert(a,c,!0),a=b;c.remove()},remove:function(){var a=this,b=a.parent,c=a.next,d=a.prev;return b&&(b.firstChild===a?(b.firstChild=c,c&&(c.prev=null)):d.next=c,b.lastChild===a?(b.lastChild=d,d&&(d.next=null)):c.prev=d,a.parent=a.next=a.prev=null),a},append:function(a){var b,c=this;return a.parent&&a.remove(),b=c.lastChild,b?(b.next=a,a.prev=b,c.lastChild=a):c.lastChild=c.firstChild=a,a.parent=c,a},insert:function(a,b,c){var d;return a.parent&&a.remove(),d=b.parent||this,c?(b===d.firstChild?d.firstChild=a:b.prev.next=a,a.prev=b.prev,a.next=b,b.prev=a):(b===d.lastChild?d.lastChild=a:b.next.prev=a,a.next=b.next,a.prev=b,b.next=a),a.parent=d,a},getAll:function(b){var c,d=this,e=[];for(c=d.firstChild;c;c=a(c,d))c.name===b&&e.push(c);return e},empty:function(){var b,c,d,e=this;if(e.firstChild){for(b=[],d=e.firstChild;d;d=a(d,e))b.push(d);for(c=b.length;c--;)d=b[c],d.parent=d.firstChild=d.lastChild=d.next=d.prev=null}return e.firstChild=e.lastChild=null,e},isEmpty:function(b,d,e){var f,g,h=this,i=h.firstChild;if(d=d||{},i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(b[i.name])return!1;for(f=i.attributes.length;f--;)if(g=i.attributes[f].name,"name"===g||0===g.indexOf("data-mce-bookmark"))return!1}if(8===i.type)return!1;if(3===i.type&&!c.test(i.value))return!1;if(3===i.type&&i.parent&&d[i.parent.name]&&c.test(i.value))return!1;if(e&&e(i))return!1}while(i=a(i,h));return!0},walk:function(b){return a(this,null,b)}},b.create=function(a,c){var e,f;if(e=new b(a,d[a]||1),c)for(f in c)e.attr(f,c[f]);return e},b}),g("tinymce.core.html.SaxParser",["tinymce.core.html.Schema","tinymce.core.html.Entities","tinymce.core.util.Tools"],function(a,b,c){function d(a,b,c){var d,e,f,g,h=1;for(g=a.getShortEndedElements(),f=/<([!?\/])?([A-Za-z0-9\-_\:\.]+)((?:\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g,f.lastIndex=d=c;e=f.exec(b);){if(d=f.lastIndex,"/"===e[1])h--;else if(!e[1]){if(e[2]in g)continue;h++}if(0===h)break}return d}function e(e,i){function j(){}var k=this;e=e||{},k.schema=i=i||new a,e.fix_self_closing!==!1&&(e.fix_self_closing=!0),f("comment cdata text start end pi doctype".split(" "),function(a){a&&(k[a]=e[a]||j)}),k.parse=function(a){function f(a){var b,c;for(b=Q.length;b--&&Q[b].name!==a;);if(b>=0){for(c=Q.length-1;c>=b;c--)a=Q[c],a.valid&&O.end(a.name);Q.length=b}}function j(a,b,c,d,f){var h,i,j=/[\s\u0000-\u001F]+/g;if(b=b.toLowerCase(),c=b in u?b:S(c||d||f||""),w&&!r&&g(b)===!1){if(h=B[b],!h&&C){for(i=C.length;i--&&(h=C[i],!h.pattern.test(b)););i===-1&&(h=null)}if(!h)return;if(h.validValues&&!(c in h.validValues))return}if(T[b]&&!e.allow_script_urls){var k=c.replace(j,"");try{k=decodeURIComponent(k)}catch(l){k=unescape(k)}if(U.test(k))return;if(!e.allow_html_data_urls&&V.test(k)&&!/^data:image\//i.test(k))return}r&&(b in T||0===b.indexOf("on"))||(n.map[b]=c,n.push({name:b,value:c}))}var k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O=this,P=0,Q=[],R=0,S=b.decode,T=c.makeMap("src,href,data,background,formaction,poster"),U=/((java|vb)script|mhtml):/i,V=/^data:/i;for(J=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),K=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,t=i.getShortEndedElements(),I=e.self_closing_elements||i.getSelfClosingElements(),u=i.getBoolAttrs(),w=e.validate,s=e.remove_internals,N=e.fix_self_closing,L=i.getSpecialElements(),G=a+">";k=J.exec(G);){if(P<k.index&&O.text(S(a.substr(P,k.index-P))),l=k[6])l=l.toLowerCase(),":"===l.charAt(0)&&(l=l.substr(1)),f(l);else if(l=k[7]){if(k.index+k[0].length>a.length){O.text(S(a.substr(k.index))),P=k.index+k[0].length;continue}if(l=l.toLowerCase(),":"===l.charAt(0)&&(l=l.substr(1)),v=l in t,N&&I[l]&&Q.length>0&&Q[Q.length-1].name===l&&f(l),!w||(x=i.getElementRule(l))){if(y=!0,w&&(B=x.attributes,C=x.attributePatterns),(A=k[8])?(r=A.indexOf("data-mce-type")!==-1,r&&s&&(y=!1),n=[],n.map={},A.replace(K,j)):(n=[],n.map={}),w&&!r){if(D=x.attributesRequired,E=x.attributesDefault,F=x.attributesForced,H=x.removeEmptyAttrs,H&&!n.length&&(y=!1),F)for(o=F.length;o--;)z=F[o],q=z.name,M=z.value,"{$uid}"===M&&(M="mce_"+R++),n.map[q]=M,n.push({name:q,value:M});if(E)for(o=E.length;o--;)z=E[o],q=z.name,q in n.map||(M=z.value,"{$uid}"===M&&(M="mce_"+R++),n.map[q]=M,n.push({name:q,value:M}));if(D){for(o=D.length;o--&&!(D[o]in n.map););o===-1&&(y=!1)}if(z=n.map["data-mce-bogus"]){if("all"===z){P=d(i,a,J.lastIndex),J.lastIndex=P;continue}y=!1}}y&&O.start(l,n,v)}else y=!1;if(m=L[l]){m.lastIndex=P=k.index+k[0].length,(k=m.exec(a))?(y&&(p=a.substr(P,k.index-P)),P=k.index+k[0].length):(p=a.substr(P),P=a.length),y&&(p.length>0&&O.text(p,!0),O.end(l)),J.lastIndex=P;continue}v||(A&&A.indexOf("/")==A.length-1?y&&O.end(l):Q.push({name:l,valid:y}))}else(l=k[1])?(">"===l.charAt(0)&&(l=" "+l),e.allow_conditional_comments||"[if"!==l.substr(0,3).toLowerCase()||(l=" "+l),O.comment(l)):(l=k[2])?O.cdata(h(l)):(l=k[3])?O.doctype(l):(l=k[4])&&O.pi(l,k[5]);P=k.index+k[0].length}for(P<a.length&&O.text(S(a.substr(P))),o=Q.length-1;o>=0;o--)l=Q[o],l.valid&&O.end(l.name)}}var f=c.each,g=function(a){return 0===a.indexOf("data-")||0===a.indexOf("aria-")},h=function(a){return a.replace(/<!--|-->/g,"")};return e.findEndTag=d,e}),g("tinymce.core.html.DomParser",["tinymce.core.html.Node","tinymce.core.html.Schema","tinymce.core.html.SaxParser","tinymce.core.util.Tools"],function(a,b,c,d){var e=d.makeMap,f=d.each,g=d.explode,h=d.extend,i=function(b,c){b.padd_empty_with_br?c.empty().append(new a("br","1")).shortEnded=!0:c.empty().append(new a("#text","3")).value="\xa0"},j=function(a,b){return a&&a.firstChild===a.lastChild&&a.firstChild.name===b},k=function(a,b){var c=a.getElementRule(b.name);return c&&c.paddEmpty},l=function(a,b,c,d){return d.isEmpty(b,c,function(b){return k(a,b)})};return function(k,m){function n(b){var c,d,f,g,h,i,k,n,p,q,r,s,t,u,v,w;for(s=e("tr,td,th,tbody,thead,tfoot,table"),q=m.getNonEmptyElements(),r=m.getWhiteSpaceElements(),t=m.getTextBlockElements(),u=m.getSpecialElements(),c=0;c<b.length;c++)if(d=b[c],d.parent&&!d.fixed)if(t[d.name]&&"li"==d.parent.name){for(v=d.next;v&&t[v.name];)v.name="li",v.fixed=!0,d.parent.insert(v,d.parent),v=v.next;d.unwrap(d)}else{for(g=[d],f=d.parent;f&&!m.isValidChild(f.name,d.name)&&!s[f.name];f=f.parent)g.push(f);if(f&&g.length>1){for(g.reverse(),h=i=o.filterNode(g[0].clone()),p=0;p<g.length-1;p++){for(m.isValidChild(i.name,g[p].name)?(k=o.filterNode(g[p].clone()),i.append(k)):k=i,n=g[p].firstChild;n&&n!=g[p+1];)w=n.next,k.append(n),n=w;i=k}l(m,q,r,h)?f.insert(d,g[0],!0):(f.insert(h,g[0],!0),f.insert(d,h)),f=g[0],(l(m,q,r,f)||j(f,"br"))&&f.empty().remove()}else if(d.parent){if("li"===d.name){if(v=d.prev,v&&("ul"===v.name||"ul"===v.name)){v.append(d);continue}if(v=d.next,v&&("ul"===v.name||"ul"===v.name)){v.insert(d,v.firstChild,!0);continue}d.wrap(o.filterNode(new a("ul",1)));continue}m.isValidChild(d.parent.name,"div")&&m.isValidChild("div",d.name)?d.wrap(o.filterNode(new a("div",1))):u[d.name]?d.empty().remove():d.unwrap()}}}var o=this,p={},q=[],r={},s={};k=k||{},k.validate=!("validate"in k)||k.validate,k.root_name=k.root_name||"body",o.schema=m=m||new b,o.filterNode=function(a){var b,c,d;c in p&&(d=r[c],d?d.push(a):r[c]=[a]),b=q.length;for(;b--;)c=q[b].name,c in a.attributes.map&&(d=s[c],d?d.push(a):s[c]=[a]);return a},o.addNodeFilter=function(a,b){f(g(a),function(a){var c=p[a];c||(p[a]=c=[]),c.push(b)})},o.addAttributeFilter=function(a,b){f(g(a),function(a){var c;for(c=0;c<q.length;c++)if(q[c].name===a)return void q[c].callbacks.push(b);q.push({name:a,callbacks:[b]})})},o.parse=function(b,d){function f(){function a(a){a&&(d=a.firstChild,d&&3==d.type&&(d.value=d.value.replace(F,"")),d=a.lastChild,d&&3==d.type&&(d.value=d.value.replace(H,"")))}var b,c,d=u.firstChild;if(m.isValidChild(u.name,N.toLowerCase())){for(;d;)b=d.next,3==d.type||1==d.type&&"p"!==d.name&&!E[d.name]&&!d.attr("data-mce-type")?c?c.append(d):(c=g(N,1),c.attr(k.forced_root_block_attrs),u.insert(c,d),c.append(d)):(a(c),c=null),d=b;a(c)}}function g(b,c){var d,e=new a(b,c);return b in p&&(d=r[b],d?d.push(e):r[b]=[e]),e}function j(a){var b,c,d,e,f=m.getBlockElements();for(b=a.prev;b&&3===b.type;){if(d=b.value.replace(H,""),d.length>0)return void(b.value=d);if(c=b.next){if(3==c.type&&c.value.length){b=b.prev;continue}if(!f[c.name]&&"script"!=c.name&&"style"!=c.name){b=b.prev;continue}}e=b.prev,b.remove(),b=e}}function o(a){var b,c={};for(b in a)"li"!==b&&"p"!=b&&(c[b]=a[b]);return c}var t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O=[];if(d=d||{},r={},s={},E=h(e("script,style,head,html,body,title,meta,param"),m.getBlockElements()),M=m.getNonEmptyElements(),L=m.children,D=k.validate,N="forced_root_block"in d?d.forced_root_block:k.forced_root_block,K=m.getWhiteSpaceElements(),F=/^[ \t\r\n]+/,H=/[ \t\r\n]+$/,I=/[ \t\r\n]+/g,J=/^[ \t\r\n]+$/,t=new c({validate:D,allow_script_urls:k.allow_script_urls,allow_conditional_comments:k.allow_conditional_comments,self_closing_elements:o(m.getSelfClosingElements()),cdata:function(a){v.append(g("#cdata",4)).value=a},text:function(a,b){var c;G||(a=a.replace(I," "),v.lastChild&&E[v.lastChild.name]&&(a=a.replace(F,""))),0!==a.length&&(c=g("#text",3),c.raw=!!b,v.append(c).value=a)},comment:function(a){v.append(g("#comment",8)).value=a},pi:function(a,b){v.append(g(a,7)).value=b,j(v)},doctype:function(a){var b;b=v.append(g("#doctype",10)),b.value=a,j(v)},start:function(a,b,c){var d,e,f,h,i;if(f=D?m.getElementRule(a):{}){for(d=g(f.outputName||a,1),d.attributes=b,d.shortEnded=c,v.append(d),i=L[v.name],i&&L[d.name]&&!i[d.name]&&O.push(d),e=q.length;e--;)h=q[e].name,h in b.map&&(B=s[h],B?B.push(d):s[h]=[d]);E[a]&&j(d),c||(v=d),!G&&K[a]&&(G=!0)}},end:function(a){var b,c,d,e,f;if(c=D?m.getElementRule(a):{}){if(E[a]&&!G){if(b=v.firstChild,b&&3===b.type)if(d=b.value.replace(F,""),d.length>0)b.value=d,b=b.next;else for(e=b.next,b.remove(),b=e;b&&3===b.type;)d=b.value,e=b.next,(0===d.length||J.test(d))&&(b.remove(),b=e),b=e;if(b=v.lastChild,b&&3===b.type)if(d=b.value.replace(H,""),d.length>0)b.value=d,b=b.prev;else for(e=b.prev,b.remove(),b=e;b&&3===b.type;)d=b.value,e=b.prev,(0===d.length||J.test(d))&&(b.remove(),b=e),b=e}if(G&&K[a]&&(G=!1),(c.removeEmpty||c.paddEmpty)&&l(m,M,K,v))if(c.paddEmpty)i(k,v);else if(!v.attributes.map.name&&!v.attributes.map.id)return f=v.parent,E[v.name]?v.empty().remove():v.unwrap(),void(v=f);v=v.parent}}},m),u=v=new a(d.context||k.root_name,11),t.parse(b),D&&O.length&&(d.context?d.invalid=!0:n(O)),N&&("body"==u.name||d.isRootContent)&&f(),!d.invalid){for(C in r){for(B=p[C],w=r[C],z=w.length;z--;)w[z].parent||w.splice(z,1);for(x=0,y=B.length;x<y;x++)B[x](w,C,d)}for(x=0,y=q.length;x<y;x++)if(B=q[x],B.name in s){for(w=s[B.name],z=w.length;z--;)w[z].parent||w.splice(z,1);for(z=0,A=B.callbacks.length;z<A;z++)B.callbacks[z](w,B.name,d)}}return u},k.remove_trailing_brs&&o.addNodeFilter("br",function(b){var c,d,e,f,g,j,n,o,p=b.length,q=h({},m.getBlockElements()),r=m.getNonEmptyElements(),s=m.getNonEmptyElements();for(q.body=1,c=0;c<p;c++)if(d=b[c],e=d.parent,q[d.parent.name]&&d===e.lastChild){for(g=d.prev;g;){if(j=g.name,"span"!==j||"bookmark"!==g.attr("data-mce-type")){if("br"!==j)break;if("br"===j){d=null;break}}g=g.prev}d&&(d.remove(),l(m,r,s,e)&&(n=m.getElementRule(e.name),n&&(n.removeEmpty?e.remove():n.paddEmpty&&i(k,e))))}else{for(f=d;e&&e.firstChild===f&&e.lastChild===f&&(f=e,!q[e.name]);)e=e.parent;f===e&&k.padd_empty_with_br!==!0&&(o=new a("#text",3),o.value="\xa0",d.replace(o))}}),o.addAttributeFilter("href",function(a){var b,c=a.length,e=function(a){var b=a.split(" ").filter(function(a){return a.length>0});return b.concat(["noopener"]).sort().join(" ")},f=function(a){var b=a?d.trim(a):"";return/\b(noopener)\b/g.test(b)?b:e(b)};if(!k.allow_unsafe_link_target)for(;c--;)b=a[c],"a"===b.name&&"_blank"===b.attr("target")&&b.attr("rel",f(b.attr("rel")))}),k.allow_html_in_named_anchor||o.addAttributeFilter("id,name",function(a){for(var b,c,d,e,f=a.length;f--;)if(e=a[f],"a"===e.name&&e.firstChild&&!e.attr("href")){d=e.parent,b=e.lastChild;do c=b.prev,d.insert(b,e),b=c;while(b)}}),k.fix_list_elements&&o.addNodeFilter("ul,ol",function(b){for(var c,d,e=b.length;e--;)if(c=b[e],d=c.parent,"ul"===d.name||"ol"===d.name)if(c.prev&&"li"===c.prev.name)c.prev.append(c);else{var f=new a("li",1);f.attr("style","list-style-type: none"),c.wrap(f)}}),k.validate&&m.getValidClasses()&&o.addAttributeFilter("class",function(a){for(var b,c,d,e,f,g,h,i=a.length,j=m.getValidClasses();i--;){for(b=a[i],c=b.attr("class").split(" "),f="",d=0;d<c.length;d++)e=c[d],h=!1,g=j["*"],g&&g[e]&&(h=!0),g=j[b.name],!h&&g&&g[e]&&(h=!0),h&&(f&&(f+=" "),f+=e);f.length||(f=null),b.attr("class",f)}})}}),g("tinymce.core.html.Writer",["tinymce.core.html.Entities","tinymce.core.util.Tools"],function(a,b){var c=b.makeMap;return function(b){var d,e,f,g,h,i=[];return b=b||{},d=b.indent,e=c(b.indent_before||""),f=c(b.indent_after||""),g=a.getEncodeFunc(b.entity_encoding||"raw",b.entities),h="html"==b.element_format,{start:function(a,b,c){var j,k,l,m;if(d&&e[a]&&i.length>0&&(m=i[i.length-1],m.length>0&&"\n"!==m&&i.push("\n")),i.push("<",a),b)for(j=0,k=b.length;j<k;j++)l=b[j],i.push(" ",l.name,'="',g(l.value,!0),'"');!c||h?i[i.length]=">":i[i.length]=" />",c&&d&&f[a]&&i.length>0&&(m=i[i.length-1],m.length>0&&"\n"!==m&&i.push("\n"))},end:function(a){var b;i.push("</",a,">"),d&&f[a]&&i.length>0&&(b=i[i.length-1],b.length>0&&"\n"!==b&&i.push("\n"))},text:function(a,b){a.length>0&&(i[i.length]=b?a:g(a))},cdata:function(a){i.push("<![CDATA[",a,"]]>")},comment:function(a){i.push("<!--",a,"-->")},pi:function(a,b){b?i.push("<?",a," ",g(b),"?>"):i.push("<?",a,"?>"),d&&i.push("\n")},doctype:function(a){i.push("<!DOCTYPE",a,">",d?"\n":"")},reset:function(){i.length=0},getContent:function(){return i.join("").replace(/\n$/,"")}}}}),g("tinymce.core.html.Serializer",["tinymce.core.html.Writer","tinymce.core.html.Schema"],function(a,b){return function(c,d){var e=this,f=new a(c);c=c||{},c.validate=!("validate"in c)||c.validate,e.schema=d=d||new b,e.writer=f,e.serialize=function(a){function b(a){var c,h,i,j,k,l,m,n,o,p=e[a.type];if(p)p(a);else{if(c=a.name,h=a.shortEnded,i=a.attributes,g&&i&&i.length>1&&(l=[],l.map={},o=d.getElementRule(a.name))){for(m=0,n=o.attributesOrder.length;m<n;m++)j=o.attributesOrder[m],j in i.map&&(k=i.map[j],l.map[j]=k,l.push({name:j,value:k}));for(m=0,n=i.length;m<n;m++)j=i[m].name,j in l.map||(k=i.map[j],l.map[j]=k,l.push({name:j,value:k}));i=l}if(f.start(a.name,i,h),!h){if(a=a.firstChild)do b(a);while(a=a.next);f.end(c)}}}var e,g;return g=c.validate,e={3:function(a){f.text(a.value,a.raw)},8:function(a){f.comment(a.value)},7:function(a){f.pi(a.name,a.value)},10:function(a){f.doctype(a.value)},4:function(a){f.cdata(a.value)},11:function(a){if(a=a.firstChild)do b(a);while(a=a.next)}},f.reset(),1!=a.type||c.inner?e[11](a):b(a),f.getContent()}}}),g("tinymce.core.dom.Serializer",["tinymce.core.dom.DOMUtils","tinymce.core.html.DomParser","tinymce.core.html.SaxParser","tinymce.core.html.Entities","tinymce.core.html.Serializer","tinymce.core.html.Node","tinymce.core.html.Schema","tinymce.core.Env","tinymce.core.util.Tools","tinymce.core.text.Zwsp"],function(a,b,c,d,e,f,g,h,i,j){function k(a){function b(a){return a&&"br"===a.name}var c,d;c=a.lastChild,b(c)&&(d=c.prev,b(d)&&(c.remove(),d.remove()))}var l=i.each,m=i.trim,n=a.DOM;return function(a,f){function o(a){var b=new RegExp(["<span[^>]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","\\s?("+v.join("|")+')="[^"]+"'].join("|"),"gi");return a=j.trim(a.replace(b,""))}function p(a){var b,d,e,g,h,i=a,j=/<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,k=f.schema;for(i=o(i),h=k.getShortEndedElements();g=j.exec(i);)d=j.lastIndex,e=g[0].length,b=h[g[1]]?d:c.findEndTag(k,i,d),i=i.substring(0,d-e)+i.substring(b),j.lastIndex=d-e;return i}function q(){return p(f.getBody().innerHTML)}function r(a){i.inArray(v,a)===-1&&(u.addAttributeFilter(a,function(a,b){for(var c=a.length;c--;)a[c].attr(b,null)}),v.push(a))}var s,t,u,v=["data-mce-selected"];return f&&(s=f.dom,t=f.schema),s=s||n,t=t||new g(a),a.entity_encoding=a.entity_encoding||"named",a.remove_trailing_brs=!("remove_trailing_brs"in a)||a.remove_trailing_brs,u=new b(a,t),u.addAttributeFilter("data-mce-tabindex",function(a,b){for(var c,d=a.length;d--;)c=a[d],c.attr("tabindex",c.attributes.map["data-mce-tabindex"]),c.attr(b,null)}),u.addAttributeFilter("src,href,style",function(b,c){for(var d,e,f,g=b.length,h="data-mce-"+c,i=a.url_converter,j=a.url_converter_scope;g--;)d=b[g],e=d.attributes.map[h],e!==f?(d.attr(c,e.length>0?e:null),d.attr(h,null)):(e=d.attributes.map[c],"style"===c?e=s.serializeStyle(s.parseStyle(e),d.name):i&&(e=i.call(j,e,c,d.name)),d.attr(c,e.length>0?e:null))}),u.addAttributeFilter("class",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr("class"),c&&(c=b.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),b.attr("class",c.length>0?c:null))}),u.addAttributeFilter("data-mce-type",function(a,b,c){for(var d,e=a.length;e--;)d=a[e],"bookmark"!==d.attributes.map["data-mce-type"]||c.cleanup||d.remove()}),u.addNodeFilter("noscript",function(a){for(var b,c=a.length;c--;)b=a[c].firstChild,b&&(b.value=d.decode(b.value))}),u.addNodeFilter("script,style",function(a,b){function c(a){return a.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var d,e,f,g=a.length;g--;)d=a[g],e=d.firstChild?d.firstChild.value:"","script"===b?(f=d.attr("type"),f&&d.attr("type","mce-no/type"==f?null:f.replace(/^mce\-/,"")),e.length>0&&(d.firstChild.value="// <![CDATA[\n"+c(e)+"\n// ]]>")):e.length>0&&(d.firstChild.value="<!--\n"+c(e)+"\n-->")}),u.addNodeFilter("#comment",function(a){for(var b,c=a.length;c--;)b=a[c],0===b.value.indexOf("[CDATA[")?(b.name="#cdata",b.type=4,b.value=b.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===b.value.indexOf("mce:protected ")&&(b.name="#text",
-b.type=3,b.raw=!0,b.value=unescape(b.value).substr(14))}),u.addNodeFilter("xml:namespace,input",function(a,b){for(var c,d=a.length;d--;)c=a[d],7===c.type?c.remove():1===c.type&&("input"!==b||"type"in c.attributes.map||c.attr("type","text"))}),u.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize",function(a,b){for(var c=a.length;c--;)a[c].attr(b,null)}),{schema:t,addNodeFilter:u.addNodeFilter,addAttributeFilter:u.addAttributeFilter,serialize:function(b,c){var d,f,g,i,n,o,p=this;return h.ie&&s.select("script,style,select,map").length>0?(n=b.innerHTML,b=b.cloneNode(!1),s.setHTML(b,n)):b=b.cloneNode(!0),d=document.implementation,d.createHTMLDocument&&(f=d.createHTMLDocument(""),l("BODY"==b.nodeName?b.childNodes:[b],function(a){f.body.appendChild(f.importNode(a,!0))}),b="BODY"!=b.nodeName?f.body.firstChild:f.body,g=s.doc,s.doc=f),c=c||{},c.format=c.format||"html",c.selection&&(c.forced_root_block=""),c.no_events||(c.node=b,p.onPreProcess(c)),n=j.trim(m(c.getInner?b.innerHTML:s.getOuterHTML(b))),o=u.parse(n,c),k(o),i=new e(a,t),c.content=i.serialize(o),c.no_events||p.onPostProcess(c),g&&(s.doc=g),c.node=null,c.content},addRules:function(a){t.addValidElements(a)},setRules:function(a){t.setValidElements(a)},onPreProcess:function(a){f&&f.fire("PreProcess",a)},onPostProcess:function(a){f&&f.fire("PostProcess",a)},addTempAttr:r,trimHtml:o,getTrimmedContent:q,trimContent:p}}}),g("tinymce.core.delete.DeleteUtils",["ephox.katamari.api.Option","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","ephox.sugar.api.search.PredicateFind","tinymce.core.dom.ElementType"],function(a,b,c,d,e){var f=function(a){return function(d){return b.eq(a,c.fromDom(d.dom().parentNode))}},g=function(c,g){return b.contains(c,g)?d.closest(g,function(a){return e.isTextBlock(a)||e.isListItem(a)},f(c)):a.none()},h=function(a){var b=a.getBody(),c=b.firstChild&&a.dom.isBlock(b.firstChild)?b.firstChild:b;a.selection.setCursorLocation(c,0)},i=function(a){a.dom.isEmpty(a.getBody())&&(a.setContent(""),h(a))};return{getParentBlock:g,paddEmptyBody:i}}),g("ephox.sugar.api.search.SelectorExists",["ephox.sugar.api.search.SelectorFind"],function(a){var b=function(b){return a.first(b).isSome()},c=function(b,c,d){return a.ancestor(b,c,d).isSome()},d=function(b,c){return a.sibling(b,c).isSome()},e=function(b,c){return a.child(b,c).isSome()},f=function(b,c){return a.descendant(b,c).isSome()},g=function(b,c,d){return a.closest(b,c,d).isSome()};return{any:b,ancestor:c,sibling:d,child:e,descendant:f,closest:g}}),g("tinymce.core.dom.Empty",["ephox.katamari.api.Fun","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","ephox.sugar.api.search.SelectorExists","tinymce.core.caret.CaretCandidate","tinymce.core.dom.NodeType","tinymce.core.dom.TreeWalker"],function(a,b,c,d,e,f,g){var h=function(e,f){var g=c.fromDom(e),h=c.fromDom(f);return d.ancestor(h,"pre,code",a.curry(b.eq,g))},i=function(a,b){return f.isText(b)&&/^[ \t\r\n]*$/.test(b.data)&&h(a,b)===!1},j=function(a){return f.isElement(a)&&"A"===a.nodeName&&a.hasAttribute("name")},k=function(a,b){return e.isCaretCandidate(b)&&i(a,b)===!1||j(b)||l(b)},l=f.hasAttribute("data-mce-bookmark"),m=f.hasAttribute("data-mce-bogus"),n=f.hasAttributeValue("data-mce-bogus","all"),o=function(a){var b,c,d=0;if(k(a,a))return!1;if(c=a.firstChild,!c)return!0;b=new g(c,a);do if(n(c))c=b.next(!0);else if(m(c))c=b.next();else if(f.isBr(c))d++,c=b.next();else{if(k(a,c))return!1;c=b.next()}while(c);return d<=1},p=function(a){return o(a.dom())};return{isEmpty:p}}),g("tinymce.core.delete.BlockBoundary",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.katamari.api.Options","ephox.katamari.api.Struct","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","ephox.sugar.api.node.Node","ephox.sugar.api.search.PredicateFind","ephox.sugar.api.search.Traverse","tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.delete.DeleteUtils","tinymce.core.dom.Empty","tinymce.core.dom.NodeType"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=e.immutable("block","position"),q=e.immutable("from","to"),r=function(a,b){var c=g.fromDom(a),d=g.fromDom(b.container());return m.getParentBlock(c,d).map(function(a){return p(a,b)})},s=function(a){return f.eq(a.from().block(),a.to().block())===!1},t=function(a){return j.parent(a.from().block()).bind(function(b){return j.parent(a.to().block()).filter(function(a){return f.eq(b,a)})}).isSome()},u=function(a){return o.isContentEditableFalse(a.from().block())===!1&&o.isContentEditableFalse(a.to().block())===!1},v=function(a,b,d){return o.isBr(d.position().getNode())&&n.isEmpty(d.block())===!1?k.positionIn(!1,d.block().dom()).bind(function(e){return e.isEqual(d.position())?k.fromPosition(b,a,e).bind(function(b){return r(a,b)}):c.some(d)}).getOr(d):d},w=function(a,b,c){var e=r(a,l.fromRangeStart(c)),f=e.bind(function(c){return k.fromPosition(b,a,c.position()).bind(function(c){return r(a,c).map(function(c){return v(a,b,c)})})});return d.liftN([e,f],q).filter(function(a){return s(a)&&t(a)&&u(a)})},x=function(a,b,d){return d.collapsed?w(a,b,d):c.none()};return{read:x}}),g("tinymce.core.delete.MergeBlocks",["ephox.katamari.api.Arr","ephox.katamari.api.Option","ephox.sugar.api.dom.Compare","ephox.sugar.api.dom.Insert","ephox.sugar.api.dom.Remove","ephox.sugar.api.node.Element","ephox.sugar.api.search.Traverse","tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.dom.ElementType","tinymce.core.dom.Empty","tinymce.core.dom.NodeType","tinymce.core.dom.Parents"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(b){var c=g.children(b);return a.findIndex(c,j.isBlock).fold(function(){return c},function(a){return c.slice(0,a)})},o=function(b){var c=n(b);return a.each(c,function(a){e.remove(a)}),c},p=function(a,b){h.positionIn(a,b.dom()).each(function(a){var b=a.getNode();l.isBr(b)&&e.remove(f.fromDom(b))})},q=function(b,c){var d=m.parentsAndSelf(c,b);return a.find(d.reverse(),k.isEmpty).each(e.remove)},r=function(a,d){var e=g.parents(d,function(b){return c.eq(b,a)});return b.from(e[e.length-2])},s=function(a,d){return c.contains(d,a)?g.parent(a).bind(function(e){return c.eq(e,d)?b.some(a):r(d,a)}):b.none()},t=function(b,c,f){if(k.isEmpty(f))return e.remove(f),h.firstPositionIn(c.dom());p(!0,c),p(!1,f);var g=o(c);return s(c,f).fold(function(){q(b,c);var e=h.lastPositionIn(f.dom());return a.each(g,function(a){d.append(f,a)}),e},function(e){var j=h.prevPosition(f.dom(),i.before(e.dom()));return a.each(g,function(a){d.before(e,a)}),q(b,c),j})},u=function(a,b,c,d){return b?t(a,d,c):t(a,c,d)};return{mergeBlocks:u}}),g("tinymce.core.delete.BlockBoundaryDelete",["ephox.sugar.api.node.Element","tinymce.core.delete.BlockBoundary","tinymce.core.delete.MergeBlocks"],function(a,b,c){var d=function(d,e){var f,g=a.fromDom(d.getBody());return f=b.read(g.dom(),e,d.selection.getRng()).bind(function(a){return c.mergeBlocks(g,e,a.from().block(),a.to().block())}),f.each(function(a){d.selection.setRng(a.toRange())}),f.isSome()};return{backspaceDelete:d}}),g("tinymce.core.delete.BlockRangeDelete",["ephox.katamari.api.Options","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.delete.DeleteUtils","tinymce.core.delete.MergeBlocks"],function(a,b,c,d,e,f,g){var h=function(d,e){var h=e.getRng();return a.liftN([f.getParentBlock(d,c.fromDom(h.startContainer)),f.getParentBlock(d,c.fromDom(h.endContainer))],function(a,c){return b.eq(a,c)===!1&&(h.deleteContents(),g.mergeBlocks(d,!0,a,c).each(function(a){e.setRng(a.toRange())}),!0)}).getOr(!1)},i=function(a,b){var c=d.prevPosition(a.dom(),e.fromRangeStart(b)).isNone(),f=d.nextPosition(a.dom(),e.fromRangeEnd(b)).isNone();return c&&f},j=function(a){return a.setContent(""),a.selection.setCursorLocation(),!0},k=function(a){var b=c.fromDom(a.getBody()),d=a.selection.getRng();return i(b,d)?j(a):h(b,a.selection)},l=function(a,b){return!a.selection.isCollapsed()&&k(a,a.selection.getRng())};return{backspaceDelete:l}}),g("ephox.katamari.api.Adt",["ephox.katamari.api.Arr","ephox.katamari.api.Obj","ephox.katamari.api.Type","global!Array","global!Error","global!console"],function(a,b,c,d,e,f){var g=function(g){if(!c.isArray(g))throw new e("cases must be an array");if(0===g.length)throw new e("there must be at least one case");var h=[],i={};return a.each(g,function(j,k){var l=b.keys(j);if(1!==l.length)throw new e("one and only one name per case");var m=l[0],n=j[m];if(void 0!==i[m])throw new e("duplicate key detected:"+m);if("cata"===m)throw new e("cannot have a case named cata (sorry)");if(!c.isArray(n))throw new e("case arguments must be an array");h.push(m),i[m]=function(){var c=arguments.length;if(c!==n.length)throw new e("Wrong number of arguments to case "+m+". Expected "+n.length+" ("+n+"), got "+c);for(var i=new d(c),j=0;j<i.length;j++)i[j]=arguments[j];var l=function(c){var d=b.keys(c);if(h.length!==d.length)throw new e("Wrong number of arguments to match. Expected: "+h.join(",")+"\nActual: "+d.join(","));var f=a.forall(h,function(b){return a.contains(d,b)});if(!f)throw new e("Not all branches were specified when using match. Specified: "+d.join(", ")+"\nRequired: "+h.join(", "));return c[m].apply(null,i)};return{fold:function(){if(arguments.length!==g.length)throw new e("Wrong number of arguments to fold. Expected "+g.length+", got "+arguments.length);var a=arguments[k];return a.apply(null,i)},match:l,log:function(a){f.log(a,{constructors:h,constructor:m,params:i})}}}}),i};return{generate:g}}),g("tinymce.core.delete.CefDeleteAction",["ephox.katamari.api.Adt","ephox.katamari.api.Option","ephox.sugar.api.node.Element","tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils","tinymce.core.delete.DeleteUtils","tinymce.core.dom.Empty","tinymce.core.dom.NodeType"],function(a,b,c,d,e,f,g,h,i){var j=a.generate([{remove:["element"]},{moveToElement:["element"]},{moveToPosition:["position"]}]),k=function(a,b){var c=b.getNode(a===!1),d=a?"after":"before";return i.isElement(c)&&c.getAttribute("data-mce-caret")===d},l=function(a,d,e,f){var i=f.getNode(d===!1);return g.getParentBlock(c.fromDom(a),c.fromDom(e.getNode())).map(function(a){return h.isEmpty(a)?j.remove(a.dom()):j.moveToElement(i)}).orThunk(function(){return b.some(j.moveToElement(i))})},m=function(a,c,e){return d.fromPosition(c,a,e).bind(function(d){return c&&i.isContentEditableFalse(d.getNode())?l(a,c,e,d):c===!1&&i.isContentEditableFalse(d.getNode(!0))?l(a,c,e,d):c&&f.isAfterContentEditableFalse(e)?b.some(j.moveToPosition(d)):c===!1&&f.isBeforeContentEditableFalse(e)?b.some(j.moveToPosition(d)):b.none()})},n=function(a,c){return a&&i.isContentEditableFalse(c.nextSibling)?b.some(j.moveToElement(c.nextSibling)):a===!1&&i.isContentEditableFalse(c.previousSibling)?b.some(j.moveToElement(c.previousSibling)):b.none()},o=function(a,c,d){return k(c,d)?n(c,d.getNode(c===!1)).fold(function(){return m(a,c,d)},b.some):m(a,c,d)},p=function(a,c,d){var g=f.normalizeRange(c?1:-1,a,d),h=e.fromRangeStart(g);return c===!1&&f.isAfterContentEditableFalse(h)?b.some(j.remove(h.getNode(!0))):c&&f.isBeforeContentEditableFalse(h)?b.some(j.remove(h.getNode())):o(a,c,h)};return{read:p}}),g("tinymce.core.delete.DeleteElement",["ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.katamari.api.Options","ephox.sugar.api.dom.Insert","ephox.sugar.api.dom.Remove","ephox.sugar.api.node.Element","ephox.sugar.api.node.Node","ephox.sugar.api.search.PredicateFind","ephox.sugar.api.search.Traverse","tinymce.core.caret.CaretCandidate","tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.dom.Empty","tinymce.core.dom.NodeType"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o=function(a,b){var c=a.container(),d=a.offset();return l.isTextPosition(a)===!1&&c===b.parentNode&&d>l.before(b).offset()},p=function(a,b){return o(b,a)?new l(b.container(),b.offset()-1):b},q=function(a){return n.isText(a)?new l(a,0):l.before(a)},r=function(a){return n.isText(a)?new l(a,a.data.length):l.after(a)},s=function(a){return j.isCaretCandidate(a.previousSibling)?b.some(r(a.previousSibling)):a.previousSibling?k.lastPositionIn(a.previousSibling):b.none()},t=function(a){return j.isCaretCandidate(a.nextSibling)?b.some(q(a.nextSibling)):a.nextSibling?k.firstPositionIn(a.nextSibling):b.none()},u=function(a,c){var d=l.before(c.previousSibling?c.previousSibling:c.parentNode);return k.prevPosition(a,d).fold(function(){return k.nextPosition(a,l.after(c))},b.some)},v=function(a,c){return k.nextPosition(a,l.after(c)).fold(function(){return k.prevPosition(a,l.before(c))},b.some)},w=function(a,b){return s(b).orThunk(function(){return t(b)}).orThunk(function(){return u(a,b)})},x=function(a,b){return t(b).orThunk(function(){return s(b)}).orThunk(function(){return v(a,b)})},y=function(a,b,c){return a?x(b,c):w(b,c)},z=function(b,c,d){return y(b,c,d).map(a.curry(p,d))},A=function(a,b,c){c.fold(function(){a.focus()},function(c){a.selection.setRng(c.toRange(),b)})},B=function(a){return function(b){return b.dom()===a}},C=function(a,b){return b&&a.schema.getBlockElements().hasOwnProperty(g.name(b))},D=function(a){if(m.isEmpty(a)){var c=f.fromHtml('<br data-mce-bogus="1">');return e.empty(a),d.append(a,c),b.some(l.before(c.dom()))}return b.none()},E=function(a,b){return c.liftN([i.prevSibling(a),i.nextSibling(a),b],function(b,c,d){var f,g=b.dom(),h=c.dom();return n.isText(g)&&n.isText(h)?(f=g.data.length,g.appendData(h.data),e.remove(c),e.remove(a),d.container()===h?new l(g,f):d):(e.remove(a),d)}).orThunk(function(){return e.remove(a),b})},F=function(c,d,e){var f=z(d,c.getBody(),e.dom()),g=h.ancestor(e,a.curry(C,c),B(c.getBody())),i=E(e,f);g.bind(D).fold(function(){A(c,d,i)},function(a){A(c,d,b.some(a))})};return{deleteElement:F}}),g("tinymce.core.delete.CefDelete",["ephox.katamari.api.Arr","ephox.sugar.api.dom.Remove","ephox.sugar.api.node.Element","ephox.sugar.api.search.SelectorFilter","tinymce.core.caret.CaretPosition","tinymce.core.delete.CefDeleteAction","tinymce.core.delete.DeleteElement","tinymce.core.delete.DeleteUtils","tinymce.core.dom.NodeType"],function(a,b,c,d,e,f,g,h,i){var j=function(a,b){return function(d){return g.deleteElement(a,b,c.fromDom(d)),!0}},k=function(a,b){return function(c){var d=b?e.before(c):e.after(c);return a.selection.setRng(d.toRange()),!0}},l=function(a){return function(b){return a.selection.setRng(b.toRange()),!0}},m=function(a,b){var c=f.read(a.getBody(),b,a.selection.getRng()).map(function(c){return c.fold(j(a,b),k(a,b),l(a))});return c.getOr(!1)},n=function(c){a.each(d.descendants(c,".mce-offscreen-selection"),b.remove)},o=function(a,b){var d=a.selection.getNode();return!!i.isContentEditableFalse(d)&&(n(c.fromDom(a.getBody())),g.deleteElement(a,b,c.fromDom(a.selection.getNode())),h.paddEmptyBody(a),!0)},p=function(a,b){for(;b&&b!==a;){if(i.isContentEditableTrue(b)||i.isContentEditableFalse(b))return b;b=b.parentNode}return null},q=function(a){var b,c=p(a.getBody(),a.selection.getNode());return i.isContentEditableTrue(c)&&a.dom.isBlock(c)&&a.dom.isEmpty(c)&&(b=a.dom.create("br",{"data-mce-bogus":"1"}),a.dom.setHTML(c,""),c.appendChild(b),a.selection.setRng(e.before(b).toRange())),!0},r=function(a,b){return a.selection.isCollapsed()?m(a,b):o(a,b)};return{backspaceDelete:r,paddEmptyElement:q}}),g("tinymce.core.caret.CaretContainerInline",["ephox.katamari.api.Fun","tinymce.core.dom.NodeType","tinymce.core.text.Zwsp"],function(a,b,c){var d=b.isText,e=function(a){return d(a)&&a.data[0]===c.ZWSP},f=function(a){return d(a)&&a.data[a.data.length-1]===c.ZWSP},g=function(a){return a.ownerDocument.createTextNode(c.ZWSP)},h=function(a){if(d(a.previousSibling))return f(a.previousSibling)?a.previousSibling:(a.previousSibling.appendData(c.ZWSP),a.previousSibling);if(d(a))return e(a)?a:(a.insertData(0,c.ZWSP),a);var b=g(a);return a.parentNode.insertBefore(b,a),b},i=function(a){if(d(a.nextSibling))return e(a.nextSibling)?a.nextSibling:(a.nextSibling.insertData(0,c.ZWSP),a.nextSibling);if(d(a))return f(a)?a:(a.appendData(c.ZWSP),a);var b=g(a);return a.nextSibling?a.parentNode.insertBefore(b,a.nextSibling):a.parentNode.appendChild(b),b},j=function(a,b){return a?h(b):i(b)};return{insertInline:j,insertInlineBefore:a.curry(j,!0),insertInlineAfter:a.curry(j,!1)}}),g("tinymce.core.caret.CaretContainerRemove",["ephox.katamari.api.Arr","tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretPosition","tinymce.core.dom.NodeType","tinymce.core.text.Zwsp","tinymce.core.util.Tools"],function(a,b,c,d,e,f){var g=d.isElement,h=d.isText,i=function(a){var b=a.parentNode;b&&b.removeChild(a)},j=function(a){try{return a.nodeValue}catch(b){return""}},k=function(a,b){0===b.length?i(a):a.nodeValue=b},l=function(a){var b=e.trim(a);return{count:a.length-b.length,text:b}},m=function(a,b){return s(a),b},n=function(a,b){var d=l(a.data.substr(0,b.offset())),e=l(a.data.substr(b.offset())),f=d.text+e.text;return f.length>0?(k(a,f),new c(a,b.offset()-d.count)):b},o=function(b,d){var e=d.container(),f=a.indexOf(e.childNodes,b).map(function(a){return a<d.offset()?new c(e,d.offset()-1):d}).getOr(d);return s(b),f},p=function(a,b){return b.container()===a?n(a,b):m(a,b)},q=function(a,b){return b.container()===a.parentNode?o(a,b):m(a,b)},r=function(a,b){return c.isTextPosition(b)?p(a,b):q(a,b)},s=function(a){if(g(a)&&b.isCaretContainer(a)&&(b.hasContent(a)?a.removeAttribute("data-mce-caret"):i(a)),h(a)){var c=e.trim(j(a));k(a,c)}};return{removeAndReposition:r,remove:s}}),g("tinymce.core.EditorSettings",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Obj","ephox.katamari.api.Option","ephox.katamari.api.Strings","ephox.katamari.api.Struct","ephox.katamari.api.Type","ephox.sand.api.PlatformDetection","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i){var j=f.immutable("sections","settings"),k=h.detect(),l=k.deviceType.isTouch(),m=["lists","autolink","autosave"],n=function(a){return g.isArray(a)?a.join(" "):a},o=function(c){var d=a.map(n(c).split(" "),e.trim);return a.filter(d,b.curry(a.contains,m)).join(" ")},p=function(b,d){var e=c.bifilter(d,function(c,d){return a.contains(b,d)});return j(e.t,e.f)},q=function(a,b){var c=a.sections();return c.hasOwnProperty(b)?c[b]:{}},r=function(a,b){return a.sections().hasOwnProperty(b)},s=function(a,b,c){return{id:a,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:b,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"<!DOCTYPE html>",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",entity_encoding:"named",url_converter:c.convertURL,url_converter_scope:c,ie7_compat:!0}},t=function(a,b){var c=b.external_plugins?b.external_plugins:{};return a&&a.external_plugins?i.extend({},a.external_plugins,c):c},u=function(a,b,c){var d=p(["mobile"],c),e=d.settings().plugins,f=i.extend(a,b,d.settings(),l?q(d,"mobile"):{},{validate:!0,content_editable:d.settings().inline,external_plugins:t(b,d.settings())},l&&e&&r(d,"mobile")?{plugins:o(e)}:{});return f},v=function(a,b,c,d,e){var f=s(b,c,a);return u(f,d,e)},w=function(a,b){return d.from(a.settings[b])},x=function(a,b,c){return d.from(b.settings[c]).filter(a)};return{getEditorSettings:v,get:w,getString:b.curry(x,g.isString),filterMobilePlugins:o}}),g("tinymce.core.text.Bidi",[],function(){var a=/[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/,b=function(b){return a.test(b)};return{hasStrongRtl:b}}),g("tinymce.core.keyboard.InlineUtils",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.katamari.api.Options","ephox.katamari.api.Type","ephox.sugar.api.node.Element","ephox.sugar.api.search.Selectors","tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils","tinymce.core.caret.CaretWalker","tinymce.core.dom.DOMUtils","tinymce.core.dom.NodeType","tinymce.core.EditorSettings","tinymce.core.text.Bidi"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){var q=function(a,b){var c=o.getString(a,"inline_boundaries_selector").getOr("a[href],code");return g.is(f.fromDom(b),c)},r=function(a){return"rtl"===m.DOM.getStyle(a,"direction",!0)||p.hasStrongRtl(a.textContent)},s=function(b,c,d){return a.filter(m.DOM.getParents(d.container(),"*",c),b)},t=function(a,b,d){var e=s(a,b,d);return c.from(e[e.length-1])},u=function(a,b,c){var d=k.getParentBlock(b,a),e=k.getParentBlock(c,a);return d&&d===e},v=function(a){return h.isBeforeInline(a)||h.isAfterInline(a)},w=function(a,b){var c=b.container(),d=b.offset();return a?h.isCaretContainerInline(c)?n.isText(c.nextSibling)?new j(c.nextSibling,0):j.after(c):h.isBeforeInline(b)?new j(c,d+1):b:h.isCaretContainerInline(c)?n.isText(c.previousSibling)?new j(c.previousSibling,c.previousSibling.data.length):j.before(c):h.isAfterInline(b)?new j(c,d-1):b},x=b.curry(w,!0),y=b.curry(w,!1);return{isInlineTarget:q,findRootInline:t,isRtl:r,isAtZwsp:v,normalizePosition:w,normalizeForwards:x,normalizeBackwards:y,hasSameParentBlock:u}}),g("tinymce.core.keyboard.BoundaryCaret",["ephox.katamari.api.Option","tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretContainerInline","tinymce.core.caret.CaretContainerRemove","tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.dom.NodeType","tinymce.core.keyboard.InlineUtils"],function(a,b,c,d,e,f,g,h){var i=function(a,b){return g.isText(a.container())?c.insertInline(b,a.container()):c.insertInline(b,a.getNode())},j=function(a,c){var d=c.get();return d&&a.container()===d&&b.isCaretContainerInline(d)},k=function(b,g){return g.fold(function(e){d.remove(b.get());var g=c.insertInlineBefore(e);return b.set(g),a.some(new f(g,g.length-1))},function(a){return e.firstPositionIn(a).map(function(a){if(j(a,b))return new f(b.get(),1);d.remove(b.get());var c=i(a,!0);return b.set(c),new f(c,1)})},function(a){return e.lastPositionIn(a).map(function(a){if(j(a,b))return new f(b.get(),b.get().length-1);d.remove(b.get());var c=i(a,!1);return b.set(c),new f(c,c.length-1)})},function(e){d.remove(b.get());var g=c.insertInlineAfter(e);return b.set(g),a.some(new f(g,1))})};return{renderCaret:k}}),g("tinymce.core.util.LazyEvaluator",["ephox.katamari.api.Option"],function(a){var b=function(b,c){for(var d=0;d<b.length;d++){var e=b[d].apply(null,c);if(e.isSome())return e}return a.none()};return{evaluateUntil:b}}),g("tinymce.core.keyboard.BoundaryLocation",["ephox.katamari.api.Adt","ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.katamari.api.Options","tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils","tinymce.core.dom.NodeType","tinymce.core.keyboard.InlineUtils","tinymce.core.util.LazyEvaluator"],function(a,b,c,d,e,f,g,h,i,j,k){var l=a.generate([{before:["element"]},{start:["element"]},{end:["element"]},{after:["element"]}]),m=function(a,b){var c=h.getParentBlock(b,a);return c?c:a},n=function(a,d,e){var g=j.normalizeForwards(e),h=m(d,g.container());return j.findRootInline(a,h,g).fold(function(){return f.nextPosition(h,g).bind(b.curry(j.findRootInline,a,h)).map(function(a){return l.before(a)})},c.none)},o=function(a,b,d){var e=j.normalizeBackwards(d);return j.findRootInline(a,b,e).bind(function(a){var b=f.prevPosition(a,e);return b.isNone()?c.some(l.start(a)):c.none()})},p=function(a,b,d){var e=j.normalizeForwards(d);return j.findRootInline(a,b,e).bind(function(a){var b=f.nextPosition(a,e);return b.isNone()?c.some(l.end(a)):c.none()})},q=function(a,d,e){var g=j.normalizeBackwards(e),h=m(d,g.container());return j.findRootInline(a,h,g).fold(function(){return f.prevPosition(h,g).bind(b.curry(j.findRootInline,a,h)).map(function(a){return l.after(a)})},c.none)},r=function(a){return j.isRtl(t(a))===!1},s=function(a,b,c){var d=k.evaluateUntil([n,o,p,q],[a,b,c]);return d.filter(r)},t=function(a){return a.fold(b.identity,b.identity,b.identity,b.identity)},u=function(a){return a.fold(b.constant("before"),b.constant("start"),b.constant("end"),b.constant("after"))},v=function(a){return a.fold(l.before,l.before,l.after,l.after)},w=function(a){return a.fold(l.start,l.start,l.end,l.end)},x=function(a,b){return u(a)===u(b)&&t(a)===t(b)},y=function(a,b,c,e,f,g){return d.liftN([j.findRootInline(b,c,e),j.findRootInline(b,c,f)],function(b,d){return b!==d&&j.hasSameParentBlock(c,b,d)?l.after(a?b:d):g}).getOr(g)},z=function(a,c){return a.fold(b.constant(!0),function(a){return!x(a,c)})},A=function(a,c,d,e,g){var h=j.normalizePosition(a,g),i=f.fromPosition(a,d,h).map(b.curry(j.normalizePosition,a)),k=i.fold(function(){return e.map(v)},function(f){return s(c,d,f).map(b.curry(y,a,c,d,h,f)).filter(b.curry(z,e))});return k.filter(r)},B=function(a,d){return a?d.fold(b.compose(c.some,l.start),c.none,b.compose(c.some,l.after),c.none):d.fold(c.none,b.compose(c.some,l.before),c.none,b.compose(c.some,l.end))},C=function(a,c,d,e){var f=j.normalizePosition(a,e),g=s(c,d,f);return s(c,d,f).bind(b.curry(B,a)).orThunk(function(){return A(a,c,d,g,e)})};return{readLocation:s,findLocation:C,prevLocation:b.curry(C,!1),nextLocation:b.curry(C,!0),getElement:t,outside:v,inside:w}}),g("tinymce.core.keyboard.BoundarySelection",["ephox.katamari.api.Arr","ephox.katamari.api.Cell","ephox.katamari.api.Fun","tinymce.core.caret.CaretContainerRemove","tinymce.core.caret.CaretPosition","tinymce.core.keyboard.BoundaryCaret","tinymce.core.keyboard.BoundaryLocation","tinymce.core.keyboard.InlineUtils"],function(a,b,c,d,e,f,g,h){var i=function(a,b){var c=a.dom.createRng();c.setStart(b.container(),b.offset()),c.setEnd(b.container(),b.offset()),a.selection.setRng(c)},j=function(a){return a.settings.inline_boundaries!==!1},k=function(a,b){a?b.setAttribute("data-mce-selected","1"):b.removeAttribute("data-mce-selected","1")},l=function(a,b,c){return f.renderCaret(b,c).map(function(b){return i(a,b),c})},m=function(a,b,d){var f=a.getBody(),i=e.fromRangeStart(a.selection.getRng()),j=c.curry(h.isInlineTarget,a),k=g.findLocation(d,j,f,i);return k.bind(function(c){return l(a,b,c)})},n=function(b,d,e){var f=a.filter(d.select("*[data-mce-selected]"),b),g=a.filter(e,b);a.each(a.difference(f,g),c.curry(k,!1)),a.each(a.difference(g,f),c.curry(k,!0))},o=function(a,b){if(a.selection.isCollapsed()&&a.composing!==!0&&b.get()){var c=e.fromRangeStart(a.selection.getRng());e.isTextPosition(c)&&h.isAtZwsp(c)===!1&&(i(a,d.removeAndReposition(b.get(),c)),b.set(null))}},p=function(b,c,d,f){if(c.selection.isCollapsed()){var h=a.filter(f,b);a.each(h,function(a){var f=e.fromRangeStart(c.selection.getRng());g.readLocation(b,c.getBody(),f).bind(function(a){return l(c,d,a)})})}},q=function(a,b,c){return function(){return!!j(a)&&m(a,b,c).isSome()}},r=function(a){var d=new b(null),e=c.curry(h.isInlineTarget,a);return a.on("NodeChange",function(b){j(a)&&(n(e,a.dom,b.parents),o(a,d),p(e,a,d,b.parents))}),d};return{move:q,setupSelectedState:r,setCaretPosition:i}}),g("tinymce.core.delete.InlineBoundaryDelete",["ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.katamari.api.Options","ephox.sugar.api.node.Element","tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretFinder","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils","tinymce.core.delete.DeleteElement","tinymce.core.keyboard.BoundaryCaret","tinymce.core.keyboard.BoundaryLocation","tinymce.core.keyboard.BoundarySelection","tinymce.core.keyboard.InlineUtils"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(a){return a.settings.inline_boundaries!==!1},o=function(a,b){var c=document.createRange();return c.setStart(a.container(),a.offset()),c.setEnd(b.container(),b.offset()),c},p=function(a){return c.liftN([f.firstPositionIn(a),f.lastPositionIn(a)],function(b,c){var d=m.normalizePosition(!0,b),e=m.normalizePosition(!1,c);return f.nextPosition(a,d).map(function(a){return a.isEqual(e)}).getOr(!0)}).getOr(!0)},q=function(a,b){return function(c){return j.renderCaret(b,c).map(function(b){return l.setCaretPosition(a,b),!0}).getOr(!1)}},r=function(b,c,d,e){var f=b.getBody(),h=a.curry(m.isInlineTarget,b);b.undoManager.ignore(function(){b.selection.setRng(o(d,e)),b.execCommand("Delete"),k.readLocation(h,f,g.fromRangeStart(b.selection.getRng())).map(k.inside).map(q(b,c))}),b.nodeChanged()},s=function(a,b){var c=h.getParentBlock(b,a);return c?c:a},t=function(c,e,g,h){var j=s(c.getBody(),h.container()),l=a.curry(m.isInlineTarget,c),n=k.readLocation(l,j,h);return n.bind(function(c){return g?c.fold(a.constant(b.some(k.inside(c))),b.none,a.constant(b.some(k.outside(c))),b.none):c.fold(b.none,a.constant(b.some(k.outside(c))),b.none,a.constant(b.some(k.inside(c))))}).map(q(c,e)).getOrThunk(function(){var a=f.navigate(g,j,h),b=a.bind(function(a){return k.readLocation(l,j,a)});return n.isSome()&&b.isSome()?m.findRootInline(l,j,h).map(function(a){return!!p(a)&&(i.deleteElement(c,g,d.fromDom(a)),!0)}).getOr(!1):b.bind(function(b){return a.map(function(a){return g?r(c,e,h,a):r(c,e,a,h),!0})}).getOr(!1)})},u=function(a,b,c){if(a.selection.isCollapsed()&&n(a)){var d=g.fromRangeStart(a.selection.getRng());return t(a,b,c,d)}return!1};return{backspaceDelete:u}}),g("tinymce.core.delete.TableDeleteAction",["ephox.katamari.api.Adt","ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.katamari.api.Options","ephox.katamari.api.Struct","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","ephox.sugar.api.search.SelectorFilter","ephox.sugar.api.search.SelectorFind"],function(a,b,c,d,e,f,g,h,i,j){var k=f.immutable("start","end"),l=f.immutable("rng","table","cells"),m=a.generate([{removeTable:["element"]},{emptyCells:["cells"]}]),n=function(a,b){return j.closest(h.fromDom(a),"td,th",b)},o=function(a,b){return j.ancestor(a,"table",b)},p=function(a){return g.eq(a.start(),a.end())===!1},q=function(a,b){return o(a.start(),b).bind(function(c){return o(a.end(),b).bind(function(a){return g.eq(c,a)?d.some(c):d.none()})})},r=function(a,b){return e.liftN([n(a.startContainer,b),n(a.endContainer,b)],k).filter(p)},s=function(a,b){return q(a,b).bind(function(b){var c=i.descendants(b,"td,th");return l(a,b,c)})},t=function(a,b){var d=c.curry(g.eq,a);return r(b,d).map(function(a){return s(a,d)})},u=function(a,c){return b.findIndex(a,function(a){return g.eq(a,c)})},v=function(a){return e.liftN([u(a.cells(),a.rng().start()),u(a.cells(),a.rng().end())],function(b,c){return a.cells().slice(b,c+1)})},w=function(a){return v(a).bind(function(b){var c=a.cells();return b.length===c.length?m.removeTable(a.table()):m.emptyCells(b)})},x=function(a){return m.emptyCells(a)},y=function(a,b){return t(a,b).map(w)};return{getActionFromRange:y,getActionFromCells:x}}),g("tinymce.core.delete.TableDelete",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.sugar.api.node.Element","tinymce.core.delete.DeleteElement","tinymce.core.delete.TableDeleteAction","tinymce.core.dom.PaddingBr","tinymce.core.selection.TableCellSelection"],function(a,b,c,d,e,f,g){var h=function(b,c){return a.each(c,f.fillWithPaddingBr),b.selection.setCursorLocation(c[0].dom(),0),!0},i=function(a,b){return d.deleteElement(a,!1,b),!0},j=function(a,c,d){return e.getActionFromRange(c,d).map(function(c){return c.fold(b.curry(i,a),b.curry(h,a))}).getOr(!1)},k=function(a){
-var b=c.fromDom(a.getBody()),d=a.selection.getRng(),e=g.getCellsFromEditor(a);return 0!==e.length?h(a,e):j(a,b,d)},l=function(a){return!a.selection.isCollapsed()&&k(a)};return{backspaceDelete:l}}),g("tinymce.core.delete.DeleteCommands",["tinymce.core.delete.BlockBoundaryDelete","tinymce.core.delete.BlockRangeDelete","tinymce.core.delete.CefDelete","tinymce.core.delete.DeleteUtils","tinymce.core.delete.InlineBoundaryDelete","tinymce.core.delete.TableDelete"],function(a,b,c,d,e,f){var g=function(a,b){a.getDoc().execCommand(b,!1,null)},h=function(h){c.backspaceDelete(h,!1)||e.backspaceDelete(h,!1)||a.backspaceDelete(h,!1)||f.backspaceDelete(h)||b.backspaceDelete(h,!1)||(g(h,"Delete"),d.paddEmptyBody(h))},i=function(d){c.backspaceDelete(d,!0)||e.backspaceDelete(d,!0)||a.backspaceDelete(d,!0)||f.backspaceDelete(d)||b.backspaceDelete(d,!0)||g(d,"ForwardDelete")};return{deleteCommand:h,forwardDeleteCommand:i}}),g("tinymce.core.InsertList",["tinymce.core.util.Tools","tinymce.core.caret.CaretWalker","tinymce.core.caret.CaretPosition"],function(a,b,c){var d=function(a){return a.firstChild&&a.firstChild===a.lastChild},e=function(a){return"br"===a.name||"\xa0"===a.value},f=function(a,b){var c=a.getBlockElements();return c[b.name]&&d(b)&&e(b.firstChild)},g=function(a,b){var c=a.getNonEmptyElements();return b&&(b.isEmpty(c)||f(a,b))},h=function(a,b){var c=b.firstChild,d=b.lastChild;return c&&"meta"===c.name&&(c=c.next),d&&"mce_marker"===d.attr("id")&&(d=d.prev),g(a,d)&&(d=d.prev),!(!c||c!==d)&&("ul"===c.name||"ol"===c.name)},i=function(a){var b=a.firstChild,c=a.lastChild;return b&&"META"===b.nodeName&&b.parentNode.removeChild(b),c&&"mce_marker"===c.id&&c.parentNode.removeChild(c),a},j=function(a,b,c){var d=b.serialize(c),e=a.createFragment(d);return i(e)},k=function(b){return a.grep(b.childNodes,function(a){return"LI"===a.nodeName})},l=function(a){return!a.firstChild},m=function(a){return a.length>0&&l(a[a.length-1])?a.slice(0,-1):a},n=function(a,b){var c=a.getParent(b,a.isBlock);return c&&"LI"===c.nodeName?c:null},o=function(a,b){return!!n(a,b)},p=function(a,b){var c=b.cloneRange(),d=b.cloneRange();return c.setStartBefore(a),d.setEndAfter(a),[c.cloneContents(),d.cloneContents()]},q=function(a,d){var e=c.before(a),f=new b(d),g=f.next(e);return g?g.toRange():null},r=function(a,d){var e=c.after(a),f=new b(d),g=f.prev(e);return g?g.toRange():null},s=function(b,c,d,e){var f=p(b,e),g=b.parentNode;return g.insertBefore(f[0],b),a.each(c,function(a){g.insertBefore(a,b)}),g.insertBefore(f[1],b),g.removeChild(b),r(c[c.length-1],d)},t=function(b,c,d){var e=b.parentNode;return a.each(c,function(a){e.insertBefore(a,b)}),q(b,d)},u=function(a,b,c,d){return d.insertAfter(b.reverse(),a),r(b[0],c)},v=function(a,d,e,f){var g=j(d,a,f),h=n(d,e.startContainer),i=m(k(g.firstChild)),l=1,o=2,p=d.getRoot(),q=function(a){var f=c.fromRangeStart(e),g=new b(d.getRoot()),i=a===l?g.prev(f):g.next(f);return!i||n(d,i.getNode())!==h};return q(l)?t(h,i,p):q(o)?u(h,i,p,d):s(h,i,p,e)};return{isListFragment:h,insertAtCaret:v,isParentBlockLi:o,trimListItems:m,listItems:k}}),g("tinymce.core.InsertContent",["ephox.katamari.api.Option","ephox.sugar.api.node.Element","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretWalker","tinymce.core.dom.ElementUtils","tinymce.core.dom.NodeType","tinymce.core.dom.PaddingBr","tinymce.core.dom.RangeNormalizer","tinymce.core.Env","tinymce.core.html.Serializer","tinymce.core.InsertList","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=f.matchNodeNames("td th"),n=function(a,b,c){if("all"===c.getAttribute("data-mce-bogus"))c.parentNode.insertBefore(a.dom.createFragment(b),c);else{var d=c.firstChild,e=c.lastChild;!d||d===e&&"BR"===d.nodeName?a.dom.setHTML(c,b):a.selection.setContent(b)}},o=function(c,d){a.from(c.getParent(d,"td,th")).map(b.fromDom).each(g.trimBlockTrailingBr)},p=function(a,b,f){function g(a){function b(a){return d[a]&&3==d[a].nodeType}var c,d,e;return c=J.getRng(!0),d=c.startContainer,e=c.startOffset,3==d.nodeType&&(e>0?a=a.replace(/^ /," "):b("previousSibling")||(a=a.replace(/^ /," ")),e<d.length?a=a.replace(/ (<br>|)$/," "):b("nextSibling")||(a=a.replace(/( | )(<br>|)$/," "))),a}function p(){var a,c,d;a=J.getRng(!0),c=a.startContainer,d=a.startOffset,3==c.nodeType&&a.collapsed&&("\xa0"===c.data[d]?(c.deleteData(d,1),/[\u00a0| ]$/.test(b)||(b+=" ")):"\xa0"===c.data[d-1]&&(c.deleteData(d-1,1),/[\u00a0| ]$/.test(b)||(b=" "+b)))}function q(){if(H){var b=a.getBody(),c=new e(K);l.each(K.select("*[data-mce-fragment]"),function(a){for(var d=a.parentNode;d&&d!=b;d=d.parentNode)I[a.nodeName.toLowerCase()]&&c.compare(d,a)&&K.remove(a,!0)})}}function r(a){for(var b=a;b=b.walk();)1===b.type&&b.attr("data-mce-fragment","1")}function s(a){l.each(a.getElementsByTagName("*"),function(a){a.removeAttribute("data-mce-fragment")})}function t(a){return!!a.getAttribute("data-mce-fragment")}function u(b){return b&&!a.schema.getShortEndedElements()[b.nodeName]}function v(b){function e(b){for(var c=a.getBody();b&&b!==c;b=b.parentNode)if("false"===a.dom.getContentEditable(b))return b;return null}function f(b){var e=c.fromRangeStart(b),f=new d(a.getBody());if(e=f.next(e))return e.toRange()}var g,h,j;if(b){if(J.scrollIntoView(b),g=e(b))return K.remove(b),void J.select(g);D=K.createRng(),E=b.previousSibling,E&&3==E.nodeType?(D.setStart(E,E.nodeValue.length),i.ie||(F=b.nextSibling,F&&3==F.nodeType&&(E.appendData(F.data),F.parentNode.removeChild(F)))):(D.setStartBefore(b),D.setEndBefore(b)),h=K.getParent(b,K.isBlock),K.remove(b),h&&K.isEmpty(h)&&(a.$(h).empty(),D.setStart(h,0),D.setEnd(h,0),m(h)||t(h)||!(j=f(D))?K.add(h,K.create("br",{"data-mce-bogus":"1"})):(D=j,K.remove(h))),J.setRng(D)}}var w,x,y,z,A,B,C,D,E,F,G,H,I=a.schema.getTextInlineElements(),J=a.selection,K=a.dom;/^ | $/.test(b)&&(b=g(b)),w=a.parser,H=f.merge,x=new j({validate:a.settings.validate},a.schema),G='<span id="mce_marker" data-mce-type="bookmark">​</span>',B={content:b,format:"html",selection:!0},a.fire("BeforeSetContent",B),b=B.content,b.indexOf("{$caret}")==-1&&(b+="{$caret}"),b=b.replace(/\{\$caret\}/,G),D=J.getRng();var L=D.startContainer||(D.parentElement?D.parentElement():null),M=a.getBody();L===M&&J.isCollapsed()&&K.isBlock(M.firstChild)&&u(M.firstChild)&&K.isEmpty(M.firstChild)&&(D=K.createRng(),D.setStart(M.firstChild,0),D.setEnd(M.firstChild,0),J.setRng(D)),J.isCollapsed()||(a.selection.setRng(h.normalize(a.selection.getRng())),a.getDoc().execCommand("Delete",!1,null),p()),y=J.getNode();var N={context:y.nodeName.toLowerCase(),data:f.data};if(A=w.parse(b,N),f.paste===!0&&k.isListFragment(a.schema,A)&&k.isParentBlockLi(K,y))return D=k.insertAtCaret(x,K,a.selection.getRng(!0),A),a.selection.setRng(D),void a.fire("SetContent",B);if(r(A),E=A.lastChild,"mce_marker"==E.attr("id"))for(C=E,E=E.prev;E;E=E.walk(!0))if(3==E.type||!K.isBlock(E.name)){a.schema.isValidChild(E.parent.name,"span")&&E.parent.insert(C,E,"br"===E.name);break}if(a._selectionOverrides.showBlockCaretContainer(y),N.invalid){for(J.setContent(G),y=J.getNode(),z=a.getBody(),9==y.nodeType?y=E=z:E=y;E!==z;)y=E,E=E.parentNode;b=y==z?z.innerHTML:K.getOuterHTML(y),b=x.serialize(w.parse(b.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return x.serialize(A)}))),y==z?K.setHTML(z,b):K.setOuterHTML(y,b)}else b=x.serialize(A),n(a,b,y);q(),v(K.get("mce_marker")),s(a.getBody()),o(a.dom,a.selection.getStart()),a.fire("SetContent",B),a.addVisual()},q=function(a){var b;return"string"!=typeof a?(b=l.extend({paste:a.paste,data:{paste:a.paste}},a),{content:a.content,details:b}):{content:a,details:{}}},r=function(a,b){var c=q(b);p(a,c.content,c.details)};return{insertAtCaret:r}}),g("tinymce.core.EditorCommands",["tinymce.core.delete.DeleteCommands","tinymce.core.dom.NodeType","tinymce.core.dom.RangeUtils","tinymce.core.dom.TreeWalker","tinymce.core.Env","tinymce.core.InsertContent","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g){var h=g.each,i=g.extend,j=g.map,k=g.inArray,l=g.explode,m=e.ie&&e.ie<11,n=!0,o=!1;return function(g){function p(a,b,c,d){var e,f,i=0;if(!g.removed){if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(a)||d&&d.skip_focus||g.focus(),d=g.fire("BeforeExecCommand",{command:a,ui:b,value:c}),d.isDefaultPrevented())return!1;if(f=a.toLowerCase(),e=H.exec[f])return e(f,b,c),g.fire("ExecCommand",{command:a,ui:b,value:c}),!0;if(h(g.plugins,function(d){if(d.execCommand&&d.execCommand(a,b,c))return g.fire("ExecCommand",{command:a,ui:b,value:c}),i=!0,!1}),i)return i;if(g.theme&&g.theme.execCommand&&g.theme.execCommand(a,b,c))return g.fire("ExecCommand",{command:a,ui:b,value:c}),!0;try{i=g.getDoc().execCommand(a,b,c)}catch(j){}return!!i&&(g.fire("ExecCommand",{command:a,ui:b,value:c}),!0)}}function q(a){var b;if(!g.quirks.isHidden()&&!g.removed){if(a=a.toLowerCase(),b=H.state[a])return b(a);try{return g.getDoc().queryCommandState(a)}catch(c){}return!1}}function r(a){var b;if(!g.quirks.isHidden()&&!g.removed){if(a=a.toLowerCase(),b=H.value[a])return b(a);try{return g.getDoc().queryCommandValue(a)}catch(c){}}}function s(a,b){b=b||"exec",h(a,function(a,c){h(c.toLowerCase().split(","),function(c){H[b][c]=a})})}function t(a,b,c){a=a.toLowerCase(),H.exec[a]=function(a,d,e,f){return b.call(c||g,d,e,f)}}function u(a){if(a=a.toLowerCase(),H.exec[a])return!0;try{return g.getDoc().queryCommandSupported(a)}catch(b){}return!1}function v(a,b,c){a=a.toLowerCase(),H.state[a]=function(){return b.call(c||g)}}function w(a,b,c){a=a.toLowerCase(),H.value[a]=function(){return b.call(c||g)}}function x(a){return a=a.toLowerCase(),!!H.exec[a]}function y(a,b,c){return void 0===b&&(b=o),void 0===c&&(c=null),g.getDoc().execCommand(a,b,c)}function z(a){return F.match(a)}function A(a,b){F.toggle(a,b?{value:b}:void 0),g.nodeChanged()}function B(a){G=E.getBookmark(a)}function C(){E.moveToBookmark(G)}var D,E,F,G,H={state:{},exec:{},value:{}},I=g.settings;g.on("PreInit",function(){D=g.dom,E=g.selection,I=g.settings,F=g.formatter}),i(this,{execCommand:p,queryCommandState:q,queryCommandValue:r,queryCommandSupported:u,addCommands:s,addCommand:t,addQueryStateHandler:v,addQueryValueHandler:w,hasCustomCommand:x}),s({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){g.undoManager.add()},"Cut,Copy,Paste":function(a){var b,c=g.getDoc();try{y(a)}catch(d){b=n}if("paste"!==a||c.queryCommandEnabled(a)||(b=!0),b||!c.queryCommandSupported(a)){var f=g.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");e.mac&&(f=f.replace(/Ctrl\+/g,"\u2318+")),g.notificationManager.open({text:f,type:"error"})}},unlink:function(){if(E.isCollapsed()){var a=g.dom.getParent(g.selection.getStart(),"a");return void(a&&g.dom.remove(a,!0))}F.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone":function(a){var b=a.substring(7);"full"==b&&(b="justify"),h("left,center,right,justify".split(","),function(a){b!=a&&F.remove("align"+a)}),"none"!=b&&A("align"+b)},"InsertUnorderedList,InsertOrderedList":function(a){var b,c;y(a),b=D.getParent(E.getNode(),"ol,ul"),b&&(c=b.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(c.nodeName)&&(B(),D.split(c,b),C()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(a){A(a)},"ForeColor,HiliteColor,FontName":function(a,b,c){A(a,c)},FontSize:function(a,b,c){var d,e;c>=1&&c<=7&&(e=l(I.font_size_style_values),d=l(I.font_size_classes),c=d?d[c-1]||c:e[c-1]||c),A(a,c)},RemoveFormat:function(a){F.remove(a)},mceBlockQuote:function(){A("blockquote")},FormatBlock:function(a,b,c){return A(c||"p")},mceCleanup:function(){var a=E.getBookmark();g.setContent(g.getContent({cleanup:n}),{cleanup:n}),E.moveToBookmark(a)},mceRemoveNode:function(a,b,c){var d=c||E.getNode();d!=g.getBody()&&(B(),g.dom.remove(d,n),C())},mceSelectNodeDepth:function(a,b,c){var d=0;D.getParent(E.getNode(),function(a){if(1==a.nodeType&&d++==c)return E.select(a),o},g.getBody())},mceSelectNode:function(a,b,c){E.select(c)},mceInsertContent:function(a,b,c){f.insertAtCaret(g,c)},mceInsertRawHTML:function(a,b,c){E.setContent("tiny_mce_marker"),g.setContent(g.getContent().replace(/tiny_mce_marker/g,function(){return c}))},mceToggleFormat:function(a,b,c){A(c)},mceSetContent:function(a,b,c){g.setContent(c)},"Indent,Outdent":function(a){var b,c,d;b=I.indentation,c=/[a-z%]+$/i.exec(b),b=parseInt(b,10),q("InsertUnorderedList")||q("InsertOrderedList")?y(a):(I.forced_root_block||D.getParent(E.getNode(),D.isBlock)||F.apply("div"),h(E.getSelectedBlocks(),function(e){if("false"!==D.getContentEditable(e)&&"LI"!==e.nodeName){var f=g.getParam("indent_use_margin",!1)?"margin":"padding";f="TABLE"===e.nodeName?"margin":f,f+="rtl"==D.getStyle(e,"direction",!0)?"Right":"Left","outdent"==a?(d=Math.max(0,parseInt(e.style[f]||0,10)-b),D.setStyle(e,f,d?d+c:"")):(d=parseInt(e.style[f]||0,10)+b+c,D.setStyle(e,f,d))}}))},mceRepaint:function(){},InsertHorizontalRule:function(){g.execCommand("mceInsertContent",!1,"<hr />")},mceToggleVisualAid:function(){g.hasVisual=!g.hasVisual,g.addVisual()},mceReplaceContent:function(a,b,c){g.execCommand("mceInsertContent",!1,c.replace(/\{\$selection\}/g,E.getContent({format:"text"})))},mceInsertLink:function(a,b,c){var d;"string"==typeof c&&(c={href:c}),d=D.getParent(E.getNode(),"a"),c.href=c.href.replace(" ","%20"),d&&c.href||F.remove("link"),c.href&&F.apply("link",c,d)},selectAll:function(){var a,c=D.getRoot();if(E.getRng().setStart){var d=D.getParent(E.getStart(),b.isContentEditableTrue);d&&(a=D.createRng(),a.selectNodeContents(d),E.setRng(a))}else a=E.getRng(),a.item||(a.moveToElementText(c),a.select())},"delete":function(){a.deleteCommand(g)},forwardDelete:function(){a.forwardDeleteCommand(g)},mceNewDocument:function(){g.setContent("")},InsertLineBreak:function(a,b,e){function f(){for(var a,b=new d(p,r),c=g.schema.getNonEmptyElements();a=b.next();)if(c[a.nodeName.toLowerCase()]||a.length>0)return!0}var h,i,j,k=e,l=E.getRng(!0);new c(D).normalize(l);var o=l.startOffset,p=l.startContainer;if(1==p.nodeType&&p.hasChildNodes()){var q=o>p.childNodes.length-1;p=p.childNodes[Math.min(o,p.childNodes.length-1)]||p,o=q&&3==p.nodeType?p.nodeValue.length:0}var r=D.getParent(p,D.isBlock),s=r?r.nodeName.toUpperCase():"",t=r?D.getParent(r.parentNode,D.isBlock):null,u=t?t.nodeName.toUpperCase():"",v=k&&k.ctrlKey;"LI"!=u||v||(r=t,s=u),p&&3==p.nodeType&&o>=p.nodeValue.length&&(m||f()||(h=D.create("br"),l.insertNode(h),l.setStartAfter(h),l.setEndAfter(h),i=!0)),h=D.create("br"),l.insertNode(h);var w=D.doc.documentMode;return m&&"PRE"==s&&(!w||w<8)&&h.parentNode.insertBefore(D.doc.createTextNode("\r"),h),j=D.create("span",{}," "),h.parentNode.insertBefore(j,h),E.scrollIntoView(j),D.remove(j),i?(l.setStartBefore(h),l.setEndBefore(h)):(l.setStartAfter(h),l.setEndAfter(h)),E.setRng(l),g.undoManager.add(),n}}),s({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(a){var b="align"+a.substring(7),c=E.isCollapsed()?[D.getParent(E.getNode(),D.isBlock)]:E.getSelectedBlocks(),d=j(c,function(a){return!!F.matchNode(a,b)});return k(d,n)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(a){return z(a)},mceBlockQuote:function(){return z("blockquote")},Outdent:function(){var a;if(I.inline_styles){if((a=D.getParent(E.getStart(),D.isBlock))&&parseInt(a.style.paddingLeft,10)>0)return n;if((a=D.getParent(E.getEnd(),D.isBlock))&&parseInt(a.style.paddingLeft,10)>0)return n}return q("InsertUnorderedList")||q("InsertOrderedList")||!I.inline_styles&&!!D.getParent(E.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(a){var b=D.getParent(E.getNode(),"ul,ol");return b&&("insertunorderedlist"===a&&"UL"===b.tagName||"insertorderedlist"===a&&"OL"===b.tagName)}},"state"),s({"FontSize,FontName":function(a){var b,c=0;return(b=D.getParent(E.getNode(),"span"))&&(c="fontsize"==a?b.style.fontSize:b.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),c}},"value"),s({Undo:function(){g.undoManager.undo()},Redo:function(){g.undoManager.redo()}})}}),g("tinymce.core.EditorFocus",["ephox.katamari.api.Option","ephox.sugar.api.dom.Compare","ephox.sugar.api.node.Element","tinymce.core.caret.CaretFinder","tinymce.core.dom.ElementType","tinymce.core.dom.RangeUtils","tinymce.core.Env"],function(a,b,c,d,e,f,g){var h=function(a,b){return a.dom.getParent(b,function(b){return"true"===a.dom.getContentEditable(b)})},i=function(b){return b.collapsed?a.from(f.getNode(b.startContainer,b.startOffset)).map(c.fromDom):a.none()},j=function(c,d){return i(d).bind(function(d){return e.isTableSection(d)?a.some(d):b.contains(c,d)===!1?a.some(c):a.none()})},k=function(a,b){j(c.fromDom(a.getBody()),b).bind(function(a){return d.firstPositionIn(a.dom())}).fold(function(){a.selection.normalize()},function(b){a.selection.setRng(b.toRange())})},l=function(a){if(a.setActive)try{a.setActive()}catch(b){a.focus()}else a.focus()},m=function(a){var b,c,d,e=a.selection,f=a.settings.content_editable,i=a.getDoc(),j=a.getBody();return b=e.getRng(),b.item&&(c=b.item(0)),a.quirks.refreshContentEditable(),d=h(a,e.getNode()),a.$.contains(j,d)?(l(d),k(a,b),void n(a)):(f||(g.opera||l(j),a.getWin().focus()),(g.gecko||f)&&(f&&document.activeElement!==j&&a.selection.setRng(a.lastRng),l(j),k(a,b)),c&&c.ownerDocument===i&&(b=i.body.createControlRange(),b.addElement(c),b.select()),void n(a))},n=function(a){a.editorManager.setActive(a)},o=function(a,b){a.removed||(b?n(a):m(a))};return{focus:o}}),g("tinymce.core.EditorObservable",["tinymce.core.util.Observable","tinymce.core.dom.DOMUtils","tinymce.core.util.Tools"],function(a,b,c){function d(a,b){return"selectionchange"==b?a.getDoc():!a.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(b)?a.getDoc().documentElement:a.settings.event_root?(a.eventRoot||(a.eventRoot=g.select(a.settings.event_root)[0]),a.eventRoot):a.getBody()}function e(a,b){function c(a){return!a.hidden&&!a.readonly}var e,h;if(a.delegates||(a.delegates={}),!a.delegates[b]&&!a.removed)if(e=d(a,b),a.settings.event_root){if(f||(f={},a.editorManager.on("removeEditor",function(){var b;if(!a.editorManager.activeEditor&&f){for(b in f)a.dom.unbind(d(a,b));f=null}})),f[b])return;h=function(d){for(var e=d.target,f=a.editorManager.get(),h=f.length;h--;){var i=f[h].getBody();(i===e||g.isChildOf(e,i))&&c(f[h])&&f[h].fire(b,d)}},f[b]=h,g.bind(e,b,h)}else h=function(d){c(a)&&a.fire(b,d)},g.bind(e,b,h),a.delegates[b]=h}var f,g=b.DOM,h={bindPendingEventDelegates:function(){var a=this;c.each(a._pendingNativeEvents,function(b){e(a,b)})},toggleNativeEvent:function(a,b){var c=this;"focus"!=a&&"blur"!=a&&(b?c.initialized?e(c,a):c._pendingNativeEvents?c._pendingNativeEvents.push(a):c._pendingNativeEvents=[a]:c.initialized&&(c.dom.unbind(d(c,a),a,c.delegates[a]),delete c.delegates[a]))},unbindAllNativeEvents:function(){var a,b=this;if(b.delegates){for(a in b.delegates)b.dom.unbind(d(b,a),a,b.delegates[a]);delete b.delegates}b.inline||(b.getBody().onload=null,b.dom.unbind(b.getWin()),b.dom.unbind(b.getDoc())),b.dom.unbind(b.getBody()),b.dom.unbind(b.getContainer())}};return h=c.extend({},a,h)}),g("tinymce.core.ErrorReporter",["tinymce.core.AddOnManager"],function(a){var b=a.PluginManager,c=function(a,c){for(var d in b.urls){var e=b.urls[d]+"/plugin"+c+".js";if(e===a)return d}return null},d=function(a,b){var d=c(b,a.suffix);return d?"Failed to load plugin: "+d+" from url "+b:"Failed to load plugin url: "+b},e=function(a,b){a.notificationManager.open({type:"error",text:b})},f=function(a,b){a._skinLoaded?e(a,b):a.on("SkinLoaded",function(){e(a,b)})},g=function(a,b){f(a,"Failed to upload image: "+b)},h=function(a,b){f(a,d(a,b))},i=function(a){var b=window.console;b&&!window.test&&(b.error?b.error.apply(b,arguments):b.log.apply(b,arguments))};return{pluginLoadError:h,uploadError:g,displayError:f,initError:i}}),g("tinymce.core.caret.CaretContainerInput",["ephox.katamari.api.Fun","ephox.sugar.api.node.Element","ephox.sugar.api.search.SelectorFind","tinymce.core.caret.CaretContainer"],function(a,b,c,d){var e=function(d){return c.descendant(b.fromDom(d.getBody()),"*[data-mce-caret]").fold(a.constant(null),function(a){return a.dom()})},f=function(a){a.selection.setRng(a.selection.getRng())},g=function(a,b){b.hasAttribute("data-mce-caret")&&(d.showCaretContainerBlock(b),f(a),a.selection.scrollIntoView(b))},h=function(a,b){var c=e(a);if(c)return"compositionstart"===b.type?(b.preventDefault(),b.stopPropagation(),void g(c)):void(d.hasContent(c)&&g(a,c))},i=function(b){b.on("keyup compositionstart",a.curry(h,b))};return{setup:i}}),g("tinymce.core.file.Uploader",["tinymce.core.util.Promise","tinymce.core.util.Tools","tinymce.core.util.Fun"],function(a,b,c){return function(c,d){function e(a,b){return a?a.replace(/\/$/,"")+"/"+b.replace(/^\//,""):b}function f(a,b,c,f){var g,h;g=new XMLHttpRequest,g.open("POST",d.url),g.withCredentials=d.credentials,g.upload.onprogress=function(a){f(a.loaded/a.total*100)},g.onerror=function(){c("Image upload failed due to a XHR Transport error. Code: "+g.status)},g.onload=function(){var a;return g.status<200||g.status>=300?void c("HTTP Error: "+g.status):(a=JSON.parse(g.responseText),a&&"string"==typeof a.location?void b(e(d.basePath,a.location)):void c("Invalid JSON: "+g.responseText))},h=new FormData,h.append("file",a.blob(),a.filename()),g.send(h)}function g(){return new a(function(a){a([])})}function h(a,b){return{url:b,blobInfo:a,status:!0}}function i(a,b){return{url:"",blobInfo:a,status:!1,error:b}}function j(a,c){b.each(p[a],function(a){a(c)}),delete p[a]}function k(b,d,e){return c.markPending(b.blobUri()),new a(function(a){var f,g,k=function(){};try{var l=function(){f&&(f.close(),g=k)},m=function(d){l(),c.markUploaded(b.blobUri(),d),j(b.blobUri(),h(b,d)),a(h(b,d))},n=function(d){l(),c.removeFailed(b.blobUri()),j(b.blobUri(),i(b,d)),a(i(b,d))};g=function(a){a<0||a>100||(f||(f=e()),f.progressBar.value(a))},d(b,m,n,g)}catch(o){a(i(b,o.message))}})}function l(a){return a===f}function m(b){var c=b.blobUri();return new a(function(a){p[c]=p[c]||[],p[c].push(a)})}function n(e,f){return e=b.grep(e,function(a){return!c.isUploaded(a.blobUri())}),a.all(b.map(e,function(a){return c.isPending(a.blobUri())?m(a):k(a,d.handler,f)}))}function o(a,b){return!d.url&&l(d.handler)?g():n(a,b)}var p={};return d=b.extend({credentials:!1,handler:f},d),{upload:o}}}),g("ephox.sand.api.Window",["ephox.sand.util.Global"],function(a){var b=function(b){var c=a.getOrDie("requestAnimationFrame");c(b)},c=function(b){var c=a.getOrDie("atob");return c(b)};return{atob:c,requestAnimationFrame:b}}),g("tinymce.core.file.Conversions",["ephox.sand.api.Window","tinymce.core.util.Promise"],function(a,b){function c(a){return new b(function(b,c){var d=function(){c("Cannot convert "+a+" to Blob. Resource might not exist or is inaccessible.")};try{var e=new XMLHttpRequest;e.open("GET",a,!0),e.responseType="blob",e.onload=function(){200==this.status?b(this.response):d()},e.onerror=d,e.send()}catch(f){d()}})}function d(a){var b,c;return a=decodeURIComponent(a).split(","),c=/data:([^;]+)/.exec(a[0]),c&&(b=c[1]),{type:b,data:a[1]}}function e(c){return new b(function(b){var e,f,g;c=d(c);try{e=a.atob(c.data)}catch(h){return void b(new Blob([]))}for(f=new Uint8Array(e.length),g=0;g<f.length;g++)f[g]=e.charCodeAt(g);b(new Blob([f],{type:c.type}))})}function f(a){return 0===a.indexOf("blob:")?c(a):0===a.indexOf("data:")?e(a):null}function g(a){return new b(function(b){var c=new FileReader;c.onloadend=function(){b(c.result)},c.readAsDataURL(a)})}return{uriToBlob:f,blobToDataUri:g,parseDataUri:d}});g("tinymce.core.file.ImageScanner",["tinymce.core.util.Promise","tinymce.core.util.Arr","tinymce.core.util.Fun","tinymce.core.file.Conversions","tinymce.core.Env"],function(a,b,c,d,e){var f=0,g=function(a){return(a||"blobid")+f++},h=function(a,b,c,e){var f,h;return 0===b.src.indexOf("blob:")?(h=a.getByUri(b.src),void(h?c({image:b,blobInfo:h}):d.uriToBlob(b.src).then(function(e){d.blobToDataUri(e).then(function(i){f=d.parseDataUri(i).data,h=a.create(g(),e,f),a.add(h),c({image:b,blobInfo:h})})},function(a){e(a)}))):(f=d.parseDataUri(b.src).data,h=a.findFirst(function(a){return a.base64()===f}),void(h?c({image:b,blobInfo:h}):d.uriToBlob(b.src).then(function(d){h=a.create(g(),d,f),a.add(h),c({image:b,blobInfo:h})},function(a){e(a)})))},i=function(a){return a?a.getElementsByTagName("img"):[]};return function(d,f){function g(g,k){var l,m;return k||(k=c.constant(!0)),l=b.filter(i(g),function(a){var b=a.src;return!!e.fileApi&&(!a.hasAttribute("data-mce-bogus")&&(!a.hasAttribute("data-mce-placeholder")&&(!(!b||b==e.transparentSrc)&&(0===b.indexOf("blob:")?!d.isUploaded(b):0===b.indexOf("data:")&&k(a)))))}),m=b.map(l,function(b){var c;return j[b.src]?new a(function(a){j[b.src].then(function(c){return"string"==typeof c?c:void a({image:b,blobInfo:c.blobInfo})})}):(c=new a(function(a,c){h(f,b,a,c)}).then(function(a){return delete j[a.image.src],a})["catch"](function(a){return delete j[b.src],a}),j[b.src]=c,c)}),a.all(m)}var j={};return{findAll:g}}});g("ephox.sand.api.URL",["ephox.sand.util.Global"],function(a){var b=function(){return a.getOrDie("URL")},c=function(a){return b().createObjectURL(a)},d=function(a){b().revokeObjectURL(a)};return{createObjectURL:c,revokeObjectURL:d}}),g("tinymce.core.util.Uuid",[],function(){var a=0,b=function(){var a=function(){return Math.round(4294967295*Math.random()).toString(36)},b=(new Date).getTime();return"s"+b.toString(36)+a()+a()+a()},c=function(c){return c+a++ +b()};return{uuid:c}}),g("tinymce.core.file.BlobCache",["ephox.sand.api.URL","tinymce.core.util.Arr","tinymce.core.util.Fun","tinymce.core.util.Uuid"],function(a,b,c,d){return function(){function e(a){var b={"image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/png":"png"};return b[a.toLowerCase()]||"dat"}function f(a,b,c,d){return g("object"==typeof a?a:{id:a,name:d,blob:b,base64:c})}function g(b){var c,f;if(!b.blob||!b.base64)throw"blob and base64 representations of the image are required for BlobInfo to be created";return c=b.id||d.uuid("blobid"),f=b.name||c,{id:o(c),name:o(f),filename:o(f+"."+e(b.blob.type)),blob:o(b.blob),base64:o(b.base64),blobUri:o(b.blobUri||a.createObjectURL(b.blob)),uri:o(b.uri)}}function h(a){i(a.id())||n.push(a)}function i(a){return j(function(b){return b.id()===a})}function j(a){return b.filter(n,a)[0]}function k(a){return j(function(b){return b.blobUri()==a})}function l(c){n=b.filter(n,function(b){return b.blobUri()!==c||(a.revokeObjectURL(b.blobUri()),!1)})}function m(){b.each(n,function(b){a.revokeObjectURL(b.blobUri())}),n=[]}var n=[],o=c.constant;return{create:f,add:h,get:i,getByUri:k,findFirst:j,removeByUri:l,destroy:m}}}),g("tinymce.core.file.UploadStatus",[],function(){return function(){function a(a,b){return{status:a,resultUri:b}}function b(a){return a in l}function c(a){var b=l[a];return b?b.resultUri:null}function d(a){return!!b(a)&&l[a].status===j}function e(a){return!!b(a)&&l[a].status===k}function f(b){l[b]=a(j,null)}function g(b,c){l[b]=a(k,c)}function h(a){delete l[a]}function i(){l={}}var j=1,k=2,l={};return{hasBlobUri:b,getResultUri:c,isPending:d,isUploaded:e,markPending:f,markUploaded:g,removeFailed:h,destroy:i}}}),g("tinymce.core.EditorUpload",["tinymce.core.util.Arr","tinymce.core.file.Uploader","tinymce.core.file.ImageScanner","tinymce.core.file.BlobCache","tinymce.core.file.UploadStatus","tinymce.core.ErrorReporter"],function(a,b,c,d,e,f){return function(g){function h(a){return function(b){return g.selection?a(b):[]}}function i(){return"?"+(new Date).getTime()}function j(a,b,c){var d=0;do d=a.indexOf(b,d),d!==-1&&(a=a.substring(0,d)+c+a.substr(d+b.length),d+=c.length-b.length+1);while(d!==-1);return a}function k(a,b,c){return a=j(a,'src="'+b+'"','src="'+c+'"'),a=j(a,'data-mce-src="'+b+'"','data-mce-src="'+c+'"')}function l(b,c){a.each(g.undoManager.data,function(d){"fragmented"===d.type?d.fragments=a.map(d.fragments,function(a){return k(a,b,c)}):d.content=k(d.content,b,c)})}function m(){return g.notificationManager.open({text:g.translate("Image uploading..."),type:"info",timeout:-1,progressBar:!0})}function n(a,b){w.removeByUri(a.src),l(a.src,b),g.$(a).attr({src:x.images_reuse_filename?b+i():b,"data-mce-src":g.convertURL(b,"src")})}function o(c){return u||(u=new b(y,{url:x.images_upload_url,basePath:x.images_upload_base_path,credentials:x.images_upload_credentials,handler:x.images_upload_handler})),r().then(h(function(b){var d;return d=a.map(b,function(a){return a.blobInfo}),u.upload(d,m).then(h(function(d){var e=a.map(d,function(a,c){var d=b[c].image;return a.status&&g.settings.images_replace_blob_uris!==!1?n(d,a.url):a.error&&f.uploadError(g,a.error),{element:d,status:a.status}});return c&&c(e),e}))}))}function p(a){if(x.automatic_uploads!==!1)return o(a)}function q(a){return!x.images_dataimg_filter||x.images_dataimg_filter(a)}function r(){return v||(v=new c(y,w)),v.findAll(g.getBody(),q).then(h(function(b){return b=a.filter(b,function(a){return"string"!=typeof a||(f.displayError(g,a),!1)}),a.each(b,function(a){l(a.image.src,a.blobInfo.blobUri()),a.image.src=a.blobInfo.blobUri(),a.image.removeAttribute("data-mce-src")}),b}))}function s(){w.destroy(),y.destroy(),v=u=null}function t(b){return b.replace(/src="(blob:[^"]+)"/g,function(b,c){var d=y.getResultUri(c);if(d)return'src="'+d+'"';var e=w.getByUri(c);return e||(e=a.reduce(g.editorManager.get(),function(a,b){return a||b.editorUpload&&b.editorUpload.blobCache.getByUri(c)},null)),e?'src="data:'+e.blob().type+";base64,"+e.base64()+'"':b})}var u,v,w=new d,x=g.settings,y=new e;return g.on("setContent",function(){g.settings.automatic_uploads!==!1?p():r()}),g.on("RawSaveContent",function(a){a.content=t(a.content)}),g.on("getContent",function(a){a.source_view||"raw"==a.format||(a.content=t(a.content))}),g.on("PostRender",function(){g.parser.addNodeFilter("img",function(b){a.each(b,function(a){var b=a.attr("src");if(!w.getByUri(b)){var c=y.getResultUri(b);c&&a.attr("src",c)}})})}),{blobCache:w,uploadImages:o,uploadImagesAuto:p,scanForImages:r,destroy:s}}}),g("tinymce.core.ForceBlocks",["ephox.katamari.api.Fun"],function(a){var b=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n=a.settings,o=a.dom,p=a.selection,q=a.schema,r=q.getBlockElements(),s=p.getStart(),t=a.getBody(),u=-16777215;if(m=n.forced_root_block,s&&1===s.nodeType&&m){for(;s&&s!==t;){if(r[s.nodeName])return;s=s.parentNode}if(b=p.getRng(),b.setStart){c=b.startContainer,d=b.startOffset,e=b.endContainer,f=b.endOffset;try{j=a.getDoc().activeElement===t}catch(v){}}else b.item&&(s=b.item(0),b=a.getDoc().body.createTextRange(),b.moveToElementText(s)),j=b.parentElement().ownerDocument===a.getDoc(),k=b.duplicate(),k.collapse(!0),d=k.move("character",u)*-1,k.collapsed||(k=b.duplicate(),k.collapse(!1),f=k.move("character",u)*-1-d);for(s=t.firstChild,l=t.nodeName.toLowerCase();s;)if((3===s.nodeType||1==s.nodeType&&!r[s.nodeName])&&q.isValidChild(l,m.toLowerCase())){if(3===s.nodeType&&0===s.nodeValue.length){h=s,s=s.nextSibling,o.remove(h);continue}g||(g=o.create(m,a.settings.forced_root_block_attrs),s.parentNode.insertBefore(g,s),i=!0),h=s,s=s.nextSibling,g.appendChild(h)}else g=null,s=s.nextSibling;if(i&&j){if(b.setStart)b.setStart(c,d),b.setEnd(e,f),p.setRng(b);else try{b=a.getDoc().body.createTextRange(),b.moveToElementText(t),b.collapse(!0),b.moveStart("character",d),f>0&&b.moveEnd("character",f),b.select()}catch(v){}a.nodeChanged()}}},c=function(c){c.settings.forced_root_block&&c.on("NodeChange",a.curry(b,c))};return{setup:c}}),g("tinymce.core.dom.Dimensions",["tinymce.core.util.Arr","tinymce.core.dom.NodeType","tinymce.core.geom.ClientRect"],function(a,b,c){function d(e){function f(b){return a.map(b,function(a){return a=c.clone(a),a.node=e,a})}if(a.isArray(e))return a.reduce(e,function(a,b){return a.concat(d(b))},[]);if(b.isElement(e))return f(e.getClientRects());if(b.isText(e)){var g=e.ownerDocument.createRange();return g.setStart(e,0),g.setEnd(e,e.data.length),f(g.getClientRects())}}return{getClientRects:d}}),g("tinymce.core.caret.LineUtils",["tinymce.core.util.Fun","tinymce.core.util.Arr","tinymce.core.dom.NodeType","tinymce.core.dom.Dimensions","tinymce.core.geom.ClientRect","tinymce.core.caret.CaretUtils","tinymce.core.caret.CaretCandidate"],function(a,b,c,d,e,f,g){
-function h(a,b){return Math.abs(a.left-b)}function i(a,b){return Math.abs(a.right-b)}function j(a,c){function d(a,b){return a>=b.left&&a<=b.right}return b.reduce(a,function(a,b){var e,f;return e=Math.min(h(a,c),i(a,c)),f=Math.min(h(b,c),i(b,c)),d(c,b)?b:d(c,a)?a:f==e&&p(b.node)?b:f<e?b:a})}function k(a,b,c,d){for(;d=q(d,a,g.isEditableCaretCandidate,b);)if(c(d))return}function l(a,c){function f(a,e){var f;return f=b.filter(d.getClientRects(e),function(b){return!a(b,c)}),g=g.concat(f),0===f.length}var g=[];return g.push(c),k(-1,a,r(f,e.isAbove),c.node),k(1,a,r(f,e.isBelow),c.node),g}function m(a){return b.filter(b.toArray(a.getElementsByTagName("*")),p)}function n(a,b){return{node:a.node,before:h(a,b)<i(a,b)}}function o(a,c,e){var f,g;return f=d.getClientRects(m(a)),f=b.filter(f,function(a){return e>=a.top&&e<=a.bottom}),g=j(f,c),g&&(g=j(l(a,g),c),g&&p(g.node))?n(g,c):null}var p=c.isContentEditableFalse,q=f.findNode,r=a.curry;return{findClosestClientRect:j,findLineNodeRects:l,closestCaret:o}}),g("tinymce.core.caret.LineWalker",["tinymce.core.util.Fun","tinymce.core.util.Arr","tinymce.core.dom.Dimensions","tinymce.core.caret.CaretCandidate","tinymce.core.caret.CaretUtils","tinymce.core.caret.CaretWalker","tinymce.core.caret.CaretPosition","tinymce.core.geom.ClientRect"],function(a,b,c,d,e,f,g,h){function i(a,b,c,f){for(;f=e.findNode(f,a,d.isEditableCaretCandidate,b);)if(c(f))return}function j(a,d,e,f,g,h){function j(f){var h,i,j;for(j=c.getClientRects(f),a==-1&&(j=j.reverse()),h=0;h<j.length;h++)if(i=j[h],!e(i,l)){if(n.length>0&&d(i,b.last(n))&&m++,i.line=m,g(i))return!0;n.push(i)}}var k,l,m=0,n=[];return(l=b.last(h.getClientRects()))?(k=h.getNode(),j(k),i(a,f,j,k),n):n}function k(a,b){return b.line>a}function l(a,b){return b.line===a}function m(a,c,d,e){function i(c){return 1==a?b.last(c.getClientRects()):b.last(c.getClientRects())}var j,k,l,m,n,o,p=new f(c),q=[],r=0;1==a?(j=p.next,k=h.isBelow,l=h.isAbove,m=g.after(e)):(j=p.prev,k=h.isAbove,l=h.isBelow,m=g.before(e)),o=i(m);do if(m.isVisible()&&(n=i(m),!l(n,o))){if(q.length>0&&k(n,b.last(q))&&r++,n=h.clone(n),n.position=m,n.line=r,d(n))return q;q.push(n)}while(m=j(m));return q}var n=a.curry,o=n(j,-1,h.isAbove,h.isBelow),p=n(j,1,h.isBelow,h.isAbove);return{upUntil:o,downUntil:p,positionsUntil:m,isAboveLine:n(k),isLine:n(l)}}),g("tinymce.core.keyboard.CefUtils",["tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils","tinymce.core.dom.NodeType","tinymce.core.util.Fun"],function(a,b,c,d){var e=c.isContentEditableTrue,f=c.isContentEditableFalse,g=function(a,b,c,d){return b._selectionOverrides.showCaret(a,c,d)},h=function(a){var b=a.ownerDocument.createRange();return b.selectNode(a),b},i=function(a,b){var c;return c=a.fire("BeforeObjectSelected",{target:b}),c.isDefaultPrevented()?null:h(b)},j=function(c,h){var i,j;return h=b.normalizeRange(1,c.getBody(),h),i=a.fromRangeStart(h),f(i.getNode())?g(1,c,i.getNode(),!i.isAtEnd()):f(i.getNode(!0))?g(1,c,i.getNode(!0),!1):(j=c.dom.getParent(i.getNode(),d.or(f,e)),f(j)?g(1,c,j,!1):null)},k=function(a,b){var c;return b&&b.collapsed?(c=j(a,b),c?c:b):b};return{showCaret:g,selectNode:i,renderCaretAtRange:j,renderRangeCaret:k}}),g("tinymce.core.keyboard.CefNavigation",["tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils","tinymce.core.caret.CaretWalker","tinymce.core.caret.LineUtils","tinymce.core.caret.LineWalker","tinymce.core.dom.NodeType","tinymce.core.dom.RangeUtils","tinymce.core.Env","tinymce.core.keyboard.CefUtils","tinymce.core.util.Arr","tinymce.core.util.Fun"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=g.isContentEditableFalse,n=h.getSelectedNode,o=c.isAfterContentEditableFalse,p=c.isBeforeContentEditableFalse,q=function(a,b){for(;b=a(b);)if(b.isVisible())return b;return b},r=function(a,b){var d=c.isInSameBlock(a,b);return!(d||!g.isBr(a.getNode()))||d},s=function(b){return a.isCaretContainerBlock(b.startContainer)},t=function(a,d,e){return e=c.normalizeRange(a,d,e),a===-1?b.fromRangeStart(e):b.fromRangeEnd(e)},u=function(a,b,c,d,e){var f,g,h,i;return!e.collapsed&&(f=n(e),m(f))?j.showCaret(a,b,f,a===-1):(i=s(e),g=t(a,b.getBody(),e),d(g)?j.selectNode(b,g.getNode(a===-1)):(g=c(g))?d(g)?j.showCaret(a,b,g.getNode(a===-1),1===a):(h=c(g),d(h)&&r(g,h)?j.showCaret(a,b,h.getNode(a===-1),1===a):i?j.renderRangeCaret(b,g.toRange()):null):i?e:null)},v=function(a,b,c,d){var g,h,i,l,q,r,s,u,v;if(v=n(d),g=t(a,b.getBody(),d),h=c(b.getBody(),f.isAboveLine(1),g),i=k.filter(h,f.isLine(1)),q=k.last(g.getClientRects()),p(g)&&(v=g.getNode()),o(g)&&(v=g.getNode(!0)),!q)return null;if(r=q.left,l=e.findClosestClientRect(i,r),l&&m(l.node))return s=Math.abs(r-l.left),u=Math.abs(r-l.right),j.showCaret(a,b,l.node,s<u);if(v){var w=f.positionsUntil(a,b.getBody(),f.isAboveLine(1),v);if(l=e.findClosestClientRect(k.filter(w,f.isLine(1)),r))return j.renderRangeCaret(b,l.position.toRange());if(l=k.last(k.filter(w,f.isLine(0))))return j.renderRangeCaret(b,l.position.toRange())}},w=function(a){var b=a.dom.create(a.settings.forced_root_block);return(!i.ie||i.ie>=11)&&(b.innerHTML='<br data-mce-bogus="1">'),b},x=function(a,c,e){var f,g,h,i=new d(a.getBody()),j=l.curry(q,i.next),k=l.curry(q,i.prev);if(e.collapsed&&a.settings.forced_root_block){if(f=a.dom.getParent(e.startContainer,"PRE"),!f)return;g=1===c?j(b.fromRangeStart(e)):k(b.fromRangeStart(e)),g||(h=w(a),1===c?a.$(f).after(h):a.$(f).before(h),a.selection.select(h,!0),a.selection.collapse())}},y=function(a,b){var c,e=new d(a.getBody()),f=l.curry(q,e.next),g=l.curry(q,e.prev),h=b?1:-1,i=b?f:g,j=b?p:o,k=a.selection.getRng();return(c=u(h,a,i,j,k))?c:(c=x(a,h,k),c?c:null)},z=function(a,b){var c,d=b?1:-1,e=b?f.downUntil:f.upUntil,g=a.selection.getRng();return(c=v(d,a,e,g))?c:(c=x(a,d,g),c?c:null)},A=function(a,b){return function(){var c=y(a,b);return!!c&&(a.selection.setRng(c),!0)}},B=function(a,b){return function(){var c=z(a,b);return!!c&&(a.selection.setRng(c),!0)}};return{moveH:A,moveV:B}}),g("ephox.katamari.api.Merger",["ephox.katamari.api.Type","global!Array","global!Error"],function(a,b,c){var d=function(a,b){return b},e=function(b,c){var d=a.isObject(b)&&a.isObject(c);return d?g(b,c):c},f=function(a){return function(){for(var d=new b(arguments.length),e=0;e<d.length;e++)d[e]=arguments[e];if(0===d.length)throw new c("Can't merge zero objects");for(var f={},g=0;g<d.length;g++){var h=d[g];for(var i in h)h.hasOwnProperty(i)&&(f[i]=a(f[i],h[i]))}return f}},g=f(e),h=f(d);return{deepMerge:g,merge:h}}),g("tinymce.core.keyboard.MatchKeys",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Merger"],function(a,b,c){var d=function(d){return a.map(d,function(a){return c.merge({shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,keyCode:0,action:b.noop},a)})},e=function(a,b){return b.keyCode===a.keyCode&&b.shiftKey===a.shiftKey&&b.altKey===a.altKey&&b.ctrlKey===a.ctrlKey&&b.metaKey===a.metaKey},f=function(b,c){return a.bind(d(b),function(a){return e(a,c)?[a]:[]})},g=function(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}},h=function(b,c){return a.find(f(b,c),function(a){return a.action()})};return{match:f,action:g,execute:h}}),g("tinymce.core.keyboard.ArrowKeys",["tinymce.core.keyboard.BoundarySelection","tinymce.core.keyboard.CefNavigation","tinymce.core.keyboard.MatchKeys","tinymce.core.util.VK"],function(a,b,c,d){var e=function(e,f,g){c.execute([{keyCode:d.RIGHT,action:b.moveH(e,!0)},{keyCode:d.LEFT,action:b.moveH(e,!1)},{keyCode:d.UP,action:b.moveV(e,!1)},{keyCode:d.DOWN,action:b.moveV(e,!0)},{keyCode:d.RIGHT,action:a.move(e,f,!0)},{keyCode:d.LEFT,action:a.move(e,f,!1)}],g).each(function(a){g.preventDefault()})},f=function(a,b){a.on("keydown",function(c){c.isDefaultPrevented()===!1&&e(a,b,c)})};return{setup:f}}),g("tinymce.core.keyboard.DeleteBackspaceKeys",["tinymce.core.delete.BlockBoundaryDelete","tinymce.core.delete.BlockRangeDelete","tinymce.core.delete.CefDelete","tinymce.core.delete.InlineBoundaryDelete","tinymce.core.keyboard.MatchKeys","tinymce.core.util.VK"],function(a,b,c,d,e,f){var g=function(g,h,i){e.execute([{keyCode:f.BACKSPACE,action:e.action(c.backspaceDelete,g,!1)},{keyCode:f.DELETE,action:e.action(c.backspaceDelete,g,!0)},{keyCode:f.BACKSPACE,action:e.action(d.backspaceDelete,g,h,!1)},{keyCode:f.DELETE,action:e.action(d.backspaceDelete,g,h,!0)},{keyCode:f.BACKSPACE,action:e.action(b.backspaceDelete,g,!1)},{keyCode:f.DELETE,action:e.action(b.backspaceDelete,g,!0)},{keyCode:f.BACKSPACE,action:e.action(a.backspaceDelete,g,!1)},{keyCode:f.DELETE,action:e.action(a.backspaceDelete,g,!0)}],i).each(function(a){i.preventDefault()})},h=function(a,b){e.execute([{keyCode:f.BACKSPACE,action:e.action(c.paddEmptyElement,a)},{keyCode:f.DELETE,action:e.action(c.paddEmptyElement,a)}],b)},i=function(a,b){a.on("keydown",function(c){c.isDefaultPrevented()===!1&&g(a,b,c)}),a.on("keyup",function(b){b.isDefaultPrevented()===!1&&h(a,b)})};return{setup:i}}),g("tinymce.core.keyboard.InsertNewLine",["tinymce.core.caret.CaretContainer","tinymce.core.dom.NodeType","tinymce.core.dom.RangeUtils","tinymce.core.dom.TreeWalker","tinymce.core.text.Zwsp","tinymce.core.util.Tools"],function(a,b,c,d,e,f){var g=function(a){return a&&"A"===a.nodeName&&0===f.trim(e.trim(a.innerText||a.textContent)).length},h=function(a){return a&&/^(TD|TH|CAPTION)$/.test(a.nodeName)},i=function(a,b){return a.firstChild&&a.firstChild.nodeName==b},j=function(a,b){return a&&a.parentNode&&a.parentNode.nodeName===b},k=function(a){a.innerHTML='<br data-mce-bogus="1">'},l=function(a,b){return a.nodeName===b||a.previousSibling&&a.previousSibling.nodeName===b},m=function(a){return a&&/^(OL|UL|LI)$/.test(a.nodeName)},n=function(a){return m(a)&&m(a.parentNode)},o=function(a,b){return b&&a.isBlock(b)&&!/^(TD|TH|CAPTION|FORM)$/.test(b.nodeName)&&!/^(fixed|absolute)/i.test(b.style.position)&&"true"!==a.getContentEditable(b)},p=function(a,b,c){var d,e=c,f=[];if(e){for(;e=e.firstChild;){if(a.isBlock(e))return;1!=e.nodeType||b[e.nodeName.toLowerCase()]||f.push(e)}for(d=f.length;d--;)e=f[d],!e.hasChildNodes()||e.firstChild==e.lastChild&&""===e.firstChild.nodeValue?a.remove(e):g(e)&&a.remove(e)}},q=function(a,c,d){return b.isText(c)===!1?d:a?1===d&&c.data.charAt(d-1)===e.ZWSP?0:d:d===c.data.length-1&&c.data.charAt(d)===e.ZWSP?c.data.length:d},r=function(a){var b=a.cloneRange();return b.setStart(a.startContainer,q(!0,a.startContainer,a.startOffset)),b.setEnd(a.endContainer,q(!1,a.endContainer,a.endOffset)),b},s=function(a){for(;a;){if(1===a.nodeType||3===a.nodeType&&a.data&&/[\r\n\s]/.test(a.data))return a;a=a.nextSibling}},t=function(a,b){a.execCommand("InsertLineBreak",!1,b)},u=function(a){do 3===a.nodeType&&(a.nodeValue=a.nodeValue.replace(/^[\r\n]+/,"")),a=a.firstChild;while(a)},v=function(a,b){var c,d,e=a.getRoot();for(c=b;c!==e&&"false"!==a.getContentEditable(c);)"true"===a.getContentEditable(c)&&(d=c),c=c.parentNode;return c!==e?d:e},w=function(a,b){var c=a.settings.forced_root_block;c&&c.toLowerCase()===b.tagName.toLowerCase()&&a.dom.setAttribs(b,a.settings.forced_root_block_attrs)},x=function(a,b,c,d,e){var f,g,i,j,k,l,m=b||"P",n=a.dom,p=v(n,d);if(g=n.getParent(d,n.isBlock),!g||!o(n,g)){if(g=g||p,l=g==a.getBody()||h(g)?g.nodeName.toLowerCase():g.parentNode.nodeName.toLowerCase(),!g.hasChildNodes())return f=n.create(m),w(a,f),g.appendChild(f),c.setStart(f,0),c.setEnd(f,0),f;for(j=d;j.parentNode!=g;)j=j.parentNode;for(;j&&!n.isBlock(j);)i=j,j=j.previousSibling;if(i&&a.schema.isValidChild(l,m.toLowerCase())){for(f=n.create(m),w(a,f),i.parentNode.insertBefore(f,i),j=i;j&&!n.isBlock(j);)k=j.nextSibling,f.appendChild(j),j=k;c.setStart(d,e),c.setEnd(d,e)}}return d},y=function(a,b){var c;b.normalize(),c=b.lastChild,c&&!/^(left|right)$/gi.test(a.getStyle(c,"float",!0))||a.add(b,"br")},z=function(a){var b=a.parentNode;return/^(LI|DT|DD)$/.test(b.nodeName)?b:a},A=function(a,b,c){for(var d=a[c?"firstChild":"lastChild"];d&&1!=d.nodeType;)d=d[c?"nextSibling":"previousSibling"];return d===b},B=function(b,e){function f(a){var b,c,e,f,g=a,h=S.getMoveCaretBeforeOnEnterElements();if(a){if(/^(LI|DT|DD)$/.test(a.nodeName)){var i=s(a.firstChild);i&&/^(UL|OL|DL)$/.test(i.nodeName)&&a.insertBefore(P.doc.createTextNode("\xa0"),a.firstChild)}if(e=P.createRng(),a.normalize(),a.hasChildNodes()){for(b=new d(a,a);c=b.current();){if(3==c.nodeType){e.setStart(c,0),e.setEnd(c,0);break}if(h[c.nodeName.toLowerCase()]){e.setStartBefore(c),e.setEndBefore(c);break}g=c,c=b.next()}c||(e.setStart(g,0),e.setEnd(g,0))}else"BR"==a.nodeName?a.nextSibling&&P.isBlock(a.nextSibling)?(e.setStartBefore(a),e.setEndBefore(a)):(e.setStartAfter(a),e.setEndAfter(a)):(e.setStart(a,0),e.setEnd(a,0));Q.setRng(e),P.remove(f),Q.scrollIntoView(a)}}function g(a){var c,d,e,f=E,g=S.getTextInlineElements();if(a||"TABLE"==L||"HR"==L?(c=P.create(a||N),w(b,c)):c=G.cloneNode(!1),e=c,R.keep_styles===!1)P.setAttrib(c,"style",null),P.setAttrib(c,"class",null);else do if(g[f.nodeName]){if("_mce_caret"==f.id)continue;d=f.cloneNode(!1),P.setAttrib(d,"id",""),c.hasChildNodes()?(d.appendChild(c.firstChild),c.appendChild(d)):(e=d,c.appendChild(d))}while((f=f.parentNode)&&f!=D);return k(e),c}function h(a){var b,c,e,f;if(f=q(a,E,F),3==E.nodeType&&(a?f>0:f<E.nodeValue.length))return!1;if(E.parentNode==G&&O&&!a)return!0;if(a&&1==E.nodeType&&E==G.firstChild)return!0;if(l(E,"TABLE")||l(E,"HR"))return O&&!a||!O&&a;for(b=new d(E,G),3==E.nodeType&&(a&&0===f?b.prev():a||f!=E.nodeValue.length||b.next());c=b.current();){if(1===c.nodeType){if(!c.getAttribute("data-mce-bogus")&&(e=c.nodeName.toLowerCase(),T[e]&&"br"!==e))return!1}else if(3===c.nodeType&&!/^[ \t\r\n]*$/.test(c.nodeValue))return!1;a?b.prev():b.next()}return!0}function m(){K!=b.getBody()&&(n(K)&&(N="LI"),I=N?g(N):P.create("BR"),A(K,G,!0)&&A(K,G,!1)?j(K,"LI")?P.insertAfter(I,z(K)):P.replace(I,K):A(K,G,!0)?j(K,"LI")?(P.insertAfter(I,z(K)),I.appendChild(P.doc.createTextNode(" ")),I.appendChild(K)):K.parentNode.insertBefore(I,K):A(K,G,!1)?P.insertAfter(I,z(K)):(K=z(K),C=U.cloneRange(),C.setStartAfter(G),C.setEndAfter(K),J=C.extractContents(),"LI"===N&&i(J,"LI")?(I=J.firstChild,P.insertAfter(J,K)):(P.insertAfter(J,K),P.insertAfter(I,K))),P.remove(G),f(I))}function B(){I=/^(H[1-6]|PRE|FIGURE)$/.test(L)&&"HGROUP"!=M?g(N):g(),R.end_container_on_empty_block&&o(P,K)&&P.isEmpty(G)?I=P.split(K,G):P.insertAfter(I,G),f(I)}var C,D,E,F,G,H,I,J,K,L,M,N,O,P=b.dom,Q=b.selection,R=b.settings,S=b.schema,T=S.getNonEmptyElements(),U=b.selection.getRng();if(new c(P).normalize(U),E=U.startContainer,F=U.startOffset,N=(R.force_p_newlines?"p":"")||R.forced_root_block,N=N?N.toUpperCase():"",H=e.shiftKey,1==E.nodeType&&E.hasChildNodes()&&(O=F>E.childNodes.length-1,E=E.childNodes[Math.min(F,E.childNodes.length-1)]||E,F=O&&3==E.nodeType?E.nodeValue.length:0),D=v(P,E)){if(!P.isBlock(D)&&D!=P.getRoot())return void(N&&!H||t(b,e));if((N&&!H||!N&&H)&&(E=x(b,N,U,E,F)),G=P.getParent(E,P.isBlock),K=G?P.getParent(G.parentNode,P.isBlock):null,L=G?G.nodeName.toUpperCase():"",M=K?K.nodeName.toUpperCase():"","LI"!=M||e.ctrlKey||(G=K,K=K.parentNode,L=M),/^(LI|DT|DD)$/.test(L)){if(!N&&H)return void t(b,e);if(P.isEmpty(G))return void m()}if("PRE"==L&&R.br_in_pre!==!1){if(!H)return void t(b,e)}else if(!N&&!H&&"LI"!=L||N&&H)return void t(b,e);N&&G===b.getBody()||(N=N||"P",a.isCaretContainerBlock(G)?(I=a.showCaretContainerBlock(G),P.isEmpty(G)&&k(G),f(I)):h()?B():h(!0)?(I=G.parentNode.insertBefore(g(),G),f(l(G,"HR")?I:G)):(C=r(U).cloneRange(),C.setEndAfter(G),J=C.extractContents(),u(J),I=J.firstChild,P.insertAfter(J,G),p(P,T,I),y(P,G),P.isEmpty(G)&&k(G),I.normalize(),P.isEmpty(I)?(P.remove(I),B()):f(I)),P.setAttrib(I,"id",""),b.fire("NewBlock",{newBlock:I}))}};return{insert:B}}),g("tinymce.core.keyboard.EnterKey",["tinymce.core.keyboard.InsertNewLine","tinymce.core.util.VK"],function(a,b){var c=function(a){a.typing&&(a.typing=!1,a.add())},d=function(b,d){d.isDefaultPrevented()||(d.preventDefault(),c(b.undoManager),b.undoManager.transact(function(){b.selection.isCollapsed()===!1&&b.execCommand("Delete"),a.insert(b,d)}))},e=function(a){a.on("keydown",function(c){c.keyCode===b.ENTER&&d(a,c)})};return{setup:e}}),g("tinymce.core.keyboard.InsertSpace",["ephox.katamari.api.Fun","tinymce.core.caret.CaretPosition","tinymce.core.dom.NodeType","tinymce.core.keyboard.BoundaryLocation","tinymce.core.keyboard.InlineUtils"],function(a,b,c,d,e){var f=function(a,b){return j(a)&&c.isText(b.container())},g=function(a,b){var c=b.container(),d=b.offset();c.insertData(d,"\xa0"),a.selection.setCursorLocation(c,d+1)},h=function(a,b,c){return!!f(c,b)&&(g(a,b),!0)},i=function(c){var f=a.curry(e.isInlineTarget,c),g=b.fromRangeStart(c.selection.getRng()),i=d.readLocation(f,c.getBody(),g);return i.map(a.curry(h,c,g)).getOr(!1)},j=function(b){return b.fold(a.constant(!1),a.constant(!0),a.constant(!0),a.constant(!1))},k=function(a){return!!a.selection.isCollapsed()&&i(a)};return{insertAtSelection:k}}),g("tinymce.core.keyboard.SpaceKey",["tinymce.core.keyboard.InsertSpace","tinymce.core.keyboard.MatchKeys","tinymce.core.util.VK"],function(a,b,c){var d=function(d,e){b.execute([{keyCode:c.SPACEBAR,action:b.action(a.insertAtSelection,d)}],e).each(function(a){e.preventDefault()})},e=function(a){a.on("keydown",function(b){b.isDefaultPrevented()===!1&&d(a,b)})};return{setup:e}}),g("tinymce.core.keyboard.KeyboardOverrides",["tinymce.core.keyboard.ArrowKeys","tinymce.core.keyboard.BoundarySelection","tinymce.core.keyboard.DeleteBackspaceKeys","tinymce.core.keyboard.EnterKey","tinymce.core.keyboard.SpaceKey"],function(a,b,c,d,e){var f=function(f){var g=b.setupSelectedState(f);a.setup(f,g),c.setup(f,g),d.setup(f),e.setup(f)};return{setup:f}}),g("tinymce.core.NodeChange",["tinymce.core.dom.RangeUtils","tinymce.core.Env","tinymce.core.util.Delay"],function(a,b,c){return function(d){function e(a){var b,c;if(c=d.$(a).parentsUntil(d.getBody()).add(a),c.length===g.length){for(b=c.length;b>=0&&c[b]===g[b];b--);if(b===-1)return g=c,!0}return g=c,!1}var f,g=[];"onselectionchange"in d.getDoc()||d.on("NodeChange Click MouseUp KeyUp Focus",function(b){var c,e;c=d.selection.getRng(),e={startContainer:c.startContainer,startOffset:c.startOffset,endContainer:c.endContainer,endOffset:c.endOffset},"nodechange"!=b.type&&a.compareRanges(e,f)||d.fire("SelectionChange"),f=e}),d.on("contextmenu",function(){d.fire("SelectionChange")}),d.on("SelectionChange",function(){var a=d.selection.getStart(!0);!a||!b.range&&d.selection.isCollapsed()||!e(a)&&d.dom.isChildOf(a,d.getBody())&&d.nodeChanged({selectionChange:!0})}),d.on("MouseUp",function(a){a.isDefaultPrevented()||("IMG"==d.selection.getNode().nodeName?c.setEditorTimeout(d,function(){d.nodeChanged()}):d.nodeChanged())}),this.nodeChanged=function(a){var b,c,e,f=d.selection;d.initialized&&f&&!d.settings.disable_nodechange&&!d.readonly&&(e=d.getBody(),b=f.getStart(!0)||e,b.ownerDocument==d.getDoc()&&d.dom.isChildOf(b,e)||(b=e),c=[],d.dom.getParent(b,function(a){return a===e||void c.push(a)}),a=a||{},a.element=b,a.parents=c,d.fire("NodeChange",a))}}}),g("tinymce.core.dom.MousePosition",[],function(){var a=function(a){var b,c,d,e;return e=a.getBoundingClientRect(),b=a.ownerDocument,c=b.documentElement,d=b.defaultView,{top:e.top+d.pageYOffset-c.clientTop,left:e.left+d.pageXOffset-c.clientLeft}},b=function(b){return b.inline?a(b.getBody()):{left:0,top:0}},c=function(a){var b=a.getBody();return a.inline?{left:b.scrollLeft,top:b.scrollTop}:{left:0,top:0}},d=function(a){var b=a.getBody(),c=a.getDoc().documentElement,d={left:b.scrollLeft,top:b.scrollTop},e={left:b.scrollLeft||c.scrollLeft,top:b.scrollTop||c.scrollTop};return a.inline?d:e},e=function(b,c){if(c.target.ownerDocument!==b.getDoc()){var e=a(b.getContentAreaContainer()),f=d(b);return{left:c.pageX-e.left+f.left,top:c.pageY-e.top+f.top}}return{left:c.pageX,top:c.pageY}},f=function(a,b,c){return{pageX:c.left-a.left+b.left,pageY:c.top-a.top+b.top}},g=function(a,d){return f(b(a),c(a),e(a,d))};return{calc:g}}),g("tinymce.core.DragDropOverrides",["tinymce.core.dom.NodeType","tinymce.core.util.Arr","tinymce.core.util.Fun","tinymce.core.util.Delay","tinymce.core.dom.DOMUtils","tinymce.core.dom.MousePosition"],function(a,b,c,d,e,f){var g=a.isContentEditableFalse,h=a.isContentEditableTrue,i=function(a,b){return g(b)&&b!==a},j=function(a,b,c){return b!==c&&!a.dom.isChildOf(b,c)&&!g(b)},k=function(a){var b=a.cloneNode(!0);return b.removeAttribute("data-mce-selected"),b},l=function(a,b,c,d){var e=b.cloneNode(!0);a.dom.setStyles(e,{width:c,height:d}),a.dom.setAttrib(e,"data-mce-selected",null);var f=a.dom.create("div",{"class":"mce-drag-container","data-mce-bogus":"all",unselectable:"on",contenteditable:"false"});return a.dom.setStyles(f,{position:"absolute",opacity:.5,overflow:"hidden",border:0,padding:0,margin:0,width:c,height:d}),a.dom.setStyles(e,{margin:0,boxSizing:"border-box"}),f.appendChild(e),f},m=function(a,b){a.parentNode!==b&&b.appendChild(a)},n=function(a,b,c,d,e,f){var g=0,h=0;a.style.left=b.pageX+"px",a.style.top=b.pageY+"px",b.pageX+c>e&&(g=b.pageX+c-e),b.pageY+d>f&&(h=b.pageY+d-f),a.style.width=c-g+"px",a.style.height=d-h+"px"},o=function(a){a&&a.parentNode&&a.parentNode.removeChild(a)},p=function(a){return 0===a.button},q=function(a){return a.element},r=function(a,b){return{pageX:b.pageX-a.relX,pageY:b.pageY+5}},s=function(a,d){return function(e){if(p(e)){var f=b.find(d.dom.getParents(e.target),c.or(g,h));if(i(d.getBody(),f)){var j=d.dom.getPos(f),k=d.getBody(),m=d.getDoc().documentElement;a.element=f,a.screenX=e.screenX,a.screenY=e.screenY,a.maxX=(d.inline?k.scrollWidth:m.offsetWidth)-2,a.maxY=(d.inline?k.scrollHeight:m.offsetHeight)-2,a.relX=e.pageX-j.x,a.relY=e.pageY-j.y,a.width=f.offsetWidth,a.height=f.offsetHeight,a.ghost=l(d,f,a.width,a.height)}}}},t=function(a,b){var c=d.throttle(function(a,c){b._selectionOverrides.hideFakeCaret(),b.selection.placeCaretAt(a,c)},0);return function(d){var e=Math.max(Math.abs(d.screenX-a.screenX),Math.abs(d.screenY-a.screenY));if(q(a)&&!a.dragging&&e>10){var g=b.fire("dragstart",{target:a.element});if(g.isDefaultPrevented())return;a.dragging=!0,b.focus()}if(a.dragging){var h=r(a,f.calc(b,d));m(a.ghost,b.getBody()),n(a.ghost,h,a.width,a.height,a.maxX,a.maxY),c(d.clientX,d.clientY)}}},u=function(a){var b=a.getSel().getRangeAt(0),c=b.startContainer;return 3===c.nodeType?c.parentNode:c},v=function(a,b){return function(c){if(a.dragging&&j(b,u(b.selection),a.element)){var d=k(a.element),e=b.fire("drop",{targetClone:d,clientX:c.clientX,clientY:c.clientY});e.isDefaultPrevented()||(d=e.targetClone,b.undoManager.transact(function(){o(a.element),b.insertContent(b.dom.getOuterHTML(d)),b._selectionOverrides.hideFakeCaret()}))}x(a)}},w=function(a,b){return function(){x(a),a.dragging&&b.fire("dragend")}},x=function(a){a.dragging=!1,a.element=null,o(a.ghost)},y=function(a){var b,c,d,f,g,h,i={};b=e.DOM,h=document,c=s(i,a),d=t(i,a),f=v(i,a),g=w(i,a),a.on("mousedown",c),a.on("mousemove",d),a.on("mouseup",f),b.bind(h,"mousemove",d),b.bind(h,"mouseup",g),a.on("remove",function(){b.unbind(h,"mousemove",d),b.unbind(h,"mouseup",g)})},z=function(a){a.on("drop",function(b){var c="undefined"!=typeof b.clientX?a.getDoc().elementFromPoint(b.clientX,b.clientY):null;(g(c)||g(a.dom.getContentEditableParent(c)))&&b.preventDefault()})},A=function(a){y(a),z(a)};return{init:A}}),g("tinymce.core.caret.FakeCaret",["tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretContainerRemove","tinymce.core.caret.CaretPosition","tinymce.core.dom.DomQuery","tinymce.core.dom.NodeType","tinymce.core.dom.RangeUtils","tinymce.core.geom.ClientRect","tinymce.core.util.Delay"],function(a,b,c,d,e,f,g,h){var i=e.isContentEditableFalse,j=function(a){return a&&/^(TD|TH)$/i.test(a.nodeName)};return function(c,e){function f(a,b){var d,e,f,h,i,j=g.collapse(a.getBoundingClientRect(),b);return"BODY"==c.tagName?(d=c.ownerDocument.documentElement,e=c.scrollLeft||d.scrollLeft,f=c.scrollTop||d.scrollTop):(i=c.getBoundingClientRect(),e=c.scrollLeft-i.left,f=c.scrollTop-i.top),j.left+=e,j.right+=e,j.top+=f,j.bottom+=f,j.width=1,h=a.offsetWidth-a.clientWidth,h>0&&(b&&(h*=-1),j.left+=h,j.right+=h),j}function k(){var b,e,f,g,h;for(b=d("*[contentEditable=false]",c),g=0;g<b.length;g++)e=b[g],f=e.previousSibling,a.endsWithCaretContainer(f)&&(h=f.data,1==h.length?f.parentNode.removeChild(f):f.deleteData(h.length-1,1)),f=e.nextSibling,a.startsWithCaretContainer(f)&&(h=f.data,1==h.length?f.parentNode.removeChild(f):f.deleteData(0,1));return null}function l(b,g){var h,k;return m(),j(g)?null:e(g)?(s=a.insertBlock("p",g,b),h=f(g,b),d(s).css("top",h.top),r=d('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(h).appendTo(c),b&&r.addClass("mce-visual-caret-before"),n(),k=g.ownerDocument.createRange(),k.setStart(s,0),k.setEnd(s,0),k):(s=a.insertInline(g,b),k=g.ownerDocument.createRange(),i(s.nextSibling)?(k.setStart(s,0),k.setEnd(s,0)):(k.setStart(s,1),k.setEnd(s,1)),k)}function m(){k(),s&&(b.remove(s),s=null),r&&(r.remove(),r=null),clearInterval(q)}function n(){q=h.setInterval(function(){d("div.mce-visual-caret",c).toggleClass("mce-visual-caret-hidden")},500)}function o(){h.clearInterval(q)}function p(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"}var q,r,s;return{show:l,hide:m,getCss:p,destroy:o}}}),g("tinymce.core.SelectionOverrides",["ephox.katamari.api.Arr","ephox.sugar.api.dom.Remove","ephox.sugar.api.node.Element","ephox.sugar.api.properties.Attr","ephox.sugar.api.search.SelectorFilter","ephox.sugar.api.search.SelectorFind","tinymce.core.DragDropOverrides","tinymce.core.EditorView","tinymce.core.Env","tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretUtils","tinymce.core.caret.CaretWalker","tinymce.core.caret.FakeCaret","tinymce.core.caret.LineUtils","tinymce.core.dom.ElementType","tinymce.core.dom.NodeType","tinymce.core.dom.RangePoint","tinymce.core.keyboard.CefUtils","tinymce.core.util.Delay","tinymce.core.util.VK"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u){function v(q){function v(a){return q.dom.hasClass(a,"mce-offscreen-selection")}function A(){var a=q.dom.get(T);return a?a.getElementsByTagName("*")[0]:a}function B(a){return q.dom.isBlock(a)}function C(a){a&&q.selection.setRng(a)}function D(){return q.selection.getRng()}function E(a,b){q.selection.scrollIntoView(a,b)}function F(a,b,c){var d;return d=q.fire("ShowCaret",{target:b,direction:a,before:c}),d.isDefaultPrevented()?null:(E(b,a===-1),S.show(c,b))}function G(a,b){return b=l.normalizeRange(a,R,b),a==-1?k.fromRangeStart(b):k.fromRangeEnd(b)}function H(a){a.hasAttribute("data-mce-caret")&&(j.showCaretContainerBlock(a),C(D()),E(a[0]))}function I(){function a(a){for(var b=q.getBody();a&&a!=b;){if(w(a)||x(a))return a;a=a.parentNode}return null}function b(b){var c=!1;b.on("touchstart",function(){c=!1}),b.on("touchmove",function(){c=!0}),b.on("touchend",function(d){var e=a(d.target);x(e)&&(c||(d.preventDefault(),M(s.selectNode(b,e))))})}q.on("mouseup",function(a){var b=D();b.collapsed&&h.isXYInContentArea(q,a.clientX,a.clientY)&&C(s.renderCaretAtRange(q,b))}),q.on("click",function(b){var c;c=a(b.target),c&&(x(c)&&(b.preventDefault(),q.focus()),w(c)&&q.dom.isChildOf(c,q.selection.getNode())&&N())}),q.on("blur NewBlock",function(){N(),P()});var d=function(a){var b=new m(a);if(!a.firstChild)return!1;var c=k.before(a.firstChild),d=b.next(c);return d&&!z(d)&&!y(d)},e=function(a,b){var c=q.dom.getParent(a,q.dom.isBlock),d=q.dom.getParent(b,q.dom.isBlock);return c===d},f=function(a,b){var c=q.dom.getParent(a,q.dom.isBlock),f=q.dom.getParent(b,q.dom.isBlock);return c&&!e(c,f)&&d(c)};b(q),q.on("mousedown",function(b){var d;if(h.isXYInContentArea(q,b.clientX,b.clientY)!==!1)if(d=a(b.target))x(d)?(b.preventDefault(),M(s.selectNode(q,d))):(N(),w(d)&&b.shiftKey||r.isXYWithinRange(b.clientX,b.clientY,q.selection.getRng())||(p.isVoid(c.fromDom(b.target))?q.selection.select(b.target):q.selection.placeCaretAt(b.clientX,b.clientY)));else{N(),P();var e=o.closestCaret(R,b.clientX,b.clientY);e&&(f(b.target,e.node)||(b.preventDefault(),q.getBody().focus(),C(F(1,e.node,e.before))))}}),q.on("keypress",function(a){if(!u.modifierPressed(a))switch(a.keyCode){default:x(q.selection.getNode())&&a.preventDefault()}}),q.on("getSelectionRange",function(a){var b=a.range;if(Q){if(!Q.parentNode)return void(Q=null);b=b.cloneRange(),b.selectNode(Q),a.range=b}}),q.on("setSelectionRange",function(a){var b;b=M(a.range,a.forward),b&&(a.range=b)}),q.on("AfterSetSelectionRange",function(a){var b=a.range;L(b)||P(),v(b.startContainer.parentNode)||N()}),q.on("focus",function(){t.setEditorTimeout(q,function(){q.selection.setRng(s.renderRangeCaret(q,q.selection.getRng()))},0)}),q.on("copy",function(a){var b=a.clipboardData;if(!a.isDefaultPrevented()&&a.clipboardData&&!i.ie){var c=A();c&&(a.preventDefault(),b.clearData(),b.setData("text/html",c.outerHTML),b.setData("text/plain",c.outerText))}}),g.init(q)}function J(){var a=q.contentStyles,b=".mce-content-body";a.push(S.getCss()),a.push(b+" .mce-offscreen-selection {position: absolute;left: -9999999999px;max-width: 1000000px;}"+b+" *[contentEditable=false] {cursor: default;}"+b+" *[contentEditable=true] {cursor: text;}")}function K(a){return j.isCaretContainer(a)||j.startsWithCaretContainer(a)||j.endsWithCaretContainer(a)}function L(a){return K(a.startContainer)||K(a.endContainer)}function M(b,g){var h,j,k,l,m,n,o,p,r,s,t=q.$,u=q.dom;if(!b)return null;if(b.collapsed){if(!L(b))if(g===!1){if(p=G(-1,b),x(p.getNode(!0)))return F(-1,p.getNode(!0),!1);if(x(p.getNode()))return F(-1,p.getNode(),!p.isAtEnd())}else{if(p=G(1,b),x(p.getNode()))return F(1,p.getNode(),!p.isAtEnd());if(x(p.getNode(!0)))return F(1,p.getNode(!0),!1)}return null}return l=b.startContainer,m=b.startOffset,n=b.endOffset,3==l.nodeType&&0==m&&x(l.parentNode)&&(l=l.parentNode,m=u.nodeIndex(l),l=l.parentNode),1!=l.nodeType?null:(n==m+1&&(h=l.childNodes[m]),x(h)?(r=s=h.cloneNode(!0),o=q.fire("ObjectSelected",{target:h,targetClone:r}),o.isDefaultPrevented()?null:(j=f.descendant(c.fromDom(q.getBody()),"#"+T).fold(function(){return t([])},function(a){return t([a.dom()])}),r=o.targetClone,0===j.length&&(j=t('<div data-mce-bogus="all" class="mce-offscreen-selection"></div>').attr("id",T),j.appendTo(q.getBody())),b=q.dom.createRng(),r===s&&i.ie?(j.empty().append('<p style="font-size: 0" data-mce-bogus="all">\xa0</p>').append(r),b.setStartAfter(j[0].firstChild.firstChild),b.setEndAfter(r)):(j.empty().append("\xa0").append(r).append("\xa0"),b.setStart(j[0].firstChild,1),b.setEnd(j[0].lastChild,0)),j.css({top:u.getPos(h,q.getBody()).y}),j[0].focus(),k=q.selection.getSel(),k.removeAllRanges(),k.addRange(b),a.each(e.descendants(c.fromDom(q.getBody()),"*[data-mce-selected]"),function(a){d.remove(a,"data-mce-selected")}),h.setAttribute("data-mce-selected",1),Q=h,P(),b)):null)}function N(){Q&&(Q.removeAttribute("data-mce-selected"),f.descendant(c.fromDom(q.getBody()),"#"+T).each(b.remove),Q=null)}function O(){S.destroy(),Q=null}function P(){S.hide()}var Q,R=q.getBody(),S=new n(q.getBody(),B),T="sel-"+q.dom.uniqueId();return i.ceFalse&&(I(),J()),{showCaret:F,showBlockCaretContainer:H,hideFakeCaret:P,destroy:O}}var w=q.isContentEditableTrue,x=q.isContentEditableFalse,y=l.isAfterContentEditableFalse,z=l.isBeforeContentEditableFalse;return v}),g("tinymce.core.undo.Diff",[],function(){var a=0,b=1,c=2,d=function(d,e){var f=d.length+e.length+2,g=new Array(f),h=new Array(f),i=function(a,b,c){return{start:a,end:b,diag:c}},j=function(f,g,h,i,k){var m=l(f,g,h,i);if(null===m||m.start===g&&m.diag===g-i||m.end===f&&m.diag===f-h)for(var n=f,o=h;n<g||o<i;)n<g&&o<i&&d[n]===e[o]?(k.push([a,d[n]]),++n,++o):g-f>i-h?(k.push([c,d[n]]),++n):(k.push([b,e[o]]),++o);else{j(f,m.start,h,m.start-m.diag,k);for(var p=m.start;p<m.end;++p)k.push([a,d[p]]);j(m.end,g,m.end-m.diag,i,k)}},k=function(a,b,c,f){for(var g=a;g-b<f&&g<c&&d[g]===e[g-b];)++g;return i(a,g,b)},l=function(a,b,c,f){
-var i=b-a,j=f-c;if(0===i||0===j)return null;var l=i-j,m=j+i,n=(m%2===0?m:m+1)/2;g[1+n]=a,h[1+n]=b+1;for(var o=0;o<=n;++o){for(var p=-o;p<=o;p+=2){var q=p+n;p===-o||p!=o&&g[q-1]<g[q+1]?g[q]=g[q+1]:g[q]=g[q-1]+1;for(var r=g[q],s=r-a+c-p;r<b&&s<f&&d[r]===e[s];)g[q]=++r,++s;if(l%2!=0&&l-o<=p&&p<=l+o&&h[q-l]<=g[q])return k(h[q-l],p+a-c,b,f)}for(p=l-o;p<=l+o;p+=2){for(q=p+n-l,p===l-o||p!=l+o&&h[q+1]<=h[q-1]?h[q]=h[q+1]-1:h[q]=h[q-1],r=h[q]-1,s=r-a+c-p;r>=a&&s>=c&&d[r]===e[s];)h[q]=r--,s--;if(l%2===0&&-o<=p&&p<=o&&h[q]<=g[q+l])return k(h[q],p+a-c,b,f)}}},m=[];return j(0,d.length,0,e.length,m),m};return{KEEP:a,DELETE:c,INSERT:b,diff:d}}),g("tinymce.core.undo.Fragments",["tinymce.core.util.Arr","tinymce.core.html.Entities","tinymce.core.undo.Diff"],function(a,b,c){var d=function(a){return 1===a.nodeType?a.outerHTML:3===a.nodeType?b.encodeRaw(a.data,!1):8===a.nodeType?"<!--"+a.data+"-->":""},e=function(a){var b,c,d;for(d=document.createElement("div"),b=document.createDocumentFragment(),a&&(d.innerHTML=a);c=d.firstChild;)b.appendChild(c);return b},f=function(a,b,c){var d=e(b);if(a.hasChildNodes()&&c<a.childNodes.length){var f=a.childNodes[c];f.parentNode.insertBefore(d,f)}else a.appendChild(d)},g=function(a,b){if(a.hasChildNodes()&&b<a.childNodes.length){var c=a.childNodes[b];c.parentNode.removeChild(c)}},h=function(b,d){var e=0;a.each(b,function(a){a[0]===c.KEEP?e++:a[0]===c.INSERT?(f(d,a[1],e),e++):a[0]===c.DELETE&&g(d,e)})},i=function(b){return a.filter(a.map(b.childNodes,d),function(a){return a.length>0})},j=function(b,e){var f=a.map(e.childNodes,d);return h(c.diff(f,b),e),e};return{read:i,write:j}}),g("tinymce.core.undo.Levels",["tinymce.core.util.Arr","tinymce.core.undo.Fragments"],function(a,b){var c=function(a){return a.indexOf("</iframe>")!==-1},d=function(a){return{type:"fragmented",fragments:a,content:"",bookmark:null,beforeBookmark:null}},e=function(a){return{type:"complete",fragments:null,content:a,bookmark:null,beforeBookmark:null}},f=function(f){var g,h,i;return g=b.read(f.getBody()),i=a.map(g,function(a){return f.serializer.trimContent(a)}),h=i.join(""),c(h)?d(i):e(h)},g=function(a,c,d){"fragmented"===c.type?b.write(c.fragments,a.getBody()):a.setContent(c.content,{format:"raw"}),a.selection.moveToBookmark(d?c.beforeBookmark:c.bookmark)},h=function(a){return"fragmented"===a.type?a.fragments.join(""):a.content},i=function(a,b){return!!a&&!!b&&h(a)===h(b)};return{createFragmentedLevel:d,createCompleteLevel:e,createFromEditor:f,applyToEditor:g,isEq:i}}),g("tinymce.core.UndoManager",["tinymce.core.util.VK","tinymce.core.util.Tools","tinymce.core.undo.Levels"],function(a,b,c){return function(a){function d(b){a.setDirty(b)}function e(a){n(!1),i.add({},a)}function f(){i.typing&&(n(!1),i.add())}var g,h,i=this,j=0,k=[],l=0,m=function(){return 0===l},n=function(a){m()&&(i.typing=a)};return a.on("init",function(){i.add()}),a.on("BeforeExecCommand",function(a){var b=a.command;"Undo"!==b&&"Redo"!==b&&"mceRepaint"!==b&&(f(),i.beforeChange())}),a.on("ExecCommand",function(a){var b=a.command;"Undo"!==b&&"Redo"!==b&&"mceRepaint"!==b&&e(a)}),a.on("ObjectResizeStart Cut",function(){i.beforeChange()}),a.on("SaveContent ObjectResized blur",e),a.on("DragEnd",e),a.on("KeyUp",function(b){var f=b.keyCode;b.isDefaultPrevented()||((f>=33&&f<=36||f>=37&&f<=40||45===f||b.ctrlKey)&&(e(),a.nodeChanged()),46!==f&&8!==f||a.nodeChanged(),h&&i.typing&&c.isEq(c.createFromEditor(a),k[0])===!1&&(a.isDirty()===!1&&(d(!0),a.fire("change",{level:k[0],lastLevel:null})),a.fire("TypingUndo"),h=!1,a.nodeChanged()))}),a.on("KeyDown",function(a){var b=a.keyCode;if(!a.isDefaultPrevented()){if(b>=33&&b<=36||b>=37&&b<=40||45===b)return void(i.typing&&e(a));var c=a.ctrlKey&&!a.altKey||a.metaKey;!(b<16||b>20)||224===b||91===b||i.typing||c||(i.beforeChange(),n(!0),i.add({},a),h=!0)}}),a.on("MouseDown",function(a){i.typing&&e(a)}),a.addShortcut("meta+z","","Undo"),a.addShortcut("meta+y,meta+shift+z","","Redo"),a.on("AddUndo Undo Redo ClearUndos",function(b){b.isDefaultPrevented()||a.nodeChanged()}),i={data:k,typing:!1,beforeChange:function(){m()&&(g=a.selection.getBookmark(2,!0))},add:function(e,f){var h,i,l,n=a.settings;if(l=c.createFromEditor(a),e=e||{},e=b.extend(e,l),m()===!1||a.removed)return null;if(i=k[j],a.fire("BeforeAddUndo",{level:e,lastLevel:i,originalEvent:f}).isDefaultPrevented())return null;if(i&&c.isEq(i,e))return null;if(k[j]&&(k[j].beforeBookmark=g),n.custom_undo_redo_levels&&k.length>n.custom_undo_redo_levels){for(h=0;h<k.length-1;h++)k[h]=k[h+1];k.length--,j=k.length}e.bookmark=a.selection.getBookmark(2,!0),j<k.length-1&&(k.length=j+1),k.push(e),j=k.length-1;var o={level:e,lastLevel:i,originalEvent:f};return a.fire("AddUndo",o),j>0&&(d(!0),a.fire("change",o)),e},undo:function(){var b;return i.typing&&(i.add(),i.typing=!1,n(!1)),j>0&&(b=k[--j],c.applyToEditor(a,b,!0),d(!0),a.fire("undo",{level:b})),b},redo:function(){var b;return j<k.length-1&&(b=k[++j],c.applyToEditor(a,b,!1),d(!0),a.fire("redo",{level:b})),b},clear:function(){k=[],j=0,i.typing=!1,i.data=k,a.fire("ClearUndos")},hasUndo:function(){return j>0||i.typing&&k[0]&&!c.isEq(c.createFromEditor(a),k[0])},hasRedo:function(){return j<k.length-1&&!i.typing},transact:function(a){return f(),i.beforeChange(),i.ignore(a),i.add()},ignore:function(a){try{l++,a()}finally{l--}},extra:function(b,d){var e,f;i.transact(b)&&(f=k[j].bookmark,e=k[j-1],c.applyToEditor(a,e,!0),i.transact(d)&&(k[j-1].beforeBookmark=f))}}}}),g("tinymce.core.dom.NodePath",["tinymce.core.dom.DOMUtils"],function(a){function b(b,c,d){for(var e=[];c&&c!=b;c=c.parentNode)e.push(a.nodeIndex(c,d));return e}function c(a,b){var c,d,e;for(d=a,c=b.length-1;c>=0;c--){if(e=d.childNodes,b[c]>e.length-1)return null;d=e[b[c]]}return d}return{create:b,resolve:c}}),g("tinymce.core.util.Quirks",["tinymce.core.util.VK","tinymce.core.dom.RangeUtils","tinymce.core.dom.TreeWalker","tinymce.core.dom.NodePath","tinymce.core.html.Node","tinymce.core.html.Entities","tinymce.core.Env","tinymce.core.util.Tools","tinymce.core.util.Delay","tinymce.core.caret.CaretContainer","tinymce.core.caret.CaretPosition","tinymce.core.caret.CaretWalker"],function(a,b,c,d,e,f,g,h,i,j,k,l){return function(c){function d(a,b){try{c.getDoc().execCommand(a,!1,b)}catch(d){}}function k(){var a=c.getDoc().documentMode;return a?a:6}function l(a){return a.isDefaultPrevented()}function m(a){var b,d;a.dataTransfer&&(c.selection.isCollapsed()&&"IMG"==a.target.tagName&&Y.select(a.target),b=c.selection.getContent(),b.length>0&&(d=da+escape(c.id)+","+escape(b),a.dataTransfer.setData(ea,d)))}function n(a){var b;return a.dataTransfer&&(b=a.dataTransfer.getData(ea),b&&b.indexOf(da)>=0)?(b=b.substr(da.length).split(","),{id:unescape(b[0]),html:unescape(b[1])}):null}function o(a,b){c.queryCommandSupported("mceInsertClipboardContent")?c.execCommand("mceInsertClipboardContent",!1,{content:a,internal:b}):c.execCommand("mceInsertContent",!1,a)}function p(){function a(a){var b=X.create("body"),c=a.cloneContents();return b.appendChild(c),Y.serializer.serialize(b,{format:"html"})}function d(d){if(!d.setStart){if(d.item)return!1;var e=d.duplicate();return e.moveToElementText(c.getBody()),b.compareRanges(d,e)}var f=a(d),g=X.createRng();g.selectNode(c.getBody());var h=a(g);return f===h}c.on("keydown",function(a){var b,e,f=a.keyCode;if(!l(a)&&(f==W||f==V)){if(b=c.selection.isCollapsed(),e=c.getBody(),b&&!X.isEmpty(e))return;if(!b&&!d(c.selection.getRng()))return;a.preventDefault(),c.setContent(""),e.firstChild&&X.isBlock(e.firstChild)?c.selection.setCursorLocation(e.firstChild,0):c.selection.setCursorLocation(e,0),c.nodeChanged()}})}function q(){c.shortcuts.add("meta+a",null,"SelectAll")}function r(){c.settings.content_editable||X.bind(c.getDoc(),"mousedown mouseup",function(a){var b;if(a.target==c.getDoc().documentElement)if(b=Y.getRng(),c.getBody().focus(),"mousedown"==a.type){if(j.isCaretContainer(b.startContainer))return;Y.placeCaretAt(a.clientX,a.clientY)}else Y.setRng(b)})}function s(){c.on("keydown",function(a){if(!l(a)&&a.keyCode===V){if(!c.getBody().getElementsByTagName("hr").length)return;if(Y.isCollapsed()&&0===Y.getRng(!0).startOffset){var b=Y.getNode(),d=b.previousSibling;if("HR"==b.nodeName)return X.remove(b),void a.preventDefault();d&&d.nodeName&&"hr"===d.nodeName.toLowerCase()&&(X.remove(d),a.preventDefault())}}})}function t(){window.Range.prototype.getClientRects||c.on("mousedown",function(a){if(!l(a)&&"HTML"===a.target.nodeName){var b=c.getBody();b.blur(),i.setEditorTimeout(c,function(){b.focus()})}})}function u(){c.on("click",function(a){var b=a.target;/^(IMG|HR)$/.test(b.nodeName)&&"false"!==X.getContentEditableParent(b)&&(a.preventDefault(),c.selection.select(b),c.nodeChanged()),"A"==b.nodeName&&X.hasClass(b,"mce-item-anchor")&&(a.preventDefault(),Y.select(b))})}function v(){function a(){var a=X.getAttribs(Y.getStart().cloneNode(!1));return function(){var b=Y.getStart();b!==c.getBody()&&(X.setAttrib(b,"style",null),U(a,function(a){b.setAttributeNode(a.cloneNode(!0))}))}}function b(){return!Y.isCollapsed()&&X.getParent(Y.getStart(),X.isBlock)!=X.getParent(Y.getEnd(),X.isBlock)}c.on("keypress",function(d){var e;if(!l(d)&&(8==d.keyCode||46==d.keyCode)&&b())return e=a(),c.getDoc().execCommand("delete",!1,null),e(),d.preventDefault(),!1}),X.bind(c.getDoc(),"cut",function(d){var e;!l(d)&&b()&&(e=a(),i.setEditorTimeout(c,function(){e()}))})}function w(){document.body.setAttribute("role","application")}function x(){c.on("keydown",function(a){if(!l(a)&&a.keyCode===V&&Y.isCollapsed()&&0===Y.getRng(!0).startOffset){var b=Y.getNode().previousSibling;if(b&&b.nodeName&&"table"===b.nodeName.toLowerCase())return a.preventDefault(),!1}})}function y(){k()>7||(d("RespectVisibilityInDesign",!0),c.contentStyles.push(".mceHideBrInPre pre br {display: none}"),X.addClass(c.getBody(),"mceHideBrInPre"),$.addNodeFilter("pre",function(a){for(var b,c,d,f,g=a.length;g--;)for(b=a[g].getAll("br"),c=b.length;c--;)d=b[c],f=d.prev,f&&3===f.type&&"\n"!=f.value.charAt(f.value-1)?f.value+="\n":d.parent.insert(new e("#text",3),d,!0).value="\n"}),_.addNodeFilter("pre",function(a){for(var b,c,d,e,f=a.length;f--;)for(b=a[f].getAll("br"),c=b.length;c--;)d=b[c],e=d.prev,e&&3==e.type&&(e.value=e.value.replace(/\r?\n$/,""))}))}function z(){X.bind(c.getBody(),"mouseup",function(){var a,b=Y.getNode();"IMG"==b.nodeName&&((a=X.getStyle(b,"width"))&&(X.setAttrib(b,"width",a.replace(/[^0-9%]+/g,"")),X.setStyle(b,"width","")),(a=X.getStyle(b,"height"))&&(X.setAttrib(b,"height",a.replace(/[^0-9%]+/g,"")),X.setStyle(b,"height","")))})}function A(){c.on("keydown",function(b){var d,e,f,g,h;if(!l(b)&&b.keyCode==a.BACKSPACE&&(d=Y.getRng(),e=d.startContainer,f=d.startOffset,g=X.getRoot(),h=e,d.collapsed&&0===f)){for(;h&&h.parentNode&&h.parentNode.firstChild==h&&h.parentNode!=g;)h=h.parentNode;"BLOCKQUOTE"===h.tagName&&(c.formatter.toggle("blockquote",null,h),d=X.createRng(),d.setStart(e,0),d.setEnd(e,0),Y.setRng(d))}})}function B(){function a(){S(),d("StyleWithCSS",!1),d("enableInlineTableEditing",!1),Z.object_resizing||d("enableObjectResizing",!1)}Z.readonly||c.on("BeforeExecCommand MouseDown",a)}function C(){function a(){U(X.select("a"),function(a){var b=a.parentNode,c=X.getRoot();if(b.lastChild===a){for(;b&&!X.isBlock(b);){if(b.parentNode.lastChild!==b||b===c)return;b=b.parentNode}X.add(b,"br",{"data-mce-bogus":1})}})}c.on("SetContent ExecCommand",function(b){"setcontent"!=b.type&&"mceInsertLink"!==b.command||a()})}function D(){Z.forced_root_block&&c.on("init",function(){d("DefaultParagraphSeparator",Z.forced_root_block)})}function E(){c.on("keydown",function(a){var b;l(a)||a.keyCode!=V||(b=c.getDoc().selection.createRange(),b&&b.item&&(a.preventDefault(),c.undoManager.beforeChange(),X.remove(b.item(0)),c.undoManager.add()))})}function F(){var a;k()>=10&&(a="",U("p div h1 h2 h3 h4 h5 h6".split(" "),function(b,c){a+=(c>0?",":"")+b+":empty"}),c.contentStyles.push(a+"{padding-right: 1px !important}"))}function G(){k()<9&&($.addNodeFilter("noscript",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.firstChild,c&&b.attr("data-mce-innertext",c.value)}),_.addNodeFilter("noscript",function(a){for(var b,c,d,g=a.length;g--;)b=a[g],c=a[g].firstChild,c?c.value=f.decode(c.value):(d=b.attributes.map["data-mce-innertext"],d&&(b.attr("data-mce-innertext",null),c=new e("#text",3),c.value=d,c.raw=!0,b.append(c)))}))}function H(){function a(a,b){var c=h.createTextRange();try{c.moveToPoint(a,b)}catch(d){c=null}return c}function b(b){var d;b.button?(d=a(b.x,b.y),d&&(d.compareEndPoints("StartToStart",e)>0?d.setEndPoint("StartToStart",e):d.setEndPoint("EndToEnd",e),d.select())):c()}function c(){var a=g.selection.createRange();e&&!a.item&&0===a.compareEndPoints("StartToEnd",a)&&e.select(),X.unbind(g,"mouseup",c),X.unbind(g,"mousemove",b),e=d=0}var d,e,f,g=X.doc,h=g.body;g.documentElement.unselectable=!0,X.bind(g,"mousedown contextmenu",function(h){if("HTML"===h.target.nodeName){if(d&&c(),f=g.documentElement,f.scrollHeight>f.clientHeight)return;d=1,e=a(h.x,h.y),e&&(X.bind(g,"mouseup",c),X.bind(g,"mousemove",b),X.getRoot().focus(),e.select())}})}function I(){c.on("keyup focusin mouseup",function(b){65==b.keyCode&&a.metaKeyPressed(b)||("keyup"!==b.type||c.selection.isCollapsed())&&Y.normalize()},!0)}function J(){c.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function K(){c.inline||c.on("keydown",function(){document.activeElement==document.body&&c.getWin().focus()})}function L(){c.inline||(c.contentStyles.push("body {min-height: 150px}"),c.on("click",function(a){var b;if("HTML"==a.target.nodeName){if(g.ie>11)return void c.getBody().focus();b=c.selection.getRng(),c.getBody().focus(),c.selection.setRng(b),c.selection.normalize(),c.nodeChanged()}}))}function M(){g.mac&&c.on("keydown",function(b){!a.metaKeyPressed(b)||b.shiftKey||37!=b.keyCode&&39!=b.keyCode||(b.preventDefault(),c.selection.getSel().modify("move",37==b.keyCode?"backward":"forward","lineboundary"))})}function N(){d("AutoUrlDetect",!1)}function O(){c.on("click",function(a){var b=a.target;do if("A"===b.tagName)return void a.preventDefault();while(b=b.parentNode)}),c.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}function P(){c.on("init",function(){c.dom.bind(c.getBody(),"submit",function(a){a.preventDefault()})})}function Q(){$.addNodeFilter("br",function(a){for(var b=a.length;b--;)"Apple-interchange-newline"==a[b].attr("class")&&a[b].remove()})}function R(){c.on("dragstart",function(a){m(a)}),c.on("drop",function(a){if(!l(a)){var d=n(a);if(d&&d.id!=c.id){a.preventDefault();var e=b.getCaretRangeFromPoint(a.x,a.y,c.getDoc());Y.setRng(e),o(d.html,!0)}}})}function S(){}function T(){var a;return!aa||c.removed?0:(a=c.selection.getSel(),!a||!a.rangeCount||0===a.rangeCount)}var U=h.each,V=a.BACKSPACE,W=a.DELETE,X=c.dom,Y=c.selection,Z=c.settings,$=c.parser,_=c.serializer,aa=g.gecko,ba=g.ie,ca=g.webkit,da="data:text/mce-internal,",ea=ba?"Text":"URL";return A(),p(),g.windowsPhone||I(),ca&&(r(),u(),D(),P(),x(),Q(),g.iOS?(K(),L(),O()):q()),ba&&g.ie<11&&(s(),w(),y(),z(),E(),F(),G(),H()),g.ie>=11&&(L(),x()),g.ie&&(q(),N(),R()),aa&&(s(),t(),v(),B(),C(),J(),M(),x()),{refreshContentEditable:S,isHidden:T}}}),g("tinymce.core.init.InitContentBody",["ephox.sugar.api.dom.Insert","ephox.sugar.api.node.Element","ephox.sugar.api.properties.Attr","global!document","global!window","tinymce.core.api.Formatter","tinymce.core.caret.CaretContainerInput","tinymce.core.dom.DOMUtils","tinymce.core.dom.Selection","tinymce.core.dom.Serializer","tinymce.core.EditorUpload","tinymce.core.ErrorReporter","tinymce.core.ForceBlocks","tinymce.core.html.DomParser","tinymce.core.html.Node","tinymce.core.html.Schema","tinymce.core.keyboard.KeyboardOverrides","tinymce.core.NodeChange","tinymce.core.SelectionOverrides","tinymce.core.UndoManager","tinymce.core.util.Delay","tinymce.core.util.Quirks","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w){var x=h.DOM,y=function(d,e){var f=b.fromDom(d.getDoc().head),g=b.fromTag("style");c.set(g,"type","text/css"),a.append(g,b.fromText(e)),a.append(f,g)},z=function(a){var b=new n(a.settings,a.schema);return b.addAttributeFilter("src,href,style,tabindex",function(b,c){for(var d,e,f,g=b.length,h=a.dom;g--;)if(d=b[g],e=d.attr(c),f="data-mce-"+c,!d.attributes.map[f]){if(0===e.indexOf("data:")||0===e.indexOf("blob:"))continue;"style"===c?(e=h.serializeStyle(h.parseStyle(e),d.name),e.length||(e=null),d.attr(f,e),d.attr(c,e)):"tabindex"===c?(d.attr(f,e),d.attr(c,null)):d.attr(f,a.convertURL(e,c,d.name))}}),b.addNodeFilter("script",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr("type")||"no/type",0!==c.indexOf("mce-")&&b.attr("type","mce-"+c)}),b.addNodeFilter("#cdata",function(a){for(var b,c=a.length;c--;)b=a[c],b.type=8,b.name="#comment",b.value="[CDATA["+b.value+"]]"}),b.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(b){for(var c,d=b.length,e=a.schema.getNonEmptyElements();d--;)c=b[d],c.isEmpty(e)&&0===c.getAll("br").length&&(c.append(new o("br",1)).shortEnded=!0)}),b},A=function(a){a.settings.auto_focus&&u.setEditorTimeout(a,function(){var b;b=a.settings.auto_focus===!0?a:a.editorManager.get(a.settings.auto_focus),b.destroyed||b.focus()},100)},B=function(a){a.bindPendingEventDelegates(),a.initialized=!0,a.fire("init"),a.focus(!0),a.nodeChanged({initial:!0}),a.execCallback("init_instance_callback",a),A(a)},C=function(a){return a.inline?x.styleSheetLoader:a.dom.styleSheetLoader},D=function(a,b){var c,l,n=a.settings,o=a.getElement(),u=a.getDoc();n.inline||(a.getElement().style.visibility=a.orgVisibility),b||n.content_editable||(u.open(),u.write(a.iframeHTML),u.close()),n.content_editable&&(a.on("remove",function(){var a=this.getBody();x.removeClass(a,"mce-content-body"),x.removeClass(a,"mce-edit-focus"),x.setAttrib(a,"contentEditable",null)}),x.addClass(o,"mce-content-body"),a.contentDocument=u=n.content_document||d,a.contentWindow=n.content_window||e,a.bodyElement=o,n.content_document=n.content_window=null,n.root_name=o.nodeName.toLowerCase()),c=a.getBody(),c.disabled=!0,a.readonly=n.readonly,a.readonly||(a.inline&&"static"===x.getStyle(c,"position",!0)&&(c.style.position="relative"),c.contentEditable=a.getParam("content_editable_state",!0)),c.disabled=!1,a.editorUpload=new k(a),a.schema=new p(n),a.dom=new h(u,{keep_values:!0,url_converter:a.convertURL,url_converter_scope:a,hex_colors:n.force_hex_style_colors,class_filter:n.class_filter,update_styles:!0,root_element:a.inline?a.getBody():null,collect:n.content_editable,schema:a.schema,onSetAttrib:function(b){a.fire("SetAttrib",b)}}),a.parser=z(a),a.serializer=new j(n,a),a.selection=new i(a.dom,a.getWin(),a.serializer,a),a.formatter=new f(a),a.undoManager=new t(a),a._nodeChangeDispatcher=new r(a),a._selectionOverrides=new s(a),g.setup(a),q.setup(a),m.setup(a),a.fire("PreInit"),n.browser_spellcheck||n.gecko_spellcheck||(u.body.spellcheck=!1,x.setAttrib(c,"spellcheck","false")),a.quirks=new v(a),a.fire("PostRender"),n.directionality&&(c.dir=n.directionality),n.nowrap&&(c.style.whiteSpace="nowrap"),n.protect&&a.on("BeforeSetContent",function(a){w.each(n.protect,function(b){a.content=a.content.replace(b,function(a){return"<!--mce:protected "+escape(a)+"-->"})})}),a.on("SetContent",function(){a.addVisual(a.getBody())}),n.padd_empty_editor&&a.on("PostProcess",function(a){a.content=a.content.replace(/^(<p[^>]*>( | |\s|\u00a0|<br \/>|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")}),a.load({initial:!0,format:"html"}),a.startContent=a.getContent({format:"raw"}),a.on("compositionstart compositionend",function(b){a.composing="compositionstart"===b.type}),a.contentStyles.length>0&&(l="",w.each(a.contentStyles,function(a){l+=a+"\r\n"}),a.dom.addStyle(l)),C(a).loadAll(a.contentCSS,function(b){B(a)},function(b){B(a)}),n.content_style&&y(a,n.content_style)};return{initContentBody:D}}),g("tinymce.core.PluginManager",["tinymce.core.AddOnManager"],function(a){return a.PluginManager}),g("tinymce.core.ThemeManager",["tinymce.core.AddOnManager"],function(a){return a.ThemeManager}),g("tinymce.core.init.Init",["global!document","global!window","tinymce.core.dom.DOMUtils","tinymce.core.Env","tinymce.core.init.InitContentBody","tinymce.core.PluginManager","tinymce.core.ThemeManager","tinymce.core.util.Tools","tinymce.core.util.Uuid"],function(a,b,c,d,e,f,g,h,i){var j=c.DOM,k=function(a,b,c){var d,e,g=f.get(c);if(d=f.urls[c]||a.documentBaseUrl.replace(/\/$/,""),c=h.trim(c),g&&h.inArray(b,c)===-1){if(h.each(f.dependencies(c),function(c){k(a,b,c)}),a.plugins[c])return;e=new g(a,d,a.$),a.plugins[c]=e,e.init&&(e.init(a,d),b.push(c))}},l=function(a){return a.replace(/^\-/,"")},m=function(a){var b=[];h.each(a.settings.plugins.split(/[ ,]/),function(c){k(a,b,l(c))})},n=function(a){var b,c=a.settings;c.theme&&("function"!=typeof c.theme?(c.theme=l(c.theme),b=g.get(c.theme),a.theme=new b(a,g.urls[c.theme]),a.theme.init&&a.theme.init(a,g.urls[c.theme]||a.documentBaseUrl.replace(/\/$/,""),a.$)):a.theme=c.theme)},o=function(a){var b,c,d,e,f,g=a.settings,h=a.getElement();return g.render_ui&&a.theme&&(a.orgDisplay=h.style.display,"function"!=typeof g.theme?(b=g.width||j.getStyle(h,"width")||"100%",c=g.height||j.getStyle(h,"height")||h.offsetHeight,d=g.min_height||100,e=/^[0-9\.]+(|px)$/i,e.test(""+b)&&(b=Math.max(parseInt(b,10),100)),e.test(""+c)&&(c=Math.max(parseInt(c,10),d)),f=a.theme.renderUI({targetNode:h,width:b,height:c,deltaWidth:g.delta_width,deltaHeight:g.delta_height}),g.content_editable||(c=(f.iframeHeight||c)+("number"==typeof c?f.deltaHeight||0:""),c<d&&(c=d))):(f=g.theme(a,h),f.editorContainer.nodeType&&(f.editorContainer.id=f.editorContainer.id||a.id+"_parent"),f.iframeContainer.nodeType&&(f.iframeContainer.id=f.iframeContainer.id||a.id+"_iframecontainer"),c=f.iframeHeight||h.offsetHeight),a.editorContainer=f.editorContainer,f.height=c),f},p=function(c,f){if(a.domain!==b.location.hostname&&d.ie&&d.ie<12){var g=i.uuid("mce");c[g]=function(){e.initContentBody(c)};var h='javascript:(function(){document.open();document.domain="'+a.domain+'";var ed = window.parent.tinymce.get("'+c.id+'");document.write(ed.iframeHTML);document.close();ed.'+g+"(true);})()";return j.setAttrib(f,"src",h),!0}return!1},q=function(a,b){var c,e,f=a.settings;a.iframeHTML=f.doctype+"<html><head>",f.document_base_url!=a.documentBaseUrl&&(a.iframeHTML+='<base href="'+a.documentBaseURI.getURI()+'" />'),!d.caretAfter&&f.ie7_compat&&(a.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'),a.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />',c=f.body_id||"tinymce",c.indexOf("=")!=-1&&(c=a.getParam("body_id","","hash"),c=c[a.id]||c),e=f.body_class||"",e.indexOf("=")!=-1&&(e=a.getParam("body_class","","hash"),e=e[a.id]||""),f.content_security_policy&&(a.iframeHTML+='<meta http-equiv="Content-Security-Policy" content="'+f.content_security_policy+'" />'),a.iframeHTML+='</head><body id="'+c+'" class="mce-content-body '+e+'" data-id="'+a.id+'"><br></body></html>';var g=j.create("iframe",{id:a.id+"_ifr",frameBorder:"0",allowTransparency:"true",title:a.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:b.height,display:"block"}});g.onload=function(){g.onload=null,a.fire("load")};var h=p(a,g);return a.contentAreaContainer=b.iframeContainer,a.iframeElement=g,j.add(b.iframeContainer,g),h},r=function(a){var b,c=a.settings,d=a.getElement();if(a.rtl=c.rtl_ui||a.editorManager.i18n.rtl,a.editorManager.i18n.setCode(c.language),c.aria_label=c.aria_label||j.getAttrib(d,"aria-label",a.getLang("aria.rich_text_area")),a.fire("ScriptsLoaded"),n(a),m(a),b=o(a),c.content_css&&h.each(h.explode(c.content_css),function(b){a.contentCSS.push(a.documentBaseURI.toAbsolute(b))}),c.content_editable)return e.initContentBody(a);var f=q(a,b);b.editorContainer&&(j.get(b.editorContainer).style.display=a.orgDisplay,a.hidden=j.isHidden(b.editorContainer)),a.getElement().style.display="none",j.setAttrib(a.id,"aria-hidden",!0),f||e.initContentBody(a)};return{init:r}}),g("tinymce.core.init.Render",["global!window","tinymce.core.api.NotificationManager","tinymce.core.api.WindowManager","tinymce.core.dom.DOMUtils","tinymce.core.dom.EventUtils","tinymce.core.dom.ScriptLoader","tinymce.core.Env","tinymce.core.ErrorReporter","tinymce.core.init.Init","tinymce.core.PluginManager","tinymce.core.ThemeManager","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=d.DOM,n=function(a,b){var c=a.settings,d=f.ScriptLoader;if(c.language&&"en"!=c.language&&!c.language_url&&(c.language_url=a.editorManager.baseURL+"/langs/"+c.language+".js"),c.language_url&&d.add(c.language_url),c.theme&&"function"!=typeof c.theme&&"-"!=c.theme.charAt(0)&&!k.urls[c.theme]){var e=c.theme_url;e=e?a.documentBaseURI.toAbsolute(e):"themes/"+c.theme+"/theme"+b+".js",k.load(c.theme,e)}l.isArray(c.plugins)&&(c.plugins=c.plugins.join(" ")),l.each(c.external_plugins,function(a,b){j.load(b,a),c.plugins+=" "+b}),l.each(c.plugins.split(/[ ,]/),function(a){if(a=l.trim(a),a&&!j.urls[a])if("-"===a.charAt(0)){a=a.substr(1,a.length);var c=j.dependencies(a);l.each(c,function(a){var c={prefix:"plugins/",resource:a,suffix:"/plugin"+b+".js"};a=j.createUrl(c,a),j.load(a.resource,a)})}else j.load(a,{prefix:"plugins/",resource:a,suffix:"/plugin"+b+".js"})}),d.loadQueue(function(){a.removed||i.init(a)},a,function(b){h.pluginLoadError(a,b[0]),a.removed||i.init(a)})},o=function(d){function f(){m.unbind(a,"ready",f),d.render()}var h=d.settings,i=d.id;if(!e.Event.domLoaded)return void m.bind(a,"ready",f);if(d.getElement()&&g.contentEditable){h.inline?d.inline=!0:(d.orgVisibility=d.getElement().style.visibility,d.getElement().style.visibility="hidden");var j=d.getElement().form||m.getParent(i,"form");j&&(d.formElement=j,h.hidden_input&&!/TEXTAREA|INPUT/i.test(d.getElement().nodeName)&&(m.insertAfter(m.create("input",{type:"hidden",name:i}),i),d.hasHiddenInput=!0),d.formEventDelegate=function(a){d.fire(a.type,a)},m.bind(j,"submit reset",d.formEventDelegate),d.on("reset",function(){d.setContent(d.startContent,{format:"raw"})}),!h.submit_patch||j.submit.nodeType||j.submit.length||j._mceOldSubmit||(j._mceOldSubmit=j.submit,j.submit=function(){return d.editorManager.triggerSave(),d.setDirty(!1),j._mceOldSubmit(j)})),d.windowManager=new c(d),d.notificationManager=new b(d),"xml"===h.encoding&&d.on("GetContent",function(a){a.save&&(a.content=m.encode(a.content))}),h.add_form_submit_trigger&&d.on("submit",function(){d.initialized&&d.save()}),h.add_unload_trigger&&(d._beforeUnload=function(){!d.initialized||d.destroyed||d.isHidden()||d.save({format:"raw",no_events:!0,set_dirty:!1})},d.editorManager.on("BeforeUnload",d._beforeUnload)),d.editorManager.add(d),n(d,d.suffix)}};return{render:o}}),g("tinymce.core.Mode",[],function(){function a(a,b,c){try{a.getDoc().execCommand(b,!1,c)}catch(d){}}function b(a){var b,c;return b=a.getBody(),c=function(b){a.dom.getParents(b.target,"a").length>0&&b.preventDefault()},a.dom.bind(b,"click",c),{unbind:function(){a.dom.unbind(b,"click",c)}}}function c(c,d){c._clickBlocker&&(c._clickBlocker.unbind(),c._clickBlocker=null),d?(c._clickBlocker=b(c),c.selection.controlSelection.hideResizeRect(),c.readonly=!0,c.getBody().contentEditable=!1):(c.readonly=!1,c.getBody().contentEditable=!0,a(c,"StyleWithCSS",!1),a(c,"enableInlineTableEditing",!1),a(c,"enableObjectResizing",!1),c.focus(),c.nodeChanged())}function d(a,b){var d=a.readonly?"readonly":"design";b!=d&&(a.initialized?c(a,"readonly"==b):a.on("init",function(){c(a,"readonly"==b)}),a.fire("SwitchMode",{mode:b}))}return{setMode:d}}),g("tinymce.core.Shortcuts",["tinymce.core.util.Tools","tinymce.core.Env"],function(a,b){var c=a.each,d=a.explode,e={f9:120,f10:121,f11:122},f=a.makeMap("alt,ctrl,shift,meta,access");return function(g){function h(a){var g,h,i={};c(d(a,"+"),function(a){a in f?i[a]=!0:/^[0-9]{2,}$/.test(a)?i.keyCode=parseInt(a,10):(i.charCode=a.charCodeAt(0),i.keyCode=e[a]||a.toUpperCase().charCodeAt(0))}),g=[i.keyCode];for(h in f)i[h]?g.push(h):i[h]=!1;return i.id=g.join(","),i.access&&(i.alt=!0,b.mac?i.ctrl=!0:i.shift=!0),i.meta&&(b.mac?i.meta=!0:(i.ctrl=!0,i.meta=!1)),i}function i(b,c,e,f){var i;return i=a.map(d(b,">"),h),i[i.length-1]=a.extend(i[i.length-1],{func:e,scope:f||g}),a.extend(i[0],{desc:g.translate(c),subpatterns:i.slice(1)})}function j(a){return a.altKey||a.ctrlKey||a.metaKey}function k(a){return"keydown"===a.type&&a.keyCode>=112&&a.keyCode<=123}function l(a,b){return!!b&&(b.ctrl==a.ctrlKey&&b.meta==a.metaKey&&(b.alt==a.altKey&&b.shift==a.shiftKey&&(!!(a.keyCode==b.keyCode||a.charCode&&a.charCode==b.charCode)&&(a.preventDefault(),!0))))}function m(a){return a.func?a.func.call(a.scope):null}var n=this,o={},p=[];g.on("keyup keypress keydown",function(a){!j(a)&&!k(a)||a.isDefaultPrevented()||(c(o,function(b){if(l(a,b))return p=b.subpatterns.slice(0),"keydown"==a.type&&m(b),!0}),l(a,p[0])&&(1===p.length&&"keydown"==a.type&&m(p[0]),p.shift()))}),n.add=function(b,e,f,h){var j;return j=f,"string"==typeof f?f=function(){g.execCommand(j,!1,null)}:a.isArray(j)&&(f=function(){g.execCommand(j[0],j[1],j[2])}),c(d(a.trim(b.toLowerCase())),function(a){var b=i(a,e,f,h);o[b.id]=b}),!0},n.remove=function(a){var b=i(a);return!!o[b.id]&&(delete o[b.id],!0)}}}),g("tinymce.core.ui.Sidebar",[],function(){var a=function(a,b,c){var d=a.sidebars?a.sidebars:[];d.push({name:b,settings:c}),a.sidebars=d};return{add:a}}),g("tinymce.core.util.URI",["global!document","tinymce.core.util.Tools"],function(a,b){function c(b,g){var h,i,j=this;if(b=e(b),g=j.settings=g||{},h=g.base_uri,/^([\w\-]+):([^\/]{2})/i.test(b)||/^\s*#/.test(b))return void(j.source=b);var k=0===b.indexOf("//");0!==b.indexOf("/")||k||(b=(h?h.protocol||"http":"http")+"://mce_host"+b),/^[\w\-]*:?\/\//.test(b)||(i=g.base_uri?g.base_uri.path:new c(a.location.href).directory,""===g.base_uri.protocol?b="//mce_host"+j.toAbsPath(i,b):(b=/([^#?]*)([#?]?.*)/.exec(b),b=(h&&h.protocol||"http")+"://mce_host"+j.toAbsPath(i,b[1])+b[2])),b=b.replace(/@@/g,"(mce_at)"),b=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(b),d(f,function(a,c){var d=b[c];d&&(d=d.replace(/\(mce_at\)/g,"@@")),j[a]=d}),h&&(j.protocol||(j.protocol=h.protocol),j.userInfo||(j.userInfo=h.userInfo),j.port||"mce_host"!==j.host||(j.port=h.port),j.host&&"mce_host"!==j.host||(j.host=h.host),j.source=""),k&&(j.protocol="")}var d=b.each,e=b.trim,f="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),g={ftp:21,http:80,https:443,mailto:25};return c.prototype={setPath:function(a){var b=this;a=/^(.*?)\/?(\w+)?$/.exec(a),b.path=a[0],b.directory=a[1],b.file=a[2],b.source="",b.getURI()},toRelative:function(a){var b,d=this;if("./"===a)return a;if(a=new c(a,{base_uri:d}),"mce_host"!=a.host&&d.host!=a.host&&a.host||d.port!=a.port||d.protocol!=a.protocol&&""!==a.protocol)return a.getURI();var e=d.getURI(),f=a.getURI();return e==f||"/"==e.charAt(e.length-1)&&e.substr(0,e.length-1)==f?e:(b=d.toRelPath(d.path,a.path),a.query&&(b+="?"+a.query),a.anchor&&(b+="#"+a.anchor),b)},toAbsolute:function(a,b){return a=new c(a,{base_uri:this}),a.getURI(b&&this.isSameOrigin(a))},isSameOrigin:function(a){if(this.host==a.host&&this.protocol==a.protocol){if(this.port==a.port)return!0;var b=g[this.protocol];if(b&&(this.port||b)==(a.port||b))return!0}return!1},toRelPath:function(a,b){var c,d,e,f=0,g="";if(a=a.substring(0,a.lastIndexOf("/")),a=a.split("/"),c=b.split("/"),a.length>=c.length)for(d=0,e=a.length;d<e;d++)if(d>=c.length||a[d]!=c[d]){f=d+1;break}if(a.length<c.length)for(d=0,e=c.length;d<e;d++)if(d>=a.length||a[d]!=c[d]){f=d+1;break}if(1===f)return b;for(d=0,e=a.length-(f-1);d<e;d++)g+="../";for(d=f-1,e=c.length;d<e;d++)g+=d!=f-1?"/"+c[d]:c[d];return g},toAbsPath:function(a,b){var c,e,f,g=0,h=[];for(e=/\/$/.test(b)?"/":"",a=a.split("/"),b=b.split("/"),d(a,function(a){a&&h.push(a);
-}),a=h,c=b.length-1,h=[];c>=0;c--)0!==b[c].length&&"."!==b[c]&&(".."!==b[c]?g>0?g--:h.push(b[c]):g++);return c=a.length-g,f=c<=0?h.reverse().join("/"):a.slice(0,c).join("/")+"/"+h.reverse().join("/"),0!==f.indexOf("/")&&(f="/"+f),e&&f.lastIndexOf("/")!==f.length-1&&(f+=e),f},getURI:function(a){var b,c=this;return c.source&&!a||(b="",a||(b+=c.protocol?c.protocol+"://":"//",c.userInfo&&(b+=c.userInfo+"@"),c.host&&(b+=c.host),c.port&&(b+=":"+c.port)),c.path&&(b+=c.path),c.query&&(b+="?"+c.query),c.anchor&&(b+="#"+c.anchor),c.source=b),c.source}},c.parseDataUri=function(a){var b,c;return a=decodeURIComponent(a).split(","),c=/data:([^;]+)/.exec(a[0]),c&&(b=c[1]),{type:b,data:a[1]}},c.getDocumentBaseUrl=function(a){var b;return b=0!==a.protocol.indexOf("http")&&"file:"!==a.protocol?a.href:a.protocol+"//"+a.host+a.pathname,/^[^:]+:\/\/\/?[^\/]+\//.test(b)&&(b=b.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(b)||(b+="/")),b},c}),g("tinymce.core.Editor",["tinymce.core.AddOnManager","tinymce.core.dom.DomQuery","tinymce.core.dom.DOMUtils","tinymce.core.EditorCommands","tinymce.core.EditorFocus","tinymce.core.EditorObservable","tinymce.core.EditorSettings","tinymce.core.Env","tinymce.core.html.Serializer","tinymce.core.init.Render","tinymce.core.Mode","tinymce.core.Shortcuts","tinymce.core.ui.Sidebar","tinymce.core.util.Tools","tinymce.core.util.URI","tinymce.core.util.Uuid"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){function q(c,e,f){var i,j,k=this;i=k.documentBaseUrl=f.documentBaseURL,j=f.baseURI,e=g.getEditorSettings(k,c,i,f.defaultSettings,e),k.settings=e,a.language=e.language||"en",a.languageLoad=e.language_load,a.baseURL=f.baseURL,k.id=c,k.setDirty(!1),k.plugins={},k.documentBaseURI=new o(e.document_base_url,{base_uri:j}),k.baseURI=j,k.contentCSS=[],k.contentStyles=[],k.shortcuts=new l(k),k.loadedCSS={},k.editorCommands=new d(k),k.suffix=f.suffix,k.editorManager=f,k.inline=e.inline,e.cache_suffix&&(h.cacheSuffix=e.cache_suffix.replace(/^[\?\&]+/,"")),e.override_viewport===!1&&(h.overrideViewPort=!1),f.fire("SetupEditor",k),k.execCallback("setup",k),k.$=b.overrideDefaults(function(){return{context:k.inline?k.getBody():k.getDoc(),element:k.getBody()}})}var r=c.DOM,s=n.extend,t=n.each,u=n.trim,v=n.resolve,w=h.ie;return q.prototype={render:function(){j.render(this)},focus:function(a){e.focus(this,a)},execCallback:function(a){var b,c=this,d=c.settings[a];if(d)return c.callbackLookup&&(b=c.callbackLookup[a])&&(d=b.func,b=b.scope),"string"==typeof d&&(b=d.replace(/\.\w+$/,""),b=b?v(b):0,d=v(d),c.callbackLookup=c.callbackLookup||{},c.callbackLookup[a]={func:d,scope:b}),d.apply(b||c,Array.prototype.slice.call(arguments,1))},translate:function(a){if(a&&n.is(a,"string")){var b=this.settings.language||"en",c=this.editorManager.i18n;a=c.data[b+"."+a]||a.replace(/\{\#([^\}]+)\}/g,function(a,d){return c.data[b+"."+d]||"{#"+d+"}"})}return this.editorManager.translate(a)},getLang:function(a,b){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+a]||(void 0!==b?b:"{#"+a+"}")},getParam:function(a,b,c){var d,e=a in this.settings?this.settings[a]:b;return"hash"===c?(d={},"string"==typeof e?t(e.indexOf("=")>0?e.split(/[;,](?![^=;,]*(?:[;,]|$))/):e.split(","),function(a){a=a.split("="),a.length>1?d[u(a[0])]=u(a[1]):d[u(a[0])]=u(a)}):d=e,d):e},nodeChanged:function(a){this._nodeChangeDispatcher.nodeChanged(a)},addButton:function(a,b){var c=this;b.cmd&&(b.onclick=function(){c.execCommand(b.cmd)}),b.text||b.icon||(b.icon=a),c.buttons=c.buttons||{},b.tooltip=b.tooltip||b.title,c.buttons[a]=b},addSidebar:function(a,b){return m.add(this,a,b)},addMenuItem:function(a,b){var c=this;b.cmd&&(b.onclick=function(){c.execCommand(b.cmd)}),c.menuItems=c.menuItems||{},c.menuItems[a]=b},addContextToolbar:function(a,b){var c,d=this;d.contextToolbars=d.contextToolbars||[],"string"==typeof a&&(c=a,a=function(a){return d.dom.is(a,c)}),d.contextToolbars.push({id:p.uuid("mcet"),predicate:a,items:b})},addCommand:function(a,b,c){this.editorCommands.addCommand(a,b,c)},addQueryStateHandler:function(a,b,c){this.editorCommands.addQueryStateHandler(a,b,c)},addQueryValueHandler:function(a,b,c){this.editorCommands.addQueryValueHandler(a,b,c)},addShortcut:function(a,b,c,d){this.shortcuts.add(a,b,c,d)},execCommand:function(a,b,c,d){return this.editorCommands.execCommand(a,b,c,d)},queryCommandState:function(a){return this.editorCommands.queryCommandState(a)},queryCommandValue:function(a){return this.editorCommands.queryCommandValue(a)},queryCommandSupported:function(a){return this.editorCommands.queryCommandSupported(a)},show:function(){var a=this;a.hidden&&(a.hidden=!1,a.inline?a.getBody().contentEditable=!0:(r.show(a.getContainer()),r.hide(a.id)),a.load(),a.fire("show"))},hide:function(){var a=this,b=a.getDoc();a.hidden||(w&&b&&!a.inline&&b.execCommand("SelectAll"),a.save(),a.inline?(a.getBody().contentEditable=!1,a==a.editorManager.focusedEditor&&(a.editorManager.focusedEditor=null)):(r.hide(a.getContainer()),r.setStyle(a.id,"display",a.orgDisplay)),a.hidden=!0,a.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(a,b){this.fire("ProgressState",{state:a,time:b})},load:function(a){var b,c=this,d=c.getElement();return c.removed?"":d?(a=a||{},a.load=!0,b=c.setContent(void 0!==d.value?d.value:d.innerHTML,a),a.element=d,a.no_events||c.fire("LoadContent",a),a.element=d=null,b):void 0},save:function(a){var b,c,d=this,e=d.getElement();if(e&&d.initialized&&!d.removed)return a=a||{},a.save=!0,a.element=e,b=a.content=d.getContent(a),a.no_events||d.fire("SaveContent",a),"raw"==a.format&&d.fire("RawSaveContent",a),b=a.content,/TEXTAREA|INPUT/i.test(e.nodeName)?e.value=b:(d.inline||(e.innerHTML=b),(c=r.getParent(d.id,"form"))&&t(c.elements,function(a){if(a.name==d.id)return a.value=b,!1})),a.element=e=null,a.set_dirty!==!1&&d.setDirty(!1),b},setContent:function(a,b){var c,d,e=this,f=e.getBody();return b=b||{},b.format=b.format||"html",b.set=!0,b.content=a,b.no_events||e.fire("BeforeSetContent",b),a=b.content,0===a.length||/^\s+$/.test(a)?(d=w&&w<11?"":'<br data-mce-bogus="1">',"TABLE"==f.nodeName?a="<tr><td>"+d+"</td></tr>":/^(UL|OL)$/.test(f.nodeName)&&(a="<li>"+d+"</li>"),c=e.settings.forced_root_block,c&&e.schema.isValidChild(f.nodeName.toLowerCase(),c.toLowerCase())?(a=d,a=e.dom.createHTML(c,e.settings.forced_root_block_attrs,a)):w||a||(a='<br data-mce-bogus="1">'),e.dom.setHTML(f,a),e.fire("SetContent",b)):("raw"!==b.format&&(a=new i({validate:e.validate},e.schema).serialize(e.parser.parse(a,{isRootContent:!0}))),b.content=u(a),e.dom.setHTML(f,b.content),b.no_events||e.fire("SetContent",b)),b.content},getContent:function(a){var b,c=this,d=c.getBody();return c.removed?"":(a=a||{},a.format=a.format||"html",a.get=!0,a.getInner=!0,a.no_events||c.fire("BeforeGetContent",a),b="raw"==a.format?n.trim(c.serializer.getTrimmedContent()):"text"==a.format?d.innerText||d.textContent:c.serializer.serialize(d,a),"text"!=a.format?a.content=u(b):a.content=b,a.no_events||c.fire("GetContent",a),a.content)},insertContent:function(a,b){b&&(a=s({content:a},b)),this.execCommand("mceInsertContent",!1,a)},isDirty:function(){return!this.isNotDirty},setDirty:function(a){var b=!this.isNotDirty;this.isNotDirty=!a,a&&a!=b&&this.fire("dirty")},setMode:function(a){k.setMode(this,a)},getContainer:function(){var a=this;return a.container||(a.container=r.get(a.editorContainer||a.id+"_parent")),a.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return this.targetElm||(this.targetElm=r.get(this.id)),this.targetElm},getWin:function(){var a,b=this;return b.contentWindow||(a=b.iframeElement,a&&(b.contentWindow=a.contentWindow)),b.contentWindow},getDoc:function(){var a,b=this;return b.contentDocument||(a=b.getWin(),a&&(b.contentDocument=a.document)),b.contentDocument},getBody:function(){var a=this.getDoc();return this.bodyElement||(a?a.body:null)},convertURL:function(a,b,c){var d=this,e=d.settings;return e.urlconverter_callback?d.execCallback("urlconverter_callback",a,c,!0,b):!e.convert_urls||c&&"LINK"==c.nodeName||0===a.indexOf("file:")||0===a.length?a:e.relative_urls?d.documentBaseURI.toRelative(a):a=d.documentBaseURI.toAbsolute(a,e.remove_script_host)},addVisual:function(a){var b,c=this,d=c.settings,e=c.dom;a=a||c.getBody(),void 0===c.hasVisual&&(c.hasVisual=d.visual),t(e.select("table,a",a),function(a){var f;switch(a.nodeName){case"TABLE":return b=d.visual_table_class||"mce-item-table",f=e.getAttrib(a,"border"),void(f&&"0"!=f||!c.hasVisual?e.removeClass(a,b):e.addClass(a,b));case"A":return void(e.getAttrib(a,"href",!1)||(f=e.getAttrib(a,"name")||a.id,b=d.visual_anchor_class||"mce-item-anchor",f&&c.hasVisual?e.addClass(a,b):e.removeClass(a,b)))}}),c.fire("VisualAid",{element:a,hasVisual:c.hasVisual})},remove:function(){var a=this;a.removed||(a.save(),a.removed=1,a.unbindAllNativeEvents(),a.hasHiddenInput&&r.remove(a.getElement().nextSibling),a.inline||(w&&w<10&&a.getDoc().execCommand("SelectAll",!1,null),r.setStyle(a.id,"display",a.orgDisplay),a.getBody().onload=null),a.fire("remove"),a.editorManager.remove(a),r.remove(a.getContainer()),a._selectionOverrides.destroy(),a.editorUpload.destroy(),a.destroy())},destroy:function(a){var b,c=this;if(!c.destroyed){if(!a&&!c.removed)return void c.remove();a||(c.editorManager.off("beforeunload",c._beforeUnload),c.theme&&c.theme.destroy&&c.theme.destroy(),c.selection.destroy(),c.dom.destroy()),b=c.formElement,b&&(b._mceOldSubmit&&(b.submit=b._mceOldSubmit,b._mceOldSubmit=null),r.unbind(b,"submit reset",c.formEventDelegate)),c.contentAreaContainer=c.formElement=c.container=c.editorContainer=null,c.bodyElement=c.contentDocument=c.contentWindow=null,c.iframeElement=c.targetElm=null,c.selection&&(c.selection=c.selection.win=c.selection.dom=c.selection.dom.doc=null),c.destroyed=1}},uploadImages:function(a){return this.editorUpload.uploadImages(a)},_scanForImages:function(){return this.editorUpload.scanForImages()}},s(q.prototype,f),q}),g("tinymce.core.FocusManager",["tinymce.core.dom.DOMUtils","tinymce.core.util.Delay","tinymce.core.Env"],function(a,b,c){function d(a){function d(){try{return document.activeElement}catch(a){return document.body}}function j(a,b){if(b&&b.startContainer){if(!a.isChildOf(b.startContainer,a.getRoot())||!a.isChildOf(b.endContainer,a.getRoot()))return;return{startContainer:b.startContainer,startOffset:b.startOffset,endContainer:b.endContainer,endOffset:b.endOffset}}return b}function l(a,b){var c;return b.startContainer?(c=a.getDoc().createRange(),c.setStart(b.startContainer,b.startOffset),c.setEnd(b.endContainer,b.endOffset)):c=b,c}function m(e){var m=e.editor;m.on("init",function(){(m.inline||c.ie)&&("onbeforedeactivate"in document&&c.ie<9?m.dom.bind(m.getBody(),"beforedeactivate",function(a){if(a.target==m.getBody())try{m.lastRng=m.selection.getRng()}catch(b){}}):m.on("nodechange mouseup keyup",function(a){var b=d();"nodechange"==a.type&&a.selectionChange||(b&&b.id==m.id+"_ifr"&&(b=m.getBody()),m.dom.isChildOf(b,m.getBody())&&(m.lastRng=m.selection.getRng()))}))}),m.on("setcontent",function(){m.lastRng=null}),m.on("mousedown",function(){m.selection.lastFocusBookmark=null}),m.on("focusin",function(){var b,c=a.focusedEditor;m.selection.lastFocusBookmark&&(b=l(m,m.selection.lastFocusBookmark),m.selection.lastFocusBookmark=null,m.selection.setRng(b)),c!=m&&(c&&c.fire("blur",{focusedEditor:m}),a.setActive(m),a.focusedEditor=m,m.fire("focus",{blurredEditor:c}),m.focus(!0)),m.lastRng=null}),m.on("focusout",function(){b.setEditorTimeout(m,function(){var b=a.focusedEditor;i(m,d())||b!=m||(m.fire("blur",{focusedEditor:null}),a.focusedEditor=null,m.selection&&(m.selection.lastFocusBookmark=null))})}),f||(f=function(b){var c,d=a.activeEditor;c=b.target,d&&c.ownerDocument===document&&(d.selection&&c!==d.getBody()&&k(m,c)&&(d.selection.lastFocusBookmark=j(d.dom,d.lastRng)),c===document.body||i(d,c)||a.focusedEditor!==d||(d.fire("blur",{focusedEditor:null}),a.focusedEditor=null))},h.bind(document,"focusin",f)),m.inline&&!g&&(g=function(b){var c=a.activeEditor,d=c.dom;if(c.inline&&d&&!d.isChildOf(b.target,c.getBody())){var e=c.selection.getRng();e.collapsed||(c.lastRng=e)}},h.bind(document,"mouseup",g))}function n(b){a.focusedEditor==b.editor&&(a.focusedEditor=null),a.activeEditor||(h.unbind(document,"selectionchange",e),h.unbind(document,"focusin",f),h.unbind(document,"mouseup",g),e=f=g=null)}a.on("AddEditor",m),a.on("RemoveEditor",n)}var e,f,g,h=a.DOM,i=function(a,b){var c=a?a.settings.custom_ui_selector:"",e=h.getParent(b,function(b){return d.isEditorUIElement(b)||!!c&&a.dom.is(b,c)});return null!==e},j=function(a){return a.inline===!0},k=function(a,b){return j(a)===!1||a.dom.isChildOf(b,a.getBody())===!1};return d.isEditorUIElement=function(a){return a.className.toString().indexOf("mce-")!==-1},d._isUIElement=i,d}),g("tinymce.core.LegacyInput",["tinymce.core.util.Tools"],function(a){var b=a.each,c=a.explode,d=function(a){a.on("AddEditor",function(a){var d=a.editor;d.on("preInit",function(){function a(a,c){b(c,function(b,c){b&&h.setStyle(a,c,b)}),h.rename(a,"span")}function e(a){h=d.dom,i.convert_fonts_to_spans&&b(h.select("font,u,strike",a.node),function(a){f[a.nodeName.toLowerCase()](h,a)})}var f,g,h,i=d.settings;i.inline_styles&&(g=c(i.font_size_legacy_values),f={font:function(b,c){a(c,{backgroundColor:c.style.backgroundColor,color:c.color,fontFamily:c.face,fontSize:g[parseInt(c.size,10)-1]})},u:function(b,c){"html4"===d.settings.schema&&a(c,{textDecoration:"underline"})},strike:function(b,c){a(c,{textDecoration:"line-through"})}},d.on("PreProcess SetContent",e))})})};return{register:d}}),g("tinymce.core.util.I18n",["tinymce.core.util.Tools"],function(a){"use strict";var b={},c="en";return{setCode:function(a){a&&(c=a,this.rtl=!!this.data[a]&&"rtl"===this.data[a]._dir)},getCode:function(){return c},rtl:!1,add:function(a,c){var d=b[a];d||(b[a]=d={});for(var e in c)d[e]=c[e];this.setCode(a)},translate:function(d){function e(b){return a.is(b,"function")?Object.prototype.toString.call(b):f(b)?"":""+b}function f(b){return""===b||null===b||a.is(b,"undefined")}function g(b){return b=e(b),a.hasOwn(h,b)?e(h[b]):b}var h=b[c]||{};if(f(d))return"";if(a.is(d,"object")&&a.hasOwn(d,"raw"))return e(d.raw);if(a.is(d,"array")){var i=d.slice(1);d=g(d[0]).replace(/\{([0-9]+)\}/g,function(b,c){return a.hasOwn(i,c)?e(i[c]):b})}return g(d).replace(/{context:\w+}$/,"")},data:b}}),g("tinymce.core.EditorManager",["ephox.katamari.api.Arr","ephox.katamari.api.Type","tinymce.core.AddOnManager","tinymce.core.dom.DomQuery","tinymce.core.dom.DOMUtils","tinymce.core.Editor","tinymce.core.Env","tinymce.core.ErrorReporter","tinymce.core.FocusManager","tinymce.core.LegacyInput","tinymce.core.util.I18n","tinymce.core.util.Observable","tinymce.core.util.Promise","tinymce.core.util.Tools","tinymce.core.util.URI"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(a){x(u.get(),function(b){"scroll"===a.type?b.fire("ScrollWindow",a):b.fire("ResizeWindow",a)})}function q(a){a!==A&&(a?d(window).on("resize scroll",p):d(window).off("resize scroll",p),A=a)}function r(b){var c=C;delete B[b.id];for(var d=0;d<B.length;d++)if(B[d]===b){B.splice(d,1);break}return C=a.filter(C,function(a){return b!==a}),u.activeEditor===b&&(u.activeEditor=C.length>0?C[0]:null),u.focusedEditor===b&&(u.focusedEditor=null),c.length!==C.length}function s(a){return a&&a.initialized&&!(a.getContainer()||a.getBody()).parentNode&&(r(a),a.unbindAllNativeEvents(),a.destroy(!0),a.removed=!0,a=null),a}var t,u,v=e.DOM,w=n.explode,x=n.each,y=n.extend,z=0,A=!1,B=[],C=[],D=function(a){return"length"!==a};return u={$:d,majorVersion:"4",minorVersion:"6.7",releaseDate:"2017-09-18",editors:B,i18n:k,activeEditor:null,settings:{},setup:function(){var a,b,c,d,e=this,f="";if(b=o.getDocumentBaseUrl(document.location),/^[^:]+:\/\/\/?[^\/]+\//.test(b)&&(b=b.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(b)||(b+="/")),c=window.tinymce||window.tinyMCEPreInit)a=c.base||c.baseURL,f=c.suffix;else{for(var g=document.getElementsByTagName("script"),h=0;h<g.length;h++){d=g[h].src;var j=d.substring(d.lastIndexOf("/"));if(/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(d)){j.indexOf(".min")!=-1&&(f=".min"),a=d.substring(0,d.lastIndexOf("/"));break}}!a&&document.currentScript&&(d=document.currentScript.src,d.indexOf(".min")!=-1&&(f=".min"),a=d.substring(0,d.lastIndexOf("/")))}e.baseURL=new o(b).toAbsolute(a),e.documentBaseURL=b,e.baseURI=new o(e.baseURL),e.suffix=f,e.focusManager=new i(e)},overrideDefaults:function(a){var b,d;b=a.base_url,b&&(this.baseURL=new o(this.documentBaseURL).toAbsolute(b.replace(/\/+$/,"")),this.baseURI=new o(this.baseURL)),d=a.suffix,a.suffix&&(this.suffix=d),this.defaultSettings=a;var e=a.plugin_base_urls;for(var f in e)c.PluginManager.urls[f]=e[f]},init:function(a){function b(a,b){return a.inline&&b.tagName.toLowerCase()in o}function c(a){var b=a.id;return b||(b=a.name,b=b&&!v.get(b)?a.name:v.uniqueId(),a.setAttribute("id",b)),b}function e(b){var c=a[b];if(c)return c.apply(p,Array.prototype.slice.call(arguments,2))}function i(a,b){return b.constructor===RegExp?b.test(a.className):v.hasClass(a,b)}function j(a){var b,c=[];if(g.ie&&g.ie<11)return h.initError("TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/"),[];if(a.types)return x(a.types,function(a){c=c.concat(v.select(a.selector))}),c;if(a.selector)return v.select(a.selector);if(a.target)return[a.target];switch(a.mode){case"exact":b=a.elements||"",b.length>0&&x(w(b),function(a){var b;(b=v.get(a))?c.push(b):x(document.forms,function(b){x(b.elements,function(b){b.name===a&&(a="mce_editor_"+z++,v.setAttrib(b,"id",a),c.push(b))})})});break;case"textareas":case"specific_textareas":x(v.select("textarea"),function(b){a.editor_deselector&&i(b,a.editor_deselector)||a.editor_selector&&!i(b,a.editor_selector)||c.push(b)})}return c}function k(){function g(a,b,c){var d=new f(a,b,p);m.push(d),d.on("init",function(){++l===i.length&&q(m)}),d.targetElm=d.targetElm||c,d.render()}var i,l=0,m=[];return v.unbind(window,"ready",k),e("onpageload"),i=d.unique(j(a)),a.types?void x(a.types,function(b){n.each(i,function(d){return!v.is(d,b.selector)||(g(c(d),y({},a,b),d),!1)})}):(n.each(i,function(a){s(p.get(a.id))}),i=n.grep(i,function(a){return!p.get(a.id)}),void(0===i.length?q([]):x(i,function(d){b(a,d)?h.initError("Could not initialize inline editor on invalid inline target element",d):g(c(d),a,d)})))}var l,o,p=this;o=n.makeMap("area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu"," ");var q=function(a){l=a};return p.settings=a,v.bind(window,"ready",k),new m(function(a){l?a(l):q=function(b){a(b)}})},get:function(c){return 0===arguments.length?C.slice(0):b.isString(c)?a.find(C,function(a){return a.id===c}).getOr(null):b.isNumber(c)&&C[c]?C[c]:null},add:function(a){var b,c=this;return b=B[a.id],b===a?a:(null===c.get(a.id)&&(D(a.id)&&(B[a.id]=a),B.push(a),C.push(a)),q(!0),c.activeEditor=a,c.fire("AddEditor",{editor:a}),t||(t=function(){c.fire("BeforeUnload")},v.bind(window,"beforeunload",t)),a)},createEditor:function(a,b){return this.add(new f(a,b,this))},remove:function(a){var c,d,e=this;{if(a)return b.isString(a)?(a=a.selector||a,void x(v.select(a),function(a){d=e.get(a.id),d&&e.remove(d)})):(d=a,b.isNull(e.get(d.id))?null:(r(d)&&e.fire("RemoveEditor",{editor:d}),0===C.length&&v.unbind(window,"beforeunload",t),d.remove(),q(C.length>0),d));for(c=C.length-1;c>=0;c--)e.remove(C[c])}},execCommand:function(a,b,c){var d=this,e=d.get(c);switch(a){case"mceAddEditor":return d.get(c)||new f(c,d.settings,d).render(),!0;case"mceRemoveEditor":return e&&e.remove(),!0;case"mceToggleEditor":return e?(e.isHidden()?e.show():e.hide(),!0):(d.execCommand("mceAddEditor",0,c),!0)}return!!d.activeEditor&&d.activeEditor.execCommand(a,b,c)},triggerSave:function(){x(C,function(a){a.save()})},addI18n:function(a,b){k.add(a,b)},translate:function(a){return k.translate(a)},setActive:function(a){var b=this.activeEditor;this.activeEditor!=a&&(b&&b.fire("deactivate",{relatedTarget:a}),a.fire("activate",{relatedTarget:b})),this.activeEditor=a}},y(u,l),u.setup(),j.register(u),u}),g("tinymce.core.geom.Rect",[],function(){"use strict";function a(a,b,c){var d,e,g,h,i,k;return d=b.x,e=b.y,g=a.w,h=a.h,i=b.w,k=b.h,c=(c||"").split(""),"b"===c[0]&&(e+=k),"r"===c[1]&&(d+=i),"c"===c[0]&&(e+=j(k/2)),"c"===c[1]&&(d+=j(i/2)),"b"===c[3]&&(e-=h),"r"===c[4]&&(d-=g),"c"===c[3]&&(e-=j(h/2)),"c"===c[4]&&(d-=j(g/2)),f(d,e,g,h)}function b(b,c,d,e){var f,g;for(g=0;g<e.length;g++)if(f=a(b,c,e[g]),f.x>=d.x&&f.x+f.w<=d.w+d.x&&f.y>=d.y&&f.y+f.h<=d.h+d.y)return e[g];return null}function c(a,b,c){return f(a.x-b,a.y-c,a.w+2*b,a.h+2*c)}function d(a,b){var c,d,e,g;return c=i(a.x,b.x),d=i(a.y,b.y),e=h(a.x+a.w,b.x+b.w),g=h(a.y+a.h,b.y+b.h),e-c<0||g-d<0?null:f(c,d,e-c,g-d)}function e(a,b,c){var d,e,g,h,j,k,l,m,n,o;return j=a.x,k=a.y,l=a.x+a.w,m=a.y+a.h,n=b.x+b.w,o=b.y+b.h,d=i(0,b.x-j),e=i(0,b.y-k),g=i(0,l-n),h=i(0,m-o),j+=d,k+=e,c&&(l+=d,m+=e,j-=g,k-=h),l-=g,m-=h,f(j,k,l-j,m-k)}function f(a,b,c,d){return{x:a,y:b,w:c,h:d}}function g(a){return f(a.left,a.top,a.width,a.height)}var h=Math.min,i=Math.max,j=Math.round;return{inflate:c,relativePosition:a,findBestRelativePosition:b,intersect:d,clamp:e,create:f,fromClientRect:g}}),g("tinymce.core.ui.Layout",["tinymce.core.util.Class","tinymce.core.util.Tools"],function(a,b){"use strict";return a.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(a){this.settings=b.extend({},this.Defaults,a)},preRender:function(a){a.bodyClasses.add(this.settings.containerClass)},applyClasses:function(a){var b,c,d,e,f=this,g=f.settings;b=g.firstControlClass,c=g.lastControlClass,a.each(function(a){a.classes.remove(b).remove(c).add(g.controlClass),a.visible()&&(d||(d=a),e=a)}),d&&d.classes.add(b),e&&e.classes.add(c)},renderHtml:function(a){var b=this,c="";return b.applyClasses(a.items()),a.items().each(function(a){c+=a.renderHtml()}),c},recalc:function(){},postRender:function(){},isNative:function(){return!1}})}),g("tinymce.core.ui.AbsoluteLayout",["tinymce.core.ui.Layout"],function(a){"use strict";return a.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(a){a.items().filter(":visible").each(function(a){var b=a.settings;a.layoutRect({x:b.x,y:b.y,w:b.w,h:b.h}),a.recalc&&a.recalc()})},renderHtml:function(a){return'<div id="'+a._id+'-absend" class="'+a.classPrefix+'abs-end"></div>'+this._super(a)}})}),g("tinymce.core.ui.Button",["tinymce.core.ui.Widget"],function(a){"use strict";return a.extend({Defaults:{classes:"widget btn",role:"button"},init:function(a){var b,c=this;c._super(a),a=c.settings,b=c.settings.size,c.on("click mousedown",function(a){a.preventDefault()}),c.on("touchstart",function(a){c.fire("click",a),a.preventDefault()}),a.subtype&&c.classes.add(a.subtype),b&&c.classes.add("btn-"+b),a.icon&&c.icon(a.icon)},icon:function(a){return arguments.length?(this.state.set("icon",a),this):this.state.get("icon")},repaint:function(){var a,b=this.getEl().firstChild;b&&(a=b.style,a.width=a.height="100%"),this._super()},renderHtml:function(){var a,b=this,c=b._id,d=b.classPrefix,e=b.state.get("icon"),f=b.state.get("text"),g="";return a=b.settings.image,a?(e="none","string"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=" style=\"background-image: url('"+a+"')\""):a="",f&&(b.classes.add("btn-has-text"),g='<span class="'+d+'txt">'+b.encode(f)+"</span>"),e=e?d+"ico "+d+"i-"+e:"",'<div id="'+c+'" class="'+b.classes+'" tabindex="-1"><button id="'+c+'-button" role="presentation" type="button" tabindex="-1">'+(e?'<i class="'+e+'"'+a+"></i>":"")+g+"</button></div>"},bindStates:function(){function a(a){var e=c("span."+d,b.getEl());a?(e[0]||(c("button:first",b.getEl()).append('<span class="'+d+'"></span>'),e=c("span."+d,b.getEl())),e.html(b.encode(a))):e.remove(),b.classes.toggle("btn-has-text",!!a)}var b=this,c=b.$,d=b.classPrefix+"txt";return b.state.on("change:text",function(b){a(b.value)}),b.state.on("change:icon",function(c){var d=c.value,e=b.classPrefix;b.settings.icon=d,d=d?e+"ico "+e+"i-"+b.settings.icon:"";var f=b.getEl().firstChild,g=f.getElementsByTagName("i")[0];d?(g&&g==f.firstChild||(g=document.createElement("i"),f.insertBefore(g,f.firstChild)),g.className=d):g&&f.removeChild(g),a(b.state.get("text"))}),b._super()}})}),g("tinymce.core.ui.ButtonGroup",["tinymce.core.ui.Container"],function(a){"use strict";return a.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var a=this,b=a._layout;return a.classes.add("btn-group"),a.preRender(),b.preRender(a),'<div id="'+a._id+'" class="'+a.classes+'"><div id="'+a._id+'-body">'+(a.settings.html||"")+b.renderHtml(a)+"</div></div>"}})}),g("tinymce.core.ui.Checkbox",["tinymce.core.ui.Widget"],function(a){"use strict";return a.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(a){var b=this;b._super(a),b.on("click mousedown",function(a){a.preventDefault()}),b.on("click",function(a){a.preventDefault(),b.disabled()||b.checked(!b.checked())}),b.checked(b.settings.checked)},checked:function(a){return arguments.length?(this.state.set("checked",a),this):this.state.get("checked")},value:function(a){return arguments.length?this.checked(a):this.checked()},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix;return'<div id="'+b+'" class="'+a.classes+'" unselectable="on" aria-labelledby="'+b+'-al" tabindex="-1"><i class="'+c+"ico "+c+'i-checkbox"></i><span id="'+b+'-al" class="'+c+'label">'+a.encode(a.state.get("text"))+"</span></div>"},bindStates:function(){function a(a){b.classes.toggle("checked",a),b.aria("checked",a)}var b=this;return b.state.on("change:text",function(a){b.getEl("al").firstChild.data=b.translate(a.value)}),b.state.on("change:checked change:value",function(c){b.fire("change"),a(c.value)}),b.state.on("change:icon",function(a){var c=a.value,d=b.classPrefix;if("undefined"==typeof c)return b.settings.icon;b.settings.icon=c,c=c?d+"ico "+d+"i-"+b.settings.icon:"";var e=b.getEl().firstChild,f=e.getElementsByTagName("i")[0];c?(f&&f==e.firstChild||(f=document.createElement("i"),e.insertBefore(f,e.firstChild)),f.className=c):f&&e.removeChild(f)}),b.state.get("checked")&&a(!0),b._super()}})}),g("tinymce.core.ui.ComboBox",["tinymce.core.ui.Widget","tinymce.core.ui.Factory","tinymce.core.ui.DomUtils","tinymce.core.dom.DomQuery","tinymce.core.util.VK","tinymce.core.util.Tools"],function(a,b,c,d,e,f){"use strict";return a.extend({init:function(a){var b=this;b._super(a),a=b.settings,b.classes.add("combobox"),b.subinput=!0,b.ariaTarget="inp",a.menu=a.menu||a.values,a.menu&&(a.icon="caret"),b.on("click",function(c){var e=c.target,f=b.getEl();if(d.contains(f,e)||e==f)for(;e&&e!=f;)e.id&&e.id.indexOf("-open")!=-1&&(b.fire("action"),a.menu&&(b.showMenu(),c.aria&&b.menu.items()[0].focus())),e=e.parentNode}),b.on("keydown",function(a){var c;13==a.keyCode&&"INPUT"===a.target.nodeName&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire("submit",{data:c.toJSON()}))}),b.on("keyup",function(a){if("INPUT"==a.target.nodeName){var c=b.state.get("value"),d=a.target.value;d!==c&&(b.state.set("value",d),b.fire("autocomplete",a))}}),b.on("mouseover",function(a){var c=b.tooltip().moveTo(-65535);if(b.statusLevel()&&a.target.className.indexOf(b.classPrefix+"status")!==-1){var d=b.statusMessage()||"Ok",e=c.text(d).show().testMoveRel(a.target,["bc-tc","bc-tl","bc-tr"]);c.classes.toggle("tooltip-n","bc-tc"==e),c.classes.toggle("tooltip-nw","bc-tl"==e),c.classes.toggle("tooltip-ne","bc-tr"==e),c.moveRel(a.target,e)}})},statusLevel:function(a){return arguments.length>0&&this.state.set("statusLevel",a),this.state.get("statusLevel")},statusMessage:function(a){return arguments.length>0&&this.state.set("statusMessage",a),this.state.get("statusMessage")},showMenu:function(){var a,c=this,d=c.settings;c.menu||(a=d.menu||[],a.length?a={type:"menu",items:a}:a.type=a.type||"menu",c.menu=b.create(a).parent(c).renderTo(c.getContainerElm()),c.fire("createmenu"),c.menu.reflow(),c.menu.on("cancel",function(a){a.control===c.menu&&c.focus()}),c.menu.on("show hide",function(a){a.control.items().each(function(a){a.active(a.value()==c.value())})}).fire("show"),c.menu.on("select",function(a){c.value(a.control.value())}),c.on("focusin",function(a){"INPUT"==a.target.tagName.toUpperCase()&&c.menu.hide()}),c.aria("expanded",!0)),c.menu.show(),c.menu.layoutRect({w:c.layoutRect().w}),c.menu.moveRel(c.getEl(),c.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},focus:function(){this.getEl("inp").focus()},repaint:function(){var a,b,e=this,f=e.getEl(),g=e.getEl("open"),h=e.layoutRect(),i=0,j=f.firstChild;e.statusLevel()&&"none"!==e.statusLevel()&&(i=parseInt(c.getRuntimeStyle(j,"padding-right"),10)-parseInt(c.getRuntimeStyle(j,"padding-left"),10)),a=g?h.w-c.getSize(g).width-10:h.w-10;var k=document;return k.all&&(!k.documentMode||k.documentMode<=8)&&(b=e.layoutRect().h-2+"px"),d(j).css({width:a-i,lineHeight:b}),e._super(),e},postRender:function(){var a=this;return d(this.getEl("inp")).on("change",function(b){a.state.set("value",b.target.value),a.fire("change",b)}),a._super()},renderHtml:function(){var a,b,c=this,d=c._id,e=c.settings,f=c.classPrefix,g=c.state.get("value")||"",h="",i="",j="";return"spellcheck"in e&&(i+=' spellcheck="'+e.spellcheck+'"'),e.maxLength&&(i+=' maxlength="'+e.maxLength+'"'),e.size&&(i+=' size="'+e.size+'"'),e.subtype&&(i+=' type="'+e.subtype+'"'),j='<i id="'+d+'-status" class="mce-status mce-ico" style="display: none"></i>',c.disabled()&&(i+=' disabled="disabled"'),a=e.icon,a&&"caret"!=a&&(a=f+"ico "+f+"i-"+e.icon),b=c.state.get("text"),(a||b)&&(h='<div id="'+d+'-open" class="'+f+"btn "+f+'open" tabIndex="-1" role="button"><button id="'+d+'-action" type="button" hidefocus="1" tabindex="-1">'+("caret"!=a?'<i class="'+a+'"></i>':'<i class="'+f+'caret"></i>')+(b?(a?" ":"")+b:"")+"</button></div>",c.classes.add("has-open")),'<div id="'+d+'" class="'+c.classes+'"><input id="'+d+'-inp" class="'+f+'textbox" value="'+c.encode(g,!1)+'" hidefocus="1"'+i+' placeholder="'+c.encode(e.placeholder)+'" />'+j+h+"</div>"},value:function(a){return arguments.length?(this.state.set("value",a),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},showAutoComplete:function(a,c){var d=this;if(0===a.length)return void d.hideMenu();var e=function(a,b){return function(){d.fire("selectitem",{title:b,value:a})}};d.menu?d.menu.items().remove():d.menu=b.create({type:"menu",classes:"combobox-menu",layout:"flow"}).parent(d).renderTo(),f.each(a,function(a){d.menu.add({text:a.title,url:a.previewUrl,match:c,classes:"menu-item-ellipsis",onclick:e(a.value,a.title)})}),d.menu.renderNew(),d.hideMenu(),d.menu.on("cancel",function(a){a.control.parent()===d.menu&&(a.stopPropagation(),d.focus(),d.hideMenu())}),d.menu.on("select",function(){d.focus()});var g=d.layoutRect().w;d.menu.layoutRect({w:g,minW:0,maxW:g}),d.menu.reflow(),d.menu.show(),d.menu.moveRel(d.getEl(),d.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},hideMenu:function(){this.menu&&this.menu.hide()},bindStates:function(){var a=this;a.state.on("change:value",function(b){a.getEl("inp").value!=b.value&&(a.getEl("inp").value=b.value)}),a.state.on("change:disabled",function(b){a.getEl("inp").disabled=b.value}),a.state.on("change:statusLevel",function(b){var d=a.getEl("status"),e=a.classPrefix,f=b.value;c.css(d,"display","none"===f?"none":""),c.toggleClass(d,e+"i-checkmark","ok"===f),c.toggleClass(d,e+"i-warning","warn"===f),c.toggleClass(d,e+"i-error","error"===f),a.classes.toggle("has-status","none"!==f),a.repaint()}),c.on(a.getEl("status"),"mouseleave",function(){a.tooltip().hide()}),a.on("cancel",function(b){a.menu&&a.menu.visible()&&(b.stopPropagation(),a.hideMenu())});var b=function(a,b){b&&b.items().length>0&&b.items().eq(a)[0].focus();
-};return a.on("keydown",function(c){var d=c.keyCode;"INPUT"===c.target.nodeName&&(d===e.DOWN?(c.preventDefault(),a.fire("autocomplete"),b(0,a.menu)):d===e.UP&&(c.preventDefault(),b(-1,a.menu)))}),a._super()},remove:function(){d(this.getEl("inp")).off(),this.menu&&this.menu.remove(),this._super()}})}),g("tinymce.core.ui.ColorBox",["tinymce.core.ui.ComboBox"],function(a){"use strict";return a.extend({init:function(a){var b=this;a.spellcheck=!1,a.onaction&&(a.icon="none"),b._super(a),b.classes.add("colorbox"),b.on("change keyup postrender",function(){b.repaintColor(b.value())})},repaintColor:function(a){var b=this.getEl("open"),c=b?b.getElementsByTagName("i")[0]:null;if(c)try{c.style.background=a}catch(d){}},bindStates:function(){var a=this;return a.state.on("change:value",function(b){a.state.get("rendered")&&a.repaintColor(b.value)}),a._super()}})}),g("tinymce.core.ui.PanelButton",["tinymce.core.ui.Button","tinymce.core.ui.FloatPanel"],function(a,b){"use strict";return a.extend({showPanel:function(){var a=this,c=a.settings;if(a.active(!0),a.panel)a.panel.show();else{var d=c.panel;d.type&&(d={layout:"grid",items:d}),d.role=d.role||"dialog",d.popover=!0,d.autohide=!0,d.ariaRoot=!0,a.panel=new b(d).on("hide",function(){a.active(!1)}).on("cancel",function(b){b.stopPropagation(),a.focus(),a.hidePanel()}).parent(a).renderTo(a.getContainerElm()),a.panel.fire("show"),a.panel.reflow()}var e=a.panel.testMoveRel(a.getEl(),c.popoverAlign||(a.isRtl()?["bc-tc","bc-tl","bc-tr"]:["bc-tc","bc-tr","bc-tl"]));a.panel.classes.toggle("start","bc-tl"===e),a.panel.classes.toggle("end","bc-tr"===e),a.panel.moveRel(a.getEl(),e)},hidePanel:function(){var a=this;a.panel&&a.panel.hide()},postRender:function(){var a=this;return a.aria("haspopup",!0),a.on("click",function(b){b.control===a&&(a.panel&&a.panel.visible()?a.hidePanel():(a.showPanel(),a.panel.focus(!!b.aria)))}),a._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}})}),g("tinymce.core.ui.ColorButton",["tinymce.core.ui.PanelButton","tinymce.core.dom.DOMUtils"],function(a,b){"use strict";var c=b.DOM;return a.extend({init:function(a){this._super(a),this.classes.add("colorbutton")},color:function(a){return a?(this._color=a,this.getEl("preview").style.backgroundColor=a,this):this._color},resetColor:function(){return this._color=null,this.getEl("preview").style.backgroundColor=null,this},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix,d=a.state.get("text"),e=a.settings.icon?c+"ico "+c+"i-"+a.settings.icon:"",f=a.settings.image?" style=\"background-image: url('"+a.settings.image+"')\"":"",g="";return d&&(a.classes.add("btn-has-text"),g='<span class="'+c+'txt">'+a.encode(d)+"</span>"),'<div id="'+b+'" class="'+a.classes+'" role="button" tabindex="-1" aria-haspopup="true"><button role="presentation" hidefocus="1" type="button" tabindex="-1">'+(e?'<i class="'+e+'"'+f+"></i>":"")+'<span id="'+b+'-preview" class="'+c+'preview"></span>'+g+'</button><button type="button" class="'+c+'open" hidefocus="1" tabindex="-1"> <i class="'+c+'caret"></i></button></div>'},postRender:function(){var a=this,b=a.settings.onclick;return a.on("click",function(d){d.aria&&"down"==d.aria.key||d.control!=a||c.getParent(d.target,"."+a.classPrefix+"open")||(d.stopImmediatePropagation(),b.call(a,d))}),delete a.settings.onclick,a._super()}})}),g("tinymce.core.util.Color",[],function(){function a(a){function e(a,e,f){var g,h,i,j,k,l;return g=0,h=0,i=0,a/=255,e/=255,f/=255,k=b(a,b(e,f)),l=c(a,c(e,f)),k==l?(i=k,{h:0,s:0,v:100*i}):(j=a==k?e-f:f==k?a-e:f-a,g=a==k?3:f==k?1:5,g=60*(g-j/(l-k)),h=(l-k)/l,i=l,{h:d(g),s:d(100*h),v:d(100*i)})}function f(a,e,f){var g,h,i,j;if(a=(parseInt(a,10)||0)%360,e=parseInt(e,10)/100,f=parseInt(f,10)/100,e=c(0,b(e,1)),f=c(0,b(f,1)),0===e)return void(l=m=n=d(255*f));switch(g=a/60,h=f*e,i=h*(1-Math.abs(g%2-1)),j=f-h,Math.floor(g)){case 0:l=h,m=i,n=0;break;case 1:l=i,m=h,n=0;break;case 2:l=0,m=h,n=i;break;case 3:l=0,m=i,n=h;break;case 4:l=i,m=0,n=h;break;case 5:l=h,m=0,n=i;break;default:l=m=n=0}l=d(255*(l+j)),m=d(255*(m+j)),n=d(255*(n+j))}function g(){function a(a){return a=parseInt(a,10).toString(16),a.length>1?a:"0"+a}return"#"+a(l)+a(m)+a(n)}function h(){return{r:l,g:m,b:n}}function i(){return e(l,m,n)}function j(a){var b;return"object"==typeof a?"r"in a?(l=a.r,m=a.g,n=a.b):"v"in a&&f(a.h,a.s,a.v):(b=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(a))?(l=parseInt(b[1],10),m=parseInt(b[2],10),n=parseInt(b[3],10)):(b=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(a))?(l=parseInt(b[1],16),m=parseInt(b[2],16),n=parseInt(b[3],16)):(b=/#([0-F])([0-F])([0-F])/gi.exec(a))&&(l=parseInt(b[1]+b[1],16),m=parseInt(b[2]+b[2],16),n=parseInt(b[3]+b[3],16)),l=l<0?0:l>255?255:l,m=m<0?0:m>255?255:m,n=n<0?0:n>255?255:n,k}var k=this,l=0,m=0,n=0;a&&j(a),k.toRgb=h,k.toHsv=i,k.toHex=g,k.parse=j}var b=Math.min,c=Math.max,d=Math.round;return a}),g("tinymce.core.ui.ColorPicker",["tinymce.core.ui.Widget","tinymce.core.ui.DragHelper","tinymce.core.ui.DomUtils","tinymce.core.util.Color"],function(a,b,c,d){"use strict";return a.extend({Defaults:{classes:"widget colorpicker"},init:function(a){this._super(a)},postRender:function(){function a(a,b){var d,e,f=c.getPos(a);return d=b.pageX-f.x,e=b.pageY-f.y,d=Math.max(0,Math.min(d/a.clientWidth,1)),e=Math.max(0,Math.min(e/a.clientHeight,1)),{x:d,y:e}}function e(a,b){var e=(360-a.h)/360;c.css(j,{top:100*e+"%"}),b||c.css(l,{left:a.s+"%",top:100-a.v+"%"}),k.style.background=new d({s:100,v:100,h:a.h}).toHex(),m.color().parse({s:a.s,v:a.v,h:a.h})}function f(b){var c;c=a(k,b),h.s=100*c.x,h.v=100*(1-c.y),e(h),m.fire("change")}function g(b){var c;c=a(i,b),h=n.toHsv(),h.h=360*(1-c.y),e(h,!0),m.fire("change")}var h,i,j,k,l,m=this,n=m.color();i=m.getEl("h"),j=m.getEl("hp"),k=m.getEl("sv"),l=m.getEl("svp"),m._repaint=function(){h=n.toHsv(),e(h)},m._super(),m._svdraghelper=new b(m._id+"-sv",{start:f,drag:f}),m._hdraghelper=new b(m._id+"-h",{start:g,drag:g}),m._repaint()},rgb:function(){return this.color().toRgb()},value:function(a){var b=this;return arguments.length?(b.color().parse(a),void(b._rendered&&b._repaint())):b.color().toHex()},color:function(){return this._color||(this._color=new d),this._color},renderHtml:function(){function a(){var a,b,c,d,g="";for(c="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",d=f.split(","),a=0,b=d.length-1;a<b;a++)g+='<div class="'+e+'colorpicker-h-chunk" style="height:'+100/b+"%;"+c+d[a]+",endColorstr="+d[a+1]+");-ms-"+c+d[a]+",endColorstr="+d[a+1]+')"></div>';return g}var b,c=this,d=c._id,e=c.classPrefix,f="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000",g="background: -ms-linear-gradient(top,"+f+");background: linear-gradient(to bottom,"+f+");";return b='<div id="'+d+'-h" class="'+e+'colorpicker-h" style="'+g+'">'+a()+'<div id="'+d+'-hp" class="'+e+'colorpicker-h-marker"></div></div>','<div id="'+d+'" class="'+c.classes+'"><div id="'+d+'-sv" class="'+e+'colorpicker-sv"><div class="'+e+'colorpicker-overlay1"><div class="'+e+'colorpicker-overlay2"><div id="'+d+'-svp" class="'+e+'colorpicker-selector1"><div class="'+e+'colorpicker-selector2"></div></div></div></div></div>'+b+"</div>"}})}),g("tinymce.core.ui.Path",["tinymce.core.ui.Widget"],function(a){"use strict";return a.extend({init:function(a){var b=this;a.delimiter||(a.delimiter="\xbb"),b._super(a),b.classes.add("path"),b.canFocus=!0,b.on("click",function(a){var c,d=a.target;(c=d.getAttribute("data-index"))&&b.fire("select",{value:b.row()[c],index:c})}),b.row(b.settings.row)},focus:function(){var a=this;return a.getEl().firstChild.focus(),a},row:function(a){return arguments.length?(this.state.set("row",a),this):this.state.get("row")},renderHtml:function(){var a=this;return'<div id="'+a._id+'" class="'+a.classes+'">'+a._getDataPathHtml(a.state.get("row"))+"</div>"},bindStates:function(){var a=this;return a.state.on("change:row",function(b){a.innerHtml(a._getDataPathHtml(b.value))}),a._super()},_getDataPathHtml:function(a){var b,c,d=this,e=a||[],f="",g=d.classPrefix;for(b=0,c=e.length;b<c;b++)f+=(b>0?'<div class="'+g+'divider" aria-hidden="true"> '+d.settings.delimiter+" </div>":"")+'<div role="button" class="'+g+"path-item"+(b==c-1?" "+g+"last":"")+'" data-index="'+b+'" tabindex="-1" id="'+d._id+"-"+b+'" aria-level="'+(b+1)+'">'+e[b].name+"</div>";return f||(f='<div class="'+g+'path-item">\xa0</div>'),f}})}),g("tinymce.core.ui.ElementPath",["tinymce.core.ui.Path"],function(a){return a.extend({postRender:function(){function a(a){if(1===a.nodeType){if("BR"==a.nodeName||a.getAttribute("data-mce-bogus"))return!0;if("bookmark"===a.getAttribute("data-mce-type"))return!0}return!1}var b=this,c=b.settings.editor;return c.settings.elementpath!==!1&&(b.on("select",function(a){c.focus(),c.selection.select(this.row()[a.index].element),c.nodeChanged()}),c.on("nodeChange",function(d){for(var e=[],f=d.parents,g=f.length;g--;)if(1==f[g].nodeType&&!a(f[g])){var h=c.fire("ResolveName",{name:f[g].nodeName.toLowerCase(),target:f[g]});if(h.isDefaultPrevented()||e.push({name:h.name,element:f[g]}),h.isPropagationStopped())break}b.row(e)})),b._super()}})}),g("tinymce.core.ui.FormItem",["tinymce.core.ui.Container"],function(a){"use strict";return a.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var a=this,b=a._layout,c=a.classPrefix;return a.classes.add("formitem"),b.preRender(a),'<div id="'+a._id+'" class="'+a.classes+'" hidefocus="1" tabindex="-1">'+(a.settings.title?'<div id="'+a._id+'-title" class="'+c+'title">'+a.settings.title+"</div>":"")+'<div id="'+a._id+'-body" class="'+a.bodyClasses+'">'+(a.settings.html||"")+b.renderHtml(a)+"</div></div>"}})}),g("tinymce.core.ui.Form",["tinymce.core.ui.Container","tinymce.core.ui.FormItem","tinymce.core.util.Tools"],function(a,b,c){"use strict";return a.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var a=this,d=a.items();a.settings.formItemDefaults||(a.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),d.each(function(d){var e,f=d.settings.label;f&&(e=new b(c.extend({items:{type:"label",id:d._id+"-l",text:f,flex:0,forId:d._id,disabled:d.disabled()}},a.settings.formItemDefaults)),e.type="formitem",d.aria("labelledby",d._id+"-l"),"undefined"==typeof d.settings.flex&&(d.settings.flex=1),a.replace(d,e),e.add(d))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var a=this;a._super(),a.fromJSON(a.settings.data)},bindStates:function(){function a(){var a,c,d,e=0,f=[];if(b.settings.labelGapCalc!==!1)for(d="children"==b.settings.labelGapCalc?b.find("formitem"):b.items(),d.filter("formitem").each(function(a){var b=a.items()[0],c=b.getEl().clientWidth;e=c>e?c:e,f.push(b)}),c=b.settings.labelGap||0,a=f.length;a--;)f[a].settings.minWidth=e+c}var b=this;b._super(),b.on("show",a),a()}})}),g("tinymce.core.ui.FieldSet",["tinymce.core.ui.Form"],function(a){"use strict";return a.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var a=this,b=a._layout,c=a.classPrefix;return a.preRender(),b.preRender(a),'<fieldset id="'+a._id+'" class="'+a.classes+'" hidefocus="1" tabindex="-1">'+(a.settings.title?'<legend id="'+a._id+'-title" class="'+c+'fieldset-title">'+a.settings.title+"</legend>":"")+'<div id="'+a._id+'-body" class="'+a.bodyClasses+'">'+(a.settings.html||"")+b.renderHtml(a)+"</div></fieldset>"}})}),g("tinymce.core.content.LinkTargets",["ephox.sugar.api.node.Element","ephox.sugar.api.search.SelectorFilter","tinymce.core.dom.DOMUtils","tinymce.core.dom.NodeType","tinymce.core.util.Arr","tinymce.core.util.Fun","tinymce.core.util.Tools","tinymce.core.util.Uuid"],function(a,b,c,d,e,f,g,h){var i=g.trim,j=function(a,b,c,d,e){return{type:a,title:b,url:c,level:d,attach:e}},k=function(a){for(;a=a.parentNode;){var b=a.contentEditable;if(b&&"inherit"!==b)return d.isContentEditableTrue(a)}return!1},l=function(c,d){return e.map(b.descendants(a.fromDom(d),c),function(a){return a.dom()})},m=function(a){return a.innerText||a.textContent},n=function(a){return a.id?a.id:h.uuid("h")},o=function(a){return a&&"A"===a.nodeName&&(a.id||a.name)},p=function(a){return o(a)&&r(a)},q=function(a){return a&&/^(H[1-6])$/.test(a.nodeName)},r=function(a){return k(a)&&!d.isContentEditableFalse(a)},s=function(a){return q(a)&&r(a)},t=function(a){return q(a)?parseInt(a.nodeName.substr(1),10):0},u=function(a){var b=n(a),c=function(){a.id=b};return j("header",m(a),"#"+b,t(a),c)},v=function(a){var b=a.id||a.name,c=m(a);return j("anchor",c?c:"#"+b,"#"+b,0,f.noop)},w=function(a){return e.map(e.filter(a,s),u)},x=function(a){return e.map(e.filter(a,p),v)},y=function(a){var b=l("h1,h2,h3,h4,h5,h6,a:not([href])",a);return b},z=function(a){return i(a.title).length>0},A=function(a){var b=y(a);return e.filter(w(b).concat(x(b)),z)};return{find:A}}),g("tinymce.core.ui.FilePicker",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","global!window","tinymce.core.content.LinkTargets","tinymce.core.EditorManager","tinymce.core.ui.ComboBox","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g){"use strict";var h=function(){return c.tinymce?c.tinymce.activeEditor:e.activeEditor},i={},j=5,k=function(a){return{title:a.title,value:{title:{raw:a.title},url:a.url,attach:a.attach}}},l=function(a){return g.map(a,k)},m=function(a,c){return{title:a,value:{title:a,url:c,attach:b.noop}}},n=function(b,c){var d=a.exists(c,function(a){return a.url===b});return!d},o=function(a,b,c){var d=b in a?a[b]:c;return d===!1?null:d},p=function(c,d,e,f){var h={title:"-"},j=function(c){var f=c.hasOwnProperty(e)?c[e]:[],h=a.filter(f,function(a){return n(a,d)});return g.map(h,function(a){return{title:a,value:{title:a,url:a,attach:b.noop}}})},k=function(b){var c=a.filter(d,function(a){return a.type===b});return l(c)},p=function(){var a=k("anchor"),b=o(f,"anchor_top","#top"),c=o(f,"anchor_bottom","#bottom");return null!==b&&a.unshift(m("<top>",b)),null!==c&&a.push(m("<bottom>",c)),a},q=function(b){return a.foldl(b,function(a,b){var c=0===a.length||0===b.length;return c?a.concat(b):a.concat(h,b)},[])};return f.typeahead_urls===!1?[]:"file"===e?q([r(c,j(i)),r(c,k("header")),r(c,p())]):r(c,j(i))},q=function(b,c){var d=i[c];/^https?/.test(b)&&(d?a.indexOf(d,b)===-1&&(i[c]=d.slice(0,j).concat(b)):i[c]=[b])},r=function(a,b){var c=a.toLowerCase(),d=g.grep(b,function(a){return a.title.toLowerCase().indexOf(c)!==-1});return 1===d.length&&d[0].title===a?[]:d},s=function(a){var b=a.title;return b.raw?b.raw:b},t=function(a,b,c,e){var f=function(f){var g=d.find(c),h=p(f,g,e,b);a.showAutoComplete(h,f)};a.on("autocomplete",function(){f(a.value())}),a.on("selectitem",function(b){var c=b.value;a.value(c.url);var d=s(c);"image"===e?a.fire("change",{meta:{alt:d,attach:c.attach}}):a.fire("change",{meta:{text:d,attach:c.attach}}),a.focus()}),a.on("click",function(b){0===a.value().length&&"INPUT"===b.target.nodeName&&f("")}),a.on("PostRender",function(){a.getRoot().on("submit",function(b){b.isDefaultPrevented()||q(a.value(),e)})})},u=function(a){var b=a.status,c=a.message;return"valid"===b?{status:"ok",message:c}:"unknown"===b?{status:"warn",message:c}:"invalid"===b?{status:"warn",message:c}:{status:"none",message:""}},v=function(a,b,c){var d=b.filepicker_validator_handler;if(d){var e=function(b){return 0===b.length?void a.statusLevel("none"):void d({url:b,type:c},function(b){var c=u(b);a.statusMessage(c.message),a.statusLevel(c.status)})};a.state.on("change:value",function(a){e(a.value)})}};return f.extend({init:function(a){var b,d,e,f=this,i=h(),j=i.settings,k=a.filetype;a.spellcheck=!1,e=j.file_picker_types||j.file_browser_callback_types,e&&(e=g.makeMap(e,/[, ]/)),e&&!e[k]||(d=j.file_picker_callback,!d||e&&!e[k]?(d=j.file_browser_callback,!d||e&&!e[k]||(b=function(){d(f.getEl("inp").id,f.value(),k,c)})):b=function(){var a=f.fire("beforecall").meta;a=g.extend({filetype:k},a),d.call(i,function(a,b){f.value(a).fire("change",{meta:b})},f.value(),a)}),b&&(a.icon="browse",a.onaction=b),f._super(a),t(f,j,i.getBody(),k),v(f,j,k)}})}),g("tinymce.core.ui.FitLayout",["tinymce.core.ui.AbsoluteLayout"],function(a){"use strict";return a.extend({recalc:function(a){var b=a.layoutRect(),c=a.paddingBox;a.items().filter(":visible").each(function(a){a.layoutRect({x:c.left,y:c.top,w:b.innerW-c.right-c.left,h:b.innerH-c.top-c.bottom}),a.recalc&&a.recalc()})}})}),g("tinymce.core.ui.FlexLayout",["tinymce.core.ui.AbsoluteLayout"],function(a){"use strict";return a.extend({recalc:function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=[],O=Math.max,P=Math.min;for(d=a.items().filter(":visible"),e=a.layoutRect(),f=a.paddingBox,g=a.settings,m=a.isRtl()?g.direction||"row-reversed":g.direction,h=g.align,i=a.isRtl()?g.pack||"end":g.pack,j=g.spacing||0,"row-reversed"!=m&&"column-reverse"!=m||(d=d.set(d.toArray().reverse()),m=m.split("-")[0]),"column"==m?(z="y",x="h",y="minH",A="maxH",C="innerH",B="top",D="deltaH",E="contentH",J="left",H="w",F="x",G="innerW",I="minW",K="right",L="deltaW",M="contentW"):(z="x",x="w",y="minW",A="maxW",C="innerW",B="left",D="deltaW",E="contentW",J="top",H="h",F="y",G="innerH",I="minH",K="bottom",L="deltaH",M="contentH"),l=e[C]-f[B]-f[B],w=k=0,b=0,c=d.length;b<c;b++)n=d[b],o=n.layoutRect(),p=n.settings,q=p.flex,l-=b<c-1?j:0,q>0&&(k+=q,o[A]&&N.push(n),o.flex=q),l-=o[y],r=f[J]+o[I]+f[K],r>w&&(w=r);if(u={},l<0?u[y]=e[y]-l+e[D]:u[y]=e[C]-l+e[D],u[I]=w+e[L],u[E]=e[C]-l,u[M]=w,u.minW=P(u.minW,e.maxW),u.minH=P(u.minH,e.maxH),u.minW=O(u.minW,e.startMinWidth),u.minH=O(u.minH,e.startMinHeight),!e.autoResize||u.minW==e.minW&&u.minH==e.minH){for(t=l/k,b=0,c=N.length;b<c;b++)n=N[b],o=n.layoutRect(),s=o[A],r=o[y]+o.flex*t,r>s?(l-=o[A]-o[y],k-=o.flex,o.flex=0,o.maxFlexSize=s):o.maxFlexSize=0;for(t=l/k,v=f[B],u={},0===k&&("end"==i?v=l+f[B]:"center"==i?(v=Math.round(e[C]/2-(e[C]-l)/2)+f[B],v<0&&(v=f[B])):"justify"==i&&(v=f[B],j=Math.floor(l/(d.length-1)))),u[F]=f[J],b=0,c=d.length;b<c;b++)n=d[b],o=n.layoutRect(),r=o.maxFlexSize||o[y],"center"===h?u[F]=Math.round(e[G]/2-o[H]/2):"stretch"===h?(u[H]=O(o[I]||0,e[G]-f[J]-f[K]),u[F]=f[J]):"end"===h&&(u[F]=e[G]-o[H]-f.top),o.flex>0&&(r+=o.flex*t),u[x]=r,u[z]=v,n.layoutRect(u),n.recalc&&n.recalc(),v+=r+j}else if(u.w=u.minW,u.h=u.minH,a.layoutRect(u),this.recalc(a),null===a._lastRect){var Q=a.parent();Q&&(Q._lastRect=null,Q.recalc())}}})}),g("tinymce.core.ui.FlowLayout",["tinymce.core.ui.Layout"],function(a){return a.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(a){a.items().filter(":visible").each(function(a){a.recalc&&a.recalc()})},isNative:function(){return!0}})}),g("tinymce.core.fmt.FontInfo",["ephox.katamari.api.Fun","ephox.katamari.api.Option","ephox.sugar.api.node.Element","ephox.sugar.api.node.Node","tinymce.core.dom.DOMUtils"],function(a,b,c,d,e){var f=function(a,c,d){for(;d!==c;){if(d.style[a]){var e=d.style[a];return""!==e?b.some(e):b.none()}d=d.parentNode}return b.none()},g=function(a){return/[0-9.]+px$/.test(a)?Math.round(72*parseInt(a,10)/96)+"pt":a},h=function(a){return a.replace(/[\'\"]/g,"").replace(/,\s+/g,",")},i=function(a,c){return b.from(e.DOM.getStyle(c,a,!0))},j=function(a){return function(e,g){return b.from(g).map(c.fromDom).filter(d.isElement).bind(function(b){return f(a,e,b.dom()).or(i(a,b.dom()))}).getOr("")}};return{getFontSize:j("fontSize"),getFontFamily:a.compose(h,j("fontFamily")),toPt:g}}),g("tinymce.core.ui.FormatControls",["ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.sugar.api.node.Element","ephox.sugar.api.search.SelectorFind","tinymce.core.dom.DOMUtils","tinymce.core.EditorManager","tinymce.core.Env","tinymce.core.fmt.FontInfo","tinymce.core.ui.Control","tinymce.core.ui.FloatPanel","tinymce.core.ui.Widget","tinymce.core.util.Tools"],function(a,b,c,d,e,f,g,h,i,j,k,l){function m(a){a.settings.ui_container&&(g.container=d.descendant(c.fromDom(document.body),a.settings.ui_container).fold(b.constant(null),function(a){return a.dom()}))}function n(a){a.on("ScriptsLoaded",function(){a.rtl&&(i.rtl=!0)})}function o(a){function b(b,c){return function(){var d=this;a.on("nodeChange",function(e){var f=a.formatter,g=null;p(e.parents,function(a){if(p(b,function(b){if(c?f.matchNode(a,c,{value:b.value})&&(g=b.value):f.matchNode(a,b.value)&&(g=b.value),g)return!1}),g)return!1}),d.value(g)})}}function c(b){return function(){var c=this,d=function(a){return a?a.split(",")[0]:""};a.on("init nodeChange",function(e){var f,g=null;f=h.getFontFamily(a.getBody(),e.element),p(b,function(a){a.value.toLowerCase()===f.toLowerCase()&&(g=a.value)}),p(b,function(a){g||d(a.value).toLowerCase()!==d(f).toLowerCase()||(g=a.value)}),c.value(g),!g&&f&&c.text(d(f))})}}function d(b){return function(){var c=this;a.on("init nodeChange",function(d){var e,f,g=null;e=h.getFontSize(a.getBody(),d.element),f=h.toPt(e),p(b,function(a){a.value===e?g=e:a.value===f&&(g=f)}),c.value(g),g||c.text(f)})}}function e(a){a=a.replace(/;$/,"").split(";");for(var b=a.length;b--;)a[b]=a[b].split("=");return a}function f(){function b(a){var c=[];if(a)return p(a,function(a){var f={text:a.title,icon:a.icon};if(a.items)f.menu=b(a.items);else{var g=a.format||"custom"+d++;a.format||(a.name=g,e.push(a)),f.format=g,f.cmd=a.cmd}c.push(f)}),c}function c(){var c;return c=b(a.settings.style_formats_merge?a.settings.style_formats?f.concat(a.settings.style_formats):f:a.settings.style_formats||f)}var d=0,e=[],f=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return a.on("init",function(){p(e,function(b){a.formatter.register(b.name,b)})}),{type:"menu",items:c(),onPostRender:function(b){a.fire("renderFormatsMenu",{control:b.control})},itemDefaults:{preview:!0,textStyle:function(){if(this.settings.format)return a.formatter.getCssText(this.settings.format)},onPostRender:function(){var b=this;b.parent().on("show",function(){var c,d;c=b.settings.format,c&&(b.disabled(!a.formatter.canApply(c)),b.active(a.formatter.match(c))),d=b.settings.cmd,d&&b.active(a.queryCommandState(d))})},onclick:function(){this.settings.format&&m(this.settings.format),this.settings.cmd&&a.execCommand(this.settings.cmd)}}}}function g(b){return function(){var c=this;a.formatter?a.formatter.formatChanged(b,function(a){c.active(a)}):a.on("init",function(){a.formatter.formatChanged(b,function(a){c.active(a)})})}}function i(b){return function(){function c(){var c="redo"==b?"hasRedo":"hasUndo";return!!a.undoManager&&a.undoManager[c]()}var d=this;d.disabled(!c()),a.on("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",function(){d.disabled(a.readonly||!c())})}}function k(){var b=this;a.on("VisualAid",function(a){b.active(a.hasVisual)}),b.active(a.hasVisual)}function m(b){b.control&&(b=b.control.value()),b&&a.execCommand("mceToggleFormat",!1,b)}function n(b){var c=b.length;return l.each(b,function(b){b.menu&&(b.hidden=0===n(b.menu));var d=b.format;d&&(b.hidden=!a.formatter.canApply(d)),b.hidden&&c--}),c}function o(b){var c=b.items().length;return b.items().each(function(b){b.menu&&b.visible(o(b.menu)>0),!b.menu&&b.settings.menu&&b.visible(n(b.settings.menu)>0);var d=b.settings.format;d&&b.visible(a.formatter.canApply(d)),b.visible()||c--}),c}var r;r=f(),p({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(b,c){a.addButton(c,{tooltip:b,onPostRender:g(c),onclick:function(){m(c)}})}),p({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(b,c){a.addButton(c,{tooltip:b[0],cmd:b[1]})}),p({blockquote:["Blockquote","mceBlockQuote"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"],alignnone:["No alignment","JustifyNone"]},function(b,c){a.addButton(c,{tooltip:b[0],cmd:b[1],onPostRender:g(c)})});var s=function(a){var b=a;return b.length>0&&"-"===b[0].text&&(b=b.slice(1)),b.length>0&&"-"===b[b.length-1].text&&(b=b.slice(0,b.length-1)),b},t=function(b){var c,d;if("string"==typeof b)d=b.split(" ");else if(l.isArray(b))return q(l.map(b,t));return c=l.grep(d,function(b){return"|"===b||b in a.menuItems}),l.map(c,function(b){return"|"===b?{text:"-"}:a.menuItems[b]})},u=function(b){var c=[{text:"-"}],d=l.grep(a.menuItems,function(a){return a.context===b});return l.each(d,function(a){"before"==a.separator&&c.push({text:"|"}),a.prependToContext?c.unshift(a):c.push(a),"after"==a.separator&&c.push({text:"|"})}),c},v=function(a){return s(a.insert_button_items?t(a.insert_button_items):u("insert"))};a.addButton("undo",{tooltip:"Undo",onPostRender:i("undo"),cmd:"undo"}),a.addButton("redo",{tooltip:"Redo",onPostRender:i("redo"),cmd:"redo"}),a.addMenuItem("newdocument",{text:"New document",icon:"newdocument",cmd:"mceNewDocument"}),a.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onPostRender:i("undo"),cmd:"undo"}),a.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onPostRender:i("redo"),cmd:"redo"}),a.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:k,cmd:"mceToggleVisualAid"}),a.addButton("remove",{tooltip:"Remove",icon:"remove",cmd:"Delete"}),a.addButton("insert",{type:"menubutton",icon:"insert",menu:[],oncreatemenu:function(){this.menu.add(v(a.settings)),this.menu.renderNew()}}),p({cut:["Cut","Cut","Meta+X"],copy:["Copy","Copy","Meta+C"],paste:["Paste","Paste","Meta+V"],selectall:["Select all","SelectAll","Meta+A"],bold:["Bold","Bold","Meta+B"],italic:["Italic","Italic","Meta+I"],underline:["Underline","Underline","Meta+U"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(b,c){a.addMenuItem(c,{text:b[0],icon:c,shortcut:b[2],cmd:b[1]})}),a.on("mousedown",function(){j.hideAll()}),a.addButton("styleselect",{type:"menubutton",text:"Formats",menu:r,onShowMenu:function(){a.settings.style_formats_autohide&&o(this.menu)}}),a.addButton("formatselect",function(){var c=[],d=e(a.settings.block_formats||"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre");return p(d,function(b){c.push({text:b[0],value:b[1],textStyle:function(){return a.formatter.getCssText(b[1])}})}),{type:"listbox",text:d[0][0],values:c,fixedWidth:!0,onselect:m,onPostRender:b(c)}}),a.addButton("fontselect",function(){var b="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",d=[],f=e(a.settings.font_formats||b);return p(f,function(a){d.push({text:{raw:a[0]},value:a[1],textStyle:a[1].indexOf("dings")==-1?"font-family:"+a[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:d,fixedWidth:!0,onPostRender:c(d),onselect:function(b){b.control.settings.value&&a.execCommand("FontName",!1,b.control.settings.value)}}}),a.addButton("fontsizeselect",function(){var b=[],c="8pt 10pt 12pt 14pt 18pt 24pt 36pt",e=a.settings.fontsize_formats||c;return p(e.split(" "),function(a){var c=a,d=a,e=a.split("=");e.length>1&&(c=e[0],d=e[1]),b.push({text:c,value:d})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:b,fixedWidth:!0,onPostRender:d(b),onclick:function(b){b.control.settings.value&&a.execCommand("FontSize",!1,b.control.settings.value)}}}),a.addMenuItem("formats",{text:"Formats",menu:r})}var p=l.each,q=function(b){return a.foldl(b,function(a,b){return a.concat(b)},[])};return f.on("AddEditor",function(a){var b=a.editor;n(b),o(b),m(b)}),i.translate=function(a){return f.translate(a)},k.tooltips=!g.iOS,{}}),g("tinymce.core.ui.GridLayout",["tinymce.core.ui.AbsoluteLayout"],function(a){"use strict";return a.extend({recalc:function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E=[],F=[];b=a.settings,e=a.items().filter(":visible"),f=a.layoutRect(),d=b.columns||Math.ceil(Math.sqrt(e.length)),c=Math.ceil(e.length/d),s=b.spacingH||b.spacing||0,t=b.spacingV||b.spacing||0,u=b.alignH||b.align,v=b.alignV||b.align,q=a.paddingBox,C="reverseRows"in b?b.reverseRows:a.isRtl(),u&&"string"==typeof u&&(u=[u]),v&&"string"==typeof v&&(v=[v]);for(l=0;l<d;l++)E.push(0);for(m=0;m<c;m++)F.push(0);for(m=0;m<c;m++)for(l=0;l<d&&(k=e[m*d+l],k);l++)j=k.layoutRect(),y=j.minW,z=j.minH,E[l]=y>E[l]?y:E[l],F[m]=z>F[m]?z:F[m];for(A=f.innerW-q.left-q.right,w=0,l=0;l<d;l++)w+=E[l]+(l>0?s:0),A-=(l>0?s:0)+E[l];for(B=f.innerH-q.top-q.bottom,x=0,m=0;m<c;m++)x+=F[m]+(m>0?t:0),B-=(m>0?t:0)+F[m];if(w+=q.left+q.right,x+=q.top+q.bottom,i={},i.minW=w+(f.w-f.innerW),i.minH=x+(f.h-f.innerH),i.contentW=i.minW-f.deltaW,i.contentH=i.minH-f.deltaH,i.minW=Math.min(i.minW,f.maxW),i.minH=Math.min(i.minH,f.maxH),i.minW=Math.max(i.minW,f.startMinWidth),i.minH=Math.max(i.minH,f.startMinHeight),!f.autoResize||i.minW==f.minW&&i.minH==f.minH){f.autoResize&&(i=a.layoutRect(i),i.contentW=i.minW-f.deltaW,i.contentH=i.minH-f.deltaH);var G;G="start"==b.packV?0:B>0?Math.floor(B/c):0;var H=0,I=b.flexWidths;if(I)for(l=0;l<I.length;l++)H+=I[l];else H=d;var J=A/H;for(l=0;l<d;l++)E[l]+=I?I[l]*J:J;for(o=q.top,m=0;m<c;m++){for(n=q.left,h=F[m]+G,l=0;l<d&&(D=C?m*d+d-1-l:m*d+l,k=e[D],k);l++)p=k.settings,j=k.layoutRect(),g=Math.max(E[l],j.startMinWidth),j.x=n,j.y=o,r=p.alignH||(u?u[l]||u[0]:null),"center"==r?j.x=n+g/2-j.w/2:"right"==r?j.x=n+g-j.w:"stretch"==r&&(j.w=g),r=p.alignV||(v?v[l]||v[0]:null),"center"==r?j.y=o+h/2-j.h/2:"bottom"==r?j.y=o+h-j.h:"stretch"==r&&(j.h=h),k.layoutRect(j),n+=g+s,k.recalc&&k.recalc();o+=h+t}}else if(i.w=i.minW,i.h=i.minH,a.layoutRect(i),this.recalc(a),null===a._lastRect){var K=a.parent();K&&(K._lastRect=null,K.recalc())}}})}),g("tinymce.core.ui.Iframe",["tinymce.core.ui.Widget","tinymce.core.util.Delay"],function(a,b){"use strict";return a.extend({renderHtml:function(){var a=this;return a.classes.add("iframe"),a.canFocus=!1,'<iframe id="'+a._id+'" class="'+a.classes+'" tabindex="-1" src="'+(a.settings.url||"javascript:''")+'" frameborder="0"></iframe>'},src:function(a){this.getEl().src=a},html:function(a,c){
-var d=this,e=this.getEl().contentWindow.document.body;return e?(e.innerHTML=a,c&&c()):b.setTimeout(function(){d.html(a)}),this}})}),g("tinymce.core.ui.InfoBox",["tinymce.core.ui.Widget"],function(a){"use strict";return a.extend({init:function(a){var b=this;b._super(a),b.classes.add("widget").add("infobox"),b.canFocus=!1},severity:function(a){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(a)},help:function(a){this.state.set("help",a)},renderHtml:function(){var a=this,b=a.classPrefix;return'<div id="'+a._id+'" class="'+a.classes+'"><div id="'+a._id+'-body">'+a.encode(a.state.get("text"))+'<button role="button" tabindex="-1"><i class="'+b+"ico "+b+'i-help"></i></button></div></div>'},bindStates:function(){var a=this;return a.state.on("change:text",function(b){a.getEl("body").firstChild.data=a.encode(b.value),a.state.get("rendered")&&a.updateLayoutRect()}),a.state.on("change:help",function(b){a.classes.toggle("has-help",b.value),a.state.get("rendered")&&a.updateLayoutRect()}),a._super()}})}),g("tinymce.core.ui.Label",["tinymce.core.ui.Widget","tinymce.core.ui.DomUtils"],function(a,b){"use strict";return a.extend({init:function(a){var b=this;b._super(a),b.classes.add("widget").add("label"),b.canFocus=!1,a.multiline&&b.classes.add("autoscroll"),a.strong&&b.classes.add("strong")},initLayoutRect:function(){var a=this,c=a._super();if(a.settings.multiline){var d=b.getSize(a.getEl());d.width>c.maxW&&(c.minW=c.maxW,a.classes.add("multiline")),a.getEl().style.width=c.minW+"px",c.startMinH=c.h=c.minH=Math.min(c.maxH,b.getSize(a.getEl()).height)}return c},repaint:function(){var a=this;return a.settings.multiline||(a.getEl().style.lineHeight=a.layoutRect().h+"px"),a._super()},severity:function(a){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(a)},renderHtml:function(){var a,b,c=this,d=c.settings.forId,e=c.settings.html?c.settings.html:c.encode(c.state.get("text"));return!d&&(b=c.settings.forName)&&(a=c.getRoot().find("#"+b)[0],a&&(d=a._id)),d?'<label id="'+c._id+'" class="'+c.classes+'"'+(d?' for="'+d+'"':"")+">"+e+"</label>":'<span id="'+c._id+'" class="'+c.classes+'">'+e+"</span>"},bindStates:function(){var a=this;return a.state.on("change:text",function(b){a.innerHtml(a.encode(b.value)),a.state.get("rendered")&&a.updateLayoutRect()}),a._super()}})}),g("tinymce.core.ui.Toolbar",["tinymce.core.ui.Container"],function(a){"use strict";return a.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(a){var b=this;b._super(a),b.classes.add("toolbar")},postRender:function(){var a=this;return a.items().each(function(a){a.classes.add("toolbar-item")}),a._super()}})}),g("tinymce.core.ui.MenuBar",["tinymce.core.ui.Toolbar"],function(a){"use strict";return a.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),g("tinymce.core.ui.MenuButton",["tinymce.core.ui.Button","tinymce.core.ui.Factory","tinymce.core.ui.MenuBar"],function(a,b,c){"use strict";function d(a,b){for(;a;){if(b===a)return!0;a=a.parentNode}return!1}var e=a.extend({init:function(a){var b=this;b._renderOpen=!0,b._super(a),a=b.settings,b.classes.add("menubtn"),a.fixedWidth&&b.classes.add("fixed-width"),b.aria("haspopup",!0),b.state.set("menu",a.menu||b.render())},showMenu:function(a){var c,d=this;return d.menu&&d.menu.visible()&&a!==!1?d.hideMenu():(d.menu||(c=d.state.get("menu")||[],c.length?c={type:"menu",items:c}:c.type=c.type||"menu",c.renderTo?d.menu=c.parent(d).show().renderTo():d.menu=b.create(c).parent(d).renderTo(),d.fire("createmenu"),d.menu.reflow(),d.menu.on("cancel",function(a){a.control.parent()===d.menu&&(a.stopPropagation(),d.focus(),d.hideMenu())}),d.menu.on("select",function(){d.focus()}),d.menu.on("show hide",function(a){a.control==d.menu&&d.activeMenu("show"==a.type),d.aria("expanded","show"==a.type)}).fire("show")),d.menu.show(),d.menu.layoutRect({w:d.layoutRect().w}),d.menu.moveRel(d.getEl(),d.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]),void d.fire("showmenu"))},hideMenu:function(){var a=this;a.menu&&(a.menu.items().each(function(a){a.hideMenu&&a.hideMenu()}),a.menu.hide())},activeMenu:function(a){this.classes.toggle("active",a)},renderHtml:function(){var a,b=this,d=b._id,e=b.classPrefix,f=b.settings.icon,g=b.state.get("text"),h="";return a=b.settings.image,a?(f="none","string"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=" style=\"background-image: url('"+a+"')\""):a="",g&&(b.classes.add("btn-has-text"),h='<span class="'+e+'txt">'+b.encode(g)+"</span>"),f=b.settings.icon?e+"ico "+e+"i-"+f:"",b.aria("role",b.parent()instanceof c?"menuitem":"button"),'<div id="'+d+'" class="'+b.classes+'" tabindex="-1" aria-labelledby="'+d+'"><button id="'+d+'-open" role="presentation" type="button" tabindex="-1">'+(f?'<i class="'+f+'"'+a+"></i>":"")+h+' <i class="'+e+'caret"></i></button></div>'},postRender:function(){var a=this;return a.on("click",function(b){b.control===a&&d(b.target,a.getEl())&&(a.focus(),a.showMenu(!b.aria),b.aria&&a.menu.items().filter(":visible")[0].focus())}),a.on("mouseenter",function(b){var c,d=b.control,f=a.parent();d&&f&&d instanceof e&&d.parent()==f&&(f.items().filter("MenuButton").each(function(a){a.hideMenu&&a!=d&&(a.menu&&a.menu.visible()&&(c=!0),a.hideMenu())}),c&&(d.focus(),d.showMenu()))}),a._super()},bindStates:function(){var a=this;return a.state.on("change:menu",function(){a.menu&&a.menu.remove(),a.menu=null}),a._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}});return e}),g("tinymce.core.ui.MenuItem",["tinymce.core.ui.Widget","tinymce.core.ui.Factory","tinymce.core.Env","tinymce.core.util.Delay"],function(a,b,c,d){"use strict";return a.extend({Defaults:{border:0,role:"menuitem"},init:function(a){var b,c=this;c._super(a),a=c.settings,c.classes.add("menu-item"),a.menu&&c.classes.add("menu-item-expand"),a.preview&&c.classes.add("menu-item-preview"),b=c.state.get("text"),"-"!==b&&"|"!==b||(c.classes.add("menu-item-sep"),c.aria("role","separator"),c.state.set("text","-")),a.selectable&&(c.aria("role","menuitemcheckbox"),c.classes.add("menu-item-checkbox"),a.icon="selected"),a.preview||a.selectable||c.classes.add("menu-item-normal"),c.on("mousedown",function(a){a.preventDefault()}),a.menu&&!a.ariaHideMenu&&c.aria("haspopup",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var a,c=this,d=c.settings,e=c.parent();if(e.items().each(function(a){a!==c&&a.hideMenu()}),d.menu){a=c.menu,a?a.show():(a=d.menu,a.length?a={type:"menu",items:a}:a.type=a.type||"menu",e.settings.itemDefaults&&(a.itemDefaults=e.settings.itemDefaults),a=c.menu=b.create(a).parent(c).renderTo(),a.reflow(),a.on("cancel",function(b){b.stopPropagation(),c.focus(),a.hide()}),a.on("show hide",function(a){a.control.items&&a.control.items().each(function(a){a.active(a.settings.selected)})}).fire("show"),a.on("hide",function(b){b.control===a&&c.classes.remove("selected")}),a.submenu=!0),a._parentMenu=e,a.classes.add("menu-sub");var f=a.testMoveRel(c.getEl(),c.isRtl()?["tl-tr","bl-br","tr-tl","br-bl"]:["tr-tl","br-bl","tl-tr","bl-br"]);a.moveRel(c.getEl(),f),a.rel=f,f="menu-sub-"+f,a.classes.remove(a._lastRel).add(f),a._lastRel=f,c.classes.add("selected"),c.aria("expanded",!0)}},hideMenu:function(){var a=this;return a.menu&&(a.menu.items().each(function(a){a.hideMenu&&a.hideMenu()}),a.menu.hide(),a.aria("expanded",!1)),a},renderHtml:function(){function a(a){var b,d,e={};for(e=c.mac?{alt:"⌥",ctrl:"⌘",shift:"⇧",meta:"⌘"}:{meta:"Ctrl"},a=a.split("+"),b=0;b<a.length;b++)d=e[a[b].toLowerCase()],d&&(a[b]=d);return a.join("+")}function b(a){return a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function d(a){var c=h.match||"";return c?a.replace(new RegExp(b(c),"gi"),function(a){return"!mce~match["+a+"]mce~match!"}):a}function e(a){return a.replace(new RegExp(b("!mce~match["),"g"),"<b>").replace(new RegExp(b("]mce~match!"),"g"),"</b>")}var f=this,g=f._id,h=f.settings,i=f.classPrefix,j=f.state.get("text"),k=f.settings.icon,l="",m=h.shortcut,n=f.encode(h.url),o="";return k&&f.parent().classes.add("menu-has-icons"),h.image&&(l=" style=\"background-image: url('"+h.image+"')\""),m&&(m=a(m)),k=i+"ico "+i+"i-"+(f.settings.icon||"none"),o="-"!==j?'<i class="'+k+'"'+l+"></i>\xa0":"",j=e(f.encode(d(j))),n=e(f.encode(d(n))),'<div id="'+g+'" class="'+f.classes+'" tabindex="-1">'+o+("-"!==j?'<span id="'+g+'-text" class="'+i+'text">'+j+"</span>":"")+(m?'<div id="'+g+'-shortcut" class="'+i+'menu-shortcut">'+m+"</div>":"")+(h.menu?'<div class="'+i+'caret"></div>':"")+(n?'<div class="'+i+'menu-item-link">'+n+"</div>":"")+"</div>"},postRender:function(){var a=this,b=a.settings,c=b.textStyle;if("function"==typeof c&&(c=c.call(this)),c){var e=a.getEl("text");e&&e.setAttribute("style",c)}return a.on("mouseenter click",function(c){c.control===a&&(b.menu||"click"!==c.type?(a.showMenu(),c.aria&&a.menu.focus(!0)):(a.fire("select"),d.requestAnimationFrame(function(){a.parent().hideAll()})))}),a._super(),a},hover:function(){var a=this;return a.parent().items().each(function(a){a.classes.remove("selected")}),a.classes.toggle("selected",!0),a},active:function(a){return"undefined"!=typeof a&&this.aria("checked",a),this._super(a)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),g("tinymce.core.ui.Throbber",["tinymce.core.dom.DomQuery","tinymce.core.ui.Control","tinymce.core.util.Delay"],function(a,b,c){"use strict";return function(d,e){var f,g,h=this,i=b.classPrefix;h.show=function(b,j){function k(){f&&(a(d).append('<div class="'+i+"throbber"+(e?" "+i+"throbber-inline":"")+'"></div>'),j&&j())}return h.hide(),f=!0,b?g=c.setTimeout(k,b):k(),h},h.hide=function(){var a=d.lastChild;return c.clearTimeout(g),a&&a.className.indexOf("throbber")!=-1&&a.parentNode.removeChild(a),f=!1,h}}}),g("tinymce.core.ui.Menu",["tinymce.core.ui.FloatPanel","tinymce.core.ui.MenuItem","tinymce.core.ui.Throbber","tinymce.core.util.Tools"],function(a,b,c,d){"use strict";return a.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(a){var b=this;if(a.autohide=!0,a.constrainToViewport=!0,"function"==typeof a.items&&(a.itemsFactory=a.items,a.items=[]),a.itemDefaults)for(var c=a.items,e=c.length;e--;)c[e]=d.extend({},a.itemDefaults,c[e]);b._super(a),b.classes.add("menu")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var a=this;a.hideAll(),a.fire("select")},load:function(){function a(){e.throbber&&(e.throbber.hide(),e.throbber=null)}var b,d,e=this;d=e.settings.itemsFactory,d&&(e.throbber||(e.throbber=new c(e.getEl("body"),!0),0===e.items().length?(e.throbber.show(),e.fire("loading")):e.throbber.show(100,function(){e.items().remove(),e.fire("loading")}),e.on("hide close",a)),e.requestTime=b=(new Date).getTime(),e.settings.itemsFactory(function(c){return 0===c.length?void e.hide():void(e.requestTime===b&&(e.getEl().style.width="",e.getEl("body").style.width="",a(),e.items().remove(),e.getEl("body").innerHTML="",e.add(c),e.renderNew(),e.fire("loaded")))}))},hideAll:function(){var a=this;return this.find("menuitem").exec("hideMenu"),a._super()},preRender:function(){var a=this;return a.items().each(function(b){var c=b.settings;if(c.icon||c.image||c.selectable)return a._hasIcons=!0,!1}),a.settings.itemsFactory&&a.on("postrender",function(){a.settings.itemsFactory&&a.load()}),a._super()}})}),g("tinymce.core.ui.ListBox",["tinymce.core.ui.MenuButton","tinymce.core.ui.Menu"],function(a,b){"use strict";return a.extend({init:function(a){function b(c){for(var f=0;f<c.length;f++){if(d=c[f].selected||a.value===c[f].value)return e=e||c[f].text,g.state.set("value",c[f].value),!0;if(c[f].menu&&b(c[f].menu))return!0}}var c,d,e,f,g=this;g._super(a),a=g.settings,g._values=c=a.values,c&&("undefined"!=typeof a.value&&b(c),!d&&c.length>0&&(e=c[0].text,g.state.set("value",c[0].value)),g.state.set("menu",c)),g.state.set("text",a.text||e),g.classes.add("listbox"),g.on("select",function(b){var c=b.control;f&&(b.lastControl=f),a.multiple?c.active(!c.active()):g.value(b.control.value()),f=c})},bindStates:function(){function a(a,c){a instanceof b&&a.items().each(function(a){a.hasMenus()||a.active(a.value()===c)})}function c(a,b){var d;if(a)for(var e=0;e<a.length;e++){if(a[e].value===b)return a[e];if(a[e].menu&&(d=c(a[e].menu,b)))return d}}var d=this;return d.on("show",function(b){a(b.control,d.value())}),d.state.on("change:value",function(a){var b=c(d.state.get("menu"),a.value);b?d.text(b.text):d.text(d.settings.text)}),d._super()}})}),g("tinymce.core.ui.Radio",["tinymce.core.ui.Checkbox"],function(a){"use strict";return a.extend({Defaults:{classes:"radio",role:"radio"}})}),g("tinymce.core.ui.ResizeHandle",["tinymce.core.ui.Widget","tinymce.core.ui.DragHelper"],function(a,b){"use strict";return a.extend({renderHtml:function(){var a=this,b=a.classPrefix;return a.classes.add("resizehandle"),"both"==a.settings.direction&&a.classes.add("resizehandle-both"),a.canFocus=!1,'<div id="'+a._id+'" class="'+a.classes+'"><i class="'+b+"ico "+b+'i-resize"></i></div>'},postRender:function(){var a=this;a._super(),a.resizeDragHelper=new b(this._id,{start:function(){a.fire("ResizeStart")},drag:function(b){"both"!=a.settings.direction&&(b.deltaX=0),a.fire("Resize",b)},stop:function(){a.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),g("tinymce.core.ui.SelectBox",["tinymce.core.ui.Widget"],function(a){"use strict";function b(a){var b="";if(a)for(var c=0;c<a.length;c++)b+='<option value="'+a[c]+'">'+a[c]+"</option>";return b}return a.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(a){var b=this;b._super(a),b.settings.size&&(b.size=b.settings.size),b.settings.options&&(b._options=b.settings.options),b.on("keydown",function(a){var c;13==a.keyCode&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire("submit",{data:c.toJSON()}))})},options:function(a){return arguments.length?(this.state.set("options",a),this):this.state.get("options")},renderHtml:function(){var a,c=this,d="";return a=b(c._options),c.size&&(d=' size = "'+c.size+'"'),'<select id="'+c._id+'" class="'+c.classes+'"'+d+">"+a+"</select>"},bindStates:function(){var a=this;return a.state.on("change:options",function(c){a.getEl().innerHTML=b(c.value)}),a._super()}})}),g("tinymce.core.ui.Slider",["tinymce.core.ui.Widget","tinymce.core.ui.DragHelper","tinymce.core.ui.DomUtils"],function(a,b,c){"use strict";function d(a,b,c){return a<b&&(a=b),a>c&&(a=c),a}function e(a,b,c){a.setAttribute("aria-"+b,c)}function f(a,b){var d,f,g,h,i,j;"v"==a.settings.orientation?(h="top",g="height",f="h"):(h="left",g="width",f="w"),j=a.getEl("handle"),d=(a.layoutRect()[f]||100)-c.getSize(j)[g],i=d*((b-a._minValue)/(a._maxValue-a._minValue))+"px",j.style[h]=i,j.style.height=a.layoutRect().h+"px",e(j,"valuenow",b),e(j,"valuetext",""+a.settings.previewFilter(b)),e(j,"valuemin",a._minValue),e(j,"valuemax",a._maxValue)}return a.extend({init:function(a){var b=this;a.previewFilter||(a.previewFilter=function(a){return Math.round(100*a)/100}),b._super(a),b.classes.add("slider"),"v"==a.orientation&&b.classes.add("vertical"),b._minValue=a.minValue||0,b._maxValue=a.maxValue||100,b._initValue=b.state.get("value")},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix;return'<div id="'+b+'" class="'+a.classes+'"><div id="'+b+'-handle" class="'+c+'slider-handle" role="slider" tabindex="-1"></div></div>'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){function a(a,b,c){return(c+a)/(b-a)}function e(a,b,c){return c*(b-a)-a}function f(b,c){function f(f){var g;g=n.value(),g=e(b,c,a(b,c,g)+.05*f),g=d(g,b,c),n.value(g),n.fire("dragstart",{value:g}),n.fire("drag",{value:g}),n.fire("dragend",{value:g})}n.on("keydown",function(a){switch(a.keyCode){case 37:case 38:f(-1);break;case 39:case 40:f(1)}})}function g(a,e,f){var g,h,i,o,p;n._dragHelper=new b(n._id,{handle:n._id+"-handle",start:function(a){g=a[j],h=parseInt(n.getEl("handle").style[k],10),i=(n.layoutRect()[m]||100)-c.getSize(f)[l],n.fire("dragstart",{value:p})},drag:function(b){var c=b[j]-g;o=d(h+c,0,i),f.style[k]=o+"px",p=a+o/i*(e-a),n.value(p),n.tooltip().text(""+n.settings.previewFilter(p)).show().moveRel(f,"bc tc"),n.fire("drag",{value:p})},stop:function(){n.tooltip().hide(),n.fire("dragend",{value:p})}})}var h,i,j,k,l,m,n=this;h=n._minValue,i=n._maxValue,"v"==n.settings.orientation?(j="screenY",k="top",l="height",m="h"):(j="screenX",k="left",l="width",m="w"),n._super(),f(h,i,n.getEl("handle")),g(h,i,n.getEl("handle"))},repaint:function(){this._super(),f(this,this.value())},bindStates:function(){var a=this;return a.state.on("change:value",function(b){f(a,b.value)}),a._super()}})}),g("tinymce.core.ui.Spacer",["tinymce.core.ui.Widget"],function(a){"use strict";return a.extend({renderHtml:function(){var a=this;return a.classes.add("spacer"),a.canFocus=!1,'<div id="'+a._id+'" class="'+a.classes+'"></div>'}})}),g("tinymce.core.ui.SplitButton",["tinymce.core.ui.MenuButton","tinymce.core.ui.DomUtils","tinymce.core.dom.DomQuery"],function(a,b,c){return a.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var a,d,e=this,f=e.getEl(),g=e.layoutRect();return e._super(),a=f.firstChild,d=f.lastChild,c(a).css({width:g.w-b.getSize(d).width,height:g.h-2}),c(d).css({height:g.h-2}),e},activeMenu:function(a){var b=this;c(b.getEl().lastChild).toggleClass(b.classPrefix+"active",a)},renderHtml:function(){var a,b=this,c=b._id,d=b.classPrefix,e=b.state.get("icon"),f=b.state.get("text"),g="";return a=b.settings.image,a?(e="none","string"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=" style=\"background-image: url('"+a+"')\""):a="",e=b.settings.icon?d+"ico "+d+"i-"+e:"",f&&(b.classes.add("btn-has-text"),g='<span class="'+d+'txt">'+b.encode(f)+"</span>"),'<div id="'+c+'" class="'+b.classes+'" role="button" tabindex="-1"><button type="button" hidefocus="1" tabindex="-1">'+(e?'<i class="'+e+'"'+a+"></i>":"")+g+'</button><button type="button" class="'+d+'open" hidefocus="1" tabindex="-1">'+(b._menuBtnText?(e?"\xa0":"")+b._menuBtnText:"")+' <i class="'+d+'caret"></i></button></div>'},postRender:function(){var a=this,b=a.settings.onclick;return a.on("click",function(a){var c=a.target;if(a.control==this)for(;c;){if(a.aria&&"down"!=a.aria.key||"BUTTON"==c.nodeName&&c.className.indexOf("open")==-1)return a.stopImmediatePropagation(),void(b&&b.call(this,a));c=c.parentNode}}),delete a.settings.onclick,a._super()}})}),g("tinymce.core.ui.StackLayout",["tinymce.core.ui.FlowLayout"],function(a){"use strict";return a.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}})}),g("tinymce.core.ui.TabPanel",["tinymce.core.ui.Panel","tinymce.core.dom.DomQuery","tinymce.core.ui.DomUtils"],function(a,b,c){"use strict";return a.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(a){var c;this.activeTabId&&(c=this.getEl(this.activeTabId),b(c).removeClass(this.classPrefix+"active"),c.setAttribute("aria-selected","false")),this.activeTabId="t"+a,c=this.getEl("t"+a),c.setAttribute("aria-selected","true"),b(c).addClass(this.classPrefix+"active"),this.items()[a].show().fire("showtab"),this.reflow(),this.items().each(function(b,c){a!=c&&b.hide()})},renderHtml:function(){var a=this,b=a._layout,c="",d=a.classPrefix;return a.preRender(),b.preRender(a),a.items().each(function(b,e){var f=a._id+"-t"+e;b.aria("role","tabpanel"),b.aria("labelledby",f),c+='<div id="'+f+'" class="'+d+'tab" unselectable="on" role="tab" aria-controls="'+b._id+'" aria-selected="false" tabIndex="-1">'+a.encode(b.settings.title)+"</div>"}),'<div id="'+a._id+'" class="'+a.classes+'" hidefocus="1" tabindex="-1"><div id="'+a._id+'-head" class="'+d+'tabs" role="tablist">'+c+'</div><div id="'+a._id+'-body" class="'+a.bodyClasses+'">'+b.renderHtml(a)+"</div></div>"},postRender:function(){var a=this;a._super(),a.settings.activeTab=a.settings.activeTab||0,a.activateTab(a.settings.activeTab),this.on("click",function(b){var c=b.target.parentNode;if(c&&c.id==a._id+"-head")for(var d=c.childNodes.length;d--;)c.childNodes[d]==b.target&&a.activateTab(d)})},initLayoutRect:function(){var a,b,d,e=this;b=c.getSize(e.getEl("head")).width,b=b<0?0:b,d=0,e.items().each(function(a){b=Math.max(b,a.layoutRect().minW),d=Math.max(d,a.layoutRect().minH)}),e.items().each(function(a){a.settings.x=0,a.settings.y=0,a.settings.w=b,a.settings.h=d,a.layoutRect({x:0,y:0,w:b,h:d})});var f=c.getSize(e.getEl("head")).height;return e.settings.minWidth=b,e.settings.minHeight=d+f,a=e._super(),a.deltaH+=f,a.innerH=a.h-a.deltaH,a}})}),g("tinymce.core.ui.TextBox",["tinymce.core.ui.Widget","tinymce.core.util.Tools","tinymce.core.ui.DomUtils"],function(a,b,c){return a.extend({init:function(a){var b=this;b._super(a),b.classes.add("textbox"),a.multiline?b.classes.add("multiline"):(b.on("keydown",function(a){var c;13==a.keyCode&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire("submit",{data:c.toJSON()}))}),b.on("keyup",function(a){b.state.set("value",a.target.value)}))},repaint:function(){var a,b,c,d,e,f=this,g=0;a=f.getEl().style,b=f._layoutRect,e=f._lastRepaintRect||{};var h=document;return!f.settings.multiline&&h.all&&(!h.documentMode||h.documentMode<=8)&&(a.lineHeight=b.h-g+"px"),c=f.borderBox,d=c.left+c.right+8,g=c.top+c.bottom+(f.settings.multiline?8:0),b.x!==e.x&&(a.left=b.x+"px",e.x=b.x),b.y!==e.y&&(a.top=b.y+"px",e.y=b.y),b.w!==e.w&&(a.width=b.w-d+"px",e.w=b.w),b.h!==e.h&&(a.height=b.h-g+"px",e.h=b.h),f._lastRepaintRect=e,f.fire("repaint",{},!1),f},renderHtml:function(){var a,d,e=this,f=e.settings;return a={id:e._id,hidefocus:"1"},b.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(b){a[b]=f[b]}),e.disabled()&&(a.disabled="disabled"),f.subtype&&(a.type=f.subtype),d=c.create(f.multiline?"textarea":"input",a),d.value=e.state.get("value"),d.className=e.classes,d.outerHTML},value:function(a){return arguments.length?(this.state.set("value",a),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var a=this;a.getEl().value=a.state.get("value"),a._super(),a.$el.on("change",function(b){a.state.set("value",b.target.value),a.fire("change",b)})},bindStates:function(){var a=this;return a.state.on("change:value",function(b){a.getEl().value!=b.value&&(a.getEl().value=b.value)}),a.state.on("change:disabled",function(b){a.getEl().disabled=b.value}),a._super()},remove:function(){this.$el.off(),this._super()}})}),h("global!RegExp",RegExp),g("tinymce.core.ui.DropZone",["tinymce.core.ui.Widget","tinymce.core.util.Tools","tinymce.core.ui.DomUtils","global!RegExp"],function(a,b,c,d){return a.extend({init:function(a){var c=this;a=b.extend({height:100,text:"Drop an image here",multiple:!1,accept:null},a),c._super(a),c.classes.add("dropzone"),a.multiple&&c.classes.add("multiple")},renderHtml:function(){var a,b,d=this,e=d.settings;return a={id:d._id,hidefocus:"1"},b=c.create("div",a,"<span>"+this.translate(e.text)+"</span>"),e.height&&c.css(b,"height",e.height+"px"),e.width&&c.css(b,"width",e.width+"px"),b.className=d.classes,b.outerHTML},postRender:function(){var a=this,c=function(b){b.preventDefault(),a.classes.toggle("dragenter"),a.getEl().className=a.classes},e=function(c){var e=a.settings.accept;if("string"!=typeof e)return c;var f=new d("("+e.split(/\s*,\s*/).join("|")+")$","i");return b.grep(c,function(a){return f.test(a.name)})};a._super(),a.$el.on("dragover",function(a){a.preventDefault()}),a.$el.on("dragenter",c),a.$el.on("dragleave",c),a.$el.on("drop",function(b){if(b.preventDefault(),!a.state.get("disabled")){var c=e(b.dataTransfer.files);a.value=function(){return c.length?a.settings.multiple?c:c[0]:null},c.length&&a.fire("change",b)}})},remove:function(){this.$el.off(),this._super()}})}),g("tinymce.core.ui.BrowseButton",["tinymce.core.ui.Button","tinymce.core.util.Tools","tinymce.core.ui.DomUtils","tinymce.core.dom.DomQuery","global!RegExp"],function(a,b,c,d,e){return a.extend({init:function(a){var c=this;a=b.extend({text:"Browse...",multiple:!1,accept:null},a),c._super(a),c.classes.add("browsebutton"),a.multiple&&c.classes.add("multiple")},postRender:function(){var a=this,b=c.create("input",{type:"file",id:a._id+"-browse",accept:a.settings.accept});a._super(),d(b).on("change",function(b){var c=b.target.files;a.value=function(){return c.length?a.settings.multiple?c:c[0]:null},b.preventDefault(),c.length&&a.fire("change",b)}),d(b).on("click",function(a){a.stopPropagation()}),d(a.getEl("button")).on("click",function(a){a.stopPropagation(),b.click()}),a.getEl().appendChild(b)},remove:function(){d(this.getEl("button")).off(),d(this.getEl("input")).off(),this._super()}})}),g("tinymce.core.ui.Api",["tinymce.core.ui.Selector","tinymce.core.ui.Collection","tinymce.core.ui.ReflowQueue","tinymce.core.ui.Control","tinymce.core.ui.Factory","tinymce.core.ui.KeyboardNavigation","tinymce.core.ui.Container","tinymce.core.ui.DragHelper","tinymce.core.ui.Scrollable","tinymce.core.ui.Panel","tinymce.core.ui.Movable","tinymce.core.ui.Resizable","tinymce.core.ui.FloatPanel","tinymce.core.ui.Window","tinymce.core.ui.MessageBox","tinymce.core.ui.Tooltip","tinymce.core.ui.Widget","tinymce.core.ui.Progress","tinymce.core.ui.Notification","tinymce.core.ui.Layout","tinymce.core.ui.AbsoluteLayout","tinymce.core.ui.Button","tinymce.core.ui.ButtonGroup","tinymce.core.ui.Checkbox","tinymce.core.ui.ComboBox","tinymce.core.ui.ColorBox","tinymce.core.ui.PanelButton","tinymce.core.ui.ColorButton","tinymce.core.ui.ColorPicker","tinymce.core.ui.Path","tinymce.core.ui.ElementPath","tinymce.core.ui.FormItem","tinymce.core.ui.Form","tinymce.core.ui.FieldSet","tinymce.core.ui.FilePicker","tinymce.core.ui.FitLayout","tinymce.core.ui.FlexLayout","tinymce.core.ui.FlowLayout","tinymce.core.ui.FormatControls","tinymce.core.ui.GridLayout","tinymce.core.ui.Iframe","tinymce.core.ui.InfoBox","tinymce.core.ui.Label","tinymce.core.ui.Toolbar","tinymce.core.ui.MenuBar","tinymce.core.ui.MenuButton","tinymce.core.ui.MenuItem","tinymce.core.ui.Throbber","tinymce.core.ui.Menu","tinymce.core.ui.ListBox","tinymce.core.ui.Radio","tinymce.core.ui.ResizeHandle","tinymce.core.ui.SelectBox","tinymce.core.ui.Slider","tinymce.core.ui.Spacer","tinymce.core.ui.SplitButton","tinymce.core.ui.StackLayout","tinymce.core.ui.TabPanel","tinymce.core.ui.TextBox","tinymce.core.ui.DropZone","tinymce.core.ui.BrowseButton"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca,da,ea,fa,ga){"use strict";var ha=function(a,b){e.add(a.split(".").pop(),b)},ia=function(a,b,c){var d,e;for(e=b.split(/[.\/]/),d=0;d<e.length-1;++d)void 0===a[e[d]]&&(a[e[d]]={}),a=a[e[d]];a[e[e.length-1]]=c,ha(b,c)},ja=function(ha){ia(ha,"ui.Selector",a),ia(ha,"ui.Collection",b),ia(ha,"ui.ReflowQueue",c),ia(ha,"ui.Control",d),ia(ha,"ui.Factory",e),ia(ha,"ui.KeyboardNavigation",f),ia(ha,"ui.Container",g),ia(ha,"ui.DragHelper",h),ia(ha,"ui.Scrollable",i),ia(ha,"ui.Panel",j),ia(ha,"ui.Movable",k),ia(ha,"ui.Resizable",l),ia(ha,"ui.FloatPanel",m),ia(ha,"ui.Window",n),ia(ha,"ui.MessageBox",o),ia(ha,"ui.Tooltip",p),ia(ha,"ui.Widget",q),ia(ha,"ui.Progress",r),ia(ha,"ui.Notification",s),ia(ha,"ui.Layout",t),ia(ha,"ui.AbsoluteLayout",u),ia(ha,"ui.Button",v),ia(ha,"ui.ButtonGroup",w),ia(ha,"ui.Checkbox",x),ia(ha,"ui.ComboBox",y),ia(ha,"ui.ColorBox",z),ia(ha,"ui.PanelButton",A),ia(ha,"ui.ColorButton",B),ia(ha,"ui.ColorPicker",C),ia(ha,"ui.Path",D),ia(ha,"ui.ElementPath",E),ia(ha,"ui.FormItem",F),ia(ha,"ui.Form",G),ia(ha,"ui.FieldSet",H),ia(ha,"ui.FilePicker",I),ia(ha,"ui.FitLayout",J),ia(ha,"ui.FlexLayout",K),ia(ha,"ui.FlowLayout",L),ia(ha,"ui.FormatControls",M),ia(ha,"ui.GridLayout",N),ia(ha,"ui.Iframe",O),ia(ha,"ui.InfoBox",P),ia(ha,"ui.Label",Q),ia(ha,"ui.Toolbar",R),ia(ha,"ui.MenuBar",S),ia(ha,"ui.MenuButton",T),ia(ha,"ui.MenuItem",U),ia(ha,"ui.Throbber",V),ia(ha,"ui.Menu",W),ia(ha,"ui.ListBox",X),ia(ha,"ui.Radio",Y),ia(ha,"ui.ResizeHandle",Z),ia(ha,"ui.SelectBox",$),ia(ha,"ui.Slider",_),ia(ha,"ui.Spacer",aa),ia(ha,"ui.SplitButton",ba),ia(ha,"ui.StackLayout",ca),ia(ha,"ui.TabPanel",da),ia(ha,"ui.TextBox",ea),ia(ha,"ui.DropZone",fa),ia(ha,"ui.BrowseButton",ga),ia(ha,"ui.Api",ka)},ka={appendTo:ja};return ka}),g("tinymce.core.util.JSON",[],function(){function a(b,c){var d,e,f,g;if(c=c||'"',null===b)return"null";if(f=typeof b,"string"==f)return e="\bb\tt\nn\ff\rr\"\"''\\\\",c+b.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){return'"'===c&&"'"===a?a:(d=e.indexOf(b),d+1?"\\"+e.charAt(d+1):(a=b.charCodeAt().toString(16),"\\u"+"0000".substring(a.length)+a))})+c;if("object"==f){if(b.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(b)){for(d=0,e="[";d<b.length;d++)e+=(d>0?",":"")+a(b[d],c);return e+"]"}e="{";for(g in b)b.hasOwnProperty(g)&&(e+="function"!=typeof b[g]?(e.length>1?","+c:c)+g+c+":"+a(b[g],c):"");return e+"}"}return""+b}return{serialize:a,parse:function(a){try{return window[String.fromCharCode(101)+"val"]("("+a+")")}catch(b){}}}}),g("tinymce.core.util.JSONP",["tinymce.core.dom.DOMUtils"],function(a){return{callbacks:{},count:0,send:function(b){var c=this,d=a.DOM,e=void 0!==b.count?b.count:c.count,f="tinymce_jsonp_"+e;c.callbacks[e]=function(a){d.remove(f),delete c.callbacks[e],b.callback(a)},d.add(d.doc.body,"script",{id:f,src:b.url,type:"text/javascript"}),c.count++}}}),g("tinymce.core.util.XHR",["tinymce.core.util.Observable","tinymce.core.util.Tools"],function(a,b){var c={send:function(a){function d(){!a.async||4==e.readyState||f++>1e4?(a.success&&f<1e4&&200==e.status?a.success.call(a.success_scope,""+e.responseText,e,a):a.error&&a.error.call(a.error_scope,f>1e4?"TIMED_OUT":"GENERAL",e,a),e=null):setTimeout(d,10)}var e,f=0;if(a.scope=a.scope||this,a.success_scope=a.success_scope||a.scope,a.error_scope=a.error_scope||a.scope,a.async=a.async!==!1,a.data=a.data||"",c.fire("beforeInitialize",{settings:a}),e=new XMLHttpRequest){if(e.overrideMimeType&&e.overrideMimeType(a.content_type),e.open(a.type||(a.data?"POST":"GET"),a.url,a.async),a.crossDomain&&(e.withCredentials=!0),a.content_type&&e.setRequestHeader("Content-Type",a.content_type),a.requestheaders&&b.each(a.requestheaders,function(a){e.setRequestHeader(a.key,a.value)}),e.setRequestHeader("X-Requested-With","XMLHttpRequest"),e=c.fire("beforeSend",{xhr:e,settings:a}).xhr,e.send(a.data),!a.async)return d();setTimeout(d,10)}}};return b.extend(c,a),c}),g("tinymce.core.util.JSONRequest",["tinymce.core.util.JSON","tinymce.core.util.XHR","tinymce.core.util.Tools"],function(a,b,c){function d(a){this.settings=e({},a),this.count=0}var e=c.extend;return d.sendRPC=function(a){return(new d).send(a)},d.prototype={send:function(c){var d=c.error,f=c.success;c=e(this.settings,c),c.success=function(b,e){b=a.parse(b),"undefined"==typeof b&&(b={error:"JSON Parse error."}),b.error?d.call(c.error_scope||c.scope,b.error,e):f.call(c.success_scope||c.scope,b.result)},c.error=function(a,b){d&&d.call(c.error_scope||c.scope,a,b)},c.data=a.serialize({id:c.id||"c"+this.count++,method:c.method,params:c.params}),c.content_type="application/json",b.send(c)}},d}),g("tinymce.core.util.LocalStorage",[],function(){function a(){g=[];for(var a in f)g.push(a);d.length=g.length}function b(){function b(a){var b,c;return c=void 0!==a?j+a:d.indexOf(",",j),c===-1||c>d.length?null:(b=d.substring(j,c),j=c+1,b)}var c,d,g,j=0;if(f={},i){e.load(h),d=e.getAttribute(h)||"";do{var k=b();if(null===k)break;if(c=b(parseInt(k,32)||0),null!==c){if(k=b(),null===k)break;g=b(parseInt(k,32)||0),c&&(f[c]=g)}}while(null!==c);a()}}function c(){var b,c="";if(i){for(var d in f)b=f[d],c+=(c?",":"")+d.length.toString(32)+","+d+","+b.length.toString(32)+","+b;
-e.setAttribute(h,c);try{e.save(h)}catch(g){}a()}}var d,e,f,g,h,i;try{if(window.localStorage)return localStorage}catch(j){}return h="tinymce",e=document.documentElement,i=!!e.addBehavior,i&&e.addBehavior("#default#userData"),d={key:function(a){return g[a]},getItem:function(a){return a in f?f[a]:null},setItem:function(a,b){f[a]=""+b,c()},removeItem:function(a){delete f[a],c()},clear:function(){f={},c()}},b(),d}),g("tinymce.core.api.Tinymce",["tinymce.core.AddOnManager","tinymce.core.api.Formatter","tinymce.core.api.NotificationManager","tinymce.core.api.WindowManager","tinymce.core.dom.BookmarkManager","tinymce.core.dom.ControlSelection","tinymce.core.dom.DomQuery","tinymce.core.dom.DOMUtils","tinymce.core.dom.EventUtils","tinymce.core.dom.RangeUtils","tinymce.core.dom.ScriptLoader","tinymce.core.dom.Selection","tinymce.core.dom.Serializer","tinymce.core.dom.Sizzle","tinymce.core.dom.TreeWalker","tinymce.core.Editor","tinymce.core.EditorCommands","tinymce.core.EditorManager","tinymce.core.EditorObservable","tinymce.core.Env","tinymce.core.FocusManager","tinymce.core.geom.Rect","tinymce.core.html.DomParser","tinymce.core.html.Entities","tinymce.core.html.Node","tinymce.core.html.SaxParser","tinymce.core.html.Schema","tinymce.core.html.Serializer","tinymce.core.html.Styles","tinymce.core.html.Writer","tinymce.core.Shortcuts","tinymce.core.ui.Api","tinymce.core.UndoManager","tinymce.core.util.Class","tinymce.core.util.Color","tinymce.core.util.Delay","tinymce.core.util.EventDispatcher","tinymce.core.util.I18n","tinymce.core.util.JSON","tinymce.core.util.JSONP","tinymce.core.util.JSONRequest","tinymce.core.util.LocalStorage","tinymce.core.util.Observable","tinymce.core.util.Promise","tinymce.core.util.Tools","tinymce.core.util.URI","tinymce.core.util.VK","tinymce.core.util.XHR"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V){var W=r,X={geom:{Rect:v},util:{Promise:R,Delay:J,Tools:S,VK:U,URI:T,Class:H,EventDispatcher:K,Observable:Q,I18n:L,XHR:V,JSON:M,JSONRequest:O,JSONP:N,LocalStorage:P,Color:I},dom:{EventUtils:i,Sizzle:n,DomQuery:g,TreeWalker:o,DOMUtils:h,ScriptLoader:k,RangeUtils:j,Serializer:m,ControlSelection:f,BookmarkManager:e,Selection:l,Event:i.Event},html:{Styles:C,Entities:x,Node:y,Schema:A,SaxParser:z,DomParser:w,Writer:D,Serializer:B},Env:t,AddOnManager:a,Formatter:b,UndoManager:G,EditorCommands:q,WindowManager:d,NotificationManager:c,EditorObservable:s,Shortcuts:E,Editor:p,FocusManager:u,EditorManager:r,DOM:h.DOM,ScriptLoader:k.ScriptLoader,PluginManager:a.PluginManager,ThemeManager:a.ThemeManager,trim:S.trim,isArray:S.isArray,is:S.is,toArray:S.toArray,makeMap:S.makeMap,each:S.each,map:S.map,grep:S.grep,inArray:S.inArray,extend:S.extend,create:S.create,walk:S.walk,createNS:S.createNS,resolve:S.resolve,explode:S.explode,_addCacheSuffix:S._addCacheSuffix,isOpera:t.opera,isWebKit:t.webkit,isIE:t.ie,isGecko:t.gecko,isMac:t.mac};return W=S.extend(W,X),F.appendTo(W),W}),g("tinymce.core.api.Main",["ephox.katamari.api.Fun","tinymce.core.api.Tinymce"],function(a,b){var c=this||window,d=function(b){"function"!=typeof c.define||c.define.amd||(c.define("ephox/tinymce",[],a.constant(b)),c.define("tinymce.core.EditorManager",[],a.constant(b))),"object"==typeof module&&(module.exports=b)},e=function(a){window.tinymce=a,window.tinyMCE=a};return function(){return e(b),d(b),b}}),d("tinymce.core.api.Main")()}();
\ No newline at end of file
+// 4.8.0 (2018-06-27)
+!function(){"use strict";var e,t,n,r,o,i,a,u,s,c,l,f,d,m,g,p,h,v=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t]},q=function(n,r){return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return n(r.apply(null,arguments))}},H=function(e){return function(){return e}},j=function(e){return e},b=function(i){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];for(var a=new Array(arguments.length-1),n=1;n<arguments.length;n++)a[n-1]=arguments[n];return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];var o=a.concat(n);return i.apply(null,o)}},y=H(!1),C=H(!0),x=y,w=C,N=function(){return E},E=(r={fold:function(e,t){return e()},is:x,isSome:x,isNone:w,getOr:n=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:function(){return null},getOrUndefined:function(){return undefined},or:n,orThunk:t,map:N,ap:N,each:function(){},bind:N,flatten:N,exists:x,forall:w,filter:N,equals:e=function(e){return e.isNone()},equals_:e,toArray:function(){return[]},toString:H("none()")},Object.freeze&&Object.freeze(r),r),S=function(n){var e=function(){return n},t=function(){return o},r=function(e){return e(n)},o={fold:function(e,t){return t(n)},is:function(e){return n===e},isSome:w,isNone:x,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return S(e(n))},ap:function(e){return e.fold(N,function(e){return S(e(n))})},each:function(e){e(n)},bind:r,flatten:e,exists:r,forall:r,filter:function(e){return e(n)?o:E},equals:function(e){return e.is(n)},equals_:function(e,t){return e.fold(x,function(e){return t(n,e)})},toArray:function(){return[n]},toString:function(){return"some("+n+")"}};return o},A={some:S,none:N,from:function(e){return null===e||e===undefined?E:S(e)}},T=function(t){return function(e){return function(e){if(null===e)return"null";var t=typeof e;return"object"===t&&Array.prototype.isPrototypeOf(e)?"array":"object"===t&&String.prototype.isPrototypeOf(e)?"string":t}(e)===t}},k=T("string"),_=T("object"),R=T("array"),D=T("null"),B=T("boolean"),O=T("function"),P=T("number"),L=(o=Array.prototype.indexOf)===undefined?function(e,t){return X(e,t)}:function(e,t){return o.call(e,t)},I=function(e,t){return-1<L(e,t)},M=function(e,t){return K(e,t).isSome()},$=function(e,t){for(var n=e.length,r=new Array(n),o=0;o<n;o++){var i=e[o];r[o]=t(i,o,e)}return r},F=function(e,t){for(var n=0,r=e.length;n<r;n++)t(e[n],n,e)},W=function(e,t){for(var n=[],r=[],o=0,i=e.length;o<i;o++){var a=e[o];(t(a,o,e)?n:r).push(a)}return{pass:n,fail:r}},U=function(e,t){for(var n=[],r=0,o=e.length;r<o;r++){var i=e[r];t(i,r,e)&&n.push(i)}return n},z=function(e,t,n){return F(e,function(e){n=t(n,e)}),n},V=function(e,t){for(var n=0,r=e.length;n<r;n++){var o=e[n];if(t(o,n,e))return A.some(o)}return A.none()},K=function(e,t){for(var n=0,r=e.length;n<r;n++)if(t(e[n],n,e))return A.some(n);return A.none()},X=function(e,t){for(var n=0,r=e.length;n<r;++n)if(e[n]===t)return n;return-1},Y=Array.prototype.push,G=function(e,t){return function(e){for(var t=[],n=0,r=e.length;n<r;++n){if(!Array.prototype.isPrototypeOf(e[n]))throw new Error("Arr.flatten item "+n+" was not an array, input: "+e);Y.apply(t,e[n])}return t}($(e,t))},J=function(e,t){for(var n=0,r=e.length;n<r;++n)if(!0!==t(e[n],n,e))return!1;return!0},Q=Array.prototype.slice,Z=function(e,t){return U(e,function(e){return!I(t,e)})},ee=function(e){return 0===e.length?A.none():A.some(e[0])},te=function(e){return 0===e.length?A.none():A.some(e[e.length-1])},ne=O(Array.from)?Array.from:function(e){return Q.call(e)},re="undefined"!=typeof window?window:Function("return this;")(),oe=function(e,t){return function(e,t){for(var n=t!==undefined&&null!==t?t:re,r=0;r<e.length&&n!==undefined&&null!==n;++r)n=n[e[r]];return n}(e.split("."),t)},ie={getOrDie:function(e,t){var n=oe(e,t);if(n===undefined||null===n)throw e+" not available on this browser";return n}},ae=function(){return ie.getOrDie("URL")},ue={createObjectURL:function(e){return ae().createObjectURL(e)},revokeObjectURL:function(e){ae().revokeObjectURL(e)}},se=navigator,ce=se.userAgent,le=function(e){return"matchMedia"in window&&matchMedia(e).matches};d=/Android/.test(ce),a=(a=!(i=/WebKit/.test(ce))&&/MSIE/gi.test(ce)&&/Explorer/gi.test(se.appName))&&/MSIE (\w+)\./.exec(ce)[1],u=-1!==ce.indexOf("Trident/")&&(-1!==ce.indexOf("rv:")||-1!==se.appName.indexOf("Netscape"))&&11,s=-1!==ce.indexOf("Edge/")&&!a&&!u&&12,a=a||u||s,c=!i&&!u&&/Gecko/.test(ce),l=-1!==ce.indexOf("Mac"),f=/(iPad|iPhone)/.test(ce),m="FormData"in window&&"FileReader"in window&&"URL"in window&&!!ue.createObjectURL,g=le("only screen and (max-device-width: 480px)")&&(d||f),p=le("only screen and (min-width: 800px)")&&(d||f),h=-1!==ce.indexOf("Windows Phone"),s&&(i=!1);var fe,de,me,ge,pe,he,ve,be,ye,Ce,xe,we,Ne,Ee,Se,Te,ke,Ae,_e,Re={opera:!1,webkit:i,ie:a,gecko:c,mac:l,iOS:f,android:d,contentEditable:!f||m||534<=parseInt(ce.match(/AppleWebKit\/(\d*)/)[1],10),transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!==a,range:window.getSelection&&"Range"in window,documentMode:a&&!s?document.documentMode||7:10,fileApi:m,ceFalse:!1===a||8<a,cacheSuffix:null,container:null,overrideViewPort:null,experimentalShadowDom:!1,canHaveCSP:!1===a||11<a,desktop:!g&&!p,windowsPhone:h},De=window.Promise?window.Promise:function(){function r(e,t){return function(){e.apply(t,arguments)}}var e=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},i=function(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],l(e,r(o,this),r(u,this))},t=i.immediateFn||"function"==typeof setImmediate&&setImmediate||function(e){setTimeout(e,1)};function a(r){var o=this;null!==this._state?t(function(){var e=o._state?r.onFulfilled:r.onRejected;if(null!==e){var t;try{t=e(o._value)}catch(n){return void r.reject(n)}r.resolve(t)}else(o._state?r.resolve:r.reject)(o._value)}):this._deferreds.push(r)}function o(e){try{if(e===this)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var t=e.then;if("function"==typeof t)return void l(r(t,e),r(o,this),r(u,this))}this._state=!0,this._value=e,s.call(this)}catch(n){u.call(this,n)}}function u(e){this._state=!1,this._value=e,s.call(this)}function s(){for(var e=0,t=this._deferreds.length;e<t;e++)a.call(this,this._deferreds[e]);this._deferreds=null}function c(e,t,n,r){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r}function l(e,t,n){var r=!1;try{e(function(e){r||(r=!0,t(e))},function(e){r||(r=!0,n(e))})}catch(o){if(r)return;r=!0,n(o)}}return i.prototype["catch"]=function(e){return this.then(null,e)},i.prototype.then=function(n,r){var o=this;return new i(function(e,t){a.call(o,new c(n,r,e,t))})},i.all=function(){var s=Array.prototype.slice.call(1===arguments.length&&e(arguments[0])?arguments[0]:arguments);return new i(function(o,i){if(0===s.length)return o([]);var a=s.length;function u(t,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void n.call(e,function(e){u(t,e)},i)}s[t]=e,0==--a&&o(s)}catch(r){i(r)}}for(var e=0;e<s.length;e++)u(e,s[e])})},i.resolve=function(t){return t&&"object"==typeof t&&t.constructor===i?t:new i(function(e){e(t)})},i.reject=function(n){return new i(function(e,t){t(n)})},i.race=function(o){return new i(function(e,t){for(var n=0,r=o.length;n<r;n++)o[n].then(e,t)})},i}(),Be=function(e,t){return"number"!=typeof t&&(t=0),setTimeout(e,t)},Oe=function(e,t){return"number"!=typeof t&&(t=1),setInterval(e,t)},Pe=function(t,n){var r,e;return(e=function(){var e=arguments;clearTimeout(r),r=Be(function(){t.apply(this,e)},n)}).stop=function(){clearTimeout(r)},e},Le={requestAnimationFrame:function(e,t){fe?fe.then(e):fe=new De(function(e){t||(t=document.body),function(e,t){var n,r=window.requestAnimationFrame,o=["ms","moz","webkit"];for(n=0;n<o.length&&!r;n++)r=window[o[n]+"RequestAnimationFrame"];r||(r=function(e){window.setTimeout(e,0)}),r(e,t)}(e,t)}).then(e)},setTimeout:Be,setInterval:Oe,setEditorTimeout:function(e,t,n){return Be(function(){e.removed||t()},n)},setEditorInterval:function(e,t,n){var r;return r=Oe(function(){e.removed?clearInterval(r):t()},n)},debounce:Pe,throttle:Pe,clearInterval:function(e){return clearInterval(e)},clearTimeout:function(e){return clearTimeout(e)}},Ie=/^(?:mouse|contextmenu)|click/,Me={keyLocation:1,layerX:1,layerY:1,returnValue:1,webkitMovementX:1,webkitMovementY:1,keyIdentifier:1},Fe=function(){return!1},Ue=function(){return!0},ze=function(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r||!1):e.attachEvent&&e.attachEvent("on"+t,n)},Ve=function(e,t,n,r){e.removeEventListener?e.removeEventListener(t,n,r||!1):e.detachEvent&&e.detachEvent("on"+t,n)},qe=function(e,t){var n,r,o,i,a,u,s=t||{};for(n in e)Me[n]||(s[n]=e[n]);if(s.target||(s.target=s.srcElement||document),Re.experimentalShadowDom&&(s.target=(r=e,o=s.target,a=o,(i=r.path)&&0<i.length&&(a=i[0]),r.composedPath&&(i=r.composedPath())&&0<i.length&&(a=i[0]),a)),e&&Ie.test(e.type)&&e.pageX===undefined&&e.clientX!==undefined){var c=s.target.ownerDocument||document,l=c.documentElement,f=c.body;s.pageX=e.clientX+(l&&l.scrollLeft||f&&f.scrollLeft||0)-(l&&l.clientLeft||f&&f.clientLeft||0),s.pageY=e.clientY+(l&&l.scrollTop||f&&f.scrollTop||0)-(l&&l.clientTop||f&&f.clientTop||0)}return s.preventDefault=function(){s.isDefaultPrevented=Ue,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},s.stopPropagation=function(){s.isPropagationStopped=Ue,e&&(e.stopPropagation?e.stopPropagation():e.cancelBubble=!0)},!(s.stopImmediatePropagation=function(){s.isImmediatePropagationStopped=Ue,s.stopPropagation()})==((u=s).isDefaultPrevented===Ue||u.isDefaultPrevented===Fe)&&(s.isDefaultPrevented=Fe,s.isPropagationStopped=Fe,s.isImmediatePropagationStopped=Fe),"undefined"==typeof s.metaKey&&(s.metaKey=!1),s},He=function(e,t,n){var r=e.document,o={type:"ready"};if(n.domLoaded)t(o);else{var i=function(){return"complete"===r.readyState||"interactive"===r.readyState&&r.body},a=function(){n.domLoaded||(n.domLoaded=!0,t(o))},u=function(){i()&&(Ve(r,"readystatechange",u),a())},s=function(){try{r.documentElement.doScroll("left")}catch(e){return void Le.setTimeout(s)}a()};!r.addEventListener||Re.ie&&Re.ie<11?(ze(r,"readystatechange",u),r.documentElement.doScroll&&e.self===e.top&&s()):i()?a():ze(e,"DOMContentLoaded",a),ze(e,"load",a)}},je=function(){var m,g,p,h,v,b=this,y={};g="mce-data-"+(+new Date).toString(32),h="onmouseenter"in document.documentElement,p="onfocusin"in document.documentElement,v={mouseenter:"mouseover",mouseleave:"mouseout"},m=1,b.domLoaded=!1,b.events=y;var C=function(e,t){var n,r,o,i,a=y[t];if(n=a&&a[e.type])for(r=0,o=n.length;r<o;r++)if((i=n[r])&&!1===i.func.call(i.scope,e)&&e.preventDefault(),e.isImmediatePropagationStopped())return};b.bind=function(e,t,n,r){var o,i,a,u,s,c,l,f=window,d=function(e){C(qe(e||f.event),o)};if(e&&3!==e.nodeType&&8!==e.nodeType){for(e[g]?o=e[g]:(o=m++,e[g]=o,y[o]={}),r=r||e,a=(t=t.split(" ")).length;a--;)c=d,s=l=!1,"DOMContentLoaded"===(u=t[a])&&(u="ready"),b.domLoaded&&"ready"===u&&"complete"===e.readyState?n.call(r,qe({type:u})):(h||(s=v[u])&&(c=function(e){var t,n;if(t=e.currentTarget,(n=e.relatedTarget)&&t.contains)n=t.contains(n);else for(;n&&n!==t;)n=n.parentNode;n||((e=qe(e||f.event)).type="mouseout"===e.type?"mouseleave":"mouseenter",e.target=t,C(e,o))}),p||"focusin"!==u&&"focusout"!==u||(l=!0,s="focusin"===u?"focus":"blur",c=function(e){(e=qe(e||f.event)).type="focus"===e.type?"focusin":"focusout",C(e,o)}),(i=y[o][u])?"ready"===u&&b.domLoaded?n({type:u}):i.push({func:n,scope:r}):(y[o][u]=i=[{func:n,scope:r}],i.fakeName=s,i.capture=l,i.nativeHandler=c,"ready"===u?He(e,c,b):ze(e,s||u,c,l)));return e=i=0,n}},b.unbind=function(e,t,n){var r,o,i,a,u,s;if(!e||3===e.nodeType||8===e.nodeType)return b;if(r=e[g]){if(s=y[r],t){for(i=(t=t.split(" ")).length;i--;)if(o=s[u=t[i]]){if(n)for(a=o.length;a--;)if(o[a].func===n){var c=o.nativeHandler,l=o.fakeName,f=o.capture;(o=o.slice(0,a).concat(o.slice(a+1))).nativeHandler=c,o.fakeName=l,o.capture=f,s[u]=o}n&&0!==o.length||(delete s[u],Ve(e,o.fakeName||u,o.nativeHandler,o.capture))}}else{for(u in s)o=s[u],Ve(e,o.fakeName||u,o.nativeHandler,o.capture);s={}}for(u in s)return b;delete y[r];try{delete e[g]}catch(d){e[g]=null}}return b},b.fire=function(e,t,n){var r;if(!e||3===e.nodeType||8===e.nodeType)return b;for((n=qe(null,n)).type=t,n.target=e;(r=e[g])&&C(n,r),(e=e.parentNode||e.ownerDocument||e.defaultView||e.parentWindow)&&!n.isPropagationStopped(););return b},b.clean=function(e){var t,n,r=b.unbind;if(!e||3===e.nodeType||8===e.nodeType)return b;if(e[g]&&r(e),e.getElementsByTagName||(e=e.document),e&&e.getElementsByTagName)for(r(e),t=(n=e.getElementsByTagName("*")).length;t--;)(e=n[t])[g]&&r(e);return b},b.destroy=function(){y={}},b.cancel=function(e){return e&&(e.preventDefault(),e.stopImmediatePropagation()),!1}};je.Event=new je,je.Event.bind(window,"ready",function(){});var $e="sizzle"+-new Date,We=window.document,Ke=0,Xe=0,Ye=kt(),Ge=kt(),Je=kt(),Qe=function(e,t){return e===t&&(we=!0),0},Ze=typeof undefined,et={}.hasOwnProperty,tt=[],nt=tt.pop,rt=tt.push,ot=tt.push,it=tt.slice,at=tt.indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(this[t]===e)return t;return-1},ut="[\\x20\\t\\r\\n\\f]",st="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ct="\\["+ut+"*("+st+")(?:"+ut+"*([*^$|!~]?=)"+ut+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+st+"))|)"+ut+"*\\]",lt=":("+st+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ct+")*)|.*)\\)|)",ft=new RegExp("^"+ut+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ut+"+$","g"),dt=new RegExp("^"+ut+"*,"+ut+"*"),mt=new RegExp("^"+ut+"*([>+~]|"+ut+")"+ut+"*"),gt=new RegExp("="+ut+"*([^\\]'\"]*?)"+ut+"*\\]","g"),pt=new RegExp(lt),ht=new RegExp("^"+st+"$"),vt={ID:new RegExp("^#("+st+")"),CLASS:new RegExp("^\\.("+st+")"),TAG:new RegExp("^("+st+"|[*])"),ATTR:new RegExp("^"+ct),PSEUDO:new RegExp("^"+lt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ut+"*(even|odd|(([+-]|)(\\d*)n|)"+ut+"*(?:([+-]|)"+ut+"*(\\d+)|))"+ut+"*\\)|)","i"),bool:new RegExp("^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$","i"),needsContext:new RegExp("^"+ut+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ut+"*((?:-\\d)?\\d*)"+ut+"*\\)|)(?=[^-]|$)","i")},bt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,Ct=/^[^{]+\{\s*\[native \w/,xt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,wt=/[+~]/,Nt=/'|\\/g,Et=new RegExp("\\\\([\\da-f]{1,6}"+ut+"?|("+ut+")|.)","ig"),St=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)};try{ot.apply(tt=it.call(We.childNodes),We.childNodes),tt[We.childNodes.length].nodeType}catch(Kw){ot={apply:tt.length?function(e,t){rt.apply(e,it.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}var Tt=function(e,t,n,r){var o,i,a,u,s,c,l,f,d,m;if((t?t.ownerDocument||t:We)!==Ee&&Ne(t),n=n||[],!e||"string"!=typeof e)return n;if(1!==(u=(t=t||Ee).nodeType)&&9!==u)return[];if(Te&&!r){if(o=xt.exec(e))if(a=o[1]){if(9===u){if(!(i=t.getElementById(a))||!i.parentNode)return n;if(i.id===a)return n.push(i),n}else if(t.ownerDocument&&(i=t.ownerDocument.getElementById(a))&&_e(t,i)&&i.id===a)return n.push(i),n}else{if(o[2])return ot.apply(n,t.getElementsByTagName(e)),n;if((a=o[3])&&me.getElementsByClassName)return ot.apply(n,t.getElementsByClassName(a)),n}if(me.qsa&&(!ke||!ke.test(e))){if(f=l=$e,d=t,m=9===u&&e,1===u&&"object"!==t.nodeName.toLowerCase()){for(c=ve(e),(l=t.getAttribute("id"))?f=l.replace(Nt,"\\$&"):t.setAttribute("id",f),f="[id='"+f+"'] ",s=c.length;s--;)c[s]=f+Lt(c[s]);d=wt.test(e)&&Ot(t.parentNode)||t,m=c.join(",")}if(m)try{return ot.apply(n,d.querySelectorAll(m)),n}catch(g){}finally{l||t.removeAttribute("id")}}}return ye(e.replace(ft,"$1"),t,n,r)};function kt(){var r=[];return function e(t,n){return r.push(t+" ")>ge.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function At(e){return e[$e]=!0,e}function _t(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function Rt(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function Dt(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function Bt(a){return At(function(i){return i=+i,At(function(e,t){for(var n,r=a([],e.length,i),o=r.length;o--;)e[n=r[o]]&&(e[n]=!(t[n]=e[n]))})})}function Ot(e){return e&&typeof e.getElementsByTagName!==Ze&&e}for(de in me=Tt.support={},he=Tt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},Ne=Tt.setDocument=function(e){var t,s=e?e.ownerDocument||e:We,n=s.defaultView;return s!==Ee&&9===s.nodeType&&s.documentElement?(Se=(Ee=s).documentElement,Te=!he(s),n&&n!==function(e){try{return e.top}catch(t){}return null}(n)&&(n.addEventListener?n.addEventListener("unload",function(){Ne()},!1):n.attachEvent&&n.attachEvent("onunload",function(){Ne()})),me.attributes=!0,me.getElementsByTagName=!0,me.getElementsByClassName=Ct.test(s.getElementsByClassName),me.getById=!0,ge.find.ID=function(e,t){if(typeof t.getElementById!==Ze&&Te){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},ge.filter.ID=function(e){var t=e.replace(Et,St);return function(e){return e.getAttribute("id")===t}},ge.find.TAG=me.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!==Ze)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},ge.find.CLASS=me.getElementsByClassName&&function(e,t){if(Te)return t.getElementsByClassName(e)},Ae=[],ke=[],me.disconnectedMatch=!0,ke=ke.length&&new RegExp(ke.join("|")),Ae=Ae.length&&new RegExp(Ae.join("|")),t=Ct.test(Se.compareDocumentPosition),_e=t||Ct.test(Se.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},Qe=t?function(e,t){if(e===t)return we=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!me.sortDetached&&t.compareDocumentPosition(e)===n?e===s||e.ownerDocument===We&&_e(We,e)?-1:t===s||t.ownerDocument===We&&_e(We,t)?1:xe?at.call(xe,e)-at.call(xe,t):0:4&n?-1:1)}:function(e,t){if(e===t)return we=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],u=[t];if(!o||!i)return e===s?-1:t===s?1:o?-1:i?1:xe?at.call(xe,e)-at.call(xe,t):0;if(o===i)return _t(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?_t(a[r],u[r]):a[r]===We?-1:u[r]===We?1:0},s):Ee},Tt.matches=function(e,t){return Tt(e,null,null,t)},Tt.matchesSelector=function(e,t){if((e.ownerDocument||e)!==Ee&&Ne(e),t=t.replace(gt,"='$1']"),me.matchesSelector&&Te&&(!Ae||!Ae.test(t))&&(!ke||!ke.test(t)))try{var n=(void 0).call(e,t);if(n||me.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(Kw){}return 0<Tt(t,Ee,null,[e]).length},Tt.contains=function(e,t){return(e.ownerDocument||e)!==Ee&&Ne(e),_e(e,t)},Tt.attr=function(e,t){(e.ownerDocument||e)!==Ee&&Ne(e);var n=ge.attrHandle[t.toLowerCase()],r=n&&et.call(ge.attrHandle,t.toLowerCase())?n(e,t,!Te):undefined;return r!==undefined?r:me.attributes||!Te?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},Tt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},Tt.uniqueSort=function(e){var t,n=[],r=0,o=0;if(we=!me.detectDuplicates,xe=!me.sortStable&&e.slice(0),e.sort(Qe),we){for(;t=e[o++];)t===e[o]&&(r=n.push(o));for(;r--;)e.splice(n[r],1)}return xe=null,e},pe=Tt.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=pe(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=pe(t);return n},(ge=Tt.selectors={cacheLength:50,createPseudo:At,match:vt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Et,St),e[3]=(e[3]||e[4]||e[5]||"").replace(Et,St),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||Tt.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&Tt.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return vt.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&pt.test(n)&&(t=ve(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Et,St).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=Ye[e+" "];return t||(t=new RegExp("(^|"+ut+")"+e+"("+ut+"|$)"))&&Ye(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==Ze&&e.getAttribute("class")||"")})},ATTR:function(n,r,o){return function(e){var t=Tt.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===o:"!="===r?t!==o:"^="===r?o&&0===t.indexOf(o):"*="===r?o&&-1<t.indexOf(o):"$="===r?o&&t.slice(-o.length)===o:"~="===r?-1<(" "+t+" ").indexOf(o):"|="===r&&(t===o||t.slice(0,o.length+1)===o+"-"))}},CHILD:function(m,e,t,g,p){var h="nth"!==m.slice(0,3),v="last"!==m.slice(-4),b="of-type"===e;return 1===g&&0===p?function(e){return!!e.parentNode}:function(e,t,n){var r,o,i,a,u,s,c=h!==v?"nextSibling":"previousSibling",l=e.parentNode,f=b&&e.nodeName.toLowerCase(),d=!n&&!b;if(l){if(h){for(;c;){for(i=e;i=i[c];)if(b?i.nodeName.toLowerCase()===f:1===i.nodeType)return!1;s=c="only"===m&&!s&&"nextSibling"}return!0}if(s=[v?l.firstChild:l.lastChild],v&&d){for(u=(r=(o=l[$e]||(l[$e]={}))[m]||[])[0]===Ke&&r[1],a=r[0]===Ke&&r[2],i=u&&l.childNodes[u];i=++u&&i&&i[c]||(a=u=0)||s.pop();)if(1===i.nodeType&&++a&&i===e){o[m]=[Ke,u,a];break}}else if(d&&(r=(e[$e]||(e[$e]={}))[m])&&r[0]===Ke)a=r[1];else for(;(i=++u&&i&&i[c]||(a=u=0)||s.pop())&&((b?i.nodeName.toLowerCase()!==f:1!==i.nodeType)||!++a||(d&&((i[$e]||(i[$e]={}))[m]=[Ke,a]),i!==e)););return(a-=p)===g||a%g==0&&0<=a/g}}},PSEUDO:function(e,i){var t,a=ge.pseudos[e]||ge.setFilters[e.toLowerCase()]||Tt.error("unsupported pseudo: "+e);return a[$e]?a(i):1<a.length?(t=[e,e,"",i],ge.setFilters.hasOwnProperty(e.toLowerCase())?At(function(e,t){for(var n,r=a(e,i),o=r.length;o--;)e[n=at.call(e,r[o])]=!(t[n]=r[o])}):function(e){return a(e,0,t)}):a}},pseudos:{not:At(function(e){var r=[],o=[],u=be(e.replace(ft,"$1"));return u[$e]?At(function(e,t,n,r){for(var o,i=u(e,null,r,[]),a=e.length;a--;)(o=i[a])&&(e[a]=!(t[a]=o))}):function(e,t,n){return r[0]=e,u(r,null,n,o),!o.pop()}}),has:At(function(t){return function(e){return 0<Tt(t,e).length}}),contains:At(function(t){return t=t.replace(Et,St),function(e){return-1<(e.textContent||e.innerText||pe(e)).indexOf(t)}}),lang:At(function(n){return ht.test(n||"")||Tt.error("unsupported lang: "+n),n=n.replace(Et,St).toLowerCase(),function(e){var t;do{if(t=Te?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=window.location&&window.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===Se},focus:function(e){return e===Ee.activeElement&&(!Ee.hasFocus||Ee.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!ge.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return bt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:Bt(function(){return[0]}),last:Bt(function(e,t){return[t-1]}),eq:Bt(function(e,t,n){return[n<0?n+t:n]}),even:Bt(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:Bt(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:Bt(function(e,t,n){for(var r=n<0?n+t:n;0<=--r;)e.push(r);return e}),gt:Bt(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=ge.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})ge.pseudos[de]=Rt(de);for(de in{submit:!0,reset:!0})ge.pseudos[de]=Dt(de);function Pt(){}function Lt(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function It(a,e,t){var u=e.dir,s=t&&"parentNode"===u,c=Xe++;return e.first?function(e,t,n){for(;e=e[u];)if(1===e.nodeType||s)return a(e,t,n)}:function(e,t,n){var r,o,i=[Ke,c];if(n){for(;e=e[u];)if((1===e.nodeType||s)&&a(e,t,n))return!0}else for(;e=e[u];)if(1===e.nodeType||s){if((r=(o=e[$e]||(e[$e]={}))[u])&&r[0]===Ke&&r[1]===c)return i[2]=r[2];if((o[u]=i)[2]=a(e,t,n))return!0}}}function Mt(o){return 1<o.length?function(e,t,n){for(var r=o.length;r--;)if(!o[r](e,t,n))return!1;return!0}:o[0]}function Ft(e,t,n,r,o){for(var i,a=[],u=0,s=e.length,c=null!=t;u<s;u++)(i=e[u])&&(n&&!n(i,r,o)||(a.push(i),c&&t.push(u)));return a}function Ut(m,g,p,h,v,e){return h&&!h[$e]&&(h=Ut(h)),v&&!v[$e]&&(v=Ut(v,e)),At(function(e,t,n,r){var o,i,a,u=[],s=[],c=t.length,l=e||function(e,t,n){for(var r=0,o=t.length;r<o;r++)Tt(e,t[r],n);return n}(g||"*",n.nodeType?[n]:n,[]),f=!m||!e&&g?l:Ft(l,u,m,n,r),d=p?v||(e?m:c||h)?[]:t:f;if(p&&p(f,d,n,r),h)for(o=Ft(d,s),h(o,[],n,r),i=o.length;i--;)(a=o[i])&&(d[s[i]]=!(f[s[i]]=a));if(e){if(v||m){if(v){for(o=[],i=d.length;i--;)(a=d[i])&&o.push(f[i]=a);v(null,d=[],o,r)}for(i=d.length;i--;)(a=d[i])&&-1<(o=v?at.call(e,a):u[i])&&(e[o]=!(t[o]=a))}}else d=Ft(d===t?d.splice(c,d.length):d),v?v(null,t,d,r):ot.apply(t,d)})}function zt(e){for(var r,t,n,o=e.length,i=ge.relative[e[0].type],a=i||ge.relative[" "],u=i?1:0,s=It(function(e){return e===r},a,!0),c=It(function(e){return-1<at.call(r,e)},a,!0),l=[function(e,t,n){return!i&&(n||t!==Ce)||((r=t).nodeType?s(e,t,n):c(e,t,n))}];u<o;u++)if(t=ge.relative[e[u].type])l=[It(Mt(l),t)];else{if((t=ge.filter[e[u].type].apply(null,e[u].matches))[$e]){for(n=++u;n<o&&!ge.relative[e[n].type];n++);return Ut(1<u&&Mt(l),1<u&&Lt(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(ft,"$1"),t,u<n&&zt(e.slice(u,n)),n<o&&zt(e=e.slice(n)),n<o&&Lt(e))}l.push(t)}return Mt(l)}Pt.prototype=ge.filters=ge.pseudos,ge.setFilters=new Pt,ve=Tt.tokenize=function(e,t){var n,r,o,i,a,u,s,c=Ge[e+" "];if(c)return t?0:c.slice(0);for(a=e,u=[],s=ge.preFilter;a;){for(i in n&&!(r=dt.exec(a))||(r&&(a=a.slice(r[0].length)||a),u.push(o=[])),n=!1,(r=mt.exec(a))&&(n=r.shift(),o.push({value:n,type:r[0].replace(ft," ")}),a=a.slice(n.length)),ge.filter)!(r=vt[i].exec(a))||s[i]&&!(r=s[i](r))||(n=r.shift(),o.push({value:n,type:i,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?Tt.error(e):Ge(e,u).slice(0)},be=Tt.compile=function(e,t){var n,h,v,b,y,r,o=[],i=[],a=Je[e+" "];if(!a){for(t||(t=ve(e)),n=t.length;n--;)(a=zt(t[n]))[$e]?o.push(a):i.push(a);(a=Je(e,(h=i,b=0<(v=o).length,y=0<h.length,r=function(e,t,n,r,o){var i,a,u,s=0,c="0",l=e&&[],f=[],d=Ce,m=e||y&&ge.find.TAG("*",o),g=Ke+=null==d?1:Math.random()||.1,p=m.length;for(o&&(Ce=t!==Ee&&t);c!==p&&null!=(i=m[c]);c++){if(y&&i){for(a=0;u=h[a++];)if(u(i,t,n)){r.push(i);break}o&&(Ke=g)}b&&((i=!u&&i)&&s--,e&&l.push(i))}if(s+=c,b&&c!==s){for(a=0;u=v[a++];)u(l,f,t,n);if(e){if(0<s)for(;c--;)l[c]||f[c]||(f[c]=nt.call(r));f=Ft(f)}ot.apply(r,f),o&&!e&&0<f.length&&1<s+v.length&&Tt.uniqueSort(r)}return o&&(Ke=g,Ce=d),l},b?At(r):r))).selector=e}return a},ye=Tt.select=function(e,t,n,r){var o,i,a,u,s,c="function"==typeof e&&e,l=!r&&ve(e=c.selector||e);if(n=n||[],1===l.length){if(2<(i=l[0]=l[0].slice(0)).length&&"ID"===(a=i[0]).type&&me.getById&&9===t.nodeType&&Te&&ge.relative[i[1].type]){if(!(t=(ge.find.ID(a.matches[0].replace(Et,St),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(i.shift().value.length)}for(o=vt.needsContext.test(e)?0:i.length;o--&&(a=i[o],!ge.relative[u=a.type]);)if((s=ge.find[u])&&(r=s(a.matches[0].replace(Et,St),wt.test(i[0].type)&&Ot(t.parentNode)||t))){if(i.splice(o,1),!(e=r.length&&Lt(i)))return ot.apply(n,r),n;break}}return(c||be(e,l))(r,t,!Te,n,wt.test(e)&&Ot(t.parentNode)||t),n},me.sortStable=$e.split("").sort(Qe).join("")===$e,me.detectDuplicates=!!we,Ne(),me.sortDetached=!0;var Vt=Array.isArray,qt=function(e,t,n){var r,o;if(!e)return 0;if(n=n||e,e.length!==undefined){for(r=0,o=e.length;r<o;r++)if(!1===t.call(n,e[r],r,e))return 0}else for(r in e)if(e.hasOwnProperty(r)&&!1===t.call(n,e[r],r,e))return 0;return 1},Ht=function(e,t,n){var r,o;for(r=0,o=e.length;r<o;r++)if(t.call(n,e[r],r,e))return r;return-1},jt={isArray:Vt,toArray:function(e){var t,n,r=e;if(!Vt(e))for(r=[],t=0,n=e.length;t<n;t++)r[t]=e[t];return r},each:qt,map:function(n,r){var o=[];return qt(n,function(e,t){o.push(r(e,t,n))}),o},filter:function(n,r){var o=[];return qt(n,function(e,t){r&&!r(e,t,n)||o.push(e)}),o},indexOf:function(e,t){var n,r;if(e)for(n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},reduce:function(e,t,n,r){var o=0;for(arguments.length<3&&(n=e[0]);o<e.length;o++)n=t.call(r,n,e[o],o);return n},findIndex:Ht,find:function(e,t,n){var r=Ht(e,t,n);return-1!==r?e[r]:undefined},last:function(e){return e[e.length-1]}},$t=/^\s*|\s*$/g,Wt=function(e){return null===e||e===undefined?"":(""+e).replace($t,"")},Kt=function(e,t){return t?!("array"!==t||!jt.isArray(e))||typeof e===t:e!==undefined},Xt=function(e,n,r,o){o=o||this,e&&(r&&(e=e[r]),jt.each(e,function(e,t){if(!1===n.call(o,e,t,r))return!1;Xt(e,n,r,o)}))},Yt={trim:Wt,isArray:jt.isArray,is:Kt,toArray:jt.toArray,makeMap:function(e,t,n){var r;for(t=t||",","string"==typeof(e=e||[])&&(e=e.split(t)),n=n||{},r=e.length;r--;)n[e[r]]={};return n},each:jt.each,map:jt.map,grep:jt.filter,inArray:jt.indexOf,hasOwn:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},extend:function(e,t){for(var n,r,o,i=[],a=2;a<arguments.length;a++)i[a-2]=arguments[a];var u,s=arguments;for(n=1,r=s.length;n<r;n++)for(o in t=s[n])t.hasOwnProperty(o)&&(u=t[o])!==undefined&&(e[o]=u);return e},create:function(e,t,n){var r,o,i,a,u,s=this,c=0;if(e=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(e),i=e[3].match(/(^|\.)(\w+)$/i)[2],!(o=s.createNS(e[3].replace(/\.\w+$/,""),n))[i]){if("static"===e[2])return o[i]=t,void(this.onCreate&&this.onCreate(e[2],e[3],o[i]));t[i]||(t[i]=function(){},c=1),o[i]=t[i],s.extend(o[i].prototype,t),e[5]&&(r=s.resolve(e[5]).prototype,a=e[5].match(/\.(\w+)$/i)[1],u=o[i],o[i]=c?function(){return r[a].apply(this,arguments)}:function(){return this.parent=r[a],u.apply(this,arguments)},o[i].prototype[i]=o[i],s.each(r,function(e,t){o[i].prototype[t]=r[t]}),s.each(t,function(e,t){r[t]?o[i].prototype[t]=function(){return this.parent=r[t],e.apply(this,arguments)}:t!==i&&(o[i].prototype[t]=e)})),s.each(t["static"],function(e,t){o[i][t]=e})}},walk:Xt,createNS:function(e,t){var n,r;for(t=t||window,e=e.split("."),n=0;n<e.length;n++)t[r=e[n]]||(t[r]={}),t=t[r];return t},resolve:function(e,t){var n,r;for(t=t||window,n=0,r=(e=e.split(".")).length;n<r&&(t=t[e[n]]);n++);return t},explode:function(e,t){return!e||Kt(e,"array")?e:jt.map(e.split(t||","),Wt)},_addCacheSuffix:function(e){var t=Re.cacheSuffix;return t&&(e+=(-1===e.indexOf("?")?"?":"&")+t),e}},Gt=document,Jt=Array.prototype.push,Qt=Array.prototype.slice,Zt=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,en=je.Event,tn=Yt.makeMap("children,contents,next,prev"),nn=function(e){return void 0!==e},rn=function(e){return"string"==typeof e},on=function(e,t){var n,r,o;for(o=(t=t||Gt).createElement("div"),n=t.createDocumentFragment(),o.innerHTML=e;r=o.firstChild;)n.appendChild(r);return n},an=function(e,t,n,r){var o;if(rn(t))t=on(t,Cn(e[0]));else if(t.length&&!t.nodeType){if(t=pn.makeArray(t),r)for(o=t.length-1;0<=o;o--)an(e,t[o],n,r);else for(o=0;o<t.length;o++)an(e,t[o],n,r);return e}if(t.nodeType)for(o=e.length;o--;)n.call(e[o],t);return e},un=function(e,t){return e&&t&&-1!==(" "+e.className+" ").indexOf(" "+t+" ")},sn=function(e,t,n){var r,o;return t=pn(t)[0],e.each(function(){var e=this;n&&r===e.parentNode||(r=e.parentNode,o=t.cloneNode(!1),e.parentNode.insertBefore(o,e)),o.appendChild(e)}),e},cn=Yt.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),ln=Yt.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),fn={"for":"htmlFor","class":"className",readonly:"readOnly"},dn={"float":"cssFloat"},mn={},gn={},pn=function(e,t){return new pn.fn.init(e,t)},hn=/^\s*|\s*$/g,vn=function(e){return null===e||e===undefined?"":(""+e).replace(hn,"")},bn=function(e,t){var n,r,o,i;if(e)if((n=e.length)===undefined){for(r in e)if(e.hasOwnProperty(r)&&(i=e[r],!1===t.call(i,r,i)))break}else for(o=0;o<n&&(i=e[o],!1!==t.call(i,o,i));o++);return e},yn=function(e,n){var r=[];return bn(e,function(e,t){n(t,e)&&r.push(t)}),r},Cn=function(e){return e?9===e.nodeType?e:e.ownerDocument:Gt};pn.fn=pn.prototype={constructor:pn,selector:"",context:null,length:0,init:function(e,t){var n,r,o=this;if(!e)return o;if(e.nodeType)return o.context=o[0]=e,o.length=1,o;if(t&&t.nodeType)o.context=t;else{if(t)return pn(e).attr(t);o.context=t=document}if(rn(e)){if(!(n="<"===(o.selector=e).charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:Zt.exec(e)))return pn(t).find(e);if(n[1])for(r=on(e,Cn(t)).firstChild;r;)Jt.call(o,r),r=r.nextSibling;else{if(!(r=Cn(t).getElementById(n[2])))return o;if(r.id!==n[2])return o.find(e);o.length=1,o[0]=r}}else this.add(e,!1);return o},toArray:function(){return Yt.toArray(this)},add:function(e,t){var n,r,o=this;if(rn(e))return o.add(pn(e));if(!1!==t)for(n=pn.unique(o.toArray().concat(pn.makeArray(e))),o.length=n.length,r=0;r<n.length;r++)o[r]=n[r];else Jt.apply(o,pn.makeArray(e));return o},attr:function(t,n){var e,r=this;if("object"==typeof t)bn(t,function(e,t){r.attr(e,t)});else{if(!nn(n)){if(r[0]&&1===r[0].nodeType){if((e=mn[t])&&e.get)return e.get(r[0],t);if(ln[t])return r.prop(t)?t:undefined;null===(n=r[0].getAttribute(t,2))&&(n=undefined)}return n}this.each(function(){var e;if(1===this.nodeType){if((e=mn[t])&&e.set)return void e.set(this,n);null===n?this.removeAttribute(t,2):this.setAttribute(t,n,2)}})}return r},removeAttr:function(e){return this.attr(e,null)},prop:function(e,t){var n=this;if("object"==typeof(e=fn[e]||e))bn(e,function(e,t){n.prop(e,t)});else{if(!nn(t))return n[0]&&n[0].nodeType&&e in n[0]?n[0][e]:t;this.each(function(){1===this.nodeType&&(this[e]=t)})}return n},css:function(n,r){var e,o,i=this,t=function(e){return e.replace(/-(\D)/g,function(e,t){return t.toUpperCase()})},a=function(e){return e.replace(/[A-Z]/g,function(e){return"-"+e})};if("object"==typeof n)bn(n,function(e,t){i.css(e,t)});else if(nn(r))n=t(n),"number"!=typeof r||cn[n]||(r=r.toString()+"px"),i.each(function(){var e=this.style;if((o=gn[n])&&o.set)o.set(this,r);else{try{this.style[dn[n]||n]=r}catch(t){}null!==r&&""!==r||(e.removeProperty?e.removeProperty(a(n)):e.removeAttribute(n))}});else{if(e=i[0],(o=gn[n])&&o.get)return o.get(e);if(!e.ownerDocument.defaultView)return e.currentStyle?e.currentStyle[t(n)]:"";try{return e.ownerDocument.defaultView.getComputedStyle(e,null).getPropertyValue(a(n))}catch(u){return undefined}}return i},remove:function(){for(var e,t=this.length;t--;)e=this[t],en.clean(e),e.parentNode&&e.parentNode.removeChild(e);return this},empty:function(){for(var e,t=this.length;t--;)for(e=this[t];e.firstChild;)e.removeChild(e.firstChild);return this},html:function(e){var t,n=this;if(nn(e)){t=n.length;try{for(;t--;)n[t].innerHTML=e}catch(r){pn(n[t]).empty().append(e)}return n}return n[0]?n[0].innerHTML:""},text:function(e){var t,n=this;if(nn(e)){for(t=n.length;t--;)"innerText"in n[t]?n[t].innerText=e:n[0].textContent=e;return n}return n[0]?n[0].innerText||n[0].textContent:""},append:function(){return an(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.appendChild(e)})},prepend:function(){return an(this,arguments,function(e){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.insertBefore(e,this.firstChild)},!0)},before:function(){return this[0]&&this[0].parentNode?an(this,arguments,function(e){this.parentNode.insertBefore(e,this)}):this},after:function(){return this[0]&&this[0].parentNode?an(this,arguments,function(e){this.parentNode.insertBefore(e,this.nextSibling)},!0):this},appendTo:function(e){return pn(e).append(this),this},prependTo:function(e){return pn(e).prepend(this),this},replaceWith:function(e){return this.before(e).remove()},wrap:function(e){return sn(this,e)},wrapAll:function(e){return sn(this,e,!0)},wrapInner:function(e){return this.each(function(){pn(this).contents().wrapAll(e)}),this},unwrap:function(){return this.parent().each(function(){pn(this).replaceWith(this.childNodes)})},clone:function(){var e=[];return this.each(function(){e.push(this.cloneNode(!0))}),pn(e)},addClass:function(e){return this.toggleClass(e,!0)},removeClass:function(e){return this.toggleClass(e,!1)},toggleClass:function(o,i){var e=this;return"string"!=typeof o||(-1!==o.indexOf(" ")?bn(o.split(" "),function(){e.toggleClass(this,i)}):e.each(function(e,t){var n,r;(r=un(t,o))!==i&&(n=t.className,r?t.className=vn((" "+n+" ").replace(" "+o+" "," ")):t.className+=n?" "+o:o)})),e},hasClass:function(e){return un(this[0],e)},each:function(e){return bn(this,e)},on:function(e,t){return this.each(function(){en.bind(this,e,t)})},off:function(e,t){return this.each(function(){en.unbind(this,e,t)})},trigger:function(e){return this.each(function(){"object"==typeof e?en.fire(this,e.type,e):en.fire(this,e)})},show:function(){return this.css("display","")},hide:function(){return this.css("display","none")},slice:function(){return new pn(Qt.apply(this,arguments))},eq:function(e){return-1===e?this.slice(e):this.slice(e,+e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},find:function(e){var t,n,r=[];for(t=0,n=this.length;t<n;t++)pn.find(e,this[t],r);return pn(r)},filter:function(n){return pn("function"==typeof n?yn(this.toArray(),function(e,t){return n(t,e)}):pn.filter(n,this.toArray()))},closest:function(n){var r=[];return n instanceof pn&&(n=n[0]),this.each(function(e,t){for(;t;){if("string"==typeof n&&pn(t).is(n)){r.push(t);break}if(t===n){r.push(t);break}t=t.parentNode}}),pn(r)},offset:function(e){var t,n,r,o,i=0,a=0;return e?this.css(e):((t=this[0])&&(r=(n=t.ownerDocument).documentElement,t.getBoundingClientRect&&(i=(o=t.getBoundingClientRect()).left+(r.scrollLeft||n.body.scrollLeft)-r.clientLeft,a=o.top+(r.scrollTop||n.body.scrollTop)-r.clientTop)),{left:i,top:a})},push:Jt,sort:[].sort,splice:[].splice},Yt.extend(pn,{extend:Yt.extend,makeArray:function(e){return(t=e)&&t===t.window||e.nodeType?[e]:Yt.toArray(e);var t},inArray:function(e,t){var n;if(t.indexOf)return t.indexOf(e);for(n=t.length;n--;)if(t[n]===e)return n;return-1},isArray:Yt.isArray,each:bn,trim:vn,grep:yn,find:Tt,expr:Tt.selectors,unique:Tt.uniqueSort,text:Tt.getText,contains:Tt.contains,filter:function(e,t,n){var r=t.length;for(n&&(e=":not("+e+")");r--;)1!==t[r].nodeType&&t.splice(r,1);return t=1===t.length?pn.find.matchesSelector(t[0],e)?[t[0]]:[]:pn.find.matches(e,t)}});var xn=function(e,t,n){var r=[],o=e[t];for("string"!=typeof n&&n instanceof pn&&(n=n[0]);o&&9!==o.nodeType;){if(n!==undefined){if(o===n)break;if("string"==typeof n&&pn(o).is(n))break}1===o.nodeType&&r.push(o),o=o[t]}return r},wn=function(e,t,n,r){var o=[];for(r instanceof pn&&(r=r[0]);e;e=e[t])if(!n||e.nodeType===n){if(r!==undefined){if(e===r)break;if("string"==typeof r&&pn(e).is(r))break}o.push(e)}return o},Nn=function(e,t,n){for(e=e[t];e;e=e[t])if(e.nodeType===n)return e;return null};bn({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return xn(e,"parentNode")},next:function(e){return Nn(e,"nextSibling",1)},prev:function(e){return Nn(e,"previousSibling",1)},children:function(e){return wn(e.firstChild,"nextSibling",1)},contents:function(e){return Yt.toArray(("iframe"===e.nodeName?e.contentDocument||e.contentWindow.document:e).childNodes)}},function(e,r){pn.fn[e]=function(t){var n=[];return this.each(function(){var e=r.call(n,this,t,n);e&&(pn.isArray(e)?n.push.apply(n,e):n.push(e))}),1<this.length&&(tn[e]||(n=pn.unique(n)),0===e.indexOf("parents")&&(n=n.reverse())),n=pn(n),t?n.filter(t):n}}),bn({parentsUntil:function(e,t){return xn(e,"parentNode",t)},nextUntil:function(e,t){return wn(e,"nextSibling",1,t).slice(1)},prevUntil:function(e,t){return wn(e,"previousSibling",1,t).slice(1)}},function(r,o){pn.fn[r]=function(t,e){var n=[];return this.each(function(){var e=o.call(n,this,t,n);e&&(pn.isArray(e)?n.push.apply(n,e):n.push(e))}),1<this.length&&(n=pn.unique(n),0!==r.indexOf("parents")&&"prevUntil"!==r||(n=n.reverse())),n=pn(n),e?n.filter(e):n}}),pn.fn.is=function(e){return!!e&&0<this.filter(e).length},pn.fn.init.prototype=pn.fn,pn.overrideDefaults=function(n){var r,o=function(e,t){return r=r||n(),0===arguments.length&&(e=r.element),t||(t=r.context),new o.fn.init(e,t)};return pn.extend(o,this),o};var En=function(n,r,e){bn(e,function(e,t){n[e]=n[e]||{},n[e][r]=t})};Re.ie&&Re.ie<8&&(En(mn,"get",{maxlength:function(e){var t=e.maxLength;return 2147483647===t?undefined:t},size:function(e){var t=e.size;return 20===t?undefined:t},"class":function(e){return e.className},style:function(e){var t=e.style.cssText;return 0===t.length?undefined:t}}),En(mn,"set",{"class":function(e,t){e.className=t},style:function(e,t){e.style.cssText=t}})),Re.ie&&Re.ie<9&&(dn["float"]="styleFloat",En(gn,"set",{opacity:function(e,t){var n=e.style;null===t||""===t?n.removeAttribute("filter"):(n.zoom=1,n.filter="alpha(opacity="+100*t+")")}})),pn.attrHooks=mn,pn.cssHooks=gn;var Sn=function(n){var r,o=!1;return function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o||(o=!0,r=n.apply(null,e)),r}},Tn=function(e,t){var n=function(e,t){for(var n=0;n<e.length;n++){var r=e[n];if(r.test(t))return r}return undefined}(e,t);if(!n)return{major:0,minor:0};var r=function(e){return Number(t.replace(n,"$"+e))};return An(r(1),r(2))},kn=function(){return An(0,0)},An=function(e,t){return{major:e,minor:t}},_n={nu:An,detect:function(e,t){var n=String(t).toLowerCase();return 0===e.length?kn():Tn(e,n)},unknown:kn},Rn="Firefox",Dn=function(e,t){return function(){return t===e}},Bn=function(e){var t=e.current;return{current:t,version:e.version,isEdge:Dn("Edge",t),isChrome:Dn("Chrome",t),isIE:Dn("IE",t),isOpera:Dn("Opera",t),isFirefox:Dn(Rn,t),isSafari:Dn("Safari",t)}},On={unknown:function(){return Bn({current:undefined,version:_n.unknown()})},nu:Bn,edge:H("Edge"),chrome:H("Chrome"),ie:H("IE"),opera:H("Opera"),firefox:H(Rn),safari:H("Safari")},Pn="Windows",Ln="Android",In="Solaris",Mn="FreeBSD",Fn=function(e,t){return function(){return t===e}},Un=function(e){var t=e.current;return{current:t,version:e.version,isWindows:Fn(Pn,t),isiOS:Fn("iOS",t),isAndroid:Fn(Ln,t),isOSX:Fn("OSX",t),isLinux:Fn("Linux",t),isSolaris:Fn(In,t),isFreeBSD:Fn(Mn,t)}},zn={unknown:function(){return Un({current:undefined,version:_n.unknown()})},nu:Un,windows:H(Pn),ios:H("iOS"),android:H(Ln),linux:H("Linux"),osx:H("OSX"),solaris:H(In),freebsd:H(Mn)},Vn=function(e,t){var n=String(t).toLowerCase();return V(e,function(e){return e.search(n)})},qn=function(e,n){return Vn(e,n).map(function(e){var t=_n.detect(e.versionRegexes,n);return{current:e.name,version:t}})},Hn=function(e,n){return Vn(e,n).map(function(e){var t=_n.detect(e.versionRegexes,n);return{current:e.name,version:t}})},jn=function(e,t){return-1!==e.indexOf(t)},$n=function(e){return e.replace(/^\s+|\s+$/g,"")},Wn=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,Kn=function(t){return function(e){return jn(e,t)}},Xn=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:function(e){return jn(e,"edge/")&&jn(e,"chrome")&&jn(e,"safari")&&jn(e,"applewebkit")}},{name:"Chrome",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,Wn],search:function(e){return jn(e,"chrome")&&!jn(e,"chromeframe")}},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:function(e){return jn(e,"msie")||jn(e,"trident")}},{name:"Opera",versionRegexes:[Wn,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:Kn("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:Kn("firefox")},{name:"Safari",versionRegexes:[Wn,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(e){return(jn(e,"safari")||jn(e,"mobile/"))&&jn(e,"applewebkit")}}],Yn=[{name:"Windows",search:Kn("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:function(e){return jn(e,"iphone")||jn(e,"ipad")},versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:Kn("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"OSX",search:Kn("os x"),versionRegexes:[/.*?os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:Kn("linux"),versionRegexes:[]},{name:"Solaris",search:Kn("sunos"),versionRegexes:[]},{name:"FreeBSD",search:Kn("freebsd"),versionRegexes:[]}],Gn={browsers:H(Xn),oses:H(Yn)},Jn=function(e){var t,n,r,o,i,a,u,s,c,l,f,d=Gn.browsers(),m=Gn.oses(),g=qn(d,e).fold(On.unknown,On.nu),p=Hn(m,e).fold(zn.unknown,zn.nu);return{browser:g,os:p,deviceType:(n=g,r=e,o=(t=p).isiOS()&&!0===/ipad/i.test(r),i=t.isiOS()&&!o,a=t.isAndroid()&&3===t.version.major,u=t.isAndroid()&&4===t.version.major,s=o||a||u&&!0===/mobile/i.test(r),c=t.isiOS()||t.isAndroid(),l=c&&!s,f=n.isSafari()&&t.isiOS()&&!1===/safari/i.test(r),{isiPad:H(o),isiPhone:H(i),isTablet:H(s),isPhone:H(l),isTouch:H(c),isAndroid:t.isAndroid,isiOS:t.isiOS,isWebView:H(f)})}},Qn={detect:Sn(function(){var e=navigator.userAgent;return Jn(e)})},Zn=function(e){if(null===e||e===undefined)throw new Error("Node cannot be null or undefined");return{dom:H(e)}},er={fromHtml:function(e,t){var n=(t||document).createElement("div");if(n.innerHTML=e,!n.hasChildNodes()||1<n.childNodes.length)throw console.error("HTML does not have a single root node",e),"HTML must have a single root node";return Zn(n.childNodes[0])},fromTag:function(e,t){var n=(t||document).createElement(e);return Zn(n)},fromText:function(e,t){var n=(t||document).createTextNode(e);return Zn(n)},fromDom:Zn,fromPoint:function(e,t,n){var r=e.dom();return A.from(r.elementFromPoint(t,n)).map(Zn)}},tr={ATTRIBUTE:Node.ATTRIBUTE_NODE,CDATA_SECTION:Node.CDATA_SECTION_NODE,COMMENT:Node.COMMENT_NODE,DOCUMENT:Node.DOCUMENT_NODE,DOCUMENT_TYPE:Node.DOCUMENT_TYPE_NODE,DOCUMENT_FRAGMENT:Node.DOCUMENT_FRAGMENT_NODE,ELEMENT:Node.ELEMENT_NODE,TEXT:Node.TEXT_NODE,PROCESSING_INSTRUCTION:Node.PROCESSING_INSTRUCTION_NODE,ENTITY_REFERENCE:Node.ENTITY_REFERENCE_NODE,ENTITY:Node.ENTITY_NODE,NOTATION:Node.NOTATION_NODE},nr=function(e){return e.dom().nodeName.toLowerCase()},rr=function(e){return e.dom().nodeType},or=function(t){return function(e){return rr(e)===t}},ir=or(tr.ELEMENT),ar=or(tr.TEXT),ur=or(tr.DOCUMENT),sr={name:nr,type:rr,value:function(e){return e.dom().nodeValue},isElement:ir,isText:ar,isDocument:ur,isComment:function(e){return rr(e)===tr.COMMENT||"#comment"===nr(e)}},cr=Object.keys,lr=function(e,t){for(var n=cr(e),r=0,o=n.length;r<o;r++){var i=n[r];t(e[i],i,e)}},fr=function(e,r){return dr(e,function(e,t,n){return{k:t,v:r(e,t,n)}})},dr=function(r,o){var i={};return lr(r,function(e,t){var n=o(e,t,r);i[n.k]=n.v}),i},mr=function(e,t,n){if(!(k(n)||B(n)||P(n)))throw console.error("Invalid call to Attr.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")},gr=function(e,t,n){mr(e.dom(),t,n)},pr=function(e,t){var n=e.dom().getAttribute(t);return null===n?undefined:n},hr=function(e,t){var n=e.dom();return!(!n||!n.hasAttribute)&&n.hasAttribute(t)},vr={clone:function(e){return z(e.dom().attributes,function(e,t){return e[t.name]=t.value,e},{})},set:gr,setAll:function(e,t){var n=e.dom();lr(t,function(e,t){mr(n,t,e)})},get:pr,has:hr,remove:function(e,t){e.dom().removeAttribute(t)},hasNone:function(e){var t=e.dom().attributes;return t===undefined||null===t||0===t.length},transfer:function(o,i,e){sr.isElement(o)&&sr.isElement(i)&&F(e,function(e){var t,n,r;n=i,hr(t=o,r=e)&&!hr(n,r)&&gr(n,r,pr(t,r))})}},br=Sn(function(){return yr(er.fromDom(document))}),yr=function(e){var t=e.dom().body;if(null===t||t===undefined)throw"Body is not available yet";return er.fromDom(t)},Cr={body:br,getBody:yr,inBody:function(e){var t=sr.isText(e)?e.dom().parentNode:e.dom();return t!==undefined&&null!==t&&t.ownerDocument.body.contains(t)}},xr=function(e){return e.style!==undefined},wr=function(e,t,n){if(!k(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);xr(e)&&e.style.setProperty(t,n)},Nr=function(e,t){return xr(e)?e.style.getPropertyValue(t):""},Er=function(e,t){var n=e.dom(),r=Nr(n,t);return A.from(r).filter(function(e){return 0<e.length})},Sr=function(e,t){var n=e.dom();lr(t,function(e,t){wr(n,t,e)})},Tr=function(e,t){var n=e.dom(),r=window.getComputedStyle(n).getPropertyValue(t),o=""!==r||Cr.inBody(e)?r:Nr(n,t);return null===o?undefined:o},kr=Er,Ar=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return function(){for(var n=[],e=0;e<arguments.length;e++)n[e]=arguments[e];if(t.length!==n.length)throw new Error('Wrong number of arguments to struct. Expected "['+t.length+']", got '+n.length+" arguments");var r={};return F(t,function(e,t){r[e]=H(n[t])}),r}},_r=function(e,t){for(var n=[],r=function(e){return n.push(e),t(e)},o=t(e);(o=o.bind(r)).isSome(););return n},Rr=function(){return ie.getOrDie("Node")},Dr=function(e,t,n){return 0!=(e.compareDocumentPosition(t)&n)},Br=function(e,t){return Dr(e,t,Rr().DOCUMENT_POSITION_CONTAINED_BY)},Or=tr.ELEMENT,Pr=tr.DOCUMENT,Lr=function(e){return e.nodeType!==Or&&e.nodeType!==Pr||0===e.childElementCount},Ir={all:function(e,t){var n=t===undefined?document:t.dom();return Lr(n)?[]:$(n.querySelectorAll(e),er.fromDom)},is:function(e,t){var n=e.dom();if(n.nodeType!==Or)return!1;if(n.matches!==undefined)return n.matches(t);if(n.msMatchesSelector!==undefined)return n.msMatchesSelector(t);if(n.webkitMatchesSelector!==undefined)return n.webkitMatchesSelector(t);if(n.mozMatchesSelector!==undefined)return n.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")},one:function(e,t){var n=t===undefined?document:t.dom();return Lr(n)?A.none():A.from(n.querySelector(e)).map(er.fromDom)}},Mr=function(e,t){return e.dom()===t.dom()},Fr=Qn.detect().browser.isIE()?function(e,t){return Br(e.dom(),t.dom())}:function(e,t){var n=e.dom(),r=t.dom();return n!==r&&n.contains(r)},Ur={eq:Mr,isEqualNode:function(e,t){return e.dom().isEqualNode(t.dom())},member:function(e,t){return M(t,b(Mr,e))},contains:Fr,is:Ir.is},zr=function(e){var t=e.dom();return A.from(t.parentNode).map(er.fromDom)},Vr=function(e){var t=e.dom();return A.from(t.previousSibling).map(er.fromDom)},qr=function(e){var t=e.dom();return A.from(t.nextSibling).map(er.fromDom)},Hr=function(e){var t=e.dom();return $(t.childNodes,er.fromDom)},jr=function(e,t){var n=e.dom().childNodes;return A.from(n[t]).map(er.fromDom)},$r=Ar("element","offset"),Wr={owner:function(e){return er.fromDom(e.dom().ownerDocument)},defaultView:function(e){var t=e.dom().ownerDocument.defaultView;return er.fromDom(t)},documentElement:function(e){return er.fromDom(e.dom().ownerDocument.documentElement)},parent:zr,findIndex:function(n){return zr(n).bind(function(e){var t=Hr(e);return K(t,function(e){return Ur.eq(n,e)})})},parents:function(e,t){for(var n=O(t)?t:H(!1),r=e.dom(),o=[];null!==r.parentNode&&r.parentNode!==undefined;){var i=r.parentNode,a=er.fromDom(i);if(o.push(a),!0===n(a))break;r=i}return o},siblings:function(t){return zr(t).map(Hr).map(function(e){return U(e,function(e){return!Ur.eq(t,e)})}).getOr([])},prevSibling:Vr,offsetParent:function(e){var t=e.dom();return A.from(t.offsetParent).map(er.fromDom)},prevSiblings:function(e){return t=_r(e,Vr),(n=Q.call(t,0)).reverse(),n;var t,n},nextSibling:qr,nextSiblings:function(e){return _r(e,qr)},children:Hr,child:jr,firstChild:function(e){return jr(e,0)},lastChild:function(e){return jr(e,e.dom().childNodes.length-1)},childNodesCount:function(e){return e.dom().childNodes.length},hasChildNodes:function(e){return e.dom().hasChildNodes()},leaf:function(e,t){var n=Hr(e);return 0<n.length&&t<n.length?$r(n[t],0):$r(e,t)}},Kr=Qn.detect().browser,Xr=function(e){return V(e,sr.isElement)},Yr={getPos:function(e,t,n){var r,o,i,a=0,u=0,s=e.ownerDocument;if(n=n||e,t){if(n===e&&t.getBoundingClientRect&&"static"===Tr(er.fromDom(e),"position"))return{x:a=(o=t.getBoundingClientRect()).left+(s.documentElement.scrollLeft||e.scrollLeft)-s.documentElement.clientLeft,y:u=o.top+(s.documentElement.scrollTop||e.scrollTop)-s.documentElement.clientTop};for(r=t;r&&r!==n&&r.nodeType;)a+=r.offsetLeft||0,u+=r.offsetTop||0,r=r.offsetParent;for(r=t.parentNode;r&&r!==n&&r.nodeType;)a-=r.scrollLeft||0,u-=r.scrollTop||0,r=r.parentNode;u+=(i=er.fromDom(t),Kr.isFirefox()&&"table"===sr.name(i)?Xr(Wr.children(i)).filter(function(e){return"caption"===sr.name(e)}).bind(function(o){return Xr(Wr.nextSiblings(o)).map(function(e){var t=e.dom().offsetTop,n=o.dom().offsetTop,r=o.dom().offsetHeight;return t<=n?-r:0})}).getOr(0):0)}return{x:a,y:u}}},Gr=function(e){var n=A.none(),t=[],r=function(e){o()?a(e):t.push(e)},o=function(){return n.isSome()},i=function(e){F(e,a)},a=function(t){n.each(function(e){setTimeout(function(){t(e)},0)})};return e(function(e){n=A.some(e),i(t),t=[]}),{get:r,map:function(n){return Gr(function(t){r(function(e){t(n(e))})})},isReady:o}},Jr={nu:Gr,pure:function(t){return Gr(function(e){e(t)})}},Qr=function(t){var e=function(e){var r;t((r=e,function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=this;setTimeout(function(){r.apply(n,e)},0)}))};return{map:function(r){return Qr(function(n){e(function(e){var t=r(e);n(t)})})},bind:function(n){return Qr(function(t){e(function(e){n(e).get(t)})})},anonBind:function(n){return Qr(function(t){e(function(e){n.get(t)})})},toLazy:function(){return Jr.nu(e)},get:e}},Zr={nu:Qr,pure:function(t){return Qr(function(e){e(t)})}},eo=function(a,e){return e(function(r){var o=[],i=0;0===a.length?r([]):F(a,function(e,t){var n;e.get((n=t,function(e){o[n]=e,++i>=a.length&&r(o)}))})})},to=function(e){return eo(e,Zr.nu)},no=function(n){return{is:function(e){return n===e},isValue:C,isError:y,getOr:H(n),getOrThunk:H(n),getOrDie:H(n),or:function(e){return no(n)},orThunk:function(e){return no(n)},fold:function(e,t){return t(n)},map:function(e){return no(e(n))},each:function(e){e(n)},bind:function(e){return e(n)},exists:function(e){return e(n)},forall:function(e){return e(n)},toOption:function(){return A.some(n)}}},ro=function(n){return{is:y,isValue:y,isError:C,getOr:j,getOrThunk:function(e){return e()},getOrDie:function(){return e=String(n),function(){throw new Error(e)}();var e},or:function(e){return e},orThunk:function(e){return e()},fold:function(e,t){return e(n)},map:function(e){return ro(n)},each:v,bind:function(e){return ro(n)},exists:y,forall:C,toOption:A.none}},oo={value:no,error:ro};function io(e,u){var t=e,n=function(e,t,n,r){var o,i;if(e){if(!r&&e[t])return e[t];if(e!==u){if(o=e[n])return o;for(i=e.parentNode;i&&i!==u;i=i.parentNode)if(o=i[n])return o}}};this.current=function(){return t},this.next=function(e){return t=n(t,"firstChild","nextSibling",e)},this.prev=function(e){return t=n(t,"lastChild","previousSibling",e)},this.prev2=function(e){return t=function(e,t,n,r){var o,i,a;if(e){if(o=e[n],u&&o===u)return;if(o){if(!r)for(a=o[t];a;a=a[t])if(!a[t])return a;return o}if((i=e.parentNode)&&i!==u)return i}}(t,"lastChild","previousSibling",e)}}var ao,uo,so,co=function(t){var n;return function(e){return(n=n||function(e,t){for(var n={},r=0,o=e.length;r<o;r++){var i=e[r];n[String(i)]=t(i,r)}return n}(t,H(!0))).hasOwnProperty(sr.name(e))}},lo=co(["h1","h2","h3","h4","h5","h6"]),fo=co(["article","aside","details","div","dt","figcaption","footer","form","fieldset","header","hgroup","html","main","nav","section","summary","body","p","dl","multicol","dd","figure","address","center","blockquote","h1","h2","h3","h4","h5","h6","listing","xmp","pre","plaintext","menu","dir","ul","ol","li","hr","table","tbody","thead","tfoot","th","tr","td","caption"]),mo=function(e){return sr.isElement(e)&&!fo(e)},go=function(e){return sr.isElement(e)&&"br"===sr.name(e)},po=co(["h1","h2","h3","h4","h5","h6","p","div","address","pre","form","blockquote","center","dir","fieldset","header","footer","article","section","hgroup","aside","nav","figure"]),ho=co(["ul","ol","dl"]),vo=co(["li","dd","dt"]),bo=co(["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param","embed","source","wbr","track"]),yo=co(["thead","tbody","tfoot"]),Co=co(["td","th"]),xo=co(["pre","script","textarea","style"]),wo=function(t){return function(e){return!!e&&e.nodeType===t}},No=wo(1),Eo=function(e){var r=e.toLowerCase().split(" ");return function(e){var t,n;if(e&&e.nodeType)for(n=e.nodeName.toLowerCase(),t=0;t<r.length;t++)if(n===r[t])return!0;return!1}},So=function(t){return function(e){if(No(e)){if(e.contentEditable===t)return!0;if(e.getAttribute("data-mce-contenteditable")===t)return!0}return!1}},To=wo(3),ko=wo(8),Ao=wo(9),_o=Eo("br"),Ro=So("true"),Do=So("false"),Bo={isText:To,isElement:No,isComment:ko,isDocument:Ao,isBr:_o,isContentEditableTrue:Ro,isContentEditableFalse:Do,matchNodeNames:Eo,hasPropValue:function(t,n){return function(e){return No(e)&&e[t]===n}},hasAttribute:function(t,e){return function(e){return No(e)&&e.hasAttribute(t)}},hasAttributeValue:function(t,n){return function(e){return No(e)&&e.getAttribute(t)===n}},matchStyleValues:function(r,e){var o=e.toLowerCase().split(" ");return function(e){var t;if(No(e))for(t=0;t<o.length;t++){var n=e.ownerDocument.defaultView.getComputedStyle(e,null);if((n?n.getPropertyValue(r):null)===o[t])return!0}return!1}},isBogus:function(e){return No(e)&&e.hasAttribute("data-mce-bogus")},isBogusAll:function(e){return No(e)&&"all"===e.getAttribute("data-mce-bogus")},isTable:function(e){return No(e)&&"TABLE"===e.tagName}},Oo=function(e){return e&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")},Po=function(e,t){var n,r=t.childNodes;if(!Bo.isElement(t)||!Oo(t)){for(n=r.length-1;0<=n;n--)Po(e,r[n]);if(!1===Bo.isDocument(t)){if(Bo.isText(t)&&0<t.nodeValue.length){var o=Yt.trim(t.nodeValue).length;if(e.isBlock(t.parentNode)||0<o)return;if(0===o&&(a=(i=t).previousSibling&&"SPAN"===i.previousSibling.nodeName,u=i.nextSibling&&"SPAN"===i.nextSibling.nodeName,a&&u))return}else if(Bo.isElement(t)&&(1===(r=t.childNodes).length&&Oo(r[0])&&t.parentNode.insertBefore(r[0],t),r.length||bo(er.fromDom(t))))return;e.remove(t)}var i,a,u;return t}},Lo={trimNode:Po},Io=Yt.makeMap,Mo=/[&<>\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Fo=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,Uo=/[<>&\"\']/g,zo=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,Vo={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};uo={'"':""","'":"'","<":"<",">":">","&":"&","`":"`"},so={"<":"<",">":">","&":"&",""":'"',"'":"'"};var qo=function(e,t){var n,r,o,i={};if(e){for(e=e.split(","),t=t||10,n=0;n<e.length;n+=2)r=String.fromCharCode(parseInt(e[n],t)),uo[r]||(o="&"+e[n+1]+";",i[r]=o,i[o]=r);return i}};ao=qo("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var Ho=function(e,t){return e.replace(t?Mo:Fo,function(e){return uo[e]||e})},jo=function(e,t){return e.replace(t?Mo:Fo,function(e){return 1<e.length?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":uo[e]||"&#"+e.charCodeAt(0)+";"})},$o=function(e,t,n){return n=n||ao,e.replace(t?Mo:Fo,function(e){return uo[e]||n[e]||e})},Wo={encodeRaw:Ho,encodeAllRaw:function(e){return(""+e).replace(Uo,function(e){return uo[e]||e})},encodeNumeric:jo,encodeNamed:$o,getEncodeFunc:function(e,t){var n=qo(t)||ao,r=Io(e.replace(/\+/g,","));return r.named&&r.numeric?function(e,t){return e.replace(t?Mo:Fo,function(e){return uo[e]!==undefined?uo[e]:n[e]!==undefined?n[e]:1<e.length?"&#"+(1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536)+";":"&#"+e.charCodeAt(0)+";"})}:r.named?t?function(e,t){return $o(e,t,n)}:$o:r.numeric?jo:Ho},decode:function(e){return e.replace(zo,function(e,t){return t?65535<(t="x"===t.charAt(0).toLowerCase()?parseInt(t.substr(1),16):parseInt(t,10))?(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t))):Vo[t]||String.fromCharCode(t):so[e]||ao[e]||(n=e,(r=er.fromTag("div").dom()).innerHTML=n,r.textContent||r.innerText||n);var n,r})}},Ko={},Xo={},Yo=Yt.makeMap,Go=Yt.each,Jo=Yt.extend,Qo=Yt.explode,Zo=Yt.inArray,ei=function(e,t){return(e=Yt.trim(e))?e.split(t||" "):[]},ti=function(e){var u,t,n,r,o,i,s={},a=function(e,t,n){var r,o,i,a=function(e,t){var n,r,o={};for(n=0,r=e.length;n<r;n++)o[e[n]]=t||{};return o};for(t=t||"","string"==typeof(n=n||[])&&(n=ei(n)),r=(e=ei(e)).length;r--;)i={attributes:a(o=ei([u,t].join(" "))),attributesOrder:o,children:a(n,Xo)},s[e[r]]=i},c=function(e,t){var n,r,o,i;for(n=(e=ei(e)).length,t=ei(t);n--;)for(r=s[e[n]],o=0,i=t.length;o<i;o++)r.attributes[t[o]]={},r.attributesOrder.push(t[o])};return Ko[e]?Ko[e]:(u="id accesskey class dir lang style tabindex title role",t="address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul",n="a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment","html4"!==e&&(u+=" contenteditable contextmenu draggable dropzone hidden spellcheck translate",t+=" article aside details dialog figure header footer hgroup section nav",n+=" audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen"),"html5-strict"!==e&&(u+=" xml:lang",n=[n,i="acronym applet basefont big font strike tt"].join(" "),Go(ei(i),function(e){a(e,"",n)}),t=[t,o="center dir isindex noframes"].join(" "),r=[t,n].join(" "),Go(ei(o),function(e){a(e,"",r)})),r=r||[t,n].join(" "),a("html","manifest","head body"),a("head","","base command link meta noscript script style title"),a("title hr noscript br"),a("base","href target"),a("link","href rel media hreflang type sizes hreflang"),a("meta","name http-equiv content charset"),a("style","media type scoped"),a("script","src async defer type charset"),a("body","onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload",r),a("address dt dd div caption","",r),a("h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn","",n),a("blockquote","cite",r),a("ol","reversed start type","li"),a("ul","","li"),a("li","value",r),a("dl","","dt dd"),a("a","href target rel media hreflang type",n),a("q","cite",n),a("ins del","cite datetime",r),a("img","src sizes srcset alt usemap ismap width height"),a("iframe","src name width height",r),a("embed","src type width height"),a("object","data type typemustmatch name usemap form width height",[r,"param"].join(" ")),a("param","name value"),a("map","name",[r,"area"].join(" ")),a("area","alt coords shape href target rel media hreflang type"),a("table","border","caption colgroup thead tfoot tbody tr"+("html4"===e?" col":"")),a("colgroup","span","col"),a("col","span"),a("tbody thead tfoot","","tr"),a("tr","","td th"),a("td","colspan rowspan headers",r),a("th","colspan rowspan headers scope abbr",r),a("form","accept-charset action autocomplete enctype method name novalidate target",r),a("fieldset","disabled form name",[r,"legend"].join(" ")),a("label","form for",n),a("input","accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width"),a("button","disabled form formaction formenctype formmethod formnovalidate formtarget name type value","html4"===e?r:n),a("select","disabled form multiple name required size","option optgroup"),a("optgroup","disabled label","option"),a("option","disabled label selected value"),a("textarea","cols dirname disabled form maxlength name readonly required rows wrap"),a("menu","type label",[r,"li"].join(" ")),a("noscript","",r),"html4"!==e&&(a("wbr"),a("ruby","",[n,"rt rp"].join(" ")),a("figcaption","",r),a("mark rt rp summary bdi","",n),a("canvas","width height",r),a("video","src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered",[r,"track source"].join(" ")),a("audio","src crossorigin preload autoplay mediagroup loop muted controls buffered volume",[r,"track source"].join(" ")),a("picture","","img source"),a("source","src srcset type media sizes"),a("track","kind src srclang label default"),a("datalist","",[n,"option"].join(" ")),a("article section nav aside header footer","",r),a("hgroup","","h1 h2 h3 h4 h5 h6"),a("figure","",[r,"figcaption"].join(" ")),a("time","datetime",n),a("dialog","open",r),a("command","type label icon disabled checked radiogroup command"),a("output","for form name",n),a("progress","value max",n),a("meter","value min max low high optimum",n),a("details","open",[r,"summary"].join(" ")),a("keygen","autofocus challenge disabled form keytype name")),"html5-strict"!==e&&(c("script","language xml:space"),c("style","xml:space"),c("object","declare classid code codebase codetype archive standby align border hspace vspace"),c("embed","align name hspace vspace"),c("param","valuetype type"),c("a","charset name rev shape coords"),c("br","clear"),c("applet","codebase archive code object alt name width height align hspace vspace"),c("img","name longdesc align border hspace vspace"),c("iframe","longdesc frameborder marginwidth marginheight scrolling align"),c("font basefont","size color face"),c("input","usemap align"),c("select","onchange"),c("textarea"),c("h1 h2 h3 h4 h5 h6 div p legend caption","align"),c("ul","type compact"),c("li","type"),c("ol dl menu dir","compact"),c("pre","width xml:space"),c("hr","align noshade size width"),c("isindex","prompt"),c("table","summary width frame rules cellspacing cellpadding align bgcolor"),c("col","width align char charoff valign"),c("colgroup","width align char charoff valign"),c("thead","align char charoff valign"),c("tr","align char charoff valign bgcolor"),c("th","axis align char charoff valign nowrap bgcolor width height"),c("form","accept"),c("td","abbr axis scope align char charoff valign nowrap bgcolor width height"),c("tfoot","align char charoff valign"),c("tbody","align char charoff valign"),c("area","nohref"),c("body","background bgcolor text link vlink alink")),"html4"!==e&&(c("input button select textarea","autofocus"),c("input textarea","placeholder"),c("a","download"),c("link script img","crossorigin"),c("iframe","sandbox seamless allowfullscreen")),Go(ei("a form meter progress dfn"),function(e){s[e]&&delete s[e].children[e]}),delete s.caption.children.table,delete s.script,Ko[e]=s)},ni=function(e,n){var r;return e&&(r={},"string"==typeof e&&(e={"*":e}),Go(e,function(e,t){r[t]=r[t.toUpperCase()]="map"===n?Yo(e,/[, ]/):Qo(e,/[, ]/)})),r};function ri(i){var e,t,n,r,o,a,u,s,c,l,f,d,m,N={},g={},E=[],p={},h={},v=function(e,t,n){var r=i[e];return r?r=Yo(r,/[, ]/,Yo(r.toUpperCase(),/[, ]/)):(r=Ko[e])||(r=Yo(t," ",Yo(t.toUpperCase()," ")),r=Jo(r,n),Ko[e]=r),r};n=ti((i=i||{}).schema),!1===i.verify_html&&(i.valid_elements="*[*]"),e=ni(i.valid_styles),t=ni(i.invalid_styles,"map"),s=ni(i.valid_classes,"map"),r=v("whitespace_elements","pre script noscript style textarea video audio iframe object code"),o=v("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr"),a=v("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr track"),u=v("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls"),l=v("non_empty_elements","td th iframe video audio object script pre code",a),f=v("move_caret_before_on_enter_elements","table",l),d=v("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure"),c=v("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption details summary",d),m=v("text_inline_elements","span strong b em i font strike u var cite dfn code mark q sup sub samp"),Go((i.special||"script noscript noframes noembed title style textarea xmp").split(" "),function(e){h[e]=new RegExp("</"+e+"[^>]*>","gi")});var S=function(e){return new RegExp("^"+e.replace(/([?+*])/g,".$1")+"$")},b=function(e){var t,n,r,o,i,a,u,s,c,l,f,d,m,g,p,h,v,b,y,C=/^([#+\-])?([^\[!\/]+)(?:\/([^\[!]+))?(?:(!?)\[([^\]]+)\])?$/,x=/^([!\-])?(\w+[\\:]:\w+|[^=:<]+)?(?:([=:<])(.*))?$/,w=/[*?+]/;if(e)for(e=ei(e,","),N["@"]&&(h=N["@"].attributes,v=N["@"].attributesOrder),t=0,n=e.length;t<n;t++)if(i=C.exec(e[t])){if(g=i[1],c=i[2],p=i[3],s=i[5],a={attributes:d={},attributesOrder:m=[]},"#"===g&&(a.paddEmpty=!0),"-"===g&&(a.removeEmpty=!0),"!"===i[4]&&(a.removeEmptyAttrs=!0),h){for(b in h)d[b]=h[b];m.push.apply(m,v)}if(s)for(r=0,o=(s=ei(s,"|")).length;r<o;r++)if(i=x.exec(s[r])){if(u={},f=i[1],l=i[2].replace(/[\\:]:/g,":"),g=i[3],y=i[4],"!"===f&&(a.attributesRequired=a.attributesRequired||[],a.attributesRequired.push(l),u.required=!0),"-"===f){delete d[l],m.splice(Zo(m,l),1);continue}g&&("="===g&&(a.attributesDefault=a.attributesDefault||[],a.attributesDefault.push({name:l,value:y}),u.defaultValue=y),":"===g&&(a.attributesForced=a.attributesForced||[],a.attributesForced.push({name:l,value:y}),u.forcedValue=y),"<"===g&&(u.validValues=Yo(y,"?"))),w.test(l)?(a.attributePatterns=a.attributePatterns||[],u.pattern=S(l),a.attributePatterns.push(u)):(d[l]||m.push(l),d[l]=u)}h||"@"!==c||(h=d,v=m),p&&(a.outputName=c,N[p]=a),w.test(c)?(a.pattern=S(c),E.push(a)):N[c]=a}},y=function(e){N={},E=[],b(e),Go(n,function(e,t){g[t]=e.children})},C=function(e){var a=/^(~)?(.+)$/;e&&(Ko.text_block_elements=Ko.block_elements=null,Go(ei(e,","),function(e){var t=a.exec(e),n="~"===t[1],r=n?"span":"div",o=t[2];if(g[o]=g[r],p[o]=r,n||(c[o.toUpperCase()]={},c[o]={}),!N[o]){var i=N[r];delete(i=Jo({},i)).removeEmptyAttrs,delete i.removeEmpty,N[o]=i}Go(g,function(e,t){e[r]&&(g[t]=e=Jo({},g[t]),e[o]=e[r])})}))},x=function(e){var o=/^([+\-]?)(\w+)\[([^\]]+)\]$/;Ko[i.schema]=null,e&&Go(ei(e,","),function(e){var t,n,r=o.exec(e);r&&(n=r[1],t=n?g[r[2]]:g[r[2]]={"#comment":{}},t=g[r[2]],Go(ei(r[3],"|"),function(e){"-"===n?delete t[e]:t[e]={}}))})},w=function(e){var t,n=N[e];if(n)return n;for(t=E.length;t--;)if((n=E[t]).pattern.test(e))return n};return i.valid_elements?y(i.valid_elements):(Go(n,function(e,t){N[t]={attributes:e.attributes,attributesOrder:e.attributesOrder},g[t]=e.children}),"html5"!==i.schema&&Go(ei("strong/b em/i"),function(e){e=ei(e,"/"),N[e[1]].outputName=e[0]}),Go(ei("ol ul sub sup blockquote span font a table tbody tr strong em b i"),function(e){N[e]&&(N[e].removeEmpty=!0)}),Go(ei("p h1 h2 h3 h4 h5 h6 th td pre div address caption li"),function(e){N[e].paddEmpty=!0}),Go(ei("span"),function(e){N[e].removeEmptyAttrs=!0})),C(i.custom_elements),x(i.valid_children),b(i.extended_valid_elements),x("+ol[ul|ol],+ul[ul|ol]"),Go({dd:"dl",dt:"dl",li:"ul ol",td:"tr",th:"tr",tr:"tbody thead tfoot",tbody:"table",thead:"table",tfoot:"table",legend:"fieldset",area:"map",param:"video audio object"},function(e,t){N[t]&&(N[t].parentsRequired=ei(e))}),i.invalid_elements&&Go(Qo(i.invalid_elements),function(e){N[e]&&delete N[e]}),w("span")||b("span[!data-mce-type|*]"),{children:g,elements:N,getValidStyles:function(){return e},getValidClasses:function(){return s},getBlockElements:function(){return c},getInvalidStyles:function(){return t},getShortEndedElements:function(){return a},getTextBlockElements:function(){return d},getTextInlineElements:function(){return m},getBoolAttrs:function(){return u},getElementRule:w,getSelfClosingElements:function(){return o},getNonEmptyElements:function(){return l},getMoveCaretBeforeOnEnterElements:function(){return f},getWhiteSpaceElements:function(){return r},getSpecialElements:function(){return h},isValidChild:function(e,t){var n=g[e.toLowerCase()];return!(!n||!n[t.toLowerCase()])},isValid:function(e,t){var n,r,o=w(e);if(o){if(!t)return!0;if(o.attributes[t])return!0;if(n=o.attributePatterns)for(r=n.length;r--;)if(n[r].pattern.test(e))return!0}return!1},getCustomElements:function(){return p},addValidElements:b,setValidElements:y,addCustomElements:C,addValidChildren:x}}var oi=function(e,t,n,r){var o=function(e){return 1<(e=parseInt(e,10).toString(16)).length?e:"0"+e};return"#"+o(t)+o(n)+o(r)};function ii(y,e){var C,t,c,l,x=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,w=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,N=/\s*([^:]+):\s*([^;]+);?/g,E=/\s+$/,S={},T="\ufeff";for(y=y||{},e&&(c=e.getValidStyles(),l=e.getInvalidStyles()),t=("\\\" \\' \\; \\: ; : "+T).split(" "),C=0;C<t.length;C++)S[t[C]]=T+C,S[T+C]=t[C];return{toHex:function(e){return e.replace(x,oi)},parse:function(e){var t,n,r,o,i,a,u,s,c={},l=y.url_converter,f=y.url_converter_scope||this,d=function(e,t,n){var r,o,i,a;if((r=c[e+"-top"+t])&&(o=c[e+"-right"+t])&&(i=c[e+"-bottom"+t])&&(a=c[e+"-left"+t])){var u=[r,o,i,a];for(C=u.length-1;C--&&u[C]===u[C+1];);-1<C&&n||(c[e+t]=-1===C?u[0]:u.join(" "),delete c[e+"-top"+t],delete c[e+"-right"+t],delete c[e+"-bottom"+t],delete c[e+"-left"+t])}},m=function(e){var t,n=c[e];if(n){for(t=(n=n.split(" ")).length;t--;)if(n[t]!==n[0])return!1;return c[e]=n[0],!0}},g=function(e){return o=!0,S[e]},p=function(e,t){return o&&(e=e.replace(/\uFEFF[0-9]/g,function(e){return S[e]})),t||(e=e.replace(/\\([\'\";:])/g,"$1")),e},h=function(e){return String.fromCharCode(parseInt(e.slice(1),16))},v=function(e){return e.replace(/\\[0-9a-f]+/gi,h)},b=function(e,t,n,r,o,i){if(o=o||i)return"'"+(o=p(o)).replace(/\'/g,"\\'")+"'";if(t=p(t||n||r),!y.allow_script_urls){var a=t.replace(/[\s\r\n]+/g,"");if(/(java|vb)script:/i.test(a))return"";if(!y.allow_svg_data_urls&&/^data:image\/svg/i.test(a))return""}return l&&(t=l.call(f,t,"style")),"url('"+t.replace(/\'/g,"\\'")+"')"};if(e){for(e=(e=e.replace(/[\u0000-\u001F]/g,"")).replace(/\\[\"\';:\uFEFF]/g,g).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(e){return e.replace(/[;:]/g,g)});t=N.exec(e);)if(N.lastIndex=t.index+t[0].length,n=t[1].replace(E,"").toLowerCase(),r=t[2].replace(E,""),n&&r){if(n=v(n),r=v(r),-1!==n.indexOf(T)||-1!==n.indexOf('"'))continue;if(!y.allow_script_urls&&("behavior"===n||/expression\s*\(|\/\*|\*\//.test(r)))continue;"font-weight"===n&&"700"===r?r="bold":"color"!==n&&"background-color"!==n||(r=r.toLowerCase()),r=(r=r.replace(x,oi)).replace(w,b),c[n]=o?p(r,!0):r}d("border","",!0),d("border","-width"),d("border","-color"),d("border","-style"),d("padding",""),d("margin",""),i="border",u="border-style",s="border-color",m(a="border-width")&&m(u)&&m(s)&&(c[i]=c[a]+" "+c[u]+" "+c[s],delete c[a],delete c[u],delete c[s]),"medium none"===c.border&&delete c.border,"none"===c["border-image"]&&delete c["border-image"]}return c},serialize:function(i,e){var t,n,r,o,a,u="",s=function(e){var t,n,r,o;if(t=c[e])for(n=0,r=t.length;n<r;n++)e=t[n],(o=i[e])&&(u+=(0<u.length?" ":"")+e+": "+o+";")};if(e&&c)s("*"),s(e);else for(t in i)!(n=i[t])||l&&(r=t,o=e,a=void 0,(a=l["*"])&&a[r]||(a=l[o])&&a[r])||(u+=(0<u.length?" ":"")+t+": "+n+";");return u}}}var ai,ui=Yt.each,si=Yt.grep,ci=Re.ie,li=/^([a-z0-9],?)+$/i,fi=/^[ \t\r\n]*$/,di=function(n,r,o){var e={},i=r.keep_values,t={set:function(e,t,n){r.url_converter&&(t=r.url_converter.call(r.url_converter_scope||o(),t,n,e[0])),e.attr("data-mce-"+n,t).attr(n,t)},get:function(e,t){return e.attr("data-mce-"+t)||e.attr(t)}};return e={style:{set:function(e,t){null===t||"object"!=typeof t?(i&&e.attr("data-mce-style",t),e.attr("style",t)):e.css(t)},get:function(e){var t=e.attr("data-mce-style")||e.attr("style");return t=n.serialize(n.parse(t),e[0].nodeName)}}},i&&(e.href=e.src=t),e},mi=function(e,t){var n=t.attr("style"),r=e.serialize(e.parse(n),t[0].nodeName);r||(r=null),t.attr("data-mce-style",r)},gi=function(e,t){var n,r,o=0;if(e)for(n=e.nodeType,e=e.previousSibling;e;e=e.previousSibling)r=e.nodeType,(!t||3!==r||r!==n&&e.nodeValue.length)&&(o++,n=r);return o};function pi(a,u){var s,c=this;void 0===u&&(u={});var r={},i=window,o={},t=0,e=function(m,e){var g,p=0,h={};g=(e=e||{}).maxLoadTime||5e3;var v=function(e){m.getElementsByTagName("head")[0].appendChild(e)},n=function(e,t,n){var o,r,i,a,u=function(){for(var e=a.passed,t=e.length;t--;)e[t]();a.status=2,a.passed=[],a.failed=[]},s=function(){for(var e=a.failed,t=e.length;t--;)e[t]();a.status=3,a.passed=[],a.failed=[]},c=function(e,t){e()||((new Date).getTime()-i<g?Le.setTimeout(t):s())},l=function(){c(function(){for(var e,t,n=m.styleSheets,r=n.length;r--;)if((t=(e=n[r]).ownerNode?e.ownerNode:e.owningElement)&&t.id===o.id)return u(),!0},l)},f=function(){c(function(){try{var e=r.sheet.cssRules;return u(),!!e}catch(t){}},f)};if(e=Yt._addCacheSuffix(e),h[e]?a=h[e]:(a={passed:[],failed:[]},h[e]=a),t&&a.passed.push(t),n&&a.failed.push(n),1!==a.status)if(2!==a.status)if(3!==a.status){if(a.status=1,(o=m.createElement("link")).rel="stylesheet",o.type="text/css",o.id="u"+p++,o.async=!1,o.defer=!1,i=(new Date).getTime(),"onload"in o&&!((d=navigator.userAgent.match(/WebKit\/(\d*)/))&&parseInt(d[1],10)<536))o.onload=l,o.onerror=s;else{if(0<navigator.userAgent.indexOf("Firefox"))return(r=m.createElement("style")).textContent='@import "'+e+'"',f(),void v(r);l()}var d;v(o),o.href=e}else s();else u()},t=function(t){return Zr.nu(function(e){n(t,q(e,H(oo.value(t))),q(e,H(oo.error(t))))})},o=function(e){return e.fold(j,j)};return{load:n,loadAll:function(e,n,r){to($(e,t)).get(function(e){var t=W(e,function(e){return e.isValue()});0<t.fail.length?r(t.fail.map(o)):n(t.pass.map(o))})}}}(a),l=[],f=u.schema?u.schema:ri({}),d=ii({url_converter:u.url_converter,url_converter_scope:u.url_converter_scope},u.schema),m=u.ownEvents?new je(u.proxy):je.Event,n=f.getBlockElements(),g=pn.overrideDefaults(function(){return{context:a,element:V.getRoot()}}),p=function(e){if(e&&a&&"string"==typeof e){var t=a.getElementById(e);return t&&t.id!==e?a.getElementsByName(e)[1]:t}return e},h=function(e){return"string"==typeof e&&(e=p(e)),g(e)},v=function(e,t,n){var r,o,i=h(e);return i.length&&(o=(r=s[t])&&r.get?r.get(i,t):i.attr(t)),void 0===o&&(o=n||""),o},b=function(e){var t=p(e);return t?t.attributes:[]},y=function(e,t,n){var r,o;""===n&&(n=null);var i=h(e);r=i.attr(t),i.length&&((o=s[t])&&o.set?o.set(i,n,t):i.attr(t,n),r!==n&&u.onSetAttrib&&u.onSetAttrib({attrElm:i,attrName:t,attrValue:n}))},C=function(){return u.root_element||a.body},x=function(e,t){return Yr.getPos(a.body,p(e),t)},w=function(e,t,n){var r=h(e);return n?r.css(t):("float"===(t=t.replace(/-(\D)/g,function(e,t){return t.toUpperCase()}))&&(t=Re.ie&&Re.ie<12?"styleFloat":"cssFloat"),r[0]&&r[0].style?r[0].style[t]:undefined)},N=function(e){var t,n;return e=p(e),t=w(e,"width"),n=w(e,"height"),-1===t.indexOf("px")&&(t=0),-1===n.indexOf("px")&&(n=0),{w:parseInt(t,10)||e.offsetWidth||e.clientWidth,h:parseInt(n,10)||e.offsetHeight||e.clientHeight}},E=function(e,t){var n;if(!e)return!1;if(!Array.isArray(e)){if("*"===t)return 1===e.nodeType;if(li.test(t)){var r=t.toLowerCase().split(/,/),o=e.nodeName.toLowerCase();for(n=r.length-1;0<=n;n--)if(r[n]===o)return!0;return!1}if(e.nodeType&&1!==e.nodeType)return!1}var i=Array.isArray(e)?e:[e];return 0<Tt(t,i[0].ownerDocument||i[0],null,i).length},S=function(e,t,n,r){var o,i=[],a=p(e);for(r=r===undefined,n=n||("BODY"!==C().nodeName?C().parentNode:null),Yt.is(t,"string")&&(t="*"===(o=t)?function(e){return 1===e.nodeType}:function(e){return E(e,o)});a&&a!==n&&a.nodeType&&9!==a.nodeType;){if(!t||"function"==typeof t&&t(a)){if(!r)return[a];i.push(a)}a=a.parentNode}return r?i:null},T=function(e,t,n){var r=t;if(e)for("string"==typeof t&&(r=function(e){return E(e,t)}),e=e[n];e;e=e[n])if("function"==typeof r&&r(e))return e;return null},k=function(e,n,r){var o,t="string"==typeof e?p(e):e;if(!t)return!1;if(Yt.isArray(t)&&(t.length||0===t.length))return o=[],ui(t,function(e,t){e&&("string"==typeof e&&(e=p(e)),o.push(n.call(r,e,t)))}),o;var i=r||c;return n.call(i,t)},A=function(e,t){h(e).each(function(e,n){ui(t,function(e,t){y(n,t,e)})})},_=function(e,r){var t=h(e);ci?t.each(function(e,t){if(!1!==t.canHaveHTML){for(;t.firstChild;)t.removeChild(t.firstChild);try{t.innerHTML="<br>"+r,t.removeChild(t.firstChild)}catch(n){pn("<div></div>").html("<br>"+r).contents().slice(1).appendTo(t)}return r}}):t.html(r)},R=function(e,n,r,o,i){return k(e,function(e){var t="string"==typeof n?a.createElement(n):n;return A(t,r),o&&("string"!=typeof o&&o.nodeType?t.appendChild(o):"string"==typeof o&&_(t,o)),i?t:e.appendChild(t)})},D=function(e,t,n){return R(a.createElement(e),e,t,n,!0)},B=Wo.decode,O=Wo.encodeAllRaw,P=function(e,t){var n=h(e);return t?n.each(function(){for(var e;e=this.firstChild;)3===e.nodeType&&0===e.data.length?this.removeChild(e):this.parentNode.insertBefore(e,this)}).remove():n.remove(),1<n.length?n.toArray():n[0]},L=function(e,t,n){h(e).toggleClass(t,n).each(function(){""===this.className&&pn(this).attr("class",null)})},I=function(t,e,n){return k(e,function(e){return Yt.is(e,"array")&&(t=t.cloneNode(!0)),n&&ui(si(e.childNodes),function(e){t.appendChild(e)}),e.parentNode.replaceChild(t,e)})},M=function(){return a.createRange()},F=function(e,t,n,r){if(Yt.isArray(e)){for(var o=e.length;o--;)e[o]=F(e[o],t,n,r);return e}return!u.collect||e!==a&&e!==i||l.push([e,t,n,r]),m.bind(e,t,n,r||V)},U=function(e,t,n){var r;if(Yt.isArray(e)){for(r=e.length;r--;)e[r]=U(e[r],t,n);return e}if(l&&(e===a||e===i))for(r=l.length;r--;){var o=l[r];e!==o[0]||t&&t!==o[1]||n&&n!==o[2]||m.unbind(o[0],o[1],o[2])}return m.unbind(e,t,n)},z=function(e){if(e&&Bo.isElement(e)){var t=e.getAttribute("data-mce-contenteditable");return t&&"inherit"!==t?t:"inherit"!==e.contentEditable?e.contentEditable:null}return null},V={doc:a,settings:u,win:i,files:o,stdMode:!0,boxModel:!0,styleSheetLoader:e,boundEvents:l,styles:d,schema:f,events:m,isBlock:function(e){if("string"==typeof e)return!!n[e];if(e){var t=e.nodeType;if(t)return!(1!==t||!n[e.nodeName])}return!1},$:g,$$:h,root:null,clone:function(t,e){if(!ci||1!==t.nodeType||e)return t.cloneNode(e);if(!e){var n=a.createElement(t.nodeName);return ui(b(t),function(e){y(n,e.nodeName,v(t,e.nodeName))}),n}return null},getRoot:C,getViewPort:function(e){var t=e||i,n=t.document,r=n.documentElement;return{x:t.pageXOffset||r.scrollLeft,y:t.pageYOffset||r.scrollTop,w:t.innerWidth||r.clientWidth,h:t.innerHeight||r.clientHeight}},getRect:function(e){var t,n;return e=p(e),t=x(e),n=N(e),{x:t.x,y:t.y,w:n.w,h:n.h}},getSize:N,getParent:function(e,t,n){var r=S(e,t,n,!1);return r&&0<r.length?r[0]:null},getParents:S,get:p,getNext:function(e,t){return T(e,t,"nextSibling")},getPrev:function(e,t){return T(e,t,"previousSibling")},select:function(e,t){return Tt(e,p(t)||u.root_element||a,[])},is:E,add:R,create:D,createHTML:function(e,t,n){var r,o="";for(r in o+="<"+e,t)t.hasOwnProperty(r)&&null!==t[r]&&"undefined"!=typeof t[r]&&(o+=" "+r+'="'+O(t[r])+'"');return void 0!==n?o+">"+n+"</"+e+">":o+" />"},createFragment:function(e){var t,n=a.createElement("div"),r=a.createDocumentFragment();for(e&&(n.innerHTML=e);t=n.firstChild;)r.appendChild(t);return r},remove:P,setStyle:function(e,t,n){var r=h(e).css(t,n);u.update_styles&&mi(d,r)},getStyle:w,setStyles:function(e,t){var n=h(e).css(t);u.update_styles&&mi(d,n)},removeAllAttribs:function(e){return k(e,function(e){var t,n=e.attributes;for(t=n.length-1;0<=t;t--)e.removeAttributeNode(n.item(t))})},setAttrib:y,setAttribs:A,getAttrib:v,getPos:x,parseStyle:function(e){return d.parse(e)},serializeStyle:function(e,t){return d.serialize(e,t)},addStyle:function(e){var t,n;if(V!==pi.DOM&&a===document){if(r[e])return;r[e]=!0}(n=a.getElementById("mceDefaultStyles"))||((n=a.createElement("style")).id="mceDefaultStyles",n.type="text/css",(t=a.getElementsByTagName("head")[0]).firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n)),n.styleSheet?n.styleSheet.cssText+=e:n.appendChild(a.createTextNode(e))},loadCSS:function(e){var n;V===pi.DOM||a!==document?(e||(e=""),n=a.getElementsByTagName("head")[0],ui(e.split(","),function(e){var t;e=Yt._addCacheSuffix(e),o[e]||(o[e]=!0,t=D("link",{rel:"stylesheet",href:e}),n.appendChild(t))})):pi.DOM.loadCSS(e)},addClass:function(e,t){h(e).addClass(t)},removeClass:function(e,t){L(e,t,!1)},hasClass:function(e,t){return h(e).hasClass(t)},toggleClass:L,show:function(e){h(e).show()},hide:function(e){h(e).hide()},isHidden:function(e){return"none"===h(e).css("display")},uniqueId:function(e){return(e||"mce_")+t++},setHTML:_,getOuterHTML:function(e){var t="string"==typeof e?p(e):e;return Bo.isElement(t)?t.outerHTML:pn("<div></div>").append(pn(t).clone()).html()},setOuterHTML:function(e,t){h(e).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=t)}catch(e){}P(pn(this).html(t),!0)})},decode:B,encode:O,insertAfter:function(e,t){var r=p(t);return k(e,function(e){var t,n;return t=r.parentNode,(n=r.nextSibling)?t.insertBefore(e,n):t.appendChild(e),e})},replace:I,rename:function(t,e){var n;return t.nodeName!==e.toUpperCase()&&(n=D(e),ui(b(t),function(e){y(n,e.nodeName,v(t,e.nodeName))}),I(n,t,!0)),n||t},findCommonAncestor:function(e,t){for(var n,r=e;r;){for(n=t;n&&r!==n;)n=n.parentNode;if(r===n)break;r=r.parentNode}return!r&&e.ownerDocument?e.ownerDocument.documentElement:r},toHex:function(e){return d.toHex(Yt.trim(e))},run:k,getAttribs:b,isEmpty:function(e,t){var n,r,o,i,a,u,s=0;if(e=e.firstChild){a=new io(e,e.parentNode),t=t||(f?f.getNonEmptyElements():null),i=f?f.getWhiteSpaceElements():{};do{if(o=e.nodeType,Bo.isElement(e)){var c=e.getAttribute("data-mce-bogus");if(c){e=a.next("all"===c);continue}if(u=e.nodeName.toLowerCase(),t&&t[u]){if("br"===u){s++,e=a.next();continue}return!1}for(n=(r=b(e)).length;n--;)if("name"===(u=r[n].nodeName)||"data-mce-bookmark"===u)return!1}if(8===o)return!1;if(3===o&&!fi.test(e.nodeValue))return!1;if(3===o&&e.parentNode&&i[e.parentNode.nodeName]&&fi.test(e.nodeValue))return!1;e=a.next()}while(e)}return s<=1},createRng:M,nodeIndex:gi,split:function(e,t,n){var r,o,i,a=M();if(e&&t)return a.setStart(e.parentNode,gi(e)),a.setEnd(t.parentNode,gi(t)),r=a.extractContents(),(a=M()).setStart(t.parentNode,gi(t)+1),a.setEnd(e.parentNode,gi(e)+1),o=a.extractContents(),(i=e.parentNode).insertBefore(Lo.trimNode(V,r),e),n?i.insertBefore(n,e):i.insertBefore(t,e),i.insertBefore(Lo.trimNode(V,o),e),P(e),n||t},bind:F,unbind:U,fire:function(e,t,n){return m.fire(e,t,n)},getContentEditable:z,getContentEditableParent:function(e){for(var t=C(),n=null;e&&e!==t&&null===(n=z(e));e=e.parentNode);return n},destroy:function(){if(l)for(var e=l.length;e--;){var t=l[e];m.unbind(t[0],t[1],t[2])}Tt.setDocument&&Tt.setDocument()},isChildOf:function(e,t){for(;e;){if(t===e)return!0;e=e.parentNode}return!1},dumpRng:function(e){return"startContainer: "+e.startContainer.nodeName+", startOffset: "+e.startOffset+", endContainer: "+e.endContainer.nodeName+", endOffset: "+e.endOffset}};return s=di(d,u,function(){return V}),V}(ai=pi||(pi={})).DOM=ai(document),ai.nodeIndex=gi;var hi=pi,vi=hi.DOM,bi=Yt.each,yi=Yt.grep,Ci=function(e){return"function"==typeof e},xi=function(){var f={},o=[],i={},a=[],d=0;this.isDone=function(e){return 2===f[e]},this.markDone=function(e){f[e]=2},this.add=this.load=function(e,t,n,r){f[e]===undefined&&(o.push(e),f[e]=0),t&&(i[e]||(i[e]=[]),i[e].push({success:t,failure:r,scope:n||this}))},this.remove=function(e){delete f[e],delete i[e]},this.loadQueue=function(e,t,n){this.loadScripts(o,e,t,n)},this.loadScripts=function(n,e,t,r){var s,c=[],l=function(t,e){bi(i[e],function(e){Ci(e[t])&&e[t].call(e.scope)}),i[e]=undefined};a.push({success:e,failure:r,scope:t||this}),(s=function(){var e=yi(n);if(n.length=0,bi(e,function(e){var t,n,r,o,i,a,u;2!==f[e]?3!==f[e]?1!==f[e]&&(f[e]=1,d++,t=e,n=function(){f[e]=2,d--,l("success",e),s()},r=function(){f[e]=3,d--,c.push(e),l("failure",e),s()},u=function(){a.remove(i),o&&(o.onreadystatechange=o.onload=o=null),n()},i=(a=vi).uniqueId(),(o=document.createElement("script")).id=i,o.type="text/javascript",o.src=Yt._addCacheSuffix(t),"onreadystatechange"in o?o.onreadystatechange=function(){/loaded|complete/.test(o.readyState)&&u()}:o.onload=u,o.onerror=function(){Ci(r)?r():"undefined"!=typeof console&&console.log&&console.log("Failed to load script: "+t)},(document.getElementsByTagName("head")[0]||document.body).appendChild(o)):l("failure",e):l("success",e)}),!d){var t=a.slice(0);a.length=0,bi(t,function(e){0===c.length?Ci(e.success)&&e.success.call(e.scope):Ci(e.failure)&&e.failure.call(e.scope,c)})}})()}};xi.ScriptLoader=new xi;var wi,Ni=Yt.each;function Ei(){var r=this,o=[],a={},u={},i=[],s=function(e){var t;return u[e]&&(t=u[e].dependencies),t||[]},c=function(e,t){return"object"==typeof t?t:"string"==typeof e?{prefix:"",resource:t,suffix:""}:{prefix:e.prefix,resource:t,suffix:e.suffix}},l=function(e,n,t,r){var o=s(e);Ni(o,function(e){var t=c(n,e);f(t.resource,t,undefined,undefined)}),t&&(r?t.call(r):t.call(xi))},f=function(e,t,n,r,o){if(!a[e]){var i="string"==typeof t?t:t.prefix+t.resource+t.suffix;0!==i.indexOf("/")&&-1===i.indexOf("://")&&(i=Ei.baseURL+"/"+i),a[e]=i.substring(0,i.lastIndexOf("/")),u[e]?l(e,t,n,r):xi.ScriptLoader.add(i,function(){return l(e,t,n,r)},r,o)}};return{items:o,urls:a,lookup:u,_listeners:i,get:function(e){return u[e]?u[e].instance:undefined},dependencies:s,requireLangPack:function(e,t){var n=Ei.language;if(n&&!1!==Ei.languageLoad){if(t)if(-1!==(t=","+t+",").indexOf(","+n.substr(0,2)+","))n=n.substr(0,2);else if(-1===t.indexOf(","+n+","))return;xi.ScriptLoader.add(a[e]+"/langs/"+n+".js")}},add:function(t,e,n){o.push(e),u[t]={instance:e,dependencies:n};var r=W(i,function(e){return e.name===t});return i=r.fail,Ni(r.pass,function(e){e.callback()}),e},remove:function(e){delete a[e],delete u[e]},createUrl:c,addComponents:function(e,t){var n=r.urls[e];Ni(t,function(e){xi.ScriptLoader.add(n+"/"+e)})},load:f,waitFor:function(e,t){u.hasOwnProperty(e)?t():i.push({name:e,callback:t})}}}(wi=Ei||(Ei={})).PluginManager=wi(),wi.ThemeManager=wi();var Si=function(t,n){Wr.parent(t).each(function(e){e.dom().insertBefore(n.dom(),t.dom())})},Ti=function(e,t){e.dom().appendChild(t.dom())},ki={before:Si,after:function(e,t){Wr.nextSibling(e).fold(function(){Wr.parent(e).each(function(e){Ti(e,t)})},function(e){Si(e,t)})},prepend:function(t,n){Wr.firstChild(t).fold(function(){Ti(t,n)},function(e){t.dom().insertBefore(n.dom(),e.dom())})},append:Ti,appendAt:function(e,t,n){Wr.child(e,n).fold(function(){Ti(e,t)},function(e){Si(e,t)})},wrap:function(e,t){Si(e,t),Ti(t,e)}},Ai=function(t,e){F(e,function(e){ki.before(t,e)})},_i=function(t,e){F(e,function(e){ki.append(t,e)})},Ri=function(e){var t=e.dom();null!==t.parentNode&&t.parentNode.removeChild(t)},Di={empty:function(e){e.dom().textContent="",F(Wr.children(e),function(e){Ri(e)})},remove:Ri,unwrap:function(e){var t=Wr.children(e);0<t.length&&Ai(e,t),Ri(e)}},Bi=function(n,r){var o=null;return{cancel:function(){null!==o&&(clearTimeout(o),o=null)},throttle:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];null===o&&(o=setTimeout(function(){n.apply(null,e),o=null},r))}}},Oi=function(e){var t=e,n=function(){return t};return{get:n,set:function(e){t=e},clone:function(){return Oi(n())}}},Pi=function(e,t){var n=vr.get(e,t);return n===undefined||""===n?[]:n.split(" ")},Li=Pi,Ii=function(e,t,n){var r=Pi(e,t).concat([n]);return vr.set(e,t,r.join(" ")),!0},Mi=function(e,t,n){var r=U(Pi(e,t),function(e){return e!==n});return 0<r.length?vr.set(e,t,r.join(" ")):vr.remove(e,t),!1},Fi=function(e){return Li(e,"class")},Ui=function(e,t){return Ii(e,"class",t)},zi=function(e,t){return Mi(e,"class",t)},Vi=Fi,qi=Ui,Hi=zi,ji=function(e,t){return I(Fi(e),t)?zi(e,t):Ui(e,t)},$i=function(e){return e.dom().classList!==undefined},Wi=function(e,t){return $i(e)&&e.dom().classList.contains(t)},Ki={add:function(e,t){$i(e)?e.dom().classList.add(t):qi(e,t)},remove:function(e,t){var n;$i(e)?e.dom().classList.remove(t):Hi(e,t),0===($i(n=e)?n.dom().classList:Vi(n)).length&&vr.remove(n,"class")},toggle:function(e,t){return $i(e)?e.dom().classList.toggle(t):ji(e,t)},toggler:function(e,t){var n,r,o,i,a,u,s=$i(e),c=e.dom().classList;return n=function(){s?c.remove(t):Hi(e,t)},r=function(){s?c.add(t):qi(e,t)},o=Wi(e,t),i=o||!1,{on:a=function(){r(),i=!0},off:u=function(){n(),i=!1},toggle:function(){(i?u:a)()},isOn:function(){return i}}},has:Wi},Xi=function(e,t){return Ir.all(t,e)};function Yi(e,t,n,r,o){return e(n,r)?A.some(n):O(o)&&o(n)?A.none():t(n,r,o)}var Gi,Ji=function(e,t,n){for(var r=e.dom(),o=O(n)?n:H(!1);r.parentNode;){r=r.parentNode;var i=er.fromDom(r);if(t(i))return A.some(i);if(o(i))break}return A.none()},Qi=function(e,t){return V(e.dom().childNodes,q(t,er.fromDom)).map(er.fromDom)},Zi=function(e,r){var o=function(e){for(var t=0;t<e.childNodes.length;t++){if(r(er.fromDom(e.childNodes[t])))return A.some(er.fromDom(e.childNodes[t]));var n=o(e.childNodes[t]);if(n.isSome())return n}return A.none()};return o(e.dom())},ea={first:function(e){return Zi(Cr.body(),e)},ancestor:Ji,closest:function(e,t,n){return Yi(function(e){return t(e)},Ji,e,t,n)},sibling:function(t,n){var e=t.dom();return e.parentNode?Qi(er.fromDom(e.parentNode),function(e){return!Ur.eq(t,e)&&n(e)}):A.none()},child:Qi,descendant:Zi},ta=function(e,t,n){return ea.ancestor(e,function(e){return Ir.is(e,t)},n)},na=ta,ra=function(e,t){return Ir.one(t,e)},oa=function(e,t,n){return Yi(Ir.is,ta,e,t,n)},ia=H("mce-annotation"),aa=H("data-mce-annotation"),ua=H("data-mce-annotation-uid"),sa=function(r,e){var t=r.selection.getRng(),n=er.fromDom(t.startContainer),o=er.fromDom(r.getBody()),i=e.fold(function(){return"."+ia()},function(e){return"["+aa()+'="'+e+'"]'}),a=Wr.child(n,t.startOffset).getOr(n),u=oa(a,i,function(e){return Ur.eq(e,o)}),s=function(e,t){return vr.has(e,t)?A.some(vr.get(e,t)):A.none()};return u.bind(function(e){return s(e,""+ua()).bind(function(n){return s(e,""+aa()).map(function(e){var t=ca(r,n);return{uid:n,name:e,elements:t}})})})},ca=function(e,t){var n=er.fromDom(e.getBody());return Xi(n,"["+ua()+'="'+t+'"]')},la=function(e,t){var n=er.fromDom(e.getBody()),r=Xi(n,"["+aa()+'="'+t+'"]'),o={};return F(r,function(e){var t=vr.get(e,ua()),n=o.hasOwnProperty(t)?o[t]:[];o[t]=n.concat([e])}),o},fa=function(i,e){var n,r,o,a=Oi({}),c=function(e,t){u(e,function(e){return t(e),e})},u=function(e,t){var n=a.get(),r=t(n.hasOwnProperty(e)?n[e]:{listeners:[],previous:Oi(A.none())});n[e]=r,a.set(n)},t=(n=function(){var e,t,n,r=a.get(),o=(e=cr(r),(n=Q.call(e,0)).sort(t),n);F(o,function(e){u(e,function(u){var s=u.previous.get();return sa(i,A.some(e)).fold(function(){var t;s.isSome()&&(c(t=e,function(e){F(e.listeners,function(e){return e(!1,t)})}),u.previous.set(A.none()))},function(e){var t,n,r,o=e.uid,i=e.name,a=e.elements;s.is(o)||(n=o,r=a,c(t=i,function(e){F(e.listeners,function(e){return e(!0,t,{uid:n,nodes:$(r,function(e){return e.dom()})})})}),u.previous.set(A.some(o)))}),{previous:u.previous,listeners:u.listeners}})})},r=30,o=null,{cancel:function(){null!==o&&(clearTimeout(o),o=null)},throttle:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];null!==o&&clearTimeout(o),o=setTimeout(function(){n.apply(null,e),o=null},r)}});return i.on("remove",function(){t.cancel()}),i.on("nodeChange",function(){t.throttle()}),{addListener:function(e,t){u(e,function(e){return{previous:e.previous,listeners:e.listeners.concat([t])}})}}},da=function(e,n){e.on("init",function(){e.serializer.addNodeFilter("span",function(e){F(e,function(t){var e;(e=t,A.from(e.attributes.map[aa()]).bind(n.lookup)).each(function(e){!1===e.persistent&&t.unwrap()})})})})},ma=function(){var n={};return{register:function(e,t){n[e]={name:e,settings:t}},lookup:function(e){return n.hasOwnProperty(e)?A.from(n[e]).map(function(e){return e.settings}):A.none()}}},ga=0,pa=function(t,e){F(e,function(e){Ki.add(t,e)})},ha=function(e,t){return er.fromDom(e.dom().cloneNode(t))},va=function(e){return ha(e,!0)},ba=function(e){return ha(e,!1)},ya=va,Ca=[].slice,xa=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=Ca.call(arguments);return r.length-1>=e.length?e.apply(this,r.slice(1)):function(){var e=r.concat([].slice.call(arguments));return xa.apply(this,e)}},wa={constant:function(e){return function(){return e}},negate:function(t){return function(e){return!t(e)}},and:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Ca.call(arguments);return function(e){for(var t=0;t<n.length;t++)if(!n[t](e))return!1;return!0}},or:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=Ca.call(arguments);return function(e){for(var t=0;t<n.length;t++)if(n[t](e))return!0;return!1}},curry:xa,compose:function(t,n){return function(e){return t(n(e))}},noop:function(){}},Na="\ufeff",Ea=function(e){return e===Na},Sa=Na,Ta=function(e){return e.replace(new RegExp(Na,"g"),"")},ka=Bo.isElement,Aa=Bo.isText,_a=function(e){return Aa(e)&&(e=e.parentNode),ka(e)&&e.hasAttribute("data-mce-caret")},Ra=function(e){return Aa(e)&&Ea(e.data)},Da=function(e){return _a(e)||Ra(e)},Ba=function(e){return e.firstChild!==e.lastChild||!Bo.isBr(e.firstChild)},Oa=function(e){var t=e.container();return e&&Bo.isText(t)&&t.data.charAt(e.offset())===Sa},Pa=function(e){var t=e.container();return e&&Bo.isText(t)&&t.data.charAt(e.offset()-1)===Sa},La=function(e,t,n){var r,o,i;return(r=t.ownerDocument.createElement(e)).setAttribute("data-mce-caret",n?"before":"after"),r.setAttribute("data-mce-bogus","all"),r.appendChild(((i=document.createElement("br")).setAttribute("data-mce-bogus","1"),i)),o=t.parentNode,n?o.insertBefore(r,t):t.nextSibling?o.insertBefore(r,t.nextSibling):o.appendChild(r),r},Ia=function(e){return Aa(e)&&e.data[0]===Sa},Ma=function(e){return Aa(e)&&e.data[e.data.length-1]===Sa},Fa=function(e){return e&&e.hasAttribute("data-mce-caret")?(t=e.getElementsByTagName("br"),n=t[t.length-1],Bo.isBogus(n)&&n.parentNode.removeChild(n),e.removeAttribute("data-mce-caret"),e.removeAttribute("data-mce-bogus"),e.removeAttribute("style"),e.removeAttribute("_moz_abspos"),e):null;var t,n},Ua=Bo.isContentEditableTrue,za=Bo.isContentEditableFalse,Va=Bo.isBr,qa=Bo.isText,Ha=Bo.matchNodeNames("script style textarea"),ja=Bo.matchNodeNames("img input textarea hr iframe video audio object"),$a=Bo.matchNodeNames("table"),Wa=Da,Ka=function(e){return!Wa(e)&&(qa(e)?!Ha(e.parentNode):ja(e)||Va(e)||$a(e)||Xa(e))},Xa=function(e){return!1===(t=e,Bo.isElement(t)&&"true"===t.getAttribute("unselectable"))&&za(e);var t},Ya=function(e,t){return Ka(e)&&function(e,t){for(e=e.parentNode;e&&e!==t;e=e.parentNode){if(Xa(e))return!1;if(Ua(e))return!0}return!0}(e,t)},Ga=Math.round,Ja=function(e){return e?{left:Ga(e.left),top:Ga(e.top),bottom:Ga(e.bottom),right:Ga(e.right),width:Ga(e.width),height:Ga(e.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}},Qa=function(e,t){return e=Ja(e),t||(e.left=e.left+e.width),e.right=e.left,e.width=0,e},Za=function(e,t,n){return 0<=e&&e<=Math.min(t.height,n.height)/2},eu=function(e,t){return e.bottom-e.height/2<t.top||!(e.top>t.bottom)&&Za(t.top-e.bottom,e,t)},tu=function(e,t){return e.top>t.bottom||!(e.bottom<t.top)&&Za(t.bottom-e.top,e,t)},nu=function(e){var t=e.startContainer,n=e.startOffset;return t.hasChildNodes()&&e.endOffset===n+1?t.childNodes[n]:null},ru=function(e,t){return 1===e.nodeType&&e.hasChildNodes()&&(t>=e.childNodes.length&&(t=e.childNodes.length-1),e=e.childNodes[t]),e},ou=new RegExp("[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]"),iu=function(e){return"string"==typeof e&&768<=e.charCodeAt(0)&&ou.test(e)},au=function(e,t){for(var n=[],r=0;r<e.length;r++){var o=e[r];if(!o.isSome())return A.none();n.push(o.getOrDie())}return A.some(t.apply(null,n))},uu=Bo.isElement,su=Ka,cu=Bo.matchStyleValues("display","block table"),lu=Bo.matchStyleValues("float","left right"),fu=wa.and(uu,su,wa.negate(lu)),du=wa.negate(Bo.matchStyleValues("white-space","pre pre-line pre-wrap")),mu=Bo.isText,gu=Bo.isBr,pu=hi.nodeIndex,hu=ru,vu=function(e){return"createRange"in e?e.createRange():hi.DOM.createRng()},bu=function(e){return e&&/[\r\n\t ]/.test(e)},yu=function(e){return!!e.setStart&&!!e.setEnd},Cu=function(e){var t,n=e.startContainer,r=e.startOffset;return!!(bu(e.toString())&&du(n.parentNode)&&Bo.isText(n)&&(t=n.data,bu(t[r-1])||bu(t[r+1])))},xu=function(e){return 0===e.left&&0===e.right&&0===e.top&&0===e.bottom},wu=function(e){var t,n,r,o,i,a,u,s;return t=0<(n=e.getClientRects()).length?Ja(n[0]):Ja(e.getBoundingClientRect()),!yu(e)&&gu(e)&&xu(t)?(i=(r=e).ownerDocument,a=vu(i),u=i.createTextNode("\xa0"),(s=r.parentNode).insertBefore(u,r),a.setStart(u,0),a.setEnd(u,1),o=Ja(a.getBoundingClientRect()),s.removeChild(u),o):xu(t)&&yu(e)?function(e){var t=e.startContainer,n=e.endContainer,r=e.startOffset,o=e.endOffset;if(t===n&&Bo.isText(n)&&0===r&&1===o){var i=e.cloneRange();return i.setEndAfter(n),wu(i)}return null}(e):t},Nu=function(e,t){var n=Qa(e,t);return n.width=1,n.right=n.left+1,n},Eu=function(e){var t,n,r=[],o=function(e){var t,n;0!==e.height&&(0<r.length&&(t=e,n=r[r.length-1],t.left===n.left&&t.top===n.top&&t.bottom===n.bottom&&t.right===n.right)||r.push(e))},i=function(e,t){var n=vu(e.ownerDocument);if(t<e.data.length){if(iu(e.data[t]))return r;if(iu(e.data[t-1])&&(n.setStart(e,t),n.setEnd(e,t+1),!Cu(n)))return o(Nu(wu(n),!1)),r}0<t&&(n.setStart(e,t-1),n.setEnd(e,t),Cu(n)||o(Nu(wu(n),!1))),t<e.data.length&&(n.setStart(e,t),n.setEnd(e,t+1),Cu(n)||o(Nu(wu(n),!0)))};if(mu(e.container()))return i(e.container(),e.offset()),r;if(uu(e.container()))if(e.isAtEnd())n=hu(e.container(),e.offset()),mu(n)&&i(n,n.data.length),fu(n)&&!gu(n)&&o(Nu(wu(n),!1));else{if(n=hu(e.container(),e.offset()),mu(n)&&i(n,0),fu(n)&&e.isAtEnd())return o(Nu(wu(n),!1)),r;t=hu(e.container(),e.offset()-1),fu(t)&&!gu(t)&&(cu(t)||cu(n)||!fu(n))&&o(Nu(wu(t),!1)),fu(n)&&o(Nu(wu(n),!0))}return r};function Su(t,n,e){var r=function(){return e||(e=Eu(Su(t,n))),e};return{container:wa.constant(t),offset:wa.constant(n),toRange:function(){var e;return(e=vu(t.ownerDocument)).setStart(t,n),e.setEnd(t,n),e},getClientRects:r,isVisible:function(){return 0<r().length},isAtStart:function(){return mu(t),0===n},isAtEnd:function(){return mu(t)?n>=t.data.length:n>=t.childNodes.length},isEqual:function(e){return e&&t===e.container()&&n===e.offset()},getNode:function(e){return hu(t,e?n-1:n)}}}(Gi=Su||(Su={})).fromRangeStart=function(e){return Gi(e.startContainer,e.startOffset)},Gi.fromRangeEnd=function(e){return Gi(e.endContainer,e.endOffset)},Gi.after=function(e){return Gi(e.parentNode,pu(e)+1)},Gi.before=function(e){return Gi(e.parentNode,pu(e))},Gi.isAbove=function(e,t){return au([ee(t.getClientRects()),te(e.getClientRects())],eu).getOr(!1)},Gi.isBelow=function(e,t){return au([te(t.getClientRects()),ee(e.getClientRects())],tu).getOr(!1)},Gi.isAtStart=function(e){return!!e&&e.isAtStart()},Gi.isAtEnd=function(e){return!!e&&e.isAtEnd()},Gi.isTextPosition=function(e){return!!e&&Bo.isText(e.container())},Gi.isElementPosition=function(e){return!1===Gi.isTextPosition(e)};var Tu,ku,Au=Su,_u=Bo.isText,Ru=Bo.isBogus,Du=hi.nodeIndex,Bu=function(e){var t=e.parentNode;return Ru(t)?Bu(t):t},Ou=function(e){return e?jt.reduce(e.childNodes,function(e,t){return Ru(t)&&"BR"!==t.nodeName?e=e.concat(Ou(t)):e.push(t),e},[]):[]},Pu=function(t){return function(e){return t===e}},Lu=function(e){var t,r,n,o;return(_u(e)?"text()":e.nodeName.toLowerCase())+"["+(r=Ou(Bu(t=e)),n=jt.findIndex(r,Pu(t),t),r=r.slice(0,n+1),o=jt.reduce(r,function(e,t,n){return _u(t)&&_u(r[n-1])&&e++,e},0),r=jt.filter(r,Bo.matchNodeNames(t.nodeName)),(n=jt.findIndex(r,Pu(t),t))-o)+"]"},Iu=function(e,t){var n,r,o,i,a,u=[];return n=t.container(),r=t.offset(),_u(n)?o=function(e,t){for(;(e=e.previousSibling)&&_u(e);)t+=e.data.length;return t}(n,r):(r>=(i=n.childNodes).length?(o="after",r=i.length-1):o="before",n=i[r]),u.push(Lu(n)),a=function(e,t,n){var r=[];for(t=t.parentNode;!(t===e||n&&n(t));t=t.parentNode)r.push(t);return r}(e,n),a=jt.filter(a,wa.negate(Bo.isBogus)),(u=u.concat(jt.map(a,function(e){return Lu(e)}))).reverse().join("/")+","+o},Mu=function(e,t){var n,r,o;return t?(t=(n=t.split(","))[0].split("/"),o=1<n.length?n[1]:"before",(r=jt.reduce(t,function(e,t){return(t=/([\w\-\(\)]+)\[([0-9]+)\]/.exec(t))?("text()"===t[1]&&(t[1]="#text"),n=e,r=t[1],o=parseInt(t[2],10),i=Ou(n),i=jt.filter(i,function(e,t){return!_u(e)||!_u(i[t-1])}),(i=jt.filter(i,Bo.matchNodeNames(r)))[o]):null;var n,r,o,i},e))?_u(r)?function(e,t){for(var n,r=e,o=0;_u(r);){if(n=r.data.length,o<=t&&t<=o+n){e=r,t-=o;break}if(!_u(r.nextSibling)){e=r,t=n;break}o+=n,r=r.nextSibling}return _u(e)&&t>e.data.length&&(t=e.data.length),Au(e,t)}(r,parseInt(o,10)):(o="after"===o?Du(r)+1:Du(r),Au(r.parentNode,o)):null):null},Fu=Bo.isContentEditableFalse,Uu=function(e,t,n,r,o){var i,a=r[o?"startContainer":"endContainer"],u=r[o?"startOffset":"endOffset"],s=[],c=0,l=e.getRoot();for(Bo.isText(a)?s.push(n?function(e,t,n){var r,o;for(o=e(t.data.slice(0,n)).length,r=t.previousSibling;r&&Bo.isText(r);r=r.previousSibling)o+=e(r.data).length;return o}(t,a,u):u):(u>=(i=a.childNodes).length&&i.length&&(c=1,u=Math.max(0,i.length-1)),s.push(e.nodeIndex(i[u],n)+c));a&&a!==l;a=a.parentNode)s.push(e.nodeIndex(a,n));return s},zu=function(e){Bo.isText(e)&&0===e.data.length&&e.parentNode.removeChild(e)},Vu=function(e,t,n){var r=0;return Yt.each(e.select(t),function(e){if("all"!==e.getAttribute("data-mce-bogus"))return e!==n&&void r++}),r},qu=function(e,t){var n,r,o,i=t?"start":"end";n=e[i+"Container"],r=e[i+"Offset"],Bo.isElement(n)&&"TR"===n.nodeName&&(n=(o=n.childNodes)[Math.min(t?r:r-1,o.length-1)])&&(r=t?0:n.childNodes.length,e["set"+(t?"Start":"End")](n,r))},Hu=function(e){return qu(e,!0),qu(e,!1),e},ju=function(e,t){var n;if(Bo.isElement(e)&&(e=ru(e,t),Fu(e)))return e;if(Da(e)){if(Bo.isText(e)&&_a(e)&&(e=e.parentNode),n=e.previousSibling,Fu(n))return n;if(n=e.nextSibling,Fu(n))return n}},$u=function(e,t,n){var r=n.getNode(),o=r?r.nodeName:null,i=n.getRng();if(Fu(r)||"IMG"===o)return{name:o,index:Vu(n.dom,o,r)};var a,u,s,c,l,f,d,m=ju((a=i).startContainer,a.startOffset)||ju(a.endContainer,a.endOffset);return m?{name:o=m.tagName,index:Vu(n.dom,o,m)}:(u=e,c=t,l=i,f=(s=n).dom,(d={}).start=Uu(f,u,c,l,!0),s.isCollapsed()||(d.end=Uu(f,u,c,l,!1)),d)},Wu=function(e,t,n){var r={"data-mce-type":"bookmark",id:t,style:"overflow:hidden;line-height:0px"};return n?e.create("span",r,""):e.create("span",r)},Ku=function(e,t){var n=e.dom,r=e.getRng(),o=n.uniqueId(),i=e.isCollapsed(),a=e.getNode(),u=a.nodeName;if("IMG"===u)return{name:u,index:Vu(n,u,a)};var s=Hu(r.cloneRange());if(!i){s.collapse(!1);var c=Wu(n,o+"_end",t);s.insertNode(c),zu(c.nextSibling)}(r=Hu(r)).collapse(!0);var l=Wu(n,o+"_start",t);return r.insertNode(l),zu(l.previousSibling),e.moveToBookmark({id:o,keep:1}),{id:o}},Xu={getBookmark:function(e,t,n){return 2===t?$u(Ta,n,e):3===t?(o=(r=e).getRng(),{start:Iu(r.dom.getRoot(),Au.fromRangeStart(o)),end:Iu(r.dom.getRoot(),Au.fromRangeEnd(o))}):t?{rng:e.getRng()}:Ku(e,!1);var r,o},getUndoBookmark:b($u,j,!0),getPersistentBookmark:Ku},Yu="_mce_caret",Gu=function(e){return Bo.isElement(e)&&e.id===Yu},Ju=function(e,t){for(;t&&t!==e;){if(t.id===Yu)return t;t=t.parentNode}return null},Qu=Bo.isElement,Zu=Bo.isText,es=function(e){var t=e.parentNode;t&&t.removeChild(e)},ts=function(e,t){0===t.length?es(e):e.nodeValue=t},ns=function(e){var t=Ta(e);return{count:e.length-t.length,text:t}},rs=function(e,t){return as(e),t},os=function(e,t){var n,r,o,i=t.container(),a=(n=ne(i.childNodes),r=e,o=L(n,r),-1===o?A.none():A.some(o)).map(function(e){return e<t.offset()?Au(i,t.offset()-1):t}).getOr(t);return as(e),a},is=function(e,t){return Zu(e)&&t.container()===e?(r=t,o=ns((n=e).data.substr(0,r.offset())),i=ns(n.data.substr(r.offset())),0<(a=o.text+i.text).length?(ts(n,a),Au(n,r.offset()-o.count)):r):rs(e,t);var n,r,o,i,a},as=function(e){if(Qu(e)&&Da(e)&&(Ba(e)?e.removeAttribute("data-mce-caret"):es(e)),Zu(e)){var t=Ta(function(e){try{return e.nodeValue}catch(t){return""}}(e));ts(e,t)}},us={removeAndReposition:function(e,t){return Au.isTextPosition(t)?is(e,t):(n=e,(r=t).container()===n.parentNode?os(n,r):rs(n,r));var n,r},remove:as},ss=Bo.isContentEditableTrue,cs=Bo.isContentEditableFalse,ls=function(e,t,n,r,o){return t._selectionOverrides.showCaret(e,n,r,o)},fs=function(e,t){var n,r;return e.fire("BeforeObjectSelected",{target:t}).isDefaultPrevented()?null:((r=(n=t).ownerDocument.createRange()).selectNode(n),r)},ds=function(e,t,n){var r=$c(1,e.getBody(),t),o=Au.fromRangeStart(r),i=o.getNode();if(cs(i))return ls(1,e,i,!o.isAtEnd(),!1);var a=o.getNode(!0);if(cs(a))return ls(1,e,a,!1,!1);var u=e.dom.getParent(o.getNode(),function(e){return cs(e)||ss(e)});return cs(u)?ls(1,e,u,!1,n):null},ms=function(e,t,n){if(!t||!t.collapsed)return t;var r=ds(e,t,n);return r||t};(ku=Tu||(Tu={}))[ku.Backwards=-1]="Backwards",ku[ku.Forwards=1]="Forwards";var gs,ps,hs=Bo.isContentEditableFalse,vs=Bo.isText,bs=Bo.isElement,ys=Bo.isBr,Cs=Ka,xs=function(e){return ja(e)||!!Xa(t=e)&&!0!==jt.reduce(t.getElementsByTagName("*"),function(e,t){return e||Ua(t)},!1);var t},ws=Ya,Ns=function(e,t){return e.hasChildNodes()&&t<e.childNodes.length?e.childNodes[t]:null},Es=function(e,t){if(Pc(e)){if(Cs(t.previousSibling)&&!vs(t.previousSibling))return Au.before(t);if(vs(t))return Au(t,0)}if(Lc(e)){if(Cs(t.nextSibling)&&!vs(t.nextSibling))return Au.after(t);if(vs(t))return Au(t,t.data.length)}return Lc(e)?ys(t)?Au.before(t):Au.after(t):Au.before(t)},Ss=function(e,t,n){var r,o,i,a,u;if(!bs(n)||!t)return null;if(t.isEqual(Au.after(n))&&n.lastChild){if(u=Au.after(n.lastChild),Lc(e)&&Cs(n.lastChild)&&bs(n.lastChild))return ys(n.lastChild)?Au.before(n.lastChild):u}else u=t;var s,c,l,f=u.container(),d=u.offset();if(vs(f)){if(Lc(e)&&0<d)return Au(f,--d);if(Pc(e)&&d<f.length)return Au(f,++d);r=f}else{if(Lc(e)&&0<d&&(o=Ns(f,d-1),Cs(o)))return!xs(o)&&(i=Mc(o,e,ws,o))?vs(i)?Au(i,i.data.length):Au.after(i):vs(o)?Au(o,o.data.length):Au.before(o);if(Pc(e)&&d<f.childNodes.length&&(o=Ns(f,d),Cs(o)))return ys(o)&&n.lastChild===o?null:(s=o,c=n,Bo.isBr(s)&&(l=Ss(1,Au.after(s),c))&&!Uc(Au.before(s),Au.before(l),c)?Ss(e,Au.after(o),n):!xs(o)&&(i=Mc(o,e,ws,o))?vs(i)?Au(i,0):Au.before(i):vs(o)?Au(o,0):Au.after(o));r=o||u.getNode()}return(Pc(e)&&u.isAtEnd()||Lc(e)&&u.isAtStart())&&(r=Mc(r,e,wa.constant(!0),n,!0),ws(r,n))?Es(e,r):(o=Mc(r,e,ws,n),!(a=jt.last(jt.filter(function(e,t){for(var n=[];e&&e!==t;)n.push(e),e=e.parentNode;return n}(f,n),hs)))||o&&a.contains(o)?o?Es(e,o):null:u=Pc(e)?Au.after(a):Au.before(a))},Ts=function(t){return{next:function(e){return Ss(Tu.Forwards,e,t)},prev:function(e){return Ss(Tu.Backwards,e,t)}}};(ps=gs||(gs={}))[ps.Br=0]="Br",ps[ps.Block=1]="Block",ps[ps.Wrap=2]="Wrap",ps[ps.Eol=3]="Eol";var ks,As,_s,Rs,Ds,Bs=function(e,t){return e===Tu.Backwards?t.reverse():t},Os=function(e,t,n,r){for(var o,i,a,u,s,c,l=Ts(n),f=r,d=[];f&&(s=l,c=f,o=t===Tu.Forwards?s.next(c):s.prev(c));){if(Bo.isBr(o.getNode(!1)))return t===Tu.Forwards?{positions:Bs(t,d).concat([o]),breakType:gs.Br,breakAt:A.some(o)}:{positions:Bs(t,d),breakType:gs.Br,breakAt:A.some(o)};if(o.isVisible()){if(e(f,o)){var m=(i=t,a=f,u=o,Bo.isBr(u.getNode(i===Tu.Forwards))?gs.Br:!1===Uc(a,u)?gs.Block:gs.Wrap);return{positions:Bs(t,d),breakType:m,breakAt:A.some(o)}}d.push(o),f=o}else f=o}return{positions:Bs(t,d),breakType:gs.Eol,breakAt:A.none()}},Ps=function(n,r,o,e){return r(o,e).breakAt.map(function(e){var t=r(o,e).positions;return n===Tu.Backwards?t.concat(e):[e].concat(t)}).getOr([])},Ls=function(e,i){return z(e,function(e,o){return e.fold(function(){return A.some(o)},function(r){return au([ee(r.getClientRects()),ee(o.getClientRects())],function(e,t){var n=Math.abs(i-e.left);return Math.abs(i-t.left)<=n?o:r}).or(e)})},A.none())},Is=function(t,e){return ee(e.getClientRects()).bind(function(e){return Ls(t,e.left)})},Ms=b(Os,Su.isAbove,-1),Fs=b(Os,Su.isBelow,1),Us=b(Ps,-1,Ms),zs=b(Ps,1,Fs),Vs=function(e,t,n,r,o){var i,a,u,s,c=Xi(er.fromDom(n),"td,th").map(function(e){return e.dom()}),l=U((i=e,G(c,function(e){var t,n,r=(t=e.getBoundingClientRect(),n=-1,{left:t.left-n,top:t.top-n,right:t.right+2*n,bottom:t.bottom+2*n,width:t.width+n,height:t.height+n});return[{x:r.left,y:i(r),cell:e},{x:r.right,y:i(r),cell:e}]})),function(e){return t(e,o)});return(a=l,u=r,s=o,z(a,function(e,r){return e.fold(function(){return A.some(r)},function(e){var t=Math.sqrt(Math.abs(e.x-u)+Math.abs(e.y-s)),n=Math.sqrt(Math.abs(r.x-u)+Math.abs(r.y-s));return A.some(n<t?r:e)})},A.none())).map(function(e){return e.cell})},qs=b(Vs,function(e){return e.bottom},function(e,t){return e.y<t}),Hs=b(Vs,function(e){return e.top},function(e,t){return e.y>t}),js=function(t,n){return ee(n.getClientRects()).bind(function(e){return qs(t,e.left,e.top)}).bind(function(e){return Is((t=e,al.lastPositionIn(t).map(function(e){return Ms(t,e).positions.concat(e)}).getOr([])),n);var t})},$s=function(t,n){return te(n.getClientRects()).bind(function(e){return Hs(t,e.left,e.top)}).bind(function(e){return Is((t=e,al.firstPositionIn(t).map(function(e){return[e].concat(Fs(t,e).positions)}).getOr([])),n);var t})},Ws=function(e){for(var t=0,n=0,r=e;r&&r.nodeType;)t+=r.offsetLeft||0,n+=r.offsetTop||0,r=r.offsetParent;return{x:t,y:n}},Ks=function(e,t,n){var r,o,i,a,u,s=e.dom,c=s.getRoot(),l=0;if(u={elm:t,alignToTop:n},e.fire("scrollIntoView",u),!u.isDefaultPrevented()&&Bo.isElement(t)){if(!1===n&&(l=t.offsetHeight),"BODY"!==c.nodeName){var f=e.selection.getScrollContainer();if(f)return r=Ws(t).y-Ws(f).y+l,a=f.clientHeight,void((r<(i=f.scrollTop)||i+a<r+25)&&(f.scrollTop=r<i?r:r-a+25))}o=s.getViewPort(e.getWin()),r=s.getPos(t).y+l,i=o.y,a=o.h,(r<o.y||i+a<r+25)&&e.getWin().scrollTo(0,r<i?r:r-a+25)}},Xs=function(d,e){ee(Su.fromRangeStart(e).getClientRects()).each(function(e){var t,n,r,o,i,a,u,s,c,l=function(e){if(e.inline)return e.getBody().getBoundingClientRect();var t=e.getWin();return{left:0,right:t.innerWidth,top:0,bottom:t.innerHeight,width:t.innerWidth,height:t.innerHeight}}(d),f={x:(i=t=l,a=n=e,a.left>i.left&&a.right<i.right?0:a.left<i.left?a.left-i.left:a.right-i.right),y:(r=t,o=n,o.top>r.top&&o.bottom<r.bottom?0:o.top<r.top?o.top-r.top:o.bottom-r.bottom)};s=0!==f.x?0<f.x?f.x+4:f.x-4:0,c=0!==f.y?0<f.y?f.y+4:f.y-4:0,(u=d).inline?(u.getBody().scrollLeft+=s,u.getBody().scrollTop+=c):u.getWin().scrollBy(s,c)})},Ys=function(e,t,n){var r=e.getParam(t,n);if(-1!==r.indexOf("=")){var o=e.getParam(t,"","hash");return o.hasOwnProperty(e.id)?o[e.id]:n}return r},Gs=function(e){return e.getParam("iframe_attrs",{})},Js=function(e){return e.getParam("doctype","<!DOCTYPE html>")},Qs=function(e){return e.getParam("document_base_url","")},Zs=function(e){return Ys(e,"body_id","tinymce")},ec=function(e){return Ys(e,"body_class","")},tc=function(e){return e.getParam("content_security_policy","")},nc=function(e){return e.getParam("br_in_pre",!0)},rc=function(e){if(e.getParam("force_p_newlines",!1))return"p";var t=e.getParam("forced_root_block","p");return!1===t?"":t},oc=function(e){return e.getParam("forced_root_block_attrs",{})},ic=function(e){return e.getParam("br_newline_selector",".mce-toc h2,figcaption,caption")},ac=function(e){return e.getParam("no_newline_selector","")},uc=function(e){return e.getParam("keep_styles",!0)},sc=function(e){return e.getParam("end_container_on_empty_block",!1)},cc=function(e){return Yt.explode(e.getParam("font_size_style_values",""))},lc=function(e){return Yt.explode(e.getParam("font_size_classes",""))},fc=Qn.detect().browser,dc=function(){return fc.isIE()||fc.isEdge()||fc.isFirefox()},mc=function(e,t){e.selection.setRng(t),Xs(e,t)},gc=function(t,n,e){var r=t(n,e);return r.breakType===gs.Wrap&&0===r.positions.length?r.breakAt.map(function(e){return t(n,e).breakAt.isNone()}).getOr(!0):r.breakAt.isNone()},pc=wa.curry(gc,Ms),hc=wa.curry(gc,Fs),vc=function(e,t,n,r){var o,i,a,u,s=e.selection.getRng(),c=t?1:-1;if(dc()&&(o=t,i=s,a=n,u=Au.fromRangeStart(i),al.positionIn(!o,a).map(function(e){return e.isEqual(u)}).getOr(!1))){var l=ls(c,e,n,!t,!0);return mc(e,l),!0}return!1},bc=function(e,t){var n=t.getNode(e);return Bo.isElement(n)&&"TABLE"===n.nodeName?A.some(n):A.none()},yc=function(u,s,c){var e=bc(!!s,c),t=!1===s;e.fold(function(){return mc(u,c.toRange())},function(a){return al.positionIn(t,u.getBody()).filter(function(e){return e.isEqual(c)}).fold(function(){return mc(u,c.toRange())},function(e){return n=s,o=a,t=c,void((i=rc(r=u))?r.undoManager.transact(function(){var e=er.fromTag(i);vr.setAll(e,oc(r)),ki.append(e,er.fromTag("br")),n?ki.after(er.fromDom(o),e):ki.before(er.fromDom(o),e);var t=r.dom.createRng();t.setStart(e.dom(),0),t.setEnd(e.dom(),0),mc(r,t)}):mc(r,t.toRange()));var n,r,o,t,i})})},Cc=function(e,t,n,r){var o,i,a,u,s,c,l=e.selection.getRng(),f=Au.fromRangeStart(l),d=e.getBody();if(!t&&pc(r,f)){var m=(u=d,js(s=n,c=f).orThunk(function(){return ee(c.getClientRects()).bind(function(e){return Ls(Us(u,Au.before(s)),e.left)})}).getOr(Au.before(s)));return yc(e,t,m),!0}return!(!t||!hc(r,f))&&(o=d,m=$s(i=n,a=f).orThunk(function(){return ee(a.getClientRects()).bind(function(e){return Ls(zs(o,Au.after(i)),e.left)})}).getOr(Au.after(i)),yc(e,t,m),!0)},xc=function(t,n){return function(){return A.from(t.dom.getParent(t.selection.getNode(),"td,th")).bind(function(e){return A.from(t.dom.getParent(e,"table")).map(function(e){return vc(t,n,e)})}).getOr(!1)}},wc=function(n,r){return function(){return A.from(n.dom.getParent(n.selection.getNode(),"td,th")).bind(function(t){return A.from(n.dom.getParent(t,"table")).map(function(e){return Cc(n,r,e,t)})}).getOr(!1)}},Nc=Bo.isContentEditableFalse,Ec=function(e,t,n){var r,o,i,a,u,s=Qa(t.getBoundingClientRect(),n);return"BODY"===e.tagName?(r=e.ownerDocument.documentElement,o=e.scrollLeft||r.scrollLeft,i=e.scrollTop||r.scrollTop):(u=e.getBoundingClientRect(),o=e.scrollLeft-u.left,i=e.scrollTop-u.top),s.left+=o,s.right+=o,s.top+=i,s.bottom+=i,s.width=1,0<(a=t.offsetWidth-t.clientWidth)&&(n&&(a*=-1),s.left+=a,s.right+=a),s},Sc=function(a,u,e){var t,s,c=Oi(A.none()),l=function(){!function(e){var t,n,r,o,i;for(t=pn("*[contentEditable=false]",e),o=0;o<t.length;o++)r=(n=t[o]).previousSibling,Ma(r)&&(1===(i=r.data).length?r.parentNode.removeChild(r):r.deleteData(i.length-1,1)),r=n.nextSibling,Ia(r)&&(1===(i=r.data).length?r.parentNode.removeChild(r):r.deleteData(0,1))}(a),s&&(us.remove(s),s=null),c.get().each(function(e){pn(e.caret).remove(),c.set(A.none())}),clearInterval(t)},f=function(){t=Le.setInterval(function(){e()?pn("div.mce-visual-caret",a).toggleClass("mce-visual-caret-hidden"):pn("div.mce-visual-caret",a).addClass("mce-visual-caret-hidden")},500)};return{show:function(t,e){var n,r,o;if(l(),o=e,Bo.isElement(o)&&/^(TD|TH)$/i.test(o.tagName))return null;if(!u(e))return s=function(e,t){var n,r,o;if(r=e.ownerDocument.createTextNode(Sa),o=e.parentNode,t){if(n=e.previousSibling,Aa(n)){if(Da(n))return n;if(Ma(n))return n.splitText(n.data.length-1)}o.insertBefore(r,e)}else{if(n=e.nextSibling,Aa(n)){if(Da(n))return n;if(Ia(n))return n.splitText(1),n}e.nextSibling?o.insertBefore(r,e.nextSibling):o.appendChild(r)}return r}(e,t),r=e.ownerDocument.createRange(),Nc(s.nextSibling)?(r.setStart(s,0),r.setEnd(s,0)):(r.setStart(s,1),r.setEnd(s,1)),r;s=La("p",e,t),n=Ec(a,e,t),pn(s).css("top",n.top);var i=pn('<div class="mce-visual-caret" data-mce-bogus="all"></div>').css(n).appendTo(a)[0];return c.set(A.some({caret:i,element:e,before:t})),c.get().each(function(e){t&&pn(e.caret).addClass("mce-visual-caret-before")}),f(),(r=e.ownerDocument.createRange()).setStart(s,0),r.setEnd(s,0),r},hide:l,getCss:function(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"},reposition:function(){c.get().each(function(e){var t=Ec(a,e.element,e.before);pn(e.caret).css(t)})},destroy:function(){return Le.clearInterval(t)}}},Tc=function(e){return Nc(e)||Bo.isTable(e)&&dc()},kc=Bo.isContentEditableFalse,Ac=Bo.matchStyleValues("display","block table table-cell table-caption list-item"),_c=Da,Rc=_a,Dc=wa.curry,Bc=Bo.isElement,Oc=Ka,Pc=function(e){return 0<e},Lc=function(e){return e<0},Ic=function(e,t){for(var n;n=e(t);)if(!Rc(n))return n;return null},Mc=function(e,t,n,r,o){var i=new io(e,r);if(Lc(t)){if((kc(e)||Rc(e))&&n(e=Ic(i.prev,!0)))return e;for(;e=Ic(i.prev,o);)if(n(e))return e}if(Pc(t)){if((kc(e)||Rc(e))&&n(e=Ic(i.next,!0)))return e;for(;e=Ic(i.next,o);)if(n(e))return e}return null},Fc=function(e,t){for(;e&&e!==t;){if(Ac(e))return e;e=e.parentNode}return null},Uc=function(e,t,n){return Fc(e.container(),n)===Fc(t.container(),n)},zc=function(e,t){var n,r;return t?(n=t.container(),r=t.offset(),Bc(n)?n.childNodes[r+e]:null):null},Vc=function(e,t){var n=t.ownerDocument.createRange();return e?(n.setStartBefore(t),n.setEndBefore(t)):(n.setStartAfter(t),n.setEndAfter(t)),n},qc=function(e,t,n){var r,o,i,a;for(o=e?"previousSibling":"nextSibling";n&&n!==t;){if(r=n[o],_c(r)&&(r=r[o]),kc(r)){if(a=n,Fc(r,i=t)===Fc(a,i))return r;break}if(Oc(r))break;n=n.parentNode}return null},Hc=Dc(Vc,!0),jc=Dc(Vc,!1),$c=function(e,t,n){var r,o,i,a,u=Dc(qc,!0,t),s=Dc(qc,!1,t);if(o=n.startContainer,i=n.startOffset,_a(o)){if(Bc(o)||(o=o.parentNode),"before"===(a=o.getAttribute("data-mce-caret"))&&(r=o.nextSibling,Tc(r)))return Hc(r);if("after"===a&&(r=o.previousSibling,Tc(r)))return jc(r)}if(!n.collapsed)return n;if(Bo.isText(o)){if(_c(o)){if(1===e){if(r=s(o))return Hc(r);if(r=u(o))return jc(r)}if(-1===e){if(r=u(o))return jc(r);if(r=s(o))return Hc(r)}return n}if(Ma(o)&&i>=o.data.length-1)return 1===e&&(r=s(o))?Hc(r):n;if(Ia(o)&&i<=1)return-1===e&&(r=u(o))?jc(r):n;if(i===o.data.length)return(r=s(o))?Hc(r):n;if(0===i)return(r=u(o))?jc(r):n}return n},Wc=function(e,t){var n=zc(e,t);return kc(n)&&!Bo.isBogusAll(n)},Kc=function(e,t){return Bo.isTable(zc(e,t))},Xc=function(e,t){return A.from(zc(e?0:-1,t)).filter(kc)},Yc=function(e,t,n){var r=$c(e,t,n);return-1===e?Su.fromRangeStart(r):Su.fromRangeEnd(r)},Gc=Dc(Wc,0),Jc=Dc(Wc,-1),Qc=Dc(Kc,0),Zc=Dc(Kc,-1),el=function(e){return Au.isTextPosition(e)?0===e.offset():Ka(e.getNode())},tl=function(e){if(Au.isTextPosition(e)){var t=e.container();return e.offset()===t.data.length}return Ka(e.getNode(!0))},nl=function(e,t){return!Au.isTextPosition(e)&&!Au.isTextPosition(t)&&e.getNode()===t.getNode(!0)},rl=function(e,t,n){return e?!nl(t,n)&&(r=t,!(!Au.isTextPosition(r)&&Bo.isBr(r.getNode())))&&tl(t)&&el(n):!nl(n,t)&&el(t)&&tl(n);var r},ol=function(e,t,n){var r=Ts(t);return A.from(e?r.next(n):r.prev(n))},il=function(e,t){var n,r,o,i,a,u=e?t.firstChild:t.lastChild;return Bo.isText(u)?A.some(Au(u,e?0:u.data.length)):u?Ka(u)?A.some(e?Au.before(u):(a=u,Bo.isBr(a)?Au.before(a):Au.after(a))):(r=t,o=u,i=(n=e)?Au.before(o):Au.after(o),ol(n,r,i)):A.none()},al={fromPosition:ol,nextPosition:b(ol,!0),prevPosition:b(ol,!1),navigate:function(t,n,r){return ol(t,n,r).bind(function(e){return Uc(r,e,n)&&rl(t,r,e)?ol(t,n,e):A.some(e)})},positionIn:il,firstPositionIn:b(il,!0),lastPositionIn:b(il,!1)},ul=function(e,t){return!e.isBlock(t)||t.innerHTML||Re.ie||(t.innerHTML='<br data-mce-bogus="1" />'),t},sl=function(e,t){return al.lastPositionIn(e).fold(function(){return!1},function(e){return t.setStart(e.container(),e.offset()),t.setEnd(e.container(),e.offset()),!0})},cl=function(e,t,n){return!(!1!==t.hasChildNodes()||!Ju(e,t)||(o=n,i=(r=t).ownerDocument.createTextNode(Sa),r.appendChild(i),o.setStart(i,0),o.setEnd(i,0),0));var r,o,i},ll=function(e,t,n,r){var o,i,a,u,s=n[t?"start":"end"],c=e.getRoot();if(s){for(a=s[0],i=c,o=s.length-1;1<=o;o--){if(u=i.childNodes,cl(c,i,r))return!0;if(s[o]>u.length-1)return!!cl(c,i,r)||sl(i,r);i=u[s[o]]}3===i.nodeType&&(a=Math.min(s[0],i.nodeValue.length)),1===i.nodeType&&(a=Math.min(s[0],i.childNodes.length)),t?r.setStart(i,a):r.setEnd(i,a)}return!0},fl=function(e){return Bo.isText(e)&&0<e.data.length},dl=function(e,t,n){var r,o,i,a,u,s,c=e.get(n.id+"_"+t),l=n.keep;if(c){if(r=c.parentNode,"start"===t?l?c.hasChildNodes()?(r=c.firstChild,o=1):fl(c.nextSibling)?(r=c.nextSibling,o=0):fl(c.previousSibling)?(r=c.previousSibling,o=c.previousSibling.data.length):(r=c.parentNode,o=e.nodeIndex(c)+1):o=e.nodeIndex(c):l?c.hasChildNodes()?(r=c.firstChild,o=1):fl(c.previousSibling)?(r=c.previousSibling,o=c.previousSibling.data.length):(r=c.parentNode,o=e.nodeIndex(c)):o=e.nodeIndex(c),u=r,s=o,!l){for(a=c.previousSibling,i=c.nextSibling,Yt.each(Yt.grep(c.childNodes),function(e){Bo.isText(e)&&(e.nodeValue=e.nodeValue.replace(/\uFEFF/g,""))});c=e.get(n.id+"_"+t);)e.remove(c,!0);a&&i&&a.nodeType===i.nodeType&&Bo.isText(a)&&!Re.opera&&(o=a.nodeValue.length,a.appendData(i.nodeValue),e.remove(i),u=a,s=o)}return A.some(Au(u,s))}return A.none()},ml=function(e,t){var n,r,o,i,a,u,s,c,l,f,d,m,g,p,h,v,b=e.dom;if(t){if(v=t,Yt.isArray(v.start))return p=t,h=(g=b).createRng(),ll(g,!0,p,h)&&ll(g,!1,p,h)?A.some(h):A.none();if("string"==typeof t.start)return A.some((f=t,d=(l=b).createRng(),m=Mu(l.getRoot(),f.start),d.setStart(m.container(),m.offset()),m=Mu(l.getRoot(),f.end),d.setEnd(m.container(),m.offset()),d));if(t.hasOwnProperty("id"))return s=dl(o=b,"start",i=t),c=dl(o,"end",i),au([s,(a=c,u=s,a.isSome()?a:u)],function(e,t){var n=o.createRng();return n.setStart(ul(o,e.container()),e.offset()),n.setEnd(ul(o,t.container()),t.offset()),n});if(t.hasOwnProperty("name"))return n=b,r=t,A.from(n.select(r.name)[r.index]).map(function(e){var t=n.createRng();return t.selectNode(e),t});if(t.hasOwnProperty("rng"))return A.some(t.rng)}return A.none()},gl=function(e,t,n){return Xu.getBookmark(e,t,n)},pl=function(t,e){ml(t,e).each(function(e){t.setRng(e)})},hl=function(e){return Bo.isElement(e)&&"SPAN"===e.tagName&&"bookmark"===e.getAttribute("data-mce-type")},vl=function(e){return e&&/^(IMG)$/.test(e.nodeName)},bl=function(e){return e&&3===e.nodeType&&/^([\t \r\n]+|)$/.test(e.nodeValue)},yl=function(e,t,n){return"color"!==n&&"backgroundColor"!==n||(t=e.toHex(t)),"fontWeight"===n&&700===t&&(t="bold"),"fontFamily"===n&&(t=t.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+t},Cl={isInlineBlock:vl,moveStart:function(e,t,n){var r,o,i,a=n.startOffset,u=n.startContainer;if((n.startContainer!==n.endContainer||!vl(n.startContainer.childNodes[n.startOffset]))&&1===u.nodeType)for(a<(i=u.childNodes).length?r=new io(u=i[a],e.getParent(u,e.isBlock)):(r=new io(u=i[i.length-1],e.getParent(u,e.isBlock))).next(!0),o=r.current();o;o=r.next())if(3===o.nodeType&&!bl(o))return n.setStart(o,0),void t.setRng(n)},getNonWhiteSpaceSibling:function(e,t,n){if(e)for(t=t?"nextSibling":"previousSibling",e=n?e:e[t];e;e=e[t])if(1===e.nodeType||!bl(e))return e},isTextBlock:function(e,t){return t.nodeType&&(t=t.nodeName),!!e.schema.getTextBlockElements()[t.toLowerCase()]},isValid:function(e,t,n){return e.schema.isValidChild(t,n)},isWhiteSpaceNode:bl,replaceVars:function(e,n){return"string"!=typeof e?e=e(n):n&&(e=e.replace(/%(\w+)/g,function(e,t){return n[t]||e})),e},isEq:function(e,t){return t=t||"",e=""+((e=e||"").nodeName||e),t=""+(t.nodeName||t),e.toLowerCase()===t.toLowerCase()},normalizeStyleValue:yl,getStyle:function(e,t,n){return yl(e,e.getStyle(t,n),n)},getTextDecoration:function(t,e){var n;return t.getParent(e,function(e){return(n=t.getStyle(e,"text-decoration"))&&"none"!==n}),n},getParents:function(e,t,n){return e.getParents(t,n,e.getRoot())}},xl=hl,wl=Cl.getParents,Nl=Cl.isWhiteSpaceNode,El=Cl.isTextBlock,Sl=function(e,t){for(void 0===t&&(t=3===e.nodeType?e.length:e.childNodes.length);e&&e.hasChildNodes();)(e=e.childNodes[t])&&(t=3===e.nodeType?e.length:e.childNodes.length);return{node:e,offset:t}},Tl=function(e,t){for(var n=t;n;){if(1===n.nodeType&&e.getContentEditable(n))return"false"===e.getContentEditable(n)?n:t;n=n.parentNode}return t},kl=function(e,t,n,r){var o,i,a=n.nodeValue;return void 0===r&&(r=e?a.length:0),e?(o=a.lastIndexOf(" ",r),-1===(o=(i=a.lastIndexOf("\xa0",r))<o?o:i)||t||o++):(o=a.indexOf(" ",r),i=a.indexOf("\xa0",r),o=-1!==o&&(-1===i||o<i)?o:i),o},Al=function(e,t,n,r,o,i){var a,u,s,c;if(3===n.nodeType){if(-1!==(s=kl(o,i,n,r)))return{container:n,offset:s};c=n}for(a=new io(n,e.getParent(n,e.isBlock)||t);u=a[o?"prev":"next"]();)if(3===u.nodeType){if(-1!==(s=kl(o,i,c=u)))return{container:u,offset:s}}else if(e.isBlock(u))break;if(c)return{container:c,offset:r=o?0:c.length}},_l=function(e,t,n,r,o){var i,a,u,s;for(3===r.nodeType&&0===r.nodeValue.length&&r[o]&&(r=r[o]),i=wl(e,r),a=0;a<i.length;a++)for(u=0;u<t.length;u++)if(!("collapsed"in(s=t[u])&&s.collapsed!==n.collapsed)&&e.is(i[a],s.selector))return i[a];return r},Rl=function(t,e,n,r){var o,i=t.dom,a=i.getRoot();if(e[0].wrapper||(o=i.getParent(n,e[0].block,a)),!o){var u=i.getParent(n,"LI,TD,TH");o=i.getParent(3===n.nodeType?n.parentNode:n,function(e){return e!==a&&El(t,e)},u)}if(o&&e[0].wrapper&&(o=wl(i,o,"ul,ol").reverse()[0]||o),!o)for(o=n;o[r]&&!i.isBlock(o[r])&&(o=o[r],!Cl.isEq(o,"br")););return o||n},Dl=function(e,t,n,r,o,i,a){var u,s,c,l,f,d;if(u=s=a?n:o,l=a?"previousSibling":"nextSibling",f=e.getRoot(),3===u.nodeType&&!Nl(u)&&(a?0<r:i<u.nodeValue.length))return u;for(;;){if(!t[0].block_expand&&e.isBlock(s))return s;for(c=s[l];c;c=c[l])if(!xl(c)&&!Nl(c)&&("BR"!==(d=c).nodeName||!d.getAttribute("data-mce-bogus")||d.nextSibling))return s;if(s===f||s.parentNode===f){u=s;break}s=s.parentNode}return u},Bl=function(e,t,n,r){var o,i=t.startContainer,a=t.startOffset,u=t.endContainer,s=t.endOffset,c=e.dom;return 1===i.nodeType&&i.hasChildNodes()&&3===(i=ru(i,a)).nodeType&&(a=0),1===u.nodeType&&u.hasChildNodes()&&3===(u=ru(u,t.collapsed?s:s-1)).nodeType&&(s=u.nodeValue.length),i=Tl(c,i),u=Tl(c,u),(xl(i.parentNode)||xl(i))&&3===(i=(i=xl(i)?i:i.parentNode).nextSibling||i).nodeType&&(a=0),(xl(u.parentNode)||xl(u))&&3===(u=(u=xl(u)?u:u.parentNode).previousSibling||u).nodeType&&(s=u.length),n[0].inline&&(t.collapsed&&((o=Al(c,e.getBody(),i,a,!0,r))&&(i=o.container,a=o.offset),(o=Al(c,e.getBody(),u,s,!1,r))&&(u=o.container,s=o.offset)),u=r?u:function(e,t){var n=Sl(e,t);if(n.node){for(;n.node&&0===n.offset&&n.node.previousSibling;)n=Sl(n.node.previousSibling);n.node&&0<n.offset&&3===n.node.nodeType&&" "===n.node.nodeValue.charAt(n.offset-1)&&1<n.offset&&(e=n.node).splitText(n.offset-1)}return e}(u,s)),(n[0].inline||n[0].block_expand)&&(n[0].inline&&3===i.nodeType&&0!==a||(i=Dl(c,n,i,a,u,s,!0)),n[0].inline&&3===u.nodeType&&s!==u.nodeValue.length||(u=Dl(c,n,i,a,u,s,!1))),n[0].selector&&!1!==n[0].expand&&!n[0].inline&&(i=_l(c,n,t,i,"previousSibling"),u=_l(c,n,t,u,"nextSibling")),(n[0].block||n[0].selector)&&(i=Rl(e,n,i,"previousSibling"),u=Rl(e,n,u,"nextSibling"),n[0].block&&(c.isBlock(i)||(i=Dl(c,n,i,a,u,s,!0)),c.isBlock(u)||(u=Dl(c,n,i,a,u,s,!1)))),1===i.nodeType&&(a=c.nodeIndex(i),i=i.parentNode),1===u.nodeType&&(s=c.nodeIndex(u)+1,u=u.parentNode),{startContainer:i,startOffset:a,endContainer:u,endOffset:s}},Ol=Yt.each,Pl=function(e,t,o){var n,r,i,a,u,s,c,l=t.startContainer,f=t.startOffset,d=t.endContainer,m=t.endOffset;if(0<(c=e.select("td[data-mce-selected],th[data-mce-selected]")).length)Ol(c,function(e){o([e])});else{var g,p,h,v=function(e){var t;return 3===(t=e[0]).nodeType&&t===l&&f>=t.nodeValue.length&&e.splice(0,1),t=e[e.length-1],0===m&&0<e.length&&t===d&&3===t.nodeType&&e.splice(e.length-1,1),e},b=function(e,t,n){for(var r=[];e&&e!==n;e=e[t])r.push(e);return r},y=function(e,t){do{if(e.parentNode===t)return e;e=e.parentNode}while(e)},C=function(e,t,n){var r=n?"nextSibling":"previousSibling";for(u=(a=e).parentNode;a&&a!==t;a=u)u=a.parentNode,(s=b(a===e?a:a[r],r)).length&&(n||s.reverse(),o(v(s)))};if(1===l.nodeType&&l.hasChildNodes()&&(l=l.childNodes[f]),1===d.nodeType&&d.hasChildNodes()&&(p=m,h=(g=d).childNodes,--p>h.length-1?p=h.length-1:p<0&&(p=0),d=h[p]||g),l===d)return o(v([l]));for(n=e.findCommonAncestor(l,d),a=l;a;a=a.parentNode){if(a===d)return C(l,n,!0);if(a===n)break}for(a=d;a;a=a.parentNode){if(a===l)return C(d,n);if(a===n)break}r=y(l,n)||l,i=y(d,n)||d,C(l,r,!0),(s=b(r===l?r:r.nextSibling,"nextSibling",i===d?i.nextSibling:i)).length&&o(v(s)),C(d,i)}},Ll=(ks=sr.isText,As="text",_s=function(e){return ks(e)?A.from(e.dom().nodeValue):A.none()},Rs=Qn.detect().browser,{get:function(e){if(!ks(e))throw new Error("Can only get "+As+" value of a "+As+" node");return Ds(e).getOr("")},getOption:Ds=Rs.isIE()&&10===Rs.version.major?function(e){try{return _s(e)}catch(Kw){return A.none()}}:_s,set:function(e,t){if(!ks(e))throw new Error("Can only set raw "+As+" value of a "+As+" node");e.dom().nodeValue=t}}),Il=function(e){return Ll.get(e)},Ml=function(r,o,i,a){return Wr.parent(o).fold(function(){return"skipping"},function(e){return"br"===a||(n=o,sr.isText(n)&&"\ufeff"===Il(n))?"skipping":(t=o,sr.isElement(t)&&Ki.has(t,ia())?"existing":Gu(o)?"caret":Cl.isValid(r,i,a)&&Cl.isValid(r,sr.name(e),i)?"valid":"invalid-child");var t,n})},Fl=undefined&&undefined.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&(n[r[o]]=e[r[o]])}return n},Ul=function(r,e,t,n,o){var i,a,u=o.uid,s=void 0===u?(i="mce-annotation",a=(new Date).getTime(),i+"_"+Math.floor(1e9*Math.random())+ ++ga+String(a)):u,c=Fl(o,["uid"]),l=[],f=er.fromTag("span");Ki.add(f,ia()),vr.set(f,""+ua(),s),vr.set(f,""+aa(),t);var d=n(s,c),m=d.attributes,g=void 0===m?{}:m,p=d.classes,h=void 0===p?[]:p;vr.setAll(f,g),pa(f,h);var v=Oi(A.none()),b=function(){v.set(A.none())},y=function(e){F(e,C)},C=function(e){switch(Ml(r,e,"span",sr.name(e))){case"invalid-child":b();var t=Wr.children(e);y(t),b();break;case"valid":var n=v.get().getOrThunk(function(){var e=ba(f);return l.push(e),v.set(A.some(e)),e});ki.wrap(e,n)}};return Pl(r.dom,e,function(e){var t;b(),t=$(e,er.fromDom),y(t)}),l},zl=function(a,u,s,c){a.undoManager.transact(function(){var e,t,n,r=a.selection.getRng();r.collapsed&&(n=Bl(e=a,t=r,[{inline:!0}],!1),t.setStart(n.startContainer,n.startOffset),t.setEnd(n.endContainer,n.endOffset),e.selection.setRng(t));var o=Xu.getPersistentBookmark(a.selection,!0),i=a.selection.getRng();Ul(a,i,u,s.decorate,c),a.selection.moveToBookmark(o)})};function Vl(r){var o=ma();da(r,o);var n=fa(r,o);return{register:function(e,t){o.register(e,t)},annotate:function(t,n){o.lookup(t).each(function(e){zl(r,t,e,n)})},annotationChanged:function(e,t){n.addListener(e,t)},remove:function(e){sa(r,A.some(e)).each(function(e){var t=e.elements;F(t,Di.unwrap)})},getAll:function(e){var t=la(r,e);return fr(t,function(e){return $(e,function(e){return e.dom()})})}}}var ql=function(e){return Yt.grep(e.childNodes,function(e){return"LI"===e.nodeName})},Hl=function(e){return e&&e.firstChild&&e.firstChild===e.lastChild&&("\xa0"===(t=e.firstChild).data||Bo.isBr(t));var t},jl=function(e){return 0<e.length&&(!(t=e[e.length-1]).firstChild||Hl(t))?e.slice(0,-1):e;var t},$l=function(e,t){var n=e.getParent(t,e.isBlock);return n&&"LI"===n.nodeName?n:null},Wl=function(e,t){var n=Au.after(e),r=Ts(t).prev(n);return r?r.toRange():null},Kl=function(t,e,n){var r,o,i,a,u=t.parentNode;return Yt.each(e,function(e){u.insertBefore(e,t)}),r=t,o=n,i=Au.before(r),(a=Ts(o).next(i))?a.toRange():null},Xl=function(e,t){var n,r,o,i,a,u,s=t.firstChild,c=t.lastChild;return s&&"meta"===s.name&&(s=s.next),c&&"mce_marker"===c.attr("id")&&(c=c.prev),r=c,u=(n=e).getNonEmptyElements(),r&&(r.isEmpty(u)||(o=r,n.getBlockElements()[o.name]&&(a=o).firstChild&&a.firstChild===a.lastChild&&("br"===(i=o.firstChild).name||"\xa0"===i.value)))&&(c=c.prev),!(!s||s!==c||"ul"!==s.name&&"ol"!==s.name)},Yl=function(e,o,i,t){var n,r,a,u,s,c,l,f,d,m,g,p,h,v,b,y,C,x,w,N=(n=o,r=t,c=e.serialize(r),l=n.createFragment(c),u=(a=l).firstChild,s=a.lastChild,u&&"META"===u.nodeName&&u.parentNode.removeChild(u),s&&"mce_marker"===s.id&&s.parentNode.removeChild(s),a),E=$l(o,i.startContainer),S=jl(ql(N.firstChild)),T=o.getRoot(),k=function(e){var t=Au.fromRangeStart(i),n=Ts(o.getRoot()),r=1===e?n.prev(t):n.next(t);return!r||$l(o,r.getNode())!==E};return k(1)?Kl(E,S,T):k(2)?(f=E,d=S,m=T,o.insertAfter(d.reverse(),f),Wl(d[0],m)):(p=S,h=T,v=g=E,y=(b=i).cloneRange(),C=b.cloneRange(),y.setStartBefore(v),C.setEndAfter(v),x=[y.cloneContents(),C.cloneContents()],(w=g.parentNode).insertBefore(x[0],g),Yt.each(p,function(e){w.insertBefore(e,g)}),w.insertBefore(x[1],g),w.removeChild(g),Wl(p[p.length-1],h))},Gl=function(e,t){return!!$l(e,t)},Jl=Yt.each,Ql=function(o){this.compare=function(e,t){if(e.nodeName!==t.nodeName)return!1;var n=function(n){var r={};return Jl(o.getAttribs(n),function(e){var t=e.nodeName.toLowerCase();0!==t.indexOf("_")&&"style"!==t&&0!==t.indexOf("data-")&&(r[t]=o.getAttrib(n,t))}),r},r=function(e,t){var n,r;for(r in e)if(e.hasOwnProperty(r)){if(void 0===(n=t[r]))return!1;if(e[r]!==n)return!1;delete t[r]}for(r in t)if(t.hasOwnProperty(r))return!1;return!0};return!(!r(n(e),n(t))||!r(o.parseStyle(o.getAttrib(e,"style")),o.parseStyle(o.getAttrib(t,"style")))||hl(e)||hl(t))}},Zl=function(e){var t=Xi(e,"br"),n=U(function(e){for(var t=[],n=e.dom();n;)t.push(er.fromDom(n)),n=n.lastChild;return t}(e).slice(-1),go);t.length===n.length&&F(n,Di.remove)},ef=function(e){Di.empty(e),ki.append(e,er.fromHtml('<br data-mce-bogus="1">'))},tf=function(n){Wr.lastChild(n).each(function(t){Wr.prevSibling(t).each(function(e){fo(n)&&go(t)&&fo(e)&&Di.remove(t)})})},nf=Yt.makeMap;function rf(e){var u,s,c,l,f,d=[];return u=(e=e||{}).indent,s=nf(e.indent_before||""),c=nf(e.indent_after||""),l=Wo.getEncodeFunc(e.entity_encoding||"raw",e.entities),f="html"===e.element_format,{start:function(e,t,n){var r,o,i,a;if(u&&s[e]&&0<d.length&&0<(a=d[d.length-1]).length&&"\n"!==a&&d.push("\n"),d.push("<",e),t)for(r=0,o=t.length;r<o;r++)i=t[r],d.push(" ",i.name,'="',l(i.value,!0),'"');d[d.length]=!n||f?">":" />",n&&u&&c[e]&&0<d.length&&0<(a=d[d.length-1]).length&&"\n"!==a&&d.push("\n")},end:function(e){var t;d.push("</",e,">"),u&&c[e]&&0<d.length&&0<(t=d[d.length-1]).length&&"\n"!==t&&d.push("\n")},text:function(e,t){0<e.length&&(d[d.length]=t?e:l(e))},cdata:function(e){d.push("<![CDATA[",e,"]]>")},comment:function(e){d.push("\x3c!--",e,"--\x3e")},pi:function(e,t){t?d.push("<?",e," ",l(t),"?>"):d.push("<?",e,"?>"),u&&d.push("\n")},doctype:function(e){d.push("<!DOCTYPE",e,">",u?"\n":"")},reset:function(){d.length=0},getContent:function(){return d.join("").replace(/\n$/,"")}}}function of(t,g){void 0===g&&(g=ri());var p=rf(t);return(t=t||{}).validate=!("validate"in t)||t.validate,{serialize:function(e){var f,d;d=t.validate,f={3:function(e){p.text(e.value,e.raw)},8:function(e){p.comment(e.value)},7:function(e){p.pi(e.name,e.value)},10:function(e){p.doctype(e.value)},4:function(e){p.cdata(e.value)},11:function(e){if(e=e.firstChild)for(;m(e),e=e.next;);}},p.reset();var m=function(e){var t,n,r,o,i,a,u,s,c,l=f[e.type];if(l)l(e);else{if(t=e.name,n=e.shortEnded,r=e.attributes,d&&r&&1<r.length&&((a=[]).map={},c=g.getElementRule(e.name))){for(u=0,s=c.attributesOrder.length;u<s;u++)(o=c.attributesOrder[u])in r.map&&(i=r.map[o],a.map[o]=i,a.push({name:o,value:i}));for(u=0,s=r.length;u<s;u++)(o=r[u].name)in a.map||(i=r.map[o],a.map[o]=i,a.push({name:o,value:i}));r=a}if(p.start(e.name,r,n),!n){if(e=e.firstChild)for(;m(e),e=e.next;);p.end(t)}}};return 1!==e.type||t.inner?f[11](e):m(e),p.getContent()}}}var af=function(a){var u=Au.fromRangeStart(a),s=Au.fromRangeEnd(a),c=a.commonAncestorContainer;return al.fromPosition(!1,c,s).map(function(e){return!Uc(u,s,c)&&Uc(u,e,c)?(t=u.container(),n=u.offset(),r=e.container(),o=e.offset(),(i=document.createRange()).setStart(t,n),i.setEnd(r,o),i):a;var t,n,r,o,i}).getOr(a)},uf=function(e){return e.collapsed?e:af(e)},sf=Bo.matchNodeNames("td th"),cf=function(o,e,t){var n,r,i,a,u,s,c,l,f,d,m,g,p=o.schema.getTextInlineElements(),h=o.selection,v=o.dom;if(/^ | $/.test(e)&&(e=function(e){var t,n,r;t=h.getRng(),n=t.startContainer,r=t.startOffset;var o=function(e){return n[e]&&3===n[e].nodeType};return 3===n.nodeType&&(0<r?e=e.replace(/^ /," "):o("previousSibling")||(e=e.replace(/^ /," ")),r<n.length?e=e.replace(/ (<br>|)$/," "):o("nextSibling")||(e=e.replace(/( | )(<br>|)$/," "))),e}(e)),n=o.parser,g=t.merge,r=of({validate:o.settings.validate},o.schema),m='<span id="mce_marker" data-mce-type="bookmark">​</span>',s={content:e,format:"html",selection:!0,paste:t.paste},(s=o.fire("BeforeSetContent",s)).isDefaultPrevented())o.fire("SetContent",{content:s.content,format:"html",selection:!0,paste:t.paste});else{-1===(e=s.content).indexOf("{$caret}")&&(e+="{$caret}"),e=e.replace(/\{\$caret\}/,m);var b,y,C,x,w=(l=h.getRng()).startContainer||(l.parentElement?l.parentElement():null),N=o.getBody();w===N&&h.isCollapsed()&&v.isBlock(N.firstChild)&&(b=N.firstChild)&&!o.schema.getShortEndedElements()[b.nodeName]&&v.isEmpty(N.firstChild)&&((l=v.createRng()).setStart(N.firstChild,0),l.setEnd(N.firstChild,0),h.setRng(l)),h.isCollapsed()||(o.selection.setRng(uf(o.selection.getRng())),o.getDoc().execCommand("Delete",!1,null),C=(y=h.getRng()).startContainer,x=y.startOffset,3===C.nodeType&&y.collapsed&&("\xa0"===C.data[x]?(C.deleteData(x,1),/[\u00a0| ]$/.test(e)||(e+=" ")):"\xa0"===C.data[x-1]&&(C.deleteData(x-1,1),/[\u00a0| ]$/.test(e)||(e=" "+e))));var E,S,T,k={context:(i=h.getNode()).nodeName.toLowerCase(),data:t.data,insert:!0};if(u=n.parse(e,k),!0===t.paste&&Xl(o.schema,u)&&Gl(v,i))return l=Yl(r,v,o.selection.getRng(),u),o.selection.setRng(l),void o.fire("SetContent",s);if(function(e){for(var t=e;t=t.walk();)1===t.type&&t.attr("data-mce-fragment","1")}(u),"mce_marker"===(f=u.lastChild).attr("id"))for(f=(c=f).prev;f;f=f.walk(!0))if(3===f.type||!v.isBlock(f.name)){o.schema.isValidChild(f.parent.name,"span")&&f.parent.insert(c,f,"br"===f.name);break}if(o._selectionOverrides.showBlockCaretContainer(i),k.invalid){for(h.setContent(m),i=h.getNode(),a=o.getBody(),9===i.nodeType?i=f=a:f=i;f!==a;)f=(i=f).parentNode;e=i===a?a.innerHTML:v.getOuterHTML(i),e=r.serialize(n.parse(e.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return r.serialize(u)}))),i===a?v.setHTML(a,e):v.setOuterHTML(i,e)}else e=r.serialize(u),function(e,t,n){if("all"===n.getAttribute("data-mce-bogus"))n.parentNode.insertBefore(e.dom.createFragment(t),n);else{var r=n.firstChild,o=n.lastChild;!r||r===o&&"BR"===r.nodeName?e.dom.setHTML(n,t):e.selection.setContent(t)}}(o,e,i);!function(){if(g){var n=o.getBody(),r=new Ql(v);Yt.each(v.select("*[data-mce-fragment]"),function(e){for(var t=e.parentNode;t&&t!==n;t=t.parentNode)p[e.nodeName.toLowerCase()]&&r.compare(t,e)&&v.remove(e,!0)})}}(),function(e){var t,n,r;if(e){if(h.scrollIntoView(e),t=function(e){for(var t=o.getBody();e&&e!==t;e=e.parentNode)if("false"===o.dom.getContentEditable(e))return e;return null}(e))return v.remove(e),h.select(t);l=v.createRng(),(f=e.previousSibling)&&3===f.nodeType?(l.setStart(f,f.nodeValue.length),Re.ie||(d=e.nextSibling)&&3===d.nodeType&&(f.appendData(d.data),d.parentNode.removeChild(d))):(l.setStartBefore(e),l.setEndBefore(e)),n=v.getParent(e,v.isBlock),v.remove(e),n&&v.isEmpty(n)&&(o.$(n).empty(),l.setStart(n,0),l.setEnd(n,0),sf(n)||n.getAttribute("data-mce-fragment")||!(r=function(e){var t=Au.fromRangeStart(e);if(t=Ts(o.getBody()).next(t))return t.toRange()}(l))?v.add(n,v.create("br",{"data-mce-bogus":"1"})):(l=r,v.remove(n))),h.setRng(l)}}(v.get("mce_marker")),E=o.getBody(),Yt.each(E.getElementsByTagName("*"),function(e){e.removeAttribute("data-mce-fragment")}),S=o.dom,T=o.selection.getStart(),A.from(S.getParent(T,"td,th")).map(er.fromDom).each(tf),o.fire("SetContent",s),o.addVisual()}},lf=function(e,t){var n,r,o="string"!=typeof(n=t)?(r=Yt.extend({paste:n.paste,data:{paste:n.paste}},n),{content:n.content,details:r}):{content:n,details:{}};cf(e,o.content,o.details)},ff=Ar("sections","settings"),df=Qn.detect().deviceType.isTouch(),mf=["lists","autolink","autosave"],gf={theme:"mobile"},pf=function(e){var t=R(e)?e.join(" "):e,n=$(k(t)?t.split(" "):[],$n);return U(n,function(e){return 0<e.length})},hf=function(n,e){var r,o,i,t=(r=function(e,t){return I(n,t)},o={},i={},lr(e,function(e,t){(r(e,t)?o:i)[t]=e}),{t:o,f:i});return ff(t.t,t.f)},vf=function(e,t){return e.sections().hasOwnProperty(t)},bf=function(e,t,n,r){var o,i=pf(n.forced_plugins),a=pf(r.plugins),u=e&&vf(t,"mobile")?U(a,b(I,mf)):a,s=(o=u,[].concat(pf(i)).concat(pf(o)));return Yt.extend(r,{plugins:s.join(" ")})},yf=function(e,t,n,r){var o,i,a,u,s,c,l,f,d,m,g=hf(["mobile"],r),p=Yt.extend(t,n,g.settings(),(f=e,m=(d=g).settings().inline,f&&vf(d,"mobile")&&!m?(u="mobile",s=gf,c=g.sections(),l=c.hasOwnProperty(u)?c[u]:{},Yt.extend({},s,l)):{}),{validate:!0,content_editable:g.settings().inline,external_plugins:(o=n,i=g.settings(),a=i.external_plugins?i.external_plugins:{},o&&o.external_plugins?Yt.extend({},o.external_plugins,a):a)});return bf(e,g,n,p)},Cf=function(e,t,n){return A.from(t.settings[n]).filter(e)},xf=b(Cf,k),wf=function(e,t,n,r){var o,i,a,u=t in e.settings?e.settings[t]:n;return"hash"===r?(a={},"string"==typeof(i=u)?F(0<i.indexOf("=")?i.split(/[;,](?![^=;,]*(?:[;,]|$))/):i.split(","),function(e){var t=e.split("=");1<t.length?a[Yt.trim(t[0])]=Yt.trim(t[1]):a[Yt.trim(t[0])]=Yt.trim(t)}):a=i,a):"string"===r?Cf(k,e,t).getOr(n):"number"===r?Cf(P,e,t).getOr(n):"boolean"===r?Cf(B,e,t).getOr(n):"object"===r?Cf(_,e,t).getOr(n):"array"===r?Cf(R,e,t).getOr(n):"string[]"===r?Cf((o=k,function(e){return R(e)&&J(e,o)}),e,t).getOr(n):"function"===r?Cf(O,e,t).getOr(n):u},Nf=/[\u0591-\u07FF\uFB1D-\uFDFF\uFE70-\uFEFC]/,Ef=function(e,t){var n=t.container(),r=t.offset();return e?Ra(n)?Bo.isText(n.nextSibling)?Au(n.nextSibling,0):Au.after(n):Oa(t)?Au(n,r+1):t:Ra(n)?Bo.isText(n.previousSibling)?Au(n.previousSibling,n.previousSibling.data.length):Au.before(n):Pa(t)?Au(n,r-1):t},Sf={isInlineTarget:function(e,t){var n=xf(e,"inline_boundaries_selector").getOr("a[href],code");return Ir.is(er.fromDom(t),n)},findRootInline:function(e,t,n){var r,o,i,a=(r=e,o=t,i=n,U(hi.DOM.getParents(i.container(),"*",o),r));return A.from(a[a.length-1])},isRtl:function(e){return"rtl"===hi.DOM.getStyle(e,"direction",!0)||(t=e.textContent,Nf.test(t));var t},isAtZwsp:function(e){return Oa(e)||Pa(e)},normalizePosition:Ef,normalizeForwards:b(Ef,!0),normalizeBackwards:b(Ef,!1),hasSameParentBlock:function(e,t,n){var r=Fc(t,e),o=Fc(n,e);return r&&r===o}},Tf=function(e,t){return Ur.contains(e,t)?ea.closest(t,function(e){return po(e)||vo(e)},(n=e,function(e){return Ur.eq(n,er.fromDom(e.dom().parentNode))})):A.none();var n},kf=function(e){var t,n,r;e.dom.isEmpty(e.getBody())&&(e.setContent(""),n=(t=e).getBody(),r=n.firstChild&&t.dom.isBlock(n.firstChild)?n.firstChild:n,t.selection.setCursorLocation(r,0))},Af=function(i,a,u){return au([al.firstPositionIn(u),al.lastPositionIn(u)],function(e,t){var n=Sf.normalizePosition(!0,e),r=Sf.normalizePosition(!1,t),o=Sf.normalizePosition(!1,a);return i?al.nextPosition(u,o).map(function(e){return e.isEqual(r)&&a.isEqual(n)}).getOr(!1):al.prevPosition(u,o).map(function(e){return e.isEqual(n)&&a.isEqual(r)}).getOr(!1)}).getOr(!0)},_f=function(e,t,n){return na(e,t,n).isSome()},Rf=function(e,t){return Bo.isText(t)&&/^[ \t\r\n]*$/.test(t.data)&&!1===(n=e,r=t,o=er.fromDom(n),i=er.fromDom(r),_f(i,"pre,code",b(Ur.eq,o)));var n,r,o,i},Df=function(e,t){return Ka(t)&&!1===Rf(e,t)||(n=t,Bo.isElement(n)&&"A"===n.nodeName&&n.hasAttribute("name"))||Bf(t);var n},Bf=Bo.hasAttribute("data-mce-bookmark"),Of=Bo.hasAttribute("data-mce-bogus"),Pf=Bo.hasAttributeValue("data-mce-bogus","all"),Lf=function(e){return function(e){var t,n,r=0;if(Df(e,e))return!1;if(!(n=e.firstChild))return!0;t=new io(n,e);do{if(Pf(n))n=t.next(!0);else if(Of(n))n=t.next();else if(Bo.isBr(n))r++,n=t.next();else{if(Df(e,n))return!1;n=t.next()}}while(n);return r<=1}(e.dom())},If=Ar("block","position"),Mf=Ar("from","to"),Ff=function(e,t){var n=er.fromDom(e),r=er.fromDom(t.container());return Tf(n,r).map(function(e){return If(e,t)})},Uf=function(o,i,e){var t=Ff(o,Au.fromRangeStart(e)),n=t.bind(function(e){return al.fromPosition(i,o,e.position()).bind(function(e){return Ff(o,e).map(function(e){return t=o,n=i,r=e,Bo.isBr(r.position().getNode())&&!1===Lf(r.block())?al.positionIn(!1,r.block().dom()).bind(function(e){return e.isEqual(r.position())?al.fromPosition(n,t,e).bind(function(e){return Ff(t,e)}):A.some(r)}).getOr(r):r;var t,n,r})})});return au([t,n],Mf).filter(function(e){return r=e,!1===Ur.eq(r.from().block(),r.to().block())&&(n=e,Wr.parent(n.from().block()).bind(function(t){return Wr.parent(n.to().block()).filter(function(e){return Ur.eq(t,e)})}).isSome())&&(t=e,!1===Bo.isContentEditableFalse(t.from().block())&&!1===Bo.isContentEditableFalse(t.to().block()));var t,n,r})},zf=function(e,t,n){return n.collapsed?Uf(e,t,n):A.none()},Vf=function(e,t,n){return Ur.contains(t,e)?Wr.parents(e,function(e){return n(e)||Ur.eq(e,t)}).slice(0,-1):[]},qf=function(e,t){return Vf(e,t,H(!1))},Hf=qf,jf=function(e,t){return[e].concat(qf(e,t))},$f=function(e){var t,n,r=(t=e,n=Wr.children(t),K(n,fo).fold(function(){return n},function(e){return n.slice(0,e)}));return F(r,function(e){Di.remove(e)}),r},Wf=function(e,t){al.positionIn(e,t.dom()).each(function(e){var t=e.getNode();Bo.isBr(t)&&Di.remove(er.fromDom(t))})},Kf=function(e,t){var n=jf(t,e);return V(n.reverse(),Lf).each(Di.remove)},Xf=function(o,i){return Ur.contains(i,o)?Wr.parent(o).bind(function(e){return Ur.eq(e,i)?A.some(o):(t=i,n=o,r=Wr.parents(n,function(e){return Ur.eq(e,t)}),A.from(r[r.length-2]));var t,n,r}):A.none()},Yf=function(n,r,o){if(Lf(o))return Di.remove(o),Lf(r)&&ef(r),al.firstPositionIn(r.dom());Wf(!0,r),Wf(!1,o);var i=$f(r);return Xf(r,o).fold(function(){Kf(n,r);var e=al.lastPositionIn(o.dom());return F(i,function(e){ki.append(o,e)}),e},function(t){var e=al.prevPosition(o.dom(),Au.before(t.dom()));return F(i,function(e){ki.before(t,e)}),Kf(n,r),e})},Gf=function(e,t,n,r){return t?Yf(e,r,n):Yf(e,n,r)},Jf=function(t,n){var e,r=er.fromDom(t.getBody());return(e=zf(r.dom(),n,t.selection.getRng()).bind(function(e){return Gf(r,n,e.from().block(),e.to().block())})).each(function(e){t.selection.setRng(e.toRange())}),e.isSome()},Qf=function(e,t){var n=er.fromDom(t),r=b(Ur.eq,e);return ea.ancestor(n,Co,r).isSome()},Zf=function(e,t){var n,r,o=al.prevPosition(e.dom(),Au.fromRangeStart(t)).isNone(),i=al.nextPosition(e.dom(),Au.fromRangeEnd(t)).isNone();return!(Qf(n=e,(r=t).startContainer)||Qf(n,r.endContainer))&&o&&i},ed=function(e){var n,r,o,t,i=er.fromDom(e.getBody()),a=e.selection.getRng();return Zf(i,a)?((t=e).setContent(""),t.selection.setCursorLocation(),!0):(n=i,r=e.selection,o=r.getRng(),au([Tf(n,er.fromDom(o.startContainer)),Tf(n,er.fromDom(o.endContainer))],function(e,t){return!1===Ur.eq(e,t)&&(o.deleteContents(),Gf(n,!0,e,t).each(function(e){r.setRng(e.toRange())}),!0)}).getOr(!1))},td=function(e,t){return!e.selection.isCollapsed()&&ed(e)},nd=function(a){if(!R(a))throw new Error("cases must be an array");if(0===a.length)throw new Error("there must be at least one case");var u=[],n={};return F(a,function(e,r){var t=cr(e);if(1!==t.length)throw new Error("one and only one name per case");var o=t[0],i=e[o];if(n[o]!==undefined)throw new Error("duplicate key detected:"+o);if("cata"===o)throw new Error("cannot have a case named cata (sorry)");if(!R(i))throw new Error("case arguments must be an array");u.push(o),n[o]=function(){var e=arguments.length;if(e!==i.length)throw new Error("Wrong number of arguments to case "+o+". Expected "+i.length+" ("+i+"), got "+e);for(var n=new Array(e),t=0;t<n.length;t++)n[t]=arguments[t];return{fold:function(){if(arguments.length!==a.length)throw new Error("Wrong number of arguments to fold. Expected "+a.length+", got "+arguments.length);return arguments[r].apply(null,n)},match:function(e){var t=cr(e);if(u.length!==t.length)throw new Error("Wrong number of arguments to match. Expected: "+u.join(",")+"\nActual: "+t.join(","));if(!J(u,function(e){return I(t,e)}))throw new Error("Not all branches were specified when using match. Specified: "+t.join(", ")+"\nRequired: "+u.join(", "));return e[o].apply(null,n)},log:function(e){console.log(e,{constructors:u,constructor:o,params:n})}}}}),n},rd=nd([{remove:["element"]},{moveToElement:["element"]},{moveToPosition:["position"]}]),od=function(e,t,n,r){var o=r.getNode(!1===t);return Tf(er.fromDom(e),er.fromDom(n.getNode())).map(function(e){return Lf(e)?rd.remove(e.dom()):rd.moveToElement(o)}).orThunk(function(){return A.some(rd.moveToElement(o))})},id=function(u,s,c){return al.fromPosition(s,u,c).bind(function(e){return a=e.getNode(),Co(er.fromDom(a))||vo(er.fromDom(a))?A.none():(t=u,o=e,i=function(e){return mo(er.fromDom(e))&&!Uc(r,o,t)},Xc(!(n=s),r=c).fold(function(){return Xc(n,o).fold(H(!1),i)},i)?A.none():s&&Bo.isContentEditableFalse(e.getNode())?od(u,s,c,e):!1===s&&Bo.isContentEditableFalse(e.getNode(!0))?od(u,s,c,e):s&&Jc(c)?A.some(rd.moveToPosition(e)):!1===s&&Gc(c)?A.some(rd.moveToPosition(e)):A.none());var t,n,r,o,i,a})},ad=function(r,e,o){return i=e,a=o.getNode(!1===i),u=i?"after":"before",Bo.isElement(a)&&a.getAttribute("data-mce-caret")===u?(t=e,n=o.getNode(!1===e),t&&Bo.isContentEditableFalse(n.nextSibling)?A.some(rd.moveToElement(n.nextSibling)):!1===t&&Bo.isContentEditableFalse(n.previousSibling)?A.some(rd.moveToElement(n.previousSibling)):A.none()).fold(function(){return id(r,e,o)},A.some):id(r,e,o).bind(function(e){return t=r,n=o,e.fold(function(e){return A.some(rd.remove(e))},function(e){return A.some(rd.moveToElement(e))},function(e){return Uc(n,e,t)?A.none():A.some(rd.moveToPosition(e))});var t,n});var t,n,i,a,u},ud=function(e,t){return r=e,o=(n=t).container(),i=n.offset(),!1===Au.isTextPosition(n)&&o===r.parentNode&&i>Au.before(r).offset()?Au(t.container(),t.offset()-1):t;var n,r,o,i},sd=function(e){return Ka(e.previousSibling)?A.some((t=e.previousSibling,Bo.isText(t)?Au(t,t.data.length):Au.after(t))):e.previousSibling?al.lastPositionIn(e.previousSibling):A.none();var t},cd=function(e){return Ka(e.nextSibling)?A.some((t=e.nextSibling,Bo.isText(t)?Au(t,0):Au.before(t))):e.nextSibling?al.firstPositionIn(e.nextSibling):A.none();var t},ld=function(r,o){return sd(o).orThunk(function(){return cd(o)}).orThunk(function(){return e=r,t=o,n=Au.before(t.previousSibling?t.previousSibling:t.parentNode),al.prevPosition(e,n).fold(function(){return al.nextPosition(e,Au.after(t))},A.some);var e,t,n})},fd=function(n,r){return cd(r).orThunk(function(){return sd(r)}).orThunk(function(){return e=n,t=r,al.nextPosition(e,Au.after(t)).fold(function(){return al.prevPosition(e,Au.before(t))},A.some);var e,t})},dd=function(e,t,n){return(r=e,o=t,i=n,r?fd(o,i):ld(o,i)).map(b(ud,n));var r,o,i},md=function(t,n,e){e.fold(function(){t.focus()},function(e){t.selection.setRng(e.toRange(),n)})},gd=function(e,t){return t&&e.schema.getBlockElements().hasOwnProperty(sr.name(t))},pd=function(e){if(Lf(e)){var t=er.fromHtml('<br data-mce-bogus="1">');return Di.empty(e),ki.append(e,t),A.some(Au.before(t.dom()))}return A.none()},hd=function(t,n,e){var r,a,o,i=dd(n,t.getBody(),e.dom()),u=ea.ancestor(e,b(gd,t),(r=t.getBody(),function(e){return e.dom()===r})),s=(a=e,o=i,au([Wr.prevSibling(a),Wr.nextSibling(a),o],function(e,t,n){var r,o=e.dom(),i=t.dom();return Bo.isText(o)&&Bo.isText(i)?(r=o.data.length,o.appendData(i.data),Di.remove(t),Di.remove(a),n.container()===i?Au(o,r):n):(Di.remove(a),n)}).orThunk(function(){return Di.remove(a),o}));t.dom.isEmpty(t.getBody())?(t.setContent(""),t.selection.setCursorLocation()):u.bind(pd).fold(function(){md(t,n,s)},function(e){md(t,n,A.some(e))})},vd=function(a,u){var e,t,n,r,o;return(e=a.getBody(),t=u,n=a.selection.getRng(),r=$c(t?1:-1,e,n),o=Au.fromRangeStart(r),!1===t&&Jc(o)?A.some(rd.remove(o.getNode(!0))):t&&Gc(o)?A.some(rd.remove(o.getNode())):ad(e,t,o)).map(function(e){return e.fold((o=a,i=u,function(e){return o._selectionOverrides.hideFakeCaret(),hd(o,i,er.fromDom(e)),!0}),(n=a,r=u,function(e){var t=r?Au.before(e):Au.after(e);return n.selection.setRng(t.toRange()),!0}),(t=a,function(e){return t.selection.setRng(e.toRange()),!0}));var t,n,r,o,i}).getOr(!1)},bd=function(e,t){var n,r=e.selection.getNode();return!!Bo.isContentEditableFalse(r)&&(n=er.fromDom(e.getBody()),F(Xi(n,".mce-offscreen-selection"),Di.remove),hd(e,t,er.fromDom(e.selection.getNode())),kf(e),!0)},yd=function(e,t){return e.selection.isCollapsed()?vd(e,t):bd(e,t)},Cd=function(e){var t,n=function(e,t){for(;t&&t!==e;){if(Bo.isContentEditableTrue(t)||Bo.isContentEditableFalse(t))return t;t=t.parentNode}return null}(e.getBody(),e.selection.getNode());return Bo.isContentEditableTrue(n)&&e.dom.isBlock(n)&&e.dom.isEmpty(n)&&(t=e.dom.create("br",{"data-mce-bogus":"1"}),e.dom.setHTML(n,""),n.appendChild(t),e.selection.setRng(Au.before(t).toRange())),!0},xd=Bo.isText,wd=function(e){return xd(e)&&e.data[0]===Sa},Nd=function(e){return xd(e)&&e.data[e.data.length-1]===Sa},Ed=function(e){return e.ownerDocument.createTextNode(Sa)},Sd=function(e,t){return e?function(e){if(xd(e.previousSibling))return Nd(e.previousSibling)||e.previousSibling.appendData(Sa),e.previousSibling;if(xd(e))return wd(e)||e.insertData(0,Sa),e;var t=Ed(e);return e.parentNode.insertBefore(t,e),t}(t):function(e){if(xd(e.nextSibling))return wd(e.nextSibling)||e.nextSibling.insertData(0,Sa),e.nextSibling;if(xd(e))return Nd(e)||e.appendData(Sa),e;var t=Ed(e);return e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t}(t)},Td=b(Sd,!0),kd=b(Sd,!1),Ad=function(e,t){return Bo.isText(e.container())?Sd(t,e.container()):Sd(t,e.getNode())},_d=function(e,t){var n=t.get();return n&&e.container()===n&&Ra(n)},Rd=function(n,e){return e.fold(function(e){us.remove(n.get());var t=Td(e);return n.set(t),A.some(Au(t,t.length-1))},function(e){return al.firstPositionIn(e).map(function(e){if(_d(e,n))return Au(n.get(),1);us.remove(n.get());var t=Ad(e,!0);return n.set(t),Au(t,1)})},function(e){return al.lastPositionIn(e).map(function(e){if(_d(e,n))return Au(n.get(),n.get().length-1);us.remove(n.get());var t=Ad(e,!1);return n.set(t),Au(t,t.length-1)})},function(e){us.remove(n.get());var t=kd(e);return n.set(t),A.some(Au(t,1))})},Dd=function(e,t){for(var n=0;n<e.length;n++){var r=e[n].apply(null,t);if(r.isSome())return r}return A.none()},Bd=nd([{before:["element"]},{start:["element"]},{end:["element"]},{after:["element"]}]),Od=function(e,t){var n=Fc(t,e);return n||e},Pd=function(e,t,n){var r=Sf.normalizeForwards(n),o=Od(t,r.container());return Sf.findRootInline(e,o,r).fold(function(){return al.nextPosition(o,r).bind(b(Sf.findRootInline,e,o)).map(function(e){return Bd.before(e)})},A.none)},Ld=function(e,t){return null===Ju(e,t)},Id=function(e,t,n){return Sf.findRootInline(e,t,n).filter(b(Ld,t))},Md=function(e,t,n){var r=Sf.normalizeBackwards(n);return Id(e,t,r).bind(function(e){return al.prevPosition(e,r).isNone()?A.some(Bd.start(e)):A.none()})},Fd=function(e,t,n){var r=Sf.normalizeForwards(n);return Id(e,t,r).bind(function(e){return al.nextPosition(e,r).isNone()?A.some(Bd.end(e)):A.none()})},Ud=function(e,t,n){var r=Sf.normalizeBackwards(n),o=Od(t,r.container());return Sf.findRootInline(e,o,r).fold(function(){return al.prevPosition(o,r).bind(b(Sf.findRootInline,e,o)).map(function(e){return Bd.after(e)})},A.none)},zd=function(e){return!1===Sf.isRtl(qd(e))},Vd=function(e,t,n){return Dd([Pd,Md,Fd,Ud],[e,t,n]).filter(zd)},qd=function(e){return e.fold(j,j,j,j)},Hd=function(e){return e.fold(H("before"),H("start"),H("end"),H("after"))},jd=function(e){return e.fold(Bd.before,Bd.before,Bd.after,Bd.after)},$d=function(n,e,r,t,o,i){return au([Sf.findRootInline(e,r,t),Sf.findRootInline(e,r,o)],function(e,t){return e!==t&&Sf.hasSameParentBlock(r,e,t)?Bd.after(n?e:t):i}).getOr(i)},Wd=function(e,r){return e.fold(H(!0),function(e){return n=r,!(Hd(t=e)===Hd(n)&&qd(t)===qd(n));var t,n})},Kd=function(e,t){return e?t.fold(q(A.some,Bd.start),A.none,q(A.some,Bd.after),A.none):t.fold(A.none,q(A.some,Bd.before),A.none,q(A.some,Bd.end))},Xd=function(a,u,s,c){var e=Sf.normalizePosition(a,c),l=Vd(u,s,e);return Vd(u,s,e).bind(b(Kd,a)).orThunk(function(){return t=a,n=u,r=s,o=l,e=c,i=Sf.normalizePosition(t,e),al.fromPosition(t,r,i).map(b(Sf.normalizePosition,t)).fold(function(){return o.map(jd)},function(e){return Vd(n,r,e).map(b($d,t,n,r,i,e)).filter(b(Wd,o))}).filter(zd);var t,n,r,o,e,i})},Yd=Vd,Gd=Xd,Jd=(b(Xd,!1),b(Xd,!0),jd),Qd=function(e){return e.fold(Bd.start,Bd.start,Bd.end,Bd.end)},Zd=function(e){return O(e.selection.getSel().modify)},em=function(e,t,n){var r=e?1:-1;return t.setRng(Au(n.container(),n.offset()+r).toRange()),t.getSel().modify("move",e?"forward":"backward","word"),!0},tm=function(e,t){var n=t.selection.getRng(),r=e?Au.fromRangeEnd(n):Au.fromRangeStart(n);return!!Zd(t)&&(e&&Oa(r)?em(!0,t.selection,r):!(e||!Pa(r))&&em(!1,t.selection,r))},nm=function(e,t){var n=e.dom.createRng();n.setStart(t.container(),t.offset()),n.setEnd(t.container(),t.offset()),e.selection.setRng(n)},rm=function(e){return!1!==e.settings.inline_boundaries},om=function(e,t){e?t.setAttribute("data-mce-selected","inline-boundary"):t.removeAttribute("data-mce-selected")},im=function(t,e,n){return Rd(e,n).map(function(e){return nm(t,e),n})},am=function(e,t,n){return function(){return!!rm(t)&&tm(e,t)}},um={move:function(a,u,s){return function(){return!!rm(a)&&(t=a,n=u,e=s,r=t.getBody(),o=Au.fromRangeStart(t.selection.getRng()),i=b(Sf.isInlineTarget,t),Gd(e,i,r,o).bind(function(e){return im(t,n,e)})).isSome();var t,n,e,r,o,i}},moveNextWord:b(am,!0),movePrevWord:b(am,!1),setupSelectedState:function(a){var u=Oi(null),s=b(Sf.isInlineTarget,a);return a.on("NodeChange",function(e){var t,n,r,o,i;rm(a)&&(t=s,n=a.dom,r=e.parents,o=U(n.select('*[data-mce-selected="inline-boundary"]'),t),i=U(r,t),F(Z(o,i),b(om,!1)),F(Z(i,o),b(om,!0)),function(e,t){if(e.selection.isCollapsed()&&!0!==e.composing&&t.get()){var n=Au.fromRangeStart(e.selection.getRng());Au.isTextPosition(n)&&!1===Sf.isAtZwsp(n)&&(nm(e,us.removeAndReposition(t.get(),n)),t.set(null))}}(a,u),function(n,r,o,e){if(r.selection.isCollapsed()){var t=U(e,n);F(t,function(e){var t=Au.fromRangeStart(r.selection.getRng());Yd(n,r.getBody(),t).bind(function(e){return im(r,o,e)})})}}(s,a,u,e.parents))}),u},setCaretPosition:nm},sm=function(t,n){return function(e){return Rd(n,e).map(function(e){return um.setCaretPosition(t,e),!0}).getOr(!1)}},cm=function(r,o,i,a){var u=r.getBody(),s=b(Sf.isInlineTarget,r);r.undoManager.ignore(function(){var e,t,n;r.selection.setRng((e=i,t=a,(n=document.createRange()).setStart(e.container(),e.offset()),n.setEnd(t.container(),t.offset()),n)),r.execCommand("Delete"),Yd(s,u,Au.fromRangeStart(r.selection.getRng())).map(Qd).map(sm(r,o))}),r.nodeChanged()},lm=function(n,r,i,o){var e,t,a=(e=n.getBody(),t=o.container(),Fc(t,e)||e),u=b(Sf.isInlineTarget,n),s=Yd(u,a,o);return s.bind(function(e){return i?e.fold(H(A.some(Qd(e))),A.none,H(A.some(Jd(e))),A.none):e.fold(A.none,H(A.some(Jd(e))),A.none,H(A.some(Qd(e))))}).map(sm(n,r)).getOrThunk(function(){var t=al.navigate(i,a,o),e=t.bind(function(e){return Yd(u,a,e)});return s.isSome()&&e.isSome()?Sf.findRootInline(u,a,o).map(function(e){return o=e,!!au([al.firstPositionIn(o),al.lastPositionIn(o)],function(e,t){var n=Sf.normalizePosition(!0,e),r=Sf.normalizePosition(!1,t);return al.nextPosition(o,n).map(function(e){return e.isEqual(r)}).getOr(!0)}).getOr(!0)&&(hd(n,i,er.fromDom(e)),!0);var o}).getOr(!1):e.bind(function(e){return t.map(function(e){return i?cm(n,r,o,e):cm(n,r,e,o),!0})}).getOr(!1)})},fm=function(e,t,n){if(e.selection.isCollapsed()&&!1!==e.settings.inline_boundaries){var r=Au.fromRangeStart(e.selection.getRng());return lm(e,t,n,r)}return!1},dm=Ar("start","end"),mm=Ar("rng","table","cells"),gm=nd([{removeTable:["element"]},{emptyCells:["cells"]}]),pm=function(e,t){return oa(er.fromDom(e),"td,th",t)},hm=function(e,t){return na(e,"table",t)},vm=function(e){return!1===Ur.eq(e.start(),e.end())},bm=function(e,n){return hm(e.start(),n).bind(function(t){return hm(e.end(),n).bind(function(e){return Ur.eq(t,e)?A.some(t):A.none()})})},ym=function(e){return Xi(e,"td,th")},Cm=function(r,e){var t=pm(e.startContainer,r),n=pm(e.endContainer,r);return e.collapsed?A.none():au([t,n],dm).fold(function(){return t.fold(function(){return n.bind(function(t){return hm(t,r).bind(function(e){return ee(ym(e)).map(function(e){return dm(e,t)})})})},function(t){return hm(t,r).bind(function(e){return te(ym(e)).map(function(e){return dm(t,e)})})})},function(e){return xm(r,e)?A.none():(n=r,hm((t=e).start(),n).bind(function(e){return te(ym(e)).map(function(e){return dm(t.start(),e)})}));var t,n})},xm=function(e,t){return bm(t,e).isSome()},wm=function(e,t){var n,r,o,i,a,u=(n=e,b(Ur.eq,n));return(r=t,o=u,i=pm(r.startContainer,o),a=pm(r.endContainer,o),au([i,a],dm).filter(vm).filter(function(e){return xm(o,e)}).orThunk(function(){return Cm(o,r)})).bind(function(e){return bm(t=e,u).map(function(e){return mm(t,e,ym(e))});var t})},Nm=function(e,t){return K(e,function(e){return Ur.eq(e,t)})},Em=function(n){return(r=n,au([Nm(r.cells(),r.rng().start()),Nm(r.cells(),r.rng().end())],function(e,t){return r.cells().slice(e,t+1)})).map(function(e){var t=n.cells();return e.length===t.length?gm.removeTable(n.table()):gm.emptyCells(e)});var r},Sm=function(e,t){return wm(e,t).bind(Em)},Tm=function(e){var t=[];if(e)for(var n=0;n<e.rangeCount;n++)t.push(e.getRangeAt(n));return t},km=Tm,Am=function(e){return G(e,function(e){var t=nu(e);return t?[er.fromDom(t)]:[]})},_m=function(e){return 1<Tm(e).length},Rm=function(e){return U(Am(e),Co)},Dm=function(e){return Xi(e,"td[data-mce-selected],th[data-mce-selected]")},Bm=function(e,t){var n=Dm(t),r=Rm(e);return 0<n.length?n:r},Om=Bm,Pm=function(e){return Bm(km(e.selection.getSel()),er.fromDom(e.getBody()))},Lm=function(e,t){return F(t,ef),e.selection.setCursorLocation(t[0].dom(),0),!0},Im=function(e,t){return hd(e,!1,t),!0},Mm=function(n,e,r,t){return Um(e,t).fold(function(){return t=n,Sm(e,r).map(function(e){return e.fold(b(Im,t),b(Lm,t))});var t},function(e){return zm(n,e)}).getOr(!1)},Fm=function(e,t){return V(jf(t,e),Co)},Um=function(e,t){return V(jf(t,e),function(e){return"caption"===sr.name(e)})},zm=function(e,t){return ef(t),e.selection.setCursorLocation(t.dom(),0),A.some(!0)},Vm=function(u,s,c,l,f){return al.navigate(c,u.getBody(),f).bind(function(e){return r=l,o=c,i=f,a=e,al.firstPositionIn(r.dom()).bind(function(t){return al.lastPositionIn(r.dom()).map(function(e){return o?i.isEqual(t)&&a.isEqual(e):i.isEqual(e)&&a.isEqual(t)})}).getOr(!0)?zm(u,l):(t=l,n=e,Um(s,er.fromDom(n.getNode())).map(function(e){return!1===Ur.eq(e,t)}));var t,n,r,o,i,a}).or(A.some(!0))},qm=function(a,u,s,e){var c=Au.fromRangeStart(a.selection.getRng());return Fm(s,e).bind(function(e){return Lf(e)?zm(a,e):(t=a,n=s,r=u,o=e,i=c,al.navigate(r,t.getBody(),i).bind(function(e){return Fm(n,er.fromDom(e.getNode())).map(function(e){return!1===Ur.eq(e,o)})}));var t,n,r,o,i})},Hm=function(a,u,e){var s=er.fromDom(a.getBody());return Um(s,e).fold(function(){return qm(a,u,s,e)},function(e){return t=a,n=u,r=s,o=e,i=Au.fromRangeStart(t.selection.getRng()),Lf(o)?zm(t,o):Vm(t,r,n,o,i);var t,n,r,o,i}).getOr(!1)},jm=function(e,t){var n,r,o,i,a,u=er.fromDom(e.selection.getStart(!0)),s=Pm(e);return e.selection.isCollapsed()&&0===s.length?Hm(e,t,u):(n=e,r=u,o=er.fromDom(n.getBody()),i=n.selection.getRng(),0!==(a=Pm(n)).length?Lm(n,a):Mm(n,o,i,r))},$m=function(e,t){e.getDoc().execCommand(t,!1,null)},Wm=function(e){yd(e,!1)||fm(e,!1)||Jf(e,!1)||jm(e)||td(e,!1)||($m(e,"Delete"),kf(e))},Km=function(e){yd(e,!0)||fm(e,!0)||Jf(e,!0)||jm(e)||td(e,!0)||$m(e,"ForwardDelete")},Xm=function(s){return function(u,e){return A.from(e).map(er.fromDom).filter(sr.isElement).bind(function(e){return(r=s,o=u,i=e.dom(),a=function(e){return kr(e,r)},ea.closest(er.fromDom(i),function(e){return a(e).isSome()},function(e){return Ur.eq(er.fromDom(o),e)}).bind(a)).or((t=s,n=e.dom(),A.from(hi.DOM.getStyle(n,t,!0))));var t,n,r,o,i,a}).getOr("")}},Ym={getFontSize:Xm("font-size"),getFontFamily:q(function(e){return e.replace(/[\'\"\\]/g,"").replace(/,\s+/g,",")},Xm("font-family")),toPt:function(e,t){return/[0-9.]+px$/.test(e)?(n=72*parseInt(e,10)/96,r=t||0,o=Math.pow(10,r),Math.round(n*o)/o+"pt"):e;var n,r,o}},Gm=function(e){return al.firstPositionIn(e.getBody()).map(function(e){var t=e.container();return Bo.isText(t)?t.parentNode:t})},Jm=function(o){return A.from(o.selection.getRng()).bind(function(e){var t,n,r=o.getBody();return n=r,(t=e).startContainer===n&&0===t.startOffset?A.none():A.from(o.selection.getStart(!0))})},Qm=function(e,t){if(/^[0-9\.]+$/.test(t)){var n=parseInt(t,10);if(1<=n&&n<=7){var r=cc(e),o=lc(e);return o?o[n-1]||t:r[n-1]||t}return t}return t},Zm=function(e,t){return e&&t&&e.startContainer===t.startContainer&&e.startOffset===t.startOffset&&e.endContainer===t.endContainer&&e.endOffset===t.endOffset},eg=function(e,t,n){return null!==function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(e,t,n)},tg=function(e,t,n){return eg(e,t,function(e){return e.nodeName===n})},ng=function(e){return e&&"TABLE"===e.nodeName},rg=function(e,t,n){for(var r=new io(t,e.getParent(t.parentNode,e.isBlock)||e.getRoot());t=r[n?"prev":"next"]();)if(Bo.isBr(t))return!0},og=function(e,t,n,r,o){var i,a,u,s,c,l,f=e.getRoot(),d=e.schema.getNonEmptyElements();if(u=e.getParent(o.parentNode,e.isBlock)||f,r&&Bo.isBr(o)&&t&&e.isEmpty(u))return A.some(Su(o.parentNode,e.nodeIndex(o)));for(i=new io(o,u);s=i[r?"prev":"next"]();){if("false"===e.getContentEditableParent(s)||(l=f,Da(c=s)&&!1===eg(c,l,Gu)))return A.none();if(Bo.isText(s)&&0<s.nodeValue.length)return!1===tg(s,f,"A")?A.some(Su(s,r?s.nodeValue.length:0)):A.none();if(e.isBlock(s)||d[s.nodeName.toLowerCase()])return A.none();a=s}return n&&a?A.some(Su(a,0)):A.none()},ig=function(e,t,n,r){var o,i,a,u,s,c,l,f,d,m,g=e.getRoot(),p=!1;if(o=r[(n?"start":"end")+"Container"],i=r[(n?"start":"end")+"Offset"],l=Bo.isElement(o)&&i===o.childNodes.length,s=e.schema.getNonEmptyElements(),c=n,Da(o))return A.none();if(Bo.isElement(o)&&i>o.childNodes.length-1&&(c=!1),Bo.isDocument(o)&&(o=g,i=0),o===g){if(c&&(u=o.childNodes[0<i?i-1:0])){if(Da(u))return A.none();if(s[u.nodeName]||ng(u))return A.none()}if(o.hasChildNodes()){if(i=Math.min(!c&&0<i?i-1:i,o.childNodes.length-1),o=o.childNodes[i],i=Bo.isText(o)&&l?o.data.length:0,!t&&o===g.lastChild&&ng(o))return A.none();if(function(e,t){for(;t&&t!==e;){if(Bo.isContentEditableFalse(t))return!0;t=t.parentNode}return!1}(g,o)||Da(o))return A.none();if(o.hasChildNodes()&&!1===ng(o)){a=new io(u=o,g);do{if(Bo.isContentEditableFalse(u)||Da(u)){p=!1;break}if(Bo.isText(u)&&0<u.nodeValue.length){i=c?0:u.nodeValue.length,o=u,p=!0;break}if(s[u.nodeName.toLowerCase()]&&(!(f=u)||!/^(TD|TH|CAPTION)$/.test(f.nodeName))){i=e.nodeIndex(u),o=u.parentNode,c||i++,p=!0;break}}while(u=c?a.next():a.prev())}}}return t&&(Bo.isText(o)&&0===i&&og(e,l,t,!0,o).each(function(e){o=e.container(),i=e.offset(),p=!0}),Bo.isElement(o)&&((u=o.childNodes[i])||(u=o.childNodes[i-1]),!u||!Bo.isBr(u)||(m="A",(d=u).previousSibling&&d.previousSibling.nodeName===m)||rg(e,u,!1)||rg(e,u,!0)||og(e,l,t,!0,u).each(function(e){o=e.container(),i=e.offset(),p=!0}))),c&&!t&&Bo.isText(o)&&i===o.nodeValue.length&&og(e,l,t,!1,o).each(function(e){o=e.container(),i=e.offset(),p=!0}),p?A.some(Su(o,i)):A.none()},ag=function(e,t){var n=t.collapsed,r=t.cloneRange(),o=Su.fromRangeStart(t);return ig(e,n,!0,r).each(function(e){n&&Su.isAbove(o,e)||r.setStart(e.container(),e.offset())}),n||ig(e,n,!1,r).each(function(e){r.setEnd(e.container(),e.offset())}),n&&r.collapse(!0),Zm(t,r)?A.none():A.some(r)},ug=function(e,t,n){var r=e.create("span",{}," ");n.parentNode.insertBefore(r,n),t.scrollIntoView(r),e.remove(r)},sg=function(e,t,n,r){var o=e.createRng();r?(o.setStartBefore(n),o.setEndBefore(n)):(o.setStartAfter(n),o.setEndAfter(n)),t.setRng(o)},cg=function(e,t){var n,r,o=e.selection,i=e.dom,a=o.getRng();ag(i,a).each(function(e){a.setStart(e.startContainer,e.startOffset),a.setEnd(e.endContainer,e.endOffset)});var u=a.startOffset,s=a.startContainer;if(1===s.nodeType&&s.hasChildNodes()){var c=u>s.childNodes.length-1;s=s.childNodes[Math.min(u,s.childNodes.length-1)]||s,u=c&&3===s.nodeType?s.nodeValue.length:0}var l=i.getParent(s,i.isBlock),f=l?i.getParent(l.parentNode,i.isBlock):null,d=f?f.nodeName.toUpperCase():"",m=t&&t.ctrlKey;"LI"!==d||m||(l=f),s&&3===s.nodeType&&u>=s.nodeValue.length&&(function(e,t,n){for(var r,o=new io(t,n),i=e.getNonEmptyElements();r=o.next();)if(i[r.nodeName.toLowerCase()]||0<r.length)return!0}(e.schema,s,l)||(n=i.create("br"),a.insertNode(n),a.setStartAfter(n),a.setEndAfter(n),r=!0)),n=i.create("br"),a.insertNode(n),ug(i,o,n),sg(i,o,n,r),e.undoManager.add()},lg=function(e,t){var n=er.fromTag("br");ki.before(er.fromDom(t),n),e.undoManager.add()},fg=function(e,t){dg(e.getBody(),t)||ki.after(er.fromDom(t),er.fromTag("br"));var n=er.fromTag("br");ki.after(er.fromDom(t),n),ug(e.dom,e.selection,n.dom()),sg(e.dom,e.selection,n.dom(),!1),e.undoManager.add()},dg=function(e,t){return n=Au.after(t),!!Bo.isBr(n.getNode())||al.nextPosition(e,Au.after(t)).map(function(e){return Bo.isBr(e.getNode())}).getOr(!1);var n},mg=function(e){return e&&"A"===e.nodeName&&"href"in e},gg=function(e){return e.fold(H(!1),mg,mg,H(!1))},pg=function(e,t){t.fold(v,b(lg,e),b(fg,e),v)},hg=function(e,t){var n,r,o,i=(n=e,r=b(Sf.isInlineTarget,n),o=Au.fromRangeStart(n.selection.getRng()),Yd(r,n.getBody(),o).filter(gg));i.isSome()?i.each(b(pg,e)):cg(e,t)},vg=nd([{before:["element"]},{on:["element","offset"]},{after:["element"]}]),bg=(vg.before,vg.on,vg.after,function(e){return e.fold(j,j,j)}),yg=nd([{domRange:["rng"]},{relative:["startSitu","finishSitu"]},{exact:["start","soffset","finish","foffset"]}]),Cg=Ar("start","soffset","finish","foffset"),xg={domRange:yg.domRange,relative:yg.relative,exact:yg.exact,exactFromRange:function(e){return yg.exact(e.start(),e.soffset(),e.finish(),e.foffset())},range:Cg,getWin:function(e){var t=e.match({domRange:function(e){return er.fromDom(e.startContainer)},relative:function(e,t){return bg(e)},exact:function(e,t,n,r){return e}});return Wr.defaultView(t)}},wg=Qn.detect().browser,Ng=function(e,t){var n=sr.isText(t)?Il(t).length:Wr.children(t).length+1;return n<e?n:e<0?0:e},Eg=function(e){return xg.range(e.start(),Ng(e.soffset(),e.start()),e.finish(),Ng(e.foffset(),e.finish()))},Sg=function(e,t){return Ur.contains(e,t)||Ur.eq(e,t)},Tg=function(t){return function(e){return Sg(t,e.start())&&Sg(t,e.finish())}},kg=function(e){return!0===e.inline||wg.isIE()},Ag=function(e){return xg.range(er.fromDom(e.startContainer),e.startOffset,er.fromDom(e.endContainer),e.endOffset)},_g=function(e){var t=e.getSelection();return(t&&0!==t.rangeCount?A.from(t.getRangeAt(0)):A.none()).map(Ag)},Rg=function(e){var t=Wr.defaultView(e);return _g(t.dom()).filter(Tg(e))},Dg=function(e,t){return A.from(t).filter(Tg(e)).map(Eg)},Bg=function(e){var t=document.createRange();try{return t.setStart(e.start().dom(),e.soffset()),t.setEnd(e.finish().dom(),e.foffset()),A.some(t)}catch(n){return A.none()}},Og=function(e){return(e.bookmark?e.bookmark:A.none()).bind(b(Dg,er.fromDom(e.getBody()))).bind(Bg)},Pg=function(e){var t=kg(e)?Rg(er.fromDom(e.getBody())):A.none();e.bookmark=t.isSome()?t:e.bookmark},Lg=function(t){Og(t).each(function(e){t.selection.setRng(e)})},Ig=Og,Mg=function(e,t){var n=e.settings,r=e.dom,o=e.selection,i=e.formatter,a=/[a-z%]+$/i.exec(n.indentation)[0],u=parseInt(n.indentation,10),s=e.getParam("indent_use_margin",!1);e.queryCommandState("InsertUnorderedList")||e.queryCommandState("InsertOrderedList")||(n.forced_root_block||r.getParent(o.getNode(),r.isBlock)||i.apply("div"),F(o.getSelectedBlocks(),function(e){return function(e,t,n,r,o,i){if("false"!==e.getContentEditable(i)&&"LI"!==i.nodeName){var a=n?"margin":"padding";if(a="TABLE"===i.nodeName?"margin":a,a+="rtl"===e.getStyle(i,"direction",!0)?"Right":"Left","outdent"===t){var u=Math.max(0,parseInt(i.style[a]||0,10)-r);e.setStyle(i,a,u?u+o:"")}else u=parseInt(i.style[a]||0,10)+r+o,e.setStyle(i,a,u)}}(r,t,s,u,a,e)}))},Fg=Yt.each,Ug=Yt.extend,zg=Yt.map,Vg=Yt.inArray;function qg(s){var o,i,a,t,c={state:{},exec:{},value:{}},n=s.settings;s.on("PreInit",function(){o=s.dom,i=s.selection,n=s.settings,a=s.formatter});var r=function(e){var t;if(!s.quirks.isHidden()&&!s.removed){if(e=e.toLowerCase(),t=c.state[e])return t(e);try{return s.getDoc().queryCommandState(e)}catch(n){}return!1}},e=function(e,n){n=n||"exec",Fg(e,function(t,e){Fg(e.toLowerCase().split(","),function(e){c[n][e]=t})})},u=function(e,t,n){e=e.toLowerCase(),c.value[e]=function(){return t.call(n||s)}};Ug(this,{execCommand:function(t,n,r,e){var o,i,a=!1;if(!s.removed){if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(t)||e&&e.skip_focus?Lg(s):s.focus(),(e=s.fire("BeforeExecCommand",{command:t,ui:n,value:r})).isDefaultPrevented())return!1;if(i=t.toLowerCase(),o=c.exec[i])return o(i,n,r),s.fire("ExecCommand",{command:t,ui:n,value:r}),!0;if(Fg(s.plugins,function(e){if(e.execCommand&&e.execCommand(t,n,r))return s.fire("ExecCommand",{command:t,ui:n,value:r}),!(a=!0)}),a)return a;if(s.theme&&s.theme.execCommand&&s.theme.execCommand(t,n,r))return s.fire("ExecCommand",{command:t,ui:n,value:r}),!0;try{a=s.getDoc().execCommand(t,n,r)}catch(u){}return!!a&&(s.fire("ExecCommand",{command:t,ui:n,value:r}),!0)}},queryCommandState:r,queryCommandValue:function(e){var t;if(!s.quirks.isHidden()&&!s.removed){if(e=e.toLowerCase(),t=c.value[e])return t(e);try{return s.getDoc().queryCommandValue(e)}catch(n){}}},queryCommandSupported:function(e){if(e=e.toLowerCase(),c.exec[e])return!0;try{return s.getDoc().queryCommandSupported(e)}catch(t){}return!1},addCommands:e,addCommand:function(e,o,i){e=e.toLowerCase(),c.exec[e]=function(e,t,n,r){return o.call(i||s,t,n,r)}},addQueryStateHandler:function(e,t,n){e=e.toLowerCase(),c.state[e]=function(){return t.call(n||s)}},addQueryValueHandler:u,hasCustomCommand:function(e){return e=e.toLowerCase(),!!c.exec[e]}});var l=function(e,t,n){return t===undefined&&(t=!1),n===undefined&&(n=null),s.getDoc().execCommand(e,t,n)},f=function(e){return a.match(e)},d=function(e,t){a.toggle(e,t?{value:t}:undefined),s.nodeChanged()},m=function(e){t=i.getBookmark(e)},g=function(){i.moveToBookmark(t)};e({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){s.undoManager.add()},"Cut,Copy,Paste":function(e){var t,n=s.getDoc();try{l(e)}catch(o){t=!0}if("paste"!==e||n.queryCommandEnabled(e)||(t=!0),t||!n.queryCommandSupported(e)){var r=s.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");Re.mac&&(r=r.replace(/Ctrl\+/g,"\u2318+")),s.notificationManager.open({text:r,type:"error"})}},unlink:function(){if(i.isCollapsed()){var e=s.dom.getParent(s.selection.getStart(),"a");e&&s.dom.remove(e,!0)}else a.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone":function(e){var t=e.substring(7);"full"===t&&(t="justify"),Fg("left,center,right,justify".split(","),function(e){t!==e&&a.remove("align"+e)}),"none"!==t&&d("align"+t)},"InsertUnorderedList,InsertOrderedList":function(e){var t,n;l(e),(t=o.getParent(i.getNode(),"ol,ul"))&&(n=t.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName)&&(m(),o.split(n,t),g()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){d(e)},"ForeColor,HiliteColor":function(e,t,n){d(e,n)},FontName:function(e,t,n){var r,o;o=n,(r=s).formatter.toggle("fontname",{value:Qm(r,o)}),r.nodeChanged()},FontSize:function(e,t,n){var r,o;o=n,(r=s).formatter.toggle("fontsize",{value:Qm(r,o)}),r.nodeChanged()},RemoveFormat:function(e){a.remove(e)},mceBlockQuote:function(){d("blockquote")},FormatBlock:function(e,t,n){return d(n||"p")},mceCleanup:function(){var e=i.getBookmark();s.setContent(s.getContent()),i.moveToBookmark(e)},mceRemoveNode:function(e,t,n){var r=n||i.getNode();r!==s.getBody()&&(m(),s.dom.remove(r,!0),g())},mceSelectNodeDepth:function(e,t,n){var r=0;o.getParent(i.getNode(),function(e){if(1===e.nodeType&&r++===n)return i.select(e),!1},s.getBody())},mceSelectNode:function(e,t,n){i.select(n)},mceInsertContent:function(e,t,n){lf(s,n)},mceInsertRawHTML:function(e,t,n){var r=s.getContent();i.setContent("tiny_mce_marker"),s.setContent(r.replace(/tiny_mce_marker/g,function(){return n}))},mceToggleFormat:function(e,t,n){d(n)},mceSetContent:function(e,t,n){s.setContent(n)},"Indent,Outdent":function(e){Mg(s,e)},mceRepaint:function(){},InsertHorizontalRule:function(){s.execCommand("mceInsertContent",!1,"<hr />")},mceToggleVisualAid:function(){s.hasVisual=!s.hasVisual,s.addVisual()},mceReplaceContent:function(e,t,n){s.execCommand("mceInsertContent",!1,n.replace(/\{\$selection\}/g,i.getContent({format:"text"})))},mceInsertLink:function(e,t,n){var r;"string"==typeof n&&(n={href:n}),r=o.getParent(i.getNode(),"a"),n.href=n.href.replace(" ","%20"),r&&n.href||a.remove("link"),n.href&&a.apply("link",n,r)},selectAll:function(){var e=o.getParent(i.getStart(),Bo.isContentEditableTrue);if(e){var t=o.createRng();t.selectNodeContents(e),i.setRng(t)}},"delete":function(){Wm(s)},forwardDelete:function(){Km(s)},mceNewDocument:function(){s.setContent("")},InsertLineBreak:function(e,t,n){return hg(s,n),!0}});var p=function(n){return function(){var e=i.isCollapsed()?[o.getParent(i.getNode(),o.isBlock)]:i.getSelectedBlocks(),t=zg(e,function(e){return!!a.matchNode(e,n)});return-1!==Vg(t,!0)}};e({JustifyLeft:p("alignleft"),JustifyCenter:p("aligncenter"),JustifyRight:p("alignright"),JustifyFull:p("alignjustify"),"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(e){return f(e)},mceBlockQuote:function(){return f("blockquote")},Outdent:function(){var e;if(n.inline_styles){if((e=o.getParent(i.getStart(),o.isBlock))&&0<parseInt(e.style.paddingLeft,10))return!0;if((e=o.getParent(i.getEnd(),o.isBlock))&&0<parseInt(e.style.paddingLeft,10))return!0}return r("InsertUnorderedList")||r("InsertOrderedList")||!n.inline_styles&&!!o.getParent(i.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(e){var t=o.getParent(i.getNode(),"ul,ol");return t&&("insertunorderedlist"===e&&"UL"===t.tagName||"insertorderedlist"===e&&"OL"===t.tagName)}},"state"),e({Undo:function(){s.undoManager.undo()},Redo:function(){s.undoManager.redo()}}),u("FontName",function(){return Jm(t=s).fold(function(){return Gm(t).map(function(e){return Ym.getFontFamily(t.getBody(),e)}).getOr("")},function(e){return Ym.getFontFamily(t.getBody(),e)});var t},this),u("FontSize",function(){return Jm(t=s).fold(function(){return Gm(t).map(function(e){return Ym.getFontSize(t.getBody(),e)}).getOr("")},function(e){return Ym.getFontSize(t.getBody(),e)});var t},this)}var Hg=Yt.makeMap("focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend"," "),jg=function(a){var u,s,c=this,l={},f=function(){return!1},d=function(){return!0};u=(a=a||{}).scope||c,s=a.toggleEvent||f;var r=function(e,t,n,r){var o,i,a;if(!1===t&&(t=f),t)for(t={func:t},r&&Yt.extend(t,r),a=(i=e.toLowerCase().split(" ")).length;a--;)e=i[a],(o=l[e])||(o=l[e]=[],s(e,!0)),n?o.unshift(t):o.push(t);return c},m=function(e,t){var n,r,o,i,a;if(e)for(n=(i=e.toLowerCase().split(" ")).length;n--;){if(e=i[n],r=l[e],!e){for(o in l)s(o,!1),delete l[o];return c}if(r){if(t)for(a=r.length;a--;)r[a].func===t&&(r=r.slice(0,a).concat(r.slice(a+1)),l[e]=r);else r.length=0;r.length||(s(e,!1),delete l[e])}}else{for(e in l)s(e,!1);l={}}return c};c.fire=function(e,t){var n,r,o,i;if(e=e.toLowerCase(),(t=t||{}).type=e,t.target||(t.target=u),t.preventDefault||(t.preventDefault=function(){t.isDefaultPrevented=d},t.stopPropagation=function(){t.isPropagationStopped=d},t.stopImmediatePropagation=function(){t.isImmediatePropagationStopped=d},t.isDefaultPrevented=f,t.isPropagationStopped=f,t.isImmediatePropagationStopped=f),a.beforeFire&&a.beforeFire(t),n=l[e])for(r=0,o=n.length;r<o;r++){if((i=n[r]).once&&m(e,i.func),t.isImmediatePropagationStopped())return t.stopPropagation(),t;if(!1===i.func.call(u,t))return t.preventDefault(),t}return t},c.on=r,c.off=m,c.once=function(e,t,n){return r(e,t,n,{once:!0})},c.has=function(e){return e=e.toLowerCase(),!(!l[e]||0===l[e].length)}};jg.isNative=function(e){return!!Hg[e.toLowerCase()]};var $g,Wg=function(n){return n._eventDispatcher||(n._eventDispatcher=new jg({scope:n,toggleEvent:function(e,t){jg.isNative(e)&&n.toggleNativeEvent&&n.toggleNativeEvent(e,t)}})),n._eventDispatcher},Kg={fire:function(e,t,n){if(this.removed&&"remove"!==e)return t;if(t=Wg(this).fire(e,t,n),!1!==n&&this.parent)for(var r=this.parent();r&&!t.isPropagationStopped();)r.fire(e,t,!1),r=r.parent();return t},on:function(e,t,n){return Wg(this).on(e,t,n)},off:function(e,t){return Wg(this).off(e,t)},once:function(e,t){return Wg(this).once(e,t)},hasEventListeners:function(e){return Wg(this).has(e)}},Xg=function(e,t){return e.fire("PreProcess",t)},Yg=function(e,t){return e.fire("PostProcess",t)},Gg=function(e){return e.fire("remove")},Jg=function(e,t){return e.fire("SwitchMode",{mode:t})},Qg=function(e,t,n,r){e.fire("ObjectResizeStart",{target:t,width:n,height:r})},Zg=function(e,t,n,r){e.fire("ObjectResized",{target:t,width:n,height:r})},ep=function(e,t,n){try{e.getDoc().execCommand(t,!1,n)}catch(r){}},tp=function(e,t){var n,r,o;n=er.fromDom(e.getBody()),r="mce-content-readonly",o=t,Ki.has(n,r)&&!1===o?Ki.remove(n,r):o&&Ki.add(n,r),t?(e.selection.controlSelection.hideResizeRect(),e.readonly=!0,e.getBody().contentEditable="false"):(e.readonly=!1,e.getBody().contentEditable="true",ep(e,"StyleWithCSS",!1),ep(e,"enableInlineTableEditing",!1),ep(e,"enableObjectResizing",!1),e.focus(),e.nodeChanged())},np=function(e){return e.readonly?"readonly":"design"},rp=hi.DOM,op=function(e,t){return"selectionchange"===t?e.getDoc():!e.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(t)?e.getDoc().documentElement:e.settings.event_root?(e.eventRoot||(e.eventRoot=rp.select(e.settings.event_root)[0]),e.eventRoot):e.getBody()},ip=function(e,t,n){var r;(r=e).hidden||r.readonly?!0===e.readonly&&n.preventDefault():e.fire(t,n)},ap=function(i,a){var e,t;if(i.delegates||(i.delegates={}),!i.delegates[a]&&!i.removed)if(e=op(i,a),i.settings.event_root){if($g||($g={},i.editorManager.on("removeEditor",function(){var e;if(!i.editorManager.activeEditor&&$g){for(e in $g)i.dom.unbind(op(i,e));$g=null}})),$g[a])return;t=function(e){for(var t=e.target,n=i.editorManager.get(),r=n.length;r--;){var o=n[r].getBody();(o===t||rp.isChildOf(t,o))&&ip(n[r],a,e)}},$g[a]=t,rp.bind(e,a,t)}else t=function(e){ip(i,a,e)},rp.bind(e,a,t),i.delegates[a]=t},up={bindPendingEventDelegates:function(){var t=this;Yt.each(t._pendingNativeEvents,function(e){ap(t,e)})},toggleNativeEvent:function(e,t){var n=this;"focus"!==e&&"blur"!==e&&(t?n.initialized?ap(n,e):n._pendingNativeEvents?n._pendingNativeEvents.push(e):n._pendingNativeEvents=[e]:n.initialized&&(n.dom.unbind(op(n,e),e,n.delegates[e]),delete n.delegates[e]))},unbindAllNativeEvents:function(){var e,t=this,n=t.getBody(),r=t.dom;if(t.delegates){for(e in t.delegates)t.dom.unbind(op(t,e),e,t.delegates[e]);delete t.delegates}!t.inline&&n&&r&&(n.onload=null,r.unbind(t.getWin()),r.unbind(t.getDoc())),r&&(r.unbind(n),r.unbind(t.getContainer()))}},sp=up=Yt.extend({},Kg,up),cp=Yt.each,lp=Yt.explode,fp={f9:120,f10:121,f11:122},dp=Yt.makeMap("alt,ctrl,shift,meta,access");function mp(i){var a={},r=[],u=function(e){var t,n,r={};for(n in cp(lp(e,"+"),function(e){e in dp?r[e]=!0:/^[0-9]{2,}$/.test(e)?r.keyCode=parseInt(e,10):(r.charCode=e.charCodeAt(0),r.keyCode=fp[e]||e.toUpperCase().charCodeAt(0))}),t=[r.keyCode],dp)r[n]?t.push(n):r[n]=!1;return r.id=t.join(","),r.access&&(r.alt=!0,Re.mac?r.ctrl=!0:r.shift=!0),r.meta&&(Re.mac?r.meta=!0:(r.ctrl=!0,r.meta=!1)),r},s=function(e,t,n,r){var o;return(o=Yt.map(lp(e,">"),u))[o.length-1]=Yt.extend(o[o.length-1],{func:n,scope:r||i}),Yt.extend(o[0],{desc:i.translate(t),subpatterns:o.slice(1)})},o=function(e,t){return!!t&&t.ctrl===e.ctrlKey&&t.meta===e.metaKey&&t.alt===e.altKey&&t.shift===e.shiftKey&&!!(e.keyCode===t.keyCode||e.charCode&&e.charCode===t.charCode)&&(e.preventDefault(),!0)},c=function(e){return e.func?e.func.call(e.scope):null};i.on("keyup keypress keydown",function(t){var e,n;((n=t).altKey||n.ctrlKey||n.metaKey||"keydown"===(e=t).type&&112<=e.keyCode&&e.keyCode<=123)&&!t.isDefaultPrevented()&&(cp(a,function(e){if(o(t,e))return r=e.subpatterns.slice(0),"keydown"===t.type&&c(e),!0}),o(t,r[0])&&(1===r.length&&"keydown"===t.type&&c(r[0]),r.shift()))}),this.add=function(e,n,r,o){var t;return"string"==typeof(t=r)?r=function(){i.execCommand(t,!1,null)}:Yt.isArray(t)&&(r=function(){i.execCommand(t[0],t[1],t[2])}),cp(lp(Yt.trim(e.toLowerCase())),function(e){var t=s(e,n,r,o);a[t.id]=t}),!0},this.remove=function(e){var t=s(e);return!!a[t.id]&&(delete a[t.id],!0)}}var gp=function(e){var t=e!==undefined?e.dom():document;return A.from(t.activeElement).map(er.fromDom)},pp=function(e){var t=Wr.owner(e).dom();return e.dom()===t.activeElement},hp=function(t){return gp(Wr.owner(t)).filter(function(e){return t.dom().contains(e.dom())})},vp=function(t,e){return(n=e,n.collapsed?A.from(ru(n.startContainer,n.startOffset)).map(er.fromDom):A.none()).bind(function(e){return yo(e)?A.some(e):!1===Ur.contains(t,e)?A.some(t):A.none()});var n},bp=function(t,e){vp(er.fromDom(t.getBody()),e).bind(function(e){return al.firstPositionIn(e.dom())}).fold(function(){t.selection.normalize()},function(e){return t.selection.setRng(e.toRange())})},yp=function(e){if(e.setActive)try{e.setActive()}catch(t){e.focus()}else e.focus()},Cp=function(e){var t,n=e.getBody();return n&&(t=er.fromDom(n),pp(t)||hp(t).isSome())},xp=function(e){return e.inline?Cp(e):(t=e).iframeElement&&pp(er.fromDom(t.iframeElement));var t},wp=function(e){return e.editorManager.setActive(e)},Np=function(e,t){e.removed||(t?wp(e):function(t){var e=t.selection,n=t.settings.content_editable,r=t.getBody(),o=e.getRng();t.quirks.refreshContentEditable();var i,a,u=(i=t,a=e.getNode(),i.dom.getParent(a,function(e){return"true"===i.dom.getContentEditable(e)}));if(t.$.contains(r,u))return yp(u),bp(t,o),wp(t);t.bookmark!==undefined&&!1===xp(t)&&Ig(t).each(function(e){t.selection.setRng(e),o=e}),n||(Re.opera||yp(r),t.getWin().focus()),(Re.gecko||n)&&(yp(r),bp(t,o)),wp(t)}(e))},Ep=xp,Sp=function(e,t){return t.dom()[e]},Tp=function(e,t){return parseInt(Tr(t,e),10)},kp=b(Sp,"clientWidth"),Ap=b(Sp,"clientHeight"),_p=b(Tp,"margin-top"),Rp=b(Tp,"margin-left"),Dp=function(e,t,n){var r,o,i,a,u,s,c,l,f,d,m=er.fromDom(e.getBody()),g=e.inline?m:Wr.documentElement(m),p=(r=e.inline,i=t,a=n,u=(o=g).dom().getBoundingClientRect(),{x:i-(r?u.left+o.dom().clientLeft+Rp(o):0),y:a-(r?u.top+o.dom().clientTop+_p(o):0)});return c=p.x,l=p.y,f=kp(s=g),d=Ap(s),0<=c&&0<=l&&c<=f&&l<=d},Bp=function(e){var t,n=e.inline?e.getBody():e.getContentAreaContainer();return(t=n,A.from(t).map(er.fromDom)).map(function(e){return Ur.contains(Wr.owner(e),e)}).getOr(!1)};function Op(n){var t,o=[],i=function(){var e,t=n.theme;return t&&t.getNotificationManagerImpl?t.getNotificationManagerImpl():{open:e=function(){throw new Error("Theme did not provide a NotificationManager implementation.")},close:e,reposition:e,getArgs:e}},a=function(){0<o.length&&i().reposition(o)},u=function(t){K(o,function(e){return e===t}).each(function(e){o.splice(e,1)})},r=function(r){if(!n.removed&&Bp(n))return V(o,function(e){return t=i().getArgs(e),n=r,!(t.type!==n.type||t.text!==n.text||t.progressBar||t.timeout||n.progressBar||n.timeout);var t,n}).getOrThunk(function(){n.editorManager.setActive(n);var e,t=i().open(r,function(){u(t),a()});return e=t,o.push(e),a(),t})};return(t=n).on("SkinLoaded",function(){var e=t.settings.service_message;e&&r({text:e,type:"warning",timeout:0,icon:""})}),t.on("ResizeEditor ResizeWindow",function(){Le.requestAnimationFrame(a)}),t.on("remove",function(){F(o,function(e){i().close(e)})}),{open:r,close:function(){A.from(o[0]).each(function(e){i().close(e),u(e),a()})},getNotifications:function(){return o}}}function Pp(r){var o=[],i=function(){var e,t=r.theme;return t&&t.getWindowManagerImpl?t.getWindowManagerImpl():{open:e=function(){throw new Error("Theme did not provide a WindowManager implementation.")},alert:e,confirm:e,close:e,getParams:e,setParams:e}},a=function(e,t){return function(){return t?t.apply(e,arguments):undefined}},u=function(e){var t;o.push(e),t=e,r.fire("OpenWindow",{win:t})},s=function(n){K(o,function(e){return e===n}).each(function(e){var t;o.splice(e,1),t=n,r.fire("CloseWindow",{win:t}),0===o.length&&r.focus()})},e=function(){return A.from(o[o.length-1])};return r.on("remove",function(){F(o.slice(0),function(e){i().close(e)})}),{windows:o,open:function(e,t){r.editorManager.setActive(r),Pg(r);var n=i().open(e,t,s);return u(n),n},alert:function(e,t,n){var r=i().alert(e,a(n||this,t),s);u(r)},confirm:function(e,t,n){var r=i().confirm(e,a(n||this,t),s);u(r)},close:function(){e().each(function(e){i().close(e),s(e)})},getParams:function(){return e().map(i().getParams).getOr(null)},setParams:function(t){e().each(function(e){i().setParams(e,t)})},getWindows:function(){return o}}}var Lp=Ei.PluginManager,Ip=function(e,t){var n=function(e,t){for(var n in Lp.urls)if(Lp.urls[n]+"/plugin"+t+".js"===e)return n;return null}(t,e.suffix);return n?"Failed to load plugin: "+n+" from url "+t:"Failed to load plugin url: "+t},Mp=function(e,t){e.notificationManager.open({type:"error",text:t})},Fp=function(e,t){e._skinLoaded?Mp(e,t):e.on("SkinLoaded",function(){Mp(e,t)})},Up=function(e,t){Fp(e,Ip(e,t))},zp=function(e,t){Fp(e,"Failed to upload image: "+t)},Vp=Fp,qp=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=window.console;r&&(r.error?r.error.apply(r,arguments):r.log.apply(r,arguments))},Hp=Ei.PluginManager,jp=Ei.ThemeManager;function $p(){return new(ie.getOrDie("XMLHttpRequest"))}function Wp(u,s){var r={},n=function(e,r,o,t){var i,n;(i=new $p).open("POST",s.url),i.withCredentials=s.credentials,i.upload.onprogress=function(e){t(e.loaded/e.total*100)},i.onerror=function(){o("Image upload failed due to a XHR Transport error. Code: "+i.status)},i.onload=function(){var e,t,n;i.status<200||300<=i.status?o("HTTP Error: "+i.status):(e=JSON.parse(i.responseText))&&"string"==typeof e.location?r((t=s.basePath,n=e.location,t?t.replace(/\/$/,"")+"/"+n.replace(/^\//,""):n)):o("Invalid JSON: "+i.responseText)},(n=new FormData).append("file",e.blob(),e.filename()),i.send(n)},c=function(e,t){return{url:t,blobInfo:e,status:!0}},l=function(e,t){return{url:"",blobInfo:e,status:!1,error:t}},f=function(e,t){Yt.each(r[e],function(e){e(t)}),delete r[e]},o=function(e,n){return e=Yt.grep(e,function(e){return!u.isUploaded(e.blobUri())}),De.all(Yt.map(e,function(e){return u.isPending(e.blobUri())?(t=e.blobUri(),new De(function(e){r[t]=r[t]||[],r[t].push(e)})):(o=e,i=s.handler,a=n,u.markPending(o.blobUri()),new De(function(t){var n;try{var r=function(){n&&n.close()};i(o,function(e){r(),u.markUploaded(o.blobUri(),e),f(o.blobUri(),c(o,e)),t(c(o,e))},function(e){r(),u.removeFailed(o.blobUri()),f(o.blobUri(),l(o,e)),t(l(o,e))},function(e){e<0||100<e||(n||(n=a()),n.progressBar.value(e))})}catch(e){t(l(o,e.message))}}));var o,i,a,t}))};return s=Yt.extend({credentials:!1,handler:n},s),{upload:function(e,t){return s.url||s.handler!==n?o(e,t):new De(function(e){e([])})}}}function Kp(e,t){return new(ie.getOrDie("Blob"))(e,t)}function Xp(){return new(ie.getOrDie("FileReader"))}function Yp(e){return new(ie.getOrDie("Uint8Array"))(e)}var Gp=function(e){return ie.getOrDie("atob")(e)},Jp=function(e){var t,n;return e=decodeURIComponent(e).split(","),(n=/data:([^;]+)/.exec(e[0]))&&(t=n[1]),{type:t,data:e[1]}},Qp=function(e){return 0===e.indexOf("blob:")?(i=e,new De(function(e,t){var n=function(){t("Cannot convert "+i+" to Blob. Resource might not exist or is inaccessible.")};try{var r=new $p;r.open("GET",i,!0),r.responseType="blob",r.onload=function(){200===this.status?e(this.response):n()},r.onerror=n,r.send()}catch(o){n()}})):0===e.indexOf("data:")?(o=e,new De(function(e){var t,n,r;o=Jp(o);try{t=Gp(o.data)}catch(Kw){return void e(new Kp([]))}for(n=new Yp(t.length),r=0;r<n.length;r++)n[r]=t.charCodeAt(r);e(new Kp([n],{type:o.type}))})):null;var i,o},Zp=function(n){return new De(function(e){var t=new Xp;t.onloadend=function(){e(t.result)},t.readAsDataURL(n)})},eh=Jp,th=0,nh=function(e){return(e||"blobid")+th++},rh=function(n,r,o,t){var i,a;0!==r.src.indexOf("blob:")?(i=eh(r.src).data,(a=n.findFirst(function(e){return e.base64()===i}))?o({image:r,blobInfo:a}):Qp(r.src).then(function(e){a=n.create(nh(),e,i),n.add(a),o({image:r,blobInfo:a})},function(e){t(e)})):(a=n.getByUri(r.src))?o({image:r,blobInfo:a}):Qp(r.src).then(function(t){Zp(t).then(function(e){i=eh(e).data,a=n.create(nh(),t,i),n.add(a),o({image:r,blobInfo:a})})},function(e){t(e)})},oh=function(e){return e?e.getElementsByTagName("img"):[]},ih=0,ah={uuid:function(e){return e+ih+++(t=function(){return Math.round(4294967295*Math.random()).toString(36)},"s"+(new Date).getTime().toString(36)+t()+t()+t());var t}};function uh(u){var n,o,i,t,e,a,r,s,c,l,f=(n=[],o=wa.constant,i=function(e){var t,n,r;if(!e.blob||!e.base64)throw new Error("blob and base64 representations of the image are required for BlobInfo to be created");return t=e.id||ah.uuid("blobid"),n=e.name||t,{id:o(t),name:o(n),filename:o(n+"."+(r=e.blob.type,{"image/jpeg":"jpg","image/jpg":"jpg","image/gif":"gif","image/png":"png"}[r.toLowerCase()]||"dat")),blob:o(e.blob),base64:o(e.base64),blobUri:o(e.blobUri||ue.createObjectURL(e.blob)),uri:o(e.uri)}},{create:function(e,t,n,r){return i("object"==typeof e?e:{id:e,name:r,blob:t,base64:n})},add:function(e){t(e.id())||n.push(e)},get:t=function(t){return e(function(e){return e.id()===t})},getByUri:function(t){return e(function(e){return e.blobUri()===t})},findFirst:e=function(e){return jt.filter(n,e)[0]},removeByUri:function(t){n=jt.filter(n,function(e){return e.blobUri()!==t||(ue.revokeObjectURL(e.blobUri()),!1)})},destroy:function(){jt.each(n,function(e){ue.revokeObjectURL(e.blobUri())}),n=[]}}),d=u.settings,m=(s={},c=function(e,t){return{status:e,resultUri:t}},{hasBlobUri:l=function(e){return e in s},getResultUri:function(e){var t=s[e];return t?t.resultUri:null},isPending:function(e){return!!l(e)&&1===s[e].status},isUploaded:function(e){return!!l(e)&&2===s[e].status},markPending:function(e){s[e]=c(1,null)},markUploaded:function(e,t){s[e]=c(2,t)},removeFailed:function(e){delete s[e]},destroy:function(){s={}}}),g=function(t){return function(e){return u.selection?t(e):[]}},p=function(e,t,n){for(var r=0;-1!==(r=e.indexOf(t,r))&&(e=e.substring(0,r)+n+e.substr(r+t.length),r+=n.length-t.length+1),-1!==r;);return e},h=function(e,t,n){return e=p(e,'src="'+t+'"','src="'+n+'"'),e=p(e,'data-mce-src="'+t+'"','data-mce-src="'+n+'"')},v=function(t,n){jt.each(u.undoManager.data,function(e){"fragmented"===e.type?e.fragments=jt.map(e.fragments,function(e){return h(e,t,n)}):e.content=h(e.content,t,n)})},b=function(){return u.notificationManager.open({text:u.translate("Image uploading..."),type:"info",timeout:-1,progressBar:!0})},y=function(e,t){f.removeByUri(e.src),v(e.src,t),u.$(e).attr({src:d.images_reuse_filename?t+"?"+(new Date).getTime():t,"data-mce-src":u.convertURL(t,"src")})},C=function(n){return a||(a=Wp(m,{url:d.images_upload_url,basePath:d.images_upload_base_path,credentials:d.images_upload_credentials,handler:d.images_upload_handler})),N().then(g(function(r){var e;return e=jt.map(r,function(e){return e.blobInfo}),a.upload(e,b).then(g(function(e){var t=jt.map(e,function(e,t){var n=r[t].image;return e.status&&!1!==u.settings.images_replace_blob_uris?y(n,e.url):e.error&&zp(u,e.error),{element:n,status:e.status}});return n&&n(t),t}))}))},x=function(e){if(!1!==d.automatic_uploads)return C(e)},w=function(e){return!d.images_dataimg_filter||d.images_dataimg_filter(e)},N=function(){var o,i,a;return r||(o=m,i=f,a={},r={findAll:function(e,n){var t;n||(n=wa.constant(!0)),t=jt.filter(oh(e),function(e){var t=e.src;return!!Re.fileApi&&!e.hasAttribute("data-mce-bogus")&&!e.hasAttribute("data-mce-placeholder")&&!(!t||t===Re.transparentSrc)&&(0===t.indexOf("blob:")?!o.isUploaded(t):0===t.indexOf("data:")&&n(e))});var r=jt.map(t,function(n){if(a[n.src])return new De(function(t){a[n.src].then(function(e){if("string"==typeof e)return e;t({image:n,blobInfo:e.blobInfo})})});var e=new De(function(e,t){rh(i,n,e,t)}).then(function(e){return delete a[e.image.src],e})["catch"](function(e){return delete a[n.src],e});return a[n.src]=e});return De.all(r)}}),r.findAll(u.getBody(),w).then(g(function(e){return e=jt.filter(e,function(e){return"string"!=typeof e||(Vp(u,e),!1)}),jt.each(e,function(e){v(e.image.src,e.blobInfo.blobUri()),e.image.src=e.blobInfo.blobUri(),e.image.removeAttribute("data-mce-src")}),e}))},E=function(e){return e.replace(/src="(blob:[^"]+)"/g,function(e,n){var t=m.getResultUri(n);if(t)return'src="'+t+'"';var r=f.getByUri(n);return r||(r=jt.reduce(u.editorManager.get(),function(e,t){return e||t.editorUpload&&t.editorUpload.blobCache.getByUri(n)},null)),r?'src="data:'+r.blob().type+";base64,"+r.base64()+'"':e})};return u.on("setContent",function(){!1!==u.settings.automatic_uploads?x():N()}),u.on("RawSaveContent",function(e){e.content=E(e.content)}),u.on("getContent",function(e){e.source_view||"raw"===e.format||(e.content=E(e.content))}),u.on("PostRender",function(){u.parser.addNodeFilter("img",function(e){jt.each(e,function(e){var t=e.attr("src");if(!f.getByUri(t)){var n=m.getResultUri(t);n&&e.attr("src",n)}})})}),{blobCache:f,uploadImages:C,uploadImagesAuto:x,scanForImages:N,destroy:function(){f.destroy(),m.destroy(),r=a=null}}}var sh=function(e,t){return e.hasOwnProperty(t.nodeName)},ch=function(e,t){if(Bo.isText(t)){if(0===t.nodeValue.length)return!0;if(/^\s+$/.test(t.nodeValue)&&(!t.nextSibling||sh(e,t.nextSibling)))return!0}return!1},lh=function(e){var t,n,r,o,i,a,u,s,c,l,f,d=e.settings,m=e.dom,g=e.selection,p=e.schema,h=p.getBlockElements(),v=g.getStart(),b=e.getBody();if(f=d.forced_root_block,v&&Bo.isElement(v)&&f&&(l=b.nodeName.toLowerCase(),p.isValidChild(l,f.toLowerCase())&&(y=h,C=b,x=v,!M(Hf(er.fromDom(x),er.fromDom(C)),function(e){return sh(y,e.dom())})))){var y,C,x,w,N;for(n=(t=g.getRng()).startContainer,r=t.startOffset,o=t.endContainer,i=t.endOffset,c=Ep(e),v=b.firstChild;v;)if(w=h,N=v,Bo.isText(N)||Bo.isElement(N)&&!sh(w,N)&&!hl(N)){if(ch(h,v)){v=(u=v).nextSibling,m.remove(u);continue}a||(a=m.create(f,e.settings.forced_root_block_attrs),v.parentNode.insertBefore(a,v),s=!0),v=(u=v).nextSibling,a.appendChild(u)}else a=null,v=v.nextSibling;s&&c&&(t.setStart(n,r),t.setEnd(o,i),g.setRng(t),e.nodeChanged())}},fh=function(e){e.settings.forced_root_block&&e.on("NodeChange",b(lh,e))},dh=function(t){return Wr.firstChild(t).fold(H([t]),function(e){return[t].concat(dh(e))})},mh=function(t){return Wr.lastChild(t).fold(H([t]),function(e){return"br"===sr.name(e)?Wr.prevSibling(e).map(function(e){return[t].concat(mh(e))}).getOr([]):[t].concat(mh(e))})},gh=function(o,e){return au([(i=e,a=i.startContainer,u=i.startOffset,Bo.isText(a)?0===u?A.some(er.fromDom(a)):A.none():A.from(a.childNodes[u]).map(er.fromDom)),(t=e,n=t.endContainer,r=t.endOffset,Bo.isText(n)?r===n.data.length?A.some(er.fromDom(n)):A.none():A.from(n.childNodes[r-1]).map(er.fromDom))],function(e,t){var n=V(dh(o),b(Ur.eq,e)),r=V(mh(o),b(Ur.eq,t));return n.isSome()&&r.isSome()}).getOr(!1);var t,n,r,i,a,u},ph=function(e,t,n,r){var o=n,i=new io(n,o),a=e.schema.getNonEmptyElements();do{if(3===n.nodeType&&0!==Yt.trim(n.nodeValue).length)return void(r?t.setStart(n,0):t.setEnd(n,n.nodeValue.length));if(a[n.nodeName]&&!/^(TD|TH)$/.test(n.nodeName))return void(r?t.setStartBefore(n):"BR"===n.nodeName?t.setEndBefore(n):t.setEndAfter(n));if(Re.ie&&Re.ie<11&&e.isBlock(n)&&e.isEmpty(n))return void(r?t.setStart(n,0):t.setEnd(n,0))}while(n=r?i.next():i.prev());"BODY"===o.nodeName&&(r?t.setStart(o,0):t.setEnd(o,o.childNodes.length))},hh=function(e){var t=e.selection.getSel();return t&&0<t.rangeCount};function vh(i){var r,o=[];"onselectionchange"in i.getDoc()||i.on("NodeChange Click MouseUp KeyUp Focus",function(e){var t,n;n={startContainer:(t=i.selection.getRng()).startContainer,startOffset:t.startOffset,endContainer:t.endContainer,endOffset:t.endOffset},"nodechange"!==e.type&&Zm(n,r)||i.fire("SelectionChange"),r=n}),i.on("contextmenu",function(){i.fire("SelectionChange")}),i.on("SelectionChange",function(){var e=i.selection.getStart(!0);!e||!Re.range&&i.selection.isCollapsed()||hh(i)&&!function(e){var t,n;if((n=i.$(e).parentsUntil(i.getBody()).add(e)).length===o.length){for(t=n.length;0<=t&&n[t]===o[t];t--);if(-1===t)return o=n,!0}return o=n,!1}(e)&&i.dom.isChildOf(e,i.getBody())&&i.nodeChanged({selectionChange:!0})}),i.on("MouseUp",function(e){!e.isDefaultPrevented()&&hh(i)&&("IMG"===i.selection.getNode().nodeName?Le.setEditorTimeout(i,function(){i.nodeChanged()}):i.nodeChanged())}),this.nodeChanged=function(e){var t,n,r,o=i.selection;i.initialized&&o&&!i.settings.disable_nodechange&&!i.readonly&&(r=i.getBody(),(t=o.getStart(!0)||r).ownerDocument===i.getDoc()&&i.dom.isChildOf(t,r)||(t=r),n=[],i.dom.getParent(t,function(e){if(e===r)return!0;n.push(e)}),(e=e||{}).element=t,e.parents=n,i.fire("NodeChange",e))}}var bh,yh,Ch=function(e){var t,n,r,o;return o=e.getBoundingClientRect(),n=(t=e.ownerDocument).documentElement,r=t.defaultView,{top:o.top+r.pageYOffset-n.clientTop,left:o.left+r.pageXOffset-n.clientLeft}},xh=function(e,t){return n=(u=e).inline?Ch(u.getBody()):{left:0,top:0},a=(i=e).getBody(),r=i.inline?{left:a.scrollLeft,top:a.scrollTop}:{left:0,top:0},{pageX:(o=function(e,t){if(t.target.ownerDocument!==e.getDoc()){var n=Ch(e.getContentAreaContainer()),r=(i=(o=e).getBody(),a=o.getDoc().documentElement,u={left:i.scrollLeft,top:i.scrollTop},s={left:i.scrollLeft||a.scrollLeft,top:i.scrollTop||a.scrollTop},o.inline?u:s);return{left:t.pageX-n.left+r.left,top:t.pageY-n.top+r.top}}var o,i,a,u,s;return{left:t.pageX,top:t.pageY}}(e,t)).left-n.left+r.left,pageY:o.top-n.top+r.top};var n,r,o,i,a,u},wh=Bo.isContentEditableFalse,Nh=Bo.isContentEditableTrue,Eh=function(e){e&&e.parentNode&&e.parentNode.removeChild(e)},Sh=function(u,s){return function(e){if(0===e.button){var t=jt.find(s.dom.getParents(e.target),wa.or(wh,Nh));if(i=s.getBody(),wh(a=t)&&a!==i){var n=s.dom.getPos(t),r=s.getBody(),o=s.getDoc().documentElement;u.element=t,u.screenX=e.screenX,u.screenY=e.screenY,u.maxX=(s.inline?r.scrollWidth:o.offsetWidth)-2,u.maxY=(s.inline?r.scrollHeight:o.offsetHeight)-2,u.relX=e.pageX-n.x,u.relY=e.pageY-n.y,u.width=t.offsetWidth,u.height=t.offsetHeight,u.ghost=function(e,t,n,r){var o=t.cloneNode(!0);e.dom.setStyles(o,{width:n,height:r}),e.dom.setAttrib(o,"data-mce-selected",null);var i=e.dom.create("div",{"class":"mce-drag-container","data-mce-bogus":"all",unselectable:"on",contenteditable:"false"});return e.dom.setStyles(i,{position:"absolute",opacity:.5,overflow:"hidden",border:0,padding:0,margin:0,width:n,height:r}),e.dom.setStyles(o,{margin:0,boxSizing:"border-box"}),i.appendChild(o),i}(s,t,u.width,u.height)}}var i,a}},Th=function(l,f){return function(e){if(l.dragging&&(s=(i=f).selection,c=s.getSel().getRangeAt(0).startContainer,a=3===c.nodeType?c.parentNode:c,u=l.element,a!==u&&!i.dom.isChildOf(a,u)&&!wh(a))){var t=(r=l.element,(o=r.cloneNode(!0)).removeAttribute("data-mce-selected"),o),n=f.fire("drop",{targetClone:t,clientX:e.clientX,clientY:e.clientY});n.isDefaultPrevented()||(t=n.targetClone,f.undoManager.transact(function(){Eh(l.element),f.insertContent(f.dom.getOuterHTML(t)),f._selectionOverrides.hideFakeCaret()}))}var r,o,i,a,u,s,c;kh(l)}},kh=function(e){e.dragging=!1,e.element=null,Eh(e.ghost)},Ah=function(e){var t,n,r,o,i,a,p,h,v,u,s,c={};t=hi.DOM,a=document,n=Sh(c,e),p=c,h=e,v=Le.throttle(function(e,t){h._selectionOverrides.hideFakeCaret(),h.selection.placeCaretAt(e,t)},0),r=function(e){var t,n,r,o,i,a,u,s,c,l,f,d,m=Math.max(Math.abs(e.screenX-p.screenX),Math.abs(e.screenY-p.screenY));if(p.element&&!p.dragging&&10<m){if(h.fire("dragstart",{target:p.element}).isDefaultPrevented())return;p.dragging=!0,h.focus()}if(p.dragging){var g=(f=p,{pageX:(d=xh(h,e)).pageX-f.relX,pageY:d.pageY+5});c=p.ghost,l=h.getBody(),c.parentNode!==l&&l.appendChild(c),t=p.ghost,n=g,r=p.width,o=p.height,i=p.maxX,a=p.maxY,s=u=0,t.style.left=n.pageX+"px",t.style.top=n.pageY+"px",n.pageX+r>i&&(u=n.pageX+r-i),n.pageY+o>a&&(s=n.pageY+o-a),t.style.width=r-u+"px",t.style.height=o-s+"px",v(e.clientX,e.clientY)}},o=Th(c,e),u=c,i=function(){u.dragging&&s.fire("dragend"),kh(u)},(s=e).on("mousedown",n),e.on("mousemove",r),e.on("mouseup",o),t.bind(a,"mousemove",r),t.bind(a,"mouseup",i),e.on("remove",function(){t.unbind(a,"mousemove",r),t.unbind(a,"mouseup",i)})},_h=function(e){var n;Ah(e),(n=e).on("drop",function(e){var t="undefined"!=typeof e.clientX?n.getDoc().elementFromPoint(e.clientX,e.clientY):null;(wh(t)||wh(n.dom.getContentEditableParent(t)))&&e.preventDefault()})},Rh=function(e){return jt.reduce(e,function(e,t){return e.concat(function(t){var e=function(e){return jt.map(e,function(e){return(e=Ja(e)).node=t,e})};if(Bo.isElement(t))return e(t.getClientRects());if(Bo.isText(t)){var n=t.ownerDocument.createRange();return n.setStart(t,0),n.setEnd(t,t.data.length),e(n.getClientRects())}}(t))},[])};(yh=bh||(bh={}))[yh.Up=-1]="Up",yh[yh.Down=1]="Down";var Dh=function(o,i,a,e,u,t){var n,s,c=0,l=[],r=function(e){var t,n,r;for(r=Rh([e]),-1===o&&(r=r.reverse()),t=0;t<r.length;t++)if(n=r[t],!a(n,s)){if(0<l.length&&i(n,jt.last(l))&&c++,n.line=c,u(n))return!0;l.push(n)}};return(s=jt.last(t.getClientRects()))&&(r(n=t.getNode()),function(e,t,n,r){for(;r=Mc(r,e,Ya,t);)if(n(r))return}(o,e,r,n)),l},Bh=b(Dh,bh.Up,eu,tu),Oh=b(Dh,bh.Down,tu,eu),Ph=function(n){return function(e){return t=n,e.line>t;var t}},Lh=function(n){return function(e){return t=n,e.line===t;var t}},Ih=Bo.isContentEditableFalse,Mh=Mc,Fh=function(e,t){return Math.abs(e.left-t)},Uh=function(e,t){return Math.abs(e.right-t)},zh=function(e,t){return e>=t.left&&e<=t.right},Vh=function(e,o){return jt.reduce(e,function(e,t){var n,r;return n=Math.min(Fh(e,o),Uh(e,o)),r=Math.min(Fh(t,o),Uh(t,o)),zh(o,t)?t:zh(o,e)?e:r===n&&Ih(t.node)?t:r<n?t:e})},qh=function(e,t,n,r){for(;r=Mh(r,e,Ya,t);)if(n(r))return},Hh=function(e,t,n){var r,o,i,a,u,s,c,l,f=Rh((o=e,jt.filter(jt.toArray(o.getElementsByTagName("*")),Tc))),d=jt.filter(f,function(e){return n>=e.top&&n<=e.bottom});return(r=Vh(d,t))&&(r=Vh((u=e,l=function(t,e){var n;return n=jt.filter(Rh([e]),function(e){return!t(e,s)}),c=c.concat(n),0===n.length},(c=[]).push(s=r),qh(bh.Up,u,b(l,eu),s.node),qh(bh.Down,u,b(l,tu),s.node),c),t))&&Tc(r.node)?(a=t,{node:(i=r).node,before:Fh(i,a)<Uh(i,a)}):null},jh=function(i,a,e){return!e.collapsed&&z(e.getClientRects(),function(e,t){return e||(o=a,(r=i)>=(n=t).left&&r<=n.right&&o>=n.top&&o<=n.bottom);var n,r,o},!1)},$h=function(t){var e=Bi(function(){if(!t.removed&&t.selection.getRng().collapsed){var e=ms(t,t.selection.getRng(),!1);t.selection.setRng(e)}},0);t.on("focus",function(){e.throttle()}),t.on("blur",function(){e.cancel()})},Wh={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(e){return e.shiftKey||e.ctrlKey||e.altKey||this.metaKeyPressed(e)},metaKeyPressed:function(e){return Re.mac?e.metaKey:e.ctrlKey&&!e.altKey}},Kh=Bo.isContentEditableTrue,Xh=Bo.isContentEditableFalse,Yh=Jc,Gh=Gc,Jh=function(e,t){for(var n=e.getBody();t&&t!==n;){if(Kh(t)||Xh(t))return t;t=t.parentNode}return null},Qh=function(g){var p,e,t,a=g.getBody(),o=Sc(g.getBody(),function(e){return g.dom.isBlock(e)},function(){return Ep(g)}),h="sel-"+g.dom.uniqueId(),u=function(e){e&&g.selection.setRng(e)},s=function(){return g.selection.getRng()},v=function(e,t,n,r){return void 0===r&&(r=!0),g.fire("ShowCaret",{target:t,direction:e,before:n}).isDefaultPrevented()?null:(r&&g.selection.scrollIntoView(t,-1===e),o.show(n,t))},b=function(e,t){return t=$c(e,a,t),-1===e?Au.fromRangeStart(t):Au.fromRangeEnd(t)},n=function(e){return Da(e)||Ia(e)||Ma(e)},y=function(e){return n(e.startContainer)||n(e.endContainer)},c=function(e,t){var n,r,o,i,a,u,s,c,l,f,d=g.$,m=g.dom;if(!e)return null;if(e.collapsed){if(!y(e))if(!1===t){if(c=b(-1,e),Tc(c.getNode(!0)))return v(-1,c.getNode(!0),!1,!1);if(Tc(c.getNode()))return v(-1,c.getNode(),!c.isAtEnd(),!1)}else{if(c=b(1,e),Tc(c.getNode()))return v(1,c.getNode(),!c.isAtEnd(),!1);if(Tc(c.getNode(!0)))return v(1,c.getNode(!0),!1,!1)}return null}return i=e.startContainer,a=e.startOffset,u=e.endOffset,3===i.nodeType&&0===a&&Xh(i.parentNode)&&(i=i.parentNode,a=m.nodeIndex(i),i=i.parentNode),1!==i.nodeType?null:(u===a+1&&(n=i.childNodes[a]),Xh(n)?(l=f=n.cloneNode(!0),(s=g.fire("ObjectSelected",{target:n,targetClone:l})).isDefaultPrevented()?null:(r=ra(er.fromDom(g.getBody()),"#"+h).fold(function(){return d([])},function(e){return d([e.dom()])}),l=s.targetClone,0===r.length&&(r=d('<div data-mce-bogus="all" class="mce-offscreen-selection"></div>').attr("id",h)).appendTo(g.getBody()),e=g.dom.createRng(),l===f&&Re.ie?(r.empty().append('<p style="font-size: 0" data-mce-bogus="all">\xa0</p>').append(l),e.setStartAfter(r[0].firstChild.firstChild),e.setEndAfter(l)):(r.empty().append("\xa0").append(l).append("\xa0"),e.setStart(r[0].firstChild,1),e.setEnd(r[0].lastChild,0)),r.css({top:m.getPos(n,g.getBody()).y}),r[0].focus(),(o=g.selection.getSel()).removeAllRanges(),o.addRange(e),F(Xi(er.fromDom(g.getBody()),"*[data-mce-selected]"),function(e){vr.remove(e,"data-mce-selected")}),n.setAttribute("data-mce-selected","1"),p=n,C(),e)):null)},l=function(){p&&(p.removeAttribute("data-mce-selected"),ra(er.fromDom(g.getBody()),"#"+h).each(Di.remove),p=null),ra(er.fromDom(g.getBody()),"#"+h).each(Di.remove),p=null},C=function(){o.hide()};return Re.ceFalse&&(function(){g.on("mouseup",function(e){var t=s();t.collapsed&&Dp(g,e.clientX,e.clientY)&&u(ds(g,t,!1))}),g.on("click",function(e){var t;(t=Jh(g,e.target))&&(Xh(t)&&(e.preventDefault(),g.focus()),Kh(t)&&g.dom.isChildOf(t,g.selection.getNode())&&l())}),g.on("blur NewBlock",function(){l()}),g.on("ResizeWindow FullscreenStateChanged",function(){return o.reposition()});var n,r,i=function(e,t){var n,r,o=g.dom.getParent(e,g.dom.isBlock),i=g.dom.getParent(t,g.dom.isBlock);return!(!o||!g.dom.isChildOf(o,i)||!1!==Xh(Jh(g,o)))||o&&(n=o,r=i,!(g.dom.getParent(n,g.dom.isBlock)===g.dom.getParent(r,g.dom.isBlock)))&&function(e){var t=Ts(e);if(!e.firstChild)return!1;var n=Au.before(e.firstChild),r=t.next(n);return r&&!Gh(r)&&!Yh(r)}(o)};r=!1,(n=g).on("touchstart",function(){r=!1}),n.on("touchmove",function(){r=!0}),n.on("touchend",function(e){var t=Jh(n,e.target);Xh(t)&&(r||(e.preventDefault(),c(fs(n,t))))}),g.on("mousedown",function(e){var t,n=e.target;if((n===a||"HTML"===n.nodeName||g.dom.isChildOf(n,a))&&!1!==Dp(g,e.clientX,e.clientY))if(t=Jh(g,n))Xh(t)?(e.preventDefault(),c(fs(g,t))):(l(),Kh(t)&&e.shiftKey||jh(e.clientX,e.clientY,g.selection.getRng())||(C(),g.selection.placeCaretAt(e.clientX,e.clientY)));else if(!1===Tc(n)){l(),C();var r=Hh(a,e.clientX,e.clientY);if(r&&!i(e.target,r.node)){e.preventDefault();var o=v(1,r.node,r.before,!1);g.getBody().focus(),u(o)}}}),g.on("keypress",function(e){Wh.modifierPressed(e)||(e.keyCode,Xh(g.selection.getNode())&&e.preventDefault())}),g.on("getSelectionRange",function(e){var t=e.range;if(p){if(!p.parentNode)return void(p=null);(t=t.cloneRange()).selectNode(p),e.range=t}}),g.on("setSelectionRange",function(e){var t;(t=c(e.range,e.forward))&&(e.range=t)}),g.on("AfterSetSelectionRange",function(e){var t,n=e.range;y(n)||C(),t=n.startContainer.parentNode,g.dom.hasClass(t,"mce-offscreen-selection")||l()}),g.on("copy",function(e){var t,n=e.clipboardData;if(!e.isDefaultPrevented()&&e.clipboardData&&!Re.ie){var r=(t=g.dom.get(h))?t.getElementsByTagName("*")[0]:t;r&&(e.preventDefault(),n.clearData(),n.setData("text/html",r.outerHTML),n.setData("text/plain",r.outerText))}}),_h(g),$h(g)}(),e=g.contentStyles,t=".mce-content-body",e.push(o.getCss()),e.push(t+" .mce-offscreen-selection {position: absolute;left: -9999999999px;max-width: 1000000px;}"+t+" *[contentEditable=false] {cursor: default;}"+t+" *[contentEditable=true] {cursor: text;}")),{showCaret:v,showBlockCaretContainer:function(e){e.hasAttribute("data-mce-caret")&&(Fa(e),u(s()),g.selection.scrollIntoView(e[0]))},hideFakeCaret:C,destroy:function(){o.destroy(),p=null}}},Zh=function(e,t,n){var r,o,i,a,u=1;for(a=e.getShortEndedElements(),(i=/<([!?\/])?([A-Za-z0-9\-_\:\.]+)((?:\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g).lastIndex=r=n;o=i.exec(t);){if(r=i.lastIndex,"/"===o[1])u--;else if(!o[1]){if(o[2]in a)continue;u++}if(0===u)break}return r};function ev(F,U){void 0===U&&(U=ri());var e=function(){};!1!==(F=F||{}).fix_self_closing&&(F.fix_self_closing=!0);var z=F.comment?F.comment:e,V=F.cdata?F.cdata:e,q=F.text?F.text:e,H=F.start?F.start:e,j=F.end?F.end:e,$=F.pi?F.pi:e,W=F.doctype?F.doctype:e;return{parse:function(e){var t,n,r,d,o,i,a,m,u,s,g,c,p,l,f,h,v,b,y,C,x,w,N,E,S,T,k,A,_,R=0,D=[],B=0,O=Wo.decode,P=Yt.makeMap("src,href,data,background,formaction,poster,xlink:href"),L=/((java|vb)script|mhtml):/i,I=function(e){var t,n;for(t=D.length;t--&&D[t].name!==e;);if(0<=t){for(n=D.length-1;t<=n;n--)(e=D[n]).valid&&j(e.name);D.length=t}},M=function(e,t,n,r,o){var i,a,u,s,c;if(n=(t=t.toLowerCase())in g?t:O(n||r||o||""),p&&!m&&0==(0===(u=t).indexOf("data-")||0===u.indexOf("aria-"))){if(!(i=b[t])&&y){for(a=y.length;a--&&!(i=y[a]).pattern.test(t););-1===a&&(i=null)}if(!i)return;if(i.validValues&&!(n in i.validValues))return}if(P[t]&&!F.allow_script_urls){var l=n.replace(/[\s\u0000-\u001F]+/g,"");try{l=decodeURIComponent(l)}catch(f){l=unescape(l)}if(L.test(l))return;if(c=l,!(s=F).allow_html_data_urls&&(/^data:image\//i.test(c)?!1===s.allow_svg_data_urls&&/^data:image\/svg\+xml/i.test(c):/^data:/i.test(c)))return}m&&(t in P||0===t.indexOf("on"))||(d.map[t]=n,d.push({name:t,value:n}))};for(S=new RegExp("<(?:(?:!--([\\w\\W]*?)--\x3e)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),T=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,s=U.getShortEndedElements(),E=F.self_closing_elements||U.getSelfClosingElements(),g=U.getBoolAttrs(),p=F.validate,u=F.remove_internals,_=F.fix_self_closing,k=U.getSpecialElements(),N=e+">";t=S.exec(N);){if(R<t.index&&q(O(e.substr(R,t.index-R))),n=t[6])":"===(n=n.toLowerCase()).charAt(0)&&(n=n.substr(1)),I(n);else if(n=t[7]){if(t.index+t[0].length>e.length){q(O(e.substr(t.index))),R=t.index+t[0].length;continue}if(":"===(n=n.toLowerCase()).charAt(0)&&(n=n.substr(1)),c=n in s,_&&E[n]&&0<D.length&&D[D.length-1].name===n&&I(n),!p||(l=U.getElementRule(n))){if(f=!0,p&&(b=l.attributes,y=l.attributePatterns),(v=t[8])?((m=-1!==v.indexOf("data-mce-type"))&&u&&(f=!1),(d=[]).map={},v.replace(T,M)):(d=[]).map={},p&&!m){if(C=l.attributesRequired,x=l.attributesDefault,w=l.attributesForced,l.removeEmptyAttrs&&!d.length&&(f=!1),w)for(o=w.length;o--;)a=(h=w[o]).name,"{$uid}"===(A=h.value)&&(A="mce_"+B++),d.map[a]=A,d.push({name:a,value:A});if(x)for(o=x.length;o--;)(a=(h=x[o]).name)in d.map||("{$uid}"===(A=h.value)&&(A="mce_"+B++),d.map[a]=A,d.push({name:a,value:A}));if(C){for(o=C.length;o--&&!(C[o]in d.map););-1===o&&(f=!1)}if(h=d.map["data-mce-bogus"]){if("all"===h){R=Zh(U,e,S.lastIndex),S.lastIndex=R;continue}f=!1}}f&&H(n,d,c)}else f=!1;if(r=k[n]){r.lastIndex=R=t.index+t[0].length,(t=r.exec(e))?(f&&(i=e.substr(R,t.index-R)),R=t.index+t[0].length):(i=e.substr(R),R=e.length),f&&(0<i.length&&q(i,!0),j(n)),S.lastIndex=R;continue}c||(v&&v.indexOf("/")===v.length-1?f&&j(n):D.push({name:n,valid:f}))}else(n=t[1])?(">"===n.charAt(0)&&(n=" "+n),F.allow_conditional_comments||"[if"!==n.substr(0,3).toLowerCase()||(n=" "+n),z(n)):(n=t[2])?V(n.replace(/<!--|-->/g,"")):(n=t[3])?W(n):(n=t[4])&&$(n,t[5]);R=t.index+t[0].length}for(R<e.length&&q(O(e.substr(R))),o=D.length-1;0<=o;o--)(n=D[o]).valid&&j(n.name)}}}(ev||(ev={})).findEndTag=Zh;var tv=ev,nv=function(e,t){var n,r,o,i,a,u,s,c,l=t,f=/<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,d=e.schema;for(u=e.getTempAttrs(),s=l,c=new RegExp(["\\s?("+u.join("|")+')="[^"]+"'].join("|"),"gi"),l=s.replace(c,""),a=d.getShortEndedElements();i=f.exec(l);)r=f.lastIndex,o=i[0].length,n=a[i[1]]?r:tv.findEndTag(d,l,r),l=l.substring(0,r-o)+l.substring(n),f.lastIndex=r-o;return Ta(l)},rv={trimExternal:nv,trimInternal:nv},ov=0,iv=2,av=1,uv=function(g,p){var e=g.length+p.length+2,h=new Array(e),v=new Array(e),c=function(e,t,n,r,o){var i=l(e,t,n,r);if(null===i||i.start===t&&i.diag===t-r||i.end===e&&i.diag===e-n)for(var a=e,u=n;a<t||u<r;)a<t&&u<r&&g[a]===p[u]?(o.push([0,g[a]]),++a,++u):r-n<t-e?(o.push([2,g[a]]),++a):(o.push([1,p[u]]),++u);else{c(e,i.start,n,i.start-i.diag,o);for(var s=i.start;s<i.end;++s)o.push([0,g[s]]);c(i.end,t,i.end-i.diag,r,o)}},b=function(e,t,n,r){for(var o=e;o-t<r&&o<n&&g[o]===p[o-t];)++o;return{start:e,end:o,diag:t}},l=function(e,t,n,r){var o=t-e,i=r-n;if(0===o||0===i)return null;var a,u,s,c,l,f=o-i,d=i+o,m=(d%2==0?d:d+1)/2;for(h[1+m]=e,v[1+m]=t+1,a=0;a<=m;++a){for(u=-a;u<=a;u+=2){for(s=u+m,u===-a||u!==a&&h[s-1]<h[s+1]?h[s]=h[s+1]:h[s]=h[s-1]+1,l=(c=h[s])-e+n-u;c<t&&l<r&&g[c]===p[l];)h[s]=++c,++l;if(f%2!=0&&f-a<=u&&u<=f+a&&v[s-f]<=h[s])return b(v[s-f],u+e-n,t,r)}for(u=f-a;u<=f+a;u+=2){for(s=u+m-f,u===f-a||u!==f+a&&v[s+1]<=v[s-1]?v[s]=v[s+1]-1:v[s]=v[s-1],l=(c=v[s]-1)-e+n-u;e<=c&&n<=l&&g[c]===p[l];)v[s]=c--,l--;if(f%2==0&&-a<=u&&u<=a&&v[s]<=h[s+f])return b(v[s],u+e-n,t,r)}}},t=[];return c(0,g.length,0,p.length,t),t},sv=function(e){return Bo.isElement(e)?e.outerHTML:Bo.isText(e)?Wo.encodeRaw(e.data,!1):Bo.isComment(e)?"\x3c!--"+e.data+"--\x3e":""},cv=function(e,t,n){var r=function(e){var t,n,r;for(r=document.createElement("div"),t=document.createDocumentFragment(),e&&(r.innerHTML=e);n=r.firstChild;)t.appendChild(n);return t}(t);if(e.hasChildNodes()&&n<e.childNodes.length){var o=e.childNodes[n];o.parentNode.insertBefore(r,o)}else e.appendChild(r)},lv=function(e){return jt.filter(jt.map(e.childNodes,sv),function(e){return 0<e.length})},fv=function(e,t){var n,r,o,i=jt.map(t.childNodes,sv);return n=uv(i,e),r=t,o=0,jt.each(n,function(e){e[0]===ov?o++:e[0]===av?(cv(r,e[1],o),o++):e[0]===iv&&function(e,t){if(e.hasChildNodes()&&t<e.childNodes.length){var n=e.childNodes[t];n.parentNode.removeChild(n)}}(r,o)}),t},dv=function(e,t){var n=(t||document).createElement("div");return n.innerHTML=e,Wr.children(er.fromDom(n))},mv=function(e){return e.dom().innerHTML},gv=mv,pv=function(e,t){var n=Wr.owner(e).dom(),r=er.fromDom(n.createDocumentFragment()),o=dv(t,n);_i(r,o),Di.empty(e),ki.append(e,r)},hv=Oi(A.none()),vv=function(e){return{type:"fragmented",fragments:e,content:"",bookmark:null,beforeBookmark:null}},bv=function(e){return{type:"complete",fragments:null,content:e,bookmark:null,beforeBookmark:null}},yv=function(e){return"fragmented"===e.type?e.fragments.join(""):e.content},Cv=function(e){var t=er.fromTag("body",hv.get().getOrThunk(function(){var e=document.implementation.createHTMLDocument("undo");return hv.set(A.some(e)),e}));return pv(t,yv(e)),F(Xi(t,"*[data-mce-bogus]"),Di.unwrap),gv(t)},xv=function(n){var e,t,r;return e=lv(n.getBody()),-1!==(t=(r=G(e,function(e){var t=rv.trimInternal(n.serializer,e);return 0<t.length?[t]:[]})).join("")).indexOf("</iframe>")?vv(r):bv(t)},wv=function(e,t,n){"fragmented"===t.type?fv(t.fragments,e.getBody()):e.setContent(t.content,{format:"raw"}),e.selection.moveToBookmark(n?t.beforeBookmark:t.bookmark)},Nv=function(e,t){return!(!e||!t)&&(r=t,yv(e)===yv(r)||(n=t,Cv(e)===Cv(n)));var n,r};function Ev(u){var s,r,o=this,c=0,l=[],t=0,f=function(){return 0===t},i=function(e){f()&&(o.typing=e)},d=function(e){u.setDirty(e)},a=function(e){i(!1),o.add({},e)},n=function(){o.typing&&(i(!1),o.add())};return u.on("init",function(){o.add()}),u.on("BeforeExecCommand",function(e){var t=e.command;"Undo"!==t&&"Redo"!==t&&"mceRepaint"!==t&&(n(),o.beforeChange())}),u.on("ExecCommand",function(e){var t=e.command;"Undo"!==t&&"Redo"!==t&&"mceRepaint"!==t&&a(e)}),u.on("ObjectResizeStart Cut",function(){o.beforeChange()}),u.on("SaveContent ObjectResized blur",a),u.on("DragEnd",a),u.on("KeyUp",function(e){var t=e.keyCode;e.isDefaultPrevented()||((33<=t&&t<=36||37<=t&&t<=40||45===t||e.ctrlKey)&&(a(),u.nodeChanged()),46!==t&&8!==t||u.nodeChanged(),r&&o.typing&&!1===Nv(xv(u),l[0])&&(!1===u.isDirty()&&(d(!0),u.fire("change",{level:l[0],lastLevel:null})),u.fire("TypingUndo"),r=!1,u.nodeChanged()))}),u.on("KeyDown",function(e){var t=e.keyCode;if(!e.isDefaultPrevented())if(33<=t&&t<=36||37<=t&&t<=40||45===t)o.typing&&a(e);else{var n=e.ctrlKey&&!e.altKey||e.metaKey;!(t<16||20<t)||224===t||91===t||o.typing||n||(o.beforeChange(),i(!0),o.add({},e),r=!0)}}),u.on("MouseDown",function(e){o.typing&&a(e)}),u.on("input",function(e){var t;e.inputType&&("insertReplacementText"===e.inputType||"insertText"===(t=e).inputType&&null===t.data)&&a(e)}),u.addShortcut("meta+z","","Undo"),u.addShortcut("meta+y,meta+shift+z","","Redo"),u.on("AddUndo Undo Redo ClearUndos",function(e){e.isDefaultPrevented()||u.nodeChanged()}),o={data:l,typing:!1,beforeChange:function(){f()&&(s=Xu.getUndoBookmark(u.selection))},add:function(e,t){var n,r,o,i=u.settings;if(o=xv(u),e=e||{},e=Yt.extend(e,o),!1===f()||u.removed)return null;if(r=l[c],u.fire("BeforeAddUndo",{level:e,lastLevel:r,originalEvent:t}).isDefaultPrevented())return null;if(r&&Nv(r,e))return null;if(l[c]&&(l[c].beforeBookmark=s),i.custom_undo_redo_levels&&l.length>i.custom_undo_redo_levels){for(n=0;n<l.length-1;n++)l[n]=l[n+1];l.length--,c=l.length}e.bookmark=Xu.getUndoBookmark(u.selection),c<l.length-1&&(l.length=c+1),l.push(e),c=l.length-1;var a={level:e,lastLevel:r,originalEvent:t};return u.fire("AddUndo",a),0<c&&(d(!0),u.fire("change",a)),e},undo:function(){var e;return o.typing&&(o.add(),o.typing=!1,i(!1)),0<c&&(e=l[--c],wv(u,e,!0),d(!0),u.fire("undo",{level:e})),e},redo:function(){var e;return c<l.length-1&&(e=l[++c],wv(u,e,!1),d(!0),u.fire("redo",{level:e})),e},clear:function(){l=[],c=0,o.typing=!1,o.data=l,u.fire("ClearUndos")},hasUndo:function(){return 0<c||o.typing&&l[0]&&!Nv(xv(u),l[0])},hasRedo:function(){return c<l.length-1&&!o.typing},transact:function(e){return n(),o.beforeChange(),o.ignore(e),o.add()},ignore:function(e){try{t++,e()}finally{t--}},extra:function(e,t){var n,r;o.transact(e)&&(r=l[c].bookmark,n=l[c-1],wv(u,n,!0),o.transact(t)&&(l[c-1].beforeBookmark=r))}}}var Sv,Tv,kv=Cl.isEq,Av=function(e,t,n){var r=e.formatter.get(n);if(r)for(var o=0;o<r.length;o++)if(!1===r[o].inherit&&e.dom.is(t,r[o].selector))return!0;return!1},_v=function(t,e,n,r){var o=t.dom.getRoot();return e!==o&&(e=t.dom.getParent(e,function(e){return!!Av(t,e,n)||e.parentNode===o||!!Bv(t,e,n,r,!0)}),Bv(t,e,n,r))},Rv=function(e,t,n){return!!kv(t,n.inline)||!!kv(t,n.block)||(n.selector?1===t.nodeType&&e.is(t,n.selector):void 0)},Dv=function(e,t,n,r,o,i){var a,u,s,c=n[r];if(n.onmatch)return n.onmatch(t,n,r);if(c)if("undefined"==typeof c.length){for(a in c)if(c.hasOwnProperty(a)){if(u="attributes"===r?e.getAttrib(t,a):Cl.getStyle(e,t,a),o&&!u&&!n.exact)return;if((!o||n.exact)&&!kv(u,Cl.normalizeStyleValue(e,Cl.replaceVars(c[a],i),a)))return}}else for(s=0;s<c.length;s++)if("attributes"===r?e.getAttrib(t,c[s]):Cl.getStyle(e,t,c[s]))return n;return n},Bv=function(e,t,n,r,o){var i,a,u,s,c=e.formatter.get(n),l=e.dom;if(c&&t)for(a=0;a<c.length;a++)if(i=c[a],Rv(e.dom,t,i)&&Dv(l,t,i,"attributes",o,r)&&Dv(l,t,i,"styles",o,r)){if(s=i.classes)for(u=0;u<s.length;u++)if(!e.dom.hasClass(t,s[u]))return;return i}},Ov={matchNode:Bv,matchName:Rv,match:function(e,t,n,r){var o;return r?_v(e,r,t,n):(r=e.selection.getNode(),!!_v(e,r,t,n)||!((o=e.selection.getStart())===r||!_v(e,o,t,n)))},matchAll:function(r,o,i){var e,a=[],u={};return e=r.selection.getStart(),r.dom.getParent(e,function(e){var t,n;for(t=0;t<o.length;t++)n=o[t],!u[n]&&Bv(r,e,n,i)&&(u[n]=!0,a.push(n))},r.dom.getRoot()),a},canApply:function(e,t){var n,r,o,i,a,u=e.formatter.get(t),s=e.dom;if(u)for(n=e.selection.getStart(),r=Cl.getParents(s,n),i=u.length-1;0<=i;i--){if(!(a=u[i].selector)||u[i].defaultBlock)return!0;for(o=r.length-1;0<=o;o--)if(s.is(r[o],a))return!0}return!1},matchesUnInheritedFormatSelector:Av},Pv=function(e,t){return e.splitText(t)},Lv=function(e){var t=e.startContainer,n=e.startOffset,r=e.endContainer,o=e.endOffset;return t===r&&Bo.isText(t)?0<n&&n<t.nodeValue.length&&(t=(r=Pv(t,n)).previousSibling,n<o?(t=r=Pv(r,o-=n).previousSibling,o=r.nodeValue.length,n=0):o=0):(Bo.isText(t)&&0<n&&n<t.nodeValue.length&&(t=Pv(t,n),n=0),Bo.isText(r)&&0<o&&o<r.nodeValue.length&&(o=(r=Pv(r,o).previousSibling).nodeValue.length)),{startContainer:t,startOffset:n,endContainer:r,endOffset:o}},Iv=Sa,Mv="_mce_caret",Fv=function(e){return 0<function(e){for(var t=[];e;){if(3===e.nodeType&&e.nodeValue!==Iv||1<e.childNodes.length)return[];1===e.nodeType&&t.push(e),e=e.firstChild}return t}(e).length},Uv=function(e){var t;if(e)for(e=(t=new io(e,e)).current();e;e=t.next())if(3===e.nodeType)return e;return null},zv=function(e){var t=er.fromTag("span");return vr.setAll(t,{id:Mv,"data-mce-bogus":"1","data-mce-type":"format-caret"}),e&&ki.append(t,er.fromText(Iv)),t},Vv=function(e,t,n,r){var o,i,a,u;o=t.getRng(!0),i=e.getParent(n,e.isBlock),Fv(n)?(!1!==r&&(o.setStartBefore(n),o.setEndBefore(n)),e.remove(n)):((u=Uv(n))&&u.nodeValue.charAt(0)===Iv&&u.deleteData(0,1),a=u,o.startContainer===a&&0<o.startOffset&&o.setStart(a,o.startOffset-1),o.endContainer===a&&0<o.endOffset&&o.setEnd(a,o.endOffset-1),e.remove(n,!0)),i&&e.isEmpty(i)&&ef(er.fromDom(i)),t.setRng(o)},qv=function(e,t,n,r,o){if(r)Vv(t,n,r,o);else if(!(r=Ju(e,n.getStart())))for(;r=t.get(Mv);)Vv(t,n,r,!1)},Hv=function(e,t,n){var r=e.dom,o=r.getParent(n,wa.curry(Cl.isTextBlock,e));o&&r.isEmpty(o)?n.parentNode.replaceChild(t,n):(Zl(er.fromDom(n)),r.isEmpty(n)?n.parentNode.replaceChild(t,n):r.insertAfter(t,n))},jv=function(e,t){return e.appendChild(t),t},$v=function(e,t){var n,r,o=(n=function(e,t){return jv(e,t.cloneNode(!1))},r=t,function(e,t){for(var n=e.length-1;0<=n;n--)t(e[n],n,e)}(e,function(e){r=n(r,e)}),r);return jv(o,o.ownerDocument.createTextNode(Iv))},Wv=function(e){var i=e.dom,a=e.selection,u=e.getBody();e.on("mouseup keydown",function(e){var t,n,r,o;t=u,n=i,r=a,o=e.keyCode,qv(t,n,r,null,!1),8===o&&r.isCollapsed()&&r.getStart().innerHTML===Iv&&qv(t,n,r,Ju(t,r.getStart())),37!==o&&39!==o||qv(t,n,r,Ju(t,r.getStart()))})},Kv=function(e,t){return e.schema.getTextInlineElements().hasOwnProperty(sr.name(t))&&!Gu(t.dom())&&!Bo.isBogus(t.dom())},Xv={},Yv=jt.filter,Gv=jt.each;Tv=function(e){var t,n,r=e.selection.getRng();t=Bo.matchNodeNames("pre"),r.collapsed||(n=e.selection.getSelectedBlocks(),Gv(Yv(Yv(n,t),function(e){return t(e.previousSibling)&&-1!==jt.indexOf(n,e.previousSibling)}),function(e){var t,n;t=e.previousSibling,pn(n=e).remove(),pn(t).append("<br><br>").append(n.childNodes)}))},Xv[Sv="pre"]||(Xv[Sv]=[]),Xv[Sv].push(Tv);var Jv=function(e,t){Gv(Xv[e],function(e){e(t)})},Qv=/^(src|href|style)$/,Zv=Yt.each,eb=Cl.isEq,tb=function(e){return/^(TH|TD)$/.test(e.nodeName)},nb=function(e,t,n){var r,o,i;return r=t[n?"startContainer":"endContainer"],o=t[n?"startOffset":"endOffset"],Bo.isElement(r)&&(i=r.childNodes.length-1,!n&&o&&o--,r=r.childNodes[i<o?i:o]),Bo.isText(r)&&n&&o>=r.nodeValue.length&&(r=new io(r,e.getBody()).next()||r),Bo.isText(r)&&!n&&0===o&&(r=new io(r,e.getBody()).prev()||r),r},rb=function(e,t,n,r){var o=e.create(n,r);return t.parentNode.insertBefore(o,t),o.appendChild(t),o},ob=function(e,t,n,r){return!(t=Cl.getNonWhiteSpaceSibling(t,n,r))||"BR"===t.nodeName||e.isBlock(t)},ib=function(e,n,r,o,i){var t,a,u,s,c,l,f,d,m,g,p,h,v,b,y=e.dom;if(c=y,!(eb(l=o,(f=n).inline)||eb(l,f.block)||(f.selector?Bo.isElement(l)&&c.is(l,f.selector):void 0)||(s=o,n.links&&"A"===s.tagName)))return!1;if("all"!==n.remove)for(Zv(n.styles,function(e,t){e=Cl.normalizeStyleValue(y,Cl.replaceVars(e,r),t),"number"==typeof t&&(t=e,i=0),(n.remove_similar||!i||eb(Cl.getStyle(y,i,t),e))&&y.setStyle(o,t,""),u=1}),u&&""===y.getAttrib(o,"style")&&(o.removeAttribute("style"),o.removeAttribute("data-mce-style")),Zv(n.attributes,function(e,t){var n;if(e=Cl.replaceVars(e,r),"number"==typeof t&&(t=e,i=0),!i||eb(y.getAttrib(i,t),e)){if("class"===t&&(e=y.getAttrib(o,t))&&(n="",Zv(e.split(/\s+/),function(e){/mce\-\w+/.test(e)&&(n+=(n?" ":"")+e)}),n))return void y.setAttrib(o,t,n);"class"===t&&o.removeAttribute("className"),Qv.test(t)&&o.removeAttribute("data-mce-"+t),o.removeAttribute(t)}}),Zv(n.classes,function(e){e=Cl.replaceVars(e,r),i&&!y.hasClass(i,e)||y.removeClass(o,e)}),a=y.getAttribs(o),t=0;t<a.length;t++){var C=a[t].nodeName;if(0!==C.indexOf("_")&&0!==C.indexOf("data-"))return!1}return"none"!==n.remove?(d=e,g=n,h=(m=o).parentNode,v=d.dom,b=d.settings.forced_root_block,g.block&&(b?h===v.getRoot()&&(g.list_block&&eb(m,g.list_block)||Zv(Yt.grep(m.childNodes),function(e){Cl.isValid(d,b,e.nodeName.toLowerCase())?p?p.appendChild(e):(p=rb(v,e,b),v.setAttribs(p,d.settings.forced_root_block_attrs)):p=0})):v.isBlock(m)&&!v.isBlock(h)&&(ob(v,m,!1)||ob(v,m.firstChild,!0,1)||m.insertBefore(v.create("br"),m.firstChild),ob(v,m,!0)||ob(v,m.lastChild,!1,1)||m.appendChild(v.create("br")))),g.selector&&g.inline&&!eb(g.inline,m)||v.remove(m,1),!0):void 0},ab=ib,ub=function(s,c,l,e,f){var t,n,d=s.formatter.get(c),m=d[0],a=!0,u=s.dom,r=s.selection,o=function(e){var n,t,r,o,i,a,u=(n=s,t=e,r=c,o=l,i=f,Zv(Cl.getParents(n.dom,t.parentNode).reverse(),function(e){var t;a||"_start"===e.id||"_end"===e.id||(t=Ov.matchNode(n,e,r,o,i))&&!1!==t.split&&(a=e)}),a);return function(e,t,n,r,o,i,a,u){var s,c,l,f,d,m,g=e.dom;if(n){for(m=n.parentNode,s=r.parentNode;s&&s!==m;s=s.parentNode){for(c=g.clone(s,!1),d=0;d<t.length;d++)if(ib(e,t[d],u,c,c)){c=0;break}c&&(l&&c.appendChild(l),f||(f=c),l=c)}!i||a.mixed&&g.isBlock(n)||(r=g.split(n,r)),l&&(o.parentNode.insertBefore(l,o),f.appendChild(o))}return r}(s,d,u,e,e,!0,m,l)},g=function(e){var t,n,r,o,i;if(Bo.isElement(e)&&u.getContentEditable(e)&&(o=a,a="true"===u.getContentEditable(e),i=!0),t=Yt.grep(e.childNodes),a&&!i)for(n=0,r=d.length;n<r&&!ib(s,d[n],l,e,e);n++);if(m.deep&&t.length){for(n=0,r=t.length;n<r;n++)g(t[n]);i&&(a=o)}},i=function(e){var t=u.get(e?"_start":"_end"),n=t[e?"firstChild":"lastChild"];return hl(n)&&(n=n[e?"firstChild":"lastChild"]),Bo.isText(n)&&0===n.data.length&&(n=e?t.previousSibling||t.nextSibling:t.nextSibling||t.previousSibling),u.remove(t,!0),n},p=function(e){var t,n,r=e.commonAncestorContainer;if(e=Bl(s,e,d,!0),m.split){if((t=nb(s,e,!0))!==(n=nb(s,e))){if(/^(TR|TH|TD)$/.test(t.nodeName)&&t.firstChild&&(t="TR"===t.nodeName?t.firstChild.firstChild||t:t.firstChild||t),r&&/^T(HEAD|BODY|FOOT|R)$/.test(r.nodeName)&&tb(n)&&n.firstChild&&(n=n.firstChild||n),u.isChildOf(t,n)&&t!==n&&!u.isBlock(n)&&!tb(t)&&!tb(n))return t=rb(u,t,"span",{id:"_start","data-mce-type":"bookmark"}),o(t),void(t=i(!0));t=rb(u,t,"span",{id:"_start","data-mce-type":"bookmark"}),n=rb(u,n,"span",{id:"_end","data-mce-type":"bookmark"}),o(t),o(n),t=i(!0),n=i()}else t=n=o(t);e.startContainer=t.parentNode?t.parentNode:t,e.startOffset=u.nodeIndex(t),e.endContainer=n.parentNode?n.parentNode:n,e.endOffset=u.nodeIndex(n)+1}Pl(u,e,function(e){Zv(e,function(e){g(e),Bo.isElement(e)&&"underline"===s.dom.getStyle(e,"text-decoration")&&e.parentNode&&"underline"===Cl.getTextDecoration(u,e.parentNode)&&ib(s,{deep:!1,exact:!0,inline:"span",styles:{textDecoration:"underline"}},null,e)})})};if(e)e.nodeType?((n=u.createRng()).setStartBefore(e),n.setEndAfter(e),p(n)):p(e);else if("false"!==u.getContentEditable(r.getNode()))r.isCollapsed()&&m.inline&&!u.select("td[data-mce-selected],th[data-mce-selected]").length?function(e,t,n,r){var o,i,a,u,s,c,l,f=e.dom,d=e.selection,m=[],g=d.getRng();for(o=g.startContainer,i=g.startOffset,3===(s=o).nodeType&&(i!==o.nodeValue.length&&(u=!0),s=s.parentNode);s;){if(Ov.matchNode(e,s,t,n,r)){c=s;break}s.nextSibling&&(u=!0),m.push(s),s=s.parentNode}if(c)if(u){a=d.getBookmark(),g.collapse(!0);var p=Bl(e,g,e.formatter.get(t),!0);p=Lv(p),e.formatter.remove(t,n,p),d.moveToBookmark(a)}else{l=Ju(e.getBody(),c);var h=zv(!1).dom(),v=$v(m,h);Hv(e,h,l||c),Vv(f,d,l,!1),d.setCursorLocation(v,1),f.isEmpty(c)&&f.remove(c)}}(s,c,l,f):(t=Xu.getPersistentBookmark(s.selection,!0),p(r.getRng()),r.moveToBookmark(t),m.inline&&Ov.match(s,c,l,r.getStart())&&Cl.moveStart(u,r,r.getRng()),s.nodeChanged());else{e=r.getNode();for(var h=0,v=d.length;h<v&&(!d[h].ceFalseOverride||!ib(s,d[h],l,e,e));h++);}},sb=Yt.each,cb=function(e){return e&&1===e.nodeType&&!hl(e)&&!Gu(e)&&!Bo.isBogus(e)},lb=function(e,t){var n;for(n=e;n;n=n[t]){if(3===n.nodeType&&0!==n.nodeValue.length)return e;if(1===n.nodeType&&!hl(n))return n}return e},fb=function(e,t,n){var r,o,i=new Ql(e);if(t&&n&&(t=lb(t,"previousSibling"),n=lb(n,"nextSibling"),i.compare(t,n))){for(r=t.nextSibling;r&&r!==n;)r=(o=r).nextSibling,t.appendChild(o);return e.remove(n),Yt.each(Yt.grep(n.childNodes),function(e){t.appendChild(e)}),t}return n},db=function(e,t,n){sb(e.childNodes,function(e){cb(e)&&(t(e)&&n(e),e.hasChildNodes()&&db(e,t,n))})},mb=function(n,e){return b(function(e,t){return!(!t||!Cl.getStyle(n,t,e))},e)},gb=function(r,e,t){return b(function(e,t,n){r.setStyle(n,e,t),""===n.getAttribute("style")&&n.removeAttribute("style"),pb(r,n)},e,t)},pb=function(e,t){"SPAN"===t.nodeName&&0===e.getAttribs(t).length&&e.remove(t,!0)},hb=function(e,t){var n;1===t.nodeType&&t.parentNode&&1===t.parentNode.nodeType&&(n=Cl.getTextDecoration(e,t.parentNode),e.getStyle(t,"color")&&n?e.setStyle(t,"text-decoration",n):e.getStyle(t,"text-decoration")===n&&e.setStyle(t,"text-decoration",null))},vb=function(n,e,r,o){sb(e,function(t){sb(n.dom.select(t.inline,o),function(e){cb(e)&&ab(n,t,r,e,t.exact?e:null)}),function(r,e,t){if(e.clear_child_styles){var n=e.links?"*:not(a)":"*";sb(r.select(n,t),function(n){cb(n)&&sb(e.styles,function(e,t){r.setStyle(n,t,"")})})}}(n.dom,t,o)})},bb=function(e,t,n,r){(t.styles.color||t.styles.textDecoration)&&(Yt.walk(r,b(hb,e),"childNodes"),hb(e,r))},yb=function(e,t,n,r){t.styles&&t.styles.backgroundColor&&db(r,mb(e,"fontSize"),gb(e,"backgroundColor",Cl.replaceVars(t.styles.backgroundColor,n)))},Cb=function(e,t,n,r){"sub"!==t.inline&&"sup"!==t.inline||(db(r,mb(e,"fontSize"),gb(e,"fontSize","")),e.remove(e.select("sup"===t.inline?"sub":"sup",r),!0))},xb=function(e,t,n,r){r&&!1!==t.merge_siblings&&(r=fb(e,Cl.getNonWhiteSpaceSibling(r),r),r=fb(e,r,Cl.getNonWhiteSpaceSibling(r,!0)))},wb=function(t,n,r,o,i){Ov.matchNode(t,i.parentNode,r,o)&&ab(t,n,o,i)||n.merge_with_parents&&t.dom.getParent(i.parentNode,function(e){if(Ov.matchNode(t,e,r,o))return ab(t,n,o,i),!0})},Nb=Yt.each,Eb=function(g,p,h,r){var e,t,v=g.formatter.get(p),b=v[0],o=!r&&g.selection.isCollapsed(),i=g.dom,n=g.selection,y=function(n,e){if(e=e||b,n){if(e.onformat&&e.onformat(n,e,h,r),Nb(e.styles,function(e,t){i.setStyle(n,t,Cl.replaceVars(e,h))}),e.styles){var t=i.getAttrib(n,"style");t&&n.setAttribute("data-mce-style",t)}Nb(e.attributes,function(e,t){i.setAttrib(n,t,Cl.replaceVars(e,h))}),Nb(e.classes,function(e){e=Cl.replaceVars(e,h),i.hasClass(n,e)||i.addClass(n,e)})}},C=function(e,t){var n=!1;return!!b.selector&&(Nb(e,function(e){if(!("collapsed"in e&&e.collapsed!==o))return i.is(t,e.selector)&&!Gu(t)?(y(t,e),!(n=!0)):void 0}),n)},a=function(s,e,t,c){var l,f,d=[],m=!0;l=b.inline||b.block,f=s.create(l),y(f),Pl(s,e,function(e){var a,u=function(e){var t,n,r,o;if(o=m,t=e.nodeName.toLowerCase(),n=e.parentNode.nodeName.toLowerCase(),1===e.nodeType&&s.getContentEditable(e)&&(o=m,m="true"===s.getContentEditable(e),r=!0),Cl.isEq(t,"br"))return a=0,void(b.block&&s.remove(e));if(b.wrapper&&Ov.matchNode(g,e,p,h))a=0;else{if(m&&!r&&b.block&&!b.wrapper&&Cl.isTextBlock(g,t)&&Cl.isValid(g,n,l))return e=s.rename(e,l),y(e),d.push(e),void(a=0);if(b.selector){var i=C(v,e);if(!b.inline||i)return void(a=0)}!m||r||!Cl.isValid(g,l,t)||!Cl.isValid(g,n,l)||!c&&3===e.nodeType&&1===e.nodeValue.length&&65279===e.nodeValue.charCodeAt(0)||Gu(e)||b.inline&&s.isBlock(e)?(a=0,Nb(Yt.grep(e.childNodes),u),r&&(m=o),a=0):(a||(a=s.clone(f,!1),e.parentNode.insertBefore(a,e),d.push(a)),a.appendChild(e))}};Nb(e,u)}),!0===b.links&&Nb(d,function(e){var t=function(e){"A"===e.nodeName&&y(e,b),Nb(Yt.grep(e.childNodes),t)};t(e)}),Nb(d,function(e){var t,n,r,o,i,a=function(e){var n=!1;return Nb(e.childNodes,function(e){if((t=e)&&1===t.nodeType&&!hl(t)&&!Gu(t)&&!Bo.isBogus(t))return n=e,!1;var t}),n};n=0,Nb(e.childNodes,function(e){Cl.isWhiteSpaceNode(e)||hl(e)||n++}),t=n,!(1<d.length)&&s.isBlock(e)||0!==t?(b.inline||b.wrapper)&&(b.exact||1!==t||((o=a(r=e))&&!hl(o)&&Ov.matchName(s,o,b)&&(i=s.clone(o,!1),y(i),s.replace(i,r,!0),s.remove(o,1)),e=i||r),vb(g,v,h,e),wb(g,b,p,h,e),yb(s,b,h,e),Cb(s,b,h,e),xb(s,b,h,e)):s.remove(e,1)})};if("false"!==i.getContentEditable(n.getNode())){if(b){if(r)r.nodeType?C(v,r)||((t=i.createRng()).setStartBefore(r),t.setEndAfter(r),a(i,Bl(g,t,v),0,!0)):a(i,r,0,!0);else if(o&&b.inline&&!i.select("td[data-mce-selected],th[data-mce-selected]").length)!function(e,t,n){var r,o,i,a,u,s,c=e.selection;a=(r=c.getRng(!0)).startOffset,s=r.startContainer.nodeValue,(o=Ju(e.getBody(),c.getStart()))&&(i=Uv(o));var l,f,d=/[^\s\u00a0\u00ad\u200b\ufeff]/;s&&0<a&&a<s.length&&d.test(s.charAt(a))&&d.test(s.charAt(a-1))?(u=c.getBookmark(),r.collapse(!0),r=Bl(e,r,e.formatter.get(t)),r=Lv(r),e.formatter.apply(t,n,r),c.moveToBookmark(u)):(o&&i.nodeValue===Iv||(l=e.getDoc(),f=zv(!0).dom(),i=(o=l.importNode(f,!0)).firstChild,r.insertNode(o),a=1),e.formatter.apply(t,n,o),c.setCursorLocation(i,a))}(g,p,h);else{var u=g.selection.getNode();g.settings.forced_root_block||!v[0].defaultBlock||i.getParent(u,i.isBlock)||Eb(g,v[0].defaultBlock),g.selection.setRng(uf(g.selection.getRng())),e=Xu.getPersistentBookmark(g.selection,!0),a(i,Bl(g,n.getRng(),v)),b.styles&&bb(i,b,h,u),n.moveToBookmark(e),Cl.moveStart(i,n,n.getRng()),g.nodeChanged()}Jv(p,g)}}else{r=n.getNode();for(var s=0,c=v.length;s<c;s++)if(v[s].ceFalseOverride&&i.is(r,v[s].selector))return void y(r,v[s])}},Sb={applyFormat:Eb},Tb=Yt.each,kb=function(e,t,n,r,o){var i,a,u,s,c,l,f,d;null===t.get()&&(a=e,u={},(i=t).set({}),a.on("NodeChange",function(n){var r=Cl.getParents(a.dom,n.element),o={};r=Yt.grep(r,function(e){return 1===e.nodeType&&!e.getAttribute("data-mce-bogus")}),Tb(i.get(),function(e,n){Tb(r,function(t){return a.formatter.matchNode(t,n,{},e.similar)?(u[n]||(Tb(e,function(e){e(!0,{node:t,format:n,parents:r})}),u[n]=e),o[n]=e,!1):!Ov.matchesUnInheritedFormatSelector(a,t,n)&&void 0})}),Tb(u,function(e,t){o[t]||(delete u[t],Tb(e,function(e){e(!1,{node:n.element,format:t,parents:r})}))})})),c=n,l=r,f=o,d=(s=t).get(),Tb(c.split(","),function(e){d[e]||(d[e]=[],d[e].similar=f),d[e].push(l)}),s.set(d)},Ab={get:function(r){var t={valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure.image",collapsed:!1,classes:"align-left",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},inherit:!1,preview:!1,defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"},preview:"font-family font-size"}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"figure.image",collapsed:!1,classes:"align-center",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"},preview:!1},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"},preview:"font-family font-size"}],alignright:[{selector:"figure.image",collapsed:!1,classes:"align-right",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"},preview:"font-family font-size"}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},inherit:!1,defaultBlock:"div",preview:"font-family font-size"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},fontname:{inline:"span",toggle:!1,styles:{fontFamily:"%value"},clear_child_styles:!0},fontsize:{inline:"span",toggle:!1,styles:{fontSize:"%value"},clear_child_styles:!0},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(n,e,t){Yt.each(t,function(e,t){r.setAttrib(n,t,e)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]};return Yt.each("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(e){t[e]={block:e,remove:"all"}}),t}},_b=Yt.each,Rb=hi.DOM,Db=function(e,t){var n,o,r,m=t&&t.schema||ri({}),g=function(e){var t,n,r;return o="string"==typeof e?{name:e,classes:[],attrs:{}}:e,t=Rb.create(o.name),n=t,(r=o).classes.length&&Rb.addClass(n,r.classes.join(" ")),Rb.setAttribs(n,r.attrs),t},p=function(n,e,t){var r,o,i,a,u,s,c,l,f=0<e.length&&e[0],d=f&&f.name;if(u=d,s="string"!=typeof(a=n)?a.nodeName.toLowerCase():a,c=m.getElementRule(s),i=!(!(l=c&&c.parentsRequired)||!l.length)&&(u&&-1!==Yt.inArray(l,u)?u:l[0]))d===i?(o=e[0],e=e.slice(1)):o=i;else if(f)o=e[0],e=e.slice(1);else if(!t)return n;return o&&(r=g(o)).appendChild(n),t&&(r||(r=Rb.create("div")).appendChild(n),Yt.each(t,function(e){var t=g(e);r.insertBefore(t,n)})),p(r,e,o&&o.siblings)};return e&&e.length?(o=e[0],n=g(o),(r=Rb.create("div")).appendChild(p(n,e.slice(1),o.siblings)),r):""},Bb=function(e){var t,a={classes:[],attrs:{}};return"*"!==(e=a.selector=Yt.trim(e))&&(t=e.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g,function(e,t,n,r,o){switch(t){case"#":a.attrs.id=n;break;case".":a.classes.push(n);break;case":":-1!==Yt.inArray("checked disabled enabled read-only required".split(" "),n)&&(a.attrs[n]=n)}if("["===r){var i=o.match(/([\w\-]+)(?:\=\"([^\"]+))?/);i&&(a.attrs[i[1]]=i[2])}return""})),a.name=t||"div",a},Ob=function(e){return e&&"string"==typeof e?(e=(e=e.split(/\s*,\s*/)[0]).replace(/\s*(~\+|~|\+|>)\s*/g,"$1"),Yt.map(e.split(/(?:>|\s+(?![^\[\]]+\]))/),function(e){var t=Yt.map(e.split(/(?:~\+|~|\+)/),Bb),n=t.pop();return t.length&&(n.siblings=t),n}).reverse()):[]},Pb=function(n,e){var t,r,o,i,a,u,s="";if(!1===(u=n.settings.preview_styles))return"";"string"!=typeof u&&(u="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow");var c=function(e){return e.replace(/%(\w+)/g,"")};if("string"==typeof e){if(!(e=n.formatter.get(e)))return;e=e[0]}return"preview"in e&&!1===(u=e.preview)?"":(t=e.block||e.inline||"span",(i=Ob(e.selector)).length?(i[0].name||(i[0].name=t),t=e.selector,r=Db(i,n)):r=Db([t],n),o=Rb.select(t,r)[0]||r.firstChild,_b(e.styles,function(e,t){(e=c(e))&&Rb.setStyle(o,t,e)}),_b(e.attributes,function(e,t){(e=c(e))&&Rb.setAttrib(o,t,e)}),_b(e.classes,function(e){e=c(e),Rb.hasClass(o,e)||Rb.addClass(o,e)}),n.fire("PreviewFormats"),Rb.setStyles(r,{position:"absolute",left:-65535}),n.getBody().appendChild(r),a=Rb.getStyle(n.getBody(),"fontSize",!0),a=/px$/.test(a)?parseInt(a,10):0,_b(u.split(" "),function(e){var t=Rb.getStyle(o,e,!0);if(!("background-color"===e&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)&&(t=Rb.getStyle(n.getBody(),e,!0),"#ffffff"===Rb.toHex(t).toLowerCase())||"color"===e&&"#000000"===Rb.toHex(t).toLowerCase())){if("font-size"===e&&/em|%$/.test(t)){if(0===a)return;t=parseFloat(t)/(/%$/.test(t)?100:1)*a+"px"}"border"===e&&t&&(s+="padding:0 2px;"),s+=e+":"+t+";"}}),n.fire("AfterPreviewFormats"),Rb.remove(r),s)},Lb=function(e,t,n,r,o){var i=t.get(n);!Ov.match(e,n,r,o)||"toggle"in i[0]&&!i[0].toggle?Sb.applyFormat(e,n,r,o):ub(e,n,r,o)},Ib=function(e){e.addShortcut("meta+b","","Bold"),e.addShortcut("meta+i","","Italic"),e.addShortcut("meta+u","","Underline");for(var t=1;t<=6;t++)e.addShortcut("access+"+t,"",["FormatBlock",!1,"h"+t]);e.addShortcut("access+7","",["FormatBlock",!1,"p"]),e.addShortcut("access+8","",["FormatBlock",!1,"div"]),e.addShortcut("access+9","",["FormatBlock",!1,"address"])};function Mb(e){var t,n,r,o=(t=e,n={},(r=function(e,t){e&&("string"!=typeof e?Yt.each(e,function(e,t){r(t,e)}):(t=t.length?t:[t],Yt.each(t,function(e){"undefined"==typeof e.deep&&(e.deep=!e.selector),"undefined"==typeof e.split&&(e.split=!e.selector||e.inline),"undefined"==typeof e.remove&&e.selector&&!e.inline&&(e.remove="none"),e.selector&&e.inline&&(e.mixed=!0,e.block_expand=!0),"string"==typeof e.classes&&(e.classes=e.classes.split(/\s+/))}),n[e]=t))})(Ab.get(t.dom)),r(t.settings.formats),{get:function(e){return e?n[e]:n},register:r,unregister:function(e){return e&&n[e]&&delete n[e],n}}),i=Oi(null);return Ib(e),Wv(e),{get:o.get,register:o.register,unregister:o.unregister,apply:b(Sb.applyFormat,e),remove:b(ub,e),toggle:b(Lb,e,o),match:b(Ov.match,e),matchAll:b(Ov.matchAll,e),matchNode:b(Ov.matchNode,e),canApply:b(Ov.canApply,e),formatChanged:b(kb,e,i),getCssText:b(Pb,e)}}var Fb,Ub=Object.prototype.hasOwnProperty,zb=(Fb=function(e,t){return t},function(){for(var e=new Array(arguments.length),t=0;t<e.length;t++)e[t]=arguments[t];if(0===e.length)throw new Error("Can't merge zero objects");for(var n={},r=0;r<e.length;r++){var o=e[r];for(var i in o)Ub.call(o,i)&&(n[i]=Fb(n[i],o[i]))}return n}),Vb={register:function(t,s,c){t.addAttributeFilter("data-mce-tabindex",function(e,t){for(var n,r=e.length;r--;)(n=e[r]).attr("tabindex",n.attributes.map["data-mce-tabindex"]),n.attr(t,null)}),t.addAttributeFilter("src,href,style",function(e,t){for(var n,r,o=e.length,i="data-mce-"+t,a=s.url_converter,u=s.url_converter_scope;o--;)(r=(n=e[o]).attributes.map[i])!==undefined?(n.attr(t,0<r.length?r:null),n.attr(i,null)):(r=n.attributes.map[t],"style"===t?r=c.serializeStyle(c.parseStyle(r),n.name):a&&(r=a.call(u,r,t,n.name)),n.attr(t,0<r.length?r:null))}),t.addAttributeFilter("class",function(e){for(var t,n,r=e.length;r--;)(n=(t=e[r]).attr("class"))&&(n=t.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),t.attr("class",0<n.length?n:null))}),t.addAttributeFilter("data-mce-type",function(e,t,n){for(var r,o=e.length;o--;)"bookmark"!==(r=e[o]).attributes.map["data-mce-type"]||n.cleanup||r.remove()}),t.addNodeFilter("noscript",function(e){for(var t,n=e.length;n--;)(t=e[n].firstChild)&&(t.value=Wo.decode(t.value))}),t.addNodeFilter("script,style",function(e,t){for(var n,r,o,i=e.length,a=function(e){return e.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*((<!--)?(\s*\/\/)?\s*<!\[CDATA\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")};i--;)r=(n=e[i]).firstChild?n.firstChild.value:"","script"===t?((o=n.attr("type"))&&n.attr("type","mce-no/type"===o?null:o.replace(/^mce\-/,"")),"xhtml"===s.element_format&&0<r.length&&(n.firstChild.value="// <![CDATA[\n"+a(r)+"\n// ]]>")):"xhtml"===s.element_format&&0<r.length&&(n.firstChild.value="\x3c!--\n"+a(r)+"\n--\x3e")}),t.addNodeFilter("#comment",function(e){for(var t,n=e.length;n--;)0===(t=e[n]).value.indexOf("[CDATA[")?(t.name="#cdata",t.type=4,t.value=t.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===t.value.indexOf("mce:protected ")&&(t.name="#text",t.type=3,t.raw=!0,t.value=unescape(t.value).substr(14))}),t.addNodeFilter("xml:namespace,input",function(e,t){for(var n,r=e.length;r--;)7===(n=e[r]).type?n.remove():1===n.type&&("input"!==t||"type"in n.attributes.map||n.attr("type","text"))}),t.addAttributeFilter("data-mce-type",function(e){F(e,function(e){"format-caret"===e.attr("data-mce-type")&&(e.isEmpty(t.schema.getNonEmptyElements())?e.remove():e.unwrap())})}),t.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize",function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)})},trimTrailingBr:function(e){var t,n,r=function(e){return e&&"br"===e.name};r(t=e.lastChild)&&r(n=t.prev)&&(t.remove(),n.remove())}},qb={process:function(e,t,n){return f=n,(l=e)&&l.hasEventListeners("PreProcess")&&!f.no_events?(o=t,i=n,c=(r=e).dom,o=o.cloneNode(!0),(a=document.implementation).createHTMLDocument&&(u=a.createHTMLDocument(""),Yt.each("BODY"===o.nodeName?o.childNodes:[o],function(e){u.body.appendChild(u.importNode(e,!0))}),o="BODY"!==o.nodeName?u.body.firstChild:u.body,s=c.doc,c.doc=u),Xg(r,zb(i,{node:o})),s&&(c.doc=s),o):t;var r,o,i,a,u,s,c,l,f}},Hb=function(e,a,u){e.addNodeFilter("font",function(e){F(e,function(e){var t,n=a.parse(e.attr("style")),r=e.attr("color"),o=e.attr("face"),i=e.attr("size");r&&(n.color=r),o&&(n["font-family"]=o),i&&(n["font-size"]=u[parseInt(e.attr("size"),10)-1]),e.name="span",e.attr("style",a.serialize(n)),t=e,F(["color","face","size"],function(e){t.attr(e,null)})})})},jb=function(e,t){var n,r=ii();t.convert_fonts_to_spans&&Hb(e,r,Yt.explode(t.font_size_legacy_values)),n=r,e.addNodeFilter("strike",function(e){F(e,function(e){var t=n.parse(e.attr("style"));t["text-decoration"]="line-through",e.name="span",e.attr("style",n.serialize(t))})})},$b={register:function(e,t){t.inline_styles&&jb(e,t)}},Wb=/^[ \t\r\n]*$/,Kb={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11},Xb=function(e,t,n){var r,o,i=n?"lastChild":"firstChild",a=n?"prev":"next";if(e[i])return e[i];if(e!==t){if(r=e[a])return r;for(o=e.parent;o&&o!==t;o=o.parent)if(r=o[a])return r}},Yb=function(){function a(e,t){this.name=e,1===(this.type=t)&&(this.attributes=[],this.attributes.map={})}return a.create=function(e,t){var n,r;if(n=new a(e,Kb[e]||1),t)for(r in t)n.attr(r,t[r]);return n},a.prototype.replace=function(e){return e.parent&&e.remove(),this.insert(e,this),this.remove(),this},a.prototype.attr=function(e,t){var n,r;if("string"!=typeof e){for(r in e)this.attr(r,e[r]);return this}if(n=this.attributes){if(t!==undefined){if(null===t){if(e in n.map)for(delete n.map[e],r=n.length;r--;)if(n[r].name===e)return n=n.splice(r,1),this;return this}if(e in n.map){for(r=n.length;r--;)if(n[r].name===e){n[r].value=t;break}}else n.push({name:e,value:t});return n.map[e]=t,this}return n.map[e]}},a.prototype.clone=function(){var e,t,n,r,o,i=new a(this.name,this.type);if(n=this.attributes){for((o=[]).map={},e=0,t=n.length;e<t;e++)"id"!==(r=n[e]).name&&(o[o.length]={name:r.name,value:r.value},o.map[r.name]=r.value);i.attributes=o}return i.value=this.value,i.shortEnded=this.shortEnded,i},a.prototype.wrap=function(e){return this.parent.insert(e,this),e.append(this),this},a.prototype.unwrap=function(){var e,t;for(e=this.firstChild;e;)t=e.next,this.insert(e,this,!0),e=t;this.remove()},a.prototype.remove=function(){var e=this.parent,t=this.next,n=this.prev;return e&&(e.firstChild===this?(e.firstChild=t)&&(t.prev=null):n.next=t,e.lastChild===this?(e.lastChild=n)&&(n.next=null):t.prev=n,this.parent=this.next=this.prev=null),this},a.prototype.append=function(e){var t;return e.parent&&e.remove(),(t=this.lastChild)?((t.next=e).prev=t,this.lastChild=e):this.lastChild=this.firstChild=e,e.parent=this,e},a.prototype.insert=function(e,t,n){var r;return e.parent&&e.remove(),r=t.parent||this,n?(t===r.firstChild?r.firstChild=e:t.prev.next=e,e.prev=t.prev,(e.next=t).prev=e):(t===r.lastChild?r.lastChild=e:t.next.prev=e,e.next=t.next,(e.prev=t).next=e),e.parent=r,e},a.prototype.getAll=function(e){var t,n=[];for(t=this.firstChild;t;t=Xb(t,this))t.name===e&&n.push(t);return n},a.prototype.empty=function(){var e,t,n;if(this.firstChild){for(e=[],n=this.firstChild;n;n=Xb(n,this))e.push(n);for(t=e.length;t--;)(n=e[t]).parent=n.firstChild=n.lastChild=n.next=n.prev=null}return this.firstChild=this.lastChild=null,this},a.prototype.isEmpty=function(e,t,n){var r,o,i=this.firstChild;if(t=t||{},i)do{if(1===i.type){if(i.attributes.map["data-mce-bogus"])continue;if(e[i.name])return!1;for(r=i.attributes.length;r--;)if("name"===(o=i.attributes[r].name)||0===o.indexOf("data-mce-bookmark"))return!1}if(8===i.type)return!1;if(3===i.type&&!Wb.test(i.value))return!1;if(3===i.type&&i.parent&&t[i.parent.name]&&Wb.test(i.value))return!1;if(n&&n(i))return!1}while(i=Xb(i,this));return!0},a.prototype.walk=function(e){return Xb(this,null,e)},a}(),Gb=function(e,t,n,r){(e.padd_empty_with_br||t.insert)&&n[r.name]?r.empty().append(new Yb("br",1)).shortEnded=!0:r.empty().append(new Yb("#text",3)).value="\xa0"},Jb=function(e){return Qb(e,"#text")&&"\xa0"===e.firstChild.value},Qb=function(e,t){return e&&e.firstChild&&e.firstChild===e.lastChild&&e.firstChild.name===t},Zb=function(r,e,t,n){return n.isEmpty(e,t,function(e){return t=e,(n=r.getElementRule(t.name))&&n.paddEmpty;var t,n})},ey=function(e,t){return e&&(t[e.name]||"br"===e.name)},ty=function(e,p){var h=e.schema;p.remove_trailing_brs&&e.addNodeFilter("br",function(e,t,n){var r,o,i,a,u,s,c,l,f=e.length,d=Yt.extend({},h.getBlockElements()),m=h.getNonEmptyElements(),g=h.getNonEmptyElements();for(d.body=1,r=0;r<f;r++)if(i=(o=e[r]).parent,d[o.parent.name]&&o===i.lastChild){for(u=o.prev;u;){if("span"!==(s=u.name)||"bookmark"!==u.attr("data-mce-type")){if("br"!==s)break;if("br"===s){o=null;break}}u=u.prev}o&&(o.remove(),Zb(h,m,g,i)&&(c=h.getElementRule(i.name))&&(c.removeEmpty?i.remove():c.paddEmpty&&Gb(p,n,d,i)))}else{for(a=o;i&&i.firstChild===a&&i.lastChild===a&&!d[(a=i).name];)i=i.parent;a===i&&!0!==p.padd_empty_with_br&&((l=new Yb("#text",3)).value="\xa0",o.replace(l))}}),e.addAttributeFilter("href",function(e){var t,n,r,o=e.length;if(!p.allow_unsafe_link_target)for(;o--;)"a"===(t=e[o]).name&&"_blank"===t.attr("target")&&t.attr("rel",(n=t.attr("rel"),r=n?Yt.trim(n):"",/\b(noopener)\b/g.test(r)?r:r.split(" ").filter(function(e){return 0<e.length}).concat(["noopener"]).sort().join(" ")))}),p.allow_html_in_named_anchor||e.addAttributeFilter("id,name",function(e){for(var t,n,r,o,i=e.length;i--;)if("a"===(o=e[i]).name&&o.firstChild&&!o.attr("href"))for(r=o.parent,t=o.lastChild;n=t.prev,r.insert(t,o),t=n;);}),p.fix_list_elements&&e.addNodeFilter("ul,ol",function(e){for(var t,n,r=e.length;r--;)if("ul"===(n=(t=e[r]).parent).name||"ol"===n.name)if(t.prev&&"li"===t.prev.name)t.prev.append(t);else{var o=new Yb("li",1);o.attr("style","list-style-type: none"),t.wrap(o)}}),p.validate&&h.getValidClasses()&&e.addAttributeFilter("class",function(e){for(var t,n,r,o,i,a,u,s=e.length,c=h.getValidClasses();s--;){for(n=(t=e[s]).attr("class").split(" "),i="",r=0;r<n.length;r++)o=n[r],u=!1,(a=c["*"])&&a[o]&&(u=!0),a=c[t.name],!u&&a&&a[o]&&(u=!0),u&&(i&&(i+=" "),i+=o);i.length||(i=null),t.attr("class",i)}})},ny=Yt.makeMap,ry=Yt.each,oy=Yt.explode,iy=Yt.extend;function ay(T,k){void 0===k&&(k=ri());var A={},_=[],R={},D={};(T=T||{}).validate=!("validate"in T)||T.validate,T.root_name=T.root_name||"body";var B=function(e){var t,n,r;n in A&&((r=R[n])?r.push(e):R[n]=[e]),t=_.length;for(;t--;)(n=_[t].name)in e.attributes.map&&((r=D[n])?r.push(e):D[n]=[e]);return e},e={schema:k,addAttributeFilter:function(e,n){ry(oy(e),function(e){var t;for(t=0;t<_.length;t++)if(_[t].name===e)return void _[t].callbacks.push(n);_.push({name:e,callbacks:[n]})})},getAttributeFilters:function(){return[].concat(_)},addNodeFilter:function(e,n){ry(oy(e),function(e){var t=A[e];t||(A[e]=t=[]),t.push(n)})},getNodeFilters:function(){var e=[];for(var t in A)A.hasOwnProperty(t)&&e.push({name:t,callbacks:A[t]});return e},filterNode:B,parse:function(e,a){var t,n,r,o,i,u,s,c,l,f,d,m=[];a=a||{},R={},D={},l=iy(ny("script,style,head,html,body,title,meta,param"),k.getBlockElements());var g=k.getNonEmptyElements(),p=k.children,h=T.validate,v="forced_root_block"in a?a.forced_root_block:T.forced_root_block,b=k.getWhiteSpaceElements(),y=/^[ \t\r\n]+/,C=/[ \t\r\n]+$/,x=/[ \t\r\n]+/g,w=/^[ \t\r\n]+$/;f=b.hasOwnProperty(a.context)||b.hasOwnProperty(T.root_name);var N=function(e,t){var n,r=new Yb(e,t);return e in A&&((n=R[e])?n.push(r):R[e]=[r]),r},E=function(e){var t,n,r,o,i=k.getBlockElements();for(t=e.prev;t&&3===t.type;){if(0<(r=t.value.replace(C,"")).length)return void(t.value=r);if(n=t.next){if(3===n.type&&n.value.length){t=t.prev;continue}if(!i[n.name]&&"script"!==n.name&&"style"!==n.name){t=t.prev;continue}}o=t.prev,t.remove(),t=o}};t=tv({validate:h,allow_script_urls:T.allow_script_urls,allow_conditional_comments:T.allow_conditional_comments,self_closing_elements:function(e){var t,n={};for(t in e)"li"!==t&&"p"!==t&&(n[t]=e[t]);return n}(k.getSelfClosingElements()),cdata:function(e){d.append(N("#cdata",4)).value=e},text:function(e,t){var n;f||(e=e.replace(x," "),ey(d.lastChild,l)&&(e=e.replace(y,""))),0!==e.length&&((n=N("#text",3)).raw=!!t,d.append(n).value=e)},comment:function(e){d.append(N("#comment",8)).value=e},pi:function(e,t){d.append(N(e,7)).value=t,E(d)},doctype:function(e){d.append(N("#doctype",10)).value=e,E(d)},start:function(e,t,n){var r,o,i,a,u;if(i=h?k.getElementRule(e):{}){for((r=N(i.outputName||e,1)).attributes=t,r.shortEnded=n,d.append(r),(u=p[d.name])&&p[r.name]&&!u[r.name]&&m.push(r),o=_.length;o--;)(a=_[o].name)in t.map&&((s=D[a])?s.push(r):D[a]=[r]);l[e]&&E(r),n||(d=r),!f&&b[e]&&(f=!0)}},end:function(e){var t,n,r,o,i;if(n=h?k.getElementRule(e):{}){if(l[e]&&!f){if((t=d.firstChild)&&3===t.type)if(0<(r=t.value.replace(y,"")).length)t.value=r,t=t.next;else for(o=t.next,t.remove(),t=o;t&&3===t.type;)r=t.value,o=t.next,(0===r.length||w.test(r))&&(t.remove(),t=o),t=o;if((t=d.lastChild)&&3===t.type)if(0<(r=t.value.replace(C,"")).length)t.value=r,t=t.prev;else for(o=t.prev,t.remove(),t=o;t&&3===t.type;)r=t.value,o=t.prev,(0===r.length||w.test(r))&&(t.remove(),t=o),t=o}if(f&&b[e]&&(f=!1),n.removeEmpty&&Zb(k,g,b,d)&&!d.attributes.map.name&&!d.attr("id"))return i=d.parent,l[d.name]?d.empty().remove():d.unwrap(),void(d=i);n.paddEmpty&&(Jb(d)||Zb(k,g,b,d))&&Gb(T,a,l,d),d=d.parent}}},k);var S=d=new Yb(a.context||T.root_name,11);if(t.parse(e),h&&m.length&&(a.context?a.invalid=!0:function(e){var t,n,r,o,i,a,u,s,c,l,f,d,m,g,p,h;for(d=ny("tr,td,th,tbody,thead,tfoot,table"),l=k.getNonEmptyElements(),f=k.getWhiteSpaceElements(),m=k.getTextBlockElements(),g=k.getSpecialElements(),t=0;t<e.length;t++)if((n=e[t]).parent&&!n.fixed)if(m[n.name]&&"li"===n.parent.name){for(p=n.next;p&&m[p.name];)p.name="li",p.fixed=!0,n.parent.insert(p,n.parent),p=p.next;n.unwrap(n)}else{for(o=[n],r=n.parent;r&&!k.isValidChild(r.name,n.name)&&!d[r.name];r=r.parent)o.push(r);if(r&&1<o.length){for(o.reverse(),i=a=B(o[0].clone()),c=0;c<o.length-1;c++){for(k.isValidChild(a.name,o[c].name)?(u=B(o[c].clone()),a.append(u)):u=a,s=o[c].firstChild;s&&s!==o[c+1];)h=s.next,u.append(s),s=h;a=u}Zb(k,l,f,i)?r.insert(n,o[0],!0):(r.insert(i,o[0],!0),r.insert(n,i)),r=o[0],(Zb(k,l,f,r)||Qb(r,"br"))&&r.empty().remove()}else if(n.parent){if("li"===n.name){if((p=n.prev)&&("ul"===p.name||"ul"===p.name)){p.append(n);continue}if((p=n.next)&&("ul"===p.name||"ul"===p.name)){p.insert(n,p.firstChild,!0);continue}n.wrap(B(new Yb("ul",1)));continue}k.isValidChild(n.parent.name,"div")&&k.isValidChild("div",n.name)?n.wrap(B(new Yb("div",1))):g[n.name]?n.empty().remove():n.unwrap()}}}(m)),v&&("body"===S.name||a.isRootContent)&&function(){var e,t,n=S.firstChild,r=function(e){e&&((n=e.firstChild)&&3===n.type&&(n.value=n.value.replace(y,"")),(n=e.lastChild)&&3===n.type&&(n.value=n.value.replace(C,"")))};if(k.isValidChild(S.name,v.toLowerCase())){for(;n;)e=n.next,3===n.type||1===n.type&&"p"!==n.name&&!l[n.name]&&!n.attr("data-mce-type")?(t||((t=N(v,1)).attr(T.forced_root_block_attrs),S.insert(t,n)),t.append(n)):(r(t),t=null),n=e;r(t)}}(),!a.invalid){for(c in R){for(s=A[c],i=(n=R[c]).length;i--;)n[i].parent||n.splice(i,1);for(r=0,o=s.length;r<o;r++)s[r](n,c,a)}for(r=0,o=_.length;r<o;r++)if((s=_[r]).name in D){for(i=(n=D[s.name]).length;i--;)n[i].parent||n.splice(i,1);for(i=0,u=s.callbacks.length;i<u;i++)s.callbacks[i](n,s.name,a)}}return S}};return ty(e,T),$b.register(e,T),e}var uy=function(e,t,n){-1===Yt.inArray(t,n)&&(e.addAttributeFilter(n,function(e,t){for(var n=e.length;n--;)e[n].attr(t,null)}),t.push(n))},sy=function(e,t,n){var r=Ta(n.getInner?t.innerHTML:e.getOuterHTML(t));return n.selection||xo(er.fromDom(t))?r:Yt.trim(r)},cy=function(e,t,n){var r=n.selection?zb({forced_root_block:!1},n):n,o=e.parse(t,r);return Vb.trimTrailingBr(o),o},ly=function(e,t,n,r,o){var i,a,u,s,c=(i=r,of(t,n).serialize(i));return a=e,s=c,!(u=o).no_events&&a?Yg(a,zb(u,{content:s})).content:s};function fy(e,t){var a,u,s,c,l,n,r=(a=e,n=["data-mce-selected"],s=(u=t)&&u.dom?u.dom:hi.DOM,c=u&&u.schema?u.schema:ri(a),a.entity_encoding=a.entity_encoding||"named",a.remove_trailing_brs=!("remove_trailing_brs"in a)||a.remove_trailing_brs,l=ay(a,c),Vb.register(l,a,s),{schema:c,addNodeFilter:l.addNodeFilter,addAttributeFilter:l.addAttributeFilter,serialize:function(e,t){var n=zb({format:"html"},t||{}),r=qb.process(u,e,n),o=sy(s,r,n),i=cy(l,o,n);return"tree"===n.format?i:ly(u,a,c,i,n)},addRules:function(e){c.addValidElements(e)},setRules:function(e){c.setValidElements(e)},addTempAttr:b(uy,l,n),getTempAttrs:function(){return n}});return{schema:r.schema,addNodeFilter:r.addNodeFilter,addAttributeFilter:r.addAttributeFilter,serialize:r.serialize,addRules:r.addRules,setRules:r.setRules,addTempAttr:r.addTempAttr,getTempAttrs:r.getTempAttrs}}function dy(e){return{getBookmark:b(gl,e),moveToBookmark:b(pl,e)}}(dy||(dy={})).isBookmarkNode=hl;var my=dy,gy=Bo.isContentEditableFalse,py=Bo.isContentEditableTrue,hy=function(r,a){var u,s,c,l,f,d,m,g,p,h,v,b,i,y,C,x,w,N=a.dom,E=Yt.each,S=a.getDoc(),T=document,k=Math.abs,A=Math.round,_=a.getBody();l={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var e=".mce-content-body";a.contentStyles.push(e+" div.mce-resizehandle {position: absolute;border: 1px solid black;box-sizing: content-box;background: #FFF;width: 7px;height: 7px;z-index: 10000}"+e+" .mce-resizehandle:hover {background: #000}"+e+" img[data-mce-selected],"+e+" hr[data-mce-selected] {outline: 1px solid black;resize: none}"+e+" .mce-clonedresizable {position: absolute;"+(Re.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"+e+" .mce-resize-helper {background: #555;background: rgba(0,0,0,0.75);border-radius: 3px;border: 1px;color: white;display: none;font-family: sans-serif;font-size: 12px;white-space: nowrap;line-height: 14px;margin: 5px 10px;padding: 5px;position: absolute;z-index: 10001}");var R=function(e){return e&&("IMG"===e.nodeName||a.dom.is(e,"figure.image"))},n=function(e){var t,n,r=e.target;t=e,n=a.selection.getRng(),!R(t.target)||jh(t.clientX,t.clientY,n)||e.isDefaultPrevented()||(e.preventDefault(),a.selection.select(r))},D=function(e){return a.dom.is(e,"figure.image")?e.querySelector("img"):e},B=function(e){var t=a.settings.object_resizing;return!1!==t&&!Re.iOS&&("string"!=typeof t&&(t="table,img,figure.image,div"),"false"!==e.getAttribute("data-mce-resize")&&e!==a.getBody()&&Ir.is(er.fromDom(e),t))},O=function(e){var t,n,r,o;t=e.screenX-d,n=e.screenY-m,y=t*f[2]+h,C=n*f[3]+v,y=y<5?5:y,C=C<5?5:C,(R(u)&&!1!==a.settings.resize_img_proportional?!Wh.modifierPressed(e):Wh.modifierPressed(e)||R(u)&&f[2]*f[3]!=0)&&(k(t)>k(n)?(C=A(y*b),y=A(C/b)):(y=A(C/b),C=A(y*b))),N.setStyles(D(s),{width:y,height:C}),r=0<(r=f.startPos.x+t)?r:0,o=0<(o=f.startPos.y+n)?o:0,N.setStyles(c,{left:r,top:o,display:"block"}),c.innerHTML=y+" × "+C,f[2]<0&&s.clientWidth<=y&&N.setStyle(s,"left",g+(h-y)),f[3]<0&&s.clientHeight<=C&&N.setStyle(s,"top",p+(v-C)),(t=_.scrollWidth-x)+(n=_.scrollHeight-w)!=0&&N.setStyles(c,{left:r-t,top:o-n}),i||(Qg(a,u,h,v),i=!0)},P=function(){i=!1;var e=function(e,t){t&&(u.style[e]||!a.schema.isValid(u.nodeName.toLowerCase(),e)?N.setStyle(D(u),e,t):N.setAttrib(D(u),e,t))};e("width",y),e("height",C),N.unbind(S,"mousemove",O),N.unbind(S,"mouseup",P),T!==S&&(N.unbind(T,"mousemove",O),N.unbind(T,"mouseup",P)),N.remove(s),N.remove(c),o(u),Zg(a,u,y,C),N.setAttrib(u,"style",N.getAttrib(u,"style")),a.nodeChanged()},o=function(e){var t,r,o,n,i;L(),F(),t=N.getPos(e,_),g=t.x,p=t.y,i=e.getBoundingClientRect(),r=i.width||i.right-i.left,o=i.height||i.bottom-i.top,u!==e&&(u=e,y=C=0),n=a.fire("ObjectSelected",{target:e}),B(e)&&!n.isDefaultPrevented()?E(l,function(n,e){var t;(t=N.get("mceResizeHandle"+e))&&N.remove(t),t=N.add(_,"div",{id:"mceResizeHandle"+e,"data-mce-bogus":"all","class":"mce-resizehandle",unselectable:!0,style:"cursor:"+e+"-resize; margin:0; padding:0"}),11===Re.ie&&(t.contentEditable=!1),N.bind(t,"mousedown",function(e){var t;e.stopImmediatePropagation(),e.preventDefault(),d=(t=e).screenX,m=t.screenY,h=D(u).clientWidth,v=D(u).clientHeight,b=v/h,(f=n).startPos={x:r*n[0]+g,y:o*n[1]+p},x=_.scrollWidth,w=_.scrollHeight,s=u.cloneNode(!0),N.addClass(s,"mce-clonedresizable"),N.setAttrib(s,"data-mce-bogus","all"),s.contentEditable=!1,s.unSelectabe=!0,N.setStyles(s,{left:g,top:p,margin:0}),s.removeAttribute("data-mce-selected"),_.appendChild(s),N.bind(S,"mousemove",O),N.bind(S,"mouseup",P),T!==S&&(N.bind(T,"mousemove",O),N.bind(T,"mouseup",P)),c=N.add(_,"div",{"class":"mce-resize-helper","data-mce-bogus":"all"},h+" × "+v)}),n.elm=t,N.setStyles(t,{left:r*n[0]+g-t.offsetWidth/2,top:o*n[1]+p-t.offsetHeight/2})}):L(),u.setAttribute("data-mce-selected","1")},L=function(){var e,t;for(e in F(),u&&u.removeAttribute("data-mce-selected"),l)(t=N.get("mceResizeHandle"+e))&&(N.unbind(t),N.remove(t))},I=function(e){var t,n=function(e,t){if(e)do{if(e===t)return!0}while(e=e.parentNode)};i||a.removed||(E(N.select("img[data-mce-selected],hr[data-mce-selected]"),function(e){e.removeAttribute("data-mce-selected")}),t="mousedown"===e.type?e.target:r.getNode(),n(t=N.$(t).closest("table,img,figure.image,hr")[0],_)&&(U(),n(r.getStart(!0),t)&&n(r.getEnd(!0),t))?o(t):L())},M=function(e){return gy(function(e,t){for(;t&&t!==e;){if(py(t)||gy(t))return t;t=t.parentNode}return null}(a.getBody(),e))},F=function(){for(var e in l){var t=l[e];t.elm&&(N.unbind(t.elm),delete t.elm)}},U=function(){try{a.getDoc().execCommand("enableObjectResizing",!1,!1)}catch(e){}};return a.on("init",function(){U(),Re.ie&&11<=Re.ie&&(a.on("mousedown click",function(e){var t=e.target,n=t.nodeName;i||!/^(TABLE|IMG|HR)$/.test(n)||M(t)||(2!==e.button&&a.selection.select(t,"TABLE"===n),"mousedown"===e.type&&a.nodeChanged())}),a.dom.bind(_,"mscontrolselect",function(e){var t=function(e){Le.setEditorTimeout(a,function(){a.selection.select(e)})};if(M(e.target))return e.preventDefault(),void t(e.target);/^(TABLE|IMG|HR)$/.test(e.target.nodeName)&&(e.preventDefault(),"IMG"===e.target.tagName&&t(e.target))}));var t=Le.throttle(function(e){a.composing||I(e)});a.on("nodechange ResizeEditor ResizeWindow drop FullscreenStateChanged",t),a.on("keyup compositionend",function(e){u&&"TABLE"===u.nodeName&&t(e)}),a.on("hide blur",L),a.on("contextmenu",n)}),a.on("remove",F),{isResizable:B,showResizeRect:o,hideResizeRect:L,updateResizeRect:I,destroy:function(){u=s=null}}},vy=function(e){return Bo.isContentEditableTrue(e)||Bo.isContentEditableFalse(e)},by=function(e,t,n){var r,o,i,a,u,s=n;if(s.caretPositionFromPoint)(o=s.caretPositionFromPoint(e,t))&&((r=n.createRange()).setStart(o.offsetNode,o.offset),r.collapse(!0));else if(n.caretRangeFromPoint)r=n.caretRangeFromPoint(e,t);else if(s.body.createTextRange){r=s.body.createTextRange();try{r.moveToPoint(e,t),r.collapse(!0)}catch(c){r=function(e,n,t){var r,o,i;if(r=t.elementFromPoint(e,n),o=t.body.createTextRange(),r&&"HTML"!==r.tagName||(r=t.body),o.moveToElementText(r),0<(i=(i=Yt.toArray(o.getClientRects())).sort(function(e,t){return(e=Math.abs(Math.max(e.top-n,e.bottom-n)))-(t=Math.abs(Math.max(t.top-n,t.bottom-n)))})).length){n=(i[0].bottom+i[0].top)/2;try{return o.moveToPoint(e,n),o.collapse(!0),o}catch(a){}}return null}(e,t,n)}return i=r,a=n.body,u=i&&i.parentElement?i.parentElement():null,Bo.isContentEditableFalse(function(e,t,n){for(;e&&e!==t;){if(n(e))return e;e=e.parentNode}return null}(u,a,vy))?null:i}return r},yy=function(n,e){return $(e,function(e){var t=n.fire("GetSelectionRange",{range:e});return t.range!==e?t.range:e})},Cy=function(e,t){var n=(t||document).createDocumentFragment();return F(e,function(e){n.appendChild(e.dom())}),er.fromDom(n)},xy=Ar("element","width","rows"),wy=Ar("element","cells"),Ny=Ar("x","y"),Ey=function(e,t){var n=parseInt(vr.get(e,t),10);return isNaN(n)?1:n},Sy=function(e){return z(e,function(e,t){return t.cells().length>e?t.cells().length:e},0)},Ty=function(e,t){for(var n=e.rows(),r=0;r<n.length;r++)for(var o=n[r].cells(),i=0;i<o.length;i++)if(Ur.eq(o[i],t))return A.some(Ny(i,r));return A.none()},ky=function(e,t,n,r,o){for(var i=[],a=e.rows(),u=n;u<=o;u++){var s=a[u].cells(),c=t<r?s.slice(t,r+1):s.slice(r,t+1);i.push(wy(a[u].element(),c))}return i},Ay=function(e){var o=xy(ba(e),0,[]);return F(Xi(e,"tr"),function(n,r){F(Xi(n,"td,th"),function(e,t){!function(e,t,n,r,o){for(var i=Ey(o,"rowspan"),a=Ey(o,"colspan"),u=e.rows(),s=n;s<n+i;s++){u[s]||(u[s]=wy(ya(r),[]));for(var c=t;c<t+a;c++)u[s].cells()[c]=s===n&&c===t?o:ba(o)}}(o,function(e,t,n){for(;r=t,o=n,i=void 0,((i=e.rows())[o]?i[o].cells():[])[r];)t++;var r,o,i;return t}(o,t,r),r,n,e)})}),xy(o.element(),Sy(o.rows()),o.rows())},_y=function(e){return n=$((t=e).rows(),function(e){var t=$(e.cells(),function(e){var t=ya(e);return vr.remove(t,"colspan"),vr.remove(t,"rowspan"),t}),n=ba(e.element());return _i(n,t),n}),r=ba(t.element()),o=er.fromTag("tbody"),_i(o,n),ki.append(r,o),r;var t,n,r,o},Ry=function(l,e,t){return Ty(l,e).bind(function(c){return Ty(l,t).map(function(e){return t=l,r=e,o=(n=c).x(),i=n.y(),a=r.x(),u=r.y(),s=i<u?ky(t,o,i,a,u):ky(t,o,u,a,i),xy(t.element(),Sy(s),s);var t,n,r,o,i,a,u,s})})},Dy=function(n,t){return V(n,function(e){return"li"===sr.name(e)&&gh(e,t)}).fold(H([]),function(e){return(t=n,V(t,function(e){return"ul"===sr.name(e)||"ol"===sr.name(e)})).map(function(e){return[er.fromTag("li"),er.fromTag(sr.name(e))]}).getOr([]);var t})},By=function(e,t){var n,r=er.fromDom(t.commonAncestorContainer),o=jf(r,e),i=U(o,function(e){return mo(e)||lo(e)}),a=Dy(o,t),u=i.concat(a.length?a:vo(n=r)?Wr.parent(n).filter(ho).fold(H([]),function(e){return[n,e]}):ho(n)?[n]:[]);return $(u,ba)},Oy=function(){return Cy([])},Py=function(e,t){return n=er.fromDom(t.cloneContents()),r=By(e,t),o=z(r,function(e,t){return ki.append(t,e),t},n),0<r.length?Cy([o]):o;var n,r,o},Ly=function(e,o){return(t=e,n=o[0],na(n,"table",b(Ur.eq,t))).bind(function(e){var t=o[0],n=o[o.length-1],r=Ay(e);return Ry(r,t,n).map(function(e){return Cy([_y(e)])})}).getOrThunk(Oy);var t,n},Iy=function(e,t){var n,r,o=Om(t,e);return 0<o.length?Ly(e,o):(n=e,0<(r=t).length&&r[0].collapsed?Oy():Py(n,r[0]))},My=function(e,t){var n,r=e.selection.getRng(),o=e.dom.create("body"),i=e.selection.getSel(),a=yy(e,km(i));if((t=t||{}).get=!0,t.format=t.format||"html",t.selection=!0,(t=e.fire("BeforeGetContent",t)).isDefaultPrevented())return e.fire("GetContent",t),t.content;if("text"===t.format)return e.selection.isCollapsed()?"":Ta(r.text||(i.toString?i.toString():""));r.cloneContents?(n=t.contextual?Iy(er.fromDom(e.getBody()),a).dom():r.cloneContents())&&o.appendChild(n):r.item!==undefined||r.htmlText!==undefined?(o.innerHTML="<br>"+(r.item?r.item(0).outerHTML:r.htmlText),o.removeChild(o.firstChild)):o.innerHTML=r.toString(),t.getInner=!0;var u=e.selection.serializer.serialize(o,t);return"tree"===t.format?u:(t.content=e.selection.isCollapsed()?"":u,e.fire("GetContent",t),t.content)},Fy=function(e,t,n){var r,o,i,a=e.selection.getRng(),u=e.getDoc();if((n=n||{format:"html"}).set=!0,n.selection=!0,n.content=t,n.no_events||!(n=e.fire("BeforeSetContent",n)).isDefaultPrevented()){if(t=n.content,a.insertNode){t+='<span id="__caret">_</span>',a.startContainer===u&&a.endContainer===u?u.body.innerHTML=t:(a.deleteContents(),0===u.body.childNodes.length?u.body.innerHTML=t:a.createContextualFragment?a.insertNode(a.createContextualFragment(t)):(o=u.createDocumentFragment(),i=u.createElement("div"),o.appendChild(i),i.outerHTML=t,a.insertNode(o))),r=e.dom.get("__caret"),(a=u.createRange()).setStartBefore(r),a.setEndBefore(r),e.selection.setRng(a),e.dom.remove("__caret");try{e.selection.setRng(a)}catch(s){}}else a.item&&(u.execCommand("Delete",!1,null),a=e.getRng()),/^\s+/.test(t)?(a.pasteHTML('<span id="__mce_tmp">_</span>'+t),e.dom.remove("__mce_tmp")):a.pasteHTML(t);n.no_events||e.fire("SetContent",n)}else e.fire("SetContent",n)},Uy=function(e,t,n,r,o){var i=n?t.startContainer:t.endContainer,a=n?t.startOffset:t.endOffset;return A.from(i).map(er.fromDom).map(function(e){return r&&t.collapsed?e:Wr.child(e,o(e,a)).getOr(e)}).bind(function(e){return sr.isElement(e)?A.some(e):Wr.parent(e)}).map(function(e){return e.dom()}).getOr(e)},zy=function(e,t,n){return Uy(e,t,!0,n,function(e,t){return Math.min(Wr.childNodesCount(e),t)})},Vy=function(e,t,n){return Uy(e,t,!1,n,function(e,t){return 0<t?t-1:t})},qy=function(e,t){for(var n=e;e&&Bo.isText(e)&&0===e.length;)e=t?e.nextSibling:e.previousSibling;return e||n},Hy=Yt.each,jy=function(e){return!!e.select},$y=function(e){return!(!e||!e.ownerDocument)&&Ur.contains(er.fromDom(e.ownerDocument),er.fromDom(e))},Wy=function(u,s,e,c){var n,t,l,f,a,r=function(e,t){return Fy(c,e,t)},o=function(e){var t=m();t.collapse(!!e),i(t)},d=function(){return s.getSelection?s.getSelection():s.document.selection},m=function(){var e,t,n,r,o=function(e,t,n){try{return t.compareBoundaryPoints(e,n)}catch(r){return-1}};if(!s)return null;if(null==(r=s.document))return null;if(c.bookmark!==undefined&&!1===Ep(c)){var i=Ig(c);if(i.isSome())return i.map(function(e){return yy(c,[e])[0]}).getOr(r.createRange())}try{(e=d())&&(t=0<e.rangeCount?e.getRangeAt(0):e.createRange?e.createRange():r.createRange())}catch(a){}return(t=yy(c,[t])[0])||(t=r.createRange?r.createRange():r.body.createTextRange()),t.setStart&&9===t.startContainer.nodeType&&t.collapsed&&(n=u.getRoot(),t.setStart(n,0),t.setEnd(n,0)),l&&f&&(0===o(t.START_TO_START,t,l)&&0===o(t.END_TO_END,t,l)?t=f:f=l=null),t},i=function(e,t){var n,r;if((o=e)&&(jy(o)||$y(o.startContainer)&&$y(o.endContainer))){var o,i=jy(e)?e:null;if(i){f=null;try{i.select()}catch(a){}}else{if(n=d(),e=c.fire("SetSelectionRange",{range:e,forward:t}).range,n){f=e;try{n.removeAllRanges(),n.addRange(e)}catch(a){}!1===t&&n.extend&&(n.collapse(e.endContainer,e.endOffset),n.extend(e.startContainer,e.startOffset)),l=0<n.rangeCount?n.getRangeAt(0):null}e.collapsed||e.startContainer!==e.endContainer||!n.setBaseAndExtent||Re.ie||e.endOffset-e.startOffset<2&&e.startContainer.hasChildNodes()&&(r=e.startContainer.childNodes[e.startOffset])&&"IMG"===r.tagName&&(n.setBaseAndExtent(e.startContainer,e.startOffset,e.endContainer,e.endOffset),n.anchorNode===e.startContainer&&n.focusNode===e.endContainer||n.setBaseAndExtent(r,0,r,1)),c.fire("AfterSetSelectionRange",{range:e,forward:t})}}},g=function(){var e,t,n=d();return!(n&&n.anchorNode&&n.focusNode)||((e=u.createRng()).setStart(n.anchorNode,n.anchorOffset),e.collapse(!0),(t=u.createRng()).setStart(n.focusNode,n.focusOffset),t.collapse(!0),e.compareBoundaryPoints(e.START_TO_START,t)<=0)},p={bookmarkManager:null,controlSelection:null,dom:u,win:s,serializer:e,editor:c,collapse:o,setCursorLocation:function(e,t){var n=u.createRng();e?(n.setStart(e,t),n.setEnd(e,t),i(n),o(!1)):(ph(u,n,c.getBody(),!0),i(n))},getContent:function(e){return My(c,e)},setContent:r,getBookmark:function(e,t){return n.getBookmark(e,t)},moveToBookmark:function(e){return n.moveToBookmark(e)},select:function(e,t){var r,n,o;return(r=u,n=e,o=t,A.from(n).map(function(e){var t=r.nodeIndex(e),n=r.createRng();return n.setStart(e.parentNode,t),n.setEnd(e.parentNode,t+1),o&&(ph(r,n,e,!0),ph(r,n,e,!1)),n})).each(i),e},isCollapsed:function(){var e=m(),t=d();return!(!e||e.item)&&(e.compareEndPoints?0===e.compareEndPoints("StartToEnd",e):!t||e.collapsed)},isForward:g,setNode:function(e){return r(u.getOuterHTML(e)),e},getNode:function(){return e=c.getBody(),(t=m())?(r=t.startContainer,o=t.endContainer,i=t.startOffset,a=t.endOffset,n=t.commonAncestorContainer,!t.collapsed&&(r===o&&a-i<2&&r.hasChildNodes()&&(n=r.childNodes[i]),3===r.nodeType&&3===o.nodeType&&(r=r.length===i?qy(r.nextSibling,!0):r.parentNode,o=0===a?qy(o.previousSibling,!1):o.parentNode,r&&r===o))?r:n&&3===n.nodeType?n.parentNode:n):e;var e,t,n,r,o,i,a},getSel:d,setRng:i,getRng:m,getStart:function(e){return zy(c.getBody(),m(),e)},getEnd:function(e){return Vy(c.getBody(),m(),e)},getSelectedBlocks:function(e,t){return function(e,t,n,r){var o,i,a=[];if(i=e.getRoot(),n=e.getParent(n||zy(i,t,!1),e.isBlock),r=e.getParent(r||Vy(i,t,!1),e.isBlock),n&&n!==i&&a.push(n),n&&r&&n!==r)for(var u=new io(o=n,i);(o=u.next())&&o!==r;)e.isBlock(o)&&a.push(o);return r&&n!==r&&r!==i&&a.push(r),a}(u,m(),e,t)},normalize:function(){var e=m(),t=d();if(!_m(t)&&hh(c)){var n=ag(u,e);return n.each(function(e){i(e,g())}),n.getOr(e)}return e},selectorChanged:function(e,t){var i;return a||(a={},i={},c.on("NodeChange",function(e){var n=e.element,r=u.getParents(n,null,u.getRoot()),o={};Hy(a,function(e,n){Hy(r,function(t){if(u.is(t,n))return i[n]||(Hy(e,function(e){e(!0,{node:t,selector:n,parents:r})}),i[n]=e),o[n]=e,!1})}),Hy(i,function(e,t){o[t]||(delete i[t],Hy(e,function(e){e(!1,{node:n,selector:t,parents:r})}))})})),a[e]||(a[e]=[]),a[e].push(t),p},getScrollContainer:function(){for(var e,t=u.getRoot();t&&"BODY"!==t.nodeName;){if(t.scrollHeight>t.clientHeight){e=t;break}t=t.parentNode}return e},scrollIntoView:function(e,t){return Ks(c,e,t)},placeCaretAt:function(e,t){return i(by(e,t,c.getDoc()))},getBoundingClientRect:function(){var e=m();return e.collapsed?Au.fromRangeStart(e).getClientRects()[0]:e.getBoundingClientRect()},destroy:function(){s=l=f=null,t.destroy()}};return n=my(p),t=hy(p,c),p.bookmarkManager=n,p.controlSelection=t,p},Ky=Bo.isContentEditableFalse,Xy=nu,Yy=Jc,Gy=Gc,Jy=function(e,t){for(;t=e(t);)if(t.isVisible())return t;return t},Qy=function(e,t,n,r){var o,i,a,u,s,c,l=e===Tu.Forwards,f=l?Gy:Yy;return!r.collapsed&&(o=Xy(r),Ky(o))?ls(e,t,o,e===Tu.Backwards,!0):(u=_a(r.startContainer),f(i=Yc(e,t.getBody(),r))?fs(t,i.getNode(!l)):(i=n(i))?f(i)?ls(e,t,i.getNode(!l),l,!0):f(a=n(i))&&(!(c=Uc(s=i,a))&&Bo.isBr(s.getNode())||c)?ls(e,t,a.getNode(!l),l,!0):u?ms(t,i.toRange(),!0):null:u?r:null)},Zy=function(e,t,n,r){var o,i,a,u,s,c,l,f,d;if(d=Xy(r),o=Yc(e,t.getBody(),r),i=n(t.getBody(),Ph(1),o),a=jt.filter(i,Lh(1)),s=jt.last(o.getClientRects()),(Gy(o)||Qc(o))&&(d=o.getNode()),(Yy(o)||Zc(o))&&(d=o.getNode(!0)),!s)return null;if(c=s.left,(u=Vh(a,c))&&Ky(u.node))return l=Math.abs(c-u.left),f=Math.abs(c-u.right),ls(e,t,u.node,l<f,!0);if(d){var m=function(e,t,n,r){var o,i,a,u,s,c,l=Ts(t),f=[],d=0,m=function(e){return jt.last(e.getClientRects())};1===e?(o=l.next,i=tu,a=eu,u=Au.after(r)):(o=l.prev,i=eu,a=tu,u=Au.before(r)),c=m(u);do{if(u.isVisible()&&!a(s=m(u),c)){if(0<f.length&&i(s,jt.last(f))&&d++,(s=Ja(s)).position=u,s.line=d,n(s))return f;f.push(s)}}while(u=o(u));return f}(e,t.getBody(),Ph(1),d);if(u=Vh(jt.filter(m,Lh(1)),c))return ms(t,u.position.toRange(),!0);if(u=jt.last(jt.filter(m,Lh(0))))return ms(t,u.position.toRange(),!0)}},eC=function(e,t,n){var r,o,i,a,u=Ts(e.getBody()),s=wa.curry(Jy,u.next),c=wa.curry(Jy,u.prev);if(n.collapsed&&e.settings.forced_root_block){if(!(r=e.dom.getParent(n.startContainer,"PRE")))return;(1===t?s(Au.fromRangeStart(n)):c(Au.fromRangeStart(n)))||(a=(i=e).dom.create(i.settings.forced_root_block),(!Re.ie||11<=Re.ie)&&(a.innerHTML='<br data-mce-bogus="1">'),o=a,1===t?e.$(r).after(o):e.$(r).before(o),e.selection.select(o,!0),e.selection.collapse())}},tC=function(l,f){return function(){var e,t,n,r,o,i,a,u,s,c=(t=f,r=Ts((e=l).getBody()),o=wa.curry(Jy,r.next),i=wa.curry(Jy,r.prev),a=t?Tu.Forwards:Tu.Backwards,u=t?o:i,s=e.selection.getRng(),(n=Qy(a,e,u,s))?n:(n=eC(e,a,s))||null);return!!c&&(l.selection.setRng(c),!0)}},nC=function(u,s){return function(){var e,t,n,r,o,i,a=(r=(t=s)?1:-1,o=t?Oh:Bh,i=(e=u).selection.getRng(),(n=Zy(r,e,o,i))?n:(n=eC(e,r,i))||null);return!!a&&(u.selection.setRng(a),!0)}},rC=function(e,r){return G($(e,function(e){return zb({shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,keyCode:0,action:v},e)}),function(e){return t=e,(n=r).keyCode===t.keyCode&&n.shiftKey===t.shiftKey&&n.altKey===t.altKey&&n.ctrlKey===t.ctrlKey&&n.metaKey===t.metaKey?[e]:[];var t,n})},oC=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,r)}},iC=function(e,t){return V(rC(e,t),function(e){return e.action()})},aC=function(i,a){i.on("keydown",function(e){var t,n,r,o;!1===e.isDefaultPrevented()&&(t=i,n=a,r=e,o=Qn.detect().os,iC([{keyCode:Wh.RIGHT,action:tC(t,!0)},{keyCode:Wh.LEFT,action:tC(t,!1)},{keyCode:Wh.UP,action:nC(t,!1)},{keyCode:Wh.DOWN,action:nC(t,!0)},{keyCode:Wh.RIGHT,action:xc(t,!0)},{keyCode:Wh.LEFT,action:xc(t,!1)},{keyCode:Wh.UP,action:wc(t,!1)},{keyCode:Wh.DOWN,action:wc(t,!0)},{keyCode:Wh.RIGHT,action:um.move(t,n,!0)},{keyCode:Wh.LEFT,action:um.move(t,n,!1)},{keyCode:Wh.RIGHT,ctrlKey:!o.isOSX(),altKey:o.isOSX(),action:um.moveNextWord(t,n)},{keyCode:Wh.LEFT,ctrlKey:!o.isOSX(),altKey:o.isOSX(),action:um.movePrevWord(t,n)}],r).each(function(e){r.preventDefault()}))})},uC=function(e){return 1===Wr.children(e).length},sC=function(e,t,n,r){var o,i,a,u,s=b(Kv,t),c=$(U(r,s),function(e){return e.dom()});if(0===c.length)hd(t,e,n);else{var l=(o=n.dom(),i=c,a=zv(!1),u=$v(i,a.dom()),ki.before(er.fromDom(o),a),Di.remove(er.fromDom(o)),Au(u,0));t.selection.setRng(l.toRange())}},cC=function(n,r){var t,e=er.fromDom(n.getBody()),o=er.fromDom(n.selection.getStart()),i=U((t=jf(o,e),K(t,fo).fold(H(t),function(e){return t.slice(0,e)})),uC);return te(i).map(function(e){var t=Au.fromRangeStart(n.selection.getRng());return!!Af(r,t,e.dom())&&(sC(r,n,e,i),!0)}).getOr(!1)},lC=function(e,t){return!!e.selection.isCollapsed()&&cC(e,t)},fC=function(o,i){o.on("keydown",function(e){var t,n,r;!1===e.isDefaultPrevented()&&(t=o,n=i,r=e,iC([{keyCode:Wh.BACKSPACE,action:oC(yd,t,!1)},{keyCode:Wh.DELETE,action:oC(yd,t,!0)},{keyCode:Wh.BACKSPACE,action:oC(fm,t,n,!1)},{keyCode:Wh.DELETE,action:oC(fm,t,n,!0)},{keyCode:Wh.BACKSPACE,action:oC(jm,t,!1)},{keyCode:Wh.DELETE,action:oC(jm,t,!0)},{keyCode:Wh.BACKSPACE,action:oC(td,t,!1)},{keyCode:Wh.DELETE,action:oC(td,t,!0)},{keyCode:Wh.BACKSPACE,action:oC(Jf,t,!1)},{keyCode:Wh.DELETE,action:oC(Jf,t,!0)},{keyCode:Wh.BACKSPACE,action:oC(lC,t,!1)},{keyCode:Wh.DELETE,action:oC(lC,t,!0)}],r).each(function(e){r.preventDefault()}))}),o.on("keyup",function(e){var t,n;!1===e.isDefaultPrevented()&&(t=o,n=e,iC([{keyCode:Wh.BACKSPACE,action:oC(Cd,t)},{keyCode:Wh.DELETE,action:oC(Cd,t)}],n))})},dC=function(e){return A.from(e.dom.getParent(e.selection.getStart(!0),e.dom.isBlock))},mC=function(e,t){var n,r,o,i=t,a=e.dom,u=e.schema.getMoveCaretBeforeOnEnterElements();if(t){if(/^(LI|DT|DD)$/.test(t.nodeName)){var s=function(e){for(;e;){if(1===e.nodeType||3===e.nodeType&&e.data&&/[\r\n\s]/.test(e.data))return e;e=e.nextSibling}}(t.firstChild);s&&/^(UL|OL|DL)$/.test(s.nodeName)&&t.insertBefore(a.doc.createTextNode("\xa0"),t.firstChild)}if(o=a.createRng(),t.normalize(),t.hasChildNodes()){for(n=new io(t,t);r=n.current();){if(Bo.isText(r)){o.setStart(r,0),o.setEnd(r,0);break}if(u[r.nodeName.toLowerCase()]){o.setStartBefore(r),o.setEndBefore(r);break}i=r,r=n.next()}r||(o.setStart(i,0),o.setEnd(i,0))}else Bo.isBr(t)?t.nextSibling&&a.isBlock(t.nextSibling)?(o.setStartBefore(t),o.setEndBefore(t)):(o.setStartAfter(t),o.setEndAfter(t)):(o.setStart(t,0),o.setEnd(t,0));e.selection.setRng(o),a.remove(void 0),e.selection.scrollIntoView(t)}},gC=function(e,t){var n,r,o=e.getRoot();for(n=t;n!==o&&"false"!==e.getContentEditable(n);)"true"===e.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==o?r:o},pC=dC,hC=function(e){return dC(e).fold(H(""),function(e){return e.nodeName.toUpperCase()})},vC=function(e){return dC(e).filter(function(e){return vo(er.fromDom(e))}).isSome()},bC=function(e,t){return e&&e.parentNode&&e.parentNode.nodeName===t},yC=function(e){return e&&/^(OL|UL|LI)$/.test(e.nodeName)},CC=function(e){var t=e.parentNode;return/^(LI|DT|DD)$/.test(t.nodeName)?t:e},xC=function(e,t,n){for(var r=e[n?"firstChild":"lastChild"];r&&!Bo.isElement(r);)r=r[n?"nextSibling":"previousSibling"];return r===t},wC=function(e,t,n,r,o){var i=e.dom,a=e.selection.getRng();if(n!==e.getBody()){var u;yC(u=n)&&yC(u.parentNode)&&(o="LI");var s,c,l=o?t(o):i.create("BR");if(xC(n,r,!0)&&xC(n,r,!1))bC(n,"LI")?i.insertAfter(l,CC(n)):i.replace(l,n);else if(xC(n,r,!0))bC(n,"LI")?(i.insertAfter(l,CC(n)),l.appendChild(i.doc.createTextNode(" ")),l.appendChild(n)):n.parentNode.insertBefore(l,n);else if(xC(n,r,!1))i.insertAfter(l,CC(n));else{n=CC(n);var f=a.cloneRange();f.setStartAfter(r),f.setEndAfter(n);var d=f.extractContents();"LI"===o&&(c="LI",(s=d).firstChild&&s.firstChild.nodeName===c)?(l=d.firstChild,i.insertAfter(d,n)):(i.insertAfter(d,n),i.insertAfter(l,n))}i.remove(r),mC(e,l)}},NC=function(e){e.innerHTML='<br data-mce-bogus="1">'},EC=function(e,t){return e.nodeName===t||e.previousSibling&&e.previousSibling.nodeName===t},SC=function(e,t){return t&&e.isBlock(t)&&!/^(TD|TH|CAPTION|FORM)$/.test(t.nodeName)&&!/^(fixed|absolute)/i.test(t.style.position)&&"true"!==e.getContentEditable(t)},TC=function(e,t,n){return!1===Bo.isText(t)?n:e?1===n&&t.data.charAt(n-1)===Sa?0:n:n===t.data.length-1&&t.data.charAt(n)===Sa?t.data.length:n},kC=function(e,t){var n,r,o=e.getRoot();for(n=t;n!==o&&"false"!==e.getContentEditable(n);)"true"===e.getContentEditable(n)&&(r=n),n=n.parentNode;return n!==o?r:o},AC=function(e,t){var n=rc(e);n&&n.toLowerCase()===t.tagName.toLowerCase()&&e.dom.setAttribs(t,oc(e))},_C=function(a,e){var t,u,s,i,c,n,r,o,l,f,d,m,g,p,h,v,b,y,C=a.dom,x=a.schema,w=x.getNonEmptyElements(),N=a.selection.getRng(),E=function(e){var t,n,r,o=s,i=x.getTextInlineElements();if(e||"TABLE"===f||"HR"===f?(t=C.create(e||m),AC(a,t)):t=c.cloneNode(!1),r=t,!1===uc(a))C.setAttrib(t,"style",null),C.setAttrib(t,"class",null);else do{if(i[o.nodeName]){if(Gu(o))continue;n=o.cloneNode(!1),C.setAttrib(n,"id",""),t.hasChildNodes()?n.appendChild(t.firstChild):r=n,t.appendChild(n)}}while((o=o.parentNode)&&o!==u);return NC(r),t},S=function(e){var t,n,r,o;if(o=TC(e,s,i),Bo.isText(s)&&(e?0<o:o<s.nodeValue.length))return!1;if(s.parentNode===c&&g&&!e)return!0;if(e&&Bo.isElement(s)&&s===c.firstChild)return!0;if(EC(s,"TABLE")||EC(s,"HR"))return g&&!e||!g&&e;for(t=new io(s,c),Bo.isText(s)&&(e&&0===o?t.prev():e||o!==s.nodeValue.length||t.next());n=t.current();){if(Bo.isElement(n)){if(!n.getAttribute("data-mce-bogus")&&(r=n.nodeName.toLowerCase(),w[r]&&"br"!==r))return!1}else if(Bo.isText(n)&&!/^[ \t\r\n]*$/.test(n.nodeValue))return!1;e?t.prev():t.next()}return!0},T=function(){r=/^(H[1-6]|PRE|FIGURE)$/.test(f)&&"HGROUP"!==d?E(m):E(),sc(a)&&SC(C,l)&&C.isEmpty(c)?r=C.split(l,c):C.insertAfter(r,c),mC(a,r)};ag(C,N).each(function(e){N.setStart(e.startContainer,e.startOffset),N.setEnd(e.endContainer,e.endOffset)}),s=N.startContainer,i=N.startOffset,m=rc(a),n=e.shiftKey,Bo.isElement(s)&&s.hasChildNodes()&&(g=i>s.childNodes.length-1,s=s.childNodes[Math.min(i,s.childNodes.length-1)]||s,i=g&&Bo.isText(s)?s.nodeValue.length:0),(u=kC(C,s))&&((m&&!n||!m&&n)&&(s=function(e,t,n,r,o){var i,a,u,s,c,l,f,d=t||"P",m=e.dom,g=kC(m,r);if(!(a=m.getParent(r,m.isBlock))||!SC(m,a)){if(l=(a=a||g)===e.getBody()||(f=a)&&/^(TD|TH|CAPTION)$/.test(f.nodeName)?a.nodeName.toLowerCase():a.parentNode.nodeName.toLowerCase(),!a.hasChildNodes())return i=m.create(d),AC(e,i),a.appendChild(i),n.setStart(i,0),n.setEnd(i,0),i;for(s=r;s.parentNode!==a;)s=s.parentNode;for(;s&&!m.isBlock(s);)s=(u=s).previousSibling;if(u&&e.schema.isValidChild(l,d.toLowerCase())){for(i=m.create(d),AC(e,i),u.parentNode.insertBefore(i,u),s=u;s&&!m.isBlock(s);)c=s.nextSibling,i.appendChild(s),s=c;n.setStart(r,o),n.setEnd(r,o)}}return r}(a,m,N,s,i)),c=C.getParent(s,C.isBlock),l=c?C.getParent(c.parentNode,C.isBlock):null,f=c?c.nodeName.toUpperCase():"","LI"!==(d=l?l.nodeName.toUpperCase():"")||e.ctrlKey||(l=(c=l).parentNode,f=d),/^(LI|DT|DD)$/.test(f)&&C.isEmpty(c)?wC(a,E,l,c,m):m&&c===a.getBody()||(m=m||"P",_a(c)?(r=Fa(c),C.isEmpty(c)&&NC(c),mC(a,r)):S()?T():S(!0)?(r=c.parentNode.insertBefore(E(),c),mC(a,EC(c,"HR")?r:c)):((t=(b=N,y=b.cloneRange(),y.setStart(b.startContainer,TC(!0,b.startContainer,b.startOffset)),y.setEnd(b.endContainer,TC(!1,b.endContainer,b.endOffset)),y).cloneRange()).setEndAfter(c),function(e){for(;Bo.isText(e)&&(e.nodeValue=e.nodeValue.replace(/^[\r\n]+/,"")),e=e.firstChild;);}(o=t.extractContents()),r=o.firstChild,C.insertAfter(o,c),function(e,t,n){var r,o=n,i=[];if(o){for(;o=o.firstChild;){if(e.isBlock(o))return;Bo.isElement(o)&&!t[o.nodeName.toLowerCase()]&&i.push(o)}for(r=i.length;r--;)!(o=i[r]).hasChildNodes()||o.firstChild===o.lastChild&&""===o.firstChild.nodeValue?e.remove(o):(a=o)&&"A"===a.nodeName&&0===Yt.trim(Ta(a.innerText||a.textContent)).length&&e.remove(o);var a}}(C,w,r),p=C,(h=c).normalize(),(v=h.lastChild)&&!/^(left|right)$/gi.test(p.getStyle(v,"float",!0))||p.add(h,"br"),C.isEmpty(c)&&NC(c),r.normalize(),C.isEmpty(r)?(C.remove(r),T()):mC(a,r)),C.setAttrib(r,"id",""),a.fire("NewBlock",{newBlock:r})))},RC=function(e,t){return pC(e).filter(function(e){return 0<t.length&&Ir.is(er.fromDom(e),t)}).isSome()},DC=function(e){return RC(e,ic(e))},BC=function(e){return RC(e,ac(e))},OC=nd([{br:[]},{block:[]},{none:[]}]),PC=function(e,t){return BC(e)},LC=function(n){return function(e,t){return""===rc(e)===n}},IC=function(n){return function(e,t){return vC(e)===n}},MC=function(n,r){return function(e,t){return hC(e)===n.toUpperCase()===r}},FC=function(e){return MC("pre",e)},UC=function(n){return function(e,t){return nc(e)===n}},zC=function(e,t){return DC(e)},VC=function(e,t){return t},qC=function(e){var t=rc(e),n=gC(e.dom,e.selection.getStart());return n&&e.schema.isValidChild(n.nodeName,t||"P")},HC=function(e,t){return function(n,r){return z(e,function(e,t){return e&&t(n,r)},!0)?A.some(t):A.none()}},jC=function(e,t){return Dd([HC([PC],OC.none()),HC([MC("summary",!0)],OC.br()),HC([FC(!0),UC(!1),VC],OC.br()),HC([FC(!0),UC(!1)],OC.block()),HC([FC(!0),UC(!0),VC],OC.block()),HC([FC(!0),UC(!0)],OC.br()),HC([IC(!0),VC],OC.br()),HC([IC(!0)],OC.block()),HC([LC(!0),VC,qC],OC.block()),HC([LC(!0)],OC.br()),HC([zC],OC.br()),HC([LC(!1),VC],OC.br()),HC([qC],OC.block())],[e,t.shiftKey]).getOr(OC.none())},$C=function(e,t){jC(e,t).fold(function(){hg(e,t)},function(){_C(e,t)},v)},WC=function(o){o.on("keydown",function(e){var t,n,r;e.keyCode===Wh.ENTER&&(t=o,(n=e).isDefaultPrevented()||(n.preventDefault(),(r=t.undoManager).typing&&(r.typing=!1,r.add()),t.undoManager.transact(function(){!1===t.selection.isCollapsed()&&t.execCommand("Delete"),$C(t,n)})))})},KC=function(e,t,n){return u=t,!(!XC(n)||!Bo.isText(u.container())||(r=e,i=(o=t).container(),a=o.offset(),i.insertData(a,"\xa0"),r.selection.setCursorLocation(i,a+1),0));var r,o,i,a,u},XC=function(e){return e.fold(H(!1),H(!0),H(!0),H(!1))},YC=function(e){return!!e.selection.isCollapsed()&&(t=e,n=b(Sf.isInlineTarget,t),r=Au.fromRangeStart(t.selection.getRng()),Yd(n,t.getBody(),r).map(b(KC,t,r)).getOr(!1));var t,n,r},GC=function(r){r.on("keydown",function(e){var t,n;!1===e.isDefaultPrevented()&&(t=r,n=e,iC([{keyCode:Wh.SPACEBAR,action:oC(YC,t)}],n).each(function(e){n.preventDefault()}))})},JC=function(e,t){var n;t.hasAttribute("data-mce-caret")&&(Fa(t),(n=e).selection.setRng(n.selection.getRng()),e.selection.scrollIntoView(t))},QC=function(e,t){var n,r=(n=e,ra(er.fromDom(n.getBody()),"*[data-mce-caret]").fold(H(null),function(e){return e.dom()}));if(r)return"compositionstart"===t.type?(t.preventDefault(),t.stopPropagation(),void JC(e,r)):void(Ba(r)&&(JC(e,r),e.undoManager.add()))},ZC=function(e){e.on("keyup compositionstart",b(QC,e))},ex=function(e){var t=um.setupSelectedState(e);ZC(e),aC(e,t),fC(e,t),WC(e),GC(e)};function tx(u){var s,n,r,o=Yt.each,c=Wh.BACKSPACE,l=Wh.DELETE,f=u.dom,d=u.selection,e=u.settings,t=u.parser,i=Re.gecko,a=Re.ie,m=Re.webkit,g="data:text/mce-internal,",p=a?"Text":"URL",h=function(e,t){try{u.getDoc().execCommand(e,!1,t)}catch(n){}},v=function(e){return e.isDefaultPrevented()},b=function(){u.shortcuts.add("meta+a",null,"SelectAll")},y=function(){u.on("keydown",function(e){if(!v(e)&&e.keyCode===c&&d.isCollapsed()&&0===d.getRng().startOffset){var t=d.getNode().previousSibling;if(t&&t.nodeName&&"table"===t.nodeName.toLowerCase())return e.preventDefault(),!1}})},C=function(){u.inline||(u.contentStyles.push("body {min-height: 150px}"),u.on("click",function(e){var t;if("HTML"===e.target.nodeName){if(11<Re.ie)return void u.getBody().focus();t=u.selection.getRng(),u.getBody().focus(),u.selection.setRng(t),u.selection.normalize(),u.nodeChanged()}}))};return u.on("keydown",function(e){var t,n,r,o,i;if(!v(e)&&e.keyCode===Wh.BACKSPACE&&(n=(t=d.getRng()).startContainer,r=t.startOffset,o=f.getRoot(),i=n,t.collapsed&&0===r)){for(;i&&i.parentNode&&i.parentNode.firstChild===i&&i.parentNode!==o;)i=i.parentNode;"BLOCKQUOTE"===i.tagName&&(u.formatter.toggle("blockquote",null,i),(t=f.createRng()).setStart(n,0),t.setEnd(n,0),d.setRng(t))}}),s=function(e){var t=f.create("body"),n=e.cloneContents();return t.appendChild(n),d.serializer.serialize(t,{format:"html"})},u.on("keydown",function(e){var t,n,r,o,i,a=e.keyCode;if(!v(e)&&(a===l||a===c)){if(t=u.selection.isCollapsed(),n=u.getBody(),t&&!f.isEmpty(n))return;if(!t&&(r=u.selection.getRng(),o=s(r),(i=f.createRng()).selectNode(u.getBody()),o!==s(i)))return;e.preventDefault(),u.setContent(""),n.firstChild&&f.isBlock(n.firstChild)?u.selection.setCursorLocation(n.firstChild,0):u.selection.setCursorLocation(n,0),u.nodeChanged()}}),Re.windowsPhone||u.on("keyup focusin mouseup",function(e){Wh.modifierPressed(e)||d.normalize()},!0),m&&(u.settings.content_editable||f.bind(u.getDoc(),"mousedown mouseup",function(e){var t;if(e.target===u.getDoc().documentElement)if(t=d.getRng(),u.getBody().focus(),"mousedown"===e.type){if(Da(t.startContainer))return;d.placeCaretAt(e.clientX,e.clientY)}else d.setRng(t)}),u.on("click",function(e){var t=e.target;/^(IMG|HR)$/.test(t.nodeName)&&"false"!==f.getContentEditableParent(t)&&(e.preventDefault(),u.selection.select(t),u.nodeChanged()),"A"===t.nodeName&&f.hasClass(t,"mce-item-anchor")&&(e.preventDefault(),d.select(t))}),e.forced_root_block&&u.on("init",function(){h("DefaultParagraphSeparator",e.forced_root_block)}),u.on("init",function(){u.dom.bind(u.getBody(),"submit",function(e){e.preventDefault()})}),y(),t.addNodeFilter("br",function(e){for(var t=e.length;t--;)"Apple-interchange-newline"===e[t].attr("class")&&e[t].remove()}),Re.iOS?(u.inline||u.on("keydown",function(){document.activeElement===document.body&&u.getWin().focus()}),C(),u.on("click",function(e){var t=e.target;do{if("A"===t.tagName)return void e.preventDefault()}while(t=t.parentNode)}),u.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")):b()),11<=Re.ie&&(C(),y()),Re.ie&&(b(),h("AutoUrlDetect",!1),u.on("dragstart",function(e){var t,n,r;(t=e).dataTransfer&&(u.selection.isCollapsed()&&"IMG"===t.target.tagName&&d.select(t.target),0<(n=u.selection.getContent()).length&&(r=g+escape(u.id)+","+escape(n),t.dataTransfer.setData(p,r)))}),u.on("drop",function(e){if(!v(e)){var t=(i=e).dataTransfer&&(a=i.dataTransfer.getData(p))&&0<=a.indexOf(g)?(a=a.substr(g.length).split(","),{id:unescape(a[0]),html:unescape(a[1])}):null;if(t&&t.id!==u.id){e.preventDefault();var n=by(e.x,e.y,u.getDoc());d.setRng(n),r=t.html,o=!0,u.queryCommandSupported("mceInsertClipboardContent")?u.execCommand("mceInsertClipboardContent",!1,{content:r,internal:o}):u.execCommand("mceInsertContent",!1,r)}}var r,o,i,a})),i&&(u.on("keydown",function(e){if(!v(e)&&e.keyCode===c){if(!u.getBody().getElementsByTagName("hr").length)return;if(d.isCollapsed()&&0===d.getRng().startOffset){var t=d.getNode(),n=t.previousSibling;if("HR"===t.nodeName)return f.remove(t),void e.preventDefault();n&&n.nodeName&&"hr"===n.nodeName.toLowerCase()&&(f.remove(n),e.preventDefault())}}}),Range.prototype.getClientRects||u.on("mousedown",function(e){if(!v(e)&&"HTML"===e.target.nodeName){var t=u.getBody();t.blur(),Le.setEditorTimeout(u,function(){t.focus()})}}),n=function(){var e=f.getAttribs(d.getStart().cloneNode(!1));return function(){var t=d.getStart();t!==u.getBody()&&(f.setAttrib(t,"style",null),o(e,function(e){t.setAttributeNode(e.cloneNode(!0))}))}},r=function(){return!d.isCollapsed()&&f.getParent(d.getStart(),f.isBlock)!==f.getParent(d.getEnd(),f.isBlock)},u.on("keypress",function(e){var t;if(!v(e)&&(8===e.keyCode||46===e.keyCode)&&r())return t=n(),u.getDoc().execCommand("delete",!1,null),t(),e.preventDefault(),!1}),f.bind(u.getDoc(),"cut",function(e){var t;!v(e)&&r()&&(t=n(),Le.setEditorTimeout(u,function(){t()}))}),e.readonly||u.on("BeforeExecCommand MouseDown",function(){h("StyleWithCSS",!1),h("enableInlineTableEditing",!1),e.object_resizing||h("enableObjectResizing",!1)}),u.on("SetContent ExecCommand",function(e){"setcontent"!==e.type&&"mceInsertLink"!==e.command||o(f.select("a"),function(e){var t=e.parentNode,n=f.getRoot();if(t.lastChild===e){for(;t&&!f.isBlock(t);){if(t.parentNode.lastChild!==t||t===n)return;t=t.parentNode}f.add(t,"br",{"data-mce-bogus":1})}})}),u.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"),Re.mac&&u.on("keydown",function(e){!Wh.metaKeyPressed(e)||e.shiftKey||37!==e.keyCode&&39!==e.keyCode||(e.preventDefault(),u.selection.getSel().modify("move",37===e.keyCode?"backward":"forward","lineboundary"))}),y()),{refreshContentEditable:function(){},isHidden:function(){var e;return!i||u.removed?0:!(e=u.selection.getSel())||!e.rangeCount||0===e.rangeCount}}}var nx=function(e){return Bo.isElement(e)&&po(er.fromDom(e))},rx=function(t){t.on("click",function(e){3===e.detail&&function(e){var t=e.selection.getRng(),n=Su.fromRangeStart(t),r=Su.fromRangeEnd(t);if(Su.isElementPosition(n)){var o=n.container();nx(o)&&al.firstPositionIn(o).each(function(e){return t.setStart(e.container(),e.offset())})}Su.isElementPosition(r)&&(o=n.container(),nx(o)&&al.lastPositionIn(o).each(function(e){return t.setEnd(e.container(),e.offset())})),e.selection.setRng(uf(t))}(t)})},ox=function(e){var t,n;(t=e).on("click",function(e){t.dom.getParent(e.target,"details")&&e.preventDefault()}),(n=e).parser.addNodeFilter("details",function(e){F(e,function(e){e.attr("data-mce-open",e.attr("open")),e.attr("open","open")})}),n.serializer.addNodeFilter("details",function(e){F(e,function(e){var t=e.attr("data-mce-open");e.attr("open",k(t)?t:null),e.attr("data-mce-open",null)})})},ix=hi.DOM,ax=function(e){var t;e.bindPendingEventDelegates(),e.initialized=!0,e.fire("init"),e.focus(!0),e.nodeChanged({initial:!0}),e.execCallback("init_instance_callback",e),(t=e).settings.auto_focus&&Le.setEditorTimeout(t,function(){var e;(e=!0===t.settings.auto_focus?t:t.editorManager.get(t.settings.auto_focus)).destroyed||e.focus()},100)},ux=function(t,e){var n,r,u,o,i,a,s,c,l,f,d,m=t.settings,g=t.getElement(),p=t.getDoc();m.inline||(t.getElement().style.visibility=t.orgVisibility),e||m.content_editable||(p.open(),p.write(t.iframeHTML),p.close()),m.content_editable&&(t.on("remove",function(){var e=this.getBody();ix.removeClass(e,"mce-content-body"),ix.removeClass(e,"mce-edit-focus"),ix.setAttrib(e,"contentEditable",null)}),ix.addClass(g,"mce-content-body"),t.contentDocument=p=m.content_document||document,t.contentWindow=m.content_window||window,t.bodyElement=g,m.content_document=m.content_window=null,m.root_name=g.nodeName.toLowerCase()),(n=t.getBody()).disabled=!0,t.readonly=m.readonly,t.readonly||(t.inline&&"static"===ix.getStyle(n,"position",!0)&&(n.style.position="relative"),n.contentEditable=t.getParam("content_editable_state",!0)),n.disabled=!1,t.editorUpload=uh(t),t.schema=ri(m),t.dom=hi(p,{keep_values:!0,url_converter:t.convertURL,url_converter_scope:t,hex_colors:m.force_hex_style_colors,class_filter:m.class_filter,update_styles:!0,root_element:t.inline?t.getBody():null,collect:m.content_editable,schema:t.schema,onSetAttrib:function(e){t.fire("SetAttrib",e)}}),t.parser=((o=ay((u=t).settings,u.schema)).addAttributeFilter("src,href,style,tabindex",function(e,t){for(var n,r,o,i=e.length,a=u.dom;i--;)if(r=(n=e[i]).attr(t),o="data-mce-"+t,!n.attributes.map[o]){if(0===r.indexOf("data:")||0===r.indexOf("blob:"))continue;"style"===t?((r=a.serializeStyle(a.parseStyle(r),n.name)).length||(r=null),n.attr(o,r),n.attr(t,r)):"tabindex"===t?(n.attr(o,r),n.attr(t,null)):n.attr(o,u.convertURL(r,t,n.name))}}),o.addNodeFilter("script",function(e){for(var t,n,r=e.length;r--;)0!==(n=(t=e[r]).attr("type")||"no/type").indexOf("mce-")&&t.attr("type","mce-"+n)}),o.addNodeFilter("#cdata",function(e){for(var t,n=e.length;n--;)(t=e[n]).type=8,t.name="#comment",t.value="[CDATA["+t.value+"]]"}),o.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(e){for(var t,n=e.length,r=u.schema.getNonEmptyElements();n--;)(t=e[n]).isEmpty(r)&&0===t.getAll("br").length&&(t.append(new Yb("br",1)).shortEnded=!0)}),o),t.serializer=fy(m,t),t.selection=Wy(t.dom,t.getWin(),t.serializer,t),t.experimental=(i=Vl(t),a={},Object.defineProperty(a,"annotator",{get:function(){return console.warn("Using experimental API: annotator"),i}}),a),t.formatter=Mb(t),t.undoManager=Ev(t),t._nodeChangeDispatcher=new vh(t),t._selectionOverrides=Qh(t),ox(t),rx(t),ex(t),fh(t),t.fire("PreInit"),m.browser_spellcheck||m.gecko_spellcheck||(p.body.spellcheck=!1,ix.setAttrib(n,"spellcheck","false")),t.quirks=tx(t),t.fire("PostRender"),m.directionality&&(n.dir=m.directionality),m.nowrap&&(n.style.whiteSpace="nowrap"),m.protect&&t.on("BeforeSetContent",function(t){Yt.each(m.protect,function(e){t.content=t.content.replace(e,function(e){return"\x3c!--mce:protected "+escape(e)+"--\x3e"})})}),t.on("SetContent",function(){t.addVisual(t.getBody())}),t.load({initial:!0,format:"html"}),t.startContent=t.getContent({format:"raw"}),t.on("compositionstart compositionend",function(e){t.composing="compositionstart"===e.type}),0<t.contentStyles.length&&(r="",Yt.each(t.contentStyles,function(e){r+=e+"\r\n"}),t.dom.addStyle(r)),(s=t,s.inline?ix.styleSheetLoader:s.dom.styleSheetLoader).loadAll(t.contentCSS,function(e){ax(t)},function(e){ax(t)}),m.content_style&&(c=t,l=m.content_style,f=er.fromDom(c.getDoc().head),d=er.fromTag("style"),vr.set(d,"type","text/css"),ki.append(d,er.fromText(l)),ki.append(f,d))},sx=hi.DOM,cx=function(e,t){var n,r,o,i,a,u,s,c=e.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),l=(n=e.id,r=c,o=t.height,i=Gs(e),s=er.fromTag("iframe"),vr.setAll(s,i),vr.setAll(s,{id:n+"_ifr",frameBorder:"0",allowTransparency:"true",title:r}),Sr(s,{width:"100%",height:(a=o,u="number"==typeof a?a+"px":a,u||""),display:"block"}),s).dom();l.onload=function(){l.onload=null,e.fire("load")};var f,d,m,g,p=function(e,t){if(document.domain!==window.location.hostname&&Re.ie&&Re.ie<12){var n=ah.uuid("mce");e[n]=function(){ux(e)};var r='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinymce.get("'+e.id+'");document.write(ed.iframeHTML);document.close();ed.'+n+"(true);})()";return sx.setAttrib(t,"src",r),!0}return!1}(e,l);return e.contentAreaContainer=t.iframeContainer,e.iframeElement=l,e.iframeHTML=(g=Js(f=e)+"<html><head>",Qs(f)!==f.documentBaseUrl&&(g+='<base href="'+f.documentBaseURI.getURI()+'" />'),g+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />',d=Zs(f),m=ec(f),tc(f)&&(g+='<meta http-equiv="Content-Security-Policy" content="'+tc(f)+'" />'),g+='</head><body id="'+d+'" class="mce-content-body '+m+'" data-id="'+f.id+'"><br></body></html>'),sx.add(t.iframeContainer,l),p},lx=function(e,t){var n=cx(e,t);t.editorContainer&&(sx.get(t.editorContainer).style.display=e.orgDisplay,e.hidden=sx.isHidden(t.editorContainer)),e.getElement().style.display="none",sx.setAttrib(e.id,"aria-hidden","true"),n||ux(e)},fx=hi.DOM,dx=function(t,n,e){var r,o,i=Hp.get(e);if(r=Hp.urls[e]||t.documentBaseUrl.replace(/\/$/,""),e=Yt.trim(e),i&&-1===Yt.inArray(n,e)){if(Yt.each(Hp.dependencies(e),function(e){dx(t,n,e)}),t.plugins[e])return;o=new i(t,r,t.$),(t.plugins[e]=o).init&&(o.init(t,r),n.push(e))}},mx=function(e){return e.replace(/^\-/,"")},gx=function(e){return{editorContainer:e,iframeContainer:e}},px=function(e){var t,n,r=e.getElement();return e.inline?gx(null):(t=r,n=fx.create("div"),fx.insertAfter(n,t),gx(n))},hx=function(e){var t,n,r,o,i,a,u,s,c,l,f,d=e.settings,m=e.getElement();return e.orgDisplay=m.style.display,k(d.theme)?(l=(o=e).settings,f=o.getElement(),i=l.width||fx.getStyle(f,"width")||"100%",a=l.height||fx.getStyle(f,"height")||f.offsetHeight,u=l.min_height||100,(s=/^[0-9\.]+(|px)$/i).test(""+i)&&(i=Math.max(parseInt(i,10),100)),s.test(""+a)&&(a=Math.max(parseInt(a,10),u)),c=o.theme.renderUI({targetNode:f,width:i,height:a,deltaWidth:l.delta_width,deltaHeight:l.delta_height}),l.content_editable||(a=(c.iframeHeight||a)+("number"==typeof a?c.deltaHeight||0:""))<u&&(a=u),c.height=a,c):O(d.theme)?(r=(t=e).getElement(),(n=t.settings.theme(t,r)).editorContainer.nodeType&&(n.editorContainer.id=n.editorContainer.id||t.id+"_parent"),n.iframeContainer&&n.iframeContainer.nodeType&&(n.iframeContainer.id=n.iframeContainer.id||t.id+"_iframecontainer"),n.height=n.iframeHeight?n.iframeHeight:r.offsetHeight,n):px(e)},vx=function(t){var e,n,r,o,i,a,u=t.settings,s=t.getElement();return t.rtl=u.rtl_ui||t.editorManager.i18n.rtl,t.editorManager.i18n.setCode(u.language),u.aria_label=u.aria_label||fx.getAttrib(s,"aria-label",t.getLang("aria.rich_text_area")),t.fire("ScriptsLoaded"),o=(n=t).settings.theme,k(o)?(n.settings.theme=mx(o),r=jp.get(o),n.theme=new r(n,jp.urls[o]),n.theme.init&&n.theme.init(n,jp.urls[o]||n.documentBaseUrl.replace(/\/$/,""),n.$)):n.theme={},i=t,a=[],Yt.each(i.settings.plugins.split(/[ ,]/),function(e){dx(i,a,mx(e))}),e=hx(t),t.editorContainer=e.editorContainer?e.editorContainer:null,u.content_css&&Yt.each(Yt.explode(u.content_css),function(e){t.contentCSS.push(t.documentBaseURI.toAbsolute(e))}),u.content_editable?ux(t):lx(t,e)},bx=hi.DOM,yx=function(e){return"-"===e.charAt(0)},Cx=function(i,a){var u=xi.ScriptLoader;!function(e,t,n,r){var o=t.settings,i=o.theme;if(k(i)){if(!yx(i)&&!jp.urls.hasOwnProperty(i)){var a=o.theme_url;a?jp.load(i,t.documentBaseURI.toAbsolute(a)):jp.load(i,"themes/"+i+"/theme"+n+".js")}e.loadQueue(function(){jp.waitFor(i,r)})}else r()}(u,i,a,function(){var e,t,n,r,o;e=u,(n=(t=i).settings).language&&"en"!==n.language&&!n.language_url&&(n.language_url=t.editorManager.baseURL+"/langs/"+n.language+".js"),n.language_url&&!t.editorManager.i18n.data[n.language]&&e.add(n.language_url),r=i.settings,o=a,Yt.isArray(r.plugins)&&(r.plugins=r.plugins.join(" ")),Yt.each(r.external_plugins,function(e,t){Hp.load(t,e),r.plugins+=" "+t}),Yt.each(r.plugins.split(/[ ,]/),function(e){if((e=Yt.trim(e))&&!Hp.urls[e])if(yx(e)){e=e.substr(1,e.length);var t=Hp.dependencies(e);Yt.each(t,function(e){var t={prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"};e=Hp.createUrl(t,e),Hp.load(e.resource,e)})}else Hp.load(e,{prefix:"plugins/",resource:e,suffix:"/plugin"+o+".js"})}),u.loadQueue(function(){i.removed||vx(i)},i,function(e){Up(i,e[0]),i.removed||vx(i)})})},xx=function(t){var e=t.settings,n=t.id,r=function(){bx.unbind(window,"ready",r),t.render()};if(je.Event.domLoaded){if(t.getElement()&&Re.contentEditable){e.inline?t.inline=!0:(t.orgVisibility=t.getElement().style.visibility,t.getElement().style.visibility="hidden");var o=t.getElement().form||bx.getParent(n,"form");o&&(t.formElement=o,e.hidden_input&&!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&(bx.insertAfter(bx.create("input",{type:"hidden",name:n}),n),t.hasHiddenInput=!0),t.formEventDelegate=function(e){t.fire(e.type,e)},bx.bind(o,"submit reset",t.formEventDelegate),t.on("reset",function(){t.setContent(t.startContent,{format:"raw"})}),!e.submit_patch||o.submit.nodeType||o.submit.length||o._mceOldSubmit||(o._mceOldSubmit=o.submit,o.submit=function(){return t.editorManager.triggerSave(),t.setDirty(!1),o._mceOldSubmit(o)})),t.windowManager=Pp(t),t.notificationManager=Op(t),"xml"===e.encoding&&t.on("GetContent",function(e){e.save&&(e.content=bx.encode(e.content))}),e.add_form_submit_trigger&&t.on("submit",function(){t.initialized&&t.save()}),e.add_unload_trigger&&(t._beforeUnload=function(){!t.initialized||t.destroyed||t.isHidden()||t.save({format:"raw",no_events:!0,set_dirty:!1})},t.editorManager.on("BeforeUnload",t._beforeUnload)),t.editorManager.add(t),Cx(t,t.suffix)}}else bx.bind(window,"ready",r)},wx=function(e,t,n){var r=e.sidebars?e.sidebars:[];r.push({name:t,settings:n}),e.sidebars=r},Nx=Yt.each,Ex=Yt.trim,Sx="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),Tx={ftp:21,http:80,https:443,mailto:25},kx=function(r,e){var t,n,o=this;if(r=Ex(r),t=(e=o.settings=e||{}).base_uri,/^([\w\-]+):([^\/]{2})/i.test(r)||/^\s*#/.test(r))o.source=r;else{var i=0===r.indexOf("//");0!==r.indexOf("/")||i||(r=(t&&t.protocol||"http")+"://mce_host"+r),/^[\w\-]*:?\/\//.test(r)||(n=e.base_uri?e.base_uri.path:new kx(document.location.href).directory,""==e.base_uri.protocol?r="//mce_host"+o.toAbsPath(n,r):(r=/([^#?]*)([#?]?.*)/.exec(r),r=(t&&t.protocol||"http")+"://mce_host"+o.toAbsPath(n,r[1])+r[2])),r=r.replace(/@@/g,"(mce_at)"),r=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(r),Nx(Sx,function(e,t){var n=r[t];n&&(n=n.replace(/\(mce_at\)/g,"@@")),o[e]=n}),t&&(o.protocol||(o.protocol=t.protocol),o.userInfo||(o.userInfo=t.userInfo),o.port||"mce_host"!==o.host||(o.port=t.port),o.host&&"mce_host"!==o.host||(o.host=t.host),o.source=""),i&&(o.protocol="")}};kx.prototype={setPath:function(e){e=/^(.*?)\/?(\w+)?$/.exec(e),this.path=e[0],this.directory=e[1],this.file=e[2],this.source="",this.getURI()},toRelative:function(e){var t;if("./"===e)return e;if("mce_host"!==(e=new kx(e,{base_uri:this})).host&&this.host!==e.host&&e.host||this.port!==e.port||this.protocol!==e.protocol&&""!==e.protocol)return e.getURI();var n=this.getURI(),r=e.getURI();return n===r||"/"===n.charAt(n.length-1)&&n.substr(0,n.length-1)===r?n:(t=this.toRelPath(this.path,e.path),e.query&&(t+="?"+e.query),e.anchor&&(t+="#"+e.anchor),t)},toAbsolute:function(e,t){return(e=new kx(e,{base_uri:this})).getURI(t&&this.isSameOrigin(e))},isSameOrigin:function(e){if(this.host==e.host&&this.protocol==e.protocol){if(this.port==e.port)return!0;var t=Tx[this.protocol];if(t&&(this.port||t)==(e.port||t))return!0}return!1},toRelPath:function(e,t){var n,r,o,i=0,a="";if(e=(e=e.substring(0,e.lastIndexOf("/"))).split("/"),n=t.split("/"),e.length>=n.length)for(r=0,o=e.length;r<o;r++)if(r>=n.length||e[r]!==n[r]){i=r+1;break}if(e.length<n.length)for(r=0,o=n.length;r<o;r++)if(r>=e.length||e[r]!==n[r]){i=r+1;break}if(1===i)return t;for(r=0,o=e.length-(i-1);r<o;r++)a+="../";for(r=i-1,o=n.length;r<o;r++)a+=r!==i-1?"/"+n[r]:n[r];return a},toAbsPath:function(e,t){var n,r,o,i=0,a=[];for(r=/\/$/.test(t)?"/":"",e=e.split("/"),t=t.split("/"),Nx(e,function(e){e&&a.push(e)}),e=a,n=t.length-1,a=[];0<=n;n--)0!==t[n].length&&"."!==t[n]&&(".."!==t[n]?0<i?i--:a.push(t[n]):i++);return 0!==(o=(n=e.length-i)<=0?a.reverse().join("/"):e.slice(0,n).join("/")+"/"+a.reverse().join("/")).indexOf("/")&&(o="/"+o),r&&o.lastIndexOf("/")!==o.length-1&&(o+=r),o},getURI:function(e){var t,n=this;return n.source&&!e||(t="",e||(n.protocol?t+=n.protocol+"://":t+="//",n.userInfo&&(t+=n.userInfo+"@"),n.host&&(t+=n.host),n.port&&(t+=":"+n.port)),n.path&&(t+=n.path),n.query&&(t+="?"+n.query),n.anchor&&(t+="#"+n.anchor),n.source=t),n.source}},kx.parseDataUri=function(e){var t,n;return e=decodeURIComponent(e).split(","),(n=/data:([^;]+)/.exec(e[0]))&&(t=n[1]),{type:t,data:e[1]}},kx.getDocumentBaseUrl=function(e){var t;return t=0!==e.protocol.indexOf("http")&&"file:"!==e.protocol?e.href:e.protocol+"//"+e.host+e.pathname,/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/")),t};var Ax=function(e,t,n){var r,o,i,a,u;if(t.format=t.format?t.format:"html",t.get=!0,t.getInner=!0,t.no_events||e.fire("BeforeGetContent",t),"raw"===t.format)r=Yt.trim(rv.trimExternal(e.serializer,n.innerHTML));else if("text"===t.format)r=Ta(n.innerText||n.textContent);else{if("tree"===t.format)return e.serializer.serialize(n,t);i=(o=e).serializer.serialize(n,t),a=rc(o),u=new RegExp("^(<"+a+"[^>]*>( | |\\s|\xa0|<br \\/>|)<\\/"+a+">[\r\n]*|<br \\/>[\r\n]*)$"),r=i.replace(u,"")}return"text"===t.format||xo(er.fromDom(n))?t.content=r:t.content=Yt.trim(r),t.no_events||e.fire("GetContent",t),t.content},_x=function(e,t){t(e),e.firstChild&&_x(e.firstChild,t),e.next&&_x(e.next,t)},Rx=function(e,t,n){var r=function(e,n,t){var r={},o={},i=[];for(var a in t.firstChild&&_x(t.firstChild,function(t){F(e,function(e){e.name===t.name&&(r[e.name]?r[e.name].nodes.push(t):r[e.name]={filter:e,nodes:[t]})}),F(n,function(e){"string"==typeof t.attr(e.name)&&(o[e.name]?o[e.name].nodes.push(t):o[e.name]={filter:e,nodes:[t]})})}),r)r.hasOwnProperty(a)&&i.push(r[a]);for(var a in o)o.hasOwnProperty(a)&&i.push(o[a]);return i}(e,t,n);F(r,function(t){F(t.filter.callbacks,function(e){e(t.nodes,t.filter.name,{})})})},Dx=function(e){return e instanceof Yb},Bx=function(e,t){var r;e.dom.setHTML(e.getBody(),t),Ep(r=e)&&al.firstPositionIn(r.getBody()).each(function(e){var t=e.getNode(),n=Bo.isTable(t)?al.firstPositionIn(t).getOr(e):e;r.selection.setRng(n.toRange())})},Ox=function(u,s,c){return void 0===c&&(c={}),c.format=c.format?c.format:"html",c.set=!0,c.content=Dx(s)?"":s,Dx(s)||c.no_events||(u.fire("BeforeSetContent",c),s=c.content),A.from(u.getBody()).fold(H(s),function(e){return Dx(s)?function(e,t,n,r){Rx(e.parser.getNodeFilters(),e.parser.getAttributeFilters(),n);var o=of({validate:e.validate},e.schema).serialize(n);return r.content=xo(er.fromDom(t))?o:Yt.trim(o),Bx(e,r.content),r.no_events||e.fire("SetContent",r),n}(u,e,s,c):(t=u,n=e,o=c,0===(r=s).length||/^\s+$/.test(r)?(a='<br data-mce-bogus="1">',"TABLE"===n.nodeName?r="<tr><td>"+a+"</td></tr>":/^(UL|OL)$/.test(n.nodeName)&&(r="<li>"+a+"</li>"),(i=rc(t))&&t.schema.isValidChild(n.nodeName.toLowerCase(),i.toLowerCase())?(r=a,r=t.dom.createHTML(i,t.settings.forced_root_block_attrs,r)):r||(r='<br data-mce-bogus="1">'),Bx(t,r),t.fire("SetContent",o)):("raw"!==o.format&&(r=of({validate:t.validate},t.schema).serialize(t.parser.parse(r,{isRootContent:!0,insert:!0}))),o.content=xo(er.fromDom(n))?r:Yt.trim(r),Bx(t,o.content),o.no_events||t.fire("SetContent",o)),o.content);var t,n,r,o,i,a})},Px=hi.DOM,Lx=function(e){return A.from(e).each(function(e){return e.destroy()})},Ix=function(e){if(!e.removed){var t=e._selectionOverrides,n=e.editorUpload,r=e.getBody(),o=e.getElement();r&&e.save(),e.removed=!0,e.unbindAllNativeEvents(),e.hasHiddenInput&&o&&Px.remove(o.nextSibling),!e.inline&&r&&(i=e,Px.setStyle(i.id,"display",i.orgDisplay)),Gg(e),e.editorManager.remove(e),Px.remove(e.getContainer()),Lx(t),Lx(n),e.destroy()}var i},Mx=function(e,t){var n,r,o,i=e.selection,a=e.dom;e.destroyed||(t||e.removed?(t||(e.editorManager.off("beforeunload",e._beforeUnload),e.theme&&e.theme.destroy&&e.theme.destroy(),Lx(i),Lx(a)),(r=(n=e).formElement)&&(r._mceOldSubmit&&(r.submit=r._mceOldSubmit,r._mceOldSubmit=null),Px.unbind(r,"submit reset",n.formEventDelegate)),(o=e).contentAreaContainer=o.formElement=o.container=o.editorContainer=null,o.bodyElement=o.contentDocument=o.contentWindow=null,o.iframeElement=o.targetElm=null,o.selection&&(o.selection=o.selection.win=o.selection.dom=o.selection.dom.doc=null),e.destroyed=!0):e.remove())},Fx=hi.DOM,Ux=Yt.extend,zx=Yt.each,Vx=Yt.resolve,qx=Re.ie,Hx=function(e,t,n){var r,o,i,a,u,s,c,l=this,f=l.documentBaseUrl=n.documentBaseURL,d=n.baseURI;r=l,o=e,i=f,a=n.defaultSettings,u=t,c={id:o,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:i,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"<!DOCTYPE html>",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,summary,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",entity_encoding:"named",url_converter:(s=r).convertURL,url_converter_scope:s,ie7_compat:!0},t=yf(df,c,a,u),l.settings=t,Ei.language=t.language||"en",Ei.languageLoad=t.language_load,Ei.baseURL=n.baseURL,l.id=e,l.setDirty(!1),l.plugins={},l.documentBaseURI=new kx(t.document_base_url,{base_uri:d}),l.baseURI=d,l.contentCSS=[],l.contentStyles=[],l.shortcuts=new mp(l),l.loadedCSS={},l.editorCommands=new qg(l),l.suffix=n.suffix,l.editorManager=n,l.inline=t.inline,l.buttons={},l.menuItems={},t.cache_suffix&&(Re.cacheSuffix=t.cache_suffix.replace(/^[\?\&]+/,"")),!1===t.override_viewport&&(Re.overrideViewPort=!1),n.fire("SetupEditor",{editor:l}),l.execCallback("setup",l),l.$=pn.overrideDefaults(function(){return{context:l.inline?l.getBody():l.getDoc(),element:l.getBody()}})};Ux(Hx.prototype={render:function(){xx(this)},focus:function(e){Np(this,e)},hasFocus:function(){return Ep(this)},execCallback:function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r,o=this.settings[e];if(o)return this.callbackLookup&&(r=this.callbackLookup[e])&&(o=r.func,r=r.scope),"string"==typeof o&&(r=(r=o.replace(/\.\w+$/,""))?Vx(r):0,o=Vx(o),this.callbackLookup=this.callbackLookup||{},this.callbackLookup[e]={func:o,scope:r}),o.apply(r||this,Array.prototype.slice.call(arguments,1))},translate:function(e){if(e&&Yt.is(e,"string")){var n=this.settings.language||"en",r=this.editorManager.i18n;e=r.data[n+"."+e]||e.replace(/\{\#([^\}]+)\}/g,function(e,t){return r.data[n+"."+t]||"{#"+t+"}"})}return this.editorManager.translate(e)},getLang:function(e,t){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+e]||(t!==undefined?t:"{#"+e+"}")},getParam:function(e,t,n){return wf(this,e,t,n)},nodeChanged:function(e){this._nodeChangeDispatcher.nodeChanged(e)},addButton:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),t.stateSelector&&"undefined"==typeof t.active&&(t.active=!1),t.text||t.icon||(t.icon=e),n.buttons=n.buttons,t.tooltip=t.tooltip||t.title,n.buttons[e]=t},addSidebar:function(e,t){return wx(this,e,t)},addMenuItem:function(e,t){var n=this;t.cmd&&(t.onclick=function(){n.execCommand(t.cmd)}),n.menuItems=n.menuItems,n.menuItems[e]=t},addContextToolbar:function(e,t){var n,r=this;r.contextToolbars=r.contextToolbars||[],"string"==typeof e&&(n=e,e=function(e){return r.dom.is(e,n)}),r.contextToolbars.push({id:ah.uuid("mcet"),predicate:e,items:t})},addCommand:function(e,t,n){this.editorCommands.addCommand(e,t,n)},addQueryStateHandler:function(e,t,n){this.editorCommands.addQueryStateHandler(e,t,n)},addQueryValueHandler:function(e,t,n){this.editorCommands.addQueryValueHandler(e,t,n)},addShortcut:function(e,t,n,r){this.shortcuts.add(e,t,n,r)},execCommand:function(e,t,n,r){return this.editorCommands.execCommand(e,t,n,r)},queryCommandState:function(e){return this.editorCommands.queryCommandState(e)},queryCommandValue:function(e){return this.editorCommands.queryCommandValue(e)},queryCommandSupported:function(e){return this.editorCommands.queryCommandSupported(e)},show:function(){this.hidden&&(this.hidden=!1,this.inline?this.getBody().contentEditable=!0:(Fx.show(this.getContainer()),Fx.hide(this.id)),this.load(),this.fire("show"))},hide:function(){var e=this,t=e.getDoc();e.hidden||(qx&&t&&!e.inline&&t.execCommand("SelectAll"),e.save(),e.inline?(e.getBody().contentEditable=!1,e===e.editorManager.focusedEditor&&(e.editorManager.focusedEditor=null)):(Fx.hide(e.getContainer()),Fx.setStyle(e.id,"display",e.orgDisplay)),e.hidden=!0,e.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(e,t){this.fire("ProgressState",{state:e,time:t})},load:function(e){var t,n=this.getElement();return this.removed?"":n?((e=e||{}).load=!0,t=this.setContent(n.value!==undefined?n.value:n.innerHTML,e),e.element=n,e.no_events||this.fire("LoadContent",e),e.element=n=null,t):void 0},save:function(e){var t,n,r=this,o=r.getElement();if(o&&r.initialized&&!r.removed)return(e=e||{}).save=!0,e.element=o,e.content=r.getContent(e),e.no_events||r.fire("SaveContent",e),"raw"===e.format&&r.fire("RawSaveContent",e),t=e.content,/TEXTAREA|INPUT/i.test(o.nodeName)?o.value=t:(o.innerHTML=t,(n=Fx.getParent(r.id,"form"))&&zx(n.elements,function(e){if(e.name===r.id)return e.value=t,!1})),e.element=o=null,!1!==e.set_dirty&&r.setDirty(!1),t},setContent:function(e,t){return Ox(this,e,t)},getContent:function(e){return t=this,void 0===(n=e)&&(n={}),A.from(t.getBody()).fold(H("tree"===n.format?new Yb("body",11):""),function(e){return Ax(t,n,e)});var t,n},insertContent:function(e,t){t&&(e=Ux({content:e},t)),this.execCommand("mceInsertContent",!1,e)},isDirty:function(){return!this.isNotDirty},setDirty:function(e){var t=!this.isNotDirty;this.isNotDirty=!e,e&&e!==t&&this.fire("dirty")},setMode:function(e){var t,n;(n=e)!==np(t=this)&&(t.initialized?tp(t,"readonly"===n):t.on("init",function(){tp(t,"readonly"===n)}),Jg(t,n))},getContainer:function(){return this.container||(this.container=Fx.get(this.editorContainer||this.id+"_parent")),this.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return this.targetElm||(this.targetElm=Fx.get(this.id)),this.targetElm},getWin:function(){var e;return this.contentWindow||(e=this.iframeElement)&&(this.contentWindow=e.contentWindow),this.contentWindow},getDoc:function(){var e;return this.contentDocument||(e=this.getWin())&&(this.contentDocument=e.document),this.contentDocument},getBody:function(){var e=this.getDoc();return this.bodyElement||(e?e.body:null)},convertURL:function(e,t,n){var r=this.settings;return r.urlconverter_callback?this.execCallback("urlconverter_callback",e,n,!0,t):!r.convert_urls||n&&"LINK"===n.nodeName||0===e.indexOf("file:")||0===e.length?e:r.relative_urls?this.documentBaseURI.toRelative(e):e=this.documentBaseURI.toAbsolute(e,r.remove_script_host)},addVisual:function(e){var n,r=this,o=r.settings,i=r.dom;e=e||r.getBody(),r.hasVisual===undefined&&(r.hasVisual=o.visual),zx(i.select("table,a",e),function(e){var t;switch(e.nodeName){case"TABLE":return n=o.visual_table_class||"mce-item-table",void((t=i.getAttrib(e,"border"))&&"0"!==t||!r.hasVisual?i.removeClass(e,n):i.addClass(e,n));case"A":return void(i.getAttrib(e,"href")||(t=i.getAttrib(e,"name")||e.id,n=o.visual_anchor_class||"mce-item-anchor",t&&r.hasVisual?i.addClass(e,n):i.removeClass(e,n)))}}),r.fire("VisualAid",{element:e,hasVisual:r.hasVisual})},remove:function(){Ix(this)},destroy:function(e){Mx(this,e)},uploadImages:function(e){return this.editorUpload.uploadImages(e)},_scanForImages:function(){return this.editorUpload.scanForImages()}},sp);var jx,$x,Wx,Kx={isEditorUIElement:function(e){return-1!==e.className.toString().indexOf("mce-")}},Xx=function(n,e){var t,r;Qn.detect().browser.isIE()?(r=n).on("focusout",function(){Pg(r)}):(t=e,n.on("mouseup touchend",function(e){t.throttle()})),n.on("keyup nodechange",function(e){var t;"nodechange"===(t=e).type&&t.selectionChange||Pg(n)})},Yx=function(e){var t,n,r,o=Bi(function(){Pg(e)},0);e.inline&&(t=e,n=o,r=function(){n.throttle()},hi.DOM.bind(document,"mouseup",r),t.on("remove",function(){hi.DOM.unbind(document,"mouseup",r)})),e.on("init",function(){Xx(e,o)}),e.on("remove",function(){o.cancel()})},Gx=hi.DOM,Jx=function(e){return Kx.isEditorUIElement(e)},Qx=function(t,e){var n=t?t.settings.custom_ui_selector:"";return null!==Gx.getParent(e,function(e){return Jx(e)||!!n&&t.dom.is(e,n)})},Zx=function(r,e){var t=e.editor;Yx(t),t.on("focusin",function(){var e=r.focusedEditor;e!==this&&(e&&e.fire("blur",{focusedEditor:this}),r.setActive(this),(r.focusedEditor=this).fire("focus",{blurredEditor:e}),this.focus(!0))}),t.on("focusout",function(){var t=this;Le.setEditorTimeout(t,function(){var e=r.focusedEditor;Qx(t,function(){try{return document.activeElement}catch(e){return document.body}}())||e!==t||(t.fire("blur",{focusedEditor:null}),r.focusedEditor=null)})}),jx||(jx=function(e){var t,n=r.activeEditor;t=e.target,n&&t.ownerDocument===document&&(t===document.body||Qx(n,t)||r.focusedEditor!==n||(n.fire("blur",{focusedEditor:null}),r.focusedEditor=null))},Gx.bind(document,"focusin",jx))},ew=function(e,t){e.focusedEditor===t.editor&&(e.focusedEditor=null),e.activeEditor||(Gx.unbind(document,"focusin",jx),jx=null)},tw=function(e){e.on("AddEditor",b(Zx,e)),e.on("RemoveEditor",b(ew,e))},nw={},rw="en",ow={setCode:function(e){e&&(rw=e,this.rtl=!!this.data[e]&&"rtl"===this.data[e]._dir)},getCode:function(){return rw},rtl:!1,add:function(e,t){var n=nw[e];for(var r in n||(nw[e]=n={}),t)n[r]=t[r];this.setCode(e)},translate:function(e){var t=nw[rw]||{},n=function(e){return Yt.is(e,"function")?Object.prototype.toString.call(e):r(e)?"":""+e},r=function(e){return""===e||null===e||Yt.is(e,"undefined")},o=function(e){return e=n(e),Yt.hasOwn(t,e)?n(t[e]):e};if(r(e))return"";if(Yt.is(e,"object")&&Yt.hasOwn(e,"raw"))return n(e.raw);if(Yt.is(e,"array")){var i=e.slice(1);e=o(e[0]).replace(/\{([0-9]+)\}/g,function(e,t){return Yt.hasOwn(i,t)?n(i[t]):e})}return o(e).replace(/{context:\w+}$/,"")},data:nw},iw=hi.DOM,aw=Yt.explode,uw=Yt.each,sw=Yt.extend,cw=0,lw=!1,fw=[],dw=[],mw=function(t){uw(Wx.get(),function(e){"scroll"===t.type?e.fire("ScrollWindow",t):e.fire("ResizeWindow",t)})},gw=function(e){e!==lw&&(e?pn(window).on("resize scroll",mw):pn(window).off("resize scroll",mw),lw=e)},pw=function(t){var e=dw;delete fw[t.id];for(var n=0;n<fw.length;n++)if(fw[n]===t){fw.splice(n,1);break}return dw=U(dw,function(e){return t!==e}),Wx.activeEditor===t&&(Wx.activeEditor=0<dw.length?dw[0]:null),Wx.focusedEditor===t&&(Wx.focusedEditor=null),e.length!==dw.length};sw(Wx={defaultSettings:{},$:pn,majorVersion:"4",minorVersion:"8.0",releaseDate:"2018-06-27",editors:fw,i18n:ow,activeEditor:null,settings:{},setup:function(){var e,t,n,r,o="";if(t=kx.getDocumentBaseUrl(document.location),/^[^:]+:\/\/\/?[^\/]+\//.test(t)&&(t=t.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(t)||(t+="/")),n=window.tinymce||window.tinyMCEPreInit)e=n.base||n.baseURL,o=n.suffix;else{for(var i=document.getElementsByTagName("script"),a=0;a<i.length;a++){var u=(r=i[a].src).substring(r.lastIndexOf("/"));if(/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(r)){-1!==u.indexOf(".min")&&(o=".min"),e=r.substring(0,r.lastIndexOf("/"));break}}!e&&document.currentScript&&(-1!==(r=document.currentScript.src).indexOf(".min")&&(o=".min"),e=r.substring(0,r.lastIndexOf("/")))}this.baseURL=new kx(t).toAbsolute(e),this.documentBaseURL=t,this.baseURI=new kx(this.baseURL),this.suffix=o,tw(this)},overrideDefaults:function(e){var t,n;(t=e.base_url)&&(this.baseURL=new kx(this.documentBaseURL).toAbsolute(t.replace(/\/+$/,"")),this.baseURI=new kx(this.baseURL)),n=e.suffix,e.suffix&&(this.suffix=n);var r=(this.defaultSettings=e).plugin_base_urls;for(var o in r)Ei.PluginManager.urls[o]=r[o]},init:function(r){var n,u,s=this;u=Yt.makeMap("area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu"," ");var c=function(e){var t=e.id;return t||(t=(t=e.name)&&!iw.get(t)?e.name:iw.uniqueId(),e.setAttribute("id",t)),t},l=function(e,t){return t.constructor===RegExp?t.test(e.className):iw.hasClass(e,t)},f=function(e){n=e},e=function(){var o,i=0,a=[],n=function(e,t,n){var r=new Hx(e,t,s);a.push(r),r.on("init",function(){++i===o.length&&f(a)}),r.targetElm=r.targetElm||n,r.render()};iw.unbind(window,"ready",e),function(e){var t=r[e];t&&t.apply(s,Array.prototype.slice.call(arguments,2))}("onpageload"),o=pn.unique(function(t){var e,n=[];if(Re.ie&&Re.ie<11)return qp("TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/"),[];if(t.types)return uw(t.types,function(e){n=n.concat(iw.select(e.selector))}),n;if(t.selector)return iw.select(t.selector);if(t.target)return[t.target];switch(t.mode){case"exact":0<(e=t.elements||"").length&&uw(aw(e),function(t){var e;(e=iw.get(t))?n.push(e):uw(document.forms,function(e){uw(e.elements,function(e){e.name===t&&(t="mce_editor_"+cw++,iw.setAttrib(e,"id",t),n.push(e))})})});break;case"textareas":case"specific_textareas":uw(iw.select("textarea"),function(e){t.editor_deselector&&l(e,t.editor_deselector)||t.editor_selector&&!l(e,t.editor_selector)||n.push(e)})}return n}(r)),r.types?uw(r.types,function(t){Yt.each(o,function(e){return!iw.is(e,t.selector)||(n(c(e),sw({},r,t),e),!1)})}):(Yt.each(o,function(e){var t;(t=s.get(e.id))&&t.initialized&&!(t.getContainer()||t.getBody()).parentNode&&(pw(t),t.unbindAllNativeEvents(),t.destroy(!0),t.removed=!0,t=null)}),0===(o=Yt.grep(o,function(e){return!s.get(e.id)})).length?f([]):uw(o,function(e){var t;t=e,r.inline&&t.tagName.toLowerCase()in u?qp("Could not initialize inline editor on invalid inline target element",e):n(c(e),r,e)}))};return s.settings=r,iw.bind(window,"ready",e),new De(function(t){n?t(n):f=function(e){t(e)}})},get:function(t){return 0===arguments.length?dw.slice(0):k(t)?V(dw,function(e){return e.id===t}).getOr(null):P(t)&&dw[t]?dw[t]:null},add:function(e){var t=this;return fw[e.id]===e||(null===t.get(e.id)&&("length"!==e.id&&(fw[e.id]=e),fw.push(e),dw.push(e)),gw(!0),t.activeEditor=e,t.fire("AddEditor",{editor:e}),$x||($x=function(){t.fire("BeforeUnload")},iw.bind(window,"beforeunload",$x))),e},createEditor:function(e,t){return this.add(new Hx(e,t,this))},remove:function(e){var t,n,r=this;if(e){if(!k(e))return n=e,D(r.get(n.id))?null:(pw(n)&&r.fire("RemoveEditor",{editor:n}),0===dw.length&&iw.unbind(window,"beforeunload",$x),n.remove(),gw(0<dw.length),n);uw(iw.select(e),function(e){(n=r.get(e.id))&&r.remove(n)})}else for(t=dw.length-1;0<=t;t--)r.remove(dw[t])},execCommand:function(e,t,n){var r=this.get(n);switch(e){case"mceAddEditor":return this.get(n)||new Hx(n,this.settings,this).render(),!0;case"mceRemoveEditor":return r&&r.remove(),!0;case"mceToggleEditor":return r?r.isHidden()?r.show():r.hide():this.execCommand("mceAddEditor",0,n),!0}return!!this.activeEditor&&this.activeEditor.execCommand(e,t,n)},triggerSave:function(){uw(dw,function(e){e.save()})},addI18n:function(e,t){ow.add(e,t)},translate:function(e){return ow.translate(e)},setActive:function(e){var t=this.activeEditor;this.activeEditor!==e&&(t&&t.fire("deactivate",{relatedTarget:e}),e.fire("activate",{relatedTarget:t})),this.activeEditor=e}},Kg),Wx.setup();var hw,vw=Wx;function bw(n){return{walk:function(e,t){return Pl(n,e,t)},split:Lv,normalize:function(t){return ag(n,t).fold(H(!1),function(e){return t.setStart(e.startContainer,e.startOffset),t.setEnd(e.endContainer,e.endOffset),!0})}}}(hw=bw||(bw={})).compareRanges=Zm,hw.getCaretRangeFromPoint=by,hw.getSelectedNode=nu,hw.getNode=ru;var yw,Cw,xw=bw,ww=Math.min,Nw=Math.max,Ew=Math.round,Sw=function(e,t,n){var r,o,i,a,u,s;return r=t.x,o=t.y,i=e.w,a=e.h,u=t.w,s=t.h,"b"===(n=(n||"").split(""))[0]&&(o+=s),"r"===n[1]&&(r+=u),"c"===n[0]&&(o+=Ew(s/2)),"c"===n[1]&&(r+=Ew(u/2)),"b"===n[3]&&(o-=a),"r"===n[4]&&(r-=i),"c"===n[3]&&(o-=Ew(a/2)),"c"===n[4]&&(r-=Ew(i/2)),Tw(r,o,i,a)},Tw=function(e,t,n,r){return{x:e,y:t,w:n,h:r}},kw={inflate:function(e,t,n){return Tw(e.x-t,e.y-n,e.w+2*t,e.h+2*n)},relativePosition:Sw,findBestRelativePosition:function(e,t,n,r){var o,i;for(i=0;i<r.length;i++)if((o=Sw(e,t,r[i])).x>=n.x&&o.x+o.w<=n.w+n.x&&o.y>=n.y&&o.y+o.h<=n.h+n.y)return r[i];return null},intersect:function(e,t){var n,r,o,i;return n=Nw(e.x,t.x),r=Nw(e.y,t.y),o=ww(e.x+e.w,t.x+t.w),i=ww(e.y+e.h,t.y+t.h),o-n<0||i-r<0?null:Tw(n,r,o-n,i-r)},clamp:function(e,t,n){var r,o,i,a,u,s,c,l,f,d;return u=e.x,s=e.y,c=e.x+e.w,l=e.y+e.h,f=t.x+t.w,d=t.y+t.h,r=Nw(0,t.x-u),o=Nw(0,t.y-s),i=Nw(0,c-f),a=Nw(0,l-d),u+=r,s+=o,n&&(c+=r,l+=o,u-=i,s-=a),Tw(u,s,(c-=i)-u,(l-=a)-s)},create:Tw,fromClientRect:function(e){return Tw(e.left,e.top,e.width,e.height)}},Aw={},_w={add:function(e,t){Aw[e.toLowerCase()]=t},has:function(e){return!!Aw[e.toLowerCase()]},get:function(e){var t=e.toLowerCase(),n=Aw.hasOwnProperty(t)?Aw[t]:null;if(null===n)throw new Error("Could not find module for type: "+e);return n},create:function(e,t){var n;if("string"==typeof e?(t=t||{}).type=e:e=(t=e).type,e=e.toLowerCase(),!(n=Aw[e]))throw new Error("Could not find control by type: "+e);return(n=new n(t)).type=e,n}},Rw=Yt.each,Dw=Yt.extend,Bw=function(){};Bw.extend=yw=function(n){var e,t,r,o=this.prototype,i=function(){var e,t,n;if(!Cw&&(this.init&&this.init.apply(this,arguments),t=this.Mixins))for(e=t.length;e--;)(n=t[e]).init&&n.init.apply(this,arguments)},a=function(){return this},u=function(n,r){return function(){var e,t=this._super;return this._super=o[n],e=r.apply(this,arguments),this._super=t,e}};for(t in Cw=!0,e=new this,Cw=!1,n.Mixins&&(Rw(n.Mixins,function(e){for(var t in e)"init"!==t&&(n[t]=e[t])}),o.Mixins&&(n.Mixins=o.Mixins.concat(n.Mixins))),n.Methods&&Rw(n.Methods.split(","),function(e){n[e]=a}),n.Properties&&Rw(n.Properties.split(","),function(e){var t="_"+e;n[e]=function(e){return e!==undefined?(this[t]=e,this):this[t]}}),n.Statics&&Rw(n.Statics,function(e,t){i[t]=e}),n.Defaults&&o.Defaults&&(n.Defaults=Dw({},o.Defaults,n.Defaults)),n)"function"==typeof(r=n[t])&&o[t]?e[t]=u(t,r):e[t]=r;return i.prototype=e,(i.constructor=i).extend=yw,i};var Ow=Math.min,Pw=Math.max,Lw=Math.round,Iw=function(e,n){var r,o,t,i;if(n=n||'"',null===e)return"null";if("string"==(t=typeof e))return o="\bb\tt\nn\ff\rr\"\"''\\\\",n+e.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(e,t){return'"'===n&&"'"===e?e:(r=o.indexOf(t))+1?"\\"+o.charAt(r+1):(e=t.charCodeAt().toString(16),"\\u"+"0000".substring(e.length)+e)})+n;if("object"===t){if(e.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(e)){for(r=0,o="[";r<e.length;r++)o+=(0<r?",":"")+Iw(e[r],n);return o+"]"}for(i in o="{",e)e.hasOwnProperty(i)&&(o+="function"!=typeof e[i]?(1<o.length?","+n:n)+i+n+":"+Iw(e[i],n):"");return o+"}"}return""+e},Mw={serialize:Iw,parse:function(e){try{return JSON.parse(e)}catch(t){}}},Fw={callbacks:{},count:0,send:function(t){var n=this,r=hi.DOM,o=t.count!==undefined?t.count:n.count,i="tinymce_jsonp_"+o;n.callbacks[o]=function(e){r.remove(i),delete n.callbacks[o],t.callback(e)},r.add(r.doc.body,"script",{id:i,src:t.url,type:"text/javascript"}),n.count++}},Uw={send:function(e){var t,n=0,r=function(){!e.async||4===t.readyState||1e4<n++?(e.success&&n<1e4&&200===t.status?e.success.call(e.success_scope,""+t.responseText,t,e):e.error&&e.error.call(e.error_scope,1e4<n?"TIMED_OUT":"GENERAL",t,e),t=null):setTimeout(r,10)};if(e.scope=e.scope||this,e.success_scope=e.success_scope||e.scope,e.error_scope=e.error_scope||e.scope,e.async=!1!==e.async,e.data=e.data||"",Uw.fire("beforeInitialize",{settings:e}),t=new $p){if(t.overrideMimeType&&t.overrideMimeType(e.content_type),t.open(e.type||(e.data?"POST":"GET"),e.url,e.async),e.crossDomain&&(t.withCredentials=!0),e.content_type&&t.setRequestHeader("Content-Type",e.content_type),e.requestheaders&&Yt.each(e.requestheaders,function(e){t.setRequestHeader(e.key,e.value)}),t.setRequestHeader("X-Requested-With","XMLHttpRequest"),(t=Uw.fire("beforeSend",{xhr:t,settings:e}).xhr).send(e.data),!e.async)return r();setTimeout(r,10)}}};Yt.extend(Uw,Kg);var zw=Yt.extend,Vw=function(e){this.settings=zw({},e),this.count=0};Vw.sendRPC=function(e){return(new Vw).send(e)},Vw.prototype={send:function(n){var r=n.error,o=n.success;(n=zw(this.settings,n)).success=function(e,t){void 0===(e=Mw.parse(e))&&(e={error:"JSON Parse error."}),e.error?r.call(n.error_scope||n.scope,e.error,t):o.call(n.success_scope||n.scope,e.result)},n.error=function(e,t){r&&r.call(n.error_scope||n.scope,e,t)},n.data=Mw.serialize({id:n.id||"c"+this.count++,method:n.method,params:n.params}),n.content_type="application/json",Uw.send(n)}};var qw,Hw=window.localStorage,jw=vw,$w={geom:{Rect:kw},util:{Promise:De,Delay:Le,Tools:Yt,VK:Wh,URI:kx,Class:Bw,EventDispatcher:jg,Observable:Kg,I18n:ow,XHR:Uw,JSON:Mw,JSONRequest:Vw,JSONP:Fw,LocalStorage:Hw,Color:function(e){var n={},u=0,s=0,c=0,t=function(e){var t;return"object"==typeof e?"r"in e?(u=e.r,s=e.g,c=e.b):"v"in e&&function(e,t,n){var r,o,i,a;if(e=(parseInt(e,10)||0)%360,t=parseInt(t,10)/100,n=parseInt(n,10)/100,t=Pw(0,Ow(t,1)),n=Pw(0,Ow(n,1)),0!==t){switch(r=e/60,i=(o=n*t)*(1-Math.abs(r%2-1)),a=n-o,Math.floor(r)){case 0:u=o,s=i,c=0;break;case 1:u=i,s=o,c=0;break;case 2:u=0,s=o,c=i;break;case 3:u=0,s=i,c=o;break;case 4:u=i,s=0,c=o;break;case 5:u=o,s=0,c=i;break;default:u=s=c=0}u=Lw(255*(u+a)),s=Lw(255*(s+a)),c=Lw(255*(c+a))}else u=s=c=Lw(255*n)}(e.h,e.s,e.v):(t=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(e))?(u=parseInt(t[1],10),s=parseInt(t[2],10),c=parseInt(t[3],10)):(t=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(e))?(u=parseInt(t[1],16),s=parseInt(t[2],16),c=parseInt(t[3],16)):(t=/#([0-F])([0-F])([0-F])/gi.exec(e))&&(u=parseInt(t[1]+t[1],16),s=parseInt(t[2]+t[2],16),c=parseInt(t[3]+t[3],16)),u=u<0?0:255<u?255:u,s=s<0?0:255<s?255:s,c=c<0?0:255<c?255:c,n};return e&&t(e),n.toRgb=function(){return{r:u,g:s,b:c}},n.toHsv=function(){return e=u,t=s,n=c,o=0,(i=Ow(e/=255,Ow(t/=255,n/=255)))===(a=Pw(e,Pw(t,n)))?{h:0,s:0,v:100*(o=i)}:(r=(a-i)/a,{h:Lw(60*((e===i?3:n===i?1:5)-(e===i?t-n:n===i?e-t:n-e)/((o=a)-i))),s:Lw(100*r),v:Lw(100*o)});var e,t,n,r,o,i,a},n.toHex=function(){var e=function(e){return 1<(e=parseInt(e,10).toString(16)).length?e:"0"+e};return"#"+e(u)+e(s)+e(c)},n.parse=t,n}},dom:{EventUtils:je,Sizzle:Tt,DomQuery:pn,TreeWalker:io,DOMUtils:hi,ScriptLoader:xi,RangeUtils:xw,Serializer:fy,ControlSelection:hy,BookmarkManager:my,Selection:Wy,Event:je.Event},html:{Styles:ii,Entities:Wo,Node:Yb,Schema:ri,SaxParser:tv,DomParser:ay,Writer:rf,Serializer:of},ui:{Factory:_w},Env:Re,AddOnManager:Ei,Annotator:Vl,Formatter:Mb,UndoManager:Ev,EditorCommands:qg,WindowManager:Pp,NotificationManager:Op,EditorObservable:sp,Shortcuts:mp,Editor:Hx,FocusManager:Kx,EditorManager:vw,DOM:hi.DOM,ScriptLoader:xi.ScriptLoader,PluginManager:Ei.PluginManager,ThemeManager:Ei.ThemeManager,trim:Yt.trim,isArray:Yt.isArray,is:Yt.is,toArray:Yt.toArray,makeMap:Yt.makeMap,each:Yt.each,map:Yt.map,grep:Yt.grep,inArray:Yt.inArray,extend:Yt.extend,create:Yt.create,walk:Yt.walk,createNS:Yt.createNS,resolve:Yt.resolve,explode:Yt.explode,_addCacheSuffix:Yt._addCacheSuffix,isOpera:Re.opera,isWebKit:Re.webkit,isIE:Re.ie,isGecko:Re.gecko,isMac:Re.mac},Ww=jw=Yt.extend(jw,$w);qw=Ww,window.tinymce=qw,window.tinyMCE=qw,function(e){if("object"==typeof module)try{module.exports=e}catch(t){}}(Ww)}();
\ No newline at end of file
addClass : function (n, c, b) {
var o = this.removeClass(n, c);
- n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
+ n.className = b ? c + (o !== '' ? (' ' + o) : '') : (o !== '' ? (o + ' ') : '') + c;
},
removeClass : function (n, c) {
c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
- return n.className = c != ' ' ? c : '';
+ return n.className = c !== ' ' ? c : '';
},
tags : function (f, s) {
// RegExp based on emoji's official Unicode standards
// http://www.unicode.org/Public/UNIDATA/EmojiSources.txt
- re = /\ud83d[\udc68-\udc69](?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)(?:\ufe0f|\ud83c[\udffb-\udfff])\u200d[\u2640\u2642]\ufe0f|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|(?:\u002a)\ufe0f?\u20e3|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca-\udfcc]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd74\udd75\udd7a\udd90\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddd1-\udddd]|[\u261d\u26f7\u26f9\u270a-\u270d])(?:\ud83c[\udffb-\udfff]|)|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\u0023\u20e3|\u0030\u20e3|\u0031\u20e3|\u0032\u20e3|\u0033\u20e3|\u0034\u20e3|\u0035\u20e3|\u0036\u20e3|\u0037\u20e3|\u0038\u20e3|\u0039\u20e3|\ud800\udc00|\ud83c[\udc04\udccf\udd70\udd71\udd7e\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude02\ude1a\ude2f\ude32-\ude3a\ude50\ude51\udf00-\udf21\udf24-\udf84\udf86-\udf93\udf96\udf97\udf99-\udf9b\udf9e-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcd-\udff0\udff3-\udff5\udff7-\udfff]|\ud83d[\udc00-\udc41\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfd\udcff-\udd3d\udd49-\udd4e\udd50-\udd67\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda4\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\udecb\udecd-\uded2\udee0-\udee5\udee9\udeeb\udeec\udef0\udef3-\udef8]|\ud83e[\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd40-\udd45\udd47-\udd4c\udd50-\udd6b\udd80-\udd97\uddc0\uddd0\uddde-\udde6]|[\u00a9\u00ae\u203c\u2049\u2122\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26ce\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2705\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2728\u2733\u2734\u2744\u2747\u274c\u274e\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27a1\u27b0\u27bf\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299\ue50a]|(?:\u2639)(?:\ufe0f|(?!\ufe0e))/g,
+ re = /(?:\ud83d[\udc68\udc69])(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddb0-\uddb3])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[\u0023\u002a\u0030-\u0039]\ufe0f?\u20e3|(?:[\u00a9\u00ae\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\udeeb\udeec\udef4-\udef9]|\ud83e[\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd40-\udd45\udd47-\udd70\udd73-\udd76\udd7a\udd7c-\udda2\uddb4\uddb7\uddc0-\uddc2\uddd0\uddde-\uddff]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,
// avoid runtime RegExp creation for not so smart,
// not JIT based, and old browsers / engines
return r.join(sep || '-');
}
-}());
\ No newline at end of file
+}());
-var twemoji=function(){"use strict";function a(a,b){return document.createTextNode(b?a.replace(s,""):a)}function b(a){return a.replace(u,h)}function c(a,b){return"".concat(b.base,b.size,"/",a,b.ext)}function d(a,b){for(var c,e,f=a.childNodes,g=f.length;g--;)c=f[g],e=c.nodeType,3===e?b.push(c):1!==e||"ownerSVGElement"in c||v.test(c.nodeName.toLowerCase())||d(c,b);return b}function e(a){return o(a.indexOf(t)<0?a.replace(s,""):a)}function f(b,c){for(var f,g,h,i,j,k,l,m,n,o,p,q,s,t=d(b,[]),u=t.length;u--;){for(h=!1,i=document.createDocumentFragment(),j=t[u],k=j.nodeValue,m=0;l=r.exec(k);){if(n=l.index,n!==m&&i.appendChild(a(k.slice(m,n),!0)),p=l[0],q=e(p),m=n+p.length,s=c.callback(q,c)){o=new Image,o.onerror=c.onerror,o.setAttribute("draggable","false"),f=c.attributes(p,q);for(g in f)f.hasOwnProperty(g)&&0!==g.indexOf("on")&&!o.hasAttribute(g)&&o.setAttribute(g,f[g]);o.className=c.className,o.alt=p,o.src=s,h=!0,i.appendChild(o)}o||i.appendChild(a(p,!1)),o=null}h&&(m<k.length&&i.appendChild(a(k.slice(m),!0)),j.parentNode.replaceChild(i,j))}return b}function g(a,c){return m(a,function(a){var d,f,g=a,h=e(a),i=c.callback(h,c);if(i){g="<img ".concat('class="',c.className,'" ','draggable="false" ','alt="',a,'"',' src="',i,'"'),d=c.attributes(a,h);for(f in d)d.hasOwnProperty(f)&&0!==f.indexOf("on")&&g.indexOf(" "+f+"=")===-1&&(g=g.concat(" ",f,'="',b(d[f]),'"'));g=g.concat("/>")}return g})}function h(a){return q[a]}function i(){return null}function j(a){return"number"==typeof a?a+"x"+a:a}function k(a){var b="string"==typeof a?parseInt(a,16):a;return b<65536?w(b):(b-=65536,w(55296+(b>>10),56320+(1023&b)))}function l(a,b){return b&&"function"!=typeof b||(b={callback:b}),("string"==typeof a?g:f)(a,{callback:b.callback||c,attributes:"function"==typeof b.attributes?b.attributes:i,base:"string"==typeof b.base?b.base:p.base,ext:b.ext||p.ext,size:b.folder||j(b.size||p.size),className:b.className||p.className,onerror:b.onerror||p.onerror})}function m(a,b){return String(a).replace(r,b)}function n(a){r.lastIndex=0;var b=r.test(a);return r.lastIndex=0,b}function o(a,b){for(var c=[],d=0,e=0,f=0;f<a.length;)d=a.charCodeAt(f++),e?(c.push((65536+(e-55296<<10)+(d-56320)).toString(16)),e=0):55296<=d&&d<=56319?e=d:c.push(d.toString(16));return c.join(b||"-")}var p={base:"https://twemoji.maxcdn.com/2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:k,toCodePoint:o},onerror:function(){this.parentNode&&this.parentNode.replaceChild(a(this.alt,!1),this)},parse:l,replace:m,test:n},q={"&":"&","<":"<",">":">","'":"'",'"':"""},r=/\ud83d[\udc68-\udc69](?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)(?:\ufe0f|\ud83c[\udffb-\udfff])\u200d[\u2640\u2642]\ufe0f|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|(?:\u002a)\ufe0f?\u20e3|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca-\udfcc]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd74\udd75\udd7a\udd90\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddd1-\udddd]|[\u261d\u26f7\u26f9\u270a-\u270d])(?:\ud83c[\udffb-\udfff]|)|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\u0023\u20e3|\u0030\u20e3|\u0031\u20e3|\u0032\u20e3|\u0033\u20e3|\u0034\u20e3|\u0035\u20e3|\u0036\u20e3|\u0037\u20e3|\u0038\u20e3|\u0039\u20e3|\ud800\udc00|\ud83c[\udc04\udccf\udd70\udd71\udd7e\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude02\ude1a\ude2f\ude32-\ude3a\ude50\ude51\udf00-\udf21\udf24-\udf84\udf86-\udf93\udf96\udf97\udf99-\udf9b\udf9e-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcd-\udff0\udff3-\udff5\udff7-\udfff]|\ud83d[\udc00-\udc41\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfd\udcff-\udd3d\udd49-\udd4e\udd50-\udd67\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda4\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\udecb\udecd-\uded2\udee0-\udee5\udee9\udeeb\udeec\udef0\udef3-\udef8]|\ud83e[\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd40-\udd45\udd47-\udd4c\udd50-\udd6b\udd80-\udd97\uddc0\uddd0\uddde-\udde6]|[\u00a9\u00ae\u203c\u2049\u2122\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26ce\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2705\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2728\u2733\u2734\u2744\u2747\u274c\u274e\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27a1\u27b0\u27bf\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299\ue50a]|(?:\u2639)(?:\ufe0f|(?!\ufe0e))/g,s=/\uFE0F/g,t=String.fromCharCode(8205),u=/[&<>'"]/g,v=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,w=String.fromCharCode;return p}();
\ No newline at end of file
+var twemoji=function(){"use strict";function a(a,b){return document.createTextNode(b?a.replace(s,""):a)}function b(a){return a.replace(u,h)}function c(a,b){return"".concat(b.base,b.size,"/",a,b.ext)}function d(a,b){for(var c,e,f=a.childNodes,g=f.length;g--;)c=f[g],e=c.nodeType,3===e?b.push(c):1!==e||"ownerSVGElement"in c||v.test(c.nodeName.toLowerCase())||d(c,b);return b}function e(a){return o(a.indexOf(t)<0?a.replace(s,""):a)}function f(b,c){for(var f,g,h,i,j,k,l,m,n,o,p,q,s,t=d(b,[]),u=t.length;u--;){for(h=!1,i=document.createDocumentFragment(),j=t[u],k=j.nodeValue,m=0;l=r.exec(k);){if(n=l.index,n!==m&&i.appendChild(a(k.slice(m,n),!0)),p=l[0],q=e(p),m=n+p.length,s=c.callback(q,c)){o=new Image,o.onerror=c.onerror,o.setAttribute("draggable","false"),f=c.attributes(p,q);for(g in f)f.hasOwnProperty(g)&&0!==g.indexOf("on")&&!o.hasAttribute(g)&&o.setAttribute(g,f[g]);o.className=c.className,o.alt=p,o.src=s,h=!0,i.appendChild(o)}o||i.appendChild(a(p,!1)),o=null}h&&(m<k.length&&i.appendChild(a(k.slice(m),!0)),j.parentNode.replaceChild(i,j))}return b}function g(a,c){return m(a,function(a){var d,f,g=a,h=e(a),i=c.callback(h,c);if(i){g="<img ".concat('class="',c.className,'" ','draggable="false" ','alt="',a,'"',' src="',i,'"'),d=c.attributes(a,h);for(f in d)d.hasOwnProperty(f)&&0!==f.indexOf("on")&&g.indexOf(" "+f+"=")===-1&&(g=g.concat(" ",f,'="',b(d[f]),'"'));g=g.concat("/>")}return g})}function h(a){return q[a]}function i(){return null}function j(a){return"number"==typeof a?a+"x"+a:a}function k(a){var b="string"==typeof a?parseInt(a,16):a;return b<65536?w(b):(b-=65536,w(55296+(b>>10),56320+(1023&b)))}function l(a,b){return b&&"function"!=typeof b||(b={callback:b}),("string"==typeof a?g:f)(a,{callback:b.callback||c,attributes:"function"==typeof b.attributes?b.attributes:i,base:"string"==typeof b.base?b.base:p.base,ext:b.ext||p.ext,size:b.folder||j(b.size||p.size),className:b.className||p.className,onerror:b.onerror||p.onerror})}function m(a,b){return String(a).replace(r,b)}function n(a){r.lastIndex=0;var b=r.test(a);return r.lastIndex=0,b}function o(a,b){for(var c=[],d=0,e=0,f=0;f<a.length;)d=a.charCodeAt(f++),e?(c.push((65536+(e-55296<<10)+(d-56320)).toString(16)),e=0):55296<=d&&d<=56319?e=d:c.push(d.toString(16));return c.join(b||"-")}var p={base:"https://twemoji.maxcdn.com/2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:k,toCodePoint:o},onerror:function(){this.parentNode&&this.parentNode.replaceChild(a(this.alt,!1),this)},parse:l,replace:m,test:n},q={"&":"&","<":"<",">":">","'":"'",'"':"""},r=/(?:\ud83d[\udc68\udc69])(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddb0-\uddb3])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[\u0023\u002a\u0030-\u0039]\ufe0f?\u20e3|(?:[\u00a9\u00ae\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\udeeb\udeec\udef4-\udef9]|\ud83e[\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd40-\udd45\udd47-\udd70\udd73-\udd76\udd7a\udd7c-\udda2\uddb4\uddb7\uddc0-\uddc2\uddd0\uddde-\uddff]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,s=/\uFE0F/g,t=String.fromCharCode(8205),u=/[&<>'"]/g,v=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,w=String.fromCharCode;return p}();
\ No newline at end of file
return ! isIdentical;
case 'emoji':
/*
- * Emoji allows people of all gender levitate and so does WordPress.
+ * She's the hero Emoji deserves, but not the one it needs right now.
*
- * To test for support, try to render a new emoji (woman in business suit levitating),
+ * To test for support, try to render a new emoji (female superhero),
* then compare it to how it would look if the browser doesn't render it correctly
- * (person in business suit levitating + female sign).
+ * (superhero + female sign).
*/
isIdentical = emojiSetsRenderIdentically(
- [55357, 56692, 8205, 9792, 65039],
- [55357, 56692, 8203, 9792, 65039]
+ [55358, 56760, 9792, 65039],
+ [55358, 56760, 8203, 9792, 65039]
);
return ! isIdentical;
}
-!function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55357,56692,8205,9792,65039],[55357,56692,8203,9792,65039]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings);
\ No newline at end of file
+!function(a,b,c){function d(a,b){var c=String.fromCharCode;l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,a),0,0);var d=k.toDataURL();l.clearRect(0,0,k.width,k.height),l.fillText(c.apply(this,b),0,0);var e=k.toDataURL();return d===e}function e(a){var b;if(!l||!l.fillText)return!1;switch(l.textBaseline="top",l.font="600 32px Arial",a){case"flag":return!(b=d([55356,56826,55356,56819],[55356,56826,8203,55356,56819]))&&(b=d([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]),!b);case"emoji":return b=d([55358,56760,9792,65039],[55358,56760,8203,9792,65039]),!b}return!1}function f(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var g,h,i,j,k=b.createElement("canvas"),l=k.getContext&&k.getContext("2d");for(j=Array("flag","emoji"),c.supports={everything:!0,everythingExceptFlag:!0},i=0;i<j.length;i++)c.supports[j[i]]=e(j[i]),c.supports.everything=c.supports.everything&&c.supports[j[i]],"flag"!==j[i]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[j[i]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(h=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",h,!1),a.addEventListener("load",h,!1)):(a.attachEvent("onload",h),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),g=c.source||{},g.concatemoji?f(g.concatemoji):g.wpemoji&&g.twemoji&&(f(g.twemoji),f(g.wpemoji)))}(window,document,window._wpemojiSettings);
\ No newline at end of file
// Source: wp-includes/js/twemoji.min.js
-var twemoji=function(){"use strict";function a(a,b){return document.createTextNode(b?a.replace(s,""):a)}function b(a){return a.replace(u,h)}function c(a,b){return"".concat(b.base,b.size,"/",a,b.ext)}function d(a,b){for(var c,e,f=a.childNodes,g=f.length;g--;)c=f[g],e=c.nodeType,3===e?b.push(c):1!==e||"ownerSVGElement"in c||v.test(c.nodeName.toLowerCase())||d(c,b);return b}function e(a){return o(a.indexOf(t)<0?a.replace(s,""):a)}function f(b,c){for(var f,g,h,i,j,k,l,m,n,o,p,q,s,t=d(b,[]),u=t.length;u--;){for(h=!1,i=document.createDocumentFragment(),j=t[u],k=j.nodeValue,m=0;l=r.exec(k);){if(n=l.index,n!==m&&i.appendChild(a(k.slice(m,n),!0)),p=l[0],q=e(p),m=n+p.length,s=c.callback(q,c)){o=new Image,o.onerror=c.onerror,o.setAttribute("draggable","false"),f=c.attributes(p,q);for(g in f)f.hasOwnProperty(g)&&0!==g.indexOf("on")&&!o.hasAttribute(g)&&o.setAttribute(g,f[g]);o.className=c.className,o.alt=p,o.src=s,h=!0,i.appendChild(o)}o||i.appendChild(a(p,!1)),o=null}h&&(m<k.length&&i.appendChild(a(k.slice(m),!0)),j.parentNode.replaceChild(i,j))}return b}function g(a,c){return m(a,function(a){var d,f,g=a,h=e(a),i=c.callback(h,c);if(i){g="<img ".concat('class="',c.className,'" ','draggable="false" ','alt="',a,'"',' src="',i,'"'),d=c.attributes(a,h);for(f in d)d.hasOwnProperty(f)&&0!==f.indexOf("on")&&g.indexOf(" "+f+"=")===-1&&(g=g.concat(" ",f,'="',b(d[f]),'"'));g=g.concat("/>")}return g})}function h(a){return q[a]}function i(){return null}function j(a){return"number"==typeof a?a+"x"+a:a}function k(a){var b="string"==typeof a?parseInt(a,16):a;return b<65536?w(b):(b-=65536,w(55296+(b>>10),56320+(1023&b)))}function l(a,b){return b&&"function"!=typeof b||(b={callback:b}),("string"==typeof a?g:f)(a,{callback:b.callback||c,attributes:"function"==typeof b.attributes?b.attributes:i,base:"string"==typeof b.base?b.base:p.base,ext:b.ext||p.ext,size:b.folder||j(b.size||p.size),className:b.className||p.className,onerror:b.onerror||p.onerror})}function m(a,b){return String(a).replace(r,b)}function n(a){r.lastIndex=0;var b=r.test(a);return r.lastIndex=0,b}function o(a,b){for(var c=[],d=0,e=0,f=0;f<a.length;)d=a.charCodeAt(f++),e?(c.push((65536+(e-55296<<10)+(d-56320)).toString(16)),e=0):55296<=d&&d<=56319?e=d:c.push(d.toString(16));return c.join(b||"-")}var p={base:"https://twemoji.maxcdn.com/2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:k,toCodePoint:o},onerror:function(){this.parentNode&&this.parentNode.replaceChild(a(this.alt,!1),this)},parse:l,replace:m,test:n},q={"&":"&","<":"<",">":">","'":"'",'"':"""},r=/\ud83d[\udc68-\udc69](?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)(?:\ufe0f|\ud83c[\udffb-\udfff])\u200d[\u2640\u2642]\ufe0f|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|(?:\u002a)\ufe0f?\u20e3|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca-\udfcc]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd74\udd75\udd7a\udd90\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddd1-\udddd]|[\u261d\u26f7\u26f9\u270a-\u270d])(?:\ud83c[\udffb-\udfff]|)|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\u0023\u20e3|\u0030\u20e3|\u0031\u20e3|\u0032\u20e3|\u0033\u20e3|\u0034\u20e3|\u0035\u20e3|\u0036\u20e3|\u0037\u20e3|\u0038\u20e3|\u0039\u20e3|\ud800\udc00|\ud83c[\udc04\udccf\udd70\udd71\udd7e\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude02\ude1a\ude2f\ude32-\ude3a\ude50\ude51\udf00-\udf21\udf24-\udf84\udf86-\udf93\udf96\udf97\udf99-\udf9b\udf9e-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcd-\udff0\udff3-\udff5\udff7-\udfff]|\ud83d[\udc00-\udc41\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfd\udcff-\udd3d\udd49-\udd4e\udd50-\udd67\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda4\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\udecb\udecd-\uded2\udee0-\udee5\udee9\udeeb\udeec\udef0\udef3-\udef8]|\ud83e[\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd40-\udd45\udd47-\udd4c\udd50-\udd6b\udd80-\udd97\uddc0\uddd0\uddde-\udde6]|[\u00a9\u00ae\u203c\u2049\u2122\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26ce\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2705\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2728\u2733\u2734\u2744\u2747\u274c\u274e\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27a1\u27b0\u27bf\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299\ue50a]|(?:\u2639)(?:\ufe0f|(?!\ufe0e))/g,s=/\uFE0F/g,t=String.fromCharCode(8205),u=/[&<>'"]/g,v=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,w=String.fromCharCode;return p}();
+var twemoji=function(){"use strict";function a(a,b){return document.createTextNode(b?a.replace(s,""):a)}function b(a){return a.replace(u,h)}function c(a,b){return"".concat(b.base,b.size,"/",a,b.ext)}function d(a,b){for(var c,e,f=a.childNodes,g=f.length;g--;)c=f[g],e=c.nodeType,3===e?b.push(c):1!==e||"ownerSVGElement"in c||v.test(c.nodeName.toLowerCase())||d(c,b);return b}function e(a){return o(a.indexOf(t)<0?a.replace(s,""):a)}function f(b,c){for(var f,g,h,i,j,k,l,m,n,o,p,q,s,t=d(b,[]),u=t.length;u--;){for(h=!1,i=document.createDocumentFragment(),j=t[u],k=j.nodeValue,m=0;l=r.exec(k);){if(n=l.index,n!==m&&i.appendChild(a(k.slice(m,n),!0)),p=l[0],q=e(p),m=n+p.length,s=c.callback(q,c)){o=new Image,o.onerror=c.onerror,o.setAttribute("draggable","false"),f=c.attributes(p,q);for(g in f)f.hasOwnProperty(g)&&0!==g.indexOf("on")&&!o.hasAttribute(g)&&o.setAttribute(g,f[g]);o.className=c.className,o.alt=p,o.src=s,h=!0,i.appendChild(o)}o||i.appendChild(a(p,!1)),o=null}h&&(m<k.length&&i.appendChild(a(k.slice(m),!0)),j.parentNode.replaceChild(i,j))}return b}function g(a,c){return m(a,function(a){var d,f,g=a,h=e(a),i=c.callback(h,c);if(i){g="<img ".concat('class="',c.className,'" ','draggable="false" ','alt="',a,'"',' src="',i,'"'),d=c.attributes(a,h);for(f in d)d.hasOwnProperty(f)&&0!==f.indexOf("on")&&g.indexOf(" "+f+"=")===-1&&(g=g.concat(" ",f,'="',b(d[f]),'"'));g=g.concat("/>")}return g})}function h(a){return q[a]}function i(){return null}function j(a){return"number"==typeof a?a+"x"+a:a}function k(a){var b="string"==typeof a?parseInt(a,16):a;return b<65536?w(b):(b-=65536,w(55296+(b>>10),56320+(1023&b)))}function l(a,b){return b&&"function"!=typeof b||(b={callback:b}),("string"==typeof a?g:f)(a,{callback:b.callback||c,attributes:"function"==typeof b.attributes?b.attributes:i,base:"string"==typeof b.base?b.base:p.base,ext:b.ext||p.ext,size:b.folder||j(b.size||p.size),className:b.className||p.className,onerror:b.onerror||p.onerror})}function m(a,b){return String(a).replace(r,b)}function n(a){r.lastIndex=0;var b=r.test(a);return r.lastIndex=0,b}function o(a,b){for(var c=[],d=0,e=0,f=0;f<a.length;)d=a.charCodeAt(f++),e?(c.push((65536+(e-55296<<10)+(d-56320)).toString(16)),e=0):55296<=d&&d<=56319?e=d:c.push(d.toString(16));return c.join(b||"-")}var p={base:"https://twemoji.maxcdn.com/2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:k,toCodePoint:o},onerror:function(){this.parentNode&&this.parentNode.replaceChild(a(this.alt,!1),this)},parse:l,replace:m,test:n},q={"&":"&","<":"<",">":">","'":"'",'"':"""},r=/(?:\ud83d[\udc68\udc69])(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddb0-\uddb3])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f)|[\u0023\u002a\u0030-\u0039]\ufe0f?\u20e3|(?:[\u00a9\u00ae\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddb5\uddb6\uddb8\uddb9\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\udeeb\udeec\udef4-\udef9]|\ud83e[\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd40-\udd45\udd47-\udd70\udd73-\udd76\udd7a\udd7c-\udda2\uddb4\uddb7\uddc0-\uddc2\uddd0\uddde-\uddff]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,s=/\uFE0F/g,t=String.fromCharCode(8205),u=/[&<>'"]/g,v=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,w=String.fromCharCode;return p}();
// Source: wp-includes/js/wp-emoji.min.js
!function(a,b){function c(){function c(){return!j.implementation.hasFeature||j.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1")}function d(){if(!k){if("undefined"==typeof a.twemoji){if(l>600)return;return a.clearTimeout(h),h=a.setTimeout(d,50),void l++}g=a.twemoji,k=!0,i&&new i(function(a){for(var b,c,d,g,h=a.length;h--;){if(b=a[h].addedNodes,c=a[h].removedNodes,d=b.length,1===d&&1===c.length&&3===b[0].nodeType&&"IMG"===c[0].nodeName&&b[0].data===c[0].alt&&"load-failed"===c[0].getAttribute("data-error"))return;for(;d--;){if(g=b[d],3===g.nodeType){if(!g.parentNode)continue;if(m)for(;g.nextSibling&&3===g.nextSibling.nodeType;)g.nodeValue=g.nodeValue+g.nextSibling.nodeValue,g.parentNode.removeChild(g.nextSibling);g=g.parentNode}!g||1!==g.nodeType||g.className&&"string"==typeof g.className&&g.className.indexOf("wp-exclude-emoji")!==-1||e(g.textContent)&&f(g)}}}).observe(j.body,{childList:!0,subtree:!0}),f(j.body)}}function e(a){var b=/[\u203C\u2049\u20E3\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2300\u231A\u231B\u2328\u2388\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638\u2639\u263A\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692\u2693\u2694\u2696\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753\u2754\u2755\u2757\u2763\u2764\u2795\u2796\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05\u2B06\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]/,c=/[\uDC00-\uDFFF]/;return!!a&&(c.test(a)||b.test(a))}function f(a,d){var e;return!b.supports.everything&&g&&a&&("string"==typeof a||a.childNodes&&a.childNodes.length)?(d=d||{},e={base:c()?b.svgUrl:b.baseUrl,ext:c()?b.svgExt:b.ext,className:d.className||"emoji",callback:function(a,c){switch(a){case"a9":case"ae":case"2122":case"2194":case"2660":case"2663":case"2665":case"2666":return!1}return!(b.supports.everythingExceptFlag&&!/^1f1(?:e[6-9a-f]|f[0-9a-f])-1f1(?:e[6-9a-f]|f[0-9a-f])$/.test(a)&&!/^(1f3f3-fe0f-200d-1f308|1f3f4-200d-2620-fe0f)$/.test(a))&&"".concat(c.base,a,c.ext)},onerror:function(){g.parentNode&&(this.setAttribute("data-error","load-failed"),g.parentNode.replaceChild(j.createTextNode(g.alt),g))}},"object"==typeof d.imgAttr&&(e.attributes=function(){return d.imgAttr}),g.parse(a,e)):a}var g,h,i=a.MutationObserver||a.WebKitMutationObserver||a.MozMutationObserver,j=a.document,k=!1,l=0,m=a.navigator.userAgent.indexOf("Trident/7.0")>0;return b&&(b.DOMReady?d():b.readyCallback=d),{parse:f,test:e}}a.wp=a.wp||{},a.wp.emoji=new c}(window,window._wpemojiSettings);
\ No newline at end of file
*/
return apply_filters( 'parent_theme_file_path', $path, $file );
}
+
+/**
+ * Retrieves the URL to the privacy policy page.
+ *
+ * @since 4.9.6
+ *
+ * @return string The URL to the privacy policy page. Empty string if it doesn't exist.
+ */
+function get_privacy_policy_url() {
+ $url = '';
+ $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
+
+ if ( ! empty( $policy_page_id ) && get_post_status( $policy_page_id ) === 'publish' ) {
+ $url = (string) get_permalink( $policy_page_id );
+ }
+
+ /**
+ * Filters the URL of the privacy policy page.
+ *
+ * @since 4.9.6
+ *
+ * @param string $url The URL to the privacy policy page. Empty string
+ * if it doesn't exist.
+ * @param int $policy_page_id The ID of privacy policy page.
+ */
+ return apply_filters( 'privacy_policy_url', $url, $policy_page_id );
+}
+
+/**
+ * Displays the privacy policy link with formatting, when applicable.
+ *
+ * @since 4.9.6
+ *
+ * @param string $before Optional. Display before privacy policy link. Default empty.
+ * @param string $after Optional. Display after privacy policy link. Default empty.
+ */
+function the_privacy_policy_link( $before = '', $after = '' ) {
+ echo get_the_privacy_policy_link( $before, $after );
+}
+
+/**
+ * Returns the privacy policy link with formatting, when applicable.
+ *
+ * @since 4.9.6
+ *
+ * @param string $before Optional. Display before privacy policy link. Default empty.
+ * @param string $after Optional. Display after privacy policy link. Default empty.
+ *
+ * @return string Markup for the link and surrounding elements. Empty string if it
+ * doesn't exist.
+ */
+function get_the_privacy_policy_link( $before = '', $after = '' ) {
+ $link = '';
+ $privacy_policy_url = get_privacy_policy_url();
+ $policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );
+ $page_title = ( $policy_page_id ) ? get_the_title( $policy_page_id ) : '';
+
+ if ( $privacy_policy_url && $page_title ) {
+ $link = sprintf(
+ '<a class="privacy-policy-link" href="%s">%s</a>',
+ esc_url( $privacy_policy_url ),
+ esc_html( $page_title )
+ );
+ }
+
+ /**
+ * Filters the privacy policy link.
+ *
+ * @since 4.9.6
+ *
+ * @param string $link The privacy policy link. Empty string if it
+ * doesn't exist.
+ * @param string $privacy_policy_url The URL of the privacy policy. Empty string
+ * if it doesn't exist.
+ */
+ $link = apply_filters( 'the_privacy_policy_link', $link, $privacy_policy_url );
+
+ if ( $link ) {
+ return $before . $link . $after;
+ }
+
+ return '';
+}
'noItemsFound' => __( 'No items found.' ),
'insertIntoPost' => $post_type_object->labels->insert_into_item,
'unattached' => __( 'Unattached' ),
+ 'mine' => _x( 'Mine', 'media items' ),
'trash' => _x( 'Trash', 'noun' ),
'uploadedToThisPost' => $post_type_object->labels->uploaded_to_this_item,
'warnDelete' => __( "You are about to permanently delete this item from your site.\nThis action cannot be undone.\n 'Cancel' to stop, 'OK' to delete." ),
return array( $mediaelement, $wpmediaelement );
}
+
+/**
+ * Registers the personal data exporter for media
+ *
+ * @param array $exporters An array of personal data exporters.
+ * @return array An array of personal data exporters.
+ */
+function wp_register_media_personal_data_exporter( $exporters ) {
+ $exporters['wordpress-media'] = array(
+ 'exporter_friendly_name' => __( 'WordPress Media' ),
+ 'callback' => 'wp_media_personal_data_exporter',
+ );
+
+ return $exporters;
+}
+
+/**
+ * Finds and exports attachments associated with an email address.
+ *
+ * @since 4.9.6
+ *
+ * @param string $email_address The attachment owner email address.
+ * @param int $page Attachment page.
+ * @return array $return An array of personal data.
+ */
+function wp_media_personal_data_exporter( $email_address, $page = 1 ) {
+ // Limit us to 50 attachments at a time to avoid timing out.
+ $number = 50;
+ $page = (int) $page;
+
+ $data_to_export = array();
+
+ $user = get_user_by( 'email' , $email_address );
+ if ( false === $user ) {
+ return array(
+ 'data' => $data_to_export,
+ 'done' => true,
+ );
+ }
+
+ $post_query = new WP_Query(
+ array(
+ 'author' => $user->ID,
+ 'posts_per_page' => $number,
+ 'paged' => $page,
+ 'post_type' => 'attachment',
+ 'post_status' => 'any',
+ 'orderby' => 'ID',
+ 'order' => 'ASC',
+ )
+ );
+
+ foreach ( (array) $post_query->posts as $post ) {
+ $attachment_url = wp_get_attachment_url( $post->ID );
+
+ if ( $attachment_url ) {
+ $post_data_to_export = array(
+ array( 'name' => __( 'URL' ), 'value' => $attachment_url ),
+ );
+
+ $data_to_export[] = array(
+ 'group_id' => 'media',
+ 'group_label' => __( 'Media' ),
+ 'item_id' => "post-{$post->ID}",
+ 'data' => $post_data_to_export,
+ );
+ }
+ }
+
+ $done = $post_query->max_num_pages <= $page;
+
+ return array(
+ 'data' => $data_to_export,
+ 'done' => $done,
+ );
+}
return false;
}
+ $meta_subtype = get_object_subtype( $meta_type, $object_id );
+
$column = sanitize_key($meta_type . '_id');
// expected_slashed ($meta_key)
$meta_key = wp_unslash($meta_key);
$meta_value = wp_unslash($meta_value);
- $meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );
+ $meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type, $meta_subtype );
/**
* Filters whether to add metadata of a specific type.
return false;
}
+ $meta_subtype = get_object_subtype( $meta_type, $object_id );
+
$column = sanitize_key($meta_type . '_id');
$id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id';
$meta_key = wp_unslash($meta_key);
$passed_value = $meta_value;
$meta_value = wp_unslash($meta_value);
- $meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );
+ $meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type, $meta_subtype );
/**
* Filters whether to update metadata of a specific type.
return false;
}
+ $meta_subtype = get_object_subtype( $meta_type, $object_id );
+
// Sanitize the meta
$_meta_value = $meta_value;
- $meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );
- $meta_value = maybe_serialize( $meta_value );
+ $meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type, $meta_subtype );
+ $meta_value = maybe_serialize( $meta_value );
// Format the data query arguments.
$data = array(
* Sanitize meta value.
*
* @since 3.1.3
+ * @since 4.9.8 The `$object_subtype` parameter was added.
*
* @param string $meta_key Meta key.
* @param mixed $meta_value Meta value to sanitize.
*
* @return mixed Sanitized $meta_value.
*/
-function sanitize_meta( $meta_key, $meta_value, $object_type ) {
+function sanitize_meta( $meta_key, $meta_value, $object_type, $object_subtype = '' ) {
+ if ( ! empty( $object_subtype ) && has_filter( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ) ) {
+
+ /**
+ * Filters the sanitization of a specific meta key of a specific meta type and subtype.
+ *
+ * The dynamic portions of the hook name, `$object_type`, `$meta_key`,
+ * and `$object_subtype`, refer to the metadata object type (comment, post, term or user),
+ * the meta key value, and the object subtype respectively.
+ *
+ * @since 4.9.8
+ *
+ * @param mixed $meta_value Meta value to sanitize.
+ * @param string $meta_key Meta key.
+ * @param string $object_type Object type.
+ * @param string $object_subtype Object subtype.
+ */
+ return apply_filters( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $meta_value, $meta_key, $object_type, $object_subtype );
+ }
+
/**
* Filters the sanitization of a specific meta key of a specific meta type.
*
/**
* Registers a meta key.
*
+ * It is recommended to register meta keys for a specific combination of object type and object subtype. If passing
+ * an object subtype is omitted, the meta key will be registered for the entire object type, however it can be partly
+ * overridden in case a more specific meta key of the same name exists for the same object type and a subtype.
+ *
+ * If an object type does not support any subtypes, such as users or comments, you should commonly call this function
+ * without passing a subtype.
+ *
* @since 3.3.0
* @since 4.6.0 {@link https://core.trac.wordpress.org/ticket/35658 Modified
* to support an array of data to attach to registered meta keys}. Previous arguments for
* `$sanitize_callback` and `$auth_callback` have been folded into this array.
+ * @since 4.9.8 The `$object_subtype` argument was added to the arguments array.
*
* @param string $object_type Type of object this meta is registered to.
* @param string $meta_key Meta key to register.
* @param array $args {
* Data used to describe the meta key when registered.
*
+ * @type string $object_subtype A subtype; e.g. if the object type is "post", the post type. If left empty,
+ * the meta key will be registered on the entire object type. Default empty.
* @type string $type The type of data associated with this meta key.
* Valid values are 'string', 'boolean', 'integer', and 'number'.
* @type string $description A description of the data attached to this meta key.
}
$defaults = array(
+ 'object_subtype' => '',
'type' => 'string',
'description' => '',
'single' => false,
$args = apply_filters( 'register_meta_args', $args, $defaults, $object_type, $meta_key );
$args = wp_parse_args( $args, $defaults );
+ $object_subtype = ! empty( $args['object_subtype'] ) ? $args['object_subtype'] : '';
+
// If `auth_callback` is not provided, fall back to `is_protected_meta()`.
if ( empty( $args['auth_callback'] ) ) {
if ( is_protected_meta( $meta_key, $object_type ) ) {
// Back-compat: old sanitize and auth callbacks are applied to all of an object type.
if ( is_callable( $args['sanitize_callback'] ) ) {
- add_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'], 10, 3 );
+ if ( ! empty( $object_subtype ) ) {
+ add_filter( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['sanitize_callback'], 10, 4 );
+ } else {
+ add_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'], 10, 3 );
+ }
}
if ( is_callable( $args['auth_callback'] ) ) {
- add_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'], 10, 6 );
+ if ( ! empty( $object_subtype ) ) {
+ add_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['auth_callback'], 10, 6 );
+ } else {
+ add_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'], 10, 6 );
+ }
}
// Global registry only contains meta keys registered with the array of arguments added in 4.6.0.
if ( ! $has_old_auth_cb && ! $has_old_sanitize_cb ) {
- $wp_meta_keys[ $object_type ][ $meta_key ] = $args;
+ unset( $args['object_subtype'] );
+
+ $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] = $args;
return true;
}
* Checks if a meta key is registered.
*
* @since 4.6.0
+ * @since 4.9.8 The `$object_subtype` parameter was added.
*
* @param string $object_type The type of object.
* @param string $meta_key The meta key.
+ * @param string $object_subtype Optional. The subtype of the object type.
*
- * @return bool True if the meta key is registered to the object type. False if not.
+ * @return bool True if the meta key is registered to the object type and, if provided,
+ * the object subtype. False if not.
*/
-function registered_meta_key_exists( $object_type, $meta_key ) {
- global $wp_meta_keys;
-
- if ( ! is_array( $wp_meta_keys ) ) {
- return false;
- }
-
- if ( ! isset( $wp_meta_keys[ $object_type ] ) ) {
- return false;
- }
-
- if ( isset( $wp_meta_keys[ $object_type ][ $meta_key ] ) ) {
- return true;
- }
+function registered_meta_key_exists( $object_type, $meta_key, $object_subtype = '' ) {
+ $meta_keys = get_registered_meta_keys( $object_type, $object_subtype );
- return false;
+ return isset( $meta_keys[ $meta_key ] );
}
/**
* Unregisters a meta key from the list of registered keys.
*
* @since 4.6.0
+ * @since 4.9.8 The `$object_subtype` parameter was added.
*
- * @param string $object_type The type of object.
- * @param string $meta_key The meta key.
+ * @param string $object_type The type of object.
+ * @param string $meta_key The meta key.
+ * @param string $object_subtype Optional. The subtype of the object type.
* @return bool True if successful. False if the meta key was not registered.
*/
-function unregister_meta_key( $object_type, $meta_key ) {
+function unregister_meta_key( $object_type, $meta_key, $object_subtype = '' ) {
global $wp_meta_keys;
- if ( ! registered_meta_key_exists( $object_type, $meta_key ) ) {
+ if ( ! registered_meta_key_exists( $object_type, $meta_key, $object_subtype ) ) {
return false;
}
- $args = $wp_meta_keys[ $object_type ][ $meta_key ];
+ $args = $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ];
if ( isset( $args['sanitize_callback'] ) && is_callable( $args['sanitize_callback'] ) ) {
- remove_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'] );
+ if ( ! empty( $object_subtype ) ) {
+ remove_filter( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['sanitize_callback'] );
+ } else {
+ remove_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'] );
+ }
}
if ( isset( $args['auth_callback'] ) && is_callable( $args['auth_callback'] ) ) {
- remove_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'] );
+ if ( ! empty( $object_subtype ) ) {
+ remove_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['auth_callback'] );
+ } else {
+ remove_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'] );
+ }
}
- unset( $wp_meta_keys[ $object_type ][ $meta_key ] );
+ unset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] );
// Do some clean up
+ if ( empty( $wp_meta_keys[ $object_type ][ $object_subtype ] ) ) {
+ unset( $wp_meta_keys[ $object_type ][ $object_subtype ] );
+ }
if ( empty( $wp_meta_keys[ $object_type ] ) ) {
unset( $wp_meta_keys[ $object_type ] );
}
* Retrieves a list of registered meta keys for an object type.
*
* @since 4.6.0
+ * @since 4.9.8 The `$object_subtype` parameter was added.
*
- * @param string $object_type The type of object. Post, comment, user, term.
+ * @param string $object_type The type of object. Post, comment, user, term.
+ * @param string $object_subtype Optional. The subtype of the object type.
* @return array List of registered meta keys.
*/
-function get_registered_meta_keys( $object_type ) {
+function get_registered_meta_keys( $object_type, $object_subtype = '' ) {
global $wp_meta_keys;
- if ( ! is_array( $wp_meta_keys ) || ! isset( $wp_meta_keys[ $object_type ] ) ) {
+ if ( ! is_array( $wp_meta_keys ) || ! isset( $wp_meta_keys[ $object_type ] ) || ! isset( $wp_meta_keys[ $object_type ][ $object_subtype ] ) ) {
return array();
}
- return $wp_meta_keys[ $object_type ];
+ return $wp_meta_keys[ $object_type ][ $object_subtype ];
}
/**
* Retrieves registered metadata for a specified object.
*
+ * The results include both meta that is registered specifically for the
+ * object's subtype and meta that is registered for the entire object type.
+ *
* @since 4.6.0
*
* @param string $object_type Type of object to request metadata for. (e.g. comment, post, term, user)
* @param string $meta_key Optional. Registered metadata key. If not specified, retrieve all registered
* metadata for the specified object.
* @return mixed A single value or array of values for a key if specified. An array of all registered keys
- * and values for an object ID if not.
+ * and values for an object ID if not. False if a given $meta_key is not registered.
*/
function get_registered_metadata( $object_type, $object_id, $meta_key = '' ) {
+ $object_subtype = get_object_subtype( $object_type, $object_id );
+
if ( ! empty( $meta_key ) ) {
- if ( ! registered_meta_key_exists( $object_type, $meta_key ) ) {
+ if ( ! empty( $object_subtype ) && ! registered_meta_key_exists( $object_type, $meta_key, $object_subtype ) ) {
+ $object_subtype = '';
+ }
+
+ if ( ! registered_meta_key_exists( $object_type, $meta_key, $object_subtype ) ) {
return false;
}
- $meta_keys = get_registered_meta_keys( $object_type );
+
+ $meta_keys = get_registered_meta_keys( $object_type, $object_subtype );
$meta_key_data = $meta_keys[ $meta_key ];
$data = get_metadata( $object_type, $object_id, $meta_key, $meta_key_data['single'] );
}
$data = get_metadata( $object_type, $object_id );
+ if ( ! $data ) {
+ return array();
+ }
$meta_keys = get_registered_meta_keys( $object_type );
- $registered_data = array();
-
- // Someday, array_filter()
- foreach ( $meta_keys as $k => $v ) {
- if ( isset( $data[ $k ] ) ) {
- $registered_data[ $k ] = $data[ $k ];
- }
+ if ( ! empty( $object_subtype ) ) {
+ $meta_keys = array_merge( $meta_keys, get_registered_meta_keys( $object_type, $object_subtype ) );
}
- return $registered_data;
+ return array_intersect_key( $data, $meta_keys );
}
/**
* to be explicitly turned off is a warranty seal of sorts.
*
* @access private
- * @since 4.6.0
+ * @since 4.6.0
*
- * @param array $args Arguments from `register_meta()`.
- * @param array $default_args Default arguments for `register_meta()`.
+ * @param array $args Arguments from `register_meta()`.
+ * @param array $default_args Default arguments for `register_meta()`.
*
* @return array Filtered arguments.
*/
function _wp_register_meta_args_whitelist( $args, $default_args ) {
- $whitelist = array_keys( $default_args );
+ return array_intersect_key( $args, $default_args );
+}
- // In an anonymous function world, this would be better as an array_filter()
- foreach ( $args as $key => $value ) {
- if ( ! in_array( $key, $whitelist ) ) {
- unset( $args[ $key ] );
- }
+/**
+ * Returns the object subtype for a given object ID of a specific type.
+ *
+ * @since 4.9.8
+ *
+ * @param string $object_type Type of object to request metadata for. (e.g. comment, post, term, user)
+ * @param int $object_id ID of the object to retrieve its subtype.
+ * @return string The object subtype or an empty string if unspecified subtype.
+ */
+function get_object_subtype( $object_type, $object_id ) {
+ $object_id = (int) $object_id;
+ $object_subtype = '';
+
+ switch ( $object_type ) {
+ case 'post':
+ $post_type = get_post_type( $object_id );
+
+ if ( ! empty( $post_type ) ) {
+ $object_subtype = $post_type;
+ }
+ break;
+
+ case 'term':
+ $term = get_term( $object_id );
+ if ( ! $term instanceof WP_Term ) {
+ break;
+ }
+
+ $object_subtype = $term->taxonomy;
+ break;
+
+ case 'comment':
+ $comment = get_comment( $object_id );
+ if ( ! $comment ) {
+ break;
+ }
+
+ $object_subtype = 'comment';
+ break;
+
+ case 'user':
+ $user = get_user_by( 'id', $object_id );
+ if ( ! $user ) {
+ break;
+ }
+
+ $object_subtype = 'user';
+ break;
}
- return $args;
+ /**
+ * Filters the object subtype identifier for a non standard object type.
+ *
+ * The dynamic portion of the hook, `$object_type`, refers to the object
+ * type (post, comment, term, or user).
+ *
+ * @since 4.9.8
+ *
+ * @param string $object_subtype Empty string to override.
+ * @param int $object_id ID of the object to get the subtype for.
+ */
+ return apply_filters( "get_object_subtype_{$object_type}", $object_subtype, $object_id );
}
setcookie( PASS_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
setcookie( USER_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
setcookie( PASS_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
+
+ // Post password cookie
+ setcookie( 'wp-postpass_' . COOKIEHASH, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
}
endif;
'supports' => array(),
) );
+ register_post_type( 'user_request', array(
+ 'labels' => array(
+ 'name' => __( 'User Requests' ),
+ 'singular_name' => __( 'User Request' ),
+ ),
+ 'public' => false,
+ '_builtin' => true, /* internal use only. don't use this when registering your own post type. */
+ 'hierarchical' => false,
+ 'rewrite' => false,
+ 'query_var' => false,
+ 'can_export' => false,
+ 'delete_with_user' => false,
+ 'supports' => array(),
+ ) );
+
register_post_status( 'publish', array(
'label' => _x( 'Published', 'post status' ),
'public' => true,
'_builtin' => true, /* internal use only. */
'exclude_from_search' => false,
) );
+
+ register_post_status( 'request-pending', array(
+ 'label' => _x( 'Pending', 'request status' ),
+ 'internal' => true,
+ '_builtin' => true, /* internal use only. */
+ 'exclude_from_search' => false,
+ ) );
+
+ register_post_status( 'request-confirmed', array(
+ 'label' => _x( 'Confirmed', 'request status' ),
+ 'internal' => true,
+ '_builtin' => true, /* internal use only. */
+ 'exclude_from_search' => false,
+ ) );
+
+ register_post_status( 'request-failed', array(
+ 'label' => _x( 'Failed', 'request status' ),
+ 'internal' => true,
+ '_builtin' => true, /* internal use only. */
+ 'exclude_from_search' => false,
+ ) );
+
+ register_post_status( 'request-completed', array(
+ 'label' => _x( 'Completed', 'request status' ),
+ 'internal' => true,
+ '_builtin' => true, /* internal use only. */
+ 'exclude_from_search' => false,
+ ) );
}
/**
return $status;
}
+/**
+ * Return statuses for privacy requests.
+ *
+ * @since 5.0.0
+ *
+ * @return array
+ */
+function _wp_privacy_statuses() {
+ return array(
+ 'request-pending' => __( 'Pending' ), // Pending confirmation from user.
+ 'request-confirmed' => __( 'Confirmed' ), // User has confirmed the action.
+ 'request-failed' => __( 'Failed' ), // User failed to confirm the action.
+ 'request-completed' => __( 'Completed' ), // Admin has handled the request.
+ );
+}
+
/**
* Register a post status. Do not use before init.
*
return $deleted;
}
+/**
+ * Registers a meta key for posts.
+ *
+ * @since 4.9.8
+ *
+ * @param string $post_type Post type to register a meta key for. Pass an empty string
+ * to register the meta key across all existing post types.
+ * @param string $meta_key The meta key to register.
+ * @param array $args Data used to describe the meta key when registered. See
+ * {@see register_meta()} for a list of supported arguments.
+ * @return bool True if the meta key was successfully registered, false if not.
+ */
+function register_post_meta( $post_type, $meta_key, array $args ) {
+ $args['object_subtype'] = $post_type;
+
+ return register_meta( 'post', $meta_key, $args );
+}
+
+/**
+ * Unregisters a meta key for posts.
+ *
+ * @since 4.9.8
+ *
+ * @param string $post_type Post type the meta key is currently registered for. Pass
+ * an empty string if the meta key is registered across all
+ * existing post types.
+ * @param string $meta_key The meta key to unregister.
+ * @return bool True on success, false if the meta key was not previously registered.
+ */
+function unregister_post_meta( $post_type, $meta_key ) {
+ return unregister_meta_key( 'post', $meta_key, $post_type );
+}
+
/**
* Retrieve post meta fields, based on post ID.
*
* @return string Unique slug for the post, based on $post_name (with a -1, -2, etc. suffix)
*/
function wp_unique_post_slug( $slug, $post_ID, $post_status, $post_type, $post_parent ) {
- if ( in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) || ( 'inherit' == $post_status && 'revision' == $post_type ) )
+ if ( in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) || ( 'inherit' == $post_status && 'revision' == $post_type ) || 'user_request' === $post_type )
return $slug;
global $wpdb, $wp_rewrite;
/** This action is documented in wp-includes/post.php */
do_action( 'deleted_post', $post_id );
+ wp_delete_attachment_files( $post_id, $meta, $backup_sizes, $file );
+
+ clean_post_cache( $post );
+
+ return $post;
+}
+
+/**
+ * Deletes all files that belong to the given attachment.
+ *
+ * @since 4.9.7
+ *
+ * @param int $post_id Attachment ID.
+ * @param array $meta The attachment's meta data.
+ * @param array $backup_sizes The meta data for the attachment's backup images.
+ * @param string $file Absolute path to the attachment's file.
+ * @return bool True on success, false on failure.
+ */
+function wp_delete_attachment_files( $post_id, $meta, $backup_sizes, $file ) {
+ global $wpdb;
+
$uploadpath = wp_get_upload_dir();
+ $deleted = true;
- if ( ! empty($meta['thumb']) ) {
+ if ( ! empty( $meta['thumb'] ) ) {
// Don't delete the thumb if another attachment uses it.
- if (! $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE %s AND post_id <> %d", '%' . $wpdb->esc_like( $meta['thumb'] ) . '%', $post_id)) ) {
- $thumbfile = str_replace(basename($file), $meta['thumb'], $file);
- /** This filter is documented in wp-includes/functions.php */
- $thumbfile = apply_filters( 'wp_delete_file', $thumbfile );
- @ unlink( path_join($uploadpath['basedir'], $thumbfile) );
+ if ( ! $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE %s AND post_id <> %d", '%' . $wpdb->esc_like( $meta['thumb'] ) . '%', $post_id ) ) ) {
+ $thumbfile = str_replace( basename( $file ), $meta['thumb'], $file );
+ if ( ! empty( $thumbfile ) ) {
+ $thumbfile = path_join( $uploadpath['basedir'], $thumbfile );
+ $thumbdir = path_join( $uploadpath['basedir'], dirname( $file ) );
+
+ if ( ! wp_delete_file_from_directory( $thumbfile, $thumbdir ) ) {
+ $deleted = false;
+ }
+ }
}
}
// Remove intermediate and backup images if there are any.
if ( isset( $meta['sizes'] ) && is_array( $meta['sizes'] ) ) {
+ $intermediate_dir = path_join( $uploadpath['basedir'], dirname( $file ) );
foreach ( $meta['sizes'] as $size => $sizeinfo ) {
$intermediate_file = str_replace( basename( $file ), $sizeinfo['file'], $file );
- /** This filter is documented in wp-includes/functions.php */
- $intermediate_file = apply_filters( 'wp_delete_file', $intermediate_file );
- @ unlink( path_join( $uploadpath['basedir'], $intermediate_file ) );
+ if ( ! empty( $intermediate_file ) ) {
+ $intermediate_file = path_join( $uploadpath['basedir'], $intermediate_file );
+
+ if ( ! wp_delete_file_from_directory( $intermediate_file, $intermediate_dir ) ) {
+ $deleted = false;
+ }
+ }
}
}
- if ( is_array($backup_sizes) ) {
+ if ( is_array( $backup_sizes ) ) {
+ $del_dir = path_join( $uploadpath['basedir'], dirname( $meta['file'] ) );
foreach ( $backup_sizes as $size ) {
- $del_file = path_join( dirname($meta['file']), $size['file'] );
- /** This filter is documented in wp-includes/functions.php */
- $del_file = apply_filters( 'wp_delete_file', $del_file );
- @ unlink( path_join($uploadpath['basedir'], $del_file) );
+ $del_file = path_join( dirname( $meta['file'] ), $size['file'] );
+ if ( ! empty( $del_file ) ) {
+ $del_file = path_join( $uploadpath['basedir'], $del_file );
+
+ if ( ! wp_delete_file_from_directory( $del_file, $del_dir ) ) {
+ $deleted = false;
+ }
+ }
}
}
- wp_delete_file( $file );
-
- clean_post_cache( $post );
+ if ( ! wp_delete_file_from_directory( $file, $uploadpath['basedir'] ) ) {
+ $deleted = false;
+ }
- return $post;
+ return $deleted;
}
/**
*
* @since 4.9.3
*
- * @param string $id The redirect post ID.
+ * @param int $id The redirect post ID.
*/
$id = apply_filters( 'old_slug_redirect_post_id', $id );
* @param string $post_type The current post type based on the query vars.
* @return int $id The Post ID.
*/
-
function _find_post_by_old_date( $post_type ) {
global $wpdb;
}
$attachment = $this->prepare_item_for_database( $request );
- $attachment->file = $file;
$attachment->post_mime_type = $type;
$attachment->guid = $url;
$attachment->post_title = preg_replace( '/\.[^.]+$/', '', basename( $file ) );
}
- $id = wp_insert_post( wp_slash( (array) $attachment ), true );
+ // $post_parent is inherited from $attachment['post_parent'].
+ $id = wp_insert_attachment( wp_slash( (array) $attachment ), $file, 0, true );
if ( is_wp_error( $id ) ) {
if ( 'db_update_error' === $id->get_error_code() ) {
*/
public function prepare_item_for_response( $post, $request ) {
$response = parent::prepare_item_for_response( $post, $request );
- $data = $response->get_data();
+ $fields = $this->get_fields_for_response( $request );
+ $data = $response->get_data();
+
+ if ( in_array( 'description', $fields, true ) ) {
+ $data['description'] = array(
+ 'raw' => $post->post_content,
+ /** This filter is documented in wp-includes/post-template.php */
+ 'rendered' => apply_filters( 'the_content', $post->post_content ),
+ );
+ }
- $data['description'] = array(
- 'raw' => $post->post_content,
+ if ( in_array( 'caption', $fields, true ) ) {
/** This filter is documented in wp-includes/post-template.php */
- 'rendered' => apply_filters( 'the_content', $post->post_content ),
- );
+ $caption = apply_filters( 'the_excerpt', apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ) );
+ $data['caption'] = array(
+ 'raw' => $post->post_excerpt,
+ 'rendered' => $caption,
+ );
+ }
- /** This filter is documented in wp-includes/post-template.php */
- $caption = apply_filters( 'the_excerpt', apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ) );
- $data['caption'] = array(
- 'raw' => $post->post_excerpt,
- 'rendered' => $caption,
- );
+ if ( in_array( 'alt_text', $fields, true ) ) {
+ $data['alt_text'] = get_post_meta( $post->ID, '_wp_attachment_image_alt', true );
+ }
+
+ if ( in_array( 'media_type', $fields, true ) ) {
+ $data['media_type'] = wp_attachment_is_image( $post->ID ) ? 'image' : 'file';
+ }
- $data['alt_text'] = get_post_meta( $post->ID, '_wp_attachment_image_alt', true );
- $data['media_type'] = wp_attachment_is_image( $post->ID ) ? 'image' : 'file';
- $data['mime_type'] = $post->post_mime_type;
- $data['media_details'] = wp_get_attachment_metadata( $post->ID );
- $data['post'] = ! empty( $post->post_parent ) ? (int) $post->post_parent : null;
- $data['source_url'] = wp_get_attachment_url( $post->ID );
+ if ( in_array( 'mime_type', $fields, true ) ) {
+ $data['mime_type'] = $post->post_mime_type;
+ }
- // Ensure empty details is an empty object.
- if ( empty( $data['media_details'] ) ) {
- $data['media_details'] = new stdClass;
- } elseif ( ! empty( $data['media_details']['sizes'] ) ) {
+ if ( in_array( 'media_details', $fields, true ) ) {
+ $data['media_details'] = wp_get_attachment_metadata( $post->ID );
- foreach ( $data['media_details']['sizes'] as $size => &$size_data ) {
+ // Ensure empty details is an empty object.
+ if ( empty( $data['media_details'] ) ) {
+ $data['media_details'] = new stdClass;
+ } elseif ( ! empty( $data['media_details']['sizes'] ) ) {
- if ( isset( $size_data['mime-type'] ) ) {
- $size_data['mime_type'] = $size_data['mime-type'];
- unset( $size_data['mime-type'] );
- }
+ foreach ( $data['media_details']['sizes'] as $size => &$size_data ) {
- // Use the same method image_downsize() does.
- $image_src = wp_get_attachment_image_src( $post->ID, $size );
- if ( ! $image_src ) {
- continue;
+ if ( isset( $size_data['mime-type'] ) ) {
+ $size_data['mime_type'] = $size_data['mime-type'];
+ unset( $size_data['mime-type'] );
+ }
+
+ // Use the same method image_downsize() does.
+ $image_src = wp_get_attachment_image_src( $post->ID, $size );
+ if ( ! $image_src ) {
+ continue;
+ }
+
+ $size_data['source_url'] = $image_src[0];
}
- $size_data['source_url'] = $image_src[0];
+ $full_src = wp_get_attachment_image_src( $post->ID, 'full' );
+
+ if ( ! empty( $full_src ) ) {
+ $data['media_details']['sizes']['full'] = array(
+ 'file' => wp_basename( $full_src[0] ),
+ 'width' => $full_src[1],
+ 'height' => $full_src[2],
+ 'mime_type' => $post->post_mime_type,
+ 'source_url' => $full_src[0],
+ );
+ }
+ } else {
+ $data['media_details']['sizes'] = new stdClass;
}
+ }
- $full_src = wp_get_attachment_image_src( $post->ID, 'full' );
+ if ( in_array( 'post', $fields, true ) ) {
+ $data['post'] = ! empty( $post->post_parent ) ? (int) $post->post_parent : null;
+ }
- if ( ! empty( $full_src ) ) {
- $data['media_details']['sizes']['full'] = array(
- 'file' => wp_basename( $full_src[0] ),
- 'width' => $full_src[1],
- 'height' => $full_src[2],
- 'mime_type' => $post->post_mime_type,
- 'source_url' => $full_src[0],
- );
- }
- } else {
- $data['media_details']['sizes'] = new stdClass;
+ if ( in_array( 'source_url', $fields, true ) ) {
+ $data['source_url'] = wp_get_attachment_url( $post->ID );
}
$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
$data = $this->filter_response_by_context( $data, $context );
+ $links = $response->get_links();
+
// Wrap the data in a response object.
$response = rest_ensure_response( $data );
-
- $response->add_links( $this->prepare_links( $post ) );
+ $response->add_links( $links );
/**
* Filters an attachment returned from the REST API.
'type' => $type,
);
+ $size_check = self::check_upload_size( $file_data );
+ if ( is_wp_error( $size_check ) ) {
+ return $size_check;
+ }
+
$overrides = array(
'test_form' => false,
);
$overrides['action'] = 'wp_handle_mock_upload';
}
+ $size_check = self::check_upload_size( $files['file'] );
+ if ( is_wp_error( $size_check ) ) {
+ return $size_check;
+ }
+
/** Include admin functions to get access to wp_handle_upload() */
require_once ABSPATH . 'wp-admin/includes/admin.php';
return $media_types;
}
+ /**
+ * Determine if uploaded file exceeds space quota on multisite.
+ *
+ * Replicates check_upload_size().
+ *
+ * @since 4.9.8
+ *
+ * @param array $file $_FILES array for a given file.
+ * @return true|WP_Error True if can upload, error for errors.
+ */
+ protected function check_upload_size( $file ) {
+ if ( ! is_multisite() ) {
+ return true;
+ }
+
+ if ( get_site_option( 'upload_space_check_disabled' ) ) {
+ return true;
+ }
+
+ $space_left = get_upload_space_available();
+
+ $file_size = filesize( $file['tmp_name'] );
+ if ( $space_left < $file_size ) {
+ /* translators: %s: required disk space in kilobytes */
+ return new WP_Error( 'rest_upload_limited_space', sprintf( __( 'Not enough space to upload. %s KB needed.' ), number_format( ( $file_size - $space_left ) / KB_IN_BYTES ) ), array( 'status' => 400 ) );
+ }
+
+ if ( $file_size > ( KB_IN_BYTES * get_site_option( 'fileupload_maxk', 1500 ) ) ) {
+ /* translators: %s: maximum allowed file size in kilobytes */
+ return new WP_Error( 'rest_upload_file_too_big', sprintf( __( 'This file is too big. Files must be less than %s KB in size.' ), get_site_option( 'fileupload_maxk', 1500 ) ), array( 'status' => 400 ) );
+ }
+
+ if ( upload_is_user_over_quota( false ) ) {
+ return new WP_Error( 'rest_upload_user_quota_exceeded', __( 'You have used your space quota. Please delete files before uploading.' ), array( 'status' => 400 ) );
+ }
+ return true;
+ }
+
}
* @return WP_REST_Response Response object.
*/
public function prepare_item_for_response( $comment, $request ) {
- $data = array(
- 'id' => (int) $comment->comment_ID,
- 'post' => (int) $comment->comment_post_ID,
- 'parent' => (int) $comment->comment_parent,
- 'author' => (int) $comment->user_id,
- 'author_name' => $comment->comment_author,
- 'author_email' => $comment->comment_author_email,
- 'author_url' => $comment->comment_author_url,
- 'author_ip' => $comment->comment_author_IP,
- 'author_user_agent' => $comment->comment_agent,
- 'date' => mysql_to_rfc3339( $comment->comment_date ),
- 'date_gmt' => mysql_to_rfc3339( $comment->comment_date_gmt ),
- 'content' => array(
+
+ $fields = $this->get_fields_for_response( $request );
+ $data = array();
+
+ if ( in_array( 'id', $fields, true ) ) {
+ $data['id'] = (int) $comment->comment_ID;
+ }
+
+ if ( in_array( 'post', $fields, true ) ) {
+ $data['post'] = (int) $comment->comment_post_ID;
+ }
+
+ if ( in_array( 'parent', $fields, true ) ) {
+ $data['parent'] = (int) $comment->comment_parent;
+ }
+
+ if ( in_array( 'author', $fields, true ) ) {
+ $data['author'] = (int) $comment->user_id;
+ }
+
+ if ( in_array( 'author_name', $fields, true ) ) {
+ $data['author_name'] = $comment->comment_author;
+ }
+
+ if ( in_array( 'author_email', $fields, true ) ) {
+ $data['author_email'] = $comment->comment_author_email;
+ }
+
+ if ( in_array( 'author_url', $fields, true ) ) {
+ $data['author_url'] = $comment->comment_author_url;
+ }
+
+ if ( in_array( 'author_ip', $fields, true ) ) {
+ $data['author_ip'] = $comment->comment_author_IP;
+ }
+
+ if ( in_array( 'author_user_agent', $fields, true ) ) {
+ $data['author_user_agent'] = $comment->comment_agent;
+ }
+
+ if ( in_array( 'date', $fields, true ) ) {
+ $data['date'] = mysql_to_rfc3339( $comment->comment_date );
+ }
+
+ if ( in_array( 'date_gmt', $fields, true ) ) {
+ $data['date_gmt'] = mysql_to_rfc3339( $comment->comment_date_gmt );
+ }
+
+ if ( in_array( 'content', $fields, true ) ) {
+ $data['content'] = array(
/** This filter is documented in wp-includes/comment-template.php */
'rendered' => apply_filters( 'comment_text', $comment->comment_content, $comment ),
'raw' => $comment->comment_content,
- ),
- 'link' => get_comment_link( $comment ),
- 'status' => $this->prepare_status_response( $comment->comment_approved ),
- 'type' => get_comment_type( $comment->comment_ID ),
- );
+ );
+ }
- $schema = $this->get_item_schema();
+ if ( in_array( 'link', $fields, true ) ) {
+ $data['link'] = get_comment_link( $comment );
+ }
+
+ if ( in_array( 'status', $fields, true ) ) {
+ $data['status'] = $this->prepare_status_response( $comment->comment_approved );
+ }
+
+ if ( in_array( 'type', $fields, true ) ) {
+ $data['type'] = get_comment_type( $comment->comment_ID );
+ }
- if ( ! empty( $schema['properties']['author_avatar_urls'] ) ) {
+ if ( in_array( 'author_avatar_urls', $fields, true ) ) {
$data['author_avatar_urls'] = rest_get_avatar_urls( $comment->comment_author_email );
}
- if ( ! empty( $schema['properties']['meta'] ) ) {
+ if ( in_array( 'meta', $fields, true ) ) {
$data['meta'] = $this->meta->get_value( $comment->comment_ID, $request );
}
return $schema['title'];
}
+ /**
+ * Gets an array of fields to be included on the response.
+ *
+ * Included fields are based on item schema and `_fields=` request argument.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_REST_Request $request Full details about the request.
+ * @return array Fields to be included in the response.
+ */
+ public function get_fields_for_response( $request ) {
+ $schema = $this->get_item_schema();
+ $fields = isset( $schema['properties'] ) ? array_keys( $schema['properties'] ) : array();
+ if ( ! isset( $request['_fields'] ) ) {
+ return $fields;
+ }
+ $requested_fields = is_array( $request['_fields'] ) ? $request['_fields'] : preg_split( '/[\s,]+/', $request['_fields'] );
+ if ( 0 === count( $requested_fields ) ) {
+ return $fields;
+ }
+ // Trim off outside whitespace from the comma delimited list.
+ $requested_fields = array_map( 'trim', $requested_fields );
+ // Always persist 'id', because it can be needed for add_additional_fields_to_object().
+ if ( in_array( 'id', $fields, true ) ) {
+ $requested_fields[] = 'id';
+ }
+ return array_intersect( $fields, $requested_fields );
+ }
+
/**
* Retrieves an array of endpoint arguments from the item schema for the controller.
*
*/
public function prepare_item_for_response( $status, $request ) {
- $data = array(
- 'name' => $status->label,
- 'private' => (bool) $status->private,
- 'protected' => (bool) $status->protected,
- 'public' => (bool) $status->public,
- 'queryable' => (bool) $status->publicly_queryable,
- 'show_in_list' => (bool) $status->show_in_admin_all_list,
- 'slug' => $status->name,
- );
+ $fields = $this->get_fields_for_response( $request );
+ $data = array();
+
+ if ( in_array( 'name', $fields, true ) ) {
+ $data['name'] = $status->label;
+ }
+
+ if ( in_array( 'private', $fields, true ) ) {
+ $data['private'] = (bool) $status->private;
+ }
+
+ if ( in_array( 'protected', $fields, true ) ) {
+ $data['protected'] = (bool) $status->protected;
+ }
+
+ if ( in_array( 'public', $fields, true ) ) {
+ $data['public'] = (bool) $status->public;
+ }
+
+ if ( in_array( 'queryable', $fields, true ) ) {
+ $data['queryable'] = (bool) $status->publicly_queryable;
+ }
+
+ if ( in_array( 'show_in_list', $fields, true ) ) {
+ $data['show_in_list'] = (bool) $status->show_in_admin_all_list;
+ }
+
+ if ( in_array( 'slug', $fields, true ) ) {
+ $data['slug'] = $status->name;
+ }
$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
$data = $this->add_additional_fields_to_object( $data, $request );
$base = ! empty( $post_type->rest_base ) ? $post_type->rest_base : $post_type->name;
$supports = get_all_post_type_supports( $post_type->name );
- $data = array(
- 'capabilities' => $post_type->cap,
- 'description' => $post_type->description,
- 'hierarchical' => $post_type->hierarchical,
- 'labels' => $post_type->labels,
- 'name' => $post_type->label,
- 'slug' => $post_type->name,
- 'supports' => $supports,
- 'taxonomies' => array_values( $taxonomies ),
- 'rest_base' => $base,
- );
+ $fields = $this->get_fields_for_response( $request );
+ $data = array();
+
+ if ( in_array( 'capabilities', $fields, true ) ) {
+ $data['capabilities'] = $post_type->cap;
+ }
+
+ if ( in_array( 'description', $fields, true ) ) {
+ $data['description'] = $post_type->description;
+ }
+
+ if ( in_array( 'hierarchical', $fields, true ) ) {
+ $data['hierarchical'] = $post_type->hierarchical;
+ }
+
+ if ( in_array( 'viewable', $fields, true ) ) {
+ $data['viewable'] = is_post_type_viewable( $post_type );
+ }
+
+ if ( in_array( 'labels', $fields, true ) ) {
+ $data['labels'] = $post_type->labels;
+ }
+
+ if ( in_array( 'name', $fields, true ) ) {
+ $data['name'] = $post_type->label;
+ }
+
+ if ( in_array( 'slug', $fields, true ) ) {
+ $data['slug'] = $post_type->name;
+ }
+
+ if ( in_array( 'supports', $fields, true ) ) {
+ $data['supports'] = $supports;
+ }
+
+ if ( in_array( 'taxonomies', $fields, true ) ) {
+ $data['taxonomies'] = array_values( $taxonomies );
+ }
+
+ if ( in_array( 'rest_base', $fields, true ) ) {
+ $data['rest_base'] = $base;
+ }
+
$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
$data = $this->add_additional_fields_to_object( $data, $request );
$data = $this->filter_response_by_context( $data, $context );
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
+ 'viewable' => array(
+ 'description' => __( 'Whether or not the post type can be viewed.' ),
+ 'type' => 'boolean',
+ 'context' => array( 'edit' ),
+ 'readonly' => true,
+ ),
'labels' => array(
'description' => __( 'Human-readable labels for the post type for various contexts.' ),
'type' => 'object',
setup_postdata( $post );
- $schema = $this->get_item_schema();
+ $fields = $this->get_fields_for_response( $request );
// Base fields for every post.
$data = array();
- if ( ! empty( $schema['properties']['id'] ) ) {
+ if ( in_array( 'id', $fields, true ) ) {
$data['id'] = $post->ID;
}
- if ( ! empty( $schema['properties']['date'] ) ) {
+ if ( in_array( 'date', $fields, true ) ) {
$data['date'] = $this->prepare_date_response( $post->post_date_gmt, $post->post_date );
}
- if ( ! empty( $schema['properties']['date_gmt'] ) ) {
+ if ( in_array( 'date_gmt', $fields, true ) ) {
// For drafts, `post_date_gmt` may not be set, indicating that the
// date of the draft should be updated each time it is saved (see
// #38883). In this case, shim the value based on the `post_date`
$data['date_gmt'] = $this->prepare_date_response( $post_date_gmt );
}
- if ( ! empty( $schema['properties']['guid'] ) ) {
+ if ( in_array( 'guid', $fields, true ) ) {
$data['guid'] = array(
/** This filter is documented in wp-includes/post-template.php */
'rendered' => apply_filters( 'get_the_guid', $post->guid, $post->ID ),
);
}
- if ( ! empty( $schema['properties']['modified'] ) ) {
+ if ( in_array( 'modified', $fields, true ) ) {
$data['modified'] = $this->prepare_date_response( $post->post_modified_gmt, $post->post_modified );
}
- if ( ! empty( $schema['properties']['modified_gmt'] ) ) {
+ if ( in_array( 'modified_gmt', $fields, true ) ) {
// For drafts, `post_modified_gmt` may not be set (see
// `post_date_gmt` comments above). In this case, shim the value
// based on the `post_modified` field with the site's timezone
$data['modified_gmt'] = $this->prepare_date_response( $post_modified_gmt );
}
- if ( ! empty( $schema['properties']['password'] ) ) {
+ if ( in_array( 'password', $fields, true ) ) {
$data['password'] = $post->post_password;
}
- if ( ! empty( $schema['properties']['slug'] ) ) {
+ if ( in_array( 'slug', $fields, true ) ) {
$data['slug'] = $post->post_name;
}
- if ( ! empty( $schema['properties']['status'] ) ) {
+ if ( in_array( 'status', $fields, true ) ) {
$data['status'] = $post->post_status;
}
- if ( ! empty( $schema['properties']['type'] ) ) {
+ if ( in_array( 'type', $fields, true ) ) {
$data['type'] = $post->post_type;
}
- if ( ! empty( $schema['properties']['link'] ) ) {
+ if ( in_array( 'link', $fields, true ) ) {
$data['link'] = get_permalink( $post->ID );
}
- if ( ! empty( $schema['properties']['title'] ) ) {
+ if ( in_array( 'title', $fields, true ) ) {
add_filter( 'protected_title_format', array( $this, 'protected_title_format' ) );
$data['title'] = array(
$has_password_filter = true;
}
- if ( ! empty( $schema['properties']['content'] ) ) {
+ if ( in_array( 'content', $fields, true ) ) {
$data['content'] = array(
'raw' => $post->post_content,
/** This filter is documented in wp-includes/post-template.php */
);
}
- if ( ! empty( $schema['properties']['excerpt'] ) ) {
+ if ( in_array( 'excerpt', $fields, true ) ) {
/** This filter is documented in wp-includes/post-template.php */
$excerpt = apply_filters( 'the_excerpt', apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ) );
$data['excerpt'] = array(
remove_filter( 'post_password_required', '__return_false' );
}
- if ( ! empty( $schema['properties']['author'] ) ) {
+ if ( in_array( 'author', $fields, true ) ) {
$data['author'] = (int) $post->post_author;
}
- if ( ! empty( $schema['properties']['featured_media'] ) ) {
+ if ( in_array( 'featured_media', $fields, true ) ) {
$data['featured_media'] = (int) get_post_thumbnail_id( $post->ID );
}
- if ( ! empty( $schema['properties']['parent'] ) ) {
+ if ( in_array( 'parent', $fields, true ) ) {
$data['parent'] = (int) $post->post_parent;
}
- if ( ! empty( $schema['properties']['menu_order'] ) ) {
+ if ( in_array( 'menu_order', $fields, true ) ) {
$data['menu_order'] = (int) $post->menu_order;
}
- if ( ! empty( $schema['properties']['comment_status'] ) ) {
+ if ( in_array( 'comment_status', $fields, true ) ) {
$data['comment_status'] = $post->comment_status;
}
- if ( ! empty( $schema['properties']['ping_status'] ) ) {
+ if ( in_array( 'ping_status', $fields, true ) ) {
$data['ping_status'] = $post->ping_status;
}
- if ( ! empty( $schema['properties']['sticky'] ) ) {
+ if ( in_array( 'sticky', $fields, true ) ) {
$data['sticky'] = is_sticky( $post->ID );
}
- if ( ! empty( $schema['properties']['template'] ) ) {
+ if ( in_array( 'template', $fields, true ) ) {
if ( $template = get_page_template_slug( $post->ID ) ) {
$data['template'] = $template;
} else {
}
}
- if ( ! empty( $schema['properties']['format'] ) ) {
+ if ( in_array( 'format', $fields, true ) ) {
$data['format'] = get_post_format( $post->ID );
// Fill in blank post format.
}
}
- if ( ! empty( $schema['properties']['meta'] ) ) {
+ if ( in_array( 'meta', $fields, true ) ) {
$data['meta'] = $this->meta->get_value( $post->ID, $request );
}
foreach ( $taxonomies as $taxonomy ) {
$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;
- if ( ! empty( $schema['properties'][ $base ] ) ) {
+ if ( in_array( $base, $fields, true ) ) {
$terms = get_the_terms( $post, $taxonomy->name );
$data[ $base ] = $terms ? array_values( wp_list_pluck( $terms, 'term_id' ) ) : array();
}
// Wrap the data in a response object.
$response = rest_ensure_response( $data );
- $response->add_links( $this->prepare_links( $post ) );
+ $links = $this->prepare_links( $post );
+ $response->add_links( $links );
+
+ if ( ! empty( $links['self']['href'] ) ) {
+ $actions = $this->get_available_actions( $post, $request );
+
+ $self = $links['self']['href'];
+
+ foreach ( $actions as $rel ) {
+ $response->add_link( $rel, $self );
+ }
+ }
/**
* Filters the post data for a response.
}
if ( in_array( $post->post_type, array( 'post', 'page' ), true ) || post_type_supports( $post->post_type, 'revisions' ) ) {
+ $revisions = wp_get_post_revisions( $post->ID, array( 'fields' => 'ids' ) );
+ $revisions_count = count( $revisions );
+
$links['version-history'] = array(
- 'href' => rest_url( trailingslashit( $base ) . $post->ID . '/revisions' ),
+ 'href' => rest_url( trailingslashit( $base ) . $post->ID . '/revisions' ),
+ 'count' => $revisions_count,
);
+
+ if ( $revisions_count > 0 ) {
+ $last_revision = array_shift( $revisions );
+
+ $links['predecessor-version'] = array(
+ 'href' => rest_url( trailingslashit( $base ) . $post->ID . '/revisions/' . $last_revision ),
+ 'id' => $last_revision,
+ );
+ }
+
}
$post_type_obj = get_post_type_object( $post->post_type );
return $links;
}
+ /**
+ * Get the link relations available for the post and current user.
+ *
+ * @since 4.9.8
+ *
+ * @param WP_Post $post Post object.
+ * @param WP_REST_Request Request object.
+ *
+ * @return array List of link relations.
+ */
+ protected function get_available_actions( $post, $request ) {
+
+ if ( 'edit' !== $request['context'] ) {
+ return array();
+ }
+
+ $rels = array();
+
+ $post_type = get_post_type_object( $post->post_type );
+
+ if ( 'attachment' !== $this->post_type && current_user_can( $post_type->cap->publish_posts ) ) {
+ $rels[] = 'https://api.w.org/action-publish';
+ }
+
+ if ( 'post' === $post_type->name ) {
+ if ( current_user_can( $post_type->cap->edit_others_posts ) && current_user_can( $post_type->cap->publish_posts ) ) {
+ $rels[] = 'https://api.w.org/action-sticky';
+ }
+ }
+
+ if ( post_type_supports( $post_type->name, 'author' ) ) {
+ if ( current_user_can( $post_type->cap->edit_others_posts ) ) {
+ $rels[] = 'https://api.w.org/action-assign-author';
+ }
+ }
+
+ $taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );
+
+ foreach ( $taxonomies as $tax ) {
+ $tax_base = ! empty( $tax->rest_base ) ? $tax->rest_base : $tax->name;
+ $create_cap = is_taxonomy_hierarchical( $tax->name ) ? $tax->cap->edit_terms : $tax->cap->assign_terms;
+
+ if ( current_user_can( $create_cap ) ) {
+ $rels[] = 'https://api.w.org/action-create-' . $tax_base;
+ }
+
+ if ( current_user_can( $tax->cap->assign_terms ) ) {
+ $rels[] = 'https://api.w.org/action-assign-' . $tax_base;
+ }
+ }
+
+ return $rels;
+ }
+
/**
* Retrieves the post's schema, conforming to JSON Schema.
*
);
}
+ $schema_links = $this->get_schema_links();
+
+ if ( $schema_links ) {
+ $schema['links'] = $schema_links;
+ }
+
return $this->add_additional_fields_schema( $schema );
}
+ /**
+ * Retrieve Link Description Objects that should be added to the Schema for the posts collection.
+ *
+ * @since 4.9.8
+ *
+ * @return array
+ */
+ protected function get_schema_links() {
+
+ $href = rest_url( "{$this->namespace}/{$this->rest_base}/{id}" );
+
+ $links = array();
+
+ if ( 'attachment' !== $this->post_type ) {
+ $links[] = array(
+ 'rel' => 'https://api.w.org/action-publish',
+ 'title' => __( 'The current user can publish this post.' ),
+ 'href' => $href,
+ 'targetSchema' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'status' => array(
+ 'type' => 'string',
+ 'enum' => array( 'publish', 'future' ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ if ( 'post' === $this->post_type ) {
+ $links[] = array(
+ 'rel' => 'https://api.w.org/action-sticky',
+ 'title' => __( 'The current user can sticky this post.' ),
+ 'href' => $href,
+ 'targetSchema' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'sticky' => array(
+ 'type' => 'boolean',
+ ),
+ ),
+ ),
+ );
+ }
+
+ if ( post_type_supports( $this->post_type, 'author' ) ) {
+ $links[] = array(
+ 'rel' => 'https://api.w.org/action-assign-author',
+ 'title' => __( 'The current user can change the author on this post.' ),
+ 'href' => $href,
+ 'targetSchema' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ 'author' => array(
+ 'type' => 'integer',
+ ),
+ ),
+ ),
+ );
+ }
+
+ $taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );
+
+ foreach ( $taxonomies as $tax ) {
+ $tax_base = ! empty( $tax->rest_base ) ? $tax->rest_base : $tax->name;
+
+ /* translators: %s: taxonomy name */
+ $assign_title = sprintf( __( 'The current user can assign terms in the %s taxonomy.' ), $tax->name );
+ /* translators: %s: taxonomy name */
+ $create_title = sprintf( __( 'The current user can create terms in the %s taxonomy.' ), $tax->name );
+
+ $links[] = array(
+ 'rel' => 'https://api.w.org/action-assign-' . $tax_base,
+ 'title' => $assign_title,
+ 'href' => $href,
+ 'targetSchema' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ $tax_base => array(
+ 'type' => 'array',
+ 'items' => array(
+ 'type' => 'integer',
+ ),
+ ),
+ ),
+ ),
+ );
+
+ $links[] = array(
+ 'rel' => 'https://api.w.org/action-create-' . $tax_base,
+ 'title' => $create_title,
+ 'href' => $href,
+ 'targetSchema' => array(
+ 'type' => 'object',
+ 'properties' => array(
+ $tax_base => array(
+ 'type' => 'array',
+ 'items' => array(
+ 'type' => 'integer',
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ return $links;
+ }
+
/**
* Retrieves the query params for the posts collection.
*
setup_postdata( $post );
- $schema = $this->get_item_schema();
+ $fields = $this->get_fields_for_response( $request );
+ $data = array();
- $data = array();
-
- if ( ! empty( $schema['properties']['author'] ) ) {
+ if ( in_array( 'author', $fields, true ) ) {
$data['author'] = (int) $post->post_author;
}
- if ( ! empty( $schema['properties']['date'] ) ) {
+ if ( in_array( 'date', $fields, true ) ) {
$data['date'] = $this->prepare_date_response( $post->post_date_gmt, $post->post_date );
}
- if ( ! empty( $schema['properties']['date_gmt'] ) ) {
+ if ( in_array( 'date_gmt', $fields, true ) ) {
$data['date_gmt'] = $this->prepare_date_response( $post->post_date_gmt );
}
- if ( ! empty( $schema['properties']['id'] ) ) {
+ if ( in_array( 'id', $fields, true ) ) {
$data['id'] = $post->ID;
}
- if ( ! empty( $schema['properties']['modified'] ) ) {
+ if ( in_array( 'modified', $fields, true ) ) {
$data['modified'] = $this->prepare_date_response( $post->post_modified_gmt, $post->post_modified );
}
- if ( ! empty( $schema['properties']['modified_gmt'] ) ) {
+ if ( in_array( 'modified_gmt', $fields, true ) ) {
$data['modified_gmt'] = $this->prepare_date_response( $post->post_modified_gmt );
}
- if ( ! empty( $schema['properties']['parent'] ) ) {
+ if ( in_array( 'parent', $fields, true ) ) {
$data['parent'] = (int) $post->post_parent;
}
- if ( ! empty( $schema['properties']['slug'] ) ) {
+ if ( in_array( 'slug', $fields, true ) ) {
$data['slug'] = $post->post_name;
}
- if ( ! empty( $schema['properties']['guid'] ) ) {
+ if ( in_array( 'guid', $fields, true ) ) {
$data['guid'] = array(
/** This filter is documented in wp-includes/post-template.php */
'rendered' => apply_filters( 'get_the_guid', $post->guid, $post->ID ),
);
}
- if ( ! empty( $schema['properties']['title'] ) ) {
+ if ( in_array( 'title', $fields, true ) ) {
$data['title'] = array(
'raw' => $post->post_title,
'rendered' => get_the_title( $post->ID ),
);
}
- if ( ! empty( $schema['properties']['content'] ) ) {
+ if ( in_array( 'content', $fields, true ) ) {
$data['content'] = array(
'raw' => $post->post_content,
);
}
- if ( ! empty( $schema['properties']['excerpt'] ) ) {
+ if ( in_array( 'excerpt', $fields, true ) ) {
$data['excerpt'] = array(
'raw' => $post->post_excerpt,
'rendered' => $this->prepare_excerpt_response( $post->post_excerpt, $post ),
$taxonomies = get_taxonomies( '', 'objects' );
}
foreach ( $taxonomies as $taxonomy ) {
- if ( ! empty( $taxonomy->show_in_rest ) && current_user_can( $taxonomy->cap->manage_terms ) ) {
+ if ( ! empty( $taxonomy->show_in_rest ) && current_user_can( $taxonomy->cap->assign_terms ) ) {
return true;
}
}
}
$data = array();
foreach ( $taxonomies as $tax_type => $value ) {
- if ( empty( $value->show_in_rest ) || ( 'edit' === $request['context'] && ! current_user_can( $value->cap->manage_terms ) ) ) {
+ if ( empty( $value->show_in_rest ) || ( 'edit' === $request['context'] && ! current_user_can( $value->cap->assign_terms ) ) ) {
continue;
}
$tax = $this->prepare_item_for_response( $value, $request );
if ( empty( $tax_obj->show_in_rest ) ) {
return false;
}
- if ( 'edit' === $request['context'] && ! current_user_can( $tax_obj->cap->manage_terms ) ) {
+ if ( 'edit' === $request['context'] && ! current_user_can( $tax_obj->cap->assign_terms ) ) {
return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to manage terms in this taxonomy.' ), array( 'status' => rest_authorization_required_code() ) );
}
}
*/
public function prepare_item_for_response( $taxonomy, $request ) {
$base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name;
- $data = array(
- 'name' => $taxonomy->label,
- 'slug' => $taxonomy->name,
- 'capabilities' => $taxonomy->cap,
- 'description' => $taxonomy->description,
- 'labels' => $taxonomy->labels,
- 'types' => $taxonomy->object_type,
- 'show_cloud' => $taxonomy->show_tagcloud,
- 'hierarchical' => $taxonomy->hierarchical,
- 'rest_base' => $base,
- );
+
+ $fields = $this->get_fields_for_response( $request );
+ $data = array();
+
+ if ( in_array( 'name', $fields, true ) ) {
+ $data['name'] = $taxonomy->label;
+ }
+
+ if ( in_array( 'slug', $fields, true ) ) {
+ $data['slug'] = $taxonomy->name;
+ }
+
+ if ( in_array( 'capabilities', $fields, true ) ) {
+ $data['capabilities'] = $taxonomy->cap;
+ }
+
+ if ( in_array( 'description', $fields, true ) ) {
+ $data['description'] = $taxonomy->description;
+ }
+
+ if ( in_array( 'labels', $fields, true ) ) {
+ $data['labels'] = $taxonomy->labels;
+ }
+
+ if ( in_array( 'types', $fields, true ) ) {
+ $data['types'] = $taxonomy->object_type;
+ }
+
+ if ( in_array( 'show_cloud', $fields, true ) ) {
+ $data['show_cloud'] = $taxonomy->show_tagcloud;
+ }
+
+ if ( in_array( 'hierarchical', $fields, true ) ) {
+ $data['hierarchical'] = $taxonomy->hierarchical;
+ }
+
+ if ( in_array( 'rest_base', $fields, true ) ) {
+ $data['rest_base'] = $base;
+ }
+
+ if ( in_array( 'visibility', $fields, true ) ) {
+ $data['visibility'] = array(
+ 'public' => (bool) $taxonomy->public,
+ 'publicly_queryable' => (bool) $taxonomy->publicly_queryable,
+ 'show_admin_column' => (bool) $taxonomy->show_admin_column,
+ 'show_in_nav_menus' => (bool) $taxonomy->show_in_nav_menus,
+ 'show_in_quick_edit' => (bool) $taxonomy->show_in_quick_edit,
+ 'show_ui' => (bool) $taxonomy->show_ui,
+ );
+ }
$context = ! empty( $request['context'] ) ? $request['context'] : 'view';
$data = $this->add_additional_fields_to_object( $data, $request );
}
$taxonomy_obj = get_taxonomy( $this->taxonomy );
- if ( ! current_user_can( $taxonomy_obj->cap->edit_terms ) ) {
+ if ( ( is_taxonomy_hierarchical( $this->taxonomy )
+ && ! current_user_can( $taxonomy_obj->cap->edit_terms ) )
+ || ( ! is_taxonomy_hierarchical( $this->taxonomy )
+ && ! current_user_can( $taxonomy_obj->cap->assign_terms ) ) ) {
return new WP_Error( 'rest_cannot_create', __( 'Sorry, you are not allowed to create new terms.' ), array( 'status' => rest_authorization_required_code() ) );
}
*/
public function prepare_item_for_response( $item, $request ) {
- $schema = $this->get_item_schema();
+ $fields = $this->get_fields_for_response( $request );
$data = array();
- if ( ! empty( $schema['properties']['id'] ) ) {
+ if ( in_array( 'id', $fields, true ) ) {
$data['id'] = (int) $item->term_id;
}
- if ( ! empty( $schema['properties']['count'] ) ) {
+ if ( in_array( 'count', $fields, true ) ) {
$data['count'] = (int) $item->count;
}
- if ( ! empty( $schema['properties']['description'] ) ) {
+ if ( in_array( 'description', $fields, true ) ) {
$data['description'] = $item->description;
}
- if ( ! empty( $schema['properties']['link'] ) ) {
+ if ( in_array( 'link', $fields, true ) ) {
$data['link'] = get_term_link( $item );
}
- if ( ! empty( $schema['properties']['name'] ) ) {
+ if ( in_array( 'name', $fields, true ) ) {
$data['name'] = $item->name;
}
- if ( ! empty( $schema['properties']['slug'] ) ) {
+ if ( in_array( 'slug', $fields, true ) ) {
$data['slug'] = $item->slug;
}
- if ( ! empty( $schema['properties']['taxonomy'] ) ) {
+ if ( in_array( 'taxonomy', $fields, true ) ) {
$data['taxonomy'] = $item->taxonomy;
}
- if ( ! empty( $schema['properties']['parent'] ) ) {
+ if ( in_array( 'parent', $fields, true ) ) {
$data['parent'] = (int) $item->parent;
}
- if ( ! empty( $schema['properties']['meta'] ) ) {
+ if ( in_array( 'meta', $fields, true ) ) {
$data['meta'] = $this->meta->get_value( $item->term_id, $request );
}
return new WP_Error( 'rest_forbidden_orderby', __( 'Sorry, you are not allowed to order users by this parameter.' ), array( 'status' => rest_authorization_required_code() ) );
}
+ if ( 'authors' === $request['who'] ) {
+ $can_view = false;
+ $types = get_post_types( array( 'show_in_rest' => true ), 'objects' );
+ foreach ( $types as $type ) {
+ if ( post_type_supports( $type->name, 'author' )
+ && current_user_can( $type->cap->edit_posts ) ) {
+ $can_view = true;
+ }
+ }
+ if ( ! $can_view ) {
+ return new WP_Error( 'rest_forbidden_who', __( 'Sorry, you are not allowed to query users by this parameter.' ), array( 'status' => rest_authorization_required_code() ) );
+ }
+ }
+
return true;
}
$prepared_args['orderby'] = $orderby_possibles[ $request['orderby'] ];
}
- if ( ! current_user_can( 'list_users' ) ) {
+ if ( isset( $registered['who'] ) && ! empty( $request['who'] ) && 'authors' === $request['who'] ) {
+ $prepared_args['who'] = 'authors';
+ } elseif ( ! current_user_can( 'list_users' ) ) {
$prepared_args['has_published_posts'] = get_post_types( array( 'show_in_rest' => true ), 'names' );
}
public function prepare_item_for_response( $user, $request ) {
$data = array();
- $schema = $this->get_item_schema();
+ $fields = $this->get_fields_for_response( $request );
- if ( ! empty( $schema['properties']['id'] ) ) {
+ if ( in_array( 'id', $fields, true ) ) {
$data['id'] = $user->ID;
}
- if ( ! empty( $schema['properties']['username'] ) ) {
+ if ( in_array( 'username', $fields, true ) ) {
$data['username'] = $user->user_login;
}
- if ( ! empty( $schema['properties']['name'] ) ) {
+ if ( in_array( 'name', $fields, true ) ) {
$data['name'] = $user->display_name;
}
- if ( ! empty( $schema['properties']['first_name'] ) ) {
+ if ( in_array( 'first_name', $fields, true ) ) {
$data['first_name'] = $user->first_name;
}
- if ( ! empty( $schema['properties']['last_name'] ) ) {
+ if ( in_array( 'last_name', $fields, true ) ) {
$data['last_name'] = $user->last_name;
}
- if ( ! empty( $schema['properties']['email'] ) ) {
+ if ( in_array( 'email', $fields, true ) ) {
$data['email'] = $user->user_email;
}
- if ( ! empty( $schema['properties']['url'] ) ) {
+ if ( in_array( 'url', $fields, true ) ) {
$data['url'] = $user->user_url;
}
- if ( ! empty( $schema['properties']['description'] ) ) {
+ if ( in_array( 'description', $fields, true ) ) {
$data['description'] = $user->description;
}
- if ( ! empty( $schema['properties']['link'] ) ) {
+ if ( in_array( 'link', $fields, true ) ) {
$data['link'] = get_author_posts_url( $user->ID, $user->user_nicename );
}
- if ( ! empty( $schema['properties']['locale'] ) ) {
+ if ( in_array( 'locale', $fields, true ) ) {
$data['locale'] = get_user_locale( $user );
}
- if ( ! empty( $schema['properties']['nickname'] ) ) {
+ if ( in_array( 'nickname', $fields, true ) ) {
$data['nickname'] = $user->nickname;
}
- if ( ! empty( $schema['properties']['slug'] ) ) {
+ if ( in_array( 'slug', $fields, true ) ) {
$data['slug'] = $user->user_nicename;
}
- if ( ! empty( $schema['properties']['roles'] ) ) {
+ if ( in_array( 'roles', $fields, true ) ) {
// Defensively call array_values() to ensure an array is returned.
$data['roles'] = array_values( $user->roles );
}
- if ( ! empty( $schema['properties']['registered_date'] ) ) {
+ if ( in_array( 'registered_date', $fields, true ) ) {
$data['registered_date'] = date( 'c', strtotime( $user->user_registered ) );
}
- if ( ! empty( $schema['properties']['capabilities'] ) ) {
+ if ( in_array( 'capabilities', $fields, true ) ) {
$data['capabilities'] = (object) $user->allcaps;
}
- if ( ! empty( $schema['properties']['extra_capabilities'] ) ) {
+ if ( in_array( 'extra_capabilities', $fields, true ) ) {
$data['extra_capabilities'] = (object) $user->caps;
}
- if ( ! empty( $schema['properties']['avatar_urls'] ) ) {
+ if ( in_array( 'avatar_urls', $fields, true ) ) {
$data['avatar_urls'] = rest_get_avatar_urls( $user->user_email );
}
- if ( ! empty( $schema['properties']['meta'] ) ) {
+ if ( in_array( 'meta', $fields, true ) ) {
$data['meta'] = $this->meta->get_value( $user->ID, $request );
}
),
);
+ $query_params['who'] = array(
+ 'description' => __( 'Limit result set to users who are considered authors.' ),
+ 'type' => 'string',
+ 'enum' => array(
+ 'authors',
+ ),
+ );
+
/**
* Filter collection parameters for the users controller.
*
return 'comment';
}
+ /**
+ * Retrieves the object meta subtype.
+ *
+ * @since 4.9.8
+ *
+ * @return string 'comment' There are no subtypes.
+ */
+ protected function get_meta_subtype() {
+ return 'comment';
+ }
+
/**
* Retrieves the type for register_rest_field() in the context of comments.
*
*/
abstract protected function get_meta_type();
+ /**
+ * Retrieves the object meta subtype.
+ *
+ * @since 4.9.8
+ *
+ * @return string Subtype for the meta type, or empty string if no specific subtype.
+ */
+ protected function get_meta_subtype() {
+ return '';
+ }
+
/**
* Retrieves the object type for register_rest_field().
*
protected function get_registered_fields() {
$registered = array();
- foreach ( get_registered_meta_keys( $this->get_meta_type() ) as $name => $args ) {
+ $meta_type = $this->get_meta_type();
+ $meta_subtype = $this->get_meta_subtype();
+
+ $meta_keys = get_registered_meta_keys( $meta_type );
+ if ( ! empty( $meta_subtype ) ) {
+ $meta_keys = array_merge( $meta_keys, get_registered_meta_keys( $meta_type, $meta_subtype ) );
+ }
+
+ foreach ( $meta_keys as $name => $args ) {
if ( empty( $args['show_in_rest'] ) ) {
continue;
}
return 'post';
}
+ /**
+ * Retrieves the object meta subtype.
+ *
+ * @since 4.9.8
+ *
+ * @return string Subtype for the meta type, or empty string if no specific subtype.
+ */
+ protected function get_meta_subtype() {
+ return $this->post_type;
+ }
+
/**
* Retrieves the type for register_rest_field().
*
return 'term';
}
+ /**
+ * Retrieves the object meta subtype.
+ *
+ * @since 4.9.8
+ *
+ * @return string Subtype for the meta type, or empty string if no specific subtype.
+ */
+ protected function get_meta_subtype() {
+ return $this->taxonomy;
+ }
+
/**
* Retrieves the type for register_rest_field().
*
return 'user';
}
+ /**
+ * Retrieves the object meta subtype.
+ *
+ * @since 4.9.8
+ *
+ * @return string 'user' There are no subtypes.
+ */
+ protected function get_meta_subtype() {
+ return 'user';
+ }
+
/**
* Retrieves the type for register_rest_field().
*
) );
$scripts->add( 'xfn', "/wp-admin/js/xfn$suffix.js", array('jquery'), false, 1 );
+ did_action( 'init' ) && $scripts->localize(
+ 'xfn', 'privacyToolsL10n', array(
+ 'noDataFound' => __( 'No personal data was found for this user.' ),
+ 'foundAndRemoved' => __( 'All of the personal data found for this user was erased.' ),
+ 'noneRemoved' => __( 'Personal data was found for this user but was not erased.' ),
+ 'someNotRemoved' => __( 'Personal data was found for this user but some of the personal data found was not erased.' ),
+ 'removalError' => __( 'An error occurred while attempting to find and erase personal data.' ),
+ 'noExportFile' => __( 'No personal data export file was generated.' ),
+ 'exportError' => __( 'An error occurred while attempting to export personal data.' ),
+ )
+ );
$scripts->add( 'postbox', "/wp-admin/js/postbox$suffix.js", array('jquery-ui-sortable'), false, 1 );
did_action( 'init' ) && $scripts->localize( 'postbox', 'postBoxL10n', array(
return $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value, meta_id, term_id FROM $wpdb->termmeta WHERE term_id = %d ORDER BY meta_key,meta_id", $term_id ), ARRAY_A );
}
+/**
+ * Registers a meta key for terms.
+ *
+ * @since 4.9.8
+ *
+ * @param string $taxonomy Taxonomy to register a meta key for. Pass an empty string
+ * to register the meta key across all existing taxonomies.
+ * @param string $meta_key The meta key to register.
+ * @param array $args Data used to describe the meta key when registered. See
+ * {@see register_meta()} for a list of supported arguments.
+ * @return bool True if the meta key was successfully registered, false if not.
+ */
+function register_term_meta( $taxonomy, $meta_key, array $args ) {
+ $args['object_subtype'] = $taxonomy;
+
+ return register_meta( 'term', $meta_key, $args );
+}
+
+/**
+ * Unregisters a meta key for terms.
+ *
+ * @since 4.9.8
+ *
+ * @param string $taxonomy Taxonomy the meta key is currently registered for. Pass
+ * an empty string if the meta key is registered across all
+ * existing taxonomies.
+ * @param string $meta_key The meta key to unregister.
+ * @return bool True on success, false if the meta key was not previously registered.
+ */
+function unregister_term_meta( $taxonomy, $meta_key ) {
+ return unregister_meta_key( 'term', $meta_key, $taxonomy );
+}
+
/**
* Check if Term exists.
*
function get_theme_roots() {
global $wp_theme_directories;
- if ( count($wp_theme_directories) <= 1 )
+ if ( ! is_array( $wp_theme_directories ) || count( $wp_theme_directories ) <= 1 ) {
return '/themes';
+ }
$theme_roots = get_site_transient( 'theme_roots' );
if ( false === $theme_roots ) {
return;
}
- $hash = md5( $_POST['email'] . time() . mt_rand() );
+ $hash = md5( $_POST['email'] . time() . wp_rand() );
$new_user_email = array(
'hash' => $hash,
'newemail' => $_POST['email'],
);
update_user_meta( $current_user->ID, '_new_email', $new_user_email );
- if ( is_multisite() ) {
- $sitename = get_site_option( 'site_name' );
- } else {
- $sitename = get_option( 'blogname' );
- }
+ $sitename = wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES );
/* translators: Do not translate USERNAME, ADMIN_URL, EMAIL, SITENAME, SITEURL: those are placeholders. */
$email_text = __( 'Howdy ###USERNAME###,
$content = str_replace( '###USERNAME###', $current_user->user_login, $content );
$content = str_replace( '###ADMIN_URL###', esc_url( admin_url( 'profile.php?newuseremail=' . $hash ) ), $content );
$content = str_replace( '###EMAIL###', $_POST['email'], $content );
- $content = str_replace( '###SITENAME###', wp_specialchars_decode( $sitename, ENT_QUOTES ), $content );
- $content = str_replace( '###SITEURL###', network_home_url(), $content );
+ $content = str_replace( '###SITENAME###', $sitename, $content );
+ $content = str_replace( '###SITEURL###', home_url(), $content );
- wp_mail( $_POST['email'], sprintf( __( '[%s] New Email Address' ), wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) ), $content );
+ wp_mail( $_POST['email'], sprintf( __( '[%s] New Email Address' ), $sitename ), $content );
$_POST['email'] = $current_user->user_email;
}
echo '<div class="notice notice-info"><p>' . sprintf( __( 'Your email address has not been updated yet. Please check your inbox at %s for a confirmation email.' ), '<code>' . esc_html( $email['newemail'] ) . '</code>' ) . '</p></div>';
}
}
+
+/**
+ * Get all user privacy request types.
+ *
+ * @since 4.9.6
+ * @access private
+ *
+ * @return array List of core privacy action types.
+ */
+function _wp_privacy_action_request_types() {
+ return array(
+ 'export_personal_data',
+ 'remove_personal_data',
+ );
+}
+
+/**
+ * Registers the personal data exporter for users.
+ *
+ * @since 4.9.6
+ *
+ * @param array $exporters An array of personal data exporters.
+ * @return array An array of personal data exporters.
+ */
+function wp_register_user_personal_data_exporter( $exporters ) {
+ $exporters['wordpress-user'] = array(
+ 'exporter_friendly_name' => __( 'WordPress User' ),
+ 'callback' => 'wp_user_personal_data_exporter',
+ );
+
+ return $exporters;
+}
+
+/**
+ * Finds and exports personal data associated with an email address from the user and user_meta table.
+ *
+ * @since 4.9.6
+ *
+ * @param string $email_address The users email address.
+ * @return array An array of personal data.
+ */
+function wp_user_personal_data_exporter( $email_address ) {
+ $email_address = trim( $email_address );
+
+ $data_to_export = array();
+
+ $user = get_user_by( 'email', $email_address );
+
+ if ( ! $user ) {
+ return array(
+ 'data' => array(),
+ 'done' => true,
+ );
+ }
+
+ $user_meta = get_user_meta( $user->ID );
+
+ $user_prop_to_export = array(
+ 'ID' => __( 'User ID' ),
+ 'user_login' => __( 'User Login Name' ),
+ 'user_nicename' => __( 'User Nice Name' ),
+ 'user_email' => __( 'User Email' ),
+ 'user_url' => __( 'User URL' ),
+ 'user_registered' => __( 'User Registration Date' ),
+ 'display_name' => __( 'User Display Name' ),
+ 'nickname' => __( 'User Nickname' ),
+ 'first_name' => __( 'User First Name' ),
+ 'last_name' => __( 'User Last Name' ),
+ 'description' => __( 'User Description' ),
+ );
+
+ $user_data_to_export = array();
+
+ foreach ( $user_prop_to_export as $key => $name ) {
+ $value = '';
+
+ switch ( $key ) {
+ case 'ID':
+ case 'user_login':
+ case 'user_nicename':
+ case 'user_email':
+ case 'user_url':
+ case 'user_registered':
+ case 'display_name':
+ $value = $user->data->$key;
+ break;
+ case 'nickname':
+ case 'first_name':
+ case 'last_name':
+ case 'description':
+ $value = $user_meta[ $key ][0];
+ break;
+ }
+
+ if ( ! empty( $value ) ) {
+ $user_data_to_export[] = array(
+ 'name' => $name,
+ 'value' => $value,
+ );
+ }
+ }
+
+ $data_to_export[] = array(
+ 'group_id' => 'user',
+ 'group_label' => __( 'User' ),
+ 'item_id' => "user-{$user->ID}",
+ 'data' => $user_data_to_export,
+ );
+
+ return array(
+ 'data' => $data_to_export,
+ 'done' => true,
+ );
+}
+
+/**
+ * Update log when privacy request is confirmed.
+ *
+ * @since 4.9.6
+ * @access private
+ *
+ * @param int $request_id ID of the request.
+ */
+function _wp_privacy_account_request_confirmed( $request_id ) {
+ $request_data = wp_get_user_request_data( $request_id );
+
+ if ( ! $request_data ) {
+ return;
+ }
+
+ if ( ! in_array( $request_data->status, array( 'request-pending', 'request-failed' ), true ) ) {
+ return;
+ }
+
+ update_post_meta( $request_id, '_wp_user_request_confirmed_timestamp', time() );
+ wp_update_post( array(
+ 'ID' => $request_id,
+ 'post_status' => 'request-confirmed',
+ ) );
+}
+
+/**
+ * Notify the site administrator via email when a request is confirmed.
+ *
+ * Without this, the admin would have to manually check the site to see if any
+ * action was needed on their part yet.
+ *
+ * @since 4.9.6
+ *
+ * @param int $request_id The ID of the request.
+ */
+function _wp_privacy_send_request_confirmation_notification( $request_id ) {
+ $request_data = wp_get_user_request_data( $request_id );
+
+ if ( ! is_a( $request_data, 'WP_User_Request' ) || 'request-confirmed' !== $request_data->status ) {
+ return;
+ }
+
+ $already_notified = (bool) get_post_meta( $request_id, '_wp_admin_notified', true );
+
+ if ( $already_notified ) {
+ return;
+ }
+
+ $manage_url = add_query_arg( 'page', $request_data->action_name, admin_url( 'tools.php' ) );
+ $action_description = wp_user_request_action_description( $request_data->action_name );
+
+ /**
+ * Filters the recipient of the data request confirmation notification.
+ *
+ * In a Multisite environment, this will default to the email address of the
+ * network admin because, by default, single site admins do not have the
+ * capabilities required to process requests. Some networks may wish to
+ * delegate those capabilities to a single-site admin, or a dedicated person
+ * responsible for managing privacy requests.
+ *
+ * @since 4.9.6
+ *
+ * @param string $admin_email The email address of the notification recipient.
+ * @param WP_User_Request $request_data The request that is initiating the notification.
+ */
+ $admin_email = apply_filters( 'user_request_confirmed_email_to', get_site_option( 'admin_email' ), $request_data );
+
+ $email_data = array(
+ 'request' => $request_data,
+ 'user_email' => $request_data->email,
+ 'description' => $action_description,
+ 'manage_url' => $manage_url,
+ 'sitename' => wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ),
+ 'siteurl' => home_url(),
+ 'admin_email' => $admin_email,
+ );
+
+ /* translators: Do not translate SITENAME, USER_EMAIL, DESCRIPTION, MANAGE_URL, SITEURL; those are placeholders. */
+ $email_text = __(
+ 'Howdy,
+
+A user data privacy request has been confirmed on ###SITENAME###:
+
+User: ###USER_EMAIL###
+Request: ###DESCRIPTION###
+
+You can view and manage these data privacy requests here:
+
+###MANAGE_URL###
+
+Regards,
+All at ###SITENAME###
+###SITEURL###'
+ );
+
+ /**
+ * Filters the body of the user request confirmation email.
+ *
+ * The email is sent to an administrator when an user request is confirmed.
+ * The following strings have a special meaning and will get replaced dynamically:
+ *
+ * ###SITENAME### The name of the site.
+ * ###USER_EMAIL### The user email for the request.
+ * ###DESCRIPTION### Description of the action being performed so the user knows what the email is for.
+ * ###MANAGE_URL### The URL to manage requests.
+ * ###SITEURL### The URL to the site.
+ *
+ * @since 4.9.6
+ *
+ * @param string $email_text Text in the email.
+ * @param array $email_data {
+ * Data relating to the account action email.
+ *
+ * @type WP_User_Request $request User request object.
+ * @type string $user_email The email address confirming a request
+ * @type string $description Description of the action being performed so the user knows what the email is for.
+ * @type string $manage_url The link to click manage privacy requests of this type.
+ * @type string $sitename The site name sending the mail.
+ * @type string $siteurl The site URL sending the mail.
+ * @type string $admin_email The administrator email receiving the mail.
+ * }
+ */
+ $content = apply_filters( 'user_confirmed_action_email_content', $email_text, $email_data );
+
+ $content = str_replace( '###SITENAME###', $email_data['sitename'], $content );
+ $content = str_replace( '###USER_EMAIL###', $email_data['user_email'], $content );
+ $content = str_replace( '###DESCRIPTION###', $email_data['description'], $content );
+ $content = str_replace( '###MANAGE_URL###', esc_url_raw( $email_data['manage_url'] ), $content );
+ $content = str_replace( '###SITEURL###', esc_url_raw( $email_data['siteurl'] ), $content );
+
+ $subject = sprintf(
+ /* translators: 1: Site name. 2: Name of the confirmed action. */
+ __( '[%1$s] Action Confirmed: %2$s' ),
+ $email_data['sitename'],
+ $action_description
+ );
+
+ /**
+ * Filters the subject of the user request confirmation email.
+ *
+ * @since 4.9.8
+ *
+ * @param string $subject The email subject.
+ * @param string $sitename The name of the site.
+ * @param array $email_data {
+ * Data relating to the account action email.
+ *
+ * @type WP_User_Request $request User request object.
+ * @type string $user_email The email address confirming a request
+ * @type string $description Description of the action being performed so the user knows what the email is for.
+ * @type string $manage_url The link to click manage privacy requests of this type.
+ * @type string $sitename The site name sending the mail.
+ * @type string $siteurl The site URL sending the mail.
+ * @type string $admin_email The administrator email receiving the mail.
+ * }
+ */
+ $subject = apply_filters( 'user_request_confirmed_email_subject', $subject, $email_data['sitename'], $email_data );
+
+ $email_sent = wp_mail( $email_data['admin_email'], $subject, $content );
+
+ if ( $email_sent ) {
+ update_post_meta( $request_id, '_wp_admin_notified', true );
+ }
+}
+
+/**
+ * Notify the user when their erasure request is fulfilled.
+ *
+ * Without this, the user would never know if their data was actually erased.
+ *
+ * @since 4.9.6
+ *
+ * @param int $request_id The privacy request post ID associated with this request.
+ */
+function _wp_privacy_send_erasure_fulfillment_notification( $request_id ) {
+ $request_data = wp_get_user_request_data( $request_id );
+
+ if ( ! is_a( $request_data, 'WP_User_Request' ) || 'request-completed' !== $request_data->status ) {
+ return;
+ }
+
+ $already_notified = (bool) get_post_meta( $request_id, '_wp_user_notified', true );
+
+ if ( $already_notified ) {
+ return;
+ }
+
+ /**
+ * Filters the recipient of the data erasure fulfillment notification.
+ *
+ * @since 4.9.6
+ *
+ * @param string $user_email The email address of the notification recipient.
+ * @param WP_User_Request $request_data The request that is initiating the notification.
+ */
+ $user_email = apply_filters( 'user_erasure_fulfillment_email_to', $request_data->email, $request_data );
+
+ $email_data = array(
+ 'request' => $request_data,
+ 'message_recipient' => $user_email,
+ 'privacy_policy_url' => get_privacy_policy_url(),
+ 'sitename' => wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ),
+ 'siteurl' => home_url(),
+ );
+
+ $subject = sprintf(
+ /* translators: %s: Site name. */
+ __( '[%s] Erasure Request Fulfilled' ),
+ $email_data['sitename']
+ );
+
+ /**
+ * Filters the subject of the email sent when an erasure request is completed.
+ *
+ * @since 4.9.8
+ *
+ * @param string $subject The email subject.
+ * @param string $sitename The name of the site.
+ * @param array $email_data {
+ * Data relating to the account action email.
+ *
+ * @type WP_User_Request $request User request object.
+ * @type string $message_recipient The address that the email will be sent to. Defaults
+ * to the value of `$request->email`, but can be changed
+ * by the `user_erasure_fulfillment_email_to` filter.
+ * @type string $privacy_policy_url Privacy policy URL.
+ * @type string $sitename The site name sending the mail.
+ * @type string $siteurl The site URL sending the mail.
+ * }
+ */
+ $subject = apply_filters( 'user_erasure_complete_email_subject', $subject, $email_data['sitename'], $email_data );
+
+ if ( empty( $email_data['privacy_policy_url'] ) ) {
+ /* translators: Do not translate SITENAME, SITEURL; those are placeholders. */
+ $email_text = __(
+ 'Howdy,
+
+Your request to erase your personal data on ###SITENAME### has been completed.
+
+If you have any follow-up questions or concerns, please contact the site administrator.
+
+Regards,
+All at ###SITENAME###
+###SITEURL###'
+ );
+ } else {
+ /* translators: Do not translate SITENAME, SITEURL, PRIVACY_POLICY_URL; those are placeholders. */
+ $email_text = __(
+ 'Howdy,
+
+Your request to erase your personal data on ###SITENAME### has been completed.
+
+If you have any follow-up questions or concerns, please contact the site administrator.
+
+For more information, you can also read our privacy policy: ###PRIVACY_POLICY_URL###
+
+Regards,
+All at ###SITENAME###
+###SITEURL###'
+ );
+ }
+
+ /**
+ * Filters the body of the data erasure fulfillment notification.
+ *
+ * The email is sent to a user when a their data erasure request is fulfilled
+ * by an administrator.
+ *
+ * The following strings have a special meaning and will get replaced dynamically:
+ *
+ * ###SITENAME### The name of the site.
+ * ###PRIVACY_POLICY_URL### Privacy policy page URL.
+ * ###SITEURL### The URL to the site.
+ *
+ * @since 4.9.6
+ *
+ * @param string $email_text Text in the email.
+ * @param array $email_data {
+ * Data relating to the account action email.
+ *
+ * @type WP_User_Request $request User request object.
+ * @type string $message_recipient The address that the email will be sent to. Defaults
+ * to the value of `$request->email`, but can be changed
+ * by the `user_erasure_fulfillment_email_to` filter.
+ * @type string $privacy_policy_url Privacy policy URL.
+ * @type string $sitename The site name sending the mail.
+ * @type string $siteurl The site URL sending the mail.
+ * }
+ */
+ $content = apply_filters( 'user_confirmed_action_email_content', $email_text, $email_data );
+
+ $content = str_replace( '###SITENAME###', $email_data['sitename'], $content );
+ $content = str_replace( '###PRIVACY_POLICY_URL###', $email_data['privacy_policy_url'], $content );
+ $content = str_replace( '###SITEURL###', esc_url_raw( $email_data['siteurl'] ), $content );
+
+ $email_sent = wp_mail( $user_email, $subject, $content );
+
+ if ( $email_sent ) {
+ update_post_meta( $request_id, '_wp_user_notified', true );
+ }
+}
+
+/**
+ * Return request confirmation message HTML.
+ *
+ * @since 4.9.6
+ * @access private
+ *
+ * @param int $request_id The request ID being confirmed.
+ * @return string $message The confirmation message.
+ */
+function _wp_privacy_account_request_confirmed_message( $request_id ) {
+ $request = wp_get_user_request_data( $request_id );
+
+ $message = '<p class="success">' . __( 'Action has been confirmed.' ) . '</p>';
+ $message .= '<p>' . __( 'The site administrator has been notified and will fulfill your request as soon as possible.' ) . '</p>';
+
+ if ( $request && in_array( $request->action_name, _wp_privacy_action_request_types(), true ) ) {
+ if ( 'export_personal_data' === $request->action_name ) {
+ $message = '<p class="success">' . __( 'Thanks for confirming your export request.' ) . '</p>';
+ $message .= '<p>' . __( 'The site administrator has been notified. You will receive a link to download your export via email when they fulfill your request.' ) . '</p>';
+ } elseif ( 'remove_personal_data' === $request->action_name ) {
+ $message = '<p class="success">' . __( 'Thanks for confirming your erasure request.' ) . '</p>';
+ $message .= '<p>' . __( 'The site administrator has been notified. You will receive an email confirmation when they erase your data.' ) . '</p>';
+ }
+ }
+
+ /**
+ * Filters the message displayed to a user when they confirm a data request.
+ *
+ * @since 4.9.6
+ *
+ * @param string $message The message to the user.
+ * @param int $request_id The ID of the request being confirmed.
+ */
+ $message = apply_filters( 'user_request_action_confirmed_message', $message, $request_id );
+
+ return $message;
+}
+
+/**
+ * Create and log a user request to perform a specific action.
+ *
+ * Requests are stored inside a post type named `user_request` since they can apply to both
+ * users on the site, or guests without a user account.
+ *
+ * @since 4.9.6
+ *
+ * @param string $email_address User email address. This can be the address of a registered or non-registered user.
+ * @param string $action_name Name of the action that is being confirmed. Required.
+ * @param array $request_data Misc data you want to send with the verification request and pass to the actions once the request is confirmed.
+ * @return int|WP_Error Returns the request ID if successful, or a WP_Error object on failure.
+ */
+function wp_create_user_request( $email_address = '', $action_name = '', $request_data = array() ) {
+ $email_address = sanitize_email( $email_address );
+ $action_name = sanitize_key( $action_name );
+
+ if ( ! is_email( $email_address ) ) {
+ return new WP_Error( 'invalid_email', __( 'Invalid email address.' ) );
+ }
+
+ if ( ! $action_name ) {
+ return new WP_Error( 'invalid_action', __( 'Invalid action name.' ) );
+ }
+
+ $user = get_user_by( 'email', $email_address );
+ $user_id = $user && ! is_wp_error( $user ) ? $user->ID : 0;
+
+ // Check for duplicates.
+ $requests_query = new WP_Query( array(
+ 'post_type' => 'user_request',
+ 'post_name__in' => array( $action_name ), // Action name stored in post_name column.
+ 'title' => $email_address, // Email address stored in post_title column.
+ 'post_status' => 'any',
+ 'fields' => 'ids',
+ ) );
+
+ if ( $requests_query->found_posts ) {
+ return new WP_Error( 'duplicate_request', __( 'A request for this email address already exists.' ) );
+ }
+
+ $request_id = wp_insert_post( array(
+ 'post_author' => $user_id,
+ 'post_name' => $action_name,
+ 'post_title' => $email_address,
+ 'post_content' => wp_json_encode( $request_data ),
+ 'post_status' => 'request-pending',
+ 'post_type' => 'user_request',
+ 'post_date' => current_time( 'mysql', false ),
+ 'post_date_gmt' => current_time( 'mysql', true ),
+ ), true );
+
+ return $request_id;
+}
+
+/**
+ * Get action description from the name and return a string.
+ *
+ * @since 4.9.6
+ *
+ * @param string $action_name Action name of the request.
+ * @return string Human readable action name.
+ */
+function wp_user_request_action_description( $action_name ) {
+ switch ( $action_name ) {
+ case 'export_personal_data':
+ $description = __( 'Export Personal Data' );
+ break;
+ case 'remove_personal_data':
+ $description = __( 'Erase Personal Data' );
+ break;
+ default:
+ /* translators: %s: action name */
+ $description = sprintf( __( 'Confirm the "%s" action' ), $action_name );
+ break;
+ }
+
+ /**
+ * Filters the user action description.
+ *
+ * @since 4.9.6
+ *
+ * @param string $description The default description.
+ * @param string $action_name The name of the request.
+ */
+ return apply_filters( 'user_request_action_description', $description, $action_name );
+}
+
+/**
+ * Send a confirmation request email to confirm an action.
+ *
+ * If the request is not already pending, it will be updated.
+ *
+ * @since 4.9.6
+ *
+ * @param string $request_id ID of the request created via wp_create_user_request().
+ * @return WP_Error|bool Will return true/false based on the success of sending the email, or a WP_Error object.
+ */
+function wp_send_user_request( $request_id ) {
+ $request_id = absint( $request_id );
+ $request = wp_get_user_request_data( $request_id );
+
+ if ( ! $request ) {
+ return new WP_Error( 'user_request_error', __( 'Invalid request.' ) );
+ }
+
+ $email_data = array(
+ 'request' => $request,
+ 'email' => $request->email,
+ 'description' => wp_user_request_action_description( $request->action_name ),
+ 'confirm_url' => add_query_arg( array(
+ 'action' => 'confirmaction',
+ 'request_id' => $request_id,
+ 'confirm_key' => wp_generate_user_request_key( $request_id ),
+ ), wp_login_url() ),
+ 'sitename' => wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ),
+ 'siteurl' => home_url(),
+ );
+
+ /* translators: Do not translate DESCRIPTION, CONFIRM_URL, SITENAME, SITEURL: those are placeholders. */
+ $email_text = __(
+ 'Howdy,
+
+A request has been made to perform the following action on your account:
+
+ ###DESCRIPTION###
+
+To confirm this, please click on the following link:
+###CONFIRM_URL###
+
+You can safely ignore and delete this email if you do not want to
+take this action.
+
+Regards,
+All at ###SITENAME###
+###SITEURL###'
+ );
+
+ /**
+ * Filters the text of the email sent when an account action is attempted.
+ *
+ * The following strings have a special meaning and will get replaced dynamically:
+ *
+ * ###DESCRIPTION### Description of the action being performed so the user knows what the email is for.
+ * ###CONFIRM_URL### The link to click on to confirm the account action.
+ * ###SITENAME### The name of the site.
+ * ###SITEURL### The URL to the site.
+ *
+ * @since 4.9.6
+ *
+ * @param string $email_text Text in the email.
+ * @param array $email_data {
+ * Data relating to the account action email.
+ *
+ * @type WP_User_Request $request User request object.
+ * @type string $email The email address this is being sent to.
+ * @type string $description Description of the action being performed so the user knows what the email is for.
+ * @type string $confirm_url The link to click on to confirm the account action.
+ * @type string $sitename The site name sending the mail.
+ * @type string $siteurl The site URL sending the mail.
+ * }
+ */
+ $content = apply_filters( 'user_request_action_email_content', $email_text, $email_data );
+
+ $content = str_replace( '###DESCRIPTION###', $email_data['description'], $content );
+ $content = str_replace( '###CONFIRM_URL###', esc_url_raw( $email_data['confirm_url'] ), $content );
+ $content = str_replace( '###EMAIL###', $email_data['email'], $content );
+ $content = str_replace( '###SITENAME###', $email_data['sitename'], $content );
+ $content = str_replace( '###SITEURL###', esc_url_raw( $email_data['siteurl'] ), $content );
+
+ /* translators: Privacy data request subject. 1: Site name, 2: Name of the action */
+ $subject = sprintf( __( '[%1$s] Confirm Action: %2$s' ), $email_data['sitename'], $email_data['description'] );
+
+ /**
+ * Filters the subject of the email sent when an account action is attempted.
+ *
+ * @since 4.9.6
+ *
+ * @param string $subject The email subject.
+ * @param string $sitename The name of the site.
+ * @param array $email_data {
+ * Data relating to the account action email.
+ *
+ * @type WP_User_Request $request User request object.
+ * @type string $email The email address this is being sent to.
+ * @type string $description Description of the action being performed so the user knows what the email is for.
+ * @type string $confirm_url The link to click on to confirm the account action.
+ * @type string $sitename The site name sending the mail.
+ * @type string $siteurl The site URL sending the mail.
+ * }
+ */
+ $subject = apply_filters( 'user_request_action_email_subject', $subject, $email_data['sitename'], $email_data );
+
+ return wp_mail( $email_data['email'], $subject, $content );
+}
+
+/**
+ * Returns a confirmation key for a user action and stores the hashed version for future comparison.
+ *
+ * @since 4.9.6
+ *
+ * @param int $request_id Request ID.
+ * @return string Confirmation key.
+ */
+function wp_generate_user_request_key( $request_id ) {
+ global $wp_hasher;
+
+ // Generate something random for a confirmation key.
+ $key = wp_generate_password( 20, false );
+
+ // Return the key, hashed.
+ if ( empty( $wp_hasher ) ) {
+ require_once ABSPATH . WPINC . '/class-phpass.php';
+ $wp_hasher = new PasswordHash( 8, true );
+ }
+
+ wp_update_post( array(
+ 'ID' => $request_id,
+ 'post_status' => 'request-pending',
+ 'post_password' => $wp_hasher->HashPassword( $key ),
+ 'post_modified' => current_time( 'mysql', false ),
+ 'post_modified_gmt' => current_time( 'mysql', true ),
+ ) );
+
+ return $key;
+}
+
+/**
+ * Validate a user request by comparing the key with the request's key.
+ *
+ * @since 4.9.6
+ *
+ * @param string $request_id ID of the request being confirmed.
+ * @param string $key Provided key to validate.
+ * @return bool|WP_Error WP_Error on failure, true on success.
+ */
+function wp_validate_user_request_key( $request_id, $key ) {
+ global $wp_hasher;
+
+ $request_id = absint( $request_id );
+ $request = wp_get_user_request_data( $request_id );
+
+ if ( ! $request ) {
+ return new WP_Error( 'user_request_error', __( 'Invalid request.' ) );
+ }
+
+ if ( ! in_array( $request->status, array( 'request-pending', 'request-failed' ), true ) ) {
+ return __( 'This link has expired.' );
+ }
+
+ if ( empty( $key ) ) {
+ return new WP_Error( 'invalid_key', __( 'Invalid key' ) );
+ }
+
+ if ( empty( $wp_hasher ) ) {
+ require_once ABSPATH . WPINC . '/class-phpass.php';
+ $wp_hasher = new PasswordHash( 8, true );
+ }
+
+ $key_request_time = $request->modified_timestamp;
+ $saved_key = $request->confirm_key;
+
+ if ( ! $saved_key ) {
+ return new WP_Error( 'invalid_key', __( 'Invalid key' ) );
+ }
+
+ if ( ! $key_request_time ) {
+ return new WP_Error( 'invalid_key', __( 'Invalid action' ) );
+ }
+
+ /**
+ * Filters the expiration time of confirm keys.
+ *
+ * @since 4.9.6
+ *
+ * @param int $expiration The expiration time in seconds.
+ */
+ $expiration_duration = (int) apply_filters( 'user_request_key_expiration', DAY_IN_SECONDS );
+ $expiration_time = $key_request_time + $expiration_duration;
+
+ if ( ! $wp_hasher->CheckPassword( $key, $saved_key ) ) {
+ return new WP_Error( 'invalid_key', __( 'Invalid key' ) );
+ }
+
+ if ( ! $expiration_time || time() > $expiration_time ) {
+ return new WP_Error( 'expired_key', __( 'The confirmation email has expired.' ) );
+ }
+
+ return true;
+}
+
+/**
+ * Return data about a user request.
+ *
+ * @since 4.9.6
+ *
+ * @param int $request_id Request ID to get data about.
+ * @return WP_User_Request|false
+ */
+function wp_get_user_request_data( $request_id ) {
+ $request_id = absint( $request_id );
+ $post = get_post( $request_id );
+
+ if ( ! $post || 'user_request' !== $post->post_type ) {
+ return false;
+ }
+
+ return new WP_User_Request( $post );
+}
+
+/**
+ * WP_User_Request class.
+ *
+ * Represents user request data loaded from a WP_Post object.
+ *
+ * @since 4.9.6
+ */
+final class WP_User_Request {
+ /**
+ * Request ID.
+ *
+ * @var int
+ */
+ public $ID = 0;
+
+ /**
+ * User ID.
+ *
+ * @var int
+ */
+
+ public $user_id = 0;
+
+ /**
+ * User email.
+ *
+ * @var int
+ */
+ public $email = '';
+
+ /**
+ * Action name.
+ *
+ * @var string
+ */
+ public $action_name = '';
+
+ /**
+ * Current status.
+ *
+ * @var string
+ */
+ public $status = '';
+
+ /**
+ * Timestamp this request was created.
+ *
+ * @var int|null
+ */
+ public $created_timestamp = null;
+
+ /**
+ * Timestamp this request was last modified.
+ *
+ * @var int|null
+ */
+ public $modified_timestamp = null;
+
+ /**
+ * Timestamp this request was confirmed.
+ *
+ * @var int
+ */
+ public $confirmed_timestamp = null;
+
+ /**
+ * Timestamp this request was completed.
+ *
+ * @var int
+ */
+ public $completed_timestamp = null;
+
+ /**
+ * Misc data assigned to this request.
+ *
+ * @var array
+ */
+ public $request_data = array();
+
+ /**
+ * Key used to confirm this request.
+ *
+ * @var string
+ */
+ public $confirm_key = '';
+
+ /**
+ * Constructor.
+ *
+ * @since 4.9.6
+ *
+ * @param WP_Post|object $post Post object.
+ */
+ public function __construct( $post ) {
+ $this->ID = $post->ID;
+ $this->user_id = $post->post_author;
+ $this->email = $post->post_title;
+ $this->action_name = $post->post_name;
+ $this->status = $post->post_status;
+ $this->created_timestamp = strtotime( $post->post_date_gmt );
+ $this->modified_timestamp = strtotime( $post->post_modified_gmt );
+ $this->confirmed_timestamp = (int) get_post_meta( $post->ID, '_wp_user_request_confirmed_timestamp', true );
+ $this->completed_timestamp = (int) get_post_meta( $post->ID, '_wp_user_request_completed_timestamp', true );
+ $this->request_data = json_decode( $post->post_content, true );
+ $this->confirm_key = $post->post_password;
+ }
+}
*
* @global string $wp_version
*/
-$wp_version = '4.9.5';
+$wp_version = '4.9.8';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
*
* @global string $tinymce_version
*/
-$tinymce_version = '4607-20180123';
+$tinymce_version = '4800-20180716';
/**
* Holds the required PHP version
global $wp_registered_sidebars;
- if ( isset($wp_registered_sidebars[$id]['description']) )
- return esc_html( $wp_registered_sidebars[$id]['description'] );
+ if ( isset( $wp_registered_sidebars[ $id ]['description'] ) ) {
+ return wp_kses( $wp_registered_sidebars[ $id ]['description'], 'sidebar_description' );
+ }
}
/**
* @param string $title Optional. WordPress login Page title to display in the `<title>` element.
* Default 'Log In'.
* @param string $message Optional. Message to display in header. Default empty.
- * @param WP_Error $wp_error Optional. The error to pass. Default empty.
+ * @param WP_Error $wp_error Optional. The error to pass. Default is a WP_Error instance.
*/
-function login_header( $title = 'Log In', $message = '', $wp_error = '' ) {
+function login_header( $title = 'Log In', $message = '', $wp_error = null ) {
global $error, $interim_login, $action;
// Don't index any of these forms
add_action( 'login_head', 'wp_login_viewport_meta' );
- if ( empty($wp_error) )
+ if ( ! is_wp_error( $wp_error ) ) {
$wp_error = new WP_Error();
+ }
// Shake it!
$shake_error_codes = array( 'empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password' );
/* translators: %s: site title */
printf( _x( '← Back to %s', 'site' ), get_bloginfo( 'title', 'display' ) );
?></a></p>
+ <?php the_privacy_policy_link( '<div class="privacy-policy-page-link">', '</div>' ); ?>
<?php endif; ?>
</div>
$action = 'resetpass';
// validate action so as to default to the login screen
-if ( !in_array( $action, array( 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login' ), true ) && false === has_filter( 'login_form_' . $action ) )
+if ( !in_array( $action, array( 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login', 'confirmaction' ), true ) && false === has_filter( 'login_form_' . $action ) )
$action = 'login';
nocache_headers();
break;
+case 'confirmaction' :
+ if ( ! isset( $_GET['request_id'] ) ) {
+ wp_die( __( 'Invalid request.' ) );
+ }
+
+ $request_id = (int) $_GET['request_id'];
+
+ if ( isset( $_GET['confirm_key'] ) ) {
+ $key = sanitize_text_field( wp_unslash( $_GET['confirm_key'] ) );
+ $result = wp_validate_user_request_key( $request_id, $key );
+ } else {
+ $result = new WP_Error( 'invalid_key', __( 'Invalid key' ) );
+ }
+
+ if ( is_wp_error( $result ) ) {
+ wp_die( $result );
+ }
+
+ /**
+ * Fires an action hook when the account action has been confirmed by the user.
+ *
+ * Using this you can assume the user has agreed to perform the action by
+ * clicking on the link in the confirmation email.
+ *
+ * After firing this action hook the page will redirect to wp-login a callback
+ * redirects or exits first.
+ *
+ * @param int $request_id Request ID.
+ */
+ do_action( 'user_request_action_confirmed', $request_id );
+
+ $message = _wp_privacy_account_request_confirmed_message( $request_id );
+
+ login_header( __( 'User action confirmed.' ), $message );
+ login_footer();
+ exit;
+
case 'login' :
default:
$secure_cookie = '';
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
+nocache_headers();
+
if ( is_array( get_site_option( 'illegal_names' )) && isset( $_GET[ 'new' ] ) && in_array( $_GET[ 'new' ], get_site_option( 'illegal_names' ) ) ) {
wp_redirect( network_home_url() );
die();